ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhZDhlZgotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTA0IEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDExIE5lc3QsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlZmlsZSBmb3IgbmN1cnNlcywgYSBTeXN0ZW0gViBjdXJzZXMKKyMgICAgICByZXBsYWNlbWVudCwgaXRzZWxmIGEgcHJvZ3JhbW1pbmcgbGlicmFyeSBwcm92aWRpbmcgYW4gQVBJLCBmb3IKKyMgICAgICB0ZXJtaW5hbC1pbmRlcGVuZGVudCBzY3JlZW4gY29udHJvbC4KKyMKKworQnVpbGRDb25maWdTcGVjaWFsaXplZAk6PSBObworQnVpbGRQcm9kdWN0U3BlY2lhbGl6ZWQJOj0gTm8KKworaW5jbHVkZSBwcmUubWFrCisKK1BhY2thZ2VOYW1lCQk6PSBuY3Vyc2VzCisKK1BhY2thZ2VFeHRlbnNpb24JOj0gdGFyLmd6CitQYWNrYWdlU2VwYXJhdG9yCTo9IC0KKworUGFja2FnZVBhdGNoQXJncwk6PQorCitQYWNrYWdlQXJjaGl2ZQkJOj0gJChQYWNrYWdlTmFtZSkuJChQYWNrYWdlRXh0ZW5zaW9uKQorUGFja2FnZVNvdXJjZURpcgk6PSAkKFBhY2thZ2VOYW1lKSQoUGFja2FnZVNlcGFyYXRvcikkKFBhY2thZ2VWZXJzaW9uKQorCitQYWNrYWdlQnVpbGRNYWtlZmlsZQk9ICQoY2FsbCBHZW5lcmF0ZUJ1aWxkUGF0aHMsTWFrZWZpbGUpCisKK0NsZWFuUGF0aHMJCSs9ICQoUGFja2FnZUxpY2Vuc2VGaWxlKQorCithbGw6ICQoUGFja2FnZURlZmF1bHRHb2FsKQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGxpY2Vuc2UgY29udGVudHMuCisKKyQoUGFja2FnZVNvdXJjZURpcikvUkVBRE1FOiBzb3VyY2UKKworJChQYWNrYWdlTGljZW5zZUZpbGUpOiAkKFBhY2thZ2VTb3VyY2VEaXIpL1JFQURNRQorCSQoVmVyYm9zZSloZWFkIC1uIDI3IDwgJDwgPiAkQAorCisjIEV4dHJhY3QgdGhlIHNvdXJjZSBmcm9tIHRoZSBhcmNoaXZlIGFuZCBhcHBseSBwYXRjaGVzLCBpZiBhbnkuCisKKyQoUGFja2FnZVNvdXJjZURpcik6ICQoUGFja2FnZUFyY2hpdmUpICQoUGFja2FnZVBhdGNoUGF0aHMpCisJJChleHBhbmQtYW5kLXBhdGNoLXBhY2thZ2UpCisKKyMgUHJlcGFyZSB0aGUgc291cmNlcy4KKworLlBIT05ZOiBzb3VyY2UKK3NvdXJjZTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpCisKKyMgUGF0Y2ggdGhlIHNvdXJjZXMsIGlmIG5lY2Vzc2FyeS4KKworLlBIT05ZOiBwYXRjaAorcGF0Y2g6IHNvdXJjZQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGJ1aWxkIG1ha2VmaWxlLgorCiskKFBhY2thZ2VCdWlsZE1ha2VmaWxlKTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpICQoQnVpbGREaXJlY3RvcnkpICQoUmVzdWx0RGlyZWN0b3J5KQorCSQoVmVyYm9zZSljZCAkKEJ1aWxkRGlyZWN0b3J5KSAmJiBcCisJJChDVVJESVIpLyQoUGFja2FnZVNvdXJjZURpcikvY29uZmlndXJlIFwKKwlDQz0iJChDQykiIENYWD0iJChDWFgpIiBBUj0kKEFSKSBOTT0kKE5NKSBSQU5MSUI9JChSQU5MSUIpIFNUUklQPSQoU1RSSVApIFwKKwlJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorCS0tYnVpbGQ9JChIb3N0VHVwbGUpIFwKKwktLWhvc3Q9JChUYXJnZXRUdXBsZSkgXAorCS0td2l0aC1zaGFyZWQgXAorCS0td2l0aG91dC1kZWJ1ZyBcCisJLS1wcmVmaXg9L3VzciBcCisJLS1zeXNjb25mZGlyPS9ldGMgXAorCS0tbG9jYWxzdGF0ZWRpcj0vdmFyCisKKyMgQ29uZmlndXJlIHRoZSBzb3VyY2UgZm9yIGJ1aWxkaW5nLgorCisuUEhPTlk6IGNvbmZpZ3VyZQorY29uZmlndXJlOiBzb3VyY2UgJChQYWNrYWdlQnVpbGRNYWtlZmlsZSkKKworIyBCdWlsZCB0aGUgc291cmNlLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorCisuUEhPTlk6IGJ1aWxkCitidWlsZDogY29uZmlndXJlCisJJChWZXJib3NlKXVuc2V0IE1BS0VGTEFHUyAmJiBcCisJJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkRGlyZWN0b3J5KSBhbGwKKworIyBTdGFnZSB0aGUgYnVpbGQgdG8gYSB0ZW1wb3JhcnkgaW5zdGFsbGF0aW9uIGFyZWEuCisjCisjIFdlIGhhdmUgdG8gdW5zZXQgTUFLRUZMQUdTIHNpbmNlIHRoZXkgY29uZnVzZSB0aGUgcGFja2FnZSBidWlsZCBvdGhlcndpc2UuCisKKy5QSE9OWTogc3RhZ2UKK3N0YWdlOiBidWlsZCB8ICQoUmVzdWx0RGlyZWN0b3J5KQorCSQoVmVyYm9zZSl1bnNldCBNQUtFRkxBR1MgJiYgXAorCSQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZERpcmVjdG9yeSkgREVTVERJUj0kKFJlc3VsdERpcmVjdG9yeSkgaW5zdGFsbAorCitjbGVhbjoKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKFBhY2thZ2VTb3VyY2VEaXIpCisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChCdWlsZERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKFJlc3VsdERpcmVjdG9yeSkKKworaW5jbHVkZSBwb3N0Lm1hawpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQU5OT1VOQ0UgYi9uY3Vyc2VzLTUuNy9BTk5PVU5DRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDllNzMxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQU5OT1VOQ0UKQEAgLTAsMCArMSw0NzMgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm5vdW5jaW5nIG5jdXJzZXMgNS43CisKKyAgIFRoZSAgbmN1cnNlcyAgKG5ldyAgY3Vyc2VzKSAgbGlicmFyeSAgaXMgIGEgZnJlZSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YKKyAgIGN1cnNlcyAgaW4gIFN5c3RlbSAgViAgUmVsZWFzZSA0LjAsIGFuZCBtb3JlLiBJdCB1c2VzIHRlcm1pbmZvIGZvcm1hdCwKKyAgIHN1cHBvcnRzICBwYWRzICBhbmQgY29sb3IgYW5kIG11bHRpcGxlIGhpZ2hsaWdodHMgYW5kIGZvcm1zIGNoYXJhY3RlcnMKKyAgIGFuZCAgIGZ1bmN0aW9uLWtleSAgIG1hcHBpbmcsICAgYW5kICBoYXMgIGFsbCAgdGhlICBvdGhlciAgU1lTVi1jdXJzZXMKKyAgIGVuaGFuY2VtZW50cyBvdmVyIEJTRCBjdXJzZXMuCisKKyAgIEluICBtaWQtSnVuZSAgMTk5NSwgIHRoZSAgbWFpbnRhaW5lciBvZiA0LjRCU0QgY3Vyc2VzIGRlY2xhcmVkIHRoYXQgaGUKKyAgIGNvbnNpZGVyZWQgIDQuNEJTRCBjdXJzZXMgb2Jzb2xldGUsIGFuZCBlbmNvdXJhZ2VkIHRoZSBrZWVwZXJzIG9mIFVuaXgKKyAgIHJlbGVhc2VzIHN1Y2ggYXMgQlNEL09TLCBGcmVlQlNEIGFuZCBOZXRCU0QgdG8gc3dpdGNoIG92ZXIgdG8gbmN1cnNlcy4KKworICAgVGhlIG5jdXJzZXMgY29kZSB3YXMgZGV2ZWxvcGVkIHVuZGVyIEdOVS9MaW51eC4gSXQgaGFzIGJlZW4gaW4gdXNlIGZvcgorICAgc29tZSAgdGltZSAgd2l0aCAgT3BlbkJTRCBhcyB0aGUgc3lzdGVtIGN1cnNlcyBsaWJyYXJ5LCBhbmQgb24gRnJlZUJTRAorICAgYW5kICBOZXRCU0QgIGFzICBhbiAgZXh0ZXJuYWwgIHBhY2thZ2UuICBJdCAgc2hvdWxkIHBvcnQgZWFzaWx5IHRvIGFueQorICAgQU5TSS9QT1NJWC1jb25mb3JtaW5nIFVOSVguIEl0IGhhcyBldmVuIGJlZW4gcG9ydGVkIHRvIE9TLzIgV2FycCEKKworICAgVGhlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyB0aGUgbGlicmFyeSBhbmQgc3VwcG9ydCB1dGlsaXRpZXMsIGluY2x1ZGluZworICAgYSAgIHRlcm1pbmZvICBjb21waWxlciAgdGljKDEpLCAgYSAgZGVjb21waWxlciAgaW5mb2NtcCgxKSwgIGNsZWFyKDEpLAorICAgdHB1dCgxKSwgIHRzZXQoMSksICBhbmQgIGEgIHRlcm1jYXAgY29udmVyc2lvbiB0b29sIGNhcHRvaW5mbygxKS4gRnVsbAorICAgbWFudWFsIHBhZ2VzIGFyZSBwcm92aWRlZCBmb3IgdGhlIGxpYnJhcnkgYW5kIHRvb2xzLgorCisgICBUaGUgIG5jdXJzZXMgIGRpc3RyaWJ1dGlvbiAgaXMgIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIEZUUCBhdCB0aGUgR05VCisgICBkaXN0cmlidXRpb24gc2l0ZSBbMV1mdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbmN1cnNlcy8gLgorICAgSXQgaXMgYWxzbyBhdmFpbGFibGUgYXQgWzJdZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy8gLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCisKKyAgIFRoaXMgIHJlbGVhc2UgIGlzICBkZXNpZ25lZCAgdG8gIGJlIHVwd2FyZCBjb21wYXRpYmxlIGZyb20gbmN1cnNlcyA1LjAKKyAgIHRocm91Z2ggICA1LjY7ICB2ZXJ5ICBmZXcgIGFwcGxpY2F0aW9ucyAgd2lsbCAgcmVxdWlyZSAgcmVjb21waWxhdGlvbiwKKyAgIGRlcGVuZGluZyAgIG9uICB0aGUgIHBsYXRmb3JtLiAgVGhlc2UgIGFyZSAgdGhlICBoaWdobGlnaHRzICBmcm9tICB0aGUKKyAgIGNoYW5nZS1sb2cgc2luY2UgbmN1cnNlcyA1LjYgcmVsZWFzZS4KKworICAgSW50ZXJmYWNlIGNoYW5nZXM6CisgICAgICogZ2VuZXJhdGUgbGlua2FibGUgc3R1YnMgZm9yIHNvbWUgbWFjcm9zOgorICAgICAgIGdldGF0dHJzCisKKyAgIE5ldyBmZWF0dXJlcyBhbmQgaW1wcm92ZW1lbnRzOgorICAgICAqIGxpYnJhcnkKKyAgICAgICAgICArIG5ldyAgZmxhdm9yICBvZiAgdGhlICBuY3Vyc2VzICBsaWJyYXJ5ICBwcm92aWRlcyAgcnVkaW1lbnRhcnkKKyAgICAgICAgICAgIHN1cHBvcnQgIGZvciAgUE9TSVggdGhyZWFkcy4gU2V2ZXJhbCBmdW5jdGlvbnMgYXJlIHJlZW50cmFudCwKKyAgICAgICAgICAgIGJ1dCBtb3N0IHJlcXVpcmUgZWl0aGVyIGEgd2luZG93LWxldmVsIG9yIHNjcmVlbi1sZXZlbCBtdXRleC4KKyAgICAgICAgICAgIChUaGlzICBpcyAgQVBJLWNvbXBhdGlibGUsICBidXQgIG5vdCAgQUJJLWNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgICAgICAgIG5vcm1hbCBsaWJyYXJ5KS4KKyAgICAgICAgICArIGFkZCAgTkNVUlNFU19PUEFRVUUgIHN5bWJvbCAgdG8gIGN1cnNlcy5oLCAgd2lsbCAgdXNlIHRvIG1ha2UKKyAgICAgICAgICAgIHN0cnVjdHMgb3BhcXVlIGluIHNlbGVjdGVkIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICsgYWRkICAgTkNVUlNFU19FWFRfRlVOQ1MgIGFuZCAgTkNVUlNFU19FWFRfQ09MT1JTICBzeW1ib2xzICB0bworICAgICAgICAgICAgY3Vyc2VzLmggdG8gbWFrZSBpdCBzaW1wbGVyIHRvIHRlbGwgaWYgdGhlIGV4dGVuZGVkIGZ1bmN0aW9ucworICAgICAgICAgICAgYW5kL29yIGNvbG9ycyBhcmUgZGVjbGFyZWQuCisgICAgICAgICAgKyBhZGQgd3Jlc2l6ZSgpIHRvIEMrKyBiaW5kaW5nCisgICAgICAgICAgKyBlbGltaW5hdGUgZml4ZWQtYnVmZmVyIHZzcHJpbnRmKCkgY2FsbHMgaW4gQysrIGJpbmRpbmcuCisgICAgICAgICAgKyBhZGQgIHNldmVyYWwgIGZ1bmN0aW9ucyB0byBDKysgYmluZGluZyB3aGljaCB3cmFwIEMgZnVuY3Rpb25zCisgICAgICAgICAgICB0aGF0IHBhc3MgYSBXSU5ET1cqIHBhcmFtZXRlci4KKyAgICAgICAgICArIGFkYXB0IG1vdXNlLWhhbmRsaW5nIGNvZGUgZnJvbSBtZW51IGxpYnJhcnkgaW4gZm9ybS1saWJyYXJ5CisgICAgICAgICAgKyBpbXByb3ZlICB0cmFjaW5nICBmb3IgIGZvcm0gIGxpYnJhcnksICBzaG93aW5nIGNyZWF0ZWQgZm9ybXMsCisgICAgICAgICAgICBmaWVsZHMsIGV0Yy4KKyAgICAgICAgICArIG1ha2UgJE5DVVJTRVNfTk9fUEFERElORyBmZWF0dXJlIHdvcmsgZm9yIHRlcm1jYXAgaW50ZXJmYWNlIC4KKyAgICAgICAgICArIGFkZCAgY2hlY2sgIHRvICB0cmFjZS1maWxlICBvcGVuLCAgaWYgIHRoZSAgZ2l2ZW4gIG5hbWUgIGlzIGEKKyAgICAgICAgICAgIGRpcmVjdG9yeSwgYWRkICIubG9nIiB0byB0aGUgbmFtZSBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICsgc2V2ZXJhbCAgIG5ldyAgIG1hbnBhZ2VzOiAgY3Vyc19sZWdhY3kuM3gsICBjdXJzX21lbWxlYWtzLjN4LAorICAgICAgICAgICAgY3Vyc19vcGFxdWUuM3ggYW5kIGN1cnNfdGhyZWFkcy4zeAorICAgICAqIHByb2dyYW1zOgorICAgICAgICAgICsgbW9kaWZpZWQgIHRocmVlICB0ZXN0LXByb2dyYW1zICB0byAgZGVtb25zdHJhdGUgdGhlIHRocmVhZGluZworICAgICAgICAgICAgc3VwcG9ydCBpbiB0aGlzIHZlcnNpb246IGRpdHRvLCByYWluLCB3b3JtLgorICAgICAgICAgICsgc2V2ZXJhbCAgICBuZXcgICAgdGVzdC1wcm9ncmFtczogICBkZW1vX3BhbmVscywgICBkb3RzX212Y3VyLAorICAgICAgICAgICAgaW5jaF93aWRlLCAgICBpbmNocywgICAga2V5X25hbWUsICAgIGtleV9uYW1lcywgICBzYXZlc2NyZWVuLAorICAgICAgICAgICAgc2F2ZXNjcmVlbi5zaCAgICB0ZXN0X2FycmF5cywgICB0ZXN0X2dldF93c3RyLCAgIHRlc3RfZ2V0c3RyLAorICAgICAgICAgICAgdGVzdF9pbnN0ciwgdGVzdF9pbndzdHIgYW5kIHRlc3Rfb3BhcXVlLgorICAgICAgICAgICsgYWRkIGFkYWN1cnNlcy1jb25maWcgdG8gdGhlIEFkYTk1IGluc3RhbGwuCisgICAgICAgICAgKyBtb2RpZnkgIHRpYyAgLWYgb3B0aW9uIHRvIGZvcm1hdCBzcGFjZXMgYXMgXHMgdG8gcHJldmVudCB0aGVtCisgICAgICAgICAgICBmcm9tICBiZWluZyAgbG9zdCAgd2hlbiAgdGhhdCAgaXMgIHJlYWQgIGJhY2sgIGluIHVuZm9ybWF0dGVkCisgICAgICAgICAgICBzdHJpbmdzLgorICAgICAgICAgICsgVGhlIHRhY2sgcHJvZ3JhbSBpcyBub3cgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSBmcm9tIG5jdXJzZXMuCisgICAgICogdGVybWluYWwgZGF0YWJhc2UKKyAgICAgICAgICArIGFkZGVkIGVudHJpZXM6CisgICAgICAgICAgICAgICBvIEV0ZXJtLTI1NmNvbG9yLCBFdGVybS04OGNvbG9yIGFuZCByeHZ0LTg4Y29sb3IKKyAgICAgICAgICAgICAgIG8gYXRlcm0KKyAgICAgICAgICAgICAgIG8ga29uc29sZS0yNTZjb2xvcgorICAgICAgICAgICAgICAgbyBtcnh2dAorICAgICAgICAgICAgICAgbyBzY3JlZW4ubWx0ZXJtCisgICAgICAgICAgICAgICBvIHNjcmVlbi5yeHZ0CisgICAgICAgICAgICAgICBvIHRlcmF0ZXJtNC41OSAgaXMgbm93IHRoZSBwcmltYXJ5IHByaW1hcnkgdGVyYXRlcm0gZW50cnksCisgICAgICAgICAgICAgICAgIHJlbmFtZWQgb3JpZ2luYWwgdG8gdGVyYXRlcm0yLjMKKyAgICAgICAgICAgICAgIG8gOXRlcm0gdGVybWluYWwKKyAgICAgICAgICAgICAgIG8gTmV3YnVyeSBEYXRhIGVudHJpZXMKKyAgICAgICAgICArIHVwZGF0ZWQvaW1wcm92ZWQgZW50cmllczoKKyAgICAgICAgICAgICAgIG8gZ25vbWUgdG8gdmVyc2lvbiAyLjIyLjMKKyAgICAgICAgICAgICAgIG8gaDE5LCB6MTAwCisgICAgICAgICAgICAgICBvIGtvbnNvbGUgdG8gdmVyc2lvbiAxLjYuNgorICAgICAgICAgICAgICAgbyBtbHRlcm0sIG1sdGVybStwY2ZrZXlzCisgICAgICAgICAgICAgICBvIHh0ZXJtLCBhbmQgYnVpbGRpbmctYmxvY2tzIGZvciBmdW5jdGlvbi1rZXlzIHRvIFszXXh0ZXJtCisgICAgICAgICAgICAgICAgIHBhdGNoICMyMzAuCisKKyAgIE1ham9yIGJ1ZyBmaXhlczoKKyAgICAgKiBhZGQgICBsb2dpYyAgIHRvICAgdGljICBmb3IgIGNhbmNlbGxpbmcgIHN0cmluZ3MgIGluICB1c2VyLWRlZmluZWQKKyAgICAgICBjYXBhYmlsaXRpZXMgKHRoaXMgaXMgbmVlZGVkIGZvciBjdXJyZW50IGtvbnNvbGUgdGVybWluZm8gZW50cnkpLgorICAgICAqIG1vZGlmeSAgbWstMXN0LmF3ayAgc28gdGhlIGdlbmVyYXRlZCBtYWtlZmlsZSBydWxlcyBmb3IgbGlua2luZyBvcgorICAgICAgIGluc3RhbGxpbmcgIHNoYXJlZCAgbGlicmFyaWVzICBkbyBub3QgZmlyc3QgcmVtb3ZlIHRoZSBsaWJyYXJ5LCBpbgorICAgICAgIGNhc2UgaXQgaXMgaW4gdXNlLCBlLmcuLCBsaWJuY3Vyc2VzLnNvIGJ5IC9iaW4vc2guCisgICAgICogY29ycmVjdCBjaGVjayBmb3Igbm90aW1lb3V0KCkgaW4gd2dldGNoKCkuCisgICAgICogZml4IGEgc2lnbi1leHRlbnNpb24gYnVnIGluIGluZm9jbXAncyByZXBhaXJfYWNzYygpIGZ1bmN0aW9uLgorICAgICAqIGNoYW5nZSB3aW5uc3RyKCkgdG8gc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICAgICAqIG1ha2UgQWRhOTUgZGVtb19wYW5lbHMoKSBleGFtcGxlIHdvcmsuCisgICAgICogZml4IGZvciBhZGRpbmcgYSBub24tc3BhY2luZyBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisgICAgICogZmlsbCAgIGluICAgZXh0ZW5kZWQtY29sb3IgICBwYWlyICAgdG8gICBtYWtlICAgY29sb3JzICAgd29yayAgZm9yCisgICAgICAgd2lkZS1jaGFyYWN0ZXJzIHVzaW5nIGV4dGVuZGVkLWNvbG9ycy4KKyAgICAgKiBpbXByb3ZlICByZWZyZXNoICBvZiAgd2luZG93ICBvbiAgdG9wICBvZiBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycywKKyAgICAgICB0YWtpbmcgICBpbnRvICAgYWNjb3VudCAgc3BsaXQgIGNoYXJhY3RlcnMgIG9uICBsZWZ0L3JpZ2h0ICB3aW5kb3cKKyAgICAgICBib3VuZGFyaWVzLgorICAgICAqIG1vZGlmeSAgd2luX3djaG5zdHIoKSAgdG8gZW5zdXJlIHRoYXQgb25seSBhIGJhc2UgY2VsbCBpcyByZXR1cm5lZAorICAgICAgIGZvciBlYWNoIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXIuCisgICAgICogaW1wcm92ZSB3YWRkY2goKSBhbmQgd2luc2NoKCkgaGFuZGxpbmcgb2YgRUlMU0VRIGZyb20gbWJydG93YygpIGJ5CisgICAgICAgdXNpbmcgIHVuY3RybCgpICB0byAgZGlzcGxheSAgaWxsZWdhbCAgYnl0ZXMgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisgICAgICAgYXBwZW5kIGZ1cnRoZXIgYnl0ZXMgdG8gbWFrZSB1cCBhIHZhbGlkIHNlcXVlbmNlLgorICAgICAqIHJlc3RvcmUgY3Vyc19zZXQoKSBzdGF0ZSBhZnRlciBlbmR3aW4oKS9yZWZyZXNoKCkKKyAgICAgKiBtb2RpZnkgIGtleW5hbWUoKSB0byB1c2UgIl5YIiBmb3JtIG9ubHkgaWYgbWV0YSgpIGhhcyBiZWVuIGNhbGxlZCwKKyAgICAgICBvciAgaWYgIGtleW5hbWUoKSBpcyBjYWxsZWQgd2l0aG91dCBpbml0aWFsaXppbmcgY3Vyc2VzLCBlLmcuLCB2aWEKKyAgICAgICBpbml0c2NyKCkgb3IgbmV3dGVybSgpLgorICAgICAqIG1vZGlmeSAgdW5jdHJsKCkgdG8gY2hlY2sgY29kZXMgaW4gMTI4LTI1NSByYW5nZSB2ZXJzdXMgaXNwcmludCgpLgorICAgICAgIElmICB0aGV5ICBhcmUgbm90IHByaW50YWJsZSwgYW5kIGxvY2FsZSB3YXMgc2V0LCB1c2UgYSAiTS0iIG9yICJ+IgorICAgICAgIHNlcXVlbmNlLgorICAgICAqIGltcHJvdmUgIHJlc2l6ZXRlcm0oKSAgYnkgIG1vdmluZyByaXBwZWQtb2ZmIGxpbmVzLCBhbmQgcmVwYWludGluZworICAgICAgIHRoZSBzb2Z0LWtleXMuCisgICAgICogbW9kaWZ5ICBmb3JtICBsaWJyYXJ5IHRvIGFjY2VwdCBjb250cm9sIGNoYXJhY3RlcnMgc3VjaCBhcyBuZXdsaW5lCisgICAgICAgaW4gc2V0X2ZpZWxkX2J1ZmZlcigpLCB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggU29sYXJpcy4KKyAgICAgKiB1c2UgIE5DVVJTRVNfTU9VU0VfTUFTSygpIGluIGRlZmluaXRpb24gb2YgQlVUVE9OX1JFTEVBU0UoKSwgZXRjLiwKKyAgICAgICB0byAgIG1ha2UgICB0aG9zZSAgIHdvcmsgICBwcm9wZXJseSAgd2l0aCAgdGhlICAtLWVuYWJsZS1leHQtbW91c2UKKyAgICAgICBjb25maWd1cmF0aW9uCisgICAgICogY29ycmVjdCAgc29tZSAgZnVuY3Rpb25zICBpbiBBZGE5NSBiaW5kaW5nIHdoaWNoIHdlcmUgdXNpbmcgcmV0dXJuCisgICAgICAgdmFsdWUgZnJvbSBDIHdoZXJlIG5vbmUgd2FzIHJldHVybmVkLgorICAgICAqIHJldmlld2VkL2ZpeGVkIGlzc3VlcyByZXBvcnRlZCBieSBDb3Zlcml0eSBhbmQgS2xvY3dvcmsgdG9vbHMuCisKKyAgIFBvcnRhYmlsaXR5OgorICAgICAqIGNvbmZpZ3VyZSBzY3JpcHQ6CisgICAgICAgICAgKyBuZXcgb3B0aW9uczoKKworICAgICAgICAgICAgICAtLWRpc2FibGUtYmlnLXN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICBjb250cm9sICB3aGV0aGVyIHN0YXRpYyBzdHJpbmcgdGFibGVzIGFyZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICBhcyAgIHNpbmdsZSAgIGxhcmdlICBzdHJpbmdzICAodG8gIGltcHJvdmUgIHN0YXJ0dXAKKyAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSksIG9yIGFzIGFycmF5IG9mIGluZGl2aWR1YWwgc3RyaW5ncy4KKworICAgICAgICAgICAgICAtLWRpc2FibGUtcmVsaW5rCisgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCAgIHdoZXRoZXIgIHNoYXJlZCAgbGlicmFyaWVzICBhcmUgIHJlbGlua2VkCisgICAgICAgICAgICAgICAgICAgICAgKGR1cmluZyBpbnN0YWxsKSB3aGVuIHJwYXRoIGlzIGVuYWJsZWQuCisKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLXRpYy1kZXBlbmRzCisgICAgICAgICAgICAgICAgICAgICAgbWFrZSAgIGV4cGxpY2l0ICB3aGV0aGVyICB0aWMgIGxpYnJhcnkgIGRlcGVuZHMgIG9uCisgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcy9uY3Vyc2VzdyBsaWJyYXJ5LgorCisgICAgICAgICAgICAgIC0tZW5hYmxlLW1peGVkLWNhc2UKKyAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSAgIHRoZSAgY29uZmlndXJlICBzY3JpcHQncyAgY2hlY2sgIGlmICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtICAgc3VwcG9ydHMgIG1peGVkLWNhc2UgIGZpbGVuYW1lcy4gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd3MgIG9uZSAgdG8gIGNvbnRyb2wgIGhvdyB0aGUgdGVybWluYWwgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICAgICAgICBtYXBzIHRvIHRoZSBmaWxlc3lzdGVtLiBGb3IgZmlsZXN5c3RlbXMgdGhhdCBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ICAgbWl4ZWQtY2FzZSwgIHRoZSAgbGlicmFyeSAgdXNlcyAgZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAyLWNoYXJhY3RlciAoaGV4YWRlY2ltYWwpIGNvZGVzIGZvciB0aGUgbG93ZXItbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZXN5c3RlbSB0ZXJtaW5mbyBkYXRhYmFzZQorCisgICAgICAgICAgICAgIC0tZW5hYmxlLXJlZW50cmFudAorICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcyAgYSAgZGlmZmVyZW50ICBmbGF2b3Igb2YgdGhlIG5jdXJzZXMgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAgIChuY3Vyc2VzdCkgIHdoaWNoICBpbXByb3ZlcyAgcmVlbnRyYW50ICB1c2UgIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgIGJ5ICByZWR1Y2luZyAgZ2xvYmFsICBhbmQgc3RhdGljIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgIChzZWUgIHRoZSAgIi0td2l0aC1wdGhyZWFkIiBvcHRpb24gZm9yIHRoZSB0aHJlYWRlZAorICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQpLgorCisgICAgICAgICAgICAgIC0tZW5hYmxlLXdlYWstc3ltYm9scworICAgICAgICAgICAgICAgICAgICAgIHVzZSAgd2Vhay1zeW1ib2xzICBmb3IgIGxpbmtpbmcgdG8gdGhlIFBPU0lYIHRocmVhZAorICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnksICBhbmQgIHVzZSAgdGhlIHNhbWUgc29uYW1lIGZvciB0aGUgbmN1cnNlcworICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCAgbGlicmFyeSAgYXMgdGhlIG5vcm1hbCBsaWJyYXJ5IChjYXZlYXQ6IHRoZQorICAgICAgICAgICAgICAgICAgICAgIEFCSSBpcyBmb3IgdGhlIHRocmVhZGVkIGxpYnJhcnksIHdoaWNoIG1ha2VzIGdsb2JhbAorICAgICAgICAgICAgICAgICAgICAgIGRhdGEgYWNjZXNzZWQgdmlhIGZ1bmN0aW9ucykuCisKKyAgICAgICAgICAgICAgLS13aXRoLXB0aHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICBidWlsZCAgd2l0aCAgdGhlICBQT1NJWCB0aHJlYWQgbGlicmFyeSAodGVzdGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICBBSVgsICAgTGludXgsICAgRnJlZUJTRCwgICBPcGVuQlNELCAgSFBVWCwgIElSSVg2NCwKKyAgICAgICAgICAgICAgICAgICAgICBTb2xhcmlzLCBUcnU2NCkuCisKKyAgICAgICAgICAgICAgLS13aXRoLXRpY2xpYgorICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkL2luc3RhbGwgICB0aGUgICB0aWMtc3VwcG9ydCAgZnVuY3Rpb25zICBpbiAgYQorICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlIGxpYnJhcnkKKworICAgICAgICAgICsgaW1wcm92ZWQgb3B0aW9uczoKKworICAgICAgICAgICAgICAtLWVuYWJsZS1leHQtY29sb3JzCisgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMgdGhlIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgICAgICAgLS13aXRoLWNodHlwZQorICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZSAgb3B0aW9uICB2YWx1ZSAidW5zaWduZWQiIGlzIGFsd2F5cyBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICAgIHRoZSAgIHR5cGUgICBpbiAgIGN1cnNlcy5oOyAgIGRvICAgdGhlICAgc2FtZSAgIGZvcgorICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1tbWFzay10LgorCisgICAgICAgICAgICAgIC0td2l0aC1kbWFsbG9jCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQtZml4IGZvciByZWRlZmluaXRpb24gb2Ygc3RybmR1cC4KKworICAgICAgICAgICAgICAtLXdpdGgtaGFzaGVkLWRiCisgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0cyAgYSBwYXJhbWV0ZXIgd2hpY2ggaXMgdGhlIGluc3RhbGwtcHJlZml4IG9mCisgICAgICAgICAgICAgICAgICAgICAgYSBnaXZlbiBCZXJrZWxleSBEYXRhYmFzZS4KKworICAgICAgICAgICAgICAtLXdpdGgtaGFzaGVkLWRiCisgICAgICAgICAgICAgICAgICAgICAgdGhlICRMSUJTIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyB0aGUgc2VhcmNoCisgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBkYiBsaWJyYXJ5LgorCisgICAgICAgICAgICAgIC0td2l0aG91dC1oYXNoZWQtZGIKKyAgICAgICAgICAgICAgICAgICAgICBhc3N1bWVkIHdoZW4gIi0tZGlzYWJsZS1kYXRhYmFzZSIgaXMgdXNlZC4KKworICAgICAqIG90aGVyIGNvbmZpZ3VyZS9idWlsZCBpc3N1ZXM6CisgICAgICAgICAgKyBidWlsZC1maXhlcyBmb3IgTHlueE9TCisgICAgICAgICAgKyBtb2RpZnkgIHNoYXJlZC1saWJyYXJ5ICBydWxlcyAgdG8gIGFsbG93ICBGcmVlQlNEICAzLnggdG8gdXNlCisgICAgICAgICAgICBycGF0aC4KKyAgICAgICAgICArIGJ1aWxkLWZpeCBmb3IgRnJlZUJTRCAiY29udGVtcG9yYXJ5IiBUVFkgaW50ZXJmYWNlLgorICAgICAgICAgICsgYnVpbGQtZml4ZXMgZm9yIEFJWCB3aXRoIGxpYnRvb2wuCisgICAgICAgICAgKyBidWlsZC1maXhlcyBmb3IgRGFyd2luIGFuZCBsaWJ0b29sLgorICAgICAgICAgICsgbW9kaWZ5IEJlT1Mtc3BlY2lmaWMgaWZkZWYncyB0byBidWlsZCBvbiBIYWlrdS4KKyAgICAgICAgICArIGNvcnJlY3RlZCAgZ2NjICBvcHRpb25zICBmb3IgIGJ1aWxkaW5nICBzaGFyZWQgIGxpYnJhcmllcyAgb24KKyAgICAgICAgICAgIFNvbGFyaXMgYW5kIElSSVg2NC4KKyAgICAgICAgICArIGNoYW5nZSAgc2hhcmVkLWxpYnJhcnkgIGNvbmZpZ3VyYXRpb24gZm9yIE9wZW5CU0QsIG1ha2UgcnBhdGgKKyAgICAgICAgICAgIHdvcmsuCisgICAgICAgICAgKyBidWlsZC1maXhlcyBmb3IgdXNpbmcgbGlidXRmOCwgZS5nLiwgb24gT3BlbkJTRCAzLjcKKyAgICAgICAgICArIGFkZCAgICItZSIgIG9wdGlvbiAgaW4gIG5jdXJzZXMvTWFrZWZpbGUuaW4gIHdoZW4gIGdlbmVyYXRpbmcKKyAgICAgICAgICAgIHNvdXJjZS1maWxlcyAgdG8gIGZvcmNlIGVhcmxpZXIgZXhpdCBpZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGZhaWxzIHVuZXhwZWN0ZWRseS4KKyAgICAgICAgICArIGFkZCBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGZvciBRTlguCisgICAgICAgICAgKyBjaGFuZ2UgIGRlbGltaXRlciAgaW4gIE1LbGliX2dlbi5zaCBmcm9tICclJyB0byAnQCcsIHRvIGF2b2lkCisgICAgICAgICAgICBzdWJzdGl0dXRpb24gIGJ5ICBJQk0geGxjIHRvICcjJyBhcyBwYXJ0IG9mIGl0cyBleHRlbnNpb25zIHRvCisgICAgICAgICAgICBkaWdyYXBocy4KKyAgICAgKiBsaWJyYXJ5OgorICAgICAgICAgICsgcmV3cml0ZSAgd3JhcHBlciAgZm9yICB3Y3J0b21iKCksICBtYWtpbmcgaXQgd29yayBvbiBTb2xhcmlzLgorICAgICAgICAgICAgVGhpcyAgaXMgIHVzZWQgaW4gdGhlIGZvcm0gbGlicmFyeSB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZgorICAgICAgICAgICAgdGhlIGJ1ZmZlciBuZWVkZWQgYnkgZmllbGRfYnVmZmVyLgorICAgICAgICAgICsgYWRkL3VzZSAgY29uZmlndXJlICBzY3JpcHQgIG1hY3JvICBDRl9TSUdfQVRPTUlDX1QsICB1c2UgIHRoZQorICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlIGZvciBkYXRhIG1hbmlwdWxhdGVkIGJ5IHNpZ25hbCBoYW5kbGVycy4KKyAgICAgICAgICArIHNldCBsb2NhbGUgaW4gbWlzYy9uY3Vyc2VzLWNvbmZpZy5pbiBzaW5jZSBpdCB1c2VzIGEgcmFuZ2UKKyAgICAgICAgICArIGRpc2FibGUgIEdQTSAgbW91c2UgIHN1cHBvcnQgIHdoZW4gICRURVJNICBkb2VzIG5vdCBoYXBwZW4gdG8KKyAgICAgICAgICAgIGNvbnRhaW4gICJsaW51eCIsICBzaW5jZSAgR3BtX09wZW4oKSAgbm8gIGxvbmdlciAgbGltaXRzICBpdHMKKyAgICAgICAgICAgIGFzc2VydGlvbiAgdG8gIHRlcm1pbmFscyAgdGhhdCAgaXQgbWlnaHQgaGFuZGxlLCBlLmcuLCB3aXRoaW4KKyAgICAgICAgICAgICJzY3JlZW4iIGluIHh0ZXJtLgorICAgICAgICAgICsgcmVzZXQgbW91c2UgZmlsZS1kZXNjcmlwdG9yIHdoZW4gdW5sb2FkaW5nIEdQTSBsaWJyYXJ5LgorICAgICAqIHRlc3QgcHJvZ3JhbXM6CisgICAgICAgICAgKyB1cGRhdGUgIHRlc3QgIHByb2dyYW1zIHRvIGJ1aWxkL3dvcmsgd2l0aCB2YXJpb3VzIFVOSVggY3Vyc2VzCisgICAgICAgICAgICBmb3IgY29tcGFyaXNvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzIG9mIE5jdXJzZXMKKworICAgVGhlIG5jdXJzZXMgcGFja2FnZSBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggU1ZyNCAoU3lzdGVtIFYgUmVsZWFzZSA0KQorICAgY3Vyc2VzOgorICAgICAqIEFsbCAgMjU3ICBvZiAgdGhlICBTVnI0ICBjYWxscyAgaGF2ZSAgYmVlbiAgaW1wbGVtZW50ZWQgIChhbmQgIGFyZQorICAgICAgIGRvY3VtZW50ZWQpLgorICAgICAqIEZ1bGwgIHN1cHBvcnQgZm9yIFNWcjQgY3Vyc2VzIGZlYXR1cmVzIGluY2x1ZGluZyBrZXlib2FyZCBtYXBwaW5nLAorICAgICAgIGNvbG9yLCAgIGZvcm1zLWRyYXdpbmcgICB3aXRoICAgQUNTICAgY2hhcmFjdGVycywgICBhbmQgIGF1dG9tYXRpYworICAgICAgIHJlY29nbml0aW9uIG9mIGtleXBhZCBhbmQgZnVuY3Rpb24ga2V5cy4KKyAgICAgKiBBbiAgZW11bGF0aW9uICBvZiAgdGhlICBTVnI0IHBhbmVscyBsaWJyYXJ5LCBzdXBwb3J0aW5nIGEgc3RhY2sgb2YKKyAgICAgICB3aW5kb3dzIHdpdGggYmFja2luZyBzdG9yZSwgaXMgaW5jbHVkZWQuCisgICAgICogQW4gIGVtdWxhdGlvbiAgb2YgdGhlIFNWcjQgbWVudXMgbGlicmFyeSwgc3VwcG9ydGluZyBhIHVuaWZvcm0gYnV0CisgICAgICAgZmxleGlibGUgaW50ZXJmYWNlIGZvciBtZW51IHByb2dyYW1taW5nLCBpcyBpbmNsdWRlZC4KKyAgICAgKiBBbiAgZW11bGF0aW9uIG9mIHRoZSBTVnI0IGZvcm0gbGlicmFyeSwgc3VwcG9ydGluZyBkYXRhIGNvbGxlY3Rpb24KKyAgICAgICB0aHJvdWdoIG9uLXNjcmVlbiBmb3JtcywgaXMgaW5jbHVkZWQuCisgICAgICogQmluYXJ5ICAgdGVybWluZm8gICBlbnRyaWVzICAgZ2VuZXJhdGVkICAgYnkgIHRoZSAgbmN1cnNlcyAgdGljKDEpCisgICAgICAgaW1wbGVtZW50YXRpb24gIGFyZSAgYml0LWZvci1iaXQtY29tcGF0aWJsZSAgd2l0aCB0aGUgZW50cnkgZm9ybWF0CisgICAgICAgU1ZyNCBjdXJzZXMgdXNlcy4KKyAgICAgKiBUaGUgdXRpbGl0aWVzIGhhdmUgb3B0aW9ucyB0byBhbGxvdyB5b3UgdG8gZmlsdGVyIHRlcm1pbmZvIGVudHJpZXMKKyAgICAgICBmb3IgIHVzZSAgd2l0aCAgbGVzcyAgY2FwYWJsZSBjdXJzZXMvdGVybWluZm8gdmVyc2lvbnMgc3VjaCBhcyB0aGUKKyAgICAgICBIUC9VWCBhbmQgQUlYIHBvcnRzLgorCisgICBUaGUgbmN1cnNlcyBwYWNrYWdlIGFsc28gaGFzIG1hbnkgdXNlZnVsIGV4dGVuc2lvbnMgb3ZlciBTVnI0OgorICAgICAqIFRoZSAgQVBJICBpcyA4LWJpdCBjbGVhbiBhbmQgYmFzZS1sZXZlbCBjb25mb3JtYW50IHdpdGggdGhlIFgvT1BFTgorICAgICAgIGN1cnNlcyAgc3BlY2lmaWNhdGlvbiwgWFNJIGN1cnNlcyAodGhhdCBpcywgaXQgaW1wbGVtZW50cyBhbGwgQkFTRQorICAgICAgIGxldmVsICBmZWF0dXJlcywgIGFuZCAgbW9zdCAgRVhURU5ERUQgIGZlYXR1cmVzKS4gSXQgaW5jbHVkZXMgbWFueQorICAgICAgIGZ1bmN0aW9uIGNhbGxzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgU1ZyNCBjdXJzZXMgKGJ1dCBwb3J0YWJpbGl0eSBvZgorICAgICAgIGFsbCBjYWxscyBpcyBkb2N1bWVudGVkIHNvIHlvdSBjYW4gdXNlIHRoZSBTVnI0IHN1YnNldCBvbmx5KS4KKyAgICAgKiBVbmxpa2UgIFNWcjMgY3Vyc2VzLCBuY3Vyc2VzIGNhbiB3cml0ZSB0byB0aGUgcmlnaHRtb3N0LWJvdHRvbW1vc3QKKyAgICAgICBjb3JuZXIgIG9mICB0aGUgIHNjcmVlbiAgaWYgIHlvdXIgdGVybWluYWwgaGFzIGFuIGluc2VydC1jaGFyYWN0ZXIKKyAgICAgICBjYXBhYmlsaXR5LgorICAgICAqIEFkYTk1IGFuZCBDKysgYmluZGluZ3MuCisgICAgICogU3VwcG9ydCAgZm9yIG1vdXNlIGV2ZW50IHJlcG9ydGluZyB3aXRoIFggV2luZG93IHh0ZXJtIGFuZCBGcmVlQlNECisgICAgICAgYW5kIE9TLzIgY29uc29sZSB3aW5kb3dzLgorICAgICAqIEV4dGVuZGVkIG1vdXNlIHN1cHBvcnQgdmlhIEFsZXNzYW5kcm8gUnViaW5pJ3MgZ3BtIHBhY2thZ2UuCisgICAgICogVGhlICBmdW5jdGlvbiAgd3Jlc2l6ZSgpICBhbGxvd3MgeW91IHRvIHJlc2l6ZSB3aW5kb3dzLCBwcmVzZXJ2aW5nCisgICAgICAgdGhlaXIgZGF0YS4KKyAgICAgKiBUaGUgZnVuY3Rpb24gdXNlX2RlZmF1bHRfY29sb3JzKCkgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHRlcm1pbmFsJ3MKKyAgICAgICBkZWZhdWx0IGNvbG9ycyBmb3IgdGhlIGRlZmF1bHQgY29sb3IgcGFpciwgYWNoaWV2aW5nIHRoZSBlZmZlY3Qgb2YKKyAgICAgICB0cmFuc3BhcmVudCBjb2xvcnMuCisgICAgICogVGhlIGZ1bmN0aW9ucyBrZXlvaygpIGFuZCBkZWZpbmVfa2V5KCkgYWxsb3cgeW91IHRvIGJldHRlciBjb250cm9sCisgICAgICAgdGhlICB1c2UgIG9mIGZ1bmN0aW9uIGtleXMsIGUuZy4sIGRpc2FibGluZyB0aGUgbmN1cnNlcyBLRVlfTU9VU0UsCisgICAgICAgb3IgIGJ5ICBkZWZpbmluZyAgbW9yZSB0aGFuIG9uZSBjb250cm9sIHNlcXVlbmNlIHRvIG1hcCB0byBhIGdpdmVuCisgICAgICAga2V5IGNvZGUuCisgICAgICogU3VwcG9ydCAgZm9yICAyNTYtY29sb3IgIHRlcm1pbmFscywgIHN1Y2ggIGFzICBtb2Rlcm4gIHh0ZXJtLCB3aGVuCisgICAgICAgY29uZmlndXJlZCB1c2luZyB0aGUgLS1lbmFibGUtZXh0LWNvbG9ycyBvcHRpb24uCisgICAgICogU3VwcG9ydCBmb3IgMTYtY29sb3IgdGVybWluYWxzLCBzdWNoIGFzIGFpeHRlcm0gYW5kIG1vZGVybiB4dGVybS4KKyAgICAgKiBCZXR0ZXIgIGN1cnNvci1tb3ZlbWVudCAgb3B0aW1pemF0aW9uLiAgVGhlIHBhY2thZ2Ugbm93IGZlYXR1cmVzIGEKKyAgICAgICBjdXJzb3ItbG9jYWwtbW92ZW1lbnQgY29tcHV0YXRpb24gbW9yZSBlZmZpY2llbnQgdGhhbiBlaXRoZXIgQlNEJ3MKKyAgICAgICBvciBTeXN0ZW0gVidzLgorICAgICAqIFN1cGVyICAgaGFyZHdhcmUgICBzY3JvbGxpbmcgICBzdXBwb3J0LiAgIFRoZSAgc2NyZWVuLXVwZGF0ZSAgY29kZQorICAgICAgIGluY29ycG9yYXRlcyAgYSBub3ZlbCwgc2ltcGxlLCBhbmQgY2hlYXAgYWxnb3JpdGhtIHRoYXQgZW5hYmxlcyBpdAorICAgICAgIHRvICBtYWtlICBvcHRpbWFsICB1c2UgIG9mIGhhcmR3YXJlIHNjcm9sbGluZywgbGluZS1pbnNlcnRpb24sIGFuZAorICAgICAgIGxpbmUtZGVsZXRpb24gIGZvciAgc2NyZWVuLWxpbmUgIG1vdmVtZW50cy4gVGhpcyBhbGdvcml0aG0gaXMgbW9yZQorICAgICAgIHBvd2VyZnVsIHRoYW4gdGhlIDQuNEJTRCBjdXJzZXMgcXVpY2tjaCgpIHJvdXRpbmUuCisgICAgICogUmVhbCAgc3VwcG9ydCAgZm9yICB0ZXJtaW5hbHMgIHdpdGggIHRoZSAgbWFnaWMtY29va2llIGdsaXRjaC4gVGhlCisgICAgICAgc2NyZWVuLXVwZGF0ZSAgY29kZSAgd2lsbCAgcmVmcmFpbiBmcm9tIGRyYXdpbmcgYSBoaWdobGlnaHQgaWYgdGhlCisgICAgICAgbWFnaWMtICAgY29va2llICB1bmF0dHJpYnV0ZWQgIHNwYWNlcyAgcmVxdWlyZWQgIGp1c3QgIGJlZm9yZSAgdGhlCisgICAgICAgYmVnaW5uaW5nICBhbmQgIGFmdGVyIHRoZSBlbmQgd291bGQgc3RlcCBvbiBhIG5vbi1zcGFjZSBjaGFyYWN0ZXIuCisgICAgICAgSXQgIHdpbGwgIGF1dG9tYXRpY2FsbHkgIHNoaWZ0ICBoaWdobGlnaHQgYm91bmRhcmllcyB3aGVuIGRvaW5nIHNvCisgICAgICAgd291bGQgIG1ha2UgaXQgcG9zc2libGUgdG8gZHJhdyB0aGUgaGlnaGxpZ2h0IHdpdGhvdXQgY2hhbmdpbmcgdGhlCisgICAgICAgdmlzdWFsIGFwcGVhcmFuY2Ugb2YgdGhlIHNjcmVlbi4KKyAgICAgKiBJdCAgaXMgIHBvc3NpYmxlIHRvIGdlbmVyYXRlIHRoZSBsaWJyYXJ5IHdpdGggYSBsaXN0IG9mIHByZS1sb2FkZWQKKyAgICAgICBmYWxsYmFjayAgZW50cmllcyBsaW5rZWQgdG8gaXQgc28gdGhhdCBpdCBjYW4gc2VydmUgdGhvc2UgdGVybWluYWwKKyAgICAgICB0eXBlcyAgZXZlbiAgd2hlbiAgbm8gIHRlcm1pbmZvIHRyZWUgb3IgdGVybWNhcCBmaWxlIGlzIGFjY2Vzc2libGUKKyAgICAgICAodGhpcyAgbWF5ICBiZSB1c2VmdWwgZm9yIHN1cHBvcnQgb2Ygc2NyZWVuLW9yaWVudGVkIHByb2dyYW1zIHRoYXQKKyAgICAgICBtdXN0IHJ1biBpbiBzaW5nbGUtdXNlciBtb2RlKS4KKyAgICAgKiBUaGUgdGljKDEpL2NhcHRvaW5mbyB1dGlsaXR5IHByb3ZpZGVkIHdpdGggbmN1cnNlcyBoYXMgdGhlIGFiaWxpdHkKKyAgICAgICB0byAgdHJhbnNsYXRlIG1hbnkgdGVybWNhcHMgZnJvbSB0aGUgWEVOSVgsIElCTSBhbmQgQVQmVCBleHRlbnNpb24KKyAgICAgICBzZXRzLgorICAgICAqIEEgQlNELWxpa2UgdHNldCgxKSB1dGlsaXR5IGlzIHByb3ZpZGVkLgorICAgICAqIFRoZSBuY3Vyc2VzIGxpYnJhcnkgYW5kIHV0aWxpdGllcyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVhZCB0ZXJtaW5mbworICAgICAgIGVudHJpZXMgIGZyb20gICRIT01FLy50ZXJtaW5mbyAgaWYgIGl0IGV4aXN0cywgYW5kIGNvbXBpbGUgdG8gdGhhdAorICAgICAgIGRpcmVjdG9yeSAgaWYgIGl0ICBleGlzdHMgIGFuZCB0aGUgdXNlciBoYXMgbm8gd3JpdGUgYWNjZXNzIHRvIHRoZQorICAgICAgIHN5c3RlbSAgZGlyZWN0b3J5LiAgVGhpcyBmZWF0dXJlIG1ha2VzIGl0IGVhc2llciBmb3IgdXNlcnMgdG8gaGF2ZQorICAgICAgIHBlcnNvbmFsICB0ZXJtaW5mbyAgZW50cmllcyB3aXRob3V0IGdpdmluZyB1cCBhY2Nlc3MgdG8gdGhlIHN5c3RlbQorICAgICAgIHRlcm1pbmZvIGRpcmVjdG9yeS4KKyAgICAgKiBZb3UgIG1heSAgc3BlY2lmeSAgYSAgcGF0aCAgb2YgIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgY29tcGlsZWQKKyAgICAgICBkZXNjcmlwdGlvbnMgIHdpdGggIHRoZSAgZW52aXJvbm1lbnQgIHZhcmlhYmxlIFRFUk1JTkZPX0RJUlMgKHRoaXMKKyAgICAgICBnZW5lcmFsaXplcyAgdGhlICBmZWF0dXJlICBwcm92aWRlZCBieSBURVJNSU5GTyB1bmRlciBzdG9jayBTeXN0ZW0KKyAgICAgICBWLikKKyAgICAgKiBJbiAgdGVybWluZm8gIHNvdXJjZSBmaWxlcywgdXNlIGNhcGFiaWxpdGllcyBtYXkgcmVmZXIgbm90IGp1c3QgdG8KKyAgICAgICBvdGhlciBlbnRyaWVzIGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlIChhcyBpbiBTeXN0ZW0gVikgYnV0IGFsc28gdG8KKyAgICAgICBjb21waWxlZCAgZW50cmllcyAgaW4gIGVpdGhlciB0aGUgc3lzdGVtIHRlcm1pbmZvIGRpcmVjdG9yeSBvciB0aGUKKyAgICAgICB1c2VyJ3MgJEhPTUUvLnRlcm1pbmZvIGRpcmVjdG9yeS4KKyAgICAgKiBBICBzY3JpcHQgIChjYXBjb252ZXJ0KSAgaXMgIHByb3ZpZGVkIHRvIGhlbHAgQlNEIHVzZXJzIHRyYW5zaXRpb24KKyAgICAgICBmcm9tICB0ZXJtY2FwIHRvIHRlcm1pbmZvLiBJdCBnYXRoZXJzIHRoZSBpbmZvcm1hdGlvbiBpbiBhIFRFUk1DQVAKKyAgICAgICBlbnZpcm9ubWVudCAgdmFyaWFibGUgIGFuZC9vciAgYSB+Ly50ZXJtY2FwIGxvY2FsIGVudHJpZXMgZmlsZSBhbmQKKyAgICAgICBjb252ZXJ0cyAgIGl0ICAgdG8gICBhbiAgIGVxdWl2YWxlbnQgIGxvY2FsICB0ZXJtaW5mbyAgdHJlZSAgdW5kZXIKKyAgICAgICAkSE9NRS8udGVybWluZm8uCisgICAgICogQXV0b21hdGljICBmYWxsYmFjayAgdG8gIHRoZSAgL2V0Yy90ZXJtY2FwIGZpbGUgY2FuIGJlIGNvbXBpbGVkIGluCisgICAgICAgd2hlbiAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkIGEgdGVybWluZm8gdHJlZS4gVGhpcyBmZWF0dXJlIGlzCisgICAgICAgbmVpdGhlciAgZmFzdCAgbm9yIGNoZWFwLCB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgaXQgdW5sZXNzIHlvdSBoYXZlCisgICAgICAgdG8sIGJ1dCBpdCdzIHRoZXJlLgorICAgICAqIFRoZSAgdGFibGUtb2YtZW50cmllcyAgdXRpbGl0eSAgdG9lIG1ha2VzIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHNlZQorICAgICAgIGV4YWN0bHkgd2hhdCB0ZXJtaW5hbCB0eXBlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0uCisgICAgICogVGhlIGxpYnJhcnkgbWVldHMgdGhlIFhTSSByZXF1aXJlbWVudCB0aGF0IGV2ZXJ5IG1hY3JvIGVudHJ5IHBvaW50CisgICAgICAgaGF2ZSAgYSAgY29ycmVzcG9uZGluZyAgZnVuY3Rpb24gIHdoaWNoIG1heSBiZSBsaW5rZWQgKGFuZCB3aWxsIGJlCisgICAgICAgcHJvdG90eXBlLWNoZWNrZWQpICBpZiAgdGhlICBtYWNybyAgZGVmaW5pdGlvbiAgaXMgIGRpc2FibGVkICB3aXRoCisgICAgICAgI3VuZGVmLgorICAgICAqIEFuICBIVE1MICAiSW50cm9kdWN0aW9uICB0byAgUHJvZ3JhbW1pbmcgIHdpdGggIE5DVVJTRVMiICBkb2N1bWVudAorICAgICAgIHByb3ZpZGVzICBhICBuYXJyYXRpdmUgIGludHJvZHVjdGlvbiAgdG8gIHRoZSAgY3Vyc2VzICBwcm9ncmFtbWluZworICAgICAgIGludGVyZmFjZS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSBvZiB0aGUgUGFja2FnZQorCisgICBOdW1lcm91cyBidWdzIHByZXNlbnQgaW4gZWFybGllciB2ZXJzaW9ucyBoYXZlIGJlZW4gZml4ZWQ7IHRoZSBsaWJyYXJ5CisgICBpcyAgZmFyICBtb3JlICByZWxpYWJsZSAgdGhhbiAgaXQgIHVzZWQgdG8gYmUuIEJvdW5kcyBjaGVja2luZyBpbiBtYW55CisgICBgZGFuZ2Vyb3VzJyAgZW50cnkgcG9pbnRzIGhhcyBiZWVuIGltcHJvdmVkLiBUaGUgY29kZSBpcyBub3cgdHlwZS1zYWZlCisgICBhY2NvcmRpbmcgIHRvIGdjYyAtV2FsbC4gVGhlIGxpYnJhcnkgaGFzIGJlZW4gY2hlY2tlZCBmb3IgbWFsbG9jIGxlYWtzCisgICBhbmQgYXJlbmEgY29ycnVwdGlvbiBieSB0aGUgUHVyaWZ5IG1lbW9yeS1hbGxvY2F0aW9uIHRlc3Rlci4KKworICAgVGhlICBuY3Vyc2VzICBjb2RlIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucworICAgaW5jbHVkaW5nICh2ZXJzaW9ucyBzdGFydGluZyB3aXRoIHRob3NlIG5vdGVkKToKKworICAgY2RrCisgICAgICAgICAgQ3Vyc2VzIERldmVsb3BtZW50IEtpdAorICAgICAgICAgIFs0XWh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9jZGsvCisgICAgICAgICAgWzVdaHR0cDovL3d3dy52ZXh1cy5jYS9wcm9kdWN0cy9DREsvCisKKyAgIGRlZAorICAgICAgICAgIGRpcmVjdG9yeS1lZGl0b3IKKyAgICAgICAgICBbNl1odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGVkLworCisgICBkaWFsb2cKKyAgICAgICAgICB0aGUgIHVuZGVybHlpbmcgIGFwcGxpY2F0aW9uIHVzZWQgaW4gU2xhY2t3YXJlJ3Mgc2V0dXAsIGFuZCB0aGUKKyAgICAgICAgICBiYXNpcyBmb3Igc2ltaWxhciBhcHBsaWNhdGlvbnMgb24gR05VL0xpbnV4LgorICAgICAgICAgIFs3XWh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWFsb2cvCisKKyAgIGx5bngKKyAgICAgICAgICB0aGUgY2hhcmFjdGVyLXNjcmVlbiBXV1cgYnJvd3NlcgorICAgICAgICAgIFs4XWh0dHA6Ly9seW54LmlzYy5vcmcvcmVsZWFzZS8KKworICAgTWlkbmlnaHQgQ29tbWFuZGVyCisgICAgICAgICAgZmlsZSBtYW5hZ2VyCisgICAgICAgICAgWzldaHR0cDovL3d3dy5pYmlibGlvLm9yZy9tYy8KKworICAgbXV0dAorICAgICAgICAgIG1haWwgdXRpbGl0eQorICAgICAgICAgIFsxMF1odHRwOi8vd3d3Lm11dHQub3JnLworCisgICBuY2Z0cAorICAgICAgICAgIGZpbGUtdHJhbnNmZXIgdXRpbGl0eQorICAgICAgICAgIFsxMV1odHRwOi8vd3d3Lm5jZnRwLmNvbS8KKworICAgbnZpCisgICAgICAgICAgTmV3IHZpIHZlcnNpb25zIDEuNTAgYXJlIGFibGUgdG8gdXNlIG5jdXJzZXMgdmVyc2lvbnMgMS45LjcgYW5kCisgICAgICAgICAgbGF0ZXIuCisgICAgICAgICAgWzEyXWh0dHA6Ly93d3cuYm9zdGljLmNvbS92aS8KKworICAgcGluZm8KKyAgICAgICAgICBMeW54LWxpa2UgaW5mbyBicm93c2VyLgorICAgICAgICAgIFsxM11odHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL3BpbmZvLworCisgICB0aW4KKyAgICAgICAgICBuZXdzcmVhZGVyLCBzdXBwb3J0aW5nIGNvbG9yLCBNSU1FIFsxNF1odHRwOi8vd3d3LnRpbi5vcmcvCisKKyAgIGFzIHdlbGwgYXMgc29tZSB0aGF0IHVzZSBuY3Vyc2VzIGZvciB0aGUgdGVybWluZm8gc3VwcG9ydCBhbG9uZToKKworICAgbWluaWNvbQorICAgICAgICAgIHRlcm1pbmFsIGVtdWxhdG9yCisgICAgICAgICAgWzE1XWh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9taW5pY29tLworCisgICB2aWxlCisgICAgICAgICAgdmktbGlrZS1lbWFjcworICAgICAgICAgIFsxNl1odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvdmlsZS8KKworICAgVGhlICBuY3Vyc2VzICBkaXN0cmlidXRpb24gIGluY2x1ZGVzICBhICBzZWxlY3Rpb24gIG9mICB0ZXN0ICBwcm9ncmFtcworICAgKGluY2x1ZGluZyBhIGZldyBnYW1lcykuCisKK1dobydzIFdobyBhbmQgV2hhdCdzIFdoYXQKKworICAgWmV5ZCAgQmVuLUhhbGltIHN0YXJ0ZWQgaXQgZnJvbSBhIHByZXZpb3VzIHBhY2thZ2UgcGN1cnNlcywgd3JpdHRlbiBieQorICAgUGF2ZWwgIEN1cnRpcy4gIEVyaWMgIFMuIFJheW1vbmQgY29udGludWVkIGRldmVsb3BtZW50LiBK/HJnZW4gUGZlaWZlcgorICAgd3JvdGUgIG1vc3Qgb2YgdGhlIGZvcm0gYW5kIG1lbnUgbGlicmFyaWVzLiBPbmdvaW5nIHdvcmsgaXMgYmVpbmcgZG9uZQorICAgYnkgIFsxN11UaG9tYXMgIERpY2tleS4gIFRob21hcyAgRGlja2V5IGFjdHMgYXMgdGhlIG1haW50YWluZXIgZm9yIHRoZQorICAgRnJlZSAgU29mdHdhcmUgIEZvdW5kYXRpb24sICB3aGljaCAgaG9sZHMgIHRoZSAgY29weXJpZ2h0ICBvbiBuY3Vyc2VzLgorICAgQ29udGFjdCB0aGUgY3VycmVudCBtYWludGFpbmVycyBhdCBbMThdYnVnLW5jdXJzZXNAZ251Lm9yZy4KKworICAgVG8gICBqb2luICAgdGhlICAgbmN1cnNlcyAgIG1haWxpbmcgICBsaXN0LCAgIHBsZWFzZSAgd3JpdGUgIGVtYWlsICB0bworICAgYnVnLW5jdXJzZXMtcmVxdWVzdEBnbnUub3JnIGNvbnRhaW5pbmcgdGhlIGxpbmU6CisgICAgICAgICAgICAgc3Vic2NyaWJlIDxuYW1lPkA8aG9zdC5kb21haW4+CisKKyAgIFRoaXMgbGlzdCBpcyBvcGVuIHRvIGFueW9uZSBpbnRlcmVzdGVkIGluIGhlbHBpbmcgd2l0aCB0aGUgZGV2ZWxvcG1lbnQKKyAgIGFuZCB0ZXN0aW5nIG9mIHRoaXMgcGFja2FnZS4KKworICAgQmV0YSAgdmVyc2lvbnMgIG9mIG5jdXJzZXMgYW5kIHBhdGNoZXMgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZSBhcmUgbWFkZQorICAgYXZhaWxhYmxlIGF0IFsxOV1mdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLyAuCisKK0Z1dHVyZSBQbGFucworCisgICAgICogRXh0ZW5kZWQtbGV2ZWwgICBYUEc0ICAgY29uZm9ybWFuY2UsICAgd2l0aCAgIGludGVybmF0aW9uYWxpemF0aW9uCisgICAgICAgc3VwcG9ydC4KKyAgICAgKiBQb3J0cyB0byBtb3JlIHN5c3RlbXMsIGluY2x1ZGluZyBET1MgYW5kIFdpbmRvd3MuCisKKyAgIFdlICBuZWVkICBwZW9wbGUgdG8gaGVscCB3aXRoIHRoZXNlIHByb2plY3RzLiBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4KKyAgIHdvcmtpbmcgb24gdGhlbSwgcGxlYXNlIGpvaW4gdGhlIG5jdXJzZXMgbGlzdC4KKworT3RoZXIgUmVsYXRlZCBSZXNvdXJjZXMKKworICAgVGhlICBkaXN0cmlidXRpb24gIHByb3ZpZGVzICBhICBuZXdlciAgdmVyc2lvbiAgb2YgdGhlIHRlcm1pbmZvLWZvcm1hdAorICAgdGVybWluYWwgZGVzY3JpcHRpb24gZmlsZSBvbmNlIG1haW50YWluZWQgYnkgWzIwXUVyaWMgUmF5bW9uZCAuIFVubGlrZQorICAgdGhlICBvbGRlciAgdmVyc2lvbiwgdGhlIHRlcm1jYXAgYW5kIHRlcm1pbmZvIGRhdGEgYXJlIHByb3ZpZGVkIGluIHRoZQorICAgc2FtZSAgZmlsZSwgIGFuZCBwcm92aWRlcyBzZXZlcmFsIHVzZXItZGVmaW5hYmxlIGV4dGVuc2lvbnMgYmV5b25kIHRoZQorICAgWC9PcGVuIHNwZWNpZmljYXRpb24uCisKKyAgIFlvdSAgY2FuICBmaW5kICBsb3RzICBvZiAgaW5mb3JtYXRpb24gIG9uICB0ZXJtaW5hbC1yZWxhdGVkIHRvcGljcyBub3QKKyAgIGNvdmVyZWQgaW4gdGhlIHRlcm1pbmZvIGZpbGUgYXQgWzIxXVJpY2hhcmQgU2h1Zm9yZCdzIGFyY2hpdmUgLgorCitSZWZlcmVuY2VzCisKKyAgIDEuIGZ0cDovL2Z0cC5nbnUub3JnL2dudS9uY3Vyc2VzLworICAgMi4gZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy8KKyAgIDMuIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC94dGVybS94dGVybS5sb2cuaHRtbCN4dGVybV8yMzAKKyAgIDQuIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9jZGsvCisgICA1LiBodHRwOi8vd3d3LnZleHVzLmNhL3Byb2R1Y3RzL0NESy8KKyAgIDYuIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kZWQvCisgICA3LiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlhbG9nLworICAgOC4gaHR0cDovL2x5bnguaXNjLm9yZy9yZWxlYXNlLworICAgOS4gaHR0cDovL3d3dy5pYmlibGlvLm9yZy9tYy8KKyAgMTAuIGh0dHA6Ly93d3cubXV0dC5vcmcvCisgIDExLiBodHRwOi8vd3d3Lm5jZnRwLmNvbS8KKyAgMTIuIGh0dHA6Ly93d3cuYm9zdGljLmNvbS92aS8KKyAgMTMuIGh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvcGluZm8vCisgIDE0LiBodHRwOi8vd3d3LnRpbi5vcmcvCisgIDE1LiBodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvbWluaWNvbS8KKyAgMTYuIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC92aWxlLworICAxNy4gbWFpbHRvOmRpY2tleUBpbnZpc2libGUtaXNsYW5kLm5ldAorICAxOC4gbWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmcKKyAgMTkuIGZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvCisgIDIwLiBodHRwOi8vd3d3LmNhdGIub3JnL35lc3IvdGVybWluZm8vCisgIDIxLiBodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnNodWZvcmQvdGVybWluYWxfaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQVVUSE9SUyBiL25jdXJzZXMtNS43L0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MDRjNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FVVEhPUlMKQEAgLTAsMCArMSwzOCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBBVVRIT1JTLHYgMS4yIDIwMDYvMTAvMjggMjE6NDQ6NTIgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVzZSBhcmUgdGhlIHByaW5jaXBhbCBhdXRob3JzL2NvbnRyaWJ1dG9ycyBvZiBuY3Vyc2VzIHNpbmNlIDEuOS45ZSwKK2luIGRlY3JlYXNpbmcgb3JkZXIgb2YgdGhlaXIgY29udHJpYnV0aW9uOgorCitURAlUaG9tYXMgRS4gRGlja2V5CitKUEYJSnVlcmdlbiBQZmVpZmVyIAorRVNSCUVyaWMgUyBSYXltb25kCitBVkwJQWxleGFuZGVyIFYgTHVreWFub3YKK1BCCVBoaWxpcHBlIEJsYWluCitTVglTdmVuIFZlcmRvb2xhZWdlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9NYWtlZmlsZS5pbiBiL25jdXJzZXMtNS43L0FkYTk1L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzQzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDY3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKyMKKyMgIFZlcnNpb24gQ29udHJvbAorIyAgJFJldmlzaW9uOiAxLjE1ICQKKyMKK1NIRUxMCQk9IC9iaW4vc2gKK1RISVMJCT0gTWFrZWZpbGUKKworU1VCRElSUyAgICAgICAgID0gQEFEQV9TVUJESVJTQAorCitDRl9NRkxBR1MgCT0gQGNmX2N2X21ha2VmbGFnc0AKK0BTRVRfTUFLRUAKKworYWxsIFwKK2xpYnMgXAorc291cmNlcyBcCitpbnN0YWxsIFwKK2luc3RhbGwubGlicyBcCit1bmluc3RhbGwgXAordW5pbnN0YWxsLmxpYnMgOjoKKwlmb3IgZCBpbiAkKFNVQkRJUlMpOyBkbyBcCisJCShjZCAkJGQgOyAkKE1BS0UpICQoQ0ZfTUZMQUdTKSAkQCkgO1wKKwlkb25lCisKK2NsZWFuIFwKK21vc3RseWNsZWFuIDo6CisJZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gXAorCQkoY2QgJCRkIDsgJChNQUtFKSAkKENGX01GTEFHUykgJEApIDtcCisJZG9uZQorCitkaXN0Y2xlYW4gXAorcmVhbGNsZWFuIDo6CisJZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gXAorCQkoY2QgJCRkIDsgJChNQUtFKSAkKENGX01GTEFHUykgJEApIDtcCisJZG9uZQorCXJtIC1mIE1ha2VmaWxlCisKK2luc3RhbGwuZGF0YSA6CisJQApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvUkVBRE1FIGIvbmN1cnNlcy01LjcvQWRhOTUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlODQyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9SRUFETUUKQEAgLTAsMCArMSwzMyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CisKK1RoZSBkb2N1bWVudGF0aW9uIGlzIHByb3ZpZGVkIGluIEhUTUwgZm9ybWF0IGluIHRoZSAuL2h0bWwgCitzdWJkaXJlY3RvcnkuIFRoZSBtYWluIGRvY3VtZW50IGlzIG5hbWVkIGluZGV4Lmh0bWwKKwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvVE9ETyBiL25jdXJzZXMtNS43L0FkYTk1L1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjOGFjZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L1RPRE8KQEAgLTAsMCArMSw1NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTE5OTksMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBUT0RPLHYgMS41IDIwMDYvMDQvMjIgMjI6MjM6MjEgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tICBJbnRlbnNpdmUgdGVzdGluZworICAgIFBlcmhhcHMgdGhlIGRlbGl2ZXJ5IG9mIHRoZSBCZXRhIHdpbGwgaGVscCBhIGJpdC4KKworLS0gIERvY3VtZW50YXRpb24KKyAgICBMaWtlIG1vc3QgV0VCIHBhZ2VzOiB1bmRlciBjb250aW51b3VzIGNvbnN0cnVjdGlvbgorCistLSAgU3R5bGUgY2xlYW51cAorICAgIAkKKy0tICBBbHRlcm5hdGUgZnVuY3Rpb25zIGZvciBwcm9jZWR1cmVzIHdpdGggb3V0IHBhcmFtcworICAgIENvbWZvcnQgcHVycG9zZQorCistLSAgU2FtcGxlIHByb2dyYW0KKyAgICBVbmRlciBjb250aW51b3VzIGNvbnN0cnVjdGlvbiAoYW5kIGl0J3Mgbm90IGEgV0VCIHBhZ2UhISEpCisKKy0tICBNYWtlIHRoZSBiaW5kaW5nIG9iamVjdHMgYSBzaGFyZWQgbGlicmFyeQorICAgIFRoZXkgYXJlIHJhdGhlciBsYXJnZSwgc28gaXQgd291bGQgbWFrZSBzZW5zZSwgb3RoZXJ3aXNlIEFkYTk1CisgICAgd291bGQgbG9vayB0b28gbGFyZ2UsIGFsdGhvdWdoIHRoZSBnZW5lcmF0ZWQgY29kZSBpcyBhcyBjb21wYWN0CisgICAgYXMgQyBvciBDKysuIEknbGwgd2FpdCBhIGJpdCB1bnRpbCB0aGUgR05BVCBwZW9wbGUgcHJvdmlkZSBzb21lCisgICAgYmV0dGVyIHN1cHBvcnQgdG8gY29uc3RydWN0IHNoYXJlZCBsaWJyYXJpZXMuCisKKy0tICBUaGluayBhYm91dCBtb3JlIGlubGluaW5nCisKKy0tICBDaGVjayBmb3IgbWVtb3J5IGxlYWtzLgorICAgIE9oIEkgd291bGQgbGlrZSBpdCBzbyBtdWNoIGlmIHRoZSBHTkFUIGd1eXMgd291bGQgcHV0IGFuIG9wdGlvbmFsCisgICAgR0MgaW50byB0aGVpciBzeXN0ZW0uCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vTWFrZWZpbGUuaW4gYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlM2JlYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDQ3NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CisjCisjICAkSWQ6IE1ha2VmaWxlLmluLHYgMS42MSAyMDA4LzEwLzA0IDIyOjU4OjMxIHRvbSBFeHAgJAorIworLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK3gJCT0gQFBST0dfRVhUQAorCit0b3Bfc3JjZGlyCT0gQHRvcF9zcmNkaXJACitERVNURElSCQk9IEBERVNURElSQAorc3JjZGlyCQk9IEBzcmNkaXJACitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAorYmluZGlyCQk9IEBiaW5kaXJACisKK0FEQV9JTkNMVURFCT0gJChERVNURElSKUBBREFfSU5DTFVERUAKK0FEQV9PQkpFQ1RTCT0gJChERVNURElSKUBBREFfT0JKRUNUU0AKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfUFJPRwk9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBV0sJCT0gQEFXS0AKK0xOX1MJCT0gQExOX1NACisKK0NDCQk9IEBDQ0AKK0hPU1RfQ0MJCT0gQEJVSUxEX0NDQAorQ0ZMQUdTCQk9IEBDRkxBR1NACisKK0NQUEZMQUdTCT0gQEFDUFBGTEFHU0AgXAorCQkgIC1ESEFWRV9DT05GSUdfSCAtSSQoc3JjZGlyKQorCitDQ0ZMQUdTCQk9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorQ0ZMQUdTX05PUk1BTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19ERUJVRwk9ICQoQ0NGTEFHUykgQENDX0dfT1BUQCAtRFRSQUNFCitDRkxBR1NfUFJPRklMRQk9ICQoQ0NGTEFHUykgLXBnCitDRkxBR1NfU0hBUkVECT0gJChDQ0ZMQUdTKSBAQ0NfU0hBUkVEX09QVFNACisKK0NGTEFHU19ERUZBVUxUCT0gJChDRkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitSRUxfVkVSU0lPTgk9IEBjZl9jdl9yZWxfdmVyc2lvbkAKK0FCSV9WRVJTSU9OCT0gQGNmX2N2X2FiaV92ZXJzaW9uQAorTE9DQUxfTElCRElSCT0gQHRvcF9idWlsZGRpckAvbGliCisKK0xJTksJCT0gJChIT1NUX0NDKQorTERfRkxBR1MJPSBATERfTU9ERUxAICQoTE9DQUxfTElCUykgQExERkxBR1NAIEBMSUJTQCBATE9DQUxfTERGTEFHUzJAICQoTERGTEFHUykgQFRJTkZPX0FSR1MyQAorCitSQU5MSUIJCT0gQFJBTkxJQkAKKworTTQJCT0gbTQKK000RkxBR1MJCT0gLUROQ1VSU0VTX0VYVF9GVU5DUz1ATkNVUlNFU19FWFRfRlVOQ1NACisKK0FEQUNVUlNFU19DT05GSUcgPSBhZGFjdXJzZXMtY29uZmlnCisKK1dSQVBQRVIJCT0gc2ggJCh0b3Bfc3JjZGlyKS9taXNjL3NobGliCitHRU5FUkFURQk9IC4vZ2VuJHggJ0BERlRfQVJHX1NVRkZJWEAnCitERUxfQURBTU9ERQk9IHNlZCAtZSAnL15cLVwtXCBcIFwtXCpcLVwgYWRhXCBcLVwqXC0uKi9kJworCitHTkFUSFRNTAk9IGB0eXBlIC1wIGduYXRodG1sIHx8IHR5cGUgLXAgZ25hdGh0bWwucGxgCitHTkFUSFAgICAgICAgICAgPSB3d3cuZ25hdC5jb20KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0FMSUIgICAgICAgICAgICA9IEBjZl9hZGFfcGFja2FnZUAKK0FCQVNFCQk9ICQoQUxJQiktY3Vyc2VzCisKK0FEQV9TUkNESVIJPSAuLi9zcmMKKworR0VOX0ZJTEVTMCAgICAgID0gQmFzZV9EZWZzCisKK0dFTl9GSUxFUzEgICAgICA9IEFDU19NYXAgICAgICAgICAgICAgICAgICAgICAgCQlcCisJCSAgQUNfUmVwICAgICAgICAgICAgICAgICAgICAgICAJCVwKKwkJICBCYXNlX0RlZnMJCQkgICAgICAgIFwKKwkJICBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldF9SZXAgIAkJXAorCQkgIENvbG9yX0RlZnMgICAgICAgICAgICAgICAgICAgCQlcCisJCSAgS2V5X0RlZmluaXRpb25zICAgICAgICAgICAgICAJCVwKKwkJICBMaW5rZXJfT3B0aW9ucyAgICAgICAgICAgICAgIAkJXAorCQkgIE9sZF9LZXlzICAgICAgICAgICAgICAgICAgICAgCQlcCisJCSAgUHVibGljX1ZhcmlhYmxlcyAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgVHJhY2VfRGVmcwkJCQlcCisJCSAgVmVyc2lvbl9JbmZvCQkJCVwKKwkJICBXaW5kb3dfT2Zmc2V0cworCitHRU5fRklMRVMyICAgICAgPSBNZW51X09wdF9SZXAgICAgICAgIAkJICAgIAlcCisJCSAgTWVudV9CYXNlX0RlZnMgICAgICAgICAgICAgICAJCVwKKwkJICBNZW51X0xpbmtlcl9PcHRpb25zICAgICAgICAgIAkJXAorCQkgIEl0ZW1fUmVwCisKK0dFTl9GSUxFUzMgICAgICA9IEZvcm1fT3B0X1JlcCAgICAgICAgICAgICAgICAgCQlcCisJCSAgRm9ybV9CYXNlX0RlZnMgICAgICAgICAgICAgICAJCVwKKwkJICBGb3JtX0xpbmtlcl9PcHRpb25zICAgICAgICAgIAkJXAorCQkgIEZpZWxkX1JlcAorCitHRU5fRklMRVM0ICAgICAgPSBNb3VzZV9CYXNlX0RlZnMgICAgICAgICAgICAgIAkJXAorCQkgIE1vdXNlX0V2ZW50X1JlcAkJCVwKKwkJICBNb3VzZV9FdmVudHMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICBQYW5lbF9MaW5rZXJfT3B0aW9ucworCitHRU5fRklMRVM1CT0gQ2h0eXBlX0RlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgRXRpX0RlZnMKKworR0VOX1RBUkdFVFMgICAgID0gJChBREFfU1JDRElSKS8kKEFCQVNFKS5hZHMgICAgICAgICAJCQlcCisJCSAgJChBREFfU1JDRElSKS8kKEFCQVNFKS5hZGIgICAgICAgICAJCQlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktYXV4LmFkcyAgIAkJCVwKKwkgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKS10cmFjZS5hZHMgICAJCQlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktbWVudXMuYWRzICAgCQkJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLmFkcyAgIAkJCVwKKwkgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKS1tb3VzZS5hZHMgCQkJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLXBhbmVscy5hZHMJCQlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWRzCVwKKwkgICAgICAgICAgJChBREFfU1JDRElSKS8kKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMJXAorCSAgICAgICAgICAkKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcwlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRzCQlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcwlcCisJICAgICAgICAgICQoQURBX1NSQ0RJUikvJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZHMKKworR0VOX1NSQwkJPSAkKHNyY2RpcikvJChBQkFTRSkuYWRzLm00CQkJCVwKKwkJICAkKHNyY2RpcikvJChBQkFTRSkuYWRiLm00CQkJCVwKKwkgICAgICAgICAgJChzcmNkaXIpLyQoQUJBU0UpLWF1eC5hZHMubTQgCSAgCQlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS10cmFjZS5hZHMubTQgCSAgCQlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy5hZHMubTQgCSAgCQlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy5hZHMubTQgICAJCQlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1tb3VzZS5hZHMubTQJCQlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMuYWRzLm00CQkJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWRzLm00CVwKKwkgICAgICAgICAgJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcy5tNAlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMubTQJXAorCSAgICAgICAgICAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRzLm00CQlcCisJICAgICAgICAgICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzLm00CVwKKwkgICAgICAgICAgJChzcmNkaXIpLyQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWRzLm00CisKKworYWxsIFwKK2xpYnMgOgkkKEdFTl9UQVJHRVRTKQorCUBlY2hvIG1hZGUgJEAKKworc291cmNlczoKKworJChBREFfSU5DTFVERSkgXAorJChBREFfT0JKRUNUUykgOgorCXNoICQodG9wX3NyY2RpcikvbWtkaXJzLnNoICRACisKK2luc3RhbGwgXAoraW5zdGFsbC5saWJzIDo6ICQoQURBX0lOQ0xVREUpCisJQGVjaG8gaW5zdGFsbGluZyBwYWNrYWdlICQoQUxJQikgaW4gJChBREFfSU5DTFVERSkKKwlAJCh0b3Bfc3JjZGlyKS90YXItY29weS5zaCAnJChBTElCKSouYWQ/JyAkKEFEQV9TUkNESVIpICQoQURBX0lOQ0xVREUpCisJQCQodG9wX3NyY2RpcikvdGFyLWNvcHkuc2ggJyQoQUxJQilbLS5dKi5hZD8nICQoQURBX1NSQ0RJUikgJChBREFfSU5DTFVERSkKKwlAdGVzdCAkKHNyY2RpcikgIT0gLi8gJiYgJCh0b3Bfc3JjZGlyKS90YXItY29weS5zaCAnJChBTElCKSouYWQ/JyAkKHNyY2RpcikvLi4vc3JjICQoQURBX0lOQ0xVREUpCisJQHRlc3QgJChzcmNkaXIpICE9IC4vICYmICQodG9wX3NyY2RpcikvdGFyLWNvcHkuc2ggJyQoQUxJQilbLS5dKi5hZD8nICQoc3JjZGlyKS8uLi9zcmMgJChBREFfSU5DTFVERSkKKworaW5zdGFsbCBcCitpbnN0YWxsLmxpYnMgOjogJChBREFfT0JKRUNUUykKKwlAZWNobyBpbnN0YWxsaW5nIHBhY2thZ2UgJChBTElCKSBpbiAkKEFEQV9PQkpFQ1RTKQorCUAtY2htb2QgYS13eCAkKEFEQV9TUkNESVIpLyouYWxpCisJQCQodG9wX3NyY2RpcikvdGFyLWNvcHkuc2ggJyQoQUxJQikqLmFsaScgJChBREFfU1JDRElSKSAkKEFEQV9PQkpFQ1RTKQorCUAkKHRvcF9zcmNkaXIpL3Rhci1jb3B5LnNoICckKEFMSUIpWy0uXSouYWxpJyAkKEFEQV9TUkNESVIpICQoQURBX09CSkVDVFMpCisJQC1jaG1vZCB1K3ggJChBREFfU1JDRElSKS8qLmFsaQorCitpbnN0YWxsIFwKK2luc3RhbGwubGlicyA6OiAkKERFU1RESVIpJChiaW5kaXIpIGFkYWN1cnNlcy1jb25maWcKKwkkKElOU1RBTExfUFJPRykgYWRhY3Vyc2VzLWNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpLyQoQURBQ1VSU0VTX0NPTkZJRykKKwordW5pbnN0YWxsIFwKK3VuaW5zdGFsbC5saWJzIDo6CisJQGVjaG8gcmVtb3ZpbmcgcGFja2FnZSAkKEFMSUIpIGZyb20gJChBREFfSU5DTFVERSkKKwktQGNkICQoQURBX0lOQ0xVREUpICYmIHJtIC1mICQoQUxJQilbLS5dKgorCit1bmluc3RhbGwgXAordW5pbnN0YWxsLmxpYnMgOjoKKwlAZWNobyByZW1vdmluZyBwYWNrYWdlICQoQUxJQikgZnJvbSAkKEFEQV9PQkpFQ1RTKQorCS1AY2QgJChBREFfT0JKRUNUUykgJiYgcm0gLWYgJChBTElCKVstLl0qCisKK3VuaW5zdGFsbCBcCit1bmluc3RhbGwubGlicyA6OgorCS1ybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoQURBQ1VSU0VTX0NPTkZJRykKKworZ2VuJHg6CWdlbi5vCisJQEVDSE9fTElOS0AgJChMSU5LKSAkKENGTEFHU19OT1JNQUwpIGdlbi5vICQoTERfRkxBR1MpIC1vICRACisKK2dlbi5vOgkkKHNyY2RpcikvZ2VuLmMKKwkkKEhPU1RfQ0MpICQoQ0ZMQUdTX05PUk1BTCkgLWMgLW8gJEAgJChzcmNkaXIpL2dlbi5jCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXRfUmVwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgQSIgPiRACisKK0Jhc2VfRGVmczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEIiID4kQAorCitDb2xvcl9EZWZzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgQyIgPiRACisKK1dpbmRvd19PZmZzZXRzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgRCIgPiRACisKK0tleV9EZWZpbml0aW9uczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEsiID4kQAorCitMaW5rZXJfT3B0aW9uczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEwiID4kQAorCitBQ1NfTWFwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgTSIgPiRACisKK09sZF9LZXlzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgTyIgPiRACisKK1B1YmxpY19WYXJpYWJsZXM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgQiBQIiA+JEAKKworQUNfUmVwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgUiIgPiRACisKK1ZlcnNpb25fSW5mbzogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIFYiID4kQAorCitUcmFjZV9EZWZzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEIgVCIgPiRACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTWVudV9PcHRfUmVwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIE0gUiIgPiRACisKK01lbnVfQmFzZV9EZWZzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIE0gQiIgPiRACisKK01lbnVfTGlua2VyX09wdGlvbnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgTSBMIiA+JEAKKworSXRlbV9SZXA6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgTSBJIiA+JEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitGb3JtX09wdF9SZXA6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgRiBSIiA+JEAKKworRm9ybV9CYXNlX0RlZnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgRiBCIiA+JEAKKworRm9ybV9MaW5rZXJfT3B0aW9uczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBGIEwiID4kQAorCitGaWVsZF9SZXA6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgRiBJIiA+JEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitNb3VzZV9CYXNlX0RlZnM6IGdlbiR4CisJJChXUkFQUEVSKSAiJChHRU5FUkFURSkgUCBCIiA+JEAKKworTW91c2VfRXZlbnRfUmVwOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIFAgTSIgPiRACisKK01vdXNlX0V2ZW50czogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBCIEUiID4kQAorCitQYW5lbF9MaW5rZXJfT3B0aW9uczogZ2VuJHgKKwkkKFdSQVBQRVIpICIkKEdFTkVSQVRFKSBQIEwiID4kQAorCitDaHR5cGVfRGVmOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEUgQyIgPiRACisKK0V0aV9EZWZzOiBnZW4keAorCSQoV1JBUFBFUikgIiQoR0VORVJBVEUpIEUgRSIgPiRACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworJChBREFfU1JDRElSKS8kKEFCQVNFKS5hZHM6IAkkKHNyY2RpcikvJChBQkFTRSkuYWRzLm00IFwKKwkJCQkkKEdFTl9GSUxFUzEpICQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSkuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKKyQoQURBX1NSQ0RJUikvJChBQkFTRSkuYWRiOiAJJChzcmNkaXIpLyQoQUJBU0UpLmFkYi5tNCBcCisJCQkJJChHRU5fRklMRVMxKSAkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLmFkYi5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLWF1eC5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS1hdXguYWRzLm00IFwKKwkJCQkkKEdFTl9GSUxFUzUpICQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktYXV4LmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLXRyYWNlLmFkczogJChzcmNkaXIpLyQoQUJBU0UpLXRyYWNlLmFkcy5tNCBcCisJCQkJJChHRU5fRklMRVM1KSAkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLXRyYWNlLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLW1lbnVzLmFkczogJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLmFkcy5tNCBcCisJCQkJICAkKEdFTl9GSUxFUzIpICQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktbWVudXMuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKKyQoQURBX1NSQ0RJUikvJChBQkFTRSktZm9ybXMuYWRzOiAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMuYWRzLm00IFwKKwkJCQkgICQoR0VOX0ZJTEVTMykgJChzcmNkaXIpL25vcm1hbC5tNAorCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAorCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1tb3VzZS5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS1tb3VzZS5hZHMubTQgXAorCQkJCSAgJChHRU5fRklMRVM0KSAkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLW1vdXNlLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLXBhbmVscy5hZHM6ICQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMuYWRzLm00IFwKKwkJCQkgICAkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLXBhbmVscy5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHM6IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcy5tNCBcCisJCSQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKKyQoQURBX1NSQ0RJUikvJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMubTQgXAorCQkkKHNyY2Rpcikvbm9ybWFsLm00CisJJChNNCkgJChNNEZMQUdTKSAtRE00TUFDUk89JChzcmNkaXIpL25vcm1hbC5tNCBcCisJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkczogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzLm00IFwKKwkJJChzcmNkaXIpL25vcm1hbC5tNAorCSQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPSQoc3JjZGlyKS9ub3JtYWwubTQgXAorCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworJChBREFfU1JDRElSKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hZHM6IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLmFkcy5tNCBcCisJCSQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMuYWRzLm00IHxcCisJJChERUxfQURBTU9ERSkgPiRACisKKyQoQURBX1NSQ0RJUikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkczogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNCBcCisJCSQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkcy5tNCB8XAorCSQoREVMX0FEQU1PREUpID4kQAorCiskKEFEQV9TUkNESVIpLyQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEuYWRzOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLmFkcy5tNCBcCisJCSQoc3JjZGlyKS9ub3JtYWwubTQKKwkkKE00KSAkKE00RkxBR1MpIC1ETTRNQUNSTz0kKHNyY2Rpcikvbm9ybWFsLm00IFwKKwkkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZHMubTQgfFwKKwkkKERFTF9BREFNT0RFKSA+JEAKKworaW5zdGFsbC5wcm9ncyA6OgorCit0YWdzOgorCWN0YWdzICouW2NoXQorCitATUFLRV9VUFBFUl9UQUdTQFRBR1M6CitATUFLRV9VUFBFUl9UQUdTQAlldGFncyAqLltjaF0KKworbW9zdGx5Y2xlYW4gOjoKKwktcm0gLWYgYS5vdXQgY29yZSBnZW4keCAqLm8KKwktcm0gLWYgJChHRU5fRklMRVMxKQorCS1ybSAtZiAkKEdFTl9GSUxFUzIpCisJLXJtIC1mICQoR0VOX0ZJTEVTMykKKwktcm0gLWYgJChHRU5fRklMRVM0KQorCS1ybSAtZiAkKEdFTl9GSUxFUzUpCisKK2NsZWFuIDo6IG1vc3RseWNsZWFuCisJLXJtIC1mICQoR0VOX1RBUkdFVFMpIGluc3RhYi50bXAgKi5hZFtic10gKi5odG1sICouYWxpICoudG1wCisKK2Rpc3RjbGVhbiA6OiBjbGVhbgorCS1ybSAtZiBhZGFjdXJzZXMtY29uZmlnCisJLXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworSFRNTF9ESVIgPSAuLi8uLi9kb2MvaHRtbC9hZGEKKworaW5zdGFiLnRtcCA6IHRhYmxlLm00ICQoR0VOX1NSQykKKwlAcm0gLWYgJEAKKwlAZm9yIGYgaW4gJChHRU5fU1JDKSA7IGRvIFwKKwkgICQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPXRhYmxlLm00ICQkZiB8ICQoREVMX0FEQU1PREUpID4+ICRAIDtcCisJZG9uZTsKKworJChIVE1MX0RJUikvdGFibGUuaHRtbCA6IGluc3RhYi50bXAKKwlALXRvdWNoICRACisJQC1jaG1vZCArdyAkQAorCUBlY2hvICc8IURPQ1RZUEUgSFRNTCcgID4gJEAKKwlAZWNobyAnUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAzLjAvL0VOIj4nID4+ICRACisJQGVjaG8gJzxIVE1MPicgPj4gJEAKKwlAZWNobyAnPEhFQUQ+JyA+PiAkQAorCUBlY2hvICc8VElUTEU+Q29ycmVzcG9uZGVuY2UgYmV0d2VlbiBuY3Vyc2VzIEMgYW5kIEFkYSBmdW5jdGlvbnM8L1RJVExFPicgPj4kQAorCUBlY2hvICc8L0hFQUQ+JyA+PiAkQAorCUBlY2hvICc8Qk9EWT4nID4+ICRACisJQGVjaG8gJzxIMT5Db3JyZXNwb25kZW5jZSBiZXR3ZWVuIG5jdXJzZXMgQyBhbmQgQWRhIGZ1bmN0aW9uczwvSDE+JyA+PiRACisJQGVjaG8gJzxIMj5Tb3J0ZWQgYnkgQyBmdW5jdGlvbiBuYW1lPC9IMj4nID4+JEAKKwlAZWNobyAnPFRBQkxFIEFMSUdOPUNFTlRFUiBCT1JERVI+JyA+PiRACisJQGVjaG8gJzxUUiBBTElHTj1MRUZUPicgPj4kQAorCUBlY2hvICc8VEg+QyBuYW1lPC9USD48VEg+QWRhIG5hbWU8L1RIPjxUSD5tYW4gcGFnZTwvVEg+PC9UUj4nID4+JEAKKwlAc29ydCA8IGluc3RhYi50bXAgPj4gJEAKKwlAZWNobyAnPC9UQUJMRT48L0JPRFk+PC9IVE1MPicgPj4kQAorCUBybSAtZiBpbnN0YWIudG1wCisKK2FkYWh0bWw6CisJQGZpbmQgJChIVE1MX0RJUikgLXR5cGUgZiAtZXhlYyBybSAtZiB7fSBcOworCUBta2RpciAtcCAkKEhUTUxfRElSKQorCWNwIC1wIC4uL3NyYy8qLmFkW3NiXSAuICYmIGNobW9kICt3ICouYWRbc2JdCisJbG4gLXNmIC4uL3NyYy8qLmFsaSAuCisJQGVjaG8gIkZpbHRlcmluZyBnZW5lcmF0ZWQgZmlsZXMiCisJQGZvciBmIGluICQoR0VOX1NSQyk7IGRvIFwKKwkgICBoPWBiYXNlbmFtZSAkJGZgIDtcCisJICAgZz1gYmFzZW5hbWUgJCRmIC5hZHMubTRgIDtcCisJICAgaWYgdGVzdCAiJCRnIiAhPSAiJCRoIiA7IHRoZW4gXAorCSAgICAgICQoTTQpICQoTTRGTEFHUykgLURNNE1BQ1JPPWh0bWwubTQgJCRmIHwgJChERUxfQURBTU9ERSkgPiAkJGcuYWRzIDtcCisJICAgICAgZWNobyAiLi4uICQkZy5hZHMiIDtcCisJICAgZmkgXAorCWRvbmUKKwlALXJtIC1mICQoSFRNTF9ESVIpLyQoQUxJQikqLmh0bSoKKwkkKEdOQVRIVE1MKSAtZCAtZiAkKEFMSUIpKi5hZHMKKwlmb3IgZiBpbiBodG1sLyQoQUxJQikqLmh0bSo7IGRvIFwKKwkgICBhPWBiYXNlbmFtZSAkJGZgIDsgXAorCSAgIHNlZCAtZSAncy9Zb3UgbWF5IGFsc28uKmJvZHkuKi8vJyA8JCRmIHxcCisJICAgc2VkIC1lICdzJUdOQVQlPEEgSFJFRj0iaHR0cDovLyQoR05BVEhQKSI+R05BVDwvQT4lZycgfFwKKwkgICBzZWQgLWUgJ3MlJmx0O0EgSFJFRiU8QSBIUkVGJWcnIHxcCisJICAgc2VkIC1lICdzJSImZ3Q7JSI+JWcnIHxcCisJICAgc2VkIC1lICdzLzNYLzN4L2cnIHxcCisJICAgc2VkIC1lICdzLyQkXChbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHowMTIzNDU2Nzg5X10qOi4qXClcJCQvQFwxQC8nIHxcCisJICAgc2VkIC1lICdzJSZsdDsvQSZndDslPC9BPiVnJyA+ICQkYS50bXAgO1wKKwkgICBtdiAkJGEudG1wICQkZiA7XAorCWRvbmUKKwlAcm0gLWYgKi5hZFtzYl0gKi5hbGkgKi50bXAKKwlAZm9yIGYgaW4gZnVuY3MuaHRtIG1haW4uaHRtIDsgZG8gXAorCSAgc2VkIC1lICJcJTxBIEhSRUY9ZnVuY3MvIC5odG0+XFsgXF08L0E+JWQiIDwgaHRtbC8kJGYgPiAkJGYgO1wKKwkgIG12ICQkZiBodG1sLyQkZiA7XAorCWRvbmUKKwlAcm0gLWYgImh0bWwvZnVuY3MvIC5odG0iCisJQGNwIC1wZHJmIGh0bWwvKiAkKEhUTUxfRElSKS8KKwlAcm0gLXJmIGh0bWwKKworaHRtbCA6IGFkYWh0bWwgJChIVE1MX0RJUikvdGFibGUuaHRtbAorCUBlY2hvIG1hZGUgJEAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL2FkYWN1cnNlcy1jb25maWcuaW4gYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vYWRhY3Vyc2VzLWNvbmZpZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODhkODViCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL2FkYWN1cnNlcy1jb25maWcuaW4KQEAgLTAsMCArMSwzNSBAQAorIyEgL2Jpbi9zaAorIyAkSWQ6IGFkYWN1cnNlcy1jb25maWcuaW4sdiAxLjIgMjAwNy8wNC8wNyAyMTowNjo1MCB0b20gRXhwICQKKyMKKyMgVGhpcyBzY3JpcHQgd2lsbCByZXR1cm4gdGhlIG9wdGlvbiB0byBhZGQgdG8gYGduYXRtYWtlJyBmb3IgdXNpbmcKKyMgQWRhQ3Vyc2VzLgorIworCitwcmVmaXg9IkBwcmVmaXhAIgorZXhlY19wcmVmaXg9IkBleGVjX3ByZWZpeEAiCitsaWJkaXI9IkBsaWJkaXJAIgorCitWRVJTSU9OPSJATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JALkBOQ1VSU0VTX1BBVENIQCIKKworQ0ZMQUdTPSItSSRsaWJkaXIvYWRhY3Vyc2VzIC1MJGxpYmRpci9hZGFjdXJzZXMiCitMSUJTPSItTCRwcmVmaXgvbGliIC1sQWRhQ3Vyc2VzIgorCitjYXNlICJ4JDEiIGluCisgICAgeC0tdmVyc2lvbikKKyAgICAgICAgZWNobyBBZGFDdXJzZXMgJFZFUlNJT04KKyAgICAgICAgOzsKKyAgICB4LS1jZmxhZ3MpCisgICAgICAgIGVjaG8gJENGTEFHUworICAgICAgICA7OworICAgIHgtLWxpYnMpCisgICAgICAgIGVjaG8gJExJQlMKKyAgICAgICAgOzsKKyAgICB4KQorICAgIAkjIGlmIG5vIHBhcmFtZXRlciBpcyBnaXZlbiwgZ2l2ZSB3aGF0IGduYXRtYWtlIG5lZWRzCisgICAgICAgIGVjaG8gJENGTEFHUyAtbGFyZ3MgJExJQlMKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBlY2hvICdVc2FnZTogYWRhY3Vyc2VzLWNvbmZpZyBbLS12ZXJzaW9uIHwgLS1jZmxhZ3MgfCAtLWxpYnNdJyA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICAgIDs7Citlc2FjCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vZ2VuLmMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vZ2VuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlYTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi9nZW4uYwpAQCAtMCwwICsxLDE1MjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgICAgVmVyc2lvbiBDb250cm9sCisgICAgJElkOiBnZW4uYyx2IDEuNDkgMjAwOC8xMC8wNCAyMTo1OTozNyB0b20gRXhwICQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAgVGhpcyBwcm9ncmFtIGdlbmVyYXRlcyB2YXJpb3VzIHJlY29yZCBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMgZnJvbSB0aGUKKyAgbmN1cnNlcyBoZWFkZXIgZmlsZSBmb3IgdGhlIEFkYTk1IHBhY2thZ2VzLiBFc3NlbnRpYWxseSBpdCBwcm9kdWNlcworICBBZGE5NSBzb3VyY2Ugb24gc3Rkb3V0LCB3aGljaCBpcyB0aGVuIG1lcmdlZCB1c2luZyBtNCBpbnRvIGEgdGVtcGxhdGUKKyAgdG8gcHJvZHVjZSB0aGUgcmVhbCBzb3VyY2UuCisgICovCisKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPG1lbnUuaD4KKyNpbmNsdWRlIDxmb3JtLmg+CisKKyNkZWZpbmUgUkVTX05BTUUgIlJlc2VydmVkIgorCitzdGF0aWMgY29uc3QgY2hhciAqbW9kZWwgPSAiIjsKK3N0YXRpYyBpbnQgbGl0dGxlX2VuZGlhbiA9IDA7CisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHVuc2lnbmVkIGxvbmcgYXR0cjsKKyAgfQorbmFtZV9hdHRyaWJ1dGVfcGFpcjsKKworc3RhdGljIGludAorZmluZF9wb3MoY2hhciAqcywgdW5zaWduZWQgbGVuLCBpbnQgKmxvdywgaW50ICpoaWdoKQoreworICB1bnNpZ25lZCBpbnQgaSwgajsKKyAgaW50IGwgPSAwOworCisgICpoaWdoID0gLTE7CisgICpsb3cgPSA4ICogbGVuOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgcysrKQorICAgIHsKKyAgICAgIGlmICgqcykKKwl7CisJICBmb3IgKGogPSAwOyBqIDwgOCAqIHNpemVvZihjaGFyKTsgaisrKQorCisJICAgIHsKKwkgICAgICBpZiAoKChsaXR0bGVfZW5kaWFuICYmICgoKnMpICYgMHgwMSkpIHx8CisJCSAgICghbGl0dGxlX2VuZGlhbiAmJiAoKCpzKSAmIDB4ODApKSkpCisJCXsKKwkJICBpZiAobCA+ICpoaWdoKQorCQkgICAgKmhpZ2ggPSBsOworCQkgIGlmIChsIDwgKmxvdykKKwkJICAgICpsb3cgPSBsOworCQl9CisJICAgICAgbCsrOworCSAgICAgIGlmIChsaXR0bGVfZW5kaWFuKQorCQkqcyA+Pj0gMTsKKwkgICAgICBlbHNlCisJCSpzIDw8PSAxOworCSAgICB9CisJfQorICAgICAgZWxzZQorCWwgKz0gODsKKyAgICB9CisgIHJldHVybiAoKmhpZ2ggPj0gMCAmJiAoKmxvdyA8PSAqaGlnaCkpID8gKmxvdyA6IC0xOworfQorCisvKgorICogVGhpcyBoZWxwZXIgcm91dGluZSBnZW5lcmF0ZXMgYSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIGEKKyAqIHJlY29yZCB0eXBlIGRlZmluZWQgaW4gdGhlIGJpbmRpbmcuCisgKiBXZSBhcmUgb25seSBkZWFsaW5nIHdpdGggcmVjb3JkIHR5cGVzIHdoaWNoIGFyZSBvZiAzMiBvciAxNgorICogYml0IHNpemUsIGkuZS4gdGhleSBmaXQgaW50byBhbiAodSlpbnQgb3IgYSAodSlzaG9ydC4KKyAqLworc3RhdGljIHZvaWQKKyAgZ2VuX3JlcHMKKyAgKGNvbnN0IG5hbWVfYXR0cmlidXRlX3BhaXIgKiBuYXAsCS8qIGFycmF5IG9mIG5hbWVfYXR0cmlidXRlX3BhaXIgcmVjb3JkcyAqLworICAgY29uc3QgY2hhciAqbmFtZSwJCS8qIG5hbWUgb2YgdGhlIHJlcHJlc2VudGVkIHJlY29yZCB0eXBlICAqLworICAgaW50IGxlbiwJCQkvKiBzaXplIG9mIHRoZSByZWNvcmQgaW4gYnl0ZXMgICAgICAgICAgKi8KKyAgIGludCBiaWFzKQoreworICBpbnQgaSwgbiwgbCwgY250ID0gMCwgbG93LCBoaWdoOworICBpbnQgd2lkdGggPSBzdHJsZW4oUkVTX05BTUUpICsgMzsKKyAgdW5zaWduZWQgbG9uZyBhOworICB1bnNpZ25lZCBsb25nIG1hc2sgPSAwOworCisgIGFzc2VydChuYXAgIT0gTlVMTCk7CisKKyAgZm9yIChpID0gMDsgbmFwW2ldLm5hbWUgIT0gKGNoYXIgKikwOyBpKyspCisgICAgeworICAgICAgY250Kys7CisgICAgICBsID0gc3RybGVuKG5hcFtpXS5uYW1lKTsKKyAgICAgIGlmIChsID4gd2lkdGgpCisJd2lkdGggPSBsOworICAgIH0KKyAgYXNzZXJ0KHdpZHRoID4gMCk7CisKKyAgcHJpbnRmKCIgICB0eXBlICVzIGlzXG4iLCBuYW1lKTsKKyAgcHJpbnRmKCIgICAgICByZWNvcmRcbiIpOworICBmb3IgKGkgPSAwOyBuYXBbaV0ubmFtZSAhPSAoY2hhciAqKTA7IGkrKykKKyAgICB7CisgICAgICBwcmludGYoIiAgICAgICAgICUtKnMgOiBCb29sZWFuO1xuIiwgd2lkdGgsIG5hcFtpXS5uYW1lKTsKKyAgICB9CisgIHByaW50ZigiICAgICAgZW5kIHJlY29yZDtcbiIpOworICBwcmludGYoIiAgIHByYWdtYSBDb252ZW50aW9uIChDLCAlcyk7XG5cbiIsIG5hbWUpOworCisgIHByaW50ZigiICAgZm9yICVzIHVzZVxuIiwgbmFtZSk7CisgIHByaW50ZigiICAgICAgcmVjb3JkXG4iKTsKKworICBmb3IgKGkgPSAwOyBuYXBbaV0ubmFtZSAhPSAoY2hhciAqKTA7IGkrKykKKyAgICB7CisgICAgICBhID0gbmFwW2ldLmF0dHI7CisgICAgICBtYXNrIHw9IGE7CisgICAgICBsID0gZmluZF9wb3MoKGNoYXIgKikmYSwgc2l6ZW9mKGEpLCAmbG93LCAmaGlnaCk7CisgICAgICBpZiAobCA+PSAwKQorCXByaW50ZigiICAgICAgICAgJS0qcyBhdCAwIHJhbmdlICUyZCAuLiAlMmQ7XG4iLCB3aWR0aCwgbmFwW2ldLm5hbWUsCisJICAgICAgIGxvdyAtIGJpYXMsIGhpZ2ggLSBiaWFzKTsKKyAgICB9CisgIGkgPSAxOworICBuID0gY250OworICBwcmludGYoIiAgICAgIGVuZCByZWNvcmQ7XG4iKTsKKyAgcHJpbnRmKCIgICBmb3IgJXMnU2l6ZSB1c2UgJWQ7XG4iLCBuYW1lLCA4ICogbGVuKTsKKyAgcHJpbnRmKCIgICAtLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmVcbiIpOworICBwcmludGYoIiAgIC0tICAgICAgICAgICAgICAgZGlmZmVyZW50IG9uIHlvdXIgc3lzdGVtLiIpOworfQorCitzdGF0aWMgdm9pZAorY2h0eXBlX3JlcChjb25zdCBjaGFyICpuYW1lLCBhdHRyX3QgbWFzaykKK3sKKyAgYXR0cl90IHggPSAtMTsKKyAgYXR0cl90IHQgPSB4ICYgbWFzazsKKyAgaW50IGxvdywgaGlnaDsKKyAgaW50IGwgPSBmaW5kX3BvcygoY2hhciAqKSZ0LCBzaXplb2YodCksICZsb3csICZoaWdoKTsKKworICBpZiAobCA+PSAwKQorICAgIHByaW50ZigiICAgICAgICAgJS01cyBhdCAwIHJhbmdlICUyZCAuLiAlMmQ7XG4iLCBuYW1lLCBsb3csIGhpZ2gpOworfQorCitzdGF0aWMgdm9pZAorZ2VuX2NodHlwZV9yZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgcHJpbnRmKCIgICBmb3IgJXMgdXNlXG4gICAgICByZWNvcmRcbiIsIG5hbWUpOworICBjaHR5cGVfcmVwKCJDaCIsIEFfQ0hBUlRFWFQpOworICBjaHR5cGVfcmVwKCJDb2xvciIsIEFfQ09MT1IpOworICBjaHR5cGVfcmVwKCJBdHRyIiwgKEFfQVRUUklCVVRFUyAmIH5BX0NPTE9SKSk7CisgIHByaW50ZigiICAgICAgZW5kIHJlY29yZDtcbiAgIGZvciAlcydTaXplIHVzZSAlbGQ7XG4iLAorCSBuYW1lLCAobG9uZykoOCAqIHNpemVvZihjaHR5cGUpKSk7CisKKyAgcHJpbnRmKCIgICAgICAtLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmVcbiIpOworICBwcmludGYoIiAgICAgIC0tICAgICAgICAgICAgICAgZGlmZmVyZW50IG9uIHlvdXIgc3lzdGVtLlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCittcmVwX3JlcChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpyZWMpCit7CisgIGludCBsb3csIGhpZ2g7CisgIGludCBsID0gZmluZF9wb3MoKGNoYXIgKilyZWMsIHNpemVvZihNRVZFTlQpLCAmbG93LCAmaGlnaCk7CisKKyAgaWYgKGwgPj0gMCkKKyAgICBwcmludGYoIiAgICAgICAgICUtN3MgYXQgMCByYW5nZSAlM2QgLi4gJTNkO1xuIiwgbmFtZSwgbG93LCBoaWdoKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl9tcmVwX3JlcChjb25zdCBjaGFyICpuYW1lKQoreworICBNRVZFTlQgeDsKKworICBwcmludGYoIiAgIGZvciAlcyB1c2VcbiAgICAgIHJlY29yZFxuIiwgbmFtZSk7CisKKyAgbWVtc2V0KCZ4LCAwLCBzaXplb2YoeCkpOworICB4LmlkID0gLTE7CisgIG1yZXBfcmVwKCJJZCIsICZ4KTsKKworICBtZW1zZXQoJngsIDAsIHNpemVvZih4KSk7CisgIHgueCA9IC0xOworICBtcmVwX3JlcCgiWCIsICZ4KTsKKworICBtZW1zZXQoJngsIDAsIHNpemVvZih4KSk7CisgIHgueSA9IC0xOworICBtcmVwX3JlcCgiWSIsICZ4KTsKKworICBtZW1zZXQoJngsIDAsIHNpemVvZih4KSk7CisgIHgueiA9IC0xOworICBtcmVwX3JlcCgiWiIsICZ4KTsKKworICBtZW1zZXQoJngsIDAsIHNpemVvZih4KSk7CisgIHguYnN0YXRlID0gLTE7CisgIG1yZXBfcmVwKCJCc3RhdGUiLCAmeCk7CisKKyAgcHJpbnRmKCIgICAgICBlbmQgcmVjb3JkO1xuIik7CisgIHByaW50ZigiICAgICAgLS0gIFBsZWFzZSBub3RlOiB0aGlzIHJlcC4gY2xhdXNlIGlzIGdlbmVyYXRlZCBhbmQgbWF5IGJlXG4iKTsKKyAgcHJpbnRmKCIgICAgICAtLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS5cbiIpOworfQorCitzdGF0aWMgdm9pZAorZ2VuX2F0dHJfc2V0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIC8qIEFsbCBvZiB0aGUgQV94eHggc3ltYm9scyBhcmUgZGVmaW5lZCBpbiBuY3Vyc2VzLCBidXQgbm90IGFsbCBhcmUgbm9uemVybworICAgKiBpZiAiY29uZmlndXJlIC0tZW5hYmxlLXdpZGVjIiBpcyBzcGVjaWZpZWQuCisgICAqLworICBzdGF0aWMgY29uc3QgbmFtZV9hdHRyaWJ1dGVfcGFpciBuYXBbXSA9CisgIHsKKyNpZiBBX1NUQU5ET1VUCisgICAgeyJTdGFuZF9PdXQiLCBBX1NUQU5ET1VUfSwKKyNlbmRpZgorI2lmIEFfVU5ERVJMSU5FCisgICAgeyJVbmRlcl9MaW5lIiwgQV9VTkRFUkxJTkV9LAorI2VuZGlmCisjaWYgQV9SRVZFUlNFCisgICAgeyJSZXZlcnNlX1ZpZGVvIiwgQV9SRVZFUlNFfSwKKyNlbmRpZgorI2lmIEFfQkxJTksKKyAgICB7IkJsaW5rIiwgQV9CTElOS30sCisjZW5kaWYKKyNpZiBBX0RJTQorICAgIHsiRGltX0NoYXJhY3RlciIsIEFfRElNfSwKKyNlbmRpZgorI2lmIEFfQk9MRAorICAgIHsiQm9sZF9DaGFyYWN0ZXIiLCBBX0JPTER9LAorI2VuZGlmCisjaWYgQV9BTFRDSEFSU0VUCisgICAgeyJBbHRlcm5hdGVfQ2hhcmFjdGVyX1NldCIsIEFfQUxUQ0hBUlNFVH0sCisjZW5kaWYKKyNpZiBBX0lOVklTCisgICAgeyJJbnZpc2libGVfQ2hhcmFjdGVyIiwgQV9JTlZJU30sCisjZW5kaWYKKyNpZiBBX1BST1RFQ1QKKyAgICB7IlByb3RlY3RlZF9DaGFyYWN0ZXIiLCBBX1BST1RFQ1R9LAorI2VuZGlmCisjaWYgQV9IT1JJWk9OVEFMCisgICAgeyJIb3Jpem9udGFsIiwgQV9IT1JJWk9OVEFMfSwKKyNlbmRpZgorI2lmIEFfTEVGVAorICAgIHsiTGVmdCIsIEFfTEVGVH0sCisjZW5kaWYKKyNpZiBBX0xPVworICAgIHsiTG93IiwgQV9MT1d9LAorI2VuZGlmCisjaWYgQV9SSUdIVAorICAgIHsiUmlnaHQiLCBBX1JJR0hUfSwKKyNlbmRpZgorI2lmIEFfVE9QCisgICAgeyJUb3AiLCBBX1RPUH0sCisjZW5kaWYKKyNpZiBBX1ZFUlRJQ0FMCisgICAgeyJWZXJ0aWNhbCIsIEFfVkVSVElDQUx9LAorI2VuZGlmCisgICAgeyhjaGFyICopMCwgMH0KKyAgfTsKKyAgY2h0eXBlIGF0dHIgPSBBX0FUVFJJQlVURVMgJiB+QV9DT0xPUjsKKyAgaW50IHN0YXJ0ID0gLTE7CisgIGludCBsZW4gPSAwOworICBpbnQgaSwgc2V0OworICBmb3IgKGkgPSAwOyBpIDwgKGludCkoOCAqIHNpemVvZihjaHR5cGUpKTsgaSsrKQorCisgICAgeworICAgICAgc2V0ID0gYXR0ciAmIDE7CisgICAgICBpZiAoc2V0KQorCXsKKwkgIGlmIChzdGFydCA8IDApCisJICAgIHN0YXJ0ID0gaTsKKwkgIGlmIChzdGFydCA+PSAwKQorCSAgICB7CisJICAgICAgbGVuKys7CisJICAgIH0KKwl9CisgICAgICBhdHRyID0gYXR0ciA+PiAxOworICAgIH0KKyAgZ2VuX3JlcHMobmFwLCBuYW1lLCAobGVuICsgNykgLyA4LCBsaXR0bGVfZW5kaWFuID8gc3RhcnQgOiAwKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl90cmFjZShjb25zdCBjaGFyICpuYW1lKQoreworICBzdGF0aWMgY29uc3QgbmFtZV9hdHRyaWJ1dGVfcGFpciBuYXBbXSA9CisgIHsKKyAgICB7IlRpbWVzIiwgVFJBQ0VfVElNRVN9LAorICAgIHsiVHB1dHMiLCBUUkFDRV9UUFVUU30sCisgICAgeyJVcGRhdGUiLCBUUkFDRV9VUERBVEV9LAorICAgIHsiQ3Vyc29yX01vdmUiLCBUUkFDRV9NT1ZFfSwKKyAgICB7IkNoYXJhY3Rlcl9PdXRwdXQiLCBUUkFDRV9DSEFSUFVUfSwKKyAgICB7IkNhbGxzIiwgVFJBQ0VfQ0FMTFN9LAorICAgIHsiVmlydHVhbF9QdXRzIiwgVFJBQ0VfVklSVFBVVH0sCisgICAgeyJJbnB1dF9FdmVudHMiLCBUUkFDRV9JRVZFTlR9LAorICAgIHsiVFRZX1N0YXRlIiwgVFJBQ0VfQklUU30sCisgICAgeyJJbnRlcm5hbF9DYWxscyIsIFRSQUNFX0lDQUxMU30sCisgICAgeyJDaGFyYWN0ZXJfQ2FsbHMiLCBUUkFDRV9DQ0FMTFN9LAorICAgIHsiVGVybWNhcF9UZXJtSW5mbyIsIFRSQUNFX0RBVEFCQVNFfSwKKyAgICB7KGNoYXIgKikwLCAwfQorICB9OworICBnZW5fcmVwcyhuYXAsIG5hbWUsIHNpemVvZihpbnQpLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl9tZW51X29wdF9yZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RhdGljIGNvbnN0IG5hbWVfYXR0cmlidXRlX3BhaXIgbmFwW10gPQorICB7CisjaWZkZWYgT19PTkVWQUxVRQorICAgIHsiT25lX1ZhbHVlZCIsIE9fT05FVkFMVUV9LAorI2VuZGlmCisjaWZkZWYgT19TSE9XREVTQworICAgIHsiU2hvd19EZXNjcmlwdGlvbnMiLCBPX1NIT1dERVNDfSwKKyNlbmRpZgorI2lmZGVmIE9fUk9XTUFKT1IKKyAgICB7IlJvd19NYWpvcl9PcmRlciIsIE9fUk9XTUFKT1J9LAorI2VuZGlmCisjaWZkZWYgT19JR05PUkVDQVNFCisgICAgeyJJZ25vcmVfQ2FzZSIsIE9fSUdOT1JFQ0FTRX0sCisjZW5kaWYKKyNpZmRlZiBPX1NIT1dNQVRDSAorICAgIHsiU2hvd19NYXRjaGVzIiwgT19TSE9XTUFUQ0h9LAorI2VuZGlmCisjaWZkZWYgT19OT05DWUNMSUMKKyAgICB7Ik5vbl9DeWNsaWMiLCBPX05PTkNZQ0xJQ30sCisjZW5kaWYKKyAgICB7KGNoYXIgKikwLCAwfQorICB9OworICBnZW5fcmVwcyhuYXAsIG5hbWUsIHNpemVvZihpbnQpLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl9pdGVtX29wdF9yZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RhdGljIGNvbnN0IG5hbWVfYXR0cmlidXRlX3BhaXIgbmFwW10gPQorICB7CisjaWZkZWYgT19TRUxFQ1RBQkxFCisgICAgeyJTZWxlY3RhYmxlIiwgT19TRUxFQ1RBQkxFfSwKKyNlbmRpZgorICAgIHsoY2hhciAqKTAsIDB9CisgIH07CisgIGdlbl9yZXBzKG5hcCwgbmFtZSwgc2l6ZW9mKGludCksIDApOworfQorCitzdGF0aWMgdm9pZAorZ2VuX2Zvcm1fb3B0X3JlcChjb25zdCBjaGFyICpuYW1lKQoreworICBzdGF0aWMgY29uc3QgbmFtZV9hdHRyaWJ1dGVfcGFpciBuYXBbXSA9CisgIHsKKyNpZmRlZiBPX05MX09WRVJMT0FECisgICAgeyJOTF9PdmVybG9hZCIsIE9fTkxfT1ZFUkxPQUR9LAorI2VuZGlmCisjaWZkZWYgT19CU19PVkVSTE9BRAorICAgIHsiQlNfT3ZlcmxvYWQiLCBPX0JTX09WRVJMT0FEfSwKKyNlbmRpZgorICAgIHsoY2hhciAqKTAsIDB9CisgIH07CisgIGdlbl9yZXBzKG5hcCwgbmFtZSwgc2l6ZW9mKGludCksIDApOworfQorCisvKgorICogR2VuZXJhdGUgdGhlIHJlcHJlc2VudGF0aW9uIGNsYXVzZSBmb3IgdGhlIEZpZWxkX09wdGlvbl9TZXQgcmVjb3JkCisgKi8KK3N0YXRpYyB2b2lkCitnZW5fZmllbGRfb3B0X3JlcChjb25zdCBjaGFyICpuYW1lKQoreworICBzdGF0aWMgY29uc3QgbmFtZV9hdHRyaWJ1dGVfcGFpciBuYXBbXSA9CisgIHsKKyNpZmRlZiBPX1ZJU0lCTEUKKyAgICB7IlZpc2libGUiLCBPX1ZJU0lCTEV9LAorI2VuZGlmCisjaWZkZWYgT19BQ1RJVkUKKyAgICB7IkFjdGl2ZSIsIE9fQUNUSVZFfSwKKyNlbmRpZgorI2lmZGVmIE9fUFVCTElDCisgICAgeyJQdWJsaWMiLCBPX1BVQkxJQ30sCisjZW5kaWYKKyNpZmRlZiBPX0VESVQKKyAgICB7IkVkaXQiLCBPX0VESVR9LAorI2VuZGlmCisjaWZkZWYgT19XUkFQCisgICAgeyJXcmFwIiwgT19XUkFQfSwKKyNlbmRpZgorI2lmZGVmIE9fQkxBTksKKyAgICB7IkJsYW5rIiwgT19CTEFOS30sCisjZW5kaWYKKyNpZmRlZiBPX0FVVE9TS0lQCisgICAgeyJBdXRvX1NraXAiLCBPX0FVVE9TS0lQfSwKKyNlbmRpZgorI2lmZGVmIE9fTlVMTE9LCisgICAgeyJOdWxsX09rIiwgT19OVUxMT0t9LAorI2VuZGlmCisjaWZkZWYgT19QQVNTT0sKKyAgICB7IlBhc3NfT2siLCBPX1BBU1NPS30sCisjZW5kaWYKKyNpZmRlZiBPX1NUQVRJQworICAgIHsiU3RhdGljIiwgT19TVEFUSUN9LAorI2VuZGlmCisgICAgeyhjaGFyICopMCwgMH0KKyAgfTsKKyAgZ2VuX3JlcHMobmFwLCBuYW1lLCBzaXplb2YoaW50KSwgMCk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhIHNpbmdsZSBrZXkgY29kZSBjb25zdGFudCBkZWZpbml0aW9uLgorICovCitzdGF0aWMgdm9pZAora2V5ZGVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgdmFsdWUsIGludCBtb2RlKQoreworICBpZiAobW9kZSA9PSAwKQkJLyogR2VuZXJhdGUgdGhlIG5ldyBuYW1lICovCisgICAgcHJpbnRmKCIgICAlLTMwcyA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUgOj0gOCMlM28jO1xuIiwgbmFtZSwgdmFsdWUpOworICBlbHNlCisgICAgewkJCQkvKiBnZW5lcmF0ZSB0aGUgb2xkIG5hbWUsIGJ1dCBvbmx5IGlmIGl0IGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCB0aGUgb2xkCisJCQkJICogbmFtZSAoQWRhOTUgaXNuJ3QgY2FzZSBzZW5zaXRpdmUhKQorCQkJCSAqLworICAgICAgY29uc3QgY2hhciAqcyA9IG9sZF9uYW1lOworICAgICAgY29uc3QgY2hhciAqdCA9IG5hbWU7CisKKyAgICAgIHdoaWxlICgqcyAmJiAqdCAmJiAodG91cHBlcigqcysrKSA9PSB0b3VwcGVyKCp0KyspKSk7CisgICAgICBpZiAoKnMgfHwgKnQpCisJcHJpbnRmKCIgICAlLTE2cyA6IFNwZWNpYWxfS2V5X0NvZGUgcmVuYW1lcyAlcztcbiIsIG9sZF9uYW1lLCBuYW1lKTsKKyAgICB9Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBjb25zdGFudHMgZm9yIHRoZSBrZXkgY29kZXMuIFdoZW4gY2FsbGVkIHdpdGggbW9kZT09MCwgYQorICogY29tcGxldGUgbGlzdCB3aXRoIG5pY2UgY29uc3RhbnQgbmFtZXMgaW4gcHJvcGVyIGNhc2luZyBzdHlsZSB3aWxsCisgKiBiZSBnZW5lcmF0ZWQuIE90aGVyd2lzZSBhIGxpc3Qgb2Ygb2xkIChpLmUuIEMtc3R5bGUpIG5hbWVzIHdpbGwgYmUKKyAqIGdlbmVyYXRlZCwgZ2l2ZW4gdGhhdCB0aGUgbmFtZSB3YXNuJ3QgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSAibmljZSIKKyAqIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitnZW5fa2V5ZGVmcyhpbnQgbW9kZSkKK3sKKyAgY2hhciBidWZbMTZdOworICBjaGFyIG9idWZbMTZdOworICBpbnQgaTsKKworI2lmZGVmIEtFWV9DT0RFX1lFUworICBrZXlkZWYoIktleV9Db2RlX1llcyIsICJLRVlfQ09ERV9ZRVMiLCBLRVlfQ09ERV9ZRVMsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX01JTgorICBrZXlkZWYoIktleV9NaW4iLCAiS0VZX01JTiIsIEtFWV9NSU4sIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0JSRUFLCisgIGtleWRlZigiS2V5X0JyZWFrIiwgIktFWV9CUkVBSyIsIEtFWV9CUkVBSywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRE9XTgorICBrZXlkZWYoIktleV9DdXJzb3JfRG93biIsICJLRVlfRE9XTiIsIEtFWV9ET1dOLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9VUAorICBrZXlkZWYoIktleV9DdXJzb3JfVXAiLCAiS0VZX1VQIiwgS0VZX1VQLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9MRUZUCisgIGtleWRlZigiS2V5X0N1cnNvcl9MZWZ0IiwgIktFWV9MRUZUIiwgS0VZX0xFRlQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1JJR0hUCisgIGtleWRlZigiS2V5X0N1cnNvcl9SaWdodCIsICJLRVlfUklHSFQiLCBLRVlfUklHSFQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0hPTUUKKyAga2V5ZGVmKCJLZXlfSG9tZSIsICJLRVlfSE9NRSIsIEtFWV9IT01FLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9CQUNLU1BBQ0UKKyAga2V5ZGVmKCJLZXlfQmFja3NwYWNlIiwgIktFWV9CQUNLU1BBQ0UiLCBLRVlfQkFDS1NQQUNFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9GMAorICBrZXlkZWYoIktleV9GMCIsICJLRVlfRjAiLCBLRVlfRjAsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0YKKyAgZm9yIChpID0gMTsgaSA8PSAyNDsgaSsrKQorICAgIHsKKyAgICAgIHNwcmludGYoYnVmLCAiS2V5X0YlZCIsIGkpOworICAgICAgc3ByaW50ZihvYnVmLCAiS0VZX0YlZCIsIGkpOworICAgICAga2V5ZGVmKGJ1Ziwgb2J1ZiwgS0VZX0YoaSksIG1vZGUpOworICAgIH0KKyNlbmRpZgorI2lmZGVmIEtFWV9ETAorICBrZXlkZWYoIktleV9EZWxldGVfTGluZSIsICJLRVlfREwiLCBLRVlfREwsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0lMCisgIGtleWRlZigiS2V5X0luc2VydF9MaW5lIiwgIktFWV9JTCIsIEtFWV9JTCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfREMKKyAga2V5ZGVmKCJLZXlfRGVsZXRlX0NoYXIiLCAiS0VZX0RDIiwgS0VZX0RDLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9JQworICBrZXlkZWYoIktleV9JbnNlcnRfQ2hhciIsICJLRVlfSUMiLCBLRVlfSUMsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0VJQworICBrZXlkZWYoIktleV9FeGl0X0luc2VydF9Nb2RlIiwgIktFWV9FSUMiLCBLRVlfRUlDLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DTEVBUgorICBrZXlkZWYoIktleV9DbGVhcl9TY3JlZW4iLCAiS0VZX0NMRUFSIiwgS0VZX0NMRUFSLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9FT1MKKyAga2V5ZGVmKCJLZXlfQ2xlYXJfRW5kX09mX1NjcmVlbiIsICJLRVlfRU9TIiwgS0VZX0VPUywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRU9MCisgIGtleWRlZigiS2V5X0NsZWFyX0VuZF9PZl9MaW5lIiwgIktFWV9FT0wiLCBLRVlfRU9MLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TRgorICBrZXlkZWYoIktleV9TY3JvbGxfMV9Gb3J3YXJkIiwgIktFWV9TRiIsIEtFWV9TRiwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1IKKyAga2V5ZGVmKCJLZXlfU2Nyb2xsXzFfQmFja3dhcmQiLCAiS0VZX1NSIiwgS0VZX1NSLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9OUEFHRQorICBrZXlkZWYoIktleV9OZXh0X1BhZ2UiLCAiS0VZX05QQUdFIiwgS0VZX05QQUdFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9QUEFHRQorICBrZXlkZWYoIktleV9QcmV2aW91c19QYWdlIiwgIktFWV9QUEFHRSIsIEtFWV9QUEFHRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1RBQgorICBrZXlkZWYoIktleV9TZXRfVGFiIiwgIktFWV9TVEFCIiwgS0VZX1NUQUIsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0NUQUIKKyAga2V5ZGVmKCJLZXlfQ2xlYXJfVGFiIiwgIktFWV9DVEFCIiwgS0VZX0NUQUIsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0NBVEFCCisgIGtleWRlZigiS2V5X0NsZWFyX0FsbF9UYWJzIiwgIktFWV9DQVRBQiIsIEtFWV9DQVRBQiwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRU5URVIKKyAga2V5ZGVmKCJLZXlfRW50ZXJfT3JfU2VuZCIsICJLRVlfRU5URVIiLCBLRVlfRU5URVIsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NSRVNFVAorICBrZXlkZWYoIktleV9Tb2Z0X1Jlc2V0IiwgIktFWV9TUkVTRVQiLCBLRVlfU1JFU0VULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRVNFVAorICBrZXlkZWYoIktleV9SZXNldCIsICJLRVlfUkVTRVQiLCBLRVlfUkVTRVQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1BSSU5UCisgIGtleWRlZigiS2V5X1ByaW50IiwgIktFWV9QUklOVCIsIEtFWV9QUklOVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfTEwKKyAga2V5ZGVmKCJLZXlfQm90dG9tIiwgIktFWV9MTCIsIEtFWV9MTCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQTEKKyAga2V5ZGVmKCJLZXlfVXBwZXJfTGVmdF9PZl9LZXlwYWQiLCAiS0VZX0ExIiwgS0VZX0ExLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9BMworICBrZXlkZWYoIktleV9VcHBlcl9SaWdodF9PZl9LZXlwYWQiLCAiS0VZX0EzIiwgS0VZX0EzLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9CMgorICBrZXlkZWYoIktleV9DZW50ZXJfT2ZfS2V5cGFkIiwgIktFWV9CMiIsIEtFWV9CMiwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQzEKKyAga2V5ZGVmKCJLZXlfTG93ZXJfTGVmdF9PZl9LZXlwYWQiLCAiS0VZX0MxIiwgS0VZX0MxLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DMworICBrZXlkZWYoIktleV9Mb3dlcl9SaWdodF9PZl9LZXlwYWQiLCAiS0VZX0MzIiwgS0VZX0MzLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9CVEFCCisgIGtleWRlZigiS2V5X0JhY2tfVGFiIiwgIktFWV9CVEFCIiwgS0VZX0JUQUIsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0JFRworICBrZXlkZWYoIktleV9CZWdpbm5pbmciLCAiS0VZX0JFRyIsIEtFWV9CRUcsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0NBTkNFTAorICBrZXlkZWYoIktleV9DYW5jZWwiLCAiS0VZX0NBTkNFTCIsIEtFWV9DQU5DRUwsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0NMT1NFCisgIGtleWRlZigiS2V5X0Nsb3NlIiwgIktFWV9DTE9TRSIsIEtFWV9DTE9TRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfQ09NTUFORAorICBrZXlkZWYoIktleV9Db21tYW5kIiwgIktFWV9DT01NQU5EIiwgS0VZX0NPTU1BTkQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0NPUFkKKyAga2V5ZGVmKCJLZXlfQ29weSIsICJLRVlfQ09QWSIsIEtFWV9DT1BZLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9DUkVBVEUKKyAga2V5ZGVmKCJLZXlfQ3JlYXRlIiwgIktFWV9DUkVBVEUiLCBLRVlfQ1JFQVRFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9FTkQKKyAga2V5ZGVmKCJLZXlfRW5kIiwgIktFWV9FTkQiLCBLRVlfRU5ELCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9FWElUCisgIGtleWRlZigiS2V5X0V4aXQiLCAiS0VZX0VYSVQiLCBLRVlfRVhJVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfRklORAorICBrZXlkZWYoIktleV9GaW5kIiwgIktFWV9GSU5EIiwgS0VZX0ZJTkQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX0hFTFAKKyAga2V5ZGVmKCJLZXlfSGVscCIsICJLRVlfSEVMUCIsIEtFWV9IRUxQLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9NQVJLCisgIGtleWRlZigiS2V5X01hcmsiLCAiS0VZX01BUksiLCBLRVlfTUFSSywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfTUVTU0FHRQorICBrZXlkZWYoIktleV9NZXNzYWdlIiwgIktFWV9NRVNTQUdFIiwgS0VZX01FU1NBR0UsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX01PVkUKKyAga2V5ZGVmKCJLZXlfTW92ZSIsICJLRVlfTU9WRSIsIEtFWV9NT1ZFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9ORVhUCisgIGtleWRlZigiS2V5X05leHQiLCAiS0VZX05FWFQiLCBLRVlfTkVYVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfT1BFTgorICBrZXlkZWYoIktleV9PcGVuIiwgIktFWV9PUEVOIiwgS0VZX09QRU4sIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX09QVElPTlMKKyAga2V5ZGVmKCJLZXlfT3B0aW9ucyIsICJLRVlfT1BUSU9OUyIsIEtFWV9PUFRJT05TLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9QUkVWSU9VUworICBrZXlkZWYoIktleV9QcmV2aW91cyIsICJLRVlfUFJFVklPVVMiLCBLRVlfUFJFVklPVVMsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1JFRE8KKyAga2V5ZGVmKCJLZXlfUmVkbyIsICJLRVlfUkVETyIsIEtFWV9SRURPLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRUZFUkVOQ0UKKyAga2V5ZGVmKCJLZXlfUmVmZXJlbmNlIiwgIktFWV9SRUZFUkVOQ0UiLCBLRVlfUkVGRVJFTkNFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRUZSRVNICisgIGtleWRlZigiS2V5X1JlZnJlc2giLCAiS0VZX1JFRlJFU0giLCBLRVlfUkVGUkVTSCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUkVQTEFDRQorICBrZXlkZWYoIktleV9SZXBsYWNlIiwgIktFWV9SRVBMQUNFIiwgS0VZX1JFUExBQ0UsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1JFU1RBUlQKKyAga2V5ZGVmKCJLZXlfUmVzdGFydCIsICJLRVlfUkVTVEFSVCIsIEtFWV9SRVNUQVJULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRVNVTUUKKyAga2V5ZGVmKCJLZXlfUmVzdW1lIiwgIktFWV9SRVNVTUUiLCBLRVlfUkVTVU1FLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TQVZFCisgIGtleWRlZigiS2V5X1NhdmUiLCAiS0VZX1NBVkUiLCBLRVlfU0FWRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0JFRworICBrZXlkZWYoIktleV9TaGlmdF9CZWdpbiIsICJLRVlfU0JFRyIsIEtFWV9TQkVHLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TQ0FOQ0VMCisgIGtleWRlZigiS2V5X1NoaWZ0X0NhbmNlbCIsICJLRVlfU0NBTkNFTCIsIEtFWV9TQ0FOQ0VMLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TQ09NTUFORAorICBrZXlkZWYoIktleV9TaGlmdF9Db21tYW5kIiwgIktFWV9TQ09NTUFORCIsIEtFWV9TQ09NTUFORCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0NPUFkKKyAga2V5ZGVmKCJLZXlfU2hpZnRfQ29weSIsICJLRVlfU0NPUFkiLCBLRVlfU0NPUFksIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NDUkVBVEUKKyAga2V5ZGVmKCJLZXlfU2hpZnRfQ3JlYXRlIiwgIktFWV9TQ1JFQVRFIiwgS0VZX1NDUkVBVEUsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NEQworICBrZXlkZWYoIktleV9TaGlmdF9EZWxldGVfQ2hhciIsICJLRVlfU0RDIiwgS0VZX1NEQywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0RMCisgIGtleWRlZigiS2V5X1NoaWZ0X0RlbGV0ZV9MaW5lIiwgIktFWV9TREwiLCBLRVlfU0RMLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TRUxFQ1QKKyAga2V5ZGVmKCJLZXlfU2VsZWN0IiwgIktFWV9TRUxFQ1QiLCBLRVlfU0VMRUNULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TRU5ECisgIGtleWRlZigiS2V5X1NoaWZ0X0VuZCIsICJLRVlfU0VORCIsIEtFWV9TRU5ELCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TRU9MCisgIGtleWRlZigiS2V5X1NoaWZ0X0NsZWFyX0VuZF9PZl9MaW5lIiwgIktFWV9TRU9MIiwgS0VZX1NFT0wsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NFWElUCisgIGtleWRlZigiS2V5X1NoaWZ0X0V4aXQiLCAiS0VZX1NFWElUIiwgS0VZX1NFWElULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TRklORAorICBrZXlkZWYoIktleV9TaGlmdF9GaW5kIiwgIktFWV9TRklORCIsIEtFWV9TRklORCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU0hFTFAKKyAga2V5ZGVmKCJLZXlfU2hpZnRfSGVscCIsICJLRVlfU0hFTFAiLCBLRVlfU0hFTFAsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NIT01FCisgIGtleWRlZigiS2V5X1NoaWZ0X0hvbWUiLCAiS0VZX1NIT01FIiwgS0VZX1NIT01FLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TSUMKKyAga2V5ZGVmKCJLZXlfU2hpZnRfSW5zZXJ0X0NoYXIiLCAiS0VZX1NJQyIsIEtFWV9TSUMsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NMRUZUCisgIGtleWRlZigiS2V5X1NoaWZ0X0N1cnNvcl9MZWZ0IiwgIktFWV9TTEVGVCIsIEtFWV9TTEVGVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU01FU1NBR0UKKyAga2V5ZGVmKCJLZXlfU2hpZnRfTWVzc2FnZSIsICJLRVlfU01FU1NBR0UiLCBLRVlfU01FU1NBR0UsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NNT1ZFCisgIGtleWRlZigiS2V5X1NoaWZ0X01vdmUiLCAiS0VZX1NNT1ZFIiwgS0VZX1NNT1ZFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TTkVYVAorICBrZXlkZWYoIktleV9TaGlmdF9OZXh0X1BhZ2UiLCAiS0VZX1NORVhUIiwgS0VZX1NORVhULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TT1BUSU9OUworICBrZXlkZWYoIktleV9TaGlmdF9PcHRpb25zIiwgIktFWV9TT1BUSU9OUyIsIEtFWV9TT1BUSU9OUywgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1BSRVZJT1VTCisgIGtleWRlZigiS2V5X1NoaWZ0X1ByZXZpb3VzX1BhZ2UiLCAiS0VZX1NQUkVWSU9VUyIsIEtFWV9TUFJFVklPVVMsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NQUklOVAorICBrZXlkZWYoIktleV9TaGlmdF9QcmludCIsICJLRVlfU1BSSU5UIiwgS0VZX1NQUklOVCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1JFRE8KKyAga2V5ZGVmKCJLZXlfU2hpZnRfUmVkbyIsICJLRVlfU1JFRE8iLCBLRVlfU1JFRE8sIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NSRVBMQUNFCisgIGtleWRlZigiS2V5X1NoaWZ0X1JlcGxhY2UiLCAiS0VZX1NSRVBMQUNFIiwgS0VZX1NSRVBMQUNFLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TUklHSFQKKyAga2V5ZGVmKCJLZXlfU2hpZnRfQ3Vyc29yX1JpZ2h0IiwgIktFWV9TUklHSFQiLCBLRVlfU1JJR0hULCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TUlNVTUUKKyAga2V5ZGVmKCJLZXlfU2hpZnRfUmVzdW1lIiwgIktFWV9TUlNVTUUiLCBLRVlfU1JTVU1FLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TU0FWRQorICBrZXlkZWYoIktleV9TaGlmdF9TYXZlIiwgIktFWV9TU0FWRSIsIEtFWV9TU0FWRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfU1NVU1BFTkQKKyAga2V5ZGVmKCJLZXlfU2hpZnRfU3VzcGVuZCIsICJLRVlfU1NVU1BFTkQiLCBLRVlfU1NVU1BFTkQsIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX1NVTkRPCisgIGtleWRlZigiS2V5X1NoaWZ0X1VuZG8iLCAiS0VZX1NVTkRPIiwgS0VZX1NVTkRPLCBtb2RlKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9TVVNQRU5ECisgIGtleWRlZigiS2V5X1N1c3BlbmQiLCAiS0VZX1NVU1BFTkQiLCBLRVlfU1VTUEVORCwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfVU5ETworICBrZXlkZWYoIktleV9VbmRvIiwgIktFWV9VTkRPIiwgS0VZX1VORE8sIG1vZGUpOworI2VuZGlmCisjaWZkZWYgS0VZX01PVVNFCisgIGtleWRlZigiS2V5X01vdXNlIiwgIktFWV9NT1VTRSIsIEtFWV9NT1VTRSwgbW9kZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlfUkVTSVpFCisgIGtleWRlZigiS2V5X1Jlc2l6ZSIsICJLRVlfUkVTSVpFIiwgS0VZX1JFU0laRSwgbW9kZSk7CisjZW5kaWYKK30KKworLyoKKyAqIEdlbmVyYXRlIGEgY29uc3RhbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIKKyAqIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBBQ1MgY2hhcmFjdGVyIGluIHRoZSBhY3NfbWFwW10gYXJyYXkgYW5kCisgKiB3aWxsIGJlIHRyYW5zbGF0ZWQgaW50byBhbiBpbmRleC4KKyAqLworc3RhdGljIHZvaWQKK2Fjc19kZWYoY29uc3QgY2hhciAqbmFtZSwgY2h0eXBlICphKQoreworICBpbnQgYyA9IGEgLSAmYWNzX21hcFswXTsKKworICBwcmludGYoIiAgICUtMjRzIDogY29uc3RhbnQgQ2hhcmFjdGVyIDo9ICIsIG5hbWUpOworICBpZiAoaXNwcmludChjKSAmJiAoYyAhPSAnYCcpKQorICAgIHByaW50ZigiJyVjJztcbiIsIGMpOworICBlbHNlCisgICAgcHJpbnRmKCJDaGFyYWN0ZXInVmFsICglZCk7XG4iLCBjKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIHRoZSBjb25zdGFudHMgZm9yIHRoZSBBQ1MgY2hhcmFjdGVycworICovCitzdGF0aWMgdm9pZAorZ2VuX2Fjcyh2b2lkKQoreworICBwcmludGYoIiAgIHR5cGUgQ19BQ1NfTWFwIGlzIGFycmF5IChDaGFyYWN0ZXInVmFsICgwKSAuLiBDaGFyYWN0ZXInVmFsICgxMjcpKVxuIik7CisgIHByaW50ZigiICAgICAgICBvZiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjtcbiIpOworI2lmIFVTRV9SRUVOVFJBTlQgfHwgQlJPS0VOX0xJTktFUgorICBwcmludGYoIiAgIHR5cGUgQ19BQ1NfUHRyIGlzIGFjY2VzcyBDX0FDU19NYXA7XG4iKTsKKyAgcHJpbnRmKCIgICBmdW5jdGlvbiBBQ1NfTWFwIHJldHVybiBDX0FDU19QdHI7XG4iKTsKKyAgcHJpbnRmKCIgICBwcmFnbWEgSW1wb3J0IChDLCBBQ1NfTWFwLCBcIl9uY19hY3NfbWFwXCIpO1xuIik7CisjZWxzZQorICBwcmludGYoIiAgIEFDU19NYXAgOiBDX0FDU19NYXA7XG4iKTsKKyAgcHJpbnRmKCIgICBwcmFnbWEgSW1wb3J0IChDLCBBQ1NfTWFwLCBcImFjc19tYXBcIik7XG4iKTsKKyNlbmRpZgorICBwcmludGYoIiAgIC0tXG4iKTsKKyAgcHJpbnRmKCIgICAtLVxuIik7CisgIHByaW50ZigiICAgLS0gIENvbnN0YW50cyBmb3Igc2V2ZXJhbCBjaGFyYWN0ZXJzIGZyb20gdGhlIEFsdGVybmF0ZSBDaGFyYWN0ZXIgU2V0XG4iKTsKKyAgcHJpbnRmKCIgICAtLSAgWW91IG11c3QgdXNlIHRoZXNlIGNvbnN0YW50cyBhcyBpbmRpY2VzIGludG8gdGhlIEFDU19NYXAgYXJyYXlcbiIpOworICBwcmludGYoIiAgIC0tICB0byBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlZCBjaGFyYWN0ZXIgYXQgcnVudGltZS5cbiIpOworICBwcmludGYoIiAgIC0tXG4iKTsKKworI2lmZGVmIEFDU19VTENPUk5FUgorICBhY3NfZGVmKCJBQ1NfVXBwZXJfTGVmdF9Db3JuZXIiLCAmQUNTX1VMQ09STkVSKTsKKyNlbmRpZgorI2lmZGVmIEFDU19MTENPUk5FUgorICBhY3NfZGVmKCJBQ1NfTG93ZXJfTGVmdF9Db3JuZXIiLCAmQUNTX0xMQ09STkVSKTsKKyNlbmRpZgorI2lmZGVmIEFDU19VUkNPUk5FUgorICBhY3NfZGVmKCJBQ1NfVXBwZXJfUmlnaHRfQ29ybmVyIiwgJkFDU19VUkNPUk5FUik7CisjZW5kaWYKKyNpZmRlZiBBQ1NfTFJDT1JORVIKKyAgYWNzX2RlZigiQUNTX0xvd2VyX1JpZ2h0X0Nvcm5lciIsICZBQ1NfTFJDT1JORVIpOworI2VuZGlmCisjaWZkZWYgQUNTX0xURUUKKyAgYWNzX2RlZigiQUNTX0xlZnRfVGVlIiwgJkFDU19MVEVFKTsKKyNlbmRpZgorI2lmZGVmIEFDU19SVEVFCisgIGFjc19kZWYoIkFDU19SaWdodF9UZWUiLCAmQUNTX1JURUUpOworI2VuZGlmCisjaWZkZWYgQUNTX0JURUUKKyAgYWNzX2RlZigiQUNTX0JvdHRvbV9UZWUiLCAmQUNTX0JURUUpOworI2VuZGlmCisjaWZkZWYgQUNTX1RURUUKKyAgYWNzX2RlZigiQUNTX1RvcF9UZWUiLCAmQUNTX1RURUUpOworI2VuZGlmCisjaWZkZWYgQUNTX0hMSU5FCisgIGFjc19kZWYoIkFDU19Ib3Jpem9udGFsX0xpbmUiLCAmQUNTX0hMSU5FKTsKKyNlbmRpZgorI2lmZGVmIEFDU19WTElORQorICBhY3NfZGVmKCJBQ1NfVmVydGljYWxfTGluZSIsICZBQ1NfVkxJTkUpOworI2VuZGlmCisjaWZkZWYgQUNTX1BMVVMKKyAgYWNzX2RlZigiQUNTX1BsdXNfU3ltYm9sIiwgJkFDU19QTFVTKTsKKyNlbmRpZgorI2lmZGVmIEFDU19TMQorICBhY3NfZGVmKCJBQ1NfU2Nhbl9MaW5lXzEiLCAmQUNTX1MxKTsKKyNlbmRpZgorI2lmZGVmIEFDU19TOQorICBhY3NfZGVmKCJBQ1NfU2Nhbl9MaW5lXzkiLCAmQUNTX1M5KTsKKyNlbmRpZgorI2lmZGVmIEFDU19ESUFNT05ECisgIGFjc19kZWYoIkFDU19EaWFtb25kIiwgJkFDU19ESUFNT05EKTsKKyNlbmRpZgorI2lmZGVmIEFDU19DS0JPQVJECisgIGFjc19kZWYoIkFDU19DaGVja2VyX0JvYXJkIiwgJkFDU19DS0JPQVJEKTsKKyNlbmRpZgorI2lmZGVmIEFDU19ERUdSRUUKKyAgYWNzX2RlZigiQUNTX0RlZ3JlZSIsICZBQ1NfREVHUkVFKTsKKyNlbmRpZgorI2lmZGVmIEFDU19QTE1JTlVTCisgIGFjc19kZWYoIkFDU19QbHVzX01pbnVzIiwgJkFDU19QTE1JTlVTKTsKKyNlbmRpZgorI2lmZGVmIEFDU19CVUxMRVQKKyAgYWNzX2RlZigiQUNTX0J1bGxldCIsICZBQ1NfQlVMTEVUKTsKKyNlbmRpZgorI2lmZGVmIEFDU19MQVJST1cKKyAgYWNzX2RlZigiQUNTX0xlZnRfQXJyb3ciLCAmQUNTX0xBUlJPVyk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfUkFSUk9XCisgIGFjc19kZWYoIkFDU19SaWdodF9BcnJvdyIsICZBQ1NfUkFSUk9XKTsKKyNlbmRpZgorI2lmZGVmIEFDU19EQVJST1cKKyAgYWNzX2RlZigiQUNTX0Rvd25fQXJyb3ciLCAmQUNTX0RBUlJPVyk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfVUFSUk9XCisgIGFjc19kZWYoIkFDU19VcF9BcnJvdyIsICZBQ1NfVUFSUk9XKTsKKyNlbmRpZgorI2lmZGVmIEFDU19CT0FSRAorICBhY3NfZGVmKCJBQ1NfQm9hcmRfT2ZfU3F1YXJlcyIsICZBQ1NfQk9BUkQpOworI2VuZGlmCisjaWZkZWYgQUNTX0xBTlRFUk4KKyAgYWNzX2RlZigiQUNTX0xhbnRlcm4iLCAmQUNTX0xBTlRFUk4pOworI2VuZGlmCisjaWZkZWYgQUNTX0JMT0NLCisgIGFjc19kZWYoIkFDU19Tb2xpZF9CbG9jayIsICZBQ1NfQkxPQ0spOworI2VuZGlmCisjaWZkZWYgQUNTX1MzCisgIGFjc19kZWYoIkFDU19TY2FuX0xpbmVfMyIsICZBQ1NfUzMpOworI2VuZGlmCisjaWZkZWYgQUNTX1M3CisgIGFjc19kZWYoIkFDU19TY2FuX0xpbmVfNyIsICZBQ1NfUzcpOworI2VuZGlmCisjaWZkZWYgQUNTX0xFUVVBTAorICBhY3NfZGVmKCJBQ1NfTGVzc19Pcl9FcXVhbCIsICZBQ1NfTEVRVUFMKTsKKyNlbmRpZgorI2lmZGVmIEFDU19HRVFVQUwKKyAgYWNzX2RlZigiQUNTX0dyZWF0ZXJfT3JfRXF1YWwiLCAmQUNTX0dFUVVBTCk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfUEkKKyAgYWNzX2RlZigiQUNTX1BJIiwgJkFDU19QSSk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfTkVRVUFMCisgIGFjc19kZWYoIkFDU19Ob3RfRXF1YWwiLCAmQUNTX05FUVVBTCk7CisjZW5kaWYKKyNpZmRlZiBBQ1NfU1RFUkxJTkcKKyAgYWNzX2RlZigiQUNTX1N0ZXJsaW5nIiwgJkFDU19TVEVSTElORyk7CisjZW5kaWYKK30KKworI2RlZmluZSBHRU5fRVZFTlQobmFtZSx2YWx1ZSkgXAorICAgcHJpbnRmKCIgICAlLTI1cyA6IGNvbnN0YW50IEV2ZW50X01hc2sgOj0gOCMlMDExbG8jO1xuIiwgXAorICAgICAgICAgICNuYW1lLCB2YWx1ZSkKKworI2RlZmluZSBHRU5fTUVWRU5UKG5hbWUpIFwKKyAgIHByaW50ZigiICAgJS0yNXMgOiBjb25zdGFudCBFdmVudF9NYXNrIDo9IDgjJTAxMWxvIztcbiIsIFwKKyAgICAgICAgICAjbmFtZSwgbmFtZSkKKworc3RhdGljIHZvaWQKK2dlbl9tb3VzZV9ldmVudHModm9pZCkKK3sKKyAgbW1hc2tfdCBhbGwxID0gMDsKKyAgbW1hc2tfdCBhbGwyID0gMDsKKyAgbW1hc2tfdCBhbGwzID0gMDsKKyAgbW1hc2tfdCBhbGw0ID0gMDsKKworI2lmZGVmIEJVVFRPTjFfUkVMRUFTRUQKKyAgR0VOX01FVkVOVChCVVRUT04xX1JFTEVBU0VEKTsKKyAgYWxsMSB8PSBCVVRUT04xX1JFTEVBU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMV9QUkVTU0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMV9QUkVTU0VEKTsKKyAgYWxsMSB8PSBCVVRUT04xX1BSRVNTRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04xX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04xX0NMSUNLRUQpOworICBhbGwxIHw9IEJVVFRPTjFfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04xX0RPVUJMRV9DTElDS0VEKTsKKyAgYWxsMSB8PSBCVVRUT04xX0RPVUJMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRAorICBHRU5fTUVWRU5UKEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpOworICBhbGwxIHw9IEJVVFRPTjFfVFJJUExFX0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04xX1JFU0VSVkVEX0VWRU5UCisgIEdFTl9NRVZFTlQoQlVUVE9OMV9SRVNFUlZFRF9FVkVOVCk7CisgIGFsbDEgfD0gQlVUVE9OMV9SRVNFUlZFRF9FVkVOVDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjJfUkVMRUFTRUQKKyAgR0VOX01FVkVOVChCVVRUT04yX1JFTEVBU0VEKTsKKyAgYWxsMiB8PSBCVVRUT04yX1JFTEVBU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMl9QUkVTU0VECisgIEdFTl9NRVZFTlQoQlVUVE9OMl9QUkVTU0VEKTsKKyAgYWxsMiB8PSBCVVRUT04yX1BSRVNTRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04yX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04yX0NMSUNLRUQpOworICBhbGwyIHw9IEJVVFRPTjJfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjJfRE9VQkxFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04yX0RPVUJMRV9DTElDS0VEKTsKKyAgYWxsMiB8PSBCVVRUT04yX0RPVUJMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRAorICBHRU5fTUVWRU5UKEJVVFRPTjJfVFJJUExFX0NMSUNLRUQpOworICBhbGwyIHw9IEJVVFRPTjJfVFJJUExFX0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04yX1JFU0VSVkVEX0VWRU5UCisgIEdFTl9NRVZFTlQoQlVUVE9OMl9SRVNFUlZFRF9FVkVOVCk7CisgIGFsbDIgfD0gQlVUVE9OMl9SRVNFUlZFRF9FVkVOVDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjNfUkVMRUFTRUQKKyAgR0VOX01FVkVOVChCVVRUT04zX1JFTEVBU0VEKTsKKyAgYWxsMyB8PSBCVVRUT04zX1JFTEVBU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OM19QUkVTU0VECisgIEdFTl9NRVZFTlQoQlVUVE9OM19QUkVTU0VEKTsKKyAgYWxsMyB8PSBCVVRUT04zX1BSRVNTRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04zX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04zX0NMSUNLRUQpOworICBhbGwzIHw9IEJVVFRPTjNfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT04zX0RPVUJMRV9DTElDS0VEKTsKKyAgYWxsMyB8PSBCVVRUT04zX0RPVUJMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9OM19UUklQTEVfQ0xJQ0tFRAorICBHRU5fTUVWRU5UKEJVVFRPTjNfVFJJUExFX0NMSUNLRUQpOworICBhbGwzIHw9IEJVVFRPTjNfVFJJUExFX0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT04zX1JFU0VSVkVEX0VWRU5UCisgIEdFTl9NRVZFTlQoQlVUVE9OM19SRVNFUlZFRF9FVkVOVCk7CisgIGFsbDMgfD0gQlVUVE9OM19SRVNFUlZFRF9FVkVOVDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjRfUkVMRUFTRUQKKyAgR0VOX01FVkVOVChCVVRUT040X1JFTEVBU0VEKTsKKyAgYWxsNCB8PSBCVVRUT040X1JFTEVBU0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9ONF9QUkVTU0VECisgIEdFTl9NRVZFTlQoQlVUVE9ONF9QUkVTU0VEKTsKKyAgYWxsNCB8PSBCVVRUT040X1BSRVNTRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT040X0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT040X0NMSUNLRUQpOworICBhbGw0IHw9IEJVVFRPTjRfQ0xJQ0tFRDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQKKyAgR0VOX01FVkVOVChCVVRUT040X0RPVUJMRV9DTElDS0VEKTsKKyAgYWxsNCB8PSBCVVRUT040X0RPVUJMRV9DTElDS0VEOworI2VuZGlmCisjaWZkZWYgQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRAorICBHRU5fTUVWRU5UKEJVVFRPTjRfVFJJUExFX0NMSUNLRUQpOworICBhbGw0IHw9IEJVVFRPTjRfVFJJUExFX0NMSUNLRUQ7CisjZW5kaWYKKyNpZmRlZiBCVVRUT040X1JFU0VSVkVEX0VWRU5UCisgIEdFTl9NRVZFTlQoQlVUVE9ONF9SRVNFUlZFRF9FVkVOVCk7CisgIGFsbDQgfD0gQlVUVE9ONF9SRVNFUlZFRF9FVkVOVDsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTl9DVFJMCisgIEdFTl9NRVZFTlQoQlVUVE9OX0NUUkwpOworI2VuZGlmCisjaWZkZWYgQlVUVE9OX1NISUZUCisgIEdFTl9NRVZFTlQoQlVUVE9OX1NISUZUKTsKKyNlbmRpZgorI2lmZGVmIEJVVFRPTl9BTFQKKyAgR0VOX01FVkVOVChCVVRUT05fQUxUKTsKKyNlbmRpZgorI2lmZGVmIFJFUE9SVF9NT1VTRV9QT1NJVElPTgorICBHRU5fTUVWRU5UKFJFUE9SVF9NT1VTRV9QT1NJVElPTik7CisjZW5kaWYKKyNpZmRlZiBBTExfTU9VU0VfRVZFTlRTCisgIEdFTl9NRVZFTlQoQUxMX01PVVNFX0VWRU5UUyk7CisjZW5kaWYKKworICBHRU5fRVZFTlQoQlVUVE9OMV9FVkVOVFMsIGFsbDEpOworICBHRU5fRVZFTlQoQlVUVE9OMl9FVkVOVFMsIGFsbDIpOworICBHRU5fRVZFTlQoQlVUVE9OM19FVkVOVFMsIGFsbDMpOworICBHRU5fRVZFTlQoQlVUVE9ONF9FVkVOVFMsIGFsbDQpOworfQorCitzdGF0aWMgdm9pZAord3JhcF9vbmVfdmFyKGNvbnN0IGNoYXIgKmNfdmFyLAorCSAgICAgY29uc3QgY2hhciAqY190eXBlLAorCSAgICAgY29uc3QgY2hhciAqYWRhX2Z1bmMsCisJICAgICBjb25zdCBjaGFyICphZGFfdHlwZSkKK3sKKyNpZiBVU0VfUkVFTlRSQU5UCisgIC8qIG11c3Qgd3JhcCB2YXJpYWJsZXMgKi8KKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIiAgIGZ1bmN0aW9uICVzIHJldHVybiAlc1xuIiwgYWRhX2Z1bmMsIGFkYV90eXBlKTsKKyAgcHJpbnRmKCIgICBpc1xuIik7CisgIHByaW50ZigiICAgICAgZnVuY3Rpb24gUmVzdWx0IHJldHVybiAlcztcbiIsIGNfdHlwZSk7CisgIHByaW50ZigiICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVzdWx0LCBcIl9uY18lc1wiKTtcbiIsIGNfdmFyKTsKKyAgcHJpbnRmKCIgICBiZWdpblxuIik7CisgIGlmIChzdHJjbXAoY190eXBlLCBhZGFfdHlwZSkpCisgICAgcHJpbnRmKCIgICAgICByZXR1cm4gJXMgKFJlc3VsdCk7XG4iLCBhZGFfdHlwZSk7CisgIGVsc2UKKyAgICBwcmludGYoIiAgICAgIHJldHVybiBSZXN1bHQ7XG4iKTsKKyAgcHJpbnRmKCIgICBlbmQgJXM7XG4iLCBhZGFfZnVuYyk7CisjZWxzZQorICAvKiBnbG9iYWwgdmFyaWFibGVzIGFyZSByZWFsbHkgZ2xvYmFsICovCisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIgICBmdW5jdGlvbiAlcyByZXR1cm4gJXNcbiIsIGFkYV9mdW5jLCBhZGFfdHlwZSk7CisgIHByaW50ZigiICAgaXNcbiIpOworICBwcmludGYoIiAgICAgIFJlc3VsdCA6ICVzO1xuIiwgY190eXBlKTsKKyAgcHJpbnRmKCIgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZXN1bHQsIFwiJXNcIik7XG4iLCBjX3Zhcik7CisgIHByaW50ZigiICAgYmVnaW5cbiIpOworICBpZiAoc3RyY21wKGNfdHlwZSwgYWRhX3R5cGUpKQorICAgIHByaW50ZigiICAgICAgcmV0dXJuICVzIChSZXN1bHQpO1xuIiwgYWRhX3R5cGUpOworICBlbHNlCisgICAgcHJpbnRmKCIgICAgICByZXR1cm4gUmVzdWx0O1xuIik7CisgIHByaW50ZigiICAgZW5kICVzO1xuIiwgYWRhX2Z1bmMpOworI2VuZGlmCit9CisKKyNkZWZpbmUgR0VOX1BVQkxJQ19WQVIoY192YXIsIGNfdHlwZSwgYWRhX2Z1bmMsIGFkYV90eXBlKSBcCisJd3JhcF9vbmVfdmFyKCNjX3ZhciwgI2NfdHlwZSwgI2FkYV9mdW5jLCAjYWRhX3R5cGUpCisKK3N0YXRpYyB2b2lkCitnZW5fcHVibGljX3ZhcnModm9pZCkKK3sKKyAgR0VOX1BVQkxJQ19WQVIoc3Rkc2NyLCBXaW5kb3csIFN0YW5kYXJkX1dpbmRvdywgV2luZG93KTsKKyAgR0VOX1BVQkxJQ19WQVIoY3Vyc2NyLCBXaW5kb3csIEN1cnJlbnRfV2luZG93LCBXaW5kb3cpOworICBHRU5fUFVCTElDX1ZBUihMSU5FUywgQ19JbnQsIExpbmVzLCBMaW5lX0NvdW50KTsKKyAgR0VOX1BVQkxJQ19WQVIoQ09MUywgQ19JbnQsIENvbHVtbnMsIENvbHVtbl9Db3VudCk7CisgIEdFTl9QVUJMSUNfVkFSKFRBQlNJWkUsIENfSW50LCBUYWJfU2l6ZSwgTmF0dXJhbCk7CisgIEdFTl9QVUJMSUNfVkFSKENPTE9SUywgQ19JbnQsIE51bWJlcl9PZl9Db2xvcnMsIE5hdHVyYWwpOworICBHRU5fUFVCTElDX1ZBUihDT0xPUl9QQUlSUywgQ19JbnQsIE51bWJlcl9PZl9Db2xvcl9QYWlycywgTmF0dXJhbCk7Cit9CisKKy8qCisgKiBPdXRwdXQgc29tZSBjb21tZW50IGxpbmVzIGluZGljYXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnZW5lcmF0ZWQuCisgKiBUaGUgbmFtZSBwYXJhbWV0ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGZhY2lsaXR5IHRvIGJlIHVzZWQgaW4KKyAqIHRoZSBjb21tZW50LgorICovCitzdGF0aWMgdm9pZAorcHJvbG9ndWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgcHJpbnRmKCItLSAgJXMgYmluZGluZy5cbiIsIG5hbWUpOworICBwcmludGYoIi0tICBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQuIFBsZWFzZSBkb24ndCBjaGFuZ2UgaXQgbWFudWFsbHkhXG4iKTsKKyAgcHJpbnRmKCItLSAgUnVuIHRoZSBnZW5lcmF0b3IgaW5zdGVhZC5cbi0tICB8Iik7CisKKyAgcHJpbnRmKCJkZWZpbmUoYE00X0JJVF9PUkRFUicsYCVzX09yZGVyX0ZpcnN0JykiLAorCSBsaXR0bGVfZW5kaWFuID8gIkxvdyIgOiAiSGlnaCIpOworfQorCisvKgorICogV3JpdGUgdGhlIHByb2xvZ3VlIGZvciB0aGUgY3Vyc2VzIGZhY2lsaXR5IGFuZCBtYWtlIHN1cmUgdGhhdAorICogS0VZX01JTiBhbmQgS0VZX01BWCBhcmUgZGVmaW5lZCBmb3IgdGhlIHJlc3Qgb2YgdGhpcyBzb3VyY2UuCisgKi8KK3N0YXRpYyB2b2lkCitiYXNlZGVmcyh2b2lkKQoreworICBwcm9sb2d1ZSgiY3Vyc2VzIik7CisjaWZuZGVmIEtFWV9NQVgKKyMgIGRlZmluZSBLRVlfTUFYIDA3NzcKKyNlbmRpZgorICBwcmludGYoImRlZmluZShgTTRfS0VZX01BWCcsYDgjJW8jJykiLCBLRVlfTUFYKTsKKyNpZm5kZWYgS0VZX01JTgorIyAgZGVmaW5lIEtFWV9NSU4gMDQwMQorI2VuZGlmCisgIGlmIChLRVlfTUlOID09IDI1NikKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgdmFsdWUgZm9yIEtFWV9NSU46ICVkXG4iLCBLRVlfTUlOKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICBwcmludGYoImRlZmluZShgTTRfU1BFQ0lBTF9GSVJTVCcsYDgjJW8jJykiLCBLRVlfTUlOIC0gMSk7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgdGhlIGNvbW1lbnQgbGluZXMgZm9yIHRoZSBtZW51IGZhY2lsaXR5CisgKi8KK3N0YXRpYyB2b2lkCittZW51X2Jhc2VkZWZzKHZvaWQpCit7CisgIHByb2xvZ3VlKCJtZW51Iik7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgdGhlIGNvbW1lbnQgbGluZXMgZm9yIHRoZSBmb3JtIGZhY2lsaXR5CisgKi8KK3N0YXRpYyB2b2lkCitmb3JtX2Jhc2VkZWZzKHZvaWQpCit7CisgIHByb2xvZ3VlKCJmb3JtIik7Cit9CisKKy8qCisgKiBXcml0ZSBvdXQgdGhlIGNvbW1lbnQgbGluZXMgZm9yIHRoZSBtb3VzZSBmYWNpbGl0eQorICovCitzdGF0aWMgdm9pZAorbW91c2VfYmFzZWRlZnModm9pZCkKK3sKKyAgcHJvbG9ndWUoIm1vdXNlIik7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHNpbmdsZSBjb2xvcgorICovCitzdGF0aWMgdm9pZAorY29sb3JfZGVmKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKK3sKKyAgcHJpbnRmKCIgICAlLTE2cyA6IGNvbnN0YW50IENvbG9yX051bWJlciA6PSAlZDtcbiIsIG5hbWUsIHZhbHVlKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIGFsbCBjb2xvciBkZWZpbml0aW9ucworICovCitzdGF0aWMgdm9pZAorZ2VuX2NvbG9yKHZvaWQpCit7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKyAgY29sb3JfZGVmKCJEZWZhdWx0X0NvbG9yIiwgLTEpOworI2VuZGlmCisjaWZkZWYgQ09MT1JfQkxBQ0sKKyAgY29sb3JfZGVmKCJCbGFjayIsIENPTE9SX0JMQUNLKTsKKyNlbmRpZgorI2lmZGVmIENPTE9SX1JFRAorICBjb2xvcl9kZWYoIlJlZCIsIENPTE9SX1JFRCk7CisjZW5kaWYKKyNpZmRlZiBDT0xPUl9HUkVFTgorICBjb2xvcl9kZWYoIkdyZWVuIiwgQ09MT1JfR1JFRU4pOworI2VuZGlmCisjaWZkZWYgQ09MT1JfWUVMTE9XCisgIGNvbG9yX2RlZigiWWVsbG93IiwgQ09MT1JfWUVMTE9XKTsKKyNlbmRpZgorI2lmZGVmIENPTE9SX0JMVUUKKyAgY29sb3JfZGVmKCJCbHVlIiwgQ09MT1JfQkxVRSk7CisjZW5kaWYKKyNpZmRlZiBDT0xPUl9NQUdFTlRBCisgIGNvbG9yX2RlZigiTWFnZW50YSIsIENPTE9SX01BR0VOVEEpOworI2VuZGlmCisjaWZkZWYgQ09MT1JfQ1lBTgorICBjb2xvcl9kZWYoIkN5YW4iLCBDT0xPUl9DWUFOKTsKKyNlbmRpZgorI2lmZGVmIENPTE9SX1dISVRFCisgIGNvbG9yX2RlZigiV2hpdGUiLCBDT0xPUl9XSElURSk7CisjZW5kaWYKK30KKworLyoKKyAqIEdlbmVyYXRlIHRoZSBsaW5rZXIgb3B0aW9ucyBmb3IgdGhlIGJhc2UgZmFjaWxpdHkKKyAqLworc3RhdGljIHZvaWQKK2dlbl9saW5rb3B0cyh2b2lkKQoreworICBwcmludGYoIiAgIHByYWdtYSBMaW5rZXJfT3B0aW9ucyAoXCItbG5jdXJzZXMlc1wiKTtcbiIsIG1vZGVsKTsKK30KKworLyoKKyAqIEdlbmVyYXRlIHRoZSBsaW5rZXIgb3B0aW9ucyBmb3IgdGhlIG1lbnUgZmFjaWxpdHkKKyAqLworc3RhdGljIHZvaWQKK2dlbl9tZW51X2xpbmtvcHRzKHZvaWQpCit7CisgIHByaW50ZigiICAgcHJhZ21hIExpbmtlcl9PcHRpb25zIChcIi1sbWVudSVzXCIpO1xuIiwgbW9kZWwpOworfQorCisvKgorICogR2VuZXJhdGUgdGhlIGxpbmtlciBvcHRpb25zIGZvciB0aGUgZm9ybSBmYWNpbGl0eQorICovCitzdGF0aWMgdm9pZAorZ2VuX2Zvcm1fbGlua29wdHModm9pZCkKK3sKKyAgcHJpbnRmKCIgICBwcmFnbWEgTGlua2VyX09wdGlvbnMgKFwiLWxmb3JtJXNcIik7XG4iLCBtb2RlbCk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSB0aGUgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBwYW5lbCBmYWNpbGl0eQorICovCitzdGF0aWMgdm9pZAorZ2VuX3BhbmVsX2xpbmtvcHRzKHZvaWQpCit7CisgIHByaW50ZigiICAgcHJhZ21hIExpbmtlcl9PcHRpb25zIChcIi1scGFuZWwlc1wiKTtcbiIsIG1vZGVsKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl92ZXJzaW9uX2luZm8odm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnYxID0KKyAgIiAgIE5DX01ham9yX1ZlcnNpb24gOiBjb25zdGFudCA6PSAlZDsgLS0gIE1ham9yIHZlcnNpb24gb2YgdGhlIGxpYnJhcnlcbiI7CisgIHN0YXRpYyBjb25zdCBjaGFyICp2MiA9CisgICIgICBOQ19NaW5vcl9WZXJzaW9uIDogY29uc3RhbnQgOj0gJWQ7IC0tICBNaW5vciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5XG4iOworICBzdGF0aWMgY29uc3QgY2hhciAqdjMgPQorICAiICAgTkNfVmVyc2lvbiA6IGNvbnN0YW50IFN0cmluZyA6PSAlYyVkLiVkJWM7ICAtLSAgVmVyc2lvbiBvZiBsaWJyYXJ5XG4iOworCisgIHByaW50Zih2MSwgTkNVUlNFU19WRVJTSU9OX01BSk9SKTsKKyAgcHJpbnRmKHYyLCBOQ1VSU0VTX1ZFUlNJT05fTUlOT1IpOworICBwcmludGYodjMsICciJywgTkNVUlNFU19WRVJTSU9OX01BSk9SLCBOQ1VSU0VTX1ZFUlNJT05fTUlOT1IsICciJyk7Cit9CisKK3N0YXRpYyBpbnQKK2V0aV9nZW4oY2hhciAqYnVmLCBpbnQgY29kZSwgY29uc3QgY2hhciAqbmFtZSwgaW50ICpldGltaW4sIGludCAqZXRpbWF4KQoreworICBzcHJpbnRmKGJ1ZiwgIiAgIEVfJS0xNnMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gJWQ7XG4iLCBuYW1lLCBjb2RlKTsKKyAgaWYgKGNvZGUgPCAqZXRpbWluKQorICAgICpldGltaW4gPSBjb2RlOworICBpZiAoY29kZSA+ICpldGltYXgpCisgICAgKmV0aW1heCA9IGNvZGU7CisgIHJldHVybiBzdHJsZW4oYnVmKTsKK30KKworc3RhdGljIHZvaWQKK2dlbl9vZmZzZXRzKHZvaWQpCit7CisgIGNvbnN0IGNoYXIgKnNfYm9vbCA9ICIiOworCisgIGlmIChzaXplb2YoYm9vbCkgPT0gc2l6ZW9mKGNoYXIpKQorICAgIHsKKyAgICAgIHNfYm9vbCA9ICJjaGFyIjsKKyAgICB9CisgIGVsc2UgaWYgKHNpemVvZihib29sKSA9PSBzaXplb2Yoc2hvcnQpKQorICAgIHsKKyAgICAgIHNfYm9vbCA9ICJzaG9ydCI7CisgICAgfQorICBlbHNlIGlmIChzaXplb2YoYm9vbCkgPT0gc2l6ZW9mKGludCkpCisgICAgeworICAgICAgc19ib29sID0gImludCI7CisgICAgfQorICBwcmludGYoIiAgIFNpemVvZiUtKnMgOiBjb25zdGFudCBOYXR1cmFsIDo9ICUybGQ7IC0tICAlc1xuIiwKKwkgMTIsICJfYm9vbCIsIChsb25nKXNpemVvZihib29sKSwgImJvb2wiKTsKKworICAvKiBJbiBuY3Vyc2VzIF9tYXh5IGFuZCBfbWF4eCBuZWVkcyBhbiBvZmZzZXQgZm9yIHRoZSAicHVibGljIgorICAgKiB2YWx1ZQorICAgKi8KKyAgcHJpbnRmKCIgICBPZmZzZXQlLSpzIDogY29uc3RhbnQgTmF0dXJhbCA6PSAlMmQ7IC0tICAlc1xuIiwKKwkgMTIsICJfWFkiLCAxLCAiaW50Iik7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCIgICB0eXBlIEN1cnNlc19Cb29sIGlzIG1vZCAyICoqIEludGVyZmFjZXMuQy4lcydTaXplO1xuIiwgc19ib29sKTsKK30KKworLyoKKyAqIG1haW4oKSBleHBlY3RzIHR3byBhcmd1bWVudHMgb24gdGhlIGNvbW1hbmRsaW5lLCBib3RoIHNpbmdsZSBjaGFyYWN0ZXJzLgorICogVGhlIGZpcnN0IGNoYXJhY3RlciBkZW5vdGVzIHRoZSBmYWNpbGl0eSBmb3Igd2hpY2ggd2UgZ2VuZXJhdGUgb3V0cHV0LgorICogUG9zc2libGUgdmFsdWVzIGFyZQorICogICBCIC0gQmFzZQorICogICBNIC0gTWVudXMKKyAqICAgRiAtIEZvcm1zCisgKiAgIFAgLSBQb2ludGVyIERldmljZSAoTW91c2UpCisgKiAgIEUgLSBFVEkgYmFzZSBkZWZpbml0aW9ucworICoKKyAqIFRoZSBzZWNvbmQgY2hhcmFjdGVyIHRoZW4gZGVub3RlcyB0aGUgc3BlY2lmaWMgb3V0cHV0IHRoYXQgc2hvdWxkIGJlCisgKiBnZW5lcmF0ZWQgZm9yIHRoZSBzZWxlY3RlZCBmYWNpbGl0eS4KKyAqLworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGludCB4ID0gMHgxMjM0NTY3ODsKKyAgY2hhciAqcyA9IChjaGFyICopJng7CisKKyAgaWYgKCpzID09IDB4NzgpCisgICAgbGl0dGxlX2VuZGlhbiA9IDE7CisKKyAgaWYgKGFyZ2MgIT0gNCkKKyAgICBleGl0KDEpOworICBtb2RlbCA9ICorK2FyZ3Y7CisKKyAgc3dpdGNoIChhcmd2WzFdWzBdKQorICAgIHsKKyAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgJ0InOgkJCS8qIFRoZSBCYXNlIGZhY2lsaXR5ICovCisgICAgICBzd2l0Y2ggKGFyZ3ZbMl1bMF0pCisJeworCWNhc2UgJ0EnOgkJLyogY2h0eXBlIHRyYW5zbGF0aW9uIGludG8gQWRhOTUgcmVjb3JkIHR5cGUgKi8KKwkgIGdlbl9hdHRyX3NldCgiQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQiKTsKKwkgIGJyZWFrOworCWNhc2UgJ0InOgkJLyogd3JpdGUgc29tZSBpbml0aWFsIGNvbW1lbnQgbGluZXMgKi8KKwkgIGJhc2VkZWZzKCk7CisJICBicmVhazsKKwljYXNlICdDJzoJCS8qIGdlbmVyYXRlIGNvbG9yIGNvbnN0YW50cyAqLworCSAgZ2VuX2NvbG9yKCk7CisJICBicmVhazsKKwljYXNlICdEJzoJCS8qIGdlbmVyYXRlIGRpc3BsYWNlbWVudHMgb2YgZmllbGRzIGluIFdJTkRPVyBzdHJ1Y3QuICovCisJICBnZW5fb2Zmc2V0cygpOworCSAgYnJlYWs7CisJY2FzZSAnRSc6CQkvKiBnZW5lcmF0ZSBNb3VzZSBFdmVudCBjb2RlcyAqLworCSAgZ2VuX21vdXNlX2V2ZW50cygpOworCSAgYnJlYWs7CisJY2FzZSAnSyc6CQkvKiB0cmFuc2xhdGlvbiBvZiBrZXljb2RlcyAqLworCSAgZ2VuX2tleWRlZnMoMCk7CisJICBicmVhazsKKwljYXNlICdMJzoJCS8qIGdlbmVyYXRlIHRoZSBMaW5rZXJfT3B0aW9ucyBwcmFnbWEgKi8KKwkgIGdlbl9saW5rb3B0cygpOworCSAgYnJlYWs7CisJY2FzZSAnTSc6CQkvKiBnZW5lcmF0ZSBjb25zdGFudHMgZm9yIHRoZSBBQ1MgY2hhcmFjdGVycyAqLworCSAgZ2VuX2FjcygpOworCSAgYnJlYWs7CisJY2FzZSAnTyc6CQkvKiBnZW5lcmF0ZSBkZWZpbml0aW9ucyBvZiB0aGUgb2xkIGtleSBjb2RlIG5hbWVzICovCisJICBnZW5fa2V5ZGVmcygxKTsKKwkgIGJyZWFrOworCWNhc2UgJ1AnOgkJLyogZ2VuZXJhdGUgZGVmaW5pdGlvbnMgb2YgdGhlIHB1YmxpYyB2YXJpYWJsZXMgKi8KKwkgIGdlbl9wdWJsaWNfdmFycygpOworCSAgYnJlYWs7CisJY2FzZSAnUic6CQkvKiBnZW5lcmF0ZSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIEF0dHJpYnV0ZWQgY2hhcmFjdGVyICovCisJICBnZW5fY2h0eXBlX3JlcCgiQXR0cmlidXRlZF9DaGFyYWN0ZXIiKTsKKwkgIGJyZWFrOworCWNhc2UgJ1QnOgkJLyogZ2VuZXJhdGUgdGhlIFRyYWNlIGluZm8gKi8KKwkgIGdlbl90cmFjZSgiVHJhY2VfQXR0cmlidXRlX1NldCIpOworCSAgYnJlYWs7CisJY2FzZSAnVic6CQkvKiBnZW5lcmF0ZSB2ZXJzaW9uIGluZm8gKi8KKwkgIGdlbl92ZXJzaW9uX2luZm8oKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKyAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgJ00nOgkJCS8qIFRoZSBNZW51IGZhY2lsaXR5ICovCisgICAgICBzd2l0Y2ggKGFyZ3ZbMl1bMF0pCisJeworCWNhc2UgJ1InOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBNZW51X09wdGlvbl9TZXQgKi8KKwkgIGdlbl9tZW51X29wdF9yZXAoIk1lbnVfT3B0aW9uX1NldCIpOworCSAgYnJlYWs7CisJY2FzZSAnQic6CQkvKiB3cml0ZSBzb21lIGluaXRpYWwgY29tbWVudCBsaW5lcyAqLworCSAgbWVudV9iYXNlZGVmcygpOworCSAgYnJlYWs7CisJY2FzZSAnTCc6CQkvKiBnZW5lcmF0ZSB0aGUgTGlua2VyX09wdGlvbnMgcHJhZ21hICovCisJICBnZW5fbWVudV9saW5rb3B0cygpOworCSAgYnJlYWs7CisJY2FzZSAnSSc6CQkvKiBnZW5lcmF0ZSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIEl0ZW1fT3B0aW9uX1NldCAqLworCSAgZ2VuX2l0ZW1fb3B0X3JlcCgiSXRlbV9PcHRpb25fU2V0Iik7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgICAgYnJlYWs7CisgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlICdGJzoJCQkvKiBUaGUgRm9ybSBmYWNpbGl0eSAqLworICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQorCXsKKwljYXNlICdSJzoJCS8qIGdlbmVyYXRlIHJlcHJlc2VudGF0aW9uIGNsYXVzZSBmb3IgRm9ybV9PcHRpb25fU2V0ICovCisJICBnZW5fZm9ybV9vcHRfcmVwKCJGb3JtX09wdGlvbl9TZXQiKTsKKwkgIGJyZWFrOworCWNhc2UgJ0InOgkJLyogd3JpdGUgc29tZSBpbml0aWFsIGNvbW1lbnQgbGluZXMgKi8KKwkgIGZvcm1fYmFzZWRlZnMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ0wnOgkJLyogZ2VuZXJhdGUgdGhlIExpbmtlcl9PcHRpb25zIHByYWdtYSAqLworCSAgZ2VuX2Zvcm1fbGlua29wdHMoKTsKKwkgIGJyZWFrOworCWNhc2UgJ0knOgkJLyogZ2VuZXJhdGUgcmVwcmVzZW50YXRpb24gY2xhdXNlIGZvciBGaWVsZF9PcHRpb25fU2V0ICovCisJICBnZW5fZmllbGRfb3B0X3JlcCgiRmllbGRfT3B0aW9uX1NldCIpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSAnUCc6CQkJLyogVGhlIFBvaW50ZXIoPU1vdXNlKSBmYWNpbGl0eSAqLworICAgICAgc3dpdGNoIChhcmd2WzJdWzBdKQorCXsKKwljYXNlICdCJzoJCS8qIHdyaXRlIHNvbWUgaW5pdGlhbCBjb21tZW50IGxpbmVzICovCisJICBtb3VzZV9iYXNlZGVmcygpOworCSAgYnJlYWs7CisJY2FzZSAnTSc6CQkvKiBnZW5lcmF0ZSByZXByZXNlbnRhdGlvbiBjbGF1c2UgZm9yIE1vdXNlX0V2ZW50ICovCisJICBnZW5fbXJlcF9yZXAoIk1vdXNlX0V2ZW50Iik7CisJICBicmVhazsKKwljYXNlICdMJzoJCS8qIGdlbmVyYXRlIHRoZSBMaW5rZXJfT3B0aW9ucyBwcmFnbWEgKi8KKwkgIGdlbl9wYW5lbF9saW5rb3B0cygpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSAnRSc6CQkJLyogY2h0eXBlIHNpemUgZGV0ZWN0aW9uICovCisgICAgICBzd2l0Y2ggKGFyZ3ZbMl1bMF0pCisJeworCWNhc2UgJ0MnOgorCSAgeworCSAgICBjb25zdCBjaGFyICpmbXQgPSAiICAgdHlwZSAgICBDX0NodHlwZSAgIGlzIG5ldyAlcztcbiI7CisJICAgIGNvbnN0IGNoYXIgKmFmbXQgPSAiICAgdHlwZSAgICBDX0F0dHJUeXBlIGlzIG5ldyAlcztcbiI7CisKKwkgICAgaWYgKHNpemVvZihjaHR5cGUpID09IHNpemVvZihpbnQpKQorCSAgICAgIHsKKwkJaWYgKHNpemVvZihpbnQpID09IHNpemVvZihsb25nKSkKKwkJICAgIHByaW50ZihmbXQsICJDX1VMb25nIik7CisKKwkJZWxzZQorCQkgIHByaW50ZihmbXQsICJDX1VJbnQiKTsKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKHNpemVvZihjaHR5cGUpID09IHNpemVvZihsb25nKSkKKwkgICAgICB7CisJCXByaW50ZihmbXQsICJDX1VMb25nIik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCJFcnJvclxuIik7CisKKwkgICAgaWYgKHNpemVvZihhdHRyX3QpID09IHNpemVvZihpbnQpKQorCSAgICAgIHsKKwkJaWYgKHNpemVvZihpbnQpID09IHNpemVvZihsb25nKSkKKwkJICAgIHByaW50ZihhZm10LCAiQ19VTG9uZyIpOworCisJCWVsc2UKKwkJICBwcmludGYoYWZtdCwgIkNfVUludCIpOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoc2l6ZW9mKGF0dHJfdCkgPT0gc2l6ZW9mKGxvbmcpKQorCSAgICAgIHsKKwkJcHJpbnRmKGFmbXQsICJDX1VMb25nIik7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCJFcnJvclxuIik7CisKKwkgICAgcHJpbnRmKCJkZWZpbmUoYENGX0NVUlNFU19PSycsYCVkJykiLCBPSyk7CisJICAgIHByaW50ZigiZGVmaW5lKGBDRl9DVVJTRVNfRVJSJyxgJWQnKSIsIEVSUik7CisJICAgIHByaW50ZigiZGVmaW5lKGBDRl9DVVJTRVNfVFJVRScsYCVkJykiLCBUUlVFKTsKKwkgICAgcHJpbnRmKCJkZWZpbmUoYENGX0NVUlNFU19GQUxTRScsYCVkJykiLCBGQUxTRSk7CisJICB9CisJICBicmVhazsKKwljYXNlICdFJzoKKwkgIHsKKwkgICAgY2hhciAqYnVmID0gKGNoYXIgKiltYWxsb2MoMjA0OCk7CisJICAgIGNoYXIgKnAgPSBidWY7CisJICAgIGludCBldGltaW4gPSBFX09LOworCSAgICBpbnQgZXRpbWF4ID0gRV9PSzsKKworCSAgICBpZiAocCkKKwkgICAgICB7CisJCXAgKz0gZXRpX2dlbihwLCBFX09LLCAiT2siLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfU1lTVEVNX0VSUk9SLCAiU3lzdGVtX0Vycm9yIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX0JBRF9BUkdVTUVOVCwgIkJhZF9Bcmd1bWVudCIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9QT1NURUQsICJQb3N0ZWQiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfQ09OTkVDVEVELCAiQ29ubmVjdGVkIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX0JBRF9TVEFURSwgIkJhZF9TdGF0ZSIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9OT19ST09NLCAiTm9fUm9vbSIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9OT1RfUE9TVEVELCAiTm90X1Bvc3RlZCIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9VTktOT1dOX0NPTU1BTkQsCisJCQkgICAgICJVbmtub3duX0NvbW1hbmQiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfTk9fTUFUQ0gsICJOb19NYXRjaCIsICZldGltaW4sICZldGltYXgpOworCQlwICs9IGV0aV9nZW4ocCwgRV9OT1RfU0VMRUNUQUJMRSwKKwkJCSAgICAgIk5vdF9TZWxlY3RhYmxlIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX05PVF9DT05ORUNURUQsCisJCQkgICAgICJOb3RfQ29ubmVjdGVkIiwgJmV0aW1pbiwgJmV0aW1heCk7CisJCXAgKz0gZXRpX2dlbihwLCBFX1JFUVVFU1RfREVOSUVELAorCQkJICAgICAiUmVxdWVzdF9EZW5pZWQiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfSU5WQUxJRF9GSUVMRCwKKwkJCSAgICAgIkludmFsaWRfRmllbGQiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkJcCArPSBldGlfZ2VuKHAsIEVfQ1VSUkVOVCwKKwkJCSAgICAgIkN1cnJlbnQiLCAmZXRpbWluLCAmZXRpbWF4KTsKKwkgICAgICB9CisJICAgIHByaW50ZigiICAgc3VidHlwZSBFdGlfRXJyb3IgaXMgQ19JbnQgcmFuZ2UgJWQgLi4gJWQ7XG5cbiIsCisJCSAgIGV0aW1pbiwgZXRpbWF4KTsKKwkgICAgcHJpbnRmKGJ1Zik7CisJICB9CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgICAgYnJlYWs7CisgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlICdWJzoJCQkvKiBwbGFpbiB2ZXJzaW9uIGR1bXAgKi8KKyAgICAgIHsKKwlzd2l0Y2ggKGFyZ3ZbMl1bMF0pCisJICB7CisJICBjYXNlICcxJzoJCS8qIG1ham9yIHZlcnNpb24gKi8KKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fTUFKT1IKKwkgICAgcHJpbnRmKCIlZCIsIE5DVVJTRVNfVkVSU0lPTl9NQUpPUik7CisjZW5kaWYKKwkgICAgYnJlYWs7CisJICBjYXNlICcyJzoJCS8qIG1pbm9yIHZlcnNpb24gKi8KKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fTUlOT1IKKwkgICAgcHJpbnRmKCIlZCIsIE5DVVJTRVNfVkVSU0lPTl9NSU5PUik7CisjZW5kaWYKKwkgICAgYnJlYWs7CisJICBjYXNlICczJzoJCS8qIHBhdGNoIGxldmVsICovCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OX1BBVENICisJICAgIHByaW50ZigiJWQiLCBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpOworI2VuZGlmCisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL2h0bWwubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vaHRtbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYyNjUzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL2h0bWwubTQKQEAgLTAsMCArMSw0MCBAQAorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCitkbmwgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKK2RubCAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorZG5sIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCitkbmwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKK2RubCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorZG5sIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorZG5sIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorZG5sIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCitkbmwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKK2RubCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorZG5sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKK2RubCBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKK2RubCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorZG5sIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCitkbmwgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sCitkbmwgJElkOiBodG1sLm00LHYgMS4zIDIwMDcvMDkvMDEgMjM6NTk6NTkgdG9tIEV4cCAkCitkZWZpbmUoYEFOQ0hPUklEWCcsYDAnKWRubAorZGVmaW5lKGBNQU5QQUdFJyxgZGVmaW5lKGBNQU5QRycsJDEpZG5sCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vTUFOUEcuaHRtbCI+TUFOUEc8L0E+CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpZG5sCitkZWZpbmUoYEFOQ0hPUicsYGRlZmluZShgQU5DSE9SSURYJyxpbmNyKEFOQ0hPUklEWCkpZG5sCitgIycxQSBOQU1FPSJBRlVgXydBTkNIT1JJRFgiYCMnMmRubAorZGVmaW5lKGBDRlVOQU1FJyxgJDEnKWRlZmluZShgQUZVTkFNRScsYCQyJylkbmwKK3wnKWRubAorZGVmaW5lKGBBS0EnLGBgQUtBJzogPEEgSFJFRj0iLi4vbWFuL01BTlBHLmh0bWwiPkNGVU5BTUU8L0E+JylkbmwKK2RlZmluZShgQUxJQVMnLGBgQUtBJzogJDEnKWRubApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL25vcm1hbC5tNCBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi9ub3JtYWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyOTk3NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi9ub3JtYWwubTQKQEAgLTAsMCArMSwzNyBAQAorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCitkbmwgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKK2RubCAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorZG5sIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCitkbmwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKK2RubCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorZG5sIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorZG5sIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorZG5sIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCitkbmwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKK2RubCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorZG5sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKK2RubCBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKK2RubCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorZG5sIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCitkbmwgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sCitkbmwgJElkOiBub3JtYWwubTQsdiAxLjIgMjAwNi8wNC8yMiAyMzoxNjoxNCB0b20gRXhwICQKK2RlZmluZShgTUFOUEFHRScsYGRlZmluZShgTUFOUEcnLCQxKWRubAorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgTWFuIHBhZ2UgTUFOUEcKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JylkbmwKK2RlZmluZShgQU5DSE9SJyxgZGVmaW5lKGBDRlVOQU1FJyxgJDEnKWRlZmluZShgQUZVTkFNRScsYCQyJyknZG5sCit8KWRubAorZGVmaW5lKGBBS0EnLGBgQUtBJzogQ0ZVTkFNRScpZG5sCitkZWZpbmUoYEFMSUFTJyxgYEFLQSc6ICQxJylkbmwKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L2dlbi90YWJsZS5tNCBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90YWJsZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmIwMDI3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3RhYmxlLm00CkBAIC0wLDAgKzEsMzUgQEAKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENvcHlyaWdodCAoYykgMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorZG5sIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCitkbmwgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKK2RubCB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorZG5sIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCitkbmwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKK2RubCBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKK2RubCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKK2RubCBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorZG5sIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCitkbmwgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorZG5sIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCitkbmwgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCitkbmwgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKK2RubCBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorZG5sIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubAorZG5sICRJZDogdGFibGUubTQsdiAxLjIgMjAwNi8wNC8yMiAyMzoxNjo0NCB0b20gRXhwICQKK2RlZmluZShgQU5DSE9SSURYJyxgMCcpZG5sCitkZWZpbmUoYE1BTlBBR0UnLGBkZWZpbmUoYE1BTlBHJywkMSknKWRubAorZGl2ZXJ0KC0xKWRubAorZGVmaW5lKGBBTkNIT1InLGBkaXZlcnQoMClkZWZpbmUoYEFOQ0hPUklEWCcsaW5jcihBTkNIT1JJRFgpKWRubAorPFRSPjxURD4kMTwvVEQ+PFREPjxBIEhSRUY9IkhUTUxOQU1FYCMnQUZVYF8nQU5DSE9SSURYIj4kMjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vTUFOUEcuaHRtbCI+TUFOUEc8L0E+PC9URD48L1RSPgorZGl2ZXJ0KC0xKScpCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRzLm00IGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM5MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkcy5tNApAQCAtMCwwICsxLDEwNSBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKWRubAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXggICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZShgQmFzZV9EZWZzJykKK3dpdGggU3lzdGVtOword2l0aCBJbnRlcmZhY2VzLkM7Cit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOyB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Cit3aXRoIFVuY2hlY2tlZF9Db252ZXJzaW9uOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4IGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eCk7CisKKyAgIHVzZSB0eXBlIEludGVyZmFjZXMuQy5pbnQ7CisKKyAgIHN1YnR5cGUgQ19JbnQgICAgICBpcyBJbnRlcmZhY2VzLkMuaW50OworICAgc3VidHlwZSBDX1Nob3J0ICAgIGlzIEludGVyZmFjZXMuQy5zaG9ydDsKKyAgIHN1YnR5cGUgQ19Mb25nX0ludCBpcyBJbnRlcmZhY2VzLkMubG9uZzsKKyAgIHN1YnR5cGUgQ19TaXplX1QgICBpcyBJbnRlcmZhY2VzLkMuc2l6ZV90OworICAgc3VidHlwZSBDX1VJbnQgICAgIGlzIEludGVyZmFjZXMuQy51bnNpZ25lZDsKKyAgIHN1YnR5cGUgQ19VTG9uZyAgICBpcyBJbnRlcmZhY2VzLkMudW5zaWduZWRfbG9uZzsKKyAgIHN1YnR5cGUgQ19DaGFyX1B0ciBpcyBJbnRlcmZhY2VzLkMuU3RyaW5ncy5jaGFyc19wdHI7CisgICB0eXBlICAgIENfVm9pZF9QdHIgaXMgbmV3IFN5c3RlbS5BZGRyZXNzOworaW5jbHVkZShgQ2h0eXBlX0RlZicpCisgICAtLSAgVGhpcyBpcyBob3cgdGhvc2UgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIG5jdXJzZXMuIEkgc2VlIHRoZW0gYWxzbworICAgLS0gIGV4YWN0bHkgbGlrZSB0aGlzIGluIGFsbCBFVEkgaW1wbGVtZW50YXRpb25zIEkgZXZlciB0ZXN0ZWQuIFNvIGl0CisgICAtLSAgY291bGQgYmUgdGhhdCB0aGlzIGlzIHF1aXRlIGdlbmVyYWwsIGJ1dCBwbGVhc2UgY2hlY2sgd2l0aCB5b3VyIGN1cnNlcy4KKyAgIC0tICBUaGlzIGlzIGNyaXRpY2FsLCBiZWNhdXNlIGN1cnNlcyBzb21ldGltZSBtaXhlcyBib29sZWFuIHJldHVybnMgd2l0aAorICAgLS0gIHJldHVybmluZyBhbiBlcnJvciBzdGF0dXMuCisgICBDdXJzZXNfT2sgICAgOiBjb25zdGFudCBDX0ludCA6PSBDRl9DVVJTRVNfT0s7CisgICBDdXJzZXNfRXJyICAgOiBjb25zdGFudCBDX0ludCA6PSBDRl9DVVJTRVNfRVJSOworCisgICBDdXJzZXNfVHJ1ZSAgOiBjb25zdGFudCBDX0ludCA6PSBDRl9DVVJTRVNfVFJVRTsKKyAgIEN1cnNlc19GYWxzZSA6IGNvbnN0YW50IENfSW50IDo9IENGX0NVUlNFU19GQUxTRTsKKworICAgLS0gIEV0aV9FcnJvcjogdHlwZSBmb3IgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIG1lbnUgYW5kIGZvcm0gc3Vic3lzdGVtCitpbmNsdWRlKGBFdGlfRGVmcycpCisgICBwcm9jZWR1cmUgRXRpX0V4Y2VwdGlvbiAoQ29kZSA6IEV0aV9FcnJvcik7CisgICAtLSAgRGlzcGF0Y2ggdGhlIGVycm9yIGNvZGUgYW5kIHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24KKyAgIC0tCisgICAtLQorICAgLS0gIFNvbWUgaGVscGVycworICAgZnVuY3Rpb24gQ2h0eXBlX1RvX0F0dHJDaGFyIGlzIG5ldworICAgICBVbmNoZWNrZWRfQ29udmVyc2lvbiAoU291cmNlID0+IENfQ2h0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0ID0+IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIGZ1bmN0aW9uIEF0dHJDaGFyX1RvX0NodHlwZSBpcyBuZXcKKyAgICAgVW5jaGVja2VkX0NvbnZlcnNpb24gKFNvdXJjZSA9PiBBdHRyaWJ1dGVkX0NoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCA9PiBDX0NodHlwZSk7CisKKyAgIGZ1bmN0aW9uIEF0dHJDaGFyX1RvX0F0dHJUeXBlIGlzIG5ldworICAgICBVbmNoZWNrZWRfQ29udmVyc2lvbiAoU291cmNlID0+IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0ID0+IENfQXR0clR5cGUpOworCisgICBmdW5jdGlvbiBBdHRyVHlwZV9Ub19BdHRyQ2hhciBpcyBuZXcKKyAgICAgVW5jaGVja2VkX0NvbnZlcnNpb24gKFNvdXJjZSA9PiBDX0F0dHJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0ID0+IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKworICAgcHJvY2VkdXJlIEZpbGxfU3RyaW5nIChDcCAgOiBpbiAgY2hhcnNfcHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBGaWxsIHRoZSBTdHIgcGFyYW1ldGVyIHdpdGggdGhlIHN0cmluZyBkZW5vdGVkIGJ5IHRoZSBjaGFyc19wdHIKKyAgIC0tICBDLVN0eWxlIHN0cmluZy4KKworICAgZnVuY3Rpb24gRmlsbF9TdHJpbmcgKENwIDogY2hhcnNfcHRyKSByZXR1cm4gU3RyaW5nOworICAgLS0gIFNhbWUgYnV0IGFzIGZ1bmN0aW9uLgorCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZHMubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxOTg0NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkcy5tNApAQCAtMCwwICsxLDIzOCBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKWRubAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcyAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjE0ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBJbnRlcmZhY2VzLkM7CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcyBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcyk7CisgICB1c2UgdHlwZSBJbnRlcmZhY2VzLkMuaW50OworICAgc3VidHlwZSBDX0ludCBpcyBJbnRlcmZhY2VzLkMuaW50OworCisgICAtLSAgTUFOUEFHRShgZm9ybV9maWVsZHR5cGUuM3gnKQorCisgICB0eXBlIEZpZWxkX1R5cGUgaXMgYWJzdHJhY3QgdGFnZ2VkIG51bGwgcmVjb3JkOworICAgLS0gIEFic3RyYWN0IGJhc2UgdHlwZSBmb3IgYWxsIGZpZWxkIHR5cGVzLiBBIGNvbmNyZXRlIGZpZWxkIHR5cGUKKyAgIC0tICBpcyBhbiBleHRlbnNpb24gdGhhdCBhZGRzIHNvbWUgZGF0YSBlbGVtZW50cyBkZXNjcmliaW5nIGZvcm1hdHMgb3IKKyAgIC0tICBib3VuZGFyeSB2YWx1ZXMgZm9yIHRoZSB0eXBlIGFuZCB2YWxpZGF0aW9uIHJvdXRpbmVzLgorICAgLS0gIEZvciB0aGUgYnVpbHRpbiBsb3ctbGV2ZWwgZmllbGR0eXBlcywgdGhlIHZhbGlkYXRpb24gcm91dGluZXMgYXJlCisgICAtLSAgYWxyZWFkeSBkZWZpbmVkIGJ5IHRoZSBsb3ctbGV2ZWwgQyBsaWJyYXJ5LgorICAgLS0gIFRoZSBidWlsdGluIHR5cGVzIGxpa2UgQWxwaGEgb3IgQWxwaGFOdW1lcmljIGV0Yy4gYXJlIGRlZmluZWQgaW4KKyAgIC0tICBjaGlsZCBwYWNrYWdlcyBvZiB0aGlzIHBhY2thZ2UuIFlvdSBtYXkgdXNlIG9uZSBvZiB0aGVtIGFzIGV4YW1wbGUKKyAgIC0tICBob3cgdG8gY3JlYXRlIHlvdSBvd24gY2hpbGQgcGFja2FnZXMgZm9yIGxvdy1sZXZlbCBmaWVsZCB0eXBlcyB0aGF0CisgICAtLSAgeW91IG1heSBoYXZlIGFscmVhZHkgd3JpdHRlbiBpbiBDLgorCisgICB0eXBlIEZpZWxkX1R5cGVfQWNjZXNzIGlzIGFjY2VzcyBhbGwgRmllbGRfVHlwZSdDbGFzczsKKworICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX3R5cGUoKScsYFNldF9UeXBlJykKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkICAgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxkX1R5cGUgOiBpbiBGaWVsZF9UeXBlKSBpcyBhYnN0cmFjdDsKKyAgIC0tICBBS0EKKyAgIC0tICBCdXQ6IHdlIGhpZGUgdGhlIHZhcmFyZyBtZWNoYW5pc20gb2YgdGhlIEMgaW50ZXJmYWNlLiBZb3UgYWx3YXlzCisgICAtLSAgICAgICBoYXZlIHRvIHBhc3MgYSBzaW5nbGUgRmllbGRfVHlwZSBwYXJhbWV0ZXIuCisKKyAgIC0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX3R5cGUoKScsYEdldF9UeXBlJykKKyAgIGZ1bmN0aW9uIEdldF9UeXBlIChGbGQgOiBpbiBGaWVsZCkgcmV0dXJuIEZpZWxkX1R5cGVfQWNjZXNzOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBmaWVsZF9hcmcoKScpCisgICAtLSAgSW4gQWRhOTUgd2UgY2FuIGNvbWJpbmUgdGhlc2UuIElmIHlvdSB0cnkgdG8gcmV0cmlldmUgdGhlIGZpZWxkIHR5cGUKKyAgIC0tICB0aGF0IGlzIG5vdCBkZWZpbmVkIGFzIGV4dGVuc2lvbiBvZiB0aGUgYWJzdHJhY3QgdGFnZ2VkIHR5cGUgYWJvdmUsCisgICAtLSAgeW91IHdpbGwgcmFpc2UgYSBGb3JtX0V4Y2VwdGlvbi4KKyAgIC0tICBUaGlzIGlzIG5vdCBpbmxpbmVkCisKKyAgIC0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIHwgUHJpdmF0ZSBQYXJ0LgorICAgLS0gIHwgTW9zdCBvZiB0aGlzIGlzIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY2hpbGQgcGFja2FnZXMuCisgICAtLSAgfAorcHJpdmF0ZQorICAgdHlwZSBNYWtlYXJnX0Z1bmN0aW9uIGlzIGFjY2VzcworICAgICBmdW5jdGlvbiAoQXJncyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gU3lzdGVtLkFkZHJlc3M7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgTWFrZWFyZ19GdW5jdGlvbik7CisKKyAgIHR5cGUgQ29weWFyZ19GdW5jdGlvbiBpcyBhY2Nlc3MKKyAgICAgZnVuY3Rpb24gKFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gU3lzdGVtLkFkZHJlc3M7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgQ29weWFyZ19GdW5jdGlvbik7CisKKyAgIHR5cGUgRnJlZWFyZ19GdW5jdGlvbiBpcyBhY2Nlc3MKKyAgICAgcHJvY2VkdXJlIChVc3IgOiBTeXN0ZW0uQWRkcmVzcyk7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgRnJlZWFyZ19GdW5jdGlvbik7CisKKyAgIHR5cGUgRmllbGRfQ2hlY2tfRnVuY3Rpb24gaXMgYWNjZXNzCisgICAgIGZ1bmN0aW9uIChGbGQgOiBGaWVsZDsgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBGaWVsZF9DaGVja19GdW5jdGlvbik7CisKKyAgIHR5cGUgQ2hhcl9DaGVja19GdW5jdGlvbiBpcyBhY2Nlc3MKKyAgICAgZnVuY3Rpb24gKENoIDogQ19JbnQ7IFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgQ2hhcl9DaGVja19GdW5jdGlvbik7CisKKyAgIHR5cGUgQ2hvaWNlX0Z1bmN0aW9uIGlzIGFjY2VzcworICAgICBmdW5jdGlvbiAoRmxkIDogRmllbGQ7IFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgQ2hvaWNlX0Z1bmN0aW9uKTsKKworICAgLS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgfCBUaGlzIG11c3QgYmUgaW4gc3luYyB3aXRoIHRoZSBGSUVMRFRZUEUgc3RydWN0dXJlIGluIGZvcm0uaAorICAgLS0gIHwKKyAgIHR5cGUgTG93X0xldmVsX0ZpZWxkX1R5cGUgaXMKKyAgICAgIHJlY29yZAorICAgICAgICAgU3RhdHVzIDogICAgICAgICAgICAgIEludGVyZmFjZXMuQy5zaG9ydDsKKyAgICAgICAgIFJlZl9Db3VudCA6ICAgICAgICAgICBJbnRlcmZhY2VzLkMubG9uZzsKKyAgICAgICAgIExlZnQsIFJpZ2h0IDogICAgICAgICBTeXN0ZW0uQWRkcmVzczsKKyAgICAgICAgIE1ha2VhcmcgOiAgICAgICAgICAgICBNYWtlYXJnX0Z1bmN0aW9uOworICAgICAgICAgQ29weWFyZyA6ICAgICAgICAgICAgIENvcHlhcmdfRnVuY3Rpb247CisgICAgICAgICBGcmVlYXJnIDogICAgICAgICAgICAgRnJlZWFyZ19GdW5jdGlvbjsKKyAgICAgICAgIEZjaGVjayA6ICAgICAgICAgICAgICBGaWVsZF9DaGVja19GdW5jdGlvbjsKKyAgICAgICAgIENjaGVjayA6ICAgICAgICAgICAgICBDaGFyX0NoZWNrX0Z1bmN0aW9uOworICAgICAgICAgTmV4dCwgUHJldiA6ICAgICAgICAgIENob2ljZV9GdW5jdGlvbjsKKyAgICAgIGVuZCByZWNvcmQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgTG93X0xldmVsX0ZpZWxkX1R5cGUpOworICAgdHlwZSBDX0ZpZWxkX1R5cGUgaXMgYWNjZXNzIGFsbCBMb3dfTGV2ZWxfRmllbGRfVHlwZTsKKworICAgTnVsbF9GaWVsZF9UeXBlICAgOiBjb25zdGFudCBDX0ZpZWxkX1R5cGUgOj0gbnVsbDsKKworICAgLS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgfCBUaGlzIGZvdXIgbG93LWxldmVsIGZpZWxkdHlwZXMgYXJlIHRoZSBvbmVzIGFzc29jaWF0ZWQgd2l0aAorICAgLS0gIHwgZmllbGR0eXBlcyBoYW5kbGVkIGJ5IHRoaXMgYmluZGluZy4gQW55IG90aGVyIGxvdy1sZXZlbCBmaWVsZHR5cGUKKyAgIC0tICB8IHdpbGwgcmVzdWx0IGluIGEgRm9ybV9FeGNlcHRpb24gaXMgZnVuY3Rpb24gR2V0X1R5cGUuCisgICAtLSAgfAorICAgTV9HZW5lcmljX1R5cGUgICA6IENfRmllbGRfVHlwZSA6PSBudWxsOworICAgTV9HZW5lcmljX0Nob2ljZSA6IENfRmllbGRfVHlwZSA6PSBudWxsOworICAgTV9CdWlsdGluX1JvdXRlciA6IENfRmllbGRfVHlwZSA6PSBudWxsOworICAgTV9DaG9pY2VfUm91dGVyICA6IENfRmllbGRfVHlwZSA6PSBudWxsOworCisgICAtLSAgVHdvIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aG9zZSBsb3ctbGV2ZWwgZmllbGR0eXBlcyBkZWZpbmVkCisgICAtLSAgaW4gdGhpcyBwYWNrYWdlLgorICAgZnVuY3Rpb24gQ19CdWlsdGluX1JvdXRlciByZXR1cm4gQ19GaWVsZF9UeXBlOworICAgZnVuY3Rpb24gQ19DaG9pY2VfUm91dGVyICByZXR1cm4gQ19GaWVsZF9UeXBlOworCisgICBwcm9jZWR1cmUgV3JhcF9CdWlsdGluIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IEZpZWxkX1R5cGUnQ2xhc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgOiBDX0ZpZWxkX1R5cGUgOj0gQ19CdWlsdGluX1JvdXRlcik7CisgICAtLSAgVGhpcyBwcm9jZWR1cmUgaGFzIHRvIGJlIGNhbGxlZCBieSB0aGUgU2V0X0ZpZWxkX1R5cGUgaW1wbGVtZW50YXRpb24KKyAgIC0tICBmb3IgYnVpbHRpbiBsb3ctbGV2ZWwgZmllbGR0eXBlcyB0byByZXBsYWNlIGl0IGJ5IGFuIEFkYTk1CisgICAtLSAgY29uZm9ybWFudCBGaWVsZF9UeXBlIG9iamVjdC4KKyAgIC0tICBUaGUgcGFyYW1ldGVyIENmdCBtdXN0IGJlIENfQnVpbHRpbl9Sb3V0ZXIgZm9yIHJlZ3VsYXIgbG93LWxldmVsCisgICAtLSAgZmllbGR0eXBlcyAobGlrZSBUWVBfQUxQSEEgb3IgVFlQX0FMTlVNKSBhbmQgQ19DaG9pY2VfUm91dGVyIGZvcgorICAgLS0gIGxvdy1sZXZlbCBmaWVsZHR5cGVzIHdpdGNoIGNob2ljZSBmdW5jdGlvbnMgKGxpa2UgVFlQX0VOVU0pLgorICAgLS0gIEFueSBvdGhlciB2YWx1ZSB3aWxsIHJhaXNlIGEgRm9ybV9FeGNlcHRpb24uCisKKyAgIGZ1bmN0aW9uIE1ha2VfQXJnIChBcmdzIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBTeXN0ZW0uQWRkcmVzczsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBNYWtlX0FyZyk7CisgICAtLSAgVGhpcyBpcyB0aGUgTWFrZWFyZ19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcworICAgLS0gIGludHJvZHVjZWQgYnkgdGhpcyBiaW5kaW5nLgorCisgICBmdW5jdGlvbiBDb3B5X0FyZyAoVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBTeXN0ZW0uQWRkcmVzczsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBDb3B5X0FyZyk7CisgICAtLSAgVGhpcyBpcyB0aGUgQ29weWFyZ19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcworICAgLS0gIGludHJvZHVjZWQgYnkgdGhpcyBiaW5kaW5nLgorCisgICBwcm9jZWR1cmUgRnJlZV9BcmcgKFVzciA6IFN5c3RlbS5BZGRyZXNzKTsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBGcmVlX0FyZyk7CisgICAtLSAgVGhpcyBpcyB0aGUgRnJlZWFyZ19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcworICAgLS0gIGludHJvZHVjZWQgYnkgdGhpcyBiaW5kaW5nLgorCisgICBmdW5jdGlvbiBGaWVsZF9DaGVja19Sb3V0ZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEZpZWxkX0NoZWNrX1JvdXRlcik7CisgICAtLSAgVGhpcyBpcyB0aGUgRmllbGRfQ2hlY2tfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXMKKyAgIC0tICBpbnRyb2R1Y2VkIHRvIHdyYXAgdGhlIGxvdy1sZXZlbCB0eXBlcyBieSBhIEZpZWxkX1R5cGUgZGVyaXZlZAorICAgLS0gIHR5cGUuIEl0IHJvdXRlcyB0aGUgY2FsbCB0byB0aGUgY29ycmVzcG9uZGluZyBsb3ctbGV2ZWwgdmFsaWRhdGlvbgorICAgLS0gIGZ1bmN0aW9uLgorCisgICBmdW5jdGlvbiBDaGFyX0NoZWNrX1JvdXRlciAoQ2ggOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIENoYXJfQ2hlY2tfUm91dGVyKTsKKyAgIC0tICBUaGlzIGlzIHRoZSBDaGFyX0NoZWNrX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzCisgICAtLSAgaW50cm9kdWNlZCB0byB3cmFwIHRoZSBsb3ctbGV2ZWwgdHlwZXMgYnkgYSBGaWVsZF9UeXBlIGRlcml2ZWQKKyAgIC0tICB0eXBlLiBJdCByb3V0ZXMgdGhlIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93LWxldmVsIHZhbGlkYXRpb24KKyAgIC0tICBmdW5jdGlvbi4KKworICAgZnVuY3Rpb24gTmV4dF9Sb3V0ZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgTmV4dF9Sb3V0ZXIpOworICAgLS0gIFRoaXMgaXMgdGhlIENob2ljZV9GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlcworICAgLS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkCisgICAtLSAgdHlwZS4gSXQgcm91dGVzIHRoZSBjYWxsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1sZXZlbCBuZXh0X2Nob2ljZQorICAgLS0gIGZ1bmN0aW9uLgorCisgICBmdW5jdGlvbiBQcmV2X1JvdXRlciAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBQcmV2X1JvdXRlcik7CisgICAtLSAgVGhpcyBpcyB0aGUgQ2hvaWNlX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzCisgICAtLSAgaW50cm9kdWNlZCB0byB3cmFwIHRoZSBsb3ctbGV2ZWwgdHlwZXMgYnkgYSBGaWVsZF9UeXBlIGRlcml2ZWQKKyAgIC0tICB0eXBlLiBJdCByb3V0ZXMgdGhlIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG93LWxldmVsIHByZXZfY2hvaWNlCisgICAtLSAgZnVuY3Rpb24uCisKKyAgIC0tICBUaGlzIGlzIHRoZSBBcmd1bWVudCBzdHJ1Y3R1cmUgbWFpbnRhaW5lZCBieSBhbGwgbG93LWxldmVsIGZpZWxkIHR5cGVzCisgICAtLSAgaW50cm9kdWNlZCBieSB0aGlzIGJpbmRpbmcuCisgICB0eXBlIEFyZ3VtZW50IGlzIHJlY29yZAorICAgICAgVHlwIDogRmllbGRfVHlwZV9BY2Nlc3M7ICAgLS0gIHRoZSBGaWVsZF9UeXBlIGNyZWF0aW5nIHRoaXMgcmVjb3JkCisgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzczsgICAgICAtLSAgb3JpZ2luYWwgYXJnIGZvciBidWlsdGluIGxvdy1sZXZlbCB0eXBlcworICAgICAgQ2Z0IDogQ19GaWVsZF9UeXBlOyAgICAgICAgLS0gIHRoZSBvcmlnaW5hbCBsb3ctbGV2ZWwgdHlwZQorICAgZW5kIHJlY29yZDsKKyAgIHR5cGUgQXJndW1lbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQXJndW1lbnQ7CisKKyAgIC0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIHwKKyAgIC0tICB8IFNvbWUgSW1wb3J0cyBvZiBsaWJmb3JtIHJvdXRpbmVzIHRvIGRlYWwgd2l0aCBsb3ctbGV2ZWwgZmllbGR0eXBlcy4KKyAgIC0tICB8CisgICBmdW5jdGlvbiBOZXdfRmllbGR0eXBlIChGY2hlY2sgOiBGaWVsZF9DaGVja19GdW5jdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENjaGVjayA6IENoYXJfQ2hlY2tfRnVuY3Rpb24pCisgICAgIHJldHVybiBDX0ZpZWxkX1R5cGU7CisgICBwcmFnbWEgSW1wb3J0IChDLCBOZXdfRmllbGR0eXBlLCAibmV3X2ZpZWxkdHlwZSIpOworCisgICBmdW5jdGlvbiBTZXRfRmllbGR0eXBlX0FyZyAoQ2Z0IDogQ19GaWVsZF9UeXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hayA6IE1ha2VhcmdfRnVuY3Rpb24gOj0gTWFrZV9BcmcnQWNjZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcCA6IENvcHlhcmdfRnVuY3Rpb24gOj0gQ29weV9BcmcnQWNjZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZSA6IEZyZWVhcmdfRnVuY3Rpb24gOj0gRnJlZV9BcmcnQWNjZXNzKQorICAgICByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGR0eXBlX0FyZywgInNldF9maWVsZHR5cGVfYXJnIik7CisKKyAgIGZ1bmN0aW9uIFNldF9GaWVsZHR5cGVfQ2hvaWNlIChDZnQgOiBDX0ZpZWxkX1R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV4dCwgUHJldiA6IENob2ljZV9GdW5jdGlvbikKKyAgICAgcmV0dXJuIENfSW50OworICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkdHlwZV9DaG9pY2UsICJzZXRfZmllbGR0eXBlX2Nob2ljZSIpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHMubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMzk4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzLm00CkBAIC0wLDAgKzEsNzAgQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpYworICAgdHlwZSBVc2VyIGlzIGxpbWl0ZWQgcHJpdmF0ZTsKKyAgIHR5cGUgVXNlcl9BY2Nlc3MgaXMgYWNjZXNzIFVzZXI7CitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX3VzZXJwdHIuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfdXNlcnB0cicsYFNldF9Vc2VyX0RhdGEnKQorICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKEZsZCAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1VzZXJfRGF0YSk7CisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBmaWVsZF91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gIEZpZWxkKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAtLSAgQUtBCisgICAtLSAgU2FtYSBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcy5tNCBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQ0MjBkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzLm00CkBAIC0wLDAgKzEsNzAgQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKWRubAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZvcm1fVXNlcl9EYXRhICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjE0ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljCisgICB0eXBlIFVzZXIgaXMgbGltaXRlZCBwcml2YXRlOworICAgdHlwZSBVc2VyX0FjY2VzcyBpcyBhY2Nlc3MgVXNlcjsKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YSBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YSk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX3VzZXJwdHIuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV91c2VycHRyJyxgU2V0X1VzZXJfRGF0YScpCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Vc2VyX0RhdGEpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChGcm0gIDogaW4gIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2Vzcyk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGZvcm1fdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQorICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoRnJtICA6IGluICBGb3JtKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAtLSAgQUtBCisgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZvcm1fVXNlcl9EYXRhOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00IGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzVlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHMubTQKQEAgLTAsMCArMSw2OTkgQEAKKy0tICAtKi0gYWRhIC0qLQorZGVmaW5lKGBIVE1MTkFNRScsYHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0nKWRubAoraW5jbHVkZShNNE1BQ1JPKWRubAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm0gICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjI5ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1ZGUoYEZvcm1fQmFzZV9EZWZzJykKK3dpdGggU3lzdGVtOword2l0aCBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMpOworaW5jbHVkZShgRm9ybV9MaW5rZXJfT3B0aW9ucycpZG5sCitpbmNsdWRlKGBMaW5rZXJfT3B0aW9ucycpCisgICBTcGFjZSA6IENoYXJhY3RlciByZW5hbWVzIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzEuU3BhY2U7CisKKyAgIHR5cGUgRmllbGQgICAgICAgIGlzIHByaXZhdGU7CisgICB0eXBlIEZvcm0gICAgICAgICBpcyBwcml2YXRlOworCisgICBOdWxsX0ZpZWxkICAgICAgICA6IGNvbnN0YW50IEZpZWxkOworICAgTnVsbF9Gb3JtICAgICAgICAgOiBjb25zdGFudCBGb3JtOworCisgICB0eXBlIEZpZWxkX0p1c3RpZmljYXRpb24gaXMgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmlnaHQpOworCisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7CitpbmNsdWRlKGBGaWVsZF9SZXAnKURubAorCisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgZnVuY3Rpb24gRGVmYXVsdF9GaWVsZF9PcHRpb25zIHJldHVybiBGaWVsZF9PcHRpb25fU2V0OworICAgLS0gIFRoZSBpbml0aWFsIGRlZmF1bHRzIGZvciB0aGUgZmllbGQgb3B0aW9ucy4KKyAgIHByYWdtYSBJbmxpbmUgKERlZmF1bHRfRmllbGRfT3B0aW9ucyk7CisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKK2luY2x1ZGUoYEZvcm1fT3B0X1JlcCcpRG5sCisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworCisgICBmdW5jdGlvbiBEZWZhdWx0X0Zvcm1fT3B0aW9ucyByZXR1cm4gRm9ybV9PcHRpb25fU2V0OworICAgLS0gIFRoZSBpbml0aWFsIGRlZmF1bHRzIGZvciB0aGUgZm9ybSBvcHRpb25zLgorICAgcHJhZ21hIElubGluZSAoRGVmYXVsdF9Gb3JtX09wdGlvbnMpOworCisgICB0eXBlIEJ1ZmZlcl9OdW1iZXIgaXMgbmV3IE5hdHVyYWw7CisKKyAgIHR5cGUgRmllbGRfQXJyYXkgaXMgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiBhbGlhc2VkIEZpZWxkOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEZpZWxkX0FycmF5KTsKKworICAgdHlwZSBGaWVsZF9BcnJheV9BY2Nlc3MgaXMgYWNjZXNzIEZpZWxkX0FycmF5OworCisgICBwcm9jZWR1cmUgRnJlZSAoRkEgICAgICAgICAgOiBpbiBvdXQgRmllbGRfQXJyYXlfQWNjZXNzOworICAgICAgICAgICAgICAgICAgIEZyZWVfRmllbGRzIDogaW4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICAtLSAgUmVsZWFzZSB0aGUgbWVtb3J5IGZvciBhbiBhbGxvY2F0ZWQgZmllbGQgYXJyYXkKKyAgIC0tICBJZiBGcmVlX0ZpZWxkcyBpcyBUcnVlLCBjYWxsIERlbGV0ZSgpIGZvciBhbGwgdGhlIGZpZWxkcyBpbgorICAgLS0gIHRoZSBhcnJheS4KKworICAgc3VidHlwZSBGb3JtX1JlcXVlc3RfQ29kZSBpcyBLZXlfQ29kZSByYW5nZSAoS2V5X01heCArIDEpIC4uIChLZXlfTWF4ICsgNTcpOworCisgICAtLSAgVGhlIHByZWZpeCBGXyBzdGFuZHMgZm9yICJGb3JtIFJlcXVlc3QiCisgICBGX05leHRfUGFnZSAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxOworICAgRl9QcmV2aW91c19QYWdlICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjsKKyAgIEZfRmlyc3RfUGFnZSAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDM7CisgICBGX0xhc3RfUGFnZSAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0OworCisgICBGX05leHRfRmllbGQgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA1OworICAgRl9QcmV2aW91c19GaWVsZCAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNjsKKyAgIEZfRmlyc3RfRmllbGQgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDc7CisgICBGX0xhc3RfRmllbGQgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA4OworICAgRl9Tb3J0ZWRfTmV4dF9GaWVsZCAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgOTsKKyAgIEZfU29ydGVkX1ByZXZpb3VzX0ZpZWxkICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDEwOworICAgRl9Tb3J0ZWRfRmlyc3RfRmllbGQgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTE7CisgICBGX1NvcnRlZF9MYXN0X0ZpZWxkICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxMjsKKyAgIEZfTGVmdF9GaWVsZCAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDEzOworICAgRl9SaWdodF9GaWVsZCAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTQ7CisgICBGX1VwX0ZpZWxkICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxNTsKKyAgIEZfRG93bl9GaWVsZCAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDE2OworCisgICBGX05leHRfQ2hhciAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxNzsKKyAgIEZfUHJldmlvdXNfQ2hhciAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDE4OworICAgRl9OZXh0X0xpbmUgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTk7CisgICBGX1ByZXZpb3VzX0xpbmUgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAyMDsKKyAgIEZfTmV4dF9Xb3JkICAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDIxOworICAgRl9QcmV2aW91c19Xb3JkICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjI7CisgICBGX0JlZ2luX0ZpZWxkICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAyMzsKKyAgIEZfRW5kX0ZpZWxkICAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDI0OworICAgRl9CZWdpbl9MaW5lICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjU7CisgICBGX0VuZF9MaW5lICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAyNjsKKyAgIEZfTGVmdF9DaGFyICAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDI3OworICAgRl9SaWdodF9DaGFyICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjg7CisgICBGX1VwX0NoYXIgICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAyOTsKKyAgIEZfRG93bl9DaGFyICAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDMwOworCisgICBGX05ld19MaW5lICAgICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzMTsKKyAgIEZfSW5zZXJ0X0NoYXIgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDMyOworICAgRl9JbnNlcnRfTGluZSAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMzM7CisgICBGX0RlbGV0ZV9DaGFyICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzNDsKKyAgIEZfRGVsZXRlX1ByZXZpb3VzICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDM1OworICAgRl9EZWxldGVfTGluZSAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMzY7CisgICBGX0RlbGV0ZV9Xb3JkICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAzNzsKKyAgIEZfQ2xlYXJfRU9MICAgICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDM4OworICAgRl9DbGVhcl9FT0YgICAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMzk7CisgICBGX0NsZWFyX0ZpZWxkICAgICAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0MDsKKyAgIEZfT3ZlcmxheV9Nb2RlICAgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDQxOworICAgRl9JbnNlcnRfTW9kZSAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDI7CisKKyAgIC0tICBWZXJ0aWNhbCBTY3JvbGxpbmcKKyAgIEZfU2Nyb2xsRm9yd2FyZF9MaW5lICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDQzOworICAgRl9TY3JvbGxCYWNrd2FyZF9MaW5lICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDQ7CisgICBGX1Njcm9sbEZvcndhcmRfUGFnZSAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0NTsKKyAgIEZfU2Nyb2xsQmFja3dhcmRfUGFnZSAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDQ2OworICAgRl9TY3JvbGxGb3J3YXJkX0hhbGZQYWdlICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNDc7CisgICBGX1Njcm9sbEJhY2t3YXJkX0hhbGZQYWdlICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0ODsKKworICAgLS0gIEhvcml6b250YWwgU2Nyb2xsaW5nCisgICBGX0hTY3JvbGxGb3J3YXJkX0NoYXIgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0OTsKKyAgIEZfSFNjcm9sbEJhY2t3YXJkX0NoYXIgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDUwOworICAgRl9IU2Nyb2xsRm9yd2FyZF9MaW5lICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNTE7CisgICBGX0hTY3JvbGxCYWNrd2FyZF9MaW5lICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA1MjsKKyAgIEZfSFNjcm9sbEZvcndhcmRfSGFsZkxpbmUgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDUzOworICAgRl9IU2Nyb2xsQmFja3dhcmRfSGFsZkxpbmUgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNTQ7CisKKyAgIEZfVmFsaWRhdGVfRmllbGQgICAgICAgICAgIDogY29uc3RhbnQgRm9ybV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDU1OworICAgRl9OZXh0X0Nob2ljZSAgICAgICAgICAgICAgOiBjb25zdGFudCBGb3JtX1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNTY7CisgICBGX1ByZXZpb3VzX0Nob2ljZSAgICAgICAgICA6IGNvbnN0YW50IEZvcm1fUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA1NzsKKworICAgLS0gIEZvciB0aG9zZSB3aG8gbGlrZSB0aGUgb2xkICdDJyBzdHlsZSByZXF1ZXN0IG5hbWVzCisgICBSRVFfTkVYVF9QQUdFICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX05leHRfUGFnZTsKKyAgIFJFUV9QUkVWX1BBR0UgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfUHJldmlvdXNfUGFnZTsKKyAgIFJFUV9GSVJTVF9QQUdFICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRmlyc3RfUGFnZTsKKyAgIFJFUV9MQVNUX1BBR0UgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTGFzdF9QYWdlOworCisgICBSRVFfTkVYVF9GSUVMRCAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX05leHRfRmllbGQ7CisgICBSRVFfUFJFVl9GSUVMRCAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1ByZXZpb3VzX0ZpZWxkOworICAgUkVRX0ZJUlNUX0ZJRUxEICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9GaXJzdF9GaWVsZDsKKyAgIFJFUV9MQVNUX0ZJRUxEICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTGFzdF9GaWVsZDsKKyAgIFJFUV9TTkVYVF9GSUVMRCAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfU29ydGVkX05leHRfRmllbGQ7CisgICBSRVFfU1BSRVZfRklFTEQgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1NvcnRlZF9QcmV2aW91c19GaWVsZDsKKyAgIFJFUV9TRklSU1RfRklFTEQgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfU29ydGVkX0ZpcnN0X0ZpZWxkOworICAgUkVRX1NMQVNUX0ZJRUxEICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9Tb3J0ZWRfTGFzdF9GaWVsZDsKKyAgIFJFUV9MRUZUX0ZJRUxEICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTGVmdF9GaWVsZDsKKyAgIFJFUV9SSUdIVF9GSUVMRCAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfUmlnaHRfRmllbGQ7CisgICBSRVFfVVBfRklFTEQgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1VwX0ZpZWxkOworICAgUkVRX0RPV05fRklFTEQgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9Eb3duX0ZpZWxkOworCisgICBSRVFfTkVYVF9DSEFSICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX05leHRfQ2hhcjsKKyAgIFJFUV9QUkVWX0NIQVIgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfUHJldmlvdXNfQ2hhcjsKKyAgIFJFUV9ORVhUX0xJTkUgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfTmV4dF9MaW5lOworICAgUkVRX1BSRVZfTElORSAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9QcmV2aW91c19MaW5lOworICAgUkVRX05FWFRfV09SRCAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9OZXh0X1dvcmQ7CisgICBSRVFfUFJFVl9XT1JEICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1ByZXZpb3VzX1dvcmQ7CisgICBSRVFfQkVHX0ZJRUxEICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0JlZ2luX0ZpZWxkOworICAgUkVRX0VORF9GSUVMRCAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9FbmRfRmllbGQ7CisgICBSRVFfQkVHX0xJTkUgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0JlZ2luX0xpbmU7CisgICBSRVFfRU5EX0xJTkUgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0VuZF9MaW5lOworICAgUkVRX0xFRlRfQ0hBUiAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9MZWZ0X0NoYXI7CisgICBSRVFfUklHSFRfQ0hBUiAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1JpZ2h0X0NoYXI7CisgICBSRVFfVVBfQ0hBUiAgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1VwX0NoYXI7CisgICBSRVFfRE9XTl9DSEFSICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0Rvd25fQ2hhcjsKKworICAgUkVRX05FV19MSU5FICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9OZXdfTGluZTsKKyAgIFJFUV9JTlNfQ0hBUiAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfSW5zZXJ0X0NoYXI7CisgICBSRVFfSU5TX0xJTkUgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0luc2VydF9MaW5lOworICAgUkVRX0RFTF9DSEFSICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9EZWxldGVfQ2hhcjsKKyAgIFJFUV9ERUxfUFJFViAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRGVsZXRlX1ByZXZpb3VzOworICAgUkVRX0RFTF9MSU5FICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9EZWxldGVfTGluZTsKKyAgIFJFUV9ERUxfV09SRCAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfRGVsZXRlX1dvcmQ7CisgICBSRVFfQ0xSX0VPTCAgICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0NsZWFyX0VPTDsKKyAgIFJFUV9DTFJfRU9GICAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfQ2xlYXJfRU9GOworICAgUkVRX0NMUl9GSUVMRCAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9DbGVhcl9GaWVsZDsKKyAgIFJFUV9PVkxfTU9ERSAgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfT3ZlcmxheV9Nb2RlOworICAgUkVRX0lOU19NT0RFICAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9JbnNlcnRfTW9kZTsKKworICAgUkVRX1NDUl9GTElORSAgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9TY3JvbGxGb3J3YXJkX0xpbmU7CisgICBSRVFfU0NSX0JMSU5FICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1Njcm9sbEJhY2t3YXJkX0xpbmU7CisgICBSRVFfU0NSX0ZQQUdFICAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1Njcm9sbEZvcndhcmRfUGFnZTsKKyAgIFJFUV9TQ1JfQlBBR0UgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfU2Nyb2xsQmFja3dhcmRfUGFnZTsKKyAgIFJFUV9TQ1JfRkhQQUdFICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfU2Nyb2xsRm9yd2FyZF9IYWxmUGFnZTsKKyAgIFJFUV9TQ1JfQkhQQUdFICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfU2Nyb2xsQmFja3dhcmRfSGFsZlBhZ2U7CisKKyAgIFJFUV9TQ1JfRkNIQVIgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfSFNjcm9sbEZvcndhcmRfQ2hhcjsKKyAgIFJFUV9TQ1JfQkNIQVIgICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfSFNjcm9sbEJhY2t3YXJkX0NoYXI7CisgICBSRVFfU0NSX0hGTElORSAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0hTY3JvbGxGb3J3YXJkX0xpbmU7CisgICBSRVFfU0NSX0hCTElORSAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX0hTY3JvbGxCYWNrd2FyZF9MaW5lOworICAgUkVRX1NDUl9IRkhBTEYgICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9IU2Nyb2xsRm9yd2FyZF9IYWxmTGluZTsKKyAgIFJFUV9TQ1JfSEJIQUxGICAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfSFNjcm9sbEJhY2t3YXJkX0hhbGZMaW5lOworCisgICBSRVFfVkFMSURBVElPTiAgIDogRm9ybV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBGX1ZhbGlkYXRlX0ZpZWxkOworICAgUkVRX05FWFRfQ0hPSUNFICA6IEZvcm1fUmVxdWVzdF9Db2RlIHJlbmFtZXMgRl9OZXh0X0Nob2ljZTsKKyAgIFJFUV9QUkVWX0NIT0lDRSAgOiBGb3JtX1JlcXVlc3RfQ29kZSByZW5hbWVzIEZfUHJldmlvdXNfQ2hvaWNlOworCisgICBwcm9jZWR1cmUgUmVxdWVzdF9OYW1lIChLZXkgIDogaW4gRm9ybV9SZXF1ZXN0X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZyk7CisKKyAgIGZ1bmN0aW9uICBSZXF1ZXN0X05hbWUgKEtleSA6IEZvcm1fUmVxdWVzdF9Db2RlKSByZXR1cm4gU3RyaW5nOworICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKFJlcXVlc3RfTmFtZSk7CisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIEV4Y2VwdGlvbnMgIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEZvcm1fRXhjZXB0aW9uIDogZXhjZXB0aW9uOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9maWVsZF9uZXcuM3gnKQorCisgICAtLSAgQU5DSE9SKGBuZXdfZmllbGQoKScsYENyZWF0ZScpCisgICBmdW5jdGlvbiBDcmVhdGUgKEhlaWdodCAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIFdpZHRoICAgICAgICA6IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgVG9wICAgICAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgTGVmdCAgICAgICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBPZmZfU2NyZWVuICAgOiBOYXR1cmFsIDo9IDA7CisgICAgICAgICAgICAgICAgICAgIE1vcmVfQnVmZmVycyA6IEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkOworICAgLS0gIEFLQQorICAgLS0gIEFuIG92ZXJsb2FkZWQgQ3JlYXRlIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZS4KKworICAgLS0gIEFOQ0hPUihgbmV3X2ZpZWxkKCknLGBOZXdfRmllbGQnKQorICAgZnVuY3Rpb24gTmV3X0ZpZWxkIChIZWlnaHQgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICBXaWR0aCAgICAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgIFRvcCAgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIExlZnQgICAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgT2ZmX1NjcmVlbiAgIDogTmF0dXJhbCA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICBNb3JlX0J1ZmZlcnMgOiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZCByZW5hbWVzIENyZWF0ZTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKE5ld19GaWVsZCk7CisKKyAgIC0tICBBTkNIT1IoYGZyZWVfZmllbGQoKScsYERlbGV0ZScpCisgICBwcm9jZWR1cmUgRGVsZXRlIChGbGQgOiBpbiBvdXQgRmllbGQpOworICAgLS0gIEFLQQorICAgLS0gIFJlc2V0IEZsZCB0byBOdWxsX0ZpZWxkCisgICAtLSAgQW4gb3ZlcmxvYWRlZCBEZWxldGUgaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlLgorCisgICAtLSAgQU5DSE9SKGBkdXBfZmllbGQoKScsYER1cGxpY2F0ZScpCisgICBmdW5jdGlvbiBEdXBsaWNhdGUgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgVG9wICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIExlZnQgOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBGaWVsZDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKER1cGxpY2F0ZSk7CisKKyAgIC0tICBBTkNIT1IoYGxpbmtfZmllbGQoKScsYExpbmsnKQorICAgZnVuY3Rpb24gTGluayAoRmxkICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgVG9wICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBMZWZ0IDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gRmllbGQ7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChMaW5rKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGRfanVzdC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9qdXN0KCknLGBTZXRfSnVzdGlmaWNhdGlvbicpCisgICBwcm9jZWR1cmUgU2V0X0p1c3RpZmljYXRpb24gKEZsZCAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVzdCA6IGluIEZpZWxkX0p1c3RpZmljYXRpb24gOj0gTm9uZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfSnVzdGlmaWNhdGlvbik7CisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX2p1c3QoKScsYEdldF9KdXN0aWZpY2F0aW9uJykKKyAgIGZ1bmN0aW9uIEdldF9KdXN0aWZpY2F0aW9uIChGbGQgOiBGaWVsZCkgcmV0dXJuIEZpZWxkX0p1c3RpZmljYXRpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfSnVzdGlmaWNhdGlvbik7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2ZpZWxkX2J1ZmZlci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9idWZmZXIoKScsYFNldF9CdWZmZXInKQorICAgcHJvY2VkdXJlIFNldF9CdWZmZXIKKyAgICAgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgQnVmZmVyIDogaW4gQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0OworICAgICAgU3RyICAgIDogaW4gU3RyaW5nKTsKKyAgIC0tICBBS0EKKyAgIC0tICBOb3QgaW5saW5lZAorCisgICAtLSAgQU5DSE9SKGBmaWVsZF9idWZmZXIoKScsYEdldF9CdWZmZXInKQorICAgcHJvY2VkdXJlIEdldF9CdWZmZXIKKyAgICAgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgQnVmZmVyIDogaW4gQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0OworICAgICAgU3RyICAgIDogb3V0IFN0cmluZyk7CisgICAtLSAgQUtBCisKKyAgIGZ1bmN0aW9uIEdldF9CdWZmZXIKKyAgICAgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgQnVmZmVyIDogaW4gQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0KSByZXR1cm4gU3RyaW5nOworICAgLS0gIEFLQQorICAgLS0gIFNhbWUgYnV0IGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChHZXRfQnVmZmVyKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX3N0YXR1cygpJyxgU2V0X1N0YXR1cycpCisgICBwcm9jZWR1cmUgU2V0X1N0YXR1cyAoRmxkICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9TdGF0dXMpOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF9zdGF0dXMoKScsYENoYW5nZWQnKQorICAgZnVuY3Rpb24gQ2hhbmdlZCAoRmxkIDogRmllbGQpIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQ2hhbmdlZCk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9tYXgoKScsYFNldF9NYXhpbXVtX1NpemUnKQorICAgcHJvY2VkdXJlIFNldF9NYXhpbXVtX1NpemUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCA6IGluIE5hdHVyYWwgOj0gMCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfTWF4aW11bV9TaXplKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGRfb3B0cy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9vcHRzKCknLGBTZXRfT3B0aW9ucycpCisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEZsZCAgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZpZWxkX09wdGlvbl9TZXQpOworICAgLS0gIEFLQQorICAgLS0gIEFuIG92ZXJsb2FkZWQgdmVyc2lvbiBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmUKKworICAgLS0gIEFOQ0hPUihgZmllbGRfb3B0c19vbigpJyxgU3dpdGNoX09wdGlvbnMnKQorICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGbGQgICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGaWVsZF9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgZmllbGRfb3B0c19vZmYoKScpCisgICAtLSAgQW4gb3ZlcmxvYWRlZCB2ZXJzaW9uIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZQorCisgICAtLSAgQU5DSE9SKGBmaWVsZF9vcHRzKCknLGBHZXRfT3B0aW9ucycpCisgICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKEZsZCAgICAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBvdXQgRmllbGRfT3B0aW9uX1NldCk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX29wdHMoKScsYEdldF9PcHRpb25zJykKKyAgIGZ1bmN0aW9uIEdldF9PcHRpb25zIChGbGQgOiBGaWVsZCA6PSBOdWxsX0ZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZF9PcHRpb25fU2V0OworICAgLS0gIEFLQQorICAgLS0gIEFuIG92ZXJsb2FkZWQgdmVyc2lvbiBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmUKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGRfYXR0cmlidXRlcy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9mb3JlKCknLGBTZXRfRm9yZWdyb3VuZCcpCisgICBwcm9jZWR1cmUgU2V0X0ZvcmVncm91bmQKKyAgICAgKEZsZCAgIDogaW4gRmllbGQ7CisgICAgICBGb3JlICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Gb3JlZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgZmllbGRfZm9yZSgpJyxgRm9yZWdyb3VuZCcpCisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgZmllbGRfZm9yZSgpJyxgRm9yZWdyb3VuZCcpCisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChGb3JlZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2ZpZWxkX2JhY2soKScsYFNldF9CYWNrZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBTZXRfQmFja2dyb3VuZAorICAgICAoRmxkICAgOiBpbiBGaWVsZDsKKyAgICAgIEJhY2sgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0JhY2tncm91bmQpOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF9iYWNrKCknLGBCYWNrZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChGbGQgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBmaWVsZF9iYWNrKCknLGBCYWNrZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChGbGQgICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrICA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA6IG91dCBDb2xvcl9QYWlyKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEJhY2tncm91bmQpOworCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfcGFkKCknLGBTZXRfUGFkX0NoYXJhY3RlcicpCisgICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBpbiBDaGFyYWN0ZXIgOj0gU3BhY2UpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1BhZF9DaGFyYWN0ZXIpOworCisgICAtLSAgQU5DSE9SKGBmaWVsZF9wYWQoKScsYFBhZF9DaGFyYWN0ZXInKQorICAgcHJvY2VkdXJlIFBhZF9DaGFyYWN0ZXIgKEZsZCA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBvdXQgQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFBhZF9DaGFyYWN0ZXIpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9maWVsZF9pbmZvLjN4JykKKworICAgLS0gIEFOQ0hPUihgZmllbGRfaW5mbygpJyxgSW5mbycpCisgICBwcm9jZWR1cmUgSW5mbyAoRmxkICAgICAgICAgICAgICAgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgIExpbmVzICAgICAgICAgICAgICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgIENvbHVtbnMgICAgICAgICAgICA6IG91dCBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgRmlyc3RfUm93ICAgICAgICAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgRmlyc3RfQ29sdW1uICAgICAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBPZmZfU2NyZWVuICAgICAgICAgOiBvdXQgTmF0dXJhbDsKKyAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsX0J1ZmZlcnMgOiBvdXQgQnVmZmVyX051bWJlcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJbmZvKTsKKworICAgLS0gIEFOQ0hPUihgZHluYW1pY19maWVsZF9pbmZvKCknLGBEeW5hbWljX0luZm8nKQorICAgcHJvY2VkdXJlIER5bmFtaWNfSW5mbyAoRmxkICAgICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXggICAgIDogb3V0IE5hdHVyYWwpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRHluYW1pY19JbmZvKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fd2luLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fd2luKCknLGBTZXRfV2luZG93JykKKyAgIHByb2NlZHVyZSBTZXRfV2luZG93IChGcm0gOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgZm9ybV93aW4oKScsYEdldF9XaW5kb3cnKQorICAgZnVuY3Rpb24gR2V0X1dpbmRvdyAoRnJtIDogRm9ybSkgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV9zdWIoKScsYFNldF9TdWJfV2luZG93JykKKyAgIHByb2NlZHVyZSBTZXRfU3ViX1dpbmRvdyAoRnJtIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9TdWJfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgZm9ybV9zdWIoKScsYEdldF9TdWJfV2luZG93JykKKyAgIGZ1bmN0aW9uIEdldF9TdWJfV2luZG93IChGcm0gOiBGb3JtKSByZXR1cm4gV2luZG93OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X1N1Yl9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBzY2FsZV9mb3JtKCknLGBTY2FsZScpCisgICBwcm9jZWR1cmUgU2NhbGUgKEZybSAgICAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNjYWxlKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1faG9vay4zeCcpCisKKyAgIHR5cGUgRm9ybV9Ib29rX0Z1bmN0aW9uIGlzIGFjY2VzcyBwcm9jZWR1cmUgKEZybSA6IGluIEZvcm0pOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEZvcm1fSG9va19GdW5jdGlvbik7CisKKyAgIC0tICBBTkNIT1IoYHNldF9maWVsZF9pbml0KCknLGBTZXRfRmllbGRfSW5pdF9Ib29rJykKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfSW5pdF9Ib29rIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gRm9ybV9Ib29rX0Z1bmN0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9Jbml0X0hvb2spOworCisgICAtLSAgQU5DSE9SKGBzZXRfZmllbGRfdGVybSgpJyxgU2V0X0ZpZWxkX1Rlcm1fSG9vaycpCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1Rlcm1fSG9vayAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIEZvcm1fSG9va19GdW5jdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVGVybV9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1faW5pdCgpJyxgU2V0X0Zvcm1fSW5pdF9Ib29rJykKKyAgIHByb2NlZHVyZSBTZXRfRm9ybV9Jbml0X0hvb2sgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIEZvcm1fSG9va19GdW5jdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRm9ybV9Jbml0X0hvb2spOworCisgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV90ZXJtKCknLGBTZXRfRm9ybV9UZXJtX0hvb2snKQorICAgcHJvY2VkdXJlIFNldF9Gb3JtX1Rlcm1fSG9vayAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gRm9ybV9Ib29rX0Z1bmN0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Gb3JtX1Rlcm1fSG9vayk7CisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX2luaXQoKScsYEdldF9GaWVsZF9Jbml0X0hvb2snKQorICAgZnVuY3Rpb24gR2V0X0ZpZWxkX0luaXRfSG9vayAoRnJtIDogRm9ybSkgcmV0dXJuIEZvcm1fSG9va19GdW5jdGlvbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9GaWVsZF9Jbml0X0hvb2ssICJmaWVsZF9pbml0Iik7CisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX3Rlcm0oKScsYEdldF9GaWVsZF9UZXJtX0hvb2snKQorICAgZnVuY3Rpb24gR2V0X0ZpZWxkX1Rlcm1fSG9vayAoRnJtIDogRm9ybSkgcmV0dXJuIEZvcm1fSG9va19GdW5jdGlvbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9GaWVsZF9UZXJtX0hvb2ssICJmaWVsZF90ZXJtIik7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1faW5pdCgpJyxgR2V0X0Zvcm1fSW5pdF9Ib29rJykKKyAgIGZ1bmN0aW9uIEdldF9Gb3JtX0luaXRfSG9vayAoRnJtIDogRm9ybSkgcmV0dXJuIEZvcm1fSG9va19GdW5jdGlvbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9Gb3JtX0luaXRfSG9vaywgImZvcm1faW5pdCIpOworCisgICAtLSAgQU5DSE9SKGBmb3JtX3Rlcm0oKScsYEdldF9Gb3JtX1Rlcm1fSG9vaycpCisgICBmdW5jdGlvbiBHZXRfRm9ybV9UZXJtX0hvb2sgKEZybSA6IEZvcm0pIHJldHVybiBGb3JtX0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfRm9ybV9UZXJtX0hvb2ssICJmb3JtX3Rlcm0iKTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fZmllbGQuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV9maWVsZHMoKScsYFJlZGVmaW5lJykKKyAgIHByb2NlZHVyZSBSZWRlZmluZSAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIEZsZHMgOiBpbiBGaWVsZF9BcnJheV9BY2Nlc3MpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUmVkZWZpbmUpOworCisgICAtLSAgQU5DSE9SKGBzZXRfZm9ybV9maWVsZHMoKScsYFNldF9GaWVsZHMnKQorICAgcHJvY2VkdXJlIFNldF9GaWVsZHMgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgIEZsZHMgOiBpbiBGaWVsZF9BcnJheV9BY2Nlc3MpIHJlbmFtZXMgUmVkZWZpbmU7CisgICAtLSAgQUtBCisgICAtLSAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkcyk7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1fZmllbGRzKCknLGBGaWVsZHMnKQorICAgZnVuY3Rpb24gRmllbGRzIChGcm0gICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgIEluZGV4IDogUG9zaXRpdmUpIHJldHVybiBGaWVsZDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEZpZWxkcyk7CisKKyAgIC0tICBBTkNIT1IoYGZpZWxkX2NvdW50KCknLGBGaWVsZF9Db3VudCcpCisgICBmdW5jdGlvbiBGaWVsZF9Db3VudCAoRnJtIDogRm9ybSkgcmV0dXJuIE5hdHVyYWw7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChGaWVsZF9Db3VudCk7CisKKyAgIC0tICBBTkNIT1IoYG1vdmVfZmllbGQoKScsYE1vdmUnKQorICAgcHJvY2VkdXJlIE1vdmUgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKE1vdmUpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9uZXcuM3gnKQorCisgICAtLSAgQU5DSE9SKGBuZXdfZm9ybSgpJyxgQ3JlYXRlJykKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoRmllbGRzIDogRmllbGRfQXJyYXlfQWNjZXNzKSByZXR1cm4gRm9ybTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENyZWF0ZSk7CisKKyAgIC0tICBBTkNIT1IoYG5ld19mb3JtKCknLGBOZXdfRm9ybScpCisgICBmdW5jdGlvbiBOZXdfRm9ybSAoRmllbGRzIDogRmllbGRfQXJyYXlfQWNjZXNzKSByZXR1cm4gRm9ybQorICAgICByZW5hbWVzIENyZWF0ZTsKKyAgIC0tICBBS0EKKyAgIC0tICBwcmFnbWEgSW5saW5lIChOZXdfRm9ybSk7CisKKyAgIC0tICBBTkNIT1IoYGZyZWVfZm9ybSgpJyxgRGVsZXRlJykKKyAgIHByb2NlZHVyZSBEZWxldGUgKEZybSA6IGluIG91dCBGb3JtKTsKKyAgIC0tICBBS0EKKyAgIC0tICBSZXNldCBGcm0gdG8gTnVsbF9Gb3JtCisgICBwcmFnbWEgSW5saW5lIChEZWxldGUpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9vcHRzLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X2Zvcm1fb3B0cygpJyxgU2V0X09wdGlvbnMnKQorICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChGcm0gICAgIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZvcm1fT3B0aW9uX1NldCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfT3B0aW9ucyk7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1fb3B0c19vbigpJyxgU3dpdGNoX09wdGlvbnMnKQorICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChGcm0gICAgIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZvcm1fT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGZvcm1fb3B0c19vZmYoKScpCisgICBwcmFnbWEgSW5saW5lIChTd2l0Y2hfT3B0aW9ucyk7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1fb3B0cygpJyxgR2V0X09wdGlvbnMnKQorICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChGcm0gICAgIDogaW4gIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBvdXQgRm9ybV9PcHRpb25fU2V0KTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgZm9ybV9vcHRzKCknLGBHZXRfT3B0aW9ucycpCisgICBmdW5jdGlvbiBHZXRfT3B0aW9ucyAoRnJtIDogRm9ybSA6PSBOdWxsX0Zvcm0pIHJldHVybiBGb3JtX09wdGlvbl9TZXQ7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfT3B0aW9ucyk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX3Bvc3QuM3gnKQorCisgICAtLSAgQU5DSE9SKGBwb3N0X2Zvcm0oKScsYFBvc3QnKQorICAgcHJvY2VkdXJlIFBvc3QgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgIFBvc3QgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB1bnBvc3RfZm9ybSgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFBvc3QpOworCisgICAtLSAgTUFOUEFHRShgZm9ybV9jdXJzb3IuM3gnKQorCisgICAtLSAgQU5DSE9SKGBwb3NfZm9ybV9jdXJzb3IoKScsYFBvc2l0aW9uX0N1cnNvcicpCisgICBwcm9jZWR1cmUgUG9zaXRpb25fQ3Vyc29yIChGcm0gOiBGb3JtKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFBvc2l0aW9uX0N1cnNvcik7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2RhdGEuM3gnKQorCisgICAtLSAgQU5DSE9SKGBkYXRhX2FoZWFkKCknLGBEYXRhX0FoZWFkJykKKyAgIGZ1bmN0aW9uIERhdGFfQWhlYWQgKEZybSA6IEZvcm0pIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRGF0YV9BaGVhZCk7CisKKyAgIC0tICBBTkNIT1IoYGRhdGFfYmVoaW5kKCknLGBEYXRhX0JlaGluZCcpCisgICBmdW5jdGlvbiBEYXRhX0JlaGluZCAoRnJtIDogRm9ybSkgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChEYXRhX0JlaGluZCk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX2RyaXZlci4zeCcpCisKKyAgIHR5cGUgRHJpdmVyX1Jlc3VsdCBpcyAoRm9ybV9PaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdF9EZW5pZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVua25vd25fUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZF9GaWVsZCk7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1fZHJpdmVyKCknLGBEcml2ZXInKQorICAgZnVuY3Rpb24gRHJpdmVyIChGcm0gOiBGb3JtOworICAgICAgICAgICAgICAgICAgICBLZXkgOiBLZXlfQ29kZSkgcmV0dXJuIERyaXZlcl9SZXN1bHQ7CisgICAtLSAgQUtBCisgICAtLSAgRHJpdmVyIG5vdCBpbmxpbmVkCisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX3BhZ2UuM3gnKQorCisgICB0eXBlIFBhZ2VfTnVtYmVyIGlzIG5ldyBOYXR1cmFsOworCisgICAtLSAgQU5DSE9SKGBzZXRfY3VycmVudF9maWVsZCgpJyxgU2V0X0N1cnJlbnQnKQorICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChGcm0gOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICBGbGQgOiBpbiBGaWVsZCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfQ3VycmVudCk7CisKKyAgIC0tICBBTkNIT1IoYGN1cnJlbnRfZmllbGQoKScsYEN1cnJlbnQnKQorICAgZnVuY3Rpb24gQ3VycmVudCAoRnJtIDogaW4gRm9ybSkgcmV0dXJuIEZpZWxkOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQ3VycmVudCk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9mb3JtX3BhZ2UoKScsYFNldF9QYWdlJykKKyAgIHByb2NlZHVyZSBTZXRfUGFnZSAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgOiBpbiBQYWdlX051bWJlciA6PSBQYWdlX051bWJlcidGaXJzdCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfUGFnZSk7CisKKyAgIC0tICBBTkNIT1IoYGZvcm1fcGFnZSgpJyxgUGFnZScpCisgICBmdW5jdGlvbiBQYWdlIChGcm0gOiBGb3JtKSByZXR1cm4gUGFnZV9OdW1iZXI7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChQYWdlKTsKKworICAgLS0gIEFOQ0hPUihgZmllbGRfaW5kZXgoKScsYEdldF9JbmRleCcpCisgICBmdW5jdGlvbiBHZXRfSW5kZXggKEZsZCA6IEZpZWxkKSByZXR1cm4gUG9zaXRpdmU7CisgICAtLSAgQUtBCisgICAtLSAgUGxlYXNlIG5vdGUgdGhhdCBpbiB0aGlzIGJpbmRpbmcgd2Ugc3RhcnQgdGhlIG51bWJlcmluZyBvZiBmaWVsZHMKKyAgIC0tICB3aXRoIDEuIFNvIHRoaXMgaXMgbnVtYmVyIGlzIG9uZSBtb3JlIHRoYW4geW91IGdldCBmcm9tIHRoZSBsb3cKKyAgIC0tICBsZXZlbCBjYWxsLgorICAgcHJhZ21hIElubGluZSAoR2V0X0luZGV4KTsKKworICAgLS0gIE1BTlBBR0UoYGZvcm1fbmV3X3BhZ2UuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfbmV3X3BhZ2UoKScsYFNldF9OZXdfUGFnZScpCisgICBwcm9jZWR1cmUgU2V0X05ld19QYWdlIChGbGQgICAgICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3X1BhZ2UgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X05ld19QYWdlKTsKKworICAgLS0gIEFOQ0hPUihgbmV3X3BhZ2UoKScsYElzX05ld19QYWdlJykKKyAgIGZ1bmN0aW9uIElzX05ld19QYWdlIChGbGQgOiBGaWVsZCkgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJc19OZXdfUGFnZSk7CisKKyAgIC0tICBNQU5QQUdFKGBmb3JtX3JlcXVlc3RuYW1lLjN4JykKKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IGZvcm1fcmVxdWVzdF9uYW1lLCBmb3JtX3JlcXVlc3RfYnlfbmFtZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByaXZhdGUKKyAgIHR5cGUgRmllbGQgaXMgbmV3IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgIHR5cGUgRm9ybSAgaXMgbmV3IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKworICAgTnVsbF9GaWVsZCA6IGNvbnN0YW50IEZpZWxkIDo9IDA7CisgICBOdWxsX0Zvcm0gIDogY29uc3RhbnQgRm9ybSAgOj0gMDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXM7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMjQ2NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcy5tNApAQCAtMCwwICsxLDc1IEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWMKKyAgIHR5cGUgVXNlciBpcyBsaW1pdGVkIHByaXZhdGU7CisgICB0eXBlIFVzZXJfQWNjZXNzIGlzIGFjY2VzcyBVc2VyOworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhKTsKKworICAgLS0gIFRoZSBiaW5kaW5nIHVzZXMgdGhlIHNhbWUgdXNlciBwb2ludGVyIGZvciBtZW51IGl0ZW1zCisgICAtLSAgYXMgdGhlIGxvdyBsZXZlbCBDIGltcGxlbWVudGF0aW9uLiBTbyB5b3UgY2FuIHNhZmVseQorICAgLS0gIHJlYWQgb3Igd3JpdGUgdGhlIHVzZXIgcG9pbnRlciBhbHNvIHdpdGggdGhlIEMgcm91dGluZXMKKyAgIC0tCisgICAtLSAgTUFOUEFHRShgbWl0ZW1fdXNlcnB0ci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9pdGVtX3VzZXJwdHInLGBTZXRfVXNlcl9EYXRhJykKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChJdG0gIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1VzZXJfRGF0YSk7CisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQorICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKEl0bSAgOiBpbiAgSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgaXRlbV91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChJdG0gIDogaW4gIEl0ZW0pIHJldHVybiBVc2VyX0FjY2VzczsKKyAgIC0tICBBS0EKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuSXRlbV9Vc2VyX0RhdGE7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHMubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2MTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcy5tNApAQCAtMCwwICsxLDcwIEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLk1lbnVfVXNlcl9EYXRhICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpYworICAgdHlwZSBVc2VyIGlzIGxpbWl0ZWQgcHJpdmF0ZTsKKyAgIHR5cGUgVXNlcl9BY2Nlc3MgaXMgYWNjZXNzIFVzZXI7CitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGEgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGEpOworCisgICAtLSAgTUFOUEFHRShgbWVudV91c2VycHRyLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfdXNlcnB0cicsYFNldF9Vc2VyX0RhdGEnKQorICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2Vzcyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfVXNlcl9EYXRhKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV91c2VycHRyJyxgR2V0X1VzZXJfRGF0YScpCisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBtZW51X3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKE1lbiAgOiBpbiAgTWVudSkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgLS0gIEFLQQorICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9Vc2VyX0RhdGEpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkcy5tNCBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzk5M2UxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzLm00CkBAIC0wLDAgKzEsNjA0IEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51ICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4yNyAkCistLSAgJERhdGU6IDIwMDcvMDUvMDUgMjA6MjA6NTIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbmNsdWRlKGBNZW51X0Jhc2VfRGVmcycpCit3aXRoIFN5c3RlbTsKK3dpdGggQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzKTsKK2luY2x1ZGUoYE1lbnVfTGlua2VyX09wdGlvbnMnKWRubAoraW5jbHVkZShgTGlua2VyX09wdGlvbnMnKQorICAgU3BhY2UgOiBDaGFyYWN0ZXIgcmVuYW1lcyBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xLlNwYWNlOworCisgICB0eXBlIEl0ZW0gaXMgcHJpdmF0ZTsKKyAgIHR5cGUgTWVudSBpcyBwcml2YXRlOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICBJbnRlcmZhY2UgY29uc3RhbnRzICAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBOdWxsX0l0ZW0gOiBjb25zdGFudCBJdGVtOworICAgTnVsbF9NZW51IDogY29uc3RhbnQgTWVudTsKKworICAgc3VidHlwZSBNZW51X1JlcXVlc3RfQ29kZSBpcyBLZXlfQ29kZQorICAgICByYW5nZSAoS2V5X01heCArIDEpIC4uIChLZXlfTWF4ICsgMTcpOworCisgICAtLSAgVGhlIHByZWZpeCBNXyBzdGFuZHMgZm9yICJNZW51IFJlcXVlc3QiCisgICBNX0xlZnRfSXRlbSAgICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxOworICAgTV9SaWdodF9JdGVtICAgICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMjsKKyAgIE1fVXBfSXRlbSAgICAgICAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDM7CisgICBNX0Rvd25fSXRlbSAgICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA0OworICAgTV9TY3JvbGxVcF9MaW5lICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgNTsKKyAgIE1fU2Nyb2xsRG93bl9MaW5lIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDY7CisgICBNX1Njcm9sbERvd25fUGFnZSA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyA3OworICAgTV9TY3JvbGxVcF9QYWdlICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgODsKKyAgIE1fRmlyc3RfSXRlbSAgICAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDk7CisgICBNX0xhc3RfSXRlbSAgICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxMDsKKyAgIE1fTmV4dF9JdGVtICAgICAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDExOworICAgTV9QcmV2aW91c19JdGVtICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTI7CisgICBNX1RvZ2dsZV9JdGVtICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxMzsKKyAgIE1fQ2xlYXJfUGF0dGVybiAgIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDE0OworICAgTV9CYWNrX1BhdHRlcm4gICAgOiBjb25zdGFudCBNZW51X1JlcXVlc3RfQ29kZSA6PSBLZXlfTWF4ICsgMTU7CisgICBNX05leHRfTWF0Y2ggICAgICA6IGNvbnN0YW50IE1lbnVfUmVxdWVzdF9Db2RlIDo9IEtleV9NYXggKyAxNjsKKyAgIE1fUHJldmlvdXNfTWF0Y2ggIDogY29uc3RhbnQgTWVudV9SZXF1ZXN0X0NvZGUgOj0gS2V5X01heCArIDE3OworCisgICAtLSAgRm9yIHRob3NlIHdobyBsaWtlIHRoZSBvbGQgJ0MnIG5hbWVzIGZvciB0aGUgcmVxdWVzdCBjb2RlcworICAgUkVRX0xFRlRfSVRFTSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fTGVmdF9JdGVtOworICAgUkVRX1JJR0hUX0lURU0gICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fUmlnaHRfSXRlbTsKKyAgIFJFUV9VUF9JVEVNICAgICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX1VwX0l0ZW07CisgICBSRVFfRE9XTl9JVEVNICAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9Eb3duX0l0ZW07CisgICBSRVFfU0NSX1VMSU5FICAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9TY3JvbGxVcF9MaW5lOworICAgUkVRX1NDUl9ETElORSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fU2Nyb2xsRG93bl9MaW5lOworICAgUkVRX1NDUl9EUEFHRSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fU2Nyb2xsRG93bl9QYWdlOworICAgUkVRX1NDUl9VUEFHRSAgICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fU2Nyb2xsVXBfUGFnZTsKKyAgIFJFUV9GSVJTVF9JVEVNICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX0ZpcnN0X0l0ZW07CisgICBSRVFfTEFTVF9JVEVNICAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9MYXN0X0l0ZW07CisgICBSRVFfTkVYVF9JVEVNICAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9OZXh0X0l0ZW07CisgICBSRVFfUFJFVl9JVEVNICAgICA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9QcmV2aW91c19JdGVtOworICAgUkVRX1RPR0dMRV9JVEVNICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fVG9nZ2xlX0l0ZW07CisgICBSRVFfQ0xFQVJfUEFUVEVSTiA6IE1lbnVfUmVxdWVzdF9Db2RlIHJlbmFtZXMgTV9DbGVhcl9QYXR0ZXJuOworICAgUkVRX0JBQ0tfUEFUVEVSTiAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fQmFja19QYXR0ZXJuOworICAgUkVRX05FWFRfTUFUQ0ggICAgOiBNZW51X1JlcXVlc3RfQ29kZSByZW5hbWVzIE1fTmV4dF9NYXRjaDsKKyAgIFJFUV9QUkVWX01BVENIICAgIDogTWVudV9SZXF1ZXN0X0NvZGUgcmVuYW1lcyBNX1ByZXZpb3VzX01hdGNoOworCisgICBwcm9jZWR1cmUgUmVxdWVzdF9OYW1lIChLZXkgIDogaW4gTWVudV9SZXF1ZXN0X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZyk7CisKKyAgIGZ1bmN0aW9uICBSZXF1ZXN0X05hbWUgKEtleSA6IE1lbnVfUmVxdWVzdF9Db2RlKSByZXR1cm4gU3RyaW5nOworICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KKworICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgRXhjZXB0aW9ucyAgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBNZW51X0V4Y2VwdGlvbiA6IGV4Y2VwdGlvbjsKKyAgIC0tCisgICAtLSAgTWVudSBvcHRpb25zCisgICAtLQorICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworaW5jbHVkZShgTWVudV9PcHRfUmVwJylkbmwKKworICAgcHJhZ21hIFdhcm5pbmdzIChPbik7CisKKyAgIGZ1bmN0aW9uIERlZmF1bHRfTWVudV9PcHRpb25zIHJldHVybiBNZW51X09wdGlvbl9TZXQ7CisgICAtLSAgSW5pdGlhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIGEgbWVudS4KKyAgIHByYWdtYSBJbmxpbmUgKERlZmF1bHRfTWVudV9PcHRpb25zKTsKKyAgIC0tCisgICAtLSAgSXRlbSBvcHRpb25zCisgICAtLQorICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworaW5jbHVkZShgSXRlbV9SZXAnKWRubAorCisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgZnVuY3Rpb24gRGVmYXVsdF9JdGVtX09wdGlvbnMgcmV0dXJuIEl0ZW1fT3B0aW9uX1NldDsKKyAgIC0tICBJbml0aWFsIGRlZmF1bHQgb3B0aW9ucyBmb3IgYW4gaXRlbS4KKyAgIHByYWdtYSBJbmxpbmUgKERlZmF1bHRfSXRlbV9PcHRpb25zKTsKKworICAgLS0KKyAgIC0tICBJdGVtIEFycmF5CisgICAtLQorICAgdHlwZSBJdGVtX0FycmF5IGlzIGFycmF5IChQb3NpdGl2ZSByYW5nZSA8Pikgb2YgYWxpYXNlZCBJdGVtOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEl0ZW1fQXJyYXkpOworCisgICB0eXBlIEl0ZW1fQXJyYXlfQWNjZXNzIGlzIGFjY2VzcyBJdGVtX0FycmF5OworCisgICBwcm9jZWR1cmUgRnJlZSAoSUEgICAgICAgICA6IGluIG91dCBJdGVtX0FycmF5X0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICBGcmVlX0l0ZW1zIDogQm9vbGVhbiA6PSBGYWxzZSk7CisgICAtLSAgUmVsZWFzZSB0aGUgbWVtb3J5IGZvciBhbiBhbGxvY2F0ZWQgaXRlbSBhcnJheQorICAgLS0gIElmIEZyZWVfSXRlbXMgaXMgVHJ1ZSwgY2FsbCBEZWxldGUoKSBmb3IgYWxsIHRoZSBpdGVtcyBpbgorICAgLS0gIHRoZSBhcnJheS4KKworICAgLS0gIE1BTlBBR0UoYG1pdGVtX25ldy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYG5ld19pdGVtKCknLGBDcmVhdGUnKQorICAgZnVuY3Rpb24gQ3JlYXRlIChOYW1lICAgICAgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gOiBTdHJpbmcgOj0gIiIpIHJldHVybiBJdGVtOworICAgLS0gIEFLQQorICAgLS0gIE5vdCBpbmxpbmVkLgorCisgICAtLSAgQU5DSE9SKGBuZXdfaXRlbSgpJyxgTmV3X0l0ZW0nKQorICAgZnVuY3Rpb24gTmV3X0l0ZW0gKE5hbWUgICAgICAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uIDogU3RyaW5nIDo9ICIiKSByZXR1cm4gSXRlbQorICAgICByZW5hbWVzIENyZWF0ZTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgZnJlZV9pdGVtKCknLGBEZWxldGUnKQorICAgcHJvY2VkdXJlIERlbGV0ZSAoSXRtIDogaW4gb3V0IEl0ZW0pOworICAgLS0gIEFLQQorICAgLS0gIFJlc2V0cyBJdG0gdG8gTnVsbF9JdGVtCisKKyAgIC0tICBNQU5QQUdFKGBtaXRlbV92YWx1ZS4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9pdGVtX3ZhbHVlKCknLGBTZXRfVmFsdWUnKQorICAgcHJvY2VkdXJlIFNldF9WYWx1ZSAoSXRtICAgOiBpbiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1ZhbHVlKTsKKworICAgLS0gIEFOQ0hPUihgaXRlbV92YWx1ZSgpJyxgVmFsdWUnKQorICAgZnVuY3Rpb24gVmFsdWUgKEl0bSA6IEl0ZW0pIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVmFsdWUpOworCisgICAtLSAgTUFOUEFHRShgbWl0ZW1fdmlzaWJsZS4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fdmlzaWJsZSgpJyxgVmlzaWJsZScpCisgICBmdW5jdGlvbiBWaXNpYmxlIChJdG0gOiBJdGVtKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFZpc2libGUpOworCisgICAtLSAgTUFOUEFHRShgbWl0ZW1fb3B0cy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9pdGVtX29wdHMoKScsYFNldF9PcHRpb25zJykKKyAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoSXRtICAgICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBJdGVtX09wdGlvbl9TZXQpOworICAgLS0gIEFLQQorICAgLS0gIEFuIG92ZXJsb2FkZWQgU2V0X09wdGlvbnMgaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlCisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fb3B0c19vbigpJyxgU3dpdGNoX09wdGlvbnMnKQorICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChJdG0gICAgIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEl0ZW1fT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGl0ZW1fb3B0c19vZmYoKScpCisgICAtLSAgQW4gb3ZlcmxvYWRlZCBTd2l0Y2hfT3B0aW9ucyBpcyBkZWZpbmVkIGxhdGVyLgorICAgLS0gIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZQorCisgICAtLSAgQU5DSE9SKGBpdGVtX29wdHMoKScsYEdldF9PcHRpb25zJykKKyAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoSXRtICAgICA6IGluICBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogb3V0IEl0ZW1fT3B0aW9uX1NldCk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fb3B0cygpJyxgR2V0X09wdGlvbnMnKQorICAgZnVuY3Rpb24gR2V0X09wdGlvbnMgKEl0bSA6IEl0ZW0gOj0gTnVsbF9JdGVtKSByZXR1cm4gSXRlbV9PcHRpb25fU2V0OworICAgLS0gIEFLQQorICAgLS0gIEFuIG92ZXJsb2FkZWQgR2V0X09wdGlvbnMgaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlCisKKyAgIC0tICBNQU5QQUdFKGBtaXRlbV9uYW1lLjN4JykKKworICAgLS0gIEFOQ0hPUihgaXRlbV9uYW1lKCknLGBOYW1lJykKKyAgIHByb2NlZHVyZSBOYW1lIChJdG0gIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZyk7CisgICAtLSAgQUtBCisgICBmdW5jdGlvbiAgTmFtZSAoSXRtIDogSXRlbSkgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBBS0EKKyAgIC0tICBJbXBsZW1lbnRlZCBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoTmFtZSk7CisKKyAgIC0tICBBTkNIT1IoYGl0ZW1fZGVzY3JpcHRpb24oKTsnLGBEZXNjcmlwdGlvbicpCisgICBwcm9jZWR1cmUgRGVzY3JpcHRpb24gKEl0bSAgICAgICAgIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgZnVuY3Rpb24gIERlc2NyaXB0aW9uIChJdG0gOiBJdGVtKSByZXR1cm4gU3RyaW5nOworICAgLS0gIEFLQQorICAgLS0gIEltcGxlbWVudGVkIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChEZXNjcmlwdGlvbik7CisKKyAgIC0tICBNQU5QQUdFKGBtaXRlbV9jdXJyZW50LjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X2N1cnJlbnRfaXRlbSgpJyxgU2V0X0N1cnJlbnQnKQorICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChNZW4gOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBpbiBJdGVtKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9DdXJyZW50KTsKKworICAgLS0gIEFOQ0hPUihgY3VycmVudF9pdGVtKCknLGBDdXJyZW50JykKKyAgIGZ1bmN0aW9uIEN1cnJlbnQgKE1lbiA6IE1lbnUpIHJldHVybiBJdGVtOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQ3VycmVudCk7CisKKyAgIC0tICBBTkNIT1IoYHNldF90b3Bfcm93KCknLGBTZXRfVG9wX1JvdycpCisgICBwcm9jZWR1cmUgU2V0X1RvcF9Sb3cgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lIDogaW4gTGluZV9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfVG9wX1Jvdyk7CisKKyAgIC0tICBBTkNIT1IoYHRvcF9yb3coKScsYFRvcF9Sb3cnKQorICAgZnVuY3Rpb24gVG9wX1JvdyAoTWVuIDogTWVudSkgcmV0dXJuIExpbmVfUG9zaXRpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChUb3BfUm93KTsKKworICAgLS0gIEFOQ0hPUihgaXRlbV9pbmRleCgpJyxgR2V0X0luZGV4JykKKyAgIGZ1bmN0aW9uIEdldF9JbmRleCAoSXRtIDogSXRlbSkgcmV0dXJuIFBvc2l0aXZlOworICAgLS0gIEFLQQorICAgLS0gIFBsZWFzZSBub3RlIHRoYXQgaW4gdGhpcyBiaW5kaW5nIHdlIHN0YXJ0IHRoZSBudW1iZXJpbmcgb2YgaXRlbXMKKyAgIC0tICB3aXRoIDEuIFNvIHRoaXMgaXMgbnVtYmVyIGlzIG9uZSBtb3JlIHRoYW4geW91IGdldCBmcm9tIHRoZSBsb3cKKyAgIC0tICBsZXZlbCBjYWxsLgorICAgcHJhZ21hIElubGluZSAoR2V0X0luZGV4KTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfcG9zdC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHBvc3RfbWVudSgpJyxgUG9zdCcpCisgICBwcm9jZWR1cmUgUG9zdCAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgUG9zdCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHVucG9zdF9tZW51KCknKQorICAgcHJhZ21hIElubGluZSAoUG9zdCk7CisKKyAgIC0tICBNQU5QQUdFKGBtZW51X29wdHMuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9vcHRzKCknLGBTZXRfT3B0aW9ucycpCisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKE1lbiAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gTWVudV9PcHRpb25fU2V0KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9PcHRpb25zKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9vcHRzX29uKCknLGBTd2l0Y2hfT3B0aW9ucycpCisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKE1lbiAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gTWVudV9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbWVudV9vcHRzX29mZigpJykKKyAgIHByYWdtYSBJbmxpbmUgKFN3aXRjaF9PcHRpb25zKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9vcHRzKCknLGBHZXRfT3B0aW9ucycpCisgICBwcm9jZWR1cmUgR2V0X09wdGlvbnMgKE1lbiAgICAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBNZW51X09wdGlvbl9TZXQpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBtZW51X29wdHMoKScsYEdldF9PcHRpb25zJykKKyAgIGZ1bmN0aW9uIEdldF9PcHRpb25zIChNZW4gOiBNZW51IDo9IE51bGxfTWVudSkgcmV0dXJuIE1lbnVfT3B0aW9uX1NldDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9PcHRpb25zKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfd2luLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfd2luKCknLGBTZXRfV2luZG93JykKKyAgIHByb2NlZHVyZSBTZXRfV2luZG93IChNZW4gOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgbWVudV93aW4oKScsYEdldF9XaW5kb3cnKQorICAgZnVuY3Rpb24gR2V0X1dpbmRvdyAoTWVuIDogTWVudSkgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9zdWIoKScsYFNldF9TdWJfV2luZG93JykKKyAgIHByb2NlZHVyZSBTZXRfU3ViX1dpbmRvdyAoTWVuIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9TdWJfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9zdWIoKScsYEdldF9TdWJfV2luZG93JykKKyAgIGZ1bmN0aW9uIEdldF9TdWJfV2luZG93IChNZW4gOiBNZW51KSByZXR1cm4gV2luZG93OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X1N1Yl9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBzY2FsZV9tZW51KCknLGBTY2FsZScpCisgICBwcm9jZWR1cmUgU2NhbGUgKE1lbiAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNjYWxlKTsKKworICAgLS0gIE1BTlBBR0UoYG1lbnVfY3Vyc29yLjN4JykKKworICAgLS0gIEFOQ0hPUihgcG9zX21lbnVfY3Vyc29yKCknLGBQb3NpdGlvbl9DdXJzb3InKQorICAgcHJvY2VkdXJlIFBvc2l0aW9uX0N1cnNvciAoTWVuIDogTWVudSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChQb3NpdGlvbl9DdXJzb3IpOworCisgICAtLSAgTUFOUEFHRShgbWVudV9tYXJrLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfbWFyaygpJyxgU2V0X01hcmsnKQorICAgcHJvY2VkdXJlIFNldF9NYXJrIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgTWFyayA6IGluIFN0cmluZyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfTWFyayk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfbWFyaygpJyxgTWFyaycpCisgICBwcm9jZWR1cmUgTWFyayAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgIE1hcmsgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgZnVuY3Rpb24gIE1hcmsgKE1lbiA6IE1lbnUpIHJldHVybiBTdHJpbmc7CisgICAtLSAgQUtBCisgICAtLSAgSW1wbGVtZW50ZWQgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKE1hcmspOworCisgICAtLSAgTUFOUEFHRShgbWVudV9hdHRyaWJ1dGVzLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfZm9yZSgpJyxgU2V0X0ZvcmVncm91bmQnKQorICAgcHJvY2VkdXJlIFNldF9Gb3JlZ3JvdW5kCisgICAgIChNZW4gICA6IGluIE1lbnU7CisgICAgICBGb3JlICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Gb3JlZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9mb3JlKCknLGBGb3JlZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChNZW4gICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgbWVudV9mb3JlKCknLGBGb3JlZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChNZW4gICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRm9yZWdyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X2JhY2soKScsYFNldF9CYWNrZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBTZXRfQmFja2dyb3VuZAorICAgICAoTWVuICAgOiBpbiBNZW51OworICAgICAgQmFjayAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfQmFja2dyb3VuZCk7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfYmFjaygpJyxgQmFja2dyb3VuZCcpCisgICBwcm9jZWR1cmUgQmFja2dyb3VuZCAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpOworICAgLS0gIEFLQQorICAgLS0gIEFOQ0hPUihgbWVudV9iYWNrKCknLGBCYWNrZ3JvdW5kJykKKworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKE1lbiAgIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChCYWNrZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfZ3JleSgpJyxgU2V0X0dyZXknKQorICAgcHJvY2VkdXJlIFNldF9HcmV5CisgICAgIChNZW4gICA6IGluIE1lbnU7CisgICAgICBHcmV5ICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9HcmV5KTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9ncmV5KCknLGBHcmV5JykKKyAgIHByb2NlZHVyZSBHcmV5IChNZW4gIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgR3JleSA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYG1lbnVfZ3JleSgpJyxgR3JleScpCisgICBwcm9jZWR1cmUgR3JleQorICAgICAoTWVuICAgOiBpbiAgTWVudTsKKyAgICAgIEdyZXkgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHcmV5KTsKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfcGFkKCknLGBTZXRfUGFkX0NoYXJhY3RlcicpCisgICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKE1lbiA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IGluIENoYXJhY3RlciA6PSBTcGFjZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfUGFkX0NoYXJhY3Rlcik7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfcGFkKCknLGBQYWRfQ2hhcmFjdGVyJykKKyAgIHByb2NlZHVyZSBQYWRfQ2hhcmFjdGVyIChNZW4gOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBvdXQgQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFBhZF9DaGFyYWN0ZXIpOworCisgICAtLSAgTUFOUEFHRShgbWVudV9zcGFjaW5nLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfc3BhY2luZygpJyxgU2V0X1NwYWNpbmcnKQorICAgcHJvY2VkdXJlIFNldF9TcGFjaW5nIChNZW4gICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyIDogaW4gQ29sdW1uX1Bvc2l0aW9uIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdyAgIDogaW4gTGluZV9Qb3NpdGlvbiAgIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uIDo9IDApOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1NwYWNpbmcpOworCisgICAtLSAgQU5DSE9SKGBtZW51X3NwYWNpbmcoKScsYFNwYWNpbmcnKQorICAgcHJvY2VkdXJlIFNwYWNpbmcgKE1lbiAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICBEZXNjciA6IG91dCBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgUm93ICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IG91dCBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU3BhY2luZyk7CisKKyAgIC0tICBNQU5QQUdFKGBtZW51X3BhdHRlcm4uM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9wYXR0ZXJuKCknLGBTZXRfUGF0dGVybicpCisgICBmdW5jdGlvbiBTZXRfUGF0dGVybiAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICAtLSAgUmV0dXJuIFRSVUUgaWYgdGhlIHBhdHRlcm4gbWF0Y2hlcywgRkFMU0Ugb3RoZXJ3aXNlCisgICBwcmFnbWEgSW5saW5lIChTZXRfUGF0dGVybik7CisKKyAgIC0tICBBTkNIT1IoYG1lbnVfcGF0dGVybigpJyxgUGF0dGVybicpCisgICBwcm9jZWR1cmUgUGF0dGVybiAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgIFRleHQgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFBhdHRlcm4pOworCisgICAtLSAgTUFOUEFHRShgbWVudV9mb3JtYXQuM3gnKQorCisgICAtLSAgQU5DSE9SKGBzZXRfbWVudV9mb3JtYXQoKScsYFNldF9Gb3JtYXQnKQorICAgcHJvY2VkdXJlIFNldF9Gb3JtYXQgKE1lbiAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBpbiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBpbiBDb2x1bW5fQ291bnQpOworICAgLS0gIE5vdCBpbXBsZW1lbnRlZDogMCBhcmd1bWVudCBmb3IgTGluZXMgb3IgQ29sdW1uczsKKyAgIC0tICBpbnN0ZWFkIHVzZSBGb3JtYXQgdG8gZ2V0IHRoZSBjdXJyZW50IHNpemVzCisgICAtLSAgICAgIFRoZSAgZGVmYXVsdCAgZm9ybWF0ICBpcyAgMTYgIHJvd3MsICAxICBjb2x1bW4uICAgIENhbGxpbmcKKyAgIC0tICAgICAgc2V0X21lbnVfZm9ybWF0ICB3aXRoIGEgbnVsbCBtZW51IHBvaW50ZXIgd2lsbCBjaGFuZ2UgdGhpcworICAgLS0gICAgICBkZWZhdWx0LiAgQSB6ZXJvIHJvdyBvciBjb2x1bW4gYXJndW1lbnQgdG8gc2V0X21lbnVfZm9ybWF0CisgICAtLSAgICAgIGlzICBpbnRlcnByZXRlZCAgYXMgIGEgIHJlcXVlc3QgIG5vdCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAgIC0tICAgICAgdmFsdWUuCisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfRm9ybWF0KTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9mb3JtYXQoKScsYEZvcm1hdCcpCisgICBwcm9jZWR1cmUgRm9ybWF0IChNZW4gICAgIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICBMaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogb3V0IENvbHVtbl9Db3VudCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChGb3JtYXQpOworCisgICAtLSAgTUFOUEFHRShgbWVudV9ob29rLjN4JykKKworICAgdHlwZSBNZW51X0hvb2tfRnVuY3Rpb24gaXMgYWNjZXNzIHByb2NlZHVyZSAoTWVuIDogaW4gTWVudSk7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgTWVudV9Ib29rX0Z1bmN0aW9uKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X2l0ZW1faW5pdCgpJyxgU2V0X0l0ZW1fSW5pdF9Ib29rJykKKyAgIHByb2NlZHVyZSBTZXRfSXRlbV9Jbml0X0hvb2sgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIE1lbnVfSG9va19GdW5jdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfSXRlbV9Jbml0X0hvb2spOworCisgICAtLSAgQU5DSE9SKGBzZXRfaXRlbV90ZXJtKCknLGBTZXRfSXRlbV9UZXJtX0hvb2snKQorICAgcHJvY2VkdXJlIFNldF9JdGVtX1Rlcm1fSG9vayAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gTWVudV9Ib29rX0Z1bmN0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9JdGVtX1Rlcm1fSG9vayk7CisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X2luaXQoKScsYFNldF9NZW51X0luaXRfSG9vaycpCisgICBwcm9jZWR1cmUgU2V0X01lbnVfSW5pdF9Ib29rIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X01lbnVfSW5pdF9Ib29rKTsKKworICAgLS0gIEFOQ0hPUihgc2V0X21lbnVfdGVybSgpJyxgU2V0X01lbnVfVGVybV9Ib29rJykKKyAgIHByb2NlZHVyZSBTZXRfTWVudV9UZXJtX0hvb2sgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIE1lbnVfSG9va19GdW5jdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfTWVudV9UZXJtX0hvb2spOworCisgICAtLSAgQU5DSE9SKGBpdGVtX2luaXQoKScsYEdldF9JdGVtX0luaXRfSG9vaycpCisgICBmdW5jdGlvbiBHZXRfSXRlbV9Jbml0X0hvb2sgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfSXRlbV9Jbml0X0hvb2spOworCisgICAtLSAgQU5DSE9SKGBpdGVtX3Rlcm0oKScsYEdldF9JdGVtX1Rlcm1fSG9vaycpCisgICBmdW5jdGlvbiBHZXRfSXRlbV9UZXJtX0hvb2sgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfSXRlbV9UZXJtX0hvb2spOworCisgICAtLSAgQU5DSE9SKGBtZW51X2luaXQoKScsYEdldF9NZW51X0luaXRfSG9vaycpCisgICBmdW5jdGlvbiBHZXRfTWVudV9Jbml0X0hvb2sgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfTWVudV9Jbml0X0hvb2spOworCisgICAtLSAgQU5DSE9SKGBtZW51X3Rlcm0oKScsYEdldF9NZW51X1Rlcm1fSG9vaycpCisgICBmdW5jdGlvbiBHZXRfTWVudV9UZXJtX0hvb2sgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb247CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfTWVudV9UZXJtX0hvb2spOworCisgICAtLSAgTUFOUEFHRShgbWVudV9pdGVtcy4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9tZW51X2l0ZW1zKCknLGBSZWRlZmluZScpCisgICBwcm9jZWR1cmUgUmVkZWZpbmUgKE1lbiAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgSXRlbXMgOiBpbiBJdGVtX0FycmF5X0FjY2Vzcyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChSZWRlZmluZSk7CisKKyAgIHByb2NlZHVyZSBTZXRfSXRlbXMgKE1lbiAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1zIDogaW4gSXRlbV9BcnJheV9BY2Nlc3MpIHJlbmFtZXMgUmVkZWZpbmU7CisgICAtLSAgcHJhZ21hIElubGluZSAoU2V0X0l0ZW1zKTsKKworICAgLS0gIEFOQ0hPUihgbWVudV9pdGVtcygpJyxgSXRlbXMnKQorICAgZnVuY3Rpb24gSXRlbXMgKE1lbiAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICBJbmRleCA6IFBvc2l0aXZlKSByZXR1cm4gSXRlbTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEl0ZW1zKTsKKworICAgLS0gIEFOQ0hPUihgaXRlbV9jb3VudCgpJyxgSXRlbV9Db3VudCcpCisgICBmdW5jdGlvbiBJdGVtX0NvdW50IChNZW4gOiBNZW51KSByZXR1cm4gTmF0dXJhbDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEl0ZW1fQ291bnQpOworCisgICAtLSAgTUFOUEFHRShgbWVudV9uZXcuM3gnKQorCisgICAtLSAgQU5DSE9SKGBuZXdfbWVudSgpJyxgQ3JlYXRlJykKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoSXRlbXMgOiBJdGVtX0FycmF5X0FjY2VzcykgcmV0dXJuIE1lbnU7CisgICAtLSAgQUtBCisgICAtLSAgTm90IGlubGluZWQKKworICAgZnVuY3Rpb24gTmV3X01lbnUgKEl0ZW1zIDogSXRlbV9BcnJheV9BY2Nlc3MpIHJldHVybiBNZW51IHJlbmFtZXMgQ3JlYXRlOworCisgICAtLSAgQU5DSE9SKGBmcmVlX21lbnUoKScsYERlbGV0ZScpCisgICBwcm9jZWR1cmUgRGVsZXRlIChNZW4gOiBpbiBvdXQgTWVudSk7CisgICAtLSAgQUtBCisgICAtLSAgUmVzZXQgTWVuIHRvIE51bGxfTWVudQorICAgLS0gIE5vdCBpbmxpbmVkCisKKyAgIC0tICBNQU5QQUdFKGBtZW51X2RyaXZlci4zeCcpCisKKyAgIHR5cGUgRHJpdmVyX1Jlc3VsdCBpcyAoTWVudV9PaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdF9EZW5pZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVua25vd25fUmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9fTWF0Y2gpOworCisgICAtLSAgQU5DSE9SKGBtZW51X2RyaXZlcigpJyxgRHJpdmVyJykKKyAgIGZ1bmN0aW9uIERyaXZlciAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgS2V5IDogS2V5X0NvZGUpIHJldHVybiBEcml2ZXJfUmVzdWx0OworICAgLS0gIEFLQQorICAgLS0gIERyaXZlciBpcyBub3QgaW5saW5lZAorCisgICAtLSAgQU5DSE9SKGBtZW51X3JlcXVlc3RuYW1lLjN4JykKKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IG1lbnVfcmVxdWVzdF9uYW1lLCBtZW51X3JlcXVlc3RfYnlfbmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJpdmF0ZQorICAgdHlwZSBJdGVtICAgaXMgbmV3IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgIHR5cGUgTWVudSAgIGlzIG5ldyBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisKKyAgIE51bGxfSXRlbSA6IGNvbnN0YW50IEl0ZW0gOj0gMDsKKyAgIE51bGxfTWVudSA6IGNvbnN0YW50IE1lbnUgOj0gMDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZHMubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU5ZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkcy5tNApAQCAtMCwwICsxLDE4MiBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pZG5sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2UgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMjcgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZShgTW91c2VfQmFzZV9EZWZzJykKK3dpdGggU3lzdGVtOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2UgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2UpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19tb3VzZS4zeCcpCisgICAtLSAgUGxlYXNlIG5vdGUsIHRoYXQgaW4gbmN1cnNlcy0xLjkuOWUgZG9jdW1lbnRhdGlvbiBtb3VzZSBzdXBwb3J0CisgICAtLSAgaXMgc3RpbGwgbWFya2VkIGFzIGV4cGVyaW1lbnRhbC4gU28gYWxzbyB0aGlzIGJpbmRpbmcgd2lsbCBjaGFuZ2UKKyAgIC0tICBpZiB0aGUgbmN1cnNlcyBtZXRob2RzIGNoYW5nZS4KKyAgIC0tCisgICAtLSAgbW91c2VfdHJhZm8sIHdtb3VzZV90cmFmbyBhcmUgaW1wbGVtZW50ZWQgYXMgVHJhbnNmb3JtX0Nvb3JkaW5hdGVzCisgICAtLSAgaW4gdGhlIHBhcmVudCBwYWNrYWdlLgorICAgLS0KKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6CisgICAtLSAgUkVQT1JUX01PVVNFX1BPU0lUSU9OIChpLmUuIGFzIGEgcGFyYW1ldGVyIHRvIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQKKyAgIC0tICBvciBTdGFydF9Nb3VzZSkKKyAgIHR5cGUgRXZlbnRfTWFzayBpcyBwcml2YXRlOworICAgTm9fRXZlbnRzICA6IGNvbnN0YW50IEV2ZW50X01hc2s7CisgICBBbGxfRXZlbnRzIDogY29uc3RhbnQgRXZlbnRfTWFzazsKKworICAgdHlwZSBNb3VzZV9CdXR0b24gaXMgKExlZnQsICAgICAtLSBha2E6IEJ1dHRvbiAxCisgICAgICAgICAgICAgICAgICAgICAgICAgTWlkZGxlLCAgIC0tIGFrYTogQnV0dG9uIDIKKyAgICAgICAgICAgICAgICAgICAgICAgICBSaWdodCwgICAgLS0gYWthOiBCdXR0b24gMworICAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbjQsICAtLSBha2E6IEJ1dHRvbiA0CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCwgIC0tIENvbnRyb2wgS2V5CisgICAgICAgICAgICAgICAgICAgICAgICAgU2hpZnQsICAgIC0tIFNoaWZ0IEtleQorICAgICAgICAgICAgICAgICAgICAgICAgIEFsdCk7ICAgICAtLSBBTFQgS2V5CisKKyAgIHN1YnR5cGUgUmVhbF9CdXR0b25zICBpcyBNb3VzZV9CdXR0b24gcmFuZ2UgTGVmdCAuLiBCdXR0b240OworICAgc3VidHlwZSBNb2RpZmllcl9LZXlzIGlzIE1vdXNlX0J1dHRvbiByYW5nZSBDb250cm9sIC4uIEFsdDsKKworICAgdHlwZSBCdXR0b25fU3RhdGUgaXMgKFJlbGVhc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2tlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVfQ2xpY2tlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcmlwbGVfQ2xpY2tlZCk7CisKKyAgIHR5cGUgQnV0dG9uX1N0YXRlcyBpcyBhcnJheSAoQnV0dG9uX1N0YXRlKSBvZiBCb29sZWFuOworICAgcHJhZ21hIFBhY2sgKEJ1dHRvbl9TdGF0ZXMpOworCisgICBBbGxfQ2xpY2tzIDogY29uc3RhbnQgQnV0dG9uX1N0YXRlcyA6PSAoQ2xpY2tlZCAuLiBUcmlwbGVfQ2xpY2tlZCA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSk7CisgICBBbGxfU3RhdGVzIDogY29uc3RhbnQgQnV0dG9uX1N0YXRlcyA6PSAob3RoZXJzID0+IFRydWUpOworCisgICB0eXBlIE1vdXNlX0V2ZW50IGlzIHByaXZhdGU7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX21vdXNlLjN4JykKKworICAgZnVuY3Rpb24gSGFzX01vdXNlIHJldHVybiBCb29sZWFuOworICAgLS0gIFJldHVybiB0cnVlIGlmIGEgbW91c2UgZGV2aWNlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorCisgICBwcm9jZWR1cmUgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudAorICAgICAoQnV0dG9uIDogaW4gTW91c2VfQnV0dG9uOworICAgICAgU3RhdGUgIDogaW4gQnV0dG9uX1N0YXRlOworICAgICAgTWFzayAgIDogaW4gb3V0IEV2ZW50X01hc2spOworICAgLS0gIFN0b3JlcyB0aGUgZXZlbnQgZGVzY3JpYmVkIGJ5IHRoZSBidXR0b24gYW5kIHRoZSBzdGF0ZSBpbiB0aGUgbWFzay4KKyAgIC0tICBCZWZvcmUgeW91IGNhbGwgdGhpcyB0aGUgZmlyc3QgdGltZSwgeW91IHNob3VsZCBpbml0IHRoZSBtYXNrCisgICAtLSAgd2l0aCB0aGUgRW1wdHlfTWFzayBjb25zdGFudAorICAgcHJhZ21hIElubGluZSAoUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudCk7CisKKyAgIHByb2NlZHVyZSBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50cworICAgICAoQnV0dG9uIDogaW4gTW91c2VfQnV0dG9uOworICAgICAgU3RhdGUgIDogaW4gQnV0dG9uX1N0YXRlczsKKyAgICAgIE1hc2sgICA6IGluIG91dCBFdmVudF9NYXNrKTsKKyAgIC0tICBSZWdpc3RlciBhbGwgZXZlbnRzIGRlc2NyaWJlZCBieSB0aGUgQnV0dG9uIGFuZCB0aGUgU3RhdGUgYml0bWFwLgorICAgLS0gIEJlZm9yZSB5b3UgY2FsbCB0aGlzIHRoZSBmaXJzdCB0aW1lLCB5b3Ugc2hvdWxkIGluaXQgdGhlIG1hc2sKKyAgIC0tICB3aXRoIHRoZSBFbXB0eV9NYXNrIGNvbnN0YW50CisKKyAgIC0tICBBTkNIT1IoYG1vdXNlbWFzaygpJyxgU3RhcnRfTW91c2UnKQorICAgLS0gIFRoZXJlIGlzIG9uZSBkaWZmZXJlbmNlIHRvIG1vdXNtYXNrKCk6IHdlIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlCisgICAtLSAgb2xkIG1hc2ssIHRoYXQgbWVhbnMgdGhlIGV2ZW50IG1hc2sgdmFsdWUgYmVmb3JlIHRoaXMgY2FsbC4KKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IFRoZSBsaWJyYXJ5IHZlcnNpb24KKyAgIC0tICByZXR1cm5zIGEgTW91c2VfTWFzayB0aGF0IHRlbGxzIHdoaWNoIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCisgICBmdW5jdGlvbiBTdGFydF9Nb3VzZSAoTWFzayA6IEV2ZW50X01hc2sgOj0gQWxsX0V2ZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXZlbnRfTWFzazsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFN0YXJ0X01vdXNlKTsKKworICAgcHJvY2VkdXJlIEVuZF9Nb3VzZSAoTWFzayA6IGluIEV2ZW50X01hc2sgOj0gTm9fRXZlbnRzKTsKKyAgIC0tICBUZXJtaW5hdGVzIHRoZSBtb3VzZSwgcmVzdG9yZXMgdGhlIHNwZWNpZmllZCBldmVudCBtYXNrCisgICBwcmFnbWEgSW5saW5lIChFbmRfTW91c2UpOworCisgICAtLSAgQU5DSE9SKGBnZXRtb3VzZSgpJyxgR2V0X01vdXNlJykKKyAgIGZ1bmN0aW9uIEdldF9Nb3VzZSByZXR1cm4gTW91c2VfRXZlbnQ7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfTW91c2UpOworCisgICBwcm9jZWR1cmUgR2V0X0V2ZW50IChFdmVudCAgOiBpbiAgTW91c2VfRXZlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBZICAgICAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFggICAgICA6IG91dCBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gOiBvdXQgTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgIDogb3V0IEJ1dHRvbl9TdGF0ZSk7CisgICAtLSAgISEhIFdhcm5pbmc6IFggYW5kIFkgYXJlIHNjcmVlbiBjb29yZGluYXRlcy4gRHVlIHRvIHJpcHBlZCBvZiBsaW5lcyB0aGV5CisgICAtLSAgbWF5IG5vdCBiZSBpZGVudGljYWwgdG8gd2luZG93IGNvb3JkaW5hdGVzLgorICAgLS0gIE5vdCBJbXBsZW1lbnRlZDogR2V0X0V2ZW50IG9ubHkgcmVwb3J0cyBvbmUgZXZlbnQsIHRoZSBDIGxpYnJhcnkKKyAgIC0tICB2ZXJzaW9uIHN1cHBvcnRzIG11bHRpcGxlIGV2ZW50cywgZS5nLiB7Y2xpY2stMSwgY2xpY2stM30KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9FdmVudCk7CisKKyAgIC0tICBBTkNIT1IoYHVuZ2V0bW91c2UoKScsYFVuZ2V0X01vdXNlJykKKyAgIHByb2NlZHVyZSBVbmdldF9Nb3VzZSAoRXZlbnQgOiBpbiBNb3VzZV9FdmVudCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChVbmdldF9Nb3VzZSk7CisKKyAgIC0tICBBTkNIT1IoYHdlbmNsb3NlKCknLGBFbmNsb3NlZF9Jbl9XaW5kb3cnKQorICAgZnVuY3Rpb24gRW5jbG9zZWRfSW5fV2luZG93IChXaW4gICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudCAgOiBNb3VzZV9FdmVudCkgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICAtLSAgQnV0IDogdXNlIGV2ZW50IGluc3RlYWQgb2Ygc2NyZWVuIGNvb3JkaW5hdGVzLgorICAgcHJhZ21hIElubGluZSAoRW5jbG9zZWRfSW5fV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgbW91c2VpbnRlcnZhbCgpJyxgTW91c2VfSW50ZXJ2YWwnKQorICAgZnVuY3Rpb24gTW91c2VfSW50ZXJ2YWwgKE1zZWMgOiBOYXR1cmFsIDo9IDIwMCkgcmV0dXJuIE5hdHVyYWw7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChNb3VzZV9JbnRlcnZhbCk7CisKK3ByaXZhdGUKKyAgIHR5cGUgRXZlbnRfTWFzayBpcyBuZXcgSW50ZXJmYWNlcy5DLnVuc2lnbmVkX2xvbmc7CisKKyAgIHR5cGUgTW91c2VfRXZlbnQgaXMKKyAgICAgIHJlY29yZAorICAgICAgICAgSWQgICAgICA6IEludGVnZXIgcmFuZ2UgSW50ZWdlciAoSW50ZXJmYWNlcy5DLnNob3J0J0ZpcnN0KSAuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciAoSW50ZXJmYWNlcy5DLnNob3J0J0xhc3QpOworICAgICAgICAgWCwgWSwgWiA6IEludGVnZXIgcmFuZ2UgSW50ZWdlciAoSW50ZXJmYWNlcy5DLmludCdGaXJzdCkgLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgKEludGVyZmFjZXMuQy5pbnQnTGFzdCk7CisgICAgICAgICBCc3RhdGUgIDogRXZlbnRfTWFzazsKKyAgICAgIGVuZCByZWNvcmQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgTW91c2VfRXZlbnQpOworCitpbmNsdWRlKGBNb3VzZV9FdmVudF9SZXAnKQorICAgR2VuZXJhdGlvbl9CaXRfT3JkZXIgOiBjb25zdGFudCBTeXN0ZW0uQml0X09yZGVyIDo9IFN5c3RlbS5NNF9CSVRfT1JERVI7CisgICAtLSAgVGhpcyBjb25zdGFudCBtYXkgYmUgZGlmZmVyZW50IG9uIHlvdXIgc3lzdGVtLgorCitpbmNsdWRlKGBNb3VzZV9FdmVudHMnKQorICAgTm9fRXZlbnRzICA6IGNvbnN0YW50IEV2ZW50X01hc2sgOj0gMDsKKyAgIEFsbF9FdmVudHMgOiBjb25zdGFudCBFdmVudF9NYXNrIDo9IEFMTF9NT1VTRV9FVkVOVFM7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZHMubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmRlZjliCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZHMubTQKQEAgLTAsMCArMSw3MCBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTylkbmwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YSAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpYworICAgdHlwZSBVc2VyIGlzIGxpbWl0ZWQgcHJpdmF0ZTsKKyAgIHR5cGUgVXNlcl9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBVc2VyOworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGEgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YSk7CisKKyAgIC0tICBNQU5QQUdFKGBwYW5lbC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHNldF9wYW5lbF91c2VycHRyJyxgU2V0X1VzZXJfRGF0YScpCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoUGFuICA6IGluIFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2Vzcyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfVXNlcl9EYXRhKTsKKworICAgLS0gIEFOQ0hPUihgcGFuZWxfdXNlcnB0cicsYEdldF9Vc2VyX0RhdGEnKQorICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiAgUGFuZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2Vzcyk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYHBhbmVsX3VzZXJwdHInLGBHZXRfVXNlcl9EYXRhJykKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiAgUGFuZWwpIHJldHVybiBVc2VyX0FjY2VzczsKKyAgIC0tICBBS0EKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHMubTQgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YjcyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzLm00CkBAIC0wLDAgKzEsMTQ3IEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pZG5sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTkgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBTeXN0ZW07CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzKTsKK2luY2x1ZGUoYFBhbmVsX0xpbmtlcl9PcHRpb25zJylkbmwKK2luY2x1ZGUoYExpbmtlcl9PcHRpb25zJykKKyAgIHR5cGUgUGFuZWwgaXMgcHJpdmF0ZTsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgSW50ZXJmYWNlIGNvbnN0YW50cyAgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTnVsbF9QYW5lbCA6IGNvbnN0YW50IFBhbmVsOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgRXhjZXB0aW9ucyAgIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIFBhbmVsX0V4Y2VwdGlvbiA6IGV4Y2VwdGlvbjsKKworICAgLS0gIE1BTlBBR0UoYHBhbmVsLjN4JykKKworICAgLS0gIEFOQ0hPUihgbmV3X3BhbmVsKCknLGBDcmVhdGUnKQorICAgZnVuY3Rpb24gQ3JlYXRlIChXaW4gOiBXaW5kb3cpIHJldHVybiBQYW5lbDsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENyZWF0ZSk7CisKKyAgIC0tICBBTkNIT1IoYG5ld19wYW5lbCgpJyxgTmV3X1BhbmVsJykKKyAgIGZ1bmN0aW9uIE5ld19QYW5lbCAoV2luIDogV2luZG93KSByZXR1cm4gUGFuZWwgcmVuYW1lcyBDcmVhdGU7CisgICAtLSAgQUtBCisgICAtLSAgcHJhZ21hIElubGluZSAoTmV3X1BhbmVsKTsKKworICAgLS0gIEFOQ0hPUihgYm90dG9tX3BhbmVsKCknLGBCb3R0b20nKQorICAgcHJvY2VkdXJlIEJvdHRvbSAoUGFuIDogaW4gUGFuZWwpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQm90dG9tKTsKKworICAgLS0gIEFOQ0hPUihgdG9wX3BhbmVsKCknLGBUb3AnKQorICAgcHJvY2VkdXJlIFRvcCAoUGFuIDogaW4gUGFuZWwpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVG9wKTsKKworICAgLS0gIEFOQ0hPUihgc2hvd19wYW5lbCgpJyxgU2hvdycpCisgICBwcm9jZWR1cmUgU2hvdyAoUGFuIDogaW4gUGFuZWwpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2hvdyk7CisKKyAgIC0tICBBTkNIT1IoYHVwZGF0ZV9wYW5lbHMoKScsYFVwZGF0ZV9QYW5lbHMnKQorICAgcHJvY2VkdXJlIFVwZGF0ZV9QYW5lbHM7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBVcGRhdGVfUGFuZWxzLCAidXBkYXRlX3BhbmVscyIpOworCisgICAtLSAgQU5DSE9SKGBoaWRlX3BhbmVsKCknLGBIaWRlJykKKyAgIHByb2NlZHVyZSBIaWRlIChQYW4gOiBpbiBQYW5lbCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChIaWRlKTsKKworICAgLS0gIEFOQ0hPUihgcGFuZWxfd2luZG93KCknLGBHZXRfV2luZG93JykKKyAgIGZ1bmN0aW9uIEdldF9XaW5kb3cgKFBhbiA6IFBhbmVsKSByZXR1cm4gV2luZG93OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYHBhbmVsX3dpbmRvdygpJyxgUGFuZWxfV2luZG93JykKKyAgIGZ1bmN0aW9uIFBhbmVsX1dpbmRvdyAoUGFuIDogUGFuZWwpIHJldHVybiBXaW5kb3cgcmVuYW1lcyBHZXRfV2luZG93OworICAgLS0gIHByYWdtYSBJbmxpbmUgKFBhbmVsX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYHJlcGxhY2VfcGFuZWwoKScsYFJlcGxhY2UnKQorICAgcHJvY2VkdXJlIFJlcGxhY2UgKFBhbiA6IGluIFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChSZXBsYWNlKTsKKworICAgLS0gIEFOQ0hPUihgbW92ZV9wYW5lbCgpJyxgTW92ZScpCisgICBwcm9jZWR1cmUgTW92ZSAoUGFuICAgIDogaW4gUGFuZWw7CisgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoTW92ZSk7CisKKyAgIC0tICBBTkNIT1IoYHBhbmVsX2hpZGRlbigpJyxgSXNfSGlkZGVuJykKKyAgIGZ1bmN0aW9uIElzX0hpZGRlbiAoUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSXNfSGlkZGVuKTsKKworICAgLS0gIEFOQ0hPUihgcGFuZWxfYWJvdmUoKScsYEFib3ZlJykKKyAgIGZ1bmN0aW9uIEFib3ZlIChQYW4gOiBQYW5lbCkgcmV0dXJuIFBhbmVsOworICAgLS0gIEFLQQorICAgcHJhZ21hIEltcG9ydCAoQywgQWJvdmUsICJwYW5lbF9hYm92ZSIpOworCisgICAtLSAgQU5DSE9SKGBwYW5lbF9iZWxvdygpJyxgQmVsb3cnKQorICAgZnVuY3Rpb24gQmVsb3cgKFBhbiA6IFBhbmVsKSByZXR1cm4gUGFuZWw7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBCZWxvdywgInBhbmVsX2JlbG93Iik7CisKKyAgIC0tICBBTkNIT1IoYGRlbF9wYW5lbCgpJyxgRGVsZXRlJykKKyAgIHByb2NlZHVyZSBEZWxldGUgKFBhbiA6IGluIG91dCBQYW5lbCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChEZWxldGUpOworCitwcml2YXRlCisgICAgICB0eXBlIFBhbmVsIGlzIG5ldyBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisgICAgICBOdWxsX1BhbmVsIDogY29uc3RhbnQgUGFuZWwgOj0gMDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzLm00IGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NjAwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZHMubTQKQEAgLTAsMCArMSw3OCBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlKTsKKworICAgcHJhZ21hIFdhcm5pbmdzIChPZmYpOworaW5jbHVkZShgVHJhY2VfRGVmcycpCisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworCisgICBUcmFjZV9EaXNhYmxlICA6IGNvbnN0YW50IFRyYWNlX0F0dHJpYnV0ZV9TZXQgOj0gKG90aGVycyA9PiBGYWxzZSk7CisKKyAgIFRyYWNlX09yZGluYXJ5IDogY29uc3RhbnQgVHJhY2VfQXR0cmlidXRlX1NldCA6PQorICAgICAoVGltZXMgICAgICAgICAgICA9PiBUcnVlLAorICAgICAgVHB1dHMgICAgICAgICAgICA9PiBUcnVlLAorICAgICAgVXBkYXRlICAgICAgICAgICA9PiBUcnVlLAorICAgICAgQ3Vyc29yX01vdmUgICAgICA9PiBUcnVlLAorICAgICAgQ2hhcmFjdGVyX091dHB1dCA9PiBUcnVlLAorICAgICAgb3RoZXJzICAgICAgICAgICA9PiBGYWxzZSk7CisgICBUcmFjZV9NYXhpbXVtIDogY29uc3RhbnQgVHJhY2VfQXR0cmlidXRlX1NldCA6PSAob3RoZXJzID0+IFRydWUpOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgLS0gIE1BTlBBR0UoYGN1cnNfdHJhY2UuM3gnKQorCisgICAtLSAgQU5DSE9SKGB0cmFjZSgpJyxgVHJhY2Vfb24nKQorICAgcHJvY2VkdXJlIFRyYWNlX09uICh4IDogVHJhY2VfQXR0cmlidXRlX1NldCk7CisgICAtLSAgVGhlIGRlYnVnZ2luZyBsaWJyYXJ5IGhhcyB0cmFjZS4KKworICAgLS0gIEFOQ0hPUihgX3RyYWNlZigpJyxgVHJhY2VfUHV0JykKKyAgIHByb2NlZHVyZSBUcmFjZV9QdXQgKHN0ciA6IFN0cmluZyk7CisgICAtLSAgQUtBCisKKyAgIEN1cnJlbnRfVHJhY2VfU2V0dGluZyA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CisgICBwcmFnbWEgSW1wb3J0IChDLCBDdXJyZW50X1RyYWNlX1NldHRpbmcsICJfbmNfdHJhY2luZyIpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYi5tNCBiL25jdXJzZXMtNS43L0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWRkYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiLm00CkBAIC0wLDAgKzEsMjUwMiBAQAorLS0gIC0qLSBhZGEgLSotCitkZWZpbmUoYEhUTUxOQU1FJyxgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bScpZG5sCitpbmNsdWRlKE00TUFDUk8pLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuNSAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6MzIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFN5c3RlbTsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKK3dpdGggSW50ZXJmYWNlcy5DOyAgICAgICAgICAgICAgICAgIHVzZSBJbnRlcmZhY2VzLkM7Cit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOyAgICAgICAgICB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Cit3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOyAgICAgICB1c2UgQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7Cit3aXRoIEFkYS5TdHJpbmdzLkZpeGVkOworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcyBpcworCisgICB1c2UgQXV4OworICAgdXNlIHR5cGUgU3lzdGVtLkJpdF9PcmRlcjsKKworICAgcGFja2FnZSBBU0YgcmVuYW1lcyBBZGEuU3RyaW5ncy5GaXhlZDsKKworICAgdHlwZSBjaHR5cGVfYXJyYXkgaXMgYXJyYXkgKHNpemVfdCByYW5nZSA8PikKKyAgICAgIG9mIGFsaWFzZWQgQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgY2h0eXBlX2FycmF5KTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBLZXlfTmFtZSAoS2V5IDogaW4gUmVhbF9LZXlfQ29kZSkgcmV0dXJuIFN0cmluZworICAgaXMKKyAgICAgIGZ1bmN0aW9uIEtleW5hbWUgKEsgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEtleW5hbWUsICJrZXluYW1lIik7CisKKyAgICAgIENoIDogQ2hhcmFjdGVyOworICAgYmVnaW4KKyAgICAgIGlmIEtleSA8PSBDaGFyYWN0ZXInUG9zIChDaGFyYWN0ZXInTGFzdCkgdGhlbgorICAgICAgICAgQ2ggOj0gQ2hhcmFjdGVyJ1ZhbCAoS2V5KTsKKyAgICAgICAgIGlmIElzX0NvbnRyb2wgKENoKSB0aGVuCisgICAgICAgICAgICByZXR1cm4gVW5fQ29udHJvbCAoQXR0cmlidXRlZF9DaGFyYWN0ZXInKENoICAgID0+IENoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8pKTsKKyAgICAgICAgIGVsc2lmIElzX0dyYXBoaWMgKENoKSB0aGVuCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBTIDogU3RyaW5nICgxIC4uIDEpOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIFMgKDEpIDo9IENoOworICAgICAgICAgICAgICAgcmV0dXJuIFM7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKEtleW5hbWUgKENfSW50IChLZXkpKSk7CisgICAgICBlbmQgaWY7CisgICBlbmQgS2V5X05hbWU7CisKKyAgIHByb2NlZHVyZSBLZXlfTmFtZSAoS2V5ICA6IGluICBSZWFsX0tleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICBOYW1lIDogb3V0IFN0cmluZykKKyAgIGlzCisgICBiZWdpbgorICAgICAgQVNGLk1vdmUgKEtleV9OYW1lIChLZXkpLCBOYW1lKTsKKyAgIGVuZCBLZXlfTmFtZTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgSW5pdF9TY3JlZW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBJbml0c2NyIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJbml0c2NyLCAiaW5pdHNjciIpOworCisgICAgICBXIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIFcgOj0gSW5pdHNjcjsKKyAgICAgIGlmIFcgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEluaXRfU2NyZWVuOworCisgICBwcm9jZWR1cmUgRW5kX1dpbmRvd3MKKyAgIGlzCisgICAgICBmdW5jdGlvbiBFbmR3aW4gcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRW5kd2luLCAiZW5kd2luIik7CisgICBiZWdpbgorICAgICAgaWYgRW5kd2luID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEVuZF9XaW5kb3dzOworCisgICBmdW5jdGlvbiBJc19FbmRfV2luZG93IHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSXNlbmR3aW4gcmV0dXJuIEN1cnNlc19Cb29sOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXNlbmR3aW4sICJpc2VuZHdpbiIpOworICAgYmVnaW4KKyAgICAgIGlmIElzZW5kd2luID0gQ3Vyc2VzX0Jvb2xfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgSXNfRW5kX1dpbmRvdzsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIE1vdmVfQ3Vyc29yIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gV21vdmUgKFdpbiAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDX0ludAorICAgICAgICAgICAgICAgICAgICAgKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXbW92ZSwgIndtb3ZlIik7CisgICBiZWdpbgorICAgICAgaWYgV21vdmUgKFdpbiwgQ19JbnQgKExpbmUpLCBDX0ludCAoQ29sdW1uKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgTW92ZV9DdXJzb3I7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXYWRkY2ggKFcgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICBDaCA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYWRkY2gsICJ3YWRkY2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBXYWRkY2ggKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEFkZDsKKworICAgcHJvY2VkdXJlIEFkZCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgIENoICA6IGluIENoYXJhY3RlcikKKyAgIGlzCisgICBiZWdpbgorICAgICAgQWRkIChXaW4sCisgICAgICAgICAgIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyJyhDaCAgICA9PiBDaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8pKTsKKyAgIGVuZCBBZGQ7CisKKyAgIHByb2NlZHVyZSBBZGQKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgQ2ggICAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gbXZ3YWRkY2ggKFcgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIFkgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaCA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBtdndhZGRjaCwgIm12d2FkZGNoIik7CisgICBiZWdpbgorICAgICAgaWYgbXZ3YWRkY2ggKFdpbiwgQ19JbnQgKExpbmUpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChDb2x1bW4pLAorICAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBBZGQ7CisKKyAgIHByb2NlZHVyZSBBZGQKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgQ2ggICAgIDogaW4gQ2hhcmFjdGVyKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBBZGQgKFdpbiwKKyAgICAgICAgICAgTGluZSwKKyAgICAgICAgICAgQ29sdW1uLAorICAgICAgICAgICBBdHRyaWJ1dGVkX0NoYXJhY3RlcicoQ2ggICAgPT4gQ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICBlbmQgQWRkOworCisgICBwcm9jZWR1cmUgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8KKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXZWNob2NoYXIgKFcgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICBDaCA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXZWNob2NoYXIsICJ3ZWNob2NoYXIiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXZWNob2NoYXIgKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvOworCisgICBwcm9jZWR1cmUgQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8KKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDaCAgOiBpbiBDaGFyYWN0ZXIpCisgICBpcworICAgYmVnaW4KKyAgICAgIEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvCisgICAgICAgIChXaW4sCisgICAgICAgICBBdHRyaWJ1dGVkX0NoYXJhY3RlcicoQ2ggICAgPT4gQ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8pKTsKKyAgIGVuZCBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobzsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gQ3JlYXRlIChOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIEZpcnN0X0xpbmVfUG9zaXRpb24gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgICAgIGZ1bmN0aW9uIE5ld3dpbiAoTnVtYmVyX09mX0xpbmVzICAgICAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ19JbnQpIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOZXd3aW4sICJuZXd3aW4iKTsKKworICAgICAgVyA6IFdpbmRvdzsKKyAgIGJlZ2luCisgICAgICBXIDo9IE5ld3dpbiAoQ19JbnQgKE51bWJlcl9PZl9MaW5lcyksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9Db2x1bW5zKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRmlyc3RfTGluZV9Qb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEZpcnN0X0NvbHVtbl9Qb3NpdGlvbikpOworICAgICAgaWYgVyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBDcmVhdGU7CisKKyAgIHByb2NlZHVyZSBEZWxldGUgKFdpbiA6IGluIG91dCBXaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gV2RlbHdpbiAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2RlbHdpbiwgImRlbHdpbiIpOworICAgYmVnaW4KKyAgICAgIGlmIFdkZWx3aW4gKFdpbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICBXaW4gOj0gTnVsbF9XaW5kb3c7CisgICBlbmQgRGVsZXRlOworCisgICBmdW5jdGlvbiBTdWJfV2luZG93CisgICAgIChXaW4gICAgICAgICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTnVtYmVyX09mX0xpbmVzICAgICAgIDogTGluZV9Db3VudDsKKyAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENvbHVtbl9Db3VudDsKKyAgICAgIEZpcnN0X0xpbmVfUG9zaXRpb24gICA6IExpbmVfUG9zaXRpb247CisgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTdWJ3aW4KKyAgICAgICAgKFdpbiAgICAgICAgICAgICAgICAgICA6IFdpbmRvdzsKKyAgICAgICAgIE51bWJlcl9PZl9MaW5lcyAgICAgICA6IENfSW50OworICAgICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ19JbnQ7CisgICAgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBDX0ludDsKKyAgICAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENfSW50KSByZXR1cm4gV2luZG93OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU3Vid2luLCAic3Vid2luIik7CisKKyAgICAgIFcgOiBXaW5kb3c7CisgICBiZWdpbgorICAgICAgVyA6PSBTdWJ3aW4gKFdpbiwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoTnVtYmVyX09mX0xpbmVzKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoTnVtYmVyX09mX0NvbHVtbnMpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChGaXJzdF9MaW5lX1Bvc2l0aW9uKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRmlyc3RfQ29sdW1uX1Bvc2l0aW9uKSk7CisgICAgICBpZiBXID0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBXOworICAgZW5kIFN1Yl9XaW5kb3c7CisKKyAgIGZ1bmN0aW9uIERlcml2ZWRfV2luZG93CisgICAgIChXaW4gICAgICAgICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTnVtYmVyX09mX0xpbmVzICAgICAgIDogTGluZV9Db3VudDsKKyAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENvbHVtbl9Db3VudDsKKyAgICAgIEZpcnN0X0xpbmVfUG9zaXRpb24gICA6IExpbmVfUG9zaXRpb247CisgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBEZXJ3aW4KKyAgICAgICAgKFdpbiAgICAgICAgICAgICAgICAgICA6IFdpbmRvdzsKKyAgICAgICAgIE51bWJlcl9PZl9MaW5lcyAgICAgICA6IENfSW50OworICAgICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ19JbnQ7CisgICAgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBDX0ludDsKKyAgICAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENfSW50KSByZXR1cm4gV2luZG93OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRGVyd2luLCAiZGVyd2luIik7CisKKyAgICAgIFcgOiBXaW5kb3c7CisgICBiZWdpbgorICAgICAgVyA6PSBEZXJ3aW4gKFdpbiwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoTnVtYmVyX09mX0xpbmVzKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoTnVtYmVyX09mX0NvbHVtbnMpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChGaXJzdF9MaW5lX1Bvc2l0aW9uKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRmlyc3RfQ29sdW1uX1Bvc2l0aW9uKSk7CisgICAgICBpZiBXID0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBXOworICAgZW5kIERlcml2ZWRfV2luZG93OworCisgICBmdW5jdGlvbiBEdXBsaWNhdGUgKFdpbiA6IFdpbmRvdykgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgICAgIGZ1bmN0aW9uIER1cHdpbiAoV2luIDogV2luZG93KSByZXR1cm4gV2luZG93OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRHVwd2luLCAiZHVwd2luIik7CisKKyAgICAgIFcgOiBjb25zdGFudCBXaW5kb3cgOj0gRHVwd2luIChXaW4pOworICAgYmVnaW4KKyAgICAgIGlmIFcgPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIFc7CisgICBlbmQgRHVwbGljYXRlOworCisgICBwcm9jZWR1cmUgTW92ZV9XaW5kb3cgKFdpbiAgICA6IGluIFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE12d2luIChXaW4gICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE12d2luLCAibXZ3aW4iKTsKKyAgIGJlZ2luCisgICAgICBpZiBNdndpbiAoV2luLCBDX0ludCAoTGluZSksIENfSW50IChDb2x1bW4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBNb3ZlX1dpbmRvdzsKKworICAgcHJvY2VkdXJlIE1vdmVfRGVyaXZlZF9XaW5kb3cgKFdpbiAgICA6IGluIFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNdmRlcndpbiAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNdmRlcndpbiwgIm12ZGVyd2luIik7CisgICBiZWdpbgorICAgICAgaWYgTXZkZXJ3aW4gKFdpbiwgQ19JbnQgKExpbmUpLCBDX0ludCAoQ29sdW1uKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgTW92ZV9EZXJpdmVkX1dpbmRvdzsKKworICAgcHJvY2VkdXJlIFNldF9TeW5jaF9Nb2RlIChXaW4gIDogaW4gV2luZG93ICA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgOiBpbiBCb29sZWFuIDo9IEZhbHNlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFN5bmNvayAoV2luICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgTW9kZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTeW5jb2ssICJzeW5jb2siKTsKKyAgIGJlZ2luCisgICAgICBpZiBTeW5jb2sgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChNb2RlKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9TeW5jaF9Nb2RlOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgQWRkIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgU3RyIDogaW4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgTGVuIDogaW4gSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXYWRkbnN0ciAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQgOj0gLTEpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdhZGRuc3RyLCAid2FkZG5zdHIiKTsKKworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChTdHIsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIFdhZGRuc3RyIChXaW4sIFR4dCwgQ19JbnQgKExlbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEFkZDsKKworICAgcHJvY2VkdXJlIEFkZAorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBTdHIgICAgOiBpbiBTdHJpbmc7CisgICAgICBMZW4gICAgOiBpbiBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAoV2luLCBMaW5lLCBDb2x1bW4pOworICAgICAgQWRkIChXaW4sIFN0ciwgTGVuKTsKKyAgIGVuZCBBZGQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBBZGQKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBTdHIgOiBpbiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpCisgICBpcworICAgICAgZnVuY3Rpb24gV2FkZGNobnN0ciAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogY2h0eXBlX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQgOj0gLTEpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdhZGRjaG5zdHIsICJ3YWRkY2huc3RyIik7CisKKyAgICAgIFR4dCA6IGNodHlwZV9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKTsKKyAgIGJlZ2luCisgICAgICBmb3IgTGVuZ3RoIGluIDEgLi4gc2l6ZV90IChTdHInTGVuZ3RoKSBsb29wCisgICAgICAgICBUeHQgKExlbmd0aCAtIDEpIDo9IFN0ciAoTmF0dXJhbCAoTGVuZ3RoKSk7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIFR4dCAoU3RyJ0xlbmd0aCkgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBpZiBXYWRkY2huc3RyIChXaW4sCisgICAgICAgICAgICAgICAgICAgICBUeHQsCisgICAgICAgICAgICAgICAgICAgICBDX0ludCAoTGVuKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQWRkOworCisgICBwcm9jZWR1cmUgQWRkCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFN0ciAgICA6IGluIEF0dHJpYnV0ZWRfU3RyaW5nOworICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKKyAgICAgIEFkZCAoV2luLCBTdHIsIExlbik7CisgICBlbmQgQWRkOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgQm9yZGVyCisgICAgIChXaW4gICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExlZnRfU2lkZV9TeW1ib2wgICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFJpZ2h0X1NpZGVfU3ltYm9sICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFRvcF9TaWRlX1N5bWJvbCAgICAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIEJvdHRvbV9TaWRlX1N5bWJvbCAgICAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFVwcGVyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIFVwcGVyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIExvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcjsKKyAgICAgIExvd2VyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXYm9yZGVyIChXICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBMUyAgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJTICA6IENfQ2h0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgVFMgIDogQ19DaHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBCUyAgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVMQyA6IENfQ2h0eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgVVJDIDogQ19DaHR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICBMTEMgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExSQyA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYm9yZGVyLCAid2JvcmRlciIpOworICAgYmVnaW4KKyAgICAgIGlmIFdib3JkZXIgKFdpbiwKKyAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoTGVmdF9TaWRlX1N5bWJvbCksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKFJpZ2h0X1NpZGVfU3ltYm9sKSwKKyAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoVG9wX1NpZGVfU3ltYm9sKSwKKyAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoQm90dG9tX1NpZGVfU3ltYm9sKSwKKyAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoVXBwZXJfTGVmdF9Db3JuZXJfU3ltYm9sKSwKKyAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoVXBwZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKExvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbCksCisgICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKExvd2VyX1JpZ2h0X0Nvcm5lcl9TeW1ib2wpCisgICAgICAgICAgICAgICAgICApID0gQ3Vyc2VzX0VycgorICAgICAgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBCb3JkZXI7CisKKyAgIHByb2NlZHVyZSBCb3gKKyAgICAgKFdpbiAgICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFZlcnRpY2FsX1N5bWJvbCAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBIb3Jpem9udGFsX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBCb3JkZXIgKFdpbiwKKyAgICAgICAgICAgICAgVmVydGljYWxfU3ltYm9sLCBWZXJ0aWNhbF9TeW1ib2wsCisgICAgICAgICAgICAgIEhvcml6b250YWxfU3ltYm9sLCBIb3Jpem9udGFsX1N5bWJvbCk7CisgICBlbmQgQm94OworCisgICBwcm9jZWR1cmUgSG9yaXpvbnRhbF9MaW5lCisgICAgIChXaW4gICAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lX1NpemUgICA6IGluIE5hdHVyYWw7CisgICAgICBMaW5lX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdobGluZSAoVyAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICBDaCAgOiBDX0NodHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdobGluZSwgIndobGluZSIpOworICAgYmVnaW4KKyAgICAgIGlmIFdobGluZSAoV2luLAorICAgICAgICAgICAgICAgICBBdHRyQ2hhcl9Ub19DaHR5cGUgKExpbmVfU3ltYm9sKSwKKyAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmVfU2l6ZSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEhvcml6b250YWxfTGluZTsKKworICAgcHJvY2VkdXJlIFZlcnRpY2FsX0xpbmUKKyAgICAgKFdpbiAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmVfU2l6ZSAgIDogaW4gTmF0dXJhbDsKKyAgICAgIExpbmVfU3ltYm9sIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gV3ZsaW5lIChXICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgIENoICA6IENfQ2h0eXBlOworICAgICAgICAgICAgICAgICAgICAgICBMZW4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV3ZsaW5lLCAid3ZsaW5lIik7CisgICBiZWdpbgorICAgICAgaWYgV3ZsaW5lIChXaW4sCisgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoTGluZV9TeW1ib2wpLAorICAgICAgICAgICAgICAgICBDX0ludCAoTGluZV9TaXplKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgVmVydGljYWxfTGluZTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBHZXRfS2V5c3Ryb2tlIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgICByZXR1cm4gUmVhbF9LZXlfQ29kZQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdnZXRjaCAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2dldGNoLCAid2dldGNoIik7CisKKyAgICAgIEMgOiBjb25zdGFudCBDX0ludCA6PSBXZ2V0Y2ggKFdpbik7CisgICBiZWdpbgorICAgICAgaWYgQyA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmV0dXJuIEtleV9Ob25lOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFJlYWxfS2V5X0NvZGUgKEMpOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9LZXlzdHJva2U7CisKKyAgIHByb2NlZHVyZSBVbmRvX0tleXN0cm9rZSAoS2V5IDogaW4gUmVhbF9LZXlfQ29kZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBVbmdldGNoIChDaCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBVbmdldGNoLCAidW5nZXRjaCIpOworICAgYmVnaW4KKyAgICAgIGlmIFVuZ2V0Y2ggKENfSW50IChLZXkpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBVbmRvX0tleXN0cm9rZTsKKworICAgZnVuY3Rpb24gSGFzX0tleSAoS2V5IDogU3BlY2lhbF9LZXlfQ29kZSkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBIYXNrZXkgKEtleSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBIYXNrZXksICJoYXNfa2V5Iik7CisgICBiZWdpbgorICAgICAgaWYgSGFza2V5IChDX0ludCAoS2V5KSkgPSBDdXJzZXNfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgSGFzX0tleTsKKworICAgZnVuY3Rpb24gSXNfRnVuY3Rpb25fS2V5IChLZXkgOiBTcGVjaWFsX0tleV9Db2RlKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIEwgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlICA6PSBTcGVjaWFsX0tleV9Db2RlIChOYXR1cmFsIChLZXlfRjApICsKKyAgICAgICAgTmF0dXJhbCAoRnVuY3Rpb25fS2V5X051bWJlcidMYXN0KSk7CisgICBiZWdpbgorICAgICAgaWYgKEtleSA+PSBLZXlfRjApIGFuZCB0aGVuIChLZXkgPD0gTCkgdGhlbgorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgSXNfRnVuY3Rpb25fS2V5OworCisgICBmdW5jdGlvbiBGdW5jdGlvbl9LZXkgKEtleSA6IFJlYWxfS2V5X0NvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbl9LZXlfTnVtYmVyCisgICBpcworICAgYmVnaW4KKyAgICAgIGlmIElzX0Z1bmN0aW9uX0tleSAoS2V5KSB0aGVuCisgICAgICAgICByZXR1cm4gRnVuY3Rpb25fS2V5X051bWJlciAoS2V5IC0gS2V5X0YwKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisgICBlbmQgRnVuY3Rpb25fS2V5OworCisgICBmdW5jdGlvbiBGdW5jdGlvbl9LZXlfQ29kZSAoS2V5IDogRnVuY3Rpb25fS2V5X051bWJlcikgcmV0dXJuIFJlYWxfS2V5X0NvZGUKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFJlYWxfS2V5X0NvZGUgKE5hdHVyYWwgKEtleV9GMCkgKyBOYXR1cmFsIChLZXkpKTsKKyAgIGVuZCBGdW5jdGlvbl9LZXlfQ29kZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFN0YW5kb3V0IChXaW4gOiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgT24gIDogQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHdzdGFuZG91dCAoV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB3c3RhbmRvdXQsICJ3c3RhbmRvdXQiKTsKKyAgICAgIGZ1bmN0aW9uIHdzdGFuZGVuZCAoV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB3c3RhbmRlbmQsICJ3c3RhbmRlbmQiKTsKKworICAgICAgRXJyIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgaWYgT24gdGhlbgorICAgICAgICAgRXJyIDo9IHdzdGFuZG91dCAoV2luKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSB3c3RhbmRlbmQgKFdpbik7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU3RhbmRvdXQ7CisKKyAgIHByb2NlZHVyZSBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBBdHRyIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgT24gICA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXYXR0cm9uIChXaW4gICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBDX0F0dHIgOiBDX0F0dHJUeXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXYXR0cm9uLCAid2F0dHJfb24iKTsKKyAgICAgIGZ1bmN0aW9uIFdhdHRyb2ZmIChXaW4gICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ19BdHRyIDogQ19BdHRyVHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2F0dHJvZmYsICJ3YXR0cl9vZmYiKTsKKyAgICAgIC0tICBJbiBBZGEgd2UgdXNlIHRoZSBPbiBCb29sZWFuIHRvIGNvbnRyb2wgd2hldGhlciBvciBub3Qgd2Ugd2FudCB0bworICAgICAgLS0gIHN3aXRjaCBvbiBvciBvZmYgdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIHNldC4KKyAgICAgIEVyciA6IENfSW50OworICAgICAgQUMgIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEF0dHIpOworICAgYmVnaW4KKyAgICAgIGlmIE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSBXYXR0cm9uICAoV2luLCBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoQUMpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBXYXR0cm9mZiAoV2luLCBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoQUMpKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZTsKKworICAgcHJvY2VkdXJlIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcworICAgICAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQXR0ciAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXYXR0cnNldCAoV2luICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIENfQXR0ciA6IENfQXR0clR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdhdHRyc2V0LCAid2F0dHJzZXQiKTsgLS0gPz8/IHdhdHRyX3NldAorICAgYmVnaW4KKyAgICAgIGlmIFdhdHRyc2V0IChXaW4sCisgICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQXR0clR5cGUgKEF0dHJpYnV0ZWRfQ2hhcmFjdGVyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBBdHRyKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczsKKworICAgZnVuY3Rpb24gR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGUgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0CisgICBpcworICAgICAgZnVuY3Rpb24gV2F0dHJnZXQgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBBdHIgOiBhY2Nlc3MgQ19BdHRyVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgOiBhY2Nlc3MgQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2F0dHJnZXQsICJ3YXR0cl9nZXQiKTsKKworICAgICAgQXR0ciA6IGFsaWFzZWQgQ19BdHRyVHlwZTsKKyAgICAgIENvbCAgOiBhbGlhc2VkIENfU2hvcnQ7CisgICAgICBSZXMgIDogY29uc3RhbnQgQ19JbnQgOj0gV2F0dHJnZXQgKFdpbiwgQXR0cidBY2Nlc3MsIENvbCdBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5OdWxsX0FkZHJlc3MpOworICAgICAgQ2ggICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyA9IEN1cnNlc19PayB0aGVuCisgICAgICAgICBDaCA6PSBBdHRyVHlwZV9Ub19BdHRyQ2hhciAoQXR0cik7CisgICAgICAgICByZXR1cm4gQ2guQXR0cjsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU7CisKKyAgIGZ1bmN0aW9uIEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcl9QYWlyCisgICBpcworICAgICAgZnVuY3Rpb24gV2F0dHJnZXQgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBBdHIgOiBhY2Nlc3MgQ19BdHRyVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgOiBhY2Nlc3MgQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2F0dHJnZXQsICJ3YXR0cl9nZXQiKTsKKworICAgICAgQXR0ciA6IGFsaWFzZWQgQ19BdHRyVHlwZTsKKyAgICAgIENvbCAgOiBhbGlhc2VkIENfU2hvcnQ7CisgICAgICBSZXMgIDogY29uc3RhbnQgQ19JbnQgOj0gV2F0dHJnZXQgKFdpbiwgQXR0cidBY2Nlc3MsIENvbCdBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5OdWxsX0FkZHJlc3MpOworICAgICAgQ2ggICA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyA9IEN1cnNlc19PayB0aGVuCisgICAgICAgICBDaCA6PSBBdHRyVHlwZV9Ub19BdHRyQ2hhciAoQXR0cik7CisgICAgICAgICByZXR1cm4gQ2guQ29sb3I7CisgICAgICBlbHNlCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlOworCisgICBwcm9jZWR1cmUgU2V0X0NvbG9yIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhaXIgOiBpbiBDb2xvcl9QYWlyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdzZXRfQ29sb3IgKFdpbiAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBDX1Nob3J0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0cyAgOiBDX1ZvaWRfUHRyKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXc2V0X0NvbG9yLCAid2NvbG9yX3NldCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdzZXRfQ29sb3IgKFdpbiwKKyAgICAgICAgICAgICAgICAgICAgIENfU2hvcnQgKFBhaXIpLAorICAgICAgICAgICAgICAgICAgICAgQ19Wb2lkX1B0ciAoU3lzdGVtLk51bGxfQWRkcmVzcykpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Db2xvcjsKKworICAgcHJvY2VkdXJlIENoYW5nZV9BdHRyaWJ1dGVzCisgICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBDb3VudCA6IGluIEludGVnZXIgOj0gLTE7CisgICAgICBBdHRyICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdjaGdhdCAoV2luICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgIENudCAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgIDogQ19BdHRyVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBDX1Nob3J0OworICAgICAgICAgICAgICAgICAgICAgICBPcHRzICA6IFN5c3RlbS5BZGRyZXNzIDo9IFN5c3RlbS5OdWxsX0FkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdjaGdhdCwgIndjaGdhdCIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9CisgICAgICAgIChDaCA9PiBDaGFyYWN0ZXInRmlyc3QsIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsIEF0dHIgPT4gQXR0cik7CisgICBiZWdpbgorICAgICAgaWYgV2NoZ2F0IChXaW4sIENfSW50IChDb3VudCksIEF0dHJDaGFyX1RvX0F0dHJUeXBlIChDaCksCisgICAgICAgICAgICAgICAgIENfU2hvcnQgKENvbG9yKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2hhbmdlX0F0dHJpYnV0ZXM7CisKKyAgIHByb2NlZHVyZSBDaGFuZ2VfQXR0cmlidXRlcworICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb24gOj0gTGluZV9Qb3NpdGlvbidGaXJzdDsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSBDb2x1bW5fUG9zaXRpb24nRmlyc3Q7CisgICAgICBDb3VudCAgOiBpbiBJbnRlZ2VyIDo9IC0xOworICAgICAgQXR0ciAgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgaXMKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAoV2luLCBMaW5lLCBDb2x1bW4pOworICAgICAgQ2hhbmdlX0F0dHJpYnV0ZXMgKFdpbiwgQ291bnQsIEF0dHIsIENvbG9yKTsKKyAgIGVuZCBDaGFuZ2VfQXR0cmlidXRlczsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEJlZXAKKyAgIGlzCisgICAgICBmdW5jdGlvbiBCZWVwZXIgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQmVlcGVyLCAiYmVlcCIpOworICAgYmVnaW4KKyAgICAgIGlmIEJlZXBlciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBCZWVwOworCisgICBwcm9jZWR1cmUgRmxhc2hfU2NyZWVuCisgICBpcworICAgICAgZnVuY3Rpb24gRmxhc2ggcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmxhc2gsICJmbGFzaCIpOworICAgYmVnaW4KKyAgICAgIGlmIEZsYXNoID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEZsYXNoX1NjcmVlbjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9DYnJlYWtfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gQ2JyZWFrIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENicmVhaywgImNicmVhayIpOworICAgICAgZnVuY3Rpb24gTm9DYnJlYWsgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTm9DYnJlYWssICJub2NicmVhayIpOworCisgICAgICBFcnIgOiBDX0ludDsKKyAgIGJlZ2luCisgICAgICBpZiBTd2l0Y2hPbiB0aGVuCisgICAgICAgICBFcnIgOj0gQ2JyZWFrOworICAgICAgZWxzZQorICAgICAgICAgRXJyIDo9IE5vQ2JyZWFrOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9DYnJlYWtfTW9kZTsKKworICAgcHJvY2VkdXJlIFNldF9SYXdfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gUmF3IHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFJhdywgInJhdyIpOworICAgICAgZnVuY3Rpb24gTm9SYXcgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTm9SYXcsICJub3JhdyIpOworCisgICAgICBFcnIgOiBDX0ludDsKKyAgIGJlZ2luCisgICAgICBpZiBTd2l0Y2hPbiB0aGVuCisgICAgICAgICBFcnIgOj0gUmF3OworICAgICAgZWxzZQorICAgICAgICAgRXJyIDo9IE5vUmF3OworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9SYXdfTW9kZTsKKworICAgcHJvY2VkdXJlIFNldF9FY2hvX01vZGUgKFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEVjaG8gcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRWNobywgImVjaG8iKTsKKyAgICAgIGZ1bmN0aW9uIE5vRWNobyByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOb0VjaG8sICJub2VjaG8iKTsKKworICAgICAgRXJyIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgaWYgU3dpdGNoT24gdGhlbgorICAgICAgICAgRXJyIDo9IEVjaG87CisgICAgICBlbHNlCisgICAgICAgICBFcnIgOj0gTm9FY2hvOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9FY2hvX01vZGU7CisKKyAgIHByb2NlZHVyZSBTZXRfTWV0YV9Nb2RlIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gTWV0YSAoVyA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZXRhLCAibWV0YSIpOworICAgYmVnaW4KKyAgICAgIGlmIE1ldGEgKFdpbiwgQ3Vyc2VzX0Jvb2wgKEJvb2xlYW4nUG9zIChTd2l0Y2hPbikpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfTWV0YV9Nb2RlOworCisgICBwcm9jZWR1cmUgU2V0X0tleVBhZF9Nb2RlIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBLZXlwYWQgKFcgOiBXaW5kb3c7IE1vZGUgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgS2V5cGFkLCAia2V5cGFkIik7CisgICBiZWdpbgorICAgICAgaWYgS2V5cGFkIChXaW4sIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoU3dpdGNoT24pKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0tleVBhZF9Nb2RlOworCisgICBmdW5jdGlvbiBHZXRfS2V5UGFkX01vZGUgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSXNfS2V5cGFkIChXIDogV2luZG93KSByZXR1cm4gQ3Vyc2VzX0Jvb2w7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJc19LZXlwYWQsICJpc19rZXlwYWQiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gKElzX0tleXBhZCAoV2luKSAvPSBDdXJzZXNfQm9vbF9GYWxzZSk7CisgICBlbmQgR2V0X0tleVBhZF9Nb2RlOworCisgICBwcm9jZWR1cmUgSGFsZl9EZWxheSAoQW1vdW50IDogaW4gSGFsZl9EZWxheV9BbW91bnQpCisgICBpcworICAgICAgZnVuY3Rpb24gSGFsZmRlbGF5IChBbW91bnQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSGFsZmRlbGF5LCAiaGFsZmRlbGF5Iik7CisgICBiZWdpbgorICAgICAgaWYgSGFsZmRlbGF5IChDX0ludCAoQW1vdW50KSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgSGFsZl9EZWxheTsKKworICAgcHJvY2VkdXJlIFNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZQorICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEludHJmbHVzaCAoV2luIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEludHJmbHVzaCwgImludHJmbHVzaCIpOworICAgYmVnaW4KKyAgICAgIGlmIEludHJmbHVzaCAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKE1vZGUpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0ZsdXNoX09uX0ludGVycnVwdF9Nb2RlOworCisgICBwcm9jZWR1cmUgU2V0X1F1ZXVlX0ludGVycnVwdF9Nb2RlCisgICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBGbHVzaCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBwcm9jZWR1cmUgUWlmbHVzaDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFFpZmx1c2gsICJxaWZsdXNoIik7CisgICAgICBwcm9jZWR1cmUgTm9fUWlmbHVzaDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5vX1FpZmx1c2gsICJub3FpZmx1c2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBXaW4gPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgaWYgRmx1c2ggdGhlbgorICAgICAgICAgUWlmbHVzaDsKKyAgICAgIGVsc2UKKyAgICAgICAgIE5vX1FpZmx1c2g7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1F1ZXVlX0ludGVycnVwdF9Nb2RlOworCisgICBwcm9jZWR1cmUgU2V0X05vRGVsYXlfTW9kZQorICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOb2RlbGF5IChXaW4gOiBXaW5kb3c7IE1vZGUgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTm9kZWxheSwgIm5vZGVsYXkiKTsKKyAgIGJlZ2luCisgICAgICBpZiBOb2RlbGF5IChXaW4sIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoTW9kZSkpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfTm9EZWxheV9Nb2RlOworCisgICBwcm9jZWR1cmUgU2V0X1RpbWVvdXRfTW9kZSAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlICAgOiBpbiBUaW1lb3V0X01vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW1vdW50IDogaW4gTmF0dXJhbCkKKyAgIGlzCisgICAgICBwcm9jZWR1cmUgV3RpbWVvdXQgKFdpbiA6IFdpbmRvdzsgQW1vdW50IDogQ19JbnQpOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV3RpbWVvdXQsICJ3dGltZW91dCIpOworCisgICAgICBUaW1lIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgY2FzZSBNb2RlIGlzCisgICAgICAgICB3aGVuIEJsb2NraW5nICAgICA9PiBUaW1lIDo9IC0xOworICAgICAgICAgd2hlbiBOb25fQmxvY2tpbmcgPT4gVGltZSA6PSAwOworICAgICAgICAgd2hlbiBEZWxheWVkICAgICAgPT4KKyAgICAgICAgICAgIGlmIEFtb3VudCA9IDAgdGhlbgorICAgICAgICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIFRpbWUgOj0gQ19JbnQgKEFtb3VudCk7CisgICAgICBlbmQgY2FzZTsKKyAgICAgIFd0aW1lb3V0IChXaW4sIFRpbWUpOworICAgZW5kIFNldF9UaW1lb3V0X01vZGU7CisKKyAgIHByb2NlZHVyZSBTZXRfRXNjYXBlX1RpbWVyX01vZGUKKyAgICAgKFdpbiAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBUaW1lcl9PZmYgOiBpbiBCb29sZWFuIDo9IEZhbHNlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE5vdGltZW91dCAoV2luIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5vdGltZW91dCwgIm5vdGltZW91dCIpOworICAgYmVnaW4KKyAgICAgIGlmIE5vdGltZW91dCAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKFRpbWVyX09mZikpKQorICAgICAgICA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfRXNjYXBlX1RpbWVyX01vZGU7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9OTF9Nb2RlIChTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOTCByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOTCwgIm5sIik7CisgICAgICBmdW5jdGlvbiBOb05MIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5vTkwsICJub25sIik7CisKKyAgICAgIEVyciA6IENfSW50OworICAgYmVnaW4KKyAgICAgIGlmIFN3aXRjaE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSBOTDsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBOb05MOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9OTF9Nb2RlOworCisgICBwcm9jZWR1cmUgQ2xlYXJfT25fTmV4dF9VcGRhdGUKKyAgICAgKFdpbiAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0NsZWFyIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIENsZWFyX09rIChXIDogV2luZG93OyBGbGFnIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENsZWFyX09rLCAiY2xlYXJvayIpOworICAgYmVnaW4KKyAgICAgIGlmIENsZWFyX09rIChXaW4sIEN1cnNlc19Cb29sIChCb29sZWFuJ1BvcyAoRG9fQ2xlYXIpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2xlYXJfT25fTmV4dF9VcGRhdGU7CisKKyAgIHByb2NlZHVyZSBVc2VfSW5zZXJ0X0RlbGV0ZV9MaW5lCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fSWRsIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIElETF9PayAoVyA6IFdpbmRvdzsgRmxhZyA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJRExfT2ssICJpZGxvayIpOworICAgYmVnaW4KKyAgICAgIGlmIElETF9PayAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKERvX0lkbCkpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBVc2VfSW5zZXJ0X0RlbGV0ZV9MaW5lOworCisgICBwcm9jZWR1cmUgVXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fSWRjIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIHByb2NlZHVyZSBJRENfT2sgKFcgOiBXaW5kb3c7IEZsYWcgOiBDdXJzZXNfQm9vbCk7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJRENfT2ssICJpZGNvayIpOworICAgYmVnaW4KKyAgICAgIElEQ19PayAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKERvX0lkYykpKTsKKyAgIGVuZCBVc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXI7CisKKyAgIHByb2NlZHVyZSBMZWF2ZV9DdXJzb3JfQWZ0ZXJfVXBkYXRlCisgICAgIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBEb19MZWF2ZSA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBMZWF2ZV9PayAoVyA6IFdpbmRvdzsgRmxhZyA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBMZWF2ZV9PaywgImxlYXZlb2siKTsKKyAgIGJlZ2luCisgICAgICBpZiBMZWF2ZV9PayAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKERvX0xlYXZlKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIExlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGU7CisKKyAgIHByb2NlZHVyZSBJbW1lZGlhdGVfVXBkYXRlX01vZGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpCisgICBpcworICAgICAgcHJvY2VkdXJlIEltbWVkb2sgKFdpbiA6IFdpbmRvdzsgTW9kZSA6IEN1cnNlc19Cb29sKTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEltbWVkb2ssICJpbW1lZG9rIik7CisgICBiZWdpbgorICAgICAgSW1tZWRvayAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKE1vZGUpKSk7CisgICBlbmQgSW1tZWRpYXRlX1VwZGF0ZV9Nb2RlOworCisgICBwcm9jZWR1cmUgQWxsb3dfU2Nyb2xsaW5nCisgICAgIChXaW4gIDogaW4gV2luZG93ICA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTY3JvbGxvayAoV2luIDogV2luZG93OyBNb2RlIDogQ3Vyc2VzX0Jvb2wpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNjcm9sbG9rLCAic2Nyb2xsb2siKTsKKyAgIGJlZ2luCisgICAgICBpZiBTY3JvbGxvayAoV2luLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKE1vZGUpKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQWxsb3dfU2Nyb2xsaW5nOworCisgICBmdW5jdGlvbiBTY3JvbGxpbmdfQWxsb3dlZCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIElzX1Njcm9sbF9PayAoVyA6IFdpbmRvdykgcmV0dXJuIEN1cnNlc19Cb29sOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXNfU2Nyb2xsX09rLCAiaXNfc2Nyb2xsb2siKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gKElzX1Njcm9sbF9PayAoV2luKSAvPSBDdXJzZXNfQm9vbF9GYWxzZSk7CisgICBlbmQgU2Nyb2xsaW5nX0FsbG93ZWQ7CisKKyAgIHByb2NlZHVyZSBTZXRfU2Nyb2xsX1JlZ2lvbgorICAgICAoV2luICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgVG9wX0xpbmUgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQm90dG9tX0xpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdzZXRzY3JyZWcgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbiA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdzZXRzY3JyZWcsICJ3c2V0c2NycmVnIik7CisgICBiZWdpbgorICAgICAgaWYgV3NldHNjcnJlZyAoV2luLCBDX0ludCAoVG9wX0xpbmUpLCBDX0ludCAoQm90dG9tX0xpbmUpKQorICAgICAgICA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfU2Nyb2xsX1JlZ2lvbjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFVwZGF0ZV9TY3JlZW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBEb19VcGRhdGUgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRG9fVXBkYXRlLCAiZG91cGRhdGUiKTsKKyAgIGJlZ2luCisgICAgICBpZiBEb19VcGRhdGUgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgVXBkYXRlX1NjcmVlbjsKKworICAgcHJvY2VkdXJlIFJlZnJlc2ggKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gV3JlZnJlc2ggKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdyZWZyZXNoLCAid3JlZnJlc2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBXcmVmcmVzaCAoV2luKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZWZyZXNoOworCisgICBwcm9jZWR1cmUgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZQorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXbm91dHJlZnJlc2ggKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdub3V0cmVmcmVzaCwgIndub3V0cmVmcmVzaCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdub3V0cmVmcmVzaCAoV2luKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlOworCisgICBwcm9jZWR1cmUgUmVkcmF3IChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFJlZHJhd3dpbiAoV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZWRyYXd3aW4sICJyZWRyYXd3aW4iKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZWRyYXd3aW4gKFdpbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVkcmF3OworCisgICBwcm9jZWR1cmUgUmVkcmF3CisgICAgIChXaW4gICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIEJlZ2luX0xpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgTGluZV9Db3VudCA6IGluIFBvc2l0aXZlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdyZWRyYXdsbiAoV2luIDogV2luZG93OyBGaXJzdCA6IENfSW50OyBDbnQgOiBDX0ludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV3JlZHJhd2xuLCAid3JlZHJhd2xuIik7CisgICBiZWdpbgorICAgICAgaWYgV3JlZHJhd2xuIChXaW4sCisgICAgICAgICAgICAgICAgICAgIENfSW50IChCZWdpbl9MaW5lKSwKKyAgICAgICAgICAgICAgICAgICAgQ19JbnQgKExpbmVfQ291bnQpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZWRyYXc7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEVyYXNlIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdlcmFzZSAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2VyYXNlLCAid2VyYXNlIik7CisgICBiZWdpbgorICAgICAgaWYgV2VyYXNlIChXaW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEVyYXNlOworCisgICBwcm9jZWR1cmUgQ2xlYXIgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gV2NsZWFyIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXY2xlYXIsICJ3Y2xlYXIiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXY2xlYXIgKFdpbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2xlYXI7CisKKyAgIHByb2NlZHVyZSBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdjbGVhcmJvdCAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2NsZWFyYm90LCAid2NscnRvYm90Iik7CisgICBiZWdpbgorICAgICAgaWYgV2NsZWFyYm90IChXaW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIENsZWFyX1RvX0VuZF9PZl9TY3JlZW47CisKKyAgIHByb2NlZHVyZSBDbGVhcl9Ub19FbmRfT2ZfTGluZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXY2xlYXJlb2wgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdjbGVhcmVvbCwgIndjbHJ0b2VvbCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdjbGVhcmVvbCAoV2luKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9CYWNrZ3JvdW5kCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICBpcworICAgICAgcHJvY2VkdXJlIFdCYWNrZ3JvdW5kIChXIDogaW4gV2luZG93OyBDaCA6IGluIENfQ2h0eXBlKTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdCYWNrZ3JvdW5kLCAid2JrZ2RzZXQiKTsKKyAgIGJlZ2luCisgICAgICBXQmFja2dyb3VuZCAoV2luLCBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSk7CisgICBlbmQgU2V0X0JhY2tncm91bmQ7CisKKyAgIHByb2NlZHVyZSBDaGFuZ2VfQmFja2dyb3VuZAorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdDaGFuZ2VCa2dkIChXIDogV2luZG93OyBDaCA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXQ2hhbmdlQmtnZCwgIndia2dkIik7CisgICBiZWdpbgorICAgICAgaWYgV0NoYW5nZUJrZ2QgKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIENoYW5nZV9CYWNrZ3JvdW5kOworCisgICBmdW5jdGlvbiBHZXRfQmFja2dyb3VuZCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyCisgICBpcworICAgICAgZnVuY3Rpb24gV2dldGJrZ2QgKFdpbiA6IFdpbmRvdykgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2dldGJrZ2QsICJnZXRia2dkIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIENodHlwZV9Ub19BdHRyQ2hhciAoV2dldGJrZ2QgKFdpbikpOworICAgZW5kIEdldF9CYWNrZ3JvdW5kOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgQ2hhbmdlX0xpbmVzX1N0YXR1cyAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudCA6IGluIFBvc2l0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlIDogaW4gQm9vbGVhbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXdG91Y2hsbiAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIFN0YSA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENudCA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENoZyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXdG91Y2hsbiwgInd0b3VjaGxuIik7CisgICBiZWdpbgorICAgICAgaWYgV3RvdWNobG4gKFdpbiwgQ19JbnQgKFN0YXJ0KSwgQ19JbnQgKENvdW50KSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoQm9vbGVhbidQb3MgKFN0YXRlKSkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIENoYW5nZV9MaW5lc19TdGF0dXM7CisKKyAgIHByb2NlZHVyZSBUb3VjaCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgIGlzCisgICAgICBZIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFggOiBDb2x1bW5fUG9zaXRpb247CisgICBiZWdpbgorICAgICAgR2V0X1NpemUgKFdpbiwgWSwgWCk7CisgICAgICBDaGFuZ2VfTGluZXNfU3RhdHVzIChXaW4sIDAsIFBvc2l0aXZlIChZKSwgVHJ1ZSk7CisgICBlbmQgVG91Y2g7CisKKyAgIHByb2NlZHVyZSBVbnRvdWNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgIGJlZ2luCisgICAgICBHZXRfU2l6ZSAoV2luLCBZLCBYKTsKKyAgICAgIENoYW5nZV9MaW5lc19TdGF0dXMgKFdpbiwgMCwgUG9zaXRpdmUgKFkpLCBGYWxzZSk7CisgICBlbmQgVW50b3VjaDsKKworICAgcHJvY2VkdXJlIFRvdWNoIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgIFN0YXJ0IDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQ291bnQgOiBpbiBQb3NpdGl2ZSkKKyAgIGlzCisgICBiZWdpbgorICAgICAgQ2hhbmdlX0xpbmVzX1N0YXR1cyAoV2luLCBTdGFydCwgQ291bnQsIFRydWUpOworICAgZW5kIFRvdWNoOworCisgICBmdW5jdGlvbiBJc19Ub3VjaGVkCisgICAgIChXaW4gIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdMaW5lVG91Y2hlZCAoVyA6IFdpbmRvdzsgTCA6IENfSW50KSByZXR1cm4gQ3Vyc2VzX0Jvb2w7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXTGluZVRvdWNoZWQsICJpc19saW5ldG91Y2hlZCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdMaW5lVG91Y2hlZCAoV2luLCBDX0ludCAoTGluZSkpID0gQ3Vyc2VzX0Jvb2xfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgSXNfVG91Y2hlZDsKKworICAgZnVuY3Rpb24gSXNfVG91Y2hlZAorICAgICAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBXV2luVG91Y2hlZCAoVyA6IFdpbmRvdykgcmV0dXJuIEN1cnNlc19Cb29sOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV1dpblRvdWNoZWQsICJpc193aW50b3VjaGVkIik7CisgICBiZWdpbgorICAgICAgaWYgV1dpblRvdWNoZWQgKFdpbikgPSBDdXJzZXNfQm9vbF9GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJc19Ub3VjaGVkOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgQ29weQorICAgICAoU291cmNlX1dpbmRvdyAgICAgICAgICAgIDogaW4gV2luZG93OworICAgICAgRGVzdGluYXRpb25fV2luZG93ICAgICAgIDogaW4gV2luZG93OworICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTm9uX0Rlc3RydWN0aXZlX01vZGUgICAgIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIENvcHl3aW4gKFNyYyA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIERzdCA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgU2xjIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBEdHIgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIERsYyA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgRGJyIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBEcmMgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5kbSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDb3B5d2luLCAiY29weXdpbiIpOworICAgYmVnaW4KKyAgICAgIGlmIENvcHl3aW4gKFNvdXJjZV9XaW5kb3csCisgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbl9XaW5kb3csCisgICAgICAgICAgICAgICAgICBDX0ludCAoU291cmNlX1RvcF9Sb3cpLAorICAgICAgICAgICAgICAgICAgQ19JbnQgKFNvdXJjZV9MZWZ0X0NvbHVtbiksCisgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fVG9wX1JvdyksCisgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fTGVmdF9Db2x1bW4pLAorICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cpLAorICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiksCisgICAgICAgICAgICAgICAgICBCb29sZWFuJ1BvcyAoTm9uX0Rlc3RydWN0aXZlX01vZGUpCisgICAgICAgICAgICAgICAgKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDb3B5OworCisgICBwcm9jZWR1cmUgT3ZlcndyaXRlCisgICAgIChTb3VyY2VfV2luZG93ICAgICAgOiBpbiBXaW5kb3c7CisgICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgOiBpbiBXaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gT3ZlcndyaXRlIChTcmMgOiBXaW5kb3c7IERzdCA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgT3ZlcndyaXRlLCAib3ZlcndyaXRlIik7CisgICBiZWdpbgorICAgICAgaWYgT3ZlcndyaXRlIChTb3VyY2VfV2luZG93LCBEZXN0aW5hdGlvbl9XaW5kb3cpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIE92ZXJ3cml0ZTsKKworICAgcHJvY2VkdXJlIE92ZXJsYXkKKyAgICAgKFNvdXJjZV9XaW5kb3cgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyA6IGluIFdpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBPdmVybGF5IChTcmMgOiBXaW5kb3c7IERzdCA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgT3ZlcmxheSwgIm92ZXJsYXkiKTsKKyAgIGJlZ2luCisgICAgICBpZiBPdmVybGF5IChTb3VyY2VfV2luZG93LCBEZXN0aW5hdGlvbl9XaW5kb3cpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIE92ZXJsYXk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEluc2VydF9EZWxldGVfTGluZXMKKyAgICAgKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmVzIDogaW4gSW50ZWdlciAgICAgICA6PSAxKSAtLSBkZWZhdWx0IGlzIHRvIGluc2VydCBvbmUgbGluZSBhYm92ZQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdpbnNkZWxsbiAoVyA6IFdpbmRvdzsgTiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXaW5zZGVsbG4sICJ3aW5zZGVsbG4iKTsKKyAgIGJlZ2luCisgICAgICBpZiBXaW5zZGVsbG4gKFdpbiwgQ19JbnQgKExpbmVzKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5zZXJ0X0RlbGV0ZV9MaW5lczsKKworICAgcHJvY2VkdXJlIERlbGV0ZV9MaW5lIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgIGJlZ2luCisgICAgICBJbnNlcnRfRGVsZXRlX0xpbmVzIChXaW4sIC0xKTsKKyAgIGVuZCBEZWxldGVfTGluZTsKKworICAgcHJvY2VkdXJlIEluc2VydF9MaW5lIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgaXMKKyAgIGJlZ2luCisgICAgICBJbnNlcnRfRGVsZXRlX0xpbmVzIChXaW4sIDEpOworICAgZW5kIEluc2VydF9MaW5lOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBHZXRfU2l6ZQorICAgICAoV2luICAgICAgICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTnVtYmVyX09mX0xpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgIE51bWJlcl9PZl9Db2x1bW5zIDogb3V0IENvbHVtbl9Db3VudCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRNYXhZIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRNYXhZLCAiZ2V0bWF4eSIpOworCisgICAgICBmdW5jdGlvbiBHZXRNYXhYIChXIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRNYXhYLCAiZ2V0bWF4eCIpOworCisgICAgICBZIDogY29uc3RhbnQgQ19JbnQgOj0gR2V0TWF4WSAoV2luKQorICAgICAgICAgICAgICAgICAgICAgICAgICArIENfSW50IChPZmZzZXRfWFkpOworICAgICAgWCA6IGNvbnN0YW50IENfSW50IDo9IEdldE1heFggKFdpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyBDX0ludCAoT2Zmc2V0X1hZKTsKKyAgIGJlZ2luCisgICAgICBOdW1iZXJfT2ZfTGluZXMgICA6PSBMaW5lX0NvdW50IChZKTsKKyAgICAgIE51bWJlcl9PZl9Db2x1bW5zIDo9IENvbHVtbl9Db3VudCAoWCk7CisgICBlbmQgR2V0X1NpemU7CisKKyAgIHByb2NlZHVyZSBHZXRfV2luZG93X1Bvc2l0aW9uCisgICAgIChXaW4gICAgICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgVG9wX0xlZnRfTGluZSAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICBUb3BfTGVmdF9Db2x1bW4gOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldEJlZ1kgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldEJlZ1ksICJnZXRiZWd5Iik7CisKKyAgICAgIGZ1bmN0aW9uIEdldEJlZ1ggKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldEJlZ1gsICJnZXRiZWd4Iik7CisKKyAgICAgIFkgOiBjb25zdGFudCBDX1Nob3J0IDo9IENfU2hvcnQgKEdldEJlZ1kgKFdpbikpOworICAgICAgWCA6IGNvbnN0YW50IENfU2hvcnQgOj0gQ19TaG9ydCAoR2V0QmVnWCAoV2luKSk7CisgICBiZWdpbgorICAgICAgVG9wX0xlZnRfTGluZSAgIDo9IExpbmVfUG9zaXRpb24gKFkpOworICAgICAgVG9wX0xlZnRfQ29sdW1uIDo9IENvbHVtbl9Qb3NpdGlvbiAoWCk7CisgICBlbmQgR2V0X1dpbmRvd19Qb3NpdGlvbjsKKworICAgcHJvY2VkdXJlIEdldF9DdXJzb3JfUG9zaXRpb24KKyAgICAgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldEN1clkgKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldEN1clksICJnZXRjdXJ5Iik7CisKKyAgICAgIGZ1bmN0aW9uIEdldEN1clggKFcgOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldEN1clgsICJnZXRjdXJ4Iik7CisKKyAgICAgIFkgOiBjb25zdGFudCBDX1Nob3J0IDo9IENfU2hvcnQgKEdldEN1clkgKFdpbikpOworICAgICAgWCA6IGNvbnN0YW50IENfU2hvcnQgOj0gQ19TaG9ydCAoR2V0Q3VyWCAoV2luKSk7CisgICBiZWdpbgorICAgICAgTGluZSAgIDo9IExpbmVfUG9zaXRpb24gKFkpOworICAgICAgQ29sdW1uIDo9IENvbHVtbl9Qb3NpdGlvbiAoWCk7CisgICBlbmQgR2V0X0N1cnNvcl9Qb3NpdGlvbjsKKworICAgcHJvY2VkdXJlIEdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50CisgICAgIChXaW4gICAgICAgICAgICAgICAgOiBpbiAgV2luZG93OworICAgICAgVG9wX0xlZnRfTGluZSAgICAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICBUb3BfTGVmdF9Db2x1bW4gICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgSXNfTm90X0FfU3Vid2luZG93IDogb3V0IEJvb2xlYW4pCisgICBpcworICAgICAgZnVuY3Rpb24gR2V0UGFyWSAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0UGFyWSwgImdldHBhcnkiKTsKKworICAgICAgZnVuY3Rpb24gR2V0UGFyWCAoVyA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0UGFyWCwgImdldHBhcngiKTsKKworICAgICAgWSA6IGNvbnN0YW50IENfSW50IDo9IEdldFBhclkgKFdpbik7CisgICAgICBYIDogY29uc3RhbnQgQ19JbnQgOj0gR2V0UGFyWCAoV2luKTsKKyAgIGJlZ2luCisgICAgICBpZiBZID0gLTEgdGhlbgorICAgICAgICAgVG9wX0xlZnRfTGluZSAgIDo9IExpbmVfUG9zaXRpb24nTGFzdDsKKyAgICAgICAgIFRvcF9MZWZ0X0NvbHVtbiA6PSBDb2x1bW5fUG9zaXRpb24nTGFzdDsKKyAgICAgICAgIElzX05vdF9BX1N1YndpbmRvdyA6PSBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgVG9wX0xlZnRfTGluZSAgIDo9IExpbmVfUG9zaXRpb24gKFkpOworICAgICAgICAgVG9wX0xlZnRfQ29sdW1uIDo9IENvbHVtbl9Qb3NpdGlvbiAoWCk7CisgICAgICAgICBJc19Ob3RfQV9TdWJ3aW5kb3cgOj0gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIE5ld19QYWQgKExpbmVzICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgICAgIGZ1bmN0aW9uIE5ld3BhZCAoTGluZXMgOiBDX0ludDsgQ29sdW1ucyA6IENfSW50KSByZXR1cm4gV2luZG93OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTmV3cGFkLCAibmV3cGFkIik7CisKKyAgICAgIFcgOiBXaW5kb3c7CisgICBiZWdpbgorICAgICAgVyA6PSBOZXdwYWQgKENfSW50IChMaW5lcyksIENfSW50IChDb2x1bW5zKSk7CisgICAgICBpZiBXID0gTnVsbF9XaW5kb3cgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBXOworICAgZW5kIE5ld19QYWQ7CisKKyAgIGZ1bmN0aW9uIFN1Yl9QYWQKKyAgICAgKFBhZCAgICAgICAgICAgICAgICAgICA6IFdpbmRvdzsKKyAgICAgIE51bWJlcl9PZl9MaW5lcyAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gU3VicGFkCisgICAgICAgIChQYWQgICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICAgICBOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBDX0ludDsKKyAgICAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENfSW50OworICAgICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogQ19JbnQ7CisgICAgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDX0ludCkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFN1YnBhZCwgInN1YnBhZCIpOworCisgICAgICBXIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIFcgOj0gU3VicGFkIChQYWQsCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9MaW5lcyksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9Db2x1bW5zKSwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoRmlyc3RfTGluZV9Qb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKEZpcnN0X0NvbHVtbl9Qb3NpdGlvbikpOworICAgICAgaWYgVyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBTdWJfUGFkOworCisgICBwcm9jZWR1cmUgUmVmcmVzaAorICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93OworICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFByZWZyZXNoCisgICAgICAgIChQYWQgICAgICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICAgICBTb3VyY2VfVG9wX1JvdyAgICAgICAgICAgOiBDX0ludDsKKyAgICAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IENfSW50OworICAgICAgICAgRGVzdGluYXRpb25fVG9wX1JvdyAgICAgIDogQ19JbnQ7CisgICAgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBDX0ludDsKKyAgICAgICAgIERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cgICA6IENfSW50OworICAgICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFByZWZyZXNoLCAicHJlZnJlc2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBQcmVmcmVzaCAoUGFkLAorICAgICAgICAgICAgICAgICAgIENfSW50IChTb3VyY2VfVG9wX1JvdyksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKFNvdXJjZV9MZWZ0X0NvbHVtbiksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX1RvcF9Sb3cpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cpLAorICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9SaWdodF9Db2x1bW4pKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZWZyZXNoOworCisgICBwcm9jZWR1cmUgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZQorICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93OworICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFBub3V0cmVmcmVzaAorICAgICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogV2luZG93OworICAgICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogQ19JbnQ7CisgICAgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBDX0ludDsKKyAgICAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IENfSW50OworICAgICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogQ19JbnQ7CisgICAgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBDX0ludDsKKyAgICAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQbm91dHJlZnJlc2gsICJwbm91dHJlZnJlc2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBQbm91dHJlZnJlc2ggKFBhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKFNvdXJjZV9Ub3BfUm93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKFNvdXJjZV9MZWZ0X0NvbHVtbiksCisgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChEZXN0aW5hdGlvbl9Ub3BfUm93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX0xlZnRfQ29sdW1uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKERlc3RpbmF0aW9uX0JvdHRvbV9Sb3cpLAorICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKKworICAgcHJvY2VkdXJlIEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0CisgICAgIChQYWQgOiBpbiBXaW5kb3c7CisgICAgICBDaCAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBQZWNob2NoYXIgKFBhZCA6IFdpbmRvdzsgQ2ggOiBDX0NodHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUGVjaG9jaGFyLCAicGVjaG9jaGFyIik7CisgICBiZWdpbgorICAgICAgaWYgUGVjaG9jaGFyIChQYWQsIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDsKKworICAgcHJvY2VkdXJlIEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0CisgICAgIChQYWQgOiBpbiBXaW5kb3c7CisgICAgICBDaCAgOiBpbiBDaGFyYWN0ZXIpCisgICBpcworICAgYmVnaW4KKyAgICAgIEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0CisgICAgICAgIChQYWQsCisgICAgICAgICBBdHRyaWJ1dGVkX0NoYXJhY3RlcicoQ2ggICAgPT4gQ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8pKTsKKyAgIGVuZCBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNjcm9sbCAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IGluIEludGVnZXIgOj0gMSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBXc2NybCAoV2luIDogV2luZG93OyBOIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdzY3JsLCAid3NjcmwiKTsKKworICAgYmVnaW4KKyAgICAgIGlmIFdzY3JsIChXaW4sIENfSW50IChBbW91bnQpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTY3JvbGw7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIERlbGV0ZV9DaGFyYWN0ZXIgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICBpcworICAgICAgZnVuY3Rpb24gV2RlbGNoIChXaW4gOiBXaW5kb3cpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdkZWxjaCwgIndkZWxjaCIpOworICAgYmVnaW4KKyAgICAgIGlmIFdkZWxjaCAoV2luKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBEZWxldGVfQ2hhcmFjdGVyOworCisgICBwcm9jZWR1cmUgRGVsZXRlX0NoYXJhY3RlcgorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gTXZ3ZGVsY2ggKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMaW4gOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTXZ3ZGVsY2gsICJtdndkZWxjaCIpOworICAgYmVnaW4KKyAgICAgIGlmIE12d2RlbGNoIChXaW4sIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIERlbGV0ZV9DaGFyYWN0ZXI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIFBlZWsgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpCisgICAgIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdpbmNoIChXaW4gOiBXaW5kb3cpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdpbmNoLCAid2luY2giKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2h0eXBlX1RvX0F0dHJDaGFyIChXaW5jaCAoV2luKSk7CisgICBlbmQgUGVlazsKKworICAgZnVuY3Rpb24gUGVlaworICAgICAoV2luICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBBdHRyaWJ1dGVkX0NoYXJhY3RlcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE12d2luY2ggKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbiA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgQ29sIDogQ19JbnQpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE12d2luY2gsICJtdndpbmNoIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIENodHlwZV9Ub19BdHRyQ2hhciAoTXZ3aW5jaCAoV2luLCBDX0ludCAoTGluZSksIENfSW50IChDb2x1bW4pKSk7CisgICBlbmQgUGVlazsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdpbnNjaCAoV2luIDogV2luZG93OyBDaCA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXaW5zY2gsICJ3aW5zY2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBXaW5zY2ggKFdpbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEluc2VydDsKKworICAgcHJvY2VkdXJlIEluc2VydAorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBDaCAgICAgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNdndpbnNjaCAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIExpbiA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbCA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgIENoICA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNdndpbnNjaCwgIm12d2luc2NoIik7CisgICBiZWdpbgorICAgICAgaWYgTXZ3aW5zY2ggKFdpbiwKKyAgICAgICAgICAgICAgICAgICBDX0ludCAoTGluZSksCisgICAgICAgICAgICAgICAgICAgQ19JbnQgKENvbHVtbiksCisgICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEluc2VydDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEluc2VydCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpCisgICBpcworICAgICAgZnVuY3Rpb24gV2luc25zdHIgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgIExlbiA6IEludGVnZXIgOj0gLTEpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdpbnNuc3RyLCAid2luc25zdHIiKTsKKworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChTdHIsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIFdpbnNuc3RyIChXaW4sIFR4dCwgTGVuKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJbnNlcnQ7CisKKyAgIHByb2NlZHVyZSBJbnNlcnQKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgU3RyICAgIDogaW4gU3RyaW5nOworICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNdndpbnNuc3RyIChXaW4gICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyICAgIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbiAgICA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNdndpbnNuc3RyLCAibXZ3aW5zbnN0ciIpOworCisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIFN0cidMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKFN0ciwgVHh0LCBMZW5ndGgpOworICAgICAgaWYgTXZ3aW5zbnN0ciAoV2luLCBDX0ludCAoTGluZSksIENfSW50IChDb2x1bW4pLCBUeHQsIENfSW50IChMZW4pKQorICAgICAgICA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJbnNlcnQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBQZWVrIChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgU3RyaW5nOworICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdpbm5zdHIgKFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICBMZW4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2lubnN0ciwgIndpbm5zdHIiKTsKKworICAgICAgTiAgIDogSW50ZWdlciA6PSBMZW47CisgICAgICBUeHQgOiBjaGFyX2FycmF5ICgwIC4uIFN0cidMZW5ndGgpOworICAgICAgQ250IDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBpZiBOIDwgMCB0aGVuCisgICAgICAgICBOIDo9IFN0cidMZW5ndGg7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBOID4gU3RyJ0xlbmd0aCB0aGVuCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworICAgICAgVHh0ICgwKSA6PSBJbnRlcmZhY2VzLkMuY2hhcidGaXJzdDsKKyAgICAgIGlmIFdpbm5zdHIgKFdpbiwgVHh0LCBDX0ludCAoTikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgVG9fQWRhIChUeHQsIFN0ciwgQ250LCBUcnVlKTsKKyAgICAgIGlmIENudCA8IFN0cidMZW5ndGggdGhlbgorICAgICAgICAgU3RyICgoU3RyJ0ZpcnN0ICsgQ250KSAuLiBTdHInTGFzdCkgOj0gKG90aGVycyA9PiAnICcpOworICAgICAgZW5kIGlmOworICAgZW5kIFBlZWs7CisKKyAgIHByb2NlZHVyZSBQZWVrCisgICAgIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluICBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFN0ciAgICA6IG91dCBTdHJpbmc7CisgICAgICBMZW4gICAgOiBpbiAgSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKKyAgICAgIFBlZWsgKFdpbiwgU3RyLCBMZW4pOworICAgZW5kIFBlZWs7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBQZWVrCisgICAgIChXaW4gOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFN0ciA6IG91dCBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdpbmNobnN0ciAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaHR5cGVfYXJyYXk7ICAgICAgICAgICAgIC0tIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICBMZW4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2luY2huc3RyLCAid2luY2huc3RyIik7CisKKyAgICAgIE4gICA6IEludGVnZXIgOj0gTGVuOworICAgICAgVHh0IDogY29uc3RhbnQgY2h0eXBlX2FycmF5ICgwIC4uIFN0cidMZW5ndGgpCisgICAgICAgICAgOj0gKDAgPT4gRGVmYXVsdF9DaGFyYWN0ZXIpOworICAgICAgQ250IDogTmF0dXJhbCA6PSAwOworICAgYmVnaW4KKyAgICAgIGlmIE4gPCAwIHRoZW4KKyAgICAgICAgIE4gOj0gU3RyJ0xlbmd0aDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIE4gPiBTdHInTGVuZ3RoIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBXaW5jaG5zdHIgKFdpbiwgVHh0LCBDX0ludCAoTikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgZm9yIFRvIGluIFN0cidSYW5nZSBsb29wCisgICAgICAgICBleGl0IHdoZW4gVHh0IChzaXplX3QgKENudCkpID0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICAgICBTdHIgKFRvKSA6PSBUeHQgKHNpemVfdCAoQ250KSk7CisgICAgICAgICBDbnQgOj0gQ250ICsgMTsKKyAgICAgIGVuZCBsb29wOworICAgICAgaWYgQ250IDwgU3RyJ0xlbmd0aCB0aGVuCisgICAgICAgICBTdHIgKChTdHInRmlyc3QgKyBDbnQpIC4uIFN0cidMYXN0KSA6PQorICAgICAgICAgICAob3RoZXJzID0+IChDaCA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICAgICBlbmQgaWY7CisgICBlbmQgUGVlazsKKworICAgcHJvY2VkdXJlIFBlZWsKKyAgICAgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiAgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgU3RyICAgIDogb3V0IEF0dHJpYnV0ZWRfU3RyaW5nOworICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSkKKyAgIGlzCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgTGluZSwgQ29sdW1uKTsKKyAgICAgIFBlZWsgKFdpbiwgU3RyLCBMZW4pOworICAgZW5kIFBlZWs7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdnZXRuc3RyIChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMZW4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2dldG5zdHIsICJ3Z2V0bnN0ciIpOworCisgICAgICBOICAgOiBJbnRlZ2VyIDo9IExlbjsKKyAgICAgIFR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gU3RyJ0xlbmd0aCk7CisgICAgICBDbnQgOiBOYXR1cmFsOworICAgYmVnaW4KKyAgICAgIGlmIE4gPCAwIHRoZW4KKyAgICAgICAgIE4gOj0gU3RyJ0xlbmd0aDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIE4gPiBTdHInTGVuZ3RoIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisgICAgICBUeHQgKDApIDo9IEludGVyZmFjZXMuQy5jaGFyJ0ZpcnN0OworICAgICAgaWYgV2dldG5zdHIgKFdpbiwgVHh0LCBDX0ludCAoTikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgVG9fQWRhIChUeHQsIFN0ciwgQ250LCBUcnVlKTsKKyAgICAgIGlmIENudCA8IFN0cidMZW5ndGggdGhlbgorICAgICAgICAgU3RyICgoU3RyJ0ZpcnN0ICsgQ250KSAuLiBTdHInTGFzdCkgOj0gKG90aGVycyA9PiAnICcpOworICAgICAgZW5kIGlmOworICAgZW5kIEdldDsKKworICAgcHJvY2VkdXJlIEdldAorICAgICAoV2luICAgIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiAgTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluICBDb2x1bW5fUG9zaXRpb247CisgICAgICBTdHIgICAgOiBvdXQgU3RyaW5nOworICAgICAgTGVuICAgIDogaW4gIEludGVnZXIgOj0gLTEpCisgICBpcworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChXaW4sIExpbmUsIENvbHVtbik7CisgICAgICBHZXQgKFdpbiwgU3RyLCBMZW4pOworICAgZW5kIEdldDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEluaXRfU29mdF9MYWJlbF9LZXlzCisgICAgIChGb3JtYXQgOiBpbiBTb2Z0X0xhYmVsX0tleV9Gb3JtYXQgOj0gVGhyZWVfVHdvX1RocmVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19Jbml0IChGbXQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0luaXQsICJzbGtfaW5pdCIpOworICAgYmVnaW4KKyAgICAgIGlmIFNsa19Jbml0IChTb2Z0X0xhYmVsX0tleV9Gb3JtYXQnUG9zIChGb3JtYXQpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJbml0X1NvZnRfTGFiZWxfS2V5czsKKworICAgcHJvY2VkdXJlIFNldF9Tb2Z0X0xhYmVsX0tleSAoTGFiZWwgOiBpbiBMYWJlbF9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0ICA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZtdCAgIDogaW4gTGFiZWxfSnVzdGlmaWNhdGlvbiA6PSBMZWZ0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19TZXQgKExhYmVsIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBUeHQgICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICBGbXQgICA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfU2V0LCAic2xrX3NldCIpOworCisgICAgICBUeHQgOiBjaGFyX2FycmF5ICgwIC4uIFRleHQnTGVuZ3RoKTsKKyAgICAgIExlbiA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChUZXh0LCBUeHQsIExlbik7CisgICAgICBpZiBTbGtfU2V0IChDX0ludCAoTGFiZWwpLCBUeHQsCisgICAgICAgICAgICAgICAgICBDX0ludCAoTGFiZWxfSnVzdGlmaWNhdGlvbidQb3MgKEZtdCkpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfU29mdF9MYWJlbF9LZXk7CisKKyAgIHByb2NlZHVyZSBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5cworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19SZWZyZXNoIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19SZWZyZXNoLCAic2xrX3JlZnJlc2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfUmVmcmVzaCA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5czsKKworICAgcHJvY2VkdXJlIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlCisgICBpcworICAgICAgZnVuY3Rpb24gU2xrX05vdXRyZWZyZXNoIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19Ob3V0cmVmcmVzaCwgInNsa19ub3V0cmVmcmVzaCIpOworICAgYmVnaW4KKyAgICAgIGlmIFNsa19Ob3V0cmVmcmVzaCA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKworICAgcHJvY2VkdXJlIEdldF9Tb2Z0X0xhYmVsX0tleSAoTGFiZWwgOiBpbiBMYWJlbF9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0ICA6IG91dCBTdHJpbmcpCisgICBpcworICAgICAgZnVuY3Rpb24gU2xrX0xhYmVsIChMYWJlbCA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0xhYmVsLCAic2xrX2xhYmVsIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKFNsa19MYWJlbCAoQ19JbnQgKExhYmVsKSksIFRleHQpOworICAgZW5kIEdldF9Tb2Z0X0xhYmVsX0tleTsKKworICAgZnVuY3Rpb24gR2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbCA6IGluIExhYmVsX051bWJlcikgcmV0dXJuIFN0cmluZworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19MYWJlbCAoTGFiZWwgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19MYWJlbCwgInNsa19sYWJlbCIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoU2xrX0xhYmVsIChDX0ludCAoTGFiZWwpKSk7CisgICBlbmQgR2V0X1NvZnRfTGFiZWxfS2V5OworCisgICBwcm9jZWR1cmUgQ2xlYXJfU29mdF9MYWJlbF9LZXlzCisgICBpcworICAgICAgZnVuY3Rpb24gU2xrX0NsZWFyIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19DbGVhciwgInNsa19jbGVhciIpOworICAgYmVnaW4KKyAgICAgIGlmIFNsa19DbGVhciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDbGVhcl9Tb2Z0X0xhYmVsX0tleXM7CisKKyAgIHByb2NlZHVyZSBSZXN0b3JlX1NvZnRfTGFiZWxfS2V5cworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19SZXN0b3JlIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19SZXN0b3JlLCAic2xrX3Jlc3RvcmUiKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfUmVzdG9yZSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSZXN0b3JlX1NvZnRfTGFiZWxfS2V5czsKKworICAgcHJvY2VkdXJlIFRvdWNoX1NvZnRfTGFiZWxfS2V5cworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19Ub3VjaCByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfVG91Y2gsICJzbGtfdG91Y2giKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfVG91Y2ggPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgVG91Y2hfU29mdF9MYWJlbF9LZXlzOworCisgICBwcm9jZWR1cmUgU3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMKKyAgICAgKEF0dHIgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldDsKKyAgICAgIE9uICAgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gU2xrX0F0dHJvbiAoQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0F0dHJvbiwgInNsa19hdHRyb24iKTsKKyAgICAgIGZ1bmN0aW9uIFNsa19BdHRyb2ZmIChDaCA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfQXR0cm9mZiwgInNsa19hdHRyb2ZmIik7CisKKyAgICAgIEVyciA6IENfSW50OworICAgICAgQ2ggIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QpOworICAgYmVnaW4KKyAgICAgIGlmIE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSBTbGtfQXR0cm9uICAoQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgICAgZWxzZQorICAgICAgICAgRXJyIDo9IFNsa19BdHRyb2ZmIChBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM7CisKKyAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcworICAgICAoQXR0ciAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTbGtfQXR0cnNldCAoQ2ggOiBDX0NodHlwZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0F0dHJzZXQsICJzbGtfYXR0cnNldCIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3IpOworICAgYmVnaW4KKyAgICAgIGlmIFNsa19BdHRyc2V0IChBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM7CisKKyAgIGZ1bmN0aW9uIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19BdHRyIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNsa19BdHRyLCAic2xrX2F0dHIiKTsKKworICAgICAgQXR0ciA6IGNvbnN0YW50IENfQ2h0eXBlIDo9IFNsa19BdHRyOworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaHR5cGVfVG9fQXR0ckNoYXIgKEF0dHIpLkF0dHI7CisgICBlbmQgR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM7CisKKyAgIGZ1bmN0aW9uIEdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIHJldHVybiBDb2xvcl9QYWlyCisgICBpcworICAgICAgZnVuY3Rpb24gU2xrX0F0dHIgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2xrX0F0dHIsICJzbGtfYXR0ciIpOworCisgICAgICBBdHRyIDogY29uc3RhbnQgQ19DaHR5cGUgOj0gU2xrX0F0dHI7CisgICBiZWdpbgorICAgICAgcmV0dXJuIENodHlwZV9Ub19BdHRyQ2hhciAoQXR0cikuQ29sb3I7CisgICBlbmQgR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM7CisKKyAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXlfQ29sb3IgKFBhaXIgOiBpbiBDb2xvcl9QYWlyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNsa19Db2xvciAoQ29sb3IgOiBpbiBDX1Nob3J0KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTbGtfQ29sb3IsICJzbGtfY29sb3IiKTsKKyAgIGJlZ2luCisgICAgICBpZiBTbGtfQ29sb3IgKENfU2hvcnQgKFBhaXIpKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfU29mdF9MYWJlbF9LZXlfQ29sb3I7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEVuYWJsZV9LZXkgKEtleSAgICA6IGluIFNwZWNpYWxfS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEtleW9rIChLZXljb2RlIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgT25fT2ZmICA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBLZXlvaywgImtleW9rIik7CisgICBiZWdpbgorICAgICAgaWYgS2V5b2sgKENfSW50IChLZXkpLCBDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKEVuYWJsZSkpKQorICAgICAgICA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBFbmFibGVfS2V5OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgRGVmaW5lX0tleSAoRGVmaW5pdGlvbiA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgIDogaW4gU3BlY2lhbF9LZXlfQ29kZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBEZWZrZXkgKERlZiA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgIEtleSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEZWZrZXksICJkZWZpbmVfa2V5Iik7CisKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gRGVmaW5pdGlvbidMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKERlZmluaXRpb24sIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIERlZmtleSAoVHh0LCBDX0ludCAoS2V5KSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgRGVmaW5lX0tleTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFVuX0NvbnRyb2wgKENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBTdHJpbmcpCisgICBpcworICAgICAgZnVuY3Rpb24gVW5jdHJsIChDaCA6IENfQ2h0eXBlKSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgVW5jdHJsLCAidW5jdHJsIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKFVuY3RybCAoQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpLCBTdHIpOworICAgZW5kIFVuX0NvbnRyb2w7CisKKyAgIGZ1bmN0aW9uIFVuX0NvbnRyb2wgKENoIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBVbmN0cmwgKENoIDogQ19DaHR5cGUpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBVbmN0cmwsICJ1bmN0cmwiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKFVuY3RybCAoQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpKTsKKyAgIGVuZCBVbl9Db250cm9sOworCisgICBwcm9jZWR1cmUgRGVsYXlfT3V0cHV0IChNc2VjcyA6IGluIE5hdHVyYWwpCisgICBpcworICAgICAgZnVuY3Rpb24gRGVsYXlvdXRwdXQgKE1zZWNzIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERlbGF5b3V0cHV0LCAiZGVsYXlfb3V0cHV0Iik7CisgICBiZWdpbgorICAgICAgaWYgRGVsYXlvdXRwdXQgKENfSW50IChNc2VjcykpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIERlbGF5X091dHB1dDsKKworICAgcHJvY2VkdXJlIEZsdXNoX0lucHV0CisgICBpcworICAgICAgZnVuY3Rpb24gRmx1c2hpbnAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmx1c2hpbnAsICJmbHVzaGlucCIpOworICAgYmVnaW4KKyAgICAgIGlmIEZsdXNoaW5wID0gQ3Vyc2VzX0VyciB0aGVuICAtLSBkb2N1IHNheXMgdGhhdCBuZXZlciBoYXBwZW5zLCBidXQuLi4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgRmx1c2hfSW5wdXQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIEJhdWRyYXRlIHJldHVybiBOYXR1cmFsCisgICBpcworICAgICAgZnVuY3Rpb24gQmF1ZCByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBCYXVkLCAiYmF1ZHJhdGUiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTmF0dXJhbCAoQmF1ZCk7CisgICBlbmQgQmF1ZHJhdGU7CisKKyAgIGZ1bmN0aW9uIEVyYXNlX0NoYXJhY3RlciByZXR1cm4gQ2hhcmFjdGVyCisgICBpcworICAgICAgZnVuY3Rpb24gRXJhc2VjaGFyIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEVyYXNlY2hhciwgImVyYXNlY2hhciIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaGFyYWN0ZXInVmFsIChFcmFzZWNoYXIpOworICAgZW5kIEVyYXNlX0NoYXJhY3RlcjsKKworICAgZnVuY3Rpb24gS2lsbF9DaGFyYWN0ZXIgcmV0dXJuIENoYXJhY3RlcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEtpbGxjaGFyIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEtpbGxjaGFyLCAia2lsbGNoYXIiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2hhcmFjdGVyJ1ZhbCAoS2lsbGNoYXIpOworICAgZW5kIEtpbGxfQ2hhcmFjdGVyOworCisgICBmdW5jdGlvbiBIYXNfSW5zZXJ0X0NoYXJhY3RlciByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEhhc19JYyByZXR1cm4gQ3Vyc2VzX0Jvb2w7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBIYXNfSWMsICJoYXNfaWMiKTsKKyAgIGJlZ2luCisgICAgICBpZiBIYXNfSWMgPSBDdXJzZXNfQm9vbF9GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBIYXNfSW5zZXJ0X0NoYXJhY3RlcjsKKworICAgZnVuY3Rpb24gSGFzX0luc2VydF9MaW5lIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSGFzX0lsIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEhhc19JbCwgImhhc19pbCIpOworICAgYmVnaW4KKyAgICAgIGlmIEhhc19JbCA9IEN1cnNlc19Cb29sX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIEhhc19JbnNlcnRfTGluZTsKKworICAgZnVuY3Rpb24gU3VwcG9ydGVkX0F0dHJpYnV0ZXMgcmV0dXJuIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0CisgICBpcworICAgICAgZnVuY3Rpb24gVGVybWF0dHJzIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFRlcm1hdHRycywgInRlcm1hdHRycyIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoVGVybWF0dHJzKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2guQXR0cjsKKyAgIGVuZCBTdXBwb3J0ZWRfQXR0cmlidXRlczsKKworICAgcHJvY2VkdXJlIExvbmdfTmFtZSAoTmFtZSA6IG91dCBTdHJpbmcpCisgICBpcworICAgICAgZnVuY3Rpb24gTG9uZ25hbWUgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIExvbmduYW1lLCAibG9uZ25hbWUiKTsKKyAgIGJlZ2luCisgICAgICBGaWxsX1N0cmluZyAoTG9uZ25hbWUsIE5hbWUpOworICAgZW5kIExvbmdfTmFtZTsKKworICAgZnVuY3Rpb24gTG9uZ19OYW1lIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBMb25nbmFtZSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTG9uZ25hbWUsICJsb25nbmFtZSIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoTG9uZ25hbWUpOworICAgZW5kIExvbmdfTmFtZTsKKworICAgcHJvY2VkdXJlIFRlcm1pbmFsX05hbWUgKE5hbWUgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFRlcm1uYW1lIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBUZXJtbmFtZSwgInRlcm1uYW1lIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKFRlcm1uYW1lLCBOYW1lKTsKKyAgIGVuZCBUZXJtaW5hbF9OYW1lOworCisgICBmdW5jdGlvbiBUZXJtaW5hbF9OYW1lIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBUZXJtbmFtZSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgVGVybW5hbWUsICJ0ZXJtbmFtZSIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoVGVybW5hbWUpOworICAgZW5kIFRlcm1pbmFsX05hbWU7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBJbml0X1BhaXIgKFBhaXIgOiBpbiBSZWRlZmluYWJsZV9Db2xvcl9QYWlyOworICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSA6IGluIENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBpbiBDb2xvcl9OdW1iZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gSW5pdHBhaXIgKFBhaXIgOiBDX1Nob3J0OworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBDX1Nob3J0OworICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBDX1Nob3J0KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJbml0cGFpciwgImluaXRfcGFpciIpOworICAgYmVnaW4KKyAgICAgIGlmIEludGVnZXIgKFBhaXIpID49IE51bWJlcl9PZl9Db2xvcl9QYWlycyB0aGVuCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworICAgICAgaWYgSW50ZWdlciAoRm9yZSkgPj0gTnVtYmVyX09mX0NvbG9ycyBvciBlbHNlCisgICAgICAgICBJbnRlZ2VyIChCYWNrKSA+PSBOdW1iZXJfT2ZfQ29sb3JzIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBJbml0cGFpciAoQ19TaG9ydCAoUGFpciksIENfU2hvcnQgKEZvcmUpLCBDX1Nob3J0IChCYWNrKSkKKyAgICAgICAgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5pdF9QYWlyOworCisgICBwcm9jZWR1cmUgUGFpcl9Db250ZW50IChQYWlyIDogaW4gQ29sb3JfUGFpcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBvdXQgQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayA6IG91dCBDb2xvcl9OdW1iZXIpCisgICBpcworICAgICAgdHlwZSBDX1Nob3J0X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIENfU2hvcnQ7CisgICAgICBmdW5jdGlvbiBQYWlyY29udGVudCAoUGFpciA6IENfU2hvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnAgICA6IENfU2hvcnRfQWNjZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJwICAgOiBDX1Nob3J0X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUGFpcmNvbnRlbnQsICJwYWlyX2NvbnRlbnQiKTsKKworICAgICAgRiwgQiA6IGFsaWFzZWQgQ19TaG9ydDsKKyAgIGJlZ2luCisgICAgICBpZiBQYWlyY29udGVudCAoQ19TaG9ydCAoUGFpciksIEYnQWNjZXNzLCBCJ0FjY2VzcykgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICBGb3JlIDo9IENvbG9yX051bWJlciAoRik7CisgICAgICAgICBCYWNrIDo9IENvbG9yX051bWJlciAoQik7CisgICAgICBlbmQgaWY7CisgICBlbmQgUGFpcl9Db250ZW50OworCisgICBmdW5jdGlvbiBIYXNfQ29sb3JzIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSGFzY29sb3JzIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEhhc2NvbG9ycywgImhhc19jb2xvcnMiKTsKKyAgIGJlZ2luCisgICAgICBpZiBIYXNjb2xvcnMgPSBDdXJzZXNfQm9vbF9GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBIYXNfQ29sb3JzOworCisgICBwcm9jZWR1cmUgSW5pdF9Db2xvciAoQ29sb3IgOiBpbiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgUmVkICAgOiBpbiBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgR3JlZW4gOiBpbiBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZSAgOiBpbiBSR0JfVmFsdWUpCisgICBpcworICAgICAgZnVuY3Rpb24gSW5pdGNvbG9yIChDb2wgICA6IENfU2hvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogQ19TaG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlZW4gOiBDX1Nob3J0OworICAgICAgICAgICAgICAgICAgICAgICAgICBCbHVlICA6IENfU2hvcnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEluaXRjb2xvciwgImluaXRfY29sb3IiKTsKKyAgIGJlZ2luCisgICAgICBpZiBJbml0Y29sb3IgKENfU2hvcnQgKENvbG9yKSwgQ19TaG9ydCAoUmVkKSwgQ19TaG9ydCAoR3JlZW4pLAorICAgICAgICAgICAgICAgICAgICBDX1Nob3J0IChCbHVlKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5pdF9Db2xvcjsKKworICAgZnVuY3Rpb24gQ2FuX0NoYW5nZV9Db2xvciByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIENhbmNoYW5nZWNvbG9yIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENhbmNoYW5nZWNvbG9yLCAiY2FuX2NoYW5nZV9jb2xvciIpOworICAgYmVnaW4KKyAgICAgIGlmIENhbmNoYW5nZWNvbG9yID0gQ3Vyc2VzX0Jvb2xfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2FuX0NoYW5nZV9Db2xvcjsKKworICAgcHJvY2VkdXJlIENvbG9yX0NvbnRlbnQgKENvbG9yIDogaW4gIENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWQgICA6IG91dCBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlZW4gOiBvdXQgUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWUgIDogb3V0IFJHQl9WYWx1ZSkKKyAgIGlzCisgICAgICB0eXBlIENfU2hvcnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19TaG9ydDsKKworICAgICAgZnVuY3Rpb24gQ29sb3Jjb250ZW50IChDb2xvciA6IENfU2hvcnQ7IFIsIEcsIEIgOiBDX1Nob3J0X0FjY2VzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ29sb3Jjb250ZW50LCAiY29sb3JfY29udGVudCIpOworCisgICAgICBSLCBHLCBCIDogYWxpYXNlZCBDX1Nob3J0OworICAgYmVnaW4KKyAgICAgIGlmIENvbG9yY29udGVudCAoQ19TaG9ydCAoQ29sb3IpLCBSJ0FjY2VzcywgRydBY2Nlc3MsIEInQWNjZXNzKSA9CisgICAgICAgIEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIFJlZCAgIDo9IFJHQl9WYWx1ZSAoUik7CisgICAgICAgICBHcmVlbiA6PSBSR0JfVmFsdWUgKEcpOworICAgICAgICAgQmx1ZSAgOj0gUkdCX1ZhbHVlIChCKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBDb2xvcl9Db250ZW50OworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTYXZlX0N1cnNlc19Nb2RlIChNb2RlIDogaW4gQ3Vyc2VzX01vZGUpCisgICBpcworICAgICAgZnVuY3Rpb24gRGVmX1Byb2dfTW9kZSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEZWZfUHJvZ19Nb2RlLCAiZGVmX3Byb2dfbW9kZSIpOworICAgICAgZnVuY3Rpb24gRGVmX1NoZWxsX01vZGUgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRGVmX1NoZWxsX01vZGUsICJkZWZfc2hlbGxfbW9kZSIpOworCisgICAgICBFcnIgOiBDX0ludDsKKyAgIGJlZ2luCisgICAgICBjYXNlIE1vZGUgaXMKKyAgICAgICAgIHdoZW4gQ3Vyc2VzID0+IEVyciA6PSBEZWZfUHJvZ19Nb2RlOworICAgICAgICAgd2hlbiBTaGVsbCAgPT4gRXJyIDo9IERlZl9TaGVsbF9Nb2RlOworICAgICAgZW5kIGNhc2U7CisgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2F2ZV9DdXJzZXNfTW9kZTsKKworICAgcHJvY2VkdXJlIFJlc2V0X0N1cnNlc19Nb2RlIChNb2RlIDogaW4gQ3Vyc2VzX01vZGUpCisgICBpcworICAgICAgZnVuY3Rpb24gUmVzZXRfUHJvZ19Nb2RlIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFJlc2V0X1Byb2dfTW9kZSwgInJlc2V0X3Byb2dfbW9kZSIpOworICAgICAgZnVuY3Rpb24gUmVzZXRfU2hlbGxfTW9kZSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZXNldF9TaGVsbF9Nb2RlLCAicmVzZXRfc2hlbGxfbW9kZSIpOworCisgICAgICBFcnIgOiBDX0ludDsKKyAgIGJlZ2luCisgICAgICBjYXNlIE1vZGUgaXMKKyAgICAgICAgIHdoZW4gQ3Vyc2VzID0+IEVyciA6PSBSZXNldF9Qcm9nX01vZGU7CisgICAgICAgICB3aGVuIFNoZWxsICA9PiBFcnIgOj0gUmVzZXRfU2hlbGxfTW9kZTsKKyAgICAgIGVuZCBjYXNlOworICAgICAgaWYgRXJyID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFJlc2V0X0N1cnNlc19Nb2RlOworCisgICBwcm9jZWR1cmUgU2F2ZV9UZXJtaW5hbF9TdGF0ZQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNhdmV0dHkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2F2ZXR0eSwgInNhdmV0dHkiKTsKKyAgIGJlZ2luCisgICAgICBpZiBTYXZldHR5ID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNhdmVfVGVybWluYWxfU3RhdGU7CisKKyAgIHByb2NlZHVyZSBSZXNldF9UZXJtaW5hbF9TdGF0ZQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFJlc2V0dHkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUmVzZXR0eSwgInJlc2V0dHkiKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXNldHR5ID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFJlc2V0X1Rlcm1pbmFsX1N0YXRlOworCisgICBwcm9jZWR1cmUgUmlwX09mZl9MaW5lcyAoTGluZXMgOiBpbiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgIDogaW4gU3Rkc2NyX0luaXRfUHJvYykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBSaXBvZmZsaW5lIChMaW5lcyA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyAgOiBTdGRzY3JfSW5pdF9Qcm9jKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSaXBvZmZsaW5lLCAiX25jX3JpcG9mZmxpbmUiKTsKKyAgIGJlZ2luCisgICAgICBpZiBSaXBvZmZsaW5lIChDX0ludCAoTGluZXMpLCBQcm9jKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBSaXBfT2ZmX0xpbmVzOworCisgICBwcm9jZWR1cmUgU2V0X0N1cnNvcl9WaXNpYmlsaXR5IChWaXNpYmlsaXR5IDogaW4gb3V0IEN1cnNvcl9WaXNpYmlsaXR5KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEN1cnNfU2V0IChDdXJzIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEN1cnNfU2V0LCAiY3Vyc19zZXQiKTsKKworICAgICAgUmVzIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgUmVzIDo9IEN1cnNfU2V0IChDdXJzb3JfVmlzaWJpbGl0eSdQb3MgKFZpc2liaWxpdHkpKTsKKyAgICAgIGlmIFJlcyAvPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIFZpc2liaWxpdHkgOj0gQ3Vyc29yX1Zpc2liaWxpdHknVmFsIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9DdXJzb3JfVmlzaWJpbGl0eTsKKworICAgcHJvY2VkdXJlIE5hcF9NaWxsaV9TZWNvbmRzIChNcyA6IGluIE5hdHVyYWwpCisgICBpcworICAgICAgZnVuY3Rpb24gTmFwbXMgKE1zIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5hcG1zLCAibmFwbXMiKTsKKyAgIGJlZ2luCisgICAgICBpZiBOYXBtcyAoQ19JbnQgKE1zKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgTmFwX01pbGxpX1NlY29uZHM7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1ZGUoYFB1YmxpY19WYXJpYWJsZXMnKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgVHJhbnNmb3JtX0Nvb3JkaW5hdGVzCisgICAgIChXICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gb3V0IExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGlyICAgIDogaW4gVHJhbnNmb3JtX0RpcmVjdGlvbiA6PSBGcm9tX1NjcmVlbikKKyAgIGlzCisgICAgICB0eXBlIEludF9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybSAoVyAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWSwgWCA6IEludF9BY2Nlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERpciAgOiBDdXJzZXNfQm9vbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgVHJhbnNmb3JtLCAid21vdXNlX3RyYWZvIik7CisKKyAgICAgIFggOiBhbGlhc2VkIENfSW50IDo9IENfSW50IChDb2x1bW4pOworICAgICAgWSA6IGFsaWFzZWQgQ19JbnQgOj0gQ19JbnQgKExpbmUpOworICAgICAgRCA6IEN1cnNlc19Cb29sIDo9IEN1cnNlc19Cb29sX0ZhbHNlOworICAgICAgUiA6IENfSW50OworICAgYmVnaW4KKyAgICAgIGlmIERpciA9IFRvX1NjcmVlbiB0aGVuCisgICAgICAgICBEIDo9IDE7CisgICAgICBlbmQgaWY7CisgICAgICBSIDo9IFRyYW5zZm9ybSAoVywgWSdBY2Nlc3MsIFgnQWNjZXNzLCBEKTsKKyAgICAgIGlmIFIgPSBDdXJzZXNfRmFsc2UgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIExpbmUgICA6PSBMaW5lX1Bvc2l0aW9uIChZKTsKKyAgICAgICAgIENvbHVtbiA6PSBDb2x1bW5fUG9zaXRpb24gKFgpOworICAgICAgZW5kIGlmOworICAgZW5kIFRyYW5zZm9ybV9Db29yZGluYXRlczsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFVzZV9EZWZhdWx0X0NvbG9ycyBpcworICAgICAgZnVuY3Rpb24gQ19Vc2VfRGVmYXVsdF9Db2xvcnMgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19Vc2VfRGVmYXVsdF9Db2xvcnMsICJ1c2VfZGVmYXVsdF9jb2xvcnMiKTsKKyAgICAgIEVyciA6IGNvbnN0YW50IENfSW50IDo9IENfVXNlX0RlZmF1bHRfQ29sb3JzOworICAgYmVnaW4KKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBVc2VfRGVmYXVsdF9Db2xvcnM7CisKKyAgIHByb2NlZHVyZSBBc3N1bWVfRGVmYXVsdF9Db2xvcnMgKEZvcmUgOiBDb2xvcl9OdW1iZXIgOj0gRGVmYXVsdF9Db2xvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBDb2xvcl9OdW1iZXIgOj0gRGVmYXVsdF9Db2xvcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBDX0Fzc3VtZV9EZWZhdWx0X0NvbG9ycyAoRm9yZSA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19Bc3N1bWVfRGVmYXVsdF9Db2xvcnMsICJhc3N1bWVfZGVmYXVsdF9jb2xvcnMiKTsKKworICAgICAgRXJyIDogY29uc3RhbnQgQ19JbnQgOj0gQ19Bc3N1bWVfRGVmYXVsdF9Db2xvcnMgKENfSW50IChGb3JlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoQmFjaykpOworICAgYmVnaW4KKyAgICAgIGlmIEVyciA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBBc3N1bWVfRGVmYXVsdF9Db2xvcnM7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIEN1cnNlc19WZXJzaW9uIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBjdXJzZXNfdmVyc2lvbkMgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIGN1cnNlc192ZXJzaW9uQywgImN1cnNlc192ZXJzaW9uIik7CisgICAgICBSZXN1bHQgOiBjb25zdGFudCBjaGFyc19wdHIgOj0gY3Vyc2VzX3ZlcnNpb25DOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoUmVzdWx0KTsKKyAgIGVuZCBDdXJzZXNfVmVyc2lvbjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEN1cnNlc19GcmVlX0FsbCBpcworICAgICAgcHJvY2VkdXJlIGN1cnNlc19mcmVlYWxsOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgY3Vyc2VzX2ZyZWVhbGwsICJfbmNfZnJlZWFsbCIpOworICAgYmVnaW4KKyAgICAgIC0tICBVc2UgdGhpcyBvbmx5IGZvciB0ZXN0aW5nOiB5b3UgY2Fubm90IHVzZSBjdXJzZXMgYWZ0ZXIgY2FsbGluZyBpdCwKKyAgICAgIC0tICBzbyBpdCBoYXMgdG8gYmUgdGhlICJsYXN0IiB0aGluZyBkb25lIGJlZm9yZSBleGl0aW5nIHRoZSBwcm9ncmFtLgorICAgICAgLS0gIFRoaXMgd2lsbCBub3QgcmVhbGx5IGZyZWUgQUxMIG9mIG1lbW9yeSB1c2VkIGJ5IGN1cnNlcy4gIFRoYXQgaXMKKyAgICAgIC0tICBiZWNhdXNlIGl0IGNhbm5vdCBmcmVlIHRoZSBtZW1vcnkgdXNlZCBmb3Igc3Rkb3V0J3Mgc2V0YnVmLiAgVGhlCisgICAgICAtLSAgX25jX2ZyZWVfYW5kX2V4aXQoKSBwcm9jZWR1cmUgY2FuIGRvIHRoYXQsIGJ1dCBpdCBjYW4gYmUgaW52b2tlZAorICAgICAgLS0gIHNhZmVseSBvbmx5IGZyb20gQyAtIGFuZCBhZ2FpbiwgdGhhdCBvbmx5IGFzIHRoZSAibGFzdCIgdGhpbmcgZG9uZQorICAgICAgLS0gIGJlZm9yZSBleGl0aW5nIHRoZSBwcm9ncmFtLgorICAgICAgY3Vyc2VzX2ZyZWVhbGw7CisgICBlbmQgQ3Vyc2VzX0ZyZWVfQWxsOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBVc2VfRXh0ZW5kZWRfTmFtZXMgKEVuYWJsZSA6IEJvb2xlYW4pIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gdXNlX2V4dGVuZGVkX25hbWVzQyAoZSA6IEN1cnNlc19Cb29sKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB1c2VfZXh0ZW5kZWRfbmFtZXNDLCAidXNlX2V4dGVuZGVkX25hbWVzIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9CisgICAgICAgICB1c2VfZXh0ZW5kZWRfbmFtZXNDIChDdXJzZXNfQm9vbCAoQm9vbGVhbidQb3MgKEVuYWJsZSkpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBDX0ludCAoQ3Vyc2VzX0Jvb2xfRmFsc2UpIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIFVzZV9FeHRlbmRlZF9OYW1lczsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNjcmVlbl9EdW1wX1RvX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHNjcl9kdW1wIChmIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgc2NyX2R1bXAsICJzY3JfZHVtcCIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBGaWxlbmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKEZpbGVuYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiBDdXJzZXNfRXJyID0gc2NyX2R1bXAgKFR4dCkgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTY3JlZW5fRHVtcF9Ub19GaWxlOworCisgICBwcm9jZWR1cmUgU2NyZWVuX1Jlc3RvcmVfRnJvbV9GaWxlIChGaWxlbmFtZSA6IGluIFN0cmluZykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBzY3JfcmVzdG9yZSAoZiA6IGNoYXJfYXJyYXkpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHNjcl9yZXN0b3JlLCAic2NyX3Jlc3RvcmUiKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gRmlsZW5hbWUnTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgIGJlZ2luCisgICAgICBUb19DIChGaWxlbmFtZSwgVHh0LCBMZW5ndGgpOworICAgICAgaWYgQ3Vyc2VzX0VyciA9IHNjcl9yZXN0b3JlIChUeHQpICB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZTsKKworICAgcHJvY2VkdXJlIFNjcmVlbl9Jbml0X0Zyb21fRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpCisgICBpcworICAgICAgZnVuY3Rpb24gc2NyX2luaXQgKGYgOiBjaGFyX2FycmF5KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBzY3JfaW5pdCwgInNjcl9pbml0Iik7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIEZpbGVuYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoRmlsZW5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIEN1cnNlc19FcnIgPSBzY3JfaW5pdCAoVHh0KSB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNjcmVlbl9Jbml0X0Zyb21fRmlsZTsKKworICAgcHJvY2VkdXJlIFNjcmVlbl9TZXRfRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpCisgICBpcworICAgICAgZnVuY3Rpb24gc2NyX3NldCAoZiA6IGNoYXJfYXJyYXkpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHNjcl9zZXQsICJzY3Jfc2V0Iik7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIEZpbGVuYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoRmlsZW5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIEN1cnNlc19FcnIgPSBzY3Jfc2V0IChUeHQpIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgU2NyZWVuX1NldF9GaWxlOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUmVzaXplIChXaW4gICAgICAgICAgICAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBOdW1iZXJfT2ZfTGluZXMgICA6IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgaXMKKyAgICAgIGZ1bmN0aW9uIHdyZXNpemUgKHdpbiAgICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHdyZXNpemUpOworICAgYmVnaW4KKyAgICAgIGlmIHdyZXNpemUgKFdpbiwKKyAgICAgICAgICAgICAgICAgIENfSW50IChOdW1iZXJfT2ZfTGluZXMpLAorICAgICAgICAgICAgICAgICAgQ19JbnQgKE51bWJlcl9PZl9Db2x1bW5zKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVzaXplOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzLm00IGIvbmN1cnNlcy01LjcvQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYmM1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHMubTQKQEAgLTAsMCArMSwxNTU5IEBACistLSAgLSotIGFkYSAtKi0KK2RlZmluZShgSFRNTE5BTUUnLGB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtJylkbmwKK2luY2x1ZGUoTTRNQUNSTyktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuNDEgJAorLS0gICREYXRlOiAyMDA3LzA1LzA1IDIwOjMzOjUyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZShgQmFzZV9EZWZzJykKK3dpdGggU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHM7Cit3aXRoIEludGVyZmFjZXMuQzsgICAtLSAgV2UgbmVlZCB0aGlzIGZvciBzb21lIGFzc2VydGlvbnMuCisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcyBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcyk7CitpbmNsdWRlKGBMaW5rZXJfT3B0aW9ucycpCitpbmNsdWRlKGBWZXJzaW9uX0luZm8nKQorICAgdHlwZSBXaW5kb3cgaXMgcHJpdmF0ZTsKKyAgIE51bGxfV2luZG93IDogY29uc3RhbnQgV2luZG93OworCisgICB0eXBlIExpbmVfUG9zaXRpb24gICBpcyBuZXcgTmF0dXJhbDsgLS0gIGxpbmUgY29vcmRpbmF0ZQorICAgdHlwZSBDb2x1bW5fUG9zaXRpb24gaXMgbmV3IE5hdHVyYWw7IC0tICBjb2x1bW4gY29vcmRpbmF0ZQorCisgICBzdWJ0eXBlIExpbmVfQ291bnQgICBpcyBMaW5lX1Bvc2l0aW9uICAgcmFuZ2UgMSAuLiBMaW5lX1Bvc2l0aW9uJ0xhc3Q7CisgICAtLSAgVHlwZSB0byBjb3VudCBsaW5lcy4gV2UgZG8gbm90IGFsbG93IG51bGwgd2luZG93cywgc28gbXVzdCBiZSBwb3NpdGl2ZQorICAgc3VidHlwZSBDb2x1bW5fQ291bnQgaXMgQ29sdW1uX1Bvc2l0aW9uIHJhbmdlIDEgLi4gQ29sdW1uX1Bvc2l0aW9uJ0xhc3Q7CisgICAtLSAgVHlwZSB0byBjb3VudCBjb2x1bW5zLiBXZSBkbyBub3QgYWxsb3cgbnVsbCB3aW5kb3dzLCBzbyBtdXN0IGJlIHBvc2l0aXZlCisKKyAgIHR5cGUgS2V5X0NvZGUgaXMgbmV3IEludGVnZXI7CisgICAtLSAgVGhhdCBpcyBhbnl0aGluZyBpbmNsdWRpbmcgcmVhbCBjaGFyYWN0ZXJzLCBzcGVjaWFsIGtleXMgYW5kIGxvZ2ljYWwKKyAgIC0tICByZXF1ZXN0IGNvZGVzLgorCisgICAtLSAgRklYTUU6IFRoZSAiLTEiIHNob3VsZCBiZSBDdXJzZXNfRXJyCisgICBzdWJ0eXBlIFJlYWxfS2V5X0NvZGUgaXMgS2V5X0NvZGUgcmFuZ2UgLTEgLi4gTTRfS0VZX01BWDsKKyAgIC0tICBUaGlzIGFyZSB0aGUgY29kZXMgdGhhdCBwb3RlbnRpYWxseSByZXByZXNlbnQgYSByZWFsIGtleXN0cm9rZS4KKyAgIC0tICBOb3QgYWxsIGNvZGVzIG1heSBiZSBwb3NzaWJsZSBvbiBhIHNwZWNpZmljIHRlcm1pbmFsLiBUbyBjaGVjayB0aGUKKyAgIC0tICBhdmFpbGFiaWxpdHkgb2YgYSBzcGVjaWFsIGtleSwgdGhlIEhhc19LZXkgZnVuY3Rpb24gaXMgcHJvdmlkZWQuCisKKyAgIHN1YnR5cGUgU3BlY2lhbF9LZXlfQ29kZSBpcyBSZWFsX0tleV9Db2RlCisgICAgIHJhbmdlIE00X1NQRUNJQUxfRklSU1QgLi4gUmVhbF9LZXlfQ29kZSdMYXN0OworICAgLS0gIFR5cGUgZm9yIGEgZnVuY3Rpb24tIG9yIHNwZWNpYWwga2V5IG51bWJlcgorCisgICBzdWJ0eXBlIE5vcm1hbF9LZXlfQ29kZSBpcyBSZWFsX0tleV9Db2RlIHJhbmdlCisgICAgIENoYXJhY3RlcidQb3MgKENoYXJhY3RlcidGaXJzdCkgLi4gQ2hhcmFjdGVyJ1BvcyAoQ2hhcmFjdGVyJ0xhc3QpOworICAgLS0gIFRoaXMgYXJlIHRoZSBjb2RlcyBmb3IgcmVndWxhciAoaW5jbC4gbm9uLWdyYXBoaWNhbCkgY2hhcmFjdGVycy4KKworICAgLS0gIENvbnN0YW50cyBmb3IgZnVuY3Rpb24tIGFuZCBzcGVjaWFsIGtleXMKKyAgIC0tCisgICBLZXlfTm9uZSAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlIDo9IE00X1NQRUNJQUxfRklSU1Q7CitpbmNsdWRlKGBLZXlfRGVmaW5pdGlvbnMnKQorICAgS2V5X01heCAgICAgICAgICAgICAgICAgICAgICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZQorICAgICA6PSBTcGVjaWFsX0tleV9Db2RlJ0xhc3Q7CisKKyAgIHN1YnR5cGUgVXNlcl9LZXlfQ29kZSBpcyBLZXlfQ29kZQorICAgICByYW5nZSAoS2V5X01heCArIDEyOSkgLi4gS2V5X0NvZGUnTGFzdDsKKyAgIC0tICBUaGlzIGlzIHJlc2VydmVkIGZvciB1c2VyIGRlZmluZWQga2V5IGNvZGVzLiBUaGUgcmFuZ2UgYmV0d2VlbiBLZXlfTWF4CisgICAtLSAgYW5kIHRoZSBmaXJzdCB1c2VyIGNvZGUgaXMgcmVzZXJ2ZWQgZm9yIHN1YnN5c3RlbXMgbGlrZSBtZW51IGFuZCBmb3Jtcy4KKworICAgLS0gIEZvciB0aG9zZSB3aG8gbGlrZSB0byB1c2UgdGhlIG9yaWdpbmFsIGtleSBuYW1lcyB3ZSBwcm9kdWNlIHRoZW0gd2VyZQorICAgLS0gIHRoZXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXkgbWF5IGRpZmZlciBpbgorICAgLS0gIGxvd2VyL3VwcGVyIGNhc2UuCitpbmNsdWRlKGBPbGRfS2V5cycpZG5sCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB0eXBlIENvbG9yX051bWJlciBpcyByYW5nZSAtMSAuLiBJbnRlZ2VyIChJbnRlcmZhY2VzLkMuc2hvcnQnTGFzdCk7CisgICBmb3IgQ29sb3JfTnVtYmVyJ1NpemUgdXNlIEludGVyZmFjZXMuQy5zaG9ydCdTaXplOworICAgLS0gIChuKWN1cnNlcyB1c2VzIGEgc2hvcnQgZm9yIHRoZSBjb2xvciBpbmRleAorICAgLS0gIFRoZSBtb2RlbCBpcywgdGhhdCBhIENvbG9yX051bWJlciBpcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5IG9mCisgICAtLSAgKHBvdGVudGlhbGx5KSBkZWZpbmFibGUgY29sb3JzLiBTb21lIG9mIHRob3NlIGluZGljZXMgYXJlCisgICAtLSAgcHJlZGVmaW5lZCAoc2VlIGJlbG93KSwgYWx0aG91Z2ggdGhleSBtYXkgbm90IHJlYWxseSBleGlzdC4KKworaW5jbHVkZShgQ29sb3JfRGVmcycpCisgICB0eXBlIFJHQl9WYWx1ZSBpcyByYW5nZSAwIC4uIEludGVnZXIgKEludGVyZmFjZXMuQy5zaG9ydCdMYXN0KTsKKyAgIGZvciBSR0JfVmFsdWUnU2l6ZSB1c2UgSW50ZXJmYWNlcy5DLnNob3J0J1NpemU7CisgICAtLSAgU29tZSBzeXN0ZW0gbWF5IGFsbG93IHRvIHJlZGVmaW5lIGEgY29sb3IgYnkgc2V0dGluZyBSR0IgdmFsdWVzLgorCisgICB0eXBlIENvbG9yX1BhaXIgaXMgcmFuZ2UgMCAuLiAyNTU7CisgICBmb3IgQ29sb3JfUGFpcidTaXplIHVzZSA4OworICAgc3VidHlwZSBSZWRlZmluYWJsZV9Db2xvcl9QYWlyIGlzIENvbG9yX1BhaXIgcmFuZ2UgMSAuLiAyNTU7CisgICAtLSAgKG4pY3Vyc2VzIHJlc2VydmVzIDEgQnl0ZSBmb3IgdGhlIGNvbG9yLXBhaXIgbnVtYmVyLiBDb2xvciBQYWlyIDAKKyAgIC0tICBpcyBmaXhlZCAoQmxhY2sgJiBXaGl0ZSkuIEEgY29sb3IgcGFpciBpcyBzaW1wbHkgYSBjb21iaW5hdGlvbiBvZgorICAgLS0gIHR3byBjb2xvcnMgZGVzY3JpYmVkIGJ5IENvbG9yX051bWJlcnMsIG9uZSBmb3IgdGhlIGZvcmVncm91bmQgYW5kCisgICAtLSAgdGhlIG90aGVyIGZvciB0aGUgYmFja2dyb3VuZAorCitpbmNsdWRlKGBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldF9SZXAnKQorICAgLS0gIChuKWN1cnNlcyB1c2VzIGFsbCBidXQgdGhlIGxvd2VzdCAxNiBCaXRzIGZvciBBdHRyaWJ1dGVzLgorCisgICBOb3JtYWxfVmlkZW8gOiBjb25zdGFudCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSAob3RoZXJzID0+IEZhbHNlKTsKKworICAgdHlwZSBBdHRyaWJ1dGVkX0NoYXJhY3RlciBpcworICAgICAgcmVjb3JkCisgICAgICAgICBBdHRyICA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgQ29sb3IgOiBDb2xvcl9QYWlyOworICAgICAgICAgQ2ggICAgOiBDaGFyYWN0ZXI7CisgICAgICBlbmQgcmVjb3JkOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBUaGlzIGlzIHRoZSBjb3VudGVycGFydCBmb3IgdGhlIGNodHlwZSBpbiBDLgorCitpbmNsdWRlKGBBQ19SZXAnKQorICAgRGVmYXVsdF9DaGFyYWN0ZXIgOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlcgorICAgICA6PSAoQ2ggICAgPT4gQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgIEF0dHIgID0+IChvdGhlcnMgPT4gRmFsc2UpKTsgIC0tICBwcmVlbGFib3JhdGFibGUgTm9ybWFsX1ZpZGVvCisKKyAgIHR5cGUgQXR0cmlidXRlZF9TdHJpbmcgaXMgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgIHByYWdtYSBQYWNrIChBdHRyaWJ1dGVkX1N0cmluZyk7CisgICAtLSAgSW4gdGhpcyBiaW5kaW5nIHdlIGFsbG93IHN0cmluZ3Mgb2YgYXR0cmlidXRlZCBjaGFyYWN0ZXJzLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICBFeGNlcHRpb25zICAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDdXJzZXNfRXhjZXB0aW9uICAgICA6IGV4Y2VwdGlvbjsKKyAgIFdyb25nX0N1cnNlc19WZXJzaW9uIDogZXhjZXB0aW9uOworCisgICAtLSAgVGhvc2UgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGJ5IHRoZSBFVEkgKEV4dGVuZGVkIFRlcm1pbmFsIEludGVyZmFjZSkKKyAgIC0tICBzdWJwYWNrZXRzIGZvciBNZW51IGFuZCBGb3JtcyBoYW5kbGluZy4KKyAgIC0tCisgICBFdGlfU3lzdGVtX0Vycm9yICAgIDogZXhjZXB0aW9uOworICAgRXRpX0JhZF9Bcmd1bWVudCAgICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9Qb3N0ZWQgICAgICAgICAgOiBleGNlcHRpb247CisgICBFdGlfQ29ubmVjdGVkICAgICAgIDogZXhjZXB0aW9uOworICAgRXRpX0JhZF9TdGF0ZSAgICAgICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9Ob19Sb29tICAgICAgICAgOiBleGNlcHRpb247CisgICBFdGlfTm90X1Bvc3RlZCAgICAgIDogZXhjZXB0aW9uOworICAgRXRpX1Vua25vd25fQ29tbWFuZCA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9Ob19NYXRjaCAgICAgICAgOiBleGNlcHRpb247CisgICBFdGlfTm90X1NlbGVjdGFibGUgIDogZXhjZXB0aW9uOworICAgRXRpX05vdF9Db25uZWN0ZWQgICA6IGV4Y2VwdGlvbjsKKyAgIEV0aV9SZXF1ZXN0X0RlbmllZCAgOiBleGNlcHRpb247CisgICBFdGlfSW52YWxpZF9GaWVsZCAgIDogZXhjZXB0aW9uOworICAgRXRpX0N1cnJlbnQgICAgICAgICA6IGV4Y2VwdGlvbjsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICBFeHRlcm5hbCBDIHZhcmlhYmxlcworICAgLS0gIENvbmNlcHR1YWxseSBldmVuIGluIEMgdGhpcyBhcmUga2luZCBvZiBjb25zdGFudHMsIGJ1dCB0aGV5IGFyZQorICAgLS0gIGluaXRpYWxpemVkIGFuZCBzb21ldGltZXMgY2hhbmdlZCBieSB0aGUgbGlicmFyeSByb3V0aW5lcyBhdCBydW50aW1lCisgICAtLSAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRlcm1pbmFsLiBJIGJlbGlldmUgdGhlIGJlc3Qgd2F5IHRvIG1vZGVsCisgICAtLSAgdGhpcyBpcyB0byB1c2UgZnVuY3Rpb25zLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgZnVuY3Rpb24gTGluZXMgICAgICAgICAgICByZXR1cm4gTGluZV9Db3VudDsKKyAgIHByYWdtYSBJbmxpbmUgKExpbmVzKTsKKworICAgZnVuY3Rpb24gQ29sdW1ucyAgICAgICAgICByZXR1cm4gQ29sdW1uX0NvdW50OworICAgcHJhZ21hIElubGluZSAoQ29sdW1ucyk7CisKKyAgIGZ1bmN0aW9uIFRhYl9TaXplICAgICAgICAgcmV0dXJuIE5hdHVyYWw7CisgICBwcmFnbWEgSW5saW5lIChUYWJfU2l6ZSk7CisKKyAgIGZ1bmN0aW9uIE51bWJlcl9PZl9Db2xvcnMgcmV0dXJuIE5hdHVyYWw7CisgICBwcmFnbWEgSW5saW5lIChOdW1iZXJfT2ZfQ29sb3JzKTsKKworICAgZnVuY3Rpb24gTnVtYmVyX09mX0NvbG9yX1BhaXJzIHJldHVybiBOYXR1cmFsOworICAgcHJhZ21hIElubGluZSAoTnVtYmVyX09mX0NvbG9yX1BhaXJzKTsKKworaW5jbHVkZShgQUNTX01hcCcpZG5sCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2luaXRzY3IuM3gnKQorICAgLS0gIHwgTm90IGltcGxlbWVudGVkOiBuZXd0ZXJtLCBzZXRfdGVybSwgZGVsc2NyZWVuCisKKyAgIC0tICBBTkNIT1IoYHN0ZHNjcicsYFN0YW5kYXJkX1dpbmRvdycpCisgICBmdW5jdGlvbiBTdGFuZGFyZF9XaW5kb3cgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFN0YW5kYXJkX1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYGN1cnNjcicsYEN1cnJlbnRfV2luZG93JykKKyAgIGZ1bmN0aW9uIEN1cnJlbnRfV2luZG93IHJldHVybiBXaW5kb3c7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDdXJyZW50X1dpbmRvdyk7CisKKyAgIC0tICBBTkNIT1IoYGluaXRzY3IoKScsYEluaXRfU2NyZWVuJykKKyAgIHByb2NlZHVyZSBJbml0X1NjcmVlbjsKKworICAgLS0gIEFOQ0hPUihgaW5pdHNjcigpJyxgSW5pdF9XaW5kb3dzJykKKyAgIHByb2NlZHVyZSBJbml0X1dpbmRvd3MgcmVuYW1lcyBJbml0X1NjcmVlbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEluaXRfU2NyZWVuKTsKKyAgIC0tICBwcmFnbWEgSW5saW5lIChJbml0X1dpbmRvd3MpOworCisgICAtLSAgQU5DSE9SKGBlbmR3aW4oKScsYEVuZF9XaW5kb3dzJykKKyAgIHByb2NlZHVyZSBFbmRfV2luZG93czsKKyAgIC0tICBBS0EKKyAgIHByb2NlZHVyZSBFbmRfU2NyZWVuIHJlbmFtZXMgRW5kX1dpbmRvd3M7CisgICBwcmFnbWEgSW5saW5lIChFbmRfV2luZG93cyk7CisgICAtLSAgcHJhZ21hIElubGluZSAoRW5kX1NjcmVlbik7CisKKyAgIC0tICBBTkNIT1IoYGlzZW5kd2luKCknLGBJc19FbmRfV2luZG93JykKKyAgIGZ1bmN0aW9uIElzX0VuZF9XaW5kb3cgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJc19FbmRfV2luZG93KTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfbW92ZS4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdtb3ZlKCknLGBNb3ZlX0N1cnNvcicpCisgICBwcm9jZWR1cmUgTW92ZV9DdXJzb3IgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG1vdmUoKScpCisgICBwcmFnbWEgSW5saW5lIChNb3ZlX0N1cnNvcik7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2FkZGNoLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2FkZGNoKCknLGBBZGQnKQorICAgcHJvY2VkdXJlIEFkZCAoV2luIDogIGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBDaCAgOiAgaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBhZGRjaCgpJykKKworICAgcHJvY2VkdXJlIEFkZCAoV2luIDogIGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBDaCAgOiAgaW4gQ2hhcmFjdGVyKTsKKyAgIC0tICBBZGQgYSBzaW5nbGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJyZW50IGxvZ2ljYWwgY3Vyc29yIHBvc2l0aW9uIHRvCisgICAtLSAgdGhlIHdpbmRvdy4gVXNlIHRoZSBjdXJyZW50IHdpbmRvd3MgYXR0cmlidXRlcy4KKworICAgLS0gIEFOQ0hPUihgbXZ3YWRkY2goKScsYEFkZCcpCisgICBwcm9jZWR1cmUgQWRkCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIENoICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZhZGRjaCgpJykKKworICAgcHJvY2VkdXJlIEFkZAorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBDaCAgICAgOiBpbiBDaGFyYWN0ZXIpOworICAgLS0gIE1vdmUgdG8gdGhlIHBvc2l0aW9uIGFuZCBhZGQgYSBzaW5nbGUgY2hhcmFjdGVyIGludG8gdGhlIHdpbmRvdworICAgLS0gIFRoZXJlIGFyZSBtb3JlIEFkZCByb3V0aW5lcywgc28gdGhlIElubGluZSBwcmFnbWEgZm9sbG93cyBsYXRlcgorCisgICAtLSAgQU5DSE9SKGB3ZWNob2NoYXIoKScsYEFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvJykKKyAgIHByb2NlZHVyZSBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobworICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgZWNob2NoYXIoKScpCisKKyAgIHByb2NlZHVyZSBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobworICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IGluIENoYXJhY3Rlcik7CisgICAtLSAgQWRkIGEgY2hhcmFjdGVyIGFuZCBkbyBhbiBpbW1lZGlhdGUgcmVmcmVzaCBvZiB0aGUgc2NyZWVuLgorICAgcHJhZ21hIElubGluZSAoQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8pOworCisgICAtLSAgTUFOUEFHRShgY3Vyc193aW5kb3cuM3gnKQorICAgLS0gIE5vdCBJbXBsZW1lbnRlZDogd2N1cnN5bmN1cAorCisgICAtLSAgQU5DSE9SKGBuZXd3aW4oKScsYENyZWF0ZScpCisgICBmdW5jdGlvbiBDcmVhdGUKKyAgICAgKE51bWJlcl9PZl9MaW5lcyAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gV2luZG93OworICAgLS0gIE5vdCBJbXBsZW1lbnRlZDogRGVmYXVsdCBOdW1iZXJfT2ZfTGluZXMsIE51bWJlcl9PZl9Db2x1bW5zCisgICAtLSAgdGhlIEMgdmVyc2lvbiBsZXRzIHRoZW0gYmUgMCwgc2VlIHRoZSBtYW4gcGFnZS4KKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENyZWF0ZSk7CisKKyAgIGZ1bmN0aW9uIE5ld19XaW5kb3cKKyAgICAgKE51bWJlcl9PZl9MaW5lcyAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gV2luZG93CisgICAgIHJlbmFtZXMgQ3JlYXRlOworICAgLS0gIHByYWdtYSBJbmxpbmUgKE5ld19XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBkZWx3aW4oKScsYERlbGV0ZScpCisgICBwcm9jZWR1cmUgRGVsZXRlIChXaW4gOiBpbiBvdXQgV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBSZXNldCBXaW4gdG8gTnVsbF9XaW5kb3cKKyAgIHByYWdtYSBJbmxpbmUgKERlbGV0ZSk7CisKKyAgIC0tICBBTkNIT1IoYHN1YndpbigpJyxgU3ViX1dpbmRvdycpCisgICBmdW5jdGlvbiBTdWJfV2luZG93CisgICAgIChXaW4gICAgICAgICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTnVtYmVyX09mX0xpbmVzICAgICAgIDogTGluZV9Db3VudDsKKyAgICAgIE51bWJlcl9PZl9Db2x1bW5zICAgICA6IENvbHVtbl9Db3VudDsKKyAgICAgIEZpcnN0X0xpbmVfUG9zaXRpb24gICA6IExpbmVfUG9zaXRpb247CisgICAgICBGaXJzdF9Db2x1bW5fUG9zaXRpb24gOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBXaW5kb3c7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTdWJfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgZGVyd2luKCknLGBEZXJpdmVkX1dpbmRvdycpCisgICBmdW5jdGlvbiBEZXJpdmVkX1dpbmRvdworICAgICAoV2luICAgICAgICAgICAgICAgICAgIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE51bWJlcl9PZl9MaW5lcyAgICAgICA6IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBGaXJzdF9MaW5lX1Bvc2l0aW9uICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gV2luZG93OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRGVyaXZlZF9XaW5kb3cpOworCisgICAtLSAgQU5DSE9SKGBkdXB3aW4oKScsYER1cGxpY2F0ZScpCisgICBmdW5jdGlvbiBEdXBsaWNhdGUgKFdpbiA6IFdpbmRvdykgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKER1cGxpY2F0ZSk7CisKKyAgIC0tICBBTkNIT1IoYG12d2luKCknLGBNb3ZlX1dpbmRvdycpCisgICBwcm9jZWR1cmUgTW92ZV9XaW5kb3cgKFdpbiAgICA6IGluIFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKE1vdmVfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgbXZkZXJ3aW4oKScsYE1vdmVfRGVyaXZlZF9XaW5kb3cnKQorICAgcHJvY2VkdXJlIE1vdmVfRGVyaXZlZF9XaW5kb3cgKFdpbiAgICA6IGluIFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChNb3ZlX0Rlcml2ZWRfV2luZG93KTsKKworICAgLS0gIEFOQ0hPUihgd3N5bmN1cCgpJyxgU3luY2hyb25pemVfVXB3YXJkcycpCisgICBwcm9jZWR1cmUgU3luY2hyb25pemVfVXB3YXJkcyAoV2luIDogaW4gV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbXBvcnQgKEMsIFN5bmNocm9uaXplX1Vwd2FyZHMsICJ3c3luY3VwIik7CisKKyAgIC0tICBBTkNIT1IoYHdzeW5jZG93bigpJyxgU3luY2hyb25pemVfRG93bndhcmRzJykKKyAgIHByb2NlZHVyZSBTeW5jaHJvbml6ZV9Eb3dud2FyZHMgKFdpbiA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW1wb3J0IChDLCBTeW5jaHJvbml6ZV9Eb3dud2FyZHMsICJ3c3luY2Rvd24iKTsKKworICAgLS0gIEFOQ0hPUihgc3luY29rKCknLGBTZXRfU3luY2hfTW9kZScpCisgICBwcm9jZWR1cmUgU2V0X1N5bmNoX01vZGUgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChTZXRfU3luY2hfTW9kZSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2FkZHN0ci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdhZGRuc3RyKCknLGBBZGQnKQorICAgcHJvY2VkdXJlIEFkZCAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgIFN0ciA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB3YWRkc3RyKCknKQorICAgLS0gIEFMSUFTKGBhZGRuc3RyKCknKQorICAgLS0gIEFMSUFTKGBhZGRzdHIoKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2FkZG5zdHIoKScsYEFkZCcpCisgICBwcm9jZWR1cmUgQWRkIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIFN0ciAgICA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiAgICA6IGluIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBtdndhZGRzdHIoKScpCisgICAtLSAgQUxJQVMoYG12YWRkbnN0cigpJykKKyAgIC0tICBBTElBUyhgbXZhZGRzdHIoKScpCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2FkZGNoc3RyLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2FkZGNobnN0cigpJyxgQWRkJykKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBTdHIgOiBpbiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgIExlbiA6IGluIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB3YWRkY2hzdHIoKScpCisgICAtLSAgQUxJQVMoYGFkZGNobnN0cigpJykKKyAgIC0tICBBTElBUyhgYWRkY2hzdHIoKScpCisKKyAgIC0tICBBTkNIT1IoYG12d2FkZGNobnN0cigpJyxgQWRkJykKKyAgIHByb2NlZHVyZSBBZGQgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgU3RyICAgIDogaW4gQXR0cmlidXRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICBMZW4gICAgOiBpbiBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZ3YWRkY2hzdHIoKScpCisgICAtLSAgQUxJQVMoYG12YWRkY2huc3RyKCknKQorICAgLS0gIEFMSUFTKGBtdmFkZGNoc3RyKCknKQorICAgcHJhZ21hIElubGluZSAoQWRkKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfYm9yZGVyLjN4JykKKyAgIC0tICB8IE5vdCBpbXBsZW1lbnRlZDogbXZobGluZSwgIG12d2hsaW5lLCBtdnZsaW5lLCBtdnd2bGluZQorICAgLS0gIHwgdXNlIE1vdmVfQ3Vyc29yIHRoZW4gSG9yaXpvbnRhbF9MaW5lIG9yIFZlcnRpY2FsX0xpbmUKKworICAgLS0gIEFOQ0hPUihgd2JvcmRlcigpJyxgQm9yZGVyJykKKyAgIHByb2NlZHVyZSBCb3JkZXIKKyAgICAgKFdpbiAgICAgICAgICAgICAgICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGVmdF9TaWRlX1N5bWJvbCAgICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgUmlnaHRfU2lkZV9TeW1ib2wgICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgVG9wX1NpZGVfU3ltYm9sICAgICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgQm90dG9tX1NpZGVfU3ltYm9sICAgICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgVXBwZXJfTGVmdF9Db3JuZXJfU3ltYm9sICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgVXBwZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgTG93ZXJfTGVmdF9Db3JuZXJfU3ltYm9sICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyOworICAgICAgTG93ZXJfUmlnaHRfQ29ybmVyX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyCisgICAgICk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGJvcmRlcigpJykKKyAgIHByYWdtYSBJbmxpbmUgKEJvcmRlcik7CisKKyAgIC0tICBBTkNIT1IoYGJveCgpJyxgQm94JykKKyAgIHByb2NlZHVyZSBCb3gKKyAgICAgKFdpbiAgICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFZlcnRpY2FsX1N5bWJvbCAgIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXI7CisgICAgICBIb3Jpem9udGFsX1N5bWJvbCA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IERlZmF1bHRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEJveCk7CisKKyAgIC0tICBBTkNIT1IoYHdobGluZSgpJyxgSG9yaXpvbnRhbF9MaW5lJykKKyAgIHByb2NlZHVyZSBIb3Jpem9udGFsX0xpbmUKKyAgICAgKFdpbiAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmVfU2l6ZSAgIDogaW4gTmF0dXJhbDsKKyAgICAgIExpbmVfU3ltYm9sIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gRGVmYXVsdF9DaGFyYWN0ZXIpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBobGluZSgpJykKKyAgIHByYWdtYSBJbmxpbmUgKEhvcml6b250YWxfTGluZSk7CisKKyAgIC0tICBBTkNIT1IoYHd2bGluZSgpJyxgVmVydGljYWxfTGluZScpCisgICBwcm9jZWR1cmUgVmVydGljYWxfTGluZQorICAgICAoV2luICAgICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZV9TaXplICAgOiBpbiBOYXR1cmFsOworICAgICAgTGluZV9TeW1ib2wgOiBpbiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBEZWZhdWx0X0NoYXJhY3Rlcik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHZsaW5lKCknKQorICAgcHJhZ21hIElubGluZSAoVmVydGljYWxfTGluZSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2dldGNoLjN4JykKKyAgIC0tICBOb3QgaW1wbGVtZW50ZWQ6IG12Z2V0Y2gsIG12d2dldGNoCisKKyAgIC0tICBBTkNIT1IoYHdnZXRjaCgpJyxgR2V0X0tleXN0cm9rZScpCisgICBmdW5jdGlvbiBHZXRfS2V5c3Ryb2tlIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWxfS2V5X0NvZGU7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGdldGNoKCknKQorICAgLS0gIEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSBrZXlib2FyZCBhbmQgZWNobyBpdCAtIGlmIGVuYWJsZWQgLSB0byB0aGUKKyAgIC0tICB3aW5kb3cuCisgICAtLSAgSWYgZm9yIGFueSByZWFzb24gKGkuZS4gYSB0aW1lb3V0KSB3ZSBjb3VsZG4ndCBnZXQgYSBjaGFyYWN0ZXIgdGhlCisgICAtLSAgcmV0dXJuZWQga2V5Y29kZSBpcyBLZXlfTm9uZS4KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9LZXlzdHJva2UpOworCisgICAtLSAgQU5DSE9SKGB1bmdldGNoKCknLGBVbmRvX0tleXN0cm9rZScpCisgICBwcm9jZWR1cmUgVW5kb19LZXlzdHJva2UgKEtleSA6IGluIFJlYWxfS2V5X0NvZGUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVW5kb19LZXlzdHJva2UpOworCisgICAtLSAgQU5DSE9SKGBoYXNfa2V5KCknLGBIYXNfS2V5JykKKyAgIGZ1bmN0aW9uIEhhc19LZXkgKEtleSA6IFNwZWNpYWxfS2V5X0NvZGUpIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSGFzX0tleSk7CisKKyAgIC0tICB8CisgICAtLSAgfCBTb21lIGhlbHBlciBmdW5jdGlvbnMKKyAgIC0tICB8CisgICBmdW5jdGlvbiBJc19GdW5jdGlvbl9LZXkgKEtleSA6IFNwZWNpYWxfS2V5X0NvZGUpIHJldHVybiBCb29sZWFuOworICAgLS0gIFJldHVybiBUcnVlIGlmIHRoZSBLZXkgaXMgYSBmdW5jdGlvbiBrZXkgKGkuZS4gb25lIG9mIEYwIC4uIEY2MykKKyAgIHByYWdtYSBJbmxpbmUgKElzX0Z1bmN0aW9uX0tleSk7CisKKyAgIHN1YnR5cGUgRnVuY3Rpb25fS2V5X051bWJlciBpcyBJbnRlZ2VyIHJhbmdlIDAgLi4gNjM7CisgICAtLSAgKG4pY3Vyc2VzIGFsbG93cyBmb3IgNjQgZnVuY3Rpb24ga2V5cy4KKworICAgZnVuY3Rpb24gRnVuY3Rpb25fS2V5IChLZXkgOiBSZWFsX0tleV9Db2RlKSByZXR1cm4gRnVuY3Rpb25fS2V5X051bWJlcjsKKyAgIC0tICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgZnVuY3Rpb24ga2V5LiBJZiB0aGUgY29kZSBpcyBub3QgYQorICAgLS0gIGZ1bmN0aW9uIGtleSwgYSBDT05TVFJBSU5UX0VSUk9SIHdpbGwgYmUgcmFpc2VkLgorICAgcHJhZ21hIElubGluZSAoRnVuY3Rpb25fS2V5KTsKKworICAgZnVuY3Rpb24gRnVuY3Rpb25fS2V5X0NvZGUgKEtleSA6IEZ1bmN0aW9uX0tleV9OdW1iZXIpIHJldHVybiBSZWFsX0tleV9Db2RlOworICAgLS0gIFJldHVybiB0aGUga2V5IGNvZGUgZm9yIGEgZ2l2ZW4gZnVuY3Rpb24ta2V5IG51bWJlci4KKyAgIHByYWdtYSBJbmxpbmUgKEZ1bmN0aW9uX0tleV9Db2RlKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfYXR0ci4zeCcpCisgICAtLSAgfCBOb3QgaW1wbGVtZW50ZWQgYXR0cl9vZmYsICB3YXR0cl9vZmYsCisgICAtLSAgfCAgYXR0cl9vbiwgd2F0dHJfb24sIGF0dHJfc2V0LCB3YXR0cl9zZXQKKworICAgLS0gIFBBSVJfTlVNQkVSCisgICAtLSAgUEFJUl9OVU1CRVIoYykgaXMgdGhlIHNhbWUgYXMgYy5Db2xvcgorCisgICAtLSAgQU5DSE9SKGBzdGFuZG91dCgpJyxgU3RhbmRvdXQnKQorICAgcHJvY2VkdXJlIFN0YW5kb3V0IChXaW4gOiBXaW5kb3cgIDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgT24gIDogQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBTElBUyhgd3N0YW5kb3V0KCknKQorICAgLS0gIEFMSUFTKGB3c3RhbmRlbmQoKScpCisKKyAgIC0tICBBTkNIT1IoYHdhdHRyb24oKScsYFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlJykKKyAgIHByb2NlZHVyZSBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBBdHRyIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgT24gICA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7IC0tICBpZiBGYWxzZSB3ZSBzd2l0Y2ggT2ZmLgorICAgLS0gIFN3aXRjaGVzIHRob3NlIEF0dHJpYnV0ZXMgc2V0IHRvIHRydWUgaW4gdGhlIGxpc3QuCisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHdhdHRyb2ZmKCknKQorICAgLS0gIEFMSUFTKGBhdHRyb24oKScpCisgICAtLSAgQUxJQVMoYGF0dHJvZmYoKScpCisKKyAgIC0tICBBTkNIT1IoYHdhdHRyc2V0KCknLGBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMnKQorICAgcHJvY2VkdXJlIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcworICAgICAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgQXR0ciAgOiBpbiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBOb3JtYWxfVmlkZW87CisgICAgICBDb2xvciA6IGluIENvbG9yX1BhaXIgOj0gQ29sb3JfUGFpcidGaXJzdCk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGF0dHJzZXQoKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMpOworCisgICAtLSAgQU5DSE9SKGB3YXR0cl9nZXQoKScsYEdldF9DaGFyYWN0ZXJfQXR0cmlidXRlcycpCisgICBmdW5jdGlvbiBHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgcmV0dXJuIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBhdHRyX2dldCgpJykKKworICAgLS0gIEFOQ0hPUihgd2F0dHJfZ2V0KCknLGBHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZScpCisgICBmdW5jdGlvbiBHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgcmV0dXJuIENvbG9yX1BhaXI7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZSk7CisKKyAgIC0tICBBTkNIT1IoYHdjb2xvcl9zZXQoKScsYFNldF9Db2xvcicpCisgICBwcm9jZWR1cmUgU2V0X0NvbG9yIChXaW4gIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhaXIgOiBpbiBDb2xvcl9QYWlyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgY29sb3Jfc2V0KCknKQorICAgcHJhZ21hIElubGluZSAoU2V0X0NvbG9yKTsKKworICAgLS0gIEFOQ0hPUihgd2NoZ2F0KCknLGBDaGFuZ2VfQXR0cmlidXRlcycpCisgICBwcm9jZWR1cmUgQ2hhbmdlX0F0dHJpYnV0ZXMKKyAgICAgKFdpbiAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENvdW50IDogaW4gSW50ZWdlciA6PSAtMTsKKyAgICAgIEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBjaGdhdCgpJykKKworICAgLS0gIEFOQ0hPUihgbXZ3Y2hnYXQoKScsYENoYW5nZV9BdHRyaWJ1dGVzJykKKyAgIHByb2NlZHVyZSBDaGFuZ2VfQXR0cmlidXRlcworICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb24gOj0gTGluZV9Qb3NpdGlvbidGaXJzdDsKKyAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbiA6PSBDb2x1bW5fUG9zaXRpb24nRmlyc3Q7CisgICAgICBDb3VudCAgOiBpbiBJbnRlZ2VyIDo9IC0xOworICAgICAgQXR0ciAgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZjaGdhdCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKENoYW5nZV9BdHRyaWJ1dGVzKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfYmVlcC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGJlZXAoKScsYEJlZXAnKQorICAgcHJvY2VkdXJlIEJlZXA7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChCZWVwKTsKKworICAgLS0gIEFOQ0hPUihgZmxhc2goKScsYEZsYXNoX1NjcmVlbicpCisgICBwcm9jZWR1cmUgRmxhc2hfU2NyZWVuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRmxhc2hfU2NyZWVuKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfaW5vcHRzLjN4JykKKworICAgLS0gIHwgTm90IGltcGxlbWVudGVkIDogdHlwZWFoZWFkCisgICAtLQorICAgLS0gIEFOQ0hPUihgY2JyZWFrKCknLGBTZXRfQ2JyZWFrX01vZGUnKQorICAgcHJvY2VkdXJlIFNldF9DYnJlYWtfTW9kZSAoU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBub2NicmVhaygpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9DYnJlYWtfTW9kZSk7CisKKyAgIC0tICBBTkNIT1IoYHJhdygpJyxgU2V0X1Jhd19Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfUmF3X01vZGUgKFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbm9yYXcoKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfUmF3X01vZGUpOworCisgICAtLSAgQU5DSE9SKGBlY2hvKCknLGBTZXRfRWNob19Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG5vZWNobygpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9FY2hvX01vZGUpOworCisgICAtLSAgQU5DSE9SKGBtZXRhKCknLGBTZXRfTWV0YV9Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfTWV0YV9Nb2RlIChXaW4gICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dpdGNoT24gOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X01ldGFfTW9kZSk7CisKKyAgIC0tICBBTkNIT1IoYGtleXBhZCgpJyxgU2V0X0tleVBhZF9Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfS2V5UGFkX01vZGUgKFdpbiAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaE9uIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9LZXlQYWRfTW9kZSk7CisKKyAgIGZ1bmN0aW9uIEdldF9LZXlQYWRfTW9kZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgVGhpcyBoYXMgbm8gcGVuZGFudCBpbiBDLiBUaGVyZSB5b3UndmUgdG8gbG9vayBpbnRvIHRoZSBXSU5ET1dTCisgICAtLSAgc3RydWN0dXJlIHRvIGdldCB0aGUgdmFsdWUuIEJhZCBwcmFjdGljZSwgbm90IHJlcGVhdGVkIGluIEFkYS4KKworICAgdHlwZSBIYWxmX0RlbGF5X0Ftb3VudCBpcyByYW5nZSAxIC4uIDI1NTsKKworICAgLS0gIEFOQ0hPUihgaGFsZmRlbGF5KCknLGBIYWxmX0RlbGF5JykKKyAgIHByb2NlZHVyZSBIYWxmX0RlbGF5IChBbW91bnQgOiBpbiBIYWxmX0RlbGF5X0Ftb3VudCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChIYWxmX0RlbGF5KTsKKworICAgLS0gIEFOQ0hPUihgaW50cmZsdXNoKCknLGBTZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGUnKQorICAgcHJvY2VkdXJlIFNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZQorICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZSk7CisKKyAgIC0tICBBTkNIT1IoYHFpZmx1c2goKScsYFNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZScpCisgICBwcm9jZWR1cmUgU2V0X1F1ZXVlX0ludGVycnVwdF9Nb2RlCisgICAgIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBGbHVzaCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG5vcWlmbHVzaCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZSk7CisKKyAgIC0tICBBTkNIT1IoYG5vZGVsYXkoKScsYFNldF9Ob0RlbGF5X01vZGUnKQorICAgcHJvY2VkdXJlIFNldF9Ob0RlbGF5X01vZGUKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X05vRGVsYXlfTW9kZSk7CisKKyAgIHR5cGUgVGltZW91dF9Nb2RlIGlzIChCbG9ja2luZywgTm9uX0Jsb2NraW5nLCBEZWxheWVkKTsKKworICAgLS0gIEFOQ0hPUihgd3RpbWVvdXQoKScsYFNldF9UaW1lb3V0X01vZGUnKQorICAgcHJvY2VkdXJlIFNldF9UaW1lb3V0X01vZGUgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSAgIDogaW4gVGltZW91dF9Nb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFtb3VudCA6IGluIE5hdHVyYWwpOyAtLSAgaW4gTWlsbGlzZWNvbmRzCisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHRpbWVvdXQoKScpCisgICAtLSAgSW5zdGVhZCBvZiBvdmVybG9hZGluZyB0aGUgc2VtYW50aWMgb2YgdGhlIHNpZ24gb2YgYW1vdW50LCB3ZQorICAgLS0gIGludHJvZHVjZSB0aGUgVGltZW91dF9Nb2RlIHBhcmFtZXRlci4gVGhpcyBzaG91bGQgaW1wcm92ZQorICAgLS0gIHJlYWRhYmlsaXR5LiBGb3IgQmxvY2tpbmcgYW5kIE5vbl9CbG9ja2luZywgdGhlIEFtb3VudCBpcyBub3QKKyAgIC0tICBldmFsdWF0ZWQuCisgICAtLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcHJvY2VkdXJlLgorCisgICAtLSAgQU5DSE9SKGBub3RpbWVvdXQoKScsYFNldF9Fc2NhcGVfVGltZV9Nb2RlJykKKyAgIHByb2NlZHVyZSBTZXRfRXNjYXBlX1RpbWVyX01vZGUKKyAgICAgKFdpbiAgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBUaW1lcl9PZmYgOiBpbiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Fc2NhcGVfVGltZXJfTW9kZSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX291dG9wdHMuM3gnKQorCisgICAtLSAgQU5DSE9SKGBubCgpJyxgU2V0X05MX01vZGUnKQorICAgcHJvY2VkdXJlIFNldF9OTF9Nb2RlIChTd2l0Y2hPbiA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG5vbmwoKScpCisgICBwcmFnbWEgSW5saW5lIChTZXRfTkxfTW9kZSk7CisKKyAgIC0tICBBTkNIT1IoYGNsZWFyb2soKScsYENsZWFyX09uX05leHRfVXBkYXRlJykKKyAgIHByb2NlZHVyZSBDbGVhcl9Pbl9OZXh0X1VwZGF0ZQorICAgICAoV2luICAgICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fQ2xlYXIgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQ2xlYXJfT25fTmV4dF9VcGRhdGUpOworCisgICAtLSAgQU5DSE9SKGBpZGxvaygpJyxgVXNlX0luc2VydF9EZWxldGVfTGluZScpCisgICBwcm9jZWR1cmUgVXNlX0luc2VydF9EZWxldGVfTGluZQorICAgICAoV2luICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0lkbCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChVc2VfSW5zZXJ0X0RlbGV0ZV9MaW5lKTsKKworICAgLS0gIEFOQ0hPUihgaWRjb2soKScsYFVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcicpCisgICBwcm9jZWR1cmUgVXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyCisgICAgIChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgRG9fSWRjIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3Rlcik7CisKKyAgIC0tICBBTkNIT1IoYGxlYXZlb2soKScsYExlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGUnKQorICAgcHJvY2VkdXJlIExlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGUKKyAgICAgKFdpbiAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIERvX0xlYXZlIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKExlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGUpOworCisgICAtLSAgQU5DSE9SKGBpbW1lZG9rKCknLGBJbW1lZGlhdGVfVXBkYXRlX01vZGUnKQorICAgcHJvY2VkdXJlIEltbWVkaWF0ZV9VcGRhdGVfTW9kZQorICAgICAoV2luICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBNb2RlIDogaW4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJbW1lZGlhdGVfVXBkYXRlX01vZGUpOworCisgICAtLSAgQU5DSE9SKGBzY3JvbGxvaygpJyxgQWxsb3dfU2Nyb2xsaW5nJykKKyAgIHByb2NlZHVyZSBBbGxvd19TY3JvbGxpbmcKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTW9kZSA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoQWxsb3dfU2Nyb2xsaW5nKTsKKworICAgZnVuY3Rpb24gU2Nyb2xsaW5nX0FsbG93ZWQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBCb29sZWFuOworICAgLS0gIFRoZXJlIGlzIG5vIHN1Y2ggZnVuY3Rpb24gaW4gdGhlIEMgaW50ZXJmYWNlLgorICAgcHJhZ21hIElubGluZSAoU2Nyb2xsaW5nX0FsbG93ZWQpOworCisgICAtLSAgQU5DSE9SKGB3c2V0c2NycmVnKCknLGBTZXRfU2Nyb2xsX1JlZ2lvbicpCisgICBwcm9jZWR1cmUgU2V0X1Njcm9sbF9SZWdpb24KKyAgICAgKFdpbiAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFRvcF9MaW5lICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIEJvdHRvbV9MaW5lIDogaW4gTGluZV9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHNldHNjcnJlZygpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9TY3JvbGxfUmVnaW9uKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfcmVmcmVzaC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGRvdXBkYXRlKCknLGBVcGRhdGVfU2NyZWVuJykKKyAgIHByb2NlZHVyZSBVcGRhdGVfU2NyZWVuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVXBkYXRlX1NjcmVlbik7CisKKyAgIC0tICBBTkNIT1IoYHdyZWZyZXNoKCknLGBSZWZyZXNoJykKKyAgIHByb2NlZHVyZSBSZWZyZXNoIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBUaGVyZSBpcyBhbiBvdmVybG9hZGVkIFJlZnJlc2ggZm9yIFBhZHMuCisgICAtLSAgVGhlIElubGluZSBwcmFnbWEgYXBwZWFycyB0aGVyZQorICAgLS0gIEFMSUFTKGByZWZyZXNoKCknKQorCisgICAtLSAgQU5DSE9SKGB3bm91dHJlZnJlc2goKScsYFJlZnJlc2hfV2l0aG91dF9VcGRhdGUnKQorICAgcHJvY2VkdXJlIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgLS0gIFRoZXJlIGlzIGFuIG92ZXJsb2FkZWQgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSBmb3IgUGFkcy4KKyAgIC0tICBUaGUgSW5saW5lIHByYWdtYSBhcHBlYXJzIHRoZXJlCisKKyAgIC0tICBBTkNIT1IoYHJlZHJhd3dpbigpJyxgUmVkcmF3JykKKyAgIHByb2NlZHVyZSBSZWRyYXcgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGB3cmVkcmF3bG4oKScsYFJlZHJhdycpCisgICBwcm9jZWR1cmUgUmVkcmF3IChXaW4gICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIEJlZ2luX0xpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgTGluZV9Db3VudCA6IGluIFBvc2l0aXZlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFJlZHJhdyk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2NsZWFyLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2VyYXNlKCknLGBFcmFzZScpCisgICBwcm9jZWR1cmUgRXJhc2UgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBlcmFzZSgpJykKKyAgIHByYWdtYSBJbmxpbmUgKEVyYXNlKTsKKworICAgLS0gIEFOQ0hPUihgd2NsZWFyKCknLGBDbGVhcicpCisgICBwcm9jZWR1cmUgQ2xlYXIKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBjbGVhcigpJykKKyAgIHByYWdtYSBJbmxpbmUgKENsZWFyKTsKKworICAgLS0gIEFOQ0hPUihgd2NscnRvYm90KCknLGBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuJykKKyAgIHByb2NlZHVyZSBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuCisgICAgIChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgY2xydG9ib3QoKScpCisgICBwcmFnbWEgSW5saW5lIChDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuKTsKKworICAgLS0gIEFOQ0hPUihgd2NscnRvZW9sKCknLGBDbGVhcl9Ub19FbmRfT2ZfTGluZScpCisgICBwcm9jZWR1cmUgQ2xlYXJfVG9fRW5kX09mX0xpbmUKKyAgICAgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBjbHJ0b2VvbCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKENsZWFyX1RvX0VuZF9PZl9MaW5lKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfYmtnZC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdia2dkc2V0KCknLGBTZXRfQmFja2dyb3VuZCcpCisgICAtLSAgVE9ETzogd2UgY291bGQgaGF2ZSBTZXRfQmFja2dyb3VuZChXaW5kb3c7IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KQorICAgLS0gIGJlY2F1c2UgaW4gQyBpdCBpcyBjb21tb24gdG8gc2VlIGJrZ2RzZXQoQV9CT0xEKSBvcgorICAgLS0gIGJrZ2RzZXQoQ09MT1JfUEFJUihuKSkKKyAgIHByb2NlZHVyZSBTZXRfQmFja2dyb3VuZAorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgYmtnZHNldCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9CYWNrZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgd2JrZ2QoKScsYENoYW5nZV9CYWNrZ3JvdW5kJykKKyAgIHByb2NlZHVyZSBDaGFuZ2VfQmFja2dyb3VuZAorICAgICAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgYmtnZCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKENoYW5nZV9CYWNrZ3JvdW5kKTsKKworICAgLS0gIEFOQ0hPUihgd2JrZ2RnZXQoKScsYEdldF9CYWNrZ3JvdW5kJykKKyAgIC0tICA/IHdia2dkZ2V0IGlzIG5vdCBsaXN0ZWQgaW4gY3Vyc19ia2dkLCBnZXRia2dkIGlzIHRocG91Z2guCisgICBmdW5jdGlvbiBHZXRfQmFja2dyb3VuZCAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBia2dkZ2V0KCknKQorICAgcHJhZ21hIElubGluZSAoR2V0X0JhY2tncm91bmQpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc190b3VjaC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHVudG91Y2h3aW4oKScsYFVudG91Y2gnKQorICAgcHJvY2VkdXJlIFVudG91Y2ggKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVW50b3VjaCk7CisKKyAgIC0tICBBTkNIT1IoYHRvdWNod2luKCknLGBUb3VjaCcpCisgICBwcm9jZWR1cmUgVG91Y2ggKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGB0b3VjaGxpbmUoKScsYFRvdWNoJykKKyAgIHByb2NlZHVyZSBUb3VjaCAoV2luICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICBTdGFydCA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIENvdW50IDogaW4gUG9zaXRpdmUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVG91Y2gpOworCisgICAtLSAgQU5DSE9SKGB3dG91Y2hsbigpJyxgQ2hhbmdlX0xpbmVfU3RhdHVzJykKKyAgIHByb2NlZHVyZSBDaGFuZ2VfTGluZXNfU3RhdHVzIChXaW4gICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50IDogaW4gUG9zaXRpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgOiBpbiBCb29sZWFuKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENoYW5nZV9MaW5lc19TdGF0dXMpOworCisgICAtLSAgQU5DSE9SKGBpc19saW5ldG91Y2hlZCgpJyxgSXNfVG91Y2hlZCcpCisgICBmdW5jdGlvbiBJc19Ub3VjaGVkIChXaW4gIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgaXNfd2ludG91Y2hlZCgpJyxgSXNfVG91Y2hlZCcpCisgICBmdW5jdGlvbiBJc19Ub3VjaGVkIChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKElzX1RvdWNoZWQpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19vdmVybGF5LjN4JykKKworICAgLS0gIEFOQ0hPUihgY29weXdpbigpJyxgQ29weScpCisgICBwcm9jZWR1cmUgQ29weQorICAgICAoU291cmNlX1dpbmRvdyAgICAgICAgICAgIDogaW4gV2luZG93OworICAgICAgRGVzdGluYXRpb25fV2luZG93ICAgICAgIDogaW4gV2luZG93OworICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTm9uX0Rlc3RydWN0aXZlX01vZGUgICAgIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENvcHkpOworCisgICAtLSAgQU5DSE9SKGBvdmVyd3JpdGUoKScsYE92ZXJ3cml0ZScpCisgICBwcm9jZWR1cmUgT3ZlcndyaXRlIChTb3VyY2VfV2luZG93ICAgICAgOiBpbiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbl9XaW5kb3cgOiBpbiBXaW5kb3cpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoT3ZlcndyaXRlKTsKKworICAgLS0gIEFOQ0hPUihgb3ZlcmxheSgpJyxgT3ZlcmxheScpCisgICBwcm9jZWR1cmUgT3ZlcmxheSAoU291cmNlX1dpbmRvdyAgICAgIDogaW4gV2luZG93OworICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uX1dpbmRvdyA6IGluIFdpbmRvdyk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChPdmVybGF5KTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfZGVsZXRlbG4uM3gnKQorCisgICAtLSAgQU5DSE9SKGB3aW5zZGVsbG4oKScsYEluc2VydF9EZWxldGVfTGluZXMnKQorICAgcHJvY2VkdXJlIEluc2VydF9EZWxldGVfTGluZXMKKyAgICAgKFdpbiAgIDogaW4gV2luZG93ICA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lcyA6IGluIEludGVnZXIgOj0gMSk7IC0tICBkZWZhdWx0IGlzIHRvIGluc2VydCBvbmUgbGluZSBhYm92ZQorICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBpbnNkZWxsbigpJykKKyAgIHByYWdtYSBJbmxpbmUgKEluc2VydF9EZWxldGVfTGluZXMpOworCisgICAtLSAgQU5DSE9SKGB3ZGVsZXRlbG4oKScsYERlbGV0ZV9MaW5lJykKKyAgIHByb2NlZHVyZSBEZWxldGVfTGluZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGRlbGV0ZWxuKCknKQorICAgcHJhZ21hIElubGluZSAoRGVsZXRlX0xpbmUpOworCisgICAtLSAgQU5DSE9SKGB3aW5zZXJ0bG4oKScsYEluc2VydF9MaW5lJykKKyAgIHByb2NlZHVyZSBJbnNlcnRfTGluZSAoV2luIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdyk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYGluc2VydGxuKCknKQorICAgcHJhZ21hIElubGluZSAoSW5zZXJ0X0xpbmUpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19nZXR5eC4zeCcpCisKKyAgIC0tICBBTkNIT1IoYGdldG1heHl4KCknLGBHZXRfU2l6ZScpCisgICBwcm9jZWR1cmUgR2V0X1NpemUKKyAgICAgKFdpbiAgICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIE51bWJlcl9PZl9MaW5lcyAgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoR2V0X1NpemUpOworCisgICAtLSAgQU5DSE9SKGBnZXRiZWd5eCgpJyxgR2V0X1dpbmRvd19Qb3NpdGlvbicpCisgICBwcm9jZWR1cmUgR2V0X1dpbmRvd19Qb3NpdGlvbgorICAgICAoV2luICAgICAgICAgICAgIDogaW4gV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgIFRvcF9MZWZ0X0xpbmUgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgVG9wX0xlZnRfQ29sdW1uIDogb3V0IENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfV2luZG93X1Bvc2l0aW9uKTsKKworICAgLS0gIEFOQ0hPUihgZ2V0eXgoKScsYEdldF9DdXJzb3JfUG9zaXRpb24nKQorICAgcHJvY2VkdXJlIEdldF9DdXJzb3JfUG9zaXRpb24KKyAgICAgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgTGluZSAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICBDb2x1bW4gOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9DdXJzb3JfUG9zaXRpb24pOworCisgICAtLSAgQU5DSE9SKGBnZXRwYXJ5eCgpJyxgR2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQnKQorICAgcHJvY2VkdXJlIEdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50CisgICAgIChXaW4gICAgICAgICAgICAgICAgOiBpbiAgV2luZG93OworICAgICAgVG9wX0xlZnRfTGluZSAgICAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICBUb3BfTGVmdF9Db2x1bW4gICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgSXNfTm90X0FfU3Vid2luZG93IDogb3V0IEJvb2xlYW4pOworICAgLS0gIEFLQQorICAgLS0gIEluc3RlYWQgb2YgcGxhY2luZyAtMSBpbiB0aGUgY29vcmRpbmF0ZXMgYXMgcmV0dXJuLCB3ZSB1c2UgYSBib29sZWFuCisgICAtLSAgdG8gcmV0dXJuIHRoZSBpbmZvIHRoYXQgdGhlIHdpbmRvdyBoYXMgbm8gcGFyZW50LgorICAgcHJhZ21hIElubGluZSAoR2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19wYWQuM3gnKQorCisgICAtLSAgQU5DSE9SKGBuZXdwYWQoKScsYE5ld19QYWQnKQorICAgZnVuY3Rpb24gTmV3X1BhZCAoTGluZXMgICA6IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gV2luZG93OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoTmV3X1BhZCk7CisKKyAgIC0tICBBTkNIT1IoYHN1YnBhZCgpJyxgU3ViX1BhZCcpCisgICBmdW5jdGlvbiBTdWJfUGFkCisgICAgIChQYWQgICAgICAgICAgICAgICAgICAgOiBXaW5kb3c7CisgICAgICBOdW1iZXJfT2ZfTGluZXMgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgTnVtYmVyX09mX0NvbHVtbnMgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgRmlyc3RfTGluZV9Qb3NpdGlvbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIEZpcnN0X0NvbHVtbl9Qb3NpdGlvbiA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFdpbmRvdzsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFN1Yl9QYWQpOworCisgICAtLSAgQU5DSE9SKGBwcmVmcmVzaCgpJyxgUmVmcmVzaCcpCisgICBwcm9jZWR1cmUgUmVmcmVzaAorICAgICAoUGFkICAgICAgICAgICAgICAgICAgICAgIDogaW4gV2luZG93OworICAgICAgU291cmNlX1RvcF9Sb3cgICAgICAgICAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIFNvdXJjZV9MZWZ0X0NvbHVtbiAgICAgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1RvcF9Sb3cgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbiAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Cb3R0b21fUm93ICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fUmlnaHRfQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFJlZnJlc2gpOworCisgICAtLSAgQU5DSE9SKGBwbm91dHJlZnJlc2goKScsYFJlZnJlc2hfV2l0aG91dF9VcGRhdGUnKQorICAgcHJvY2VkdXJlIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUKKyAgICAgKFBhZCAgICAgICAgICAgICAgICAgICAgICA6IGluIFdpbmRvdzsKKyAgICAgIFNvdXJjZV9Ub3BfUm93ICAgICAgICAgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICBTb3VyY2VfTGVmdF9Db2x1bW4gICAgICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICBEZXN0aW5hdGlvbl9Ub3BfUm93ICAgICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fTGVmdF9Db2x1bW4gIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgRGVzdGluYXRpb25fQm90dG9tX1JvdyAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgIERlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChSZWZyZXNoX1dpdGhvdXRfVXBkYXRlKTsKKworICAgLS0gIEFOQ0hPUihgcGVjaG9jaGFyKCknLGBBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdCcpCisgICBwcm9jZWR1cmUgQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQKKyAgICAgKFBhZCA6IGluIFdpbmRvdzsKKyAgICAgIENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKworICAgcHJvY2VkdXJlIEFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0CisgICAgIChQYWQgOiBpbiBXaW5kb3c7CisgICAgICBDaCAgOiBpbiBDaGFyYWN0ZXIpOworICAgcHJhZ21hIElubGluZSAoQWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19zY3JvbGwuM3gnKQorCisgICAtLSAgQU5DSE9SKGB3c2NybCgpJyxgU2Nyb2xsJykKKyAgIHByb2NlZHVyZSBTY3JvbGwgKFdpbiAgICA6IGluIFdpbmRvdyAgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgQW1vdW50IDogaW4gSW50ZWdlciA6PSAxKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgc2Nyb2xsKCknKQorICAgLS0gIEFMSUFTKGBzY3JsKCknKQorICAgcHJhZ21hIElubGluZSAoU2Nyb2xsKTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfZGVsY2guM3gnKQorCisgICAtLSAgQU5DSE9SKGB3ZGVsY2goKScsYERlbGV0ZV9DaGFyYWN0ZXInKQorICAgcHJvY2VkdXJlIERlbGV0ZV9DaGFyYWN0ZXIgKFdpbiA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBkZWxjaCgpJykKKworICAgLS0gIEFOQ0hPUihgbXZ3ZGVsY2goKScsYERlbGV0ZV9DaGFyYWN0ZXInKQorICAgcHJvY2VkdXJlIERlbGV0ZV9DaGFyYWN0ZXIKKyAgICAgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZkZWxjaCgpJykKKyAgIHByYWdtYSBJbmxpbmUgKERlbGV0ZV9DaGFyYWN0ZXIpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19pbmNoLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2luY2goKScsYFBlZWsnKQorICAgZnVuY3Rpb24gUGVlayAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykKKyAgICAgcmV0dXJuIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgLS0gIEFMSUFTKGBpbmNoKCknKQorICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBtdndpbmNoKCknLGBQZWVrJykKKyAgIGZ1bmN0aW9uIFBlZWsKKyAgICAgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgQ29sdW1uIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gQXR0cmlidXRlZF9DaGFyYWN0ZXI7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12aW5jaCgpJykKKyAgIC0tICBNb3JlIFBlZWsncyBmb2xsb3csIHByYWdtYSBJbmxpbmUgYXBwZWFycyBsYXRlci4KKworICAgLS0gIE1BTlBBR0UoYGN1cnNfaW5zY2guM3gnKQorCisgICAtLSAgQU5DSE9SKGB3aW5zY2goKScsYEluc2VydCcpCisgICBwcm9jZWR1cmUgSW5zZXJ0IChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBpbnNjaCgpJykKKworICAgLS0gIEFOQ0hPUihgbXZ3aW5zY2goKScsYEluc2VydCcpCisgICBwcm9jZWR1cmUgSW5zZXJ0IChXaW4gICAgOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIENoICAgICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZpbnNjaCgpJykKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfaW5zc3RyLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2luc25zdHIoKScsYEluc2VydCcpCisgICBwcm9jZWR1cmUgSW5zZXJ0IChXaW4gOiBpbiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgU3RyIDogaW4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gSW50ZWdlciA6PSAtMSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHdpbnNzdHIoKScpCisgICAtLSAgQUxJQVMoYGluc25zdHIoKScpCisgICAtLSAgQUxJQVMoYGluc3N0cigpJykKKworICAgLS0gIEFOQ0hPUihgbXZ3aW5zbnN0cigpJyxgSW5zZXJ0JykKKyAgIHByb2NlZHVyZSBJbnNlcnQgKFdpbiAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgU3RyICAgIDogaW4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgTGVuICAgIDogaW4gSW50ZWdlciA6PSAtMSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYG12d2luc3N0cigpJykKKyAgIC0tICBBTElBUyhgbXZpbnNuc3RyKCknKQorICAgLS0gIEFMSUFTKGBtdmluc3N0cigpJykKKyAgIHByYWdtYSBJbmxpbmUgKEluc2VydCk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2luc3RyLjN4JykKKworICAgLS0gIEFOQ0hPUihgd2lubnN0cigpJyxgUGVlaycpCisgICBwcm9jZWR1cmUgUGVlayAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHdpbnN0cigpJykKKyAgIC0tICBBTElBUyhgaW5uc3RyKCknKQorICAgLS0gIEFMSUFTKGBpbnN0cigpJykKKworICAgLS0gIEFOQ0hPUihgbXZ3aW5uc3RyKCknLGBQZWVrJykKKyAgIHByb2NlZHVyZSBQZWVrIChXaW4gICAgOiBpbiAgV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdzsKKyAgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiAgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBpbiAgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIFN0ciAgICA6IG91dCBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgTGVuICAgIDogaW4gIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBtdndpbnN0cigpJykKKyAgIC0tICBBTElBUyhgbXZpbm5zdHIoKScpCisgICAtLSAgQUxJQVMoYG12aW5zdHIoKScpCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2luY2hzdHIuM3gnKQorCisgICAtLSAgQU5DSE9SKGB3aW5jaG5zdHIoKScsYFBlZWsnKQorICAgcHJvY2VkdXJlIFBlZWsgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICBMZW4gOiBpbiAgSW50ZWdlciA6PSAtMSk7CisgICAtLSAgQUtBCisgICAtLSAgQUxJQVMoYHdpbmNoc3RyKCknKQorICAgLS0gIEFMSUFTKGBpbmNobnN0cigpJykKKyAgIC0tICBBTElBUyhgaW5jaHN0cigpJykKKworICAgLS0gIEFOQ0hPUihgbXZ3aW5jaG5zdHIoKScsYFBlZWsnKQorICAgcHJvY2VkdXJlIFBlZWsgKFdpbiAgICA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluICBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluICBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgU3RyICAgIDogb3V0IEF0dHJpYnV0ZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgIExlbiAgICA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgbXZ3aW5jaHN0cigpJykKKyAgIC0tICBBTElBUyhgbXZpbmNobnN0cigpJykKKyAgIC0tICBBTElBUyhgbXZpbmNoc3RyKCknKQorICAgLS0gIFdlIGRvbid0IGlubGluZSB0aGUgUGVlayBwcm9jZWR1cmVzCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2dldHN0ci4zeCcpCisKKyAgIC0tICBBTkNIT1IoYHdnZXRuc3RyKCknLGBHZXQnKQorICAgcHJvY2VkdXJlIEdldCAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgU3RyaW5nOworICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGB3Z2V0c3RyKCknKQorICAgLS0gIEFMSUFTKGBnZXRuc3RyKCknKQorICAgLS0gIEFMSUFTKGBnZXRzdHIoKScpCisgICAtLSAgYWN0dWFsbHkgZ2V0c3RyIGlzIG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSB0aGF0IHJlc3VsdHMgaW4gYnVmZmVyCisgICAtLSAgb3ZlcmZsb3dzLgorCisgICAtLSAgQU5DSE9SKGBtdndnZXRuc3RyKCknLGBHZXQnKQorICAgcHJvY2VkdXJlIEdldCAoV2luICAgIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICBMaW5lICAgOiBpbiAgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIENvbHVtbiA6IGluICBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBTdHIgICAgOiBvdXQgU3RyaW5nOworICAgICAgICAgICAgICAgICAgTGVuICAgIDogaW4gIEludGVnZXIgOj0gLTEpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBtdndnZXRzdHIoKScpCisgICAtLSAgQUxJQVMoYG12Z2V0bnN0cigpJykKKyAgIC0tICBBTElBUyhgbXZnZXRzdHIoKScpCisgICAtLSAgR2V0IGlzIG5vdCBpbmxpbmVkCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX3Nsay4zeCcpCisKKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IHNsa19hdHRyX29uLCBzbGtfYXR0cl9vZmYsIHNsa19hdHRyX3NldAorCisgICB0eXBlIFNvZnRfTGFiZWxfS2V5X0Zvcm1hdCBpcyAoVGhyZWVfVHdvX1RocmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvdXJfRm91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ19TdHlsZSwgICAgICAgICAgICAgIC0tICBuY3Vyc2VzIHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENfU3R5bGVfV2l0aF9JbmRleCk7ICAtLSAgIgorICAgdHlwZSBMYWJlbF9OdW1iZXIgaXMgbmV3IFBvc2l0aXZlIHJhbmdlIDEgLi4gMTI7CisgICB0eXBlIExhYmVsX0p1c3RpZmljYXRpb24gaXMgKExlZnQsIENlbnRlcmVkLCBSaWdodCk7CisKKyAgIC0tICBBTkNIT1IoYHNsa19pbml0KCknLGBJbml0X1NvZnRfTGFiZWxfS2V5cycpCisgICBwcm9jZWR1cmUgSW5pdF9Tb2Z0X0xhYmVsX0tleXMKKyAgICAgKEZvcm1hdCA6IGluIFNvZnRfTGFiZWxfS2V5X0Zvcm1hdCA6PSBUaHJlZV9Ud29fVGhyZWUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSW5pdF9Tb2Z0X0xhYmVsX0tleXMpOworCisgICAtLSAgQU5DSE9SKGBzbGtfc2V0KCknLGBTZXRfU29mdF9MYWJlbF9LZXknKQorICAgcHJvY2VkdXJlIFNldF9Tb2Z0X0xhYmVsX0tleSAoTGFiZWwgOiBpbiBMYWJlbF9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0ICA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZtdCAgIDogaW4gTGFiZWxfSnVzdGlmaWNhdGlvbiA6PSBMZWZ0KTsKKyAgIC0tICBBS0EKKyAgIC0tICBXZSBkb24ndCBpbmxpbmUgdGhpcyBwcm9jZWR1cmUKKworICAgLS0gIEFOQ0hPUihgc2xrX3JlZnJlc2goKScsYFJlZnJlc2hfU29mdF9MYWJlbF9LZXknKQorICAgcHJvY2VkdXJlIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXMpOworCisgICAtLSAgQU5DSE9SKGBzbGtfbm91dHJlZnJlc2goKScsYFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlJykKKyAgIHByb2NlZHVyZSBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlKTsKKworICAgLS0gIEFOQ0hPUihgc2xrX2xhYmVsKCknLGBHZXRfU29mdF9MYWJlbF9LZXknKQorICAgcHJvY2VkdXJlIEdldF9Tb2Z0X0xhYmVsX0tleSAoTGFiZWwgOiBpbiBMYWJlbF9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0ICA6IG91dCBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBzbGtfbGFiZWwoKScsYEdldF9Tb2Z0X0xhYmVsX0tleScpCisgICBmdW5jdGlvbiBHZXRfU29mdF9MYWJlbF9LZXkgKExhYmVsIDogaW4gTGFiZWxfTnVtYmVyKSByZXR1cm4gU3RyaW5nOworICAgLS0gIEFLQQorICAgLS0gIFNhbWUgYXMgZnVuY3Rpb24KKyAgIHByYWdtYSBJbmxpbmUgKEdldF9Tb2Z0X0xhYmVsX0tleSk7CisKKyAgIC0tICBBTkNIT1IoYHNsa19jbGVhcigpJyxgQ2xlYXJfU29mdF9MYWJlbF9LZXlzJykKKyAgIHByb2NlZHVyZSBDbGVhcl9Tb2Z0X0xhYmVsX0tleXM7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDbGVhcl9Tb2Z0X0xhYmVsX0tleXMpOworCisgICAtLSAgQU5DSE9SKGBzbGtfcmVzdG9yZSgpJyxgUmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXMnKQorICAgcHJvY2VkdXJlIFJlc3RvcmVfU29mdF9MYWJlbF9LZXlzOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXMpOworCisgICAtLSAgQU5DSE9SKGBzbGtfdG91Y2goKScsYFRvdWNoX1NvZnRfTGFiZWxfS2V5cycpCisgICBwcm9jZWR1cmUgVG91Y2hfU29mdF9MYWJlbF9LZXlzOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoVG91Y2hfU29mdF9MYWJlbF9LZXlzKTsKKworICAgLS0gIEFOQ0hPUihgc2xrX2F0dHJvbigpJyxgU3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMnKQorICAgcHJvY2VkdXJlIFN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzCisgICAgIChBdHRyIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICBPbiAgIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgc2xrX2F0dHJvZmYoKScpCisgICBwcmFnbWEgSW5saW5lIChTd2l0Y2hfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyk7CisKKyAgIC0tICBBTkNIT1IoYHNsa19hdHRyc2V0KCknLGBTZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcycpCisgICBwcm9jZWR1cmUgU2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMKKyAgICAgKEF0dHIgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMpOworCisgICAtLSAgQU5DSE9SKGBzbGtfYXR0cigpJyxgR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMnKQorICAgZnVuY3Rpb24gR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMgcmV0dXJuIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBzbGtfYXR0cigpJyxgR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMnKQorICAgZnVuY3Rpb24gR2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMgcmV0dXJuIENvbG9yX1BhaXI7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChHZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyk7CisKKyAgIC0tICBBTkNIT1IoYHNsa19jb2xvcigpJyxgU2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yJykKKyAgIHByb2NlZHVyZSBTZXRfU29mdF9MYWJlbF9LZXlfQ29sb3IgKFBhaXIgOiBpbiBDb2xvcl9QYWlyKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcik7CisKKyAgIC0tICBNQU5QQUdFKGBrZXlib3VuZC4zeCcpCisgICAtLSAgTm90IEltcGxlbWVudGVkOiBrZXlib3VuZAorCisgICAtLSAgTUFOUEFHRShga2V5b2suM3gnKQorCisgICAtLSAgQU5DSE9SKGBrZXlvaygpJyxgRW5hYmxlX0tleScpCisgICBwcm9jZWR1cmUgRW5hYmxlX0tleSAoS2V5ICAgIDogaW4gU3BlY2lhbF9LZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgOiBpbiBCb29sZWFuIDo9IFRydWUpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRW5hYmxlX0tleSk7CisKKyAgIC0tICBNQU5QQUdFKGBkZWZpbmVfa2V5LjN4JykKKworICAgLS0gIEFOQ0hPUihgZGVmaW5lX2tleSgpJyxgRGVmaW5lX0tleScpCisgICBwcm9jZWR1cmUgRGVmaW5lX0tleSAoRGVmaW5pdGlvbiA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgIDogaW4gU3BlY2lhbF9LZXlfQ29kZSk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChEZWZpbmVfS2V5KTsKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfdXRpbC4zeCcpCisKKyAgIC0tICB8IE5vdCBpbXBsZW1lbnRlZCA6IGZpbHRlciwgdXNlX2VudgorICAgLS0gIHwgcHV0d2luLCBnZXR3aW4gYXJlIGluIHRoZSBjaGlsZCBwYWNrYWdlIFB1dFdpbgorICAgLS0KKworICAgLS0gIEFOQ0hPUihga2V5bmFtZSgpJyxgS2V5X05hbWUnKQorICAgcHJvY2VkdXJlIEtleV9OYW1lIChLZXkgIDogaW4gIFJlYWxfS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKyAgIC0tICBUaGUgZXh0ZXJuYWwgbmFtZSBmb3IgYSByZWFsIGtleXN0cm9rZS4KKworICAgLS0gIEFOQ0hPUihga2V5bmFtZSgpJyxgS2V5X05hbWUnKQorICAgZnVuY3Rpb24gS2V5X05hbWUgKEtleSAgOiBpbiAgUmVhbF9LZXlfQ29kZSkgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBBS0EKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisgICAtLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcm91dGluZQorCisgICAtLSAgQU5DSE9SKGB1bmN0cmwoKScsYFVuX0NvbnRyb2wnKQorICAgcHJvY2VkdXJlIFVuX0NvbnRyb2wgKENoICA6IGluIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGB1bmN0cmwoKScsYFVuX0NvbnRyb2wnKQorICAgZnVuY3Rpb24gVW5fQ29udHJvbCAoQ2ggIDogaW4gQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBTdHJpbmc7CisgICAtLSAgQUtBCisgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoVW5fQ29udHJvbCk7CisKKyAgIC0tICBBTkNIT1IoYGRlbGF5X291dHB1dCgpJyxgRGVsYXlfT3V0cHV0JykKKyAgIHByb2NlZHVyZSBEZWxheV9PdXRwdXQgKE1zZWNzIDogaW4gTmF0dXJhbCk7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChEZWxheV9PdXRwdXQpOworCisgICAtLSAgQU5DSE9SKGBmbHVzaGlucCgpJyxgRmx1c2hfSW5wdXQnKQorICAgcHJvY2VkdXJlIEZsdXNoX0lucHV0OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRmx1c2hfSW5wdXQpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc190ZXJtYXR0cnMuM3gnKQorCisgICAtLSAgQU5DSE9SKGBiYXVkcmF0ZSgpJyxgQmF1ZHJhdGUnKQorICAgZnVuY3Rpb24gQmF1ZHJhdGUgcmV0dXJuIE5hdHVyYWw7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChCYXVkcmF0ZSk7CisKKyAgIC0tICBBTkNIT1IoYGVyYXNlY2hhcigpJyxgRXJhc2VfQ2hhcmFjdGVyJykKKyAgIGZ1bmN0aW9uIEVyYXNlX0NoYXJhY3RlciByZXR1cm4gQ2hhcmFjdGVyOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoRXJhc2VfQ2hhcmFjdGVyKTsKKworICAgLS0gIEFOQ0hPUihga2lsbGNoYXIoKScsYEtpbGxfQ2hhcmFjdGVyJykKKyAgIGZ1bmN0aW9uIEtpbGxfQ2hhcmFjdGVyIHJldHVybiBDaGFyYWN0ZXI7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChLaWxsX0NoYXJhY3Rlcik7CisKKyAgIC0tICBBTkNIT1IoYGhhc19pYygpJyxgSGFzX0luc2VydF9DaGFyYWN0ZXInKQorICAgZnVuY3Rpb24gSGFzX0luc2VydF9DaGFyYWN0ZXIgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChIYXNfSW5zZXJ0X0NoYXJhY3Rlcik7CisKKyAgIC0tICBBTkNIT1IoYGhhc19pbCgpJyxgSGFzX0luc2VydF9MaW5lJykKKyAgIGZ1bmN0aW9uIEhhc19JbnNlcnRfTGluZSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEhhc19JbnNlcnRfTGluZSk7CisKKyAgIC0tICBBTkNIT1IoYHRlcm1hdHRycygpJyxgU3VwcG9ydGVkX0F0dHJpYnV0ZXMnKQorICAgZnVuY3Rpb24gU3VwcG9ydGVkX0F0dHJpYnV0ZXMgcmV0dXJuIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU3VwcG9ydGVkX0F0dHJpYnV0ZXMpOworCisgICAtLSAgQU5DSE9SKGBsb25nbmFtZSgpJyxgTG9uZ19OYW1lJykKKyAgIHByb2NlZHVyZSBMb25nX05hbWUgKE5hbWUgOiBvdXQgU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgbG9uZ25hbWUoKScsYExvbmdfTmFtZScpCisgICBmdW5jdGlvbiBMb25nX05hbWUgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBBS0EKKyAgIC0tICBTYW1lIGFzIGZ1bmN0aW9uCisgICBwcmFnbWEgSW5saW5lIChMb25nX05hbWUpOworCisgICAtLSAgQU5DSE9SKGB0ZXJtbmFtZSgpJyxgVGVybWluYWxfTmFtZScpCisgICBwcm9jZWR1cmUgVGVybWluYWxfTmFtZSAoTmFtZSA6IG91dCBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGB0ZXJtbmFtZSgpJyxgVGVybWluYWxfTmFtZScpCisgICBmdW5jdGlvbiBUZXJtaW5hbF9OYW1lIHJldHVybiBTdHJpbmc7CisgICAtLSAgQUtBCisgICAtLSAgU2FtZSBhcyBmdW5jdGlvbgorICAgcHJhZ21hIElubGluZSAoVGVybWluYWxfTmFtZSk7CisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX2NvbG9yLjN4JykKKworICAgLS0gIENPTE9SX1BBSVIKKyAgIC0tICBDT0xPUl9QQUlSKG4pIGluIEMgaXMgdGhlIHNhbWUgYXMKKyAgIC0tICBBdHRyaWJ1dGVkX0NoYXJhY3RlcihDaCA9PiBOdWwsIENvbG9yID0+IG4sIEF0dHIgPT4gTm9ybWFsX1ZpZGVvKQorICAgLS0gIEluIEMgeW91IG9mdGVuIHNlZSBzb21ldGhpbmcgbGlrZSBjID0gYyB8IENPTE9SX1BBSVIobik7CisgICAtLSAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGMuQ29sb3IgOj0gbjsKKworICAgLS0gIEFOQ0hPUihgc3RhcnRfY29sb3IoKScsYFN0YXJ0X0NvbG9yJykKKyAgIHByb2NlZHVyZSBTdGFydF9Db2xvcjsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbXBvcnQgKEMsIFN0YXJ0X0NvbG9yLCAic3RhcnRfY29sb3IiKTsKKworICAgLS0gIEFOQ0hPUihgaW5pdF9wYWlyKCknLGBJbml0X1BhaXInKQorICAgcHJvY2VkdXJlIEluaXRfUGFpciAoUGFpciA6IGluIFJlZGVmaW5hYmxlX0NvbG9yX1BhaXI7CisgICAgICAgICAgICAgICAgICAgICAgICBGb3JlIDogaW4gQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgQmFjayA6IGluIENvbG9yX051bWJlcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChJbml0X1BhaXIpOworCisgICAtLSAgQU5DSE9SKGBwYWlyX2NvbnRlbnQoKScsYFBhaXJfQ29udGVudCcpCisgICBwcm9jZWR1cmUgUGFpcl9Db250ZW50IChQYWlyIDogaW4gQ29sb3JfUGFpcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBvdXQgQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayA6IG91dCBDb2xvcl9OdW1iZXIpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUGFpcl9Db250ZW50KTsKKworICAgLS0gIEFOQ0hPUihgaGFzX2NvbG9ycygpJyxgSGFzX0NvbG9ycycpCisgICBmdW5jdGlvbiBIYXNfQ29sb3JzIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoSGFzX0NvbG9ycyk7CisKKyAgIC0tICBBTkNIT1IoYGluaXRfY29sb3IoKScsYEluaXRfQ29sb3InKQorICAgcHJvY2VkdXJlIEluaXRfQ29sb3IgKENvbG9yIDogaW4gQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogaW4gUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgIEdyZWVuIDogaW4gUkdCX1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgIEJsdWUgIDogaW4gUkdCX1ZhbHVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKEluaXRfQ29sb3IpOworCisgICAtLSAgQU5DSE9SKGBjYW5fY2hhbmdlX2NvbG9yKCknLGBDYW5fQ2hhbmdlX0NvbG9yJykKKyAgIGZ1bmN0aW9uIENhbl9DaGFuZ2VfQ29sb3IgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChDYW5fQ2hhbmdlX0NvbG9yKTsKKworICAgLS0gIEFOQ0hPUihgY29sb3JfY29udGVudCgpJyxgQ29sb3JfQ29udGVudCcpCisgICBwcm9jZWR1cmUgQ29sb3JfQ29udGVudCAoQ29sb3IgOiBpbiAgQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZCAgIDogb3V0IFJHQl9WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVlbiA6IG91dCBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmx1ZSAgOiBvdXQgUkdCX1ZhbHVlKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKENvbG9yX0NvbnRlbnQpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19rZXJuZWwuM3gnKQorICAgLS0gIHwgTm90IGltcGxlbWVudGVkOiBnZXRzeXgsIHNldHN5eAorICAgLS0KKyAgIHR5cGUgQ3Vyc2VzX01vZGUgaXMgKEN1cnNlcywgU2hlbGwpOworCisgICAtLSAgQU5DSE9SKGBkZWZfcHJvZ19tb2RlKCknLGBTYXZlX0N1cnNlc19Nb2RlJykKKyAgIHByb2NlZHVyZSBTYXZlX0N1cnNlc19Nb2RlIChNb2RlIDogaW4gQ3Vyc2VzX01vZGUpOworICAgLS0gIEFLQQorICAgLS0gIEFMSUFTKGBkZWZfc2hlbGxfbW9kZSgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFNhdmVfQ3Vyc2VzX01vZGUpOworCisgICAtLSAgQU5DSE9SKGByZXNldF9wcm9nX21vZGUoKScsYFJlc2V0X0N1cnNlc19Nb2RlJykKKyAgIHByb2NlZHVyZSBSZXNldF9DdXJzZXNfTW9kZSAoTW9kZSA6IGluIEN1cnNlc19Nb2RlKTsKKyAgIC0tICBBS0EKKyAgIC0tICBBTElBUyhgcmVzZXRfc2hlbGxfbW9kZSgpJykKKyAgIHByYWdtYSBJbmxpbmUgKFJlc2V0X0N1cnNlc19Nb2RlKTsKKworICAgLS0gIEFOQ0hPUihgc2F2ZXR0eSgpJyxgU2F2ZV9UZXJtaW5hbF9TdGF0ZScpCisgICBwcm9jZWR1cmUgU2F2ZV9UZXJtaW5hbF9TdGF0ZTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFNhdmVfVGVybWluYWxfU3RhdGUpOworCisgICAtLSAgQU5DSE9SKGByZXNldHR5KCk7JyxgUmVzZXRfVGVybWluYWxfU3RhdGUnKQorICAgcHJvY2VkdXJlIFJlc2V0X1Rlcm1pbmFsX1N0YXRlOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoUmVzZXRfVGVybWluYWxfU3RhdGUpOworCisgICB0eXBlIFN0ZHNjcl9Jbml0X1Byb2MgaXMgYWNjZXNzCisgICAgICBmdW5jdGlvbiAoV2luICAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gSW50ZWdlcjsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBTdGRzY3JfSW5pdF9Qcm9jKTsKKyAgIC0tICBOLkIuOiB0aGUgcmV0dXJuIHZhbHVlIGlzIGFjdHVhbGx5IGlnbm9yZWQsIGJ1dCBpdCBzZWVtcyB0byBiZQorICAgLS0gICAgICAgIGEgZ29vZCBwcmFjdGljZSB0byByZXR1cm4gMCBpZiB5b3UgdGhpbmsgYWxsIHdlbnQgZmluZQorICAgLS0gICAgICAgIGFuZCAtMSBvdGhlcndpc2UuCisKKyAgIC0tICBBTkNIT1IoYHJpcG9mZmxpbmUoKScsYFJpcF9PZmZfTGluZXMnKQorICAgcHJvY2VkdXJlIFJpcF9PZmZfTGluZXMgKExpbmVzIDogaW4gSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jICA6IGluIFN0ZHNjcl9Jbml0X1Byb2MpOworICAgLS0gIEFLQQorICAgLS0gIE4uQi46IHRvIGJlIG1vcmUgcHJlY2lzZSwgdGhpcyB1c2VzIGEgbmN1cnNlcyBzcGVjaWZpYyBlbmhhbmNlbWVudCBvZgorICAgLS0gICAgICAgIHJpcG9mZmxpbmUoKSwgaW4gd2hpY2ggdGhlIExpbmVzIGFyZ3VtZW50IGFic29sdXRlIHZhbHVlIGlzIHRoZQorICAgLS0gICAgICAgIG51bWJlciBvZiBsaW5lcyB0byBiZSByaXBwZWQgb2YuIFRoZSBvZmZpY2lhbCByaXBvZmZsaW5lKCkgb25seQorICAgLS0gICAgICAgIHVzZXMgdGhlIHNpZ24gb2YgTGluZXMgdG8gcmlwIG9mIGEgc2luZ2xlIGxpbmUgZnJvbSBib3R0b20gb3IgdG9wLgorICAgcHJhZ21hIElubGluZSAoUmlwX09mZl9MaW5lcyk7CisKKyAgIHR5cGUgQ3Vyc29yX1Zpc2liaWxpdHkgaXMgKEludmlzaWJsZSwgTm9ybWFsLCBWZXJ5X1Zpc2libGUpOworCisgICAtLSAgQU5DSE9SKGBjdXJzX3NldCgpJyxgU2V0X0N1cnNvcl9WaXNpYmlsaXR5JykKKyAgIHByb2NlZHVyZSBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFZpc2liaWxpdHkgOiBpbiBvdXQgQ3Vyc29yX1Zpc2liaWxpdHkpOworICAgLS0gIEFLQQorICAgcHJhZ21hIElubGluZSAoU2V0X0N1cnNvcl9WaXNpYmlsaXR5KTsKKworICAgLS0gIEFOQ0hPUihgbmFwbXMoKScsYE5hcF9NaWxsaV9TZWNvbmRzJykKKyAgIHByb2NlZHVyZSBOYXBfTWlsbGlfU2Vjb25kcyAoTXMgOiBpbiBOYXR1cmFsKTsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKE5hcF9NaWxsaV9TZWNvbmRzKTsKKworICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IFNvbWUgdXNlZnVsIGhlbHBlcnMuCisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgdHlwZSBUcmFuc2Zvcm1fRGlyZWN0aW9uIGlzIChGcm9tX1NjcmVlbiwgVG9fU2NyZWVuKTsKKyAgIHByb2NlZHVyZSBUcmFuc2Zvcm1fQ29vcmRpbmF0ZXMKKyAgICAgKFcgICAgICA6IGluIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBMaW5lICAgOiBpbiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgIENvbHVtbiA6IGluIG91dCBDb2x1bW5fUG9zaXRpb247CisgICAgICBEaXIgICAgOiBpbiBUcmFuc2Zvcm1fRGlyZWN0aW9uIDo9IEZyb21fU2NyZWVuKTsKKyAgIC0tICBUaGlzIHByb2NlZHVyZSB0cmFuc2Zvcm1zIHNjcmVlbiBjb29yZGluYXRlcyBpbnRvIGNvb3JkaW5hdGVzIHJlbGF0aXZlCisgICAtLSAgdG8gdGhlIHdpbmRvdyBhbmQgdmljZSB2ZXJzYSwgZGVwZW5kaW5nIG9uIHRoZSBEaXIgcGFyYW1ldGVyLgorICAgLS0gIFNjcmVlbiBjb29yZGluYXRlcyBhcmUgdGhlIHBvc2l0aW9uIGluZm9ybWF0aW9ucyBvbiB0aGUgcGh5c2ljYWwgZGV2aWNlLgorICAgLS0gIEFuIEN1cnNlc19FeGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgTGluZSBhbmQgQ29sdW1uIGFyZSBub3QgaW4gdGhlCisgICAtLSAgV2luZG93IG9yIGlmIHlvdSBwYXNzIHRoZSBOdWxsX1dpbmRvdyBhcyBhcmd1bWVudC4KKyAgIC0tICBXZSBkb24ndCBpbmxpbmUgdGhpcyBwcm9jZWR1cmUKKworICAgLS0gIE1BTlBBR0UoYGRlZmF1bHRfY29sb3JzLjN4JykKKworICAgLS0gIEFOQ0hPUihgdXNlX2RlZmF1bHRfY29sb3JzKCknLGBVc2VfRGVmYXVsdF9Db2xvcnMnKQorICAgcHJvY2VkdXJlIFVzZV9EZWZhdWx0X0NvbG9yczsKKyAgIC0tICBBS0EKKyAgIHByYWdtYSBJbmxpbmUgKFVzZV9EZWZhdWx0X0NvbG9ycyk7CisKKyAgIC0tICBBTkNIT1IoYGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpJyxgQXNzdW1lX0RlZmF1bHRfQ29sb3JzJykKKyAgIHByb2NlZHVyZSBBc3N1bWVfRGVmYXVsdF9Db2xvcnMgKEZvcmUgOiBDb2xvcl9OdW1iZXIgOj0gRGVmYXVsdF9Db2xvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgOiBDb2xvcl9OdW1iZXIgOj0gRGVmYXVsdF9Db2xvcik7CisgICAtLSAgQUtBCisgICBwcmFnbWEgSW5saW5lIChBc3N1bWVfRGVmYXVsdF9Db2xvcnMpOworCisgICAtLSAgTUFOUEFHRShgY3Vyc19leHRlbmQuM3gnKQorCisgICAtLSAgQU5DSE9SKGBjdXJzZXNfdmVyc2lvbigpJyxgQ3Vyc2VzX1ZlcnNpb24nKQorICAgZnVuY3Rpb24gQ3Vyc2VzX1ZlcnNpb24gcmV0dXJuIFN0cmluZzsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgdXNlX2V4dGVuZGVkX25hbWVzKCknLGBVc2VfRXh0ZW5kZWRfTmFtZXMnKQorICAgLS0gIFRoZSByZXR1cm52YWx1ZSBpcyB0aGUgcHJldmlvdXMgc2V0dGluZyBvZiB0aGUgZmxhZworICAgZnVuY3Rpb24gVXNlX0V4dGVuZGVkX05hbWVzIChFbmFibGUgOiBCb29sZWFuKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0EKKworICAgLS0gIE1BTlBBR0UoYGN1cnNfdHJhY2UuM3gnKQorCisgICAtLSAgQU5DSE9SKGBfbmNfZnJlZWFsbCgpJyxgQ3Vyc2VzX0ZyZWVfQWxsJykKKyAgIHByb2NlZHVyZSBDdXJzZXNfRnJlZV9BbGw7CisgICAtLSAgQUtBCisKKyAgIC0tICBNQU5QQUdFKGBjdXJzX3Njcl9kdW1wLjN4JykKKworICAgLS0gIEFOQ0hPUihgc2NyX2R1bXAoKScsYFNjcmVlbl9EdW1wX1RvX0ZpbGUnKQorICAgcHJvY2VkdXJlIFNjcmVlbl9EdW1wX1RvX0ZpbGUgKEZpbGVuYW1lIDogaW4gU3RyaW5nKTsKKyAgIC0tICBBS0EKKworICAgLS0gIEFOQ0hPUihgc2NyX3Jlc3RvcmUoKScsYFNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZScpCisgICBwcm9jZWR1cmUgU2NyZWVuX1Jlc3RvcmVfRnJvbV9GaWxlIChGaWxlbmFtZSA6IGluIFN0cmluZyk7CisgICAtLSAgQUtBCisKKyAgIC0tICBBTkNIT1IoYHNjcl9pbml0KCknLGBTY3JlZW5fSW5pdF9Gcm9tX0ZpbGUnKQorICAgcHJvY2VkdXJlIFNjcmVlbl9Jbml0X0Zyb21fRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICAtLSAgQU5DSE9SKGBzY3Jfc2V0KCknLGBTY3JlZW5fU2V0X0ZpbGUnKQorICAgcHJvY2VkdXJlIFNjcmVlbl9TZXRfRmlsZSAoRmlsZW5hbWUgOiBpbiBTdHJpbmcpOworICAgLS0gIEFLQQorCisgICAtLSAgTUFOUEFHRShgY3Vyc19wcmludC4zeCcpCisgICAtLSAgTm90IGltcGxlbWVudGVkOiAgbWNwcmludAorCisgICAtLSAgTUFOUEFHRShgY3Vyc19wcmludHcuM3gnKQorICAgLS0gIE5vdCBpbXBsZW1lbnRlZDogcHJpbnR3LCAgd3ByaW50dywgbXZwcmludHcsIG12d3ByaW50dywgdndwcmludHcsCisgICAtLSAgICAgICAgICAgICAgICAgICB2d19wcmludHcKKyAgIC0tICBQbGVhc2UgdXNlIHRoZSBBZGEgc3R5bGUgVGV4dF9JTyBjaGlsZCBwYWNrYWdlcyBmb3IgZm9ybWF0dGVkCisgICAtLSAgcHJpbnRpbmcuIEl0IGRvZXNuJ3QgbWFrZSBhIGxvdCBvZiBzZW5zZSB0byBtYXAgdGhlIHByaW50ZiBzdHlsZQorICAgLS0gIEMgZnVuY3Rpb25zIHRvIEFkYS4KKworICAgLS0gIE1BTlBBR0UoYGN1cnNfc2NhbncuM3gnKQorICAgLS0gIE5vdCBpbXBsZW1lbnRlZDogc2NhbncsIHdzY2FudywgbXZzY2FudywgbXZ3c2NhbncsIHZ3c2NhbncsIHZ3X3NjYW53CisKKyAgIC0tICBNQU5QQUdFKGByZXNpemV0ZXJtLjN4JykKKyAgIC0tICBOb3QgSW1wbGVtZW50ZWQ6IHJlc2l6ZXRlcm0KKworICAgLS0gIE1BTlBBR0UoYHdyZXNpemUuM3gnKQorCisgICAtLSAgQU5DSE9SKGB3cmVzaXplKCknLGBSZXNpemUnKQorICAgcHJvY2VkdXJlIFJlc2l6ZSAoV2luICAgICAgICAgICAgICAgOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICAgTnVtYmVyX09mX0xpbmVzICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgTnVtYmVyX09mX0NvbHVtbnMgOiBDb2x1bW5fQ291bnQpOworICAgLS0gIEFLQQorCitwcml2YXRlCisgICB0eXBlIFdpbmRvdyBpcyBuZXcgU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworICAgTnVsbF9XaW5kb3cgOiBjb25zdGFudCBXaW5kb3cgOj0gMDsKKworICAgLS0gIFRoZSBuZXh0IGNvbnN0YW50cyBhcmUgZ2VuZXJhdGVkIGFuZCBtYXkgYmUgZGlmZmVyZW50IG9uIHlvdXIKKyAgIC0tICBhcmNoaXRlY3R1cmUuCisgICAtLQoraW5jbHVkZShgV2luZG93X09mZnNldHMnKWRubAorICAgQ3Vyc2VzX0Jvb2xfRmFsc2UgOiBjb25zdGFudCBDdXJzZXNfQm9vbCA6PSAwOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvTWFrZWZpbGUuaW4gYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTc4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTU0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKyMKKyMgICRJZDogTWFrZWZpbGUuaW4sdiAxLjM0IDIwMDYvMTIvMTcgMTY6NDU6MDIgdG9tIEV4cCAkCisjCisuU1VGRklYRVM6CisKK1NIRUxMCQk9IC9iaW4vc2gKK1RISVMJCT0gTWFrZWZpbGUKKworeAkJPSBAUFJPR19FWFRACisKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2xpYmRpcgkJPSBAbGliZGlyQAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorCitJTlNUQUxMCQk9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBCT0gQElOU1RBTExfREFUQUAKKworQVdLCQk9IEBBV0tACitMTl9TCQk9IEBMTl9TQAorCitDQwkJPSBAQ0NACitDRkxBR1MJCT0gQENGTEFHU0AKKworQ1BQRkxBR1MJPSBAQUNQUEZMQUdTQCBcCisJCSAgLURIQVZFX0NPTkZJR19IIC1JJChzcmNkaXIpCisKK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCisKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDQ19HX09QVEAgLURUUkFDRQorQ0ZMQUdTX1BST0ZJTEUJPSAkKENDRkxBR1MpIC1wZworQ0ZMQUdTX1NIQVJFRAk9ICQoQ0NGTEFHUykgQENDX1NIQVJFRF9PUFRTQAorCitDRkxBR1NfREVGQVVMVAk9ICQoQ0ZMQUdTX0BERlRfVVBSX01PREVMQCkKKworUkVMX1ZFUlNJT04JPSBAY2ZfY3ZfcmVsX3ZlcnNpb25ACitBQklfVkVSU0lPTgk9IEBjZl9jdl9hYmlfdmVyc2lvbkAKK0xPQ0FMX0xJQkRJUgk9IEB0b3BfYnVpbGRkaXJAL2xpYgorCitMSU5LCQk9ICQoQ0MpCitMREZMQUdTCQk9IEBMREZMQUdTQCBATERfTU9ERUxAIEBMSUJTQAorCitSQU5MSUIJCT0gQFJBTkxJQkAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithZGFfc3JjZGlyPS4uL3NyYworCitMRF9GTEFHUyAgICAgPSBATERfTU9ERUxAICQoTE9DQUxfTElCUykgQExERkxBR1NAIEBMSUJTQCBATE9DQUxfTERGTEFHUzJAICQoTERGTEFHUykKKworQURBICAgICAgICAgID0gQGNmX2FkYV9jb21waWxlckAKK0FEQUZMQUdTICAgICA9IEBBREFGTEFHU0AgLUkkKHNyY2RpcikKKworQURBTUFLRSAgICAgID0gQGNmX2FkYV9tYWtlQAorQURBTUFLRUZMQUdTID0gLWEgLUEkKHNyY2RpcikgLUEkKGFkYV9zcmNkaXIpIC1BJChzcmNkaXIpLyQoYWRhX3NyY2RpcikKKworQUxJQiAgICAgICAgID0gQGNmX2FkYV9wYWNrYWdlQAorQUJBU0UgICAgICAgID0gJChBTElCKS1jdXJzZXMKKworQ0FSR1MgICAgICAgID0tY2FyZ3MgJChBREFGTEFHUykKK0xBUkdTICAgICAgICA9LWxhcmdzIEBURVNUX0FSRzJAICQoTERfRkxBR1MpIC1sQWRhQ3Vyc2VzCisgCitQUk9HUyAgICAgICAgPSB0b3VyIHJhaW4gbmN1cnNlcyAKKworVE9VUl9PQkpTICAgID0JdG91ci5vIHNhbXBsZS5vIHNhbXBsZS1jdXJzZXNfZGVtby5vIHNhbXBsZS1leHBsYW5hdGlvbi5vIAlcCisJCXNhbXBsZS1mb3JtX2RlbW8ubyBzYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcubyAJCVwKKwkJc2FtcGxlLWhlYWRlcl9oYW5kbGVyLm8gc2FtcGxlLWhlbHBlcnMubyAJCQlcCisJCXNhbXBsZS1rZXlib2FyZF9oYW5kbGVyLm8gc2FtcGxlLW1hbmlmZXN0Lm8gc2FtcGxlLW1lbnVfZGVtby5vCVwKKwkJc2FtcGxlLW1lbnVfZGVtby1hdXgubyBzYW1wbGUtdGV4dF9pb19kZW1vLm8JCQlcCisJCXNhbXBsZS1jdXJzZXNfZGVtby1hdHRyaWJ1dGVzLm8gc2FtcGxlLWN1cnNlc19kZW1vLW1vdXNlLm8JXAorCQlzYW1wbGUtZm9ybV9kZW1vLWF1eC5vIHNhbXBsZS1teV9maWVsZF90eXBlLm8KKworUkFJTl9PQkpTICAgID0JcmFpbi5vIHN0YXR1cy5vCisKK05DVVJTRVNfT0JKUyA9IG5jdXJzZXMubyAgICAgICAgCW5jdXJzZXMyLWdldGNoX3Rlc3QubyBcCisJbmN1cnNlczItYWNzX2FuZF9zY3JvbGwubyAgICAgICBuY3Vyc2VzMi1tLm8gXAorCW5jdXJzZXMyLWFjc19kaXNwbGF5Lm8gICAgICAgICAgbmN1cnNlczItbWVudV90ZXN0Lm8gXAorCW5jdXJzZXMyLWF0dHJfdGVzdC5vICAgICAgICAgICAgbmN1cnNlczItb3ZlcmxhcF90ZXN0Lm8gXAorCW5jdXJzZXMyLWNvbG9yX2VkaXQubyAgICAgICAgICAgbmN1cnNlczItc2xrX3Rlc3QubyBcCisJbmN1cnNlczItY29sb3JfdGVzdC5vICAgICAgICAgICBuY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLm8gXAorCW5jdXJzZXMyLWRlbW9fZm9ybXMubyAgICAgICAgICAgbmN1cnNlczItdHJhY2Vfc2V0Lm8gXAorCW5jdXJzZXMyLWRlbW9fcGFkLm8gICAgICAgICAgICAgbmN1cnNlczItdXRpbC5vIFwKKwluY3Vyc2VzMi1kZW1vX3BhbmVscy5vICAgICAgICAgIG5jdXJzZXMyLm8gXAorCW5jdXJzZXMyLWZsdXNoaW5wX3Rlc3QubworCisKK2FsbCA6OiAgdG91ciR4IHJhaW4keCBuY3Vyc2VzJHgKKwlAZWNobyBtYWRlICRACisKK3NvdXJjZXMgOgorCUBlY2hvIG1hZGUgJEAKKworbGlicyBcCitpbnN0YWxsIFwKK2luc3RhbGwubGlicyA6OgorCUBlY2hvIG1hZGUgJEAKKwordW5pbnN0YWxsIFwKK3VuaW5zdGFsbC5saWJzIDo6CisJQGVjaG8gbWFkZSAkQAorCituY3Vyc2VzJHggOgorCSQoQURBTUFLRSkgJChBREFNQUtFRkxBR1MpIG5jdXJzZXMgJChDQVJHUykgJChMQVJHUykKKwordG91ciR4IDoJZXhwbGFpbi5tc2cKKwkkKEFEQU1BS0UpICQoQURBTUFLRUZMQUdTKSB0b3VyICQoQ0FSR1MpICQoTEFSR1MpCisKK2V4cGxhaW4ubXNnOgkkKHNyY2RpcikvZXhwbGFpbi50eHQKKwljcCAkKHNyY2RpcikvZXhwbGFpbi50eHQgJEAKKworcmFpbiR4IDoKKwkkKEFEQU1BS0UpICQoQURBTUFLRUZMQUdTKSByYWluICQoQ0FSR1MpICQoTEFSR1MpCisKK21vc3RseWNsZWFuOgorCUBlY2hvIG1hZGUgJEAKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwlybSAtZiAqLm8gKi5hbGkgYl90Ki4qICoucyAkKFBST0dTKSBhLm91dCBjb3JlIGJfKl90ZXN0LmMgKi54cltic10gXAorCWV4cGxhaW4ubXNnIHRyYWNlIHNjcmVlbmR1bXAgCisKK2Rpc3RjbGVhbiA6OiBjbGVhbgorCXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKwlAZWNobyBtYWRlICRACmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL1JFQURNRSBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZjE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL1JFQURNRQpAQCAtMCwwICsxLDM1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFJFQURNRSx2IDEuMiAyMDA2LzA0LzIyIDIyOjI0OjEyIHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW50ZW50aW9uIG9mIHRoZSBkZW1vIGF0IHRoaXMgcG9pbnQgaW4gdGltZSBpcyBub3QgdG8gZGVtb25zdHJhdGUgYWxsCit0aGUgZmVhdHVyZXMgb2YgKG4pY3Vyc2VzIGFuZCBpdHMgc3Vic3lzdGVtcywgYnV0IHRvIGdpdmUgc29tZSBzYW1wbGUKK3NvdXJjZXMgaG93IHRvIHVzZSB0aGUgYmluZGluZyBhdCBhbGwuCisKK0lkZWFsbHkgaW4gdGhlIGZ1dHVyZSB3ZSBjYW4gY29tYmluZSBib3RoIGdvYWxzLgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9leHBsYWluLnR4dCBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvZXhwbGFpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwZjYxNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvZXhwbGFpbi50eHQKQEAgLTAsMCArMSwxODYgQEAKKyNWRVJTSU9OCitUaGlzIGlzIFZlcnNpb24gMDAuOTAuMDAgb2YgdGhlIGRlbW8gcGFja2FnZS4KKyNNRU5VS0VZUworSW4gYSBtZW51IHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgS2V5cyBpbiB0aGUgd2hvbGUgYXBwbGljYXRpb246CisKKyAgIC0gQ1RSTC1YICAgICAgICBlWGl0IHRoZSBtZW51CisgICAtIENUUkwtTiAgICAgICAgR28gdG8gbmV4dCBpdGVtCisgICAtIENUUkwtUCAgICAgICAgR28gdG8gcHJldmlvdXMgaXRlbQorICAgLSBDVFJMLVUgICAgICAgIFNjcm9sbCB1cCBvbmUgbGluZQorICAgLSBDVFJMLUQgICAgICAgIFNjcm9sbCBkb3duIG9uZSBsaW5lCisgICAtIENUUkwtRiAgICAgICAgU2Nyb2xsIGRvd24gb25lIHBhZ2UKKyAgIC0gUEFHRSBET1dOICAgICBTY3JvbGwgZG93biBvbmUgcGFnZQorICAgLSBQQUdFIFVQICAgICAgIFNjcm9sbCBiYWNrIG9uZSBwYWdlCisgICAtIENUUkwtQiAgICAgICAgU2Nyb2xsIGJhY2sgb25lIHBhZ2UKKyAgIC0gQ1RSTC1ZICAgICAgICBDbGVhciBwYXR0ZXJuCisgICAtIENUUkwtSCAgICAgICAgRGVsZXRlIGxhc3QgY2hhcmFjdGVyIGZyb20gcGF0dGVybgorICAgLSBCYWNrc3BhY2UgICAgIERlbGV0ZSBsYXN0IGNoYXJhY3RlciBmcm9tIHBhdHRlcm4KKyAgIC0gQ1RSTC1BICAgICAgICBOZXh0IHBhdHRlcm4gbWF0Y2gKKyAgIC0gQ1RSTC1FICAgICAgICBQcmV2aW91cyBwYXR0ZXJuIG1hdGNoCisgICAtIENUUkwtVCAgICAgICAgVG9nZ2xlIGl0ZW0gaW4gYSBtdWx0aS1zZWxlY3Rpb24gbWVudQorICAgLSBDUiBvciBMRiAgICAgIFNlbGVjdCBhbiBpdGVtCisgICAtIEhPTUUgS2V5ICAgICAgR28gdG8gdGhlIGZpcnN0IGl0ZW0KKyAgIC0gRjMgICAgICAgICAgICBRdWl0IHRoZSBtZW51CisgICAtIEN1cnNvciBEb3duICAgRG93biBvbmUgaXRlbQorICAgLSBDdXJzb3IgVXAgICAgIFVwIG9uZSBpdGVtCisgICAtIEN1cnNvciBMZWZ0ICAgTGVmdCBvbmUgaXRlbQorICAgLSBDdXJzb3IgUmlnaHQgIFJpZ2h0IG9uZSBpdGVtCisgICAtIEVORCBLZXkgICAgICAgR28gdG8gbGFzdCBpdGVtCisjRk9STUtFWVMKKyAgIC0gQ1RSTC1YCSAgIGVYaXQgdGhlIGZvcm0gICAgICAgICAgICAgICAgICAgCisgICAtIENUUkwtRgkgICBHbyBmb3J3YXJkIHRvIHRoZSBuZXh0IGZpZWxkCisgICAtIENUUkwtQgkgICBHbyBiYWNrd2FyZCB0byB0aGUgcHJldmlvdXMgZmllbGQKKyAgIC0gQ1RSTC1MCSAgIEdvIHRvIHRoZSBmaWVsZCBsZWZ0IG9mIHRoZSBjdXJyZW50IG9uZSAgICAgICAgICAgCisgICAtIENUUkwtUgkgICBHbyB0byB0aGUgZmllbGQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgb25lCisgICAtIENUUkwtVQkgICBHbyB0byB0aGUgZmllbGQgYWJvdmUgdGhlIGN1cnJlbnQgb25lICAKKyAgIC0gQ1RSTC1ECSAgIEdvIHRvIHRoZSBmaWVsZCBiZWxvdyB0aGUgY3VycmVudCBvbmUgICAgICAgICAgIAorCisgICAtIENUUkwtVwkgICBHbyB0byB0aGUgbmV4dCB3b3JkIGluIHRoZSBmaWVsZCAgICAgICAgICAgCisgICAtIENUUkwtVAkgICBHbyB0byB0aGUgcHJldmlvdXMgd29yZCBpbiB0aGUgZmllbGQKKworICAgLSBDVFJMLUEJICAgR28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmllbGQKKyAgIC0gQ1RSTC1FCSAgIEdvIHRvIHRoZSBlbmQgb2YgdGhlIGZpZWxkCisKKyAgIC0gQ1RSTC1JCSAgIEluc2VydCBhIGJsYW5rIGNoYXJhY3RlciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbgorICAgLSBDVFJMLU8JICAgSW5zZXJ0IGEgbGluZQorICAgLSBDVFJMLVYJICAgRGVsZXRlIGEgY2hhcmFjdGVyICAgICAgICAgIAorICAgLSBDVFJMLUgJICAgRGVsZXRlIHByZXZpb3VzIGNoYXJhY3RlciAgICAgCisgICAtIENUUkwtWQkgICBEZWxldGUgYSBsaW5lICAgICAgICAgIAorICAgLSBDVFJMLUcJICAgRGVsZXRlIGEgd29yZCAgICAgICAgICAKKyAgIC0gQ1RSTC1LCSAgIENsZWFyIHRvIGVuZCBvZiBmaWVsZCAgICAgICAgICAKKworICAgLSBDVFJMLU4JICAgTmV4dCBjaG9pY2UgaW4gYSBjaG9pY2UgZmllbGQgKEVudW1lcmF0aW9ucyBldGMuKSAgICAgICAgIAorICAgLSBDVFJMLVAJICAgUHJldmlvdXMgY2hvaWNlIGluIGEgY2hvaWNlIGZpZWxkLgorI0hFTFAKKyNIRUxQS0VZUworWW91IG1heSBzY3JvbGwgd2l0aCB0aGUgQ3Vyc29yIFVwL0Rvd24gS2V5cy4KK1lvdSBtYXkgbGVhdmUgdGhlIGhlbHAgd2l0aCB0aGUgRnVuY3Rpb24gS2V5IGxhYmVsbGVkICdRdWl0Jy4KKyNJTkhFTFAKK1lvdSBhcmUgYWxyZWFkeSBpbiB0aGUgaGVscCBzeXN0ZW0uCitZb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGxlZCAnUXVpdCcuCisjTUFJTgorVGhpcyBpcyB0aGUgbWFpbiBtZW51IG9mIHRoZSBzYW1wbGUgcHJvZ3JhbSBmb3IgdGhlIG5jdXJzZXMgQWRhOTUKK2JpbmRpbmcuIFRoZSBtYWluIGludGVudGlvbiBvZiB0aGUgZGVtbyBpcyBub3QgdG8gZGVtb25zdGF0ZSBvcgordGVzdCBhbGwgdGhlIGZlYXR1cmVzIG9mIG5jdXJzZXMgYW5kIGl0J3Mgc3Vic3lzdGVtcywgYnV0IHRvIHByb3ZpZGUKK3RvIHlvdSBzb21lIHNhbXBsZSBjb2RlIGhvdyB0byB1c2UgdGhlIGJpbmRpbmcgd2l0aCBBZGE5NS4gCisKK1lvdSBtYXkgc2VsZWN0IHRoaXMgb3B0aW9uczoKKworICAgKiBMb29rIGF0IHNvbWUgbmN1cnNlcyBjb3JlIGZ1bmN0aW9ucworICAgKiBMb29rIGF0IHNvbWUgZmVhdHVyZXMgb2YgdGhlIG1lbnUgc3Vic3lzdGVtCisgICAqIExvb2sgYXQgc29tZSBmZWF0dXJlcyBvZiB0aGUgZm9ybSBzdWJzeXN0ZW0KKyAgICogTG9vayBhdCB0aGUgb3V0cHV0IG9mIHRoZSBBZGEuVGV4dF9JTyBsaWtlIGZ1bmN0aW9ucworICAgICBmb3IgbmN1cnNlcy4KKyAgIAorI01BSU5QQUQKK1lvdSBtYXkgcHJlc3MgYXQgYW55IHBsYWNlIGluIHRoaXMgZGVtbyBDVFJMLUMuIFRoaXMgd2lsbCBnaXZlIHlvdSBhIGNvbW1hbmQKK3dpbmRvdy4gWW91IGNhbiBqdXN0IHR5cGUgaW4gdGhlIExhYmVsLVN0cmluZyBvZiBhIGZ1bmN0aW9uIGtleSwgdGhlbiB0aGlzCitrZXkgd2lsbCBiZSBzaW11bGF0ZWQuIFRoaXMgc2hvdWxkIGhlbHAgeW91IHRvIHJ1biB0aGUgYXBwbGljYXRpb24gZXZlbiBpZgoreW91IHJ1biBpdCBvbiBhIHRlcm1pbmFsIHdpdGggbm8gb3Igb25seSBhIGZldyBmdW5jdGlvbiBrZXlzLiBXaXRoIENUUkwtTgorYW5kIENUUkwtUCB5b3UgbWF5IGJyb3dzZSB0aHJvdWdoIHRoZSBwb3NzaWJsZSB2YWx1ZXMgaW4gdGhlIGNvbW1hbmQgd2luZG93LgorI01FTlUwMAorSGVyZSB3ZSBnaXZlIHlvdSBhIHNlbGVjdGlvbiBvZiB2YXJpb3VzIG1lbnUgZGVtb25zdHJhdGlvbnMuCisjTUVOVS1QQUQwMAorVGhpcyBtZW51IGl0c2VsZiBpcyBhIGRlbW8gZm9yIGEgc2luZ2xlIHZhbHVlZCwgMS1jb2x1bW4gbWVudSB3aXRoCitkZXNjcmlwdGlvbnMgZm9yIHRoZSBpdGVtcywgYSBtYXJrZXIgYW5kIGEgcGFkZGluZyBjaGFyYWN0ZXIgYmV0d2VlbgordGhlIGl0ZW0gbmFtZSBhbmQgdGhlIGRlc2NyaXB0aW9uLgorI01FTlUwMQorVGhpcyBpcyBhIGRlbW8gb2YgdGhlIHNvbWUgb2YgdGhlIG1lbnUgbGF5b3V0IG9wdGlvbnMuIE9uZSBvZiB0aGVtCitpcyB0aGUgc3BhY2luZyBmdW5jdGlvbmFsaXR5LiBKdXN0IHByZXNzIHRoZSBLZXkgbGFiZWxsZWQgIkZsaXAiIHRvIAorZmxpcCBiZXR3ZWVuIHRoZSBub24tc3BhY2VkIGFuZCBhIHNwYWNlZCB2ZXJzaW9uIG9mIHRoZSBtZW51LiBQbGVhc2UKK25vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5pcXVlIGZvciBuY3Vyc2VzIGFuZCBpcyBub3QgZm91bmQgCitpbiB0aGUgU1ZyNCBtZW51IGltcGxlbWVudGF0aW9uLiAKKworVGhpcyBpcyBhIG1lbnUgdGhhdCBzb21ldGltZXMgZG9lc24ndCBmaXQgaW50byBpdCdzIHdpbmRvdyBhbmQgCit0aGVyZWZvcmUgaXQgYmVjb21lcyBhIHNjcm9sbCBtZW51LiAKKworWW91IGNhbiBhbHNvIHNlZSBoZXJlIHZlcnkgbmljZWx5IHRoZSBwYXR0ZXJuIG1hdGNoaW5nIGZ1bmN0aW9uYWxpdHkKK29mIG1lbnVzLiBUeXBlIGZvciBleGFtcGxlIGEgJ0onIGFuZCB5b3Ugd2lsbCBiZSBwb3NpdGlvbmVkIHRvIHRoZQorbmV4dCBpdGVtIGFmdGVyIHRoZSBjdXJyZW50IHN0YXJ0aW5nIHdpdGggYSAnSicuIEFueSBtb3JlIGNoYXJhY3RlcnMKK3lvdSB0eXBlIGluIG1ha2UgdGhlIHBhdHRlcm4gbW9yZSBzcGVjaWZpYy4gV2l0aCBDVFJMLUEgYW5kIENUUkwtWgorKGZvciBtb3JlIGRldGFpbHMgcHJlc3MgdGhlIEtleSBsYWJlbGxlZCAiS2V5cyIpIHlvdSBjYW4gYnJvd3NlCit0aHJvdWdoIGFsbCB0aGUgaXRlbXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4uCisKK1lvdSBtYXkgY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIG1lbnUuIEp1c3QgcHJlc3Mgb25lIG9mIHRoZSBrZXlzCitsYWJlbGxlZCAiNHgxIiwgIjR4MiIgb3IgIjR4MyIgdG8gZ2V0IGEgbWVudSB3aXRoIHRoYXQgbWFueSByb3dzCithbmQgY29sdW1ucy4KKworV2l0aCB0aGUgS2V5cyAiTy1Sb3ciIG9yICJPLUNvbCIgKHRoZXkgb2NjdXB5IHRoZSBzYW1lIGxhYmVsIGFuZAorc3dpdGNoIG9uIHNlbGVjdGlvbikgeW91IGNhbiBjaGFuZ2UgdGhlIG1ham9yIG9yZGVyIHNjaGVtZSBmb3IgCit0aGUgbWVudS4gSWYgIk8tQ29sIiBpcyB2aXNpYmxlLCB0aGUgbWVudSBpcyBjdXJyZW50bHkgbWFqb3IKK29yZGVyZWQgYnkgcm93cywgeW91IGNhbiBzd2l0Y2ggdG8gbWFqb3IgY29sdW1uIG9yZGVyIGJ5IHByZXNzaW5nCit0aGUga2V5LiBJZiAiTy1Sb3ciIGlzIHZpc2libGUsIGl0J3MganVzdCB0aGUgcmV2ZXJzZSBzaXR1YXRpb24uCitUaGlzIEtleSBpcyBub3QgdmlzaWJsZSBpbiAiNHgxIiBsYXlvdXQgbW9kZSwgYmVjYXVzZSBpbiB0aGlzIGNhc2UKK3RoZSBmdW5jdGlvbmFsaXR5IG1ha2VzIG5vIHNlbnNlLgorCitXaXRoIHRoZSBLZXlzICJNdWx0aSIgb3IgIlNpbmdsIiAodGhleSBvY2N1cHkgdGhlIHNhbWUgbGFiZWwgYW5kCitzd2l0Y2ggb24gc2VsZWN0aW9uKSB5b3UgY2FuIGNoYW5nZSB3aGV0aGVyIG9yIG5vdCB0aGUgbWVudSBhbGxvd3MKK211bHRpcGxlIG9yIG9ubHkgc2luZ2xlIHNlbGVjdGlvbi4KKworV2l0aCB0aGUgS2V5cyAiK0Rlc2MiIG9yICItRGVzYyIgKHRoZXkgb2NjdXB5IHRoZSBzYW1lIGxhYmVsIGFuZAorc3dpdGNoIG9uIHNlbGVjdGlvbikgeW91IGNhbiBjaGFuZ2Ugd2hldGhlciBvciBub3QgdGhlIGRlc2NyaXB0aW9ucworZm9yIGVhY2ggaXRlbSBzaG91bGQgYmUgZGlzcGxheWVkLiBQbGVhc2Ugbm90IHRoYXQgdGhpcyBrZXkgaXMKK25vdCB2aXNpYmxlIGluIHRoZSAiNHgzIiBsYXlvdXQgbW9kZSwgYmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlCittZW51IHdvdWxkbid0IGZpdCBvbiBhIHR5cGljYWxsIDgweDI0IHNjcmVlbi4KKworV2l0aCB0aGUgS2V5cyAiRGlzYWIiIG9yICJFbmFiIiAodGhleSBvY2N1cHkgdGhlIHNhbWUgbGFiZWwgYW5kCitzd2l0Y2ggb24gc2VsZWN0aW9uKSB5b3UgY2FuIGRpcy0gb3IgZW5hYmxlIHRoZSBzZWxlY3RhYmlsaXR5IG9mCit0aGUgbW9udGggd2l0aCAzMSBkYXlzLgorI01FTlUtUEFEMDEKK1lvdSBtYXkgcHJlc3MgIkZsaXAiIHRvIHNlZSB0aGUgZWZmZWN0IG9mIG5jdXJzZXMgdW5pcXVlIG1lbnUtc3BhY2luZy4KK1RoZSBLZXlzICI0eDEiLCAiNHgyIiBhbmQgIjR4MyIgd2lsbCBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgbWVudS4KK1BsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhIHNjcm9sbGluZyBtZW51LiBZb3UgbWF5IGFsc28gcGxheSB3aXRoIHRoZQorcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbmFsaXR5IG9yIHRyeSB0byBjaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgbWVudS4KK0ZvciBtb3JlIGRldGFpbHMgcHJlc3MgdGhlIEtleSBsYWJlbGxlZCAiSGVscCIuCisjRk9STTAwCitUaGlzIGlzIGEgZGVtbyBvZiB0aGUgZm9ybXMgcGFja2FnZS4KKyNGT1JNLVBBRDAwCitQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZGVtbyBpcyBmYXIgZnJvbSBiZWluZyBjb21wbGV0ZS4gSXQgcmVhbGx5IHNob3dzCitvbmx5IGEgc21hbGwgcGFydCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZm9ybXMgcGFja2FnZS4gTGV0J3MgaG9wZSAKK3RoZSBuZXh0IHZlcnNpb24gd2lsbCBoYXZlIGEgcmljaGVyIGRlbW8gKFlvdSB3YW4ndCB0byBjb250cmlidXRlID8pLgorI05PVElNUEwKK1NvcnJ5IHRoaXMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGVtbyBpcyBub3QgaW1wbGVtZW50ZWQgYXQgdGhlIG1vbWVudC4KK1JlbWVtYmVyIHRoaXMgaXMgYSBmcmVld2FyZSBwcm9qZWN0LCBzbyBJIGNhbiB1c2Ugb25seSBteSB2ZXJ5IHJhcmUKK2ZyZWUgdGltZSB0byBjb250aW51ZSBjb2RpbmcuIElmIHlvdSB3b3VsZCBsaWtlIHRvIGNvbnRyaWJ1dGUsIHlvdQorYXJlIHZlcnkgd2VsY29tZSAhCisjQ1VSU0VTMDAKK1RoaXMgaXMgYSBtZW51IHdoZXJlIHlvdSBjYW4gc2VsZWN0IHNvbWUgZGlmZmVyZW50IGRlbW9zIG9mIHRoZSBuY3Vyc2VzCitmdW5jdGlvbmFsaXR5LgorI0NVUlNFUy1QQUQwMAorUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGRlbW8gaXMgZmFyIGZyb20gYmVpbmcgY29tcGxldGUuIEl0IHJlYWxseSBzaG93cworb25seSBhIHNtYWxsIHBhcnQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGN1cnNlcyBwYWNrYWdlLiBMZXQncyBob3BlIAordGhlIG5leHQgdmVyc2lvbiB3aWxsIGhhdmUgYSByaWNoZXIgZGVtbyAoWW91IHdhbid0IHRvIGNvbnRyaWJ1dGUgPykuCisjTU9VU0VLRVlTCitJbiB0aGlzIGRlbW8geW91IG1heSB1c2UgdGhpcyBrZXlzOgorCisgICAtIEtleSBsYWJlbGxlZCAiSGVscCIgIHRvIGdldCBhIGhlbHAKKyAgIC0gS2V5IGxhYmVsbGVkICJLZXlzIiAgaXMgd2hhdCB5b3UgYXJlIHJlYWRpbmcgbm93CisgICAtIEtleSBsYWJlbGxlZCAiUXVpdCIgIHRvIGxlYXZlIHRoZSBkZW1vCisKK1lvdSBtYXkgY2xpY2sgdGhlIG1vdXNlIGJ1dHRvbnMgYXQgYW55IGxvY2F0aW9uIGF0IHRoZSBzY3JlZW4gYW5kIGxvb2sKK2F0IHRoZSBwcm90b2NvbCB3aW5kb3cgIQorI01PVVNFMDAKK0EgcmF0aGVyIHNpbXBsZSB1c2Ugb2YgYSBtb3VzZSBhcyBkZW1vLiBJdCdzIHRoZXJlIGp1c3QgdG8gdGVzdCB0aGUKK2NvZGUgYW5kIHRvIHByb3ZpZGUgdGhlIHNhbXBsZSBzb3VyY2UuIAorCitJdCBtaWdodCBiZSBvZiBpbnRlcmVzdCwgdGhhdCB0aGUgb3V0cHV0IGludG8gdGhlIHByb3RvY29sIHdpbmRvdyBpcworZG9uZSBieSB0aGUgKG4pY3Vyc2VzIFRleHRfSU8gc3VicGFja2FnZXMuIEVzcGVjaWFsbHkgdGhlIG91dHB1dCBvZgordGhlIGJ1dHRvbiBhbmQgc3RhdGUgbmFtZXMgaXMgZG9uZSBieSBBZHMncyBlbnVtZXJhdGlvbiBJTywgd2hpY2ggCithbGxvd3MgeW91IHRvIHByaW50IHRoZSBuYW1lcyBvZiBlbnVtZXJhdGlvbiBsaXRlcmFscy4gVGhhdCdzIHJlYWxseQorbmljZS4KKyNNT1VTRS1QQUQwMAorVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGRlbW8gb2YgdGhlIG1vdXNlIGZlYXR1cmVzIG9mIG5jdXJzZXMuIEl0J3MgdGhlcmUKK2p1c3QgdG8gdGVzdCB3aGV0aGVyIG9yIG5vdCB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBiaW5kaW5nIHJlYWxseQord29ya3Mgb24gdGhlIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIChzZWVtcyBzbykuCisjQVRUUklCREVNTworQWdhaW4gdGhpcyBpcyBhIG1vcmUgdGhhbiBzaW1wbGUgZGVtbyBhbmQganVzdCBoZXJlIHRvIGdpdmUgeW91IHRoZQorc291cmNlY29kZS4KKyNBVFRSSUJLRVlTCitZb3UgbWF5IHByZXNzIG9uZSBvZiB0aGUgdGhyZWUgd2VsbCBrbm93biBzdGFuZGFyZCBrZXlzIG9mIHRoaXMgZGVtby4KKyNBVFRSSUItUEFEMDAKK0FnYWluIHRoaXMgaXMgYSBtb3JlIHRoYW4gc2ltcGxlIGRlbW8gYW5kIGp1c3QgaGVyZSB0byBnaXZlIHlvdSB0aGUKK3NvdXJjZWNvZGUuIEZlZWwgZnJlZSB0byBjb250cmlidXRlIG1vcmUuCisjVEVYVElPCisjVEVYVElPS0VZUworI1RFWFRJTy1QQUQwMAorI0VORApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlcy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmNjU4ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlcy5hZGIKQEAgLTAsMCArMSw0NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBuY3Vyc2VzMi5tOyB1c2UgbmN1cnNlczIubTsKK3dpdGggR05BVC5PU19MaWI7IHVzZSBHTkFULk9TX0xpYjsKKworcHJvY2VkdXJlIG5jdXJzZXMgaXMKK2JlZ2luCisgICBPU19FeGl0IChtYWluKTsKK2VuZCBuY3Vyc2VzOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfYW5kX3Njcm9sbC5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19hbmRfc2Nyb2xsLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2IyZDkxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfYW5kX3Njcm9sbC5hZGIKQEAgLTAsMCArMSw3MTYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6NDIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgV2luZG93cyBhbmQgc2Nyb2xsaW5nIHRlc3Rlci4KKy0tICBEZW1vbnN0cmF0ZSB3aW5kb3dzCisKK3dpdGggQWRhLlN0cmluZ3MuRml4ZWQ7Cit3aXRoIEFkYS5TdHJpbmdzOworCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOword2l0aCBuY3Vyc2VzMi5nZW5lcmljUHV0czsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlB1dFdpbjsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUHV0V2luOworCit3aXRoIEFkYS5TdHJlYW1zLlN0cmVhbV9JTzsgdXNlIEFkYS5TdHJlYW1zLlN0cmVhbV9JTzsKK3dpdGggQWRhLlN0cmVhbXM7IHVzZSBBZGEuU3RyZWFtczsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmFjc19hbmRfc2Nyb2xsIGlzCisKKyAgIE1hY3JvX1F1aXQgICA6IGNvbnN0YW50IEtleV9Db2RlIDo9IENoYXJhY3RlcidQb3MgKCdRJykgbW9kIDE2IzIwIzsKKyAgIE1hY3JvX0VzY2FwZSA6IGNvbnN0YW50IEtleV9Db2RlIDo9IENoYXJhY3RlcidQb3MgKCdbJykgbW9kIDE2IzIwIzsKKworICAgUXVpdCA6IGNvbnN0YW50IEtleV9Db2RlIDo9IENUUkwgKCdRJyk7CisgICBFc2NhcGUgOiBjb25zdGFudCBLZXlfQ29kZSA6PSBDVFJMICgnWycpOworCisgICBCb3RsaW5lcyA6IGNvbnN0YW50IExpbmVfUG9zaXRpb24gOj0gNDsKKworICAgdHlwZSBwYWlyIGlzIHJlY29yZAorICAgICAgeSA6IExpbmVfUG9zaXRpb247CisgICAgICB4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgZW5kIHJlY29yZDsKKworICAgdHlwZSBGcmFtZTsKKyAgIHR5cGUgRnJhbWVBIGlzIGFjY2VzcyBGcmFtZTsKKworICAgZiA6IEZpbGVfVHlwZTsKKyAgIGR1bXBmaWxlIDogY29uc3RhbnQgU3RyaW5nIDo9ICJzY3JlZW5kdW1wIjsKKworICAgcHJvY2VkdXJlIE91dGVyYm94ICh1bCwgbHIgOiBwYWlyOyBvbm9mZiA6IEJvb2xlYW4pOworICAgZnVuY3Rpb24gIEhhdmVLZXlQYWQgKHcgOiBXaW5kb3cpIHJldHVybiBCb29sZWFuOworICAgZnVuY3Rpb24gIEhhdmVTY3JvbGwgKHcgOiBXaW5kb3cpIHJldHVybiBCb29sZWFuOworICAgcHJvY2VkdXJlIG5ld3dpbl9sZWdlbmQgKGN1cnB3IDogV2luZG93KTsKKyAgIHByb2NlZHVyZSB0cmFuc2llbnQgKGN1cnB3IDogV2luZG93OyBtc2cgOiBTdHJpbmcpOworICAgcHJvY2VkdXJlIG5ld3dpbl9yZXBvcnQgKHdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworICAgcHJvY2VkdXJlIHNlbGVjdGNlbGwgKHVsaSA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgdWxqIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgIGxyaSA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgbHJqIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgIHAgICA6IG91dCBwYWlyOworICAgICAgICAgICAgICAgICAgICAgICAgIGIgICA6IG91dCBCb29sZWFuKTsKKyAgIGZ1bmN0aW9uICBnZXR3aW5kb3cgcmV0dXJuIFdpbmRvdzsKKyAgIHByb2NlZHVyZSBuZXd3aW5fbW92ZSAod2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICBkeSAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICBkeCAgOiBDb2x1bW5fUG9zaXRpb24pOworICAgZnVuY3Rpb24gZGVsZXRlX2ZyYW1lZCAoZnAgOiBGcmFtZUE7IHNob3dpdCA6IEJvb2xlYW4pIHJldHVybiBGcmFtZUE7CisKKyAgIHVzZSBBZGEuU3RyZWFtcy5TdHJlYW1fSU87CisKKyAgIC0tICBBIGxpbmtlZCBsaXN0CisgICAtLSAgSSAgd2lzaCB0aGVyZSB3YXMgYSBzdGFuZGFyZCBsaWJyYXJ5IGxpbmtlZCBsaXN0LiBPaCB3ZWxsLgorICAgdHlwZSBGcmFtZSBpcyByZWNvcmQKKyAgICAgIG5leHQsIGxhc3QgOiBGcmFtZUE7CisgICAgICBkb19zY3JvbGwgOiBCb29sZWFuOworICAgICAgZG9fa2V5cGFkIDogQm9vbGVhbjsKKyAgICAgIHdpbmQgOiBXaW5kb3c7CisgICBlbmQgcmVjb3JkOworCisgICBjdXJyZW50IDogRnJhbWVBOworCisgICBjIDogS2V5X0NvZGU7CisKKyAgIHByb2NlZHVyZSBPdXRlcmJveCAodWwsIGxyIDogcGFpcjsgb25vZmYgOiBCb29sZWFuKSBpcworICAgYmVnaW4KKyAgICAgIGlmIG9ub2ZmIHRoZW4KKyAgICAgICAgIC0tICBOb3RlIHRoZSBmaXggb2YgYW4gb2JzY3VyZSBidWcKKyAgICAgICAgIC0tICB0cnkgbWFraW5nIGEgMXgxIGJveCB0aGVuIGVubGFyZ2luZyBpdCwgdGhlIGlzIGEgYmxhbmsKKyAgICAgICAgIC0tICB1cHBlciBsZWZ0IGNvcm5lciEKKyAgICAgICAgIEFkZCAoTGluZSA9PiB1bC55IC0gMSwgQ29sdW1uID0+IHVsLnggLSAxLAorICAgICAgICAgICAgIENoID0+IEFDU19NYXAgKEFDU19VcHBlcl9MZWZ0X0Nvcm5lcikpOworICAgICAgICAgQWRkIChMaW5lID0+IHVsLnkgLSAxLCBDb2x1bW4gPT4gbHIueCArIDEsCisgICAgICAgICAgICAgQ2ggPT4gQUNTX01hcCAoQUNTX1VwcGVyX1JpZ2h0X0Nvcm5lcikpOworICAgICAgICAgQWRkIChMaW5lID0+IGxyLnkgKyAxLCBDb2x1bW4gPT4gbHIueCArIDEsCisgICAgICAgICAgICAgQ2ggPT4gQUNTX01hcCAoQUNTX0xvd2VyX1JpZ2h0X0Nvcm5lcikpOworICAgICAgICAgQWRkIChMaW5lID0+IGxyLnkgKyAxLCBDb2x1bW4gPT4gdWwueCAtIDEsCisgICAgICAgICAgICAgQ2ggPT4gQUNTX01hcCAoQUNTX0xvd2VyX0xlZnRfQ29ybmVyKSk7CisKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHVsLnkgLSAxLCBDb2x1bW4gPT4gdWwueCk7CisgICAgICAgICBIb3Jpem9udGFsX0xpbmUgKExpbmVfU3ltYm9sID0+IEFDU19NYXAgKEFDU19Ib3Jpem9udGFsX0xpbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lX1NpemUgPT4gSW50ZWdlciAobHIueCAtIHVsLngpICsgMSk7CisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiB1bC55LCBDb2x1bW4gPT4gdWwueCAtIDEpOworICAgICAgICAgVmVydGljYWxfTGluZSAoTGluZV9TeW1ib2wgPT4gQUNTX01hcCAoQUNTX1ZlcnRpY2FsX0xpbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TaXplID0+IEludGVnZXIgKGxyLnkgLSB1bC55KSArIDEpOworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gbHIueSArIDEsIENvbHVtbiA9PiB1bC54KTsKKyAgICAgICAgIEhvcml6b250YWxfTGluZSAoTGluZV9TeW1ib2wgPT4gQUNTX01hcCAoQUNTX0hvcml6b250YWxfTGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVfU2l6ZSA9PiBJbnRlZ2VyIChsci54IC0gdWwueCkgKyAxKTsKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHVsLnksIENvbHVtbiA9PiBsci54ICsgMSk7CisgICAgICAgICBWZXJ0aWNhbF9MaW5lIChMaW5lX1N5bWJvbCA9PiBBQ1NfTWFwIChBQ1NfVmVydGljYWxfTGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICBMaW5lX1NpemUgPT4gSW50ZWdlciAobHIueSAtIHVsLnkpICsgMSk7CisgICAgICBlbHNlCisgICAgICAgICBBZGQgKExpbmUgPT4gdWwueSAtIDEsIENvbHVtbiA9PiB1bC54IC0gMSwgQ2ggPT4gJyAnKTsKKyAgICAgICAgIEFkZCAoTGluZSA9PiB1bC55IC0gMSwgQ29sdW1uID0+IGxyLnggKyAxLCBDaCA9PiAnICcpOworICAgICAgICAgQWRkIChMaW5lID0+IGxyLnkgKyAxLCBDb2x1bW4gPT4gbHIueCArIDEsIENoID0+ICcgJyk7CisgICAgICAgICBBZGQgKExpbmUgPT4gbHIueSArIDEsIENvbHVtbiA9PiB1bC54IC0gMSwgQ2ggPT4gJyAnKTsKKworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gdWwueSAtIDEsIENvbHVtbiA9PiB1bC54KTsKKyAgICAgICAgIEhvcml6b250YWxfTGluZSAoTGluZV9TeW1ib2wgPT4gQmxhbmsyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lX1NpemUgPT4gSW50ZWdlciAobHIueCAtIHVsLngpICsgMSk7CisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiB1bC55LCBDb2x1bW4gPT4gdWwueCAtIDEpOworICAgICAgICAgVmVydGljYWxfTGluZSAoTGluZV9TeW1ib2wgPT4gQmxhbmsyLAorICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TaXplID0+IEludGVnZXIgKGxyLnkgLSB1bC55KSArIDEpOworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gbHIueSArIDEsIENvbHVtbiA9PiB1bC54KTsKKyAgICAgICAgIEhvcml6b250YWxfTGluZSAoTGluZV9TeW1ib2wgPT4gQmxhbmsyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lX1NpemUgPT4gSW50ZWdlciAobHIueCAtIHVsLngpICsgMSk7CisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiB1bC55LCBDb2x1bW4gPT4gbHIueCArIDEpOworICAgICAgICAgVmVydGljYWxfTGluZSAoTGluZV9TeW1ib2wgPT4gQmxhbmsyLAorICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TaXplID0+IEludGVnZXIgKGxyLnkgLSB1bC55KSArIDEpOworICAgICAgZW5kIGlmOworICAgZW5kIE91dGVyYm94OworCisgICBmdW5jdGlvbiBIYXZlS2V5UGFkICh3IDogV2luZG93KSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBHZXRfS2V5UGFkX01vZGUgKHcpOworICAgZXhjZXB0aW9uCisgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gcmV0dXJuIEZhbHNlOworICAgZW5kIEhhdmVLZXlQYWQ7CisKKyAgIGZ1bmN0aW9uIEhhdmVTY3JvbGwgKHcgOiBXaW5kb3cpIHJldHVybiBCb29sZWFuIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFNjcm9sbGluZ19BbGxvd2VkICh3KTsKKyAgIGV4Y2VwdGlvbgorICAgICAgd2hlbiBDdXJzZXNfRXhjZXB0aW9uID0+IHJldHVybiBGYWxzZTsKKyAgIGVuZCBIYXZlU2Nyb2xsOworCisgICBwcm9jZWR1cmUgbmV3d2luX2xlZ2VuZCAoY3VycHcgOiBXaW5kb3cpIGlzCisKKyAgICAgIHBhY2thZ2UgcCBpcyBuZXcgZ2VuZXJpY1B1dHMgKDIwMCk7CisgICAgICB1c2UgcDsKKyAgICAgIHVzZSBwLkJTOworCisgICAgICB0eXBlIHN0cmluZ19hIGlzIGFjY2VzcyBTdHJpbmc7CisKKyAgICAgIHR5cGUgcnJyIGlzIHJlY29yZAorICAgICAgICAgbXNnIDogc3RyaW5nX2E7CisgICAgICAgICBjb2RlIDogSW50ZWdlciByYW5nZSAwIC4uIDM7CisgICAgICBlbmQgcmVjb3JkOworCisgICAgICBsZWdlbmQgOiBjb25zdGFudCBhcnJheSAoUG9zaXRpdmUgcmFuZ2UgPD4pIG9mIHJyciA6PQorICAgICAgICAoCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5DID0gY3JlYXRlIHdpbmRvdyIpLCAwCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBuZXcgU3RyaW5nJygiXk4gPSBuZXh0IHdpbmRvdyIpLCAwCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBuZXcgU3RyaW5nJygiXlAgPSBwcmV2aW91cyB3aW5kb3ciKSwgMAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5GID0gc2Nyb2xsIGZvcndhcmQiKSwgMAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5CID0gc2Nyb2xsIGJhY2t3YXJkIiksIDAKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeSyA9IGtleXBhZCglcykiKSwgMQorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5TID0gc2Nyb2xsb2soJXMpIiksIDIKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeVyA9IHNhdmUgd2luZG93IHRvIGZpbGUiKSwgMAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5SID0gcmVzdG9yZSB3aW5kb3ciKSwgMAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgbmV3IFN0cmluZycoIl5YID0gcmVzaXplIiksIDAKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIG5ldyBTdHJpbmcnKCJeUSVzID0gZXhpdCIpLCAzCisgICAgICAgICAgKQorICAgICAgICAgKTsKKworICAgICAgYnVmIDogQm91bmRlZF9TdHJpbmc7CisgICAgICBkb19rZXlwYWQgOiBjb25zdGFudCBCb29sZWFuIDo9IEhhdmVLZXlQYWQgKGN1cnB3KTsKKyAgICAgIGRvX3Njcm9sbCA6IGNvbnN0YW50IEJvb2xlYW4gOj0gSGF2ZVNjcm9sbCAoY3VycHcpOworCisgICAgICBwb3MgOiBOYXR1cmFsOworCisgICAgICBteXBhaXIgOiBwYWlyOworCisgICAgICB1c2UgQWRhLlN0cmluZ3MuRml4ZWQ7CisKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBMaW5lcyAtIDQsIENvbHVtbiA9PiAwKTsKKyAgICAgIGZvciBuIGluIGxlZ2VuZCdSYW5nZSBsb29wCisgICAgICAgICBwb3MgOj0gQWRhLlN0cmluZ3MuRml4ZWQuSW5kZXggKFNvdXJjZSA9PiBsZWdlbmQgKG4pLm1zZy5hbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm4gPT4gIiVzIik7CisgICAgICAgICAtLSAgYnVmIDo9IChvdGhlcnMgPT4gJyAnKTsKKyAgICAgICAgIGJ1ZiA6PSBUb19Cb3VuZGVkX1N0cmluZyAobGVnZW5kIChuKS5tc2cuYWxsKTsKKyAgICAgICAgIGNhc2UgbGVnZW5kIChuKS5jb2RlIGlzCisgICAgICAgICAgICB3aGVuIDAgPT4gbnVsbDsKKyAgICAgICAgICAgIHdoZW4gMSA9PgorICAgICAgICAgICAgICAgaWYgZG9fa2V5cGFkIHRoZW4KKyAgICAgICAgICAgICAgICAgIFJlcGxhY2VfU2xpY2UgKGJ1ZiwgcG9zLCBwb3MgKyAxLCAieWVzIik7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBSZXBsYWNlX1NsaWNlIChidWYsIHBvcywgcG9zICsgMSwgIm5vIik7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICB3aGVuIDIgPT4KKyAgICAgICAgICAgICAgIGlmIGRvX3Njcm9sbCB0aGVuCisgICAgICAgICAgICAgICAgICBSZXBsYWNlX1NsaWNlIChidWYsIHBvcywgcG9zICsgMSwgInllcyIpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgUmVwbGFjZV9TbGljZSAoYnVmLCBwb3MsIHBvcyArIDEsICJubyIpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgd2hlbiAzID0+CisgICAgICAgICAgICAgICBpZiBkb19rZXlwYWQgdGhlbgorICAgICAgICAgICAgICAgICAgUmVwbGFjZV9TbGljZSAoYnVmLCBwb3MsIHBvcyArIDEsICIvRVNDIik7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBSZXBsYWNlX1NsaWNlIChidWYsIHBvcywgcG9zICsgMSwgIiIpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChMaW5lID0+IG15cGFpci55LCBDb2x1bW4gPT4gbXlwYWlyLngpOworICAgICAgICAgaWYgQ29sdW1ucyA8IG15cGFpci54ICsgMyArIENvbHVtbl9Qb3NpdGlvbiAoTGVuZ3RoIChidWYpKSB0aGVuCisgICAgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgICAgZWxzaWYgbiAvPSAxIHRoZW4gLS0gbiAvPSBsZWdlbidGaXJzdAorICAgICAgICAgICAgQWRkIChTdHIgPT4gIiwgIik7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBteUFkZCAoU3RyID0+IGJ1Zik7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgZW5kIG5ld3dpbl9sZWdlbmQ7CisKKyAgIHByb2NlZHVyZSB0cmFuc2llbnQgKGN1cnB3IDogV2luZG93OyBtc2cgOiBTdHJpbmcpIGlzCisgICBiZWdpbgorICAgICAgbmV3d2luX2xlZ2VuZCAoY3VycHcpOworICAgICAgaWYgbXNnIC89ICIiIHRoZW4KKyAgICAgICAgIEFkZCAoTGluZSA9PiBMaW5lcyAtIDEsIENvbHVtbiA9PiAwLCBTdHIgPT4gbXNnKTsKKyAgICAgICAgIFJlZnJlc2g7CisgICAgICAgICBOYXBfTWlsbGlfU2Vjb25kcyAoMTAwMCk7CisgICAgICBlbmQgaWY7CisKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gMSwgQ29sdW1uID0+IDApOworCisgICAgICBpZiBIYXZlS2V5UGFkIChjdXJwdykgdGhlbgorICAgICAgICAgQWRkIChTdHIgPT4gIk5vbi1hcnJvdyIpOworICAgICAgZWxzZQorICAgICAgICAgQWRkIChTdHIgPT4gIkFsbCBvdGhlciIpOworICAgICAgZW5kIGlmOworICAgICAgQWRkIChzdHIgPT4gIiBjaGFyYWN0ZXJzIGFyZSBlY2hvZWQsIHdpbmRvdyBzaG91bGQgIik7CisgICAgICBpZiBub3QgSGF2ZVNjcm9sbCAoY3VycHcpIHRoZW4KKyAgICAgICAgIEFkZCAoU3RyID0+ICJub3QgIik7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKHN0ciA9PiAic2Nyb2xsIik7CisKKyAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgZW5kIHRyYW5zaWVudDsKKworICAgcHJvY2VkdXJlIG5ld3dpbl9yZXBvcnQgKHdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIGlzCisgICAgICB5IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIHggOiBDb2x1bW5fUG9zaXRpb247CisgICAgICB1c2UgSW50X0lPOworICAgICAgdG1wMmEgOiBTdHJpbmcgKDEgLi4gMik7CisgICAgICB0bXAyYiA6IFN0cmluZyAoMSAuLiAyKTsKKyAgIGJlZ2luCisgICAgICBpZiB3aW4gLz0gU3RhbmRhcmRfV2luZG93IHRoZW4KKyAgICAgICAgIHRyYW5zaWVudCAod2luLCAiIik7CisgICAgICBlbmQgaWY7CisgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uICh3aW4sIHksIHgpOworICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSAxLCBDb2x1bW4gPT4gQ29sdW1ucyAtIDE3KTsKKyAgICAgIFB1dCAodG1wMmEsIEludGVnZXIgKHkpKTsKKyAgICAgIFB1dCAodG1wMmIsIEludGVnZXIgKHgpKTsKKyAgICAgIEFkZCAoU3RyID0+ICJZID0gIiAmIHRtcDJhICYgIiBYID0gIiAmIHRtcDJiKTsKKyAgICAgIGlmIHdpbiAvPSBTdGFuZGFyZF9XaW5kb3cgdGhlbgorICAgICAgICAgUmVmcmVzaDsKKyAgICAgIGVsc2UKKyAgICAgICAgIE1vdmVfQ3Vyc29yICh3aW4sIHksIHgpOworICAgICAgZW5kIGlmOworICAgZW5kIG5ld3dpbl9yZXBvcnQ7CisKKyAgIHByb2NlZHVyZSBzZWxlY3RjZWxsICh1bGkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgIHVsaiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBscmkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgIGxyaiA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwICAgOiBvdXQgcGFpcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBiICAgOiBvdXQgQm9vbGVhbikgaXMKKyAgICAgIGMgOiBLZXlfQ29kZTsKKyAgICAgIHJlcyA6IHBhaXI7CisgICAgICBpIDogTGluZV9Qb3NpdGlvbiA6PSAwOworICAgICAgaiA6IENvbHVtbl9Qb3NpdGlvbiA6PSAwOworICAgICAgc2kgOiBjb25zdGFudCBMaW5lX1Bvc2l0aW9uIDo9IGxyaSAtIHVsaSArIDE7CisgICAgICBzaiA6IGNvbnN0YW50IENvbHVtbl9Qb3NpdGlvbiA6PSBscmogLSB1bGogKyAxOworICAgYmVnaW4KKyAgICAgIHJlcy55IDo9IHVsaTsKKyAgICAgIHJlcy54IDo9IHVsajsKKyAgICAgIGxvb3AKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHVsaSArIGksIENvbHVtbiA9PiB1bGogKyBqKTsKKyAgICAgICAgIG5ld3dpbl9yZXBvcnQ7CisKKyAgICAgICAgIGMgOj0gR2V0Y2hhcjsKKyAgICAgICAgIGNhc2UgYyBpcworICAgICAgICAgICAgd2hlbgorICAgICAgICAgICAgICBNYWNyb19RdWl0ICAgfAorICAgICAgICAgICAgICBNYWNyb19Fc2NhcGUgPT4KKyAgICAgICAgICAgICAgIC0tICBvbiB0aGUgc2FtZSBsaW5lIG1hY3JvIGNhbGxzIGludGVyZmVyZSBkdWUgdG8gdGhlICMgY29tbWVudAorICAgICAgICAgICAgICAgLS0gIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2Uga2V5cGFkIG9mZiBhZmZlY3RzIGFsbCB3aW5kb3dzLgorICAgICAgICAgICAgICAgLS0gIHRyeSByZW1vdmluZyB0aGUgRVNDQVBFIGFuZCBzZWUgd2hhdCBoYXBwZW5zLgorICAgICAgICAgICAgICAgYiA6PSBGYWxzZTsKKyAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdoZW4gS0VZX1VQID0+CisgICAgICAgICAgICAgICBpIDo9IGkgKyBzaSAtIDE7CisgICAgICAgICAgICAgICAtLSAgc2FtZSBhcyAgaSA6PSBpIC0gMSBiZWNhdXNlIG9mIE1vZHVsdXMgYXJpdGhldGljLAorICAgICAgICAgICAgICAgLS0gIG9uIExpbmVfUG9zaXRpb24sIHdoaWNoIGlzIGEgTmF0dXJhbAorICAgICAgICAgICAgICAgLS0gIHRoZSBDIHZlcnNpb24gdXNlcyB0aGlzIGZvcm0gdG9vLCBpbnRlcmVzdGluZ2x5LgorICAgICAgICAgICAgd2hlbiBLRVlfRE9XTiA9PgorICAgICAgICAgICAgICAgaSA6PSBpICsgMTsKKyAgICAgICAgICAgIHdoZW4gS0VZX0xFRlQgPT4KKyAgICAgICAgICAgICAgIGogOj0gaiArIHNqIC0gMTsKKyAgICAgICAgICAgIHdoZW4gS0VZX1JJR0hUID0+CisgICAgICAgICAgICAgICBqIDo9IGogKyAxOworICAgICAgICAgICAgd2hlbiBLZXlfTW91c2UgPT4KKyAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgIGV2ZW50IDogTW91c2VfRXZlbnQ7CisgICAgICAgICAgICAgICAgICB5IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIHggOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBCdXR0b24gOiBNb3VzZV9CdXR0b247CisgICAgICAgICAgICAgICAgICBTdGF0ZSA6IEJ1dHRvbl9TdGF0ZTsKKworICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGV2ZW50IDo9IEdldF9Nb3VzZTsKKyAgICAgICAgICAgICAgICAgIEdldF9FdmVudCAoRXZlbnQgPT4gZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPT4geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCA9PiB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gPT4gQnV0dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgPT4gU3RhdGUpOworICAgICAgICAgICAgICAgICAgaWYgeSA+IHVsaSBhbmQgeCA+IHVsaiB0aGVuCisgICAgICAgICAgICAgICAgICAgICBpIDo9IHkgLSB1bGk7CisgICAgICAgICAgICAgICAgICAgICBqIDo9IHggLSB1bGo7CisgICAgICAgICAgICAgICAgICAgICAtLSAgc2FtZSBhcyB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgICAgICAgICAgcmVzLnkgOj0gdWxpICsgaTsKKyAgICAgICAgICAgICAgICAgICAgIHJlcy54IDo9IHVsaiArIGo7CisgICAgICAgICAgICAgICAgICAgICBwIDo9IHJlczsKKyAgICAgICAgICAgICAgICAgICAgIGIgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgICAgcmVzLnkgOj0gdWxpICsgaTsKKyAgICAgICAgICAgICAgIHJlcy54IDo9IHVsaiArIGo7CisgICAgICAgICAgICAgICBwIDo9IHJlczsKKyAgICAgICAgICAgICAgIGIgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgaSA6PSBpIG1vZCBzaTsKKyAgICAgICAgIGogOj0gaiBtb2Qgc2o7CisgICAgICBlbmQgbG9vcDsKKyAgIGVuZCBzZWxlY3RjZWxsOworCisgICBmdW5jdGlvbiBnZXR3aW5kb3cgcmV0dXJuIFdpbmRvdyBpcworICAgICAgcndpbmRvdyA6IFdpbmRvdzsKKyAgICAgIHVsLCBsciA6IHBhaXI7CisgICAgICByZXN1bHQgOiBCb29sZWFuOworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKKyAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgQWRkIChTdHIgPT4gIlVzZSBhcnJvd3MgdG8gbW92ZSBjdXJzb3IsIGFueXRoaW5nIGVsc2UgdG8gbWFyayBjb3JuZXIgMSIpOworICAgICAgUmVmcmVzaDsKKyAgICAgIHNlbGVjdGNlbGwgKDIsIDEsIExpbmVzIC0gQm90bGluZXMgLSAyLCBDb2x1bW5zIC0gMiwgdWwsIHJlc3VsdCk7CisgICAgICBpZiBub3QgcmVzdWx0IHRoZW4KKyAgICAgICAgIHJldHVybiBOdWxsX1dpbmRvdzsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEFkZCAoTGluZSA9PiB1bC55IC0gMSwgQ29sdW1uID0+IHVsLnggLSAxLAorICAgICAgICAgICBDaCA9PiBBQ1NfTWFwIChBQ1NfVXBwZXJfTGVmdF9Db3JuZXIpKTsKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKKyAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgQWRkIChTdHIgPT4gIlVzZSBhcnJvd3MgdG8gbW92ZSBjdXJzb3IsIGFueXRoaW5nIGVsc2UgdG8gbWFyayBjb3JuZXIgMiIpOworICAgICAgUmVmcmVzaDsKKyAgICAgIHNlbGVjdGNlbGwgKHVsLnksIHVsLngsIExpbmVzIC0gQm90bGluZXMgLSAyLCBDb2x1bW5zIC0gMiwgbHIsIHJlc3VsdCk7CisgICAgICBpZiBub3QgcmVzdWx0IHRoZW4KKyAgICAgICAgIHJldHVybiBOdWxsX1dpbmRvdzsKKyAgICAgIGVuZCBpZjsKKworICAgICAgcndpbmRvdyA6PSBTdWJfV2luZG93IChOdW1iZXJfT2ZfTGluZXMgPT4gbHIueSAtIHVsLnkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJfT2ZfQ29sdW1ucyA9PiBsci54IC0gdWwueCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcnN0X0xpbmVfUG9zaXRpb24gPT4gdWwueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlyc3RfQ29sdW1uX1Bvc2l0aW9uID0+IHVsLngpOworCisgICAgICBPdXRlcmJveCAodWwsIGxyLCBUcnVlKTsKKyAgICAgIFJlZnJlc2g7CisKKyAgICAgIFJlZnJlc2ggKHJ3aW5kb3cpOworCisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMCk7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgIHJldHVybiByd2luZG93OworICAgZW5kIGdldHdpbmRvdzsKKworICAgcHJvY2VkdXJlIG5ld3dpbl9tb3ZlICh3aW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGR5ICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgIGR4ICA6IENvbHVtbl9Qb3NpdGlvbikgaXMKKyAgICAgIGN1cl95LCBtYXhfeSA6IExpbmVfUG9zaXRpb247CisgICAgICBjdXJfeCwgbWF4X3ggOiBDb2x1bW5fUG9zaXRpb247CisgICBiZWdpbgorICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAod2luLCBjdXJfeSwgY3VyX3gpOworICAgICAgR2V0X1NpemUgKHdpbiwgbWF4X3ksIG1heF94KTsKKyAgICAgIGN1cl94IDo9IENvbHVtbl9Qb3NpdGlvbidNaW4gKENvbHVtbl9Qb3NpdGlvbidNYXggKGN1cl94ICsgZHgsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3ggLSAxKTsKKyAgICAgIGN1cl95IDo9IExpbmVfUG9zaXRpb24nTWluIChMaW5lX1Bvc2l0aW9uJ01heCAoY3VyX3kgKyBkeSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3kgLSAxKTsKKworICAgICAgTW92ZV9DdXJzb3IgKHdpbiwgTGluZSA9PiBjdXJfeSwgQ29sdW1uID0+IGN1cl94KTsKKyAgIGVuZCBuZXd3aW5fbW92ZTsKKworICAgZnVuY3Rpb24gZGVsZXRlX2ZyYW1lZCAoZnAgOiBGcmFtZUE7IHNob3dpdCA6IEJvb2xlYW4pIHJldHVybiBGcmFtZUEgaXMKKyAgICAgIG5wIDogRnJhbWVBOworICAgYmVnaW4KKyAgICAgIGZwLmxhc3QubmV4dCA6PSBmcC5uZXh0OworICAgICAgZnAubmV4dC5sYXN0IDo9IGZwLmxhc3Q7CisKKyAgICAgIGlmIHNob3dpdCB0aGVuCisgICAgICAgICBFcmFzZSAoZnAud2luZCk7CisgICAgICAgICBSZWZyZXNoIChmcC53aW5kKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIERlbGV0ZSAoZnAud2luZCk7CisKKyAgICAgIGlmIGZwID0gZnAubmV4dCB0aGVuCisgICAgICAgICBucCA6PSBudWxsOworICAgICAgZWxzZQorICAgICAgICAgbnAgOj0gZnAubmV4dDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIC0tICBUT0RPIGZyZWUoZnApOworICAgICAgcmV0dXJuIG5wOworICAgZW5kIGRlbGV0ZV9mcmFtZWQ7CisKKyAgIE1hc2sgOiBFdmVudF9NYXNrIDo9IE5vX0V2ZW50czsKKyAgIE1hc2syIDogRXZlbnRfTWFzazsKKworICAgdXNlc2NyIDogV2luZG93OworCitiZWdpbgorICAgaWYgSGFzX01vdXNlIHRoZW4KKyAgICAgIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uID0+IExlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBDbGlja2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFzayA9PiBNYXNrKTsKKyAgICAgIE1hc2syIDo9IFN0YXJ0X01vdXNlIChNYXNrKTsKKyAgIGVuZCBpZjsKKyAgIGMgOj0gQ1RSTCAoJ0MnKTsKKyAgIFNldF9SYXdfTW9kZSAoU3dpdGNoT24gPT4gVHJ1ZSk7CisgICBsb29wCisgICAgICB0cmFuc2llbnQgKFN0YW5kYXJkX1dpbmRvdywgIiIpOworICAgICAgY2FzZSBjIGlzCisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdjJykgbW9kIDE2IzIwIyA9PiAtLSAgQ3RybCgnYycpCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBuZXd3IDogY29uc3RhbnQgRnJhbWVBIDo9IG5ldyBGcmFtZScobnVsbCwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbF9XaW5kb3cpOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIG5ld3cud2luZCA6PSBnZXR3aW5kb3c7CisgICAgICAgICAgICAgICBpZiBuZXd3LndpbmQgPSBOdWxsX1dpbmRvdyAgdGhlbgorICAgICAgICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgICAgICAgICAgIC0tICB3YXMgZ290byBicmVha291dDsgaGEgaGEgaGEKKyAgICAgICAgICAgICAgIGVsc2UKKworICAgICAgICAgICAgICAgICAgaWYgY3VycmVudCA9IG51bGwgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIG5ld3cubmV4dCA6PSBuZXd3OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5sYXN0IDo9IG5ld3c7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBuZXd3Lm5leHQgOj0gY3VycmVudC5uZXh0OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5sYXN0IDo9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgICBuZXd3Lmxhc3QubmV4dCA6PSBuZXd3OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5uZXh0Lmxhc3QgOj0gbmV3dzsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnQgOj0gbmV3dzsKKworICAgICAgICAgICAgICAgICAgU2V0X0tleVBhZF9Nb2RlIChjdXJyZW50LndpbmQsIFRydWUpOworICAgICAgICAgICAgICAgICAgY3VycmVudC5kb19rZXlwYWQgOj0gSGF2ZUtleVBhZCAoY3VycmVudC53aW5kKTsKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnQuZG9fc2Nyb2xsIDo9IEhhdmVTY3JvbGwgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdOJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ04nKQorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgIGN1cnJlbnQgOj0gY3VycmVudC5uZXh0OworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnUCcpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdQJykKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBjdXJyZW50IDo9IGN1cnJlbnQubGFzdDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0YnKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnRicpCisgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC53aW5kKSB0aGVuCisgICAgICAgICAgICAgICBTY3JvbGwgKGN1cnJlbnQud2luZCwgMSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdCJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ0InKQorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIGFuZCB0aGVuIEhhdmVTY3JvbGwgKGN1cnJlbnQud2luZCkgdGhlbgorICAgICAgICAgICAgLS0gIFRoZSBDIHZlcnNpb24gb2YgU2Nyb2xsIG1heSByZXR1cm4gRVJSIHdoaWNoIGlzIGlnbm9yZWQKKyAgICAgICAgICAgIC0tICB3ZSBuZWVkIHRvIGF2b2lkIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgIC0tICB3aXRoIHRoZSAnYW5kIEhhdmVTY3JvbGwoY3VycmVudC53aW5kKScKKyAgICAgICAgICAgICAgIFNjcm9sbCAoY3VycmVudC53aW5kLCAtMSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdLJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ0snKQorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgIGN1cnJlbnQuZG9fa2V5cGFkIDo9IG5vdCBjdXJyZW50LmRvX2tleXBhZDsKKyAgICAgICAgICAgICAgIFNldF9LZXlQYWRfTW9kZSAoY3VycmVudC53aW5kLCBjdXJyZW50LmRvX2tleXBhZCk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdTJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ1MnKQorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgIGN1cnJlbnQuZG9fc2Nyb2xsIDo9IG5vdCBjdXJyZW50LmRvX3Njcm9sbDsKKyAgICAgICAgICAgICAgIEFsbG93X1Njcm9sbGluZyAoY3VycmVudC53aW5kLCBjdXJyZW50LmRvX3Njcm9sbCk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdXJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ1cnKQorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBjdXJyZW50Lm5leHQgdGhlbgorICAgICAgICAgICAgICAgQ3JlYXRlIChmLCBOYW1lID0+IGR1bXBmaWxlKTsgLS0gVE9ETyBlcnJvciBjaGVja2luZworICAgICAgICAgICAgICAgaWYgbm90IElzX09wZW4gKGYpIHRoZW4KKyAgICAgICAgICAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBQdXRfV2luZG93IChjdXJyZW50LndpbmQsIGYpOworICAgICAgICAgICAgICAgQ2xvc2UgKGYpOworICAgICAgICAgICAgICAgY3VycmVudCA6PSBkZWxldGVfZnJhbWVkIChjdXJyZW50LCBUcnVlKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ1InKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnUicpCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBuZXd3IDogRnJhbWVBIDo9IG5ldyBGcmFtZScobnVsbCwgbnVsbCwgRmFsc2UsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxfV2luZG93KTsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBPcGVuIChmLCBNb2RlID0+IEluX0ZpbGUsIE5hbWUgPT4gZHVtcGZpbGUpOworICAgICAgICAgICAgICAgbmV3dyA6PSBuZXcgRnJhbWUnKG51bGwsIG51bGwsIEZhbHNlLCBGYWxzZSwgTnVsbF9XaW5kb3cpOworCisgICAgICAgICAgICAgICBuZXd3Lm5leHQgOj0gY3VycmVudC5uZXh0OworICAgICAgICAgICAgICAgbmV3dy5sYXN0IDo9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICBuZXd3Lmxhc3QubmV4dCA6PSBuZXd3OworICAgICAgICAgICAgICAgbmV3dy5uZXh0Lmxhc3QgOj0gbmV3dzsKKworICAgICAgICAgICAgICAgbmV3dy53aW5kIDo9IEdldF9XaW5kb3cgKGYpOworICAgICAgICAgICAgICAgQ2xvc2UgKGYpOworCisgICAgICAgICAgICAgICBSZWZyZXNoIChuZXd3LndpbmQpOworICAgICAgICAgICAgZW5kOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnWCcpIG1vZCAxNiMyMCMgPT4gLS0gIEN0cmwoJ1gnKQorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgIHRtcCwgdWwsIGxyIDogcGFpcjsKKyAgICAgICAgICAgICAgICAgIG14IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgbXkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgdG1wYm9vbCA6IEJvb2xlYW47CisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMCwgQ29sdW1uID0+IDApOworICAgICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiVXNlIGFycm93cyB0byBtb3ZlIGN1cnNvciwgYW55dGhpbmcgZWxzZSAiICYKKyAgICAgICAgICAgICAgICAgICAgICAgInRvIG1hcmsgbmV3IGNvcm5lciIpOworICAgICAgICAgICAgICAgICAgUmVmcmVzaDsKKworICAgICAgICAgICAgICAgICAgR2V0X1dpbmRvd19Qb3NpdGlvbiAoY3VycmVudC53aW5kLCB1bC55LCB1bC54KTsKKworICAgICAgICAgICAgICAgICAgc2VsZWN0Y2VsbCAodWwueSwgdWwueCwgTGluZXMgLSBCb3RsaW5lcyAtIDIsIENvbHVtbnMgLSAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCB0bXBib29sKTsKKyAgICAgICAgICAgICAgICAgIGlmIG5vdCB0bXBib29sIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIC0tICB0aGUgQyB2ZXJzaW9uIGhhZCBhIGdvdG8uIEkgcmVmdXNlIGdvdG9zLgorICAgICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LndpbmQsIGxyLnksIGxyLngpOworICAgICAgICAgICAgICAgICAgICAgbHIueSA6PSBsci55ICsgdWwueSAtIDE7CisgICAgICAgICAgICAgICAgICAgICBsci54IDo9IGxyLnggKyB1bC54IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgIE91dGVyYm94ICh1bCwgbHIsIEZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CisKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LndpbmQsIG15LCBteCk7CisgICAgICAgICAgICAgICAgICAgICBpZiBteSA+IHRtcC55IC0gdWwueSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIGxyLnksIGxyLngpOworICAgICAgICAgICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKGN1cnJlbnQud2luZCwgdG1wLnkgLSB1bC55ICsgMSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuIChjdXJyZW50LndpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKGN1cnJlbnQud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICAgICBpZiBteCA+IHRtcC54IC0gdWwueCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiAwIC4uIG15IC0gMSBsb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoY3VycmVudC53aW5kLCBpLCB0bXAueCAtIHVsLnggKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lIChjdXJyZW50LndpbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChjdXJyZW50LndpbmQpOworCisgICAgICAgICAgICAgICAgICAgICBsciA6PSB0bXA7CisgICAgICAgICAgICAgICAgICAgICAtLSAgVGhlIEMgdmVyc2lvbiBwYXNzZXMgaW52YWxpZCBhcmdzIHRvIHJlc2l6ZQorICAgICAgICAgICAgICAgICAgICAgLS0gIHdoaWNoIHJldHVybnMgYW4gRVJSLiBGb3IgQWRhIHdlIGF2b2lkIHRoZSBleGNlcHRpb24uCisgICAgICAgICAgICAgICAgICAgICBpZiBsci55IC89IHVsLnkgYW5kIGxyLnggLz0gdWwueCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBSZXNpemUgKGN1cnJlbnQud2luZCwgbHIueSAtIHVsLnkgKyAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsci54IC0gdWwueCArIDApOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICAgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHVsLnksIHVsLngpOworICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICBsci55IDo9IGxyLnkgKyB1bC55IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgIGxyLnggOj0gbHIueCArIHVsLnggLSAxOworICAgICAgICAgICAgICAgICAgICAgT3V0ZXJib3ggKHVsLCBsciwgVHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlOworCisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChjdXJyZW50LndpbmQpOworICAgICAgICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMCwgQ29sdW1uID0+IDApOworICAgICAgICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICAgICAgICAgICAgICAgICAgICBVcGRhdGVfU2NyZWVuOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiBLZXlfRjEwICA9PgorICAgICAgICAgICAgZGVjbGFyZSB0bXAgOiBwYWlyOyB0bXBib29sIDogQm9vbGVhbjsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAtLSAgdW5kb2N1bWVudGVkIC0tLSB1c2UgdGhpcyB0byB0ZXN0IGFyZWEgY2xlYXJzCisgICAgICAgICAgICAgICBzZWxlY3RjZWxsICgwLCAwLCBMaW5lcyAtIDEsIENvbHVtbnMgLSAxLCB0bXAsIHRtcGJvb2wpOworICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbjsKKyAgICAgICAgICAgICAgIFJlZnJlc2g7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICB3aGVuIEtleV9DdXJzb3JfVXAgPT4KKyAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LndpbmQsIC0xLCAwKTsKKyAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9Eb3duICA9PgorICAgICAgICAgICAgbmV3d2luX21vdmUgKGN1cnJlbnQud2luZCwgMSwgMCk7CisgICAgICAgICB3aGVuIEtleV9DdXJzb3JfTGVmdCAgPT4KKyAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LndpbmQsIDAsIC0xKTsKKyAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9SaWdodCAgPT4KKyAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LndpbmQsIDAsIDEpOworICAgICAgICAgd2hlbiBLZXlfQmFja3NwYWNlIHwgS2V5X0RlbGV0ZV9DaGFyICA9PgorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgeSA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICB4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgdG1wIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHksIHgpOworICAgICAgICAgICAgICAgLS0gIHggOj0geCAtIDE7CisgICAgICAgICAgICAgICAtLSAgSSBnb3QgdHJpY2tlZCBieSB0aGUgLTEgPSBNYXhfTmF0dXJhbCAtIDEgcmVzdWx0CisgICAgICAgICAgICAgICAtLSAgeSA6PSB5IC0gMTsKKyAgICAgICAgICAgICAgIGlmIG5vdCAoeCA9IDAgYW5kIHkgPSAwKSB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB4ID0gMCB0aGVuCisgICAgICAgICAgICAgICAgICAgICB5IDo9IHkgLSAxOworICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgdG1wLCB4KTsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIHggOj0geCAtIDE7CisgICAgICAgICAgICAgICAgICBEZWxldGVfQ2hhcmFjdGVyIChjdXJyZW50LndpbmQsIHksIHgpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIC0tICBUT0RPIGMgPSAnXHInID8KKyAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgQWRkIChjdXJyZW50LndpbmQsIENoID0+IENvZGVfVG9fQ2hhciAoYykpOworICAgICAgICAgICAgICAgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgIC0tICB0aGlzIGhhcHBlbnMgaWYgd2UgYXJlIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgLS0gIGxvd2VyIHJpZ2h0IG9mIGEgd2luZG93IGFuZCBhZGQgYSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGNhc2U7CisgICAgICBuZXd3aW5fcmVwb3J0IChjdXJyZW50LndpbmQpOworICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KKyAgICAgICAgIHVzZXNjciA6PSBjdXJyZW50LndpbmQ7CisgICAgICBlbHNlCisgICAgICAgICB1c2VzY3IgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgZW5kIGlmOworICAgICAgUmVmcmVzaCAodXNlc2NyKTsKKyAgICAgIGMgOj0gR2V0Y2hhciAodXNlc2NyKTsKKyAgICAgIGV4aXQgd2hlbiBjID0gUXVpdCBvciAoYyA9IEVzY2FwZSBhbmQgSGF2ZUtleVBhZCAodXNlc2NyKSk7CisgICAgICAtLSAgVE9ETyB3aGVuIGRvZXMgYyA9IEVSUiBoYXBwZW4/CisgICBlbmQgbG9vcDsKKworICAgLS0gIFRPRE8gd2hpbGUgY3VycmVudCAvPSBudWxsIGxvb3AKKyAgIC0tICBjdXJyZW50IDo9IGRlbGV0ZV9mcmFtZWQoY3VycmVudCwgRmFsc2UpOworICAgLS0gIGVuZCBsb29wOworCisgICBBbGxvd19TY3JvbGxpbmcgKE1vZGUgPT4gVHJ1ZSk7CisKKyAgIEVuZF9Nb3VzZSAoTWFzazIpOworICAgU2V0X1Jhd19Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CisKK2VuZCBuY3Vyc2VzMi5hY3NfYW5kX3Njcm9sbDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfYW5kX3Njcm9sbC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllNDg2MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5hY3NfYW5kX3Njcm9sbDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2Rpc3BsYXkuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfZGlzcGxheS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxYzYxZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2Rpc3BsYXkuYWRiCkBAIC0wLDAgKzEsMjM1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjYgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ3OjM0ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKK3dpdGggbmN1cnNlczIuZ2VuZXJpY1B1dHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCit3aXRoIEFkYS5TdHJpbmdzLlVuYm91bmRlZDsKK3dpdGggQWRhLlN0cmluZ3MuRml4ZWQ7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5hY3NfZGlzcGxheSBpcworICAgdXNlIEludF9JTzsKKworICAgcHJvY2VkdXJlIHNob3dfdXBwZXJfY2hhcnMgKGZpcnN0IDogSW50ZWdlcik7CisgICBmdW5jdGlvbiAgc2hvd18xX2FjcyAoTiAgICA6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIDogIEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVnZXI7CisgICBwcm9jZWR1cmUgc2hvd19hY3NfY2hhcnM7CisKKyAgIHByb2NlZHVyZSBzaG93X3VwcGVyX2NoYXJzIChmaXJzdCA6IEludGVnZXIpICBpcworICAgICAgQzEgOiBjb25zdGFudCBCb29sZWFuIDo9IChmaXJzdCA9IDEyOCk7CisgICAgICBsYXN0IDogY29uc3RhbnQgSW50ZWdlciA6PSBmaXJzdCArIDMxOworICAgICAgcGFja2FnZSBwIGlzIG5ldyBuY3Vyc2VzMi5nZW5lcmljUHV0cyAoMjAwKTsKKyAgICAgIHVzZSBwOworICAgICAgdXNlIHAuQlM7CisgICAgICB1c2UgQWRhLlN0cmluZ3MuVW5ib3VuZGVkOworCisgICAgICB0bXBhIDogVW5ib3VuZGVkX1N0cmluZzsKKyAgICAgIHRtcGIgOiBCUy5Cb3VuZGVkX1N0cmluZzsKKyAgIGJlZ2luCisgICAgICBFcmFzZTsKKyAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlCisgICAgICAgIChBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAyMCk7CisgICAgICB0bXBhIDo9IFRvX1VuYm91bmRlZF9TdHJpbmcgKCJEaXNwbGF5IG9mICIpOworICAgICAgaWYgQzEgdGhlbgorICAgICAgICAgdG1wYSA6PSB0bXBhICYgIkMxIjsKKyAgICAgIGVsc2UKKyAgICAgICAgIHRtcGEgOj0gdG1wYSAmICJHUiI7CisgICAgICBlbmQgaWY7CisgICAgICB0bXBhIDo9IHRtcGEgJiAiIENoYXJhY3RlciBDb2RlcyAiOworICAgICAgbXlQdXQgKHRtcGIsIGZpcnN0KTsKKyAgICAgIEFwcGVuZCAodG1wYSwgVG9fU3RyaW5nICh0bXBiKSk7CisgICAgICBBcHBlbmQgKHRtcGEsICIgdG8gIik7CisgICAgICBteVB1dCAodG1wYiwgbGFzdCk7CisgICAgICBBcHBlbmQgKHRtcGEsIFRvX1N0cmluZyAodG1wYikpOworICAgICAgQWRkIChTdHIgPT4gVG9fU3RyaW5nICh0bXBhKSk7CisgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAgICAoT24gPT4gRmFsc2UsCisgICAgICAgICBBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIFJlZnJlc2g7CisKKyAgICAgIGZvciBjb2RlIGluIGZpcnN0IC4uIGxhc3QgbG9vcAorICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgcm93IDogY29uc3RhbnQgTGluZV9Qb3NpdGlvbgorICAgICAgICAgICAgICAgIDo9IExpbmVfUG9zaXRpb24gKDQgKyAoKGNvZGUgLSBmaXJzdCkgbW9kIDE2KSk7CisgICAgICAgICAgICBjb2wgOiBjb25zdGFudCBDb2x1bW5fUG9zaXRpb24KKyAgICAgICAgICAgICAgICA6PSBDb2x1bW5fUG9zaXRpb24gKCgoY29kZSAtIGZpcnN0KSAvIDE2KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIChDb2x1bW5zKSAvIDIpOworICAgICAgICAgICAgdG1wMyA6IFN0cmluZyAoMSAuLiAzKTsKKyAgICAgICAgICAgIHRtcHggOiBTdHJpbmcgKDEgLi4gSW50ZWdlciAoQ29sdW1ucyAvIDQpKTsKKyAgICAgICAgICAgIHJlcGx5IDogS2V5X0NvZGU7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgUHV0ICh0bXAzLCBjb2RlKTsKKyAgICAgICAgICAgIG15UHV0ICh0bXBiLCBjb2RlLCAxNik7CisgICAgICAgICAgICB0bXBhIDo9IFRvX1VuYm91bmRlZF9TdHJpbmcgKHRtcDMgJiAiICgiICYgVG9fU3RyaW5nICh0bXBiKSAmICcpJyk7CisKKyAgICAgICAgICAgIEFkYS5TdHJpbmdzLkZpeGVkLk1vdmUgKFRvX1N0cmluZyAodG1wYSksIHRtcHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0aWZ5ID0+IEFkYS5TdHJpbmdzLlJpZ2h0KTsKKyAgICAgICAgICAgIEFkZCAoTGluZSA9PiByb3csIENvbHVtbiA9PiBjb2wsCisgICAgICAgICAgICAgICAgIFN0ciA9PiB0bXB4ICYgJyAnICYgJzonICYgJyAnKTsKKyAgICAgICAgICAgIGlmIEMxIHRoZW4KKyAgICAgICAgICAgICAgIFNldF9Ob0RlbGF5X01vZGUgKE1vZGUgPT4gVHJ1ZSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBBZGRfV2l0aF9JbW1lZGlhdGVfRWNobyAoQ2ggPT4gQ29kZV9Ub19DaGFyIChLZXlfQ29kZSAoY29kZSkpKTsKKyAgICAgICAgICAgIC0tICBUT0RPIGNoZWNrIHRoaXMKKyAgICAgICAgICAgIGlmIEMxIHRoZW4KKyAgICAgICAgICAgICAgIHJlcGx5IDo9IEdldGNoYXI7CisgICAgICAgICAgICAgICB3aGlsZSByZXBseSAvPSBLZXlfTm9uZSBsb29wCisgICAgICAgICAgICAgICAgICBBZGQgKENoID0+IENvZGVfVG9fQ2hhciAocmVwbHkpKTsKKyAgICAgICAgICAgICAgICAgIE5hcF9NaWxsaV9TZWNvbmRzICgxMCk7CisgICAgICAgICAgICAgICAgICByZXBseSA6PSBHZXRjaGFyOworICAgICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICAgICAgICBTZXRfTm9EZWxheV9Nb2RlIChNb2RlID0+IEZhbHNlKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZDsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIHNob3dfdXBwZXJfY2hhcnM7CisKKyAgIGZ1bmN0aW9uIHNob3dfMV9hY3MgKE4gICAgOiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgOiAgQXR0cmlidXRlZF9DaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyIGlzCisgICAgICBoZWlnaHQgOiBjb25zdGFudCBJbnRlZ2VyIDo9IDE2OworICAgICAgcm93IDogY29uc3RhbnQgTGluZV9Qb3NpdGlvbiA6PSBMaW5lX1Bvc2l0aW9uICg0ICsgKE4gbW9kIGhlaWdodCkpOworICAgICAgY29sIDogY29uc3RhbnQgQ29sdW1uX1Bvc2l0aW9uIDo9IENvbHVtbl9Qb3NpdGlvbiAoKE4gLyBoZWlnaHQpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgKENvbHVtbnMpIC8gMik7CisgICAgICB0bXB4IDogU3RyaW5nICgxIC4uIEludGVnZXIgKENvbHVtbnMpIC8gMyk7CisgICBiZWdpbgorICAgICAgQWRhLlN0cmluZ3MuRml4ZWQuTW92ZSAobmFtZSwgdG1weCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEp1c3RpZnkgPT4gQWRhLlN0cmluZ3MuUmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcm9wID0+IEFkYS5TdHJpbmdzLkxlZnQpOworICAgICAgQWRkIChMaW5lID0+IHJvdywgQ29sdW1uID0+IGNvbCwgU3RyID0+IHRtcHggJiAnICcgJiAnOicgJiAnICcpOworICAgICAgLS0gIHdlIG5lZWQgbW9yZSByb29tIHRoYW4gQyBiZWNhdXNlIG91ciBpZGVudGlmaWVycyBhcmUgbG9uZ2VyCisgICAgICAtLSAgMjIgY2hhcnMgYWN0dWFsbHkKKyAgICAgIEFkZCAoQ2ggPT4gY29kZSk7CisgICAgICByZXR1cm4gTiArIDE7CisgICBlbmQgc2hvd18xX2FjczsKKworICAgcHJvY2VkdXJlIHNob3dfYWNzX2NoYXJzIGlzCisgICAgICBuIDogSW50ZWdlcjsKKyAgIGJlZ2luCisgICAgICBFcmFzZTsKKyAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlCisgICAgICAgIChBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIEFkZCAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMjAsCisgICAgICAgICAgIFN0ciA9PiAiRGlzcGxheSBvZiB0aGUgQUNTIENoYXJhY3RlciBTZXQiKTsKKyAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChPbiA9PiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgUmVmcmVzaDsKKworICAgICAgLS0gIHRoZSBmb2xsb3dpbmcgaXMgdXNlZnVsIHRvIGdlbmVyYXRlIHRoZSBiZWxvdworICAgICAgLS0gIGdyZXAgJ15bIF0qQUNTXycgLi4vc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzIHwKKyAgICAgIC0tICBhd2sgJ3twcmludCAgIm4gOj0gc2hvd18xX2FjcyhuLCBcIiIkMSJcIiwgQUNTX01hcCgiJDEiKSk7In0nCisKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAoMCwgIkFDU19VcHBlcl9MZWZ0X0Nvcm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19VcHBlcl9MZWZ0X0Nvcm5lcikpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0xvd2VyX0xlZnRfQ29ybmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgQUNTX01hcCAoQUNTX0xvd2VyX0xlZnRfQ29ybmVyKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfVXBwZXJfUmlnaHRfQ29ybmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgQUNTX01hcCAoQUNTX1VwcGVyX1JpZ2h0X0Nvcm5lcikpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0xvd2VyX1JpZ2h0X0Nvcm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19Mb3dlcl9SaWdodF9Db3JuZXIpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19MZWZ0X1RlZSIsIEFDU19NYXAgKEFDU19MZWZ0X1RlZSkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1JpZ2h0X1RlZSIsIEFDU19NYXAgKEFDU19SaWdodF9UZWUpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19Cb3R0b21fVGVlIiwgQUNTX01hcCAoQUNTX0JvdHRvbV9UZWUpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19Ub3BfVGVlIiwgQUNTX01hcCAoQUNTX1RvcF9UZWUpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19Ib3Jpem9udGFsX0xpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICBBQ1NfTWFwIChBQ1NfSG9yaXpvbnRhbF9MaW5lKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfVmVydGljYWxfTGluZSIsIEFDU19NYXAgKEFDU19WZXJ0aWNhbF9MaW5lKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfUGx1c19TeW1ib2wiLCBBQ1NfTWFwIChBQ1NfUGx1c19TeW1ib2wpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19TY2FuX0xpbmVfMSIsIEFDU19NYXAgKEFDU19TY2FuX0xpbmVfMSkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1NjYW5fTGluZV85IiwgQUNTX01hcCAoQUNTX1NjYW5fTGluZV85KSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfRGlhbW9uZCIsIEFDU19NYXAgKEFDU19EaWFtb25kKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfQ2hlY2tlcl9Cb2FyZCIsIEFDU19NYXAgKEFDU19DaGVja2VyX0JvYXJkKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfRGVncmVlIiwgQUNTX01hcCAoQUNTX0RlZ3JlZSkpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1BsdXNfTWludXMiLCBBQ1NfTWFwIChBQ1NfUGx1c19NaW51cykpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0J1bGxldCIsIEFDU19NYXAgKEFDU19CdWxsZXQpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19MZWZ0X0Fycm93IiwgQUNTX01hcCAoQUNTX0xlZnRfQXJyb3cpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19SaWdodF9BcnJvdyIsIEFDU19NYXAgKEFDU19SaWdodF9BcnJvdykpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX0Rvd25fQXJyb3ciLCBBQ1NfTWFwIChBQ1NfRG93bl9BcnJvdykpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1VwX0Fycm93IiwgQUNTX01hcCAoQUNTX1VwX0Fycm93KSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfQm9hcmRfT2ZfU3F1YXJlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19Cb2FyZF9PZl9TcXVhcmVzKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfTGFudGVybiIsIEFDU19NYXAgKEFDU19MYW50ZXJuKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfU29saWRfQmxvY2siLCBBQ1NfTWFwIChBQ1NfU29saWRfQmxvY2spKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19TY2FuX0xpbmVfMyIsIEFDU19NYXAgKEFDU19TY2FuX0xpbmVfMykpOworICAgICAgbiA6PSBzaG93XzFfYWNzIChuLCAiQUNTX1NjYW5fTGluZV83IiwgQUNTX01hcCAoQUNTX1NjYW5fTGluZV83KSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfTGVzc19Pcl9FcXVhbCIsIEFDU19NYXAgKEFDU19MZXNzX09yX0VxdWFsKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfR3JlYXRlcl9Pcl9FcXVhbCIsCisgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19HcmVhdGVyX09yX0VxdWFsKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfUEkiLCBBQ1NfTWFwIChBQ1NfUEkpKTsKKyAgICAgIG4gOj0gc2hvd18xX2FjcyAobiwgIkFDU19Ob3RfRXF1YWwiLCBBQ1NfTWFwIChBQ1NfTm90X0VxdWFsKSk7CisgICAgICBuIDo9IHNob3dfMV9hY3MgKG4sICJBQ1NfU3RlcmxpbmciLCBBQ1NfTWFwIChBQ1NfU3RlcmxpbmcpKTsKKworICAgICAgaWYgbiA9IDAgdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBzaG93X2Fjc19jaGFyczsKKworICAgYzEgOiBLZXlfQ29kZTsKKyAgIGMgOiBDaGFyYWN0ZXIgOj0gJ2EnOworYmVnaW4KKyAgIGxvb3AKKyAgICAgIGNhc2UgYyBpcworICAgICAgICAgd2hlbiAnYScgPT4KKyAgICAgICAgICAgIHNob3dfYWNzX2NoYXJzOworICAgICAgICAgd2hlbiAnMCcgfCAnMScgfCAnMicgfCAnMycgPT4KKyAgICAgICAgICAgIHNob3dfdXBwZXJfY2hhcnMgKGN0b2kgKGMpICogMzIgKyAxMjgpOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIG51bGw7CisgICAgICBlbmQgY2FzZTsKKyAgICAgIEFkZCAoTGluZSA9PiBMaW5lcyAtIDMsIENvbHVtbiA9PiAwLAorICAgICAgICAgICBTdHIgPT4gIk5vdGU6IEFOU0kgdGVybWluYWxzIG1heSBub3QgZGlzcGxheSBDMSBjaGFyYWN0ZXJzLiIpOworICAgICAgQWRkIChMaW5lID0+IExpbmVzIC0gMiwgQ29sdW1uID0+IDAsCisgICAgICAgICAgIFN0ciA9PiAiU2VsZWN0OiBhPUFDUywgMD1DMSwgMSwyLDM9R1IgY2hhcmFjdGVycywgcT1xdWl0Iik7CisgICAgICBSZWZyZXNoOworICAgICAgYzEgOj0gR2V0Y2hhcjsKKyAgICAgIGMgOj0gQ29kZV9Ub19DaGFyIChjMSk7CisgICAgICBleGl0IHdoZW4gYyA9ICdxJyBvciBjID0gJ3gnOworICAgZW5kIGxvb3A7CisgICBQYXVzZTsKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CitlbmQgbmN1cnNlczIuYWNzX2Rpc3BsYXk7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19kaXNwbGF5LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2Rpc3BsYXkuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjE2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19kaXNwbGF5LmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIuYWNzX2Rpc3BsYXk7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWF0dHJfdGVzdC5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWF0dHJfdGVzdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyNzEwNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYXR0cl90ZXN0LmFkYgpAQCAtMCwwICsxLDM2MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0NzoyNiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1pbmZvOwordXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm87Cit3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOword2l0aCBBZGEuU3RyaW5ncy5GaXhlZDsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmF0dHJfdGVzdCBpcworCisgICBmdW5jdGlvbiAgc3Vic2V0IChzdXBlciwgc3ViIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBCb29sZWFuOworICAgZnVuY3Rpb24gIGludGVyc2VjdCAoYiwgYSA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gQm9vbGVhbjsKKyAgIGZ1bmN0aW9uICBoYXNfQV9DT0xPUiAoYXR0ciA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyKSByZXR1cm4gQm9vbGVhbjsKKyAgIGZ1bmN0aW9uICBzaG93X2F0dHIgKHJvdyAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA6IE5hdHVyYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgb25jZSA6IEJvb2xlYW4pIHJldHVybiBMaW5lX1Bvc2l0aW9uOworICAgcHJvY2VkdXJlIGF0dHJfZ2V0YyAoc2tpcCA6IGluIG91dCBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgZmcsIGJnIDogaW4gb3V0IENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA6IG91dCBCb29sZWFuKTsKKworICAgZnVuY3Rpb24gc3Vic2V0IChzdXBlciwgc3ViIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBCb29sZWFuIGlzCisgICBiZWdpbgorICAgICAgaWYKKyAgICAgICAgKHN1cGVyLlN0YW5kX091dCBvciBub3Qgc3ViLlN0YW5kX091dCkgYW5kCisgICAgICAgIChzdXBlci5VbmRlcl9MaW5lIG9yIG5vdCBzdWIuVW5kZXJfTGluZSkgYW5kCisgICAgICAgIChzdXBlci5SZXZlcnNlX1ZpZGVvIG9yIG5vdCBzdWIuUmV2ZXJzZV9WaWRlbykgYW5kCisgICAgICAgIChzdXBlci5CbGluayBvciBub3Qgc3ViLkJsaW5rKSBhbmQKKyAgICAgICAgKHN1cGVyLkRpbV9DaGFyYWN0ZXIgb3Igbm90IHN1Yi5EaW1fQ2hhcmFjdGVyKSBhbmQKKyAgICAgICAgKHN1cGVyLkJvbGRfQ2hhcmFjdGVyIG9yIG5vdCBzdWIuQm9sZF9DaGFyYWN0ZXIpIGFuZAorICAgICAgICAoc3VwZXIuQWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQgb3Igbm90IHN1Yi5BbHRlcm5hdGVfQ2hhcmFjdGVyX1NldCkgYW5kCisgICAgICAgIChzdXBlci5JbnZpc2libGVfQ2hhcmFjdGVyIG9yIG5vdCBzdWIuSW52aXNpYmxlX0NoYXJhY3RlcikgLS0gYW5kCistLSAgICAgIChzdXBlci5Qcm90ZWN0ZWRfQ2hhcmFjdGVyIG9yIG5vdCBzdWIuUHJvdGVjdGVkX0NoYXJhY3RlcikgYW5kCistLSAgICAgIChzdXBlci5Ib3Jpem9udGFsIG9yIG5vdCBzdWIuSG9yaXpvbnRhbCkgYW5kCistLSAgICAgIChzdXBlci5MZWZ0IG9yIG5vdCBzdWIuTGVmdCkgYW5kCistLSAgICAgIChzdXBlci5Mb3cgb3Igbm90IHN1Yi5Mb3cpIGFuZAorLS0gICAgICAoc3VwZXIuUmlnaHQgb3Igbm90IHN1Yi5SaWdodCkgYW5kCistLSAgICAgIChzdXBlci5Ub3Agb3Igbm90IHN1Yi5Ub3ApIGFuZAorLS0gICAgICAoc3VwZXIuVmVydGljYWwgb3Igbm90IHN1Yi5WZXJ0aWNhbCkKKyAgICAgIHRoZW4KKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZW5kIGlmOworICAgZW5kIHN1YnNldDsKKworICAgZnVuY3Rpb24gaW50ZXJzZWN0IChiLCBhIDogQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBCb29sZWFuIGlzCisgICBiZWdpbgorICAgICAgaWYKKyAgICAgICAgKGEuU3RhbmRfT3V0IGFuZCBiLlN0YW5kX091dCkgb3IKKyAgICAgICAgKGEuVW5kZXJfTGluZSBhbmQgYi5VbmRlcl9MaW5lKSBvcgorICAgICAgICAoYS5SZXZlcnNlX1ZpZGVvIGFuZCBiLlJldmVyc2VfVmlkZW8pIG9yCisgICAgICAgIChhLkJsaW5rIGFuZCBiLkJsaW5rKSBvcgorICAgICAgICAoYS5EaW1fQ2hhcmFjdGVyIGFuZCBiLkRpbV9DaGFyYWN0ZXIpIG9yCisgICAgICAgIChhLkJvbGRfQ2hhcmFjdGVyIGFuZCBiLkJvbGRfQ2hhcmFjdGVyKSBvcgorICAgICAgICAoYS5BbHRlcm5hdGVfQ2hhcmFjdGVyX1NldCBhbmQgYi5BbHRlcm5hdGVfQ2hhcmFjdGVyX1NldCkgb3IKKyAgICAgICAgKGEuSW52aXNpYmxlX0NoYXJhY3RlciBhbmQgYi5JbnZpc2libGVfQ2hhcmFjdGVyKSAtLSBvcgorLS0gICAgICAoYS5Qcm90ZWN0ZWRfQ2hhcmFjdGVyIGFuZCBiLlByb3RlY3RlZF9DaGFyYWN0ZXIpIG9yCistLSAgICAgIChhLkhvcml6b250YWwgYW5kIGIuSG9yaXpvbnRhbCkgb3IKKy0tICAgICAgKGEuTGVmdCBhbmQgYi5MZWZ0KSBvcgorLS0gICAgICAoYS5Mb3cgYW5kIGIuTG93KSBvcgorLS0gICAgICAoYS5SaWdodCBhbmQgYi5SaWdodCkgb3IKKy0tICAgICAgKGEuVG9wIGFuZCBiLlRvcCkgb3IKKy0tICAgICAgKGEuVmVydGljYWwgYW5kIGIuVmVydGljYWwpCisgICAgICB0aGVuCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBpbnRlcnNlY3Q7CisKKyAgIGZ1bmN0aW9uIGhhc19BX0NPTE9SIChhdHRyIDogQXR0cmlidXRlZF9DaGFyYWN0ZXIpIHJldHVybiBCb29sZWFuIGlzCisgICBiZWdpbgorICAgICAgaWYgYXR0ci5Db2xvciAvPSBDb2xvcl9QYWlyICgwKSB0aGVuCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBoYXNfQV9DT0xPUjsKKworICAgLS0gIFByaW50IHNvbWUgdGV4dCB3aXRoIGF0dHJpYnV0ZXMuCisgICBmdW5jdGlvbiBzaG93X2F0dHIgKHJvdyAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBza2lwIDogTmF0dXJhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA6IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICBuYW1lIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICBvbmNlIDogQm9vbGVhbikgcmV0dXJuIExpbmVfUG9zaXRpb24gaXMKKworICAgICAgZnVuY3Rpb24gbWFrZV9yZWNvcmQgKG4gOiBJbnRlZ2VyKSByZXR1cm4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICBmdW5jdGlvbiBtYWtlX3JlY29yZCAobiA6IEludGVnZXIpIHJldHVybiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCBpcworICAgICAgICAgLS0gIHVuc3VwcG9ydGVkIG1lYW5zIHRydWUKKyAgICAgICAgIGEgOiBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSAob3RoZXJzID0+IEZhbHNlKTsKKyAgICAgICAgIG0gOiBJbnRlZ2VyOworICAgICAgICAgcmVzdCA6IEludGVnZXI7CisgICAgICBiZWdpbgorICAgICAgICAgLS0gIG5jdiBpcyBhIGJpdG1hcCB3aXRoIHRoZXNlIGZpZWxkcworICAgICAgICAgLS0gICAgICAgICAgICAgIEFfU1RBTkRPVVQsCisgICAgICAgICAtLSAgICAgICAgICAgICAgQV9VTkRFUkxJTkUsCisgICAgICAgICAtLSAgICAgICAgICAgICAgQV9SRVZFUlNFLAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfQkxJTkssCisgICAgICAgICAtLSAgICAgICAgICAgICAgQV9ESU0sCisgICAgICAgICAtLSAgICAgICAgICAgICAgQV9CT0xELAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfSU5WSVMsCisgICAgICAgICAtLSAgICAgICAgICAgICAgQV9QUk9URUNULAorICAgICAgICAgLS0gICAgICAgICAgICAgIEFfQUxUQ0hBUlNFVAorICAgICAgICAgLS0gIEl0IG1lYW5zIG5vX2NvbG9yX3ZpZGVvLAorICAgICAgICAgLS0gIHZpZGVvIGF0dHJpYnV0ZXMgdGhhdCBjYW4ndCBiZSB1c2VkIHdpdGggY29sb3JzCisgICAgICAgICAtLSAgc2VlIG1hbiB0ZXJtaW5mby41CisgICAgICAgICBtIDo9IG4gbW9kIDI7CisgICAgICAgICByZXN0IDo9IG4gLyAyOworICAgICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgICAgYS5TdGFuZF9PdXQgOj0gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICAgICBhLlVuZGVyX0xpbmUgOj0gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICAgICBhLlJldmVyc2VfVmlkZW8gOj0gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICAgICBhLkJsaW5rIDo9IFRydWU7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgICAgYS5Cb2xkX0NoYXJhY3RlciA6PSBUcnVlOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgICAgIGEuSW52aXNpYmxlX0NoYXJhY3RlciA6PSBUcnVlOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgICAgIGEuUHJvdGVjdGVkX0NoYXJhY3RlciA6PSBUcnVlOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgICAgIGEuQWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQgOj0gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgcmV0dXJuIGE7CisgICAgICBlbmQgbWFrZV9yZWNvcmQ7CisKKyAgICAgIG5jdiA6IGNvbnN0YW50IEludGVnZXIgOj0gR2V0X051bWJlciAoIm5jdiIpOworCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gcm93LCBDb2x1bW4gPT4gOCk7CisgICAgICBBZGQgKFN0ciA9PiBuYW1lICYgIiBtb2RlOiIpOworICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gcm93LCBDb2x1bW4gPT4gMjQpOworICAgICAgQWRkIChDaCA9PiAnfCcpOworICAgICAgaWYgc2tpcCAvPSAwIHRoZW4KKyAgICAgICAgIC0tICBwcmludHcoIiUqcyIsIHNraXAsICIgIikKKyAgICAgICAgIEFkZCAoU3RyID0+IEFkYS5TdHJpbmdzLkZpeGVkLiIqIiAoc2tpcCwgJyAnKSk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBvbmNlIHRoZW4KKyAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChBdHRyID0+IGF0dHIpOworICAgICAgZWxzZQorICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IGF0dHIpOworICAgICAgZW5kIGlmOworICAgICAgQWRkIChTdHIgPT4gImFiY2RlIGZnaGlqIGtsbW5vIHBxcnN0IHV2d3h5IHoiKTsKKyAgICAgIGlmIG9uY2UgdGhlbgorICAgICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUgKEF0dHIgPT4gYXR0ciwgT24gPT4gRmFsc2UpOworICAgICAgZW5kIGlmOworICAgICAgaWYgc2tpcCAvPSAwIHRoZW4KKyAgICAgICAgIEFkZCAoU3RyID0+IEFkYS5TdHJpbmdzLkZpeGVkLiIqIiAoc2tpcCwgJyAnKSk7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKENoID0+ICd8Jyk7CisgICAgICBpZiBhdHRyIC89IE5vcm1hbF9WaWRlbyB0aGVuCisgICAgICAgICBkZWNsYXJlIGJlZ2luCisgICAgICAgICAgICBpZiBub3Qgc3Vic2V0IChzdXBlciA9PiBTdXBwb3J0ZWRfQXR0cmlidXRlcywgc3ViID0+IGF0dHIpIHRoZW4KKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICIgKE4vQSkiKTsKKyAgICAgICAgICAgIGVsc2lmIG5jdiA+IDAgYW5kIGhhc19BX0NPTE9SIChHZXRfQmFja2dyb3VuZCkgdGhlbgorICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgICAgQ29sb3JfU3VwcG9ydGVkX0F0dHJpYnV0ZXMgOgorICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCA6PSBtYWtlX3JlY29yZCAobmN2KTsKKyAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICBpZiBpbnRlcnNlY3QgKENvbG9yX1N1cHBvcnRlZF9BdHRyaWJ1dGVzLCBhdHRyKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIChOQ1YpICIpOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIHJvdyArIDI7CisgICBlbmQgc2hvd19hdHRyOworCisgICBwcm9jZWR1cmUgYXR0cl9nZXRjIChza2lwIDogaW4gb3V0IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBmZywgYmcgOiBpbiBvdXQgQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDogb3V0IEJvb2xlYW4pIGlzCisgICAgICBjaCA6IGNvbnN0YW50IEtleV9Db2RlIDo9IEdldGNoYXI7CisgICAgICBuYyA6IGNvbnN0YW50IENvbG9yX051bWJlciA6PSBDb2xvcl9OdW1iZXIgKE51bWJlcl9PZl9Db2xvcnMpOworICAgYmVnaW4KKyAgICAgIHJlc3VsdCA6PSBUcnVlOworICAgICAgaWYgQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmcuSXNfRGlnaXQgKENoYXJhY3RlcidWYWwgKGNoKSkgdGhlbgorICAgICAgICAgc2tpcCA6PSBjdG9pIChDb2RlX1RvX0NoYXIgKGNoKSk7CisgICAgICBlbHNpZiBjaCA9IENUUkwgKCdMJykgdGhlbgorICAgICAgICAgVG91Y2g7CisgICAgICAgICBUb3VjaCAoQ3VycmVudF9XaW5kb3cpOworICAgICAgICAgUmVmcmVzaDsKKyAgICAgIGVsc2lmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgY2FzZSBjaCBpcworICAgICAgICAgICAgLS0gIE5vdGUgdGhlIG1hdGhlbWF0aWNhbCBlbGVnYW5jZSBjb21wYXJlZCB0byB0aGUgQyB2ZXJzaW9uLgorICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnZicpID0+IGZnIDo9IChmZyArIDEpIG1vZCBuYzsKKyAgICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0YnKSA9PiBmZyA6PSAoZmcgLSAxKSBtb2QgbmM7CisgICAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdiJykgPT4gYmcgOj0gKGJnICsgMSkgbW9kIG5jOworICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnQicpID0+IGJnIDo9IChiZyAtIDEpIG1vZCBuYzsKKyAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICAgICByZXN1bHQgOj0gRmFsc2U7CisgICAgICAgICBlbmQgY2FzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJlc3VsdCA6PSBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBhdHRyX2dldGM7CisKKyAgIC0tICAgICAgcGFpcnMgY291bGQgYmUgZGVmaW5lZCBhcyBhcnJheSAoIENvbG9yX051bWJlcigwKSAuLiBjb2xvcnMgLSAxKSBvZgorICAgLS0gICAgICBhcnJheSAoQ29sb3JfTnVtYmVyKDApLi4gY29sb3JzIC0gMSkgb2YgQm9vbGVhbjsKKyAgIHBhaXJzIDogYXJyYXkgKENvbG9yX1BhaXInUmFuZ2UpIG9mIEJvb2xlYW4gOj0gKG90aGVycyA9PiBGYWxzZSk7CisgICBmZywgYmcgOiBDb2xvcl9OdW1iZXIgOj0gQmxhY2s7IC0tID0gMDsKKyAgIHhtYyA6IGNvbnN0YW50IEludGVnZXIgOj0gR2V0X051bWJlciAoInhtYyIpOworICAgc2tpcCA6IEludGVnZXIgOj0geG1jOworICAgbiA6IEludGVnZXI7CisKKyAgIHVzZSBJbnRfSU87CisKK2JlZ2luCisgICBwYWlycyAoMCkgOj0gVHJ1ZTsKKworICAgaWYgc2tpcCA8IDAgdGhlbgorICAgICAgc2tpcCA6PSAwOworICAgZW5kIGlmOworICAgbiA6PSBza2lwOworCisgICBsb29wCisgICAgICBkZWNsYXJlCisgICAgICAgICByb3cgOiBMaW5lX1Bvc2l0aW9uIDo9IDI7CisgICAgICAgICBub3JtYWwgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PSBCbGFuazI7CisgICAgICAgICAtLSAgPz8/CisgICAgICBiZWdpbgorICAgICAgICAgLS0gIHJvdyA6PSAyOyAtLSB3ZWlyZCwgcm93IGlzIHNldCB0byAwIHdpdGhvdXQgdGhpcy4KKyAgICAgICAgIC0tICBUT0RPIGRlbGV0ZSB0aGUgYWJvdmUgbGluZSwgaXQgd2FzIGEgZ2RiIHF1aXJrIHRoYXQgY29uZnVzZWQgbWUKKyAgICAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgICAgZGVjbGFyZSBwYWlyIDogY29uc3RhbnQgQ29sb3JfUGFpciA6PQorICAgICAgICAgICAgICBDb2xvcl9QYWlyIChmZyAqIENvbG9yX051bWJlciAoTnVtYmVyX09mX0NvbG9ycykgKyBiZyk7CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgLS0gIEdvIHRob3VnaCBlYWNoIGNvbG9yIHBhaXIuIEFzc3VtZSB0aGF0IHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgIC0tICBSZWRlZmluYWJsZV9Db2xvcl9QYWlycyBpcyA4Kjggd2l0aCBwcmVkZWZpbmVkIENvbG9ycyAwLi43CisgICAgICAgICAgICAgICBpZiBub3QgcGFpcnMgKHBhaXIpIHRoZW4KKyAgICAgICAgICAgICAgICAgIEluaXRfUGFpciAocGFpciwgZmcsIGJnKTsKKyAgICAgICAgICAgICAgICAgIHBhaXJzIChwYWlyKSA6PSBUcnVlOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgbm9ybWFsLkNvbG9yIDo9IHBhaXI7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gbm9ybWFsKTsKKyAgICAgICAgIEVyYXNlOworCisgICAgICAgICBBZGQgKExpbmUgPT4gMCwgQ29sdW1uID0+IDIwLAorICAgICAgICAgICAgICBTdHIgPT4gIkNoYXJhY3RlciBhdHRyaWJ1dGUgdGVzdCBkaXNwbGF5Iik7CisKKyAgICAgICAgIHJvdyA6PSBzaG93X2F0dHIgKHJvdywgbiwgKFN0YW5kX091dCA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNUQU5ET1VUIiwgVHJ1ZSk7CisgICAgICAgICByb3cgOj0gc2hvd19hdHRyIChyb3csIG4sIChSZXZlcnNlX1ZpZGVvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkVWRVJTRSIsIFRydWUpOworICAgICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0xEIiwgVHJ1ZSk7CisgICAgICAgICByb3cgOj0gc2hvd19hdHRyIChyb3csIG4sIChVbmRlcl9MaW5lID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5ERVJMSU5FIiwgVHJ1ZSk7CisgICAgICAgICByb3cgOj0gc2hvd19hdHRyIChyb3csIG4sIChEaW1fQ2hhcmFjdGVyID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRElNIiwgVHJ1ZSk7CisgICAgICAgICByb3cgOj0gc2hvd19hdHRyIChyb3csIG4sIChCbGluayA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMSU5LIiwgVHJ1ZSk7CistLSAgICAgICByb3cgOj0gc2hvd19hdHRyIChyb3csIG4sIChQcm90ZWN0ZWRfQ2hhcmFjdGVyID0+IFRydWUsCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpLCAiUFJPVEVDVCIsIFRydWUpOworICAgICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCAoSW52aXNpYmxlX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSwgIklOVklTSUJMRSIsIFRydWUpOworICAgICAgICAgcm93IDo9IHNob3dfYXR0ciAocm93LCBuLCBOb3JtYWxfVmlkZW8sICJOT1JNQUwiLCBGYWxzZSk7CisKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IHJvdywgQ29sdW1uID0+IDgpOworICAgICAgICAgaWYgeG1jID4gLTEgdGhlbgorICAgICAgICAgICAgQWRkIChTdHIgPT4gIlRoaXMgdGVybWluYWwgZG9lcyBoYXZlIHRoZSBtYWdpYy1jb29raWUgZ2xpdGNoIik7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBBZGQgKFN0ciA9PiAiVGhpcyB0ZXJtaW5hbCBkb2VzIG5vdCBoYXZlIHRoZSBtYWdpYy1jb29raWUgZ2xpdGNoIik7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiByb3cgKyAxLCBDb2x1bW4gPT4gOCk7CisgICAgICAgICBBZGQgKFN0ciA9PiAiRW50ZXIgYSBkaWdpdCB0byBzZXQgZ2FwcyBvbiBlYWNoIHNpZGUgb2YgIiAmCisgICAgICAgICAgICAgICJkaXNwbGF5ZWQgYXR0cmlidXRlcyIpOworICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gcm93ICsgMiwgQ29sdW1uID0+IDgpOworICAgICAgICAgQWRkIChTdHIgPT4gIl5MID0gcmVwYWludCIpOworICAgICAgICAgaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICAgICBkZWNsYXJlIHRtcDEgOiBTdHJpbmcgKDEgLi4gMSk7CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gIi4gIGYvRi9iL0YgdG9nZ2xlIGNvbG9ycyAoIik7CisgICAgICAgICAgICAgICBQdXQgKHRtcDEsIEludGVnZXIgKGZnKSk7CisgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiB0bXAxKTsKKyAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gJy8nKTsKKyAgICAgICAgICAgICAgIFB1dCAodG1wMSwgSW50ZWdlciAoYmcpKTsKKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+IHRtcDEpOworICAgICAgICAgICAgICAgQWRkIChDaCA9PiAnKScpOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgUmVmcmVzaDsKKyAgICAgIGVuZDsKKworICAgICAgZGVjbGFyZSByZXN1bHQgOiBCb29sZWFuOyBiZWdpbgorICAgICAgICAgYXR0cl9nZXRjIChuLCBmZywgYmcsIHJlc3VsdCk7CisgICAgICAgICBleGl0IHdoZW4gbm90IHJlc3VsdDsKKyAgICAgIGVuZDsKKyAgIGVuZCBsb29wOworCisgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gQmxhbmsyKTsKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CitlbmQgbmN1cnNlczIuYXR0cl90ZXN0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hdHRyX3Rlc3QuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hdHRyX3Rlc3QuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzUxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWF0dHJfdGVzdC5hZHMKQEAgLTAsMCArMSw0MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4yICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5hdHRyX3Rlc3Q7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX2VkaXQuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl9lZGl0LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmEzNWRlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl9lZGl0LmFkYgpAQCAtMCwwICsxLDI1OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS41ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIG5jdXJzZXMyLmdlbmVyaWNQdXRzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmNvbG9yX2VkaXQgaXMKKyAgIHVzZSBJbnRfSU87CisKKyAgIHR5cGUgUkdCX0VudW0gaXMgKFJlZHgsIEdyZWVueCwgQmx1ZXgpOworCisgICBwcm9jZWR1cmUgY2hhbmdlX2NvbG9yIChjdXJyZW50IDogQ29sb3JfTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgICA6IFJHQl9FbnVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgICA6IFJHQl9WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWJhc2UgOiBCb29sZWFuKTsKKworICAgcHJvY2VkdXJlIGNoYW5nZV9jb2xvciAoY3VycmVudCA6IENvbG9yX051bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkICAgOiBSR0JfRW51bTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICAgOiBSR0JfVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2ViYXNlIDogQm9vbGVhbikgIGlzCisgICAgICByZWQsIGdyZWVuLCBibHVlIDogUkdCX1ZhbHVlOworICAgYmVnaW4KKyAgICAgIGlmIHVzZWJhc2UgdGhlbgorICAgICAgICAgQ29sb3JfQ29udGVudCAoY3VycmVudCwgcmVkLCBncmVlbiwgYmx1ZSk7CisgICAgICBlbHNlCisgICAgICAgICByZWQgOj0gMDsKKyAgICAgICAgIGdyZWVuIDo9IDA7CisgICAgICAgICBibHVlIDo9IDA7CisgICAgICBlbmQgaWY7CisKKyAgICAgIGNhc2UgZmllbGQgaXMKKyAgICAgICAgIHdoZW4gUmVkeCA9PiByZWQgOj0gIHJlZCArIHZhbHVlOworICAgICAgICAgd2hlbiBHcmVlbnggPT4gZ3JlZW4gOj0gZ3JlZW4gKyB2YWx1ZTsKKyAgICAgICAgIHdoZW4gQmx1ZXggPT4gYmx1ZSA6PSBibHVlICsgdmFsdWU7CisgICAgICBlbmQgY2FzZTsKKworICAgICAgZGVjbGFyZQorICAgICAgYmVnaW4KKyAgICAgICAgIEluaXRfQ29sb3IgKGN1cnJlbnQsIHJlZCwgZ3JlZW4sIGJsdWUpOworICAgICAgZXhjZXB0aW9uCisgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gQmVlcDsKKyAgICAgIGVuZDsKKworICAgZW5kIGNoYW5nZV9jb2xvcjsKKworICAgcGFja2FnZSB4IGlzIG5ldyBuY3Vyc2VzMi5nZW5lcmljUHV0cyAoMTAwKTsgdXNlIHg7CisKKyAgIHRtcGIgOiB4LkJTLkJvdW5kZWRfU3RyaW5nOworCisgICB0bXA0IDogU3RyaW5nICgxIC4uIDQpOworICAgdG1wNiA6IFN0cmluZyAoMSAuLiA2KTsKKyAgIHRtcDggOiBTdHJpbmcgKDEgLi4gOCk7CisgICAtLSAgVGhpcyB3b3VsZCBiZSBlYXNpZXIgaWYgQWRhIGhhZCBhIEJvdW5kZWRfU3RyaW5nCisgICAtLSAgZGVmaW5lZCBhcyBhIGNsYXNzIGluc3RlYWQgb2YgdGhlIGluZmVyaW9yIGdlbmVyaWMgcGFja2FnZSwKKyAgIC0tICB0aGVuIEkgY291bGQgZGVmaW5lIFB1dCwgQWRkLCBhbmQgR2V0IGZvciB0aGVtLiBCbGVjaC4KKyAgIHZhbHVlIDogUkdCX1ZhbHVlIDo9IDA7CisgICByZWQsIGdyZWVuLCBibHVlIDogUkdCX1ZhbHVlOworICAgbWF4X2NvbG9ycyA6IGNvbnN0YW50IE5hdHVyYWwgOj0gTnVtYmVyX09mX0NvbG9yczsKKyAgIGN1cnJlbnQgOiBDb2xvcl9OdW1iZXIgOj0gMDsKKyAgIGZpZWxkIDogUkdCX0VudW0gOj0gUmVkeDsKKyAgIHRoaXNfYyA6IEtleV9Db2RlIDo9IDA7CitiZWdpbgorICAgUmVmcmVzaDsKKworICAgZm9yIGkgaW4gQ29sb3JfTnVtYmVyJygwKSAuLiBDb2xvcl9OdW1iZXIgKE51bWJlcl9PZl9Db2xvcnMpIGxvb3AKKyAgICAgIEluaXRfUGFpciAoQ29sb3JfUGFpciAoaSksIFdoaXRlLCBpKTsKKyAgIGVuZCBsb29wOworCisgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBMaW5lcyAtIDIsIENvbHVtbiA9PiAwKTsKKyAgIEFkZCAoU3RyID0+ICJOdW1iZXI6ICIpOworICAgbXlQdXQgKHRtcGIsIEludGVnZXIgKHZhbHVlKSk7CisgICBteUFkZCAoU3RyID0+IHRtcGIpOworCisgICBsb29wCisKKyAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChPbiA9PiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgQWRkIChMaW5lID0+IDAsIENvbHVtbiA9PiAyMCwgU3RyID0+ICJDb2xvciBSR0IgVmFsdWUgRWRpdGluZyIpOworCisgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoT24gPT4gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoQm9sZF9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKworICAgICAgZm9yIGkgaW4gQ29sb3JfTnVtYmVyJygwKSAuLiBDb2xvcl9OdW1iZXIgKE51bWJlcl9PZl9Db2xvcnMpIGxvb3AKKyAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDIgKyBMaW5lX1Bvc2l0aW9uIChpKSwgQ29sdW1uID0+IDApOworICAgICAgICAgaWYgY3VycmVudCA9IGkgdGhlbgorICAgICAgICAgICAgQWRkIChDaCA9PiAnPicpOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgQWRkIChDaCA9PiAnICcpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgLS0gIFRPRE8gaWYgaSA8PSBjb2xvcl9uYW1lcydNYXggIHRoZW4KKyAgICAgICAgIFB1dCAodG1wOCwgSW50ZWdlciAoaSkpOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChDb2xvciA9PiBDb2xvcl9QYWlyIChpKSk7CisgICAgICAgICBBZGQgKFN0ciA9PiAiICAgICAgICAiKTsKKyAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczsKKworICAgICAgICAgUmVmcmVzaDsKKworICAgICAgICAgQ29sb3JfQ29udGVudCAoaSwgcmVkLCBncmVlbiwgYmx1ZSk7CisgICAgICAgICBBZGQgKFN0ciA9PiAiICAgUiA9ICIpOworICAgICAgICAgaWYgY3VycmVudCA9IGkgYW5kIGZpZWxkID0gUmVkeCB0aGVuCisgICAgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAoT24gPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IChTdGFuZF9PdXQgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIFB1dCAodG1wNCwgSW50ZWdlciAocmVkKSk7CisgICAgICAgICBBZGQgKFN0ciA9PiB0bXA0KTsKKyAgICAgICAgIGlmIGN1cnJlbnQgPSBpIGFuZCBmaWVsZCA9IFJlZHggdGhlbgorICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgQWRkIChTdHIgPT4gIiAgIEcgPSAiKTsKKyAgICAgICAgIGlmIGN1cnJlbnQgPSBpIGFuZCBmaWVsZCA9ICBHcmVlbnggdGhlbgorICAgICAgICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUgKE9uID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoU3RhbmRfT3V0ID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBQdXQgKHRtcDQsIEludGVnZXIgKGdyZWVuKSk7CisgICAgICAgICBBZGQgKFN0ciA9PiB0bXA0KTsKKyAgICAgICAgIGlmIGN1cnJlbnQgPSBpIGFuZCBmaWVsZCA9IEdyZWVueCB0aGVuCisgICAgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBBZGQgKFN0ciA9PiAiICAgQiA9ICIpOworICAgICAgICAgaWYgY3VycmVudCA9IGkgYW5kIGZpZWxkID0gQmx1ZXggdGhlbgorICAgICAgICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUgKE9uID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoU3RhbmRfT3V0ID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBQdXQgKHRtcDQsIEludGVnZXIgKGJsdWUpKTsKKyAgICAgICAgIEFkZCAoU3RyID0+IHRtcDQpOworICAgICAgICAgaWYgY3VycmVudCA9IGkgYW5kIGZpZWxkID0gQmx1ZXggdGhlbgorICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOworICAgICAgICAgQWRkIChjaCA9PiAnKScpOworICAgICAgZW5kIGxvb3A7CisgICAgICBBZGQgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAoTnVtYmVyX09mX0NvbG9ycyArIDMpLCBDb2x1bW4gPT4gMCwKKyAgICAgICAgICAgU3RyID0+ICJVc2UgdXAvZG93biB0byBzZWxlY3QgYSBjb2xvciwgbGVmdC9yaWdodCB0byBjaGFuZ2UgIiAmCisgICAgICAgICAgICJmaWVsZHMuIik7CisgICAgICBBZGQgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAoTnVtYmVyX09mX0NvbG9ycyArIDQpLCBDb2x1bW4gPT4gMCwKKyAgICAgICAgICAgU3RyID0+ICJNb2RpZnkgZmllbGQgYnkgdHlwaW5nIG5ubj0sIG5ubi0sIG9yIG5ubisuICA/IGZvciBoZWxwLiIpOworCisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAyICsgTGluZV9Qb3NpdGlvbiAoY3VycmVudCksIENvbHVtbiA9PiAwKTsKKworICAgICAgdGhpc19jIDo9IEdldGNoYXI7CisgICAgICBpZiBJc19EaWdpdCAodGhpc19jKSB0aGVuCisgICAgICAgICB2YWx1ZSA6PSAwOworICAgICAgZW5kIGlmOworCisgICAgICBjYXNlIHRoaXNfYyBpcworICAgICAgICAgd2hlbiBLRVlfVVAgPT4KKyAgICAgICAgICAgIGN1cnJlbnQgOj0gKGN1cnJlbnQgLSAxKSBtb2QgQ29sb3JfTnVtYmVyIChtYXhfY29sb3JzKTsKKyAgICAgICAgIHdoZW4gS0VZX0RPV04gPT4KKyAgICAgICAgICAgIGN1cnJlbnQgOj0gKGN1cnJlbnQgKyAxKSBtb2QgQ29sb3JfTnVtYmVyIChtYXhfY29sb3JzKTsKKyAgICAgICAgIHdoZW4gS0VZX1JJR0hUID0+CisgICAgICAgICAgICBmaWVsZCA6PSBSR0JfRW51bSdWYWwgKChSR0JfRW51bSdQb3MgKGZpZWxkKSArIDEpIG1vZCAzKTsKKyAgICAgICAgIHdoZW4gS0VZX0xFRlQgPT4KKyAgICAgICAgICAgIGZpZWxkIDo9IFJHQl9FbnVtJ1ZhbCAoKFJHQl9FbnVtJ1BvcyAoZmllbGQpIC0gMSkgbW9kIDMpOworICAgICAgICAgd2hlbgorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnMCcpIHwKKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJzEnKSB8CisgICAgICAgICAgIENoYXJhY3RlcidQb3MgKCcyJykgfAorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnMycpIHwKKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJzQnKSB8CisgICAgICAgICAgIENoYXJhY3RlcidQb3MgKCc1JykgfAorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnNicpIHwKKyAgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJzcnKSB8CisgICAgICAgICAgIENoYXJhY3RlcidQb3MgKCc4JykgfAorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnOScpICA9PgorICAgICAgICAgICAgdmFsdWUgOj0gdmFsdWUgKiAxMCArIFJHQl9WYWx1ZSAoY3RvaSAoQ29kZV9Ub19DaGFyICh0aGlzX2MpKSk7CisKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJysnKSA9PgorICAgICAgICAgICAgY2hhbmdlX2NvbG9yIChjdXJyZW50LCBmaWVsZCwgIHZhbHVlLCBUcnVlKTsKKworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnLScpID0+CisgICAgICAgICAgICBjaGFuZ2VfY29sb3IgKGN1cnJlbnQsIGZpZWxkLCAtdmFsdWUsIFRydWUpOworCisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCc9JykgPT4KKyAgICAgICAgICAgIGNoYW5nZV9jb2xvciAoY3VycmVudCwgZmllbGQsICB2YWx1ZSwgRmFsc2UpOworCisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCc/JykgPT4KKyAgICAgICAgICAgIEVyYXNlOworICAgICAgICAgICAgUCAoIiAgICAgICAgICAgICAgICAgICAgICBSR0IgVmFsdWUgRWRpdGluZyBIZWxwIik7CisgICAgICAgICAgICBQICgiIik7CisgICAgICAgICAgICBQICgiWW91IGFyZSBpbiB0aGUgUkdCIHZhbHVlIGVkaXRvci4gIFVzZSB0aGUgYXJyb3cga2V5cyB0byAiICYKKyAgICAgICAgICAgICAgICJzZWxlY3Qgb25lIG9mIik7CisgICAgICAgICAgICBQICgidGhlIGZpZWxkcyBpbiBvbmUgb2YgdGhlIFJHQiB0cmlwbGVzIG9mIHRoZSBjdXJyZW50IGNvbG9yczsiICYKKyAgICAgICAgICAgICAgICIgdGhlIG9uZSIpOworICAgICAgICAgICAgUCAoImN1cnJlbnRseSBzZWxlY3RlZCB3aWxsIGJlIHJldmVyc2UtdmlkZW8gaGlnaGxpZ2h0ZWQuIik7CisgICAgICAgICAgICBQICgiIik7CisgICAgICAgICAgICBQICgiVG8gY2hhbmdlIGEgZmllbGQsIGVudGVyIHRoZSBkaWdpdHMgb2YgdGhlIG5ldyB2YWx1ZTsgdGhleSIgJgorICAgICAgICAgICAgICAgIiBhcmUgZWNob2VkIik7CisgICAgICAgICAgICBQICgiYXMgZW50ZXJlZC4gIEZpbmlzaCBieSB0eXBpbmcgYD0nLiAgVGhlIGNoYW5nZSB3aWxsIHRha2UiICYKKyAgICAgICAgICAgICAgICIgZWZmZWN0IGluc3RhbnRseS4iKTsKKyAgICAgICAgICAgIFAgKCJUbyBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGEgdmFsdWUsIHVzZSB0aGUgc2FtZSBwcm9jZWR1cmUsIiAmCisgICAgICAgICAgICAgICAiIGJ1dCBmaW5pc2giKTsKKyAgICAgICAgICAgIFAgKCJ3aXRoIGEgYCsnIG9yIGAtJy4iKTsKKyAgICAgICAgICAgIFAgKCIiKTsKKyAgICAgICAgICAgIFAgKCJUbyBxdWl0LCBkbyBgeCcgb3IgJ3EnIik7CisKKyAgICAgICAgICAgIFBhdXNlOworICAgICAgICAgICAgRXJhc2U7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdxJykgfAorICAgICAgICAgICBDaGFyYWN0ZXInUG9zICgneCcpID0+CisgICAgICAgICAgICBudWxsOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIEJlZXA7CisgICAgICBlbmQgY2FzZTsKKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gMiwgQ29sdW1uID0+IDApOworICAgICAgUHV0ICh0bXA2LCBJbnRlZ2VyICh2YWx1ZSkpOworICAgICAgQWRkIChTdHIgPT4gIk51bWJlcjogIiAmIHRtcDYpOworCisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgIGV4aXQgd2hlbiB0aGlzX2MgPSBDaGFyYWN0ZXInUG9zICgneCcpIG9yCisgICAgICAgIHRoaXNfYyA9IENoYXJhY3RlcidQb3MgKCdxJyk7CisgICBlbmQgbG9vcDsKKworICAgRXJhc2U7CisgICBFbmRfV2luZG93czsKK2VuZCBuY3Vyc2VzMi5jb2xvcl9lZGl0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl9lZGl0LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4ZTM5MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLmNvbG9yX2VkaXQ7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX3Rlc3QuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl90ZXN0LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGY2YzgzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl90ZXN0LmFkYgpAQCAtMCwwICsxLDE2MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4zICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0NzoxNyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIEFkYS5TdHJpbmdzLkZpeGVkOworCitwcm9jZWR1cmUgbmN1cnNlczIuY29sb3JfdGVzdCBpcworICAgdXNlIEludF9JTzsKKworICAgcHJvY2VkdXJlIHNob3dfY29sb3JfbmFtZSAoeSwgeCA6IEludGVnZXI7IGNvbG9yIDogSW50ZWdlcik7CisKKyAgIGNvbG9yX25hbWVzIDogY29uc3RhbnQgYXJyYXkgKDAgLi4gMTUpIG9mIFN0cmluZyAoMSAuLiA3KSA6PQorICAgICAoCisgICAgICAiYmxhY2sgICIsCisgICAgICAicmVkICAgICIsCisgICAgICAiZ3JlZW4gICIsCisgICAgICAieWVsbG93ICIsCisgICAgICAiYmx1ZSAgICIsCisgICAgICAibWFnZW50YSIsCisgICAgICAiY3lhbiAgICIsCisgICAgICAid2hpdGUgICIsCisgICAgICAiQkxBQ0sgICIsCisgICAgICAiUkVEICAgICIsCisgICAgICAiR1JFRU4gICIsCisgICAgICAiWUVMTE9XICIsCisgICAgICAiQkxVRSAgICIsCisgICAgICAiTUFHRU5UQSIsCisgICAgICAiQ1lBTiAgICIsCisgICAgICAiV0hJVEUgICIKKyAgICAgICk7CisKKyAgIHByb2NlZHVyZSBzaG93X2NvbG9yX25hbWUgKHksIHggOiBJbnRlZ2VyOyBjb2xvciA6IEludGVnZXIpIGlzCisgICAgICB0bXA1IDogU3RyaW5nICgxIC4uIDUpOworICAgYmVnaW4KKyAgICAgIGlmIE51bWJlcl9PZl9Db2xvcnMgPiA4IHRoZW4KKworICAgICAgICAgUHV0ICh0bXA1LCBjb2xvcik7CisgICAgICAgICBBZGQgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAoeSksIENvbHVtbiA9PiBDb2x1bW5fUG9zaXRpb24gKHgpLAorICAgICAgICAgICAgICBTdHIgPT4gdG1wNSk7CisgICAgICBlbHNlCisgICAgICAgICBBZGQgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAoeSksIENvbHVtbiA9PiBDb2x1bW5fUG9zaXRpb24gKHgpLAorICAgICAgICAgICAgICBTdHIgPT4gY29sb3JfbmFtZXMgKGNvbG9yKSk7CisgICAgICBlbmQgaWY7CisgICBlbmQgc2hvd19jb2xvcl9uYW1lOworCisgICB0b3AsIHdpZHRoIDogSW50ZWdlcjsKKyAgIGhlbGxvIDogU3RyaW5nICgxIC4uIDUpOworICAgLS0gIHRtcDMgOiBTdHJpbmcgKDEgLi4gMyk7CisgICAtLSAgdG1wMiA6IFN0cmluZyAoMSAuLiAyKTsKKworYmVnaW4KKyAgIFJlZnJlc2g7CisgICBBZGQgKFN0ciA9PiAiVGhlcmUgYXJlICIpOworICAgLS0gIFB1dCh0bXAzLCBOdW1iZXJfT2ZfQ29sb3JzKk51bWJlcl9PZl9Db2xvcnMpOworICAgQWRkIChTdHIgPT4gQWRhLlN0cmluZ3MuRml4ZWQuVHJpbSAoSW50ZWdlcidJbWFnZSAoTnVtYmVyX09mX0NvbG9ycyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJfT2ZfQ29sb3JzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYS5TdHJpbmdzLkxlZnQpKTsKKyAgIEFkZCAoU3RyID0+ICIgY29sb3IgcGFpcnMiKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisKKyAgIGlmIE51bWJlcl9PZl9Db2xvcnMgPiA4IHRoZW4KKyAgICAgIHdpZHRoIDo9IDQ7CisgICBlbHNlCisgICAgICB3aWR0aCA6PSA4OworICAgZW5kIGlmOworCisgICBpZiBOdW1iZXJfT2ZfQ29sb3JzID4gOCB0aGVuCisgICAgICBoZWxsbyA6PSAiVGVzdCAiOworICAgZWxzZQorICAgICAgaGVsbG8gOj0gIkhlbGxvIjsKKyAgIGVuZCBpZjsKKworICAgZm9yIEJyaWdodCBpbiBCb29sZWFuIGxvb3AKKyAgICAgIGlmIE51bWJlcl9PZl9Db2xvcnMgPiA4IHRoZW4KKyAgICAgICAgIHRvcCA6PSAwOworICAgICAgZWxzZQorICAgICAgICAgdG9wIDo9IEJvb2xlYW4nUG9zIChCcmlnaHQpICogKE51bWJlcl9PZl9Db2xvcnMgKyAzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIENsZWFyX1RvX0VuZF9PZl9TY3JlZW47CisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBMaW5lX1Bvc2l0aW9uICh0b3ApICsgMSwgQ29sdW1uID0+IDApOworICAgICAgLS0gIFB1dCh0bXAyLCBOdW1iZXJfT2ZfQ29sb3JzKTsKKyAgICAgIEFkZCAoU3RyID0+IEFkYS5TdHJpbmdzLkZpeGVkLlRyaW0gKEludGVnZXInSW1hZ2UgKE51bWJlcl9PZl9Db2xvcnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhLlN0cmluZ3MuTGVmdCkpOworICAgICAgQWRkIChDaCA9PiAneCcpOworICAgICAgQWRkIChTdHIgPT4gQWRhLlN0cmluZ3MuRml4ZWQuVHJpbSAoSW50ZWdlcidJbWFnZSAoTnVtYmVyX09mX0NvbG9ycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGEuU3RyaW5ncy5MZWZ0KSk7CisgICAgICBBZGQgKFN0ciA9PiAiICBtYXRyaXggb2YgZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGNvbG9ycywgYnJpZ2h0ICoiKTsKKyAgICAgIGlmIEJyaWdodCB0aGVuCisgICAgICAgICBBZGQgKFN0ciA9PiAib24iKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEFkZCAoU3RyID0+ICJvZmYiKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEFkZCAoQ2ggPT4gJyonKTsKKworICAgICAgZm9yIGkgaW4gMCAuLiBOdW1iZXJfT2ZfQ29sb3JzIC0gMSBsb29wCisgICAgICAgICBzaG93X2NvbG9yX25hbWUgKHRvcCArIDIsIChpICsgMSkgKiB3aWR0aCwgaSk7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIGZvciBpIGluIDAgLi4gTnVtYmVyX09mX0NvbG9ycyAtIDEgbG9vcAorICAgICAgICAgc2hvd19jb2xvcl9uYW1lICh0b3AgKyAzICsgaSwgMCwgaSk7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIGZvciBpIGluIDEgLi4gTnVtYmVyX09mX0NvbG9yX1BhaXJzIC0gMSBsb29wCisgICAgICAgICBJbml0X1BhaXIgKENvbG9yX1BhaXIgKGkpLCBDb2xvcl9OdW1iZXIgKGkgbW9kIE51bWJlcl9PZl9Db2xvcnMpLAorICAgICAgICAgICAgICAgICAgICBDb2xvcl9OdW1iZXIgKGkgLyBOdW1iZXJfT2ZfQ29sb3JzKSk7CisgICAgICAgICAtLSAgYXR0cm9uKChhdHRyX3QpIENPTE9SX1BBSVIoaSkpIC0tIEh1aD8KKyAgICAgICAgIFNldF9Db2xvciAoUGFpciA9PiBDb2xvcl9QYWlyIChpKSk7CisgICAgICAgICBpZiBCcmlnaHQgdGhlbgorICAgICAgICAgICAgU3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGUgKEF0dHIgPT4gKEJvbGRfQ2hhcmFjdGVyID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBBZGQgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAodG9wICsgMyArIChpIC8gTnVtYmVyX09mX0NvbG9ycykpLAorICAgICAgICAgICAgICBDb2x1bW4gPT4gQ29sdW1uX1Bvc2l0aW9uICgoaSBtb2QgTnVtYmVyX09mX0NvbG9ycyArIDEpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgpLAorICAgICAgICAgICAgICBTdHIgPT4gaGVsbG8pOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOworICAgICAgZW5kIGxvb3A7CisgICAgICBpZiBOdW1iZXJfT2ZfQ29sb3JzID4gOCBvciBCcmlnaHQgdGhlbgorICAgICAgICAgUGF1c2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgbG9vcDsKKworICAgRXJhc2U7CisgICBFbmRfV2luZG93czsKK2VuZCBuY3Vyc2VzMi5jb2xvcl90ZXN0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl90ZXN0LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfdGVzdC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2NjMxOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfdGVzdC5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLmNvbG9yX3Rlc3Q7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM3YWEwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkYgpAQCAtMCwwICsxLDQ5NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS41ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGE7Cit3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOword2l0aCBBZGEuU3RyaW5nczsKK3dpdGggQWRhLlN0cmluZ3MuQm91bmRlZDsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmRlbW9fZm9ybXMgaXMKKyAgIHBhY2thZ2UgQlMgaXMgbmV3IEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoODApOworCisgICB0eXBlIG15cHRyIGlzIGFjY2VzcyBJbnRlZ2VyOworCisgICAtLSAgVGhlIEMgdmVyc2lvbiBzdG9yZXMgYSBwb2ludGVyIGluIHRoZSB1c2VycHRyIGFuZAorICAgLS0gIGNvbnZlcnRzIGl0IGludG8gYSBsb25nIGludGVnZXIuCisgICAtLSAgVGhlIGNvcnJlY3QsIGJ1dCBpbmNvbnZlbmllbnQgIHdheSB0byBkbyBpdCBpcyB0byB1c2UgYQorICAgLS0gIHBvaW50ZXIgdG8gbG9uZyBhbmQga2VlcCB0aGUgcG9pbnRlciBjb25zdGFudC4KKyAgIC0tICBJdCBqdXN0IGFkZHMgb25lIG1lbW9yeSBwaWVjZSB0byBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSAobm90IGRvbmUgaGVyZSkKKworICAgcGFja2FnZSBTdHJpbmdEYXRhIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1VzZXJfRGF0YSAoSW50ZWdlciwgbXlwdHIpOworCisgICBmdW5jdGlvbiBlZGl0X3NlY3VyZSAobWUgOiBGaWVsZDsgY19pbiA6IEtleV9Db2RlKSByZXR1cm4gS2V5X0NvZGU7CisgICBmdW5jdGlvbiBmb3JtX3ZpcnR1YWxpemUgKGYgOiBGb3JtOyB3IDogV2luZG93KSByZXR1cm4gS2V5X0NvZGU7CisgICBmdW5jdGlvbiBteV9mb3JtX2RyaXZlciAoZiA6IEZvcm07IGMgOiBLZXlfQ29kZSkgcmV0dXJuIEJvb2xlYW47CisgICBmdW5jdGlvbiBtYWtlX2xhYmVsIChmcm93ICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBmY29sICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsIDogU3RyaW5nKSByZXR1cm4gRmllbGQ7CisgICBmdW5jdGlvbiBtYWtlX2ZpZWxkIChmcm93ICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgZmNvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgcm93cyAgIDogTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMgICA6IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSA6IEJvb2xlYW4pIHJldHVybiBGaWVsZDsKKyAgIHByb2NlZHVyZSBkaXNwbGF5X2Zvcm0gKGYgOiBGb3JtKTsKKyAgIHByb2NlZHVyZSBlcmFzZV9mb3JtIChmIDogRm9ybSk7CisKKyAgIC0tICBwcmludHMgJyonIGluc3RlYWQgb2YgY2hhcmFjdGVycy4KKyAgIC0tICBOb3QgdGhhdCB0aGlzIGtlZXBzIGEgYnVnIGZyb20gdGhlIEMgdmVyc2lvbjoKKyAgIC0tICB0eXBlIGluIHRoZSBwc2Fzd29yZCBmaWVsZCB0aGVuIG1vdmUgb2ZmIGFuZCBiYWNrLgorICAgLS0gIHRoZSBjdXJzb3IgaXMgYXQgcG9zaXRpb24gb25lLCBidXQKKyAgIC0tICB0aGlzIGFzc3VtZXMgaXQgYXMgYXQgdGhlIGVuZCBzbyB0ZXh0IGdldHMgYXBwZW5kZWQgaW5zdGVhZAorICAgLS0gIG9mIG92ZXJ3dGl0dGluZy4KKyAgIGZ1bmN0aW9uIGVkaXRfc2VjdXJlIChtZSA6IEZpZWxkOyBjX2luIDogS2V5X0NvZGUpIHJldHVybiBLZXlfQ29kZSBpcworICAgICAgcm93cywgZnJvdyA6IExpbmVfUG9zaXRpb247CisgICAgICBucm93IDogTmF0dXJhbDsKKyAgICAgIGNvbHMsIGZjb2wgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBuYnVmIDogQnVmZmVyX051bWJlcjsKKyAgICAgIGMgOiBLZXlfQ29kZSA6PSBjX2luOworICAgICAgYzIgOiAgQ2hhcmFjdGVyOworCisgICAgICB1c2UgU3RyaW5nRGF0YTsKKyAgIGJlZ2luCisgICAgICBJbmZvIChtZSwgcm93cywgY29scywgZnJvdywgZmNvbCwgbnJvdywgbmJ1Zik7CisgICAgICAtLSAgVE9ETyAgICAgICAgIGlmIHJlc3VsdCA9IEZvcm1fT2sgYW5kIG5idWYgPiAwIHRoZW4KKyAgICAgIC0tICBDIHZlcnNpb24gY2hlY2tlZCB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAtLSAgb2YgSW5mbywgdGhlIEFkYSBiaW5kaW5nIHRocm93cyBhbiBleGNlcHRpb24gSSB0aGluay4KKyAgICAgIGlmIG5idWYgPiAwIHRoZW4KKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHRlbXAgOiBCUy5Cb3VuZGVkX1N0cmluZzsKKyAgICAgICAgICAgIHRlbXBzIDogU3RyaW5nICgxIC4uIDEwKTsKKyAgICAgICAgICAgIC0tICBUT0RPIEdldF9CdWZmZXIgcG92aWRlcyBubyBpbmZvcm1hdGlvbiBvbiB0aGUgZmllbGQgbGVuZ3RoPworICAgICAgICAgICAgbGVuIDogbXlwdHI7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgR2V0X0J1ZmZlciAobWUsIDEsIFN0ciA9PiB0ZW1wcyk7CisgICAgICAgICAgICAtLSAgc3RyY3B5KHRlbXAsIGZpZWxkX2J1ZmZlcihtZSwgMSkpOworICAgICAgICAgICAgR2V0X1VzZXJfRGF0YSAobWUsIGxlbik7CisgICAgICAgICAgICB0ZW1wIDo9IEJTLlRvX0JvdW5kZWRfU3RyaW5nICh0ZW1wcyAoMSAuLiBsZW4uYWxsKSk7CisgICAgICAgICAgICBpZiBjIDw9IEtleV9NYXggdGhlbgorICAgICAgICAgICAgICAgYzIgOj0gQ29kZV9Ub19DaGFyIChjKTsKKyAgICAgICAgICAgICAgIGlmIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nLklzX0dyYXBoaWMgKGMyKSB0aGVuCisgICAgICAgICAgICAgICAgICBCUy5BcHBlbmQgKHRlbXAsIGMyKTsKKyAgICAgICAgICAgICAgICAgIGxlbi5hbGwgOj0gbGVuLmFsbCArIDE7CisgICAgICAgICAgICAgICAgICBTZXRfQnVmZmVyIChtZSwgMSwgQlMuVG9fU3RyaW5nICh0ZW1wKSk7CisgICAgICAgICAgICAgICAgICBjIDo9IENoYXJhY3RlcidQb3MgKCcqJyk7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjIDo9IDA7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjYXNlIGMgaXMKKyAgICAgICAgICAgICAgICAgIHdoZW4gIFJFUV9CRUdfRklFTEQgfAorICAgICAgICAgICAgICAgICAgICBSRVFfQ0xSX0VPRiB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9DTFJfRU9MIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX0RFTF9MSU5FIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX0RFTF9XT1JEIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX0RPV05fQ0hBUiB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9FTkRfRklFTEQgfAorICAgICAgICAgICAgICAgICAgICBSRVFfSU5TX0NIQVIgfAorICAgICAgICAgICAgICAgICAgICBSRVFfSU5TX0xJTkUgfAorICAgICAgICAgICAgICAgICAgICBSRVFfTEVGVF9DSEFSIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX05FV19MSU5FIHwKKyAgICAgICAgICAgICAgICAgICAgUkVRX05FWFRfV09SRCB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9QUkVWX1dPUkQgfAorICAgICAgICAgICAgICAgICAgICBSRVFfUklHSFRfQ0hBUiB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9VUF9DSEFSID0+CisgICAgICAgICAgICAgICAgICAgICBjIDo9IDA7ICAgICAgICAgLS0gd2UgZG9uJ3Qgd2FudCB0byBkbyBpbmxpbmUgZWRpdGluZworICAgICAgICAgICAgICAgICAgd2hlbiBSRVFfQ0xSX0ZJRUxEID0+CisgICAgICAgICAgICAgICAgICAgICBpZiBsZW4uYWxsIC89IDAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA6PSBCUy5Ub19Cb3VuZGVkX1N0cmluZyAoIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgU2V0X0J1ZmZlciAobWUsIDEsIEJTLlRvX1N0cmluZyAodGVtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVuLmFsbCA6PSAwOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICAgICAgICB3aGVuIFJFUV9ERUxfQ0hBUiB8CisgICAgICAgICAgICAgICAgICAgIFJFUV9ERUxfUFJFViA9PgorICAgICAgICAgICAgICAgICAgICAgaWYgbGVuLmFsbCAvPSAwIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJTLkRlbGV0ZSAodGVtcCwgQlMuTGVuZ3RoICh0ZW1wKSwgQlMuTGVuZ3RoICh0ZW1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTZXRfQnVmZmVyIChtZSwgMSwgQlMuVG9fU3RyaW5nICh0ZW1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4uYWxsIDo9IGxlbi5hbGwgLSAxOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gbnVsbDsKKyAgICAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIGM7CisgICBlbmQgZWRpdF9zZWN1cmU7CisKKyAgIG1vZGUgOiBLZXlfQ29kZSA6PSBSRVFfSU5TX01PREU7CisKKyAgIGZ1bmN0aW9uIGZvcm1fdmlydHVhbGl6ZSAoZiA6IEZvcm07IHcgOiBXaW5kb3cpIHJldHVybiBLZXlfQ29kZSBpcworICAgICAgdHlwZSBsb29rdXBfdCBpcyByZWNvcmQKKyAgICAgICAgIGNvZGUgOiBLZXlfQ29kZTsKKyAgICAgICAgIHJlc3VsdCA6IEtleV9Db2RlOworICAgICAgICAgLS0gIHNob3VsZCBiZSBGb3JtX1JlcXVlc3RfQ29kZSwgYnV0IHdlIG5lZWQgTUFYX0NPTU1BTkQgKyAxCisgICAgICBlbmQgcmVjb3JkOworCisgICAgICBsb29rdXAgOiBjb25zdGFudCBhcnJheSAoUG9zaXRpdmUgcmFuZ2UgPD4pIG9mIGxvb2t1cF90IDo9CisgICAgICAgICgKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnQScpIG1vZCAxNiMyMCMsIFJFUV9ORVhUX0NIT0lDRQorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0InKSBtb2QgMTYjMjAjLCBSRVFfUFJFVl9XT1JECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnQycpIG1vZCAxNiMyMCMsIFJFUV9DTFJfRU9MCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnRCcpIG1vZCAxNiMyMCMsIFJFUV9ET1dOX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnRScpIG1vZCAxNiMyMCMsIFJFUV9FTkRfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdGJykgbW9kIDE2IzIwIywgUkVRX05FWFRfUEFHRQorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0cnKSBtb2QgMTYjMjAjLCBSRVFfREVMX1dPUkQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdIJykgbW9kIDE2IzIwIywgUkVRX0RFTF9QUkVWCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnSScpIG1vZCAxNiMyMCMsIFJFUV9JTlNfQ0hBUgorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0snKSBtb2QgMTYjMjAjLCBSRVFfQ0xSX0VPRgorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ0wnKSBtb2QgMTYjMjAjLCBSRVFfTEVGVF9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ00nKSBtb2QgMTYjMjAjLCBSRVFfTkVXX0xJTkUKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdOJykgbW9kIDE2IzIwIywgUkVRX05FWFRfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdPJykgbW9kIDE2IzIwIywgUkVRX0lOU19MSU5FCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnUCcpIG1vZCAxNiMyMCMsIFJFUV9QUkVWX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnUicpIG1vZCAxNiMyMCMsIFJFUV9SSUdIVF9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1MnKSBtb2QgMTYjMjAjLCBSRVFfQkVHX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnVScpIG1vZCAxNiMyMCMsIFJFUV9VUF9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1YnKSBtb2QgMTYjMjAjLCBSRVFfREVMX0NIQVIKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdXJykgbW9kIDE2IzIwIywgUkVRX05FWFRfV09SRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1gnKSBtb2QgMTYjMjAjLCBSRVFfQ0xSX0ZJRUxECisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBDaGFyYWN0ZXInUG9zICgnWScpIG1vZCAxNiMyMCMsIFJFUV9ERUxfTElORQorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgQ2hhcmFjdGVyJ1BvcyAoJ1onKSBtb2QgMTYjMjAjLCBSRVFfUFJFVl9DSE9JQ0UKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdbJykgbW9kIDE2IzIwIywgLS0gIEVTQ0FQRQorICAgICAgICAgIEZvcm1fUmVxdWVzdF9Db2RlJ0xhc3QgKyAxCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLZXlfQmFja3NwYWNlLCBSRVFfREVMX1BSRVYKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtFWV9ET1dOLCBSRVFfRE9XTl9DSEFSCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLZXlfRW5kLCBSRVFfTEFTVF9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgS2V5X0hvbWUsIFJFUV9GSVJTVF9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgS0VZX0xFRlQsIFJFUV9MRUZUX0NIQVIKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtFWV9MTCwgUkVRX0xBU1RfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtleV9OZXh0LCBSRVFfTkVYVF9GSUVMRAorICAgICAgICAgICksCisgICAgICAgICAoCisgICAgICAgICAgS0VZX05QQUdFLCBSRVFfTkVYVF9QQUdFCisgICAgICAgICAgKSwKKyAgICAgICAgICgKKyAgICAgICAgICBLRVlfUFBBR0UsIFJFUV9QUkVWX1BBR0UKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtleV9QcmV2aW91cywgUkVRX1BSRVZfRklFTEQKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtFWV9SSUdIVCwgUkVRX1JJR0hUX0NIQVIKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIEtFWV9VUCwgUkVRX1VQX0NIQVIKKyAgICAgICAgICApLAorICAgICAgICAgKAorICAgICAgICAgIENoYXJhY3RlcidQb3MgKCdRJykgbW9kIDE2IzIwIywgLS0gIFFVSVQKKyAgICAgICAgICBGb3JtX1JlcXVlc3RfQ29kZSdMYXN0ICsgMSAgICAgIC0tICBUT0RPIE1BWF9GT1JNX0NPTU1BTkQgKyAxCisgICAgICAgICAgKQorICAgICAgICAgKTsKKworICAgICAgYyA6IEtleV9Db2RlIDo9IEdldGNoYXIgKHcpOworICAgICAgbWUgOiBjb25zdGFudCBGaWVsZCA6PSBDdXJyZW50IChmKTsKKworICAgYmVnaW4KKyAgICAgIGlmIGMgPSBDaGFyYWN0ZXInUG9zICgnXScpIG1vZCAxNiMyMCMgdGhlbgorICAgICAgICAgaWYgbW9kZSA9IFJFUV9JTlNfTU9ERSB0aGVuCisgICAgICAgICAgICBtb2RlIDo9IFJFUV9PVkxfTU9ERTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vZGUgOj0gUkVRX0lOU19NT0RFOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgYyA6PSBtb2RlOworICAgICAgZWxzZQorICAgICAgICAgZm9yIG4gaW4gbG9va3VwJ1JhbmdlIGxvb3AKKyAgICAgICAgICAgIGlmIGxvb2t1cCAobikuY29kZSA9IGMgdGhlbgorICAgICAgICAgICAgICAgYyA6PSBsb29rdXAgKG4pLnJlc3VsdDsKKyAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBpZjsKKworICAgICAgLS0gIEZvcmNlIHRoZSBmaWVsZCB0aGF0IHRoZSB1c2VyIGlzIHR5cGluZyBpbnRvIHRvIGJlIGluIHJldmVyc2UgdmlkZW8sCisgICAgICAtLSAgd2hpbGUgdGhlIG90aGVyIGZpZWxkcyBhcmUgc2hvd24gdW5kZXJsaW5lZC4KKyAgICAgIGlmIGMgPD0gS2V5X01heCB0aGVuCisgICAgICAgICBjIDo9IGVkaXRfc2VjdXJlIChtZSwgYyk7CisgICAgICAgICBTZXRfQmFja2dyb3VuZCAobWUsIChSZXZlcnNlX1ZpZGVvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgZWxzaWYgYyA8PSBGb3JtX1JlcXVlc3RfQ29kZSdMYXN0IHRoZW4KKyAgICAgICAgIGMgOj0gZWRpdF9zZWN1cmUgKG1lLCBjKTsKKyAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChtZSwgKFVuZGVyX0xpbmUgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gYzsKKyAgIGVuZCBmb3JtX3ZpcnR1YWxpemU7CisKKyAgIGZ1bmN0aW9uIG15X2Zvcm1fZHJpdmVyIChmIDogRm9ybTsgYyA6IEtleV9Db2RlKSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgZmxhZyA6IGNvbnN0YW50IERyaXZlcl9SZXN1bHQgOj0gRHJpdmVyIChmLCBGX1ZhbGlkYXRlX0ZpZWxkKTsKKyAgIGJlZ2luCisgICAgICBpZiBjID0gRm9ybV9SZXF1ZXN0X0NvZGUnTGFzdCArIDEKKyAgICAgICAgYW5kIGZsYWcgPSBGb3JtX09rIHRoZW4KKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgQmVlcDsKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBteV9mb3JtX2RyaXZlcjsKKworICAgZnVuY3Rpb24gbWFrZV9sYWJlbCAoZnJvdyAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgZmNvbCAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA6IFN0cmluZykgcmV0dXJuIEZpZWxkIGlzCisgICAgICBmIDogY29uc3RhbnQgRmllbGQgOj0gQ3JlYXRlICgxLCBsYWJlbCdMZW5ndGgsIGZyb3csIGZjb2wsIDAsIDApOworICAgICAgbyA6IEZpZWxkX09wdGlvbl9TZXQgOj0gR2V0X09wdGlvbnMgKGYpOworICAgYmVnaW4KKyAgICAgIGlmIGYgLz0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICBTZXRfQnVmZmVyIChmLCAwLCBsYWJlbCk7CisgICAgICAgICBvLkFjdGl2ZSA6PSBGYWxzZTsKKyAgICAgICAgIFNldF9PcHRpb25zIChmLCBvKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBmOworICAgZW5kIG1ha2VfbGFiZWw7CisKKyAgIGZ1bmN0aW9uIG1ha2VfZmllbGQgKGZyb3cgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBmY29sICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICByb3dzICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgY29scyAgIDogQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlIDogQm9vbGVhbikgcmV0dXJuIEZpZWxkIGlzCisgICAgICBmIDogRmllbGQ7CisgICAgICB1c2UgU3RyaW5nRGF0YTsKKyAgICAgIGxlbiA6IG15cHRyOworICAgYmVnaW4KKyAgICAgIGlmIHNlY3VyZSB0aGVuCisgICAgICAgICBmIDo9IENyZWF0ZSAocm93cywgY29scywgZnJvdywgZmNvbCwgMCwgMSk7CisgICAgICBlbHNlCisgICAgICAgICBmIDo9IENyZWF0ZSAocm93cywgY29scywgZnJvdywgZmNvbCwgMCwgMCk7CisgICAgICBlbmQgaWY7CisKKyAgICAgIGlmIGYgLz0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoZiwgKFVuZGVyX0xpbmUgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICAgICBsZW4gOj0gbmV3IEludGVnZXI7CisgICAgICAgICBsZW4uYWxsIDo9IDA7CisgICAgICAgICBTZXRfVXNlcl9EYXRhIChmLCBsZW4pOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIGY7CisgICBlbmQgbWFrZV9maWVsZDsKKworICAgcHJvY2VkdXJlIGRpc3BsYXlfZm9ybSAoZiA6IEZvcm0pIGlzCisgICAgICB3IDogV2luZG93OworICAgICAgcm93cyA6IExpbmVfQ291bnQ7CisgICAgICBjb2xzIDogQ29sdW1uX0NvdW50OworICAgYmVnaW4KKyAgICAgIFNjYWxlIChmLCByb3dzLCBjb2xzKTsKKworICAgICAgdyA6PSBOZXdfV2luZG93IChyb3dzICsgMiwgY29scyArIDQsIDAsIDApOworICAgICAgaWYgdyAvPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICBTZXRfV2luZG93IChmLCB3KTsKKyAgICAgICAgIFNldF9TdWJfV2luZG93IChmLCBEZXJpdmVkX1dpbmRvdyAodywgcm93cywgY29scywgMSwgMikpOworICAgICAgICAgQm94ICh3KTsgLS0gMCwwCisgICAgICAgICBTZXRfS2V5UGFkX01vZGUgKHcsIFRydWUpOworICAgICAgZW5kIGlmOworCisgICAgICAtLSAgVE9ETyBpZiBQb3N0KGYpIC89IEZvcm1fT2sgdGhlbiBpdCdzIGEgcHJvY2VkdXJlCisgICAgICBkZWNsYXJlCisgICAgICBiZWdpbgorICAgICAgICAgUG9zdCAoZik7CisgICAgICBleGNlcHRpb24KKyAgICAgICAgIHdoZW4KKyAgICAgICAgICAgRXRpX1N5c3RlbV9FcnJvciAgICB8CisgICAgICAgICAgIEV0aV9CYWRfQXJndW1lbnQgICAgfAorICAgICAgICAgICBFdGlfUG9zdGVkICAgICAgICAgIHwKKyAgICAgICAgICAgRXRpX0Nvbm5lY3RlZCAgICAgICB8CisgICAgICAgICAgIEV0aV9CYWRfU3RhdGUgICAgICAgfAorICAgICAgICAgICBFdGlfTm9fUm9vbSAgICAgICAgIHwKKyAgICAgICAgICAgRXRpX05vdF9Qb3N0ZWQgICAgICB8CisgICAgICAgICAgIEV0aV9Vbmtub3duX0NvbW1hbmQgfAorICAgICAgICAgICBFdGlfTm9fTWF0Y2ggICAgICAgIHwKKyAgICAgICAgICAgRXRpX05vdF9TZWxlY3RhYmxlICB8CisgICAgICAgICAgIEV0aV9Ob3RfQ29ubmVjdGVkICAgfAorICAgICAgICAgICBFdGlfUmVxdWVzdF9EZW5pZWQgIHwKKyAgICAgICAgICAgRXRpX0ludmFsaWRfRmllbGQgICB8CisgICAgICAgICAgIEV0aV9DdXJyZW50ICAgICAgICAgPT4KKyAgICAgICAgICAgIFJlZnJlc2ggKHcpOworICAgICAgZW5kOworICAgICAgLS0gIGVuZCBpZjsKKyAgIGVuZCBkaXNwbGF5X2Zvcm07CisKKyAgIHByb2NlZHVyZSBlcmFzZV9mb3JtIChmIDogRm9ybSkgaXMKKyAgICAgIHcgOiBXaW5kb3cgOj0gR2V0X1dpbmRvdyAoZik7CisgICAgICBzIDogV2luZG93IDo9IEdldF9TdWJfV2luZG93IChmKTsKKyAgIGJlZ2luCisgICAgICBQb3N0IChmLCBGYWxzZSk7CisgICAgICBFcmFzZSAodyk7CisgICAgICBSZWZyZXNoICh3KTsKKyAgICAgIERlbGV0ZSAocyk7CisgICAgICBEZWxldGUgKHcpOworICAgZW5kIGVyYXNlX2Zvcm07CisKKyAgIGZpbmlzaGVkIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgIGYgOiBjb25zdGFudCBGaWVsZF9BcnJheV9BY2Nlc3MgOj0gbmV3IEZpZWxkX0FycmF5ICgxIC4uIDEyKTsKKyAgIHNlY3VyZSA6IEZpZWxkOworICAgbXlmb3JtIDogRm9ybTsKKyAgIHcgOiBXaW5kb3c7CisgICBjIDogS2V5X0NvZGU7CisgICByZXN1bHQgOiBEcml2ZXJfUmVzdWx0OworYmVnaW4KKyAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDE4LCBDb2x1bW4gPT4gMCk7CisgICBBZGQgKFN0ciA9PiAiRGVmaW5lZCBmb3JtLXRyYXZlcnNhbCBrZXlzOiAgIF5RL0VTQy0gZXhpdCBmb3JtIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIl5OICAgLS0gZ28gdG8gbmV4dCBmaWVsZCAgICAgICBeUCAgLS0gZ28gdG8gcHJldmlvdXMgZmllbGQiKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiSG9tZSAtLSBnbyB0byBmaXJzdCBmaWVsZCAgICAgIEVuZCAtLSBnbyB0byBsYXN0IGZpZWxkIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIl5MICAgLS0gZ28gdG8gZmllbGQgdG8gbGVmdCAgICBeUiAgLS0gZ28gdG8gZmllbGQgdG8gcmlnaHQiKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiXlUgICAtLSBtb3ZlIHVwd2FyZCB0byBmaWVsZCAgIF5EICAtLSBtb3ZlIGRvd253YXJkIHRvIGZpZWxkIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIl5XICAgLS0gZ28gdG8gbmV4dCB3b3JkICAgICAgICBeQiAgLS0gZ28gdG8gcHJldmlvdXMgd29yZCIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJeUyAgIC0tIGdvIHRvIHN0YXJ0IG9mIGZpZWxkICAgXkUgIC0tIGdvIHRvIGVuZCBvZiBmaWVsZCIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJeSCAgIC0tIGRlbGV0ZSBwcmV2aW91cyBjaGFyICAgXlkgIC0tIGRlbGV0ZSBsaW5lIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gIl5HICAgLS0gZGVsZXRlIGN1cnJlbnQgd29yZCAgICBeQyAgLS0gY2xlYXIgdG8gZW5kIG9mIGxpbmUiKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiXksgICAtLSBjbGVhciB0byBlbmQgb2YgZmllbGQgIF5YICAtLSBjbGVhciBmaWVsZCIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJBcnJvdyBrZXlzIG1vdmUgd2l0aGluIGEgZmllbGQgYXMgeW91IHdvdWxkIGV4cGVjdC4iKTsKKworICAgQWRkIChMaW5lID0+IDQsIENvbHVtbiA9PiA1NywgU3RyID0+ICJGb3JtcyBFbnRyeSBUZXN0Iik7CisKKyAgIFJlZnJlc2g7CisKKyAgIC0tICBkZXNjcmliZSB0aGUgZm9ybQorICAgZiAoMSkgOj0gbWFrZV9sYWJlbCAoMCwgMTUsICJTYW1wbGUgRm9ybSIpOworICAgZiAoMikgOj0gbWFrZV9sYWJlbCAoMiwgMCwgIkxhc3QgTmFtZSIpOworICAgZiAoMykgOj0gbWFrZV9maWVsZCAoMywgMCwgMSwgMTgsIEZhbHNlKTsKKyAgIGYgKDQpIDo9IG1ha2VfbGFiZWwgKDIsIDIwLCAiRmlyc3QgTmFtZSIpOworICAgZiAoNSkgOj0gbWFrZV9maWVsZCAoMywgMjAsIDEsIDEyLCBGYWxzZSk7CisgICBmICg2KSA6PSBtYWtlX2xhYmVsICgyLCAzNCwgIk1pZGRsZSBOYW1lIik7CisgICBmICg3KSA6PSBtYWtlX2ZpZWxkICgzLCAzNCwgMSwgMTIsIEZhbHNlKTsKKyAgIGYgKDgpIDo9IG1ha2VfbGFiZWwgKDUsIDAsICJDb21tZW50cyIpOworICAgZiAoOSkgOj0gbWFrZV9maWVsZCAoNiwgMCwgNCwgNDYsIEZhbHNlKTsKKyAgIGYgKDEwKSA6PSBtYWtlX2xhYmVsICg1LCAyMCwgIlBhc3N3b3JkOiIpOworICAgZiAoMTEpIDo9IG1ha2VfZmllbGQgKDUsIDMwLCAxLCA5LCBUcnVlKTsKKyAgIHNlY3VyZSA6PSBmICgxMSk7CisgICBmICgxMikgOj0gTnVsbF9GaWVsZDsKKworICAgbXlmb3JtIDo9IE5ld19Gb3JtIChmKTsKKworICAgZGlzcGxheV9mb3JtIChteWZvcm0pOworCisgICB3IDo9IEdldF9XaW5kb3cgKG15Zm9ybSk7CisgICBTZXRfUmF3X01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgU2V0X05MX01vZGUgKFN3aXRjaE9uID0+IFRydWUpOyAgICAgLS0gIGxldHMgdXMgcmVhZCBeTSdzCisgICB3aGlsZSBub3QgZmluaXNoZWQgbG9vcAorICAgICAgYyA6PSBmb3JtX3ZpcnR1YWxpemUgKG15Zm9ybSwgdyk7CisgICAgICByZXN1bHQgOj0gRHJpdmVyIChteWZvcm0sIGMpOworICAgICAgY2FzZSByZXN1bHQgaXMKKyAgICAgICAgIHdoZW4gRm9ybV9PayA9PgorICAgICAgICAgICAgQWRkIChMaW5lID0+IDUsIENvbHVtbiA9PiA1NywgU3RyID0+IEdldF9CdWZmZXIgKHNlY3VyZSwgMSkpOworICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICAgICAgICAgICBSZWZyZXNoOworICAgICAgICAgd2hlbiBVbmtub3duX1JlcXVlc3QgPT4KKyAgICAgICAgICAgIGZpbmlzaGVkIDo9IG15X2Zvcm1fZHJpdmVyIChteWZvcm0sIGMpOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIEJlZXA7CisgICAgICBlbmQgY2FzZTsKKyAgIGVuZCBsb29wOworCisgICBlcmFzZV9mb3JtIChteWZvcm0pOworCisgICAtLSAgVE9ETyBGcmVlX0Zvcm0obXlmb3JtKTsKKyAgIC0tICAgICBmb3IgKGMgPSAwOyBmW2NdICE9IDA7IGMrKykgZnJlZV9maWVsZChmW2NdKTsKKyAgIFNldF9SYXdfTW9kZSAoU3dpdGNoT24gPT4gRmFsc2UpOworICAgU2V0X05MX01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworCitlbmQgbmN1cnNlczIuZGVtb19mb3JtczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19mb3Jtcy5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYmFhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5kZW1vX2Zvcm1zOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFkLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjJiOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKQEAgLTAsMCArMSw2NzUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNyAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6MDYgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCit3aXRoIEludGVyZmFjZXMuQzsKK3dpdGggU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHM7Cit3aXRoIFN5c3RlbS5BZGRyZXNzX1RvX0FjY2Vzc19Db252ZXJzaW9uczsKKword2l0aCBBZGEuVGV4dF9JTzsKKy0tICB3aXRoIEFkYS5SZWFsX1RpbWU7IHVzZSBBZGEuUmVhbF9UaW1lOworLS0gIFRPRE8gaXMgdGhlcmUgYSB3YXkgdG8gdXNlIFJlYWxfVGltZSBvciBBZGEuQ2FsZW5kYXIgaW4gcGxhY2Ugb2YKKy0tICBnZXR0aW1lb2ZkYXk/CisKKy0tICBEZW1vbnN0cmF0ZSBwYWRzLgorcHJvY2VkdXJlIG5jdXJzZXMyLmRlbW9fcGFkIGlzCisKKyAgIHR5cGUgdGltZXN0cnVjdCBpcyByZWNvcmQKKyAgICAgIHNlY29uZHMgOiBJbnRlZ2VyOworICAgICAgbWljcm9zZWNvbmRzIDogSW50ZWdlcjsKKyAgIGVuZCByZWNvcmQ7CisKKyAgIHR5cGUgbXlmdW5jIGlzIGFjY2VzcyBmdW5jdGlvbiAodyA6IFdpbmRvdykgcmV0dXJuIEtleV9Db2RlOworCisgICBmdW5jdGlvbiAgZ2V0dGltZSByZXR1cm4gdGltZXN0cnVjdDsKKyAgIHByb2NlZHVyZSBkb19oX2xpbmUgKHkgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgYyAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIDogQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIHByb2NlZHVyZSBkb192X2xpbmUgKHkgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgYyAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIDogTGluZV9Qb3NpdGlvbik7CisgICBmdW5jdGlvbiAgcGFkZ2V0Y2ggKHdpbiA6IFdpbmRvdykgcmV0dXJuIEtleV9Db2RlOworICAgZnVuY3Rpb24gIHBhbm5lcl9sZWdlbmQgKGxpbmUgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gQm9vbGVhbjsKKyAgIHByb2NlZHVyZSBwYW5uZXJfbGVnZW5kIChsaW5lIDogTGluZV9Qb3NpdGlvbik7CisgICBwcm9jZWR1cmUgcGFubmVyX2hfY2xlYW51cCAoZnJvbV95IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3ggOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9feCAgIDogQ29sdW1uX1Bvc2l0aW9uKTsKKyAgIHByb2NlZHVyZSBwYW5uZXJfdl9jbGVhbnVwIChmcm9tX3kgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21feCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b195ICAgOiBMaW5lX1Bvc2l0aW9uKTsKKyAgIHByb2NlZHVyZSBwYW5uZXIgKHBhZCAgICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgIHRvcF94cCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIHRvcF95cCA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICBwb3J0eXAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgcG9ydHhwIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgcGdldGMgIDogbXlmdW5jKTsKKworICAgZnVuY3Rpb24gZ2V0dGltZSByZXR1cm4gdGltZXN0cnVjdCBpcworCisgICAgICByZXR2YWwgOiB0aW1lc3RydWN0OworCisgICAgICB1c2UgSW50ZXJmYWNlcy5DOworICAgICAgdHlwZSB0aW1ldmFsIGlzIHJlY29yZAorICAgICAgICAgdHZfc2VjIDogbG9uZzsKKyAgICAgICAgIHR2X3VzZWMgOiBsb25nOworICAgICAgZW5kIHJlY29yZDsKKyAgICAgIHByYWdtYSBDb252ZW50aW9uIChDLCB0aW1ldmFsKTsKKworICAgICAgLS0gICAgICBUT0RPICAgIGZ1bmN0aW9uIGZyb21fdGltZXZhbCBpcyBuZXcgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uKAorICAgICAgLS0gICAgICAgICAgICAgICAgICB0aW1ldmFsX2EsIFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzcyk7CisgICAgICAtLSAgc2hvdWxkIEludGVyZmFjZXMuQy5Qb2ludGVycyBiZSB1c2VkIGhlcmU/CisKKyAgICAgIHBhY2thZ2UgbXlQIGlzIG5ldyBTeXN0ZW0uQWRkcmVzc19Ub19BY2Nlc3NfQ29udmVyc2lvbnMgKHRpbWV2YWwpOworICAgICAgdXNlIG15UDsKKworICAgICAgdCA6IGNvbnN0YW50IE9iamVjdF9Qb2ludGVyIDo9IG5ldyB0aW1ldmFsOworCisgICAgICBmdW5jdGlvbiBnZXR0aW1lb2ZkYXkKKyAgICAgICAgKFRQIDogU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworICAgICAgICAgVFpQIDogU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzKSByZXR1cm4gaW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgZ2V0dGltZW9mZGF5LCAiZ2V0dGltZW9mZGF5Iik7CisgICAgICB0bXAgOiBpbnQ7CisgICBiZWdpbgorICAgICAgdG1wIDo9IGdldHRpbWVvZmRheSAoU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuVG9fSW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG15UC5Ub19BZGRyZXNzICh0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5Ub19JbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobXlQLlRvX0FkZHJlc3MgKG51bGwpKSk7CisgICAgICBpZiB0bXAgPCAwIHRoZW4KKyAgICAgICAgIHJldHZhbC5zZWNvbmRzIDo9IDA7CisgICAgICAgICByZXR2YWwubWljcm9zZWNvbmRzIDo9IDA7CisgICAgICBlbHNlCisgICAgICAgICByZXR2YWwuc2Vjb25kcyA6PSBJbnRlZ2VyICh0LnR2X3NlYyk7CisgICAgICAgICByZXR2YWwubWljcm9zZWNvbmRzIDo9IEludGVnZXIgKHQudHZfdXNlYyk7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gcmV0dmFsOworICAgZW5kIGdldHRpbWU7CisKKyAgIC0tICBpbiBDLCBUaGUgYmVoYXZpb3Igb2YgbXZobGluZSwgbXZ2bGluZSBmb3IgbmVnYXRpdmUvemVybyBsZW5ndGggaXMKKyAgIC0tICB1bnNwZWNpZmllZCwgdGhvdWdoIHdlIGNhbiByZWx5IG9uIG5lZ2F0aXZlIHgveSB2YWx1ZXMgdG8gc3RvcCB0aGUKKyAgIC0tICBtYWNyby4gRXhjZXB0IEFkYSBtYWtlcyBMaW5lX1Bvc2l0aW9uKC0xKSA9IE5hdHVyYWwgLSAxIHNvIGZvcmdldCBpdC4KKyAgIHByb2NlZHVyZSBkb19oX2xpbmUgKHkgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgYyAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIDogQ29sdW1uX1Bvc2l0aW9uKSBpcworICAgYmVnaW4KKyAgICAgIGlmIHRvID4geCB0aGVuCisgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiB5LCBDb2x1bW4gPT4geCk7CisgICAgICAgICBIb3Jpem9udGFsX0xpbmUgKExpbmVfU2l6ZSA9PiBOYXR1cmFsICh0byAtIHgpLCBMaW5lX1N5bWJvbCA9PiBjKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBkb19oX2xpbmU7CisKKyAgIHByb2NlZHVyZSBkb192X2xpbmUgKHkgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgYyAgOiBBdHRyaWJ1dGVkX0NoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIDogTGluZV9Qb3NpdGlvbikgaXMKKyAgIGJlZ2luCisgICAgICBpZiB0byA+IHkgdGhlbgorICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4geSwgQ29sdW1uID0+IHgpOworICAgICAgICAgVmVydGljYWxfTGluZSAoTGluZV9TaXplID0+IE5hdHVyYWwgKHRvIC0geSksIExpbmVfU3ltYm9sID0+IGMpOworICAgICAgZW5kIGlmOworICAgZW5kIGRvX3ZfbGluZTsKKworICAgZnVuY3Rpb24gcGFkZ2V0Y2ggKHdpbiA6IFdpbmRvdykgcmV0dXJuIEtleV9Db2RlIGlzCisgICAgICBjIDogS2V5X0NvZGU7CisgICAgICBjMiA6IENoYXJhY3RlcjsKKyAgIGJlZ2luCisgICAgICBjIDo9IEdldGNoYXIgKHdpbik7CisgICAgICBjMiA6PSBDb2RlX1RvX0NoYXIgKGMpOworCisgICAgICBjYXNlIGMyIGlzCisgICAgICAgICB3aGVuICchJyA9PgorICAgICAgICAgICAgU2hlbGxPdXQgKEZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBLZXlfUmVmcmVzaDsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1ZhbCAoQ2hhcmFjdGVyJ1BvcyAoJ3InKSBtb2QgMTYjMjAjKSA9PiAtLSAgQ1RSTCgncicpCisgICAgICAgICAgICBFbmRfV2luZG93czsKKyAgICAgICAgICAgIFJlZnJlc2g7CisgICAgICAgICAgICByZXR1cm4gS2V5X1JlZnJlc2g7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidWYWwgKENoYXJhY3RlcidQb3MgKCdsJykgbW9kIDE2IzIwIykgPT4gLS0gIENUUkwoJ2wnKQorICAgICAgICAgICAgcmV0dXJuIEtleV9SZWZyZXNoOworICAgICAgICAgd2hlbiAnVScgPT4KKyAgICAgICAgICAgIHJldHVybiBLZXlfQ3Vyc29yX1VwOworICAgICAgICAgd2hlbiAnRCcgPT4KKyAgICAgICAgICAgIHJldHVybiBLZXlfQ3Vyc29yX0Rvd247CisgICAgICAgICB3aGVuICdSJyA9PgorICAgICAgICAgICAgcmV0dXJuIEtleV9DdXJzb3JfUmlnaHQ7CisgICAgICAgICB3aGVuICdMJyA9PgorICAgICAgICAgICAgcmV0dXJuIEtleV9DdXJzb3JfTGVmdDsKKyAgICAgICAgIHdoZW4gJysnID0+CisgICAgICAgICAgICByZXR1cm4gS2V5X0luc2VydF9MaW5lOworICAgICAgICAgd2hlbiAnLScgPT4KKyAgICAgICAgICAgIHJldHVybiBLZXlfRGVsZXRlX0xpbmU7CisgICAgICAgICB3aGVuICc+JyA9PgorICAgICAgICAgICAgcmV0dXJuIEtleV9JbnNlcnRfQ2hhcjsKKyAgICAgICAgIHdoZW4gJzwnID0+CisgICAgICAgICAgICByZXR1cm4gS2V5X0RlbGV0ZV9DaGFyOworICAgICAgICAgICAgLS0gIHdoZW4gRVJSPT4gICAgICAgICAgICAgICAgICAgLyogRkFMTFRIUlUgKi8KKyAgICAgICAgIHdoZW4gJ3EnID0+CisgICAgICAgICAgICByZXR1cm4gKEtleV9FeGl0KTsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICByZXR1cm4gKGMpOworICAgICAgZW5kIGNhc2U7CisgICBlbmQgcGFkZ2V0Y2g7CisKKyAgIHNob3dfcGFubmVyX2xlZ2VuZCA6IEJvb2xlYW4gOj0gVHJ1ZTsKKworICAgZnVuY3Rpb24gcGFubmVyX2xlZ2VuZCAobGluZSA6IExpbmVfUG9zaXRpb24pIHJldHVybiBCb29sZWFuIGlzCisgICAgICBsZWdlbmQgOiBjb25zdGFudCBhcnJheSAoMCAuLiAzKSBvZiBTdHJpbmcgKDEgLi4gNjEpIDo9CisgICAgICAgICgKKyAgICAgICAgICJVc2UgYXJyb3cga2V5cyAob3IgVSxELEwsUikgdG8gcGFuLCBxIHRvIHF1aXQgKD8sdCxzIGZsYWdzKSAgIiwKKyAgICAgICAgICJVc2UgISB0byBzaGVsbC1vdXQuICBUb2dnbGUgbGVnZW5kOj8sIHRpbWVyOnQsIHNjcm9sbCBtYXJrOnMuIiwKKyAgICAgICAgICJVc2UgKywtIChvciBqLGspIHRvIGdyb3cvc2hyaW5rIHRoZSBwYW5uZXIgdmVydGljYWxseS4gICAgICAgIiwKKyAgICAgICAgICJVc2UgPCw+IChvciBoLGwpIHRvIGdyb3cvc2hyaW5rIHRoZSBwYW5uZXIgaG9yaXpvbnRhbGx5LiAgICAgIik7CisgICAgICBsZWdlbmRzaXplIDogY29uc3RhbnQgOj0gNDsKKworICAgICAgbiA6IGNvbnN0YW50IEludGVnZXIgOj0gbGVnZW5kc2l6ZSAtIEludGVnZXIgKExpbmVzIC0gbGluZSk7CisgICBiZWdpbgorICAgICAgaWYgbGluZSA8IExpbmVzIGFuZCBuID49IDAgdGhlbgorICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gbGluZSwgQ29sdW1uID0+IDApOworICAgICAgICAgaWYgc2hvd19wYW5uZXJfbGVnZW5kIHRoZW4KKyAgICAgICAgICAgIEFkZCAoU3RyID0+IGxlZ2VuZCAobikpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICAgICAgICByZXR1cm4gc2hvd19wYW5uZXJfbGVnZW5kOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEZhbHNlOworICAgZW5kIHBhbm5lcl9sZWdlbmQ7CisKKyAgIHByb2NlZHVyZSBwYW5uZXJfbGVnZW5kIChsaW5lIDogTGluZV9Qb3NpdGlvbikgaXMKKyAgIGJlZ2luCisgICAgICBpZiBub3QgcGFubmVyX2xlZ2VuZCAobGluZSkgdGhlbgorICAgICAgICAgQmVlcDsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBwYW5uZXJfbGVnZW5kOworCisgICBwcm9jZWR1cmUgcGFubmVyX2hfY2xlYW51cCAoZnJvbV95IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3ggOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9feCAgIDogQ29sdW1uX1Bvc2l0aW9uKSBpcworICAgYmVnaW4KKyAgICAgIGlmIG5vdCBwYW5uZXJfbGVnZW5kIChmcm9tX3kpIHRoZW4KKyAgICAgICAgIGRvX2hfbGluZSAoZnJvbV95LCBmcm9tX3gsIEJsYW5rMiwgdG9feCk7CisgICAgICBlbmQgaWY7CisgICBlbmQgcGFubmVyX2hfY2xlYW51cDsKKworICAgcHJvY2VkdXJlIHBhbm5lcl92X2NsZWFudXAgKGZyb21feSA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV94IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX3kgICA6IExpbmVfUG9zaXRpb24pIGlzCisgICBiZWdpbgorICAgICAgaWYgbm90IHBhbm5lcl9sZWdlbmQgKGZyb21feSkgdGhlbgorICAgICAgICAgZG9fdl9saW5lIChmcm9tX3ksIGZyb21feCwgQmxhbmsyLCB0b195KTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBwYW5uZXJfdl9jbGVhbnVwOworCisgICBwcm9jZWR1cmUgcGFubmVyIChwYWQgICAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICB0b3BfeHAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICB0b3BfeXAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgcG9ydHlwIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIHBvcnR4cCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIHBnZXRjICA6IG15ZnVuYykgaXMKKworICAgICAgZnVuY3Rpb24gZiAoeSA6IExpbmVfUG9zaXRpb24pIHJldHVybiBMaW5lX1Bvc2l0aW9uOworICAgICAgZnVuY3Rpb24gZiAoeCA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIGZ1bmN0aW9uIGdyZWF0ZXIgKHkxLCB5MiA6IExpbmVfUG9zaXRpb24pIHJldHVybiBJbnRlZ2VyOworICAgICAgZnVuY3Rpb24gZ3JlYXRlciAoeDEsIHgyIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gSW50ZWdlcjsKKworICAgICAgdG9wX3ggOiBDb2x1bW5fUG9zaXRpb24gOj0gdG9wX3hwOworICAgICAgdG9wX3kgOiBMaW5lX1Bvc2l0aW9uIDo9IHRvcF95cDsKKyAgICAgIHBvcnR5IDogTGluZV9Qb3NpdGlvbiA6PSBwb3J0eXA7CisgICAgICBwb3J0eCA6IENvbHVtbl9Qb3NpdGlvbiA6PSBwb3J0eHA7CisKKyAgICAgIC0tICBmW3hdIHJldHVybnMgbWF4W3ggLSAxLCAwXQorICAgICAgZnVuY3Rpb24gZiAoeSA6IExpbmVfUG9zaXRpb24pIHJldHVybiBMaW5lX1Bvc2l0aW9uIGlzCisgICAgICBiZWdpbgorICAgICAgICAgaWYgeSA+IDAgdGhlbgorICAgICAgICAgICAgcmV0dXJuIHkgLSAxOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHk7IC0tIDAKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBmOworCisgICAgICBmdW5jdGlvbiBmICh4IDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gQ29sdW1uX1Bvc2l0aW9uIGlzCisgICAgICBiZWdpbgorICAgICAgICAgaWYgeCA+IDAgdGhlbgorICAgICAgICAgICAgcmV0dXJuIHggLSAxOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHg7IC0tIDAKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBmOworCisgICAgICBmdW5jdGlvbiBncmVhdGVyICh5MSwgeTIgOiBMaW5lX1Bvc2l0aW9uKSByZXR1cm4gSW50ZWdlciBpcworICAgICAgYmVnaW4KKyAgICAgICAgIGlmIHkxID4geTIgdGhlbgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBncmVhdGVyOworCisgICAgICBmdW5jdGlvbiBncmVhdGVyICh4MSwgeDIgOiBDb2x1bW5fUG9zaXRpb24pIHJldHVybiBJbnRlZ2VyIGlzCisgICAgICBiZWdpbgorICAgICAgICAgaWYgeDEgPiB4MiB0aGVuCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGdyZWF0ZXI7CisKKyAgICAgIHB5bWF4IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIGJhc2V5IDogTGluZV9Qb3NpdGlvbiA6PSAwOworICAgICAgcHhtYXggOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBiYXNleCA6IENvbHVtbl9Qb3NpdGlvbiA6PSAwOworICAgICAgYyA6IEtleV9Db2RlOworICAgICAgc2Nyb2xsZXJzIDogQm9vbGVhbiA6PSBUcnVlOworICAgICAgYmVmb3JlLCBhZnRlciA6IHRpbWVzdHJ1Y3Q7CisgICAgICB0aW1pbmcgOiBCb29sZWFuIDo9IFRydWU7CisKKyAgICAgIHBhY2thZ2UgZmxvYXRpbyBpcyBuZXcgQWRhLlRleHRfSU8uRmxvYXRfSU8gKExvbmdfRmxvYXQpOworICAgYmVnaW4KKyAgICAgIEdldF9TaXplIChwYWQsIHB5bWF4LCBweG1heCk7CisgICAgICBBbGxvd19TY3JvbGxpbmcgKE1vZGUgPT4gRmFsc2UpOyAtLSB3ZSBkb24ndCB3YW50IHN0ZHNjciB0byBzY3JvbGwhCisKKyAgICAgIGMgOj0gS2V5X1JlZnJlc2g7CisgICAgICBsb29wCisgICAgICAgICAtLSAgRHVyaW5nIHNoZWxsLW91dCwgdGhlIHVzZXIgbWF5IGhhdmUgcmVzaXplZCB0aGUgd2luZG93LiAgQWRqdXN0CisgICAgICAgICAtLSAgdGhlIHBvcnQgc2l6ZSBvZiB0aGUgcGFkIHRvIGFjY29tbW9kYXRlIHRoaXMuICBOY3Vyc2VzCisgICAgICAgICAtLSAgYXV0b21hdGljYWxseSByZXNpemVzIGFsbCBvZiB0aGUgbm9ybWFsIHdpbmRvd3MgdG8gZml0IG9uIHRoZQorICAgICAgICAgLS0gIG5ldyBzY3JlZW4uCisgICAgICAgICBpZiB0b3BfeCA+IENvbHVtbnMgdGhlbgorICAgICAgICAgICAgdG9wX3ggOj0gQ29sdW1uczsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGlmIHBvcnR4ID4gQ29sdW1ucyB0aGVuCisgICAgICAgICAgICBwb3J0eCA6PSBDb2x1bW5zOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgaWYgdG9wX3kgPiBMaW5lcyB0aGVuCisgICAgICAgICAgICB0b3BfeSA6PSBMaW5lczsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGlmIHBvcnR5ID4gTGluZXMgdGhlbgorICAgICAgICAgICAgcG9ydHkgOj0gTGluZXM7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGNhc2UgYyBpcworICAgICAgICAgICAgd2hlbiBLZXlfUmVmcmVzaCB8IENoYXJhY3RlcidQb3MgKCc/JykgPT4KKyAgICAgICAgICAgICAgIGlmIGMgPSBLZXlfUmVmcmVzaCB0aGVuCisgICAgICAgICAgICAgICAgICBFcmFzZTsKKyAgICAgICAgICAgICAgIGVsc2UgLS0gJz8nCisgICAgICAgICAgICAgICAgICBzaG93X3Bhbm5lcl9sZWdlbmQgOj0gbm90IHNob3dfcGFubmVyX2xlZ2VuZDsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIHBhbm5lcl9sZWdlbmQgKExpbmVzIC0gNCk7CisgICAgICAgICAgICAgICBwYW5uZXJfbGVnZW5kIChMaW5lcyAtIDMpOworICAgICAgICAgICAgICAgcGFubmVyX2xlZ2VuZCAoTGluZXMgLSAyKTsKKyAgICAgICAgICAgICAgIHBhbm5lcl9sZWdlbmQgKExpbmVzIC0gMSk7CisgICAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCd0JykgPT4KKyAgICAgICAgICAgICAgIHRpbWluZyA6PSBub3QgdGltaW5nOworICAgICAgICAgICAgICAgaWYgbm90IHRpbWluZyB0aGVuCisgICAgICAgICAgICAgICAgICBwYW5uZXJfbGVnZW5kIChMaW5lcyAtIDEpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgncycpID0+CisgICAgICAgICAgICAgICBzY3JvbGxlcnMgOj0gbm90IHNjcm9sbGVyczsKKworICAgICAgICAgICAgICAgLS0gIE1vdmUgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgcGFkLCBrZWVwaW5nIHRoZQorICAgICAgICAgICAgICAgLS0gIGJvdHRvbS1yaWdodCBjb3JuZXIgZml4ZWQuCisgICAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdoJykgPT4KKyAgICAgICAgICAgICAgIC0tICBpbmNyZWFzZS1jb2x1bW5zOiBtb3ZlIGxlZnQgZWRnZSB0byBsZWZ0CisgICAgICAgICAgICAgICBpZiB0b3BfeCA9IDAgdGhlbgorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHBhbm5lcl92X2NsZWFudXAgKHRvcF95LCB0b3BfeCwgcG9ydHkpOworICAgICAgICAgICAgICAgICAgdG9wX3ggOj0gdG9wX3ggLSAxOworICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdqJykgPT4KKyAgICAgICAgICAgICAgIC0tICBkZWNyZWFzZS1saW5lczogbW92ZSB0b3AtZWRnZSBkb3duCisgICAgICAgICAgICAgICBpZiB0b3BfeSA+PSBwb3J0eSB0aGVuCisgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdG9wX3kgLz0gMCB0aGVuCisgICAgICAgICAgICAgICAgICAgICBwYW5uZXJfaF9jbGVhbnVwICh0b3BfeSAtIDEsIGYgKHRvcF94KSwgcG9ydHgpOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgdG9wX3kgOj0gdG9wX3kgKyAxOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnaycpID0+CisgICAgICAgICAgICAgICAtLSAgaW5jcmVhc2UtbGluZXM6IG1vdmUgdG9wLWVkZ2UgdXAKKyAgICAgICAgICAgICAgIGlmIHRvcF95ID0gMCB0aGVuCisgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgdG9wX3kgOj0gdG9wX3kgLSAxOworICAgICAgICAgICAgICAgICAgcGFubmVyX2hfY2xlYW51cCAodG9wX3ksIHRvcF94LCBwb3J0eCk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ2wnKSA9PgorICAgICAgICAgICAgICAgLS0gIGRlY3JlYXNlLWNvbHVtbnM6IG1vdmUgbGVmdC1lZGdlIHRvIHJpZ2h0CisgICAgICAgICAgICAgICBpZiB0b3BfeCA+PSBwb3J0eCB0aGVuCisgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdG9wX3ggLz0gMCB0aGVuCisgICAgICAgICAgICAgICAgICAgICBwYW5uZXJfdl9jbGVhbnVwIChmICh0b3BfeSksIHRvcF94IC0gMSwgcG9ydHkpOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgdG9wX3ggOj0gdG9wX3ggKyAxOworICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICAgICAtLSAgTW92ZSB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lciBvZiB0aGUgcGFkLCBrZWVwaW5nIHRoZQorICAgICAgICAgICAgICAgLS0gIHRvcC1sZWZ0IGNvcm5lciBmaXhlZC4KKyAgICAgICAgICAgIHdoZW4gS2V5X0luc2VydF9DaGFyID0+CisgICAgICAgICAgICAgICAtLSAgaW5jcmVhc2UtY29sdW1uczogbW92ZSByaWdodC1lZGdlIHRvIHJpZ2h0CisgICAgICAgICAgICAgICBpZiBwb3J0eCA+PSBweG1heCBvciBwb3J0eCA+PSBDb2x1bW5zIHRoZW4KKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwYW5uZXJfdl9jbGVhbnVwIChmICh0b3BfeSksIHBvcnR4IC0gMSwgcG9ydHkpOworICAgICAgICAgICAgICAgICAgcG9ydHggOj0gcG9ydHggKyAxOworICAgICAgICAgICAgICAgICAgLS0gIEMgaGFkICsrcG9ydHggaW5zdGVhZCBvZiBwb3J0eCsrLCB3ZWlyZC4KKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIHdoZW4gS2V5X0luc2VydF9MaW5lID0+CisgICAgICAgICAgICAgICAtLSAgaW5jcmVhc2UtbGluZXM6IG1vdmUgYm90dG9tLWVkZ2UgZG93bgorICAgICAgICAgICAgICAgaWYgcG9ydHkgPj0gcHltYXggb3IgcG9ydHkgPj0gTGluZXMgdGhlbgorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHBhbm5lcl9oX2NsZWFudXAgKHBvcnR5IC0gMSwgZiAodG9wX3gpLCBwb3J0eCk7CisgICAgICAgICAgICAgICAgICBwb3J0eSA6PSBwb3J0eSArIDE7CisgICAgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIHdoZW4gS2V5X0RlbGV0ZV9DaGFyID0+CisgICAgICAgICAgICAgICAtLSAgZGVjcmVhc2UtY29sdW1uczogbW92ZSBib3R0b20gZWRnZSB1cAorICAgICAgICAgICAgICAgaWYgcG9ydHggPD0gdG9wX3ggdGhlbgorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHBvcnR4IDo9IHBvcnR4IC0gMTsKKyAgICAgICAgICAgICAgICAgIHBhbm5lcl92X2NsZWFudXAgKGYgKHRvcF95KSwgcG9ydHgsIHBvcnR5KTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgd2hlbiBLZXlfRGVsZXRlX0xpbmUgPT4KKyAgICAgICAgICAgICAgIC0tICBkZWNyZWFzZS1saW5lcworICAgICAgICAgICAgICAgaWYgcG9ydHkgPD0gdG9wX3kgdGhlbgorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHBvcnR5IDo9IHBvcnR5IC0gMTsKKyAgICAgICAgICAgICAgICAgIHBhbm5lcl9oX2NsZWFudXAgKHBvcnR5LCBmICh0b3BfeCksIHBvcnR4KTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9MZWZ0ID0+CisgICAgICAgICAgICAgICAtLSAgcGFuIGxlZnR3YXJkcworICAgICAgICAgICAgICAgaWYgYmFzZXggPiAwIHRoZW4KKyAgICAgICAgICAgICAgICAgIGJhc2V4IDo9IGJhc2V4IC0gMTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfUmlnaHQgPT4KKyAgICAgICAgICAgICAgIC0tICBwYW4gcmlnaHR3YXJkcworICAgICAgICAgICAgICAgLS0gIGlmIChiYXNleCArIHBvcnR4IC0gKHB5bWF4ID4gcG9ydHkpIDwgcHhtYXgpCisgICAgICAgICAgICAgICBpZiBiYXNleCArIHBvcnR4IC0KKyAgICAgICAgICAgICAgICAgICBDb2x1bW5fUG9zaXRpb24gKGdyZWF0ZXIgKHB5bWF4LCBwb3J0eSkpIDwgcHhtYXggdGhlbgorICAgICAgICAgICAgICAgICAgLS0gIGlmIGJhc2V4ICsgcG9ydHggIDwgcHhtYXggb3IKKyAgICAgICAgICAgICAgICAgIC0tICAgICAgKHB5bWF4ID4gcG9ydHkgYW5kIGJhc2V4ICsgcG9ydHggLSAxIDwgcHhtYXgpIHRoZW4KKyAgICAgICAgICAgICAgICAgIGJhc2V4IDo9IGJhc2V4ICsgMTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9VcCA9PgorICAgICAgICAgICAgICAgLS0gIHBhbiB1cHdhcmRzCisgICAgICAgICAgICAgICBpZiBiYXNleSA+IDAgdGhlbgorICAgICAgICAgICAgICAgICAgYmFzZXkgOj0gYmFzZXkgLSAxOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0Rvd24gPT4KKyAgICAgICAgICAgICAgIC0tICBwYW4gZG93bndhcmRzCisgICAgICAgICAgICAgICAtLSAgc2FtZSBhcyBpZiAoYmFzZXkgKyBwb3J0eSAtIChweG1heCA+IHBvcnR4KSA8IHB5bWF4KQorICAgICAgICAgICAgICAgaWYgYmFzZXkgKyBwb3J0eSAtCisgICAgICAgICAgICAgICAgICAgTGluZV9Qb3NpdGlvbiAoZ3JlYXRlciAocHhtYXgsIHBvcnR4KSkgPCBweW1heCB0aGVuCisgICAgICAgICAgICAgICAgICAtLSAgaWYgKGJhc2V5ICsgcG9ydHkgIDwgcHltYXgpIG9yCisgICAgICAgICAgICAgICAgICAtLSAgICAgIChweG1heCA+IHBvcnR4IGFuZCBiYXNleSArIHBvcnR5IC0gMSA8IHB5bWF4KSB0aGVuCisgICAgICAgICAgICAgICAgICBiYXNleSA6PSBiYXNleSArIDE7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICB3aGVuICBDaGFyYWN0ZXInUG9zICgnSCcpIHwKKyAgICAgICAgICAgICAgS2V5X0hvbWUgfAorICAgICAgICAgICAgICBLZXlfRmluZCA9PgorICAgICAgICAgICAgICAgYmFzZXkgOj0gMDsKKworICAgICAgICAgICAgd2hlbiAgIENoYXJhY3RlcidQb3MgKCdFJykgfAorICAgICAgICAgICAgICBLZXlfRW5kIHwKKyAgICAgICAgICAgICAgS2V5X1NlbGVjdCA9PgorICAgICAgICAgICAgICAgaWYgcHltYXggPCBwb3J0eSB0aGVuCisgICAgICAgICAgICAgICAgICBiYXNleSA6PSAwOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgYmFzZXkgOj0gcHltYXggLSBwb3J0eTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgICAgIEJlZXA7CisgICAgICAgICBlbmQgY2FzZTsKKworICAgICAgICAgLS0gIG1vcmUgd3JpdGluZyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAgIC0tICBJbnRlcmVzdGluZ2x5LCB0aGUgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGlmCisgICAgICAgICAtLSAgd2UgcHV0IGEgYmxvY2sgYXJvdW5kIHRoaXMuCisgICAgICAgICAtLSAgZGVsY2FyZSAtLWJlZ2luCisgICAgICAgICBpZiB0b3BfeSAvPSAwIGFuZCB0b3BfeCAvPSAwIHRoZW4KKyAgICAgICAgICAgIEFkZCAoTGluZSA9PiB0b3BfeSAtIDEsIENvbHVtbiA9PiB0b3BfeCAtIDEsCisgICAgICAgICAgICAgICAgIENoID0+IEFDU19NYXAgKEFDU19VcHBlcl9MZWZ0X0Nvcm5lcikpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgaWYgdG9wX3ggLz0gMCB0aGVuCisgICAgICAgICAgICBkb192X2xpbmUgKHRvcF95LCB0b3BfeCAtIDEsIEFDU19NYXAgKEFDU19WZXJ0aWNhbF9MaW5lKSwgcG9ydHkpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgaWYgdG9wX3kgLz0gMCB0aGVuCisgICAgICAgICAgICBkb19oX2xpbmUgKHRvcF95IC0gMSwgdG9wX3gsIEFDU19NYXAgKEFDU19Ib3Jpem9udGFsX0xpbmUpLCBwb3J0eCk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICAtLSAgZXhjZXB0aW9uIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOyBlbmQ7CisKKyAgICAgICAgIC0tICBpbiBDIHdhcyAuLi4gcHhtYXggPiBwb3J0eCAtIDEKKyAgICAgICAgIGlmIHNjcm9sbGVycyBhbmQgcHhtYXggPj0gcG9ydHggdGhlbgorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgbGVuZ3RoIDogY29uc3RhbnQgQ29sdW1uX1Bvc2l0aW9uIDo9IHBvcnR4IC0gdG9wX3ggLSAxOworICAgICAgICAgICAgICAgbG93ZW5kLCBoaWdoZW5kIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIC0tICBJbnN0ZWFkIG9mIHVzaW5nIGZsb2F0cywgSSdsbCB1c2UgaW50ZWdlcnMgb25seS4KKyAgICAgICAgICAgICAgIGxvd2VuZCA6PSB0b3BfeCArIChiYXNleCAqIGxlbmd0aCkgLyBweG1heDsKKyAgICAgICAgICAgICAgIGhpZ2hlbmQgOj0gdG9wX3ggKyAoKGJhc2V4ICsgbGVuZ3RoKSAqIGxlbmd0aCkgLyBweG1heDsKKworICAgICAgICAgICAgICAgZG9faF9saW5lIChwb3J0eSAtIDEsIHRvcF94LCBBQ1NfTWFwIChBQ1NfSG9yaXpvbnRhbF9MaW5lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZW5kKTsKKyAgICAgICAgICAgICAgIGlmIGhpZ2hlbmQgPCBwb3J0eCB0aGVuCisgICAgICAgICAgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAoQXR0ciA9PiAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgT24gPT4gVHJ1ZSk7CisgICAgICAgICAgICAgICAgICBkb19oX2xpbmUgKHBvcnR5IC0gMSwgbG93ZW5kLCBCbGFuazIsIGhpZ2hlbmQgKyAxKTsKKyAgICAgICAgICAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAgIChBdHRyID0+IChSZXZlcnNlX1ZpZGVvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICBPbiA9PiBGYWxzZSk7CisgICAgICAgICAgICAgICAgICBkb19oX2xpbmUgKHBvcnR5IC0gMSwgaGlnaGVuZCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19Ib3Jpem9udGFsX0xpbmUpLCBwb3J0eCk7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBkb19oX2xpbmUgKHBvcnR5IC0gMSwgdG9wX3gsIEFDU19NYXAgKEFDU19Ib3Jpem9udGFsX0xpbmUpLCBwb3J0eCk7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHNjcm9sbGVycyBhbmQgcHltYXggPj0gcG9ydHkgdGhlbgorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgbGVuZ3RoIDogY29uc3RhbnQgTGluZV9Qb3NpdGlvbiA6PSBwb3J0eSAtIHRvcF95IC0gMTsKKyAgICAgICAgICAgICAgIGxvd2VuZCwgaGlnaGVuZCA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgbG93ZW5kIDo9IHRvcF95ICsgKGJhc2V5ICogbGVuZ3RoKSAvIHB5bWF4OworICAgICAgICAgICAgICAgaGlnaGVuZCA6PSB0b3BfeSArICgoYmFzZXkgKyBsZW5ndGgpICogbGVuZ3RoKSAvIHB5bWF4OworCisgICAgICAgICAgICAgICBkb192X2xpbmUgKHRvcF95LCBwb3J0eCAtIDEsIEFDU19NYXAgKEFDU19WZXJ0aWNhbF9MaW5lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZW5kKTsKKyAgICAgICAgICAgICAgIGlmIGhpZ2hlbmQgPCBwb3J0eSB0aGVuCisgICAgICAgICAgICAgICAgICBTd2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAoQXR0ciA9PiAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgT24gPT4gVHJ1ZSk7CisgICAgICAgICAgICAgICAgICBkb192X2xpbmUgKGxvd2VuZCwgcG9ydHggLSAxLCBCbGFuazIsIGhpZ2hlbmQgKyAxKTsKKyAgICAgICAgICAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAgIChBdHRyID0+IChSZXZlcnNlX1ZpZGVvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICBPbiA9PiBGYWxzZSk7CisgICAgICAgICAgICAgICAgICBkb192X2xpbmUgKGhpZ2hlbmQgKyAxLCBwb3J0eCAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDU19NYXAgKEFDU19WZXJ0aWNhbF9MaW5lKSwgcG9ydHkpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9fdl9saW5lICh0b3BfeSwgcG9ydHggLSAxLCBBQ1NfTWFwIChBQ1NfVmVydGljYWxfTGluZSksIHBvcnR5KTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgdG9wX3kgLz0gMCB0aGVuCisgICAgICAgICAgICBBZGQgKExpbmUgPT4gdG9wX3kgLSAxLCBDb2x1bW4gPT4gcG9ydHggLSAxLAorICAgICAgICAgICAgICAgICBDaCA9PiBBQ1NfTWFwIChBQ1NfVXBwZXJfUmlnaHRfQ29ybmVyKSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBpZiB0b3BfeCAvPSAwIHRoZW4KKyAgICAgICAgICAgIEFkZCAoTGluZSA9PiBwb3J0eSAtIDEsIENvbHVtbiA9PiB0b3BfeCAtIDEsCisgICAgICAgICAgICAgICAgIENoID0+IEFDU19NYXAgKEFDU19Mb3dlcl9MZWZ0X0Nvcm5lcikpOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgZGVjbGFyZQorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC0tICBIZXJlIGlzIGFub3RoZXIgcGxhY2Ugd2hlcmUgaXQgaXMgcG9zc2libGUKKyAgICAgICAgICAgIC0tICB0byB3cml0ZSB0byB0aGUgY29ybmVyIG9mIHRoZSBzY3JlZW4uCisgICAgICAgICAgICBBZGQgKExpbmUgPT4gcG9ydHkgLSAxLCBDb2x1bW4gPT4gcG9ydHggLSAxLAorICAgICAgICAgICAgICAgICBDaCA9PiBBQ1NfTWFwIChBQ1NfTG93ZXJfUmlnaHRfQ29ybmVyKSk7CisgICAgICAgICAgICBleGNlcHRpb24KKyAgICAgICAgICAgIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOworICAgICAgICAgZW5kOworCisgICAgICAgICBiZWZvcmUgOj0gZ2V0dGltZTsKKworICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKKworICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgLS0gIHRoZSBDIHZlcnNpb24gYWxsb3dzIHRoZSBwYW5lbCB0byBoYXZlIGEgemVybyBoZWlnaHQKKyAgICAgICAgICAgIC0tICB3aWNoIHJhaXNlIHRoZSBleGNlcHRpb24KKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlCisgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgIHBhZCwKKyAgICAgICAgICAgICAgIGJhc2V5LCBiYXNleCwKKyAgICAgICAgICAgICAgIHRvcF95LCB0b3BfeCwKKyAgICAgICAgICAgICAgIHBvcnR5IC0gTGluZV9Qb3NpdGlvbiAoZ3JlYXRlciAocHhtYXgsIHBvcnR4KSkgLSAxLAorICAgICAgICAgICAgICAgcG9ydHggLSBDb2x1bW5fUG9zaXRpb24gKGdyZWF0ZXIgKHB5bWF4LCBwb3J0eSkpIC0gMSk7CisgICAgICAgICAgICBleGNlcHRpb24KKyAgICAgICAgICAgIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOworICAgICAgICAgZW5kOworCisgICAgICAgICBVcGRhdGVfU2NyZWVuOworCisgICAgICAgICBpZiB0aW1pbmcgdGhlbgorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgcyA6IFN0cmluZyAoMSAuLiA3KTsKKyAgICAgICAgICAgICAgIGVsYXBzZWQgOiBMb25nX0Zsb2F0OworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIGFmdGVyIDo9IGdldHRpbWU7CisgICAgICAgICAgICAgICBlbGFwc2VkIDo9IChMb25nX0Zsb2F0IChhZnRlci5zZWNvbmRzIC0gYmVmb3JlLnNlY29uZHMpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExvbmdfRmxvYXQgKGFmdGVyLm1pY3Jvc2Vjb25kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYmVmb3JlLm1pY3Jvc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gMS4wZTYpOworICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSAxLCBDb2x1bW4gPT4gQ29sdW1ucyAtIDIwKTsKKyAgICAgICAgICAgICAgIGZsb2F0aW8uUHV0IChzLCBlbGFwc2VkLCBBZnQgPT4gMywgRXhwID0+IDApOworICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gcyk7CisgICAgICAgICAgICAgICBSZWZyZXNoOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBjIDo9IHBnZXRjIChwYWQpOworICAgICAgICAgZXhpdCB3aGVuIGMgPSBLZXlfRXhpdDsKKworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIEFsbG93X1Njcm9sbGluZyAoTW9kZSA9PiBUcnVlKTsKKworICAgZW5kIHBhbm5lcjsKKworICAgR3JpZHNpemUgOiBjb25zdGFudCA6PSAzOworICAgR3JpZGNvdW50IDogSW50ZWdlciA6PSAwOworCisgICBQYWRfSGlnaCA6IGNvbnN0YW50IExpbmVfQ291bnQgOj0gIDIwMDsKKyAgIFBhZF9XaWRlIDogY29uc3RhbnQgQ29sdW1uX0NvdW50IDo9IDIwMDsKKyAgIHBhbnBhZCA6IFdpbmRvdyA6PSBOZXdfUGFkIChQYWRfSGlnaCwgUGFkX1dpZGUpOworYmVnaW4KKyAgIGlmIHBhbnBhZCA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgIENhbm5vdCAoImNhbm5vdCBjcmVhdGUgcmVxdWVzdGVkIHBhZCIpOworICAgICAgcmV0dXJuOworICAgZW5kIGlmOworCisgICBmb3IgaSBpbiAwIC4uIFBhZF9IaWdoIC0gMSBsb29wCisgICAgICBmb3IgaiBpbiAwIC4uIFBhZF9XaWRlIC0gMSAgbG9vcAorICAgICAgICAgaWYgaSBtb2QgR3JpZHNpemUgPSAwIGFuZCBqIG1vZCBHcmlkc2l6ZSA9IDAgdGhlbgorICAgICAgICAgICAgaWYgaSA9IDAgb3IgaiA9IDAgdGhlbgorICAgICAgICAgICAgICAgQWRkIChwYW5wYWQsICcrJyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAtLSAgZGVwZW5kcyBvbiBBU0NJST8KKyAgICAgICAgICAgICAgIEFkZCAocGFucGFkLAorICAgICAgICAgICAgICAgICAgICBDaCA9PiBDaGFyYWN0ZXInVmFsIChDaGFyYWN0ZXInUG9zICgnQScpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JpZGNvdW50IG1vZCAyNikpOworICAgICAgICAgICAgICAgR3JpZGNvdW50IDo9IEdyaWRjb3VudCArIDE7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbHNpZiBpIG1vZCBHcmlkc2l6ZSA9IDAgdGhlbgorICAgICAgICAgICAgQWRkIChwYW5wYWQsICctJyk7CisgICAgICAgICBlbHNpZiBqIG1vZCBHcmlkc2l6ZSA9IDAgdGhlbgorICAgICAgICAgICAgQWRkIChwYW5wYWQsICd8Jyk7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAtLSAgaGFuZGxlIHRoZSB3cml0ZSB0byB0aGUgbG93ZXIgcmlnaHQgY29ybmVyIGVycm9yCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgQWRkIChwYW5wYWQsICcgJyk7CisgICAgICAgICAgICAgICBleGNlcHRpb24KKyAgICAgICAgICAgICAgIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgbG9vcDsKKyAgIHBhbm5lcl9sZWdlbmQgKExpbmVzIC0gNCk7CisgICBwYW5uZXJfbGVnZW5kIChMaW5lcyAtIDMpOworICAgcGFubmVyX2xlZ2VuZCAoTGluZXMgLSAyKTsKKyAgIHBhbm5lcl9sZWdlbmQgKExpbmVzIC0gMSk7CisKKyAgIFNldF9LZXlQYWRfTW9kZSAocGFucGFkLCBUcnVlKTsKKyAgIC0tICBNYWtlIHRoZSBwYWQgKGluaXRpYWxseSkgbmFycm93IGVub3VnaCB0aGF0IGEgdHJhY2UgZmlsZSB3b24ndCB3cmFwLgorICAgLS0gIFdlJ2xsIHN0aWxsIGJlIGFibGUgdG8gd2lkZW4gaXQgZHVyaW5nIGEgdGVzdCwgc2luY2UgdGhhdCdzIHJlcXVpcmVkCisgICAtLSAgZm9yIHRlc3RpbmcgYm91bmRhcmllcy4KKworICAgcGFubmVyIChwYW5wYWQsIDIsIDIsIExpbmVzIC0gNSwgQ29sdW1ucyAtIDE1LCBwYWRnZXRjaCdBY2Nlc3MpOworCisgICBEZWxldGUgKHBhbnBhZCk7CisgICBFbmRfV2luZG93czsgLS0gIEhtbSwgRXJhc2UgYWZ0ZXIgRW5kX1dpbmRvd3MKKyAgIEVyYXNlOworZW5kIG5jdXJzZXMyLmRlbW9fcGFkOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFkLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTk2MjYzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLmRlbW9fcGFkOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFuZWxzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjU1OGVkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKQEAgLTAsMCArMSwzODIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNiAkCistLSAgJERhdGU6IDIwMDgvMDgvMzAgMjM6MzU6MDEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMuVXNlcl9EYXRhOworCit3aXRoIG5jdXJzZXMyLmdlbmVyaWNQdXRzOworCitwcm9jZWR1cmUgbmN1cnNlczIuZGVtb19wYW5lbHMgKG5hcF9tc2VjaSA6IEludGVnZXIpIGlzCisgICB1c2UgSW50X0lPOworCisgICBmdW5jdGlvbiAgbWtwYW5lbCAoY29sb3IgOiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgcm93cyAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgIGNvbHMgIDogQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgIHRseSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICB0bHggICA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFBhbmVsOworICAgcHJvY2VkdXJlIHJtcGFuZWwgKHBhbiA6IGluIG91dCBQYW5lbCk7CisgICBwcm9jZWR1cmUgcGZsdXNoOworICAgcHJvY2VkdXJlIHdhaXRfYV93aGlsZSAobXNlYyA6IEludGVnZXIpOworICAgcHJvY2VkdXJlIHNheXdoYXQgKHRleHQgOiBTdHJpbmcpOworICAgcHJvY2VkdXJlIGZpbGxfcGFuZWwgKHBhbiA6IFBhbmVsKTsKKworICAgbmFwX21zZWMgOiBJbnRlZ2VyIDo9IG5hcF9tc2VjaTsKKworICAgZnVuY3Rpb24gbWtwYW5lbCAoY29sb3IgOiBDb2xvcl9OdW1iZXI7CisgICAgICAgICAgICAgICAgICAgICByb3dzICA6IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICBjb2xzICA6IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgIHRseSAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgIHRseCAgIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gUGFuZWwgaXMKKyAgICAgIHdpbiA6IFdpbmRvdzsKKyAgICAgIHBhbiA6IFBhbmVsIDo9IE51bGxfUGFuZWw7CisgICBiZWdpbgorICAgICAgd2luIDo9IE5ld19XaW5kb3cgKHJvd3MsIGNvbHMsIHRseSwgdGx4KTsKKyAgICAgIGlmIE51bGxfV2luZG93IC89IHdpbiB0aGVuCisgICAgICAgICBwYW4gOj0gTmV3X1BhbmVsICh3aW4pOworICAgICAgICAgaWYgcGFuID0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICAgICBEZWxldGUgKHdpbik7CisgICAgICAgICBlbHNpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgIGZnLCBiZyA6IENvbG9yX051bWJlcjsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBpZiBjb2xvciA9IEJsdWUgdGhlbgorICAgICAgICAgICAgICAgICAgZmcgOj0gV2hpdGU7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBmZyA6PSBCbGFjazsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIGJnIDo9IGNvbG9yOworICAgICAgICAgICAgICAgSW5pdF9QYWlyIChDb2xvcl9QYWlyIChjb2xvciksIGZnLCBiZyk7CisgICAgICAgICAgICAgICBTZXRfQmFja2dyb3VuZCAod2luLCAoQ2ggPT4gJyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgPT4gTm9ybWFsX1ZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXIgKGNvbG9yKSkpOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgU2V0X0JhY2tncm91bmQgKHdpbiwgKENoID0+ICcgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpciAoY29sb3IpKSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gcGFuOworICAgZW5kIG1rcGFuZWw7CisKKyAgIHByb2NlZHVyZSBybXBhbmVsIChwYW4gOiBpbiBvdXQgUGFuZWwpIGlzCisgICAgICB3aW4gOiBXaW5kb3cgOj0gUGFuZWxfV2luZG93IChwYW4pOworICAgYmVnaW4KKyAgICAgIERlbGV0ZSAocGFuKTsKKyAgICAgIERlbGV0ZSAod2luKTsKKyAgIGVuZCBybXBhbmVsOworCisgICBwcm9jZWR1cmUgcGZsdXNoIGlzCisgICBiZWdpbgorICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgIFVwZGF0ZV9TY3JlZW47CisgICBlbmQgcGZsdXNoOworCisgICBwcm9jZWR1cmUgd2FpdF9hX3doaWxlIChtc2VjIDogSW50ZWdlcikgaXMKKyAgIGJlZ2luCisgICAgICAtLSAgVGhlIEMgdmVyc2lvbiBoYWQgc29tZSAjaWZkZWYgYmxvY2tzIGhlcmUKKyAgICAgIGlmIG1zZWMgPSAxIHRoZW4KKyAgICAgICAgIEdldGNoYXI7CisgICAgICBlbHNlCisgICAgICAgICBOYXBfTWlsbGlfU2Vjb25kcyAobXNlYyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgd2FpdF9hX3doaWxlOworCisgICBwcm9jZWR1cmUgc2F5d2hhdCAodGV4dCA6IFN0cmluZykgaXMKKyAgIGJlZ2luCisgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiBMaW5lcyAtIDEsIENvbHVtbiA9PiAwKTsKKyAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgQWRkIChTdHIgPT4gdGV4dCk7CisgICBlbmQgc2F5d2hhdDsKKworICAgLS0gIGZyb20gc2FtcGxlLWN1cnNlc19kZW1vLmFkYgorICAgdHlwZSBVc2VyX0RhdGEgaXMgbmV3IFN0cmluZyAoMSAuLiAyKTsKKyAgIHR5cGUgVXNlcl9EYXRhX0FjY2VzcyBpcyBhY2Nlc3MgYWxsIFVzZXJfRGF0YTsKKyAgIHBhY2thZ2UgUFVEIGlzIG5ldyBQYW5lbHMuVXNlcl9EYXRhIChVc2VyX0RhdGEsIFVzZXJfRGF0YV9BY2Nlc3MpOworCisgICB1c2UgUFVEOworCisgICBwcm9jZWR1cmUgZmlsbF9wYW5lbCAocGFuIDogUGFuZWwpIGlzCisgICAgICB3aW4gOiBjb25zdGFudCBXaW5kb3cgOj0gUGFuZWxfV2luZG93IChwYW4pOworICAgICAgbnVtIDogY29uc3RhbnQgQ2hhcmFjdGVyIDo9IEdldF9Vc2VyX0RhdGEgKHBhbikgKDIpOworICAgICAgdG1wNiA6IFN0cmluZyAoMSAuLiA2KSA6PSAiLXBhbngtIjsKKyAgICAgIG1heHkgOiBMaW5lX0NvdW50OworICAgICAgbWF4eCA6IENvbHVtbl9Db3VudDsKKworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yICh3aW4sIDEsIDEpOworICAgICAgdG1wNiAoNSkgOj0gbnVtOworICAgICAgQWRkICh3aW4sIFN0ciA9PiB0bXA2KTsKKyAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lICh3aW4pOworICAgICAgQm94ICh3aW4pOworICAgICAgR2V0X1NpemUgKHdpbiwgbWF4eSwgbWF4eCk7CisgICAgICBmb3IgeSBpbiAyIC4uIG1heHkgLSAzIGxvb3AKKyAgICAgICAgIGZvciB4IGluIDEgLi4gbWF4eCAtIDMgbG9vcAorICAgICAgICAgICAgTW92ZV9DdXJzb3IgKHdpbiwgeSwgeCk7CisgICAgICAgICAgICBBZGQgKHdpbiwgbnVtKTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGxvb3A7CisgICBleGNlcHRpb24KKyAgIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOworICAgZW5kIGZpbGxfcGFuZWw7CisKKyAgIG1vZHN0ciA6IGNvbnN0YW50IGFycmF5ICgwIC4uIDUpIG9mIFN0cmluZyAoMSAuLiA1KSA6PQorICAgICAoInRlc3QgIiwKKyAgICAgICJURVNUICIsCisgICAgICAiKCoqKSAiLAorICAgICAgIiooKSogIiwKKyAgICAgICI8LS0+ICIsCisgICAgICAiTEFTVCAiCisgICAgICApOworCisgICBwYWNrYWdlIHAgaXMgbmV3IG5jdXJzZXMyLmdlbmVyaWNQdXRzICgxMDI0KTsKKyAgIHVzZSBwOworICAgdXNlIHAuQlM7CisgICAtLSAgdGhlIEMgdmVyc2lvbiBzYWlkIHJlZ2lzdGVyIGludCB5LCB4OworICAgdG1wYiA6IEJTLkJvdW5kZWRfU3RyaW5nOworCitiZWdpbgorICAgUmVmcmVzaDsKKworICAgZm9yIHkgaW4gMCAuLiBJbnRlZ2VyIChMaW5lcyAtIDIpIGxvb3AKKyAgICAgIGZvciB4IGluIDAgLi4gSW50ZWdlciAoQ29sdW1ucyAtIDEpIGxvb3AKKyAgICAgICAgIG15UHV0ICh0bXBiLCAoeSArIHgpIG1vZCAxMCk7CisgICAgICAgICBteUFkZCAoU3RyID0+IHRtcGIpOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgbG9vcDsKKyAgIGZvciB5IGluIDAgLi4gNCBsb29wCisgICAgICBkZWNsYXJlCisgICAgICAgICBwMSwgcDIsIHAzLCBwNCwgcDUgOiBQYW5lbDsKKyAgICAgICAgIFUxIDogY29uc3RhbnQgVXNlcl9EYXRhX0FjY2VzcyA6PSBuZXcgVXNlcl9EYXRhJygicDEiKTsKKyAgICAgICAgIFUyIDogY29uc3RhbnQgVXNlcl9EYXRhX0FjY2VzcyA6PSBuZXcgVXNlcl9EYXRhJygicDIiKTsKKyAgICAgICAgIFUzIDogY29uc3RhbnQgVXNlcl9EYXRhX0FjY2VzcyA6PSBuZXcgVXNlcl9EYXRhJygicDMiKTsKKyAgICAgICAgIFU0IDogY29uc3RhbnQgVXNlcl9EYXRhX0FjY2VzcyA6PSBuZXcgVXNlcl9EYXRhJygicDQiKTsKKyAgICAgICAgIFU1IDogY29uc3RhbnQgVXNlcl9EYXRhX0FjY2VzcyA6PSBuZXcgVXNlcl9EYXRhJygicDUiKTsKKworICAgICAgYmVnaW4KKyAgICAgICAgIHAxIDo9IG1rcGFuZWwgKFJlZCwgTGluZXMgLyAyIC0gMiwgQ29sdW1ucyAvIDggKyAxLCAwLCAwKTsKKyAgICAgICAgIFNldF9Vc2VyX0RhdGEgKHAxLCBVMSk7CisgICAgICAgICBwMiA6PSBta3BhbmVsIChHcmVlbiwgTGluZXMgLyAyICsgMSwgQ29sdW1ucyAvIDcsIExpbmVzIC8gNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgLyAxMCk7CisgICAgICAgICBTZXRfVXNlcl9EYXRhIChwMiwgVTIpOworICAgICAgICAgcDMgOj0gbWtwYW5lbCAoWWVsbG93LCBMaW5lcyAvIDQsIENvbHVtbnMgLyAxMCwgTGluZXMgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyAvIDkpOworICAgICAgICAgU2V0X1VzZXJfRGF0YSAocDMsIFUzKTsKKyAgICAgICAgIHA0IDo9IG1rcGFuZWwgKEJsdWUsIExpbmVzIC8gMiAtIDIsIENvbHVtbnMgLyA4LCAgTGluZXMgLyAyIC0gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgLyAzKTsKKyAgICAgICAgIFNldF9Vc2VyX0RhdGEgKHA0LCBVNCk7CisgICAgICAgICBwNSA6PSBta3BhbmVsIChNYWdlbnRhLCBMaW5lcyAvIDIgLSAyLCBDb2x1bW5zIC8gOCwgIExpbmVzIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgLyAyIC0gMik7CisgICAgICAgICBTZXRfVXNlcl9EYXRhIChwNSwgVTUpOworCisgICAgICAgICBmaWxsX3BhbmVsIChwMSk7CisgICAgICAgICBmaWxsX3BhbmVsIChwMik7CisgICAgICAgICBmaWxsX3BhbmVsIChwMyk7CisgICAgICAgICBmaWxsX3BhbmVsIChwNCk7CisgICAgICAgICBmaWxsX3BhbmVsIChwNSk7CisgICAgICAgICBIaWRlIChwNCk7CisgICAgICAgICBIaWRlIChwNSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICBzYXl3aGF0ICgicHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJoMyBzMSBzMiBzNCBzNTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgTW92ZSAocDEsIDAsIDApOworICAgICAgICAgSGlkZSAocDMpOworICAgICAgICAgU2hvdyAocDEpOworICAgICAgICAgU2hvdyAocDIpOworICAgICAgICAgU2hvdyAocDQpOworICAgICAgICAgU2hvdyAocDUpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJzMTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgU2hvdyAocDEpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJzMjsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgU2hvdyAocDIpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJtMjsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgTW92ZSAocDIsIExpbmVzIC8gMyArIDEsIENvbHVtbnMgLyA4KTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgiczM7Iik7CisgICAgICAgICBTaG93IChwMyk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoIm0zOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBNb3ZlIChwMywgTGluZXMgLyA0ICsgMSwgQ29sdW1ucyAvIDE1KTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgiYjM7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIEJvdHRvbSAocDMpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJzNDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgU2hvdyAocDQpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJzNTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgU2hvdyAocDUpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJ0MzsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgVG9wIChwMyk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoInQxOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBUb3AgKHAxKTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgidDI7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFRvcCAocDIpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJ0MzsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgVG9wIChwMyk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoInQ0OyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBUb3AgKHA0KTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBmb3IgaXRtcCBpbiAgMCAuLiAgNSBsb29wCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICB3NCA6IGNvbnN0YW50IFdpbmRvdyA6PSBQYW5lbF9XaW5kb3cgKHA0KTsKKyAgICAgICAgICAgICAgIHc1IDogY29uc3RhbnQgV2luZG93IDo9IFBhbmVsX1dpbmRvdyAocDUpOworICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgc2F5d2hhdCAoIm00OyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAodzQsIExpbmVzIC8gOCwgMSk7CisgICAgICAgICAgICAgICBBZGQgKHc0LCBtb2RzdHIgKGl0bXApKTsKKyAgICAgICAgICAgICAgIE1vdmUgKHA0LCBMaW5lcyAvIDYsIENvbHVtbl9Qb3NpdGlvbiAoaXRtcCkgKiAoQ29sdW1ucyAvIDgpKTsKKyAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yICh3NSwgTGluZXMgLyA2LCAxKTsKKyAgICAgICAgICAgICAgIEFkZCAodzUsIG1vZHN0ciAoaXRtcCkpOworICAgICAgICAgICAgICAgcGZsdXNoOworICAgICAgICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgICAgICAgIHNheXdoYXQgKCJtNTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKHc0LCBMaW5lcyAvIDYsIDEpOworICAgICAgICAgICAgICAgQWRkICh3NCwgbW9kc3RyIChpdG1wKSk7CisgICAgICAgICAgICAgICBNb3ZlIChwNSwgTGluZXMgLyAzIC0gMSwgKENvbHVtbl9Qb3NpdGlvbiAoaXRtcCkgKiAxMCkgKyA2KTsKKyAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yICh3NSwgTGluZXMgLyA4LCAxKTsKKyAgICAgICAgICAgICAgIEFkZCAodzUsIG1vZHN0ciAoaXRtcCkpOworICAgICAgICAgICAgICAgcGZsdXNoOworICAgICAgICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICBlbmQgbG9vcDsKKworICAgICAgICAgc2F5d2hhdCAoIm00OyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBNb3ZlIChwNCwgTGluZXMgLyA2LCA2ICogKENvbHVtbnMgLyA4KSk7CisgICAgICAgICAtLSAgTW92ZShwNCwgTGluZXMgLyA2LCBpdG1wICogKENvbHVtbnMgLyA4KSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoInQ1OyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBUb3AgKHA1KTsKKyAgICAgICAgIHBmbHVzaDsKKyAgICAgICAgIHdhaXRfYV93aGlsZSAobmFwX21zZWMpOworCisgICAgICAgICBzYXl3aGF0ICgidDI7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICAgICAgIFRvcCAocDIpOworICAgICAgICAgcGZsdXNoOworICAgICAgICAgd2FpdF9hX3doaWxlIChuYXBfbXNlYyk7CisKKyAgICAgICAgIHNheXdoYXQgKCJ0MTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgICAgVG9wIChwMSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoImQyOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBybXBhbmVsIChwMik7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoImgzOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBIaWRlIChwMyk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoImQxOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBybXBhbmVsIChwMSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoImQ0OyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBybXBhbmVsIChwNCk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKworICAgICAgICAgc2F5d2hhdCAoImQ1OyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIik7CisgICAgICAgICBybXBhbmVsIChwNSk7CisgICAgICAgICBwZmx1c2g7CisgICAgICAgICB3YWl0X2Ffd2hpbGUgKG5hcF9tc2VjKTsKKyAgICAgICAgIGlmIG5hcF9tc2VjID0gMSB0aGVuCisgICAgICAgICAgICBleGl0OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgbmFwX21zZWMgOj0gMTAwOworICAgICAgICAgZW5kIGlmOworCisgICAgICBlbmQ7CisgICBlbmQgbG9vcDsKKworICAgRXJhc2U7CisgICBFbmRfV2luZG93czsKKworZW5kIG5jdXJzZXMyLmRlbW9fcGFuZWxzOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFuZWxzLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI4NzhjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLmRlbW9fcGFuZWxzIChuYXBfbXNlY2kgOiBJbnRlZ2VyKTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZmx1c2hpbnBfdGVzdC5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWZsdXNoaW5wX3Rlc3QuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTk4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWZsdXNoaW5wX3Rlc3QuYWRiCkBAIC0wLDAgKzEsMTM1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmZsdXNoaW5wX3Rlc3QgKHdpbiA6IFdpbmRvdykgaXMKKworICAgcHJvY2VkdXJlIENvbnRpbnVlICh3aW4gOiBXaW5kb3cpOworCisgICBwcm9jZWR1cmUgQ29udGludWUgKHdpbiA6IFdpbmRvdykgaXMKKyAgIGJlZ2luCisgICAgICBTZXRfRWNob19Nb2RlIChGYWxzZSk7CisgICAgICBNb3ZlX0N1cnNvciAod2luLCAxMCwgMSk7CisgICAgICBBZGQgKHdpbiwgMTAsIDEsICIgUHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgICAgUmVmcmVzaCAod2luKTsKKyAgICAgIEdldGNoYXIgKHdpbik7CisgICBlbmQgQ29udGludWU7CisKKyAgIGgsIGJ5LCBzaCA6IExpbmVfUG9zaXRpb247CisgICB3LCBieCwgc3cgOiBDb2x1bW5fUG9zaXRpb247CisKKyAgIHN1YldpbiA6IFdpbmRvdzsKKworYmVnaW4KKyAgIENsZWFyICh3aW4pOworICAgR2V0X1NpemUgKHdpbiwgaCwgdyk7CisgICBHZXRfV2luZG93X1Bvc2l0aW9uICh3aW4sIGJ5LCBieCk7CisgICBzdyA6PSB3IC8gMzsKKyAgIHNoIDo9IGggLyAzOworICAgc3ViV2luIDo9IFN1Yl9XaW5kb3cgKHdpbiwgc2gsIHN3LCBieSArIGggLSBzaCAtIDIsIGJ4ICsgdyAtIHN3IC0gMik7CisKKyAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgSW5pdF9QYWlyICgyLCBDeWFuLCBCbHVlKTsKKyAgICAgIENoYW5nZV9CYWNrZ3JvdW5kIChzdWJXaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlZF9DaGFyYWN0ZXInKENoID0+ICcgJywgQ29sb3IgPT4gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiBOb3JtYWxfVmlkZW8pKTsKKyAgIGVuZCBpZjsKKworICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChzdWJXaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgIEJveCAoc3ViV2luKTsKKyAgIEFkZCAoc3ViV2luLCAyLCAxLCAiVGhpcyBpcyBhIHN1YndpbmRvdyIpOworICAgUmVmcmVzaCAod2luKTsKKworICAgU2V0X0NicmVha19Nb2RlIChUcnVlKTsKKyAgIEFkZCAod2luLCAwLCAxLCAiVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIGZsdXNoaW5wKCkgY2FsbC4iKTsKKworICAgQWRkICh3aW4sIDIsIDEsICJUeXBlIHJhbmRvbSBrZXlzIGZvciA1IHNlY29uZHMuIik7CisgICBBZGQgKHdpbiwgMywgMSwKKyAgICAgICAgIlRoZXNlIHNob3VsZCBiZSBkaXNjYXJkZWQgKG5vdCBlY2hvZWQpIGFmdGVyIHRoZSBzdWJ3aW5kb3cgIiAmCisgICAgICAgICJnb2VzIGF3YXkuIik7CisgICBSZWZyZXNoICh3aW4pOworCisgICBmb3IgaSBpbiAwIC4uIDQgbG9vcAorICAgICAgTW92ZV9DdXJzb3IgKHN1YldpbiwgMSwgMSk7CisgICAgICBBZGQgKHN1YldpbiwgU3RyID0+ICJUaW1lID0gIik7CisgICAgICBBZGQgKHN1YldpbiwgU3RyID0+IEludGVnZXInSW1hZ2UgKGkpKTsKKyAgICAgIFJlZnJlc2ggKHN1Yldpbik7CisgICAgICBOYXBfTWlsbGlfU2Vjb25kcyAoMTAwMCk7CisgICAgICBGbHVzaF9JbnB1dDsKKyAgIGVuZCBsb29wOworCisgICBEZWxldGUgKHN1Yldpbik7CisgICBFcmFzZSAod2luKTsKKyAgIEZsYXNoX1NjcmVlbjsKKyAgIFJlZnJlc2ggKHdpbik7CisgICBOYXBfTWlsbGlfU2Vjb25kcyAoMTAwMCk7CisKKyAgIEFkZCAod2luLCAyLCAxLAorICAgICAgICBTdHIgPT4gIklmIHlvdSB3ZXJlIHN0aWxsIHR5cGluZyB3aGVuIHRoZSB3aW5kb3cgdGltZXIgZXhwaXJlZCwiKTsKKyAgIEFkZCAod2luLCAzLCAxLAorICAgICAgICAib3IgZWxzZSB5b3UgdHlwZWQgbm90aGluZyBhdCBhbGwgd2hpbGUgaXQgd2FzIHJ1bm5pbmcsIik7CisgICBBZGQgKHdpbiwgNCwgMSwKKyAgICAgICAgInRlc3Qgd2FzIGludmFsaWQuICBZb3UnbGwgc2VlIGdhcmJhZ2Ugb3Igbm90aGluZyBhdCBhbGwuICIpOworICAgQWRkICh3aW4sIDYsIDEsICJQcmVzcyBhIGtleSIpOworICAgTW92ZV9DdXJzb3IgKHdpbiwgOSwgMTApOworICAgUmVmcmVzaCAod2luKTsKKyAgIFNldF9FY2hvX01vZGUgKFRydWUpOworICAgR2V0Y2hhciAod2luKTsKKyAgIEZsdXNoX0lucHV0OworICAgQWRkICh3aW4sIDEyLCAwLAorICAgICAgICAiSWYgeW91IHNlZSBhbnkga2V5IG90aGVyIHRoYW4gd2hhdCB5b3UgdHlwZWQsIGZsdXNoaW5wKCkgaXMgYnJva2VuLiIpOworICAgQ29udGludWUgKHdpbik7CisKKyAgIE1vdmVfQ3Vyc29yICh3aW4sIDksIDEwKTsKKyAgIERlbGV0ZV9DaGFyYWN0ZXIgKHdpbik7CisgICBSZWZyZXNoICh3aW4pOworICAgTW92ZV9DdXJzb3IgKHdpbiwgMTIsIDApOworICAgQ2xlYXJfVG9fRW5kX09mX0xpbmU7CisgICBBZGQgKHdpbiwKKyAgICAgICAgIldoYXQgeW91IHR5cGVkIHNob3VsZCBub3cgaGF2ZSBiZWVuIGRlbGV0ZWQ7IGlmIG5vdCwgd2RlbGNoKCkgIiAmCisgICAgICAgICJmYWlsZWQuIik7CisgICBDb250aW51ZSAod2luKTsKKworICAgU2V0X0NicmVha19Nb2RlIChUcnVlKTsKKworZW5kIG5jdXJzZXMyLmZsdXNoaW5wX3Rlc3Q7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWZsdXNoaW5wX3Rlc3QuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1mbHVzaGlucF90ZXN0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzc2Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1mbHVzaGlucF90ZXN0LmFkcwpAQCAtMCwwICsxLDQzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKK3Byb2NlZHVyZSBuY3Vyc2VzMi5mbHVzaGlucF90ZXN0ICh3aW4gOiBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLldpbmRvdyk7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTY1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgpAQCAtMCwwICsxLDExNyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4zICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0NjoxOCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBuY3Vyc2VzMi5nZW5lcmljUHV0cyBpcworCisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdnZXRuc3RyIChXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMZW4gOiBpbnQpIHJldHVybiBpbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBXZ2V0bnN0ciwgIndnZXRuc3RyIik7CisKKyAgICAgIE4gICAgICAgIDogSW50ZWdlciA6PSBMZW47CisgICAgICBUeHQgOiBjaGFyX2FycmF5ICgwIC4uIHNpemVfdCAoTWF4X0xlbmd0aCkpOworICAgICAgeFN0ciA6IFN0cmluZyAoMSAuLiBNYXhfTGVuZ3RoKTsKKyAgICAgIENudCA6IE5hdHVyYWw7CisgICBiZWdpbgorICAgICAgaWYgTiA8IDAgdGhlbgorICAgICAgICAgTiA6PSBNYXhfTGVuZ3RoOworICAgICAgZW5kIGlmOworICAgICAgaWYgTiA+IE1heF9MZW5ndGggdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFR4dCAoMCkgOj0gSW50ZXJmYWNlcy5DLmNoYXInRmlyc3Q7CisgICAgICBpZiBXZ2V0bnN0ciAoV2luLCBUeHQsIENfSW50IChOKSkgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICBUb19BZGEgKFR4dCwgeFN0ciwgQ250LCBUcnVlKTsKKyAgICAgIFN0ciA6PSBUb19Cb3VuZGVkX1N0cmluZyAoeFN0ciAoMSAuLiBDbnQpKTsKKyAgIGVuZCBteUdldDsKKworICAgcHJvY2VkdXJlIG15UHV0IChTdHIgIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBpICAgIDogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgQmFzZSA6IGluICAgICBOdW1iZXJfQmFzZSA6PSAxMCkgaXMKKyAgICAgIHBhY2thZ2UgSW50X0lPIGlzIG5ldyBJbnRlZ2VyX0lPIChJbnRlZ2VyKTsgdXNlIEludF9JTzsKKyAgICAgIHRtcCA6IFN0cmluZyAoMSAuLiBCUy5NYXhfTGVuZ3RoKTsKKyAgIGJlZ2luCisgICAgICBQdXQgKHRtcCwgaSwgQmFzZSk7CisgICAgICBTdHIgOj0gVG9fQm91bmRlZF9TdHJpbmcgKHRtcCk7CisgICAgICBUcmltIChTdHIsIEFkYS5TdHJpbmdzLlRyaW1fRW5kJyhBZGEuU3RyaW5ncy5MZWZ0KSk7CisgICBlbmQgbXlQdXQ7CisKKyAgIHByb2NlZHVyZSBteUFkZCAoU3RyIDogQlMuQm91bmRlZF9TdHJpbmcpIGlzCisgICBiZWdpbgorICAgICAgQWRkIChTdHIgPT4gVG9fU3RyaW5nIChTdHIpKTsKKyAgIGVuZCBteUFkZDsKKworICAgLS0gIGZyb20gbmN1cnNlcy1hdXgKKyAgIHByb2NlZHVyZSBGaWxsX1N0cmluZyAoQ3AgIDogaW4gIGNoYXJzX3B0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nKQorICAgaXMKKyAgICAgIC0tICBGaWxsIHRoZSBzdHJpbmcgd2l0aCB0aGUgY2hhcmFjdGVycyByZWZlcmVuY2VkIGJ5IHRoZQorICAgICAgLS0gIGNoYXJzX3B0ci4KKyAgICAgIC0tCisgICAgICBMZW4gOiBOYXR1cmFsOworICAgYmVnaW4KKyAgICAgIGlmIENwIC89IE51bGxfUHRyIHRoZW4KKyAgICAgICAgIExlbiA6PSBOYXR1cmFsIChTdHJsZW4gKENwKSk7CisgICAgICAgICBpZiBNYXhfTGVuZ3RoIDwgTGVuIHRoZW4KKyAgICAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICBTIDogU3RyaW5nICgxIC4uIExlbik7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgUyA6PSBWYWx1ZSAoQ3ApOworICAgICAgICAgICAgU3RyIDo9IFRvX0JvdW5kZWRfU3RyaW5nIChTKTsKKyAgICAgICAgIGVuZDsKKyAgICAgIGVsc2UKKyAgICAgICAgIFN0ciA6PSBOdWxsX0JvdW5kZWRfU3RyaW5nOworICAgICAgZW5kIGlmOworCisgICBlbmQgRmlsbF9TdHJpbmc7CisKK2VuZCBuY3Vyc2VzMi5nZW5lcmljUHV0czsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxNGExMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRzCkBAIC0wLDAgKzEsNzIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpdGggQWRhLlRleHRfSU87IHVzZSBBZGEuVGV4dF9JTzsKK3dpdGggQWRhLlN0cmluZ3MuQm91bmRlZDsKK3VzZSBBZGEuU3RyaW5ncy5Cb3VuZGVkOword2l0aCBJbnRlcmZhY2VzLkM7IHVzZSBJbnRlcmZhY2VzLkM7Cit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOyB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKK2dlbmVyaWMKKyAgIE1heCA6IE5hdHVyYWw7CisgICAtLSAgIHR5cGUgbXlzdHJpbmcgaXMgcHJpdmF0ZTsKKyAgIC0tICAgdHlwZSBteWludCBpcworcGFja2FnZSBuY3Vyc2VzMi5nZW5lcmljUHV0cyBpcworICAgcGFja2FnZSBCUyBpcyBuZXcKKyAgICAgQWRhLlN0cmluZ3MuQm91bmRlZC5HZW5lcmljX0JvdW5kZWRfTGVuZ3RoIChNYXgpOworICAgdXNlIEJTOworCisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IGluICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLldpbmRvdworICAgICAgICAgICAgICAgICAgICAgIDo9IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKworICAgcHJvY2VkdXJlIG15UHV0IChTdHIgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIGkgOiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICBCYXNlIDogaW4gTnVtYmVyX0Jhc2UgOj0gMTApOworICAgLS0gIHRoZSBkZWZhdWx0IHNob3VsZCBiZSBBZGEuVGV4dF9JTy5JbnRlZ2VyX0lPLkRlZmF1bHRfQmFzZQorICAgLS0gIGJ1dCBEZWZhdWx0X0Jhc2UgaXMgaGlkZGVuIGluIHRoZSBnZW5lcmljIHNvIGRvZXNuJ3QgZXhpc3QhCisgICBwcm9jZWR1cmUgbXlBZGQgKFN0ciA6IEJTLkJvdW5kZWRfU3RyaW5nKTsKKworICAgcHJvY2VkdXJlIEZpbGxfU3RyaW5nIChDcCAgOiBpbiAgY2hhcnNfcHRyOyBTdHIgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmcpOworZW5kIG5jdXJzZXMyLmdlbmVyaWNQdXRzOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaC5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWEwOWYzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaC5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIGdldGNoX3Rlc3Q7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoX3Rlc3QuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzIzMTJjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYgpAQCAtMCwwICsxLDI1NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0Njo1OCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBDaGFyYWN0ZXIgaW5wdXQgdGVzdAorLS0gIHRlc3QgdGhlIGtleXBhZCBmZWF0dXJlCisKK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOword2l0aCBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKK3dpdGggQWRhLlN0cmluZ3MuQm91bmRlZDsKKword2l0aCBuY3Vyc2VzMi5nZW5lcmljUHV0czsKKworcHJvY2VkdXJlIG5jdXJzZXMyLmdldGNoX3Rlc3QgaXMKKyAgIHVzZSBJbnRfSU87CisKKyAgIGZ1bmN0aW9uIG1vdXNlX2RlY29kZSAoZXAgOiBNb3VzZV9FdmVudCkgcmV0dXJuIFN0cmluZzsKKworICAgZnVuY3Rpb24gbW91c2VfZGVjb2RlIChlcCA6IE1vdXNlX0V2ZW50KSByZXR1cm4gU3RyaW5nIGlzCisgICAgICBZICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCAgICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgQnV0dG9uIDogTW91c2VfQnV0dG9uOworICAgICAgU3RhdGUgIDogQnV0dG9uX1N0YXRlOworICAgICAgcGFja2FnZSBCUyBpcyBuZXcgQWRhLlN0cmluZ3MuQm91bmRlZC5HZW5lcmljX0JvdW5kZWRfTGVuZ3RoICgyMDApOworICAgICAgdXNlIEJTOworICAgICAgYnVmIDogQm91bmRlZF9TdHJpbmcgOj0gVG9fQm91bmRlZF9TdHJpbmcgKCIiKTsKKyAgIGJlZ2luCisgICAgICAtLSAgTm90ZSB0aGF0IHRoZXNlIGJpbmRpbmdzIGRvIG5vdCBhbGxvdworICAgICAgLS0gIHR3byBidXR0b24gc3RhdGVzLAorICAgICAgLS0gIFRoZSBDIHZlcnNpb24gY2FuIHByaW50IHtjbGljay0xLCBjbGljay0zfSBmb3IgZXhhbXBsZS4KKyAgICAgIC0tICBUaGV5IGFsc28gZG9uJ3QgaGF2ZSB0aGUgJ2lkJyBvciB6IGNvb3JkaW5hdGUuCisgICAgICBHZXRfRXZlbnQgKGVwLCBZLCBYLCBCdXR0b24sIFN0YXRlKTsKKworICAgICAgLS0gIFRPRE8gQXBwZW5kIChidWYsICJpZCAiKTsgZnJvbSBDIHZlcnNpb24KKyAgICAgIEFwcGVuZCAoYnVmLCAiYXQgKCIpOworICAgICAgQXBwZW5kIChidWYsIENvbHVtbl9Qb3NpdGlvbidJbWFnZSAoWCkpOworICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgQXBwZW5kIChidWYsIExpbmVfUG9zaXRpb24nSW1hZ2UgKFkpKTsKKyAgICAgIEFwcGVuZCAoYnVmLCAiKSBzdGF0ZSIpOworICAgICAgQXBwZW5kIChidWYsIE1vdXNlX0J1dHRvbidJbWFnZSAoQnV0dG9uKSk7CisKKyAgICAgIEFwcGVuZCAoYnVmLCAiID0gIik7CisgICAgICBBcHBlbmQgKGJ1ZiwgQnV0dG9uX1N0YXRlJ0ltYWdlIChTdGF0ZSkpOworICAgICAgcmV0dXJuIFRvX1N0cmluZyAoYnVmKTsKKyAgIGVuZCBtb3VzZV9kZWNvZGU7CisKKyAgIGJ1ZiA6IFN0cmluZyAoMSAuLiAxMDI0KTsgLS0gIFRPRE8gd2FzIEJVRlNJWkUKKyAgIG4gOiBJbnRlZ2VyOworICAgYyA6IEtleV9Db2RlOworICAgYmxvY2tmbGFnIDogVGltZW91dF9Nb2RlIDo9IEJsb2NraW5nOworICAgZmlyc3R0aW1lIDogQm9vbGVhbiA6PSBUcnVlOworICAgdG1wMiAgOiBFdmVudF9NYXNrOworICAgdG1wNiA6IFN0cmluZyAoMSAuLiA2KTsKKyAgIHRtcDIwIDogU3RyaW5nICgxIC4uIDIwKTsKKyAgIHggOiBDb2x1bW5fUG9zaXRpb247CisgICB5IDogTGluZV9Qb3NpdGlvbjsKKyAgIHRtcHggOiBJbnRlZ2VyOworICAgaW5jb3VudCA6IEludGVnZXIgOj0gMDsKKworYmVnaW4KKyAgIFJlZnJlc2g7CisgICB0bXAyIDo9IFN0YXJ0X01vdXNlIChBbGxfRXZlbnRzKTsKKyAgIEFkZCAoU3RyID0+ICJEZWxheSBpbiAxMHRocyBvZiBhIHNlY29uZCAoPENSPiBmb3IgYmxvY2tpbmcgaW5wdXQpPyAiKTsKKyAgIFNldF9FY2hvX01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgR2V0IChTdHIgPT4gYnVmKTsKKworICAgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gPT4gRmFsc2UpOworICAgU2V0X05MX01vZGUgKFN3aXRjaE9uID0+IEZhbHNlKTsKKworICAgaWYgQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmcuSXNfRGlnaXQgKGJ1ZiAoMSkpIHRoZW4KKyAgICAgIEdldCAoSXRlbSA9PiBuLCBGcm9tID0+IGJ1ZiwgTGFzdCA9PiB0bXB4KTsKKyAgICAgIFNldF9UaW1lb3V0X01vZGUgKE1vZGUgPT4gRGVsYXllZCwgQW1vdW50ID0+IG4gKiAxMDApOworICAgICAgYmxvY2tmbGFnIDo9IERlbGF5ZWQ7CisgICBlbmQgaWY7CisKKyAgIGMgOj0gQ2hhcmFjdGVyJ1BvcyAoJz8nKTsKKyAgIFNldF9SYXdfTW9kZSAoU3dpdGNoT24gPT4gVHJ1ZSk7CisgICBsb29wCisgICAgICBpZiBub3QgZmlyc3R0aW1lIHRoZW4KKyAgICAgICAgIEFkZCAoU3RyID0+ICJLZXkgcHJlc3NlZDogIik7CisgICAgICAgICBQdXQgKHRtcDYsIEludGVnZXIgKGMpLCA4KTsKKyAgICAgICAgIEFkZCAoU3RyID0+IHRtcDYpOworICAgICAgICAgQWRkIChDaCA9PiAnICcpOworICAgICAgICAgaWYgYyA9IEtleV9Nb3VzZSB0aGVuCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBldmVudCA6IE1vdXNlX0V2ZW50OworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIGV2ZW50IDo9IEdldF9Nb3VzZTsKKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICJLRVlfTU9VU0UsICIpOworICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gbW91c2VfZGVjb2RlIChldmVudCkpOworICAgICAgICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVsc2lmIGMgPj0gS2V5X01pbiB0aGVuCisgICAgICAgICAgICBLZXlfTmFtZSAoYywgdG1wMjApOworICAgICAgICAgICAgQWRkIChTdHIgPT4gdG1wMjApOworICAgICAgICAgICAgLS0gIEkgdXNlZCB0bXAgYW5kIGdvdCBiaXR0ZW4gYnkgdGhlIGxlbmd0aCBwcm9ibGVtOi0+CisgICAgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgICAgZWxzaWYgYyA+IDE2IzgwIyB0aGVuIC0tICBUT0RPIGZpeCwgdXNlIGNvbnN0YW50IGlmIHBvc3NpYmxlCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBjMiA6IGNvbnN0YW50IENoYXJhY3RlciA6PSBDaGFyYWN0ZXInVmFsIChjIG1vZCAxNiM4MCMpOworICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIGlmIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nLklzX0dyYXBoaWMgKGMyKSB0aGVuCisgICAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiTS0iKTsKKyAgICAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gYzIpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gIk0tIik7CisgICAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiBVbl9Db250cm9sICgoQ2ggPT4gYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gQ29sb3JfUGFpcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IE5vcm1hbF9WaWRlbykpKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICIgKGhpZ2gtaGFsZiBjaGFyYWN0ZXIpIik7CisgICAgICAgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgYzIgOiBjb25zdGFudCBDaGFyYWN0ZXIgOj0gQ2hhcmFjdGVyJ1ZhbCAoYyBtb2QgMTYjODAjKTsKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBpZiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZy5Jc19HcmFwaGljIChjMikgdGhlbgorICAgICAgICAgICAgICAgICAgQWRkIChDaCA9PiBjMik7CisgICAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIChBU0NJSSBwcmludGFibGUgY2hhcmFjdGVyKSIpOworICAgICAgICAgICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEFkZCAoU3RyID0+IFVuX0NvbnRyb2wgKChDaCA9PiBjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yX1BhaXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IE5vcm1hbF9WaWRlbykpKTsKKyAgICAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICIgKEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyKSIpOworICAgICAgICAgICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIC0tICBUT0RPIEkgYW0gbm90IHN1cmUgd2h5IHRoaXMgd2FzIGluIHRoZSBDIHZlcnNpb24KKyAgICAgICAgIC0tICB0aGUgZGVsYXkgc3RhdGVtZW50IHNjcm9sbCBhbnl3YXkuCisgICAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChMaW5lID0+IHksIENvbHVtbiA9PiB4KTsKKyAgICAgICAgIGlmIHkgPj0gTGluZXMgLSAxIHRoZW4KKyAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgZW5kIGlmOworCisgICAgICBmaXJzdHRpbWUgOj0gRmFsc2U7CisgICAgICBpZiBjID0gQ2hhcmFjdGVyJ1BvcyAoJ2cnKSB0aGVuCisgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICBwYWNrYWdlIHAgaXMgbmV3IG5jdXJzZXMyLmdlbmVyaWNQdXRzICgxMDI0KTsKKyAgICAgICAgICAgIHVzZSBwOworICAgICAgICAgICAgdXNlIHAuQlM7CisgICAgICAgICAgICB0aW1lZG91dCA6IEJvb2xlYW4gOj0gRmFsc2U7CisgICAgICAgICAgICBib3VuZGVkYnVmIDogQm91bmRlZF9TdHJpbmc7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgQWRkIChTdHIgPT4gImdldHN0ciB0ZXN0OiAiKTsKKyAgICAgICAgICAgIFNldF9FY2hvX01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgICAgICAgICAgLS0gIE5vdGUgdGhhdCBpZiBkZWxheSBtb2RlIGlzIHNldAorICAgICAgICAgICAgLS0gIEdldCBjYW4gcmFpc2UgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgLS0gIFRoZSBDIHZlcnNpb24gd291bGQgcHJpbnQgdGhlIHN0cmluZyBpdCBoYWQgc28gZmFyCisgICAgICAgICAgICAtLSAgYWxzbyBUT0RPIGdldCBsb25nZXIgbGVuZ3RoIHN0cmluZywgbGlrZSB0aGUgQyB2ZXJzaW9uCisgICAgICAgICAgICBkZWNsYXJlIGJlZ2luCisgICAgICAgICAgICAgICBteUdldCAoU3RyID0+IGJvdW5kZWRidWYpOworICAgICAgICAgICAgZXhjZXB0aW9uIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PgorICAgICAgICAgICAgICAgQWRkIChTdHIgPT4gIlRpbWVkIG91dC4iKTsKKyAgICAgICAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICAgICAgICB0aW1lZG91dCA6PSBUcnVlOworICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgLS0gIG5vdGUgdGhhdCB0aGUgQWRhIEdldCB3aWxsIHN0b3AgcmVhZGluZyBhdCAxMDI0LgorICAgICAgICAgICAgaWYgbm90IHRpbWVkb3V0IHRoZW4KKyAgICAgICAgICAgICAgIFNldF9FY2hvX01vZGUgKFN3aXRjaE9uID0+IEZhbHNlKTsKKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICIgSSBzYXcgJyIpOworICAgICAgICAgICAgICAgbXlBZGQgKFN0ciA9PiBib3VuZGVkYnVmKTsKKyAgICAgICAgICAgICAgIEFkZCAoU3RyID0+ICInLiIpOworICAgICAgICAgICAgICAgQWRkIChjaCA9PiBuZXdsKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZDsKKyAgICAgIGVsc2lmIGMgPSBDaGFyYWN0ZXInUG9zICgncycpIHRoZW4KKyAgICAgICAgIFNoZWxsT3V0IChUcnVlKTsKKyAgICAgIGVsc2lmIGMgPSBDaGFyYWN0ZXInUG9zICgneCcpIG9yIGMgPSBDaGFyYWN0ZXInUG9zICgncScpIG9yCisgICAgICAgIChjID0gS2V5X05vbmUgYW5kIGJsb2NrZmxhZyA9IEJsb2NraW5nKSB0aGVuCisgICAgICAgICBleGl0OworICAgICAgZWxzaWYgYyA9IENoYXJhY3RlcidQb3MgKCc/JykgdGhlbgorICAgICAgICAgQWRkIChTdHIgPT4gIlR5cGUgYW55IGtleSB0byBzZWUgaXRzIGtleXBhZCB2YWx1ZS4gIEFsc286Iik7CisgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgICAgQWRkIChTdHIgPT4gImcgLS0gdHJpZ2dlcnMgYSBnZXRzdHIgdGVzdCIpOworICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgIEFkZCAoU3RyID0+ICJzIC0tIHNoZWxsIG91dCIpOworICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgIEFkZCAoU3RyID0+ICJxIC0tIHF1aXQiKTsKKyAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICBBZGQgKFN0ciA9PiAiPyAtLSByZXBlYXRzIHRoaXMgaGVscCBtZXNzYWdlIik7CisgICAgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgICAgZW5kIGlmOworCisgICAgICBsb29wCisgICAgICAgICBjIDo9IEdldGNoYXI7CisgICAgICAgICBleGl0IHdoZW4gYyAvPSBLZXlfTm9uZTsKKyAgICAgICAgIGlmIGJsb2NrZmxhZyAvPSBCbG9ja2luZyB0aGVuCisgICAgICAgICAgICBQdXQgKHRtcDYsIGluY291bnQpOyAtLSAgYXJnaCBzdHJpbmcgbGVuZ3RoIQorICAgICAgICAgICAgQWRkIChTdHIgPT4gdG1wNik7CisgICAgICAgICAgICBBZGQgKFN0ciA9PiAiOiBpbnB1dCB0aW1lZCBvdXQiKTsKKyAgICAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBQdXQgKHRtcDYsIGluY291bnQpOworICAgICAgICAgICAgQWRkIChTdHIgPT4gdG1wNik7CisgICAgICAgICAgICBBZGQgKFN0ciA9PiAiOiBpbnB1dCBlcnJvciIpOworICAgICAgICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBpbmNvdW50IDo9IGluY291bnQgKyAxOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgbG9vcDsKKworICAgRW5kX01vdXNlICh0bXAyKTsKKyAgIFNldF9UaW1lb3V0X01vZGUgKE1vZGUgPT4gQmxvY2tpbmcsIEFtb3VudCA9PiAwKTsgLS0gIGFtb3VudCBpcyBpZ25vcmVkCisgICBTZXRfUmF3X01vZGUgKFN3aXRjaE9uID0+IEZhbHNlKTsKKyAgIFNldF9OTF9Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CitlbmQgbmN1cnNlczIuZ2V0Y2hfdGVzdDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2hfdGVzdC5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoX3Rlc3QuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTBhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoX3Rlc3QuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi5nZXRjaF90ZXN0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOGM0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldG9wdC5hZGIKQEAgLTAsMCArMSwxNjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuNyAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6NDQgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlICBHTlUgZ2V0b3B0IGZ1bmN0aW9uCistLSAgY29weXJpZ2h0IEZyZWUgU29mdHdhcmUgRm91bmR0aW9uCisKK3dpdGggQWRhLlN0cmluZ3MuRml4ZWQ7Cit3aXRoIEFkYS5TdHJpbmdzLkJvdW5kZWQ7Cit3aXRoIEFkYS5UZXh0X0lPOyB1c2UgQWRhLlRleHRfSU87CisKK3BhY2thZ2UgYm9keSBuY3Vyc2VzMi5nZXRvcHQgaXMKKworICAgbmV4dGNoYXIgOiBOYXR1cmFsIDo9IDA7CisKKyAgIC0tICBOY3Vyc2VzIGRvZXNuJ3QgdXNlIHRoZSBub24gb3B0aW9uIGVsZW1lbnRzIHNvIHdlIGFyZSBzcGFyZWQKKyAgIC0tICB0aGUgam9iIG9mIGNvbXB1dGluZyB0aG9zZS4KKworICAgLS0gIGFsc28gdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IGFyZ3Ygb3IgYXJnYworICAgLS0gIERvaW5nIHNvIGlzIEVycm9uZW91cyBleGVjdXRpb24uCisKKyAgIC0tICBsb25nb3B0aW9ucyBhcmUgbm90IGhhbmRsZWQuCisKKyAgIHByb2NlZHVyZSBRZ2V0b3B0IChyZXR2YWwgOiBvdXQgSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICBhcmdjIDogSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICBhcmd2IDogc3RyaW5nZnVuYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tICBhcmd2IHdpbGwgYmUgdGhlIEFyZ3VtZW50IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgIG9wdHN0cmluZyA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBvcHRpbmQgOiBpbiBvdXQgSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tICBpZ25vcmVkIGZvciBuY3Vyc2VzLCBtdXN0IGJlIGluaXRpYWxpemVkIHRvIDEgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tICB0aGUgY2FsbGVyCisgICAgICAgICAgICAgICAgICAgICAgT3B0YXJnIDogb3V0IHN0cmluZ2EKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tICBhIGdhcmJhZ2UgY29sZWN0b3Igd291bGQgYmUgdXNlZnVsIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICApIGlzCisKKyAgICAgIHBhY2thZ2UgQlMgaXMgbmV3IEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoMjAwKTsKKyAgICAgIHVzZSBCUzsKKyAgICAgIG9wdGFyZ3ggOiBCb3VuZGVkX1N0cmluZzsKKyAgIGJlZ2luCisKKyAgICAgIGlmIGFyZ2MgPCBvcHRpbmQgdGhlbgorICAgICAgICAgcmV0dmFsIDo9IC0xOworICAgICAgICAgcmV0dXJuOworICAgICAgZW5kIGlmOworCisgICAgICBvcHRhcmd4IDo9IFRvX0JvdW5kZWRfU3RyaW5nICgiIik7CisKKyAgICAgIGlmIG5leHRjaGFyID0gMCB0aGVuCisKKyAgICAgICAgIGlmIGFyZ3YgKG9wdGluZCkgPSAiLS0iIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICB0aGUgcmVzdCBhcmUgbm9uLW9wdGlvbnMsIHdlIGlnbm9yZSB0aGVtCisgICAgICAgICAgICByZXR2YWwgOj0gLTE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIGFyZ3YgKG9wdGluZCkoMSkgLz0gJy0nIG9yIGFyZ3YgKG9wdGluZCknTGVuZ3RoID0gMSB0aGVuCisgICAgICAgICAgICBvcHRpbmQgOj0gb3B0aW5kICsgMTsKKyAgICAgICAgICAgIE9wdGFyZyA6PSBuZXcgU3RyaW5nJyhhcmd2IChvcHRpbmQpKTsKKyAgICAgICAgICAgIHJldHZhbCA6PSAxOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBuZXh0Y2hhciA6PSAyOyAtLSBza2lwIHRoZSBvbmUgaHlwaGVuLgorICAgICAgZW5kIGlmOworCisgICAgICAtLSAgTG9vayBhdCBhbmQgaGFuZGxlIHRoZSBuZXh0IHNob3J0IG9wdGlvbi1jaGFyYWN0ZXIuCisgICAgICBkZWNsYXJlCisgICAgICAgICBjIDogQ2hhcmFjdGVyIDo9IGFyZ3YgKG9wdGluZCkgKG5leHRjaGFyKTsKKyAgICAgICAgIHRlbXAgOiBjb25zdGFudCBOYXR1cmFsIDo9CisgICAgICAgICAgIEFkYS5TdHJpbmdzLkZpeGVkLkluZGV4IChvcHRzdHJpbmcsIFN0cmluZycoMSA9PiBjKSk7CisgICAgICBiZWdpbgorICAgICAgICAgaWYgdGVtcCA9IDAgb3IgYyA9ICc6JyB0aGVuCisgICAgICAgICAgICBQdXRfTGluZSAoU3RhbmRhcmRfRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgYXJndiAob3B0aW5kKSAmICI6IGludmFsaWQgb3B0aW9uIC0tICIgJiBjKTsKKyAgICAgICAgICAgIGMgOj0gJz8nOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBvcHRzdHJpbmcgKHRlbXAgKyAxKSA9ICc6JyB0aGVuCisgICAgICAgICAgICBpZiBvcHRzdHJpbmcgKHRlbXAgKyAyKSA9ICc6JyB0aGVuCisgICAgICAgICAgICAgICAtLSAgVGhpcyBpcyBhbiBvcHRpb24gdGhhdCBhY2NlcHRzIGFuIGFyZ3VtZW50IG9wdGlvbmFsbHkuCisgICAgICAgICAgICAgICBpZiBuZXh0Y2hhciAvPSBhcmd2IChvcHRpbmQpJ0xlbmd0aCB0aGVuCisgICAgICAgICAgICAgICAgICBvcHRhcmd4IDo9IFRvX0JvdW5kZWRfU3RyaW5nCisgICAgICAgICAgICAgICAgICAgIChhcmd2IChvcHRpbmQpIChuZXh0Y2hhciAuLiBhcmd2IChvcHRpbmQpJ0xlbmd0aCkpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgT3B0YXJnIDo9IG51bGw7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAtLSAgVGhpcyBpcyBhbiBvcHRpb24gdGhhdCByZXF1aXJlcyBhbiBhcmd1bWVudC4KKyAgICAgICAgICAgICAgIGlmIG5leHRjaGFyIC89IGFyZ3YgKG9wdGluZCknTGVuZ3RoIHRoZW4KKyAgICAgICAgICAgICAgICAgIG9wdGFyZ3ggOj0gVG9fQm91bmRlZF9TdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgKGFyZ3YgKG9wdGluZCkgKG5leHRjaGFyIC4uIGFyZ3YgKG9wdGluZCknTGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICBvcHRpbmQgOj0gb3B0aW5kICsgMTsKKyAgICAgICAgICAgICAgIGVsc2lmIG9wdGluZCA9IGFyZ2MgdGhlbgorICAgICAgICAgICAgICAgICAgUHV0X0xpbmUgKFN0YW5kYXJkX0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3YgKG9wdGluZCkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAiICYgYyk7CisgICAgICAgICAgICAgICAgICBpZiBvcHRzdHJpbmcgKG9wdHN0cmluZydGaXJzdCkgPSAnOicgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIGMgOj0gJzonOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgYyA6PSAnPyc7CisgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAtLSAgaW5jcmVtZW50IGl0IGFnYWluIHdoZW4gdGFraW5nIG5leHQgQVJHVi1lbHQgYXMgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgICBvcHRpbmQgOj0gb3B0aW5kICsgMTsKKyAgICAgICAgICAgICAgICAgIG9wdGFyZ3ggOj0gVG9fQm91bmRlZF9TdHJpbmcgKGFyZ3YgKG9wdGluZCkpOworICAgICAgICAgICAgICAgICAgb3B0aW5kIDo9IG9wdGluZCArIDE7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBuZXh0Y2hhciA6PSAwOworICAgICAgICAgZWxzZSAtLSBubyBhcmd1bWVudCBmb3IgdGhlIG9wdGlvbgorICAgICAgICAgICAgaWYgbmV4dGNoYXIgPSBhcmd2IChvcHRpbmQpJ0xlbmd0aCB0aGVuCisgICAgICAgICAgICAgICBvcHRpbmQgOj0gb3B0aW5kICsgMTsKKyAgICAgICAgICAgICAgIG5leHRjaGFyIDo9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBuZXh0Y2hhciA6PSBuZXh0Y2hhciArIDE7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIHJldHZhbCA6PSBDaGFyYWN0ZXInUG9zIChjKTsKKyAgICAgICAgIE9wdGFyZyA6PSBuZXcgU3RyaW5nJyhUb19TdHJpbmcgKG9wdGFyZ3gpKTsKKyAgICAgICAgIHJldHVybjsKKyAgICAgIGVuZDsKKyAgIGVuZCBRZ2V0b3B0OworCitlbmQgbmN1cnNlczIuZ2V0b3B0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjM1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldG9wdC5hZHMKQEAgLTAsMCArMSw2MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4yICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgbmN1cnNlczIuZ2V0b3B0IGlzCisKKyAgIHR5cGUgc3RyaW5nYSBpcyBhY2Nlc3MgU3RyaW5nOworCisgICB0eXBlIHN0cmluZ2Z1bmMgaXMgYWNjZXNzCisgICAgIGZ1bmN0aW9uIChuIDogUG9zaXRpdmUpIHJldHVybiBTdHJpbmc7CisKKyAgIHByb2NlZHVyZSBRZ2V0b3B0IChyZXR2YWwgICAgOiBvdXQgSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICBhcmdjICAgICAgOiBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgIGFyZ3YgICAgICA6IHN0cmluZ2Z1bmM7CisgICAgICAgICAgICAgICAgICAgICAgb3B0c3RyaW5nIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgIG9wdGluZCAgICA6IGluIG91dCBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgLS0gIGlnbm9yZWQgZm9yIG5jdXJzZXMsIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gMAorICAgICAgICAgICAgICAgICAgICAgICAgLS0gIGJ5IHRoZSBjYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICBPcHRhcmcgICAgOiBvdXQgc3RyaW5nYQorICAgICAgICAgICAgICAgICAgICAgICAgLS0gIGEgZ2FyYmFnZSBjb2xsZWN0b3Igd291bGQgYmUgdXNlZnVsIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICApOworCitlbmQgbmN1cnNlczIuZ2V0b3B0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyMDQyOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbS5hZGIKQEAgLTAsMCArMSw0NDggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6NTAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgVE9ETyB1c2UgRGVmYXVsdF9DaGFyYWN0ZXIgd2hlcmUgYXBwcm9wcmlhdGUKKworLS0gIFRoaXMgaXMgYW4gQWRhIHZlcnNpb24gb2YgbmN1cnNlcworLS0gIEkgdHJhbnNsYXRlZCB0aGlzIGJlY2F1c2UgaXQgdGVzdHMgdGhlIG1vc3QgZmVhdHVyZXMuCisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOworCit3aXRoIEFkYS5UZXh0X0lPOyB1c2UgQWRhLlRleHRfSU87CisKK3dpdGggQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKKy0tICB3aXRoIEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOworCit3aXRoIEFkYS5Db21tYW5kX0xpbmU7IHVzZSBBZGEuQ29tbWFuZF9MaW5lOworCit3aXRoIEFkYS5TdHJpbmdzLlVuYm91bmRlZDsKKword2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKK3dpdGggbmN1cnNlczIuZ2V0Y2hfdGVzdDsKK3dpdGggbmN1cnNlczIuYXR0cl90ZXN0Oword2l0aCBuY3Vyc2VzMi5jb2xvcl90ZXN0Oword2l0aCBuY3Vyc2VzMi5kZW1vX3BhbmVsczsKK3dpdGggbmN1cnNlczIuY29sb3JfZWRpdDsKK3dpdGggbmN1cnNlczIuc2xrX3Rlc3Q7Cit3aXRoIG5jdXJzZXMyLmFjc19kaXNwbGF5Oword2l0aCBuY3Vyc2VzMi5hY3NfYW5kX3Njcm9sbDsKK3dpdGggbmN1cnNlczIuZmx1c2hpbnBfdGVzdDsKK3dpdGggbmN1cnNlczIudGVzdF9zZ3JfYXR0cmlidXRlczsKK3dpdGggbmN1cnNlczIubWVudV90ZXN0Oword2l0aCBuY3Vyc2VzMi5kZW1vX3BhZDsKK3dpdGggbmN1cnNlczIuZGVtb19mb3JtczsKK3dpdGggbmN1cnNlczIub3ZlcmxhcF90ZXN0Oword2l0aCBuY3Vyc2VzMi50cmFjZV9zZXQ7CisKK3dpdGggbmN1cnNlczIuZ2V0b3B0OyB1c2UgbmN1cnNlczIuZ2V0b3B0OworCitwYWNrYWdlIGJvZHkgbmN1cnNlczIubSBpcworICAgdXNlIEludF9JTzsKKworICAgZnVuY3Rpb24gVG9fdHJhY2UgKG4gOiBJbnRlZ2VyKSByZXR1cm4gVHJhY2VfQXR0cmlidXRlX1NldDsKKyAgIHByb2NlZHVyZSB1c2FnZTsKKyAgIHByb2NlZHVyZSBTZXRfVGVybWluYWxfTW9kZXM7CisgICBmdW5jdGlvbiBEb19TaW5nbGVfVGVzdCAoYyA6IENoYXJhY3RlcikgcmV0dXJuIEJvb2xlYW47CisKKyAgIGZ1bmN0aW9uIFRvX3RyYWNlIChuIDogSW50ZWdlcikgcmV0dXJuIFRyYWNlX0F0dHJpYnV0ZV9TZXQgaXMKKyAgICAgIGEgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0IDo9IChvdGhlcnMgPT4gRmFsc2UpOworICAgICAgbSA6IEludGVnZXI7CisgICAgICByZXN0IDogSW50ZWdlcjsKKyAgIGJlZ2luCisgICAgICBtIDo9IG4gIG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5UaW1lcyA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSBuIC8gMjsKKworICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5UcHV0cyA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuVXBkYXRlIDo9IFRydWU7CisgICAgICBlbmQgaWY7CisgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5DdXJzb3JfTW92ZSA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuQ2hhcmFjdGVyX091dHB1dCA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuQ2FsbHMgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICBhLlZpcnR1YWxfUHV0cyA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgICAgcmVzdCA6PSByZXN0IC8gMjsKKyAgICAgIG0gOj0gcmVzdCBtb2QgMjsKKyAgICAgIGlmIDEgPSBtIHRoZW4KKyAgICAgICAgIGEuSW5wdXRfRXZlbnRzIDo9IFRydWU7CisgICAgICBlbmQgaWY7CisgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5UVFlfU3RhdGUgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICBhLkludGVybmFsX0NhbGxzIDo9IFRydWU7CisgICAgICBlbmQgaWY7CisgICAgICByZXN0IDo9IHJlc3QgLyAyOworICAgICAgbSA6PSByZXN0IG1vZCAyOworICAgICAgaWYgMSA9IG0gdGhlbgorICAgICAgICAgYS5DaGFyYWN0ZXJfQ2FsbHMgOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJlc3QgOj0gcmVzdCAvIDI7CisgICAgICBtIDo9IHJlc3QgbW9kIDI7CisgICAgICBpZiAxID0gbSB0aGVuCisgICAgICAgICBhLlRlcm1jYXBfVGVybUluZm8gOj0gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKworICAgICAgcmV0dXJuIGE7CisgICBlbmQgVG9fdHJhY2U7CisKKyAgIC0tICAgdGhlc2UgYXJlIHR5cGUgU3Rkc2NyX0luaXRfUHJvYzsKKworICAgZnVuY3Rpb24gcmlwX2Zvb3RlciAoCisgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gSW50ZWdlcjsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCByaXBfZm9vdGVyKTsKKworICAgZnVuY3Rpb24gcmlwX2Zvb3RlciAoCisgICAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gSW50ZWdlciBpcworICAgYmVnaW4KKyAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4sIChDaCA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA9PiAoUmV2ZXJzZV9WaWRlbyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IDApKTsKKyAgICAgIEVyYXNlIChXaW4pOworICAgICAgTW92ZV9DdXJzb3IgKFdpbiwgMCwgMCk7CisgICAgICBBZGQgKFdpbiwgImZvb3RlcjoiICAmIENvbHVtbnMnSW1nICYgIiBjb2x1bW5zIik7CisgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChXaW4pOworICAgICAgcmV0dXJuIDA7IC0tIEN1cnNlc19PSzsKKyAgIGVuZCByaXBfZm9vdGVyOworCisgICBmdW5jdGlvbiByaXBfaGVhZGVyICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBDb2x1bW5fQ291bnQpIHJldHVybiBJbnRlZ2VyOworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIHJpcF9oZWFkZXIpOworCisgICBmdW5jdGlvbiByaXBfaGVhZGVyICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBDb2x1bW5fQ291bnQpIHJldHVybiBJbnRlZ2VyIGlzCisgICBiZWdpbgorICAgICAgU2V0X0JhY2tncm91bmQgKFdpbiwgKENoID0+ICcgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IChSZXZlcnNlX1ZpZGVvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gMCkpOworICAgICAgRXJhc2UgKFdpbik7CisgICAgICBNb3ZlX0N1cnNvciAoV2luLCAwLCAwKTsKKyAgICAgIEFkZCAoV2luLCAiaGVhZGVyOiIgICYgQ29sdW1ucydJbWcgJiAiIGNvbHVtbnMiKTsKKyAgICAgIC0tICAnSW1nIGlzIGEgR05BVCBleHRlbnRpb24KKyAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKFdpbik7CisgICAgICByZXR1cm4gMDsgLS0gQ3Vyc2VzX09LOworICAgZW5kIHJpcF9oZWFkZXI7CisKKyAgIHByb2NlZHVyZSB1c2FnZSBpcworICAgICAgLS0gIHR5cGUgU3RyaW5nYSBpcyBhY2Nlc3MgU3RyaW5nOworICAgICAgdXNlIEFkYS5TdHJpbmdzLlVuYm91bmRlZDsKKyAgICAgIC0tICB0YmwgOiBjb25zdGFudCBhcnJheSAoUG9zaXRpdmUgcmFuZ2UgPD4pIG9mIFN0cmluZ2EgOj0gKAorICAgICAgdGJsIDogY29uc3RhbnQgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiBVbmJvdW5kZWRfU3RyaW5nCisgICAgICAgIDo9ICgKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCJVc2FnZTogbmN1cnNlcyBbb3B0aW9uc10iKSwKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCIiKSwKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCJPcHRpb25zOiIpLAorICAgICAgICAgICAgVG9fVW5ib3VuZGVkX1N0cmluZyAoIiAgLWEgZixiICAgc2V0IGRlZmF1bHQtY29sb3JzICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihhc3N1bWVkIHdoaXRlLW9uLWJsYWNrKSIpLAorICAgICAgICAgICAgVG9fVW5ib3VuZGVkX1N0cmluZyAoIiAgLWQgICAgICAgdXNlIGRlZmF1bHQtY29sb3JzIGlmIHRlcm1pbmFsICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRzIHRoZW0iKSwKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCIgIC1lIGZtdCAgIHNwZWNpZnkgZm9ybWF0IGZvciBzb2Z0LWtleXMgIiAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCAoZSkiKSwKKyAgICAgICAgICAgIFRvX1VuYm91bmRlZF9TdHJpbmcgKCIgIC1mICAgICAgIHJpcC1vZmYgZm9vdGVyIGxpbmUgIiAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGNhbiByZXBlYXQpIiksCisgICAgICAgICAgICBUb19VbmJvdW5kZWRfU3RyaW5nICgiICAtaCAgICAgICByaXAtb2ZmIGhlYWRlciBsaW5lICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihjYW4gcmVwZWF0KSIpLAorICAgICAgICAgICAgVG9fVW5ib3VuZGVkX1N0cmluZyAoIiAgLXMgbXNlYyAgc3BlY2lmeSBub21pbmFsIHRpbWUgZm9yICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmVsLWRlbW8gKGRlZmF1bHQ6IDEsIHRvIGhvbGQpIiksCisgICAgICAgICAgICBUb19VbmJvdW5kZWRfU3RyaW5nICgiICAtdCBtYXNrICBzcGVjaWZ5IGRlZmF1bHQgdHJhY2UtbGV2ZWwgIiAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG1heSB0b2dnbGUgd2l0aCBeVCkiKQorICAgICAgICAgICAgKTsKKyAgIGJlZ2luCisgICAgICBmb3IgbiBpbiB0YmwnUmFuZ2UgbG9vcAorICAgICAgICAgUHV0X0xpbmUgKFN0YW5kYXJkX0Vycm9yLCBUb19TdHJpbmcgKHRibCAobikpKTsKKyAgICAgIGVuZCBsb29wOworICAgICAgLS0gICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIC0tICBUT0RPIHNob3VsZCB3ZSB1c2UgU2V0X0V4aXRfU3RhdHVzIGFuZCB0aHJvdyBhbmQgZXhjZXB0aW9uPworICAgZW5kIHVzYWdlOworCisgICBwcm9jZWR1cmUgU2V0X1Rlcm1pbmFsX01vZGVzIGlzIGJlZ2luCisgICAgICBTZXRfUmF3X01vZGUgKFN3aXRjaE9uID0+IEZhbHNlKTsKKyAgICAgIFNldF9DYnJlYWtfTW9kZSAoU3dpdGNoT24gPT4gVHJ1ZSk7CisgICAgICBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA9PiBGYWxzZSk7CisgICAgICBBbGxvd19TY3JvbGxpbmcgKE1vZGUgPT4gVHJ1ZSk7CisgICAgICBVc2VfSW5zZXJ0X0RlbGV0ZV9MaW5lIChEb19JZGwgPT4gVHJ1ZSk7CisgICAgICBTZXRfS2V5UGFkX01vZGUgKFN3aXRjaE9uID0+IFRydWUpOworICAgZW5kIFNldF9UZXJtaW5hbF9Nb2RlczsKKworICAgbmFwX21zZWMgOiBJbnRlZ2VyIDo9IDE7CisKKyAgIGZ1bmN0aW9uIERvX1NpbmdsZV9UZXN0IChjIDogQ2hhcmFjdGVyKSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIGNhc2UgYyBpcworICAgICAgICAgd2hlbiAnYScgPT4KKyAgICAgICAgICAgIGdldGNoX3Rlc3Q7CisgICAgICAgICB3aGVuICdiJyA9PgorICAgICAgICAgICAgYXR0cl90ZXN0OworICAgICAgICAgd2hlbiAnYycgPT4KKyAgICAgICAgICAgIGlmIG5vdCBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgICAgICAgIENhbm5vdCAoImRvZXMgbm90IHN1cHBvcnQgY29sb3IuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjb2xvcl90ZXN0OworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgd2hlbiAnZCcgPT4KKyAgICAgICAgICAgIGlmIG5vdCBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgICAgICAgIENhbm5vdCAoImRvZXMgbm90IHN1cHBvcnQgY29sb3IuIik7CisgICAgICAgICAgICBlbHNpZiBub3QgQ2FuX0NoYW5nZV9Db2xvciB0aGVuCisgICAgICAgICAgICAgICBDYW5ub3QgKCJoYXMgaGFyZHdpcmVkIGNvbG9yIHZhbHVlcy4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGNvbG9yX2VkaXQ7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICB3aGVuICdlJyA9PgorICAgICAgICAgICAgc2xrX3Rlc3Q7CisgICAgICAgICB3aGVuICdmJyA9PgorICAgICAgICAgICAgYWNzX2Rpc3BsYXk7CisgICAgICAgICB3aGVuICdvJyA9PgorICAgICAgICAgICAgZGVtb19wYW5lbHMgKG5hcF9tc2VjKTsKKyAgICAgICAgIHdoZW4gJ2cnID0+CisgICAgICAgICAgICBhY3NfYW5kX3Njcm9sbDsKKyAgICAgICAgIHdoZW4gJ2knID0+CisgICAgICAgICAgICBmbHVzaGlucF90ZXN0IChTdGFuZGFyZF9XaW5kb3cpOworICAgICAgICAgd2hlbiAnaycgPT4KKyAgICAgICAgICAgIHRlc3Rfc2dyX2F0dHJpYnV0ZXM7CisgICAgICAgICB3aGVuICdtJyA9PgorICAgICAgICAgICAgbWVudV90ZXN0OworICAgICAgICAgd2hlbiAncCcgPT4KKyAgICAgICAgICAgIGRlbW9fcGFkOworICAgICAgICAgd2hlbiAncicgPT4KKyAgICAgICAgICAgIGRlbW9fZm9ybXM7CisgICAgICAgICB3aGVuICdzJyA9PgorICAgICAgICAgICAgb3ZlcmxhcF90ZXN0OworICAgICAgICAgd2hlbiAndCcgPT4KKyAgICAgICAgICAgIHRyYWNlX3NldDsKKyAgICAgICAgIHdoZW4gJz8nID0+CisgICAgICAgICAgICBudWxsOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4gcmV0dXJuIEZhbHNlOworICAgICAgZW5kIGNhc2U7CisgICAgICByZXR1cm4gVHJ1ZTsKKyAgIGVuZCBEb19TaW5nbGVfVGVzdDsKKworICAgY29tbWFuZCA6IENoYXJhY3RlcjsKKyAgIG15X2VfcGFyYW0gOiBTb2Z0X0xhYmVsX0tleV9Gb3JtYXQgOj0gRm91cl9Gb3VyOworICAgYXNzdW1lZF9jb2xvcnMgOiBCb29sZWFuIDo9IEZhbHNlOworICAgZGVmYXVsdF9jb2xvcnMgOiBCb29sZWFuIDo9IEZhbHNlOworICAgZGVmYXVsdF9mZyA6IENvbG9yX051bWJlciA6PSBXaGl0ZTsKKyAgIGRlZmF1bHRfYmcgOiBDb2xvcl9OdW1iZXIgOj0gQmxhY2s7CisgICAtLSAgbmFwX21zZWMgd2FzIGFuIHVuc2lnbmVkIGxvbmcgaW50ZWdlciBpbiB0aGUgQyB2ZXJzaW9uLAorICAgLS0gIHlldCBuYXBtcyBvbmx5IHRha2VzIGFuIGludCEKKworICAgYyA6IEludGVnZXI7CisgICBjMiA6IENoYXJhY3RlcjsKKyAgIG9wdGluZCA6IEludGVnZXIgOj0gMTsgLS0gbXVzdCBiZSBpbml0aWFsaXplZCB0byBvbmUuCisgICBvcHRhcmcgOiBnZXRvcHQuc3RyaW5nYTsKKworICAgbGVuZ3RoIDogSW50ZWdlcjsKKyAgIHRtcGkgOiBJbnRlZ2VyOworCisgICBwYWNrYWdlIG15aW8gaXMgbmV3IEFkYS5UZXh0X0lPLkludGVnZXJfSU8gKEludGVnZXIpOworICAgdXNlIG15aW87CisKKyAgIHNhdmVfdHJhY2UgOiBJbnRlZ2VyIDo9IDA7CisgICBzYXZlX3RyYWNlX3NldCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CisKKyAgIGZ1bmN0aW9uIG1haW4gcmV0dXJuIEludGVnZXIgaXMKKyAgIGJlZ2luCisgICAgICBsb29wCisgICAgICAgICBRZ2V0b3B0IChjLCBBcmd1bWVudF9Db3VudCwgQXJndW1lbnQnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgImE6ZGU6ZmhzOnQ6Iiwgb3B0aW5kLCBvcHRhcmcpOworICAgICAgICAgZXhpdCB3aGVuIGMgPSAtMTsKKyAgICAgICAgIGMyIDo9IENoYXJhY3RlcidWYWwgKGMpOworICAgICAgICAgY2FzZSBjMiBpcworICAgICAgICAgICAgd2hlbiAnYScgPT4KKyAgICAgICAgICAgICAgIC0tICBBZGEgZG9lc24ndCBoYXZlIHNjYW5mLCBpdCBkb2Vzbid0IGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAtLSAgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkuCisgICAgICAgICAgICAgICBhc3N1bWVkX2NvbG9ycyA6PSBUcnVlOworICAgICAgICAgICAgICAgbXlpby5HZXQgKG9wdGFyZy5hbGwsIEludGVnZXIgKGRlZmF1bHRfZmcpLCBsZW5ndGgpOworICAgICAgICAgICAgICAgbXlpby5HZXQgKG9wdGFyZy5hbGwgKGxlbmd0aCArIDIgLi4gb3B0YXJnLmFsbCdMZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgKGRlZmF1bHRfYmcpLCBsZW5ndGgpOworICAgICAgICAgICAgd2hlbiAnZCcgPT4KKyAgICAgICAgICAgICAgIGRlZmF1bHRfY29sb3JzIDo9IFRydWU7CisgICAgICAgICAgICB3aGVuICdlJyA9PgorICAgICAgICAgICAgICAgbXlpby5HZXQgKG9wdGFyZy5hbGwsIHRtcGksIGxlbmd0aCk7CisgICAgICAgICAgICAgICBpZiB0bXBpID4gMyB0aGVuCisgICAgICAgICAgICAgICAgICB1c2FnZTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgbXlfZV9wYXJhbSA6PSBTb2Z0X0xhYmVsX0tleV9Gb3JtYXQnVmFsICh0bXBpKTsKKyAgICAgICAgICAgIHdoZW4gJ2YnID0+CisgICAgICAgICAgICAgICBSaXBfT2ZmX0xpbmVzICgtMSwgcmlwX2Zvb3RlcidBY2Nlc3MpOworICAgICAgICAgICAgd2hlbiAnaCcgPT4KKyAgICAgICAgICAgICAgIFJpcF9PZmZfTGluZXMgKDEsIHJpcF9oZWFkZXInQWNjZXNzKTsKKyAgICAgICAgICAgIHdoZW4gJ3MnID0+CisgICAgICAgICAgICAgICBteWlvLkdldCAob3B0YXJnLmFsbCwgbmFwX21zZWMsIGxlbmd0aCk7CisgICAgICAgICAgICB3aGVuICd0JyA9PgorICAgICAgICAgICAgICAgbXlpby5HZXQgKG9wdGFyZy5hbGwsIHNhdmVfdHJhY2UsIGxlbmd0aCk7CisgICAgICAgICAgICB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgICAgdXNhZ2U7CisgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgIGVuZCBjYXNlOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIC0tICB0aGUgQyB2ZXJzaW9uIGhhZCBhIGJ1bmNoIG9mIG1hY3JvcyBoZXJlLgorCisgICAgICAtLSAgIGlmICghaXNhdHR5KGZpbGVubyhzdGRpbikpKQorICAgICAgLS0gICBpc2F0dHkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgc3RhbmRhcmQgQWRhIHNvIHNraXAgaXQuCisgICAgICBzYXZlX3RyYWNlX3NldCA6PSBUb190cmFjZSAoc2F2ZV90cmFjZSk7CisgICAgICBUcmFjZV9PbiAoc2F2ZV90cmFjZV9zZXQpOworCisgICAgICBJbml0X1NvZnRfTGFiZWxfS2V5cyAobXlfZV9wYXJhbSk7CisKKyAgICAgIEluaXRfU2NyZWVuOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IChDaCAgICA9PiBCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0KSk7CisKKyAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgU3RhcnRfQ29sb3I7CisgICAgICAgICBpZiBkZWZhdWx0X2NvbG9ycyB0aGVuCisgICAgICAgICAgICBVc2VfRGVmYXVsdF9Db2xvcnM7CisgICAgICAgICBlbHNpZiBhc3N1bWVkX2NvbG9ycyB0aGVuCisgICAgICAgICAgICBBc3N1bWVfRGVmYXVsdF9Db2xvcnMgKGRlZmF1bHRfZmcsIGRlZmF1bHRfYmcpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworCisgICAgICBTZXRfVGVybWluYWxfTW9kZXM7CisgICAgICBTYXZlX0N1cnNlc19Nb2RlIChDdXJzZXMpOworCisgICAgICBFbmRfV2luZG93czsKKworICAgICAgLS0gIFRPRE8gYWRkIG1hY3JvICNpZiBibG9ja3MuCisgICAgICBQdXRfTGluZSAoIldlbGNvbWUgdG8gIiAmIEN1cnNlc19WZXJzaW9uICYgIi4gIFByZXNzID8gZm9yIGhlbHAuIik7CisKKyAgICAgIGxvb3AKKyAgICAgICAgIFB1dF9MaW5lICgiVGhpcyBpcyB0aGUgbmN1cnNlcyBtYWluIG1lbnUiKTsKKyAgICAgICAgIFB1dF9MaW5lICgiYSA9IGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCB0ZXN0Iik7CisgICAgICAgICBQdXRfTGluZSAoImIgPSBjaGFyYWN0ZXIgYXR0cmlidXRlIHRlc3QiKTsKKyAgICAgICAgIFB1dF9MaW5lICgiYyA9IGNvbG9yIHRlc3QgcGF0dGVybiIpOworICAgICAgICAgUHV0X0xpbmUgKCJkID0gZWRpdCBSR0IgY29sb3IgdmFsdWVzIik7CisgICAgICAgICBQdXRfTGluZSAoImUgPSBleGVyY2lzZSBzb2Z0IGtleXMiKTsKKyAgICAgICAgIFB1dF9MaW5lICgiZiA9IGRpc3BsYXkgQUNTIGNoYXJhY3RlcnMiKTsKKyAgICAgICAgIFB1dF9MaW5lICgiZyA9IGRpc3BsYXkgd2luZG93cyBhbmQgc2Nyb2xsaW5nIik7CisgICAgICAgICBQdXRfTGluZSAoImkgPSB0ZXN0IG9mIGZsdXNoaW5wKCkiKTsKKyAgICAgICAgIFB1dF9MaW5lICgiayA9IGRpc3BsYXkgY2hhcmFjdGVyIGF0dHJpYnV0ZXMiKTsKKyAgICAgICAgIFB1dF9MaW5lICgibSA9IG1lbnUgY29kZSB0ZXN0Iik7CisgICAgICAgICBQdXRfTGluZSAoIm8gPSBleGVyY2lzZSBwYW5lbHMgbGlicmFyeSIpOworICAgICAgICAgUHV0X0xpbmUgKCJwID0gZXhlcmNpc2UgcGFkIGZlYXR1cmVzIik7CisgICAgICAgICBQdXRfTGluZSAoInEgPSBxdWl0Iik7CisgICAgICAgICBQdXRfTGluZSAoInIgPSBleGVyY2lzZSBmb3JtcyBjb2RlIik7CisgICAgICAgICBQdXRfTGluZSAoInMgPSBvdmVybGFwcGluZy1yZWZyZXNoIHRlc3QiKTsKKyAgICAgICAgIFB1dF9MaW5lICgidCA9IHNldCB0cmFjZSBsZXZlbCIpOworICAgICAgICAgUHV0X0xpbmUgKCI/ID0gcmVwZWF0IHRoaXMgY29tbWFuZCBzdW1tYXJ5Iik7CisKKyAgICAgICAgIFB1dCAoIj4gIik7CisgICAgICAgICBGbHVzaDsKKworICAgICAgICAgY29tbWFuZCA6PSBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xLk5VTDsKKyAgICAgICAgIC0tICAgICAgICAgICAgICBnZXRfaW5wdXQ6CisgICAgICAgICAtLSAgICAgICAgICAgICAgbG9vcAorICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgQ2ggOiBDaGFyYWN0ZXI7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgR2V0IChDaCk7CisgICAgICAgICAgICAtLSAgVE9ETyBpZiByZWFkKGNoKSA8PSAwCisgICAgICAgICAgICAtLSAgVE9ETyBhZGEgZG9lc24ndCBoYXZlIGFuIElzX1NwYWNlIGZ1bmN0aW9uCisgICAgICAgICAgICBjb21tYW5kIDo9IENoOworICAgICAgICAgICAgLS0gIFRPRE8gaWYgY2ggPSAnXG4nIG9yICdccicgYXJlIHRoZXNlIGluIEFkYT8KKyAgICAgICAgIGVuZDsKKyAgICAgICAgIC0tICAgICAgICAgICAgICBlbmQgbG9vcCBnZXRfaW5wdXQ7CisKKyAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiBEb19TaW5nbGVfVGVzdCAoY29tbWFuZCkgdGhlbgorICAgICAgICAgICAgICAgRmx1c2hfSW5wdXQ7CisgICAgICAgICAgICAgICBTZXRfVGVybWluYWxfTW9kZXM7CisgICAgICAgICAgICAgICBSZXNldF9DdXJzZXNfTW9kZSAoQ3Vyc2VzKTsKKyAgICAgICAgICAgICAgIENsZWFyOworICAgICAgICAgICAgICAgUmVmcmVzaDsKKyAgICAgICAgICAgICAgIEVuZF9XaW5kb3dzOworICAgICAgICAgICAgICAgaWYgY29tbWFuZCA9ICc/JyB0aGVuCisgICAgICAgICAgICAgICAgICBQdXRfTGluZSAoIlRoaXMgaXMgdGhlIG5jdXJzZXMgY2FwYWJpbGl0eSB0ZXN0ZXIuIik7CisgICAgICAgICAgICAgICAgICBQdXRfTGluZSAoIllvdSBtYXkgc2VsZWN0IGEgdGVzdCBmcm9tIHRoZSBtYWluIG1lbnUgYnkgIiAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGluZyB0aGUiKTsKKyAgICAgICAgICAgICAgICAgIFB1dF9MaW5lICgia2V5IGxldHRlciBvZiB0aGUgY2hvaWNlICh0aGUgbGV0dGVyIHRvIGxlZnQgIiAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mIHRoZSA9KSIpOworICAgICAgICAgICAgICAgICAgUHV0X0xpbmUgKCJhdCB0aGUgPiBwcm9tcHQuICBUaGUgY29tbWFuZHMgYHgnIG9yIGBxJyB3aWxsICIgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGl0LiIpOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgLS0gIGNvbnRpbnVlOyAtLXdoeSBjb250aW51ZSBpbiB0aGUgQyB2ZXJzaW9uPworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZXhjZXB0aW9uCisgICAgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gRW5kX1dpbmRvd3M7CisgICAgICAgICBlbmQ7CisKKyAgICAgICAgIGV4aXQgd2hlbiBjb21tYW5kID0gJ3EnOworICAgICAgZW5kIGxvb3A7CisgICAgICBDdXJzZXNfRnJlZV9BbGw7CisgICAgICByZXR1cm4gMDsgLS0gVE9ETyBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworICAgZW5kIG1haW47CisKK2VuZCBuY3Vyc2VzMi5tOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyZDg5NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbS5hZHMKQEAgLTAsMCArMSw0MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBuY3Vyc2VzMi5tIGlzCisgICBmdW5jdGlvbiBtYWluIHJldHVybiBJbnRlZ2VyOworZW5kIG5jdXJzZXMyLm07CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjNDgwNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkYgpAQCAtMCwwICsxLDE2OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS42ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsKKworcHJvY2VkdXJlIG5jdXJzZXMyLm1lbnVfdGVzdCBpcworICAgZnVuY3Rpb24gbWVudV92aXJ0dWFsaXplIChjIDogS2V5X0NvZGUpIHJldHVybiBNZW51X1JlcXVlc3RfQ29kZTsKKyAgIHByb2NlZHVyZSB4QWRkIChsIDogTGluZV9Qb3NpdGlvbjsgYyA6IENvbHVtbl9Qb3NpdGlvbjsgcyA6IFN0cmluZyk7CisKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGUgaXMKKyAgIGJlZ2luCisgICAgICBjYXNlIGMgaXMKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAobmV3bCkgfCBLZXlfRXhpdCA9PgorICAgICAgICAgICAgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlJ0xhc3QgKyAxOyAtLSAgTUFYX0NPTU1BTkQ/IFRPRE8KKyAgICAgICAgIHdoZW4gIENoYXJhY3RlcidQb3MgKCd1JykgID0+CisgICAgICAgICAgICByZXR1cm4gTV9TY3JvbGxVcF9MaW5lOworICAgICAgICAgd2hlbiAgQ2hhcmFjdGVyJ1BvcyAoJ2QnKSA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsRG93bl9MaW5lOworICAgICAgICAgd2hlbiAgQ2hhcmFjdGVyJ1BvcyAoJ2InKSB8ICBLZXlfTmV4dF9QYWdlID0+CisgICAgICAgICAgICByZXR1cm4gTV9TY3JvbGxVcF9QYWdlOworICAgICAgICAgd2hlbiAgQ2hhcmFjdGVyJ1BvcyAoJ2YnKSB8ICBLZXlfUHJldmlvdXNfUGFnZSA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsRG93bl9QYWdlOworICAgICAgICAgd2hlbiAgQ2hhcmFjdGVyJ1BvcyAoJ24nKSB8ICBLZXlfQ3Vyc29yX0Rvd24gPT4KKyAgICAgICAgICAgIHJldHVybiBNX05leHRfSXRlbTsKKyAgICAgICAgIHdoZW4gIENoYXJhY3RlcidQb3MgKCdwJykgfCAgS2V5X0N1cnNvcl9VcCA9PgorICAgICAgICAgICAgcmV0dXJuIE1fUHJldmlvdXNfSXRlbTsKKyAgICAgICAgIHdoZW4gIENoYXJhY3RlcidQb3MgKCcgJykgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1RvZ2dsZV9JdGVtOworICAgICAgICAgd2hlbiAgS2V5X01vdXNlID0+CisgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICBCZWVwOworICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICBlbmQgY2FzZTsKKyAgIGVuZCBtZW51X3ZpcnR1YWxpemU7CisKKyAgIE1FTlVfWSA6IGNvbnN0YW50IExpbmVfQ291bnQgOj0gODsKKyAgIE1FTlVfWCA6IGNvbnN0YW50IENvbHVtbl9Db3VudCA6PSA4OworCisgICB0eXBlIFN0cmluZ19BY2Nlc3MgaXMgYWNjZXNzIFN0cmluZzsKKworICAgYW5pbWFscyA6IGNvbnN0YW50IGFycmF5IChQb3NpdGl2ZSByYW5nZSA8Pikgb2YgU3RyaW5nX0FjY2VzcyA6PQorICAgICAobmV3IFN0cmluZycoIkxpb25zIiksCisgICAgICBuZXcgU3RyaW5nJygiVGlnZXJzIiksCisgICAgICBuZXcgU3RyaW5nJygiQmVhcnMiKSwKKyAgICAgIG5ldyBTdHJpbmcnKCIoT2ggbXkhKSIpLAorICAgICAgbmV3IFN0cmluZycoIk5ld3RzIiksCisgICAgICBuZXcgU3RyaW5nJygiUGxhdHlwaSIpLAorICAgICAgbmV3IFN0cmluZycoIkxlbXVycyIpKTsKKworICAgaXRlbXNfYSA6IGNvbnN0YW50IEl0ZW1fQXJyYXlfQWNjZXNzIDo9CisgICAgICBuZXcgSXRlbV9BcnJheSAoMSAuLiBhbmltYWxzJ0xhc3QgKyAxKTsKKworICAgdG1wIDogRXZlbnRfTWFzazsKKworICAgcHJvY2VkdXJlIHhBZGQgKGwgOiBMaW5lX1Bvc2l0aW9uOyBjIDogQ29sdW1uX1Bvc2l0aW9uOyBzIDogU3RyaW5nKSBpcworICAgYmVnaW4KKyAgICAgIEFkZCAoTGluZSA9PiBsLCBDb2x1bW4gPT4gYywgU3RyID0+IHMpOworICAgZW5kIHhBZGQ7CisKKyAgIG1yb3dzIDogTGluZV9Db3VudDsKKyAgIG1jb2xzIDogQ29sdW1uX0NvdW50OworCisgICBtZW51d2luIDogV2luZG93OworCisgICBtIDogTWVudTsKKworICAgYzEgOiBLZXlfQ29kZTsKKworICAgYyA6IERyaXZlcl9SZXN1bHQ7CisgICByIDogTWVudV9SZXF1ZXN0X0NvZGU7CitiZWdpbgorICAgdG1wIDo9IFN0YXJ0X01vdXNlOworICAgeEFkZCAoMCwgMCwgIlRoaXMgaXMgdGhlIG1lbnUgdGVzdDoiKTsKKyAgIHhBZGQgKDIsIDAsICIgIFVzZSB1cCBhbmQgZG93biBhcnJvdyB0byBtb3ZlIHRoZSBzZWxlY3QgYmFyLiIpOworICAgeEFkZCAoMywgMCwgIiAgJ24nIGFuZCAncCcgYWN0IGxpa2UgYXJyb3dzLiIpOworICAgeEFkZCAoNCwgMCwgIiAgJ2InIGFuZCAnZicgc2Nyb2xsIHVwL2Rvd24gKHBhZ2UpLCAndScgYW5kICdkJyAobGluZSkuIik7CisgICB4QWRkICg1LCAwLCAiICBQcmVzcyByZXR1cm4gdG8gZXhpdC4iKTsKKyAgIFJlZnJlc2g7CisKKyAgIGZvciBpIGluIGFuaW1hbHMnUmFuZ2UgbG9vcAorICAgICAgaXRlbXNfYSAoaSkgOj0gTmV3X0l0ZW0gKGFuaW1hbHMgKGkpLmFsbCk7CisgICBlbmQgbG9vcDsKKyAgIGl0ZW1zX2EgKGFuaW1hbHMnTGFzdCArIDEpIDo9IE51bGxfSXRlbTsKKworICAgbSA6PSBOZXdfTWVudSAoaXRlbXNfYSk7CisKKyAgIFNldF9Gb3JtYXQgKG0sIExpbmVfUG9zaXRpb24gKGFuaW1hbHMnTGFzdCArIDEpIC8gMiwgMSk7CisgICBTY2FsZSAobSwgbXJvd3MsIG1jb2xzKTsKKworICAgbWVudXdpbiA6PSBDcmVhdGUgKG1yb3dzICsgMiwgbWNvbHMgKyAyLCBNRU5VX1ksIE1FTlVfWCk7CisgICBTZXRfV2luZG93IChtLCBtZW51d2luKTsKKyAgIFNldF9LZXlQYWRfTW9kZSAobWVudXdpbiwgVHJ1ZSk7CisgICBCb3ggKG1lbnV3aW4pOyAtLSAwLDA/CisKKyAgIFNldF9TdWJfV2luZG93IChtLCBEZXJpdmVkX1dpbmRvdyAobWVudXdpbiwgbXJvd3MsIG1jb2xzLCAxLCAxKSk7CisKKyAgIFBvc3QgKG0pOworCisgICBsb29wCisgICAgICBjMSA6PSBHZXRjaGFyIChtZW51d2luKTsKKyAgICAgIHIgOj0gbWVudV92aXJ0dWFsaXplIChjMSk7CisgICAgICBjIDo9IERyaXZlciAobSwgcik7CisgICAgICBleGl0IHdoZW4gYyA9IFVua25vd25fUmVxdWVzdDsgLS0gRV9VTktOT1dOX0NPTU1BTkQ/CisgICAgICBpZiBjID0gUmVxdWVzdF9EZW5pZWQgdGhlbgorICAgICAgICAgQmVlcDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIC0tICBjb250aW51ZSA/CisgICBlbmQgbG9vcDsKKworICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSAyLCBDb2x1bW4gPT4gMCk7CisgICBBZGQgKFN0ciA9PiAiWW91IGNob3NlOiAiKTsKKyAgIEFkZCAoU3RyID0+IE5hbWUgKEN1cnJlbnQgKG0pKSk7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgUGF1c2U7IC0tIHRoZSBDIHZlcnNpb24gZGlkbid0IHVzZSBQYXVzZSwgaXQgc3BlbGxlZCBpdCBvdXQKKworICAgUG9zdCAobSwgRmFsc2UpOyAtLSAgdW5wb3N0LCBub3QgY2xlYXIgOi0oCisgICBkZWNsYXJlIGJlZ2luCisgICAgICBEZWxldGUgKG1lbnV3aW4pOworICAgZXhjZXB0aW9uIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOyBlbmQ7CisgICAtLSAgbWVudXdpbiBoYXMgY2hpbGRyZW4gc28gd2lsbCByYWlzZSB0aGUgZXhjZXB0aW9uLgorCisgICBEZWxldGUgKG0pOworCisgICBFbmRfTW91c2UgKHRtcCk7CitlbmQgbmN1cnNlczIubWVudV90ZXN0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTViMTYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLm1lbnVfdGVzdDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U4ZDRjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRiCkBAIC0wLDAgKzEsMTU3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjQgJAorLS0gICREYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKKy0tICB0ZXN0IGVmZmVjdHMgb2Ygb3ZlcmxhcHBpbmcgd2luZG93cworCitwcm9jZWR1cmUgbmN1cnNlczIub3ZlcmxhcF90ZXN0IGlzCisKKyAgIHByb2NlZHVyZSBmaWxsd2luICh3aW4gOiBXaW5kb3c7IGNoIDogQ2hhcmFjdGVyKTsKKyAgIHByb2NlZHVyZSBjcm9zc3dpbiAod2luIDogV2luZG93OyBjaCA6IENoYXJhY3Rlcik7CisKKyAgIHByb2NlZHVyZSBmaWxsd2luICh3aW4gOiBXaW5kb3c7IGNoIDogQ2hhcmFjdGVyKSBpcworICAgICAgeTEgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgeDEgOiBDb2x1bW5fUG9zaXRpb247CisgICBiZWdpbgorICAgICAgR2V0X1NpemUgKHdpbiwgeTEsIHgxKTsKKyAgICAgIGZvciB5IGluIDAgLi4geTEgLSAxIGxvb3AKKyAgICAgICAgIE1vdmVfQ3Vyc29yICh3aW4sIHksIDApOworICAgICAgICAgZm9yIHggaW4gMCAuLiB4MSAtIDEgbG9vcAorICAgICAgICAgICAgQWRkICh3aW4sIENoID0+IGNoKTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGxvb3A7CisgICBleGNlcHRpb24KKyAgICAgIHdoZW4gQ3Vyc2VzX0V4Y2VwdGlvbiA9PiBudWxsOworICAgICAgICAgLS0gIHdyaXRlIHRvIGxvd2VyIHJpZ2h0IGNvcm5lcgorICAgZW5kIGZpbGx3aW47CisKKyAgIHByb2NlZHVyZSBjcm9zc3dpbiAod2luIDogV2luZG93OyBjaCA6IENoYXJhY3RlcikgaXMKKyAgICAgIHkxIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIHgxIDogQ29sdW1uX1Bvc2l0aW9uOworICAgYmVnaW4KKyAgICAgIEdldF9TaXplICh3aW4sIHkxLCB4MSk7CisgICAgICBmb3IgeSBpbiAwIC4uIHkxIC0gMSBsb29wCisgICAgICAgICBmb3IgeCBpbiAwIC4uIHgxIC0gMSBsb29wCisgICAgICAgICAgICBpZiAoKHggPiAoeDEgLSAxKSAvIDMpIGFuZCAoeCA8PSAoMiAqICh4MSAtIDEpKSAvIDMpKQorICAgICAgICAgICAgICAgIG9yICgoKHkgPiAoeTEgLSAxKSAvIDMpIGFuZCAoeSA8PSAoMiAqICh5MSAtIDEpKSAvIDMpKSkgdGhlbgorICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKHdpbiwgeSwgeCk7CisgICAgICAgICAgICAgICBBZGQgKHdpbiwgQ2ggPT4gY2gpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICBlbmQgbG9vcDsKKyAgIGVuZCBjcm9zc3dpbjsKKworICAgLS0gIEluIGEgMjR4ODAgc2NyZWVuIGxpa2Ugc29tZSB4dGVybXMgYXJlLCB0aGUgaW5zdHJ1Y3Rpb25zIHdpbGwKKyAgIC0tICBiZSBvdmVyd3JpdHRlbi4KKyAgIGNoIDogQ2hhcmFjdGVyOworICAgd2luMSA6IFdpbmRvdyA6PSBOZXdfV2luZG93ICg5LCAyMCwgMywgMyk7CisgICB3aW4yIDogV2luZG93IDo9IE5ld19XaW5kb3cgKDksIDIwLCA5LCAxNik7CitiZWdpbgorICAgU2V0X1Jhd19Nb2RlIChTd2l0Y2hPbiA9PiBUcnVlKTsKKyAgIFJlZnJlc2g7CisgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAwLCBDb2x1bW4gPT4gMCk7CisgICBBZGQgKFN0ciA9PiAiVGhpcyB0ZXN0IHNob3dzIHRoZSBiZWhhdmlvciBvZiB3bm91dHJlZnJlc2goKSB3aXRoICIgJgorICAgICAgICAicmVzcGVjdCB0byIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJ0aGUgc2hhcmVkIHJlZ2lvbiBvZiB0d28gb3ZlcmxhcHBpbmcgd2luZG93cyBBIGFuZCBCLiAiJgorICAgICAgICAiVGhlIGNyb3NzIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gInBhdHRlcm4gaW4gZWFjaCB3aW5kb3cgZG9lcyBub3Qgb3ZlcmxhcCB0aGUgb3RoZXIuIik7CisgICBBZGQgKENoID0+IG5ld2wpOworCisgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAxOCwgQ29sdW1uID0+IDApOworICAgQWRkIChTdHIgPT4gImEgPSByZWZyZXNoIEEsIHRoZW4gQiwgdGhlbiBkb3VwZGF0ZS4gYiA9IHJlZnJlc2ggQiwgIiAmCisgICAgICAgICJ0aGVuIEEsIHRoZW4gZG91cGRhdXRlIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gImMgPSBmaWxsIHdpbmRvdyBBIHdpdGggbGV0dGVyIEEuICAgICAgZCA9IGZpbGwgd2luZG93IEIgIiAmCisgICAgICAgICJ3aXRoIGxldHRlciBCLiIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJlID0gY3Jvc3MgcGF0dGVybiBpbiB3aW5kb3cgQS4gICAgICAgIGYgPSBjcm9zcyBwYXR0ZXJuICIgJgorICAgICAgICAiaW4gd2luZG93IEIuIik7CisgICBBZGQgKENoID0+IG5ld2wpOworICAgQWRkIChTdHIgPT4gImcgPSBjbGVhciB3aW5kb3cgQS4gICAgICAgICAgICAgICAgICAgaCA9IGNsZWFyIHdpbmRvdyBCLiIpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIEFkZCAoU3RyID0+ICJpID0gb3ZlcndyaXRlIEEgb250byBCLiAgICAgICAgICAgICAgIGogPSBvdmVyd3JpdGUgIiAmCisgICAgICAgICJCIG9udG8gQS4iKTsKKyAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICBBZGQgKFN0ciA9PiAiXlEvRVNDID0gdGVybWluYXRlIHRlc3QuIik7CisKKyAgIGxvb3AKKyAgICAgIGNoIDo9IENvZGVfVG9fQ2hhciAoR2V0Y2hhcik7CisgICAgICBleGl0IHdoZW4gY2ggPSBDVFJMICgnUScpIG9yIGNoID0gQ1RSTCAoJ1snKTsgLS0gIFFVSVQgb3IgRVNDQVBFCisgICAgICBjYXNlIGNoIGlzCisgICAgICAgICB3aGVuICdhJyA9PiAtLSAgcmVmcmVzaCB3aW5kb3cgQSBmaXJzdCwgdGhlbiBCCisgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlICh3aW4xKTsKKyAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKHdpbjIpOworICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKKyAgICAgICAgIHdoZW4gJ2InID0+IC0tICByZWZyZXNoIHdpbmRvdyBCIGZpcnN0LCB0aGVuIEEKKyAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKHdpbjIpOworICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAod2luMSk7CisgICAgICAgICAgICBVcGRhdGVfU2NyZWVuOworICAgICAgICAgd2hlbiAnYycgPT4gLS0gIGZpbGwgd2luZG93IEEgc28gaXQncyB2aXNpYmxlCisgICAgICAgICAgICBmaWxsd2luICh3aW4xLCAnQScpOworICAgICAgICAgd2hlbiAnZCcgPT4gLS0gIGZpbGwgd2luZG93IEIgc28gaXQncyB2aXNpYmxlCisgICAgICAgICAgICBmaWxsd2luICh3aW4yLCAnQicpOworICAgICAgICAgd2hlbiAnZScgPT4gLS0gIGNyb3NzIHRlc3QgcGF0dGVybiBpbiB3aW5kb3cgQQorICAgICAgICAgICAgY3Jvc3N3aW4gKHdpbjEsICdBJyk7CisgICAgICAgICB3aGVuICdmJyA9PiAtLSAgY3Jvc3MgdGVzdCBwYXR0ZXJuIGluIHdpbmRvdyBCCisgICAgICAgICAgICBjcm9zc3dpbiAod2luMiwgJ0InKTsKKyAgICAgICAgIHdoZW4gJ2cnID0+IC0tICBjbGVhciB3aW5kb3cgQQorICAgICAgICAgICAgQ2xlYXIgKHdpbjEpOworICAgICAgICAgICAgTW92ZV9DdXJzb3IgKHdpbjEsIDAsIDApOworICAgICAgICAgd2hlbiAnaCcgPT4gLS0gIGNsZWFyIHdpbmRvdyBCCisgICAgICAgICAgICBDbGVhciAod2luMik7CisgICAgICAgICAgICBNb3ZlX0N1cnNvciAod2luMiwgMCwgMCk7CisgICAgICAgICB3aGVuICdpJyA9PiAtLSAgb3ZlcndyaXRlIEEgb250byBCCisgICAgICAgICAgICBPdmVyd3JpdGUgKHdpbjEsIHdpbjIpOworICAgICAgICAgd2hlbiAnaicgPT4gLS0gIG92ZXJ3cml0ZSBCIG9udG8gQQorICAgICAgICAgICAgT3ZlcndyaXRlICh3aW4yLCB3aW4xKTsKKyAgICAgICAgIHdoZW4gb3RoZXJzID0+IG51bGw7CisgICAgICBlbmQgY2FzZTsKKyAgIGVuZCBsb29wOworCisgICBEZWxldGUgKHdpbjIpOworICAgRGVsZXRlICh3aW4xKTsKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CitlbmQgbmN1cnNlczIub3ZlcmxhcF90ZXN0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmUzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW92ZXJsYXBfdGVzdC5hZHMKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIG5jdXJzZXMyLm92ZXJsYXBfdGVzdDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItc2xrX3Rlc3QuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1zbGtfdGVzdC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmZWU0ZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItc2xrX3Rlc3QuYWRiCkBAIC0wLDAgKzEsMTc0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjcgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CisKK3dpdGggQWRhLlN0cmluZ3MuVW5ib3VuZGVkOword2l0aCBJbnRlcmZhY2VzLkM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwcm9jZWR1cmUgbmN1cnNlczIuc2xrX3Rlc3QgaXMKKyAgIHByb2NlZHVyZSBteUdldCAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuVW5ib3VuZGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpOworCisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLlVuYm91bmRlZF9TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKQorICAgaXMKKyAgICAgIHVzZSBBZGEuU3RyaW5ncy5VbmJvdW5kZWQ7CisgICAgICB1c2UgSW50ZXJmYWNlcy5DOworICAgICAgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCisgICAgICBmdW5jdGlvbiBXZ2V0bnN0ciAoV2luIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgTGVuIDogaW50KSByZXR1cm4gaW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgV2dldG5zdHIsICJ3Z2V0bnN0ciIpOworCisgICAgICAtLSAgRklYTUU6IGhvdyB0byBjb25zdHJ1Y3QgIihMZW4gPiAwKSA/IExlbiA6IDgwIj8KKyAgICAgIEFzayA6IGNvbnN0YW50IEludGVyZmFjZXMuQy5zaXplX3QgOj0gSW50ZXJmYWNlcy5DLnNpemVfdCdWYWwgKExlbiArIDgwKTsKKyAgICAgIFR4dCA6IGNoYXJfYXJyYXkgKDAgLi4gQXNrKTsKKworICAgYmVnaW4KKyAgICAgIFR4dCAoMCkgOj0gSW50ZXJmYWNlcy5DLmNoYXInRmlyc3Q7CisgICAgICBpZiBXZ2V0bnN0ciAoV2luLCBUeHQsIFR4dCdMZW5ndGgpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgU3RyIDo9IFRvX1VuYm91bmRlZF9TdHJpbmcgKFRvX0FkYSAoVHh0LCBUcnVlKSk7CisgICBlbmQgbXlHZXQ7CisKKyAgIHVzZSBJbnRfSU87CisKKyAgIHVzZSBBZGEuU3RyaW5ncy5VbmJvdW5kZWQ7CisKKyAgIGMgOiBLZXlfQ29kZTsKKyAgIGJ1ZiA6IFVuYm91bmRlZF9TdHJpbmc7CisgICBjMiA6IENoYXJhY3RlcjsKKyAgIGZtdCA6IExhYmVsX0p1c3RpZmljYXRpb24gOj0gQ2VudGVyZWQ7CisgICB0bXAgOiBJbnRlZ2VyOworCitiZWdpbgorICAgYyA6PSBDVFJMICgnbCcpOworICAgbG9vcAorICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMCwgQ29sdW1uID0+IDApOworICAgICAgYzIgOj0gQ29kZV9Ub19DaGFyIChjKTsKKyAgICAgIGNhc2UgYzIgaXMKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1ZhbCAoQ2hhcmFjdGVyJ1BvcyAoJ2wnKSBtb2QgMTYjMjAjKSA9PiAtLSAgQ1RSTCgnbCcpCisgICAgICAgICAgICBFcmFzZTsKKyAgICAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgICAgICAgQWRkIChMaW5lID0+IDAsIENvbHVtbiA9PiAyMCwKKyAgICAgICAgICAgICAgICAgU3RyID0+ICJTb2Z0IEtleSBFeGVyY2lzZXIiKTsKKyAgICAgICAgICAgIFN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlIChPbiA9PiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyID0+IChCb2xkX0NoYXJhY3RlciA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworCisgICAgICAgICAgICBNb3ZlX0N1cnNvciAoTGluZSA9PiAyLCBDb2x1bW4gPT4gMCk7CisgICAgICAgICAgICBQICgiQXZhaWxhYmxlIGNvbW1hbmRzIGFyZToiKTsKKyAgICAgICAgICAgIFAgKCIiKTsKKyAgICAgICAgICAgIFAgKCJeTCAgICAgICAgIC0tIHJlZnJlc2ggc2NyZWVuIik7CisgICAgICAgICAgICBQICgiYSAgICAgICAgICAtLSBhY3RpdmF0ZSBvciByZXN0b3JlIHNvZnQga2V5cyIpOworICAgICAgICAgICAgUCAoImQgICAgICAgICAgLS0gZGlzYWJsZSBzb2Z0IGtleXMiKTsKKyAgICAgICAgICAgIFAgKCJjICAgICAgICAgIC0tIHNldCBjZW50ZXJlZCBmb3JtYXQgZm9yIGxhYmVscyIpOworICAgICAgICAgICAgUCAoImwgICAgICAgICAgLS0gc2V0IGxlZnQtanVzdGlmaWVkIGZvcm1hdCBmb3IgbGFiZWxzIik7CisgICAgICAgICAgICBQICgiciAgICAgICAgICAtLSBzZXQgcmlnaHQtanVzdGlmaWVkIGZvcm1hdCBmb3IgbGFiZWxzIik7CisgICAgICAgICAgICBQICgiWzEyMzQ1Njc4XSAtLSBzZXQgbGFiZWw7IGxhYmVscyBhcmUgbnVtYmVyZWQgMSB0aHJvdWdoIDgiKTsKKyAgICAgICAgICAgIFAgKCJlICAgICAgICAgIC0tIGVyYXNlIHN0ZHNjciAoc2hvdWxkIG5vdCBlcmFzZSBsYWJlbHMpIik7CisgICAgICAgICAgICBQICgicyAgICAgICAgICAtLSB0ZXN0IHNjcm9sbGluZyBvZiBzaG9ydGVuZWQgc2NyZWVuIik7CisgICAgICAgICAgICBQICgieCwgcSAgICAgICAtLSByZXR1cm4gdG8gbWFpbiBtZW51Iik7CisgICAgICAgICAgICBQICgiIik7CisgICAgICAgICAgICBQICgiTm90ZTogaWYgYWN0aXZhdGluZyB0aGUgc29mdCBrZXlzIGNhdXNlcyB5b3VyIHRlcm1pbmFsIHRvIik7CisgICAgICAgICAgICBQICgic2Nyb2xsIHVwIG9uZSBsaW5lLCB5b3VyIHRlcm1pbmFsIGF1dG8tc2Nyb2xscyB3aGVuIGFueXRoaW5nIik7CisgICAgICAgICAgICBQICgiaXMgd3JpdHRlbiB0byB0aGUgbGFzdCBzY3JlZW4gcG9zaXRpb24uICBUaGUgbmN1cnNlcyBjb2RlIik7CisgICAgICAgICAgICBQICgiZG9lcyBub3QgeWV0IGhhbmRsZSB0aGlzIGdyYWNlZnVsbHkuIik7CisgICAgICAgICAgICBSZWZyZXNoOworICAgICAgICAgICAgUmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM7CisKKyAgICAgICAgIHdoZW4gJ2EnID0+CisgICAgICAgICAgICBSZXN0b3JlX1NvZnRfTGFiZWxfS2V5czsKKyAgICAgICAgIHdoZW4gJ2UnID0+CisgICAgICAgICAgICBDbGVhcjsKKyAgICAgICAgIHdoZW4gJ3MnID0+CisgICAgICAgICAgICBBZGQgKExpbmUgPT4gMjAsIENvbHVtbiA9PiAwLAorICAgICAgICAgICAgICAgIFN0ciA9PiAiUHJlc3MgUSB0byBzdG9wIHRoZSBzY3JvbGxpbmctdGVzdDogIik7CisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICBjIDo9IEdldGNoYXI7CisgICAgICAgICAgICAgICBjMiA6PSBDb2RlX1RvX0NoYXIgKGMpOworICAgICAgICAgICAgICAgZXhpdCB3aGVuIGMyID0gJ1EnOworICAgICAgICAgICAgICAgLS0gIGMgPSBFUlI/CisgICAgICAgICAgICAgICAtLSAgVE9ETyB3aGVuIGMgaXMgbm90IGEgY2hhcmFjdGVyIChhcnJvdyBrZXkpCisgICAgICAgICAgICAgICAtLSAgdGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBDIHZlcnNpb24uCisgICAgICAgICAgICAgICBBZGQgKENoID0+IGMyKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgd2hlbiAnZCcgPT4KKyAgICAgICAgICAgIENsZWFyX1NvZnRfTGFiZWxfS2V5czsKKyAgICAgICAgIHdoZW4gJ2wnID0+CisgICAgICAgICAgICBmbXQgOj0gTGVmdDsKKyAgICAgICAgIHdoZW4gJ2MnID0+CisgICAgICAgICAgICBmbXQgOj0gQ2VudGVyZWQ7CisgICAgICAgICB3aGVuICdyJyA9PgorICAgICAgICAgICAgZm10IDo9IFJpZ2h0OworICAgICAgICAgd2hlbiAnMScgfCAnMicgfCAnMycgfCAnNCcgfCAnNScgfCAnNicgfCAnNycgfCAnOCcgID0+CisgICAgICAgICAgICBBZGQgKExpbmUgPT4gMjAsIENvbHVtbiA9PiAwLAorICAgICAgICAgICAgICAgICBTdHIgPT4gIlBsZWFzZSBlbnRlciB0aGUgbGFiZWwgdmFsdWU6ICIpOworICAgICAgICAgICAgU2V0X0VjaG9fTW9kZSAoU3dpdGNoT24gPT4gVHJ1ZSk7CisgICAgICAgICAgICBteUdldCAoU3RyID0+IGJ1Zik7CisgICAgICAgICAgICBTZXRfRWNob19Nb2RlIChTd2l0Y2hPbiA9PiBGYWxzZSk7CisgICAgICAgICAgICB0bXAgOj0gY3RvaSAoYzIpOworICAgICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5IChMYWJlbF9OdW1iZXIgKHRtcCksIFRvX1N0cmluZyAoYnVmKSwgZm10KTsKKyAgICAgICAgICAgIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzOworICAgICAgICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMjAsIENvbHVtbiA9PiAwKTsKKyAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOworICAgICAgICAgd2hlbiAneCcgfCAncScgPT4KKyAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICAtLSAgdGhlIEMgdmVyc2lvbiBuZWVkZWQgYSBnb3RvLCBoYSBoYQorICAgICAgICAgICAgLS0gIGJyZWFrcyBleGl0IHRoZSBjYXNlIG5vdCB0aGUgbG9vcCBiZWNhdXNlIGZhbGwtdGhyb3VoCisgICAgICAgICAgICAtLSAgaGFwcGVucyBpbiBDIQorICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIEJlZXA7CisgICAgICBlbmQgY2FzZTsKKyAgICAgIGMgOj0gR2V0Y2hhcjsKKyAgICAgIC0tICBUT0RPIGV4aXQgd2hlbiBjID0gRU9GCisgICBlbmQgbG9vcDsKKyAgIEVyYXNlOworICAgRW5kX1dpbmRvd3M7CitlbmQgbmN1cnNlczIuc2xrX3Rlc3Q7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItc2xrX3Rlc3QuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTk1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIuc2xrX3Rlc3Q7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRlc3Rfc2dyX2F0dHJpYnV0ZXMuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ0OWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLmFkYgpAQCAtMCwwICsxLDE4NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4yICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOworCistLSAgR3JhcGhpYy1yZW5kaXRpb24gdGVzdCAoYWRhcHRlZCBmcm9tIHZ0dGVzdCkKKworcHJvY2VkdXJlIG5jdXJzZXMyLnRlc3Rfc2dyX2F0dHJpYnV0ZXMgaXMKKworICAgcHJvY2VkdXJlIHhBZGQgKGwgOiBMaW5lX1Bvc2l0aW9uOyBjIDogQ29sdW1uX1Bvc2l0aW9uOyBzIDogU3RyaW5nKTsKKworICAgcHJvY2VkdXJlIHhBZGQgKGwgOiBMaW5lX1Bvc2l0aW9uOyBjIDogQ29sdW1uX1Bvc2l0aW9uOyBzIDogU3RyaW5nKSBpcworICAgYmVnaW4KKyAgICAgIEFkZCAoTGluZSA9PiBsLCBDb2x1bW4gPT4gYywgU3RyID0+IHMpOworICAgZW5kIHhBZGQ7CisKKyAgIG5vcm1hbCwgY3VycmVudCA6IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyOworYmVnaW4KKyAgIGZvciBwYXNzIGluIHJldmVyc2UgQm9vbGVhbiBsb29wCisgICAgICBpZiBwYXNzIHRoZW4KKyAgICAgICAgIG5vcm1hbCA6PSAoQ2ggPT4gJyAnLCBBdHRyID0+IE5vcm1hbF9WaWRlbywgQ29sb3IgPT4gMCk7CisgICAgICBlbHNlCisgICAgICAgICBub3JtYWwgOj0gKENoID0+ICcgJywgQXR0ciA9PgorICAgICAgICAgICAgICAgICAgICAgIChSZXZlcnNlX1ZpZGVvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSksIENvbG9yID0+IDApOworICAgICAgZW5kIGlmOworCisgICAgICAtLSAgVXNlIG5vbi1kZWZhdWx0IGNvbG9ycyBpZiBwb3NzaWJsZSB0byBleGVyY2lzZSBiY2UgYSBsaXR0bGUKKyAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgSW5pdF9QYWlyICgxLCBXaGl0ZSwgQmx1ZSk7CisgICAgICAgICBub3JtYWwuQ29sb3IgOj0gMTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBub3JtYWwpOworICAgICAgRXJhc2U7CisgICAgICB4QWRkICgxLCAyMCwgIkdyYXBoaWMgcmVuZGl0aW9uIHRlc3QgcGF0dGVybjoiKTsKKworICAgICAgeEFkZCAoNCwgMSwgInZhbmlsbGEiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXIgOj0gbm90IGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlcjsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDQsIDQwLCAiYm9sZCIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lIDo9IG5vdCBjdXJyZW50LkF0dHIuVW5kZXJfTGluZTsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDYsIDYsICJ1bmRlcmxpbmUiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXIgIDo9IG5vdCBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXI7CisgICAgICBjdXJyZW50LkF0dHIuVW5kZXJfTGluZSA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICg2LCA0NSwgImJvbGQgdW5kZXJsaW5lIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJsaW5rIDo9IG5vdCBjdXJyZW50LkF0dHIuQmxpbms7CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICg4LCAxLCAiYmxpbmsiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuQmxpbmsgIDo9IG5vdCBjdXJyZW50LkF0dHIuQmxpbms7CisgICAgICBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXIgOj0gbm90IGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlcjsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDgsIDQwLCAiYm9sZCBibGluayIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lICA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBjdXJyZW50LkF0dHIuQmxpbmsgOj0gbm90IGN1cnJlbnQuQXR0ci5CbGluazsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDEwLCA2LCAidW5kZXJsaW5lIGJsaW5rIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyICA6PSBub3QgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyOworICAgICAgY3VycmVudC5BdHRyLlVuZGVyX0xpbmUgIDo9IG5vdCBjdXJyZW50LkF0dHIuVW5kZXJfTGluZTsKKyAgICAgIGN1cnJlbnQuQXR0ci5CbGluayA6PSBub3QgY3VycmVudC5BdHRyLkJsaW5rOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoMTAsIDQ1LCAiYm9sZCB1bmRlcmxpbmUgYmxpbmsiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbyA6PSBub3QgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW87CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxMiwgMSwgIm5lZ2F0aXZlIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyICA6PSBub3QgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyOworICAgICAgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW8gOj0gbm90IGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvOworICAgICAgU2V0X0JhY2tncm91bmQgKENoID0+IGN1cnJlbnQpOworICAgICAgeEFkZCAoMTIsIDQwLCAiYm9sZCBuZWdhdGl2ZSIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lICA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbyA6PSBub3QgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW87CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxNCwgNiwgInVuZGVybGluZSBuZWdhdGl2ZSIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlciAgOj0gbm90IGN1cnJlbnQuQXR0ci5Cb2xkX0NoYXJhY3RlcjsKKyAgICAgIGN1cnJlbnQuQXR0ci5VbmRlcl9MaW5lICA6PSBub3QgY3VycmVudC5BdHRyLlVuZGVyX0xpbmU7CisgICAgICBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbyA6PSBub3QgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW87CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxNCwgNDUsICJib2xkIHVuZGVybGluZSBuZWdhdGl2ZSIpOworCisgICAgICBjdXJyZW50IDo9IG5vcm1hbDsKKyAgICAgIGN1cnJlbnQuQXR0ci5CbGluayAgOj0gbm90IGN1cnJlbnQuQXR0ci5CbGluazsKKyAgICAgIGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvIDo9IG5vdCBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbzsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDE2LCAxLCAiYmxpbmsgbmVnYXRpdmUiKTsKKworICAgICAgY3VycmVudCA6PSBub3JtYWw7CisgICAgICBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXIgIDo9IG5vdCBjdXJyZW50LkF0dHIuQm9sZF9DaGFyYWN0ZXI7CisgICAgICBjdXJyZW50LkF0dHIuQmxpbmsgIDo9IG5vdCBjdXJyZW50LkF0dHIuQmxpbms7CisgICAgICBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbyA6PSBub3QgY3VycmVudC5BdHRyLlJldmVyc2VfVmlkZW87CisgICAgICBTZXRfQmFja2dyb3VuZCAoQ2ggPT4gY3VycmVudCk7CisgICAgICB4QWRkICgxNiwgNDAsICJib2xkIGJsaW5rIG5lZ2F0aXZlIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLlVuZGVyX0xpbmUgIDo9IG5vdCBjdXJyZW50LkF0dHIuVW5kZXJfTGluZTsKKyAgICAgIGN1cnJlbnQuQXR0ci5CbGluayAgOj0gbm90IGN1cnJlbnQuQXR0ci5CbGluazsKKyAgICAgIGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvIDo9IG5vdCBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbzsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDE4LCA2LCAidW5kZXJsaW5lIGJsaW5rIG5lZ2F0aXZlIik7CisKKyAgICAgIGN1cnJlbnQgOj0gbm9ybWFsOworICAgICAgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyICA6PSBub3QgY3VycmVudC5BdHRyLkJvbGRfQ2hhcmFjdGVyOworICAgICAgY3VycmVudC5BdHRyLlVuZGVyX0xpbmUgIDo9IG5vdCBjdXJyZW50LkF0dHIuVW5kZXJfTGluZTsKKyAgICAgIGN1cnJlbnQuQXR0ci5CbGluayAgOj0gbm90IGN1cnJlbnQuQXR0ci5CbGluazsKKyAgICAgIGN1cnJlbnQuQXR0ci5SZXZlcnNlX1ZpZGVvIDo9IG5vdCBjdXJyZW50LkF0dHIuUmV2ZXJzZV9WaWRlbzsKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBjdXJyZW50KTsKKyAgICAgIHhBZGQgKDE4LCA0NSwgImJvbGQgdW5kZXJsaW5lIGJsaW5rIG5lZ2F0aXZlIik7CisKKyAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBub3JtYWwpOworICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSAyLCBDb2x1bW4gPT4gMSk7CisgICAgICBpZiBwYXNzIHRoZW4KKyAgICAgICAgIEFkZCAoU3RyID0+ICJEYXJrIik7CisgICAgICBlbHNlCisgICAgICAgICBBZGQgKFN0ciA9PiAiTGlnaHQiKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEFkZCAoU3RyID0+ICIgYmFja2dyb3VuZC4gIik7CisgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZTsKKyAgICAgIFBhdXNlOworICAgZW5kIGxvb3A7CisKKyAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiBCbGFuazIpOworICAgRXJhc2U7CisgICBFbmRfV2luZG93czsKKworZW5kIG5jdXJzZXMyLnRlc3Rfc2dyX2F0dHJpYnV0ZXM7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRlc3Rfc2dyX2F0dHJpYnV0ZXMuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDExMTgwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm9jZWR1cmUgbmN1cnNlczIudGVzdF9zZ3JfYXR0cmlidXRlczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI3MTZlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10cmFjZV9zZXQuYWRiCkBAIC0wLDAgKzEsNDgwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMyLnRyYWNlX3NldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjMgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ2OjE4ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsKKword2l0aCBBZGEuU3RyaW5ncy5Cb3VuZGVkOworCistLSAgaW50ZXJhY3RpdmVseSBzZXQgdGhlIHRyYWNlIGxldmVsCisKK3Byb2NlZHVyZSBuY3Vyc2VzMi50cmFjZV9zZXQgaXMKKworICAgZnVuY3Rpb24gbWVudV92aXJ0dWFsaXplIChjIDogS2V5X0NvZGUpIHJldHVybiBNZW51X1JlcXVlc3RfQ29kZTsKKyAgIGZ1bmN0aW9uIHN1YnNldCAoc3VwZXIsIHN1YiA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBCb29sZWFuOworICAgZnVuY3Rpb24gdHJhY2Vfb3IgKGEsIGIgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gVHJhY2VfQXR0cmlidXRlX1NldDsKKyAgIGZ1bmN0aW9uIHRyYWNlX251bSAodGxldmVsIDogVHJhY2VfQXR0cmlidXRlX1NldCkgcmV0dXJuIFN0cmluZzsKKyAgIGZ1bmN0aW9uIHRyYWNldHJhY2UgKHRsZXZlbCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBTdHJpbmc7CisgICBmdW5jdGlvbiBydW5fdHJhY2VfbWVudSAobSA6IE1lbnU7IGNvdW50IDogSW50ZWdlcikgcmV0dXJuIEJvb2xlYW47CisKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGUgaXMKKyAgIGJlZ2luCisgICAgICBjYXNlIGMgaXMKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAobmV3bCkgfCBLZXlfRXhpdCA9PgorICAgICAgICAgICAgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlJ0xhc3QgKyAxOyAtLSAgTUFYX0NPTU1BTkQ/IFRPRE8KKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ3UnKSA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsVXBfTGluZTsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ2QnKSA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsRG93bl9MaW5lOworICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnYicpIHwgS2V5X05leHRfUGFnZSA9PgorICAgICAgICAgICAgcmV0dXJuIE1fU2Nyb2xsVXBfUGFnZTsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ2YnKSB8IEtleV9QcmV2aW91c19QYWdlID0+CisgICAgICAgICAgICByZXR1cm4gTV9TY3JvbGxEb3duX1BhZ2U7CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCduJykgfCBLZXlfQ3Vyc29yX0Rvd24gPT4KKyAgICAgICAgICAgIHJldHVybiBNX05leHRfSXRlbTsKKyAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ3AnKSB8IEtleV9DdXJzb3JfVXAgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1ByZXZpb3VzX0l0ZW07CisgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCcgJykgPT4KKyAgICAgICAgICAgIHJldHVybiBNX1RvZ2dsZV9JdGVtOworICAgICAgICAgd2hlbiBLZXlfTW91c2UgPT4KKyAgICAgICAgICAgIHJldHVybiBjOworICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgIEJlZXA7CisgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgIGVuZCBjYXNlOworICAgZW5kIG1lbnVfdmlydHVhbGl6ZTsKKworICAgdHlwZSBzdHJpbmdfYSBpcyBhY2Nlc3MgU3RyaW5nOworICAgdHlwZSB0YmxfZW50cnkgaXMgcmVjb3JkCisgICAgICBuYW1lIDogc3RyaW5nX2E7CisgICAgICBtYXNrIDogVHJhY2VfQXR0cmlidXRlX1NldDsKKyAgIGVuZCByZWNvcmQ7CisKKyAgIHRfdGJsIDogY29uc3RhbnQgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KSBvZiB0YmxfZW50cnkgOj0KKyAgICAgKAorICAgICAgKG5ldyBTdHJpbmcnKCJEaXNhYmxlIiksCisgICAgICAgVHJhY2VfRGlzYWJsZSksCisgICAgICAobmV3IFN0cmluZycoIlRpbWVzIiksCisgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVGltZXMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIlRwdXRzIiksCisgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVHB1dHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIlVwZGF0ZSIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFVwZGF0ZSA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSwKKyAgICAgIChuZXcgU3RyaW5nJygiQ3Vyc29yX01vdmUiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDdXJzb3JfTW92ZSA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSwKKyAgICAgIChuZXcgU3RyaW5nJygiQ2hhcmFjdGVyX091dHB1dCIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKENoYXJhY3Rlcl9PdXRwdXQgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIk9yZGluYXJ5IiksCisgICAgICAgVHJhY2VfT3JkaW5hcnkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJDYWxscyIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKENhbGxzID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJWaXJ0dWFsX1B1dHMiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhWaXJ0dWFsX1B1dHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIklucHV0X0V2ZW50cyIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKElucHV0X0V2ZW50cyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSwKKyAgICAgIChuZXcgU3RyaW5nJygiVFRZX1N0YXRlIiksCisgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVFRZX1N0YXRlID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJJbnRlcm5hbF9DYWxscyIpLAorICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKEludGVybmFsX0NhbGxzID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJDaGFyYWN0ZXJfQ2FsbHMiKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDaGFyYWN0ZXJfQ2FsbHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSksCisgICAgICAobmV3IFN0cmluZycoIlRlcm1jYXBfVGVybUluZm8iKSwKKyAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUZXJtY2FwX1Rlcm1JbmZvID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpLAorICAgICAgKG5ldyBTdHJpbmcnKCJNYXhpbWl1bSIpLAorICAgICAgIFRyYWNlX01heGltdW0pCisgICAgICApOworCisgICBwYWNrYWdlIEJTIGlzIG5ldyBBZGEuU3RyaW5ncy5Cb3VuZGVkLkdlbmVyaWNfQm91bmRlZF9MZW5ndGggKDMwMCk7CisKKyAgIGZ1bmN0aW9uIHN1YnNldCAoc3VwZXIsIHN1YiA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBCb29sZWFuIGlzCisgICBiZWdpbgorICAgICAgaWYKKyAgICAgICAgKHN1cGVyLlRpbWVzIG9yIG5vdCBzdWIuVGltZXMpIGFuZAorICAgICAgICAoc3VwZXIuVHB1dHMgb3Igbm90IHN1Yi5UcHV0cykgYW5kCisgICAgICAgIChzdXBlci5VcGRhdGUgb3Igbm90IHN1Yi5VcGRhdGUpIGFuZAorICAgICAgICAoc3VwZXIuQ3Vyc29yX01vdmUgb3Igbm90IHN1Yi5DdXJzb3JfTW92ZSkgYW5kCisgICAgICAgIChzdXBlci5DaGFyYWN0ZXJfT3V0cHV0IG9yIG5vdCBzdWIuQ2hhcmFjdGVyX091dHB1dCkgYW5kCisgICAgICAgIChzdXBlci5DYWxscyBvciBub3Qgc3ViLkNhbGxzKSBhbmQKKyAgICAgICAgKHN1cGVyLlZpcnR1YWxfUHV0cyBvciBub3Qgc3ViLlZpcnR1YWxfUHV0cykgYW5kCisgICAgICAgIChzdXBlci5JbnB1dF9FdmVudHMgb3Igbm90IHN1Yi5JbnB1dF9FdmVudHMpIGFuZAorICAgICAgICAoc3VwZXIuVFRZX1N0YXRlIG9yIG5vdCBzdWIuVFRZX1N0YXRlKSBhbmQKKyAgICAgICAgKHN1cGVyLkludGVybmFsX0NhbGxzIG9yIG5vdCBzdWIuSW50ZXJuYWxfQ2FsbHMpIGFuZAorICAgICAgICAoc3VwZXIuQ2hhcmFjdGVyX0NhbGxzIG9yIG5vdCBzdWIuQ2hhcmFjdGVyX0NhbGxzKSBhbmQKKyAgICAgICAgKHN1cGVyLlRlcm1jYXBfVGVybUluZm8gb3Igbm90IHN1Yi5UZXJtY2FwX1Rlcm1JbmZvKSBhbmQKKyAgICAgICAgVHJ1ZSB0aGVuCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBzdWJzZXQ7CisKKyAgIGZ1bmN0aW9uIHRyYWNlX29yIChhLCBiIDogVHJhY2VfQXR0cmlidXRlX1NldCkgcmV0dXJuIFRyYWNlX0F0dHJpYnV0ZV9TZXQgaXMKKyAgICAgIHJldHZhbCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQgOj0gVHJhY2VfRGlzYWJsZTsKKyAgIGJlZ2luCisgICAgICByZXR2YWwuVGltZXMgOj0gKGEuVGltZXMgb3IgYi5UaW1lcyk7CisgICAgICByZXR2YWwuVHB1dHMgOj0gKGEuVHB1dHMgb3IgYi5UcHV0cyk7CisgICAgICByZXR2YWwuVXBkYXRlIDo9IChhLlVwZGF0ZSBvciBiLlVwZGF0ZSk7CisgICAgICByZXR2YWwuQ3Vyc29yX01vdmUgOj0gKGEuQ3Vyc29yX01vdmUgb3IgYi5DdXJzb3JfTW92ZSk7CisgICAgICByZXR2YWwuQ2hhcmFjdGVyX091dHB1dCA6PSAoYS5DaGFyYWN0ZXJfT3V0cHV0IG9yIGIuQ2hhcmFjdGVyX091dHB1dCk7CisgICAgICByZXR2YWwuQ2FsbHMgOj0gKGEuQ2FsbHMgb3IgYi5DYWxscyk7CisgICAgICByZXR2YWwuVmlydHVhbF9QdXRzIDo9IChhLlZpcnR1YWxfUHV0cyBvciBiLlZpcnR1YWxfUHV0cyk7CisgICAgICByZXR2YWwuSW5wdXRfRXZlbnRzIDo9IChhLklucHV0X0V2ZW50cyBvciBiLklucHV0X0V2ZW50cyk7CisgICAgICByZXR2YWwuVFRZX1N0YXRlIDo9IChhLlRUWV9TdGF0ZSBvciBiLlRUWV9TdGF0ZSk7CisgICAgICByZXR2YWwuSW50ZXJuYWxfQ2FsbHMgOj0gKGEuSW50ZXJuYWxfQ2FsbHMgb3IgYi5JbnRlcm5hbF9DYWxscyk7CisgICAgICByZXR2YWwuQ2hhcmFjdGVyX0NhbGxzIDo9IChhLkNoYXJhY3Rlcl9DYWxscyBvciBiLkNoYXJhY3Rlcl9DYWxscyk7CisgICAgICByZXR2YWwuVGVybWNhcF9UZXJtSW5mbyA6PSAoYS5UZXJtY2FwX1Rlcm1JbmZvIG9yIGIuVGVybWNhcF9UZXJtSW5mbyk7CisKKyAgICAgIHJldHVybiByZXR2YWw7CisgICBlbmQgdHJhY2Vfb3I7CisKKyAgIC0tICBQcmludCB0aGUgaGV4YWRlY2ltYWwgdmFsdWUgb2YgdGhlIG1hc2sgc28KKyAgIC0tICB1c2VycyBjYW4gc2V0IGl0IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICAgZnVuY3Rpb24gdHJhY2VfbnVtICh0bGV2ZWwgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gU3RyaW5nIGlzCisgICAgICByZXN1bHQgOiBJbnRlZ2VyIDo9IDA7CisgICAgICBtIDogSW50ZWdlciA6PSAxOworICAgYmVnaW4KKworICAgICAgaWYgdGxldmVsLlRpbWVzIHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKworICAgICAgaWYgdGxldmVsLlRwdXRzIHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKworICAgICAgaWYgdGxldmVsLlVwZGF0ZSB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5DdXJzb3JfTW92ZSB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5DaGFyYWN0ZXJfT3V0cHV0IHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKworICAgICAgaWYgdGxldmVsLkNhbGxzIHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKworICAgICAgaWYgdGxldmVsLlZpcnR1YWxfUHV0cyB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5JbnB1dF9FdmVudHMgdGhlbgorICAgICAgICAgcmVzdWx0IDo9IHJlc3VsdCArIG07CisgICAgICBlbmQgaWY7CisgICAgICBtIDo9IG0gKiAyOworCisgICAgICBpZiB0bGV2ZWwuVFRZX1N0YXRlIHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKworICAgICAgaWYgdGxldmVsLkludGVybmFsX0NhbGxzIHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKworICAgICAgaWYgdGxldmVsLkNoYXJhY3Rlcl9DYWxscyB0aGVuCisgICAgICAgICByZXN1bHQgOj0gcmVzdWx0ICsgbTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIG0gOj0gbSAqIDI7CisKKyAgICAgIGlmIHRsZXZlbC5UZXJtY2FwX1Rlcm1JbmZvIHRoZW4KKyAgICAgICAgIHJlc3VsdCA6PSByZXN1bHQgKyBtOworICAgICAgZW5kIGlmOworICAgICAgbSA6PSBtICogMjsKKyAgICAgIHJldHVybiByZXN1bHQnSW1nOworICAgZW5kIHRyYWNlX251bTsKKworICAgZnVuY3Rpb24gdHJhY2V0cmFjZSAodGxldmVsIDogVHJhY2VfQXR0cmlidXRlX1NldCkgcmV0dXJuIFN0cmluZyBpcworCisgICAgICB1c2UgQlM7CisgICAgICBidWYgOiBCb3VuZGVkX1N0cmluZyA6PSBUb19Cb3VuZGVkX1N0cmluZyAoIiIpOworICAgYmVnaW4KKyAgICAgIC0tICBUaGUgQyB2ZXJzaW9uIHByaW50cyB0aGUgaGV4YWRlY2ltYWwgdmFsdWUgb2YgdGhlIG1hc2ssIHdlCisgICAgICAtLSAgd29uJ3QgZG8gdGhhdCBoZXJlIGJlY2F1c2UgdGhpcyBpcyBBZGEuCisKKyAgICAgIGlmIHRsZXZlbCA9IFRyYWNlX0Rpc2FibGUgdGhlbgorICAgICAgICAgQXBwZW5kIChidWYsICJUcmFjZV9EaXNhYmxlIik7CisgICAgICBlbHNlCisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUaW1lcyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlRpbWVzIik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUcHV0cyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlRwdXRzIik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhVcGRhdGUgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJVcGRhdGUiKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKEN1cnNvcl9Nb3ZlID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiQ3Vyc29yX01vdmUiKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKENoYXJhY3Rlcl9PdXRwdXQgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJDaGFyYWN0ZXJfT3V0cHV0Iik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9PcmRpbmFyeSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJPcmRpbmFyeSIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2FsbHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJDYWxscyIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVmlydHVhbF9QdXRzID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiVmlydHVhbF9QdXRzIik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhJbnB1dF9FdmVudHMgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJJbnB1dF9FdmVudHMiKTsKKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFRUWV9TdGF0ZSA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlRUWV9TdGF0ZSIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoSW50ZXJuYWxfQ2FsbHMgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJJbnRlcm5hbF9DYWxscyIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2hhcmFjdGVyX0NhbGxzID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiQ2hhcmFjdGVyX0NhbGxzIik7CisgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUZXJtY2FwX1Rlcm1JbmZvID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiVGVybWNhcF9UZXJtSW5mbyIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworCisgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfTWF4aW11bSkgdGhlbgorICAgICAgICAgICAgQXBwZW5kIChidWYsICJNYXhpbWl1bSIpOworICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworCisgICAgICBpZiBUb19TdHJpbmcgKGJ1ZikgKExlbmd0aCAoYnVmKSAtIDEpID0gJywnIHRoZW4KKyAgICAgICAgIERlbGV0ZSAoYnVmLCBMZW5ndGggKGJ1ZikgLSAxLCBMZW5ndGggKGJ1ZikpOworICAgICAgZW5kIGlmOworCisgICAgICByZXR1cm4gVG9fU3RyaW5nIChidWYpOworICAgZW5kIHRyYWNldHJhY2U7CisKKyAgIGZ1bmN0aW9uIHJ1bl90cmFjZV9tZW51IChtIDogTWVudTsgY291bnQgOiBJbnRlZ2VyKSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgaSwgcCA6IEl0ZW07CisgICAgICBjaGFuZ2VkIDogQm9vbGVhbjsKKyAgICAgIGMsIHYgOiBLZXlfQ29kZTsKKyAgIGJlZ2luCisgICAgICBsb29wCisgICAgICAgICBjaGFuZ2VkIDo9IChjb3VudCAvPSAwKTsKKyAgICAgICAgIGMgOj0gR2V0Y2hhciAoR2V0X1dpbmRvdyAobSkpOworICAgICAgICAgdiA6PSBtZW51X3ZpcnR1YWxpemUgKGMpOworICAgICAgICAgY2FzZSBEcml2ZXIgKG0sIHYpIGlzCisgICAgICAgICAgICB3aGVuIFVua25vd25fUmVxdWVzdCA9PgorICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4KKyAgICAgICAgICAgICAgIGkgOj0gQ3VycmVudCAobSk7CisgICAgICAgICAgICAgICBpZiBpID0gTWVudXMuSXRlbXMgKG0sIDEpIHRoZW4gLS0gdGhlIGZpcnN0IGl0ZW0KKyAgICAgICAgICAgICAgICAgIGZvciBuIGluIHRfdGJsJ0ZpcnN0ICsgMSAuLiB0X3RibCdMYXN0IGxvb3AKKyAgICAgICAgICAgICAgICAgICAgIGlmIFZhbHVlIChpKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBTZXRfVmFsdWUgKGksIEZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gdF90YmwnRmlyc3QgKyAxIC4uIHRfdGJsJ0xhc3QgbG9vcAorICAgICAgICAgICAgICAgICAgICAgcCA6PSBNZW51cy5JdGVtcyAobSwgbik7CisgICAgICAgICAgICAgICAgICAgICBpZiBWYWx1ZSAocCkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0X1ZhbHVlIChNZW51cy5JdGVtcyAobSwgMSksIEZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIGlmIG5vdCBjaGFuZ2VkIHRoZW4KKyAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGNhc2U7CisgICAgICBlbmQgbG9vcDsKKyAgIGVuZCBydW5fdHJhY2VfbWVudTsKKworICAgbmNfdHJhY2luZywgbWFzayA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CisgICBwcmFnbWEgSW1wb3J0IChDLCBuY190cmFjaW5nLCAiX25jX3RyYWNpbmciKTsKKyAgIGl0ZW1zX2EgOiBjb25zdGFudCBJdGVtX0FycmF5X0FjY2VzcyA6PQorICAgICBuZXcgSXRlbV9BcnJheSAodF90YmwnRmlyc3QgLi4gdF90YmwnTGFzdCArIDEpOworICAgbXJvd3MgOiBMaW5lX0NvdW50OworICAgbWNvbHMgOiBDb2x1bW5fQ291bnQ7CisgICBtZW51d2luIDogV2luZG93OworICAgbWVudV95IDogY29uc3RhbnQgTGluZV9Qb3NpdGlvbiA6PSA4OworICAgbWVudV94IDogY29uc3RhbnQgQ29sdW1uX1Bvc2l0aW9uIDo9IDg7CisgICBpcCA6IEl0ZW07CisgICBtIDogTWVudTsKKyAgIGNvdW50IDogSW50ZWdlcjsKKyAgIG5ld3RyYWNlIDogVHJhY2VfQXR0cmlidXRlX1NldDsKK2JlZ2luCisgICBBZGQgKExpbmUgPT4gMCwgQ29sdW1uID0+IDAsIFN0ciA9PiAiSW50ZXJhY3RpdmVseSBzZXQgdHJhY2UgbGV2ZWw6Iik7CisgICBBZGQgKExpbmUgPT4gMiwgQ29sdW1uID0+IDAsCisgICAgICAgIFN0ciA9PiAiICBQcmVzcyBzcGFjZSBiYXIgdG8gdG9nZ2xlIGEgc2VsZWN0aW9uLiIpOworICAgQWRkIChMaW5lID0+IDMsIENvbHVtbiA9PiAwLAorICAgICAgICBTdHIgPT4gIiAgVXNlIHVwIGFuZCBkb3duIGFycm93IHRvIG1vdmUgdGhlIHNlbGVjdCBiYXIuIik7CisgICBBZGQgKExpbmUgPT4gNCwgQ29sdW1uID0+IDAsCisgICAgICAgIFN0ciA9PiAiICBQcmVzcyByZXR1cm4gdG8gc2V0IHRoZSB0cmFjZSBsZXZlbC4iKTsKKyAgIEFkZCAoTGluZSA9PiA2LCBDb2x1bW4gPT4gMCwgU3RyID0+ICIoQ3VycmVudCB0cmFjZSBsZXZlbCBpcyAiKTsKKyAgIEFkZCAoU3RyID0+IHRyYWNldHJhY2UgKG5jX3RyYWNpbmcpICYgIiBudW1lcmljYWxseTogIiAmCisgICAgICAgIHRyYWNlX251bSAobmNfdHJhY2luZykpOworICAgQWRkIChDaCA9PiAnKScpOworCisgICBSZWZyZXNoOworCisgICBmb3IgbiBpbiB0X3RibCdSYW5nZSBsb29wCisgICAgICBpdGVtc19hIChuKSA6PSBOZXdfSXRlbSAodF90YmwgKG4pLm5hbWUuYWxsKTsKKyAgIGVuZCBsb29wOworICAgaXRlbXNfYSAodF90YmwnTGFzdCArIDEpIDo9IE51bGxfSXRlbTsKKworICAgbSA6PSBOZXdfTWVudSAoaXRlbXNfYSk7CisKKyAgIFNldF9Gb3JtYXQgKG0sIDE2LCAyKTsKKyAgIFNjYWxlIChtLCBtcm93cywgbWNvbHMpOworCisgICBTd2l0Y2hfT3B0aW9ucyAobSwgKE9uZV9WYWx1ZWQgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwgT24gPT4gRmFsc2UpOworICAgbWVudXdpbiA6PSBOZXdfV2luZG93IChtcm93cyArIDIsIG1jb2xzICsgMiwgbWVudV95LCBtZW51X3gpOworICAgU2V0X1dpbmRvdyAobSwgbWVudXdpbik7CisgICBTZXRfS2V5UGFkX01vZGUgKG1lbnV3aW4sIFN3aXRjaE9uID0+IFRydWUpOworICAgQm94IChtZW51d2luKTsKKworICAgU2V0X1N1Yl9XaW5kb3cgKG0sIERlcml2ZWRfV2luZG93IChtZW51d2luLCBtcm93cywgbWNvbHMsIDEsIDEpKTsKKworICAgUG9zdCAobSk7CisKKyAgIGZvciBuIGluIHRfdGJsJ1JhbmdlIGxvb3AKKyAgICAgIGlwIDo9IEl0ZW1zIChtLCBuKTsKKyAgICAgIG1hc2sgOj0gdF90YmwgKG4pLm1hc2s7CisgICAgICBpZiBtYXNrID0gVHJhY2VfRGlzYWJsZSB0aGVuCisgICAgICAgICBTZXRfVmFsdWUgKGlwLCBuY190cmFjaW5nID0gVHJhY2VfRGlzYWJsZSk7CisgICAgICBlbHNpZiBzdWJzZXQgKHN1YiA9PiBtYXNrLCBzdXBlciA9PiBuY190cmFjaW5nKSB0aGVuCisgICAgICAgICBTZXRfVmFsdWUgKGlwLCBUcnVlKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBsb29wOworCisgICBjb3VudCA6PSAxOworICAgd2hpbGUgcnVuX3RyYWNlX21lbnUgKG0sIGNvdW50KSBsb29wCisgICAgICBjb3VudCA6PSBjb3VudCArIDE7CisgICBlbmQgbG9vcDsKKworICAgbmV3dHJhY2UgOj0gVHJhY2VfRGlzYWJsZTsKKyAgIGZvciBuIGluIHRfdGJsJ1JhbmdlIGxvb3AKKyAgICAgIGlwIDo9IEl0ZW1zIChtLCBuKTsKKyAgICAgIGlmIFZhbHVlIChpcCkgdGhlbgorICAgICAgICAgbWFzayA6PSB0X3RibCAobikubWFzazsKKyAgICAgICAgIG5ld3RyYWNlIDo9IHRyYWNlX29yIChuZXd0cmFjZSwgbWFzayk7CisgICAgICBlbmQgaWY7CisgICBlbmQgbG9vcDsKKworICAgVHJhY2VfT24gKG5ld3RyYWNlKTsKKyAgIFRyYWNlX1B1dCAoInRyYWNlIGxldmVsIGludGVyYWN0aXZlbHkgc2V0IHRvICIgJgorICAgICAgICAgICAgICB0cmFjZXRyYWNlIChuY190cmFjaW5nKSk7CisKKyAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IExpbmVzIC0gNCwgQ29sdW1uID0+IDApOworICAgQWRkIChTdHIgPT4gIlRyYWNlIGxldmVsIGlzICIpOworICAgQWRkIChTdHIgPT4gdHJhY2V0cmFjZSAobmNfdHJhY2luZykpOworICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgIFBhdXNlOyAtLSB3YXMganVzdCBBZGQoKTsgR2V0Y2hhcgorCisgICBQb3N0IChtLCBGYWxzZSk7CisgICAtLSAgbWVudXdpbiBoYXMgc3Vid2luZG93cyBJIHRoaW5rLCB3aGljaCBtYWtlcyBhbiBlcnJvci4KKyAgIGRlY2xhcmUgYmVnaW4KKyAgICAgIERlbGV0ZSAobWVudXdpbik7CisgICBleGNlcHRpb24gd2hlbiBDdXJzZXNfRXhjZXB0aW9uID0+IG51bGw7IGVuZDsKKworICAgLS0gIGZyZWVfbWVudShtKTsKKyAgIC0tICBmcmVlX2l0ZW0oKQorZW5kIG5jdXJzZXMyLnRyYWNlX3NldDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmJmOGNhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10cmFjZV9zZXQuYWRzCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlczIudHJhY2Vfc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb2NlZHVyZSBuY3Vyc2VzMi50cmFjZV9zZXQ7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXV0aWwuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWUzMjcyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYgpAQCAtMCwwICsxLDE5MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzMi51dGlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MToyMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlRleHRfSU87IHVzZSBBZGEuVGV4dF9JTzsKKworcHJhZ21hIFdhcm5pbmdzIChPZmYpOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKK3ByYWdtYSBXYXJuaW5ncyAoT24pOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOworCit3aXRoIEludGVyZmFjZXMuQzsKK3dpdGggSW50ZXJmYWNlcy5DLlN0cmluZ3M7CisKK3dpdGggQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7CisKK3dpdGggbmN1cnNlczIuZ2VuZXJpY1B1dHM7CisKK3BhY2thZ2UgYm9keSBuY3Vyc2VzMi51dGlsIGlzCisKKyAgIC0tICAjZGVmaW5lcyBmcm9tIEMKKyAgIC0tICAjZGVmaW5lIENUUkwoeCkgICAgICAgICAoKHgpICYgMHgxZikKKyAgIGZ1bmN0aW9uIENUUkwgKGMgOiBDaGFyYWN0ZXIpIHJldHVybiBLZXlfQ29kZSBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaGFyYWN0ZXInUG9zIChjKSBtb2QgMTYjMjAjOworICAgICAgLS0gIHVzZXMgYSBwcm9wZXJ0eSBvZiBBU0NJSQorICAgICAgLS0gIEEgPSAxNiM0MSM7IGEgPSAxNiM2MSM7IF5BID0gMSBvciAxNiMxIworICAgZW5kIENUUkw7CisKKyAgIGZ1bmN0aW9uIENUUkwgKGMgOiBDaGFyYWN0ZXIpIHJldHVybiBDaGFyYWN0ZXIgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ2hhcmFjdGVyJ1ZhbCAoQ2hhcmFjdGVyJ1BvcyAoYykgbW9kIDE2IzIwIyk7CisgICAgICAtLSAgdXNlcyBhIHByb3BlcnR5IG9mIEFTQ0lJCisgICAgICAtLSAgQSA9IDE2IzQxIzsgYSA9IDE2IzYxIzsgXkEgPSAxIG9yIDE2IzEjCisgICBlbmQgQ1RSTDsKKworICAgc2F2ZV90cmFjZSA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQ7CisgICAtLSAgQ29tbW9uIGZ1bmN0aW9uIHRvIGFsbG93IF5UIHRvIHRvZ2dsZSB0cmFjZS1tb2RlIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXN0CisgICAtLSAgc28gdGhhdCB0cmFjZS1maWxlcyBjYW4gYmUgbWFkZSBzbWFsbGVyLgorICAgZnVuY3Rpb24gR2V0Y2hhciAod2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgcmV0dXJuIEtleV9Db2RlIGlzCisgICAgICBjIDogS2V5X0NvZGU7CisgICBiZWdpbgorICAgICAgLS0gICNpZmRlZiBUUkFDRQorICAgICAgYyA6PSBHZXRfS2V5c3Ryb2tlICh3aW4pOworICAgICAgd2hpbGUgYyA9IENUUkwgKCdUJykgbG9vcAorICAgICAgICAgLS0gIGlmIF9uY190cmFjaW5nICBpbiBDCisgICAgICAgICBpZiBDdXJyZW50X1RyYWNlX1NldHRpbmcgLz0gVHJhY2VfRGlzYWJsZSB0aGVuCisgICAgICAgICAgICBzYXZlX3RyYWNlIDo9IEN1cnJlbnRfVHJhY2VfU2V0dGluZzsKKyAgICAgICAgICAgIFRyYWNlX1B1dCAoIlRPR0dMRS1UUkFDSU5HIE9GRiIpOworICAgICAgICAgICAgQ3VycmVudF9UcmFjZV9TZXR0aW5nIDo9IFRyYWNlX0Rpc2FibGU7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBDdXJyZW50X1RyYWNlX1NldHRpbmcgOj0gc2F2ZV90cmFjZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIFRyYWNlX09uIChDdXJyZW50X1RyYWNlX1NldHRpbmcpOworICAgICAgICAgaWYgQ3VycmVudF9UcmFjZV9TZXR0aW5nIC89IFRyYWNlX0Rpc2FibGUgdGhlbgorICAgICAgICAgICAgVHJhY2VfUHV0ICgiVE9HR0xFLVRSQUNJTkcgT04iKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgICAgLS0gICNlbHNlIGMgOj0gR2V0X0tleXN0cm9rZTsKKyAgICAgIHJldHVybiBjOworICAgZW5kIEdldGNoYXI7CisKKyAgIHByb2NlZHVyZSBHZXRjaGFyICh3aW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSBpcworICAgYmVnaW4KKyAgICAgIGlmIEdldGNoYXIgKHdpbikgPCAwIHRoZW4KKyAgICAgICAgIEJlZXA7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0Y2hhcjsKKworICAgcHJvY2VkdXJlIFBhdXNlIGlzCisgICBiZWdpbgorICAgICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gTGluZXMgLSAxLCBDb2x1bW4gPT4gMCk7CisgICAgICBBZGQgKFN0ciA9PiAiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiAiKTsKKyAgICAgIEdldGNoYXI7CisgICBlbmQgUGF1c2U7CisKKyAgIHByb2NlZHVyZSBDYW5ub3QgKHMgOiBTdHJpbmcpIGlzCisgICAgICB1c2UgSW50ZXJmYWNlcy5DOworICAgICAgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOworICAgICAgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworICAgICAgZnVuY3Rpb24gZ2V0ZW52ICh4IDogY2hhcl9hcnJheSkgIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBnZXRlbnYsICJnZXRlbnYiKTsKKyAgICAgIHRtcDEgOiBjaGFyX2FycmF5ICgwIC4uIDEwKTsKKyAgICAgIHBhY2thZ2UgcCBpcyBuZXcgbmN1cnNlczIuZ2VuZXJpY1B1dHMgKDEwMjQpOworICAgICAgdXNlIHA7CisgICAgICB1c2UgcC5CUzsKKworICAgICAgdG1wYiA6IEJTLkJvdW5kZWRfU3RyaW5nOworCisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoIlRFUk0iLCB0bXAxLCBMZW5ndGgpOworICAgICAgRmlsbF9TdHJpbmcgKGdldGVudiAodG1wMSksIHRtcGIpOworICAgICAgQWRkIChDaCA9PiBuZXdsKTsKKyAgICAgIG15QWRkIChTdHIgPT4gIlRoaXMgIiAmIHRtcGIgJiAiIHRlcm1pbmFsICIgJiBzKTsKKyAgICAgIFBhdXNlOworICAgZW5kIENhbm5vdDsKKworICAgcHJvY2VkdXJlIFNoZWxsT3V0IChtZXNzYWdlIDogQm9vbGVhbikgaXMKKyAgICAgIHVzZSBJbnRlcmZhY2VzLkM7CisgICAgICBUeHQgOiBjaGFyX2FycmF5ICgwIC4uIDEwKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgICAgIHByb2NlZHVyZSBzeXN0ZW0gKHggOiBjaGFyX2FycmF5KTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHN5c3RlbSwgInN5c3RlbSIpOworICAgYmVnaW4KKyAgICAgIFRvX0MgKCJzaCIsIFR4dCwgIExlbmd0aCk7CisgICAgICBpZiBtZXNzYWdlIHRoZW4KKyAgICAgICAgIEFkZCAoU3RyID0+ICJTaGVsbGluZyBvdXQuLi4iKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFNhdmVfQ3Vyc2VzX01vZGUgKE1vZGUgPT4gQ3Vyc2VzKTsKKyAgICAgIEVuZF9XaW5kb3dzOworICAgICAgc3lzdGVtIChUeHQpOworICAgICAgaWYgbWVzc2FnZSB0aGVuCisgICAgICAgICBBZGQgKFN0ciA9PiAicmV0dXJuZWQgZnJvbSBzaGVsbG91dC4iKTsKKyAgICAgICAgIEFkZCAoQ2ggPT4gbmV3bCk7CisgICAgICBlbmQgaWY7CisgICAgICBSZWZyZXNoOworICAgZW5kIFNoZWxsT3V0OworCisgICBmdW5jdGlvbiBJc19EaWdpdCAoYyA6IEtleV9Db2RlKSByZXR1cm4gQm9vbGVhbiBpcworICAgYmVnaW4KKyAgICAgIGlmIGMgPj0gMTYjMTAwIyB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmcuSXNfRGlnaXQgKENoYXJhY3RlcidWYWwgKGMpKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJc19EaWdpdDsKKworICAgcHJvY2VkdXJlIFAgKHMgOiBTdHJpbmcpIGlzCisgICBiZWdpbgorICAgICAgQWRkIChTdHIgPT4gcyk7CisgICAgICBBZGQgKENoID0+IG5ld2wpOworICAgZW5kIFA7CisKKyAgIGZ1bmN0aW9uIENvZGVfVG9fQ2hhciAoYyA6IEtleV9Db2RlKSByZXR1cm4gQ2hhcmFjdGVyIGlzCisgICBiZWdpbgorICAgICAgaWYgYyA+IENoYXJhY3RlcidQb3MgKENoYXJhY3RlcidMYXN0KSB0aGVuCisgICAgICAgICByZXR1cm4gQ2hhcmFjdGVyJ1ZhbCAoMCk7CisgICAgICAgICAtLSAgbWF5YmUgcmFpc2UgZXhjZXB0aW9uPworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIENoYXJhY3RlcidWYWwgKGMpOworICAgICAgZW5kIGlmOworICAgZW5kIENvZGVfVG9fQ2hhcjsKKworICAgLS0gIFRoaXMgd2FzIHVudGVzdGFibGUgZHVlIHRvIGEgYnVnIGluIEdOQVQgKDMuMTJwKQorICAgLS0gIEhtbSwgd2hhdCBidWc/IEkgZG9uJ3QgcmVtZW1iZXIuCisgICBmdW5jdGlvbiBjdG9pIChjIDogQ2hhcmFjdGVyKSByZXR1cm4gSW50ZWdlciBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBDaGFyYWN0ZXInUG9zIChjKSAtIENoYXJhY3RlcidQb3MgKCcwJyk7CisgICBlbmQgY3RvaTsKKworZW5kIG5jdXJzZXMyLnV0aWw7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXV0aWwuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDY3NDlmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkcwpAQCAtMCwwICsxLDc2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmN1cnNlczIudXRpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjIgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKword2l0aCBBZGEuVGV4dF9JTzsKK3BhY2thZ2UgbmN1cnNlczIudXRpbCBpcworCisgICBCbGFuayA6IGNvbnN0YW50IENoYXJhY3RlciA6PSAnICc7CisgICBCbGFuazIgOiBjb25zdGFudCBBdHRyaWJ1dGVkX0NoYXJhY3RlciA6PQorICAgICAoQ2ggPT4gQmxhbmssIEF0dHIgPT4gTm9ybWFsX1ZpZGVvLCBDb2xvciA9PiBDb2xvcl9QYWlyJ0ZpcnN0KTsKKworICAgbmV3bCA6IGNvbnN0YW50IENoYXJhY3RlciA6PSAgQ2hhcmFjdGVyJ1ZhbCAoMTApOworCisgICBmdW5jdGlvbiBDVFJMIChjIDogQ2hhcmFjdGVyKSByZXR1cm4gS2V5X0NvZGU7CisKKyAgIGZ1bmN0aW9uIENUUkwgKGMgOiBDaGFyYWN0ZXIpIHJldHVybiBDaGFyYWN0ZXI7CisKKyAgIGZ1bmN0aW9uIEdldGNoYXIgKHdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpIHJldHVybiBLZXlfQ29kZTsKKworICAgcHJvY2VkdXJlIEdldGNoYXIgKHdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3cpOworCisgICBwcm9jZWR1cmUgUGF1c2U7CisKKyAgIHByb2NlZHVyZSBDYW5ub3QgKHMgOiBTdHJpbmcpOworCisgICBwcm9jZWR1cmUgU2hlbGxPdXQgKG1lc3NhZ2UgOiBCb29sZWFuKTsKKworICAgcGFja2FnZSBJbnRfSU8gaXMgbmV3IEFkYS5UZXh0X0lPLkludGVnZXJfSU8gKEludGVnZXIpOworCisgICBmdW5jdGlvbiBJc19EaWdpdCAoYyA6IEtleV9Db2RlKSByZXR1cm4gQm9vbGVhbjsKKworICAgcHJvY2VkdXJlIFAgKHMgOiBTdHJpbmcpOworCisgICBmdW5jdGlvbiBDb2RlX1RvX0NoYXIgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIENoYXJhY3RlcjsKKyAgIGZ1bmN0aW9uIGN0b2kgKGMgOiBDaGFyYWN0ZXIpIHJldHVybiBJbnRlZ2VyOworCitlbmQgbmN1cnNlczIudXRpbDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczIuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlMDE5NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvbmN1cnNlczIuYWRzCkBAIC0wLDAgKzEsNDQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcGFja2FnZSBuY3Vyc2VzMiBpcworICAgcHJhZ21hIFB1cmUgKG5jdXJzZXMyKTsKK2VuZCBuY3Vyc2VzMjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvcmFpbi5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3JhaW4uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NzMwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3JhaW4uYWRiCkBAIC0wLDAgKzEsMTc5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIExhdXJlbnQgUGF1dGV0IDxwYXV0ZXRAZ25hdC5jb20+CistLSAgTW9kaWZpZWQgYnk6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgJERhdGU6IDIwMDgvMDgvMzAgMjE6Mzg6MDcgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KK3dpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7Cit3aXRoIEFkYS5OdW1lcmljcy5GbG9hdF9SYW5kb207IHVzZSBBZGEuTnVtZXJpY3MuRmxvYXRfUmFuZG9tOword2l0aCBTdGF0dXM7IHVzZSBTdGF0dXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCitwcm9jZWR1cmUgUmFpbiBpcworCisgICBWaXNpYmlsaXR5IDogQ3Vyc29yX1Zpc2liaWxpdHk7CisKKyAgIHN1YnR5cGUgWF9Qb3NpdGlvbiBpcyBMaW5lX1Bvc2l0aW9uOworICAgc3VidHlwZSBZX1Bvc2l0aW9uIGlzIENvbHVtbl9Qb3NpdGlvbjsKKworICAgWHBvcyAgICA6IGFycmF5ICgxIC4uIDUpIG9mIFhfUG9zaXRpb247CisgICBZcG9zICAgIDogYXJyYXkgKDEgLi4gNSkgb2YgWV9Qb3NpdGlvbjsKKworICAgZG9uZSA6IEJvb2xlYW47CisKKyAgIGMgOiBLZXlfQ29kZTsKKworICAgTiA6IEludGVnZXI7CisKKyAgIEcgOiBHZW5lcmF0b3I7CisKKyAgIE1heF9YLCBYIDogWF9Qb3NpdGlvbjsKKyAgIE1heF9ZLCBZIDogWV9Qb3NpdGlvbjsKKworICAgcHJvY2VkdXJlIE5leHQgKEogOiBpbiBvdXQgSW50ZWdlcik7CisgICBwcm9jZWR1cmUgQ3Vyc29yIChYIDogWF9Qb3NpdGlvbjsgWSA6IFlfUG9zaXRpb24pOworCisgICBwcm9jZWR1cmUgTmV4dCAoSiA6IGluIG91dCBJbnRlZ2VyKSBpcworICAgYmVnaW4KKyAgICAgIGlmIEogPSA1IHRoZW4KKyAgICAgICAgIEogOj0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEogOj0gSiArIDE7CisgICAgICBlbmQgaWY7CisgICBlbmQgTmV4dDsKKworICAgcHJvY2VkdXJlIEN1cnNvciAoWCA6IFhfUG9zaXRpb247IFkgOiBZX1Bvc2l0aW9uKSBpcworICAgYmVnaW4KKyAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IFgsIENvbHVtbiA9PiBZKTsKKyAgIGVuZCBDdXJzb3I7CisgICBwcmFnbWEgSW5saW5lIChDdXJzb3IpOworCitiZWdpbgorCisgICBJbml0X1NjcmVlbjsKKyAgIFNldF9OTF9Nb2RlOworICAgU2V0X0VjaG9fTW9kZSAoRmFsc2UpOworCisgICBWaXNpYmlsaXR5IDo9IEludmlzaWJsZTsKKyAgIFNldF9DdXJzb3JfVmlzaWJpbGl0eSAoVmlzaWJpbGl0eSk7CisgICBTZXRfVGltZW91dF9Nb2RlIChTdGFuZGFyZF9XaW5kb3csIE5vbl9CbG9ja2luZywgMCk7CisKKyAgIE1heF9YIDo9IExpbmVzIC0gNTsKKyAgIE1heF9ZIDo9IENvbHVtbnMgLSA1OworCisgICBmb3IgSSBpbiBYcG9zJ1JhbmdlIGxvb3AKKyAgICAgIFhwb3MgKEkpIDo9IFhfUG9zaXRpb24gKEZsb2F0IChNYXhfWCkgKiBSYW5kb20gKEcpKSArIDI7CisgICAgICBZcG9zIChJKSA6PSBZX1Bvc2l0aW9uIChGbG9hdCAoTWF4X1kpICogUmFuZG9tIChHKSkgKyAyOworICAgZW5kIGxvb3A7CisKKyAgIE4gOj0gMTsKKyAgIGRvbmUgOj0gRmFsc2U7CisgICB3aGlsZSBub3QgZG9uZSBhbmQgUHJvY2Vzcy5Db250aW51ZSBsb29wCisKKyAgICAgIFggOj0gWF9Qb3NpdGlvbiAoRmxvYXQgKE1heF9YKSAqIFJhbmRvbSAoRykpICsgMjsKKyAgICAgIFkgOj0gWV9Qb3NpdGlvbiAoRmxvYXQgKE1heF9ZKSAqIFJhbmRvbSAoRykpICsgMjsKKworICAgICAgQ3Vyc29yIChYLCBZKTsKKyAgICAgIEFkZCAoQ2ggPT4gJy4nKTsKKworICAgICAgQ3Vyc29yIChYcG9zIChOKSwgWXBvcyAoTikpOworICAgICAgQWRkIChDaCA9PiAnbycpOworCisgICAgICAtLQorICAgICAgTmV4dCAoTik7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pLCBZcG9zIChOKSk7CisgICAgICBBZGQgKENoID0+ICdPJyk7CisKKyAgICAgIC0tCisgICAgICBOZXh0IChOKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTikgLSAxLCBZcG9zIChOKSk7CisgICAgICBBZGQgKENoID0+ICctJyk7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pLCBZcG9zIChOKSAtIDEpOworICAgICAgQWRkIChTdHIgPT4gInwufCIpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSArIDEsIFlwb3MgKE4pKTsKKyAgICAgIEFkZCAoQ2ggPT4gJy0nKTsKKworICAgICAgLS0KKyAgICAgIE5leHQgKE4pOworICAgICAgQ3Vyc29yIChYcG9zIChOKSAtIDIsIFlwb3MgKE4pKTsKKyAgICAgIEFkZCAoQ2ggPT4gJy0nKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTikgLSAxLCBZcG9zIChOKSAtIDEpOworICAgICAgQWRkIChTdHIgPT4gIi9cXCIpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSwgWXBvcyAoTikgLSAyKTsKKyAgICAgIEFkZCAoU3RyID0+ICJ8IE8gfCIpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSArIDEsIFlwb3MgKE4pIC0gMSk7CisgICAgICBBZGQgKFN0ciA9PiAiXFwvIik7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pICsgMiwgWXBvcyAoTikpOworICAgICAgQWRkIChDaCA9PiAnLScpOworCisgICAgICAtLQorICAgICAgTmV4dCAoTik7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pIC0gMiwgWXBvcyAoTikpOworICAgICAgQWRkIChDaCA9PiAnICcpOworICAgICAgQ3Vyc29yIChYcG9zIChOKSAtIDEsIFlwb3MgKE4pIC0gMSk7CisgICAgICBBZGQgKFN0ciA9PiAiICAgIik7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pLCBZcG9zIChOKSAtIDIpOworICAgICAgQWRkIChTdHIgPT4gIiAgICAgIik7CisgICAgICBDdXJzb3IgKFhwb3MgKE4pICsgMSwgWXBvcyAoTikgLSAxKTsKKyAgICAgIEFkZCAoU3RyID0+ICIgICAiKTsKKyAgICAgIEN1cnNvciAoWHBvcyAoTikgKyAyLCBZcG9zIChOKSk7CisgICAgICBBZGQgKENoID0+ICcgJyk7CisKKyAgICAgIFhwb3MgKE4pIDo9IFg7CisgICAgICBZcG9zIChOKSA6PSBZOworCisgICAgICBjIDo9IEdldGNoYXI7CisgICAgICBjYXNlIGMgaXMKKyAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ3EnKSA9PiBkb25lIDo9IFRydWU7CisgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdRJykgPT4gZG9uZSA6PSBUcnVlOworICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgncycpID0+IFNldF9Ob0RlbGF5X01vZGUgKFN0YW5kYXJkX1dpbmRvdywgRmFsc2UpOworICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnICcpID0+IFNldF9Ob0RlbGF5X01vZGUgKFN0YW5kYXJkX1dpbmRvdywgVHJ1ZSk7CisgICAgICB3aGVuIG90aGVycyA9PiBudWxsOworICAgICAgZW5kIGNhc2U7CisKKyAgICAgIE5hcF9NaWxsaV9TZWNvbmRzICg1MCk7CisgICBlbmQgbG9vcDsKKworICAgVmlzaWJpbGl0eSA6PSBOb3JtYWw7CisgICBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFZpc2liaWxpdHkpOworICAgRW5kX1dpbmRvd3M7CisgICBDdXJzZXNfRnJlZV9BbGw7CisKK2VuZCBSYWluOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9yYWluLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvcmFpbi5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkMTkxMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvcmFpbi5hZHMKQEAgLTAsMCArMSw0MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBMYXVyZW50IFBhdXRldCA8cGF1dGV0QGduYXQuY29tPgorLS0gIE1vZGlmaWVkIGJ5OiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk3CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjYgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KK3Byb2NlZHVyZSBSYWluOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1hdHRyaWJ1dGVzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDlmMzdkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5hZGIKQEAgLTAsMCArMSwxMjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5DdXJzZXNfRGVtby5BdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7ICB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7CisKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0Oword2l0aCBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7IHVzZSBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7Cit3aXRoIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOyB1c2UgU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7Cit3aXRoIFNhbXBsZS5FeHBsYW5hdGlvbjsgdXNlIFNhbXBsZS5FeHBsYW5hdGlvbjsKKworcGFja2FnZSBib2R5IFNhbXBsZS5DdXJzZXNfRGVtby5BdHRyaWJ1dGVzIGlzCisKKyAgIHByb2NlZHVyZSBEZW1vCisgICBpcworICAgICAgUCA6IFBhbmVsIDo9IENyZWF0ZSAoU3RhbmRhcmRfV2luZG93KTsKKyAgICAgIEsgOiBSZWFsX0tleV9Db2RlOworICAgYmVnaW4KKyAgICAgIFNldF9NZXRhX01vZGU7CisgICAgICBTZXRfS2V5UGFkX01vZGU7CisKKyAgICAgIFRvcCAoUCk7CisKKyAgICAgIFB1c2hfRW52aXJvbm1lbnQgKCJBVFRSSUJERU1PIik7CisgICAgICBEZWZhdWx0X0xhYmVsczsKKyAgICAgIE5vdGVwYWQgKCJBVFRSSUItUEFEMDAiKTsKKworICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IChvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIEFkZCAoTGluZSA9PiAxLCBDb2x1bW4gPT4gQ29sdW1ucyAvIDIgLSAxMCwKKyAgICAgICAgICAgU3RyID0+ICJUaGlzIGlzIE5PUk1BTCIpOworCisgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKEF0dHIgPT4gKFN0YW5kX091dCA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBBZGQgKExpbmUgPT4gMiwgQ29sdW1uID0+IENvbHVtbnMgLyAyIC0gMTAsCisgICAgICAgICAgIFN0ciA9PiAiVGhpcyBpcyBTdGFuZF9PdXQiKTsKKworICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IChVbmRlcl9MaW5lID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIEFkZCAoTGluZSA9PiAzLCBDb2x1bW4gPT4gQ29sdW1ucyAvIDIgLSAxMCwKKyAgICAgICAgICAgU3RyID0+ICJUaGlzIGlzIFVuZGVyX0xpbmUiKTsKKworICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IChSZXZlcnNlX1ZpZGVvID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIEFkZCAoTGluZSA9PiA0LCBDb2x1bW4gPT4gQ29sdW1ucyAvIDIgLSAxMCwKKyAgICAgICAgICAgU3RyID0+ICJUaGlzIGlzIFJldmVyc2VfVmlkZW8iKTsKKworICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChBdHRyID0+IChCbGluayA9PiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBBZGQgKExpbmUgPT4gNSwgQ29sdW1uID0+IENvbHVtbnMgLyAyIC0gMTAsCisgICAgICAgICAgIFN0ciA9PiAiVGhpcyBpcyBCbGluayIpOworCisgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKEF0dHIgPT4gKERpbV9DaGFyYWN0ZXIgPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpOworICAgICAgQWRkIChMaW5lID0+IDYsIENvbHVtbiA9PiBDb2x1bW5zIC8gMiAtIDEwLAorICAgICAgICAgICBTdHIgPT4gIlRoaXMgaXMgRGltX0NoYXJhY3RlciIpOworCisgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKEF0dHIgPT4gKEJvbGRfQ2hhcmFjdGVyID0+IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKTsKKyAgICAgIEFkZCAoTGluZSA9PiA3LCBDb2x1bW4gPT4gQ29sdW1ucyAvIDIgLSAxMCwKKyAgICAgICAgICAgU3RyID0+ICJUaGlzIGlzIEJvbGRfQ2hhcmFjdGVyIik7CisKKyAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CisgICAgICBVcGRhdGVfUGFuZWxzOyBVcGRhdGVfU2NyZWVuOworCisgICAgICBsb29wCisgICAgICAgICBLIDo9IEdldF9LZXk7CisgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICB3aGVuIFFVSVRfQ09ERSAgICAgPT4gZXhpdDsKKyAgICAgICAgICAgICAgIHdoZW4gSEVMUF9DT0RFICAgICA9PiBFeHBsYWluX0NvbnRleHQ7CisgICAgICAgICAgICAgICB3aGVuIEVYUExBSU5fQ09ERSAgPT4gRXhwbGFpbiAoIkFUVFJJQktFWVMiKTsKKyAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzICAgICAgICA9PiBudWxsOworICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgbG9vcDsKKworICAgICAgUG9wX0Vudmlyb25tZW50OworICAgICAgQ2xlYXI7CisgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlOworICAgICAgRGVsZXRlIChQKTsKKyAgICAgIFVwZGF0ZV9QYW5lbHM7IFVwZGF0ZV9TY3JlZW47CisKKyAgIGVuZCBEZW1vOworCitlbmQgU2FtcGxlLkN1cnNlc19EZW1vLkF0dHJpYnV0ZXM7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1hdHRyaWJ1dGVzLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLWF0dHJpYnV0ZXMuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOWI0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1hdHRyaWJ1dGVzLmFkcwpAQCAtMCwwICsxLDQ1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuQ3Vyc2VzX0RlbW8uQXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBTYW1wbGUuQ3Vyc2VzX0RlbW8uQXR0cmlidXRlcyBpcworCisgICBwcm9jZWR1cmUgRGVtbzsKKworZW5kIFNhbXBsZS5DdXJzZXNfRGVtby5BdHRyaWJ1dGVzOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tbW91c2UuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8tbW91c2UuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDY4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5hZGIKQEAgLTAsMCArMSwyMjAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkN1cnNlc19EZW1vLk1vdXNlICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0ODoxOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU87IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU87CisKK3dpdGggU2FtcGxlLkhlbHBlcnM7IHVzZSBTYW1wbGUuSGVscGVyczsKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0Oword2l0aCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsgdXNlIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOword2l0aCBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7IHVzZSBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7Cit3aXRoIFNhbXBsZS5FeHBsYW5hdGlvbjsgdXNlIFNhbXBsZS5FeHBsYW5hdGlvbjsKKworcGFja2FnZSBib2R5IFNhbXBsZS5DdXJzZXNfRGVtby5Nb3VzZSBpcworCisgICBwYWNrYWdlIEludF9JTyBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU8gKEludGVnZXIpOworICAgdXNlIEludF9JTzsKKworICAgcGFja2FnZSBCdXR0b25fSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTyAoTW91c2VfQnV0dG9uKTsKKyAgIHVzZSBCdXR0b25fSU87CisKKyAgIHBhY2thZ2UgU3RhdGVfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTyAoQnV0dG9uX1N0YXRlKTsKKyAgIHVzZSBTdGF0ZV9JTzsKKworICAgcHJvY2VkdXJlIERlbW8gaXMKKworICAgICAgdHlwZSBDb250cm9scyBpcyBhcnJheSAoMSAuLiAzKSBvZiBQYW5lbDsKKworICAgICAgRnJhbWUgOiBXaW5kb3c7CisgICAgICBNc2cgICA6IFdpbmRvdzsKKyAgICAgIEN0bCAgIDogQ29udHJvbHM7CisgICAgICBQYW4gICA6IFBhbmVsOworICAgICAgSyAgICAgOiBSZWFsX0tleV9Db2RlOworICAgICAgViAgICAgOiBDdXJzb3JfVmlzaWJpbGl0eSA6PSBJbnZpc2libGU7CisgICAgICBXICAgICA6IFdpbmRvdzsKKyAgICAgIE5vdGUgIDogV2luZG93OworICAgICAgTXNnX0wgOiBjb25zdGFudCBMaW5lX0NvdW50IDo9IDg7CisgICAgICBMaW5zICA6IExpbmVfUG9zaXRpb24gOj0gTGluZXM7CisgICAgICBDb2xzICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIE1hc2sgIDogRXZlbnRfTWFzazsKKyAgICAgIHByb2NlZHVyZSBTaG93X01vdXNlX0V2ZW50OworCisgICAgICBwcm9jZWR1cmUgU2hvd19Nb3VzZV9FdmVudAorICAgICAgaXMKKyAgICAgICAgIEV2dCAgICA6IGNvbnN0YW50IE1vdXNlX0V2ZW50IDo9IEdldF9Nb3VzZTsKKyAgICAgICAgIFkgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICBYICAgICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICBCdXR0b24gOiBNb3VzZV9CdXR0b247CisgICAgICAgICBTdGF0ZSAgOiBCdXR0b25fU3RhdGU7CisgICAgICAgICBXICAgICAgOiBXaW5kb3c7CisgICAgICBiZWdpbgorICAgICAgICAgR2V0X0V2ZW50IChFdnQsIFksIFgsIEJ1dHRvbiwgU3RhdGUpOworICAgICAgICAgUHV0IChNc2csICJFdmVudCBhdCIpOworICAgICAgICAgUHV0IChNc2csICIgIFg9Iik7ICAgIFB1dCAoTXNnLCBJbnRlZ2VyIChYKSwgMyk7CisgICAgICAgICBQdXQgKE1zZywgIiwgWT0iKTsgICAgUHV0IChNc2csIEludGVnZXIgKFkpLCAzKTsKKyAgICAgICAgIFB1dCAoTXNnLCAiLCBCdG49Iik7ICBQdXQgKE1zZywgQnV0dG9uLCAxMCk7CisgICAgICAgICBQdXQgKE1zZywgIiwgU3RhdD0iKTsgUHV0IChNc2csIFN0YXRlLCAxNSk7CisgICAgICAgICBmb3IgSSBpbiBDdGwnUmFuZ2UgbG9vcAorICAgICAgICAgICAgVyA6PSBHZXRfV2luZG93IChDdGwgKEkpKTsKKyAgICAgICAgICAgIGlmIEVuY2xvc2VkX0luX1dpbmRvdyAoVywgRXZ0KSB0aGVuCisgICAgICAgICAgICAgICBUcmFuc2Zvcm1fQ29vcmRpbmF0ZXMgKFcsIFksIFgsIEZyb21fU2NyZWVuKTsKKyAgICAgICAgICAgICAgIFB1dCAoTXNnLCAiLEJveCgiKTsKKyAgICAgICAgICAgICAgIFB1dCAoTXNnLCAoSSksIDEpOyBQdXQgKE1zZywgIiwiKTsKKyAgICAgICAgICAgICAgIFB1dCAoTXNnLCBJbnRlZ2VyIChZKSwgMSk7IFB1dCAoTXNnLCAiLCIpOworICAgICAgICAgICAgICAgUHV0IChNc2csIEludGVnZXIgKFgpLCAxKTsgUHV0IChNc2csICIpIik7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIE5ld19MaW5lIChNc2cpOworICAgICAgICAgRmx1c2ggKE1zZyk7CisgICAgICAgICBVcGRhdGVfUGFuZWxzOyBVcGRhdGVfU2NyZWVuOworICAgICAgZW5kIFNob3dfTW91c2VfRXZlbnQ7CisKKyAgIGJlZ2luCisgICAgICBQdXNoX0Vudmlyb25tZW50ICgiTU9VU0UwMCIpOworICAgICAgTm90ZXBhZCAoIk1PVVNFLVBBRDAwIik7CisgICAgICBEZWZhdWx0X0xhYmVsczsKKyAgICAgIFNldF9DdXJzb3JfVmlzaWJpbGl0eSAoVik7CisKKyAgICAgIE5vdGUgIDo9IE5vdGVwYWRfV2luZG93OworICAgICAgaWYgTm90ZSAvPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChOb3RlLCBMaW5zLCBDb2xzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEZyYW1lIDo9IENyZWF0ZSAoTXNnX0wsIENvbHVtbnMsIExpbnMgLSBNc2dfTCwgMCk7CisgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4gPT4gRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggPT4gKENvbG9yID0+IERlZmF1bHRfQ29sb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoICAgID0+ICcgJykpOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChXaW4gICA9PiBGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBEZWZhdWx0X0NvbG9ycyk7CisgICAgICAgICBFcmFzZSAoRnJhbWUpOworICAgICAgZW5kIGlmOworICAgICAgTXNnICAgOj0gRGVyaXZlZF9XaW5kb3cgKEZyYW1lLCBNc2dfTCAtIDIsIENvbHVtbnMgLSAyLCAxLCAxKTsKKyAgICAgIFBhbiAgIDo9IENyZWF0ZSAoRnJhbWUpOworCisgICAgICBTZXRfTWV0YV9Nb2RlOworICAgICAgU2V0X0tleVBhZF9Nb2RlOworICAgICAgTWFzayA6PSBTdGFydF9Nb3VzZTsKKworICAgICAgQm94IChGcmFtZSk7CisgICAgICBXaW5kb3dfVGl0bGUgKEZyYW1lLCAiTW91c2UgUHJvdG9jb2wiKTsKKyAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKEZyYW1lKTsKKyAgICAgIEFsbG93X1Njcm9sbGluZyAoTXNnLCBUcnVlKTsKKworICAgICAgZGVjbGFyZQorICAgICAgICAgTWlkZGxlX0NvbHVtbiA6IGNvbnN0YW50IEludGVnZXIgOj0gSW50ZWdlciAoQ29sdW1ucykgLyAyOworICAgICAgICAgTWlkZGxlX0luZGV4ICA6IGNvbnN0YW50IE5hdHVyYWwgOj0gQ3RsJ0ZpcnN0ICsgKEN0bCdMZW5ndGggLyAyKTsKKyAgICAgICAgIFdpZHRoICAgICAgICAgOiBjb25zdGFudCBDb2x1bW5fQ291bnQgOj0gNTsKKyAgICAgICAgIEhlaWdodCAgICAgICAgOiBjb25zdGFudCBMaW5lX0NvdW50ICAgOj0gMzsKKyAgICAgICAgIEhhbGYgICAgICAgICAgOiBjb25zdGFudCBDb2x1bW5fQ291bnQgOj0gV2lkdGggLyAyOworICAgICAgICAgU3BhY2UgICAgICAgICA6IGNvbnN0YW50IENvbHVtbl9Db3VudCA6PSAzOworICAgICAgICAgUG9zaXRpb24gICAgICA6IEludGVnZXI7CisgICAgICAgICBXICAgICAgICAgICAgIDogV2luZG93OworICAgICAgYmVnaW4KKyAgICAgICAgIGZvciBJIGluIEN0bCdSYW5nZSBsb29wCisgICAgICAgICAgICBQb3NpdGlvbiA6PSAoKEkpIC0gSW50ZWdlciAoTWlkZGxlX0luZGV4KSkgKgorICAgICAgICAgICAgICBJbnRlZ2VyIChIYWxmICsgU3BhY2UgKyBXaWR0aCkgKyBNaWRkbGVfQ29sdW1uOworICAgICAgICAgICAgVyA6PSBDcmVhdGUgKEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbl9Qb3NpdGlvbiAoUG9zaXRpb24pKTsKKyAgICAgICAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgICAgICAgU2V0X0JhY2tncm91bmQgKFdpbiA9PiBXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoID0+IChDb2xvciA9PiBNZW51X0JhY2tfQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggICAgPT4gJyAnKSk7CisgICAgICAgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKFdpbiAgID0+IFcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gTWVudV9Gb3JlX0NvbG9yKTsKKyAgICAgICAgICAgICAgIEVyYXNlIChXKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIEN0bCAoSSkgOj0gQ3JlYXRlIChXKTsKKyAgICAgICAgICAgIEJveCAoVyk7CisgICAgICAgICAgICBNb3ZlX0N1cnNvciAoVywgMSwgSGFsZik7CisgICAgICAgICAgICBQdXQgKFcsIChJKSwgMSk7CisgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChXKTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kOworCisgICAgICBVcGRhdGVfUGFuZWxzOyBVcGRhdGVfU2NyZWVuOworCisgICAgICBsb29wCisgICAgICAgICBLIDo9IEdldF9LZXk7CisgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICB3aGVuIFFVSVRfQ09ERSAgICAgPT4gZXhpdDsKKyAgICAgICAgICAgICAgIHdoZW4gSEVMUF9DT0RFICAgICA9PiBFeHBsYWluX0NvbnRleHQ7CisgICAgICAgICAgICAgICB3aGVuIEVYUExBSU5fQ09ERSAgPT4gRXhwbGFpbiAoIk1PVVNFS0VZUyIpOworICAgICAgICAgICAgICAgd2hlbiBLZXlfTW91c2UgICAgID0+IFNob3dfTW91c2VfRXZlbnQ7CisgICAgICAgICAgICAgICB3aGVuIG90aGVycyAgICAgICAgPT4gbnVsbDsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisKKyAgICAgIGZvciBJIGluIEN0bCdSYW5nZSBsb29wCisgICAgICAgICBXIDo9IEdldF9XaW5kb3cgKEN0bCAoSSkpOworICAgICAgICAgQ2xlYXIgKFcpOworICAgICAgICAgRGVsZXRlIChDdGwgKEkpKTsKKyAgICAgICAgIERlbGV0ZSAoVyk7CisgICAgICBlbmQgbG9vcDsKKworICAgICAgQ2xlYXIgKEZyYW1lKTsKKyAgICAgIERlbGV0ZSAoUGFuKTsKKyAgICAgIERlbGV0ZSAoTXNnKTsKKyAgICAgIERlbGV0ZSAoRnJhbWUpOworCisgICAgICBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFYpOworICAgICAgRW5kX01vdXNlIChNYXNrKTsKKworICAgICAgUG9wX0Vudmlyb25tZW50OworICAgICAgVXBkYXRlX1BhbmVsczsgVXBkYXRlX1NjcmVlbjsKKworICAgZW5kIERlbW87CisKK2VuZCBTYW1wbGUuQ3Vyc2VzX0RlbW8uTW91c2U7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3OGQwZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLW1vdXNlLmFkcwpAQCAtMCwwICsxLDQ1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5DdXJzZXNfRGVtby5Nb3VzZSAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBTYW1wbGUuQ3Vyc2VzX0RlbW8uTW91c2UgaXMKKworICAgcHJvY2VkdXJlIERlbW87CisKK2VuZCBTYW1wbGUuQ3Vyc2VzX0RlbW8uTW91c2U7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwZGE3NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkYgpAQCAtMCwwICsxLDE0MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuQ3Vyc2VzX0RlbW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTUgJAorLS0gICREYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7ICB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7ICB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YTsKKword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFNhbXBsZS5IZWxwZXJzOyB1c2UgU2FtcGxlLkhlbHBlcnM7Cit3aXRoIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsgdXNlIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsKKword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3dpdGggU2FtcGxlLk1lbnVfRGVtby5IYW5kbGVyOword2l0aCBTYW1wbGUuQ3Vyc2VzX0RlbW8uTW91c2U7Cit3aXRoIFNhbXBsZS5DdXJzZXNfRGVtby5BdHRyaWJ1dGVzOworCitwYWNrYWdlIGJvZHkgU2FtcGxlLkN1cnNlc19EZW1vIGlzCisKKyAgIHR5cGUgVXNlcl9EYXRhIGlzIG5ldyBJbnRlZ2VyOworICAgdHlwZSBVc2VyX0RhdGFfQWNjZXNzIGlzIGFjY2VzcyBhbGwgVXNlcl9EYXRhOworICAgcGFja2FnZSBQVUQgaXMgbmV3IFBhbmVscy5Vc2VyX0RhdGEgKFVzZXJfRGF0YSwgVXNlcl9EYXRhX0FjY2Vzcyk7CisgICAtLSAgV2UgdXNlIGFib3ZlIGluc3RhbnRpYXRpb24gb2YgdGhlIGdlbmVyaWMgVXNlcl9EYXRhIHBhY2thZ2UgdG8KKyAgIC0tICBkZW1vbnN0cmF0ZSBhbmQgdGVzdCB0aGUgdXNlIG9mIHRoZSB1c2VyIGRhdGEgbWFlY2hhbmlzbS4KKworICAgcHJvY2VkdXJlIERlbW8KKyAgIGlzCisgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKE0gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbiA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbjsKKyAgICAgIHBhY2thZ2UgTWggaXMgbmV3IFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlciAoTXlfRHJpdmVyKTsKKworICAgICAgSXRtIDogSXRlbV9BcnJheV9BY2Nlc3MgOj0gbmV3IEl0ZW1fQXJyYXknCisgICAgICAgIChOZXdfSXRlbSAoIkF0dHJpYnV0ZXMgRGVtbyIpLAorICAgICAgICAgTmV3X0l0ZW0gKCJNb3VzZSBEZW1vIiksCisgICAgICAgICBOdWxsX0l0ZW0pOworICAgICAgTSAgOiBNZW51IDo9IE5ld19NZW51IChJdG0pOworICAgICAgVTEgOiBjb25zdGFudCBVc2VyX0RhdGFfQWNjZXNzIDo9IG5ldyBVc2VyX0RhdGEnKDQ3MTEpOworICAgICAgVTIgOiBVc2VyX0RhdGFfQWNjZXNzOworCisgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKE0gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBhbiA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbgorICAgICAgaXMKKyAgICAgICAgIElkeCA6IGNvbnN0YW50IFBvc2l0aXZlIDo9IEdldF9JbmRleCAoQ3VycmVudCAoTSkpOworICAgICAgICAgUmVzdWx0IDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgIGJlZ2luCisgICAgICAgICBQVUQuU2V0X1VzZXJfRGF0YSAoUGFuLCBVMSk7IC0tICBzZXQgc29tZSB1c2VyIGRhdGEsIGp1c3QgZm9yIGZ1bgorICAgICAgICAgaWYgSyBpbiBVc2VyX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgIGlmIEsgPSBRVUlUIHRoZW4KKyAgICAgICAgICAgICAgIFJlc3VsdCA6PSBUcnVlOworICAgICAgICAgICAgZWxzaWYgSyA9IFNFTEVDVF9JVEVNIHRoZW4KKyAgICAgICAgICAgICAgIGlmIElkeCBpbiBJdG0nUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgICAgSGlkZSAoUGFuKTsKKyAgICAgICAgICAgICAgICAgIFVwZGF0ZV9QYW5lbHM7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBjYXNlIElkeCBpcworICAgICAgICAgICAgICAgICAgd2hlbiAxID0+IFNhbXBsZS5DdXJzZXNfRGVtby5BdHRyaWJ1dGVzLkRlbW87CisgICAgICAgICAgICAgICAgICB3aGVuIDIgPT4gU2FtcGxlLkN1cnNlc19EZW1vLk1vdXNlLkRlbW87CisgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBOb3RfSW1wbGVtZW50ZWQ7CisgICAgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgICAgICAgIGlmIElkeCBpbiBJdG0nUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgICAgVG9wIChQYW4pOworICAgICAgICAgICAgICAgICAgU2hvdyAoUGFuKTsKKyAgICAgICAgICAgICAgICAgIFVwZGF0ZV9QYW5lbHM7CisgICAgICAgICAgICAgICAgICBVcGRhdGVfU2NyZWVuOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgUFVELkdldF9Vc2VyX0RhdGEgKFBhbiwgVTIpOyAtLSAgZ2V0IHRoZSB1c2VyIGRhdGEKKyAgICAgICAgIHByYWdtYSBBc3NlcnQgKFUxLmFsbCA9IFUyLmFsbCBhbmQgdGhlbiBVMSA9IFUyKTsKKyAgICAgICAgIHJldHVybiBSZXN1bHQ7CisgICAgICBlbmQgTXlfRHJpdmVyOworCisgICBiZWdpbgorCisgICAgICBpZiAoMSArIEl0ZW1fQ291bnQgKE0pKSAvPSBJdG0nTGVuZ3RoIHRoZW4KKyAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICBlbmQgaWY7CisKKyAgICAgIGlmIG5vdCBIYXNfTW91c2UgdGhlbgorICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgTyA6IEl0ZW1fT3B0aW9uX1NldDsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBHZXRfT3B0aW9ucyAoSXRtICgyKSwgTyk7CisgICAgICAgICAgICBPLlNlbGVjdGFibGUgOj0gRmFsc2U7CisgICAgICAgICAgICBTZXRfT3B0aW9ucyAoSXRtICgyKSwgTyk7CisgICAgICAgICBlbmQ7CisgICAgICBlbmQgaWY7CisKKyAgICAgIFB1c2hfRW52aXJvbm1lbnQgKCJDVVJTRVMwMCIpOworICAgICAgTm90ZXBhZCAoIkNVUlNFUy1QQUQwMCIpOworICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKworICAgICAgTWguRHJpdmVfTWUgKE0sICIgRGVtbyAiKTsKKyAgICAgIFBvcF9FbnZpcm9ubWVudDsKKworICAgICAgRGVsZXRlIChNKTsKKyAgICAgIEZyZWUgKEl0bSwgVHJ1ZSk7CisgICBlbmQgRGVtbzsKKworZW5kIFNhbXBsZS5DdXJzZXNfRGVtbzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRhZDBmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRzCkBAIC0wLDAgKzEsNDUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkN1cnNlc19EZW1vICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFNhbXBsZS5DdXJzZXNfRGVtbyBpcworCisgICBwcm9jZWR1cmUgRGVtbzsKKworZW5kIFNhbXBsZS5DdXJzZXNfRGVtbzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmE4ZGViCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRiCkBAIC0wLDAgKzEsNDA4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkV4cGxhbmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4yMCAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgUG9vciBtYW5zIGhlbHAgc3lzdGVtLiBUaGlzIHNjYW5zIGEgc2VxdWVudGlhbCBmaWxlIGZvciBrZXkgbGluZXMgYW5kCistLSAgdGhlbiByZWFkcyB0aGUgbGluZXMgdXAgdG8gdGhlIG5leHQga2V5LiBUaG9zZSBsaW5lcyBhcmUgcHJlc2VudGVkIGluCistLSAgYSB3aW5kb3cgYXMgaGVscCBvciBleHBsYW5hdGlvbi4KKy0tCit3aXRoIEFkYS5UZXh0X0lPOyB1c2UgQWRhLlRleHRfSU87Cit3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKKword2l0aCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsgdXNlIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsgdXNlIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsKK3dpdGggU2FtcGxlLkhlbHBlcnM7IHVzZSBTYW1wbGUuSGVscGVyczsKKworcGFja2FnZSBib2R5IFNhbXBsZS5FeHBsYW5hdGlvbiBpcworCisgICBIZWxwX0tleXMgOiBjb25zdGFudCBTdHJpbmcgOj0gIkhFTFBLRVlTIjsKKyAgIEluX0hlbHAgICA6IGNvbnN0YW50IFN0cmluZyA6PSAiSU5IRUxQIjsKKworICAgRmlsZV9OYW1lIDogY29uc3RhbnQgU3RyaW5nIDo9ICJleHBsYWluLm1zZyI7CisgICBGIDogRmlsZV9UeXBlOworCisgICB0eXBlIEhlbHBfTGluZTsKKyAgIHR5cGUgSGVscF9MaW5lX0FjY2VzcyBpcyBhY2Nlc3MgSGVscF9MaW5lOworICAgcHJhZ21hIENvbnRyb2xsZWQgKEhlbHBfTGluZV9BY2Nlc3MpOworICAgdHlwZSBTdHJpbmdfQWNjZXNzIGlzIGFjY2VzcyBTdHJpbmc7CisgICBwcmFnbWEgQ29udHJvbGxlZCAoU3RyaW5nX0FjY2Vzcyk7CisKKyAgIHR5cGUgSGVscF9MaW5lIGlzCisgICAgICByZWNvcmQKKyAgICAgICAgIFByZXYsIE5leHQgOiBIZWxwX0xpbmVfQWNjZXNzOworICAgICAgICAgTGluZSA6IFN0cmluZ19BY2Nlc3M7CisgICAgICBlbmQgcmVjb3JkOworCisgICBwcm9jZWR1cmUgRXhwbGFpbiAoS2V5IDogaW4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdyk7CisKKyAgIHByb2NlZHVyZSBSZWxlYXNlX1N0cmluZyBpcworICAgICBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24gKFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdfQWNjZXNzKTsKKyAgIHByb2NlZHVyZSBSZWxlYXNlX0hlbHBfTGluZSBpcworICAgICBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24gKEhlbHBfTGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWxwX0xpbmVfQWNjZXNzKTsKKworICAgZnVuY3Rpb24gU2VhcmNoIChLZXkgOiBTdHJpbmcpIHJldHVybiBIZWxwX0xpbmVfQWNjZXNzOworICAgcHJvY2VkdXJlIFJlbGVhc2VfSGVscCAoUm9vdCA6IGluIG91dCBIZWxwX0xpbmVfQWNjZXNzKTsKKworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IGluIFN0cmluZykKKyAgIGlzCisgICBiZWdpbgorICAgICAgRXhwbGFpbiAoS2V5LCBOdWxsX1dpbmRvdyk7CisgICBlbmQgRXhwbGFpbjsKKworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpCisgICBpcworICAgICAgLS0gIFJldHJpZXZlIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSBhbmQgZGlzcGxheSBpdCBpbiB0aGlzCisgICAgICAtLSAgd2luZG93LiBJZiBubyB3aW5kb3cgYXJndW1lbnQgaXMgcGFzc2VkLCB0aGUgcm91dGluZSB3aWxsIGNyZWF0ZQorICAgICAgLS0gIGEgdGVtcG9yYXJ5IHdpbmRvdyBhbmQgdXNlIGl0LgorCisgICAgICBmdW5jdGlvbiBGaWx0ZXJfS2V5IHJldHVybiBSZWFsX0tleV9Db2RlOworICAgICAgcHJvY2VkdXJlIFVua25vd25fS2V5OworICAgICAgcHJvY2VkdXJlIFJlZG87CisgICAgICBwcm9jZWR1cmUgVG9fV2luZG93IChDICAgOiBpbiBvdXQgSGVscF9MaW5lX0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTW9yZSA6IGluIG91dCBCb29sZWFuKTsKKworICAgICAgRnJhbWUgOiBXaW5kb3cgOj0gTnVsbF9XaW5kb3c7CisKKyAgICAgIFcgOiBXaW5kb3cgOj0gV2luOworICAgICAgSyA6IFJlYWxfS2V5X0NvZGU7CisgICAgICBQIDogUGFuZWw7CisKKyAgICAgIEhlaWdodCAgIDogTGluZV9Db3VudDsKKyAgICAgIFdpZHRoICAgIDogQ29sdW1uX0NvdW50OworICAgICAgSGVscCAgICAgOiBIZWxwX0xpbmVfQWNjZXNzIDo9IFNlYXJjaCAoS2V5KTsKKyAgICAgIEN1cnJlbnQgIDogSGVscF9MaW5lX0FjY2VzczsKKyAgICAgIFRvcF9MaW5lIDogSGVscF9MaW5lX0FjY2VzczsKKworICAgICAgSGFzX01vcmUgOiBCb29sZWFuIDo9IFRydWU7CisKKyAgICAgIHByb2NlZHVyZSBVbmtub3duX0tleQorICAgICAgaXMKKyAgICAgIGJlZ2luCisgICAgICAgICBBZGQgKFcsICJIZWxwIG1lc3NhZ2Ugd2l0aCBJRCAiKTsKKyAgICAgICAgIEFkZCAoVywgS2V5KTsKKyAgICAgICAgIEFkZCAoVywgIiBub3QgZm91bmQuIik7CisgICAgICAgICBBZGQgKFcsIENoYXJhY3RlcidWYWwgKDEwKSk7CisgICAgICAgICBBZGQgKFcsICJQcmVzcyB0aGUgRnVuY3Rpb24ga2V5IGxhYmVsbGVkICdRdWl0JyBrZXkgdG8gY29udGludWUuIik7CisgICAgICBlbmQgVW5rbm93bl9LZXk7CisKKyAgICAgIHByb2NlZHVyZSBSZWRvCisgICAgICBpcworICAgICAgICAgSCA6IEhlbHBfTGluZV9BY2Nlc3MgOj0gVG9wX0xpbmU7CisgICAgICBiZWdpbgorICAgICAgICAgaWYgVG9wX0xpbmUgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICBmb3IgTCBpbiAwIC4uIChIZWlnaHQgLSAxKSBsb29wCisgICAgICAgICAgICAgICBBZGQgKFcsIEwsIDAsIEguTGluZS5hbGwpOworICAgICAgICAgICAgICAgZXhpdCB3aGVuIEguTmV4dCA9IG51bGw7CisgICAgICAgICAgICAgICBIIDo9IEguTmV4dDsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgVW5rbm93bl9LZXk7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgUmVkbzsKKworICAgICAgZnVuY3Rpb24gRmlsdGVyX0tleSByZXR1cm4gUmVhbF9LZXlfQ29kZQorICAgICAgaXMKKyAgICAgICAgIEsgOiBSZWFsX0tleV9Db2RlOworICAgICAgYmVnaW4KKyAgICAgICAgIGxvb3AKKyAgICAgICAgICAgIEsgOj0gR2V0X0tleSAoVyk7CisgICAgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICAgICB3aGVuIEhFTFBfQ09ERSA9PgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IEZpbmRfQ29udGV4dCAoSW5fSGVscCkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgUHVzaF9FbnZpcm9ubWVudCAoSW5fSGVscCwgRmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgRXhwbGFpbiAoSW5fSGVscCwgVyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQb3BfRW52aXJvbm1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWRvOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgd2hlbiBFWFBMQUlOX0NPREUgPT4KKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBGaW5kX0NvbnRleHQgKEhlbHBfS2V5cykgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgUHVzaF9FbnZpcm9ubWVudCAoSGVscF9LZXlzLCBGYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBFeHBsYWluIChIZWxwX0tleXMsIFcpOworICAgICAgICAgICAgICAgICAgICAgICAgUG9wX0Vudmlyb25tZW50OworICAgICAgICAgICAgICAgICAgICAgICAgUmVkbzsKKyAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IGV4aXQ7CisgICAgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIHJldHVybiBLOworICAgICAgZW5kIEZpbHRlcl9LZXk7CisKKyAgICAgIHByb2NlZHVyZSBUb19XaW5kb3cgKEMgICA6IGluIG91dCBIZWxwX0xpbmVfQWNjZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICBNb3JlIDogaW4gb3V0IEJvb2xlYW4pCisgICAgICBpcworICAgICAgICAgTCA6IExpbmVfUG9zaXRpb24gOj0gMDsKKyAgICAgIGJlZ2luCisgICAgICAgICBsb29wCisgICAgICAgICAgICBBZGQgKFcsIEwsIDAsIEMuTGluZS5hbGwpOworICAgICAgICAgICAgTCA6PSBMICsgMTsKKyAgICAgICAgICAgIGV4aXQgd2hlbiBDLk5leHQgPSBudWxsIG9yIGVsc2UgTCA9IEhlaWdodDsKKyAgICAgICAgICAgIEMgOj0gQy5OZXh0OworICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICBpZiBDLk5leHQgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICBwcmFnbWEgQXNzZXJ0IChMID0gSGVpZ2h0KTsKKyAgICAgICAgICAgIE1vcmUgOj0gVHJ1ZTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE1vcmUgOj0gRmFsc2U7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgVG9fV2luZG93OworCisgICBiZWdpbgorICAgICAgaWYgVyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIFB1c2hfRW52aXJvbm1lbnQgKCJIRUxQIik7CisgICAgICAgICBEZWZhdWx0X0xhYmVsczsKKyAgICAgICAgIEZyYW1lIDo9IE5ld19XaW5kb3cgKExpbmVzIC0gMiwgQ29sdW1ucywgMCwgMCk7CisgICAgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4gPT4gRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggID0+IChDaCAgICA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBIZWxwX0NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICAgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKFdpbiAgID0+IEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IEhlbHBfQ29sb3IpOworICAgICAgICAgICAgRXJhc2UgKEZyYW1lKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIEJveCAoRnJhbWUpOworICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzIChGcmFtZSwgKFJldmVyc2VfVmlkZW8gPT4gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgICAgICAgID0+IEZhbHNlKSk7CisgICAgICAgICBBZGQgKEZyYW1lLCBMaW5lcyAtIDMsIDIsICJDdXJzb3IgVXAvRG93biBzY3JvbGxzIik7CisgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKEZyYW1lKTsgLS0gQmFjayB0byBkZWZhdWx0LgorICAgICAgICAgV2luZG93X1RpdGxlIChGcmFtZSwgIkV4cGxhbmF0aW9uIik7CisgICAgICAgICBXIDo9IERlcml2ZWRfV2luZG93IChGcmFtZSwgTGluZXMgLSA0LCBDb2x1bW5zIC0gMiwgMSwgMSk7CisgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChGcmFtZSk7CisgICAgICAgICBHZXRfU2l6ZSAoVywgSGVpZ2h0LCBXaWR0aCk7CisgICAgICAgICBTZXRfTWV0YV9Nb2RlIChXKTsKKyAgICAgICAgIFNldF9LZXlQYWRfTW9kZSAoVyk7CisgICAgICAgICBBbGxvd19TY3JvbGxpbmcgKFcsIFRydWUpOworICAgICAgICAgU2V0X0VjaG9fTW9kZSAoRmFsc2UpOworICAgICAgICAgUCA6PSBDcmVhdGUgKEZyYW1lKTsKKyAgICAgICAgIFRvcCAoUCk7CisgICAgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgZWxzZQorICAgICAgICAgQ2xlYXIgKFcpOworICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZSAoVyk7CisgICAgICBlbmQgaWY7CisKKyAgICAgIEN1cnJlbnQgOj0gSGVscDsgVG9wX0xpbmUgOj0gSGVscDsKKworICAgICAgaWYgbnVsbCA9IEhlbHAgdGhlbgorICAgICAgICAgVW5rbm93bl9LZXk7CisgICAgICAgICBsb29wCisgICAgICAgICAgICBLIDo9IEZpbHRlcl9LZXk7CisgICAgICAgICAgICBleGl0IHdoZW4gSyA9IFFVSVRfQ09ERTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZWxzZQorICAgICAgICAgVG9fV2luZG93IChDdXJyZW50LCBIYXNfTW9yZSk7CisgICAgICAgICBpZiBIYXNfTW9yZSB0aGVuCisgICAgICAgICAgICAtLSAgVGhpcyBtZWFucyB0aGVyZSBhcmUgbW9yZSBsaW5lcyBhdmFpbGFibGUsIHNvIHdlIGhhdmUgdG8gZ28KKyAgICAgICAgICAgIC0tICBpbnRvIGEgc2Nyb2xsIG1hbmFnZXIuCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICBLIDo9IEZpbHRlcl9LZXk7CisgICAgICAgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfRG93biA9PgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgQ3VycmVudC5OZXh0IC89IG51bGwgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZV9DdXJzb3IgKFcsIEhlaWdodCAtIDEsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsIChXLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gQ3VycmVudC5OZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9wX0xpbmUgOj0gVG9wX0xpbmUuTmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCAoVywgQ3VycmVudC5MaW5lLmFsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfVXAgPT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFRvcF9MaW5lLlByZXYgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoVywgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGwgKFcsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvcF9MaW5lIDo9IFRvcF9MaW5lLlByZXY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IDo9IEN1cnJlbnQuUHJldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCAoVywgVG9wX0xpbmUuTGluZS5hbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgd2hlbiBRVUlUX0NPREUgPT4gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IG51bGw7CisgICAgICAgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgSyA6PSBGaWx0ZXJfS2V5OworICAgICAgICAgICAgICAgZXhpdCB3aGVuIEsgPSBRVUlUX0NPREU7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgQ2xlYXIgKFcpOworCisgICAgICBpZiBGcmFtZSAvPSBOdWxsX1dpbmRvdyB0aGVuCisgICAgICAgICBDbGVhciAoRnJhbWUpOworICAgICAgICAgRGVsZXRlIChQKTsKKyAgICAgICAgIERlbGV0ZSAoVyk7CisgICAgICAgICBEZWxldGUgKEZyYW1lKTsKKyAgICAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgICAgIGVuZCBpZjsKKworICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgIFVwZGF0ZV9TY3JlZW47CisKKyAgICAgIFJlbGVhc2VfSGVscCAoSGVscCk7CisKKyAgIGVuZCBFeHBsYWluOworCisgICBmdW5jdGlvbiBTZWFyY2ggKEtleSA6IFN0cmluZykgcmV0dXJuIEhlbHBfTGluZV9BY2Nlc3MKKyAgIGlzCisgICAgICBMYXN0ICAgIDogTmF0dXJhbDsKKyAgICAgIEJ1ZmZlciAgOiBTdHJpbmcgKDEgLi4gMjU2KTsKKyAgICAgIFJvb3QgICAgOiBIZWxwX0xpbmVfQWNjZXNzIDo9IG51bGw7CisgICAgICBDdXJyZW50IDogSGVscF9MaW5lX0FjY2VzczsKKyAgICAgIFRhaWwgICAgOiBIZWxwX0xpbmVfQWNjZXNzIDo9IG51bGw7CisKKyAgICAgIGZ1bmN0aW9uIE5leHRfTGluZSByZXR1cm4gQm9vbGVhbjsKKworICAgICAgZnVuY3Rpb24gTmV4dF9MaW5lIHJldHVybiBCb29sZWFuCisgICAgICBpcworICAgICAgICAgSF9FbmQgOiBjb25zdGFudCBTdHJpbmcgOj0gIiNFTkQiOworICAgICAgYmVnaW4KKyAgICAgICAgIEdldF9MaW5lIChGLCBCdWZmZXIsIExhc3QpOworICAgICAgICAgaWYgTGFzdCA9IEhfRW5kJ0xlbmd0aCBhbmQgdGhlbiBIX0VuZCA9IEJ1ZmZlciAoMSAuLiBMYXN0KSB0aGVuCisgICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBOZXh0X0xpbmU7CisgICBiZWdpbgorICAgICAgUmVzZXQgKEYpOworICAgICAgT3V0ZXIgOgorICAgICAgbG9vcAorICAgICAgICAgZXhpdCBPdXRlciB3aGVuIG5vdCBOZXh0X0xpbmU7CisgICAgICAgICBpZiBMYXN0ID0gKDEgKyBLZXknTGVuZ3RoKSBhbmQgdGhlbiBLZXkgPSBCdWZmZXIgKDIgLi4gTGFzdCkKKyAgICAgICAgICAgYW5kIHRoZW4gQnVmZmVyICgxKSA9ICcjJyB0aGVuCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICBleGl0IHdoZW4gbm90IE5leHRfTGluZTsKKyAgICAgICAgICAgICAgIGV4aXQgd2hlbiBCdWZmZXIgKDEpID0gJyMnOworICAgICAgICAgICAgICAgQ3VycmVudCA6PSBuZXcgSGVscF9MaW5lJyhudWxsLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nJyhCdWZmZXIgKDEgLi4gTGFzdCkpKTsKKyAgICAgICAgICAgICAgIGlmIFRhaWwgPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgICAgIFJlbGVhc2VfSGVscCAoUm9vdCk7CisgICAgICAgICAgICAgICAgICBSb290IDo9IEN1cnJlbnQ7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBUYWlsLk5leHQgOj0gQ3VycmVudDsKKyAgICAgICAgICAgICAgICAgIEN1cnJlbnQuUHJldiA6PSBUYWlsOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgVGFpbCA6PSBDdXJyZW50OworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICAgICBleGl0IE91dGVyOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3AgT3V0ZXI7CisgICAgICByZXR1cm4gUm9vdDsKKyAgIGVuZCBTZWFyY2g7CisKKyAgIHByb2NlZHVyZSBSZWxlYXNlX0hlbHAgKFJvb3QgOiBpbiBvdXQgSGVscF9MaW5lX0FjY2VzcykKKyAgIGlzCisgICAgICBOZXh0IDogSGVscF9MaW5lX0FjY2VzczsKKyAgIGJlZ2luCisgICAgICBsb29wCisgICAgICAgICBleGl0IHdoZW4gUm9vdCA9IG51bGw7CisgICAgICAgICBOZXh0IDo9IFJvb3QuTmV4dDsKKyAgICAgICAgIFJlbGVhc2VfU3RyaW5nIChSb290LkxpbmUpOworICAgICAgICAgUmVsZWFzZV9IZWxwX0xpbmUgKFJvb3QpOworICAgICAgICAgUm9vdCA6PSBOZXh0OworICAgICAgZW5kIGxvb3A7CisgICBlbmQgUmVsZWFzZV9IZWxwOworCisgICBwcm9jZWR1cmUgRXhwbGFpbl9Db250ZXh0CisgICBpcworICAgYmVnaW4KKyAgICAgIEV4cGxhaW4gKENvbnRleHQpOworICAgZW5kIEV4cGxhaW5fQ29udGV4dDsKKworICAgcHJvY2VkdXJlIE5vdGVwYWQgKEtleSA6IGluIFN0cmluZykKKyAgIGlzCisgICAgICBIIDogY29uc3RhbnQgSGVscF9MaW5lX0FjY2VzcyA6PSBTZWFyY2ggKEtleSk7CisgICAgICBUIDogSGVscF9MaW5lX0FjY2VzcyA6PSBIOworICAgICAgTiA6IExpbmVfQ291bnQgOj0gMTsKKyAgICAgIEwgOiBMaW5lX1Bvc2l0aW9uIDo9IDA7CisgICAgICBXIDogV2luZG93OworICAgICAgUCA6IFBhbmVsOworICAgYmVnaW4KKyAgICAgIGlmIEggLz0gbnVsbCB0aGVuCisgICAgICAgICBsb29wCisgICAgICAgICAgICBUIDo9IFQuTmV4dDsKKyAgICAgICAgICAgIGV4aXQgd2hlbiBUID0gbnVsbDsKKyAgICAgICAgICAgIE4gOj0gTiArIDE7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIFcgOj0gTmV3X1dpbmRvdyAoTiArIDIsIENvbHVtbnMsIExpbmVzIC0gTiAtIDIsIDApOworICAgICAgICAgaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICAgICBTZXRfQmFja2dyb3VuZCAoV2luID0+IFcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggID0+IChDaCAgICA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBOb3RlcGFkX0NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICAgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKFdpbiAgID0+IFcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gTm90ZXBhZF9Db2xvcik7CisgICAgICAgICAgICBFcmFzZSAoVyk7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBCb3ggKFcpOworICAgICAgICAgV2luZG93X1RpdGxlIChXLCAiTm90ZXBhZCIpOworICAgICAgICAgUCA6PSBOZXdfUGFuZWwgKFcpOworICAgICAgICAgVCA6PSBIOworICAgICAgICAgbG9vcAorICAgICAgICAgICAgQWRkIChXLCBMICsgMSwgMSwgVC5MaW5lLmFsbCwgSW50ZWdlciAoQ29sdW1ucyAtIDIpKTsKKyAgICAgICAgICAgIEwgOj0gTCArIDE7CisgICAgICAgICAgICBUIDo9IFQuTmV4dDsKKyAgICAgICAgICAgIGV4aXQgd2hlbiBUID0gbnVsbDsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgVCA6PSBIOworICAgICAgICAgUmVsZWFzZV9IZWxwIChUKTsKKyAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKFcpOworICAgICAgICAgTm90ZXBhZF9Ub19Db250ZXh0IChQKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBOb3RlcGFkOworCitiZWdpbgorICAgT3BlbiAoRiwgSW5fRmlsZSwgRmlsZV9OYW1lKTsKK2VuZCBTYW1wbGUuRXhwbGFuYXRpb247CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2MTdhYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkcwpAQCAtMCwwICsxLDU5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkV4cGxhbmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBQb29yIG1hbnMgaGVscCBzeXN0ZW0uIFRoaXMgc2NhbnMgYSBzZXF1ZW50aWFsIGZpbGUgZm9yIGtleSBsaW5lcyBhbmQKKy0tICB0aGVuIHJlYWRzIHRoZSBsaW5lcyB1cCB0byB0aGUgbmV4dCBrZXkuIFRob3NlIGxpbmVzIGFyZSBwcmVzZW50ZWQgaW4KKy0tICBhIHdpbmRvdyBhcyBoZWxwIG9yIGV4cGxhbmF0aW9uLgorLS0KK3BhY2thZ2UgU2FtcGxlLkV4cGxhbmF0aW9uIGlzCisKKyAgIHByb2NlZHVyZSBFeHBsYWluIChLZXkgOiBpbiBTdHJpbmcpOworICAgLS0gIFJldHJpZXZlIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSBhbmQgZGlzcGxheSBpdC4KKworICAgcHJvY2VkdXJlIEV4cGxhaW5fQ29udGV4dDsKKyAgIC0tICBFeHBsYWluIHRoZSBjdXJyZW50IGNvbnRleHQuCisKKyAgIHByb2NlZHVyZSBOb3RlcGFkIChLZXkgOiBpbiBTdHJpbmcpOworICAgLS0gIFB1dCBhIG5vdGUgb24gdGhlIHNjcmVlbiBhbmQgbWFpbnRhaW4gaXQgd2l0aCB0aGUgY29udGV4dAorCisgICBFeHBsYW5hdGlvbl9Ob3RfRm91bmQgOiBleGNlcHRpb247CisgICBFeHBsYW5hdGlvbl9FcnJvciAgICAgOiBleGNlcHRpb247CisKK2VuZCBTYW1wbGUuRXhwbGFuYXRpb247CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1hdXguYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzk3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgpAQCAtMCwwICsxLDI2MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRm9ybV9EZW1vLkF1eCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTYgJAorLS0gICREYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOyB1c2UgQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKKword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFNhbXBsZS5IZWxwZXJzOyB1c2UgU2FtcGxlLkhlbHBlcnM7Cit3aXRoIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOyB1c2UgU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7Cit3aXRoIFNhbXBsZS5FeHBsYW5hdGlvbjsgdXNlIFNhbXBsZS5FeHBsYW5hdGlvbjsKKworcGFja2FnZSBib2R5IFNhbXBsZS5Gb3JtX0RlbW8uQXV4IGlzCisKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoRiAgOiBpbiAgRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgTCAgOiBvdXQgTGluZV9Db3VudDsgICAgICAgIC0tIExpbmVzIHVzZWQgZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgQyAgOiBvdXQgQ29sdW1uX0NvdW50OyAgICAgIC0tIENvbHVtbnMgdXNlZCBmb3IgbWVudQorICAgICAgICAgICAgICAgICAgICAgICBZICA6IG91dCBMaW5lX1Bvc2l0aW9uOyAgICAgLS0gUHJvcG9zZWQgTGluZSBmb3IgbWVudQorICAgICAgICAgICAgICAgICAgICAgICBYICA6IG91dCBDb2x1bW5fUG9zaXRpb24pICAgLS0gUHJvcG9zZWQgQ29sdW1uIGZvciBtZW51CisgICBpcworICAgYmVnaW4KKyAgICAgIFNjYWxlIChGLCBMLCBDKTsKKworICAgICAgTCA6PSBMICsgMjsgIC0tIGNvdW50IGZvciBmcmFtZSBhdCB0b3AgYW5kIGJvdHRvbQorICAgICAgQyA6PSBDICsgMjsgIC0tICIKKworICAgICAgLS0gIENhbGN1bGF0ZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgYXQgdGhlIHNjcmVlbiBjZW50ZXIKKyAgICAgIFggOj0gKENvbHVtbnMgLSBDKSAvIDI7CisgICAgICBZIDo9IDE7IC0tIHN0YXJ0IGFsd2F5cyBpbiBsaW5lIDEKKyAgIGVuZCBHZW9tZXRyeTsKKworICAgZnVuY3Rpb24gQ3JlYXRlIChGICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gUGFuZWwKKyAgIGlzCisgICAgICBXLCBTIDogV2luZG93OworICAgICAgTCA6IExpbmVfQ291bnQ7CisgICAgICBDIDogQ29sdW1uX0NvdW50OworICAgICAgWSA6IExpbmVfUG9zaXRpb247CisgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgUGFuIDogUGFuZWw7CisgICBiZWdpbgorICAgICAgR2VvbWV0cnkgKEYsIEwsIEMsIFksIFgpOworICAgICAgVyA6PSBOZXdfV2luZG93IChMLCBDLCBMaW4sIENvbCk7CisgICAgICBTZXRfTWV0YV9Nb2RlIChXKTsKKyAgICAgIFNldF9LZXlQYWRfTW9kZSAoVyk7CisgICAgICBpZiBIYXNfQ29sb3JzIHRoZW4KKyAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChXaW4gPT4gVywKKyAgICAgICAgICAgICAgICAgICAgICAgICBDaCAgPT4gKENoICAgID0+ICcgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IERlZmF1bHRfQ29sb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKFdpbiA9PiBXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBEZWZhdWx0X0NvbG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKTsKKyAgICAgICAgIEVyYXNlIChXKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFMgOj0gRGVyaXZlZF9XaW5kb3cgKFcsIEwgLSAyLCBDIC0gMiwgMSwgMSk7CisgICAgICBTZXRfTWV0YV9Nb2RlIChTKTsKKyAgICAgIFNldF9LZXlQYWRfTW9kZSAoUyk7CisgICAgICBCb3ggKFcpOworICAgICAgU2V0X1dpbmRvdyAoRiwgVyk7CisgICAgICBTZXRfU3ViX1dpbmRvdyAoRiwgUyk7CisgICAgICBpZiBUaXRsZSdMZW5ndGggPiAwIHRoZW4KKyAgICAgICAgIFdpbmRvd19UaXRsZSAoVywgVGl0bGUpOworICAgICAgZW5kIGlmOworICAgICAgUGFuIDo9IE5ld19QYW5lbCAoVyk7CisgICAgICBQb3N0IChGKTsKKyAgICAgIHJldHVybiBQYW47CisgICBlbmQgQ3JlYXRlOworCisgICBwcm9jZWR1cmUgRGVzdHJveSAoRiA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgUCA6IGluIG91dCBQYW5lbCkKKyAgIGlzCisgICAgICBXLCBTIDogV2luZG93OworICAgYmVnaW4KKyAgICAgIFcgOj0gR2V0X1dpbmRvdyAoRik7CisgICAgICBTIDo9IEdldF9TdWJfV2luZG93IChGKTsKKyAgICAgIFBvc3QgKEYsIEZhbHNlKTsKKyAgICAgIEVyYXNlIChXKTsKKyAgICAgIERlbGV0ZSAoUCk7CisgICAgICBTZXRfV2luZG93IChGLCBOdWxsX1dpbmRvdyk7CisgICAgICBTZXRfU3ViX1dpbmRvdyAoRiwgTnVsbF9XaW5kb3cpOworICAgICAgRGVsZXRlIChTKTsKKyAgICAgIERlbGV0ZSAoVyk7CisgICAgICBVcGRhdGVfUGFuZWxzOworICAgZW5kIERlc3Ryb3k7CisKKyAgIGZ1bmN0aW9uIEdldF9SZXF1ZXN0IChGICAgICAgICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgUCAgICAgICAgICAgOiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVfQ1JMRiA6IEJvb2xlYW4gOj0gVHJ1ZSkgcmV0dXJuIEtleV9Db2RlCisgICBpcworICAgICAgVyAgOiBjb25zdGFudCBXaW5kb3cgOj0gR2V0X1dpbmRvdyAoRik7CisgICAgICBLICA6IFJlYWxfS2V5X0NvZGU7CisgICAgICBDaCA6IENoYXJhY3RlcjsKKyAgIGJlZ2luCisgICAgICBUb3AgKFApOworICAgICAgbG9vcAorICAgICAgICAgSyA6PSBHZXRfS2V5IChXKTsKKyAgICAgICAgIGlmIEsgaW4gU3BlY2lhbF9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICBjYXNlIEsgaXMKKyAgICAgICAgICAgICAgIHdoZW4gSEVMUF9DT0RFICAgICAgICAgICAgID0+IEV4cGxhaW5fQ29udGV4dDsKKyAgICAgICAgICAgICAgIHdoZW4gRVhQTEFJTl9DT0RFICAgICAgICAgID0+IEV4cGxhaW4gKCJGT1JNS0VZUyIpOworICAgICAgICAgICAgICAgd2hlbiBLZXlfSG9tZSAgICAgICAgICAgICAgPT4gcmV0dXJuIEZfRmlyc3RfRmllbGQ7CisgICAgICAgICAgICAgICB3aGVuIEtleV9FbmQgICAgICAgICAgICAgICA9PiByZXR1cm4gRl9MYXN0X0ZpZWxkOworICAgICAgICAgICAgICAgd2hlbiBRVUlUX0NPREUgICAgICAgICAgICAgPT4gcmV0dXJuIFFVSVQ7CisgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfRG93biAgICAgICA9PiByZXR1cm4gRl9Eb3duX0NoYXI7CisgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfVXAgICAgICAgICA9PiByZXR1cm4gRl9VcF9DaGFyOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0xlZnQgICAgICAgPT4gcmV0dXJuIEZfUHJldmlvdXNfQ2hhcjsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9SaWdodCAgICAgID0+IHJldHVybiBGX05leHRfQ2hhcjsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X05leHRfUGFnZSAgICAgICAgID0+IHJldHVybiBGX05leHRfUGFnZTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X1ByZXZpb3VzX1BhZ2UgICAgID0+IHJldHVybiBGX1ByZXZpb3VzX1BhZ2U7CisgICAgICAgICAgICAgICB3aGVuIEtleV9CYWNrc3BhY2UgICAgICAgICA9PiByZXR1cm4gRl9EZWxldGVfUHJldmlvdXM7CisgICAgICAgICAgICAgICB3aGVuIEtleV9DbGVhcl9TY3JlZW4gICAgICA9PiByZXR1cm4gRl9DbGVhcl9GaWVsZDsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0NsZWFyX0VuZF9PZl9MaW5lID0+IHJldHVybiBGX0NsZWFyX0VPRjsKKyAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzICAgICAgICAgICAgICAgID0+IHJldHVybiBLOworICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBlbHNpZiBLIGluIE5vcm1hbF9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICBDaCA6PSBDaGFyYWN0ZXInVmFsIChLKTsKKyAgICAgICAgICAgIGNhc2UgQ2ggaXMKKyAgICAgICAgICAgICAgIHdoZW4gQ0FOID0+IHJldHVybiBRVUlUOyAgICAgICAgICAgICAgICAgIC0tIENUUkwtWAorCisgICAgICAgICAgICAgICB3aGVuIEFDSyA9PiByZXR1cm4gRl9OZXh0X0ZpZWxkOyAgICAgICAgICAtLSBDVFJMLUYKKyAgICAgICAgICAgICAgIHdoZW4gU1RYID0+IHJldHVybiBGX1ByZXZpb3VzX0ZpZWxkOyAgICAgIC0tIENUUkwtQgorICAgICAgICAgICAgICAgd2hlbiBGRiAgPT4gcmV0dXJuIEZfTGVmdF9GaWVsZDsgICAgICAgICAgLS0gQ1RSTC1MCisgICAgICAgICAgICAgICB3aGVuIERDMiA9PiByZXR1cm4gRl9SaWdodF9GaWVsZDsgICAgICAgICAtLSBDVFJMLVIKKyAgICAgICAgICAgICAgIHdoZW4gTkFLID0+IHJldHVybiBGX1VwX0ZpZWxkOyAgICAgICAgICAgIC0tIENUUkwtVQorICAgICAgICAgICAgICAgd2hlbiBFT1QgPT4gcmV0dXJuIEZfRG93bl9GaWVsZDsgICAgICAgICAgLS0gQ1RSTC1ECisKKyAgICAgICAgICAgICAgIHdoZW4gRVRCID0+IHJldHVybiBGX05leHRfV29yZDsgICAgICAgICAgIC0tIENUUkwtVworICAgICAgICAgICAgICAgd2hlbiBEQzQgPT4gcmV0dXJuIEZfUHJldmlvdXNfV29yZDsgICAgICAgLS0gQ1RSTC1UCisKKyAgICAgICAgICAgICAgIHdoZW4gU09IID0+IHJldHVybiBGX0JlZ2luX0ZpZWxkOyAgICAgICAgIC0tIENUUkwtQQorICAgICAgICAgICAgICAgd2hlbiBFTlEgPT4gcmV0dXJuIEZfRW5kX0ZpZWxkOyAgICAgICAgICAgLS0gQ1RSTC1FCisKKyAgICAgICAgICAgICAgIHdoZW4gSFQgID0+IHJldHVybiBGX0luc2VydF9DaGFyOyAgICAgICAgIC0tIENUUkwtSQorICAgICAgICAgICAgICAgd2hlbiBTSSAgPT4gcmV0dXJuIEZfSW5zZXJ0X0xpbmU7ICAgICAgICAgLS0gQ1RSTC1PCisgICAgICAgICAgICAgICB3aGVuIFNZTiA9PiByZXR1cm4gRl9EZWxldGVfQ2hhcjsgICAgICAgICAtLSBDVFJMLVYKKyAgICAgICAgICAgICAgIHdoZW4gQlMgID0+IHJldHVybiBGX0RlbGV0ZV9QcmV2aW91czsgICAgIC0tIENUUkwtSAorICAgICAgICAgICAgICAgd2hlbiBFTSAgPT4gcmV0dXJuIEZfRGVsZXRlX0xpbmU7ICAgICAgICAgLS0gQ1RSTC1ZCisgICAgICAgICAgICAgICB3aGVuIEJFTCA9PiByZXR1cm4gRl9EZWxldGVfV29yZDsgICAgICAgICAtLSBDVFJMLUcKKyAgICAgICAgICAgICAgIHdoZW4gVlQgID0+IHJldHVybiBGX0NsZWFyX0VPRjsgICAgICAgICAgIC0tIENUUkwtSworCisgICAgICAgICAgICAgICB3aGVuIFNPICA9PiByZXR1cm4gRl9OZXh0X0Nob2ljZTsgICAgICAgICAtLSBDVFJMLU4KKyAgICAgICAgICAgICAgIHdoZW4gRExFID0+IHJldHVybiBGX1ByZXZpb3VzX0Nob2ljZTsgICAgIC0tIENUUkwtUAorCisgICAgICAgICAgICAgICB3aGVuIENSIHwgTEYgID0+CisgICAgICAgICAgICAgICAgICBpZiBIYW5kbGVfQ1JMRiB0aGVuCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRl9OZXdfTGluZTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBLOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gcmV0dXJuIEs7CisgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBLOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgR2V0X1JlcXVlc3Q7CisKKyAgIGZ1bmN0aW9uIE1ha2UgKFRvcCAgICAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIExlZnQgICAgICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgVGV4dCAgICAgICAgOiBTdHJpbmcpIHJldHVybiBGaWVsZAorICAgaXMKKyAgICAgIEZsZCA6IEZpZWxkOworICAgICAgQyA6IGNvbnN0YW50IENvbHVtbl9Db3VudCA6PSBDb2x1bW5fQ291bnQgKFRleHQnTGVuZ3RoKTsKKyAgIGJlZ2luCisgICAgICBGbGQgOj0gTmV3X0ZpZWxkICgxLCBDLCBUb3AsIExlZnQpOworICAgICAgU2V0X0J1ZmZlciAoRmxkLCAwLCBUZXh0KTsKKyAgICAgIFN3aXRjaF9PcHRpb25zIChGbGQsIChBY3RpdmUgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSwgRmFsc2UpOworICAgICAgaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoRmxkID0+IEZsZCwgQ29sb3IgPT4gRGVmYXVsdF9Db2xvcnMpOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEZsZDsKKyAgIGVuZCBNYWtlOworCisgICBmdW5jdGlvbiBNYWtlICAoSGVpZ2h0ICAgICAgOiBMaW5lX0NvdW50IDo9IDE7CisgICAgICAgICAgICAgICAgICAgV2lkdGggICAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgVG9wICAgICAgICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIExlZnQgICAgICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIE9mZl9TY3JlZW4gIDogTmF0dXJhbCA6PSAwKSByZXR1cm4gRmllbGQKKyAgIGlzCisgICAgICBGbGQgOiBjb25zdGFudCBGaWVsZCA6PSBOZXdfRmllbGQgKEhlaWdodCwgV2lkdGgsIFRvcCwgTGVmdCwgT2ZmX1NjcmVlbik7CisgICBiZWdpbgorICAgICAgaWYgSGFzX0NvbG9ycyB0aGVuCisgICAgICAgICBTZXRfRm9yZWdyb3VuZCAoRmxkID0+IEZsZCwgQ29sb3IgPT4gRm9ybV9Gb3JlX0NvbG9yKTsKKyAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChGbGQgPT4gRmxkLCBDb2xvciA9PiBGb3JtX0JhY2tfQ29sb3IpOworICAgICAgZWxzZQorICAgICAgICAgU2V0X0JhY2tncm91bmQgKEZsZCwgKFJldmVyc2VfVmlkZW8gPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSk7CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gRmxkOworICAgZW5kIE1ha2U7CisKKyAgIGZ1bmN0aW9uIERlZmF1bHRfRHJpdmVyIChGIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgIGJlZ2luCisgICAgICBpZiBQID0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICBpZiBLIGluIFVzZXJfS2V5X0NvZGUnUmFuZ2UgYW5kIHRoZW4gSyA9IFFVSVQgdGhlbgorICAgICAgICAgaWYgRHJpdmVyIChGLCBGX1ZhbGlkYXRlX0ZpZWxkKSA9IEZvcm1fT2sgIHRoZW4KKyAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEZhbHNlOworICAgZW5kIERlZmF1bHRfRHJpdmVyOworCisgICBmdW5jdGlvbiBDb3VudF9BY3RpdmUgKEYgOiBGb3JtKSByZXR1cm4gTmF0dXJhbAorICAgaXMKKyAgICAgIE4gOiBOYXR1cmFsIDo9IDA7CisgICAgICBPIDogRmllbGRfT3B0aW9uX1NldDsKKyAgICAgIEggOiBjb25zdGFudCBOYXR1cmFsIDo9IEZpZWxkX0NvdW50IChGKTsKKyAgIGJlZ2luCisgICAgICBpZiBIID4gMCB0aGVuCisgICAgICAgICBmb3IgSSBpbiAxIC4uIEggbG9vcAorICAgICAgICAgICAgR2V0X09wdGlvbnMgKEZpZWxkcyAoRiwgSSksIE8pOworICAgICAgICAgICAgaWYgTy5BY3RpdmUgdGhlbgorICAgICAgICAgICAgICAgTiA6PSBOICsgMTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIE47CisgICBlbmQgQ291bnRfQWN0aXZlOworCitlbmQgU2FtcGxlLkZvcm1fRGVtby5BdXg7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1hdXguYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTdlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcwpAQCAtMCwwICsxLDkyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5Gb3JtX0RlbW8uQXV4ICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zOyAgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zOworCitwYWNrYWdlIFNhbXBsZS5Gb3JtX0RlbW8uQXV4IGlzCisKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoRiAgOiBpbiAgRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgTCAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgQyAgOiBvdXQgQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICBZICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBYICA6IG91dCBDb2x1bW5fUG9zaXRpb24pOworICAgLS0gIENhbGN1bGF0ZSB0aGUgZ2VvbWV0cnkgZm9yIGEgcGFuZWwgYmVlaW5nIGFibGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5CisgICAtLSAgdGhlIG1lbnUuCisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoRiAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgTGluICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBDb2wgICA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFBhbmVsOworICAgLS0gIENyZWF0ZSBhIHBhbmVsIGRlY29yYXRlZCB3aXRoIGEgZnJhbWUgYW5kIHRoZSB0aXRsZSBhdCB0aGUgc3BlY2lmaWVkCisgICAtLSAgcG9zaXRpb24uIFRoZSBkaW1lbnNpb24gb2YgdGhlIHBhbmVsIGlzIGRlcml2ZWQgZnJvbSB0aGUgbWVudXMgbGF5b3V0LgorCisgICBwcm9jZWR1cmUgRGVzdHJveSAoRiA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgUCA6IGluIG91dCBQYW5lbCk7CisgICAtLSAgRGVzdHJveSBhbGwgdGhlIHdpbmRvd2luZyBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1lbnUgYW5kCisgICAtLSAgcGFuZWwuCisKKyAgIGZ1bmN0aW9uIEdldF9SZXF1ZXN0IChGICAgICAgICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgUCAgICAgICAgICAgOiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVfQ1JMRiA6IEJvb2xlYW4gOj0gVHJ1ZSkgcmV0dXJuIEtleV9Db2RlOworICAgLS0gIENlbnRyYWxpemVkIHJlcXVlc3QgZHJpdmVyIGZvciBhbGwgbWVudXMgaW4gdGhpcyBzYW1wbGUuIFRoaXMKKyAgIC0tICBnaXZlcyB1cyBhIGNvbW1vbiBrZXkgYmluZGluZyBmb3IgYWxsIG1lbnVzLgorCisgICBmdW5jdGlvbiBNYWtlIChUb3AgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBMZWZ0ICAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgIDogU3RyaW5nKSByZXR1cm4gRmllbGQ7CisgICAtLSAgY3JlYXRlIGEgbGFiZWwKKworICAgZnVuY3Rpb24gTWFrZSAgKEhlaWdodCAgICAgIDogTGluZV9Db3VudCA6PSAxOworICAgICAgICAgICAgICAgICAgIFdpZHRoICAgICAgIDogQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgIFRvcCAgICAgICAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBMZWZ0ICAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICBPZmZfU2NyZWVuICA6IE5hdHVyYWwgOj0gMCkgcmV0dXJuIEZpZWxkOworICAgLS0gIGNyZWF0ZSBhIGVkaXRhYmxlIGZpZWxkCisKKyAgIGZ1bmN0aW9uIERlZmF1bHRfRHJpdmVyIChGIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbjsKKworICAgZnVuY3Rpb24gQ291bnRfQWN0aXZlIChGIDogRm9ybSkgcmV0dXJuIE5hdHVyYWw7CisgICAtLSAgQ291bnQgdGhlIG51bWJlciBvZiBhY3RpdmUgZmllbGRzIGluIHRoZSBmb3JtCisKK2VuZCBTYW1wbGUuRm9ybV9EZW1vLkF1eDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU4NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRiCkBAIC0wLDAgKzEsOTggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEzICQKKy0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggU2FtcGxlLkZvcm1fRGVtby5BdXg7CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXIgaXMKKworICAgcGFja2FnZSBBdXggcmVuYW1lcyBTYW1wbGUuRm9ybV9EZW1vLkF1eDsKKworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKQorICAgaXMKKyAgICAgIEwgOiBMaW5lX0NvdW50OworICAgICAgQyA6IENvbHVtbl9Db3VudDsKKyAgICAgIFkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgIGJlZ2luCisgICAgICBBdXguR2VvbWV0cnkgKEYsIEwsIEMsIFksIFgpOworICAgICAgRHJpdmVfTWUgKEYsIFksIFgsIFRpdGxlKTsKKyAgIGVuZCBEcml2ZV9NZTsKKworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIExpbiAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKQorICAgaXMKKyAgICAgIFBhbiA6IFBhbmVsIDo9IEF1eC5DcmVhdGUgKEYsIFRpdGxlLCBMaW4sIENvbCk7CisgICAgICBWICAgOiBDdXJzb3JfVmlzaWJpbGl0eSA6PSBOb3JtYWw7CisgICAgICBIYW5kbGVfQ1JMRiA6IEJvb2xlYW4gOj0gVHJ1ZTsKKworICAgYmVnaW4KKyAgICAgIFNldF9DdXJzb3JfVmlzaWJpbGl0eSAoVik7CisgICAgICBpZiBBdXguQ291bnRfQWN0aXZlIChGKSA9IDEgdGhlbgorICAgICAgICAgSGFuZGxlX0NSTEYgOj0gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICAgICBsb29wCisgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICBLIDogY29uc3RhbnQgS2V5X0NvZGUgOj0gQXV4LkdldF9SZXF1ZXN0IChGLCBQYW4sIEhhbmRsZV9DUkxGKTsKKyAgICAgICAgICAgIFIgOiBEcml2ZXJfUmVzdWx0OworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChLID0gMTMgb3IgZWxzZSBLID0gMTApIGFuZCB0aGVuIG5vdCBIYW5kbGVfQ1JMRiB0aGVuCisgICAgICAgICAgICAgICBSIDo9IFVua25vd25fUmVxdWVzdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIFIgOj0gRHJpdmVyIChGLCBLKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGNhc2UgUiBpcworICAgICAgICAgICAgICAgd2hlbiBGb3JtX09rID0+IG51bGw7CisgICAgICAgICAgICAgICB3aGVuIFVua25vd25fUmVxdWVzdCA9PgorICAgICAgICAgICAgICAgICAgaWYgTXlfRHJpdmVyIChGLCBLLCBQYW4pIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIGV4aXQ7CisgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBCZWVwOworICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBlbmQ7CisgICAgICBlbmQgbG9vcDsKKyAgICAgIFNldF9DdXJzb3JfVmlzaWJpbGl0eSAoVik7CisgICAgICBBdXguRGVzdHJveSAoRiwgUGFuKTsKKyAgIGVuZCBEcml2ZV9NZTsKKworZW5kIFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlcjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU2NDEyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRzCkBAIC0wLDAgKzEsNjQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKKworZ2VuZXJpYworICAgd2l0aCBmdW5jdGlvbiAgTXlfRHJpdmVyIChGcm0gOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLICAgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuOworcGFja2FnZSBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXIgaXMKKworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIExpbiAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIC0tICBQb3NpdGlvbiB0aGUgbWVudSBhdCB0aGUgZ2l2ZW4gcG9pbnQgYW5kIGRyaXZlIGl0LgorCisgICBwcm9jZWR1cmUgRHJpdmVfTWUgKEYgICAgIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpOworICAgLS0gIENlbnRlciBtZW51IGFuZCBkcml2ZSBpdC4KKworZW5kIFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlcjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNmE1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRiCkBAIC0wLDAgKzEsMTMwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRm9ybV9EZW1vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xNSAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGE7Cit3aXRoIFNhbXBsZS5NeV9GaWVsZF9UeXBlOyB1c2UgU2FtcGxlLk15X0ZpZWxkX1R5cGU7Cit3aXRoIFNhbXBsZS5FeHBsYW5hdGlvbjsgdXNlIFNhbXBsZS5FeHBsYW5hdGlvbjsKK3dpdGggU2FtcGxlLkZvcm1fRGVtby5BdXg7IHVzZSBTYW1wbGUuRm9ybV9EZW1vLkF1eDsKK3dpdGggU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOyB1c2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOword2l0aCBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXI7CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbi5BZGE7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb247Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb247Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQ7Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQ7CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuRm9ybV9EZW1vIGlzCisKKyAgIHR5cGUgVXNlcl9EYXRhIGlzCisgICAgICByZWNvcmQKKyAgICAgICAgIERhdGEgOiBJbnRlZ2VyOworICAgICAgZW5kIHJlY29yZDsKKyAgIHR5cGUgVXNlcl9BY2Nlc3MgaXMgYWNjZXNzIFVzZXJfRGF0YTsKKworICAgcGFja2FnZSBGbGRfVSBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGEgKFVzZXJfRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJfQWNjZXNzKTsKKworICAgdHlwZSBXZWVrZGF5IGlzIChTdW5kYXksIE1vbmRheSwgVHVlc2RheSwgV2VkbmVzZGF5LCBUaHVyc2RheSwKKyAgICAgICAgICAgICAgICAgICAgRnJpZGF5LCBTYXR1cmRheSk7CisKKyAgIHBhY2thZ2UgV2Vla2RheV9FbnVtIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYSAoV2Vla2RheSk7CisKKyAgIEVudW1fRmllbGQgOiBjb25zdGFudCBFbnVtZXJhdGlvbl9GaWVsZCA6PQorICAgICBXZWVrZGF5X0VudW0uQ3JlYXRlOworCisgICBwcm9jZWR1cmUgRGVtbworICAgaXMKKworICAgICAgTWZ0IDogY29uc3RhbnQgTXlfRGF0YSA6PSAoQ2ggPT4gJ1gnKTsKKworICAgICAgRkEgOiBGaWVsZF9BcnJheV9BY2Nlc3MgOj0gbmV3IEZpZWxkX0FycmF5JworICAgICAgICAoTWFrZSAoMCwgMTQsICJTYW1wbGUgRW50cnkgRm9ybSIpLAorICAgICAgICAgTWFrZSAoMiwgMCwgICJXZWVrZGF5RW51bWVyYXRpb24iKSwKKyAgICAgICAgIE1ha2UgKDIsIDIwLCAiTnVtZXJpYyAxLTEwIiksCisgICAgICAgICBNYWtlICgyLCAzNCwgIk9ubHkgJ1gnIiksCisgICAgICAgICBNYWtlICg1LCAwLCAiTXVsdGlwbGUgTGluZXMgb2Zmc2NyZWVuKFNjcm9sbCkiKSwKKyAgICAgICAgIE1ha2UgKFdpZHRoID0+IDE4LCBUb3AgPT4gMywgTGVmdCA9PiAgMCksCisgICAgICAgICBNYWtlIChXaWR0aCA9PiAxMiwgVG9wID0+IDMsIExlZnQgPT4gMjApLAorICAgICAgICAgTWFrZSAoV2lkdGggPT4gMTIsIFRvcCA9PiAzLCBMZWZ0ID0+IDM0KSwKKyAgICAgICAgIE1ha2UgKFdpZHRoID0+IDQ2LCBUb3AgPT4gNiwgTGVmdCA9PiAwLCBIZWlnaHQgPT4gNCwgT2ZmX1NjcmVlbiA9PiAyKSwKKyAgICAgICAgIE51bGxfRmllbGQKKyAgICAgICAgICk7CisKKyAgICAgIEZybSA6IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRm9ybSA6PSBDcmVhdGUgKEZBKTsKKworICAgICAgSV9GIDogY29uc3RhbnQgSW50ZWdlcl9GaWVsZCA6PSAoUHJlY2lzaW9uICAgPT4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyX0xpbWl0ID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcHBlcl9MaW1pdCA9PiAxMCk7CisKKyAgICAgIEYxLCBGMiA6IFVzZXJfQWNjZXNzOworCisgICAgICBwYWNrYWdlIEZoIGlzIG5ldyBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXIgKERlZmF1bHRfRHJpdmVyKTsKKworICAgYmVnaW4KKyAgICAgIFB1c2hfRW52aXJvbm1lbnQgKCJGT1JNMDAiKTsKKyAgICAgIE5vdGVwYWQgKCJGT1JNLVBBRDAwIik7CisgICAgICBEZWZhdWx0X0xhYmVsczsKKworICAgICAgU2V0X0ZpZWxkX1R5cGUgKEZBICg2KSwgRW51bV9GaWVsZCk7CisgICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDcpLCBJX0YpOworICAgICAgU2V0X0ZpZWxkX1R5cGUgKEZBICg4KSwgTWZ0KTsKKworICAgICAgRjEgOj0gbmV3IFVzZXJfRGF0YScoRGF0YSA9PiA0NzExKTsKKyAgICAgIEZsZF9VLlNldF9Vc2VyX0RhdGEgKEZBICgxKSwgRjEpOworCisgICAgICBGaC5Ecml2ZV9NZSAoRnJtKTsKKworICAgICAgRmxkX1UuR2V0X1VzZXJfRGF0YSAoRkEgKDEpLCBGMik7CisgICAgICBwcmFnbWEgQXNzZXJ0IChGMSA9IEYyKTsKKyAgICAgIHByYWdtYSBBc3NlcnQgKEYxLkRhdGEgPSBGMi5EYXRhKTsKKworICAgICAgUG9wX0Vudmlyb25tZW50OworICAgICAgRGVsZXRlIChGcm0pOworCisgICAgICBGcmVlIChGQSwgVHJ1ZSk7CisgICBlbmQgRGVtbzsKKworZW5kIFNhbXBsZS5Gb3JtX0RlbW87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDMzZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkcwpAQCAtMCwwICsxLDQ1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuRm9ybV9EZW1vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBTYW1wbGUuRm9ybV9EZW1vIGlzCisKKyAgIHByb2NlZHVyZSBEZW1vOworCitlbmQgU2FtcGxlLkZvcm1fRGVtbzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDBlNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRiCkBAIC0wLDAgKzEsMjE0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZyAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMyAkCistLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSAgU2FtcGxlLk1hbmlmZXN0OworCistLSAgVGhpcyBwYWNrYWdlIGltcGxlbWVudHMgYSBzaW1wbGUgc3RhY2sgb2YgZnVuY3Rpb24ga2V5IGxhYmVsIGVudmlyb25tZW50cy4KKy0tCitwYWNrYWdlIGJvZHkgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nIGlzCisKKyAgIE1heF9MYWJlbF9MZW5ndGggOiBjb25zdGFudCBQb3NpdGl2ZSA6PSA4OworICAgTnVtYmVyX09mX0tleXMgICA6IExhYmVsX051bWJlciA6PSBMYWJlbF9OdW1iZXInTGFzdDsKKyAgIEp1c3RpZmljYXRpb24gICAgOiBMYWJlbF9KdXN0aWZpY2F0aW9uIDo9IExlZnQ7CisKKyAgIHN1YnR5cGUgTGFiZWwgaXMgU3RyaW5nICgxIC4uIE1heF9MYWJlbF9MZW5ndGgpOworICAgdHlwZSBMYWJlbF9BcnJheSBpcyBhcnJheSAoTGFiZWxfTnVtYmVyIHJhbmdlIDw+KSBvZiBMYWJlbDsKKworICAgdHlwZSBLZXlfRW52aXJvbm1lbnQgKE4gOiBMYWJlbF9OdW1iZXIgOj0gTGFiZWxfTnVtYmVyJ0xhc3QpOworICAgdHlwZSBFbnZfUHRyIGlzIGFjY2VzcyBLZXlfRW52aXJvbm1lbnQ7CisgICBwcmFnbWEgQ29udHJvbGxlZCAoRW52X1B0cik7CisKKyAgIHR5cGUgU3RyaW5nX0FjY2VzcyBpcyBhY2Nlc3MgU3RyaW5nOworICAgcHJhZ21hIENvbnRyb2xsZWQgKFN0cmluZ19BY2Nlc3MpOworCisgICBBY3RpdmVfQ29udGV4dCA6IFN0cmluZ19BY2Nlc3MgOj0gbmV3IFN0cmluZycoIk1BSU4iKTsKKyAgIEFjdGl2ZV9Ob3RlcGFkIDogUGFuZWwgOj0gTnVsbF9QYW5lbDsKKworICAgdHlwZSBLZXlfRW52aXJvbm1lbnQgIChOIDogTGFiZWxfTnVtYmVyIDo9IExhYmVsX051bWJlcidMYXN0KSBpcworICAgICAgcmVjb3JkCisgICAgICAgICBQcmV2ICAgIDogRW52X1B0cjsKKyAgICAgICAgIEhlbHAgICAgOiBTdHJpbmdfQWNjZXNzOworICAgICAgICAgTm90ZXBhZCA6IFBhbmVsOworICAgICAgICAgTGFiZWxzICA6IExhYmVsX0FycmF5ICgxIC4uIE4pOworICAgICAgZW5kIHJlY29yZDsKKworICAgcHJvY2VkdXJlIFJlbGVhc2VfU3RyaW5nIGlzCisgICAgIG5ldyBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbiAoU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ19BY2Nlc3MpOworCisgICBwcm9jZWR1cmUgUmVsZWFzZV9FbnZpcm9ubWVudCBpcworICAgICAgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uIChLZXlfRW52aXJvbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudl9QdHIpOworCisgICBUb3BfT2ZfU3RhY2sgOiBFbnZfUHRyIDo9IG51bGw7CisKKyAgIHByb2NlZHVyZSBQdXNoX0Vudmlyb25tZW50IChLZXkgICA6IGluIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBQIDogY29uc3RhbnQgRW52X1B0ciA6PSBuZXcgS2V5X0Vudmlyb25tZW50IChOdW1iZXJfT2ZfS2V5cyk7CisgICBiZWdpbgorICAgICAgLS0gIFN0b3JlIHRoZSBjdXJyZW50IGxhYmVscyBpbiB0aGUgZW52aXJvbm1lbnQKKyAgICAgIGZvciBJIGluIDEgLi4gTnVtYmVyX09mX0tleXMgbG9vcAorICAgICAgICAgR2V0X1NvZnRfTGFiZWxfS2V5IChJLCBQLkxhYmVscyAoSSkpOworICAgICAgICAgaWYgUmVzZXQgdGhlbgorICAgICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5IChJLCAiICIpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisgICAgICBQLlByZXYgOj0gVG9wX09mX1N0YWNrOworICAgICAgLS0gIG5vdyBzdG9yZSBhY3RpdmUgaGVscCBjb250ZXh0IGFuZCBub3RlcGFkCisgICAgICBQLkhlbHAgOj0gQWN0aXZlX0NvbnRleHQ7CisgICAgICBQLk5vdGVwYWQgOj0gQWN0aXZlX05vdGVwYWQ7CisgICAgICAtLSAgVGhlIG5vdGVwYWQgbXVzdCBub3cgdmFuaXNoIGFuZCB0aGUgbmV3IG5vdGVwYWQgaXMgZW1wdHkuCisgICAgICBpZiBQLk5vdGVwYWQgLz0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICBIaWRlIChQLk5vdGVwYWQpOworICAgICAgICAgVXBkYXRlX1BhbmVsczsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEFjdGl2ZV9Ob3RlcGFkIDo9IE51bGxfUGFuZWw7CisgICAgICBBY3RpdmVfQ29udGV4dCA6PSBuZXcgU3RyaW5nJyhLZXkpOworCisgICAgICBUb3BfT2ZfU3RhY2sgOj0gUDsKKyAgICAgIGlmIFJlc2V0IHRoZW4KKyAgICAgICAgIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlOworICAgICAgZW5kIGlmOworICAgZW5kIFB1c2hfRW52aXJvbm1lbnQ7CisKKyAgIHByb2NlZHVyZSBQb3BfRW52aXJvbm1lbnQKKyAgIGlzCisgICAgICBQIDogRW52X1B0ciA6PSBUb3BfT2ZfU3RhY2s7CisgICBiZWdpbgorICAgICAgaWYgVG9wX09mX1N0YWNrID0gbnVsbCB0aGVuCisgICAgICAgICByYWlzZSBGdW5jdGlvbl9LZXlfU3RhY2tfRXJyb3I7CisgICAgICBlbHNlCisgICAgICAgICBmb3IgSSBpbiAxIC4uIE51bWJlcl9PZl9LZXlzIGxvb3AKKyAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoSSwgUC5MYWJlbHMgKEkpLCBKdXN0aWZpY2F0aW9uKTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgcHJhZ21hIEFzc2VydCAoQWN0aXZlX0NvbnRleHQgLz0gbnVsbCk7CisgICAgICAgICBSZWxlYXNlX1N0cmluZyAoQWN0aXZlX0NvbnRleHQpOworICAgICAgICAgQWN0aXZlX0NvbnRleHQgOj0gUC5IZWxwOworICAgICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7CisgICAgICAgICBOb3RlcGFkX1RvX0NvbnRleHQgKFAuTm90ZXBhZCk7CisgICAgICAgICBUb3BfT2ZfU3RhY2sgOj0gUC5QcmV2OworICAgICAgICAgUmVsZWFzZV9FbnZpcm9ubWVudCAoUCk7CisgICAgICBlbmQgaWY7CisgICBlbmQgUG9wX0Vudmlyb25tZW50OworCisgICBmdW5jdGlvbiBDb250ZXh0IHJldHVybiBTdHJpbmcKKyAgIGlzCisgICBiZWdpbgorICAgICAgaWYgQWN0aXZlX0NvbnRleHQgLz0gbnVsbCB0aGVuCisgICAgICAgICByZXR1cm4gQWN0aXZlX0NvbnRleHQuYWxsOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuICIiOworICAgICAgZW5kIGlmOworICAgZW5kIENvbnRleHQ7CisKKyAgIGZ1bmN0aW9uIEZpbmRfQ29udGV4dCAoS2V5IDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIFAgOiBFbnZfUHRyIDo9IFRvcF9PZl9TdGFjazsKKyAgIGJlZ2luCisgICAgICBpZiBBY3RpdmVfQ29udGV4dC5hbGwgPSBLZXkgdGhlbgorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbHNlCisgICAgICAgICBsb29wCisgICAgICAgICAgICBleGl0IHdoZW4gUCA9IG51bGw7CisgICAgICAgICAgICBpZiBQLkhlbHAuYWxsID0gS2V5IHRoZW4KKyAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgUCA6PSBQLlByZXY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBGaW5kX0NvbnRleHQ7CisKKyAgIHByb2NlZHVyZSBOb3RlcGFkX1RvX0NvbnRleHQgKFBhbiA6IGluIFBhbmVsKQorICAgaXMKKyAgICAgIFcgOiBXaW5kb3c7CisgICBiZWdpbgorICAgICAgaWYgQWN0aXZlX05vdGVwYWQgLz0gTnVsbF9QYW5lbCB0aGVuCisgICAgICAgICBXIDo9IEdldF9XaW5kb3cgKEFjdGl2ZV9Ob3RlcGFkKTsKKyAgICAgICAgIENsZWFyIChXKTsKKyAgICAgICAgIERlbGV0ZSAoQWN0aXZlX05vdGVwYWQpOworICAgICAgICAgRGVsZXRlIChXKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEFjdGl2ZV9Ob3RlcGFkIDo9IFBhbjsKKyAgICAgIGlmIFBhbiAvPSBOdWxsX1BhbmVsIHRoZW4KKyAgICAgICAgIFRvcCAgKFBhbik7CisgICAgICBlbmQgaWY7CisgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgVXBkYXRlX1NjcmVlbjsKKyAgIGVuZCBOb3RlcGFkX1RvX0NvbnRleHQ7CisKKyAgIHByb2NlZHVyZSBJbml0aWFsaXplIChNb2RlIDogU29mdF9MYWJlbF9LZXlfRm9ybWF0IDo9IFBDX1N0eWxlOworICAgICAgICAgICAgICAgICAgICAgICAgIEp1c3QgOiBMYWJlbF9KdXN0aWZpY2F0aW9uIDo9IExlZnQpCisgICBpcworICAgYmVnaW4KKyAgICAgIGNhc2UgTW9kZSBpcworICAgICAgICAgd2hlbiBQQ19TdHlsZSAuLiBQQ19TdHlsZV9XaXRoX0luZGV4CisgICAgICAgICAgID0+IE51bWJlcl9PZl9LZXlzIDo9IDEyOworICAgICAgICAgd2hlbiBvdGhlcnMKKyAgICAgICAgICAgPT4gTnVtYmVyX09mX0tleXMgOj0gODsKKyAgICAgIGVuZCBjYXNlOworICAgICAgSW5pdF9Tb2Z0X0xhYmVsX0tleXMgKE1vZGUpOworICAgICAgSnVzdGlmaWNhdGlvbiA6PSBKdXN0OworICAgZW5kIEluaXRpYWxpemU7CisKKyAgIHByb2NlZHVyZSBEZWZhdWx0X0xhYmVscworICAgaXMKKyAgIGJlZ2luCisgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEZLRVlfUVVJVCwgIlF1aXQiKTsKKyAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoRktFWV9IRUxQLCAiSGVscCIpOworICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5IChGS0VZX0VYUExBSU4sICJLZXlzIik7CisgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgIGVuZCBEZWZhdWx0X0xhYmVsczsKKworICAgZnVuY3Rpb24gTm90ZXBhZF9XaW5kb3cgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgIGJlZ2luCisgICAgICBpZiBBY3RpdmVfTm90ZXBhZCAvPSBOdWxsX1BhbmVsIHRoZW4KKyAgICAgICAgIHJldHVybiBHZXRfV2luZG93IChBY3RpdmVfTm90ZXBhZCk7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gTnVsbF9XaW5kb3c7CisgICAgICBlbmQgaWY7CisgICBlbmQgTm90ZXBhZF9XaW5kb3c7CisKK2VuZCBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmc7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwZjYxOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkcwpAQCAtMCwwICsxLDgyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZyAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKKworLS0gIFRoaXMgcGFja2FnZSBpbXBsZW1lbnRzIGEgc2ltcGxlIHN0YWNrIG9mIGZ1bmN0aW9uIGtleSBsYWJlbCBlbnZpcm9ubWVudHMuCistLQorcGFja2FnZSBTYW1wbGUuRnVuY3Rpb25fS2V5X1NldHRpbmcgaXMKKworICAgcHJvY2VkdXJlIFB1c2hfRW52aXJvbm1lbnQgKEtleSAgIDogaW4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIC0tICBQdXNoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGtleXMgb24gYW4gaW50ZXJuYWwKKyAgIC0tICBzdGFjay4gSWYgdGhlIHJlc2V0IGZsYWcgaXMgdHJ1ZSwgYWxsIGxhYmVscyBhcmUgcmVzZXQgd2hpbGUKKyAgIC0tICBwdXNoZWQsIHNvIHRoZSBuZXcgZW52aXJvbm1lbnQgY2FuIGFzc3VtZSBhIHRhYnVsYSByYXNhLgorICAgLS0gIFRoZSBLZXkgZGVmaW5lcyB0aGUgbmV3IEhlbHAgQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldworICAgLS0gIEVudmlyb25tZW50LiBUaGlzIHNhdmVzIGFsc28gdGhlIGN1cnJlbnRseSBhY3RpdmUgTm90ZXBhZC4KKworICAgcHJvY2VkdXJlIFBvcF9FbnZpcm9ubWVudDsKKyAgIC0tICBQb3AgdGhlIERlZmluaXRpb25zIGZyb20gdGhlIHN0YWNrIGFuZCBtYWtlIHRoZW0gdGhlIGN1cnJlbnQgb25lcy4KKyAgIC0tICBUaGlzIGFsc28gcmVzdG9yZXMgdGhlIEhlbHAgY29udGV4dCBhbmQgdGhlIHByZXZpb3VzIE5vdGVwYWQuCisKKyAgIHByb2NlZHVyZSBJbml0aWFsaXplIChNb2RlIDogU29mdF9MYWJlbF9LZXlfRm9ybWF0IDo9IFBDX1N0eWxlOworICAgICAgICAgICAgICAgICAgICAgICAgIEp1c3QgOiBMYWJlbF9KdXN0aWZpY2F0aW9uIDo9IExlZnQpOworICAgLS0gIEluaXRpYWxpemUgdGhlIGVudmlyb25tZW50CisKKyAgIGZ1bmN0aW9uIENvbnRleHQgcmV0dXJuIFN0cmluZzsKKyAgIC0tICBSZXR1cm4gdGhlIGN1cnJlbnQgY29udGV4dCBpZGVudGl0ZmllcgorCisgICBmdW5jdGlvbiBGaW5kX0NvbnRleHQgKEtleSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW47CisgICAtLSAgTG9vayBmb3IgYSBjb250ZXh0LCByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBpbiB0aGUgc3RhY2ssCisgICAtLSAgZmFsc2Ugb3RoZXJ3aXNlLgorCisgICBwcm9jZWR1cmUgTm90ZXBhZF9Ub19Db250ZXh0IChQYW4gOiBpbiBQYW5lbCk7CisgICAtLSAgQWRkIGEgcGFuZWwgcmVwcmVzZW50aW5nIGEgbm90ZXBhZCB0byB0aGUgY3VycmVudCBjb250ZXh0LgorCisgICBGdW5jdGlvbl9LZXlfU3RhY2tfRXJyb3IgOiBleGNlcHRpb247CisKKyAgIHByb2NlZHVyZSBEZWZhdWx0X0xhYmVsczsKKyAgIC0tICBTZXQgdGhlIGRlZmF1bHQgbGFiZWxzIHVzZWQgaW4gYWxsIGVudmlyb25tZW50cworCisgICBmdW5jdGlvbiBOb3RlcGFkX1dpbmRvdyByZXR1cm4gV2luZG93OworICAgLS0gIFJldHVybiB0aGUgY3VycmVudCBub3RlcGFkIHdpbmRvdyBvciBOdWxsX1dpbmRvdyBpZiB0aGVyZSBpcyBub25lLgorCitlbmQgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOThkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWFkZXJfaGFuZGxlci5hZGIKQEAgLTAsMCArMSwxODAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkhlYWRlcl9IYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLkNhbGVuZGFyOyB1c2UgQWRhLkNhbGVuZGFyOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTzsKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0OworCistLSAgVGhpcyBwYWNrYWdlIGhhbmRsZXMgdGhlIHBhaW50aW5nIG9mIHRoZSBoZWFkZXIgbGluZSBvZiB0aGUgc2NyZWVuLgorLS0KK3BhY2thZ2UgYm9keSBTYW1wbGUuSGVhZGVyX0hhbmRsZXIgaXMKKworICAgcGFja2FnZSBJbnRfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPIChJbnRlZ2VyKTsKKyAgIHVzZSBJbnRfSU87CisKKyAgIEhlYWRlcl9XaW5kb3cgOiBXaW5kb3cgOj0gTnVsbF9XaW5kb3c7CisKKyAgIERpc3BsYXlfSG91ciAgOiBJbnRlZ2VyIDo9IC0xOyAtLSBob3VyIGxhc3QgZGlzcGxheWVkCisgICBEaXNwbGF5X01pbiAgIDogSW50ZWdlciA6PSAtMTsgLS0gbWludXRlIGxhc3QgZGlzcGxheWVkCisgICBEaXNwbGF5X0RheSAgIDogSW50ZWdlciA6PSAtMTsgLS0gZGF5IGxhc3QgZGlzcGxheWVkCisgICBEaXNwbGF5X01vbnRoIDogSW50ZWdlciA6PSAtMTsgLS0gbW9udGggbGFzdCBkaXNwbGF5ZWQKKworICAgLS0gIFRoaXMgaXMgdGhlIHJvdXRpbmUgaGFuZGVkIG92ZXIgdG8gdGhlIGN1cnNlcyBsaWJyYXJ5IHRvIGJlIGNhbGxlZAorICAgLS0gIGFzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgd2hlbiByaXBwaW5nIG9mIHRoZSBoZWFkZXIgbGluZXMgZnJvbQorICAgLS0gIHRoZSBzY3JlZW4uIFRoaXMgcm91dGluZSBtdXN0IGZvbGxvdyBDIGNvbnZlbnRpb25zLgorICAgZnVuY3Rpb24gSW5pdF9IZWFkZXJfV2luZG93IChXaW4gICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gSW50ZWdlcjsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBJbml0X0hlYWRlcl9XaW5kb3cpOworCisgICBwcm9jZWR1cmUgSW50ZXJuYWxfVXBkYXRlX0hlYWRlcl9XaW5kb3cgKERvX1VwZGF0ZSA6IGluIEJvb2xlYW4pOworCisgICAtLSAgVGhlIGluaXRpYWxpemF0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBJbml0X1NjcmVlbi4gSXQgc3RlYWxzIHR3bworICAgLS0gIGxpbmVzIGZyb20gdGhlIHRvcCBvZiB0aGUgc2NyZWVuLgorICAgcHJvY2VkdXJlIEluaXRfSGVhZGVyX0hhbmRsZXIKKyAgIGlzCisgICBiZWdpbgorICAgICAgUmlwX09mZl9MaW5lcyAoMiwgSW5pdF9IZWFkZXJfV2luZG93J0FjY2Vzcyk7CisgICBlbmQgSW5pdF9IZWFkZXJfSGFuZGxlcjsKKworICAgcHJvY2VkdXJlIE5fT3V0IChOIDogaW4gSW50ZWdlcik7CisKKyAgIC0tICBFbWl0IGEgdHdvIGRpZ2l0IG51bWJlciBhbmQgZW5zdXJlIHRoYXQgYSBsZWFkaW5nIHplcm8gaXMgZ2VuZXJhdGVkIGlmCisgICAtLSAgbmVjZXNzYXJ5LgorICAgcHJvY2VkdXJlIE5fT3V0IChOIDogaW4gSW50ZWdlcikKKyAgIGlzCisgICBiZWdpbgorICAgICAgaWYgTiA8IDEwIHRoZW4KKyAgICAgICAgIEFkZCAoSGVhZGVyX1dpbmRvdywgJzAnKTsKKyAgICAgICAgIFB1dCAoSGVhZGVyX1dpbmRvdywgTiwgMSk7CisgICAgICBlbHNlCisgICAgICAgICBQdXQgKEhlYWRlcl9XaW5kb3csIE4sIDIpOworICAgICAgZW5kIGlmOworICAgZW5kIE5fT3V0OworCisgICAtLSAgUGFpbnQgdGhlIGhlYWRlciB3aW5kb3cuIFRoZSBpbnB1dCBwYXJhbWV0ZXIgaXMgYSBmbGFnIGluZGljYXRpbmcKKyAgIC0tICB3aGV0aGVyIG9yIG5vdCB0aGUgc2NyZWVuIHNob3VsZCBiZSB1cGRhdGVkIHBoeXNpY2FsbHkgYWZ0ZXIgcGFpbnRpbmcuCisgICBwcm9jZWR1cmUgSW50ZXJuYWxfVXBkYXRlX0hlYWRlcl9XaW5kb3cgKERvX1VwZGF0ZSA6IGluIEJvb2xlYW4pCisgICBpcworICAgICAgdHlwZSBNb250aF9OYW1lX0FycmF5IGlzCisgICAgICAgICBhcnJheSAoTW9udGhfTnVtYmVyJ0ZpcnN0IC4uIE1vbnRoX051bWJlcidMYXN0KSBvZiBTdHJpbmcgKDEgLi4gOSk7CisKKyAgICAgIE1vbnRoX05hbWVzIDogY29uc3RhbnQgTW9udGhfTmFtZV9BcnJheSA6PQorICAgICAgICAoIkphbnVhcnkgICIsCisgICAgICAgICAiRmVicnVhcnkgIiwKKyAgICAgICAgICJNYXJjaCAgICAiLAorICAgICAgICAgIkFwcmlsICAgICIsCisgICAgICAgICAiTWF5ICAgICAgIiwKKyAgICAgICAgICJKdW5lICAgICAiLAorICAgICAgICAgIkp1bHkgICAgICIsCisgICAgICAgICAiQXVndXN0ICAgIiwKKyAgICAgICAgICJTZXB0ZW1iZXIiLAorICAgICAgICAgIk9jdG9iZXIgICIsCisgICAgICAgICAiTm92ZW1iZXIgIiwKKyAgICAgICAgICJEZWNlbWJlciAiKTsKKworICAgICAgTm93ICAgIDogY29uc3RhbnQgVGltZSAgICAgICAgIDo9IENsb2NrOworICAgICAgU2VjICAgIDogY29uc3RhbnQgSW50ZWdlciAgICAgIDo9IEludGVnZXIgKFNlY29uZHMgKE5vdykpOworICAgICAgSG91ciAgIDogY29uc3RhbnQgSW50ZWdlciAgICAgIDo9IFNlYyAvIDM2MDA7CisgICAgICBNaW51dGUgOiBjb25zdGFudCBJbnRlZ2VyICAgICAgOj0gKFNlYyAtIEhvdXIgKiAzNjAwKSAvIDYwOworICAgICAgTW9uICAgIDogY29uc3RhbnQgTW9udGhfTnVtYmVyIDo9IE1vbnRoIChOb3cpOworICAgICAgRCAgICAgIDogY29uc3RhbnQgRGF5X051bWJlciAgIDo9IERheSAoTm93KTsKKyAgIGJlZ2luCisgICAgICBpZiBIZWFkZXJfV2luZG93IC89IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIGlmIE1pbnV0ZSAvPSBEaXNwbGF5X01pbiBvciBlbHNlIEhvdXIgLz0gRGlzcGxheV9Ib3VyCisgICAgICAgICAgIG9yIGVsc2UgRGlzcGxheV9EYXkgLz0gRCBvciBlbHNlIERpc3BsYXlfTW9udGggLz0gTW9uIHRoZW4KKyAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChIZWFkZXJfV2luZG93LCAwLCAwKTsKKyAgICAgICAgICAgIE5fT3V0IChEKTsgQWRkIChIZWFkZXJfV2luZG93LCAnLicpOworICAgICAgICAgICAgQWRkIChIZWFkZXJfV2luZG93LCBNb250aF9OYW1lcyAoTW9uKSk7CisgICAgICAgICAgICBNb3ZlX0N1cnNvciAoSGVhZGVyX1dpbmRvdywgMSwgMCk7CisgICAgICAgICAgICBOX091dCAoSG91cik7IEFkZCAoSGVhZGVyX1dpbmRvdywgJzonKTsKKyAgICAgICAgICAgIE5fT3V0IChNaW51dGUpOworICAgICAgICAgICAgRGlzcGxheV9NaW4gICA6PSBNaW51dGU7CisgICAgICAgICAgICBEaXNwbGF5X0hvdXIgIDo9IEhvdXI7CisgICAgICAgICAgICBEaXNwbGF5X01vbnRoIDo9IE1vbjsKKyAgICAgICAgICAgIERpc3BsYXlfRGF5ICAgOj0gRDsKKyAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKEhlYWRlcl9XaW5kb3cpOworICAgICAgICAgICAgaWYgRG9fVXBkYXRlIHRoZW4KKyAgICAgICAgICAgICAgIFVwZGF0ZV9TY3JlZW47CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICBlbmQgSW50ZXJuYWxfVXBkYXRlX0hlYWRlcl9XaW5kb3c7CisKKyAgIC0tICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGluIHRoZSBrZXlib2FyZCBpbnB1dCB0aW1lb3V0IGhhbmRsZXIuIFNvIGl0IHdpbGwKKyAgIC0tICBwZXJpb2RpY2FsbHkgdXBkYXRlIHRoZSBoZWFkZXIgbGluZSBvZiB0aGUgc2NyZWVuLgorICAgcHJvY2VkdXJlIFVwZGF0ZV9IZWFkZXJfV2luZG93CisgICBpcworICAgYmVnaW4KKyAgICAgIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChUcnVlKTsKKyAgIGVuZCBVcGRhdGVfSGVhZGVyX1dpbmRvdzsKKworICAgZnVuY3Rpb24gSW5pdF9IZWFkZXJfV2luZG93IChXaW4gICAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogQ29sdW1uX0NvdW50KSByZXR1cm4gSW50ZWdlcgorICAgaXMKKyAgICAgIFRpdGxlICA6IGNvbnN0YW50IFN0cmluZyA6PSAiQWRhIDk1IG5jdXJzZXMgQmluZGluZyBTYW1wbGUiOworICAgICAgUG9zICAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgYmVnaW4KKyAgICAgIEhlYWRlcl9XaW5kb3cgOj0gV2luOworICAgICAgaWYgV2luIC89IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgICAgU2V0X0JhY2tncm91bmQgKFdpbiA9PiBXaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggID0+IChDaCAgICA9PiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBIZWFkZXJfQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8pKTsKKyAgICAgICAgICAgIFNldF9DaGFyYWN0ZXJfQXR0cmlidXRlcyAoV2luICAgPT4gV2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyICA9PiBOb3JtYWxfVmlkZW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IEhlYWRlcl9Db2xvcik7CisgICAgICAgICAgICBFcmFzZSAoV2luKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIExlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGUgKFdpbiwgVHJ1ZSk7CisgICAgICAgICBQb3MgOj0gQ29sdW1ucyAtIENvbHVtbl9Qb3NpdGlvbiAoVGl0bGUnTGVuZ3RoKTsKKyAgICAgICAgIEFkZCAoV2luLCAwLCBQb3MgLyAyLCBUaXRsZSk7CisgICAgICAgICAtLSAgSW4gdGhpcyBwaGFzZSB3ZSBtdXN0IG5vdCBhbGxvdyBhIHBoeXNpY2FsIHVwZGF0ZSwgYmVjYXVzZQorICAgICAgICAgLS0gIG5jdXJzZXMgaXNutHQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChGYWxzZSk7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBJbml0X0hlYWRlcl9XaW5kb3c7CisKK2VuZCBTYW1wbGUuSGVhZGVyX0hhbmRsZXI7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWFkZXJfaGFuZGxlci5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWFkZXJfaGFuZGxlci5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwYTBjMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkcwpAQCAtMCwwICsxLDUzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5IZWFkZXJfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKworLS0gIFRoaXMgcGFja2FnZSBoYW5kbGVzIHRoZSBwYWludGluZyBvZiB0aGUgaGVhZGVyIGxpbmUgb2YgdGhlIHNjcmVlbi4KKy0tCitwYWNrYWdlIFNhbXBsZS5IZWFkZXJfSGFuZGxlciBpcworCisgICBwcm9jZWR1cmUgSW5pdF9IZWFkZXJfSGFuZGxlcjsKKyAgIC0tICBJbml0aWFsaXplIHRoZSBoYW5kbGVyIGZvciB0aGUgaGVhZGVybGluZXMuCisKKyAgIHByb2NlZHVyZSBVcGRhdGVfSGVhZGVyX1dpbmRvdzsKKyAgIC0tICBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBoZWFkZXIgd2luZG93CisKK2VuZCBTYW1wbGUuSGVhZGVyX0hhbmRsZXI7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDg1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkYgpAQCAtMCwwICsxLDY4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLkhlbHBlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDg6MDggJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFNhbXBsZS5FeHBsYW5hdGlvbjsgdXNlIFNhbXBsZS5FeHBsYW5hdGlvbjsKKworLS0gIFRoaXMgcGFja2FnZSBjb250YWlucyBzb21lIGNvbnZlbmlhbnQgaGVscGVyIHJvdXRpbmVzIHVzZWQgdGhyb3VnaG91dAorLS0gIHRoaXMgZXhhbXBsZS4KKy0tCitwYWNrYWdlIGJvZHkgU2FtcGxlLkhlbHBlcnMgaXMKKworICAgcHJvY2VkdXJlIFdpbmRvd19UaXRsZSAoV2luICAgOiBpbiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZykKKyAgIGlzCisgICAgICBIZWlnaHQgOiBMaW5lX0NvdW50OworICAgICAgV2lkdGggIDogQ29sdW1uX0NvdW50OworICAgICAgUG9zICAgIDogQ29sdW1uX1Bvc2l0aW9uIDo9IDA7CisgICBiZWdpbgorICAgICAgR2V0X1NpemUgKFdpbiwgSGVpZ2h0LCBXaWR0aCk7CisgICAgICBpZiBUaXRsZSdMZW5ndGggPCBXaWR0aCB0aGVuCisgICAgICAgICBQb3MgOj0gKFdpZHRoIC0gVGl0bGUnTGVuZ3RoKSAvIDI7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKFdpbiwgMCwgUG9zLCBUaXRsZSk7CisgICBlbmQgV2luZG93X1RpdGxlOworCisgICBwcm9jZWR1cmUgTm90X0ltcGxlbWVudGVkIGlzCisgICBiZWdpbgorICAgICAgRXhwbGFpbiAoIk5PVElNUEwiKTsKKyAgIGVuZCBOb3RfSW1wbGVtZW50ZWQ7CisKK2VuZCBTYW1wbGUuSGVscGVyczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjOGU3OQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCkBAIC0wLDAgKzEsNTQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuSGVscGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOworCistLSAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHNvbWUgY29udmVuaWFudCBoZWxwZXIgcm91dGluZXMgdXNlZCB0aHJvdWdob3V0CistLSAgdGhpcyBleGFtcGxlLgorLS0KK3BhY2thZ2UgU2FtcGxlLkhlbHBlcnMgaXMKKworICAgcHJvY2VkdXJlIFdpbmRvd19UaXRsZSAoV2luICAgOiBpbiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyk7CisgICAtLSAgUHV0IGEgdGl0bGUgc3RyaW5nIGludG8gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHdpbmRvdworCisgICBwcm9jZWR1cmUgTm90X0ltcGxlbWVudGVkOworCitlbmQgU2FtcGxlLkhlbHBlcnM7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWtleWJvYXJkX2hhbmRsZXIuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYWMwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkYgpAQCAtMCwwICsxLDE5NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuU3RyaW5nczsgdXNlIEFkYS5TdHJpbmdzOword2l0aCBBZGEuU3RyaW5ncy5GaXhlZDsgdXNlIEFkYS5TdHJpbmdzLkZpeGVkOword2l0aCBBZGEuU3RyaW5ncy5NYXBzLkNvbnN0YW50czsgdXNlIEFkYS5TdHJpbmdzLk1hcHMuQ29uc3RhbnRzOword2l0aCBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOyB1c2UgQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKK3dpdGggQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7IHVzZSBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbjsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbjsKKword2l0aCBTYW1wbGUuSGVhZGVyX0hhbmRsZXI7IHVzZSBTYW1wbGUuSGVhZGVyX0hhbmRsZXI7Cit3aXRoIFNhbXBsZS5Gb3JtX0RlbW8uQXV4OyB1c2UgU2FtcGxlLkZvcm1fRGVtby5BdXg7Cit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKK3dpdGggU2FtcGxlLkZvcm1fRGVtby5IYW5kbGVyOworCistLSAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgY2VudHJhbGl6ZWQga2V5Ym9hcmQgaGFuZGxlciB1c2VkIHRocm91Z2hvdXQKKy0tICB0aGlzIGV4YW1wbGUuIFRoZSBoYW5kbGVyIGVzdGFibGlzaGVzIGEgdGltZW91dCBtZWNoYW5pc20gdGhhdCBwcm92aWRlcworLS0gIHBlcmlvZGljYWwgdXBkYXRlcyBvZiB0aGUgY29tbW9uIGhlYWRlciBsaW5lcyB1c2VkIGluIHRoaXMgZXhhbXBsZS4KKy0tCisKK3BhY2thZ2UgYm9keSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlciBpcworCisgICBJbl9Db21tYW5kIDogQm9vbGVhbiA6PSBGYWxzZTsKKworICAgZnVuY3Rpb24gR2V0X0tleSAoV2luIDogV2luZG93IDo9IFN0YW5kYXJkX1dpbmRvdykgcmV0dXJuIFJlYWxfS2V5X0NvZGUKKyAgIGlzCisgICAgICBLIDogUmVhbF9LZXlfQ29kZTsKKworICAgICAgZnVuY3Rpb24gQ29tbWFuZCByZXR1cm4gUmVhbF9LZXlfQ29kZTsKKworICAgICAgZnVuY3Rpb24gQ29tbWFuZCByZXR1cm4gUmVhbF9LZXlfQ29kZQorICAgICAgaXMKKyAgICAgICAgIGZ1bmN0aW9uIE15X0RyaXZlciAoRiA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbjsKKyAgICAgICAgIHBhY2thZ2UgRmggaXMgbmV3IFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlciAoTXlfRHJpdmVyKTsKKworICAgICAgICAgdHlwZSBMYWJlbF9BcnJheSBpcyBhcnJheSAoTGFiZWxfTnVtYmVyKSBvZiBTdHJpbmcgKDEgLi4gOCk7CisKKyAgICAgICAgIExhYmVscyA6IExhYmVsX0FycmF5OworCisgICAgICAgICBGQSA6IEZpZWxkX0FycmF5X0FjY2VzcyA6PSBuZXcgRmllbGRfQXJyYXknCisgICAgICAgICAgIChNYWtlICgwLCAwLCAiQ29tbWFuZDoiKSwKKyAgICAgICAgICAgIE1ha2UgKFRvcCA9PiAwLCBMZWZ0ID0+IDksIFdpZHRoID0+IENvbHVtbnMgLSAxMSksCisgICAgICAgICAgICBOdWxsX0ZpZWxkKTsKKworICAgICAgICAgSyAgOiBSZWFsX0tleV9Db2RlIDo9IEtleV9Ob25lOworICAgICAgICAgTiAgOiBOYXR1cmFsIDo9IDA7CisKKyAgICAgICAgIGZ1bmN0aW9uIE15X0RyaXZlciAoRiA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbgorICAgICAgICAgaXMKKyAgICAgICAgICAgIENoIDogQ2hhcmFjdGVyOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIFAgPSBOdWxsX1BhbmVsIHRoZW4KKyAgICAgICAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGlmIEMgaW4gVXNlcl9LZXlfQ29kZSdSYW5nZSBhbmQgdGhlbiBDID0gUVVJVCB0aGVuCisgICAgICAgICAgICAgICBpZiBEcml2ZXIgKEYsIEZfVmFsaWRhdGVfRmllbGQpID0gRm9ybV9PayAgdGhlbgorICAgICAgICAgICAgICAgICAgSyA6PSBLZXlfTm9uZTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZWxzaWYgQyBpbiBOb3JtYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgQ2ggOj0gQ2hhcmFjdGVyJ1ZhbCAoQyk7CisgICAgICAgICAgICAgICBpZiBDaCA9IExGIG9yIGVsc2UgQ2ggPSBDUiB0aGVuCisgICAgICAgICAgICAgICAgICBpZiBEcml2ZXIgKEYsIEZfVmFsaWRhdGVfRmllbGQpID0gRm9ybV9PayAgdGhlbgorICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIDogU3RyaW5nICgxIC4uIFBvc2l0aXZlIChDb2x1bW5zIC0gMTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENtZGMgOiBTdHJpbmcgKDEgLi4gOCk7CisgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0J1ZmZlciAoRmxkID0+IEZBICgyKSwgU3RyID0+IEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBUcmltIChCdWZmZXIsIExlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgQnVmZmVyICgxKSAvPSAnICcgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ21kYyA6PSBUb19VcHBlciAoQnVmZmVyIChDbWRjJ1JhbmdlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgSSBpbiBMYWJlbHMnUmFuZ2UgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgQ21kYyA9IExhYmVscyAoSSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6PSBGdW5jdGlvbl9LZXlfQ29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRnVuY3Rpb25fS2V5X051bWJlciAoSSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICAgICBlbmQgTXlfRHJpdmVyOworCisgICAgICBiZWdpbgorICAgICAgICAgSW5fQ29tbWFuZCA6PSBUcnVlOworICAgICAgICAgZm9yIEkgaW4gTGFiZWxfTnVtYmVyJ1JhbmdlIGxvb3AKKyAgICAgICAgICAgIEdldF9Tb2Z0X0xhYmVsX0tleSAoSSwgTGFiZWxzIChJKSk7CisgICAgICAgICAgICBUcmltIChMYWJlbHMgKEkpLCBMZWZ0KTsKKyAgICAgICAgICAgIFRyYW5zbGF0ZSAoTGFiZWxzIChJKSwgVXBwZXJfQ2FzZV9NYXApOworICAgICAgICAgICAgaWYgTGFiZWxzIChJKSAoMSkgLz0gJyAnIHRoZW4KKyAgICAgICAgICAgICAgIE4gOj0gTiArIDE7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgIGlmIE4gPiAwIHRoZW4gLS0gIHNvbWUgbGFiZWxzIHdlcmUgcmVhbGx5IHNldAorICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgRW51bV9JbmZvICAgIDogRW51bWVyYXRpb25fSW5mbyAoTik7CisgICAgICAgICAgICAgICBFbnVtX0ZpZWxkICAgOiBFbnVtZXJhdGlvbl9GaWVsZDsKKyAgICAgICAgICAgICAgIEogOiBQb3NpdGl2ZSA6PSBFbnVtX0luZm8uTmFtZXMnRmlyc3Q7CisKKyAgICAgICAgICAgICAgIEZybSA6IEZvcm0gOj0gQ3JlYXRlIChGQSk7CisKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICBmb3IgSSBpbiBMYWJlbF9OdW1iZXInUmFuZ2UgbG9vcAorICAgICAgICAgICAgICAgICAgaWYgTGFiZWxzIChJKSAoMSkgLz0gJyAnIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIEVudW1fSW5mby5OYW1lcyAoSikgOj0gbmV3IFN0cmluZycoTGFiZWxzIChJKSk7CisgICAgICAgICAgICAgICAgICAgICBKIDo9IEogKyAxOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICAgICAgICBFbnVtX0ZpZWxkIDo9IENyZWF0ZSAoRW51bV9JbmZvLCBUcnVlKTsKKyAgICAgICAgICAgICAgIFNldF9GaWVsZF9UeXBlIChGQSAoMiksIEVudW1fRmllbGQpOworICAgICAgICAgICAgICAgU2V0X0JhY2tncm91bmQgKEZBICgyKSwgTm9ybWFsX1ZpZGVvKTsKKworICAgICAgICAgICAgICAgRmguRHJpdmVfTWUgKEZybSwgTGluZXMgLSAzLCAwKTsKKyAgICAgICAgICAgICAgIERlbGV0ZSAoRnJtKTsKKyAgICAgICAgICAgICAgIFVwZGF0ZV9QYW5lbHM7IFVwZGF0ZV9TY3JlZW47CisgICAgICAgICAgICBlbmQ7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBGcmVlIChGQSwgVHJ1ZSk7CisgICAgICAgICBJbl9Db21tYW5kIDo9IEZhbHNlOworICAgICAgICAgcmV0dXJuIEs7CisgICAgICBlbmQgQ29tbWFuZDsKKworICAgYmVnaW4KKyAgICAgIFNldF9UaW1lb3V0X01vZGUgKFdpbiwgRGVsYXllZCwgMzAwMDApOworICAgICAgbG9vcAorICAgICAgICAgSyA6PSBHZXRfS2V5c3Ryb2tlIChXaW4pOworICAgICAgICAgaWYgSyA9IEtleV9Ob25lIHRoZW4gIC0tIGEgdGltZW91dCBvY2N1cmVkCisgICAgICAgICAgICBVcGRhdGVfSGVhZGVyX1dpbmRvdzsKKyAgICAgICAgIGVsc2lmIEsgPSAzIGFuZCB0aGVuIG5vdCBJbl9Db21tYW5kICB0aGVuICAtLSBDVFJMLUMKKyAgICAgICAgICAgIEsgOj0gQ29tbWFuZDsKKyAgICAgICAgICAgIGV4aXQgd2hlbiBLIC89IEtleV9Ob25lOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgICAgcmV0dXJuIEs7CisgICBlbmQgR2V0X0tleTsKKworICAgcHJvY2VkdXJlIEluaXRfS2V5Ym9hcmRfSGFuZGxlciBpcworICAgYmVnaW4KKyAgICAgIG51bGw7CisgICBlbmQgSW5pdF9LZXlib2FyZF9IYW5kbGVyOworCitlbmQgU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLWtleWJvYXJkX2hhbmRsZXIuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWIxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkcwpAQCAtMCwwICsxLDU1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLktleWJvYXJkX0hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKworLS0gIFRoaXMgcGFja2FnZSBjb250YWlucyBhIGNlbnRyYWxpemVkIGtleWJvYXJkIGhhbmRsZXIgdXNlZCB0aHJvdWdob3V0CistLSAgdGhpcyBleGFtcGxlLiBUaGUgaGFuZGxlciBlc3RhYmxpc2hlcyBhIHRpbWVvdXQgbWVjaGFuaXNtIHRoYXQgcHJvdmlkZXMKKy0tICBwZXJpb2RpY2FsIHVwZGF0ZXMgb2YgdGhlIGNvbW1vbiBoZWFkZXIgbGluZXMgdXNlZCBpbiB0aGlzIGV4YW1wbGUuCistLQorcGFja2FnZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlciBpcworCisgICBmdW5jdGlvbiBHZXRfS2V5IChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93KSByZXR1cm4gUmVhbF9LZXlfQ29kZTsKKyAgIC0tICBUaGUgY2VudHJhbCByb3V0aW5lIGZvciBoYW5kbGluZyBrZXlzdHJva2VzLgorCisgICBwcm9jZWR1cmUgSW5pdF9LZXlib2FyZF9IYW5kbGVyOworICAgLS0gIEluaXRpYWxpemUgdGhlIGtleWJvYXJkCisKK2VuZCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1hbmlmZXN0LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1hbmlmZXN0LmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjc2YzRjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWFuaWZlc3QuYWRzCkBAIC0wLDAgKzEsNjcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5NYW5pZmVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKworcGFja2FnZSBTYW1wbGUuTWFuaWZlc3QgaXMKKworICAgUVVJVCAgICAgICAgIDogY29uc3RhbnQgVXNlcl9LZXlfQ29kZSAgICA6PSBVc2VyX0tleV9Db2RlJ0ZpcnN0OworICAgU0VMRUNUX0lURU0gIDogY29uc3RhbnQgVXNlcl9LZXlfQ29kZSAgICA6PSBRVUlUICsgMTsKKworICAgRktFWV9IRUxQICAgIDogY29uc3RhbnQgTGFiZWxfTnVtYmVyICAgICA6PSAxOworICAgSEVMUF9DT0RFICAgIDogY29uc3RhbnQgU3BlY2lhbF9LZXlfQ29kZSA6PSBLZXlfRjE7CisgICBGS0VZX0VYUExBSU4gOiBjb25zdGFudCBMYWJlbF9OdW1iZXIgICAgIDo9IDI7CisgICBFWFBMQUlOX0NPREUgOiBjb25zdGFudCBTcGVjaWFsX0tleV9Db2RlIDo9IEtleV9GMjsKKyAgIEZLRVlfUVVJVCAgICA6IGNvbnN0YW50IExhYmVsX051bWJlciAgICAgOj0gMzsKKyAgIFFVSVRfQ09ERSAgICA6IGNvbnN0YW50IFNwZWNpYWxfS2V5X0NvZGUgOj0gS2V5X0YzOworCisgICBNZW51X01hcmtlciA6IGNvbnN0YW50IFN0cmluZyA6PSAiPT4gIjsKKworICAgRGVmYXVsdF9Db2xvcnMgIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSAxOworICAgTWVudV9Gb3JlX0NvbG9yIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSAyOworICAgTWVudV9CYWNrX0NvbG9yIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSAzOworICAgTWVudV9HcmV5X0NvbG9yIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSA0OworICAgRm9ybV9Gb3JlX0NvbG9yIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSA1OworICAgRm9ybV9CYWNrX0NvbG9yIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSA2OworICAgTm90ZXBhZF9Db2xvciAgIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSA3OworICAgSGVscF9Db2xvciAgICAgIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSA4OworICAgSGVhZGVyX0NvbG9yICAgIDogY29uc3RhbnQgUmVkZWZpbmFibGVfQ29sb3JfUGFpciA6PSA5OworCitlbmQgU2FtcGxlLk1hbmlmZXN0OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWIyMzdjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZGIKQEAgLTAsMCArMSwyMDQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLk1lbnVfRGVtby5BdXggICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEzICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsgdXNlIEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7CisKK3dpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0Oword2l0aCBTYW1wbGUuSGVscGVyczsgdXNlIFNhbXBsZS5IZWxwZXJzOword2l0aCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsgdXNlIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuTWVudV9EZW1vLkF1eCBpcworCisgICBwcm9jZWR1cmUgR2VvbWV0cnkgKE0gIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIEwgIDogb3V0IExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgIEMgIDogb3V0IENvbHVtbl9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgWSAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBGeSA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBGeCA6IG91dCBDb2x1bW5fUG9zaXRpb24pOworCisgICBwcm9jZWR1cmUgR2VvbWV0cnkgKE0gIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIEwgIDogb3V0IExpbmVfQ291bnQ7ICAgICAgICAtLSBMaW5lcyB1c2VkIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIEMgIDogb3V0IENvbHVtbl9Db3VudDsgICAgICAtLSBDb2x1bW5zIHVzZWQgZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgWSAgOiBvdXQgTGluZV9Qb3NpdGlvbjsgICAgIC0tIFByb3Bvc2VkIExpbmUgZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOyAgIC0tIFByb3Bvc2VkIENvbHVtbiBmb3IgbWVudQorICAgICAgICAgICAgICAgICAgICAgICBGeSA6IG91dCBMaW5lX1Bvc2l0aW9uOyAgICAgLS0gVmVydGljYWwgaW5uZXIgZnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgRnggOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKSAgIC0tIEhvcml6LiBpbm5lciBmcmFtZQorICAgaXMKKyAgICAgIFNwY19EZXNjIDogQ29sdW1uX1Bvc2l0aW9uOyAtLSBzcGFjZXMgYmV0d2VlbiBkZXNjcmlwdGlvbiBhbmQgaXRlbQorICAgYmVnaW4KKyAgICAgIFNldF9NYXJrIChNLCBNZW51X01hcmtlcik7CisKKyAgICAgIFNwYWNpbmcgKE0sIFNwY19EZXNjLCBGeSwgRngpOworICAgICAgU2NhbGUgKE0sIEwsIEMpOworCisgICAgICBGeCA6PSBGeCArIENvbHVtbl9Qb3NpdGlvbiAoRnkgLSAxKTsgLS0gbG9va3MgYSBiaXQgbmljZXIKKworICAgICAgTCA6PSBMICsgMiAqIEZ5OyAgLS0gY291bnQgZm9yIGZyYW1lIGF0IHRvcCBhbmQgYm90dG9tCisgICAgICBDIDo9IEMgKyAyICogRng7ICAtLSAiCisKKyAgICAgIC0tICBDYWxjdWxhdGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIGF0IHRoZSBzY3JlZW4gY2VudGVyCisgICAgICBYIDo9IChDb2x1bW5zIC0gQykgLyAyOworICAgICAgWSA6PSAxOyAgLS0gYWx3YXlzIHN0YXJ0aW4gbGluZSAxCisKKyAgIGVuZCBHZW9tZXRyeTsKKworICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIEwgOiBvdXQgTGluZV9Db3VudDsgICAgICAgIC0tIExpbmVzIHVzZWQgZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgQyA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIFkgOiBvdXQgTGluZV9Qb3NpdGlvbjsgICAgIC0tIFByb3Bvc2VkIExpbmUgZm9yIG1lbnUKKyAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKSAgLS0gUHJvcG9zZWQgQ29sdW1uIGZvciBtZW51CisgICBpcworICAgICAgRnkgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgRnggOiBDb2x1bW5fUG9zaXRpb247CisgICBiZWdpbgorICAgICAgR2VvbWV0cnkgKE0sIEwsIEMsIFksIFgsIEZ5LCBGeCk7CisgICBlbmQgR2VvbWV0cnk7CisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgTGluICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBDb2wgICA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIFBhbmVsCisgICBpcworICAgICAgVywgUyA6IFdpbmRvdzsKKyAgICAgIEwgOiBMaW5lX0NvdW50OworICAgICAgQyA6IENvbHVtbl9Db3VudDsKKyAgICAgIFksIEZ5IDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFgsIEZ4IDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgUGFuIDogUGFuZWw7CisgICBiZWdpbgorICAgICAgR2VvbWV0cnkgKE0sIEwsIEMsIFksIFgsIEZ5LCBGeCk7CisgICAgICBXIDo9IE5ld19XaW5kb3cgKEwsIEMsIExpbiwgQ29sKTsKKyAgICAgIFNldF9NZXRhX01vZGUgKFcpOworICAgICAgU2V0X0tleVBhZF9Nb2RlIChXKTsKKyAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgU2V0X0JhY2tncm91bmQgKFdpbiA9PiBXLAorICAgICAgICAgICAgICAgICAgICAgICAgIENoICA9PiAoQ2ggICAgPT4gJyAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gTWVudV9CYWNrX0NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gTm9ybWFsX1ZpZGVvKSk7CisgICAgICAgICBTZXRfRm9yZWdyb3VuZCAoTWVuID0+IE0sIENvbG9yID0+IE1lbnVfRm9yZV9Db2xvcik7CisgICAgICAgICBTZXRfQmFja2dyb3VuZCAoTWVuID0+IE0sIENvbG9yID0+IE1lbnVfQmFja19Db2xvcik7CisgICAgICAgICBTZXRfR3JleSAoTWVuID0+IE0sIENvbG9yID0+IE1lbnVfR3JleV9Db2xvcik7CisgICAgICAgICBFcmFzZSAoVyk7CisgICAgICBlbmQgaWY7CisgICAgICBTIDo9IERlcml2ZWRfV2luZG93IChXLCBMIC0gRnksIEMgLSBGeCwgRnksIEZ4KTsKKyAgICAgIFNldF9NZXRhX01vZGUgKFMpOworICAgICAgU2V0X0tleVBhZF9Nb2RlIChTKTsKKyAgICAgIEJveCAoVyk7CisgICAgICBTZXRfV2luZG93IChNLCBXKTsKKyAgICAgIFNldF9TdWJfV2luZG93IChNLCBTKTsKKyAgICAgIGlmIFRpdGxlJ0xlbmd0aCA+IDAgdGhlbgorICAgICAgICAgV2luZG93X1RpdGxlIChXLCBUaXRsZSk7CisgICAgICBlbmQgaWY7CisgICAgICBQYW4gOj0gTmV3X1BhbmVsIChXKTsKKyAgICAgIFBvc3QgKE0pOworICAgICAgcmV0dXJuIFBhbjsKKyAgIGVuZCBDcmVhdGU7CisKKyAgIHByb2NlZHVyZSBEZXN0cm95IChNIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICBQIDogaW4gb3V0IFBhbmVsKQorICAgaXMKKyAgICAgIFcsIFMgOiBXaW5kb3c7CisgICBiZWdpbgorICAgICAgVyA6PSBHZXRfV2luZG93IChNKTsKKyAgICAgIFMgOj0gR2V0X1N1Yl9XaW5kb3cgKE0pOworICAgICAgUG9zdCAoTSwgRmFsc2UpOworICAgICAgRXJhc2UgKFcpOworICAgICAgRGVsZXRlIChQKTsKKyAgICAgIFNldF9XaW5kb3cgKE0sIE51bGxfV2luZG93KTsKKyAgICAgIFNldF9TdWJfV2luZG93IChNLCBOdWxsX1dpbmRvdyk7CisgICAgICBEZWxldGUgKFMpOworICAgICAgRGVsZXRlIChXKTsKKyAgICAgIFVwZGF0ZV9QYW5lbHM7CisgICBlbmQgRGVzdHJveTsKKworICAgZnVuY3Rpb24gR2V0X1JlcXVlc3QgKE0gOiBNZW51OyBQIDogUGFuZWwpIHJldHVybiBLZXlfQ29kZQorICAgaXMKKyAgICAgIFcgIDogY29uc3RhbnQgV2luZG93IDo9IEdldF9XaW5kb3cgKE0pOworICAgICAgSyAgOiBSZWFsX0tleV9Db2RlOworICAgICAgQ2ggOiBDaGFyYWN0ZXI7CisgICBiZWdpbgorICAgICAgVG9wIChQKTsKKyAgICAgIGxvb3AKKyAgICAgICAgIEsgOj0gR2V0X0tleSAoVyk7CisgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICB3aGVuIEhFTFBfQ09ERSAgICAgICAgICAgPT4gRXhwbGFpbl9Db250ZXh0OworICAgICAgICAgICAgICAgd2hlbiBFWFBMQUlOX0NPREUgICAgICAgID0+IEV4cGxhaW4gKCJNRU5VS0VZUyIpOworICAgICAgICAgICAgICAgd2hlbiBLZXlfSG9tZSAgICAgICAgICAgID0+IHJldHVybiBSRVFfRklSU1RfSVRFTTsKKyAgICAgICAgICAgICAgIHdoZW4gUVVJVF9DT0RFICAgICAgICAgICA9PiByZXR1cm4gUVVJVDsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9Eb3duICAgICA9PiByZXR1cm4gUkVRX0RPV05fSVRFTTsKKyAgICAgICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9VcCAgICAgICA9PiByZXR1cm4gUkVRX1VQX0lURU07CisgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfTGVmdCAgICAgPT4gcmV0dXJuIFJFUV9MRUZUX0lURU07CisgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfUmlnaHQgICAgPT4gcmV0dXJuIFJFUV9SSUdIVF9JVEVNOworICAgICAgICAgICAgICAgd2hlbiBLZXlfRW5kICAgICAgICAgICAgID0+IHJldHVybiBSRVFfTEFTVF9JVEVNOworICAgICAgICAgICAgICAgd2hlbiBLZXlfQmFja3NwYWNlICAgICAgID0+IHJldHVybiBSRVFfQkFDS19QQVRURVJOOworICAgICAgICAgICAgICAgd2hlbiBLZXlfTmV4dF9QYWdlICAgICAgID0+IHJldHVybiBSRVFfU0NSX0RQQUdFOworICAgICAgICAgICAgICAgd2hlbiBLZXlfUHJldmlvdXNfUGFnZSAgID0+IHJldHVybiBSRVFfU0NSX1VQQUdFOworICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgICAgICAgICAgICAgID0+IHJldHVybiBLOworICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBlbHNpZiBLIGluIE5vcm1hbF9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICBDaCA6PSBDaGFyYWN0ZXInVmFsIChLKTsKKyAgICAgICAgICAgIGNhc2UgQ2ggaXMKKyAgICAgICAgICAgICAgIHdoZW4gQ0FOID0+IHJldHVybiBRVUlUOyAgICAgICAgICAgICAgICAgIC0tICBDVFJMLVgKKyAgICAgICAgICAgICAgIHdoZW4gU08gID0+IHJldHVybiBSRVFfTkVYVF9JVEVNOyAgICAgICAgIC0tICBDVFJMLU4KKyAgICAgICAgICAgICAgIHdoZW4gRExFID0+IHJldHVybiBSRVFfUFJFVl9JVEVNOyAgICAgICAgIC0tICBDVFJMLVAKKyAgICAgICAgICAgICAgIHdoZW4gTkFLID0+IHJldHVybiBSRVFfU0NSX1VMSU5FOyAgICAgICAgIC0tICBDVFJMLVUKKyAgICAgICAgICAgICAgIHdoZW4gRU9UID0+IHJldHVybiBSRVFfU0NSX0RMSU5FOyAgICAgICAgIC0tICBDVFJMLUQKKyAgICAgICAgICAgICAgIHdoZW4gQUNLID0+IHJldHVybiBSRVFfU0NSX0RQQUdFOyAgICAgICAgIC0tICBDVFJMLUYKKyAgICAgICAgICAgICAgIHdoZW4gU1RYID0+IHJldHVybiBSRVFfU0NSX1VQQUdFOyAgICAgICAgIC0tICBDVFJMLUIKKyAgICAgICAgICAgICAgIHdoZW4gRU0gID0+IHJldHVybiBSRVFfQ0xFQVJfUEFUVEVSTjsgICAgIC0tICBDVFJMLVkKKyAgICAgICAgICAgICAgIHdoZW4gQlMgID0+IHJldHVybiBSRVFfQkFDS19QQVRURVJOOyAgICAgIC0tICBDVFJMLUgKKyAgICAgICAgICAgICAgIHdoZW4gU09IID0+IHJldHVybiBSRVFfTkVYVF9NQVRDSDsgICAgICAgIC0tICBDVFJMLUEKKyAgICAgICAgICAgICAgIHdoZW4gRU5RID0+IHJldHVybiBSRVFfUFJFVl9NQVRDSDsgICAgICAgIC0tICBDVFJMLUUKKyAgICAgICAgICAgICAgIHdoZW4gREM0ID0+IHJldHVybiBSRVFfVE9HR0xFX0lURU07ICAgICAgIC0tICBDVFJMLVQKKworICAgICAgICAgICAgICAgd2hlbiBDUiB8IExGICA9PiByZXR1cm4gU0VMRUNUX0lURU07CisgICAgICAgICAgICAgICB3aGVuIG90aGVycyAgID0+IHJldHVybiBLOworICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gSzsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgZW5kIEdldF9SZXF1ZXN0OworCitlbmQgU2FtcGxlLk1lbnVfRGVtby5BdXg7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1hdXguYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NGUzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkcwpAQCAtMCwwICsxLDcxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5NZW51X0RlbW8uQXV4ICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOyB1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7CisKK3BhY2thZ2UgU2FtcGxlLk1lbnVfRGVtby5BdXggaXMKKworICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIFggIDogb3V0IENvbHVtbl9Qb3NpdGlvbik7CisgICAtLSAgQ2FsY3VsYXRlIHRoZSBnZW9tZXRyeSBmb3IgYSBwYW5lbCBiZWVpbmcgYWJsZSB0byBiZSB1c2VkIHRvIGRpc3BsYXkKKyAgIC0tICB0aGUgbWVudS4KKworICAgZnVuY3Rpb24gQ3JlYXRlIChNICAgICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gUGFuZWw7CisgICAtLSAgQ3JlYXRlIGEgcGFuZWwgZGVjb3JhdGVkIHdpdGggYSBmcmFtZSBhbmQgdGhlIHRpdGxlIGF0IHRoZSBzcGVjaWZpZWQKKyAgIC0tICBwb3NpdGlvbi4gVGhlIGRpbWVuc2lvbiBvZiB0aGUgcGFuZWwgaXMgZGVyaXZlZCBmcm9tIHRoZSBtZW51cyBsYXlvdXQuCisKKyAgIHByb2NlZHVyZSBEZXN0cm95IChNIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICBQIDogaW4gb3V0IFBhbmVsKTsKKyAgIC0tICBEZXN0cm95IGFsbCB0aGUgd2luZG93aW5nIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWVudSBhbmQKKyAgIC0tICBwYW5lbC4KKworICAgZnVuY3Rpb24gR2V0X1JlcXVlc3QgKE0gOiBNZW51OyBQIDogUGFuZWwpIHJldHVybiBLZXlfQ29kZTsKKyAgIC0tICBDZW50cmFsaXplZCByZXF1ZXN0IGRyaXZlciBmb3IgYWxsIG1lbnVzIGluIHRoaXMgc2FtcGxlLiBUaGlzCisgICAtLSAgZ2l2ZXMgdXMgYSBjb21tb24ga2V5IGJpbmRpbmcgZm9yIGFsbCBtZW51cy4KKworZW5kIFNhbXBsZS5NZW51X0RlbW8uQXV4OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzQ3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZGIKQEAgLTAsMCArMSwxMDggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE1ICQKKy0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggU2FtcGxlLk1lbnVfRGVtby5BdXg7Cit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZTsgIHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOworCitwYWNrYWdlIGJvZHkgU2FtcGxlLk1lbnVfRGVtby5IYW5kbGVyIGlzCisKKyAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgU2FtcGxlLk1lbnVfRGVtby5BdXg7CisKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIGlzCisgICAgICBMIDogTGluZV9Db3VudDsKKyAgICAgIEMgOiBDb2x1bW5fQ291bnQ7CisgICAgICBZIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFggOiBDb2x1bW5fUG9zaXRpb247CisgICBiZWdpbgorICAgICAgQXV4Lkdlb21ldHJ5IChNLCBMLCBDLCBZLCBYKTsKKyAgICAgIERyaXZlX01lIChNLCBZLCBYLCBUaXRsZSk7CisgICBlbmQgRHJpdmVfTWU7CisKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIGlzCisgICAgICBNYXNrIDogRXZlbnRfTWFzayA6PSBOb19FdmVudHM7CisgICAgICBPbGQgIDogRXZlbnRfTWFzazsKKyAgICAgIFBhbiAgOiBQYW5lbCA6PSBBdXguQ3JlYXRlIChNLCBUaXRsZSwgTGluLCBDb2wpOworICAgICAgViAgICA6IEN1cnNvcl9WaXNpYmlsaXR5IDo9IEludmlzaWJsZTsKKyAgIGJlZ2luCisgICAgICAtLSAgV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBDbGlja3Mgd2l0aCB0aGUgbGVmdCBidXR0b24KKyAgICAgIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnRzIChMZWZ0LCBBbGxfQ2xpY2tzLCBNYXNrKTsKKyAgICAgIE9sZCA6PSBTdGFydF9Nb3VzZSAoTWFzayk7CisgICAgICBTZXRfQ3Vyc29yX1Zpc2liaWxpdHkgKFYpOworICAgICAgbG9vcAorICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgSyA6IEtleV9Db2RlIDo9IEF1eC5HZXRfUmVxdWVzdCAoTSwgUGFuKTsKKyAgICAgICAgICAgIFIgOiBjb25zdGFudCBEcml2ZXJfUmVzdWx0IDo9IERyaXZlciAoTSwgSyk7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgY2FzZSBSIGlzCisgICAgICAgICAgICAgICB3aGVuIE1lbnVfT2sgPT4gbnVsbDsKKyAgICAgICAgICAgICAgIHdoZW4gVW5rbm93bl9SZXF1ZXN0ID0+CisgICAgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAgICAgICBJIDogY29uc3RhbnQgSXRlbSA6PSBDdXJyZW50IChNKTsKKyAgICAgICAgICAgICAgICAgICAgIE8gOiBJdGVtX09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgaWYgSyA9IEtleV9Nb3VzZSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBLIDo9IFNFTEVDVF9JVEVNOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKEksIE8pOworICAgICAgICAgICAgICAgICAgICAgaWYgSyA9IFNFTEVDVF9JVEVNIGFuZCB0aGVuIG5vdCBPLlNlbGVjdGFibGUgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgQmVlcDsKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIE15X0RyaXZlciAoTSwgSywgUGFuKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0OworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgZW5kOworICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gQmVlcDsKKyAgICAgICAgICAgIGVuZCBjYXNlOworICAgICAgICAgZW5kOworICAgICAgZW5kIGxvb3A7CisgICAgICBFbmRfTW91c2UgKE9sZCk7CisgICAgICBBdXguRGVzdHJveSAoTSwgUGFuKTsKKyAgIGVuZCBEcml2ZV9NZTsKKworZW5kIFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlcjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTgyZjlmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRzCkBAIC0wLDAgKzEsNjQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsKKworZ2VuZXJpYworICAgd2l0aCBmdW5jdGlvbiAgTXlfRHJpdmVyIChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLICAgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuOworcGFja2FnZSBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgaXMKKworICAgcHJvY2VkdXJlIERyaXZlX01lIChNICAgICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgIExpbiAgIDogaW4gTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBpbiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIC0tICBQb3NpdGlvbiB0aGUgbWVudSBhdCB0aGUgZ2l2ZW4gcG9pbnQgYW5kIGRyaXZlIGl0LgorCisgICBwcm9jZWR1cmUgRHJpdmVfTWUgKE0gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpOworICAgLS0gIENlbnRlciBtZW51IGFuZCBkcml2ZSBpdC4KKworZW5kIFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlcjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjQ2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRiCkBAIC0wLDAgKzEsMzk2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLk1lbnVfRGVtbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS4xOCAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDg6MzAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51czsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YTsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YTsKKword2l0aCBTYW1wbGUuTWFuaWZlc3Q7IHVzZSBTYW1wbGUuTWFuaWZlc3Q7Cit3aXRoIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsgdXNlIFNhbXBsZS5GdW5jdGlvbl9LZXlfU2V0dGluZzsKK3dpdGggU2FtcGxlLk1lbnVfRGVtby5IYW5kbGVyOword2l0aCBTYW1wbGUuSGVscGVyczsgdXNlIFNhbXBsZS5IZWxwZXJzOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuTWVudV9EZW1vIGlzCisKKyAgIHBhY2thZ2UgU3BhY2luZ19EZW1vIGlzCisgICAgICBwcm9jZWR1cmUgU3BhY2luZ19UZXN0OworICAgZW5kIFNwYWNpbmdfRGVtbzsKKworICAgcGFja2FnZSBib2R5IFNwYWNpbmdfRGVtbyBpcworCisgICAgICBwcm9jZWR1cmUgU3BhY2luZ19UZXN0CisgICAgICBpcworICAgICAgICAgZnVuY3Rpb24gTXlfRHJpdmVyIChNIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6IEtleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQIDogUGFuZWwpIHJldHVybiBCb29sZWFuOworCisgICAgICAgICBwcm9jZWR1cmUgU2V0X09wdGlvbl9LZXk7CisgICAgICAgICBwcm9jZWR1cmUgU2V0X1NlbGVjdF9LZXk7CisgICAgICAgICBwcm9jZWR1cmUgU2V0X0Rlc2NyaXB0aW9uX0tleTsKKyAgICAgICAgIHByb2NlZHVyZSBTZXRfSGlkZV9LZXk7CisKKyAgICAgICAgIHBhY2thZ2UgTWggaXMgbmV3IFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlciAoTXlfRHJpdmVyKTsKKworICAgICAgICAgSSA6IEl0ZW1fQXJyYXlfQWNjZXNzIDo9IG5ldyBJdGVtX0FycmF5JworICAgICAgICAgICAoTmV3X0l0ZW0gKCJKYW51YXJ5IiwgICAiMzEgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJGZWJydWFyeSIsICAiMjgvMjkgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJNYXJjaCIsICAgICAiMzEgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJBcHJpbCIsICAgICAiMzAgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJNYXkiLCAgICAgICAiMzEgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJKdW5lIiwgICAgICAiMzAgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJKdWx5IiwgICAgICAiMzEgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJBdWd1c3QiLCAgICAiMzEgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJTZXB0ZW1iZXIiLCAiMzAgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJPY3RvYmVyIiwgICAiMzEgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJOb3ZlbWJlciIsICAiMzAgRGF5cyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJEZWNlbWJlciIsICAiMzEgRGF5cyIpLAorICAgICAgICAgICAgTnVsbF9JdGVtKTsKKworICAgICAgICAgTSA6IE1lbnUgICA6PSBOZXdfTWVudSAoSSk7CisgICAgICAgICBGbGlwX1N0YXRlIDogQm9vbGVhbiA6PSBUcnVlOworICAgICAgICAgSGlkZV9Mb25nICA6IEJvb2xlYW4gOj0gRmFsc2U7CisKKyAgICAgICAgIHR5cGUgRm9ybWF0X0NvZGUgaXMgKEZvdXJfQnlfMSwgRm91cl9CeV8yLCBGb3VyX0J5XzMpOworICAgICAgICAgdHlwZSBPcGVyYXRpb25zICBpcyAoRmxpcCwgUmVvcmRlciwgUmVmb3JtYXQsIFJlc2VsZWN0LCBEZXNjcmliZSk7CisKKyAgICAgICAgIHR5cGUgQ2hhbmdlIGlzIGFycmF5IChPcGVyYXRpb25zKSBvZiBCb29sZWFuOworICAgICAgICAgcHJhZ21hIFBhY2sgKENoYW5nZSk7CisgICAgICAgICBOb19DaGFuZ2UgOiBjb25zdGFudCBDaGFuZ2UgOj0gQ2hhbmdlJyhvdGhlcnMgPT4gRmFsc2UpOworCisgICAgICAgICBDdXJyZW50X0Zvcm1hdCA6IEZvcm1hdF9Db2RlIDo9IEZvdXJfQnlfMTsKKyAgICAgICAgIFRvX0NoYW5nZSA6IENoYW5nZSA6PSBOb19DaGFuZ2U7CisKKyAgICAgICAgIGZ1bmN0aW9uIE15X0RyaXZlciAoTSA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbgorICAgICAgICAgaXMKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiBNID0gTnVsbF9NZW51IHRoZW4KKyAgICAgICAgICAgICAgIHJhaXNlIE1lbnVfRXhjZXB0aW9uOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgaWYgUCA9IE51bGxfUGFuZWwgdGhlbgorICAgICAgICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgVG9fQ2hhbmdlIDo9IE5vX0NoYW5nZTsKKyAgICAgICAgICAgIGlmIEsgaW4gVXNlcl9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICAgICBpZiBLID0gUVVJVCB0aGVuCisgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGlmIEsgaW4gU3BlY2lhbF9LZXlfQ29kZSdSYW5nZSB0aGVuCisgICAgICAgICAgICAgICBjYXNlIEsgaXMKKyAgICAgICAgICAgICAgICAgIHdoZW4gS2V5X0Y0ID0+CisgICAgICAgICAgICAgICAgICAgICBUb19DaGFuZ2UgKEZsaXApIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgIHdoZW4gS2V5X0Y1ID0+CisgICAgICAgICAgICAgICAgICAgICBUb19DaGFuZ2UgKFJlZm9ybWF0KSAgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRfRm9ybWF0IDo9IEZvdXJfQnlfMTsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfRjYgPT4KKyAgICAgICAgICAgICAgICAgICAgIFRvX0NoYW5nZSAoUmVmb3JtYXQpICA6PSBUcnVlOworICAgICAgICAgICAgICAgICAgICAgQ3VycmVudF9Gb3JtYXQgOj0gRm91cl9CeV8yOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICAgICB3aGVuIEtleV9GNyA9PgorICAgICAgICAgICAgICAgICAgICAgVG9fQ2hhbmdlIChSZWZvcm1hdCkgIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICBDdXJyZW50X0Zvcm1hdCA6PSBGb3VyX0J5XzM7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgIHdoZW4gS2V5X0Y4ID0+CisgICAgICAgICAgICAgICAgICAgICBUb19DaGFuZ2UgKFJlb3JkZXIpIDo9IFRydWU7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgIHdoZW4gS2V5X0Y5ID0+CisgICAgICAgICAgICAgICAgICAgICBUb19DaGFuZ2UgKFJlc2VsZWN0KSA6PSBUcnVlOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICAgICB3aGVuIEtleV9GMTAgPT4KKyAgICAgICAgICAgICAgICAgICAgIGlmIEN1cnJlbnRfRm9ybWF0IC89IEZvdXJfQnlfMyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBUb19DaGFuZ2UgKERlc2NyaWJlKSA6PSBUcnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICB3aGVuIEtleV9GMTEgPT4KKyAgICAgICAgICAgICAgICAgICAgIEhpZGVfTG9uZyA6PSBub3QgSGlkZV9Mb25nOworICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgTyA6IEl0ZW1fT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgSiBpbiBJJ1JhbmdlIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChJIChKKSwgTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPLlNlbGVjdGFibGUgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIEhpZGVfTG9uZyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEogaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gMSB8IDMgfCA1IHwgNyB8IDggfCAxMCB8IDEyID0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPLlNlbGVjdGFibGUgOj0gRmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRfT3B0aW9ucyAoSSAoSiksIE8pOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBudWxsOworICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICAgICBlbmQgTXlfRHJpdmVyOworCisgICAgICAgICBwcm9jZWR1cmUgU2V0X09wdGlvbl9LZXkKKyAgICAgICAgIGlzCisgICAgICAgICAgICBPIDogTWVudV9PcHRpb25fU2V0OworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIEN1cnJlbnRfRm9ybWF0ID0gRm91cl9CeV8xIHRoZW4KKyAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoOCwgIiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgaWYgTy5Sb3dfTWFqb3JfT3JkZXIgdGhlbgorICAgICAgICAgICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5ICg4LCAiTy1Db2wiKTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoOCwgIk8tUm93Iik7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgICAgICAgIGVuZCBTZXRfT3B0aW9uX0tleTsKKworICAgICAgICAgcHJvY2VkdXJlIFNldF9TZWxlY3RfS2V5CisgICAgICAgICBpcworICAgICAgICAgICAgTyA6IE1lbnVfT3B0aW9uX1NldDsKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBHZXRfT3B0aW9ucyAoTSwgTyk7CisgICAgICAgICAgICBpZiBPLk9uZV9WYWx1ZWQgdGhlbgorICAgICAgICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5ICg5LCAiTXVsdGkiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoOSwgIlNpbmdsIik7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgICAgICAgIGVuZCBTZXRfU2VsZWN0X0tleTsKKworICAgICAgICAgcHJvY2VkdXJlIFNldF9EZXNjcmlwdGlvbl9LZXkKKyAgICAgICAgIGlzCisgICAgICAgICAgICBPIDogTWVudV9PcHRpb25fU2V0OworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIEN1cnJlbnRfRm9ybWF0ID0gRm91cl9CeV8zIHRoZW4KKyAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoMTAsICIiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChNLCBPKTsKKyAgICAgICAgICAgICAgIGlmIE8uU2hvd19EZXNjcmlwdGlvbnMgdGhlbgorICAgICAgICAgICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5ICgxMCwgIi1EZXNjIik7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDEwLCAiK0Rlc2MiKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlOworICAgICAgICAgZW5kIFNldF9EZXNjcmlwdGlvbl9LZXk7CisKKyAgICAgICAgIHByb2NlZHVyZSBTZXRfSGlkZV9LZXkKKyAgICAgICAgIGlzCisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgSGlkZV9Mb25nIHRoZW4KKyAgICAgICAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoMTEsICJFbmFiIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDExLCAiRGlzYWIiKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIFJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlOworICAgICAgICAgZW5kIFNldF9IaWRlX0tleTsKKworICAgICAgYmVnaW4KKyAgICAgICAgIFB1c2hfRW52aXJvbm1lbnQgKCJNRU5VMDEiKTsKKyAgICAgICAgIE5vdGVwYWQgKCJNRU5VLVBBRDAxIik7CisgICAgICAgICBEZWZhdWx0X0xhYmVsczsKKyAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoNCwgIkZsaXAiKTsKKyAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleSAoNSwgIjR4MSIpOworICAgICAgICAgU2V0X1NvZnRfTGFiZWxfS2V5ICg2LCAiNHgyIik7CisgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKDcsICI0eDMiKTsKKyAgICAgICAgIFNldF9PcHRpb25fS2V5OworICAgICAgICAgU2V0X1NlbGVjdF9LZXk7CisgICAgICAgICBTZXRfRGVzY3JpcHRpb25fS2V5OworICAgICAgICAgU2V0X0hpZGVfS2V5OworCisgICAgICAgICBTZXRfRm9ybWF0IChNLCA0LCAxKTsKKyAgICAgICAgIGxvb3AKKyAgICAgICAgICAgIE1oLkRyaXZlX01lIChNKTsKKyAgICAgICAgICAgIGV4aXQgd2hlbiBUb19DaGFuZ2UgPSBOb19DaGFuZ2U7CisgICAgICAgICAgICBpZiBUb19DaGFuZ2UgKEZsaXApIHRoZW4KKyAgICAgICAgICAgICAgIGlmIEZsaXBfU3RhdGUgdGhlbgorICAgICAgICAgICAgICAgICAgRmxpcF9TdGF0ZSA6PSBGYWxzZTsKKyAgICAgICAgICAgICAgICAgIFNldF9TcGFjaW5nIChNLCAzLCAyLCAwKTsKKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEZsaXBfU3RhdGUgOj0gVHJ1ZTsKKyAgICAgICAgICAgICAgICAgIFNldF9TcGFjaW5nIChNKTsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVsc2lmIFRvX0NoYW5nZSAoUmVmb3JtYXQpIHRoZW4KKyAgICAgICAgICAgICAgIGNhc2UgQ3VycmVudF9Gb3JtYXQgaXMKKyAgICAgICAgICAgICAgICAgIHdoZW4gRm91cl9CeV8xID0+IFNldF9Gb3JtYXQgKE0sIDQsIDEpOworICAgICAgICAgICAgICAgICAgd2hlbiBGb3VyX0J5XzIgPT4gU2V0X0Zvcm1hdCAoTSwgNCwgMik7CisgICAgICAgICAgICAgICAgICB3aGVuIEZvdXJfQnlfMyA9PgorICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgTyA6IE1lbnVfT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRfT3B0aW9ucyAoTSwgTyk7CisgICAgICAgICAgICAgICAgICAgICAgICBPLlNob3dfRGVzY3JpcHRpb25zIDo9IEZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgU2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgICAgICAgICAgU2V0X0Zvcm1hdCAoTSwgNCwgMyk7CisgICAgICAgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgICAgICAgIFNldF9PcHRpb25fS2V5OworICAgICAgICAgICAgICAgU2V0X0Rlc2NyaXB0aW9uX0tleTsKKyAgICAgICAgICAgIGVsc2lmIFRvX0NoYW5nZSAoUmVvcmRlcikgdGhlbgorICAgICAgICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgICAgICAgTyA6IE1lbnVfT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICBHZXRfT3B0aW9ucyAoTSwgTyk7CisgICAgICAgICAgICAgICAgICBPLlJvd19NYWpvcl9PcmRlciA6PSBub3QgTy5Sb3dfTWFqb3JfT3JkZXI7CisgICAgICAgICAgICAgICAgICBTZXRfT3B0aW9ucyAoTSwgTyk7CisgICAgICAgICAgICAgICAgICBTZXRfT3B0aW9uX0tleTsKKyAgICAgICAgICAgICAgIGVuZDsKKyAgICAgICAgICAgIGVsc2lmIFRvX0NoYW5nZSAoUmVzZWxlY3QpIHRoZW4KKyAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgIE8gOiBNZW51X09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgICAgTy5PbmVfVmFsdWVkIDo9IG5vdCBPLk9uZV9WYWx1ZWQ7CisgICAgICAgICAgICAgICAgICBTZXRfT3B0aW9ucyAoTSwgTyk7CisgICAgICAgICAgICAgICAgICBTZXRfU2VsZWN0X0tleTsKKyAgICAgICAgICAgICAgIGVuZDsKKyAgICAgICAgICAgIGVsc2lmIFRvX0NoYW5nZSAoRGVzY3JpYmUpIHRoZW4KKyAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgIE8gOiBNZW51X09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKE0sIE8pOworICAgICAgICAgICAgICAgICAgTy5TaG93X0Rlc2NyaXB0aW9ucyA6PSBub3QgTy5TaG93X0Rlc2NyaXB0aW9uczsKKyAgICAgICAgICAgICAgICAgIFNldF9PcHRpb25zIChNLCBPKTsKKyAgICAgICAgICAgICAgICAgIFNldF9EZXNjcmlwdGlvbl9LZXk7CisgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBudWxsOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgICBTZXRfU3BhY2luZyAoTSk7CisKKyAgICAgICAgIFBvcF9FbnZpcm9ubWVudDsKKyAgICAgICAgIHByYWdtYSBBc3NlcnQgKEdldF9JbmRleCAoSXRlbXMgKE0sIDEpKSA9IEdldF9JbmRleCAoSSAoMSkpKTsKKyAgICAgICAgIERlbGV0ZSAoTSk7CisgICAgICAgICBGcmVlIChJLCBUcnVlKTsKKyAgICAgIGVuZCBTcGFjaW5nX1Rlc3Q7CisgICBlbmQgU3BhY2luZ19EZW1vOworCisgICBwcm9jZWR1cmUgRGVtbworICAgaXMKKyAgICAgIC0tICBXZSB1c2UgdGhpcyBkYXRhdHlwZSBvbmx5IHRvIHRlc3QgdGhlIGluc3RhbnRpYXRpb24gb2YKKyAgICAgIC0tICB0aGUgTWVudV9Vc2VyX0RhdGEgZ2VuZXJpYyBwYWNrYWdlLiBObyBmdW5jdGlvbmFsaXR5CisgICAgICAtLSAgYmVoaW5kIGl0LgorICAgICAgdHlwZSBVc2VyX0RhdGEgaXMgbmV3IEludGVnZXI7CisgICAgICB0eXBlIFVzZXJfRGF0YV9BY2Nlc3MgaXMgYWNjZXNzIFVzZXJfRGF0YTsKKworICAgICAgLS0gIFRob3NlIHBhY2thZ2VzIGFyZSBvbmx5IGluc3RhbnRpYXRlZCB0byB0ZXN0IHRoZSB1c2FiaWxpdHkuCisgICAgICAtLSAgTm8gcmVhbCBmdW5jdGlvbmFsaXR5IGlzIHNob3duIGluIHRoZSBkZW1vLgorICAgICAgcGFja2FnZSBNVUQgaXMgbmV3IE1lbnVfVXNlcl9EYXRhIChVc2VyX0RhdGEsIFVzZXJfRGF0YV9BY2Nlc3MpOworICAgICAgcGFja2FnZSBJVUQgaXMgbmV3IEl0ZW1fVXNlcl9EYXRhIChVc2VyX0RhdGEsIFVzZXJfRGF0YV9BY2Nlc3MpOworCisgICAgICBmdW5jdGlvbiBNeV9Ecml2ZXIgKE0gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBLIDogS2V5X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFAgOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW47CisKKyAgICAgIHBhY2thZ2UgTWggaXMgbmV3IFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlciAoTXlfRHJpdmVyKTsKKworICAgICAgSXRtIDogSXRlbV9BcnJheV9BY2Nlc3MgOj0gbmV3IEl0ZW1fQXJyYXknCisgICAgICAgIChOZXdfSXRlbSAoIk1lbnUgTGF5b3V0IE9wdGlvbnMiKSwKKyAgICAgICAgIE5ld19JdGVtICgiRGVtbyBvZiBIb29rIGZ1bmN0aW9ucyIpLAorICAgICAgICAgTnVsbF9JdGVtKTsKKyAgICAgIE0gOiBNZW51IDo9IE5ld19NZW51IChJdG0pOworCisgICAgICBVMSA6IGNvbnN0YW50IFVzZXJfRGF0YV9BY2Nlc3MgOj0gbmV3IFVzZXJfRGF0YScoNDcxMSk7CisgICAgICBVMiA6IFVzZXJfRGF0YV9BY2Nlc3M7CisgICAgICBVMyA6IGNvbnN0YW50IFVzZXJfRGF0YV9BY2Nlc3MgOj0gbmV3IFVzZXJfRGF0YScoNDcxMik7CisgICAgICBVNCA6IFVzZXJfRGF0YV9BY2Nlc3M7CisKKyAgICAgIGZ1bmN0aW9uIE15X0RyaXZlciAoTSA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIEsgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUCA6IFBhbmVsKSByZXR1cm4gQm9vbGVhbgorICAgICAgaXMKKyAgICAgICAgIElkeCAgIDogY29uc3RhbnQgUG9zaXRpdmUgOj0gR2V0X0luZGV4IChDdXJyZW50IChNKSk7CisgICAgICBiZWdpbgorICAgICAgICAgaWYgSyBpbiBVc2VyX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgIGlmIEsgPSBRVUlUIHRoZW4KKyAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgZWxzaWYgSyA9IFNFTEVDVF9JVEVNIHRoZW4KKyAgICAgICAgICAgICAgIGlmIElkeCBpbiBJdG0nUmFuZ2UgdGhlbgorICAgICAgICAgICAgICAgICAgSGlkZSAoUCk7CisgICAgICAgICAgICAgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgY2FzZSBJZHggaXMKKyAgICAgICAgICAgICAgICAgIHdoZW4gMSA9PiBTcGFjaW5nX0RlbW8uU3BhY2luZ19UZXN0OworICAgICAgICAgICAgICAgICAgd2hlbiBvdGhlcnMgPT4gTm90X0ltcGxlbWVudGVkOworICAgICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICAgICAgICBpZiBJZHggaW4gSXRtJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgICAgIFRvcCAoUCk7CisgICAgICAgICAgICAgICAgICBTaG93IChQKTsKKyAgICAgICAgICAgICAgICAgIFVwZGF0ZV9QYW5lbHM7CisgICAgICAgICAgICAgICAgICBVcGRhdGVfU2NyZWVuOworICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZW5kIE15X0RyaXZlcjsKKyAgIGJlZ2luCisgICAgICBQdXNoX0Vudmlyb25tZW50ICgiTUVOVTAwIik7CisgICAgICBOb3RlcGFkICgiTUVOVS1QQUQwMCIpOworICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTsKKyAgICAgIFNldF9QYWRfQ2hhcmFjdGVyIChNLCAnfCcpOworCisgICAgICBNVUQuU2V0X1VzZXJfRGF0YSAoTSwgVTEpOworICAgICAgSVVELlNldF9Vc2VyX0RhdGEgKEl0bSAoMSksIFUzKTsKKworICAgICAgTWguRHJpdmVfTWUgKE0pOworCisgICAgICBNVUQuR2V0X1VzZXJfRGF0YSAoTSwgVTIpOworICAgICAgcHJhZ21hIEFzc2VydCAoVTEgPSBVMiBhbmQgVTEuYWxsID0gNDcxMSk7CisKKyAgICAgIElVRC5HZXRfVXNlcl9EYXRhIChJdG0gKDEpLCBVNCk7CisgICAgICBwcmFnbWEgQXNzZXJ0IChVMyA9IFU0IGFuZCBVMy5hbGwgPSA0NzEyKTsKKworICAgICAgUG9wX0Vudmlyb25tZW50OworICAgICAgRGVsZXRlIChNKTsKKyAgICAgIEZyZWUgKEl0bSwgVHJ1ZSk7CisgICBlbmQgRGVtbzsKKworZW5kIFNhbXBsZS5NZW51X0RlbW87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDcxYWZjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkcwpAQCAtMCwwICsxLDQ1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLk1lbnVfRGVtbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBTYW1wbGUuTWVudV9EZW1vIGlzCisKKyAgIHByb2NlZHVyZSBEZW1vOworCitlbmQgU2FtcGxlLk1lbnVfRGVtbzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbXlfZmllbGRfdHlwZS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkNmY2NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRiCkBAIC0wLDAgKzEsNjggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuTXlfRmllbGRfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0Nzo1OCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSB1c2VyIGRlZmluZWQgZmllbGQgdHlwZS4gSXQgYWNjZXB0cyBvbmx5IGEKKy0tICBkZWZpbmVkIGNoYXJhY3RlciBhcyBpbnB1dCBpbnRvIHRoZSBmaWVsZC4KKy0tCitwYWNrYWdlIGJvZHkgU2FtcGxlLk15X0ZpZWxkX1R5cGUgaXMKKworICAgLS0gIFRoYXQncyBzaW1wbGUuIFRoZXJlIGFyZSBtaW5pbWFsIGZpZWxkIHZhbGlkaXR5IGNoZWNrcy4KKyAgIGZ1bmN0aW9uIEZpZWxkX0NoZWNrIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBNeV9EYXRhKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgIGJlZ2luCisgICAgICBpZiBGbGQgPSBOdWxsX0ZpZWxkIG9yIFR5cC5DaCA9IENoYXJhY3RlcidWYWwgKDApIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBUcnVlOworICAgZW5kIEZpZWxkX0NoZWNrOworCisgICAtLSAgQ2hlY2sgZXhhY3RseSBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgorICAgZnVuY3Rpb24gQ2hhcmFjdGVyX0NoZWNrIChDaCAgOiBDaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IE15X0RhdGEpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgQyA6IGNvbnN0YW50IENoYXJhY3RlciA6PSBUeXAuQ2g7CisgICBiZWdpbgorICAgICAgcmV0dXJuIENoID0gQzsKKyAgIGVuZCBDaGFyYWN0ZXJfQ2hlY2s7CisKK2VuZCBTYW1wbGUuTXlfRmllbGRfVHlwZTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbXlfZmllbGRfdHlwZS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmMzY1MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLW15X2ZpZWxkX3R5cGUuYWRzCkBAIC0wLDAgKzEsNjEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuTXlfRmllbGRfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjEyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyOwordXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlcjsKKworLS0gIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSB1c2VyIGRlZmluZWQgZmllbGQgdHlwZS4gSXQgYWNjZXB0cyBvbmx5IGEKKy0tICBkZWZpbmVkIGNoYXJhY3RlciBhcyBpbnB1dCBpbnRvIHRoZSBmaWVsZC4KKy0tCitwYWNrYWdlIFNhbXBsZS5NeV9GaWVsZF9UeXBlIGlzCisKKyAgIHR5cGUgTXlfRGF0YSBpcyBuZXcgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgd2l0aAorICAgICAgcmVjb3JkCisgICAgICAgIENoIDogQ2hhcmFjdGVyOworICAgICAgZW5kIHJlY29yZDsKKworICAgZnVuY3Rpb24gRmllbGRfQ2hlY2sgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgIDogTXlfRGF0YSkgcmV0dXJuIEJvb2xlYW47CisKKyAgIGZ1bmN0aW9uIENoYXJhY3Rlcl9DaGVjayAoQ2ggIDogQ2hhcmFjdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBNeV9EYXRhKSByZXR1cm4gQm9vbGVhbjsKKworZW5kIFNhbXBsZS5NeV9GaWVsZF9UeXBlOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtdGV4dF9pb19kZW1vLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzODVjNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIKQEAgLTAsMCArMSwxODEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlLlRleHRfSU9fRGVtbyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLk51bWVyaWNzLkdlbmVyaWNfRWxlbWVudGFyeV9GdW5jdGlvbnM7Cit3aXRoIEFkYS5OdW1lcmljcy5Db21wbGV4X1R5cGVzOwordXNlICBBZGEuTnVtZXJpY3MuQ29tcGxleF9UeXBlczsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOwordXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkNvbXBsZXhfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPOworCit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKK3dpdGggU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOyB1c2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOword2l0aCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsgdXNlIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOword2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CisKK3BhY2thZ2UgYm9keSBTYW1wbGUuVGV4dF9JT19EZW1vIGlzCisKKyAgIHR5cGUgV2Vla2RheSBpcyAoU3VuZGF5LAorICAgICAgICAgICAgICAgICAgICBNb25kYXksCisgICAgICAgICAgICAgICAgICAgIFR1ZXNkYXksCisgICAgICAgICAgICAgICAgICAgIFdlZG5lc2RheSwKKyAgICAgICAgICAgICAgICAgICAgVGh1cnNkYXksCisgICAgICAgICAgICAgICAgICAgIEZyaWRheSwKKyAgICAgICAgICAgICAgICAgICAgU2F0dXJkYXkpOworCisgICB0eXBlIEZpeCBpcyBkZWx0YSAwLjEgcmFuZ2UgMC4wIC4uIDQuMDsKKyAgIHR5cGUgRGVjIGlzIGRlbHRhIDAuMDEgZGlnaXRzIDUgcmFuZ2UgMC4wIC4uIDQuMDsKKyAgIHR5cGUgTWQgaXMgbW9kIDU7CisKKyAgIHBhY2thZ2UgTWF0aCBpcyBuZXcKKyAgICAgQWRhLk51bWVyaWNzLkdlbmVyaWNfRWxlbWVudGFyeV9GdW5jdGlvbnMgKEZsb2F0KTsKKworICAgcGFja2FnZSBJbnRfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPIChJbnRlZ2VyKTsKKyAgIHVzZSBJbnRfSU87CisKKyAgIHBhY2thZ2UgUmVhbF9JTyBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPIChGbG9hdCk7CisgICB1c2UgUmVhbF9JTzsKKworICAgcGFja2FnZSBFbnVtX0lPIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU8gKFdlZWtkYXkpOworICAgdXNlIEVudW1fSU87CisKKyAgIHBhY2thZ2UgQ19JTyBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkNvbXBsZXhfSU8gKEFkYS5OdW1lcmljcy5Db21wbGV4X1R5cGVzKTsKKyAgIHVzZSBDX0lPOworCisgICBwYWNrYWdlIEZfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTyAoRml4KTsKKyAgIHVzZSBGX0lPOworCisgICBwYWNrYWdlIERfSU8gaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5EZWNpbWFsX0lPIChEZWMpOworICAgdXNlIERfSU87CisKKyAgIHBhY2thZ2UgTV9JTyBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLk1vZHVsYXJfSU8gKE1kKTsKKyAgIHVzZSBNX0lPOworCisgICBwcm9jZWR1cmUgRGVtbworICAgaXMKKyAgICAgIFcgOiBXaW5kb3c7CisgICAgICBQIDogUGFuZWwgOj0gQ3JlYXRlIChTdGFuZGFyZF9XaW5kb3cpOworICAgICAgSyA6IFJlYWxfS2V5X0NvZGU7CisgICAgICBJbSA6IGNvbnN0YW50IENvbXBsZXggOj0gKDAuMCwgMS4wKTsKKyAgICAgIEZ4IDogY29uc3RhbnQgRGVjIDo9IDMuMTQ7CisgICAgICBEYyA6IGNvbnN0YW50IERlYyA6PSAyLjcyOworICAgICAgTCA6IE1kOworCisgICBiZWdpbgorICAgICAgUHVzaF9FbnZpcm9ubWVudCAoIlRFWFRJTyIpOworICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICBOb3RlcGFkICgiVEVYVElPLVBBRDAwIik7CisKKyAgICAgIFNldF9FY2hvX01vZGUgKEZhbHNlKTsKKyAgICAgIFNldF9NZXRhX01vZGU7CisgICAgICBTZXRfS2V5UGFkX01vZGU7CisgICAgICBXIDo9IFN1Yl9XaW5kb3cgKFN0YW5kYXJkX1dpbmRvdywgTGluZXMgLSAyLCBDb2x1bW5zIC0gMiwgMSwgMSk7CisgICAgICBCb3g7CisgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlOworICAgICAgU2V0X01ldGFfTW9kZSAoVyk7CisgICAgICBTZXRfS2V5UGFkX01vZGUgKFcpOworICAgICAgSW1tZWRpYXRlX1VwZGF0ZV9Nb2RlIChXLCBUcnVlKTsKKworICAgICAgU2V0X1dpbmRvdyAoVyk7CisKKyAgICAgIGZvciBJIGluIDEgLi4gMTAgbG9vcAorICAgICAgICAgUHV0ICgiU3F1YXJlIHJvb3Qgb2YgIik7CisgICAgICAgICBQdXQgKEl0ZW0gPT4gSSwgV2lkdGggPT4gNSk7CisgICAgICAgICBQdXQgKCIgaXMgIik7CisgICAgICAgICBQdXQgKEl0ZW0gPT4gTWF0aC5TcXJ0IChGbG9hdCAoSSkpLCBFeHAgPT4gMCwgQWZ0ID0+IDcpOworICAgICAgICAgTmV3X0xpbmU7CisgICAgICBlbmQgbG9vcDsKKworICAgICAgZm9yIFcgaW4gV2Vla2RheSBsb29wCisgICAgICAgICBQdXQgKEl0ZW0gPT4gVyk7IFB1dCAoJyAnKTsKKyAgICAgIGVuZCBsb29wOworICAgICAgTmV3X0xpbmU7CisKKyAgICAgIEwgOj0gTWQnRmlyc3Q7CisgICAgICBmb3IgSSBpbiAxIC4uIDIgbG9vcAorICAgICAgICAgZm9yIEogaW4gTWQnUmFuZ2UgbG9vcAorICAgICAgICAgICAgUHV0IChMKTsgUHV0ICgnICcpOworICAgICAgICAgICAgTCA6PSBMICsgMTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGxvb3A7CisgICAgICBOZXdfTGluZTsKKworICAgICAgUHV0IChJbSk7IE5ld19MaW5lOworICAgICAgUHV0IChGeCk7IE5ld19MaW5lOworICAgICAgUHV0IChEYyk7IE5ld19MaW5lOworCisgICAgICBsb29wCisgICAgICAgICBLIDo9IEdldF9LZXk7CisgICAgICAgICBpZiBLIGluIFNwZWNpYWxfS2V5X0NvZGUnUmFuZ2UgdGhlbgorICAgICAgICAgICAgY2FzZSBLIGlzCisgICAgICAgICAgICAgICB3aGVuIFFVSVRfQ09ERSAgICAgPT4gZXhpdDsKKyAgICAgICAgICAgICAgIHdoZW4gSEVMUF9DT0RFICAgICA9PiBFeHBsYWluX0NvbnRleHQ7CisgICAgICAgICAgICAgICB3aGVuIEVYUExBSU5fQ09ERSAgPT4gRXhwbGFpbiAoIlRFWFRJT0tFWVMiKTsKKyAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzICAgICAgICA9PiBudWxsOworICAgICAgICAgICAgZW5kIGNhc2U7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgbG9vcDsKKworICAgICAgU2V0X1dpbmRvdyAoTnVsbF9XaW5kb3cpOworICAgICAgRXJhc2U7IFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CisgICAgICBEZWxldGUgKFApOworICAgICAgRGVsZXRlIChXKTsKKworICAgICAgUG9wX0Vudmlyb25tZW50OworICAgZW5kIERlbW87CisKK2VuZCBTYW1wbGUuVGV4dF9JT19EZW1vOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUtdGV4dF9pb19kZW1vLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmNWExOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZHMKQEAgLTAsMCArMSw0NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUuVGV4dF9JT19EZW1vICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgU2FtcGxlLlRleHRfSU9fRGVtbyBpcworCisgICBwcm9jZWR1cmUgRGVtbzsKKworZW5kIFNhbXBsZS5UZXh0X0lPX0RlbW87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4MDM2ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkYgpAQCAtMCwwICsxLDIyMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2wKKy0tICAkUmV2aXNpb246IDEuMTcgJAorLS0gICREYXRlOiAyMDA4LzA5LzI3IDE0OjQyOjQwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXh0X0lPOworCit3aXRoIEFkYS5FeGNlcHRpb25zOyB1c2UgQWRhLkV4Y2VwdGlvbnM7CisKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLk1lbnVfVXNlcl9EYXRhOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhOworCit3aXRoIFNhbXBsZS5NYW5pZmVzdDsgdXNlIFNhbXBsZS5NYW5pZmVzdDsKK3dpdGggU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOyB1c2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nOword2l0aCBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsgdXNlIFNhbXBsZS5LZXlib2FyZF9IYW5kbGVyOword2l0aCBTYW1wbGUuSGVhZGVyX0hhbmRsZXI7IHVzZSBTYW1wbGUuSGVhZGVyX0hhbmRsZXI7Cit3aXRoIFNhbXBsZS5FeHBsYW5hdGlvbjsgdXNlIFNhbXBsZS5FeHBsYW5hdGlvbjsKKword2l0aCBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXI7Cit3aXRoIFNhbXBsZS5DdXJzZXNfRGVtbzsKK3dpdGggU2FtcGxlLkZvcm1fRGVtbzsKK3dpdGggU2FtcGxlLk1lbnVfRGVtbzsKK3dpdGggU2FtcGxlLlRleHRfSU9fRGVtbzsKKword2l0aCBHTkFULk9TX0xpYjsKKworcGFja2FnZSBib2R5IFNhbXBsZSBpcworCisgICB0eXBlIFVzZXJfRGF0YSBpcworICAgICAgcmVjb3JkCisgICAgICAgICBEYXRhIDogSW50ZWdlcjsKKyAgICAgIGVuZCByZWNvcmQ7CisgICB0eXBlIFVzZXJfQWNjZXNzIGlzIGFjY2VzcyBVc2VyX0RhdGE7CisKKyAgIHBhY2thZ2UgVWQgaXMgbmV3CisgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuTWVudV9Vc2VyX0RhdGEKKyAgICAgKFVzZXJfRGF0YSwgVXNlcl9BY2Nlc3MpOworCisgICBwYWNrYWdlIElkIGlzIG5ldworICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhCisgICAgIChVc2VyX0RhdGEsIFVzZXJfQWNjZXNzKTsKKworICAgcHJvY2VkdXJlIFdob3cgaXMKKyAgICAgIHByb2NlZHVyZSBNYWluX01lbnU7CisgICAgICBwcm9jZWR1cmUgTWFpbl9NZW51CisgICAgICBpcworICAgICAgICAgZnVuY3Rpb24gTXlfRHJpdmVyIChNIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyA6IEtleV9Db2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYW4gOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW47CisKKyAgICAgICAgIHBhY2thZ2UgTWggaXMgbmV3IFNhbXBsZS5NZW51X0RlbW8uSGFuZGxlciAoTXlfRHJpdmVyKTsKKworICAgICAgICAgSSA6IEl0ZW1fQXJyYXlfQWNjZXNzIDo9IG5ldyBJdGVtX0FycmF5JworICAgICAgICAgICAoTmV3X0l0ZW0gKCJDdXJzZXMgQ29yZSBEZW1vIiksCisgICAgICAgICAgICBOZXdfSXRlbSAoIk1lbnUgRGVtbyIpLAorICAgICAgICAgICAgTmV3X0l0ZW0gKCJGb3JtIERlbW8iKSwKKyAgICAgICAgICAgIE5ld19JdGVtICgiVGV4dCBJTyBEZW1vIiksCisgICAgICAgICAgICBOdWxsX0l0ZW0pOworCisgICAgICAgICBNIDogTWVudSA6PSBOZXdfTWVudSAoSSk7CisKKyAgICAgICAgIEQxLCBEMiA6IFVzZXJfQWNjZXNzOworICAgICAgICAgSTEsIEkyIDogVXNlcl9BY2Nlc3M7CisKKyAgICAgICAgIGZ1bmN0aW9uIE15X0RyaXZlciAoTSA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgOiBLZXlfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuCisgICAgICAgICBpcworICAgICAgICAgICAgSWR4IDogY29uc3RhbnQgUG9zaXRpdmUgOj0gR2V0X0luZGV4IChDdXJyZW50IChNKSk7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgSyBpbiBVc2VyX0tleV9Db2RlJ1JhbmdlIHRoZW4KKyAgICAgICAgICAgICAgIGlmIEsgPSBRVUlUIHRoZW4KKyAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgICAgICAgICAgZWxzaWYgSyA9IFNFTEVDVF9JVEVNIHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmIElkeCA8PSA0IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIEhpZGUgKFBhbik7CisgICAgICAgICAgICAgICAgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgICAgICAgICAgY2FzZSBJZHggaXMKKyAgICAgICAgICAgICAgICAgICAgIHdoZW4gMSA9PiBTYW1wbGUuQ3Vyc2VzX0RlbW8uRGVtbzsKKyAgICAgICAgICAgICAgICAgICAgIHdoZW4gMiA9PiBTYW1wbGUuTWVudV9EZW1vLkRlbW87CisgICAgICAgICAgICAgICAgICAgICB3aGVuIDMgPT4gU2FtcGxlLkZvcm1fRGVtby5EZW1vOworICAgICAgICAgICAgICAgICAgICAgd2hlbiA0ID0+IFNhbXBsZS5UZXh0X0lPX0RlbW8uRGVtbzsKKyAgICAgICAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IG51bGw7CisgICAgICAgICAgICAgICAgICBlbmQgY2FzZTsKKyAgICAgICAgICAgICAgICAgIGlmIElkeCA8PSA0IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIFRvcCAoUGFuKTsKKyAgICAgICAgICAgICAgICAgICAgIFNob3cgKFBhbik7CisgICAgICAgICAgICAgICAgICAgICBVcGRhdGVfUGFuZWxzOworICAgICAgICAgICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKKyAgICAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgICAgIGVuZCBNeV9Ecml2ZXI7CisKKyAgICAgIGJlZ2luCisKKyAgICAgICAgIGlmICgxICsgSXRlbV9Db3VudCAoTSkpIC89IEknTGVuZ3RoIHRoZW4KKyAgICAgICAgICAgIHJhaXNlIENvbnN0cmFpbnRfRXJyb3I7CisgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgIEQxIDo9IG5ldyBVc2VyX0RhdGEnKERhdGEgPT4gNDcxMSk7CisgICAgICAgICBVZC5TZXRfVXNlcl9EYXRhIChNLCBEMSk7CisKKyAgICAgICAgIEkxIDo9IG5ldyBVc2VyX0RhdGEnKERhdGEgPT4gMTE3NCk7CisgICAgICAgICBJZC5TZXRfVXNlcl9EYXRhIChJICgxKSwgSTEpOworCisgICAgICAgICBTZXRfU3BhY2luZyAoTWVuID0+IE0sIFJvdyA9PiAyKTsKKworICAgICAgICAgRGVmYXVsdF9MYWJlbHM7CisgICAgICAgICBOb3RlcGFkICgiTUFJTlBBRCIpOworCisgICAgICAgICBNaC5Ecml2ZV9NZSAoTSwgIiBEZW1vICIpOworCisgICAgICAgICBVZC5HZXRfVXNlcl9EYXRhIChNLCBEMik7CisgICAgICAgICBwcmFnbWEgQXNzZXJ0IChEMSA9IEQyKTsKKyAgICAgICAgIHByYWdtYSBBc3NlcnQgKEQxLkRhdGEgPSBEMi5EYXRhKTsKKworICAgICAgICAgSWQuR2V0X1VzZXJfRGF0YSAoSSAoMSksIEkyKTsKKyAgICAgICAgIHByYWdtYSBBc3NlcnQgKEkxID0gSTIpOworICAgICAgICAgcHJhZ21hIEFzc2VydCAoSTEuRGF0YSA9IEkyLkRhdGEpOworCisgICAgICAgICBEZWxldGUgKE0pOworICAgICAgICAgRnJlZSAoSSwgVHJ1ZSk7CisgICAgICBlbmQgTWFpbl9NZW51OworCisgICBiZWdpbgorICAgICAgSW5pdGlhbGl6ZSAoUENfU3R5bGVfV2l0aF9JbmRleCk7CisgICAgICBJbml0X0hlYWRlcl9IYW5kbGVyOworICAgICAgSW5pdF9TY3JlZW47CisKKyAgICAgIGlmIEhhc19Db2xvcnMgdGhlbgorICAgICAgICAgU3RhcnRfQ29sb3I7CisKKyAgICAgICAgIEluaXRfUGFpciAoUGFpciA9PiBEZWZhdWx0X0NvbG9ycywgIEZvcmUgPT4gQmxhY2ssICAgQmFjayA9PiBXaGl0ZSk7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gTWVudV9CYWNrX0NvbG9yLCBGb3JlID0+IEJsYWNrLCAgIEJhY2sgPT4gQ3lhbik7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gTWVudV9Gb3JlX0NvbG9yLCBGb3JlID0+IFJlZCwgICAgIEJhY2sgPT4gQ3lhbik7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gTWVudV9HcmV5X0NvbG9yLCBGb3JlID0+IFdoaXRlLCAgIEJhY2sgPT4gQ3lhbik7CisgICAgICAgICBJbml0X1BhaXIgKFBhaXIgPT4gTm90ZXBhZF9Db2xvciwgICBGb3JlID0+IEJsYWNrLCAgIEJhY2sgPT4gWWVsbG93KTsKKyAgICAgICAgIEluaXRfUGFpciAoUGFpciA9PiBIZWxwX0NvbG9yLCAgICAgIEZvcmUgPT4gQmx1ZSwgICAgQmFjayA9PiBDeWFuKTsKKyAgICAgICAgIEluaXRfUGFpciAoUGFpciA9PiBGb3JtX0JhY2tfQ29sb3IsIEZvcmUgPT4gQmxhY2ssICAgQmFjayA9PiBDeWFuKTsKKyAgICAgICAgIEluaXRfUGFpciAoUGFpciA9PiBGb3JtX0ZvcmVfQ29sb3IsIEZvcmUgPT4gUmVkLCAgICAgQmFjayA9PiBDeWFuKTsKKyAgICAgICAgIEluaXRfUGFpciAoUGFpciA9PiBIZWFkZXJfQ29sb3IsICAgIEZvcmUgPT4gQmxhY2ssICAgQmFjayA9PiBHcmVlbik7CisKKyAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChDaCA9PiAoQ29sb3IgPT4gRGVmYXVsdF9Db2xvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggICAgPT4gJyAnKSk7CisgICAgICAgICBTZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXMgKEF0dHIgID0+IE5vcm1hbF9WaWRlbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgPT4gRGVmYXVsdF9Db2xvcnMpOworICAgICAgICAgRXJhc2U7CisKKyAgICAgICAgIFNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIChDb2xvciA9PiBIZWFkZXJfQ29sb3IpOworICAgICAgICAgLS0gIFRoaXMgcHJvcGFnYXRlcyB0aGUgYXR0cmlidXRlcyB0byB0aGUgbGFiZWwgd2luZG93CisgICAgICAgICBSZWZyZXNoX1NvZnRfTGFiZWxfS2V5czsKKyAgICAgIGVuZCBpZjsKKworICAgICAgSW5pdF9LZXlib2FyZF9IYW5kbGVyOworCisgICAgICBTZXRfRWNob19Nb2RlIChGYWxzZSk7CisgICAgICBTZXRfUmF3X01vZGU7CisgICAgICBTZXRfTWV0YV9Nb2RlOworICAgICAgU2V0X0tleVBhZF9Nb2RlOworCisgICAgICAtLSAgSW5pdGlhbGl6ZSB0aGUgRnVuY3Rpb24gS2V5IEVudmlyb25tZW50CisgICAgICAtLSAgV2UgaGF2ZSBzb21lIGZpeGVkIGtleSB0aHJvdWdob3V0IHRoaXMgc2FtcGxlCisgICAgICBNYWluX01lbnU7CisgICAgICBFbmRfV2luZG93czsKKyAgICAgIEN1cnNlc19GcmVlX0FsbDsKKworICAgZXhjZXB0aW9uCisgICAgICB3aGVuIEV2ZW50IDogb3RoZXJzID0+CisgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkVuZF9XaW5kb3dzOworICAgICAgICAgVGV4dF9JTy5QdXQgKCJFeGNlcHRpb246ICIpOworICAgICAgICAgVGV4dF9JTy5QdXQgKEV4Y2VwdGlvbl9OYW1lIChFdmVudCkpOworICAgICAgICAgVGV4dF9JTy5OZXdfTGluZTsKKyAgICAgICAgIEdOQVQuT1NfTGliLk9TX0V4aXQgKDEpOworCisgICBlbmQgV2hvdzsKKworZW5kIFNhbXBsZTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA2NDdkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zYW1wbGUuYWRzCkBAIC0wLDAgKzEsNDMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFNhbXBsZSBpcworICAgcHJvY2VkdXJlIFdob3c7CitlbmQgU2FtcGxlOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zdGF0dXMuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zdGF0dXMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTgxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3N0YXR1cy5hZGIKQEAgLTAsMCArMSw1NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyBTYW1wbGVzICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBMYXVyZW50IFBhdXRldCA8cGF1dGV0QGduYXQuY29tPgorLS0gIE1vZGlmaWVkIGJ5OiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk3CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjcgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgVGhpcyBwYWNrYWdlIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJ5IExhdXJlbnQgUGF1dGV0IDxwYXV0ZXRAZ25hdC5jb20+ICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorcGFja2FnZSBib2R5IFN0YXR1cyBpcworCisgICBwcm90ZWN0ZWQgYm9keSBQcm9jZXNzIGlzCisgICAgICBwcm9jZWR1cmUgU3RvcCBpcworICAgICAgYmVnaW4KKyAgICAgICAgIERvbmUgOj0gVHJ1ZTsKKyAgICAgIGVuZCBTdG9wOworICAgICAgZnVuY3Rpb24gQ29udGludWUgcmV0dXJuIEJvb2xlYW4gaXMKKyAgICAgIGJlZ2luCisgICAgICAgICByZXR1cm4gbm90IERvbmU7CisgICAgICBlbmQgQ29udGludWU7CisgICBlbmQgUHJvY2VzczsKKworZW5kIFN0YXR1czsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc3RhdHVzLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvc3RhdHVzLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWUzZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy9zdGF0dXMuYWRzCkBAIC0wLDAgKzEsNjAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgTGF1cmVudCBQYXV0ZXQgPHBhdXRldEBnbmF0LmNvbT4KKy0tICBNb2RpZmllZCBieTogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NworLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIFRoaXMgcGFja2FnZSBoYXMgYmVlbiBjb250cmlidXRlZCBieSBMYXVyZW50IFBhdXRldCA8cGF1dGV0QGduYXQuY29tPiAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KK3dpdGggQWRhLkludGVycnVwdHMuTmFtZXM7CisKK3BhY2thZ2UgU3RhdHVzIGlzCisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsgIC0tICB0aGUgbmV4dCBwcmFnbWEgZXhpc3RzIHNpbmNlIDMuMTFwCisgICBwcmFnbWEgVW5yZXNlcnZlX0FsbF9JbnRlcnJ1cHRzOworICAgcHJhZ21hIFdhcm5pbmdzIChPbik7CisKKyAgIHByb3RlY3RlZCBQcm9jZXNzIGlzCisgICAgICBwcm9jZWR1cmUgU3RvcDsKKyAgICAgIGZ1bmN0aW9uIENvbnRpbnVlIHJldHVybiBCb29sZWFuOworICAgICAgcHJhZ21hIEF0dGFjaF9IYW5kbGVyIChTdG9wLCBBZGEuSW50ZXJydXB0cy5OYW1lcy5TSUdJTlQpOworICAgcHJpdmF0ZQorICAgICAgRG9uZSA6IEJvb2xlYW4gOj0gRmFsc2U7CisgICBlbmQgUHJvY2VzczsKKworZW5kIFN0YXR1czsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NhbXBsZXMvdG91ci5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3RvdXIuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzkxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3RvdXIuYWRiCkBAIC0wLDAgKzEsNDYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgU2FtcGxlcyAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFNhbXBsZTsgdXNlIFNhbXBsZTsKKworcHJvY2VkdXJlIFRvdXIgaXMKK2JlZ2luCisgICBXaG93OworZW5kIFRvdXI7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zYW1wbGVzL3RvdXIuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy90b3VyLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODg4MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc2FtcGxlcy90b3VyLmFkcwpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nIFNhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvY2VkdXJlIFRvdXI7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvTWFrZWZpbGUuaW4gYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwNzJiZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDM4OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CisjCisjICAkSWQ6IE1ha2VmaWxlLmluLHYgMS4zMSAyMDA3LzA5LzE1IDE4OjIyOjI0IHRvbSBFeHAgJAorIworLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK01PREVMCQk9IC4uLy4uL0BERlRfT0JKX1NVQkRJUkAKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitBREFfSU5DTFVERQk9IEBBREFfSU5DTFVERUAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK0FSCQk9IEBBUkAKK0FSX09QVFMJCT0gQEFSX09QVFNACitBV0sJCT0gQEFXS0AKK0xOX1MJCT0gQExOX1NACisKK0NDCQk9IEBDQ0AKK0NGTEFHUwkJPSBAQ0ZMQUdTQAorCitDUFBGTEFHUwk9IEBBQ1BQRkxBR1NAIFwKKwkJICAtREhBVkVfQ09ORklHX0ggLUkkKHNyY2RpcikKKworQ0NGTEFHUwkJPSAkKENQUEZMQUdTKSAkKENGTEFHUykKKworQ0ZMQUdTX05PUk1BTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19ERUJVRwk9ICQoQ0NGTEFHUykgQENDX0dfT1BUQCAtRFRSQUNFCitDRkxBR1NfUFJPRklMRQk9ICQoQ0NGTEFHUykgLXBnCitDRkxBR1NfU0hBUkVECT0gJChDQ0ZMQUdTKSBAQ0NfU0hBUkVEX09QVFNACisKK0NGTEFHU19ERUZBVUxUCT0gJChDRkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitMSU5LCQk9ICQoQ0MpCitMREZMQUdTCQk9IEBMREZMQUdTQCBATERfTU9ERUxAIEBMSUJTQAorCitSQU5MSUIJCT0gQFJBTkxJQkAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitBREEgICAgICAgICAgICAgPSBAY2ZfYWRhX2NvbXBpbGVyQAorQURBUFJFUAkJPSBnbmF0cHJlcAorQURBRkxBR1MgICAgICAgID0gQEFEQUZMQUdTQCAtSS4gLUkkKHNyY2RpcikKKworQURBTUFLRSAgICAgICAgID0gQGNmX2FkYV9tYWtlQAorQURBTUFLRUZMQUdTICAgID0gCisKK0NBUkdTICAgICAgICAgICA9IC1jYXJncyAkKEFEQUZMQUdTKQorTEFSR1MgICAgICAgICAgID0KKworQUxJQiAgICAgICAgICAgID0gQGNmX2FkYV9wYWNrYWdlQAorQUJBU0UgICAgICAgICAgID0gJChBTElCKS1jdXJzZXMKKworTElCQUxJUz0kKEFMSUIpLmFsaSAgICAgICAgICAgICAgCQkJXAorCSQoQUJBU0UpLWF1eC5hbGkgICAgICAgICAJCQlcCisJJChBQkFTRSkuYWxpICAgICAgICAgICAgIAkJICAgICAgICBcCisJJChBQkFTRSktdGVybWluZm8uYWxpCQkJCVwKKwkkKEFCQVNFKS10ZXJtY2FwLmFsaQkJCQlcCisJJChBQkFTRSktcHV0d2luLmFsaQkJCQlcCisJJChBQkFTRSktdHJhY2UuYWxpCQkJCVwKKwkkKEFCQVNFKS1tb3VzZS5hbGkgICAgICAgCQkJXAorCSQoQUJBU0UpLXBhbmVscy5hbGkgICAgICAJCQlcCisJJChBQkFTRSktbWVudXMuYWxpICAgICAgIAkJCVwKKwkkKEFCQVNFKS1mb3Jtcy5hbGkgICAgICAgCQkJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLmFsaQkgICAgICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWxpICAgICAgCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWxpICAgICBcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWxpICAgICAgCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFsaSAgICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFsaSAgICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWxpICAgICAgXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hbGkgICAgIFwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFsaQkgICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFsaSAgICAgCVwKKwkkKEFCQVNFKS10ZXh0X2lvLmFsaSAgICAgCQkJXAorCSQoQUJBU0UpLXRleHRfaW8tYXV4LmFsaQorCisjIEFkYSBMaWJyYXJ5IGZpbGVzIGZvciBnZW5lcmljIHBhY2thZ2VzLiBTaW5jZSBnbmF0IDMuMTAgdGhleSBhcmUKKyMgYWxzbyBjb21waWxlZAorR0VOQUxJUz0kKEFCQVNFKS1tZW51cy1tZW51X3VzZXJfZGF0YS5hbGkJCVwKKwkkKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5hbGkJCVwKKwkkKEFCQVNFKS1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hbGkJCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWxpCQlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFsaQlcCisJJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hbGkJCQlcCisJJChBQkFTRSktdGV4dF9pby1pbnRlZ2VyX2lvLmFsaQkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLmFsaQkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLmFsaQkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWRlY2ltYWxfaW8uYWxpCQkJXAorCSQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWxpCQlcCisJJChBQkFTRSktdGV4dF9pby1tb2R1bGFyX2lvLmFsaQkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWNvbXBsZXhfaW8uYWxpCisKK0xJQk9CSlM9JChBTElCKS5vICAgICAgICAgICAgICAgIAkJCVwKKwkkKEFCQVNFKS1hdXgubyAgICAgICAgICAgCQkJXAorCSQoQUJBU0UpLm8gICAgICAgICAgICAgICAJCQlcCisJJChBQkFTRSktdGVybWluZm8ubwkJCQlcCisJJChBQkFTRSktdGVybWNhcC5vCQkJCVwKKwkkKEFCQVNFKS1wdXR3aW4ubwkJCQlcCisJJChBQkFTRSktdHJhY2UubwkJCQlcCisJJChBQkFTRSktbW91c2UubyAgICAgICAgIAkJCVwKKwkkKEFCQVNFKS1wYW5lbHMubyAgICAgICAgCQkJXAorCSQoQUJBU0UpLW1lbnVzLm8gICAgICAgICAJCQlcCisJJChBQkFTRSktZm9ybXMubyAgICAgICAgIAkJCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5vICAgICAgCQlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEubyAgICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLm8JXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLm8gICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5vICAgICAJXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5vICAgICAgIAlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24ubwlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLm8JXAorCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIubyAJCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5vIAlcCisJJChBQkFTRSktdGV4dF9pby5vICAgICAgIAkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWF1eC5vCisKKyMgQWRhIG9iamVjdCBmaWxlcyBmb3IgZ2VuZXJpYyBwYWNrYWdlcy4gU2luY2UgZ25hdCAzLjEwIHRoZXkgYXJlCisjIGFsc28gY29tcGlsZWQKK0dFTk9CSlM9JChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEubwkJCVwKKwkkKEFCQVNFKS1tZW51cy1pdGVtX3VzZXJfZGF0YS5vCQkJXAorCSQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLm8JCQlcCisJJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLm8JCVwKKwkkKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEubwlcCisJJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5vCQkJXAorCSQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5vCQkJXAorCSQoQUJBU0UpLXRleHRfaW8tZmxvYXRfaW8ubwkJCVwKKwkkKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLm8JCQlcCisJJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLm8JCQlcCisJJChBQkFTRSktdGV4dF9pby1lbnVtZXJhdGlvbl9pby5vCQlcCisJJChBQkFTRSktdGV4dF9pby1tb2R1bGFyX2lvLm8JCQlcCisJJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvLm8KKworCithbGwgOjogIGxpYkFkYUN1cnNlcy5hCisJQGVjaG8gZG9uZQorCitsaWJBZGFDdXJzZXMuYSA6OiBkb3RvdWNoICQoTElCT0JKUykgQGNmX2dlbmVyaWNfb2JqZWN0c0AKKwkkKEFSKSAkKEFSX09QVFMpICRAICQoTElCT0JKUykgQGNmX2dlbmVyaWNfb2JqZWN0c0AKKworZG90b3VjaCA6CisJQHNoIC1jICdmb3IgZiBpbiAkKExJQkFMSVMpICQoR0VOQUxJUyk7IGRvIHRlc3QgLWYgJCRmIHx8IHRvdWNoICQkZjsgZG9uZScKKworc291cmNlcyA6CisJQGVjaG8gbWFkZSAkQAorCitsaWJzIFwKK2luc3RhbGwgXAoraW5zdGFsbC5saWJzIFwKK3VuaW5zdGFsbCBcCit1bmluc3RhbGwubGlicyA6OgorCUBlY2hvIG1hZGUgJEAKKworZ2VuZXJpY3M6ICQoR0VOQUxJUykKKwlAZWNobyBtYWRlICRACisKK21vc3RseWNsZWFuIDo6CisJcm0gLWYgKi5vICouYWxpIGJfdCouKiAqLnMgJChQUk9HUykgYS5vdXQgY29yZSBiXypfdGVzdC5jICoueHJbYnNdICouYQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCXJtIC1mICQoTElCQUxJUykgJChHRU5BTElTKSAkKExJQk9CSlMpICQoR0VOT0JKUykgJChBQkFTRSktdHJhY2UuYWRiCisKK2Rpc3RjbGVhbiA6OiBjbGVhbgorCXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworQkFTRURFUFM9JChBQkFTRSkuYWRzICQoQUJBU0UpLWF1eC5hZHMgJChBQkFTRSkuYWRiCisKKyQoQUxJQikubzogJChzcmNkaXIpLyQoQUxJQikuYWRzCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFMSUIpLmFkcworCisKKyQoQUJBU0UpLWF1eC5vOiAkKHNyY2RpcikvJChBQkFTRSktYXV4LmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktYXV4LmFkYgorCisKKyQoQUJBU0UpLm86ICQoQUJBU0UpLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKEFCQVNFKS5hZGIKKworCiskKEFCQVNFKS10ZXJtaW5mby5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXJtaW5mby5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGVybWluZm8uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXJtaW5mby5hZGIKKworCiskKEFCQVNFKS10ZXJtY2FwLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRlcm1jYXAuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRlcm1jYXAuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXJtY2FwLmFkYgorCisKKyQoQUJBU0UpLXB1dHdpbi5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1wdXR3aW4uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXB1dHdpbi5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXB1dHdpbi5hZGIKKworCiskKEFCQVNFKS10cmFjZS5hZGIgOiAkKHNyY2RpcikvJChBQkFTRSktdHJhY2UuYWRiX3AKKwlybSAtZiAkQAorCSQoQURBUFJFUCkgLURBREFfVFJBQ0U9QEFEQV9UUkFDRUAgLURQUkFHTUFfVU5SRUY9QFBSQUdNQV9VTlJFRkAgJChzcmNkaXIpLyQoQUJBU0UpLXRyYWNlLmFkYl9wICRACisKKyQoQUJBU0UpLXRyYWNlLm86IFwKKwkJJChBQkFTRSktdHJhY2UuYWRzIFwKKwkJJChBQkFTRSktdHJhY2UuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoQUJBU0UpLXRyYWNlLmFkYgorCisKKyQoQUJBU0UpLW1vdXNlLm86IFwKKwkJJChBQkFTRSktbW91c2UuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLW1vdXNlLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktbW91c2UuYWRiCisKKworJChBQkFTRSktcGFuZWxzLm86IFwKKwkJJChBQkFTRSktcGFuZWxzLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMuYWRiCisKKworJChBQkFTRSktbWVudXMubzogXAorCQkkKEFCQVNFKS1tZW51cy5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktbWVudXMuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1tZW51cy5hZGIKKworCiskKEFCQVNFKS1mb3Jtcy5vOiBcCisJCSQoQUJBU0UpLWZvcm1zLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5vOiBcCisJCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZGIKKworJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZGIKKworJChBQkFTRSktdGV4dF9pby5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby5hZGIKKworJChBQkFTRSktdGV4dF9pby1hdXgubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1hdXguYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tYXV4LmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1hdXguYWRiCisKKyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLm86IFwKKwkJJChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktbWVudXMtbWVudV91c2VyX2RhdGEuYWRiCisKKyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLm86IFwKKwkJJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktbWVudXMtaXRlbV91c2VyX2RhdGEuYWRiCisKKyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLm86IFwKKwkJJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiCisKKyQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5vOiBcCisJCSQoQUJBU0UpLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkYgorCiskKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiCisKKyQoQUJBU0UpLXBhbmVscy11c2VyX2RhdGEubzogXAorCQkkKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS1wYW5lbHMtdXNlcl9kYXRhLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktcGFuZWxzLXVzZXJfZGF0YS5hZGIKKworJChBQkFTRSktdGV4dF9pby1pbnRlZ2VyX2lvLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8taW50ZWdlcl9pby5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1pbnRlZ2VyX2lvLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1pbnRlZ2VyX2lvLmFkYgorCiskKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZmxvYXRfaW8uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZmxvYXRfaW8uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZsb2F0X2lvLmFkYgorCiskKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZml4ZWRfaW8uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZml4ZWRfaW8uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWZpeGVkX2lvLmFkYgorCiskKEFCQVNFKS10ZXh0X2lvLWRlY2ltYWxfaW8ubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1kZWNpbWFsX2lvLmFkcyBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiICQoQkFTRURFUFMpCisJJChBREEpICQoQURBRkxBR1MpIC1jIC1vICRAICQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiCisKKyQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8ubzogXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiCisKKyQoQUJBU0UpLXRleHRfaW8tbW9kdWxhcl9pby5vOiBcCisJCSQoc3JjZGlyKS8kKEFCQVNFKS10ZXh0X2lvLW1vZHVsYXJfaW8uYWRzIFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tbW9kdWxhcl9pby5hZGIgJChCQVNFREVQUykKKwkkKEFEQSkgJChBREFGTEFHUykgLWMgLW8gJEAgJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tbW9kdWxhcl9pby5hZGIKKworJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvLm86IFwKKwkJJChzcmNkaXIpLyQoQUJBU0UpLXRleHRfaW8tY29tcGxleF9pby5hZHMgXAorCQkkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvLmFkYiAkKEJBU0VERVBTKQorCSQoQURBKSAkKEFEQUZMQUdTKSAtYyAtbyAkQCAkKHNyY2RpcikvJChBQkFTRSktdGV4dF9pby1jb21wbGV4X2lvLmFkYgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyZThjYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZGIKQEAgLTAsMCArMSwxMTYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXggICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eCBpcworICAgLS0KKyAgIC0tICBTb21lIGhlbHBlcnMKKyAgIHByb2NlZHVyZSBGaWxsX1N0cmluZyAoQ3AgIDogaW4gIGNoYXJzX3B0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyIDogb3V0IFN0cmluZykKKyAgIGlzCisgICAgICAtLSAgRmlsbCB0aGUgc3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlcnMgcmVmZXJlbmNlZCBieSB0aGUKKyAgICAgIC0tICBjaGFyc19wdHIuCisgICAgICAtLQorICAgICAgTGVuIDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBpZiBDcCAvPSBOdWxsX1B0ciB0aGVuCisgICAgICAgICBMZW4gOj0gTmF0dXJhbCAoU3RybGVuIChDcCkpOworICAgICAgICAgaWYgU3RyJ0xlbmd0aCA8IExlbiB0aGVuCisgICAgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgUyA6IFN0cmluZyAoMSAuLiBMZW4pOworICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFMgOj0gVmFsdWUgKENwKTsKKyAgICAgICAgICAgIFN0ciAoU3RyJ0ZpcnN0IC4uIChTdHInRmlyc3QgKyBMZW4gLSAxKSkgOj0gUyAoUydSYW5nZSk7CisgICAgICAgICBlbmQ7CisgICAgICBlbHNlCisgICAgICAgICBMZW4gOj0gMDsKKyAgICAgIGVuZCBpZjsKKworICAgICAgaWYgTGVuIDwgU3RyJ0xlbmd0aCB0aGVuCisgICAgICAgICBTdHIgKChTdHInRmlyc3QgKyBMZW4pIC4uIFN0cidMYXN0KSA6PSAob3RoZXJzID0+ICcgJyk7CisgICAgICBlbmQgaWY7CisKKyAgIGVuZCBGaWxsX1N0cmluZzsKKworICAgZnVuY3Rpb24gRmlsbF9TdHJpbmcgKENwIDogY2hhcnNfcHRyKSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgTGVuIDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBpZiBDcCAvPSBOdWxsX1B0ciB0aGVuCisgICAgICAgICBMZW4gOj0gTmF0dXJhbCAoU3RybGVuIChDcCkpOworICAgICAgICAgaWYgTGVuID0gMCB0aGVuCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICBTIDogU3RyaW5nICgxIC4uIExlbik7CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgRmlsbF9TdHJpbmcgKENwLCBTKTsKKyAgICAgICAgICAgICAgIHJldHVybiBTOworICAgICAgICAgICAgZW5kOworICAgICAgICAgZW5kIGlmOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuICIiOworICAgICAgZW5kIGlmOworICAgZW5kIEZpbGxfU3RyaW5nOworCisgICBwcm9jZWR1cmUgRXRpX0V4Y2VwdGlvbiAoQ29kZSA6IEV0aV9FcnJvcikKKyAgIGlzCisgICBiZWdpbgorICAgICAgY2FzZSBDb2RlIGlzCisgICAgICAgICB3aGVuIEVfT2sgICAgICAgICAgICAgID0+IG51bGw7CisgICAgICAgICB3aGVuIEVfU3lzdGVtX0Vycm9yICAgID0+IHJhaXNlIEV0aV9TeXN0ZW1fRXJyb3I7CisgICAgICAgICB3aGVuIEVfQmFkX0FyZ3VtZW50ICAgID0+IHJhaXNlIEV0aV9CYWRfQXJndW1lbnQ7CisgICAgICAgICB3aGVuIEVfUG9zdGVkICAgICAgICAgID0+IHJhaXNlIEV0aV9Qb3N0ZWQ7CisgICAgICAgICB3aGVuIEVfQ29ubmVjdGVkICAgICAgID0+IHJhaXNlIEV0aV9Db25uZWN0ZWQ7CisgICAgICAgICB3aGVuIEVfQmFkX1N0YXRlICAgICAgID0+IHJhaXNlIEV0aV9CYWRfU3RhdGU7CisgICAgICAgICB3aGVuIEVfTm9fUm9vbSAgICAgICAgID0+IHJhaXNlIEV0aV9Ob19Sb29tOworICAgICAgICAgd2hlbiBFX05vdF9Qb3N0ZWQgICAgICA9PiByYWlzZSBFdGlfTm90X1Bvc3RlZDsKKyAgICAgICAgIHdoZW4gRV9Vbmtub3duX0NvbW1hbmQgPT4gcmFpc2UgRXRpX1Vua25vd25fQ29tbWFuZDsKKyAgICAgICAgIHdoZW4gRV9Ob19NYXRjaCAgICAgICAgPT4gcmFpc2UgRXRpX05vX01hdGNoOworICAgICAgICAgd2hlbiBFX05vdF9TZWxlY3RhYmxlICA9PiByYWlzZSBFdGlfTm90X1NlbGVjdGFibGU7CisgICAgICAgICB3aGVuIEVfTm90X0Nvbm5lY3RlZCAgID0+IHJhaXNlIEV0aV9Ob3RfQ29ubmVjdGVkOworICAgICAgICAgd2hlbiBFX1JlcXVlc3RfRGVuaWVkICA9PiByYWlzZSBFdGlfUmVxdWVzdF9EZW5pZWQ7CisgICAgICAgICB3aGVuIEVfSW52YWxpZF9GaWVsZCAgID0+IHJhaXNlIEV0aV9JbnZhbGlkX0ZpZWxkOworICAgICAgICAgd2hlbiBFX0N1cnJlbnQgICAgICAgICA9PiByYWlzZSBFdGlfQ3VycmVudDsKKyAgICAgIGVuZCBjYXNlOworICAgZW5kIEV0aV9FeGNlcHRpb247CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDM3Y2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiCkBAIC0wLDAgKzEsNjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MDoyNSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgaXMKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gQWxwaGFfRmllbGQpCisgICBpcworICAgICAgQ19BbHBoYV9GaWVsZF9UeXBlIDogQ19GaWVsZF9UeXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19BbHBoYV9GaWVsZF9UeXBlLCAiVFlQRV9BTFBIQSIpOworCisgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19BbHBoYV9GaWVsZF9UeXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IENfSW50IChUeXAuTWluaW11bV9GaWVsZF9XaWR0aCkpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFdyYXBfQnVpbHRpbiAoRmxkLCBUeXApOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjBiNzlkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzCkBAIC0wLDAgKzEsNTMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGEgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYSBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYSk7CisKKyAgIHR5cGUgQWxwaGFfRmllbGQgaXMgbmV3IEZpZWxkX1R5cGUKKyAgICAgd2l0aCByZWNvcmQKKyAgICAgICAgTWluaW11bV9GaWVsZF9XaWR0aCA6IE5hdHVyYWwgOj0gMDsKKyAgICAgZW5kIHJlY29yZDsKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gQWxwaGFfRmllbGQpOworICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjM2NhMjkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRiCkBAIC0wLDAgKzEsNjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYU51bWVyaWMgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MDoxNSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljIGlzCisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEFscGhhTnVtZXJpY19GaWVsZCkKKyAgIGlzCisgICAgICBDX0FscGhhTnVtZXJpY19GaWVsZF9UeXBlIDogQ19GaWVsZF9UeXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19BbHBoYU51bWVyaWNfRmllbGRfVHlwZSwgIlRZUEVfQUxOVU0iKTsKKworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGICAgIDogRmllbGQgOj0gRmxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgIDogQ19GaWVsZF9UeXBlIDo9IENfQWxwaGFOdW1lcmljX0ZpZWxkX1R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQ19JbnQgKFR5cC5NaW5pbXVtX0ZpZWxkX1dpZHRoKSk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCk7CisgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkFscGhhTnVtZXJpYzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjE5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzCkBAIC0wLDAgKzEsNTQgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYU51bWVyaWMgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYU51bWVyaWMgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUKKyAgICAgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljKTsKKworICAgdHlwZSBBbHBoYU51bWVyaWNfRmllbGQgaXMgbmV3IEZpZWxkX1R5cGUKKyAgICAgd2l0aCByZWNvcmQKKyAgICAgICAgTWluaW11bV9GaWVsZF9XaWR0aCA6IE5hdHVyYWwgOj0gMDsKKyAgICAgZW5kIHJlY29yZDsKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gQWxwaGFOdW1lcmljX0ZpZWxkKTsKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlYWY0NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZGIKQEAgLTAsMCArMSw4MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7IHVzZSBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhIGlzCisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoU2V0ICAgICAgICAgICAgOiBUeXBlX1NldCA6PSBNaXhlZF9DYXNlOworICAgICAgICAgICAgICAgICAgICBDYXNlX1NlbnNpdGl2ZSA6IEJvb2xlYW4gIDo9IEZhbHNlOworICAgICAgICAgICAgICAgICAgICBNdXN0X0JlX1VuaXF1ZSA6IEJvb2xlYW4gIDo9IEZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW51bWVyYXRpb25fRmllbGQKKyAgIGlzCisgICAgICBJIDogRW51bWVyYXRpb25fSW5mbyAoVCdQb3MgKFQnTGFzdCkgLSBUJ1BvcyAoVCdGaXJzdCkgKyAxKTsKKyAgICAgIEogOiBQb3NpdGl2ZSA6PSAxOworICAgYmVnaW4KKyAgICAgIEkuQ2FzZV9TZW5zaXRpdmUgOj0gQ2FzZV9TZW5zaXRpdmU7CisgICAgICBJLk1hdGNoX011c3RfQmVfVW5pcXVlIDo9IE11c3RfQmVfVW5pcXVlOworCisgICAgICBmb3IgRSBpbiBUJ1JhbmdlIGxvb3AKKyAgICAgICAgIEkuTmFtZXMgKEopIDo9IG5ldyBTdHJpbmcnKFQnSW1hZ2UgKEUpKTsKKyAgICAgICAgIC0tICBUaGUgSW1hZ2UgYXR0cmlidXRlIGRlZmF1bHRzIHRvIHVwcGVyIGNhc2UsIHNvIHdlIGhhdmUgdG8gaGFuZGxlCisgICAgICAgICAtLSAgb25seSB0aGUgb3RoZXIgb25lcy4uLgorICAgICAgICAgaWYgU2V0IC89IFVwcGVyX0Nhc2UgdGhlbgorICAgICAgICAgICAgSS5OYW1lcyAoSikuYWxsIDo9IFRvX0xvd2VyIChJLk5hbWVzIChKKS5hbGwpOworICAgICAgICAgICAgaWYgU2V0ID0gTWl4ZWRfQ2FzZSB0aGVuCisgICAgICAgICAgICAgICBJLk5hbWVzIChKKShJLk5hbWVzIChKKS5hbGwnRmlyc3QpIDo9CisgICAgICAgICAgICAgICAgIFRvX1VwcGVyIChJLk5hbWVzIChKKShJLk5hbWVzIChKKS5hbGwnRmlyc3QpKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIEogOj0gSiArIDE7CisgICAgICBlbmQgbG9vcDsKKworICAgICAgcmV0dXJuIENyZWF0ZSAoSSwgVHJ1ZSk7CisgICBlbmQgQ3JlYXRlOworCisgICBmdW5jdGlvbiBWYWx1ZSAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgQnVmIDogQnVmZmVyX051bWJlciA6PSBCdWZmZXJfTnVtYmVyJ0ZpcnN0KSByZXR1cm4gVAorICAgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gVCdWYWx1ZSAoR2V0X0J1ZmZlciAoRmxkLCBCdWYpKTsKKyAgIGVuZCBWYWx1ZTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmYWQwOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHMKQEAgLTAsMCArMSw1OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuZXJpYworICAgdHlwZSBUIGlzICg8Pik7CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbi5BZGEgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUKKyAgICAgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhKTsKKworICAgZnVuY3Rpb24gQ3JlYXRlIChTZXQgICAgICAgICAgICA6IFR5cGVfU2V0IDo9IE1peGVkX0Nhc2U7CisgICAgICAgICAgICAgICAgICAgIENhc2VfU2Vuc2l0aXZlIDogQm9vbGVhbiAgOj0gRmFsc2U7CisgICAgICAgICAgICAgICAgICAgIE11c3RfQmVfVW5pcXVlIDogQm9vbGVhbiAgOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFbnVtZXJhdGlvbl9GaWVsZDsKKworICAgZnVuY3Rpb24gVmFsdWUgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgIEJ1ZiA6IEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdCkgcmV0dXJuIFQ7CisgICAtLSAgVHJhbnNsYXRlIHRoZSBjb250ZW50IG9mIHRoZSBmaWVsZHMgYnVmZmVyIC0gaW5kaWNhdGVkIGJ5IHRoZQorICAgLS0gIGJ1ZmZlciBudW1iZXIgLSBpbnRvIGFuIGVudW1lcmF0aW9uIHZhbHVlLiBJZiB0aGUgYnVmZmVyIGlzIGVtcHR5CisgICAtLSAgb3IgdGhlIGNvbnRlbnQgaXMgaW52YWxpZCwgYSBDb25zdHJhaW50X0Vycm9yIGlzIHJhaXNlcy4KKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTIwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZGIKQEAgLTAsMCArMSwxMTkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbiAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbiBpcworCisgICBmdW5jdGlvbiBDcmVhdGUgKEluZm8gICAgICAgICAgICAgICA6IEVudW1lcmF0aW9uX0luZm87CisgICAgICAgICAgICAgICAgICAgIEF1dG9fUmVsZWFzZV9OYW1lcyA6IEJvb2xlYW4gOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFbnVtZXJhdGlvbl9GaWVsZAorICAgaXMKKyAgICAgIHByb2NlZHVyZSBSZWxlYXNlX1N0cmluZyBpcworICAgICAgICBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24gKFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdfQWNjZXNzKTsKKyAgICAgIEUgOiBFbnVtZXJhdGlvbl9GaWVsZDsKKyAgICAgIEwgOiBjb25zdGFudCBzaXplX3QgOj0gMSArIHNpemVfdCAoSW5mby5DKTsKKyAgICAgIFMgOiBTdHJpbmdfQWNjZXNzOworICAgYmVnaW4KKyAgICAgIEUuQ2FzZV9TZW5zaXRpdmUgICAgICAgOj0gSW5mby5DYXNlX1NlbnNpdGl2ZTsKKyAgICAgIEUuTWF0Y2hfTXVzdF9CZV9VbmlxdWUgOj0gSW5mby5NYXRjaF9NdXN0X0JlX1VuaXF1ZTsKKyAgICAgIEUuQXJyIDo9IG5ldyBjaGFyc19wdHJfYXJyYXkgKHNpemVfdCAoMSkgLi4gTCk7CisgICAgICBmb3IgSSBpbiAxIC4uIFBvc2l0aXZlIChMIC0gMSkgbG9vcAorICAgICAgICAgaWYgSW5mby5OYW1lcyAoSSkgPSBudWxsIHRoZW4KKyAgICAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgRS5BcnIgKHNpemVfdCAoSSkpIDo9IE5ld19TdHJpbmcgKEluZm8uTmFtZXMgKEkpLmFsbCk7CisgICAgICAgICBpZiBBdXRvX1JlbGVhc2VfTmFtZXMgdGhlbgorICAgICAgICAgICAgUyA6PSBJbmZvLk5hbWVzIChJKTsKKyAgICAgICAgICAgIFJlbGVhc2VfU3RyaW5nIChTKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBsb29wOworICAgICAgRS5BcnIgKEwpIDo9IE51bGxfUHRyOworICAgICAgcmV0dXJuIEU7CisgICBlbmQgQ3JlYXRlOworCisgICBwcm9jZWR1cmUgUmVsZWFzZSAoRW51bSA6IGluIG91dCBFbnVtZXJhdGlvbl9GaWVsZCkKKyAgIGlzCisgICAgICBJIDogc2l6ZV90IDo9IDA7CisgICAgICBQIDogY2hhcnNfcHRyOworICAgYmVnaW4KKyAgICAgIGxvb3AKKyAgICAgICAgIFAgOj0gRW51bS5BcnIgKEkpOworICAgICAgICAgZXhpdCB3aGVuIFAgPSBOdWxsX1B0cjsKKyAgICAgICAgIEZyZWUgKFApOworICAgICAgICAgRW51bS5BcnIgKEkpIDo9IE51bGxfUHRyOworICAgICAgICAgSSA6PSBJICsgMTsKKyAgICAgIGVuZCBsb29wOworICAgICAgRW51bS5BcnIgOj0gbnVsbDsKKyAgIGVuZCBSZWxlYXNlOworCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBFbnVtZXJhdGlvbl9GaWVsZCkKKyAgIGlzCisgICAgICBDX0VudW1fVHlwZSA6IENfRmllbGRfVHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfRW51bV9UeXBlLCAiVFlQRV9FTlVNIik7CisKKyAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX0VudW1fVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IGNoYXJzX3B0cl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBpZiBUeXAuQXJyID0gbnVsbCB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGUgKEFyZzEgPT4gVHlwLkFyci5hbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyID0+IENfSW50IChCb29sZWFuJ1BvcyAoVHlwLkNhc2VfU2Vuc2l0aXZlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczID0+IENfSW50IChCb29sZWFuJ1BvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFR5cC5NYXRjaF9NdXN0X0JlX1VuaXF1ZSkpKTsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICAgICBXcmFwX0J1aWx0aW4gKEZsZCwgVHlwLCBDX0Nob2ljZV9Sb3V0ZXIpOworICAgZW5kIFNldF9GaWVsZF9UeXBlOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTdlNDExCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRzCkBAIC0wLDAgKzEsOTggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24gICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggSW50ZXJmYWNlcy5DLlN0cmluZ3M7CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbiBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZQorICAgICAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbik7CisKKyAgIHR5cGUgU3RyaW5nX0FjY2VzcyBpcyBhY2Nlc3MgU3RyaW5nOworCisgICAtLSAgVHlwZV9TZXQgaXMgdXNlZCBieSB0aGUgY2hpbGQgcGFja2FnZSBBZGEKKyAgIHR5cGUgVHlwZV9TZXQgaXMgKExvd2VyX0Nhc2UsIFVwcGVyX0Nhc2UsIE1peGVkX0Nhc2UpOworCisgICB0eXBlIEVudW1fQXJyYXkgaXMgYXJyYXkgKFBvc2l0aXZlIHJhbmdlIDw+KQorICAgICBvZiBTdHJpbmdfQWNjZXNzOworCisgICB0eXBlIEVudW1lcmF0aW9uX0luZm8gKEMgOiBQb3NpdGl2ZSkgaXMKKyAgICAgIHJlY29yZAorICAgICAgICAgTmFtZXMgICAgICAgICAgICAgICAgOiBFbnVtX0FycmF5ICgxIC4uIEMpOworICAgICAgICAgQ2FzZV9TZW5zaXRpdmUgICAgICAgOiBCb29sZWFuIDo9IEZhbHNlOworICAgICAgICAgTWF0Y2hfTXVzdF9CZV9VbmlxdWUgOiBCb29sZWFuIDo9IEZhbHNlOworICAgICAgZW5kIHJlY29yZDsKKworICAgdHlwZSBFbnVtZXJhdGlvbl9GaWVsZCBpcyBuZXcgRmllbGRfVHlwZSB3aXRoIHByaXZhdGU7CisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoSW5mbyA6IEVudW1lcmF0aW9uX0luZm87CisgICAgICAgICAgICAgICAgICAgIEF1dG9fUmVsZWFzZV9OYW1lcyA6IEJvb2xlYW4gOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFbnVtZXJhdGlvbl9GaWVsZDsKKyAgIC0tICBNYWtlIGFuIGZpZWxkdHlwZSBmcm9tIHRoZSBpbmZvLiBFbnVtZXJhdGlvbnMgYXJlIHNwZWNpYWwsIGJlY2F1c2UKKyAgIC0tICB0aGV5IG5vcm1hbGx5IGRvbid0IGNvcHkgdGhlIGVudW0gdmFsdWVzIGludG8gYSBwcml2YXRlIHN0b3JlLCBzbworICAgLS0gIHdlIGhhdmUgdG8gY2FyZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBpbmZvIHdlIHByb3ZpZGUuCisgICAtLSAgVGhlIEF1dG9fUmVsZWFzZV9OYW1lcyBmbGFnIG1heSBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgcmVsZWFzZXMKKyAgIC0tICB0aGUgc3RyaW5ncyBpbiB0aGUgTmFtZXMgYXJyYXkgb2YgdGhlIEVudW1lcmF0aW9uX0luZm8uCisKKyAgIGZ1bmN0aW9uIE1ha2VfRW51bWVyYXRpb25fVHlwZSAoSW5mbyA6IEVudW1lcmF0aW9uX0luZm87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9fUmVsZWFzZV9OYW1lcyA6IEJvb2xlYW4gOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFbnVtZXJhdGlvbl9GaWVsZCByZW5hbWVzIENyZWF0ZTsKKworICAgcHJvY2VkdXJlIFJlbGVhc2UgKEVudW0gOiBpbiBvdXQgRW51bWVyYXRpb25fRmllbGQpOworICAgLS0gIEJ1dCB3ZSBtYXkgd2FudCB0byByZWxlYXNlIHRoZSBmaWVsZCB0byByZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkCisgICAtLSAgYnkgaXQgaW50ZXJuYWxseS4gQWZ0ZXIgdGhhdCB0aGUgRW51bWVyYXRpb24gZmllbGQgaXMgbm8gbG9uZ2VyIHVzYWJsZS4KKworICAgLS0gIFRoZSBuZXh0IHR5cGUgZGVmaW50aW9ucyBhcmUgYWxsIG5jdXJzZXMgZXh0ZW5zaW9ucy4gVGhleSBhcmUgdHlwaWNhbGx5CisgICAtLSAgbm90IGF2YWlsYWJsZSBpbiBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLgorCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBFbnVtZXJhdGlvbl9GaWVsZCk7CisgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKK3ByaXZhdGUKKyAgIHR5cGUgQ1BBX0FjY2VzcyBpcyBhY2Nlc3MgSW50ZXJmYWNlcy5DLlN0cmluZ3MuY2hhcnNfcHRyX2FycmF5OworCisgICB0eXBlIEVudW1lcmF0aW9uX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlIHdpdGgKKyAgICAgIHJlY29yZAorICAgICAgICAgQ2FzZV9TZW5zaXRpdmUgICAgICAgOiBCb29sZWFuIDo9IEZhbHNlOworICAgICAgICAgTWF0Y2hfTXVzdF9CZV9VbmlxdWUgOiBCb29sZWFuIDo9IEZhbHNlOworICAgICAgICAgQXJyICAgICAgICAgICAgICAgICAgOiBDUEFfQWNjZXNzIDo9IG51bGw7CisgICAgICBlbmQgcmVjb3JkOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbjsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQ2NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiCkBAIC0wLDAgKzEsNzAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MDowNiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQgaXMKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gSW50ZWdlcl9GaWVsZCkKKyAgIGlzCisgICAgICBDX0ludGVnZXJfRmllbGRfVHlwZSA6IENfRmllbGRfVHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfSW50ZWdlcl9GaWVsZF9UeXBlLCAiVFlQRV9JTlRFR0VSIik7CisKKyAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX0ludGVnZXJfRmllbGRfVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIDogQ19Mb25nX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA6IENfTG9uZ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0ZsZF9UeXBlIChBcmcxID0+IENfSW50IChUeXAuUHJlY2lzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgPT4gQ19Mb25nX0ludCAoVHlwLkxvd2VyX0xpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgPT4gQ19Mb25nX0ludCAoVHlwLlVwcGVyX0xpbWl0KSk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCk7CisgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODVjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHMKQEAgLTAsMCArMSw1NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkKTsKKworICAgdHlwZSBJbnRlZ2VyX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlIHdpdGgKKyAgICAgIHJlY29yZAorICAgICAgICAgUHJlY2lzaW9uICAgOiBOYXR1cmFsOworICAgICAgICAgTG93ZXJfTGltaXQgOiBJbnRlZ2VyOworICAgICAgICAgVXBwZXJfTGltaXQgOiBJbnRlZ2VyOworICAgICAgZW5kIHJlY29yZDsKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gSW50ZWdlcl9GaWVsZCk7CisgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkludEZpZWxkOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3YzViNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGIKQEAgLTAsMCArMSw2NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLklQVjRfQWRkcmVzcyAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjQ3ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgaXMKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gSW50ZXJuZXRfVjRfQWRkcmVzc19GaWVsZCkKKyAgIGlzCisgICAgICBDX0lQVjRfRmllbGRfVHlwZSA6IENfRmllbGRfVHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfSVBWNF9GaWVsZF9UeXBlLCAiVFlQRV9JUFY0Iik7CisKKyAgICAgIGZ1bmN0aW9uIFNldF9GbGRfVHlwZSAoRiAgICA6IEZpZWxkIDo9IEZsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Z0ICA6IENfRmllbGRfVHlwZSA6PSBDX0lQVjRfRmllbGRfVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGU7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCk7CisgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLklQVjRfQWRkcmVzczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMGFlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzCkBAIC0wLDAgKzEsNTEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUKKyAgICAgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSVBWNF9BZGRyZXNzKTsKKworICAgdHlwZSBJbnRlcm5ldF9WNF9BZGRyZXNzX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlIHdpdGggbnVsbCByZWNvcmQ7CisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIEludGVybmV0X1Y0X0FkZHJlc3NfRmllbGQpOworICAgcHJhZ21hIElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3M7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Zjg0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkYgpAQCAtMCwwICsxLDczIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjU3ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBJbnRlcmZhY2VzLkM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLk51bWVyaWMgaXMKKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gTnVtZXJpY19GaWVsZCkKKyAgIGlzCisgICAgICB0eXBlIERvdWJsZSBpcyBuZXcgSW50ZXJmYWNlcy5DLmRvdWJsZTsKKworICAgICAgQ19OdW1lcmljX0ZpZWxkX1R5cGUgOiBDX0ZpZWxkX1R5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDX051bWVyaWNfRmllbGRfVHlwZSwgIlRZUEVfTlVNRVJJQyIpOworCisgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19OdW1lcmljX0ZpZWxkX1R5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA6IERvdWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyA6IERvdWJsZSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQ19JbnQgKFR5cC5QcmVjaXNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiA9PiBEb3VibGUgKFR5cC5Mb3dlcl9MaW1pdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczID0+IERvdWJsZSAoVHlwLlVwcGVyX0xpbWl0KSk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCk7CisgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLk51bWVyaWM7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTFiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkcwpAQCAtMCwwICsxLDU1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuTnVtZXJpYyAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuTnVtZXJpYyBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljKTsKKworICAgdHlwZSBOdW1lcmljX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlIHdpdGgKKyAgICAgIHJlY29yZAorICAgICAgICAgUHJlY2lzaW9uICAgOiBOYXR1cmFsOworICAgICAgICAgTG93ZXJfTGltaXQgOiBGbG9hdDsKKyAgICAgICAgIFVwcGVyX0xpbWl0IDogRmxvYXQ7CisgICAgICBlbmQgcmVjb3JkOworCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBOdW1lcmljX0ZpZWxkKTsKKyAgIHByYWdtYSBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuTnVtZXJpYzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDllMmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRiCkBAIC0wLDAgKzEsNzEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5SZWdFeHAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS44ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBJbnRlcmZhY2VzLkM7IHVzZSBJbnRlcmZhY2VzLkM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cCBpcworCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBSZWd1bGFyX0V4cHJlc3Npb25fRmllbGQpCisgICBpcworICAgICAgdHlwZSBDaGFyX1B0ciBpcyBhY2Nlc3MgYWxsIEludGVyZmFjZXMuQy5jaGFyOworCisgICAgICBDX1JlZ2V4cF9GaWVsZF9UeXBlIDogQ19GaWVsZF9UeXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19SZWdleHBfRmllbGRfVHlwZSwgIlRZUEVfUkVHRVhQIik7CisKKyAgICAgIGZ1bmN0aW9uIFNldF9GdHlwIChGICAgIDogRmllbGQgOj0gRmxkOworICAgICAgICAgICAgICAgICAgICAgICAgIENmdCAgOiBDX0ZpZWxkX1R5cGUgOj0gQ19SZWdleHBfRmllbGRfVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQ2hhcl9QdHIpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GdHlwLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgVHh0IDogY2hhcl9hcnJheSAoMCAuLiBUeXAuUmVndWxhcl9FeHByZXNzaW9uLmFsbCdMZW5ndGgpOworICAgICAgTGVuIDogc2l6ZV90OworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIFRvX0MgKFR5cC5SZWd1bGFyX0V4cHJlc3Npb24uYWxsLCBUeHQsIExlbik7CisgICAgICBSZXMgOj0gU2V0X0Z0eXAgKEFyZzEgPT4gVHh0IChUeHQnRmlyc3QpJ0FjY2Vzcyk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgV3JhcF9CdWlsdGluIChGbGQsIFR5cCk7CisgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDUxYWIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzCkBAIC0wLDAgKzEsNTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuUmVnRXhwICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5SZWdFeHAgaXMKKyAgIHByYWdtYSBQcmVlbGFib3JhdGUgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuUmVnRXhwKTsKKworICAgdHlwZSBTdHJpbmdfQWNjZXNzIGlzIGFjY2VzcyBTdHJpbmc7CisKKyAgIHR5cGUgUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkIGlzIG5ldyBGaWVsZF9UeXBlIHdpdGgKKyAgICAgIHJlY29yZAorICAgICAgICAgUmVndWxhcl9FeHByZXNzaW9uIDogU3RyaW5nX0FjY2VzczsKKyAgICAgIGVuZCByZWNvcmQ7CisKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfVHlwZSAoRmxkIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IGluIFJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCk7CisgICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlJlZ0V4cDsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZhNDJjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiCkBAIC0wLDAgKzEsMTEwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlci5DaG9pY2UgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTUgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ4OjU4ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIuQ2hvaWNlIGlzCisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKKyAgIGZ1bmN0aW9uIFRvX0FyZ3VtZW50X0FjY2VzcyBpcyBuZXcgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgIChTeXN0ZW0uQWRkcmVzcywgQXJndW1lbnRfQWNjZXNzKTsKKyAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworCisgICBmdW5jdGlvbiBHZW5lcmljX05leHQgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICBpcworICAgICAgUmVzdWx0IDogQm9vbGVhbjsKKyAgICAgIFVkZiAgICA6IGNvbnN0YW50IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzcyA6PQorICAgICAgICBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3MKKyAgICAgICAgKFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKS5UeXApOworICAgYmVnaW4KKyAgICAgIFJlc3VsdCA6PSBOZXh0IChGbGQsIFVkZi5hbGwpOworICAgICAgcmV0dXJuIENfSW50IChCb29sZWFuJ1BvcyAoUmVzdWx0KSk7CisgICBlbmQgR2VuZXJpY19OZXh0OworCisgICBmdW5jdGlvbiBHZW5lcmljX1ByZXYgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50CisgICBpcworICAgICAgUmVzdWx0IDogQm9vbGVhbjsKKyAgICAgIFVkZiAgICA6IGNvbnN0YW50IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzcyA6PQorICAgICAgICBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3MKKyAgICAgICAgKFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKS5UeXApOworICAgYmVnaW4KKyAgICAgIFJlc3VsdCA6PSBQcmV2aW91cyAoRmxkLCBVZGYuYWxsKTsKKyAgICAgIHJldHVybiBDX0ludCAoQm9vbGVhbidQb3MgKFJlc3VsdCkpOworICAgZW5kIEdlbmVyaWNfUHJldjsKKworICAgLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLQorICAgZnVuY3Rpb24gQ19HZW5lcmljX0Nob2ljZSByZXR1cm4gQ19GaWVsZF9UeXBlCisgICBpcworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgICAgVCAgIDogQ19GaWVsZF9UeXBlOworICAgYmVnaW4KKyAgICAgIGlmIE1fR2VuZXJpY19DaG9pY2UgPSBOdWxsX0ZpZWxkX1R5cGUgdGhlbgorICAgICAgICAgVCA6PSBOZXdfRmllbGR0eXBlIChHZW5lcmljX0ZpZWxkX0NoZWNrJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJpY19DaGFyX0NoZWNrJ0FjY2Vzcyk7CisgICAgICAgICBpZiBUID0gTnVsbF9GaWVsZF9UeXBlIHRoZW4KKyAgICAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgUmVzIDo9IFNldF9GaWVsZHR5cGVfQXJnIChULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlX0FyZydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlfQXJnJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZV9BcmcnQWNjZXNzKTsKKyAgICAgICAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICAgICAgICBlbmQgaWY7CisKKyAgICAgICAgICAgIFJlcyA6PSBTZXRfRmllbGR0eXBlX0Nob2ljZSAoVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJpY19OZXh0J0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJpY19QcmV2J0FjY2Vzcyk7CisgICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgTV9HZW5lcmljX0Nob2ljZSA6PSBUOworICAgICAgZW5kIGlmOworICAgICAgcHJhZ21hIEFzc2VydCAoTV9HZW5lcmljX0Nob2ljZSAvPSBOdWxsX0ZpZWxkX1R5cGUpOworICAgICAgcmV0dXJuIE1fR2VuZXJpY19DaG9pY2U7CisgICBlbmQgQ19HZW5lcmljX0Nob2ljZTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlci5DaG9pY2U7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2OWY0MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkcwpAQCAtMCwwICsxLDk0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIuQ2hvaWNlICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTIgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjIwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBJbnRlcmZhY2VzLkM7CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZSBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZQorICAgICAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZSk7CisKKyAgIHN1YnR5cGUgQ19JbnQgaXMgSW50ZXJmYWNlcy5DLmludDsKKworICAgdHlwZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZSBpcyBhYnN0cmFjdCBuZXcKKyAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgd2l0aCBudWxsIHJlY29yZDsKKyAgIC0tICBUaGlzIGlzIHRoZSByb290IG9mIHRoZSBtZWNoYW5pc20gd2UgdXNlIHRvIGNyZWF0ZSBmaWVsZCB0eXBlcyBpbgorICAgLS0gIEFkYTk1IHRoYXQgYWxsb3cgdGhlIHByZXYvbmV4dCBtZWNoYW5pc20uIFlvdSBzaG91bGQgeW91ciBvd24gdHlwZQorICAgLS0gIGRlcml2ZSBmcm9tIHRoaXMgb25lIGFuZCBpbXBsZW1lbnQgdGhlIEZpZWxkX0NoZWNrLCBDaGFyYWN0ZXJfQ2hlY2sKKyAgIC0tICBOZXh0IGFuZCBQcmV2aW91cyBmdW5jdGlvbnMgZm9yIHlvdXIgb3duIHR5cGUuCisKKyAgIHR5cGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzIGlzIGFjY2VzcyBhbGwKKyAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2UnQ2xhc3M7CisKKyAgIGZ1bmN0aW9uIE5leHQKKyAgICAgKEZsZCA6IEZpZWxkOworICAgICAgVHlwIDogVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2UpIHJldHVybiBCb29sZWFuCisgICAgICBpcyBhYnN0cmFjdDsKKyAgIC0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhIG5leHQKKyAgIC0tICB2YWx1ZSBpbnRvIHRoZSBmaWVsZHMgYnVmZmVyLgorCisgICBmdW5jdGlvbiBQcmV2aW91cworICAgICAoRmxkIDogRmllbGQ7CisgICAgICBUeXAgOiBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZSkgcmV0dXJuIEJvb2xlYW4KKyAgICAgIGlzIGFic3RyYWN0OworICAgLS0gIElmIFRydWUgaXMgcmV0dXJuZWQsIHRoZSBmdW5jdGlvbiBzdWNjZXNzZnVsbHkgZ2VuZXJhdGVkIGEgcHJldmlvdXMKKyAgIC0tICB2YWx1ZSBpbnRvIHRoZSBmaWVsZHMgYnVmZmVyLgorCisgICAtLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tICB8IFByaXZhdGUgUGFydC4KKyAgIC0tICB8Citwcml2YXRlCisgICBmdW5jdGlvbiBDX0dlbmVyaWNfQ2hvaWNlIHJldHVybiBDX0ZpZWxkX1R5cGU7CisKKyAgIGZ1bmN0aW9uIEdlbmVyaWNfTmV4dCAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgR2VuZXJpY19OZXh0KTsKKyAgIC0tICBUaGlzIGlzIHRoZSBnZW5lcmljIG5leHQgQ2hvaWNlX0Z1bmN0aW9uIGZvciB0aGUgbG93LWxldmVsIGZpZWxkdHlwZQorICAgLS0gIHJlcHJlc2VudGluZyBhbGwgdGhlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGRlcml2YXRlcy4gSXQgcm91dGVzCisgICAtLSAgdGhlIGNhbGwgdG8gdGhlIE5leHQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0eXBlLgorCisgICBmdW5jdGlvbiBHZW5lcmljX1ByZXYgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBVc3IgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIENfSW50OworICAgcHJhZ21hIENvbnZlbnRpb24gKEMsIEdlbmVyaWNfUHJldik7CisgICAtLSAgVGhpcyBpcyB0aGUgZ2VuZXJpYyBwcmV2IENob2ljZV9GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGUKKyAgIC0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0ZXMuIEl0IHJvdXRlcworICAgLS0gIHRoZSBjYWxsIHRvIHRoZSBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHR5cGUuCisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIuQ2hvaWNlOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjRjMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGIKQEAgLTAsMCArMSwxMzMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlciAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xNSAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6MjggJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlciBpcworCisgICBwcm9jZWR1cmUgU2V0X0ZpZWxkX1R5cGUgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgOiBpbiBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBBbGxvY2F0ZV9BcmcgKFQgOiBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSdDbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFyZ3VtZW50X0FjY2VzczsKKworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9UeXBlIChGICAgIDogRmllbGQgOj0gRmxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgIDogQ19GaWVsZF9UeXBlIDo9IENfR2VuZXJpY19UeXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQXJndW1lbnRfQWNjZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisKKyAgICAgIGZ1bmN0aW9uIEFsbG9jYXRlX0FyZyAoVCA6IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlJ0NsYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRfQWNjZXNzCisgICAgICBpcworICAgICAgICAgUHRyIDogY29uc3RhbnQgRmllbGRfVHlwZV9BY2Nlc3MKKyAgICAgICAgICAgICA6PSBuZXcgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUnQ2xhc3MnKFQpOworICAgICAgYmVnaW4KKyAgICAgICAgIHJldHVybiBuZXcgQXJndW1lbnQnKFVzciA9PiBTeXN0ZW0uTnVsbF9BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwID0+IFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmdCA9PiBOdWxsX0ZpZWxkX1R5cGUpOworICAgICAgZW5kIEFsbG9jYXRlX0FyZzsKKworICAgYmVnaW4KKyAgICAgIFJlcyA6PSBTZXRfRmxkX1R5cGUgKEFyZzEgPT4gQWxsb2NhdGVfQXJnIChUeXApKTsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0ZpZWxkX1R5cGU7CisKKyAgIHByYWdtYSBXYXJuaW5ncyAoT2ZmKTsKKyAgIGZ1bmN0aW9uIFRvX0FyZ3VtZW50X0FjY2VzcyBpcyBuZXcgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgIChTeXN0ZW0uQWRkcmVzcywgQXJndW1lbnRfQWNjZXNzKTsKKyAgIHByYWdtYSBXYXJuaW5ncyAoT24pOworCisgICBmdW5jdGlvbiBHZW5lcmljX0ZpZWxkX0NoZWNrIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgIGlzCisgICAgICBSZXN1bHQgOiBCb29sZWFuOworICAgICAgVWRmICAgIDogY29uc3RhbnQgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzIDo9CisgICAgICAgIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzcyAoVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpLlR5cCk7CisgICBiZWdpbgorICAgICAgUmVzdWx0IDo9IEZpZWxkX0NoZWNrIChGbGQsIFVkZi5hbGwpOworICAgICAgcmV0dXJuIENfSW50IChCb29sZWFuJ1BvcyAoUmVzdWx0KSk7CisgICBlbmQgR2VuZXJpY19GaWVsZF9DaGVjazsKKworICAgZnVuY3Rpb24gR2VuZXJpY19DaGFyX0NoZWNrIChDaCAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludAorICAgaXMKKyAgICAgIFJlc3VsdCA6IEJvb2xlYW47CisgICAgICBVZGYgICAgOiBjb25zdGFudCBVc2VyX0RlZmluZWRfRmllbGRfVHlwZV9BY2Nlc3MgOj0KKyAgICAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzIChUb19Bcmd1bWVudF9BY2Nlc3MgKFVzcikuVHlwKTsKKyAgIGJlZ2luCisgICAgICBSZXN1bHQgOj0gQ2hhcmFjdGVyX0NoZWNrIChDaGFyYWN0ZXInVmFsIChDaCksIFVkZi5hbGwpOworICAgICAgcmV0dXJuIENfSW50IChCb29sZWFuJ1BvcyAoUmVzdWx0KSk7CisgICBlbmQgR2VuZXJpY19DaGFyX0NoZWNrOworCisgICAtLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tCisgICBmdW5jdGlvbiBDX0dlbmVyaWNfVHlwZSByZXR1cm4gQ19GaWVsZF9UeXBlCisgICBpcworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgICAgVCAgIDogQ19GaWVsZF9UeXBlOworICAgYmVnaW4KKyAgICAgIGlmIE1fR2VuZXJpY19UeXBlID0gTnVsbF9GaWVsZF9UeXBlIHRoZW4KKyAgICAgICAgIFQgOj0gTmV3X0ZpZWxkdHlwZSAoR2VuZXJpY19GaWVsZF9DaGVjaydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNfQ2hhcl9DaGVjaydBY2Nlc3MpOworICAgICAgICAgaWYgVCA9IE51bGxfRmllbGRfVHlwZSB0aGVuCisgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJlcyA6PSBTZXRfRmllbGR0eXBlX0FyZyAoVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5X0FyZydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVfQXJnJ0FjY2Vzcyk7CisgICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgICAgZW5kIGlmOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgTV9HZW5lcmljX1R5cGUgOj0gVDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHByYWdtYSBBc3NlcnQgKE1fR2VuZXJpY19UeXBlIC89IE51bGxfRmllbGRfVHlwZSk7CisgICAgICByZXR1cm4gTV9HZW5lcmljX1R5cGU7CisgICBlbmQgQ19HZW5lcmljX1R5cGU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXI7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZWM2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkcwpAQCAtMCwwICsxLDk1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTIgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ5OjM4ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBJbnRlcmZhY2VzLkM7CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIpOworICAgc3VidHlwZSBDX0ludCBpcyBJbnRlcmZhY2VzLkMuaW50OworCisgICB0eXBlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGlzIGFic3RyYWN0IG5ldyBGaWVsZF9UeXBlIHdpdGggbnVsbCByZWNvcmQ7CisgICAtLSAgVGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgbWVjaGFuaXNtIHdlIHVzZSB0byBjcmVhdGUgZmllbGQgdHlwZXMgaW4KKyAgIC0tICBBZGE5NS4gWW91IHNob3VsZCB5b3VyIG93biB0eXBlIGRlcml2ZSBmcm9tIHRoaXMgb25lIGFuZCBpbXBsZW1lbnQKKyAgIC0tICB0aGUgRmllbGRfQ2hlY2sgYW5kIENoYXJhY3Rlcl9DaGVjayBmdW5jdGlvbnMgZm9yIHlvdXIgb3duIHR5cGUuCisKKyAgIHR5cGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzIGlzIGFjY2VzcyBhbGwKKyAgICAgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUnQ2xhc3M7CisKKyAgIGZ1bmN0aW9uIEZpZWxkX0NoZWNrCisgICAgIChGbGQgOiBGaWVsZDsKKyAgICAgIFR5cCA6IFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlKSByZXR1cm4gQm9vbGVhbgorICAgICAgaXMgYWJzdHJhY3Q7CisgICAtLSAgSWYgVHJ1ZSBpcyByZXR1cm5lZCwgdGhlIGZpZWxkIGlzIGNvbnNpZGVyZWQgdmFsaWQsIG90aGVyd2lzZSBpdCBpcworICAgLS0gIGludmFsaWQuCisKKyAgIGZ1bmN0aW9uIENoYXJhY3Rlcl9DaGVjaworICAgICAoQ2ggIDogQ2hhcmFjdGVyOworICAgICAgVHlwIDogVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUpIHJldHVybiBCb29sZWFuCisgICAgICBpcyBhYnN0cmFjdDsKKyAgIC0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQgYXMgdmFsaWQgZm9yIHRoZQorICAgLS0gIGZpZWxkLCBvdGhlcndpc2UgYXMgaW52YWxpZC4KKworICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UeXBlIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwIDogaW4gVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUpOworICAgLS0gIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCB0eXBlcyBkZXJpdmVkIGZyb20gVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUuCisgICAtLSAgTm8gbmVlZCB0byByZWltcGxlbWVudCBpdCBmb3IgeW91ciBkZXJpdmVkIHR5cGUuCisKKyAgIC0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIHwgUHJpdmF0ZSBQYXJ0LgorICAgLS0gIHwgVXNlZCBieSB0aGUgQ2hvaWNlIGNoaWxkIHBhY2thZ2UuCitwcml2YXRlCisgICBmdW5jdGlvbiBDX0dlbmVyaWNfVHlwZSAgIHJldHVybiBDX0ZpZWxkX1R5cGU7CisKKyAgIGZ1bmN0aW9uIEdlbmVyaWNfRmllbGRfQ2hlY2sgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBHZW5lcmljX0ZpZWxkX0NoZWNrKTsKKyAgIC0tICBUaGlzIGlzIHRoZSBnZW5lcmljIEZpZWxkX0NoZWNrX0Z1bmN0aW9uIGZvciB0aGUgbG93LWxldmVsIGZpZWxkdHlwZQorICAgLS0gIHJlcHJlc2VudGluZyBhbGwgdGhlIFVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlIGRlcml2YXRlcy4gSXQgcm91dGVzCisgICAtLSAgdGhlIGNhbGwgdG8gdGhlIEZpZWxkX0NoZWNrIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS4KKworICAgZnVuY3Rpb24gR2VuZXJpY19DaGFyX0NoZWNrIChDaCAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludDsKKyAgIHByYWdtYSBDb252ZW50aW9uIChDLCBHZW5lcmljX0NoYXJfQ2hlY2spOworICAgLS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgQ2hhcl9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGUKKyAgIC0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0ZXMuIEl0IHJvdXRlcworICAgLS0gIHRoZSBjYWxsIHRvIHRoZSBDaGFyYWN0ZXJfQ2hlY2sgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0eXBlLgorCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODFjODAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZGIKQEAgLTAsMCArMSwyOTYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4yMCAkCistLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MzMgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7Cit3aXRoIEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOword2l0aCBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247CistLSAgfAorLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGR0eXBlLjN4CistLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gIHwKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzIGlzCisKKyAgIHVzZSB0eXBlIFN5c3RlbS5BZGRyZXNzOworCisgICBwcmFnbWEgV2FybmluZ3MgKE9mZik7CisgICBmdW5jdGlvbiBUb19Bcmd1bWVudF9BY2Nlc3MgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbgorICAgICAoU3lzdGVtLkFkZHJlc3MsIEFyZ3VtZW50X0FjY2Vzcyk7CisgICBwcmFnbWEgV2FybmluZ3MgKE9uKTsKKworICAgZnVuY3Rpb24gR2V0X0ZpZWxkdHlwZSAoRiA6IEZpZWxkKSByZXR1cm4gQ19GaWVsZF9UeXBlOworICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X0ZpZWxkdHlwZSwgImZpZWxkX3R5cGUiKTsKKworICAgZnVuY3Rpb24gR2V0X0FyZyAoRiA6IEZpZWxkKSByZXR1cm4gU3lzdGVtLkFkZHJlc3M7CisgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfQXJnLCAiZmllbGRfYXJnIik7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9UeXBlIChGbGQgOiBpbiBGaWVsZCkgcmV0dXJuIEZpZWxkX1R5cGVfQWNjZXNzCisgICBpcworICAgICAgTG93X0xldmVsIDogY29uc3RhbnQgQ19GaWVsZF9UeXBlIDo9IEdldF9GaWVsZHR5cGUgKEZsZCk7CisgICAgICBBcmcgOiBBcmd1bWVudF9BY2Nlc3M7CisgICBiZWdpbgorICAgICAgaWYgTG93X0xldmVsID0gTnVsbF9GaWVsZF9UeXBlIHRoZW4KKyAgICAgICAgIHJldHVybiBudWxsOworICAgICAgZWxzZQorICAgICAgICAgaWYgTG93X0xldmVsID0gTV9CdWlsdGluX1JvdXRlciBvciBlbHNlCisgICAgICAgICAgIExvd19MZXZlbCA9IE1fR2VuZXJpY19UeXBlIG9yIGVsc2UKKyAgICAgICAgICAgTG93X0xldmVsID0gTV9DaG9pY2VfUm91dGVyIG9yIGVsc2UKKyAgICAgICAgICAgTG93X0xldmVsID0gTV9HZW5lcmljX0Nob2ljZSB0aGVuCisgICAgICAgICAgICBBcmcgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChHZXRfQXJnIChGbGQpKTsKKyAgICAgICAgICAgIGlmIEFyZyA9IG51bGwgdGhlbgorICAgICAgICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICByZXR1cm4gQXJnLlR5cDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9UeXBlOworCisgICBmdW5jdGlvbiBNYWtlX0FyZyAoQXJncyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gU3lzdGVtLkFkZHJlc3MKKyAgIGlzCisgICAgICAtLSAgQWN0dWFsbHkgYXJncyBpcyBhIGRvdWJsZSBpbmRpcmVjdGVkIHBvaW50ZXIgdG8gdGhlIGFyZ3VtZW50cworICAgICAgLS0gIG9mIGEgQyB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LiBJbiB0aGVvcnkgaXQgaXMgbm93IHF1aXRlCisgICAgICAtLSAgY29tcGxpY2F0ZWQgdG8gd3JpdGUgcG9ydGFibGUgcm91dGluZSB0aGF0IHJlYWRzIHRoZSBhcmd1bWVudHMsCisgICAgICAtLSAgYmVjYXVzZSBvbmUgaGFzIHRvIGtub3cgdGhlIGdyb3d0aCBkaXJlY3Rpb24gb2YgdGhlIHN0YWNrIGFuZAorICAgICAgLS0gIHRoZSBzaXplcyBvZiB0aGUgaW5kaXZpZHVhbCBhcmd1bWVudHMuCisgICAgICAtLSAgRm9ydHVuYXRlbHkgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZmlyc3QgYXJndW1lbnQgKCMwKSwKKyAgICAgIC0tICB3ZSBrbm93IGl0cyBzaXplIGFuZCBmb3IgdGhlIGZpcnN0IGFyZyB3ZSBkb24ndCBjYXJlIGFib3V0CisgICAgICAtLSAgaW50byB3aGljaCBzdGFjayBkaXJlY3Rpb24gd2UgaGF2ZSB0byBwcm9jZWVkLiBXZSBzaW1wbHkKKyAgICAgIC0tICByZXNvbHZlIHRoZSBkb3VibGUgaW5kaXJlY3Rpb24gYW5kIHRoYXRzIGl0LgorICAgICAgdHlwZSBWIGlzIGFjY2VzcyBhbGwgU3lzdGVtLkFkZHJlc3M7CisgICAgICBmdW5jdGlvbiBUb19BY2Nlc3MgaXMgbmV3IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoU3lzdGVtLkFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIFRvX0FjY2VzcyAoVG9fQWNjZXNzIChBcmdzKS5hbGwpLmFsbDsKKyAgIGVuZCBNYWtlX0FyZzsKKworICAgZnVuY3Rpb24gQ29weV9BcmcgKFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gU3lzdGVtLkFkZHJlc3MKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIFVzcjsKKyAgIGVuZCBDb3B5X0FyZzsKKworICAgcHJvY2VkdXJlIEZyZWVfQXJnIChVc3IgOiBpbiBTeXN0ZW0uQWRkcmVzcykKKyAgIGlzCisgICAgICBwcm9jZWR1cmUgRnJlZV9UeXBlIGlzIG5ldyBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgorICAgICAgICAoRmllbGRfVHlwZSdDbGFzcywgRmllbGRfVHlwZV9BY2Nlc3MpOworICAgICAgcHJvY2VkdXJlIEZyZWVhcmdzIGlzIG5ldyBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgorICAgICAgICAoQXJndW1lbnQsIEFyZ3VtZW50X0FjY2Vzcyk7CisKKyAgICAgIFRvX0JlX0ZyZWUgOiBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgICAgTG93X0xldmVsICA6IENfRmllbGRfVHlwZTsKKyAgIGJlZ2luCisgICAgICBpZiBUb19CZV9GcmVlIC89IG51bGwgdGhlbgorICAgICAgICAgaWYgVG9fQmVfRnJlZS5Vc3IgLz0gU3lzdGVtLk51bGxfQWRkcmVzcyB0aGVuCisgICAgICAgICAgICBMb3dfTGV2ZWwgOj0gVG9fQmVfRnJlZS5DZnQ7CisgICAgICAgICAgICBpZiBMb3dfTGV2ZWwuRnJlZWFyZyAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgIExvd19MZXZlbC5GcmVlYXJnIChUb19CZV9GcmVlLlVzcik7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBpZiBUb19CZV9GcmVlLlR5cCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgIEZyZWVfVHlwZSAoVG9fQmVfRnJlZS5UeXApOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgRnJlZWFyZ3MgKFRvX0JlX0ZyZWUpOworICAgICAgZW5kIGlmOworICAgZW5kIEZyZWVfQXJnOworCisgICBwcm9jZWR1cmUgV3JhcF9CdWlsdGluIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cCA6IEZpZWxkX1R5cGUnQ2xhc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgOiBDX0ZpZWxkX1R5cGUgOj0gQ19CdWlsdGluX1JvdXRlcikKKyAgIGlzCisgICAgICBVc3JfQXJnICAgOiBjb25zdGFudCBTeXN0ZW0uQWRkcmVzcyA6PSBHZXRfQXJnIChGbGQpOworICAgICAgTG93X0xldmVsIDogY29uc3RhbnQgQ19GaWVsZF9UeXBlIDo9IEdldF9GaWVsZHR5cGUgKEZsZCk7CisgICAgICBBcmcgOiBBcmd1bWVudF9BY2Nlc3M7CisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICAgICBmdW5jdGlvbiBTZXRfRmxkX1R5cGUgKEYgICAgOiBGaWVsZCA6PSBGbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmICAgOiBDX0ZpZWxkX1R5cGUgOj0gQ2Z0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIDogQXJndW1lbnRfQWNjZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICBiZWdpbgorICAgICAgcHJhZ21hIEFzc2VydCAoTG93X0xldmVsIC89IE51bGxfRmllbGRfVHlwZSk7CisgICAgICBpZiBDZnQgLz0gQ19CdWlsdGluX1JvdXRlciBhbmQgdGhlbiBDZnQgLz0gQ19DaG9pY2VfUm91dGVyIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgQXJnIDo9IG5ldyBBcmd1bWVudCcoVXNyID0+IFN5c3RlbS5OdWxsX0FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXAgPT4gbmV3IEZpZWxkX1R5cGUnQ2xhc3MnKFR5cCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZnQgPT4gR2V0X0ZpZWxkdHlwZSAoRmxkKSk7CisgICAgICAgICBpZiBVc3JfQXJnIC89IFN5c3RlbS5OdWxsX0FkZHJlc3MgdGhlbgorICAgICAgICAgICAgaWYgTG93X0xldmVsLkNvcHlhcmcgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICBBcmcuVXNyIDo9IExvd19MZXZlbC5Db3B5YXJnIChVc3JfQXJnKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIEFyZy5Vc3IgOj0gVXNyX0FyZzsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgUmVzIDo9IFNldF9GbGRfVHlwZSAoQXJnMSA9PiBBcmcpOworICAgICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBXcmFwX0J1aWx0aW47CisKKyAgIGZ1bmN0aW9uIEZpZWxkX0NoZWNrX1JvdXRlciAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzciA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQKKyAgIGlzCisgICAgICBBcmcgIDogY29uc3RhbnQgQXJndW1lbnRfQWNjZXNzIDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoVXNyKTsKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChBcmcgLz0gbnVsbCBhbmQgdGhlbiBBcmcuQ2Z0IC89IE51bGxfRmllbGRfVHlwZQorICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gQXJnLlR5cCAvPSBudWxsKTsKKyAgICAgIGlmIEFyZy5DZnQuRmNoZWNrIC89IG51bGwgdGhlbgorICAgICAgICAgcmV0dXJuIEFyZy5DZnQuRmNoZWNrIChGbGQsIEFyZy5Vc3IpOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbmQgaWY7CisgICBlbmQgRmllbGRfQ2hlY2tfUm91dGVyOworCisgICBmdW5jdGlvbiBDaGFyX0NoZWNrX1JvdXRlciAoQ2ggIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludAorICAgaXMKKyAgICAgIEFyZyAgOiBjb25zdGFudCBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgYmVnaW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEFyZyAvPSBudWxsIGFuZCB0aGVuIEFyZy5DZnQgLz0gTnVsbF9GaWVsZF9UeXBlCisgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBBcmcuVHlwIC89IG51bGwpOworICAgICAgaWYgQXJnLkNmdC5DY2hlY2sgLz0gbnVsbCB0aGVuCisgICAgICAgICByZXR1cm4gQXJnLkNmdC5DY2hlY2sgKENoLCBBcmcuVXNyKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAxOworICAgICAgZW5kIGlmOworICAgZW5kIENoYXJfQ2hlY2tfUm91dGVyOworCisgICBmdW5jdGlvbiBOZXh0X1JvdXRlciAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludAorICAgaXMKKyAgICAgIEFyZyAgOiBjb25zdGFudCBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgYmVnaW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEFyZyAvPSBudWxsIGFuZCB0aGVuIEFyZy5DZnQgLz0gTnVsbF9GaWVsZF9UeXBlCisgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBBcmcuVHlwIC89IG51bGwpOworICAgICAgaWYgQXJnLkNmdC5OZXh0IC89IG51bGwgdGhlbgorICAgICAgICAgcmV0dXJuIEFyZy5DZnQuTmV4dCAoRmxkLCBBcmcuVXNyKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAxOworICAgICAgZW5kIGlmOworICAgZW5kIE5leHRfUm91dGVyOworCisgICBmdW5jdGlvbiBQcmV2X1JvdXRlciAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogU3lzdGVtLkFkZHJlc3MpIHJldHVybiBDX0ludAorICAgaXMKKyAgICAgIEFyZyAgOiBjb25zdGFudCBBcmd1bWVudF9BY2Nlc3MgOj0gVG9fQXJndW1lbnRfQWNjZXNzIChVc3IpOworICAgYmVnaW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEFyZyAvPSBudWxsIGFuZCB0aGVuIEFyZy5DZnQgLz0gTnVsbF9GaWVsZF9UeXBlCisgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBBcmcuVHlwIC89IG51bGwpOworICAgICAgaWYgQXJnLkNmdC5QcmV2IC89IG51bGwgdGhlbgorICAgICAgICAgcmV0dXJuIEFyZy5DZnQuUHJldiAoRmxkLCBBcmcuVXNyKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiAxOworICAgICAgZW5kIGlmOworICAgZW5kIFByZXZfUm91dGVyOworCisgICAtLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tCisgICBmdW5jdGlvbiBDX0J1aWx0aW5fUm91dGVyIHJldHVybiBDX0ZpZWxkX1R5cGUKKyAgIGlzCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICAgICBUICAgOiBDX0ZpZWxkX1R5cGU7CisgICBiZWdpbgorICAgICAgaWYgTV9CdWlsdGluX1JvdXRlciA9IE51bGxfRmllbGRfVHlwZSB0aGVuCisgICAgICAgICBUIDo9IE5ld19GaWVsZHR5cGUgKEZpZWxkX0NoZWNrX1JvdXRlcidBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJfQ2hlY2tfUm91dGVyJ0FjY2Vzcyk7CisgICAgICAgICBpZiBUID0gTnVsbF9GaWVsZF9UeXBlIHRoZW4KKyAgICAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgICAgZWxzZQorICAgICAgICAgICAgUmVzIDo9IFNldF9GaWVsZHR5cGVfQXJnIChULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlX0FyZydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlfQXJnJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZV9BcmcnQWNjZXNzKTsKKyAgICAgICAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBNX0J1aWx0aW5fUm91dGVyIDo9IFQ7CisgICAgICBlbmQgaWY7CisgICAgICBwcmFnbWEgQXNzZXJ0IChNX0J1aWx0aW5fUm91dGVyIC89IE51bGxfRmllbGRfVHlwZSk7CisgICAgICByZXR1cm4gTV9CdWlsdGluX1JvdXRlcjsKKyAgIGVuZCBDX0J1aWx0aW5fUm91dGVyOworCisgICAtLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tCisgICBmdW5jdGlvbiBDX0Nob2ljZV9Sb3V0ZXIgcmV0dXJuIENfRmllbGRfVHlwZQorICAgaXMKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgICAgIFQgICA6IENfRmllbGRfVHlwZTsKKyAgIGJlZ2luCisgICAgICBpZiBNX0Nob2ljZV9Sb3V0ZXIgPSBOdWxsX0ZpZWxkX1R5cGUgdGhlbgorICAgICAgICAgVCA6PSBOZXdfRmllbGR0eXBlIChGaWVsZF9DaGVja19Sb3V0ZXInQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyX0NoZWNrX1JvdXRlcidBY2Nlc3MpOworICAgICAgICAgaWYgVCA9IE51bGxfRmllbGRfVHlwZSB0aGVuCisgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJlcyA6PSBTZXRfRmllbGR0eXBlX0FyZyAoVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZV9BcmcnQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5X0FyZydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVfQXJnJ0FjY2Vzcyk7CisgICAgICAgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgICAgZW5kIGlmOworCisgICAgICAgICAgICBSZXMgOj0gU2V0X0ZpZWxkdHlwZV9DaG9pY2UgKFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHRfUm91dGVyJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJldl9Sb3V0ZXInQWNjZXNzKTsKKyAgICAgICAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgaWY7CisgICAgICAgICBNX0Nob2ljZV9Sb3V0ZXIgOj0gVDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHByYWdtYSBBc3NlcnQgKE1fQ2hvaWNlX1JvdXRlciAvPSBOdWxsX0ZpZWxkX1R5cGUpOworICAgICAgcmV0dXJuIE1fQ2hvaWNlX1JvdXRlcjsKKyAgIGVuZCBDX0Nob2ljZV9Sb3V0ZXI7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3ZWJlNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIKQEAgLTAsMCArMSw4NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEyICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworLS0gIHwKKy0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX3VzZXJwdHIuM3gKKy0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSAgfAorcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhIGlzCisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICB1c2UgdHlwZSBJbnRlcmZhY2VzLkMuaW50OworCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoRmxkICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBpbiBVc2VyX0FjY2VzcykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRmllbGRfVXNlcnB0ciAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNyIDogVXNlcl9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZF9Vc2VycHRyLCAic2V0X2ZpZWxkX3VzZXJwdHIiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9GaWVsZF9Vc2VycHRyIChGbGQsIERhdGEpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1VzZXJfRGF0YTsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKEZsZCAgOiBpbiAgRmllbGQpIHJldHVybiBVc2VyX0FjY2VzcworICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX1VzZXJwdHIgKEZsZCA6IEZpZWxkKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGaWVsZF9Vc2VycHRyLCAiZmllbGRfdXNlcnB0ciIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWVsZF9Vc2VycHRyIChGbGQpOworICAgZW5kIEdldF9Vc2VyX0RhdGE7CisKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChGbGQgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpCisgICBpcworICAgYmVnaW4KKyAgICAgIERhdGEgOj0gR2V0X1VzZXJfRGF0YSAoRmxkKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9Vc2VyX0RhdGE7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjNjcwOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYgpAQCAtMCwwICsxLDg2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRm9ybV9Vc2VyX0RhdGEgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgfAorLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tICB8IG1hbiBwYWdlIGZvcm1fX3VzZXJwdHIuM3gKKy0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSAgfAord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YSBpcworCisgICB1c2UgdHlwZSBJbnRlcmZhY2VzLkMuaW50OworCisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9Gb3JtX1VzZXJwdHIgKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IFVzZXJfQWNjZXNzKSAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fVXNlcnB0ciwgInNldF9mb3JtX3VzZXJwdHIiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gb3JtX1VzZXJwdHIgKEZybSwgRGF0YSk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1VzZXJfRGF0YTsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKEZybSAgOiBpbiAgRm9ybSkgcmV0dXJuIFVzZXJfQWNjZXNzCisgICBpcworICAgICAgZnVuY3Rpb24gRm9ybV9Vc2VycHRyIChGcm0gOiBGb3JtKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGb3JtX1VzZXJwdHIsICJmb3JtX3VzZXJwdHIiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRm9ybV9Vc2VycHRyIChGcm0pOworICAgZW5kIEdldF9Vc2VyX0RhdGE7CisKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChGcm0gIDogaW4gIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IG91dCBVc2VyX0FjY2VzcykKKyAgIGlzCisgICBiZWdpbgorICAgICAgRGF0YSA6PSBHZXRfVXNlcl9EYXRhIChGcm0pOworICAgZW5kIEdldF9Vc2VyX0RhdGE7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZvcm1fVXNlcl9EYXRhOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDFlMTYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGIKQEAgLTAsMCArMSwxMTYxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMjYgJAorLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjUwOjQ0ICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKK3dpdGggQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOworCit3aXRoIEludGVyZmFjZXMuQzsgdXNlIEludGVyZmFjZXMuQzsKK3dpdGggSW50ZXJmYWNlcy5DLlN0cmluZ3M7IHVzZSBJbnRlcmZhY2VzLkMuU3RyaW5nczsKK3dpdGggSW50ZXJmYWNlcy5DLlBvaW50ZXJzOworCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtcyBpcworCisgICB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKKyAgIHR5cGUgQ19GaWVsZF9BcnJheSBpcyBhcnJheSAoTmF0dXJhbCByYW5nZSA8Pikgb2YgYWxpYXNlZCBGaWVsZDsKKyAgIHBhY2thZ2UgRl9BcnJheSBpcyBuZXcKKyAgICAgSW50ZXJmYWNlcy5DLlBvaW50ZXJzIChOYXR1cmFsLCBGaWVsZCwgQ19GaWVsZF9BcnJheSwgTnVsbF9GaWVsZCk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHN1YnR5cGUgY2hhcnNfcHRyIGlzIEludGVyZmFjZXMuQy5TdHJpbmdzLmNoYXJzX3B0cjsKKworICAgZnVuY3Rpb24gRk9TXzJfQ0ludCBpcyBuZXcKKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChGaWVsZF9PcHRpb25fU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50KTsKKworICAgZnVuY3Rpb24gQ0ludF8yX0ZPUyBpcyBuZXcKKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChDX0ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZF9PcHRpb25fU2V0KTsKKworICAgZnVuY3Rpb24gRnJtT1NfMl9DSW50IGlzIG5ldworICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKEZvcm1fT3B0aW9uX1NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCk7CisKKyAgIGZ1bmN0aW9uIENJbnRfMl9Gcm1PUyBpcyBuZXcKKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChDX0ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtX09wdGlvbl9TZXQpOworCisgICBwcm9jZWR1cmUgUmVxdWVzdF9OYW1lIChLZXkgIDogaW4gRm9ybV9SZXF1ZXN0X0NvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZvcm1fUmVxdWVzdF9OYW1lIChLZXkgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fUmVxdWVzdF9OYW1lLCAiZm9ybV9yZXF1ZXN0X25hbWUiKTsKKyAgIGJlZ2luCisgICAgICBGaWxsX1N0cmluZyAoRm9ybV9SZXF1ZXN0X05hbWUgKENfSW50IChLZXkpKSwgTmFtZSk7CisgICBlbmQgUmVxdWVzdF9OYW1lOworCisgICBmdW5jdGlvbiBSZXF1ZXN0X05hbWUgKEtleSA6IEZvcm1fUmVxdWVzdF9Db2RlKSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gRm9ybV9SZXF1ZXN0X05hbWUgKEtleSA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRm9ybV9SZXF1ZXN0X05hbWUsICJmb3JtX3JlcXVlc3RfbmFtZSIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoRm9ybV9SZXF1ZXN0X05hbWUgKENfSW50IChLZXkpKSk7CisgICBlbmQgUmVxdWVzdF9OYW1lOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfbmV3LjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gQ3JlYXRlIChIZWlnaHQgICAgICAgOiBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICBXaWR0aCAgICAgICAgOiBDb2x1bW5fQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIFRvcCAgICAgICAgICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIExlZnQgICAgICAgICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgT2ZmX1NjcmVlbiAgIDogTmF0dXJhbCA6PSAwOworICAgICAgICAgICAgICAgICAgICBNb3JlX0J1ZmZlcnMgOiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWVsZAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE5ld2ZpZWxkIChILCBXLCBULCBMLCBPLCBNIDogQ19JbnQpIHJldHVybiBGaWVsZDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5ld2ZpZWxkLCAibmV3X2ZpZWxkIik7CisgICAgICBGbGQgOiBjb25zdGFudCBGaWVsZCA6PSBOZXdmaWVsZCAoQ19JbnQgKEhlaWdodCksIENfSW50IChXaWR0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKFRvcCksIENfSW50IChMZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoT2ZmX1NjcmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKE1vcmVfQnVmZmVycykpOworICAgYmVnaW4KKyAgICAgIGlmIEZsZCA9IE51bGxfRmllbGQgdGhlbgorICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gRmxkOworICAgZW5kIENyZWF0ZTsKKy0tICB8CistLSAgfAorLS0gIHwKKyAgIHByb2NlZHVyZSBEZWxldGUgKEZsZCA6IGluIG91dCBGaWVsZCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGcmVlX0ZpZWxkIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRnJlZV9GaWVsZCwgImZyZWVfZmllbGQiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIFJlcyA6PSBGcmVlX0ZpZWxkIChGbGQpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEZsZCA6PSBOdWxsX0ZpZWxkOworICAgZW5kIERlbGV0ZTsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIER1cGxpY2F0ZSAoRmxkICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICBUb3AgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgTGVmdCA6IENvbHVtbl9Qb3NpdGlvbikgcmV0dXJuIEZpZWxkCisgICBpcworICAgICAgZnVuY3Rpb24gRHVwX0ZpZWxkIChGbGQgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFRvcCAgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGVmdCA6IENfSW50KSByZXR1cm4gRmllbGQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEdXBfRmllbGQsICJkdXBfZmllbGQiKTsKKworICAgICAgRiA6IGNvbnN0YW50IEZpZWxkIDo9IER1cF9GaWVsZCAoRmxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKFRvcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoTGVmdCkpOworICAgYmVnaW4KKyAgICAgIGlmIEYgPSBOdWxsX0ZpZWxkIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEY7CisgICBlbmQgRHVwbGljYXRlOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gTGluayAoRmxkICA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgVG9wICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICBMZWZ0IDogQ29sdW1uX1Bvc2l0aW9uKSByZXR1cm4gRmllbGQKKyAgIGlzCisgICAgICBmdW5jdGlvbiBMbmtfRmllbGQgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVG9wICA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICBMZWZ0IDogQ19JbnQpIHJldHVybiBGaWVsZDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIExua19GaWVsZCwgImxpbmtfZmllbGQiKTsKKworICAgICAgRiA6IGNvbnN0YW50IEZpZWxkIDo9IExua19GaWVsZCAoRmxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKFRvcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoTGVmdCkpOworICAgYmVnaW4KKyAgICAgIGlmIEYgPSBOdWxsX0ZpZWxkIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEY7CisgICBlbmQgTGluazsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9qdXN0LjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9KdXN0aWZpY2F0aW9uIChGbGQgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEp1c3QgOiBpbiBGaWVsZF9KdXN0aWZpY2F0aW9uIDo9IE5vbmUpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0ZpZWxkX0p1c3QgKEZsZCAgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdXN0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZF9KdXN0LCAic2V0X2ZpZWxkX2p1c3QiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9CisgICAgICAgIFNldF9GaWVsZF9KdXN0IChGbGQsCisgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRmllbGRfSnVzdGlmaWNhdGlvbidQb3MgKEp1c3QpKSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfSnVzdGlmaWNhdGlvbjsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9KdXN0aWZpY2F0aW9uIChGbGQgOiBGaWVsZCkgcmV0dXJuIEZpZWxkX0p1c3RpZmljYXRpb24KKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9KdXN0IChGbGQgOiBGaWVsZCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfSnVzdCwgImZpZWxkX2p1c3QiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmllbGRfSnVzdGlmaWNhdGlvbidWYWwgKEZpZWxkX0p1c3QgKEZsZCkpOworICAgZW5kIEdldF9KdXN0aWZpY2F0aW9uOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX2J1ZmZlci4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfQnVmZmVyCisgICAgIChGbGQgICAgOiBpbiBGaWVsZDsKKyAgICAgIEJ1ZmZlciA6IGluIEJ1ZmZlcl9OdW1iZXIgOj0gQnVmZmVyX051bWJlcidGaXJzdDsKKyAgICAgIFN0ciAgICA6IGluIFN0cmluZykKKyAgIGlzCisgICAgICB0eXBlIENoYXJfUHRyIGlzIGFjY2VzcyBhbGwgSW50ZXJmYWNlcy5DLmNoYXI7CisgICAgICBmdW5jdGlvbiBTZXRfRmxkX0J1ZmZlciAoRmxkICAgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZudW0gOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgICAgICA6IENoYXJfUHRyKQorICAgICAgICByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX0J1ZmZlciwgInNldF9maWVsZF9idWZmZXIiKTsKKworICAgICAgVHh0IDogY2hhcl9hcnJheSAoMCAuLiBTdHInTGVuZ3RoKTsKKyAgICAgIExlbiA6IHNpemVfdDsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBUb19DIChTdHIsIFR4dCwgTGVuKTsKKyAgICAgIFJlcyA6PSBTZXRfRmxkX0J1ZmZlciAoRmxkLCBDX0ludCAoQnVmZmVyKSwgVHh0IChUeHQnRmlyc3QpJ0FjY2Vzcyk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9CdWZmZXI7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgR2V0X0J1ZmZlcgorICAgICAoRmxkICAgIDogaW4gRmllbGQ7CisgICAgICBCdWZmZXIgOiBpbiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3Q7CisgICAgICBTdHIgICAgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX0J1ZmZlciAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgICA6IENfSW50KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfQnVmZmVyLCAiZmllbGRfYnVmZmVyIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKEZpZWxkX0J1ZmZlciAoRmxkLCBDX0ludCAoQnVmZmVyKSksIFN0cik7CisgICBlbmQgR2V0X0J1ZmZlcjsKKworICAgZnVuY3Rpb24gR2V0X0J1ZmZlcgorICAgICAoRmxkICAgIDogaW4gRmllbGQ7CisgICAgICBCdWZmZXIgOiBpbiBCdWZmZXJfTnVtYmVyIDo9IEJ1ZmZlcl9OdW1iZXInRmlyc3QpIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9CdWZmZXIgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCICAgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX0J1ZmZlciwgImZpZWxkX2J1ZmZlciIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoRmllbGRfQnVmZmVyIChGbGQsIENfSW50IChCdWZmZXIpKSk7CisgICBlbmQgR2V0X0J1ZmZlcjsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfU3RhdHVzIChGbGQgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0ZsZF9TdGF0dXMgKEZsZCA6IEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ICA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmxkX1N0YXR1cywgInNldF9maWVsZF9zdGF0dXMiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9GbGRfU3RhdHVzIChGbGQsIEJvb2xlYW4nUG9zIChTdGF0dXMpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfU3RhdHVzOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gQ2hhbmdlZCAoRmxkIDogRmllbGQpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfU3RhdHVzIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfU3RhdHVzLCAiZmllbGRfc3RhdHVzIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IEZpZWxkX1N0YXR1cyAoRmxkKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBDdXJzZXNfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgQ2hhbmdlZDsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfTWF4aW11bV9TaXplIChGbGQgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXggOiBpbiBOYXR1cmFsIDo9IDApCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0ZpZWxkX01heCAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNICAgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX01heCwgInNldF9tYXhfZmllbGQiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9GaWVsZF9NYXggKEZsZCwgQ19JbnQgKE1heCkpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X01heGltdW1fU2l6ZTsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9vcHRzLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9PcHRpb25zIChGbGQgICAgIDogaW4gRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBGaWVsZF9PcHRpb25fU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9PcHRzIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX09wdHMsICJzZXRfZmllbGRfb3B0cyIpOworCisgICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBGT1NfMl9DSW50IChPcHRpb25zKTsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0ZpZWxkX09wdHMgKEZsZCwgT3B0KTsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X09wdGlvbnM7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKEZsZCAgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEZpZWxkX09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfT3B0c19PbiAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfT3B0c19PbiwgImZpZWxkX29wdHNfb24iKTsKKyAgICAgIGZ1bmN0aW9uIEZpZWxkX09wdHNfT2ZmIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfT3B0c19PZmYsICJmaWVsZF9vcHRzX29mZiIpOworCisgICAgICBFcnIgOiBFdGlfRXJyb3I7CisgICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBGT1NfMl9DSW50IChPcHRpb25zKTsKKyAgIGJlZ2luCisgICAgICBpZiBPbiB0aGVuCisgICAgICAgICBFcnIgOj0gRmllbGRfT3B0c19PbiAoRmxkLCBPcHQpOworICAgICAgZWxzZQorICAgICAgICAgRXJyIDo9IEZpZWxkX09wdHNfT2ZmIChGbGQsIE9wdCk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBFcnIgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChFcnIpOworICAgICAgZW5kIGlmOworICAgZW5kIFN3aXRjaF9PcHRpb25zOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChGbGQgICAgIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogb3V0IEZpZWxkX09wdGlvbl9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfT3B0cyAoRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZpZWxkX09wdHMsICJmaWVsZF9vcHRzIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IEZpZWxkX09wdHMgKEZsZCk7CisgICBiZWdpbgorICAgICAgT3B0aW9ucyA6PSBDSW50XzJfRk9TIChSZXMpOworICAgZW5kIEdldF9PcHRpb25zOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gR2V0X09wdGlvbnMgKEZsZCA6IEZpZWxkIDo9IE51bGxfRmllbGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpZWxkX09wdGlvbl9TZXQKKyAgIGlzCisgICAgICBGb3MgOiBGaWVsZF9PcHRpb25fU2V0OworICAgYmVnaW4KKyAgICAgIEdldF9PcHRpb25zIChGbGQsIEZvcyk7CisgICAgICByZXR1cm4gRm9zOworICAgZW5kIEdldF9PcHRpb25zOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X0ZvcmVncm91bmQKKyAgICAgKEZsZCAgIDogaW4gRmllbGQ7CisgICAgICBGb3JlICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9Gb3JlIChGbGQgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfRm9yZSwgInNldF9maWVsZF9mb3JlIik7CisKKyAgICAgIENoIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gRm9yZSk7CisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0KKyAgICAgICAgU2V0X0ZpZWxkX0ZvcmUgKEZsZCwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Gb3JlZ3JvdW5kOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIEZvcmVncm91bmQgKEZsZCAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9Gb3JlIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfRm9yZSwgImZpZWxkX2ZvcmUiKTsKKyAgIGJlZ2luCisgICAgICBGb3JlIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoRmllbGRfRm9yZSAoRmxkKSkuQXR0cjsKKyAgIGVuZCBGb3JlZ3JvdW5kOworCisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoRmxkICAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZSAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9Gb3JlIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfRm9yZSwgImZpZWxkX2ZvcmUiKTsKKyAgIGJlZ2luCisgICAgICBGb3JlICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0ZvcmUgKEZsZCkpLkF0dHI7CisgICAgICBDb2xvciA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0ZvcmUgKEZsZCkpLkNvbG9yOworICAgZW5kIEZvcmVncm91bmQ7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKKyAgICAgKEZsZCAgIDogaW4gRmllbGQ7CisgICAgICBCYWNrICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9CYWNrIChGbGQgIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfQmFjaywgInNldF9maWVsZF9iYWNrIik7CisKKyAgICAgIENoIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gQmFjayk7CisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0KKyAgICAgICAgU2V0X0ZpZWxkX0JhY2sgKEZsZCwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9CYWNrZ3JvdW5kOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKEZsZCAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9CYWNrIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfQmFjaywgImZpZWxkX2JhY2siKTsKKyAgIGJlZ2luCisgICAgICBCYWNrIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoRmllbGRfQmFjayAoRmxkKSkuQXR0cjsKKyAgIGVuZCBCYWNrZ3JvdW5kOworCisgICBwcm9jZWR1cmUgQmFja2dyb3VuZCAoRmxkICAgOiBpbiAgRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGaWVsZF9CYWNrIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfQmFjaywgImZpZWxkX2JhY2siKTsKKyAgIGJlZ2luCisgICAgICBCYWNrICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0JhY2sgKEZsZCkpLkF0dHI7CisgICAgICBDb2xvciA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKEZpZWxkX0JhY2sgKEZsZCkpLkNvbG9yOworICAgZW5kIEJhY2tncm91bmQ7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X1BhZF9DaGFyYWN0ZXIgKEZsZCA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBpbiBDaGFyYWN0ZXIgOj0gU3BhY2UpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0ZpZWxkX1BhZCAoRmxkIDogRmllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaCAgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZpZWxkX1BhZCwgInNldF9maWVsZF9wYWQiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9GaWVsZF9QYWQgKEZsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoQ2hhcmFjdGVyJ1BvcyAoUGFkKSkpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1BhZF9DaGFyYWN0ZXI7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgUGFkX0NoYXJhY3RlciAoRmxkIDogaW4gIEZpZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZCA6IG91dCBDaGFyYWN0ZXIpCisgICBpcworICAgICAgZnVuY3Rpb24gRmllbGRfUGFkIChGbGQgOiBGaWVsZCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRmllbGRfUGFkLCAiZmllbGRfcGFkIik7CisgICBiZWdpbgorICAgICAgUGFkIDo9IENoYXJhY3RlcidWYWwgKEZpZWxkX1BhZCAoRmxkKSk7CisgICBlbmQgUGFkX0NoYXJhY3RlcjsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZF9pbmZvLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIEluZm8gKEZsZCAgICAgICAgICAgICAgICA6IGluICBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICBMaW5lcyAgICAgICAgICAgICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICBDb2x1bW5zICAgICAgICAgICAgOiBvdXQgQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgIEZpcnN0X1JvdyAgICAgICAgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIEZpcnN0X0NvbHVtbiAgICAgICA6IG91dCBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgT2ZmX1NjcmVlbiAgICAgICAgIDogb3V0IE5hdHVyYWw7CisgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbF9CdWZmZXJzIDogb3V0IEJ1ZmZlcl9OdW1iZXIpCisgICBpcworICAgICAgdHlwZSBDX0ludF9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIEZsZF9JbmZvIChGbGQgOiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMLCBDLCBGciwgRmMsIE9zLCBBYiA6IENfSW50X0FjY2VzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGbGRfSW5mbywgImZpZWxkX2luZm8iKTsKKworICAgICAgTCwgQywgRnIsIEZjLCBPcywgQWIgOiBhbGlhc2VkIENfSW50OworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IEZsZF9JbmZvIChGbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwnQWNjZXNzLCBDJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnInQWNjZXNzLCBGYydBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9zJ0FjY2VzcywgQWInQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZWxzZQorICAgICAgICAgTGluZXMgICAgICAgICAgICAgIDo9IExpbmVfQ291bnQgKEwpOworICAgICAgICAgQ29sdW1ucyAgICAgICAgICAgIDo9IENvbHVtbl9Db3VudCAoQyk7CisgICAgICAgICBGaXJzdF9Sb3cgICAgICAgICAgOj0gTGluZV9Qb3NpdGlvbiAoRnIpOworICAgICAgICAgRmlyc3RfQ29sdW1uICAgICAgIDo9IENvbHVtbl9Qb3NpdGlvbiAoRmMpOworICAgICAgICAgT2ZmX1NjcmVlbiAgICAgICAgIDo9IE5hdHVyYWwgKE9zKTsKKyAgICAgICAgIEFkZGl0aW9uYWxfQnVmZmVycyA6PSBCdWZmZXJfTnVtYmVyIChBYik7CisgICAgICBlbmQgaWY7CisgICBlbmQgSW5mbzsKKy0tICB8CistLSAgfAorLS0gIHwKKyAgIHByb2NlZHVyZSBEeW5hbWljX0luZm8gKEZsZCAgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4ICAgICA6IG91dCBOYXR1cmFsKQorICAgaXMKKyAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CisgICAgICBmdW5jdGlvbiBEeW5fSW5mbyAoRmxkIDogRmllbGQ7IEwsIEMsIE0gOiBDX0ludF9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIER5bl9JbmZvLCAiZHluYW1pY19maWVsZF9pbmZvIik7CisKKyAgICAgIEwsIEMsIE0gOiBhbGlhc2VkIENfSW50OworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IER5bl9JbmZvIChGbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwnQWNjZXNzLCBDJ0FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTSdBY2Nlc3MpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbHNlCisgICAgICAgICBMaW5lcyAgIDo9IExpbmVfQ291bnQgKEwpOworICAgICAgICAgQ29sdW1ucyA6PSBDb2x1bW5fQ291bnQgKEMpOworICAgICAgICAgTWF4ICAgICA6PSBOYXR1cmFsIChNKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBEeW5hbWljX0luZm87CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fd2luLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKEZybSA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9Gb3JtX1dpbiAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRm9ybV9XaW4sICJzZXRfZm9ybV93aW4iKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gb3JtX1dpbiAoRnJtLCBXaW4pOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9XaW5kb3c7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfV2luZG93IChGcm0gOiBGb3JtKSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gRm9ybV9XaW4gKEZybSA6IEZvcm0pIHJldHVybiBXaW5kb3c7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGb3JtX1dpbiwgImZvcm1fd2luIik7CisKKyAgICAgIFcgOiBjb25zdGFudCBXaW5kb3cgOj0gRm9ybV9XaW4gKEZybSk7CisgICBiZWdpbgorICAgICAgcmV0dXJuIFc7CisgICBlbmQgR2V0X1dpbmRvdzsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfU3ViX1dpbmRvdyAoRnJtIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9Gb3JtX1N1YiAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRm9ybV9TdWIsICJzZXRfZm9ybV9zdWIiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Gb3JtX1N1YiAoRnJtLCBXaW4pOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9TdWJfV2luZG93OworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gR2V0X1N1Yl9XaW5kb3cgKEZybSA6IEZvcm0pIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGb3JtX1N1YiAoRnJtIDogRm9ybSkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fU3ViLCAiZm9ybV9zdWIiKTsKKworICAgICAgVyA6IGNvbnN0YW50IFdpbmRvdyA6PSBGb3JtX1N1YiAoRnJtKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBHZXRfU3ViX1dpbmRvdzsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTY2FsZSAoRnJtICAgICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IG91dCBDb2x1bW5fQ291bnQpCisgICBpcworICAgICAgdHlwZSBDX0ludF9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBDX0ludDsKKyAgICAgIGZ1bmN0aW9uIE1fU2NhbGUgKEZybSA6IEZvcm07IFlwLCBYcCA6IENfSW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTV9TY2FsZSwgInNjYWxlX2Zvcm0iKTsKKworICAgICAgWCwgWSA6IGFsaWFzZWQgQ19JbnQ7CisgICAgICBSZXMgIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IE1fU2NhbGUgKEZybSwgWSdBY2Nlc3MsIFgnQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgTGluZXMgOj0gTGluZV9Db3VudCAoWSk7CisgICAgICBDb2x1bW5zIDo9IENvbHVtbl9Db3VudCAoWCk7CisgICBlbmQgU2NhbGU7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIG1lbnVfaG9vay4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfRmllbGRfSW5pdF9Ib29rIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogaW4gRm9ybV9Ib29rX0Z1bmN0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9GaWVsZF9Jbml0IChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogRm9ybV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRmllbGRfSW5pdCwgInNldF9maWVsZF9pbml0Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRmllbGRfSW5pdCAoRnJtLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfRmllbGRfSW5pdF9Ib29rOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9GaWVsZF9UZXJtX0hvb2sgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBGb3JtX0hvb2tfRnVuY3Rpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0ZpZWxkX1Rlcm0gKEZybSAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9GaWVsZF9UZXJtLCAic2V0X2ZpZWxkX3Rlcm0iKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9GaWVsZF9UZXJtIChGcm0sIFByb2MpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0ZpZWxkX1Rlcm1fSG9vazsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfRm9ybV9Jbml0X0hvb2sgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIEZvcm1fSG9va19GdW5jdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9Jbml0IChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9Gb3JtX0luaXQsICJzZXRfZm9ybV9pbml0Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRm9ybV9Jbml0IChGcm0sIFByb2MpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Gb3JtX0luaXRfSG9vazsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBTZXRfRm9ybV9UZXJtX0hvb2sgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIEZvcm1fSG9va19GdW5jdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfRm9ybV9UZXJtIChGcm0gIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBGb3JtX0hvb2tfRnVuY3Rpb24pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9Gb3JtX1Rlcm0sICJzZXRfZm9ybV90ZXJtIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfRm9ybV9UZXJtIChGcm0sIFByb2MpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0Zvcm1fVGVybV9Ib29rOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkcy4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBSZWRlZmluZSAoRnJtICA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIEZsZHMgOiBpbiBGaWVsZF9BcnJheV9BY2Nlc3MpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0ZybV9GaWVsZHMgKEZybSAgIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtcyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfRnJtX0ZpZWxkcywgInNldF9mb3JtX2ZpZWxkcyIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgcHJhZ21hIEFzc2VydCAoRmxkcyAoRmxkcydMYXN0KSA9IE51bGxfRmllbGQpOworICAgICAgaWYgRmxkcyAoRmxkcydMYXN0KSAvPSBOdWxsX0ZpZWxkIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgUmVzIDo9IFNldF9Gcm1fRmllbGRzIChGcm0sIEZsZHMgKEZsZHMnRmlyc3QpJ0FkZHJlc3MpOworICAgICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVkZWZpbmU7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBGaWVsZHMgKEZybSAgIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgSW5kZXggOiBQb3NpdGl2ZSkgcmV0dXJuIEZpZWxkCisgICBpcworICAgICAgdXNlIEZfQXJyYXk7CisKKyAgICAgIGZ1bmN0aW9uIENfRmllbGRzIChGcm0gOiBGb3JtKSByZXR1cm4gUG9pbnRlcjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENfRmllbGRzLCAiZm9ybV9maWVsZHMiKTsKKworICAgICAgUCA6IFBvaW50ZXIgOj0gQ19GaWVsZHMgKEZybSk7CisgICBiZWdpbgorICAgICAgaWYgUCA9IG51bGwgb3IgZWxzZSBJbmRleCA+IEZpZWxkX0NvdW50IChGcm0pIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgUCA6PSBQICsgcHRyZGlmZl90IChDX0ludCAoSW5kZXgpIC0gMSk7CisgICAgICAgICByZXR1cm4gUC5hbGw7CisgICAgICBlbmQgaWY7CisgICBlbmQgRmllbGRzOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gRmllbGRfQ291bnQgKEZybSA6IEZvcm0pIHJldHVybiBOYXR1cmFsCisgICBpcworICAgICAgZnVuY3Rpb24gQ291bnQgKEZybSA6IEZvcm0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIENvdW50LCAiZmllbGRfY291bnQiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTmF0dXJhbCAoQ291bnQgKEZybSkpOworICAgZW5kIEZpZWxkX0NvdW50OworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIE1vdmUgKEZsZCAgICA6IGluIEZpZWxkOworICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1vdmUgKEZsZCA6IEZpZWxkOyBMLCBDIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1vdmUsICJtb3ZlX2ZpZWxkIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBNb3ZlIChGbGQsIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgTW92ZTsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9uZXcuM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBmdW5jdGlvbiBDcmVhdGUgKEZpZWxkcyA6IEZpZWxkX0FycmF5X0FjY2VzcykgcmV0dXJuIEZvcm0KKyAgIGlzCisgICAgICBmdW5jdGlvbiBOZXdGb3JtIChGaWVsZHMgOiBTeXN0ZW0uQWRkcmVzcykgcmV0dXJuIEZvcm07CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOZXdGb3JtLCAibmV3X2Zvcm0iKTsKKworICAgICAgTSAgIDogRm9ybTsKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChGaWVsZHMgKEZpZWxkcydMYXN0KSA9IE51bGxfRmllbGQpOworICAgICAgaWYgRmllbGRzIChGaWVsZHMnTGFzdCkgLz0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIE0gOj0gTmV3Rm9ybSAoRmllbGRzIChGaWVsZHMnRmlyc3QpJ0FkZHJlc3MpOworICAgICAgICAgaWYgTSA9IE51bGxfRm9ybSB0aGVuCisgICAgICAgICAgICByYWlzZSBGb3JtX0V4Y2VwdGlvbjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIHJldHVybiBNOworICAgICAgZW5kIGlmOworICAgZW5kIENyZWF0ZTsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIHByb2NlZHVyZSBEZWxldGUgKEZybSA6IGluIG91dCBGb3JtKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZyZWUgKEZybSA6IEZvcm0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZyZWUsICJmcmVlX2Zvcm0iKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IEZyZWUgKEZybSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEZybSA6PSBOdWxsX0Zvcm07CisgICBlbmQgRGVsZXRlOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX29wdHMuM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X09wdGlvbnMgKEZybSAgICAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRm9ybV9PcHRpb25fU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9Gb3JtX09wdHMgKEZybSA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0Zvcm1fT3B0cywgInNldF9mb3JtX29wdHMiKTsKKworICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gRnJtT1NfMl9DSW50IChPcHRpb25zKTsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0Zvcm1fT3B0cyAoRnJtLCBPcHQpOworICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X09wdGlvbnM7CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU3dpdGNoX09wdGlvbnMgKEZybSAgICAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogaW4gRm9ybV9PcHRpb25fU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZvcm1fT3B0c19PbiAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZvcm1fT3B0c19PbiwgImZvcm1fb3B0c19vbiIpOworICAgICAgZnVuY3Rpb24gRm9ybV9PcHRzX09mZiAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGb3JtX09wdHNfT2ZmLCAiZm9ybV9vcHRzX29mZiIpOworCisgICAgICBFcnIgOiBFdGlfRXJyb3I7CisgICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBGcm1PU18yX0NJbnQgKE9wdGlvbnMpOworICAgYmVnaW4KKyAgICAgIGlmIE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSBGb3JtX09wdHNfT24gKEZybSwgT3B0KTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSBGb3JtX09wdHNfT2ZmIChGcm0sIE9wdCk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBFcnIgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChFcnIpOworICAgICAgZW5kIGlmOworICAgZW5kIFN3aXRjaF9PcHRpb25zOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChGcm0gICAgIDogaW4gIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBvdXQgRm9ybV9PcHRpb25fU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEZvcm1fT3B0cyAoRnJtIDogRm9ybSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRm9ybV9PcHRzLCAiZm9ybV9vcHRzIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IEZvcm1fT3B0cyAoRnJtKTsKKyAgIGJlZ2luCisgICAgICBPcHRpb25zIDo9IENJbnRfMl9Gcm1PUyAoUmVzKTsKKyAgIGVuZCBHZXRfT3B0aW9uczsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9PcHRpb25zIChGcm0gOiBGb3JtIDo9IE51bGxfRm9ybSkgcmV0dXJuIEZvcm1fT3B0aW9uX1NldAorICAgaXMKKyAgICAgIEZvcyA6IEZvcm1fT3B0aW9uX1NldDsKKyAgIGJlZ2luCisgICAgICBHZXRfT3B0aW9ucyAoRnJtLCBGb3MpOworICAgICAgcmV0dXJuIEZvczsKKyAgIGVuZCBHZXRfT3B0aW9uczsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9wb3N0LjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFBvc3QgKEZybSAgOiBpbiBGb3JtOworICAgICAgICAgICAgICAgICAgIFBvc3QgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gTV9Qb3N0IChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNX1Bvc3QsICJwb3N0X2Zvcm0iKTsKKyAgICAgIGZ1bmN0aW9uIE1fVW5wb3N0IChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNX1VucG9zdCwgInVucG9zdF9mb3JtIik7CisKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBpZiBQb3N0IHRoZW4KKyAgICAgICAgIFJlcyA6PSBNX1Bvc3QgKEZybSk7CisgICAgICBlbHNlCisgICAgICAgICBSZXMgOj0gTV9VbnBvc3QgKEZybSk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFBvc3Q7CisgICAtLSAgfAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8IG1hbiBwYWdlIGZvcm1fY3Vyc29yLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFBvc2l0aW9uX0N1cnNvciAoRnJtIDogRm9ybSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBQb3NfRm9ybV9DdXJzb3IgKEZybSA6IEZvcm0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFBvc19Gb3JtX0N1cnNvciwgInBvc19mb3JtX2N1cnNvciIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gUG9zX0Zvcm1fQ3Vyc29yIChGcm0pOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFBvc2l0aW9uX0N1cnNvcjsKKyAgIC0tICB8CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgbWFuIHBhZ2UgZm9ybV9kYXRhLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gRGF0YV9BaGVhZCAoRnJtIDogRm9ybSkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBBaGVhZCAoRnJtIDogRm9ybSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQWhlYWQsICJkYXRhX2FoZWFkIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IEFoZWFkIChGcm0pOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyA9IEN1cnNlc19GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBEYXRhX0FoZWFkOworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gRGF0YV9CZWhpbmQgKEZybSA6IEZvcm0pIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gQmVoaW5kIChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBCZWhpbmQsICJkYXRhX2JlaGluZCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBCZWhpbmQgKEZybSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIERhdGFfQmVoaW5kOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX2RyaXZlci4zeAorICAgLS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIERyaXZlciAoRnJtIDogRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgS2V5IDogS2V5X0NvZGUpIHJldHVybiBEcml2ZXJfUmVzdWx0CisgICBpcworICAgICAgZnVuY3Rpb24gRnJtX0RyaXZlciAoRnJtIDogRm9ybTsgS2V5IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEZybV9Ecml2ZXIsICJmb3JtX2RyaXZlciIpOworCisgICAgICBSIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IEZybV9Ecml2ZXIgKEZybSwgQ19JbnQgKEtleSkpOworICAgYmVnaW4KKyAgICAgIGlmIFIgLz0gRV9PayB0aGVuCisgICAgICAgICBpZiBSID0gRV9Vbmtub3duX0NvbW1hbmQgdGhlbgorICAgICAgICAgICAgcmV0dXJuIFVua25vd25fUmVxdWVzdDsKKyAgICAgICAgIGVsc2lmIFIgPSBFX0ludmFsaWRfRmllbGQgdGhlbgorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRfRmllbGQ7CisgICAgICAgICBlbHNpZiBSID0gRV9SZXF1ZXN0X0RlbmllZCB0aGVuCisgICAgICAgICAgICByZXR1cm4gUmVxdWVzdF9EZW5pZWQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSKTsKKyAgICAgICAgICAgIHJldHVybiBGb3JtX09rOworICAgICAgICAgZW5kIGlmOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZvcm1fT2s7CisgICAgICBlbmQgaWY7CisgICBlbmQgRHJpdmVyOworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX3BhZ2UuM3gKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfAorICAgLS0gIHwKKyAgIC0tICB8CisgICBwcm9jZWR1cmUgU2V0X0N1cnJlbnQgKEZybSA6IGluIEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZsZCA6IGluIEZpZWxkKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9DdXJyZW50X0ZsZCAoRnJtIDogRm9ybTsgRmxkIDogRmllbGQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9DdXJyZW50X0ZsZCwgInNldF9jdXJyZW50X2ZpZWxkIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfQ3VycmVudF9GbGQgKEZybSwgRmxkKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9DdXJyZW50OworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgZnVuY3Rpb24gQ3VycmVudCAoRnJtIDogaW4gRm9ybSkgcmV0dXJuIEZpZWxkCisgICBpcworICAgICAgZnVuY3Rpb24gQ3VycmVudF9GbGQgKEZybSA6IEZvcm0pIHJldHVybiBGaWVsZDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEN1cnJlbnRfRmxkLCAiY3VycmVudF9maWVsZCIpOworCisgICAgICBGbGQgOiBjb25zdGFudCBGaWVsZCA6PSBDdXJyZW50X0ZsZCAoRnJtKTsKKyAgIGJlZ2luCisgICAgICBpZiBGbGQgPSBOdWxsX0ZpZWxkIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIEZsZDsKKyAgIGVuZCBDdXJyZW50OworICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9QYWdlIChGcm0gIDogaW4gRm9ybTsKKyAgICAgICAgICAgICAgICAgICAgICAgUGFnZSA6IGluIFBhZ2VfTnVtYmVyIDo9IFBhZ2VfTnVtYmVyJ0ZpcnN0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9Gcm1fUGFnZSAoRnJtIDogRm9ybTsgUGcgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0ZybV9QYWdlLCAic2V0X2Zvcm1fcGFnZSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0ZybV9QYWdlIChGcm0sIENfSW50IChQYWdlKSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfUGFnZTsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIFBhZ2UgKEZybSA6IEZvcm0pIHJldHVybiBQYWdlX051bWJlcgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldF9QYWdlIChGcm0gOiBGb3JtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfUGFnZSwgImZvcm1fcGFnZSIpOworCisgICAgICBQIDogY29uc3RhbnQgQ19JbnQgOj0gR2V0X1BhZ2UgKEZybSk7CisgICBiZWdpbgorICAgICAgaWYgUCA8IDAgdGhlbgorICAgICAgICAgcmFpc2UgRm9ybV9FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gUGFnZV9OdW1iZXIgKFApOworICAgICAgZW5kIGlmOworICAgZW5kIFBhZ2U7CisKKyAgIGZ1bmN0aW9uIEdldF9JbmRleCAoRmxkIDogRmllbGQpIHJldHVybiBQb3NpdGl2ZQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldF9GaWVsZGluZGV4IChGbGQgOiBGaWVsZCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X0ZpZWxkaW5kZXgsICJmaWVsZF9pbmRleCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBHZXRfRmllbGRpbmRleCAoRmxkKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEZvcm1fRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIFBvc2l0aXZlIChOYXR1cmFsIChSZXMpICsgUG9zaXRpdmUnRmlyc3QpOworICAgZW5kIEdldF9JbmRleDsKKworICAgLS0gIHwKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBtYW4gcGFnZSBmb3JtX25ld19wYWdlLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwKKyAgIC0tICB8CisgICAtLSAgfAorICAgcHJvY2VkdXJlIFNldF9OZXdfUGFnZSAoRmxkICAgICAgOiBpbiBGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ld19QYWdlIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9QYWdlIChGbGQgOiBGaWVsZDsgRmxnIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9QYWdlLCAic2V0X25ld19wYWdlIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfUGFnZSAoRmxkLCBCb29sZWFuJ1BvcyAoTmV3X1BhZ2UpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9OZXdfUGFnZTsKKyAgIC0tICB8CisgICAtLSAgfAorICAgLS0gIHwKKyAgIGZ1bmN0aW9uIElzX05ld19QYWdlIChGbGQgOiBGaWVsZCkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBJc19OZXcgKEZsZCA6IEZpZWxkKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJc19OZXcsICJuZXdfcGFnZSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBJc19OZXcgKEZsZCk7CisgICBiZWdpbgorICAgICAgaWYgUmVzID0gQ3Vyc2VzX0ZhbHNlIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIElzX05ld19QYWdlOworCisgICBwcm9jZWR1cmUgRnJlZSAoRkEgICAgICAgICAgOiBpbiBvdXQgRmllbGRfQXJyYXlfQWNjZXNzOworICAgICAgICAgICAgICAgICAgIEZyZWVfRmllbGRzIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIGlzCisgICAgICBwcm9jZWR1cmUgUmVsZWFzZSBpcyBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24KKyAgICAgICAgKEZpZWxkX0FycmF5LCBGaWVsZF9BcnJheV9BY2Nlc3MpOworICAgYmVnaW4KKyAgICAgIGlmIEZBIC89IG51bGwgYW5kIHRoZW4gRnJlZV9GaWVsZHMgdGhlbgorICAgICAgICAgZm9yIEkgaW4gRkEnRmlyc3QgLi4gKEZBJ0xhc3QgLSAxKSBsb29wCisgICAgICAgICAgICBpZiBGQSAoSSkgLz0gTnVsbF9GaWVsZCB0aGVuCisgICAgICAgICAgICAgICBEZWxldGUgKEZBIChJKSk7CisgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFJlbGVhc2UgKEZBKTsKKyAgIGVuZCBGcmVlOworCisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBmdW5jdGlvbiBEZWZhdWx0X0ZpZWxkX09wdGlvbnMgcmV0dXJuIEZpZWxkX09wdGlvbl9TZXQKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIEdldF9PcHRpb25zIChOdWxsX0ZpZWxkKTsKKyAgIGVuZCBEZWZhdWx0X0ZpZWxkX09wdGlvbnM7CisKKyAgIGZ1bmN0aW9uIERlZmF1bHRfRm9ybV9PcHRpb25zIHJldHVybiBGb3JtX09wdGlvbl9TZXQKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIEdldF9PcHRpb25zIChOdWxsX0Zvcm0pOworICAgZW5kIERlZmF1bHRfRm9ybV9PcHRpb25zOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3JtczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzM1ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRiCkBAIC0wLDAgKzEsNzcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLkl0ZW1fVXNlcl9EYXRhICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggSW50ZXJmYWNlcy5DOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YSBpcworCisgICB1c2UgdHlwZSBJbnRlcmZhY2VzLkMuaW50OworCisgICBwcm9jZWR1cmUgU2V0X1VzZXJfRGF0YSAoSXRtICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA6IGluIFVzZXJfQWNjZXNzKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9JdGVtX1VzZXJwdHIgKEl0bSAgOiBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA6IFVzZXJfQWNjZXNzKSAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0l0ZW1fVXNlcnB0ciwgInNldF9pdGVtX3VzZXJwdHIiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9JdGVtX1VzZXJwdHIgKEl0bSwgRGF0YSk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1VzZXJfRGF0YTsKKworICAgZnVuY3Rpb24gR2V0X1VzZXJfRGF0YSAoSXRtICA6IGluICBJdGVtKSByZXR1cm4gVXNlcl9BY2Nlc3MKKyAgIGlzCisgICAgICBmdW5jdGlvbiBJdGVtX1VzZXJwdHIgKEl0bSA6IEl0ZW0pIHJldHVybiBVc2VyX0FjY2VzczsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1fVXNlcnB0ciwgIml0ZW1fdXNlcnB0ciIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBJdGVtX1VzZXJwdHIgKEl0bSk7CisgICBlbmQgR2V0X1VzZXJfRGF0YTsKKworICAgcHJvY2VkdXJlIEdldF9Vc2VyX0RhdGEgKEl0bSAgOiBpbiAgSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogb3V0IFVzZXJfQWNjZXNzKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBEYXRhIDo9IEdldF9Vc2VyX0RhdGEgKEl0bSk7CisgICBlbmQgR2V0X1VzZXJfRGF0YTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMuSXRlbV9Vc2VyX0RhdGE7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiOWU4NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYgpAQCAtMCwwICsxLDc2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YSAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTIgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLk1lbnVfVXNlcl9EYXRhIGlzCisKKyAgIHVzZSB0eXBlIEludGVyZmFjZXMuQy5pbnQ7CisKKyAgIHByb2NlZHVyZSBTZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfVXNlcnB0ciAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogVXNlcl9BY2Nlc3MpICByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9Vc2VycHRyLCAic2V0X21lbnVfdXNlcnB0ciIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfVXNlcnB0ciAoTWVuLCBEYXRhKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfVXNlcl9EYXRhOworCisgICBmdW5jdGlvbiBHZXRfVXNlcl9EYXRhIChNZW4gIDogaW4gIE1lbnUpIHJldHVybiBVc2VyX0FjY2VzcworICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfVXNlcnB0ciAoTWVuIDogTWVudSkgcmV0dXJuIFVzZXJfQWNjZXNzOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9Vc2VycHRyLCAibWVudV91c2VycHRyIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIE1lbnVfVXNlcnB0ciAoTWVuKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCisgICBwcm9jZWR1cmUgR2V0X1VzZXJfRGF0YSAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpCisgICBpcworICAgYmVnaW4KKyAgICAgIERhdGEgOj0gR2V0X1VzZXJfRGF0YSAoTWVuKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YTsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjI0Yzc0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiCkBAIC0wLDAgKzEsMTAyMiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjI2ICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MDo1OCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CisKK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOword2l0aCBJbnRlcmZhY2VzLkMuU3RyaW5nczsgdXNlIEludGVyZmFjZXMuQy5TdHJpbmdzOword2l0aCBJbnRlcmZhY2VzLkMuUG9pbnRlcnM7CisKK3dpdGggQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cyBpcworCisgICB0eXBlIENfSXRlbV9BcnJheSBpcyBhcnJheSAoTmF0dXJhbCByYW5nZSA8Pikgb2YgYWxpYXNlZCBJdGVtOworICAgcGFja2FnZSBJX0FycmF5IGlzIG5ldworICAgICBJbnRlcmZhY2VzLkMuUG9pbnRlcnMgKE5hdHVyYWwsIEl0ZW0sIENfSXRlbV9BcnJheSwgTnVsbF9JdGVtKTsKKworICAgdXNlIHR5cGUgU3lzdGVtLkJpdF9PcmRlcjsKKyAgIHN1YnR5cGUgY2hhcnNfcHRyIGlzIEludGVyZmFjZXMuQy5TdHJpbmdzLmNoYXJzX3B0cjsKKworICAgZnVuY3Rpb24gTU9TXzJfQ0ludCBpcyBuZXcKKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChNZW51X09wdGlvbl9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQpOworCisgICBmdW5jdGlvbiBDSW50XzJfTU9TIGlzIG5ldworICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKENfSW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnVfT3B0aW9uX1NldCk7CisKKyAgIGZ1bmN0aW9uIElPU18yX0NJbnQgaXMgbmV3CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoSXRlbV9PcHRpb25fU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50KTsKKworICAgZnVuY3Rpb24gQ0ludF8yX0lPUyBpcyBuZXcKKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChDX0ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtX09wdGlvbl9TZXQpOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBSZXF1ZXN0X05hbWUgKEtleSAgOiBpbiBNZW51X1JlcXVlc3RfQ29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFJlcXVlc3RfTmFtZSAoS2V5IDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZXF1ZXN0X05hbWUsICJtZW51X3JlcXVlc3RfbmFtZSIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChSZXF1ZXN0X05hbWUgKENfSW50IChLZXkpKSwgTmFtZSk7CisgICBlbmQgUmVxdWVzdF9OYW1lOworCisgICBmdW5jdGlvbiBSZXF1ZXN0X05hbWUgKEtleSA6IE1lbnVfUmVxdWVzdF9Db2RlKSByZXR1cm4gU3RyaW5nCisgICBpcworICAgICAgZnVuY3Rpb24gUmVxdWVzdF9OYW1lIChLZXkgOiBDX0ludCkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFJlcXVlc3RfTmFtZSwgIm1lbnVfcmVxdWVzdF9uYW1lIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIEZpbGxfU3RyaW5nIChSZXF1ZXN0X05hbWUgKENfSW50IChLZXkpKSk7CisgICBlbmQgUmVxdWVzdF9OYW1lOworCisgICBmdW5jdGlvbiBDcmVhdGUgKE5hbWUgICAgICAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA6IFN0cmluZyA6PSAiIikgcmV0dXJuIEl0ZW0KKyAgIGlzCisgICAgICB0eXBlIENoYXJfUHRyIGlzIGFjY2VzcyBhbGwgSW50ZXJmYWNlcy5DLmNoYXI7CisgICAgICBmdW5jdGlvbiBOZXdpdGVtIChOYW1lLCBEZXNjIDogQ2hhcl9QdHIpIHJldHVybiBJdGVtOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTmV3aXRlbSwgIm5ld19pdGVtIik7CisKKyAgICAgIHR5cGUgTmFtZV9TdHJpbmcgaXMgbmV3IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgdHlwZSBOYW1lX1N0cmluZ19QdHIgaXMgYWNjZXNzIE5hbWVfU3RyaW5nOworICAgICAgcHJhZ21hIENvbnRyb2xsZWQgKE5hbWVfU3RyaW5nX1B0cik7CisKKyAgICAgIHR5cGUgRGVzY19TdHJpbmcgaXMgbmV3IGNoYXJfYXJyYXkgKDAgLi4gRGVzY3JpcHRpb24nTGVuZ3RoKTsKKyAgICAgIHR5cGUgRGVzY19TdHJpbmdfUHRyIGlzIGFjY2VzcyBEZXNjX1N0cmluZzsKKyAgICAgIHByYWdtYSBDb250cm9sbGVkIChEZXNjX1N0cmluZ19QdHIpOworCisgICAgICBOYW1lX1N0ciA6IGNvbnN0YW50IE5hbWVfU3RyaW5nX1B0ciA6PSBuZXcgTmFtZV9TdHJpbmc7CisgICAgICBEZXNjX1N0ciA6IGNvbnN0YW50IERlc2NfU3RyaW5nX1B0ciA6PSBuZXcgRGVzY19TdHJpbmc7CisgICAgICBOYW1lX0xlbiwgRGVzY19MZW4gOiBzaXplX3Q7CisgICAgICBSZXN1bHQgOiBJdGVtOworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIE5hbWVfU3RyLmFsbCwgTmFtZV9MZW4pOworICAgICAgVG9fQyAoRGVzY3JpcHRpb24sIERlc2NfU3RyLmFsbCwgRGVzY19MZW4pOworICAgICAgUmVzdWx0IDo9IE5ld2l0ZW0gKE5hbWVfU3RyLmFsbCAoTmFtZV9TdHIuYWxsJ0ZpcnN0KSdBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY19TdHIuYWxsIChEZXNjX1N0ci5hbGwnRmlyc3QpJ0FjY2Vzcyk7CisgICAgICBpZiBSZXN1bHQgPSBOdWxsX0l0ZW0gdGhlbgorICAgICAgICAgcmFpc2UgRXRpX1N5c3RlbV9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBSZXN1bHQ7CisgICBlbmQgQ3JlYXRlOworCisgICBwcm9jZWR1cmUgRGVsZXRlIChJdG0gOiBpbiBvdXQgSXRlbSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBEZXNjbmFtZSAoSXRtICA6IEl0ZW0pIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBEZXNjbmFtZSwgIml0ZW1fZGVzY3JpcHRpb24iKTsKKyAgICAgIGZ1bmN0aW9uIEl0ZW1uYW1lIChJdG0gIDogSXRlbSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1uYW1lLCAiaXRlbV9uYW1lIik7CisKKyAgICAgIGZ1bmN0aW9uIEZyZWVpdGVtIChJdG0gOiBJdGVtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGcmVlaXRlbSwgImZyZWVfaXRlbSIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICAgICBQdHIgOiBjaGFyc19wdHI7CisgICBiZWdpbgorICAgICAgUHRyIDo9IERlc2NuYW1lIChJdG0pOworICAgICAgaWYgUHRyIC89IE51bGxfUHRyIHRoZW4KKyAgICAgICAgIEludGVyZmFjZXMuQy5TdHJpbmdzLkZyZWUgKFB0cik7CisgICAgICBlbmQgaWY7CisgICAgICBQdHIgOj0gSXRlbW5hbWUgKEl0bSk7CisgICAgICBpZiBQdHIgLz0gTnVsbF9QdHIgdGhlbgorICAgICAgICAgSW50ZXJmYWNlcy5DLlN0cmluZ3MuRnJlZSAoUHRyKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIFJlcyA6PSBGcmVlaXRlbSAoSXRtKTsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICAgICBJdG0gOj0gTnVsbF9JdGVtOworICAgZW5kIERlbGV0ZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfVmFsdWUgKEl0bSAgIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIDogaW4gQm9vbGVhbiA6PSBUcnVlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9JdGVtX1ZhbCAoSXRtIDogSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9JdGVtX1ZhbCwgInNldF9pdGVtX3ZhbHVlIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfSXRlbV9WYWwgKEl0bSwgQm9vbGVhbidQb3MgKFZhbHVlKSk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1ZhbHVlOworCisgICBmdW5jdGlvbiBWYWx1ZSAoSXRtIDogSXRlbSkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBJdGVtX1ZhbCAoSXRtIDogSXRlbSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9WYWwsICJpdGVtX3ZhbHVlIik7CisgICBiZWdpbgorICAgICAgaWYgSXRlbV9WYWwgKEl0bSkgPSBDdXJzZXNfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgVmFsdWU7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIFZpc2libGUgKEl0bSA6IEl0ZW0pIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbV9WaXMgKEl0bSA6IEl0ZW0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1fVmlzLCAiaXRlbV92aXNpYmxlIik7CisgICBiZWdpbgorICAgICAgaWYgSXRlbV9WaXMgKEl0bSkgPSBDdXJzZXNfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgVmlzaWJsZTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoSXRtICAgICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBJdGVtX09wdGlvbl9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0l0ZW1fT3B0cyAoSXRtIDogSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfSXRlbV9PcHRzLCAic2V0X2l0ZW1fb3B0cyIpOworCisgICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBJT1NfMl9DSW50IChPcHRpb25zKTsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X0l0ZW1fT3B0cyAoSXRtLCBPcHQpOworICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfT3B0aW9uczsKKworICAgcHJvY2VkdXJlIFN3aXRjaF9PcHRpb25zIChJdG0gICAgIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IGluIEl0ZW1fT3B0aW9uX1NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBJdGVtX09wdHNfT24gKEl0bSA6IEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJdGVtX09wdHNfT24sICJpdGVtX29wdHNfb24iKTsKKyAgICAgIGZ1bmN0aW9uIEl0ZW1fT3B0c19PZmYgKEl0bSA6IEl0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9PcHRzX09mZiwgIml0ZW1fb3B0c19vZmYiKTsKKworICAgICAgT3B0IDogY29uc3RhbnQgQ19JbnQgOj0gSU9TXzJfQ0ludCAoT3B0aW9ucyk7CisgICAgICBFcnIgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgaWYgT24gdGhlbgorICAgICAgICAgRXJyIDo9IEl0ZW1fT3B0c19PbiAoSXRtLCBPcHQpOworICAgICAgZWxzZQorICAgICAgICAgRXJyIDo9IEl0ZW1fT3B0c19PZmYgKEl0bSwgT3B0KTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIEVyciAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKEVycik7CisgICAgICBlbmQgaWY7CisgICBlbmQgU3dpdGNoX09wdGlvbnM7CisKKyAgIHByb2NlZHVyZSBHZXRfT3B0aW9ucyAoSXRtICAgICA6IGluICBJdGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIDogb3V0IEl0ZW1fT3B0aW9uX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBJdGVtX09wdHMgKEl0bSA6IEl0ZW0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEl0ZW1fT3B0cywgIml0ZW1fb3B0cyIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBDX0ludCA6PSBJdGVtX09wdHMgKEl0bSk7CisgICBiZWdpbgorICAgICAgT3B0aW9ucyA6PSBDSW50XzJfSU9TIChSZXMpOworICAgZW5kIEdldF9PcHRpb25zOworCisgICBmdW5jdGlvbiBHZXRfT3B0aW9ucyAoSXRtIDogSXRlbSA6PSBOdWxsX0l0ZW0pIHJldHVybiBJdGVtX09wdGlvbl9TZXQKKyAgIGlzCisgICAgICBJb3MgOiBJdGVtX09wdGlvbl9TZXQ7CisgICBiZWdpbgorICAgICAgR2V0X09wdGlvbnMgKEl0bSwgSW9zKTsKKyAgICAgIHJldHVybiBJb3M7CisgICBlbmQgR2V0X09wdGlvbnM7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgTmFtZSAoSXRtICA6IGluIEl0ZW07CisgICAgICAgICAgICAgICAgICAgTmFtZSA6IG91dCBTdHJpbmcpCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbW5hbWUgKEl0bSA6IEl0ZW0pIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJdGVtbmFtZSwgIml0ZW1fbmFtZSIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChJdGVtbmFtZSAoSXRtKSwgTmFtZSk7CisgICBlbmQgTmFtZTsKKworICAgZnVuY3Rpb24gTmFtZSAoSXRtIDogaW4gSXRlbSkgcmV0dXJuIFN0cmluZworICAgaXMKKyAgICAgIGZ1bmN0aW9uIEl0ZW1uYW1lIChJdG0gOiBJdGVtKSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbW5hbWUsICJpdGVtX25hbWUiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gRmlsbF9TdHJpbmcgKEl0ZW1uYW1lIChJdG0pKTsKKyAgIGVuZCBOYW1lOworCisgICBwcm9jZWR1cmUgRGVzY3JpcHRpb24gKEl0bSAgICAgICAgIDogaW4gSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIERlc2NuYW1lIChJdG0gIDogSXRlbSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERlc2NuYW1lLCAiaXRlbV9kZXNjcmlwdGlvbiIpOworICAgYmVnaW4KKyAgICAgIEZpbGxfU3RyaW5nIChEZXNjbmFtZSAoSXRtKSwgRGVzY3JpcHRpb24pOworICAgZW5kIERlc2NyaXB0aW9uOworCisgICBmdW5jdGlvbiBEZXNjcmlwdGlvbiAoSXRtIDogaW4gSXRlbSkgcmV0dXJuIFN0cmluZworICAgaXMKKyAgICAgIGZ1bmN0aW9uIERlc2NuYW1lIChJdG0gIDogSXRlbSkgcmV0dXJuIGNoYXJzX3B0cjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERlc2NuYW1lLCAiaXRlbV9kZXNjcmlwdGlvbiIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoRGVzY25hbWUgKEl0bSkpOworICAgZW5kIERlc2NyaXB0aW9uOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9DdXJyZW50IChNZW4gOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBpbiBJdGVtKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9DdXJyX0l0ZW0gKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdG0gOiBJdGVtKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfQ3Vycl9JdGVtLCAic2V0X2N1cnJlbnRfaXRlbSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0N1cnJfSXRlbSAoTWVuLCBJdG0pOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0N1cnJlbnQ7CisKKyAgIGZ1bmN0aW9uIEN1cnJlbnQgKE1lbiA6IE1lbnUpIHJldHVybiBJdGVtCisgICBpcworICAgICAgZnVuY3Rpb24gQ3Vycl9JdGVtIChNZW4gOiBNZW51KSByZXR1cm4gSXRlbTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEN1cnJfSXRlbSwgImN1cnJlbnRfaXRlbSIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBJdGVtIDo9IEN1cnJfSXRlbSAoTWVuKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgPSBOdWxsX0l0ZW0gdGhlbgorICAgICAgICAgcmFpc2UgTWVudV9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gUmVzOworICAgZW5kIEN1cnJlbnQ7CisKKyAgIHByb2NlZHVyZSBTZXRfVG9wX1JvdyAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgOiBpbiBMaW5lX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9Ub3Byb3cgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfVG9wcm93LCAic2V0X3RvcF9yb3ciKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9Ub3Byb3cgKE1lbiwgQ19JbnQgKExpbmUpKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfVG9wX1JvdzsKKworICAgZnVuY3Rpb24gVG9wX1JvdyAoTWVuIDogTWVudSkgcmV0dXJuIExpbmVfUG9zaXRpb24KKyAgIGlzCisgICAgICBmdW5jdGlvbiBUb3Byb3cgKE1lbiA6IE1lbnUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFRvcHJvdywgInRvcF9yb3ciKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgQ19JbnQgOj0gVG9wcm93IChNZW4pOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgTWVudV9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gTGluZV9Qb3NpdGlvbiAoUmVzKTsKKyAgIGVuZCBUb3BfUm93OworCisgICBmdW5jdGlvbiBHZXRfSW5kZXggKEl0bSA6IEl0ZW0pIHJldHVybiBQb3NpdGl2ZQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldF9JdGVtaW5kZXggKEl0bSA6IEl0ZW0pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9JdGVtaW5kZXgsICJpdGVtX2luZGV4Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IENfSW50IDo9IEdldF9JdGVtaW5kZXggKEl0bSk7CisgICBiZWdpbgorICAgICAgaWYgUmVzID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBNZW51X0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBQb3NpdGl2ZSAoTmF0dXJhbCAoUmVzKSArIFBvc2l0aXZlJ0ZpcnN0KTsKKyAgIGVuZCBHZXRfSW5kZXg7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUG9zdCAoTWVuICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgUG9zdCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNX1Bvc3QgKE1lbiA6IE1lbnUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1fUG9zdCwgInBvc3RfbWVudSIpOworICAgICAgZnVuY3Rpb24gTV9VbnBvc3QgKE1lbiA6IE1lbnUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1fVW5wb3N0LCAidW5wb3N0X21lbnUiKTsKKworICAgICAgUmVzIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIGlmIFBvc3QgdGhlbgorICAgICAgICAgUmVzIDo9IE1fUG9zdCAoTWVuKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIFJlcyA6PSBNX1VucG9zdCAoTWVuKTsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgUG9zdDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBTZXRfT3B0aW9ucyAoTWVuICAgICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBNZW51X09wdGlvbl9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfT3B0cyAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdCA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9PcHRzLCAic2V0X21lbnVfb3B0cyIpOworCisgICAgICBPcHQgOiBjb25zdGFudCBDX0ludCA6PSBNT1NfMl9DSW50IChPcHRpb25zKTsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBSZXMgOj0gU2V0X01lbnVfT3B0cyAoTWVuLCBPcHQpOworICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X09wdGlvbnM7CisKKyAgIHByb2NlZHVyZSBTd2l0Y2hfT3B0aW9ucyAoTWVuICAgICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgOiBpbiBNZW51X09wdGlvbl9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgICAgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9PcHRzX09uIChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHQgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9PcHRzX09uLCAibWVudV9vcHRzX29uIik7CisgICAgICBmdW5jdGlvbiBNZW51X09wdHNfT2ZmIChNZW4gOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfT3B0c19PZmYsICJtZW51X29wdHNfb2ZmIik7CisKKyAgICAgIE9wdCA6IGNvbnN0YW50IENfSW50IDo9IE1PU18yX0NJbnQgKE9wdGlvbnMpOworICAgICAgRXJyIDogRXRpX0Vycm9yOworICAgYmVnaW4KKyAgICAgIGlmIE9uIHRoZW4KKyAgICAgICAgIEVyciA6PSBNZW51X09wdHNfT24gIChNZW4sIE9wdCk7CisgICAgICBlbHNlCisgICAgICAgICBFcnIgOj0gTWVudV9PcHRzX09mZiAoTWVuLCBPcHQpOworICAgICAgZW5kIGlmOworICAgICAgaWYgRXJyIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoRXJyKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTd2l0Y2hfT3B0aW9uczsKKworICAgcHJvY2VkdXJlIEdldF9PcHRpb25zIChNZW4gICAgIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyA6IG91dCBNZW51X09wdGlvbl9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9PcHRzIChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X09wdHMsICJtZW51X29wdHMiKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgQ19JbnQgOj0gTWVudV9PcHRzIChNZW4pOworICAgYmVnaW4KKyAgICAgIE9wdGlvbnMgOj0gQ0ludF8yX01PUyAoUmVzKTsKKyAgIGVuZCBHZXRfT3B0aW9uczsKKworICAgZnVuY3Rpb24gR2V0X09wdGlvbnMgKE1lbiA6IE1lbnUgOj0gTnVsbF9NZW51KSByZXR1cm4gTWVudV9PcHRpb25fU2V0CisgICBpcworICAgICAgTW9zIDogTWVudV9PcHRpb25fU2V0OworICAgYmVnaW4KKyAgICAgIEdldF9PcHRpb25zIChNZW4sIE1vcyk7CisgICAgICByZXR1cm4gTW9zOworICAgZW5kIEdldF9PcHRpb25zOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKE1lbiA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogaW4gV2luZG93KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X1dpbiAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9XaW4sICJzZXRfbWVudV93aW4iKTsKKworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X1dpbiAoTWVuLCBXaW4pOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9XaW5kb3c7CisKKyAgIGZ1bmN0aW9uIEdldF9XaW5kb3cgKE1lbiA6IE1lbnUpIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X1dpbiAoTWVuIDogTWVudSkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfV2luLCAibWVudV93aW4iKTsKKworICAgICAgVyA6IGNvbnN0YW50IFdpbmRvdyA6PSBNZW51X1dpbiAoTWVuKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBHZXRfV2luZG93OworCisgICBwcm9jZWR1cmUgU2V0X1N1Yl9XaW5kb3cgKE1lbiA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfTWVudV9TdWIgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfU3ViLCAic2V0X21lbnVfc3ViIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9TdWIgKE1lbiwgV2luKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfU3ViX1dpbmRvdzsKKworICAgZnVuY3Rpb24gR2V0X1N1Yl9XaW5kb3cgKE1lbiA6IE1lbnUpIHJldHVybiBXaW5kb3cKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X1N1YiAoTWVuIDogTWVudSkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfU3ViLCAibWVudV9zdWIiKTsKKworICAgICAgVyA6IGNvbnN0YW50IFdpbmRvdyA6PSBNZW51X1N1YiAoTWVuKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gVzsKKyAgIGVuZCBHZXRfU3ViX1dpbmRvdzsKKworICAgcHJvY2VkdXJlIFNjYWxlIChNZW4gICAgIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IG91dCBMaW5lX0NvdW50OworICAgICAgICAgICAgICAgICAgICBDb2x1bW5zIDogb3V0IENvbHVtbl9Db3VudCkKKyAgIGlzCisgICAgICB0eXBlIENfSW50X0FjY2VzcyBpcyBhY2Nlc3MgYWxsIENfSW50OworICAgICAgZnVuY3Rpb24gTV9TY2FsZSAoTWVuICAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFlwLCBYcCA6IENfSW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTV9TY2FsZSwgInNjYWxlX21lbnUiKTsKKworICAgICAgWCwgWSA6IGFsaWFzZWQgQ19JbnQ7CisgICAgICBSZXMgIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IE1fU2NhbGUgKE1lbiwgWSdBY2Nlc3MsIFgnQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgICAgTGluZXMgOj0gTGluZV9Db3VudCAoWSk7CisgICAgICBDb2x1bW5zIDo9IENvbHVtbl9Db3VudCAoWCk7CisgICBlbmQgU2NhbGU7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgUG9zaXRpb25fQ3Vyc29yIChNZW4gOiBNZW51KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFBvc19NZW51X0N1cnNvciAoTWVuIDogTWVudSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgUG9zX01lbnVfQ3Vyc29yLCAicG9zX21lbnVfY3Vyc29yIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBQb3NfTWVudV9DdXJzb3IgKE1lbik7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgUG9zaXRpb25fQ3Vyc29yOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgU2V0X01hcmsgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBNYXJrIDogaW4gU3RyaW5nKQorICAgaXMKKyAgICAgIHR5cGUgQ2hhcl9QdHIgaXMgYWNjZXNzIGFsbCBJbnRlcmZhY2VzLkMuY2hhcjsKKyAgICAgIGZ1bmN0aW9uIFNldF9NYXJrIChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrIDogQ2hhcl9QdHIpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NYXJrLCAic2V0X21lbnVfbWFyayIpOworCisgICAgICBUeHQgOiBjaGFyX2FycmF5ICgwIC4uIE1hcmsnTGVuZ3RoKTsKKyAgICAgIExlbiA6IHNpemVfdDsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBUb19DIChNYXJrLCBUeHQsIExlbik7CisgICAgICBSZXMgOj0gU2V0X01hcmsgKE1lbiwgVHh0IChUeHQnRmlyc3QpJ0FjY2Vzcyk7CisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9NYXJrOworCisgICBwcm9jZWR1cmUgTWFyayAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgIE1hcmsgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldF9NZW51X01hcmsgKE1lbiA6IE1lbnUpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBHZXRfTWVudV9NYXJrLCAibWVudV9tYXJrIik7CisgICBiZWdpbgorICAgICAgRmlsbF9TdHJpbmcgKEdldF9NZW51X01hcmsgKE1lbiksIE1hcmspOworICAgZW5kIE1hcms7CisKKyAgIGZ1bmN0aW9uIE1hcmsgKE1lbiA6IE1lbnUpIHJldHVybiBTdHJpbmcKKyAgIGlzCisgICAgICBmdW5jdGlvbiBHZXRfTWVudV9NYXJrIChNZW4gOiBNZW51KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X01lbnVfTWFyaywgIm1lbnVfbWFyayIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBGaWxsX1N0cmluZyAoR2V0X01lbnVfTWFyayAoTWVuKSk7CisgICBlbmQgTWFyazsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9Gb3JlZ3JvdW5kCisgICAgIChNZW4gICA6IGluIE1lbnU7CisgICAgICBGb3JlICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgIENvbG9yIDogaW4gQ29sb3JfUGFpciA6PSBDb2xvcl9QYWlyJ0ZpcnN0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X0ZvcmUgKE1lbiAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciA6IENfQ2h0eXBlKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9Gb3JlLCAic2V0X21lbnVfZm9yZSIpOworCisgICAgICBDaCA6IGNvbnN0YW50IEF0dHJpYnV0ZWRfQ2hhcmFjdGVyIDo9IChDaCAgICA9PiBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciA9PiBDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIgID0+IEZvcmUpOworICAgICAgUmVzIDogY29uc3RhbnQgRXRpX0Vycm9yIDo9IFNldF9NZW51X0ZvcmUgKE1lbiwgQXR0ckNoYXJfVG9fQ2h0eXBlIChDaCkpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Gb3JlZ3JvdW5kOworCisgICBwcm9jZWR1cmUgRm9yZWdyb3VuZCAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQpCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9Gb3JlIChNZW4gOiBNZW51KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0ZvcmUsICJtZW51X2ZvcmUiKTsKKyAgIGJlZ2luCisgICAgICBGb3JlIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9Gb3JlIChNZW4pKS5BdHRyOworICAgZW5kIEZvcmVncm91bmQ7CisKKyAgIHByb2NlZHVyZSBGb3JlZ3JvdW5kIChNZW4gICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmUgIDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0OworICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIDogb3V0IENvbG9yX1BhaXIpCisgICBpcworICAgICAgZnVuY3Rpb24gTWVudV9Gb3JlIChNZW4gOiBNZW51KSByZXR1cm4gQ19DaHR5cGU7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X0ZvcmUsICJtZW51X2ZvcmUiKTsKKyAgIGJlZ2luCisgICAgICBGb3JlICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfRm9yZSAoTWVuKSkuQXR0cjsKKyAgICAgIENvbG9yIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9Gb3JlIChNZW4pKS5Db2xvcjsKKyAgIGVuZCBGb3JlZ3JvdW5kOworCisgICBwcm9jZWR1cmUgU2V0X0JhY2tncm91bmQKKyAgICAgKE1lbiAgIDogaW4gTWVudTsKKyAgICAgIEJhY2sgIDogaW4gQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQgOj0gTm9ybWFsX1ZpZGVvOworICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfQmFjayAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyIDogQ19DaHR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X0JhY2ssICJzZXRfbWVudV9iYWNrIik7CisKKyAgICAgIENoIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gQmFjayk7CisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfQmFjayAoTWVuLCBBdHRyQ2hhcl9Ub19DaHR5cGUgKENoKSk7CisgICBiZWdpbgorICAgICAgaWYgIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0JhY2tncm91bmQ7CisKKyAgIHByb2NlZHVyZSBCYWNrZ3JvdW5kIChNZW4gIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayA6IG91dCBDaGFyYWN0ZXJfQXR0cmlidXRlX1NldCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X0JhY2sgKE1lbiA6IE1lbnUpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfQmFjaywgIm1lbnVfYmFjayIpOworICAgYmVnaW4KKyAgICAgIEJhY2sgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0JhY2sgKE1lbikpLkF0dHI7CisgICBlbmQgQmFja2dyb3VuZDsKKworICAgcHJvY2VkdXJlIEJhY2tncm91bmQgKE1lbiAgIDogaW4gIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayAgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X0JhY2sgKE1lbiA6IE1lbnUpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfQmFjaywgIm1lbnVfYmFjayIpOworICAgYmVnaW4KKyAgICAgIEJhY2sgIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9CYWNrIChNZW4pKS5BdHRyOworICAgICAgQ29sb3IgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0JhY2sgKE1lbikpLkNvbG9yOworICAgZW5kIEJhY2tncm91bmQ7CisKKyAgIHByb2NlZHVyZSBTZXRfR3JleSAoTWVuICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBHcmV5ICA6IGluIENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0IDo9IE5vcm1hbF9WaWRlbzsKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBpbiBDb2xvcl9QYWlyIDo9IENvbG9yX1BhaXInRmlyc3QpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfR3JleSAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyIDogQ19DaHR5cGUpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X0dyZXksICJzZXRfbWVudV9ncmV5Iik7CisKKyAgICAgIENoIDogY29uc3RhbnQgQXR0cmlidXRlZF9DaGFyYWN0ZXIgOj0gKENoICAgID0+IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yID0+IENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ciAgPT4gR3JleSk7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9HcmV5IChNZW4sIEF0dHJDaGFyX1RvX0NodHlwZSAoQ2gpKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfR3JleTsKKworICAgcHJvY2VkdXJlIEdyZXkgKE1lbiAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICBHcmV5IDogb3V0IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfR3JleSAoTWVuIDogTWVudSkgcmV0dXJuIENfQ2h0eXBlOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9HcmV5LCAibWVudV9ncmV5Iik7CisgICBiZWdpbgorICAgICAgR3JleSA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKE1lbnVfR3JleSAoTWVuKSkuQXR0cjsKKyAgIGVuZCBHcmV5OworCisgICBwcm9jZWR1cmUgR3JleSAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgIEdyZXkgOiBvdXQgQ2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ7CisgICAgICAgICAgICAgICAgICAgQ29sb3IgOiBvdXQgQ29sb3JfUGFpcikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X0dyZXkgKE1lbiA6IE1lbnUpIHJldHVybiBDX0NodHlwZTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfR3JleSwgIm1lbnVfZ3JleSIpOworICAgYmVnaW4KKyAgICAgIEdyZXkgIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoTWVudV9HcmV5IChNZW4pKS5BdHRyOworICAgICAgQ29sb3IgOj0gQ2h0eXBlX1RvX0F0dHJDaGFyIChNZW51X0dyZXkgKE1lbikpLkNvbG9yOworICAgZW5kIEdyZXk7CisKKyAgIHByb2NlZHVyZSBTZXRfUGFkX0NoYXJhY3RlciAoTWVuIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFkIDogaW4gQ2hhcmFjdGVyIDo9IFNwYWNlKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9NZW51X1BhZCAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2ggIDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X1BhZCwgInNldF9tZW51X3BhZCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfUGFkIChNZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoQ2hhcmFjdGVyJ1BvcyAoUGFkKSkpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1BhZF9DaGFyYWN0ZXI7CisKKyAgIHByb2NlZHVyZSBQYWRfQ2hhcmFjdGVyIChNZW4gOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWQgOiBvdXQgQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfUGFkIChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X1BhZCwgIm1lbnVfcGFkIik7CisgICBiZWdpbgorICAgICAgUGFkIDo9IENoYXJhY3RlcidWYWwgKE1lbnVfUGFkIChNZW4pKTsKKyAgIGVuZCBQYWRfQ2hhcmFjdGVyOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIFNldF9TcGFjaW5nIChNZW4gICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyIDogaW4gQ29sdW1uX1Bvc2l0aW9uIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdyAgIDogaW4gTGluZV9Qb3NpdGlvbiAgIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uIDo9IDApCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X1NwYWNpbmcgKE1lbiAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQsIFIsIEMgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X1NwYWNpbmcsICJzZXRfbWVudV9zcGFjaW5nIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfU3BhY2luZyAoTWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoRGVzY3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoUm93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ19JbnQgKENvbCkpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X1NwYWNpbmc7CisKKyAgIHByb2NlZHVyZSBTcGFjaW5nIChNZW4gICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgRGVzY3IgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgIFJvdyAgIDogb3V0IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CisgICAgICBmdW5jdGlvbiBHZXRfU3BhY2luZyAoTWVuICAgICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCwgUiwgQyA6IENfSW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X1NwYWNpbmcsICJtZW51X3NwYWNpbmciKTsKKworICAgICAgRCwgUiwgQyA6IGFsaWFzZWQgQ19JbnQ7CisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gR2V0X1NwYWNpbmcgKE1lbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRCdBY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFInQWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDJ0FjY2Vzcyk7CisgICBiZWdpbgorICAgICAgaWYgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgIERlc2NyIDo9IENvbHVtbl9Qb3NpdGlvbiAoRCk7CisgICAgICAgICBSb3cgICA6PSBMaW5lX1Bvc2l0aW9uIChSKTsKKyAgICAgICAgIENvbCAgIDo9IENvbHVtbl9Qb3NpdGlvbiAoQyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU3BhY2luZzsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIFNldF9QYXR0ZXJuIChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0IDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIHR5cGUgQ2hhcl9QdHIgaXMgYWNjZXNzIGFsbCBJbnRlcmZhY2VzLkMuY2hhcjsKKyAgICAgIGZ1bmN0aW9uIFNldF9QYXR0ZXJuIChNZW4gICAgIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuIDogQ2hhcl9QdHIpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9QYXR0ZXJuLCAic2V0X21lbnVfcGF0dGVybiIpOworCisgICAgICBTICAgOiBjaGFyX2FycmF5ICgwIC4uIFRleHQnTGVuZ3RoKTsKKyAgICAgIEwgICA6IHNpemVfdDsKKyAgICAgIFJlcyA6IEV0aV9FcnJvcjsKKyAgIGJlZ2luCisgICAgICBUb19DIChUZXh0LCBTLCBMKTsKKyAgICAgIFJlcyA6PSBTZXRfUGF0dGVybiAoTWVuLCBTIChTJ0ZpcnN0KSdBY2Nlc3MpOworICAgICAgY2FzZSBSZXMgaXMKKyAgICAgICAgIHdoZW4gRV9Ob19NYXRjaCA9PiByZXR1cm4gRmFsc2U7CisgICAgICAgICB3aGVuIEVfT2sgICAgICAgPT4gcmV0dXJuIFRydWU7CisgICAgICAgICB3aGVuIG90aGVycyA9PgorICAgICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVuZCBjYXNlOworICAgZW5kIFNldF9QYXR0ZXJuOworCisgICBwcm9jZWR1cmUgUGF0dGVybiAoTWVuICA6IGluICBNZW51OworICAgICAgICAgICAgICAgICAgICAgIFRleHQgOiBvdXQgU3RyaW5nKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIEdldF9QYXR0ZXJuIChNZW4gOiBNZW51KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X1BhdHRlcm4sICJtZW51X3BhdHRlcm4iKTsKKyAgIGJlZ2luCisgICAgICBGaWxsX1N0cmluZyAoR2V0X1BhdHRlcm4gKE1lbiksIFRleHQpOworICAgZW5kIFBhdHRlcm47CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgU2V0X0Zvcm1hdCAoTWVuICAgICA6IGluIE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgTGluZXMgICA6IGluIExpbmVfQ291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IGluIENvbHVtbl9Db3VudCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfTWVudV9GbXQgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbiA6IENfSW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2wgOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X01lbnVfRm10LCAic2V0X21lbnVfZm9ybWF0Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9GbXQgKE1lbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfSW50IChMaW5lcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDX0ludCAoQ29sdW1ucykpOworICAgYmVnaW4KKyAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Gb3JtYXQ7CisKKyAgIHByb2NlZHVyZSBGb3JtYXQgKE1lbiAgICAgOiBpbiAgTWVudTsKKyAgICAgICAgICAgICAgICAgICAgIExpbmVzICAgOiBvdXQgTGluZV9Db3VudDsKKyAgICAgICAgICAgICAgICAgICAgIENvbHVtbnMgOiBvdXQgQ29sdW1uX0NvdW50KQorICAgaXMKKyAgICAgIHR5cGUgQ19JbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgQ19JbnQ7CisgICAgICBmdW5jdGlvbiBNZW51X0ZtdCAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgWSwgWCA6IENfSW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTWVudV9GbXQsICJtZW51X2Zvcm1hdCIpOworCisgICAgICBMLCBDIDogYWxpYXNlZCBDX0ludDsKKyAgICAgIFJlcyAgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gTWVudV9GbXQgKE1lbiwgTCdBY2Nlc3MsIEMnQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgZWxzZQorICAgICAgICAgTGluZXMgICA6PSBMaW5lX0NvdW50IChMKTsKKyAgICAgICAgIENvbHVtbnMgOj0gQ29sdW1uX0NvdW50IChDKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBGb3JtYXQ7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgU2V0X0l0ZW1fSW5pdF9Ib29rIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X0l0ZW1fSW5pdCAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfSXRlbV9Jbml0LCAic2V0X2l0ZW1faW5pdCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X0l0ZW1fSW5pdCAoTWVuLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfSXRlbV9Jbml0X0hvb2s7CisKKyAgIHByb2NlZHVyZSBTZXRfSXRlbV9UZXJtX0hvb2sgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIE1lbnVfSG9va19GdW5jdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfSXRlbV9UZXJtIChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBNZW51X0hvb2tfRnVuY3Rpb24pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9JdGVtX1Rlcm0sICJzZXRfaXRlbV90ZXJtIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfSXRlbV9UZXJtIChNZW4sIFByb2MpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0l0ZW1fVGVybV9Ib29rOworCisgICBwcm9jZWR1cmUgU2V0X01lbnVfSW5pdF9Ib29rIChNZW4gIDogaW4gTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBpbiBNZW51X0hvb2tfRnVuY3Rpb24pCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X01lbnVfSW5pdCAoTWVuICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jIDogTWVudV9Ib29rX0Z1bmN0aW9uKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfTWVudV9Jbml0LCAic2V0X21lbnVfaW5pdCIpOworCisgICAgICBSZXMgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gU2V0X01lbnVfSW5pdCAoTWVuLCBQcm9jKTsKKyAgIGJlZ2luCisgICAgICBpZiAgUmVzIC89IEVfT2sgdGhlbgorICAgICAgICAgRXRpX0V4Y2VwdGlvbiAoUmVzKTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTZXRfTWVudV9Jbml0X0hvb2s7CisKKyAgIHByb2NlZHVyZSBTZXRfTWVudV9UZXJtX0hvb2sgKE1lbiAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYyA6IGluIE1lbnVfSG9va19GdW5jdGlvbikKKyAgIGlzCisgICAgICBmdW5jdGlvbiBTZXRfTWVudV9UZXJtIChNZW4gIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2MgOiBNZW51X0hvb2tfRnVuY3Rpb24pIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9NZW51X1Rlcm0sICJzZXRfbWVudV90ZXJtIik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBTZXRfTWVudV9UZXJtIChNZW4sIFByb2MpOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X01lbnVfVGVybV9Ib29rOworCisgICBmdW5jdGlvbiBHZXRfSXRlbV9Jbml0X0hvb2sgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb24KKyAgIGlzCisgICAgICBmdW5jdGlvbiBJdGVtX0luaXQgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb247CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBJdGVtX0luaXQsICJpdGVtX2luaXQiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gSXRlbV9Jbml0IChNZW4pOworICAgZW5kIEdldF9JdGVtX0luaXRfSG9vazsKKworICAgZnVuY3Rpb24gR2V0X0l0ZW1fVGVybV9Ib29rIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uCisgICBpcworICAgICAgZnVuY3Rpb24gSXRlbV9UZXJtIChNZW4gOiBNZW51KSByZXR1cm4gTWVudV9Ib29rX0Z1bmN0aW9uOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSXRlbV9UZXJtLCAiaXRlbV90ZXJtIik7CisgICBiZWdpbgorICAgICAgcmV0dXJuIEl0ZW1fVGVybSAoTWVuKTsKKyAgIGVuZCBHZXRfSXRlbV9UZXJtX0hvb2s7CisKKyAgIGZ1bmN0aW9uIEdldF9NZW51X0luaXRfSG9vayAoTWVuIDogTWVudSkgcmV0dXJuIE1lbnVfSG9va19GdW5jdGlvbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1lbnVfSW5pdCAoTWVuIDogTWVudSkgcmV0dXJuIE1lbnVfSG9va19GdW5jdGlvbjsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1lbnVfSW5pdCwgIm1lbnVfaW5pdCIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBNZW51X0luaXQgKE1lbik7CisgICBlbmQgR2V0X01lbnVfSW5pdF9Ib29rOworCisgICBmdW5jdGlvbiBHZXRfTWVudV9UZXJtX0hvb2sgKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb24KKyAgIGlzCisgICAgICBmdW5jdGlvbiBNZW51X1Rlcm0gKE1lbiA6IE1lbnUpIHJldHVybiBNZW51X0hvb2tfRnVuY3Rpb247CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNZW51X1Rlcm0sICJtZW51X3Rlcm0iKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTWVudV9UZXJtIChNZW4pOworICAgZW5kIEdldF9NZW51X1Rlcm1fSG9vazsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBSZWRlZmluZSAoTWVuICAgOiBpbiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBJdGVtcyA6IGluIEl0ZW1fQXJyYXlfQWNjZXNzKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNldF9JdGVtcyAoTWVuICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVtcyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBTZXRfSXRlbXMsICJzZXRfbWVudV9pdGVtcyIpOworCisgICAgICBSZXMgOiBFdGlfRXJyb3I7CisgICBiZWdpbgorICAgICAgcHJhZ21hIEFzc2VydCAoSXRlbXMgKEl0ZW1zJ0xhc3QpID0gTnVsbF9JdGVtKTsKKyAgICAgIGlmIEl0ZW1zIChJdGVtcydMYXN0KSAvPSBOdWxsX0l0ZW0gdGhlbgorICAgICAgICAgcmFpc2UgTWVudV9FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICBSZXMgOj0gU2V0X0l0ZW1zIChNZW4sIEl0ZW1zLmFsbCdBZGRyZXNzKTsKKyAgICAgICAgIGlmICBSZXMgLz0gRV9PayB0aGVuCisgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSZXMpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGlmOworICAgZW5kIFJlZGVmaW5lOworCisgICBmdW5jdGlvbiBJdGVtX0NvdW50IChNZW4gOiBNZW51KSByZXR1cm4gTmF0dXJhbAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIENvdW50IChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBDb3VudCwgIml0ZW1fY291bnQiKTsKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTmF0dXJhbCAoQ291bnQgKE1lbikpOworICAgZW5kIEl0ZW1fQ291bnQ7CisKKyAgIGZ1bmN0aW9uIEl0ZW1zIChNZW4gICA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgSW5kZXggOiBQb3NpdGl2ZSkgcmV0dXJuIEl0ZW0KKyAgIGlzCisgICAgICB1c2UgSV9BcnJheTsKKworICAgICAgZnVuY3Rpb24gQ19NaXRlbXMgKE1lbiA6IE1lbnUpIHJldHVybiBQb2ludGVyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgQ19NaXRlbXMsICJtZW51X2l0ZW1zIik7CisKKyAgICAgIFAgOiBQb2ludGVyIDo9IENfTWl0ZW1zIChNZW4pOworICAgYmVnaW4KKyAgICAgIGlmIFAgPSBudWxsIG9yIGVsc2UgSW5kZXggPiBJdGVtX0NvdW50IChNZW4pIHRoZW4KKyAgICAgICAgIHJhaXNlIE1lbnVfRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgUCA6PSBQICsgcHRyZGlmZl90IChDX0ludCAoSW5kZXgpIC0gMSk7CisgICAgICAgICByZXR1cm4gUC5hbGw7CisgICAgICBlbmQgaWY7CisgICBlbmQgSXRlbXM7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIENyZWF0ZSAoSXRlbXMgOiBJdGVtX0FycmF5X0FjY2VzcykgcmV0dXJuIE1lbnUKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOZXdtZW51IChJdGVtcyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gTWVudTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE5ld21lbnUsICJuZXdfbWVudSIpOworCisgICAgICBNICAgOiBNZW51OworICAgYmVnaW4KKyAgICAgIHByYWdtYSBBc3NlcnQgKEl0ZW1zIChJdGVtcydMYXN0KSA9IE51bGxfSXRlbSk7CisgICAgICBpZiBJdGVtcyAoSXRlbXMnTGFzdCkgLz0gTnVsbF9JdGVtIHRoZW4KKyAgICAgICAgIHJhaXNlIE1lbnVfRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgTSA6PSBOZXdtZW51IChJdGVtcy5hbGwnQWRkcmVzcyk7CisgICAgICAgICBpZiBNID0gTnVsbF9NZW51IHRoZW4KKyAgICAgICAgICAgIHJhaXNlIE1lbnVfRXhjZXB0aW9uOworICAgICAgICAgZW5kIGlmOworICAgICAgICAgcmV0dXJuIE07CisgICAgICBlbmQgaWY7CisgICBlbmQgQ3JlYXRlOworCisgICBwcm9jZWR1cmUgRGVsZXRlIChNZW4gOiBpbiBvdXQgTWVudSkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBGcmVlIChNZW4gOiBNZW51KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBGcmVlLCAiZnJlZV9tZW51Iik7CisKKyAgICAgIFJlcyA6IGNvbnN0YW50IEV0aV9FcnJvciA6PSBGcmVlIChNZW4pOworICAgYmVnaW4KKyAgICAgIGlmIFJlcyAvPSBFX09rIHRoZW4KKyAgICAgICAgIEV0aV9FeGNlcHRpb24gKFJlcyk7CisgICAgICBlbmQgaWY7CisgICAgICBNZW4gOj0gTnVsbF9NZW51OworICAgZW5kIERlbGV0ZTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBEcml2ZXIgKE1lbiA6IE1lbnU7CisgICAgICAgICAgICAgICAgICAgIEtleSA6IEtleV9Db2RlKSByZXR1cm4gRHJpdmVyX1Jlc3VsdAorICAgaXMKKyAgICAgIGZ1bmN0aW9uIERyaXZlciAoTWVuIDogTWVudTsKKyAgICAgICAgICAgICAgICAgICAgICAgS2V5IDogQ19JbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIERyaXZlciwgIm1lbnVfZHJpdmVyIik7CisKKyAgICAgIFIgOiBjb25zdGFudCBFdGlfRXJyb3IgOj0gRHJpdmVyIChNZW4sIENfSW50IChLZXkpKTsKKyAgIGJlZ2luCisgICAgICBpZiBSIC89IEVfT2sgdGhlbgorICAgICAgICAgY2FzZSBSIGlzCisgICAgICAgICAgICB3aGVuIEVfVW5rbm93bl9Db21tYW5kICA9PiByZXR1cm4gVW5rbm93bl9SZXF1ZXN0OworICAgICAgICAgICAgd2hlbiBFX05vX01hdGNoICAgICAgICAgPT4gcmV0dXJuIE5vX01hdGNoOworICAgICAgICAgICAgd2hlbiBFX1JlcXVlc3RfRGVuaWVkIHwKKyAgICAgICAgICAgICAgICAgRV9Ob3RfU2VsZWN0YWJsZSAgID0+IHJldHVybiBSZXF1ZXN0X0RlbmllZDsKKyAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+CisgICAgICAgICAgICAgICBFdGlfRXhjZXB0aW9uIChSKTsKKyAgICAgICAgIGVuZCBjYXNlOworICAgICAgZW5kIGlmOworICAgICAgcmV0dXJuIE1lbnVfT2s7CisgICBlbmQgRHJpdmVyOworCisgICBwcm9jZWR1cmUgRnJlZSAoSUEgICAgICAgICA6IGluIG91dCBJdGVtX0FycmF5X0FjY2VzczsKKyAgICAgICAgICAgICAgICAgICBGcmVlX0l0ZW1zIDogaW4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIGlzCisgICAgICBwcm9jZWR1cmUgUmVsZWFzZSBpcyBuZXcgQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24KKyAgICAgICAgKEl0ZW1fQXJyYXksIEl0ZW1fQXJyYXlfQWNjZXNzKTsKKyAgIGJlZ2luCisgICAgICBpZiBJQSAvPSBudWxsIGFuZCB0aGVuIEZyZWVfSXRlbXMgdGhlbgorICAgICAgICAgZm9yIEkgaW4gSUEnRmlyc3QgLi4gKElBJ0xhc3QgLSAxKSBsb29wCisgICAgICAgICAgICBpZiBJQSAoSSkgLz0gTnVsbF9JdGVtIHRoZW4KKyAgICAgICAgICAgICAgIERlbGV0ZSAoSUEgKEkpKTsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgZW5kIGlmOworICAgICAgUmVsZWFzZSAoSUEpOworICAgZW5kIEZyZWU7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIERlZmF1bHRfTWVudV9PcHRpb25zIHJldHVybiBNZW51X09wdGlvbl9TZXQKKyAgIGlzCisgICBiZWdpbgorICAgICAgcmV0dXJuIEdldF9PcHRpb25zIChOdWxsX01lbnUpOworICAgZW5kIERlZmF1bHRfTWVudV9PcHRpb25zOworCisgICBmdW5jdGlvbiBEZWZhdWx0X0l0ZW1fT3B0aW9ucyByZXR1cm4gSXRlbV9PcHRpb25fU2V0CisgICBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBHZXRfT3B0aW9ucyAoTnVsbF9JdGVtKTsKKyAgIGVuZCBEZWZhdWx0X0l0ZW1fT3B0aW9uczsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXM7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0YzY5ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkYgpAQCAtMCwwICsxLDIxNyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2UgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjIyICQKKy0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo1MToxMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKK3dpdGggSW50ZXJmYWNlcy5DOyB1c2UgSW50ZXJmYWNlcy5DOwordXNlIEludGVyZmFjZXM7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlIGlzCisKKyAgIHVzZSB0eXBlIFN5c3RlbS5CaXRfT3JkZXI7CisKKyAgIGZ1bmN0aW9uIEhhc19Nb3VzZSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1vdXNlX0F2YWlsIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIE1vdXNlX0F2YWlsLCAiX25jX2hhc19tb3VzZSIpOworICAgYmVnaW4KKyAgICAgIGlmIEhhc19LZXkgKEtleV9Nb3VzZSkgb3IgZWxzZSBNb3VzZV9BdmFpbCAvPSAwIHRoZW4KKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZW5kIGlmOworICAgZW5kIEhhc19Nb3VzZTsKKworICAgZnVuY3Rpb24gR2V0X01vdXNlIHJldHVybiBNb3VzZV9FdmVudAorICAgaXMKKyAgICAgIHR5cGUgRXZlbnRfQWNjZXNzIGlzIGFjY2VzcyBhbGwgTW91c2VfRXZlbnQ7CisKKyAgICAgIGZ1bmN0aW9uIEdldG1vdXNlIChFdiA6IEV2ZW50X0FjY2VzcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgR2V0bW91c2UsICJnZXRtb3VzZSIpOworCisgICAgICBFdmVudCA6IGFsaWFzZWQgTW91c2VfRXZlbnQ7CisgICBiZWdpbgorICAgICAgaWYgR2V0bW91c2UgKEV2ZW50J0FjY2VzcykgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICByZXR1cm4gRXZlbnQ7CisgICBlbmQgR2V0X01vdXNlOworCisgICBwcm9jZWR1cmUgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudCAoQnV0dG9uIDogaW4gTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICA6IGluIEJ1dHRvbl9TdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrICAgOiBpbiBvdXQgRXZlbnRfTWFzaykKKyAgIGlzCisgICAgICBCdXR0b25fTnIgOiBjb25zdGFudCBOYXR1cmFsIDo9IE1vdXNlX0J1dHRvbidQb3MgKEJ1dHRvbik7CisgICAgICBTdGF0ZV9OciAgOiBjb25zdGFudCBOYXR1cmFsIDo9IEJ1dHRvbl9TdGF0ZSdQb3MgKFN0YXRlKTsKKyAgIGJlZ2luCisgICAgICBpZiBCdXR0b24gaW4gTW9kaWZpZXJfS2V5cyBhbmQgdGhlbiBTdGF0ZSAvPSBQcmVzc2VkIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICBpZiBCdXR0b24gaW4gUmVhbF9CdXR0b25zIHRoZW4KKyAgICAgICAgICAgIE1hc2sgOj0gTWFzayBvciAoKDIgKiogKDYgKiBCdXR0b25fTnIpKSAqKiBTdGF0ZV9Ocik7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBNYXNrIDo9IE1hc2sgb3IgKEJVVFRPTl9DVFJMICoqIChCdXR0b25fTnIgLSA0KSk7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudDsKKworICAgcHJvY2VkdXJlIFJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnRzIChCdXR0b24gOiBpbiBNb3VzZV9CdXR0b247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICA6IGluIEJ1dHRvbl9TdGF0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2sgICA6IGluIG91dCBFdmVudF9NYXNrKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBmb3IgUyBpbiBCdXR0b25fU3RhdGVzJ1JhbmdlIGxvb3AKKyAgICAgICAgIGlmIFN0YXRlIChTKSB0aGVuCisgICAgICAgICAgICBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50IChCdXR0b24sIFMsIE1hc2spOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgUmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudHM7CisKKyAgIGZ1bmN0aW9uIFN0YXJ0X01vdXNlIChNYXNrIDogRXZlbnRfTWFzayA6PSBBbGxfRXZlbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFdmVudF9NYXNrCisgICBpcworICAgICAgZnVuY3Rpb24gTU1hc2sgKE0gOiBFdmVudF9NYXNrOworICAgICAgICAgICAgICAgICAgICAgIE8gOiBhY2Nlc3MgRXZlbnRfTWFzaykgcmV0dXJuIEV2ZW50X01hc2s7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNTWFzaywgIm1vdXNlbWFzayIpOworICAgICAgUiAgIDogRXZlbnRfTWFzazsKKyAgICAgIE9sZCA6IGFsaWFzZWQgRXZlbnRfTWFzazsKKyAgIGJlZ2luCisgICAgICBSIDo9IE1NYXNrIChNYXNrLCBPbGQnQWNjZXNzKTsKKyAgICAgIGlmIFIgPSBOb19FdmVudHMgdGhlbgorICAgICAgICAgQmVlcDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBPbGQ7CisgICBlbmQgU3RhcnRfTW91c2U7CisKKyAgIHByb2NlZHVyZSBFbmRfTW91c2UgKE1hc2sgOiBpbiBFdmVudF9NYXNrIDo9IE5vX0V2ZW50cykKKyAgIGlzCisgICBiZWdpbgorICAgICAgaWYgTWFzayAvPSBOb19FdmVudHMgdGhlbgorICAgICAgICAgQmVlcDsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBFbmRfTW91c2U7CisKKyAgIHByb2NlZHVyZSBEaXNwYXRjaF9FdmVudCAoTWFzayAgIDogaW4gIEV2ZW50X01hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbiA6IG91dCBNb3VzZV9CdXR0b247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICA6IG91dCBCdXR0b25fU3RhdGUpOworCisgICBwcm9jZWR1cmUgRGlzcGF0Y2hfRXZlbnQgKE1hc2sgICA6IGluICBFdmVudF9NYXNrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gOiBvdXQgTW91c2VfQnV0dG9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgOiBvdXQgQnV0dG9uX1N0YXRlKSBpcworICAgICAgTCA6IEV2ZW50X01hc2s7CisgICBiZWdpbgorICAgICAgQnV0dG9uIDo9IEFsdDsgIC0tICBwcmVzZXQgdG8gbm9uIHJlYWwgYnV0dG9uOworICAgICAgaWYgKE1hc2sgYW5kIEJVVFRPTjFfRVZFTlRTKSAvPSAwIHRoZW4KKyAgICAgICAgIEJ1dHRvbiA6PSBMZWZ0OworICAgICAgZWxzaWYgKE1hc2sgYW5kIEJVVFRPTjJfRVZFTlRTKSAvPSAwIHRoZW4KKyAgICAgICAgIEJ1dHRvbiA6PSBNaWRkbGU7CisgICAgICBlbHNpZiAoTWFzayBhbmQgQlVUVE9OM19FVkVOVFMpIC89IDAgdGhlbgorICAgICAgICAgQnV0dG9uIDo9IFJpZ2h0OworICAgICAgZWxzaWYgKE1hc2sgYW5kIEJVVFRPTjRfRVZFTlRTKSAvPSAwIHRoZW4KKyAgICAgICAgIEJ1dHRvbiA6PSBCdXR0b240OworICAgICAgZW5kIGlmOworICAgICAgaWYgQnV0dG9uIGluIFJlYWxfQnV0dG9ucyB0aGVuCisgICAgICAgICBMIDo9IDIgKiogKDYgKiBNb3VzZV9CdXR0b24nUG9zIChCdXR0b24pKTsKKyAgICAgICAgIGZvciBJIGluIEJ1dHRvbl9TdGF0ZSdSYW5nZSBsb29wCisgICAgICAgICAgICBpZiAoTWFzayBhbmQgTCkgLz0gMCB0aGVuCisgICAgICAgICAgICAgICBTdGF0ZSA6PSBJOworICAgICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIEwgOj0gMiAqIEw7CisgICAgICAgICBlbmQgbG9vcDsKKyAgICAgIGVsc2UKKyAgICAgICAgIFN0YXRlIDo9IFByZXNzZWQ7CisgICAgICAgICBpZiAoTWFzayBhbmQgQlVUVE9OX0NUUkwpIC89IDAgdGhlbgorICAgICAgICAgICAgQnV0dG9uIDo9IENvbnRyb2w7CisgICAgICAgICBlbHNpZiAoTWFzayBhbmQgQlVUVE9OX1NISUZUKSAvPSAwIHRoZW4KKyAgICAgICAgICAgIEJ1dHRvbiA6PSBTaGlmdDsKKyAgICAgICAgIGVsc2lmIChNYXNrIGFuZCBCVVRUT05fQUxUKSAvPSAwIHRoZW4KKyAgICAgICAgICAgIEJ1dHRvbiA6PSBBbHQ7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICBlbmQgRGlzcGF0Y2hfRXZlbnQ7CisKKyAgIHByb2NlZHVyZSBHZXRfRXZlbnQgKEV2ZW50ICA6IGluICBNb3VzZV9FdmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFkgICAgICA6IG91dCBMaW5lX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgWCAgICAgIDogb3V0IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbiA6IG91dCBNb3VzZV9CdXR0b247CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgOiBvdXQgQnV0dG9uX1N0YXRlKQorICAgaXMKKyAgICAgIE1hc2sgIDogY29uc3RhbnQgRXZlbnRfTWFzayA6PSBFdmVudC5Cc3RhdGU7CisgICBiZWdpbgorICAgICAgWCA6PSBDb2x1bW5fUG9zaXRpb24gKEV2ZW50LlgpOworICAgICAgWSA6PSBMaW5lX1Bvc2l0aW9uICAgKEV2ZW50LlkpOworICAgICAgRGlzcGF0Y2hfRXZlbnQgKE1hc2ssIEJ1dHRvbiwgU3RhdGUpOworICAgZW5kIEdldF9FdmVudDsKKworICAgcHJvY2VkdXJlIFVuZ2V0X01vdXNlIChFdmVudCA6IGluIE1vdXNlX0V2ZW50KQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFVuZ2V0bW91c2UgKEV2IDogTW91c2VfRXZlbnQpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFVuZ2V0bW91c2UsICJ1bmdldG1vdXNlIik7CisgICBiZWdpbgorICAgICAgaWYgVW5nZXRtb3VzZSAoRXZlbnQpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFVuZ2V0X01vdXNlOworCisgICBmdW5jdGlvbiBFbmNsb3NlZF9Jbl9XaW5kb3cgKFdpbiAgICA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50ICA6IE1vdXNlX0V2ZW50KSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFdlbmNsb3NlIChXaW4gOiBXaW5kb3c7IFkgOiBDX0ludDsgWCA6IENfSW50KQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDdXJzZXNfQm9vbDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFdlbmNsb3NlLCAid2VuY2xvc2UiKTsKKyAgIGJlZ2luCisgICAgICBpZiBXZW5jbG9zZSAoV2luLCBDX0ludCAoRXZlbnQuWSksIENfSW50IChFdmVudC5YKSkKKyAgICAgICAgPSBDdXJzZXNfQm9vbF9GYWxzZSB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBFbmNsb3NlZF9Jbl9XaW5kb3c7CisKKyAgIGZ1bmN0aW9uIE1vdXNlX0ludGVydmFsIChNc2VjIDogTmF0dXJhbCA6PSAyMDApIHJldHVybiBOYXR1cmFsCisgICBpcworICAgICAgZnVuY3Rpb24gTW91c2VpbnRlcnZhbCAoTXNlYyA6IENfSW50KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBNb3VzZWludGVydmFsLCAibW91c2VpbnRlcnZhbCIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBOYXR1cmFsIChNb3VzZWludGVydmFsIChDX0ludCAoTXNlYykpKTsKKyAgIGVuZCBNb3VzZV9JbnRlcnZhbDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMWVmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYgpAQCAtMCwwICsxLDc4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGEgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEludGVyZmFjZXMuQzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7Cit1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4Oword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscy5Vc2VyX0RhdGEgaXMKKworICAgdXNlIHR5cGUgSW50ZXJmYWNlcy5DLmludDsKKworICAgcHJvY2VkdXJlIFNldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIDogaW4gVXNlcl9BY2Nlc3MpCisgICBpcworICAgICAgZnVuY3Rpb24gU2V0X1BhbmVsX1VzZXJwdHIgKFBhbiAgOiBQYW5lbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyIDogVXNlcl9BY2Nlc3MpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9QYW5lbF9Vc2VycHRyLCAic2V0X3BhbmVsX3VzZXJwdHIiKTsKKyAgIGJlZ2luCisgICAgICBpZiBTZXRfUGFuZWxfVXNlcnB0ciAoUGFuLCBEYXRhKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9Vc2VyX0RhdGE7CisKKyAgIGZ1bmN0aW9uIEdldF9Vc2VyX0RhdGEgKFBhbiAgOiBpbiAgUGFuZWwpIHJldHVybiBVc2VyX0FjY2VzcworICAgaXMKKyAgICAgIGZ1bmN0aW9uIFBhbmVsX1VzZXJwdHIgKFBhbiA6IFBhbmVsKSByZXR1cm4gVXNlcl9BY2Nlc3M7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQYW5lbF9Vc2VycHRyLCAicGFuZWxfdXNlcnB0ciIpOworICAgYmVnaW4KKyAgICAgIHJldHVybiBQYW5lbF9Vc2VycHRyIChQYW4pOworICAgZW5kIEdldF9Vc2VyX0RhdGE7CisKKyAgIHByb2NlZHVyZSBHZXRfVXNlcl9EYXRhIChQYW4gIDogaW4gIFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgOiBvdXQgVXNlcl9BY2Nlc3MpCisgICBpcworICAgYmVnaW4KKyAgICAgIERhdGEgOj0gR2V0X1VzZXJfRGF0YSAoUGFuKTsKKyAgIGVuZCBHZXRfVXNlcl9EYXRhOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMuVXNlcl9EYXRhOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlMThmYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZGIKQEAgLTAsMCArMSwxNjUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMyAkCistLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7Cit3aXRoIEludGVyZmFjZXMuQzsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzIGlzCisKKyAgIHVzZSB0eXBlIEludGVyZmFjZXMuQy5pbnQ7CisKKyAgIGZ1bmN0aW9uIENyZWF0ZSAoV2luIDogV2luZG93KSByZXR1cm4gUGFuZWwKKyAgIGlzCisgICAgICBmdW5jdGlvbiBOZXdwYW5lbCAoV2luIDogV2luZG93KSByZXR1cm4gUGFuZWw7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBOZXdwYW5lbCwgIm5ld19wYW5lbCIpOworCisgICAgICBQYW4gOiBQYW5lbDsKKyAgIGJlZ2luCisgICAgICBQYW4gOj0gTmV3cGFuZWwgKFdpbik7CisgICAgICBpZiBQYW4gPSBOdWxsX1BhbmVsIHRoZW4KKyAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBQYW47CisgICBlbmQgQ3JlYXRlOworCisgICBwcm9jZWR1cmUgQm90dG9tIChQYW4gOiBpbiBQYW5lbCkKKyAgIGlzCisgICAgICBmdW5jdGlvbiBCb3R0b21wYW5lbCAoUGFuIDogUGFuZWwpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIEJvdHRvbXBhbmVsLCAiYm90dG9tX3BhbmVsIik7CisgICBiZWdpbgorICAgICAgaWYgQm90dG9tcGFuZWwgKFBhbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBCb3R0b207CisKKyAgIHByb2NlZHVyZSBUb3AgKFBhbiA6IGluIFBhbmVsKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFRvcHBhbmVsIChQYW4gOiBQYW5lbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgVG9wcGFuZWwsICJ0b3BfcGFuZWwiKTsKKyAgIGJlZ2luCisgICAgICBpZiBUb3BwYW5lbCAoUGFuKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIFRvcDsKKworICAgcHJvY2VkdXJlIFNob3cgKFBhbiA6IGluIFBhbmVsKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIFNob3dwYW5lbCAoUGFuIDogUGFuZWwpIHJldHVybiBDX0ludDsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFNob3dwYW5lbCwgInNob3dfcGFuZWwiKTsKKyAgIGJlZ2luCisgICAgICBpZiBTaG93cGFuZWwgKFBhbikgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBTaG93OworCisgICBwcm9jZWR1cmUgSGlkZSAoUGFuIDogaW4gUGFuZWwpCisgICBpcworICAgICAgZnVuY3Rpb24gSGlkZXBhbmVsIChQYW4gOiBQYW5lbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgSGlkZXBhbmVsLCAiaGlkZV9wYW5lbCIpOworICAgYmVnaW4KKyAgICAgIGlmIEhpZGVwYW5lbCAoUGFuKSA9IEN1cnNlc19FcnIgdGhlbgorICAgICAgICAgcmFpc2UgUGFuZWxfRXhjZXB0aW9uOworICAgICAgZW5kIGlmOworICAgZW5kIEhpZGU7CisKKyAgIGZ1bmN0aW9uIEdldF9XaW5kb3cgKFBhbiA6IFBhbmVsKSByZXR1cm4gV2luZG93CisgICBpcworICAgICAgZnVuY3Rpb24gUGFuZWxfV2luIChQYW4gOiBQYW5lbCkgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIFBhbmVsX1dpbiwgInBhbmVsX3dpbmRvdyIpOworCisgICAgICBXaW4gOiBjb25zdGFudCBXaW5kb3cgOj0gUGFuZWxfV2luIChQYW4pOworICAgYmVnaW4KKyAgICAgIGlmIFdpbiA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJhaXNlIFBhbmVsX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgICAgIHJldHVybiBXaW47CisgICBlbmQgR2V0X1dpbmRvdzsKKworICAgcHJvY2VkdXJlIFJlcGxhY2UgKFBhbiA6IGluIFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IGluIFdpbmRvdykKKyAgIGlzCisgICAgICBmdW5jdGlvbiBSZXBsYWNlX1BhbiAoUGFuIDogUGFuZWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luIDogV2luZG93KSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBSZXBsYWNlX1BhbiwgInJlcGxhY2VfcGFuZWwiKTsKKyAgIGJlZ2luCisgICAgICBpZiBSZXBsYWNlX1BhbiAoUGFuLCBXaW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUmVwbGFjZTsKKworICAgcHJvY2VkdXJlIE1vdmUgKFBhbiAgICA6IGluIFBhbmVsOworICAgICAgICAgICAgICAgICAgIExpbmUgICA6IGluIExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgQ29sdW1uIDogaW4gQ29sdW1uX1Bvc2l0aW9uKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIE1vdmUgKFBhbiAgICA6IFBhbmVsOworICAgICAgICAgICAgICAgICAgICAgTGluZSAgIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICBDb2x1bW4gOiBDX0ludCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgTW92ZSwgIm1vdmVfcGFuZWwiKTsKKyAgIGJlZ2luCisgICAgICBpZiBNb3ZlIChQYW4sIENfSW50IChMaW5lKSwgQ19JbnQgKENvbHVtbikpID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgTW92ZTsKKworICAgZnVuY3Rpb24gSXNfSGlkZGVuIChQYW4gOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiBQYW5lbF9IaWRkZW4gKFBhbiA6IFBhbmVsKSByZXR1cm4gQ19JbnQ7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCBQYW5lbF9IaWRkZW4sICJwYW5lbF9oaWRkZW4iKTsKKyAgIGJlZ2luCisgICAgICBpZiBQYW5lbF9IaWRkZW4gKFBhbikgPSBDdXJzZXNfRmFsc2UgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgSXNfSGlkZGVuOworCisgICBwcm9jZWR1cmUgRGVsZXRlIChQYW4gOiBpbiBvdXQgUGFuZWwpCisgICBpcworICAgICAgZnVuY3Rpb24gRGVsX1BhbmVsIChQYW4gOiBQYW5lbCkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgRGVsX1BhbmVsLCAiZGVsX3BhbmVsIik7CisgICBiZWdpbgorICAgICAgaWYgRGVsX1BhbmVsIChQYW4pID0gQ3Vyc2VzX0VyciB0aGVuCisgICAgICAgICByYWlzZSBQYW5lbF9FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICAgICBQYW4gOj0gTnVsbF9QYW5lbDsKKyAgIGVuZCBEZWxldGU7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NmNkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRiCkBAIC0wLDAgKzEsNzcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUHV0V2luICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4zICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKword2l0aCBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uQ19TdHJlYW1zOword2l0aCBJbnRlcmZhY2VzLkNfU3RyZWFtczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUHV0V2luIGlzCisKKyAgIHBhY2thZ2UgSUNTIHJlbmFtZXMgSW50ZXJmYWNlcy5DX1N0cmVhbXM7CisgICBwYWNrYWdlIEFDUyByZW5hbWVzIEFkYS5TdHJlYW1zLlN0cmVhbV9JTy5DX1N0cmVhbXM7CisgICB1c2UgdHlwZSBDX0ludDsKKworICAgcHJvY2VkdXJlIFB1dF9XaW5kb3cgKFdpbiAgOiBXaW5kb3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSA6IEFkYS5TdHJlYW1zLlN0cmVhbV9JTy5GaWxlX1R5cGUpIGlzCisgICAgICBmdW5jdGlvbiBwdXR3aW4gKFdpbiA6IFdpbmRvdzsgZiA6IElDUy5GSUxFcykgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgcHV0d2luLCAicHV0d2luIik7CisKKyAgICAgIFIgOiBjb25zdGFudCBDX0ludCA6PSBwdXR3aW4gKFdpbiwgQUNTLkNfU3RyZWFtIChGaWxlKSk7CisgICBiZWdpbgorICAgICAgaWYgUiAvPSBDdXJzZXNfT2sgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBQdXRfV2luZG93OworCisgICBmdW5jdGlvbiBHZXRfV2luZG93IChGaWxlIDogQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkZpbGVfVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXaW5kb3cgaXMKKyAgICAgIGZ1bmN0aW9uIGdldHdpbiAoZiA6IElDUy5GSUxFcykgcmV0dXJuIFdpbmRvdzsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIGdldHdpbiwgImdldHdpbiIpOworCisgICAgICBXIDogY29uc3RhbnQgV2luZG93IDo9IGdldHdpbiAoQUNTLkNfU3RyZWFtIChGaWxlKSk7CisgICBiZWdpbgorICAgICAgaWYgVyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVzsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfV2luZG93OworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QdXRXaW47CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzAyYmRjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkcwpAQCAtMCwwICsxLDUwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlB1dFdpbiAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCisKK3dpdGggQWRhLlN0cmVhbXMuU3RyZWFtX0lPOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUHV0V2luIGlzCisKKyAgIHByb2NlZHVyZSBQdXRfV2luZG93IChXaW4gIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgOiBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uRmlsZV9UeXBlKTsKKworICAgZnVuY3Rpb24gR2V0X1dpbmRvdyAoRmlsZSAgOiBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uRmlsZV9UeXBlKSByZXR1cm4gV2luZG93OworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QdXRXaW47CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2M2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkYgpAQCAtMCwwICsxLDE2MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjExICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4Oword2l0aCBJbnRlcmZhY2VzLkM7IHVzZSBJbnRlcmZhY2VzLkM7Cit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOyB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1jYXAgaXMKKworICAgZnVuY3Rpb24gR2V0X0VudHJ5IChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbgorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHRnZXRlbnQgKG5hbWUgOiBjaGFyX2FycmF5OyB2YWwgOiBjaGFyX2FycmF5KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGdldGVudCwgInRnZXRlbnQiKTsKKyAgICAgIE5hbWVUeHQgOiBjaGFyX2FycmF5ICgwIC4uIE5hbWUnTGVuZ3RoKTsKKyAgICAgIExlbmd0aCAgOiBzaXplX3Q7CisgICAgICBpZ25vcmVkIDogY29uc3RhbnQgY2hhcl9hcnJheSAoMCAuLiAwKSA6PSAoMCA9PiBudWwpOworICAgICAgcmVzdWx0ICA6IENfSW50OworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIE5hbWVUeHQsIExlbmd0aCk7CisgICAgICByZXN1bHQgOj0gdGdldGVudCAoY2hhcl9hcnJheSAoaWdub3JlZCksIE5hbWVUeHQpOworICAgICAgaWYgcmVzdWx0ID0gLTEgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBCb29sZWFuJ1ZhbCAocmVzdWx0KTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfRW50cnk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gR2V0X0ZsYWcgKE5hbWUgOiBTdHJpbmcpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gdGdldGZsYWcgKGlkIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGdldGZsYWcsICJ0Z2V0ZmxhZyIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBOYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoTmFtZSwgVHh0LCBMZW5ndGgpOworICAgICAgaWYgdGdldGZsYWcgKFR4dCkgPSAwIHRoZW4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9GbGFnOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBHZXRfTnVtYmVyIChOYW1lICAgOiBpbiAgU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICA6IG91dCBJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCA6IG91dCBCb29sZWFuKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHRnZXRudW0gKGlkIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGdldG51bSwgInRnZXRudW0iKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIFZhbHVlIDo9IEludGVnZXIgKHRnZXRudW0gKFR4dCkpOworICAgICAgaWYgVmFsdWUgPSAtMSB0aGVuCisgICAgICAgICBSZXN1bHQgOj0gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICBSZXN1bHQgOj0gIFRydWU7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X051bWJlcjsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgR2V0X1N0cmluZyAoTmFtZSAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICA6IG91dCBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0IDogb3V0IEJvb2xlYW4pCisgICBpcworICAgICAgZnVuY3Rpb24gdGdldHN0ciAoaWQgIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA6IGNoYXJfYXJyYXkpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB0Z2V0c3RyLCAidGdldHN0ciIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBOYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICAgICBUeHQyICAgOiBjaGFyc19wdHI7CisgICAgICB0eXBlIHQgaXMgbmV3IGNoYXJfYXJyYXkgKDAgLi4gMTAyNCk7IC0tICBkb2VzIGl0IG5lZWQgdG8gYmUgMTAyND8KKyAgICAgIFJldHVybl9CdWZmZXIgOiBjb25zdGFudCB0IDo9IChvdGhlcnMgPT4gbnVsKTsKKyAgIGJlZ2luCisgICAgICBUb19DIChOYW1lLCBUeHQsIExlbmd0aCk7CisgICAgICBUeHQyIDo9IHRnZXRzdHIgKFR4dCwgY2hhcl9hcnJheSAoUmV0dXJuX0J1ZmZlcikpOworICAgICAgaWYgVHh0MiA9IE51bGxfUHRyIHRoZW4KKyAgICAgICAgIFJlc3VsdCA6PSBGYWxzZTsKKyAgICAgIGVsc2UKKyAgICAgICAgIFZhbHVlIDo9IEZpbGxfU3RyaW5nIChUeHQyKTsKKyAgICAgICAgIFJlc3VsdCA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9TdHJpbmc7CisKKyAgIGZ1bmN0aW9uIEdldF9TdHJpbmcgKE5hbWUgOiBTdHJpbmcpIHJldHVybiBCb29sZWFuCisgICBpcworICAgICAgZnVuY3Rpb24gdGdldHN0ciAoSWQgIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA6IGNoYXJfYXJyYXkpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB0Z2V0c3RyLCAidGdldHN0ciIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBOYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICAgICBUeHQyICAgOiBjaGFyc19wdHI7CisgICAgICB0eXBlIHQgaXMgbmV3IGNoYXJfYXJyYXkgKDAgLi4gMTAyNCk7IC0tICBkb2VzIGl0IG5lZWQgdG8gYmUgMTAyND8KKyAgICAgIFBob255X1R4dCA6IGNvbnN0YW50IHQgOj0gKG90aGVycyA9PiBudWwpOworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIFR4dDIgOj0gdGdldHN0ciAoVHh0LCBjaGFyX2FycmF5IChQaG9ueV9UeHQpKTsKKyAgICAgIGlmIFR4dDIgPSBOdWxsX1B0ciB0aGVuCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICAgIGVuZCBpZjsKKyAgIGVuZCBHZXRfU3RyaW5nOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZ1bmN0aW9uIFRHb3RvIChDYXAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgQ29sIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgIFJvdyA6IExpbmVfUG9zaXRpb24pIHJldHVybiBUZXJtY2FwX1N0cmluZyBpcworICAgICAgZnVuY3Rpb24gdGdvdG8gKGNhcCA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgY29sIDogQ19JbnQ7CisgICAgICAgICAgICAgICAgICAgICAgcm93IDogQ19JbnQpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB0Z290byk7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIENhcCdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKENhcCwgVHh0LCBMZW5ndGgpOworICAgICAgcmV0dXJuIFRlcm1jYXBfU3RyaW5nIChGaWxsX1N0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGdvdG8gKFR4dCwgQ19JbnQgKENvbCksIENfSW50IChSb3cpKSkpOworICAgZW5kIFRHb3RvOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDAxMzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZHMKQEAgLTAsMCArMSw4MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWNhcCAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjMgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwIGlzCisgICBwcmFnbWEgUHJlZWxhYm9yYXRlIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1jYXApOworCisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIHwgTWFuIHBhZ2UgY3Vyc190ZXJtY2FwLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIE5vdCBpbXBsZW1lbnRlZDogIHRwdXRzIChzZWUgY3Vyc190ZXJtaW5mbykKKworICAgdHlwZSBUZXJtY2FwX1N0cmluZyBpcyBuZXcgU3RyaW5nOworCisgICAtLSAgfAorICAgZnVuY3Rpb24gVEdvdG8gKENhcCA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICBDb2wgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgUm93IDogTGluZV9Qb3NpdGlvbikgcmV0dXJuIFRlcm1jYXBfU3RyaW5nOworICAgLS0gIEFLQTogdGdvdG8oKQorCisgICAtLSAgfAorICAgZnVuY3Rpb24gR2V0X0VudHJ5IChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0E6IHRnZXRlbnQoKQorCisgICAtLSAgfAorICAgZnVuY3Rpb24gR2V0X0ZsYWcgKE5hbWUgOiBTdHJpbmcpIHJldHVybiBCb29sZWFuOworICAgLS0gIEFLQTogdGdldGZsYWcoKQorCisgICAtLSAgfAorICAgcHJvY2VkdXJlIEdldF9OdW1iZXIgKE5hbWUgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgOiBvdXQgSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgOiBvdXQgQm9vbGVhbik7CisgICAtLSAgQUtBOiB0Z2V0bnVtKCkKKworICAgLS0gIHwKKyAgIHByb2NlZHVyZSBHZXRfU3RyaW5nIChOYW1lICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgIDogb3V0IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgOiBvdXQgQm9vbGVhbik7CisgICBmdW5jdGlvbiBHZXRfU3RyaW5nIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBSZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyBmb3VuZC4KKyAgIC0tICBBS0E6IHRnZXRzdHIoKQorCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtY2FwOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZmJlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZGIKQEAgLTAsMCArMSwxNjEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm8gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS41ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4Oword2l0aCBJbnRlcmZhY2VzLkM7IHVzZSBJbnRlcmZhY2VzLkM7Cit3aXRoIEludGVyZmFjZXMuQy5TdHJpbmdzOyB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Cit3aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm8gaXMKKworICAgZnVuY3Rpb24gSXNfTWludXNPbmVfUG9pbnRlciAoUCA6IGluIGNoYXJzX3B0cikgcmV0dXJuIEJvb2xlYW47CisKKyAgIGZ1bmN0aW9uIElzX01pbnVzT25lX1BvaW50ZXIgKFAgOiBpbiBjaGFyc19wdHIpIHJldHVybiBCb29sZWFuIGlzCisgICAgICB0eXBlIFdlaXJkX0FkZHJlc3MgaXMgbmV3IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgICAgIEludmFsaWRfUG9pbnRlciA6IGNvbnN0YW50IFdlaXJkX0FkZHJlc3MgOj0gLTE7CisgICAgICBmdW5jdGlvbiBUb19XZWlyZCBpcyBuZXcgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgICAgIChTb3VyY2UgPT4gY2hhcnNfcHRyLCBUYXJnZXQgPT4gV2VpcmRfQWRkcmVzcyk7CisgICBiZWdpbgorICAgICAgaWYgVG9fV2VpcmQgKFApID0gSW52YWxpZF9Qb2ludGVyIHRoZW4KKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZWxzZQorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZW5kIGlmOworICAgZW5kIElzX01pbnVzT25lX1BvaW50ZXI7CisgICBwcmFnbWEgSW5saW5lIChJc19NaW51c09uZV9Qb2ludGVyKTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmdW5jdGlvbiBHZXRfRmxhZyAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiB0aWdldGZsYWcgKGlkIDogY2hhcl9hcnJheSkgcmV0dXJuIEN1cnNlc19Cb29sOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGlnZXRmbGFnKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gTmFtZSdMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIGlmIHRpZ2V0ZmxhZyAoVHh0KSA9IEN1cnNlc19Cb29sIChDdXJzZXNfVHJ1ZSkgdGhlbgorICAgICAgICAgcmV0dXJuIFRydWU7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gRmFsc2U7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X0ZsYWc7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgcHJvY2VkdXJlIEdldF9TdHJpbmcgKE5hbWUgICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgOiBvdXQgVGVybWluZm9fU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCA6IG91dCBCb29sZWFuKQorICAgaXMKKyAgICAgIGZ1bmN0aW9uIHRpZ2V0c3RyIChpZCA6IGNoYXJfYXJyYXkpIHJldHVybiBjaGFyc19wdHI7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB0aWdldHN0ciwgInRpZ2V0c3RyIik7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIE5hbWUnTGVuZ3RoKTsKKyAgICAgIExlbmd0aCA6IHNpemVfdDsKKyAgICAgIFR4dDIgOiBjaGFyc19wdHI7CisgICBiZWdpbgorICAgICAgVG9fQyAoTmFtZSwgVHh0LCBMZW5ndGgpOworICAgICAgVHh0MiA6PSB0aWdldHN0ciAoVHh0KTsKKyAgICAgIGlmIFR4dDIgPSBOdWxsX1B0ciB0aGVuCisgICAgICAgICBSZXN1bHQgOj0gRmFsc2U7CisgICAgICBlbHNpZiBJc19NaW51c09uZV9Qb2ludGVyIChUeHQyKSB0aGVuCisgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOworICAgICAgZWxzZQorICAgICAgICAgVmFsdWUgIDo9IFRlcm1pbmZvX1N0cmluZyAoRmlsbF9TdHJpbmcgKFR4dDIpKTsKKyAgICAgICAgIFJlc3VsdCA6PSBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIEdldF9TdHJpbmc7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gSGFzX1N0cmluZyAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEJvb2xlYW4KKyAgIGlzCisgICAgICBmdW5jdGlvbiB0aWdldHN0ciAoaWQgOiBjaGFyX2FycmF5KSByZXR1cm4gY2hhcnNfcHRyOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGlnZXRzdHIsICJ0aWdldHN0ciIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBOYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICAgICBUeHQyIDogY2hhcnNfcHRyOworICAgYmVnaW4KKyAgICAgIFRvX0MgKE5hbWUsIFR4dCwgTGVuZ3RoKTsKKyAgICAgIFR4dDIgOj0gdGlnZXRzdHIgKFR4dCk7CisgICAgICBpZiBUeHQyID0gTnVsbF9QdHIgdGhlbgorICAgICAgICAgcmV0dXJuIEZhbHNlOworICAgICAgZWxzaWYgSXNfTWludXNPbmVfUG9pbnRlciAoVHh0MikgdGhlbgorICAgICAgICAgcmFpc2UgQ3Vyc2VzX0V4Y2VwdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgIHJldHVybiBUcnVlOworICAgICAgZW5kIGlmOworICAgZW5kIEhhc19TdHJpbmc7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZnVuY3Rpb24gR2V0X051bWJlciAoTmFtZSA6IFN0cmluZykgcmV0dXJuIEludGVnZXIgaXMKKyAgICAgIGZ1bmN0aW9uIHRpZ2V0c3RyIChzIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdGlnZXRzdHIpOworICAgICAgVHh0ICAgIDogY2hhcl9hcnJheSAoMCAuLiBOYW1lJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICBiZWdpbgorICAgICAgVG9fQyAoTmFtZSwgVHh0LCBMZW5ndGgpOworICAgICAgcmV0dXJuIEludGVnZXIgKHRpZ2V0c3RyIChUeHQpKTsKKyAgIGVuZCBHZXRfTnVtYmVyOworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHByb2NlZHVyZSBQdXRfU3RyaW5nIChTdHIgICAgOiBUZXJtaW5mb19TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgYWZmY250IDogTmF0dXJhbCA6PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIHB1dGMgICA6IHB1dGN0eXBlIDo9IG51bGwpIGlzCisgICAgICBmdW5jdGlvbiB0cHV0cyAoc3RyICAgIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICBhZmZjbnQgOiBDX0ludDsKKyAgICAgICAgICAgICAgICAgICAgICBwdXRjICAgOiBwdXRjdHlwZSkgcmV0dXJuIENfSW50OworICAgICAgZnVuY3Rpb24gcHV0cCAoc3RyIDogY2hhcl9hcnJheSkgcmV0dXJuIENfSW50OworICAgICAgcHJhZ21hIEltcG9ydCAoQywgdHB1dHMpOworICAgICAgcHJhZ21hIEltcG9ydCAoQywgcHV0cCk7CisgICAgICBUeHQgICAgOiBjaGFyX2FycmF5ICgwIC4uIFN0cidMZW5ndGgpOworICAgICAgTGVuZ3RoIDogc2l6ZV90OworICAgICAgRXJyIDogQ19JbnQ7CisgICBiZWdpbgorICAgICAgVG9fQyAoU3RyaW5nIChTdHIpLCBUeHQsIExlbmd0aCk7CisgICAgICBpZiBwdXRjID0gbnVsbCB0aGVuCisgICAgICAgICBFcnIgOj0gcHV0cCAoVHh0KTsKKyAgICAgIGVsc2UKKyAgICAgICAgIEVyciA6PSB0cHV0cyAoVHh0LCBDX0ludCAoYWZmY250KSwgcHV0Yyk7CisgICAgICBlbmQgaWY7CisgICAgICBpZiBFcnIgPSBDdXJzZXNfRXJyIHRoZW4KKyAgICAgICAgIHJhaXNlIEN1cnNlc19FeGNlcHRpb247CisgICAgICBlbmQgaWY7CisgICBlbmQgUHV0X1N0cmluZzsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGVybWluZm87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzOWJmMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkcwpAQCAtMCwwICsxLDgxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtaW5mbyAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2l0aCBJbnRlcmZhY2VzLkM7CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtaW5mbyBpcworICAgcHJhZ21hIFByZWVsYWJvcmF0ZSAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtaW5mbyk7CisKKyAgIC0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAtLSAgfCBNYW4gcGFnZSBjdXJzX3Rlcm1pbmZvLjN4CisgICAtLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgLS0gIE5vdCBpbXBsZW1lbnRlZDogIHNldHVwdGVybSwgc2V0dGVybSwgc2V0X2N1cnRlcm0sIGRlbF9jdXJ0ZXJtLAorICAgLS0gICAgICAgICAgICAgICAgICAgIHJlc3RhcnR0ZXJtLCB0cGFybSwgcHV0cCwgdmlkcHV0cywgIHZpZGF0dHIsCisgICAtLSAgICAgICAgICAgICAgICAgICAgbXZjdXIKKworICAgdHlwZSBUZXJtaW5mb19TdHJpbmcgaXMgbmV3IFN0cmluZzsKKworICAgLS0gIHwKKyAgIHByb2NlZHVyZSBHZXRfU3RyaW5nIChOYW1lICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgIDogb3V0IFRlcm1pbmZvX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgOiBvdXQgQm9vbGVhbik7CisgICBmdW5jdGlvbiBIYXNfU3RyaW5nIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0E6IHRpZ2V0c3RyKCkKKworICAgLS0gIHwKKyAgIGZ1bmN0aW9uIEdldF9GbGFnIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKKyAgIC0tICBBS0E6IHRpZ2V0ZmxhZygpCisKKyAgIC0tICB8CisgICBmdW5jdGlvbiBHZXRfTnVtYmVyIChOYW1lIDogU3RyaW5nKSByZXR1cm4gSW50ZWdlcjsKKyAgIC0tICBBS0E6IHRpZ2V0bnVtKCkKKworICAgdHlwZSBwdXRjdHlwZSBpcyBhY2Nlc3MgZnVuY3Rpb24gKGMgOiBJbnRlcmZhY2VzLkMuaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVyZmFjZXMuQy5pbnQ7CisgICBwcmFnbWEgQ29udmVudGlvbiAoQywgcHV0Y3R5cGUpOworCisgICAtLSAgfAorICAgcHJvY2VkdXJlIFB1dF9TdHJpbmcgKFN0ciAgICA6IFRlcm1pbmZvX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZmZjbnQgOiBOYXR1cmFsIDo9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHV0YyAgIDogcHV0Y3R5cGUgOj0gbnVsbCk7CisgICAtLSAgQUtBOiB0cHV0cygpCisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1pbmZvOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjQ4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZGIKQEAgLTAsMCArMSwxMjggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eCAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMiAkCistLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eCBpcworCisgICBwcm9jZWR1cmUgUHV0X0J1ZgorICAgICAoV2luICAgIDogaW4gV2luZG93OworICAgICAgQnVmICAgIDogaW4gU3RyaW5nOworICAgICAgV2lkdGggIDogaW4gRmllbGQ7CisgICAgICBTaWduYWwgOiBpbiBCb29sZWFuIDo9IFRydWU7CisgICAgICBManVzdCAgOiBpbiBCb29sZWFuIDo9IEZhbHNlKQorICAgaXMKKyAgICAgIEwgICA6IEZpZWxkOworICAgICAgTGVuIDogRmllbGQ7CisgICAgICBXICAgOiBGaWVsZCA6PSBXaWR0aDsKKyAgICAgIExDICA6IExpbmVfQ291bnQ7CisgICAgICBDQyAgOiBDb2x1bW5fQ291bnQ7CisgICAgICBZICAgOiBMaW5lX1Bvc2l0aW9uOworICAgICAgWCAgIDogQ29sdW1uX1Bvc2l0aW9uOworCisgICAgICBwcm9jZWR1cmUgT3V0cHV0IChGcm9tLCBUbyA6IEZpZWxkKTsKKworICAgICAgcHJvY2VkdXJlIE91dHB1dCAoRnJvbSwgVG8gOiBGaWVsZCkKKyAgICAgIGlzCisgICAgICBiZWdpbgorICAgICAgICAgaWYgTGVuID4gMCB0aGVuCisgICAgICAgICAgICBpZiBXID0gMCB0aGVuCisgICAgICAgICAgICAgICBXIDo9IExlbjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGlmIExlbiA+IFcgdGhlbgorICAgICAgICAgICAgICAgLS0gIExSTSBBMTAuNiAoNykgc2F5cyB0aGlzCisgICAgICAgICAgICAgICBXIDo9IExlbjsKKyAgICAgICAgICAgIGVuZCBpZjsKKworICAgICAgICAgICAgcHJhZ21hIEFzc2VydCAoTGVuIDw9IFcpOworICAgICAgICAgICAgR2V0X1NpemUgKFdpbiwgTEMsIENDKTsKKyAgICAgICAgICAgIGlmIENvbHVtbl9Db3VudCAoTGVuKSA+IENDIHRoZW4KKyAgICAgICAgICAgICAgIGlmIFNpZ25hbCB0aGVuCisgICAgICAgICAgICAgICAgICByYWlzZSBMYXlvdXRfRXJyb3I7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICBpZiBMZW4gPCBXIGFuZCB0aGVuIG5vdCBManVzdCB0aGVuCisgICAgICAgICAgICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICAgICAgICAgICBGaWxsZXIgOiBjb25zdGFudCBTdHJpbmcgKDEgLi4gKFcgLSBMZW4pKQorICAgICAgICAgICAgICAgICAgICAgICA6PSAob3RoZXJzID0+ICcgJyk7CisgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgUHV0IChXaW4sIEZpbGxlcik7CisgICAgICAgICAgICAgICAgICBlbmQ7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChXaW4sIFksIFgpOworICAgICAgICAgICAgICAgaWYgKFggKyBDb2x1bW5fUG9zaXRpb24gKExlbikpID4gQ0MgdGhlbgorICAgICAgICAgICAgICAgICAgTmV3X0xpbmUgKFdpbik7CisgICAgICAgICAgICAgICBlbmQgaWY7CisgICAgICAgICAgICAgICBQdXQgKFdpbiwgQnVmIChGcm9tIC4uIFRvKSk7CisgICAgICAgICAgICAgICBpZiBMZW4gPCBXIGFuZCB0aGVuIExqdXN0IHRoZW4KKyAgICAgICAgICAgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgICAgICAgICAgIEZpbGxlciA6IGNvbnN0YW50IFN0cmluZyAoMSAuLiAoVyAtIExlbikpCisgICAgICAgICAgICAgICAgICAgICAgIDo9IChvdGhlcnMgPT4gJyAnKTsKKyAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICBQdXQgKFdpbiwgRmlsbGVyKTsKKyAgICAgICAgICAgICAgICAgIGVuZDsKKyAgICAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgICAgIGVuZCBpZjsKKyAgICAgICAgIGVuZCBpZjsKKyAgICAgIGVuZCBPdXRwdXQ7CisKKyAgIGJlZ2luCisgICAgICBwcmFnbWEgQXNzZXJ0IChXaW4gLz0gTnVsbF9XaW5kb3cpOworICAgICAgaWYgTGp1c3QgdGhlbgorICAgICAgICAgTCA6PSAxOworICAgICAgICAgZm9yIEkgaW4gMSAuLiBCdWYnTGVuZ3RoIGxvb3AKKyAgICAgICAgICAgIGV4aXQgd2hlbiBCdWYgKEwpID0gJyAnOworICAgICAgICAgICAgTCA6PSBMICsgMTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgTGVuIDo9IEwgLSAxOworICAgICAgICAgT3V0cHV0ICgxLCBMZW4pOworICAgICAgZWxzZSAgLS0gaW5wdXQgYnVmZmVyIGlzIG5vdCBsZWZ0IGp1c3RpZmllZAorICAgICAgICAgTCA6PSBCdWYnTGVuZ3RoOworICAgICAgICAgZm9yIEkgaW4gMSAuLiBCdWYnTGVuZ3RoIGxvb3AKKyAgICAgICAgICAgIGV4aXQgd2hlbiBCdWYgKEwpID0gJyAnOworICAgICAgICAgICAgTCA6PSBMIC0gMTsKKyAgICAgICAgIGVuZCBsb29wOworICAgICAgICAgTGVuIDo9IEJ1ZidMZW5ndGggLSBMOworICAgICAgICAgT3V0cHV0IChMICsgMSwgQnVmJ0xlbmd0aCk7CisgICAgICBlbmQgaWY7CisgICBlbmQgUHV0X0J1ZjsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YTliZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkcwpAQCAtMCwwICsxLDU1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXggICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTMgJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJpdmF0ZSBwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXggaXMKKyAgIC0tICBwcmFnbWEgUHJlZWxhYm9yYXRlIChBdXgpOworCisgICAtLSAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBUZXh0X0lPIG91dHB1dCByb3V0aW5lcyBmb3IgbnVtZXJpYworICAgLS0gIGFuZCBlbnVtZXJhdGlvbiB0eXBlcy4KKyAgIC0tCisgICBwcm9jZWR1cmUgUHV0X0J1ZgorICAgICAoV2luICAgIDogaW4gV2luZG93OyAgICAgICAgICAgICAgIC0tIFRoZSBvdXRwdXQgd2luZG93CisgICAgICBCdWYgICAgOiBpbiBTdHJpbmc7ICAgICAgICAgICAgICAgLS0gVGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSB0ZXh0CisgICAgICBXaWR0aCAgOiBpbiBGaWVsZDsgICAgICAgICAgICAgICAgLS0gVGhlIHdpZHRoIG9mIHRoZSBvdXRwdXQgZmllbGQKKyAgICAgIFNpZ25hbCA6IGluIEJvb2xlYW4gOj0gVHJ1ZTsgICAgICAtLSBJZiB0cnVlLCB3ZSByYWlzZSBMYXlvdXRfRXJyb3IKKyAgICAgIExqdXN0ICA6IGluIEJvb2xlYW4gOj0gRmFsc2UpOyAgICAtLSBUaGUgQnVmIGlzIGxlZnQganVzdGlmaWVkCisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1ODcxZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZGIKQEAgLTAsMCArMSw3MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU87CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQ29tcGxleF9JTyBpcworCisgICBwYWNrYWdlIEZJTyBpcyBuZXcKKyAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPIChDb21wbGV4X1R5cGVzLlJlYWwnQmFzZSk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtIDogaW4gQ29tcGxleDsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICBpcworICAgYmVnaW4KKyAgICAgIFB1dCAoV2luLCAnKCcpOworICAgICAgRklPLlB1dCAoV2luLCBJdGVtLlJlLCBGb3JlLCBBZnQsIEV4cCk7CisgICAgICBQdXQgKFdpbiwgJywnKTsKKyAgICAgIEZJTy5QdXQgKFdpbiwgSXRlbS5JbSwgRm9yZSwgQWZ0LCBFeHApOworICAgICAgUHV0IChXaW4sICcpJyk7CisgICBlbmQgUHV0OworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtIDogaW4gQ29tcGxleDsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICBpcworICAgYmVnaW4KKyAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgRm9yZSwgQWZ0LCBFeHApOworICAgZW5kIFB1dDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkcyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzZWIzYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHMKQEAgLTAsMCArMSw3MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuTnVtZXJpY3MuR2VuZXJpY19Db21wbGV4X1R5cGVzOworCitnZW5lcmljCisgICB3aXRoIHBhY2thZ2UgQ29tcGxleF9UeXBlcyBpcyBuZXcgQWRhLk51bWVyaWNzLkdlbmVyaWNfQ29tcGxleF9UeXBlcyAoPD4pOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Db21wbGV4X0lPIGlzCisKKyAgIHVzZSBDb21wbGV4X1R5cGVzOworCisgICBEZWZhdWx0X0ZvcmUgOiBGaWVsZCA6PSAyOworICAgRGVmYXVsdF9BZnQgIDogRmllbGQgOj0gUmVhbCdEaWdpdHMgLSAxOworICAgRGVmYXVsdF9FeHAgIDogRmllbGQgOj0gMzsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBDb21wbGV4OworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gOiBpbiBDb21wbGV4OworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCk7CisKK3ByaXZhdGUKKyAgIHByYWdtYSBJbmxpbmUgKFB1dCk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQ29tcGxleF9JTzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMDY4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiCkBAIC0wLDAgKzEsNzUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRGVjaW1hbF9JTyAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlRleHRfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRGVjaW1hbF9JTyBpcworCisgICBwYWNrYWdlIEF1eCByZW5hbWVzIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisgICBwYWNrYWdlIERJTyBpcyBuZXcgQWRhLlRleHRfSU8uRGVjaW1hbF9JTyAoTnVtKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKQorICAgaXMKKyAgICAgIEJ1ZiA6IFN0cmluZyAoMSAuLiBGaWVsZCdMYXN0KTsKKyAgICAgIExlbiA6IEZpZWxkIDo9IEZvcmUgKyAxICsgQWZ0OworICAgYmVnaW4KKyAgICAgIGlmIEV4cCA+IDAgdGhlbgorICAgICAgICAgTGVuIDo9IExlbiArIDEgKyBFeHA7CisgICAgICBlbmQgaWY7CisgICAgICBESU8uUHV0IChCdWYsIEl0ZW0sIEFmdCwgRXhwKTsKKyAgICAgIEF1eC5QdXRfQnVmIChXaW4sIEJ1ZiwgTGVuLCBGYWxzZSk7CisgICBlbmQgUHV0OworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtICA6IGluIE51bTsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApIGlzCisgICBiZWdpbgorICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtLCBGb3JlLCBBZnQsIEV4cCk7CisgICBlbmQgUHV0OworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjZmZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkcwpAQCAtMCwwICsxLDY2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU8gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5lcmljCisgICB0eXBlIE51bSBpcyBkZWx0YSA8PiBkaWdpdHMgPD47CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU8gaXMKKworICAgRGVmYXVsdF9Gb3JlIDogRmllbGQgOj0gTnVtJ0ZvcmU7CisgICBEZWZhdWx0X0FmdCAgOiBGaWVsZCA6PSBOdW0nQWZ0OworICAgRGVmYXVsdF9FeHAgIDogRmllbGQgOj0gMDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKKworcHJpdmF0ZQorICAgcHJhZ21hIElubGluZSAoUHV0KTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5EZWNpbWFsX0lPOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg4NzNhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZGIKQEAgLTAsMCArMSw4MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU8gICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVGV4dF9JTzsKK3dpdGggQWRhLkNoYXJhY3RlcnMuSGFuZGxpbmc7IHVzZSBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTyBpcworCisgICBwYWNrYWdlIEF1eCByZW5hbWVzIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisgICBwYWNrYWdlIEVJTyBpcyBuZXcgQWRhLlRleHRfSU8uRW51bWVyYXRpb25fSU8gKEVudW0pOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gIDogaW4gRW51bTsKKyAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIFNldCAgIDogaW4gVHlwZV9TZXQgOj0gRGVmYXVsdF9TZXR0aW5nKQorICAgaXMKKyAgICAgIEJ1ZiAgOiBTdHJpbmcgKDEgLi4gRmllbGQnTGFzdCk7CisgICAgICBUc2V0IDogQWRhLlRleHRfSU8uVHlwZV9TZXQ7CisgICBiZWdpbgorICAgICAgaWYgU2V0IC89IE1peGVkX0Nhc2UgdGhlbgorICAgICAgICAgVHNldCA6PSBBZGEuVGV4dF9JTy5UeXBlX1NldCdWYWwgKFR5cGVfU2V0J1BvcyAoU2V0KSk7CisgICAgICBlbHNlCisgICAgICAgICBUc2V0IDo9IEFkYS5UZXh0X0lPLkxvd2VyX0Nhc2U7CisgICAgICBlbmQgaWY7CisgICAgICBFSU8uUHV0IChCdWYsIEl0ZW0sIFRzZXQpOworICAgICAgaWYgU2V0ID0gTWl4ZWRfQ2FzZSB0aGVuCisgICAgICAgICBCdWYgKEJ1ZidGaXJzdCkgOj0gVG9fVXBwZXIgKEJ1ZiAoQnVmJ0ZpcnN0KSk7CisgICAgICBlbmQgaWY7CisgICAgICBBdXguUHV0X0J1ZiAoV2luLCBCdWYsIFdpZHRoLCBUcnVlLCBUcnVlKTsKKyAgIGVuZCBQdXQ7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gIDogaW4gRW51bTsKKyAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIFNldCAgIDogaW4gVHlwZV9TZXQgOj0gRGVmYXVsdF9TZXR0aW5nKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0sIFdpZHRoLCBTZXQpOworICAgZW5kIFB1dDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyMWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzCkBAIC0wLDAgKzEsNjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbmVyaWMKKyAgIHR5cGUgRW51bSBpcyAoPD4pOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5FbnVtZXJhdGlvbl9JTyBpcworCisgICBEZWZhdWx0X1dpZHRoIDogRmllbGQgOj0gMDsKKyAgIERlZmF1bHRfU2V0dGluZyA6IFR5cGVfU2V0IDo9IE1peGVkX0Nhc2U7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgIDogaW4gV2luZG93OworICAgICAgSXRlbSAgOiBpbiBFbnVtOworICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgU2V0ICAgOiBpbiBUeXBlX1NldCA6PSBEZWZhdWx0X1NldHRpbmcpOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtICA6IGluIEVudW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBTZXQgICA6IGluIFR5cGVfU2V0IDo9IERlZmF1bHRfU2V0dGluZyk7CisKK3ByaXZhdGUKKyAgIHByYWdtYSBJbmxpbmUgKFB1dCk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkYiBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NGYxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkYgpAQCAtMCwwICsxLDc1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTyAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5UZXh0X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZpeGVkX0lPIGlzCisKKyAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eDsKKyAgIHBhY2thZ2UgRklYSU8gaXMgbmV3IEFkYS5UZXh0X0lPLkZpeGVkX0lPIChOdW0pOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gIDogaW4gV2luZG93OworICAgICAgSXRlbSA6IGluIE51bTsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICBpcworICAgICAgQnVmIDogU3RyaW5nICgxIC4uIEZpZWxkJ0xhc3QpOworICAgICAgTGVuIDogRmllbGQgOj0gRm9yZSArIDEgKyBBZnQ7CisgICBiZWdpbgorICAgICAgaWYgRXhwID4gMCB0aGVuCisgICAgICAgICBMZW4gOj0gTGVuICsgMSArIEV4cDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIEZJWElPLlB1dCAoQnVmLCBJdGVtLCBBZnQsIEV4cCk7CisgICAgICBBdXguUHV0X0J1ZiAoV2luLCBCdWYsIExlbiwgRmFsc2UpOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKSBpcworICAgYmVnaW4KKyAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgRm9yZSwgQWZ0LCBFeHApOworICAgZW5kIFB1dDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4YjEzNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzCkBAIC0wLDAgKzEsNjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZpeGVkX0lPICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbmVyaWMKKyAgIHR5cGUgTnVtIGlzIGRlbHRhIDw+OworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTyBpcworCisgICBEZWZhdWx0X0ZvcmUgOiBGaWVsZCA6PSBOdW0nRm9yZTsKKyAgIERlZmF1bHRfQWZ0ICA6IEZpZWxkIDo9IE51bSdBZnQ7CisgICBEZWZhdWx0X0V4cCAgOiBGaWVsZCA6PSAwOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChXaW4gIDogaW4gV2luZG93OworICAgICAgSXRlbSA6IGluIE51bTsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtICA6IGluIE51bTsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApOworCitwcml2YXRlCisgICBwcmFnbWEgSW5saW5lIChQdXQpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZpeGVkX0lPOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQyNjFiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGIKQEAgLTAsMCArMSw3NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU8gICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjEwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2l0aCBBZGEuVGV4dF9JTzsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkF1eDsKKworcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTyBpcworCisgICBwYWNrYWdlIEF1eCByZW5hbWVzIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisgICBwYWNrYWdlIEZJTyBpcyBuZXcgQWRhLlRleHRfSU8uRmxvYXRfSU8gKE51bSk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtIDogaW4gTnVtOworICAgICAgRm9yZSA6IGluIEZpZWxkIDo9IERlZmF1bHRfRm9yZTsKKyAgICAgIEFmdCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0FmdDsKKyAgICAgIEV4cCAgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0V4cCkKKyAgIGlzCisgICAgICBCdWYgOiBTdHJpbmcgKDEgLi4gRmllbGQnTGFzdCk7CisgICAgICBMZW4gOiBGaWVsZCA6PSBGb3JlICsgMSArIEFmdDsKKyAgIGJlZ2luCisgICAgICBpZiBFeHAgPiAwIHRoZW4KKyAgICAgICAgIExlbiA6PSBMZW4gKyAxICsgRXhwOworICAgICAgZW5kIGlmOworICAgICAgRklPLlB1dCAoQnVmLCBJdGVtLCBBZnQsIEV4cCk7CisgICAgICBBdXguUHV0X0J1ZiAoV2luLCBCdWYsIExlbiwgRmFsc2UpOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSA6IGluIE51bTsKKyAgICAgIEZvcmUgOiBpbiBGaWVsZCA6PSBEZWZhdWx0X0ZvcmU7CisgICAgICBBZnQgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9BZnQ7CisgICAgICBFeHAgIDogaW4gRmllbGQgOj0gRGVmYXVsdF9FeHApCisgICBpcworICAgYmVnaW4KKyAgICAgIFB1dCAoR2V0X1dpbmRvdywgSXRlbSwgRm9yZSwgQWZ0LCBFeHApOworICAgZW5kIFB1dDsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1NjUyMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzCkBAIC0wLDAgKzEsNjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbmVyaWMKKyAgIHR5cGUgTnVtIGlzIGRpZ2l0cyA8PjsKKworcGFja2FnZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU8gaXMKKworICAgRGVmYXVsdF9Gb3JlIDogRmllbGQgOj0gMjsKKyAgIERlZmF1bHRfQWZ0ICA6IEZpZWxkIDo9IE51bSdEaWdpdHMgLSAxOworICAgRGVmYXVsdF9FeHAgIDogRmllbGQgOj0gMzsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBGb3JlIDogaW4gRmllbGQgOj0gRGVmYXVsdF9Gb3JlOworICAgICAgQWZ0ICA6IGluIEZpZWxkIDo9IERlZmF1bHRfQWZ0OworICAgICAgRXhwICA6IGluIEZpZWxkIDo9IERlZmF1bHRfRXhwKTsKKworcHJpdmF0ZQorICAgcHJhZ21hIElubGluZSAoUHV0KTsKKworZW5kIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZGIgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTRlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRiCkBAIC0wLDAgKzEsNzAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTyAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMCAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlRleHRfSU87Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTyBpcworCisgICBwYWNrYWdlIEF1eCByZW5hbWVzIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5BdXg7CisgICBwYWNrYWdlIElJTyBpcyBuZXcgQWRhLlRleHRfSU8uSW50ZWdlcl9JTyAoTnVtKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtICA6IGluIE51bTsKKyAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIEJhc2UgIDogaW4gTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKQorICAgaXMKKyAgICAgIEJ1ZiA6IFN0cmluZyAoMSAuLiBGaWVsZCdMYXN0KTsKKyAgIGJlZ2luCisgICAgICBJSU8uUHV0IChCdWYsIEl0ZW0sIEJhc2UpOworICAgICAgQXV4LlB1dF9CdWYgKFdpbiwgQnVmLCBXaWR0aCk7CisgICBlbmQgUHV0OworCisgICBwcm9jZWR1cmUgUHV0CisgICAgIChJdGVtICA6IGluIE51bTsKKyAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIEJhc2UgIDogaW4gTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0sIFdpZHRoLCBCYXNlKTsKKyAgIGVuZCBQdXQ7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjE2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzCkBAIC0wLDAgKzEsNjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTyAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbmVyaWMKKyAgIHR5cGUgTnVtIGlzIHJhbmdlIDw+OworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5JbnRlZ2VyX0lPIGlzCisKKyAgIERlZmF1bHRfV2lkdGggOiBGaWVsZCA6PSBOdW0nV2lkdGg7CisgICBEZWZhdWx0X0Jhc2UgIDogTnVtYmVyX0Jhc2UgOj0gMTA7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgIDogaW4gV2luZG93OworICAgICAgSXRlbSAgOiBpbiBOdW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKEl0ZW0gIDogaW4gTnVtOworICAgICAgV2lkdGggOiBpbiBGaWVsZCA6PSBEZWZhdWx0X1dpZHRoOworICAgICAgQmFzZSAgOiBpbiBOdW1iZXJfQmFzZSA6PSBEZWZhdWx0X0Jhc2UpOworCitwcml2YXRlCisgICBwcmFnbWEgSW5saW5lIChQdXQpOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2MxZDRhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkYgpAQCAtMCwwICsxLDcwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLk1vZHVsYXJfSU8gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXRoIEFkYS5UZXh0X0lPOword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworCitwYWNrYWdlIGJvZHkgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLk1vZHVsYXJfSU8gaXMKKworICAgcGFja2FnZSBBdXggcmVuYW1lcyBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4OworICAgcGFja2FnZSBNSU8gaXMgbmV3IEFkYS5UZXh0X0lPLk1vZHVsYXJfSU8gKE51bSk7CisKKyAgIHByb2NlZHVyZSBQdXQKKyAgICAgKFdpbiAgIDogaW4gV2luZG93OworICAgICAgSXRlbSAgOiBpbiBOdW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSkKKyAgIGlzCisgICAgICBCdWYgOiBTdHJpbmcgKDEgLi4gRmllbGQnTGFzdCk7CisgICBiZWdpbgorICAgICAgTUlPLlB1dCAoQnVmLCBJdGVtLCBCYXNlKTsKKyAgICAgIEF1eC5QdXRfQnVmIChXaW4sIEJ1ZiwgV2lkdGgpOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSkKKyAgIGlzCisgICBiZWdpbgorICAgICAgUHV0IChHZXRfV2luZG93LCBJdGVtLCBXaWR0aCwgQmFzZSk7CisgICBlbmQgUHV0OworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLk1vZHVsYXJfSU87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRzIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTg3MDZmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkcwpAQCAtMCwwICsxLDYzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLk1vZHVsYXJfSU8gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5lcmljCisgICB0eXBlIE51bSBpcyBtb2QgPD47CisKK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLk1vZHVsYXJfSU8gaXMKKworICAgRGVmYXVsdF9XaWR0aCA6IEZpZWxkIDo9IE51bSdXaWR0aDsKKyAgIERlZmF1bHRfQmFzZSAgOiBOdW1iZXJfQmFzZSA6PSAxMDsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoV2luICAgOiBpbiBXaW5kb3c7CisgICAgICBJdGVtICA6IGluIE51bTsKKyAgICAgIFdpZHRoIDogaW4gRmllbGQgOj0gRGVmYXVsdF9XaWR0aDsKKyAgICAgIEJhc2UgIDogaW4gTnVtYmVyX0Jhc2UgOj0gRGVmYXVsdF9CYXNlKTsKKworICAgcHJvY2VkdXJlIFB1dAorICAgICAoSXRlbSAgOiBpbiBOdW07CisgICAgICBXaWR0aCA6IGluIEZpZWxkIDo9IERlZmF1bHRfV2lkdGg7CisgICAgICBCYXNlICA6IGluIE51bWJlcl9CYXNlIDo9IERlZmF1bHRfQmFzZSk7CisKK3ByaXZhdGUKKyAgIHByYWdtYSBJbmxpbmUgKFB1dCk7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uTW9kdWxhcl9JTzsKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRiIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1YjEyMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRiCkBAIC0wLDAgKzEsMzM3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuMTggJAorLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2FnZSBib2R5IFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTyBpcworCisgICBEZWZhdWx0X1dpbmRvdyA6IFdpbmRvdyA6PSBOdWxsX1dpbmRvdzsKKworICAgcHJvY2VkdXJlIFNldF9XaW5kb3cgKFdpbiA6IGluIFdpbmRvdykKKyAgIGlzCisgICBiZWdpbgorICAgICAgRGVmYXVsdF9XaW5kb3cgOj0gV2luOworICAgZW5kIFNldF9XaW5kb3c7CisKKyAgIGZ1bmN0aW9uIEdldF9XaW5kb3cgcmV0dXJuIFdpbmRvdworICAgaXMKKyAgIGJlZ2luCisgICAgICBpZiBEZWZhdWx0X1dpbmRvdyA9IE51bGxfV2luZG93IHRoZW4KKyAgICAgICAgIHJldHVybiBTdGFuZGFyZF9XaW5kb3c7CisgICAgICBlbHNlCisgICAgICAgICByZXR1cm4gRGVmYXVsdF9XaW5kb3c7CisgICAgICBlbmQgaWY7CisgICBlbmQgR2V0X1dpbmRvdzsKKyAgIHByYWdtYSBJbmxpbmUgKEdldF9XaW5kb3cpOworCisgICBwcm9jZWR1cmUgRmx1c2ggKFdpbiA6IGluIFdpbmRvdykKKyAgIGlzCisgICBiZWdpbgorICAgICAgUmVmcmVzaCAoV2luKTsKKyAgIGVuZCBGbHVzaDsKKworICAgcHJvY2VkdXJlIEZsdXNoCisgICBpcworICAgYmVnaW4KKyAgICAgIEZsdXNoIChHZXRfV2luZG93KTsKKyAgIGVuZCBGbHVzaDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFNwZWNpZmljYXRpb24gb2YgbGluZSBhbmQgcGFnZSBsZW5ndGhzIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAtLSAgVGhlcmUgYXJlIG5vIHNldCByb3V0aW5lcyBpbiB0aGlzIHBhY2thZ2UuIEkgYXNzdW1lLCB0aGF0IHlvdSBhbGxvY2F0ZQorICAgLS0gIHRoZSB3aW5kb3cgd2l0aCBhbiBhcHByb3ByaWF0ZSBzaXplLgorICAgLS0gIEEgc2Nyb2xsLXdpbmRvdyBpcyBpbnRlcnByZXRlZCBhcyBhbiBwYWdlIHdpdGggdW5ib3VuZGVkIHBhZ2UgbGVuZ3RoLAorICAgLS0gIGkuZS4gaXQgcmV0dXJucyB0aGUgY29udmVudGlvbmFsIDAgYXMgcGFnZSBsZW5ndGguCisKKyAgIGZ1bmN0aW9uIExpbmVfTGVuZ3RoIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBDb3VudAorICAgaXMKKyAgICAgIE5fTGluZXMgOiBMaW5lX0NvdW50OworICAgICAgTl9Db2xzICA6IENvbHVtbl9Db3VudDsKKyAgIGJlZ2luCisgICAgICBHZXRfU2l6ZSAoV2luLCBOX0xpbmVzLCBOX0NvbHMpOworICAgICAgLS0gIGlmIE5hdHVyYWwgKE5fQ29scykgPiBOYXR1cmFsIChDb3VudCdMYXN0KSB0aGVuCisgICAgICAtLSAgICAgcmFpc2UgTGF5b3V0X0Vycm9yOworICAgICAgLS0gIGVuZCBpZjsKKyAgICAgIHJldHVybiBDb3VudCAoTl9Db2xzKTsKKyAgIGVuZCBMaW5lX0xlbmd0aDsKKworICAgZnVuY3Rpb24gTGluZV9MZW5ndGggcmV0dXJuIENvdW50CisgICBpcworICAgYmVnaW4KKyAgICAgIHJldHVybiBMaW5lX0xlbmd0aCAoR2V0X1dpbmRvdyk7CisgICBlbmQgTGluZV9MZW5ndGg7CisKKyAgIGZ1bmN0aW9uIFBhZ2VfTGVuZ3RoIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBDb3VudAorICAgaXMKKyAgICAgIE5fTGluZXMgOiBMaW5lX0NvdW50OworICAgICAgTl9Db2xzICA6IENvbHVtbl9Db3VudDsKKyAgIGJlZ2luCisgICAgICBpZiBTY3JvbGxpbmdfQWxsb3dlZCAoV2luKSB0aGVuCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgIEdldF9TaXplIChXaW4sIE5fTGluZXMsIE5fQ29scyk7CisgICAgICAgICAtLSAgaWYgTmF0dXJhbCAoTl9MaW5lcykgPiBOYXR1cmFsIChDb3VudCdMYXN0KSB0aGVuCisgICAgICAgICAtLSAgICAgcmFpc2UgTGF5b3V0X0Vycm9yOworICAgICAgICAgLS0gIGVuZCBpZjsKKyAgICAgICAgIHJldHVybiBDb3VudCAoTl9MaW5lcyk7CisgICAgICBlbmQgaWY7CisgICBlbmQgUGFnZV9MZW5ndGg7CisKKyAgIGZ1bmN0aW9uIFBhZ2VfTGVuZ3RoIHJldHVybiBDb3VudAorICAgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gUGFnZV9MZW5ndGggKEdldF9XaW5kb3cpOworICAgZW5kIFBhZ2VfTGVuZ3RoOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENvbHVtbiwgTGluZSwgYW5kIFBhZ2UgQ29udHJvbCAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgTmV3X0xpbmUgKFdpbiA6IGluIFdpbmRvdzsgU3BhY2luZyA6IGluIFBvc2l0aXZlX0NvdW50IDo9IDEpCisgICBpcworICAgICAgUF9TaXplIDogY29uc3RhbnQgQ291bnQgOj0gUGFnZV9MZW5ndGggKFdpbik7CisgICBiZWdpbgorICAgICAgaWYgbm90IFNwYWNpbmcnVmFsaWQgdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgZm9yIEkgaW4gMSAuLiBTcGFjaW5nIGxvb3AKKyAgICAgICAgIGlmIFBfU2l6ZSA+IDAgYW5kIHRoZW4gTGluZSAoV2luKSA+PSBQX1NpemUgdGhlbgorICAgICAgICAgICAgTmV3X1BhZ2UgKFdpbik7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICBBZGQgKFdpbiwgQVNDSUkuTEYpOworICAgICAgICAgZW5kIGlmOworICAgICAgZW5kIGxvb3A7CisgICBlbmQgTmV3X0xpbmU7CisKKyAgIHByb2NlZHVyZSBOZXdfTGluZSAoU3BhY2luZyA6IGluIFBvc2l0aXZlX0NvdW50IDo9IDEpCisgICBpcworICAgYmVnaW4KKyAgICAgIE5ld19MaW5lIChHZXRfV2luZG93LCBTcGFjaW5nKTsKKyAgIGVuZCBOZXdfTGluZTsKKworICAgcHJvY2VkdXJlIE5ld19QYWdlIChXaW4gOiBpbiBXaW5kb3cpCisgICBpcworICAgYmVnaW4KKyAgICAgIENsZWFyIChXaW4pOworICAgZW5kIE5ld19QYWdlOworCisgICBwcm9jZWR1cmUgTmV3X1BhZ2UKKyAgIGlzCisgICBiZWdpbgorICAgICAgTmV3X1BhZ2UgKEdldF9XaW5kb3cpOworICAgZW5kIE5ld19QYWdlOworCisgICBwcm9jZWR1cmUgU2V0X0NvbCAoV2luIDogaW4gV2luZG93OyAgVG8gOiBpbiBQb3NpdGl2ZV9Db3VudCkKKyAgIGlzCisgICAgICBZICA6IExpbmVfUG9zaXRpb247CisgICAgICBYMSA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIFgyIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTiAgOiBOYXR1cmFsOworICAgYmVnaW4KKyAgICAgIGlmIG5vdCBUbydWYWxpZCB0aGVuCisgICAgICAgICByYWlzZSBDb25zdHJhaW50X0Vycm9yOworICAgICAgZW5kIGlmOworCisgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChXaW4sIFksIFgxKTsKKyAgICAgIE4gIDo9IE5hdHVyYWwgKFRvKTsgTiA6PSBOIC0gMTsKKyAgICAgIFgyIDo9IENvbHVtbl9Qb3NpdGlvbiAoTik7CisgICAgICBpZiBYMSA+IFgyIHRoZW4KKyAgICAgICAgIE5ld19MaW5lIChXaW4sIDEpOworICAgICAgICAgWDEgOj0gMDsKKyAgICAgIGVuZCBpZjsKKyAgICAgIGlmIFgxIDwgWDIgdGhlbgorICAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgRmlsbGVyIDogY29uc3RhbnQgU3RyaW5nIChJbnRlZ2VyIChYMSkgLi4gKEludGVnZXIgKFgyKSAtIDEpKQorICAgICAgICAgICAgICA6PSAob3RoZXJzID0+ICcgJyk7CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgUHV0IChXaW4sIEZpbGxlcik7CisgICAgICAgICBlbmQ7CisgICAgICBlbmQgaWY7CisgICBlbmQgU2V0X0NvbDsKKworICAgcHJvY2VkdXJlIFNldF9Db2wgKFRvIDogaW4gUG9zaXRpdmVfQ291bnQpCisgICBpcworICAgYmVnaW4KKyAgICAgIFNldF9Db2wgKEdldF9XaW5kb3csIFRvKTsKKyAgIGVuZCBTZXRfQ29sOworCisgICBwcm9jZWR1cmUgU2V0X0xpbmUgKFdpbiA6IGluIFdpbmRvdzsgVG8gOiBpbiBQb3NpdGl2ZV9Db3VudCkKKyAgIGlzCisgICAgICBZMSA6IExpbmVfUG9zaXRpb247CisgICAgICBZMiA6IExpbmVfUG9zaXRpb247CisgICAgICBYICA6IENvbHVtbl9Qb3NpdGlvbjsKKyAgICAgIE4gIDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBpZiBub3QgVG8nVmFsaWQgdGhlbgorICAgICAgICAgcmFpc2UgQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIGVuZCBpZjsKKworICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoV2luLCBZMSwgWCk7CisgICAgICBOICA6PSBOYXR1cmFsIChUbyk7IE4gOj0gTiAtIDE7CisgICAgICBZMiA6PSBMaW5lX1Bvc2l0aW9uIChOKTsKKyAgICAgIGlmIFkyIDwgWTEgdGhlbgorICAgICAgICAgTmV3X1BhZ2UgKFdpbik7CisgICAgICAgICBZMSA6PSAwOworICAgICAgZW5kIGlmOworICAgICAgaWYgWTEgPCBZMiB0aGVuCisgICAgICAgICBOZXdfTGluZSAoV2luLCBQb3NpdGl2ZV9Db3VudCAoWTIgLSBZMSkpOworICAgICAgZW5kIGlmOworICAgZW5kIFNldF9MaW5lOworCisgICBwcm9jZWR1cmUgU2V0X0xpbmUgKFRvIDogaW4gUG9zaXRpdmVfQ291bnQpCisgICBpcworICAgYmVnaW4KKyAgICAgIFNldF9MaW5lIChHZXRfV2luZG93LCBUbyk7CisgICBlbmQgU2V0X0xpbmU7CisKKyAgIGZ1bmN0aW9uIENvbCAoV2luIDogaW4gV2luZG93KSByZXR1cm4gUG9zaXRpdmVfQ291bnQKKyAgIGlzCisgICAgICBZIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgIFggOiBDb2x1bW5fUG9zaXRpb247CisgICAgICBOIDogTmF0dXJhbDsKKyAgIGJlZ2luCisgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChXaW4sIFksIFgpOworICAgICAgTiA6PSBOYXR1cmFsIChYKTsgTiA6PSBOICsgMTsKKyAgICAgIC0tICBpZiBOID4gTmF0dXJhbCAoQ291bnQnTGFzdCkgdGhlbgorICAgICAgLS0gICAgIHJhaXNlIExheW91dF9FcnJvcjsKKyAgICAgIC0tICBlbmQgaWY7CisgICAgICByZXR1cm4gUG9zaXRpdmVfQ291bnQgKE4pOworICAgZW5kIENvbDsKKworICAgZnVuY3Rpb24gQ29sIHJldHVybiBQb3NpdGl2ZV9Db3VudAorICAgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gQ29sIChHZXRfV2luZG93KTsKKyAgIGVuZCBDb2w7CisKKyAgIGZ1bmN0aW9uIExpbmUgKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50CisgICBpcworICAgICAgWSA6IExpbmVfUG9zaXRpb247CisgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTiA6IE5hdHVyYWw7CisgICBiZWdpbgorICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoV2luLCBZLCBYKTsKKyAgICAgIE4gOj0gTmF0dXJhbCAoWSk7IE4gOj0gTiArIDE7CisgICAgICAtLSAgaWYgTiA+IE5hdHVyYWwgKENvdW50J0xhc3QpIHRoZW4KKyAgICAgIC0tICAgICByYWlzZSBMYXlvdXRfRXJyb3I7CisgICAgICAtLSAgZW5kIGlmOworICAgICAgcmV0dXJuIFBvc2l0aXZlX0NvdW50IChOKTsKKyAgIGVuZCBMaW5lOworCisgICBmdW5jdGlvbiBMaW5lIHJldHVybiBQb3NpdGl2ZV9Db3VudAorICAgaXMKKyAgIGJlZ2luCisgICAgICByZXR1cm4gTGluZSAoR2V0X1dpbmRvdyk7CisgICBlbmQgTGluZTsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENoYXJhY3RlcnMgT3V0cHV0IC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgUHV0IChXaW4gIDogaW4gV2luZG93OyBJdGVtIDogaW4gQ2hhcmFjdGVyKQorICAgaXMKKyAgICAgIFBfU2l6ZSA6IGNvbnN0YW50IENvdW50IDo9IFBhZ2VfTGVuZ3RoIChXaW4pOworICAgICAgWSA6IExpbmVfUG9zaXRpb247CisgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTCA6IExpbmVfQ291bnQ7CisgICAgICBDIDogQ29sdW1uX0NvdW50OworICAgYmVnaW4KKyAgICAgIGlmIFBfU2l6ZSA+IDAgdGhlbgorICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoV2luLCBZLCBYKTsKKyAgICAgICAgIEdldF9TaXplIChXaW4sIEwsIEMpOworICAgICAgICAgaWYgKFkgKyAxKSA9IEwgYW5kIHRoZW4gKFggKyAxKSA9IEMgdGhlbgorICAgICAgICAgICAgTmV3X1BhZ2UgKFdpbik7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKFdpbiwgSXRlbSk7CisgICBlbmQgUHV0OworCisgICBwcm9jZWR1cmUgUHV0IChJdGVtIDogaW4gQ2hhcmFjdGVyKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0pOworICAgZW5kIFB1dDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFN0cmluZ3MtT3V0cHV0IC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgUHV0IChXaW4gIDogaW4gV2luZG93OyBJdGVtIDogaW4gU3RyaW5nKQorICAgaXMKKyAgICAgIFBfU2l6ZSA6IGNvbnN0YW50IENvdW50IDo9IFBhZ2VfTGVuZ3RoIChXaW4pOworICAgICAgWSA6IExpbmVfUG9zaXRpb247CisgICAgICBYIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgTCA6IExpbmVfQ291bnQ7CisgICAgICBDIDogQ29sdW1uX0NvdW50OworICAgYmVnaW4KKyAgICAgIGlmIFBfU2l6ZSA+IDAgdGhlbgorICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoV2luLCBZLCBYKTsKKyAgICAgICAgIEdldF9TaXplIChXaW4sIEwsIEMpOworICAgICAgICAgaWYgKFkgKyAxKSA9IEwgYW5kIHRoZW4gKFggKyAxICsgSXRlbSdMZW5ndGgpID49IEMgdGhlbgorICAgICAgICAgICAgTmV3X1BhZ2UgKFdpbik7CisgICAgICAgICBlbmQgaWY7CisgICAgICBlbmQgaWY7CisgICAgICBBZGQgKFdpbiwgSXRlbSk7CisgICBlbmQgUHV0OworCisgICBwcm9jZWR1cmUgUHV0IChJdGVtIDogaW4gU3RyaW5nKQorICAgaXMKKyAgIGJlZ2luCisgICAgICBQdXQgKEdldF9XaW5kb3csIEl0ZW0pOworICAgZW5kIFB1dDsKKworICAgcHJvY2VkdXJlIFB1dF9MaW5lCisgICAgIChXaW4gIDogaW4gV2luZG93OworICAgICAgSXRlbSA6IGluIFN0cmluZykKKyAgIGlzCisgICBiZWdpbgorICAgICAgUHV0IChXaW4sIEl0ZW0pOworICAgICAgTmV3X0xpbmUgKFdpbiwgMSk7CisgICBlbmQgUHV0X0xpbmU7CisKKyAgIHByb2NlZHVyZSBQdXRfTGluZQorICAgICAoSXRlbSA6IGluIFN0cmluZykKKyAgIGlzCisgICBiZWdpbgorICAgICAgUHV0X0xpbmUgKEdldF9XaW5kb3csIEl0ZW0pOworICAgZW5kIFB1dF9MaW5lOworCitlbmQgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjZjNDhhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHMKQEAgLTAsMCArMSwxMzYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOQVQgbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLQorLS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tCistLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLQorLS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLQorLS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CistLSAgVmVyc2lvbiBDb250cm9sOgorLS0gICRSZXZpc2lvbjogMS4xMyAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpdGggQWRhLlRleHRfSU87Cit3aXRoIEFkYS5JT19FeGNlcHRpb25zOworCitwYWNrYWdlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTyBpcworCisgICB1c2UgdHlwZSBBZGEuVGV4dF9JTy5Db3VudDsKKyAgIHN1YnR5cGUgQ291bnQgaXMgQWRhLlRleHRfSU8uQ291bnQ7CisgICBzdWJ0eXBlIFBvc2l0aXZlX0NvdW50IGlzIENvdW50IHJhbmdlIDEgLi4gQ291bnQnTGFzdDsKKworICAgc3VidHlwZSBGaWVsZCBpcyBBZGEuVGV4dF9JTy5GaWVsZDsKKyAgIHN1YnR5cGUgTnVtYmVyX0Jhc2UgaXMgSW50ZWdlciByYW5nZSAyIC4uIDE2OworCisgICB0eXBlIFR5cGVfU2V0IGlzIChMb3dlcl9DYXNlLCBVcHBlcl9DYXNlLCBNaXhlZF9DYXNlKTsKKworICAgLS0gIEZvciBtb3N0IG9mIHRoZSByb3V0aW5lcyB5b3Ugd2lsbCBzZWUgYSB2ZXJzaW9uIHdpdGhvdXQgYSBXaW5kb3cKKyAgIC0tICB0eXBlIHBhcmFtZXRlci4gVGhleSB3aWxsIG9wZXJhdGUgb24gYSBkZWZhdWx0IHdpbmRvdywgd2hpY2ggY2FuCisgICAtLSAgYmUgc2V0IGJ5IHRoZSB1c2VyLiBJdCBpcyBpbml0aWFsbHkgZXF1YWwgdG8gU3RhbmRhcmRfV2luZG93LgorCisgICBwcm9jZWR1cmUgU2V0X1dpbmRvdyAoV2luIDogaW4gV2luZG93KTsKKyAgIC0tICBTZXQgV2luIGFzIHRoZSBkZWZhdWx0IHdpbmRvdworCisgICBmdW5jdGlvbiBHZXRfV2luZG93IHJldHVybiBXaW5kb3c7CisgICAtLSAgR2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgd2luZG93CisKKyAgIHByb2NlZHVyZSBGbHVzaCAoV2luIDogaW4gV2luZG93KTsKKyAgIHByb2NlZHVyZSBGbHVzaDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIFNwZWNpZmljYXRpb24gb2YgbGluZSBhbmQgcGFnZSBsZW5ndGhzIC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAtLSAgVGhlcmUgYXJlIG5vIHNldCByb3V0aW5lcyBpbiB0aGlzIHBhY2thZ2UuIEkgYXNzdW1lLCB0aGF0IHlvdSBhbGxvY2F0ZQorICAgLS0gIHRoZSB3aW5kb3cgd2l0aCBhbiBhcHByb3ByaWF0ZSBzaXplLgorICAgLS0gIEEgc2Nyb2xsLXdpbmRvdyBpcyBpbnRlcnByZXRlZCBhcyBhbiBwYWdlIHdpdGggdW5ib3VuZGVkIHBhZ2UgbGVuZ3RoLAorICAgLS0gIGkuZS4gaXQgcmV0dXJucyB0aGUgY29udmVudGlvbmFsIDAgYXMgcGFnZSBsZW5ndGguCisKKyAgIGZ1bmN0aW9uIExpbmVfTGVuZ3RoIChXaW4gOiBpbiBXaW5kb3cpIHJldHVybiBDb3VudDsKKyAgIGZ1bmN0aW9uIExpbmVfTGVuZ3RoIHJldHVybiBDb3VudDsKKworICAgZnVuY3Rpb24gUGFnZV9MZW5ndGggKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIENvdW50OworICAgZnVuY3Rpb24gUGFnZV9MZW5ndGggcmV0dXJuIENvdW50OworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENvbHVtbiwgTGluZSwgYW5kIFBhZ2UgQ29udHJvbCAtLQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBwcm9jZWR1cmUgTmV3X0xpbmUgKFdpbiA6IGluIFdpbmRvdzsgU3BhY2luZyA6IGluIFBvc2l0aXZlX0NvdW50IDo9IDEpOworICAgcHJvY2VkdXJlIE5ld19MaW5lIChTcGFjaW5nIDogaW4gUG9zaXRpdmVfQ291bnQgOj0gMSk7CisKKyAgIHByb2NlZHVyZSBOZXdfUGFnZSAoV2luIDogaW4gV2luZG93KTsKKyAgIHByb2NlZHVyZSBOZXdfUGFnZTsKKworICAgcHJvY2VkdXJlIFNldF9Db2wgKFdpbiA6IGluIFdpbmRvdzsgIFRvIDogaW4gUG9zaXRpdmVfQ291bnQpOworICAgcHJvY2VkdXJlIFNldF9Db2wgKFRvIDogaW4gUG9zaXRpdmVfQ291bnQpOworCisgICBwcm9jZWR1cmUgU2V0X0xpbmUgKFdpbiA6IGluIFdpbmRvdzsgVG8gOiBpbiBQb3NpdGl2ZV9Db3VudCk7CisgICBwcm9jZWR1cmUgU2V0X0xpbmUgKFRvIDogaW4gUG9zaXRpdmVfQ291bnQpOworCisgICBmdW5jdGlvbiBDb2wgKFdpbiA6IGluIFdpbmRvdykgcmV0dXJuIFBvc2l0aXZlX0NvdW50OworICAgZnVuY3Rpb24gQ29sIHJldHVybiBQb3NpdGl2ZV9Db3VudDsKKworICAgZnVuY3Rpb24gTGluZSAoV2luIDogaW4gV2luZG93KSByZXR1cm4gUG9zaXRpdmVfQ291bnQ7CisgICBmdW5jdGlvbiBMaW5lIHJldHVybiBQb3NpdGl2ZV9Db3VudDsKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC0tIENoYXJhY3RlcnMtT3V0cHV0IC0tCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBwcm9jZWR1cmUgUHV0IChXaW4gIDogaW4gV2luZG93OyBJdGVtIDogaW4gQ2hhcmFjdGVyKTsKKyAgIHByb2NlZHVyZSBQdXQgKEl0ZW0gOiBpbiBDaGFyYWN0ZXIpOworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLS0gU3RyaW5ncy1PdXRwdXQgLS0KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHByb2NlZHVyZSBQdXQgKFdpbiAgOiBpbiBXaW5kb3c7IEl0ZW0gOiBpbiBTdHJpbmcpOworICAgcHJvY2VkdXJlIFB1dCAoSXRlbSA6IGluIFN0cmluZyk7CisKKyAgIHByb2NlZHVyZSBQdXRfTGluZQorICAgICAoV2luICA6IGluIFdpbmRvdzsKKyAgICAgIEl0ZW0gOiBpbiBTdHJpbmcpOworCisgICBwcm9jZWR1cmUgUHV0X0xpbmUKKyAgICAgKEl0ZW0gOiBpbiBTdHJpbmcpOworCisgICAtLSAgRXhjZXB0aW9ucworCisgICBTdGF0dXNfRXJyb3IgOiBleGNlcHRpb24gcmVuYW1lcyBBZGEuSU9fRXhjZXB0aW9ucy5TdGF0dXNfRXJyb3I7CisgICBNb2RlX0Vycm9yICAgOiBleGNlcHRpb24gcmVuYW1lcyBBZGEuSU9fRXhjZXB0aW9ucy5Nb2RlX0Vycm9yOworICAgTmFtZV9FcnJvciAgIDogZXhjZXB0aW9uIHJlbmFtZXMgQWRhLklPX0V4Y2VwdGlvbnMuTmFtZV9FcnJvcjsKKyAgIFVzZV9FcnJvciAgICA6IGV4Y2VwdGlvbiByZW5hbWVzIEFkYS5JT19FeGNlcHRpb25zLlVzZV9FcnJvcjsKKyAgIERldmljZV9FcnJvciA6IGV4Y2VwdGlvbiByZW5hbWVzIEFkYS5JT19FeGNlcHRpb25zLkRldmljZV9FcnJvcjsKKyAgIEVuZF9FcnJvciAgICA6IGV4Y2VwdGlvbiByZW5hbWVzIEFkYS5JT19FeGNlcHRpb25zLkVuZF9FcnJvcjsKKyAgIERhdGFfRXJyb3IgICA6IGV4Y2VwdGlvbiByZW5hbWVzIEFkYS5JT19FeGNlcHRpb25zLkRhdGFfRXJyb3I7CisgICBMYXlvdXRfRXJyb3IgOiBleGNlcHRpb24gcmVuYW1lcyBBZGEuSU9fRXhjZXB0aW9ucy5MYXlvdXRfRXJyb3I7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU87CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZGJfcCBiL25jdXJzZXMtNS43L0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlLmFkYl9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NzQ1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZGJfcApAQCAtMCwwICsxLDk3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBHTkFUIG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2UgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS0KKy0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS0KKy0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS0KKy0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgorLS0gIFZlcnNpb24gQ29udHJvbDoKKy0tICAkUmV2aXNpb246IDEuNSAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZiBBREFfVFJBQ0UgdGhlbgord2l0aCBJbnRlcmZhY2VzLkM7IHVzZSBJbnRlcmZhY2VzLkM7Cit3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuQXV4OyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7Cit3aXRoIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKyNlbmQgaWY7CisKK3BhY2thZ2UgYm9keSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlIGlzCisKKyNpZiBBREFfVFJBQ0UgdGhlbgorICAgdHlwZSBDX1RyYWNlVHlwZSBpcyBuZXcgQ19VSW50OworCisgICBmdW5jdGlvbiBUcmFjZUFkYV9Ub19UcmFjZUMgaXMgbmV3CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoU291cmNlID0+IFRyYWNlX0F0dHJpYnV0ZV9TZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0ID0+IENfVHJhY2VUeXBlKTsKKworICAgcHJvY2VkdXJlIFRyYWNlX09uICh4IDogVHJhY2VfQXR0cmlidXRlX1NldCkgaXMKKyAgICAgIHByb2NlZHVyZSB0cmFjZUMgKHkgOiBDX1RyYWNlVHlwZSk7CisgICAgICBwcmFnbWEgSW1wb3J0IChDLCB0cmFjZUMsICJ0cmFjZSIpOworICAgYmVnaW4KKyAgICAgIHRyYWNlQyAoVHJhY2VBZGFfVG9fVHJhY2VDICh4KSk7CisgICBlbmQgVHJhY2VfT247CisKKyAgIC0tICA3NS4gKDEyKSBBIEMgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMgY2FuCisgICAtLSAgICAgIGNvcnJlc3BvbmQgdG8gc2V2ZXJhbCBBZGEgc3VicHJvZ3JhbXMsIHRha2luZyB2YXJpb3VzIHNwZWNpZmljCisgICAtLSAgICAgIG51bWJlcnMgYW5kIHR5cGVzIG9mIHBhcmFtZXRlcnMuCisKKyAgIHByb2NlZHVyZSBUcmFjZV9QdXQgKHN0ciA6IFN0cmluZykgaXMKKyAgICAgIHByb2NlZHVyZSB0cmFjZWYgKGZvcm1hdCA6IGNoYXJfYXJyYXk7IHMgOiBjaGFyX2FycmF5KTsKKyAgICAgIHByYWdtYSBJbXBvcnQgKEMsIHRyYWNlZiwgIl90cmFjZWYiKTsKKyAgICAgIFR4dCAgICA6IGNoYXJfYXJyYXkgKDAgLi4gc3RyJ0xlbmd0aCk7CisgICAgICBMZW5ndGggOiBzaXplX3Q7CisgICAgICBmb3JtYXRzdHIgOiBjb25zdGFudCBTdHJpbmcgOj0gIiVzIiAmICBBU0NJSS5OdWw7CisgICAgICBmb3JtYXR0eHQgOiBjaGFyX2FycmF5ICgwIC4uIGZvcm1hdHN0cidMZW5ndGgpOworICAgYmVnaW4KKyAgICAgIFRvX0MgKGZvcm1hdHN0ciwgZm9ybWF0dHh0LCBMZW5ndGgpOworICAgICAgVG9fQyAoc3RyLCBUeHQsIExlbmd0aCk7CisgICAgICB0cmFjZWYgKGZvcm1hdHR4dCwgVHh0KTsKKyAgIGVuZCBUcmFjZV9QdXQ7CisjZWxzZQorICAgcHJvY2VkdXJlIFRyYWNlX09uICh4IDogVHJhY2VfQXR0cmlidXRlX1NldCkgaXMKKyNpZiBQUkFHTUFfVU5SRUYKKyAgIHByYWdtYSBVbnJlZmVyZW5jZWQgKHgpOworI2VuZCBpZjsKKyAgIGJlZ2luCisgICAgICBudWxsOworICAgZW5kIFRyYWNlX09uOworCisgICBwcm9jZWR1cmUgVHJhY2VfUHV0IChzdHIgOiBTdHJpbmcpIGlzCisjaWYgUFJBR01BX1VOUkVGCisgICBwcmFnbWEgVW5yZWZlcmVuY2VkIChzdHIpOworI2VuZCBpZjsKKyAgIGJlZ2luCisgICAgICBudWxsOworICAgZW5kIFRyYWNlX1B1dDsKKyNlbmQgaWY7CisKK2VuZCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS5hZHMgYi9uY3Vyc2VzLTUuNy9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLmFkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGFhZjlmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS5hZHMKQEAgLTAsMCArMSw0NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCistLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KKy0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tCistLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tCistLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKKy0tICBWZXJzaW9uIENvbnRyb2w6CistLSAgJFJldmlzaW9uOiAxLjE0ICQKKy0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2thZ2UgVGVybWluYWxfSW50ZXJmYWNlIGlzCisgICBwcmFnbWEgUHVyZSAoVGVybWluYWxfSW50ZXJmYWNlKTsKKy0tCistLSAgRXZlcnl0aGluZyBpcyBpbiB0aGUgY2hpbGQgdW5pdHMKKy0tCitlbmQgVGVybWluYWxfSW50ZXJmYWNlOwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvSU5TVEFMTCBiL25jdXJzZXMtNS43L0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3ZGNkOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L0lOU1RBTEwKQEAgLTAsMCArMSwxNzQ3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IElOU1RBTEwsdiAxLjEzNSAyMDA4LzExLzAyIDIxOjEzOjUxIHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgSG93IHRvIGluc3RhbGwgTmN1cnNlcy9UZXJtaW5mbyBvbiB5b3VyIHN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqIFJFQUQgQUxMIE9GIFRISVMgRklMRSBCRUZPUkUgWU9VIFRSWSBUTyBJTlNUQUxMIE5DVVJTRVMuICoKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworWW91IHNob3VsZCBiZSByZWFkaW5nIHRoZSBmaWxlIElOU1RBTEwgaW4gYSBkaXJlY3RvcnkgY2FsbGVkIG5jdXJzZXMtZC5kLCB3aGVyZQorZC5kIGlzIHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVyLiAgVGhlcmUgc2hvdWxkIGJlIHNldmVyYWwgc3ViZGlyZWN0b3JpZXMsCitpbmNsdWRpbmcgYGMrKycsIGBmb3JtJywgYG1hbicsIGBtZW51JywgJ21pc2MnLCBgbmN1cnNlcycsIGBwYW5lbCcsIGBwcm9ncycsCithbmQgYHRlc3QnLiAgU2VlIHRoZSBSRUFETUUgZmlsZSBmb3IgYSByb2FkbWFwIHRvIHRoZSBwYWNrYWdlLgorCitJZiB5b3UgYXJlIGEgTGludXggb3IgRnJlZUJTRCBvciBOZXRCU0QgZGlzdHJpYnV0aW9uIGludGVncmF0b3Igb3IgcGFja2FnZXIsCitwbGVhc2UgcmVhZCBhbmQgYWN0IG9uIHRoZSBzZWN0aW9uIHRpdGxlZCBJRiBZT1UgQVJFIEEgU1lTVEVNIElOVEVHUkFUT1IKK2JlbG93LgorCitJZiB5b3UgYXJlIGNvbnZlcnRpbmcgZnJvbSBCU0QgY3Vyc2VzIGFuZCBkbyBub3QgaGF2ZSByb290IGFjY2VzcywgYmUgc3VyZQordG8gcmVhZCB0aGUgQlNEIENPTlZFUlNJT04gTk9URVMgc2VjdGlvbiBiZWxvdy4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYXBwbGljYXRpb25zIHVzaW5nIGdwbSB3aXRoIG5jdXJzZXMsCityZWFkIHRoZSBVU0lORyBOQ1VSU0VTIFdJVEggR1BNIHNlY3Rpb24gYmVsb3cuCisKK0lmIHlvdSBhcmUgcnVubmluZyBvdmVyIHRoZSBBbmRyZXcgRmlsZSBTeXN0ZW0gc2VlIHRoZSBub3RlIGJlbG93IG9uCitVU0lORyBOQ1VSU0VTIFdJVEggQUZTLgorCitJZiB5b3UgYXJlIGNyb3NzLWNvbXBpbGluZywgc2VlIHRoZSBub3RlIGJlbG93IG9uIEJVSUxESU5HIE5DVVJTRVMgV0lUSCBBCitDUk9TUy1DT01QSUxFUi4KKworSWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEFkYTk1IGJpbmRpbmcsIGdvIHRvIHRoZSBBZGE5NSBkaXJlY3RvcnkgYW5kCitmb2xsb3cgdGhlIGluc3RydWN0aW9ucyB0aGVyZS4gIFRoZSBBZGE5NSBiaW5kaW5nIGlzIG5vdCBjb3ZlcmVkIGJlbG93LgorCitJZiB5b3UgYXJlIHVzaW5nIGFueXRoaW5nIGJ1dCAoYSkgTGludXgsIG9yIChiKSBvbmUgb2YgdGhlIDQuNEJTRC1iYXNlZAoraTM4NiBVbml4ZXMsIGdvIHJlYWQgdGhlIFBvcnRhYmlsaXR5IHNlY3Rpb24gaW4gdGhlIFRPLURPIGZpbGUgYmVmb3JlIHlvdQorZG8gYW55dGhpbmcgZWxzZS4KKworCitSRVFVSVJFTUVOVFM6CistLS0tLS0tLS0tLS0KKworWW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIG5jdXJzZXMgdW5kZXIgVU5JWDoKKworCSogQU5TSSBDIGNvbXBpbGVyICAoZ2NjLCBmb3IgaW5zdGFuY2UpCisJKiBzaCAgICAgICAgICAgICAgIChiYXNoIHdpbGwgZG8pCisJKiBhd2sgICAgICAgICAgICAgIChtYXdrIG9yIGdhd2sgd2lsbCBkbykKKwkqIHNlZAorCSogQlNEIG9yIFN5c3RlbSBWIHN0eWxlIGluc3RhbGwgKGEgc2NyaXB0IGlzIGVuY2xvc2VkKQorCitOY3Vyc2VzIGhhcyBiZWVuIGFsc28gYnVpbHQgaW4gdGhlIE9TLzIgRU1YIGVudmlyb25tZW50LgorCisKK0lOU1RBTExBVElPTiBQUk9DRURVUkU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuICBGaXJzdCwgZGVjaWRlIHdoZXRoZXIgeW91IHdhbnQgbmN1cnNlcyB0byByZXBsYWNlIHlvdXIgZXhpc3RpbmcgbGlicmFyeSAoaW4KKyAgICB3aGljaCBjYXNlIHlvdSdsbCBuZWVkIHN1cGVyLXVzZXIgcHJpdmlsZWdlcykgb3IgYmUgaW5zdGFsbGVkIGluIHBhcmFsbGVsCisgICAgd2l0aCBpdC4KKworICAgIFRoZSAtLXByZWZpeCBvcHRpb24gdG8gY29uZmlndXJlIGNoYW5nZXMgdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBpbnN0YWxsaW5nCisgICAgbmN1cnNlcy4gIFRoZSBkZWZhdWx0IGlzIG5vcm1hbGx5IGluIHN1YmRpcmVjdG9yaWVzIG9mIC91c3IvbG9jYWwsIGV4Y2VwdAorICAgIGZvciBzeXN0ZW1zIHdoZXJlIG5jdXJzZXMgaXMgbm9ybWFsbHkgaW5zdGFsbGVkIGFzIGEgc3lzdGVtIGxpYnJhcnksIGUuZy4sCisgICAgTGludXgsIHRoZSB2YXJpb3VzIEJTRCBzeXN0ZW1zIGFuZCBDeWd3aW4uICBVc2UgLS1wcmVmaXg9L3VzciB0byByZXBsYWNlCisgICAgeW91ciBkZWZhdWx0IGN1cnNlcyBkaXN0cmlidXRpb24uCisKKyAgICBUaGUgcGFja2FnZSBnZXRzIGluc3RhbGxlZCBiZW5lYXRoIHRoZSAtLXByZWZpeCBkaXJlY3RvcnkgYXMgZm9sbG93czoKKworICAgIEluICQocHJlZml4KS9iaW46ICAgICAgICAgIHRpYywgaW5mb2NtcCwgY2FwdG9pbmZvLCB0c2V0LAorCQkJCXJlc2V0LCBjbGVhciwgdHB1dCwgdG9lCisgICAgSW4gJChwcmVmaXgpL2xpYjogICAgICAgICAgbGlibmN1cnNlcyouKiBsaWJjdXJzZXMuYQorICAgIEluICQocHJlZml4KS9zaGFyZS90ZXJtaW5mbzogY29tcGlsZWQgdGVybWluYWwgZGVzY3JpcHRpb25zCisgICAgSW4gJChwcmVmaXgpL2luY2x1ZGU6ICAgICAgQyBoZWFkZXIgZmlsZXMKKyAgICBVbmRlciAkKHByZWZpeCkvbWFuOiAgICAgICB0aGUgbWFudWFsIHBhZ2VzCisKKyAgICBOb3RlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYXR0ZW1wdHMgdG8gbG9jYXRlIHByZXZpb3VzIGluc3RhbGxhdGlvbiBvZgorICAgIG5jdXJzZXMsIGFuZCB3aWxsIHNldCB0aGUgZGVmYXVsdCBwcmVmaXggYWNjb3JkaW5nIHRvIHdoZXJlIGl0IGZpbmRzIHRoZQorICAgIG5jdXJzZXMgaGVhZGVycy4KKworICAgIERvIG5vdCB1c2UgY29tbWFuZHMgc3VjaCBhcworCisgICAgCW1ha2UgaW5zdGFsbCBwcmVmaXg9WFhYCisKKyAgICB0byBjaGFuZ2UgdGhlIHByZWZpeCBhZnRlciBjb25maWd1cmF0aW9uLCBzaW5jZSB0aGUgcHJlZml4IHZhbHVlIGlzIHVzZWQKKyAgICBmb3Igc29tZSBhYnNvbHV0ZSBwYXRobmFtZXMgc3VjaCBhcyBURVJNSU5GTy4gIEluc3RlYWQgZG8gdGhpcworCisgICAgCW1ha2UgaW5zdGFsbCBERVNURElSPVhYWAorCisgICAgU2VlIGFsc28gdGhlIGRpc2N1c3Npb24gb2YgLS13aXRoLWluc3RhbGwtcHJlZml4LgorCisyLiAgVHlwZSBgLi9jb25maWd1cmUnIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBkaXN0cmlidXRpb24gdG8KKyAgICBjb25maWd1cmUgbmN1cnNlcyBmb3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtIGFuZCBjcmVhdGUgdGhlIE1ha2VmaWxlcy4KKyAgICBCZXNpZGVzIC0tcHJlZml4LCB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIGN1c3RvbWl6ZQorICAgIHRoZSBpbnN0YWxsYXRpb247IHVzZSBgLi9jb25maWd1cmUgLS1oZWxwJyB0byBsaXN0IHRoZSBhdmFpbGFibGUgb3B0aW9ucy4KKworICAgIElmIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkLCByZWFkIHRoZSBQT1JUQUJJTElUWSBzZWN0aW9uIGluCisgICAgdGhlIGZpbGUgbmN1cnNlcy9SRUFETUUgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uCisgICAgZmlsZSBmb3IgeW91ciBzeXN0ZW0uCisKKyAgICBUaGUgYGNvbmZpZ3VyZScgc2NyaXB0IGdlbmVyYXRlcyBtYWtlZmlsZSBydWxlcyBmb3Igb25lIG9yIG1vcmUgb2JqZWN0CisgICAgbW9kZWxzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGxpYnJhcmllczoKKworCWxpYm5jdXJzZXMuYSAobm9ybWFsKQorCisJbGliY3Vyc2VzLmEgKG5vcm1hbCwgYSBsaW5rIHRvIGxpYm5jdXJzZXMuYSkKKwkJVGhpcyBnZXRzIGxlZnQgb3V0IGlmIHlvdSBjb25maWd1cmUgd2l0aCAtLWRpc2FibGUtb3ZlcndyaXRlLgorCisJbGlibmN1cnNlcy5zbyAoc2hhcmVkKQorCisJbGlibmN1cnNlc19nLmEgKGRlYnVnKQorCisJbGlibmN1cnNlc19wLmEgKHByb2ZpbGUpCisKKwlsaWJuY3Vyc2VzLmxhIChsaWJ0b29sKQorCisgICAgSWYgeW91IGNvbmZpZ3VyZSB1c2luZyB0aGUgLS1lbmFibGUtd2lkZWMgb3B0aW9uLCBhICJ3IiBpcyBhcHBlbmRlZCB0byB0aGUKKyAgICBsaWJyYXJ5IG5hbWVzIChlLmcuLCBsaWJuY3Vyc2Vzdy5hKSwgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyaWVzIHN1cHBvcnQKKyAgICB3aWRlLWNoYXJhY3RlcnMsIGUuZy4sIHZpYSBhIFVURi04IGxvY2FsZS4gIFRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlcworICAgIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIG5vbi13aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uOyB3aWRlLWNoYXJhY3RlcgorICAgIGZlYXR1cmVzIGFyZSBwcm92aWRlZCBieSBpZmRlZidzIGluIHRoZSBoZWFkZXIgZmlsZXMuICBUaGUgd2lkZS1jaGFyYWN0ZXIKKyAgICBsaWJyYXJ5IGludGVyZmFjZXMgYXJlIG5vdCBiaW5hcnktY29tcGF0aWJsZSB3aXRoIHRoZSBub24td2lkZS1jaGFyYWN0ZXIKKyAgICB2ZXJzaW9uLiAgQnVpbGRpbmcgYW5kIHJ1bm5pbmcgdGhlIHdpZGUtY2hhcmFjdGVyIGNvZGUgcmVsaWVzIG9uIGEgZmFpcmx5CisgICAgcmVjZW50IGltcGxlbWVudGF0aW9uIG9mIGxpYmljb252LiAgV2UgaGF2ZSBidWlsdCB0aGlzIGNvbmZpZ3VyYXRpb24gb24KKyAgICBMaW51eCB1c2luZyBsaWJpY29udiwgc29tZXRpbWVzIHJlcXVpcmluZyBsaWJ1dGY4LgorCisgICAgSWYgeW91IGNvbmZpZ3VyZSB1c2luZyB0aGUgLS13aXRoLXB0aHJlYWQgb3B0aW9uLCBhICJ0IiBpcyBhcHBlbmRlZCB0bworICAgIHRoZSBsaWJyYXJ5IG5hbWVzIChlLmcuLCBsaWJuY3Vyc2VzdC5hLCBsaWJuY3Vyc2VzdHcuYSkuCisKKyAgICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYW55IG1vZGVscywgdGhlIG5vcm1hbCBhbmQgZGVidWcgbGlicmFyaWVzIHdpbGwgYmUKKyAgICBjb25maWd1cmVkLiAgVHlwaW5nIGBjb25maWd1cmUnIHdpdGggbm8gYXJndW1lbnRzIGlzIGVxdWl2YWxlbnQgdG86CisKKwkuL2NvbmZpZ3VyZSAtLXdpdGgtbm9ybWFsIC0td2l0aC1kZWJ1ZyAtLWVuYWJsZS1vdmVyd3JpdGUKKworICAgIFR5cGluZworCisJLi9jb25maWd1cmUgLS13aXRoLXNoYXJlZAorCisgICAgbWFrZXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgdGhlIGRlZmF1bHQsIHJlc3VsdGluZyBpbgorCisJLi9jb25maWd1cmUgLS13aXRoLXNoYXJlZCAtLXdpdGgtbm9ybWFsIC0td2l0aC1kZWJ1ZyAtLWVuYWJsZS1vdmVyd3JpdGUKKworICAgIElmIHlvdSB3YW50IG9ubHkgc2hhcmVkIGxpYnJhcmllcywgdHlwZQorCisJLi9jb25maWd1cmUgLS13aXRoLXNoYXJlZCAtLXdpdGhvdXQtbm9ybWFsIC0td2l0aG91dC1kZWJ1ZworCisgICAgUnVsZXMgZm9yIGdlbmVyYXRpbmcgc2hhcmVkIGxpYnJhcmllcyBhcmUgaGlnaGx5IGRlcGVuZGVudCB1cG9uIHRoZSBjaG9pY2UKKyAgICBvZiBob3N0IHN5c3RlbSBhbmQgY29tcGlsZXIuICBXZSd2ZSBiZWVuIHRlc3Rpbmcgc2hhcmVkIGxpYnJhcmllcyBvbiBMaW51eAorICAgIGFuZCBTdW5PUyB3aXRoIGdjYywgYnV0IG1vcmUgd29yayBuZWVkcyB0byBiZSBkb25lIHRvIG1ha2Ugc2hhcmVkIGxpYnJhcmllcworICAgIHdvcmsgb24gb3RoZXIgc3lzdGVtcy4KKworICAgIElmIHlvdSBoYXZlIGxpYnRvb2wgaW5zdGFsbGVkLCB5b3UgY2FuIHR5cGUKKworCS4vY29uZmlndXJlIC0td2l0aC1saWJ0b29sCisKKyAgICB0byBnZW5lcmF0ZSB0aGUgYXBwcm9wcmlhdGUgc3RhdGljIGFuZC9vciBzaGFyZWQgbGlicmFyaWVzIGZvciB5b3VyCisgICAgcGxhdGZvcm0gdXNpbmcgbGlidG9vbC4KKworICAgIFlvdSBjYW4gbWFrZSBjdXJzZXMgYW5kIHRlcm1pbmZvIGZhbGwgYmFjayB0byBhbiBleGlzdGluZyBmaWxlIG9mIHRlcm1jYXAKKyAgICBkZWZpbml0aW9ucyBieSBjb25maWd1cmluZyB3aXRoIC0tZW5hYmxlLXRlcm1jYXAuICBJZiB5b3UgZG8gdGhpcywgdGhlCisgICAgbGlicmFyeSB3aWxsIHNlYXJjaCAvZXRjL3Rlcm1jYXAgYmVmb3JlIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSwgYW5kIHdpbGwKKyAgICBhbHNvIGludGVycHJldCB0aGUgY29udGVudHMgb2YgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgdGhlCisgICAgc2VjdGlvbiBCU0QgQ09OVkVSU0lPTiBOT1RFUyBiZWxvdy4KKworMy4gIFR5cGUgYG1ha2UnLiAgSWdub3JlIGFueSB3YXJuaW5ncywgbm8gZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIHByb2R1Y2VkLgorICAgIFRoaXMgc2hvdWxkIGNvbXBpbGUgdGhlIG5jdXJzZXMgbGlicmFyeSwgdGhlIHRlcm1pbmZvIGNvbXBpbGVyIHRpYygxKSwKKyAgICBjYXB0b2luZm8oMSksIGluZm9jbXAoMSksIHRvZSgxKSwgY2xlYXIoMSkgdHNldCgxKSwgcmVzZXQoMSksIGFuZCB0cHV0KDEpCisgICAgcHJvZ3JhbXMgKHNlZSB0aGUgbWFudWFsIHBhZ2VzIGZvciBleHBsYW5hdGlvbiBvZiB3aGF0IHRoZXkgZG8pLCBzb21lIHRlc3QKKyAgICBwcm9ncmFtcywgYW5kIHRoZSBwYW5lbHMsIG1lbnVzLCBhbmQgZm9ybXMgbGlicmFyaWVzLgorCis0LiAgUnVuIG5jdXJzZXMgYW5kIHNldmVyYWwgb3RoZXIgdGVzdCBwcm9ncmFtcyBpbiB0aGUgdGVzdCBkaXJlY3RvcnkgdG8KKyAgICB2ZXJpZnkgdGhhdCBuY3Vyc2VzIGZ1bmN0aW9ucyBjb3JyZWN0bHkgYmVmb3JlIGRvaW5nIGFuIGluc3RhbGwgdGhhdAorICAgIG1heSBvdmVyd3JpdGUgc3lzdGVtIGZpbGVzLiAgUmVhZCB0aGUgZmlsZSB0ZXN0L1JFQURNRSBmb3IgZGV0YWlscyBvbgorICAgIHRoZSB0ZXN0IHByb2dyYW1zLgorCisgICAgTk9URTogWW91IG11c3QgaGF2ZSBpbnN0YWxsZWQgdGhlIHRlcm1pbmZvIGRhdGFiYXNlLCBvciBzZXQgdGhlCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgJFRFUk1JTkZPIHRvIHBvaW50IHRvIGEgU1ZyNC1jb21wYXRpYmxlIHRlcm1pbmZvCisgICAgZGF0YWJhc2UgYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3QgcHJvZ3JhbXMuICBOb3QgYWxsIHZlbmRvcnMnIHRlcm1pbmZvCisgICAgZGF0YWJhc2VzIGFyZSBTVnI0LWNvbXBhdGlibGUsIGJ1dCBtb3N0IHNlZW0gdG8gYmUuICBFeGNlcHRpb25zIGluY2x1ZGUKKyAgICBERUMncyBEaWdpdGFsIFVuaXggKGZvcm1lcmx5IGtub3duIGFzIE9TRi8xKS4KKworICAgIElmIHlvdSBydW4gdGhlIHRlc3QgcHJvZ3JhbXMgV0lUSE9VVCBpbnN0YWxsaW5nIHRlcm1pbmZvLCBuY3Vyc2VzIG1heQorICAgIHJlYWQgdGhlIHRlcm1jYXAgZmlsZSBhbmQgY2FjaGUgdGhhdCBpbiAkSE9NRS8udGVybWluZm8sIHdoaWNoIHdpbGwKKyAgICB0aGVyZWFmdGVyIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgdGVybWluZm8gZGF0YWJhc2UuICBTZWUgdGhlIGNvbW1lbnRzCisgICAgb24gIi0tZW5hYmxlLWdldGNhcC1jYWNoZSIsIHRvIHNlZSB3aHkgdGhpcyBpcyBhIEJhZCBUaGluZy4KKworICAgIEl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBuY3Vyc2VzIHRvIHVzZSBvdGhlciB0ZXJtaW5mbyBkYXRhYmFzZSBmb3JtYXRzLgorICAgIEEgZmV3IGFyZSBwcm92aWRlZCBhcyBleGFtcGxlcyBpbiB0aGUgaW5jbHVkZS1kaXJlY3RvcnkgKHNlZSAtLXdpdGgtY2FwcykuCisKKyAgICBUaGUgbmN1cnNlcyBwcm9ncmFtIGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSB0byB0ZXN0IHRoZSBuY3Vyc2VzIGxpYnJhcnkuCisgICAgWW91IGNhbiB1c2UgaXQgdG8gdmVyaWZ5IHRoYXQgdGhlIHNjcmVlbiBoaWdobGlnaHRzIHdvcmsgY29ycmVjdGx5LCB0aGF0CisgICAgY3Vyc29yIGFkZHJlc3NpbmcgYW5kIHdpbmRvdyBzY3JvbGxpbmcgd29ya3MgT0ssIGV0Yy4KKworNS4gIE9uY2UgeW91J3ZlIHRlc3RlZCwgeW91IGNhbiB0eXBlIGBtYWtlIGluc3RhbGwnIHRvIGluc3RhbGwgbGlicmFyaWVzLAorICAgIHRoZSBwcm9ncmFtcywgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGFuZCB0aGUgbWFudWFsIHBhZ2VzLiAgQWx0ZXJuYXRlbHksIHlvdQorICAgIGNhbiB0eXBlIGBtYWtlIGluc3RhbGwnIGluIGVhY2ggZGlyZWN0b3J5IHlvdSB3YW50IHRvIGluc3RhbGwuICBJbiB0aGUKKyAgICB0b3AtbGV2ZWwgZGlyZWN0b3J5LCB5b3UgY2FuIGRvIGEgcGFydGlhbCBpbnN0YWxsIHVzaW5nIHRoZXNlIGNvbW1hbmRzOgorCisJJ21ha2UgaW5zdGFsbC5wcm9ncycgICAgaW5zdGFsbHMgdGljLCBpbmZvY21wLCBldGMuLi4KKwknbWFrZSBpbnN0YWxsLmluY2x1ZGVzJyBpbnN0YWxscyB0aGUgaGVhZGVycy4KKwknbWFrZSBpbnN0YWxsLmxpYnMnICAgICBpbnN0YWxscyB0aGUgbGlicmFyaWVzIChhbmQgdGhlIGhlYWRlcnMpLgorCSdtYWtlIGluc3RhbGwuZGF0YScgICAgIGluc3RhbGxzIHRoZSB0ZXJtaW5mbyBkYXRhLiAoTm90ZTogYHRpYycgbXVzdAorCQkJCWJlIGluc3RhbGxlZCBiZWZvcmUgdGhlIHRlcm1pbmZvIGRhdGEgY2FuIGJlCisJCQkJY29tcGlsZWQpLgorCSdtYWtlIGluc3RhbGwubWFuJyAgICAgIGluc3RhbGxzIHRoZSBtYW51YWwgcGFnZXMuCisKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjICAgICBDQVZFQVQgRU1QVE9SOiBgaW5zdGFsbC5kYXRhJyBydW4gYXMgcm9vdCB3aWxsIE5VS0UgYW55IGV4aXN0aW5nICAgICAjCisgICMgIHRlcm1pbmZvIGRhdGFiYXNlLiBJZiB5b3UgaGF2ZSBhbnkgY3VzdG9tIG9yIHVudXN1YWwgZW50cmllcyBTQVZFIHRoZW0gICMKKyAgIyAgYmVmb3JlIHlvdSBpbnN0YWxsIG5jdXJzZXMuICBJIGhhdmUgYSBmaWxlIGNhbGxlZCB0ZXJtaW5mby5jdXN0b20gZm9yICAgIworICAjICB0aGlzIHB1cnBvc2UuICBEb24ndCBmb3JnZXQgdG8gcnVuIHRpYyBvbiB0aGUgZmlsZSBvbmNlIHlvdSdyZSBkb25lLiAgICAjCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIFRoZSB0ZXJtaW5mbyg1KSBtYW51YWwgcGFnZSBtdXN0IGJlIHByZXByb2Nlc3NlZCB3aXRoIHRibCgxKSBiZWZvcmUKKyAgICBiZWluZyBmb3JtYXR0ZWQgYnkgbnJvZmYoMSkuICBNb2Rlcm4gbWFuKDEpIGltcGxlbWVudGF0aW9ucyB0ZW5kIHRvIGRvCisgICAgdGhpcyBieSBkZWZhdWx0LCBidXQgeW91IG1heSB3YW50IHRvIGxvb2sgYXQgeW91ciB2ZXJzaW9uJ3MgbWFudWFsIHBhZ2UKKyAgICB0byBiZSBzdXJlLiAgWW91IG1heSBhbHNvIGluc3RhbGwgdGhlIG1hbnVhbCBwYWdlcyBhZnRlciBwcmVwcm9jZXNzaW5nCisgICAgd2l0aCB0YmwoMSkgYnkgc3BlY2lmeWluZyB0aGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtbWFucGFnZS10YmwuCisKKyAgICBJZiB0aGUgc3lzdGVtIGFscmVhZHkgaGFzIGEgY3Vyc2VzIGxpYnJhcnkgdGhhdCB5b3UgbmVlZCB0byBrZWVwIHVzaW5nCisgICAgeW91J2xsIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBpdCBhbmQgbmN1cnNlcy4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZgorICAgIC0tZGlzYWJsZS1vdmVyd3JpdGUuICBJZiBuY3Vyc2VzIGlzIGluc3RhbGxlZCBvdXRzaWRlIHRoZSBzdGFuZGFyZAorICAgIGRpcmVjdG9yaWVzICgvdXNyL2luY2x1ZGUgYW5kIC91c3IvbGliKSB0aGVuIGFsbCB5b3VyIHVzZXJzIHdpbGwgbmVlZCB0bworICAgIHVzZSB0aGUgLUkgb3B0aW9uIHRvIGNvbXBpbGUgcHJvZ3JhbXMgYW5kIC1MIHRvIGxpbmsgdGhlbS4KKworICAgIElmIHlvdSBoYXZlIGFub3RoZXIgY3Vyc2VzIGluc3RhbGxlZCBpbiB5b3VyIHN5c3RlbSBhbmQgeW91IGFjY2lkZW50YWxseQorICAgIGNvbXBpbGUgdXNpbmcgaXRzIGN1cnNlcy5oIHlvdSdsbCBlbmQgdXAgd2l0aCBhIGxhcmdlIG51bWJlciBvZgorICAgIHVuZGVmaW5lZCBzeW1ib2xzIGF0IGxpbmsgdGltZS4KKworICAgIElGIFlPVSBETyBOT1QgSEFWRSBST09UOiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBgcHJvZ3MnIHN1YmRpcmVjdG9yeQorICAgIGFuZCBydW4gdGhlIGBjYXBjb252ZXJ0JyBzY3JpcHQuICBUaGlzIHNjcmlwdCB3aWxsIGRlZHVjZSB2YXJpb3VzIHRoaW5ncworICAgIGFib3V0IHlvdXIgZW52aXJvbm1lbnQgYW5kIHVzZSB0aGVtIHRvIGJ1aWxkIHlvdSBhIHByaXZhdGUgdGVybWluZm8gdHJlZSwKKyAgICBzbyB5b3UgY2FuIHVzZSBuY3Vyc2VzIGFwcGxpY2F0aW9ucy4KKworICAgIElmIG1vcmUgdGhhbiBvbmUgdXNlciBhdCB5b3VyIHNpdGUgZG9lcyB0aGlzLCB0aGUgc3BhY2UgZm9yIHRoZSBkdXBsaWNhdGUKKyAgICB0cmVlcyBpcyB3YXN0ZWQuICBUcnkgdG8gZ2V0IHlvdXIgc2l0ZSBhZG1pbmlzdHJhdG9ycyB0byBpbnN0YWxsIGEgc3lzdGVtLQorICAgIHdpZGUgdGVybWluZm8gdHJlZSBpbnN0ZWFkLgorCisgICAgU2VlIHRoZSBCU0QgQ09OVkVSU0lPTiBOT1RFUyBzZWN0aW9uIGJlbG93IGZvciBhIGZldyBtb3JlIGRldGFpbHMuCisKKzYuICBUaGUgYysrIGRpcmVjdG9yeSBoYXMgQysrIGNsYXNzZXMgdGhhdCBhcmUgYnVpbHQgb24gdG9wIG9mIG5jdXJzZXMgYW5kCisgICAgcGFuZWxzLiAgWW91IG11c3QgaGF2ZSBjKysgKGFuZCBpdHMgbGlicmFyaWVzKSBpbnN0YWxsZWQgYmVmb3JlIHlvdSBjYW4KKyAgICBjb21waWxlIGFuZCBydW4gdGhlIGRlbW8uCisKKyAgICBVc2UgLS13aXRob3V0LWN4eC1iaW5kaW5nIHRvIHRlbGwgY29uZmlndXJlIHRvIG5vdCBidWlsZCB0aGUgQysrIGJpbmRpbmdzCisgICAgYW5kIGRlbW8uCisKKyAgICBJZiB5b3UgZG8gbm90IGhhdmUgQysrLCB5b3UgbXVzdCB1c2UgdGhlIC0td2l0aG91dC1jeHggb3B0aW9uIHRvIHRlbGwKKyAgICB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBub3QgYXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgJ2Jvb2wnCisgICAgd2hpY2ggbWF5IGJlIHN1cHBvcnRlZCBieSBDKysuICBJRiBZT1UgVVNFIFRISVMgT1BUSU9OLCBCRSBBRFZJU0VEIFRIQVQKKyAgICBZT1UgTUFZIE5PVCBCRSBBQkxFIFRPIENPTVBJTEUgKE9SIFJVTikgTkNVUlNFUyBBUFBMSUNBVElPTlMgV0lUSCBDKysuCisKKworU1VNTUFSWSBPRiBDT05GSUdVUkUgT1BUSU9OUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSBjb25maWd1cmUgc2NyaXB0IHByb3ZpZGVzIGEgc2hvcnQgbGlzdCBvZiBpdHMgb3B0aW9ucyB3aGVuIHlvdSB0eXBlCisKKwkuL2NvbmZpZ3VyZSAtLWhlbHAKKworICAgIFRoZSAtLWhlbHAgYW5kIHNldmVyYWwgb3B0aW9ucyBhcmUgY29tbW9uIHRvIGFsbCBjb25maWd1cmUgc2NyaXB0cyB0aGF0IGFyZQorICAgIGdlbmVyYXRlZCB3aXRoIGF1dG9jb25mLiAgVGhvc2UgYXJlIGFsbCBsaXN0ZWQgYmVmb3JlIHRoZSBsaW5lCisKKwktLWVuYWJsZSBhbmQgLS13aXRoIG9wdGlvbnMgcmVjb2duaXplZDoKKworICAgIFRoZSBvdGhlciBvcHRpb25zIGFyZSBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UuICBXZSBsaXN0IHRoZW0gaW4gYWxwaGFiZXRpYworICAgIG9yZGVyLgorCisgICAgLS1kaXNhYmxlLWFzc3VtZWQtY29sb3IKKwlXaXRoIG5jdXJzZXMgNS4xLCB3ZSBpbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uLCBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKQorCXdoaWNoIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gc3BlY2lmeSB3aGF0IHRoZSBkZWZhdWx0IGZvcmVncm91bmQgYW5kCisJYmFja2dyb3VuZCBjb2xvciBhcmUgYXNzdW1lZCB0byBiZS4gIE1vc3QgY29sb3IgYXBwbGljYXRpb25zIHVzZQorCWZ1bGwtc2NyZWVuIGNvbG9yOyBidXQgYSBmZXcgZG8gbm90IGNvbG9yIHRoZSBiYWNrZ3JvdW5kLiAgV2hpbGUgdGhlCisJYXNzdW1lZCB2YWx1ZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW52b2tpbmcgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCksCisJeW91IG1heSBmaW5kIGl0IHVzZWZ1bCB0byBzZXQgdGhlIGFzc3VtZWQgdmFsdWVzIHRvIHRoZSBwcmUtNS4xCisJY29udmVudGlvbiwgdXNpbmcgdGhpcyBjb25maWd1cmUgb3B0aW9uLgorCisgICAgLS1kaXNhYmxlLWJpZy1jb3JlCisJQXNzdW1lIG1hY2hpbmUgaGFzIGxpdHRsZSBtZW1vcnkuICBUaGUgY29uZmlndXJlIHNjcmlwdCBhdHRlbXB0cyB0bworCWRldGVybWluZSBpZiB5b3VyIG1hY2hpbmUgaGFzIGVub3VnaCBtZW1vcnkgKGFib3V0IDZNYikgdG8gY29tcGlsZSB0aGUKKwl0ZXJtaW5mbyBkYXRhYmFzZSB3aXRob3V0IHdyaXRpbmcgcG9ydGlvbnMgdG8gZGlzay4gIFNvbWUgYWxsb2NhdG9ycworCXJldHVybiBkZWNlcHRpdmUgcmVzdWx0cywgc28geW91IG1heSBoYXZlIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmUKKwlzY3JpcHQuICBPciB5b3UgbWF5IGJlIGJ1aWxkaW5nIHRpYyBmb3IgYSBzbWFsbGVyIG1hY2hpbmUuCisKKyAgICAtLWRpc2FibGUtYmlnLXN0cmluZ3MKKwlEaXNhYmxlIGNvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24gb2YgcHJlZGVmaW5lZCB0YWJsZXMgd2hpY2ggcHV0cworCWFsbCBvZiB0aGVpciBzdHJpbmdzIGludG8gYSB2ZXJ5IGxvbmcgc3RyaW5nLCB0byByZWR1Y2UgcmVsb2NhdGlvbgorCW92ZXJoZWFkLgorCisgICAgLS1kaXNhYmxlLWRhdGFiYXNlCisJVXNlIG9ubHkgYnVpbHQtaW4gZGF0YS4gIFRoZSBuY3Vyc2VzIGxpYnJhcmllcyBub3JtYWxseSByZWFkIHRlcm1pbmZvCisJYW5kIHRlcm1jYXAgZGF0YSBmcm9tIGRpc2suICBZb3UgY2FuIGNvbmZpZ3VyZSBuY3Vyc2VzIHRvIGhhdmUgYQorCWJ1aWx0LWluIGRhdGFiYXNlLCBha2EgImZhbGxiYWNrIiBlbnRyaWVzLiAgRW1iZWRkZWQgYXBwbGljYXRpb25zIG1heQorCWhhdmUgbm8gbmVlZCBmb3IgYW4gZXh0ZXJuYWwgZGF0YWJhc2UuICBTb21lLCBidXQgbm90IGFsbCBvZiB0aGUKKwlwcm9ncmFtcyBhcmUgdXNlZnVsIGluIHRoaXMgY29uZmlndXJhdGlvbiwgZS5nLiwgcmVzZXQgYW5kIHRwdXQgdmVyc3VzCisJaW5mb2NtcCBhbmQgdGljLgorCisgICAgLS1kaXNhYmxlLWV4dC1mdW5jcworCURpc2FibGUgZnVuY3Rpb24tZXh0ZW5zaW9ucy4gIENvbmZpZ3VyZSBuY3Vyc2VzIHdpdGhvdXQgdGhlIGZ1bmN0aW9ucworCXRoYXQgYXJlIG5vdCBzcGVjaWZpZWQgYnkgWFNJLiAgU2VlIG5jdXJzZXMvbW9kdWxlcyBmb3IgdGhlIGV4YWN0CisJbGlzdCBvZiBsaWJyYXJ5IG1vZHVsZXMgdGhhdCB3b3VsZCBiZSBzdXBwcmVzc2VkLgorCisgICAgLS1kaXNhYmxlLWhhc2htYXAKKwlDb21waWxlIHdpdGhvdXQgaGFzaG1hcCBzY3JvbGxpbmctb3B0aW1pemF0aW9uIGNvZGUuICBUaGlzIGFsZ29yaXRobSBpcworCXRoZSBkZWZhdWx0LgorCisgICAgLS1kaXNhYmxlLWhvbWUtdGVybWluZm8KKwlUaGUgJEhPTUUvLnRlcm1pbmZvIGRpcmVjdG9yeSBpcyBub3JtYWxseSBhZGRlZCB0byBuY3Vyc2VzJyBzZWFyY2gKKwlsaXN0IGZvciByZWFkaW5nL3dyaXRpbmcgdGVybWluZm8gZW50cmllcywgc2luY2UgdGhhdCBkaXJlY3RvcnkgaXMKKwltb3JlIGxpa2VseSB3cml0YWJsZSB0aGFuIHRoZSBzeXN0ZW0gdGVybWluZm8gZGF0YWJhc2UuICBVc2UgdGhpcworCW9wdGlvbiB0byBkaXNhYmxlIHRoZSBmZWF0dXJlIGFsdG9nZXRoZXIuCisKKyAgICAtLWRpc2FibGUtbGFyZ2VmaWxlCisJRGlzYWJsZSBjb21waWxlciBmbGFncyBuZWVkZWQgdG8gdXNlIGxhcmdlLWZpbGUgaW50ZXJmYWNlcy4KKworICAgIC0tZGlzYWJsZS1sZWFrcworCUZvciB0ZXN0aW5nLCBjb21waWxlLWluIGNvZGUgdGhhdCBmcmVlcyBtZW1vcnkgdGhhdCBub3JtYWxseSB3b3VsZCBub3QKKwliZSBmcmVlZCwgdG8gc2ltcGxpZnkgYW5hbHlzaXMgb2YgbWVtb3J5LWxlYWtzLgorCisJQW55IGltcGxlbWVudGF0aW9uIG9mIGN1cnNlcyBtdXN0IG5vdCBmcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoCisJYSBzY3JlZW4sIHNpbmNlIChldmVuIGFmdGVyIGNhbGxpbmcgZW5kd2luKCkpLCBpdCBtdXN0IGJlIGF2YWlsYWJsZQorCWZvciB1c2UgaW4gdGhlIG5leHQgY2FsbCB0byByZWZyZXNoKCkuICBUaGVyZSBhcmUgYWxzbyBjaHVua3Mgb2YKKwltZW1vcnkgaGVsZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIFRoYXQgbWFrZXMgaXQgaGFyZCB0byBhbmFseXplCisJY3Vyc2VzIGFwcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGxlYWtzLiAgVG8gd29yayBhcm91bmQgdGhpcywgYnVpbGQKKwlhIGRlYnVnZ2luZyB2ZXJzaW9uIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkgd2hpY2ggZnJlZXMgdGhvc2UgY2h1bmtzCisJd2hpY2ggaXQgY2FuLCBhbmQgcHJvdmlkZXMgdGhlIF9uY19mcmVlX2FuZF9leGl0KCkgZnVuY3Rpb24gdG8gZnJlZQorCXRoZSByZW1haW5kZXIgb24gZXhpdC4gIFRoZSBuY3Vyc2VzIHV0aWxpdHkgYW5kIHRlc3QgcHJvZ3JhbXMgdXNlIHRoaXMKKwlmZWF0dXJlLCBlLmcuLCB2aWEgdGhlIEV4aXRQcm9ncmFtKCkgbWFjcm8uCisKKyAgICAtLWRpc2FibGUtbHA2NAorCVRoZSBoZWFkZXIgZmlsZXMgd2lsbCBpZ25vcmUgdXNlIG9mIHRoZSBfTFA2NCBzeW1ib2wgdG8gbWFrZSBjaHR5cGUKKwlhbmQgbW1hc2tfdCB0eXBlcyAzMiBiaXRzICh0aGV5IG1heSBiZSBsb25nIG9uIDY0LWJpdCBob3N0cywgZm9yCisJY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHJlbGVhc2VzKS4KKworCU5PVEU6IHRoaXMgaXMgcG90ZW50aWFsbHkgYW4gQUJJIGNoYW5nZSwgZGVwZW5kaW5nIG9uIGV4aXN0aW5nCisJcGFja2FnZXMuICBUaGUgZGVmYXVsdCBmb3IgdGhpcyBvcHRpb24gaXMgImRpc2FibGVkIiBmb3IgbmN1cnNlcworCUFCSSA1LCBhbmQgImVuYWJsZWQiIGZvciBBQkkgNi4KKworICAgIC0tZGlzYWJsZS1tYWNyb3MKKwlGb3IgdGVzdGluZywgdXNlIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBtYWNyb3MuICBUaGUgcHJvZ3JhbSB3aWxsIHJ1bgorCW1vcmUgc2xvd2x5LCBidXQgaXQgaXMgc2ltcGxlciB0byBkZWJ1Zy4gIFRoaXMgZGVmaW5lcyBOQ1VSU0VTX05PTUFDUk9TCisJYXQgYnVpbGQgdGltZS4gIFNlZSBhbHNvIHRoZSAtLWVuYWJsZS1leHBhbmRlZCBvcHRpb24uCisKKyAgICAtLWRpc2FibGUtb3ZlcndyaXRlCisJSWYgeW91IGFyZSBpbnN0YWxsaW5nIG5jdXJzZXMgb24gYSBzeXN0ZW0gd2hpY2ggY29udGFpbnMgYW5vdGhlcgorCWRldmVsb3BtZW50IHZlcnNpb24gb2YgY3Vyc2VzLCBvciB3aGljaCBjb3VsZCBiZSBjb25mdXNlZCBieSB0aGUgbG9hZGVyCisJZm9yIGFub3RoZXIgdmVyc2lvbiwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGxlYXZlIG91dCB0aGUgbGluayB0bworCS1sY3Vyc2VzLiAgVGhlIG5jdXJzZXMgbGlicmFyeSBpcyBhbHdheXMgYXZhaWxhYmxlIGFzIC1sbmN1cnNlcy4KKwlEaXNhYmxpbmcgb3ZlcndyaXRlIGFsc28gY2F1c2VzIHRoZSBuY3Vyc2VzIGhlYWRlciBmaWxlcyB0byBiZQorCWluc3RhbGxlZCBpbnRvIGEgc3ViZGlyZWN0b3J5LCBlLmcuLCAvdXNyL2xvY2FsL2luY2x1ZGUvbmN1cnNlcywKKwlyYXRoZXIgdGhhbiB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuICBUaGlzIG1ha2VzIGl0IHNpbXBsZXIgdG8gYXZvaWQKKwljb21waWxlLXRpbWUgY29uZmxpY3RzIHdpdGggb3RoZXIgdmVyc2lvbnMgb2YgY3Vyc2VzLmgKKworICAgIC0tZGlzYWJsZS1yZWxpbmsKKwlJZiAtLWVuYWJsZS1ycGF0aCBpcyBnaXZlbiwgdGhlIGdlbmVyYXRlZCBtYWtlZmlsZXMgbm9ybWFsbHkgd2lsbAorCXJlYnVpbGQgdGhlIGxpYnJhcmllcyBkdXJpbmcgaW5zdGFsbC4gIFVzZSB0aGlzIG9wdGlvbiB0byBzaW1wbHkKKwljb3B5IHdoYXRldmVyIHRoZSBsaW5rZWQgcHJvZHVjZWQuCisKKwlUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIC0tZW5hYmxlLXJwYXRoIGlzIG5vdCBnaXZlbi4KKworICAgIC0tZGlzYWJsZS1yb290LWVudmlyb24KKwlDb21waWxlIHdpdGggZW52aXJvbm1lbnQgcmVzdHJpY3Rpb24sIHNvIGNlcnRhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzCisJYXJlIG5vdCBhdmFpbGFibGUgd2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIHZpYSBhIHNldHVpZC9zZXRnaWQKKwlhcHBsaWNhdGlvbi4gIFRoZXNlIGFyZSAoZm9yIGV4YW1wbGUgJFRFUk1JTkZPKSB0aG9zZSB0aGF0IGFsbG93IHRoZQorCXNlYXJjaCBwYXRoIGZvciB0aGUgdGVybWluZm8gb3IgdGVybWNhcCBlbnRyeSB0byBiZSBjdXN0b21pemVkLgorCisgICAgLS1kaXNhYmxlLXNjcm9sbC1oaW50cworCUNvbXBpbGUgd2l0aG91dCBzY3JvbGwtaGludHMgY29kZS4gIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2hlbgorCWhhc2htYXAgc2Nyb2xsaW5nIGlzIGNvbmZpZ3VyZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorCisgICAgLS1kaXNhYmxlLXRpYy1kZXBlbmRzCisJV2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLCBub3JtYWxseSB0aGUgdGljIGxpYnJhcnkgaXMgbGlua2VkIHRvCisJZGVwZW5kIHVwb24gdGhlIG5jdXJzZXMgbGlicmFyeSAoYW5kIGluIHR1cm4sIG9uIHRoZSB0ZXJtLWxpYnJhcnkgaWYKKwl0aGUgLS13aXRoLXRlcm1saWIgb3B0aW9uIHdhcyBnaXZlbikuICBUaGUgdGljLSBhbmQgdGVybS1saWJyYXJpZXMKKwlBQkkgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSAtLWVuYWJsZS13aWRlYyBvcHRpb24uIFNvbWUgcGFja2FnZXJzIGhhdmUKKwl1c2VkIHRoaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbGlicmFyeSBmaWxlcyB3aGljaCBhcmUgcGFja2FnZWQKKwlieSB1c2luZyBvbmx5IG9uZSBjb3B5IG9mIHRob3NlIGxpYnJhcmllcy4gIFRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LAorCXRoZSB0aWMgbGlicmFyeSBtdXN0IGJlIGJ1aWx0IHdpdGhvdXQgYW4gZXhwbGljaXQgZGVwZW5kZW5jeSBvbiB0aGUKKwluY3Vyc2VzIChvciBuY3Vyc2VzdykgbGlicmFyeS4gIFVzZSB0aGlzIGNvbmZpZ3VyZSBvcHRpb24gdG8gZG8gdGhhdC4KKwlGb3IgZXhhbXBsZQorCQljb25maWd1cmUgLS13aXRoLXRpY2xpYiAtLXdpdGgtc2hhcmVkIC0tZGlzYWJsZS10aWMtZGVwZW5kcworCisgICAgLS1kaXNhYmxlLXRwYXJtLXZhcmFyZ3MKKwlQb3J0YWJsZSBwcm9ncmFtcyBzaG91bGQgY2FsbCB0cGFybSgpIHVzaW5nIHRoZSBmaXhlZC1sZW5ndGggcGFyYW1ldGVyCisJbGlzdCBkb2N1bWVudGVkIGluIFgvT3Blbi4gIG5jdXJzZXMgcHJvdmlkZXMgdmFyYXJncyBzdXBwb3J0IGZvciB0aGlzCisJZnVuY3Rpb24uICBVc2UgLS1kaXNhYmxlLXRwYXJtLXZhcmFyZ3MgdG8gZGlzYWJsZSB0aGlzIHN1cHBvcnQuCisKKyAgICAtLWVuYWJsZS1hc3NlcnRpb25zCisJRm9yIHRlc3RpbmcsIGNvbXBpbGUtaW4gYXNzZXJ0aW9uIGNvZGUuICBUaGlzIGlzIHVzZWQgb25seSBmb3IgYSBmZXcKKwlwbGFjZXMgd2hlcmUgbmN1cnNlcyBjYW5ub3QgZWFzaWx5IHJlY292ZXIgYnkgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUuCisKKyAgICAtLWVuYWJsZS1icm9rZW5fbGlua2VyCisJQSBmZXcgcGxhdGZvcm1zIGhhdmUgd2hhdCB3ZSBjb25zaWRlciBhIGJyb2tlbiBsaW5rZXI6ICBpdCBjYW5ub3QgbGluaworCW9iamVjdHMgZnJvbSBhbiBhcmNoaXZlIHNvbGVseSBieSByZWZlcnJpbmcgdG8gZGF0YSBvYmplY3RzIGluIHRob3NlCisJZmlsZXMsIGJ1dCByZXF1aXJlcyBhIGZ1bmN0aW9uIHJlZmVyZW5jZS4gIFRoaXMgY29uZmlndXJlIG9wdGlvbgorCWNoYW5nZXMgc2V2ZXJhbCBkYXRhIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb25zIHRvIHdvcmsgYXJvdW5kIHRoaXMKKwlwcm9ibGVtLgorCisJTk9URTogIFdpdGggbmN1cnNlcyA1LjEsIHRoaXMgbWF5IG5vdCBiZSBuZWNlc3NhcnksIHNpbmNlIHdlIGFyZQorCXRvbGQgdGhhdCBzb21lIGxpbmtlcnMgaW50ZXJwcmV0IHVuaW5pdGlhbGl6ZWQgZ2xvYmFsIGRhdGEgYXMgYQorCWRpZmZlcmVudCB0eXBlIG9mIHJlZmVyZW5jZSB3aGljaCBiZWhhdmVzIGFzIGRlc2NyaWJlZCBhYm92ZS4gIFdlIGhhdmUKKwlleHBsaWNpdGx5IGluaXRpYWxpemVkIGFsbCBvZiB0aGUgZ2xvYmFsIGRhdGEgdG8gd29yayBhcm91bmQgdGhlCisJcHJvYmxlbS4KKworICAgIC0tZW5hYmxlLWJzZHBhZAorCVJlY29nbml6ZSBCU0Qtc3R5bGUgcHJlZml4IHBhZGRpbmcuICBTb21lIGFuY2llbnQgQlNEIHByb2dyYW1zIChzdWNoIGFzCisJbmV0aGFjaykgY2FsbCB0cHV0cygiNTAiKSB0byBpbXBsZW1lbnQgZGVsYXlzLgorCisgICAgLS1lbmFibGUtY29sb3JmZ2JnCisJQ29tcGlsZSB3aXRoIGV4cGVyaW1lbnRhbCAkQ09MT1JGR0JHIGNvZGUuICBUaGF0IGVudmlyb25tZW50IHZhcmlhYmxlCisJaXMgc2V0IGJ5IHNvbWUgdGVybWluYWwgZW11bGF0b3JzIGFzIGEgaGludCB0byBhcHBsaWNhdGlvbnMsIGJ5CisJYWR2ZXJ0aXNpbmcgdGhlIGRlZmF1bHQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMuICBEdXJpbmcKKwlpbml0aWFsaXphdGlvbiwgbmN1cnNlcyBzZXRzIGNvbG9yIHBhaXIgMCB0byBtYXRjaCB0aGlzLgorCisgICAgLS1lbmFibGUtY29uc3QKKwlUaGUgY3Vyc2VzIGludGVyZmFjZSBhcyBkb2N1bWVudGVkIGluIFhTSSBpcyByYXRoZXIgb2xkLCBpbiBmYWN0CisJaW5jbHVkaW5nIGZlYXR1cmVzIHRoYXQgcHJlY2VkZSBBTlNJIEMuICBUaGUgcHJvdG90eXBlcyBnZW5lcmFsbHkgZG8KKwlub3QgbWFrZSBlZmZlY3RpdmUgdXNlIG9mICJjb25zdCIuICBXaGVuIHVzaW5nIHN0cmljdGVyIGNvbXBpbGVycyAob3IKKwlnY2Mgd2l0aCBhcHByb3ByaWF0ZSB3YXJuaW5ncyksIHlvdSBtYXkgc2VlIHdhcm5pbmdzIGFib3V0IHRoZSBtaXNtYXRjaAorCWJldHdlZW4gY29uc3QgYW5kIG5vbi1jb25zdCBkYXRhLiAgV2UgcHJvdmlkZSBhIGNvbmZpZ3VyZSBvcHRpb24gd2hpY2gKKwljaGFuZ2VzIHRoZSBpbnRlcmZhY2VzIHRvIHVzZSBjb25zdCAtIHF1aWV0aW5nIHRoZXNlIHdhcm5pbmdzIGFuZAorCXJlZmxlY3RpbmcgdGhlIGFjdHVhbCB1c2Ugb2YgdGhlIHBhcmFtZXRlcnMgbW9yZSBjbG9zZWx5LiAgVGhlIG5jdXJzZXMKKwlsaWJyYXJ5IHVzZXMgdGhlIHN5bWJvbCBOQ1VSU0VTX0NPTlNUIGZvciB0aGVzZSBpbnN0YW5jZXMgb2YgY29uc3QsCisJYW5kIGlmIHlvdSBoYXZlIGFza2VkIGZvciBjb21waWxlciB3YXJuaW5ncywgd2lsbCBhZGQgZ2NjJ3MgY29uc3QtcXVhbAorCXdhcm5pbmcuICBUaGVyZSB3aWxsIHN0aWxsIGJlIHdhcm5pbmdzIGR1ZSB0byBzdWJ0bGUgaW5jb25zaXN0ZW5jaWVzCisJaW4gdGhlIGludGVyZmFjZSwgYnV0IGF0IGEgbG93ZXIgbGV2ZWwuCisKKwlOT1RFOiAgY29uZmlndXJpbmcgbmN1cnNlcyB3aXRoIHRoaXMgb3B0aW9uIG1heSBkZXRyYWN0IGZyb20gdGhlCisJcG9ydGFiaWxpdHkgb2YgeW91ciBhcHBsaWNhdGlvbnMgYnkgZW5jb3VyYWdpbmcgeW91IHRvIHVzZSBjb25zdCBpbgorCXBsYWNlcyB3aGVyZSB0aGUgWFNJIGN1cnNlcyBpbnRlcmZhY2Ugd291bGQgbm90IGFsbG93IHRoZW0uICBTaW1pbGFyCisJaXNzdWVzIGFyaXNlIHdoZW4gcG9ydGluZyB0byBTVnI0IGN1cnNlcywgd2hpY2ggdXNlcyBjb25zdCBpbiBldmVuCisJZmV3ZXIgcGxhY2VzLgorCisgICAgLS1lbmFibGUtZWNobworCVVzZSB0aGUgb3B0aW9uIC0tZGlzYWJsZS1lY2hvIHRvIG1ha2UgdGhlIGJ1aWxkLWxvZyBsZXNzIHZlcmJvc2UgYnkKKwlzdXBwcmVzc2luZyB0aGUgZGlzcGxheSBvZiB0aGUgY29tcGlsZSBhbmQgbGluayBjb21tYW5kcy4gIFRoaXMgbWFrZXMKKwlpdCBlYXNpZXIgdG8gc2VlIHRoZSBjb21waWxlciB3YXJuaW5ncy4gIChZb3UgY2FuIGFsd2F5cyB1c2UgIm1ha2UgLW4iCisJdG8gc2VlIHRoZSBvcHRpb25zIHRoYXQgYXJlIHVzZWQpLgorCisgICAgLS1lbmFibGUtZXhwYW5kZWQKKwlGb3IgdGVzdGluZywgZ2VuZXJhdGUgZnVuY3Rpb25zIGZvciBjZXJ0YWluIG1hY3JvcyB0byBtYWtlIHRoZW0gdmlzaWJsZQorCWFzIHN1Y2ggdG8gdGhlIGRlYnVnZ2VyLiAgU2VlIGFsc28gdGhlIC0tZGlzYWJsZS1tYWNyb3Mgb3B0aW9uLgorCisgICAgLS1lbmFibGUtZXh0LWNvbG9ycworCUV4dGVuZCB0aGUgY2NoYXJfdCBzdHJ1Y3R1cmUgdG8gYWxsb3cgbW9yZSB0aGFuIDE2IGNvbG9ycyB0byBiZQorCWVuY29kZWQuICBUaGlzIGFwcGxpZXMgb25seSB0byB0aGUgd2lkZS1jaGFyYWN0ZXIgKC0tZW5hYmxlLXdpZGVjKQorCWNvbmZpZ3VyYXRpb24uCisKKwlOT1RFOiAgdXNpbmcgdGhpcyBvcHRpb24gd2lsbCBtYWtlIGxpYnJhcmllcyB3aGljaCBhcmUgbm90IGJpbmFyeS0KKwljb21wYXRpYmxlIHdpdGggbGlibmN1cnNlc3cgNS40LiAgTm9uZSBvZiB0aGUgaW50ZXJmYWNlcyBjaGFuZ2UsIGJ1dAorCWFwcGxpY2F0aW9ucyB3aGljaCBoYXZlIGFuIGFycmF5IG9mIGNjaGFyX3QncyBtdXN0IGJlIHJlY29tcGlsZWQuCisKKyAgICAtLWVuYWJsZS1leHQtbW91c2UKKwlNb2RpZnkgdGhlIGVuY29kaW5nIG9mIG1vdXNlIHN0YXRlIHRvIG1ha2Ugcm9vbSBmb3IgYSA1dGggbW91c2UgYnV0dG9uLgorCVRoYXQgYWxsb3dzIG9uZSB0byB1c2UgbmN1cnNlcyB3aXRoIGEgd2hlZWwgbW91c2Ugd2l0aCB4dGVybSBvcgorCXNpbWlsYXIgWCB0ZXJtaW5hbCBlbXVsYXRvcnMuCisKKwlOT1RFOiAgdXNpbmcgdGhpcyBvcHRpb24gd2lsbCBtYWtlIGxpYnJhcmllcyB3aGljaCBhcmUgbm90IGJpbmFyeS0KKwljb21wYXRpYmxlIHdpdGggbGlibmN1cnNlc3cgNS40LiAgTm9uZSBvZiB0aGUgaW50ZXJmYWNlcyBjaGFuZ2UsIGJ1dAorCWFwcGxpY2F0aW9ucyB3aGljaCBoYXZlIG1vdXNlIG1hc2sgbW1hc2tfdCdzIG11c3QgYmUgcmVjb21waWxlZC4KKworICAgIC0tZW5hYmxlLWdldGNhcAorCVVzZSB0aGUgNC40QlNEIGdldGNhcCBjb2RlIGlmIGF2YWlsYWJsZSwgb3IgYSBidW5kbGVkIHZlcnNpb24gb2YgaXQgdG8KKwlmZXRjaCB0ZXJtY2FwIGVudHJpZXMuICBFbnRyaWVzIHJlYWQgaW4gdGhpcyB3YXkgY2Fubm90IHVzZSAobWFrZQorCWNyb3NzLXJlZmVyZW5jZXMgdG8pIHRoZSB0ZXJtaW5mbyB0cmVlLCBidXQgaXQgaXMgZmFzdGVyIHRoYW4gcmVhZGluZworCS9ldGMvdGVybWNhcC4KKworCUlmIGNvbmZpZ3VyZWQgZm9yIG9uZSBvZiB0aGUgKkJTRCBzeXN0ZW1zLCB0aGlzIGF1dG9tYXRpY2FsbHkgdXNlcworCXRoZSBoYXNoZWQgZGF0YWJhc2Ugc3lzdGVtIHByb2R1Y2VkIHVzaW5nIGNhcF9ta2RiIG9yIHNpbWlsYXIgdG9vbHMuCisJSW4gdGhhdCBjYXNlLCB0aGVyZSBpcyBubyBhZHZhbnRhZ2UgaW4gdXNpbmcgdGhlIC0tZW5hYmxlLWdldGNhcC1jYWNoZQorCW9wdGlvbi4KKworCVNlZSBhbHNvIHRoZSAtLXdpdGgtaGFzaGVkLWRiIG9wdGlvbi4KKworICAgIC0tZW5hYmxlLWdldGNhcC1jYWNoZQorCUNhY2hlIHRyYW5zbGF0ZWQgdGVybWNhcHMgdW5kZXIgdGhlIGRpcmVjdG9yeSAkSE9NRS8udGVybWluZm8KKworCU5PVEU6ICB0aGlzIHNvdW5kcyBnb29kIC0gaXQgbWFrZXMgbmN1cnNlcyBydW4gZmFzdGVyIHRoZSBzZWNvbmQgdGltZS4KKwlCdXQgbG9vayB3aGVyZSB0aGUgZGF0YSBjb21lcyBmcm9tIC0gYW4gL2V0Yy90ZXJtY2FwIGNvbnRhaW5pbmcgbG90cyBvZgorCWVudHJpZXMgdGhhdCBhcmUgbm90IHVwIHRvIGRhdGUuICBJZiB5b3UgY29uZmlndXJlIHdpdGggdGhpcyBvcHRpb24gYW5kCisJZm9yZ2V0IHRvIGluc3RhbGwgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGJlZm9yZSBydW5uaW5nIGFuIG5jdXJzZXMKKwlhcHBsaWNhdGlvbiwgeW91IHdpbGwgZW5kIHVwIHdpdGggYSBoaWRkZW4gdGVybWluZm8gZGF0YWJhc2UgdGhhdAorCWdlbmVyYWxseSBkb2VzIG5vdCBzdXBwb3J0IGNvbG9yIGFuZCB3aWxsIG1pc3Mgc29tZSBmdW5jdGlvbiBrZXlzLgorCisgICAgLS1lbmFibGUtaGFyZC10YWJzCisJQ29tcGlsZS1pbiBjdXJzb3Itb3B0aW1pemF0aW9uIGNvZGUgdGhhdCB1c2VzIGhhcmQtdGFicy4gIFdlIHdvdWxkIG1ha2UKKwl0aGlzIGEgc3RhbmRhcmQgZmVhdHVyZSBleGNlcHQgZm9yIHRoZSBjb25jZXJuIHRoYXQgdGhlIHRlcm1pbmZvIGVudHJ5CisJbWF5IG5vdCBiZSBhY2N1cmF0ZSwgb3IgdGhhdCB5b3VyIHN0dHkgc2V0dGluZ3MgaGF2ZSBkaXNhYmxlZCB0aGUgdXNlCisJb2YgdGFicy4KKworICAgIC0tZW5hYmxlLW1peGVkLWNhc2UKKwlDb250cm9scyB3aGV0aGVyIHRoZSBmaWxlc3lzdGVtIG9uIHdoaWNoIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSByZXNpZGVzCisJc3VwcG9ydHMgbWl4ZWQtY2FzZSBmaWxlbmFtZXMgKG5vcm1hbCBmb3IgVU5JWCwgYnV0IG5vdCBvbiBvdGhlcgorCXN5c3RlbXMpLiAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgb3B0aW9uLCB0aGUgY29uZmlndXJlIHNjcmlwdAorCWNoZWNrcyB0aGUgY3VycmVudCBmaWxlc3lzdGVtLgorCisgICAgLS1lbmFibGUtbm8tcGFkZGluZworCUNvbXBpbGUtaW4gc3VwcG9ydCBmb3IgdGhlICROQ1VSU0VTX05PX1BBRERJTkcgZW52aXJvbm1lbnQgdmFyaWFibGUsCisJd2hpY2ggYWxsb3dzIHlvdSB0byBzdXBwcmVzcyB0aGUgZWZmZWN0IG9mIG5vbi1tYW5kYXRvcnkgcGFkZGluZyBpbgorCXRlcm1pbmZvIGVudHJpZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LCB1bmxlc3MgeW91IGhhdmUgZGlzYWJsZWQgdGhlCisJZXh0ZW5kZWQgZnVuY3Rpb25zLgorCisgICAgLS1lbmFibGUtcmVlbnRyYW50CisJQ29tcGlsZSBleHBlcmltZW50YWwgY29uZmlndXJhdGlvbiB3aGljaCBpbXByb3ZlcyByZWVudHJhbnQgdXNlIG9mIHRoZQorCWxpYnJhcnkgYnkgcmVkdWNpbmcgZ2xvYmFsIGFuZCBzdGF0aWMgdmFyaWFibGVzLiAgVGhpcyBvcHRpb24gaXMgYWxzbworCXNldCBpZiAtLXdpdGgtcHRocmVhZCBpcyB1c2VkLgorCisgICAgLS1lbmFibGUtcnBhdGgKKwlVc2UgcnBhdGggb3B0aW9uIHdoZW4gZ2VuZXJhdGluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgKHdpdGggc29tZQorCXJlc3RyaWN0aW9ucykgd2hlbiBsaW5raW5nIHRoZSBjb3JyZXNwb25kaW5nIHByb2dyYW1zLiAgVGhpcyBvcmlnaW5hbGx5CisJKGluIDE5OTcpIGFwcGxpZWQgbWFpbmx5IHRvIHN5c3RlbXMgdXNpbmcgdGhlIEdOVSBsaW5rZXIgKHJlYWQgdGhlCisJbWFucGFnZSkuCisKKwlNb3JlIHJlY2VudGx5IGl0IGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCB0cmVhdG1lbnQKKwlzaGFyZWQgbGlicmFyaWVzIGluICJ1bnVzdWFsIiBsb2NhdGlvbnMuICBUaGUgInN5c3RlbSIgbGlicmFyaWVzIHJlc2lkZQorCWluIGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBvbiB0aGUgbG9hZGVyJ3MgZGVmYXVsdCBzZWFyY2gtcGF0aC4gIFdoaWxlCisJeW91IG1heSBiZSBhYmxlIHRvIHVzZSB3b3JrYXJvdW5kcyBzdWNoIGFzIHRoZSAkTERfTElCUkFSWV9QQVRICisJZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZXkgZG8gbm90IHdvcmsgd2l0aCBzZXR1aWQgYXBwbGljYXRpb25zIHNpbmNlCisJdGhlIExEX0xJQlJBUllfUEFUSCB2YXJpYWJsZSB3b3VsZCBiZSB1bnNldCBpbiB0aGF0IHNpdHVhdGlvbi4KKworCVRoaXMgb3B0aW9uIGRvZXMgbm90IGFwcGx5IHRvIC0td2l0aC1saWJ0b29sLCBzaW5jZSBsaWJ0b29sIG1ha2VzCisJZXh0cmEgYXNzdW1wdGlvbnMgYWJvdXQgcnBhdGguCisKKyAgICAtLWVuYWJsZS1zYWZlLXNwcmludGYKKwlDb21waWxlIHdpdGggZXhwZXJpbWVudGFsIHNhZmUtc3ByaW50ZiBjb2RlLiAgWW91IG1heSBjb25zaWRlciB1c2luZworCXRoaXMgaWYgeW91IGFyZSBidWlsZGluZyBuY3Vyc2VzIGZvciBhIHN5c3RlbSB0aGF0IGhhcyBuZWl0aGVyCisJdnNucHJpbnRmKCkgb3IgdnNwcmludGYoKS4gIEl0IGlzIHNsb3csIGhvd2V2ZXIuCisKKyAgICAtLWVuYWJsZS1zaWd3aW5jaAorCUNvbXBpbGUgc3VwcG9ydCBmb3IgbmN1cnNlcycgU0lHV0lOQ0ggaGFuZGxlci4gIElmIHlvdXIgYXBwbGljYXRpb24gaGFzCisJaXRzIG93biBTSUdXSU5DSCBoYW5kbGVyLCBuY3Vyc2VzIHdpbGwgbm90IHVzZSBpdHMgb3duLiAgVGhlIG5jdXJzZXMKKwloYW5kbGVyIGNhdXNlcyB3Z2V0Y2goKSB0byByZXR1cm4gS0VZX1JFU0laRSB3aGVuIHRoZSBzY3JlZW4tc2l6ZQorCWNoYW5nZXMuICBUaGlzIG9wdGlvbiBpcyB0aGUgZGVmYXVsdCwgdW5sZXNzIHlvdSBoYXZlIGRpc2FibGVkIHRoZQorCWV4dGVuZGVkIGZ1bmN0aW9ucy4KKworICAgIC0tZW5hYmxlLXNpZ25lZC1jaGFyCisJVGhlIHRlcm0uaCBoZWFkZXIgZGVjbGFyZXMgYSBCb29sZWFuc1tdIGFycmF5IHR5cGVkICJjaGFyIi4gIEJ1dCBpdAorCXN0b3JlcyBzaWduZWQgdmFsdWVzIHRoZXJlIGFuZCAiY2hhciIgaXMgbm90IG5lY2Vzc2FyaWx5IHNpZ25lZC4KKwlTb21lIHBhY2thZ2VycyBjaG9vc2UgdG8gYWx0ZXIgdGhlIHR5cGUgb2YgQm9vbGVhbnNbXSB0aG91Z2ggdGhpcworCWlzIG5vdCBzdHJpY3RseSBjb21wYXRpYmxlLiAgVGhpcyBvcHRpb24gYWxsb3dzIG9uZSB0byBpbXBsZW1lbnQgdGhpcworCWFsdGVyYXRpb24gd2l0aG91dCBwYXRjaGluZyB0aGUgc291cmNlIGNvZGUuCisKKyAgICAtLWVuYWJsZS1zeW1saW5rcworCUlmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIHN5bWJvbGljIGxpbmtzLCBtYWtlIHRpYyB1c2Ugc3ltYm9saWMgbGlua3MKKwlyYXRoZXIgdGhhbiBoYXJkIGxpbmtzIHRvIHNhdmUgZGlza3NwYWNlIHdoZW4gd3JpdGluZyBhbGlhc2VzIGluIHRoZQorCXRlcm1pbmZvIGRhdGFiYXNlLgorCisgICAgLS1lbmFibGUtdGNhcC1uYW1lcworCUNvbXBpbGUtaW4gc3VwcG9ydCBmb3IgdXNlci1kZWZpbmFibGUgdGVybWluYWwgY2FwYWJpbGl0aWVzLiAgVXNlIHRoZQorCS14IG9wdGlvbiBvZiB0aWMgYW5kIGluZm9jbXAgdG8gdHJlYXQgdW5yZWNvZ25pemVkIHRlcm1pbmFsCisJY2FwYWJpbGl0aWVzIGFzIHVzZXItZGVmaW5lZCBzdHJpbmdzLiAgVGhpcyBvcHRpb24gaXMgdGhlIGRlZmF1bHQsCisJdW5sZXNzIHlvdSBoYXZlIGRpc2FibGVkIHRoZSBleHRlbmRlZCBmdW5jdGlvbnMuCisKKyAgICAtLWVuYWJsZS10ZXJtY2FwCisJQ29tcGlsZSBpbiBzdXBwb3J0IGZvciByZWFkaW5nIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyBmcm9tIHRlcm1jYXAgaWYgbm8KKwltYXRjaCBpcyBmb3VuZCBpbiB0aGUgdGVybWluZm8gZGF0YWJhc2UuICBTZWUgYWxzbyB0aGUgLS1lbmFibGUtZ2V0Y2FwCisJYW5kIC0tZW5hYmxlLWdldGNhcC1jYWNoZSBvcHRpb25zLgorCisgICAgLS1lbmFibGUtd2FybmluZ3MKKwlUdXJuIG9uIEdDQyBjb21waWxlciB3YXJuaW5ncy4gIFRoZXJlIHNob3VsZCBiZSBvbmx5IGEgZmV3LgorCisgICAgLS1lbmFibGUtd2Vhay1zeW1ib2xzCisJSWYgdGhlIC0td2l0aC1wdGhyZWFkIG9wdGlvbiBpcyBzZXQsIGNoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cworCXdlYWstc3ltYm9scy4gIElmIGl0IGRvZXMsIHRoZW4gbmFtZSB0aGUgdGhyZWFkLWNhcGFibGUgbGlicmFyeSB3aXRob3V0CisJdGhlICJ0IiAobGlibmN1cnNlcyByYXRoZXIgdGhhbiBsaWJuY3Vyc2VzdCksIGFuZCBwcm92aWRlIGZvcgorCWR5bmFtaWNhbGx5IGxvYWRpbmcgdGhlIHB0aHJlYWRzIGVudHJ5cG9pbnRzIGF0IHJ1bnRpbWUuICBUaGlzIGFsbG93cworCW9uZSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBsaWJyYXJ5IGZpbGVzIGZvciBuY3Vyc2VzLgorCisgICAgLS1lbmFibGUtd2dldGNoLWV2ZW50cworCUNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgd2dldGNoLWV2ZW50cyBjb2RlLiAgU2VlIG5jdXJzZXMvUkVBRE1FLklaCisKKyAgICAtLWVuYWJsZS13aWRlYworCUNvbXBpbGUgd2l0aCB3aWRlLWNoYXJhY3RlciBjb2RlLiAgVGhpcyBtYWtlcyBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mCisJdGhlIGxpYnJhcmllcyAoZS5nLiwgbGlibmN1cnNlc3cuc28pLCB3aGljaCBzdG9yZXMgY2hhcmFjdGVycyBhcworCXdpZGUtY2hhcmFjdGVycywKKworCU5PVEU6IGFwcGxpY2F0aW9ucyBjb21waWxlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBhcmUgbm90IGNvbXBhdGlibGUKKwl3aXRoIHRob3NlIGJ1aWx0IGZvciA4LWJpdCBjaGFyYWN0ZXJzLiAgWW91IGNhbm5vdCBzaW1wbHkgbWFrZSBhCisJc3ltYm9saWMgbGluayB0byBlcXVhdGUgbGlibmN1cnNlcy5zbyB3aXRoIGxpYm5jdXJzZXN3LnNvCisKKwlOT1RFOiB0aGUgQWRhOTUgYmluZGluZyBtYXkgYmUgYnVpbHQgYWdhaW5zdCBlaXRoZXIgdmVyc2lvbiBvZiB0aGUgdGhlCisJbmN1cnNlcyBsaWJyYXJ5LCBidXQgeW91IG11c3QgZGVjaWRlIHdoaWNoOiAgdGhlIGJpbmRpbmcgaW5zdGFsbHMgdGhlCisJc2FtZSBzZXQgb2YgZmlsZXMgZm9yIGVpdGhlciB2ZXJzaW9uLiAgQ3VycmVudGx5ICgyMDAyLzYvMjIpIGl0IGRvZXMKKwlub3QgdXNlIHRoZSBleHRlbmRlZCBmZWF0dXJlcyBmcm9tIHRoZSB3aWRlLWNoYXJhY3RlciBjb2RlLCBzbyBpdCBpcworCXByb2JhYmx5IGJldHRlciB0byBub3QgaW5zdGFsbCB0aGUgYmluZGluZyBmb3IgdGhhdCBjb25maWd1cmF0aW9uLgorCisgICAgLS1lbmFibGUteG1jLWdsaXRjaAorCUNvbXBpbGUtaW4gc3VwcG9ydCBleHBlcmltZW50YWwgeG1jIChtYWdpYyBjb29raWUpIGNvZGUuCisKKyAgICAtLXdpdGgtYWJpLXZlcnNpb249TlVNCisJT3ZlcnJpZGUgdGhlIEFCSSB2ZXJzaW9uLCB3aGljaCBpcyB1c2VkIGluIHNoYXJlZCBsaWJyYXJ5IGZpbGVuYW1lcy4KKwlOb3JtYWxseSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSByZWxlYXNlIHZlcnNpb247IHNvbWUgcG9ydHMgaGF2ZQorCXNwZWNpYWwgcmVxdWlyZW1lbnRzIGZvciBjb21wYXRpYmlsaXR5LgorCisJVGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0IGxpbmtpbmcgd2l0aCBsaWJ0b29sLCB3aGljaCB1c2VzIHRoZQorCXJlbGVhc2UgbWFqb3IvbWlub3IgbnVtYmVycy4KKworICAgIC0td2l0aC1hZGEtY29tcGlsZXI9Q01ECisJU3BlY2lmeSB0aGUgQWRhOTUgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdCAiZ25hdG1ha2UiKQorCisgICAgLS13aXRoLWFkYS1pbmNsdWRlPURJUgorCVRlbGwgd2hlcmUgdG8gaW5zdGFsbCB0aGUgQWRhIGluY2x1ZGVzIChkZWZhdWx0OgorCVBSRUZJWC9saWIvYWRhL2FkYWluY2x1ZGUpCisKKyAgICAtLXdpdGgtYWRhLW9iamVjdHM9RElSCisJVGVsbCB3aGVyZSB0byBpbnN0YWxsIHRoZSBBZGEgb2JqZWN0cyAoZGVmYXVsdDogIFBSRUZJWC9saWIvYWRhL2FkYWxpYikKKworICAgIC0td2l0aC1ib29sPVRZUEUKKwlJZiAtLXdpdGhvdXQtY3h4IGlzIHNwZWNpZmllZCwgb3ZlcnJpZGUgdGhlIHR5cGUgdXNlZCBmb3IgdGhlICJib29sIgorCWRlY2xhcmVkIGluIGN1cnNlcy5oIChub3JtYWxseSB0aGUgdHlwZSBpcyBhdXRvbWF0aWNhbGx5IGNob3NlbiB0bworCWNvcnJlc3BvbmQgd2l0aCB0aGF0IGluIDxzdGRib29sLmg+LCBvciBkZWZhdWx0cyB0byBwbGF0Zm9ybS1zcGVjaWZpYworCXNpemVzKS4KKworICAgIC0td2l0aC1idWlsZC1jYz1YWFgKKwlJZiBjcm9zcy1jb21waWxpbmcsIHNwZWNpZnkgYSBob3N0IEMgY29tcGlsZXIsIHdoaWNoIGlzIG5lZWRlZCB0bworCWNvbXBpbGUgYSBmZXcgdXRpbGl0aWVzIHdoaWNoIGdlbmVyYXRlIHNvdXJjZSBtb2R1bGVzIGZvciBuY3Vyc2VzLgorCUlmIHlvdSBkbyBub3QgZ2l2ZSB0aGlzIG9wdGlvbiwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2tzIGlmIHRoZQorCSRCVUlMRF9DQyB2YXJpYWJsZSBpcyBzZXQsIGFuZCBvdGhlcndpc2UgZGVmYXVsdHMgdG8gZ2NjIG9yIGNjLgorCisgICAgLS13aXRoLWJ1aWxkLWNmbGFncz1YWFgKKwlJZiBjcm9zcy1jb21waWxpbmcsIHNwZWNpZnkgdGhlIGhvc3QgQyBjb21waWxlci1mbGFncy4gIFlvdSBtaWdodCBuZWVkCisJdG8gZG8gdGhpcyBpZiB0aGUgdGFyZ2V0IGNvbXBpbGVyIGhhcyB1bnVzdWFsIGZsYWdzIHdoaWNoIGNvbmZ1c2UgdGhlCisJaG9zdCBjb21waWxlci4KKworCVlvdSBjYW4gYWxzbyBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICRCVUlMRF9DRkxBR1MgcmF0aGVyIHRoYW4KKwl1c2UgdGhpcyBvcHRpb24uCisKKyAgICAtLXdpdGgtYnVpbGQtY3BwZmxhZ3M9WFhYCisJSWYgY3Jvc3MtY29tcGlsaW5nLCBzcGVjaWZ5IHRoZSBob3N0IEMgcHJlcHJvY2Vzc29yLWZsYWdzLiAgWW91IG1pZ2h0CisJbmVlZCB0byBkbyB0aGlzIGlmIHRoZSB0YXJnZXQgY29tcGlsZXIgaGFzIHVudXN1YWwgZmxhZ3Mgd2hpY2ggY29uZnVzZQorCXRoZSBob3N0IGNvbXBpbGVyLgorCisJWW91IGNhbiBhbHNvIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJEJVSUxEX0NQUEZMQUdTIHJhdGhlciB0aGFuCisJdXNlIHRoaXMgb3B0aW9uLgorCisgICAgLS13aXRoLWJ1aWxkLWxkZmxhZ3M9WFhYCisJSWYgY3Jvc3MtY29tcGlsaW5nLCBzcGVjaWZ5IHRoZSBob3N0IGxpbmtlci1mbGFncy4gIFlvdSBtaWdodCBuZWVkIHRvCisJZG8gdGhpcyBpZiB0aGUgdGFyZ2V0IGxpbmtlciBoYXMgdW51c3VhbCBmbGFncyB3aGljaCBjb25mdXNlIHRoZSBob3N0CisJY29tcGlsZXIuCisKKwlZb3UgY2FuIGFsc28gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkQlVJTERfTERGTEFHUyByYXRoZXIgdGhhbgorCXVzZSB0aGlzIG9wdGlvbi4KKworICAgIC0td2l0aC1idWlsZC1saWJzPVhYWAorCUlmIGNyb3NzLWNvbXBpbGluZywgdGhlIGhvc3QgbGlicmFyaWVzLiAgWW91IG1pZ2h0IG5lZWQgdG8gZG8gdGhpcyBpZgorCXRoZSB0YXJnZXQgZW52aXJvbm1lbnQgcmVxdWlyZXMgdW51c3VhbCBsaWJyYXJpZXMuCisKKwlZb3UgY2FuIGFsc28gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkQlVJTERfTElCUyByYXRoZXIgdGhhbgorCXVzZSB0aGlzIG9wdGlvbi4KKworICAgIC0td2l0aC1jYXBzPVhYWAorCVNwZWNpZnkgYW4gYWx0ZXJuYXRlIHRlcm1pbmZvIGNhcGFiaWxpdGllcyBmaWxlLCB3aGljaCBtYWtlcyB0aGUKKwljb25maWd1cmUgc2NyaXB0IGxvb2sgZm9yICJpbmNsdWRlL0NhcHMuWFhYIi4gIEEgZmV3IHN5c3RlbXMsIGUuZy4sCisJQUlYIDQueCB1c2UgdGhlIHNhbWUgb3ZlcmFsbCBmaWxlLWZvcm1hdCBhcyBuY3Vyc2VzIGZvciB0ZXJtaW5mbworCWRhdGEsIGJ1dCB1c2UgZGlmZmVyZW50IGFsaWdubWVudHMgd2l0aGluIHRoZSB0YWJsZXMgdG8gc3VwcG9ydAorCWxlZ2FjeSBhcHBsaWNhdGlvbnMuICBGb3IgdGhvc2Ugc3lzdGVtcywgeW91IGNhbiBjb25maWd1cmUgbmN1cnNlcworCXRvIHVzZSBhIHRlcm1pbmZvIGRhdGFiYXNlIHdoaWNoIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlCisJYXBwbGljYXRpb25zLgorCisgICAgLS13aXRoLWNodHlwZT1UWVBFCisJT3ZlcnJpZGUgdHlwZSBvZiBjaHR5cGUsIHdoaWNoIHN0b3JlcyB0aGUgdmlkZW8gYXR0cmlidXRlcyBhbmQgKGlmCisJLS1lbmFibGUtd2lkZWMgaXMgbm90IGdpdmVuKSBhIGNoYXJhY3Rlci4gIFByaW9yIHRvIG5jdXJzZXMgNS41LCB0aGlzCisJd2FzIGFsd2F5cyB1bnNpZ25lZCBsb25nLCBidXQgd2l0aCBuY3Vyc2VzIDUuNSwgaXQgbWF5IGJlIHVuc2lnbmVkLgorCVVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgbmVlZCB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggNjQtYml0CisJZXhlY3V0YWJsZXMuCisKKyAgICAtLXdpdGgtZGF0YWJhc2U9WFhYCisJU3BlY2lmeSB0aGUgdGVybWluZm8gc291cmNlIGZpbGUgdG8gaW5zdGFsbC4gIFVzdWFsbHkgeW91IHdpbGwgd2lzaAorCXRvIGluc3RhbGwgbmN1cnNlcycgZGVmYXVsdCAobWlzYy90ZXJtaW5mby5zcmMpLiAgQ2VydGFpbiBzeXN0ZW1zCisJaGF2ZSBzcGVjaWFsIHJlcXVpcmVtZW50cywgZS5nLCBPUy8yIEVNWCBoYXMgYSBjdXN0b21pemVkIHRlcm1pbmZvCisJc291cmNlIGZpbGUuCisKKyAgICAtLXdpdGgtZGJtYWxsb2MKKwlGb3IgdGVzdGluZywgY29tcGlsZSBhbmQgbGluayB3aXRoIENvbm9yIENhaGlsbCdzIGRibWFsbG9jIGxpYnJhcnkuCisJVGhpcyBhbHNvIHNldHMgdGhlIC0tZGlzYWJsZS1sZWFrcyBvcHRpb24uCisKKyAgICAtLXdpdGgtZGVidWcKKwlHZW5lcmF0ZSBkZWJ1Zy1saWJyYXJpZXMgKGRlZmF1bHQpLiAgVGhlc2UgYXJlIG5hbWVkIGJ5IGFkZGluZyAiX2ciCisJdG8gdGhlIHJvb3QsIGUuZy4sIGxpYm5jdXJzZXNfZy5hCisKKyAgICAtLXdpdGgtZGVmYXVsdC10ZXJtaW5mby1kaXI9WFhYCisJU3BlY2lmeSB0aGUgZGVmYXVsdCB0ZXJtaW5mbyBkYXRhYmFzZSBkaXJlY3RvcnkuICBUaGlzIGlzIG5vcm1hbGx5CisJREFUQURJUi90ZXJtaW5mbywgZS5nLiwgL3Vzci9zaGFyZS90ZXJtaW5mby4KKworICAgIC0td2l0aC1kbWFsbG9jCisJRm9yIHRlc3RpbmcsIGNvbXBpbGUgYW5kIGxpbmsgd2l0aCBHcmF5IFdhdHNvbidzIGRtYWxsb2MgbGlicmFyeS4KKwlUaGlzIGFsc28gc2V0cyB0aGUgLS1kaXNhYmxlLWxlYWtzIG9wdGlvbi4KKworICAgIC0td2l0aC1mYWxsYmFja3M9WFhYCisJU3BlY2lmeSBhIGxpc3Qgb2YgZmFsbGJhY2sgdGVybWluYWwgZGVzY3JpcHRpb25zIHdoaWNoIHdpbGwgYmUKKwljb21waWxlZCBpbnRvIHRoZSBuY3Vyc2VzIGxpYnJhcnkuICBTZWUgQ09ORklHVVJJTkcgRkFMTEJBQ0sgRU5UUklFUy4KKworICAgIC0td2l0aC1ncG0KKwl1c2UgQWxlc3NhbmRybyBSdWJpbmkncyBHUE0gbGlicmFyeSB0byBwcm92aWRlIG1vdXNlIHN1cHBvcnQgb24gdGhlCisJTGludXggY29uc29sZS4gIFByaW9yIHRvIG5jdXJzZXMgNS41LCB0aGlzIGludHJvZHVjZWQgYSBkZXBlbmRlbmN5IG9uCisJdGhlIEdQTSBsaWJyYXJ5LgorCQorCUN1cnJlbnRseSBuY3Vyc2VzIHVzZXMgdGhlIGRsc3ltKCkgZnVuY3Rpb24gdG8gYmluZCB0byB0aGUgbGlicmFyeSBhdAorCXJ1bnRpbWUsIHNvIGl0IGlzIG9ubHkgbmVjZXNzYXJ5IHRoYXQgdGhlIGxpYnJhcnkgYmUgcHJlc2VudCB3aGVuCisJbmN1cnNlcyBpcyBidWlsdCwgdG8gb2J0YWluIHRoZSBmaWxlbmFtZSAob3Igc29uYW1lKSB1c2VkIGluIHRoZQorCWNvcnJlc3BvbmRpbmcgZGxvcGVuKCkgY2FsbC4gIElmIHlvdSBnaXZlIGEgdmFsdWUgZm9yIHRoaXMgb3B0aW9uLAorCWUuZy4sCisKKwkJLS13aXRoLWdwbT0kSE9NRS90bXAvdGVzdC1ncG0uc28KKworCXRoYXQgb3ZlcnJpZGVzIHRoZSBjb25maWd1cmUgY2hlY2sgZm9yIHRoZSBzb25hbWUuCisKKwlTZWUgYWxzbyAtLXdpdGhvdXQtZGxzeW0KKworICAgIC0td2l0aC1oYXNoZWQtZGJbPVhYWF0KKwlVc2UgYSBoYXNoZWQgZGF0YWJhc2UgZm9yIHN0b3JpbmcgdGVybWluZm8gZGF0YSByYXRoZXIgdGhhbiBzdG9yaW5nCisJZWFjaCBjb21waWxlZCBlbnRyeSBpbiBhIHNlcGFyYXRlIGJpbmFyeSBmaWxlIHdpdGhpbiBhIGRpcmVjdG9yeQorCXRyZWUuCisJCisJSW4gcGFydGljdWxhciwgdGhpcyB1c2VzIHRoZSBCZXJrZWxleSBkYXRhYmFzZSAxLjguNSBpbnRlcmZhY2UsIGFzCisJcHJvdmlkZWQgYnkgdGhhdCBhbmQgaXRzIHN1Y2Nlc3NvcnMgZGIgMiwgMywgYW5kIDQuICBUaGUgYWN0dWFsCisJaW50ZXJmYWNlIGlzIHNsaWdodGx5IGRpZmZlcmVudCBpbiB0aGUgc3VjY2Vzc29yIHZlcnNpb25zIG9mIHRoZQorCUJlcmtlbGV5IGRhdGFiYXNlLiAgVGhlIGRhdGFiYXNlIHNob3VsZCBoYXZlIGJlZW4gY29uZmlndXJlZCB1c2luZworCSItLWVuYWJsZS1jb21wYXQxODUiLgorCisJSWYgeW91IHVzZSB0aGlzIG9wdGlvbiBmb3IgY29uZmlndXJpbmcgbmN1cnNlcywgdGljIHdpbGwgb25seSBiZSBhYmxlCisJdG8gd3JpdGUgZW50cmllcyBpbiB0aGUgaGFzaGVkIGRhdGFiYXNlLiAgaW5mb2NtcCBjYW4gc3RpbGwgcmVhZAorCWVudHJpZXMgZnJvbSBhIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgcmVhZGluZyBlbnRyaWVzIGZyb20gdGhlCisJaGFzaGVkIGRhdGFiYXNlLiAgVG8gZG8gdGhpcywgaW5mb2NtcCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlICRURVJNSU5GTworCXZhcmlhYmxlIHBvaW50cyB0byBhIGRpcmVjdG9yeSBvciBhIGZpbGUsIGFuZCByZWFkcyB0aGUgZGlyZWN0b3J5LXRyZWUKKwlvciBoYXNoZWQgZGF0YWJhc2UgcmVzcGVjdGl2ZWx5LgorCisJWW91IGNhbm5vdCBoYXZlIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYm90aCBoYXNoZWQtZGF0YWJhc2UgYW5kCisJZmlsZXN5c3RlbS1iYXNlZCB0ZXJtaW5mbyBlbnRyaWVzLgorCisJVXNlIHRoZSBwYXJhbWV0ZXIgdmFsdWUgdG8gZ2l2ZSB0aGUgaW5zdGFsbC1wcmVmaXggdXNlZCBmb3IgdGhlCisJZGF0YmFzZSwgZS5nLiwKKwkJLS13aXRoLWhhc2hlZC1kYj0vdXNyL2xvY2FsL0JpZ0Jhc2UKKwl0byBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGluY2x1ZGUtIGFuZCBsaWItZGlyZWN0b3JpZXMgdW5kZXIgdGhlCisJZ2l2ZW4gZGlyZWN0b3J5LgorCisJU2VlIGFsc28gdGhlIC0tZW5hYmxlLWdldGNhcCBvcHRpb24uCisKKyAgICAtLXdpdGgtaW5zdGFsbC1wcmVmaXg9WFhYCisJQWxsb3dzIHlvdSB0byBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBsb2NhdGlvbiBmb3IgaW5zdGFsbGluZyBuY3Vyc2VzCisJYWZ0ZXIgYnVpbGRpbmcgaXQuICBUaGUgdmFsdWUgeW91IHNwZWNpZnkgaXMgcHJlcGVuZGVkIHRvIHRoZSAicmVhbCIKKwlpbnN0YWxsIGxvY2F0aW9uLiAgVGhpcyBzaW1wbGlmaWVzIG1ha2luZyBiaW5hcnkgcGFja2FnZXMuICBUaGUKKwltYWtlZmlsZSB2YXJpYWJsZSBERVNURElSIGlzIHNldCBieSB0aGlzIG9wdGlvbi4gIEl0IGlzIGFsc28gcG9zc2libGUKKwl0byB1c2UKKwkJbWFrZSBpbnN0YWxsIERFU1RESVI9WFhYCisJc2luY2UgdGhlIG1ha2VmaWxlcyBwYXNzIHRoYXQgdmFyaWFibGUgdG8gc3Vib3JkaW5hdGUgbWFrZXMuCisKKwlOT1RFOiAgYSBmZXcgc3lzdGVtcyBidWlsZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggZml4ZWQgcGF0aG5hbWVzOyB0aGlzCisJb3B0aW9uIHByb2JhYmx5IHdpbGwgbm90IHdvcmsgZm9yIHRob3NlIGNvbmZpZ3VyYXRpb25zLgorCisgICAgIC0td2l0aC1saWJ0b29sWz1YWFhdCisJR2VuZXJhdGUgbGlicmFyaWVzIHdpdGggbGlidG9vbC4gIElmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB0aGVuIGl0CisJb3ZlcnJpZGVzIGFsbCBvdGhlciBsaWJyYXJ5IG1vZGVsIHNwZWNpZmljYXRpb25zLiAgTm90ZSB0aGF0IGxpYnRvb2wKKwltdXN0IGFscmVhZHkgYmUgaW5zdGFsbGVkLCB1c2VzIG1ha2VmaWxlIHJ1bGVzIGRlcGVuZGVudCBvbiBHTlUgbWFrZSwKKwlhbmQgZG9lcyBub3QgcHJvbWlzZSB0byBmb2xsb3cgdGhlIHZlcnNpb24gbnVtYmVyaW5nIGNvbnZlbnRpb24gb2YKKwlvdGhlciBzaGFyZWQgbGlicmFyaWVzIG9uIHlvdXIgc3lzdGVtLiAgSG93ZXZlciwgaWYgdGhlIC0td2l0aC1zaGFyZWQKKwlvcHRpb24gZG9lcyBub3Qgc3VjY2VlZCwgeW91IG1heSBnZXQgYmV0dGVyIHJlc3VsdHMgd2l0aCB0aGlzIG9wdGlvbi4KKworCUlmIGEgcGFyYW1ldGVyIHZhbHVlIGlzIGdpdmVuLCBpdCBtdXN0IGJlIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZQorCXBhcnRpY3VsYXIgdmVyc2lvbiBvZiBsaWJ0b29sLCBlLmcuLAorCQkvdXNyL2Jpbi9saWJ0b29sLTEuMi4zCisKKwlJdCBpcyBwb3NzaWJsZSB0byByZWJ1aWxkIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSB0aGUgYXV0b21ha2UKKwltYWNyb3MgZm9yIGxpYnRvb2wsIGUuZy4sIEFDX1BST0dfTElCVE9PTC4gIFNlZSB0aGUgY29tbWVudHMgaW4KKwlhY2xvY2FsLm00IGZvciBDRl9QUk9HX0xJQlRPT0wsIGFuZCBlbnN1cmUgdGhhdCB5b3UgYnVpbGQgY29uZmlndXJlCisJdXNpbmcgdGhlIGFwcHJvcHJpYXRlIHBhdGNoIGZvciBhdXRvY29uZiBmcm9tCisJCWh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8KKworICAgIC0td2l0aC1tYW5wYWdlLWFsaWFzZXMKKwlUZWxsIHRoZSBjb25maWd1cmUgc2NyaXB0IHlvdSB3aXNoIHRvIGNyZWF0ZSBlbnRyaWVzIGluIHRoZQorCW1hbi1kaXJlY3RvcnkgZm9yIGFsaWFzZXMgdG8gbWFucGFnZXMgd2hpY2ggbGlzdCB0aGVtLCBlLmcuLCB0aGUKKwlmdW5jdGlvbnMgaW4gdGhlIHBhbmVsIG1hbnBhZ2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0LiAgWW91IGNhbiBkaXNhYmxlCisJaXQgaWYgeW91ciBtYW4gcHJvZ3JhbSBkb2VzIHRoaXMuICBZb3UgY2FuIGFsc28gZGlzYWJsZQorCS0td2l0aC1tYW5wYWdlLXN5bWxpbmtzIHRvIGluc3RhbGwgZmlsZXMgY29udGFpbmluZyBhICIuc28iIGNvbW1hbmQKKwlyYXRoZXIgdGhhbiBzeW1ib2xpYyBsaW5rcy4KKworICAgIC0td2l0aC1tYW5wYWdlLWZvcm1hdD1YWFgKKwlUZWxsIHRoZSBjb25maWd1cmUgc2NyaXB0IGhvdyB5b3Ugd291bGQgbGlrZSB0byBpbnN0YWxsIG1hbi1wYWdlcy4gIFRoZQorCW9wdGlvbiB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGVzZTogIGd6aXAsIGNvbXByZXNzLCBCU0RJLCBub3JtYWwsCisJZm9ybWF0dGVkLiAgSWYgeW91IGRvIG5vdCBnaXZlIHRoaXMgb3B0aW9uLCB0aGUgY29uZmlndXJlIHNjcmlwdAorCWF0dGVtcHRzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgY2FzZS4KKworICAgIC0td2l0aC1tYW5wYWdlLXJlbmFtZXM9WFhYCisJVGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCB0aGF0IHlvdSB3aXNoIHRvIHJlbmFtZSB0aGUgbWFucGFnZXMgd2hpbGUKKwlpbnN0YWxsaW5nLiAgQ3VycmVudGx5IHRoZSBvbmx5IGRpc3RyaWJ1dGlvbiB3aGljaCBkb2VzIHRoaXMgaXMKKwl0aGUgTGludXggRGViaWFuLiAgVGhlIG9wdGlvbiB2YWx1ZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBmaWxlCisJdGhhdCBsaXN0cyB0aGUgcmVuYW1lZCBmaWxlcywgZS5nLiwgJHNyY2Rpci9tYW4vbWFuX2RiLnJlbmFtZXMKKworICAgIC0td2l0aC1tYW5wYWdlLXN5bWxpbmtzCisJVGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCB0aGF0IHlvdSB3aXNoIHRvIG1ha2Ugc3ltYm9saWMgbGlua3MgaW4gdGhlCisJbWFuLWRpcmVjdG9yeSBmb3IgYWxpYXNlcyB0byB0aGUgbWFuLXBhZ2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCwgYnV0CisJY2FuIGJlIGRpc2FibGVkIGZvciBzeXN0ZW1zIHRoYXQgcHJvdmlkZSB0aGlzIGF1dG9tYXRpY2FsbHkuICBEb2luZworCXRoaXMgb24gc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzIHdpbGwgcmVzdWx0IGluCisJY29weWluZyB0aGUgbWFuLXBhZ2UgZm9yIGVhY2ggYWxpYXMuCisKKyAgICAtLXdpdGgtbWFucGFnZS10YmwKKwlUZWxsIHRoZSBjb25maWd1cmUgc2NyaXB0IHRoYXQgeW91IHdpdGggdG8gcHJlcHJvY2VzcyB0aGUgbWFucGFnZXMKKwlieSBydW5uaW5nIHRoZW0gdGhyb3VnaCB0YmwgdG8gZ2VuZXJhdGUgdGFibGVzIHVuZGVyc3RhbmRhYmxlIGJ5CisJbnJvZmYuCisKKyAgICAtLXdpdGgtbW1hc2stdD1UWVBFCisJT3ZlcnJpZGUgdHlwZSBvZiBtbWFza190LCB3aGljaCBzdG9yZXMgdGhlIG1vdXNlIG1hc2suICBQcmlvciB0bworCW5jdXJzZXMgNS41LCB0aGlzIHdhcyBhbHdheXMgdW5zaWduZWQgbG9uZywgYnV0IHdpdGggbmN1cnNlcyA1LjUsIGl0CisJbWF5IGJlIHVuc2lnbmVkLiAgVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSBuZWVkIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkKKwl3aXRoIDY0LWJpdCBleGVjdXRhYmxlcy4KKworICAgIC0td2l0aC1ub3JtYWwKKwlHZW5lcmF0ZSBub3JtYWwgKGkuZS4sIHN0YXRpYykgbGlicmFyaWVzIChkZWZhdWx0KS4KKworCU5vdGU6ICBvbiBMaW51eCwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2lsbCBhdHRlbXB0IHRvIHVzZSB0aGUgR1BNCisJbGlicmFyeSB2aWEgdGhlIGRsc3ltKCkgZnVuY3Rpb24gY2FsbC4gIFVzZSAtLXdpdGhvdXQtZGxzeW0gdG8gZGlzYWJsZQorCXRoaXMgZmVhdHVyZSwgb3IgLS13aXRob3V0LWdwbSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IHdpc2ggdG8gdXNlCisJR1BNLgorCisgICAgLS13aXRoLW9zcGVlZD1UWVBFCisJT3ZlcnJpZGUgdHlwZSBvZiBvc3BlZWQgdmFyaWFibGUsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHRlcm1jYXAKKwljb21wYXRpYmlsaXR5IGludGVyZmFjZS4gIEluIHRlcm1jYXAsIHRoaXMgaXMgYSAnc2hvcnQnLCB3aGljaCB3b3JrcworCWZvciBhIHdpZGUgcmFuZ2Ugb2YgYmF1ZHJhdGVzIGJlY2F1c2Ugb3NwZWVkIGlzIG5vdCB0aGUgYWN0dWFsIHNwZWVkCisJYnV0IHRoZSBlbmNvZGVkIHZhbHVlLCBlLmcuLCBCOTYwMCB3b3VsZCBiZSBhIHNtYWxsIG51bWJlciBzdWNoIGFzIDEzLgorCUhvd2V2ZXIgdGhlIGVuY29kaW5nIHNjaGVtZSBvcmlnaW5hbGx5IGFsbG93ZWQgZm9yIHZhbHVlcyAib25seSIgdXAgdG8KKwkzODQwMGJkLiAgQSBuZXdlciBzZXQgb2YgZGVmaW5pdGlvbnMgcGFzdCAzODQwMGJkIGlzIG5vdCBlbmNvZGVkIGFzCisJY29tcGFjdGx5LCBhbmQgaXMgbm90IGd1YXJhbnRlZWQgdG8gZml0IGludG8gYSBzaG9ydCAoc2VlIHRoZSBmdW5jdGlvbgorCWNmZ2V0b3NwZWVkKCksIHdoaWNoIHJldHVybnMgYSBzcGVlZF90IGZvciB0aGlzIHJlYXNvbikuICBJbiBwcmFjdGljZSwKKwlhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlZCBrbm93bGVkZ2Ugb2YgdGhlIG9zcGVlZCB2YXJpYWJsZSwgaS5lLiwKKwl0aG9zZSB1c2luZyB0ZXJtY2FwLCBkbyBub3QgdXNlIHRoZSBoaWdoZXIgc3BlZWRzLiAgWW91ciBhcHBsaWNhdGlvbgorCShvciBzeXN0ZW0sIGluIGdlbmVyYWwpIG1heSBvciBtYXkgbm90LgorCisgICAgLS13aXRoLXByb2ZpbGUKKwlHZW5lcmF0ZSBwcm9maWxlLWxpYnJhcmllcyBUaGVzZSBhcmUgbmFtZWQgYnkgYWRkaW5nICJfcCIgdG8gdGhlIHJvb3QsCisJZS5nLiwgbGlibmN1cnNlc19wLmEKKworICAgIC0td2l0aC1wdGhyZWFkCisJTGluayB3aXRoIFBPU0lYIHRocmVhZHMsIHNldCAtLWVuYWJsZS1yZWVudHJhbnQuICBUaGUgdXNlX3dpbmRvdygpIGFuZAorCXVzZV9zY3JlZW4oKSBmdW5jdGlvbnMgd2lsbCB1c2UgbXV0ZXgncywgYWxsb3dpbmcgcnVkaW1lbnRhcnkgc3VwcG9ydAorCWZvciBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucy4KKworICAgIC0td2l0aC1yY3MtaWRzCisJQ29tcGlsZS1pbiBSQ1MgaWRlbnRpZmllcnMuICBNb3N0IG9mIHRoZSBDIGZpbGVzIGhhdmUgYW4gaWRlbnRpZmllci4KKworICAgIC0td2l0aC1yZWwtdmVyc2lvbj1OVU0KKwlPdmVycmlkZSB0aGUgcmVsZWFzZSB2ZXJzaW9uLCB3aGljaCBtYXkgYmUgdXNlZCBpbiBzaGFyZWQgbGlicmFyeQorCWZpbGVuYW1lcy4gIFRoaXMgY29uc2lzdHMgb2YgYSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBudW1iZXIgc2VwYXJhdGVkCisJYnkgIi4iLiAgTm9ybWFsbHkgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBBQkkKKwl2ZXJzaW9uOyBzb21lIHBvcnRzIGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIGNvbXBhdGliaWxpdHkuCisKKyAgICAtLXdpdGgtc2hhcmVkCisJR2VuZXJhdGUgc2hhcmVkLWxpYnJhcmllcy4gIFRoZSBuYW1lcyBnaXZlbiBkZXBlbmQgb24gdGhlIHN5c3RlbSBmb3IKKwl3aGljaCB5b3UgYXJlIGJ1aWxkaW5nLCB0eXBpY2FsbHkgdXNpbmcgYSAiLnNvIiBzdWZmaXgsIGFsb25nIHdpdGgKKwlzeW1ib2xpYyBsaW5rcyB0aGF0IHJlZmVyIHRvIHRoZSByZWxlYXNlIHZlcnNpb24uCisKKwlOT1RFOiAgVW5sZXNzIHlvdSBvdmVycmlkZSB0aGUgY29uZmlndXJlIHNjcmlwdCBieSBzZXR0aW5nIHRoZSAkQ0ZMQUdTCisJZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZXNlIHdpbGwgbm90IGJlIGJ1aWx0IHdpdGggdGhlIC1nIGRlYnVnZ2luZworCW9wdGlvbi4KKworCU5PVEU6IEZvciBzb21lIGNvbmZpZ3VyYXRpb25zLCBlLmcuLCBpbnN0YWxsaW5nIGEgbmV3IHZlcnNpb24gb2YKKwluY3Vyc2VzIHNoYXJlZCBsaWJyYXJpZXMgb24gYSBtYWNoaW5lIHdoaWNoIGFscmVhZHkgaGFzIG5jdXJzZXMKKwlzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IGVuY291bnRlciBwcm9ibGVtcyB3aXRoIHRoZSBsaW5rZXIuCisJRm9yIGV4YW1wbGUsIGl0IG1heSBwcmV2ZW50IHlvdSBmcm9tIHJ1bm5pbmcgIHRoZSBidWlsZCB0cmVlJ3MKKwljb3B5IG9mIHRpYyAoZm9yIGluc3RhbGxpbmcgdGhlIHRlcm1pbmZvIGRhdGFiYXNlKSBiZWNhdXNlIGl0CisJbG9hZHMgdGhlIHN5c3RlbSdzIGNvcHkgb2YgdGhlIG5jdXJzZXMgc2hhcmVkIGxpYnJhcmllcy4gIEluIHRoYXQKKwljYXNlLCB1c2luZyB0aGUgbWlzYy9zaGxpYiBzY3JpcHQgbWF5IGJlIGhlbHBmdWwsIHNpbmNlIGl0IHNldHMKKwkkTERfTElCUkFSWV9QQVRIIHRvIHBvaW50IHRvIHRoZSBidWlsZCB0cmVlLCBlLmcuLAorCQkuL21pc2Mvc2hsaWIgbWFrZSBpbnN0YWxsIAkKKworICAgIC0td2l0aC1zaGxpYi12ZXJzaW9uPVhYWAorCVNwZWNpZnkgd2hldGhlciB0byB1c2UgdGhlIHJlbGVhc2Ugb3IgQUJJIHZlcnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMuCisJVGhpcyBpcyBub3JtYWxseSBjaG9zZW4gYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgdHlwZSBvZiBzeXN0ZW0KKwl3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIG9uLiAgV2UgdXNlIGl0IGZvciB0ZXN0aW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LgorCisgICAgLS13aXRoLXN5c21vdXNlCisJdXNlIEZyZWVCU0Qgc3lzbW91c2UgaW50ZXJmYWNlIHByb3ZpZGUgbW91c2Ugc3VwcG9ydCBvbiB0aGUgY29uc29sZS4KKworICAgIC0td2l0aC1zeXN0ZW0tdHlwZT1YWFgKKwlGb3IgdGVzdGluZywgb3ZlcnJpZGUgdGhlIGRlcml2ZWQgaG9zdCBzeXN0ZW0tdHlwZSB3aGljaCBpcyB1c2VkIHRvCisJZGVjaWRlIHRoaW5ncyBzdWNoIGFzIHRoZSBsaW5rZXIgY29tbWFuZHMgdXNlZCB0byBidWlsZCBzaGFyZWQKKwlsaWJyYXJpZXMuICBUaGlzIGlzIG5vcm1hbGx5IGNob3NlbiBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSB0eXBlIG9mCisJc3lzdGVtIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgb24uICBXZSB1c2UgaXQgZm9yIHRlc3RpbmcgdGhlIGNvbmZpZ3VyZQorCXNjcmlwdC4KKworICAgIC0td2l0aC10ZXJtaW5mby1kaXJzPVhYWAorCVNwZWNpZnkgYSBzZWFyY2gtbGlzdCBvZiB0ZXJtaW5mbyBkaXJlY3RvcmllcyB3aGljaCB3aWxsIGJlIGNvbXBpbGVkCisJaW50byB0aGUgbmN1cnNlcyBsaWJyYXJ5IChkZWZhdWx0OiBEQVRBRElSL3Rlcm1pbmZvKQorCisgICAgLS13aXRoLXRlcm1saWJbPVhYWF0KKwlXaGVuIGJ1aWxkaW5nIHRoZSBuY3Vyc2VzIGxpYnJhcnksIG9yZ2FuaXplIHRoaXMgYXMgdHdvIHBhcnRzOiAgdGhlCisJY3Vyc2VzIGxpYnJhcnkgKGxpYm5jdXJzZXMpIGFuZCB0aGUgbG93LWxldmVsIHRlcm1pbmZvIGxpYnJhcnkKKwkobGlidGluZm8pLiAgVGhpcyBpcyBkb25lIHRvIGFjY29tbW9kYXRlIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBvbmx5CisJdGhlIGxhdHRlci4gIFRoZSB0ZXJtaW5mbyBsaWJyYXJ5IGlzIGFib3V0IGhhbGYgdGhlIHNpemUgb2YgdGhlIHRvdGFsLgorCisJSWYgYW4gb3B0aW9uIHZhbHVlIGlzIGdpdmVuLCB0aGF0IG92ZXJyaWRlcyB0aGUgbmFtZSBvZiB0aGUgdGVybWluZm8KKwlsaWJyYXJ5LiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgd2lkZS1jaGFyYWN0ZXIgdmVyc2lvbiBpcyBidWlsdCwgdGhlCisJdGVybWluZm8gbGlicmFyeSB3b3VsZCBiZSBuYW1lZCBsaWJ0aW5mb3cuICBCdXQgdGhlIGxpYnRpbmZvdyBpbnRlcmZhY2UKKwlpcyB1cHdhcmQgY29tcGF0aWJsZSBmcm9tIGxpYnRpbmZvLCBzbyBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBvdmVybGF5CisJbGlidGluZm8uc28gd2l0aCBhICJ3aWRlIiB2ZXJzaW9uIG9mIGxpYnRpbmZvdy5zbyBieSByZW5hbWluZyBpdCB3aXRoCisJdGhpcyBvcHRpb24uCisKKyAgICAtLXdpdGgtdGVybXBhdGg9WFhYCisJU3BlY2lmeSBhIHNlYXJjaC1saXN0IG9mIHRlcm1jYXAgZmlsZXMgd2hpY2ggd2lsbCBiZSBjb21waWxlZCBpbnRvIHRoZQorCW5jdXJzZXMgbGlicmFyeSAoZGVmYXVsdDogIC9ldGMvdGVybWNhcDovdXNyL3NoYXJlL21pc2MvdGVybWNhcCkKKworICAgIC0td2l0aC10aWNsaWJbPVhYWF0KKwlXaGVuIGJ1aWxkaW5nIHRoZSBuY3Vyc2VzIGxpYnJhcnksIGJ1aWxkIGEgc2VwYXJhdGUgbGlicmFyeSBmb3IKKwl0aGUgbW9kdWxlcyB0aGF0IGFyZSB1c2VkIG9ubHkgYnkgdGhlIHV0aWxpdHkgcHJvZ3JhbXMuICBOb3JtYWxseQorCXRob3NlIHdvdWxkIGJlIGJ1bmRsZWQgd2l0aCB0aGUgdGVybWxpYiBvciBuY3Vyc2VzIGxpYnJhcmllcy4KKworCUlmIGFuIG9wdGlvbiB2YWx1ZSBpcyBnaXZlbiwgdGhhdCBvdmVycmlkZXMgdGhlIG5hbWUgb2YgdGhlIHRpYworCWxpYnJhcnkuICBBcyBpbiB0ZXJtbGliLCB0aGVyZSBpcyBubyBBQkkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQorCSJ3aWRlIiBsaWJ0aWN3LnNvIGFuZCBsaWJ0aWMuc28KKworCU5PVEU6IE92ZXJyaWRpbmcgdGhlIG5hbWUgb2YgdGhlIHRpYyBsaWJyYXJ5IG1heSBiZSB1c2VmdWwgaWYgeW91IGFyZQorCWFsc28gdXNpbmcgdGhlIC0td2l0aC10ZXJtbGliIG9wdGlvbiB0byByZW5hbWUgbGlidGluZm8uICBJZiB5b3UgYXJlCisJbm90IGRvaW5nIHRoYXQsIHJlbmFtaW5nIHRoZSB0aWMgbGlicmFyeSBjYW4gcmVzdWx0IGluIGNvbmZsaWN0aW5nCisJbGlicmFyeSBkZXBlbmRlbmNpZXMgZm9yIHRpYyBhbmQgb3RoZXIgcHJvZ3JhbXMgYnVpbHQgd2l0aCB0aGUgdGljCisJbGlicmFyeS4KKworICAgIC0td2l0aC10cmFjZQorCUNvbmZpZ3VyZSB0aGUgdHJhY2UoKSBmdW5jdGlvbiBhcyBwYXJ0IG9mIHRoZSBhbGwgbW9kZWxzIG9mIHRoZSBuY3Vyc2VzCisJbGlicmFyeS4gIE5vcm1hbGx5IGl0IGlzIHBhcnQgb2YgdGhlIGRlYnVnIChsaWJuY3Vyc2VzX2cpIGxpYnJhcnkgb25seS4KKworICAgIC0td2l0aC12YWxncmluZAorCUZvciB0ZXN0aW5nLCBjb21waWxlIHdpdGggZGVidWcgb3B0aW9uLgorCVRoaXMgYWxzbyBzZXRzIHRoZSAtLWRpc2FibGUtbGVha3Mgb3B0aW9uLgorCisgICAgLS13aXRob3V0LWFkYQorCVN1cHByZXNzIHRoZSBjb25maWd1cmUgc2NyaXB0J3MgY2hlY2sgZm9yIEFkYTk1LCBkbyBub3QgYnVpbGQgdGhlCisJQWRhOTUgYmluZGluZyBhbmQgcmVsYXRlZCBkZW1vLgorCisgICAgLS13aXRob3V0LWN1cnNlcy1oCisJRG9uJ3QgaW5zdGFsbCB0aGUgbmN1cnNlcyBoZWFkZXIgd2l0aCB0aGUgbmFtZSAiY3Vyc2VzLmgiLiAgUmF0aGVyLAorCWluc3RhbGwgYXMgIm5jdXJzZXMuaCIgYW5kIG1vZGlmeSB0aGUgaW5zdGFsbGVkIGhlYWRlcnMgYW5kIG1hbnBhZ2VzCisJYWNjb3JkaW5nbHkuCisKKyAgICAtLXdpdGhvdXQtY3h4CisJWFNJIGN1cnNlcyBkZWNsYXJlcyAiYm9vbCIgYXMgcGFydCBvZiB0aGUgaW50ZXJmYWNlLiAgQysrIGFsc28gZGVjbGFyZXMKKwkiYm9vbCIuICBOZWl0aGVyIHNwZWNpZmllcyB0aGUgc2l6ZSBhbmQgdHlwZSBvZiBib29sZWFucywgYnV0IGJvdGgKKwlpbnNpc3Qgb24gdGhlIHNhbWUgbmFtZS4gIFdlIGNob3NlIHRvIGFjY29tbW9kYXRlIHRoaXMgYnkgbWFraW5nIHRoZQorCWNvbmZpZ3VyZSBzY3JpcHQgY2hlY2sgZm9yIHRoZSBzaXplIGFuZCB0eXBlIChlLmcuLCB1bnNpZ25lZCBvciBzaWduZWQpCisJdGhhdCB5b3VyIEMrKyBjb21waWxlciB1c2VzIGZvciBib29sZWFucy4gIElmIHlvdSBkbyBub3Qgd2lzaCB0byB1c2UKKwluY3Vyc2VzIHdpdGggQysrLCB1c2UgdGhpcyBvcHRpb24gdG8gdGVsbCB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBub3QKKwlhZGp1c3QgbmN1cnNlcyBib29sIHRvIG1hdGNoIEMrKy4KKworICAgIC0td2l0aG91dC1jeHgtYmluZGluZworCVN1cHByZXNzIHRoZSBjb25maWd1cmUgc2NyaXB0J3MgY2hlY2sgZm9yIEMrKywgZG8gbm90IGJ1aWxkIHRoZQorCUMrKyBiaW5kaW5nIGFuZCByZWxhdGVkIGRlbW8uCisKKyAgICAtLXdpdGhvdXQtZGV2ZWxvcAorCURpc2FibGUgZGV2ZWxvcG1lbnQgb3B0aW9ucy4gIFRoaXMgZG9lcyBub3QgaW5jbHVkZSB0aG9zZSB0aGF0IGNoYW5nZQorCXRoZSBpbnRlcmZhY2UsIHN1Y2ggYXMgLS1lbmFibGUtd2lkZWMuCisKKyAgICAtLXdpdGhvdXQtZGxzeW0KKwlEbyBub3QgdXNlIGRsc3ltKCkgdG8gbG9hZCBHUE0gZHluYW1pY2FsbHkuCisKKyAgICAtLXdpdGhvdXQtcHJvZ3MKKwlUZWxsIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHN1cHByZXNzIHRoZSBidWlsZCBvZiBuY3Vyc2VzJyBhcHBsaWNhdGlvbgorCXByb2dyYW1zIChlLmcuLCB0aWMpLiAgVGhlIHRlc3QgYXBwbGljYXRpb25zIHdpbGwgc3RpbGwgYmUgYnVpbHQgaWYgeW91CisJdHlwZSAibWFrZSIsIHRob3VnaCBub3QgaWYgeW91IHNpbXBseSBkbyAibWFrZSBpbnN0YWxsIi4KKworICAgIC0td2l0aG91dC14dGVybS1uZXcKKwlUZWxsIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSAieHRlcm0tb2xkIiBmb3IgdGhlIGVudHJ5IHVzZWQgaW4KKwl0aGUgdGVybWluZm8gZGF0YWJhc2UuICBUaGlzIHdpbGwgd29yayB3aXRoIHZhcmlhdGlvbnMgc3VjaCBhcworCVgxMVI1IGFuZCBYMTFSNiB4dGVybS4KKworCitDT01QQVRJQklMSVRZIFdJVEggT0xERVIgVkVSU0lPTlMgT0YgTkNVUlNFUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBCZWNhdXNlIG5jdXJzZXMgaW1wbGVtZW50cyB0aGUgWC9PcGVuIEN1cnNlcyBTcGVjaWZpY2F0aW9uLCBpdHMgaW50ZXJmYWNlCisgICAgaXMgZmFpcmx5IHN0YWJsZS4gIFRoYXQgZG9lcyBub3QgbWVhbiB0aGUgaW50ZXJmYWNlIGRvZXMgbm90IGNoYW5nZS4KKyAgICBDaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBkb2N1bWVudGVkIGludGVyZmFjZXMgd2hlbiB3ZSBmaW5kIGRpZmZlcmVuY2VzCisgICAgYmV0d2VlbiBuY3Vyc2VzIGFuZCBYL09wZW4gb3IgaW1wbGVtZW50YXRpb25zIHdoaWNoIHRoZXkgY2VydGlmeSAoc3VjaCBhcworICAgIFNvbGFyaXMpLiAgV2UgYWRkIGV4dGVuc2lvbnMgdG8gdGhvc2UgaW50ZXJmYWNlcyB0byBzb2x2ZSBwcm9ibGVtcyBub3QKKyAgICBhZGRyZXNzZWQgYnkgdGhlIG9yaWdpbmFsIGN1cnNlcyBkZXNpZ24sIGJ1dCB0aG9zZSBtdXN0IG5vdCBjb25mbGljdCB3aXRoCisgICAgdGhlIFgvT3BlbiBkb2N1bWVudGF0aW9uLgorCisgICAgSGVyZSBhcmUgc29tZSBvZiB0aGUgbWFqb3IgaW50ZXJmYWNlIGNoYW5nZXMsIGFuZCByZWxhdGVkIHByb2JsZW1zIHdoaWNoCisgICAgeW91IG1heSBlbmNvdW50ZXIgd2hlbiBidWlsZGluZyBhIHN5c3RlbSB3aXRoIGRpZmZlcmVudCB2ZXJzaW9ucyBvZgorICAgIG5jdXJzZXM6CisKKyAgICA1LjcgKE5vdmVtYmVyIDIsIDIwMDgpCisJSW50ZXJmYWNlIGNoYW5nZXM6CisKKwkrIGdlbmVyYXRlIGxpbmthYmxlIHN0dWJzIGZvciBzb21lIG1hY3JvczoKKwkJZ2V0YXR0cnMKKworCSsgQWRkIG5ldyBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIHRpYy1saWJyYXJ5ICh0aGUgbm9uLWN1cnNlcyBwb3J0aW9uCisJICBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5IHVzZWQgZm9yIHRoZSB0aWMgcHJvZ3JhbSBhcyB3ZWxsIGFzIHNvbWUKKwkgIG90aGVycyBzdWNoIGFzIHRhY2suICBUaGVyZSBpcyBubyBBUEkgY2hhbmdlLCBidXQgbWFrZWZpbGVzIHdvdWxkIGJlCisJICBjaGFuZ2VkIHRvIHVzZSB0aGUgdGljLWxpYnJhcnkgYnVpbHQgc2VwYXJhdGVseS4KKwkgIAorCSAgdGFjaywgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSBmcm9tIG5jdXJzZXMsIHVzZXMgc29tZSBvZiB0aGUgaW50ZXJuYWwKKwkgIF9uY19YWFggZnVuY3Rpb25zLCB3aGljaCBhcmUgZGVjbGFyZWQgaW4gdGhlIHRpYy5oIGhlYWRlciBmaWxlLgorCisJICBUaGUgcmVhc29uIGZvciBwcm92aWRpbmcgdGhpcyBzZXBhcmF0ZSBsaWJyYXJ5IGlzIHRoYXQgbm9uZSBvZiB0aGUKKwkgIGZ1bmN0aW9ucyBpbiBpdCBhcmUgc3VpdGFibGUgZm9yIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4KKworCSsgQWRkIG5ldyBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gKG5jdXJzZXN0LCBuY3Vyc2Vzd3QpIHdoaWNoIHByb3ZpZGVzCisJICBydWRpbWVudGFyeSBzdXBwb3J0IGZvciBQT1NJWCB0aHJlYWRzLiAgVGhpcyBpbnRyb2R1Y2VzIG9wYXF1ZQorCSAgYWNjZXNzIGZ1bmN0aW9ucyB0byB0aGUgV0lORE9XIHN0cnVjdHVyZSBhbmQgYWRkcyBhIHBhcmFtZXRlciB0bworCSAgc2V2ZXJhbCBpbnRlcm5hbCBmdW5jdGlvbnMuCisKKwkrIG1vdmUgbW9zdCBpbnRlcm5hbCB2YXJpYWJsZXMgKGV4Y2VwdCB0aWMtbGlicmFyeSkgaW50byBkYXRhIGJsb2NrcworCSAgX25jX2dsb2JhbHMgYW5kIF9uY19wcmVzY3JlZW4gdG8gc2ltcGxpZnkgYW5hbHlzaXMuICBUaG9zZSB3ZXJlCisJICBnbG9iYWxseSBhY2Nlc3NpYmxlLCBidXQgc2luY2UgdGhleSB3ZXJlIG5vdCBwYXJ0IG9mIHRoZSBkb2N1bWVudGVkCisJICBBUEksIHRoZXJlIGlzIG5vIEFCSSBjaGFuZ2UuCisKKwkrIGNoYW5nZWQgc3RhdGljIHRhYmxlcyBvZiBzdHJpbmdzIHRvIGJlIGluZGljZXMgaW50byBsb25nIHN0cmluZ3MsIHRvCisJICBpbXByb3ZlIHN0YXJ0dXAgcGVyZm9ybWFuY2UuICBUaGlzIGNoYW5nZXMgcGFyYW1ldGVyIGxpc3RzIGZvciBzb21lCisJICBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLgorCisJQWRkZWQgZXh0ZW5zaW9uczoKKworCSsgYWRkIE5DVVJTRVNfT1BBUVVFIGRlZmluaXRpb24gaW4gY3Vyc2VzLmggdG8gY29udHJvbCB3aGV0aGVyIGludGVybmFsCisJICBkZXRhaWxzIG9mIHRoZSBXSU5ET1cgc3RydWN0dXJlIGFyZSB2aXNpYmxlIHRvIGFuIGFwcGxpY2F0aW9uLiAgVGhpcworCSAgaXMgYWx3YXlzIGRlZmluZWQgd2hlbiB0aGUgdGhyZWFkZWQgbGlicmFyeSBpcyBidWlsdCwgYW5kIGlzIG9wdGlvbmFsCisJICBvdGhlcndpc2UuICBOZXcgZnVuY3Rpb25zIGZvciB0aGlzOiAgaXNfY2xlYXJlZCwgaXNfaWRjb2ssIGlzX2lkbG9rLAorCSAgaXNfaW1tZWRvaywgaXNfa2V5cGFkLCBpc19sZWF2ZW9rLCBpc19ub2RlbGF5LCBpc19ub3RpbWVvdXQsCisJICBpc19zY3JvbGxvaywgaXNfc3luY29rLCB3Z2V0cGFyZW50IGFuZCB3Z2V0c2NycmVnLgorCisJKyB0aGUgdGhyZWFkZWQgbGlicmFyeSAobmN1cnNlc3QpIGFsc28gZGlzYWxsb3dzIGRpcmVjdCB1cGRhdGluZyBvZgorCSAgZ2xvYmFsIGN1cnNlcy1sZXZlbCB2YXJpYWJsZXMsIHByb3ZpZGluZyBmdW5jdGlvbnMgKHZpYSBtYWNyb3MpIGZvcgorCSAgb2J0YWluaW5nIHRoZWlyIHZhbHVlLiAgQSBmZXcgb2YgdGhvc2UgdmFyaWFibGVzIGNhbiBiZSBtb2RpZmllZCBieQorCSAgdGhlIGFwcGxpY2F0aW9uLCB1c2luZyBuZXcgZnVuY3Rpb25zOiAgc2V0X2VzY2RlbGF5LCBzZXRfdGFic2l6ZQorCisJKyBhZGRlZCBmdW5jdGlvbnMgdXNlX3dpbmRvdygpIGFuZCB1c2Vfc2NyZWVuKCkgd2hpY2ggd3JhcCBhIG11dGV4CisJICAoaWYgdGhyZWFkaW5nIGlzIGNvbmZpZ3VyZWQpIGFyb3VuZCBhIGNhbGwgdG8gYSB1c2VyLXN1cHBsaWVkCisJICBmdW5jdGlvbi4KKworCUFkZGVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2dldF9hbGlhc190YWJsZQorCQlfbmNfZ2V0X3NjcmVlbnNpemUKKwkJX25jX2tleW5hbWUKKwkJX25jX3NjcmVlbl9vZgorCQlfbmNfc2V0X25vX3BhZGRpbmcKKwkJX25jX3RyYWNlY2hhcgorCQlfbmNfdHJhY2Vtb3VzZQorCQlfbmNfdW5jdHJsCisJCV9uY191bmdldGNoCisKKwkJVGhlc2UgYXJlIHVzZWQgZm9yIGxlYWstdGVzdGluZywgYW5kIGFyZSBzdHVicyBmb3IKKwkJQUJJIGNvbXBhdGliaWxpdHkgd2hlbiBuY3Vyc2VzIGlzIG5vdCBjb25maWd1cmVkIGZvciB0aGF0CisJCXVzaW5nIHRoZSAtLWRpc2FibGUtbGVha3MgY29uZmlndXJlIHNjcmlwdCBvcHRpb246CisKKwkJX25jX2ZyZWVfYW5kX2V4aXQKKwkJX25jX2xlYWtzX3RpbmZvCisKKwlSZW1vdmVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJbm9uZQorCisJTW9kaWZpZWQgaW50ZXJuYWwgZnVuY3Rpb25zOgorCQlfbmNfZmlmb19kdW1wCisJCV9uY19maW5kX2VudHJ5CisJCV9uY19oYW5kbGVfc2lnd2luY2gKKwkJX25jX2luaXRfa2V5dHJ5CisJCV9uY19rZXlwYWQKKwkJX25jX2xvY2FsZV9icmVha3NfYWNzCisJCV9uY190aW1lZF93YWl0CisJCV9uY191cGRhdGVfc2NyZWVuc2l6ZQorCisJCVVzZSBuZXcgdHlwZWRlZiBUUklFUyB0byByZXBsYWNlICJzdHJ1Y3QgdHJpZXMiOgorCisJCV9uY19hZGRfdG9fdHJ5CisJCV9uY19leHBhbmRfdHJ5CisJCV9uY19yZW1vdmVfa2V5CisJCV9uY19yZW1vdmVfc3RyaW5nCisJCV9uY190cmFjZV90cmllcworCisgICAgNS42IChEZWNlbWJlciAxNywgMjAwNikKKwlJbnRlcmZhY2UgY2hhbmdlczoKKworCSsgZ2VuZXJhdGUgbGlua2FibGUgc3R1YnMgZm9yIHNvbWUgbWFjcm9zOgorCisJICBnZXRiZWd4LCBnZXRiZWd5LCBnZXRjdXJ4LCBnZXRjdXJ5LCBnZXRtYXh4LCBnZXRtYXh5LCBnZXRwYXJ4LAorCSAgZ2V0cGFyeSwgZ2V0cGFyeSwKKworCSAgYW5kIChmb3IgbGlibmN1cnNlc3cpCisKKwkgIHdnZXRia2dybmQKKworCUFkZGVkIGV4dGVuc2lvbnM6CisJCW5vZmlsdGVyKCkKKwkJdXNlX2xlZ2FjeV9jb2RpbmcoKQorCisJQWRkZWQgaW50ZXJuYWwgZnVuY3Rpb25zOgorCQlfbmNfZmlyc3RfZGIKKwkJX25jX2dldF9zb3VyY2UKKwkJX25jX2hhbmRsZV9zaWd3aW5jaAorCQlfbmNfaXNfYWJzX3BhdGgKKwkJX25jX2lzX2Rpcl9wYXRoCisJCV9uY19pc19maWxlX3BhdGgKKwkJX25jX2tlZXBfdGljX2RpcgorCQlfbmNfa2VlcF90aWNfZGlyCisJCV9uY19sYXN0X2RiCisJCV9uY19uZXh0X2RiCisJCV9uY19yZWFkX3Rlcm10eXBlCisJCV9uY190aWNfZGlyCisKKwkJQWxzbyAoaWYgdXNpbmcgdGhlIGhhc2hlZCBkYXRhYmFzZSBjb25maWd1cmF0aW9uKToKKworCQlfbmNfZGJfY2xvc2UKKwkJX25jX2RiX2ZpcnN0CisJCV9uY19kYl9nZXQKKwkJX25jX2RiX2hhdmVfZGF0YQorCQlfbmNfZGJfaGF2ZV9pbmRleAorCQlfbmNfZGJfbmV4dAorCQlfbmNfZGJfb3BlbgorCQlfbmNfZGJfcHV0CisKKwkJb3RoZXJ3aXNlCisKKwkJX25jX2hhc2hlZF9kYgorCisJUmVtb3ZlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCW5vbmUKKworCU1vZGlmaWVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2FkZF90b190cnkKKwkJX25jX2RvX2NvbG9yCisJCV9uY19leHBhbmRfdHJ5CisJCV9uY19yZW1vdmVfa2V5CisJCV9uY19zZXR1cHNjcmVlbgorCisgICAgNS41IChPY3RvYmVyIDEwLCAyMDA1KQorCUludGVyZmFjZSBjaGFuZ2VzOgorCisJKyB0ZXJtaW5mbyBpbnN0YWxscyAieHRlcm0tbmV3IiBhcyAieHRlcm0iIGVudHJ5IHJhdGhlciB0aGFuCisJICAieHRlcm0tb2xkIiAoYWthIHh0ZXJtLXI2KS4KKworCSsgdGVybWluZm8gZGF0YSBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIHRpYyAteCBvcHRpb24gKGZldyBzeXN0ZW1zCisJICBzdGlsbCB1c2UgbmN1cnNlcyA0LjIpLgorCisJKyBtb2RpZnkgQysrIGJpbmRpbmcgdG8gd29yayB3aXRoIG5ld2VyIEMrKyBjb21waWxlcnMgYnkgcHJvdmlkaW5nCisJICBpbml0aWFsaXplcnMgYW5kIHVzaW5nIG1vZGVybiBjYXN0cy4gIE9sZC1zdHlsZSBoZWFkZXIgbmFtZXMgYXJlCisJICBzdGlsbCB1c2VkIGluIHRoaXMgcmVsZWFzZSB0byBhbGxvdyBjb21waWxpbmcgd2l0aCBub3Qtc28tb2xkCisJICBjb21waWxlcnMuCisKKwkrIGZvcm0gYW5kIG1lbnUgbGlicmFyaWVzIG5vdyB3b3JrIHdpdGggd2lkZS1jaGFyYWN0ZXIgZGF0YS4gCisJICBBcHBsaWNhdGlvbnMgd2hpY2ggYnlwYXNzZWQgdGhlIGZvcm0gbGlicmFyeSBhbmQgbWFuaXB1bGF0ZWQgdGhlCisJICBGSUVMRC5idWYgZGF0YSBkaXJlY3RseSB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggbGliZm9ybXcsIHNpbmNlCisJICB0aGF0IG5vIGxvbmdlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgY2hhci4gIFRoZSBzZXRfZmllbGRfYnVmZmVyKCkKKwkgIGFuZCBmaWVsZF9idWZmZXIoKSBmdW5jdGlvbnMgdHJhbnNsYXRlIHRvL2Zyb20gdGhlIGFjdHVhbCBmaWVsZAorCSAgZGF0YS4KKworCSsgY2hhbmdlIFNQLT5fY3VycmVudF9hdHRyIHRvIGEgcG9pbnRlciwgYWRqdXN0IGlmZGVmJ3MgdG8gZW5zdXJlIHRoYXQKKwkgIGxpYnRpbmZvLnNvIGFuZCBsaWJ0aW5mb3cuc28gaGF2ZSB0aGUgc2FtZSBBQkkuICBUaGUgcmVhc29uIGZvciB0aGlzCisJICBpcyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgd2hpY2ggYmVsb25ncyB0byB0aGUgdXBwZXItbGV2ZWwKKwkgIG5jdXJzZXMgbGlicmFyeSBoYXMgYSBkaWZmZXJlbnQgc2l6ZSBpbiBlYWNoIG1vZGVsLgorCisJKyB3aW5uc3RyKCkgbm93IHJldHVybnMgbXVsdGlieXRlIGNoYXJhY3RlciBzdHJpbmdzIGZvciB0aGUKKwkgIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24uCisKKwkrIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpIG5vIGxvbmdlciByZXF1aXJlcyB0aGF0IHVzZV9kZWZhdWx0X2NvbG9ycygpCisJICBiZSBjYWxsZWQgZmlyc3QuCisKKwkrIGRhdGFfYWhlYWQoKSBub3cgd29ya3Mgd2l0aCB3aWRlLWNoYXJhY3RlcnMuCisKKwkrIHNsa19zZXQoKSBhbmQgc2xrX3dzZXQoKSBub3cgYWNjZXB0IGFuZCBzdG9yZSBtdWx0aWJ5dGUgb3IKKwkgIG11bHRpY29sdW1uIGNoYXJhY3RlcnMuCisKKwkrIHN0YXJ0X2NvbG9yKCkgbm93IHJldHVybnMgT0sgaWYgY29sb3JzIGhhdmUgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQuCisJICBzdGFydF9jb2xvcigpIGFsc28gcmV0dXJucyBFUlIgaWYgaXQgY2Fubm90IGFsbG9jYXRlIG1lbW9yeS4KKworCSsgcGFpcl9jb250ZW50KCkgbm93IHJldHVybnMgLTEgZm9yIGNvbnNpc3RlbmN5IHdpdGggaW5pdF9wYWlyKCkgaWYgaXQKKwkgIGNvcnJlc3BvbmRzIHRvIHRoZSBkZWZhdWx0LWNvbG9yLgorCisJKyB1bmN0cmwoKSBub3cgcmV0dXJucyBudWxsIGlmIGl0cyBwYXJhbWV0ZXIgZG9lcyBub3QgY29ycmVzcG9uZAorCSAgdG8gYW4gdW5zaWduZWQgY2hhci4KKworCUFkZGVkIGV4dGVuc2lvbnM6CisJCUV4cGVyaW1lbnRhbCBtb3VzZSB2ZXJzaW9uIDIgc3VwcG9ydHMgd2hlZWwgbWljZSB3aXRoIGJ1dHRvbnMKKwkJNCBhbmQgNS4gIFRoaXMgcmVxdWlyZXMgQUJJIDYgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUgZW5jb2RpbmcKKwkJb2YgbW91c2UgZXZlbnRzLgorCisJCUV4cGVyaW1lbnRhbCBleHRlbmRlZCBjb2xvcnMgYWxsb3dzIGVuY29kaW5nIG9mIDI1NiBmb3JlZ3JvdW5kCisJCWFuZCBiYWNrZ3JvdW5kIGNvbG9ycywgZS5nLiwgd2l0aCB0aGUgeHRlcm0tMjU2Y29sb3Igb3IKKwkJeHRlcm0tODhjb2xvciB0ZXJtaW5mbyBlbnRyaWVzLiAgVGhpcyByZXF1aXJlcyBBQkkgNiBiZWNhdXNlCisJCWl0IGNoYW5nZXMgdGhlIHNpemUgb2YgY2NoYXJfdC4KKworCUFkZGVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2NoZWNrX3Rlcm10eXBlMgorCQlfbmNfcmVzb2x2ZV91c2VzMgorCQlfbmNfcmV0cmFjZV9jcHRyCisJCV9uY19yZXRyYWNlX2N2b2lkX3B0cgorCQlfbmNfcmV0cmFjZV92b2lkX3B0cgorCQlfbmNfc2V0dXBfdGVybQorCisJUmVtb3ZlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCW5vbmUKKworCU1vZGlmaWVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2luc2VydF9jaAorCQlfbmNfc2F2ZV9zdHIKKwkJX25jX3RyYW5zX3N0cmluZworCisgICAgNS40IChGZWJydWFyeSA4LCAyMDA0KQorCUludGVyZmFjZSBjaGFuZ2VzOgorCisJKyBhZGQgdGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgZm9yIFgvT3BlbiBjdXJzZXMgd2lkZS1jaGFyYWN0ZXIgc3VwcG9ydC4KKwkgIFRoZXNlIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgbGlicmFyeSBpcyBjb25maWd1cmVkIHVzaW5nIHRoZQorCSAgLS1lbmFibGUtd2lkZWMgb3B0aW9uLgorCQlwZWNob193Y2hhcigpCisJCXNsa193c2V0KCkKKworCSsgd3JpdGUgZ2V0eXgoKSBhbmQgcmVsYXRlZCAyLXJldHVybiBtYWNyb3MgaW4gdGVybXMgb2YgZ2V0Y3VyeSgpLAorCSAgZ2V0Y3VyeCgpLCBldGMuCisKKwkrIHNpbXBsaWZ5IGlmZGVmIGZvciBib29sIGRlY2xhcmF0aW9uIGluIGN1cnNlcy5oCisKKwkrIG1vZGlmeSBpZmRlZidzIGluIGN1cnNlcy5oIHRoYXQgZGlzYWJsZWQgdXNlIG9mIF9fYXR0cmlidXRlX18oKSBmb3IKKwkgIGcrKywgc2luY2UgcmVjZW50IHZlcnNpb25zIGltcGxlbWVudCB0aGUgY2FzZXMgd2hpY2ggbmN1cnNlcyB1c2VzLgorCisJKyBjaGFuZ2Ugc29tZSBpbnRlcmZhY2VzIHRvIHVzZSBjb25zdDoKKwkJZGVmaW5lX2tleSgpCisJCW12cHJpbnR3KCkKKwkJbXZ3cHJpbnR3KCkKKwkJcHJpbnR3KCkKKwkJdndfcHJpbnR3KCkKKwkJd2luc25zdHIoKQorCQl3cHJpbnR3KCkKKworCUFkZGVkIGV4dGVuc2lvbnM6CisJCWtleV9kZWZpbmVkKCkKKworCUFkZGVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2dldF9sb2NhbGUoKQorCQlfbmNfaW5zZXJ0X2NoKCkKKwkJX25jX2lzX2NoYXJhYmxlKCkJd2lkZQorCQlfbmNfbG9jYWxlX2JyZWFrc19hY3MoKQorCQlfbmNfcGF0aGxhc3QoKQorCQlfbmNfdG9fY2hhcigpCQl3aWRlCisJCV9uY190b193aWRlY2hhcigpCXdpZGUKKwkJX25jX3RwYXJtX2FuYWx5emUoKQorCQlfbmNfdHJhY2VfYnVmY2F0KCkJZGVidWcKKwkJX25jX3VuaWNvZGVfbG9jYWxlKCkKKworCVJlbW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25zOgorCQlfbmNfb3V0c3RyKCkKKwkJX25jX3NpZ2FjdGlvbigpCisKKwlNb2RpZmllZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19yZW1vdmVfc3RyaW5nKCkKKwkJX25jX3JldHJhY2VfY2h0eXBlKCkKKworICAgIDUuMyAoT2N0b2JlciAxMiwgMjAwMikKKwlJbnRlcmZhY2UgY2hhbmdlczoKKworCSsgY2hhbmdlIHR5cGUgZm9yIGJvb2wgdXNlZCBpbiBoZWFkZXJzIHRvIE5DVVJTRVNfQk9PTCwgd2hpY2ggdXN1YWxseQorCSAgaXMgdGhlIHNhbWUgYXMgdGhlIGNvbXBpbGVyJ3MgZGVmaW5pdGlvbiBmb3IgJ2Jvb2wnLgorCisJKyBhZGQgYWxsIGJ1dCB0d28gZnVuY3Rpb25zIGZvciBYL09wZW4gY3Vyc2VzIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQuCisJICBUaGVzZSBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlIGxpYnJhcnkgaXMgY29uZmlndXJlZCB1c2luZyB0aGUKKwkgIC0tZW5hYmxlLXdpZGVjIG9wdGlvbi4gIE1pc3NpbmcgZnVuY3Rpb25zIGFyZQorCQlwZWNob193Y2hhcigpCisJCXNsa193c2V0KCkKKworCSsgYWRkIGVudmlyb25tZW50IHZhcmlhYmxlICROQ1VSU0VTX0FTU1VNRURfQ09MT1JTIHRvIG1vZGlmeSB0aGUKKwkgIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpIGV4dGVuc2lvbi4KKworCUFkZGVkIGV4dGVuc2lvbnM6CisJCWlzX3Rlcm1fcmVzaXplZCgpCisJCXJlc2l6ZV90ZXJtKCkKKworCUFkZGVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2FsdGNoYXJzZXRfbmFtZSgpCWRlYnVnCisJCV9uY19yZXNldF9jb2xvcnMoKQorCQlfbmNfcmV0cmFjZV9ib29sKCkJZGVidWcKKwkJX25jX3JldHJhY2VfdW5zaWduZWQoKQlkZWJ1ZworCQlfbmNfcm9vdG5hbWUoKQorCQlfbmNfdHJhY2VfdHR5bW9kZSgpCWRlYnVnCisJCV9uY192YXJhcmdzKCkJCWRlYnVnCisJCV9uY192aXNidWZuKCkJCWRlYnVnCisJCV9uY193Z2V0Y2goKQorCisJUmVtb3ZlZCBpbnRlcm5hbCBmdW5jdGlvbnM6CisJCV9uY19iYWNrZ3JvdW5kKCkKKworCU1vZGlmaWVkIGludGVybmFsIGZ1bmN0aW9uczoKKwkJX25jX2ZyZWVhbGwoKQkJZGVidWcKKworICAgIDUuMiAoT2N0b2JlciAyMSwgMjAwMCkKKwlJbnRlcmZhY2UgY2hhbmdlczoKKworCSsgcmV2ZXJ0IHRlcm1jYXAgb3NwZWVkIHZhcmlhYmxlIHRvICdzaG9ydCcgKHNlZSBkaXNjdXNzaW9uIG9mIHRoZQorCSAgLS13aXRoLW9zcGVlZCBjb25maWd1cmUgb3B0aW9uKS4KKworICAgIDUuMSAoSnVseSA4LCAyMDAwKQorCUludGVyZmFjZSBjaGFuZ2VzOgorCisJKyBtYWRlIHRoZSBleHRlbmRlZCB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMKKwkgIChjb25maWd1cmUgLS1lbmFibGUtdGNhcC1uYW1lcykgYSBzdGFuZGFyZCBmZWF0dXJlLiAgVGhpcyBzaG91bGQKKwkgIGJlIHRyYW5zcGFyZW50IHRvIGFwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCByZXF1aXJlIGl0LgorCisJKyByZW1vdmVkIHRoZSB0cmFjZSgpIGZ1bmN0aW9uIGFuZCByZWxhdGVkIHRyYWNlIHN1cHBvcnQgZnJvbSB0aGUKKwkgIHByb2R1Y3Rpb24gbGlicmFyeS4KKworCSsgbW9kaWZpZWQgY3Vyc2VzLmguaW4sIHVuZGVmJ2luZyBzb21lIHN5bWJvbHMgdG8gYXZvaWQgY29uZmxpY3QKKwkgIHdpdGggQysrIFNUTC4KKworCUFkZGVkIGV4dGVuc2lvbnM6ICBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKS4KKworICAgIDUuMCAoT2N0b2JlciAyMywgMTk5OSkKKwlJbnRlcmZhY2UgY2hhbmdlczoKKworCSsgaW1wbGVtZW50ZWQgdGhlIHdjb2xvcl9zZXQoKSBhbmQgc2xrX2NvbG9yKCkgZnVuY3Rpb25zLgorCisJKyBtb3ZlIG1hY3JvIHdpbmNoIHRvIGEgZnVuY3Rpb24sIHRvIGhpZGUgZGV0YWlscyBvZiBzdHJ1Y3QgbGRhdAorCisJKyBjb3JyZWN0ZWQgcHJvdG90eXBlcyBmb3Igc2xrXyogZnVuY3Rpb25zLCB1c2luZyBjaHR5cGUgcmF0aGVyIHRoYW4KKwkgIGF0dHJfdC4KKworCSsgdGhlIHNsa19hdHRyX3tzZXQsb2ZmLG9ufSBmdW5jdGlvbnMgbmVlZCBhbiBhZGRpdGlvbmFsIHZvaWQqCisJICBwYXJhbWV0ZXIgYWNjb3JkaW5nIHRvIFhTSS4KKworCSsgbW9kaWZpZWQgc2V2ZXJhbCBwcm90b3R5cGVzIHRvIGNvcnJlc3BvbmQgd2l0aCAxOTk3IHZlcnNpb24gb2YgWC9PcGVuCisJICBDdXJzZXM6ICBbd11hdHRyX2dldCgpLCBbd11hdHRyX3NldCgpLCBib3JkZXJfc2V0KCkgaGF2ZSBkaWZmZXJlbnQKKwkgIHBhcmFtZXRlcnMuICBTb21lIGZ1bmN0aW9ucyB3ZXJlIHJlbmFtZWQgb3IgbWlzc3BlbGxlZDoKKwkgIGVyYXNlX3djaGFyKCksIGluX3djaG50cigpLCBtdmluX3djaG50cigpLiAgU29tZSBkZXZlbG9wZXJzIGhhdmUgdXNlZAorCSAgYXR0cl9nZXQoKS4KKworCUFkZGVkIGV4dGVuc2lvbnM6ICBrZXlib3VuZCgpLCBjdXJzZXNfdmVyc2lvbigpLgorCisJVGVybWluZm8gZGF0YWJhc2UgY2hhbmdlczoKKworCSsgY2hhbmdlIHRyYW5zbGF0aW9uIGZvciB0ZXJtY2FwICdycycgdG8gdGVybWluZm8gJ3JzMicsIHdoaWNoIGlzCisJICB0aGUgZG9jdW1lbnRlZCBlcXVpdmFsZW50LCByYXRoZXIgdGhhbiAncnMxJy4KKworCVRoZSBwcm9ibGVtcyBhcmUgc3VidGxlciBpbiByZWNlbnQgcmVsZWFzZXMuCisKKwlhKSBUaGlzIHJlbGVhc2UgcHJvdmlkZXMgdXNlcnMgd2l0aCB0aGUgYWJpbGl0eSB0byBkZWZpbmUgdGhlaXIgb3duCisJICAgdGVybWluYWwgY2FwYWJpbGl0eSBleHRlbnNpb25zLCBsaWtlIHRlcm1jYXAuICBUbyBhY2NvbXBsaXNoIHRoaXMsCisJICAgd2UgcmVkZXNpZ25lZCB0aGUgVEVSTVRZUEUgc3RydWN0IChpbiB0ZXJtLmgpLiAgVmVyeSBmZXcKKwkgICBhcHBsaWNhdGlvbnMgdXNlIHRoaXMgc3RydWN0LiAgVGhleSBtdXN0IGJlIHJlY29tcGlsZWQgdG8gd29yayB3aXRoCisJICAgdGhlIDUuMCBsaWJyYXJ5LgorCisJYSkgSWYgeW91IHVzZSB0aGUgZXh0ZW5kZWQgdGVybWluZm8gbmFtZXMgKGkuZS4sIHlvdSB1c2VkIGNvbmZpZ3VyZQorCSAgIC0tZW5hYmxlLXRjYXAtbmFtZXMpLCB0aGUgcmVzdWx0aW5nIHRlcm1pbmZvIGRhdGFiYXNlIGNhbiBoYXZlIHNvbWUKKwkgICBlbnRyaWVzIHdoaWNoIGFyZSBub3QgcmVhZGFibGUgYnkgb2xkZXIgdmVyc2lvbnMgb2YgbmN1cnNlcy4gIFRoaXMKKwkgICBpcyBhIGJ1ZyBpbiB0aGUgb2xkZXIgdmVyc2lvbnM6CisKKwkgICArIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBzdG9yZXMgYm9vbGVhbnMsIG51bWJlcnMgYW5kIHN0cmluZ3MgaW4KKwkgICAgIGFycmF5cy4gIFRoZSBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBhcnJheXMgYXJlCisJICAgICBzcGVjaWZpZWQgYnkgWC9PcGVuLiAgbmN1cnNlcyByZWNvZ25pemVzIGEgbnVtYmVyIG9mIG9ic29sZXRlIGFuZAorCSAgICAgZXh0ZW5kZWQgbmFtZXMgd2hpY2ggYXJlIHN0b3JlZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHNwZWNpZmllZAorCSAgICAgZW50cmllcy4KKworCSAgICsgYSBjaGFuZ2UgdG8gcmVhZF9lbnRyeS5jIGluIDk1MTAwMSBtYWRlIHRoZSBsaWJyYXJ5IGRvIGFuIGxzZWVrKCkKKwkgICAgIGNhbGwgaW5jb3JyZWN0bHkgc2tpcHBpbmcgZGF0YSB3aGljaCBpcyBhbHJlYWR5IHJlYWQgZnJvbSB0aGUKKwkgICAgIHN0cmluZyBhcnJheS4gIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiB0aGUKKwkgICAgIHRlcm1pbmZvIGRhdGEgZmlsZSBpcyBncmVhdGVyIHRoYW4gU1RSQ09VTlQsIHRoZSBudW1iZXIgb2YKKwkgICAgIHNwZWNpZmllZCBhbmQgb2Jzb2xldGUgb3IgZXh0ZW5kZWQgc3RyaW5ncy4KKworCSAgICsgYXMgcGFydCBvZiBhbGlnbm1lbnQgd2l0aCB0aGUgWC9PcGVuIGZpbmFsIHNwZWNpZmljYXRpb24sIGluIHRoZQorCSAgICAgOTkwMTA5IHBhdGNoIHdlIGFkZGVkIHR3byBuZXcgdGVybWluZm8gY2FwYWJpbGl0aWVzOgorCSAgICAgc2V0X2FfYXR0cmlidXRlcyBhbmQgc2V0X3BnbGVuX2luY2gpLiAgVGhpcyBtYWtlcyB0aGUgaW5kaWNlcyBmb3IKKwkgICAgIHRoZSBvYnNvbGV0ZSBhbmQgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIHNoaWZ0IHVwIGJ5IDIuCisKKwkgICArIHRoZSBsYXN0IHR3byBjYXBhYmlsaXRpZXMgaW4gdGhlIG9ic29sZXRlL2V4dGVuZGVkIGxpc3QgYXJlIG1lbXUKKwkgICAgIGFuZCBtZW1sLCB3aGljaCBhcmUgZm91bmQgaW4gbW9zdCB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgZm9yIHh0ZXJtLgorCisJICAgICBXaGVuIHRyeWluZyB0byByZWFkIHRoaXMgdGVybWluZm8gZW50cnksIHRoZSBzcHVyaW91cyBsc2VlaygpCisJICAgICBjYXVzZXMgdGhlIGxpYnJhcnkgdG8gYXR0ZW1wdCB0byByZWFkIHRoZSBmaW5hbCBwb3J0aW9uIG9mIHRoZQorCSAgICAgdGVybWluZm8gZGF0YSAodGhlIHRleHQgb2YgdGhlIHN0cmluZyBjYXBhYmlsaXRpZXMpIDQgY2hhcmFjdGVycworCSAgICAgcGFzdCBpdHMgc3RhcnRpbmcgcG9pbnQsIGFuZCByZWFkcyA0IGNoYXJhY3RlcnMgdG9vIGZldy4gIFRoZQorCSAgICAgbGlicmFyeSByZWplY3RzIHRoZSBkYXRhLCBhbmQgYXBwbGljYXRpb25zIGFyZSB1bmFibGUgdG8KKwkgICAgIGluaXRpYWxpemUgdGhhdCB0ZXJtaW5hbCB0eXBlLgorCisJICAgRklYOiByZW1vdmUgbWVtdSBhbmQgbWVtbCBmcm9tIHRoZSB4dGVybSBkZXNjcmlwdGlvbi4gIFRoZXkgYXJlCisJICAgb2Jzb2xldGUsIG5vdCB1c2VkIGJ5IG5jdXJzZXMuICAoSXQgYXBwZWFycyB0aGF0IHRoZSBmZWF0dXJlIHdhcworCSAgIGFkZGVkIHRvIHh0ZXJtIHRvIG1ha2UgaXQgbW9yZSBsaWtlIGhwdGVybSkuCisKKwkgICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gaWYgeW91IGRvIG5vdCB1c2UgdGhlIC14IG9wdGlvbiBvZiB0aWMgdG8KKwkgICBjcmVhdGUgYSB0ZXJtaW5mbyBkYXRhYmFzZSB3aXRoIGV4dGVuZGVkIG5hbWVzLiAgTm90ZSB0aGF0IHRoZQorCSAgIHVzZXItZGVmaW5lZCB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGlzIGJ1ZywKKwkgICBzaW5jZSB0aGV5IGFyZSBzdG9yZWQgaW4gYSB0YWJsZSBhZnRlciB0aGUgb2xkZXIgdGVybWluZm8gZGF0YSBlbmRzLAorCSAgIGFuZCBhcmUgaW52aXNpYmxlIHRvIHRoZSBvbGRlciBsaWJyYXJpZXMuCisKKwljKSBTb21lIGRldmVsb3BlcnMgZGlkIG5vdCB3aXNoIHRvIHVzZSB0aGUgQysrIGJpbmRpbmcsIGFuZCB1c2VkIHRoZQorCSAgIGNvbmZpZ3VyZSAtLXdpdGhvdXQtY3h4IG9wdGlvbi4gIFRoaXMgY2F1c2VzIHByb2JsZW1zIGlmIHNvbWVvbmUKKwkgICB1c2VzIHRoZSBuY3Vyc2VzIGxpYnJhcnkgZnJvbSBDKysgYmVjYXVzZSB0aGF0IGNvbmZpZ3VyZSB0ZXN0CisJICAgZGV0ZXJtaW5lcyB0aGUgdHlwZSBmb3IgQysrJ3MgYm9vbCBhbmQgbWFrZXMgbmN1cnNlcyBtYXRjaCBpdCwgc2luY2UKKwkgICBib3RoIEMrKyBhbmQgY3Vyc2VzIGFyZSBzcGVjaWZpZWQgdG8gZGVjbGFyZSBib29sLiAgQ2FsbGluZyBuY3Vyc2VzCisJICAgZnVuY3Rpb25zIHdpdGggdGhlIGluY29ycmVjdCB0eXBlIGZvciBib29sIHdpbGwgY2F1c2UgZXhlY3V0aW9uCisJICAgZXJyb3JzLiAgSW4gNS4wIHdlIGFkZGVkIGEgY29uZmlndXJlIG9wdGlvbiAiLS13aXRob3V0LWN4eC1iaW5kaW5nIgorCSAgIHdoaWNoIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGJpbmRpbmcgaXRzZWxmIGlzIGJ1aWx0IGFuZCBpbnN0YWxsZWQuCisKKyAgICA0LjIgKE1hcmNoIDIsIDE5OTgpCisJSW50ZXJmYWNlIGNoYW5nZXM6CisKKwkrIGNvcnJlY3QgcHJvdG90eXBlIGZvciB0ZXJtYXR0cnMoKSBhcyBwZXIgWFBHNCB2ZXJzaW9uIDIuCisKKwkrIGFkZCBwbGFjZWhvbGRlciBwcm90b3R5cGVzIGZvciBjb2xvcl9zZXQoKSwgZXJhc2V3Y2hhcigpLAorCSAgdGVybV9hdHRycygpLCB3Y29sb3Jfc2V0KCkgYXMgcGVyIFhQRzQgdmVyc2lvbiAyLgorCisJKyBhZGQgbWFjcm9zIGdldGN1clt4eV0gZ2V0YmVnW3h5XSBnZXRwYXJbeHldLCB3aGljaCBhcmUgZGVmaW5lZCBpbgorCSAgU1ZyNCBoZWFkZXJzLgorCisJTmV3IGV4dGVuc2lvbnM6IGtleW9rKCkgYW5kIGRlZmluZV9rZXkoKS4KKworCVRlcm1pbmZvIGRhdGFiYXNlIGNoYW5nZXM6CisKKwkrIGNvcnJlY3RlZCBkZWZpbml0aW9uIGluIGN1cnNlcy5oIGZvciBBQ1NfTEFOVEVSTiwgd2hpY2ggd2FzICdJJworCSAgcmF0aGVyIHRoYW4gJ2knLgorCisgICAgNC4xIChNYXkgMTUsIDE5OTcpCisKKwlXZSBhZGRlZCB0aGVzZSBleHRlbnNpb25zOiAgdXNlX2RlZmF1bHRfY29sb3JzKCkuICBBbHNvIGFkZGVkCisJY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1jb25zdCwgdG8gc3VwcG9ydCB0aGUgdXNlIG9mIGNvbnN0IHdoZXJlCisJWC9PcGVuIHNob3VsZCBoYXZlLCBidXQgZGlkIG5vdCwgc3BlY2lmeS4KKworCVRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBjb250ZW50IGNoYW5nZWQgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGNvbG9yIGZvcgorCW1vc3QgZW50cmllcyB0aGF0IHVzZSBBTlNJIGNvbG9ycy4gIFNWcjQgY3Vyc2VzIHRyZWF0cyB0aGUgc2V0YWYvc2V0YWIKKwlhbmQgc2V0Zi9zZXRiIGNhcGFiaWxpdGllcyBkaWZmZXJlbnRseSwgaW50ZXJjaGFuZ2luZyB0aGUgcmVkL2JsdWUKKwljb2xvcnMgaW4gdGhlIGxhdHRlci4KKworICAgIDQuMCAoRGVjZW1iZXIgMjQsIDE5OTYpCisKKwlXZSBidW1wZWQgdG8gdmVyc2lvbiA0LjAgYmVjYXVzZSB0aGUgbmV3bHkgcmVsZWFzZWQgZHluYW1pYyBsb2FkZXIKKwkobGQuc28uMS44LjUpIG9uIExpbnV4IGRpZCBub3QgbG9hZCBzaGFyZWQgbGlicmFyaWVzIHdob3NlIEFCSSBhbmQgUkVMCisJdmVyc2lvbnMgd2VyZSBpbmNvbnNpc3RlbnQuICBBdCB0aGF0IHBvaW50LCBuY3Vyc2VzIEFCSSB3YXMgMy40IGFuZCB0aGUKKwlSRUwgd2FzIDEuOS45Zywgc28gd2UgbWFkZSB0aGVtIGNvbnNpc3RlbnQuCisKKyAgICAxLjkuOWcgKERlY2VtYmVyIDEsIDE5OTYpCisKKwlUaGlzIGZpeGVkIG1vc3Qgb2YgdGhlIHByb2JsZW1zIHdpdGggMS45LjllLCBhbmQgbWFkZSB0aGVzZSBpbnRlcmZhY2UKKwljaGFuZ2VzOgorCisJKyByZW1vdmUgdHBhcmFtKCksIHdoaWNoIGhhZCBiZWVuIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKwkgIHNvbWUgdGVybWNhcC4gIHRwYXJtKCkgaXMgc3RhbmRhcmQsIGFuZCBkb2VzIG5vdCBjb25mbGljdCB3aXRoCisJICBhcHBsaWNhdGlvbidzIGZhbGxiYWNrIGZvciBtaXNzaW5nIHRwYXJhbSgpLgorCisJKyB0dXJuIG9mZiBoYXJkd2FyZSBlY2hvIGluIGluaXRzY3IoKS4gIFRoaXMgY2hhbmdlcyB0aGUgc2Vuc2Ugb2YgdGhlCisJICBlY2hvKCkgZnVuY3Rpb24sIHdoaWNoIHdhcyBpbml0aWFsaXplZCB0byBlY2hvaW5nIHJhdGhlciB0aGFuCisJICBub25lY2hvaW5nICh0aGUgbGF0dGVyIGlzIHNwZWNpZmllZCkuICBUaGVyZSB3ZXJlIHNldmVyYWwgb3RoZXIKKwkgIGNvcnJlY3Rpb25zIHRvIHRoZSB0ZXJtaW5hbCBJL08gc2V0dGluZ3Mgd2hpY2ggY2F1c2UgYXBwbGljYXRpb25zIHRvCisJICBiZWhhdmUgZGlmZmVyZW50bHkuCisKKwkrIGltcGxlbWVudGVkIHNldmVyYWwgZnVuY3Rpb25zIChzdWNoIGFzIGF0dHJfb24oKSkgd2hpY2ggd2VyZQorCSAgYXZhaWxhYmxlIG9ubHkgYXMgbWFjcm9zLgorCisJKyBjb3JyZWN0ZWQgc2V2ZXJhbCB0eXBvcyBpbiBjdXJzZXMuaC5pbiAoaS5lLiwgdGhlIG12WFhYWCBtYWNyb3MpLgorCisJKyBjb3JyZWN0ZWQgcHJvdG90eXBlcyBmb3IgZGVsYXlfb3V0cHV0KCksCisJICBoYXNfY29sb3IsIGltbWVkb2soKSBhbmQgaWRjb2soKS4KKworCSsgY29ycmVjdGVkIG1pc3NwZWxsZWQgZ2V0YmtnZCgpLiAgU29tZSBhcHBsaWNhdGlvbnMgdXNlZCB0aGUKKwkgIG1pc3NwZWxsZWQgbmFtZS4KKworCSsgYWRkZWQgX3lvZmZzZXQgdG8gV0lORE9XLiAgVGhlIHNpemUgb2YgV0lORE9XIGRvZXMgbm90IGltcGFjdAorCSAgYXBwbGljYXRpb25zLCBzaW5jZSB0aGV5IHVzZSBvbmx5IHBvaW50ZXJzIHRvIFdJTkRPVyBzdHJ1Y3RzLgorCisJVGhlc2UgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIHRlcm1pbmZvIGRhdGFiYXNlOgorCisJKyByZW1vdmVkIGJvb2xlYW4gJ2dldG0nIHdoaWNoIHdhcyBhdmFpbGFibGUgYXMgYW4gZXh0ZW5kZWQgbmFtZS4KKworCVdlIGFkZGVkIHRoZXNlIGV4dGVuc2lvbnM6IHdyZXNpemUoKSwgcmVzaXpldGVybSgpLCBoYXNfa2V5KCkgYW5kCisJbWNwcmludCgpLgorCisgICAgMS45LjllIChNYXJjaCAyNCwgMTk5NikKKworCW5vdCByZWNvbW1lbmRlZCAoYSBsYXN0LW1pbnV0ZS91bnRlc3RlZCBjaGFuZ2UgbGVmdCB0aGUgZm9ybXMgYW5kCisJbWVudXMgbGlicmFyaWVzIHVudXNhYmxlIHNpbmNlIHRoZXkgZG8gbm90IHJlcGFpbnQgdGhlIHNjcmVlbikuCisJRm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGNvbG9ycyBhcmUgY29tYmluZWQgaW5jb3JyZWN0bHksIHdvcmtpbmcgcHJvcGVybHkKKwlvbmx5IG9uIGEgYmxhY2sgYmFja2dyb3VuZC4gIFdoZW4gdGhpcyB3YXMgcmVsZWFzZWQsIHRoZSBYL09wZW4KKwlzcGVjaWZpY2F0aW9uIHdhcyBhdmFpbGFibGUgb25seSBpbiBkcmFmdCBmb3JtLgorCisJU29tZSBhcHBsaWNhdGlvbnMgKHN1Y2ggYXMgbHhkaWFsb2cpIHdlcmUgImZpeGVkIiB0byB3b3JrIHdpdGggdGhlCisJaW5jb3JyZWN0IGNvbG9yIHNjaGVtZS4KKworCitJRiBZT1UgQVJFIEEgU1lTVEVNIElOVEVHUkFUT1I6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIENvbmZpZ3VyYXRpb24gYW5kIEluc3RhbGxhdGlvbjoKKworICAgIAlPbiBwbGF0Zm9ybXMgd2hlcmUgbmN1cnNlcyBpcyBhc3N1bWVkIHRvIGJlIGluc3RhbGxlZCBpbiAvdXNyL2xpYiwKKwl0aGUgY29uZmlndXJlIHNjcmlwdCB1c2VzICIvdXNyIiBhcyBhIGRlZmF1bHQ6CisKKwkJTGludXgsIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgQ3lnd2luCisKKwlGb3Igb3RoZXIgcGxhdGZvcm1zLCB0aGUgZGVmYXVsdCBpcyAiL3Vzci9sb2NhbCIuICBTZWUgdGhlIGRpc2N1c3Npb24KKwlvZiB0aGUgIi0tZGlzYWJsZS1vdmVyd3JpdGUiIG9wdGlvbi4KKworCVRoZSBsb2NhdGlvbiBvZiB0aGUgdGVybWluZm8gaXMgc2V0IGluZGlyZWN0bHkgYnkgdGhlICItLWRhdGFkaXIiCisJY29uZmlndXJlIG9wdGlvbiwgZS5nLiwgL3Vzci9zaGFyZS90ZXJtaW5mbywgZ2l2ZW4gYSBkYXRhZGlyIG9mCisJL3Vzci9zaGFyZS4gIFlvdSBtYXkgd2FudCB0byBvdmVycmlkZSB0aGlzIGlmIHlvdSBhcmUgaW5zdGFsbGluZworCW5jdXJzZXMgbGlicmFyaWVzIGluIG5vbnN0YW5kYXJkIGxvY2F0aW9ucywgYnV0IHdpc2ggdG8gc2hhcmUgdGhlCisJdGVybWluZm8gZGF0YWJhc2UuCisKKwlOb3JtYWxseSB0aGUgbmN1cnNlcyBsaWJyYXJ5IGlzIGNvbmZpZ3VyZWQgaW4gYSBwdXJlLXRlcm1pbmZvIG1vZGU7CisJdGhhdCBpcywgd2l0aCB0aGUgLS1kaXNhYmxlLXRlcm1jYXAgb3B0aW9uLiAgVGhpcyBtYWtlcyB0aGUgbmN1cnNlcworCWxpYnJhcnkgc21hbGxlciBhbmQgZmFzdGVyLiAgVGhlIG5jdXJzZXMgbGlicmFyeSBpbmNsdWRlcyBhIHRlcm1jYXAKKwllbXVsYXRpb24gdGhhdCBxdWVyaWVzIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSwgc28gZXZlbiBhcHBsaWNhdGlvbnMgdGhhdAorCXVzZSByYXcgdGVybWNhcCB0byBxdWVyeSB0ZXJtaW5hbCBjaGFyYWN0ZXJpc3RpY3Mgd2lsbCB3aW4gKHByb3ZpZGluZworCXlvdSByZWNvbXBpbGUgYW5kIHJlbGluayB0aGVtISkuCisKKwlJZiB5b3UgbXVzdCBjb25maWd1cmUgd2l0aCB0ZXJtY2FwIGZhbGxiYWNrIGVuYWJsZWQsIHlvdSBtYXkgYWxzbyB3aXNoCisJdG8gdXNlIHRoZSAtLWVuYWJsZS1nZXRjYXAgb3B0aW9uLiAgVGhpcyBzcGVlZHMgdXAgdGVybWNhcC1iYXNlZAorCXN0YXJ0dXBzLCBhdCB0aGUgZXhwZW5zZSBvZiBub3QgYWxsb3dpbmcgcGVyc29uYWwgdGVybWNhcCBlbnRyaWVzIHRvCisJcmVmZXJlbmNlIHRoZSB0ZXJtaW5mbyB0cmVlLiAgU2VlIGNvbW1lbnRzIGluCisJbmN1cnNlcy90aW5mby9yZWFkX3Rlcm1jYXAuYyBmb3IgZnVydGhlciBkZXRhaWxzLgorCisJTm90ZSB0aGF0IGlmIHlvdSBoYXZlICRURVJNQ0FQIHNldCwgbmN1cnNlcyB3aWxsIHVzZSB0aGF0IHZhbHVlCisJdG8gbG9jYXRlIHRlcm1jYXAgZGF0YS4gIEluIHBhcnRpY3VsYXIsIHJ1bm5pbmcgZnJvbSB4dGVybSB3aWxsCisJc2V0ICRURVJNQ0FQIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgeHRlcm0ncyB0ZXJtY2FwIGVudHJ5LgorCUlmIG5jdXJzZXMgc2VlcyB0aGF0LCBpdCB3aWxsIG5vdCBleGFtaW5lIC9ldGMvdGVybWNhcC4KKworICAgIEtleWJvYXJkIE1hcHBpbmc6CisKKwlUaGUgdGVybWluZm8gZmlsZSBhc3N1bWVzIHRoYXQgU2hpZnQtVGFiIGdlbmVyYXRlcyBcRVtaICh0aGUgRUNNQS00OAorCXJldmVyc2UtdGFidWxhdGlvbiBzZXF1ZW5jZSkgcmF0aGVyIHRoYW4gXkkuICBIZXJlIGFyZSB0aGUgbG9hZGtleXMgLWQKKwltYXBwaW5ncyB0aGF0IHdpbGwgc2V0IHRoaXMgdXA6CisKKwkJa2V5Y29kZQkgMTUgPSBUYWIJICAgICAgVGFiCisJCQlhbHQgICAgIGtleWNvZGUgIDE1ID0gTWV0YV9UYWIKKwkJCXNoaWZ0CWtleWNvZGUgIDE1ID0gRjI2CisJCXN0cmluZyBGMjYgPSJcMDMzW1oiCisKKyAgICBOYW1pbmcgdGhlIENvbnNvbGUgVGVybWluYWwKKworCUluIHZhcmlvdXMgc3lzdGVtcyB0aGVyZSBoYXMgYmVlbiBhIHByYWN0aWNlIG9mIGRlc2lnbmF0aW5nIHRoZSBzeXN0ZW0KKwljb25zb2xlIGRyaXZlciB0eXBlIGFzIGBjb25zb2xlJy4gIFBsZWFzZSBkbyBub3QgZG8gdGhpcyEgIEl0CisJY29tcGxpY2F0ZXMgcGVvcGxlcycgbGl2ZXMsIGJlY2F1c2UgaXQgY2FuIG1lYW4gdGhhdCBzZXZlcmFsIGRpZmZlcmVudAorCXRlcm1pbmZvIGVudHJpZXMgZnJvbSBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMgYWxsIGxvZ2ljYWxseSB3YW50IHRvCisJYmUgY2FsbGVkIGBjb25zb2xlJy4KKworCVBsZWFzZSBwaWNrIGEgbmFtZSB1bmlxdWUgdG8geW91ciBjb25zb2xlIGRyaXZlciBhbmQgc2V0IHRoYXQgdXAKKwlpbiB0aGUgL2V0Yy9pbml0dGFiIHRhYmxlIG9yIGxvY2FsIGVxdWl2YWxlbnQuICBTZW5kIHRoZSBlbnRyeSB0byB0aGUKKwl0ZXJtaW5mbyBtYWludGFpbmVyIChsaXN0ZWQgaW4gdGhlIG1pc2MvdGVybWluZm8gZmlsZSkgdG8gYmUgaW5jbHVkZWQKKwlpbiB0aGUgdGVybWluZm8gZmlsZSwgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZS4gIFNlZSB0aGUKKwl0ZXJtKDcpIG1hbnVhbCBwYWdlIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgb24KKwljb252ZW50aW9ucyBmb3IgY2hvb3NpbmcgdHlwZSBuYW1lcy4KKworCUhlcmUgYXJlIHNvbWUgcmVjb21tZW5kZWQgcHJpbWFyeSBjb25zb2xlIG5hbWVzOgorCisJCWxpbnV4CS0tIExpbnV4IGNvbnNvbGUgZHJpdmVyCisJCWZyZWVic2QJLS0gRnJlZUJTRAorCQluZXRic2QJLS0gTmV0QlNECisJCWJzZG9zCS0tIEJTRC9PUworCisJSWYgeW91IGFyZSByZXNwb25zaWJsZSBmb3IgaW50ZWdyYXRpbmcgbmN1cnNlcyBmb3Igb25lIG9mIHRoZXNlCisJZGlzdHJpYnV0aW9uLCBwbGVhc2UgZWl0aGVyIHVzZSB0aGUgcmVjb21tZW5kZWQgbmFtZSBvciBnZXQgYmFjaworCXRvIHVzIGV4cGxhaW5pbmcgd2h5IHlvdSBkb24ndCB3YW50IHRvLCBzbyB3ZSBjYW4gd29yayBvdXQgbm9tZW5jbGF0dXJlCisJdGhhdCB3aWxsIG1ha2UgdXNlcnMnIGxpdmVzIGVhc2llciByYXRoZXIgdGhhbiBoYXJkZXIuCisKKworUkVDRU5UIFhURVJNIFZFUlNJT05TOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgdGVybWluZm8gZGF0YWJhc2UgZmlsZSBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGFzc3VtZXMgeW91CisJYXJlIHJ1bm5pbmcgYSBtb2Rlcm4geHRlcm0gYmFzZWQgb24gWEZyZWU4NiAoaS5lLiwgeHRlcm0tbmV3KS4gIFRoZQorCWVhcmxpZXIgWDExUjYgZW50cnkgKHh0ZXJtLXI2KSBhbmQgWDExUjUgZW50cnkgKHh0ZXJtLXI1KSBpcyBwcm92aWRlZAorCWFzIHdlbGwuICBTZWUgdGhlIC0td2l0aG91dC14dGVybS1uZXcgY29uZmlndXJlIHNjcmlwdCBvcHRpb24gaWYgeW91CisJYXJlIHVuYWJsZSB0byB1cGRhdGUgeW91ciBzeXN0ZW0uCisKKworQ09ORklHVVJJTkcgRkFMTEJBQ0sgRU5UUklFUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUluIG9yZGVyIHRvIHN1cHBvcnQgb3BlcmF0aW9uIG9mIG5jdXJzZXMgcHJvZ3JhbXMgYmVmb3JlIHRoZSB0ZXJtaW5mbworCXRyZWUgaXMgYWNjZXNzaWJsZSAodGhhdCBpcywgaW4gc2luZ2xlLXVzZXIgbW9kZSBvciBhdCBPUyBpbnN0YWxsYXRpb24KKwl0aW1lKSB0aGUgbmN1cnNlcyBsaWJyYXJ5IGNhbiBiZSBjb21waWxlZCB0byBpbmNsdWRlIGFuIGFycmF5IG9mCisJcHJlLWZldGNoZWQgZmFsbGJhY2sgZW50cmllcy4gIFRoaXMgbXVzdCBiZSBkb25lIG9uIGEgbWFjaGluZSB3aGljaAorCWhhcyBuY3Vyc2VzJyBpbmZvY21wIGFuZCB0ZXJtaW5mbyBkYXRhYmFzZSBpbnN0YWxsZWQuCisKKwlUaGVzZSBlbnRyaWVzIGFyZSBjaGVja2VkIGJ5IHNldHVwdGVybSgpIG9ubHkgd2hlbiB0aGUgY29udmVudGlvbmFsCisJZmV0Y2hlcyBmcm9tIHRoZSB0ZXJtaW5mbyB0cmVlIGFuZCB0aGUgdGVybWNhcCBmYWxsYmFjayAoaWYgY29uZmlndXJlZCkKKwloYXZlIGJlZW4gdHJpZWQgYW5kIGZhaWxlZC4gIFRodXMsIHRoZSBwcmVzZW5jZSBvZiBhIGZhbGxiYWNrIHdpbGwgbm90CisJc2hhZG93IG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9uLWRpc2sgZW50cnkgZm9yIHRoZSBzYW1lIHR5cGUsIHdoZW4gdGhhdAorCWVudHJ5IGlzIGFjY2Vzc2libGUuCisKKwlCeSBkZWZhdWx0LCB0aGVyZSBhcmUgbm8gZW50cmllcyBvbiB0aGUgZmFsbGJhY2sgbGlzdC4gIEFmdGVyIHlvdSBoYXZlCisJYnVpbHQgdGhlIG5jdXJzZXMgc3VpdGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB5b3UgY2FuIGNoYW5nZSB0aGUgbGlzdAorCSh0aGUgcHJvY2VzcyBuZWVkcyBpbmZvY21wKDEpKS4gIFRvIGRvIHNvLCB1c2UgdGhlIHNjcmlwdAorCW5jdXJzZXMvdGluZm8vTUtmYWxsYmFjay5zaC4gIEEgY29uZmlndXJlIHNjcmlwdCBvcHRpb24KKwktLXdpdGgtZmFsbGJhY2tzIGRvZXMgdGhpcyAoaXQgYWNjZXB0cyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZQorCW5hbWVzIHlvdSB3aXNoLCBhbmQgZG9lcyBub3QgcmVxdWlyZSBhIHJlYnVpbGQpLgorCisJSWYgeW91IHdhbnRlZCAoc2F5KSB0byBoYXZlIGxpbnV4LCB2dDEwMCwgYW5kIHh0ZXJtIGZhbGxiYWNrcywgeW91CisJd291bGQgdXNlIHRoZSBjb21tYW5kcworCisJCWNkIG5jdXJzZXM7CisJCXRpbmZvL01LZmFsbGJhY2suc2ggbGludXggdnQxMDAgeHRlcm0gPmZhbGxiYWNrLmMKKworCVRoZW4ganVzdCByZWJ1aWxkIGFuZCByZWluc3RhbGwgdGhlIGxpYnJhcnkgYXMgeW91IHdvdWxkIG5vcm1hbGx5LgorCVlvdSBjYW4gcmVzdG9yZSB0aGUgZGVmYXVsdCBlbXB0eSBmYWxsYmFjayBsaXN0IHdpdGgKKworCQl0aW5mby9NS2ZhbGxiYWNrLnNoID5mYWxsYmFjay5jCisKKwlUaGUgb3ZlcmhlYWQgZm9yIGFuIGVtcHR5IGZhbGxiYWNrIGxpc3QgaXMgb25lIHRyaXZpYWwgc3R1YiBmdW5jdGlvbi4KKwlBbnkgbm9uLWVtcHR5IGZhbGxiYWNrIGxpc3QgaXMgY29uc3QtZWQgYW5kIHRoZXJlZm9yZSBsaXZlcyBpbiBzaGFyYWJsZQorCXRleHQgc3BhY2UuICBZb3UgY2FuIGxvb2sgYXQgdGhlIGNvbW1lbnQgdHJhaWxpbmcgZWFjaCBpbml0aWFsaXplciBpbgorCXRoZSBnZW5lcmF0ZWQgbmN1cnNlcy9mYWxsYmFjay5jIGZpbGUgdG8gc2VlIHRoZSBjb3JlIGNvc3Qgb2YgdGhlCisJZmFsbGJhY2tzLiAgQSBnb29kIHJ1bGUgb2YgdGh1bWIgZm9yIG1vZGVybiB2dDEwMC1saWtlIGVudHJpZXMgaXMgdGhhdAorCWVhY2ggb25lIHdpbGwgY29zdCBhYm91dCAyLjVLIG9mIHRleHQgc3BhY2UuCisKKworQlNEIENPTlZFUlNJT04gTk9URVM6CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJSWYgeW91IG5lZWQgdG8gc3VwcG9ydCByZWFsbHkgYW5jaWVudCBCU0QgcHJvZ3JhbXMsIHlvdSBwcm9iYWJseQorCXdhbnQgdG8gY29uZmlndXJlIHdpdGggdGhlIC0tZW5hYmxlLWJzZHBhZCBvcHRpb24uICBXaGF0IHRoaXMgZG9lcworCWlzIGVuYWJsZSBjb2RlIGluIHRwdXRzKCkgdGhhdCByZWNvZ25pemVzIGEgbnVtZXJpYyBwcmVmaXggb24gYQorCWNhcGFiaWxpdHkgYXMgYSByZXF1ZXN0IGZvciB0aGF0IG11Y2ggdHJhaWxpbmcgcGFkZGluZyBpbiBtaWxsaXNlY29uZHMuCisJVGhlcmUgYXJlIG9sZCBCU0QgcHJvZ3JhbXMgdGhhdCBkbyB0aGluZ3MgbGlrZSB0cHV0cygiNTAiKS4KKworCShJZiB5b3UgYXJlIGRpc3RyaWJ1dGluZyBuY3Vyc2VzIGFzIGEgc3VwcG9ydC1saWJyYXJ5IGNvbXBvbmVudCBvZgorCWFuIGFwcGxpY2F0aW9uIHlvdSBwcm9iYWJseSB3YW50IHRvIHB1dCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbgorCWluIHRoZSBwYWNrYWdlIFJFQURNRSBmaWxlLikKKworCVRoZSBmb2xsb3dpbmcgbm90ZSBhcHBsaWVzIG9ubHkgaWYgeW91IGhhdmUgY29uZmlndXJlZCBuY3Vyc2VzIHdpdGgKKwktLWVuYWJsZS10ZXJtY2FwLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENVVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgaW5zdGFsbGluZyB0aGlzIGFwcGxpY2F0aW9uIHByaXZhdGVseSAoZWl0aGVyIGJlY2F1c2UgeW91CitoYXZlIG5vIHJvb3QgYWNjZXNzIG9yIHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIGl0IGJlZm9yZSBkb2luZyBhIHJvb3QKK2luc3RhbGxhdGlvbiksIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBkZXRhaWxzIHlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mLgorVGhleSBoYXZlIHRvIGRvIHdpdGggdGhlIG5jdXJzZXMgbGlicmFyeSwgd2hpY2ggdXNlcyB0ZXJtaW5mbyByYXRoZXIKK3RoYW4gdGVybWNhcCBmb3IgZGVzY3JpYmluZyB0ZXJtaW5hbCBjaGFyYWN0ZXJpc3RpY3MuCisKK1Rob3VnaCB0aGUgbmN1cnNlcyBsaWJyYXJ5IGlzIHRlcm1pbmZvLWJhc2VkLCBpdCB3aWxsIGludGVycHJldCB5b3VyCitURVJNQ0FQIHZhcmlhYmxlIChpZiBwcmVzZW50KSwgYW55IGxvY2FsIHRlcm1jYXAgZmlsZXMgeW91IHJlZmVyZW5jZQordGhyb3VnaCBpdCwgYW5kIHRoZSBzeXN0ZW0gdGVybWNhcCBmaWxlLiAgSG93ZXZlciwgaW4gb3JkZXIgdG8gYXZvaWQKK3Nsb3dpbmcgZG93biB5b3VyIGFwcGxpY2F0aW9uIHN0YXJ0dXAsIGl0IHdpbGwgb25seSBkbyB0aGlzIG9uY2UgcGVyCit0ZXJtaW5hbCB0eXBlIQorCitUaGUgZmlyc3QgdGltZSB5b3UgbG9hZCBhIGdpdmVuIHRlcm1pbmFsIHR5cGUgZnJvbSB5b3VyIHRlcm1jYXAKK2RhdGFiYXNlLCB0aGUgbGlicmFyeSBpbml0aWFsaXphdGlvbiBjb2RlIHdpbGwgYXV0b21hdGljYWxseSB3cml0ZSBpdAoraW4gdGVybWluZm8gZm9ybWF0IHRvIGEgc3ViZGlyZWN0b3J5IHVuZGVyICRIT01FLy50ZXJtaW5mby4gIEFmdGVyCit0aGF0LCB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSB3aWxsIGZpbmQgaXQgdGhlcmUgYW5kIGRvIGEgKG11Y2gKK2Zhc3RlcikgdGVybWluZm8gZmV0Y2guCisKK1VzdWFsbHksIGFsbCB0aGlzIG1lYW5zIGlzIHRoYXQgeW91ciBob21lIGRpcmVjdG9yeSB3aWxsIHNpbGVudGx5IGdyb3cKK2FuIGludmlzaWJsZSAudGVybWluZm8gc3ViZGlyZWN0b3J5IHdoaWNoIHdpbGwgZ2V0IGZpbGxlZCBpbiB3aXRoCit0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgb2YgdGVybWluYWwgdHlwZXMgYXMgeW91IGludm9rZSB0aGVtLiAgSWYgYW55b25lCitldmVyIGluc3RhbGxzIGEgZ2xvYmFsIHRlcm1pbmZvIHRyZWUgb24geW91ciBzeXN0ZW0sIHRoaXMgd2lsbCBxdWlldGx5CitzdG9wIGhhcHBlbmluZyBhbmQgeW91ciAkSE9NRS8udGVybWluZm8gd2lsbCBiZWNvbWUgcmVkdW5kYW50LgorCitUaGUgb2JqZWN0aXZlIG9mIGFsbCB0aGlzIGxvZ2ljIGlzIHRvIG1ha2UgY29udmVydGluZyBmcm9tIEJTRCB0ZXJtY2FwCithcyBwYWlubGVzcyBhcyBwb3NzaWJsZSB3aXRob3V0IHNsb3dpbmcgZG93biB5b3VyIGFwcGxpY2F0aW9uICh0ZXJtY2FwCitjb21waWxhdGlvbiBpcyBleHBlbnNpdmUpLgorCitJZiB5b3UgZG9uJ3QgaGF2ZSBhIFRFUk1DQVAgdmFyaWFibGUgb3IgY3VzdG9tIHBlcnNvbmFsIHRlcm1jYXAgZmlsZSwKK3lvdSBjYW4gc2tpcCB0aGUgcmVzdCBvZiB0aGlzIGRpc3NlcnRhdGlvbi4KKworSWYgeW91ICpkbyogaGF2ZSBhIFRFUk1DQVAgdmFyaWFibGUgYW5kL29yIGEgY3VzdG9tIHBlcnNvbmFsIHRlcm1jYXAgZmlsZQordGhhdCBkZWZpbmVzIGEgdGVybWluYWwgdHlwZSwgdGhhdCBkZWZpbml0aW9uIHdpbGwgc3RvcCBiZWluZyB2aXNpYmxlCit0byB0aGlzIGFwcGxpY2F0aW9uIGFmdGVyIHRoZSBmaXJzdCB0aW1lIHlvdSBydW4gaXQsIGJlY2F1c2UgaXQgd2lsbAoraW5zdGVhZCBzZWUgdGhlIHRlcm1pbmZvIGVudHJ5IHRoYXQgaXQgd3JvdGUgdG8gJEhPTUUvdGVybWluZm8gdGhlCitmaXJzdCB0aW1lIGFyb3VuZC4KKworU3Vic2VxdWVudGx5LCBlZGl0aW5nIHRoZSBURVJNQ0FQIHZhcmlhYmxlIG9yIHBlcnNvbmFsIFRFUk1DQVAgZmlsZQord2lsbCBoYXZlIG5vIGVmZmVjdCB1bmxlc3MgeW91IGV4cGxpY2l0bHkgcmVtb3ZlIHRoZSB0ZXJtaW5mbyBlbnRyeQordW5kZXIgJEhPTUUvdGVybWluZm8uICBJZiB5b3UgZG8gdGhhdCwgdGhlIGVudHJ5IHdpbGwgYmUgcmVjb21waWxlZAorZnJvbSB5b3VyIHRlcm1jYXAgcmVzb3VyY2VzIHRoZSBuZXh0IHRpbWUgaXQgaXMgaW52b2tlZC4KKworVG8gYXZvaWQgdGhlc2UgY29tcGxpY2F0aW9ucywgdXNlIGluZm9jbXAoMSkgYW5kIHRpYygxKSB0byBlZGl0IHRoZQordGVybWluZm8gZGlyZWN0b3J5IGRpcmVjdGx5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENVVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VTSU5HIE5DVVJTRVMgV0lUSCBBRlM6CisJQUZTIHRyZWF0cyBlYWNoIGRpcmVjdG9yeSBhcyBhIHNlcGFyYXRlIGxvZ2ljYWwgZmlsZXN5c3RlbSwgeW91CisJY2FuJ3QgaGFyZC1saW5rIGFjcm9zcyB0aGVtLiAgVGhlIC0tZW5hYmxlLXN5bWxpbmtzIG9wdGlvbiBjb3BlcworCXdpdGggdGhpcyBieSBtYWtpbmcgdGljIHVzZSBzeW1ib2xpYyBsaW5rcy4KKworVVNJTkcgTkNVUlNFUyBXSVRIIEdQTToKKwlOY3Vyc2VzIDQuMSBhbmQgdXAgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIEdQTSAoR2VuZXJhbCBQdXJwb3NlCisJTW91c2UpIHdoaWNoIGlzIHVzZWQgb24gTGludXggY29uc29sZS4gIEJlIGF3YXJlIHRoYXQgR1BNIGlzIGNvbW1vbmx5CisJaW5zdGFsbGVkIGFzIGEgc2hhcmVkIGxpYnJhcnkgd2hpY2ggY29udGFpbnMgYSB3cmFwcGVyIGZvciB0aGUgY3Vyc2VzCisJd2dldGNoKCkgZnVuY3Rpb24gKGxpYmN1cnNlcy5vKS4gIFNvbWUgaW50ZWdyYXRvcnMgaGF2ZSBzaW1wbGlmaWVkCisJbGlua2luZyBhcHBsaWNhdGlvbnMgYnkgY29tYmluaW5nIGFsbCBvciBwYXJ0IG9mIGxpYmN1cnNlcy5zbyBpbnRvIHRoZQorCWxpYmdwbS5zbyBmaWxlLCBwcm9kdWNpbmcgc3ltYm9sIGNvbmZsaWN0cyB3aXRoIG5jdXJzZXMgKHNwZWNpZmljYWxseQorCXRoZSB3Z2V0Y2ggZnVuY3Rpb24pLiAgVGhpcyB3YXMgb3JpZ2luYWxseSB0aGUgQlNEIGN1cnNlcywgYnV0CisJZ2VuZXJhbGx5IHdoYXRldmVyIGN1cnNlcyBsaWJyYXJ5IGV4aXN0cyBvbiB0aGUgc3lzdGVtLgorCisJWW91IG1heSBiZSBhYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSBieSBsaW5raW5nIGFzIGZvbGxvd3M6CisKKwkJY2MgLW8gZm9vIGZvby5vIC1sbmN1cnNlcyAtbGdwbSAtbG5jdXJzZXMKKworCWJ1dCB0aGUgbGlua2VyIG1heSBub3QgY29vcGVyYXRlLCBwcm9kdWNpbmcgbXlzdGVyaW91cyBlcnJvcnMuCisJU2VlIHRoZSBGQVEsIGFzIHdlbGwgYXMgdGhlIGRpc2N1c3Npb24gdW5kZXIgdGhlIC0td2l0aC1ncG0gb3B0aW9uOgorCisJaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvbmN1cnNlcy5mYXEuaHRtbCN1c2luZ19ncG1fbGliCisKK0JVSUxESU5HIE5DVVJTRVMgV0lUSCBBIENST1NTLUNPTVBJTEVSCisJTmN1cnNlcyBjYW4gYmUgYnVpbHQgd2l0aCBhIGNyb3NzLWNvbXBpbGVyLiAgU29tZSBwYXJ0cyBtdXN0IGJlIGJ1aWx0CisJd2l0aCB0aGUgaG9zdCdzIGNvbXBpbGVyIHNpbmNlIHRoZXkgYXJlIHVzZWQgZm9yIGJ1aWxkaW5nIHByb2dyYW1zCisJKGUuZy4sIG5jdXJzZXMvbWFrZV9oYXNoIGFuZCBuY3Vyc2VzL21ha2Vfa2V5cykgdGhhdCBnZW5lcmF0ZSB0YWJsZXMKKwl0aGF0IGFyZSBjb21waWxlZCBpbnRvIHRoZSBuY3Vyc2VzIGxpYnJhcnkuICBUaGUgZXNzZW50aWFsIHRoaW5nIHRvIGRvCisJaXMgc2V0IHRoZSBCVUlMRF9DQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB5b3VyIGhvc3QncyBjb21waWxlciwgYW5kCisJcnVuIHRoZSBjb25maWd1cmUgc2NyaXB0IGNvbmZpZ3VyaW5nIGZvciB0aGUgY3Jvc3MtY29tcGlsZXIuCisKKwlUaGUgY29uZmlndXJlIG9wdGlvbnMgLS13aXRoLWJ1aWxkLWNjLCBldGMuLCBhcmUgcHJvdmlkZWQgdG8gbWFrZSB0aGlzCisJc2ltcGxlci4gIFNpbmNlIG1ha2VfaGFzaCBhbmQgbWFrZV9rZXlzIHVzZSBvbmx5IEFOU0kgQyBmZWF0dXJlcywgaXQKKwlpcyBub3JtYWxseSBub3QgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgdGhlIG90aGVyIG9wdGlvbnMgc3VjaCBhcworCS0td2l0aC1idWlsZC1saWJzLCBidXQgdGhleSBhcmUgcHJvdmlkZWQgZm9yIGNvbXBsZXRlbmVzcy4KKworCU5vdGUgdGhhdCBhbGwgb2YgdGhlIGdlbmVyYXRlZCBzb3VyY2UtZmlsZXMgd2hpY2ggYXJlIHBhcnQgb2YgbmN1cnNlcworCXdpbGwgYmUgbWFkZSBpZiB5b3UgdXNlCisKKwkJbWFrZSBzb3VyY2VzCisKKwlUaGlzIHdvdWxkIGJlIHVzZWZ1bCBpbiBwb3J0aW5nIHRvIGFuIGVudmlyb25tZW50IHdoaWNoIGhhcyBsaXR0bGUKKwlzdXBwb3J0IGZvciB0aGUgdG9vbHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc291cmNlcywgZS5nLiwgc2VkLCBhd2sgYW5kCisJQm91cm5lLXNoZWxsLgorCisJV2hlbiBuY3Vyc2VzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcm9zcy1jb21waWxlZCwgeW91IG1heSB3YW50IHRvIHVzZQorCSJtYWtlIGluc3RhbGwiICh3aXRoIGEgc3VpdGFibGUgdGFyZ2V0IGRpcmVjdG9yeSkgdG8gY29uc3RydWN0IGFuCisJaW5zdGFsbCB0cmVlLiAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSAoYXMgd2l0aCB0aGUgLS13aXRoLWZhbGxiYWNrcworCW9wdGlvbiksIG5jdXJzZXMgdXNlcyB0aGUgZGV2ZWxvcG1lbnQgcGxhdGZvcm0ncyB0aWMgdG8gZG8gdGhlCisJIm1ha2UgaW5zdGFsbC5kYXRhIiBwb3J0aW9uLgorCitCVUdTOgorCVNlbmQgYW55IGZlZWRiYWNrIHRvIHRoZSBuY3Vyc2VzIG1haWxpbmcgbGlzdCBhdAorCWJ1Zy1uY3Vyc2VzQGdudS5vcmcuIFRvIHN1YnNjcmliZSBzZW5kIG1haWwgdG8KKwlidWctbmN1cnNlcy1yZXF1ZXN0QGdudS5vcmcgd2l0aCBib2R5IHRoYXQgcmVhZHM6CisJc3Vic2NyaWJlIG5jdXJzZXMgPHlvdXItZW1haWwtYWRkcmVzcy1oZXJlPgorCisJVGhlIEhhY2tlcidzIEd1aWRlIGluIHRoZSBkb2MgZGlyZWN0b3J5IGluY2x1ZGVzIHNvbWUgZ3VpZGVsaW5lcworCW9uIGhvdyB0byByZXBvcnQgYnVncyBpbiB3YXlzIHRoYXQgd2lsbCBnZXQgdGhlbSBmaXhlZCBtb3N0IHF1aWNrbHkuCisKKy0tIHZpbGU6dHh0bW9kZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvTUFOSUZFU1QgYi9uY3Vyc2VzLTUuNy9NQU5JRkVTVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjM4NzFmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvTUFOSUZFU1QKQEAgLTAsMCArMSwxMDI5IEBACisuL0FOTk9VTkNFCisuL0FVVEhPUlMKKy4vQWRhOTUvTWFrZWZpbGUuaW4KKy4vQWRhOTUvUkVBRE1FCisuL0FkYTk1L1RPRE8KKy4vQWRhOTUvZ2VuL01ha2VmaWxlLmluCisuL0FkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnLmluCisuL0FkYTk1L2dlbi9nZW4uYworLi9BZGE5NS9nZW4vaHRtbC5tNAorLi9BZGE5NS9nZW4vbm9ybWFsLm00CisuL0FkYTk1L2dlbi90YWJsZS5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHMubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcy5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHMubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHMubTQKKy4vQWRhOTUvZ2VuL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzLm00CisuL0FkYTk1L2dlbi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYi5tNAorLi9BZGE5NS9nZW4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHMubTQKKy4vQWRhOTUvc2FtcGxlcy9NYWtlZmlsZS5pbgorLi9BZGE5NS9zYW1wbGVzL1JFQURNRQorLi9BZGE5NS9zYW1wbGVzL2V4cGxhaW4udHh0CisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlcy5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfYW5kX3Njcm9sbC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfYW5kX3Njcm9sbC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfZGlzcGxheS5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hY3NfZGlzcGxheS5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1hdHRyX3Rlc3QuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYXR0cl90ZXN0LmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX2VkaXQuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl90ZXN0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX3Rlc3QuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19mb3Jtcy5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFkLmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFkLmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFuZWxzLmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fcGFuZWxzLmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWZsdXNoaW5wX3Rlc3QuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZmx1c2hpbnBfdGVzdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZGIKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoX3Rlc3QuYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldG9wdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tLmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW0uYWRzCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgorLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRlc3Rfc2dyX2F0dHJpYnV0ZXMuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdGVzdF9zZ3JfYXR0cmlidXRlcy5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10cmFjZV9zZXQuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkcworLi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXV0aWwuYWRiCisuL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdXRpbC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi5hZHMKKy4vQWRhOTUvc2FtcGxlcy9yYWluLmFkYgorLi9BZGE5NS9zYW1wbGVzL3JhaW4uYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLWF0dHJpYnV0ZXMuYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLWF0dHJpYnV0ZXMuYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLW1vdXNlLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1hdXguYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1hdXguYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1rZXlib2FyZF9oYW5kbGVyLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tYW5pZmVzdC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcworLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRiCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtbXlfZmllbGRfdHlwZS5hZGIKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtbXlfZmllbGRfdHlwZS5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zYW1wbGUtdGV4dF9pb19kZW1vLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS10ZXh0X2lvX2RlbW8uYWRzCisuL0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkYgorLi9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZHMKKy4vQWRhOTUvc2FtcGxlcy9zdGF0dXMuYWRiCisuL0FkYTk1L3NhbXBsZXMvc3RhdHVzLmFkcworLi9BZGE5NS9zYW1wbGVzL3RvdXIuYWRiCisuL0FkYTk1L3NhbXBsZXMvdG91ci5hZHMKKy4vQWRhOTUvc3JjL01ha2VmaWxlLmluCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZHMKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzCisuL0FkYTk1L3NyYy90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZGIKKy4vQWRhOTUvc3JjL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkYgorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkcworLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZGJfcAorLi9BZGE5NS9zcmMvdGVybWluYWxfaW50ZXJmYWNlLmFkcworLi9JTlNUQUxMCisuL01BTklGRVNUCisuL01ha2VmaWxlLmluCisuL01ha2VmaWxlLm9zMgorLi9ORVdTCisuL1JFQURNRQorLi9SRUFETUUuZW14CisuL1RPLURPCisuL2FjbG9jYWwubTQKKy4vYW5ub3VuY2UuaHRtbC5pbgorLi9jKysvTWFrZWZpbGUuaW4KKy4vYysrL05FV1MKKy4vYysrL1BST0JMRU1TCisuL2MrKy9SRUFETUUtZmlyc3QKKy4vYysrL2N1cnNlc2FwcC5jYworLi9jKysvY3Vyc2VzYXBwLmgKKy4vYysrL2N1cnNlc2YuY2MKKy4vYysrL2N1cnNlc2YuaAorLi9jKysvY3Vyc2VzbS5jYworLi9jKysvY3Vyc2VzbS5oCisuL2MrKy9jdXJzZXNtYWluLmNjCisuL2MrKy9jdXJzZXNwLmNjCisuL2MrKy9jdXJzZXNwLmgKKy4vYysrL2N1cnNlc3BhZC5jYworLi9jKysvY3Vyc2Vzdy5jYworLi9jKysvY3Vyc2Vzdy5oCisuL2MrKy9jdXJzc2xrLmNjCisuL2MrKy9jdXJzc2xrLmgKKy4vYysrL2RlbW8uY2MKKy4vYysrL2VkaXRfY2ZnLnNoCisuL2MrKy9ldGlwLmguaW4KKy4vYysrL2hlYWRlcnMKKy4vYysrL2ludGVybmFsLmgKKy4vYysrL21vZHVsZXMKKy4vY29uZmlnLmd1ZXNzCisuL2NvbmZpZy5zdWIKKy4vY29uZmlndXJlCisuL2NvbmZpZ3VyZS5pbgorLi9jb252ZXJ0X2NvbmZpZ3VyZS5wbAorLi9kaXN0Lm1rCisuL2RvYy9oYWNrZ3VpZGUuZG9jCisuL2RvYy9odG1sL0FkYTk1Lmh0bWwKKy4vZG9jL2h0bWwvTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy5odG1sCisuL2RvYy9odG1sL2FkYS9maWxlcy5odG0KKy4vZG9jL2h0bWwvYWRhL2ZpbGVzL1QuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL0EuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9CLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvQy5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL0QuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9FLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvRi5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL0cuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9ILmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvSS5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL0suaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9MLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvTS5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL04uaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9PLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvUC5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL1EuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9SLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvUy5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL1QuaHRtCisuL2RvYy9odG1sL2FkYS9mdW5jcy9VLmh0bQorLi9kb2MvaHRtbC9hZGEvZnVuY3MvVi5odG0KKy4vZG9jL2h0bWwvYWRhL2Z1bmNzL1cuaHRtCisuL2RvYy9odG1sL2FkYS9pbmRleC5odG0KKy4vZG9jL2h0bWwvYWRhL21haW4uaHRtCisuL2RvYy9odG1sL2FkYS90YWJsZS5odG1sCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bQorLi9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtCisuL2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0KKy4vZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bQorLi9kb2MvaHRtbC9hbm5vdW5jZS5odG1sCisuL2RvYy9odG1sL2hhY2tndWlkZS5odG1sCisuL2RvYy9odG1sL2luZGV4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2NhcHRvaW5mby4xbS5odG1sCisuL2RvYy9odG1sL21hbi9jbGVhci4xLmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfYWRkX3djaC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2FkZF93Y2hzdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19hZGRjaC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2FkZGNoc3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfYWRkc3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfYWRkd3N0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2F0dHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19iZWVwLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfYmtnZC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2JrZ3JuZC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2JvcmRlci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2JvcmRlcl9zZXQuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19jbGVhci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfZGVsY2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19kZWxldGVsbi4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2V4dGVuZC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2dldF93Y2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19nZXRfd3N0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2dldGNjaGFyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfZ2V0Y2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19nZXR5eC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luX3djaC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luX3djaHN0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luY2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbmNoc3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2lub3B0cy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luc193Y2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbnNfd3N0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfaW5zc3RyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfaW5zdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19pbndzdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19sZWdhY3kuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19tb3VzZS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX21vdmUuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19vcGFxdWUuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3BhZC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3ByaW50LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfcHJpbnR3LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3NjYW53LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19zY3JvbGwuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc19zbGsuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc190ZXJtY2FwLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfdGVybWluZm8uM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc190aHJlYWRzLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2N1cnNfdG91Y2guM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc190cmFjZS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9jdXJzX3V0aWwuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vY3Vyc193aW5kb3cuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZGVmYXVsdF9jb2xvcnMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZGVmaW5lX2tleS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fY3Vyc29yLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fZGF0YS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2RyaXZlci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2luZm8uM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGR0eXBlLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1faG9vay4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX25ldy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX25ld19wYWdlLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fb3B0cy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9mb3JtX3BhZ2UuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV9wb3N0LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2Zvcm1fd2luLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2luZGV4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2luZm9jbXAuMW0uaHRtbAorLi9kb2MvaHRtbC9tYW4vaW5mb3RvY2FwLjFtLmh0bWwKKy4vZG9jL2h0bWwvbWFuL2tleV9kZWZpbmVkLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2tleWJvdW5kLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2tleW9rLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL2xlZ2FjeV9jb2RpbmcuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9jdXJzb3IuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9kcml2ZXIuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9mb3JtYXQuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9ob29rLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfaXRlbXMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9tYXJrLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfbmV3LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfb3B0cy4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X3BhdHRlcm4uM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9wb3N0LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfcmVxdWVzdG5hbWUuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9tZW51X3dpbi4zeC5odG1sCisuL2RvYy9odG1sL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21pdGVtX25hbWUuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWl0ZW1fbmV3LjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL21pdGVtX29wdHMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vbWl0ZW1fdXNlcnB0ci4zeC5odG1sCisuL2RvYy9odG1sL21hbi9taXRlbV92YWx1ZS4zeC5odG1sCisuL2RvYy9odG1sL21hbi9taXRlbV92aXNpYmxlLjN4Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL25jdXJzZXMuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vcGFuZWwuM3guaHRtbAorLi9kb2MvaHRtbC9tYW4vcmVzaXpldGVybS4zeC5odG1sCisuL2RvYy9odG1sL21hbi90ZXJtLjUuaHRtbAorLi9kb2MvaHRtbC9tYW4vdGVybS43Lmh0bWwKKy4vZG9jL2h0bWwvbWFuL3Rlcm1pbmZvLjUuaHRtbAorLi9kb2MvaHRtbC9tYW4vdGljLjFtLmh0bWwKKy4vZG9jL2h0bWwvbWFuL3RvZS4xbS5odG1sCisuL2RvYy9odG1sL21hbi90cHV0LjEuaHRtbAorLi9kb2MvaHRtbC9tYW4vdHNldC4xLmh0bWwKKy4vZG9jL2h0bWwvbWFuL3dyZXNpemUuM3guaHRtbAorLi9kb2MvaHRtbC9uY3Vyc2VzLWludHJvLmh0bWwKKy4vZG9jL25jdXJzZXMtaW50cm8uZG9jCisuL2Zvcm0vTWFrZWZpbGUuaW4KKy4vZm9ybS9SRUFELk1FCisuL2Zvcm0vZl90cmFjZS5jCisuL2Zvcm0vZmxkX2FyZy5jCisuL2Zvcm0vZmxkX2F0dHIuYworLi9mb3JtL2ZsZF9jdXJyZW50LmMKKy4vZm9ybS9mbGRfZGVmLmMKKy4vZm9ybS9mbGRfZHVwLmMKKy4vZm9ybS9mbGRfZnRjaG9pY2UuYworLi9mb3JtL2ZsZF9mdGxpbmsuYworLi9mb3JtL2ZsZF9pbmZvLmMKKy4vZm9ybS9mbGRfanVzdC5jCisuL2Zvcm0vZmxkX2xpbmsuYworLi9mb3JtL2ZsZF9tYXguYworLi9mb3JtL2ZsZF9tb3ZlLmMKKy4vZm9ybS9mbGRfbmV3ZnR5cC5jCisuL2Zvcm0vZmxkX29wdHMuYworLi9mb3JtL2ZsZF9wYWQuYworLi9mb3JtL2ZsZF9wYWdlLmMKKy4vZm9ybS9mbGRfc3RhdC5jCisuL2Zvcm0vZmxkX3R5cGUuYworLi9mb3JtL2ZsZF91c2VyLmMKKy4vZm9ybS9mb3JtLmgKKy4vZm9ybS9mb3JtLnByaXYuaAorLi9mb3JtL2ZybV9jdXJzb3IuYworLi9mb3JtL2ZybV9kYXRhLmMKKy4vZm9ybS9mcm1fZGVmLmMKKy4vZm9ybS9mcm1fZHJpdmVyLmMKKy4vZm9ybS9mcm1faG9vay5jCisuL2Zvcm0vZnJtX29wdHMuYworLi9mb3JtL2ZybV9wYWdlLmMKKy4vZm9ybS9mcm1fcG9zdC5jCisuL2Zvcm0vZnJtX3JlcV9uYW1lLmMKKy4vZm9ybS9mcm1fc2NhbGUuYworLi9mb3JtL2ZybV9zdWIuYworLi9mb3JtL2ZybV91c2VyLmMKKy4vZm9ybS9mcm1fd2luLmMKKy4vZm9ybS9mdHlfYWxudW0uYworLi9mb3JtL2Z0eV9hbHBoYS5jCisuL2Zvcm0vZnR5X2VudW0uYworLi9mb3JtL2Z0eV9pbnQuYworLi9mb3JtL2Z0eV9pcHY0LmMKKy4vZm9ybS9mdHlfbnVtLmMKKy4vZm9ybS9mdHlfcmVnZXguYworLi9mb3JtL2hlYWRlcnMKKy4vZm9ybS9sbGliLWxmb3JtCisuL2Zvcm0vbGxpYi1sZm9ybXcKKy4vZm9ybS9tb2R1bGVzCisuL2luY2x1ZGUvQ2FwcworLi9pbmNsdWRlL0NhcHMuYWl4NAorLi9pbmNsdWRlL0NhcHMuaHB1eDExCisuL2luY2x1ZGUvQ2Fwcy5rZXlzCisuL2luY2x1ZGUvQ2Fwcy5vc2YxcjUKKy4vaW5jbHVkZS9DYXBzLnV3aW4KKy4vaW5jbHVkZS9NS2hhc2hzaXplLnNoCisuL2luY2x1ZGUvTUtrZXlfZGVmcy5zaAorLi9pbmNsdWRlL01LbmN1cnNlc19kZWYuc2gKKy4vaW5jbHVkZS9NS3BhcmFtZXRyaXplZC5zaAorLi9pbmNsdWRlL01LdGVybS5oLmF3ay5pbgorLi9pbmNsdWRlL01ha2VmaWxlLmluCisuL2luY2x1ZGUvY2FwZGVmYXVsdHMuYworLi9pbmNsdWRlL2N1cnNlcy5oLmluCisuL2luY2x1ZGUvY3Vyc2VzLnRhaWwKKy4vaW5jbHVkZS9jdXJzZXMud2lkZQorLi9pbmNsdWRlL2VkaXRfY2ZnLnNoCisuL2luY2x1ZGUvaGFzaGVkX2RiLmgKKy4vaW5jbHVkZS9oZWFkZXJzCisuL2luY2x1ZGUvbmNfYWxsb2MuaAorLi9pbmNsdWRlL25jX3BhbmVsLmgKKy4vaW5jbHVkZS9uY190cGFybS5oCisuL2luY2x1ZGUvbmN1cnNlc19jZmcuaGluCisuL2luY2x1ZGUvbmN1cnNlc19kZWZzCisuL2luY2x1ZGUvbmN1cnNlc19kbGwuaAorLi9pbmNsdWRlL3Rlcm1fZW50cnkuaAorLi9pbmNsdWRlL3Rlcm1jYXAuaC5pbgorLi9pbmNsdWRlL3RpYy5oCisuL2luY2x1ZGUvdW5jdHJsLmguaW4KKy4vaW5zdGFsbC1zaAorLi9tYW4vTUt0ZXJtaW5mby5zaAorLi9tYW4vTWFrZWZpbGUuaW4KKy4vbWFuL2NhcHRvaW5mby4xbQorLi9tYW4vY2xlYXIuMQorLi9tYW4vY3Vyc19hZGRfd2NoLjN4CisuL21hbi9jdXJzX2FkZF93Y2hzdHIuM3gKKy4vbWFuL2N1cnNfYWRkY2guM3gKKy4vbWFuL2N1cnNfYWRkY2hzdHIuM3gKKy4vbWFuL2N1cnNfYWRkc3RyLjN4CisuL21hbi9jdXJzX2FkZHdzdHIuM3gKKy4vbWFuL2N1cnNfYXR0ci4zeAorLi9tYW4vY3Vyc19iZWVwLjN4CisuL21hbi9jdXJzX2JrZ2QuM3gKKy4vbWFuL2N1cnNfYmtncm5kLjN4CisuL21hbi9jdXJzX2JvcmRlci4zeAorLi9tYW4vY3Vyc19ib3JkZXJfc2V0LjN4CisuL21hbi9jdXJzX2NsZWFyLjN4CisuL21hbi9jdXJzX2NvbG9yLjN4CisuL21hbi9jdXJzX2RlbGNoLjN4CisuL21hbi9jdXJzX2RlbGV0ZWxuLjN4CisuL21hbi9jdXJzX2V4dGVuZC4zeAorLi9tYW4vY3Vyc19nZXRfd2NoLjN4CisuL21hbi9jdXJzX2dldF93c3RyLjN4CisuL21hbi9jdXJzX2dldGNjaGFyLjN4CisuL21hbi9jdXJzX2dldGNoLjN4CisuL21hbi9jdXJzX2dldHN0ci4zeAorLi9tYW4vY3Vyc19nZXR5eC4zeAorLi9tYW4vY3Vyc19pbl93Y2guM3gKKy4vbWFuL2N1cnNfaW5fd2Noc3RyLjN4CisuL21hbi9jdXJzX2luY2guM3gKKy4vbWFuL2N1cnNfaW5jaHN0ci4zeAorLi9tYW4vY3Vyc19pbml0c2NyLjN4CisuL21hbi9jdXJzX2lub3B0cy4zeAorLi9tYW4vY3Vyc19pbnNfd2NoLjN4CisuL21hbi9jdXJzX2luc193c3RyLjN4CisuL21hbi9jdXJzX2luc2NoLjN4CisuL21hbi9jdXJzX2luc3N0ci4zeAorLi9tYW4vY3Vyc19pbnN0ci4zeAorLi9tYW4vY3Vyc19pbndzdHIuM3gKKy4vbWFuL2N1cnNfa2VybmVsLjN4CisuL21hbi9jdXJzX2xlZ2FjeS4zeAorLi9tYW4vY3Vyc19tZW1sZWFrcy4zeAorLi9tYW4vY3Vyc19tb3VzZS4zeAorLi9tYW4vY3Vyc19tb3ZlLjN4CisuL21hbi9jdXJzX29wYXF1ZS4zeAorLi9tYW4vY3Vyc19vdXRvcHRzLjN4CisuL21hbi9jdXJzX292ZXJsYXkuM3gKKy4vbWFuL2N1cnNfcGFkLjN4CisuL21hbi9jdXJzX3ByaW50LjN4CisuL21hbi9jdXJzX3ByaW50dy4zeAorLi9tYW4vY3Vyc19yZWZyZXNoLjN4CisuL21hbi9jdXJzX3NjYW53LjN4CisuL21hbi9jdXJzX3Njcl9kdW1wLjN4CisuL21hbi9jdXJzX3Njcm9sbC4zeAorLi9tYW4vY3Vyc19zbGsuM3gKKy4vbWFuL2N1cnNfdGVybWF0dHJzLjN4CisuL21hbi9jdXJzX3Rlcm1jYXAuM3gKKy4vbWFuL2N1cnNfdGVybWluZm8uM3gKKy4vbWFuL2N1cnNfdGhyZWFkcy4zeAorLi9tYW4vY3Vyc190b3VjaC4zeAorLi9tYW4vY3Vyc190cmFjZS4zeAorLi9tYW4vY3Vyc191dGlsLjN4CisuL21hbi9jdXJzX3dpbmRvdy4zeAorLi9tYW4vZGVmYXVsdF9jb2xvcnMuM3gKKy4vbWFuL2RlZmluZV9rZXkuM3gKKy4vbWFuL2Zvcm0uM3gKKy4vbWFuL2Zvcm1fY3Vyc29yLjN4CisuL21hbi9mb3JtX2RhdGEuM3gKKy4vbWFuL2Zvcm1fZHJpdmVyLjN4CisuL21hbi9mb3JtX2ZpZWxkLjN4CisuL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3gKKy4vbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4CisuL21hbi9mb3JtX2ZpZWxkX2luZm8uM3gKKy4vbWFuL2Zvcm1fZmllbGRfanVzdC4zeAorLi9tYW4vZm9ybV9maWVsZF9uZXcuM3gKKy4vbWFuL2Zvcm1fZmllbGRfb3B0cy4zeAorLi9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4CisuL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gKKy4vbWFuL2Zvcm1fZmllbGR0eXBlLjN4CisuL21hbi9mb3JtX2hvb2suM3gKKy4vbWFuL2Zvcm1fbmV3LjN4CisuL21hbi9mb3JtX25ld19wYWdlLjN4CisuL21hbi9mb3JtX29wdHMuM3gKKy4vbWFuL2Zvcm1fcGFnZS4zeAorLi9tYW4vZm9ybV9wb3N0LjN4CisuL21hbi9mb3JtX3JlcXVlc3RuYW1lLjN4CisuL21hbi9mb3JtX3VzZXJwdHIuM3gKKy4vbWFuL2Zvcm1fd2luLjN4CisuL21hbi9pbmZvY21wLjFtCisuL21hbi9pbmZvdG9jYXAuMW0KKy4vbWFuL2tleV9kZWZpbmVkLjN4CisuL21hbi9rZXlib3VuZC4zeAorLi9tYW4va2V5b2suM3gKKy4vbWFuL2xlZ2FjeV9jb2RpbmcuM3gKKy4vbWFuL21ha2Vfc2VkLnNoCisuL21hbi9tYW5fZGIucmVuYW1lcworLi9tYW4vbWFubGlua3Muc2VkCisuL21hbi9tZW51LjN4CisuL21hbi9tZW51X2F0dHJpYnV0ZXMuM3gKKy4vbWFuL21lbnVfY3Vyc29yLjN4CisuL21hbi9tZW51X2RyaXZlci4zeAorLi9tYW4vbWVudV9mb3JtYXQuM3gKKy4vbWFuL21lbnVfaG9vay4zeAorLi9tYW4vbWVudV9pdGVtcy4zeAorLi9tYW4vbWVudV9tYXJrLjN4CisuL21hbi9tZW51X25ldy4zeAorLi9tYW4vbWVudV9vcHRzLjN4CisuL21hbi9tZW51X3BhdHRlcm4uM3gKKy4vbWFuL21lbnVfcG9zdC4zeAorLi9tYW4vbWVudV9yZXF1ZXN0bmFtZS4zeAorLi9tYW4vbWVudV9zcGFjaW5nLjN4CisuL21hbi9tZW51X3VzZXJwdHIuM3gKKy4vbWFuL21lbnVfd2luLjN4CisuL21hbi9taXRlbV9jdXJyZW50LjN4CisuL21hbi9taXRlbV9uYW1lLjN4CisuL21hbi9taXRlbV9uZXcuM3gKKy4vbWFuL21pdGVtX29wdHMuM3gKKy4vbWFuL21pdGVtX3VzZXJwdHIuM3gKKy4vbWFuL21pdGVtX3ZhbHVlLjN4CisuL21hbi9taXRlbV92aXNpYmxlLjN4CisuL21hbi9uY3Vyc2VzLjN4CisuL21hbi9wYW5lbC4zeAorLi9tYW4vcmVzaXpldGVybS4zeAorLi9tYW4vdGVybS41CisuL21hbi90ZXJtLjcKKy4vbWFuL3Rlcm1pbmZvLmhlYWQKKy4vbWFuL3Rlcm1pbmZvLnRhaWwKKy4vbWFuL3RpYy4xbQorLi9tYW4vdG9lLjFtCisuL21hbi90cHV0LjEKKy4vbWFuL3RzZXQuMQorLi9tYW4vd3Jlc2l6ZS4zeAorLi9tZW51L01ha2VmaWxlLmluCisuL21lbnUvUkVBRC5NRQorLi9tZW51L2V0aS5oCisuL21lbnUvaGVhZGVycworLi9tZW51L2xsaWItbG1lbnUKKy4vbWVudS9sbGliLWxtZW51dworLi9tZW51L21fYXR0cmlicy5jCisuL21lbnUvbV9jdXJzb3IuYworLi9tZW51L21fZHJpdmVyLmMKKy4vbWVudS9tX2Zvcm1hdC5jCisuL21lbnUvbV9nbG9iYWwuYworLi9tZW51L21faG9vay5jCisuL21lbnUvbV9pdGVtX2N1ci5jCisuL21lbnUvbV9pdGVtX25hbS5jCisuL21lbnUvbV9pdGVtX25ldy5jCisuL21lbnUvbV9pdGVtX29wdC5jCisuL21lbnUvbV9pdGVtX3RvcC5jCisuL21lbnUvbV9pdGVtX3VzZS5jCisuL21lbnUvbV9pdGVtX3ZhbC5jCisuL21lbnUvbV9pdGVtX3Zpcy5jCisuL21lbnUvbV9pdGVtcy5jCisuL21lbnUvbV9uZXcuYworLi9tZW51L21fb3B0cy5jCisuL21lbnUvbV9wYWQuYworLi9tZW51L21fcGF0dGVybi5jCisuL21lbnUvbV9wb3N0LmMKKy4vbWVudS9tX3JlcV9uYW1lLmMKKy4vbWVudS9tX3NjYWxlLmMKKy4vbWVudS9tX3NwYWNpbmcuYworLi9tZW51L21fc3ViLmMKKy4vbWVudS9tX3RyYWNlLmMKKy4vbWVudS9tX3VzZXJwdHIuYworLi9tZW51L21fd2luLmMKKy4vbWVudS9tZW51LmgKKy4vbWVudS9tZW51LnByaXYuaAorLi9tZW51L21mX2NvbW1vbi5oCisuL21lbnUvbW9kdWxlcworLi9taXNjL01ha2VmaWxlLmluCisuL21pc2MvY2hrZGVmLmNtZAorLi9taXNjL2NsZWFudGljLmNtZAorLi9taXNjL2NtcGRlZi5jbWQKKy4vbWlzYy9jc29ydAorLi9taXNjL2VteC5zcmMKKy4vbWlzYy9mb3JtLmRlZgorLi9taXNjL2Zvcm0ucmVmCisuL21pc2MvZ2VuX2VkaXQuc2gKKy4vbWlzYy9qcGYtaW5kZW50CisuL21pc2MvbWFrZWRlZi5jbWQKKy4vbWlzYy9tYWtlbGxpYgorLi9taXNjL21lbnUuZGVmCisuL21pc2MvbWVudS5yZWYKKy4vbWlzYy9uY3UtaW5kZW50CisuL21pc2MvbmN1cnNlcy1jb25maWcuaW4KKy4vbWlzYy9uY3Vyc2VzLmRlZgorLi9taXNjL25jdXJzZXMucmVmCisuL21pc2MvbmN1cnNlcy5zdXBwCisuL21pc2MvcGFuZWwuZGVmCisuL21pc2MvcGFuZWwucmVmCisuL21pc2MvcnVuX3RpYy5pbgorLi9taXNjL3NobGliCisuL21pc2MvdGFic2V0L3N0ZAorLi9taXNjL3RhYnNldC9zdGRjcnQKKy4vbWlzYy90YWJzZXQvdnQxMDAKKy4vbWlzYy90YWJzZXQvdnQzMDAKKy4vbWlzYy90ZGxpbnQKKy4vbWlzYy90ZXJtaW5mby5zcmMKKy4vbWstMHRoLmF3aworLi9tay0xc3QuYXdrCisuL21rLTJuZC5hd2sKKy4vbWstaGRyLmF3aworLi9ta2RpcnMuc2gKKy4vbmN1cnNlcy9NYWtlZmlsZS5pbgorLi9uY3Vyc2VzL1JFQURNRQorLi9uY3Vyc2VzL1JFQURNRS5JWgorLi9uY3Vyc2VzL1NpZ0FjdGlvbi5oCisuL25jdXJzZXMvYmFzZS9NS2tleW5hbWUuYXdrCisuL25jdXJzZXMvYmFzZS9NS2xpYl9nZW4uc2gKKy4vbmN1cnNlcy9iYXNlL01LdW5jdHJsLmF3aworLi9uY3Vyc2VzL2Jhc2UvUkVBRE1FCisuL25jdXJzZXMvYmFzZS9kZWZpbmVfa2V5LmMKKy4vbmN1cnNlcy9iYXNlL2tleV9kZWZpbmVkLmMKKy4vbmN1cnNlcy9iYXNlL2tleWJvdW5kLmMKKy4vbmN1cnNlcy9iYXNlL2tleW9rLmMKKy4vbmN1cnNlcy9iYXNlL2xlZ2FjeV9jb2RpbmcuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2FkZGNoLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9hZGRzdHIuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2JlZXAuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2JrZ2QuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2JveC5jCisuL25jdXJzZXMvYmFzZS9saWJfY2hnYXQuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2NsZWFyLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9jbGVhcm9rLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9jbHJib3QuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2NscmVvbC5jCisuL25jdXJzZXMvYmFzZS9saWJfY29sb3IuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2NvbG9yc2V0LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9kZWxjaC5jCisuL25jdXJzZXMvYmFzZS9saWJfZGVsd2luLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9kZnRfZmdiZy5jCisuL25jdXJzZXMvYmFzZS9saWJfZWNoby5jCisuL25jdXJzZXMvYmFzZS9saWJfZW5kd2luLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9lcmFzZS5jCisuL25jdXJzZXMvYmFzZS9saWJfZmxhc2guYworLi9uY3Vyc2VzL2Jhc2UvbGliX2ZyZWVhbGwuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2dldGNoLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9nZXRzdHIuYworLi9uY3Vyc2VzL2Jhc2UvbGliX2hsaW5lLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9pbW1lZG9rLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9pbmNoc3RyLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9pbml0c2NyLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9pbnNjaC5jCisuL25jdXJzZXMvYmFzZS9saWJfaW5zZGVsLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9pbnNuc3RyLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9pbnN0ci5jCisuL25jdXJzZXMvYmFzZS9saWJfaXNlbmR3aW4uYworLi9uY3Vyc2VzL2Jhc2UvbGliX2xlYXZlb2suYworLi9uY3Vyc2VzL2Jhc2UvbGliX21vdXNlLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9tb3ZlLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9tdndpbi5jCisuL25jdXJzZXMvYmFzZS9saWJfbmV3dGVybS5jCisuL25jdXJzZXMvYmFzZS9saWJfbmV3d2luLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9ubC5jCisuL25jdXJzZXMvYmFzZS9saWJfb3ZlcmxheS5jCisuL25jdXJzZXMvYmFzZS9saWJfcGFkLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9wcmludHcuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3JlZHJhd2xuLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9yZWZyZXNoLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9yZXN0YXJ0LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zY2Fudy5jCisuL25jdXJzZXMvYmFzZS9saWJfc2NyZWVuLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zY3JvbGwuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Njcm9sbG9rLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zY3JyZWcuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3NldF90ZXJtLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGsuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cl9zZXQuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cm9mLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJvbi5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrYXRyc2V0LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGthdHRyLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGtjbGVhci5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrY29sb3IuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2luaXQuYworLi9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2xhYi5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrcmVmci5jCisuL25jdXJzZXMvYmFzZS9saWJfc2xrc2V0LmMKKy4vbmN1cnNlcy9iYXNlL2xpYl9zbGt0b3VjaC5jCisuL25jdXJzZXMvYmFzZS9saWJfdG91Y2guYworLi9uY3Vyc2VzL2Jhc2UvbGliX3VuZ2V0Y2guYworLi9uY3Vyc2VzL2Jhc2UvbGliX3ZsaW5lLmMKKy4vbmN1cnNlcy9iYXNlL2xpYl93YXR0cm9mZi5jCisuL25jdXJzZXMvYmFzZS9saWJfd2F0dHJvbi5jCisuL25jdXJzZXMvYmFzZS9saWJfd2luY2guYworLi9uY3Vyc2VzL2Jhc2UvbGliX3dpbmRvdy5jCisuL25jdXJzZXMvYmFzZS9tZW1tb3ZlLmMKKy4vbmN1cnNlcy9iYXNlL25jX3BhbmVsLmMKKy4vbmN1cnNlcy9iYXNlL3Jlc2l6ZXRlcm0uYworLi9uY3Vyc2VzL2Jhc2Uvc2FmZV9zcHJpbnRmLmMKKy4vbmN1cnNlcy9iYXNlL3NpZ2FjdGlvbi5jCisuL25jdXJzZXMvYmFzZS90cmllcy5jCisuL25jdXJzZXMvYmFzZS91c2Vfd2luZG93LmMKKy4vbmN1cnNlcy9iYXNlL3ZlcnNpb24uYworLi9uY3Vyc2VzL2Jhc2UvdnNzY2FuZi5jCisuL25jdXJzZXMvYmFzZS93cmVzaXplLmMKKy4vbmN1cnNlcy9jdXJzZXMucHJpdi5oCisuL25jdXJzZXMvZmlmb19kZWZzLmgKKy4vbmN1cnNlcy9sbGliLWxuY3Vyc2VzCisuL25jdXJzZXMvbGxpYi1sbmN1cnNlc3QKKy4vbmN1cnNlcy9sbGliLWxuY3Vyc2VzdworLi9uY3Vyc2VzL21vZHVsZXMKKy4vbmN1cnNlcy90aW5mby9NS2NhcHRhYi5hd2sKKy4vbmN1cnNlcy90aW5mby9NS2NhcHRhYi5zaAorLi9uY3Vyc2VzL3RpbmZvL01LY29kZXMuYXdrCisuL25jdXJzZXMvdGluZm8vTUtmYWxsYmFjay5zaAorLi9uY3Vyc2VzL3RpbmZvL01La2V5c19saXN0LnNoCisuL25jdXJzZXMvdGluZm8vTUtuYW1lcy5hd2sKKy4vbmN1cnNlcy90aW5mby9SRUFETUUKKy4vbmN1cnNlcy90aW5mby9hY2Nlc3MuYworLi9uY3Vyc2VzL3RpbmZvL2FkZF90cmllcy5jCisuL25jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYworLi9uY3Vyc2VzL3RpbmZvL2FsbG9jX3R0eXBlLmMKKy4vbmN1cnNlcy90aW5mby9jYXB0b2luZm8uYworLi9uY3Vyc2VzL3RpbmZvL2NvbXBfZXJyb3IuYworLi9uY3Vyc2VzL3RpbmZvL2NvbXBfZXhwYW5kLmMKKy4vbmN1cnNlcy90aW5mby9jb21wX2hhc2guYworLi9uY3Vyc2VzL3RpbmZvL2NvbXBfcGFyc2UuYworLi9uY3Vyc2VzL3RpbmZvL2NvbXBfc2Nhbi5jCisuL25jdXJzZXMvdGluZm8vZGJfaXRlcmF0b3IuYworLi9uY3Vyc2VzL3RpbmZvL2RvYWxsb2MuYworLi9uY3Vyc2VzL3RpbmZvL2VudHJpZXMuYworLi9uY3Vyc2VzL3RpbmZvL2ZyZWVfdHR5cGUuYworLi9uY3Vyc2VzL3RpbmZvL2dldGVudl9udW0uYworLi9uY3Vyc2VzL3RpbmZvL2hhc2hlZF9kYi5jCisuL25jdXJzZXMvdGluZm8vaG9tZV90ZXJtaW5mby5jCisuL25jdXJzZXMvdGluZm8vaW5pdF9rZXl0cnkuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9hY3MuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9iYXVkcmF0ZS5jCisuL25jdXJzZXMvdGluZm8vbGliX2N1cl90ZXJtLmMKKy4vbmN1cnNlcy90aW5mby9saWJfZGF0YS5jCisuL25jdXJzZXMvdGluZm8vbGliX2hhc19jYXAuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9rZXJuZWwuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl9sb25nbmFtZS5jCisuL25jdXJzZXMvdGluZm8vbGliX25hcG1zLmMKKy4vbmN1cnNlcy90aW5mby9saWJfb3B0aW9ucy5jCisuL25jdXJzZXMvdGluZm8vbGliX3ByaW50LmMKKy4vbmN1cnNlcy90aW5mby9saWJfcmF3LmMKKy4vbmN1cnNlcy90aW5mby9saWJfc2V0dXAuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl90ZXJtY2FwLmMKKy4vbmN1cnNlcy90aW5mby9saWJfdGVybW5hbWUuYworLi9uY3Vyc2VzL3RpbmZvL2xpYl90Z290by5jCisuL25jdXJzZXMvdGluZm8vbGliX3RpLmMKKy4vbmN1cnNlcy90aW5mby9saWJfdHBhcm0uYworLi9uY3Vyc2VzL3RpbmZvL2xpYl90cHV0cy5jCisuL25jdXJzZXMvdGluZm8vbGliX3R0eWZsYWdzLmMKKy4vbmN1cnNlcy90aW5mby9tYWtlX2tleXMuYworLi9uY3Vyc2VzL3RpbmZvL25hbWVfbWF0Y2guYworLi9uY3Vyc2VzL3RpbmZvL3BhcnNlX2VudHJ5LmMKKy4vbmN1cnNlcy90aW5mby9yZWFkX2VudHJ5LmMKKy4vbmN1cnNlcy90aW5mby9yZWFkX3Rlcm1jYXAuYworLi9uY3Vyc2VzL3RpbmZvL3NldGJ1Zi5jCisuL25jdXJzZXMvdGluZm8vc3RyaW5ncy5jCisuL25jdXJzZXMvdGluZm8vdHJpbV9zZ3IwLmMKKy4vbmN1cnNlcy90aW5mby91c2Vfc2NyZWVuLmMKKy4vbmN1cnNlcy90aW5mby93cml0ZV9lbnRyeS5jCisuL25jdXJzZXMvdHJhY2UvUkVBRE1FCisuL25jdXJzZXMvdHJhY2UvbGliX3RyYWNlLmMKKy4vbmN1cnNlcy90cmFjZS9saWJfdHJhY2VhdHIuYworLi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWJpdHMuYworLi9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWNoci5jCisuL25jdXJzZXMvdHJhY2UvbGliX3RyYWNlZG1wLmMKKy4vbmN1cnNlcy90cmFjZS9saWJfdHJhY2Vtc2UuYworLi9uY3Vyc2VzL3RyYWNlL3RyYWNlX2J1Zi5jCisuL25jdXJzZXMvdHJhY2UvdHJhY2VfdHJpZXMuYworLi9uY3Vyc2VzL3RyYWNlL3RyYWNlX3huYW1lcy5jCisuL25jdXJzZXMvdHJhY2UvdmFyYXJncy5jCisuL25jdXJzZXMvdHJhY2UvdmlzYnVmLmMKKy4vbmN1cnNlcy90dHkvTUtleHBhbmRlZC5zaAorLi9uY3Vyc2VzL3R0eS9oYXJkc2Nyb2xsLmMKKy4vbmN1cnNlcy90dHkvaGFzaG1hcC5jCisuL25jdXJzZXMvdHR5L2xpYl9tdmN1ci5jCisuL25jdXJzZXMvdHR5L2xpYl90c3RwLmMKKy4vbmN1cnNlcy90dHkvbGliX3R3YWl0LmMKKy4vbmN1cnNlcy90dHkvbGliX3ZpZGF0dHIuYworLi9uY3Vyc2VzL3R0eS90dHlfZGlzcGxheS5oCisuL25jdXJzZXMvdHR5L3R0eV9pbnB1dC5oCisuL25jdXJzZXMvdHR5L3R0eV91cGRhdGUuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2NoYXJhYmxlLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfYWRkX3djaC5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX2JveF9zZXQuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9jY2hhci5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX2VyYXNld2NoYXIuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9nZXRfd2NoLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfZ2V0X3dzdHIuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9obGluZV9zZXQuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbl93Y2guYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbl93Y2huc3RyLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfaW5zX3djaC5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX2lud3N0ci5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX2tleV9uYW1lLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfcGVjaG9fd2NoYXIuYworLi9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9zbGtfd3NldC5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX3VuZ2V0X3djaC5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX3ZpZF9hdHRyLmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfdmxpbmVfc2V0LmMKKy4vbmN1cnNlcy93aWRlY2hhci9saWJfd2Fjcy5jCisuL25jdXJzZXMvd2lkZWNoYXIvbGliX3d1bmN0cmwuYworLi9wYW5lbC9NYWtlZmlsZS5pbgorLi9wYW5lbC9oZWFkZXJzCisuL3BhbmVsL2xsaWItbHBhbmVsCisuL3BhbmVsL2xsaWItbHBhbmVsdworLi9wYW5lbC9tb2R1bGVzCisuL3BhbmVsL3BfYWJvdmUuYworLi9wYW5lbC9wX2JlbG93LmMKKy4vcGFuZWwvcF9ib3R0b20uYworLi9wYW5lbC9wX2RlbGV0ZS5jCisuL3BhbmVsL3BfaGlkZGVuLmMKKy4vcGFuZWwvcF9oaWRlLmMKKy4vcGFuZWwvcF9tb3ZlLmMKKy4vcGFuZWwvcF9uZXcuYworLi9wYW5lbC9wX3JlcGxhY2UuYworLi9wYW5lbC9wX3Nob3cuYworLi9wYW5lbC9wX3RvcC5jCisuL3BhbmVsL3BfdXBkYXRlLmMKKy4vcGFuZWwvcF91c2VyLmMKKy4vcGFuZWwvcF93aW4uYworLi9wYW5lbC9wYW5lbC5jCisuL3BhbmVsL3BhbmVsLmgKKy4vcGFuZWwvcGFuZWwucHJpdi5oCisuL3Byb2dzL01LdGVybXNvcnQuc2gKKy4vcHJvZ3MvTWFrZWZpbGUuaW4KKy4vcHJvZ3MvY2FwY29udmVydAorLi9wcm9ncy9jbGVhci5jCisuL3Byb2dzL2NsZWFyLnNoCisuL3Byb2dzL2R1bXBfZW50cnkuYworLi9wcm9ncy9kdW1wX2VudHJ5LmgKKy4vcHJvZ3MvaW5mb2NtcC5jCisuL3Byb2dzL21vZHVsZXMKKy4vcHJvZ3MvcHJvZ3MucHJpdi5oCisuL3Byb2dzL3RpYy5jCisuL3Byb2dzL3RvZS5jCisuL3Byb2dzL3RwdXQuYworLi9wcm9ncy90c2V0LmMKKy4vdGFyLWNvcHkuc2gKKy4vdGVzdC9NYWtlZmlsZS5pbgorLi90ZXN0L1JFQURNRQorLi90ZXN0L2FjbG9jYWwubTQKKy4vdGVzdC9iYWNrZ3JvdW5kLmMKKy4vdGVzdC9ibHVlLmMKKy4vdGVzdC9icy42CisuL3Rlc3QvYnMuYworLi90ZXN0L2J1bGdhcmlhbi11dGY4LnR4dAorLi90ZXN0L2NhcmRmaWxlLmMKKy4vdGVzdC9jYXJkZmlsZS5kYXQKKy4vdGVzdC9jaGdhdC5jCisuL3Rlc3QvY29sb3Jfc2V0LmMKKy4vdGVzdC9jb25maWd1cmUKKy4vdGVzdC9jb25maWd1cmUuaW4KKy4vdGVzdC9kZW1vX2FsdGtleXMuYworLi90ZXN0L2RlbW9fZGVma2V5LmMKKy4vdGVzdC9kZW1vX2Zvcm1zLmMKKy4vdGVzdC9kZW1vX2tleW9rLmMKKy4vdGVzdC9kZW1vX21lbnVzLmMKKy4vdGVzdC9kZW1vX3BhbmVscy5jCisuL3Rlc3QvZGVtb190ZXJtY2FwLmMKKy4vdGVzdC9kaXR0by5jCisuL3Rlc3QvZG90cy5jCisuL3Rlc3QvZG90c19tdmN1ci5jCisuL3Rlc3QvZWNob2NoYXIuYworLi90ZXN0L2VkaXRfZmllbGQuYworLi90ZXN0L2VkaXRfZmllbGQuaAorLi90ZXN0L2ZpbHRlci5jCisuL3Rlc3QvZmlyZXdvcmsuYworLi90ZXN0L2ZpcnN0bGFzdC5jCisuL3Rlc3QvZm9sZGtleXMuYworLi90ZXN0L2dkYy42CisuL3Rlc3QvZ2RjLmMKKy4vdGVzdC9oYW5vaS5jCisuL3Rlc3QvaGFzaHRlc3QuYworLi90ZXN0L2luY2hfd2lkZS5jCisuL3Rlc3QvaW5jaHMuYworLi90ZXN0L2luc193aWRlLmMKKy4vdGVzdC9pbnNlcnRzLmMKKy4vdGVzdC9rZXlfbmFtZXMuYworLi90ZXN0L2tleW5hbWVzLmMKKy4vdGVzdC9rbmlnaHQuYworLi90ZXN0L2xpbnV4LWNvbG9yLmRhdAorLi90ZXN0L2xpc3R1c2VkLnNoCisuL3Rlc3QvbHJ0ZXN0LmMKKy4vdGVzdC9tay10ZXN0LmF3aworLi90ZXN0L21vZHVsZXMKKy4vdGVzdC9tb3Zld2luZG93LmMKKy4vdGVzdC9uY3Vyc2VzLmMKKy4vdGVzdC9uY3Vyc2VzX3RzdC5oaW4KKy4vdGVzdC9uZXdkZW1vLmMKKy4vdGVzdC9wcm9ncmFtcworLi90ZXN0L3JhaWxyb2FkLmMKKy4vdGVzdC9yYWluLmMKKy4vdGVzdC9yZWRyYXcuYworLi90ZXN0L3NhdmVzY3JlZW4uYworLi90ZXN0L3NhdmVzY3JlZW4uc2gKKy4vdGVzdC90Y2xvY2suYworLi90ZXN0L3Rlc3QucHJpdi5oCisuL3Rlc3QvdGVzdF9hcnJheXMuYworLi90ZXN0L3Rlc3RfZ2V0X3dzdHIuYworLi90ZXN0L3Rlc3RfZ2V0c3RyLmMKKy4vdGVzdC90ZXN0X2luc3RyLmMKKy4vdGVzdC90ZXN0X2lud3N0ci5jCisuL3Rlc3QvdGVzdF9vcGFxdWUuYworLi90ZXN0L3Rlc3RhZGRjaC5jCisuL3Rlc3QvdGVzdGN1cnMuYworLi90ZXN0L3Rlc3RzY2Fudy5jCisuL3Rlc3QvdHJhY2VtdW5jaAorLi90ZXN0L3ZpZXcuYworLi90ZXN0L3dpZGVjaGFycy11dGY4LnR4dAorLi90ZXN0L3dvcm0uYworLi90ZXN0L3htYXMuYworLi90ZXN0L3h0ZXJtLTE2Y29sb3IuZGF0CisuL3Rlc3QveHRlcm0tODhjb2xvci5kYXQKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L01ha2VmaWxlLmluIGIvbmN1cnNlcy01LjcvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4Y2Q0MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTcgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuMjQgMjAwNS8wMS8yOSAxOTozMDowNiB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk2LDE5OTcKKyMKKyMgTWFzdGVyIE1ha2VmaWxlIGZvciBuY3Vyc2VzIGxpYnJhcnkuCisKK1NIRUxMID0gL2Jpbi9zaAorCitERVNURElSPUBERVNURElSQAorQ0ZfTUZMQUdTID0gQGNmX2N2X21ha2VmbGFnc0AgREVTVERJUj0iJChERVNURElSKSIKKworQFNFVF9NQUtFQAorCitOQ1VSU0VTX01BSk9SCT0gQE5DVVJTRVNfTUFKT1JACitOQ1VSU0VTX01JTk9SCT0gQE5DVVJTRVNfTUlOT1JACitOQ1VSU0VTX1BBVENICT0gQE5DVVJTRVNfUEFUQ0hACisKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACisKK2JpbmRpcgkJPSBAYmluZGlyQAordGljZGlyCQk9IEBURVJNSU5GT0AKK2luY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAKK2xpYmRpcgkJPSBAbGliZGlyQAorbWFuZGlyCQk9IEBtYW5kaXJACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitESVJTX1RPX01BS0UJPSBARElSU19UT19NQUtFQAorCithbGwgOjoJJChESVJTX1RPX01BS0UpCisKKyQoRElSU19UT19NQUtFKSA6CisJbWtkaXIgJEAKKworcHJlaW5zdGFsbCA6CisJQCBlY2hvICcnCisJQCBlY2hvICcqKiBDb25maWd1cmF0aW9uIHN1bW1hcnkgZm9yIE5DVVJTRVMgJChOQ1VSU0VTX01BSk9SKS4kKE5DVVJTRVNfTUlOT1IpICQoTkNVUlNFU19QQVRDSCk6JworCUAgZWNobyAnJworCUAgZWNobyAnICAgICBleHRlbmRlZCBmdW5jczogJ2B0ZXN0IEBOQ1VSU0VTX0VYVF9GVU5DU0AgIT0gMCAmJiBlY2hvIHllcyB8fCBlY2hvIG5vYAorCUAgZWNobyAnICAgICB4dGVybSB0ZXJtaW5mbzogJ0BXSElDSF9YVEVSTUAKKwlAIGVjaG8gJycKKwlAIGVjaG8gJyAgICAgIGJpbiBkaXJlY3Rvcnk6ICckKGJpbmRpcikKKwlAIGVjaG8gJyAgICAgIGxpYiBkaXJlY3Rvcnk6ICckKGxpYmRpcikKKwlAIGVjaG8gJyAgaW5jbHVkZSBkaXJlY3Rvcnk6ICckKGluY2x1ZGVkaXIpCisJQCBlY2hvICcgICAgICBtYW4gZGlyZWN0b3J5OiAnJChtYW5kaXIpCitATUFLRV9URVJNSU5GT0AJQCBlY2hvICcgdGVybWluZm8gZGlyZWN0b3J5OiAnJCh0aWNkaXIpCisJQCBlY2hvICcnCisJQCB0ZXN0ICIkKGluY2x1ZGVkaXIpIiA9ICIkKHByZWZpeCkvaW5jbHVkZSIgfHwgXAorCQllY2hvICcqKiBJbmNsdWRlLWRpcmVjdG9yeSBpcyBub3QgaW4gYSBzdGFuZGFyZCBsb2NhdGlvbicKKwlAIHRlc3QgISAtZiAkKGluY2x1ZGVkaXIpL3Rlcm1jYXAuaCB8fCBcCisJCWZncmVwIE5DVVJTRVNfVkVSU0lPTiAkKGluY2x1ZGVkaXIpL3Rlcm1jYXAuaCA+L2Rldi9udWxsIHx8IFwKKwkJZWNobyAnKiogV2lsbCBvdmVyd3JpdGUgbm9uLW5jdXJzZXMgdGVybWNhcC5oJworCUAgdGVzdCAhIC1mICQoaW5jbHVkZWRpcikvY3Vyc2VzLmggfHwgXAorCQlmZ3JlcCBOQ1VSU0VTX1ZFUlNJT04gJChpbmNsdWRlZGlyKS9jdXJzZXMuaCA+L2Rldi9udWxsIHx8IFwKKwkJZWNobyAnKiogV2lsbCBvdmVyd3JpdGUgbm9uLW5jdXJzZXMgY3Vyc2VzLmgnCisKKyMgUHV0IHRoZSBjb21tb24gcnVsZXMgaGVyZSBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgY29uc3RydWN0IHRoZSBsaXN0IG9mCisjIGRpcmVjdG9yaWVzIHRvIHZpc2l0LgorYWxsIFwKK2NsZWFuIFwKK2Rpc3RjbGVhbiBcCittb3N0bHljbGVhbiBcCityZWFsY2xlYW4gXAorZGVwZW5kIFwKK3NvdXJjZXMgXAordGFncyBcCit1bmluc3RhbGwgXAoraW5zdGFsbCA6OgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvTWFrZWZpbGUub3MyIGIvbmN1cnNlcy01LjcvTWFrZWZpbGUub3MyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNDQ0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9NYWtlZmlsZS5vczIKQEAgLTAsMCArMSwyNTkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IE1ha2VmaWxlLm9zMix2IDEuMTEgMjAwNi8wNC8yMiAyMTo0NjoxNyB0b20gRXhwICQKKyMKKyMgV3JhcHBlciBNYWtlZmlsZSBmb3IgbmN1cnNlcyBsaWJyYXJ5IHVuZGVyIE9TLzIuCisjIEF1dGhvcjogIEp1YW4gSm9zZSBHYXJjaWEgUmlwb2xsIDx3b3JtQGFycmFraXMuZXM+LgorIyBXZWJwYWdlOiBodHRwOi8vd3d3LmFycmFraXMuZXMvfndvcm0vCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBOb3RlcyAoZnJvbSBJIFpha2hhcmV2aWNoKQorIyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyBJIGNvdWxkIGJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBvZiBjb21tYW5kczoKKyMKKyMgICB0b3VjaCBNYWtlZmlsZQorIyAgIG1ha2UgLWYgTWFrZWZpbGUub3MyIGNvbmZpZworIyAgIG1ha2UgLWYgTWFrZWZpbGUub3MyIENDPWdjYyBIT1NUQ0M9Z2NjIENYWD1nY2MKKyMKKyMgSWdub3JpbmcgdGhlIGZvbGxvd2luZyBlcnJvcnM6CisjICAgSW52YWxpZCBjb25maWd1cmF0aW9uIGBvczInLi4uCisjICAgLi4uIGFjX21ha2V0ZW1wPSJtYWtlIjogbm90IGZvdW5kCisjICAgLi4uIHN5bnRheCBlcnJvcjogYGRvbmUnIHVuZXhwZWN0ZWQKKyMgICBObyBydWxlIHRvIG1ha2UgdGFyZ2V0IGBsaWIvbmN1cnNlczQuZGxsJworIworIyBZb3UgbWF5IG5lZWQgdG8gcnVuCisjCisjICAgcm0gbWFrZS5kZWZzCisjICAgbWFrZSAtZiBNYWtlZmlsZS5vczIgbWFrZS5kZWZzCisjCisjIGlmIHRoZSBidWlsZCBvZiBtaXNjL3BhbmVsLmRlZiBmYWlscy4KKyMKKyMgSWYgeW91IGRvIG5vdCBoYXZlIHBlcmwsIHRoZSBjb25maWd1cmF0aW9uIHdpbGwgZmFpbC4gIFVzZSBhdXRvY29uZiB0bworIyBnZW5lcmF0ZSB0aGUgRU1YLXNwZWNpZmljIGNvbmZpZ3VyZSBzY3JpcHQgKHNlZSBSRUFETUUuZW14KSwgYW5kIHJ1biB0aGUKKyMgY29uZmlndXJlIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzLiAgVGhlbiwgcnVuCisjCisjICAgbWFrZSAtZiBNYWtlZmlsZS5vczIgbWFrZS5kbGxzCisjCisjIE5vdGVzIChmcm9tIEogSiBHIFJpcG9sbCkKKyMgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyBUaGUgYG1ha2UuZGVmcycgcnVsZSBjcmVhdGVzIHRoZSBuZXcgJy5kZWYnIGZpbGVzIGFuZCBvdXRwdXRzIGEgZGlhZ25vc3RpYworIyBhYm91dCBzeW1ib2xzIHRoYXQgZGlzYXBwZWFyIGZyb20gb25lIHJlbGVhc2UgdG8gdGhlIG90aGVyLCBhcyB3ZWxsIGFzCisjIGNoZWNrcyBhYm91dCB0aGUgbmV3ICcuZGVmJyBjb25zaXN0ZW5jeS4gIElmIHRoZXJlIHdlcmUgbm8gcHJvYmxlbXMsIHRoZQorIyBtYWludGFpbmVyIGlzIGZyZWUgdG8gcmVwbGFjZSB0aGUgYC5yZWYnIGZpbGVzIHdpdGggdGhlIG5ld2VyIG9uZXMgdXNpbmcgdGhlCisjIGBzYXZlLmRlZnMnIHJ1bGUuICBTbywgdGhlIG9ubHkgdG91Z2ggd29yayBpcyBlbnN1cmluZyB0aGF0IHRoZSBzeW1ib2xzIHRoYXQKKyMgZGlzYXBwZWFyIGFyZSBub3QgZXNzZW50aWFsLgorIworIyBJIGZpcnN0IHRob3VnaHQgYWJvdXQga2lsbGluZyAnX25jXyonIHN5bWJvbHMsIGJ1dCBpdCBzZWVtcyB0aGF0IHNvbWUgb2YKKyMgdGhlbSAtLV9uY19wYW5lbF9ob29rLCBfbmNfYWRhKiwgZXRjLS0gYXJlIG5lZWRlZCBvdXRzaWRlIG5jdXJzZXMuZGxsLiAKKyMgSG93ZXZlciwgdGhlIHdob2xlIHNpemUgb2YgdGhlIGV4cG9ydCB0YWJsZSB3aWxsIG5vdCBiZSBsYXJnZXIgdGhhbiAxayBvcgorIyBzby4KKyMKKyMgW2luc3RhbGxhdGlvbl0KKyMKKyMgVGhlIHdheSB0aGluZ3MgYXJlIGhhbmRsZWQgaW4gbWlzYy9NYWtlZmlsZSBpcyBub3Qgd2VsbCBzdWl0ZWQgZm9yIE9TLzIsCisjIHdoZXJlIG9ubHkgZW14LnNyYyBpcyBuZWVkZWQuICBUaHVzLCBJJ3ZlIHdyaXR0ZW4gYSBmZXcgd3JhcHBlciBydWxlcyBpbgorIyBNYWtlZmlsZS5vczIgdGhhdCBoYW5kbGUgaW5zdGFsbGF0aW9uL2RlaW5zdGFsbGF0aW9uLgorIworIyBbZGlzdHJpYnV0aW9uXQorIworIyBUaGVyZSdzIGFsc28gYSBuZXcgcnVsZSB0aGF0IGNvbmZpZ3VyZXMgYW5kIGJ1aWxkcyBhIHNvcnQgb2YgYmluYXJ5CisjIGRpc3RyaWJ1dGlvbiwgbXVjaCBsaWtlIHRoZSBvbmUgSSBwcmVwYXJlZCBmb3IgMS45LjllLiAgSXQncyBgb3MyZGlzdCcuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCithbGwgOjogY29uZmlnCisKKyMgVGhpcyBpcyBmb3IgY29uZmlndXJpbmcKKworIyBXaGF0IGlzIGEgdXNlZnVsIHZhbHVlIGZvciB0aGlzPworQ09ORklHX09QVFMJPSAtLWVuYWJsZS10ZXJtY2FwCitXV1dHRVQJCT0gbHlueCAtc291cmNlCitNVl9GCQk9IG12IC1mCitETExfTE5fT1BUUwk9IC1aY3J0ZGxsIC1aZGxsIC1ab21mIC1abXQKKworY29uZmlnOiBjb25maWcuY2FjaGUKKworY29uZmlnLmNhY2hlOiBjb25maWd1cmUuY21kIGNvbmZpZ3VyZQorCS0kKE1WX0YpICRAICRALnJlZgorCWNvbmZpZ3VyZS5jbWQgJChDT05GSUdfT1BUUykKKworY29uZmlndXJlLmNtZDogY29uZmlndXJlIGNvbnZlcnRfY29uZmlndXJlLnBsCisJcGVybCBjb252ZXJ0X2NvbmZpZ3VyZS5wbCBjb25maWd1cmUgPiAkQAorCitjb252ZXJ0X2NvbmZpZ3VyZS5wbDoKKwkkKFdXV0dFVCkgZnRwOi8vZnRwLm1hdGgub2hpby1zdGF0ZS5lZHUvcHViL3VzZXJzL2lseWEvb3MyLyRAID4gJEAKKworaW5zdGFsbCA6OgorCWVjaG8gKioqCisJZWNobyAqKiogRG8gbm90IHVzZSB0aGlzIGNvbW1hbmQuIFVzZSBpbnN0YWxsLm9zMiBpbnN0ZWFkLgorCWVjaG8gKioqCisJZXhpdCAyCisKK2luc3RhbGwub3MyIDogaW5zdGFsbC5lbXhkYXRhIGluc3RhbGwubGlicyBpbnN0YWxsLnByb2dzCisKK2luY2x1ZGUgLi9NYWtlZmlsZQorCithbGwgOjogbWFrZS5kbGxzCisKKyMKKyMgRExMcyBhbmQgdGhhdCBzdHVmZgorIworCitMSUJSQVJJRVMgPSBuY3Vyc2VzIGZvcm0gbWVudSBwYW5lbAorCitETExfVEFHID0gJChOQ1VSU0VTX01BSk9SKQorTElCX1RBRyA9IF9zCisKK0RMTF9ST09UUyA9ICQoYWRkc3VmZml4ICQoRExMX1RBRyksICQoTElCUkFSSUVTKSkKK0RMTFMgPSAkKGFkZHN1ZmZpeCAuZGxsLCAkKGFkZHByZWZpeCAuL2xpYi8sICQoRExMX1JPT1RTKSkpCisKK0xJQl9ST09UUyA9ICQoYWRkc3VmZml4ICQoTElCX1RBRyksICQoTElCUkFSSUVTKSkKK0xJQlMgPSAkKGFkZHN1ZmZpeCAubGliLCAkKGFkZHByZWZpeCAuL2xpYi8sICQoTElCX1JPT1RTKSkpCisKK0xJQlNfQU9VVCA9ICQoYWRkc3VmZml4IC5hLCAkKGFkZHByZWZpeCAuL2xpYi8sICQoTElCX1JPT1RTKSkpCisKK0RFRlMgPSAkKGFkZHN1ZmZpeCAuZGVmLCAkKGFkZHByZWZpeCAuL21pc2MvLCAkKExJQlJBUklFUykpKQorCitETExfU0lHTkFUVVJFID0gTkN1cnNlcy0kKE5DVVJTRVNfTUFKT1IpLSQoTkNVUlNFU19NSU5PUiktJChOQ1VSU0VTX1BBVENIKQorCisuL2xpYi8lJChMSUJfVEFHKS5saWIgOiAuL21pc2MvJS5kZWYKKwllbXhpbXAgLW8gJEAgJDwKKworLi9saWIvJSQoTElCX1RBRykuYSA6IC4vbWlzYy8lLmRlZgorCWVteGltcCAtbyAkQCAkPAorCisuL2xpYi8lJChETExfVEFHKS5kbGwgOiAuL2xpYi8lLmEKKwllbXhvbWYgLW8gLi9saWIvJCokKERMTF9UQUcpLmxpYiAkPAorCWlmIFsgIiQqIiA9ICJuY3Vyc2VzIiBdOyB0aGVuIFwKKwkJZ2NjICQoTERGTEFHUykgJChETExfTE5fT1BUUykgLi9saWIvJCokKERMTF9UQUcpLmxpYiBcCisJCQkJLi9taXNjLyQqLmRlZiAtbyAkQDsgXAorCWVsc2UgXAorCQlnY2MgJChMREZMQUdTKSAkKERMTF9MTl9PUFRTKSAuL2xpYi8kKiQoRExMX1RBRykubGliIFwKKwkJCQkuL2xpYi9uY3Vyc2VzJChMSUJfVEFHKS5saWIgLi9taXNjLyQqLmRlZiAtbyAkQDsgXAorCWZpCisJLXJtIC1mIC4vbGliLyQqJChETExfVEFHKS5saWIKKworbWFrZS5kbGxzIDogJChERUZTKSAkKExJQlMpICQoRExMUykgJChMSUJTX0FPVVQpCisKKyQoREVGUykgOiBtYWtlLmRlZnMKKworTElCRElSCT0gJChERVNURElSKSQobGliZGlyKQorJChMSUJESVIpIDoKKwlta2RpciAtcCAkQAorCitpbnN0YWxsLmxpYnMgOjogJChMSUJTKSAkKERMTFMpICQoTElCRElSKQorCUBmb3IgaSBpbiAkKERMTF9ST09UUyk7IGRvIFwKKwllY2hvIGluc3RhbGxpbmcgLi9saWIvJCRpLmRsbCBhcyAkKExJQkRJUikvJCRpLmRsbDsgXAorCSQoSU5TVEFMTF9EQVRBKSAuL2xpYi8kJGkuZGxsICQoTElCRElSKS8kJGkuZGxsOyBkb25lCisJQGZvciBpIGluICQoTElCX1JPT1RTKTsgZG8gXAorCWVjaG8gaW5zdGFsbGluZyAuL2xpYi8kJGkubGliIGFzICQoTElCRElSKS8kJGkubGliOyBcCisJJChJTlNUQUxMX0RBVEEpIC4vbGliLyQkaS5saWIgJChMSUJESVIpLyQkaS5saWI7IGRvbmUKKwordW5pbnN0YWxsLmxpYnMgOjoKKwktQGZvciBpIGluICQoRExMX1JPT1RTKTsgZG8gXAorCWVjaG8gdW5pbnN0YWxsaW5nICQoTElCRElSKS8kJGkuZGxsOyBcCisJcm0gLWYgJChMSUJESVIpLyQkaS5kbGw7IGRvbmUKKwktQGZvciBpIGluICQoTElCX1JPT1RTKTsgZG8gXAorCWVjaG8gdW5pbnN0YWxsaW5nICQoTElCRElSKS8kJGkubGliOyBcCisJcm0gLWYgJChMSUJESVIpLyQkaS5saWI7IGRvbmUKKworbWFrZS5kZWZzIDoKKwlmb3IgaSBpbiAkKExJQlJBUklFUyk7IGRvIFwKKwllY2hvIExJQlJBUlkgJCR7aX0kKERMTF9UQUcpIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiAuL21pc2MvJCRpLmRlZjsgXAorCWVjaG8gREVTQ1JJUFRJT04gXCIkKERMTF9TSUdOQVRVUkUpLCBtb2R1bGUgJCRpXCIgPj4gLi9taXNjLyQkaS5kZWY7IFwKKwllY2hvIENPREUgTE9BRE9OQ0FMTCA+PiAuL21pc2MvJCRpLmRlZjsgXAorCWVjaG8gREFUQSBMT0FET05DQUxMIE5PTlNIQVJFRCBNVUxUSVBMRSA+PiAuL21pc2MvJCRpLmRlZjsgXAorCWVjaG8gRVhQT1JUUyA+PiAuL21pc2MvJCRpLmRlZjsgXAorCWVjaG8gQ3JlYXRpbmcgJCRpLmRlZjsgXAorCShjbWQgL0MgIi5cXG1pc2NcXG1ha2VkZWYuY21kIC4vbGliLyQkaS5hIC4vbWlzYy8kJGkucmVmID4+IC4vbWlzYy8kJGkuZGVmIiBcCisJICYmIGNtZCAvQyAiLlxcbWlzY1xcY2hrZGVmLmNtZCAuL21pc2MvJCRpLmRlZiIpIFwKKwl8fCBleGl0IDE7IFwKKwlkb25lCisJdG91Y2ggbWFrZS5kZWZzCisKK3NhdmUuZGVmcyA6CisJZm9yIGkgaW4gJChMSUJSQVJJRVMpOyBkbyBcCisJdGVzdCAtZiAuL21pc2MvJCRpLmRlZiAmJiBjcCAuL21pc2MvJCRpLmRlZiAuL21pc2MvJCRpLnJlZjsgXAorCWRvbmUKKworY2xlYW4gXAorb3MyY2xlYW4gOjoKKwktcm0gLWYgJChETExTKSAkKExJQlMpCisKK3JlYWxjbGVhbiA6OgorCS1ybSAtZiAkKGFkZHByZWZpeCAuL21pc2MvLCAkKGFkZHN1ZmZpeCAuZGVmLCAkKExJQlJBUklFUykpKQorCisjCisjIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgbWlzYy9NYWtlZmlsZQorIworCitUSUNESVIgPSAkKERFU1RESVIpJChkYXRhZGlyKS90ZXJtaW5mbworVEFCU0VURElSID0gJChERVNURElSKSQoZGF0YWRpcikvdGFic2V0CisKKyQoVElDRElSKSA6CisJbWtkaXIgLXAgJEAKKworaW5zdGFsbCBcCitpbnN0YWxsLmVteGRhdGEgOjogJChUSUNESVIpCisJLUBybSAtZnIgJChUSUNESVIpLyoKKwllY2hvIEJ1aWxkaW5nIHRlcm1pbmZvIGRhdGFiYXNlLCBwbGVhc2Ugd2FpdC4uLgorCXNldCBURVJNSU5GTz0kKFRJQ0RJUik7IC4vcHJvZ3MvdGljIC4vbWlzYy9lbXguc3JjCisJZWNobyBJbnN0YWxsaW5nIHRoZSB0ZXJtaW5mbyBjbGVhbmVyIGFuZCB0aGUgc291cmNlcy4uLgorCWNwIC4vbWlzYy9lbXguc3JjIC4vbWlzYy9jbGVhbnRpYy5jbWQgJChUSUNESVIpCisJLi9taXNjL2NsZWFudGljLmNtZCAkKFRJQ0RJUikKKwordW5pbnN0YWxsIFwKK3VuaW5zdGFsbC5lbXhkYXRhIDo6CisJLWNkICQoVElDRElSKSAmJiBybSAtcmYgKgorCS1jZCAkKFRBQlNFVERJUikgJiYgcm0gLXJmICoKKworIworIyBUaGlzIGlzIGZvciBwcmVwYXJpbmcgYmluYXJ5IGRpc3RyaWJ1dGlvbnMKKyMKKworT1MyTkFNRT1uY3Vyc2VzLSQoTkNVUlNFU19NQUpPUikuJChOQ1VSU0VTX01JTk9SKS1lbXgKKworIworIyBGSVhNRTogdGhpcyBhc3N1bWVzIHRoYXQgd2UgY2FuIHJlcnVuIHRoZSBjb25maWd1cmUgc2NyaXB0LCBjaGFuZ2luZyBvbmx5CisjIHRoZSBpbnN0YWxsLXByZWZpeC4gIFRoYXQgbWVhbnMgd2UgY2Fubm90IHByb3ZpZGUgImludGVyZXN0aW5nIiBvcHRpb25zCisjIHdoZW4gYnVpbGRpbmcuCisjCitvczJkaXN0IDoKKwkkKE1BS0UpIC1mIE1ha2VmaWxlLm9zMiBvczJjbGVhbgorCS4vY29uZmlndXJlIC0td2l0aG91dC1kZWJ1ZyAtLXdpdGgtaW5zdGFsbC1wcmVmaXg9YHB3ZHxzZWQgLWUgJ3NAXi46QEAnYC8kKE9TMk5BTUUpCisJJChNQUtFKSAtZiBNYWtlZmlsZS5vczIgJChDRl9NRkxBR1MpIGluc3RhbGwub3MyCisJLXJtIC1mICQoT1MyTkFNRSkuemlwCisJZWNobyBOQ3Vyc2VzLSQoTkNVUlNFU19NQUpPUikuJChOQ1VSU0VTX01JTk9SKS0kKE5DVVJTRVNfUEFUQ0gpIGZvciBlbXggPiAkKE9TMk5BTUUpL0ZJTEVfSUQuRElaCisJZWNobyBCaW5hcnkgcmVsZWFzZS4gPj4gJChPUzJOQU1FKS9GSUxFX0lELkRJWgorCXppcCAtciAkKE9TMk5BTUUpLnppcCAuLyQoT1MyTkFNRSkKKworY2xlYW4gXAorb3MyY2xlYW4gOjoKKwktcm0gLXJmICQoT1MyTkFNRSkKKwktcm0gLWYgJChPUzJOQU1FKS56aXAKKwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvTkVXUyBiL25jdXJzZXMtNS43L05FV1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0NDUwYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L05FV1MKQEAgLTAsMCArMSw4ODAzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IE5FV1MsdiAxLjEzMjAgMjAwOC8xMS8wMiAwMDo1NjoyMiB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIGxvZyBvZiBjaGFuZ2VzIHRoYXQgbmN1cnNlcyBoYXMgZ29uZSB0aHJvdWdoIHNpbmNlIFpleWQgc3RhcnRlZAord29ya2luZyB3aXRoIFBhdmVsIEN1cnRpcycgb3JpZ2luYWwgd29yaywgcGN1cnNlcywgaW4gMTk5Mi4KKworQ2hhbmdlcyB0aHJvdWdoIDEuOS45ZSBhcmUgcmVjb3JkZWQgYnkgWmV5ZCBNIEJlbi1IYWxpbS4KK0NoYW5nZXMgc2luY2UgMS45LjllIGFyZSByZWNvcmRlZCBieSBUaG9tYXMgRSBEaWNrZXkuCisKK0NvbnRyaWJ1dG9ycyBpbmNsdWRlIHRob3NlIHdobyBoYXZlIHByb3ZpZGVkIHBhdGNoZXMgKGV2ZW4gc21hbGwgb25lcyksIGFzIHdlbGwKK2FzIHRob3NlIHdobyBwcm92aWRlIHVzZWZ1bCBpbmZvcm1hdGlvbiAoYnVnIHJlcG9ydHMsIGFuYWx5c2VzKS4gIENoYW5nZXMgd2l0aAorbm8gY2l0ZWQgYXV0aG9yIGFyZSB0aGUgd29yayBvZiBUaG9tYXMgRSBEaWNrZXkgKFREKS4KKworQSBmZXcgY29udHJpYnV0b3JzIGFyZSBnaXZlbiBpbiB0aGlzIGZpbGUgYnkgdGhlaXIgaW5pdGlhbHMuCitUaGV5IGVhY2ggYWNjb3VudCBmb3Igb25lIHBlcmNlbnQgb3IgbW9yZSBvZiB0aGUgY2hhbmdlcyBzaW5jZSAxLjkuOWUuCitTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZnVsbCBuYW1lcy4KKworQ2hhbmdlcyB0aHJvdWdoIDEuOS45ZSBkaWQgbm90IGNyZWRpdCBhbGwgY29udHJpYnV0aW9uczsKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBhZGQgdGhpcyBpbmZvcm1hdGlvbi4KKworMjAwODExMDIgNS43IHJlbGVhc2UgZm9yIHVwbG9hZCB0byBmdHAuZ251Lm9yZworCisyMDA4MTAyNQorCSsgYWRkIGEgbWFucGFnZSB0byBkaXNjdXNzIG1lbW9yeSBsZWFrcy4KKwkrIGFkZCBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGZvciBRTlggKG90aGVyIHRoYW4gbGlidG9vbCwgd2hpY2gKKwkgIGRvZXMgbm90IHdvcmsgd2VsbCBvbiB0aGF0IHBsYXRmb3JtKS4KKwkrIGJ1aWxkLWZpeCBmb3IgUU5YIEMrKyBiaW5kaW5nLgorCisyMDA4MTAxOAorCSsgYnVpbGQtZml4ZXMgZm9yIE9TLzIgRU1YLgorCSsgbW9kaWZ5IGZvcm0gbGlicmFyeSB0byBhY2NlcHQgY29udHJvbCBjaGFyYWN0ZXJzIHN1Y2ggYXMgbmV3bGluZQorCSAgaW4gc2V0X2ZpZWxkX2J1ZmZlcigpLCB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggU29sYXJpcyAocmVwb3J0IGJ5CisJICBOaXQgS2hhaXIpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gYXNzdW1lIC0td2l0aG91dC1oYXNoZWQtZGIgd2hlbgorCSAgLS1kaXNhYmxlLWRhdGFiYXNlIGlzIHVzZWQuCisJKyBhZGQgIi1lIiBvcHRpb24gaW4gbmN1cnNlcy9NYWtlZmlsZS5pbiB3aGVuIGdlbmVyYXRpbmcgc291cmNlLWZpbGVzCisJICB0byBmb3JjZSBlYXJsaWVyIGV4aXQgaWYgdGhlIGJ1aWxkIGVudmlyb25tZW50IGZhaWxzIHVuZXhwZWN0ZWRseQorCSAgKHByb21wdGVkIGJ5IHBhdGNoIGJ5IEFkcmlhbiBCdW5rKS4KKwkrIGNoYW5nZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBDRl9VVEY4X0xJQiwgaW1wcm92ZWQgdmFyaWFudCBvZgorCSAgQ0ZfTElCVVRGOC4KKworMjAwODEwMTIKKwkrIGFkZCB0ZXJhdGVybTQuNTkgdGVybWluZm8gZW50cnksIHVzZSB0aGF0IGFzIHByaW1hcnkgdGVyYXRlcm0gZW50cnksIHJlbmFtZQorCSAgb3JpZ2luYWwgdG8gdGVyYXRlcm0yLjMgLVRECisJKyB1cGRhdGUgImdub21lIiB0ZXJtaW5mbyB0byAyLjIyLjMgLVRECisJKyB1cGRhdGUgImtvbnNvbGUiIHRlcm1pbmZvIHRvIDEuNi42LCBuZWVkcyB0b2RheSdzIGZpeCBmb3IgdGljIC1URAorCSsgYWRkICJhdGVybSIgdGVybWluZm8gLVRECisJKyBhZGQgImxpbnV4Mi42LjI2IiB0ZXJtaW5mbyAtVEQKKwkrIGFkZCBsb2dpYyB0byB0aWMgZm9yIGNhbmNlbGxpbmcgc3RyaW5ncyBpbiB1c2VyLWRlZmluZWQgY2FwYWJpbGl0aWVzLAorCSAgb3Zlcmxvb2tlZCB0aWwgbm93LgorCisyMDA4MTAxMQorCSsgdXBkYXRlIGh0bWwgZG9jdW1lbnRhdGlvbi4KKwkrIGFkZCAtbSBhbmQgLXMgb3B0aW9ucyB0byB0ZXN0L2tleW5hbWVzLmMgYW5kIHRlc3Qva2V5X25hbWVzLmMgdG8gdGVzdAorCSAgdGhlIG1ldGEoKSBmdW5jdGlvbiB3aXRoIGtleW5hbWUoKSBvciBrZXlfbmFtZSgpLCByZXNwZWN0aXZlbHkuCisJKyBjb3JyZWN0IHJldHVybiB2YWx1ZSBvZiBrZXlfbmFtZSgpIG9uIGVycm9yOyBpdCBpcyBudWxsLgorCSsgZG9jdW1lbnQgc29tZSB1bnJlc29sdmVkIGlzc3VlcyBmb3IgcnBhdGggYW5kIHB0aHJlYWRzIGluIFRPLURPLgorCSsgZml4IGEgbWlzc2luZyBwcm90b3R5cGUgZm9yIGlvY3RsKCkgb24gT3BlbkJTRCBpbiB0c2V0LmMKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZGlzYWJsZS10aWMtZGVwZW5kcyB0byBtYWtlIGV4cGxpY2l0IHdoZXRoZXIKKwkgIHRpYyBsaWJyYXJ5IGRlcGVuZHMgb24gbmN1cnNlcy9uY3Vyc2VzdyBsaWJyYXJ5LCBhbWVuZHMgY2hhbmdlIGZyb20KKwkgIDIwMDgwODIzIChwcm9tcHRlZCBieSBEZWJpYW4gIzUwMTQyMSkuCisKKzIwMDgxMDA0CisJKyBzb21lIGJ1aWxkLWZpeGVzIGZvciBjb25maWd1cmUgLS1kaXNhYmxlLWV4dC1mdW5jcyAoaW5jb21wbGV0ZSwgYnV0CisJICB3b3JrcyBmb3IgQy9DKysgcGFydHMpLgorCSsgaW1wcm92ZSBjb25maWd1cmUtY2hlY2sgZm9yIGF3a3MgdW5hYmxlIHRvIGhhbmRsZSBsYXJnZSBzdHJpbmdzLCBlLmcuCisJICBBSVggNS4xIHdob3NlIGF3ayBzaWxlbnRseSBnaXZlcyB1cCBvbiBsYXJnZSBwcmludGYncy4KKworMjAwODA5MjcKKwkrIGZpeCBidWlsZCBmb3IgLS13aXRoLWRtYWxsb2MgYnkgd29ya2Fyb3VuZCBmb3IgcmVkZWZpbml0aW9uIG9mCisJICBzdHJuZHVwIGJldHdlZW4gc3RyaW5nLmggYW5kIGRtYWxsb2MuaAorCSsgZml4IGJ1aWxkIGZvciAtLWRpc2FibGUtc2lnd2luY2gKKwkrIGFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBOQ1VSU0VTX0dQTV9URVJNUyB0byBhbGxvdyBvdmVycmlkZSB0byB1c2UKKwkgIEdQTSBvbiB0ZXJtaW5hbHMgb3RoZXIgdGhhbiAibGludXgiLCBldGMuCisJKyBkaXNhYmxlIEdQTSBtb3VzZSBzdXBwb3J0IHdoZW4gJFRFUk0gZG9lcyBub3QgaGFwcGVuIHRvIGNvbnRhaW4KKwkgICJsaW51eCIsIHNpbmNlIEdwbV9PcGVuKCkgbm8gbG9uZ2VyIGxpbWl0cyBpdHMgYXNzZXJ0aW9uIHRvIHRlcm1pbmFscworCSAgdGhhdCBpdCBtaWdodCBoYW5kbGUsIGUuZy4sIHdpdGhpbiAic2NyZWVuIiBpbiB4dGVybS4KKwkrIHJlc2V0IG1vdXNlIGZpbGUtZGVzY3JpcHRvciB3aGVuIHVubG9hZGluZyBHUE0gbGlicmFyeSAocmVwb3J0IGJ5CisJICBNaXJvc2xhdiBMaWNodmFyKS4KKwkrIGZpeCBidWlsZCBmb3IgLS1kaXNhYmxlLWxlYWtzIC0tZW5hYmxlLXdpZGVjIC0td2l0aC10ZXJtbGliCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyB1c2UgaW1wcm92ZWQgaW5pdGlhbGl6YXRpb24gZm9yIHNvZnQtbGFiZWwga2V5cyBpbiBBZGE5NSBzYW1wbGUgY29kZS4KKwkrIGRpc2NhcmQgaW50ZXJuYWwgc3ltYm9sIF9uY19zbGtfZm9ybWF0ICh1bnVzZWQgc2luY2UgMjAwODAxMTIpLgorCSsgbW92ZSBjYWxsIG9mIHNsa19wYWludF9pbmZvKCkgZnJvbSBfbmNfc2xrX2luaXRpYWxpemUoKSB0bworCSAgc2xrX2ludGVybl9yZWZyZXNoKCksIGltcHJvdmluZyBpbml0aWFsaXphdGlvbi4KKworMjAwODA5MjUKKwkrIGZpeCBidWcgaW4gbW91c2UgY29kZSBmb3IgR1BNIGZyb20gMjAwODA5MjAgY2hhbmdlcyAocmVwb3J0ZWQgaW4KKwkgIERlYmlhbiAjNTAwMTAzLCBhbHNvIE1pcm9zbGF2IExpY2h2YXIpLgorCisyMDA4MDkyMAorCSsgZml4IHNoYXJlZC1saWJyYXJ5IHJ1bGVzIGZvciBjeWd3aW4gd2l0aCB0aWMtIGFuZCB0aW5mby1saWJyYXJpZXMuCisJKyBmaXggYSBtZW1vcnkgbGVhayB3aGVuIGZhaWx1cmUgdG8gY29ubmVjdCB0byBHUE0uCisJKyBjb3JyZWN0IGNoZWNrIGZvciBub3RpbWVvdXQoKSBpbiB3Z2V0Y2goKSAocmVwb3J0IG9uIGxpbnV4LnJlZGhhdAorCSAgbmV3c2dyb3VwIGJ5IEZ1cnRpdmVCZXJ0aWUpLgorCSsgYWRkIGFuIGV4YW1wbGUgd2FybmluZy1zdXBwcmVzc2lvbiBmaWxlIGZvciB2YWxncmluZCwKKwkgIG1pc2MvbmN1cnNlcy5zdXBwIChiYXNlZCBvbiBleGFtcGxlIGZyb20gUmV1YmVuIFRob21hcykKKworMjAwODA5MTMKKwkrIGNoYW5nZSBzaGFyZWQtbGlicmFyeSBjb25maWd1cmF0aW9uIGZvciBPcGVuQlNELCBtYWtlIHJwYXRoIHdvcmsuCisJKyBidWlsZC1maXhlcyBmb3IgdXNpbmcgbGlidXRmOCwgZS5nLiwgb24gT3BlbkJTRCAzLjcKKworMjAwODA5MDcKKwkrIGNvcnJlY3RlZCBmaXggZm9yIC0tZW5hYmxlLXdlYWstc3ltYm9scyAocmVwb3J0IGJ5IEZyZWRlcmljIEwgVworCSAgTWV1bmllcikuCisKKzIwMDgwOTA2CisJKyBjb3JyZWN0ZWQgZ2NjIG9wdGlvbnMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgb24gSVJJWDY0LgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgYXdrIHByb2dyYW1zIHVuYWJsZSB0byBoYW5kbGUgYmlnLXN0cmluZ3MsCisJICB1c2UgdGhhdCB0byBpbXByb3ZlIHRoZSBkZWZhdWx0IGZvciAtLWVuYWJsZS1iaWctc3RyaW5ncyBvcHRpb24uCisJKyBtYWtlZmlsZS1maXhlcyBmb3IgLS1lbmFibGUtd2Vhay1zeW1ib2xzIChyZXBvcnQgYnkgRnJlZGVyaWMgTCBXCisJICBNZXVuaWVyKS4KKwkrIHVwZGF0ZSB0ZXN0L2NvbmZpZ3VyZSBzY3JpcHQuCisJKyBhZGFwdCBpZmRlZidzIGZyb20gbGlicmFyeSB0byBtYWtlIHRlc3Qvdmlldy5jIGJ1aWxkIHdoZW4gbWJydG93YygpCisJICBpcyB1bmF2YWlsYWJsZSwgZS5nLiwgd2l0aCBIUFVYIDEwLjIwLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3Igd2NzcnRvbWJzLCBtYnNydG93Y3MsIHdoaWNoIGFyZSB1c2VkIGluCisJICB0ZXN0L25jdXJzZXMuYywgYW5kIHVzZSB3Y3N0b21icywgbWJzdG93Y3MgaW5zdGVhZCBpZiBhdmFpbGFibGUsCisJICBmaXhpbmcgYnVpbGQgb2YgbmN1cnNldyBmb3IgSFBVWCAxMS4wMAorCisyMDA4MDgzMAorCSsgZml4ZXMgdG8gbWFrZSBBZGE5NSBkZW1vX3BhbmVscygpIGV4YW1wbGUgd29yay4KKwkrIG1vZGlmeSBBZGE5NSAncmFpbicgdGVzdCBwcm9ncmFtIHRvIGFjY2VwdCBrZXlib2FyZCBjb21tYW5kcyBsaWtlIHRoZQorCSAgQy12ZXJzaW9uLgorCSsgbW9kaWZ5IEJlT1Mtc3BlY2lmaWMgaWZkZWYncyB0byBidWlsZCBvbiBIYWlrdSAocGF0Y2ggYnkgU2NvdHQKKwkgIE1jY3JlYXJ5KS4KKwkrIGFkZCBjb25maWd1cmUtY2hlY2sgdG8gc2VlIGlmIHRoZSBzdGQgbmFtZXNwYWNlIGlzIGxlZ2FsIGZvciBjZXJyCisJICBhbmQgZW5kbCwgdG8gZml4IGEgYnVpbGQgaXNzdWUgd2l0aCBUcnU2NC4KKwkrIGNvbnNpc3RlbnRseSB1c2UgTkNVUlNFU19CT09MIGluIGxpYl9nZW4uYworCSsgZmlsdGVyICNsaW5lJ3MgZnJvbSBsaWJfZ2VuLmMKKwkrIGNoYW5nZSBkZWxpbWl0ZXIgaW4gTUtsaWJfZ2VuLnNoIGZyb20gJyUnIHRvICdAJywgdG8gYXZvaWQKKwkgIHN1YnN0aXR1dGlvbiBieSBJQk0geGxjIHRvICcjJyBhcyBwYXJ0IG9mIGl0cyBleHRlbnNpb25zIHRvIGRpZ3JhcGhzLgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiBmcm9tCisJCWh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL2NvbmZpZworCSAgKGNhdmVhdCAtIGl0cyBtYWludGFpbmVyIHJlbW92ZWQgc3VwcG9ydCBmb3Igb2xkZXIgTGludXggc3lzdGVtcykuCisKKzIwMDgwODIzCisJKyBtb2RpZnkgY29uZmlndXJlIGNoZWNrIGZvciBwdGhyZWFkIGxpYnJhcnkgdG8gd29yayB3aXRoIE9TRi8xIDUuMSwKKwkgIHdoaWNoIHVzZXMgI2RlZmluZSdzIHRvIGFzc29jaWF0ZSBpdHMgaGVhZGVyIGFuZCBsaWJyYXJ5LgorCSsgdXNlIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoKSBmb3IgaW5pdGlhbGl6aW5nIHB0aHJlYWRfbXV0ZXhhdHRyX3QsCisJICBtYWtlcyB0aHJlYWRlZCBjb2RlIHdvcmsgb24gSFBVWCAxMS4yMworCSsgZml4IGEgYnVnIGluIGRlbW9fbWVudXMgaW4gZnJlZWluZyBtZW51cyAoY2Y6IDIwMDgwODA0KS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IGZvciB0aGUgY2FzZSB3aGVyZSB0aWMgbGlicmFyeSBpcyB1c2VkIChhbmQKKwkgIHBvc3NpYmx5IHJlbmFtZWQpIHRvIHJlbW92ZSBpdHMgZGVwZW5kZW5jeSB1cG9uIG5jdXJzZXMvbmN1cnNldworCSAgbGlicmFyeSAocGF0Y2ggYnkgRHIgV2VybmVyIEZpbmspLgorCSsgY29ycmVjdCBtYW5wYWdlIGZvciBtZW51X2ZvcmUoKSB3aGljaCBnYXZlIHdyb25nIGRlZmF1bHQgZm9yCisJICB0aGUgYXR0cmlidXRlIHVzZWQgdG8gZGlzcGxheSBhIHNlbGVjdGVkIGVudHJ5IChyZXBvcnQgYnkgTWlrZSBHcmFuKS4KKwkrIGFkZCBFdGVybS0yNTZjb2xvciwgRXRlcm0tODhjb2xvciBhbmQgcnh2dC04OGNvbG9yIChwcm9tcHRlZCBieQorCSAgRGViaWFuICM0OTU4MTUpIC1URAorCisyMDA4MDgxNgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtd2Vhay1zeW1ib2xzIHRvIHR1cm4gb24gbmV3IGZlYXR1cmUuCisJKyBhZGQgY29uZmlndXJlLWNoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2Ygd2VhayBzeW1ib2xzLgorCSsgbW9kaWZ5IGxpbmthZ2Ugd2l0aCBwdGhyZWFkIGxpYnJhcnkgdG8gdXNlIHdlYWsgc3ltYm9scyBzbyB0aGF0CisJICBhcHBsaWNhdGlvbnMgbm90IGxpbmtlZCB0byB0aGF0IGxpYnJhcnkgd2lsbCBub3QgdXNlIHRoZSBtdXRleGVzLAorCSAgZXRjLiAgVGhpcyByZWxpZXMgb24gZ2NjLCBhbmQgbWF5IGJlIHBsYXRmb3JtLXNwZWNpZmljIChwYXRjaCBieSBEcgorCSAgV2VybmVyIEZpbmspLgorCSsgYWRkIG5vdGUgdG8gSU5TVEFMTCB0byBkb2N1bWVudCBsaW1pdGF0aW9uIG9mIHJlbmFtaW5nIG9mIHRpYyBsaWJyYXJ5CisJICB1c2luZyB0aGUgLS13aXRoLXRpY2xpYiBjb25maWd1cmUgb3B0aW9uIChyZXBvcnQgYnkgRHIgV2VybmVyIEZpbmspLgorCSsgZG9jdW1lbnQgKGluIG1hbnBhZ2UpIHdoeSB0cHV0cyBkb2VzIG5vdCBkZXRlY3QgSS9PIGVycm9ycyAocHJvbXB0ZWQKKwkgIGJ5IGNvbW1lbnRzIGJ5IFNhbXVlbCBUaGliYXVsdCkuCisJKyBmaXggcmVtYWluaW5nIHdhcm5pbmdzIGZyb20gS2xvY3dvcmsgcmVwb3J0LgorCisyMDA4MDgwNAorCSsgbW9kaWZ5IF9uY19wYW5lbGhvb2soKSBkYXRhIHRvIGFjY291bnQgZm9yIGEgcGVybWFuZW50IG1lbW9yeSBsZWFrLgorCSsgZml4IG1lbW9yeSBsZWFrcyBpbiB0ZXN0L2RlbW9fbWVudXMKKwkrIGZpeCBtb3N0IHdhcm5pbmdzIGZyb20gS2xvY3dvcmsgdG9vbCAocmVwb3J0IGJ5IExhcnJ5IFpob3UpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgQ0ZfWE9QRU5fU09VUkNFIG1hY3JvIHRvIGFkZCBjYXNlIGZvcgorCSAgImRyYWdvbmZseSIgZnJvbSB4dGVybSAjMjM2IGNoYW5nZXMuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCAtLXdpdGgtaGFzaGVkLWRiIHRvIGxldCAkTElCUyBvdmVycmlkZSB0aGUKKwkgIHNlYXJjaCBmb3IgdGhlIGRiIGxpYnJhcnkgKHByb21wdGVkIGJ5IHJlcG9ydCBieSBTYW1zb24gUGllcnJlKS4KKworMjAwODA3MjYKKwkrIGJ1aWxkLWZpeGVzIGZvciBnY2MgNC4zLjEgKGNoYW5nZXMgdG8gZ25hdCAid2FybmluZ3MiLCBhbmQgQyBpbmxpbmluZworCSAgdGhyZXNob2xkcykuCisKKzIwMDgwNzEzCisJKyBidWlsZC1maXggKHJlcG9ydHMgYnkgQ2hyaXN0aWFuIEViZXJ0LCBGdW5kYSBXYW5nKS4KKworMjAwODA3MTIKKwkrIGNvbXBpbGVyLXdhcm5pbmcgZml4ZXMgZm9yIFNvbGFyaXMuCisKKzIwMDgwNzA1CisJKyB1c2UgTkNVUlNFU19NT1VTRV9NQVNLKCkgaW4gZGVmaW5pdGlvbiBvZiBCVVRUT05fUkVMRUFTRSgpLCBldGMuLCB0bworCSAgbWFrZSB0aG9zZSB3b3JrIHByb3Blcmx5IHdpdGggdGhlICItLWVuYWJsZS1leHQtbW91c2UiIGNvbmZpZ3VyYXRpb24KKwkgIChjZjogMjAwNTAyMDUpLgorCSsgaW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIGJ1aWxkLWNjIG9wdGlvbnMgaW4gSU5TVEFMTC4KKwkrIHdvcmstYXJvdW5kIGEgYnVnIGluIGdjYyA0LjIuNCBvbiBBSVgsIHdoaWNoIGRvZXMgbm90IHBhc3MgdGhlCisJICAtc3RhdGljLy1keW5hbWljIGZsYWdzIHByb3Blcmx5IHRvIGxpbmtlciwgY2F1c2luZyB0ZXN0L2JzIHRvCisJICBub3QgbGluay4KKworMjAwODA2MjgKKwkrIGNvcnJlY3Qgc29tZSBpZmRlZidzIG5lZWRlZCBmb3IgdGhlIGJyb2tlbi1saW5rZXIgY29uZmlndXJhdGlvbi4KKwkrIG1ha2UgZGVidWdnaW5nIGxpYnJhcnkncyAkQkFVRFJBVEUgZmVhdHVyZSB3b3JrIGZvciB0ZXJtY2FwCisJICBpbnRlcmZhY2UuCisJKyBtYWtlICROQ1VSU0VTX05PX1BBRERJTkcgZmVhdHVyZSB3b3JrIGZvciB0ZXJtY2FwIGludGVyZmFjZSAocHJvbXB0ZWQKKwkgIGJ5IGNvbW1lbnQgb24gRnJlZUJTRCBtYWlsaW5nIGxpc3QpLgorCSsgYWRkIHNjcmVlbi5tbHRlcm0gdGVybWluZm8gZW50cnkgLVRECisJKyBpbXByb3ZlIG1sdGVybSBhbmQgbWx0ZXJtK3BjZmtleXMgdGVybWluZm8gZW50cmllcyAtVEQKKworMjAwODA2MjEKKwkrIHJlZ2VuZXJhdGVkIGh0bWwgZG9jdW1lbnRhdGlvbi4KKwkrIGV4cGFuZCBtYW5wYWdlIGRlc2NyaXB0aW9uIG9mIHBhcmFtZXRlcnMgZm9yIGZvcm1fZHJpdmVyKCkgYW5kCisJICBtZW51X2RyaXZlcigpIChwcm9tcHRlZCBieSBkaXNjdXNzaW9uIHdpdGggQWRhbSBTcHJhZ2cpLgorCSsgYWRkIG51bGwtcG9pbnRlciBjaGVja3MgZm9yIGN1cl90ZXJtIGluIGJhdWRyYXRlKCkgYW5kCisJICBkZWZfc2hlbGxfbW9kZSgpLCBkZWZfcHJvZ19tb2RlKCkKKwkrIGZpeCBzb21lIG1lbW9yeSBsZWFrcyBpbiBkZWxzY3JlZW4oKSBhbmQgd2lkZSBhY3MuCisKKzIwMDgwNjE0CisJKyBtb2RpZnkgdGVzdC9kaXR0by5jIHRvIGlsbHVzdHJhdGUgbXVsdGktdGhyZWFkZWQgdXNlX3NjcmVlbigpLgorCSsgY2hhbmdlIENDX1NIQVJFRF9PUFRTIGZyb20gLUtQSUMgdG8gLXhjb2RlPXBpYzMyIGZvciBTb2xhcmlzLgorCSsgYWRkICItc2hhcmVkIiBvcHRpb24gdG8gTUtfU0hBUkVEX0xJQiBmb3IgZ2NjIG9uIFNvbGFyaXMgKHJlcG9ydAorCSAgYnkgUG9vciBZb3JpY2spLgorCisyMDA4MDYwNworCSsgZmluaXNoIGNoYW5nZXMgdG8gd2dldGNoKCksIG1ha2luZyBpdCBzd2l0Y2ggYXMgbmVlZGVkIHRvIHRoZQorCSAgd2luZG93J3MgYWN0dWFsIHNjcmVlbiB3aGVuIGNhbGxpbmcgd3JlZnJlc2goKSBhbmQgd2dldG5zdHIoKS4gIFRoYXQKKwkgIGFsbG93cyB3Z2V0Y2goKSB0byBnZXQgdXNlZCBjb25jdXJyZW50bHkgaW4gZGlmZmVyZW50IHRocmVhZHMgd2l0aAorCSAgc29tZSBtaW5vciByZXN0cmljdGlvbnMsIGUuZy4sIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGRlbGV0ZSBhCisJICB3aW5kb3cgd2hpY2ggaXMgYmVpbmcgdXNlZCBpbiBhIHdnZXRjaCgpLgorCSsgc2ltcGxpZnkgbXV0ZXgncywgY29tYmluaW5nIHRoZSB3aW5kb3ctIGFuZCBzY3JlZW4tbXV0ZXgncy4KKworMjAwODA1MzEKKwkrIG1vZGlmeSB3Z2V0Y2goKSB0byB1c2UgdGhlIHNjcmVlbiB3aGljaCBjb3JyZXNwb25kcyB0byBpdHMgd2luZG93CisJICBwYXJhbWV0ZXIgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBTUDsgc29tZSBkZXBlbmRlbnQgZnVuY3Rpb25zIHN0aWxsCisJICB1c2UgU1AgaW50ZXJuYWxseS4KKwkrIGZhY3RvciBvdXQgbW9zdCB1c2Ugb2YgU1AgaW4gbGliX21vdXNlLmMsIHVzaW5nIHBhcmFtZXRlci4KKwkrIGFkZCBpbnRlcm5hbCBfbmNfa2V5bmFtZSgpLCByZXBsYWNpbmcga2V5bmFtZSgpIHRvIGFzc29jaWF0ZSB3aXRoIGEKKwkgIHBhcnRpY3VsYXIgU0NSRUVOIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgU1AuCisJKyBhZGQgaW50ZXJuYWwgX25jX3VuY3RybCgpLCByZXBsYWNpbmcgdW5jdHJsKCkgdG8gYXNzb2NpYXRlIHdpdGggYQorCSAgcGFydGljdWxhciBTQ1JFRU4gcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCBTUC4KKwkrIGFkZCBpbnRlcm5hbCBfbmNfdHJhY2Vtb3VzZSgpLCByZXBsYWNpbmcgX3RyYWNlbW91c2UoKSB0byBlbGltaW5hdGUKKwkgIGl0cyBhc3NvY2lhdGVkIGdsb2JhbCBidWZmZXIgX25jX2dsb2JhbHMudHJhY2Vtc2VfYnVmIG5vdyBpbiBTQ1JFRU4uCisJKyBhZGQgaW50ZXJuYWwgX25jX3RyYWNlY2hhcigpLCByZXBsYWNpbmcgX3RyYWNlY2hhcigpIHRvIHVzZSBTQ1JFRU4gaW4KKwkgIHByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBfbmNfZ2xvYmFscy50cmFjZWNocl9idWYgYnVmZmVyLgorCisyMDA4MDUyNAorCSsgbW9kaWZ5IF9uY19rZXlwYWQoKSB0byBtYWtlIGl0IHN3aXRjaCB0ZW1wb3JhcmlseSBhcyBuZWVkZWQgdG8gdGhlCisJICBzY3JlZW4gd2hpY2ggbXVzdCBiZSB1cGRhdGVkLgorCSsgd3JhcCBjdXJfdGVybSB2YXJpYWJsZSB0byBoZWxwIG1ha2UgX25jX2tleW1hcCgpIHRocmVhZC1zYWZlLCBhbmQKKwkgIGFsd2F5cyBzZXQgdGhlIHNjcmVlbidzIGNvcHkgb2YgdGhpcyB2YXJpYWJsZSBpbiBzZXRfY3VydGVybSgpLgorCSsgcmVzdG9yZSBjdXJzX3NldCgpIHN0YXRlIGFmdGVyIGVuZHdpbigpL3JlZnJlc2goKSAocmVwb3J0L3BhdGNoCisJICBNaXJvc2xhdiBMaWNodmFyKQorCisyMDA4MDUxNworCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gbm90ZSB0aGF0IC0tZW5hYmxlLWV4dC1jb2xvcnMgYW5kCisJICAtLWVuYWJsZS1leHQtbW91c2UgYXJlIG5vdCBleHBlcmltZW50YWwsIGJ1dCBleHRlbnNpb25zIGZyb20KKwkgIHRoZSBuY3Vyc2VzIEFCSSA1LgorCSsgY29ycmVjdGVkIG1hbnBhZ2UgZGVzY3JpcHRpb24gb2Ygc2V0Y2NoYXIoKSAoZGlzY3Vzc2lvbiB3aXRoCisJICBFbWFudWVsZSBHaWFxdWludGEpLgorCSsgZml4IGZvciBhZGRpbmcgYSBub24tc3BhY2luZyBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKwkgIChyZXBvcnQvcGF0Y2ggYnkgTWlyb3NsYXYgTGljaHZhcikuCisKKzIwMDgwNTAzCisJKyBtb2RpZnkgc2NyZWVuLiogdGVybWluZm8gZW50cmllcyB1c2luZyBuZXcgc2NyZWVuK2ZrZXlzIHRvIGZpeAorCSAgb3ZlcnJpZGRlbiBrZXlzIGluIHNjcmVlbi5yeHZ0IChEZWJpYW4gIzQ3ODA5NCkgLVRECisJKyBtb2RpZnkgaW50ZXJuYWwgaW50ZXJmYWNlcyB0byByZWR1Y2Ugd2dldGNoKCkncyBkZXBlbmRlbmN5IG9uIHRoZQorCSAgZ2xvYmFsIFNQLgorCSsgc2ltcGxpZnkgc29tZSBsb29wcyB3aXRoIG1hY3JvcyBlYWNoX3NjcmVlbigpLCBlYWNoX3dpbmRvdygpIGFuZAorCSAgZWFjaF9yaXBvZmYoKS4KKworMjAwODA0MjYKKwkrIGNvbnRpbnVlIG1vZGlmeWluZyB0ZXN0L2RpdHRvLmMgdG93YXJkIG1ha2luZyBpdCBkZW1vbnN0cmF0ZQorCSAgbXVsdGl0aHJlYWRlZCB1c2Vfc2NyZWVuKCksIHVzaW5nIGZpZm9zIHRvIHBhc3MgZGF0YSBiZXR3ZWVuIHNjcmVlbnMuCisJKyBmaXggdHlwbyBpbiBmb3JtLjN4IChyZXBvcnQgYnkgTWlrZSBHcmFuKS4KKworMjAwODA0MTkKKwkrIGFkZCBzY3JlZW4ucnh2dCB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIG1vZGlmeSB0aWMgLWYgb3B0aW9uIHRvIGZvcm1hdCBzcGFjZXMgYXMgXHMgdG8gcHJldmVudCB0aGVtIGZyb20KKwkgIGJlaW5nIGxvc3Qgd2hlbiB0aGF0IGlzIHJlYWQgYmFjayBpbiB1bmZvcm1hdHRlZCBzdHJpbmdzLgorCSsgaW1wcm92ZSB0ZXN0L2RpdHRvLmMsIHVzaW5nIGEgInRhbGsiLXN0eWxlIGxheW91dC4KKworMjAwODA0MTIKKwkrIGNoYW5nZSB0ZXN0L2RpdHRvLmMgdG8gdXNlIG9wZW5wdHkoKSBhbmQgeHRlcm0uCisJKyBhZGQgbG9ja3MgZm9yIGNvcHl3aW4oKSwgZHVwd2luKCksIG92ZXJsYXAoKSwgb3ZlcmxheSgpIG9uIHRoZWlyCisJICB3aW5kb3cgcGFyYW1ldGVycy4KKwkrIGFkZCBsb2NrcyBmb3IgaW5pdHNjcigpIGFuZCBuZXd0ZXJtKCkgb24gdXBkYXRlcyB0byB0aGUgU0NSRUVOCisJICBwb2ludGVyLgorCSsgZmluaXNoIHRhYmxlIGluIGN1cnNfdGhyZWFkLjN4IG1hbnBhZ2UuCisKKzIwMDgwNDA1CisJKyBiZWdpbiB0YWJsZSBpbiBjdXJzX3RocmVhZC4zeCBtYW5wYWdlIGRlc2NyaWJpbmcgdGhlIHNjb3BlIG9mIGRhdGEKKwkgIHVzZWQgYnkgZWFjaCBmdW5jdGlvbiAob3Igc3ltYm9sKSBmb3IgdGhyZWFkaW5nIGFuYWx5c2lzLgorCSsgYWRkIG51bGwtcG9pbnRlciBjaGVja3MgdG8gc2V0c3l4KCkgYW5kIGdldHN5eCgpIChwcm9tcHRlZCBieQorCSAgZGlzY3Vzc2lvbiBieSBNYXJ0aW4gdi4gTG93aXMgYW5kIEplcm9lbiBSdWlncm9rIHZhbiBkZXIgV2VydmVuIG9uCisJICBweXRob24tZGV2MiBtYWlsaW5nIGxpc3QpLgorCisyMDA4MDMyOQorCSsgYWRkIG51bGwtcG9pbnRlciBjaGVja3MgaW4gc2V0X3Rlcm0oKSBhbmQgZGVsc2NyZWVuKCkuCisJKyBtb3ZlIF9uY193aW5kb3dzIGludG8gX25jX2dsb2JhbHMsIHNpbmNlIHdpbmRvd3MgY2FuIGJlIHBhZHMsIHdoaWNoCisJICBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NyZWVuLgorCSsgY2hhbmdlIHVzZV9zY3JlZW4oKSB0byBwYXNzIHRoZSBTQ1JFRU4qIHBhcmFtZXRlciByYXRoZXIgdGhhbgorCSAgc3Rkc2NyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKwkrIGZvcmNlIGxpYnRvb2wgdG8gdXNlIHRhZyBmb3IgJ0NDJyBpbiBjYXNlIGl0IGRvZXMgbm90IGRldGVjdCB0aGlzLAorCSAgZS5nLiwgb24gYWl4IHdoZW4gdXNpbmcgQ0M9cG93ZXJwYy1pYm0tYWl4NS4zLjAuMC1nY2MKKwkgIChyZXBvcnQvcGF0Y2ggYnkgTWljaGFlbCBIYXViZW53YWxsbmVyKS4KKwkrIG92ZXJyaWRlIE9CSkVYVCB0byAibG8iIHdoZW4gYnVpbGRpbmcgd2l0aCBsaWJ0b29sLCB0byB3b3JrIG9uCisJICBwbGF0Zm9ybXMgc3VjaCBhcyBBSVggd2hlcmUgbGlidG9vbCBtYXkgdXNlIGEgZGlmZmVyZW50IHN1ZmZpeCBmb3IKKwkgIHRoZSBvYmplY3QgZmlsZXMgdGhhbiAiLm8iIChyZXBvcnQvcGF0Y2ggYnkgTWljaGFlbCBIYXViZW53YWxsbmVyKS4KKwkrIGFkZCBjb25maWd1cmUgLS13aXRoLXB0aHJlYWQgb3B0aW9uLCBmb3IgYnVpbGRpbmcgd2l0aCB0aGUgUE9TSVgKKwkgIHRocmVhZCBsaWJyYXJ5LgorCisyMDA4MDMyMgorCSsgZmlsbCBpbiBleHRlbmRlZC1jb2xvciBwYWlyIHR3byBtb3JlIHBsYWNlcyBpbiB3Ymtncm5kc2V0KCkgYW5kCisJICB3YWRkY2hfbm9zeW5jKCkgKHByb21wdGVkIGJ5IFNlZGVubydzIHBhdGNoKS4KKwkrIGZpbGwgaW4gZXh0ZW5kZWQtY29sb3IgcGFpciBpbiBfbmNfYnVpbGRfd2NoKCkgdG8gbWFrZSBjb2xvcnMgd29yaworCSAgZm9yIHdpZGUtY2hhcmFjdGVycyB1c2luZyBleHRlbmRlZC1jb2xvcnMgKHBhdGNoIGJ5IEFsZWphbmRybyBSCisJICBTZWRlbm8pLgorCSsgYWRkIHgvWCB0b2dnbGVzIHRvIG5jdXJzZXMuYyBDIGNvbG9yIHRlc3QgdG8gdGVzdC9kZW1vCisJICB3aWRlLWNoYXJhY3RlcnMgd2l0aCBleHRlbmRlZC1jb2xvcnMuCisJKyBhZGQgYS9BIHRvZ2dsZXMgdG8gbmN1cnNlcy5jIGMvQyBjb2xvciB0ZXN0cy4KKwkrIG1vZGlmeSB0ZXN0L2RpdHRvLmMgdG8gdXNlIHVzZV9zY3JlZW4oKS4KKwkrIGZpbmlzaCBtb2RpZnlpbmcgdGVzdC9yYWluLmMgdG8gZGVtb25zdHJhdGUgdGhyZWFkcy4KKworMjAwODAzMDgKKwkrIHN0YXJ0IG1vZGlmeWluZyB0ZXN0L3JhaW4uYyBmb3IgdGhyZWFkaW5nIGRlbW8uCisJKyBtb2RpZnkgdGVzdC9uY3Vyc2VzLmMgdG8gbWFrZSAnZicgdGVzdCBhY2NlcHQgdGhlIGYvRi9iL0YvPC8+IHRvZ2dsZXMKKwkgIHRoYXQgdGhlICdGJyBhY2NlcHRzLgorCSsgbW9kaWZ5IHRlc3Qvd29ybS5jIHRvIHNob3cgdHJhaWwgaW4gcmV2ZXJzZS12aWRlbyB3aGVuIG90aGVyIHRocmVhZHMKKwkgIGFyZSB3b3JraW5nIGNvbmN1cnJlbnRseS4KKwkrIGZpeCBhIGRlYWRsb2NrIGZyb20gaW1wcm9wZXIgbmVzdGluZyBvZiBtdXRleGVzIGZvciB3aW5kb3dsaXN0IGFuZAorCSAgd2luZG93LgorCisyMDA4MDMwMQorCSsgZml4ZXMgZnJvbSAyMDA4MDIyMyByZXNvbHZlZCBpc3N1ZSB3aXRoIG11dGV4ZXM7IGNoYW5nZSB0byB1c2UKKwkgIHJlY3Vyc2l2ZSBtdXRleGVzIHRvIGZpeCBtZW1vcnkgbGVhayBpbiBkZWx3aW4oKSBhcyBjYWxsZWQgZnJvbQorCSAgX25jX2ZyZWVfYW5kX2V4aXQoKS4KKworMjAwODAyMjMKKwkrIGZpeCBhIHNpemUtZGlmZmVyZW5jZSBpbiBfbmNfZ2xvYmFscyB3aGljaCBjYXVzZWQgaGFuZ2luZyBvZiBtdXRleAorCSAgbG9jay91bmxvY2sgd2hlbiB0ZXJtbGliIHdhcyBidWlsdCBzZXBhcmF0ZWx5LgorCisyMDA4MDIxNgorCSsgYXZvaWQgdXNpbmcgbmFub3NsZWVwKCkgaW4gdGhyZWFkZWQgY29uZmlndXJhdGlvbiBzaW5jZSB0aGF0IG9mdGVuCisJICBpcyBpbXBsZW1lbnRlZCB0byBzdXNwZW5kIHRoZSBlbnRpcmUgcHJvY2Vzcy4KKworMjAwODAyMDkKKwkrIHVwZGF0ZSB0ZXN0IHByb2dyYW1zIHRvIGJ1aWxkL3dvcmsgd2l0aCB2YXJpb3VzIFVOSVggY3Vyc2VzIGZvcgorCSAgY29tcGFyaXNvbnMuICBUaGlzIHdhcyB0byByZWludmVzdGlnYXRlIHN0YXRlbWVudCBpbiBYL09wZW4gY3Vyc2VzCisJICB0aGF0IGluc25zdHIgYW5kIHdpbnNuc3RyIHBlcmZvcm0gd3JhcHBpbmcuICBOb25lIG9mIHRoZSBVbml4LWJyYW5kZWQKKwkgIGltcGxlbWVudGF0aW9ucyBkbyB0aGlzLCBhcyBub3RlZCBpbiBtYW5wYWdlIChjZjogMjAwNDAyMjgpLgorCisyMDA4MDIwMworCSsgbW9kaWZ5IF9uY19zZXR1cHNjcmVlbigpIHRvIHNldCB0aGUgbGVnYWN5LWNvZGluZyB2YWx1ZSB0aGUgc2FtZQorCSAgZm9yIGJvdGggbmFycm93L3dpZGUgbW9kZWxzLiAgSXQgaGFkIGJlZW4gc2V0IG9ubHkgZm9yIHdpZGUgbW9kZWwsCisJICBidXQgaXMgbmVlZGVkIHRvIG1ha2UgdW5jdHJsKCkgd29yayB3aXRoIGxvY2FsZSBpbiB0aGUgbmFycm93IG1vZGVsLgorCSsgaW1wcm92ZSB3YWRkY2goKSBhbmQgd2luc2NoKCkgaGFuZGxpbmcgb2YgRUlMU0VRIGZyb20gbWJydG93YygpIGJ5CisJICB1c2luZyB1bmN0cmwoKSB0byBkaXNwbGF5IGlsbGVnYWwgYnl0ZXMgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGFwcGVuZAorCSAgZnVydGhlciBieXRlcyB0byBtYWtlIHVwIGEgdmFsaWQgc2VxdWVuY2UgKHJlcG9ydGVkIGJ5IEFuZHJleSBBCisJICBDaGVybm92KS4KKwkrIG1vZGlmeSB1bmN0cmwoKSB0byBjaGVjayBjb2RlcyBpbiAxMjgtMjU1IHJhbmdlIHZlcnN1cyBpc3ByaW50KCkuCisJICBJZiB0aGV5IGFyZSBub3QgcHJpbnRhYmxlLCBhbmQgbG9jYWxlIHdhcyBzZXQsIHVzZSBhICJNLSIgb3IgIn4iCisJICBzZXF1ZW5jZS4KKworMjAwODAxMjYKKwkrIGltcHJvdmUgdGhyZWFkaW5nIGluIHRlc3Qvd29ybS5jICh3cmFwIHJlZnJlc2ggY2FsbHMsIGFuZCBLRVlfUkVTSVpFCisJICBoYW5kbGluZykuICBOb3cgaXQgaGFuZ3MgaW4gbmFwbXMoKSwgbm8gbWF0dGVyIHdoZXRoZXIgbmFub3NsZWVwKCkKKwkgIG9yIHBvbGwoKSBvciBzZWxlY3QoKSBhcmUgdXNlZCBvbiBMaW51eC4KKworMjAwODAxMTkKKwkrIGZpeGVzIHRvIGJ1aWxkIHdpdGggLS1kaXNhYmxlLWV4dC1mdW5jcworCSsgYWRkIG1hbnBhZ2UgZm9yIHVzZV93aW5kb3cgYW5kIHVzZV9zY3JlZW4uCisJKyBhZGQgc2V0X3RhYnNpemUoKSBhbmQgc2V0X2VzY2RlbGF5KCkgZnVuY3Rpb25zLgorCisyMDA4MDExMgorCSsgcmVtb3ZlIHJlY3Vyc2l2ZS1tdXRleCBkZWZpbml0aW9ucywgZmluaXNoIHRocmVhZGluZyBkZW1vIGZvciB3b3JtLmMKKwkrIHJlbW92ZSBhIHJlZHVuZGFudCBhZGp1c3RtZW50IG9mIGxpbmVzIGluIHJlc2l6ZXRlcm0uYydzCisJICBhZGp1c3Rfd2luZG93KCkgd2hpY2ggY2F1c2VkIG9jY2FzaW9uYWwgbWlzYWRqdXN0bWVudCBvZiBzdGRzY3Igd2hlbgorCSAgc29mdGtleXMgd2VyZSB1c2VkLgorCisyMDA4MDEwNQorCSsgc2V2ZXJhbCBpbXByb3ZlbWVudHMgdG8gdGVybWluZm8gZW50cmllcyBiYXNlZCBvbiB4dGVybSAjMjMwIC1URAorCSsgbW9kaWZ5IE1LbGliX2dlbi5zaCB0byBoYW5kbGUga2V5bmFtZS9rZXlfbmFtZSBwcm90b3R5cGVzLCBzbyB0aGUKKwkgICJsaW5rX3Rlc3QiIGJ1aWxkcyBwcm9wZXJseS4KKwkrIGZpeCBmb3IgdG9lIGNvbW1hbmQtbGluZSBvcHRpb25zIC11Ly1VIHRvIGVuc3VyZSBmaWxlbmFtZSBpcyBnaXZlbi4KKwkrIGZpeCBhbGxvY2F0aW9uLXNpemUgZm9yIGNvbW1hbmQtbGluZSBwYXJzaW5nIGluIGluZm9jbXAgZnJvbSAyMDA3MDcyOAorCSAgKHJlcG9ydCBieSBNaXJvc2xhdiBMaWNodmFyKQorCSsgaW1wcm92ZSByZXNpemV0ZXJtKCkgYnkgbW92aW5nIHJpcHBlZC1vZmYgbGluZXMsIGFuZCByZXBhaW50aW5nIHRoZQorCSAgc29mdC1rZXlzIChyZXBvcnQgYnkgS2F0YXJpbmEgTWFjaGFsa292YSkKKwkrIGFkZCBjbGFyaWZpY2F0aW9uIGluIHdjbGVhcidzIG1hbnBhZ2Ugbm90aW5nIHRoYXQgdGhlIHNjcmVlbiB3aWxsIGJlCisJICBjbGVhcmVkIGV2ZW4gaWYgYSBzdWJ3aW5kb3cgaXMgY2xlYXJlZCAocHJvbXB0ZWQgYnkgQ2hyaXN0ZXIgRW5mb3JzCisJICBxdWVzdGlvbikuCisJKyBjaGFuZ2UgdGVzdC9uY3Vyc2VzLmMgc29mdC1rZXkgdGVzdHMgdG8gd29yayB3aXRoIEtFWV9SRVNJWkUuCisKKzIwMDcxMjIyCisJKyBjb250aW51ZSBpbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgdGhyZWFkaW5nIGRlbW8gYnkgYWRkaW5nIG11dGV4CisJICBmb3IgZGVsd2luKCkuCisKKzIwMDcxMjE1CisJKyBhZGQgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gQysrIGJpbmRpbmcgd2hpY2ggd3JhcCBDIGZ1bmN0aW9ucyB0aGF0CisJICBwYXNzIGEgV0lORE9XKiBwYXJhbWV0ZXIgKHJlcXVlc3QgYnkgQ2hyaXMgTGVlKS4KKworMjAwNzEyMDEKKwkrIGFkZCBub3RlIGFib3V0IGNvbmZpZ3VyZSBvcHRpb25zIG5lZWRlZCBmb3IgQmVya2VsZXkgZGF0YWJhc2UgdG8gdGhlCisJICBJTlNUQUxMIGZpbGUuCisJKyBpbXByb3ZlIGNoZWNrcyBmb3IgdmVyc2lvbiBvZiBCZXJrZWxleSBkYXRhYmFzZSBsaWJyYXJpZXMuCisJKyBhbWVuZCBmaXggZm9yIHJwYXRoIHRvIG5vdCBtb2RpZnkgTERGTEFHUyBpZiB0aGUgcGxhdGZvcm0gaGFzIG5vCisJICBhcHBsaWNhYmxlIHRyYW5zZm9ybWF0aW9uIChyZXBvcnQgYnkgQ2hyaXN0aWFuIEViZXJ0LCBjZjogMjAwNzExMjQpLgorCisyMDA3MTEyNAorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWhhc2hlZC1kYiB0byBhY2NlcHQgYSBwYXJhbWV0ZXIgd2hpY2gKKwkgIGlzIHRoZSBpbnN0YWxsLXByZWZpeCBvZiBhIGdpdmVuIEJlcmtlbGV5IERhdGFiYXNlIChwcm9tcHRlZCBieQorCSAgcGllcnJlNGQyIGNvbW1lbnRzKS4KKwkrIHJld3JpdGUgd3JhcHBlciBmb3Igd2NydG9tYigpLCBtYWtpbmcgaXQgd29yayBvbiBTb2xhcmlzLiAgVGhpcyBpcworCSAgdXNlZCBpbiB0aGUgZm9ybSBsaWJyYXJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgbmVlZGVkCisJICBieSBmaWVsZF9idWZmZXIgKHJlcG9ydCBieSBBbGZyZWQgRnVuZykuCisJKyByZW1vdmUgdW5uZWVkZWQgd2luZG93LXBhcmFtZXRlciBmcm9tIEMrKyBiaW5kaW5nIGZvciB3cmVzaXplIChyZXBvcnQKKwkgIGJ5IENocmlzIExlZSkuCisKKzIwMDcxMTE3CisJKyBtb2RpZnkgdGhlIHN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IG1peGVkLWNhc2UgdG8KKwkgIGdlbmVyYXRlIDItY2hhcmFjdGVyIChoZXhhZGVjaW1hbCkgY29kZXMgZm9yIHRoZSBsb3dlci1sZXZlbCBvZiB0aGUKKwkgIGZpbGVzeXN0ZW0gdGVybWluZm8gZGF0YWJhc2UgKHJlcXVlc3QgYnkgTWljaGFpbCBWaWRpYXNzb3YpLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtbWl4ZWQtY2FzZSwgdG8gYWxsb3cgb3ZlcnJpZGluZyB0aGUKKwkgIGNvbmZpZ3VyZSBzY3JpcHQncyBjaGVjayBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBtaXhlZC1jYXNlCisJICBmaWxlbmFtZXMuCisJKyBhZGQgd3Jlc2l6ZSgpIHRvIEMrKyBiaW5kaW5nIChyZXF1ZXN0IGJ5IENocmlzIExlZSkuCisJKyBkZWZpbmUgTkNVUlNFU19FWFRfRlVOQ1MgYW5kIE5DVVJTRVNfRVhUX0NPTE9SUyBpbiBjdXJzZXMuaCB0byBtYWtlCisJICBpdCBzaW1wbGVyIHRvIHRlbGwgaWYgdGhlIGV4dGVuZGVkIGZ1bmN0aW9ucyBhbmQvb3IgY29sb3JzIGFyZQorCSAgZGVjbGFyZWQuCisKKzIwMDcxMTAzCisJKyB1cGRhdGUgbWVtb3J5LWxlYWsgY2hlY2tzIGZvciBjaGFuZ2VzIHRvIG5hbWVzLmMgYW5kIGNvZGVzLmMKKwkrIGNvcnJlY3QgYWNzYyBzdHJpbmdzIGluIGgxOSwgejEwMCAocGF0Y2ggYnkgQmVuamFtaW4gQyBXIFNpdHRsZXIpLgorCisyMDA3MTAyMAorCSsgY29udGludWUgaW1wbGVtZW50aW5nIHN1cHBvcnQgZm9yIHRocmVhZGluZyBkZW1vIGJ5IGFkZGluZyBtdXRleAorCSAgZm9yIHVzZV93aW5kb3coKS4KKwkrIGFkZCBtcnh2dCB0ZXJtaW5mbyBlbnRyeSwgYWRkL2ZpeCB4dGVybSBidWlsZGluZyBibG9ja3MgZm9yIG1vZGlmaWVkCisJICBjdXJzb3Iga2V5cyAtVEQKKwkrIGNvbXBpbGUgd2l0aCBGcmVlQlNEICJjb250ZW1wb3JhcnkiIFRUWSBpbnRlcmZhY2UgKHBhdGNoIGJ5CisJICBSb25nLUVuIEZhbikuCisKKzIwMDcxMDEzCisJKyBtb2RpZnkgbWFrZWZpbGUgcnVsZXMgdG8gYWxsb3cgY2xlYXIsIHRwdXQgYW5kIHRzZXQgdG8gYmUgYnVpbHQKKwkgIHdpdGhvdXQgbGlidGljLiAgVGhlIG90aGVyIHByb2dyYW1zIChpbmZvY21wLCB0aWMgYW5kIHRvZSkgcmVseSBvbgorCSAgdGhhdCBsaWJyYXJ5LgorCSsgYWRkL21vZGlmeSBudWxsLXBvaW50ZXIgY2hlY2tzIGluIHNldmVyYWwgZnVuY3Rpb25zIGZvciBTUCBhbmQvb3IKKwkgIHRoZSBXSU5ET1cqIHBhcmFtZXRlciAocmVwb3J0IGJ5IFRob3JiZW4gS3J1ZWdlcikuCisJKyBmaXhlcyBmb3IgZmllbGRfYnVmZmVyKCkgaW4gZm9ybXcgbGlicmFyeSAoc2VlIFJlZGhhdCBCdWd6aWxsYQorCSAgIzMxMDA3MSwgcGF0Y2hlcyBieSBNaXJvc2xhdiBMaWNodmFyKS4KKwkrIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgTkNVUlNFU19DSEFSX0VRIGNvZGUgKHBhdGNoIGJ5IE1pcm9zbGF2CisJICBMaWNodmFyKS4KKwkrIHVwZGF0ZS9pbXByb3ZlIG1sdGVybSBhbmQgcnh2dCB0ZXJtaW5mbyBlbnRyaWVzLCBlLmcuLCBmb3IKKwkgIHRoZSBtb2RpZmllZCBjdXJzb3ItIGFuZCBrZXlwYWQta2V5cyAtVEQKKworMjAwNzEwMDYKKwkrIGFkZCBjb2RlIHRvIGN1cnNlcy5wcml2LmggaWZkZWYnZCB3aXRoIE5DVVJTRVNfQ0hBUl9FUSwgd2hpY2gKKwkgIGNoYW5nZXMgdGhlIENoYXJFcSgpIG1hY3JvIHRvIGFuIGlubGluZSBmdW5jdGlvbiB0byBhbGxvdyBjb21wYXJpbmcKKwkgIGNjaGFyX3Qgc3RydWN0J3Mgd2l0aG91dCBjb21wYXJpbmcgZ2FwcyBpbiBhIHBvc3NpYmx5IHVucGFja2VkCisJICBtZW1vcnkgbGF5b3V0IChyZXBvcnQgYnkgTWlyb3NsYXYgTGljaHZhcikuCisKKzIwMDcwOTI5CisJKyBhZGQgbmV3IGZ1bmN0aW9ucyB0byBsaWJfdHJhY2UuYyB0byBzZXR1cCBtdXRleCdzIGZvciB0aGUgX3RyYWNlZigpCisJICBjYWxscyB3aXRoaW4gdGhlIG5jdXJzZXMgbGlicmFyeS4KKwkrIGZvciB0aGUgcmVlbnRyYW50IG1vZGVsLCBtb3ZlIF9uY190cHV0c190cmFjZSBhbmQgX25jX291dGNoYXJzIGludG8KKwkgIHRoZSBTQ1JFRU4uCisJKyBzdGFydCBtb2RpZnlpbmcgdGVzdC93b3JtLmMgdG8gcHJvdmlkZSB0aHJlYWRpbmcgZGVtbyAoaW5jb21wbGV0ZSkuCisJKyBzZXBhcmF0ZWQgaWZkZWYncyBmb3Igc29tZSBCU0QtcmVsYXRlZCBzeW1ib2xzIGluIHRzZXQuYywgdG8gbWFrZQorCSAgaXQgY29tcGlsZSBvbiBMeW54T1MgKHJlcG9ydCBieSBHcmVnIEdlbW1lcikuCisyMDA3MDkxNQorCSsgbW9kaWZ5IEFkYTk1L2dlbi9NYWtlZmlsZSB0byB1c2Ugc2hsaWIgc2NyaXB0LCB0byBzaW1wbGlmeSBidWlsZGluZworCSAgc2hhcmVkLWxpYnJhcnkgY29uZmlndXJhdGlvbiBvbiBwbGF0Zm9ybXMgbGFja2luZyBycGF0aCBzdXBwb3J0LgorCSsgYnVpbGQtZml4IGZvciBBZGE5NS9zcmMvTWFrZWZpbGUgdG8gcmVmbGVjdCBjaGFuZ2VkIGRlcGVuZGVuY3kgZm9yCisJICB0aGUgdGVybWluYWwtaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiIGZpbGUgd2hpY2ggaXMgbm93IGdlbmVyYXRlZC4KKwkrIHJlc3RydWN0dXJpbmcgdGVzdC93b3JtLmMsIGZvciB1c2Vfd2luZG93KCkgZXhhbXBsZS4KKworMjAwNzA5MDgKKwkrIGFkZCB1c2Vfd2luZG93KCkgYW5kIHVzZV9zY3JlZW4oKSBmdW5jdGlvbnMsIHRvIGRldmVsb3AgaW50byBzdXBwb3J0CisJICBmb3IgdGhyZWFkZWQgbGlicmFyeSAoaW5jb21wbGV0ZSkuCisJKyBmaXggdHlwb3MgaW4gbWFuL2N1cnNfb3BhcXVlLjN4IHdoaWNoIGtlcHQgdGhlIGluc3RhbGwgc2NyaXB0IGZyb20KKwkgIGNyZWF0aW5nIHN5bWJvbGljIGxpbmtzIHRvIHR3byBhbGlhc2VzIGNyZWF0ZWQgaW4gMjAwNzA4MTggKHJlcG9ydCBieQorCSAgUm9uZy1FbiBGYW4pLgorCisyMDA3MDkwMQorCSsgcmVtb3ZlIGEgc3B1cmlvdXMgbmV3bGluZSBmcm9tIG91dHB1dCBvZiBodG1sLm00LCB3aGljaCBjYXVzZWQgbGlua3MKKwkgIGZvciBBZGE5NSBodG1sIHRvIGJlIGluY29ycmVjdCBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZCB1c2luZyBtNC4KKwkrIHN0YXJ0IGludmVzdGlnYXRpbmcgbXV0ZXgncyBmb3IgU0NSRUVOIG1hbmlwdWxhdGlvbiAoaW5jb21wbGV0ZSkuCisJKyBtaW5vciBjbGVhbnVwIG9mIGNvZGVzLmMvbmFtZXMuYyBmb3IgLS1lbmFibGUtY29uc3QKKwkrIGV4cGFuZC9yZXZpc2UgIlJvdXRpbmUgYW5kIEFyZ3VtZW50IE5hbWVzIiBzZWN0aW9uIG9mIG5jdXJzZXMgbWFucGFnZQorCSAgdG8gYWRkcmVzcyByZXBvcnQgYnkgRGF2aWQgR2l2ZW5zIGluIG5ld3Nncm91cCBkaXNjdXNzaW9uLgorCSsgZml4IGludGVyYWN0aW9uIGJldHdlZW4gLS13aXRob3V0LXByb2dzLy0td2l0aC10ZXJtY2FwIGNvbmZpZ3VyZQorCSAgb3B0aW9ucyAocmVwb3J0IGJ5IE1pY2hhaWwgVmlkaWFzc292KS4KKwkrIGZpeCB0eXBvIGluICItLWRpc2FibGUtcmVsaW5rIiBvcHRpb24gKHJlcG9ydCBieSBNaWNoYWlsIFZpZGlhc3NvdikuCisKKzIwMDcwODI1CisJKyBmaXggYSBzaWduLWV4dGVuc2lvbiBidWcgaW4gaW5mb2NtcCdzIHJlcGFpcl9hY3NjKCkgZnVuY3Rpb24KKwkgIChjZjogOTcxMDA0KS4KKwkrIGZpeCBvbGQgY29uZmlndXJlIHNjcmlwdCBidWcgd2hpY2ggcHJldmVudGVkICItLWRpc2FibGUtd2FybmluZ3MiCisJICBvcHRpb24gZnJvbSB3b3JraW5nIChwYXRjaCBieSBNaWtlIEZyeXNpbmdlcikuCisKKzIwMDcwODE4CisJKyBhZGQgOXRlcm0gdGVybWluYWwgZGVzY3JpcHRpb24gKHJlcXVlc3QgYnkgSnVoYXBla2thIFRvbHZhbmVuKSAtVEQKKwkrIG1vZGlmeSBjb21wX2hhc2guYydzIHN0cmluZyBvdXRwdXQgdG8gYXZvaWQgbWlzaW50ZXJwcmV0aW5nIGEgbnVsbAorCSAgIlwwIiBmb2xsb3dlZCBieSBhIGRpZ2l0LgorCSsgbW9kaWZ5IE1LbmFtZXMuYXdrIGFuZCBNS2NvZGVzLmF3ayB0byBzdXBwb3J0IGJpZy1zdHJpbmdzLgorCSAgVGhpcyBvbmx5IGFwcGxpZXMgdG8gdGhlIGNhc2VzIChicm9rZW4gbGlua2VyLCByZWVudHJhbnQpIHdoZXJlCisJICB0aGUgY29ycmVzcG9uZGluZyBhcnJheXMgYXJlIGFjY2Vzc2VkIHZpYSB3cmFwcGVyIGZ1bmN0aW9ucy4KKwkrIHNwbGl0IE1LbmFtZXMuYXdrIGludG8gdHdvIHNjcmlwdHMsIGVsaW1pbmF0aW5nIHRoZSBzaGVsbCByZWRpcmVjdGlvbgorCSAgd2hpY2ggY29tcGxpY2F0ZWQgdGhlIG1ha2UgcHJvY2VzcyBhbmQgYWxzbyB0aGUgYm9ndXMgdGltZXN0YW1wIGZpbGUKKwkgIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIHRvIGZpeCAibWFrZSAtaiIuCisJKyBhZGQgdGVzdC90ZXN0X29wYXF1ZS5jLCB0ZXN0L3Rlc3RfYXJyYXlzLmMKKwkrIGFkZCB3Z2V0c2NycmVnKCkgYW5kIHdnZXRwYXJlbnQoKSBmb3IgYXBwbGljYXRpb25zIHRoYXQgbWF5IG5lZWQgaXQKKwkgIHdoZW4gTkNVUlNFU19PUEFRVUUgaXMgZGVmaW5lZCAocHJvbXB0ZWQgYnkgQnJ5YW4gQ2hyaXN0KS4KKworMjAwNzA4MTIKKwkrIGFtZW5kIHRyZWF0bWVudCBvZiBpbmZvY21wICItciIgb3B0aW9uIHRvIHJldGFpbiB0aGUgMTAyMy1ieXRlIGxpbWl0CisJICB1bmxlc3MgIi1UIiBpcyBnaXZlbiAoY2Y6IDk4MTAxNykuCisJKyBtb2RpZnkgY29tcF9jYXB0YWIuYyBnZW5lcmF0aW9uIHRvIHVzZSBiaWctc3RyaW5ncy4KKwkrIG1ha2UgX25jX2NhcGFsaWFzX3RhYmxlIGFuZCBfbmNfaW5mb2FsaWFzX3RhYmxlIHByaXZhdGUgYWNjZXNzZWQgdmlhCisJICBfbmNfZ2V0X2FsaWFzX3RhYmxlKCkgc2luY2UgdGhlIHRhYmxlcyBhcmUgdXNlZCBvbmx5IHdpdGhpbiB0aGUgdGljCisJICBsaWJyYXJ5LgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gc2tpcCBJbnRlbCBjb21waWxlciBpbiBDRl9DX0lOTElORS4KKwkrIG1ha2UgX25jX2luZm9faGFzaF90YWJsZSBhbmQgX25jX2NhcF9oYXNoX3RhYmxlIHByaXZhdGUgYWNjZXNzZWQgdmlhCisJICBfbmNfZ2V0X2hhc2hfdGFibGUoKSBzaW5jZSB0aGUgdGFibGVzIGFyZSB1c2VkIG9ubHkgd2l0aGluIHRoZSB0aWMKKwkgIGxpYnJhcnkuCisKKzIwMDcwNzI4CisJKyBtYWtlIF9uY19jYXBhbGlhc190YWJsZSBhbmQgX25jX2luZm9hbGlhc190YWJsZSBwcml2YXRlLCBhY2Nlc3NlZCB2aWEKKwkgIF9uY19nZXRfYWxpYXNfdGFibGUoKSBzaW5jZSB0aGV5IGFyZSB1c2VkIG9ubHkgYnkgcGFyc2VfZW50cnkuYworCSsgbWFrZSBfbmNfa2V5X25hbWVzIHByaXZhdGUgc2luY2UgaXQgaXMgdXNlZCBvbmx5IGJ5IGxpYl9rZXluYW1lLmMKKwkrIGFkZCAtLWRpc2FibGUtYmlnLXN0cmluZ3MgY29uZmlndXJlIG9wdGlvbiB0byBjb250cm9sIHdoZXRoZXIKKwkgIHVuY3RybC5jIGlzIGdlbmVyYXRlZCB1c2luZyB0aGUgYmlnLXN0cmluZyBvcHRpbWl6YXRpb24gLSB3aGljaCBtYXkKKwkgIHVzZSBzdHJpbmdzIGxvbmdlciB0aGFuIHN1cHBvcnRlZCBieSBhIGdpdmVuIGNvbXBpbGVyLgorCSsgcmVkdWNlIHJlbG9jYXRpb24gdGFibGVzIGZvciB0aWMsIGluZm9jbXAgYnkgY2hhbmdpbmcgdHlwZSBvZgorCSAgaW50ZXJuYWwgaGFzaCB0YWJsZXMgdG8gc2hvcnQsIGFuZCBtYWtlIHRob3NlIHByaXZhdGUgc3ltYm9scy4KKwkrIGVsaW1pbmF0ZSBsYXJnZSBmaXhlZCBhcnJheXMgZnJvbSBwcm9ncy9pbmZvY21wLmMKKworMjAwNzA3MjEKKwkrIGNoYW5nZSB3aW5uc3RyKCkgdG8gc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIChjZjogOTcwMzE1KS4KKwkrIGFkZCB0ZXN0L3Rlc3RfZ2V0X3dzdHIuYworCSsgYWRkIHRlc3QvdGVzdF9nZXRzdHIuYworCSsgYWRkIHRlc3QvdGVzdF9pbndzdHIuYworCSsgYWRkIHRlc3QvdGVzdF9pbnN0ci5jCisKKzIwMDcwNzE2CisJKyByZXN0b3JlIGEgY2FsbCB0byBvYnRhaW4gc2NyZWVuLXNpemUgaW4gX25jX3NldHVwdGVybSgpLCB3aGljaAorCSAgaXMgdXNlZCBpbiB0cHV0IGFuZCBvdGhlciBub24tc2NyZWVuIGFwcGxpY2F0aW9ucyB2aWEgc2V0dXB0ZXJtKCkKKwkgIChEZWJpYW4gIzQzMzM1NywgcmVwb3J0ZWQgYnkgRmxvcmVudCBCYXlsZSwgQ2hyaXN0aWFuIE9obSwKKwkgIGNmOiAyMDA3MDMxMCkuCisKKzIwMDcwNzE0CisJKyBhZGQgdGVzdC9zYXZlc2NyZWVuLmMgdGVzdC1wcm9ncmFtCisJKyBhZGQgY2hlY2sgdG8gdHJhY2UtZmlsZSBvcGVuLCBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyBhIGRpcmVjdG9yeSwgYWRkCisJICAiLmxvZyIgdG8gdGhlIG5hbWUgYW5kIHRyeSBhZ2Fpbi4KKwkrIGFkZCBrb25zb2xlLTI1NmNvbG9yIGVudHJ5IC1URAorCSsgYWRkIGV4dHJhIGdjYyB3YXJuaW5nIG9wdGlvbnMgZnJvbSB4dGVybS4KKwkrIG1pbm9yIGZpeGVzIGZvciBuY3Vyc2VzL2hhc2htYXAgdGVzdC1wcm9ncmFtLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gcXVpZXQgYysrIGJ1aWxkIHdpdGggbGlidG9vbCB3aGVuIHRoZQorCSAgLS1kaXNhYmxlLWVjaG8gb3B0aW9uIGlzIHVzZWQuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBkaXNhYmxlIGFkYTk1IGlmIGxpYnRvb2wgaXMgc2VsZWN0ZWQsCisJICB3cml0aW5nIGEgd2FybmluZyBtZXNzYWdlIChhZGRyZXNzZXMgRnJlZUJTRCBwb3J0cy8xMTQ0OTMpLgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YgorCisyMDA3MDcwNworCSsgYWRkIGNvbnRpbnVvdXMtbW92ZSAiTSIgdG8gZGVtb19wYW5lbHMgdG8gaGVscCB0ZXN0IHJlZnJlc2ggY2hhbmdlcy4KKwkrIGltcHJvdmUgZml4IGZvciByZWZyZXNoIG9mIHdpbmRvdyBvbiB0b3Agb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMsCisJICB0YWtpbmcgaW50byBhY2NvdW50IHNvbWUgc3BsaXQgY2hhcmFjdGVycyBvbiBsZWZ0L3JpZ2h0IHdpbmRvdworCSAgYm91bmRhcmllcy4KKworMjAwNzA2MzAKKwkrIGFkZCAid2lkZWMiIHJvdyB0byBfdHJhY2VkdW1wKCkgb3V0cHV0IHRvIGhlbHAgZGlhZ25vc2UgcmVtYWluaW5nCisJICBwcm9ibGVtcyB3aXRoIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzLgorCSsgcGFydGlhbCBmaXggZm9yIHJlZnJlc2ggb2Ygd2luZG93IG9uIHRvcCBvZiBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycworCSAgd2hpY2ggYXJlIHBhcnRseSBvdmVyd3JpdHRlbiAocmVwb3J0IGJ5IFNhZHJ1bCBIIENob3dkaHVyeSkuCisJKyBpZ25vcmUgQV9DSEFSVEVYVCBiaXRzIGluIHZpZGF0dHIoKSBhbmQgdmlkX2F0dHIoKSwgaW4gY2FzZQorCSAgbXVsdGktY29sdW1uIGV4dGVuc2lvbiBiaXRzIGFyZSBwYXNzZWQgdGhlcmUuCisJKyBhZGQgc2V0bG9jYWxlKCkgY2FsbCB0byBkZW1vX3BhbmVscy5jLCBuZWVkZWQgZm9yIHdpZGUtY2hhcmFjdGVycy4KKwkrIGFkZCBzb21lIG91dHB1dCBmbGFncyB0byBfbmNfdHJhY2VfdHR5bW9kZSB0byBoZWxwIGRpYWdub3NlIGEgYnVnCisJICByZXBvcnQgYnkgTGFycnkgVmlyZGVuLCBpLmUuLCBPTkxDUiwgT0NSTkwsIE9OT0NSIGFuZCBPTkxSRVQsCisKKzIwMDcwNjIzCisJKyBhZGQgdGVzdC9kZW1vX3BhbmVscy5jCisJKyBpbXBsZW1lbnQgb3BhcXVlIHZlcnNpb24gb2Ygc2V0c3l4KCkgYW5kIGdldHN5eCgpLgorCisyMDA3MDYxMgorCSsgY29ycmVjdGVkIHh0ZXJtK3BjZjIgdGVybWluZm8gbW9kaWZpZXJzIGZvciBGMS1GNCwgdG8gbWF0Y2ggeHRlcm0KKwkgICMyMjYgLVRECisJKyBzcGxpdC1vdXQga2V5X25hbWUoKSBmcm9tIE1La2V5bmFtZS5hd2sgc2luY2UgaXQgbm93IGRlcGVuZHMgdXBvbgorCSAgd3VuY3RybCgpIHdoaWNoIGlzIG5vdCBpbiBsaWJ0aW5mbyAocmVwb3J0IGJ5IFJvbmctRW4gRmFuKS4KKworMjAwNzA2MDkKKwkrIGFkZCB0ZXN0L2tleV9uYW1lLmMKKwkrIGFkZCBzdGRzY3IgY2FzZXMgdG8gdGVzdC9pbmNocy5jIGFuZCB0ZXN0L2luY2hfd2lkZS5jCisJKyB1cGRhdGUgdGVzdC9jb25maWd1cmUKKwkrIGNvcnJlY3QgZm9ybWF0dGluZyBvZiBERUwgKDB4N2YpIGluIF9uY192aXNjaGFyKCkuCisJKyBudWxsLXRlcm1pbmF0ZSByZXN1bHQgb2Ygd3VuY3RybCgpLgorCSsgYWRkIG51bGwtcG9pbnRlciBjaGVjayBpbiBrZXlfbmFtZSgpIChyZXBvcnQgYnkgQW5kcmVhcyBLcmVubm1haXIsCisJICBjZjogMjAwMjA5MDEpLgorCisyMDA3MDYwMgorCSsgYWRhcHQgbW91c2UtaGFuZGxpbmcgY29kZSBmcm9tIG1lbnUgbGlicmFyeSBpbiBmb3JtLWxpYnJhcnkKKwkgIChkaXNjdXNzaW9uIHdpdGggQ2xpdmUgTmljb2xzb24pLgorCSsgYWRkIGEgbW9kaWZpY2F0aW9uIG9mIHRlc3QvZG90cy5jLCBpLmUuLCB0ZXN0L2RvdHNfbXZjdXIuYyB0bworCSAgaWxsdXN0cmF0ZSBob3cgdG8gdXNlIG12Y3VyKCkuCisJKyBtb2RpZnkgd2lkZS1jaGFyYWN0ZXIgZmxhdm9yIG9mIFNldEF0dHIoKSB0byBwcmVzZXJ2ZSB0aGUKKwkgIFdpZGVjRXh0KCkgdmFsdWUgc3RvcmVkIGluIHRoZSAuYXR0ciBmaWVsZCwgZS5nLiwgaW4gY2FzZSBpdAorCSAgaXMgb3ZlcndyaXR0ZW4gYnkgY2hnYXQgKHJlcG9ydCBieSBBbGVrc2kgVG9yaGFtbykuCisJKyBjb3JyZWN0IGJ1ZmZlci1zaXplIGZvciBfbmNfdmlzd2J1ZjJuKCkgKHJlcG9ydCBieSBBbGVrc2kgVG9yaGFtbykuCisJKyBidWlsZC1maXhlcyBmb3IgU29sYXJpcyAyLjYgYW5kIDIuNyAocGF0Y2ggYnkgUGV0ZXIgTydHb3JtYW4pLgorCisyMDA3MDUyNgorCSsgbW9kaWZ5IGtleW5hbWUoKSB0byB1c2UgIl5YIiBmb3JtIG9ubHkgaWYgbWV0YSgpIGhhcyBiZWVuIGNhbGxlZCwgb3IKKwkgIGlmIGtleW5hbWUoKSBpcyBjYWxsZWQgd2l0aG91dCBpbml0aWFsaXppbmcgY3Vyc2VzLCBlLmcuLCB2aWEKKwkgIGluaXRzY3IoKSBvciBuZXd0ZXJtKCkgKHByb21wdGVkIGJ5IExpbnV4QmFzZSAjMTYwNCkuCisJKyBkb2N1bWVudCBzb21lIHBvcnRhYmlsaXR5IGlzc3VlcyBpbiBtYW4vY3Vyc191dGlsLjN4CisJKyBhZGQgYSBzaGFkb3cgY29weSBvZiBUVFkgYnVmZmVyIHRvIF9uY19wcmVzY3JlZW4gdG8gZml4IGFwcGxpY2F0aW9ucworCSAgYnJva2VuIGJ5IG1vdmluZyB0aGF0IGRhdGEgaW50byBTQ1JFRU4gKGNmOiAyMDA2MTIzMCkuCisKKzIwMDcwNTEyCisJKyBhZGQgJ08nICh3aWRlLWNoYXJhY3RlciBwYW5lbCB0ZXN0KSBpbiBuY3Vyc2VzLmMgdG8gZGVtb25zdHJhdGUgYQorCSAgcHJvYmxlbSByZXBvcnRlZCBieSBTYWRydWwgSCBDaG93ZGh1cnkgd2l0aCByZXBhaW50aW5nIHBhcnRzIG9mCisJICBhIGZ1bGx3aWR0aCBjZWxsLgorCSsgbW9kaWZ5IHNsa19pbml0KCkgc28gdGhhdCBpZiB0aGVyZSBhcmUgcHJlY2VkaW5nIGNhbGxzIHRvCisJICByaXBvZmZsaW5lKCksIHRob3NlIGFmZmVjdCB0aGUgYXZhaWxhYmxlIGxpbmVzIGZvciBzb2Z0LWtleXMgKGFkYXB0ZWQKKwkgIGZyb20gcGF0Y2ggYnkgQ2xpdmUgTmljb2xzb24pLgorCSsgZG9jdW1lbnQgc29tZSBwb3J0YWJpbGl0eSBpc3N1ZXMgaW4gbWFuL2N1cnNfZ2V0eXguM3gKKworMjAwNzA1MDUKKwkrIGZpeCBhIGJ1ZyBpbiBBZGE5NS9zYW1wbGVzL25jdXJzZXMgd2hpY2ggY2F1c2VkIGEgdmFyaWFibGUgdG8KKwkgIGJlY29tZSB1bmluaXRpYWxpemVkIGluIHRoZSAiYiIgdGVzdC4KKwkrIGZpeCBBZGE5NS9nZW4vTWFrZWZpbGUuaW4gYWRhaHRtbCBydWxlIHRvIGFjY291bnQgZm9yIHJlY2VudAorCSAgbW92ZW1lbnQgb2YgZmlsZXMsIGZpeCBhIGZldyBpbmNvcnJlY3QgbWFucGFnZSByZWZlcmVuY2VzIGluIHRoZQorCSAgZ2VuZXJhdGVkIGh0bWwuCisJKyBhZGQgQWRhOTUgYmluZGluZyB0byBfbmNfZnJlZWFsbCgpIGFzIEN1cnNlc19GcmVlX0FsbCB0byBoZWxwIHdpdGgKKwkgIG1lbW9yeS1jaGVja2luZy4KKwkrIGNvcnJlY3Qgc29tZSBmdW5jdGlvbnMgaW4gQWRhOTUgYmluZGluZyB3aGljaCB3ZXJlIHVzaW5nIHJldHVybiB2YWx1ZQorCSAgZnJvbSBDIHdoZXJlIG5vbmUgd2FzIHJldHVybmVkOiAgaWRjb2soKSwgaW1tZWRvaygpIGFuZCB3dGltZW91dCgpLgorCSsgYW1lbmQgcmVjZW50IGNoYW5nZXMgZm9yIEFkYTk1IGJpbmRpbmcgdG8gbWFrZSBpdCBidWlsZCB3aXRoCisJICBDeWd3aW4ncyBsaW5rZXIsIGUuZy4sIHdpdGggY29uZmlndXJlIG9wdGlvbnMKKwkJLS1lbmFibGUtYnJva2VuLWxpbmtlciAtLXdpdGgtdGljbGliCisKKzIwMDcwNDI4CisJKyBhZGQgYSBjb25maWd1cmUgY2hlY2sgZm9yIGdjYydzIG9wdGlvbnMgZm9yIGlubGluaW5nLCB1c2UgdGhhdCB0bworCSAgcXVpZXQgYSB3YXJuaW5nIG1lc3NhZ2Ugd2hlcmUgZ2NjJ3MgZGVmYXVsdCBiZWhhdmlvciBjaGFuZ2VkIGZyb20KKwkgIDMueCB0byA0LnguCisJKyBpbXByb3ZlIHdhcm5pbmcgbWVzc2FnZSB3aGVuIGNoZWNraW5nIGlmIEdQTSBpcyBsaW5rZWQgdG8gY3Vyc2VzCisJICBsaWJyYXJ5IGJ5IG5vdCB3YXJuaW5nIGlmIGl0cyB1c2Ugb2YgIndnZXRjaCIgaXMgdmlhIGEgd2VhayBzeW1ib2wuCisJKyBhZGQgbG9hZGVyIG9wdGlvbnMgd2hlbiBidWlsZGluZyB3aXRoIHN0YXRpYyBsaWJyYXJpZXMgdG8gZW5zdXJlIHRoYXQKKwkgIGFuIGluc3RhbGxlZCBzaGFyZWQgbGlicmFyeSBmb3IgbmN1cnNlcyBkb2VzIG5vdCBjb25mbGljdC4gIFRoaXMgaXMKKwkgIHJlcG9ydGVkIGFzIHByb2JsZW0gd2l0aCBUcnU2NCwgYnV0IGNvdWxkIGFmZmVjdCBvdGhlciBwbGF0Zm9ybXMKKwkgIChyZXBvcnQgTWFydGluIE1va3JlanMsIGFuYWx5c2lzIGJ5IFRpbSBNb29uZXkpLgorCSsgZml4IGJ1aWxkIG9uIGN5Z3dpbiBhZnRlciByZWNlbnQgdGljbGliL3Rlcm1saWIgY2hhbmdlcywgaS5lLiwKKwkgICsgYWRqdXN0IFRJTkZPX1NVRkZJWCB2YWx1ZSB0byB3b3JrIHdpdGggY3lnd2luJ3MgZGxsIG5hbWluZworCSAgKyByZXZlcnQgYSBjaGFuZ2UgZnJvbSAyMDA3MDMwMyB3aGljaCBjb21tZW50ZWQgb3V0IGRlcGVuZGVuY3kgb2YKKwkgICAgU0hMSUJfTElTVCBpbiBmb3JtL21lbnUvcGFuZWwvYysrIGxpYnJhcmllcy4KKwkrIGZpeCBpbml0aWFsaXphdGlvbiBvZiByaXBvZmYgc3RhY2sgcG9pbnRlciAoY2Y6IDIwMDcwNDIxKS4KKworMjAwNzA0MjEKKwkrIG1vdmUgbW9zdCBzdGF0aWMgdmFyaWFibGVzIGludG8gc3RydWN0dXJlcyBfbmNfZ2xvYmFscyBhbmQKKwkgIF9uY19wcmVzY3JlZW4sIHRvIHNpbXBsaWZ5IHN0b3JhZ2UuCisJKyBhZGQvdXNlIGNvbmZpZ3VyZSBzY3JpcHQgbWFjcm8gQ0ZfU0lHX0FUT01JQ19ULCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcKKwkgIHR5cGUgZm9yIGRhdGEgbWFuaXB1bGF0ZWQgYnkgc2lnbmFsIGhhbmRsZXJzIChwcm9tcHRlZCBieSBjb21tZW50cworCSAgaW4gbWFpbGluZy5vcGVuYnNkLmJ1Z3MgbmV3c2dyb3VwKS4KKwkrIG1vZGlmeSBDRl9XSVRIX0xJQlRPT0wgdG8gYWxsb3cgb25lIHRvIHBhc3Mgb3B0aW9ucyBzdWNoIGFzIC1zdGF0aWMKKwkgIHRvIHRoZSBsaWJ0b29sIGNyZWF0ZS0gYW5kIGxpbmstb3BlcmF0aW9ucy4KKworMjAwNzA0MTQKKwkrIGZpeCB3aGl0ZXNwYWNlIGluIGN1cnNfb3BhcXVlLjN4IHdoaWNoIGNhdXNlZCBhIHNwdXJpb3VzICc7JyBpbgorCSAgdGhlIGluc3RhbGxlZCBhbGlhc2VzIChyZXBvcnQgYnkgUGV0ZXIgU2FudG9ybykuCisJKyBmaXggY29uZmlndXJlIHNjcmlwdCB0byBub3QgdHJ5IHRvIGdlbmVyYXRlIGFkYWN1cnNlcy1jb25maWcgd2hlbgorCSAgQWRhOTUgdHJlZSBpcyBub3QgYnVpbHQuCisKKzIwMDcwNDA3CisJKyBhZGQgbWFuL2N1cnNfbGVnYWN5LjN4LCBtYW4vY3Vyc19vcGFxdWUuM3gKKwkrIGZpeCBhY3NfbWFwIGJpbmRpbmcgZm9yIEFkYTk1IHdoZW4gLS1lbmFibGUtcmVlbnRyYW50IGlzIHVzZWQuCisJKyBhZGQgYWRhY3Vyc2VzLWNvbmZpZyB0byB0aGUgQWRhOTUgaW5zdGFsbCwgYmFzZWQgb24gdmVyc2lvbiBmcm9tCisJICBGcmVlQlNEIHBvcnQsIGluIHR1cm4gYnkgSnVlcmdlbiBQZmVpZmVyIGluIDIwMDAgKHByb21wdGVkIGJ5CisJICBjb21tZW50IG9uIGNvbXAubGFuZy5hZGEgbmV3c2dyb3VwKS4KKwkrIGZpeCBpbmNsdWRlcyBpbiBjKysgYmluZGluZyB0byBidWlsZCB3aXRoIEludGVsIGNvbXBpbGVyCisJICAoY2Y6IDIwMDYxMjA5KS4KKwkrIHVwZGF0ZSBpbnN0YWxsIHJ1bGUgaW4gQWRhOTUgdG8gdXNlIG1rZGlycy5zaAorCT4gb3RoZXIgZml4ZXMgcHJvbXB0ZWQgYnkgaW5zcGVjdGlvbiBmb3IgQ292ZXJpdHkgcmVwb3J0OgorCSsgbW9kaWZ5IGlmZGVmJ3MgZm9yIGMrKyBiaW5kaW5nIHRvIHVzZSB0cnkvY2F0Y2gvdGhyb3cgc3RhdGVtZW50cworCSsgYWRkIGEgbnVsbC1wb2ludGVyIGNoZWNrIGluIHRhY2svYW5zaS5jIHJlcXVlc3RfY2ZzcygpCisJKyBmaXggYSBtZW1vcnkgbGVhayBpbiBuY3Vyc2VzL2Jhc2Uvd3Jlc2l6ZS5jCisJKyBjb3JyZWN0ZWQgY2hlY2sgZm9yIHZhbGlkIG1lbXUvbWVtbCBjYXBhYmlsaXRpZXMgaW4KKwkgIHByb2dzL2R1bXBfZW50cnkuYyB3aGVuIGhhbmRsaW5nIFZfSFBVWCBjYXNlLgorCT4gZml4ZXMgYmFzZWQgb24gQ292ZXJpdHkgcmVwb3J0OgorCSsgcmVtb3ZlIGRlYWQgY29kZSBpbiB0ZXN0L2JzLmMKKwkrIHJlbW92ZSBkZWFkIGNvZGUgaW4gdGVzdC9kZW1vX2RlZmtleS5jCisJKyByZW1vdmUgYW4gdW51c2VkIGFzc2lnbm1lbnQgaW4gcHJvZ3MvaW5mb2NtcC5jCisJKyBmaXggYSBsaW1pdCBjaGVjayBpbiB0YWNrL2Fuc2kuYyB0b29sc19jaGFyc2V0KCkKKwkrIGZpeCB0YWNrL2Fuc2kuYyB0b29sc19zdGF0dXMoKSB0byBwZXJmb3JtIHRoZSBWVDMyMC9WVDQyMAorCSAgdGVzdHMgaW4gcmVxdWVzdF9jZnNzKCkuICBUaGUgZnVuY3Rpb24gaGFkIGV4aXRlZCB0b28gc29vbi4KKwkrIGZpeCBhIG1lbW9yeSBsZWFrIGluIHRpYy5jJ3MgbWFrZV9uYW1lbGlzdCgpCisJKyBmaXggYSBjb3VwbGUgb2YgcGxhY2VzIGluIHRhY2svb3V0cHV0LmMgd2hpY2ggZGlkIG5vdCBjaGVjayBmb3IgRU9GLgorCSsgZml4IGEgbG9vcC1jb25kaXRpb24gaW4gdGVzdC9icy5jCisJKyBhZGQgaW5kZXggY2hlY2tzIGluIGxpYl9jb2xvci5jIGZvciBjb2xvciBwYWxldHRlcworCSsgYWRkIGluZGV4IGNoZWNrcyBpbiBwcm9ncy9kdW1wX2VudHJ5LmMgZm9yIHZlcnNpb25fZmlsdGVyKCkgaGFuZGxpbmcKKwkgIG9mIFZfQlNEIGNhc2UuCisJKyBmaXggYSBwb3NzaWJsZSBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29weXdpbigpCisJKyBmaXggYSBwb3NzaWJsZSBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gd2FkZGNobnN0cigpCisJKyBhZGQgYSBudWxsLXBvaW50ZXIgY2hlY2sgaW4gX25jX2V4cGFuZF90cnkoKQorCSsgYWRkIGEgbnVsbC1wb2ludGVyIGNoZWNrIGluIHRpYy5jJ3MgbWFrZV9uYW1lbGlzdCgpCisJKyBhZGQgYSBudWxsLXBvaW50ZXIgY2hlY2sgaW4gX25jX2V4cGFuZF90cnkoKQorCSsgYWRkIG51bGwtcG9pbnRlciBjaGVja3MgaW4gdGVzdC9jYXJkZmlsZS5jCisJKyBmaXggYSBkb3VibGUtZnJlZSBpbiBuY3Vyc2VzL3RpbmZvL3RyaW1fc2dyMC5jCisJKyBmaXggYSBkb3VibGUtZnJlZSBpbiBuY3Vyc2VzL2Jhc2Uvd3Jlc2l6ZS5jCisJKyBhZGQgdHJ5L2NhdGNoIGJsb2NrIHRvIGMrKy9jdXJzZXNtYWluLmNjCisKKzIwMDcwMzMxCisJKyBtb2RpZnkgQWRhOTUgYmluZGluZyB0byBidWlsZCB3aXRoIC0tZW5hYmxlLXJlZW50cmFudCBieSB3cmFwcGluZworCSAgZ2xvYmFsIHZhcmlhYmxlcyAoYnVnOiBhY3NfbWFwIGRvZXMgbm90IHlldCB3b3JrKS4KKwkrIG1vZGlmeSBBZGE5NSBiaW5kaW5nIHRvIHVzZSB0aGUgbmV3IGFjY2Vzcy1mdW5jdGlvbnMsIGFsbG93aW5nIGl0CisJICB0byBidWlsZC9ydW4gd2hlbiBOQ1VSU0VTX09QQVFVRSBpcyBzZXQuCisJKyBhZGQgYWNjZXNzLWZ1bmN0aW9ucyBhbmQgbWFjcm9zIHRvIHJldHVybiBwcm9wZXJ0aWVzIG9mIHRoZSBXSU5ET1cKKwkgIHN0cnVjdHVyZSwgZS5nLiwgd2hlbiBOQ1VSU0VTX09QQVFVRSBpcyBzZXQuCisJKyBpbXByb3ZlZCBpbnN0YWxsLXNoJ3MgcXVvdGluZy4KKwkrIHVzZSBta2RpcnMuc2ggcmF0aGVyIHRoYW4gbWtpbnN0YWxsZGlycywgZS5nLiwgdG8gdXNlIGZpeGVzIGZyb20KKwkgIG90aGVyIHByb2dyYW1zLgorCisyMDA3MDMyNAorCSsgZWxpbWluYXRlIHBhcnQgb2YgdGhlIGRpcmVjdCB1c2Ugb2YgV0lORE9XIGRhdGEgZnJvbSBBZGE5NSBpbnRlcmZhY2UuCisJKyBmaXggc3Vic3RpdHV0aW9ucyBmb3IgdGVybWxpYiBmaWxlbmFtZSB0byBtYWtlIGNvbmZpZ3VyZSBvcHRpb24KKwkgIC0tZW5hYmxlLXJlZW50cmFudCB3b3JrIHdpdGggLS13aXRoLXRlcm1saWIuCisJKyBjaGFuZ2UgYSBjb25zdHJ1Y3RvciBmb3IgTkN1cnNlc1dpbmRvdyB0byBhbGxvdyBjb21waWxpbmcgd2l0aAorCSAgTkNVUlNFU19PUEFRVUUgc2V0LCBzaW5jZSB3ZSBjYW5ub3QgcGFzcyBhIHJlZmVyZW5jZSB0bworCSAgYW4gb3BhcXVlIHBvaW50ZXIuCisKKzIwMDcwMzE3CisJKyBpZ25vcmUgLS13aXRoLWNodHlwZT11bnNpZ25lZCBzaW5jZSB1bnNpZ25lZCBpcyBhbHdheXMgYWRkZWQgdG8KKwkgIHRoZSB0eXBlIGluIGN1cnNlcy5oOyBkbyB0aGUgc2FtZSBmb3IgLS13aXRoLW1tYXNrLXQuCisJKyBjaGFuZ2Ugd2FybmluZyByZWdhcmRpbmcgLS1lbmFibGUtZXh0LWNvbG9ycyBhbmQgd2lkZS1jaGFyYWN0ZXIKKwkgIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIGFuIGVycm9yLgorCSsgdHdlYWsgZXJyb3IgbWVzc2FnZSBpbiBDRl9XSVRIX0xJQlRPT0wgdG8gZGlzdGluZ3Vpc2ggb3RoZXIgcHJvZ3JhbXMKKwkgIHN1Y2ggYXMgRGFyd2luJ3MgbGlidG9vbCBwcm9ncmFtIChyZXBvcnQgYnkgTWljaGFpbCBWaWRpYXNzb3YpCisJKyBtb2RpZnkgZWRpdF9tYW4uc2ggdG8gYWxsb3cgZm9yIG11bHRpcGxlIHN1YnN0aXR1dGlvbnMgcGVyIGxpbmUuCisJKyBzZXQgbG9jYWxlIGluIG1pc2MvbmN1cnNlcy1jb25maWcuaW4gc2luY2UgaXQgdXNlcyBhIHJhbmdlCisJKyBjaGFuZ2UgcGVybWlzc2lvbnMgbGlibmN1cnNlcysrLmEgaW5zdGFsbCAocmVwb3J0IGJ5IE1pY2hhaWwKKwkgIFZpZGlhc3NvdikuCisJKyBjb3JyZWN0ZWQgbGVuZ3RoIG9mIHRlbXBvcmFyeSBidWZmZXIgaW4gd2lkZS1jaGFyYWN0ZXIgdmVyc2lvbgorCSAgb2Ygc2V0X2ZpZWxkX2J1ZmZlcigpIChyZWxhdGVkIHRvIHJlcG9ydCBieSBCcnlhbiBDaHJpc3QpLgorCisyMDA3MDMxMQorCSsgZml4IG1rLTFzdC5hd2sgc2NyaXB0IGluc3RhbGxfc2hsaWIoKSBmdW5jdGlvbiwgYnJva2VuIGluIDIwMDcwMjI0CisJICBjaGFuZ2VzIGZvciBjeWd3aW4gKHJlcG9ydCBieSAgTWljaGFpbCBWaWRpYXNzb3YpLgorCisyMDA3MDMxMAorCSsgaW5jcmVhc2Ugc2l6ZSBvZiBhcnJheSBpbiBfbmNfdmlzYnVmMm4oKSB0byBtYWtlICJ0aWMgLXYiIHdvcmsKKwkgIHByb3Blcmx5IGluIGl0cyBzaW1pbGFyX3NncigpIGZ1bmN0aW9uIChyZXBvcnQvYW5hbHlzaXMgYnkgUGV0ZXIKKwkgIFNhbnRvcm8pLgorCSsgYWRkIC0tZW5hYmxlLXJlZW50cmFudCBjb25maWd1cmUgb3B0aW9uIGZvciBvbmdvaW5nIGNoYW5nZXMgdG8KKwkgIGltcGxlbWVudCBhIHJlZW50cmFudCB2ZXJzaW9uIG9mIG5jdXJzZXM6CisJICArIGxpYnJhcmllcyBhcmUgc3VmZml4ZWQgd2l0aCAidCIKKwkgICsgd3JhcCBzZXZlcmFsIGdsb2JhbCB2YXJpYWJsZXMgKGN1cnNjciwgbmV3c2NyLCBzdGRzY3IsIHR0eXR5cGUsCisJICAgIENPTE9SUywgQ09MT1JfUEFJUlMsIENPTFMsIEVTQ0RFTEFZLCBMSU5FUyBhbmQgVEFCU0laRSkgYXMKKwkgICAgZnVuY3Rpb25zIHJldHVybmluZyB2YWx1ZXMgc3RvcmVkIGluIFNDUkVFTiBvciBjdXJfdGVybS4KKwkgICsgbW92ZSBzb21lIGluaXRpYWxpemF0aW9uIChMSU5FUywgQ09MUykgZnJvbSBsaWJfc2V0dXAuYywKKwkgICAgaS5lLiwgc2V0dXB0ZXJtKCkgdG8gX25jX3NldHVwc2NyZWVuKCksIGkuZS4sIG5ld3Rlcm0oKS4KKworMjAwNzAzMDMKKwkrIHJlZ2VuZXJhdGVkIGh0bWwgZG9jdW1lbnRhdGlvbi4KKwkrIGFkZCBOQ1VSU0VTX09QQVFVRSBzeW1ib2wgdG8gY3Vyc2VzLmgsIHdpbGwgdXNlIHRvIG1ha2Ugc3RydWN0cworCSAgb3BhcXVlIGluIHNlbGVjdGVkIGNvbmZpZ3VyYXRpb25zLgorCSsgbW92ZSB0aGUgY2h1bmsgaW4gbGliX2Fjcy5jIHdoaWNoIHJlc2V0cyBhY3MgY2FwYWJpbGl0aWVzIHdoZW4KKwkgIHJ1bm5pbmcgb24gYSB0ZXJtaW5hbCB3aG9zZSBsb2NhbGUgaW50ZXJmZXJlcyB3aXRoIHRob3NlIGludG8KKwkgIF9uY19zZXR1cHNjcmVlbigpLCBzbyB0aGUgbGlidGluZm8vbGlidGluZm93IGZpbGVzIGNhbiBiZSBtYWRlCisJICBpZGVudGljYWwgKHJlcXVlc3RlZCBieSBNaXJvc2xhdiBMaWNodmFyKS4KKwkrIGRvIG5vdCB1c2UgY29uZmlndXJlIHZhcmlhYmxlIFNITElCX0xJQlMgZm9yIGJ1aWxkaW5nIGxpYnJhcmllcworCSAgb3V0c2lkZSB0aGUgbmN1cnNlcyBkaXJlY3RvcnksIHNpbmNlIHRoYXQgc3ltYm9sIGlzIGN1c3RvbWl6ZWQKKwkgIG9ubHkgZm9yIHRoYXQgZGlyZWN0b3J5LCBhbmQgdXNpbmcgaXQgaW50cm9kdWNlcyBhbiB1bm5lZWRlZAorCSAgZGVwZW5kZW5jeSBvbiBsaWJkbCAocmVxdWVzdGVkIGJ5IE1pcm9zbGF2IExpY2h2YXIpLgorCSsgbW9kaWZ5IG1rLTFzdC5hd2sgc28gdGhlIGdlbmVyYXRlZCBtYWtlZmlsZSBydWxlcyBmb3IgbGlua2luZyBvcgorCSAgaW5zdGFsbGluZyBzaGFyZWQgbGlicmFyaWVzIGRvIG5vdCBmaXJzdCByZW1vdmUgdGhlIGxpYnJhcnksIGluCisJICBjYXNlIGl0IGlzIGluIHVzZSwgZS5nLiwgbGlibmN1cnNlcy5zbyBieSAvYmluL3NoIChyZXBvcnQgYnkgSmVmZgorCSAgQ2h1YSkuCisJKyByZXZpc2VkIHNlY3Rpb24gIlVzaW5nIE5DVVJTRVMgdW5kZXIgWFRFUk0iIGluIG5jdXJzZXMtaW50cm8uaHRtbAorCSAgKHByb21wdGVkIGJ5IG5ld3Nncm91cCBjb21tZW50IGJ5IE5pY2sgR3VlbnRoZXIpLgorCisyMDA3MDIyNAorCSsgY2hhbmdlIGludGVybmFsIHJldHVybiBjb2RlcyBvZiBfbmNfd2dldGNoKCkgdG8gY2hlY2sgZm9yIGNhc2VzCisJICB3aGVyZSBLRVlfQ09ERV9ZRVMgc2hvdWxkIGJlIHJldHVybmVkLCBlLmcuLCBpZiBhIEtFWV9SRVNJWkUgd2FzCisJICB1bmdldGNoJ2QsIGFuZCByZWFkIGJ5IHdnZXRfd2NoKCkuCisJKyBmaXggc3RhdGljLWxpYnJhcnkgYnVpbGQgYnJva2VuIGluIDIwMDcwMjE3IGNoYW5nZXMgdG8gcmVtb3ZlICItbGRsIgorCSAgKHJlcG9ydCBieSBNaXJvc2xhdiBMaWNodmFyKS4KKwkrIGNoYW5nZSBtYWtlZmlsZS9zY3JpcHRzIGZvciBjeWd3aW4gdG8gYWxsb3cgYnVpbGRpbmcgdGVybWxpYi4KKwkrIHVzZSBGb3JtX0hvb2sgaW4gbWFucGFnZXMgdG8gbWF0Y2ggZm9ybS5oCisJKyB1c2UgTWVudV9Ib29rIGluIG1hbnBhZ2VzLCBhcyB3ZWxsIGFzIGEgZmV3IHBsYWNlcyBpbiBtZW51LmgKKwkrIGNvcnJlY3QgZm9ybS0gYW5kIG1lbnUtbWFucGFnZXMgdG8gdXNlIHNwZWNpZmljIEZpZWxkX09wdGlvbnMsCisJICBNZW51X09wdGlvbnMgYW5kIEl0ZW1fT3B0aW9ucyB0eXBlcy4KKwkrIGNvcnJlY3QgcHJvdG90eXBlIGZvciBfdHJhY2VjaGFyKCkgaW4gbWFucGFnZSAoY2Y6IDIwMDExMjI5KS4KKwkrIGNvcnJlY3QgcHJvdG90eXBlIGZvciB3dW5jdHJsKCkgaW4gbWFucGFnZS4KKworMjAwNzAyMTcKKwkrIGZpeGVzIGZvciAkKFRJQ1NfTElTVCkgaW4gbmN1cnNlcy9NYWtlZmlsZSAocmVwb3J0IGJ5IE1pcm9zbGF2CisJICBMaWNodmFyKS4KKwkrIG1vZGlmeSByZWxpbmtpbmcgb2Ygc2hhcmVkIGxpYnJhcmllcyB0byBhcHBseSBvbmx5IHdoZW4gcnBhdGggaXMKKwkgIGVuYWJsZWQsIGFuZCBhZGQgLS1kaXNhYmxlLXJlbGluayBvcHRpb24gd2hpY2ggY2FuIGJlIHVzZWQgdG8KKwkgIGRpc2FibGUgdGhlIGZlYXR1cmUgYWx0b2dldGhlciAocmVwb3J0cyBieSBNaWNoYWlsIFZpZGlhc3NvdiwKKwkgIEFkYW0gSiBSaWNodGVyKS4KKwkrIGZpeCAtLXdpdGgtdGVybWxpYiBvcHRpb24gZm9yIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24sIHN0cmlwcGluZworCSAgdGhlICJ3IiBzdWZmaXggaW4gb25lIHBsYWNlIChyZXBvcnQgYnkgTWlyb3NsYXYgTGljaHZhcikuCisJKyByZW1vdmUgIi1sZGwiIGZyb20gc29tZSBsaWJyYXJ5IGxpc3RzIHRvIHJlZHVjZSBkZXBlbmRlbmNpZXMgaW4KKwkgIHByb2dyYW1zIChyZXBvcnQgYnkgTWlyb3NsYXYgTGljaHZhcikuCisJKyBjb3JyZWN0IGRlc2NyaXB0aW9uIG9mIC0tZW5hYmxlLXNpZ25lZC1jaGFyIGluIGNvbmZpZ3VyZSAtLWhlbHAKKwkgIChyZXBvcnQgYnkgTWljaGFpbCBWaWRpYXNzb3YpLgorCSsgYWRkIHBhdHRlcm4gZm9yIEdOVS9rRnJlZUJTRCBjb25maWd1cmF0aW9uIHRvIENGX1hPUEVOX1NPVVJDRSwKKwkgIHdoaWNoIG1hdGNoZXMgYW4gZWFybGllciBjaGFuZ2UgdG8gQ0ZfU0hBUkVEX09QVFMsIGZyb20geHRlcm0gIzIyNAorCSAgZml4ZXMuCisJKyByZW1vdmUgIiR7REVTVERJUn0iIGZyb20gLWluc3RhbGxfbmFtZSBvcHRpb24gdXNlZCBmb3IgbGlua2luZworCSAgc2hhcmVkIGxpYnJhcmllcyBvbiBEYXJ3aW4gKHJlcG9ydCBieSBNaWNoYWlsIFZpZGlhc3NvdikuCisKKzIwMDcwMjEwCisJKyBhZGQgdGVzdC9pbmNocy5jLCB0ZXN0L2luY2hfd2lkZS5jLCB0byB0ZXN0IHdpbl93Y2huc3RyKCkuCisJKyByZW1vdmUgbGliZGwgZnJvbSBsaWJyYXJ5IGxpc3QgZm9yIHRlcm1saWIgKHJlcG9ydCBieSBNaXJvc2xhdgorCSAgTGljaHZhcikuCisJKyBmaXggY29uZmlndXJlLmluIHRvIGFsbG93IC0td2l0aG91dC1wcm9ncyAtLXdpdGgtdGVybWxpYiAocGF0Y2ggYnkKKwkgIE1pcm9zbGF2IExpY2h2YXIpLgorCSsgbW9kaWZ5IHdpbl93Y2huc3RyKCkgdG8gZW5zdXJlIHRoYXQgb25seSBhIGJhc2UgY2VsbCBpcyByZXR1cm5lZAorCSAgZm9yIGVhY2ggbXVsdGktY29sdW1uIGNoYXJhY3RlciAocHJvbXB0ZWQgYnkgcmVwb3J0IGJ5IFdlaSBLb25nCisJICByZWdhcmRpbmcgY2hhbmdlIGluIG12d2luX3djaCgpIGNmOiAyMDA0MTAyMykuCisKKzIwMDcwMjAzCisJKyBtb2RpZnkgZml4X3djaG5zdHIoKSBpbiBmb3JtIGxpYnJhcnkgdG8gc3RyaXAgYXR0cmlidXRlcyAoYW5kIGNvbG9yKQorCSAgZnJvbSB0aGUgY2NoYXJfdCBhcnJheSAoZmllbGQgY2VsbHMpIHJlYWQgZnJvbSBhIGZpZWxkJ3Mgd2luZG93LgorCSAgT3RoZXJ3aXNlLCB3aGVuIGNvcHlpbmcgdGhlIGZpZWxkIGNlbGxzIGJhY2sgdG8gdGhlIHdpbmRvdywgdGhlCisJICBhc3NvY2lhdGVkIGNvbG9yIG92ZXJyaWRlcyB0aGUgZmllbGQncyBiYWNrZ3JvdW5kIGNvbG9yIChyZXBvcnQgYnkKKwkgIFJpY2FyZG8gQ2FudHUpLgorCSsgaW1wcm92ZSB0cmFjaW5nIGZvciBmb3JtIGxpYnJhcnksIHNob3dpbmcgY3JlYXRlZCBmb3JtcywgZmllbGRzLCBldGMuCisJKyBpZ25vcmUgLS1lbmFibGUtcnBhdGggY29uZmlndXJlIG9wdGlvbiBpZiAtLXdpdGgtc2hhcmVkIHdhcyBvbWl0dGVkLgorCSsgYWRkIF9uY19sZWFrc190aW5mbygpLCBfbmNfZnJlZV90aWMoKSwgX25jX2ZyZWVfdGluZm8oKSBlbnRyeXBvaW50cworCSAgdG8gYWxsb3cgbGVhay1jaGVja2luZyB3aGVuIGJvdGggdGljLSBhbmQgdGluZm8tbGlicmFyaWVzIGFyZSBidWlsdC4KKwkrIGRyb3AgQ0ZfQ1BQX1ZTQ0FOX0ZVTkMgbWFjcm8gZnJvbSBjb25maWd1cmUgc2NyaXB0LCBzaW5jZSBDKysgYmluZGluZworCSAgbm8gbG9uZ2VyIHJlbGllcyBvbiBpdC4KKwkrIGRpc2FsbG93IGNvbWJpbmluZyBjb25maWd1cmUgc2NyaXB0IG9wdGlvbnMgLS13aXRoLXRpY2xpYiBhbmQKKwkgIC0tZW5hYmxlLXRlcm1jYXAgKHJlcG9ydCBieSBSb25nLUVuIEZhbikuCisJKyByZW1vdmUgdGFjayBmcm9tIG5jdXJzZXMgdHJlZS4KKworMjAwNzAxMjgKKwkrIGZpeCB0eXBvIGluIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCBicm9rZSAtLXdpdGgtdGVybWxpYiBvcHRpb24KKwkgIChyZXBvcnQgYnkgUm9uZy1FbiBGYW4pLgorCisyMDA3MDEyNworCSsgaW1wcm92ZSBmaXggZm9yIEZyZWVCU0QgZ251Lzk4OTc1LCB0byBhbGxvdyBmb3IgbnVsbCBwb2ludGVyIHBhc3NlZAorCSAgdG8gdGdldGVudCgpIChyZXBvcnQgYnkgUm9uZy1lbiBGYW4pLgorCSsgdXBkYXRlIHRhY2svSElTVE9SWSBhbmQgdGFjay9SRUFETUUgdG8gdGVsbCBob3cgdG8gYnVpbGQgaXQgYWZ0ZXIKKwkgIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgbmN1cnNlcyB0cmVlLgorCSsgZml4IGNvbmZpZ3VyZSBjaGVjayBmb3IgbGlidG9vbCdzIHZlcnNpb24gdG8gdHJpbSBibGFuayBsaW5lcworCSAgKHJlcG9ydCBieSBzY2ktZmlAaHVzaC5haSkuCisJKyByZXZpZXcvZWxpbWluYXRlIG90aGVyIG9yaWdpbmFsLWZpbGUgYXJ0aWZhY3RzIGluIGN1cnNlc3cuY2MsIG1ha2luZworCSAgaXRzIGxpY2Vuc2UgY29uc2lzdGVudCB3aXRoIG5jdXJzZXMuCisJKyB1c2UgbmN1cnNlcyB2d19zY2FudygpIHJhdGhlciB0aGFuIHJlYWRpbmcgaW50byBhIGZpeGVkIGJ1ZmZlciBpbgorCSAgdGhlIGMrKyBiaW5kaW5nIGZvciBzY2FudygpIG1ldGhvZHMgKHByb21wdGVkIGJ5IHJlcG9ydCBieSBOdW5vIERpYXMpLgorCSsgZWxpbWluYXRlIGZpeGVkLWJ1ZmZlciB2c3ByaW50ZigpIGNhbGxzIGluIGMrKyBiaW5kaW5nLgorCisyMDA3MDEyMAorCSsgYWRkIF9uY19sZWFrc190aWMoKSB0byBzZXBhcmF0ZSBsZWFrLWNoZWNraW5nIG9mIHRpYyBsaWJyYXJ5IGZyb20KKwkgIHRlcm0vbmN1cnNlcyBsaWJyYXJpZXMsIGFuZCB0aGVyZWJ5IGVsaW1pbmF0ZSBhIGxpYnJhcnkgZGVwZW5kZW5jeS4KKwkrIGZpeCB0ZXN0L21rLXRlc3QuYXdrIHRvIGlnbm9yZSBibGFuayBsaW5lcy4KKwkrIGNvcnJlY3QgcGF0aHMgaW4gaW5jbHVkZS9oZWFkZXJzLCBmb3IgLS1zcmNkaXIgKHBhdGNoIGJ5IE1pcm9zbGF2CisJICBMaWNodmFyKS4KKworMjAwNzAxMTMKKwkrIGFkZCBhIGJyZWFrLXN0YXRlbWVudCBpbiBtaXNjL3NobGliIHRvIGVuc3VyZSB0aGF0IGl0IGV4aXRzIG9uIHRoZQorCSAgX2ZpcnN0XyBtYXRjaGVkIGRpcmVjdG9yeSAocmVwb3J0IGJ5IFBhdWwgTm92YWspLgorCSsgYWRkIHRhY2svY29uZmlndXJlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBidWlsZCB0YWNrIG91dHNpZGUgdGhlCisJICBuY3Vyc2VzIGJ1aWxkLXRyZWUuCisJKyBhZGQgLS13aXRoLXRpY2xpYiBvcHRpb24sIHRvIGJ1aWxkL2luc3RhbGwgdGhlIHRpYy1zdXBwb3J0IGZ1bmN0aW9ucworCSAgaW4gYSBzZXBhcmF0ZSBsaWJyYXJ5IChzdWdnZXN0ZWQgYnkgTWlyb3NsYXYgTGljaHZhcikuCisKKzIwMDcwMTA2CisJKyBjaGFuZ2UgTUt1bmN0cmwuYXdrIHRvIHJlZHVjZSByZWxvY2F0aW9uIHRhYmxlIGZvciB1bmN0cmwubworCSsgY2hhbmdlIE1La2V5bmFtZS5hd2sgdG8gcmVkdWNlIHJlbG9jYXRpb24gdGFibGUgZm9yIGtleW5hbWUubworCSAgKHBhdGNoIGJ5IE1pcm9zbGF2IExpY2h2YXIpLgorCisyMDA2MTIzMAorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBjaGVjayBmb3IgbGlidG9vbCdzIHZlcnNpb24gdG8gdHJpbSBibGFuayBsaW5lcworCSAgKHJlcG9ydCBieSBzY2ktZmlAaHVzaC5haSkuCisJKyBtb2RpZnkgc29tZSBtb2R1bGVzIHRvIGFsbG93IHRoZW0gdG8gYmUgcmVlbnRyYW50IGlmIF9SRUVOVFJBTlQgaXMKKwkgIGRlZmluZWQ6IGxpYl9iYXVkcmF0ZS5jLCByZXNpemV0ZXJtLmMgKGxvY2FsIGRhdGEgb25seSkKKwkrIGVsaW1pbmF0ZSBzdGF0aWMgZGF0YSBmcm9tIHNvbWUgbW9kdWxlczogYWRkX3RyaWVzLmMsIGhhcmRzY3JvbGwuYywKKwkgIGxpYl90dHlmbGFncy5jLCBsaWJfdHdhaXQuYworCSsgaW1wcm92ZSBtYW5wYWdlIGluc3RhbGwgdG8gYWRkIGFsaWFzZXMgZm9yIHRoZSB0cmFuc2Zvcm1lZCBwcm9ncmFtCisJICBuYW1lcywgZS5nLiwgZnJvbSAtLXByb2dyYW0tcHJlZml4LgorCSsgdXNlZCBsaW5rbGludCB0byB2ZXJpZnkgbGlua3MgaW4gdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiwgbWFkZSBmaXhlcworCSAgdG8gbWFucGFnZXMgYXMgbmVlZGVkLgorCSsgZml4IGEgdHlwbyBpbiBjdXJzX21vdXNlLjN4IChyZXBvcnQgYnkgV2lsbGlhbSBNY0JyaW5lKS4KKwkrIGZpeCBpbnN0YWxsLXJ1bGUgZm9yIG5jdXJzZXM1LWNvbmZpZyB0byBtYWtlIHRoZSBiaW4tZGlyZWN0b3J5LgorCisyMDA2MTIyMworCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gb21pdCB0aGUgdGljICh0ZXJtaW5mbyBjb21waWxlcikgc3VwcG9ydAorCSAgZnJvbSBuY3Vyc2VzIGxpYnJhcnkgaWYgLS13aXRob3V0LXByb2dzIG9wdGlvbiBpcyBnaXZlbi4KKwkrIG1vZGlmeSBpbnN0YWxsIHJ1bGUgZm9yIG5jdXJzZXM1LWNvbmZpZyB0byBkbyB0aGlzIHZpYSAiaW5zdGFsbC5saWJzIgorCSsgbW9kaWZ5IHNoYXJlZC1saWJyYXJ5IHJ1bGVzIHRvIGFsbG93IEZyZWVCU0QgMy54IHRvIHVzZSBycGF0aC4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKworMjAwNjEyMTcgNS42IHJlbGVhc2UgZm9yIHVwbG9hZCB0byBmdHAuZ251Lm9yZworCisyMDA2MTIxNworCSsgYWRkIGlmZGVmJ3MgZm9yIDx3Y3R5cGUuaD4gZm9yIEhQVVgsIHdoaWNoIGhhcyB0aGUgY29ycmVzcG9uZGluZworCSAgZGVmaW5pdGlvbnMgaW4gPHdjaGFyLmg+LgorCSsgcmV2ZXJ0IHRoZSB2YV9jb3B5KCkgY2hhbmdlIGZyb20gMjAwNjEyMDIsIHNpbmNlIGl0IHdhcyBuZWl0aGVyCisJICBjb3JyZWN0IG5vciBwb3J0YWJsZS4KKwkrIGFkZCAkKExPQ0FMX0xJQlMpIGRlZmluaXRpb24gdG8gcHJvZ3MvTWFrZWZpbGUuaW4sIG5lZWRlZCBmb3IKKwkgIHJwYXRoIG9uIFNvbGFyaXMuCisJKyBpZ25vcmUgd2lkZS1hY3MgbGluZS1kcmF3aW5nIGNoYXJhY3RlcnMgdGhhdCB3Y3dpZHRoKCkgY2xhaW1zIGFyZQorCSAgbm90IG9uZS1jb2x1bW4uICBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgU29sYXJpcycgYnJva2VuIGxvY2FsZQorCSAgc3VwcG9ydC4KKworMjAwNjEyMTYKKwkrIG1vZGlmeSBjb25maWd1cmUgLS13aXRoLWdwbSBvcHRpb24gdG8gYWxsb3cgaXQgdG8gYWNjZXB0IGEgcGFyYW1ldGVyLAorCSAgaS5lLiwgdGhlIG5hbWUgb2YgdGhlIGR5bmFtaWMgR1BNIGxpYnJhcnkgdG8gbG9hZCB2aWEgZGxvcGVuKCkKKwkgIChyZXF1ZXN0ZWQgYnkgQnJ5YW4gSGVuZGVyc29uKS4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC12YWxncmluZCwgY2hhbmdlcyBmcm9tIHZpbGUuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBBQ19UUllfUlVOIGFuZCBBQ19UUllfTElOSyBjaGVja3MgdG8gdXNlCisJICAncmV0dXJuJyBpbiBwcmVmZXJlbmNlIHRvICdleGl0KCknLgorCisyMDA2MTIwOQorCSsgY2hhbmdlIGRlZmF1bHQgZm9yIC0td2l0aC1kZXZlbG9wIGJhY2sgdG8gIm5vIi4KKwkrIGFkZCBYVEFCUyB0byB0cmFjaW5nIG9mIFRUWSBiaXRzLgorCSsgdXBkYXRlZCBhdXRvY29uZiBwYXRjaCB0byBpZmRlZi1vdXQgdGhlIG1pc2ZlYXR1cmUgd2hpY2ggZGVjbGFyZXMKKwkgIGV4aXQoKSBmb3IgY29uZmlndXJlIHRlc3RzLiAgVGhpcyBmaXhlcyBhIHJlZGVmaW5pdGlvbiB3YXJuaW5nIG9uCisJICBTb2xhcmlzLgorCSsgdXNlICR7Q0N9IHJhdGhlciB0aGFuICR7TER9IGluIHNoYXJlZCBsaWJyYXJ5IHJ1bGVzIGZvciBJUklYNjQsCisJICBTb2xhcmlzIHRvIGhlbHAgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gc2VjdGlvbnMgYXJlIHByb3ZpZGVkIGZvcgorCSAgZXh0cmEgbGlua2FnZSByZXF1aXJlbWVudHMsIGUuZy4sIG9mIEMrKyBhcHBsaWNhdGlvbnMgKHByb21wdGVkIGJ5CisJICBjb21tZW50IGJ5IENhc3BlciBEaWsgaW4gbmV3c2dyb3VwKS4KKwkrIHJlbmFtZSAiJHRhcmdldCIgaW4gQ0ZfTUFOX1BBR0VTIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRpc3Rpbmd1aXNoCisJICBmcm9tIHRoZSBhdXRvY29uZiBwcmVkZWZpbmVkIHN5bWJvbC4gIFRoZXJlIHdhcyBubyBjb25mbGljdCwKKwkgIHNpbmNlICIkdGFyZ2V0IiB3YXMgdXNlZCBvbmx5IGluIHRoZSBnZW5lcmF0ZWQgZWRpdF9tYW4uc2ggZmlsZSwKKwkgIGJ1dCBTdVNFJ3MgcnBtIHBhY2thZ2UgY29udGFpbnMgYSBwYXRjaC4KKworMjAwNjEyMDIKKwkrIHVwZGF0ZSBtYW4vdGVybS41IHRvIHJlZmxlY3QgZXh0ZW5kZWQgdGVybWluZm8gc3VwcG9ydCBhbmQgaGFzaGVkCisJICBkYXRhYmFzZSBjb25maWd1cmF0aW9uLgorCSsgdXBkYXRlcyBmb3IgdGVzdC9jb25maWd1cmUgc2NyaXB0LgorCSsgYWRhcHRlZCBmcm9tIFN1U0UgcnBtIHBhY2thZ2U6CisJICArIHJlbW92ZSBsb25nLW9ic29sZXRlIHdvcmthcm91bmQgZm9yIGJyb2tlbi1saW5rZXIgd2hpY2ggZGVjbGFyZWQKKwkgICAgY3VyX3Rlcm0gaW4gdGljLmMKKwkgICsgaW1wcm92ZSBlcnJvciByZWNvdmVyeSBpbiBQVVRDKCkgbWFjcm8gd2hlbiB3Y3J0b21iKCkgZG9lcyBub3QKKwkgICAgcmV0dXJuIHVzYWJsZSByZXN1bHRzIGZvciBhbiA4LWJpdCBjaGFyYWN0ZXIuCisJKyBwYXRjaGVzIGZyb20gcnBtIHBhY2thZ2UgKFN1U0UpOgorCSAgKyB1c2UgdmFfY29weSgpIGluIGV4dHJhIHZhcmFyZ3MgbWFuaXB1bGF0aW9uIGZvciB0cmFjaW5nIHZlcnNpb24KKwkgICAgb2YgcHJpbnR3LCBldGMuCisJICArIHVzZSBhIHZhX2xpc3QgcmF0aGVyIHRoYW4gYSBudWxsIGluIF9uY19mcmVlYWxsKCkncyBjYWxsIHRvCisJICAgIF9uY19wcmludGZfc3RyaW5nKCkuCisJKyBhZGQgc29tZSBzZWUtYWxzbyByZWZlcmVuY2VzIGluIG1hbnBhZ2VzIHRvIHNob3cgcmVsYXRlZAorCSAgd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zIChzdWdnZXN0ZWQgYnkgQ2xhdXMgRmlzY2hlcikuCisKKzIwMDYxMTI1CisJKyBhZGQgYSBjaGVjayBpbiBsaWJfY29sb3IuYyB0byBlbnN1cmUgY2FsbGVyIGRvZXMgbm90IGluY3JlYXNlIENPTE9SUworCSAgYWJvdmUgbWF4X2NvbG9ycywgd2hpY2ggaXMgdXNlZCBhcyBhbiBhcnJheSBpbmRleCAoZGlzY3Vzc2lvbiB3aXRoCisJICBTaW1vbiBTYXNidXJnKS4KKwkrIGFkZCBpZmRlZidzIGFsbG93aW5nIG5jdXJzZXMgdG8gYmUgYnVpbHQgd2l0aCB0cGFybSgpIHVzaW5nIGVpdGhlcgorCSAgdmFyYXJncyAodGhlIGV4aXN0aW5nIHN0YXR1cyksIG9yIHVzaW5nIGEgZml4ZWQtcGFyYW1ldGVyIGxpc3QgKHRvCisJICBtYXRjaCBYL09wZW4pLgorCisyMDA2MTEwNAorCSsgZml4IHJlZHJhd2luZyBvZiB3aW5kb3dzIG90aGVyIHRoYW4gc3Rkc2NyIHVzaW5nIHdyZWRyYXdsbigpIGJ5CisJICB0b3VjaGluZyB0aGUgY29ycmVzcG9uZGluZyByb3dzIGluIGN1cnNjciAoZGlzY3Vzc2lvbiB3aXRoIERhbgorCSAgR29va2luKS4KKwkrIGFkZCB0ZXN0L3JlZHJhdy5jCisJKyBhZGQgdGVzdC9lY2hvY2hhci5jCisJKyByZXZpZXcvY2xlYW51cCBtYW5wYWdlIGRlc2NyaXB0aW9ucyBvZiBlcnJvci1yZXR1cm5zIGZvciBmb3JtLSBhbmQKKwkgIG1lbnUtbGlicmFyaWVzIChwcm9tcHRlZCBieSBGcmVlQlNEIGRvY3MvNDYxOTYpLgorCisyMDA2MTAyOAorCSsgYWRkIEFVVEhPUlMgZmlsZSAtVEQKKwkrIG9taXQgdGhlIC1EIG9wdGlvbnMgZnJvbSBvdXRwdXQgb2YgdGhlIG5ldyBjb25maWcgc2NyaXB0IC0tY2ZsYWdzCisJICBvcHRpb24gKHN1Z2dlc3RlZCBieSBSYWxmIFMgRW5nZWxzY2hhbGwpLgorCSsgbWFrZSBOQ1VSU0VTX0lOTElORSB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lZCBpbiBjdXJzZXMuaAorCisyMDA2MTAyMQorCSsgcmV2ZXJ0IGNoYW5nZSB0byBhY2NvbW1vZGF0ZSBiYXNoIDMuMiwgc2luY2UgdGhhdCBicmVha3Mgb3RoZXIKKwkgIHBsYXRmb3JtcywgZS5nLiwgU29sYXJpcy4KKwkrIG1pbm9yIGZpeGVzIHRvIE5FV1MgZmlsZSB0byBzaW1wbGlmeSBzY3JpcHRpbmcgdG8gb2J0YWluIGxpc3Qgb2YKKwkgIGNvbnRyaWJ1dG9ycy4KKwkrIGltcHJvdmUgc29tZSBzaGFyZWQtbGlicmFyeSBjb25maWd1cmUgc2NyaXB0aW5nIGZvciBMaW51eCwgRnJlZUJTRAorCSAgYW5kIE5ldEJTRCB0byBtYWtlICItLXdpdGgtc2hsaWItdmVyc2lvbiIgd29yay4KKwkrIGNoYW5nZSBjb25maWd1cmUtc2NyaXB0IHJ1bGVzIGZvciBGcmVlQlNEIHNoYXJlZCBsaWJyYXJpZXMgdG8gYWxsb3cKKwkgIGZvciBycGF0aCBzdXBwb3J0IGluIHZlcnNpb25zIHBhc3QgMy4KKwkrIHVzZSAkKERFU1RESVIpIGluIG1ha2VmaWxlIHJ1bGVzIGZvciBpbnN0YWxsaW5nL3VuaW5zdGFsbGluZyB0aGUKKwkgIHBhY2thZ2UgY29uZmlnIHNjcmlwdCAocmVwb3J0cy9wYXRjaGVzIGJ5IENocmlzdGlhbiBXaWVzZSwKKwkgIFJhbGYgUyBFbmdlbHNjaGFsbCkuCisJKyBmaXggYSB3YXJuaW5nIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGZvciBOZXRCU0QgMi4wLCB3b3JraW5nIGFyb3VuZAorCSAgc3B1cmlvdXMgYmxhbmtzIGVtYmVkZGVkIGluIGl0cyAke01BS0VGTEFHU30gc3ltYm9sLgorCSsgY2hhbmdlIHRlc3QvTWFrZWZpbGUgdG8gc2ltcGxpZnkgaW5zdGFsbGluZyB0ZXN0IHByb2dyYW1zIGluIGEKKwkgIGRpZmZlcmVudCBkaXJlY3Rvcnkgd2hlbiAtLWVuYWJsZS1ycGF0aCBpcyB1c2VkLgorCisyMDA2MTAxNAorCSsgd29yayBhcm91bmQgYnVnIGluIGJhc2ggMy4yIGJ5IGFkZGluZyBleHRyYSBxdW90ZXMgKEppbSBHaWZmb3JkKS4KKwkrIGFkZC9pbnN0YWxsIGEgcGFja2FnZSBjb25maWcgc2NyaXB0LCBlLmcuLCAibmN1cnNlczUtY29uZmlnIiBvcgorCSAgIm5jdXJzZXN3NS1jb25maWciLCBhY2NvcmRpbmcgdG8gY29uZmlndXJhdGlvbiBvcHRpb25zLgorCisyMDA2MTAwNworCSsgYWRkIHNldmVyYWwgR05VIFNjcmVlbiB0ZXJtaW5mbyB2YXJpYXRpb25zIHdpdGggMTYtIGFuZCAyNTYtY29sb3JzLAorCSAgYW5kIHN0YXR1cyBsaW5lIChBbGFpbiBCZW5jaCkuCisJKyBjaGFuZ2UgdGhlIHdheSBzaGFyZWQgbGlicmFyaWVzIChvdGhlciB0aGFuIGxpYnRvb2wpIGFyZSBpbnN0YWxsZWQuCisJICBSYXRoZXIgdGhhbiBjb3B5aW5nIHRoZSBidWlsZC10cmVlJ3MgbGlicmFyaWVzLCBsaW5rIHRoZSBzaGFyZWQKKwkgIG9iamVjdHMgaW50byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkuICBUaGlzIG1ha2VzIHRoZSAtLXdpdGgtcnBhdGgKKwkgIG9wdGlvbiB3b3JrIGV4Y2VwdCB3aXRoICQoREVTVERJUikgKGNmOiAyMDAwMDkzMCkuCisKKzIwMDYwOTMwCisJKyBmaXggaWZkZWYgaW4gYysrL2ludGVybmFsLmggZm9yIFFOWCA2LjEKKwkrIHRlc3QtY29tcGlsZWQgd2l0aCAob2xkKSBlZ2NzLTEuMS4yLCBtb2RpZmllZCBjb25maWd1cmUgc2NyaXB0IHRvCisJICBub3QgdW5zZXQgdGhlICRDWFggYW5kIHJlbGF0ZWQgdmFyaWFibGVzIHdoaWNoIHdvdWxkIHByZXZlbnQgdGhpcy4KKwkrIGZpeCBhIGZldyB0ZXJtaW5mby5zcmMgdHlwb3MgZXhwb3NlZCBieSBpbXByb3ZtZW50cyB0byAiLWYiIG9wdGlvbi4KKwkrIGltcHJvdmUgaW5mb2NtcC90aWMgIi1mIiBvcHRpb24gZm9ybWF0dGluZy4KKworMjAwNjA5MjMKKwkrIG1ha2UgLS1kaXNhYmxlLWxhcmdlZmlsZSBvcHRpb24gd29yayAocmVwb3J0IGJ5IFRob21hcyBNIE90dCkuCisJKyB1cGRhdGVkIGh0bWwgZG9jdW1lbnRhdGlvbi4KKwkrIGFkZCBrYTIsIGtiMSwga2IzLCBrYzIgdG8gdnQyMjAta2V5cGFkIGFzIGFuIGV4dGVuc2lvbiAtVEQKKwkrIG1pbm9yIGltcHJvdmVtZW50cyB0byByeHZ0K3BjZmtleXMgLVRECisKKzIwMDYwOTE2CisJKyBtb3ZlIHN0YXRpYyBkYXRhIGZyb20gbGliX21vdXNlLmMgaW50byBTQ1JFRU4gc3RydWN0LgorCSsgaW1wcm92ZSBpZmRlZidzIGZvciBfUE9TSVhfVkRJU0FCTEUgaW4gdHNldCB0byB3b3JrIHdpdGggTWFjIE9TIFgKKwkgIChyZXBvcnQgYnkgTWljaGFpbCBWaWRpYXNzb3YpLgorCSsgbW9kaWZ5IENGX1BBVEhfU1lOVEFYIHRvIGVuc3VyZSBpdCB1c2VzIHRoZSByZXN1bHQgZnJvbSAtLXByZWZpeAorCSAgb3B0aW9uIChmcm9tIGx5bnggY2hhbmdlcykgLVRECisJKyBhZGFwdCBBQ19QUk9HX0VHUkVQIGNoZWNrLCBub3RpbmcgdGhhdCB0aGlzIGlzIGxpa2VseSB0byBiZSBhbm90aGVyCisJICBwbGFjZSBhZ2dyYXZhdGVkIGJ5IFBPU0lYTFlfQ09SUkVDVC4KKwkrIG1vZGlmeSBjb25maWd1cmUgY2hlY2sgZm9yIGF3ayB0byBlbnN1cmUgdGhhdCBpdCBpcyBmb3VuZCAocHJvbXB0ZWQKKwkgIGJ5IHJlcG9ydCBieSBDaHJpc3RvcGhlciBQYXJrZXIpLgorCSsgdXBkYXRlIGNvbmZpZy5zdWIKKworMjAwNjA5MDkKKwkrIGFkZCBrb24sIGtvbjIgYW5kIGpmYnRlcm0gdGVybWluZm8gZW50cnkgKHJlcXVlc3QgYnkgVGlsbCBNYWFzKSAtVEQKKwkrIHJlbW92ZSBpbnZpcyBjYXBhYmlsaXR5IGZyb20ga2xvbmUrc2dyLCBtYWlubHkgdXNlZCBieSBsaW51eCBlbnRyeSwKKwkgIHNpbmNlIGl0IGRvZXMgbm90IHJlYWxseSBkbyB0aGlzIC1URAorCisyMDA2MDkwMworCSsgY29ycmVjdCBsb2dpYyBpbiB3YWRkX3djaCgpIGFuZCB3ZWNob193Y2goKSwgd2hpY2ggZGlkIG5vdCBndWFyZAorCSAgYWdhaW5zdCBwYXNzaW5nIHRoZSBtdWx0aS1jb2x1bW4gYXR0cmlidXRlIGludG8gYSBjYWxsIG9uIHdhZGRjaCgpLAorCSAgZS5nLiwgdXNpbmcgZGF0YSByZXR1cm5lZCBieSB3aW5fd2NoKCkgKGNmOiAyMDA0MTAyMykKKwkgIChyZXBvcnQgYnkgU2FkcnVsIEggQ2hvd2RodXJ5KS4KKworMjAwNjA5MDIKKwkrIGZpeCBrdGVybSdzIGFjc2Mgc3RyaW5nIC1URAorCSsgZml4IGZvciBjaGFuZ2UgdG8gdGljL2luZm9jbXAgaW4gMjAwNjA4MTkgdG8gZW5zdXJlIG5vIGJsYW5rIGlzCisJICBlbWJlZGRlZCBpbnRvIGEgdGVybWNhcCBkZXNjcmlwdGlvbi4KKwkrIHdvcmthcm91bmQgZm9yIDIwMDUwODA2IGlmZGVmJ3MgY2hhbmdlIHRvIGFsbG93IHZpc2J1Zi5jIHRvIGNvbXBpbGUKKwkgIHdoZW4gdXNpbmcgLS13aXRoLXRlcm1saWIgLS13aXRoLXRyYWNlIG9wdGlvbnMuCisJKyBpbXByb3ZlIHRnZXRzdHIoKSBieSBtYWtpbmcgdGhlIHJldHVybiB2YWx1ZSBwb2ludCBpbnRvIHRoZSB1c2VyJ3MKKwkgIGJ1ZmZlciwgaWYgcHJvdmlkZWQgKHBhdGNoIGJ5IE1pcm9zbGF2IExpY2h2YXIgKHNlZSBSZWRoYXQgQnVnemlsbGEKKwkgICMyMDI0ODApKS4KKwkrIGNvcnJlY3QgbGlicmFyaWVzIG5lZWRlZCBmb3IgZm9sZGtleXMgKHJlcG9ydCBieSBTdGFuaXNsYXYgSWV2bGV2KQorCisyMDA2MDgyNgorCSsgYWRkIHRlcm1pbmZvIGVudHJpZXMgZm9yIHhmY2UgdGVybWluYWwgKHhmY2UpIGFuZCBtdWx0aSBnbm9tZQorCSAgdGVybWluYWwgKG1ndCkgLVRECisJKyBhZGQgdGVzdC9mb2xka2V5cy5jCisKKzIwMDYwODE5CisJKyBtb2RpZnkgdGljIGFuZCBpbmZvY21wIHRvIGF2b2lkIHdyaXRpbmcgdHJhaWxpbmcgYmxhbmtzIG9uIHRlcm1pbmZvCisJICBzb3VyY2Ugb3V0cHV0IChEZWJpYW4gIzM3ODc4MykuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBlbnN1cmUgdGhhdCBpZiB0aGUgQyBjb21waWxlciBpcyB1c2VkCisJICByYXRoZXIgdGhhbiB0aGUgbG9hZGVyIGluIG1ha2luZyBzaGFyZWQgbGlicmFyaWVzLCB0aGUgJChDRkxBR1MpCisJICB2YXJpYWJsZSBpcyBhbHNvIHVzZWQgKFJlZGhhdCBCdWd6aWxsYSAjMTk5MzY5KS4KKwkrIHBvcnQgaGFzaGVkLWRiIGNvZGUgdG8gZGIyIGFuZCBkYjMuCisJKyBmaXggYSBidWcgaW4gdGdldGVudCgpIGZyb20gMjAwNjA2MjUgYW5kIDIwMDYwNzE1IGNoYW5nZXMKKwkgIChwYXRjaC9hbmFseXNpcyBieSBNaXJvc2xhdiBMaWNodmFyIChzZWUgUmVkaGF0IEJ1Z3ppbGxhICMyMDI0ODApKS4KKworMjAwNjA4MDUKKwkrIHVwZGF0ZWQgeHRlcm0gZnVuY3Rpb24ta2V5cyB0ZXJtaW5mbyB0byBtYXRjaCB4dGVybSAjMjE2IC1URAorCSsgYWRkIGNvbmZpZ3VyZSAtLXdpdGgtaGFzaGVkLWRiIG9wdGlvbiAodGVzdGVkIG9ubHkgd2l0aCBGcmVlQlNEIDYuMCwKKwkgIGUuZy4sIHRoZSBkYiAxLjguNSBpbnRlcmZhY2UpLgorCisyMDA2MDcyOQorCSsgbW9kaWZ5IHRvZSB0byBhY2Nlc3MgdGVybWNhcCBkYXRhLCBlLmcuLCB2aWEgY2dldGVudCgpIGZ1bmN0aW9ucywKKwkgIG9yIGFzIGEgdGV4dCBmaWxlIGlmIHRob3NlIGFyZSBub3QgYXZhaWxhYmxlLgorCSsgdXNlIF9uY19iYXNlbmFtZSgpIGluIHRzZXQgdG8gaW1wcm92ZSAkU0hFTEwgY2hlY2sgZm9yIGNzaC9zaC4KKwkrIG1vZGlmeSBfbmNfcmVhZF9lbnRyeSgpIGFuZCBfbmNfcmVhZF90ZXJtY2FwX2VudHJ5KCkgc28gaW5mb2NtcCwKKwkgIGNhbiBhY2Nlc3MgdGVybWNhcCBkYXRhIHdoZW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGlzIGRpc2FibGVkLgorCisyMDA2MDcyMgorCSsgd2lkZW4gdGhlIHRlc3QgZm9yIHh0ZXJtIGttb3VzIGEgbGl0dGxlIHRvIGFsbG93IGZvciBvdGhlciBzdHJpbmdzCisJICB0aGFuIFxFW00sIGUuZy4sIGZvciB4dGVybS1zY28gZnVuY3Rpb25hbGl0eSBpbiB4dGVybS4KKwkrIHVwZGF0ZSB4dGVybS1yZWxhdGVkIHRlcm1pbmZvIGVudHJpZXMgdG8gbWF0Y2ggeHRlcm0gcGF0Y2ggIzIxNiAtVEQKKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKworMjAwNjA3MTUKKwkrIGZpeCBmb3IgaW5zdGFsbC1ydWxlIGluIEFkYTk1IHRvIGFkZCB0ZXJtaW5hbF9pbnRlcmZhY2UuYWRzCisJICBhbmQgdGVybWluYWxfaW50ZXJmYWNlLmFsaSAoYW5vbnltb3VzIHBvc3RpbmcgaW4gY29tcC5sYW5nLmFkYSkuCisJKyBjb3JyZWN0aW9uIHRvIG1hbnBhZ2UgZm9yIGdldGNjaGFyKCkgKHJlcG9ydCBieSBXaWxsaWFtIE1jQnJpbmUpLgorCSsgYWRkIHRlc3QvY2hnYXQuYworCSsgbW9kaWZ5IHdjaGdhdCgpIHRvIG1hcmsgdXBkYXRlZCBjZWxscyBhcyBjaGFuZ2VkIHNvIGEgcmVmcmVzaCB3aWxsCisJICByZXBhaW50IHRob3NlIGNlbGxzIChjb21tZW50cyBieSBTYWRydWwgSCBDaG93ZGh1cnkgYW5kIFdpbGxpYW0KKwkgIE1jQnJpbmUpLgorCSsgc3BsaXQgdXAgZGVwZW5kZW5jeSBvZiBuYW1lcy5jIGFuZCBjb2Rlcy5jIGluIG5jdXJzZXMvTWFrZWZpbGUgdG8KKwkgIHdvcmsgd2l0aCBwYXJhbGxlbCBtYWtlIChyZXBvcnQvYW5hbHlzaXMgYnkgSm9zZXBoIFMgTXllcnMpLgorCSsgc3VwcHJlc3MgYSB3YXJuaW5nIG1lc3NhZ2UgKHdoaWNoIGlzIGlnbm9yZWQpIGZvciBzeXN0ZW1zIHdpdGhvdXQKKwkgIGFuIGxkY29uZmlnIHByb2dyYW0gKHBhdGNoIGJ5IEp1c3RpbiBIaWJiaXRzKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IC0tZGlzYWJsZS1zeW1saW5rcyBvcHRpb24gdG8gYWxsb3cgb25lIHRvCisJICBkaXNhYmxlIHN5bWxpbmsoKSBpbiB0aWMgZXZlbiB3aGVuIGxpbmsoKSBkb2VzIG5vdCB3b3JrIChyZXBvcnQgYnkKKwkgIE5pZ2VsIEhvcm5lKS4KKwkrIG1vZGlmeSBNS2ZhbGxiYWNrLnNoIHRvIHVzZSB0aWMgLXggd2hlbiBjb25zdHJ1Y3RpbmcgZmFsbGJhY2sgdGFibGVzCisJICB0byBhbGxvdyBleHRlbmRlZCBjYXBhYmlsaXRpZXMgdG8gYmUgcmV0cmlldmVkIGZyb20gYSBmYWxsYmFjayBlbnRyeS4KKwkrIGltcHJvdmUgbGVhay1jaGVja2luZyBsb2dpYyBpbiB0Z2V0ZW50KCkgZnJvbSAyMDA2MDYyNSB0byBlbnN1cmUgdGhhdAorCSAgaXQgZG9lcyBub3QgZnJlZSB0aGUgY3VycmVudCBzY3JlZW4gKHJlcG9ydCBieSBNaXJvc2xhdiBMaWNodmFyKS4KKworMjAwNjA3MDgKKwkrIGFkZCBhIGNoZWNrIGZvciBfUE9TSVhfVkRJU0FCTEUgaW4gdHNldCAoTmV0QlNEICMzMzkxNikuCisJKyBjb3JyZWN0IF9uY19mcmVlX2VudHJpZXMoKSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdXNlZCBmb3IgbWVtb3J5IGxlYWsKKwkgIGNoZWNraW5nIG9mIHRpYy4KKworMjAwNjA3MDEKKwkrIHJldmVydCBhIG1pbm9yIGNoYW5nZSBmb3IgbWFnaWMtY29va2llIHN1cHBvcnQgZnJvbSAyMDA2MDUxMywgd2hpY2gKKwkgIGNhdXNlZCB1bmV4cGVjdGVkIHJlc2V0IG9mIGF0dHJpYnV0ZXMsIGUuZy4sIHdoZW4gcmVzaXppbmcgdGVzdC92aWV3CisJICBpbiBjb2xvciBtb2RlLgorCSsgbm90ZSBpbiBjbGVhciBtYW5wYWdlIHRoYXQgdGhlIHByb2dyYW0gaWdub3JlcyBjb21tYW5kLWxpbmUKKwkgIHBhcmFtZXRlcnMgKHByb21wdGVkIGJ5IERlYmlhbiAjMzcxODU1KS4KKwkrIGZpeGVzIHRvIG1ha2UgbGliX2dlbi5jIGJ1aWxkIHByb3Blcmx5IHdpdGggY2hhbmdlcyB0byB0aGUgY29uZmlndXJlCisJICAtLWRpc2FibGUtbWFjcm9zIG9wdGlvbiBhbmQgTkNVUlNFU19OT01BQ1JPUyAoY2Y6ICAyMDA2MDUyNykKKwkrIHVwZGF0ZS9jb3JyZWN0IHNldmVyYWwgdGVybWluZm8gZW50cmllcyAtVEQKKwkrIGFkZCBzb21lIG5vdGVzIHJlZ2FyZGluZyBjb3B5cmlnaHQgdG8gdGVybWluZm8uc3JjIC1URAorCisyMDA2MDYyNQorCSsgZml4ZXMgdG8gYnVpbGQgQWRhOTUgYmluZGluZyB3aXRoIGduYXQtNC4xLjAKKwkrIG1vZGlmeSByZWFkX3Rlcm10eXBlKCkgc28gdGhlIHRlcm1fbmFtZXMgZGF0YSBpcyBhbHdheXMgYWxsb2NhdGVkIGFzCisJICBwYXJ0IG9mIHRoZSBzdHJfdGFibGUsIGEgYmV0dGVyIGZpeCBmb3IgYSBtZW1vcnkgbGVhayAoY2Y6IDIwMDMwODA5KS4KKwkrIHJlZHVjZSBtZW1vcnkgbGVha3MgaW4gcmVwZWF0ZWQgY2FsbHMgdG8gdGdldGVudCgpIGJ5IHJlbWVtYmVyaW5nIHRoZQorCSAgbGFzdCBURVJNSU5BTCogdmFsdWUgYWxsb2NhdGVkIHRvIGhvbGQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBhbmQKKwkgIGZyZWVpbmcgdGhhdCBpZiB0aGUgdGdldGVudCgpIHJlc3VsdCBidWZmZXIgaXMgdGhlIHNhbWUgYXMgdGhlCisJICBwcmV2aW91cyBjYWxsIChyZXBvcnQgYnkgIk1hdHQiIGZvciBGcmVlQlNEIGdudS85ODk3NSkuCisJKyBtb2RpZnkgdGFjayB0byB0ZXN0IGV4dGVuZGVkIGNhcGFiaWxpdHkgZnVuY3Rpb24ta2V5IHN0cmluZ3MuCisJKyBpbXByb3ZlZCBnbm9tZSB0ZXJtaW5mbyBlbnRyeSAoR2VuVG9vICMxMjI1NjYpLgorCSsgaW1wcm92ZWQgeHRlcm0tMjU2Y29sb3IgdGVybWluZm8gZW50cnkgKHBhdGNoIGJ5IEFsYWluIEJlbmNoKS4KKworMjAwNjA2MTcKKwkrIGZpeCB0d28gc21hbGwgbWVtb3J5IGxlYWtzIHJlbGF0ZWQgdG8gcmVwZWF0ZWQgdGdldGVudCgpIGNhbGxzCisJICB3aXRoIFRFUk09c2NyZWVuIChyZXBvcnQgYnkgIk1hdHQiIGZvciBGcmVlQlNEIGdudS85ODk3NSkuCisJKyBhZGQgLS1lbmFibGUtc2lnbmVkLWNoYXIgdG8gc2ltcGxpZnkgRGViaWFuIHBhY2thZ2UuCisJKyByZWR1Y2UgbmFtZS1wb2xsdXRpb24gaW4gdGVybS5oIGJ5IHJlbW92aW5nICNkZWZpbmUncyBmb3IgSEFWRV94eHgKKwkgIHN5bWJvbHMuCisJKyBjb3JyZWN0IHR5cG8gaW4gY3Vyc190ZXJtaW5mby4zeCAoRGViaWFuICMzNjkxNjgpLgorCisyMDA2MDYwMworCSsgZW5hYmxlIHRoZSBtb3VzZSBpbiB0ZXN0L21vdmV3aW5kb3cuYworCSsgaW1wcm92ZSBhIGxpbWl0LWNoZWNrIGluIGZybV9kZWYuYyAoSm9obiBIZWFzbGV5KS4KKwkrIG1pbm9yIGNvcHlyaWdodCBmaXhlcy4KKwkrIGNoYW5nZSBjb25maWd1cmUgc2NyaXB0IHRvIHByb2R1Y2UgdGVzdC9NYWtlZmlsZSBmcm9tIGRhdGEgZmlsZS4KKworMjAwNjA1MjcKKwkrIGFkZCBhIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtd2dldGNoLWV2ZW50cyB0byBlbmFibGUKKwkgIE5DVVJTRVNfV0dFVENIX0VWRU5UUywgYW5kIGNvcnJlY3QgdGhlIGFzc29jaWF0ZWQgbG9vcC1sb2dpYyBpbgorCSAgbGliX3R3YWl0LmMgKHJlcG9ydCBieSBCZXJuZCBKZW5kcmlzc2VrKS4KKwkrIHJlbW92ZSBpbmNsdWRlL25vbWFjcm9zLmggZnJvbSBidWlsZCwgc2luY2UgdGhlIGlmZGVmIGZvcgorCSAgTkNVUlNFU19OT01BQ1JPUyBtYWtlcyB0aGF0IG9ic29sZXRlLgorCSsgYWRkIGVudHJ5cG9pbnRzIGZvciBzb21lIGZ1bmN0aW9ucyB3aGljaCB3ZXJlIG9ubHkgcHJvdmlkZWQgYXMgbWFjcm9zCisJICB0byBtYWtlIE5DVVJTRVNfTk9NQUNST1MgaWZkZWYgd29yayBwcm9wZXJseTogIGdldGN1cngoKSwgZ2V0Y3VyeSgpLAorCSAgZ2V0YmVneCgpLCBnZXRiZWd5KCksIGdldG1heHgoKSwgZ2V0bWF4eSgpLCBnZXRwYXJ4KCkgYW5kIGdldHBhcnkoKSwKKwkgIHdnZXRia2dybmQoKS4KKwkrIHByb3ZpZGUgaWZkZWYgZm9yIE5DVVJTRVNfTk9NQUNST1Mgd2hpY2ggc3VwcHJlc3NlcyBtb3N0IG1hY3JvCisJICBkZWZpbml0aW9ucyBmcm9tIGN1cnNlcy5oLCBpLmUuLCB3aGVyZSBhIG1hY3JvIGlzIGRlZmluZWQgdG8gb3ZlcnJpZGUKKwkgIGEgZnVuY3Rpb24gdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4gIEFsbG93aW5nIGEgZGV2ZWxvcGVyIHRvIHN1cHByZXNzCisJICB0aGVzZSBkZWZpbml0aW9ucyBjYW4gc2ltcGxpZnkgc29tZSBhcHBsaWNhdGlvbiAoZGlzY3Vzc2lvbiB3aXRoCisJICBTdGFuaXNsYXYgSWV2bGV2KS4KKwkrIGltcHJvdmUgZGVzY3JpcHRpb24gb2YgbWVtdS9tZW1sIGluIHRlcm1pbmZvIG1hbnBhZ2UuCisKKzIwMDYwNTIwCisJKyBpZiBtc2dyIGlzIGZhbHNlLCByZXNldCB2aWRlbyBhdHRyaWJ1dGVzIHdoZW4gZG9pbmcgYW4gYXV0b21hcmdpbgorCSAgd3JhcCB0byB0aGUgbmV4dCBsaW5lLiAgVGhpcyBtYWtlcyB0aGUgbmN1cnNlcyAnaycgdGVzdCB3b3JrIHByb3Blcmx5CisJICBmb3IgaHB0ZXJtLgorCSsgY29ycmVjdCBjYWNoaW5nIG9mIGtleW5hbWUoKSwgd2hpY2ggd2FzIHVzaW5nIG9ubHkgaGFsZiBvZiBpdHMgdGFibGUuCisJKyBtaW5vciBmaXhlcyB0byBtZW1vcnktbGVhayBjaGVja2luZy4KKwkrIG1ha2UgU0NSRUVOLl9hY3NfbWFwIGFuZCBTQ1JFRU4uX3NjcmVlbl9hY3NfbWFwIHBvaW50ZXJzIHJhdGhlciB0aGFuCisJICBhcnJheXMsIG1ha2luZyBBQ1NfTEVOIGxlc3MgdmlzaWJsZSB0byBhcHBsaWNhdGlvbnMgKHN1Z2dlc3RlZCBieQorCSAgU3RhbmlzbGF2IElldmxldikuCisJKyBtb3ZlIGNodW5rIGluIFNDUkVFTiBpZmRlZidkIGZvciBVU0VfV0lERUNfU1VQUE9SVCB0byB0aGUgZW5kLCBzbworCSAgX3NjcmVlbl9hY3NfbWFwIHdpbGwgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgaW4gYm90aCBuY3Vyc2VzL25jdXJzZXN3LAorCSAgbWFraW5nIHRoZSBjb3JyZXNwb25kaW5nIHRpbmZvL3RpbmZvdyBsaWJyYXJpZXMgYmluYXJ5LWNvbXBhdGlibGUKKwkgIChjZjogMjAwNDEwMTYsIHJlcG9ydCBieSBTdGFuaXNsYXYgSWV2bGV2KS4KKworMjAwNjA1MTMKKwkrIGltcHJvdmUgZGVidWctdHJhY2luZyBmb3IgRW1pdFJhbmdlKCkuCisJKyBjaGFuZ2UgZGVmYXVsdCBmb3IgLS13aXRoLWRldmVsb3AgdG8gInllcyIuICBBZGQgTkNVUlNFU19OT19IQVJEX1RBQlMKKwkgIGFuZCBOQ1VSU0VTX05PX01BR0lDX0NPT0tJRSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYWxsb3cgcnVudGltZQorCSAgc3VwcHJlc3Npb24gb2YgdGhlIHJlbGF0ZWQgaGFyZC10YWJzIGFuZCB4bWMtZ2xpdGNoIGZlYXR1cmVzLgorCSsgYWRkIG5jdXJzZXMgdmVyc2lvbiBudW1iZXIgdG8gdG9wLWxldmVsIG1hbnBhZ2VzLCBlLmcuLCBuY3Vyc2VzLCB0aWMsCisJICBpbmZvY21wLCB0ZXJtaW5mbyBhcyB3ZWxsIGFzIGZvcm0sIG1lbnUsIHBhbmVsLgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YgorCSsgbW9kaWZ5IG5jdXJzZXMuYyB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBOZXRCU0QgMy4wIGN1cnNlcworCSAgKGZpZWxkX2J1ZmZlciByZXR1cm5pbmcgbnVsbCBmb3IgYSB2YWxpZCBmaWVsZCkuICBUaGUgJ3InIHRlc3QKKwkgIGFwcGVhcnMgdG8gbm90IHdvcmsgd2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gc2luY2UgdGhlIG5ld19maWVsZHR5cGUoKQorCSAgZnVuY3Rpb24gaXMgYnJva2VuIGluIHRoYXQgaW1wbGVtZW50YXRpb24uCisKKzIwMDYwNTA2CisJKyBhZGQgaHB0ZXJtLWNvbG9yIHRlcm1pbmZvIGVudHJ5IC1URAorCSsgZml4ZXMgdG8gY29tcGlsZSB0ZXN0LXByb2dyYW1zIHdpdGggSFBVWCAxMS4yMworCisyMDA2MDQyMgorCSsgYWRkIGNvcHlyaWdodCBub3RpY2VzIHRvIGZpbGVzIG90aGVyIHRoYW4gdGhvc2UgdGhhdCBhcmUgZ2VuZXJhdGVkLAorCSAgZGF0YSBvciBhZGFwdGVkIGZyb20gcGRjdXJzZXMgKHJlcG9ydHMgYnkgV2lsbGlhbSBNY0JyaW5lLCBEYXZpZAorCSAgVGF5bG9yKS4KKwkrIGltcHJvdmUgcmVuZGVyaW5nIG9uIGhwdGVybSBieSBub3QgcmVzZXR0aW5nIGF0dHJpYnV0ZXMgYXQgdGhlIGVuZAorCSAgb2YgZG91cGRhdGUoKSBpZiB0aGUgdGVybWluYWwgaGFzIHRoZSBtYWdpYy1jb29raWUgZmVhdHVyZSAocmVwb3J0CisJICBieSBCZXJuZCBSaWVrZSkuCisJKyBhZGQgMjU2Y29sb3IgdmFyaWFudHMgb2YgdGVybWluZm8gZW50cmllcyBmb3IgcHJvZ3JhbXMgd2hpY2ggYXJlCisJICByZXBvcnRlZCB0byBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIC1URAorCisyMDA2MDQxNgorCSsgZml4IHR5cG8gaW4gY2hhbmdlIHRvIE5ld0NoYXIoKSBtYWNybyBmcm9tIDIwMDYwMzExIGNoYW5nZXMsIHdoaWNoCisJICBicm9rZSB0YWItZXhwYW5zaW9uIChyZXBvcnQgYnkgRnJlZGVyaWMgTCBXIE1ldW5pZXIpLgorCisyMDA2MDQxNQorCSsgZG9jdW1lbnQgLVUgb3B0aW9uIG9mIHRpYyBhbmQgaW5mb2NtcC4KKwkrIG1vZGlmeSB0aWMvaW5mb2NtcCB0byBzdXBwcmVzcyBzbWFjcy9ybWFjcyB3aGVuIGFjc2MgaXMgc3VwcHJlc3NlZAorCSAgZHVlIHRvIHNpemUgbGltaXQsIGUuZy4sIGNvbnZlcnRpbmcgdG8gdGVybWNhcCBmb3JtYXQuICBBbHNvCisJICBzdXBwcmVzcyB0aGVtIGlmIHRoZSBvdXRwdXQgZm9ybWF0IGRvZXMgbm90IGNvbnRhaW4gYWNzYyBhbmQgaXQKKwkgIHdhcyBub3QgVlQxMDAtbGlrZSwgaS5lLiwgYSBvbmUtb25lIG1hcHBpbmcgKE5vdmVsbCAjMTYzNzE1KS4KKwkrIGFkZCBjb25maWd1cmUgY2hlY2sgdG8gZW5zdXJlIHRoYXQgU0lHV0lOQ0ggaXMgZGVmaW5lZCBvbiBwbGF0Zm9ybXMKKwkgIHN1Y2ggYXMgT1MgWCB3aGljaCBleGNsdWRlIHRoYXQgd2hlbiBfWE9QRU5fU09VUkNFLCBldGMuLCBhcmUKKwkgIGRlZmluZWQgKHJlcG9ydCBieSBOaWNob2xhcyBDb2xlKQorCisyMDA2MDQwOAorCSsgbW9kaWZ5IHdyaXRlX29iamVjdCgpIHRvIG5vdCB3cml0ZSBjb2luY2lkZW50YWwgZXh0ZW5zaW9ucyBvZiBhbgorCSAgZW50cnkgbWFkZSBkdWUgdG8gaXQgYmVpbmcgcmVmZXJlbmNlZCBpbiBhIHVzZT0gY2xhdXNlIChyZXBvcnQgYnkKKwkgIEFsYWluIEJlbmNoKS4KKwkrIGFub3RoZXIgZml4IGZvciBpbmZvY21wIC1pIG9wdGlvbiwgd2hpY2ggZGlkIG5vdCBlbnN1cmUgdGhhdCBzb21lCisJICBlc2NhcGUgc2VxdWVuY2VzIGhhZCBjb21wYXJhYmxlIHByZWZpeGVzIChyZXBvcnQgYnkgQWxhaW4gQmVuY2gpLgorCisyMDA2MDQwMQorCSsgaW1wcm92ZSBkaXNjdXNzaW9uIG9mIGluaXQvcmVzZXQgaW4gdGVybWluZm8gYW5kIHRwdXQgbWFucGFnZXMKKwkgIChyZXBvcnQgYnkgQWxhaW4gQmVuY2gpLgorCSsgdXNlIGlzMyBzdHJpbmcgZm9yIGEgZmFsbGJhY2sgb2YgcnMzIGluIHRoZSByZXNldCBwcm9ncmFtOyBpdCB3YXMKKwkgIHVzaW5nIGlzMiAocmVwb3J0IGJ5IEFsYWluIEJlbmNoKS4KKwkrIGNvcnJlY3QgbG9naWMgZm9yIGluZm9jbXAgLWkgb3B0aW9uLCB3aGljaCBkaWQgbm90IGFjY291bnQgZm9yCisJICBtdWx0aXBsZSBkaWdpdHMgaW4gYSBwYXJhbWV0ZXIgKGNmOiAyMDA0MDgyOCkgKHJlcG9ydCBieSBBbGFpbgorCSAgQmVuY2gpLgorCSsgbW92ZSBfbmNfaGFuZGxlX3NpZ3dpbmNoKCkgdG8gbGliX3NldHVwLmMgdG8gbWFrZSAtLXdpdGgtdGVybWxpYgorCSAgb3B0aW9uIHdvcmsgYWZ0ZXIgMjAwNjAxMTQgY2hhbmdlcyAocmVwb3J0IGJ5IEFya2FkaXVzeiBNaXNraWV3aWN6KS4KKwkrIGFkZCBjb3B5cmlnaHQgbm90aWNlcyB0byB0ZXN0LXByb2dyYW1zIGFzIG5lZWRlZCAocmVwb3J0IGJ5IFdpbGxpYW0KKwkgIE1jQnJpbmUpLgorCisyMDA2MDMxOAorCSsgbW9kaWZ5IG5jdXJzZXMuYyAnRicgdGVzdCB0byBjb21iaW5lIHRoZSB3aWRlLWNoYXJhY3RlcnMgd2l0aCBjb2xvcgorCSAgYW5kL29yIHZpZGVvIGF0dHJpYnV0ZXMuCisJKyBtb2RpZnkgdGVzdC9uY3Vyc2VzIHRvIHVzZSBDVEwvUSBvciBFU0MgY29uc2lzdGVudGx5IGZvciBleGl0aW5nCisJICBhIHRlc3Qtc2NyZWVuIChzb21lIGNvbW1hbmRzIHVzZWQgJ3gnIG9yICdxJykuCisKKzIwMDYwMzEyCisJKyBmaXggYW4gb2ZmLWJ5LW9uZSBpbiB0aGUgc2Nyb2xsaW5nLXJlZ2lvbiBjaGFuZ2UgKGNmXyAyMDA2MDMxMSkuCisKKzIwMDYwMzExCisJKyBhZGQgY2hlY2tzIGluIHdhZGRjaG5zdHIoKSBhbmQgd2FkZF93Y2huc3RyKCkgdG8gc3RvcCBjb3B5aW5nIHdoZW4KKwkgIGEgbnVsbCBjaGFyYWN0ZXIgaXMgZm91bmQgKHJlcG9ydCBieSBJZ29yIEJvZ29tYXpvdikuCisJKyBtb2RpZnkgcHJvZ3MvTWFrZWZpbGUuaW4gdG8gbWFrZSAidHB1dCBpbml0IiB3b3JrIHByb3Blcmx5IHdpdGgKKwkgIGN5Z3dpbiwgaS5lLiwgZG8gbm90IHBhc3MgYSAiLmV4ZSIgaW4gdGhlIHJlZmVyZW5jZSBzdHJpbmcgdXNlZAorCSAgaW4gY2hlY2tfYWxpYXNlcyAocmVwb3J0IGJ5IFNhbXVlbCBUaGliYXVsdCkuCisJKyBhZGQgc29tZSBjaGVja3MgdG8gZW5zdXJlIGN1cnJlbnQgcG9zaXRpb24gaXMgd2l0aGluIHNjcm9sbGluZworCSAgcmVnaW9uIGJlZm9yZSBzY3JvbGxpbmcgb24gYSBuZXcgbGluZSAocmVwb3J0IGJ5IERhbiBHb29raW4pLgorCSsgY2hhbmdlIHNvbWUgTmV3Q2hhcigpIHVzYWdlIHRvIHN0YXRpYyB2YXJpYWJsZXMgdG8gd29yayBhcm91bmQKKwkgIHN0YWNrIGdhcmJhZ2UgaW50cm9kdWNlZCB3aGVuIGNjaGFyX3QgaXMgbm90IHBhY2tlZCAoUmVkaGF0ICMxODIwMjQpLgorCisyMDA2MDIyNQorCSsgd29ya2Fyb3VuZHMgdG8gYnVpbGQgdGVzdC9tb3Zld2luZG93IHdpdGggUERjdXJzZXMgMi43LgorCSsgZml4IGZvciBuc3Rlcm0tMTZjb2xvciBlbnRyeSAocGF0Y2ggYnkgQWxhaW4gQmVuY2gpLgorCSsgY29ycmVjdCBhIHR5cG8gaW4gaW5mb2NtcCBtYW5wYWdlIChEZWJpYW4gIzM1NDI4MSkuCisKKzIwMDYwMjE4CisJKyBhZGQgbnN0ZXJtLTE2Y29sb3IgZW50cnkgLVRECisJKyB1cGRhdGVkIG1sdGVybSB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIHJlbW92ZSA5NzA5MTMgZmVhdHVyZSBmb3IgY29weWluZyBzdWJ3aW5kb3dzIGFzIHRoZXkgYXJlIG1vdmVkIGluCisJICBtdndpbigpIChkaXNjdXNzaW9uIHdpdGggQnJ5YW4gQ2hyaXN0KS4KKwkrIG1vZGlmeSB0ZXN0L2RlbW9fbWVudXMuYyB0byBkZW1vbnN0cmF0ZSBtb3ZpbmcgYSBtZW51IChib3RoIHRoZQorCSAgd2luZG93IGFuZCBzdWJ3aW5kb3cpIHVzaW5nIHNoaWZ0ZWQgY3Vyc29yLWtleXMuCisJKyBzdGFydCBpbXBsZW1lbnRpbmcgcmVjdXJzaXZlIG12d2luKCkgaW4gbW92ZXdpbmRvdy5jIChpbmNvbXBsZXRlKS4KKwkrIGFkZCBhIGZhbGxiYWNrIGRlZmluaXRpb24gZm9yIEdDQ19QUklOVEZMSUtFKCkgaW4gdGVzdC5wcml2LmgsCisJICBmb3IgbW92ZXdpbmRvdy5jIChyZXBvcnQgYnkgV2lsbGlhbSBNY0JyaW5lKS4KKwkrIGFkZCBoZWxwLW1lc3NhZ2UgdG8gdGVzdC9tb3Zld2luZG93LmMKKworMjAwNjAyMTEKKwkrIGFkZCB0ZXN0L21vdmV3aW5kb3cuYywgdG8gdGVzdCBtdmRlcndpbigpLgorCSsgZml4IG5jdXJzZXMgc29mdC1rZXkgdGVzdCBzbyBjb2xvciBjaGFuZ2VzIGFyZSBzaG93biBpbW1lZGlhdGVseQorCSAgcmF0aGVyIHRoYW4gZGVsYXllZC4KKwkrIG1vZGlmeSBuY3Vyc2VzIHNvZnQta2V5IHRlc3QgdG8gaGlkZSB0aGUga2V5cyB3aGVuIGV4aXRpbmcgdGhlIHRlc3QKKwkgIHNjcmVlbi4KKwkrIGZpeGVzIHRvIGJ1aWxkIHRlc3QgcHJvZ3JhbXMgd2l0aCBQREN1cnNlcyAyLjcsIGUuZy4sIGl0cyBoZWFkZXJzCisJICByZWx5IG9uIGF1dG9jb25mIHN5bWJvbHMsIGFuZCBpdCBkZWNsYXJlcyBzdHVicyBmb3Igbm9uZnVuY3Rpb25hbAorCSAgdGVybWluZm8gYW5kIHRlcm1jYXAgZW50cnlwb2ludHMuCisKKzIwMDYwMjA0CisJKyBpbXByb3ZlZCB0ZXN0L2NvbmZpZ3VyZSB0byBidWlsZCB0ZXN0L25jdXJzZXMgb24gSFBVWCAxMSB1c2luZyB0aGUKKwkgIHZlbmRvciBjdXJzZXMuCisJKyBkb2N1bWVudGVkIEFMVEVSTkFURSBDT05GSUdVUkFUSU9OUyBpbiB0aGUgbmN1cnNlcyBtYW5wYWdlLCBmb3IgdGhlCisJICBiZW5lZml0IG9mIGRldmVsb3BlcnMgd2hvIGRvIG5vdCByZWFkIElOU1RBTEwuCisKKzIwMDYwMTI4CisJKyBjb3JyZWN0IGZvcm0gbGlicmFyeSBXaW5kb3dfVG9fQnVmZmVyKCkgY2hhbmdlIChjZjogIDIwMDQwNTE2KSwgd2hpY2gKKwkgIHNob3VsZCBpZ25vcmUgdGhlIHZpZGVvIGF0dHJpYnV0ZXMgKHJlcG9ydCBieSBSaWNhcmRvIENhbnR1KS4KKworMjAwNjAxMjEKKwkrIG1pbm9yIGZpeGVzIHRvIHhtYy1nbGl0Y2ggZXhwZXJpbWVudGFsIGNvZGU6CisJICArIHN1cHByZXNzIGxpbmUtZHJhd2luZworCSAgKyBpbXBsZW1lbnQgbWF4X2F0dHJpYnV0ZXMKKwkgIHRlc3RlZCB3aXRoIHh0ZXJtLgorCSsgbWlub3IgZml4ZXMgZm9yIHRoZSBkYXRhYmFzZSBpdGVyYXRvci4KKwkrIGZpeCBzb21lIGJ1ZmZlciBsaW1pdHMgaW4gYysrIGRlbW8gKGNvbW1lbnQgYnkgRmFsayBIdWVmZm5lciBpbgorCSAgRGViaWFuICMzNDgxMTcpLgorCisyMDA2MDExNAorCSsgYWRkIHRvZSAtYSBvcHRpb24sIHRvIHNob3cgYWxsIGRhdGFiYXNlcy4gIFRoaXMgdXNlcyBuZXcgcHJpdmF0ZQorCSAgaW50ZXJmYWNlcyBpbiB0aGUgbmN1cnNlcyBsaWJyYXJ5IGZvciBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbGlzdCBvZgorCSAgZGF0YWJhc2VzLgorCSsgZml4IHRvZSBmcm9tIDIwMDAwOTA5IGNoYW5nZXMgd2hpY2ggbWFkZSBpdCBub3QgbG9vayBhdAorCSAgJEhPTUUvLnRlcm1pbmZvCisJKyBtYWtlIHRvZSdzIC12IG9wdGlvbiBwYXJhbWV0ZXIgb3B0aW9uYWwgYXMgcGVyIG1hbnBhZ2UuCisJKyBpbXByb3ZlIFNJR1dJTkNIIGhhbmRsaW5nIGJ5IHBvc3Rwb25pbmcgaXRzIGVmZmVjdCBkdXJpbmcgbmV3dGVybSgpLAorCSAgZXRjLiwgd2hlbiBhbGxvY2F0aW5nIHNjcmVlbnMuCisKKzIwMDYwMTExCisJKyBtb2RpZnkgd2dldG5zdHIoKSB0byByZXR1cm4gS0VZX1JFU0laRSBpZiBhIHNpZ3dpbmNoIG9jY3Vycy4gIFVzZQorCSAgdGhpcyBpbiB0ZXN0L2ZpbHRlci5jCisJKyBmaXggYW4gZXJyb3IgaW4gZmlsdGVyKCkgbW9kaWZpY2F0aW9uIHdoaWNoIGNhdXNlZCBzb21lIGFwcGxpY2F0aW9ucworCSAgdG8gZmFpbC4KKworMjAwNjAxMDcKKwkrIGNoZWNrIGlmIGZpbHRlcigpIHdhcyBjYWxsZWQgd2hlbiBnZXR0aW5nIHRoZSBzY3JlZW5zaXplLiAgS2VlcCBpdAorCSAgYXQgMSBpZiBzbyAoYmFzZWQgb24gUmVkaGF0ICMxNzQ0OTgpLgorCSsgYWRkIGV4dGVuc2lvbiBub2ZpbHRlcigpLgorCSsgcmVmaW5lZCB0aGUgd29ya2Fyb3VuZCBmb3IgQUNTIG1hcHBpbmcuCisJKyBtYWtlIGlmZGVmJ3MgY29uc2lzdGVudCBpbiBjdXJzZXMuaCBmb3IgdGhlIGV4dGVuZGVkIGNvbG9ycyBzbyB0aGUKKwkgIGhlYWRlciBmaWxlIGNhbiBiZSB1c2VkIGZvciB0aGUgbm9ybWFsIGN1cnNlcyBsaWJyYXJ5LiAgVGhlIGhlYWRlcgorCSAgZmlsZSBpbnN0YWxsZWQgZm9yIGV4dGVuZGVkIGNvbG9ycyBpcyBhIHZhcmlhdGlvbiBvZiB0aGUKKwkgIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24gKHJlcG9ydCBieSBGcmVkZXJpYyBMIFcgTWV1bmllcikuCisKKzIwMDUxMjMxCisJKyBhZGQgYSB3b3JrYXJvdW5kIHRvIEFDUyBtYXBwaW5nIHRvIGFsbG93IGFwcGxpY2F0aW9ucyBzdWNoIGFzCisJICB0ZXN0L2JsdWUuYyB0byB1c2UgdGhlICJQQyBST00iIGNoYXJhY3RlcnMgYnkgbWFza2luZyB0aGVtIHdpdGgKKwkgIEFfQUxUQ0hBUlNFVC4gIFRoaXMgd29ya2VkIHVwIHRpbCA1LjUsIGJ1dCB3YXMgbG9zdCBpbiB0aGUgcmV2aXNpb24KKwkgIG9mIGxlZ2FjeSBjb2RpbmcgKHJlcG9ydCBieSBNaWNoYWVsIERldXRzY2htYW5uKS4KKwkrIGFkZCBhIG51bGwtcG9pbnRlciBjaGVjayBpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgdmVyc2lvbiBvZgorCSAgY2FsY3VsYXRlX2FjdHVhbF93aWR0aCgpIChyZXBvcnQgYnkgVmljdG9yIEp1bGllbikuCisJKyBpbXByb3ZlIHRlc3QvbmN1cnNlcyAnZCcgKGNvbG9yLWVkaXQpIHRlc3QgYnkgYWxsb3dpbmcgdGhlIFJHQgorCSAgdmFsdWVzIHRvIGJlIHNldCBpbmRlcGVuZGVudGx5IChwYXRjaCBieSBXaWxsaWFtIE1jQnJpbmUpLgorCSsgbW9kaWZ5IHRlc3QvY29uZmlndXJlIHNjcmlwdCB0byBhbGxvdyBidWlsZGluZyB0ZXN0IHByb2dyYW1zIHdpdGgKKwkgIFBEQ3Vyc2VzL1gxMS4KKwkrIG1vZGlmaWVkIHRlc3QgcHJvZ3JhbXMgdG8gYWxsb3cgc29tZSB0byB3b3JrIHdpdGggTmV0QlNEIGN1cnNlcy4KKwkgIFNldmVyYWwgZG8gbm90IGJlY2F1c2UgTmV0QlNEIGN1cnNlcyBpbXBsZW1lbnRzIGEgc3Vic2V0IG9mIFgvT3BlbgorCSAgY3Vyc2VzLCBhbmQgYWxzbyBsYWNrcyBtdWNoIG9mIFNWcjQgYWRkaXRpb25zLiAgQnV0IGl0J3MgZW5vdWdoIGZvcgorCSAgY29tcGFyaXNvbi4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIKKworMjAwNTEyMjQKKwkrIHVzZSBCU0Qtc3BlY2lmaWMgZml4IGZvciByZXR1cm4tdmFsdWUgZnJvbSBjZ2V0ZW50KCkgZnJvbSBDVlMgd2hlcmUKKwkgIGFuIHVua25vd24gdGVybWluYWwgdHlwZSB3b3VsZCBiZSByZXBvcnRkIGFzICJkYXRhYmFzZSBub3QgZm91bmQiLgorCSsgbWFrZSB0Z2V0ZW50KCkgcmV0dXJuIGNvZGUgbW9yZSByZWFkYWJsZSB1c2luZyBuZXcgc3ltYm9scworCSAgVEdFVEVOVF9ZRVMsIGV0Yy4KKwkrIHJlbW92ZSByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCAidGN0ZXN0IiBwcm9ncmFtLgorCSsgcmVtb3ZlIFRFU1RQUk9HUyBmcm9tIHByb2dzL01ha2VmaWxlLmluIChpdCB3YXMgcmVmZXJyaW5nIHRvIGNvZGUKKwkgIHRoYXQgd2FzIG5ldmVyIGJ1aWx0IGluIHRoYXQgZGlyZWN0b3J5KS4KKwkrIHR5cG9zIGluIGN1cnNfYWRkY2hzdHIuM3gsIHNvbWUgZG9jIGZpbGVzIChub3RpY2VkIGluIE9wZW5CU0QgQ1ZTKS4KKworMjAwNTEyMTcKKwkrIGFkZCB1c2VfbGVnYWN5X2NvZGluZygpIGZ1bmN0aW9uIHRvIHN1cHBvcnQgbHlueCdzIGZvbnQtc3dpdGNoaW5nCisJICBmZWF0dXJlLgorCSsgZml4IGZvcm1hdHRpbmcgaW4gY3Vyc190ZXJtY2FwLjN4IChyZXBvcnQgYnkgTWlrZSBGcnlzaW5nZXIpLgorCSsgbW9kaWZ5IE1LbGliX2dlbi5zaCB0byBjaGFuZ2UgcHJlcHJvY2Vzc29yLWV4cGFuZGVkIF9Cb29sIGJhY2sgdG8KKwkgIGJvb2wuCisKKzIwMDUxMjEwCisJKyBleHRlbmQgdGVzdC9uY3Vyc2VzLmMgJ3MnIChvdmVybGF5IHdpbmRvdykgdGVzdCB0byBleGVyY2lzZSBvdmVybGF5KCksCisJICBvdmVyd3JpdGUoKSBhbmQgY29weXdpbigpIHdpdGggZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiBjb2xvcnMgYW5kCisJICBhdHRyaWJ1dGVzIChpbmNsdWRpbmcgYmFja2dyb3VuZCBjb2xvcikgdG8gbWFrZSBpdCBlYXN5IHRvIHNlZSB0aGUKKwkgIGVmZmVjdCBvZiB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucy4KKwkrIGNvcnJlY3Rpb25zIHRvIG1lbnUvbV9nbG9iYWwuYyBmb3Igd2lkZS1jaGFyYWN0ZXJzIChyZXBvcnQgYnkKKwkgIFZpY3RvciBKdWxpZW4pLgorCisyMDA1MTIwMworCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRob3V0LWRsc3ltLCBhbGxvd2luZyBkZXZlbG9wZXJzIHRvCisJICBjb25maWd1cmUgR1BNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBkbHN5bSgpIChkaXNjdXNzaW9uIHdpdGggTWljaGFlbAorCSAgU2V0emVyKS4KKwkrIGZpeCB3aW5zX253c3RyKCksIHdoaWNoIGRpZCBub3QgaGFuZGxlIHNpbmdsZS1jb2x1bW4gbm9uLThiaXQgY29kZXMKKwkgIChEZWJpYW4gIzM0MTY2MSkuCisKKzIwMDUxMTI2CisJKyBtb3ZlIHByb3RvdHlwZXMgZm9yIHdpZGUtY2hhcmFjdGVyIHRyYWNlIGZ1bmN0aW9ucyBmcm9tIGN1cnNlcy50YWlsCisJICB0byBjdXJzZXMud2lkZSB0byBhdm9pZCBhY2NpZGVudGFsIHJlZmVyZW5jZSB0byB0aG9zZSBpZgorCSAgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCBpcyBkZWZpbmVkIHdpdGhvdXQgZW5zdXJpbmcgdGhhdCA8d2NoYXIuaD4gaXMKKwkgIGluY2x1ZGVkLgorCSsgYWRkL3VzZSBOQ1VSU0VTX0lOTElORSBkZWZpbml0aW9uLgorCSsgY2hhbmdlIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb25zIHRvIHVzZSBpbnQvdW5zaWduZWQgcmF0aGVyIHRoYW4gdGhlCisJICBzaG9ydCBlcXVpdmFsZW50cy4KKworMjAwNTExMTkKKwkrIHJlbW92ZSBhIHJlZHVuZGFudCBjaGVjayBpbiBsaWJfY29sb3IuYyAoRGViaWFuICMzMzU2NTUpLgorCSsgdXNlIGxkJ3MgLXNlYXJjaF9wYXRoc19maXJzdCBvcHRpb24gb24gRGFyd2luIHRvIHdvcmsgYXJvdW5kIG9kZAorCSAgc2VhcmNoIHJ1bGVzIG9uIHRoYXQgcGxhdGZvcm0gKHJlcG9ydCBieSBDaHJpc3RpYW4gR2VubmVyYXQsIGFuYWx5c2lzCisJICBieSBBbmRyZWEgR292b25pKS4KKwkrIHJlbW92ZSBzcGVjaWFsIGNhc2UgZm9yIERhcndpbiBpbiBDRl9YT1BFTl9TT1VSQ0UgY29uZmlndXJlIG1hY3JvLgorCSsgaWdub3JlIEVJTlRSIGluIHRjZ2V0YXR0ci90Y3NldGF0dHIgY2FsbHMgKERlYmlhbiAjMzM5NTE4KS4KKwkrIGZpeCBzZXZlcmFsIGJ1Z3MgaW4gdGVzdC9icy5jIChwYXRjaCBieSBTdGVwaGVuIExpbmRob2xtKS4KKworMjAwNTExMTIKKwkrIG90aGVyIG1pbm9yIGZpeGVzIHRvIGN5Z3dpbiBiYXNlZCBvbiB0YWNrIC1URAorCSsgY29ycmVjdCBzbWFjcyBpbiBjeWd3aW4gKERlYmlhbiAjMzM4MjM0LCByZXBvcnQgYnkgQmF1cnpoYW4KKwkgIElzbWFndWxvdiwgd2hvIG5vdGVkIHRoYXQgaXQgd2FzIGZpeGVkIGluIEN5Z3dpbikuCisKKzIwMDUxMDI5CisJKyBhZGQgc2hpZnRlZCB1cC9kb3duIGFycm93IGNvZGVzIHRvIHh0ZXJtLW5ldyBhcyBraW5kL2tyaSBzdHJpbmdzIC1URAorCSsgbW9kaWZ5IHdia2dybmQoKSB0byBhdm9pZCBjbGVhcmluZyB0aGUgQV9DSEFSVEVYVCBhdHRyaWJ1dGUgYml0cworCSAgc2luY2UgdGhvc2UgcmVjb3JkIHRoZSBzdGF0ZSBvZiBtdWx0aWNvbHVtbiBjaGFyYWN0ZXJzIChEZWJpYW4KKwkgICMzMTY2NjMpLgorCSsgbW9kaWZ5IHdlcmFzZSB0byBjbGVhciBtdWx0aWNvbHVtbiBjaGFyYWN0ZXJzIHRoYXQgZXh0ZW5kIGludG8KKwkgIGEgZGVyaXZlZCB3aW5kb3cgKERlYmlhbiAjMzE2NjYzKS4KKworMjAwNTEwMjIKKwkrIG1vdmUgYXNzaWdubWVudCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlIEVTQ0RFTEFZIGZyb20gaW5pdHNjcigpCisJICBkb3duIHRvIG5ld3Rlcm0oKSBzbyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYWZmZWN0cyB0aW1lb3V0cyBmb3IKKwkgIHRlcm1pbmFscyBvcGVuZWQgd2l0aCBuZXd0ZXJtKCkgYXMgd2VsbC4KKwkrIGZpeCBhIG1lbW9yeSBsZWFrIGluIGtleW5hbWUoKS4KKwkrIGFkZCB0ZXN0L2RlbW9fYWx0a2V5cy5jCisJKyBtb2RpZnkgdGVzdC9kZW1vX2RlZmtleS5jIHRvIGV4aXQgZnJvbSBsb29wIHZpYSAncScgdG8gYWxsb3cKKwkgIGxlYWstY2hlY2tpbmcsIGFzIHdlbGwgYXMgZml4IGEgYnVmZmVyIHNpemUgaW4gd2lubnN0cigpIGNhbGwuCisKKzIwMDUxMDE1CisJKyBjb3JyZWN0IG9yZGVyIG9mIHVzZS1jbGF1c2VzIGluIHJ4dnQtYmFzaWMgZW50cnkgd2hpY2ggbWFkZSBjb2RlcyBmb3IKKwkgIGYxLWY0IHZ0MTAwLXN0eWxlIHJhdGhlciB0aGFuIHZ0MjIwLXN0eWxlIChyZXBvcnQgYnkgR2Fib3IgWiBQYXBwKS4KKwkrIHN1cHByZXNzIGNvbmZpZ3VyZSBjaGVjayBmb3IgZ25hdG1ha2UgaWYgQWRhOTUvTWFrZWZpbGUuaW4gaXMgbm90CisJICBmb3VuZC4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIGNvbmZpZ3VyZSAtLXdpdGgtYm9vbCBvcHRpb24gZm9yIHRoZSBjYXNlIHdoZXJlCisJICAtLXdpdGhvdXQtY3h4IGlzIHVzZWQgKHJlcG9ydCBieSBEYW5pZWwgSmFjb2Jvd2l0eikuCisJKyBhZGQgYSBub3RlIHRvIElOU1RBTEwncyBkaXNjdXNzaW9uIG9mIC0td2l0aC1ub3JtYWwsIHBvaW50aW5nIG91dAorCSAgdGhhdCBvbmUgbWF5IHdpc2ggdG8gdXNlIC0td2l0aG91dC1ncG0gdG8gZW5zdXJlIGEgY29tcGxldGVseQorCSAgc3RhdGljIGxpbmsgKHByb21wdGVkIGJ5IHJlcG9ydCBieSBGZWxpeCB2b24gTGVpdG5lcikuCisKKzIwMDUxMDEwIDUuNSByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcKKworMjAwNTEwMDgKKwkrIGRvY3VtZW50IGluIGRlbW9fZm9ybXMuYyBzb21lIHBvcnRhYmlsaXR5IGlzc3Vlcy4KKworMjAwNTEwMDEKKwkrIGRvY3VtZW50IHNpZGUtZWZmZWN0IG9mIHdlcmFzZSgpIHdoaWNoIHNldHMgdGhlIGN1cnNvciBwb3NpdGlvbi4KKwkrIHNhdmUvcmVzdG9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiBmb3JtIGZpZWxkIGVkaXRpbmcgdG8gbWFrZQorCSAgb3ZlcmxheSBtb2RlIHdvcmsuCisKKzIwMDUwOTI0CisJKyBjb3JyZWN0IGhlYWRlciBkZXBlbmRlbmNpZXMgaW4gcHJvZ3MsIGFsbG93aW5nIHBhcmFsbGVsIG1ha2UgKHJlcG9ydAorCSAgYnkgRGFuaWVsIEphY29ib3dpdHopLgorCSsgbW9kaWZ5IENGX0JVSUxEX0NDIHRvIGVuc3VyZSB0aGF0IHByZS1zZXR0aW5nICRCVUlMRF9DQyBvdmVycmlkZXMKKwkgIHRoZSBjb25maWd1cmUgY2hlY2sgZm9yIC0td2l0aC1idWlsZC1jYyAocmVwb3J0IGJ5IERhbmllbCBKYWNvYm93aXR6KS4KKwkrIG1vZGlmeSBDRl9DRkdfREVGQVVMVFMgdG8gbm90IHVzZSAvdXNyIGFzIHRoZSBkZWZhdWx0IHByZWZpeCBmb3IKKwkgIE5ldEJTRC4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgZnJvbQorCQlodHRwOi8vc3VidmVyc2lvbnMuZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvY29uZmlnL2NvbmZpZy8KKworMjAwNTA5MTcKKwkrIG1vZGlmeSBzZWQgZXhwcmVzc2lvbiB3aGljaCBjb21wdXRlcyBwYXRoIGZvciAvdXNyL2xpYi90ZXJtaW5mbworCSAgc3ltYm9saWMgbGluayBpbiBpbnN0YWxsIHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMgbm90IGNoYW5nZSB1bmV4cGVjdGVkCisJICBsZXZlbHMgb2YgdGhlIHBhdGggKEdlbnRvbyAjNDIzMzYpLgorCSsgbW9kaWZ5IGRlZmF1bHQgZm9yIC0tZGlzYWJsZS1scDY0IGNvbmZpZ3VyZSBvcHRpb24gdG8gcmVkdWNlIGltcGFjdAorCSAgb24gZXhpc3RpbmcgNjQtYml0IGJ1aWxkcy4gIEVuYWJsaW5nIHRoZSBfTFA2NCBvcHRpb24gbWF5IGNoYW5nZSB0aGUKKwkgIHNpemUgb2YgY2h0eXBlIGFuZCBtbWFza190LiAgSG93ZXZlciwgZm9yIEFCSSA2LCBpdCBpcyBlbmFibGVkIGJ5CisJICBkZWZhdWx0IChyZXBvcnQgYnkgTWlrZSBGcnlzaW5nZXIpLgorCSsgYWRkIGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2sgZm9yIC0tZW5hYmxlLWV4dC1tb3VzZSwgYnVtcCBBQkkgdG8gNiBieQorCSAgZGVmYXVsdCBpZiBpdCBpcyB1c2VkLgorCSsgaW1wcm92ZSBjb25maWd1cmUgc2NyaXB0IGxvZ2ljIGZvciBidW1waW5nIEFCSSB0byBvbWl0IHRoaXMgaWYgdGhlCisJICAtLXdpdGgtYWJpLXZlcnNpb24gb3B0aW9uIHdhcyB1c2VkLgorCSsgdXBkYXRlIGFkZHJlc3MgZm9yIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbiB0YWNrJ3Mgc291cmNlLgorCSsgY29ycmVjdCB3aW5zX3djaCgpLCB3aGljaCB3YXMgbm90IG1hcmtpbmcgdGhlIGZpbGxlci1jZWxscyBvZgorCSAgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMgKGNmOiAgMjAwNDEwMjMpLgorCisyMDA1MDkxMAorCSsgbW9kaWZ5IG1vdXNlIGluaXRpYWxpemF0aW9uIHRvIGVuc3VyZSB0aGF0IEdwbV9PcGVuKCkgaXMgY2FsbGVkIG9ubHkKKwkgIG9uY2UuICBPdGhlcndpc2UgR1BNIGdldHMgY29uZnVzZWQgaW4gaXRzIGluaXRpYWxpemF0aW9uIG9mIHNpZ25hbAorCSAgaGFuZGxlcnMgKERlYmlhbiAjMzI2NzA5KS4KKworMjAwNTA5MDMKKwkrIG1vZGlmeSBsb2dpYyBmb3IgYmFja3NwYWNpbmcgaW4gYSBtdWx0aWxpbmUgZm9ybSBmaWVsZCB0byBlbnN1cmUgdGhhdAorCSAgaXQgd29ya3MgZXZlbiB3aGVuIHRoZSBwcmVjZWRpbmcgbGluZSBpcyBmdWxsIChyZXBvcnQgYnkgRnJhbmsgdmFuCisJICBWdWd0KS4KKwkrIHJlbW92ZSBjb21tZW50IGFib3V0IEJVR1Mgc2VjdGlvbiBvZiBuY3Vyc2VzIG1hbnBhZ2UgKERlYmlhbiAjMzI1NDgxKQorCisyMDA1MDgyNworCSsgZG9jdW1lbnQgc29tZSB3b3JrYXJvdW5kcyBmb3Igc2hhcmVkIGFuZCBsaWJ0b29sIGxpYnJhcnkKKwkgIGNvbmZpZ3VyYXRpb25zIGluIElOU1RBTEwgKHNlZSAtLXdpdGgtc2hhcmVkIGFuZCAtLXdpdGgtbGlidG9vbCkuCisJKyBtb2RpZnkgQ0ZfR0NDX1ZFUlNJT04gYW5kIENGX0dYWF9WRVJTSU9OIG1hY3JvcyB0byBhY2NvbW1vZGF0ZQorCSAgY3Jvc3MtY29tcGlsZXJzIHdoaWNoIGVtaXQgdGhlIHBsYXRmb3JtIG5hbWUgaW4gdGhlaXIgdmVyc2lvbgorCSAgbWVzc2FnZSwgZS5nLiwKKwkJYXJtLXNhMTEwMC1saW51eC1nbnUtZysrIChHQ0MpIDQuMC4xCisJICAocmVwb3J0IGJ5IEZyYW5rIHZhbiBWdWd0KS4KKworMjAwNTA4MjAKKwkrIHN0YXJ0IHVwZGF0aW5nIGRvY3VtZW50YXRpb24gZm9yIHVwY29taW5nIDUuNSByZWxlYXNlLgorCSsgZml4IHRvIG1ha2UgbGlidG9vbCAgYW5kIGxpYnRpbmZvIHdvcmsgdG9nZXRoZXIgYWdhaW4gKGNmOiAyMDA1MDEyMikuCisJKyBmaXhlcyB0byBhbGxvdyBidWlsZGluZyB0cmFjZXMgaW50byBsaWJ0aW5mbworCSsgYWRkIGRlYnVnIHRyYWNlIHRvIHRpYyB0aGF0IHNob3dzIGlmL2hvdyBuY3Vyc2VzIHdpbGwgd3JpdGUgdG8gdGhlCisJICBsb3dlciBjb3JuZXIgb2YgYSB0ZXJtaW5hbCdzIHNjcmVlbi4KKwkrIHVwZGF0ZSBsbGliLWwqIGZpbGVzLgorCisyMDA1MDgxMworCSsgbW9kaWZ5IGluaXRpYWxpemVycyBpbiBjKysgYmluZGluZyB0byBidWlsZCB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBnKysuCisJKyBpbXByb3ZlIHNwZWNpYWwgY2FzZSBmb3IgMjAwNTAxMTUgcmVwYWludGluZyBmaXgsIGVuc3VyaW5nIHRoYXQgaWYKKwkgIHRoZSBmaXJzdCBjaGFuZ2VkIGNlbGwgaXMgbm90IGEgY2hhcmFjdGVyIHRoYXQgdGhlIHJhbmdlIHRvIGJlCisJICByZXBhaW50ZWQgaXMgYWRqdXN0ZWQgdG8gc3RhcnQgYXQgYSBjaGFyYWN0ZXIncyBiZWdpbm5pbmcgKERlYmlhbgorCSAgIzMxNjY2MykuCisKKzIwMDUwODA2CisJKyBmaXhlcyB0byBidWlsZCBvbiBRTlggNi4xCisJKyBpbXByb3ZlIGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2tzIGZvciBJbnRlbCA5LjAgY29tcGlsZXIuCisJKyByZW1vdmUgI2luY2x1ZGUncyBmb3IgbGliYy5oIChvYnNvbGV0ZSkuCisJKyBhZGp1c3QgaWZkZWYncyBpbiBjdXJzZXMucHJpdi5oIHNvIHRoYXQgd2hlbiBjcm9zcy1jb21waWxpbmcgdG8KKwkgIHByb2R1Y2UgY29tcF9oYXNoIGFuZCBtYWtlX2tleXMsIG5vIGRlcGVuZGVuY3kgb24gd2NoYXIuaCBpcyBuZWVkZWQuCisJICBUaGF0IHNpbXBsaWZpZXMgdGhlIGJ1aWxkLWNwcGZsYWdzIChyZXBvcnQgYnkgRnJhbmsgdmFuIFZ1Z3QpLgorCSsgbW92ZSBtb2R1bGVzIHJlbGF0ZWQgdG8ga2V5LWJpbmRpbmcgaW50byBsaWJ0aW5mbyB0byBmaXggbGlua2FnZQorCSAgcHJvYmxlbSBjYXVzZWQgYnkgMjAwNTA0MzAgY2hhbmdlcyB0byBNS2tleW5hbWUuc2ggKHJlcG9ydCBieQorCSAgS29uc3RhbnRpbiBBbmRyZWV2KS4KKworMjAwNTA3MjMKKwkrIHVwZGF0ZXMvZml4ZXMgZm9yIGNvbmZpZ3VyZSBzY3JpcHQgbWFjcm9zIGZyb20gdmlsZSAtVEQKKwkrIG1ha2UgcHJpc205J3Mgc2dyIHN0cmluZyBhZ3JlZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXJtaW5mbyAtVEQKKwkrIG1ha2UgdnQyMjAncyBzZ3IwIHN0cmluZyBjb25zaXN0ZW50IHdpdGggc2dyIHN0cmluZywgZG8gdGhpcyBmb3IKKwkgIHNldmVyYWwgcmVsYXRlZCBjYXNlcyAtVEQKKwkrIGltcHJvdmUgdHJhbnNsYXRpb24gdG8gdGVybWNhcCBieSBmaWx0ZXJpbmcgdGhlICdtZScgKHNncjApIHN0cmluZ3MKKwkgIGFzIGluIHRoZSBydW50aW1lIGNhbGwgdG8gdGdldGVudCgpIChwcm9tcHRlZCBieSBhIGRpc2N1c3Npb24gd2l0aAorCSAgVGhvbWFzIEtsYXVzbmVyKS4KKwkrIGltcHJvdmUgdGljIGNoZWNrIGZvciBzZ3IwIHZlcnN1cyBzZ3IoMCksIHRvIGhlbHAgZW5zdXJlIHRoYXQgc2dyMAorCSAgcmVzZXRzIGxpbmUtZHJhd2luZy4KKworMjAwNTA3MTYKKwkrIGZpeCBzcGVjaWFsIGNhc2VzIGZvciB0cmltbWluZyBzZ3IwIGZvciBodXJkIGFuZCB2dDIyMCAoRGViaWFuCisJICAjMzE4NjIxKS4KKwkrIHNwbGl0LW91dCBfbmNfdHJpbV9zZ3IwKCkgZnJvbSBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGdldGVudCgpLCB0bworCSAgYWxsb3cgaXQgdG8gYmUgdXNlZCBieSB0aWMgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcnVudGltZQorCSAgY2hhbmdlcyB0aGF0IHdvdWxkIGJlIG1hZGUgdG8gc2dyMCBmb3IgdGVybWNhcCBhcHBsaWNhdGlvbnMuCisJKyBtb2RpZnkgbWFrZV9zZWQuc2ggdG8gbWFrZSB0aGUgZ3JvdXAtbmFtZSBpbiB0aGUgTkFNRSBzZWN0aW9uIG9mCisJICBmb3JtL21lbnUgbGlicmFyeSBtYW5wYWdlIGFncmVlIHdpdGggdGhlIFRJVExFIHN0cmluZyB3aGVuIHJlbmFtaW5nCisJICBpcyBkb25lIGZvciBEZWJpYW4gKERlYmlhbiAjNzg4NjYpLgorCisyMDA1MDcwMgorCSsgbW9kaWZ5IHBhcmFtZXRlciB0eXBlIGluIGMrKyBiaW5kaW5nIGZvciBpbnNjaCgpIGFuZCBtdndpbnNjaCgpIHRvCisJICBiZSBjb25zaXN0ZW50IHdpdGggdW5kZXJseWluZyBuY3Vyc2VzIGxpYnJhcnkgKHdhcyBjaGFyLCBpcyBjaHR5cGUpLgorCSsgbW9kaWZ5IHRyZWF0bWVudCBvZiBJbnRlbCBjb21waWxlciB0byBhbGxvdyBfR05VX1NPVVJDRSB0byBiZSBkZWZpbmVkCisJICBvbiBMaW51eC4KKwkrIGltcHJvdmUgY29uZmlndXJlIGNoZWNrIGZvciBuYW5vc2xlZXAoKSwgY2hlY2tpbmcgdGhhdCBpdCB3b3JrcyBzaW5jZQorCSAgc29tZSBvbGRlciBzeXN0ZW1zIHN1Y2ggYXMgQUlYIDQuMyBoYXZlIGEgbm9ud29ya2luZyB2ZXJzaW9uLgorCisyMDA1MDYyNQorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiBmcm9tCisJCWh0dHA6Ly9zdWJ2ZXJzaW9ucy5nbnUub3JnL2NnaS1iaW4vdmlld2N2cy9jb25maWcvY29uZmlnLworCSsgbW9kaWZ5IG1pc2Mvc2hsaWIgdG8gd29yayBpbiB0ZXN0LWRpcmVjdG9yeS4KKwkrIHN1cHByZXNzICRzdWZmaXggaW4gbWlzYy9ydW5fdGljLnNoIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiAgVGhpcworCSAgYWxsb3dzIGNyb3NzLWNvbXBpbGVzIHRvIHVzZSB0aGUgaG9zdCdzIHRpYyBwcm9ncmFtIHRvIGhhbmRsZSB0aGUKKwkgICJtYWtlIGluc3RhbGwuZGF0YSIgc3RlcC4KKwkrIGltcHJvdmUgZGVzY3JpcHRpb24gb2YgJExJTkVTIGFuZCAkQ09MVU1OUyB2YXJpYWJsZXMgaW4gbWFucGFnZXMKKwkgIChwcm9tcHRlZCBieSByZXBvcnQgYnkgRGF2ZSBVbHJpY2spLgorCSsgaW1wcm92ZSBkZXNjcmlwdGlvbiBvZiBjcm9zcy1jb21waWxpbmcgaW4gSU5TVEFMTAorCSsgYWRkIE5DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8uaHRtbCBieSBQcmFkZWVwIFBhZGFsYQorCSAgKHNlZSBodHRwOi8vdGxkcC5vcmcvSE9XVE8vTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy8pLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gb2J0YWluIHNvbmFtZSBmb3IgR1BNIGxpYnJhcnkgKGRpc2N1c3Npb24KKwkgIHdpdGggRGFuaWVsIEphY29ib3dpdHopLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCAtLXdpdGgtY2h0eXBlIG9wdGlvbiB3aWxsIHN0aWxsCisJICBjb21wdXRlIHRoZSB1bnNpZ25lZCBsaXRlcmFscyBzdWZmaXggZm9yIGNvbnN0YW50cyBpbiBjdXJzZXMuaAorCSAgKHJlcG9ydCBieSBEYW5pZWwgSmFjb2Jvd2l0ejoKKwkrIHBhdGNoZXMgZnJvbSBEYW5pZWwgSmFjb2Jvd2l0ejoKKwkgICsgdGhlIG1hbl9kYi5yZW5hbWVzIGVudHJ5IGZvciB0YWNrLjEgd2FzIGJhY2t3YXJkcy4KKwkgICsgdGFjay4xIGhhZCBzb21lIDFtJ3MgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIDFNJ3MuCisJICArIHRoZSBzZWN0aW9uIGZvciBjdXJzX2lud3N0ci4zIHdhcyB3cm9uZy4KKworMjAwNTA2MTkKKwkrIGNvcnJlY3Rpb24gdG8gLS13aXRoLWNodHlwZSBvcHRpb24gKHJlcG9ydCBieSBEYW5pZWwgSmFjb2Jvd2l0eikuCisKKzIwMDUwNjE4CisJKyBtb3ZlIGJ1aWxkLXRpbWUgZWRpdF9tYW4uc2ggYW5kIGVkaXRfbWFuLnNlZCBzY3JpcHRzIHRvIHRvcCBkaXJlY3RvcnkKKwkgIHRvIHNpbXBsaWZ5IHJldXNpbmcgdGhlbSBmb3IgcmVuYW1pbmcgdGFjaydzIG1hbnBhZ2UgKHByb21wdGVkIGJ5IGEKKwkgIHJldmlldyBvZiBEZWJpYW4gcGFja2FnZSkuCisJKyByZXZlcnQgbWlub3Igb3B0aW1pemF0aW9uIGZyb20gMjAwNDEwMzAgKERlYmlhbiAjMzEzNjA5KS4KKwkrIGxpYnRvb2wtc3BlY2lmaWMgZml4ZXMsIHRlc3RlZCB3aXRoIGxpYnRvb2wgMS40LjMsIDEuNS4wLCAxLjUuNiwKKwkgIDEuNS4xMCBhbmQgMS41LjE4IChhbGwgd29yayBleGNlcHQgYXMgbm90ZWQgcHJldmlvdXNseSBmb3IgdGhlIGMrKworCSAgaW5zdGFsbCB1c2luZyBsaWJ0b29sIDEuNS4wKToKKwkgICsgbW9kaWZ5IHRoZSBjbGVhbi1ydWxlIGluIGMrKy9NYWtlZmlsZS5pbiB0byB3b3JrIHdpdGggSVJJWDY0IG1ha2UKKwkgICAgcHJvZ3JhbS4KKwkgICsgdXNlICQoTElCVE9PTF9VTklOU1RBTEwpIHN5bWJvbCwgb3Zlcmxvb2tlZCBpbiAyMDAzMDgzMAorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb25zIC0td2l0aC1jaHR5cGUgYW5kIC0td2l0aC1tbWFzay10LCB0byBhbGxvdworCSAgb3ZlcnJpZGluZyBvZiB0aGUgbm9uLUxQNjQgbW9kZWwncyB1c2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZXMuCisJKyByZXZpc2UgdGVzdCBmb3Igc2l6ZSBvZiBjaHR5cGUgKGFuZCBtbWFza190KSwgd2hpY2ggYWx3YXlzIHJldHVybmVkCisJICAibG9uZyIgZHVlIHRvIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgKHJlcG9ydCBieSBEYW5pZWwgSmFjb2Jvd2l0eikuCisKKzIwMDUwNjExCisJKyBjaGFuZ2UgX3RyYWNlZidzIHRoYXQgdXNlZCAiJXAiIGZvcm1hdCBmb3IgdmFfbGlzdCB2YWx1ZXMgdG8gaWdub3JlCisJICB0aGF0LCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyB0aG9zZSBhcmUgbm90IHBvaW50ZXJzLgorCSsgZml4ZXMgZm9yIGxvbmctZm9ybWF0cyBpbiBwcmludGYncyBkdWUgdG8gbGFyZ2VmaWxlIHN1cHBvcnQuCisKKzIwMDUwNjA0CisJKyBmaXhlcyBmb3IgdGVybWNhcCBzdXBwb3J0OgorCSAgKyByZXNldCBwb2ludGVyIHRvIF9uY19jdXJyX3Rva2VuLnRrX25hbWUgd2hlbiB0aGUgaW5wdXQgc3RyZWFtIGlzCisJICAgIGNsb3NlZCwgd2hpY2ggY291bGQgcG9pbnQgdG8gZnJlZSBtZW1vcnkgKGNmOiAyMDAzMDIxNSkuCisJICArIGRlbGluayBURVJNVFlQRSBkYXRhIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHRlcm1jYXAgcmVhZGVyLCBzbyB0aGF0CisJICAgIGV4dGVuZGVkIG5hbWVzIGRhdGEgd2lsbCBiZSBmcmVlZCBjb25zaXN0ZW50bHkuCisJICArIGZyZWUgcG9pbnRlciB0byBURVJNVFlQRSBkYXRhIGluIF9uY19mcmVlX3Rlcm10eXBlKCkgcmF0aGVyIHRoYW4KKwkgICAgaXRzIGNhbGxlcnMuCisJICArIGFkZCBzb21lIGVudHJ5cG9pbnRzIGZvciBmcmVlaW5nIHBlcm1hbmVudGx5IGFsbG9jYXRlZCBkYXRhIHZpYQorCSAgICBfbmNfZnJlZWFsbCgpIHdoZW4gTk9fTEVBS1MgaXMgZGVmaW5lZC4KKwkrIGFtZW5kIDIwMDQxMDMwIGNoYW5nZSB0byBfbmNfZG9fY29sb3IgdG8gZW5zdXJlIHRoYXQgb3B0aW1pemF0aW9uIGlzCisJICBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgdGVybWluYWwgc3VwcG9ydHMgYmFja19jb2xvcl9lcmFzZSAoYmNlKS4KKworMjAwNTA1MjgKKwkrIGFkZCBzdW4tY29sb3IgdGVybWluZm8gZW50cnkgLVRECisJKyBjb3JyZWN0IGEgbWlzc2luZyBhc3NpZ25tZW50IGluIGMrKyBiaW5kaW5nJ3MgbWV0aG9kCisJICBOQ3Vyc2VzUGFuZWw6OlVzZXJQb2ludGVyKCkgZnJvbSAyMDA1MDQwOSBjaGFuZ2VzLgorCSsgaW1wcm92ZSBjb25maWd1cmUgY2hlY2sgZm9yIGxhcmdlLWZpbGVzLCBhZGRpbmcgY2hlY2sgZm9yIGRpcmVudDY0CisJICBmcm9tIHZpbGUgLVRECisJKyBtaW5vciBjaGFuZ2UgdG8gY29uZmlndXJlIHNjcmlwdCB0byBpbXByb3ZlIGxpbmtlciBvcHRpb25zIGZvciB0aGUKKwkgIEFkYTk1IHRyZWUuCisKKzIwMDUwNTE1CisJKyBkb2N1bWVudCBlcnJvciBjb25kaXRpb25zIGZvciBuY3Vyc2VzIGxpYnJhcnkgZnVuY3Rpb25zIChyZXBvcnQgYnkKKwkgIFN0YW5pc2xhdiBJZXZsZXYpLgorCSsgcmVnZW5lcmF0ZWQgaHRtbCBkb2N1bWVudGF0aW9uIGZvciBhZGEgYmluZGluZy4KKwkgIHNlZSBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzL3BhdGNoZXMvZ25hdGh0bWwKKworMjAwNTA1MDcKKwkrIHJlZ2VuZXJhdGVkIGh0bWwgZG9jdW1lbnRhdGlvbiBmb3IgbWFucGFnZXMuCisJKyBhZGQgJChCVUlMRF9FWEVFWFQpIHN1ZmZpeCB0byBpbnZvY2F0aW9uIG9mIG1ha2Vfa2V5cyBpbgorCSAgbmN1cnNlcy9NYWtlZmlsZSAoR2VudG9vICM4OTc3MikuCisJKyBtb2RpZnkgYysrL2RlbW8uY2MgdG8gYnVpbGQgd2l0aCBnKysgLWZuby1pbXBsaWNpdC10ZW1wbGF0ZXMgb3B0aW9uCisJICAocGF0Y2ggYnkgTWlrZSBGcnlzaW5nZXIpLgorCSsgbW9kaWZ5IHRpYyB0byBmaWx0ZXIgb3V0IGxvbmcgZXh0ZW5kZWQgbmFtZXMgd2hlbiB0cmFuc2xhdGluZyB0bworCSAgdGVybWNhcCBmb3JtYXQuICBPbmx5IHR3byBjaGFyYWN0ZXJzIGFyZSBwZXJtaXNzaWJsZSBmb3IgdGVybWNhcAorCSAgY2FwYWJpbGl0eSBuYW1lcy4KKworMjAwNTA0MzAKKwkrIG1vZGlmeSB0ZXJtaW5mbyBlbnRyaWVzIHh0ZXJtLW5ldyBhbmQgcnh2dCB0byBhZGQgc3RyaW5ncyBmb3IKKwkgIHNoaWZ0LSwgY29udHJvbC1jdXJzb3Iga2V5cy4KKwkrIHdvcmthcm91bmQgdG8gYWxsb3cgYysrIGJpbmRpbmcgdG8gY29tcGlsZSB3aXRoIGcrKyAyLjk1LjMsIHdoaWNoCisJICBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGljX2Nhc3Q8PiAocGF0Y2ggYnkgSmVmZiBDaHVhKS4KKwkrIG1vZGlmeSBpbml0aWFsaXphdGlvbiBvZiBrZXkgbG9va3VwIHRhYmxlIHNvIHRoYXQgaWYgYW4gZXh0ZW5kZWQKKwkgIGNhcGFiaWxpdHkgKHRpYyAteCkgc3RyaW5nIGlzIGRlZmluZWQsIGFuZCBpdHMgbmFtZSBiZWdpbnMgd2l0aCAnaycsCisJICBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgdHJlYXRlZCBhcyBhIGtleS4KKwkrIG1vZGlmeSB0ZXN0L2tleW5hbWVzLmMgdG8gYWxsb3cgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBleHRlbmRlZAorCSAga2V5IG5hbWVzLCBlLmcuLCB2aWEgZGVmaW5lX2tleSgpLCBvciB2aWEgInRpYyAteCIuCisJKyBhZGQgdGVzdC9kZW1vX3Rlcm1jYXAuYyB0byBzaG93IHRoZSBjb250ZW50cyBvZiBnaXZlbiBlbnRyeSB2aWEgdGhlCisJICB0ZXJtY2FwIGludGVyZmFjZS4KKworMjAwNTA0MjMKKwkrIG1pbm9yIGZpeGVzIGZvciB2dDEwMC92dDUyIGVudHJpZXMgLVRECisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1sYXJnZWZpbGUKKwkrIGNvcnJlY3RlZCBsaWJyYXJpZXMgdXNlZCB0byBidWlsZCBBZGE5NS9nZW4vZ2VuLCBmb3VuZCBpbiB0ZXN0aW5nCisJICBnY2MgNC4wLjAuCisKKzIwMDUwNDE2CisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBjaGVjayBmb3IgX1hPUEVOX1NPVVJDRSwgZGlzYWJsZSB0aGF0IG9uCisJICBEYXJ3aW4gd2hvc2UgaGVhZGVyIGZpbGVzIGhhdmUgcHJvYmxlbXMgKHBhdGNoIGJ5IENocmlzIFp1YnJ6eWNraSkuCisJKyBtb2RpZnkgZm9ybSBsaWJyYXJ5IElzX1ByaW50YWJsZV9TdHJpbmcoKSB0byB1c2UgaXN3cHJpbnQoKSByYXRoZXIKKwkgIHRoYW4gd2N3aWR0aCgpIGZvciBkZXRlcm1pbmluZyBpZiBhIGNoYXJhY3RlciBpcyBwcmludGFibGUuICBUaGUKKwkgIGxhdHRlciBjYXVzZWQgaXQgdG8gcmVqZWN0IG1lbnUgaXRlbXMgY29udGFpbmluZyBub24tc3BhY2luZworCSAgY2hhcmFjdGVycy4KKwkrIG1vZGlmeSBuY3Vyc2VzIHRlc3QgcHJvZ3JhbSdzIEYtdGVzdCB0byBoYW5kbGUgbm9uLXNwYWNpbmcgY2hhcmFjdGVycworCSAgYnkgY29tYmluaW5nIHRoZW0gd2l0aCBhIHJldmVyc2UtdmlkZW8gYmxhbmsuCisJKyByZXZpZXcvZml4IHNldmVyYWwgZ2NjIC1XY29udmVyc2lvbiB3YXJuaW5ncy4KKworMjAwNTA0MDkKKwkrIGNvcnJlY3QgYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiBtX2RyaXZlcigpIGZvciBtb3VzZS1jbGlja3MgdXNlZCB0bworCSAgcG9zaXRpb24gdGhlIG1vdXNlIHRvIGEgcGFydGljdWxhciBpdGVtLgorCSsgaW1wbGVtZW50IHRlc3QvZGVtb19tZW51cy5jCisJKyBhZGQgc29tZSBjaGVja3MgaW4gbGliX21vdXNlIHRvIGVuc3VyZSBTUCBpcyBzZXQuCisJKyBtb2RpZnkgQysrIGJpbmRpbmcgdG8gbWFrZSAyMDA1MDQwMyBjaGFuZ2VzIHdvcmsgd2l0aCB0aGUgY29uZmlndXJlCisJICAtLWVuYWJsZS1jb25zdCBvcHRpb24uCisKKzIwMDUwNDAzCisJKyBtb2RpZnkgc3RhcnRfY29sb3IoKSB0byByZXR1cm4gRVJSIGlmIGl0IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuCisJKyBhZGRyZXNzIGcrKyBjb21waWxlciB3YXJuaW5ncyBpbiBDKysgYmluZGluZyBieSBhZGRpbmcgZXhwbGljaXQKKwkgIG1lbWJlciBpbml0aWFsaXphdGlvbiwgYXNzaWdubWVudCBvcGVyYXRvcnMgYW5kIGNvcHkgY29uc3RydWN0b3JzLgorCSAgTW9zdCBvZiB0aGUgY2hhbmdlcyBzaW1wbHkgcHJlc2VydmUgdGhlIGV4aXN0aW5nIHNlbWFudGljcyBvZiB0aGUKKwkgIGJpbmRpbmcsIHdoaWNoIGNhbiBsZWFrIG1lbW9yeSwgZXRjLiwgYnV0IGJ5IG1ha2luZyB0aGVzZSBmZWF0dXJlcworCSAgdmlzaWJsZSwgaXQgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIGltcHJvdmluZyB0aGUgYmluZGluZy4KKwkrIGltcHJvdmUgQysrIGJpbmRpbmcgdXNpbmcgc3RhdGljX2Nhc3QsIGV0Yy4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IC0tZW5hYmxlLXdhcm5pbmdzIHRvIGFkZCBvcHRpb25zIHRvIGcrKyB0bworCSAgY29ycmVzcG9uZCB0byB0aGUgZ2NjIC0tZW5hYmxlLXdhcm5pbmdzLgorCSsgbW9kaWZ5IEMrKyBiaW5kaW5nIHRvIHVzZSBzb21lIEMgaW50ZXJuYWwgZnVuY3Rpb25zIHRvIG1ha2UgaXQKKwkgIGNvbXBpbGUgcHJvcGVybHkgb24gU29sYXJpcyAoYW5kIG90aGVyIHBsYXRmb3JtcykuCisKKzIwMDUwMzI3CisJKyBhbWVuZCBjaGFuZ2UgZnJvbSAyMDA1MDMyMCB0byBsaW1pdCBpdCB0byBjb25maWd1cmF0aW9ucyB3aXRoIGEKKwkgIHZhbGlkIGxvY2FsZS4KKwkrIGZpeCBhIGJ1ZyBpbnRyb2R1Y2VkIGluIDIwMDUwMzIwIHdoaWNoIGJyb2tlIHRoZSB0cmFuc2xhdGlvbiBvZgorCSAgbm9ucHJpbnRpbmcgY2hhcmFjdGVycyB0byB1cGFycm93IGZvcm0gKHJlcG9ydCBieSBUYWthaGFzaGkgVGFtb3RzdSkuCisKKzIwMDUwMzI2CisJKyBhZGQgaWZkZWYncyBmb3IgX0xQNjQgaW4gY3Vyc2VzLmggdG8gYXZvaWQgdXNpbmcgd2FzdGVmdWwgNjQtYml0cyBmb3IKKwkgIGNodHlwZSBhbmQgbW1hc2tfdCwgYnV0IGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZGlzYWJsZS1scDY0IGluIGNhc2UKKwkgIGFueW9uZSB1c2VkIHRoYXQgY29uZmlndXJhdGlvbi4KKwkrIHVwZGF0ZSBtaXNjL3NobGliIHNjcmlwdCB0byBhY2NvdW50IGZvciBNYWMgT1MgWCAocmVwb3J0IGJ5IE1pY2hhaWwKKwkgIFZpZGlhc3NvdikuCisJKyBjb3JyZWN0IGNvbXBhcmlzb24gZm9yIHdyYXBwaW5nIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluCisJICB3YWRkY2hfbGl0ZXJhbCgpIChyZXBvcnQgYnkgVGFrYWhhc2hpIFRhbW90c3UpLgorCisyMDA1MDMyMAorCSsgYWRkIC1jIGFuZCAtdyBvcHRpb25zIHRvIHRzZXQgdG8gYWxsb3cgdXNlciB0byBzdXBwcmVzcyBuY3Vyc2VzJworCSAgcmVzaXppbmcgb2YgdGhlIHRlcm1pbmFsIGVtdWxhdG9yIHdpbmRvdyBpbiB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIGl0CisJICBpcyBub3QgYWJsZSB0byBkZXRlY3QgdGhlIHRydWUgc2l6ZSAocmVwb3J0IGJ5IFdpbiBEZWx2YXV4LCBEZWJpYW4KKwkgICMzMDA0MTkpLgorCSsgbW9kaWZ5IHdhZGRjaF9ub3N5bmMoKSB0byBhY2NvdW50IGZvciBsb2NhbGUgem5fQ0guR0JLLCB3aGljaCB1c2VzCisJICBjb2RlcyAxMjgtMTU5IGFzIHBhcnQgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMgKHJlcG9ydCBieSBXYW5nCisJICBXZW5SdWksIERlYmlhbiAjMzAwNTEyKS4KKworMjAwNTAzMTkKKwkrIG1vZGlmeSBuY3Vyc2VzLmMgJ2QnIHRlc3QgdG8gbWFrZSBpdCB3b3JrIHdpdGggODgtY29sb3IKKwkgIGNvbmZpZ3VyYXRpb24sIGkuZS4sIGJ5IGltcGxlbWVudGluZyBzY3JvbGxpbmcuCisJKyBpbXByb3ZlIHNjcm9sbGluZyBpbiBuY3Vyc2VzLmMgJ2MnIGFuZCAnQycgdGVzdHMsIGUuZy4sIGZvciA4OC1jb2xvcgorCSAgY29uZmlndXJhdGlvbi4KKworMjAwNTAzMTIKKwkrIGNoYW5nZSB0cmFjZW11bmNoIHRvIHVzZSBzdHJpY3QgY2hlY2tpbmcuCisJKyBtb2RpZnkgbmN1cnNlcy5jICdwJyB0ZXN0IHRvIHRlc3QgbGluZS1kcmF3aW5nIHdpdGhpbiBhIHBhZC4KKwkrIGltcGxlbWVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSBOQ1VSU0VTX05PX1VURjhfQUNTIHRvIHN1cHBvcnQKKwkgIG1pc2NlbGxhbmVvdXMgdGVybWluYWwgZW11bGF0b3JzIHdoaWNoIGlnbm9yZSBhbHRlcm5hdGUgY2hhcmFjdGVyCisJICBzZXQgZXNjYXBlIHNlcXVlbmNlcyB3aGVuIGluIFVURi04IG1vZGUuCisKKzIwMDUwMzA1CisJKyBjaGFuZ2UgTkN1cnNlc1dpbmRvdzo6ZXJyX2hhbmRsZXIoKSB0byBhIHZpcnR1YWwgZnVuY3Rpb24gKHJlcXVlc3QgYnkKKwkgIFN0ZXZlIEJlYWwpLgorCSsgbW9kaWZ5IGZ0eV9pbnQuYyBhbmQgZnR5X251bS5jIHRvIGhhbmRsZSB3aWRlIGNoYXJhY3RlcnMgKHJlcG9ydCBieQorCSAgV29sZmdhbmcgR3V0amFocikuCisJKyBhZGFwdCBmaXggZm9yIGZ0eV9hbHBoYS5jIHRvIGZ0eV9hbG51bS5jLCB3aGljaCBhbHNvIGhhbmRsZWQgbm9ybWFsCisJICBhbmQgd2lkZSBjaGFyYWN0ZXJzIGluY29uc2lzdGVudGx5IChyZXBvcnQgYnkgV29sZmdhbmcgR3V0amFocikuCisJKyB1cGRhdGUgbGxpYi0qIGZpbGVzIHRvIHJlZmxlY3QgaW50ZXJuYWwgaW50ZXJmYWNlIGFkZGl0aW9ucy9jaGFuZ2VzLgorCisyMDA1MDIyNgorCSsgaW1wcm92ZSB0ZXN0L2NvbmZpZ3VyZSBzY3JpcHQsIGFkZGluZyB0ZXN0cyBmb3IgX1hPUEVOX1NPVVJDRSwgZXRjLiwKKwkgIGZyb20gbHlueC4KKwkrIGFkZCBhaXh0ZXJtLTE2Y29sb3IgdGVybWluZm8gZW50cnkgLVRECisJKyBtb2RpZmllZCB4dGVybS1uZXcgdGVybWluZm8gZW50cnkgdG8gd29yayB3aXRoIHRnZXRlbnQoKSBjaGFuZ2VzIC1URAorCSsgZXh0ZW5kZWQgY2hhbmdlcyBpbiB0Z2V0ZW50KCkgZnJvbSAyMDA0MDcxMCB0byBhbGxvdyB0aGUgc3Vic3RyaW5nIG9mCisJICBzZ3IwIHdoaWNoIG1hdGNoZXMgcm1hY3MgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2dyMCBzdHJpbmcKKwkgIChyZXF1ZXN0IGJ5IFRob21hcyBXb2xmZikuICBXb2xmZiBzYXlzIHRoZSB2aXN1YWwgZWZmZWN0IGluCisJICBjb21iaW5hdGlvbiB3aXRoIHByZS0yMDA0MDcxMCBuY3Vyc2VzIGlzIGltcHJvdmVkLgorCSsgZml4IG9mZi1ieS1vbmUgaW4gd2lubnN0cigpIGNhbGwgd2hpY2ggY2F1c2VkIGZvcm0gZmllbGQgdmFsaWRhdGlvbgorCSAgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMgdG8gaWdub3JlIHRoZSBsYXN0IGNoYXJhY3RlciBpbiBhIGZpZWxkLgorCSsgY29ycmVjdCBsb2dpYyBpbiB3aW5zY2goKSBmb3IgaW5zZXJ0aW5nIG11bHRpYnl0ZSBzdHJpbmdzOyB0aGUgY29kZQorCSAgd291bGQgY2xlYXIgY2VsbHMgYWZ0ZXIgdGhlIGluc2VydGlvbiByYXRoZXIgdGhhbiBwdXNoIHRoZW0gdG8gdGhlCisJICByaWdodCAoY2Y6IDIwMDQwMjI4KS4KKwkrIGZpeCBhbiBpbmNvbnNpc3RlbmN5IGluIENoZWNrX0FscGhhX0ZpZWxkKCkgYmV0d2VlbiBub3JtYWwgYW5kIHdpZGUKKwkgIGNoYXJhY3RlciBsb2dpYyAocmVwb3J0IGJ5IFdvbGZnYW5nIEd1dGphaHIpLgorCisyMDA1MDIxOQorCSsgZml4IGEgYnVnIGluIGVkaXRpbmcgd2lkZS1jaGFyYWN0ZXJzIGluIGZvcm0gbGlicmFyeTogZGVsZXRpbmcgYQorCSAgbm9ud2lkZSBjaGFyYWN0ZXIgbW9kaWZpZWQgdGhlIHByZXZpb3VzIHdpZGUtY2hhcmFjdGVyLgorCSsgdXBkYXRlIG1hbnBhZ2UgdG8gZGVzY3JpYmUgTkNVUlNFU19NT1VTRV9WRVJTSU9OIDIuCisJKyBjb3JyZWN0IG1hbnBhZ2UgZGVzY3JpcHRpb24gb2YgbW91c2VpbnRlcnZhbCgpIChEZWJpYW4gIzI4MDY4NykuCisJKyBhZGQgYSBub3RlIHRvIGRlZmF1bHRfY29sb3JzLjN4IGV4cGxhaW5pbmcgd2h5IHRoaXMgZXh0ZW5zaW9uIHdhcworCSAgYWRkZWQgKERlYmlhbiAjMjk1MDgzKS4KKwkrIGFkZCB0cmFjZXMgdG8gcGFuZWwgbGlicmFyeS4KKworMjAwNTAyMTIKKwkrIGltcHJvdmUgZWRpdGluZyBvZiB3aWRlLWNoYXJhY3RlcnMgaW4gZm9ybSBsaWJyYXJ5OiAgbGVmdC9yaWdodAorCSAgY3Vyc29yIG1vdmVtZW50LCBhbmQgc2luZ2xlLWNoYXJhY3RlciBkZWxldGlvbnMgd29yayBwcm9wZXJseS4KKwkrIGRpc2FibGUgR1BNIG1vdXNlIHN1cHBvcnQgd2hlbiAkVEVSTSBoYXBwZW5zIHRvIGJlIHByZWZpeGVkIHdpdGgKKwkgICJ4dGVybSIuICBHcG1fT3BlbigpIHdvdWxkIG90aGVyd2lzZSBhc3NlcnQgdGhhdCBpdCBjYW4gZGVhbCB3aXRoCisJICBtb3VzZSBldmVudHMgaW4gdGhpcyBjYXNlLgorCSsgbW9kaWZ5IEdQTSBtb3VzZSBzdXBwb3J0IHNvIGl0IGNsb3NlcyB0aGUgc2VydmVyIGNvbm5lY3Rpb24gd2hlbgorCSAgdGhlIGNhbGxlciBkaXNhYmxlcyB0aGUgbW91c2UgKHJlcG9ydCBieSBTdGFuaXNsYXYgSWV2bGV2KS4KKworMjAwNTAyMDUKKwkrIGFkZCB0cmFjZXMgZm9yIGNhbGxiYWNrIGZ1bmN0aW9ucyBpbiBmb3JtIGxpYnJhcnkuCisJKyBhZGQgZXhwZXJpbWVudGFsIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtZXh0LW1vdXNlLCB3aGljaCBkZWZpbmVzCisJICBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gMiwgYW5kIG1vZGlmaWVzIHRoZSBlbmNvZGluZyBvZiBtb3VzZSBldmVudHMgdG8KKwkgIHN1cHBvcnQgd2hlZWwgbWljZSwgd2hpY2ggbWF5IHRyYW5zbWl0IGJ1dHRvbnMgNCBhbmQgNS4gIFRoaXMgd29ya3MKKwkgIHdpdGggeHRlcm0gYW5kIHNpbWlsYXIgWCB0ZXJtaW5hbCBlbXVsYXRvcnMgKHByb21wdGVkIGJ5IHF1ZXN0aW9uIGJ5CisJICBBbmRyZWFzIEhlbm5pbmdzc29uLCB0aGlzIGlzIGFsc28gcmVsYXRlZCB0byBEZWJpYW4gIzIzMDk5MCkuCisJKyBpbXByb3ZlIGNvbmZpZ3VyZSBtYWNyb3MgQ0ZfWE9QRU5fU09VUkNFIGFuZCBDRl9QT1NJWF9DX1NPVVJDRSB0bworCSAgYXZvaWQgcmVkZWZpbml0aW9uIHdhcm5pbmdzIG9uIGN5Z3dpbi4KKworMjAwNTAxMjkKKwkrIG1lcmdlIHJlbWFpbmluZyBkZXZlbG9wbWVudCBjaGFuZ2VzIGZvciBleHRlbmRlZCBjb2xvcnMgKG1vc3RseQorCSAgY29tcGxldGUsIGRvZXMgbm90IGFwcGVhciB0byBicmVhayBvdGhlciBjb25maWd1cmF0aW9ucykuCisJKyBhZGQgeHRlcm0tODhjb2xvci5kYXQgKHBhcnQgb2YgZXh0ZW5kZWQgY29sb3JzIHRlc3RpbmcpLgorCSsgaW1wcm92ZSBfdHJhY2VkdW1wKCkgaGFuZGxpbmcgb2YgY29sb3IgcGFpcnMgcGFzdCA5Ni4KKwkrIG1vZGlmeSByZXR1cm4tdmFsdWUgZnJvbSBzdGFydF9jb2xvcigpIHRvIHJldHVybiBPSyBpZiBjb2xvcnMgaGF2ZQorCSAgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQuCisJKyBtb2RpZnkgY3Vyc19jb2xvci4zeCBsaXN0IGVycm9yIGNvbmRpdGlvbnMgZm9yIGluaXRfcGFpcigpLAorCSAgcGFpcl9jb250ZW50KCkgYW5kIGNvbG9yX2NvbnRlbnQoKS4KKwkrIG1vZGlmeSBwYWlyX2NvbnRlbnQoKSB0byByZXR1cm4gLTEgZm9yIGNvbnNpc3RlbmN5IHdpdGggaW5pdF9wYWlyKCkKKwkgIGlmIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBkZWZhdWx0LWNvbG9yLgorCSsgY2hhbmdlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGRlZmF1bHQtY29sb3IgdG8gYWxsb3cgYXBwbGljYXRpb24KKwkgIHRvIHVzZSBjb2xvciBudW1iZXIgMjU1LiAgVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHRvdGFsIG51bWJlciBvZgorCSAgY29sb3IgcGFpcnMgd2hpY2ggYXJlIGFsbG93ZWQuCisJKyBhZGQgYSB0b3AtbGV2ZWwgdGFncyBydWxlLgorCisyMDA1MDEyMgorCSsgYWRkIGEgbnVsbC1wb2ludGVyIGNoZWNrIGluIHdnZXRjaCgpIGluIGNhc2UgaXQgaXMgY2FsbGVkIHdpdGhvdXQKKwkgIGZpcnN0IGNhbGxpbmcgaW5pdHNjcigpLgorCSsgYWRkIHNvbWUgbnVsbC1wb2ludGVyIGNoZWNrcyBmb3IgU1AsIHdoaWNoIGlzIG5vdCBzZXQgYnkgbGlidGluZm8uCisJKyBtb2RpZnkgbWlzYy9zaGxpYiB0byBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBwYXRobmFtZXMgYXJlIHVzZWQuCisJKyBtb2RpZnkgdGVzdC9NYWtlZmlsZS5pbiwgZXRjLiwgdG8gbGluayB0ZXN0IHByb2dyYW1zIG9ubHkgYWdhaW5zdCB0aGUKKwkgIGxpYnJhcmllcyBuZWVkZWQsIGUuZy4sIG9taXQgZm9ybS9tZW51L3BhbmVsIGxpYnJhcnkgZm9yIHRoZSBvbmVzCisJICB0aGF0IGFyZSBjdXJzZXMtc3BlY2lmaWMuCisJKyBjaGFuZ2UgU1AtPl9jdXJyZW50X2F0dHIgdG8gYSBwb2ludGVyLCBhZGp1c3QgaWZkZWYncyB0byBlbnN1cmUgdGhhdAorCSAgbGlidGluZm8uc28gYW5kIGxpYnRpbmZvdy5zbyBoYXZlIHRoZSBzYW1lIEFCSS4gIFRoZSByZWFzb24gZm9yIHRoaXMKKwkgIGlzIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSB3aGljaCBiZWxvbmdzIHRvIHRoZSB1cHBlci1sZXZlbAorCSAgbmN1cnNlcyBsaWJyYXJ5IGhhcyBhIGRpZmZlcmVudCBzaXplIGluIGVhY2ggbW9kZWwgKHJlcG9ydCBieQorCSAgU3RhbmlzbGF2IElldmxldikuCisKKzIwMDUwMTE1CisJKyBtaW5vciBmaXhlcyB0byBhbGxvdyB0ZXN0LWNvbXBpbGVzIHdpdGggZysrLgorCSsgY29ycmVjdCBjb2x1bW4gdmFsdWUgc2hvd24gaW4gdGljJ3Mgd2FybmluZ3MsIHdoaWNoIGRpZCBub3QgYWNjb3VudAorCSAgZm9yIGxlYWRpbmcgd2hpdGVzcGFjZS4KKwkrIGFkZCBhIGNoZWNrIGluIF9uY190cmFuc19zdHJpbmcoKSBmb3IgaW1wcm9wZXJseSBlbmRlZCBzdHJpbmdzLCBpLmUuLAorCSAgd2hlcmUgYSBmb2xsb3dpbmcgbGluZSBiZWdpbnMgaW4gY29sdW1uIDEuCisJKyBtb2RpZnkgX25jX3NhdmVfc3RyKCkgdG8gcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGJ1ZmZlciBvdmVyZmxvdy4KKwkrIGltcHJvdmUgcmVwYWludGluZyB3aGlsZSBzY3JvbGxpbmcgd2lkZS1jaGFyYWN0ZXIgZGF0YSAoRXVuZ2t5dSBTb25nKS4KKworMjAwNTAxMDgKKwkrIG1lcmdlIHNvbWUgZGV2ZWxvcG1lbnQgY2hhbmdlcyB0byBleHRlbmQgY29sb3IgY2FwYWJpbGl0aWVzLgorCisyMDA1MDEwMQorCSsgbWVyZ2Ugc29tZSBkZXZlbG9wbWVudCBjaGFuZ2VzIHRvIGV4dGVuZCBjb2xvciBjYXBhYmlsaXRpZXMuCisJKyBmaXggbWFucGFnZSB0eXBvIChGcmVlQlNEIHJlcG9ydCBkb2NzLzc1NTQ0KS4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKwk+IHBhdGNoZXMgZm9yIGNvbmZpZ3VyZSBzY3JpcHQgKEFsYmVydCBDaGluLUEtWW91bmcpOgorCSsgaW1wcm92ZWQgZml4IHRvIG1ha2UgbWJzdGF0ZV90IHJlY29nbml6ZWQgb24gSFBVWCAxMWkgKGNmOgorCSAgMjAwMzA3MDUpLCBtYWtpbmcgdnNzY2FuZigpIHByb3RvdHlwZSB2aXNpYmxlIG9uIElSSVg2NC4gIFRlc3RlZCBmb3IKKwkgIG9uIEhQLVVYIDExaSwgU29sYXJpcyA3LCA4LCA5LCBBSVggNC4zLjMsIDUuMiwgVHJ1NjQgVU5JWCA0LjBELCA1LjEsCisJICBJUklYNjQgNi41LCBSZWRoYXQgTGludXggNy4xLCA5LCBhbmQgUkhFTCAyLjEsIDMuMC4KKwkrIHByaW50IHRoZSByZXN1bHQgb2YgdGhlIC0tZGlzYWJsZS1ob21lLXRlcm1pbmZvIG9wdGlvbi4KKwkrIHVzZSAtcnBhdGggd2hlbiBjb21waWxpbmcgd2l0aCBTR0kgQyBjb21waWxlci4KKworMjAwNDEyMjUKKwkrIGFkZCB0cmFjZSBjYWxscyB0byByZW1haW5pbmcgcHVibGljIGZ1bmN0aW9ucyBpbiBmb3JtIGFuZCBtZW51CisJICBsaWJyYXJpZXMuCisJKyBmaXggY2hlY2sgZm9yIG51bWVyaWMgZGlnaXRzIGluIHRlc3QvbmN1cnNlcy5jICdiJyBhbmQgJ0InIHRlc3RzLgorCSsgZml4IHR5cG8gaW4gdGVzdC9uY3Vyc2VzLmMgJ2MnIHRlc3QgZnJvbSAyMDA0MTIxOC4KKworMjAwNDEyMTgKKwkrIHJldmlzZSB0ZXN0L25jdXJzZXMuYyAnYycgY29sb3IgdGVzdCB0byBpbXByb3ZlIHVzZSBmb3IgeHRlcm0tODhjb2xvcgorCSAgYW5kIHh0ZXJtLTI1NmNvbG9yLCBhZGRlZCAnQycgdGVzdCB1c2luZyB0aGUgd2lkZS1jaGFyYWN0ZXIgY29sb3Jfc2V0CisJICBhbmQgYXR0cl9zZXQgZnVuY3Rpb25zLgorCisyMDA0MTIxMQorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gd29yayB3aXRoIEludGVsIGNvbXBpbGVyLgorCSsgZml4IGFuIGxpbWl0LWNoZWNrIGluIHdhZGRfd2NobnN0cigpIHdoaWNoIGNhdXNlZCBsYWJlbHMgaW4gdGhlCisJICBmb3Jtcy1kZW1vIHRvIGJlIG9uZSBjaGFyYWN0ZXIgc2hvcnQuCisJKyBmaXggdHlwbyBpbiBjdXJzX2FkZGNoc3RyLjN4IChKYXJlZCBZYW5vdmljaCkuCisJKyBhZGQgdHJhY2UgY2FsbHMgdG8gbW9zdCBmdW5jdGlvbnMgaW4gZm9ybSBhbmQgbWVudSBsaWJyYXJpZXMuCisJKyB1cGRhdGUgd29ya2luZy1wb3NpdGlvbiBmb3IgYWRkaW5nIHdpZGUtY2hhcmFjdGVycyB3aGVuIHdpbmRvdyBpcworCSAgc2Nyb2xsZWQgKHByb21wdGVkIGJ5IHJlbGF0ZWQgcmVwb3J0IGJ5IEV1bmdreXUgU29uZykuCisKKzIwMDQxMjA0CisJKyByZXBsYWNlIHNvbWUgcmVmZXJlbmNlcyBvbiBMaW51eCB0byB3Y3J0b21iKCkgd2hpY2ggdXNlIGl0IHRvIG9idGFpbgorCSAgdGhlIGxlbmd0aCBvZiBhIG11bHRpYnl0ZSBzdHJpbmcgd2l0aCBfbmNfd2NydG9tYiwgc2luY2Ugd2NydG9tYigpIGlzCisJICBicm9rZW4gaW4gZ2xpYmMgKHNlZSBEZWJpYW4gIzI4NDI2MCkuCisJKyBjb3JyZWN0ZWQgbGVuZ3RoLWNvbXB1dGF0aW9uIGluIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQgZm9yCisJICBmaWVsZF9idWZmZXIoKS4KKwkrIHNvbWUgZml4ZXMgdG8gZnJtX2RyaXZlci5jIHRvIGFsbG93IGl0IHRvIGFjY2VwdCBtdWx0aWJ5dGUgaW5wdXQuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byB3b3JrIHdpdGggSW50ZWwgOC4wIGNvbXBpbGVyLgorCisyMDA0MTEyNworCSsgYW1lbmQgY2hhbmdlIHRvIHNldHVwdGVybSgpIGluIDIwMDMwNDA1IHdoaWNoIHdvdWxkIHJldXNlIHRoZSB2YWx1ZQorCSAgb2YgY3VyX3Rlcm0gaWYgdGhlIHNhbWUgb3V0cHV0IHdhcyBzZWxlY3RlZC4gIFRoaXMgbm93IHJldXNlcyBpdCBvbmx5CisJICB3aGVuIHNldHVwdGVybSgpIGlzIGNhbGxlZCBmcm9tIHRnZXRlbnQoKSwgd2hpY2ggaGFzIG5vIG5vdGlvbiBvZgorCSAgc2VwYXJhdGUgU0NSRUVOcy4gIE5vdGUgdGhhdCB0Z2V0ZW50KCkgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgaW5pdHNjcigpCisJICBvciBuZXd0ZXJtKCkgdG8gdXNlIHRoaXMgZmVhdHVyZSAoUmVkaGF0IEJ1Z3ppbGxhICMxNDAzMjYpLgorCSsgYWRkIGEgY2hlY2sgaW4gQ0ZfQlVJTERfQ0MgbWFjcm8gdG8gZW5zdXJlIHRoYXQgZGV2ZWxvcGVyIGhhcyBnaXZlbgorCSAgdGhlIC0td2l0aC1idWlsZC1jYyBvcHRpb24gd2hlbiBjcm9zcy1jb21waWxpbmcgKHJlcG9ydCBieSBBbGV4YW5kcmUKKwkgIENhbXBvKS4KKwkrIGltcHJvdmVkIGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2tzIGZvciBfWE9QRU5fU09VUkNFIGFuZAorCSAgX1BPU0lYX0NfU09VUkNFIChmaXggZm9yIElSSVggNS4zIGZyb20gR2VvcmcgU2Nod2FyeiwgX1BPU0lYX0NfU09VUkNFCisJICB1cGRhdGVzIGZyb20gbHlueCkuCisJKyBjb3NtZXRpYyBmaXggdG8gdGVzdC9nZGMuYyB0byByZWNvbG9yIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm94CisJICBmb3IgY29uc2lzdGVuY3kgKGNvbW1lbnQgYnkgRGFuIE5lbHNvbikuCisKKzIwMDQxMTIwCisJKyB1cGRhdGUgd3N2dDI1IHRlcm1pbmZvIGVudHJ5IC1URAorCSsgbW9kaWZ5IHRlc3QvaW5zX3dpZGUuYyB0byB0ZXN0IGFsbCBmbGF2b3JzIG9mIGluc193c3RyKCkuCisJKyBpZ25vcmUgZmlsbGVyLWNlbGxzIGluIHdhZGRfd2NobnN0cigpIHdoZW4gYWRkaW5nIGEgY2NoYXJfdCBhcnJheQorCSAgd2hpY2ggY29uc2lzdHMgb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMsIHNpbmNlIHRoaXMgZnVuY3Rpb24KKwkgIGNvbnN0cnVjdHMgdGhlbSAoY2Y6IDIwMDQxMDIzKS4KKwkrIG1vZGlmeSB3aW5uc3RyKCkgdG8gcmV0dXJuIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3RyaW5ncyBmb3IgdGhlCisJICB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uLgorCisyMDA0MTEwNgorCSsgZml4ZXMgdG8gbWFrZSBzbGtfc2V0KCkgYW5kIHNsa193c2V0KCkgYWNjZXB0IGFuZCBzdG9yZSBtdWx0aWJ5dGUKKwkgIG9yIG11bHRpY29sdW1uIGNoYXJhY3RlcnMuCisKKzIwMDQxMDMwCisJKyBpbXByb3ZlIGNvbG9yIG9wdGltaXphdGlvbiBhIGxpdHRsZSBieSBtYWtpbmcgX25jX2RvX2NvbG9yKCkgY2hlY2sKKwkgIGlmIHRoZSBvbGQvbmV3IHBhaXJzIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0IHBhaXIgMC4KKwkrIG1vZGlmeSBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKSB0byBub3QgcmVxdWlyZSB0aGF0CisJICB1c2VfZGVmYXVsdF9jb2xvcnMoKSBiZSBjYWxsZWQgZmlyc3QuCisKKzIwMDQxMDIzCisJKyBtb2RpZnkgdGVybV9hdHRycygpIHRvIHVzZSB0ZXJtYXR0cnMoKSwgYWRkIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzCisJICBzdWNoIGFzIGVudGVyX2hvcml6b250YWxfaGxfbW9kZSBmb3IgV0FfSE9SSVpPTlRBTCB0byB0ZXJtX2F0dHJzKCkuCisJKyBhZGQgbG9naWMgaW4gd2FkZGNoX2xpdGVyYWwoKSB0byBjbGVhciBvcnBoYW5lZCBjZWxscyB3aGVuIG9uZQorCSAgbXVsdGktY29sdW1uIGNoYXJhY3RlciBwYXJ0bHkgb3ZlcndyaXRlcyBhbm90aGVyLgorCSsgaW1wcm92ZWQgbG9naWMgZm9yIGNsZWFyaW5nIGNlbGxzIHdoZW4gYSBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyCisJICBtdXN0IGJlIHdyYXBwZWQgdG8gYSBuZXcgbGluZS4KKwkrIHJldmlzZSBzdG9yYWdlIG9mIGNlbGxzIGZvciBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycyB0byBjb3JyZWN0IGEKKwkgIHByb2JsZW0gd2l0aCByZXBhaW50aW5nLiAgSW4gdGhlIG9sZCBzY2hlbWUsIGl0IHdhcyBwb3NzaWJsZSBmb3IKKwkgIGRvdXBkYXRlKCkgdG8gZGVjaWRlIHRoYXQgb25seSBwYXJ0IG9mIGEgbXVsdGktY29sdW1uIGNoYXJhY3RlcgorCSAgc2hvdWxkIGJlIHJlcGFpbnRlZCBzaW5jZSB0aGUgZmlsbGVyIGNlbGxzIHN0b3JlZCBvbmx5IGFuIGF0dHJpYnV0ZQorCSAgdG8gZGVub3RlIHRoZW0gYXMgZmlsbGVycywgcmF0aGVyIHRoYW4gdGhlIGNoYXJhY3RlciB2YWx1ZSBhbmQgdGhlCisJICBhdHRyaWJ1dGUuCisKKzIwMDQxMDE2CisJKyBtaW5vciBmaXhlcyBmb3IgdHJhY2VzLgorCSsgYWRkIFNQLT5fc2NyZWVuX2Fjc19tYXBbXSwgdXNlZCB0byBlbnN1cmUgdGhhdCBtYXBwaW5nIG9mIG1pc3NpbmcKKwkgIGxpbmUtZHJhd2luZyBjaGFyYWN0ZXJzIGlzIGhhbmRsZWQgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgQUNTX0RBUlJPVworCSAgaXMgYWJzZW50IGZyb20geHRlcm0tbmV3LCBhbmQgaXQgd2FzIGNvaW5jaWRlbnRhbGx5IGRpc3BsYXllZCB0aGUKKwkgIHNhbWUgYXMgQUNTX0JURUUuCisKKzIwMDQxMDA5CisJKyBhbWVuZCAyMDAyMTIyMSB3b3JrYXJvdW5kIGZvciBicm9rZW4gYWNzIHRvIHJlc2V0IHRoZSBzZ3IsIHJtYWNzCisJICBhbmQgc21hY3Mgc3RyaW5ncyBhcyB3ZWxsLiAgQWxzbyBtb2RpZnkgdGhlIGNoZWNrIGZvciBzY3JlZW4ncworCSAgbGltaXRhdGlvbnMgaW4gdGhhdCBhcmVhIHRvIGFsbG93IHRoZSBtdWx0aS1jaGFyYWN0ZXIgc2hpZnQtaW4KKwkgIGFuZCBzaGlmdC1vdXQgd2hpY2ggc2VlbSB0byB3b3JrLgorCSsgY2hhbmdlIEdQTSBpbml0aWFsaXphdGlvbiwgdXNpbmcgZGwgbGlicmFyeSB0byBsb2FkIGl0IGR5bmFtaWNhbGx5CisJICBhdCBydW50aW1lIChEZWJpYW4gIzExMDU4NikuCisKKzIwMDQxMDAyCisJKyBjb3JyZWN0IGxvZ2ljIGZvciBjb2xvciBwYWlyIGluIHNldGNjaGFyKCkgYW5kIGdldGNjaGFyKCkgKHBhdGNoIGJ5CisJICBNYXJjaW4gJ1FyY3phaycgS293YWxjenlrKS4KKwkrIGFkZCB0L1QgY29tbWFuZHMgdG8gbmN1cnNlcyBiL0IgdGVzdHMgdG8gYWxsb3cgYSBkaWZmZXJlbnQgY29sb3IgdG8KKwkgIGJlIHRlc3RlZCBmb3IgdGhlIGF0dHJzZXQgcGFydCBvZiB0aGUgdGVzdCB0aGFuIGlzIHVzZWQgaW4gdGhlCisJICBiYWNrZ3JvdW5kIGNvbG9yLgorCisyMDA0MDkyNQorCSsgZml4IHRvIG1ha2Ugc2V0Y2NoYXIoKSB0byB3b3JrIHdoZW4gaXRzIHdjaGFyX3QqIHBhcmFtZXRlciBpcworCSAgcG9pbnRpbmcgdG8gYSBzdHJpbmcgd2hpY2ggY29udGFpbnMgbW9yZSBkYXRhIHRoYW4gY2FuIGJlIGNvbnZlcnRlZC4KKwkrIG1vZGlmeSB3Z2V0X3dzdHIoKSBhbmQgZXhhbXBsZSBpbiBuY3Vyc2VzLmMgdG8gd29yayBpZiB3Y2hhcl90IGFuZAorCSAgd2ludF90IGFyZSBkaWZmZXJlbnQgc2l6ZXMgKHJlcG9ydCBieSBNYXJjaW4gJ1FyY3phaycgS293YWxjenlrKS4KKworMjAwNDA5MTgKKwkrIHJlbW92ZSBjaGVjayBpbiB3Z2V0X3djaCgpIGFkZGVkIHRvIGZpeCBhbiBpbmZpbml0ZSBsb29wLCBhcHBlYXJzIHRvCisJICBoYXZlIGJlZW4gd29ya2luZyBhcm91bmQgYSB0cmFuc2l0b3J5IGdsaWJjIGJ1ZywgYW5kIGludGVyZmVyZXMKKwkgIHdpdGggbm9ybWFsIG9wZXJhdGlvbiAocmVwb3J0IGJ5IE1hcmNpbiAnUXJjemFrJyBLb3dhbGN6eWspLgorCSsgY29ycmVjdCB3YWRkX3djaCgpIGFuZCB3ZWNob193Y2goKSwgd2hpY2ggZGlkIG5vdCBwYXNzIHRoZSByZW5kaXRpb24KKwkgIGluZm9ybWF0aW9uIChyZXBvcnQgYnkgTWFyY2luICdRcmN6YWsnIEtvd2FsY3p5aykuCisJKyBmaXggYWNsb2NhbC5tNCBzbyB0aGF0IHRoZSB3aWRlLWNoYXJhY3RlciB2ZXJzaW9uIG9mIG5jdXJzZXMgZ2V0cworCSAgY29tcGlsZWQgYXMgbGlibmN1cnNlc3cuNS5keWxpYiwgaW5zdGVhZCBvZiBsaWJuY3Vyc2VzLjV3LmR5bGliCisJICAoYWRhcHRlZCBmcm9tIHBhdGNoIGJ5IEphbWVzIEogUmFtc2V5KS4KKwkrIGNoYW5nZSBjb25maWd1cmUgc2NyaXB0IGZvciAtLXdpdGgtY2FwcyBvcHRpb24gdG8gaW5kaWNhdGUgdGhhdCBpdAorCSAgaXMgbm8gbG9uZ2VyIGV4cGVyaW1lbnRhbC4KKwkrIGNoYW5nZSBjb25maWd1cmUgc2NyaXB0IHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCAtLWVuYWJsZS13aWRlYyBoYXMKKwkgIG5vdCBiZWVuICJleHBlcmltZW50YWwiIHNpbmNlIDUuMyAocmVwb3J0IGJ5IEJydW5vIEx1c3Rvc2EpLgorCisyMDA0MDkxMQorCSsgYWRkICdCJyB0ZXN0IHRvIG5jdXJzZXMuYywgdG8gZXhlcmNpc2Ugc29tZSB3aWRlLWNoYXJhY3RlciBmdW5jdGlvbnMuCisKKzIwMDQwODI4CisJKyBtb2RpZnkgaW5mb2NtcCAtaSBvcHRpb24gdG8gbWF0Y2ggOC1iaXQgY29udHJvbHMgYWdhaW5zdCBpdHMgdGFibGUKKwkgIGVudHJpZXMsIGUuZy4sIHNvIGl0IGNhbiBhbmFseXplIHRoZSB4dGVybS04Yml0IGVudHJ5LgorCSsgYWRkIG1vcnBob3MgdGVybWluZm8gZW50cnksIGltcHJvdmUgYW1pZ2EtOGJpdCBlbnRyeSAoUGF2ZWwgRmVkaW4pLgorCSsgY29ycmVjdCB0cmFuc2xhdGlvbiBvZiAiJSUiIGluIHRlcm1pbmZvIGZvcm1hdCB0byB0ZXJtY2FwLCBlLmcuLAorCSAgdXNpbmcgInRpYyAtQyIgKFJlZGhhdCBCdWd6aWxsYSAjMTMwOTIxKS4KKwkrIG1vZGlmaWVkIGNvbmZpZ3VyZSBzY3JpcHQgQ0ZfWE9QRU5fU09VUkNFIG1hY3JvIHRvIGVuc3VyZSB0aGF0IGlmCisJICBpdCBkZWZpbmVzIF9QT1NJWF9DX1NPVVJDRSwgdGhhdCBpdCBkZWZpbmVzIGl0IHRvIGEgc3BlY2lmaWMgdmFsdWUKKwkgIChjb21wLm9zLnN0cmF0dXMgbmV3c2dyb3VwIGNvbW1lbnQpLgorCisyMDA0MDgyMQorCSsgZml4ZXMgdG8gYnVpbGQgd2l0aCBBZGE5NSBiaW5kaW5nIHdpdGggZ25hdCAzLjQgKGFsbCB3YXJuaW5ncyBhcmUKKwkgIGZhdGFsLCBhbmQgZ25hdCBkb2VzIG5vdCBmb2xsb3cgdGhlIGd1aWRlbGluZXMgZm9yIHByYWdtYXMpLgorCSAgSG93ZXZlciB0aGF0IGRpZCBmaW5kIGEgY29kaW5nIGVycm9yIGluIEFzc3VtZV9EZWZhdWx0X0NvbG9ycygpLgorCSsgbW9kaWZ5IHNldmVyYWwgdGVybWluZm8gZW50cmllcyB0byBlbnN1cmUgeHRlcm0gbW91c2UgYW5kIGN1cnNvcgorCSAgdmlzaWJpbGl0eSBhcmUgcmVzZXQgaW4gcnMyIHN0cmluZzogIGh1cmQsIHB1dHR5LCBnbm9tZSwKKwkgIGtvbnNvbGUtYmFzZSwgbWx0ZXJtLCBFdGVybSwgc2NyZWVuIChEZWJpYW4gIzI2NTc4NCwgIzU1NjM3KS4gIFRoZQorCSAgeHRlcm0gZW50cmllcyBhcmUgbGVmdCBhbG9uZSAtIG9sZCBvbmVzIGZvciBjb21wYXRpYmlsaXR5LCBhbmQgdGhlCisJICBuZXcgb25lcyBkbyBub3QgcmVxdWlyZSB0aGlzIGNoYW5nZS4gLVRECisKKzIwMDQwODE0CisJKyBmYWtlIGEgU0lHV0lOQ0ggaW4gbmV3dGVybSgpIHRvIGFjY29tbW9kYXRlIGJ1Z2d5IHRlcm1pbmFsIGVtdWxhdG9ycworCSAgYW5kIHdpbmRvdyBtYW5hZ2VycyAoRGViaWFuICMyNjU2MzEpLgorCT4gdGVybWluZm8gdXBkYXRlcyAtVEQKKwkrIHJlbW92ZSBkY2gvZGNoMSBmcm9tIHJ4dnQgYmVjYXVzZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpbmNvbnNpc3RlbnRseQorCSAgd2l0aCB0aGUgY29tbW9uIHVzYWdlIG9mIGJjZS9lY2gKKwkrIHJlbW92ZSBraG9tZSBmcm9tIHZ0MjIwICh2dDIyMCdzIGhhdmUgbm8gaG9tZSBrZXkpCisJKyBhZGQgcnh2dCtwY2ZrZXlzCisKKzIwMDQwODA3CisJKyBtb2RpZnkgdGVzdC9uY3Vyc2VzLmMgJ2InIHRlc3QsIGFkZGluZyB2L1YgdG9nZ2xlcyB0byBjeWNsZSB0aHJvdWdoCisJICBjb21iaW5hdGlvbnMgb2YgdmlkZW8gYXR0cmlidXRlcyBzbyB0aGF0IGZvciBpbnN0YW5jZSBib2xkIGFuZAorCSAgdW5kZXJsaW5lIGNhbiBiZSB0ZXN0ZWQuICBUaGlzIG1hZGUgdGhlIGxlZ2VuZCB0b28gY3Jvd2RlZCwgYWRkZWQKKwkgIGEgaGVscCB3aW5kb3cgYXMgd2VsbC4KKwkrIG1vZGlmeSB0ZXN0L25jdXJzZXMuYyAnYicgdGVzdCB0byBjeWNsZSB0aHJvdWdoIGRlZmF1bHQgY29sb3JzIGlmCisJICB0aGUgLWQgb3B0aW9uIGlzIHNldC4KKwkrIHVwZGF0ZSBwdXR0eSB0ZXJtaW5mbyBlbnRyeSAoUm9iZXJ0IGRlIEJhdGgpLgorCisyMDA0MDczMQorCSsgbW9kaWZ5IHRlc3QvY2FyZGZpbGUuYyB0byBhbGxvdyBpdCB0byByZWFkIG1vcmUgZGF0YSB0aGFuIGNhbiBiZQorCSAgZGlzcGxheWVkLgorCSsgY29ycmVjdCBsb2dpYyBpbiByZXNpemV0ZXJtLmMgd2hpY2gga2VwdCBpdCBmcm9tIHByb2Nlc3NpbmcgYWxsCisJICBsZXZlbHMgb2Ygd2luZG93IGhpZXJhcmNoeSAocmVwb3J0cyBieSBGb2xrZXJ0IHZhbiBIZXVzZGVuLAorCSAgQ2hyaXMgU2hhcmUpLgorCisyMDA0MDcyNAorCSsgbW9kaWZ5ICJ0aWMgLWN2IiB0byBpZ25vcmUgZGVsYXlzIHdoZW4gY29tcGFyaW5nIHN0cmluZ3MuICBBbHNvCisJICBtb2RpZnkgaXQgdG8gaWdub3JlIGEgY2FuY2VsZWQgc2dyIHN0cmluZywgZS5nLiwgZm9yIHRlcm1pbmFscyB3aGljaAorCSAgY2Fubm90IHByb3Blcmx5IGNvbWJpbmUgYXR0cmlidXRlcyBpbiBvbmUgY29udHJvbCBzZXF1ZW5jZS4KKwkrIGNvcnJlY3Rpb25zIGZvciBnbm9tZSBhbmQga29uc29sZSBlbnRyaWVzIChSZWRoYXQgQnVnemlsbGEgIzEyMjgxNSwKKwkgIHBhdGNoIGJ5IEhhbnMgZGUgR29lZGUpCisJPiB0ZXJtaW5mbyB1cGRhdGVzIC1URAorCSsgbWFrZSBuY3NhLW0gcm1hY3Mvc21hY3MgY29uc2lzdGVudCB3aXRoIHNncgorCSsgYWRkIHNnciwgcmMvc2MgYW5kIGVjaCB0byBzeXNjb25zIGVudHJpZXMKKwkrIGFkZCBmdW5jdGlvbi1rZXlzIHRvIGRlY2Fuc2kKKwkrIGFkZCBzZ3IgdG8gbXRlcm0tYW5zaQorCSsgYWRkIHNnciwgY2l2aXMsIGNub3JtIHRvIGVtdQorCSsgY29ycmVjdC9zaW1wbGlmeSBjdXAgaW4gYWRkcmluZm8KKworMjAwNDA3MTcKKwk+IHRlcm1pbmZvIHVwZGF0ZXMgLVRECisJKyBhZGQgeHRlcm0tcGMtZmtleXMKKwkrIHJldmlldy91cGRhdGUgZ25vbWUgYW5kIGdub21lLXJoOTAgZW50cmllcyAocHJvbXB0ZWQgYnkgUmVkaGF0CisJICBCdWd6aWxsYSAjMTIyODE1KS4KKwkrIHJldmlldy91cGRhdGUga29uc29sZSBlbnRyaWVzCisJKyBhZGQgc2dyLCBjb3JyZWN0IHNncjAgZm9yIGt0ZXJtIGFuZCBtbHRlcm0KKwkrIGNvcnJlY3QgdHNsIHN0cmluZyBpbiBrdGVybQorCisyMDA0MDcxMQorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRob3V0LXh0ZXJtLW5ldworCisyMDA0MDcxMAorCSsgYWRkIGNoZWNrIGluIHdnZXRfd2NoKCkgZm9yIHByaW50YWJsZSBieXRlcyB0aGF0IGFyZSBub3QgcGFydCBvZiBhCisJICBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorCSsgbW9kaWZ5IHdhZGRfd2NobnN0cigpIHRvIHJlbmRlciB0ZXh0IHVzaW5nIHdpbmRvdydzIGJhY2tncm91bmQKKwkgIGF0dHJpYnV0ZXMuCisJKyBpbXByb3ZlIHRpYydzIGNoZWNrIHRvIGNvbXBhcmUgc2dyIGFuZCBzZ3IwLgorCSsgZml4IGMrKyBkaXJlY3RvcnkncyAuY2MuaSBydWxlLgorCSsgbW9kaWZ5IGxvZ2ljIGluIHRnZXRlbnQoKSB3aGljaCBhZGp1c3RzIHRoZSB0ZXJtY2FwICJtZSIgc3RyaW5nCisJICB0byB3b3JrIHdpdGggSVNPLTIwMjIgc3RyaW5nIHVzZWQgaW4geHRlcm0tbmV3IChjZjogMjAwMTA5MDgpLgorCSsgbW9kaWZ5IHRpYydzIGNoZWNrIGZvciBjb25mbGljdGluZyBmdW5jdGlvbiBrZXlzIHRvIG9taXQgdGhhdCBpZgorCSAgY29udmVydGluZyB0ZXJtY2FwIHRvIHRlcm1jYXAgZm9ybWF0LgorCSsgYWRkIC1VIG9wdGlvbiB0byB0aWMgYW5kIGluZm9jbXAuCisJKyBhZGQgcm1hbS9zbWFtIHRvIGxpbnV4IHRlcm1pbmZvIGVudHJ5IChUcmV2b3IgVmFuIEJyZW1lbikKKwk+IHRlcm1pbmZvIHVwZGF0ZXMgLVRECisJKyBtaW5vciBmaXhlcyBmb3IgZW11CisJKyBhZGQgZW11LTIyMAorCSsgY2hhbmdlIHd5c2UgYWNzYyBzdHJpbmdzIHRvIHVzZSAnaScgbWFwIHJhdGhlciB0aGFuICdJJworCSsgZml4ZXMgZm9yIGF2YXRhcjAKKwkrIGZpeGVzIGZvciB2cDNhKworCisyMDA0MDcwMworCSsgdXNlIHRpYyAteCB0byBpbnN0YWxsIHRlcm1pbmZvIGRhdGFiYXNlIC1URAorCSsgYWRkIC14IHRvIGluZm9jbXAncyB1c2FnZSBtZXNzYWdlLgorCSsgY29ycmVjdCBmaWVsZCB1c2VkIGZvciBjb21wYXJpbmcgT19ST1dNQUpPUiBpbiBzZXRfbWVudV9mb3JtYXQoKQorCSAgKHJlcG9ydC9wYXRjaCBieSBUb255IExpKS4KKwkrIGZpeCBhIG1pc3NpbmcgbnVsIGNoZWNrIGluIHNldF9maWVsZF9idWZmZXIoKSBmcm9tIDIwMDQwNTA4IGNoYW5nZXMuCisJPiB0ZXJtaW5mbyB1cGRhdGVzIC1URAorCSAgKyBtYWtlIHh0ZXJtLXhmODYtdjQzIGRlcml2ZWQgZnJvbSB4dGVybS14Zjg2LXY0MCByYXRoZXIgdGhhbgorCSAgICB4dGVybS1iYXNpYyAtVEQKKwkgICsgYWxpZ24gd2l0aCB4dGVybSBwYXRjaCAjMTkyJ3MgdXNlIG9mIHh0ZXJtLW5ldyAtVEQKKwkgICsgdXBkYXRlIHh0ZXJtLW5ldyBhbmQgeHRlcm0tOGJpdCBmb3IgY3Z2aXMvY25vcm0gc3RyaW5ncyAtVEQKKwkgICsgbWFrZSB4dGVybS1uZXcgdGhlIGRlZmF1bHQgInh0ZXJtIiBlbnRyeSAtVEQKKworMjAwNDA2MjYKKwkrIGNvcnJlY3QgQlVJTERfQ1BQRkxBR1Mgc3Vic3RpdHV0aW9uIGluIG5jdXJzZXMvTWFrZWZpbGUuaW4sIHRvIGFsbG93CisJICBjcm9zcy1jb21waWxpbmcgZnJvbSBhIHNlcGFyYXRlIGRpcmVjdG9yeSB0cmVlIChyZXBvcnQvcGF0Y2ggYnkKKwkgIERhbiBFbmdlbCkuCisJKyBtb2RpZnkgaXNfdGVybV9yZXNpemVkKCkgdG8gZW5zdXJlIHRoYXQgd2luZG93IHNpemVzIGFyZSBub256ZXJvLAorCSAgYXMgZG9jdW1lbnRlZCBpbiB0aGUgbWFucGFnZSAocmVwb3J0IGJ5IElhbiBDb2xsaWVyKS4KKwkrIG1vZGlmeSBDRl9YT1BFTl9TT1VSQ0UgY29uZmlndXJlIG1hY3JvIHRvIG1ha2UgSHVyZCBwb3J0IGJ1aWxkCisJICAoRGViaWFuICMyNDkyMTQsIHJlcG9ydC9wYXRjaCBieSBKZWZmIEJhaWxleSkuCisJKyBjb25maWd1cmUtc2NyaXB0IG1vZHMgZnJvbSB4dGVybSwgZS5nLiwgdXBkYXRlcyB0byBDRl9BRERfQ0ZMQUdTCisJKyB1cGRhdGUgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViCisJPiB0ZXJtaW5mbyB1cGRhdGVzIC1URAorCSAgKyBhZGQgbWx0ZXJtCisJICArIGFkZCB4dGVybS14Zjg2LXY0NAorCSAgKyBtb2RpZnkgeHRlcm0tbmV3IGFrYSB4dGVybS14ZnJlZTg2IHRvIGFjY29tbW9kYXRlIGx1aXQsIHdoaWNoCisJICAgIHJlbGllcyBvbiBHMSBiZWluZyB1c2VkIHZpYSBhbiBJU08tMjAyMiBlc2NhcGUgc2VxdWVuY2UgKHJlcG9ydCBieQorCSAgICBKdWxpdXN6IENocm9ib2N6ZWspCisJICArIGFkZCAnaHVyZCcgZW50cnkKKworMjAwNDA2MTkKKwkrIHJlY29uc2lkZXJlZCB3aW5zbnN0cigpLCBkZWNpZGVkIGFmdGVyIGNvbXBhcmluZyBvdGhlcgorCSAgaW1wbGVtZW50YXRpb25zIHRoYXQgd3JhcHBpbmcgaXMgYW4gWC9PcGVuIGRvY3VtZW50YXRpb24gZXJyb3IuCisJKyBtb2RpZnkgdGVzdC9pbnNlcnRzLmMgdG8gdGVzdCBhbGwgZmxhdm9ycyBvZiBpbnNzdHIoKS4KKworMjAwNDA2MDUKKwkrIGFkZCBzZXRsb2NhbGUoKSBjYWxscyB0byBhIGZldyB0ZXN0IHByb2dyYW1zIHdoaWNoIG1heSByZXF1aXJlIGl0OgorCSAgZGVtb19mb3Jtcy5jLCBmaWx0ZXIuYywgaW5zX3dpZGUuYywgaW5zZXJ0cy5jCisJKyBjb3JyZWN0IGEgZmV3IG1pc3NwZWxsZWQgZnVuY3Rpb24gbmFtZXMgaW4gbmN1cnNlcy1pbnRyby5odG1sIChyZXBvcnQKKwkgIGJ5IFRvbnkgTGkpLgorCSsgY29ycmVjdCBpbnRlcm5hbCBuYW1lIG9mIGtleV9kZWZpbmVkKCkgbWFucGFnZSwgd2hpY2ggY29uZmxpY3RlZCB3aXRoCisJICBkZWZpbmVfa2V5KCkuCisKKzIwMDQwNTI5CisJKyBjb3JyZWN0IHNpemUgb2YgaW50ZXJuYWwgcGFkIHVzZWQgZm9yIGhvbGRpbmcgd2lkZS1jaGFyYWN0ZXIKKwkgIGZpZWxkX2J1ZmZlcigpIHJlc3VsdHMuCisJKyBtb2RpZnkgZGF0YV9haGVhZCgpIHRvIHdvcmsgd2l0aCB3aWRlLWNoYXJhY3RlcnMuCisKKzIwMDQwNTIyCisJKyBpbXByb3ZlIGRlc2NyaXB0aW9uIG9mIHRlcm1pbmZvIGlmLXRoZW4tZWxzZSBleHByZXNzaW9ucyAoc3VnZ2VzdGVkCisJICBieSBBcm5lIFRob21hc3NlbikuCisJKyBpbXByb3ZlIHRlc3QvbmN1cnNlcy5jICdkJyB0ZXN0LCBhbGxvdyBpdCB0byB1c2UgZXh0ZXJuYWwgZmlsZSBmb3IKKwkgIGluaXRpYWwgcGFsZXR0ZSAoYWRkZWQgeHRlcm0tMTZjb2xvci5kYXQgYW5kIGxpbnV4LWNvbG9yLmRhdCksIGFuZAorCSAgcmVzZXQgY29sb3JzIHRvIHRoZSBpbml0aWFsIHBhbGV0dGUgd2hlbiBzdGFydGluZy9lbmRpbmcgdGhlIHRlc3QuCisJKyBjaGFuZ2UgbGltaXQtY2hlY2sgaW4gaW5pdF9jb2xvcigpIHRvIGFsbG93IHIvZy9iIGNvbXBvbmVudCB0bworCSAgcmVhY2ggMTAwMCAoY2Y6IDIwMDIwOTI4KS4KKworMjAwNDA1MTYKKwkrIG1vZGlmeSBmb3JtIGxpYnJhcnkgdG8gdXNlIGNjaGFyX3QncyByYXRoZXIgdGhhbiBjaGFyJ3MgaW4gdGhlCisJICB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uIGZvciBzdG9yaW5nIGRhdGEgZm9yIGZpZWxkIGJ1ZmZlcnMuCisJKyBjb3JyZWN0IGxvZ2ljIG9mIHdpbl93Y2huc3RyKCksIHdoaWNoIGRpZCBub3Qgd29yayBmb3IgbW9yZSB0aGFuCisJICBvbmUgY2VsbC4KKworMjAwNDA1MDgKKwkrIHJlcGxhY2UgbWVtc2V0L21lbWNweSB1c2FnZSBpbiBmb3JtIGxpYnJhcnkgd2l0aCBmb3ItbG9vcHMgdG8KKwkgIHNpbXBsaWZ5IGNoYW5naW5nIHRoZSBkYXRhdHlwZSBvZiBGSUVMRC5idWYsIHBhcnQgb2Ygd2lkZS1jaGFyYWN0ZXIKKwkgIGNoYW5nZXMuCisJKyBmaXggc29tZSBpbmNvbnNpc3RlbnQgdXNlIG9mICNpZi8jaWZkZWYgKHJlcG9ydCBieSBBbGFpbiBHdWliZXJ0KS4KKworMjAwNDA1MDEKKwkrIG1vZGlmeSBtZW51IGxpYnJhcnkgdG8gYWNjb3VudCBmb3IgYWN0dWFsIG51bWJlciBvZiBjb2x1bW5zIHVzZWQgYnkKKwkgIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3RyaW5ncywgaW4gdGhlIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24KKwkgIChhZGFwdGVkIGZyb20gcGF0Y2ggYnkgUGhpbGlwcCBUb21zaWNoKS4KKwkrIGFkZCAiLXgiIG9wdGlvbiB0byBpbmZvY21wIGxpa2UgdGljJ3MgIi14IiwgZm9yIHVzZSBpbiAiLUYiCisJICBjb21wYXJpc29ucy4gIFRoaXMgbW9kaWZpZXMgaW5mb2NtcCB0byBvbmx5IHJlcG9ydCBleHRlbmRlZAorCSAgY2FwYWJpbGl0aWVzIGlmIHRoZSAteCBvcHRpb24gaXMgZ2l2ZW4sIG1ha2luZyB0aGlzIG1vcmUgY29uc2lzdGVudAorCSAgd2l0aCB0aWMuICBTb21lIHNjcmlwdHMgbWF5IGJyZWFrLCBzaW5jZSBpbmZvY21wIHByZXZpb3VzIGdhdmUgdGhpcworCSAgaW5mb3JtYXRpb24gd2l0aG91dCBhbiBvcHRpb24uCisJKyBtb2RpZnkgdGVybWNhcC1wYXJzaW5nIHRvIHJldGFpbiAyLWNoYXJhY3RlciBhbGlhc2VzIGF0IHRoZSBiZWdpbm5pbmcKKwkgIG9mIGFuIGVudHJ5IGlmIHRoZSAiLXgiIG9wdGlvbiBpcyB1c2VkIGluIHRpYy4KKworMjAwNDA0MjQKKwkrIG1pbm9yIGNvbXBpbGVyLXdhcm5pbmcgYW5kIHRlc3QtcHJvZ3JhbSBmaXhlcy4KKworMjAwNDA0MTcKKwkrIG1vZGlmeSB0aWMncyBtaXNzaW5nLXNnciB3YXJuaW5nIHRvIGFwcGx5IHRvIHRlcm1pbmZvIG9ubHkuCisJKyBmcmVlIHNvbWUgbWVtb3J5IGxlYWtzIGluIHRpYy4KKwkrIHJlbW92ZSBjaGVjayBpbiBwb3N0X21lbnUoKSB0aGF0IHByZXZlbnRlZCBtZW51cyBmcm9tIGV4dGVuZGluZworCSAgYmV5b25kIHRoZSBzY3JlZW4gKHJlcXVlc3QgYnkgTWF4IEouIFdlcm5lcikuCisJKyByZW1vdmUgY2hlY2sgaW4gbmV3d2luKCkgdGhhdCBwcmV2ZW50cyBhbGxvY2F0aW5nIHdpbmRvd3MKKwkgIHRoYXQgZXh0ZW5kIGJleW9uZCB0aGUgc2NyZWVuLiAgU29sYXJpcyBjdXJzZXMgZG9lcyB0aGlzLgorCSsgYWRkIGlmZGVmIGluIHRlc3QvY29sb3Jfc2V0LmMgdG8gYWxsb3cgaXQgdG8gY29tcGlsZSB3aXRoIG9sZGVyCisJICBjdXJzZXMuCisJKyBhZGQgbmFwbXMoKSBjYWxscyB0byB0ZXN0L2RvdHMuYyB0byBtYWtlIGl0IG5vdCBiZSBhIENQVSBob2cuCisKKzIwMDQwNDAzCisJKyBtb2RpZnkgdW5jdHJsKCkgdG8gcmV0dXJuIG51bGwgaWYgaXRzIHBhcmFtZXRlciBkb2VzIG5vdCBjb3JyZXNwb25kCisJICB0byBhbiB1bnNpZ25lZCBjaGFyLgorCSsgYWRkIHNvbWUgbGltaXQtY2hlY2tzIHRvIGd1YXJkIGlzcHJpbnQoKSwgZXRjLiwgZnJvbSBiZWluZyB1c2VkIG9uCisJICB2YWx1ZXMgdGhhdCBkbyBub3QgZml0IGludG8gYW4gdW5zaWduZWQgY2hhciAocmVwb3J0IGJ5IFNhbWkgRmFyaW4pLgorCisyMDA0MDMyOAorCSsgZml4IGEgdHlwbyBpbiB0aGUgX25jX2dldF9sb2NhbGUoKSBjaGFuZ2UuCisKKzIwMDQwMzI3CisJKyBtb2RpZnkgX25jX2dldF9sb2NhbGUoKSB0byB1c2Ugc2V0bG9jYWxlKCkgdG8gcXVlcnkgdGhlIHByb2dyYW0ncworCSAgY3VycmVudCBsb2NhbGUgcmF0aGVyIHRoYW4gdXNpbmcgZ2V0ZW52KCkuICBUaGlzIGZpeGVzIGEgY2FzZSBpbiB0aW4KKwkgIHdoaWNoIHJlbGllcyBvbiBsZWdhY3kgdHJlYXRtZW50IG9mIDgtYml0IGNoYXJhY3RlcnMgd2hlbiB0aGUgbG9jYWxlCisJICBpcyBub3QgaW5pdGlhbGl6ZWQgKHJlcG9ydGVkIGJ5IFVycyBKYW5zZW4pLgorCSsgYWRkIHNnciBzdHJpbmcgdG8gc2NyZWVuJ3MgYW5kIHJ4dnQncyB0ZXJtaW5mbyBlbnRyaWVzIC1URC4KKwkrIGFkZCBhIGNoZWNrIGluIHRpYyBmb3IgdGVybWluZm8gZW50cmllcyBoYXZpbmcgYW4gc2dyMCBidXQgbm8gc2dyCisJICBzdHJpbmcuICBUaGlzIGNvbmZ1c2VzIFRydTY0IGFuZCBIUFVYIGN1cnNlcyB3aGVuIGNvbWJpbmVkIHdpdGgKKwkgIGNvbG9yLCBlLmcuLCBtYWtpbmcgdGhlbSBsZWF2ZSBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycyBpbiBvZGQgcGxhY2VzLgorCSsgY29ycmVjdCBjYXN0cyB1c2VkIGluIEFCU0VOVF9CT09MRUFOLCBDQU5DRUxMRURfQk9PTEVBTiwgbWF0Y2hlcyB0aGUKKwkgIG9yaWdpbmFsIGRlZmluaXRpb25zIHVzZWQgaW4gRGViaWFuIHBhY2thZ2UgdG8gZml4IFBvd2VyUEMgYnVnIGJlZm9yZQorCSAgMjAwMzA4MDIgKERlYmlhbiAjMjM3NjI5KS4KKworMjAwNDAzMjAKKwkrIG1vZGlmeSBQdXRBdHRyQ2hhcigpIGFuZCBQVVRDKCkgbWFjcm8gdG8gaW1wcm92ZSB1c2Ugb2YKKwkgIEFfQUxUQ0hBUlNFVCBhdHRyaWJ1dGUgdG8gcHJldmVudCBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycyBmcm9tCisJICBiZWluZyBsb3N0IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGxvY2FsZSB3b3VsZCBvdGhlcndpc2UgdHJlYXQgdGhlCisJICByYXcgZGF0YSBhcyBub25wcmludGFibGUgKERlYmlhbiAjMjI3ODc5KS4KKworMjAwNDAzMTMKKwkrIGZpeCBhIHJlZGVmaW5pdGlvbiBvZiBDVFJMKCkgbWFjcm8gaW4gdGVzdC92aWV3LmMgZm9yIEFJWCA1LjIgKHJlcG9ydAorCSAgYnkgSmltIElkbGUpLgorCSsgcmVtb3ZlICIuUFAiIGFmdGVyICIuU0ggTkFNRSIgaW4gYSBmZXcgbWFucGFnZXM7IHRoaXMgY29uZnVzZXMKKwkgIHNvbWUgYXByb3BvcyBzY3JpcHQgKERlYmlhbiAjMjM3ODMxKS4KKworMjAwNDAzMDYKKwkrIG1vZGlmeSBuY3Vyc2VzLmMgJ3InIHRlc3Qgc28gZWRpdGluZyBjb21tYW5kcywgbGlrZSBpbnNlcnRlZCB0ZXh0LAorCSAgc2V0IHRoZSBmaWVsZCBiYWNrZ3JvdW5kLCBhbmQgdGhlIHN0YXRlIG9mIGluc2VydC9vdmVybGF5IGVkaXRpbmcKKwkgIG1vZGUgaXMgc2hvd24gaW4gdGhhdCB0ZXN0LgorCSsgY2hhbmdlIHN5bnRheCBvZiBkdW1teSB0YXJnZXRzIGluIEFkYTk1IG1ha2VmaWxlcyB0byB3b3JrIHdpdGggcG1ha2UuCisJKyBjb3JyZWN0IGxvZ2ljIGluIHRlc3QvbmN1cnNlcy5jICdiJyBmb3Igbm9uY29sb3IgdGVybWluYWxzIHdoaWNoCisJICBkaWQgbm90IHJlY29nbml6ZSBhIHF1aXQtY29tbWFuZCAoY2Y6IDIwMDMwNDE5KS4KKworMjAwNDAyMjgKKwkrIG1vZGlmeSBfbmNfaW5zZXJ0X2NoKCkgdG8gYWxsb3cgZm9yIGl0cyBpbnB1dCB0byBiZSBwYXJ0IG9mIGEKKwkgIG11bHRpYnl0ZSBzdHJpbmcuCisJKyBzcGxpdCBvdXQgbGliX2luc25zdHIuYywgdG8gcHJlcGFyZSB0byByZXdyaXRlIGl0LiAgWC9PcGVuIHN0YXRlcworCSAgdGhhdCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHdyYXBwaW5nLCB1bmxpa2UgYWxsIG9mIHRoZSBvdGhlcgorCSAgaW5zZXJ0LWZ1bmN0aW9ucy4gIEN1cnJlbnRseSBpdCBkb2VzIG5vdCB3cmFwLgorCSsgY2hlY2sgZm9yIG5sX2xhbmdpbmZvKENPREVTRVQpLCB1c2UgaXQgaWYgYXZhaWxhYmxlIChyZXBvcnQgYnkKKwkgIFN0YW5pc2xhdiBJZXZsZXYpLgorCSsgc3BsaXQtb3V0IENGX0JVSUxEX0NDIG1hY3JvLCBhY3R1YWxseSBkaWQgdGhpcyBmb3IgbHlueCBmaXJzdC4KKwkrIGZpeGVzIGZvciBjb25maWd1cmUgc2NyaXB0IENGX1dJVEhfREJNQUxMT0MgYW5kIENGX1dJVEhfRE1BTExPQywKKwkgIHdoaWNoIGhhcHBlbmVkIHRvIHdvcmsgd2l0aCBiYXNoLCBidXQgbm90IHdpdGggQm91cm5lIHNoZWxsIChyZXBvcnQKKwkgIGJ5IE1hcmNvIGQnSXRyaSB2aWEgdGluLWRldikuCisKKzIwMDQwMjIxCisJKyBzb21lIGNoYW5nZXMgdG8gYWRhcHQgdGhlIGZvcm0gbGlicmFyeSB0byB3aWRlIGNoYXJhY3RlcnMsIGluY29tcGxldGUKKwkgIChyZXF1ZXN0IGJ5IE1pa2UgQXVidXJ5KS4KKwkrIGFkZCBzeW1ib2wgdG8gY3Vyc2VzLmggd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3VwcHJlc3MgaW5jbHVkZSBvZgorCSAgc3RkYm9vbC5oLCBlLmcuLAorCSAgCSNkZWZpbmUgTkNVUlNFU19FTkFCTEVfU1REQk9PTF9IIDAKKwkJI2luY2x1ZGUgPGN1cnNlcy5oPgorCSAgKGRpc2N1c3Npb24gb24gWEZyZWU4NiBtYWlsaW5nIGxpc3QpLgorCisyMDA0MDIxNAorCSsgbW9kaWZ5IGNvbmZpZ3VyZSAtLXdpdGgtdGVybWxpYiBvcHRpb24gdG8gYWNjZXB0IGEgdmFsdWUgd2hpY2ggc2V0cworCSAgdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmZvIGxpYnJhcnkuICBUaGlzIHdvdWxkIGFsbG93IGEgcGFja2FnZXIgdG8KKwkgIGJ1aWxkIGxpYnRpbmZvdy5zbyByZW5hbWVkIHRvIGNvaW5jaWRlIHdpdGggbGlidGluZm8uc28gKGRpc2N1c3Npb24KKwkgIHdpdGggU3RhbmlzbGF2IElldmxldikuCisJKyBpbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgLS13aXRoLWluc3RhbGwtcHJlZml4LCAtLXByZWZpeCBhbmQKKwkgICQoREVTVERJUikgaW4gSU5TVEFMTCAocHJvbXB0ZWQgYnkgZGlzY3Vzc2lvbiB3aXRoIFBhdWwgTGV3KS4KKwkrIGFkZCBjb25maWd1cmUgY2hlY2sgaWYgdGhlIGNvbXBpbGVyIGNhbiB1c2UgLWMgLW8gb3B0aW9ucyB0byByZW5hbWUKKwkgIGl0cyBvdXRwdXQgZmlsZSwgdXNlIHRoYXQgdG8gb21pdCB0aGUgJ2NkJyBjb21tYW5kIHdoaWNoIHdhcyB1c2VkIHRvCisJICBlbnN1cmUgb2JqZWN0IGZpbGVzIGFyZSBjcmVhdGVkIGluIGEgc2VwYXJhdGUgc3RhZ2luZyBkaXJlY3RvcnkKKwkgIChwcm9tcHRlZCBieSBjb21tZW50cyBieSBKb2hubnkgV2V6ZWwsIE1hcnRpbiBNb2tyZWpzKS4KKworMjAwNDAyMDggNS40IHJlbGVhc2UgZm9yIHVwbG9hZCB0byBmdHAuZ251Lm9yZworCSsgdXBkYXRlIFRPLURPLgorCisyMDA0MDIwNyBwcmUtcmVsZWFzZQorCSsgbWlub3IgZml4ZXMgdG8gX25jX3RwYXJtX2FuYWx5emUoKSwgaS5lLiwgZG8gbm90IGNvdW50ICVpIGFzIGEgcGFyYW0sCisJICBhbmQgZG8gbm90IGNvdW50ICVkIGlmIGl0IGZvbGxvd3MgYSAlcC4KKwkrIGNvcnJlY3QgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIGhhbmRsaW5nIG9mIGNvZGVzIGluIHRoZSAxMjgtMjU1CisJICByYW5nZSwgZS5nLiwgYXMgaWxsdXN0cmF0ZWQgYnkgdGVzdC9uY3Vyc2VzLmMgZi9GIHRlc3RzLiAgSW4gUE9TSVgKKwkgIGxvY2FsZSwgdGhlIGxhdHRlciBkaWQgbm90IHNob3cgcHJpbnRhYmxlIHJlc3VsdHMsIHdoaWxlIHRoZSBmb3JtZXIKKwkgIGRpZC4KKwkrIG1vZGlmeSBNS2xpYl9nZW4uc2ggdG8gY29tcGVuc2F0ZSBmb3IgYnJva2VuIEMgcHJlcHJvY2Vzc29yIG9uIE1hYworCSAgT1MgWCwgd2hpY2ggYWx0ZXJzICIlJSIgdG8gIiUgJSAiIChyZXBvcnQgYnkgUm9iZXJ0IFNpbW1zLCBmaXgKKwkgIHZlcmlmaWVkIGJ5IFNjb3R0IENvcnNjYWRkZW4pLgorCisyMDA0MDEzMSBwcmUtcmVsZWFzZQorCSsgbW9kaWZ5IFNDUkVFTiBzdHJ1Y3QgdG8gYWxpZ24gaXQgYmV0d2VlbiBub3JtYWwvd2lkZSBjdXJzZXMgZmxhdm9ycworCSAgdG8gc2ltcGxpZnkgZnV0dXJlIGNoYW5nZXMgdG8gYnVpbGQgYSBzaW5nbGUgdmVyc2lvbiBvZiBsaWJ0aW5mbworCSAgKHBhdGNoIGJ5IFN0YW5pc2xhdiBJZXZsZXYpLgorCSsgZG9jdW1lbnQgaGFuZGxpbmcgb2YgY2FycmlhZ2UgcmV0dXJuIGJ5IGFkZGNoKCkgaW4gbWFucGFnZS4KKwkrIGRvY3VtZW50IHNwZWNpYWwgZmVhdHVyZXMgb2YgdW5jdHJsKCkgaW4gbWFucGFnZS4KKwkrIGRvY3VtZW50ZWQgaW50ZXJmYWNlIGNoYW5nZXMgaW4gSU5TVEFMTC4KKwkrIGNvcnJlY3RlZCBjb250cm9sLWNoYXIgdGVzdCBpbiBsaWJfYWRkY2guYyB0byBhY2NvdW50IGZvciBsb2NhbGUKKwkgIChEZWJpYW4gIzIzMDMzNSwgY2Y6IDk3MTIwNikuCisJKyB1cGRhdGVkIHRlc3QvY29uZmlndXJlLmluIHRvIHVzZSBBQ19FWEVFWFQgYW5kIEFDX09CSkVYVC4KKwkrIGZpeGVzIHRvIGNvbXBpbGUgQWRhOTUgYmluZGluZyB3aXRoIERlYmlhbiBnbmF0IDMuMTVwLTQgcGFja2FnZS4KKwkrIG1pbm9yIGNvbmZpZ3VyZS1zY3JpcHQgZml4ZXMgZm9yIG9sZGVyIHBvcnRzLCBlLmcuLCBCZU9TIFI0LjUuCisKKzIwMDQwMTI1IHByZS1yZWxlYXNlCisJKyBhbWVuZCBjaGFuZ2UgdG8gUHV0QXR0ckNoYXIoKSBmcm9tIDIwMDMwNjE0IHdoaWNoIGNvbXB1dGVkIHRoZSBudW1iZXIKKwkgIG9mIGNlbGxzIGZvciBhIHBvc3NpYmx5IG11bHRpLWNlbGwgY2hhcmFjdGVyLiAgVGhlIDIwMDMwNjE0IGNoYW5nZQorCSAgZm9yY2VkIHRoZSBjZWxsIHRvIGEgYmxhbmsgaWYgdGhlIHJlc3VsdCBmcm9tIHdjd2lkdGgoKSB3YXMgbm90CisJICBncmVhdGVyIHRoYW4gemVyby4gIEhvd2V2ZXIsIHdjd2lkdGgoKSBjYWxsZWQgZm9yIHBhcmFtZXRlcnMgaW4gdGhlCisJICByYW5nZSAxMjgtMjU1IGNhbiBnaXZlIHRoaXMgcmV0dXJuIHZhbHVlLiAgVGhlIGxvZ2ljIG5vdyBzaW1wbHkKKwkgIGVuc3VyZXMgdGhhdCB0aGUgbnVtYmVyIG9mIGNlbGxzIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIHdpdGhvdXQKKwkgIG1vZGlmeWluZyB0aGUgZGlzcGxheWVkIHZhbHVlLgorCisyMDA0MDEyNCBwcmUtcmVsZWFzZQorCSsgbG9va2VkIGdvb2QgZm9yIDUuNCByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcgKGJ1dCBzZWUgYWJvdmUpCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBjaGVjayBmb3IgcmFubGliIHRvIHVzZSBBQ19DSEVDS19UT09MLCBzaW5jZQorCSAgdGhhdCB3b3JrcyBiZXR0ZXIgZm9yIGNyb3NzLWNvbXBpbGluZy4KKworMjAwNDAxMTcgcHJlLXJlbGVhc2UKKwkrIG1vZGlmeSBsaWJfZ2V0X3djaC5jIHRvIHByZWZlciBtYmxlbi9tYnRvd2Mgb3ZlciBtYnJsZW4vbWJydG93YyB0bworCSAgd29yayBhcm91bmQgY29yZSBkdW1wIGluIFNvbGFyaXMgOCdzIGxvY2FsZSBzdXBwb3J0LCBlLmcuLCBmb3IKKwkgIHpoX0NOLkdCMTgwMzAgKHJlcG9ydCBieSBTYXJhdmFuYW4gQmVsbGFuKS4KKwkrIGFkZCBpbmNsdWRlcyBmb3IgPHN0ZGFyZy5oPiBhbmQgPHN0ZGlvLmg+IGluIGNvbmZpZ3VyZSBzY3JpcHQgbWFjcm8KKwkgIHRvIG1ha2UgPHdjaGFyLmg+IGNoZWNrIHdvcmsgd2l0aCBUcnU2NCA0LjBkLgorCSsgYWRkIHRlcm1pbmZvIGVudHJ5IGZvciBVL1dpbiAtVEQKKwkrIGFkZCB0ZXJtaW5mbyBlbnRyaWVzIGZvciBTRlUgYWthIEludGVyaXggYWthIE9wZW5OVCAoRmVkZXJpY28KKwkgIEJpYW5jaGkpLgorCSsgbW9kaWZ5IHRwdXQncyBlcnJvciBtZXNzYWdlcyB0byBwcmVmaXggdGhlbSB3aXRoIHRoZSBwcm9ncmFtIG5hbWUKKwkgIChyZXBvcnQgYnkgVmluY2VudCBMZWZldnJlLCBwYXRjaCBieSBEYW5pZWwgSmFjb2Jvd2l0eiAoc2VlIERlYmlhbgorCSAgIzIyNzU4NikpLgorCSsgY29ycmVjdCBhIHBsYWNlIGluIHRhY2sgd2hlcmUgZXhpdF9zdGFuZG91dF9tb2RlIHdhcyB1c2VkIGluc3RlYWQgb2YKKwkgIGV4aXRfYXR0cmlidXRlX21vZGUgKHBhdGNoIGJ5IEpvY2hlbiBWb3NzIChzZWUgRGViaWFuICMyMjQ0NDMpKS4KKwkrIG1vZGlmeSBjKysvY3Vyc2VzZi5oIHRvIHVzZSBjb25zdCBpbiB0aGUgRW51bWVyYXRpb25fRmllbGQgbWV0aG9kLgorCSsgcmVtb3ZlIGFuIGFtYmlndW91cyAoYWN0dWFsbHkgcmVkdW5kYW50KSBtZXRob2QgZnJvbSBjKysvY3Vyc2VzZi5oCisJKyBtYWtlICRIT01FLy50ZXJtaW5mbyB1cGRhdGUgb3B0aW9uYWwgKHN1Z2dlc3RlZCBieSBTdGFuaXNsYXYgSWV2bGV2KS4KKwkrIGltcHJvdmUgc2VkIHNjcmlwdCB3aGljaCBleHRyYWN0cyBsaWJ0b29sJ3MgdmVyc2lvbiBpbiB0aGUKKwkgIENGX1dJVEhfTElCVE9PTCBtYWNyby4KKwkrIGFkZCBpZmRlZidkIGNhbGwgdG8gQUNfUFJPR19MSUJUT09MIHRvIENGX1dJVEhfTElCVE9PTCBtYWNybyAodG8KKwkgIHNpbXBsaWZ5IGxvY2FsIHBhdGNoIGZvciBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4uCisJKyBhZGQgJChDWFhGTEFHUykgdG8gbGluayBjb21tYW5kIGluIGMrKy9NYWtlZmlsZS5pbiAoYWRhcHRlZCBmcm9tCisJICBwYXRjaCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4uCisJKyBmaXggYSBtaXNzaW5nIHN1YnN0aXR1dGlvbiBpbiBjb25maWd1cmUuaW4gZm9yICIkdGFyZ2V0IiBuZWVkZWQgZm9yCisJICBIUFVYIC5zby8uc2wgY2FzZS4KKwkrIHJlc3luYyBDRl9YT1BFTl9TT1VSQ0UgY29uZmlndXJlIG1hY3JvIHdpdGggbHlueDsgZml4ZXMgSVJJWDY0IGFuZAorCSAgTmV0QlNEIDEuNiBjb25mbGljdHMgd2l0aCBfWE9QRU5fU09VUkNFLgorCSsgbWFrZSBjaGVjayBmb3Igc3RkYm9vbC5oIG1vcmUgc3BlY2lmaWMsIHRvIGVuc3VyZSB0aGF0IGluY2x1ZGluZyBpdAorCSAgd2lsbCBhY3R1YWxseSBkZWZpbmUvZGVjbGFyZSBib29sIGZvciB0aGUgY29uZmlndXJlZCBjb21waWxlci4KKwkrIHJld3JpdGUgaWZkZWYncyBpbiBjdXJzZXMuaCByZWxhdGluZyBOQ1VSU0VTX0JPT0wgYW5kIGJvb2wuICBUaGUKKwkgIGludGVudGlvbiBvZiB0aGF0IGlzIHRvICNkZWZpbmUgTkNVUlNFU19CT09MIGFzIGJvb2wgd2hlbiB0aGUKKwkgIGNvbXBpbGVyIGRlY2xhcmVzIGJvb2wsIGFuZCB0byAjZGVmaW5lIGJvb2wgYXMgTkNVUlNFU19CT09MIHdoZW4gaXQKKwkgIGRvZXMgbm90IChyZXBvcnRlZCBieSBKaW0gR2lmZm9yZCwgU2FtIFZhcnNoYXZjaGlrLCBjZjogMjAwMzEyMTMpLgorCisyMDA0MDExMCBwcmUtcmVsZWFzZQorCSsgY2hhbmdlIG1pbm9yIHZlcnNpb24gdG8gNCwgaS5lLiwgbmN1cnNlcyA1LjQKKwkrIHJldmlzZWQvaW1wcm92ZWQgdGVybWluZm8gZW50cmllcyBmb3IgdHZpOTEyYiwgdHZpOTIwYiAoQmVuamFtaW4gQyBXCisJICBTaXR0bGVyKS4KKwkrIHNpbXBsaWZpZWQgbmN1cnNlcy9iYXNlL3ZlcnNpb24uYyBieSBkZWZpbmluZyB0aGUgcmVzdWx0IGZyb20gdGhlCisJICBjb25maWd1cmUgc2NyaXB0IHJhdGhlciB0aGFuIHVzaW5nIHNwcmludGYgKHN1Z2dlc3RlZCBieSBTdGFuaXNsYXYKKwkgIElldmxldikuCisJKyByZW1vdmUgb2Jzb2xldGUgY2FzdHMgZnJvbSBjKysvY3Vyc2Vzdy5oIChyZXBvcnRlZCBieSBTdGFuaXNsYXYKKwkgIElldmxldikuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBzbyB0aGF0IHdoZW4gY29uZmlndXJpbmcgZm9yIHRlcm1saWIsIHByb2dyYW1zCisJICBzdWNoIGFzIHRpYyBhcmUgbm90IGxpbmtlZCB3aXRoIHRoZSB1cHBlci1sZXZlbCBuY3Vyc2VzIGxpYnJhcnkKKwkgIChzdWdnZXN0ZWQgYnkgU3RhbmlzbGF2IElldmxldikuCisJKyBtb3ZlIHZlcnNpb24uYyBmcm9tIG5jdXJzZXMvYmFzZSB0byBuY3Vyc2VzL3RpbmZvIHRvIGFsbG93IGxpbmtpbmcKKwkgIG9mIHRpYywgZXRjLiwgdXNpbmcgbGlidGluZm8gKHN1Z2dlc3RlZCBieSBTdGFuaXNsYXYgSWV2bGV2KS4KKworMjAwNDAxMDMKKwkrIGFkanVzdCAtRCdzIHRvIGJ1aWxkIG5jdXJzZXN3IG9uIE9wZW5CU0QuCisJKyBtb2RpZnkgQ0ZfUFJPR19FWFQgdG8gbWFrZSBPUy8yIGJ1aWxkIHdpdGggRVhFRVhULgorCSsgYWRkIHBlY2hvX3djaGFyKCkuCisJKyByZW1vdmUgPHdjdHlwZS5oPiBpbmNsdWRlIGZyb20gbGliX3Nsa193c2V0LmMgd2hpY2ggaXMgbm90IG5lZWRlZCAob3IKKwkgIGF2YWlsYWJsZSkgb24gb2xkZXIgcGxhdGZvcm1zLgorCisyMDAzMTIyNworCSsgYWRkIC1EJ3MgdG8gYnVpbGQgbmN1cnNldyBvbiBGcmVlQlNEIDUuMS4KKwkrIG1vZGlmeSBzaGFyZWQgbGlicmFyeSBjb25maWd1cmF0aW9uIGZvciBGcmVlQlNEIDQueC81LnggdG8gYWRkIHRoZQorCSAgc29uYW1lIGluZm9ybWF0aW9uIChyZXF1ZXN0IGJ5IE1hcmMgR2xpc3NlKS4KKwkrIG1vZGlmeSBfbmNfcmVhZF90aWNfZW50cnkoKSB0byBub3QgdXNlIE1BWF9BTElBUywgYnV0IFBBVEhfTUFYIG9ubHkKKwkgIGZvciBsaW1pdGluZyB0aGUgbGVuZ3RoIG9mIGEgZmlsZW5hbWUgaW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorCSsgbW9kaWZ5IHRlcm1uYW1lKCkgdG8gcmV0dXJuIHRoZSB0ZXJtaW5hbCBuYW1lIHVzZWQgYnkgc2V0dXB0ZXJtKCkKKwkgIHJhdGhlciB0aGFuICRURVJNLCB3aXRob3V0IHRydW5jYXRpbmcgdG8gMTQgY2hhcmFjdGVycyBhcyBkb2N1bWVudGVkCisJICBieSBYL09wZW4gKHJlcG9ydCBieSBTdGFuaXNsYXYgSWV2bGV2LCBjZjogIDk3MDcxOSkuCisJKyByZS1hZGQgZGVmaW5pdGlvbiBmb3IgX0JTRF9UWVBFUywgbG9zdCBpbiBtZXJnZSAoY2Y6IDIwMDMxMjA2KS4KKworMjAwMzEyMjAKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1tYW5wYWdlLWZvcm1hdD1jYXRvbmx5IHRvIGFkZHJlc3MKKwkgIGJlaGF2aW9yIG9mIEJTREksIGFsbG93IGluc3RhbGwgb2YgbWFuK2NhdCBmaWxlcyBvbiBOZXRCU0QsIHdob3NlCisJICBiZWhhdmlvciBoYXMgZGl2ZXJnZWQgYnkgcmVxdWlyaW5nIGJvdGggdG8gYmUgcHJlc2VudC4KKwkrIHJlbW92ZSBsZWFkaW5nIGJsYW5rcyBmcm9tIGNvbW1lbnQtbGluZXMgaW4gbWFubGlua3Muc2VkIHNjcmlwdCB0bworCSAgd29yayB3aXRoIFRydTY0IDQuMGQuCisJKyBhZGQgc2NyZWVuLmxpbnV4IHRlcm1pbmZvIGVudHJ5IChkaXNjdXNzaW9uIG9uIG11dHQtdXNlcnMgbWFpbGluZworCSAgbGlzdCkuCisKKzIwMDMxMjEzCisJKyBhZGQgYSBjaGVjayBmb3IgdGljIHRvIGZsYWcgbWlzc2luZyBiYWNrc2xhc2hlcyBmb3IgdGVybWNhcAorCSAgY29udGludWF0aW9uIGxpbmVzLiAgbmN1cnNlcyByZWFkcyB0aGUgd2hvbGUgZW50cnksIGJ1dCB0ZXJtY2FwCisJICBhcHBsaWNhdGlvbnMgZG8gbm90LgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gIi0td2l0aC1tYW5wYWdlLWFsaWFzZXMiIGV4dGVuZGluZworCSAgIi0td2l0aC1tYW5wYWdlLWFsaWFzZXMiIHRvIHByb3ZpZGUgdGhlIG9wdGlvbiBvZiBnZW5lcmF0aW5nICIuc28iCisJICBmaWxlcyByYXRoZXIgdGhhbiBzeW1ib2xpYyBsaW5rcyBmb3IgbWFucGFnZSBhbGlhc2VzLgorCSsgYWRkIGJvb2wgZGVmaW5pdGlvbiBpbiBpbmNsdWRlL2N1cnNlcy5oLmluIGZvciBjb25maWd1cmF0aW9ucyB3aXRoIG5vCisJICB1c2FibGUgQysrIGNvbXBpbGVyIChjZjogMjAwMzA2MDcpLgorCSsgZml4IHBhdGhuYW1lIG9mIFNpZ0FjdGlvbi5oIGZvciBidWlsZGluZyB3aXRoIC0tc3JjZGlyIChyZXBvcnRlZCBieQorCSAgTWlrZSBDYXN0bGUpLgorCisyMDAzMTIwNgorCSsgZm9sZGVkIG5jdXJzZXMvYmFzZS9zaWdhY3Rpb24uYyBpbnRvIGluY2x1ZGVzIG9mIG5jdXJzZXMvU2lnQWN0aW9uLmgsCisJICBzaW5jZSB0aGF0IGhlYWRlciBpcyB1c2VkIG9ubHkgd2l0aGluIG5jdXJzZXMvdHR5L2xpYl90c3RwLmMsIGZvcgorCSAgbm9uLVBPU0lYIHN5c3RlbXMgKGRpc2N1c3Npb24gd2l0aCBTdGFuaXNsYXYgSWV2bGV2KS4KKwkrIHJlbW92ZSBvYnNvbGV0ZSBfbmNfb3V0c3RyKCkgZnVuY3Rpb24gKHJlcG9ydCBieSBTdGFuaXNsYXYgSWV2bGV2CisJICA8aW5nZXJAYWx0bGludXgub3JnPikuCisJKyBhZGQgdGVzdC9iYWNrZ3JvdW5kLmMgYW5kIHRlc3QvY29sb3Jfc2V0LmMKKwkrIG1vZGlmeSBjb2xvcl9zZXQoKSBmdW5jdGlvbiB0byB3b3JrIHdpdGggY29sb3IgcGFpciAwIChyZXBvcnQgYnkKKwkgIEdlb3JnZSBBbmRyZW91IDxnYmFuZHJlb0B0ZW0udW9jLmdyPikuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtdHJhY2UsIHNpbmNlIGRlZmluaW5nIFRSQUNFIHNlZW1zIHRvbworCSAgYXdrd2FyZCBmb3Igc29tZSBjYXNlcy4KKwkrIHJlbW92ZSBhIGNhbGwgdG8gX25jX2ZyZWVfdGVybXR5cGUoKSBmcm9tIHJlYWRfdGVybXR5cGUoKSwgc2luY2UgdGhlCisJICBjb3JyZXNwb25kaW5nIGJ1ZmZlciBjb250ZW50cyB3ZXJlIGFscmVhZHkgemVyb2VkIGJ5IGEgbWVtc2V0IChjZjoKKwkgIDIwMDAwMTAxKS4KKwkrIGltcHJvdmUgY29uZmlndXJlIGNoZWNrIGZvciBfWE9QRU5fU09VUkNFIGFuZCByZWxhdGVkIGRlZmluaXRpb25zLAorCSAgYWRkaW5nIHNwZWNpYWwgY2FzZXMgZm9yIFNvbGFyaXMnIF9fRVhURU5TSU9OU19fIGFuZCBGcmVlQlNEJ3MKKwkgIF9fQlNEX1RZUEVTIChyZXBvcnRzIGJ5IE1hcmMgR2xpc3NlIDxtYXJjLmdsaXNzZUBub3JtYWxlc3VwLm9yZz4pLgorCSsgc21hbGwgZml4ZXMgdG8gY29tcGlsZSBvbiBTb2xhcmlzIGFuZCBJUklYNjQgdXNpbmcgY2MuCisJKyBjb3JyZWN0IHR5cG8gaW4gY2hlY2sgZm9yIHByZS1QT1NJWCBzb3J0IG9wdGlvbnMgaW4gTUtrZXlfZGVmcy5zaAorCSAgKGNmOiAyMDAzMTEwMSkuCisKKzIwMDMxMTI5CisJKyBtb2RpZnkgX25jX2dldHRpbWUoKSB0byBhdm9pZCBhIHByb2JsZW0gd2l0aCBhcml0aG1ldGljIG9uIHVuc2lnbmVkCisJICB2YWx1ZXMgKFBoaWxpcHBlIEJsYWluKS4KKwkrIGltcHJvdmUgdGhlIG5hbm9zbGVlcCgpIGxvZ2ljIGluIG5hcG1zKCkgYnkgY2hlY2tpbmcgZm9yIEVJTlRSIGFuZAorCSAgcmVzdGFydGluZyAoUGhpbGlwcGUgQmxhaW4pLgorCSsgY29ycmVjdCBleHByZXNzaW9uIGZvciAiJUQiIGluIGxpYl90Z290by5jIChKdWhhIEphcnZpCisJICA8bW9vekB3ZWxoby5jb20+KS4KKworMjAwMzExMjIKKwkrIGFkZCBsaW51eC12dCB0ZXJtaW5mbyBlbnRyeSAoQW5kcmV5IFYgTHVreWFub3YgPGxhbmRAbG9uZy55YXIucnU+KS4KKwkrIGFsbG93ICJcfCIgZXNjYXBlIGluIHRlcm1pbmZvOyB0aWMgc2hvdWxkIG5vdCB3YXJuIGFib3V0IHRoaXMuCisJKyBzYXZlIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSB0cmFjZS1maWxlIHRoZSBmaXJzdCB0aW1lIGl0IGlzIG9wZW5lZCwKKwkgIHRvIGF2b2lkIGNyZWF0aW5nIGl0IGluIGRpZmZlcmVudCBkaXJlY3RvcmllcyBpZiB0aGUgYXBwbGljYXRpb24KKwkgIG9wZW5zIGFuZCBjbG9zZXMgaXQgd2hpbGUgY2hhbmdpbmcgaXRzIHdvcmtpbmcgZGlyZWN0b3J5LgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gcHJvdmlkZSBhIG5vbi1lbXB0eSBkZWZhdWx0IGZvcgorCSAgJEJST0tFTl9MSU5LRVIKKworMjAwMzExMDgKKwkrIGFkZCBESkdQUCB0byBzcGVjaWFsIGNhc2Ugb2YgRE9TLXN0eWxlIGRyaXZlIGxldHRlcnMgcG90ZW50aWFsbHkKKwkgIGFwcGVhcmluZyBpbiBURVJNQ0FQIGVudmlyb25tZW50IHZhcmlhYmxlLgorCSsgZml4IHNvbWUgc3BlbGxpbmcgaW4gY29tbWVudHMgKHJlcG9ydHMgYnkgSmFzb24gTWNJbnR5cmUsIEpvbmF0aG9uCisJICBHcmF5KS4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKworMjAwMzExMDEKKwkrIGZpeCBhIG1lbW9yeSBsZWFrIGluIGVycm9yLXJldHVybiBmcm9tIHNldHVwdGVybSgpIChyZXBvcnQgYnkKKwkgIFN0YW5pc2xhdiBJZXZsZXYgPGluZ2VyQGFsdGxpbnV4Lm9yZz4pLgorCSsgdXNlIEVYRUVYVCBhbmQgT0JKRVhUIGNvbnNpc3RlbnRseSBpbiBtYWtlZmlsZXMuCisJKyBhbWVuZCBmaXhlcyBmb3IgY3Jvc3MtY29tcGlsaW5nIHRvIHVzZSBzZXBhcmF0ZSBleGVjdXRhYmxlLXN1ZmZpeAorCSAgQlVJTERfRVhFRVhUIChjZjogMjAwMzEwMTgpLgorCSsgbW9kaWZ5IE1La2V5X2RlZnMuc2ggdG8gY2hlY2sgZm9yIHNvcnQgdXRpbGl0eSB0aGF0IGRvZXMgbm90CisJICByZWNvZ25pemUga2V5IG9wdGlvbnMsIGUuZy4sIGJ1c3lib3ggKHJlcG9ydCBieSBQZXRlciBTIE1hemluZ2VyCisJICA8cHMubUBnbXgubmV0PikuCisJKyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gX25jX2luZm90b2NhcCgpIChmb3VuZCBieQorCSAgRGF2aWQgS3JhdXNlIHVzaW5nIHNvbWUgb2YgdGhlIG5ldyBtYWxsb2MgZGVidWdnaW5nIGZlYXR1cmVzCisJICB1bmRlciBPcGVuQlNELCBwYXRjaCBieSBUZWQgVW5hbmdzdCkuCisJKyBtb2RpZnkgQ0ZfTElCX1NVRkZJWCBmb3IgSXRhbml1bSByZWxlYXNlcyBvZiBIUC1VWCwgd2hpY2ggdXNlIGEKKwkgICIuc28iIHN1ZmZpeCAocGF0Y2ggYnkgSm9uYXRoYW4gV2FyZCA8Sm9uYXRoYW4uV2FyZEBocC5jb20+KS4KKworMjAwMzEwMjUKKwkrIHVwZGF0ZSB0ZXJtaW5mbyBmb3IgeHRlcm0teGZyZWU4NiAtVEQKKwkrIGFkZCBjaGVjayBmb3IgbXVsdGlwbGUgInRjPSIgY2xhdXNlcyBpbiBhIHRlcm1jYXAgdG8gdGljLgorCSsgY2hlY2sgZm9yIG1pc3Npbmcgb3Avb2MgaW4gdGljLgorCSsgY29ycmVjdCBfbmNfcmVzb2x2ZV91c2VzKCkgYW5kIF9uY19tZXJnZV9lbnRyeSgpIHRvIGFsbG93IGluZm9jbXAgYW5kCisJICB0aWMgdG8gc2hvdyBjYW5jZWxsZWQgY2FwYWJpbGl0aWVzLiAgVGhlc2UgZnVuY3Rpb25zIHdlcmUgaWdub3JpbmcKKwkgIHRoZSBzdGF0ZSBvZiB0aGUgdGFyZ2V0IGVudHJ5LCB3aGljaCBzaG91bGQgYmUgdW50b3VjaGVkIGlmIGNhbmNlbGxlZC4KKwkrIGNvcnJlY3QgY29tbWVudCBpbiB0YWNrL291dHB1dC5jIChEZWJpYW4gIzIxNTgwNikuCisJKyBhZGQgc29tZSBudWxsLXBvaW50ZXIgY2hlY2tzIHRvIGxpYl9vcHRpb25zLmMgKHJlcG9ydCBieSBNaWNoYWVsCisJICBCaWVuaWEpLgorCSsgcmVnZW5lcmF0ZWQgaHRtbCBkb2N1bWVudGF0aW9uLgorCSsgY29ycmVjdGlvbiB0byB0YXItY29weS5zaCwgcmVtb3ZlIGEgdHJhcCBjb21tYW5kIHRoYXQgcmVzdWx0ZWQgaW4KKwkgIGxlYXZpbmcgdGVtcG9yYXJ5IGZpbGVzIChjZjogMjAwMzA1MTApLgorCSsgcmVtb3ZlIGNvbnRhY3QvbWFpbnRhaW5lciBhZGRyZXNzZXMgZm9yIEp1ZXJnZW4gUGZlaWZlciAoaGlzIHJlcXVlc3QpLgorCisyMDAzMTAxOAorCSsgdXBkYXRlZCB0ZXN0L2NvbmZpZ3VyZSB0byByZWZsZWN0IGNoYW5nZXMgZm9yIGxpYnRvb2wgKGNmOiAyMDAzMDgzMCkuCisJKyBmaXggc2V2ZXJhbCBwbGFjZXMgaW4gdGFjay9wYWQuYyB3aGljaCB0ZXN0ZWQgYW5kIHVzZWQgdGhlIHBhcmFtZXRlci0KKwkgIGFuZCBwYXJhbWV0ZXJsZXNzIHN0cmluZ3MgaW5jb25zaXN0ZW50bHksIGkuZS4sIGluIHBhZF9yaW4oKSwKKwkgIHBhZF9pbCgpLCBwYWRfaW5kbigpIGFuZCBwYWRfZGwoKSAoRGViaWFuICMyMTU4MDUpLgorCSsgbWlub3IgZml4ZXMgZm9yIGNvbmZpZ3VyZSBzY3JpcHQgYW5kIG1ha2VmaWxlcyB0byBjbGVhbnVwIGV4ZWN1dGFibGVzCisJICBnZW5lcmF0ZWQgd2hlbiBjcm9zcy1jb21waWxpbmcgZm9yIERKR1BQLgorCSsgbW9kaWZ5IGluZm9jbXAgdG8gb21pdCBjaGVjayBmb3IgJFRFUk0gZm9yIG9wZXJhdGlvbnMgdGhhdCBkbyBub3QKKwkgIHJlcXVpcmUgaXQsIGUuZy4sICJpbmZvY21wIC1lIiB1c2VkIHRvIGJ1aWxkIGZhbGxiYWNrIGxpc3QgKHJlcG9ydCBieQorCSAgS29ibGluZ2VyIEVnbW9udCkuCisKKzIwMDMxMDA0CisJKyBhZGQgdGVybWluZm8gZW50cmllcyBmb3IgREpHUFAuCisJKyB1cGRhdGVkIG5vdGUgYWJvdXQgbWFpbnRhaW5lciBpbiBuY3Vyc2VzLWludHJvLmh0bWwKKworMjAwMzA5MjcKKwkrIHVwZGF0ZSB0ZXJtaW5mbyBlbnRyaWVzIGZvciBnbm9tZSB0ZXJtaW5hbC4KKwkrIG1vZGlmeSB0YWNrIHRvIHJlc2V0IGNvbG9ycyBhZnRlciBlYWNoIGNvbG9yIHRlc3QsIGNvcnJlY3QgYSBwbGFjZQorCSAgd2hlcmUgZXhpdF9zdGFuZG91dF9tb2RlIHdhcyB1c2VkIGluc3RlYWQgb2YgZXhpdF9hdHRyaWJ1dGVfbW9kZS4KKwkrIGltcHJvdmUgdGFjaydzIGJjZSB0ZXN0IGJ5IG1ha2luZyBpdCBzZXQgY29sb3JzIG90aGVyIHRoYW4gYmxhY2sKKwkgIG9uIHdoaXRlLgorCSsgcGx1ZyBhIHBvdGVudGlhbCByZWN1cnNpb24gYmV0d2VlbiBuYXBtcygpIGFuZCBfbmNfdGltZWRfd2FpdCgpCisJICAocmVwb3J0IGJ5IFBoaWxpcHBlIEJsYWluKS4KKworMjAwMzA5MjAKKwkrIGFkZCAtLXdpdGgtcmVsLXZlcnNpb24gb3B0aW9uIHRvIGFsbG93IHdvcmthcm91bmQgdG8gYWxsb3cgbWFraW5nCisJICBsaWJ0b29sIG9uIERhcndpbiBnZW5lcmF0ZSB0aGUgInNhbWUiIGxpYnJhcnkgbmFtZXMgYXMgd2l0aCB0aGUKKwkgIC0td2l0aC1zaGFyZWQgb3B0aW9uLiAgVGhlIERhcndpbiBsZCBwcm9ncmFtIGRvZXMgbm90IHdvcmsgd2VsbAorCSAgd2l0aCBhIHplcm8gYXMgdGhlIG1pbm9yLXZlcnNpb24gdmFsdWUgKHJlcXVlc3QgYnkgQ2hyaXMgWnVicnp5Y2tpKS4KKwkrIG1vZGlmeSBDRl9NSVhFRENBU0VfRklMRU5BTUVTIG1hY3JvIHRvIHdvcmsgd2l0aCBjcm9zcy1jb21waWxpbmcuCisJKyBtb2RpZnkgdGFjayB0byBhbGxvdyBpdCB0byBydW4gZnJvbSBmYWxsYmFjayB0ZXJtaW5mbyBkYXRhLgorCT4gcGF0Y2ggYnkgUGhpbGlwcGUgQmxhaW46CisJKyBpbXByb3ZlIFB1dFJhbmdlKCkgYnkgYWRqdXN0aW5nIGNhbGwgdG8gRW1pdFJhbmdlKCkgYW5kIGNvcnJlc3BvbmRpbmcKKwkgIHJldHVybi12YWx1ZSB0byBub3QgZW1pdCB1bmNoYW5nZWQgY2hhcmFjdGVycyBvbiB0aGUgZW5kIG9mIHRoZQorCSAgcmFuZ2UuCisJKyBpbXByb3ZlIGEgY2hlY2sgZm9yIGNoYW5nZWQtYXR0cmlidXRlIGJ5IGV4aXRpbmcgYSBsb29wIHdoZW4gdGhlCisJICBjaGFuZ2UgaXMgZm91bmQuCisJKyBpbXByb3ZlIGxvZ2ljIGluIFRyYW5zZm9ybUxpbmUoKSwgZWxpbWluYXRpbmcgYSBkdXBsaWNhdGVkIGNvbXBhcmlzb24KKwkgIGluIHRoZSBjbHJfYm9sIGxvZ2ljLgorCisyMDAzMDkxMworCT4gcGF0Y2ggYnkgUGhpbGlwcGUgQmxhaW46CisJKyBpbiBuY3Vyc2VzL3R0eS9saWJfbXZjdXIuYywKKwkgIG1vdmUgdGhlIGxhYmVsICdub25sb2NhbCcganVzdCBiZWZvcmUgdGhlIHNlY29uZCBnZXR0aW1lb2ZkYXkoKSB0bworCSAgYmUgYWJsZSB0byBjb21wdXRlIHRoZSBkaWZmIHRpbWUgd2hlbiAnZ290byBub25sb2NhbCcgdXNlZC4KKwkgIFJlbmFtZSAnbXNlYycgdG8gJ21pY3Jvc2VjJyBpbiB0aGUgZGVidWctbWVzc2FnZS4KKwkrIGluIG5jdXJzZXMvdHR5L2xpYl9tdmN1ci5jLAorCSAgVXNlIF9uY19vdXRjaCgpIGluIGNhcnJpYWdlIHJldHVybi9uZXdsaW5lIG1vdmVtZW50IGluc3RlYWQgb2YKKwkgIHB1dGNoYXIoKSB3aGljaCBnb2VzIHRvIHN0ZG91dC4gIE1vdmUgdGVzdCBmb3IgeG9sZD4wIG91dCBvZiBsb29wLgorCSsgaW4gbmN1cnNlcy90aW5mby9zZXRidWYuYywKKwkgIFNldCB0aGUgZmxhZyBTUC0+X2J1ZmZlcmVkIGF0IHRoZSBlbmQgb2Ygb3BlcmF0aW9ucyB3aGVuIGFsbCBoYXMgYmVlbgorCSAgc3VjY2Vzc2Z1bCAodHlwZU1hbGxvYyBjYW4gZmFpbCkuCisJKyBzaW1wbGlmeSBOQ19CVUZGRVJFRCBtYWNybyBieSBtb3ZpbmcgY2hlY2sgaW5zaWRlIF9uY19zZXRidWYoKS4KKworMjAwMzA5MDYKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGF2b2lkIHVzaW5nICJoZWFkIC0xIiwgd2hpY2ggZG9lcyBub3QKKwkgIHdvcmsgaWYgUE9TSVhMWV9DT1JSRUNUIChzaWMpIGlzIHNldC4KKwkrIG1vZGlmeSBydW5fdGljLmluIHRvIGF2b2lkIHVzaW5nIHdyb25nIHNoYXJlZCBsaWJyYXJpZXMgd2hlbgorCSAgY3Jvc3MtY29tcGlsaW5nIChEYW4gS2VnZWwpLgorCisyMDAzMDgzMAorCSsgYWx0ZXIgY29uZmlndXJlIHNjcmlwdCBoZWxwIG1lc3NhZ2UgdG8gbWFrZSBpdCBjbGVhcmVyIHRoYXQKKwkgIC0td2l0aC1idWlsZC1jYyBkb2VzIG5vdCBzcGVjaWZ5IGEgY3Jvc3MtY29tcGlsZXIgKHN1Z2dlc3RlZCBieSBEYW4KKwkgIEtlZ2VsIDxkYW5rQGtlZ2VsLmNvbT4pLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gYWNjb21tb2RhdGUgbGlidG9vbCAxLjUsIGFzIHdlbGwgYXMgYWRkIGFuCisJICBwYXJhbWV0ZXIgdG8gdGhlICItLXdpdGgtbGlidG9vbCIgb3B0aW9uIHdoaWNoIGNhbiBzcGVjaWZ5IHRoZQorCSAgcGF0aG5hbWUgb2YgbGlidG9vbCAocmVwb3J0IGJ5IENocmlzIFp1YnJ6eWNraSkuICBXZSBub3RlIHRoYXQKKwkgIGxpYnRvb2wgMS41IGhhcyBtb3JlIHRoYW4gb25lIGJ1ZyBpbiBpdHMgQysrIHN1cHBvcnQsIHNvIGl0IGlzIG5vdAorCSAgYWJsZSB0byBpbnN0YWxsIGxpYm5jdXJzZXMrKywgZm9yIGluc3RhbmNlLCBpZiAkREVTVERJUiBvciB0aGUgb3B0aW9uCisJICAtLXdpdGgtaW5zdGFsbC1wcmVmaXggaXMgdXNlZC4KKworMjAwMzA4MjMKKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgbW92ZSBhc3NpZ25tZW50cyB0byBTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCBpbnRvIG9ubGluZV9tdmN1cigpLgorCSsgbWFrZSBiYXVkcmF0ZSBjb21wdXRhdGlvbiBpbiBkZWxheV9vdXRwdXQoKSBjb25zaXN0ZW50IHdpdGggdGhlCisJICBhc3N1bXB0aW9uIGluIF9uY19tdmN1cl9pbml0KCksIGkuZS4sIGEgYnl0ZSBpcyA5IGJpdHMuCisKKzIwMDMwODE2CisJKyBtb2RpZnkgbG9naWMgaW4gd2FkZGNoX2xpdGVyYWwoKSB0byB0YWtlIGludG8gYWNjb3VudCB6aF9UVy5CaWc1CisJICB3aG9zZSBtdWx0aWJ5dGUgc2VxdWVuY2VzIG1heSBjb250YWluICJwcmludGFibGUiIGNoYXJhY3RlcnMsIGUuZy4sCisJICBhICJnIiBpbiB0aGUgc2VxdWVuY2UgIlwyNDdnIiAoRGViaWFuICMyMDQ4ODksIGNmOiAyMDAzMDYyMSkuCisJKyBpbXByb3ZlIHN0b3JhZ2UgdXNlZCBieSBfbmNfc2FmZV9zdHJjcHkoKSBieSBlbnN1cmluZyB0aGF0IHRoZSBzaXplCisJICBpcyByZXNldCBiYXNlZCBvbiB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbCwgaW4gY2FzZSBpdCB3ZXJlIGNhbGxlZAorCSAgYWZ0ZXIgb3RoZXIgc3RyY3B5L3N0cmNhdCBjYWxscyAocmVwb3J0IGJ5IFBoaWxpcHBlIEJsYWluKS4KKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgcmVtb3ZlIGFuIHVudXNlZCBpZmRlZiBmb3IgUkVBTF9BVFRSICYgV0FOVF9DSEFSCisJKyBjb3JyZWN0IGEgcGxhY2Ugd2hlcmUgX2N1cF9jb3N0IHdhcyB1c2VkIHJhdGhlciB0aGFuIF9jdXVfY29zdAorCisyMDAzMDgwOQorCSsgZml4IGEgc21hbGwgbWVtb3J5IGxlYWsgaW4gX25jX2ZyZWVfdGVybXR5cGUoKS4KKwkrIGNsb3NlIHRyYWNlLWZpbGUgaWYgdHJhY2UoKSBpcyBjYWxsZWQgd2l0aCBhIHplcm8gcGFyYW1ldGVyLgorCSsgZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBzb2Z0LWtleSBzdHJpbmdzLCBpbiBkZWxzY3JlZW4oKS4KKwkrIGZpeCBhbiBhbGxvY2F0aW9uIHNpemUgaW4gc2FmZV9zcHJpbnRmLmMgZm9yIHRoZSAiKiIgZm9ybWF0IGNvZGUuCisJKyBjb3JyZWN0IHNhZmVfc3ByaW50Zi5jIHRvIG5vdCByZXR1cm4gYSBudWxsIHBvaW50ZXIgaWYgdGhlIGZvcm1hdAorCSAgaGFwcGVucyB0byBiZSBhbiBlbXB0eSBzdHJpbmcuICBUaGlzIGFwcGxpZXMgdG8gdGhlICJjb25maWd1cmUKKwkgIC0tZW5hYmxlLXNhZmUtc3ByaW50ZiIgb3B0aW9uIChSZWRoYXQgIzEwMTQ4NikuCisKKzIwMDMwODAyCisJKyBtb2RpZnkgY2FzdHMgdXNlZCBmb3IgQUJTRU5UX0JPT0xFQU4gYW5kIENBTkNFTExFRF9CT09MRUFOIChyZXBvcnQgYnkKKwkgIERhbmllbCBKYWNvYm93aXR6KS4KKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgY2hhbmdlIHBhZGRpbmcgZm9yIGNoYW5nZV9zY3JvbGxfcmVnaW9uIHRvIG5vdCBiZSBwcm9wb3J0aW9uYWwgdG8KKwkgIHRoZSBzaXplIG9mIHRoZSBzY3JvbGwtcmVnaW9uLgorCSsgY29ycmVjdCBlcnJvci1yZXR1cm4gaW4gX25jX3NhZmVfc3RyY2F0KCkuCisKKzIwMDMwNzI2CisJKyBjb3JyZWN0IGxpbWl0LWNoZWNrcyBpbiBfbmNfc2Nyb2xsX3dpbmRvdygpIChyZXBvcnQgYW5kIHRlc3QtY2FzZSBieQorCSAgVGhvbWFzIEdyYWYgPGdyYWZAZG1zLmF0PiBjZjogMjAwMTEwMjApLgorCSsgcmUtb3JkZXIgY29uZmlndXJlIGNoZWNrcyBmb3IgX1hPUEVOX1NPVVJDRSB0byBhdm9pZCBjb25mbGljdCB3aXRoCisJICBfR05VX1NPVVJDRSBjaGVjay4KKworMjAwMzA3MTkKKwkrIHVzZSBjbHJfZW9sIGluIHByZWZlcmVuY2UgdG8gYmxhbmtzIGZvciBiY2UgdGVybWluYWxzLCBzbyBzZWxlY3QgYW5kCisJICBwYXN0ZSB3aWxsIGhhdmUgZmV3ZXIgdHJhaWxpbmcgYmxhbmtzLCBlLmcuLCB3aGVuIHVzaW5nIHh0ZXJtCisJICAocmVxdWVzdCBieSBWaW5jZW50IExlZmV2cmUpLgorCSsgY29ycmVjdCBwcm90b3R5cGUgZm9yIHd1bmN0cmwoKSBpbiBtYW5wYWdlLgorCSsgYWRkIGNvbmZpZ3VyZSAtLXdpdGgtYWJpLXZlcnNpb24gb3B0aW9uIChkaXNjdXNzaW9uIHdpdGggQ2hhcmxlcworCSAgV2lsc29uKS4KKwk+IGN5Z3dpbiBjaGFuZ2VzIGZyb20gQ2hhcmxlcyBXaWxzb246CisJICArIGFjbG9jYWwubTQ6IG9uIGN5Z3dpbiwgdXNlIGF1dG9kZXRlY3RlZCBwcmVmaXggZm9yIGltcG9ydAorCSAgICBhbmQgc3RhdGljIGxpYiwgYnV0IHVzZSAiY3lnIiBmb3IgRExMLgorCSAgKyBpbmNsdWRlL25jdXJzZXNfZGxsLmg6IGNvcnJlY3QgdGhlIGNvbW1lbnRzIHRvIHJlZmxlY3QgY3VycmVudAorCSAgICBzdGF0dXMgb2YgY3lnd2luL21pbmd3IHBvcnQuICBGaXggY29tcGlsZXIgd2FybmluZy4KKwkgICsgbWlzYy9ydW5fdGljLmluOiBlbnN1cmUgdGhhdCB0aWMuZXhlIGNhbiBmaW5kIHRoZSB1bmluc3RhbGxlZAorCSAgICBETEwsIGJ5IGFkZGluZyB0aGUgbGliLWRpcmVjdG9yeSB0byB0aGUgUEFUSCB2YXJpYWJsZS4KKwkgICsgbWlzYy90ZXJtaW5mby5zcmMgKG54dGVybXx4dGVybS1jb2xvcik6IG1ha2UgeHRlcm0tY29sb3IKKwkgICAgcHJpbWFyeSBpbnN0ZWFkIG9mIG54dGVybSwgdG8gbWF0Y2ggWEZyZWU4NidzIHh0ZXJtLnRlcm1pbmZvCisJICAgIHVzYWdlIGFuZCB0byBwcmV2ZW50IGNpcmN1bGFyIGxpbmtzLgorCSAgICAocnh2dCk6IGFkZCBhZGRpdGlvbmFsIGNvZGVzIGZyb20gcnh2dC5vcmcuCisJICAgIChyeHZ0LWNvbG9yKTogbmV3IGFsaWFzCisJICAgIChyeHZ0LXhwbSk6IG5ldyBhbGlhcworCSAgICAocnh2dC1jeWd3aW4pOiBsaWtlIHJ4dnQsIGJ1dCB3aXRoIHNwZWNpYWwgYWNzYyBjb2Rlcy4KKwkgICAgKHJ4dnQtY3lnd2luLW5hdGl2ZSk6IGRpdHRvLiAgcnh2dCBtYXkgYmUgcnVuIHVuZGVyIFhXaW5kb3dzLCBvcgorCSAgICB3aXRoIGEgIm5hdGl2ZSIgTVNXaW4gR1VJLglFYWNoIHRha2VzIGRpZmZlcmVudCBhY3NjIGNvZGVzLAorCSAgICB3aGljaCBhcmUgYm90aCBkaWZmZXJlbnQgZnJvbSB0aGUgIm5vcm1hbCIgcnh2dCdzIGFjc2MuCisJICAgIChjeWd3aW4pOiBjeWd3aW4taW4tY21kLmV4ZSB3aW5kb3cuCSBMb3RzIG9mIGZpeGVzLgorCSAgICAoY3lnd2luREJHKTogZGl0dG8uCisJICArIG1rLTFzdC5hd2s6IHVzZSAiY3lnIiBmb3IgdGhlIERMTCBwcmVmaXgsIGJ1dCAibGliIiBmb3IgaW1wb3J0CisJICAgIGFuZCBzdGF0aWMgbGlicy4KKworMjAwMzA3MTIKKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKwkrIGFkZCB0cmlwbGVzIGZvciBjb25maWd1cmluZyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlIERlYmlhbgorCSAgR05VL0ZyZWVCU0QgcGFja2FnZXMgKHBhdGNoIGJ5IFJvYmVydCBNaWxsYW4gPHplcmF0dWwyQHdhbmFkb28uZXM+KS4KKworMjAwMzA3MDUKKwkrIG1vZGlmeSBDRl9HQ0NfV0FSTklOR1Mgc28gaXQgb25seSBhcHBsaWVzIHRvIGdjYywgbm90IGcrKy4gIFNvbWUKKwkgIHBsYXRmb3JtcyBoYXZlIGluc3RhbGxlZCBnKysgYWxvbmcgd2l0aCB0aGUgbmF0aXZlIEMgY29tcGlsZXIsIHdoaWNoCisJICB3b3VsZCBub3QgYWNjZXB0IGdjYyB3YXJuaW5nIG9wdGlvbnMuCisJKyBhZGQgLURfWE9QRU5fU09VUkNFPTUwMCB3aGVuIGNvbmZpZ3VyaW5nIHdpdGggLS1lbmFibGUtd2lkZWMsIHRvCisJICBnZXQgbWJzdGF0ZV90IGRlY2xhcmF0aW9uIG9uIEhQVVggMTEuMTEgKHJlcG9ydCBieSBEYXZpZCBFbGxlbWVudCkuCisJKyBhZGQgX25jX3BhdGhsYXN0KCkgdG8gZ2V0IHJpZCBvZiBjYXN0cyBpbiBfbmNfYmFzZW5hbWUoKSBjYWxscy4KKwkrIGNvcnJlY3QgYSBzaWduLWV4dGVuc2lvbiBpbiB3YWRkX3djaCgpIGFuZCB3ZWNob193Y2hhcigpIGZyb20KKwkgIDIwMDMwNjI4IChyZXBvcnQgYnkgVG9tb2hpcm8gS3Vib3RhKS4KKwkrIHdvcmsgYXJvdW5kIG9taXNzaW9uIG9mIGJ0b3djKCkgYW5kIHdjdG9iKCkgZnJvbSB3aWRlLWNoYXJhY3RlcgorCSAgc3VwcG9ydCAoc2ljKSBpbiBOZXRCU0QgMS42IHVzaW5nIG1idG93YygpIGFuZCB3Y3RvbWIoKSAocmVwb3J0IGJ5CisJICBHYWJvciBaIFBhcHApLgorCSsgYWRkIHBvcnRhYmlsaXR5IG5vdGUgdG8gY3Vyc19nZXRfd3N0ci4zeCAoRGViaWFuICMxOTk5NTcpLgorCisyMDAzMDYyOAorCSsgcmV3cml0ZSB3YWRkX3djaCgpIGFuZCB3ZWNob193Y2hhcigpIHRvIGNhbGwgd2FkZGNoKCkgYW5kIHdlY2hvY2hhcigpCisJICByZXNwZWN0aXZlbHksIHRvIGF2b2lkIGNhbGxpbmcgd2FkZGNoX25vZWNobygpIHdpdGggd2lkZS1jaGFyYWN0ZXIKKwkgIGRhdGEsIHNpbmNlIHRoYXQgZnVuY3Rpb24gYXNzdW1lcyBpdHMgaW5wdXQgaXMgOC1iaXQgZGF0YS4KKwkgIFNpbWlsYXJseSwgbW9kaWZ5IHdhZGRud3N0cigpIHRvIGNhbGwgd2FkZF93Y2goKS4KKwkrIHJlbW92ZSBsb2dpYyBmcm9tIHdhZGRuc3RyKCkgd2hpY2ggdHJhbnNmb3JtZWQgbXVsdGlieXRlIGNoYXJhY3RlcgorCSAgc3RyaW5ncyBpbnRvIHdpZGUtY2hhcmFjdGVycy4gIFJld3JpdGUgb2Ygd2FkZGNoX2xpdGVyYWwoKSBmcm9tCisJICAyMDAzMDYyMSBhc3N1bWVzIGl0cyBpbnB1dCBpcyByYXcgbXVsdGlieXRlIGRhdGEgcmF0aGVyIHRoYW4gd2lkZQorCSAgY2hhcmFjdGVycyAocmVwb3J0IGJ5IFRvbW9oaXJvIEt1Ym90YSkuCisKKzIwMDMwNjIxCisJKyB3cml0ZSBnZXR5eCgpIGFuZCByZWxhdGVkIDItcmV0dXJuIG1hY3JvcyBpbiB0ZXJtcyBvZiBnZXRjdXJ5KCksCisJICBnZXRjdXJ4KCksIGV0Yy4KKwkrIG1vZGlmeSB3YWRkY2hfbGl0ZXJhbCgpIGluIGNhc2UgYW4gYXBwbGljYXRpb24gcGFzc2VzIGJ5dGVzIG9mIGEKKwkgIG11bHRpYnl0ZSBjaGFyYWN0ZXIgZGlyZWN0bHkgdG8gd2FkZGNoKCkuICBJbiB0aGlzIGNhc2UsIHdhZGRjaCgpCisJICBtdXN0IHJlYXNzZW1ibGUgdGhlIGJ5dGVzIGludG8gYSB3aWRlLWNoYXJhY3RlciAocmVwb3J0IGJ5IFRvbW9oaXJvCisJICBLdWJvdGEgPGt1Ym90YUBkZWJpYW4ub3JnPikuCisKKzIwMDMwNjE0CisJKyBtb2RpZnkgd2FkZGNoX2xpdGVyYWwoKSBpbiBjYXNlIGEgbXVsdGlieXRlIHZhbHVlIG9jY3VwaWVzIG1vcmUgdGhhbgorCSAgdHdvIGNlbGxzLgorCSsgbW9kaWZ5IFB1dEF0dHJDaGFyKCkgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlciBjZWxscyB0aGF0CisJICBhcmUgdXNlZCBpbiBtdWx0aWJ5dGUgdmFsdWVzLiAgVGhpcyBmaXhlcyBhIHByb2JsZW0gZGlzcGxheWluZworCSAgZG91YmxlLXdpZHRoIGNoYXJhY3RlcnMgKHJlcG9ydC90ZXN0IGJ5IE1pdHN1cnUgQ2hpbmVuCisJICA8bWNoaW5lbkB5YW1hdG8uaWJtLmNvbT4pLgorCSsgYWRkIGEgbnVsbC1wb2ludGVyIGNoZWNrIGZvciByZXN1bHQgb2Yga2V5bmFtZSgpIGluIF90cmFjZWNoYXIoKQorCSsgbW9kaWZ5IF90cmFjZWNoYXIoKSB0byB3b3JrIGFyb3VuZCBnbGliYyBzcHJpbnRmIGJ1Zy4KKworMjAwMzA2MDcKKwkrIGFkZCBhIGNhbGwgdG8gc2V0bG9jYWxlKCkgaW4gY3Vyc2VzbWFpbi5jYywgbWFraW5nIGRlbW8gZGlzcGxheQorCSAgcHJvcGVybHkgaW4gYSBVVEYtOCBsb2NhbGUuCisJKyBhZGQgYSBmYWxsYmFjayBkZWZpbml0aW9uIGluIGN1cnNlcy5wcml2LmggZm9yIE1CX0xFTl9NQVggKHByb21wdGVkCisJICBieSBkaXNjdXNzaW9uIHdpdGggR2Fib3IgWiBQYXBwKS4KKwkrIHVzZSBtYWNyb3MgTkNVUlNFU19BQ1MoKSBhbmQgTkNVUlNFU19XQUNTKCkgdG8gaGlkZSBjYXN0IG5lZWRlZCB0bworCSAgYXBwZWFzZSAtV2NoYXItc3Vic2NyaXB0IHdpdGggZysrIDMuMyAoRGViaWFuICMxOTU3MzIpLgorCSsgZml4IGEgcmVkZWZpbml0aW9uIG9mICRSQU5MSUIgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2hlbiBsaWJ0b29sCisJICBpcyB1c2VkLCB3aGljaCBicm9rZSBjb25maWd1cmUgb24gTWFjIE9TIFggKHJlcG9ydCBieSBDaHJpcyBadWJyenlja2kKKwkgIDxiZXJlbkBtYWMuY29tPikuCisJKyBzaW1wbGlmeSBpZmRlZiBmb3IgYm9vbCBkZWNsYXJhdGlvbiBpbiBjdXJzZXMuaC5pbiAoc3VnZ2VzdGVkIGJ5CisJICBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIHJlbW92ZSBjb25maWd1cmUgc2NyaXB0IGNoZWNrIHRvIGFsbG93IC1XY29udmVyc2lvbiBmb3Igb2xkZXIKKwkgIHZlcnNpb25zIG9mIGdjYyAoc3VnZ2VzdGVkIGJ5IEFsYmVydCBDaGluLUEtWW91bmcpLgorCisyMDAzMDUzMQorCSsgcmVnZW5lcmF0ZWQgaHRtbCBtYW5wYWdlcy4KKwkrIG1vZGlmeSBpZmRlZidzIGluIGN1cnNlcy5oLmluIHRoYXQgZGlzYWJsZWQgdXNlIG9mIF9fYXR0cmlidXRlX18oKQorCSAgZm9yIGcrKywgc2luY2UgcmVjZW50IHZlcnNpb25zIGltcGxlbWVudCB0aGUgY2FzZXMgd2hpY2ggbmN1cnNlcyB1c2VzCisJICAoRGViaWFuICMxOTUyMzApLgorCSsgbW9kaWZ5IF9uY19nZXRfdG9rZW4oKSB0byBoYW5kbGUgYSBjYXNlIHdoZXJlIGFuIGVudHJ5IGhhcyBubworCSAgZGVzY3JpcHRpb24sIGFuZCBjYXBhYmlsaXRpZXMgYmVnaW4gb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgZW50cnkKKwkgIG5hbWUuCisJKyBmaXggYSB0eXBvIGluIG5jdXJzZXNfZGxsLmggcmVwb3J0ZWQgYnkgZ2NjIDMuMy4KKwkrIGFkZCBhbiBlbnRyeSBmb3Iga2V5X2RlZmluZWQuM3ggdG8gbWFuX2RiLnJlbmFtZXMuCisKKzIwMDMwNTI0CisJKyBtb2RpZnkgc2V0Y2NoYXIoKSB0byBhbGxvdyBjb252ZXJ0aW5nIGNvbnRyb2wgY2hhcmFjdGVycyB0byBjb21wbGV4CisJICBjaGFyYWN0ZXJzIChyZXBvcnQvdGVzdCBieSBNaXRzdXJ1IENoaW5lbiA8bWNoaW5lbkB5YW1hdG8uaWJtLmNvbT4pLgorCSsgYWRkIHRrdGVybSBlbnRyeSAtVEQKKwkrIG1vZGlmeSBwYXJzZV9lbnRyeS5jIHRvIGFsbG93IGEgdGVybWluZm8gZW50cnkgd2l0aCBhIGxlYWRpbmcKKwkgIDItY2hhcmFjdGVyIG5hbWUgKHJlcG9ydCBieSBEb24gTGliZXMpLgorCSsgY29ycmVjdGVkIGFjc2MgaW4gc2NyZWVuLnRlcmF0ZXJtLCB3aGljaCByZXF1aXJlcyBhIFBDLXN0eWxlIG1hcHBpbmcuCisJKyBmaXggdHJhY2Ugc3RhdGVtZW50cyBpbiByZWFkX2VudHJ5LmMgdG8gdXNlIGxzZWVrKCkgcmF0aGVyIHRoYW4KKwkgIHRlbGwoKS4KKwkrIGZpeCBzaWduZWQvdW5zaWduZWQgd2FybmluZ3MgZnJvbSBTdW4ncyBjb21waWxlciAoZ2NjIHNob3VsZCBnaXZlCisJICB0aGVzZSB3YXJuaW5ncywgYnV0IGl0IGlzIHVucHJlZGljdGFibGUpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gb21pdCAtV2lubGluZSBmb3IgZ2NjIDMuMywgc2luY2UgdGhhdAorCSAgZmVhdHVyZSBpcyBicm9rZW4uCisJKyBtb2RpZnkgbWFubGlua3Muc2VkIHRvIGFkZCBhIGZldyBmdW5jdGlvbnMgdGhhdCB3ZXJlIG92ZXJsb29rZWQgc2luY2UKKwkgIHRoZXkgcmV0dXJuIGZ1bmN0aW9uIHBvaW50ZXJzOiAgZmllbGRfaW5pdCwgZmllbGRfdGVybSwgZm9ybV9pbml0LAorCSAgZm9ybV90ZXJtLCBpdGVtX2luaXQsIGl0ZW1fdGVybSwgbWVudV9pbml0IGFuZCBtZW51X3Rlcm0uCisKKzIwMDMwNTE3CisJKyBwcmV2ZW50IHJlY3Vyc2lvbiBpbiB3Z2V0Y2goKSB2aWEgd2dldG5zdHIoKSBpZiB0aGUgY29ubmVjdGlvbiBjYW5ub3QKKwkgIGJlIHN3aXRjaGVkIGJldHdlZW4gY29va2VkL3JhdyBtb2RlcyBiZWNhdXNlIGl0IGlzIG5vdCBhIFRUWSAocmVwb3J0CisJICBieSBXb2xmZ2FuZyBHdXRqYWhyIDxndXR3QGtuYXBwLmNvbT4pLgorCSsgY2hhbmdlIHBhcmFtZXRlciBvZiBkZWZpbmVfa2V5KCkgYW5kIGtleV9kZWZpbmVkKCkgdG8gY29uc3QgKHByb21wdGVkCisJICBieSBEZWJpYW4gIzE5Mjg2MCkuCisJKyBhZGQgYSBjaGVjayBpbiB0ZXN0L2NvbmZpZ3VyZSBmb3IgbmN1cnNlcyBleHRlbnNpb25zLCBzaW5jZSB0aGVyZQorCSAgYXJlIHNvbWUgb2xkZXIgdmVyc2lvbnMsIGV0Yy4sIHdoaWNoIHdvdWxkIG5vdCBjb21waWxlIHdpdGggdGhlCisJICBjdXJyZW50IHRlc3QgcHJvZ3JhbXMuCisJKyBjb3JyZWN0ZWQgZGVtbyBpbiB0ZXN0L25jdXJzZXMuYyBvZiB3Z2V0bl93c3RyKCksIHdoaWNoIGRpZCBub3QKKwkgIGNvbnZlcnQgd2NoYXJfdCBzdHJpbmcgdG8gbXVsdGlieXRlIGZvcm0gYmVmb3JlIHByaW50aW5nIGl0LgorCSsgY29ycmVjdGlvbnMgdG8gbGliX2dldF93c3RyLmM6CisJICArIG51bGwtdGVybWluYXRlIGJ1ZmZlciBwYXNzZWQgdG8gc2V0Y2NoYXIoKSwgd2hpY2ggb2NjYXNpb25hbGx5CisJICAgIGZhaWxlZC4KKwkgICsgbWFwIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzIGVyYXNlLSBhbmQga2lsbC1jaGFyYWN0ZXJzIGludG8KKwkgICAga2V5LWNvZGVzIHNvIHRob3NlIHdpbGwgd29yayBhcyBleHBlY3RlZCBldmVuIGlmIHRoZXkgYXJlIG5vdAorCSAgICBtZW50aW9uZWQgaW4gdGhlIHRlcm1pbmZvLgorCSsgbW9kaWZ5IFBVVEMoKSBhbmQgQ2hhcmFibGUoKSBtYWNyb3MgdG8gbWFrZSB3aWRlLWNoYXJhY3RlciBsaW5lCisJICBkcmF3aW5nIHdvcmsgZm9yIFBPU0lYIGxvY2FsZSBvbiBMaW51eCBjb25zb2xlIChjZjogMjAwMjEyMjEpLgorCisyMDAzMDUxMAorCSsgbWFrZSB0eXBvZ3JhcGh5IGZvciBwcm9ncmFtIG9wdGlvbnMgaW4gbWFucGFnZXMgY29uc2lzdGVudCAocmVwb3J0CisJICBieSBNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4pLgorCSsgY29ycmVjdCBkZXBlbmRlbmNpZXMgaW4gQWRhOTUvc3JjL01ha2VmaWxlLmluLCBzbyB0aGUgYnVpbGRzIHdpdGgKKwkgICItLXNyY2RpciIgd29yayAocmVwb3J0IGJ5IFdhcnJlbiBMIERvZGdlKS4KKwkrIGNvcnJlY3QgbWlzc2luZyBkZWZpbml0aW9uIG9mICQoQ0MpIGluIEFkYTk1L2dlbi9NYWtlZmlsZS5pbgorCSAgKHJlcG9ydGVkIGJ5IFdhcnJlbiBMIERvZGdlIDx3YXJyZW5kQG1kaG9zdC5jc2UudGVrLmNvbT4pLgorCSsgZml4IHR5cG9zIGFuZCB3aGl0ZXNwYWNlIGluIG1hbnBhZ2VzIChwYXRjaCBieSBKYXNvbiBNY0ludHlyZQorCSAgPGptY0BwcmlvcmlzLm1pbmkucHcuZWR1LnBsPikuCisKKzIwMDMwNTAzCisJKyBmaXggZm9ybV9kcml2ZXIoKSBjYXNlcyBmb3IgUkVRX0NMUl9FT0YsIFJFUV9DTFJfRU9MLCBSRVFfREVMX0NIQVIsCisJICBSRVFfREVMX1BSRVYgYW5kIFJFUV9ORVdfTElORSwgd2hpY2ggZGlkIG5vdCBlbnN1cmUgdGhlIGN1cnNvciB3YXMgYXQKKwkgIHRoZSBlZGl0aW5nIHBvc2l0aW9uIGJlZm9yZSBtYWtpbmcgbW9kaWZpY2F0aW9ucy4KKwkrIGFkZCB0ZXN0L2RlbW9fZm9ybXMgYW5kIGFzc29jaWF0ZWQgdGVzdC9lZGl0X2ZpZWxkLmMgZGVtb3MuCisJKyBtb2RpZnkgdGVzdC9jb25maWd1cmUuaW4gdG8gdXNlIHRlc3QvbW9kdWxlcyBmb3IgdGhlIGxpc3Qgb2Ygb2JqZWN0cworCSAgdG8gY29tcGlsZSByYXRoZXIgdGhhbiB1c2luZyB0aGUgbGlzdCBvZiBwcm9ncmFtcy4KKworMjAwMzA0MTkKKwkrIG1vZGlmeSBsb2dpYyBvZiBhY3NjIHRvIHVzZSB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyIGlmIG5vIG1hcHBpbmcgaXMKKwkgIGRlZmluZWQsIG5vdGluZyB0aGF0IFNvbGFyaXMgZG9lcyB0aGlzLgorCSsgbW9kaWZ5IG5jdXJzZXMgJ2InIHRlc3QgdG8gYXZvaWQgdXNpbmcgdGhlIGFjc19tYXBbXSBhcnJheSBzaW5jZQorCSAgMjAwMjEyMzEgY2hhbmdlcyBpdCB0byBubyBsb25nZXIgY29udGFpbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhY3NjCisJICBzdHJpbmcuCisJKyBtb2RpZnkgbWFrZWZpbGUgcnVsZXMgaW4gYysrLCBwcm9ncywgdGFjayBhbmQgdGVzdCB0byBlbnN1cmUgdGhhdAorCSAgdGhlIGNvbXBpbGVyIGZsYWdzIChlLmcuLCAkQ0ZMQUdTIG9yICRDQ0ZMQUdTKSBhcmUgdXNlZCBpbiB0aGUgbGluaworCSAgY29tbWFuZCAocmVwb3J0IGJ5IEpvc2UgTHVpcyBSaWNvIEJvdGVsbGEgPGluZm9ybWF0aWNhQHNlcnBpcy5jb20+KS4KKwkrIG1vZGlmeSBzb2Z0LWtleSBpbml0aWFsaXphdGlvbiB0byB1c2UgQV9SRVZFUlNFIGlmIEFfU1RBTkRPVVQgd291bGQKKwkgIG5vdCBiZSBzaG93biB3aGVuIGNvbG9ycyBhcmUgdXNlZCwgaS5lLiwgaWYgbmN2IzEgaXMgc2V0IGluIHRoZQorCSAgdGVybWluZm8gYXMgaXMgZG9uZSBpbiAic2NyZWVuIi4KKworMjAwMzA0MTIKKwkrIGFkZCBhIHRlc3QgZm9yIHNsa19jb2xvcigpLCBpbiBuY3Vyc2VzLmMKKwkrIGZpeCBzb21lIGlzc3VlcyByZXBvcnRlZCBieSB2YWxncmluZCBpbiB0aGUgc2xrX3NldCgpIGFuZCBzbGtfd3NldCgpCisJICBjb2RlLCBmcm9tIHJlY2VudCByZXdyaXRlLgorCSsgbW9kaWZ5IG5jdXJzZXMgJ0UnIHRlc3QgdG8gdXNlIHNob3cgcHJldmlvdXMgbGFiZWwgdmlhIHNsa19sYWJlbCgpLAorCSAgYXMgaW4gJ2UnIHRlc3QuCisJKyBtb2RpZnkgd2lkZS1jaGFyYWN0ZXIgdmVyc2lvbnMgb2YgTmV3Q2hhcigpLCBOZXdDaGFyMigpIG1hY3JvcyB0bworCSAgZW5zdXJlIHRoYXQgdGhlIHdob2xlIHN0cnVjdCBpcyBpbml0aWFsaXplZC4KKworMjAwMzA0MDUKKwkrIG1vZGlmeSBzZXR1cHRlcm0oKSB0byBjaGVjayBpZiB0aGUgdGVybWluZm8gYW5kIHRlcm1pbmFsLW1vZGVzIGhhdmUKKwkgIGFscmVhZHkgYmVlbiByZWFkLiAgVGhpcyBlbnN1cmVzIHRoYXQgaXQgZG9lcyBub3QgcmVpbnZva2UKKwkgIGRlZl9wcm9nX21vZGUoKSB3aGVuIGFuIGFwcGxpY2F0aW9uIGNhbGxzIG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24sCisJICBzdWNoIGFzIHRnZXRlbnQoKSBhbmQgaW5pdHNjcigpIChyZXBvcnQgYnkgT2xhZiBCdWRkZW5oYWdlbikuCisKKzIwMDMwMzI5CisJKyBhZGQgJ0UnIHRlc3QgdG8gbmN1cnNlcy5jLCB0byBleGVyY2lzZSBzbGtfd3NldCgpLgorCSsgY29ycmVjdCBoYW5kbGluZyBvZiBjYXJyaWFnZS1yZXR1cm4gaW4gd2dldG5fd3N0cigpLCB1c2VkIGluIGRlbW8gb2YKKwkgIHNsa193c2V0KCkuCisJKyBmaXJzdCBkcmFmdCBvZiBzbGtfd3NldCgpIGZ1bmN0aW9uLgorCisyMDAzMDMyMgorCSsgaW1wcm92ZWQgd2FybmluZ3MgaW4gdGljIHdoZW4gc3VwcHJlc3NpbmcgaXRlbXMgdG8gZml0IGluIHRlcm1jYXAncworCSAgMTAyMy1ieXRlIGxpbWl0LgorCSsgYnVpbHQgYSBsaXN0IGluIHRlc3QvUkVBRE1FIHNob3dpbmcgd2hpY2ggZXh0ZXJuYWxzIGFyZSBiZWluZyB1c2VkCisJICBieSBlaXRoZXIgcHJvZ3JhbXMgaW4gdGhlIHRlc3QtZGlyZWN0b3J5IG9yIHZpYSBpbnRlcm5hbCBsaWJyYXJ5CisJICBjYWxscy4KKwkrIGFkanVzdCBpbmNsdWRlLW9wdGlvbnMgaW4gQ0ZfRVRJUF9ERUZJTkVTIHRvIGF2b2lkIG1pc3NpbmcKKwkgIG5jdXJzZXNfZGxsLmgsIGZpeGluZyBzcGVjaWFsIGRlZmluaXRpb25zIHRoYXQgbWF5IGJlIG5lZWRlZCBmb3IKKwkgIGV0aXAuaCAocmVwb3J0ZWQgYnkgR3JlZyBTY2hhZmVyIDxnc2NoYWZlckB6aXAuY29tLmF1PikuCisKKzIwMDMwMzE1CisJKyBtaW5vciBmaXhlcyBmb3IgY2FyZGZpbGUuYywgdG8gbWFrZSBpdCB3cml0ZSB0aGUgdXBkYXRlZCBmaWVsZHMgdG8KKwkgIGEgZmlsZSB3aGVuIF5XIGlzIGdpdmVuLgorCSsgYWRkL3VzZSBfbmNfdHJhY2VfYnVmY2F0KCkgdG8gZWxpbWluYXRlIHNvbWUgZml4ZWQgYnVmZmVyIGxpbWl0cyBpbgorCSAgdHJhY2UgY29kZS4KKworMjAwMzAzMDgKKwkrIGNvcnJlY3QgYSBjYXNlIGluIF9uY19yZW1vdmVfc3RyaW5nKCksIHVzZWQgYnkgZGVmaW5lX2tleSgpLCB0byBhdm9pZAorCSAgaW5maW5pdGUgbG9vcCBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGhhcHBlbnMgdG8gYmUgYSBzdWJzdHJpbmcgb2Ygb3RoZXIKKwkgIHN0cmluZ3Mgd2hpY2ggYXJlIGFzc2lnbmVkIHRvIGtleXMgKHJlcG9ydCBieSBKb2huIE1jQ3V0Y2hhbikuCisJKyBhZGQga2V5X2RlZmluZWQoKSBmdW5jdGlvbiwgdG8gdGVsbCB3aGljaCBrZXljb2RlIGEgc3RyaW5nIGlzIGJvdW5kCisJICB0byAoZGlzY3Vzc2lvbiB3aXRoIEpvaG4gTWNDdXRjaGFuIDx0dGJAdGVudGFjbGUuZGhzLm9yZz4pLgorCSsgY29ycmVjdCBrZXlib3VuZCgpLCB3aGljaCByZXBvcnRlZCBkZWZpbml0aW9ucyBpbiB0aGUgd3JvbmcgdGFibGUsCisJICBpLmUuLCB0aGUgbGlzdCBvZiBkZWZpbml0aW9ucyB3aGljaCBhcmUgZGlzYWJsZWQgYnkga2V5b2soKS4KKwkrIG1vZGlmeSBkZW1vX2tleWRlZi5jIHRvIHNob3cgdGhlIGRldGFpbHMgaXQgY2hhbmdlcywgYW5kIHRvIGNoZWNrCisJICBmb3IgZXJyb3JzLgorCisyMDAzMDMwMQorCSsgcmVzdHJ1Y3R1cmVkIHRlc3QvY29uZmlndXJlIHNjcmlwdCwgbWFrZSBpdCB3b3JrIGZvciBsaWJuY3Vyc2Vzdy4KKwkrIGFkZCBkZXNjcmlwdGlvbiBvZiBsaW5rX2ZpZWxkdHlwZSgpIHRvIG1hbnBhZ2UgKHJlcG9ydCBieQorCSAgTCBEZWUgSG9sdHNjbGF3IDxkZWVAc3VuYmVsdHNvZnQuY29tPikuCisKKzIwMDMwMjIyCisJKyBjb3JyZWN0ZWQgaWZkZWYncyByZWxhdGluZyB0byBjb25maWd1cmUgY2hlY2sgZm9yIHdjaGFyX3QsIGV0Yy4KKwkrIGlmIHRoZSBvdXRwdXQgaXMgYSBzb2NrZXQgb3Igb3RoZXIgbm9uLXR0eSBkZXZpY2UsIHVzZSAxIG1pbGxpc2Vjb25kCisJICBmb3IgdGhlIGNvc3QgaW4gbXZjdXI7IHByZXZpb3VzbHkgaXQgd2FzIDkgbWlsbGlzZWNvbmRzIGJlY2F1c2UgdGhlCisJICBiYXVkcmF0ZSB3YXMgbm90IGtub3duLgorCSsgaW4gX25jX2dldF90dHlfbW9kZSgpLCBpbml0aWFsaXplIHRoZSBUVFkgYnVmZmVyIG9uIGVycm9yLCBzaW5jZQorCSAgZ2xpYmMgY29waWVzIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGF0IGNhc2UsIGFzIG5vdGVkIGJ5IHZhbGdyaW5kLgorCSsgbW9kaWZ5IHRwdXQgdG8gdXNlIHRoZSBzYW1lIHBhcmFtZXRlciBhbmFseXNpcyBhcyB0cGFybSgpIGRvZXMsIHRvCisJICBwcm92aWRlIGZvciB1c2VyLWRlZmluZWQgc3RyaW5ncywgZS5nLiwgZm9yIHh0ZXJtIHRpdGxlLCBhCisJICBjb3JyZXNwb25kaW5nIGNhcGFiaWxpdHkgbWlnaHQgYmUKKwkJdGl0bGU9XEVdMjslcDElc15HLAorCSsgbW9kaWZ5IE1LbGliX2dlbi5zaCB0byBhdm9pZCBwYXNzaW5nICIjIiB0b2tlbnMgdGhyb3VnaCB0aGUgQworCSAgcHJlcHJvY2Vzc29yLiAgVGhpcyB3b3JrcyBhcm91bmQgTWFjIE9TIFgncyBwcmVwcm9jZXNzb3IsIHdoaWNoCisJICBpbnNpc3RzIG9uIGFkZGluZyBhIGJsYW5rIG9uIGVhY2ggc2lkZSBvZiB0aGUgdG9rZW4gKHJlcG9ydC9hbmFseXNpcworCSAgYnkgS2V2aW4gTXVycGh5IDxtdXJwaHlAZ2Vub21lLmNob3AuZWR1PikuCisKKzIwMDMwMjE1CisJKyBhZGQgY29uZmlndXJlIGNoZWNrIGZvciB3Y2hhcl90IGFuZCB3aW50X3QgdHlwZXMsIHJhdGhlciB0aGFuIHJlbHkKKwkgIG9uIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucy4gIEFsc28gd29yayBhcm91bmQgZm9yIGdjYyBmaXhpbmNsdWRlCisJICBidWcgd2hpY2ggY3JlYXRlcyBhIHNoYWRvdyBjb3B5IG9mIGN1cnNlcy5oIGlmIGl0IHNlZXMgdGhlc2Ugc3ltYm9scworCSAgYXBwYXJlbnRseSB0eXBlZGVmJ2QuCisJKyBpZiBkYXRhYmFzZSBpcyBkaXNhYmxlZCwgZG8gbm90IGdlbmVyYXRlIHJ1bl90aWMuc2gKKwkrIG1pbm9yIGZpeGVzIGZvciBtZW1vcnktbGVhayBjaGVja2luZyB3aGVuIHRlcm1jYXAgaXMgcmVhZC4KKworMjAwMzAyMDgKKwkrIGFkZCBjaGVja2luZyBpbiB0aWMgZm9yIGluY29tcGxldGUgbGluZS1kcmF3aW5nIGNoYXJhY3RlciBtYXBwaW5nLgorCSsgdXBkYXRlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gcmVmbGVjdCBmaXggZm9yIEFDX1BST0dfR0NDX1RSQURJVElPTkFMLAorCSAgd2hpY2ggaXMgYnJva2VuIGluIGF1dG9jb25mIDIuNXggZm9yIE1hYyBPUyBYIDEwLjIuMyAocmVwb3J0IGJ5CisJICBHZXJiZW4gV2llcmRhIDxTaGVybG9ja0BybmEubmw+KS4KKwkrIG1ha2UgcmV0dXJuIHZhbHVlIGZyb20gX25jX3ByaW50Zl9zdHJpbmcoKSBjb25zaXN0ZW50LiAgQmVmb3JlLAorCSAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgLS1lbmFibGUtc2FmZS1zcHJpbnRmIHdhcyB1c2VkLCBpdCBtaWdodCBub3QgYmUKKwkgIGNhY2hlZCBmb3IgcmVhbGxvY2F0aW5nLgorCisyMDAzMDIwMQorCSsgbWlub3IgZml4ZXMgZm9yIG1lbW9yeS1sZWFrIGNoZWNraW5nIGluIGxpYl90cGFybS5jLCBoYXJkc2Nyb2xsLmMKKwkrIGNvcnJlY3QgYSBwb3RlbnRpYWxseS11bmluaXRpYWxpemVkIHZhbHVlIGlmIF9yZWFkX3Rlcm10eXBlKCkgZG9lcworCSAgbm90IHJlYWQgYXMgbXVjaCBkYXRhIGFzIGV4cGVjdGVkIChyZXBvcnQgYnkgV29sZmdhbmcgUm9oZGV3YWxkCisJICA8d3I2QHVuaS5kZT4pLgorCSsgY29ycmVjdCBzZXZlcmFsIHBsYWNlcyB3aGVyZSB0aGUgYWNsb2NhbC5tNCBtYWNyb3MgcmVsaWVkIG9uIGNhY2hlCisJICB2YXJpYWJsZSBuYW1lcyB3aGljaCB3ZXJlIGluY29tcGF0aWJsZSAoYXMgdXN1YWwpIGJldHdlZW4gYXV0b2NvbmYKKwkgIDIuMTMgYW5kIDIuNXgsIGNhdXNpbmcgdGhlIHRlc3QgZm9yIGJyb2tlbi1saW5rZXIgdG8gZ2l2ZSBpbmNvcnJlY3QKKwkgIHJlc3VsdHMgKHJlcG9ydHMgYnkgR2VyYmVuIFdpZXJkYSA8U2hlcmxvY2tAcm5hLm5sPiBhbmQgVGhvbWFzIEVzc2VyCisJICA8dGVAZGJzLnVuaS1oYW5ub3Zlci5kZT4pLgorCSsgZG8gbm90IHRyeSB0byBvcGVuIGdwbSBtb3VzZSBkcml2ZXIgaWYgc3RhbmRhcmQgb3V0cHV0IGlzIG5vdCBhIHR0eTsKKwkgIHRoZSBncG0gbGlicmFyeSBkb2VzIG5vdCBtYWtlIHRoaXMgY2hlY2sgKGJ1ZyByZXBvcnQgZm9yIGRpYWxvZworCSAgYnkgRGF2aWQgT2xpdmVpcmEgPGRhdmlkb2xpdmVpcmFAZGV2ZWxvcC5wcm96b25lLndzPikuCisKKzIwMDMwMTI1CisJKyBtb2RpZmllZCBlbXguc3JjIHRvIGNvcnJlc3BvbmQgbW9yZSBjbG9zZWx5IHRvIHRlcm1pbmZvLnNyYywgYWRkZWQKKwkgIGVteC1iYXNlIHRvIHRoZSBsYXR0ZXIgLVRECisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiBmb3IgRnJlZUJTRCBzeXNtb3VzZSwgLS13aXRoLXN5c21vdXNlLCBhbmQKKwkgIGltcGxlbWVudCBzdXBwb3J0IGZvciB0aGF0IGluIGxpYl9tb3VzZS5jLCBsaWJfZ2V0Y2guYworCisyMDAzMDExOAorCSsgcmV2ZXJ0IDIwMDMwMTA1IGNoYW5nZSB0byBjYW5fY2xlYXJfd2l0aCgpLCBkb2VzIG5vdCB3b3JrIGZvciB0aGUKKwkgIGNhc2Ugd2hlcmUgdGhlIHVwZGF0ZSBpcyBtYWRlIG9uIGNlbGxzIHdoaWNoIGFyZSBibGFua3Mgd2l0aAorCSAgYXR0cmlidXRlcywgZS5nLiwgcmV2ZXJzZS4KKwkrIGltcHJvdmUgaWZkZWYncyB0byBndWFyZCBhZ2FpbnN0IHJlZGVmaW5pdGlvbiBvZiB3Y2hhcl90IGFuZCB3aW50X3QKKwkgIGluIGN1cnNlcy5oIChyZXBvcnQgYnkgVXJzIEphbnNlbikuCisKKzIwMDMwMTExCisJKyBpbXByb3ZlIG12Y3VyKCkgYnkgY2hlY2tpbmcgaWYgaXQgaXMgc2FmZSB0byBtb3ZlIHdoZW4gdmlkZW8KKwkgIGF0dHJpYnV0ZXMgYXJlIHNldCAobXNnciksIGFuZCBpZiBub3QsIHJlc2V0L3Jlc3RvcmUgYXR0cmlidXRlcworCSAgd2l0aGluIHRoYXQgZnVuY3Rpb24gcmF0aGVyIHRoYW4gZG9pbmcgaXQgc2VwYXJhdGVseSBpbiB0aGUgR29UbygpCisJICBmdW5jdGlvbiBpbiB0dHlfdXBkYXRlLmMgKHN1Z2dlc3RlZCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyBhZGQgYSBtZXNzYWdlIGluIHJ1bl90aWMuaW4gdG8gZXhwbGFpbiBtb3JlIGNsZWFybHkgd2hhdCBkb2VzIG5vdAorCSAgd29yayB3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgc3ltYm9saWMgbGluayBmb3IgL3Vzci9saWIvdGVybWluZm8KKwkgIG9uIE9TLzIgYW5kIG90aGVyIHBsYXRmb3JtcyB3aXRoIG5vIHN5bWJvbGljIGxpbmtzIChyZXBvcnQgYnkgSm9obgorCSAgUG9sdGVyYWspLgorCSsgY2hhbmdlIHNldmVyYWwgc2VkIHNjcmlwdHMgdG8gYXZvaWQgdXNpbmcgIlwrIiBzaW5jZSBpdCBpcyBub3QgYSBCUkUKKwkgIChiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24pLiAgT25lIGluc3RhbmNlIGNhdXNlZCB0ZXJtaW5mby41IHRvIGJlCisJICBtaXNmb3JtYXR0ZWQgb24gRnJlZUJTRCAocmVwb3J0IGJ5IEthenVvIEhvcmlrYXdhCisJICA8aG9yaWthd2FARnJlZUJTRC5vcmc+IChzZWUgRnJlZUJTRCBkb2NzLzQ2NzA5KSkuCisJKyBjb3JyZWN0IG1pc3NwZWxsZWQgJ3dpbnRfdCcgaW4gY3Vyc19nZXRfd2NoLjN4IChNaWNoYWVsIEVsa2lucykuCisKKzIwMDMwMTA1CisJKyBpbXByb3ZlIGRlc2NyaXB0aW9uIG9mIHRlcm1pbmZvIG9wZXJhdG9ycywgZXNwZWNpYWxseSBzdGF0aWMvZHluYW1pYworCSAgdmFyaWFibGVzIChjb21tZW50cyBieSBNYXJrIEkgTWFubmluZyBJViA8bWFyazR0aEBlYXJ0aGxpbmsubmV0PikuCisJKyBkZW1vbnN0cmF0ZSB1c2Ugb2YgRklFTERUWVBFIGJ5IG1vZGlmeWluZyB0ZXN0L25jdXJzZXMgJ3InIHRlc3QgdG8KKwkgIHVzZSB0aGUgcHJlZGVmaW5lZCBUWVBFX0FMUEhBIGZpZWxkLXR5cGUsIGFuZCBieSBkZWZpbmluZyBhCisJICBzcGVjaWFsaXplZCB0eXBlIGZvciB0aGUgbWlkZGxlIGluaXRpYWwvbmFtZS4KKwkrIGZpeCBNS3Rlcm1pbmZvLnNoLCBhbm90aGVyIHdvcmthcm91bmQgZm9yIFBPU0lYTFlfQ09SUkVDVCBtaXNmZWF0dXJlCisJICBvZiBzZWQgNC4wCisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIG9wdGltaXplIGNhbl9jbGVhcl93aXRoKCkgYSBsaXR0bGUgYnkgdGVzdGluZyBmaXJzdCBpZiB0aGUgcGFyYW1ldGVyCisJICBpcyBpbmRlZWQgYSAiYmxhbmsiLgorCSsgc2ltcGxpZnkgQ2xyQm90dG9tKCkgYSBsaXR0bGUgYnkgYWxsb3dpbmcgaXQgdG8gdXNlIGNscl9lb3MgdG8gY2xlYXIKKwkgIHNlY3Rpb25zIGFzIHNtYWxsIGFzIG9uZSBsaW5lLgorCSsgaW1wcm92ZSBDbHJUb0VPTCgpIGJ5IGNoZWNraW5nIGlmIGNscl9lb3MgaXMgYXZhaWxhYmxlIGJlZm9yZSB0cnlpbmcKKwkgIHRvIHVzZSBpdC4KKwkrIHVzZSB0cHV0cygpIHJhdGhlciB0aGFuIHB1dHAoKSBpbiBhIGZldyBjYXNlcyBpbiB0dHlfdXBkYXRlLmMgc2luY2UKKwkgIHRoZSBjb3JyZXNwb25kaW5nIGRlbGF5cyBhcmUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgbGluZXMKKwkgIGFmZmVjdGVkOiByZXBlYXRfY2hhciwgY2xyX2VvcywgY2hhbmdlX3Njcm9sbF9yZWdpb24uCisKKzIwMDIxMjMxCisJKyByZXdyaXRlIG9mIGxpYl9hY3MuYyBjb25mbGljdHMgd2l0aCBjb3B5aW5nIG9mIFNDUkVFTiBhY3NfbWFwIHRvL2Zyb20KKwkgIGdsb2JhbCBhY3NfbWFwW10gYXJyYXk7IHJlbW92ZWQgdGhlIGxpbmVzIHRoYXQgZGlkIHRoZSBjb3B5aW5nLgorCisyMDAyMTIyOAorCSsgY2hhbmdlIHNvbWUgb3Zlcmxvb2tlZCB0cHV0cygpIGNhbGxzIGluIHNjcm9sbGluZyBjb2RlIHRvIHVzZSBwdXRwKCkKKwkgIChyZXBvcnQgYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgbW9kaWZ5IGxpYl9nZXRjaC5jIHRvIGF2b2lkIHJlY3Vyc2lvbiB2aWEgd2dldG5zdHIoKSB3aGVuIHRoZSBpbnB1dAorCSAgaXMgbm90IGEgdHR5IGFuZCBjb25zZXF1ZW50bHkgbW9kZS1jaGFuZ2VzIGRvIG5vdCB3b3JrIChyZXBvcnQgYnkKKwkgIDxSLkNoYW1iZXJsaW5AcXVlcml4LmNvbT4pLgorCSsgcmV3cm90ZSBsaWJfYWNzLmMgdG8gYWxsb3cgUHV0QXR0ckNoYXIoKSB0byBkZWNpZGUgaG93IHRvIHJlbmRlcgorCSAgYWx0ZXJuYXRlLWNoYXJhY3RlcnMsIGkuZS4sIHRvIHdvcmsgd2l0aCBMaW51eCBjb25zb2xlIGFuZCBVVEYtOAorCSAgbG9jYWxlLgorCSsgY29ycmVjdCBsaW5lL2NvbHVtbiByZWZlcmVuY2UgaW4gYWRqdXN0X3dpbmRvdygpLCBuZWVkZWQgdG8gbWFrZQorCSAgc3BlY2lhbCB3aW5kb3dzIHN1Y2ggYXMgY3Vyc2NyIHRyYWNrIHByb3Blcmx5IHdoZW4gcmVzaXppbmcgKHJlcG9ydAorCSAgYnkgTHVjYXMgR29uemUgPGxnb256ZUBwYW5peC5jb20+KS4KKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgY29ycmVjdCB0aGUgdmFsdWUgdXNlZCBmb3IgYmxhbmsgaW4gQ2xyQm90dG9tKCkgKGJyb2tlbiBpbiAyMDAwMDcwOCkuCisJKyBjb3JyZWN0IGFuIG9mZi1ieS1vbmUgaW4gR29UbygpIHBhcmFtZXRlciBpbiBfbmNfc2Nyb2xsbigpLgorCisyMDAyMTIyMQorCSsgY2hhbmdlIHNldmVyYWwgdHB1dHMoKSBjYWxscyBpbiBzY3JvbGxpbmcgY29kZSB0byB1c2UgcHV0cCgpLCB0bworCSAgZW5hYmxlIHBhZGRpbmcgd2hpY2ggbWF5IGJlIG5lZWRlZCBmb3Igc29tZSB0ZXJtaW5hbHMgKHBhdGNoIGJ5CisJICBQaGlsaXBwZSBCbGFpbikuCisJKyB1c2UgJyUnIGFzIHNlZCBzdWJzdGl0dXRlIGRlbGltaXRlciBpbiBydW5fdGljIHNjcmlwdCB0byBhdm9pZAorCSAgcHJvYmxlbXMgd2l0aCBwYXRobmFtZSBkZWxpbWl0ZXJzIHN1Y2ggYXMgJzonIGFuZCAnQCcgKHJlcG9ydCBieSBKb2huCisJICBQb2x0ZXJhaykuCisJKyBpbXBsZW1lbnQgYSB3b3JrYXJvdW5kIHNvIHRoYXQgbGluZS1kcmF3aW5nIHdvcmtzIHdpdGggc2NyZWVuJ3MKKwkgIGNyaXBwbGVkIFVURi04IHN1cHBvcnQgKHRlc3RlZCB3aXRoIDMuOS4xMykuICBUaGlzIG9ubHkgd29ya3Mgd2l0aAorCSAgdGhlIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQgKC0tZW5hYmxlLXdpZGVjKTsgdGhlIG5vcm1hbCBsaWJyYXJ5IHdpbGwKKwkgIHNpbXBseSBzdXBwcmVzcyBsaW5lLWRyYXdpbmcgd2hlbiBydW5uaW5nIGluIGEgVVRGLTggbG9jYWxlIGluIHNjcmVlbi4KKworMjAwMjEyMTQKKwkrIGFsbG93IEJVSUxEX0NDIGFuZCByZWxhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgdmFyaWFibGVzIHRvIGJlCisJICBvdmVycmlkZGVuIGZyb20gdGhlIGVudmlyb25tZW50LgorCSsgbWFrZSBidWlsZC10b29scyB2YXJpYWJsZXMgaW4gbmN1cnNlcy9NYWtlZmlsZS5pbiBjb25zaXN0ZW50IHdpdGgKKwkgIHRoZSBjb25maWd1cmUgc2NyaXB0IHZhcmlhYmxlcyAocmVwb3J0IGJ5IE1hY2llaiBXIFJvenlja2kpLgorCSsgbW9kaWZ5IG5jdXJzZXMvbW9kdWxlcyB0byBhbGxvdworCQljb25maWd1cmUgLS1kaXNhYmxlLWxlYWtzIC0tZGlzYWJsZS1leHQtZnVuY3MKKwkgIHRvIGJ1aWxkIChyZXBvcnQgYnkgR2FyeSBTYW11ZWxzb24pLgorCSsgZml4IGEgZmV3IHBsYWNlcyBpbiBjb25maWd1cmUuaW4gd2hpY2ggbGFja2VkIHF1b3RlcyAocmVwb3J0IGJ5CisJICBHYXJ5IFNhbXVlbHNvbiA8Z2FyeS5zYW11ZWxzb25AdmVyaXpvbi5jb20+KS4KKwkrIGNvcnJlY3QgaGFuZGxpbmcgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gd2FkZGNoX2xpdGVyYWwoKSB3aGljaAorCSAgZm9yY2Ugd3JhcHBpbmcgYmVjYXVzZSB0aGV5IGFyZSBzdGFydGVkIHRvbyBsYXRlIG9uIHRoZSBsaW5lIChyZXBvcnQKKwkgIGJ5IFNhbSBWYXJzaGF2Y2hpaykuCisJKyBzbWFsbCBmaXggZm9yIENGX0dOQVRfVkVSU0lPTiB0byBpZ25vcmUgdGhlIGhlbHAtbWVzc2FnZSB3aGljaAorCSAgZ25hdG1ha2UgYWRkcyB0byBpdHMgdmVyc2lvbi1tZXNzYWdlLgorCT4gTWFjaWVqIFcgUm96eWNraSA8bWFjcm9AZHMyLnBnLmdkYS5wbD46CisJKyB1c2UgQUNfQ0hFQ0tfVE9PTCB0byBnZXQgcHJvcGVyIHZhbHVlcyBmb3IgQVIgYW5kIExEIGZvciBjcm9zcworCSAgY29tcGlsaW5nLgorCSsgdXNlICRjcm9zc19jb21waWxpbmcgdmFyaWFibGUgaW4gY29uZmlndXJlIHNjcmlwdCByYXRoZXIgdGhhbgorCSAgY29tcGFyaW5nICRob3N0X2FsaWFzIGFuZCAkdGFyZ2V0IGFsaWFzLCBzaW5jZSAiaG9zdCIgaXMKKwkgIHRyYWRpdGlvbmFsbHkgbWlzdXNlZCBpbiBhdXRvY29uZiB0byByZWZlciB0byB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorCSsgY2hhbmdlIGNvbmZpZ3VyZSAtLWhlbHAgbWVzc2FnZSB0byB1c2UgImJ1aWxkIiByYXRoZXIgdGhhbiAiaG9zdCIKKwkgIHdoZW4gcmVmZXJyaW5nIHRvIHRoZSAtLXdpdGgtYnVpbGQtWFhYIG9wdGlvbnMuCisKKzIwMDIxMjA2CisJKyBtb2RpZnkgQ0ZfR05BVF9WRVJTSU9OIHRvIHByaW50IGduYXRtYWtlJ3MgdmVyc2lvbiwgYW5kIHRvIGFsbG93IGZvcgorCSAgcG9zc2libGUgZ25hdCB2ZXJzaW9ucyBzdWNoIGFzIDMuMiAocmVwb3J0IGJ5IENocmlzIExpbmdhcmQKKwkgIDxjaHJpc0BzdG9ja3dpdGguY28udWs+KS4KKwkrIG1vZGlmeSAjZGVmaW5lJ3MgZm9yIENLSUxMIGFuZCBvdGhlciBkZWZhdWx0IGNvbnRyb2wgY2hhcmFjdGVycyBpbgorCSAgdHNldCB0byB1c2UgdGhlIHN5c3RlbSdzIGRlZmF1bHQgdmFsdWVzIGlmIHRoZXkgYXJlIGRlZmluZWQuCisJKyBjb3JyZWN0IGludGVyY2hhbmdlZCBkZWZhdWx0cyBmb3Iga2lsbCBhbmQgaW50ZXJydXB0IGNoYXJhY3RlcnMKKwkgIGluIHRzZXQsIHdoaWNoIGNhdXNlZCBpdCB0byByZXBvcnQgdW5uZWNlc3NhcmlseSAoRGViaWFuICMxNzE1ODMpLgorCSsgcmVwYWlyIGNoZWNrIGZvciBtaXNzaW5nIEMrKyBjb21waWxlciwgd2hpY2ggaXMgYnJva2VuIGluIGF1dG9jb25mCisJICAyLjV4IGJ5IGhhcmRjb2RpbmcgaXQgdG8gZysrIChyZXBvcnQgYnkgTWFydGluIE1va3JlanMpLgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiAoMjAwMi0xMS0zMCkKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHNraXAgLS13aXRoLXNoYXJlZCwgZXRjLiwgd2hlbiB0aGUKKwkgIC0td2l0aC1saWJ0b29sIG9wdGlvbiBpcyBnaXZlbiwgc2luY2UgdGhleSB3b3VsZCBiZSBpZ25vcmVkIGFueXdheS4KKwkrIGZpeCB0byBhbGxvdyAiY29uZmlndXJlIC0td2l0aC1saWJ0b29sIC0td2l0aC10ZXJtbGliIiB0byBidWlsZC4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHNob3cgdmVyc2lvbiBudW1iZXIgb2YgbGlidG9vbCwgdG8gaGVscAorCSAgd2l0aCBidWcgcmVwb3J0cy4gIGxpYnRvb2wgc3RpbGwgZ2V0cyBjb25mdXNlZCBpZiB0aGUgaW5zdGFsbGVkCisJICBuY3Vyc2VzIGxpYnJhcmllcyBhcmUgb2xkLCBzaW5jZSBpdCBpZ25vcmVzIHRoZSAtTCBvcHRpb25zIGF0IHNvbWUKKwkgIHBvaW50ICh0ZXN0ZWQgd2l0aCBsaWJ0b29sIDEuMy4zIGFuZCAxLjQuMykuCisJKyByZW9yZGVyIGNvbmZpZ3VyZSBzY3JpcHQncyB1cGRhdGluZyBvZiAkQ1BQRkxBR1MgYW5kICRDRkxBR1MgdG8KKwkgIHByZXZlbnQgLUkgb3B0aW9ucyBpbiB0aGUgdXNlcidzIGVudmlyb25tZW50IGZyb20gaW50cm9kdWNpbmcKKwkgIGNvbmZsaWN0cyB3aXRoIHRoZSBidWlsZCAtSSBvcHRpb25zIChtYXkgYmUgcmVsYXRlZCB0byByZXBvcnRzIGJ5CisJICBQYXRyaWNrIEFzaCBhbmQgR2VvcmdlIEdvZmZlKS4KKwkrIHJlbmFtZSB0ZXN0L2RlZmluZV9rZXkuYyB0byB0ZXN0L2RlbW9fZGVma2V5LmMsIHRlc3Qva2V5b2suYyB0bworCSAgdGVzdC9kZW1vX2tleW9rLmMgdG8gYWxsb3cgYnVpbGRpbmcgdGhlc2Ugd2l0aCBsaWJ0b29sLgorCisyMDAyMTEyMworCSsgYWRkIGV4YW1wbGUgcHJvZ3JhbSB0ZXN0L2RlZmluZV9rZXkuYyBmb3IgZGVmaW5lX2tleSgpLgorCSsgYWRkIGV4YW1wbGUgcHJvZ3JhbSB0ZXN0L2tleW9rLmMgZm9yIGtleW9rKCkuCisJKyBhZGQgZXhhbXBsZSBwcm9ncmFtIHRlc3QvaW5zX3dpZGUuYyBmb3Igd2luc193Y2goKSBhbmQgd2luc193c3RyKCkuCisJKyBtb2RpZnkgd2luc193Y2goKSBhbmQgd2luc193c3RyKCkgdG8gaW50ZXJwcmV0IHRhYnMgYnkgdXNpbmcgdGhlCisJICB3aW5zY2goKSBpbnRlcm5hbCBmdW5jdGlvbi4KKwkrIG1vZGlmeSBzZXRjY2hhcigpIHRvIGFsbG93IGZvciB3Y2hhcl90IGlucHV0IHN0cmluZ3MgdGhhdCBoYXZlCisJICBtb3JlIHRoYW4gb25lIHNwYWNpbmcgY2hhcmFjdGVyLgorCisyMDAyMTExNgorCSsgZml4IGEgYm91bmRhcnkgY2hlY2sgaW4gbGliX2luc2NoLmMgKHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluKS4KKwkrIGNoYW5nZSB0eXBlIGZvciAqcHJpbnR3IGZ1bmN0aW9ucyBmcm9tIE5DVVJTRVNfQ09OU1QgdG8gY29uc3QKKwkgIChwcm9tcHRlZCBieSBjb21tZW50IGJ5IFBlZHJvIFBhbGhvdG8gTWF0b3MgPHBscG1AbWVnYS5pc3QudXRsLnB0PiwKKwkgIGJ1dCByZWFsbHkgZnJvbSBhIG5vdGUgb24gWC9PcGVuJ3Mgd2Vic2l0ZSBzdGF0aW5nIHRoYXQgZWl0aGVyIGlzCisJICBhY2NlcHRhYmxlLCBhbmQgdGhlIGxhdHRlciB3aWxsIGJlIHVzZWQgaW4gYSBmdXR1cmUgcmV2aXNpb24pLgorCSsgYWRkIHh0ZXJtLTEwMDIsIHh0ZXJtLTEwMDMgdGVybWluZm8gZW50cmllcyB0byBkZW1vbnN0cmF0ZSBjaGFuZ2VzIGluCisJICBsaWJfbW91c2UuYyAoMjAwMjEwMjYpIC1URAorCSsgYWRkIHNjcmVlbi1iY2UsIHNjcmVlbi1zIGVudHJpZXMgZnJvbSBzY3JlZW4gMy45LjEzIChyZXBvcnQgYnkKKwkgIEFkYW0gTGF6dXIgPHphbEBkZWJpYW4ub3JnPikgLVRECisJKyBhZGQgbXRlcm0gdGVybWluZm8gZW50cmllcyAtVEQKKworMjAwMjExMDkKKwkrIHNwbGl0LW91dCB1c2VmdWwgZnJhZ21lbnRzIGluIHRlcm1pbmZvIGZvciB2dDEwMCBhbmQgdnQyMjAgbnVtZXJpYworCSAga2V5cGFkLCBpLmUuLCB2dDEwMCtrZXlwYWQsIHZ0MTAwK3Bma2V5cywgdnQxMDArZm5rZXlzIGFuZAorCSAgdnQyMjAra2V5cGFkLiAgVGhlIGxhc3QgYXMgZW1iZWRkZWQgaW4gdmFyaW91cyBlbnRyaWVzIGhhZCBrYTMgYW5kCisJICBrYjIgaW50ZXJjaGFuZ2VkIChyZXBvcnQvZGlzY3Vzc2lvbiB3aXRoIExlb25hcmQgZGVuIE90dG9sYW5kZXIKKwkgIDxsZW9uYXJkam9AaGV0bmV0Lm5sPikuCisJKyBhZGQgY2hlY2sgaW4gdGljIGZvciBrZXlwYWRzIGNvbnNpc3RlbnQgd2l0aCB2dDEwMCBsYXlvdXQuCisJKyBpbXByb3ZlIGNoZWNrcyBpbiB0aWMgZm9yIGNvbG9yIGNhcGFiaWxpdGllcworCisyMDAyMTEwMgorCSsgY2hlY2sgZm9yIG1pc3NpbmcvZW1wdHkvaWxsZWdhbCB0ZXJtaW5mbyBuYW1lIGluIF9uY19yZWFkX2VudHJ5KCkKKwkgIChyZXBvcnQgYnkgTWFydGluIE1va3JlanMsIHdoZXJlICRURVJNIHdhcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nKS4KKwkrIHJld3JvdGUgbGliX2luc2NoLmMsIGNvbWJpbmluZyBpdCB3aXRoIGxpYl9pbnNzdHIuYyBzbyBib3RoIGhhbmRsZQorCSAgdGFiIGFuZCBvdGhlciBjb250cm9sIGNoYXJhY3RlcnMgY29uc2lzdGVudGx5IChyZXBvcnQgYnkgUGhpbGlwcGUKKwkgIEJsYWluKS4KKwkrIHJlbW92ZSBhbiAjdW5kZWYgZm9yIEtFWV9FVkVOVCBmcm9tIGN1cnNlcy50YWlsIHVzZWQgaW4gdGhlCisJICBleHBlcmltZW50YWwgTkNVUlNFU19XR0VUQ0hfRVZFTlRTIGZlYXR1cmUuICBUaGUgI3VuZGVmIGNvbmZ1c2VzCisJICBkcGtnJ3MgYnVpbGQgc2NyaXB0IChEZWJpYW4gIzE2NTg5NykuCisJKyBmaXggTUtsaWJfZ2VuLnNoLCB3b3JraW5nIGFyb3VuZCB0aGUgaXJvbmljYWxseSBuYW1lZCBQT1NJWExZX0NPUlJFQ1QKKwkgIGZlYXR1cmUgb2YgR05VIHNlZCA0LjAgKHJlcG9ydGVkIGJ5IEVydmluIE5lbWV0aCA8YWlyd2luQGluZi5ibWUuaHU+KS4KKworMjAwMjEwMjYKKwkrIGltcGxlbWVudCBsb2dpYyBpbiBsaWJfbW91c2UuYyB0byBoYW5kbGUgcG9zaXRpb24gcmVwb3J0cyB3aGljaCBhcmUKKwkgIGdlbmVyYXRlZCB3aGVuIFhGcmVlODYgeHRlcm0gaXMgaW5pdGlhbGl6ZWQgd2l0aCBwcml2YXRlIG1vZGVzIDEwMDIKKwkgIG9yIDEwMDMuICBUaGVzZSBhcmUgcmV0dXJuZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGFzIHRoZQorCSAgUkVQT1JUX01PVVNFX1BPU0lUSU9OIG1hc2ssIHdoaWNoIHdhcyBub3QgaW1wbGVtZW50ZWQuICBUZXN0ZWQgYm90aAorCSAgd2l0aCBuY3Vyc2VzICdhJyBtZW51IChwcm9tcHRlZCBieSBkaXNjdXNzaW9uIHdpdGggTGFycnkgUmllZGVsCisJICA8TGFycnlAUmllZGVsLm9yZz4pLgorCSsgbW9kaWZ5IGxpYl9tb3VzZS5jIHRvIGxvb2sgZm9yICJYTSIgdGVybWluZm8gc3RyaW5nLCB3aGljaCBhbGxvd3MKKwkgIG9uZSB0byBvdmVycmlkZSB0aGUgZXNjYXBlIHNlcXVlbmNlIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgbW91c2UKKwkgIG1vZGUuICBJbiBwYXJ0aWN1bGFyIHRoaXMgd29ya3MgZm9yIFhGcmVlODYgeHRlcm0gcHJpdmF0ZSBtb2RlcworCSAgMTAwMiBhbmQgMTAwMy4gIElmICJYTSIgaXMgbWlzc2luZyAobm90ZSB0aGF0IHRoaXMgaXMgYW4gZXh0ZW5kZWQKKwkgIG5hbWUpLCBsaWJfbW91c2UgdXNlcyB0aGUgY29udmVudGlvbmFsIHByaXZhdGUgbW9kZSAxMDAwLgorCSsgY29ycmVjdCBOT1RfTE9DQUwoKSBtYWNybyBpbiBsaWJfbXZjdXIuYyB0byByZWZlciB0byBzY3JlZW5fY29sdW1ucworCSAgd2hlcmUgaXQgdXNlZCBzY3JlZW5fbGluZXMgKHJlcG9ydCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyBjb3JyZWN0IG1ha2VmaWxlIHJ1bGVzIGZvciB0aGUgY2FzZSB3aGVuIGJvdGggLS13aXRoLWxpYnRvb2wgYW5kCisJICAtLXdpdGgtZ3BtIGFyZSBnaXZlbiAocmVwb3J0IGJ5IE1yIEVfVCA8dHJvbGxAbG9naS5uZXQuYXU+KS4KKwkrIGFkZCBub3RlIHRvIHRlcm1pbmZvIG1hbnBhZ2UgcmVnYXJkaW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuCisJICBzZXRhZi9zZXRhYiBhbmQgc2V0Zi9zZXRiIGNhcGFiaWxpdGllcyAocmVwb3J0IGJ5IFBhdmVsIFJvc2tpbikuCisKKzIwMDIxMDE5CisJKyByZW1vdmUgcmVkdW5kYW50IGluaXRpYWxpemF0aW9uIG9mIFRBQlNJWkUgaW4gbmV3dGVybSgpLCBzaW5jZSBpdCBpcworCSAgYWxyZWFkeSBkb25lIGluIHNldHVwdGVybSgpIChyZXBvcnQgYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgYWRkIHRlc3QvaW5zZXJ0cy5jLCB0byB0ZXN0IHdpbm5zdHIoKSBhbmQgd2luc2NoKCkuCisJKyByZXBsYWNlICdzb3J0JyBpbiBkaXN0Lm1rIHdpdGggc2NyaXB0IHRoYXQgc2V0cyBsb2NhbGUgdG8gUE9TSVguCisJKyB1cGRhdGUgVVJMcyBpbiBhbm5vdW5jZS5odG1sLmluIChwYXRjaCBieSBGcmVkZXJpYyBMIFcgTWV1bmllcikuCisJKyByZW1vdmUgZ2xpYmMgYWRkLW9uIGZpbGVzLCB3aGljaCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCAocmVwb3J0IGJ5CisJICBGcmVkZXJpYyBMIFcgTWV1bmllcikuCisKKzIwMDIxMDEyIDUuMyByZWxlYXNlIGZvciB1cGxvYWQgdG8gZnRwLmdudS5vcmcKKwkrIG1vZGlmeSBpZmRlZidzIGluIGV0aXAuaC5pbiB0byBhbGxvdyB0aGUgZXRpcC5oIGhlYWRlciB0byBjb21waWxlCisJICB3aXRoIGdjYyAzLjIgKHBhdGNoIGJ5IERpbWl0YXIgWmhla292IDxqaW1teUBpcy12bi5iZz4pLgorCSsgYWRkIGxvZ2ljIHRvIHNldHVwdGVybSgpIHRvIG1ha2UgaXQgbGlrZSBpbml0c2NyKCkgYW5kIG5ld3Rlcm0oKSwKKwkgIGJ5IGNoZWNraW5nIGZvciAkTkNVUlNFU19UUkFDRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgZW5hYmxpbmcKKwkgIHRoZSBkZWJ1ZyB0cmFjZSBpbiB0aGF0IGNhc2UuCisJKyBtb2RpZnkgc2V0dXB0ZXJtKCkgdG8gZW5zdXJlIHRoYXQgaXQgaW5pdGlhbGl6ZXMgdGhlIGJhdWRyYXRlLCBmb3IKKwkgIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHRwdXQgKHJlcG9ydCBieSBGcmFuayBIZW5pZ21hbikuCisJKyBtb2RpZnkgZGVmaW5pdGlvbiBvZiBiaXRzIHVzZWQgZm9yIGNvbW1hbmQtbGluZSBhbmQgbGlicmFyeSBkZWJ1ZworCSAgdHJhY2VzIHRvIGF2b2lkIG92ZXJsYXAsIHVzaW5nIG5ldyBkZWZpbml0aW9uIFRSQUNFX1NISUZUIHRvIHJlbGF0ZQorCSAgdGhlIHR3by4KKwkrIGRvY3VtZW50IHRwdXQncyBpbnRlcnByZXRhdGlvbiBvZiBwYXJhbWV0ZXJpemVkIHN0cmluZ3MgYWNjb3JkaW5nIHRvCisJICB3aGV0aGVyIHBhcmFtZXRlcnMgYXJlIGdpdmVuLCBldGMuIChkaXNjdXNzaW9uIHdpdGggUm9iZXJ0IERlIEJhdGgpLgorCisyMDAyMTAwNSBwcmUtcmVsZWFzZQorCSsgY29ycmVjdCB3aW5ud3N0cigpIHRvIGFjY291bnQgZm9yIG5vbi1jaGFyYWN0ZXIgY2VsbHMgZ2VuZXJhdGVkIHdoZW4KKwkgIGEgZG91YmxlLXdpZHRoIGNoYXJhY3RlciBpcyBhZGRlZCAocmVwb3J0IGJ5IE1pY2hhZWwgQmllbmlhCisJICA8bWljaGFlbEB2b3Jsb24ucGluZy5kZT4pLgorCSsgbW9kaWZ5IF9uY192aXN3YnVmMm4oKSB0byBwcm92aWRlIGJldHRlciByZXN1bHRzIHVzaW5nIHdjdG9tYigpLgorCSsgY29ycmVjdCBsb2dpYyBpbiBfbmNfdmFyYXJncygpIHdoaWNoIGJyb2tlIHRyYWNpbmcgb2YgcGFyYW1ldGVycyBmb3IKKwkgIGZvcm1hdHMgc3VjaCBhcyAiJS4qcyIuCisJKyBjb3JyZWN0IHNjYWxlIGZhY3RvciBpbiBsaW51eC1jIGFuZCBsaW51eC1jLW5jIHRlcm1pbmZvIGVudHJpZXMKKwkgIChyZXBvcnQgRmxveWQgRGF2aWRzb24pLgorCSsgY2hhbmdlIHRpYyAtQSBvcHRpb24gdG8gLXQsIGFkZCB0aGUgc2FtZSBvcHRpb24gdG8gaW5mb2NtcCBmb3IKKwkgIGNvbnNpc3RlbmN5LgorCSsgY29ycmVjdCAiJWMiIGltcGxlbWVudGF0aW9uIGluIGxpYl90cGFybS5jLCB3aGljaCBkaWQgbm90IG1hcCBhIG51bGwKKwkgIGNoYXJhY3RlciB0byBhIDEyOCAoY2Y6IDk4MDYyMCkgKHBhdGNoIGJ5IEZyYW5rIEhlbmlnbWFuCisJICA8ZmpoZW5pZ21hbkBtdWQuY2dsLnV3YXRlcmxvby5jYT4pLgorCisyMDAyMDkyOCBwcmUtcmVsZWFzZQorCSsgbW9kaWZ5IE1La2V5X2RlZnMuc2ggdG8gY2hlY2sgZm9yIFBPU0lYIHNvcnQgLWsgb3B0aW9uLCB1c2UgdGhhdCBpZgorCSAgaXQgaXMgZm91bmQsIHRvIGFjY29tbW9kYXRlIG5ld2VyIHV0aWxpdHkgd2hpY2ggZHJvcHBlZCB0aGUKKwkgIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgK251bWJlciBvcHRpb25zIChyZXBvcnRlZCBieSBBbmRyZXkgQQorCSAgQ2hlcm5vdikuCisJKyBtb2RpZnkgbGludXggdGVybWluZm8gZW50cnkgdG8gdXNlIGNvbG9yIHBhbGV0dGUgZmVhdHVyZSBmcm9tCisJICBsaW51eC1jLW5jIGVudHJ5IChjb21tZW50cyBieSBUb21hc3ogV2FzaWFrIGFuZCBGbG95ZCBEYXZpZHNvbikuCisJKyByZXN0b3JlIG9yaWdpbmFsIGNvbG9yIGRlZmluaXRpb25zIGluIGVuZHdpbigpIGlmIGluaXRfY29sb3IoKSB3YXMKKwkgIHVzZWQsIGFuZCByZXN1bWUgdGhvc2UgY29sb3JzIG9uIHRoZSBuZXh0IGRvdXBkYXRlKCkgb3IgcmVmcmVzaCgpCisJICAocmVwb3J0IGJ5IFRvbWFzeiBXYXNpYWsgPHRqd2FzaWFrQGtvbXB1dG9tLmNvbS5wbD4pLgorCSsgaW1wcm92ZSBkZWJ1Zy10cmFjZXMgYnkgbW9kaWZ5aW5nIE1LbGliX2dlbi5zaCB0byBnZW5lcmF0ZSBjYWxscworCSAgdG8gcmV0dXJuQm9vbCgpIGFuZCByZXR1cm5BdHRyKCkuCisJKyBhZGQvdXNlIF9uY192aXNidWZuKCkgYW5kIF9uY192aXN3YnVmbigpIHRvIGxpbWl0IHRoZSBkZWJ1ZyB0cmFjZQorCSAgb2Ygd2FkZG5zdHIoKSBhbmQgc2ltaWxhciBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIHBhcmFtZXRlcnMgYXMgdXNlZC4KKwkrIGFkZC91c2UgX25jX3JldHJhY2VfYm9vbCgpIGFuZCBfbmNfcmV0cmFjZV91bnNpZ25lZCgpLgorCSsgY29ycmVjdCB0eXBlIHVzZWQgYnkgX25jX3JldHJhY2VfY2h0eXBlKCkuCisJKyBhZGQgZGVidWcgdHJhY2VzIHRvIHNvbWUgZnVuY3Rpb25zIGluIGxpYl9tb3VzZS5jCisJKyBtb2RpZnkgbGliX2FkZGNoLmMgdG8gaGFuZGxlIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMuCisJKyBjb3JyZWN0IHBhcmFtZXRlciBvZiBSZW1BdHRyKCkgaW4gbGliX2JrZ2QuYywgd2hpY2ggY2F1c2VkIHRoZSBjKysKKwkgIGRlbW8ncyBib3hlcyB0byBsb3NlIHRoZSBBX0FMVENIQVJTRVQgZmxhZyAoYnJva2VuIGluIDIwMDIwNjI5KS4KKwkrIGNvcnJlY3Qgd2lkdGggY29tcHV0ZWQgaW4gX3RyYWNlZHVtcCgpLCB3aGljaCBkaWQgbm90IGFjY291bnQgZm9yCisJICB0aGUgYXR0cmlidXRlcyAoYnJva2VuIGluIDIwMDEwNjAyKS4KKwkrIG1vZGlmeSB0ZXN0L3RyYWNlbXVuY2ggdG8gcmVwbGFjZSBhZGRyZXNzZXMgZm9yIHdpbmRvd3Mgb3RoZXIgdGhhbgorCSAgY3Vyc2NyLCBuZXdzY3IgYW5kIHN0ZHNjciB3aXRoIHdpbmRvdzAsIHdpbmRvdzEsIGV0Yy4KKworMjAwMjA5MjEgcHJlLXJlbGVhc2UKKwkrIHJlZGlkIGZpeCBmb3IgZWRpdF9tYW4uc2VkIHBhdGguCisJKyB3b3JrYXJvdW5kIGZvciBDeWd3aW4gYnVnIHdoaWNoIG1ha2VzIHN1YnByb2Nlc3Mgd3JpdGVzIHRvIHN0ZG91dAorCSAgcmVzdWx0IGluIGNvcmUgZHVtcC4KKwkrIGRvY3VtZW50ZWQgZ2V0YmVneCgpLCBldGMuCisJKyBtaW5vciBmaXhlcyB0byBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSAnJScgY29uc2lzdGVudGx5IGFzIGEgc2VkCisJICBkZWxpbWl0ZXIgcmF0aGVyIHRoYW4gJ0AnLgorCT4gcGF0Y2ggYnkgUGhpbGlwcGUgQmxhaW46CisJKyBhZGQgY2hlY2sgaW4gbGliX292ZXJsYXkuYyB0byBlbnN1cmUgdGhhdCB0aGUgd2luZG93cyB0byBiZSBtZXJnZWQKKwkgIGFjdHVhbGx5IG92ZXJsYXAsIGFuZCBpbiBjb3B5d2luKCksIGxpbWl0IHRoZSBhcmVhIHRvIGJlIHRvdWNoZWQKKwkgIHRvIHRoZSBsaW5lcyBnaXZlbiBmb3IgdGhlIGRlc3RpbmF0aW9uIHdpbmRvdy4KKworMjAwMjA5MTQgcHJlLXJlbGVhc2UKKwkrIG1vZGlmaWVkIGN1cnNlcy5oIHNvIHRoYXQgaWYgdGhlIHdpZGUtY2hhcmFjdGVyIHZlcnNpb24gaXMgaW5zdGFsbGVkCisJICBvdmVyd3JpdGluZyAvdXNyL2luY2x1ZGUvY3Vyc2VzLmgsIGFuZCBpZiBpdCByZWxpZWQgb24gbGlidXRmOC5oLAorCSAgdGhlbiBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhhdCBoZWFkZXIgZm9yIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQKKwkgIG11c3QgZGVmaW5lIEhBVkVfTElCVVRGOF9ILgorCSsgbW9kaWZ5IHB1dHdpbigpLCBnZXR3aW4oKSBhbmQgZHVwd2luKCkgdG8gYWxsb3cgdGhlbSB0byBvcGVyYXRlIG9uCisJICBwYWRzIChyZXF1ZXN0IGJ5IFBoaWxpcHBlIEJsYWluKS4KKwkrIGNvcnJlY3QgYXR0cmlidXRlLW1lcmdpbmcgaW4gd2JvcmRlcigpLCBicm9rZW4gaW4gMjAwMjAyMTYgKHJlcG9ydAorCSAgYnkgVG9tYXN6IFdhc2lhayA8dGp3YXNpYWtAZ3J1YmFzZWsua29tcHV0b20uY29tLnBsPikuCisJPiBwYXRjaCBieSBQaGlsaXBwZSBCbGFpbjoKKwkrIGNvcnJlY3RlZCBwb3AtY291bnRzIGluIHRwYXJhbV9pbnRlcm5hbCgpIHRvICchJyBhbmQgJ34nIGNhc2VzLgorCSsgdXNlIHNpemVvZihOQ1VSU0VTX0NIX1QpIGluIG9uZSBwbGFjZSB0aGF0IHVzZWQgc2l6ZW9mKGNodHlwZSkuCisJKyByZW1vdmUgc29tZSB1bnVzZWQgdmFyaWFibGVzIGZyb20gbXZjdXIgdGVzdC1kcml2ZXIuCisKKzIwMDIwOTA3IHByZS1yZWxlYXNlCisJKyBjaGFuZ2UgY29uZmlndXJlIHNjcmlwdCB0byBhbGxvdyBpbnN0YWxsIG9mIHdpZGVjLWNoYXJhY3RlcgorCSAgKG5jdXJzZXN3KSBoZWFkZXJzIHRvIG92ZXJ3cml0ZSBub3JtYWwgKG5jdXJzZXMpIGhlYWRlcnMsIHNpbmNlIHRoZQorCSAgbGF0dGVyIGlzIGEgY29tcGF0aWJsZSBzdWJzZXQgb2YgdGhlIGZvcm1lci4KKwkrIGZpeCBwYXRoIG9mIGVkaXRfbWFuLnNlZCBpbiBjb25maWd1cmUgc2NyaXB0LCBuZWVkZWQgdG8gcmVnZW5lcmF0ZQorCSAgaHRtbCBtYW5wYWdlcyBvbiBEZWJpYW4uCisJKyBmaXggbWlzbWF0Y2hlZCBlbnVtcyBpbiB2c3NjYW5mLmMsIHdoaWNoIGNhdXNlZCB3YXJuaW5nIG9uIFNvbGFyaXMuCisJKyB1cGRhdGUgUkVBRE1FLmVteCB0byByZWZsZWN0IGN1cnJlbnQgcGF0Y2ggdXNlZCBmb3IgYXV0b2NvbmYuCisJKyBjaGFuZ2Ugd2ViLSBhbmQgZnRwLXNpdGUgdG8gaW52aXNpYmxlLWlzbGFuZC5uZXQKKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgY2hhbmdlIGNhc2UgZm9yICdQJyBpbiB0cGFyYW1faW50ZXJuYWwoKSB0byBpbmRpY2F0ZSB0aGF0IGl0IHBvcHMKKwkgIGEgdmFyaWFibGUgZnJvbSB0aGUgc3RhY2suCisJKyBjb3JyZWN0IHNlbnNlIG9mIHByZWNpc2lvbiBhbmQgd2lkdGggaW4gcGFyc2VfZm9ybWF0KCksIHRvIGF2b2lkCisJICBjb25mdXNpb24uCisJKyBtb2RpZnkgbGliX3RwYXJtLmMsIGFic29yYiByZWFsbHlfZ2V0X3NwYWNlKCkgaW50byBnZXRfc3BhY2UoKS4KKwkrIG1vZGlmeSBnZXR3aW4oKSBhbmQgZHVwd2luKCkgdG8gY29weSB0aGUgX25vdGltZW91dCwgX2lkbG9rIGFuZAorCSAgX2lkY29rIHdpbmRvdyBmaWVsZHMuCisJKyBiZXR0ZXIgZml4IGZvciBfbmNfc2V0X3R5cGUoKSwgdXNpbmcgdHlwZU1hbGxvYygpLgorCisyMDAyMDkwMSBwcmUtcmVsZWFzZQorCSsgY2hhbmdlIG1pbm9yIHZlcnNpb24gdG8gMywgaS5lLiwgbmN1cnNlcyA1LjMKKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKwkrIHJldGVzdCBidWlsZCB3aXRoIGVhY2ggY29uZmlndXJlIG9wdGlvbjsgbWlub3IgaWZkZWYgZml4ZXMuCisJKyBtYWtlIGtleW5hbWUoKSByZXR1cm4gYSBudWxsIHBvaW50ZXIgcmF0aGVyIHRoYW4gIlVOS05PV04gU1RSSU5HIiB0bworCSAgbWF0Y2ggWFNJLgorCSsgbW9kaWZ5IGhhbmRsaW5nIG9mIHdpZGUgbGluZS1kcmF3aW5nIGNoYXJhY3RlciBmdW5jdGlvbnMgdG8gdXNlIHRoZQorCSAgbm9ybWFsIGxpbmUtZHJhd2luZyBjaGFyYWN0ZXJzIHdoZW4gbm90IGluIFVURi04IGxvY2FsZS4KKwkrIGFkZCBjaGVjay9maXggdG8gY29tcF9wYXJzZS5jIHRvIHN1cHByZXNzIHdhcm5pbmcgYWJvdXQgbWlzc2luZyBhY3NjCisJICBzdHJpbmcuICBUaGlzIGhhcHBlbnMgaW4gY29uZmlndXJhdGlvbnMgd2hlcmUgcmF3IHRlcm1jYXAgaW5mb3JtYXRpb24KKwkgIGlzIHByb2Nlc3NlZDsgdGljIGFscmVhZHkgZG9lcyB0aGlzIGFuZCBvdGhlciBjaGVja3MuCisJKyBtb2RpZnkgdGljJ3MgY2hlY2sgZm9yIGljaC9pY2gxIHZlcnN1cyBybWlyL3NtaXIgdG8gb25seSB3YXJuIGFib3V0CisJICBpY2gxLCB0byBtYXRjaCB4dGVybSBwYXRjaCAjNzAgbm90ZXMuCisJKyBtb3ZlZCBpbmZvcm1hdGlvbiBmb3IgcmlwcGVkLW9mZiBsaW5lcyBpbnRvIFNDUkVFTiBzdHJ1Y3QgdG8gYWxsb3cKKwkgIHVzZSBpbiByZXNpemV0ZXJtKCkuCisJKyBhZGQgZXhwZXJpbWVudGFsIHdnZXRjaF9ldmVudHMoKSwgaWZkZWYnZCB3aXRoIE5DVVJTRVNfV0dFVENIX0VWRU5UUworCSAgKGFkYXB0ZWQgZnJvbSBwYXRjaCBieSBJbHlhIFpha2hhcmV2aWNoIC0gc2VlIG5jdXJzZXMvUkVBRE1FLklaKS4KKwkrIGFtZW5kIGNoZWNrIGluIGtnZXRjaCgpIGZyb20gMjAwMjA4MjQgdG8gbG9vayBvbmx5IGZvciBmdW5jdGlvbi1rZXlzLAorCSAgb3RoZXJ3aXNlIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5vdCByZXNvbHZlZCBwcm9wZXJseS4KKwk+IHBhdGNoIGJ5IFBoaWxpcHBlIEJsYWluOgorCSsgcmVtb3ZlZCByZWR1bmRhbnQgYXNzaWdubWVudCB0byBTUC0+X2NoZWNrZmQgZnJvbSBuZXd0ZXJtKCkuCisJKyBjaGVjayByZXR1cm4tdmFsdWUgb2Ygc2V0dXB0ZXJtKCkgaW4gcmVzdGFydHRlcm0oKS4KKwkrIHVzZSBzaXplb2YoTkNVUlNFU19DSF9UKSBpbiBhIGZldyBwbGFjZXMgdGhhdCB1c2VkIHNpemVvZihjaHR5cGUpLgorCSsgcHJldmVudCBkdXB3aW4oKSBmcm9tIGR1cGxpY2F0aW5nIGEgcGFkLgorCSsgcHJldmVudCBwdXR3aW4oKSBmcm9tIHdyaXRpbmcgYSBwYWQuCisJKyB1c2UgdHlwZVJlYWxsb2MoKSBvciB0eXBlTWFsbG9jKCkgaW4gcHJlZmVyZW5jZSB0byBkaXJlY3QgY2FsbHMgb24KKwkgIF9uY19kb2FsbG9jKCkuCisKKzIwMDIwODI0CisJKyBhZGQgYSBjaGVjayBpbiBrZ2V0Y2goKSBmb3IgY29va2VkIGNoYXJhY3RlcnMgaW4gdGhlIGZpZm8gdG8gYXZvaWQKKwkgIGNhbGxpbmcgZmlmb19wdXNoKCkgd2hlbiBhIEtFWV9SRVNJWkUgaXMgYXZhaWxhYmxlIChyZXBvcnQvYW5hbHlzaXMKKwkgIGJ5IFNhbSBWYXJzaGF2Y2hpayA8bXJzYW1AY291cmllci1tdGEuY29tPikuCisJKyBmaXggYW4gb3Zlcmxvb2tlZCBjYXNlIGZvciBidWd6aWxsYSAjNjgxOTkgKFBoaWxpcHBlIEJsYWluKS4KKwkrIGVuc3VyZSBjbGVhcmVycigpIGlzIGNhbGxlZCBiZWZvcmUgdXNpbmcgZmVycm9yKCkgZS5nLiwgaW4KKwkgIGxpYl9zY3JlZW4uYyAocmVwb3J0IGJ5IFBoaWxpcHBlIEJsYWluKS4KKworMjAwMjA4MTcKKwkrIG1vZGlmeSBsaWJfc2NyZWVuLmMgYW5kIGxpYl9uZXd3aW4uYyB0byBtYWludGFpbiB0aGUgU0NSRUVOLXNwZWNpZmljCisJICBwb2ludGVycyBmb3IgY3Vyc2NyL3N0ZHNjci9uZXdzY3Igd2hlbiBzY3Jfc2F2ZSgpIGFuZCBzY3JfcmVzdG9yZSgpCisJICBtb2RpZnkgdGhlIGdsb2JhbCBjdXJzY3Ivc3Rkc2NyL25ld3NjciB2YXJpYWJsZXMuICBGaXhlcyBSZWRoYXQKKwkgIGJ1Z3ppbGxhICM2ODE5OSBkYXRlZCAyMDAyLTA3LTA3LgorCSsgYWRkIGNoZWNrcyBmb3IgbnVsbCBwb2ludGVyIGluIGNhbGxzIHRvIHRwYXJtKCkgYW5kIHRnb3RvKCkgYmFzZWQgb24KKwkgIEZyZWVCU0QgYnVnIHJlcG9ydC4gIElmIG5jdXJzZXMgd2VyZSBidWlsdCB3aXRoIHRlcm1jYXAgc3VwcG9ydCwgYW5kCisJICB0aGUgZmlyc3QgY2FsbCB0byB0Z290bygpIHdlcmUgYSB6ZXJvLWxlbmd0aCBzdHJpbmcsIHRoZSByZXN1bHQgd291bGQKKwkgIGJlIGEgbnVsbCBwb2ludGVyLCB3aGljaCB3YXMgbm90IGhhbmRsZWQgcHJvcGVybHkuCisJKyBjb3JyZWN0IGEgdHlwbyBpbiB0ZXJtaW5mby5oZWFkLCB3aGljaCBnYXZlIHRoZSBvY3RhbCBjb2RlIGZvciBjb2xvbgorCSAgcmF0aGVyIHRoYW4gY29tbWEuCisJKyByZW1vdmUgdGhlICJ0aWMgLXUiIG9wdGlvbiBmcm9tIDIwMDIwODEwLCBzaW5jZSBpdCBkaWQgbm90IGFjY291bnQKKwkgIGZvciBuZXN0ZWQgInRjPSIgY2xhdXNlcywgYW5kIHdoZW4gdGhhdCB3YXMgYWRkcmVzc2VkLCB3YXMgc3RpbGwKKwkgIHVuc2F0aXNmYWN0b3J5LgorCisyMDAyMDgxMAorCSsgYWRkIHRpYyAtQSBvcHRpb24gdG8gc3VwcHJlc3MgY2FwYWJpbGl0aWVzIHdoaWNoIGFyZSBjb21tZW50ZWQgb3V0CisJICB3aGVuIHRyYW5zbGF0aW5nIHRvIHRlcm1jYXAuCisJKyBhZGQgdGljIC11IG9wdGlvbiB0byBwcm92aWRlIG9sZGVyIGJlaGF2aW9yIG9mICJ0Yz0iIGNsYXVzZXMuCisJKyBtb2RpZmllZCB0aWMgdG8gZXhwYW5kIGFsbCBidXQgdGhlIGZpbmFsICJ0Yz0iIGNsYXVzZSBpbiBhIHRlcm1jYXAKKwkgIGVudHJ5LCB0byBhY2NvbW1vZGF0ZSB0ZXJtY2FwIGxpYnJhcmllcyB3aGljaCBkbyBub3QgaGFuZGxlIG11bHRpcGxlCisJICB0YyBjbGF1c2VzLgorCSsgY29ycmVjdCB0eXBvIGluIGN1cnNfaW5vcHRzLjN4IHJlZ2FyZGluZyBDUzgvQ1M3IHVzYWdlIChyZXBvcnQgYnkKKwkgIFBoaWxpcHBlIEJsYWluKS4KKwkrIHJlbW92ZSBhIGNvdXBsZSBvZiByZWR1bmRhbnQgdXNlcyBvZiBBX0FUVFJJQlVURVMgaW4gZXhwcmVzc2lvbnMKKwkgIHVzaW5nIEF0dHJPZigpLCB3aGljaCBhbHJlYWR5IGluY29ycG9yYXRlcyB0aGF0IG1hc2sgKHJlcG9ydCBieQorCSAgUGhpbGlwcGUgQmxhaW4pLgorCSsgZG9jdW1lbnQgVEFCU0laRSB2YXJpYWJsZS4KKwkrIGFkZCBOQ1VSU0VTX0FTU1VNRURfQ09MT1JTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0byBhbGxvdyB1c2VycyB0bworCSAgb3ZlcnJpZGUgY29tcGlsZWQtaW4gZGVmYXVsdCBibGFjay1vbi13aGl0ZSBhc3N1bXB0aW9uIHVzZWQgaW4KKwkgIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpLgorCSsgY29ycmVjdCBhbiBvZmYtYnktb25lIGNvbXBhcmlzb24gYWdhaW5zdCBtYXhfY29sb3JzIGluIENPTE9SRkdCRworCSAgbG9naWMuCisJKyBjb3JyZWN0IGEgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvdW5kIGJ5IHZhbGdyaW5kIChyZXBvcnRlZCBieQorCSAgT2xhZiBCdWRkZW5oYWdlbiA8b2xhZkJ1ZGRlbmhhZ2VuQHdlYi5kZT4pLgorCSsgbW9kaWZpZWQgd3Jlc2l6ZSgpIHRvIGVuc3VyZSB0aGF0IGEgZmFpbGVkIHJlYWxsb2Mgd2lsbCBub3QgY29ycnVwdAorCSAgdGhlIHdpbmRvdyBzdHJ1Y3R1cmUsIGFuZCB0byBtYWtlIHN1YndpbmRvd3MgZml0IHdpdGhpbiB0aGUgcmVzaXplZAorCSAgd2luZG93IChjb21wbGV0ZXMgRGViaWFuICM4NzY3OCwgIzEwMTY5OSkKKworMjAwMjA4MDMKKwkrIGZpeCBhbiBvZmYtYnktb25lIGluIGxpYl9wYWQuYyBjaGVjayBmb3IgbGltaXRzIG9mIHBhZCAocGF0Y2ggYnkKKwkgIFBoaWxpcHBlIEJsYWluKS4KKwkrIHJldmlzZSBsb2dpYyBmb3IgQmVPUyBpbiBsaWJfdHdhaXQuYyBhbHRlcmVkIGluIDIwMDExMDEzIHRvIHJlc3RvcmUKKwkgIGxvZ2ljIHVzZWQgYnkgbGliX2dldGNoLmMncyBzdXBwb3J0IGZvciBHUE0gb3IgRU1YIG1vdXNlIChyZXBvcnQgYnkKKwkgIFBoaWxpcHBlIEJsYWluKQorCSsgcmVtb3ZlIE5DVVJTRVNfQ09OU1QgZnJvbSBzZXZlcmFsIHByb3RvdHlwZXMgaW4gY3Vyc2VzLndpZGUsIHRvIG1ha2UKKwkgIHRoZSAtLWVuYWJsZS1jb25zdCAtLWVuYWJsZS13aWRlYyBjb25maWd1cmUgb3B0aW9ucyB0byB3b3JrIHRvZ2V0aGVyCisJICAocmVwb3J0IGJ5IEdlb3JnZSBHb2ZmZSA8Z3Jnb2ZmZUB5YWhvby5jb20+KS4KKworMjAwMjA3MjcKKwkrIGZpbmlzaCBuby1sZWFrIGNoZWNraW5nIGluIGNhcmRmaWxlLmMsIHVzaW5nIHRoaXMgZm9yIHRlc3RpbmcgY2hhbmdlcworCSAgdG8gcmVzaXpldGVybSgpLgorCSsgc2ltcGxpZnkgX25jX2ZyZWVhbGwoKSB1c2luZyBkZWxzY3JlZW4oKS4KKworMjAwMjA3MjAKKwkrIGNoZWNrIGVycm9yLXJldHVybiBmcm9tIF9uY19zZXRfdHR5X21vZGUoKSBpbiBfbmNfaW5pdHNjcigpIGFuZAorCSAgcmVzZXRfcHJvZ19tb2RlKCkgKHJlcG9ydC9wYXRjaCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyByZWdlbmVyYXRlIGNvbmZpZ3VyZSB1c2luZyBwYXRjaCBmb3IgYXV0b2NvbmYgMi41MiwgdG8gYWRkcmVzcworCSAgcHJvYmxlbSB3aXRoIGlkZW50aWZ5aW5nIEMrKyBib29sIHR5cGUuCisJKyBjb3JyZWN0L2ltcHJvdmUgbG9naWMgdG8gcHJvZHVjZSBhbiBleGl0IHN0YXR1cyBmb3IgZXJyb3JzIGluIHRwdXQsCisJICB3aGljaCBkaWQgbm90IGV4aXQgd2l0aCBhbiBlcnJvciB3aGVuIHRvbGQgdG8gcHV0IGEgc3RyaW5nIG5vdCBpbiB0aGUKKwkgIGN1cnJlbnQgdGVybWluZm8gZW50cnkgKHJlcG9ydCBieSBEYXZpZCBHb21leiA8ZGF2aWRAcGxleWFkZXMubmV0PikuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBBQ19PVVRQVVQoKSBjYWxsIHRvIHdvcmsgYXJvdW5kIGRlZmVjdCBpbgorCSAgYXV0b2NvbmYgMi41MiB3aGljaCBhZGRzIGFuIGlmZGVmJ2QgaW5jbHVkZSB0byB0aGUgZ2VuZXJhdGVkCisJICBjb25maWd1cmUgZGVmaW5pdGlvbnMuCisJKyByZW1vdmUgZnN0YXQoKSBjaGVjayBmcm9tIHNjcl9pbml0KCksIHdoaWNoIGFsc28gZml4ZXMgYSBtaXNzaW5nCisJICBpbmNsdWRlIGZvciA8c3lzL3N0YXQuaD4gZnJvbSAyMDAyMDcxMyAocmVwb3J0ZWQgYnkgRGF2aWQgRWxsZW1lbnQsCisJICBmaXggc3VnZ2VzdGVkIGJ5IFBoaWxpcHBlIEJsYWluKS4KKwkrIHVwZGF0ZSBjdXJzX3NjYW53LjN4IG1hbnBhZ2UgdG8gbm90ZSB0aGF0IFhTSSBjdXJzZXMgZGlmZmVycyBmcm9tCisJICBTVnI0IGN1cnNlczogcmV0dXJuLXZhbHVlcyBhcmUgaW5jb21wYXRpYmxlLgorCSsgY29ycmVjdCBzZXZlcmFsIHByb3RvdHlwZXMgaW4gbWFucGFnZXMgd2hpY2ggdXNlZCBjb25zdAorCSAgaW5jb25zaXN0ZW50bHkgd2l0aCB0aGUgY3Vyc2VzLmggZmlsZSwgYW5kIHJlbW92ZWQgc3B1cmlvdXMgY29uc3QncworCSAgaW4gYSBmZXcgcGxhY2VzIGZyb20gY3Vyc2VzLmgsIGUuZy4sIGZvciB3YmtnZCgpIChyZXBvcnQgYnkgR2xlbm4KKwkgIE1heW5hcmQgPGdsZW5uQHpld3Qub3JnPikuCisJKyBjaGFuZ2UgaW50ZXJuYWwgdHlwZSB1c2VkIGJ5IHRwYXJtKCkgdG8gbG9uZywgdG8gd29yayB3aXRoIExQNjQgbW9kZWwuCisJKyBtb2RpZnkgbmNfYWxsb2MuaCB0byBhbGxvdyBidWlsZGluZyB3aXRoIGcrKywgZm9yIHRlc3RpbmcuCisKKzIwMDIwNzEzCisJKyBhZGQgcmVzaXplLWhhbmRsaW5nIHRvIGNhcmRmaWxlLmMgdGVzdCBwcm9ncmFtLgorCSsgYWx0ZXJlZCByZXNpemV0ZXJtKCkgdG8gYXZvaWQgaGF2aW5nIGl0IGZhaWwgd2hlbiBhIGNoaWxkIHdpbmRvdworCSAgY2Fubm90IGJlIHJlc2l6ZWQgYmVjYXVzZSBpdCB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdHMgcGFyZW50LiAgKE1vcmUKKwkgIHdvcmsgbXVzdCBiZSBkb25lIG9uIHRoaXMsIGJ1dCBpdCB3b3JrcyB3ZWxsIGVub3VnaCB0byBpbnRlZ3JhdGUpLgorCSsgaW1wcm92ZSBhIGxpbWl0LWNoZWNrIGluIGxpYl9yZWZyZXNoLmMKKwkrIHJlbW92ZSBjaGVjayBpbiBsaWJfc2NyZWVuLmMgcmVsYXRpbmcgZHVtcHRpbWUgdG8gZmlsZSdzIG1vZGlmaWNhdGlvbgorCSAgdGltZXMsIHNpbmNlIHRoYXQgd291bGQgbm90IG5lY2Vzc2FyaWx5IHdvcmsgZm9yIHJlbW90ZWx5IG1vdW50ZWQKKwkgIGZpbGVzeXN0ZW1zLgorCSsgbW9kaWZ5IGxydGVzdCB0byBzaW1wbGlmeSBkZWJ1Z2dpbmcgY2hhbmdlcyB0byByZXNpemV0ZXJtLCBlLmcuLAorCSAgdC9UIGNvbW1hbmRzIHRvIGVuYWJsZS9kaXNhYmxlIHRyYWNpbmcuCisJKyB1cGRhdGVkIHN0YXR1cyBvZiBtdWx0aWJ5dGUgc3VwcG9ydCBpbiBUTy1ETy4KKwkrIHVwZGF0ZSBjb250YWN0IGluZm8gaW4gc291cmNlLWZpbGVzIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCisyMDAyMDcwNgorCSsgYWRkIENhcHMuaHB1eDExLCBhcyBhbiBleGFtcGxlLgorCSsgbW9kaWZ5IHZlcnNpb25fZmlsdGVyKCksIHVzZWQgdG8gaW1wbGVtZW50IC1SIG9wdGlvbiBmb3IgdGljIGFuZAorCSAgaW5mb2NtcCwgdG8gdXNlIGNvbXB1dGVkIGFycmF5IG9mZnNldHMgYmFzZWQgb24gdGhlIENhcHMuKiBmaWxlIHdoaWNoCisJICBpcyBhY3R1YWxseSBjb25maWd1cmVkLCByYXRoZXIgdGhhbiBjb25zdGFudHMgd2hpY2ggY29ycmVzcG9uZCB0bworCSAgdGhlIENhcHMgZmlsZS4KKwkrIHJlb3JnYW5pemVkIGxpYl9yYXcuYyB0byBhdm9pZCB1cGRhdGluZyBTUCBhbmQgY3VyX3Rlcm0gc3RhdGUgaWYgdGhlCisJICBmdW5jdGlvbnMgZmFpbCAocmVwb3J0ZWQgYnkgUGhpbGlwcGUgQmxhaW4pLgorCSsgYWRkIC1XdW5kZWYgdG8gZ2NjIHdhcm5pbmdzLCBhZGp1c3QgYSBmZXcgaWZkZWYncyB0byBhY2NvbW1vZGF0ZSBnY2MuCisKKzIwMDIwNjI5CisJKyBjb3JyZWN0IHBhcmFtZXRlcnMgdG8gc2V0Y2NoYXIoKSBpbiBuY3Vyc2VzLmMgKGNmOiAyMDAyMDQwNikuCisJKyBzZXQgbG9jYWxlIGluIG1vc3QgdGVzdCBwcm9ncmFtcyAodmlldy5jIGFuZCBuY3Vyc2VzLmMgd2VyZSB0aGUKKwkgIG9ubHkgb25lcykuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtYnVpbGQtY3BwZmxhZ3MgKHJlcG9ydCBieSBNYWtzaW0gQQorCSAgTmlrdWxpbiA8TS5BLk5pa3VsaW5AaW5wLm5zay5zdT4pLgorCSsgY29ycmVjdCBhIHR5cG8gaW4gd2lkZS1jaGFyYWN0ZXIgbG9naWMgZm9yIGxpYl9ia2duZC5jIChQaGlsaXBwZQorCSAgQmxhaW4pLgorCSsgbW9kaWZ5IGxpYl93YWNzLmMgdG8gbm90IGNhbmNlbCB0aGUgYWNzYywgc21hY3MsIHJtYWNzIHN0cmluZ3Mgd2hlbgorCSAgaW4gVVRGLTggbG9jYWxlLiAgV2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zIHVzZSBVbmljb2RlIHZhbHVlcywgd2hpbGUKKwkgIG5hcnJvdy1jaGFyYWN0ZXIgZnVuY3Rpb25zIHVzZSB0aGUgdGVybWluZm8gZGF0YS4KKwkrIGZpeCBhIGNvdXBsZSBvZiBwbGFjZXMgaW4gQWRhOTUvc2FtcGxlcyB3aGljaCBkaWQgbm90IGNvbXBpbGUgd2l0aAorCSAgZ25hdCAzLjE0CisJKyBtb2RpZnkgbWtpbnN0YWxsZGlycyBzbyB0aGUgRE9TLXBhdGhuYW1lIGNhc2UgaXMgbG9jYWxlLWluZGVwZW5kZW50LgorCSsgZml4IGxvY2FsZSBwcm9ibGVtIGluIE1LbGliX2dlbi5zaCBieSBmb3JjaW5nIHJlbGF0ZWQgdmFyaWFibGVzIHRvCisJICBQT1NJWCAoQyksIHVzaW5nIHNhbWUgYXBwcm9hY2ggYXMgYXV0b2NvbmYgKHNldCB2YXJpYWJsZXMgb25seSBpZgorCSAgdGhleSB3ZXJlIHNldCBiZWZvcmUpLiAgVXBkYXRlIE1LdGVybWluZm8uc2ggYW5kIE1LdGVybXNvcnQuc2ggdG8KKwkgIG1hdGNoLgorCisyMDAyMDYyMgorCSsgYWRkIGNoYXJzZXQgdG8gZ2VuZXJhdGVkIGh0bWwuCisJKyBhZGQgbXZ0ZXJtIGVudHJ5LCBhZGFwdGVkIGZyb20gYSBGcmVlQlNEIGJ1Zy1yZXBvcnQgYnkgRGFuaWVsIFJ1ZHkKKwkgIDxkY3J1ZHlAcGFjYmVsbC5uZXQ+IC1URAorCSsgYWRkIHJ4dnQtMTZjb2xvciwgaWJtKzE2Y29sb3IgZW50cmllcyAtVEQKKwkrIG1vZGlmeSBjaGVjayBpbiAtLWRpc2FibGUtb3ZlcndyaXRlIG9wdGlvbiBzbyB0aGF0IGl0IGlzIHVzZWQgYnkKKwkgIGRlZmF1bHQgdW5sZXNzIHRoZSAtLXByZWZpeC8kcHJlZml4IHZhbHVlIGlzIG5vdCAvdXNyLCBpbiBhdHRlbXB0IHRvCisJICB3b3JrIGFyb3VuZCBwYWNrYWdlcnMsIGUuZy4sIGZvciBTdW4ncyBmcmVld2FyZSwgd2hvIGRvIG5vdCByZWFkIHRoZQorCSAgSU5TVEFMTCBub3Rlcy4KKworMjAwMjA2MTUKKwkrIG1vZGlmeSB3Z2V0Y2goKSB0byBhbGxvdyByZXR1cm5pbmcgdW5nZXRjaCdkIEtFWV9SRVNJWkUgYXMgYSBmdW5jdGlvbgorCSAga2V5IGNvZGUgaW4gZ2V0X3djaCgpLgorCSsgZXh0ZW5kZWQgcmVzaXplLWhhbmRsaW5nIGluIHRlc3QvbmN1cnNlcyAnYScgbWVudSB0byB0aGUgZW50aXJlCisJICBzdGFjayBvZiB3aW5kb3dzIGNyZWF0ZWQgd2l0aCAndycgY29tbWFuZHMuCisJKyBpbXByb3ZlICRDT0xPUkZHQkcgZmVhdHVyZSBieSBpbnRlcnByZXRpbmcgYW4gb3V0LW9mLXJhbmdlIGNvbG9yCisJICB2YWx1ZSBhcyBhbiBTR1IgMzkgb3IgNDksIGZvciBmb3JlZ3JvdW5kL2JhY2tncm91bmQgcmVzcGVjdGl2ZWx5LgorCSsgY29ycmVjdCBhIHR5cG8gaW4gY29uZmlndXJlIC0tZW5hYmxlLWNvbG9yZmdiZyBvcHRpb24sIGFuZCBtb3ZlIGl0CisJICB0byB0aGUgZXhwZXJpbWVudGFsIHNlY3Rpb24gKGNmOiAyMDAxMTIwOCkuCisKKzIwMDIwNjAxCisJKyBhZGQgbG9naWMgdG8gZHVtcF9lbnRyeS5jIHRvIHJlbW92ZSBmdW5jdGlvbi1rZXkgZGVmaW5pdGlvbnMgdGhhdCBkbworCSAgbm90IGZpdCBpbnRvIHRoZSAxMDIzLWJ5dGUgbGltaXQgZm9yIGdlbmVyYXRlZCB0ZXJtY2Fwcy4gIFRoaXMgbWFrZXMKKwkgIGhkczIwMCBmaXQuCisJKyBtb3JlIGltcHJvdmVtZW50cyB0byB0aWMncyB3YXJuaW5ncywgaW5jbHVkaW5nIGxvZ2ljIHRvIGlnbm9yZQorCSAgZGlmZmVyZW5jZXMgYmV0d2VlbiBkZWxheSB2YWx1ZXMgaW4gc2dyIHN0cmluZ3MuCisJKyBtb3ZlIGRlZmluaXRpb24gb2YgS0VZX1JFU0laRSBpbnRvIE1La2V5ZGVmcy5zaCBzY3JpcHQsIHRvCisJICBhY2NvbW1vZGF0ZSBDYXBzLm9zZjFyNSB3aGljaCBpbnRyb2R1Y2VkIGEgY29uZmxpY3RpbmcgZGVmaW5pdGlvbi4KKworMjAwMjA1MjUKKwkrIGFkZCBzaW1wbGUgcmVzaXplLWhhbmRsaW5nIGluIHRlc3QvbmN1cnNlcy5jICdhJyBtZW51LgorCSsgZml4ZXMgaW4ga2V5bmFtZSgpIGFuZCBfdHJhY2VjaGFyKCkgdG8gaGFuZGxlIG5lZ2F0aXZlIHZhbHVlcy4KKwkrIG1ha2UgdGljJ3Mgd2FybmluZ3MgYWJvdXQgbWlzbWF0Y2hlcyBpbiBzZ3Igc3RyaW5ncyBlYXNpZXIgdG8gZm9sbG93LgorCSsgY29ycmVjdCB0aWMgY2hlY2tzIGZvciBudW1iZXIgb2YgcGFyYW1ldGVycyBpbiBzbWdicCBhbmQgc21nbHAuCisJKyBpbXByb3ZlIHNjb2Fuc2kgdGVybWluZm8gZW50cnksIGFuZCBhZGQgc2NvYW5zaS1uZXcgZW50cnkgLVRECisJKyBhZGQgcGN2dDI1LWNvbG9yIHRlcm1pbmZvIGVudHJ5IC1URAorCSsgYWRkIGtmMTMta2Y0OCBzdHJpbmdzIHRvIGNvbnMyNXcgdGVybWluZm8gZW50cnkgKHJlcG9ydGVkIGJ5IFN0ZXBoZW4KKwkgIEh1cmQgPGRldWNlQGxvcmRsZWdhY3kub3JnPiBpbiBuZXdzZ3JvdXAgbHVja3kuZnJlZWJzZC5idWdzKSAtVEQKKwkrIGFkZCBlbnRyeXBvaW50IF9uY190cmFjZV90dHltb2RlKCksIHVzZSB0aGlzIHRvIGRpc3Rpbmd1aXNoIHRoZQorCSAgT3R0eWIgYW5kIE50dHliIG1lbWJlcnMgb2YgdGVybWluYWwgKGFrYSBjdXJfdGVybSksIGZvciB0cmFjaW5nLgorCisyMDAyMDUyMworCSsgY29ycmVjdCBhbmQgc2ltcGxpZnkgbG9naWMgZm9yIGxpYl9wYWQuYyBjaGFuZ2UgaW4gMjAwMjA1MTggKHJlcG9ydGVkCisJICBieSBNaWtlIENhc3RsZSkuCisKKzIwMDIwNTE4CisJKyBmaXggbGliX3BhZC5jIGZvciBjYXNlIG9mIGRyYXdpbmcgYSBkb3VibGUtd2lkdGggY2hhcmFjdGVyIHdoaWNoCisJICBmYWxscyBvZmYgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBwYWQgKHBhdGNoIGJ5IEtyaWFuZyBMZXJkc3V3YW5ha2lqCisJICA8bGVyZHN1d2FAdXNlcnMuc291cmNlZm9yZ2UubmV0PikKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHdvcmsgYXJvdW5kIGJyb2tlbiBnY2MgMy4xICItLXZlcnNpb24iCisJICBvcHRpb24sIHdoaWNoIGFkZHMgdW5uZWNlc3NhcnkgdHJhc2ggdG8gdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbi4KKwkrIGFkanVzdCBpZmRlZidzIGluIGNhc2UgU0lHV0lOQ0ggaXMgbm90IGRlZmluZWQsIGUuZy4sIHdpdGggREpHUFAKKwkgIChyZXBvcnRlZCBieSBCZW4gRGVja2VyIDxkZWNrZXJiZW5AZnJlZW5ldC5kZT4pLgorCisyMDAyMDUxMQorCSsgaW1wbGVtZW50IHZpZF9wdXRzKCksIHZpZF9hdHRyKCksIHRlcm1fYXR0cnMoKSBiYXNlZCBvbiB0aGUgbmFycm93LQorCSAgY2hhcmFjdGVyIHZlcnNpb25zIGFzIHdlbGwuCisJKyBpbXBsZW1lbnQgZXJhc2V3Y2hhcigpLCBraWxsd2NoYXIoKSBiYXNlZCBvbiBlcmFzZWNoYXIoKSBhbmQKKwkgIGtpbGxjaGFyKCkuCisJKyBtb2RpZnkgZXJhc2VjaGFyKCkgYW5kIGtpbGxjaGFyKCkgdG8gcmV0dXJuIEVSUiBpZiB0aGUgdmFsdWUgd2FzCisJICBWRElTQUJMRS4KKwkrIGNvcnJlY3QgYSBidWcgaW4gd3Jlc2l6ZSgpIGluIGhhbmRsaW5nIHN1YndpbmRvd3MgKGJhc2VkIG9uIHBhdGNoIGJ5CisJICBSb2dlciBHYW1tYW5zIDxyZ2FtbWFuc0Bjb21wdXRlci1zdXJnZXJ5LmNvLnVrPiwgcmVwb3J0IGJ5IFNjb3R0IEJlY2sKKwkgIDxzY290dEBnb3NzYW1lci10aHJlYWRzLmNvbT4pLgorCSsgaW1wcm92ZSB0ZXN0L3RjbG9jay5jIGJ5IG1ha2luZyB0aGUgc2Vjb25kLWhhbmQgdXBkYXRlIG1vcmUgb2Z0ZW4KKwkgIGlmIGdldHRpbWVvZmRheSgpIGlzIGF2YWlsYWJsZS4KKworMjAwMjA0MjkKKwkrIHdvcmthcm91bmQgZm9yIFNvbGFyaXMgc2VkIHdpdGggTUtsaWJfZ2VuLnNoIChyZXBvcnRlZCBieSBBbmR5CisJICBUc291bGFkemUgPGFuZHl0QG15cG9pbnRzLmNvbT4pLgorCisyMDAyMDQyNworCSsgY29ycmVjdCByZXR1cm4tdmFsdWUgZnJvbSBnZXRjY2hhcigpLCBtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoCisJICBTb2xhcmlzIGFuZCBUcnU2NC4KKwkrIHJlb3JkZXIgbG9vcHMgdGhhdCBnZW5lcmF0ZSBtYWtlZmlsZSBydWxlcyBmb3IgZGlmZmVyZW50IG1vZGVscyB2cworCSAgc3Vic2V0cyBzbyBjb25maWd1cmUgLS13aXRoLXRlcm1saWIgd29ya3MgYWdhaW4uICBUaGlzIHdhcyBicm9rZW4gYnkKKwkgIGxvZ2ljIGFkZGVkIHRvIGF2b2lkIGR1cGxpY2F0ZSBydWxlcyBpbiBjaGFuZ2VzIHRvIGFjY29tbW9kYXRlIGN5Z3dpbgorCSAgZGxsJ3MgKHJlcG9ydGVkIGJ5IEdlb3JnZS5SLkdvZmZlQHNlYWdhdGUuY29tKS4KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKworMjAwMjA0MjEKKwkrIG1vZGlmeSBpZmRlZidzIGluIHdyaXRlX2VudHJ5LmMgdG8gYWxsb3cgdXNlIG9mIHN5bWJvbGljIGxpbmtzIG9uCisJICBwbGF0Zm9ybXMgd2l0aCBubyBoYXJkIGxpbmtzLCBlLmcuLCBCZU9TLgorCSsgbW9kaWZ5IGEgZmV3IGluY2x1ZGVzIHRvIGFsbG93IGNvbXBpbGUgd2l0aCBCZU9TLCB3aGljaCBoYXMgc3RkYm9vbC5oCisJICB3aXRoIGEgY29uZmxpY3RpbmcgZGVmaW5pdGlvbiBmb3IgJ2Jvb2wnIHZlcnN1cyBpdHMgT1MuaCBkZWZpbml0aW9uLgorCSsgYW1lbmQgTUtsaWJfZ2VuLnNoIHRvIHdvcmsgd2l0aCBnYXdrLCB3aGljaCBkZWZpbmVzICdmdW5jJyBhcyBhbgorCSAgYWxpYXMgZm9yICdmdW5jdGlvbicuCisKKzIwMDIwNDIwCisJKyBjb3JyZWN0IGZvcm0gb2YgcHJvdG90eXBlIGZvciByaXBvZmZsaW5lKCkuCisJKyBtb2RpZnkgTUtsaWJfZ2VuLnNoIHRvIHRlc3QgdGhhdCBhbGwgZnVuY3Rpb25zIG1hcmtlZCBhcyBpbXBsZW1lbnRlZAorCSAgY2FuIGJlIGxpbmtlZC4KKworMjAwMjA0MTMKKwkrIGFkZCBtYW5wYWdlczogY3Vyc19nZXRfd3N0ci4zeCwgY3Vyc19pbl93Y2hzdHIuM3gKKwkrIGltcGxlbWVudCB3Z2V0bl93c3RyKCkuCisJKyBpbXBsZW1lbnQgd2luX3djaG5zdHIoKS4KKwkrIHJlbW92ZSByZWRlZmluaXRpb24gb2YgdW5nZXRfd2NoKCkgaW4gbGliX2dlbi5jIChyZXBvcnRlZCBieQorCSAgSnVuZ3NoaWsgU2hpbiA8anNoaW5AanRhbi5jb20+KS4KKworMjAwMjA0MDYKKwkrIG1vZGlmaWVkIHNldmVyYWwgb2YgdGhlIHRlc3QgcHJvZ3JhbXMgdG8gYWxsb3cgdGhlbSB0byBjb21waWxlIHdpdGgKKwkgIHZlbmRvciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLCBlLmcuLCBTb2xhcmlzLCBBSVggLVRECisKKzIwMDIwMzIzCisJKyBtb2RpZmllZCB0ZXN0L2NvbmZpZ3VyZSB0byBhbGxvdyBjb25maWd1cmluZyBhZ2FpbnN0IG5jdXJzZXN3LgorCSsgY2hhbmdlIFdBQ1NfeHh4IGRlZmluaXRpb24gdG8gdXNlIGFkZHJlc3MsIHRvIHdvcmsgbGlrZSBUcnU2NCBjdXJzZXMuCisKKzIwMDIwMzE3CisJKyBhZGQgJ2UnIGFuZCAnbScgdG9nZ2xlcyB0byAnYScsICdBJyB0ZXN0cyBpbiBuY3Vyc2VzLmMgdG8gZGVtb25zdHJhdGUKKwkgIGVmZmVjdCBvZiBlY2hvL25vZWNobyBhbmQgbWV0YSBtb2Rlcy4KKwkrIGFkZCAnQScgdGVzdCB0byBuY3Vyc2VzLmMgdG8gZGVtb25zdHJhdGUgd2dldF93Y2goKSBhbmQgcmVsYXRlZAorCSAgZnVuY3Rpb25zLgorCSsgYWRkIG1hbnBhZ2U6IGN1cnNfZ2V0X3djaC4zeAorCSsgaW1wbGVtZW50IHVuZ2V0X3djaCgpLgorCSsgaW1wbGVtZW50IHdnZXRfd2NoKCkuCisKKzIwMDIwMzEwCisJKyByZWdlbmVyYXRlZCBodG1sIG1hbnBhZ2VzLgorCSsgYWRkIG1hbnBhZ2VzOiBjdXJzX2luX3djaC4zeCwgY3Vyc19pbnNfd2NoLjN4LCBjdXJzX2luc193c3RyLjN4CisJKyBpbXBsZW1lbnQgd2luc193Y2goKS4KKwkrIGltcGxlbWVudCB3aW5fd2NoKCkuCisJKyBpbXBsZW1lbnQgd2luc19ud3N0cigpLCB3aW5zX3dzdHIoKS4KKworMjAwMjAzMDkKKwkrIGFkZCBtYW5wYWdlczogY3Vyc19hZGR3c3RyLjN4LCBjdXJzX3dpbndzdHIuM3gKKwkrIGltcGxlbWVudCB3aW5ud3N0cigpLCB3aW53c3RyKCkuCisKKzIwMDIwMjIzCisJKyBhZGQgbWFucGFnZXM6IGN1cnNfYWRkX3djaHN0ci4zeCwgY3Vyc19ia2dybmQuM3gKKwkrIGRvY3VtZW50IHd1bmN0cmwsIGtleV9uYW1lLgorCSsgaW1wbGVtZW50IGtleV9uYW1lKCkuCisJKyByZW1vdmUgY29uc3QncyBpbiBsaWJfYm94LmMgaW5jb3JyZWN0bHkgbGVmdG92ZXIgYWZ0ZXIgc3BsaXR0aW5nIG9mZgorCSAgbGliX2JveF9zZXQuYworCSsgdXBkYXRlIGxsaWItbG5jdXJzZXMsIGxsaWItbmN1cnNlc3csIGZpeCBjb25maWd1cmUgc2NyaXB0IHJlbGF0ZWQgdG8KKwkgIHRoZXNlLgorCisyMDAyMDIxOAorCSsgcmVtb3ZlIHF1b3RlcyBvbiAiU1lOT1BTSVMiIGluIG1hbi9jdXJzX2JveF9zZXQuM3gsIHdoaWNoIHJlc3VsdGVkCisJICBpbiBzcHVyaW91cyBzeW1saW5rcyBvbiBpbnN0YWxsLgorCisyMDAyMDIxNgorCSsgaW1wbGVtZW50IHdobGluZV9zZXQoKSwgd3ZsaW5lX3NldCgpLCBhZGQgbWFucGFnZSBjdXJzX2JvcmRlcl9zZXQuCisJKyBhZGQgc3VidGVzdCAnYicgdG8gJ0YnIGFuZCAnZicgaW4gbmN1cnNlcy5jIHRvIGRlbW9uc3RyYXRlIHVzZSBvZgorCSAgYm94KCkgYW5kIGJveF9zZXQoKSBmdW5jdGlvbnMuCisJKyBhZGQgc3VidGVzdCAndScgdG8gJ0YnIGluIG5jdXJzZXMuYywgdG8gZGVtb25zdHJhdGUgdXNlIG9mIGFkZHN0cigpCisJICBnaXZlbiBVVEYtOCBzdHJpbmcgZXF1aXZhbGVudHMgb2YgV0FDU194eHggc3ltYm9scy4KKwkrIG1pbm9yIGZpeGVzIHRvIHNldmVyYWwgbWFucGFnZXMgYmFzZWQgb24gZ3JvZmYgLXd3IG91dHB1dC4KKwkrIGFkZCBkZXNjcmlwdGlvbnMgb2YgZXh0ZXJuYWwgdmFyaWFibGVzIG9mIHRlcm1jYXAgaW50ZXJmYWNlIHRvCisJICB0aGUgbWFucGFnZSAocmVwb3J0IGJ5IEJydWNlIEV2YW5zIDxiZGVAemV0YS5vcmcuYXU+KS4KKwk+IHBhdGNoZXMgYnkgQmVybmhhcmQgUm9zZW5rcmFlbnplcjoKKwkrIGNvcnJlY3QgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtYm9vbCwgd2hpY2ggd2FzIGV4ZWN1dGVkIGFzCisJICAtLXdpdGgtb3NwZWVkLgorCSsgYWRkIHF1b3RlcyBmb3IgcGFyYW1ldGVycyBvZiAtLXdpdGgtYm9vbCBhbmQgLS13aXRoLW9zcGVlZCBjb25maWd1cmUKKwkgIG9wdGlvbnMuCisJPiBwYXRjaCBieSBTdmVuIFZlcmRvb2xhZWdlIChyZXBvcnQgYnkgR2VyaGFyZCBIYWVyaW5nCisJICA8aGFlcmluZ19saW51eEBnbXguZGU+KToKKwkrIGNvcnJlY3QgdHlwb3MgaW4gZGVmaW5pdGlvbnMgb2Ygc2V2ZXJhbCB3aWRlLWNoYXJhY3RlciBtYWNyb3M6CisJICB3YWRkd3N0ciwgd2dldGJrZ3JuZCwgbXZhZGR3c3RyLCBtdndhZGRfd2NobnN0ciwgbXZ3YWRkX3djaG5zdHIsCisJICBtdndhZGR3c3RyLgorCSsgcGFzcyAkKENQUEZMQUdTKSB0byBNS2xpYl9nZW4uc2gsIHRoZXJlYnkgZml4aW5nIGEgbWlzc2luZyBkZWZpbml0aW9uCisJICBvZiBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBlLmcuLCBvbiBTb2xhcmlzCisKKzIwMDIwMjA5CisJKyBpbXBsZW1lbnQgd2lkZS1hY3MgY2hhcmFjdGVycyBmb3IgVVRGLTggbG9jYWxlcy4gIFdoZW4gaW4gVVRGLTgKKwkgIGxvY2FsZSwgaWdub3JlIG5hcnJvdyB2ZXJzaW9uIG9mIGFjcy4gIEFkZCAnRicgdGVzdCB0byB0ZXN0L25jdXJzZXMuYworCSAgdG8gZGVtb25zdHJhdGUuCisJKyBjb3JyZWN0IHByb3RvdHlwZSBpbiBrZXlib3VuZCBtYW5wYWdlIChub3RlZCBmcm9tIGEgRGViaWFuIG1haWxpbmcKKwkgIGxpc3QgaXRlbSkuCisKKzIwMDIwMjAyCisJKyBhZGQgc2V2ZXJhbCBjYXNlcyB0byB0aGUgd3NjYW53KCkgZXhhbXBsZSBpbiB0ZXN0Y3Vycy5jLCBzaG93aW5nIHRoZQorCSAgZm9ybWF0LgorCSsgaW1wbGVtZW50IGEgc2ltcGxlIHZzc2NhbmYoKSBmYWxsYmFjayBmdW5jdGlvbiB3aGljaCB1c2VzIHRoZSAlbgorCSAgY29udmVyc2lvbiB0byBoZWxwIHBhcnNlIHRoZSBpbnB1dCBkYXRhIChwcm9tcHRlZCBieSBkaXNjdXNzaW9uIHdpdGgKKwkgIEFsYmVydCBDaGluLUEtWW91bmcpLgorCSsgbW9kaWZ5IG1rLTFzdC5hd2sgYW5kIHRlc3QvTWFrZWZpbGUuaW4gdG8gYWRkICQoTERGTEFHUykgd2hlbiBtYWtpbmcKKwkgIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCB0byB1c2UgJChDRkxBR1MpIHdoZW4gbGlua2luZyB0ZXN0IHByb2dyYW1zCisJICAocGF0Y2ggYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyBhZGQgYSBjYWxsIHRvIF9uY19rZXlwYWQoKSBpbiBrZXlwYWQoKSB0byBhY2NvbW1vZGF0ZSBhcHBsaWNhdGlvbnMKKwkgIHN1Y2ggYXMgbnZpLCB3aGljaCB1c2UgY3Vyc2VzIGZvciBvdXRwdXQgYnV0IG5vdCBmb3IgaW5wdXQgKGZpeGVzCisJICBEZWJpYW4gIzEzMTI2MywgY2Y6IDIwMDExMjE1KS4KKwkrIGFkZCBlbnRyeXBvaW50cyB0byByZXNpemV0ZXJtLmMgd2hpY2ggcHJvdmlkZSBiZXR0ZXIgY29udHJvbCBvdmVyIHRoZQorCSAgcHJvY2VzczogIGlzX3Rlcm1fcmVzaXplZCgpIGFuZCByZXNpemVfdGVybSgpLiAgVGhlIGxhdHRlciByZXN0b3JlcworCSAgdGhlIG9yaWdpbmFsIGRlc2lnbiBvZiByZXNpemV0ZXJtKCkgYmVmb3JlIEtFWV9SRVNJWkUgd2FzIGFkZGVkIGluCisJICA5NzA5MDYuICBEbyB0aGlzIHRvIGFjY29tbW9kYXRlIDIwMDEwOTIyIGNoYW5nZXMgdG8gdmlldy5jLCBidXQgYWxsb3cKKwkgIGZvciBwcm9ncmFtcyB3aXRoIHRoZWlyIG93biBzaWd3aW5jaCBoYW5kbGVyLCBzdWNoIGFzIGx5bnggKHJlcG9ydGVkCisJICBieSBSdXNzZWxsIFJ1YnkgPHJ1c3NAbWF0aC5vcnN0LmVkdT4pLgorCisyMDAyMDEyNworCSsgZml4IGEgdHlwbyBpbiBjaGFuZ2UgdG8gbWstMXN0LmF3aywgd2hpY2ggYnJva2UgdGhlIHNoYXJlZC1saWJyYXJ5CisJICBtYWtlZmlsZSBydWxlcyAocmVwb3J0ZWQgYnkgTWFydGluIE1va3JlanMpLgorCisyMDAyMDEyNgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YgorCSsgZmluaXNoIGNoYW5nZXMgbmVlZGVkIHRvIGJ1aWxkIGRsbCdzIG9uIGN5Z3dpbi4KKwkrIGZpeCBhIHR5cG8gaW4gbXZ3Y2hhdCgpIG1hY3JvIChyZXBvcnRlZCBieSBDeSA8eWFtQGhvbWVyb3cubmV0KS4KKworMjAwMjAxMTkKKwkrIGFkZCBjYXNlIGluIGxpYl9iYXVkcmF0ZS5jIGZvciBCOTIxNjAwIChwYXRjaCBieSBBbmRyZXkgQSBDaGVybm92KS4KKwkrIGNvcnJlY3QgbWlzc2luZyBzZWQtZWRpdGluZyBzdGFnZSBpbiBtYW5wYWdlIGluc3RhbGxzIHdoaWNoIGlzIHVzZWQKKwkgIHRvIHJlbmFtZSBtYW5wYWdlcywgYnJva2VuIGluIDIwMDEwMzI0IGZpeCBmb3IgRGViaWFuICM4OTkzOSAoRGViaWFuCisJICAjNzg4NjYpLgorCSsgcmVtb3ZlIC1MJChsaWJkaXIpIGZyb20gbGlua2VyIGZsYWdzLCBwcm9iYWJseSBub3QgbmVlZGVkIGFueSBtb3JlCisJICBzaW5jZSBIUFVYIGlzIGhhbmRsZWQgcHJvcGVybHkgKHJlcG9ydGVkIGJ5IE5paWJlIFl1dGFrYQorCSAgPGduaWliZUBtMTduLm9yZz4pLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgbWJzdGF0ZV90LCBuZWVkZWQgZm9yIHdpZGUtY2hhcmFjdGVyCisJICBjb25maWd1cmF0aW9uLiAgT24gc29tZSBwbGF0Zm9ybXMgd2UgbXVzdCBpbmNsdWRlIDx3Y2hhci5oPiB0bworCSAgZGVmaW5lIHRoaXMgKHJlcG9ydGVkIGJ5IERhbmllbCBKYWNvYm93aXR6KS4KKwkrIGluY29ycG9yYXRlIHNvbWUgb2YgdGhlIGNoYW5nZXMgbmVlZGVkIHRvIGJ1aWxkIGRsbCdzIG9uIGN5Z3dpbi4KKworMjAwMjAxMTJhCisJKyB3b3JrYXJvdW5kIGZvciBhd2sgZGlkIG5vdCB3b3JrIHdpdGggbWF3aywgYWRqdXN0ZWQgc2hlbGwgc2NyaXB0LgorCisyMDAyMDExMgorCSsgYWRkIENhcHMub3NmMXI1LCBhcyBhbiBleGFtcGxlLgorCSsgbW9kaWZ5IGJlaGF2aW9yIG9mIGNhbl9jbGVhcl93aXRoKCkgc28gdGhhdCBpZiBhbiBhcHBsaWNhdGlvbiBpcworCSAgcnVubmluZyBpbiBhIG5vbi1iY2UgdGVybWluYWxzIHdpdGggZGVmYXVsdCBjb2xvcnMgZW5hYmxlZCwgaXQKKwkgIHJldHVybnMgdHJ1ZSwgYWxsb3dpbmcgdGhlIHVzZXIgdG8gc2VsZWN0L3Bhc3RlIHRleHQgd2l0aG91dCBwaWNraW5nCisJICB1cCBleHRyYW5lb3VzIHRyYWlsaW5nIGJsYW5rcyAoYWRhcHRlZCBmcm9tIHBhdGNoIGJ5IERhbmllbAorCSAgSmFjb2Jvd2l0eiA8ZG1qK0BhbmRyZXcuY211LmVkdT4pLgorCSsgbW9kaWZ5IGdlbmVyYXRlZCBjdXJzZXMuaCB0byBpZmRlZi1vdXQgcHJvdG90eXBlcyBmb3IgZXh0ZW5zaW9ucyBpZgorCSAgdGhleSBhcmUgZGlzYWJsZWQsIGFuZCB0byBkZWZpbmUgY3Vyc2VzX3ZlcnNpb24oKSBhcyBhIHN0cmluZyBpbiB0aGF0CisJICBjYXNlLiAgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgcHJvZ3JhbXMgc3VjaCBhcyB0aWMgYnVpbGQgaW4gdGhhdAorCSAgY29uZmlndXJhdGlvbi4KKwkrIG1vZGlmaWVkIGdlbmVyYXRlZCBoZWFkZXJzLnNoIHRvIHJlbW92ZSBhIGd6aXAnZCB2ZXJzaW9uIG9mIHRoZQorCSAgdGFyZ2V0IGZpbGUgaWYgaXQgZXhpc3RzLCBpbiBjYXNlIG5vbi1nemlwJ2QgbWFucGFnZXMgYXJlIGluc3RhbGxlZAorCSAgaW50byBhIGRpcmVjdG9yeSB3aGVyZSBnemlwJ2Qgb25lcyBleGlzdC4gIEluIHRoYXQgY2FzZSwgdGhlIGxhdHRlcgorCSAgd291bGQgYmUgZm91bmQuCisJKyBjb3JyZWN0ZWQgYSByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb2Ygc2lnbmFsIGhhbmRsZXJzIGZyb20gMjAwMTA5MjIKKwkgIGNoYW5nZXMuCisJKyBjbGFyaWZpZWQgYnVnLXJlcG9ydGluZyBhZGRyZXNzIGluIHRlcm1pbmZvLnNyYyAocmVwb3J0IGJ5IEpvaG4gSAorCSAgRHVCb2lzIElJSSA8c3BjZWNkdEBhcm1vcnkuY29tPikuCisJPiBzZXZlcmFsIGZpeGVzIGZyb20gUm9iZXJ0IEpvb3A6CisJKyBkbyBub3QgdXNlICItdiIgb3B0aW9uIG9mIGF3ayBpbiBNS2tleV9kZWZzLnNoIGJlY2F1c2UgaXQgZG9lcyBub3QKKwkgIHdvcmsgd2l0aCBTdW5PUyBuYXdrLgorCSsgbW9kaWZ5IGRlZmluaXRpb25zIGZvciBsaWJ1dGY4IGluIGN1cnNlcy5oIHRvIGF2b2lkIHJlZGVmaW5pdGlvbgorCSAgd2FybmluZ3MgZm9yIG1ibGVuCisJKyBxdW90ZWQgcmVmZXJlbmNlcyB0byBjb21waWxlciBpbiBzaGVsbCBjb21tYW5kIGluIG1pc2MvTWFrZWZpbGUsIGluCisJICBjYXNlIGl0IHVzZXMgbXVsdGlwbGUgdG9rZW5zLgorCisyMDAxMTIyOQorCSsgcmVzdG9yZSBzcGVjaWFsIGNhc2UgZnJvbSAyMDAxMDkyMiBjaGFuZ2VzIHRvIG9taXQgU0FfUkVTVEFSVCB3aGVuCisJICBzZXR0aW5nIHVwIFNJR1dJTkNIIGhhbmRsZXIsIHdoaWNoIGlzIG5lZWRlZCB0byBhbGxvdyB3Z2V0Y2goKSB0byBiZQorCSAgaW50ZXJydXB0ZWQgYnkgdGhhdCBzaWduYWwuCisJKyB1cGRhdGUgY29uZmlndXJlIG1hY3JvIENGX1dJVEhfUEFUSExJU1QsIHRvIG9taXQgc29tZSBkb3VibGUgcXVvdGVzCisJICBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYgMi41MgorCSsgcmV2ZXJ0IGNvbmZpZ3VyZSBzY3JpcHQgdG8gYXV0b2NvbmYgMi4xMyBwYXRjaGVkIHdpdGgKKwkJYXV0b2NvbmYtMi4xMy0xOTk5MDExNy5wYXRjaC5neiAob3IgbGF0ZXIpCisJICBmcm9tCisJCWZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mLworCSAgYmVjYXVzZSBhdXRvY29uZiAyLjUyIG1hY3JvIEFDX1BST0dfQVdLIGRvZXMgbm90IHdvcmsgb24gSFBVWCAxMS4wCisJICAocmVwb3J0IGJ5IERhdmlkIEVsbGVtZW50IDxlbGxlbWVudEBzZGQuaHAuY29tPikuICBUaGlzIGFsc28gZml4ZXMgYQorCSAgZGlmZmVyZW50IHByb2JsZW0gY29uZmlndXJpbmcgd2l0aCBNYWMgT1MgWCAocmVwb3J0ZWQgYnkgTWFyYyBTbWl0aAorCSAgPG1hcmMuYS5zbWl0aEBob21lLmNvbT4pLgorCisyMDAxMTIyMgorCSsgbW9kaWZ5IGluY2x1ZGUvZWRpdF9jZmcuaCB0byBlbGltaW5hdGUgQlJPS0VOX0xJTktFUiBzeW1ib2wgZnJvbQorCSAgdGVybS5oCisJKyBtb3ZlIHByb3RvdHlwZSBmb3IgX25jX3Zzc2NhbmYoKSBpbnRvIGN1cnNlcy5oLmluIHRvIG9taXQKKwkgIEhBVkVfVlNTQ0FORiBzeW1ib2wgZnJvbSBjdXJzZXMuaCwgd2hpY2ggd2FzIGRlcGVuZGVudCB1cG9uIHRoZQorCSAgbmN1cnNlc19jZmcuaCBmaWxlIHdoaWNoIGlzIG5vdCBpbnN0YWxsZWQuCisJKyB1c2UgQUNTX0xFTiByYXRoZXIgdGhhbiBTSVpFT0YoYWNzX21hcCkgaW4gdHJhY2UgY29kZSBvZiBsaWJfYWNzLmMsCisJICB0byB3b3JrIHdpdGggYnJva2VuIGxpbmtlciBjb25maWd1cmF0aW9uLCBlLmcuLCBjeWd3aW4gKHJlcG9ydCBieQorCSAgUm9iZXJ0IEpvb3AgPHJqQHJhaW5ib3cuaW4tYmVybGluLmRlPikuCisJKyBtYWtlIG5hcG1zKCkgY2FsbCBfbmNfdGltZWRfd2FpdCgpIHJhdGhlciB0aGFuIHBvbGwoKSBvciBzZWxlY3QoKSwKKwkgIHRvIHdvcmsgYXJvdW5kIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2Ugb24gY3lnd2luLgorCisyMDAxMTIxOAorCSsgZHJvcCBjb25maWd1cmUgbWFjcm8gQ0ZfV0lERUNfU0hJRlQsIHNpbmNlIHRoYXQgd2FzIHJlbmRlcmVkIG9ic29sZXRlCisJICBieSBTdmVuIFZlcmRvb2xhZWdlJ3MgcmV3cml0ZSBvZiB3aWRlLWNoYXJhY3RlciBzdXBwb3J0LiAgVGhpcyBtYWtlcworCSAgbGlibmN1cnNlc3cgaW5jb21wYXRpYmxlIGFnYWluLCBidXQgbWFrZXMgdGhlIGhlYWRlciBmaWxlcyBhbG1vc3QgdGhlCisJICBzYW1lIGFzIGluIHRoZSBuYXJyb3ctY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24uCisJKyBzaW1wbGlmeSBkZWZpbml0aW9ucyB0aGF0IGNvbWJpbmUgd2lkZS9uYXJyb3cgdmVyc2lvbnMgb2YgYmtnZCwgZXRjLiwKKwkgIHRvIGVsaW1pbmF0ZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB3aWRlL25hcnJvdyB2ZXJzaW9ucyBvZiBjdXJzZXMuaAorCSsgY29ycmVjdCB0eXBvIGluIGNvbmZpZ3VyZSBtYWNybyBDRl9GVU5DX1ZTU0NBTkYKKwkrIGNvcnJlY3QgbG9jYXRpb24gb2YgY2FsbCB0byBfbmNfa2V5cGFkKCkgZnJvbSAyMDAxMTIxNSBjaGFuZ2VzIHdoaWNoCisJICBwcmV2ZW50ZWQga2V5cGFkKCkgZnJvbSBiZWluZyBkaXNhYmxlZCAocmVwb3J0ZWQgYnkgTGFycyBIZWNraW5nKS4KKworMjAwMTEyMTUKKwkrIHJld3JvdGUgbmN1cnNlcyAnYScgdGVzdCB0byBleGVyY2lzZSB3Z2V0Y2goKSBhbmQga2V5cGFkKCkgZnVuY3Rpb25zCisJICBiZXR0ZXIsIGUuZy4sIGJ5IGFkZGluZyBhICd3JyBjb21tYW5kIHRvIGNyZWF0ZSBuZXcgd2luZG93cyB3aGljaAorCSAgbWF5IGhhdmUgZGlmZmVyZW50IGtleXBhZCgpIHNldHRpbmdzLgorCSsgY29ycmVjdGVkIGxvZ2ljIG9mIGtleXBhZCgpIGJ5IGFkZGluZyBpbnRlcm5hbCBzY3JlZW4gc3RhdGUgdG8gdHJhY2sKKwkgIHdoZXRoZXIgdGhlIHRlcm1pbmFsJ3Mga2V5cGFkLW1vZGUgaGFzIGJlZW4gc2V0LiAgVXNlIHRoaXMgaW4KKwkgIHdnZXRjaCgpIHRvIHVwZGF0ZSB0aGUga2V5cGFkLW1vZGUgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlCisJICBhc3NvY2lhdGVkIHdpbmRvdydzIGtleXBhZC1tb2RlIGhhcyBiZWVuIHNldCB3aXRoIGtleXBhZCgpLiAgVGhpcworCSAgY29ycmVjdHMgYSByZWxhdGVkIHByb2JsZW0gcmVzdG9yaW5nIHRlcm1pbmFsIHN0YXRlIGFmdGVyIGhhbmRsaW5nCisJICBTSUdUU1RQIChyZXBvcnRlZCBieSBNaWtlIENhc3RsZSkuCisJKyByZWdlbmVyYXRlIGNvbmZpZ3VyZSB1c2luZyBwYXRjaCBmb3IgYXV0b2NvbmYgMi41MgorCQlhdXRvY29uZi0yLjUyLXBhdGNoLmd6CisJICBhdAorCQlmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8KKwkrIHVwZGF0ZSBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgZnJvbQorCQlodHRwOi8vc3VidmVyc2lvbnMuZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvY29uZmlnL2NvbmZpZy8KKwkrIG1pbm9yIGNoYW5nZXMgdG8gcXVvdGluZyBpbiBjb25maWd1cmUgc2NyaXB0IHRvIGFsbG93IGl0IHRvIHdvcmsKKwkgIHdpdGggYXV0b2NvbmYgMi41MgorCisyMDAxMTIwOAorCSsgbW9kaWZ5IGZpbmFsIGNoZWNrcyBpbiBsaWJfc2V0dXAuYyBmb3IgbGluZSBhbmQgY29sIHZhbHVlcywgbWFraW5nCisJICB0aGVtIGluZGVwZW5kZW50LgorCSsgbW9kaWZ5IGFjc19tYXBbXSBpZiBjb25maWd1cmUgLS1icm9rZW4tbGlua2VyIGlzIHNwZWNpZmllZCwgdG8gbWFrZQorCSAgaXQgdXNlIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYW4gYXJyYXkgKHByb21wdGVkIGJ5IGFuIGluY29ycmVjdAorCSAgaW1wbGVtZW50YXRpb24gaW4gY3lnd2luIHBhY2thZ2UpLgorCSsgY29ycmVjdCBzcGVsbGluZyBvZiBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLWNvbG9yZmdiZywgd2hpY2gKKwkgIGhhcHBlbmVkIHRvIHdvcmsgaWYgLS13aXRoLWRldmVsb3Agd2FzIHNldCAobm90ZWQgaW4gY3lnd2luIHBhY2thZ2UKKwkgIGZvciBuY3Vyc2VzKS4KKwkrIG1vZGlmeSBpZmRlZiBmb3IgZ2VuZXJpY2Vycm9yKCkgdG8gY29tcGlsZSB3aXRoIFNVTldzcHJvIFN1biBXb3JrU2hvcAorCSAgNiB1cGRhdGUgMSBDKysgNS4yIChwYXRjaCBieSBTdWxsaXZhbiBOIEJlY2sgPHNiZWNrQGNpc2UudWZsLmVkdT4pLgorCSsgYWRkIGNvbmZpZ3VyZSBjaGVja3MgdG8gc2VlIGlmIG5jdXJzZXMnIGZhbGxiYWNrIHZzc2NhbmYoKSB3aWxsCisJICBjb21waWxlIGVpdGhlciBvZiB0aGUgc3BlY2lhbCBjYXNlcyBmb3IgRklMRSBzdHJ1Y3RzLCBhbmQgaWYgbm90LAorCSAgZm9yY2UgaXQgdG8gdGhlIGNhc2Ugd2hpY2ggc2ltcGx5IHJldHVybnMgYW4gZXJyb3IgKHJlcG9ydCBieQorCSAgU3VsbGl2YW4gTiBCZWNrIDxzYmVja0BjaXNlLnVmbC5lZHU+IGluZGljYXRlcyB0aGF0IFNvbGFyaXMgOCB3aXRoCisJICA2NC1iaXRzIGRvZXMgbm90IGFsbG93IGFjY2VzcyB0byBGSUxFJ3MgZmllbGRzKS4KKwkrIG1vZGlmeSBpZmRlZidzIGZvciBjKysvY3Vyc2Vzdy5jYyB0byB1c2UgdGhlIGZhbGxiYWNrIHZzc2NhbmYoKSBpbgorCSAgdGhlIG5jdXJzZXMgbGlicmFyeSBpZiBubyBiZXR0ZXIgc3Vic3RpdHV0ZSBmb3IgdGhpcyBjYW4gYmUgZm91bmQKKwkgIGluIHRoZSBDKysgcnVudGltZS4KKwkrIG1vZGlmeSB0aGUgYnVpbGQgdG8gbmFtZSBkeW5hbWljIGxpYnJhcmllcyBhY2NvcmRpbmcgdG8gdGhlCisJICBjb252ZW50aW9uIHVzZWQgb24gT1MgWCBhbmQgRGFyd2luLiAgUmF0aGVyIHRoYW4gc29tZXRoaW5nIGxpa2UKKwkgIGxpYm5jdXJzZXMuZHlsaWIuNS4yLCBEYXJ3aW4gd291bGQgbmFtZSBpdCBsaWJuY3Vyc2VzLiAgNS5keWxpYi4KKwkgIFRoZXJlIGFyZSBhIGZldyBhZGRpdGlvbmFsIG1pbm9yIGZpeGVzLCBzdWNoIGFzIHNldHRpbmcgdGhlIGxpYnJhcnkKKwkgIHZlcnNpb24gYW5kIGNvbXBhdGliaWxpdHkgdmVyc2lvbiBudW1iZXJzIChwYXRjaCBieSBKYXNvbiBFdmFucworCSAgPGpldmFuc0BhcHBsZS5jb20+KS4KKwkrIHVzZSAnc2gnIHRvIHJ1biBta2luc3RhbGxkaXJzLCB0byB3b3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIGJ1Z2d5CisJICB2ZXJzaW9ucyBvZiAnbWFrZScgb24gT1MvMiAocmVwb3J0IGJ5IEpvaG4gUG9sdGVyYWsgPGpwQGV5dXAub3JnPikuCisJKyBjb3JyZWN0IHR5cG8gaW4gbWFucGFnZSBkZXNjcmlwdGlvbiBvZiBjdXJzX3NldCgpIChEZWJpYW4gIzEyMTU0OCkuCisJKyByZXBsYWNlIHRoZSBjb25maWd1cmUgc2NyaXB0IGV4aXN0ZW5jZS1jaGVjayBmb3IgbWtzdGVtcCgpIGJ5IG9uZQorCSAgdGhhdCBjaGVja3MgaWYgdGhlIGZ1bmN0aW9uIHdvcmtzLCBuZWVkZWQgZm9yIG9sZGVyIGdsaWJjIGFuZAorCSAgQW1pZ2FPUy4KKworMjAwMTEyMDEKKwkrIG1vZGlmeSBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgZmFsbGJhY2tzLmMgdG8gY29tcGlsZSBhIHRlbXBvcmFyeQorCSAgY29weSBvZiB0aGUgdGVybWluZm8gc291cmNlIGluIGNhc2UgdGhlIGhvc3QgZG9lcyBub3QgY29udGFpbiBhbGwgb2YKKwkgIHRoZSBlbnRyaWVzIHJlcXVlc3RlZCBmb3IgZmFsbGJhY2tzIChyZXF1ZXN0IGJ5IEdyZWcgUm9lbG9mcykuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBhY2NvbW1vZGF0ZSBzeXN0ZW1zIHN1Y2ggYXMgTWFjIE9TIFggd2hvc2UKKwkgIDxzdGRib29sLmg+IGhlYWRlciBkZWZpbmVzIGEgJ2Jvb2wnIHR5cGUgaW5jb25zaXN0ZW50IHdpdGggbmN1cnNlcywKKwkgIHdoaWNoIG5vcm1hbGx5IG1ha2VzICdib29sJyBjb25zaXN0ZW50IHdpdGggQysrLiAgSW5jbHVkZSA8c3RkYm9vbC5oPgorCSAgZnJvbSBjdXJzZXMuaCB0byBmb3JjZSBjb25zaXN0ZW50IHVzYWdlLCBkZWZpbmUgYSBuZXcgdHlwZQorCSAgTkNVUlNFU19CT09MIGFuZCByZWxhdGVkIHRoYXQgdG8gdGhlIGV4cG9ydGVkICdib29sJyBhcyBlaXRoZXIgYQorCSAgdHlwZWRlZiBvciBkZWZpbml0aW9uLCBhY2NvcmRpbmcgdG8gd2hldGhlciA8c3RkYm9vbC5oPiBpcyBwcmVzZW50CisJICAoYmFzZWQgb24gYSBidWcgcmVwb3J0IGZvciB0aW4gMS41LjkgYnkgQWFyb24gQWRhbXMgPGFkYW1zYUBtYWMuY29tPikuCisKKzIwMDExMTI0CisJKyBhZGRlZC91cGRhdGVkIHRlcm1pbmZvIGVudHJpZXMgZm9yIE0kIHRlbG5ldCBhbmQgS0RFIGtvbnNvbGUgLVRECisKKzIwMDExMTE3CisJKyB1cGRhdGVkL2V4cGFuZGVkIEFwcGxlX1Rlcm1pbmFsIGFuZCBEYXJ3aW4gUG93ZXJQQyB0ZXJtaW5mbyBlbnRyaWVzCisJICAoQmVuamFtaW4gQyBXIFNpdHRsZXIpLgorCSsgYWRkIHB1dHR5IHRlcm1pbmZvIGVudHJ5IC1URAorCSsgaWYgY29uZmlndXJpbmcgZm9yIHdpZGUtY3Vyc2VzLCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc2luY2UKKwkgIHRoaXMgbWF5IG5vdCBvdGhlcndpc2UgYmUgZGVmaW5lZCB0byBtYWtlIHRlc3Qvdmlldy5jIGNvbXBpbGUuCisKKzIwMDExMTEwCisJKyByZXZpZXcvY29ycmVjdCBzZXZlcmFsIG1pc3NpbmcvZ2VuZXJhdGVkIGl0ZW1zIGluIGN1cnNlcy53aWRlLCBzb3J0ZWQKKwkgIHRoZSBsaXN0cyB0byBtYWtlIHN1YnNlcXVlbnQgZGlmZidzIGVhc2llciB0byB0cmFjay4KKworMjAwMTExMDMKKwkrIGFkZCBtYW51YWwgcGFnZXMgZm9yIGFkZF93Y2goKSwgZWNob193Y2hhcigpLCBnZXRjY2hhcigpLAorCSAgbXZhZGRfd2NoKCksIG12d2FkZF93Y2goKSwgc2V0Y2NoYXIoKSwgd2FkZF93Y2goKSBhbmQgd2VjaG9fd2NoYXIoKS4KKwkrIGltcGxlbWVudCB3ZWNob193Y2hhcigpCisJKyBtb2RpZnkgX3RyYWNlZHVtcCgpIHRvIGhhbmRsZSB3aWRlLWNoYXJhY3RlcnMgYnkgbWFwcGluZyB0aGVtIHRvICc/JworCSAgYW5kIGNvbnRyb2wtY2hhcmFjdGVycyB0byAnLicsIHRvIG1ha2UgdGhlIHRyYWNlIGZpbGUgcmVhZGFibGUuICBBbHNvCisJICBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgYnVmZmVyIHVzZWQgYnkgX3RyYWNlZHVtcCgpIGZvciBmb3JtYXR0aW5nCisJICB0aGUgcmVzdWx0cy4KKwkrIG1vZGlmeSBUX0NBTExFRC9UX1JFVFVSTiBtYWNyb3MgdG8gZWFzZSBiYWxhbmNpbmcgY2FsbC9yZXR1cm4gbGluZXMKKwkgIGluIGEgdHJhY2UgYnkgdXNpbmcgY3VybHkgYnJhY2VzLgorCSsgaW1wbGVtZW50IF9uY192aXNjYnVmKCksIGZvciB0cmFjaW5nIGNjaGFyX3QgYXJyYXlzLgorCSsgY29ycmVjdCB0cmFjZS1jYWxscyBpbiBzZXRjY2hhcigpIGFuZCBnZXRjY2hhcigpIGZ1bmN0aW9ucywgd2hpY2gKKwkgIHRyYWNlZCB0aGUgcmV0dXJuIHZhbHVlcyBidXQgbm90IHRoZSBlbnRyeSB0byBlYWNoIGZ1bmN0aW9uLgorCSsgY29ycmVjdCB1c2FnZSBtZXNzYWdlIGluIHRlc3Qvdmlldy5jLCB3aGljaCBzdGlsbCBtZW50aW9uZWQgLXUgZmxhZy4KKworMjAwMTEwMjcKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGFsbG93IGJ1aWxkaW5nIHdpdGggdGVybWNhcCBvbmx5LCBvciB3aXRoCisJICBmYWxsYmFja3Mgb25seS4gIEluIHRoaXMgY2FzZSwgd2UgZG8gbm90IGJ1aWxkIHRpYyBhbmQgdG9lLgorCSsgYWRkIGNvbmZpZ3VyZSAtLXdpdGgtdGVybXBhdGggb3B0aW9uLCB0byBvdmVycmlkZSBkZWZhdWx0IFRFUk1QQVRICisJICB2YWx1ZSBvZiAvZXRjL3Rlcm1jYXA6L3Vzci9zaGFyZS9taXNjL3Rlcm1jYXAuCisJKyBjb3NtZXRpYyBjaGFuZ2UgdG8gdGFjazogbWFrZSBtZW51IGRlc2NyaXB0aW9ucyBhZ3JlZSB3aXRoIG1lbnUKKwkgIHRpdGxlcy4KKworMjAwMTEwMjAKKwkrIHJld3JvdGUgbGltaXQtY2hlY2tzIGluIHdzY3JsKCkgYW5kIGFzc29jaWF0ZWQgX25jX3Njcm9sbF93aW5kb3coKSwKKwkgIHRvIGVuc3VyZSB0aGF0IGlmIHRoZSBwYXJhbWV0ZXIgb2Ygd3NjcmwoKSBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZgorCSAgdGhlIHNjcm9sbGluZyByZWdpb24sIHRoZW4gdGhlIHNjcm9sbGluZyByZWdpb24gd2lsbCBiZSBjbGVhcmVkCisJICAocmVwb3J0IGJ5IEJlbiBLb2hsZW4gPGJja29obGVuQHlhaG9vLmNvbT4pLgorCSsgYWRkIHRyYWNlL3ZhcmFyZ3MuYywgdXNpbmcgdGhpcyB0byB0cmFjZSBwYXJhbWV0ZXJzIGluIGxpYl9wcmludHcuYworCSsgaW1wbGVtZW50IF90cmFjZWNjaGFyX3QyKCkgYW5kIF90cmFjZWNjaGFyX3QoKS4KKwkrIHNwbGl0LW91dCB0cmFjZS92aXNidWYuYworCSsgY29ycmVjdCB0eXBvIGluIGxpYl9wcmludHcuYyBjaGFuZ2VzIGZyb20gMjAwMTA5MjIgKHJlcG9ydCBieSBNaWtlCisJICBDYXN0bGUpLgorCisyMDAxMTAxMworCSsgbW9kaWZ5IHJ1bl90aWMuc2ggdG8gY2hlY2sgaWYgdGhlIGJ1aWxkIGlzIGEgY3Jvc3MtY29tcGlsZS4gIEluIHRoYXQKKwkgIGNhc2UsIGRvIG5vdCB1c2UgdGhlIGJ1aWxkJ3MgdGljIHRvIGluc3RhbGwgdGhlIHRlcm1pbmZvIGRhdGFiYXNlCisJICAocmVwb3J0IGJ5IFJhZmFlbCBSb2RyaWd1ZXogVmVsaWxsYSA8cnJ2QHRpZC5lcz4pLgorCSsgbW9kaWZ5IG1vdXNlIGNsaWNrIHJlc29sdXRpb24gc28gdGhhdCBtb3VzZWludGVydmFsKC0xKSB3aWxsIGRpc2FibGUKKwkgIGl0LCBlLmcuLCB0byBoYW5kbGUgdG91Y2hzY3JlZW5zIHZpYSBhIHNsb3cgY29ubmVjdGlvbiAocmVxdWVzdCBieQorCSAgQnlyb24gU3Rhbm9zemVrIDxnYW5kYWxmQHdpbmRzLm9yZz4pLgorCSsgY29ycmVjdCBtb3VzZWludGVydmFsKCkgZGVmYXVsdCB2YWx1ZSBzaG93biBpbiBjdXJzX21vdXNlLjN4CisJKyByZW1vdmUgY29uZmxpY3RpbmcgZGVmaW5pdGlvbiBvZiBtb3VzZV90cmFmbygpIChyZXBvcnRlZCBieSBMYXJzCisJICBIZWNraW5nLCB1c2luZyBnY2MgMi45NS4zKS4KKworMjAwMTEwMDEKKwkrIHNpbXBsZXIgZml4IGZvciBzaWduYWxfbmFtZSgpLCB0byByZXBsYWNlIHRoZSBvbmUgb3Zlcmxvb2tlZCBpbgorCSAgMjAwMTA5MjkgKHJlcG9ydGVkIGJ5IExhcnJ5IFZpcmRlbikuCisKKzIwMDEwOTI5CisJKyBhZGQgLWkgb3B0aW9uIHRvIHZpZXcuYywgdG8gdGVzdCBuY3Vyc2VzJyBjaGVjayBmb3Igbm9uLWRlZmF1bHQKKwkgIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdJTlQsIGV0Yy4KKwkrIGFkZCBjYXNlcyBmb3Igc2hhcmVkLWxpYnJhcmllcyBvbiBEYXJ3aW4vT1MgWCAocGF0Y2ggYnkgUm9iIEJyYXVuCisJICA8YmJyYXVuQHN5bmFjay5uZXQ+KS4KKwkrIG1vZGlmeSB0c2V0IHRvIHJlc3RvcmUgb3JpZ2luYWwgSS9PIG1vZGVzIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgorCSAgQWxzbyBtb2RpZnkgdG8gdXNlIGJ1ZmZlcmVkIHN0ZGVyciBjb25zaXN0ZW50bHkgcmF0aGVyIHRoYW4gbWl4aW5nCisJICB3aXRoIHdyaXRlKCkuCisJKyBjaGFuZ2Ugc2lnbmFsX25hbWUoKSBmdW5jdGlvbiB0byB1c2UgaWYtdGhlbi1lbHNlIHJhdGhlciB0aGFuIGNhc2UKKwkgIHN0YXRlbWVudCwgc2luY2Ugc2lnbmFsLXZhbHVlcyBhcmVuJ3QgcmVhbGx5IGludGVnZXJzIChyZXBvcnRlZCBieQorCSAgTGFycnkgVmlyZGVuKS4KKwkrIGFkZCBsaW1pdCBjaGVja3MgaW4gd3JlZHJhd2xuKCksIGZpeGluZyBhIHByb2JsZW0gd2hlcmUgbHlueCB3YXMKKwkgIHJlcGFpbnRpbmcgYSBwYWQgd2hpY2ggd2FzIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIHNjcmVlbi4KKworMjAwMTA5MjIKKwkrIGZpeDogIFB1dFJhbmdlKCkgd2FzIGNvdW50aW5nIHRoZSBzZWNvbmQgcGFydCBvZiBhIHdpZGUgY2hhcmFjdGVyIGFzCisJICBwYXJ0IG9mIGEgcnVuLCByZXN1bHRpbmcgaW4gYSBjdXJzb3IgcG9zaXRpb24gdGhhdCB3YXMgb25lIHRvbyBmYXIKKwkgIChwYXRjaCBieSBTdmVuIFZlcmRvb2xhZWdlKS4KKwkrIG1vZGlmeSByZXNpemV0ZXJtKCkgdG8gbm90IHF1ZXVlIGEgS0VZX1JFU0laRSBpZiB0aGVyZSB3YXMgbm8KKwkgIFNJR1dJTkNILCB0aGVyZWJ5IHNlcGFyYXRpbmcgdGhlIHR3byBzdHlsZXMgb2YgU0lHV0lOQ0ggaGFuZGxpbmcKKwkgIGluIHRlc3Qvdmlldy5jCisJKyBzaW1wbGlmaWVkIGxpYl90c3RwLmMsIG1vZGlmeSBpdCB0byB1c2UgU0FfUkVTVEFSVCBmbGFnIGZvciBTSUdXSU5DSC4KKwkrIGVsaW1pbmF0ZSBzZXZlcmFsIHN0YXRpYyBidWZmZXJzIGluIHRoZSB0ZXJtaW5mbyBjb21waWxlciwgdXNpbmcKKwkgIGFsbG9jYXRlZCBidWZmZXJzLgorCSsgbW9kaWZ5IE1La2V5bmFtZS5hd2sgc28gdGhhdCBrZXluYW1lKCkgZG9lcyBub3Qgc3RvcmUgaXRzIHJlc3VsdCBpbnRvCisJICBhIHN0YXRpYyBidWZmZXIgdGhhdCBpcyBvdmVyd3JpdHRlbiBieSB0aGUgbmV4dCBjYWxsLgorCSsgcmVvcmdhbml6ZSB0aGUgb3V0cHV0IG9mIGluZm9jbXAgLUUgYW5kIC1lIG9wdGlvbnMgdG8gY29tcGlsZSBjbGVhbmx5CisJICB3aXRoIGdjYyAtV3dyaXRlLXN0cmluZ3Mgd2FybmluZ3MuCisJKyByZW1vdmUgcmVkZWZpbml0aW9uIG9mIGNoZ2F0L3djaGdhdC9tdndjaGdhdCBmcm9tIGN1cnNlcy53aWRlCisKKzIwMDEwOTE1CisJKyBhZGQgbGFiZWwgdG8gdGVzdC92aWV3LmMsIHNob3dpbmcgdGhlIG5hbWUgb2YgdGhlIGxhc3Qga2V5IG9yIHNpZ25hbAorCSAgdGhhdCBtYWRlIHRoZSBzY3JlZW4gcmVwYWludCwgdG8gbWFrZSBpdCBjbGVhcmVyIHdoZW4gYSBzaWd3aW5jaAorCSAgZG9lcyB0aGlzLgorCSsgdXNlIEV4aXRQcm9ncmFtKCkgY29uc2lzdGVudGx5IGluIHRoZSB0ZXN0LXByb2dyYW1zIHRvIG1ha2UgaXQKKwkgIHNpbXBsZXIgdG8gdGVzdCBsZWFrcyB3aXRoIGRtYWxsb2MsIGV0Yy4KKwkrIG1vdmUgaGFzaHRhYiBzdGF0aWMgZGF0YSBvdXQgb2YgaGFzaG1hcC5jIGludG8gU0NSRUVOIHN0cnVjdC4KKwkrIG1ha2UgTk9fTEVBSyBjb2RlIGNvbXBpbGUgd2l0aCByZXZpc2VkIFdJTkRPV0xJU1Qgc3RydWN0cy4KKworMjAwMTA5MDgKKwkrIG1vZGlmeSB0Z2V0ZW50KCkgdG8gY2hlY2sgaWYgZXhpdF9hdHRyaWJ1dGVfbW9kZSByZXNldHMgdGhlIGFsdGVybmF0ZQorCSAgY2hhcmFjdGVyIHNldCwgYW5kIGlmIHNvLCBhdHRlbXB0IHRvIGFkanVzdCB0aGUgY29weSBvZiB0aGUgdGVybWNhcAorCSAgIm1lIiBzdHJpbmcgd2hpY2ggaXQgd2lsbCByZXR1cm4gdG8gZWxpbWluYXRlIHRoYXQgcGFydC4gIEluCisJICBwYXJ0aWN1bGFyLCAnc2NyZWVuJyB3b3VsZCBsb3NlIHRyYWNrIG9mIGxpbmUtZHJhd2luZyBjaGFyYWN0ZXJzCisJICAocmVwb3J0IGJ5IEZyZWRlcmljIEwgVyBNZXVuaWVyIDwwQHBlcnZhbGlkdXMubmV0PiwgYW5hbHlzaXMgYnkKKwkgIE1pY2hhZWwgU2Nocm9lZGVyKS4KKworMjAwMTA5MDEKKwkrIHNwZWNpZnkgRE9DVFlQRSBpbiBodG1sIG1hbnBhZ2VzLgorCSsgYWRkIG1pc3NpbmcgbWFjcm9zIGZvciBzZXZlcmFsICJnZW5lcmF0ZWQiIGZ1bmN0aW9uczogIGF0dHJfZ2V0KCksCisJICBhdHRyX29mZigpLCBhdHRyX29uKCksIGF0dHJfc2V0KCksIGNoZ2F0KCksIG12Y2hnYXQoKSwgbXZ3Y2hnYXQoKSBhbmQKKwkgIG1vdXNlX3RyYWZvKCkuCisJKyBtb2RpZnkgdmlldy5jIHRvIGFncmVlIHdpdGggbm9uLWV4cGVyaW1lbnRhbCBzdGF0dXMgb2YgbmN1cnNlcycKKwkgIHNpZ3dpbmNoIGhhbmRsZXI6CisJICArIGNoYW5nZSB0aGUgc2Vuc2Ugb2YgdGhlIC1yIG9wdGlvbiwgbWFraW5nIGl0IGRlZmF1bHQgdG8gbmN1cnNlcycKKwkgICAgc2lnd2luY2ggaGFuZGxlci4KKwkgICsgYWRkIGEgbm90ZSBleHBsYWluaW5nIHdoYXQgZnVuY3Rpb25zIGFyZSB1bnNhZmUgaW4gYSBzaWduYWwKKwkgICAgaGFuZGxlci4KKwkgICsgYWRkIGEgLWMgb3B0aW9uLCB0byBzZXQgY29sb3IgZGlzcGxheSwgZm9yIHRlc3RpbmcuCisJKyB1bnNldCAkZGF0YSB2YXJpYWJsZSBpbiBNS3Rlcm1pbmZvLnNoIHNjcmlwdCwgdG8gYWRkcmVzcyBwb3RlbnRpYWwKKwkgIGluZmluaXRlIGxvb3AgaWYgc2hlbGwgbWFsZnVuY3Rpb24gKHJlcG9ydCBieSBTYW11ZWwgTWlrZXMKKwkgIDxzbWlrZXNAY3ViYW5lLmNvbT4sIGZvciBiYXNoIDIuMDUuMCBvbiBhIExpbnV4IDIuMC4zNiBzeXN0ZW0pLgorCSsgY2hhbmdlIGticyBpbiBtYWNoIHRlcm1pbmZvIGVudHJpZXMgdG8gXj8gIChNYXJjdXMgQnJpbmttYW5uCisJICA8TWFyY3VzLkJyaW5rbWFubkBydWhyLXVuaS1ib2NodW0uZGU+KS4KKwkrIGNvcnJlY3QgbG9naWMgZm9yIENPTE9SRkdCRyBlbnZpcm9ubWVudCB2YXJpYWJsZTogaWYgcnh2dCBpcyBjb21waWxlZAorCSAgd2l0aCB4cG0gc3VwcG9ydCwgdGhlIHZhcmlhYmxlIGhhcyB0aHJlZSBmaWVsZHMsIG1ha2luZyBpdCBzbGlnaHRseQorCSAgaW5jb21wYXRpYmxlIHdpdGggaXRzZWxmLiAgSW4gZWl0aGVyIGNhc2UsIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGlzCisJICB0aGUgbGFzdCBmaWVsZC4KKworMjAwMTA4MjUKKwkrIG1vdmUgY2FsbHMgdG8gZGVmX3NoZWxsX21vZGUoKSBhbmQgZGVmX3Byb2dfbW9kZSgpIGJlZm9yZSBsb29wIHdpdGgKKwkgIGNhbGxiYWNrcyBpbiBsaWJfc2V0X3Rlcm0uYywgc2luY2UgdGhlIGMrKyBkZW1vIG90aGVyd2lzZSBpbml0aWFsaXplZAorCSAgdGhlIHR0eSBtb2RlcyBiZWZvcmUgc2F2aW5nIHRoZW0gKHBhdGNoIGJ5IEpvaG4gRGF2aWQgQW5nbGluCisJICA8ZGF2ZUBoaWF1bHkxLmhpYS5ucmMuY2E+KS4KKwkrIGR1cGxpY2F0ZSBsb2dpYyB1c2VkIHRvIGluaXRpYWxpemUgdHJhY2UgaW4gbmV3dGVybSgpLCBpbiBpbml0c2NyKCkKKwkgIHRvIGF2b2lkIGNvbmZ1c2luZyB0cmFjZSBvZiBpbml0c2NyKCkuCisJKyBzaW1wbGlmeSBhbGxvY2F0aW9uIG9mIFdJTkRPVyBhbmQgV0lORE9XTElTVCBzdHJ1Y3RzIGJ5IG1ha2luZyB0aGUKKwkgIGZpcnN0IGEgcGFydCBvZiB0aGUgc2Vjb25kIHJhdGhlciB0aGFuIHN0b3JpbmcgYSBwb2ludGVyLiAgVGhpcyBzYXZlcworCSAgYSBjYWxsIHRvIG1hbGxvYyBmb3IgZWFjaCB3aW5kb3cgKGRpc2N1c3Npb24gd2l0aCBQaGlsaXBwZSBCbGFpbikuCisJKyByZW1vdmUgdW51c2VkIHZhcmlhYmxlICd1c2VkX25jdicgZnJvbSBsaWJfdmlkYXR0ci5jIChQaGlsaXBwZQorCSAgQmxhaW4pLgorCSsgbW9kaWZ5IGMrKy9NYWtlZmlsZS5pbiB0byBhY2NvbW1vZGF0ZSBhcmNoaXZlIHByb2dyYW1zIHRoYXQgYXJlCisJICBkaWZmZXJlbnQgZm9yIEMrKyB0aGFuIGZvciBDLCBhbmQgYWRkIGNhc2VzIGZvciB2ZW5kb3IncyBDKysKKwkgIGNvbXBpbGVycyBvbiBTb2xhcmlzIGFuZCBJUklYIChyZXBvcnQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyBjb3JyZWN0IG1hbnBhZ2UgZGVzY3JpcHRpb24gb2YgY3JpdGVyaWEgZm9yIGRlY2lkaW5nIGlmIHRoZSB0ZXJtaW5hbAorCSAgc3VwcG9ydHMgeHRlcm0gbW91c2UgY29udHJvbHMuCisJKyBhZGQgc2V2ZXJhbCBjb25maWd1cmUgc2NyaXB0IG9wdGlvbnMgdG8gYWlkIHdpdGggY3Jvc3MtY29tcGlsaW5nOgorCSAgLS13aXRoLWJ1aWxkLWNjLCAtLXdpdGgtYnVpbGQtY2ZsYWdzLCAtLXdpdGgtYnVpbGQtbGRmbGFncywgYW5kCisJICAtLXdpdGgtYnVpbGQtbGlicyAocmVxdWVzdCBieSBHcmVnIFJvZWxvZnMpLgorCSsgY2hhbmdlIGNyaXRlcmlhIGZvciBkZWNpZGluZyBpZiBjb25maWd1cmUgaXMgY3Jvc3MtY29tcGlsaW5nIGZyb20KKwkgIGhvc3QvYnVpbGQgbWlzbWF0Y2ggdG8gaG9zdC90YXJnZXQgbWlzbWF0Y2ggKHJlcXVlc3QgYnkgR3JlZyBSb2Vsb2ZzCisJICA8Z3JlZy5yb2Vsb2ZzQHBoaWxpcHMuY29tPikuCisJKyBjb3JyZWN0IGxvZ2ljIGZvciBpbmZvY21wIC1lIGFuZCAtRSBvcHRpb25zIHdoaWNoIHdyaXRlcyB0aGUgZGF0YSBmb3IKKwkgIHRoZSBleHRfTmFtZXNbXSBhcnJheS4gIFRoaXMgaXMgbmVlZGVkIGlmIG9uZSBjb25zdHJ1Y3RzIGEgZmFsbGJhY2sKKwkgIHRhYmxlIGZvciBhIHRlcm1pbmZvIGVudHJ5IHdoaWNoIHVzZXMgZXh0ZW5kZWQgdGVybWNhcCBuYW1lcywgZS5nLiwKKwkgIEFYIGluIGEgY29sb3IgeHRlcm0uCisJKyBmaXggdW5kZWZpbmVkIE5DVVJTRVNfUEFUSFNFUCB3aGVuIGNvbmZpZ3VyZSAtLWRpc2FibGUtZGF0YWJhc2UKKwkgIG9wdGlvbiBpcyBnaXZlbi4KKworMjAwMTA4MTEKKwkrIGZpeCBmb3IgVkFMSURfQk9PTEVBTigpIG1hY3JvIHdoZW4gY2hhciBpcyBub3Qgc2lnbmVkLgorCSsgbW9kaWZ5ICdjbGVhbicgcnVsZSBmb3IgQysrIGJpbmRpbmcgdG8gd29yayB3aXRoIFN1biBjb21waWxlciwgd2hpY2gKKwkgIGNhY2hlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBvYmplY3RzLgorCSsgYWRkZWQgbGxpYi1uY3Vyc2Vzdy4KKworMjAwMTA4MDQKKwkrIGFkZCBDYXBzLmtleXMgZXhhbXBsZSBmb3IgZXhwZXJpbWVudGFsIGV4dGVuZGVkIGZ1bmN0aW9uIGtleXMKKwkgIChhZGFwdGVkIGZyb20gYSBwYXRjaCBieSBJbHlhIFpha2hhcmV2aWNoKS4KKwkrIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGVzIG9mIHZpZHB1dHMoKSBhbmQgdmlkYXR0cigpIHRvIGFncmVlIHdpdGgKKwkgIGhlYWRlciBmaWxlcyAocmVwb3J0IGJ5IFdpbGxpYW0gUCBTZXR6ZXIpLgorCSsgZml4IHR5cG9zIGluIHNldmVyYWwgbWFuLXBhZ2VzIChwYXRjaCBieSBXaWxsaWFtIFAgU2V0emVyKS4KKwkrIHJlbW92ZSB1bm5lZWRlZCBpZmRlZiBmb3IgX19HTlVHX18gaW4gQ0ZfQ1BQX1ZTQ0FOX0ZVTkMgY29uZmlndXJlCisJICBtYWNybywgd2hpY2ggbWFkZSBuY3Vyc2VzIEMrKyBiaW5kaW5nIGZhaWwgdG8gYnVpbGQgd2l0aCBvdGhlcgorCSAgQysrIGNvbXBpbGVycyBzdWNoIGFzIEhQVVggMTEueCAocmVwb3J0IGJ5IEFsYmVydCBDaGluLUEtWW91bmcpLgorCSsgd29ya2Fyb3VuZCBmb3IgYnVnIGluIEhQVVggMTEueCBDIGNvbXBpbGVyOiBhZGQgYSBibGFuayBhZnRlcgorCSAgTkNVUlNFU19FWFBPUlQgbWFjcm8gaW4gZm9ybS5oIChyZXBvcnQgYnkgQWxiZXJ0IENoaW4tQS1Zb3VuZykKKwkrIGlnbm9yZSBibGFuayBsaW5lcyBpbiBDYXBzKiBmaWxlcyBpbiBNS2tleV9kZWZzLnNoIHNjcmlwdCAocmVwb3J0IGJ5CisJICBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIGNvcnJlY3QgZGVmaW5pdGlvbiBvZiBrZXlfZW5kIGluIENhcHMuYWl4NCwgd2hpY2ggbGVmdCBLRVlfRU5ECisJICB1bmRlZmluZWQgKHJlcG9ydCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIHJlbW92ZSBhIFFOWC1zcGVjaWZpYyBmYWxsYmFjayBwcm90b3R5cGUgZm9yIHZzc2NhbmYoKSwgd2hpY2ggaXMKKwkgIG9ic29sZXRlIHdpdGggUU5YIFJUUC4KKwkrIHJldmlldy9maXggc29tZSBvZiB0aGUgVCgpIGFuZCBUUigpIG1hY3JvIGNhbGxzLCBoYXZpbmcgbm90aWNlZCB0aGF0CisJICB0aGVyZSB3YXMgbm8gZGF0YSBmb3IgZGVsd2luKCkgaW4gYSB0cmFjZSBvZiBkaWFsb2cgYmVjYXVzZSB0aGVyZSB3YXMKKwkgIG5vIHJldHVyblZvaWQgY2FsbCBmb3Igd3RpbWVvdXQoKS4gIEFsc28sIHRyYWNlcyBpbiBsaWJfdHdhaXQuYyBhcmUKKwkgIG5vdyBzZWxlY3RlZCB1bmRlciBUUkFDRV9JRVZFTlQgcmF0aGVyIHRoYW4gVFJBQ0VfQ0FMTFMuCisKKzIwMDEwNzI4CisJKyBhZGQgYSBfbmNfYWNjZXNzKCkgY2hlY2sgYmVmb3JlIG9wZW5pbmcgZmlsZXMgbGlzdGVkIHZpYSAkVEVSTVBBVEguCisJKyB1c2luZyBtb2RpZmllZCBtYW4yaHRtbCwgcmVnZW5lcmF0ZSBzb21lIG9mIHRoZSBodG1sIG1hbnBhZ2VzIHRvIGZpeAorCSAgYnJva2VuIEhSRUYncyB3aGVyZSB0aGUgbGluayB3YXMgaHlwaGVuYXRlZC4KKworMjAwMTA3MjEKKwkrIGFkZCBzb21lIGxpbWl0L3BvaW50ZXIgY2hlY2tzIHRvIC1TIG9wdGlvbiBvZiB0cHV0cy4KKwkrIHVwZGF0ZWQvZXhwYW5kZWQgQXBwbGVfVGVybWluYWwgYW5kIERhcndpbiBQb3dlclBDIHRlcm1pbmZvIGVudHJpZXMKKwkgIChCZW5qYW1pbiBDIFcgU2l0dGxlcikuCisJKyBhZGQgYSBub3RlIGluIGN1cnNfdGVybWNhcC4zeCByZWdhcmRpbmcgYSBkZWZlY3QgaW4gdGhlIFhTSQorCSAgZGVzY3JpcHRpb24gb2YgdGdldGVudCAoYmFzZWQgb24gYSBkaXNjdXNzaW9uIHdpdGggVXJzIEphbnNlbgorCSAgcmVnYXJkaW5nIHRoZSBIUFVYIDExLnggaW1wbGVtZW50YXRpb24sIHdob3NlIHRlcm1jYXAgaW50ZXJmYWNlIGlzCisJICBub3QgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIHRlcm1jYXAgcHJvZ3JhbXMpLgorCSsgbW9kaWZ5IG1hbmh0bWwgcnVsZSBpbiBkaXN0Lm1rIHRvIHByZXNlcnZlIGNvcHlyaWdodCBub3RpY2Ugb24gdGhlCisJICBnZW5lcmF0ZWQgZmlsZXMsIGFzIHdlbGwgYXMgdG8gYWRkcmVzcyBIVE1MIHN0eWxlIGlzc3VlcyByZXBvcnRlZCBieQorCSAgdGlkeSBhbmQgd2VibGludC4gIFJlZ2VuZXJhdGVkL3VwZGF0ZWQgY29ycmVzcG9uZGluZyBodG1sIGZpbGVzLgorCSsgY29tbWVudCBvdXQgdXNlIG9mIFByb3RlY3RlZF9DaGFyYWN0ZXIgYW5kIHJlbGF0ZWQgcmFyZWx5IHVzZWQKKwkgIGF0dHJpYnV0ZXMgaW4gbmN1cnNlcyBBZGE5NSB0ZXN0L2RlbW8gdG8gY29tcGlsZSB3aXRoIHdpZGUtY2hhcmFjdGVyCisJICBjb25maWd1cmF0aW9uLgorCisyMDAxMDcxNAorCSsgaW1wbGVtZW50IGEgc2ltcGxlIGV4YW1wbGUgaW4gQysrIGRlbW8gdG8gdGVzdCBzY2FudygpLgorCSsgY29ycmVjdGVkIHN0ZGlvIGZ1bmN0aW9uIHVzZWQgdG8gaW1wbGVtZW50IHNjYW53KCkgaW4gY3Vyc2Vzdy5jYworCSsgY29ycmVjdCBkZWZpbml0aW9uIG9mIFJlbUF0dHIoKSBtYWNybyBmcm9tIDIwMDEwNjAyIGNoYW5nZXMsIHdoaWNoCisJICBjYXVzZWQgQysrIFNpbGx5RGVtbyB0byBub3Qgc2hvdyBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycy4KKwkrIG1vZGlmeSBDKysgYmluZGluZywgYWRkaW5nIGdldEtleSgpIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzZXIKKwkgIHRvIHN1YnN0aXR1dGUgZnVuY3Rpb25zIG90aGVyIHRoYW4gZ2V0Y2goKSBmb3Iga2V5Ym9hcmQgcHJvY2Vzc2luZworCSAgb2YgZm9ybXMgYW5kIG1lbnVzIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCisyMDAxMDcwNworCSsgZml4IHNvbWUgb2YgdGhlIHRyYWNlIGNhbGxzIHdoaWNoIG5lZWRlZCBtb2RpZmljYXRpb24gdG8gd29yayB3aXRoCisJICBuZXcgd2lkZS1jaGFyYWN0ZXIgc3RydWN0dXJlcy4KKwkrIG1vZGlmeSBtYWdpYy1jb29raWUgY29kZSBpbiB0dHlfdXBkYXRlLmMgdG8gY29tcGlsZSB3aXRoIG5ldworCSAgd2lkZS1jaGFyYWN0ZXIgc3RydWN0dXJlcyAocmVwb3J0IGJ5IDxHZW9yZ2UuUi5Hb2ZmZUBzZWFnYXRlLmNvbT4pLgorCSsgZW5zdXJlIHRoYXQgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCBpcyBkZWZpbmVkIGluIGN1cnNlcy5wcml2LmggaWYKKwkgIGNvbXBpbGluZyBmb3Igd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbi4KKwkrIG1ha2UgYWRkd25zdHIoKSBoYW5kbGUgbm9uLXNwYWNpbmcgY2hhcmFjdGVycyAocGF0Y2ggYnkgU3ZlbgorCSAgVmVyZG9vbGFlZ2UpLgorCisyMDAxMDYzMAorCSsgYWRkIGNvbmZpZ3VyZSBjaGVjayB0byBkZWZpbmUgX0dOVV9TT1VSQ0UsIG5lZWRlZCB0byBwcm9wIHVwIGdsaWJjCisJICBoZWFkZXIgZmlsZXMuCisJKyBzcGxpdC1vdXQgaW5jbHVkZS9jdXJzZXMud2lkZSB0byBzb2x2ZSBzcHVyaW91cyByZWRlZmluaXRpb25zIGNhdXNlZAorCSAgYnkgZGVmaW5pbmcgX0dOVV9TT1VSQ0UsIGFuZCBtb3ZlIGluY2x1ZGVzIGZvciA8c2lnbmFsLmg+IGJlZm9yZQorCSAgPGN1cnNlcy5oPiB0byB3b3JrIGFyb3VuZCBtaXNkZWZpbml0aW9uIG9mIEVSUiBpbiBnbGliYyAyLjEuMyBoZWFkZXIKKwkgIGZpbGUuCisJKyBleHRlbmRlZCBvc3BlZWQgY2hhbmdlIHRvIE5ldEJTRCBhbmQgT3BlbkJTRCAtVEQKKwkrIG1vZGlmeSBsb2dpYyBpbiBsaWJfYmF1ZHJhdGUuYyBmb3Igb3NwZWVkLCBmb3IgRnJlZUJTRCB0byBtYWtlIGl0CisJICB3b3JrIHByb3Blcmx5IGZvciB0ZXJtY2FwIGFwcGxpY2F0aW9ucyAocGF0Y2ggYnkgQW5kcmV5IEEgQ2hlcm5vdikuCisKKzIwMDEwNjIzCisJKyBjb3JyZWN0IGFuIG92ZXJsb29rZWQgQ2hhck9mL1VDaGFyIGluc3RhbmNlIChyZXBvcnRzIGJ5IEV1Z2VuZSBMZWUKKwkgIDxldWdlbmVAYW5pbWUubmV0PiwgU3ZlbiBWZXJkb29sYWVnZSkuCisJKyBjb3JyZWN0IHVubmVlZGVkIGlmZGVmIGZvciB3dW5jdHJsKCkgKHJlcG9ydGVkIGJ5IFN2ZW4gVmVyZG9vbGFlZ2UpCisKKzIwMDEwNjE4CisJKyBjaGFuZ2Ugb3Zlcmxvb2tlZCBzZXZlcmFsIENoYXJPZi9VQ2hhciBpbnN0YW5jZXMuCisJPiBzZXZlcmFsIHBhdGNoZXMgZnJvbSBTdmVuIFZlcmRvb2xhZWdlOgorCSsgY29ycmVjdCBhIHR5cG8gaW4gd3VuY3RybCgpLCB3aGljaCBtYWRlIGl0IGFwcGVhciB0aGF0IGJvdHdjKCkgd2FzCisJICBuZWVkZWQgKG5vIHN1Y2ggZnVuY3Rpb246IHVzZSBidG93YygpKS4KKwkrIHJlaW1wbGVtZW50IHdpZGUtY2hhcmFjdGVyIGRlbW8gaW4gdGVzdC92aWV3LmMsIHVzaW5nIG5ldyBmdW5jdGlvbnMuCisJKyBpbXBsZW1lbnQgZ2V0Y2NoYXIoKSwgc2V0Y2NoYXIoKSwgd2FkZF93Y2huc3RyKCkgYW5kIHJlbGF0ZWQgbWFjcm9zLgorCSsgZml4IGEgc3ludGF4IHByb2JsZW0gd2l0aCBkby9pZi93aGlsZSBpbiBQVVRDIG1hY3JvIChjdXJzZXMucHJpdi5oKS4KKworMjAwMTA2MTYKKwkrIGFkZCBwYXJlbnRoZXNlcyBpbiBtYWNyb3MgZm9yIG1hbGxvYyBpbiB0ZXN0LnByaXYuaCwgZml4ZXMgYW4KKwkgIGV4cHJlc3Npb24gaW4gdmlldy5jIChyZXBvcnQgYnkgV29sZmdhbmcgR3V0amFociA8Z3V0d0BrbmFwcC5jby5hdD4pLgorCSsgYWRkIENhcHMudXdpbiwgYXMgYW4gZXhhbXBsZS4KKwkrIGNoYW5nZSB0aGUgd2F5IGN1cnNlcy5oIGlzIGdlbmVyYXRlZCwgbWFraW5nIHRoZSBsaXN0IG9mIGZ1bmN0aW9uCisJICBrZXkgZGVmaW5pdGlvbnMgZXh0cmFjdGVkIGZyb20gdGhlIENhcHMgZmlsZS4KKwkrIGFkZCAjdW5kZWYncyBiZWZvcmUgcG9zc2libGUgcmVkZWZpbml0aW9uIG9mIEVSUiBhbmQgT0sgaW4gY3Vyc2VzLmgKKwkrIG1vZGlmeSBsb2dpYyBpbiB0aWMsIHRvZSwgdHB1dCBhbmQgdHNldCB3aGljaCBjaGVja3MgZm9yIGJhc2VuYW1lIG9mCisJICBhcmd2WzBdIHRvIHdvcmsgcHJvcGVybHkgb24gc3lzdGVtcyBzdWNoIGFzIE9TLzIgd2hpY2ggaGF2ZQorCSAgY2FzZS1pbmRlcGVuZGVudCBmaWxlbmFtZXMgYW5kL29yIHByb2dyYW0gc3VmZml4ZXMsIGUuZy4sICIuZXh0Ii4KKworMjAwMTA2MDkKKwkrIGFkZCBhIGNvbmZpZ3VyZSBjaGVjaywgaWYgLS1lbmFibGUtd2lkZWMgaXMgc3BlY2lmaWVkLCBmb3IgcHV0d2MoKSwKKwkgIHdoaWNoIG1heSBiZSBpbiBsaWJ1dGY4LgorCSsgcmVtb3ZlIHNvbWUgdW5uZWNlc3NhcnkgdGV4dCBmcm9tIGN1cnNfZXh0ZW5kLjN4IGFuZAorCSAgZGVmYXVsdF9jb2xvcnMuM3ggd2hpY2ggY2F1c2VkIG1hbi1kYiB0byBtYWtlIGluY29ycmVjdCBzeW1ib2xpYworCSAgbGlua3MgKERlYmlhbiBidWcgcmVwb3J0ICM5OTU1MCkuCisJKyBhZGQgY29uZmlndXJlIGNoZWNrIGlmIGNhc3QgZm9yIF9JT192YV9saXN0IGlzIG5lZWRlZCB0byBjb21waWxlCisJICBDKysgdnNjYW4gY29kZSAoRGViaWFuIGJ1ZyByZXBvcnQgIzk3OTQ1KS4KKwk+IHNldmVyYWwgcGF0Y2hlcyBmcm9tIFN2ZW4gVmVyZG9vbGFlZ2U6CisJKyBjb3JyZWN0IGNvZGUgdGhhdCB1c2VkIG5vbi1zdGFuZGFyZCBhdXRvLWluaXRpYWxpemF0aW9uIG9mIGEgc3RydWN0LAorCSAgd2hpY2ggZ2NjIGFsbG93cyAocmVwb3J0IGJ5IExhcnJ5IFZpcmRlbikuCisJKyB1c2UgcHV0d2MoKSBpbiBQVVRDKCkgbWFjcm8uCisJKyBtYWtlIGFkZHN0cigpIHdvcmsgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGNvZGVzZXQgaXMKKwkgIG5vbi1zdGF0ZWZ1bCAoZWcuIFVURi04KSwgYXMgd2VsbCBhcyBzdGF0ZWZ1bCBjb2Rlc2V0cy4KKworMjAwMTA2MDMKKwkrIGNvcnJlY3QgbG9vcCBleHByZXNzaW9uIGluIE5FWFRfQ0hBUiBtYWNybyBmb3IgbGliX2FkZHN0ci5jIGNoYW5nZXMKKwkgIGZyb20gMjAwMTA2MDIgKHJlcG9ydCBieSBNaWtlIENhc3RsZSkuCisKKzIwMDEwNjAyCisJKyBtb2RpZnkgbXZjdXIoKSB0byBhdm9pZCBlbWl0dGluZyBuZXdsaW5lIGNoYXJhY3RlcnMgd2hlbiBub25sKCkgbW9kZQorCSAgaXMgc2V0LiAgTm9ybWFsbHkgdGhpcyBpcyBub3QgYSBwcm9ibGVtIHNpbmNlIHRoZSBhY3R1YWwgdGVybWluYWwKKwkgIG1vZGUgaXMgc2V0IHRvIHN1cHByZXNzIG5sL2NybGYgdHJhbnNsYXRpb25zLCBob3dldmVyIGl0IGlzIHVzZWZ1bCB0bworCSAgYWxsb3cgdGhlIGNhbGxlciB0byBtYW5pcHVsYXRlIHRoZSB0ZXJtaW5hbCBtb2RlIHRvIGF2b2lkIHN0YWlyY2FzaW5nCisJICBlZmZlY3RzIGFmdGVyIHNwYXduaW5nIGEgcHJvY2VzcyB3aGljaCB3cml0ZXMgbWVzc2FnZXMgKGZvciBseW54CisJICAyLjguNCkgLVRECisJPiBzZXZlcmFsIHBhdGNoZXMgZnJvbSBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0Brb3RuZXQub3JnPjoKKwkrIHJlbW92ZSByZWR1bmRhbnQgdHlwZS1jb252ZXJzaW9uIGluIGZpZm9fcHVzaCgpCisJKyBjb3JyZWN0IGRlZmluaXRpb24gb2YgYWRkd3N0cigpIG1hY3JvIGluIGN1cnNlcy5oLmluCisJKyByZW1vdmUgX25jX3V0Zjhfb3V0Y2goKQorCSsgcmVuYW1lIG1vc3QgZXhpc3RpbmcgdXNlcyBvZiBDaGFyT2YoKSB0byBVQ2hhcigpLCBlLmcuLCB3aGVyZSBpdCBpcworCSAgdXNlZCB0byBwcmV2ZW50IHNpZ24tZXh0ZW5zaW9uIGluIGN0eXBlIG1hY3Jvcy4KKwkrIGNoYW5nZSBzb21lIGNodHlwZSdzIHRvIGF0dHJfdCdzIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhcmlhYmxlcworCSAgYXJlIHVzZWQgdG8gbWFuaXB1bGF0ZSBhdHRyaWJ1dGVzLgorCSsgVXBkYXRlQXR0cigpIHdhcyBhcHBsaWVkIHRvIGJvdGggYXR0cmlidXRlcyAoYXR0cl90KSBhbmQgY2hhcmFjdGVycworCSAgKGNodHlwZSkuICBNb2RpZnkgbWFjcm8gYW5kIGNhbGxzIHRvIGl0IHRvIG1ha2UgdGhlc2UgZGlzdGluY3QuCisJKyBhZGQgQ2hhckVxKCkgbWFjcm8sIHVzZSBpbiBwbGFjZXMgd2hlcmUgd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbgorCSAgaW1wbGVtZW50YXRpb24gdXNlcyBhIHN0cnVjdCBmb3IgY2NoYXJfdC4KKwkrIG1vdmVkIHN0cnVjdCBsZGF0IGludG8gY3Vyc2VzLnByaXYuaCwgdG8gaGlkZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorCSsgY2hhbmdlIENoYXJPZigpIG1hY3JvIHRvIHVzZSBpdCBmb3IgbWFza2luZyBBX0NIQVJURVhUIGRhdGEgZnJvbQorCSAgY2h0eXBlJ3MuCisJKyBhZGQgTCgpIG1hY3JvIHRvIGN1cnNlcy5wcml2LmgsIGZvciBsb25nLWNoYXJhY3RlciBsaXRlcmFscy4KKwkrIHJlcGxhY2Ugc2V2ZXJhbCBhc3NpZ25tZW50cyBmcm9tIHN0cnVjdCBsZGF0IGVudHJpZXMgdG8gY2h0eXBlIG9yCisJICBjaGFyIHZhbHVlcyB3aXRoIGNvbWJpbmF0aW9ucyBvZiBDaGFyT2YoKSBhbmQgQXR0ck9mKCkgbWFjcm9zLgorCSsgYWRkL3VzZSBpbnRlcm1lZGlhdGUgQ2hBdHRyT2YoKSBhbmQgQ2hDaGFyT2YoKSBtYWNyb3Mgd2hlcmUgd2Uga25vdworCSAgd2UgYXJlIHVzaW5nIGNodHlwZSBkYXRhLgorCSsgYWRkL3VzZSBsb3dsZXZlbCBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIG1hY3JvcyBBZGRBdHRyKCksIFJlbUF0dHIoKQorCSAgYW5kIFNldEF0dHIoKS4KKwkrIGFkZC91c2UgU2V0Q2hhcigpIG1hY3JvLCB0byBjaGFuZ2UgYSBjY2hhcl90IGJhc2VkIG9uIGEgY2hhcmFjdGVyIGFuZAorCSAgYXR0cmlidXRlcy4KKwkrIGNvbnZlcnQgbW9zdCBpbnRlcm5hbCB1c2Ugb2YgY2h0eXBlIHRvIE5DVVJTRVNfQ0hfVCwgdG8gc2ltcGxpZnkgdXNlCisJICBvZiBjY2hhcl90IGZvciB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uLiAgU2ltaWxhcmx5LCB1c2UgQVJHX0NIX1QKKwkgIHdoZXJlIGEgcG9pbnRlciB3b3VsZCBiZSBtb3JlIHVzZWZ1bC4KKwkrIGFkZCBzdHVicyBmb3IgdHJhY2luZyBjY2hhcl90IHZhbHVlcy4KKwkrIGFkZC91c2UgbWFjcm8gSVNCTEFOSygpCisJKyBhZGQvdXNlIGNvbnN0cnVjdG9ycyBmb3IgY2NoYXJfdCdzOiBOZXdDaGFyKCksIE5ld0NoYXIyKCkuCisJKyBhZGQvdXNlIG1hY3JvcyBDSFJFRigpLCBDSERFUkVGKCksIEF0dHJPZkQoKSwgQ2hhck9mRCgpIHRvIGZhY2lsaXRhdGUKKwkgIHBhc3NpbmcgY2NoYXJfdCdzIGJ5IGFkZHJlc3MuCisJKyBhZGQvdXNlIFBVVENfREFUQSwgUFVUQygpIG1hY3Jvcy4KKwkrIGZvciB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uLCBtb3ZlIHRoZSB3aW5kb3cgYmFja2dyb3VuZCBkYXRhIHRvCisJICB0aGUgZW5kIG9mIHRoZSBXSU5ET1cgc3RydWN0IHNvIHRoYXQgd2hldGhlciBfWE9QRU5fU09VUkNFX0VYVEVOREVECisJICBpcyBkZWZpbmVkIG9yIG5vdCwgdGhlIG9mZnNldHMgaW4gdGhlIHN0cnVjdCB3aWxsIG5vdCBjaGFuZ2UuCisJKyBtb2RpZnkgYWRkY2goKSB0byB3b3JrIHdpdGggd2lkZS1jaGFyYWN0ZXJzLgorCSsgbWFyayBzZXZlcmFsIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyBhcyBnZW5lcmF0ZWQgaW4gY3Vyc2VzLmguaW4KKwkrIGltcGxlbWVudCB3dW5jdHJsKCksIHdhZGRfd2NoKCksIHdia2dybmRzZXQoKSwgd2JrZ3JuZCgpLAorCSAgd2JvcmRlcl9zZXQoKSBhbmQgd2FkZG53c3RyKCkuCisKKzIwMDEwNTI2CisJKyBhZGQgZXhwZXJpbWVudGFsIC0td2l0aC1jYXBzPVhYWCBvcHRpb24gdG8gY3VzdG9taXplIHRvIHNpbWlsYXIKKwkgIHRlcm1pbmZvIGRhdGFiYXNlIGZvcm1hdHMgc3VjaCBhcyBBSVggNC54CisJKyBhZGQgQ2Fwcy5haXg0IGFzIGFuIGV4YW1wbGUuCisJKyBtb2RpZnkgQ2FwcyB0byBhZGQgY29sdW1ucyBmb3IgdGhlIHRoZSBLRVlfeHh4IHN5bWJvbHMuCisJKyBtb2RpZnkgY29uZmlndXJlIC0td2l0aC13aWRlYyB0byBzdXBwcmVzcyBvdmVyd3JpdGUgb2YgbGliY3Vyc2VzLnNvCisJICBhbmQgY3Vyc2VzLmgKKwkrIGFkZCBjaGVja3MgdG8gdG9lLmMgdG8gYXZvaWQgYmVpbmcgY29uZnVzZWQgYnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCisJICB3aGVyZSB3ZSB3b3VsZCBleHBlY3QgdGhlIHJldmVyc2UsIGUuZy4sIHNvdXJjZS1maWxlcyBpbiB0aGUKKwkgIHRvcC1sZXZlbCB0ZXJtaW5mbyBsZXZlbHMgYXMgaXMgdGhlIGNhc2UgZm9yIEFJWC4KKworMjAwMTA1MTkKKwkrIGFkZCB0b3AtbGV2ZWwgJ2RlcGVuZCcgcnVsZSBmb3IgdGhlIEMgc291cmNlcywgYXNzdW1pbmcgdGhhdCB0aGUKKwkgIG1ha2VkZXBlbmQgcHJvZ3JhbSBpcyBhdmFpbGFibGUuICBBcyBhIHNpZGUtZWZmZWN0LCB0aGlzIG1ha2VzCisJICB0aGUgZ2VuZXJhdGVkIHNvdXJjZXMsIGFzIGluICJtYWtlIHNvdXJjZXMiIChwcm9tcHRlZCBieSBhIHJlcG9ydAorCSAgYnkgTWlrZSBDYXN0bGUgdGhhdCAibWFrZSAtaiIgZmFpbHMgYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHBhcmFsbGVsCisJICBwcm9jZXNzZXMgcmFjZSB0byBnZW5lcmF0ZSBuY3Vyc2VzL25hbWVzLmMpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgc28gdGhhdCAtLWRpc2FibGUtb3ZlcndyaXRlIG9wdGlvbidzIGFjdGlvbgorCSAgdG8gYWRkIGEgc3ltYm9saWMgbGluayBmb3IgbGliY3Vyc2VzIGFwcGxpZXMgdG8gdGhlIHN0YXRpYyBsaWJyYXJ5IGFzCisJICB3ZWxsIGFzIHRoZSBzaGFyZWQgbGlicmFyeSB3aGVuIGJvdGggYXJlIGNvbmZpZ3VyZWQgKHJlcG9ydCBieSBGZWxpeAorCSAgTmF0dGVyIDxmLm5hdHRlckBuZGgubmV0PikuCisJKyBhZGQgRUxLUyB0ZXJtaW5mbyBlbnRyaWVzIChGZWRlcmljbyBCaWFuY2hpCisJICA8YmlhbmNoaUB3d3cuYXJ0ZS51bmlwaS5pdD4pCisJKyBhZGQgdTYgKENTUikgdG8gRXRlcm0gKE1pY2hhZWwgSmVubmluZ3MpLgorCisyMDAxMDUxMgorCSsgbW9kaWZ5IHRlc3QvbmN1cnNlcy5jIHRvIHdvcmsgd2l0aCB4dGVybS0yNTZjb2xvciwgd2hpY2ggaGFzIGZld2VyCisJICBjb2xvciBwYWlycyB0aGFuIGNvbG9ycypjb2xvcnMgKHJlcG9ydCBieSBEYXZpZCBFbGxlbWVudAorCSAgPGVsbGVtZW50QHNkZC5ocC5jb20+KS4KKworMjAwMTA1MDUKKwkrIGNvcnJlY3RlZCBzY3JlZW4ueHRlcm0teGZyZWU4NiBlbnRyeS4KKwkrIHVwZGF0ZSBjb21tZW50IGluIENhcHMgcmVnYXJkaW5nIElCTSAoQUlYKSBmdW5jdGlvbi1rZXkgZGVmaW5pdGlvbnMuCisKKzIwMDEwNDIxCisJKyBtb2RpZnkgYysrL01ha2VmaWxlLmluIHRvIGxpbmsgd2l0aCBsaWJuY3Vyc2VzKyt3LmEgd2hlbiBjb25maWd1cmVkCisJICBmb3Igd2lkZS1jaGFyYWN0ZXJzIChwYXRjaCBieSBTdmVuIFZlcmRvb2xhZWdlKS4KKwkrIGFkZCBjaGVjayBpbiBfbmNfdHJhY2VfYnVmKCkgdG8gcmVmcmFpbiBmcm9tIGZyZWVpbmcgYSBudWxsIHBvaW50ZXIuCisJKyBpbXByb3ZlIENGX1BST0dfSU5TVEFMTCBtYWNybyB1c2luZyBDRl9ESVJOQU1FLgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiBmcm9tIGF1dG9jb25mIDIuNDllIChhbHBoYSkuCisKKzIwMDEwNDE0CisJKyBhZGQgc2Vjb25kYXJ5IGNoZWNrIGluIHRpYy5jLCBzaW1pbGFyX3NncigpIHRvIHNlZSBpZiB0aGUgcmVhc29uCisJICBmb3IgbWlzbWF0Y2ggd2FzIHRoYXQgdGhlIGluZGl2aWR1YWwgY2FwYWJpbGl0aWVzIHVzZWQgYSB0aW1lLWRlbGF5CisJICB3aGlsZSBzZ3IgZGlkIG5vdC4gIFVzZWQgdGhpcyB0byBjbGVhbnVwIG1pc21hdGNoZXMsIGUuZy4sIGluIHZ0MTAwLAorCSAgYW5kIHJlbW92ZSB0aW1lLWRlbGF5IGZyb20gQXBwbGVfVGVybWluYWwgZW50cmllcy4KKwkrIGFkZCBBcHBsZV9UZXJtaW5hbCB0ZXJtaW5mbyBlbnRyaWVzIChCZW5qYW1pbiBDIFcgU2l0dGxlcgorCSAgPGJzaXR0bGVyQGluYW1lLmNvbT4pLgorCSsgY29ycmVjdCBkZWZpbml0aW9ucyBvZiBzaGlmdGVkIGVkaXRpbmcga2V5cyBmb3IgeHRlcm0teGZyZWU4NiAtVEQKKwkrIGZpeCBhIGJ1ZyBpbiB0ZXN0L2JzLmMgZnJvbSAyMDAxMDQwNyAocGF0Y2ggYnkgRXJpayBTaWdyYSkuCisJKyBwcmV2ZW50IHJlbGF0aXZlX21vdmUoKSBmcm9tIGRvaW5nIGFuIG92ZXJ3cml0ZSBpZiBpdCBkZXRlY3RzIDgtYml0CisJICBjaGFyYWN0ZXJzIHdoZW4gY29uZmlndXJlZCBmb3IgVVRGLTggKHJlcG9ydGVkIGJ5IFN2ZW4gVmVyZG9vbGFlZ2UKKwkgIDxza2ltb0Brb3RuZXQub3JnPikuCisKKzIwMDEwNDA3CisJKyBhZGQgY29uZmlndXJlIGNoZWNrcyBmb3Igc3Ryc3RyZWFtLmggdnNjYW4gZnVuY3Rpb24sIGFuZCBzaW1pbGFyCisJICBzdGRpby1iYXNlZCBmdW5jdGlvbiB3aGljaCBtYXkgYmUgdXNlZCBpbiBDKysgYmluZGluZyBmb3IgZ2NjIDMuMAorCSAgKHJlcG9ydHMgYnkgR2VvcmdlIEdvZmZlLCBMYXJzIEhlY2tpbmcsIE1pa2UgQ2FzdGxlKS4KKwkrIHJld3JpdGUgcGFydHMgb2YgY29uZmlndXJlLmluIHdoaWNoIHVzZWQgY2hhbmdlcXVvdGUoKS4gIFRoYXQgZmVhdHVyZQorCSAgaXMgYnJva2VuIGluIHRoZSBsYXRlc3QgYXV0b2NvbmYgYWxwaGFzIChlLmcuLCAyLjQ5ZCkuCisJKyBhZGQgYSBtaXNzaW5nIHBhdGhuYW1lIGZvciBuY3Vyc2VzX2RsbC5oLCBuZWVkZWQgd2hlbiBidWlsZGluZyBpbgorCSAgYSBkaXJlY3Rvcnkgb3V0c2lkZSB0aGUgc291cmNlIHRyZWUgKHBhdGNoIGJ5IFN2ZW4gVmVyZG9vbGFlZ2UKKwkgIDxza2ltb0Brb3RuZXQub3JnPikuCisJPiBmaXggMiBidWdzIGluIHRlc3QvYnMuYyBFcmlrIFNpZ3JhIDxzaWdyYUBob21lLnNlPjoKKwkrIG5vIHNoaXBzIHdlcmUgZXZlciBwbGFjZWQgaW4gdGhlIGxhc3Qgcm93IG9yIGluIHRoZSBsYXN0IGNvbHVtbi4KKwkgIFRoaXMgbWFkZSB0aGUgZ2FtZSB2ZXJ5IGVhc3kgdG8gd2luLCBiZWNhdXNlIHlvdSBuZXZlciBoYWQgdG8gd2FzdGUKKwkgIGFueSBzaG90cyB0aGVyZSwgYnV0IHRoZSBjb21wdXRlciBkaWQuCisJKyB0aGUgc3F1YXJlcyBhcm91bmQgYSBzdW5rZW4gc2hpcCB0aGF0IGJlbG9uZ2VkIHRvIHRoZSBwbGF5ZXIgd2VyZSBub3QKKwkgIGRpc3BsYXllZCBhcyBhbHJlYWR5IGhpdCBieSB0aGUgY29tcHV0ZXIsIGxpa2UgaXQgZG9lcyBmb3IgdGhlCisJICBwbGF5ZXIuCisKKzIwMDEwMzMxCisJKyBhZGQgc29tZSBleGFtcGxlcyBvZiBjdXN0b21pemluZyBzY3JlZW4ncyB0ZXJtaW5mbzoKKwkgIHNjcmVlbi54dGVybS14ZnJlZTg2LCBzY3JlZW4ueHRlcm0tcjYsIHNjcmVlbi50ZXJhdGVybSAtVEQKKwkrIG1vZGlmeSBzY3JlZW4ncyB0ZXJtaW5mbyBlbnRyeSB0byBtYXRjaCB0aGUga2hvbWUva2VuZCBpbiBzY3JlZW4KKwkgIDMuMDkuMDggKERlYmlhbiBidWcgcmVwb3J0ICM5MjIxNSkuCisJKyBjb3JyZWN0IGEgbWVtb3J5IGxlYWsgaW4gZm9ybXMgbGlicmFyeSAocmVwb3J0IGJ5IFN0ZWZhbiBWb2d0bmVyCisJICA8c3RlZmFuQHZvZ3RuZXIuZGU+KSAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworMjAwMTAzMjQKKwkrIGNoYW5nZSBzeW1ib2xzIHVzZWQgdG8gZ3VhcmQgYWdhaW5zdCByZXBlYXRlZCBpbmNsdWRlcyB0byBiZWdpbgorCSAgY29uc2lzdGVudGx5IHdpdGggIk5DVVJTRVNfIiByYXRoZXIgdGhhbiBhIGxlYWRpbmcgdW5kZXJzY29yZS4gIFRoZXJlCisJICBhcmUgb3RoZXIgc3ltYm9scyBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZXMgd2hpY2ggYmVnaW4gd2l0aCBhCisJICBsZWFkaW5nIHVuZGVyc2NvcmUsIGJ1dCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBsZWdhY3kgaW50ZXJmYWNlLgorCSsgcmVvcmRlciBpbmNsdWRlcyBpbiBjKysgYmluZGluZyBzbyB0aGF0IHJjcyBpZGVudGlmaWVycyBjYW4gYmUKKwkgIGNvbXBpbGVkLWluLgorCSsgYWRkIC5jYy5paSBydWxlIHRvIGMrKyBtYWtlZmlsZSwgdG8gZ2V0IHByZXByb2Nlc3NvciBvdXRwdXQgZm9yCisJICBkZWJ1Z2dpbmcuCisJKyBjb3JyZWN0IGNvbmZpZ3VyZSBzY3JpcHQgaGFuZGxpbmcgb2YgQGtleXdvcmRAIHN1YnN0aXR1dGlvbnMgd2hlbiB0aGUKKwkgIC0td2l0aC1tYW5wYWdlLXJlbmFtZXMgb3B0aW9uIGlzIGdpdmVuIChjZjogIDIwMDAwNzE1LCBmaXhlcyBEZWJpYW4KKwkgIGJ1ZyAjODk5MzkpLgorCSsgcmVwb3J0IHN0YWNrIHVuZGVyZmxvdy9vdmVyZmxvdyBpbiB0cGFybSgpIHdoZW4gdGljIC1jdiBvcHRpb24gaXMKKwkgIGdpdmVuLgorCSsgcmVtb3ZlIHNwdXJpb3VzICIlfCIgb3BlcmF0b3IgZnJvbSB4dGVybS14ZnJlZTg2IHRlcm1pbmZvIGVudHJ5LAorCSAgKHJlcG9ydGVkIGJ5IEFkYW0gQ29zdGVsbG8gPGFtY0Bjcy5iZXJrZWxleS5lZHU+LCBEZWJpYW4gYnVnICM4OTIyMikuCisKKzIwMDEwMzEwCisJKyBjbGVhbnVwIG9mIG5ld2RlbW8uYywgZml4aW5nIHNvbWUgYW1iaWd1b3VzIGV4cHJlc3Npb25zIG5vdGVkIGJ5IGdjYworCSAgMi45NS4yLCBhbmQgY29ycmVjdGluZyBzb21lIGNvbmZsaWN0aW5nIGNvbG9yIHBhaXIgaW5pdGlhbGl6YXRpb25zLgorCSsgYWRkIG1pc3NpbmcgY29weXJpZ2h0IG5vdGljZSBmb3IgY3Vyc2Vzdy5oCisJKyByZXZpZXcsIG1ha2UgbWlub3IgZml4ZXMgZm9yIHVzZSBvZiAnOjonIGZvciByZWZlcnJpbmcgdG8gQy1sYW5ndWFnZQorCSAgaW50ZXJmYWNlIGZyb20gQysrIGJpbmRpbmcuCisJKyBtb2RpZnkgY29uZmlndXJlIGNoZWNrIGZvciBnKysgbGlicmFyeSBzbGlnaHRseSB0byBhY2NvbW1vZGF0ZQorCSAgbm9uc3RhbmRhcmQgdmVyc2lvbiBudW1iZXIsIGUuZy4sIDx2ZW5kb3I+LTIuNyAocmVwb3J0IGJ5IFJvbmFsZCBIbworCSAgPHJob0BtaXBvczIuaW50ZWwuY29tPikuCisJKyBhZGQgY29uZmlndXJlIGNoZWNrIGZvciBjKysgPHNzdHJlYW0+IGhlYWRlciwgcmVwbGFjZSBoYXJkY29kZWQKKwkgIGlmZGVmLgorCSsgd29ya2Fyb3VuZCBmb3IgcHJlLXJlbGVhc2Ugb2YgZ2NjIDMuMCBsaWJzdGRjKyssIHdoaWNoIGhhcyBkcm9wcGVkCisJICB2c2NhbiBmcm9tIHN0cnN0cmVhbWJ1ZiB0byBmb2xsb3cgc3RhbmRhcmQsIHVzZSB3cmFwcGVyIGZvciBDIHZzY2FuZgorCSAgaW5zdGVhZCAocmVwb3J0IGJ5IEdlb3JnZSBHb2ZmZSA8Z3Jnb2ZmZUBleGNpdGUuY29tPiBhbmQgTWF0dCBUYWdnYXJ0CisJICA8dGFnZ2FydEBjYXJtZW4uZmMuaHAuY29tPiwgZml4ZXMgRGViaWFuIC4KKworMjAwMTAzMDMKKwkrIG1vZGlmeSBpbnRlcmZhY2Ugb2YgX25jX2dldF90b2tlbigpIHRvIHBhc3MgJ3NpbGVudCcgcGFyYW1ldGVyIHRvIGl0LAorCSAgdG8gbWFrZSBxdWlldGVyIGxvYWRpbmcgb2YgL2V0Yy90ZXJtY2FwIChwYXRjaCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIGNvcnJlY3QgYSBmZXcgdHlwb3MgaW4gY3Vyc19zbGsuM3ggYW5kIGN1cnNfb3V0b3B0cy4zeCBtYW5wYWdlcworCSAgKHBhdGNoIGJ5IFRvZGQgQyBNaWxsZXIpLgorCisyMDAxMDIyNAorCSsgY29tcGlsZXItd2FybmluZyBmaXhlcyAocmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlKS4KKworMjAwMTAyMTAKKwkrIG1vZGlmeSBzY3JlZW4gdGVybWluZm8gZW50cnkgdG8gdXNlIG5ldyAzLjkuOCBmZWF0dXJlIGFsbG93aW5nIHh0ZXJtCisJICBtb3VzZSBjb250cm9scyAtVEQKKworMjAwMTAyMDMKKwkrIGJyb2FkZW4gcGF0dGVybnMgdXNlZCB0byBtYXRjaCBPUy8yIEVNWCBpbiBjb25maWd1cmUgc2NyaXB0IHRvIGNvdmVyCisJICB2YXJpYW50IHVzZWQgaW4gbmV3ZXIgY29uZmlnLmd1ZXNzL2NvbmZpZy5zdWIKKwkrIHJlbW92ZSBjaGFuZ2VxdW90ZSgpIGNhbGxzIGZyb20gY29uZmlndXJlIHNjcmlwdCwgc2luY2UgdGhpcyBmZWF0dXJlCisJICBpcyBicm9rZW4gaW4gdGhlIGF1dG9jb25mIDIuNDljIGFscGhhLCBtYWludGFpbmVycyBkZWNsaW5lIHRvIGZpeC4KKwkrIHJlbW92ZSBtYWNybyBjYWxsUHV0Q2hhcigpIGZyb20gdHR5X3VwZGF0ZS5jLCBzaW5jZSB0aGlzIGlzIG5vIGxvbmdlcgorCSAgbmVlZGVkIChyZXBvcnRlZCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyBhZGQgYSBudWxsLXBvaW50ZXIgY2hlY2sgaW4gdGljLmMgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhlIGlucHV0CisJICBmaWxlIGlzIHJlYWxseSBlbXB0eS4gIE1vZGlmeSB0aGUgbmV4dF9jaGFyKCkgZnVuY3Rpb24gaW4gY29tcF9zY2FuLmMKKwkgIHRvIGFsbG93IGFyYml0cmFyaWx5IGxvbmcgbGluZXMsIGFuZCBpbmNpZGVudGFsbHkgc3VwcGx5IGEgbmV3bGluZSB0bworCSAgZmlsZXMgdGhhdCBkbyBub3QgZW5kIGluIGEgbmV3bGluZS4gIFRoZXNlIGNoYW5nZXMgaW1wcm92ZSB0aWMncworCSAgcmVjb3ZlcnkgZnJvbSBhdHRlbXB0cyB0byByZWFkIGJpbmFyeSBmaWxlcywgZS5nLiwgaXRzIG91dHB1dCBmcm9tCisJICB0aGUgdGVybWluZm8gZGF0YWJhc2UgKHJlcG9ydGVkIGJ5IEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIpLgorCisyMDAxMDEyNworCSsgcmV2ZXJ0IGNoYW5nZSB0byBjKysvZGVtby5jYyBmcm9tIDIwMDAxMjA5LCB3aGljaCBjaGFuZ2VkIGRlZmluaXRpb24KKwkgIG9mIG1haW4oKSBhcHBhcmVudGx5IHRvIGFjY29tbW9kYXRlIGN5Z3dpbiBsaW5rZXIsIGJ1dCBicm9rZSB0aGUgZGVtbworCSAgcHJvZ3JhbS4KKwkrIHdvcmthcm91bmQgZm9yIGJyb2tlbiBlZ2NzIDIuOTEuNjYgd2hpY2ggY2FsbHMgbWVtYmVyIGZ1bmN0aW9ucworCSAgKGkuZS4sIGxpbmVzKCkgYW5kIGNvbG9ycygpIG9mIE5DdXJzZXNXaW5kb3cgYmVmb3JlIGNhbGxpbmcgaXRzCisJICBjb25zdHJ1Y3Rvci4gIEFkZCBjYWxscyB0byBpbml0aWFsaXplKCkgaW4gYSBmZXcgY29uc3RydWN0b3JzIHdoaWNoCisJICBkaWQgbm90IGRvIHRoaXMgYWxyZWFkeS4KKwkrIHVzZSB0aGUgR05BVCBwcmVwcm9jZXNzb3IgdG8gbWFrZSB0aGUgbmVjZXNzYXJ5IHN3aXRjaCBiZXR3ZWVuIFRSQUNFCisJICBhbmQgTk9fVFJBQ0UgY29uZmlndXJhdGlvbnMgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJPiBwYXRjaGVzIGJ5IEJlcm5oYXJkIFJvc2Vua3JhZW56ZXI6CisJKyBtb2RpZnkga3Rlcm0gdGVybWluZm8gZW50cnkgdG8gdXNlIFNDUyBzZXF1ZW5jZSB0byBzdXBwb3J0IGFsdGVybmF0ZQorCSAgY2hhcmFjdGVyIHNldCAoaXQgZG9lcyBub3Qgd29yayB3aXRoIFNJL1NPKS4KKwkrIC0td2l0aC1vc3BlZWQ9c29tZXRoaW5nIGRpZG4ndCB3b3JrLiAgY29uZmlndXJlLmluIGNoZWNrZWQgZm9yIGEKKwkgICRlbmFibGV2YWwgd2hlcmUgaXQgc2hvdWxkIGNoZWNrIGZvciAkd2l0aHZhbC4gIEFsc28sCisJICBuY3Vyc2VzL2xsaWItbG5jdXJzZXMgc3RpbGwgaGFkIGEgaGFyZGNvZGVkIHNob3J0LgorCisyMDAxMDExNAorCSsgY29ycmVjdGlvbiB0byBteSBtZXJnZSBvZiBUb20gUmlkZGxlJ3MgcGF0Y2ggdGhhdCBicm9rZSB0aWMgaW4gc29tZQorCSAgY29uZGl0aW9ucyAocmVwb3J0ZWQgYnkgRW5vY2ggV2V4bGVyIDxlbm9jaEB3ZXhsZXIuY28uaWw+KSAtVEQKKworMjAwMTAxMTMKKwkrIG1vZGlmeSB2aWV3LmMgdG8gdGVzdCBoYWxmZGVsYXkoKS4gIExpa2Ugb3RoZXIgdGVzdHMsIHRoaXMgcmVjb2duaXplcworCSAgdGhlICdzJyBhbmQgc3BhY2UgY29tbWFuZHMgZm9yIHN0b3BwaW5nL3N0YXJ0aW5nIHBvbGxlZCBpbnB1dCwgc2hvd3MKKwkgIGEgZnJlZXJ1bm5pbmcgY2xvY2sgaW4gdGhlIGhlYWRlci4gIElmIGdpdmVuIGEgcGFyYW1ldGVyIHRvICdzJywgdGhhdAorCSAgbWFrZXMgdmlldy5jIHVzZSBoYWxmZGVsYXkoKSB3aXRoIHRoYXQgcGFyYW1ldGVyIHJhdGhlciB0aGFuCisJICBub2RlbGF5KCkuCisJKyBmaXggdG8gYWxsb3cgY29tcGlsZSB3aXRoIHRoZSBleHBlcmltZW50YWwgY29uZmlndXJlIG9wdGlvbgorCSAgLS1kaXNhYmxlLWhhc2htYXAuCisJKyBtb2RpZnkgcG9zdHByb2Nlc3NfdGVybWNhcCgpIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGtleV9iYWNrc3BhY2UsCisJICBrZXlfbGVmdCwga2V5X2Rvd24gd2hlbiBwcm9jZXNzaW5nIGEgbm9uLWJhc2UgZW50cnkgKHJlcG9ydC9wYXRjaCBieQorCSAgVG9tIFJpZGRsZSkuCisJKyBtb2RpZnkgX25jX3dyYXBfZW50cnkoKSwgYWRkaW5nIG9wdGlvbiB0byByZWFsbG9jYXRlIHRoZSBzdHJpbmcKKwkgIHRhYmxlLCBuZWVkZWQgaW4gX25jX21lcmdlX2VudHJ5KCkgd2hlbiBtZXJnaW5nIHRlcm1jYXAgZW50cmllcy4KKwkgIChhZGFwdGVkIGZyb20gcmVwb3J0L3BhdGNoIGJ5IFRvbSBSaWRkbGUgPGZ0ckBvcmFjb20uY29tPikuCisJKyBtb2RpZnkgYSBmZXcgY29uZmlndXJlIHNjcmlwdCBtYWNyb3MgdG8ga2VlcCAkQ0ZMQUdTIHVzZWQgb25seSBmb3IKKwkgIGNvbXBpbGVyIG9wdGlvbnMsIHByZXByb2Nlc3NvciBvcHRpb25zIGluICRDUFBGTEFHUy4KKworMjAwMDEyMzAKKwkrIGNvcnJlY3QgbWFya2VyIHBvc2l0aW9ucyBpbiBscnRlc3QuYyBhZnRlciByZWNlaXZpbmcgYSBzaWd3aW5jaC4KKwkrIGZpeCBpZmRlZidzIGluIG5jdXJzZXMuYyB0byBidWlsZCBhZ2FpbnN0IHByZS01LjIgZm9yIHRlc3RpbmcuCisJKyBmaXhlcyB0byB0Y2xvY2sgZm9yIHJlc2l6aW5nIGJlaGF2aW9yLCByZWR1bmRhbnQgY29tcHV0YXRpb24gKHJlcG9ydAorCSAgYW5kIHBhdGNoIGJ5IEEgTSBLdWNobGluZyA8YWt1Y2hsaW5AbWVtcy1leGNoYW5nZS5vcmc+KS4KKworMjAwMDEyMTYKKwkrIGltcHJvdmVkIHNjb2Fuc2kgdGVybWluZm8gZW50cnkgLVRECisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBhbmQgbWFrZWZpbGUgaW4gQWRhOTUvc3JjIHRvIGNvbXBpbGUgYSBzdHViCisJICBmb3IgdGhlIHRyYWNlIGZ1bmN0aW9ucyB3aGVuIG5jdXJzZXMgZG9lcyBub3QgcHJvdmlkZSB0aG9zZS4KKworMjAwMDEyMDkKKwkrIGFkZCBuY3Vyc2VzX2RsbC5oIGFuZCByZWxhdGVkIGRlZmluaXRpb25zIHRvIHN1cHBvcnQgZ2VuZXJhdGluZyBETEwncworCSAgd2l0aCBjeWd3aW4gKGFkYXB0ZWQgZnJvbSBhIHBhdGNoIGJ5IENoYXJsZXMgV2lsc29uCisJICA8Y3dpbHNvbkBlY2UuZ2F0ZWNoLmVkdT4sIGNoYW5nZWQgTkNVUlNFU19FWFBPUlQgbWFjcm8gdG8gbWFrZSBpdAorCSAgd29yayB3aXRoICdpbmRlbnQnKSAtVEQKKworMjAwMDEyMDIKKwkrIGNvcnJlY3QgcHJvdG90eXBlcyBmb3Igc29tZSBmdW5jdGlvbnMgaW4gY3Vyc190ZXJtY2FwLjN4LCBtYXRjaGluZworCSAgdGVybWNhcC5oLCB3aGljaCBtYXRjaGVzIFgvT3Blbi4KKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGEgcmV2aXNlZCB2ZXJzaW9uIG9mIHRoZSBBZGEgZW5oYW5jZW1lbnRzIHNlbnQgaW4gYnkgIkguCisJICBOYW5vc2Vjb25kIiwgYWthIEV1Z2VuZSBWIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPi4gIFRoaXMKKwkgIHBhdGNoIGluY2x1ZGVzCisJICAtIHNtYWxsIGZpeGVzIHRvIHRoZSBleGlzdGluZyBuY3Vyc2VzIGJpbmRpbmcKKwkgIC0gYWRkaXRpb24gb2Ygc29tZSBtb3JlIGxvdy1sZXZlbCBmdW5jdGlvbnMgdG8gdGhlIGJpbmRpbmcsIGluY2x1ZGluZworCSAgICB0ZXJtY2FwIGFuZCB0ZXJtaW5mbyBmdW5jdGlvbnMKKwkgIC0gQW4gQWRhIGltcGxlbWVudGF0aW9uIG9mIHRoZSAibmN1cnNlcyIgdGVzdCBhcHBsaWNhdGlvbiBvcmlnaW5hbGx5CisJICAgIHdyaXR0ZW4gaW4gQy4KKworMjAwMDExMjUKKwkrIG1vZGlmeSBsb2dpYyBpbiBsaWJfc2V0dXAuYyB0byBhbGxvdyBlaXRoZXIgbGluZXMgb3IgY29sdW1ucyB2YWx1ZQorCSAgZnJvbSB0ZXJtaW5mbyB0byBiZSB1c2VkIGlmIHRoZSBzY3JlZW4gc2l6ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZAorCSAgZHluYW1pY2FsbHkgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGJvdGggKHBhdGNoIGJ5IEVodWQgS2FybmkKKwkgIDxlaHVkQHVuaXguc2ltb253aWVzZWwuY28uaWw+KS4KKwkrIGFkZCBjaGVjayBpbiBsaWJfdGdvdG8uYydzIGlzX3Rlcm1jYXAoKSBmdW5jdGlvbiB0byByZWplY3QgbnVsbCBvcgorCSAgZW1wdHkgc3RyaW5ncyAocmVwb3J0ZWQgYnkgVmFsZW50aW4gTmVjaGF5ZXYgPG5ldGNoQG5ldGNoLmtpZXYudWE+IHRvCisJICBmcmVlYnNkLWJ1Z3MpLgorCSsgYWRkIGRlZmluaXRpb24gZnJvbSBjb25maWd1cmUgc2NyaXB0IHRoYXQgZGVub3RlcyB0aGUgcGF0aC1zZXBhcmF0b3IsCisJICB3aGljaCBpcyBub3JtYWxseSBhIGNvbG9uLiAgVGhlIHBhdGgtc2VwYXJhdG9yIGlzIGEgc2VtaWNvbG9uIG9uCisJICBPUy8yIEVNWCBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIG1heSB1c2UgYSBjb2xvbiB3aXRoaW4gcGF0aG5hbWVzLgorCSsgYWx0ZXIgbG9naWMgdG8gc2V0IGRlZmF1bHQgZm9yIC0tZGlzYWJsZS1vdmVyd3JpdGUgb3B0aW9uIHRvIHNldCBpdAorCSAgdG8gJ3llcycgaWYgdGhlIC0tcHJlZml4LyRwcmVmaXggdmFsdWUgaXMgbm90IC91c3IvbG9jYWwsIHRoZXJlYnkKKwkgIGFjY29tbW9kYXRpbmcgdGhlIG1vc3QgY29tbW9uIGNhdXNlIG9mIHByb2JsZW1zOiBnY2MncyBub25zdGFuZGFyZAorCSAgc2VhcmNoIHJ1bGVzLiAgT3RoZXIgbG9jYXRpb25zIHN1Y2ggYXMgL3Vzci9sb2NhbC9uY3Vyc2VzIHdpbGwKKwkgIGRlZmF1bHQgdG8gb3ZlcndyaXRpbmcgKHJlcG9ydCBieSBMYXJzIEhlY2tpbmcgPGxoZWNraW5nQG5tcmMuaWU+KS4KKworMjAwMDExMTgKKwkrIG1vZGlmeSBkZWZhdWx0IGZvciAtLWRpc2FibGUtb3ZlcndyaXRlIGNvbmZpZ3VyZSBvcHRpb24gdG8gZGlzYWJsZQorCSAgaWYgdGhlIC0tcHJlZml4IG9yICRwcmVmaXggdmFsdWUgaXMgbm90IC91c3IuCisJKyBhZGQgY3lnd2luIHRvIHN5c3RlbXMgZm9yIHdoaWNoIG5jdXJzZXMgaXMgaW5zdGFsbGVkIGJ5IGRlZmF1bHQgaW50bworCSAgL3VzciByYXRoZXIgdGhhbiAvdXNyL2xvY2FsLgorCisyMDAwMTExMQorCSsgbWlub3Igb3B0aW1pemF0aW9uIGluIGNvbXBfZXJyb3IuYyBhbmQgbGliX3Rlcm1uYW1lLmMsIHVzaW5nCisJICBzdHJuY2F0KCkgdG8gcmVwbGFjZSBzdHJuY3B5KCkgKHBhdGNoIGJ5IFNvbGFyIERlc2lnbmVyKS4KKwkrIGFkZCBhIHVzZV90ZXJtaW5mb192YXJzKCkgY2hlY2sgZm9yICRIT01FLy50ZXJtY2FwLCBhbmQgY2hlY2sgZm9yCisJICBnZXRldWlkKCkgdG8gdXNlX3Rlcm1pbmZvX3ZhcnMoKSAocGF0Y2ggYnkgU29sYXIgRGVzaWduZXIKKwkgIDxzb2xhckBmYWxzZS5jb20+KS4KKwkrIGltcHJvdmVkIGN5Z3dpbiB0ZXJtaW5mbyBlbnRyeSwgYmFzZWQgb24gcGF0Y2ggYnkKKwkgIDxlcm5pZV9ib3lkQHlhaG9vLmNvbT4uCisJKyBtb2RpZnkgX25jX3dyaXRlX2VudHJ5KCkgdG8gYWxsb3cgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGxpbmtpbmcKKwkgIGFsaWFzZXMgb24gYSBmaWxlc3lzdGVtIHRoYXQgaWdub3JlcyBjYXNlIHdvdWxkIG5vdCBzdWNjZWVkIGJlY2F1c2UKKwkgIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciBvbmx5IGJ5IGNhc2UsIGUuZy4sIE5DUjI2MFZUMzAwV1BQMAorCSAgb24gY3lnd2luIChyZXBvcnQgYnkgTmVpbCBaYW5lbGxhKS4KKwkrIGZpeCBhIHR5cG8gaW4gdGhlIGN1cnNfZGVsZXRlbG4uM3ggbWFuIHBhZ2UgKHBhdGNoIGJ5IEJlcm5oYXJkCisJICBSb3NlbmtyYWVuemVyIDxiZXJvQHJlZGhhdC5kZT4pLgorCisyMDAwMTEwNAorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLW9zcGVlZCB0byBhc3Npc3QgcGFja2FnZXJzIGluIHRyYW5zaXRpb24KKwkgIHRvIDUuMyBjaGFuZ2UgdG8gb3NwZWVkIHR5cGUuCisJKyBhZGQvdXNlIENoYXJPZigpIG1hY3JvIHRvIHN1cHByZXNzIHNpZ24tZXh0ZW5zaW9uIG9mIGNoYXIgdHlwZSBvbgorCSAgcGxhdGZvcm1zIHdoZXJlIHRoaXMgaXMgYSBwcm9ibGVtIGluIGN0eXBlIG1hY3JvcywgZS5nLiwgU29sYXJpcy4KKwkrIGNoYW5nZSB0cmFjZSBvdXRwdXQgdG8gYmluYXJ5IGZvcm1hdC4KKwkrIGNvcnJlY3QgYSBtaXNzaW5nIHF1b3RlIGFkanVzdG1lbnQgaW4gQ0ZfUEFUSF9TWU5UQVggYXV0b2NvbmYKKwkgIG1hY3JvLCBmb3IgT1MvMiBFTVggY29uZmlndXJhdGlvbi4KKwkrIHJlYXJyYW5nZSBhIGZldyBjb25maWd1cmUgbWFjcm9zLCBtb3ZpbmcgcHJlcHJvY2Vzc29yIG9wdGlvbnMgdG8KKwkgICRDUFBGTEFHUyAoYSBub3ctb2Jzb2xldGUgdmVyc2lvbiBvZiBhdXRvY29uZiBkaWQgbm90IGNvbnNpc3RlbnRseQorCSAgdXNlICRDUFBGTEFHUyBpbiBib3RoIHRoZSBjb21waWxlIGFuZCBwcmVwcm9jZXNzb3IgY2hlY2tzKS4KKwkrIGFkZCBhIGNoZWNrIGluIHJlbGF0aXZlX21vdmUoKSB0byBndWFyZCBhZ2FpbnN0IGJ1ZmZlciBvdmVyZmxvdyBpbgorCSAgdGhlIG92ZXJ3cml0ZSBsb2dpYy4KKworMjAwMDEwMjgKKwkrIGFkZCBtZXNzYWdlIHRvIGNvbmZpZ3VyZSBzY3JpcHQgc2hvd2luZyBnKysgdmVyc2lvbi4KKwkrIHJlc3luYyBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKwkrIG1vZGlmeSBsaWJfZGVsd2luLmMsIG1ha2luZyBpdCByZXR1cm4gRVJSIGlmIHRoZSB3aW5kb3cgZGlkIG5vdCBleGlzdAorCSAgKHN1Z2dlc3RlZCBieSBOZWlsIFphbmVsbGEpLgorCSsgYWRkIGNhc2VzIGZvciBGcmVlQlNEIDMuMSB0byB0ZGxpbnQgYW5kIG1ha2VsbGliIHNjcmlwdHMsIHVzZWQgdGhpcworCSAgdG8gdGVzdC9yZXZpZXcgbmN1cnNlcyBsaWJyYXJ5LiAgKFdvdWxkIHVzZSBsY2xpbnQsIGJ1dCBpdCBkb2Vzbid0CisJICB3b3JrKS4KKwkrIHJlb3JnYW5pemVkIGtuaWdodC5jIHRvIGF2b2lkIGZvcndhcmQgcmVmZXJlbmNlcy4gIENvcnJlY3Qgc2NyZWVuCisJICB1cGRhdGVzIHdoZW4gYmFja3RyYWNraW5nLCBlc3BlY2lhbGx5IHRvIHRoZSBmaXJzdCBjZWxsLiAgQWRkIEYvQi9hCisJICBjb21tYW5kcy4KKworMjAwMDEwMjEgNS4yIHJlbGVhc2UgZm9yIHVwbG9hZCB0byBmdHAuZ251Lm9yZworCSsgdXBkYXRlIGdlbmVyYXRlZCBodG1sIGZpbGVzIGZyb20gbWFucGFnZXMuCisJKyBtb2RpZnkgZGlzdC5tayB0byB1c2UgZWRpdF9tYW4uc2ggdG8gc3Vic3RpdHV0ZSBhdXRvY29uZidkIHZhcmlhYmxlcworCSAgaW4gaHRtbCBtYW5wYWdlcy4KKwkrIGZpeCBhbiB1bmluaXRpYWxpemVkIHBvaW50ZXIgaW4gcmVhZF90ZXJtY2FwLmMgKHJlcG9ydCBieSBUb2RkIEMKKwkgIE1pbGxlciwgZnJvbSByZXBvcnQvcGF0Y2ggYnkgUGhpbGlwIEd1ZW50aGVyIDxndWVudGhlckBnYWMuZWR1PikuCisJKyBjb3JyZWN0IGhlbHAtbWVzc2FnZSBhbmQgYXJyYXkgbGltaXQgaW4ga25pZ2h0LmMgKHBhdGNoIGJ5IEJyaWFuCisJICBSYWl0ZXIgPGJyZWFkYm94QG11cHBldGxhYnMuY29tPikuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBmaXggdG8gYXZvaWQgd2FybmluZyBieSBHTkFULTMuMTNwIGFib3V0IHVzZSBvZiBpbmNvbnNpc3RlbnQgY2FzaW5nCisJICBmb3Igc29tZSBpZGVudGlmaWVycyBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCBwYWNrYWdlLgorCSsgY29zbWV0aWMgY2hhbmdlIHRvIGZvcm1zL2Z0eV9lbnVtLmMKKworMjAwMDEwMTQKKwkrIGNvcnJlY3QgYW4gb2ZmLWJ5LW9uZSBwb3NpdGlvbiBpbiB0ZXN0L3JhaWxyb2FkLmMgd2hpY2ggY291bGQgY2F1c2UKKwkgIHdyYXBwaW5nIGF0IHRoZSByaWdodCBtYXJnaW4uCisJKyB0ZXN0L3JlcGFpciBzb21lIGlzc3VlcyB3aXRoIGxpYnRvb2wgY29uZmlndXJhdGlvbi4gIE1ha2UKKwkgIC0tZGlzYWJsZS1lY2hvIGZvcmNlIGxpYnRvb2wgLS1zaWxlbnQuICAoTGlidG9vbCBkb2VzIG5vdCB3b3JrIGZvcgorCSAgT1MvMiBFTVgsIHdvcmtzIHBhcnRseSBmb3IgU0NPIC0gbGlidG9vbCBpcyBzdGlsbCB2ZXJ5IHNwZWNpZmljIHRvCisJICBnY2MpLgorCSsgY2hhbmdlIGRlZmF1bHQgb2YgLS13aXRoLW1hbnBhZ2UtdGJsIHRvICJubyIsIHNpbmNlIGZvciBtb3N0IG9mIHRoZQorCSAgcGxhdGZvcm1zIHdoaWNoIGRvIGhhdmUgdGJsIGluc3RhbGxlZCwgdGhlIHN5c3RlbSAibWFuIiBwcm9ncmFtCisJICB1bmRlcnN0YW5kcyBob3cgdG8gcnVuIHRibCBhdXRvbWF0aWNhbGx5LgorCSsgbWlub3IgaW1wcm92ZW1lbnQgdG8gZm9yY2VfYmFyKCkgaW4gY29tcF9wYXJzZS5jIChCZXJuaGFyZAorCSAgUm9zZW5rcmFlbnplciA8YmVyb0ByZWRoYXQuZGU+KS4KKwkrIG1vZGlmeSBsaWJfdHBhcm0uYyB0byB1c2UgZ2V0X3NwYWNlKCkgYmVmb3JlIHdyaXRpbmcgdGVybWluYXRpbmcKKwkgIG51bGwgY2hhcmFjdGVyLCBib3RoIGZvciBjb25zaXN0ZW5jeSBhcyB3ZWxsIGFzIHRvIGVuc3VyZSB0aGF0IGlmCisJICBzYXZlX2NoYXIoKSB3YXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSwgdGhhdCB0aGUgYWxsb2NhdGVkIG1lbW9yeQorCSAgaXMgZW5vdWdoIChwYXRjaCBieSBTZXJnZWkgSXZhbm92KS4KKwkrIGFkZCBub3RlIGFib3V0IHRlcm1jYXAgTUwgY2FwYWJpbGl0eSB3aGljaCBpcyBkdXBsaWNhdGVkIGJldHdlZW4gdHdvCisJICBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzOiAgc21nbCBhbmQgc21nbHIgKHJlcG9ydGVkIGJ5IFNlcmdlaSBJdmFub3YKKwkgIDxzdml2YW5vdkBwZG1pLnJhcy5ydT4pLgorCSsgY29ycmVjdCBwYXJhbWV0ZXIgY291bnRzIGluIGluY2x1ZGUvQ2FwcyBmb3IgZGNsayBhcyB3ZWxsIGFzIHNvbWUKKwkgIHByaW50ZXItc3BlY2lmaWMgY2FwYWJpbGl0aWVzOiBjc25tLCBkZWZjLCBzY3MsIHNjc2QsIHNtZ3RwLCBzbWdscC4KKwk+IHBhdGNoIGJ5IEpvaG5ueSBDIExhbSA8bGFtakBzdGF0LmNtdS5lZHU+OgorCSsgYWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpdGggbGlidG9vbCAoYXBwYXJlbnRseSB2ZXJzaW9uIDEuMy41LAorCSAgc2luY2Ugb2xkIHZlcnNpb25zIGRvIG5vdCBoYW5kbGUgLUwuLi9saWIpLCB1c2luZyBuZXcgY29uZmlndXJlCisJICBvcHRpb24gLS13aXRoLWxpYnRvb2wuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtbWFucGFnZS10YmwsIHdoaWNoIGNhdXNlcyB0aGUgbWFucGFnZXMgdG8KKwkgIGJlIHByZXByb2Nlc3NlZCBieSB0YmwoMSkgcHJpb3IgdG8gaW5zdGFsbGF0aW9uLAorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRob3V0LWN1cnNlcy1oLCB3aGljaCBjYXVzZXMgdGhlCisJICBpbnN0YWxsYXRpb24gcHJvY2VzcyB0byBpbnN0YWxsIGN1cnNlcy5oIGFzIG5jdXJzZXMuaCBhbmQgbWFrZQorCSAgYXBwcm9wcmlhdGUgY2hhbmdlcyB0byBoZWFkZXJzIGFuZCBtYW5wYWdlcy4KKworMjAwMDEwMDkKKwkrIGNvcnJlY3Qgb3JkZXIgb2Ygb3B0aW9ucy9wYXJhbWV0ZXJzIGluIHJ1bl90aWMuaW4gaW52b2NhdGlvbiBvZiB0aWMsCisJICB3aGljaCBkaWQgbm90IHdvcmsgd2l0aCBzdGFuZGFyZCBnZXRvcHQoKSAocmVwb3J0ZWQgYnkgRXRoYW4KKwkgIEJ1dHRlcmZpZWxkIDxwcmltdXNAdmVyaXMub3JnPikuCisJKyBjb3JyZWN0IGxvZ2ljIGZvciAncmV2ZXJzZScgdmFyaWFibGUgaW4gbGliX3ZpZGF0dHIuYywgd2hpY2ggd2FzCisJICBzZXR0aW5nIGl0IHRydWUgd2l0aG91dCBjaGVja2luZyBpZiBuZXdtb2RlIGhhZCBBX1JFVkVSU0Ugc2V0LCBlLmcuLAorCSAgdXNpbmcgJFRFUk09YW5zaSBvbiBPUy8yIEVNWCAoc2VlIDIwMDAwOTE3KS4KKwk+IHBhdGNoIGJ5IFRvZGQgQyBNaWxsZXI6CisJKyBhZGQgYSBmZXcgbWlzc2luZyB1c2VfdGVybWluZm9fdmFycygpIGFuZCBmaXhlcyB1cCBfbmNfdGdldGVudCgpLgorCSAgUHJldmlvdXNseSwgX25jX2NnZXRzZXQoKSB3b3VsZCBzdGlsbCBnZXQgY2FsbGVkIG9uIGNwIHNvIHRoZQorCSAgc2ltcGxlc3QgdGhpbmcgaXMgdG8gc2V0IGNwIHRvIE5VTEwgaWYgIXVzZV90ZXJtaW5mb192YXJzKCkuCisJKyBhZGRlZCBjaGVja3MgZm9yIGFuIGVtcHR5ICRIT01FIGVudmlyb25tZW50IHZhcmlhYmxlLgorCT4gcGF0Y2hlcyBmb3IgT1MvMiBFTVggKElseWEgWmFraGFyZXZpY2gpOgorCSsgbW9kaWZ5IGNvbnZlcnRfY29uZmlndXJlLnBsIHRvIHN1cHBvcnQgSU5TVEFMTC4gIENoYW5nZSBjb21waWxlcgorCSAgb3B0aW9ucyBpbiB0aGF0IHNjcmlwdCB0byB1c2UgbXVsdGl0aHJlYWRpbmcsIG5lZWRlZCBmb3IgdGhlIG1vdXNlLgorCSsgbW9kaWZ5IE9TLzIgbW91c2Ugc3VwcG9ydCwgcmV0cnlpbmcgYXMgYSAyLWJ1dHRvbiBtb3VzZSBpZiBjb2RlIGZhaWxzCisJICB0byBzZXQgdXAgYSAzLWJ1dHRvbiBtb3VzZS4KKwkrIGltcHJvdmUgY29kZSBmb3IgT1MvMiBtb3VzZSBzdXBwb3J0LCB1c2luZyBfbmNfdGltZWRfd2FpdCgpIHRvCisJICByZXBsYWNlIHNlbGVjdCgpIGNhbGwuCisKKzIwMDAxMDA3CisJKyBjaGFuZ2UgdHlwZSBvZiBvc3BlZWQgdmFyaWFibGUgYmFjayB0byBzaG9ydCB0byBtYXRjaCBpdHMgdXNlIGluCisJICBsZWdhY3kgYXBwbGljYXRpb25zIChyZXBvcnRlZCBieSBBbmRyZXkgQSBDaGVybm92KS4KKwkrIGFkZCBjYXNlIHRvIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIC0tZW5hYmxlLXJwYXRoIG9uIElSSVggKHBhdGNoIGJ5CisJICBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIG1pbm9yIGZpeCB0byBwb3NpdGlvbl9jaGVjaygpIGZ1bmN0aW9uLCB0byBlbnN1cmUgaXQgZ2V0cyB0aGUgd2hvbGUKKwkgIGN1cnNvciByZXBvcnQgYmVmb3JlIGRlY29kaW5nLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1kaXNhYmxlLWFzc3VtZWQtY29sb3IsIHRvIGFsbG93IHByZS01LjEKKwkgIGNvbnZlbnRpb24gb2YgZGVmYXVsdCBjb2xvcnMgdXNlZCBmb3IgY29sb3ItcGFpciAwIHRvIGJlIGNvbmZpZ3VyZWQKKwkgIChzZWUgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkpLgorCSsgcmVuYW1lIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtaGFzaG1hcCAtLWRpc2FibGUtaGFzaG1hcCwgYW5kCisJICByZW9yZGVyIHRoZSBjb25maWd1cmUgb3B0aW9ucywgc3BsaXR0aW5nIHRoZSBleHBlcmltZW50YWwgYW5kCisJICBkZXZlbG9wbWVudAorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1kaXNhYmxlLXJvb3QtZW52aXJvbiwgd2hpY2ggdGVsbHMgbmN1cnNlcyB0bworCSAgZGlzcmVnYXJkICRURVJNSU5GTyBhbmQgc2ltaWxhciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaWYgdGhlIGN1cnJlbnQKKwkgIHVzZXIgaXMgcm9vdCwgb3IgcnVubmluZyBzZXR1aWQvc2V0Z2lkIChiYXNlZCBvbiBkaXNjdXNzaW9uIHdpdGgKKwkgIHNldmVyYWwgcGVvcGxlKS4KKwkrIG1vZGlmaWVkIG1pc2MvcnVuX3RpYy5pbiB0byB1c2UgdGljIC1vLCB0byBlbGltaW5hdGUgZGVwZW5kZW5jeSBvbgorCSAgJFRFUk1JTkZPIHZhcmlhYmxlIGZvciBpbnN0YWxscy4KKwkrIGFkZCB0YWJsZSBlbnRyeSBmb3IgcGxhYl9ub3JtIHRvIHRwdXQsIHNvIGl0IHBhc3NlcyBpbiBzdHJpbmdzCisJICBmb3IgdGhhdCBjYXBhYmlsaXR5LgorCSsgbW9kaWZ5IHBhcnNlX2Zvcm1hdCgpIGluIGxpYl90cGFybS5jIHRvIGlnbm9yZSBwcmVjaXNpb24gaWYgaXQgaXMKKwkgIGxvbmdlciB0aGFuIDEwMDAwIChyZXBvcnQgYnkgSm91a28gUHlubm9uZW4pLgorCSsgcmV3cm90ZSBsaW1pdCBjaGVja3MgaW4gbGliX212Y3VyLmMgdXNpbmcgbmV3IGZ1bmN0aW9ucworCSAgX25jX3NhZmVfc3RyY2F0KCksIGV0Yy4gIE1hZGUgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIHRvIGNoZWNrIGxlbmd0aHMKKwkgIHVzZWQgZm9yIHN0cmNhdC9zdHJjcHkgKHJlcG9ydCBieSBKb3VrbyBQeW5ub25lbgorCSAgPGpvdWtvQHNvbHV0aW9ucy5maT4pLgorCisyMDAwMDkzMAorCSsgbW9kaWZ5IHNldmVyYWwgZGVzY3JpcHRpb25zLCBpbmNsdWRpbmcgdGhvc2UgZm9yIHNldGFmLCBzZXRhYiwgaW4KKwkgIGluY2x1ZGUvQ2FwcyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBlbnRyaWVzIGFyZSBwYXJhbWV0ZXJpemVkLiAgVGhpcworCSAgaW5mb3JtYXRpb24gaXMgdXNlZCB0byB0ZWxsIHdoaWNoIHN0cmluZ3MgYXJlIHRyYW5zbGF0ZWQgd2hlbgorCSAgY29udmVydGluZyB0byB0ZXJtY2FwLiAgRml4ZXMgYSBwcm9ibGVtIHdoZXJlIHRoZSBnZW5lcmF0ZWQgdGVybWNhcAorCSAgd291bGQgY29udGFpbiBhIHNwdXJpb3VzICIlcDEiIGZvciB0aGUgdGVybWluZm8gIiVwMSVkIi4KKwkrIG1vZGlmeSBsZCAtcnBhdGggb3B0aW9ucyAoZS5nLiwgTGludXgsIGFuZCBTb2xhcmlzKSB0byB1c2UgYW4KKwkgIGFic29sdXRlIHBhdGhuYW1lIGZvciB0aGUgYnVpbGQgdHJlZSdzIGxpYiBkaXJlY3RvcnkgKHByb21wdGVkIGJ5CisJICBkaXNjdXNzaW9uIHdpdGggQWxiZXJ0IENoaW4tQS1Zb3VuZykuCisJKyBtb2RpZnkgIm1ha2UgaW5zdGFsbC5tYW4iIGFuZCAibWFrZSB1bmluc3RhbGwubWFuIiB0byBpbmNsdWRlIHRhY2sncworCSAgbWFuLXBhZ2UuCisJKyB2YXJpb3VzIGZpeGVzIGZvciBpbnN0YWxsIHNjcmlwdHMgdXNlZCB0byBzdXBwb3J0IGNvbmZpZ3VyZSAtLXNyY2RpcgorCSAgYW5kIC0td2l0aC1pbnN0YWxsLXByZWZpeCAocmVwb3J0ZWQgYnkgTWF0dGhldyBDbGFya2UKKwkgIDxNYXR0aGV3X0NsYXJrZUBtaW5kbGluay5iYy5jYT4pLgorCSsgbWFrZSBjb25maWd1cmUgc2NyaXB0IGNoZWNrcyBvbiB2YXJpYWJsZXMgJEdDQyBhbmQgJEdYWCBjb25zaXN0ZW50bHkKKwkgIGNvbXBhcmUgYWdhaW5zdCAneWVzJyByYXRoZXIgdGhhbiB0ZXN0IGlmIHRoZXkgYXJlIG5vbm51bGwsIHNpbmNlCisJICBlaXRoZXIgbWF5IGJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyBuYW1lIG9mIHRoZSBDIG9yIEMrKyBjb21waWxlcgorCSAgKHJlcG9ydC9wYXRjaCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKworMjAwMDA5MjMKKwkrIG1vZGlmeSByczIgY2FwYWJpbGl0eSBpbiB4dGVybS1yNiBhbmQgc2ltaWxhciB3aGVyZSBjdXJzb3IKKwkgIHNhdmUvcmVzdG9yZSBicmFja2V0ZWQgdGhlIHNlcXVlbmNlIGZvciByZXNldHRpbmcgdmlkZW8gYXR0cmlidXRlcy4KKwkgIFRoZSBjdXJzb3IgcmVzdG9yZSB3b3VsZCB1bmRvIHRoYXQgKHJlcG9ydCBieSBKb2huIEhhd2tpbnNvbgorCSAgPGpoYXdrQE1JVC5FRFU+IChzZWUgTmV0QlNEIG1pc2MvMTEwNTIpKS4KKwkrIHVzaW5nIHBhcmFtZXRlciBjaGVjayBhZGRlZCB0byB0aWMsIGNvcnJlY3RlZCAyNyB0eXBvcyBpbgorCSAgdGVybWluZm8uc3JjIC1URAorCSsgbW9kaWZ5IHRpYyB0byB2ZXJpZnkgdGhhdCBpdHMgaW5wdXRzIGFyZSByZWFsbHkgZmlsZXMsIGluIGNhc2UKKwkgIHNvbWVvbmUgdHJpZXMgdG8gcmVhZCBhIGRpcmVjdG9yeSAob3IgL2Rldi96ZXJvKS4KKwkrIGFkZCBhIGNoZWNrIGZvciBlbXB0eSBidWZmZXJzIHJldHVybmVkIGJ5IGZnZXRzKCkgaW4gY29tcF9zY2FuLmMKKwkgIG5leHRfY2hhcigpIGZ1bmN0aW9uLCBpbiBjYXNlIHRpYyBpcyBydW4gb24gYSBub24tdGV4dCBmaWxlIChmaXhlcworCSAgYSBjb3JlIGR1bXAgcmVwb3J0ZWQgYnkgQWFyb24gQ2FtcGJlbGwgPGFhcm9uQGNzLmRhbC5jYT4pLgorCSsgYWRkIHRvIHJhaWxyb2FkLmMgc29tZSBjb2RlIGV4ZXJjaXNpbmcgdGdvdG8oKSwgcHJvdmlkaW5nIGFuCisJICBhbHRlcm5hdGUgZm9ybSBvZiBkaXNwbGF5IGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBjdXJzb3IgYWRkcmVzc2luZy4KKwkrIHNwbGl0LW91dCB0Z290bygpIGFnYWluLCB0aGlzIHRpbWUgaW50byBuZXcgZmlsZSBsaWJfdGdvdG8uYywgYW5kCisJICBpbXBsZW1lbnQgYSBjb252ZW50aW9uYWwgQlNELXN0eWxlIHRnb3RvKCkgd2hpY2ggaXMgdXNlZCBpZiB0aGUKKwkgIGNhcGFiaWxpdHkgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gdGVybWluZm8tc3R5bGUgcGFkZGluZyBvcgorCSAgcGFyYW1ldGVycyAocmVxdWVzdGVkIGJ5IEFuZHJleSBBIENoZXJub3YpLgorCSsgYWRkIGNoZWNrIHRvIHRpYyB3aGljaCByZXBvcnRzIGNhcGFiaWxpdGllcyB0aGF0IGRvIG5vdCByZWZlcmVuY2UKKwkgIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcGFyYW1ldGVycy4KKwkrIGFkZCBlcnJvciBjaGVja2luZyB0byBpbmZvY21wJ3MgLXYgYW5kIC1tIG9wdGlvbnMgdG8gZW5zdXJlIHRoYXQKKwkgIHRoZSBvcHRpb24gdmFsdWUgaXMgaW5kZWVkIGEgbnVtYmVyLgorCSsgc29tZSBjbGVhbnVwIG9mIGxvZ2ljIGluIF9uY19zaWduYWxfaGFuZGxlcigpIHRvIHZlcmlmeSBpZiBTSUdXSU5DSAorCSAgaGFuZGxlciBpcyBzZXR1cC4gIFNlcGFyYXRlZCB0aGUgb2xkL25ldyBzaWdhY3Rpb24gZGF0YSBmb3IgU0lHVFNUUAorCSAgZnJvbSB0aGUgb3RoZXIgc2lnbmFscy4KKworMjAwMDA5MTcKKwkrIGFkZCBTMCwgRTAgZXh0ZW5zaW9ucyB0byBzY3JlZW4ncyB0ZXJtaW5mbyBlbnRyeSwgd2hpY2ggaXMgYW5vdGhlcgorCSAgd2F5IHRvIHNvbHZlIHRoZSBtaXNjb25maWd1cmF0aW9uIGlzc3VlIC1URAorCSsgY29tcGxldGVkIHNwZWNpYWwgY2FzZSBmb3IgdGdvdG8gZnJvbSAyMDAwMDkxNgorCisyMDAwMDkxNgorCSsgdXBkYXRlIHh0ZXJtIHRlcm1pbmZvIGVudHJpZXMgdG8gbWF0Y2ggWEZyZWU4NiB4dGVybSBwYXRjaCAjMTQ2IC1URAorCSsgYWRkIE1hdHJpeCBPcmJpdGFsIHRlcm1pbmZvIGVudHJpZXMgKGZyb20gRXJpYyBaIEF5ZXJzCisJICA8ZXJpY0BhbGUub3JnPikuCisJKyBhZGQgc3BlY2lhbCBjYXNlIHRvIGxpYl90cGFybS5jIHRvIGFsbG93ICdzY3JlZW4nIHByb2dyYW0gdG8gdXNlIGEKKwkgIHRlcm1jYXAtc3R5bGUgcGFyYW1ldGVyICIlLiIgdG8gdGdvdG8oKSBmb3Igc3dpdGNoaW5nIGNoYXJhY3RlciBzZXRzLgorCSsgdXNlIExOX1Mgc3Vic3RpdHV0aW9uIGluIHJ1bl90aWMuaW4sIHRvIHdvcmsgb24gT1MvMiBFTVggd2hpY2ggaGFzCisJICBubyBzeW1ib2xpYyBsaW5rcy4KKwkrIHVwZGF0ZWQgbm90ZXMgaW4gUkVBRE1FLmVteCByZWdhcmRpbmcgYXV0b2NvbmYgcGF0Y2hlcy4KKwkrIHJlcGxhY2UgYSBsb29rdXAgdGFibGUgaW4gbGliX3ZpZGF0dHIuYyB1c2VkIHRvIGRlY29kZSBub19jb2xvcl92aWRlbworCSAgd2l0aCBhIGxvZ2ljIGV4cHJlc3Npb24gKHN1Z2dlc3RlZCBieSBQaGlsaXBwZSBCbGFpbikuCisJKyBhZGQgYS9BIHRvZ2dsZSB0byBuY3Vyc2VzLmMgJ2InIHRlc3QsIHdoaWNoIGNsZWFycy9zZXRzIGFsdGVybmF0ZQorCSAgY2hhcmFjdGVyIHNldCBhdHRyaWJ1dGUgZnJvbSB0aGUgZGlzcGxheWVkIHRleHQuCisJKyBjb3JyZWN0IGluZXF1YWxpdHkgaW4gcGFyYW1ldGVyIGFuYWx5c2lzIG9mIHJld3JpdHRlbiBsaWJfdHBhcm0uYworCSAgd2hpY2ggaGFkIHRoZSBlZmZlY3Qgb2YgaWdub3JpbmcgcDkgaW4gc2V0X2F0dHJpYnV0ZXMgKHNnciksIGJyZWFraW5nCisJICBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAocmVwb3J0ZWQgYnkgUGlvdHIgTWFqa2EgPGNoYXJ2ZWxAbGluay5wbD4pLgorCSsgY29ycmVjdCBpZmRlZidpbmcgZm9yIEdDQ19QUklOVEYsIEdDQ19TQ0FORiB3aGljaCB3b3VsZCBub3QgY29tcGlsZQorCSAgd2l0aCBTdW4gV29ya1Nob3AgY29tcGlsZXJzIHNpbmNlIHRoZXNlIHRva2VucyB3ZXJlIGVtcHR5IChjZjoKKwkgIDIwMDAwOTAyLCByZXBvcnRlZCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKworMjAwMDA5MDkKKwkrIGNvcnJlY3QgYW4gdW5pbml0aWFsaXplZCBwYXJhbWV0ZXIgdG8gb3Blbl90ZW1wZmlsZSgpIGluIHRpYy5jIHdoaWNoCisJICBtYWRlICJ0aWMgLUkiIGdpdmUgYW4gYW1iaWd1b3VzIGVycm9yIG1lc3NhZ2UgYWJvdXQgdG1wbmFtLgorCSsgYWRkIHNwZWNpYWwgY2FzZSBpbiBsaWJfdmlkYXR0ci5jIHRvIHJlc2V0IHVuZGVybGluZSBhbmQgc3RhbmRvdXQgZm9yCisJICBkZXZpY2VzIHRoYXQgaGF2ZSBubyBzZ3IwIGRlZmluZWQgKHBhdGNoIGJ5IERvbiBMZXdpcworCSAgPERvbi5MZXdpc0B0c2MudGRrLmNvbT4pLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgd29yayBmb3IgYm9sZAorCSAgbW9kZSwgc2luY2UgdGhlcmUgaXMgbm8gZXhpdC1ib2xkLW1vZGUgY2FwYWJpbGl0eS4KKwkrIGltcHJvdmVkIHBhdGNoIGZvciBNYWtlX0VudW1fVHlwZSAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIG1vZGlmeSB0cGFybSB0byBkaXNhbGxvdyBhcml0aG1ldGljIG9uIHN0cmluZ3MsIGFuYWx5emUgdGhlIHZhcmFyZ3MKKwkgIGxpc3QgdG8gcmVhZCBzdHJpbmdzIGFzIHN0cmluZ3MgYW5kIG51bWJlcnMgYXMgbnVtYmVycy4KKwkrIG1vZGlmeSB0cGFybSdzIGludGVybmFsIGZ1bmN0aW9uIHNwb3AoKSB0byB0cmVhdCBhIG51bGwgcG9pbnRlciBhcworCSAgYW4gZW1wdHkgc3RyaW5nLgorCSsgbW9kaWZ5IHRwdXQgcHJvZ3JhbSBzbyBpdCBjYW4gYmUgcmVuYW1lZCBvciBpbnZva2VkIHZpYSBhIGxpbmsgYXMKKwkgICdyZXNldCcgb3IgJ2luaXQnLCBwcm9kdWNpbmcgdGhlIHNhbWUgZWZmZWN0IGFzICd0cHV0IHJlc2V0JyBvciAndHB1dAorCSAgaW5pdCcuCisJKyBhZGQgcHJpdmF0ZSBlbnRyeXBvaW50IF9uY19iYXNlbmFtZSgpLCB1c2UgdG8gY29uc29saWRhdGUgcmVsYXRlZAorCSAgY29kZSBpbiBwcm9ncywgYXMgd2VsbCBhcyBhY2NvbW1vZGF0aW5nIE9TLzIgRU1YIHBhdGhuYW1lcy4KKwkrIHJlbW92ZSBOQ1VSU0VTX0NPTlNUIGxpbmUgZnJvbSBlZGl0X2NmZy5zaCB0byBjb21wZW5zYXRlIGZvciBpdHMKKwkgIHJlbW92YWwgKGV4Y2VwdCB2aWEgQUNfU1VCU1QpIGZyb20gY29uZmlndXJlLmluLCBtYWtpbmcKKwkgIC0tZW5hYmxlLWNvbnN0IHdvcmsgYWdhaW4gKHJlcG9ydGVkIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyByZWdlbidkIGNvbmZpZ3VyZSB0byBwaWNrIHVwICJocHV4KiIgY2hhbmdlIGZyb20gMjAwMDA5MDIuCisKKzIwMDAwOTAyCisJKyBtb2RpZnkgdHNldC5jIHRvIGNoZWNrIGZvciB0cmFuc2Zvcm1lZCAicmVzZXQiIHByb2dyYW0gbmFtZSwgaWYgYW55LgorCSsgYWRkIGEgY2hlY2sgZm9yIG51bGwgcG9pbnRlciBpbiBNYWtlX0VudW1fVHlwZSgpIChyZXBvcnRlZCBieSBTdGV2ZW4KKwkgIFcgT3JyIDxzdGV2ZW9Ad29ybGQuc3RkLmNvbT4pLgorCSsgY2hhbmdlIGZ1bmN0aW9ucyBfbmNfcGFyc2VfZW50cnkoKSBhbmQgcG9zdHByb2Nlc3NfdGVybWNhcCgpIHRvIGF2b2lkCisJICB1c2luZyBzdHJ0b2soKSwgYmVjYXVzZSBpdCBpcyBub24tcmVlbnRyYW50IChyZXBvcnRlZCBieSBBbmRyZXkgQQorCSAgQ2hlcm5vdiA8YWNoZUBuYWd1YWwucHAucnU+KS4KKwkrIHJlbW92ZSAiaHB1eDEwLioiIGNhc2UgZnJvbSBDRl9TSEFSRURfT1BUUyBjb25maWd1cmUgc2NyaXB0IG1hY3JvLgorCSAgVGhpcyBkaWZmZXJlZCBmcm9tIHRoZSAiaHB1eCoiIGNhc2UgYnkgdXNpbmcgcmV2ZXJzZWQgc3ltYm9saWMKKwkgIGxpbmtzLCB3aGljaCBtYWRlIHRoZSA1LjEgdmVyc2lvbiBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gb2YKKwkgIDUuMCBzaGFyZWQgbGlicmFyaWVzIChyZXBvcnRlZCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIGNvcnJlY3QgYSBkZXBlbmRlbmN5IGluIEFkYTk1L3NyYy9NYWtlZmlsZS5pbiB3aGljaCBwcmV2ZW50ZWQKKwkgIGJ1aWxkaW5nIHdpdGggY29uZmlndXJlIC0tc3JjZGlyIChwYXRjaCBieSBIIE5hbm9zZWNvbmQKKwkgIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+KS4KKwkrIG1vZGlmeSBpZmRlZidzIGluIGN1cnNlcy5oLmluIHRvIGF2b2lkIHdhcm5pbmcgaWYgR0NDX1BSSU5URiBvcgorCSAgR0NDX1NDQU5GIHdhcyBub3QgcHJldmlvdXNseSBkZWZpbmVkIChyZXBvcnRlZCBieSBQYXZlbCBSb3NraW4KKwkgIDxwcm9za2lAZ251Lm9yZz4pLgorCSsgYWRkIE1LbmN1cnNlc19kZWYuc2ggdG8gZ2VuZXJhdGUgZmFsbGJhY2sgZGVmaW5pdGlvbnMgZm9yCisJICBuY3Vyc2VzX2NmZy5oLCB0byBxdWlldCBnY2MgLVd1bmRlZiB3YXJuaW5ncywgbW9kaWZpZWQgaWZkZWYncyBpbgorCSAgY29kZSB0byBjb25zaXN0ZW50bHkgdXNlICIjaWYiIHJhdGhlciB0aGFuICIjaWZkZWYiLgorCisyMDAwMDgyNgorCSsgYWRkIFFOWCBxYW5zaSBlbnRyaWVzIHRvIHRlcm1pbmZvIC1URAorCSsgYWRkIG9zMiBlbnRyeSB0byBtaXNjL2VteC5zcmMgKDxqbWNvb3ByQHdlYm1haWwuYm1pLm5ldD4pLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWRhdGFiYXNlIHRvIGFsbG93IHNwZWNpZnlpbmcgYSBkaWZmZXJlbnQKKwkgIHRlcm1pbmZvIHNvdXJjZS1maWxlIHRvIGluc3RhbGwuICBPbiBPUy8yIEVNWCwgdGhpcyBkZWZhdWx0cyB0bworCSAgbWlzYy9lbXguc3JjCisJKyBjaGFuZ2UgbWlzYy9ydW5fdGljLnNoIHRvIGRlcml2ZSBpdCBmcm9tIG1pc2MvcnVuX3RpYy5pbiwgdG8gc2ltcGxpZnkKKwkgIHNldHRpbmcgLmV4ZSBleHRlbnNpb24gb24gT1MvMiBFTVguCisJKyBhZGQgLmV4ZSBleHRlbnNpb24gaW4gQWRhOTUvZ2VuL01ha2VmaWxlLmluLAorCSAgQWRhOTUvc2FtcGxlcy9NYWtlZmlsZS5pbiwgZm9yIE9TLzIgRU1YIChyZXBvcnRlZCBieQorCSAgPGptY29vcHJAd2VibWFpbC5ibWkubmV0PikuCisJKyBhZGQgY29uZmlndXJlIGNoZWNrIGZvciBmaWxlc3lzdGVtcyAoc3VjaCBhcyBPUy8yIEVNWCkgd2hpY2ggZG8gbm90CisJICBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVwcGVyL2xvd2VyY2FzZSBmaWxlbmFtZXMsIHVzZSB0aGlzIHRvIGZpeCB0YWdzCisJICBydWxlcyBpbiBtYWtlZmlsZXMuCisJKyBpbml0aWFsaXplIGZkc1tdIGFycmF5IHRvIDAncyBpbiBfbmNfdGltZWRfd2FpdCgpOyBhcHBhcmVudGx5IHBvbGwoKQorCSAgb25seSBzZXRzIHRoZSByZXZlbnRzIG1lbWJlcnMgb2YgdGhhdCBhcnJheSB3aGVuIHRoZXJlIGlzIGFjdGl2aXR5CisJICBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWxhdGVkIGZpbGUgKHJlcG9ydCBieSBHbGVubiBDb29wZXIKKwkgIDxnY29vcGVyQHFhbnRhcy5jb20uYXU+LCB1c2luZyBQdXJpZnkgb24gU29sYXJpcyA1LjYpLgorCSsgY2hhbmdlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gdXNlIEFDX0NBTk9OSUNBTF9TWVNURU0gcmF0aGVyIHRoYW4KKwkgIEFDX0NBTk9OSUNBTF9IT1NULCB3aGljaCBtZWFucyB0aGF0IGNvbmZpZ3VyZSAtLXRhcmdldCB3aWxsIHNldAorCSAgYSBkZWZhdWx0IHByb2dyYW0tcHJlZml4LgorCSsgYWRkIG5vdGUgb24gY3Jvc3MtY29tcGlsaW5nIHRvIElOU1RBTEwgKHdoaWNoIGRvZXMgbm90IHJlbHkgb24gdGhlCisJICBBQ19DQU5PTklDQUxfKiBtYWNyb3MpLgorCisyMDAwMDgxOQorCSsgYWRkIGNhc2VzIGZvciBFTVggT1MvMiB0byBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIKKwkrIG5ldyB2ZXJzaW9uIG9mIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiBmcm9tIGx5bnggMi44LjRkZXYuNworCSsgYWRkIGRlZmluaXRpb25zIHZpYSB0cmFuc2Zvcm0uaCB0byBhbGxvdyB0aWMgYW5kIHRwdXQgdG8gY2hlY2sgZm9yCisJICB0aGUgdHJhbnNmb3JtZWQgYWxpYXNlcyByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgaW5mb3RvY2FwLCBldGMuCisJKyBzaW1wbGlmeSB0cmFuc2Zvcm0tZXhwcmVzc2lvbnMgaW4gcHJvZ3MvTWFrZWZpbGUuaW4sIG1ha2UgdGhlCisJICB1bmluc3RhbGwgcnVsZSB3b3JrIGZvciB0cmFuc2Zvcm1lZCBwcm9ncmFtIG5hbWVzLgorCSsgY2hhbmdlIHN5bWJvbCB1c2VkIGJ5IC0taW5zdGFsbC1wcmVmaXggY29uZmlndXJlIG9wdGlvbiBmcm9tCisJICBJTlNUQUxMX1BSRUZJWCB0byBERVNURElSICh0aGUgbGF0dGVyIGhhcyBiZWNvbWUgY29tbW9uIHVzYWdlCisJICBhbHRob3VnaCB0aGUgbmFtZSBpcyBtaXNsZWFkaW5nKS4KKwkrIG1vZGlmeSBwcm9ncmFtcyB0byB1c2UgY3Vyc2VzX3ZlcnNpb24oKSBzdHJpbmcgdG8gcmVwb3J0IHRoZSB2ZXJzaW9uCisJICBvZiBuY3Vyc2VzIHdpdGggd2hpY2ggdGhleSBhcmUgY29tcGlsZWQgcmF0aGVyIHRoYW4gdGhlCisJICBOQ1VSU0VTX1ZFUlNJT04gc3RyaW5nLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBhdGNoIGxldmVsIGluCisJICBhZGRpdGlvbiB0byB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycy4KKworMjAwMDA4MTIKKwkrIG1vZGlmeSBDRl9NQU5fUEFHRVMgY29uZmlndXJlIG1hY3JvIHRvIG1ha2UgdHJhbnNmb3JtZWQgcHJvZ3JhbSBuYW1lcworCSAgYSBwYXJhbWV0ZXIgdG8gdGhhdCBtYWNybyByYXRoZXIgdGhhbiBlbWJlZGRpbmcgdGhlbSBpbiB0aGUgbWFjcm8uCisJKyBuZXdlciBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIgKHJlZmVyZW5jZSB2ZXJzaW9uIHVzZWQgaW4gbHlueAorCSAgMi44LjRkZXYuNykuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtZGVmYXVsdC10ZXJtaW5mby1kaXI9RElSIHRvIGFsbG93CisJICBzcGVjaWZ5aW5nIHRoZSBkZWZhdWx0IHRlcm1pbmZvIGRhdGFiYXNlIGRpcmVjdG9yeSAocmVxdWVzdCBieSBBbGJlcnQKKwkgIENoaW4tQS1Zb3VuZykuCisJKyBtaW5vciB1cGRhdGVzIGZvciB0ZXJtaW5mby5zcmMgZnJvbSBGcmVlQlNEIHRlcm1jYXAgY2hhbmdlLWhpc3RvcnkuCisJKyBjb3JyZWN0IG5vdGVzIGluIFJFQURNRSBhbmQgSU5TVEFMTCByZWdhcmRpbmcgZG9jdW1lbnRhdGlvbiBmaWxlcworCSAgdGhhdCB3ZXJlIG1vdmVkIGZyb20gbWlzYyBkaXJlY3RvcnkgdG8gZG9jIChyZXBvcnQgYnkgUmljaCBLdWxhd2llYworCSAgPHJza0Bnc3Aub3JnPikuCisJKyBjaGFuZ2UgbW9zdCByZW1haW5pbmcgdW5xdW90ZWQgcGFyYW1ldGVycyBvZiAndGVzdCcgaW4gY29uZmlndXJlCisJICBzY3JpcHQgdG8gdXNlIHF1b3RlcywgZm9yIGluc3RhbmNlIGZpeGluZyBhIHByb2JsZW0gaW4gdGhlCisJICAtLWRpc2FibGUtZGF0YWJhc2Ugb3B0aW9uIChyZXBvcnRlZCBieSBDaHJpc3RpYW4gTW9uZHJ1cAorCSAgPHNjYW5jbUBiaW9iYXNlLmRrPikuCisJKyBtaW5vciBhZGp1c3RtZW50cyB0byB3b3JrIGFyb3VuZCBzb21lIG9mIHRoZSBpbmNvbXBhdGliaWxpdGllcy9idWdzCisJICBpbiBhdXRvY29uZiAyLjI5YSBhbHBoYS4KKwkrIGFkZCAtSS91c3IvbG9jYWwvaW5jbHVkZSB3aGVuIC0td2l0aC1uY3Vyc2VzIG9wdGlvbiBpcyB1c2VkIGluCisJICB0ZXN0L2NvbmZpZ3VyZSBzY3JpcHQuCisJKyBjb3JyZWN0IGxvZ2ljIGluIGFkanVzdF9jYW5jZWxzKCksIHdoaWNoIGRpZCBub3QgY2hlY2sgYm90aAorCSAgYWx0ZXJuYXRpdmVzIHdoZW4gcmVjbGFzc2lmeWluZyBhbiBleHRlbmRlZCBuYW1lIGJldHdlZW4gYm9vbGVhbiwKKwkgIG51bWJlciBhbmQgc3RyaW5nLCBjYXVzaW5nIGFuIGluZmluaXRlIGxvb3AgaW4gdGljLgorCisyMDAwMDczMAorCSsgY29ycmVjdCBhIG1pc3NpbmcgYmFja3NsYXNoIGluIGN1cnNlcy5wcml2LmgKKworMjAwMDA3MjkKKwkrIGNoYW5nZSBoYW5kbGluZyBvZiBub25fZGVzdF9zY3JvbGxfcmVnaW9uIGluIHR0eV91cGRhdGUuYyB0byBjbGVhcgorCSAgdGV4dCBhZnRlciBpdCBpcyBzaGlmdGVkIGluIHJhdGhlciB0aGFuIGJlZm9yZSBzaGlmdGluZyBvdXQuICBBbHNvCisJICBjb3JyZWN0IHJvdyBjb21wdXRhdGlvbiAocmVwb3J0ZWQgYnkgUnVlZGlnZXIgS3VobG1hbm4KKwkgIDx1Y2s0QHJ6LnVuaS1rYXJsc3J1aGUuZGU+KS4KKwkrIGFkZC91c2UgbmV3IHRyYWNlIGZ1bmN0aW9uIHRvIGRpc3BsYXkgY2h0eXBlIHZhbHVlcyBmcm9tIHdpbmNoKCkgYW5kCisJICBnZXRia2dkKCkuCisJKyBhZGQgdHJhY2UgbWFzayBUUkFDRV9BVFRSUywgYWx0ZXIgc2V2ZXJhbCBleGlzdGluZyBfdHJhY2VmIGNhbGxzIHRoYXQKKwkgIHRyYWNlIGF0dHJpYnV0ZSBjaGFuZ2VzIHVuZGVyIFRSQUNFX0NBTExTIHRvIHVzZSB0aGlzLgorCSsgbW9kaWZ5IE1LbGliX2dlbi5zaCBzbyB0aGF0IGZ1bmN0aW9ucyByZXR1cm5pbmcgY2h0eXBlIHdpbGwgY2FsbAorCSAgcmV0dXJuQ2hhcigpLgorCSsgYWRkIHJldHVybkNoYXIoKSB0cmFjZSwgZm9yIGZ1bmN0aW9ucyByZXR1cm5pbmcgY2h0eXBlLgorCSsgY2hhbmdlIGluZGVudC5wcm8gdG8gbGluZSB1cCBwYXJlbnRoZXNpcy4KKworMjAwMDA3MjIKKwkrIGZpeCBhIGhlYXAgcHJvYmxlbSB3aXRoIHRoZSBjKysgYmluZGluZyAocmVwb3J0IGJ5CisJICA8YWxleGFuZGVyX2xpYmVyc29uQG5pbmV3ZXN0LmNvbT4sIHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyBtaW5vciBhZGp1c3RtZW50IHRvIENsclRvRU9MKCkgdG8gaGFuZGxlIGFuIG91dC1vZi1ib3VuZHMgcGFyYW1ldGVyLgorCSsgbW9kaWZ5IHRoZSBjaGVjayBmb3IgYmlnLWNvcmUgdG8gZm9yY2UgYSBjb3VwbGUgb2YgbWVtb3J5IGFjY2Vzc2VzLAorCSAgd2hpY2ggbWF5IHdvcmsgYXMgbmVlZGVkIGZvciBvbGRlci9sZXNzLWNhcGFibGUgbWFjaGluZXMgKGlmIG5vdCwKKwkgIHRoZXJlJ3Mgc3RpbGwgdGhlIGV4cGxpY2l0IGNvbmZpZ3VyZSBvcHRpb24pLgorCT4gZml4ZXMgYmFzZWQgb24gZGlmZidzIGZvciBBbWlnYSBhbmQgQmVPUyBmb3VuZCBhdAorCSAgaHR0cDovL3d3dy5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGUvfmt1aGxtYW5uL2Nyb3NzL25jdXJzZXMvCisJKyBhbHRlciBkZWZpbml0aW9uIG9mIE5DVVJTRVNfQ09OU1QgdG8gbWFrZSBpdCBub24tZW1wdHkuCisJKyBhZGQgYW1pZ2Etdm5jIHRlcm1pbmZvIGVudHJ5LgorCSsgcmVkZWZpbmUgJ1RFWFQnIGluIG1lbnUuaCBmb3IgQU1JR0EsIHNpbmNlIGl0IGlzIHJlcG9ydGVkIHRvIGhhdmUKKwkgIGFuICh1bnNwZWNpZmllZCkgc3ltYm9sIGNvbmZsaWN0LgorCSsgcmVwbGFjZWQgY2FzZS1zdGF0ZW1lbnQgaW4gX25jX3RyYWNlYml0cygpIGZvciBDU0laRSB3aXRoIGEgdGFibGUgdG8KKwkgIHNpbXBsaWZ5IHdvcmtpbmcgYXJvdW5kIGltcGxlbWVudGF0aW9ucyB0aGF0IGRlZmluZSByYW5kb20KKwkgIGNvbWJpbmF0aW9ucyBvZiB0aGUgcmVsYXRlZCBtYWNyb3MgdG8gemVyby4KKwkrIG1vZGlmeSBjb25maWd1cmUgdGVzdCBmb3IgdGNnZXRhdHRyKCkgdG8gYWxsb3cgZm9yIG9sZAorCSAgaW1wbGVtZW50YXRpb25zLCBlLmcuLCBvbiBCZU9TLCB3aGljaCBvbmx5IGRlZmluZWQgaXQgYXMgYSBtYWNyby4KKwk+IHBhdGNoZXMgYnkgQnJ1bm8gSGFpYmxlOgorCSsgd2hlbiBjaGVja2luZyBMQ19BTEwvTENfQ1RZUEUvTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFVURi04CisJICBsb2NhbGUsIGlnbm9yZSB0aG9zZSB3aGljaCBhcmUgc2V0IHRvIGFuIGVtcHR5IHZhbHVlLCBhcyBwZXIgU1VTVjIuCisJKyBlbmNvZGUgMHhGRkZEIGluIFVURi04IHdpdGggMyBieXRlcywgbm90IDIuCisJKyBtb2RpZnkgX25jX3V0Zjhfb3V0Y2goKSB0byBhdm9pZCBzaWduLWV4dGVuc2lvbiB3aGVuIGNoZWNraW5nIGZvcgorCSAgb3V0LW9mLXJhbmdlIHZhbHVlLgorCisyMDAwMDcxNQorCSsgY29ycmVjdCBtYW5saW5rcy5zZWQgc2NyaXB0IHRvIGF2b2lkIHVzaW5nIEVSRSAiXCsiLCB3aGljaCBpcyBub3QKKwkgIHVuZGVyc3Rvb2QgYnkgb2xkZXIgdmVyc2lvbnMgb2Ygc2VkIChwYXRjaCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nKS4KKwkrIGltcGxlbWVudCBjb25maWd1cmUgc2NyaXB0IG9wdGlvbnMgdGhhdCB0cmFuc2Zvcm0gaW5zdGFsbGVkIHByb2dyYW0KKwkgIG5hbWVzLCBlLmcuLCAtLXByb2dyYW0tcHJlZml4LCBpbmNsdWRpbmcgdGhlIG1hbnBhZ2UgbmFtZXMgYW5kIGNyb3NzCisJICByZWZlcmVuY2VzIChwYXRjaCBieSBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+KS4KKwkrIGNvcnJlY3Qgc2V2ZXJhbCBtaXNtYXRjaGVzIGJldHdlZW4gbWFucGFnZSBmaWxlbmFtZSBhbmQgIi5USCIKKwkgIGRpcmVjdGl2ZXMsIHJlbmFtaW5nIGRmdF9mZ2JnLjN4IHRvIGRlZmF1bHRfY29sb3JzLjN4IGFuZAorCSAgbWVudV9hdHRyaWJzLjN4IHRvIG1lbnVfYXR0cmlidXRlcy4zeCAocmVwb3J0IGJ5IFRvZGQgQyBNaWxsZXIpLgorCSsgY29ycmVjdCBtaXNzaW5nIGluY2x1ZGVzIGZvciA8c3RyaW5nLmg+IGluIHNldmVyYWwgcGxhY2VzLCBpbmNsdWRpbmcKKwkgIHRoZSBDKysgYmluZGluZy4gIFRoaXMgaXMgbm90IG5vdGVkIGJ5IGdjYyB1bmxlc3Mgd2UgdXNlIHRoZQorCSAgLWZuby1idWlsdGluIG9wdGlvbiAocmVwb3J0ZWQgYnkgSWdvciBTY2hlaW4gPGlnb3JAdHhjLmNvbT4pLgorCSsgbW9kaWZpZWQgcHJvZ3MvdHNldC5jIGFuZCB0YWNrL3N5c2RlcC5jIHRvIGJ1aWxkIHdpdGggc2d0dHliCisJICBpbnRlcmZhY2UgaWYgbmVpdGhlciB0ZXJtaW8gb3IgdGVybWlvcyBpcyBhdmFpbGFibGUuICBUZXN0ZWQgdGhpcworCSAgd2l0aCBGcmVlQlNEIDIuMS41ICh3aGljaCBkb2VzIGhhdmUgdGVybWlvcyAtIGJ1dCB0aGUgc2d0dHliIGRvZXMKKwkgIHdvcmspLgorCisyMDAwMDcwOCA1LjEgcmVsZWFzZSBmb3IgdXBsb2FkIHRvIGZ0cC5nbnUub3JnCisJKyBkb2N1bWVudCBjb25maWd1cmUgb3B0aW9ucyBpbiBJTlNUQUxMLgorCSsgYWRkIG1hbi1wYWdlIGZvciBuY3Vyc2VzIHRyYWNlIGZ1bmN0aW9ucy4KKwkrIGNvcnJlY3QgcmV0dXJuIHZhbHVlIHNob3duIGluIGN1cnNfdG91Y2guM3ggZm9yIGlzX2xpbmV0b3VjaGVkKCkgYW5kCisJICBpc193aW50b3VjaGVkKCksIGluIGN1cnNfaW5pdHNjci4zeCBmb3IgaXNlbmR3aW4oKSwgYW5kIGluCisJICBjdXJzX3Rlcm1hdHRyLjN4IGZvciBoYXNfaWMoKSBhbmQgaGFzX2lsKCkuCisJKyBhZGQgcHJvdG90eXBlcyBmb3IgdG91Y2hsaW5lKCkgYW5kIHRvdWNod2luKCksIGFkZGluZyB0aGVtIHRvIHRoZQorCSAgbGlzdCBvZiBnZW5lcmF0ZWQgZnVuY3Rpb25zLgorCSsgbW9kaWZ5IGZpZm9fcHVzaCgpIHRvIHB1dCBFUlIgaW50byB0aGUgZmlmbyBqdXN0IGxpa2Ugb3RoZXIgdmFsdWVzIHRvCisJICByZXR1cm4gZnJvbSB3Z2V0Y2goKS4gIEl0IHdhcyByZXR1cm5pbmcgd2l0aG91dCBkb2luZyB0aGF0LCBtYWtpbmcKKwkgIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpbmNvcnJlY3RseSByZXR1cm4gYSAwIChyZXBvcnRlZCBieSBUb2RkIEMKKwkgIE1pbGxlcikuCisJKyB1bmNvbW1lbnQgQ0NfU0hBUkVEX09QVFMgZm9yIHByb2dzIGFuZCB0YWNrIChzZWUgOTcxMTE1KSwgc2luY2UgdGhleQorCSAgYXJlIG5lZWRlZCBmb3IgU0NPIE9wZW5TZXJ2ZXIuCisJKyBtb3ZlIF9uY19kaXNhYmxlX3BlcmlvZCBmcm9tIGZyZWVfdHR5cGUuYyB0byBjb21wX3NjYW4uYyB0byBhcHBlYXNlCisJICBkeW5hbWljIGxvYWRlcnMgb24gU0NPIGFuZCBJUklYNjQuCisJKyBhZGQgIi1hIiBvcHRpb24gdG8gdGVzdC9uY3Vyc2VzLmMgdG8gaW52b2tlIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpCisJICBmb3IgdGVzdGluZy4KKwkrIGNvcnJlY3QgYXNzaWdubWVudCBpbiBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKSB3aGljaCB0ZWxscyBuY3Vyc2VzCisJICB3aGV0aGVyIHRvIHVzZSBkZWZhdWx0IGNvbG9ycywgb3IgdGhlIGFzc3VtZWQgb25lcyAocmVwb3J0ZWQgYnkgR2FyeQorCSAgRnVuY2sgPGdhcnlASW50cmVwaWQuQ29tPikuCisJKyByZXZpZXcvY29ycmVjdCBsb2dpYyBpbiBtay0xc3QuYXdrIGZvciBtYWtpbmcgc3ltYm9saWMgbGlua3MgZm9yCisJICBzaGFyZWQgbGlicmFyaWVzLCBpbiBwYXJ0aWN1bGFyIGZvciBGcmVlQlNELCBldGMuCisJKyByZWdlbmVyYXRlIG1pc2MvKi5kZWYgZmlsZXMgZm9yIE9TLzIgRU1YIGRsbCdzLgorCSsgY29ycmVjdCBxdW90aW5nIG9mIHZhbHVlcyBmb3IgQ0NfU0hBUkVEX09QVFMgaW4gYWNsb2NhbC5tNCBmb3IKKwkgIGNhc2VzIG9wZW5ic2QyKiwgb3BlbmJzZCosIGZyZWVic2QqIGFuZCBuZXRic2QqIChwYXRjaCBieSBQZXRlcgorCSAgV2VtbSkgKGVyciBpbiAyMDAwMDYxMCkuCisJKyBtaW5vciB1cGRhdGVzIHRvIHJlbGVhc2Ugbm90ZXMsIGFzIHdlbGwgYXMgYWRkaW5nL3VwZGF0aW5nIFVSTHMgZm9yCisJICBleGFtcGxlcyBjaXRlZCBpbiBhbm5vdW5jZS5odG1sCisJPiBzZXZlcmFsIGZpeGVzIGZyb20gUGhpbGlwcGUgQmxhaW4gPHBoaWxpcHBlLmJsYWluMkBmcmVlc2JlZS5mcj46CisJKyBjb3JyZWN0IHBsYWNlbWVudCBvZiBpZmRlZiBmb3IgTkNVUlNFU19YTkFNRVMgaW4gZnVuY3Rpb24KKwkgIF9uY19mcmVlX3Rlcm10eXBlKCksIGZpeGVzIGEgbWVtb3J5IGxlYWsuCisJKyBhZGQgYSBjYWxsIHRvIF9uY19zeW5jaG9vaygpIHRvIHRoZSBlbmQgb2YgZnVuY3Rpb24gd2hsaW5lKCkgbGlrZQorCSAgdGhhdCBpbiB3dmxpbmUoKSAoZGlmZmVyZW5jZSB3YXMgaW4gMS45LjQpLgorCSsgbWFrZSBDbGVhclNjcmVlbigpIGEgbGl0dGxlIGZhc3RlciBieSBtb3ZpbmcgdHdvIGluc3RhbmNlcyBvZgorCSAgVXBkYXRlQXR0cigpIG91dCBvZiBmb3ItbG9vcHMuCisJKyBzaW1wbGlmeSBDbHJCb3R0b20oKSBieSBlbGltaW5hdGluZyB0aGUgdHN0TGluZSBkYXRhLCB1c2luZyBmb3ItbG9vcHMKKwkgIChjZjogOTYwNDI4KS4KKworMjAwMDA3MDEgcHJlLXJlbGVhc2UKKwkrIGNoYW5nZSBtaW5vciB2ZXJzaW9uIHRvIDEsIGkuZS4sIG5jdXJzZXMgNS4xCisJKyBhZGQgZXhwZXJpbWVudGFsIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtY29sb3JmZ2JnIHRvIGNoZWNrIGZvcgorCSAgJENPTE9SVEVSTSB2YXJpYWJsZSBhcyBzZXQgYnkgcnh2dC9hdGVybS9FdGVybS4KKwkrIGFkZCBFdGVybSB0ZXJtaW5mbyBlbnRyeSAoTWljaGFlbCBKZW5uaW5ncyA8bWVqQHZhbGludXguY29tPikuCisJKyBtb2RpZnkgbWFubGlua3Muc2VkIHRvIHBpY2sgYWxpYXNlcyBmcm9tIHRoZSBTWU5PUFNJUyBzZWN0aW9uLCBhbmQKKwkgIHNldmVyYWwgbWFucGFnZXMgc28gbWFubGlua3Muc2VkIGNhbiBmaW5kIGFsaWFzZXMgZm9yIGNyZWF0aW5nCisJICBzeW1ib2xpYyBsaW5rcy4KKwkrIGFkZCBleHBsYW5hdGlvbiB0byBydW5fdGljLnNoIHJlZ2FyZGluZyBleHRlbmRlZCB0ZXJtaW5hbAorCSAgY2FwYWJpbGl0aWVzLgorCSsgY2hhbmdlIG1lc3NhZ2UgZm9ybWF0IGZvciBlZGl0X2NmZy5zaCwgc2luY2Ugc29tZSBwZW9wbGUgaW50ZXJwcmV0CisJICBpdCBhcyBhIHdhcm5pbmcuCisJKyBjb3JyZWN0IHVuZXNjYXBlZCAnJCcgaW4gc3lzdjV1dzcqfHVuaXhfc3YqIHJ1bGUgZm9yIENGX1NIQVJFRF9PUFRTCisJICBjb25maWd1cmUgbWFjcm8gKHJlcG9ydCBieSBUaGFuaCBNYSA8VGhhbmguTWFAY2FzaS1ydXNjby5jb20+KS4KKwkrIGNvcnJlY3QgbG9naWMgaW4gbGliX3R3YWl0LmMgYXMgdXNlZCBieSBsaWJfbW91c2UuYyBmb3IgR1BNIG1vdXNlCisJICBzdXBwb3J0IHdoZW4gcG9sbCgpIGlzIHVzZWQgcmF0aGVyIHRoYW4gc2VsZWN0KCkgKHByb21wdGVkIGJ5CisJICBkaXNjdXNzaW9uIHdpdGggRGF2aWQgQWxsZW4gPERBbGxlbjI0QGFvbC5jb20+KS4KKworMjAwMDA2MjQgcHJlLXJlbGVhc2UKKwkrIG1vZGlmeSBUcmFuc2Zvcm1MaW5lKCkgdG8gY2hlY2sgZm9yIGNlbGxzIHdpdGggZGlmZmVyZW50IGNvbG9yIHBhaXJzCisJICB0aGF0IGhhcHBlbiB0byByZW5kZXIgdGhlIHNhbWUgZGlzcGxheSBjb2xvcnMuCisJKyBhcHBseSAkTkNVUlNFU19OT19QQURESU5HIHRvIGNvc3QtY29tcHV0YXRpb24gaW4gbXZjdXIoKS4KKwkrIGltcHJvdmUgY29zdCBjb21wdXRhdGlvbiBpbiBQdXRSYW5nZSgpIGJ5IGFjY291bnRpbmcgZm9yIHRoZSB1c2UKKwkgIG9mIHBhcm1fcmlnaHRfY3Vyc29yIGluIG12Y3VyKCkuCisJKyBjb3JyZWN0IGNvc3QgY29tcHV0YXRpb24gaW4gRW1pdFJhbmdlKCksIHdoaWNoIHdhcyBub3QgdXNpbmcgdGhlCisJICBub3JtYWxpemVkIHZhbHVlIGZvciBjdXJzb3JfYWRkcmVzcy4KKwkrIG5ld2VyIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiAocmVmZXJlbmNlIHZlcnNpb24gdXNlZCBpbiBUSU4gMS41LjYpLgorCisyMDAwMDYxNworCSsgdXBkYXRlIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiAocmVmZXJlbmNlIHZlcnNpb24gdXNlZCBpbiBQQ1JFIDMuMikuCisJKyByZXN5bmMgY2hhbmdlcyB0byBnbmF0aHRtbCBhZ2FpbnN0IHZlcnNpb24gMS4yMiwgcmVnZW5lcmF0ZWQgaHRtbAorCSAgZmlsZXMgdW5kZXIgZG9jL2h0bWwvYWRhIHVzaW5nIHRoaXMgKDEuMjIuMS4xKS4KKwkrIHJlZ2VuZXJhdGVkIGh0bWwgZmlsZXMgdW5kZXIgZG9jL2h0bWwvbWFuIGFmdGVyIGNvcnJlY3RpbmcgdG9wIGFuZAorCSAgYm90dG9tIG1hcmdpbiBvcHRpb25zIGZvciBtYW4yaHRtbCBpbiBkaXN0Lm1rCisJKyBtaW5vciBmaXhlcyB0byB0ZXN0IHByb2dyYW1zIG5jdXJzZXMgJ2knIGFuZCB0ZXN0Y3VycyBwcm9ncmFtIHRvIG1ha2UKKwkgIHRoZSBzdWJ3aW5kb3cncyBiYWNrZ3JvdW5kIGNvbG9yIGNvdmVyIHRoZSBzdWJ3aW5kb3cuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCBzbyBBQ19NU0dfRVJST1IgaXMgdGVtcG9yYXJpbHkgZGVmaW5lZCB0byBhCisJICB3YXJuaW5nIGluIEFDX1BST0dfQ1hYIHRvIG1ha2UgaXQgcmVjb3ZlciBmcm9tIGEgbWlzc2luZyBDKysgY29tcGlsZXIKKwkgIHdpdGhvdXQgcmVxdWlyaW5nIHVzZXIgdG8gYWRkIC0td2l0aG91dC1jeHggb3B0aW9uIChhZGFwdGVkIGZyb20KKwkgIGNvbW1lbnQgYnkgQWtpbSBEZW1haWxsZSA8YWtpbUBlcGl0YS5mcj4gdG8gYXV0b2NvbmYgbWFpbGluZyBsaXN0KS4KKwkrIG1vZGlmeSBoZWFkZXJzLnNoIHRvIGF2b2lkIGNyZWF0aW5nIHRlbXBvcmFyeSBmaWxlcyBpbiB0aGUgYnVpbGQKKwkgIGRpcmVjdG9yeSB3aGVuIGluc3RhbGxpbmcgaGVhZGVycyAocmVwb3J0ZWQgYnkgU2VyZ2VpIFBva3JvdnNreQorCSAgPHBva0BuYnNwLm5zay5zdT4pCisKKzIwMDAwNjEwCisJKyByZWdlbmVyYXRlZCB0aGUgaHRtbCBmaWxlcyB1bmRlciBkb2MvaHRtbC9hZGEvZmlsZXMgYW5kCisJICBkb2MvaHRtbC9hZGEvZnVuY3Mgd2l0aCBhIHNsaWdodGx5LWltcHJvdmVkIGduYXRodG1sLgorCSsgYWRkIGttb3VzIGNhcGFiaWxpdHkgdG8gbGludXggdGVybWluZm8gZW50cnkgdG8gYWxsb3cgaXQgdG8gdXNlCisJICB4dGVybS1zdHlsZSBldmVudHMgcHJvdmlkZWQgYnkgZ3BtIHBhdGNoIGJ5IEpvZXJnIFNjaG9lbi4KKwkrIG1ha2UgdGhlIGNvbmZpZ3VyZSBtYWNybyBDRl9TSEFSRURfT1BUUyBhIGxpdHRsZSBzbWFydGVyIGJ5IHRlc3RpbmcKKwkgIGlmIC1mUElDIGlzIHN1cHBvcnRlZCBieSBnY2MgcmF0aGVyIHRoYW4gLWZwaWMuICBUaGUgZm9ybWVyIG9wdGlvbgorCSAgYWxsb3dzIGxhcmdlciBzeW1ib2wgdGFibGVzLgorCSsgdXBkYXRlIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiAocGF0Y2hlcyBieQorCSAgS2V2aW4gQnVldHRuZXIgPGtldkBwcmltZW5ldC5jb20+IChmb3IgZWxmNjRfaWE2NCksCisJICBCZXJuZCBLdWVtbWVybGVuIDxia3VlbW1lckBtZXZpcy5kZT4gKGZvciBNYWNPUyBYKSkuCisJKyBhZGQgd2FybmluZyBmb3IgJ3RpYyAtY3YnIGFib3V0IHVzZSBvZiAnXj8nIGluIHRlcm1pbmZvIHNvdXJjZSwgd2hpY2gKKwkgIGlzIGFuIGV4dGVuc2lvbi4KKworMjAwMDA1MjcKKwkrIG1vZGlmeSBlY2hvKCkgYmVoYXZpb3Igb2YgZ2V0Y2goKSB0byBtYXRjaCBTb2xhcmlzIGN1cnNlcyBmb3IKKwkgIGNhcnJpYWdlIHJldHVybiBhbmQgYmFja3NwYWNlIChyZXBvcnRlZCBieSBOZWlsIFphbmVsbGEpLgorCSsgY2hhbmdlIF9uY19mbHVzaCgpIHRvIGEgZnVuY3Rpb24uCisJKyBtb2RpZnkgZGVsc2NyZWVuKCkgdG8gY2hlY2sgaWYgdGhlIG91dHB1dCBzdHJlYW0gaGFzIGJlZW4gY2xvc2VkLCBhbmQKKwkgIGlmIHNvLCBmcmVlIHRoZSBidWZmZXIgYWxsb2NhdGVkIGZvciBzZXRidWYgKHRoaXMgcHJvdmlkZXMgYW4KKwkgIG5jdXJzZXMtc3BlY2lmaWMgd2F5IHRvIGF2b2lkIGEgbWVtb3J5IGxlYWsgd2hlbiByZXBlYXRlZGx5IGNhbGxpbmcKKwkgIG5ld3Rlcm0gcmVwb3J0ZWQgYnkgQ2hpcHAgQyA8YXRfMUB6ZG5ldG9uZWJveC5jb20+KS4KKwkrIGNvcnJlY3QgdHlwbyBpbiBjdXJzX2dldGNoLjN4IG1hbnBhZ2UgcmVnYXJkaW5nIG5vZWNobyAocmVwb3J0ZWQgYnkKKwkgIERhdmlkIE1hbG9uZSA8ZHdtYWxvbmVAbWF0aHMudGNkLmllPikuCisJKyBhZGQgYSAibWFrZSBsaWJzIiBydWxlLgorCSsgbWFrZSB0aGUgQWRhOTUgaW50ZXJmYWNlIGJ1aWxkIHdpdGggY29uZmlndXJlIC0tZW5hYmxlLXdpZGVjLgorCSsgaWYgdGhlIGNvbmZpZ3VyZSAtLWVuYWJsZS13aWRlYyBvcHRpb24gaXMgZ2l2ZW4sIGFwcGVuZCAndycgdG8gbmFtZXMKKwkgIG9mIHRoZSBnZW5lcmF0ZWQgbGlicmFyaWVzIChlLmcuLCBsaWJuY3Vyc2Vzdy5zbykgdG8gYXZvaWQgY29uZmxpY3QKKwkgIHdpdGggZXhpc3RpbmcgbmN1cnNlcyBsaWJyYXJpZXMuCisKKzIwMDAwNTIwCisJKyBtb2RpZnkgdmlldy5jIHRvIG1ha2UgYSBydWRpbWVudGFyeSB2aWV3ZXIgb2YgVVRGLTggdGV4dCBpZiBuY3Vyc2VzCisJICBpcyBjb25maWd1cmVkIHdpdGggdGhlIGV4cGVyaW1lbnRhbCB3aWRlLWNoYXJhY3RlciBzdXBwb3J0LgorCSsgYWRkIGEgc2ltcGxlIFVURi04IG91dHB1dCBkcml2ZXIgdG8gdGhlIGV4cGVyaW1lbnRhbCB3aWRlLWNoYXJhY3RlcgorCSAgc3VwcG9ydC4gIElmIGFueSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIExDX0FMTCwgTENfQ1RZUEUgb3IKKwkgIExBTkcgY29udGFpbiB0aGUgc3RyaW5nICJVVEYtOCIsIHRoaXMgZHJpdmVyIHdpbGwgYmUgdXNlZCB0bworCSAgdHJhbnNsYXRlIHRoZSBvdXRwdXQgdG8gVVRGLTguICBUaGlzIHdvcmtzIHdpdGggWEZyZWU4NiB4dGVybS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGFsbG93IGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgb24gQmVPUworCSAgKGZyb20gYSBwYXRjaCBieSBWYWxlcml5IEUgVXNoYWtvdikuCisJKyBtb2RpZnkgbGliX2FkZGNoLmMgdG8gYWxsb3cgcmVwZWF0ZWQgdXBkYXRlIHRvIHRoZSBsb3dlci1yaWdodAorCSAgY29ybmVyLCByYXRoZXIgdGhhbiBkaXNwbGF5aW5nIG9ubHkgdGhlIGZpcnN0IGNoYXJhY3RlciB3cml0dGVuIHVudGlsCisJICB0aGUgY3Vyc29yIGlzIG1vdmVkLiAgUmVjZW50IHZlcnNpb25zIG9mIFNWcjQgY3Vyc2VzIGNhbiB1cGRhdGUgdGhlCisJICBsb3dlci1yaWdodCBjb3JuZXIsIGFuZCBiZWhhdmUgdGhpcyB3YXkgKHJlcG9ydGVkIGJ5IE5laWwgWmFuZWxsYSkuCisJKyBhZGQgYSBsaW1pdC1jaGVjayBpbiBfbmNfZG9fY29sb3IoKSwgdG8gYXZvaWQgdXNpbmcgaW52YWxpZCBjb2xvcgorCSAgcGFpciB2YWx1ZSAocmVwb3J0IGJ5IEJyZW5kYW4gTydEZWEgPGJvZEBjb21wdXNvbC5jb20uYXU+KS4KKworMjAwMDA1MTMKKwkrIHRoZSB0YWNrIHByb2dyYW0ga25vd3MgaG93IHRvIHVzZSBzbWN1cCBhbmQgcm1jdXAgYnV0IHRoZSAic2hvdyBjYXBzCisJICB0aGF0IGNhbiBiZSB0ZXN0ZWQiIGZlYXR1cmUgZGlkIG5vdCByZWZsZWN0IHRoaXMga25vd2xlZGdlLiAgQ29ycmVjdAorCSAgdGhlIGRpc3BsYXkgaW4gdGhlIG1lbnUgdGFjay90ZXN0L2VkaXQvYyAocGF0Y2ggYnkgRGFuaWVsIFdlYXZlcikuCisJKyB4dGVybS0xNmNvbG9yIGRvZXMgYWxsb3cgYm9sZCtjb2xvcnMsIHJlbW92ZWQgbmN2IzMyIGZyb20gdGhhdAorCSAgdGVybWluZm8gZW50cnkuCisKKzIwMDAwNTA2CisJKyBjb3JyZWN0IGFzc2lnbm1lbnQgdG8gU1AtPl9oYXNfc2dyXzM5XzQ5IGluIGxpYl9kZnRfZmdiZy5jLCB3aGljaAorCSAgYnJva2UgY2hlY2sgZm9yIHNjcmVlbidzIEFYIGNhcGFiaWxpdHkgKHJlcG9ydGVkIGJ5IFZhbGVyaXkgRSBVc2hha292CisJICA8dXdlQHB0Yy5zcGJ1LnJ1PikuCisJKyBjaGFuZ2UgbWFuMmh0bWwgcnVsZSBpbiBkaXN0Lm1rIHRvIHdvcmthcm91bmQgYnVnIGluIHNvbWUKKwkgIG1hbi1wcm9ncmFtcyB0aGF0IGlnbm9yZXMgbG9jYWxlIHdoZW4gcmVuZGVyaW5nIGh5cGhlbmF0aW9uLgorCSsgY2hhbmdlIHdlYi0gYW5kIGZ0cC1zaXRlIHRvIGRpY2tleS5oaXMuY29tCisKKzIwMDAwNDI5CisJKyBtb3ZlIF9uY19jdXJyX3Rva2VuIGZyb20gcGFyc2VfZW50cnkuYyB0byBjb21wX3NjYW4uYywgdG8gd29yayBhcm91bmQKKwkgIHByb2JsZW0gbGlua2luZyB0YWNrIG9uIE1hY09TIFggRFAzLgorCSsgaW5jbHVkZSA8c3lzL3RpbWUuaD4gaW4gbGliX25hcG1zLmMgdG8gY29tcGlsZSBvbiBNYWNPUyBYIERQMworCSAgKHJlcG9ydGVkIGJ5IEdlcmJlbiBXaWVyZGEgPHdpZXJkYUBob2xtZXMubmw+KS4KKwkrIG1vZGlmeSBsaWJfdmlkYXR0ci5jIHRvIGNoZWNrIGZvciBuY3YgZml4ZXMgd2hlbiBwYWlyLTAgaXMgbm90CisJICBkZWZhdWx0IGNvbG9ycy4KKwkrIGFkZCAtZCBvcHRpb24gdG8gbmN1cnNlcy5jLCB0byB0dXJuIG9uIGRlZmF1bHQtY29sb3JzIGZvciB0ZXN0aW5nLgorCSsgYWRkIGEgY2hlY2sgdG8gX25jX21ha2VuZXcoKSB0byBlbnN1cmUgdGhhdCBuZXd3aW4oKSBhbmQgbmV3cGFkKCkKKwkgIGNhbGxzIGRvIG5vdCBzaWxlbnRseSBmYWlsIGJ5IHBhc3NpbmcgdG9vLWxhcmdlIGxpbWl0cy4KKwkrIGFkZCBzeW1ib2wgTkNVUlNFU19TSVpFX1QgdG8gdXNlIHJhdGhlciB0aGFuIGV4cGxpY2l0ICdzaG9ydCcgZm9yCisJICBpbnRlcm5hbCB3aW5kb3cgYW5kIHBhZCBzaXplcy4gIE5vdGUgdGhhdCBzaW5jZSB0aGlzIGlzIHZpc2libGUgaW4KKwkgIHRoZSBXSU5ET1cgc3RydWN0LCBpdCB3b3VsZCBiZSBhbiBBQkkgY2hhbmdlIHRvIG1ha2UgdGhpcyBhbiAnaW50JworCSAgKHByb21wdGVkIGJ5IGEgcXVlc3Rpb24gYnkgQmFzdGlhbiBUcm9tcGV0dGVyCisJICA8YnRyb21wZXR0ZXJAZmlyZW1haWwuZGU+LCB3aG8gYXR0ZW1wdGVkIHRvIGNyZWF0ZSBhIDk2MDAwLWxpbmUgcGFkKS4KKworMjAwMDA0MjIKKwkrIGFkZCBtZ3Rlcm0gdGVybWluZm8gZW50cnkgZnJvbSBOZXRCU0QsIG1pbm9yIGFkanVzdG1lbnRzIHRvIHN1bi1zczUsCisJICBhaXh0ZXJtIGVudHJpZXMgLVRECisJKyBtb2RpZnkgdGFjay9hbnNpLmMgdG8gbWFrZSBpdCBtb3JlIHRvbGVyYW50IG9mIGJhZCBBTlNJIHJlcGxpZXMuICBBbgorCSAgZXhhbXBsZSBvZiBhbiBpbGxlZ2FsIEFOU0kgcmVzb25zZSBjYW4gYmUgZm91bmQgdXNpbmcgTWljcm9zb2Z0J3MKKwkgIFRlbG5ldCBjbGllbnQuICBBIGNvcnJlY3QgZGlzcGxheSBjYW4gYmUgZm91bmQgdXNpbmcgYSBWVC00eHgKKwkgIHRlcm1pbmFsIG9yIFhGcmVlODYgeHRlcm0gd2l0aDoKKwkJWFRlcm0qVlQxMDAqZGVjVGVybWluYWxJRDogIDQ1MAorCSAgKHBhdGNoIGJ5IERhbmllbCBXZWF2ZXIpLgorCSsgbW9kaWZ5IGdkYy5jIHRvIHJlY29nbml6ZSAncScgZm9yIHF1aXQsICdzJyBmb3Igc2luZ2xlLXN0ZXAgYW5kICcgJworCSAgZm9yIHJlc3VtZS4gIEFkZCAnLW4nIG9wdGlvbiB0byBmb3JjZSBnZGMncyBzdGFuZGFyZCBpbnB1dCB0bworCSAgL2Rldi9udWxsLCB0byBib3RoIGlsbHVzdHJhdGUgdGhlIHVzZSBvZiBuZXd0ZXJtKCkgZm9yIHNwZWNpZnlpbmcKKwkgIGFsdGVybmF0ZSBpbnB1dHMgYXMgd2VsbCBhcyBmb3IgdGVzdGluZyBzaWduYWwgaGFuZGxpbmcuCisJKyBtaW5vciBmaXggZm9yIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLW1hbnBhZ2Utc3ltbGlua3MsIGZvciB0YXJnZXQKKwkgIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBhIHBlcmlvZCAoJy4nKSAocmVwb3J0ZWQgYnkgTGFycnkgVmlyZGVuKS4KKworMjAwMDA0MTUKKwkrIG1pbm9yIGFkZGl0aW9ucyB0byBiZXRlcm0gZW50cnkgKGZlZWRiYWNrIGZyb20gUmljbyBUdWRvcikgLVRECisJKyBjb3JyZWN0aW9ucy91cGRhdGVzIGZvciBzb21lIElCTSB0ZXJtaW5mbyBlbnRyaWVzIC1URAorCSsgbW9kaWZ5IF9uY19zY3JlZW5fd3JhcCgpIHNvIHRoYXQgd2hlbiBleGl0aW5nIGN1cnNlcyBtb2RlIHdpdGgKKwkgIG5vbi1kZWZhdWx0IGNvbG9ycywgdGhlIGxhc3QgbGluZSBvbiB0aGUgc2NyZWVuIHdpbGwgYmUgY2xlYXJlZCB0bworCSAgdGhlIHNjcmVlbidzIGRlZmF1bHQgY29sb3JzIChyZXF1ZXN0IGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIG1vZGlmeSBuY3Vyc2VzLmMgJ3InIGV4YW1wbGUgdG8gc2V0IG5vbmwoKSwgYWxsb3dpbmcgY29udHJvbC9NIHRvIGJlCisJICByZWFkIGZvciBkZW1vbnN0cmF0aW5nIHRoZSBSRVFfTkVXX0xJTkUgb3BlcmF0aW9uIChwcm9tcHRlZCBieSBhCisJICBxdWVzdGlvbiBieSBUb255IEwgS2VpdGggPHRsa2VpdGhAa2VpdGhjb25zdWx0aW5nLmNvbT4pLgorCSsgbW9kaWZ5IG5jdXJzZXMuYyAncicgZXhhbXBsZSBvZiBmaWVsZF9pbmZvKCkgdG8gd29yayBvbiBTb2xhcmlzIDIuNywKKwkgIGRvY3VtZW50ZWQgZXh0ZW5zaW9uIG9mIG5jdXJzZXMgd2hpY2ggYWxsb3dzIGEgemVybyBwb2ludGVyLgorCSsgbW9kaWZ5IGZtdF9jb21wbGV4KCkgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93IGluIGNhc2Ugb2YgZXhjZXNzCisJICByZWN1cnNpb24sIGFuZCB0byByZWNvZ25pemUgIiVlJT8iIGFzIGEgc3lub255bSBmb3IgZWxzZS1pZiwgd2hpY2gKKwkgIG1lYW5zIHRoYXQgaXQgd2lsbCBub3QgcmVjdXIgZm9yIHRoYXQgc3BlY2lhbCBjYXNlLgorCSsgYWRkIGxvZ2ljIHRvIHN1cHBvcnQgJFRFUk1DQVAgdmFyaWFibGUgaW4gY2FzZSB0aGUgVVNFX0dFVENBUCBzeW1ib2wKKwkgIGlzIGRlZmluZWQgKHBhdGNoIGJ5IFRvZGQgQyBNaWxsZXIpLgorCSsgbW9kaWZ5IG9uZSBvZiB0aGUgbTQgZmlsZXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgQWRhOTUgc291cmNlcywKKwkgIHRvIGF2b2lkIHVzaW5nIHRoZSB0b2tlbiAic3ltYm9scyIgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisKKzIwMDAwNDA4CisJKyBhZGQgdGVybWluZm8gZW50cmllcyBic2Rvcy1wYy1tLCBic2Rvcy1wYy1tb25vIChKZWZmcmV5IEMgSG9uaWcpCisJKyBjb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHRlcm1pbmZvIGVudHJ5IG5hbWU6ICBicTMwMC1ydiB3YXMgZ2l2ZW4gYXMKKwkgIGJnMzAwLXJ2IGluIGVzcidzIHZlcnNpb24uCisJKyBtb2RpZnkgcmVkcmF3d2luKCkgbWFjcm8gc28gaXRzIHBhcmFtZXRlciBpcyBmdWxseSBwYXJlbnRoZXNpemVkCisJICAoZml4ZXMgRGViaWFuIGJ1ZyByZXBvcnQgIzYxMDg4KS4KKwkrIGNvcnJlY3QgZm9ybWF0dGluZyBlcnJvciBpbiBkdW1wX2VudHJ5KCkgd2hpY2ggc2V0IGluY29ycmVjdCBjb2x1bW4KKwkgIHZhbHVlIHdoZW4gbm8gbmV3bGluZSB0cmltbWluZyB3YXMgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYW4gZW50cnksCisJICBiZWZvcmUgYXBwZW5kaW5nICJ1c2U9IiBjbGF1c2VzIChjZjogOTYwNDA2KS4KKworMjAwMDA0MDEKKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1tYW5wYWdlLXN5bWxpbmtzCisJKyBjaGFuZ2UgdW5jdHJsKCkgdG8gcmVuZGVyIEMxIGNoYXJhY3RlcnMgKDEyOC0xNTkpIGFzIH5ALCB+QSwgZXRjLgorCSsgY2hhbmdlIG1ha2VmaWxlcyBzbyB0cmFjZSgpIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIG9ubHkgaWYgVFJBQ0UgaXMKKwkgIGRlZmluZWQsIGUuZy4sIGluIHRoZSBkZWJ1ZyBsaWJyYXJ5LiAgTW9kaWZ5IHJlbGF0ZWQgY2FsbHMgdG8KKwkgIF90cmFjZWNoYXIoKSB0byB1c2UgdW5jdHJsKCkgaW5zdGVhZC4KKworMjAwMDAzMjUKKwkrIGFkZCBzY3JlZW4ncyBBWCBjYXBhYmlsaXR5IChmb3IgRUNNQSBTR1IgMzkgYW5kIDQ5KSB0byBhcHBsaWNhYmxlCisJICB0ZXJtaW5mbyBlbnRyaWVzLCB1c2UgcHJlc2VuY2Ugb2YgdGhpcyBhcyBhIGNoZWNrIGZvciBhIHNtYWxsCisJICBpbXByb3ZlbWVudCBpbiBzZXR0aW5nIGRlZmF1bHQgY29sb3JzLgorCSsgaW1wcm92ZSBsb2dpYyBpbiBfbmNfZG9fY29sb3IoKSBpbXBsZW1lbnRpbmcgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkKKwkgIGJ5IHBhc3NpbmcgaW4gcHJldmlvdXMgY29sb3IgcGFpciBpbmZvIHRvIGVsaW1pbmF0ZSByZWR1bmRhbnQgY2FsbCB0bworCSAgc2V0X29yaWdpbmFsX2NvbG9ycygpLiAgKFBhcnQgb2YgdGhpcyBpcyBmcm9tIGEgcGF0Y2ggYnkgQWxleGFuZGVyCisJICBWIEx1a3lhbm92KS4KKwkrIG1vZGlmeSB3YXJuaW5nIGluIF9uY190cmFuc19zdHJpbmcoKSBhYm91dCBhIHBvc3NpYmx5IHRvby1sb25nIHN0cmluZworCSAgdG8gZG8gdGhpcyBvbmNlIG9ubHkgcmF0aGVyIHRoYW4gZm9yIGVhY2ggY2hhcmFjdGVyIHBhc3QgdGhlCisJICB0aHJlc2hvbGQgKDYwMCkuICBDaGFuZ2UgaW50ZXJmYWNlIG9mIF9uY190cmFuc19zdHJpbmcoKSB0byBhbGxvdworCSAgY2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdy4KKwkrIGNvcnJlY3QgdXNlIG9mIG1lbXNldCBpbiBfbmNfcmVhZF9lbnRyeV9zb3VyY2UoKSB0byBpbml0aWFsaXplIEVOVFJZCisJICBzdHJ1Y3QgZWFjaCB0aW1lIGJlZm9yZSByZWFkaW5nIG5ldyBkYXRhIGludG8gaXQsIHJhdGhlciB0aGFuIG9uY2UKKwkgIHBlciBsb29wIChjZjogIDk5MDMwMSkuICBUaGlzIGFmZmVjdHMgbXVsdGktZW50cnkgaW4tY29yZSBvcGVyYXRpb25zCisJICBzdWNoIGFzICJpbmZvY21wIC1GYSIuCisKKzIwMDAwMzE5CisJKyByZW1vdmUgYSBzcHVyaW91cyBwb2ludGVyIGluY3JlbWVudCBpbiBfbmNfaW5mb3RvY2FwKCkgY2hhbmdlcyBmcm9tCisJICAyMDAwMDMxMS4gIEFkZCBjaGVjayBmb3IgJy4nIGluIGZvcm1hdCBvZiBudW1iZXIsIHNpbmNlIHRoYXQgYWxzbworCSAgaXMgbm90IHBlcm1pdHRlZCBpbiB0ZXJtY2FwLgorCSsgY29ycmVjdCB0eXBvIGluIHJ4dnQtYmFzaWMgdGVybWluZm8gZnJvbSB0ZW1wb3JhcnkgY2hhbmdlIG1hZGUgd2hpbGUKKwkgIGludGVncmF0aW5nIDIwMDAwMzE4LgorCisyMDAwMDMxOAorCSsgcmV2ZXJ0IHBhcnQgb2YgdGhlIHZ0MjIwIGNoYW5nZSAocmVxdWVzdCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIGFkZCBhbnNpLSogdGVybWluZm8gZW50cmllcyBmcm9tIEVTUidzIHZlcnNpb24uCisJKyBhZGQgLWEgb3B0aW9uIHRvIHRpYyBhbmQgaW5mb2NtcCwgd2hpY2ggcmV0YWlucyBjb21tZW50ZWQtb3V0CisJICBjYXBhYmlsaXRpZXMgZHVyaW5nIHNvdXJjZSB0cmFuc2xhdGlvbi9jb21wYXJpc29uLCBlLmcuLCBjYXB0b2luZm8KKwkgIGFuZCBpbmZvdG9jYXAuCisJKyBtb2RpZnkgY2FyZGZpbGUuYyB0byBkaXNwbGF5IGFuIGVtcHR5IGNhcmQgaWYgbm8gaW5wdXQgZGF0YSBmaWxlIGlzCisJICBmb3VuZCwgZml4ZXMgYSBjb3JlIGR1bXAgaW4gdGhhdCBjYXNlIChyZXBvcnRlZCBieSBCcnVubyBIYWlibGUpLgorCSsgY29ycmVjdCBicmFja2V0aW5nIGluIENGX01BVEhfTElCIGNvbmZpZ3VyZSBtYWNybywgd2hpY2ggZ2F2ZSB3cm9uZworCSAgcmVzdWx0IGZvciBPUy8yIEVNWC4KKwkrIHN1cHBseSByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIF9uY19yZXNvbHZlX3VzZXMoKSBjYWxsIGluCisJICByZWFkX3Rlcm1jYXAuYywgb3Zlcmxvb2tlZCBpbiAyMDAwMDMxMSAocmVwb3J0ZWQgYnkgVG9kZCBDIE1pbGxlcikuCisJPiBwYXRjaGVzIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+OgorCSsgZml4IGEgY29tcGlsZXIgd2FybmluZyBpbiBmdHlfZW51bS5jCisJKyBjb3JyZWN0IExJQl9QUkVGSVggZXhwcmVzc2lvbiBmb3IgREVQU19DVVJTRVMgaW4gcHJvZ3MsIHRhY2sKKwkgIG1ha2VmaWxlcywgd2hpY2ggcmVzdWx0ZWQgaW4gcmVkdW5kYW50IGxpbmtpbmcgKGNmOiAyMDAwMDEyMikuCisKKzIwMDAwMzExCisJKyBtYWtlIGlmZGVmJ3MgZm9yIEJST0tFTl9MSU5LRVIgY29uc2lzdGVudCAocGF0Y2ggYnkgVG9kZCBDIE1pbGxlcikuCisJKyBpbXByb3ZlZCB0YWNrL1JFQURNRSAocGF0Y2ggYnkgRGFuaWVsIFdlYXZlcikuCisJKyBtb2RpZnkgdHB1dC5jIHRvIGVuc3VyZSB0aGF0IHVuc3BlY2lmaWVkIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0bworCSAgdHBhcm0oKSBhcyAwJ3MuCisJKyBhZGQgYSBmZXcgY2hlY2tzIGluIGluZm9jbXAgdG8gZ3VhcmQgYWdhaW5zdCBidWZmZXIgb3ZlcmZsb3cgd2hlbgorCSAgZGlzcGxheWluZyBzdHJpbmcgY2FwYWJpbGl0aWVzLgorCSsgYWRkIGNoZWNrIGZvciB6ZXJvLXVzZXMgaW4gaW5mb2NtcCdzIGZpbGVfY29tcGFyaXNvbigpIGZ1bmN0aW9uCisJICBiZWZvcmUgY2FsbGluZyBfbmNfYWxpZ25fdGVybXR5cGUoKS4gIE90aGVyd2lzZSBvbmUgcGFyYW1ldGVyIGlzCisJICBpbmRleGVkIHBhc3QgdGhlIGVuZCBvZiB0aGUgdXNlcy1hcnJheS4KKwkrIGFkZCBhbiBvcHRpb24gLXEgdG8gaW5mb2NtcCB0byBzcGVjaWZ5IHRoZSBsZXNzIHZlcmJvc2Ugb3V0cHV0LAorCSAga2VlcGluZyB0aGUgZXhpc3RpbmcgZm9ybWF0IGFzIHRoZSBkZWZhdWx0LCB0aG91Z2ggbm90IHJldGFpbmluZyB0aGUKKwkgIHByZXZpb3VzIGJlaGF2aW9yIHRoYXQgbWFkZSB0aGUgLUYgb3B0aW9uIGNvbXBhcmUgZWFjaCBlbnRyeSB0bworCSAgaXRzZWxmLgorCSsgYWRhcHRlZCBwYXRjaCBieSBFU1IgdG8gbWFrZSBpbmZvY21wIC1GIGxlc3MgdmVyYm9zZSAtVEQKKwkgICh0aGUgc3VibWl0dGVkIHBhdGNoIHdhcyB1bnVzYWJsZSBiZWNhdXNlIGl0IGRpZCBub3QgY29tcGlsZQorCSAgcHJvcGVybHkpCisJICArIG1vZGlmeSB3cml0ZV9lbnRyeS5jIHRvIGVuc3VyZSB0aGF0IGFic2VudCBvciBjYW5jZWxsZWQgYm9vbGVhbnMKKwkgICAgYXJlIHdyaXR0ZW4gYXMgRkFMU0UsIGZvciBjb25zaXN0ZW5jeSB3aXRoIGluZm9jbXAgd2hpY2ggbm93CisJICAgIGFzc3VtZXMgdGhpcy4gIE5vdGUgdGhhdCBmb3IgdGhlIHNtYWxsLWNvcmUgY29uZmlndXJhdGlvbiwgdGljCisJICAgIG1heSBub3QgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHQgYXMgYmVmb3JlLgorCSAgKyBjaGFuZ2Ugc29tZSBwcml2YXRlIGxpYnJhcnkgaW50ZXJmYWNlcyB1c2VkIGJ5IGluZm9jbXAsIGUuZy4sCisJICAgIF9uY19yZXNvbHZlX3VzZXMoKS4KKwkgICsgYWRkIGEgY2hlY2sgaW4gX25jX2luZm90b2NhcCgpIHRvIGVuc3VyZSB0aGF0IGNtLXN0eWxlIGNhcGFiaWxpdGllcworCSAgICBhY2NlcHQgb25seSAlZCBjb2RlcyB3aGVuIGNvbnZlcnRpbmcgdGhlIGZvcm1hdCBmcm9tIHRlcm1pbmZvIHRvCisJICAgIHRlcm1jYXAuCisJICArIG1vZGlmeSBFTlRSWSBzdHJ1Y3QgdG8gc2VwYXJhdGUgdGhlIGRhdGEgaW4gJ3BhcmVudCcgaW50byB0aGUgbmFtZQorCSAgICBhbmQgbGluayB2YWx1ZXMgKHRoZSBvcmlnaW5hbCBpZGVhIHRvIG1lcmdlIGJvdGggaW50byAncGFyZW50JyB3YXMKKwkgICAgbm90IGdvb2QpLgorCSAgKyBkaXNjYXJkIHJlcGFpcl9hY3NjKHR0ZXJtKTsKKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGRyb3Agc3VwcG9ydCBmb3IgZ25hdCAzLjEwCisJKyBtb3ZlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBodG1sIGZpbGVzIHVuZGVyIC4vZG9jIGRpcmVjdG9yeSwKKwkgIGFkZGluZyBtYWtlZmlsZSBydWxlcyBmb3IgdGhpcyB0byBkaXN0Lm1rCisKKzIwMDAwMzA0CisJKyBjb3JyZWN0IGNvbmZsaWN0aW5nIHVzZSBvZiB0cGFybSgpIGluIDIwMDAwMjI2IGNoYW5nZSB0byB0aWMsIHdoaWNoCisJICBtYWRlIGl0IGNoZWNrIG9ubHkgb25lIGVudHJ5IGF0IGEgdGltZS4KKwkrIGZpeCBlcnJvcnMgaW4gbmN1cnNlcy1pbnRyby5odG1sIGFuZCBoYWNrZ3VpZGUuaHRtbCBzaG93biBieSBEYXZlCisJICBSYWdnZXR0J3MgdGlkeS4KKwkrIG1ha2UgdGhlIGV4YW1wbGUgaW4gbmN1cnNlcy1pbnRyby5odG1sIGRvIHNvbWV0aGluZyBwbGF1c2libGUsIGFuZAorCSAgY29ycmVjdGVkIG1pc2xlYWRpbmcgY29tbWVudCAocmVwb3J0ZWQgYnkgTmVpbCBaYW5lbGxhKS4KKwkrIG1vZGlmeSBwbm91dHJlZnJlc2goKSB0byBzZXQgbmV3c2NyLT5fbGVhdmVvayBhcyB3bm91dHJlZnJlc2goKSBkb2VzLAorCSAgdG8gZml4IGEgY2FzZSB3aGVyZSB0aGUgY3Vyc29yIHBvc2l0aW9uIHdhcyBub3QgdXBkYXRlZCBhcyBpbgorCSAgU29sYXJpcyAgKHBhdGNoIGJ5IERhdmlkIE1vc2JlcmdlciA8ZGF2aWRtQGhwbC5ocC5jb20+KS4KKwkrIGFkZCBhIGxpbWl0LWNoZWNrIGZvciB3cmVzaXplKCkgdG8gZW5zdXJlIHRoYXQgYSBzdWJ3aW5kb3cgZG9lcyBub3QKKwkgIGFkZHJlc3Mgb3V0IG9mIGJvdW5kcy4KKwkrIGNvcnJlY3Qgb2Zmc2V0cyB1c2VkIGZvciBzdWJ3aW5kb3dzIGluIHdyZXNpemUoKSAocGF0Y2ggYnkgTWljaGFlbAorCSAgQW5kcmVzIDxtYUBzdXNlLmRlPikuCisJKyByZWdlbmVyYXRlIGh0bWwnaXplZCBtYW51YWwgcGFnZXMgd2l0aCBtYW4yaHRtbCAzLjAuMSAocGF0Y2ggYnkKKwkgIEp1ZXJnZW4gUGZlaWZlcikuICBUaGlzIGdlbmVyYXRlZCBhIGZpbGUgd2l0aCBhIHNwYWNlIGluIGl0cyBuYW1lLAorCSAgd2hpY2ggSSByZW1vdmVkLgorCSsgZml4IGEgZmV3IHNwZWxsaW5nIGVycm9ycyBpbiB0YWNrLgorCSsgbW9kaWZ5IHRhY2svTWFrZWZpbGUuaW4gdG8gbWF0Y2ggbGlua2VyIG9wdGlvbnMgb2YgcHJvZ3MvTWFrZWZpbGUuaW47CisJICBvdGhlcndpc2UgaXQgZG9lcyBub3QgYnVpbGQgcHJvcGVybHkgZm9yIG9sZGVyIEhQVVggc2hhcmVkIGxpYnJhcnkKKwkgIGNvbmZpZ3VyYXRpb25zLgorCSsgYWRkIHNldmVyYWwgdGVybWluZm8gZW50cmllcyBmcm9tIGVzcidzICIxMS4wIi4KKworMjAwMDAyMjYKKwkrIG1ha2UgJ3RwdXQgZmxhc2gnIHdvcmsgcHJvcGVybHkgZm9yIHh0ZXJtIGJ5IGZsdXNoaW5nIG91dHB1dCBpbgorCSAgZGVsYXlfb3V0cHV0KCkgd2hlbiB1c2luZyBuYXBtcygpLCBhbmQgbW9kaWZ5aW5nIHh0ZXJtJ3MgdGVybWluZm8gdG8KKwkgIHNwZWNpZnkgbm8gcGFkZGluZyBjaGFyYWN0ZXIuICBPdGhlcndpc2UsIHh0ZXJtJ3MgcmVwb3J0ZWQgYmF1ZCByYXRlCisJICBjYW4gbWlzbGVhZCBuY3Vyc2VzIGludG8gcHJvZHVjaW5nIHRvbyBmZXcgcGFkZGluZyBjaGFyYWN0ZXJzCisJICAoRGViaWFuICM1ODUzMCkuCisJKyBhZGQgYSBjaGVjayB0byB0aWMgZm9yIGNvbnNpc3RlbmN5IGJldHdlZW4gc2dyIGFuZCB0aGUgc2VwYXJhdGUKKwkgIGNhcGFiaWxpdGllcyBzdWNoIGFzIHNtc28sIHVzZSB0aGlzIHRvIGNoZWNrL2NvcnJlY3Qgc2V2ZXJhbAorCSAgdGVybWluZm8gZW50cmllcyAoRGViaWFuICM1ODUzMCkuCisJKyBhZGQgYSBjaGVjayB0byB0aWMgaWYgY3Z2aXMgaXMgdGhlIHNhbWUgYXMgY25vcm0sIGFkanVzdGVkIHNldmVyYWwKKwkgIHRlcm1pbmZvIGVudHJpZXMgdG8gcmVtb3ZlIHRoZSBjb25mbGljdCAoRGViaWFuICM1ODUzMCkuCisJKyBjb3JyZWN0IHByb3RvdHlwZSBzaG93biBpbiBhdHRyX3NldCgpL3dhdHRyX3NldCgpIG1hbnBhZ2VzIChmaXhlcworCSAgRGViaWFuICM1Mzk2MikuCisJKyBtaW5vciBjbGFyaWZpY2F0aW9uIGZvciBjdXJzX3NldCgpIGFuZCBsZWF2ZW9rKCkgbWFucGFnZXMuCisJKyB1c2UgbWtzdGVtcCgpIGZvciBjcmVhdGluZyB0ZW1wb3JhcnkgZmlsZSBmb3IgdGljJ3MgcHJvY2Vzc2luZyBvZgorCSAgJFRFUk1DQVAgY29udGVudHMgKGZpeGVzIERlYmlhbiAjNTY0NjUpLgorCSsgY29ycmVjdCB0d28gZXJyb3JzIGZyb20gaW50ZWdyYXRpbmcgQWxleGFuZGVyJ3MgY2hhbmdlczogIGRpZCBub3QKKwkgIGhhbmRsZSB0aGUgbm9uLWJjZSBjYXNlIHByb3Blcmx5IGluIGNhbl9lcmFzZV93aXRoKCkgKG5vdGVkIGJ5CisJICBBbGV4YW5kZXIpLCBhbmQgbGVmdCBmZy9iZyB1bmluaXRpYWxpemVkIGluIHRoZSBwYWlyLXplcm8gY2FzZSBvZgorCSAgX25jX2RvX2NvbG9yKCkgKHJlcG9ydGVkIGJ5IERyIFdlcm5lciBGaW5rIDx3ZXJuZXJAc3VzZS5kZT4gYW5kCisJICBJc21hZWwgQ29yZGVpcm8gPGlzbWFlbEBjb3JkZWlyby5jb20+KS4KKworMjAwMDAyMTkKKwkrIHN0b3JlIGRlZmF1bHQtY29sb3IgY29kZSBjb25zaXN0ZW50bHkgYXMgQ19NQVNLLCBldmVuIGlmIGdpdmVuIGFzCisJICAtMSBmb3IgY29udmVuaWVuY2UgKGFkYXB0ZWQgZnJvbSBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYgTHVreWFub3Y6CisJKyBjaGFuZ2UgY2FuX2NsZWFyX3dpdGgoKSBtYWNybyB0byBhY2NvbW1vZGF0ZSBsb2dpYyBmb3IKKwkgIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpLCBtYWtpbmcgbW9zdCBvZiB0aGUgRklMTF9CQ0UgbG9naWMKKwkgIHVubmVjZXNzYXJ5LiAgTWFkZSBjYW5fY2xlYXJfd2l0aCgpIGFuIGlubGluZSBmdW5jdGlvbiB0byBtYWtlIGl0CisJICBzaW1wbGVyIHRvIHJlYWQuCisKKzIwMDAwMjEyCisJKyBjb3JyZWN0ZWQgZm9ybSBvZiByZWNlbnQgY29weXJpZ2h0IGRhdGVzLgorCSsgbWlub3IgY29ycmVjdGlvbnMgdG8geHRlcm0teGY4Ni12MzMzIHRlcm1pbmZvIGVudHJ5IC1URAorCT4gcGF0Y2hlcyBieSBBbGV4YW5kZXIgViBMdWt5YW5vdjoKKwkrIHJld29yZGVkIGRmdF9mZ2JnLjN4IHRvIGF2b2lkIGFzc3VtaW5nIHRoYXQgdGhlIHRlcm1pbmFsJ3MgZGVmYXVsdAorCSAgY29sb3JzIGFyZSB3aGl0ZSBvbiBibGFjay4KKwkrIGZpeCBpbml0aWFsaXphdGlvbiBvZiB0c3RMaW5lIHNvIHRoYXQgaXQgaXMgZmlsbGVkIHdpdGggY3VycmVudCBibGFuaworCSAgY2hhcmFjdGVyIGluIGFueSBjYXNlLiAgUHJldmlvdXNseSBpdCB3YXMgcG9zc2libGUgdG8gaGF2ZSBpdCBmaWxsZWQKKwkgIHdpdGggb2xkIGJsYW5rLiAgVGhlIHdyb25nIG92ZXItb3B0aW1pemF0aW9uIHdhcyBpbnRyb2R1Y2VkIGluIDk5MTAwMgorCSAgcGF0Y2guICAoaXQgaXMgbm90IHZlcnkgY3JpdGljYWwgYXMgdGhlIG9ubHkgYmFkIGVmZmVjdCBpcyBub3QgdXNpbmcKKwkgIGNscl9lb3MgZm9yIGNsZWFyaW5nIGlmIGJsYW5rIGhhcyBjaGFuZ2VkKS4KKworMjAwMDAyMDUKKwkrIG1pbm9yIGNvcnJlY3Rpb25zL3VwZGF0ZXMgdG8gc2V2ZXJhbCB0ZXJtaW5mbyBlbnRyaWVzOiByeHZ0LWJhc2ljLAorCSAgdnQ1MjAsIHZ0NTI1LCBpYm01MTUxLCB4dGVybS14Zjg2LXY0MCAtVEQKKwkrIG1vZGlmeSBpZmRlZidzIGZvciBwb2xsKCkgdG8gYWxsb3cgaXQgdG8gdXNlIDxzeXMvcG9sbC5oPiwgdGhlcmVieQorCSAgYWxsb3dpbmcgcG9sbCgpIHRvIGJlIHVzZWQgb24gTGludXguCisJKyBhZGQgQ0ZfRlVOQ19QT0xMIG1hY3JvIHRvIGNoZWNrIGlmIHBvbGwoKSBpcyBhYmxlIHRvIHNlbGVjdCBmcm9tCisJICBzdGFuZGFyZCBpbnB1dC4gIElmIG5vdCB3ZSB3aWxsIG5vdCB1c2UgaXQsIHByZWZlcnJpbmcgc2VsZWN0KCkKKwkgIChhZGFwdGVkIGZyb20gcGF0Y2ggYnkgTWljaGFlbCBQYWtvdmljIDxtcGFrb3ZpY0BmZG4uY29tPikuCisJKyB1cGRhdGUgQ0ZfU0hBUkVEX09QVFMgbWFjcm8gZm9yIFNDTyBVbml4d2FyZSA3LjEgdG8gYWxsb3cgYnVpbGRpbmcKKwkgIHNoYXJlZCBsaWJyYXJpZXMgKHJlcG9ydGVkL3Rlc3RlZCBieSBUaGFuaCA8dGhhbmhtYUBtZWRpYW9uZS5uZXQ+KS4KKwkrIG92ZXJyaWRlICRMQU5HVUFHRSBpbiBidWlsZCB0byBhdm9pZCBpbmNvcnJlY3Qgb3JkZXJpbmcgb2Yga2V5bmFtZXMuCisJKyBjb3JyZWN0IENGX01BVEhfTElCIHBhcmFtZXRlciwgbXVzdCBiZSBzaW4oeCksIG5vdCBzcXJ0KHgpLgorCisyMDAwMDEyMgorCSsgcmVzeW5jIENGX0NIRUNLX0VSUk5PIGFuZCBDRl9MSUJfUFJFRklYIG1hY3JvcyBmcm9tIHRpbiBhbmQgeHRlcm0gLVRECisJKyBtb2RpZnkgQ0ZfTUFUSF9MSUIgY29uZmlndXJlIG1hY3JvIHRvIHBhcmFtZXRlcml6ZSB0aGUgdGVzdCBmdW5jdGlvbgorCSAgdXNlZCwgZm9yIHJldXNlIGluIGRpYWxvZyBhbmQgc2ltaWxhciBwYWNrYWdlcy4KKwkrIGNvcnJlY3QgdGVzdHMgZm9yIGZpbGUtZGVzY3JpcHRvcnMgaW4gT1MvMiBFTVggbW91c2Ugc3VwcG9ydC4gIEEKKwkgIG5lZ2F0aXZlIHZhbHVlIGNvdWxkIGJlIHVzZWQgYnkgRkRfU0VULCBjYXVzaW5nIHRoZSBzZWxlY3QoKSBjYWxsCisJICB0byB3YWl0IGluZGVmaW5pdGVseS4KKworMjAwMDAxMTUKKwkrIGFkZGl0aW9uYWwgZml4ZXMgZm9yIG5vbi1iY2UgdGVybWluYWxzIChoYW5kbGluZyBvZiBkZWxldGVfY2hhcmFjdGVyKQorCSAgdG8gd29yayB3aGVuIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpIGlzIG5vdCBzcGVjaWZpZWQuCisJKyBtb2RpZnkgd2FybmluZyBtZXNzYWdlIGZyb20gX25jX3BhcnNlX2VudHJ5KCkgcmVnYXJkaW5nIGV4dGVuZGVkCisJICBjYXBhYmlsaXR5IG5hbWVzIHRvIHByaW50IG9ubHkgaWYgdGljL2luZm9jbXAvdG9lIGhhdmUgdGhlIC12IGZsYWcKKwkgIHNldCwgYW5kIG5vdCBhdCBhbGwgaW4gb3JkaW5hcnkgdXNlciBhcHBsaWNhdGlvbnMuICBPdGhlcndpc2UsIHRoaXMKKwkgIHdhcm5pbmcgd291bGQgYmUgc2hvd24gZm9yIHNjcmVlbidzIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBpbiBwcm9ncmFtcworCSAgdGhhdCB1c2UgdGhlIHRlcm1jYXAgaW50ZXJmYWNlIChyZXBvcnRlZCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIG1vZGlmeSB1c2Ugb2YgX25jX3RyYWNpbmcgZnJvbSBwcm9ncmFtcyBzdWNoIGFzIHRpYyBzbyB0aGVpciBkZWJ1ZworCSAgbGV2ZWwgaXMgbm90IGluIHRoZSBzYW1lIHJhbmdlIGFzIHZhbHVlcyBzZXQgYnkgdHJhY2UoKSBmdW5jdGlvbi4KKwkrIHNtYWxsIHBhbmVsIGhlYWRlciBjbGVhbnVwIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCSsgYWRkICdyYWlscm9hZCcgZGVtbyBmb3IgdGVybWNhcCBpbnRlcmZhY2UuCisJKyBtb2RpZnkgJ3RpYycgdG8gd3JpdGUgaXRzIHVzYWdlIG1lc3NhZ2UgdG8gc3RkZXJyIChwYXRjaCBieSBUb2RkIEMKKwkgIE1pbGxlcikuCisKKzIwMDAwMTA4CisJKyBhZGQgcHJvdG90eXBlIGZvciBlcmFzZSgpIHRvIGN1cnNlcy5oLmluLCBuZWVkZWQgdG8gbWFrZSB0ZXN0CisJICBwcm9ncmFtcyBidWlsZCB3aXRoIGMrKy9nKysuCisJKyBhZGQgLmMuaSBhbmQgLmMuaCBzdWZmaXggcnVsZXMgdG8gZ2VuZXJhdGVkIG1ha2VmaWxlcywgZm9yIGRlYnVnZ2luZy4KKwkrIGNvcnJlY3QgaW5zdGFsbCBydWxlIGZvciB0YWNrLjE7IGl0IGFzc3VtZWQgdGhhdCBmaWxlIHdhcyBpbiB0aGUKKwkgIGN1cnJlbnQgZGlyZWN0b3J5IChyZXBvcnRlZCBieSBNaWtlIENhc3RsZSA8ZGFsZ29kYUBpeC5uZXRjb20uY29tPikuCisJKyBtb2RpZnkgdGVybWluZm8vdGVybWNhcCB0cmFuc2xhdGlvbiB0byBzdXBwcmVzcyBhY3NjIGJlZm9yZSB0cnlpbmcKKwkgIHNnciBpZiB0aGUgZW50cnkgd291bGQgYmUgdG9vIGxhcmdlIChwYXRjaCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIGRvY3VtZW50IGEgc3BlY2lhbCBjYXNlIG9mIGluY29tcGF0aWJsaXR5IGJldHdlZW4gbmN1cnNlcyA0LjIgYW5kCisJICA1LjAsIGFkZCBhIHNlY3Rpb24gZm9yIHRoaXMgaW4gSU5TVEFMTC4KKwkrIGFkZCBUUkFDRV9EQVRBQkFTRSBmbGFnIGZvciB0cmFjZSgpLgorCisyMDAwMDEwMQorCSsgdXBkYXRlIG1hY2gsIGFkZCBtYWNoLWNvbG9yIHRlcm1pbmZvIGVudHJpZXMgYmFzZWQgb24gRGViaWFuIGRpZmZzCisJICBmb3IgbmN1cnNlcyA1LjAgLVRECisJKyBhZGQgZW50cmllcyBmb3IgeHRlcm0taHAsIHh0ZXJtLXZ0MjIwLCB4dGVybS12dDUyIGFuZCB4dGVybS1ub2FwcAorCSAgdGVybWluZm8gZW50cmllcyAtVEQKKwkrIGNoYW5nZSBPVHJzIGNhcGFiaWxpdGllcyB0byByczIgaW4gdGVybWluZm8uc3JjIC1URAorCSsgYWRkIG9ic29sZXRlIGFuZCBleHRlbmRlZCBjYXBhYmlsaXRpZXMgdG8gJ3NjcmVlbicgdGVybWluZm8gLVRECisJKyBjb3JyZWN0ZWQgY29udmVyc2lvbiBmcm9tIHRlcm1pbmZvIHJzMiB0byB0ZXJtY2FwIHJzIChjZjogOTgwNzA0KQorCSsgbWFrZSBjb252ZXJzaW9uIHRvIHRlcm1jYXAgdWcgKHVuZGVybGluZSBnbGl0Y2gpIG1vcmUgY29uc2lzdGVudGx5CisJICBhcHBsaWVkLgorCSsgZml4IG91dC1vZi1zY29wZSB1c2Ugb2YgJ3BlcnNvbmFsW10nIGJ1ZmZlciBpbiAndG9lJyAodGhpcyBlcnJvcgorCSAgd2FzIGluIHRoZSBvcmlnaW5hbCBwcmUtMS45LjcgdmVyc2lvbiwgd2hlbiAkSE9NRS8udGVybWluZm8gd2FzCisJICBpbnRyb2R1Y2VkKS4KKwkrIG1vZGlmeSAndG9lJyB0byBpZ25vcmUgdGVybWluZm8gZGlyZWN0b3JpZXMgdG8gd2hpY2ggaXQgaGFzIG5vCisJICBwZXJtaXNzaW9ucy4KKwkrIG1vZGlmeSByZWFkX3Rlcm10eXBlKCksIGZpeGluZyAndG9lJywgd2hpY2ggY291bGQgZHVtcCBjb3JlIHdoZW4gaXQKKwkgIGZvdW5kIGFuIGluY29tcGxldGUgZW50cnkgc3VjaCBhcyAiZHVtYiIgYmVjYXVzZSBpdCBkaWQgbm90CisJICBpbml0aWFsaXplIGl0cyBidWZmZXIgZm9yIF9uY19yZWFkX2ZpbGVfZW50cnkoKS4KKwkrIHVzZSAtZlBJQyByYXRoZXIgdGhhbiAtZnBpYyBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiBMaW51eCwgbm90CisJICBuZWVkZWQgZm9yIGkzODYgYnV0IHNvbWUgcG9ydHMgKGZyb20gRGViaWFuIGRpZmZzIGZvciA1LjApIC1URAorCSsgdXNlIGV4cGxpY2l0IFZBTElEX05VTUVSSUMoKSBjaGVja3MgaW4gYSBmZXcgcGxhY2VzIHRoYXQgaGFkIGJlZW4KKwkgIG92ZXJsb29rZWQsIGFuZCBhZGQgYSBjaGVjayB0byBlbnN1cmUgdGhhdCBpbml0X3RhYnMgaXMgbm9uemVybywKKwkgIHRvIGF2b2lkIGRpdmlkZS1ieS16ZXJvIChyZXBvcnRlZCBieSBUb2RkIEMgTWlsbGVyKS4KKwkrIG1pbm9yIGZpeCBmb3IgQ0ZfQU5TSV9DQ19DSEVDSyBjb25maWd1cmUgbWFjcm8sIGZvciBIUFVYIDEwLnggKGZyb20KKwkgIHRpbikgLVRECisKKzE5OTkxMjE4CisJKyByZW9yZGVyIHRlc3RzIGR1cmluZyBtb3VzZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBmb3IgZ3BtIHRvIHJ1biBpbgorCSAgeHRlcm0sIG9yIGZvciB4dGVybSB0byBiZSB1c2VkIHVuZGVyIE9TLzIgRU1YLiAgQWxzbyBkcm9wIHRlc3QgZm9yCisJICAkRElTUExBWSBpbiBmYXZvciBvZiBrbW91cz1cRVtNIG9yICRURVJNIGNvbnRhaW5pbmcgInh0ZXJtIiAocmVwb3J0CisJICBieSBDaHJpc3RpYW4gV2Vpc2dlcmJlciA8bmFkZHlAbWlwcy5yaGVpbi1uZWNrYXIuZGU+KS4KKwkrIG1vZGlmeSByYXcoKSBhbmQgbm9yYXcoKSB0byBjbGVhci9yZXN0b3JlIElFWFRFTiBmbGFnIHdoaWNoIGFmZmVjdHMKKwkgIHN0dHkgbG5leHQgb24gc3lzdGVtcyBzdWNoIGFzIEZyZWVCU0QgKHJlcG9ydCBieSBCcnVjZSBFdmFucworCSAgPGJkZUB6ZXRhLm9yZy5hdT4sIHZpYSBKYXNvbiBFdmFucyA8amFzb25lQGNhbm9ud2FyZS5jb20+KS4KKwkrIGZpeCBhIHBvdGVudGlhbCAoYnV0IHVubGlrZWx5KSBidWZmZXIgb3ZlcmZsb3cgaW4gZmFpbGVkKCkgZnVuY3Rpb24KKwkgIG9mIHRzZXQuYyAocmVwb3J0ZWQgYnkgVG9kZCBDIE1pbGxlcikuCisJKyBhZGQgbWFudWFsLXBhZ2UgZm9yIG5jdXJzZXMgZXh0ZW5zaW9ucywgZG9jdW1lbnRlZCBjdXJzZXNfdmVyc2lvbigpLAorCSAgdXNlX2V4dGVuZGVkX25hbWVzKCkuCisKKzE5OTkxMjExCisJKyB0cmVhdCBhcyB1bnRyYW5zbGF0YWJsZSB0byB0ZXJtY2FwIHRob3NlIHRlcm1pbmZvIHN0cmluZ3Mgd2hpY2gKKwkgIGNvbnRhaW4gbm9uLWRlY2ltYWwgZm9ybWF0dGluZywgZS5nLiwgaGV4YWRlY2ltYWwgb3Igb2N0YWwuCisJKyBjb3JyZWN0IGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzIHRoYXQgY2Fubm90IGJlIHRyYW5zbGF0ZWQgdG8KKwkgIHRlcm1jYXAsIHdoaWNoIGRpZCBub3QgY2hlY2sgaWYgYSBjb2xvbiBtdXN0IGJlIGVzY2FwZWQuCisJKyBjb3JyZWN0IHRlcm1jYXAgdHJhbnNsYXRpb24gZm9yICIlPiIgYW5kICIlKyIsIHdoaWNoIGRpZCBub3QgY2hlY2sKKwkgIGlmIGEgY29sb24gbXVzdCBiZSBlc2NhcGVkLCBmb3IgaW5zdGFuY2UuCisJKyB1c2Ugc2F2ZV9zdHJpbmcvc2F2ZV9jaGFyIGZvciBfbmNfY2FwdG9pbmZvKCkgdG8gZWxpbWluYXRlIGZpeGVkCisJICBidWZmZXIgKG9yaWdpbmFsbHkgZm9yIF9uY19pbmZvdG9jYXAoKSBpbiA5NjAzMDEgLVREKS4KKwkrIGNvcnJlY3QgZXhwcmVzc2lvbiB1c2VkIGZvciB0ZXJtaW5mbyBlcXVpdmFsZW50IG9mIHRlcm1jYXAgJUIsCisJICBhZGp1c3QgcmVnZW50MTAwIGVudHJ5IHdoaWNoIHVzZXMgdGhpcy4KKwkrIHNvbWUgY2xlYW51cCBhbmQgY29tbWVudGluZyBvZiBhZCBob2MgY2FzZXMgaW4gX25jX2luZm90b2NhcCgpLgorCSsgZWxpbWluYXRlIGEgZml4ZWQtYnVmZmVyIGluIHRpYywgdXNlZCBmb3IgdHJhbnNsYXRpbmcgY29tbWVudHMuCisJKyBhZGQgbWFucGFnZSBmb3IgaW5mb3RvY2FwCisKKzE5OTkxMjA0CisJKyBhZGQga3Z0IGFuZCBnbm9tZSB0ZXJtaW5mbyBlbnRyaWVzIC1URAorCSsgY29ycmVjdCB0cmFuc2xhdGlvbiBvZiAiJSUiIGJ5IGluZm90b2NhcCwgd2hpY2ggd2FzIGVtaXR0ZWQgYXMgIiUiLgorCSsgYWRkICJvYnNvbGV0ZSIgdGVybWNhcCBzdHJpbmdzIHRvIHRlcm1pbmZvLnNyYworCSsgbW9kaWZ5IGluZm9jbXAgdG8gZGVmYXVsdCB0byBzaG93aW5nIG9ic29sZXRlIGNhcGFiaWxpdGllcyByYXRoZXIKKwkgIHRoYW4gdGVybWluZm8gb25seS4KKwkrIG1vZGlmeSB3cml0ZV9lbnRyeS5jIHNvIHRoYXQgaWYgZXh0ZW5kZWQgbmFtZXMgKGkuZS4sIGNvbmZpZ3VyZQorCSAgLS1lbmFibGUtdGNhcC1uYW1lcykgYXJlIGFjdGl2ZSwgdGhlbiB0aWMgd2lsbCBhbHNvIHdyaXRlICJvYnNvbGV0ZSIKKwkgIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSB0ZXJtaW5mbyBzb3VyY2UuCisJKyBtb2RpZnkgdGljIHNvIHRoYXQgd2hlbiBydW5uaW5nIGFzIGNhcHRvaW5mbyBvciBpbmZvdG9jYXAsIGl0CisJICBpbml0aWFsaXplcyB0aGUgb3V0cHV0IGZvcm1hdCBhcyBpbiAtQyBhbmQgLUkgb3B0aW9ucywgcmVzcGVjdGl2ZWx5LgorCSsgaW1wcm92ZSBpbmZvY21wIGFuZCB0aWMgLWYgb3B0aW9uIGJ5IHNwbGl0dGluZyBsb25nIHN0cmluZ3MgdGhhdCBkbworCSAgbm90IGhhdmUgaWYtdGhlbi1lbHNlIGNvbnN0cnVjdCwgYnV0IGRvIGhhdmUgcGFyYW1ldGVycywgZS5nLiwgdGhlCisJICBpbml0YyBmb3IgeHRlcm0tODhjb2xvci4KKwkrIHJlZmluZSBNS3Rlcm1zb3J0LnNoIHNsaWdodGx5IGJ5IHVzaW5nIGJvb2wgZm9yIHRoZSAqX2Zyb21fdGVybWNhcAorCSAgYXJyYXlzLgorCisxOTk5MTEyNworCSsgYWRkaXRpb25hbCBmaXhlcyBmb3Igbm9uLWJjZSB0ZXJtaW5hbHMgKGhhbmRsaW5nIG9mIGNsZWFyX3NjcmVlbiwKKwkgIGNscl9lb2wsIGNscl9lb3MsIHNjcm9sbGluZykgdG8gd29yayB3aGVuIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpIGlzCisJICBub3Qgc3BlY2lmaWVkLgorCSsgc2V2ZXJhbCBzbWFsbCBjaGFuZ2VzIHRvIHh0ZXJtIHRlcm1pbmZvIGVudHJpZXMgLVRELgorCSsgbW92ZSBsb2dpYyBmb3IgX25jX3dpbmRvd3MgaW4gbGliX2ZyZWVhbGwuYyBpbnNpZGUgY2hlY2sgZm9yIG5vbm51bGwKKwkgIFNQLCBzaW5jZSBpdCBpcyBwYXJ0IG9mIHRoYXQgc3RydWN0LgorCSsgcmVtb3ZlIG9ic29sZXRlIHNobGliLXZlcnNpb25zLCB3aGljaCB3YXMgdW5pbnRlbnRpb25hbGx5IHJlLWFkZGVkCisJICBpbiA5NzA5MjcuCisJKyBtb2RpZnkgaW5mb2NtcCAtZSwgLUUgb3B0aW9ucyB0byBlbnN1cmUgdGhhdCBnZW5lcmF0ZWQgZmFsbGJhY2suYworCSAgdHlwZSBmb3IgQm9vbGVhbnMgYWdyZWVzIHdpdGggdGVybS5oIChyZXBvcnRlZCBieSBFcmljIE5vcnVtCisJICA8ZXJpY0BjbHMudXNhc2suY2E+KS4KKwkrIGNvcnJlY3QgY29uZmlndXJlIHNjcmlwdCdzIHVzZSBvZiAkTElCX1BSRUZJWCwgd2hpY2ggZGlkIG5vdCB3b3JrCisJICBmb3IgaW5zdGFsbGluZyB0aGUgYysrIGRpcmVjdG9yeSBpZiAkbGliZGlyIGRpZCBub3QgZW5kIHdpdGggIi9saWIiCisJICAocmVwb3J0ZWQgYnkgSHV5IExlIDxodXlsZUB1Z2NzLmNhbHRlY2guZWR1PikuCisJKyBtb2RpZnkgaW5mb2NtcCBzbyAtTCBhbmQgLWYgb3B0aW9ucyB3b3JrIHRvZ2V0aGVyLgorCSsgbW9kaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiBTUC0+X2NvbG9yX3RhYmxlW10gaW4gc3RhcnRfY29sb3IoKSBzbworCSAgdGhhdCBjb2xvcl9jb250ZW50KCkgd2lsbCByZXR1cm4gdXNhYmxlIHZhbHVlcyBmb3IgQ09MT1JTIGdyZWF0ZXIKKwkgIHRoYW4gOC4KKwkrIG1vZGlmeSBuY3Vyc2VzICdkJyB0ZXN0IGluIGNhc2UgQ09MT1JTIGlzIGdyZWF0ZXIgdGhhbiAxNiwgZS5nLiwgZm9yCisJICB4dGVybS04OGNvbG9yLCB0byBsaW1pdCB0aGUgZGlzcGxheWVkL2NvbXB1dGVkIGNvbG9ycyB0byAxNi4KKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIHNpbXBsaWZ5IGNvZGluZyBvZiB0aGUgcGFuZWwgbGlicmFyeSBhY2NvcmRpbmcgdG8gc3VnZ2VzdGlvbnMgYnkKKwkgIFBoaWxpcHBlIEJsYWluLgorCSsgaW1wcm92ZSBtYWNybyBjb2RpbmcgZm9yIGEgZmV3IG1hY3JvcyBpbiBjdXJzZXMucHJpdi5oCisKKzE5OTkxMTEzCisJKyBtb2RpZnkgdHJlYXRtZW50IG9mIGNvbG9yIHBhaXIgMCBzbyB0aGF0IGlmIG5jdXJzZXMgaXMgY29uZmlndXJlZAorCSAgdG8gc3VwcG9ydCBkZWZhdWx0IGNvbG9ycywgYW5kIHRoZXkgYXJlIG5vdCBhY3RpdmUsIHRoZW4gbmN1cnNlcworCSAgd2lsbCBzZXQgdGhhdCBleHBsaWNpdGx5LCBub3QgcmVseWluZyBvbiBvcmlnX2NvbG9ycyBvciBvcmlnX3BhaXIuCisJKyBhZGQgbmV3IGV4dGVuc2lvbiwgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkgdG8gcHJvdmlkZSBiZXR0ZXIgY29udHJvbAorCSAgb3ZlciB0aGUgdXNlIG9mIGRlZmF1bHQgY29sb3JzLgorCSsgbW9kaWZ5IHRlc3QgcHJvZ3JhbXMgdG8gdXNlIG1vcmUtc3BlY2lmaWMgaWZkZWYncyBmb3IgZXhpc3RlbmNlIG9mCisJICB3cmVzaXplKCksIHJlc2l6ZXRlcm0oKSBhbmQgdXNlX2RlZmF1bHRfY29sb3JzKCkuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBhZGQgc3BlY2lmaWMgaWZkZWYncyBmb3Igc29tZSBmdW5jdGlvbnMKKwkgIHRoYXQgYXJlIGluY2x1ZGVkIHdoZW4gLS1lbmFibGUtZXh0LWZ1bmNzIGlzIGluIGVmZmVjdCwgc28gdGhlaXIKKwkgIGV4aXN0ZW5jZSBjYW4gYmUgaWZkZWYnZCBpbiB0aGUgdGVzdCBwcm9ncmFtcy4KKwkrIHJlb3JkZXIgc29tZSBjb25maWd1cmUgb3B0aW9ucywgbW92aW5nIHRob3NlIGV4dGVuc2lvbnMgdGhhdCBoYXZlCisJICBldm9sdmVkIGZyb20gZXhwZXJpbWVudGFsIHN0YXR1cyBpbnRvIGEgbmV3IHNlY3Rpb24uCisJKyBjaGFuZ2UgY29uZmlndXJlIC0tZW5hYmxlLXRjYXAtbmFtZXMgdG8gZW5hYmxlIHRoaXMgYnkgZGVmYXVsdC4KKworMTk5OTExMDYKKwkrIGluc3RhbGwgdGFjaydzIG1hbnBhZ2UgKHJlcG9ydGVkIGJ5IFJvYmVydCBXZWluZXIKKwkgIDxyb2JlcnRAcHJvZ3BsdXMuY29tPikKKwkrIGNvcnJlY3Qgd29ybS5jJ3MgaGFuZGxpbmcgb2YgS0VZX1JFU0laRSAocGF0Y2ggYnkgRnJhbmsgSGVja2VuYmFjaCkuCisJKyBtb2RpZnkgY3Vyc2VzLmguaW4sIHVuZGVmJ2luZyBzb21lIHN5bWJvbHMgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBDKysKKwkgIFNUTCAocmVwb3J0ZWQgYnkgTWF0dCBHZXJhc3NpbW9mZiA8bWdlcmFzQHRpY29uLm5ldD4pCisKKzE5OTkxMDMwCisJKyBtb2RpZnkgbGludXggdGVybWluZm8gZW50cnkgdG8gaW5kaWNhdGUgdGhhdCBkaW0gZG9lcyBub3QgbWl4IHdpdGgKKwkgIGNvbG9yIChyZXBvcnRlZCBieSBLbGF1cyBXZWlkZSA8a3dlaWRlQGVudGVyYWN0LmNvbT4pLgorCSsgY29ycmVjdCBzZXZlcmFsIHR5cG9zIGluIHRlcm1pbmZvIGVudHJpZXMgcmVsYXRlZCB0byBtaXNzaW5nICdbJworCSAgaW4gQ1NJJ3MgLVRECisJKyBmaXggc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBpbiBjKysgYmluZGluZyAocmVwb3J0ZWQgYnkgVGltCisJICBNb29uZXkgZm9yIGFscGhhZXY1Ni1kZWMtb3NmNC4wZgorCSsgcmVuYW1lIHBhcmFtZXRlciBvZiBfbmNfZnJlZV9lbnRyaWVzKCkgdG8gYWNjb21tb2RhdGUgbGludC4KKwkrIGNvcnJlY3QgbGludCBydWxlIGZvciB0YWNrLCB1c2VkIGluY29ycmVjdCBsaXN0IG9mIHNvdXJjZSBmaWxlcy4KKwkrIGFkZCBjYXNlIHRvIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiBmb3IgUmhhcHNvZHkuCisJKyBpbXByb3ZlIGNvbmZpZ3VyZSB0ZXN0cyBmb3IgbGliZysrIGFuZCBsaWJzdGRjKysgYnkgb21pdHRpbmcgdGhlCisJICBtYXRoIGxpYnJhcnkgKHdoaWNoIGlzIG1pc3Npbmcgb24gUmhhcHNvZHkpLCBhbmQgaW1wcm92ZWQgdGVzdCBmb3IKKwkgIHRoZSBtYXRoIGxpYnJhcnkgaXRzZWxmIChhZGFwdGVkIGZyb20gcGF0aCBieSBOZWxzb24gSC4gRi4gQmVlYmUpLgorCSsgZXhwbGljaXRseSBpbml0aWFsaXplIHRvIHplcm8gc2V2ZXJhbCBkYXRhIGl0ZW1zIHdoaWNoIHdlcmUKKwkgIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGUuZy4sIGN1cl90ZXJtLiAgSWYgbm90IGV4cGxpY2l0bHkKKwkgIGluaXRpYWxpemVkLCB0aGVpciBzdG9yYWdlIHR5cGUgaXMgQyAoY29tbW9uKSwgYW5kIGNhdXNlcyBwcm9ibGVtcworCSAgbGlua2luZyBvbiBSaGFwc29keSA1LjUgdXNpbmcgZ2NjIDIuNy4yLjEgKHJlcG9ydGVkIGJ5IE5lbHNvbiBILiBGLgorCSAgQmVlYmUpLgorCSsgbW9kaWZ5IEFkYTk1IGJpbmRpbmcgdG8gbm90IGluY2x1ZGUgdGhlIGxpbmtlciBvcHRpb24gZm9yIEFkYQorCSAgYmluZGluZ3MgaW4gdGhlIEFkYSBoZWFkZXJzLCBidXQgaW4gdGhlIE1ha2VmaWxlcyBpbnN0ZWFkIChwYXRjaCBieQorCSAgSnVlcmdlbiBQZmVpZmVyKS4KKworMTk5OTEwMjMgNS4wIHJlbGVhc2UgZm9yIHVwbG9hZCB0byBmdHAuZ251Lm9yZworCSsgZWZmZWN0aXZlIHdpdGggcmVsZWFzZSBvZiA1LjAsIGNoYW5nZSBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0ggdG8KKwkgIDQtZGlnaXQgeWVhci4KKwkrIGFkZCBmdW5jdGlvbiBjdXJzZXNfdmVyc2lvbigpLCB0byByZXR1cm4gbmN1cnNlcyBsaWJyYXJ5IHZlcnNpb24KKwkgIChyZXF1ZXN0IGJ5IEJvYiB2YW4gZGVyIFBvZWwpLgorCSsgcmVtb3ZlIHJtYW0sIHNtYW0gZnJvbSBjeWd3aW4gdGVybWluZm8gZW50cnkuCisJKyBtb2RpZnkgRnJlZUJTRCBjb25zMjUgdGVybWluZm8gZW50cnkgdG8gYWRkIGNub3JtIGFuZCBjdnZpcywgYXMgd2VsbAorCSAgYXMgdXBkYXRlIG5jdiB0byBpbmRpY2F0ZSB0aGF0ICdkaW0nIGNvbmZsaWN0cyB3aXRoIGNvbG9ycy4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBzeW1ib2xpYyBsaW5rcyBmb3IgRnJlZUJTRCBzaGFyZWQKKwkgIGxpYnJhcmllcyBieSBkZWZhdWx0LgorCSsgY29ycmVjdCByYW5mKCkgZnVuY3Rpb24gaW4gcmFpbiBhbmQgd29ybSBwcm9ncmFtcyB0byBlbnN1cmUgaXQgZG9lcworCSAgbm90IHJldHVybiAxLjAKKwkrIGhpZGUgdGhlIGN1cnNvciBpbiBoYW5vaS5jIGlmIGl0IGlzIHJ1bm5pbmcgYXV0b21hdGljYWxseS4KKwkrIGFtZW5kIGxydGVzdC5jIHRvIGFjY291bnQgZm9yIG9wdGltaXphdGlvbnMgdGhhdCBleHBsb2l0IG1hcmdpbgorCSAgd3JhcHBpbmcuCisJKyBhZGQgYSBzaW1wbGUgdGVybWluZm8gZGVtbywgZG90cy5jCisJKyBtb2RpZnkgU0lHSU5UL1NJR1FVSVQgaGFuZGxlciB0byBzZXQgYSBmbGFnIHVzZWQgaW4gX25jX291dGNoKCkgdG8KKwkgIHRlbGwgaXQgdG8gdXNlIHdyaXRlKCkgcmF0aGVyIHRoYW4gcHV0YygpLCBzaW5jZSB0aGUgbGF0dGVyIGlzIG5vdAorCSAgc2FmZSBpbiBhIHNpZ25hbCBoYW5kbGVyIGFjY29yZGluZyB0byBQT1NJWC4KKwkrIGFkZC91c2UgaW50ZXJuYWwgbWFjcm9zIF9uY19mbHVzaCgpIGFuZCBOQ19PVVRQVVQgdG8gaGlkZSBkZXRhaWxzCisJICBvZiBvdXRwdXQtZmlsZSBwb2ludGVyIGluIG5jdXJzZXMgbGlicmFyeS4KKwkrIHVuY29tbWVudCBDQ19TSEFSRURfT1BUUyAoc2VlIDk3MTExNSksIHNpbmNlIHRoZXkgYXJlIG5lZWRlZCBmb3IgU0NPCisJICBPcGVuU2VydmVyLgorCSsgY29ycmVjdCBDQ19TSEFSRURfT1BUUyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcyBmb3IgU0NPCisJICBPcGVuU2VydmVyLgorCSsgcmVtb3ZlIHVzbGVlcCgpIGZyb20gYWx0ZXJuYXRpdmVzIGluIG5hcG1zKCksIHNpbmNlIGl0IG1heSBpbnRlcmFjdAorCSAgd2l0aCBhbGFybSgpLCBjYXVzaW5nIGEgcHJvY2VzcyB0byBiZSBpbnRlcnJ1cHRlZCBieSBTSUdBTFJNICh3aXRoCisJICBhZHZpY2UgZnJvbSBCZWxhIEx1YmtpbikuCisJKyBtb2RpZnkgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHMubTQgdG8gYnVpbGQvd29yayB3aXRoCisJICBHTkFUIDMuMTAgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyByZW1vdmUgcGFydCBvZiBDRl9HUFBfTElCUkFSWSBjb25maWd1cmUtc2NyaXB0IG1hY3JvLCB3aGljaCBkaWQgbm90CisJICB3b3JrIHdpdGggZ2NjIDIuNy4yLjMKKwkrIG1pbm9yIGZpeCB0byB0ZXN0L3RjbG9jay5jIHRvIGF2b2lkIGJlZXBpbmcgbW9yZSB0aGFuIG9uY2UgcGVyIHNlY29uZAorCSsgYWRkICdzJyBhbmQgJyAnIGRlY29kaW5nIHRvIHRlc3QvcmFpbi5jCisKKzk5MTAxNglwcmUtcmVsZWFzZQorCSsgY29ycmVjdGVkIEJlT1MgY29kZSBmb3IgbGliX3R3YWl0LmMsIG1ha2luZyBub2RlbGF5KCkgZnVuY3Rpb24gd29yay4KKworOTkxMDA5CXByZS1yZWxlYXNlCisJKyBjb3JyZWN0IG5jdXJzZXMnIHZhbHVlIGZvciBjdXJzb3ItY29sdW1uIGluIFB1dENoYXJMUigpLCB3aGljaCB3YXMKKwkgIG9mZi1ieS1vbmUgaW4gb25lIGNhc2UgKHBhdGNoIGJ5IElseWEgWmFraGFyZXZpY2gpLgorCSsgZml4IHNvbWUgbWlub3IgZXJyb3JzIGluIHBvc2l0aW9uX2NoZWNrKCkgZGVidWdnaW5nIGNvZGUsIGZvdW5kIHdoaWxlCisJICB1c2luZyB0aGlzIHRvIHZhbGlkYXRlIHRoZSBQdXRDaGFyTFIoKSBwYXRjaC4KKwkrIG1vZGlmeSBmaXJld29yaywgbHJ0ZXN0LCB3b3JtIGV4YW1wbGVzIHRvIGJlIHJlc2l6YWJsZSwgYW5kIHRvCisJICByZWNvZ25pemUgJ3EnIGZvciBxdWl0LCAncycgZm9yIHNpbmdsZS1zdGVwIGFuZCAnICcgZm9yIHJlc3VtZS4KKwkrIHJlc3RvcmUgcmV2ZXJ0ZWQgY2hhbmdlIHRvICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkcy5tNCwKKwkgIGFkZCBhIG5vdGUgb24gYnVpbGRpbmcgd2l0aCBnbmF0IDMuMTBwIHRvIEFkYTk1L1RPRE8uCisJKyBhZGQgYSBjb3B5IG9mIHRoZSBzdGFuZGFsb25lIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIHRoZSB0ZXN0LWRpcmVjdG9yeQorCSAgdG8gc2ltcGxpZnkgdGVzdGluZyBvbiBTQ08gYW5kIFNvbGFyaXMuCisKKzk5MTAwMglwcmUtcmVsZWFzZQorCSsgbWlub3IgZml4ZXMgZm9yIF9uY19tc2VjX2Nvc3QoKSwgY29sb3JfY29udGVudCgpLCBwYWlyX2NvbnRlbnQoKSwKKwkgIF9uY19mcmVld2luKCksIENsckJvdHRvbSgpIGFuZCBvbnNjcmVlbl9tdmN1cigpIChhbmFseXNpcyBieSBQaGlsaXBwZQorCSAgQmxhaW4sIGNvbW1lbnRzIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIHNpbXBsaWZ5IGRlZmluaXRpb24gb2YgUEFORUwgYW5kIGVsaW1pbmF0ZSBpbnRlcm5hbCBmdW5jdGlvbnMKKwkgIF9uY19jYWxjdWxhdGVfb2JzY3VyZSgpLCBfbmNfZnJlZV9vYnNjdXJlKCkgYW5kIF9uY19vdmVycmlkZSgpLAorCSAgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlciwgYW5hbHlzaXMgYnkgUGhpbGlwcGUgQmxhaW4KKwkgIDxibGVkcEB2b2lsYS5mcj4pKS4KKwkrIGNoYW5nZSByZW5hbWluZyBvZiBkZnRfZmdiZy4zeCB0byB1c2VfZGVmYXVsdF9jb2xvcnMuM25jdXJzZXMgaW4KKwkgIG1hbl9kYi5yZW5hbWVzLCBzaW5jZSBEZWJpYW4gaXMgbm90IGNvbmNlcm5lZCB3aXRoIDE0LWNoYXJhY3RlcgorCSAgZmlsZW5hbWUgbGltaXRhdGlvbiAoRGViaWFuIGJ1ZyByZXBvcnQgYnkgSm9zaXAgUm9kaW4KKwkgIDxqb3lAY2liYWxpYS5na3ZrLmhyPikuCisJKyBjb3JyZWN0ZWQgc2NvYW5zaSB0ZXJtaW5mbyBlbnRyeSBieSB0ZXN0aW5nIHdpdGggc2NvdGVybSBhbmQgY29uc29sZS4KKwkrIHJldmVydCBjaGFuZ2UgZnJvbSA5OTA2MTQgdG8gdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHMubTQsCisJICBzaW5jZSB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIGduYXQgMy4xMHAKKwkrIG1vZGlmeSB0Y2xvY2sgZXhhbXBsZSB0byBiZSByZXNpemFibGUgKGlmIG5jdXJzZXMnIHNpZ3dpbmNoIGhhbmRsZXIKKwkgIGlzIHVzZWQpLCBhbmQgaW4gY29sb3IuCisJKyB1c2UgJChDQykgcmF0aGVyIHRoYW4gJ2djYycgaW4gTUtfU0hBUkVEX0xJQiBzeW1ib2xzLCB1c2VkIGZvciBMaW51eAorCSAgc2hhcmVkIGxpYnJhcnkgcnVsZXMuCisKKzk5MDkyNQlwcmUtcmVsZWFzZQorCSsgYWRkIG5ld2VyIE5ldEJTRCBjb25zb2xlIHRlcm1pbmZvIGVudHJpZXMKKwkrIGFkZCBhbWlnYS04Yml0IHRlcm1pbmZvIGVudHJ5IChmcm9tIEhlbm5pbmcgJ0Zhcm91bCcgUGV0ZXJzCisJICA8RmFyb3VsQGJleW9uZC5rbi1icmVtZW4uZGU+KQorCSsgcmVtb3ZlIC1sY3Vyc2VzIC1sdGVybWNhcCBmcm9tIGNvbmZpZ3VyZSBzY3JpcHQncyBjaGVjayBmb3IgdGhlIGdwbQorCSAgbGlicmFyeSwgc2luY2UgdGhleSBhcmUgbm90IHJlYWxseSBuZWNlc3NhcnkgKGEgcHJvcGVybHkgY29uZmlndXJlZAorCSAgZ3BtIGxpYnJhcnkgaGFzIG5vIGRlcGVuZGVuY3kgb24gYW55IGN1cnNlcyBsaWJyYXJ5KSwgYW5kIGlmIHRoZQorCSAgY3Vyc2VzIGxpYnJhcnkgaXMgbm90IGluc3RhbGxlZCwgdGhpcyB3b3VsZCBjYXVzZSB0aGUgdGVzdCB0byBmYWlsLgorCSsgbW9kaWZ5IHRpYydzIC1DIG9wdGlvbiBzbyB0aGF0IHRlcm1pbmZvICJ1c2U9IiBjbGF1c2VzIGFyZSB0cmFuc2xhdGVkCisJICB0byAidGM9IiBjbGF1c2VzIGV2ZW4gd2hlbiBydW5uaW5nIGl0IGFzIGNhcHRvaW5mby4KKwkrIG1vZGlmeSBDRl9TVERDUFBfTElCUkFSWSBjb25maWd1cmUgbWFjcm8gdG8gcGVyZm9ybSBpdHMgY2hlY2sgb25seQorCSAgZm9yIEdOVSBDKyssIHNpbmNlIHRoYXQgbGlicmFyeSBjb25mbGljdHMgd2l0aCBTR0kncyBsaWJDIG9uIElSSVgtNi4yCisJKyBtb2RpZnkgQ0ZfU0hBUkVEX09QVFMgY29uZmlndXJlIG1hY3JvIHRvIHN1cHBvcnQgYnVpbGQgb24gTmV0QlNEIHdpdGgKKwkgIEVMRiBsaWJyYXJpZXMgKHBhdGNoIGJ5IEJlcm5kIEVybmVzdGkgPGJlcm5kQGFycmVzdW0uaW5rYS5kZT4pLgorCSsgY29ycmVjdCBhIHByb2JsZW0gaW4gbGlicGFuZWwsIHdoZXJlIHRoZSBfbmNfdG9wX3BhbmVsIHZhcmlhYmxlIHdhcworCSAgbm90IHNldCBwcm9wZXJseSB3aGVuIGJvdHRvbV9wYW5lbCgpIGlzIGNhbGxlZCB0byBoaWRlIGEgcGFuZWwgd2hpY2gKKwkgIGlzIHRoZSBvbmx5IG9uZSBvbiB0aGUgc3RhY2sgKHJlcG9ydC9hbmFseXNpcyBieSBNaWNoYWVsIEFuZHJlcworCSAgPG1hQHN1c2UuZGU+LCBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCis5OTA5MTgJcHJlLXJlbGVhc2UKKwkrIGFkZCBhY3NjIHN0cmluZyB0byBIUCA3MDA5MiB0ZXJtaW5mbyBlbnRyeSAocGF0Y2ggYnkgSm9lcmcgV3Vuc2NoCisJICA8akBpbnRlcmZhY2UtYnVzaW5lc3MuZGU+KS4KKwkrIGFkZCB0b3AtbGV2ZWwgdW5pbnN0YWxsLmRhdGEgYW5kIHVuaW5zdGFsbC5tYW4gbWFrZWZpbGUgcnVsZXMuCisJKyBjb3JyZWN0IGxvZ2ljIG9mIENGX0xJTktfRlVOQ1MgY29uZmlndXJlIHNjcmlwdCwgZnJvbSBCZU9TIGNoYW5nZXMgc28KKwkgIHRoYXQgaGFyZC1saW5rcyB3b3JrIG9uIFVuaXggYWdhaW4uCisJKyBjaGFuZ2UgZGVmYXVsdCB2YWx1ZSBvZiBjZl9jdl9idWlsdGluX2Jvb2wgdG8gMSAoc3VnZ2VzdGVkIGJ5CisJICBKZXJlbXkgQnVobGVyKSwgbWFraW5nIGl0IGxlc3MgbGlrZWx5IHRoYXQgYSBjb25mbGljdGluZyBkZWNsYXJhdGlvbgorCSAgb2YgYm9vbCB3aWxsIGJlIHNlZW4gd2hlbiBjb21waWxpbmcgd2l0aCBDKysuCisKKzk5MDkxMQlwcmUtcmVsZWFzZQorCSsgaW1wcm92ZWQgY29uZmlndXJlIGNoZWNrcyBmb3IgYnVpbHRpbi5oCisJKyBtaW5vciBjaGFuZ2VzIHRvIEMrKyBiaW5kaW5nIChyZW1vdmUgc3RhdGljIGluaXRpYWxpemF0aW9ucywgYW5kIG1ha2UKKwkgIGNvbmZpZ3VyZS10ZXN0IGZvciBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb25zKSBmb3IgZmVhdHVyZXMgbm90CisJICBhbGxvd2VkIGJ5IHZlbmRvcidzIEMrKyBjb21waWxlcnMgKHJlcG9ydGVkIGJ5IE1hcnRpbiBNb2tyZWpzLCB0aGlzCisJICBhcHBsaWVzIHRvIFNHSSwgdGhvdWdoIEkgZm91bmQgU0NPIGhhcyB0aGUgc2FtZSBjaGFyYWN0ZXJpc3RpY3MpLgorCSsgY29ycmVjdGVkIHF1b3Rpbmcgb2YgRVRJUF94eHggZGVmaW5pdGlvbnMgd2hpY2ggc3VwcG9ydCBvbGQgdmVyc2lvbnMKKwkgIG9mIGcrKywgZS5nLiwgdGhvc2UgdXNpbmcgLWxnKysKKwkrIHJlbW92ZSAnTCcgY29kZSBmcm9tIHNhZmVfc3ByaW50Zi5jLCBzaW5jZSAnbG9uZyBkb3VibGUnIGlzIG5vdAorCSAgd2lkZWx5IHBvcnRhYmxlLiAgc2FmZV9zcHJpbnRmLmMgaXMgZXhwZXJpbWVudGFsLCBob3dldmVyLCBhbmQKKwkgIGV4aXN0cyBtYWlubHkgYXMgYSBmYWxsYmFjayBmb3Igc3lzdGVtcyB3aXRob3V0IHNucHJpbnRmIChyZXBvcnRlZAorCSAgYnkgTWFydGluIE1va3JlanMgPG1tb2tyZWpzQG5hdHVyLmN1bmkuY3o+LCBmb3IgSVJJWCA2LjIpCisJKyBtb2RpZnkgZGVmaW5pdGlvbiBvZiBfbmNfdGluZm9fZmtleXMgaW4gYnJva2VuLWxpbmtlciBjb25maWd1cmF0aW9uCisJICBzbyB0aGF0IGl0IGlzIG5vdCB1bm5lY2Vzc2FyaWx5IG1hZGUgZXh0ZXJuIChKZWZmcmV5IEMgSG9uaWcpLgorCis5OTA5MDQJcHJlLXJlbGVhc2UKKwkrIG1vdmUgZGVmaW5pdGlvbiBmb3IgYnVpbHRpbi5oIGluIGNvbmZpZ3VyZSB0ZXN0cyB0byBzcGVjaWZpYyBjaGVjaworCSAgZm9yIGxpYmcrKywgc2luY2UgcXQgdXNlcyB0aGUgc2FtZSBmaWxlbmFtZSBpbmNvbXBhdGlibHkuCisJKyBjb3JyZWN0IGxvZ2ljIG9mIGxpYl90ZXJtY2FwLmMgdGdldHN0ciBmdW5jdGlvbiwgd2hpY2ggZGlkIG5vdCBjb3B5CisJICB0aGUgcmVzdWx0IHRvIHRoZSBidWZmZXIgcGFyYW1ldGVyLiAgVGVzdGluZyBzaG93cyBTb2xhcmlzIGRvZXMKKwkgIHVwZGF0ZSB0aGlzLCB0aG91Z2ggb2YgY291cnNlIHRnZXRlbnQncyBidWZmZXIgaXMgdW50b3VjaGVkIChyZXBvcnRlZAorCSAgaW4gUGV0ZXIgRWR3YXJkcyA8cGV0ZXIuZWR3YXJkc0BpcmVsYW5kLmNvbT4gaW4KKwkgIG1wYy5saXN0cy5mcmVlYnNkLmN1cnJlbnQgbmV3c2dyb3VwLgorCSsgY29ycmVjdGVkIGJldGVybSB0ZXJtaW5mbyBlbnRyeSwgd2hpY2ggbGlzdHMgc29tZSBjYXBhYmlsaXRpZXMgd2hpY2gKKwkgIGFyZSBub3QgYWN0dWFsbHkgcHJvdmlkZWQgYnkgdGhlIEJlT1MgVGVybWluYWwuCisJKyBhZGQgc3BlY2lhbCBsb2dpYyB0byByZXBsYWNlIHNlbGVjdCgpIGNhbGxzIG9uIEJlT1MsIHdob3NlIHNlbGVjdCgpCisJICBmdW5jdGlvbiB3b3JrcyBvbmx5IGZvciBzb2NrZXRzLgorCSsgY29ycmVjdCBtaXNzaW5nIGVzY2FwZSBpbiBta3Rlcm0uaC5hd2suaW4sIHdoaWNoIGNhdXNlZCBwYXJ0CisJICBvZiB0aGUgY29weXJpZ2h0IG5vdGljZWQgdG8gYmUgb21pdHRlZCAocmVwb3J0ZWQgYnkgUGV0ZXIKKwkgIFdlbW0gPHBldGVyQG5ldHBsZXguY29tLmF1PikuCisJPiBzZXZlcmFsIHNtYWxsIGNoYW5nZXMgdG8gbWFrZSB0aGUgYysrIGJpbmRpbmcgYW5kIGRlbW8gd29yayBvbiBPUy8yCisJICBFTVggKHJlbGF0ZWQgdG8gYSBjbGVhbiByZWluc3RhbGwgb2YgRU1YKToKKwkrIGNvcnJlY3QgbGlicmFyeS1wcmVmaXggZm9yIGMrKyBiaW5kaW5nOyBub25lIGlzIG5lZWRlZC4KKwkrIGFkZCAkeCBzdWZmaXggdG8gbWFrZV9oYXNoIGFuZCBtYWtlX2tleXMgc28gJ21ha2UgZGlzdGNsZWFuJyB3b3Jrcy4KKwkrIGNvcnJlY3QgbWlzc2luZyAkeCBzdWZmaXggZm9yIHRhY2ssIGMrKyBkZW1vIGV4ZWN1dGFibGVzLgorCSsgc3BsaXQgQ0ZfQ1hYX0xJQlJBUlkgaW50byBDRl9HUFBfTElCUkFSWSAoZm9yIC1sZysrKSBhbmQKKwkgIENGX1NURENQUF9MSUJSQVJZIChmb3IgLWxzdGRjKyspCisKKzk5MDgyOAlwcmUtcmVsZWFzZQorCSsgYWRkIGN5Z3dpbiB0ZXJtaW5mbyBlbnRyeSAtVEQKKwkrIG1vZGlmeSBDRl9QUk9HX0VYVCBjb25maWd1cmUgbWFjcm8gdG8gc2V0IC5leGUgZXh0ZW5zaW9uIGZvciBjeWd3aW4uCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGhvdXQtY3h4LWJpbmRpbmcsIG1vZGlmeWluZyB0aGUgZXhpc3RpbmcKKwkgIC0td2l0aG91dC1jeHggb3B0aW9uIHRvIGNoZWNrIG9ubHkgZm9yIHRoZSBDKysgY29tcGlsZXIKKwkgIGNoYXJhY3RlcmlzdGljcy4gIFdoZXRoZXIgb3Igbm90IHRoZSBDKysgYmluZGluZyBpcyBuZWVkZWQsIHRoZQorCSAgY29uZmlndXJlIHNjcmlwdCBjaGVja3MgZm9yIHRoZSBzaXplL3R5cGUgb2YgYm9vbCwgdG8gbWFrZSBuY3Vyc2VzCisJICBtYXRjaC4gIE90aGVyd2lzZSBDKysgYXBwbGljYXRpb25zIGNhbm5vdCB1c2UgbmN1cnNlcy4KKworOTkwODIxCXByZS1yZWxlYXNlCisJKyB1cGRhdGVkIGNvbmZpZ3VyZSBtYWNyb3MgQ0ZfTUFLRUZMQUdTLCBDRl9DSEVDS19FUlJOTworCSsgbWlub3IgY29ycmVjdGlvbnMgdG8gYmV0ZXJtIHRlcm1pbmZvIGVudHJ5LgorCSsgbW9kaWZ5IGxpYl9zZXR1cC5jIHRvIHJlamVjdCB2YWx1ZXMgb2YgJFRFUk0gd2hpY2ggaGF2ZSBhICcvJyBpbgorCSAgdGhlbS4KKwkrIGFkZCBpZmRlZidzIHRvIGd1YXJkIGFnYWluc3QgQ1M1LCBDUzYsIENTNywgQ1M4IGJlaW5nIHplcm8sIGFzIG1vcmUKKwkgIHRoYW4gb25lIGlzIG9uIEJlT1MuICBUaGF0IHdvdWxkIGJyZWFrIGEgc3dpdGNoIHN0YXRlbWVudC4KKwkrIGFkZCBjb25maWd1cmUgbWFjcm8gQ0ZfTElOS19GVU5DUyB0byBkZXRlY3QgYW5kIHdvcmsgYXJvdW5kIEJlT1MncworCSAgbm9uZnVuY3Rpb25hbCBsaW5rKCkuCisJKyBpbXByb3ZlZCBjb25maWd1cmUgbWFjcm9zIENGX0JPT0xfREVDTCBhbmQgQ0ZfQk9PTF9TSVpFIHRvIGRldGVjdAorCSAgQmVPUydzIGJvb2wsIHdoaWNoIGlzIGRlY2xhcmVkIGFzIGFuIHVuc2lnbmVkIGNoYXIuCisKKzk5MDgxNAlwcmUtcmVsZWFzZQorCSsgYWRkIG1zLXZ0MTAwIHRlcm1pbmZvIGVudHJ5IC1URAorCSsgbWlub3IgZml4ZXMgZm9yIG1pc2MvZW14LnNyYywgYmFzZWQgb24gdGVzdGluZyB3aXRoIHRhY2suCisJKyBtaW5vciBmaXggZm9yIHRlc3QvbmN1cnNlcy5jLCB0ZXN0ICdhJywgaW4gY2FzZSBuY3YgaXMgbm90IHNldC4KKworOTkwNzMxCXByZS1yZWxlYXNlCisJKyBtaW5vciBjb3JyZWN0aW9uIGZvciAnc2NyZWVuJyB0ZXJtaW5mbyBlbnRyeS4KKwkrIGNsYXJpZnkgZGVzY3JpcHRpb24gb2YgZXJycmV0IHZhbHVlcyBmb3Igc2V0dXB0ZXJtIGluIG1hbnBhZ2UuCisJKyBtb2RpZnkgdHB1dCB0byBhbGxvdyBpdCB0byBlbWl0IGNhcGFiaWxpdGllcyBmb3IgaGFyZGNvcHkgdGVybWluYWxzCisJICAocGF0Y2ggYnkgR29yYW4gVWRkZWJvcmcgPGdvZXJhbkB1ZGRlYm9yZy5wcC5zZT4pLgorCSsgbW9kaWZ5IHRoZSAnbycgKHBhbmVsKSB0ZXN0IGluIG5jdXJzZXMuYyB0byBzaG93IHRoZSBwYW5lbHMgaW4gY29sb3IKKwkgIG9yIGF0IGxlYXN0IGluIGJvbGQsIHRvIHRlc3QgSnVlcmdlbidzIGNoYW5nZSB0byB3cmVmcmVzaCgpLgorCT4gcGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBGaXhlcyBhIHByb2JsZW0gdXNpbmcgd2JrZ2RzZXQoKSB3aXRoIHBhbmVscy4gIEl0IGhhcyBhY3R1YWxseQorCSAgbm90aGluZyB0byB3aXRoIHBhbmVscyBidXQgaXMgYSBwcm9ibGVtIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgorCSAgd3JlZnJlc2goKS4gIFdoZW5ldmVyIGEgd2luZG93IGNoYW5nZXMgaXRzIGJhY2tncm91bmQgYXR0cmlidXRlIHRvCisJICBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gbmV3c2NyJ3MgYmFja2dyb3VuZCBhdHRyaWJ1dGUsIHRoZSB3aG9sZQorCSAgd2luZG93IGlzIHRvdWNoZWQgdG8gZm9yY2UgYSBjb3B5IHRvIG5ld3Njci4gIFRoaXMgaXMgYW4gdW53YW50ZWQKKwkgIHNpZGUtZWZmZWN0IG9mIHdyZWZyZXNoKCkgYW5kIGl0IGlzIGFjdHVhbGx5IG5vdCBuZWNlc3NhcnkuICBBCisJICBjaGFuZ2VkIGJhY2tncm91bmQgYXR0cmlidXRlIGFmZmVjdHMgb25seSBmdXJ0aGVyIG91dHB1dHMgb2YKKwkgIGJhY2tncm91bmQgaXQgZG9lc24ndCBtZWFuIGFueXRoaW5nIHRvIHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlCisJICB3aW5kb3cuICBTbyB0aGVyZSBpcyBubyBuZWVkIHRvIGZvcmNlIGEgY29weS4gIChyZXBvcnRlZCBieSBGcmFuaworCSAgSGVja2VuYmFjaCA8ZnJhbmtAZy1uLXUuZGU+KS4KKwkrIGFuIHVwd2FyZCBjb21wYXRpYmxlIGVuaGFuY2VtZW50IG9mIHRoZSBOQ3Vyc2VzUGFkIGNsYXNzIGluIHRoZSBDKysKKwkgIGJpbmRpbmcuICBJdCBhbGxvd3Mgb25lIHRvIGFkZCBhICJ2aWV3cG9ydCIgd2luZG93IHRvIGEgcGFkIGFuZCB0aGVuCisJICB0byB1c2UgcGFubmluZyB0byB2aWV3IHRoZSBwYWQgdGhyb3VnaCB0aGUgdmlld3BvcnQgd2luZG93LgorCis5OTA3MjQJcHJlLXJlbGVhc2UKKwkrIHN1cHByZXNzIGEgY2FsbCB0byBkZWZfcHJvZ19tb2RlKCkgaW4gdGhlIFNJR1RTVFAgaGFuZGxlciBpZiB0aGUKKwkgIHNpZ25hbCB3YXMgcmVjZWl2ZWQgd2hpbGUgbm90IGluIGN1cnNlcyBtb2RlLCBlLmcuLCBlbmR3aW4oKSB3YXMKKwkgIGNhbGxlZCBpbiBwcmVwYXJhdGlvbiBmb3Igc3Bhd25pbmcgYSBzaGVsbCBjb21tYW5kIChyZXBvcnRlZCBieSBGcmFuaworCSAgSGVja2VuYmFjaCA8ZnJhbmtAZy1uLXUuZGU+KQorCSsgY29ycmVjdGVkL2VuaGFuY2VkIHh0ZXJtLXI1LCB4dGVybStzbCwgeHRlcm0rc2wtdHdtIHRlcm1pbmZvIGVudHJpZXMuCisJKyBjaGFuZ2UgdGVzdCBmb3IgeHRlcm0gbW91c2UgY2FwYWJpbGl0eTogIGl0IG5vdyBjaGVja3Mgb25seSBpZiB0aGUKKwkgIHVzZXIncyAkRElTUExBWSB2YXJpYWJsZSBpcyBzZXQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUga21vdXMKKwkgIGNhcGFiaWxpdHkgYmVpbmcgcHJlc2VudCBpbiB0aGUgdGVybWluZm8uICBCZWZvcmUsIGl0IGNoZWNrZWQgaWYgYW55CisJICBvZiAieHRlcm0iLCAicnh2dCIgb3IgImt0ZXJtIiB3ZXJlIHN1YnN0cmluZ3Mgb2YgdGhlIHRlcm1pbmFsIG5hbWUuCisJICBIb3dldmVyLCBzb21lIGVtdWxhdG9ycyB3aGljaCBhcmUgaW5jb21wYXRpYmxlIHdpdGggeHRlcm0gaW4gb3RoZXIKKwkgIHdheXMgZG8gc3VwcG9ydCB0aGUgeHRlcm0gbW91c2UgY2FwYWJpbGl0eS4KKwkrIHJldmlld2VkIGFuZCBtYWRlIG1pbm9yIGNoYW5nZXMgaW4gbmN1cnNlcyB0byBxdWlldCBnKysgd2FybmluZ3MKKwkgIGFib3V0IHNoYWRvd2VkIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiAgZysrIGluY29ycmVjdGx5IHdhcm5zCisJICBhYm91dCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWNhdXNlIGl0IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50CisJICBzaG9ydC1jaXJjdWl0IGV4cHJlc3Npb24gZXZhbHVhdGlvbi4KKwkrIGNoYW5nZSBuY3Vyc2VzICdiJyB0ZXN0IHRvIHN0YXJ0IGluIGNvbG9yIHBhaXIgMCBhbmQgdG8gc2hvdyBpbiB0aGUKKwkgIHJpZ2h0IG1hcmdpbiB0aG9zZSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBzdXBwcmVzc2VkIGJ5IG5vX2NvbG9yX3ZpZGVvLAorCSAgaS5lLiwgIihOQ1YpIi4KKwkrIG1vZGlmeSBpZmRlZidzIGluIGN1cnNlcy5oIHNvIHRoYXQgX19hdHRyaWJ1dGVfXyBpcyBub3QgcmVkZWZpbmVkCisJICB3aGVuIGNvbXBpbGluZyB3aXRoIGcrKywgYnV0IGluc3RlYWQgZGlzYWJsZWQgdGhlIG1hY3JvcyBkZXJpdmVkIGZvcgorCSAgX19hdHRyaWJ1dGVfXyBzaW5jZSBnKysgZG9lcyBub3QgY29uc2lzdGVudGx5IHJlY29nbml6ZSB0aGUgc2FtZQorCSAga2V5d29yZHMgYXMgZ2NjIChyZXBvcnRlZCBieSBTdGVwaGFuIEsgWml0eiA8eml0ekBlcmYubmV0PikuCisJKyB1cGRhdGUgZGVwZW5kZW5jaWVzIGZvciB0ZXJtLmggaW4gbmN1cnNlcy9tb2R1bGVzIChyZXBvcnRlZCBieQorCSAgSWx5YSBaYWtoYXJldmljaCkuCisKKzk5MDcxMAlwcmUtcmVsZWFzZQorCSsgbW9kaWZ5IHRoZSBmb3JtIGRlbW8gaW4gbmN1cnNlcy5jIHRvIGlsbHVzdHJhdGUgaG93IHRvIG1hbmlwdWxhdGUgdGhlCisJICBmaWVsZCBhcHBlYXJhbmNlLCBlLmcsIGZvciBoaWdobGlnaHRpbmcgb3IgdHJhbnNsYXRpbmcgdGhlIGZpZWxkCisJICBjb250ZW50cy4KKwkrIGNvcnJlY3QgbG9naWMgaW4gd3JpdGVfZW50cnkgZnJvbSBzcGxpdC1vdXQgb2YgaG9tZV90ZXJtaW5mbyBpbgorCSAgOTgwOTE5LCB3aGljaCBwcmV2ZW50ZWQgdXBkYXRlIG9mICRIT01FLy50ZXJtaW5mbyAocmVwb3J0ZWQgYnkgUGhpbGlwCisJICBTcGVuY2VyIDxwc3BlbmNlckBmaWVsZHMudXRvcm9udG8uY2E+KS4KKworOTkwNzAzCXByZS1yZWxlYXNlCisJKyBtb2RpZnkgbGludXggdGVybWluZm8gZGVzY3JpcHRpb24gdG8gbWFrZSB1c2Ugb2Yga2VybmVsIDIuMi54IG1vZHMKKwkgIHRoYXQgc3VwcG9ydCBjdXJzb3Igc3R5bGUsIGUuZy4sIHRvIGltcGxlbWVudCBjdnZpcyAocGF0Y2ggYnkgRnJhbmsKKwkgIEhlY2tlbmJhY2ggPGZyYW5rQGctbi11LmRlPikKKwkrIGFkZCBzcGVjaWFsLWNhc2UgaW4gc2V0dXB0ZXJtIHRvIHJldGFpbiBwcmV2aW91c2x5LXNhdmVkIHRlcm1pbmFsCisJICBzZXR0aW5ncyBpbiBjdXJfdGVybSwgd2hpY2ggaGFwcGVucyB3aGVuIGN1cnNlcyBhbmQgdGVybWNhcCBjYWxscyBhcmUKKwkgIG1peGVkIChmcm9tIHJlcG9ydCBieSBCam9ybiBIZWxnYWFzIDxoZWxnYWFzQGRoYy5uZXQ+KS4KKwkrIHN1cHByZXNzIGluaXRpYWxpemF0aW9uIG9mIGtleS10cmllcyBpbiBfbmNfa2V5cGFkKCkgaWYgd2UgYXJlIG9ubHkKKwkgIGRpc2FibGluZyBrZXlwYWQgbW9kZSwgZS5nLiwgaW4gZW5kd2luKCkgY2FsbGVkIHdoZW4ga2V5cGFkKCkgd2FzCisJICBub3QuCisJKyBtb2RpZnkgdGhlIEFkYTk1IG1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IGFsd2F5cyB0aGUgQWRhIGZpbGVzIGZyb20KKwkgIHRoZSBkZXZlbG9wbWVudCB0cmVlIGFyZSB1c2VkIGZvciBidWlsZGluZyBhbmQgbm90IHRoZSBldmVudHVhbGx5CisJICBpbnN0YWxsZWQgb25lcyAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworOTkwNjI2CXByZS1yZWxlYXNlCisJKyB1c2UgVFRZIGRlZmluaXRpb24gaW4gdGFjay9zeXNkZXAuYyByYXRoZXIgdGhhbiBzdHJ1Y3QgdGVybWlvcworCSAgKHJlcG9ydGVkIGJ5IFBoaWxpcHBlIERlIE11eXRlcikuCisJKyBhZGQgYSBmYWxsYmFjayBmb3Igc3Ryc3RyLCB1c2VkIGluIGxpYl9tdmN1ci5jIGFuZCB0YWNrL2VkaXQuYywKKwkgIG5vdCBwcmVzZW50IG9uIHN5c1Y2OCAocmVwb3J0ZWQgYnkgUGhpbGlwcGUgRGUgTXV5dGVyKS4KKwkrIGNvcnJlY3QgZGVmaW5pdGlvbiBpbiBjb21wX2hhc2guYyB0byBidWlsZCB3aXRoIGNvbmZpZ3VyZQorCSAgLS13aXRoLXJjcy1pZHMgb3B0aW9uLgorCis5OTA2MTkJcHJlLXJlbGVhc2UKKwkrIG1vZGlmaWVkIGlmZGVmJ3MgZm9yIHNpZ2FjdGlvbiBhbmQgc2lndmVjIHRvIGVuc3VyZSB3ZSBkbyBub3QgdHJ5IHRvCisJICBoYW5kbGUgU0lHVFNUUCBpZiBuZWl0aGVyIGlzIGF2YWlsYWJsZSAoZnJvbSByZXBvcnQgYnkgUGhpbGlwcGUgRGUKKwkgIE11eXRlcikuCisJPiBwYXRjaCBieSBQaGlsaXBwZSBEZSBNdXl0ZXI6CisJKyBpbiB0aWMuYywgdXNlIGB1bmxpbmsnIGlmIGByZW1vdmUnIGlzIG5vdCBhdmFpbGFibGUuCisJKyB1c2Ugb25seSBgdW5zaWduZWQnIGFzIGZhbGxiYWNrIHZhbHVlIGZvciBgc3BlZWRfdCcuICBTb21lIGZpbGVzIHVzZWQKKwkgIGBzaG9ydCcgaW5zdGVhZC4KKworOTkwNjE2CXByZS1yZWxlYXNlCisJKyBmaXggc29tZSBjb21waWxlciB3YXJuaW5ncyBpbiB0YWNrLgorCSsgYWRkIGEgY2hlY2sgZm9yIHByZWRlZmluZWQgYm9vbCB0eXBlIGluIENDLCBiYXNlZCBvbiByZXBvcnQgdGhhdAorCSAgQmVPUyBwcmVkZWZpbmVzIGEgYm9vbCB0eXBlLgorCSsgY29ycmVjdCBsb2dpYyBmb3IgaW5mb2NtcCAtZSBvcHRpb24sIGkuZS4sIHRoZSBjb25maWd1cmUKKwkgIC0td2l0aC1mYWxsYmFja3Mgb3B0aW9uLCB3aGljaCBJJ2Qgbm90IHVwZGF0ZWQgd2hlbiBpbXBsZW1lbnRpbmcKKwkgIGV4dGVuZGVkIG5hbWVzIChjZjogIDk5MDMwMSkuICBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGFkZHMgYSAiLUUiCisJICBvcHRpb24gdG8gaW5mb2NtcCAtVEQKKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGludHJvZHVjZSB0aGUgcHJpdmF0ZSB0eXBlIEN1cnNlc19Cb29sIGluIHRoZSBBZGE5NSBiaW5kaW5nCisJICBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaXMgdG8gY2xlYXJseSByZXByZXNlbnQgdGhlIHVzZSBvZiAiYm9vbCIgYWxzbworCSAgaW4gdGhlIGJpbmRpbmcuICBJdCBzaG91bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIGdlbmVyYXRlZCBjb2RlLgorCSsgaW1wcm92ZSB0aGUgbWFuIHBhZ2UgZm9yIGZpZWxkX2J1ZmZlcigpIHRvIHRlbGwgdGhlIHBlb3BsZSwgdGhhdCB0aGUKKwkgIHdob2xlIGJ1ZmZlciBpbmNsdWRpbmcgbGVhZGluZy90cmFpbGluZyBzcGFjZXMgaXMgcmV0dXJuZWQuICBUaGlzIGlzCisJICBhIGNvbW1vbiBzb3VyY2Ugb2YgY29uZnVzaW9uLCBzbyBpdCdzIGJldHRlciB0byBkb2N1bWVudCBpdCBjbGVhcmx5LgorCis5OTA2MTQJcHJlLXJlbGVhc2UKKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIHVzZSBwcmFnbWEgUHJlRWxhYm9yYXRlIGluIHNldmVyYWwgcGxhY2VzLgorCSsgY2hhbmdlIGEgZmV3IFN5c3RlbS5BZGRyZXNzIHVzZXMgdG8gbW9yZSBzcGVjaWZpYyB0eXBlcy4KKwkrIGNoYW5nZSBpbnRlcmZhY2UgdmVyc2lvbi1udW1iZXIgdG8gMS4wCisJKyByZWdlbmVyYXRlIEFkYTk1IEhUTUwgZmlsZXMuCisKKzk5MDYxMglwcmUtcmVsZWFzZQorCSsgbW9kaWZ5IGxpYl9lbmR3aW4uYyB0byBhdm9pZCBjYWxsaW5nIHJlc2V0X3NoZWxsX21vZGUoKSwgcmV0dXJuIEVSUgorCSAgaWYgaXQgYXBwZWFycyB0aGF0IGN1cnNlcyB3YXMgbmV2ZXIgaW5pdGlhbGl6ZWQsIGUuZy4sIGJ5IGluaXRzY3IoKS4KKwkgIEZvciBpbnN0YW5jZSwgdGhpcyBndWFyZHMgYWdhaW5zdCBzZXR0aW5nIHRoZSB0ZXJtaW5hbCBtb2RlcyB0bworCSAgc3RyYW5nZSB2YWx1ZXMgaWYgZW5kd2luKCkgaXMgY2FsbGVkIGFmdGVyIHNldHVwdGVybSgpLiAgSW4gdGhlIHNhbWUKKwkgIGNvbnRleHQsIFNvbGFyaXMgY3Vyc2VzIHdpbGwgZHVtcCBjb3JlLgorCSsgbW9kaWZ5IGxvZ2ljIHRoYXQgYXZvaWRzIGEgY29uZmxpY3QgaW4gbGliX3ZpZGF0dHIuYyBiZXR3ZWVuIHNncjAgYW5kCisJICBlcXVpdmFsZW50IHZhbHVlcyBpbiBybXNvIG9yIHJtdWwgYnkgZW5zdXJpbmcgd2UgZG8gbm90IG1vZGlmeSB0aGUKKwkgIGRhdGEgd2hpY2ggd291bGQgYmUgcmV0dXJuZWQgYnkgdGhlIHRlcm1pbmZvIG9yIHRlcm1jYXAgaW50ZXJmYWNlcworCSAgKHJlcG9ydGVkIGJ5IEJyYWQgUGVwZXJzIDxicmFkQGxpbnV4Y2FuYWRhLmNvbT4sIGNmOiAgOTYwNzA2KS4KKwkrIGFkZCBhIG51bGwtcG9pbnRlciBjaGVjayBmb3IgU1AgaW4gbGliX3ZpZGF0dHIuYyB0byBsb2dpYyB0aGF0IGNoZWNrcworCSAgZm9yIG1hZ2ljIGNvb2tpZXMuCisJKyBpbXByb3ZlIGZhbGxiYWNrIGRlY2xhcmF0aW9uIG9mICdib29sJyB3aGVuIHRoZSAtLXdpdGhvdXQtY3h4IG9wdGlvbgorCSAgaXMgZ2l2ZW4sIGJ5IHVzaW5nIGEgJ2NoYXInIG9uIGkzODYgYW5kIHJlbGF0ZWQgaG9zdHMgKHByb21wdGVkIGJ5CisJICBkaXNjdXNzaW9uIHdpdGggQWxleGFuZGVyIFYgTHVreWFub3YpLgorCis5OTA2MDUJcHJlLXJlbGVhc2UKKwkrIGluY2x1ZGUgdGltZS5oIGluIGxpYl9uYXBtcy5jIGlmIG5hbm9zbGVlcCBpcyB1c2VkIChwYXRjaCBieQorCSAgUiBMaW5kc2F5IFRvZGQgPHRvZGRyQHJwaS5lZHU+KS4KKwkrIGFkZCBhbiAiI3VuZGVmIGJvb2wiIHRvIGN1cnNlcy5oLCBpbiBjYXNlIHNvbWVvbmUgdHJpZXMgdG8gZGVmaW5lIGl0LAorCSAgZS5nLiwgcGVybC4KKwkrIGFkZCBjaGVjayB0byB0cGFybSB0byBndWFyZCBhZ2FpbnN0IGRpdmlkZSBieSB6ZXJvIChyZXBvcnRlZCBieSBBYXJvbgorCSAgQ2FtcGJlbGwgPGFhcm9uQHVnLmNzLmRhbC5jYT4pLgorCis5OTA1MTYJcHJlLXJlbGVhc2UKKwkrIG1pbm9yIGZpeCB0byBidWlsZCB0YWNrIG9uIENMSVggKG1pc21hdGNoZWQgY29uc3QpLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgY2hhbmdlIEp1ZXJnZW4ncyBvbGQgZW1haWwgYWRkcmVzcyB3aXRoIG5ldyBvbmUgaW4gdGhlIGZpbGVzIHdoZXJlIGl0CisJICBpcyByZWZlcmVuY2VkLiAgVGhlIEFkYTk1IEhUTUwgcGFnZXMgYXJlIHJlZ2VuZXJhdGVkLgorCSsgdXBkYXRlIE1BTklGRVNUIHRvIGxpc3QgdGhlIHRhY2sgZmlsZXMuCisKKzk5MDUwOQlwcmUtcmVsZWFzZQorCSsgbWlub3IgZml4ZXMgdG8gbWFrZSAndGFjaycgYnVpbGQvbGluayBvbiBOZVhUIChyZXBvcnRlZCBieSBGcmFuY2lzY28KKwkgIEEuIFRvbWVpIFRvcnJlcykuCisKKzk5MDQxNwlwcmUtcmVsZWFzZQorCSsgYWRkICd0YWNrJyBwcm9ncmFtICh3aGljaCBpcyBHUEwnZCksIHVwZGF0aW5nIGl0IHRvIHdvcmsgd2l0aCB0aGUKKwkgIG1vZGlmaWVkIFRFUk1UWVBFIHN0cnVjdCBhbmQgbWFraW5nIGEgZml4IHRvIHN1cHBvcnQgc2V0YWYvc2V0YWIKKwkgIGNhcGFiaWxpdGllcy4gIE5vdGUgdGhhdCB0aGUgdGFjayBwcm9ncmFtIGlzIG5vdCBwYXJ0IG9mIHRoZQorCSAgbmN1cnNlcyBsaWJyYXJpZXMsIGJ1dCBhbiBhcHBsaWNhdGlvbiB3aGljaCBjYW4gYmUgZGlzdHJpYnV0ZWQgd2l0aAorCSAgbmN1cnNlcy4gIFRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgaWdub3JlIHRoZSBkaXJlY3RvcnkgaWYgaXQgaXMKKwkgIG9taXR0ZWQsIGhvd2V2ZXIuCisJKyBtb2RpZnkgZ3BtIG1vdXNlIHN1cHBvcnQgc28gdGhhdCBidXR0b25zIDIgYW5kIDMgYXJlIHVzZWQgZm9yCisJICBzZWxlY3QvcGFzdGUgb25seSB3aGVuIHNoaWZ0IGtleSBpcyBwcmVzc2VkLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUKKwkgIGZvciB1c2UgYnkgYW4gYXBwbGljYXRpb24gKHBhdGNoIGJ5IEtsYXVzIFdlaWRlKS4KKwkrIGFkZCBjb21wbGV0ZSBsaXN0IG9mIGZ1bmN0aW9uIGtleXMgdG8gc2NvYW5zaSB0ZXJtaW5mbyBlbnRyeSAtIFRECisKKzk5MDQxMAlwcmUtcmVsZWFzZQorCSsgYWRkIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbSBjYXJkZmlsZS5jIHRvIGlsbHVzdHJhdGUgaG93IHRvIHJlYWQgZm9ybQorCSAgZmllbGRzLCBhbmQgc2hvd2luZyBmb3JtcyB3aXRoaW4gcGFuZWxzLgorCSsgY2hhbmdlIHNoYXJlZC1saWJyYXJ5IHZlcnNpb25pbmcgZm9yIHRoZSBIdXJkIHRvIGJlIGxpa2UgTGludXggcmF0aGVyCisJICB0aGFuICpCU0QgKHBhdGNoIGJ5IE1hcmsgS2V0dGVuaXMgPGtldHRlbmlzQHdpbnMudXZhLm5sPikuCisJKyBhZGQgbGludXgtbGF0IHRlcm1pbmZvIGVudHJ5LgorCSsgYmFjay1vdXQgX25jX2FjY2VzcyBjaGVjayBpbiByZWFkX3Rlcm1jYXAuYyAoYm90aCBpbmNvcnJlY3QgYW5kCisJICB1bm5lY2Vzc2FyeSwgZXhjZXB0IHRvIGd1YXJkIGFnYWluc3QgYSBzbWFsbCB3aW5kb3cgd2hlcmUgdGhlIGZpbGUncworCSAgb3duZXJzaGlwIG1heSBjaGFuZ2UpLgorCis5OTA0MDMJcHJlLXJlbGVhc2UKKwkrIHJlbW92ZSBjb25mbGljdGluZyBfbmNfZnJlZV90ZXJtdHlwZSgpIGZ1bmN0aW9uIGZyb20gdGVzdCBtb2R1bGUKKwkgIGxpYl9mcmVlYWxsLmMKKwkrIHVzZSBfbmNfYWNjZXNzIGNoZWNrIGluIHJlYWRfdGVybWNhcC5jIGZvciB0ZXJtcGF0aHNbXSBhcnJheSAobm90ZWQKKwkgIGJ5IEplcmVteSBCdWhsZXIsIGluZGljYXRpbmcgdGhhdCBBbGFuIENveCBtYWRlIGEgc2ltaWxhciBwYXRjaCkuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBtb2RpZnkgbWVudSBjcmVhdGlvbiB0byBub3QgaW5oZXJpdCBzdGF0dXMgZmxhZyBmcm9tIHRoZSBkZWZhdWx0IG1lbnUKKwkgIHdoaWNoIHNheXMgdGhhdCB0aGUgYXNzb2NpYXRlZCBtYXJrZXIgc3RyaW5nIGhhcyBiZWVuIGFsbG9jYXRlZCBhbmQKKwkgIHNob3VsZCBiZSBmcmVlZCAoYnVnIHJlcG9ydGVkIGJ5IE1hcmVrIFBhbGl3b2RhIgorCSAgPHBhbGl3b2RhQGtraS5uZXQucGw+KQorCis5OTAzMjcJcHJlLXJlbGVhc2UgKGFscGhhLmdudS5vcmc6L2dudS9uY3Vyc2VzLTUuMC1iZXRhMS50YXIuZ3opCisJKyBtaW5vciBmaXhlcyB0byB4dGVybS14ZnJlZTg2IHRlcm1pbmZvIGVudHJ5IC0gVEQuCisJKyBzcGxpdCB1cCBhbiBleHByZXNzaW9uIGluIGNvbmZpZ3VyZSBzY3JpcHQgY2hlY2sgZm9yIGxkY29uZmlnIHRvCisJICB3b3JrYXJvdW5kIGxpbWl0YXRpb24gb2YgQlNEL09TIHNoIChyZXBvcnRlZCBieSBKZWZmIEhhYXMKKwkgIDxqbWhAbWFpbC5tc2VuLmNvbT4pLgorCSsgY29ycmVjdCBhIHR5cG8gaW4gbWFuL2Zvcm1faG9vay4zeCAoVG9kZCBDIE1pbGxlcikuCisKKzk5MDMxOAlwcmUtcmVsZWFzZQorCSsgcGFyZW50aGVzaXplIGFuZCB1bmRlZiAnaW5kZXgnIHN5bWJvbCBpbiBjKysgYmluZGluZyBhbmQgZGVtbywgdG8KKwkgIGFjY29tbW9kYXRlIGl0cyBkZWZpbml0aW9uIG9uIE5lWFQgKHJlcG9ydGVkIGJ5IEZyYW5jaXNjbyBBLiBUb21laQorCSAgVG9ycmVzKS4KKwkrIGFkZCBzaWdpc21lbWJlcigpIHRvIGJhc2Uvc2lnYWN0aW9uLmMgY29tcGF0aWJpbGl0eSB0byBsaW5rIG9uIE5lWFQKKwkgIChyZXBvcnRlZCBieSBGcmFuY2lzY28gQS4gVG9tZWkgVG9ycmVzKS4KKwkrIGZ1cnRoZXIgcmVmaW5lbWVudHMgdG8gaW5lcXVhbGl0eSBpbiBoYXNobWFwLmMgdG8gY292ZXIgYSBjYXNlIHdpdGgKKwkgIF5VIGluIG52aSAocGF0Y2ggYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCis5OTAzMTYJcHJlLXJlbGVhc2UKKwkrIGFkZCBmYWxsYmFjayBkZWZpbml0aW9uIGZvciBnZXRjd2QsIHRvIGxpbmsgb24gTmVYVC4KKwkrIGFkZCBhIGNvcHkgb2YgY3VyX3Rlcm0gdG8gdGljLmMgdG8gbWFrZSBpdCBsaW5rIHByb3Blcmx5IG9uIE5lWFQKKwkgIChyZXBvcnRlZCBieSBGcmFuY2lzY28gQS4gVG9tZWkgVG9ycmVzKS4KKwkrIGNoYW5nZSBpbmVxdWFsaXR5IGluIGhhc2htYXAuYyB3aGljaCBjaGVja3MgdGhlIGRpc3RhbmNlIHRyYXZlbGVkIGJ5CisJICBhIGNodW5rIHNvIHRoYXQgXkQgY29tbWFuZCBpbiBudmkgKHNjcm9sbHMgMS8yIHNjcmVlbikgd2lsbCB1c2UKKwkgIHNjcm9sbGluZyBsb2dpYyAocGF0Y2ggYnkgQWxleGFuZGVyIFYgTHVreWFub3YsIHJlcG9ydGVkIGJ5IEplZmZyZXkKKwkgIEMgSG9uaWcpLgorCis5OTAzMTQJcHJlLXJlbGVhc2UKKwkrIG1vZGlmeSBsaWJfY29sb3IuYyB0byBoYW5kbGUgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGN1cnNjcgorCSAgYXR0cmlidXRlcyBoYXZlIGJlZW4gbWFkZSBvYnNvbGV0ZSAocGF0Y2ggYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgdXBkYXRlIEJTRC9PUyBjb25zb2xlIHRlcm1pbmZvIGVudHJpZXMgdG8gdXNlIGtsb25lK3NnciBhbmQKKwkgIGtsb25lK2NvbG9yIChwYXRjaCBieSBKZWZmcmV5IEMgSG9uaWcpLgorCSsgdXBkYXRlIGdsaWJjIGFkZG9uIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIGV4dGVuZGVkIGNhcGFiaWxpdGllcy4KKwkrIGNvcnJlY3QgYSBjb3VwbGUgb2Ygd2FybmluZ3MgaW4gdGhlIC0tZW5hYmxlLWNvbnN0IGNvbmZpZ3VyYXRpb24uCisJKyBtYWtlIGNvbXBfaGFzaCBidWlsZCBwcm9wZXJseSB3aXRoIF9uY19zdHJkdXAoKSwgb24gTmVYVCAocmVwb3J0ZWQgYnkKKwkgIEZyYW5jaXNjbyBBLiBUb21laSBUb3JyZXMgPGZyYW5jaXNjby50b21laUBjd2l4LmNvbT4pLgorCis5OTAzMTMJcHJlLXJlbGVhc2UKKwkrIGNvcnJlY3QgdHlwb3MgaW4gbGludXgtYyBpbml0YyBzdHJpbmcgLSBURAorCSsgYWRkICdjcnQnIHRlcm1pbmZvIGVudHJ5LCB1cGRhdGUgeHRlcm0teGZyZWU4NiBlbnRyeSAtIFRECisJKyByZW1vdmUgYSBzcHVyaW91cyBhcmd1bWVudCB0byB0cGFybSgpIGluIGxpYl9za2xyZWZyLmMgKHBhdGNoIGJ5CisJICBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisKKzk5MDMwNwlwcmUtcmVsZWFzZQorCSsgYmFjay1vdXQgY2hhbmdlIHRvIHdnZXRjaCBiZWNhdXNlIGl0IGNhdXNlcyBhIHByb2JsZW0gd2l0aCBeWgorCSAgaGFuZGxpbmcgaW4gbHlueCAocmVwb3J0ZWQgYnkgS2ltIERlVmF1Z2huKS4KKworOTkwMzA2CXByZS1yZWxlYXNlCisJKyBhZGQgLUcgb3B0aW9uIHRvIHRpYyBhbmQgaW5mb2NtcCwgdG8gcmV2ZXJzZSB0aGUgLWcgb3B0aW9uLgorCSsgcmVjb2RlIGZ1bmN0aW9ucyBpbiBuYW1lX21hdGNoLmMgdG8gYXZvaWQgdXNlIG9mIHN0cm5jcHksIHdoaWNoCisJICBjYXVzZWQgYSA0LWZvbGQgc2xvd2Rvd24gaW4gdGljIChjZjogOTgwNTMwKS4KKwkrIGNvcnJlY3QgYSBmZXcgd2FybmluZ3MgYWJvdXQgc2lnbi1leHRlbnNpb24gaW4gcmVjZW50IGNoYW5nZXMuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBmaXhlcyBzdWdnZXN0ZWQgYnkgSmVmZiBCcmFkYnVyeSA8amlicmFkYnVyeUBsdWNlbnQuY29tPjoKKwkgICsgaW1wcm92ZWQgcGFyYW1ldGVyIGNoZWNraW5nIGluIG5ld19maWVsZHR5cGUoKS4KKwkgICsgZml4ZWQgYSB0eXBvIGluIHdnZXRjaCgpIHRpbWVvdXQgaGFuZGxpbmcuCisJICArIGFsbG93IHNsa19pbml0KCkgdG8gYmUgY2FsbGVkIHBlciBuZXd0ZXJtIGNhbGwuICBUaGUgaW50ZXJuYWwgU0xLCisJICAgIHN0YXRlIGlzIHN0b3JlZCBpbiB0aGUgU0NSRUVOIHN0cnVjdCBhZnRlciBldmVyeSBuZXd0ZXJtKCkgYW5kIHRoZW4KKwkgICAgcmVzZXQgZm9yIHRoZSBuZXh0IG5ld3Rlcm0uCisJICArIGZpeCB0aGUgcHJvYmxlbSB0aGF0IGEgc2xrX3JlZnJlc2goKSByZWZyZXNoZXMgc3Rkc2NyIGlmIHRoZQorCSAgICB0ZXJtaW5hbCBoYXMgdHJ1ZSBTTEtzLgorCSsgdXBkYXRlIEhUTUwgZG9jdW1lbnRhdGlvbiBmb3IgQWRhIGJpbmRpbmcuCisKKzk5MDMwMQlwcmUtcmVsZWFzZQorCSsgcmVtb3ZlICdib29sJyBjYXN0cyBmcm9tIGRlZmluaXRpb25zIG9mIFRSVUUvRkFMU0Ugc28gdGhhdCBzdGF0ZW1lbnRzCisJICBzdWNoIGFzICIjaWYgVFJVRSIgd29yay4gIFRoaXMgd2FzIG9yaWdpbmFsbHkgZG9uZSB0byBhbGxvdyBmb3IgYSBDKysKKwkgIGNvbXBpbGVyIHdoaWNoIHdvdWxkIHdhcm4gb2YgaW1wbGljaXQgY29udmVyc2lvbnMgYmV0d2VlbiBlbnVtIGFuZAorCSAgaW50LCBidXQgaXMgbm90IG5lZWRlZCBmb3IgZysrIChyZXBvcnRlZCBieSBLaW0gRGVWYXVnaG4pLgorCSsgYWRkIHVzZV9leHRlbmRlZF9uYW1lcygpIGZ1bmN0aW9uIHRvIGFsbG93IGFwcGxpY2F0aW9ucyB0byBzdXBwcmVzcworCSAgcmVhZCBvZiB0aGUgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtdGNhcC1uYW1lcyB0byBzdXBwb3J0IGxvZ2ljIHdoaWNoCisJICBhbGxvd3MgbmN1cnNlcycgdGljIHRvIGRlZmluZSBuZXcgKGkuZS4sIGV4dGVuZGVkKSB0ZXJtaW5hbAorCSAgY2FwYWJpbGl0aWVzLiAgVGhpcyBpcyBhY3RpdmF0ZWQgYnkgdGhlIHRpYyAteCBzd2l0Y2guICBUaGUgaW5mb2NtcAorCSAgcHJvZ3JhbSBhdXRvbWF0aWNhbGx5IHNob3dzIG9yIGNvbXBhcmVzIGV4dGVuZGVkIGNhcGFiaWxpdGllcy4KKwkgIE5vdGU6ICBUaGlzIGNoYW5nZXMgdGhlIFN0cmluZ3MgYW5kIHNpbWlsYXIgYXJyYXlzIGluIHRoZSBURVJNVFlQRQorCSAgc3RydWN0IHNvIHRoYXQgYXBwbGljYXRpb25zIHdoaWNoIG1hbmlwdWxhdGUgaXQgbXVzdCBiZSByZWNvbXBpbGVkLgorCSsgdXNlIG1hY3JvcyB0eXBlTWFsbG9jLCB0eXBlQ2FsbG9jIGFuZCB0eXBlUmVhbGxvYyBjb25zaXN0ZW50bHkKKwkgIHRocm91Z2hvdXQgbmN1cnNlcyBsaWJyYXJ5LgorCSsgYWRkIF9uY19zdHJkdXAoKSB0byBkb2FsbG9jLmMuCisJKyBtb2RpZnkgZGVmaW5lX2tleSgpIHRvIGFsbG93IG11bHRpcGxlIHN0cmluZ3MgdG8gYmUgYm91bmQgdG8gdGhlCisJICBzYW1lIGtleWNvZGUuCisJKyBjb3JyZWN0IGxvZ2ljIGVycm9yIGluIF9uY19yZW1vdmVfc3RyaW5nLCBmcm9tIDk5MDIyMC4KKwk+IHBhdGNoIGZvciBBZGE5NSBiaW5kaW5nIChKdWVyZ2VuIFBmZWlmZXIpOgorCSsgcmVnZW5lcmF0ZSBzb21lIG9mIHRoZSBodG1sIGRvY3VtZW50YXRpb24KKwkrIG1pbm9yIGNsZWFudXAgaW4gdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGIKKworOTkwMjIwCXByZS1yZWxlYXNlCisJKyByZXNvbHZlIGFtYmlndWl0eSBvZiBrZW5kL2tsbC9rc2x0IGFuZCBraG9tZS9rZm5kL2tpY2gxIHN0cmluZ3MgaW4KKwkgIHh0ZXJtIGFuZCBuY3NhIHRlcm1pbmZvIGVudHJpZXMgYnkgcmVtb3ZpbmcgdGhlIHVubmVlZGVkIG9uZXMuICBOb3RlCisJICB0aGF0IHNvbWUgZW50cmllcyB3aWxsIHJldHVybiBrZW5kICYga2hvbWUgdmVyc3VzIGtzbHQgYW5kIGtmbmQsIGZvcgorCSAgUEMtc3R5bGUga2V5Ym9hcmRzIHZlcnN1cyBzdHJpY3QgdnQyMjAgY29tcGF0aWJsaXR5IC0gVEQKKwkrIGFkZCBmdW5jdGlvbiBrZXlib3VuZCgpLCB3aGljaCByZXR1cm5zIHRoZSBkZWZpbml0aW9uIGFzc29jaWF0ZWQgd2l0aAorCSAgYSBnaXZlbiBrZXljb2RlLgorCSsgbW9kaWZ5IGRlZmluZV9rZXkoKSB0byB1bmRlZmluZSB0aGUgZ2l2ZW4gc3RyaW5nIHdoZW4gbm8ga2V5Y29kZSBpcworCSAgZ2l2ZW4uCisJKyBtb2RpZnkga2V5b2soKSBzbyBpdCB3b3JrcyBwcm9wZXJseSBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHN0cmluZworCSAgZGVmaW5lZCBmb3IgYSBrZXljb2RlLgorCSsgYWRkIGNoZWNrIHRvIHRpYyB0byB3YXJuIGFib3V0IHRlcm1pbmZvIGRlc2NyaXB0aW9ucyB0aGF0IGNvbnRhaW4KKwkgIG1vcmUgdGhhbiBvbmUga2V5IGFzc2lnbmVkIHRvIHRoZSBzYW1lIHN0cmluZy4gIFRoaXMgaXMgc2hvd24gb25seSBpZgorCSAgdGhlIHZlcmJvc2UgKC12KSBvcHRpb24gaXMgZ2l2ZW4uICBNb3ZlZCByZWxhdGVkIGxvZ2ljICh0aWMgLXYpIGZyb20KKwkgIGNvbXBfcGFyc2UuYyBpbnRvIHRoZSB0aWMgcHJvZ3JhbS4KKwkrIGFkZC91c2UgX25jX3RyYWNlX3RyaWVzKCkgdG8gc2hvdyB0aGUgZnVuY3Rpb24ga2V5cyB0aGF0IHdpbGwgYmUKKwkgIHJlY29nbml6ZWQuCisJKyByZW5hbWUgaW5pdF9hY3MgdG8gX25jX2luaXRfYWNzIChyZXF1ZXN0IGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwk+IHBhdGNoIGZvciBBZGE5NSBiaW5kaW5nIChKdWVyZ2VuIFBmZWlmZXIpOgorCSsgcmVtb3ZlIGFsbCB0aGUgKl9hZGFiaW5kLmMgZnJvbSBuY3Vyc2VzLCBtZW51IGFuZCBmb3JtIHByb2plY3RzLgorCSAgVGhvc2UgbGl0dGxlIGhlbHBlciByb3V0aW5lcyBoYXZlIGFsbCBiZWVuIGltcGxlbWVudGVkIGluIEFkYSBhbmQgYXJlCisJICBubyBsb25nZXIgcmVxdWlyZWQuCisJKyBUaGUgb3B0aW9uIGhhbmRsaW5nIHJvdXRpbmVzIGluIG1lbnUgYW5kIGZvcm0gaGF2ZSBiZWVuIG1hZGUgbW9yZQorCSAgc2F2ZS4gIFRoZXkgbm93IG1ha2Ugc3VyZSB0aGF0IHRoZSB1bnVzZWQgYml0cyBpbiBvcHRpb25zIGFyZSBhbHdheXMKKwkgIHplcm8uCisJKyBtb2RpZnkgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRvCisJICArIHVzZSBnbmF0bWFrZSBhcyBkZWZhdWx0IGNvbXBpbGVyIG5hbWUuICBUaGlzIGlzIGEgc2FmZXIgY2hvaWNlIHRoYW4KKwkgICAgZ2NjLCBiZWNhdXNlIHNvbWUgR05BVCBpbXBsZW1lbnRhdGlvbnMgdXNlIG90aGVyIG5hbWVzIGZvciB0aGUKKwkgICAgY29tcGlsZXJkcml2ZXIgdG8gYXZvaWQgY29uZmxpY3RzLgorCSAgKyB1c2UgbmV3IGRlZmF1bHQgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucyBmb3IgdGhlIEFkYSBmaWxlcyBhY2NvcmRpbmcKKwkgICAgdG8gdGhlIHByb3Bvc2VkIEdOVSBBZGEgZmlsZXN5c3RlbSBzdGFuZGFyZCAoZm9yIExpbnV4KS4KKwkrIHNpbXBsaWZ5IHRoZSBNYWtlZmlsZXMgZm9yIHRoZSBBZGEgYmluZGluZworCSsgcmVuYW1lIGFkYV9pbmNsdWRlIGRpcmVjdG9yeSB0byBzcmMuCisKKzk5MDIxMworCSsgZW5hYmxlIHNpZ3dpbmNoIGhhbmRsZXIgYnkgZGVmYXVsdC4KKwkrIGRpc2FibGUgbG9naWMgdGhhdCBhbGxvd3Mgc2V0YnVmIHRvIGJlIHR1cm5lZCBvZmYvb24sIGJlY2F1c2Ugc29tZQorCSAgaW1wbGVtZW50YXRpb25zIHdpbGwgb3ZlcnJ1biB0aGUgYnVmZmVyIGFmdGVyIGl0IGhhcyBiZWVuIGRpc2FibGVkCisJICBvbmNlLgorCis5OTAyMDYKKwkrIHN1cHByZXNzIHNjL3JjIGNhcGFiaWxpdGllcyBmcm9tIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGlmIHRoZXkgYXBwZWFyCisJICBpbiBzbWN1cC9ybWN1cC4gIFRoaXMgYWZmZWN0cyBvbmx5IHNjcm9sbGluZyBvcHRpbWl6YXRpb24sIHRvIGZpeCBhCisJICBwcm9ibGVtIHJlcG9ydGVkIGJ5IHNldmVyYWwgcGVvcGxlIHdpdGggeHRlcm0ncyBhbHRlcm5hdGUgc2NyZWVuLAorCSAgdGhvdWdoIHRoZSBwcm9ibGVtIGlzIG1vcmUgZ2VuZXJhbC4KKwk+IHBhdGNoIGZvciBBZGE5NSBiaW5kaW5nIChKdWVyZ2VuIFBmZWlmZXIpOgorCSsgcmVtb3ZlZCBhbGwgcHJhZ21hIFByZWVsYWJvcmF0ZSgpIHN0dWZmLCBiZWNhdXNlIHRoZSBqdXN0IHJlbGVhc2VkCisJICBnbmF0LTMuMTFwIGNvbXBsYWlucyBvbiBzb21lIGNvbnN0cnVjdHMuCisJKyBmaXhlZCBzb21lIHVwcGVyL2xvd2VyIGNhc2Ugbm90YXRpb25zIGJlY2F1c2UgZ25hdC0zLjExcCBmb3VuZAorCSAgaW5jb25zaXN0ZW50IHVzZS4KKwkrIHVzZWQgYSBuZXcgbWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBIVE1MIGRvY3VtZW50YXRpb24gb2YgdGhlIEFkYTk1CisJICBiaW5kaW5nLiAgVGhpcyBpbnZhbGlkYXRlcyBuZWFybHkgdGhlIHdob2xlIC4vQWRhOTUvaHRtbCBzdWJ0cmVlLgorCSAgTmVhcmx5IGFsbCBjdXJyZW50IGZpbGVzIGluIHRoaXMgc3VidHJlZSBhcmUgcmVtb3ZlZAorCis5OTAxMzAKKwkrIGNhY2hlIGxhc3QgcmVzdWx0IGZyb20gX25jX2JhdWRyYXRlLCBmb3IgcGVyZm9ybWFuY2UgKHN1Z2dlc3RlZCBieQorCSAgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgbW9kaWZ5IENsclVwZGF0ZSgpIGZ1bmN0aW9uIHRvIHdvcmthcm91bmQgYSBwcm9ibGVtIGluIG52aSwgd2hpY2gKKwkgIHVzZXMgcmVkcmF3d2luIGluIFNJR1RTVFAgaGFuZGxpbmcuICBKZWZmcmV5IEMgSG9uaWcgcmVwb3J0ZWQgdGhhdAorCSAgbmN1cnNlcyByZXBhaW50ZWQgdGhlIHNjcmVlbiB3aXRoIG51bGxzIGJlZm9yZSByZXN1bWluZyBub3JtYWwKKwkgIG9wZXJhdGlvbiAocGF0Y2ggYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgZ2VuZXJhbGl6ZSBpc194dGVybSgpIGZ1bmN0aW9uIGEgbGl0dGxlIGJ5IGxldHRpbmcgeHRlcm0vcnh2dC9rdGVybQorCSAgYmUgYW55IHN1YnN0cmluZyByYXRoZXIgdGhhbiB0aGUgcHJlZml4LgorCSsgbW9kaWZ5IGxpYl9kYXRhLmMgdG8gaW5pdGlhbGl6ZSBTUC4gIFNvbWUgbGlua2VycywgZS5nLiwgSUJNJ3MsIHdpbGwKKwkgIG5vdCBsaW5rIGEgbW9kdWxlIGlmIHRoZSBvbmx5IHN5bWJvbHMgZXhwb3J0ZWQgZnJvbSB0aGUgbW9kdWxlIGFyZQorCSAgdW5pbml0aWFsaXplZCBvbmVzIChwYXRjaCBieSBJbHlhIFpha2hhcmV2aWNoKS4gIElseWEgc2F5cyB0aGF0IGhlCisJICBoYXMgc2VlbiBtZXNzYWdlcyBjbGFpbWluZyB0aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoZSBzdGFuZGFyZC4pCisJKyBtb3ZlIGNhbGwgb24gX25jX3NpZ25hbF9oYW5kbGVyIHBhc3QgX25jX2luaXRzY3IsIHRvIGF2b2lkIGEgc21hbGwKKwkgIHdpbmRvdyB3aGVyZSBOdHR5YiBoYXNuJ3QgeWV0IGJlZW4gZmlsbGVkIChyZXBvcnRlZCBieSBLbGF1cyBXZWlkZSkuCisJKyBtb2RpZnkgbGliX3RzdHAuYyB0byBibG9jayBTSUdUVE9VIHdoZW4gaGFuZGxpbmcgU0lHVFNUUCwgZml4ZXMgYQorCSAgcHJvYmxlbSB3aGVyZSBuY3Vyc2VzIGFwcGxpY2F0aW9ucyB3aGljaCB3ZXJlIHJ1biB2aWEgYSBzaGVsbCBzY3JpcHQKKwkgIHdvdWxkIGhhbmcgd2hlbiBnaXZlbiBhIF5aLiAgQWxzbywgY2hlY2sgaWYgdGhlIHRlcm1pbmFsJ3MgcHJvY2VzcworCSAgZ3JvdXAgaXMgY29uc2lzdGVudCwgaS5lLiwgYSBzaGVsbCBoYXMgbm90IHRha2VuIG93bmVyc2hpcCBvZiBpdCwKKwkgIGJlZm9yZSBkZWNpZGluZyB0byBzYXZlIHRoZSBjdXJyZW50IHRlcm1pbmFsIHNldHRpbmdzIGluIHRoZSBTSUdUU1RQCisJICBoYW5kbGVyIChwYXRjaCBieSBLbGF1cyBXZWlkZSkuCisJKyBjb3JyZWN0IHNwZWxsaW5nIG9mIEFDU18gbmFtZXMgaW4gY3Vyc19ib3JkZXIuM3ggKHJlcG9ydGVkIGJ5IEJvYiB2YW4KKwkgIGRlciBQb2VsIDxidmRwb2VsQGtvb3RlbmF5LmNvbT4pLgorCSsgY29ycmVjdCBhIGNvdXBsZSBvZiB0eXBvcyBpbiB0aGUgbWFjcm9zIHN1cHBvcnRpbmcgdGhlIGNvbmZpZ3VyZQorCSAgLS13aXRoLXNobGliLXZlcnNpb24gb3B0aW9uLgorCis5OTAxMjMKKwkrIG1vZGlmeSBmdHlfcmVnZXguYyB0byBjb21waWxlIG9uIEhBVkVfUkVHRVhQUl9IX0ZVTkNTIG1hY2hpbmUgKHBhdGNoCisJICBieSBLaW1pbyBJc2hpaSA8aXNoaWlAY3NsLnNvbnkuY28uanA+KS4KKwkrIHJlbmFtZSBCU0RJIGNvbnNvbGUgdGVybWluZm8gZW50cmllczogIGJzZG9zIHRvIGJzZG9zLXBjLW5vYm9sZCwgYW5kCisJICBic2Rvcy1ib2xkIHRvIGJzZG9zLXBjIChwYXRjaCBieSBKZWZmcmV5IEMgSG9uaWcpLgorCSsgbW9kaWZ5IHRwdXQgdG8gYWNjZXB0IHRlcm1jYXAgbmFtZXMgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGVybWluZm8KKwkgIG5hbWVzIChwYXRjaCBieSBKZWZmcmV5IEMgSG9uaWcpLgorCSsgY29ycmVjdCBhIHR5cG8gaW4gdGVybS43IChUb2RkIEMgTWlsbGVyKS4KKwkrIGFkZCBjb25maWd1cmUgLS13aXRoLXNobGliLXZlcnNpb24gb3B0aW9uIHRvIGFsbG93IGluc3RhbGxpbmcgc2hhcmVkCisJICBsaWJyYXJpZXMgbmFtZWQgYWNjb3JkaW5nIHRvIHJlbGVhc2Ugb3IgQUJJIHZlcnNpb25zLiAgVGhpcworCSAgcGFyYW1ldGVyaXplcyBzb21lIGV4aXN0aW5nIGxvZ2ljIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LCBhbmQgaXMKKwkgIGludGVuZGVkIGZvciBjb21wYXRpYmxpdHkgdXBncmFkZXMgb24gRGlnaXRhbCBVbml4LCB3aGljaCB1c2VkCisJICB2ZXJzaW9uZWQgbGlicmFyaWVzIGluIG5jdXJzZXMgNC4yLCBidXQgbm8gbG9uZ2VyIGRvZXMgKGNmOiAgOTgwNDI1KS4KKwkrIHJlc3luYyBjb25maWd1cmUgc2NyaXB0IGFnYWluc3QgYXV0b2NvbmYgMi4xMyArIHBhdGNoZXMKKwkrIG1pbm9yIGltcHJvdmVtZW50cyBmb3IgdGVyYXRlcm0gdGVybWluZm8gZW50cnkgYmFzZWQgb24gdGhlIHByb2dyYW0ncworCSAgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworOTkwMTE2CisJKyBjaGFuZ2UgZGVmYXVsdCBmb3IgY29uZmlndXJlIC0tZW5hYmxlLWJpZy1jb3JlIHRvIGFzc3VtZSBtYWNoaW5lcyBkbworCSAgaGF2ZSBlbm91Z2ggbWVtb3J5IHRvIHJlc29sdmUgdGVybWluZm8uc3JjIGluLW1lbW9yeS4KKwkrIGNvcnJlY3QgbmFtZSBvZiBuY3Vyc2VzIGxpYnJhcnkgaW4gVEVTVF9BUkdTIHdoZW4gY29uZmlndXJpbmcgd2l0aAorCSAgZGVidWcgbGlicmFyeS4KKwkrIG1pbm9yIGZpeGVzIHRvIGNvbXBpbGUgbmN1cnNlcyBsaWJyYXJ5IHdpdGggYnJva2VuLWxpbmtlciB3aXRoIGcrKy4KKwkrIGFkZCAtLWVuYWJsZS1icm9rZW4tbGlua2VyIGNvbmZpZ3VyZSBvcHRpb24sIGRlZmF1bHQgdG8gZW52aXJvbm1lbnQKKwkgIHZhcmlhYmxlICRCUk9LRU5fTElOS0VSIChyZXF1ZXN0IGJ5IEplZmZyZXkgQyBIb25pZykuCisJKyBjaGFuZ2Uga2V5X25hbWVzW10gYXJyYXkgdG8gc3RhdGljIHNpbmNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJzZXMKKwkgIGludGVyZmFjZSAocmVwb3J0ZWQgYnkgSmVmZnJleSBDIEhvbmlnIDxqY2hAYnNkaS5jb20+KS4KKworOTkwMTEwCisJKyBhZGQgVGVyYSBUZXJtIHRlcm1pbmZvIGVudHJ5IC0gVEQKKworOTkwMTA5CisJKyByZXZpZXdlZC9jb3JyZWN0ZWQgbWFjcm9zIGluIGN1cnNlcy5oIGFzIHBlciBYU0kgZG9jdW1lbnQuCisJKyBwcm92aWRlIHN1cHBvcnQgZm9yIHRlcm1jYXAgUEMgdmFyaWFibGUgYnkgY29weWluZyBpdCBmcm9tIHRlcm1pbmZvCisJICBkYXRhIGFuZCB1c2luZyBpdCBhcyB0aGUgcGFkZGluZyBjaGFyYWN0ZXIgaW4gdHB1dHMgKHJlcG9ydGVkIGJ5CisJICBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBjb3JyZWN0ZWQgaXJpcy1hbnNpIGFuZCBpcmlzLWFuc2ktYXAgdGVybWluZm8gZW50cmllcyBmb3Iga2VudCBhbmQKKwkgIGtmOS1rZjEyIGNhcGFiaWxpdGllcywgYXMgd2VsbCBhcyBhZGRpbmcga2NidC4KKwkrIGRvY3VtZW50IHRoZSBtb3VzZSBoYW5kbGluZyBtZWNoYW5pc20gaW4gbWVudV9kcml2ZXIgYW5kIG1ha2UgYSBzbWFsbAorCSAgY2hhbmdlIGluIG1lbnVfZHJpdmVyJ3MgcmV0dXJuIGNvZGVzIHRvIHByb3ZpZGUgbW9yZSBjb25zaXN0ZW5jeQorCSAgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyBhZGQgZmFsbGJhY2sgZGVmaW5pdGlvbiBmb3IgTkNVUlNFU19DT05TVCB0byB0ZXJtY2FwLmguaW4gKHJlcG9ydGVkCisJICBieSBVY2hpeWFtYSBZYXN1c2hpIDx1Y2hAbm9wLm9yLmpwPikuCisJKyBtb3ZlIGxpYl9yZXN0YXJ0LmMgdG8gbmN1cnNlcy9iYXNlLCBzaW5jZSBpdCB1c2VzIGN1cnNlcyBmdW5jdGlvbnMKKwkgIGRpcmVjdGx5LCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSB1c2VkIGluIGxpYnRpbmZvLnNvCisJKyByZW5hbWUgbWljcm9fY2hhcl9zaXplIHRvIG1pY3JvX2NvbF9zaXplLCBhZGRpbmcgI2RlZmluZSB0byByZXRhaW4KKwkgIG9sZCBuYW1lLgorCSsgYWRkIHNldF9hX2F0dHJpYnV0ZXMgYW5kIHNldF9wZ2xlbl9pbmNoIHRvIHRlcm1pbmZvIHN0cnVjdHVyZSwgYXMgcGVyCisJICBYU0kgYW5kIFNvbGFyaXMgMi41LgorCSsgbWlub3IgbWFrZWZpbGUgZmlsZXMgdG8gYnVpbGQgbmN1cnNlcyB0ZXN0X3Byb2dzCisJKyB1cGRhdGUgaHRtbCBmaWxlcyBpbiBtaXNjIGRpcmVjdG9yeSB0byByZWZsZWN0IGNoYW5nZXMgc2luY2UgNC4yCisKKzk5MDEwMgorCSsgZGlzYWJsZSBzY3JvbGwgaGludHMgd2hlbiBoYXNobWFwIGlzIGVuYWJsZWQgKHBhdGNoIGJ5IEFsZXhhbmRlcgorCSAgViBMdWt5YW5vdikuCisJKyBtb3ZlIGxvZ2ljIGZvciB0aWMncyB2ZXJpZnkgb2YgLWUgb3B0aW9uIHZlcnN1cyAtSSBhbmQgLUMgc28gdGhhdCB0aGUKKwkgIHRlcm1pbmZvIGRhdGEgaXMgbm90IHByb2Nlc3NlZCBpZiB3ZSBjYW5ub3QgaGFuZGxlIC1lIChyZXBvcnRlZCBieQorCSAgU3RldmVuIFNjaHdhcnR6IDxzdGV2ZXNAdW5pdHJlbmRzLmNvbT4uCisJKyBhZGQgdGVzdC1kcml2ZXIgdHJhY2VzIHRvIHRlcm1pbmZvIGFuZCB0ZXJtY2FwIGZ1bmN0aW9ucy4KKwkrIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGVybWNhcCBvc3BlZWQgdmFyaWFibGUgYnkgY29weWluZyBpdCBmcm9tIHRoZQorCSAgaW50ZXJuYWwgY3VyX3Rlcm0gbWVtYmVyLCBhbmQgdXNpbmcgb3NwZWVkIGFzIHRoZSBiYXVkcmF0ZSByZWZlcmVuY2UKKwkgIGZvciB0aGUgZGVsYXlfb3V0cHV0IGFuZCB0cHV0cyBmdW5jdGlvbnMuICBJZiBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdAorCSAgc2V0IG9zcGVlZCwgdGhlIGxpYnJhcnkgYmVoYXZlcyBhcyBiZWZvcmUsIGV4Y2VwdCB0aGF0IF9uY190aW1lZF93YWl0CisJICBpcyBubyBsb25nZXIgdXNlZCwgb3IgbmVlZGVkLCBzaW5jZSBvc3BlZWQgYWx3YXlzIGhhcyBhIHZhbHVlLiAgQnV0CisJICB0aGUgYXBwbGljYXRpb24gY2FuIG1vZGlmeSBvc3BlZWQgdG8gYWRqdXN0IHRoZSBvdXRwdXQgb2YgcGFkZGluZworCSAgY2hhcmFjdGVycyAocHJvbXB0ZWQgYnkgYSBidWcgcmVwb3J0IGZvciBzY3JlZW4gMy43LjYgYW5kIGVtYWlsIGZyb20KKwkgIE1pY2hhZWwgU2Nocm9lZGVyIDxNaWNoYWVsLlNjaHJvZWRlckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4pLgorCSsgcmVtb3ZlZCBzb21lIHVudXNlZCBpZmRlZidzIGFzIHBhcnQgb2YgQWxleGFuZGVyJ3MgcmVzdHJ1Y3R1cmluZy4KKwkrIHJldmlld2VkL3VwZGF0ZWQgY3Vyc2VzLmgsIHRlcm0uaCBhZ2FpbnN0IFgvT3BlbiBDdXJzZXMgSXNzdWUgNAorCSAgVmVyc2lvbiAyLiAgVGhpcyBpbmNsdWRlcyBtYWtpbmcgc29tZSBwYXJhbWV0ZXJzIE5DVVJTRVNfQ09OU1QKKwkgIHJhdGhlciB0aGFuIGNvbnN0LCBlLmcuLCBpbiB0ZXJtY2FwLmguCisJKyBjaGFuZ2UgbGludXggdGVybWluZm8gZW50cnkgdG8gdXNlIG5jdiMyLCBzaW5jZSB1bmRlcmxpbmUgZG9lcyBub3QKKwkgIHdvcmsgd2l0aCBjb2xvcgorCis5ODEyMjYKKwkrIG1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgZm9yIGN1cnNlcy5oIHRvIG1hdGNoIFhTSS4KKwkrIGNoYW5nZSAtLWVuYWJsZS1uby1wYWRkaW5nIGNvbmZpZ3VyZSBvcHRpb24gdG8gYmUgbm9ybWFsbHkgZW5hYmxlZC4KKwkrIGFkZCBzZWN0aW9uIHRvIG5jdXJzZXMgbWFucGFnZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCSsgaW52ZXN0aWdhdGVkIERlYmlhbiBidWcgcmVwb3J0IHRoYXQgcGVydGFpbnMgdG8gc2NyZWVuIDMuNy40LzMuNy42CisJICBjaGFuZ2VzLCBmb3VuZCBubyBzaWduIG9mIHByb2JsZW1zIG9uIExpbnV4IChvciBvbiBTdW5PUywgU29sYXJpcykKKwkgIHJ1bm5pbmcgc2NyZWVuIGJ1aWx0IHdpdGggbmN1cnNlcy4KKwkrIGNoZWNrIGlmIHRtcF9mcCBpcyBvcGVuZWQgaW4gdGljLmMgYmVmb3JlIGNsb3NpbmcgaXQgKHBhdGNoIGJ5IFBhdmVsCisJICBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPikuCisJKyBjb3JyZWN0IHNldmVyYWwgZm9udCBzcGVjaWZpY2F0aW9uIHR5cG9zIGluIG1hbi1wYWdlcy4KKworOTgxMjIwCisJKyBjb3JyZWN0IGRlZmF1bHQgdmFsdWUgZm9yIEJVSUxEX0NDIChyZXBvcnRlZCBieSBMYXJyeSBWaXJkZW4pLgorCis5ODEyMTkKKwkrIG1vZGlmeSBfbmNfc2V0X3dyaXRlZGlyKCkgdG8gc2V0IGEgZmxhZyBpbiBfbmNfdGljX2RpcigpIHRvIHByZXZlbnQKKwkgIGl0IGZyb20gY2hhbmdpbmcgdGhlIHRlcm1pbmZvIGRpcmVjdG9yeSBhZnRlciBjaGRpcidpbmcgdG8gaXQuCisJICBPdGhlcndpc2UsIGEgcmVsYXRpdmUgcGF0aCBpbiAkVEVSTUlORk8gd291bGQgY29uZnVzZSB0aWMgKHByb21wdGVkCisJICBieSBhIERlYmlhbiBidWcgcmVwb3J0KS4KKwkrIGNvcnJlY3QvdXBkYXRlIG5jc2EgdGVybWluZm8gZW50cnkgKHJlcG9ydCBieSBMYXJyeSBWaXJkZW4pLgorCSsgdXBkYXRlIHh0ZXJtLXhmcmVlODYgdGVybWluZm8gdG8gY3VycmVudCAocGF0Y2ggOTApLCBzbWN1ci9ybWN1cgorCSAgY2hhbmdlcworCSsgYWRkIE1hdGhldyBWZXJub24ncyBtYWNoIGNvbnNvbGUgZW50cmllcyB0byB0ZXJtaW5mby5zcmMKKwkrIG1vcmUgY2hhbmdlcywgbW92aW5nIGZ1bmN0aW9ucywgYXMgcGFydCBvZiBBbGV4YW5kZXIncyByZXN0cnVjdHVyaW5nLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgZm9yIEdOVS9IdXJkIHNoYXJlLWxpYnJhcnkgc3VwcG9ydCwgaW50cm9kdWNlCisJICBCVUlMRF9DQyB2YXJpYWJsZSBmb3IgY3Jvc3MgY29tcGlsaW5nIChwYXRjaCBieSBVY2hpeWFtYSBZYXN1c2hpCisJICA8dWNoQG5vcC5vci5qcD4pCisKKzk4MTIxMgorCSsgYWRkIGVudmlyb25tZW50IHZhcmlhYmxlIE5DVVJTRVNfTk9fU0VUQlVGIHRvIGFsbG93IGRpc2FibGluZyB0aGUKKwkgIHNldGJ1ZiBmZWF0dXJlLCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkrIGNvcnJlY3QgaWZkZWYncyBmb3IgdGVybWNhcC5oIHZlcnN1cyB0ZXJtLmggdGhhdCBzdXBwcmVzcyByZWR1bmRhbnQKKwkgIGRlY2xhcmF0aW9ucyBvZiBwcm90b3R5cGVzIChyZXBvcnRlZCBieSBILkouTHUpLgorCSsgbW9kaWZ5IE1ha2VmaWxlLm9zMiB0byBhZGQgbGlua2VyIGZsYWdzIHdoaWNoIGFsbG93IG11bHRpcGxlIGNvcGllcworCSAgb2YgYW4gYXBwbGljYXRpb24gdG8gY29leGlzdCAocmVwb3J0ZWQgYnkgSWx5YSBaYWtoYXJldmljaCkuCisJKyB1cGRhdGUgTWFrZWZpbGUuZ2xpYmMgYW5kIGFzc29jaWF0ZWQgY29uZmlndXJlIHNjcmlwdCBzbyB0aGF0IG5jdXJzZXMKKwkgIGJ1aWxkcyBhcyBhIGdsaWJjIGFkZC1vbiB3aXRoIHRoZSBuZXcgZGlyZWN0b3J5IGNvbmZpZ3VyYXRpb24KKwkgIChyZXBvcnRlZCBieSBILkouTHUpLgorCis5ODEyMDUKKwkrIG1vZGlmeSBnZW5fcmVwcygpIGZ1bmN0aW9uIGluIGdlbi5jIHRvIHdvcmsgcHJvcGVybHkgb24gU3VuT1MKKwkgIChzcGFyYyksIHdoaWNoIGlzIGEgbGVmdC10by1yaWdodCBhcmNoaXRlY3R1cmUuCisJKyBtb2RpZnkgcmVsYXRpdmVfbW92ZSBhbmQgdHB1dHMgdG8gYXZvaWQgYW4gaW50ZXJhY3Rpb24gd2l0aCB0aGUKKwkgIEJTRC1zdHlsZSBwYWRkaW5nLiAgVGhlIHJlbGF0aXZlX21vdmUgZnVuY3Rpb24gY291bGQgcHJvZHVjZSBhIHN0cmluZworCSAgdG8gcmVwbGFjZSBvbiB0aGUgc2NyZWVuIHdoaWNoIGJlZ2FuIHdpdGggYSBudW1lcmljIGNoYXJhY3Rlciwgd2hpY2gKKwkgIHdhcyB0aGVuIGludGVycHJldGVkIGJ5IHRwdXRzIGFzIHBhZGRpbmcuICBOb3cgcmVsYXRpdmVfbW92ZSB3aWxsIG5vdAorCSAgZ2VuZXJhdGUgYSBzdHJpbmcgd2l0aCBhIGxlYWRpbmcgZGlnaXQgaW4gdGhhdCBjYXNlIChvdmVyd3JpdGUpLgorCSAgQWxzbywgdHB1dHMgd2lsbCBvbmx5IGludGVycHJldCBwYWRkaW5nIGlmIHRoZSBzdHJpbmcgYmVnaW5zIHdpdGggYQorCSAgZGlnaXQ7IGFzIGNvZGVkIGl0IHBlcm1pdHRlZCBhIHN0cmluZyB0byBiZWdpbiB3aXRoIGEgZGVjaW1hbCBwb2ludAorCSAgb3IgYXN0ZXJpc2sgKHJlcG9ydGVkIGJ5IExhcnJ5IFZpcmRlbikuCisJPiBwYXRjaGVzIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGZpeCBhIHR5cG8gaW4gbV9kcml2ZXIuYyBtb3VzZSBoYW5kbGluZyBhbmQgaW1wcm92ZXMgdGhlIGVycm9yCisJICBoYW5kbGluZy4KKwkrIGZpeCBicm9rZW4gbW91c2UgaGFuZGxpbmcgaW4gdGhlIEFkYTk1IGJpbmRpbmcKKwkrIG1ha2UgdGhlIEFkYTk1IHNhbXBsZSBhcHBsaWNhdGlvbiBtZW51cyB3b3JrIHdpdGggdGhlIG5ldyBtZW51IG1vdXNlCisJICBzdXBwb3J0CisJKyBpbXByb3ZlIHRoZSBtb3VzZSBoYW5kbGluZyBpbnRyb2R1Y2VkIGJ5IElseWE7IGl0IG5vdyBoYW5kbGVzIG1lbnVzCisJICB3aXRoIHNwYWNpbmcuCisJKyByZXBhaXIgYSBtaW5vciBidWcgaW4gdGhlIG1lbnVfZHJpdmVyIGNvZGUgZGlzY292ZXJlZCBkdXJpbmcgdGhpcworCSAgcmV3b3JrLgorCSsgYWRkIG5ldyBmdW5jdGlvbiB3bW91c2VfdHJhZm8oKSB0byBoaWRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YKKwkgIF95b2Zmc2V0IG1lbWJlciBvZiBXSU5ET1cgc3RydWN0IG5lZWRlZCBmb3IgbW91c2UgY29vcmRpbmF0ZQorCSAgdHJhbnNmb3JtYXRpb24uCisKKzk4MTEyOAorCSsgbW9kaWZ5IEFkYTk1L2dlbi9nZW4uYyB0byBhdm9pZCB1c2luZyByZXR1cm4tdmFsdWUgb2Ygc3ByaW50Ziwgc2luY2UKKwkgIHNvbWUgb2xkZXIgaW1wbGVtZW50YXRpb25zIChlLmcuLCBTdW5PUyA0LngpIHJldHVybiB0aGUgYnVmZmVyCisJICBhZGRyZXNzIHJhdGhlciB0aGFuIGl0cyBsZW5ndGguCisJPiBwYXRjaCBieSBSaWNrIE9obmVtdXM6CisJKyBtb2RpZnkgZGVtby5jYyB0byBnZXQgaXQgdG8gY29tcGlsZSB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGVnY3MuCisJKyB0cmltIGEgc3BhY2UgdGhhdCBhcHBlYXJzIGF0IHRoZSBlbmQgb2YgdGhlIHRhYmxlIHByZXByb2Nlc3NvciBsaW5lcworCSAgKCdcIiB0KS4gIFRoaXMgc3BhY2UgcHJldmVudHMgc29tZSB2ZXJzaW9ucyBvZiBtYW4gZnJvbSBkaXNwbGF5aW5nCisJICB0aGUgcGFnZXMgLSBjaGFuZ2VkIHRvIHJlbW92ZSBhbGwgdHJhaWxpbmcgd2hpdGVzcGFjZSAoVEQpCisJKyBmaW5hbGx5LCAnbWFrZSBjbGVhbicgZG9lcyBub3QgcmVtb3ZlIHBhbmVsIG9iamVjdHMuCisJPiBwYXRjaGVzIGJ5IElseWEgWmFraGFyZXZpY2g6CisJKyBhbGxvdyByZW1hcHBpbmcgb2YgT1MvMiBtb3VzZSBidXR0b25zIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlCisJICBNT1VTRV9CVVRUT05TXzEyMyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIDEzMi4KKwkrIGFkZCBtb3VzZSBzdXBwb3J0IHRvIG5jdXJzZXMgbWVudXMuCisKKzk4MTEyMQorCSsgbW9kaWZ5IG1pc2MvbWFrZWRlZi5jbWQgdG8gcmVwb3J0IG9sZC1zdHlsZSAuZGVmIGZpbGUgc3ltYm9scywgYW5kIHRvCisJICBnZW5lcmF0ZSB0aGUgLmRlZiBmaWxlcyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBuYW1lcyByYXRoZXIgdGhhbiB0aGUKKwkgIHJldmVyc2UuCisJKyBhZGQgbWlzYy8qLnJlZiB3aGljaCBhcmUgSi5KLkcuUmlwb2xsJ3MgZGxsIGRlZmluaXRpb24gZmlsZXMgKHJlbmFtZWQKKwkgIGZyb20gbWlzYy8qLm9sZCksIGFuZCB1cGRhdGVkIGJhc2VkIG9uIHRoZSBlbnRyeXBvaW50IGNvZGluZyBoZSB1c2VkCisJICBmb3IgYW4gb2xkZXIgdmVyc2lvbiBvZiBuY3Vyc2VzLgorCSsgYWRkIFJFQURNRS5lbXgsIHRvIGRvY3VtZW50IGhvdyB0byBidWlsZCBvbiBPUy8yIEVNWC4KKwkrIHVwZGF0ZXMgZm9yIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiBmcm9tIEx5bngKKwk+IHBhdGNoZXMgYnkgSWx5YSBaYWtoYXJldmljaDoKKwkrIG1pbm9yIGZpeGVzIGZvciBtb3VzZSBoYW5kbGluZyBtb2RlOgorCSAgYSkgRG8gbm90IGluaXRpYWxpemUgbW91c2UgaWYgdGhlIHJlcXVlc3QgaXMgdG8gaGF2ZSBubyBtb3VzZTsKKwkgIGIpIEFsbG93IHN3aXRjaGluZyBvZiBPUy8yIFZJTyBtb3VzZSBvbiBhbmQgb2ZmLgorCSsgbW9kaWZ5IE1ha2VmaWxlLm9zMiB0byBzdXBwb3J0IGFsdGVybmF0aXZlIG1lYW5zIG9mIGdlbmVyYXRpbmcKKwkgIGNvbmZpZ3VyZSBzY3JpcHQsIGJ5IHRyYW5zbGF0aW5nIFVuaXggc2NyaXB0IHdpdGggUGVybC4KKwk+IHBhdGNoZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgVXBkYXRlcyBNQU5JRkVTVCB0byByZWZsZWN0IGNoYW5nZXMgaW4gc291cmNlIHN0cnVjdHVyZQorCSsgRWxpbWluYXRlcyBhIHByb2JsZW0gaW50cm9kdWNlZCB3aXRoIG15IGxhc3QgcGF0Y2ggZm9yIHRoZSBDKysKKwkgIGJpbmRpbmcgaW4gdGhlIHBhbmVscyBjb2RlLiAgSXQgcmVtb3ZlcyB0aGUgdXBkYXRlKCkgY2FsbCBkb25lIGluIHRoZQorCSAgcGFuZWwgZGVzdHJ1Y3Rvci4KKwkrIENoYW5nZXMgaW4gdGhlIEFkYTk1IGJpbmRpbmcgdG8gYmV0dGVyIHN1cHBvcnQgc3lzdGVtcyB3aGVyZQorCSAgc2l6ZW9mKGNodHlwZSkhPXNpemVvZihpbnQpIChlLmcuICBERUMgQWxwaGEpLgorCis5ODExMTQKKwkrIG1vZGlmeSBpbnN0YWxsLXNjcmlwdCBmb3IgbWFucGFnZXMgdG8gc2tpcCBvdmVyIC5vcmlnIGFuZCAucmVqIGZpbGVzCisJICAocmVxdWVzdCBieSBMYXJyeSBWaXJkZW4pLgorCT4gcGF0Y2hlcy9kaXNjdXNzaW9uIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92OgorCSsgbW92ZSBiYXNlLWxpYnJhcnkgc291cmNlcyBpbnRvIG5jdXJzZXMvYmFzZSBhbmQgdHR5IChzZXJpYWwgdGVybWluYWwpCisJICBzb3VyY2VzIGludG8gbmN1cnNlcy90dHksIGFzIHBhcnQgb2YgQWxleGFuZGVyIFYgTHVreWFub3YncyBwcm9wb3NlZAorCSAgY2hhbmdlcyB0byBuY3Vyc2VzIGxpYnJhcnkuCisJKyBjb3B5IF90cmFjZW1vdXNlKCkgaW50byBuY3Vyc2VzLmMgc28gdGhhdCBsaWJfdHJhY2Vtc2UuYyBuZWVkIG5vdAorCSAgYmUgbGlua2VkIGludG8gdGhlIG5vcm1hbCBuY3Vyc2VzIGxpYnJhcnkuCisJKyBtb3ZlIG1hY3JvIHdpbmNoIHRvIGEgZnVuY3Rpb24sIHRvIGhpZGUgZGV0YWlscyBvZiBzdHJ1Y3QgbGRhdAorCT4gcGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBmaXggYSBwb3RlbnRpYWwgY29tcGlsZSBwcm9ibGVtIGluIGN1cnNlc3cuY2MKKwkrIHNvbWUgQWRhOTUgY29zbWV0aWNzCisJKyBmaXggYSBnZW4uYyBwcm9ibGVtIHdoZW4gY29tcGlsaW5nIG9uIDY0LUJpdCBtYWNoaW5lcworCSsgZml4IEFkYTk1L2dlbi9NYWtlZmlsZS5pbiAiLUwiIGxpbmtlciBzd2l0Y2gKKwkrIG1vZGlmeSBBZGE5NSBtYWtlZmlsZXMgdG8gdXNlIHRoZSBJTlNUQUxMX1BSRUZJWCBzZXR0aW5nLgorCis5ODExMDcKKwkrIGlmZGVmJ2Qgb3V0IGxpYl9mcmVlYWxsLmMgd2hlbiBub3QgY29uZmlndXJlZC4KKwkrIHJlbmFtZSBfdHJhY2ViaXRzKCkgdG8gX25jX3RyYWNlYml0cygpLgorCSsgbW92ZSB0ZXJtaW5mby1saWJyYXJ5IHNvdXJjZXMgaW50byBuY3Vyc2VzL3RpbmZvLCBhbmQgdHJhY2Utc3VwcG9ydAorCSAgZnVuY3Rpb25zIGludG8gbmN1cnNlcy90cmFjZSBhcyBwYXJ0IG9mIEFsZXhhbmRlciBWIEx1a3lhbm92J3MKKwkgIHByb3Bvc2VkIGNoYW5nZXMgdG8gbmN1cnNlcyBsaWJyYXJ5LgorCSsgbW9kaWZ5IGdlbmVyYXRlZCB0ZXJtLmggdG8gYWx3YXlzIHNwZWNpZnkgaXRzIG93biBkZWZpbml0aW9ucyBmb3IKKwkgIEhBVkVfVEVSTUlPU19ILCBldGMuLCB0byBndWFyZCBhZ2FpbnN0IGluY2x1c2lvbiBieSBwcm9ncmFtcyB3aXRoCisJICBicm9rZW4gY29uZmlndXJlIHNjcmlwdHMuCisKKzk4MTAzMQorCSsgbW9kaWZ5IHRlcm1pbmZvIHBhcnNpbmcgdG8gYWNjZXB0IG9jdGFsIGFuZCBoZXhhZGVjaW1hbCBjb25zdGFudHMsCisJICBsaWtlIFNvbGFyaXMuCisJKyByZW1vdmUgYW4gYXV0b2NvbmYgMi4xMCBhcnRpZmFjdCBmcm9tIHRoZSBjb25maWd1cmUgc2NyaXB0J3MgY2hlY2sKKwkgIGZvciAiLWciIGNvbXBpbGVyIG9wdGlvbnMuICAoVGhvdWdoIGhhcm1sZXNzLCB0aGlzIGNvbmZ1c2VkIHNvbWVvbmUKKwkgIGF0IERlYmlhbiwgd2hvIHJlY2VudGx5IGlzc3VlZCBhIHBhdGNoIHRoYXQgcmVzdWx0cyBpbiB0aGUgb3Bwb3NpdGUKKwkgIGVmZmVjdCkuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtYWRhLWNvbXBpbGVyIHRvIGFjY29tbW9kYXRlIGluc3RhbGxhdGlvbnMKKwkgIHRoYXQgZG8gbm90IHVzZSBnY2MgYXMgdGhlIGRyaXZlciBmb3IgR05BVCAocGF0Y2ggYnkgSnVlcmdlbgorCSAgUGZlaWZlcikuCisKKzk4MTAxNworCSsgZW5zdXJlIC4vbWFuIGV4aXN0cyBpbiBjb25maWd1cmUgc2NyaXB0LCBuZWVkZWQgd2hlbiBjb25maWd1cmluZworCSAgd2l0aCAtLXNyY2RpciBvcHRpb24uCisJKyBtb2RpZnkgaW5mb2NtcCAiLXIiIG9wdGlvbiB0byByZW1vdmUgbGltaXQgb24gZm9ybWF0dGVkIHRlcm1jYXAKKwkgIG91dHB1dCwgd2hpY2ggbWFrZXMgaXQgbW9yZSBsaWtlIFNvbGFyaXMnIHZlcnNpb24uCisJKyBtb2RpZnkgY2FwdG9pbmZvIHRvIHRyZWF0IG5vLWFyZ3VtZW50IGNhc2UgbW9yZSBsaWtlIFNvbGFyaXMnCisJICB2ZXJzaW9uLCB3aGljaCB1c2VzIHRoZSBjb250ZW50cyBvZiAkVEVSTUNBUCBhcyB0aGUgZW50cnkgdG8gZm9ybWF0LgorCSsgbW9kaWZ5IG1rLTJuZC5hd2sgdG8gaGFuZGxlIHN1YmRpcmVjdG9yaWVzLCBlLmcuLCBuY3Vyc2VzL3R0eQorCSAgKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKworOTgxMDEwCisJKyBtb2RpZnkgLS13aXRoLXRlcm1pbmZvLWRpcnMgb3B0aW9uIHNvIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlCisJICAke2RhdGFkaXJ9IHZhbHVlLCB1bmxlc3MgJFRFUk1JTkZPX0RJUlMgaXMgYWxyZWFkeSBzZXQuICBUaGlzIGdldHMKKwkgIHJpZCBvZiBhIGhhcmRjb2RlZCBsaXN0IG9mIGNhbmRpZGF0ZSBkaXJlY3RvcmllcyBpbiB0aGUgY29uZmlndXJlCisJICBzY3JpcHQuCisJKyBhZGQgc29tZSBlcnJvci1jaGVja2luZyB0byBfbmNfcmVhZF9maWxlX2VudHJ5KCkgdG8gZW5zdXJlIHRoYXQKKwkgIHN0cmluZ3MgYXJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgKFRvZGQgQyBNaWxsZXIpLgorCSsgcmVuYW1lIG1hbnBhZ2UgZmlsZSBjdXJzX3Njcl9kbXAuM3ggdG8gY3Vyc19zY3JfZHVtcC4zeCwgdG8KKwkgIGNvcnJlc3BvbmQgd2l0aCBjb250ZW50cyAocmVwb3J0ZWQgYnkgTmVpbCBaYW5lbGxhCisJICA8bnphbmVsbGFAY3MubXVuLmNhPikuCisJKyByZW1vdmUgcmVkdW5kYW50IGNvbmZpZ3VyZSBjaGVjayBmb3IgQysrIHdoaWNoIGRpZCBub3Qgd29yayB3aGVuICRDWFgKKwkgIHdhcyBzcGVjaWZpZWQgd2l0aCBhIGZ1bGwgcGF0aG5hbWUgKHJlcG9ydGVkIGJ5IEFuZHJlYXMgSmFlZ2VyKS4KKwkrIGNvcnJlY3RlZCBiY29weS9tZW1tb3ZlIGNoZWNrOyB0aGUgbWFjcm8gd2FzIG5vdCBzdGFuZGFsb25lLgorCis5ODEwMDMKKwkrIHJlbW92ZSB1bm5lY2Vzc2FyeSBwb3J0aW9uIG9mIE9TLzIgRU1YIG1vdXNlIGNoYW5nZSBmcm9tCisJICBjaGVja19wZW5kaW5nKCkgKHJlcG9ydGVkIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKworOTgwOTI2CisJKyBpbXBsZW1lbnQgbW91c2Ugc3VwcG9ydCBmb3IgT1MvMiBFTVggKGFkYXB0ZWQgZnJvbSBwYXRjaCBhZ2FpbnN0CisJICA0LjIoPykgYnkgSWx5YSBaYWtoYXJldmljaCkuCisJKyBhZGQgY29uZmlndXJlLWNoZWNrIGZvciBiY29weS9tZW1tb3ZlLCBmb3IgOTgwOTE5IGNoYW5nZXMgdG8gaGFzaG1hcC4KKwkrIG1lcmdlIERhdGEgR2VuZXJhbCB0ZXJtaW5mbyBmcm9tIEhhc3VmaW4gPGhhc3VmaW5AdmlkbmV0Lm5ldD4gLSBURAorCSsgbWVyZ2UgQUlYIDMuMi41IHRlcm1pbmZvIGRlc2NyaXB0aW9ucyBmb3IgSUJNIHRlcm1pbmFscywgcmVwbGFjZXMKKwkgIHNvbWUgb2xkZXIgZW50cmllcyAtIFRECisJKyBtb2RpZnkgdGljIHRvIGNvbXBpbGUgaW50byAlJ2NoYXInIGZvcm0gaW4gcHJlZmVyZW5jZSB0byAle251bWJlcn0sCisJICBzaW5jZSB0aGF0IGlzIGEgbGl0dGxlIG1vcmUgZWZmaWNpZW50LgorCSsgbWlub3IgY29ycmVjdGlvbiB0byBpbmZvY21wIHRvIGF2b2lkIGRpc3BsYXlpbmcgImRpZmZlcmVuY2UiIGJldHdlZW4KKwkgIHR3byBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgcmVuZGVyZWQgaW4gZXF1aXZhbGVudCBmb3Jtcy4KKwkrIGFkZCAtZyBvcHRpb24gdG8gdGljL2luZm9jbXAgdG8gZm9yY2UgY2hhcmFjdGVyIGNvbnN0YW50cyB0byBiZQorCSAgZGlzcGxheWVkIGluIHF1b3RlZCBmb3JtLiAgT3RoZXJ3aXNlIHRoZWlyIGRlY2ltYWwgdmFsdWVzIGFyZSBzaG93bi4KKwkrIG1vZGlmeSBzZXR1cHRlcm0gc28gdGhhdCBjYW5jZWxsZWQgc3RyaW5ncyBhcmUgdHJlYXRlZCB0aGUgc2FtZSBhcworCSAgYWJzZW50IHN0cmluZ3MsIGNhbmNlbGxlZCBhbmQgYWJzZW50IGJvb2xlYW5zIGZhbHNlIChkb2VzIG5vdCBhZmZlY3QKKwkgIHRpYywgaW5mb2NtcCkuCisJKyBtb2RpZnkgdGljLCBpbmZvY21wIHRvIGRpc2NhcmQgcmVkdW5kYW50IGkzLCByMyBzdHJpbmdzIHdoZW4gb3V0cHV0CisJICB0byB0ZXJtY2FwIGZvcm1hdC4KKwk+IHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92OgorCSsgaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0cGFybSwgbm93IGl0IHRha2VzIDE5JSBpbnN0ZWFkIG9mIDI1JSB3aGVuCisJICBwcm9maWxpbmcgd29ybS4KKwkrIHJlbmFtZSBtYXhsZW4vbWlubGVuIHRvIHByZWMvd2lkdGggZm9yIGJldHRlciByZWFkYWJpbGl0eS4KKwkrIHVzZSBmb3JtYXQgc3RyaW5nIGZvciBwcmludGluZyBzdHJpbmdzLgorCSsgdXNlIGxlbiBhcmd1bWVudCBjb3JyZWN0bHkgaW4gc2F2ZV90ZXh0LCBhbmQgcGFzcyBpdCB0byBzYXZlX251bWJlci4KKworOTgwOTE5CisJKyBtYWtlIHRlc3RfcHJvZ3MgY29tcGlsZSAoYnV0IGhhc2htYXAgZG9lcyBub3QgZnVuY3Rpb24pLgorCSsgY29ycmVjdCBOQ19CVUZGRVJFRCBtYWNybywgdXNlZCBpbiBsaWJfbXZjdXIgdGVzdC1kcml2ZXIsIG1vZGlmeQorCSAgYXNzb2NpYXRlZCBsb2dpYyB0byBhdm9pZCBmcmVlaW5nIHRoZSBTUC0+X3NldGJ1ZiBkYXRhLgorCSsgYWRkIG1vZHVsZXMgaG9tZV90ZXJtaW5mbyBhbmQgZ2V0ZW52X251bSB0byBsaWJ0aW5mby4KKwkrIG1vdmUgd3JpdGVfZW50cnkgdG8gbGlidGluZm8sIHRvIHdvcmsgd2l0aCB0ZXJtY2FwIGNhY2hpbmcuCisJKyBtaW5vciBmaXhlcyB0byBibHVlLmMgdG8gYnVpbGQgd2l0aCBhdGFjLgorCSsgcmVtb3ZlIHNvZnRzY3JvbGwuYyBtb2R1bGU7IG5vIGxvbmdlciBuZWVkZWQgZm9yIHRlc3RpbmcuCisJPiBwYXRjaGVzIGJ5IFRvZGQgQyBNaWxsZXI6CisJKyB1c2Ugc3RydG9sKDMpIGluc3RlYWQgb2YgYXRvaSgzKSB3aGVuIHBhcnNpbmcgZW52IHZhcmlhYmxlcyBzbyB3ZSBjYW4KKwkgIGRldGVjdCBhIGJvZ3VzIChub24tbnVtZXJpYykgdmFsdWUuCisJKyBjaGVjayBmb3IgdGVybWluYWwgbmFtZXMgPiBNQVhfTkFNRV9TSVpFIGluIGEgZmV3IG1vcmUgcGxhY2VzIHdoZW4KKwkgIGRlYWxpbmcgd2l0aCBlbnYgdmFyaWFibGVzIGFnYWluLgorCSsgZml4IGEgTUFYX05BTUVfU0laRSB0aGF0IHNob3VsZCBiZSBNQVhfTkFNRV9TSVpFKzEKKwkrIHVzZSBzaXplb2YgaW5zdGVhZCBvZiBzdHJsZW4oMykgb24gUFJJVkFURV9JTkZPIHNpbmNlIGl0IGlzIGEgZml4ZWQKKwkgIHN0cmluZyAjZGVmaW5lIChjb21waWxlIHRpbWUgdnMgcnVudGltZSkuCisJKyB3aGVuIHNldHRpbmcgZXJybm8gdG8gRU5PTUVNLCBzZXQgaXQgcmlnaHQgYmVmb3JlIHRoZSByZXR1cm4sIG5vdAorCSAgYmVmb3JlIGNvZGUgdGhhdCBjb3VsZCwgcG9zc2libHksIHNldCBlcnJubyB0byBhIGRpZmZlcmVudCB2YWx1ZS4KKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYgTHVreWFub3Y6CisJKyB1c2UgZGVmYXVsdCBiYWNrZ3JvdW5kIGluIHVwZGF0ZV9jb3N0X2Zyb21fYmxhbmsoKQorCSsgZGlzYWJsZSBzY3JvbGwtaGludHMgd2hlbiBoYXNobWFwIGlzIGNvbmZpZ3VyZWQuCisJKyBpbXByb3ZlIGludGVncmF0aW9uIG9mIGhhc2htYXAgc2Nyb2xsaW5nIGNvZGUsIGJ5IGFkZGluZyBvbGRoYXNoIGFuZAorCSAgbmV3aGFzaCBkYXRhIHRvIFNQIHN0cnVjdC4KKwkrIGludm9rZSBkZWxfY3VydGVybSBmcm9tIGRlbHNjcmVlbi4KKwkrIG1vZGlmeSBkZWxfY3VydGVybSB0byBzZXQgY3VyX3Rlcm0gdG8gbnVsbCBpZiBpdCBtYXRjaGVzIHRoZQorCSAgZnVuY3Rpb24ncyBwYXJhbWV0ZXIgd2hpY2ggaXMgZGVsZXRlZC4KKwkrIG1vZGlmeSBsaWJfZG91cGRhdGUgdG8gcHJlZmVyIHBhcm1faWNoIHRvIHRoZSBlbnRlcl9pbnNlcnRfbW9kZSBhbmQKKwkgIGV4aXRfaW5zZXJ0X21vZGUgY29tYmluYXRpb24sIGFkanVzdGluZyBJbnNDaGFyQ29zdCB0byBjaGVjaworCSAgZW50ZXJfaW5zZXJ0X21vZGUsIGV4aXRfaW5zZXJ0X21vZGUgYW5kIGluc2VydF9wYWRkaW5nLiAgQWRkCisJICBpbnNlcnRfcGFkZGluZyBpbiBpbnNlcnQgbW9kZSBhZnRlciBlYWNoIGNoYXIuICBUaGlzIGFkZHMgbmV3IGNvc3RzCisJICB0byB0aGUgU1Agc3RydWN0LgorCis5ODA5MTIKKwkrIG1vZGlmeSB0ZXN0LWRyaXZlciBpbiBsaWJfbXZjdXIucyB0byB1c2UgX25jX3NldGJ1ZmZlciwgZm9yCisJICBjb25zaXN0ZW50IHRyZWF0bWVudC4KKwkrIG1vZGlmeSBuY3Vyc2VzIHRvIHJlc3RvcmUgb3V0cHV0IHRvIHVuYnVmZmVyZWQgb24gZW5kd2luLCBhbmQgcmVzdW1lCisJICBidWZmZXJpbmcgaW4gcmVmcmVzaCAoc2VlIGxpYl9zZXRfdGVybS5jIGFuZCBOQ19CVUZGRVJFRCBtYWNybykuCisJKyBjb3JyZWN0ZWQgSFRNTCB2ZXJzaW9uIG51bWJlcnMgKGFjY29yZGluZyB0byB0aGUgVzNDIHZhbGlkYXRvciwgdGhleQorCSAgbmV2ZXIgd2VyZSBIVE1MIDIuMC1jb21wbGlhbnQsIGJ1dCBhcmUgYWNjZXB0YWJsZSAzLjApLgorCis5ODA5MDUKKwkrIG1vZGlmeSBNS3Rlcm1pbmZvLnNoIHRvIGdlbmVyYXRlIHRlcm1pbmZvLjUgd2l0aCB0YWJsZXMgc29ydGVkIGJ5CisJICBjYXBhYmlsaXR5IG5hbWUsIGFzIGluIFNWcjQuCisJKyBtb2RpZmllZCB0ZXJtLmgsIHRlcm1jYXAuaCBoZWFkZXJzIHRvIGF2b2lkIHJlZHVuZGFudCBkZWNsYXJhdGlvbnMuCisJKyBjaGFuZ2UgJ3VfaW50JyB0eXBlIGluIHRzZXQuYyB0byB1bnNpZ25lZCwgbWFraW5nIHRoaXMgY29tcGlsZSBvbgorCSAgU2VxdWVudCBQUlggNC4xIChyZXBvcnRlZCBieSBNaWNoYWVsIFN0ZXJyZXR0IDxtc3RlcnJldEBjb2F0LmNvbT4pLgorCis5ODA4MjkKKwkrIGNvcnJlY3Rpb25zIHRvIG1haWxpbmcgYWRkcmVzc2VzLCBhbmQgbW92aW5nIHRoZSBtYWdpYyBsaW5lIHRoYXQKKwkgIGNhdXNlcyB0aGUgbWFuIHByb2dyYW0gdG8gaW52b2tlIHRibCB0byB0aGUgZmlyc3QgbGluZSBvZiBlYWNoCisJICBtYW5wYWdlIChwYXRjaCBieSBSaWNrIE9obmVtdXMgPHJpY2tAZWNvbXBjb24uY29tPikuCisJKyBhZGQgTWFrZWZpbGUub3MyIGFuZCBzdXBwb3J0aW5nIHNjcmlwdHMgdG8gZ2VuZXJhdGUgZGxsJ3Mgb24gT1MvMiBFTVgKKwkgIChmcm9tIEouSi5HLlJpcG9sbCwgd2l0aCBmdXJ0aGVyIGludGVncmF0aW9uIGJ5IFREKS4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIGljbDY0MDQgdGVybWluZm8gZW50cnkuCisJKyBhZGQgeHRlcm1tIGFuZCB4dGVybWMgdGVybWluZm8gZW50cmllcy4KKwk+IGZyb20gZXNyJ3MgdGVybWluZm8gdmVyc2lvbjoKKwkrIEFkZGVkIEZyYW5jZXNjbyBQb3RvcnRpJ3MgdHVuZWQgV3lzZSA5OSBlbnRyaWVzLgorCSsgZHR0ZXJtIGVuYWNzIChmcm9tIEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIEFkZCBuY3NhLW5zLCBuY3NhLW0tbnMgYW5kIG5jc2EtbSBlbnRyaWVzIGZyb20gZXNyIHZlcnNpb24uCisKKzk4MDgyMgorCSsgZG9jdW1lbnQgQVQmVCBhY3MgY2hhcmFjdGVycyBpbiB0ZXJtaW5mby41IG1hbnBhZ2UuCisJKyB1c2UgRU1YIF9zY3JzaXplKCkgZnVuY3Rpb24gaWYgdGVybWluZm8gYW5kIGVudmlyb25tZW50IGRvIG5vdAorCSAgZGVjbGFyZSB0aGUgc2NyZWVuIHNpemUgKHJlcG9ydGVkIGJ5IElseWEgWmFraGFyZXZpY2gKKwkgIDxpbHlhQG1hdGgub2hpby1zdGF0ZS5lZHU+KS4KKwkrIHJlbW92ZSBzcHVyaW91cyAnXCcgY2hhcmFjdGVycyBmcm9tIGV0ZXJtIGFuZCBvc2Jvcm5lIHRlcm1pbmZvCisJICBlbnRyaWVzIChwcm9tcHRlZCBieSBhbiBvbGQgRGViaWFuIGJ1ZyByZXBvcnQpLgorCSsgY29ycmVjdCByZXZlcnNlZCBtYWxsb2MvcmVhbGxvYyBjYWxscyBpbiBfbmNfZG9hbGxvYyAocmVwb3J0ZWQgYnkKKwkgIEhhbnMtSm9hY2hpbSBXaWRtYWllciA8aGp3aWRtYWlAZm94Ym9yby5jb20+KS4KKwkrIGNvcnJlY3QgbWlzcGxhY2VkIHBhcmVudGhlc2lzIHdoaWNoIGNhdXNlZCBmaWxlLWRlc2NyaXB0b3IgZnJvbQorCSAgb3BlbmluZyB0ZXJtY2FwIHRvIGJlIGxvc3QsIGZyb20gOTgwNzI1IGNoYW5nZXMgKHJlcG9ydGVkIGJ5IEFuZHJlYXMKKwkgIEphZWdlcikuCisKKzk4MDgxNQorCSsgbW9kaWZ5IGxpYl9zZXR1cC5jIHRvIGVsaW1pbmF0ZSB1bm5lZWRlZCBpbmNsdWRlIG9mIDxzeXMvaW9jdGwuaD4KKwkgIHdoZW4gdGVybWlvcyBpcyBub3QgdXNlZCAocGF0Y2ggYnkgVG9kZCBDIE1pbGxlcikuCisJKyBhZGQgZnVuY3Rpb24gX25jX2RvYWxsb2MsIHRvIGVuc3VyZSB0aGF0IGZhaWxlZCByZWFsbG9jIGNhbGxzIGRvIG5vdAorCSAgbGVhayBtZW1vcnkgKHJlcG9ydGVkIGJ5IFRvZGQgQyBNaWxsZXIpLgorCSsgaW1wcm92ZWQgbmNzYS10ZWxuZXQgdGVybWluZm8gZW50cnkuCisKKzk4MDgwOQorCSsgY29ycmVjdCBtaXNzaW5nIGJyYWNlcyBhcm91bmQgYSB0cmFjZSBzdGF0ZW1lbnQgaW4gcmVhZF9lbnRyeS5jLAorCSAgZnJvbSA5ODA4MDggKHJlcG9ydGVkIGJ5IEtpbSBEZVZhdWdobiA8a2ltZHZAYmVzdC5jb20+IGFuZCBMaXZpdQorCSAgRGFpYSkuCisKKzk4MDgwOAorCSsgZml4IG1pc3NpbmcgaW5jbHVkZSA8ZXJybm8uaD4gaW4gZGl0dG8uYyAocmVwb3J0ZWQgYnkgQmVybmhhcmQKKwkgIFJvc2Vua3JhZW56ZXIgPGJlcm9AazUuc3Vja3MuZXUub3JnPikKKwkrIGFkZCBOQ1NBIHRlbG5ldCB0ZXJtaW5mbyBlbnRyaWVzIGZyb20gRnJhbmNlc2NvIFBvdG9ydGkKKwkgIDxGLlBvdG9ydGlAY251Y2UuY25yLml0PiwgZnJvbSBEZWJpYW4gYnVnIHJlcG9ydHMuCisJKyBtYWtlIGhhbmRsaW5nIG9mICRMSU5FUyBhbmQgJENPTFVNTlMgdmFyaWFibGVzIG1vcmUgY29tcGF0aWJsZSB3aXRoCisJICBTb2xhcmlzIGJ5IGFsbG93aW5nIHRoZW0gdG8gaW5kaXZpZHVhbGx5IG92ZXJyaWRlIHRoZSB3aW5kb3cgc2l6ZQorCSAgYXMgb2J0YWluZWQgdmlhIGlvY3RsLgorCis5ODA4MDEKKwkrIG1vZGlmeSBsaWJfdmlkYXR0ci5jIHRvIGFsbG93IGZvciB0ZXJtaW5hbCB0eXBlcyAoZS5nLiwgeHRlcm0tY29sb3IpCisJICB3aGljaCBtYXkgcmVzZXQgYWxsIGF0dHJpYnV0ZXMgaW4gdGhlICdvcCcgY2FwYWJpbGl0eSwgc28gdGhhdCBjb2xvcnMKKwkgIGFyZSBzZXQgYmVmb3JlIHR1cm5pbmcgb24gYm9sZCBhbmQgb3RoZXIgYXR0cmlidXRlcywgYnV0IHN0aWxsIGFmdGVyCisJICB0dXJuaW5nIGF0dHJpYnV0ZXMgb2ZmLgorCSsgYWRkICdkaXR0by5jJyB0byB0ZXN0IGRpcmVjdG9yeSB0byBpbGx1c3RyYXRlIHVzZSBvZiBuZXd0ZXJtIGZvcgorCSAgaW5pdGlhbGl6aW5nIG11bHRpcGxlIHNjcmVlbnMuCisJKyBtb2RpZnkgX25jX3dyaXRlX2VudHJ5KCkgdG8gcmVjb3ZlciBmcm9tIGZhaWxlZCBhdHRlbXB0IHRvIGxpbmsgYWxpYXMKKwkgIGZvciBhIHRlcm1pbmZvIG9uIGEgZmlsZXN5c3RlbSB3aGljaCBkb2VzIG5vdCBwcmVzZXJ2ZSBjaGFyYWN0ZXIgY2FzZQorCSAgKHJlcG9ydGVkIGJ5IFBldGVyIEwgSm9yZGFuIDxQSm9yZGFuQGNobGEudXNjLmVkdT4pLgorCis5ODA3MjUKKwkrIHVwZGF0ZWQgdmVyc2lvbnMgb2YgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIGJhc2VkIG9uIGF1dG9tYWtlIDEuMworCSsgY2hhbmdlIG5hbWUtY29tcGFyaXNvbnMgaW4gbGliX3Rlcm1jYXAgdG8gY29tcGFyZSBubyBtb3JlIHRoYW4gMgorCSAgY2hhcmFjdGVycyAoZ2xlYW5lZCBmcm9tIERlYmlhbiBkaXN0cmlidXRpb24gb2YgMS45LjlnLTguOCwgdmVyaWZpZWQKKwkgIHdpdGggU29sYXJpcyBjdXJzZXMpLgorCSsgZml4IHR5cG8gaW4gY3Vyc19pbnNzdHIuM3ggKHBhdGNoIGJ5IFRvZGQgQyBNaWxsZXIpCisJKyB1c2UgJ2FjY2VzcygpJyB0byBjaGVjayBpZiBuY3Vyc2VzIGxpYnJhcnkgc2hvdWxkIGJlIHBlcm1pdHRlZCB0bworCSAgb3BlbiBvciBtb2RpZnkgZmlsZXMgd2l0aCBmb3Blbi9vcGVuL2xpbmsvdW5saW5rL3JlbW92ZSBjYWxscywgaW4KKwkgIGNhc2UgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gaXMgcnVubmluZyBpbiBzZXR1aWQgbW9kZSAocmVxdWVzdCBieQorCSAgQ3Jpc3RpYW4gR2FmdG9uIDxnYWZ0b25AcmVkaGF0LmNvbT4sIHJlc3BvbmRpbmcgdG8gRHVuY2FuIFNpbXBzb24KKwkgIDxkcHNAaW8uc3RhcmdhdGUuY28udWs+KS4KKwkrIGFybTEwMCB0ZXJtaW5mbyBlbnRyaWVzIGZyb20gRGF2ZSBNaWxsZW4gPGRtaWxsQGdsb2JhbG5ldC5jby51az4pLgorCSsgcW54dDIgYW5kIG1pbml0ZWwgdGVybWluZm8gZW50cmllcyBmcm9tIGVzcidzIHZlcnNpb24uCisKKzk4MDcxOAorCSsgdXNlIC1SIG9wdGlvbiB3aXRoIGxkY29uZmlnIG9uIEZyZWVCU0QgYmVjYXVzZSBvdGhlcndpc2UgaXQgcmVzZXRzCisJICB0aGUgc2VhcmNoIHBhdGggdG8gL3Vzci9saWIgKHJlcG9ydGVkIGJ5IERhbiBOZWxzb24pLgorCSsgYWRkIC1zb25hbWUgb3B0aW9uIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcyBvbiBPcGVuQlNEIDIueAorCSAgKHJlcXVlc3QgYnkgUWluZ0xvbmcpLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb25zIC0td2l0aC1tYW5wYWdlLWZvcm1hdCBhbmQKKwkgIC0td2l0aC1tYW5wYWdlLXJlbmFtZXMgKHJlcXVlc3QgYnkgUWluZ0xvbmcpLgorCSsgY29ycmVjdCBjb252ZXJzaW9uIG9mIENBTkNFTExFRF9OVU1FUklDIGluIHdyaXRlX29iamVjdCgpLCB3aGljaCB3YXMKKwkgIG9taXR0aW5nIHRoZSBoaWdoLW9yZGVyIGJ5dGUsIHByb2R1Y2luZyBhIDI1NCBpbiB0aGUgY29tcGlsZWQKKwkgIHRlcm1pbmZvLgorCSsgbW9kaWZ5IHJldHVybi12YWx1ZXMgb2YgdGdldGZsYWcsIHRnZXRudW0sIHRnZXRzdHIsIHRpZ2V0ZmxhZywKKwkgIHRpZ2V0bnVtIGFuZCB0aWdldHN0ciB0byBiZSBjb21wYXRpYmxlIHdpdGggU29sYXJpcyAoZ2xlYW5lZCBmcm9tCisJICBEZWJpYW4gZGlzdHJpYnV0aW9uIG9mIDEuOS45Zy04LjgpLgorCSsgbW9kaWZ5IF9uY19zeXNlcnJfYWJvcnQgdG8gYWJvcnQgb25seSB3aGVuIGNvbXBpbGVkIGZvciBkZWJ1Z2dpbmcsCisJICBvdGhlcndpc2Ugc2ltcGx5IGV4aXQgd2l0aCBhbiBlcnJvci4KKworOTgwNzExCisJKyBtb2RpZnkgQWRhOTUgJ2dlbicgcHJvZ3JhbSB0byB1c2UgYXBwcm9wcmlhdGUgbGlicmFyeSBzdWZmaXggKGUuZy4sCisJICAiX2ciIGZvciBhIGRlYnVnIGJ1aWxkKS4KKwkrIHVwZGF0ZSBBZGE5NSAnbWFrZSBjbGVhbicgcnVsZSB0byBpbmNsdWRlIGdlbmVyaWNzIC5hbGkgZmlsZXMKKwkrIGFkZCBhIGNvbmZpZ3VyZSB0ZXN0IHRvIGVuc3VyZSB0aGF0IGlmIEdOQVQgaXMgZm91bmQsIHRoYXQgaXQgY2FuCisJICBjb21waWxlL2xpbmsgd29ya2luZyBBZGE5NSBwcm9ncmFtLgorCSsgZmx1c2ggb3V0cHV0IGluIGJlZXAgYW5kIGZsYXNoIGZ1bmN0aW9ucywgZml4aW5nIGEgcHJvYmxlbSB3aXRoCisJICBnZXRzdHIgKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KQorCSsgZml4IGVnY3MgMS4wLjIgd2FybmluZyBmb3IgZXRpcC5oIChwYXRjaCBieSBDaHJpcyBKb2hucykuCisJKyBjb3JyZWN0IGlmZGVmL2JyYWNlIG5lc3RpbmcgaW4gbGliX3NwcmludGYuYyAocGF0Y2ggYnkgQmVybmhhcmQKKwkgIFJvc2Vua3JhZW56ZXIgPGJlcm9AUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPikuCisJKyBjb3JyZWN0IHR5cG8gaW4gd2F0dHJfZ2V0IG1hY3JvIGZyb20gOTgwNTA5IGZpeGVzIChwYXRjaCBieSBEYW4KKwkgIE5lbHNvbikuCisKKzk4MDcwNAorCSsgbWVyZ2UgY2hhbmdlcyBmcm9tIGN1cnJlbnQgWEZyZWU4NiB4dGVybSB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAnLS13aXRob3V0LWFkYScuCisJKyBhZGQgYSBzbWFydC1kZWZhdWx0IGZvciB0ZXJtY2FwICdhYycgdG8gdGVybWluZm8gJ2Fjc19jaGFycycgd2hpY2gKKwkgIGNvcnJlc3BvbmRzIHRvIHZ0MTAwLgorCSsgY2hhbmdlIHRyYW5zbGF0aW9uIGZvciB0ZXJtY2FwICdycycgdG8gdGVybWluZm8gJ3JzMicsIHdoaWNoIGlzCisJICB0aGUgZG9jdW1lbnRlZCBlcXVpdmFsZW50LCByYXRoZXIgdGhhbiAncnMxJy4KKworOTgwNjI3CisJKyBzbG93ICd3b3JtJyBkb3duIGEgbGl0dGxlLCBmb3IgdmVyeSBmYXN0IG1hY2hpbmVzLgorCSsgY29ycmVjdGVkIGZpcnN0Y2hhci9sYXN0Y2hhciBjb21wdXRhdGlvbiBpbiBsaWJfaGxpbmUuYworCSsgc2ltcGxpZnkgc29tZSBleHByZXNzaW9ucyB3aXRoIENIQU5HRURfQ0VMTCwgQ0hBTkdFRF9SQU5HRSBhbmQKKwkgIENIQU5HRURfVE9fRU9MIG1hY3Jvcy4KKwkrIG1vZGlmeSBpbml0X3BhaXIgc28gdGhhdCBpZiBhIGNvbG9yLXBhaXIgaXMgcmVpbml0aWFsaXplZCwgd2Ugd2lsbAorCSAgcmVwYWludCB0aGUgYXJlYXMgb2YgdGhlIHNjcmVlbiB3aG9zZSBjb2xvciBjaGFuZ2VzLCBsaWtlIFNWcjQgY3Vyc2VzCisJICAocmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIE1hdXJlciA8bWF1cmVyQGluZi5mdS1iZXJsaW4uZGU+KS4KKwkrIG1vZGlmeSBnZXRzeXgvc2V0c3l4IG1hY3JvcyB0byBjb21wbHkgd2l0aCBTVnI0IG1hbi1wYWdlIHdoaWNoCisJICBzYXlzIHRoYXQgbGVhdmVvaygpIGFmZmVjdHMgdGhlaXIgYmVoYXZpb3IgKHJlcG9ydCBieSBEYXJyeWwgTWlsZXMsCisJICBwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisKKzk4MDYyMAorCSsgcmV2aWV3IHRlcm1pbmZvLjUgYWdhaW5zdCBTb2xhcmlzIDIuNiBjdXJzZXMgdmVyc2lvbiwgY29ycmVjdGVkCisJICBzZXZlcmFsIG1pbm9yIGVycm9ycy9vbWlzc2lvbnMuCisJKyBpbXBsZW1lbnQgdHBhcm0gJWwgZm9ybWF0LgorCSsgaW1wbGVtZW50IHRwYXJtIHByaW50Zi1zdHlsZSB3aWR0aCBhbmQgcHJlY2lzaW9uIGZvciAlcywgJWQsICV4LCAlbworCSAgYXMgcGVyIFhTSS4KKwkrIGltcGxlbWVudCB0cGFybSBkeW5hbWljIHZhcmlhYmxlcyAocmVwb3J0ZWQgYnkgWGlhb2RhbiBUYW5nKS4KKworOTgwNjEzCisJKyB1cGRhdGUgbWFuLXBhZ2UgZm9yIGZvciB3YXR0cl9zZXQsIHdhdHRyX2dldCAoY2Y6ICA5ODA1MDkpCisJKyBjb3JyZWN0IGxpbWl0cyBpbiBoYXNodGVzdCwgd2hpY2ggd291bGQgY2F1c2Ugbm9ucHJpbnRpbmcgY2hhcmFjdGVycworCSAgdG8gYmUgd3JpdHRlbiB0byBsYXJnZSBzY3JlZW5zLgorCSsgY29ycmVjdCBjb25maWd1cmUgc2NyaXB0LCB3aGVuIC0td2l0aG91dC1jeHggd2FzIHNwZWNpZmllZDogIHRoZQorCSAgd3JvbmcgdmFyaWFibGUgd2FzIHVzZWQgZm9yIGNmX2N2X3R5cGVfb2ZfYm9vbC4gIENvbXBpbGVycyB1cCB0byBnY2MKKwkgIDIuOCB0b2xlcmF0ZWQgdGhlIG1pc3NpbmcgJ2ludCcuCisJKyByZW1vdmUgdGhlIGhhcmRjb2RlZCBuYW1lICJnY2MiIGZvciB0aGUgR05VIEFkYSBjb21waWxlci4gIFRoZQorCSAgY29tcGlsZXIncyBuYW1lIG1pZ2h0IGJlIHNvbWV0aGluZyBsaWtlICJlZ2NzIiAocGF0Y2ggYnkgSnVlcmdlbgorCSAgUGZlaWZlcikuCisJKyBjb3JyZWN0IGN1cnNfYWRkY2guM3gsIHdoaWNoIGltcGxpZWQgdGhhdCBlY2hvY2hhciBjb3VsZCBkaXJlY3RseQorCSAgZGlzcGxheSBjb250cm9sIGNoYXJhY3RlcnMgKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIGZpeCB0eXBvcyBpbiBuY3Vyc2VzLWludHJvLmh0bWwgKHBhdGNoIGJ5IFNpZGlrIElzYW5pCisJICA8aXNhbmlAY2ZodC5oYXdhaWkuZWR1PikKKworOTgwNjA2CisJKyBhZGQgY29uZmlndXJlIHRlc3QgZm9yIGNvbmZsaWN0aW5nIHVzZSBvZiBleGNlcHRpb24gaW4gbWF0aC5oIGFuZAorCSAgb3RoZXIgaGVhZGVycy4KKwkrIG1pbm9yIG9wdGltaXphdGlvbiB0byAnaGFzaCgpJyBmdW5jdGlvbiBpbiBoYXNobWFwLmMsIHJlZHVjZXMgaXRzCisJICB0aW1lIGJ5IDEwJS4KKwkrIGNvcnJlY3QgZm9ybSBvZiBMRF9TSEFSRURfT1BUUyBmb3IgSFAtVVggMTAueCAocGF0Y2ggYnkgVGltIE1vb25leSkuCisJKyBmaXggbWlzc2luZyBxdW90ZXMgZm9yICdwcmludCcgaW4gTUt1bmN0cmwuYXdrIHNjcmlwdCAocmVwb3J0ZWQgYnkKKwkgIE1paGFpIEJ1ZGl1IDxtaWhhaWJAZ3M0MS5zcC5jcy5jbXUuZWR1PikuCisJPiBwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdjoKKwkrIGNvcnJlY3QgcHJvYmxlbSBvbiBTb2xhcmlzICh3aXRoIHBvbGwoKSBmdW5jdGlvbikgd2hlcmUgZ2V0Y2ggY291bGQKKwkgIGhhbmcgaW5kZWZpbml0ZWx5IGV2ZW4gaWYgdGltZW91dCh4KSB3YXMgY2FsbGVkLiAgVGhpcyB0dXJuZWQgb3V0IHRvCisJICBiZSBiZWNhdXNlIG1pbGxpc2Vjb25kcyB3YXMgbm90IHVwZGF0ZWQgYmVmb3JlICdnb3RvIHJldHJ5JyBpbgorCSAgX25jX3RpbWVkX3dhaXQuCisJKyBzaW1wbGlmaWVkIHRoZSBmdW5jdGlvbiBfbmNfdGltZWRfd2FpdCBhbmQgZml4ZWQgYW5vdGhlciBidWcsIHdoaWNoCisJICB3YXMgdGhlIGFzc3VtcHRpb24gb2YgIUdPT0RfU0VMRUNUICYmIEhBVkVfR0VUVElNRU9GREFZIGluICp0aW1lbGVmdAorCSAgYXNzaWdubWVudC4KKwkrIHJlbW92ZWQgdGhlIGN5Y2xlIG9uIEVJTlRSLCBhcyBpdCBzZWVtcyB0byBiZSB1c2VsZXNzLgorCis5ODA1MzAKKwkrIGFkZCBtYWtlZmlsZS1ydWxlIGZvciB0ZXN0L2tleW5hbWVzCisJKyBtb2RpZnkgcnVuX3RpYy5zaCBhbmQgc2hsaWIgdG8gZW5zdXJlIHRoYXQgdXNlcidzIC5wcm9maWxlIGRvZXMgbm90CisJICBvdmVycmlkZSB0aGUgJFBBVEggdXNlZCB0byBydW4gdGljIChwYXRjaCBieSBUaW0gTW9vbmV5KS4KKwkrIHJlc3RvcmUgTERfU0hBUkVEX09QVFMgdG8gJChMRF9TSEFSRURfRkxBR1MpIHdoZW4gbGlua2luZyBwcm9ncmFtcywKKwkgIG5lZWRlZCBmb3IgSFAtVVggc2hhcmVkLWxpYnJhcnkgcGF0aCAocmVjb21tZW5kZWQgYnkgVGltIE1vb25leSkuCisJKyByZW1vdmUgc3BlY2lhbCBjYXNlIG9mIEhQLVVYIC1MIG9wdGlvbnMsIHVzZSArYiBvcHRpb25zIHRvIGVtYmVkCisJICAkKGxpYmRpcikgaW4gdGhlIHNoYXJlZCBsaWJyYXJpZXMgKHJlY29tbWVuZGVkIGJ5IFRpbSBNb29uZXkpLgorCSsgYWRkIGNoZWNrcyBmb3Igc29tZSBwb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3dzIGFuZCB1bmNoZWNrZWQKKwkgIG1hbGxvYy9yZWFsbG9jL2NhbGxvYy9zdHJkdXAgcmV0dXJuIHZhbHVlcyAocGF0Y2ggYnkgVG9kZCBDIE1pbGxlcgorCSAgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+KQorCis5ODA1MjMKKwkrIGNvcnJlY3QgbWF4eC9tYXh5IGV4cHJlc3Npb24gZm9yIG51bV9jb2x1bW5zL251bV9saW5lcyBpbiBkZXJ3aW4KKwkgIChwYXRjaCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBhZGQgL3Vzci9zaGFyZS9saWIvdGVybWluZm8gYW5kIC91c3IvbGliL3Rlcm1pbmZvIGFzIGNvbXBhdGliaWx0eQorCSAgZmFsbGJhY2tzIHRvIF9uY19yZWFkX2VudHJ5KCksIGFsb25nIHdpdGggLS13aXRoLXRlcm1pbmZvLWRpcnMKKwkgIGNvbmZpZ3VyZSBvcHRpb24gKHN1Z2dlc3RlZCBieSBNaWtlIEhvcGtpcmspLgorCSsgbW9kaWZ5IGNvbmZpZy5ndWVzcyB0byByZWNvZ25pemUgVW5peHdhcmUgMi4xIGFuZCA3IChwYXRjaCBieSBNaWtlCisJICBIb3BraXJrIDxob3BzQHNjby5jb20+KS4KKwkrIHN1cHByZXNzIGRlZmluaXRpb24gb2YgQ0NfU0hBUkVEX09QVFMgaW4gTERGTEFHU19TSEFSRUQgaW4gYysrCisJICBNYWtlZmlsZS5pbiwgc2luY2UgdGhpcyBjb25mbGljdHMgd2hlbiBnKysgaXMgdXNlZCB3aXRoIEhQLVVYCisJICBjb21waWxlciAocmVwb3J0ZWQgYnkgVGltIE1vb25leSkuCisJKyBwYXJlbnRoZXNpemUgJ3N0cmNweScgY2FsbHMgaW4gYysrIGJpbmRpbmcgdG8gd29ya2Fyb3VuZCByZWRlZmluaXRpb24KKwkgIGluIHNvbWUgQysrIGltcGxlbWVudGF0aW9ucyAocmVwb3J0ZWQgYnkgc2V2ZXJhbCBwZW9wbGUgcnVubmluZworCSAgZWdjcyB3aXRoIGdsaWJjIDIuMC45MywgYW5hbHlzaXMgYnkgQW5kcmVhcyBKYWVnZXIuCisKKzk4MDUxNgorCSsgbW9kaWZ5IHdyaXRlX2VudHJ5LmMgc28gdGhhdCBpdCB3aWxsIG5vdCBhdHRlbXB0IHRvIGxpbmsgYWxpYXNlcworCSAgd2l0aCBlbWJlZGRlZCAnLycsIGJ1dCBnaXZlIG9ubHkgYSB3YXJuaW5nLgorCSsgcHV0IC1MJChsaWJkaXIpIGZpcnN0IHdoZW4gbGlua2luZyBwcm9ncmFtcywgZXhjZXB0IGZvciBIUC1VWC4KKwkrIG1vZGlmeSBjb21wX3NjYW4uYyB0byBoYW5kbGUgU1ZyNCB0ZXJtaW5mbyBkZXNjcmlwdGlvbiBmb3IgYXR0NDc3LAorCSAgd2hpY2ggY29udGFpbnMgYSBjb2xvbiBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBzdXBwb3J0IFNDTyBvc3I1LjAuNSBzaGFyZWQgbGlicmFyaWVzLAorCSAgZnJvbSBjb21wLnVuaXguc2NvLnByb2dyYW1tZXIgbmV3c2dyb3VwIGl0ZW0gKE1pa2UgSG9wa2lyaykuCisJKyBlbGltaW5hdGUgZXh0cmEgR29UbyBjYWxsIGluIGxpYl9kb3VwZGF0ZS5jIChwYXRjaCBieSBBbGV4YW5kZXIgVi4KKwkgIEx1a3lhbm92KS4KKwkrIG1pbm9yIGFkanVzdG1lbnRzIG9mIGNvbnN0L05DVVJTRVNfQ09OU1QgZnJvbSBJUklYIGNvbXBpbGUuCisJKyBhZGQgdXBkYXRlcyBiYXNlZCBvbiBlc3IncyA5ODA1MDkgdmVyc2lvbiBvZiB0ZXJtaW5mby5zcmMuCisKKzk4MDUwOQorCSsgY29ycmVjdCBtYWNyb3MgZm9yIHdhdHRyX3NldCwgd2F0dHJfZ2V0LCBzZXBhcmF0ZSB3YXR0cnNldCBtYWNybyBmcm9tCisJICB0aGVzZSB0byBwcmVzZXJ2ZSBiZWhhdmlvciB0aGF0IGFsbG93cyBhdHRyaWJ1dGVzIHRvIGJlIGNvbWJpbmVkIHdpdGgKKwkgIGNvbG9yIHBhaXIgbnVtYmVycy4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLW5vLXBhZGRpbmcsIHRvIGFsbG93IGVudmlyb25tZW50CisJICB2YXJpYWJsZSAkTkNVUlNFU19OT19QQURESU5HIHRvIGVsaW1pbmF0ZSBub24tbWFuZGF0b3J5IHBhZGRpbmcsCisJICB0aGVyZWJ5IG1ha2luZyB0ZXJtaW5hbCBlbXVsYXRvcnMgKGUuZy4sIGZvciB2dDEwMCkgYSBsaXR0bGUgbW9yZQorCSAgZWZmaWNpZW50IChyZXF1ZXN0IGJ5IERhbmllbCBFaXNlbmJ1ZCA8ZWlzZW5idWRAY3Muc3dhcnRobW9yZS5lZHU+KS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGVtYmVkIEFCSSBpbiBzaGFyZWQgbGlicmFyaWVzIGZvciBIUC1VWAorCSAgMTAueCAoZGV0YWlsZWQgcmVxdWVzdCBieSBUaW0gTW9vbmV5KS4KKwkrIGFkZCB0ZXN0L2V4YW1wbGUgb2YgdGhlICdmaWx0ZXIoKScgZnVuY3Rpb24uCisJKyBhZGQgbnh0ZXJtIGFuZCB4dGVybS1jb2xvciB0ZXJtaW5mbyBkZXNjcmlwdGlvbiAocmVxdWVzdCBieSBDcmlzdGlhbgorCSAgR2FmdG9uIDxnYWZ0b25AcmVkaGF0LmNvbT4pLgorCSsgbW9kaWZ5IHJ4dnQgdGVybWluZm8gZGVzY3JpcHRpb24gdG8gY2xlYXIgYWx0ZXJuYXRlIHNjcmVlbiBiZWZvcmUKKwkgIHN3aXRjaGluZyBiYWNrIHRvIG5vcm1hbCBzY3JlZW4sIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYXBwbGljYXRpb25zCisJICB3aGljaCB1c2UgeHRlcm0gKHJlcG9ydGVkIGJ5IE1hbm9qIEthc2ljaGFpbnVsYSA8bWFub2prQGlvLmNvbT4pLgorCSsgbW9kaWZ5IGxpbnV4IHRlcm1pbmZvIGRlc2NyaXB0aW9uIHRvIHJlc2V0IGNvbG9yIHBhbGV0dGUgKHJlcG9ydGVkCisJICBieSBUZWxmb3JkIFRlbmR5cyA8dGVsZm9yZEBlbmcudXRzLmVkdS5hdT4pLgorCSsgY29ycmVjdGlvbiB0byBkb3VwZGF0ZSwgZm9yIGNhc2Ugd2hlcmUgdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydAorCSAgaW5zZXJ0L2RlbGV0ZSBjaGFyYWN0ZXIuICBUaGUgbG9naWMgZGlkIG5vdCBjaGVjayB0aGF0IHRoZXJlIHdhcyBhCisJICBkaWZmZXJlbmNlIGluIGFsaWdubWVudCBvZiBjaGFuZ2VzIHRvIG9sZC9uZXcgc2NyZWVucyBiZWZvcmUKKwkgIHJlcGFpbnRpbmcgdGhlIHdob2xlIG5vbi1ibGFuayBwb3J0aW9uIG9mIHRoZSBsaW5lLiAgTW9kaWZpZWQgdG8gZmFsbAorCSAgdGhyb3VnaCBpbnRvIGxvZ2ljIHRoYXQgcmVkdWNlcyBieSB0aGUgcG9ydGlvbiB3aGljaCBkb2VzIG5vdCBkaWZmZXIKKwkgIChyZXBvcnRlZCBieSBEYW5pZWwgRWlzZW5idWQgPGVpc2VuYnVkQGNzLnN3YXJ0aG1vcmUuZWR1PikuCisJKyBtaW5vciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB0byB3bm91dHJlZnJlc2ggYnkgbW92aW5nIHNvbWUKKwkgIGNvbXBhcmlzb25zIG91dCBvZiBpbm5lciBsb29wLgorCis5ODA0MjUKKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHN1YnN0aXR1dGUgTkNVUlNFU19DT05TVCBpbiBjdXJzZXMuaAorCSsgdXBkYXRlZCB0ZXJtaW5mbyBlbnRyaWVzIGZvciB4dGVybS14Zjg2LXY0MCwgeHRlcm0tMTZjb2xvciwKKwkgIHh0ZXJtLThiaXQgdG8gY29ycmVzcG9uZCB0byBYRnJlZTg2IDMuOUFnLgorCSsgcmVtb3ZlIHJlc3RyaWN0aW9uIHRoYXQgZm9yY2VzIG5jdXJzZXMgdG8gdXNlIHNldGFmL3NldGFiIGlmIHRoZQorCSAgbnVtYmVyIG9mIGNvbG9ycyBpcyBncmVhdGVyIHRoYW4gOC4gIChzZWUgOTcwNTI0IGZvciB4dGVybS0xNmNvbG9yKS4KKwkrIGNoYW5nZSBvcmRlciBvZiAtTCBvcHRpb25zIChzbyB0aGF0ICQobGliZGlyKSBpcyBzZWFyY2hlZCBmaXJzdCkgd2hlbgorCSAgbGlua2luZyB0aWMgYW5kIG90aGVyIHByb2dyYW1zLCB0byB3b3JrYXJvdW5kIEhQJ3MgbGlua2VyLgorCSAgT3RoZXJ3aXNlLCB0aGUgLUwuLi9saWIgaXMgZW1iZWRkZWQgd2hlbiBsaW5raW5nIGFnYWluc3Qgc2hhcmVkCisJICBsaWJyYXJpZXMgYW5kIHRoZSBpbnN0YWxsZWQgcHJvZ3JhbSBkb2VzIG5vdCBydW4gKHJlcG9ydGVkIGJ5IFJhbGYKKwkgIEhpbGRlYnJhbmR0KS4KKwkrIG1vZGlmeSBjb25maWd1cmF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gRGlnaXRhbCBVbml4IHNvIHRoYXQKKwkgIHZlcnNpb25pbmcgaXMgZW1iZWRkZWQgaW4gdGhlIGxpYnJhcnksIHJhdGhlciB0aGFuIGltcGxpZWQgYnkKKwkgIGxpbmtzIChwYXRjaCBieSBUaW0gTW9vbmV5KS4KKworOTgwNDE4CisJKyBtb2RpZnkgZXRpcC5oIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggbWF0aC5oIG9uIEhQLVVYIDkuMDMgd2l0aCBnY2MKKwkgIDIuOC4xIHdoaWNoIHJlZGVmaW5lcyAnZXhjZXB0aW9uJyAocmVwb3J0ZWQgYnkgUmFsZiBIaWxkZWJyYW5kdAorCSAgPFIuSGlsZGVicmFuZHRAdHUtYnMuZGU+KS4KKwkrIGNvcnJlY3QgY29uZmlndXJlIHRlc3RzIGluIENGX1NIQVJFRF9PUFRTIHdoaWNoIHVzZWQgJENDIHZhbHVlIHRvCisJICBjaGVjayBmb3IgZ2NjLCByYXRoZXIgdGhhbiBhdXRvY29uZidzICRHQ0MgdmFsdWUuICBUaGlzIGRpZCBub3QKKwkgIHdvcmsgcHJvcGVybHkgaWYgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGNvbXBpbGVyIHdlcmUgZ2l2ZW4KKwkgIChyZXBvcnRlZCBieSBNaWNoYWVsIFlvdW50IDx5b3VudEBjc2YuQ29sb3JhZG8uZWR1PikuCisJKyByZXZpc2UgY2hlY2sgZm9yIGNvbXBpbGVyIG9wdGlvbnMgdG8gZm9yY2UgQU5TSSBtb2RlIHNpbmNlIHJlcGVhdGluZworCSAgYW4gb3B0aW9uIHN1Y2ggYXMgLUFhIGNhdXNlcyBIUCdzIGNvbXBpbGVyIHRvIGZhaWwgb24gaXRzIG93biBoZWFkZXJzCisJICAocmVwb3J0ZWQgYnkgQ2xpbnQgT2xzZW4gPG9sc2VuY0BpY2hpcHMuaW50ZWwuY29tPikuCisKKzk4MDQxMQorCSsgaWZkZWYnZCBoYXNfa2V5KCkgYW5kIG1jcHJpbnQoKSBhcyBleHRlbmRlZCBmdW5jdGlvbnMuCisJKyBtb2RpZmllZCBzZXZlcmFsIHByb3RvdHlwZXMgdG8gY29ycmVzcG9uZCB3aXRoIDE5OTcgdmVyc2lvbiBvZgorCSAgWC9PcGVuIEN1cnNlcyAoYWZmZWN0cyBBQkkgc2luY2UgZGV2ZWxvcGVycyBoYXZlIHVzZWQgYXR0cl9nZXQpLgorCSsgcmVtb3ZlIHNwdXJpb3VzIHRyYWlsaW5nIGJsYW5rcyBpbiBnbGliYyBhZGRvbi1zY3JpcHRzIChwYXRjaCBieQorCSAgSC5KLkx1KS4KKwkrIGluc2VydCBhIGZldyBicmFjZXMgYXQgbG9jYXRpb25zIHdoZXJlIGdjYy0yLjgueCBhc2tzIHRvIHVzZSB0aGVtIHRvCisJICBhdm9pZCBhbWJpZ291cyBlbHNlJ3MsIHVzZSAtZnBpYyByYXRoZXIgdGhhbiAtZlBJQyBmb3IgTGludXggKHBhdGNoCisJICBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCis5ODA0MDQKKwkrIHNwbGl0IFNITElCX0xJU1QgaW50byBTSExJQl9ESVJTL1NITElCX0xJU1QgdG8ga2VlcCAtTCBvcHRpb25zCisJICBiZWZvcmUgLWwgdG8gYWNjb21tb2RhdGUgU29sYXJpcycgbGlua2VyIChyZXBvcnRlZCBieSBMYXJyeSBWaXJkZW4pLgorCis5ODAzMjgKKwkrIG1vZGlmeSBsaWJfY29sb3IuYyB0byBlbGltaW5hdGUgZGVwZW5kZW5jeSBvbiBvcmlnX2NvbG9ycyBhbmQKKwkgIG9yaWdfcGFpciwgc2luY2UgU1ZyNCBjdXJzZXMgZG9lcyBub3QgcmVxdWlyZSB0aGVzZSBlaXRoZXIsIGJ1dAorCSAgdXNlcyB0aGVtIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlLgorCSsgYWRkIGRldGFpbGVkIHVzYWdlLW1lc3NhZ2UgdG8gaW5mb2NtcC4KKwkrIGNvcnJlY3QgYSB0eXBvIGluIGF0dDYzODYgZW50cnkgKGEgIiU/IiB3aGljaCB3YXMgIj8iKS4KKwkrIGFkZCAtZiBvcHRpb24gdG8gaW5mb2NtcCBhbmQgdGljLCB3aGljaCBmb3JtYXRzIHRoZSB0ZXJtaW5mbworCSAgaWYvdGhlbi9lbHNlL2VuZGlmIHNvIHRoYXQgdGhleSBhcmUgcmVhZGFibGUgKHdpdGggbmV3bGluZXMgYW5kCisJICB0YWJzKS4KKwkrIGZpeGVzIGZvciBnbGliYyBhZGRvbiBzY3JpcHRzIChwYXRjaCBieSBILkouTHUpLgorCis5ODAzMjEKKwkrIHJldmlzZSBjb25maWd1cmUgbWFjcm8gQ0ZfU1BFRURfVFlQRSBzbyB0aGF0IHRlcm1jYXAuaCBoYXMgc3BlZWRfdAorCSAgZGVjbGFyZWQgKGZyb20gQWRhbSBKIFJpY2h0ZXIgPGFkYW1AeWdnZHJhc2lsLmNvbT4pCisJKyByZW1vdmUgc3B1cmlvdXMgY3Vyc19zZXQoKSBjYWxsIGZyb20gbGVhdmVvaygpIChKIFQgQ29ua2xpbikuCisJKyBjb3JyZWN0ZWQgaGFuZGxpbmcgbGVhdmVvaygpIGluIGRvdXBkYXRlKCkgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLgorCSAgTHVreWFub3YpLgorCSsgaW1wcm92ZWQgdmVyc2lvbiBvZiB3cmVkcmF3bG4gKHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyBjb3JyZWN0IGMrKy9NYWtlZmlsZS5pbiBzbyBpbnN0YWxsIHRhcmdldCBkbyBub3QgaGF2ZSBlbWJlZGRlZCAuLi9saWIKKwkgIHRvIGNvbmZ1c2UgaXQgKHBhdGNoIGJ5IFRob21hcyBHcmFmIDxncmFmQGVzc2kuZnI+KS4KKwkrIGFkZCB3YXJuaW5nIHRvIHByZWluc3RhbGwgcnVsZSB3aGljaCBjaGVja3MgaWYgdGhlIGluc3RhbGxlciB3b3VsZAorCSAgb3ZlcndyaXRlIGEgY3Vyc2VzLmggb3IgdGVybWNhcC5oIHRoYXQgaXMgbm90IGRlcml2ZWQgZnJvbSBuY3Vyc2VzLgorCSAgKFRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIGZvciBkZXZlbG9wZXJzIHdobyBuZWVkIGJvdGggaXMgdG8KKwkgIHVzZSAtLWRpc2FibGUtb3ZlcndyaXRlKS4KKwkrIG1vZGlmeSBwcmVpbnN0YWxsIHJ1bGUgaW4gdG9wLWxldmVsIE1ha2VmaWxlIHRvIGF2b2lkIGltcGxpY2l0CisJICB1c2Ugb2YgJ3NoJywgdG8gYWNjb21tb2RhdGUgVWx0cml4IDQuNCAocmVwb3J0ZWQgYnkgSm9hbyBQYWxob3RvCisJICBNYXRvcyA8am1hdG9zQG1hdGguaXN0LnV0bC5wdD4sIHBhdGNoIGJ5IFRob21hcyBFc3NlcgorCSAgPHRlQGluZm9ybWF0aWsudW5pLWhhbm5vdmVyLmRlPikKKwkrIHJlZmluZSBpZmRlZidzIGZvciBUUkFDRSBzbyB0aGF0IGxpYm5jdXJzZXMgaGFzIGZld2VyIGRlcGVuZGVuY2llcworCSAgb24gbGlidGluZm8gd2hlbiBUUkFDRSBpcyBkaXNhYmxlZC4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHNvIHRoYXQgaWYgdGhlIC0td2l0aC10ZXJtbGliIG9wdGlvbiBpcyB1c2VkCisJICB0byBnZW5lcmF0ZSBhIHNlcGFyYXRlIHRlcm1pbmZvIGxpYnJhcnksIHdlIGNoYWluIGl0IHRvIHRoZSBuY3Vyc2VzCisJICBsaWJyYXJ5IHdpdGggYSAiLWwiIG9wdGlvbiAocmVwb3J0ZWQgYnkgRGFycnlsIE1pbGVzIGFuZCBJYW4gVC4KKwkgIFppbW1lcm1hbikuCisKKzk4MDMxNAorCSsgY29ycmVjdCBsaW1pdHMgYW5kIHdpbmRvdyBpbiB3cmVkcmF3bG4gZnVuY3Rpb24gKHJlcG9ydGVkL2FuYWx5c2lzIGJ5CisJICBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgY29ycmVjdCBzZWQgZXhwcmVzc2lvbiBpbiBjb25maWd1cmUgc2NyaXB0IGZvciAtLXdpdGgtZmFsbGJhY2sKKwkgIG9wdGlvbiAocGF0Y2ggYnkgSmVzc2UgVGhpbG8pLgorCSsgY29ycmVjdCBzb21lIHBsYWNlcyBpbiBjb25maWd1cmUgc2NyaXB0IHdoZXJlICRlbmFibGV2YWwgd2FzIHVzZWQKKwkgIHJhdGhlciB0aGFuICR3aXRodmFsIChwYXRjaCBieSBEYXJyeWwgTWlsZXMgPGRsbUBnN2xlZC5kZW1vbi5jby51az4pLgorCSsgbW9kaWZ5IHNvbWUgbWFuLXBhZ2VzIHNvIG5vICcuJyBvciAnLi4nIGZhbGxzIGJldHdlZW4gVEggYW5kIFNICisJICBtYWNyb3MsIHRvIGFjY29tbW9kYXRlIG1hbl9kYiBwcm9ncmFtIChyZXBvcnRlZCBieSBJYW4gVC4gWmltbWVybWFuCisJICA8aXR6QHJhaHVsLm5ldD4pLgorCSsgdGVybWluZm8uc3JjIDEwLjIuMSBkb3dubG9hZGVkIGZyb20gRVNSJ3Mgd2VicGFnZSAoRVNSKS4KKwk+IHNldmVyYWwgY2hhbmdlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBhZGQgY29weXJpZ2h0IG5vdGljZXMgKGFuZCByY3MgaWQncykgb24gcmVtYWluaW5nIG1hbi1wYWdlcy4KKwkrIGNvcnJlY3RlZCBwcm90b3R5cGVzIGZvciBzbGtfKiBmdW5jdGlvbnMsIHVzaW5nIGNodHlwZSByYXRoZXIgdGhhbgorCSAgYXR0cl90LgorCSsgaW1wbGVtZW50ZWQgdGhlIHdjb2xvcl9zZXQoKSBhbmQgc2xrX2NvbG9yKCkgZnVuY3Rpb25zCisJKyB0aGUgc2xrX2F0dHJfe3NldCxvZmYsb259IGZ1bmN0aW9ucyBuZWVkIGFuIGFkZGl0aW9uYWwgdm9pZCoKKwkgIHBhcmFtZXRlciBhY2NvcmRpbmcgdG8gWFNJLgorCSsgZml4IHRoZSBDKysgYW5kIEFkYTk1IGJpbmRpbmcgYXMgd2VsbCBhcyB0aGUgbWFuIHBhZ2VzIHRvCisJICByZWZsZWN0IGFib3ZlIGVuaGFuY2VtZW50cy4KKworOTgwMzA3CisJKyB1c2UgJ3N0YXQoKScgcmF0aGVyIHRoYW4gJ2FjY2VzcygpJyBpbiB0b2UuYyB0byBjaGVjayBmb3IgdGhlCisJICBleGlzdGVuY2Ugb2YgJEhPTUUvLnRlcm1pbmZvLCBzaW5jZSBpdCBtYXkgYmUgYSBmaWxlLgorCSsgc3VwcHJlc3MgY29uZmlndXJlIENGX0NYWF9MSUJSQVJZIGNoZWNrIGlmIHdlIGFyZSBub3QgdXNpbmcgZysrCisJICAyLjcueCwgc2luY2UgdGhpcyBpcyBub3QgbmVlZGVkIHdpdGggZysrIDIuOCBvciBlZ2NzIChwYXRjaCBieQorCSAgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIHR1cm4gb24gaGFzaG1hcCBzY3JvbGxpbmcgY29kZSBieSBkZWZhdWx0LCBpbnRlbmQgdG8gcmVtZWR5IGRlZmVjdHMKKwkgIGJ5IDQuMyByZWxlYXNlLgorCSsgbWlub3IgY29ycmVjdGlvbnMgdG8gdGVybWluZm8uc3JjIGNoYW5nZWxvZy4KKworOTgwMzAyCTQuMiByZWxlYXNlIGZvciB1cGxvYWQgdG8gcHJlcC5haS5taXQuZWR1CisJKyBjb3JyZWN0IEZsb3JpYW4ncyBlbWFpbCBhZGRyZXNzIGluIG5jdXJzZXMtaW50cm8uaHRtbAorCSsgdGVybWluZm8uc3JjIDEwLjIuMCAoRVNSKS4KKworOTgwMjI4CXByZS1yZWxlYXNlCisJKyBhZGQgbGludXgta29pOHIgcmVwbGFjZSBsaW51eC1rb2k4LCB3aGljaCBpcyBub3QgS09JOCAocGF0Y2ggYnkKKwkgIFFpbmdMb25nIDxxaW5nbG9uZ0BCb2xpem0uaWhlcC5zdT4pLgorCSsgbWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcyAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGFkZCBzZXRsb2NhbGUoKSBjYWxsIHRvIG5jdXJzZXMuYyAocmVwb3J0ZWQgYnkgQ2xhZXMgRy4gTGluZGJsYWQKKwkgIDxjbGFlc2dAYWxnb25ldC5zZT4pLgorCSsgY29ycmVjdCBzaWduLWV4dGVuc2lvbiBpbiBsaWJfaW5zc3RyLmMgKHJlcG9ydGVkIGJ5IFNvdGlyaXMKKwkgIFZhc3NpbG9wb3Vsb3MgPHN2YXNAbGVvbi5ucmNwcy5hcmlhZG5lLXQuZ3I+KQorCis5ODAyMjEJcHJlLXJlbGVhc2UKKwkrIHJlZ2VuZXJhdGVkIHNvbWUgZG9jdW1lbnRhdGlvbiBvdmVybG9va2VkIGluIDk4MDIxNCBwYXRjaAorCSAgKG5jdXJzZXMtaW50cm8uZG9jLCBjdXJzX291dG9wdHMuM3guaHRtbCkKKwkrIG1pbm9yIGlmZGVmIGNoYW5nZSB0byBDKysgYmluZGluZyB0byB3b3JrIHdpdGggZ2NjIDIuOC4wIChwYXRjaCBieQorCSAgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGNoYW5nZSBtYWludGFpbmVyJ3MgbWFpbGluZyBhZGRyZXNzIHRvIGZsb3JpYW5AZ251Lm9yZywgY2hhbmdlCisJICB0ZW50YXRpdmUgbWFpbGluZyBsaXN0IGFkZHJlc3MgdG8gYnVnLW5jdXJzZXMtcmVxdWVzdEBnbnUub3JnIChwYXRjaAorCSAgYnkgRmxvcmlhbiBMYSBSb2NoZSkuCisJKyBhZGQgZGVmaW5pdGlvbiBvZiAkKFJFTF9WRVJTSU9OKSB0byBjKysvTWFrZWZpbGUuaW4gKHJlcG9ydGVkIGJ5IEdyYW4KKwkgIEhhc3NlIDxnaEByYWRpdGV4LnNlPikuCisJKyByZXN0b3JlIHZlcnNpb24gbnVtYmVycyB0byBBZGE5NSBiaW5kaW5nLCBhY2NpZGVudGFsbHkgZGVsZXRlZCBieQorCSAgY29weXJpZ2h0IHBhdGNoIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCis5ODAyMTQJcHJlLXJlbGVhc2UKKwkrIHJlbW92ZSBuY3Vyc2VzLmxzbSBmcm9tIE1BTklGRVNUIHNvIHRoYXQgaXQgd29uJ3QgYmUgdXNlZCBpbiBGU0YKKwkgIGRpc3RyaWJ1dGlvbnMsIHRob3VnaCBpdCBpcyByZXRhaW5lZCBpbiBkZXZlbG9wbWVudC4KKwkrIGNvcnJlY3Qgc2NhbGluZyBvZiBtaWxsaXNlY29uZHMgdG8gbmFub3NlY29uZHMgaW4gbGliX25hcG1zLmMgKHBhdGNoCisJICBieSBKZXJlbXkgQnVobGVyKS4KKwkrIHVwZGF0ZSBtYWlsaW5nLWxpc3QgaW5mb3JtYXRpb24gKGJ1Zy1uY3Vyc2VzQGdudS5vcmcpLgorCSsgdXBkYXRlIGFubm91bmNlbWVudCBmb3IgdXBjb21pbmcgNC4yIHJlbGVhc2UuCisJKyBtb2RpZnkgLWxtIHRlc3QgdG8gY2hlY2sgZm9yICdzaW4oKScgcmF0aGVyIHRoYW4gJ2Zsb29yKCknCisJKyByZW1vdmUgc3B1cmlvdXMgY29tbWFzIGZyb20gdGVybWluZm8uc3JjIGRlc2NyaXB0aW9ucy4KKwkrIGNoYW5nZSBjb3B5cmlnaHQgbm90aWNlcyB0byBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKworOTgwMjA3CisJKyBtaW5vciBmaXhlcyBmb3IgYXV0b2NvbmYgbWFjcm9zIENGX0VSUk5PLCBDRl9IRUxQX01FU1NBR0UgYW5kCisJICBDRl9TSVpFQ0hBTkdFCisJKyBtb2RpZnkgTWFrZWZpbGUuZ2xpYmMgc28gdGhhdCAkKG9ianBmeCkgaXMgZGVmaW5lZCAoSC5KLkx1KS4KKwkrIGlmZGVmLW91dCB0cnVlLXJldHVybiBmcm9tIF9uY19tb3VzZV9pbmxpbmUoKSB3aGljaCBkZXBlbmRzIG9uCisJICBtZXJnZSBvZiBRTlggcGF0Y2ggKHBlbmRpbmcgNC4yIHJlbGVhc2UpLgorCT4gcGF0Y2ggdG8gc3BsaXQgb2ZmIHNlbGRvbS11c2VkIG1vZHVsZXMgaW4gbmN1cnNlcyAoSiBUIENvbmtsaW4pOgorCSAgVGhpcyByZWR1Y2VzIHNpemUgYnkgdXAgdG8gMi42a2IuCisJKyBtb3ZlIGZ1bmN0aW9uYWxpdHkgb2YgX25jX3VzbGVlcCBpbnRvIG5hcG1zLCBhZGQgY29uZmlndXJhdGlvbiBjYXNlCisJICBmb3IgbmFub3NsZWVwKCkuCisJKyBtb3ZlZCB3Y2hnYXQoKSBmcm9tIGxpYl9hZGRjaC5jIHRvIGxpYl9jaGdhdC5jCisJKyBtb3ZlZCBjbGVhcm9rKCksIGltbWVkb2soKSwgbGVhdmVvaygpLCBhbmQgc2Nyb2xsb2soKSBmcm9tCisJICBsaWJfb3B0aW9ucy5jIHRvIGxpYl9jbGVhcm9rLmMsIGxpYl9pbW1lZG9rLmMsIGxpYl9sZWF2ZW9rLmMgYW5kCisJICBsaWJfc2Nyb2xsb2suYy4KKwkrIG1vdmVkIG5hcG1zKCkgZnJvbSBsaWJfa2VybmVsLmMgdG8gbGliX25hcG1zLmMKKwkrIG1vdmVkIGVjaG8oKSBhbmQgbm9lY2hvKCkgZnJvbSBsaWJfcmF3LmMgdG8gbGliX2VjaG8uYworCSsgbW92ZWQgbmwoKSBhbmQgbm9ubCgpIGZyb20gbGliX3Jhdy5jIHRvIGxpYl9ubC5jCisKKzk4MDEzMQorCSsgY29ycmVjdGVkIGNvbnZlcnNpb24gaW4gdGNsb2NrLmMgKGNmOiA5NzEwMTgpLgorCSsgdXBkYXRlcyB0byBNYWtlZmlsZS5nbGliYyBhbmQgYXNzb2NpYXRlZCBMaW51eCBjb25maWd1cmUgc2NyaXB0CisJICAocGF0Y2ggYnkgSC5KLkx1KS4KKwkrIHdvcmthcm91bmQgYSBxdW90aW5nIHByb2JsZW0gb24gU3VuT1Mgd2l0aCB0YXItY29weS5zaAorCSsgY29ycmVjdCBpbml0X3BhaXIoKSBjYWxscyBpbiB3b3JtLmMgdG8gd29yayB3aGVuIHVzZV9kZWZhdWx0X2NvbG9ycygpCisJICBpcyBub3QgYXZhaWxhYmxlLgorCSsgaW5jbHVkZSA8c3lzL3R5cGVzLmg+IGluIENGX1NZU19USU1FX1NFTEVDVCB0byB3b3JrIHdpdGggRnJlZUJTRAorCSAgMi4xLjUKKwkrIGFkZCBuY3YgY2FwYWJpbGl0eSB0byBGcmVlQlNEIGNvbnNvbGUgKGNvbnMyNXcpLCBtYWtpbmcgcmV2ZXJzZQorCSAgd29yayB3aXRoIGNvbG9yLgorCSsgY29ycmVjdCBzZW5zZSBvZiBjb25maWd1cmUtdGVzdCBmb3Igc3lzL3RpbWUuaCBpbmNsdXNpb24gd2l0aAorCSAgc3lzL3NlbGVjdC5oCisJKyBmaXhlcyBmb3IgQWRhOTUvYWRhX2luY2x1ZGUvTWFrZWZpbGUuaW4gdG8gd29yayB3aXRoIC0tc3JjZGlyIG9wdGlvbi4KKwkrIHJlbW92ZSB1bnVzZWQvb2Jzb2xldGUgdGVzdC1wcm9ncmFtIHJ1bGVzIGZyb20gcHJvZ3MvTWFrZWZpbGUuaW4KKwkgICh0aGUgcnVsZXMgaW4gbmN1cnNlcy9NYWtlZmlsZS5pbiB3b3JrKS4KKwkrIHJlbW92ZSBzaGFyZWQtbGlicmFyeSBsb2FkZXIgZmxhZ3MgZnJvbSB0ZXN0L01ha2VmaWxlLmluLCBldGMuCisJKyBzaW1wbGlmeSB0ZXN0L2NvbmZpZ3VyZS5pbiB1c2luZyBuZXcgdmVyc2lvbiBvZiBhdXRvY29uZiB0byBjcmVhdGUKKwkgIHRlc3QvbmN1cnNlc19jZmcuaAorCSsgc3VwcHJlc3Mgc3VmZml4IHJ1bGVzIGluIHRlc3QvTWFrZWZpbGUuaW4sIHByb3ZpZGUgZXhwbGljaXQKKwkgIGRlcGVuZGVuY3kgdG8gd29yayB3aXRoIC0tc3JjZGlyIG9wdGlvbiBhbmQgbGVzcyBjYXBhYmxlICdtYWtlJworCSAgcHJvZ3JhbXMuCisJPiBhZGFwdGVkIGZyb20gcGF0Y2ggZm9yIFFOWCBieSBYaWFvZGFuIFRhbmc6CisJKyBpbml0aWFsaXplICVQIGFuZCAlZyB2YXJpYWJsZXMgc2V0L3VzZWQgaW4gdHBhcm0sIGFuZCBhbHNvIGVuc3VyZQorCSAgdGhhdCBlbXB0eSBzdHJpbmdzIGRvbid0IHJldHVybiBhIG51bGwgcmVzdWx0IGZyb20gdHBhcmFtX2ludGVybmFsCisJKyBhZGQgUU5YLXNwZWNpZmljIHByb3RvdHlwZSBmb3IgdnNzY2FuZigpCisJKyBtb3ZlIGluaXRpYWxpemF0aW9uIG9mIFNQLT5fa2V5dHJ5IGZyb20gaW5pdF9rZXl0cnkoKSB0byBuZXd0ZXJtKCkgdG8KKwkgIGF2b2lkIHJlc2V0dGluZyBpdCB2aWEgYSBrZXlvaygpIGNhbGwgYnkgbW91c2VfYWN0aXZhdGUoKS4KKwkrIHJlb3JnYW5pemVkIHNvbWUgZnVuY3Rpb25zIGluIGxpYl9tb3VzZSgpIHRvIHVzZSBjYXNlLXN0YXRlbWVudHMuCisJKyByZW1vdmUgc2dyIHN0cmluZyBmcm9tIHFueCB0ZXJtaW5mbyBlbnRyeSBzaW5jZSBpdCBpcyByZXBvcnRlZCB0bworCSAgdHVybiBvZmYgYXR0cmlidXRlcyBpbmNvbnNpc3RlbnRseS4KKworOTgwMTI0CisJKyBhZGQgZi9GL2IvQiBjb21tYW5kcyB0byBuY3Vyc2VzICdiJyB0ZXN0IHRvIHRvZ2dsZSBjb2xvcnMsIHByb3ZpZGluZworCSAgdGVzdCBmb3Igbm9fY29sb3JfdmlkZW8uCisJKyBhZGp1c3RlZCBlbXguc3JjIHRvIHVzZSBub19jb2xvcl92aWRlbywgbm93IHdvcmtzIHdpdGggbmN1cnNlcyAnYicKKwkgIGFuZCAnaycgdGVzdHMuCisJKyBpbXBsZW1lbnQgbm9fY29sb3JfdmlkZW8gYXR0cmlidXRlLCBhbmQgYXMgYSBzcGVjaWFsIGNhc2UsIHJldmVyc2UKKwkgIGNvbG9ycyB3aGVuIHRoZSByZXZlcnNlIGF0dHJpYnV0ZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBjb2xvci4KKwkrIGNoZWNrIGZvciBlbXB0eSBzdHJpbmcgaW4gJFRFUk0gdmFyaWFibGUgKHJlcG9ydGVkIGJ5IEJyZXR0IE1pY2hhZWxzCisJICA8YnJldHRAeHlsYW4uY29tPikuCisJPiBmcm9tIHJlcG9ydHMgYnkgRnJlZCBGaXNoOgorCSsgYWRkIGNvbmZpZ3VyZS10ZXN0IGZvciBpc2FzY2lpCisJKyBhZGQgY29uZmlndXJlLXRlc3QgZm9yIC1sbSBsaWJyYXJ5LgorCSsgbW9kaWZ5IENGX0JPT0xfU0laRSB0byBjaGVjayBpZiBDKysgYm9vbCB0eXBlcyBhcmUgdW5zaWduZWQuCisJPiBwYXRjaGVzIGJ5IEouSi5HLlJpcG9sbAorCSsgYWRkIGNvbmZpZ3VyZS9tYWtlZmlsZSB2YXJpYWJsZXMgdG8gc3VwcG9ydCAuZXhlIGV4dGVuc2lvbiBvbgorCSAgT1MvMiBFTVggKHJlcXVpcmVzIGFkZGl0aW9uYWwgYXV0b2NvbmYgcGF0Y2hlcykuCisJKyBleHBsaWNpdGx5IGluaXRpYWxpemUgdmFyaWFibGVzIGluIGxpYl9kYXRhLmMgdG8gYXBwZWFzZSBPUy8yIGxpbmtlcgorCT4gcGF0Y2hlcyBieSBGcmVkIEZpc2ggPGZuZkBuaW5lbW9vbnMuY29tPgorCSsgbWlzYy9NYWtlZmlsZS5pbiAoaW5zdGFsbC5kYXRhKTogIEF2b2lkIHRyeWluZyB0byBpbnN0YWxsIHRoZSBDVlMKKwkgIGRpcmVjdG9yeS4KKwkrIGFjbG9jYWwubTQgKGluc3RhbGwuaW5jbHVkZXMpOiAgUmVtb3ZlIGZpbGVzIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yeQorCSAgd2hlcmUgd2UgYXJlIGdvaW5nIHRvIGluc3RhbGwgbmV3IG9uZXMsIG5vdCB0aGUgb3JpZ2luYWwgc291cmNlCisJICBmaWxlcy4KKwkrIG1pc2MvdGVybWluZm8uc3JjOiAgQWRkIGVudHJ5IGZvciAiYmV0ZXJtIiwgZGVyaXZlZCBmcm9tIHRlcm1jYXAKKwkgIGRpc3RyaWJ1dGVkIHdpdGggQmVPUyBQUjIgdXNpbmcgY2FwdG9pbmZvLgorCSsgYWNsb2NhbC5tNDogV3JhcCAkY2ZfY3ZfdHlwZV9vZl9ib29sIHdpdGggcXVvdGVzIChjb250YWlucyBzcGFjZSkKKwkrIGFjbG9jYWwubTQ6IEFzc3VtZSBib29sIHR5cGVzIGFyZSB1bnNpZ25lZC4KKwkrIHByb2dzL2luZm9jbXAuYzogd29ya2Fyb3VuZCBtd2NjIDMyayBmdW5jdGlvbiBkYXRhIGxpbWl0CisKKzk4MDExNworCSsgY29ycmVjdCBpbml0aWFsaXphdGlvbiBvZiBjb2xvci1wYWlyIChjZjogOTcwNTI0KSBpbiB4bWFzLmMsIHdoaWNoCisJICB3YXMgdXNpbmcgb25seSBvbmUgY29sb3ItcGFpciBmb3IgYWxsIGNvbG9ycyAocmVwb3J0ZWQgYnkKKwkgIEouSi5HLlJpcG9sbCkuCisJKyBhZGQgbXVsdGl0aHJlYWQgb3B0aW9ucyBmb3Igb2JqZWN0cyBidWlsZCBvbiBFTVgsIGZvciBjb21wYXRpYmlsaXR5CisJICB3aXRoIFhGcmVlODYuCisJKyBzcGxpdCB1cCBhbiBleHByZXNzaW9uIGluIE1LbGliX2dlbi5zaCB0byB3b3JrIGFyb3VuZCBhIHByb2JsZW0gb24KKwkgIE9TLzIgRU1YLCB3aXRoICdhc2gnIChwYXRjaCBieSBKLkouRy5SaXBvbGwpLgorCSsgY2hhbmdlIHRlcm1pbmZvIGVudHJpZXMgeHRlcm0gKHh0ZXJtLXhmODYtdjQwKSwgeHRlcm0tOGJpdCByczEgdG8gdXNlCisJICBoYXJkIHJlc2V0LgorCSsgcmVuYW1lIHRlcm1pbmZvIGVudHJ5IHh0ZXJtLXhmODYtdjM5dCB0byB4dGVybS14Zjg2LXY0MAorCSsgcmVtb3ZlIGJvbGQvdW5kZXJsaW5lIGZyb20gc3VuIGNvbnNvbGUgZW50cmllcyBzaW5jZSB0aGV5J3JlIG5vdAorCSAgaW1wbGVtZW50ZWQuCisJKyBjb3JyZWN0IF90cmFjZWYgY2FsbHMgaW4gX3RyYWNlZHVtcCgpLCB3aGljaCBkaWQgbm90IHNlcGFyYXRlIGZvcm1hdAorCSAgZnJvbSBwYXJhbWV0ZXJzLgorCSsgY29ycmVjdCBnZXRvcHQgc3RyaW5nIGZvciB0aWMgIi1vIiBvcHRpb24sIGFuZCBhZGQgaXQgdG8gbWFuLXBhZ2UKKwkgIHN5bm9wc2lzIChyZXBvcnRlZCBieSBEYXJyZW4gSGllYmVydCA8ZGFycmVuQGhtaS5jb20+KS4KKwkrIGNvcnJlY3QgdHlwbyBpbiBwYW5lbC9NYWtlZmlsZS5pbiwgcmV2ZXJzZWQgaWYtc3RhdGVtZW50IGluIHNjcm9sbGluZworCSAgb3B0aW1pemF0aW9uIChBbGV4YW5kZXIgVi4gIEx1a3lhbm92KS4KKwkrIHRlc3QgZm9yICdyZW1vdmUoKScsIHVzZSAndW5saW5rKCkgaWYgbm90IGZvdW5kIChwYXRjaCBieSBQaGlsaXBwZSBEZQorCSAgTXV5dGVyIDxwaGRtQG1hY3FlbC5iZT4pLgorCT4gcGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBJbXByb3ZlIGEgZmVhdHVyZSBvZiB0aGUgZm9ybXMgZHJpdmVyLiAgRm9yIGludmlzaWJsZSBmaWVsZHMKKwkgIChPX1ZJU0lCTEUgb2ZmKSBvbmx5IHRoZSBjb250ZW50cyBidXQgbm90IHRoZSBhdHRyaWJ1dGVzIGFyZSBjbGVhcmVkLgorCSAgV2Ugbm93IGNsZWFyIGJvdGguICAoUmVwb3J0ZWQgYnkgSmF2aWVyIEtvaGFuCisJICA8amtvaGFuQGFkYW4uZmNlaWEudW5yLmVkdS5hcj4pCisJKyBUaGUgbWFuIHBhZ2UgZm9ybV9maWVsZF9vcHRzLjN4IG1ha2VzIG5vdyBjbGVhciwgdGhhdCBpbnZpc2libGUKKwkgIGZpZWxkcyBhcmUgYWxzbyBhbHdheXMgaW5hY3RpdmUuCisJKyBhZGp1c3QgaWZkZWYncyB0byBjb21waWxlIHRoZSBDKysgYmluZGluZyB3aXRoIHRoZSBqdXN0IHJlbGVhc2VkCisJICBnY2MtMi44LjAgYysrIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuZXcgQysrIGxpYnJhcmllcy4KKworOTgwMTEwCisJKyBjb3JyZWN0ICI/IiBjb21tYW5kIGluIG5jdXJzZXMuYzsgaXQgd2FzIHBlcmZvcm1pbmcgbm9uLXNjcmVlbiB3cml0ZXMKKwkgIHdoaWxlIHRoZSBwcm9ncmFtIHdhcyBpbiBzY3JlZW4gbW9kZS4gIChJdCAid29ya2VkIiBpbiAxLjkuOWUgYmVjYXVzZQorCSAgdGhhdCB2ZXJzaW9uIHNldHMgT1BPU1QgYW5kIE9DUk5MIGluY29ycmVjdGx5KS4KKwkrIHJldHVybiBlcnJvciBmcm9tIGZ1bmN0aW9ucyBpbiBsaWJfa2VybmVsLCBsaWJfcmF3IGFuZCBsaWJfdGkgaWYKKwkgIGN1cl90ZXJtIGlzIG51bGwsIG9yIGlmIHVuZGVybHlpbmcgSS9PIGZhaWxzLgorCSsgYW1lbmQgY2hhbmdlIHRvIHRwdXRzKCkgc28gdGhhdCBpdCBkb2VzIG5vdCByZXR1cm4gYW4gZXJyb3IgaWYKKwkgIGN1cl90ZXJtIGlzIG51bGwsIHNpbmNlIHNvbWUgYXBwbGljYXRpb25zIGRlcGVuZCBvbiBiZWluZyBhYmxlIHRvIHVzZQorCSAgdHB1dHMgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHRlcm1pbmFsIChyZXBvcnRlZCBieSBDaHJpc3RpYW4gSi4KKwkgIFJvYmluc29uIDxpbmZ5bml0eUBjeWJlcmhpZ2h3YXkubmV0PikuCisKKzk4MDEwMworCSsgYWRkIGEgY29weSBvZiBlbXguc3JjIGZyb20gSi5KLkcuUmlwb2xsJ3MgT1MvMiBFTVggdmVyc2lvbiBvZiBuY3Vyc2VzCisJICAxLjkuOWUsIHRvZ2V0aGVyIHdpdGggZml4ZXMvYWRkaXRpb25zIGZvciB0aGUgImFuc2kiIHRlcm1pbmFsIHR5cGUuCisJKyBhZGQgdGljIGNoZWNrIGZvciBzYXZlL3Jlc3RvcmUgY3Vyc29yIGlmIGNoYW5nZV9zY3JvbGxfcmVnaW9uIGlzCisJICBkZWZpbmVkIChyZWZlcmVuY2U6IE8nUmVpbGx5IGJvb2spLgorCSsgbW9kaWZ5IHJlYWRfdGVybWNhcC5jIHRvIGhhbmRsZSBFTVgtc3R5bGUgcGF0aG5hbWVzIChyZXBvcnRlZCBieQorCSAgSi5KLkcuUmlwb2xsKS4KKwkrIG1vZGlmeSBsaWJfcmF3LmMgdG8gdXNlIEVNWCdzIHNldG1vZGUgKHBhdGNoIGZyb20gSi5KLkcuUmlwb2xsKS4KKwkgIFJpcG9sbCBzYXlzIEVNWCdzIGN1cnNlcyBkb2VzIHRoaXMuCisJKyBtb2RpZnkgX25jX3RpY19leHBhbmQoKSB0byBnZW5lcmF0ZSBcMCByYXRoZXIgdGhhbiBcMjAwLgorCSsgbW92ZS9yZXZpc2UgJ2V4cGFuZCgpJyBmcm9tIGR1bXBfZW50cnkuYyB0byBuY3Vyc2VzIGxpYnJhcnkgYXMKKwkgIF9uY190aWNfZXhwYW5kKCksIGZvciB1c2UgYnkgdGFjay4KKwkrIGRlY29kZSBcYSBhcyBcMDA3IGZvciB0ZXJtaW5mbywgYXMgcGVyIFhTSS4KKwkrIGNvcnJlY3QgdHJhbnNsYXRpb24gb2YgdGVybWluZm8gIl5AIiwgdG8gXDIwMCwgbGlrZSBcMC4KKwkrIG1vZGlmeSBuZXh0X2NoYXIoKSB0byB0cmVhdCA8Y3I+PGxmPiB0aGUgc2FtZSBhcyA8bmV3bGluZT4sIGZvcgorCSAgY3Jvc3MtcGxhdGZvcm0gY29tcGF0aWJpbGl0eS4KKwkrIHVzZSBuZXcgdmVyc2lvbiBvZiBhdXRvY29uZiAoOTcxMjMwKSB0byB3b3JrIGFyb3VuZCBsaW1pdGVkCisJICBlbnZpcm9ubWVudCBvbiBDTElYLCBkdWUgdG8gdGhlIHdheSBhdXRvY29uZiBidWlsZHMgLS1oZWxwIG1lc3NhZ2UuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBjaGVjayB0aGF0IHRoZSBBZGE5NSBiaW5kaW5nIHJ1bnMgYWdhaW5zdCB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mCisJICBuY3Vyc2VzLgorCSsgaW5zZXJ0IGNvbnN0YW50cyBhYm91dCB0aGUgbGlicmFyeSB2ZXJzaW9uIGludG8gdGhlIG1haW4gc3BlYy1maWxlIG9mCisJICB0aGUgQWRhOTUgYmluZGluZy4KKworOTcxMjI3CisJKyBtb2RpZnkgb3Blbi9mb3BlbiBjYWxscyB0byB1c2UgYmluYXJ5IG1vZGUsIG5lZWRlZCBmb3IgRU1YLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gd29yayB3aXRoIGF1dG9jb25mIDIuMTAgbW9kcyBmb3IgT1MvMgorCSAgRU1YIChmcm9tIEouSi5HLlJpcG9sbCkuCisJKyBnZW5lcmF0ZWQgbmN1cnNlc19jZmcuaCB3aXRoIHBhdGNoICg5NzEyMjIpIHRvIGF1dG9jb25mIDIuMTIgd2hpY2gKKwkgIGJ5cGFzc2VzIGxpbWl0ZWQgc2VkIGJ1ZmZlciBsZW5ndGguCisJPiBzZXZlcmFsIGNoYW5nZXMgZnJvbSBKdWFuIEpvc2UgR2FyY2lhIFJpcG9sbCA8d29ybUBhcnJha2lzLmVzPgorCSAgKEouSi5HLlJpcG9sbCkgdG8gc3VwcG9ydCBPUy8yIEVNWDoKKwkrIGFkZCBhIF9zY3JvbGxpbmcgZmxhZyB0byBTUCwgdG8gc2V0IHdoZW4gd2UgZW5jb3VudGVyIGEgdGVybWluYWwKKwkgIHRoYXQgc2ltcGx5IGNhbm5vdCBzY3JvbGwuCisJKyBjb3JyZWN0ZWQgbG9naWMgaW4gX25jX2FkZF90b190cnkoKSwgYnkgZW5zdXJpbmcgdGhhdCBzdHJpbmdzIHdpdGgKKwkgIGVtYmVkZGVkIFwyMDAgY2hhcmFjdGVycyBhcmUgbWF0Y2hlZC4KKwkrIGRvbid0IGFzc3VtZSB0aGUgaG9zdCBoYXMgJ2xpbmsoKScgZnVuY3Rpb24sIGZvciBsaW5raW5nIHRlcm1pbmZvCisJICBlbnRyaWVzLgorCis5NzEyMjAKKwkrIGlmIHRoZXJlJ3Mgbm8gaW9jdGwncyB0byBzdXBwb3J0IHNpZ3dpbmNoIGhhbmRsZXIsIGRpc2FibGUgaXQuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtZXh0LWZ1bmNzIHRvIHJlbW92ZSB0aGUgZXh0ZW5kZWQKKwkgIGZ1bmN0aW9ucyBmcm9tIHRoZSBidWlsZC4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC10ZXJtbGliIHRvIGdlbmVyYXRlIHRoZSB0ZXJtaW5mbworCSAgZnVuY3Rpb25zIGFzIGEgc2VwYXJhdGUgbGlicmFyeS4KKwkrIGFkZCAnc291cmNlcycgcnVsZSB0byBmYWNpbGl0YXRlIGNyb3NzLWNvbXBpbGluZy4KKwkrIHJldmlldy9maXggb3JkZXIgb2YgbW9zdGx5Y2xlYW4vY2xlYW4vZGlzdGNsZWFuIHJ1bGVzLgorCSsgbW9kaWZ5IGluc3RhbGwtcnVsZSBmb3IgaGVhZGVycyB0byBmaXJzdCByZW1vdmUgb2xkIGhlYWRlciwgaW4KKwkgIGNhc2UgdGhlcmUgd2FzIGEgc3ltYm9saWMgbGluayB0aGF0IGNvbmZ1c2VzIHRoZSBpbnN0YWxsIHNjcmlwdC4KKwkrIGNvcnJlY3RlZCBzdWJzdGl0dXRpb24gZm9yIE5DVVJTRVNfQ09OU1QgaW4gdGVybS5oIChjZjogOTcxMTA4KQorCSsgYWRkIG51bGwgcG9pbnRlciBjaGVja3MgaW4gd25vdXRyZWZyZXNoKCksIG92ZXJsYXAoKSAocGF0Y2ggYnkKKwkgIFhpYW9kYW4gVGFuZyA8eHRhbmdAcW54LmNvbT4pCisJKyBjb3JyZWN0IHRwdXRzKCksIHdoaWNoIGNvdWxkIGRlcmVmZXJlbmNlIGEgbnVsbCBjdXJfdGVybSBpZiBpbnZva2VkCisJICBiZWZvcmUgdGVybWluYWwgaXMgaW5pdGlhbGl6ZWQgKHBhdGNoIGJ5IENocmlzdG9waGVyIFNlYXdvb2QKKwkgIDxjbHNAc2Vhd29vZC5vcmc+KQorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgbWFrZXMgYmV0dGVyIHVzZSBvZiAicHJhZ21hIElubGluZSIgaW4gdGhlIEFkYTk1IGJpbmRpbmcKKwkrIHJlc3luY2hyb25pemVzIHRoZSBnZW5lcmF0ZWQgaHRtbCBtYW5wYWdlcworCis5NzEyMTMKKwkrIGFkZGl0aW9uYWwgZml4ZXMgZm9yIG1hbi1wYWdlcyBzZWN0aW9uLXJlZmVyZW5jZXMKKwkrIGFkZCAoZm9yIGRlYnVnZ2luZykgYSBjaGVjayBmb3IgaWNoL2ljaDEgY29uZmxpY3Qgd2l0aCBzbWlyL3JtaXIKKwkgIHRvIHRpYywgZXRjLgorCSsgcmVtb3ZlIGhwYS92cGEgZnJvbSByeHZ0IHRlcm1pbmFsIGRlc2NyaXB0aW9uIGJlY2F1c2UgdGhleSBhcmUgbm90CisJICBpbXBsZW1lbnRlZCBjb3JyZWN0bHksIGFkZGVkIHNncjAuCisJKyBjaGFuZ2UgbmN1cnNlcyAncycgdG8gdXNlIHJhdyBtb2RlLCBzbyBeUSB3b3JrcyAocmVwb3J0ZWQgYnkgUnVkb2xmCisJICBMZWl0Z2ViIDxsZWl0Z2ViQGxlbGFuZC5zdGFuZm9yZC5lZHU+KQorCis5NzEyMDYKKwkrIG1vZGlmeSBwcm90ZWN0aW9uIHdoZW4gaW5zdGFsbGluZyBsaWJyYXJpZXMgdG8gKG5vcm1hbGx5KSBub3QKKwkgIGV4ZWN1dGFibGUuICBIUC1VWCBzaGFyZWQgbGlicmFyaWVzIGFyZSBhbiBleGNlcHRpb24uCisJKyBhZGQgY29uZmlndXJlIGNoZWNrIGZvciAndGFjaycuCisJKyBpbXBsZW1lbnQgc2NyaXB0IGZvciByZW5hbWluZyBzZWN0aW9uLXJlZmVyZW5jZXMgaW4gbWFuLXBhZ2UgaW5zdGFsbCwKKwkgIGZvciBEZWJpYW4gY29uZmlndXJhdGlvbi4KKwkrIGFkZCB2YWxpZGl0eS1jaGVjayBmb3IgU1AgaW4gdHJhY2UgY29kZSBpbiBiYXVkcmF0ZSgpIChyZXBvcnRlZCBieQorCSAgRGFuaWVsIFdlYXZlcikuCisJPiBwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YgKGZpeGVzIHRvIG1hdGNoIHNvbDI1IGN1cnNlcykKKwkrIG1vZGlmeSAnb3ZlcmxheSgpJyBzbyB0aGF0IGNvcHkgYXBwbGllcyB0YXJnZXQgd2luZG93IGJhY2tncm91bmQgdG8KKwkgIGNoYXJhY3RlcnMuCisJKyBjb3JyZWN0ICdtdndpbigpJyBzbyB0aGF0IGl0IGRvZXMgbm90IGNsZWFyIHRoZSBwcmV2aW91cyBsb2NhdGlvbnMuCisJKyBjb3JyZWN0IGxpYl9hY3MuYyBzbyB0aGF0IDgtYml0IGNoYXJhY3RlciBpcyBub3Qgc2lnbiBleHBhbmRlZCBpbgorCSAgY2FzZSBvZiB3aWRlIGNoYXJhY3RlcnMgaW4gY2h0eXBlLgorCSsgY29ycmVjdCBjb250cm9sLWNoYXIgdGVzdCBpbiBsaWJfYWRkY2guYyBmb3IgdXNlIHdpdGggd2lkZSBjaGFycworCSsgdXNlIGF0dHJpYnV0ZSBpbiB0aGUgY2h0eXBlIHdoZW4gYWRkaW5nIGEgY29udHJvbCBjaGFyYWN0ZXIgaW4KKwkgIGxpYl9hZGRjaC5jIGNvbnRyb2wgY2hhciB3YXMgYWRkZWQgd2l0aCBjdXJyZW50IGF0dHJpYnV0ZQorCis5NzExMjkKKwkrIHNhdmUvcmVzdG9yZSBlcnJubyBpbiBfdHJhY2VmKCkgZnVuY3Rpb24KKwkrIGNoYW5nZSB0cmVhdG1lbnQgb2YgaW5pdGlhbGl6ZV9jb2xvciB0byB1c2UgYSByYW5nZSBvZiAwLi4xMDAwCisJICAocmVjb21tZW5kZWQgYnkgRGFuaWVsIFdlYXZlcikuCisJKyBzZXQgdW1hc2sgaW4gbWtpbnN0YWxsZGlycywgZml4aW5nIHByb2JsZW1zIHJlcG9ydGVkIGJ5IHVzZXJzIHdobworCSAgaGF2ZSBzZXQgcm9vdCdzIHVtYXNrIHRvIDA3Ny4KKwkrIGNvcnJlY3QgYnVnIGluIHRpYyB0aGF0IGNhdXNlZCBjYXBhYmlsaXRpZXMgdG8gYmUgcmVwcmludGVkIGF0IHRoZQorCSAgZW5kIG9mIG91dHB1dCB3aGVuIHRoZXkgaGFkIGVtYmVkZGVkIGNvbW1lbnRzLgorCSsgcmV3cm90ZSB3cmVkcmF3bG4gdG8gY29ycmVzcG9uZCB0byBYU0ksIGFuZCBzcGxpdC1vdXQgc2luY2UgaXQgaXMKKwkgIG5vdCBvZnRlbiB1c2VkIChmcm9tIHJlcG9ydCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YsIDk3MDgyNSkKKwkrIHJld3JvdGUgRGFuIE5lbHNvbidzIGNoYW5nZSB0byBtYWtlIGl0IHBvcnRhYmxlLCBhcyB3ZWxsIGFzIHRvCisJICBjb3JyZWN0IGxvZ2ljIGZvciBoYW5kbGluZyBiYWNrc2xhc2hlcy4KKwkrIGFkZCBjb2RlIHRvIF9uY190Z2V0ZW50KCkgdG8gbWFrZSBpdCB3b3JrIG1vcmUgbGlrZSBhIHJlYWwgdGdldGVudCgpLgorCSAgSXQgcmVtb3ZlcyBhbGwgZW1wdHkgZmllbGRzLCBhbmQgcmVtb3ZlcyBhbGwgYnV0IHRoZSBmaXJzdCBpbiBhIGdyb3VwCisJICBvZiBkdXBsaWNhdGUgY2Fwcy4gIFRoZSBjb2RlIHdhcyBwdWxsZWQgZnJvbSB0aGUgQlNEIGxpYnRlcm1jYXAgY29kZQorCSAgaW4gdGVybWNhcC5jIChwYXRjaCBieSBEYW4gTmVsc29uIDxkbmVsc29uQGVtc3Bob25lLmNvbT4KKwkrIGRvbid0IGluY2x1ZGUgLS1lbmFibGUtd2lkZWMgaW4gdGhlIC0td2l0aC1kZXZlbG9wIGNvbmZpZ3VyZSBvcHRpb24sCisJICBzaW5jZSBpdCBpcyBub3QgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCA0LjEgKG5vdGVkIGJ5IEFsZXhhbmRlciBWLgorCSAgTHVreWFub3YpCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBmdXJ0aGVyIGltcHJvdmVtZW50cyBvZiB0aGUgdXNhZ2Ugb2YgZWxhYm9yYXRpb24gcHJhZ21hcyBpbiB0aGUgQWRhOTUKKwkgIGJpbmRpbmcKKwkrIGVuaGFuY2VkIEFkYTk1IHNhbXBsZSB0byB1c2UgdGhlIHVzZXJfZGF0YSBtZWNoYW5pc20gZm9yIHBhbmVscy4KKwkrIGEgZml4IGZvciB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHQgdG8gbWFrZSBnbmF0LTMuMTAgdGhlIHJlcXVpcmVkCisJICB2ZXJzaW9uLgorCSsgcmVzeW5jIG9mIHRoZSBodG1sIHZlcnNpb24gb2YgdGhlIG1hbnBhZ2VzCisKKzk3MTEyMgorCT4gZml4ZXMvdXBkYXRlcyBmb3IgdGVybWluZm8uc3JjOgorCSsgYWRkIHZ0MjIwLWpzLCBwaWxvdCwgcmJjb21tLCBkYXRhcG9pbnQgZW50cmllcyBmcm9tIGVzcidzIDI3LWp1bi05NworCSAgdmVyc2lvbi4KKwkrIGFkZCBoZHMyMDAgZGVzY3JpcHRpb24gKFdhbHRlciBTa29yc2tpKQorCSsgYWRkIEVNWCAwLjliIGRlc2NyaXB0aW9ucworCSsgY29ycmVjdCBybXNvL3Ntc28gY2FwYWJpbGl0aWVzIGluIHd5MzAtbWMgYW5kIHd5NTAtbWMgKERhbmllbCBXZWF2ZXIpCisJKyByZW5hbWUgeGhwdGVybSBiYWNrIHRvIGhwdGVybS4KKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIEltcHJvdmVzIHRoZSB1c2FnZSBvZiBlbGFib3JhdGlvbiBwcmFnbWFzIGZvciB0aGUgQWRhOTUgYmluZGluZy4KKwkrIEFkZHMgYSB0cmFuc2xhdGlvbiBvZiB0aGUgdGVzdC9yYWluLmMgaW50byBBZGE5NSB0byB0aGUgc2FtcGxlcy4KKwkgIFRoaXMgaGFzIGJlZW4gY29udHJpYnV0ZWQgdG8gdGhlIHByb2plY3QgYnkgTGF1cmVudCBQYXV0ZXQKKwkgIChwYXV0ZXRAZ25hdC5jb20pCisKKzk3MTExNQorCSsgaW5jcmVhc2UgTUFYX05BTUVfU0laRSB0byA1MTIgdG8gaGFuZGxlIGV4dHJlbWVseSBsb25nIGFsaWFzIGxpc3QKKwkgIGluIEhQLVVYIHRlcm1pbmZvLgorCSsgY29ycmVjdGlvbiAmIHNpbXBsaWZpY2F0aW9uIG9mIGRlbGF5IGNvbXB1dGF0aW9uIGluIHRwdXRzLCBiYXNlZCBvbgorCSAgY29tbWVudHMgZnJvbSBEYW5pZWwgV2VhdmVyLgorCSsgcmVwbGFjZSB0ZXN0IGZvciBTQ08gd2l0aCBtb3JlIHByZWNpc2UgaGVhZGVyIHRlc3RzLgorCSsgYWRkIGNvbmZpZ3VyZSB0ZXN0IGZvciB1bnNpZ25lZCBsaXRlcmFscywgdXNlIGluIE5DVVJTRVNfQklUUyBtYWNyby4KKwkrIGNvbW1lbnQtb3V0IHRoZSAtUElDLCBldGMuLCBmbGFncyBmcm9tIGMrKywgcHJvZ3MgYW5kIHRlc3QgbWFrZWZpbGVzCisJICBzaW5jZSB0aGV5IHByb2JhYmx5IGFyZSBub3QgbmVlZGVkLCBhbmQgYXJlIGxlc3MgZWZmaWNpZW50IChub3RlZCBieQorCSAgSnVlcmdlbiBGbHVrKQorCSsgYWRkIC1MJChsaWJkaXIpIHRvIGxvYWRlciBvcHRpb25zLCBhZnRlciAtTC4uL2xpYiBzbyB0aGF0IGxvYWRlcnMKKwkgIHRoYXQgcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gd2lsbCB0ZW5kIHRvIGRvIHRoZSByaWdodCB0aGluZyBpZgorCSAgdGhlIHByb2dyYW1zIGFyZSBtb3ZlZCBhcm91bmQgYWZ0ZXIgaW5zdGFsbGluZyB0aGVtIChzdWdnZXN0ZWQgYnkKKwkgIEp1ZXJnZW4gRmx1aykuCisJKyBhZGQgLVIgb3B0aW9uIHRvIGxvYWRlciBvcHRpb25zIGZvciBwcm9ncmFtcyBmb3IgU29sYXJpcyBpZiB0aGUKKwkgIC0tZW5hYmxlLXJwYXRoIG9wdGlvbiBpcyBzcGVjaWZpZWQgZm9yIHRoZSBsaWJyYXJpZXMuCisKKzk3MTExMgorCSsgY29ycmVjdCBpbnN0YWxsZWQgZmlsZW5hbWUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gKkJTRCAocmVwb3J0ZWQgYnkKKwkgIEp1ZXJnZW4gRmx1aykuCisKKzk3MTEwOAorCSsgY2xlYW51cCBsb2dpYyBmb3IgZGVjaWRpbmcgd2hlbiB0cHV0cygpIHNob3VsZCBjYWxsIGRlbGF5X291dHB1dCgpLAorCSAgYmFzZWQgb24gY29tbWVudHMgZnJvbSBEYW5pZWwgV2VhdmVyLgorCSsgbW9kaWZpZWQgdHB1dHMoKSB0byBhdm9pZCB1c2Ugb2YgZmxvYXQuCisJKyBjb3JyZWN0IHVzZSBvZiB0cmFpbHBhZCBpbiB0cHV0cygpLCB3aGljaCB1c2VkIHRoZSB3cm9uZyB2YXJpYWJsZQorCSAgaW4gY2FsbCB0byBkZWxheV9vdXRwdXQoKS4KKwkrIGNvcnJlY3QgaW52ZXJ0ZWQgZXhwcmVzc2lvbiBmb3IgbnVsbC1jb3VudCBpbiBkZWxheV9vdXRwdXQoKQorCSAgKGFuYWx5c2lzIGJ5IERhbmllbCBXZWF2ZXIpLgorCSsgYXBwbHkgLS1lbmFibGUtcnBhdGggb3B0aW9uIHRvIFNvbGFyaXMgKHJlcXVlc3RlZCBieSBMYXJyeSBWaXJkZW4pLgorCSsgY29ycmVjdCBzdWJzdGl0dXRpb24gb2YgRVhUUkFfQ0ZMQUdTIGZvciBnY2MgMi42LjMKKwkrIGNvcnJlY3QgY2hlY2sgZm9yIGVycm9yLXJldHVybiBieSBfbmNfdGdldGVudCgpLCB3aGljaCByZXR1cm5zIDAKKwkgIGZvciBzdWNjZXNzLgorCSsgYWRkIGNvbmZpZ3VyZSB0ZXN0IGZvciBCU0QgNC40IGNnZXRlbnQoKSBmdW5jdGlvbiwgbW9kaWZ5CisJICByZWFkX3Rlcm1jYXAuYyB0byB1c2UgdGhlIGhvc3QncyB2ZXJzaW9uIG9mIHRoYXQgaWYgZm91bmQsIHVzaW5nIHRoZQorCSAgdGVybWluYWwgZGF0YWJhc2Ugb24gRnJlZUJTRCAocmVwb3J0ZWQgYnkgUGV0ZXIgV2VtbSkuCisJKyBhZGQgdTgsIHU5IHN0cmluZ3MgdG8gc3VuLWlsIGRlc2NyaXB0aW9uIGZvciBEYW5pZWwgV2VhdmVyLgorCSsgdXNlIE5DVVJTRVNfQ09OU1QgaW4gcGFuZWwncyB1c2VyLXBvaW50ZXIuCisJKyBtb2RpZnkgZWRpdF9jZmcuc2ggYW5kIE1LdGVybS5oLmF3ay5pbiB0byBzdWJzdGl0dXRlIE5DVVJTRVNfQ09OU1QKKwkgIHNvIHRoYXQgd2lsbCB3b3JrIG9uIE5lWFQuCisJKyB1c2UgX25jX3NldF9zY3JlZW4oKSByYXRoZXIgdGhhbiBhc3NpZ25tZW50cyB0byBTUCB0byBmaXggcG9ydCB0bworCSAgTmVYVCAocmVwb3J0ZWQgYnkgRnJhbmNpc2NvIEEuIFRvbWVpIFRvcnJlcykuCisKKzk3MTEwMQorCSsgZm9yY2UgbWFuZGF0b3J5IHBhZGRpbmcgaW4gYmVsbCBhbmQgZmxhc2hfc2NyZWVuLCBhcyBzcGVjaWZpZWQgaW4KKwkgIFhTSS4KKwkrIGRvbid0IGFsbG93IHBhZGRpbmdfYmF1ZF9yYXRlIHRvIG92ZXJyaWRlIG1hbmRhdG9yeSBkZWxheXMgKHJlcG9ydGVkCisJICBieSBEYW5pZWwgV2VhdmVyKS4KKwkrIG1vZGlmeSBkZWxheV9vdXRwdXQoKSB0byB1c2UgX25jX3RpbWVkX3dhaXQoKSBpZiBubyBiYXVkcmF0ZSBoYXMgYmVlbgorCSAgZGVmaW5lZCwgb3IgaWYgdGhlIGN1cl90ZXJtIHBvaW50ZXIgaXMgbm90IGluaXRpYWxpemVkLiAgWFNJIHRyZWF0cworCSAgdGhpcyBhcyB1bnNwZWNpZmllZC4gIChyZXF1ZXN0ZWQgYnkgRGFuaWVsIFdlYXZlcikuCisJKyBjaGFuZ2UgZ2V0Y2FwLWNhY2hlIGlmZGVmJ3MgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGNoZGlyL21rZGlyCisJICB3aGVuIHRoYXQgZmVhdHVyZSBpcyBub3QgY29uZmlndXJlZC4KKwkrIHJlbW92ZSBfbmNfZXJyX2Fib3J0KCkgY2FsbHMgd2hlbiB3cml0ZV9lbnRyeS5jIGZpbmRzIGEgZGlyZWN0b3J5IGJ1dAorCSAgY2Fubm90IHdyaXRlIHRvIGl0LCBlLmcuLCB3aGVuIHRyYW5zbGF0aW5nIHBhcnQvYWxsIG9mIC9ldGMvdGVybWNhcAorCSAgKHJlcG9ydGVkIGJ5IEFuZHJlYXMgSmFlZ2VyIDxhakBhcnRodXIucmhlaW4tbmVja2FyLmRlPikuCisJICAodGhpcyBkYXRlcyBiYWNrIHRvIDk1MTEwMiwgaW4gMS45LjdhKS4KKwkrIG1pbm9yIGlmZGVmIGZpeGVzIHRvIGNvbXBpbGUgd2l0aCBhdGFjIGFuZCBnbGliYyAyLjAuNWMKKwkrIGFkZCBjaGVjayBmb3IgLWxnZW4gd2hlbiBjb25maWd1cmluZyByZWdleHByLmgKKwkrIG1vZGlmeSBTb2xhcmlzIHNoYXJlZC1saWJyYXJ5IG9wdGlvbiAiLWQgeSIgdG8gIi1keSIgdG8gd29ya2Fyb3VuZAorCSAgaW5jb21wYXRpYmlsaXR5IG9mIGdjYyAyLjcuMiB2cyB2ZW5kb3IncyB0b29scy4KKworOTcxMDI2CisJKyBjb3JyZWN0IGlmZGVmJ3MgZm9yIHN0cnVjdCB3aW5zaXplIHZzIHN0cnVjdCB0dHlzaXplIGluIGxpYl9zZXR1cC5jCisJICB0byBjb21waWxlIG9uIFNDTy4KKwkrIHJlbW92ZSBkYW5nbGluZyBiYWNrc2xhc2ggaW4gcGFuZWwvTWFrZWZpbGUuaW4KKwkrIG1vZGlmeSBNS2tleW5hbWUuYXdrIHRvIHdvcmsgd2l0aCBTQ08ncyBuYXdrLCB3aGljaCBkdW1wcyBjb3JlIGluIHRoZQorCSAgbGVuZ3RoKCkgZnVuY3Rpb24uCisJKyBjb3JyZWN0IGxlbmd0aCBvZiBhbGxvY2F0aW9uIGluIF9uY19hZGRfdG9fdHJ5KCksIHRvIGFsbG93IGZvcgorCSAgdHJhaWxpbmcgbnVsbC4KKwkrIGNvcnJlY3QgbG9naWMgaW4gX25jX3JlbW92ZV9rZXkoKSwgd2hpY2ggd2FzIGRpc2NhcmRpbmcgdG9vIG1hbnkKKwkgIG5vZGVzIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpCisKKzk3MTAyNQorCSsgYWRkIGRlZmluaXRpb24gZm9yICQoUkVMX1ZFUlNJT04pIHRvIHRlc3QvTWFrZWZpbGUuaW4sIHNvICpCU0QKKwkgIHNoYXJlZCBsaWJyYXJpZXMgbGluayBwcm9wZXJseSAoc2VlIDk3MDUyNCkuCisJKyBtb2RpZnkgTGludXggc2hhcmVkLWxpYnJhcnkgZ2VuZXJhdGlvbiB0byBpbmNsdWRlIGxpYnJhcnkKKwkgIGRlcGVuZGVuY2llcyAoZS5nLiwgLWxuY3Vyc2VzIGFuZCAtbGdwbSkgaW4gdGhlIGZvcm1zLCBtZW51IGFuZAorCSAgcGFuZWwgbGlicmFyaWVzIChzdWdnZXN0ZWQgYnkgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgcmF0aGVyCisJICB0aGFuIHVuYW1lLCB3aGljaCBpcyB1bnJlbGlhYmxlIG9uIHNvbWUgc3lzdGVtcy4KKwkrIHVwZGF0ZWQgTWFrZWZpbGUuZ2xpYmMsIHRlc3QtYnVpbHQgd2l0aCBnbGliYyAyLjAuNWMKKwkrIG1vZGlmeSBrZXluYW1lKCkgdG8gcmV0dXJuIHZhbHVlcyBjb25zaXN0ZW50IHdpdGggU1ZyNCBjdXJzZXMgKHBhdGNoCisJICBieSBKdWVyZ2VuIEZsdWspLgorCT4gY2hhbmdlcyByZXF1ZXN0ZWQgYnkgRGFuaWVsIFdlYXZlcjoKKwkrIG1vZGlmeSBkZWxheV9vdXRwdXQoKSBzbyB0aGF0IGl0IHVzZXMgdGhlIHNhbWUgb3V0cHV0IGZ1bmN0aW9uIGFzCisJICB0cHV0cygpIGlmIGNhbGxlZCBmcm9tIHRoYXQgZnVuY3Rpb24uCisJKyBtb3ZlIF9iYXVkcmF0ZSBmcm9tIFNDUkVFTiB0byBURVJNSU5BTCBzbyB0aGF0IGxvdy1sZXZlbCB1c2Ugb2YKKwkgIHRwdXRzIHdvcmtzIHdoZW4gU1AgaXMgbm90IHNldC4KKwk+IHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGZhY3RvciBsaWJfbWVudSBhbmQgbGliX2Zvcm0gaW50byBzbWFsbGVyIG1vZHVsZXMKKwkrIGNsZWFuIHVwIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBwYW5lbCBhbmQgU0NSRUVOCisJKyBtaW5vciBjaGFuZ2VzIHRvIHRoZSBBZGE5NSBtb3VzZSBzdXBwb3J0IGltcGxlbWVuYXRpb24KKwkrIG1pbm9yIGJ1Z2ZpeCBpbiBDKysgYmluZGluZyB0byByaXBvZmYgd2luZG93cworCSsgZml4IGEgZmV3IEFkYTk1IGh0bWwgZG9jdW1lbnRhdGlvbiBwYWdlcworCis5NzEwMTgKKwkrIHNwbGl0LW91dCBsaWJfdW5nZXRjaC5jLCBtYWtlIHJ1bnRpbWUgbGluayB0byByZXNpemV0ZXJtKCkgdG8KKwkgIGRlY291cGxlIHRob3NlIG1vZHVsZXMgZnJvbSBsaWJfcmVzdGFydC5jCisJKyBhZGQgeHRlcm0teGY4Ni12Mzl0IGRlc2NyaXB0aW9uIHRvIHRlcm1pbmZvLnNyYworCSsgcmVzZXQgU1AtPl9lbmR3aW4gaW4gbGliX3RzdHAuYyBjbGVhbnVwKCkgZnVuY3Rpb24gYWZ0ZXIgY2FsbGluZworCSAgZW5kd2luKCkgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVwYWludGluZyBpZiB0aGUgYXBwbGljYXRpb24gaGFzCisJICBlc3RhYmxpc2hlZCBhbiBhdGV4aXQgZnVuY3Rpb24sIGV0Yy4gIEVuY291bnRlcmVkIHRoaXMgcHJvYmxlbSBpbgorCSAgdGhlIGMrKyBkZW1vLCB3aG9zZSBkZXN0cnVjdG9ycyByZXBhaW50IHRoZSBzY3JlZW4uCisJKyBjb21iaW5lIF9uY19nZXRfc2NyZWVuc2l6ZSgpIGFuZCByZXNpemV0ZXJtKCkgY2FsbHMgYXMgbmV3IGZ1bmN0aW9uCisJICBfbmNfdXBkYXRlX3NjcmVlbnNpemUoKS4KKwkrIG1pbm9yIGZpeGVzIHRvIGFsbG93IGNvbXBpbGUgd2l0aCBnKysgKHN1Z2dlc3RlZCBieSBOZWxzb24gSC4gRi4KKwkgIEJlZWJlKS4KKwkrIGltcGxlbWVudCBpbnN0YWxsLXJ1bGVzIGZvciBBZGE5NSBtYWtlZmlsZXMuCisJKyB1c2Ugc2NyZWVuX2xpbmVzIG9yIE1BWExJTkVTIGFzIG5lZWRlZCB3aGVyZSBMSU5FUyB3YXMgY29kZWQsCisJICBhcyB3ZWxsIGFzIHNjcmVlbl9jb2x1bW5zIGZvciBDT0xTLCBpbiB0aGUgbmN1cnNlcyBsaWJyYXJ5LgorCT4gcGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92OgorCSsgbW9kaWZ5IGxvZ2ljIGZvciByaXBwZWQtb2ZmIGxpbmVzIHRvIGhhbmRsZSBzZXZlcmFsIFNDUkVFTnMuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBmYWN0b3JzIGxpYl9zbGsuYyBpbnRvIHNvbWUgc21hbGxlciBtb2R1bGVzCisJKyBmYWN0b3JzIHBhbmVsLmMgaW50byBzb21lIHNtYWxsZXIgbW9kdWxlcworCSsgcHV0cyB0aGUgc3RhdGljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBhbmVsIHN0YWNrIGludG8gdGhlCisJICBTQ1JFRU4gc3RydWN0dXJlIHRvIGFsbG93IGRpZmZlcmVudCBwYW5lbCBzdGFja3Mgb24gZGlmZmVyZW50CisJICBzY3JlZW5zLgorCSsgcHJlbGltaW5hcnkgZml4IGZvciBhbiBlcnJvciBhZGp1c3RpbmcgTElORVMgdG8gYWNjb3VudCBmb3IKKwkgIHJpcHBlZC1vZmYgbGluZXMuCisKKzk3MTAxMQorCSsgbW92ZSBfbmNfbWF4X2NsaWNrX2ludGVydmFsIGFuZCBvdGhlciBtb3VzZSBpbnRlcmZhY2UgaXRlbXMgdG8gU0NSRUVOCisJICBzdHJ1Y3Qgc28gdGhhdCB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgdGVybWluYWwsIGFuZCBhbHNvCisJICBzYXZlIG1lbW9yeSB3aGVuIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBuZWVkIGEgbW91c2UgKHJvdWdobHkgM2sgdnMKKwkgIDAuNWsgb24gTGludXgpLgorCSsgbW9kaWZ5IG1vdXNlaW50ZXJ2YWwoKSBzbyB0aGF0IGEgbmVnYXRpdmUgcGFyYW1ldGVyIHF1ZXJpZXMgdGhlCisJICBjbGljay1pbnRlcnZhbCB3aXRob3V0IG1vZGlmeWluZyBpdC4KKwkrIG1vZGlmeSBuY3Vyc2VzICdpJyB0ZXN0IHRvIHdvcmsgd2l0aCBuY3Vyc2VzJyBhcHBhcmVudCBleHRlbnNpb24gZnJvbQorCSAgU1ZyNCwgaS5lLiwgYWxsb3dzIG5vY2JyZWFrK25vZWNobyAoYW5hbHlzaXMgYnkgQWxleGFuZGVyIFYuCisJICBMdWt5YW5vdikuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbnMgLS13aXRoLWFkYS1pbmNsdWRlcyBhbmQgLS13aXRoLWFkYS1vYmplY3RzLAorCSAgdG8gZHJpdmUgQWRhOTUgYmluZGluZyBpbnN0YWxsIChub3QgeWV0IGltcGxlbWVudGVkKS4KKwkrIGluc3RhbGwgQysrIGJpbmRpbmcgYXMgLWxuY3Vyc2VzKysgYW5kIGFzc29jaWF0ZWQgaGVhZGVycyB3aXRoIHRoZQorCSAgb3RoZXIgbmN1cnNlcyBoZWFkZXJzLgorCSsgZml4IGhlYWRlciB1bmluc3RhbGwgaWYgY29uZmlndXJlIC0tc3JjZGlyIGlzIHVzZWQuCisJPiBtaW5vciBpbnRlcmZhY2UgY2hhbmdlcyB0byBzdXBwb3J0ICd0YWNrJyBwcm9ncmFtIC1URAorCSAgKHJlcXVlc3QgYnkgRGFuaWVsIFdlYXZlciA8ZGFud0B6bnl4LmNvbT4pLgorCSsgZXhwb3J0IGZ1bmN0aW9ucyBfbmNfdHJhbnNfc3RyaW5nKCkgYW5kIF9uY19tc2VjX2Nvc3QoKS4KKwkrIGFkZCB2YXJpYWJsZSBfbmNfbnVsbHNfc2VudCwgdG8gcmVjb3JkIHRoZSBudW1iZXIgb2YgcGFkZGluZworCSAgY2hhcmFjdGVycyBvdXRwdXQgaW4gZGVsYXlfb3V0cHV0KCkuCisJKyBtb3ZlIHRlc3RzIGZvciBnZW5lcmljX3R5cGUgYW5kIGhhcmRfY29weSB0ZXJtaW5hbHMgaW4gc2V0dXB0ZXJtKCkKKwkgIHRvIHRoZSBlbmQgb2YgdGhhdCBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsaWJyYXJ5IHdpbGwgc3RpbGwgYmUKKwkgIGluaXRpYWxpemVkLCB0aG91Z2ggbm90IGdlbmVyYWxseSB1c2VmdWwgZm9yIGN1cnNlcyBwcm9ncmFtcy4KKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92OgorCSsgbW9kaWZ5IENsckJvdHRvbSgpIHRvIGF2b2lkIHVzaW5nIGNscl9lb3MgaWYgdGhlcmUgaXMgb25seSBvbmUgbGluZQorCSAgdG8gZXJhc2UuCisJKyB0eXBvIGluIGNvbmZpZ3VyZSAtLWhlbHAuCisJPiBwYXRjaCBieSBKIFQgQ29ua2xpbiAod2l0aCBtaW5vciByZXN5bmMgYWdhaW5zdCBKdWVyZ2VuJ3MgY2hhbmdlcykKKwkrIHNwbGl0LW91dCBsaWJfZmxhc2guYyBmcm9tIGxpYl9iZWVwLmMKKwkrIHNwbGl0LW91dCBsaWJfaGxpbmUuYyBhbmQgbGliX3ZsaW5lLmMgZnJvbSBsaWJfYm94LmMKKwkrIHNwbGl0LW91dCBsaWJfd2F0dHJvbi5jLCBsaWJfd2F0dHJvZmYuYyBmcm9tIGxpYl9hZGRjaC5jCisKKzk3MTAwNQorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgY29ycmVjdCBzb3VyY2UvdGFyZ2V0IG9mIGMrKy9lZGl0X2NmZy5zaAorCis5NzEwMDQKKwkrIGFkZCBjb2xvciwgbW91c2Ugc3VwcG9ydCB0byBrdGVybSB0ZXJtaW5mbyBlbnRyeS4KKwkrIG1vZGlmeSBsaWJfbW91c2UuYyB0byByZWNvZ25pemUgcnh2dCwga3Rlcm0sIGNvbG9yX3h0ZXJtIGFsc28gYXMKKwkgIHByb3ZpZGluZyAieHRlcm0iLXN0eWxlIG1vdXNlLgorCSsgdXBkYXRlZCByeHZ0J3MgdGVybWluZm8gZGVzY3JpcHRpb24gdG8gY29ycmVzcG9uZCB0byAyLjIxYiwgd2l0aAorCSAgZml4ZXMgZm9yIHRoZSBhY3NjICh0aGUgYm94MSBjYXBhYmlsaXR5IGlzIGluY29ycmVjdCwgZWNoMSBkb2VzIG5vdAorCSAgd29yaykuCisJKyBmaXggbG9naWMgaW4gcGFyc2VfZW50cnkuYyB0aGF0IGRpc2NhcmRlZCBhY3NjIHdoZW4gJ3N5bnRoZXNpemluZycKKwkgIGFuIGVudHJ5IGZyb20gZXF1aXZhbGVudHMgaW4gWEVOSVggb3IgQUlYLiAgVGhpcyBsZXRzIG5jdXJzZXMgaGFuZGxlCisJICB0aGUgZGlzdHJpYnV0aW9uIGNvcHkgb2Ygcnh2dCdzIHRlcm1pbmZvLgorCSsgbW9kaWZ5IGFjc2MgY2FwYWJpbGl0eSBmb3IgbGludXggYW5kIGxpbnV4LWtvaTggdGVybWluZm8gZGVzY3JpcHRpb25zCisJICAoZnJvbSBQYXZlbCBSb3NraW4gPHBhdmVsQGFic29sdXRlLnNwYi5zdT4pLgorCSsgY29ycmVjdGVkIGRlZmluaXRpb24gaW4gY3Vyc2VzLmggZm9yIEFDU19MQU5URVJOLCB3aGljaCB3YXMgJ0knCisJICByYXRoZXIgdGhhbiAnaScgKHNlZSA5NzA4MDIpLgorCSsgdXBkYXRlZCB0ZXJtaW5mby5zcmMgd2l0aCByZWZvcm1hdHRlZCBhY3NjIGVudHJpZXMsIGFuZCByZXBhaXJlZCB0aGUKKwkgIHRyYXNoZWQgZW50cmllcyB3aXRoIHNwdXJpb3VzICdcJyBjaGFyYWN0ZXJzIHRoYXQgdGhpcyBleHBvc2VkLgorCSsgYWRkIGxvZ2ljIHRvIGR1bXBfZW50cnkuYyB0byByZWZvcm1hdCBhY3NjIGVudHJpZXMgaW50byBjYW5vbmljYWwKKwkgIGZvcm0gKHNvcnRlZCwgdW5pcXVlIG1hcHBpbmcpLgorCSsgYWRkIGNvbmZpZ3VyZSBzY3JpcHQgdG8gZ2VuZXJhdGUgYysrL2V0aXAuaAorCSsgYWRkIGNvbmZpZ3VyZSAtLXdpdGgtZGV2ZWxvcCBvcHRpb24sIHRvIGVuYWJsZSBieSBkZWZhdWx0IG1vc3Qgb2YgdGhlCisJICBleHBlcmltZW50YWwgb3B0aW9ucyAocmVxdWVzdGVkIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyByZW5hbWUgJ2RlaW5zdGFsbCcgdG8gJ3VuaW5zdGFsbCcsIGZvbGxvd2luZyBHTlUgY29udmVudGlvbgorCSAgKHN1Z2dlc3RlZCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCT4gcGF0Y2hlcyBieSBBbGV4YW5kZXIgVi4gTHVreWFub3Y6CisJKyBtb2RpZnkgdGFjdGljcyAyIGFuZCA1IGluIG9uc2NyZWVuX212Y3VyKCksIHRvIGFsbG93IHRoZW0gb24gdGhlIGxhc3QKKwkgIGxpbmUgb2YgdGhlIHNjcmVlbiwgc2luY2UgY2FycmlhZ2UgcmV0dXJuIHdpbGwgbm90IGNhdXNlIGEgbmV3bGluZS4KKwkrIHJlbW92ZSBjbGF1c2UgZnJvbSBQdXRDaGFyTFIoKSB0aGF0IHdvdWxkIHRyeSB0byB1c2UKKwkgIGVhdF9uZXdsaW5lX2dsaXRjaCBzaW5jZSB0aGF0IGFwcGFyZW50bHkgZG9lcyBub3Qgd29yayBvbiBzb21lCisJICB0ZXJtaW5hbHMgKGUuZy4sIE0kIHRlbG5ldCkuCisJKyBjb3JyZWN0IGEgbGltaXQgY2hlY2sgaW4gc2Nyb2xsX2Nzcl9iYWNrd2FyZCgpCisJPiBwYXRjaGVzIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIGFkZHMgZHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG1ldGhvZHMgYWJvdmUoKSBhbmQgYmVsb3coKSB0byB0aGUKKwkgIE5DdXJzZXNQYW5lbCBjbGFzcy4KKwkrIGZpeGVzIG1pc3NpbmcgcmV0dXJuY29kZSBpbiBOQ3Vyc2VzV2luZG93OjpyaXBvZmZsaW5lKCkKKwkrIGZpeGVzIG1pc3NpbmcgcmV0dXJuY29kZSBpbiBUZXN0QXBwbGljYXRpb246OnJ1bigpIGluIGRlbW8uY2MKKwkrIFdlIHNob3VsZCBhdCBsZWFzdCBnaXZlIGEgY29tbWVudCBpbiBldGlwLmggd2h5IGl0IGlzIGN1cnJlbnRseSBhCisJICBwcm9ibGVtIHRvIGluc3RhbGwgdGhlIEMrKyBiaW5kaW5nIHNvbWV3aGVyZQorCSsgbWFrZXMgdGhlIFdJTkRPVyogYXJndW1lbnQgb2Ygd2VuY2xvc2UoKSBhIGNvbnN0LgorCSsgbW9kaWZpZXMgc2V2ZXJhbCBvZiB0aGUgcm91dGluZXMgaW4gbGliX2FkYWJpbmQuYyB0byB1c2UgYSBjb25zdAorCSAgV0lORE9XKiBhcmd1bWVudC4KKworOTcwOTI3CisJKyBhZGQgJ2RlaW5zdGFsbCcgcnVsZXMuCisJKyB1c2UgZXhwbGljaXQgYXNzaWdubWVudHMgaW4gY29uZmlndXJlIC0td2l0aG91dC1wcm9ncyBvcHRpb24gdG8KKwkgIHdvcmsgYXJvdW5kIGF1dG9jb25mIGJ1ZyB3aGljaCBkb2Vzbid0IGFsd2F5cyBzZXQgJHdpdGh2YWwuCisJKyBjaGVjayBmb3IgbGRjb25maWcsIGRvbid0IHRyeSB0byBydW4gaXQgaWYgbm90IGZvdW5kLgorCSsgaW1wbGVtZW50IHNpbXBsZS91bm9wdGltaXplZCBjYXNlIGluIGxpYl9kb3VwZGF0ZS5jIHRvIGhhbmRsZQorCSAgZGlzcGxheSB3aXRoIG1hZ2ljIGNvb2tpZSBnbGl0Y2gsIHRlc3RlZCB3aXRoIG5jdXJzZXMuYyBwcm9ncmFtLgorCSsgY29ycmVjdCBtaXNzaW5nIF90cmFjZWYgaW4gZ2V0bW91c2UoKSwgdG8gYmFsYW5jZSB0aGUgcmV0dXJuQ29kZQorCSAgbWFjcm8uCisJKyBzaW1wbGlmeSBzaG93X2F0dHIoKSBpbiBuY3Vyc2VzLmMgdXNpbmcgdGVybWF0dHJzKCkuCisJPiBwYXRjaGVzIGJ5IEp1ZXJnZW4gUGZlaWZlcjoKKwkrIHByb3ZpZGVzIG1pc3NpbmcgaW5saW5lcyBmb3IgbXZ3W2h2XWxpbmUgaW4gY3Vyc2Vzdy5oIG9mIHRoZSBDKysKKwkgIGJpbmRpbmcKKwkrIGZpeGVzIGEgdHlwbyBpbiBhIGNvbW1lbnQgb2YgZnJtX2RyaXZlci5jCisJKyBFbmhhbmNlcyBBZGE5NSBNYWtlZmlsZXMgdG8gZnVsZmlsbCB0aGUgcmVxdWlyZW1lbnQgb2YgR05BVC0zLjEwIHRoYXQKKwkgIGdlbmVyaWNzIHNob3VsZCBiZSBjb21waWxlZC4gIFByb3BlciBmaXhlcyB0byB0aGUgY29uZmlndXJhdGlvbgorCSAgc2NyaXB0cyBhcmUgYWxzbyBwcm92aWRlZC4KKworOTcwOTIwCisJKyBzZXZlcmFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgKHJlcXVlc3RlZCBieSBXYXJkCisJICBIb3JuZXIpOgorCSAgKyBhZGQgY29uZmlndXJlIG9wdGlvbnMgLS13aXRob3V0LXByb2dzLCB0byBzdXBwcmVzcyB0aGUgYnVpbGQgb2YgdGhlCisJICAgIHV0aWxpdHkgcHJvZ3JhbXMsIGUuZy4sIGZvciBjcm9zcy1jb21waWxpbmcuCisJICArIGFkZCAkKEhPU1RDQ0ZMQUdTKSBhbmQgJChIT1NUTERGTEFHUykgc3ltYm9scyB0byBuY3Vyc2VzCisJICAgIE1ha2VmaWxlLmluLCB0byBzaW1wbGlmeSBzZXR1cCBmb3IgY3Jvc3MgY29tcGlsaW5nLgorCSAgKyBhZGQgbG9naWMgaW4gY29uZmlndXJlIHNjcmlwdCB0byByZWNvZ25pemUgIi0tdGFyZ2V0PXZ4d29ya3MiLCBhbmQKKwkgICAgZ2VuZXJhdGUgbG9hZC9pbnN0YWxsIGFjdGlvbnMgZm9yIFZ4V29ya3Mgb2JqZWN0cy4KKwkrIG1vdmUgdHlwZWRlZiBmb3Igc2lnYWN0aW9uX3QgaW50byBTaWdBY3Rpb24uaCB0byB3b3JrIGFyb3VuZCBwcm9ibGVtCisJICBnZW5lcmF0aW5nIGxpbnQgbGlicmFyeS4KKwkrIG1vZGlmeSBmdHlfcmVnZXguYyB0byByZWZsZWN0IHJlbmFtaW5nIG9mIGlmZGVmJ3MgZm9yIHJlZ3VsYXIKKwkgIGV4cHJlc3Npb25zLgorCSsgc2ltcGxpZnkgaWZkZWYgaW4gbGliX3NldHVwLmMgZm9yIFRJT0NHV0lOU1ogc2luY2UgdGhhdCBzeW1ib2wgbWF5CisJICByZXNpZGUgaW4gPHN5cy9pb2N0bC5oPi4KKwkrIG1lcmdlIHRlc3RjdXJzLmMgd2l0aCB2ZXJzaW9uIGZyb20gUERDdXJzZXMgMi4zLCBjbGFyaWZ5aW5nIHNvbWUgb2YKKwkgIHRoZSBtb3JlIG9ic2N1cmUgdGVzdHMsIHdoaWNoIHJlbHkgdXBvbiBjb2xvci4KKwkrIHVzZSBtYWNyb3MgZ2V0YmVneXgoKSBhbmQgZ2V0bWF4eXgoKSBpbiBuZXdkZW1vLmMgYW5kIHRlc3RjdXJzLmMKKwkrIG1vZGlmeSBuY3Vyc2VzLmMgdG8gdXNlIGdldGJlZ3l4KCkgYW5kIGdldG1heHl4KCkgbWFjcm9zIHRvIGNvdmVyIHVwCisJICBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlIHdydCBTVnI0IGN1cnNlcywgYWxsb3cgJ3MnIHRlc3QgdG8gd29yay4KKwkrIGFkZCBtaXNzaW5nIGVuZHdpbigpIHRvIHRlc3RzY2Fudy5jIHByb2dyYW0gKHJlcG9ydGVkIGJ5IEZhdXN0bworCSAgU2Fwb3JpdG8gPGZhdXNhcEBpdGIuaXQ+KS4KKwkrIGZpeGVzL3VwZGF0ZXMgZm9yIE1ha2VmaWxlLmdsaWJjIGFuZCByZWxhdGVkIGZpbGVzIHVuZGVyIHN5c2RlcHMKKwkgIChwYXRjaCBieSBILkouTHUpLgorCT4gcGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBhZGQgY2hlY2tzIGZvciBudWxsIHBvaW50ZXJzLCBlc3BlY2lhbGx5IFdJTkRPVydzIHRocm91Z2hvdXQgdGhlCisJICBuY3Vyc2VzIGxpYnJhcnkuCisJKyBzb2x2ZSBhIHByb2JsZW0gd2l0aCB3cm9uZyBjYWxjdWxhdGlvbiBvZiBwYW5lbCBvdmVybGFwcGluZyAocmVwb3J0ZWQKKwkgIGJ5IFdhcmQgSG9ybmVyKToKKwkgICsgbWFrZSBzdXJlIHRoYXQgYSBwYW5lbCdzIHdpbmRvdyBpc24ndCBhIHBhZC4KKwkgICsgZG8gbW9yZSBlcnJvciBjaGVja2luZyBpbiBtb2R1bGUgbGliX3RvdWNoLmMKKwkrIG1pc3NpbmcgZmlsZXMgZm9yIEFkYTk1IGJpbmRpbmcgZnJvbSB0aGUgbGFzdCBwYXRjaAorCSsgc3luY2guIG9mIGdlbmVyYXRlZCBodG1sIHBhZ2VzIChSQ1MtSWQncyB3ZXJlIHdyb25nIGluIGh0bWwgZmlsZXMpCisJKyBzdXBwb3J0IGZvciBLZXlfUmVzaXplIGluIEFkYSBiaW5kaW5nCisJKyBjaGFuZ2VkIGRvY3VtZW50YXRpb24gc3R5bGUgaW4gLi9jKysvY3Vyc2VzbS5oCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIHVuZG8gYXR0ZW1wdCB0byBkbyByZWN1cnNpdmUgaW5saW5pbmcgZm9yIFB1dENoYXIoKSwgbm90aW5nIHRoYXQgaXQKKwkgIGRpZCBub3QgaW1wcm92ZSB0aW1pbmcgbWVhc3VyYWJseSwgYnV0IGluZmxhdGVkIHRoZSBzaXplIG9mCisJICBsaWJfZG91cGRhdGUubworCis5NzA5MTMKKwkrIG1vZGlmeSByYWluLmMgdG8gdXNlIGNvbG9yLgorCSsgY29ycmVjdCBzY3JvbGxfY3NyX2JhY2t3YXJkKCkgdG8gbWF0Y2ggc2Nyb2xsX2Nzcl9mb3J3YXJkKCkuCisJKyBtaW5vciBhZGp1c3RtZW50IHRvIGxsaWItbG5jdXJzZXMsIHRvIHdvcmsgd2l0aCBTb2xhcmlzIDIuNS4xCisJKyBtaW5vciBmaXhlcyB0byBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9jb25maWd1cmUgdG8gcmVmbGVjdCByZW5hbWluZworCSAgb2YgY29uZmlndXJlIGNhY2hlIHZhcmlhYmxlcyBpbiA5NzA5MDYuCisJKyBjb3JyZWN0IGxvZ2ljIGludm9sdmluZyBjaGFuZ2VzIHRvIE9fVklTSUJMRSBvcHRpb24gaW4KKwkgIFN5bmNocm9uaXplX09wdGlvbnMgZnVuY3Rpb24gaW4gZnJtX2RyaXZlci5jIChUb255IEhvZmZtYW5uCisJICA8VG9ueS5Ib2ZmbWFubkBoaWEubnJjLmNhPikKKwkrIGFkZCAkKEhPU1RDQykgc3ltYm9sIHRvIG5jdXJzZXMgTWFrZWZpbGUuaW4sIHRvIHNpbXBsaWZ5IHNldHVwIGZvcgorCSAgY3Jvc3MgY29tcGlsaW5nIChzdWdnZXN0ZWQgYnkgQ2hyaXMgSm9obnMpLgorCSsgbW9kaWZ5IGlmZGVmIGluIGxpYl9zZXR1cC5jIHRvIG9ubHkgaW5jbHVkZSA8c3lzL2lvY3RsLmg+IGlmIHdlIGNhbgorCSAgdXNlIGl0IHRvIHN1cHBvcnQgc2NyZWVuLXNpemUgY2FsY3VsYXRpb24gKHJlcG9ydGVkIGJ5IENocmlzIEpvaG5zKS4KKwkrICN1bmRlZiB1bmN0cmwgdG8gYXZvaWQgc3ltYm9sIGNvbmZsaWN0IGluIHBvcnQgdG8gUlRFTVMgKHJlcG9ydGVkIGJ5CisJICBDaHJpcyBKb2hucyA8Y2pvaG5zQHBsZXNzZXkuY29tLmF1PikKKwk+IHBhdGNoZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgc2ltcGxpZmllZCwgbWFkZSBtaW5vciBjb3JyZWN0aW9ucyB0byBBZGE5NSBiaW5kaW5nIHRvIGZvcm0KKwkgIGZpZWxkdHlwZS4KKwkrIFRoZSBDKysgYmluZGluZyBoYXMgYmVlbiBlbmhhbmNlZDoKKwkgICsgSW1wcm92ZSBOQ3Vyc2VzV2luZG93IGNsYXNzOiAgYWRkZWQgYWRkaXRpb25hbCBtZXRob2RzIHRvIGNvdmVyCisJICAgIG1vcmUgbmN1cnNlcyBmdW5jdGlvbmFsaXR5LiAgTWFrZSByZWZyZXNoKCkgYW5kIG5vdXRyZWZyZXNoKCkKKwkgICAgdmlydHVhbCBtZW1iZXJzIHRvIGFsbG93IGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBpbiB0aGUKKwkgICAgTkN1cnNlc1BhbmVsIGNsYXNzLgorCSAgKyBDQVVUSU9OOiAgY2hhbmdlZCBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIHZsaW5lKCkgYW5kIGhsaW5lKCkgb2YKKwkgICAgTkN1cnNlc1dpbmRvdyBjbGFzcy4KKwkgICsgTWFrZSByZWZyZXNoKCkgaW4gTkN1cnNlc1BhbmVsIG5vbi1zdGF0aWMsIGl0IGlzIG5vdyBhCisJICAgIHJlaW1wbGVtZW50YXRpb24gb2YgcmVmcmVzaCgpIGluIHRoZSBiYXNlIGNsYXNzLiAgQWRkZWQKKwkgICAgbm91dHJlZnJlc2goKSB0byBOQ3Vyc2VzUGFuZWwuCisJICArIEFkZGVkIE5DdXJzZXNGb3JtIGFuZCByZWxhdGVkIGNsYXNzZXMgdG8gc3VwcG9ydCBsaWJmb3JtCisJICAgIGZ1bmN0aW9uYWxpdHkuCisJICArIE1vdmVkIG1vc3Qgb2YgY29uZmlndXJhdGlvbiByZWxhdGVkIHN0dWZmIGZyb20gY3Vyc2Vzdy5oIHRvIGV0aXAuaAorCSAgKyBBZGRlZCBOQ3Vyc2VzQXBwbGljYXRpb24gY2xhc3MgdG8gc3VwcG9ydCBlYXN5IGNvbmZpZ3VyYXRpb24gb2YKKwkgICAgbWVudSBhbmQgZm9ybXMgcmVsYXRlZCBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgcmlwcGVkIG9mIHRpdGxlIGxpbmVzCisJICAgIGFuZCBTb2Z0LUxhYmVsLUtleXMgZm9yIGFuIGFwcGxpY2F0aW9uLgorCSAgKyBTdXBwb3J0IG9mIEF1dG8tQ2xlYW51cCBmb3IgYSBtZW51J3MgZmllbGRsaXN0LgorCSAgKyBDaGFuZ2Ugb2YgcmV0dXJuIHR5cGUgZm9yIGN1cnJlbnRfaXRlbSgpIGFuZCBvcGVyYXRvcltdIGZvciBtZW51cy4KKwkgICsgRW5oYW5jZWQgZGVtby4KKwkrIEZpeGVkIGEgYnVnIGluIGZvcm0vZmxkX2RlZi5jOiAgdGFrZSBpbnRvIGFjY291bnQgdGhhdCBjb3B5YXJnIGFuZAorCSAgZnJlZWFyZyBmb3IgYSBmaWVsZHR5cGUgbWF5IGJlIE5VTEwsIG1ha2VhcmcgbXVzdCBub3QgYmUgTlVMTAorCSsgRml4ZWQgYSBidWcgaW4gZm9ybS9mbGRfdHlwZS5jOiAgaW4gc2V0X2ZpZWxkdHlwZV9hcmcoKSBtYWtlYXJnIG11c3QKKwkgIG5vdCBiZSBOVUxMLCBjb3B5YXJnIGFuZCBmcmVlYXJnIG1heSBiZSBOVUxMLgorCSsgRml4ZWQgYSBidWcgaW4gZm9ybS9mcm1fZGVmLmM6ICBBbGxvdyBEaXNjb25uZWN0X0ZpZWxkcygpIGlmIGl0IGlzCisJICBhbHJlYWR5IGRpc2Nvbm5lY3RlZC4KKwkrIEVuaGFuY2UgZm9ybS9mcm1fZHJpdmVyLmM6ICBBbGxvdyBncm93dGggb2YgZHluYW1pYyBmaWVsZHMgYWxzbyBvbgorCSAgbmF2aWdhdGlvbiByZXF1ZXN0cy4KKwkrIEZpeGVkIGEgYnVnIGluIGZvcm0vZnR5X2VudW0uYzogIHdyb25nIHBvc2l0aW9uIG9mIHBvc3RpbmNyZW1lbnQgaW4KKwkgIGNhc2UtaW5zZW5zaXRpdmEgY29tcGFyaXNpb24gcm91dGluZS4KKwkrIEVuaGFuY2VkIGZvcm0vbGliX2FkYWJpbmQuYyB3aXRoIGZ1bmN0aW9uIF9uY19nZXRfZmllbGQoKSB0byBnZXQgYQorCSAgZm9ybXMgZmllbGQgYnkgaW5kZXguCisJKyBFbmhhbmNlZCBtZW51L21fYWRhYmluZC5jIHdpdGggZnVuY3Rpb24gX25jX2dldF9pdGVtKCkgdG8gZ2V0IGEgbWVudXMKKwkgIGl0ZW0gYnkgaW5kZXguCisJKyBGaXhlZCBpbiBjdXJzZXMuaC5pbjogIG1ha2UgY2h0eXBlIGFyZ3VtZW50IGZvciBwZWNob2NoYXIoKSBjb25zdGFudC4KKwkgIE1hcmsgd2JrZ2RzZXQoKSBhcyBpbXBsZW1lbnRlZCwgcmVtb3ZlIHdia2dkc2V0IG1hY3JvLCBiZWNhdXNlIGl0IHdhcworCSAgYnJva2VuIChkaWRuJ3QgaGFuZGxlIGNvbG9ycyBjb3JyZWN0bHkpLgorCSsgRW5oYW5jZWQgbGliX21vdXNlLmM6IGFkZGVkIF9uY19oYXNfbW91c2UoKSBmdW5jdGlvbgorCSsgQWRkZWQgX25jX2hhc19tb3VzZSgpIHByb3RvdHlwZSB0byBjdXJzZXMucHJpdi5oCisJKyBNb2RpZmllZCBsaWJfYmtnZC5jOiAgaG9wZWZ1bGx5IGNvcnJlY3QgaW1wbGVtZW50YXRpb24gb2Ygd2JrZ2RzZXQoKTsKKwkgIHN0cmVhbWxpbmVkIGltcGxlbWVudGF0aW9uIG9mIHdia2dkKCkKKwkrIE1vZGlmaWVkIGxpYl9tdndpbi5jOiAgRGlzYWJsZSBtb3ZlIG9mIGEgcGFkLiAgSW1wbGVtZW50IChjb3N0bHkpCisJICBtb3ZlIG9mIHN1YndpbmRvd3MuICBGaXhlZCB1cGRhdGUgYmVoYXZpb3Igb2YgbW92ZW1lbnRzIG9mIHJlZ3VsYXIKKwkgIHdpbmRvd3MuCisJKyBGaXhlZCBsaWJfcGFkLmM6ICBtYWtlIGNodHlwZSBhcmd1bWVudCBvZiBwZWNob2NoYXIoKSBjb25zdC4KKwkrIEZpeGVkIGxpYl93aW5kb3cuYzogIGR1cHdpbigpIGlzIG5vdCghKSBpbiBldmVyeSBiaXQgYSByZWFsbHkgY2xvbmUKKwkgIG9mIHRoZSBvcmlnaW5hbC4gIFN1YndpbmRvd3MgYmVjb21lIHJlZ3VsYXIgd2luZG93cyBieSBkb2luZyBhCisJICBkdXB3aW4oKS4KKwkrIEltcHJvdmVkIG1hbnBhZ2UgZm9ybV9maWVsZHR5cGUuM3gKKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92OgorCSsgc2ltcGxpZnkgdGhlIFB1dENoYXIoKSBoYW5kbGluZyBvZiBleGl0X2FtX21vZGUsIGJlY2F1c2Ugd2UgYWxyZWFkeQorCSAga25vdyB0aGF0IGF1dG9fcmlnaHRfbWFyZ2luIGlzIHRydWUuCisJKyBhZGQgYSBjaGVjayBpbiBQdXRDaGFyKCkgZm9yIGFiaWxpdHkgdG8gaW5zZXJ0IHRvIHRoZSBjYXNlIG9mCisJICBzaGlmdGluZyBjaGFyYWN0ZXIgdG8gTFIgY29ybmVyLgorCSsgaW4gdGVybWluYWwgaW5pdGlhbGl6YXRpb24gYnkgX25jX3NjcmVlbl9yZXN1bWUoKSwgbWFrZSBzdXJlIHRoYXQKKwkgIHRlcm1pbmFsIHJpZ2h0IG1hcmdpbiBtb2RlIGlzIGtub3duLgorCSsgbW92ZSBsb2dpYyB0aGF0IGludm9rZXMgdG91Y2hsaW5lKCksIG9yIGRvZXMgdGhlIGVxdWl2YWxlbnQsIGludG8KKwkgIF9uY19zY3JvbGxfd2luZG93KCkuCisJKyBtb2RpZnkgc2Nyb2xsaW5nIGxvZ2ljIHVzZSBvZiBpbnNlcnQvZGVsZXRlIGxpbmUgY2FwYWJpbGl0eSwgYXNzdW1pbmcKKwkgIHRoYXQgdGhleSBhZmZlY3QgdGhlIHNjcmVlbiBjb250ZW50cyBvbmx5IHdpdGhpbiB0aGUgY3VycmVudAorCSAgc2Nyb2xsaW5nIHJlZ2lvbi4KKwkrIG1vZGlmeSByYWluLmMgdG8gZGVtb25zdHJhdGUgU0lHV0lOQ0ggaGFuZGxlci4KKwkrIHJlbW92ZSBsb2dpYyBmcm9tIGdldGNoKCkgdGhhdCB3b3VsZCByZXR1cm4gYW4gRVJSIGlmIHRoZSBhcHBsaWNhdGlvbgorCSAgY2FsbGVkIGdldGNoKCkgd2hlbiB0aGUgY3Vyc29yIHdhcyBhdCB0aGUgbG93ZXItcmlnaHQgY29ybmVyIG9mIHRoZQorCSAgcGh5c2ljYWwgc2NyZWVuLCBhbmQgdGhlIHRlcm1pbmFsIGRvZXMgbm90IGhhdmUgaW5zZXJ0LWNoYXJhY3RlcgorCSAgYWJpbGl0eS4KKwkrIGNoYW5nZSB2aWV3LmMgc28gdGhhdCBpdCBicmVha3Mgb3V0IG9mIGdldGNoKCkgbG9vcCBpZiBhIEtFWV9SRVNJWkUKKwkgIGlzIHJlYWQsIGFuZCBtb2RpZnkgbG9naWMgaW4gZ2V0Y2goKSBzbyB0aGlzIGZpeCB3aWxsIHlpZWxkIHRoZQorCSAgZGVzaXJlZCBiZWhhdmlvciwgaS5lLiwgdGhlIHNjcmVlbiBpcyByZXBhaW50ZWQgYXV0b21hdGljYWxseSB3aGVuCisJICB0aGUgdGVybWluYWwgd2luZG93IGlzIHJlc2l6ZWQuCisKKzk3MDkwNgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtc2lnd2luY2gKKwkrIG1vZGlmeSB2aWV3LmMgdG8gdGVzdCBLRVlfUkVTSVpFIGxvZ2ljLCB3aXRoICItciIgb3B0aW9uLgorCSsgbW9kaWZ5IHRlc3RjdXJzLmMgdG8gZWxpbWluYXRlIG1pc2xlYWRpbmcgZGlzcGxheSB3cnQgY3Vyc29yIHR5cGUKKwkgIGJ5IHRlc3RpbmcgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIGNub3JtLCBjaXZpcywgY3Z2aXMuCisJKyBzZXZlcmFsIGZpeGVzIGZvciBtNjhrL05lWFQgNC4wLCB0byBicmluZyBjdXJfdGVybSwgX25jX2N1cnJfbGluZSBhbmQKKwkgIF9uY19jdXJyX2NvbCB2YXJpYWJsZXMgaW50byBsaW5rZWQgcHJvZ3JhbXM6ICBtb3ZlIHRoZXNlIHZhcmlhYmxlcywKKwkgIG1ha2luZyBuZXcgbW9kdWxlcyBsaWJfY3VyX3Rlcm0gYW5kIHRyYWNlX2J1ZiAocmVwb3J0ZWQgYnkgRnJhbmNpc2NvCisJICBBbGJlcnRvIFRvbWVpIFRvcnJlcyA8ZmF0b21laUBzYW5kYnVyZy51bm0uZWR1PikuCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIGFkZCBwc2V1ZG8tZnVuY3Rpb25rZXkgS0VZX1JFU0laRSB3aGljaCBpcyByZXR1cm5lZCBieSBnZXRjaCgpIHdoZW4KKwkgIHRoZSBTSUdXSU5DSCBoYW5kbGVyIGhhcyBiZWVuIGNhbGxlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvCisJICBkb3VwZGF0ZSgpLgorCSsgbW9kaWZ5IGxpYl90d2FpdC5jIHRvIGhpZGUgRUlOVFIgb25seSBpZiBISURFX0VJTlRSIGlzIGRlZmluZWQuCisJKyBhZGQgU0lHV0lOQ0ggaGFuZGxlciB0byBuY3Vyc2VzIGxpYnJhcnkgd2hpY2ggaXMgdXNlZCBpZiB0aGVyZSBpcyBubworCSAgYXBwbGljYXRpb24gU0lHV0lOQ0ggaGFuZGxlciBpbiBlZmZlY3Qgd2hlbiB0aGUgc2NyZWVuIGlzCisJICBpbml0aWFsaXplZC4KKwkrIG1ha2UgbGlua2VkIGxpc3Qgb2YgYWxsIFNDUkVFTiBzdHJ1Y3R1cmVzLgorCSsgbW92ZSBjdXJzZXMuaCBpbmNsdWRlIGJlZm9yZSBkZWZpbml0aW9uIG9mIFNDUkVFTiB0byB1c2UgdHlwZXMgaW4KKwkgIHRoYXQgc3RydWN0dXJlLgorCSsgY29ycmVjdGlvbiB0byBlbnN1cmUgdGhhdCB3Z2V0c3RyIHVzZXMgb25seSBhIG5ld2xpbmUgdG8gZm9yY2UgYQorCSAgc2Nyb2xsICg5NzA4MzEpLgorCis5NzA4MzEKKwkrIGFkZCBleHBlcmltZW50YWwgY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1zYWZlLXNwcmludGY7IHRoZSBub3JtYWwKKwkgIG1vZGUgbm93IGFsbG9jYXRlcyBhIGJ1ZmZlciBhcyBsYXJnZSBhcyB0aGUgc2NyZWVuIGZvciB0aGUKKwkgIGxpYl9wcmludHcuYyBmdW5jdGlvbnMuCisJKyBtb2RpZnkgd2dldGNoIHRvIHJlZnJlc2ggc2NyZWVuIHdoZW4gcmVhZGluZyB1bmdldGNoJ2QgY2hhcmFjdGVycywKKwkgIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVxdWlyZSB0aGlzIC0gU1ZyNCBkb2VzIHRoaXMuCisJKyByZWZpbmUgdHJlYXRtZW50IG9mIG5ld2xpbmUgaW4gd2dldHN0ciB0byBlY2hvIG9ubHkgd2hlbiB0aGlzIHdvdWxkCisJICBmb3JjZSB0aGUgc2NyZWVuIHRvIHNjcm9sbC4KKworOTcwODMwCisJKyByZW1vdmUgb3ZlcnJpZGUgaW4gd2dldHN0cigpIHRoYXQgZm9yY2VzIGtleXBhZCgpLCBzaW5jZSBTVnI0IGRvZXMKKwkgIG5vdCBkbyB0aGlzLgorCSsgY29ycmVjdCB5LXJlZmVyZW5jZSBmb3IgZXJhc3VyZSBpbiB3Z2V0c3RyKCkgd2hlbiBhIHdyYXAgZm9yY2VzIGEKKwkgIHNjcm9sbC4KKwkrIGNvcnJlY3QgeC1wb3NpdGlvbiBpbiB3YWRkY2goKSBhZnRlciBhIHdyYXAgZm9yY2VzIGEgc2Nyb2xsLgorCSsgZWNobyBuZXdsaW5lIGluIHdnZXRzdHIoKSwgbWFraW5nIHRlc3RzY2Fudy5jIHNjcm9sbCBwcm9wZXJseSB3aGVuCisJICBzY2FudyBpcyBkb25lLgorCSsgbW9kaWZ5IHZ3c2NhbncoKSB0byBhdm9pZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93LgorCSsgcmV3cm90ZSBsaWJfcHJpbnR3LmMgdG8gZWxpbWluYXRlIGZpeGVkLWJ1ZmZlciBsaW1pdHMuCisJPiBwYXRjaGVzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIGNvcnJlY3QgYW4gZXJyb3IgaW4gaGFuZGxpbmcgY29va2VkIG1vZGUgaW4gd2dldGNoKCk7IHByb2Nlc3NpbmcKKwkgIHdhcyBpbiB0aGUgd3Jvbmcgb3JkZXIuCisJKyBzaW1wbGlmaWVkIGxvZ2ljIGluIHdnZXRjaCgpIHRoYXQgaGFuZGxlcyBiYWNrc3BhY2UsIGV0Yy4sIGJ5IHVzaW5nCisJICB3ZWNob2NoYXIoKS4KKwkrIGNvcnJlY3Qgd2VjaG9jaGFyKCkgc28gdGhhdCBpdCBpbnRlcnByZXRzIHRoZSBvdXRwdXQgY2hhcmFjdGVyIGFzCisJICBpbiB3YWRkY2goKS4KKwkrIG1vZGlmeSBwZWNob2NoYXIoKSB0byB1c2UgcHJlZnJlc2goKSByYXRoZXIgdGhhbiBkb3VwZGF0ZSgpLCBzaW5jZQorCSAgdGhlIGxhdHRlciBkb2VzIG5vdCBndWFyYW50ZWUgaW1tZWRpYXRlIHJlZnJlc2ggb2YgdGhlIHBhZC4KKwkrIG1vZGlmeSBwZWNob2NoYXIoKSBzbyB0aGF0IGlmIGNhbGxlZCB3aXRoIGEgbm9uLXBhZCBXSU5ET1csIHdpbGwKKwkgIGludm9rZSB3ZWNob2NoYXIoKSBpbnN0ZWFkLgorCSsgbW9kaWZ5IGZpZm8gaW5kaWNlcyB0byBhbGxvdyBmaWZvIHRvIGJlIGxvbmdlciB0aGFuIDEyNyBieXRlcy4KKworOTcwODIzCisJKyBhZGQgeHRlcm0tOGJpdCB0byB0ZXJtaW5mby5zcmMKKwkrIG1vdmVkIGxvZ2ljIGZvciBTUC0+X2ZpZm9ob2xkIGluc2lkZSBjaGVja19wZW5kaW5nKCkgdG8gbWFrZSBpdAorCSAgd29yayBwcm9wZXJseSB3aGVuIHdlIGFkZCBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLgorCSsgZW5zdXJlIHRoYXQgYm9vbCBmdW5jdGlvbnMgcmV0dXJuIG9ubHkgVFJVRSBvciBGQUxTRSwgYW5kIFRSVUUvRkFMU0UKKwkgIGFyZSBhc3NpZ25lZCB0byBib29sIHZhbHVlcyAocGF0Y2ggYnkgSC5KLkx1KS4KKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92OgorCSsgc2V2ZXJhbCBmaXhlcyB0byBnZXRjaDoKKwkgIDEuICBTZXBhcmF0ZSBjb29rZWQgYW5kIHJhdyBrZXlzIGluIGZpZm8KKwkgIDIuICBGaXggdGhlIGNhc2Ugb2YgdW5nZXRjaCdlZCBLRVlfTU9VU0UKKwkgIDMuICB3cmFwIHRoZSBjb2RlIGZvciBoaWRpbmcgRUlOVFIgd2l0aCBpZmRlZiBISURFX0VJTlRSCisJICA0LiAgY29ycmVjdGx5IGhhbmRsZSBpbnB1dCBlcnJvcnMgKGkuZS4sIEVJTlRSKSB3aXRob3V0IGxvc3Mgb2YgcmF3CisJICAgICAga2V5cworCSAgNS4gIHJlY29nbml6ZSBFU0MgS0VZX0xFRlQgYW5kIHNpbWlsYXIKKwkgIDYuICBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIG9mIHJlY2VpcHRpb24gb2YgS0VZX01PVVNFIGZyb20gZ3BtCisJKyBjb3JyZWN0IG9mZi1ieS1vbmUgaW5kZXhpbmcgZXJyb3IgaW4gX25jX21vdXNlX3BhcnNlKCksIHRoYXQgY2F1c2VkCisJICBzaW5nbGUgbW91c2UgZXZlbnRzIChwcmVzcy9yZWxlYXNlKSB0byBiZSBpZ25vcmVkIGluIGZhdm9yIG9mCisJICBjb21wb3NlZCBldmVudHMgKGNsaWNrKS4gIEltcHJvdmVzIG9uIGEgZml4IGZyb20gaW50ZWdyYXRpbmcgZ3BtCisJICBzdXBwb3J0IGluIDk2MTIyOS4KKwkrIGFkZCBhbm90aGVyIGNhbGwgdG8gY2hlY2tfcGVuZGluZywgYmVmb3JlIHNjcm9sbGluZywgZm9yCisJICBsaW5lLWJyZWFrb3V0IG9wdGltaXphdGlvbgorCSsgaW1wcm92ZSBoYXNobWFwLmMgYnkKKwkgIDEuICBmaXhlZCBsb29wIGNvbmRpdGlvbiBpbiBncm93X2h1bmtzKCkKKwkgIDIuICBub3QgbWFya2luZyBsaW5lcyB3aXRoIG9mZnNldCAwCisJICAzLiAgZml4ZWQgY29uZGl0aW9uIG9mICd0b28gZmFyJyBjcml0ZXJpYSwgdGh1cyBvbmUtbGluZSBodW5rcyBhcmUKKwkgIGlnbm9yZWQgYW5kIHR3byBsaW5lcyBpbnRlcmNoYW5nZWQgd29uJ3QgcGFzcy4KKwkrIHJld3JvdGUvc2ltcGxpZmllZCBfbmNfc2Nyb2xsX29wdGltaXplKCkgYnkgc2VwYXJhdGluZyBpbnRvIHR3bworCSAgcGFzc2VzLCBmb3J3YXJkL2JhY2t3YXJkLCBsb29raW5nIGZvciBjaHVua3MgbW92aW5nIG9ubHkgaW4gdGhlIGdpdmVuCisJICBkaXJlY3Rpb24uCisJKyBtb3ZlIGxvZ2ljIHRoYXQgZW1pdHMgc2dyMCB3aGVuIGluaXRpYWxpemluZyB0aGUgc2NyZWVuIHRvCisJICBfbmNfc2NyZWVuX2luaXQoKSwgbm93IGludm9rZWQgZnJvbSBuZXd0ZXJtLgorCSsgbW92ZSBjdXJzb3ItbW92ZW1lbnQgY2xlYW51cCBmcm9tIGVuZHdpbigpIGludG8gX25jX212Y3VyX3dyYXAoKQorCSAgZnVuY3Rpb24gYW5kIHNjcmVlbiBjbGVhbnVwIChpLmUuLCBjb2xvcikgaW50byBfbmNfc2NyZWVuX3dyYXAoKQorCSAgZnVuY3Rpb24uCisJKyBhZGQgbmV3IGZ1bmN0aW9ucyBfbmNfc2NyZWVuX2luaXQoKSwgX25jX3NjcmVlbl9yZXN1bWUoKSBhbmQKKwkgIF9uY19zY3JlZW5fd3JhcCgpLgorCSsgcmVuYW1lIF9uY19tdmN1cl9zY3JvbGxuKCkgdG8gX25jX3Njcm9sbG4oKS4KKwkrIGFkZCBhIGNvcHkgb2YgYWNzX21hcFtdIHRvIHRoZSBTQ1JFRU4gc3RydWN0dXJlLCB3aGVyZSBpdCBjYW4gYmUKKwkgIHN0b3JlZC9yZXRyaWV2ZWQgdmlhIHNldF90ZXJtKCkuCisJKyBtb3ZlIHZhcmlhYmxlcyBfbmNfaWRjb2ssIF9uY19pZGxvaywgX25jX3dpbmRvd3MgaW50byB0aGUgU0NSRUVOCisJICBzdHJ1Y3R1cmUuCisKKzk3MDgxNgorCSsgaW1wbGVtZW50IGV4cGVyaW1lbnRhbCBfbmNfcGVyZm9ybV9zY3JvbGwoKS4KKwkrIG1vZGlmeSBuZXd0ZXJtIChhY3R1YWxseSBfbmNfc2V0dXBzY3JlZW4oKSkgdG8gZW1pdCBhbiBzZ3IwIHdoZW4KKwkgIGluaXRpYWxpemluZyB0aGUgc2NyZWVuLCBhcyBkb2VzIFNWcjQgKHJlcG9ydGVkIGJ5IEFsZXhhbmRlciBWLgorCSAgTHVreWFub3YpLgorCSsgYWRkZWQgdGVzdF9wcm9ncyBydWxlIHRvIG5jdXJzZXMvTWFrZWZpbGUuCisJKyBtb2RpZnkgdGVzdC9jb25maWd1cmUuaW4gdG8gY2hlY2sgaWYgaW5pdHNjciBpcyBhbHJlYWR5IGluICRMSUJTCisJICBiZWZvcmUgbG9va2luZyBmb3IgKG4pY3Vyc2VzIGxpYnJhcnkuCisJKyBjb3JyZWN0IHZlcnNpb24tbnVtYmVyIGluIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIE9TRjEgc2hhcmVkLWxpYnJhcnkKKwkgIG9wdGlvbnMgKHBhdGNoIGJ5IFRpbSBNb29uZXkpLgorCSsgYWRkIC1ETkRFQlVHIHRvIENQUEZMQUdTIGZvciAtLWVuYWJsZS1hc3NlcnRpb25zIChhcyBKdWVyZ2VuCisJICBvcmlnaW5hbGx5IHBhdGNoZWQpIHNpbmNlIHRoZSBjKysgZGVtbyBmaWxlcyBkbyBub3QgbmVjZXNzYXJpbHkKKwkgIGluY2x1ZGUgbmN1cnNlc19jZmcuaAorCSsgc3VwcGx5IGRlZmF1bHQgdmFsdWUgZm9yIC0tZW5hYmxlLWFzc2VydGlvbnMgb3B0aW9uIGluIGNvbmZpZ3VyZQorCSAgc2NyaXB0IChyZXBvcnRlZCBieSBLcmlhbmcgTGVyZHN1d2FuYWtpaiA8bGVyZHN1d2FAc2NmLWZzLnVzYy5lZHU+KS4KKwk+IHBhdGNoZXMgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92OgorCSsgY29ycmVjdC9zaW1wbGlmeSBsb2dpYyBvZiB3ZXJhc2UoKSwgd2NscnRvZW9sKCkgYW5kIHdjbHJib3QoKS4gIFNlZQorCSAgZXhhbXBsZSBmaXJzdGxhc3QuYworCSsgb3B0aW1pemUgd2FkZGNoX2xpdGVyYWwoKSBhbmQgd2FkZGNoX25vc3luYygpIGJ5IGZhY3RvcmluZyBvdXQKKwkgIGNvbW1vbiBzdWJleHByZXNzaW9ucy4KKwkrIGNvcnJlY3Qgc2Vuc2Ugb2YgTkRFQlVHIGlmZGVmIGZvciBDSEVDS19QT1NJVElPTiBtYWNyby4KKwkrIGNvcnJlY3Rpb25zIHRvIHJlbmRlcl9jaGFyKCksIHRvIG1ha2UgaGFuZGxpbmcgb2YgY29sb3JlZCBibGFua3MKKwkgIG1hdGNoIFNWcjQgY3Vyc2VzLCBhcyB3ZWxsIGFzIHRvIGNvcnJlY3QgYSBidWcgdGhhdCB4b3InZCBzcGFjZQorCSAgYWdhaW5zdCB0aGUgYmFja2dyb3VuZCBjaGFyYWN0ZXIuCisJKyByZXBsYWNlZCBoYXNoIGZ1bmN0aW9uIHdpdGggYSBmYXN0ZXIgb25lICh0aW1lZCBpdCkKKwkrIHJld3JvdGUgdGhlIGhhc2htYXAgYWxnb3JpdGhtIHRvIGJlIG9uZS1wYXNzLCB0aGlzIGF2b2lkcyBtdWx0aXBsZQorCSAgY29zdF9lZmZlY3RpdmUoKSBjYWxscyBvbiB0aGUgc2FtZSBsaW5lcy4KKwkrIG1vZGlmaWVkIGNvc3RfZWZmZWN0aXZlKCkgc28gaXQgaXMgbm93IHNsaWdodGx5IG1vcmUgcHJlY2lzZS4KKwk+IHBhdGNoZXMgZm9yIGdsaWJjIGludGVncmF0aW9uIChILkouTHUpOgorCSsgYWRkIG1vZHVsZXMgZGVmaW5lX2tleSwga2V5b2ssIG5hbWVfbWF0Y2gsIHRyaWVzCisJKyBhZGQgbWFrZWZpbGUgcnVsZXMgZm9yIHNvbWUgb2YgdGhlIHVuaXQgdGVzdHMgaW4gbmN1cnNlcyAobXZjdXIsCisJICBjYXB0b2luZm8sIGhhcmRzY3JvbGwsIGhhc2htYXApLgorCSsgdXBkYXRlIExpbnV4IGNvbmZpZ3VyZS1zY3JpcHQgZm9yIHdpZGUtY2hhcmFjdGVyIGRlZmluaXRpb25zLgorCis5NzA4MDkKKwkrIG1vZGlmeSBfdHJhY2ViaXRzKCkgdG8gc2hvdyB0aGUgY2hhcmFjdGVyIHNpemUgKGUuZy4sIENTOCkuCisJKyBtb2RpZnkgdHBhcm0oKSB0byBlbWl0ICdcMjAwJyB3aGVyZSB0aGUgZ2VuZXJhdGVkIHN0cmluZyB3b3VsZCBoYXZlIGEKKwkgIG51bGwgKHJlcG9ydGVkIGJ5IEZyb206ICBJYW4gRGFsbCA8SWFuLkRhbGxAZHN0by5kZWZlbmNlLmdvdi5hdT4gZm9yCisJICB0ZXJtaW5hbCB0eXBlIG5jcjc5MDApLgorCSsgbW9kaWZ5IGluc3RhbGwgcHJvY2VzcyBzbyB0aGF0IGxkY29uZmlnIGlzIG5vdCBpbnZva2VkIGlmIHRoZQorCSAgcGFja2FnZSBpcyBidWlsdCB3aXRoIGFuIGluc3RhbGwtcHJlZml4LgorCSsgY29ycmVjdCB0ZXN0IHByb2dyYW0gZm9yIGNodHlwZSBzaXplIChyZXBvcnRlZCBieSBUaW0gTW9vbmV5KS4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uIC0tZGlzYWJsZS1zY3JvbGwtaGludHMsIHVzaW5nIHRoaXMgdG8gaWZkZWYgdGhlCisJICBsb2dpYyB0aGF0IGNvbXB1dGVzIGluZGljZXMgZm9yIF9uY19zY3JvbGxfb3B0aW1pemUoKS4KKwkrIGFkZCBtb2R1bGUgbmN1cnNlcy9zb2Z0c2Nyb2xsLmMsIHRvIHBlcmZvcm0gc2luZ2xlLXN0YWdlIGNvbXB1dGF0aW9uCisJICBvZiBzY3JvbGwgaW5kaWNlcyB1c2VkIGluIF9uY19zY3JvbGxfb3B0aW1pemUoKS4gIFRoaXMgaXMgZmFzdGVyIHRoYW4KKwkgIHRoZSBleGlzdGluZyBzY3JvbGxpbmcgYWxnb3JpdGhtLCBidXQgdGVuZHMgdG8gbWFrZSB0b28tc21hbGwgaHVua3MuCisJKyBlbGltaW5hdGUgZml4ZWQgYnVmZmVyIHNpemUgaW4gX25jX2xpbmVkdW1wKCkuCisJKyBtaW5vciBmaXhlcyB0byBsaWJfZG91cGRhdGUuYyB0byBhZGQgdHJhZGVvZmYgYmV0d2VlbiBjbHJfZW9sIChlbCkKKwkgIGFuZCBjbHJfYm9sIChlbDEpLCByZWZpbmUgbG9naWMgaW4gQ2xyVXBkYXRlKCkgYW5kIENsckJvdHRvbSgpIChwYXRjaAorCSAgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIGFkZCB0ZXN0L3Rlc3RhZGRjaC5jLCBmcm9tIGEgcGVuZGluZyBwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YuCisJKyBjb3JyZWN0IHByb2Nlc3Npbmcgb2YgImNvbmZpZ3VyZSAtLWVuYWJsZS1hc3NlcnRpb25zIiBvcHRpb24gKHBhdGNoCisJICBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCis5NzA4MDIKKwkrIGFkZCAnLXMnIChzaW5nbGUtc3RlcCkgb3B0aW9uIHRvbyB0ZXN0L2hhc2h0ZXN0LmMsIGNvcnJlY3QgYW4gZXJyb3IKKwkgIGluIGxvb3AgbGltaXQgZm9yICctZicgKGZvb3RlciBvcHRpb24pLCB0b2dnbGUgc2Nyb2xsb2soKSB3aGVuCisJICB3cml0aW5nIGZvb3RlciB0byBhdm9pZCB3cmFwIGF0IGxvd2VyLXJpZ2h0IGNvcm5lci4KKwkrIGNvcnJlY3QgYmVoYXZpb3Igb2YgY2xydG9lb2woKSBpbW1lZGlhdGVseSBhZnRlciB3cmFwcGluZyBjdXJzb3IsCisJICB3aGljaCB3YXMgbm90IGNsZWFyaW5nIHRoZSBsaW5lIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24gKHJlcG9ydGVkIGJ5CisJICBMaXZpdSBEYWlhIDxkYWlhQHN0b2lsb3cuaW1hci5ybz4pLgorCSsgY29ycmVjdGVkIG1hcHBpbmcgZm9yIEFDU19MQU5URVJOLCB3aGljaCB3YXMgJ0knIHJhdGhlciB0aGFuICdpJworCSAgKHJlcG9ydGVkIGJ5IEtsYXVzIFdlaWRlIDxrd2VpZGVAdGV6Y2F0LmNvbT4pLgorCSsgbWFueSBjb3JyZWN0aW9ucyB0byBtYWtlIHByb2dzL2NhcGNvbnZlcnQgd29yaywgYXMgd2VsbCBhcyBtYWtlIGl0CisJICByZWFzb25hYmx5IHBvcnRhYmxlIGFuZCBpbnRlZ3JhdGVkIHdpdGggbmN1cnNlcyA0LjEgKHJlcG9ydGVkIGJ5IERhdmUKKwkgIEZ1cnN0ZW5hdSA8ZGZAcmF2aW5lLmJpbmFyeS5uZXQ+KS4KKworOTcwNzI2CisJKyBhZGQgZmxhZyBTUC0+X2ZpZm9ob2xkLCBjb3JyZXNwb25kaW5nIGxvZ2ljIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2YKKwkgIHRoZSBsaW5lIGJyZWFrb3V0IGxvZ2ljIHNvIHRoYXQgaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHJlYWQKKwkgIGlucHV0LCByZWZyZXNoZXMgd2lsbCBub3QgYmUgc3RvcHBlZCwgYnV0IG9ubHkgc2xvd2VkLgorCSsgZ2VuZXJhdGUgc2xrX2F0dHJfb2ZmKCksIHNsa19hdHRyX29uKCksIHNsa19hdHRyX3NldCgpLCB2aWRfYXR0cigpLAorCSAgaWZkZWYnZCBmb3Igd2lkZS1jaGFyYWN0ZXIgc3VwcG9ydCwgc2luY2UgbmN1cnNlcycgV0FfeHh4IGF0dHJpYnV0ZQorCSAgbWFza3MgYXJlIGlkZW50aWNhbCB3aXRoIHRoZSBBX3h4eCBtYXNrcy4KKwkrIG1vZGlmeSBNS2xpYl9nZW4uc2ggdG8gZ2VuZXJhdGUgaWZkZWYnZCBmdW5jdGlvbnMgdG8gc3VwcG9ydCBvcHRpb25hbAorCSAgY29uZmlndXJhdGlvbiBvZiB3aWRlLWNoYXJhY3RlcnMuCisJKyBtb2RpZnkgdHNldCB0byBiZWhhdmUgbW9yZSBsaWtlIFNWcjQncyB0c2V0LCB3aGljaCBkb2VzIG5vdCBtb2RpZnkKKwkgIHRoZSBzZXR0aW5ncyBvZiBpbnRyLCBxdWl0IG9yIGVyYXNlIHVubGVzcyB0aGV5IGFyZSBnaXZlbiBhcyBjb21tYW5kCisJICBvcHRpb25zIChyZXBvcnRlZCBieSBOZWxzb24gSC4gRi4gQmVlYmUgPGJlZWJlQG1hdGgudXRhaC5lZHU+KS4KKwkrIG1vZGlmeSB0c2V0IHRvIGxvb2sgaW4gL2V0Yy90dHlzIG9yIC9ldGMvdHR5dHlwZSBpZiB0aGUgY29uZmlndXJhdGlvbgorCSAgZG9lcyBub3QgaGF2ZSBnZXR0dHluYW0oKS4KKwkrIGV4dGVuZCBiYXVkcmF0ZSB0YWJsZSBpbiB0c2V0LmMgdG8gbWF0Y2ggYmF1ZHJhdGUoKSBmdW5jdGlvbi4KKwkrIGFkZCB0YWJsZSBlbnRyaWVzIGZvciAyMzA0MDAgYW5kIDQ2MDgwMCBiZCB0byBiYXVkcmF0ZSgpIGZ1bmN0aW9uLgorCSsgaW1wcm92ZSBicmVha291dCBsb2dpYyBieSBhbGxvd2luZyBpdCBiZWZvcmUgdGhlIGZpcnN0IGxpbmUgdXBkYXRlZCwKKwkgIHdoaWNoIGlzIHdoYXQgU1ZyNCBjdXJzZXMgZG9lcyAocGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24gb2YgdmNvc3QgaW4gcmVsYXRpdmVfbW92ZSgpLCBmb3IgY3Vyc29yLWRvd24KKwkgIGNhc2UgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJPiBuaXRzIGdsZWFuZWQgZnJvbSBEZWJpYW4gZGlzdHJpYnV0aW9uIG9mIDEuOS45Zy0zOgorCSsgaW5zdGFsbCBzeW1ib2xpYyBsaW5rIGZvciBpbnRvdG9jYXAuCisJKyByZWZlcmVuY2UgbGliYyBkaXJlY3RseSB3aGVuIG1ha2luZyBzaGFyZWQgbGlicmFyaWVzLgorCSsgY29ycmVjdCByZW5hbWluZyBvZiBjdXJzX3Njcl9kbXAuM3ggaW4gbWFuX2RiLnJlbmFtZXMuCisJKyBndWFyZCB0Z2V0ZmxhZygpIGFuZCBvdGhlciB0ZXJtY2FwIGZ1bmN0aW9ucyBhZ2FpbnN0IG51bGwgY3VyX3Rlcm0KKwkgIHBvaW50ZXIuCisKKzk3MDcxOQorCSsgY29ycmVjdGVkIGluaXRpYWwgc3RhdGUgb2Ygc29mdHdhcmUgZWNobyAoZXJyb3IgaW4gOTcwNDA1LCByZXBvcnRlZAorCSAgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIHJldmlld2VkL2FkZGVkIG1lc3NhZ2VzIHRvIGNvbmZpZ3VyZSBzY3JpcHQsIHNvIHRoYXQgYWxsIG5vbi10ZXN0CisJICBvcHRpb25zIHNob3VsZCBiZSBhY2NvbXBhbmllZCBieSBhIG1lc3NhZ2UuCisJKyBhZGQgY29uZmlndXJlIGNoZWNrIGZvciBsb25nIGZpbGVuYW1lcywgdXNpbmcgdGhpcyB0byBkZXRlcm1pbmUgaWYKKwkgIGl0IGlzIHNhZmUgdG8gYWxsb3cgbG9uZyBhbGlhc2VzIGZvciB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgYXMgZG9lcworCSAgU1ZyNC4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9ucyBmb3Igd2lkZWMgKHdpZGUgY2hhcmFjdGVyKSwgaGFzaG1hcCAoYm90aAorCSAgZXhwZXJpbWVudGFsKS4KKwk+IHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdjoKKwkrIGhhc2htYXAuYyAtIGltcHJvdmVkIGJ5IGhldXJpc3RpYywgc28gdGhhdCBzY3JvbGwgdGVzdCB3b3JrcyBtdWNoCisJICBiZXR0ZXIgd2hlbiBjc3IgaXMgbm90IGF2YWlsYWJsZS4KKwkrIGhhcmRzY3JvbGwuYyAtIHBhdGNoZWQgc28gdGhhdCBpdCBjb250aW51ZXMgdG8gc2Nyb2xsIG90aGVyIGNodW5rcworCSAgYWZ0ZXIgZmFpbHVyZSB0byBzY3JvbGwgb25lLgorCSsgbGliX2RvdXBkYXRlLmMgLSBfbmNfbXZjdXJfc2Nyb2xsbiBleHRlbmRlZCB0byBoYW5kbGUgbW9yZSBjYXNlczsgY3NyCisJICBpcyBhdm9pZGVkIGFzIGl0IGlzIHJlbGF0aXZlIGNvc3RseS4gIEZpeGVkIHdyb25nIGNvb3JkaW5hdGVzIGluIG9uZQorCSAgY2FzZSBhbmQgd3Jvbmcgc3RyaW5nIGluIFRSQUNFLgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgbW9kaWZ5IEMrKyBiaW5kaW5nIHRvIGNvbXBpbGUgb24gQUlYIDQueCB3aXRoIHRoZSBJQk0gQy1TRVQrKworCSAgY29tcGlsZXIuCisKKzk3MDcxMgorCSsgcmVtb3ZlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGZyb20ga3Rlcm0gdGVybWluZm8gZW50cnk7IGl0IHVzZXMgdGhlCisJICBzaGlmdC1vdXQgY29udHJvbCBmb3IgYSBwdXJwb3NlIGluY29tcGF0aWJsZSB3aXRoIGN1cnNlcywgaS5lLiwgZm9udAorCSAgc3dpdGNoaW5nLgorCSsgZGlzZW50YW5nbGUgJ3h0ZXJtJyB0ZXJtaW5mbyBlbnRyeSBmcm9tIHNvbWUgZGVyaXZlZCBlbnRyaWVzIHRoYXQKKwkgIHNob3VsZCBiZSBiYXNlZCBvbiB4dGVybS1yNiBpbnN0ZWFkLgorCSsgYWRkIGNidCB0byB4dGVybS14Zjg2LXh2MzIgdGVybWluZm8gZW50cnk7IEkgYWRkZWQgdGhlIGVtdWxhdGlvbiBmb3IKKwkgIFhGcmVlODYgMy4xLjJGLCBidXQgb3Zlcmxvb2tlZCBpdHMgdXNlIGluIHRlcm1pbmZvIHRoZW4gLSBULkRpY2tleS4KKwkrIGNvcnJlY3QgbG9naWMgaW4gbGliX212Y3VyLmMgdGhhdCB1c2VzIGJhY2tfdGFiLgorCis5NzA3MDYKKwkrIGNvcnJlY3QgY2hhbmdlIGZyb20gOTcwNjI4IHRvIENsclVwZGF0ZSgpIGluIGxpYl9kb3VwZGF0ZS5jIHNvIHRoYXQKKwkgIGNvbnRlbnRzIG9mIGN1cnNjciBhcmUgc2F2ZWQgaW4gbmV3c2NyIGJlZm9yZSBjbGVhcmluZyB0aGUgc2NyZWVuLgorCSAgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSByZXBhaW50aW5nIHdvcmsgd2l0aCB0aGUgcHJlc2VudCBsb2dpYyBvZgorCSAgVHJhbnNmb3JtTGluZSgpLgorCSsgdXNlIG5hcG1zKCkgcmF0aGVyIHRoYW4gc2xlZXAoKSBpbiB0c2V0LmMgdG8gYXZvaWQgaW50ZXJydXB0aW5nIEkvTy4KKworOTcwNzA1CisJKyBhZGQgbGltaXQgY2hlY2tzIHRvIF9uY19yZWFkX2ZpbGVfZW50cnkoKSB0byBndWFyZCBhZ2FpbnN0IG92ZXJmbG93CisJICBvZiBidWZmZXIgd2hlbiByZWFkaW5nIGluY29tcGF0aWJsZSB0ZXJtaW5mbyBmb3JtYXQsIGUuZywgZnJvbSBPU0YvMS4KKwkrIGNvcnJlY3Qgc29tZSBsb29wLXZhcmlhYmxlIGVycm9ycyBpbiB4bWMgc3VwcG9ydCBpbiBsaWJfZG91cGRhdGUuYworCSsgbW9kaWZ5IG5jdXJzZXMgJ2InIHRlc3QgdG8gYWRkIGdhcHMsIHNwZWNpZmllZCBieSB1c2VyLCB0byBhbGxvdworCSAgaW52ZXN0aWdhdGlvbiBvZiBpbnRlcmFjdGlvbiB3aXRoIHhtYyAobWFnaWMgY29va2llKSBjb2RlLgorCSsgY29ycmVjdCB0eXBvIGluIDk3MDUyNCBtb2RzIHRvIHhtYXMuYywgaGFkIG9taXR0ZWQgZW1wdHkgcGFyYW1ldGVyCisJICBsaXN0IGZyb20gaGFzX2NvbG9ycygpLCB3aGljaCBnY2MgaWdub3JlcywgYnV0IFNWcjQgZG9lcyBub3QKKwkgIChyZXBvcnRlZCBieSBMYXJyeSBWaXJkZW4pLgorCSsgY29ycmVjdCBybXNvIGNhcGFiaWxpdHkgaW4gd3k1MC1tYyBkZXNjcmlwdGlvbi4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9uICItLWVuYWJsZS1oYXJkLXRhYnMiLCByZW5hbWVkIFRBQlNfT0sgaWZkZWYgdG8KKwkgIFVTRV9IQVJEX1RBQlMuCisJPiBwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXI6CisJKyBBZGQgYmluZGluZ3MgZm9yIGtleW9rKCkgYW5kIGRlZmluZV9rZXkoKSB0byB0aGUgQWRhOTUgcGFja2FnZXMuCisJKyBJbXByb3ZlIG1hbiBwYWdlcyBtZW51X3Bvc3QuM3ggYW5kIG1lbnVfZm9ybWF0LjN4CisJKyBGaXggdGhlIEhUTUwgcGFnZXMgaW4gdGhlIEFkYTk1L2h0bWwgZGlyZWN0b3J5IHRvIHJlZmxlY3QgdGhlIGFib3ZlCisJICBjaGFuZ2VzLgorCis5NzA2MjgKKwkrIG1vZGlmeSBjaGFuZ2UgZnJvbSA5NzAxMDEgdG8gQ2xyVXBkYXRlKCkgaW4gbGliX2RvdXBkYXRlLmMgc28gdGhhdAorCSAgcGVuZGluZyBjaGFuZ2VzIHRvIGJvdGggY3Vyc2NyIGFuZCBuZXdzY3IgYXJlIGZsdXNoZWQgcHJvcGVybHkuCisJICBUaGlzIGZpeGVzIGEgY2FzZSB3aGVyZSB0aGUgZmlyc3Qgc2Nyb2xsaW5nIG9wZXJhdGlvbiBpbiBudmkgd291bGQKKwkgIGNhdXNlIHRoZSBzY3JlZW4gdG8gYmUgY2xlYXJlZCB1bm5lY2Vzc2FyaWx5IGFuZCByZXBhaW50ZWQgYmVmb3JlCisJICBkb2luZyB0aGUgaW5kZXhpbmcsIGkuZS4sIGJ5IHJlcGVhdGVkbHkgcHJlc3NpbmcgJ2onIChyZXBvcnRlZCBieQorCSAgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGNvcnJlY3QgZXJyb3IgaW4gdHJhbnNfc3RyaW5nKCkgd2hpY2ggYWRkZWQgZW1iZWRkZWQgbmV3bGluZXMgaW4gYQorCSAgdGVybWluZm8gZGVzY3JpcHRpb24gdG8gdGhlIHN0b3JlZCBzdHJpbmdzLgorCSsgcmVtb3ZlIHNwdXJpb3VzIG5ld2xpbmVzIGZyb20gc2dyIGluIHd5c2U1MCAoYW5kIHNldmVyYWwgb3RoZXIpCisJICB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiBmb3IgZXhwZXJpbWVudGFsIHhtYyAobWFnaWMgY29va2llKSBjb2RlLAorCSAgIi0tZW5hYmxlLXhtYy1nbGl0Y2giLiAgV2hlbiBkaXNhYmxlZCAodGhlIGRlZmF1bHQpLCBhdHRyaWJ1dGVzIHRoYXQKKwkgIHdvdWxkIHN0b3JlIGEgbWFnaWMgY29va2llIGFyZSBzdXBwcmVzc2VkIGluIHZpZHB1dHMoKS4gIFRoZSBtYWdpYworCSAgY29va2llIGNvZGUgaXMgZmFyIGZyb20gd29ya2FibGUgYXQgdGhpcyBzdGFnZTsgdGhlIGNvbmZpZ3VyYXRpb24KKwkgIG9wdGlvbiBpcyBhIHN0b3BnYXAuCisJKyBtb3ZlIF9uY19pbml0c2NyKCkgZnJvbSBsaWJfaW5pdHNjci5jIHRvIGxpYl9uZXd0ZXJtLmMKKwkrIGNvcnJlY3QgcGF0aCBmb3IgaW52b2tpbmcgbWFrZV9rZXlzIChhIG1pc3NpbmcgIi4vIikuCisKKzk3MDYyMQorCSsgY29ycmVjdCBzaWduLWV4dGVuc2lvbiBwcm9ibGVtIHdpdGggImluZm9jbXAgLWUiLCB3aGljaCBjb3JydXB0ZWQKKwkgIGFjc2MgdmFsdWVzIGNvbXB1dGVkIGZvciBsaW51eCBmYWxsYmFjayBkYXRhLgorCSsgY29ycmVjdCBkZXBlbmRlbmN5IG9uIG5jdXJzZXMvbmFtZXMuYyAoYSBtaXNzaW5nICIuLyIpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gdXNlICcmJicgZXZlbiBmb3IgY2QnaW5nIHRvIGV4aXN0aW5nCisJICBkaXJlY3RvcmllcyB0byB3b3JrIGFyb3VuZCBicm9rZW4gc2hlbGwgaW50ZXJwcmV0ZXJzLgorCSsgY29ycmVjdCBhIGxvb3AtbGltaXQgaW4gX25jX2hhc2hfbWFwKCkgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLgorCSAgTHVreWFub3YpLgorCis5NzA2MTUKKwkrIHJlc3RvcmUgbG9naWMgaW4gX25jX3Njcm9sbF9vcHRpbWl6ZSgpIHdoaWNoIG1hcmtzIGFzIHRvdWNoZWQgdGhlCisJICBsaW5lcyBpbiBjdXJzY3IgdGhhdCBhcmUgc2hpZnRlZC4KKwkrIGFkZCBuZXcgdXRpbGl0eSAnbWFrZV9rZXlzJyB0byBjb21wdXRlIGtleXMudHJpZXMgYXMgYSB0YWJsZSByYXRoZXIKKwkgIHRoYW4gYSBzZXJpZXMgb2YgZnVuY3Rpb24gY2FsbHMuCisJKyBjb3JyZWN0IGluY2x1ZGUtZGVwZW5kZW5jeSBmb3IgdGljLmggdXNlZCBieSBuYW1lX21hdGNoCisJKyByZW1vdmVkIGJ1ZmZlci1hbGxvY2F0aW9uIGZvciBuYW1lIGFuZCBkZXNjcmlwdGlvbiBmcm9tIG1faXRlbV9uZXcuYywKKwkgIHNpbmNlIHRoaXMgbWlnaHQgcmVzdWx0IGluIGluY29tcGF0aWJpbGl0aWVzIHdpdGggU1ZyNC4gIEFsc28gZml4ZWQKKwkgIHRoZSBjb3JyZXNwb25kaW5nIEFkYTk1IGJpbmRpbmcgbW9kdWxlIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIsCisJICByZXBvcnQgYnkgQXZlcnkgUGVubmFydW4gPGFwZW53YXJyQGZveG5ldC5uZXQ+KQorCSsgcmVtb3ZlZCB0aGUgbWVjaGFuaXNtIHRvIHRpbWVzdGFtcCB0aGUgZ2VuZXJhdGVkIEFkYTk1IHNvdXJjZXMuICBUaGlzCisJICByZXN1bHRlZCBhbHdheXMgaW4gZ2VuZXJhdGluZyBwYXRjaGVzIGZvciB0aGUgSFRNTCBkb2MsIGV2ZW4gd2hlbgorCSAgbm90aGluZyByZWFsbHkgY2hhbmdlZCAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGltcHJvdmUgbWFuIHBhZ2UgbWl0ZW1fbmV3LjN4IChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIpLgorCis5NzA2MTQKKwkrIHJlbW92ZSBlY2ggY2FwYWJpbGl0eSBmcm9tIHJ4dnQgZGVzY3JpcHRpb24gYmVjYXVzZSBpdCBkb2VzIG5vdCB3b3JrLgorCSsgYWRkIG1pc3NpbmcgY2FzZSBsb2dpYyBmb3IgaW5mb2NtcCAtSSBvcHRpb24gKHJlcG9ydGVkIGJ5IExvcmVuem8gTS4KKwkgIENhdHVjY2kgPGxvcmVuem9AYXJnb24ucm9tYTIuaW5mbi5pdD4pCisJKyBjb3JyZWN0IG9sZCBidWcgaW4gcG5vdXRyZWZyZXNoKCkgdW5tYXNrZWQgYnkgZml4IGluIDk3MDUzMTsgdGhpcworCSAgY2F1c2VkIGdsaXRjaGVzIGluIHRoZSBuY3Vyc2VzICdwJyB0ZXN0IHNpbmNlIHRoZSBhcmVhIG91dHNpZGUgdGhlCisJICBwYWQgd2FzIG5vdCBjb21wYXJlZCB3aGVuIHNldHRpbmcgdXAgaW5kaWNlcyBmb3IgX25jX3Njcm9sbF9vcHRpbWl6ZS4KKwkrIHJld3JvdGUgdHJhY2ViaXRzKCkgdG8gd29ya2Fyb3VuZCBtaXNkZWZpbml0aW9uIG9mIFRPU1RPUCBvbiBVbHRyaXgKKwkgIDQuNCwgYXMgd2VsbCBhcyB0byBlbGltaW5hdGUgZml4ZWQtc2l6ZSBidWZmZXIgKHJlcG9ydGVkIGJ5IENocmlzCisJICBUYW5uZXIgPHRhbm5lcmNAYWVjbC5jYT4pCisJKyBjb3JyZWN0IHByb3RvdHlwZSBmb3IgdGVybWF0dHJzKCkgYXMgcGVyIFhQRzQgdmVyc2lvbiAyLgorCSsgYWRkIHBsYWNlaG9sZGVyIHByb3RvdHlwZXMgZm9yIGNvbG9yX3NldCgpLCBlcmFzZXdjaGFyKCksCisJICB0ZXJtX2F0dHJzKCksIHdjb2xvcl9zZXQoKSBhcyBwZXIgWFBHNCB2ZXJzaW9uIDIuCisJKyBjb3JyZWN0IGF0dHJpYnV0aW9uIGZvciBwcm9ncy9wcm9ncy5wcml2LmggYW5kIGxpYl90d2FpdC5jCisJKyBpbXByb3ZlIGxpbmUtYnJlYWtvdXQgbG9naWMgYnkgY2hlY2tpbmcgYmFzZWQgb24gY2hhbmdlZCBsaW5lcyByYXRoZXIKKwkgIHRoYW4gdG90YWwgbGluZXMgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyBjb3JyZWN0IGxvb3AgbGltaXRzIGZvciB0YWJsZS1sb29rdXAgb2YgZW51bWVyYXRlZCB2YWx1ZSBpbiBmb3JtCisJICAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGltcHJvdmUgdGhyZXNoaG9sZCBjb21wdXRhdGlvbiBmb3IgZGV0ZXJtaW5pbmcgd2hlbiB0byBjYWxsIENsclRvRU9MCisJICAocGF0Y2ggYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKworOTcwNTMxCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtZGF0YWJhc2UgdG8gZm9yY2UgdGhlIGxpYnJhcnkgdG8KKwkgIHVzZSBvbmx5IHRoZSBmYWxsYmFjayBkYXRhLgorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWZhbGxiYWNrcywgdG8gc3BlY2lmeSBsaXN0IG9mIGZhbGxiYWNrCisJICB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMuCisJKyBhZGQgYSBzeW1ib2xpYyBsaW5rIGZvciBuY3Vyc2VzLmggZHVyaW5nIGluc3RhbGw7IHRvbyBtYW55IHByb2dyYW1zCisJICBzdGlsbCBhc3N1bWUgdGhlcmUncyBhbiBuY3Vyc2VzLmgKKwkrIGFkZCBuZXcgdGVybWluZm8uc3JjIGVudHJ5IGZvciB4dGVybS14Zjg2LXYzMy4KKwkrIHJlc3RvcmUgdGVybWluZm8uc3JjIGVudHJ5IGZvciBlbXUgdG8gdXNpbmcgc2V0Zi9zZXRiLCBzaW5jZSBpdCBpcworCSAgbm90LCBhZnRlciBhbGwsIGdlbmVyYXRpbmcgQU5TSSBzZXF1ZW5jZXMuICBDb3JyZWN0ZWQgbWlzc2luZyBjb21tYQorCSAgdGhhdCBjYXVzZWQgc2V0Zi9zZXRiIGVudHJpZXMgdG8gbWVyZ2UuCisJKyBtb2RpZnkgbW91c2VtYXNrKCkgdG8gdXNlIGtleW9rKCkgdG8gZW5hYmxlL2Rpc2FibGUgS0VZX01PVVNFLCBzbworCSAgdGhhdCBhcHBsaWNhdGlvbnMgY2FuIGRpc2FibGUgbmN1cnNlcycgbW91c2UgYW5kIHN1cHBseSB0aGVpciBvd24KKwkgIGhhbmRsZXIuCisJKyBhZGQgZXh0ZW5zaW9ucyBrZXlvaygpIGFuZCBkZWZpbmVfa2V5KCkuICBUaGVzZSBhcmUgZGVzaWduZWQgdG8gYWxsb3cKKwkgIHRoZSB1c2VyJ3MgYXBwbGljYXRpb24gYmV0dGVyIGNvbnRyb2wgb3ZlciB0aGUgdXNlIG9mIGZ1bmN0aW9uIGtleXMsCisJICBlLmcuLCBkaXNhYmxpbmcgdGhlIG5jdXJzZXMgS0VZX01PVVNFLiAgKFRoZSBkZWZpbmVfa2V5IGlkZWEgd2FzIGZyb20KKwkgIGEgbWFpbGluZy1saXN0IHRocmVhZCBzdGFydGVkIGJ5IEtlbm5ldGggQWxiYW5vd3NraQorCSAgPGtqYWhkc0BramFoZHMuY29tPiBOb3YnMTk5NSkuCisJKyByZXN0b3JlIG9yaWdpbmFsIGJlaGF2aW9yIGluIG5jdXJzZXMgJ2cnIHRlc3QsIGkuZS4sIGV4cGxpY2l0bHkKKwkgIHNldCB0aGUga2V5cGFkIG1vZGUgcmF0aGVyIHRoYW4gdXNlIHRoZSBkZWZhdWx0LCBzaW5jZSBpdCBjb25mdXNlcworCSAgcGVvcGxlLgorCSsgcmV3cm90ZSB0aGUgbmV3ZGVtbyBiYW5uZXIgc28gaXQncyByZWFkYWJsZSAocmVwb3J0ZWQgYnkgSHVnaAorCSAgRGFuaWVsKS4KKwkrIHRpZHkgdXAgZXhpdCBmcm9tIGhhc2h0ZXN0IChyZXBvcnRlZCBieSBIdWdoIERhbmllbCkuCisJKyByZXN0b3JlIGNoZWNrIGZvciBeUSBpbiBuY3Vyc2VzICdnJyB0ZXN0IGJyb2tlbiBpbiA5NzA1MTAgKHJlcG9ydGVkCisJICBieSBIdWdoIERhbmllbCkKKwkrIGNvcnJlY3QgdHB1dCBwcm9ncmFtLCBjaGVja2luZyByZXR1cm4tdmFsdWUgb2Ygc2V0dXB0ZXJtIChwYXRjaCBieQorCSAgRmxvcmlhbiBMYSBSb2NoZSkuCisJKyBjb3JyZWN0IGxvZ2ljIGluIHBub3V0cmVmcmVzaCgpIGFuZCBwZWNob2NoYXIoKSBmdW5jdGlvbnMgKHJlcG9ydGVkCisJICBieSBLcmlhbmcgTGVyZHN1d2FuYWtpaiA8bGVyZHN1d2FAc2NmLnVzYy5lZHU+KS4gIFRoZSBjb21wdXRhdGlvbgorCSAgb2YgJ3dpZGUnIGRhdGUgdG8gZXJpYydzICMyODMgKDEuOS45KSwgYW5kIHRoZSBwZWNob2NoYXIgYnVnIHRvIHRoZQorCSAgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gKDEuOS42KS4KKwkrIGNvcnJlY3QgdHlwbyBpbiB2dDEwMi13IHRlcm1pbmZvLnNyYyBlbnRyeSAocGF0Y2ggYnkgUm9iZXJ0IFd1ZXN0CisJICA8cnd1ZXN0QHNpcmUudnQuY29tPikKKwkrIG1vdmUgY2FsbHMgb2YgX25jX2JhY2tncm91bmQoKSBvdXQgb2YgdmFyaW91cyBsb29wcywgYXMgaXRzIHJldHVybgorCSAgdmFsdWUgd2lsbCBiZSB0aGUgc2FtZSBmb3IgdGhlIHdob2xlIHdpbmRvdyBiZWluZyBvcGVyYXRlZCBvbiAocGF0Y2gKKwkgIGJ5IEogVCBDb25rbGluKS4KKwkrIGFkZCBtYWNyb3MgZ2V0Y3VyW3h5XSBnZXRiZWdbeHldIGdldHBhclt4eV0sIHdoaWNoIGFyZSBkZWZpbmVkIGluCisJICBTVnI0IGhlYWRlcnMgKHBhdGNoIGJ5IEogVCBDb25rbGluIDxqdGNATmV0QlNELk9SRz4pCisJKyBtb2RpZnkgZ2xpYmMgYWRkb24tY29uZmlndXJlIHNjcmlwdHMgKHBhdGNoIGJ5IEguSi5MdSkuCisJKyBjb3JyZWN0IGEgYnVnIGluIGhhc2htYXAuYzogdGhlIHNpemUgdXNlZCBmb3IgY2xlYXJpbmcgdGhlIGhhc2htYXAKKwkgIHRhYmxlIHdhcyBpbmNvcnJlY3QsIGNhdXNpbmcgc3RhY2sgY29ycnVwdGlvbiBmb3IgbGFyZ2UgdmFsdWVzIG9mCisJICBMSU5FUywgZS5nLiwgPk1BWExJTkVTLzIgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyBlcmljJ3MgdGVybWluZm8gOS4xMy4yMyAmIDkuMTMuMjQgY2hhbmdlczogcmVwbGFjZWQgbWluaXRlbC0yIGVudHJ5LAorCSAgYWRkZWQgTUdSLCBhbnNpLW50IChub3RlOiB0aGUgY2hhbmdlcyBkZXNjcmliZWQgZm9yIDkuMTMuMjQgaGF2ZSBub3QKKwkgIGJlZW4gYXBwbGllZCkuCisJPiBzZXZlcmFsIGNoYW5nZXMgYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgY29ycmVjdCBhIG1pc3NpbmcgZXJyb3ItcmV0dXJuIGluIGZvcm1fZHJpdmVyLmMgd2hlbiB3cmFwcGluZyBvZiBhCisJICBmaWVsZCBpcyBub3QgcG9zc2libGUuCisJKyBjb3JyZWN0IGxvZ2ljIGluIGZvcm1fZHJpdmVyLmMgZm9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgZG8gbm90IGhhdmUKKwkgIG1lbWNjcHkoKSAocmVwb3J0ZWQgYnkgU2lkaWsgSXNhbmkgPGlzYW5pQGNmaHQuaGF3YWlpLmVkdT4pCisJKyBjaGFuZ2Ugc2V2ZXJhbCBjKysgYmluZGluZyBmdW5jdGlvbnMgdG8gaW5saW5lLgorCSsgbW9kaWZ5IGMrKyBtZW51IGJpbmRpbmcgdG8gaW5oZXJpdCBmcm9tIHBhbmVscywgZm9yIHByb3BlcgorCSAgaW5pdGlhbGl6YXRpb24uCisJKyBjb3JyZWN0IGZyZWVpbmcgb2YgbWVudSBpdGVtcyBpbiBjKysgYmluZGluZy4KKwkrIG1vZGlmeSBjKysgYmluZGluZyB0byByZWZsZWN0IHJlbW92YWwgb2YgY29uc3QgZnJvbSB1c2VyIGRhdGEgcG9pbnRlcgorCSAgaW4gZm9ybXMvbWVudXMgbGlicmFyaWVzLgorCis5NzA1MjQKKwkrIGFkZCBkZXNjcmlwdGlvbiBvZiB4dGVybS0xNmNvbG9yLgorCSsgbW9kaWZ5IG5hbWUgb2Ygc2hhcmVkLWxpYnJhcnkgb24gKkJTRCB0byBlbmQgd2l0aCAkKFJFTF9WRVJTSU9OKQorCSAgcmF0aGVyIHRoYW4gJChBQklfVkVSU0lPTikgdG8gbWF0Y2ggYWN0dWFsIGNvbnZlbnRpb24gb24gRnJlZUJTRAorCSAgKGNmOiA5NjA3MTMpLgorCSsgYWRkIE9wZW5CU0QgdG8gc2hhcmVkLWxpYnJhcnkgY2FzZSwgc2FtZSBhcyBOZXRCU0QgYW5kIEZyZWVCU0QKKwkgIChyZXBvcnRlZCBieSBIdWdoIERhbmllbCA8aHVnaEByYXQudG9hZC5jb20+KS4KKwkrIGNvcnJlY3RlZCBpbmNsdWRlLWRlcGVuZGVuY3kgaW4gbWVudS9NYWtlZmlsZSBzbyB0aGF0ICJtYWtlIGluc3RhbGwiCisJICB3b3JrcyBwcm9wZXJseSB3L28gZmlyc3QgZG9pbmcgIm1ha2UiLgorCSsgYWRkIGZhbGxiYWNrIGRlZmluaXRpb24gZm9yIGlzYXNjaWksIHVzZWQgaW4gaW5mb2NtcC4KKwkrIG1vZGlmeSB4bWFzIHRvIHVzZSBjb2xvciwgYW5kIHRvIGV4aXQgcmlnaHQgYXdheSB3aGVuIGEga2V5IGlzCisJICBwcmVzc2VkLgorCSsgbW9kaWZ5IGdkYyBzbyB0aGF0IHRoZSBzY3JvbGxlZCBkaWdpdHMgZnVuY3Rpb24gYXMgZGVzY3JpYmVkICh0aGVyZQorCSAgd2FzIG5vIHRpbWUgZGVsYXkgYmV0d2VlbiB0aGUgc3RhZ2VzLCBhbmQgdGhlIGRpZ2l0cyBvdmVyd3JvdGUgdGhlCisJICBib3VuZGluZyBib3ggd2l0aG91dCB0aWR5aW5nIHVwKS4KKwkrIG1vZGlmeSBsaWJfY29sb3IuYyB0byB1c2Ugc2V0YWYvc2V0YWIgb25seSBmb3IgdGhlIEFOU0kgY29sb3IgY29kZXMKKwkgIDAgdGhyb3VnaCA3LiAgVXNpbmcgMTYgY29sb3JzIHJlcXVpcmVzIHNldGYvc2V0Yi4KKwkrIG1vZGlmeSBuY3Vyc2VzICdjJyB0ZXN0IHRvIHdvcmsgd2l0aCAxNiBjb2xvcnMsIGFzIHdlbGwgYXMgdGhlIG5vcm1hbAorCSAgOCBjb2xvcnMuCisJKyByZW1vdmUgY29uc3QgcXVhbGlmaWVyIGZyb20gdXNlciBkYXRhIHBvaW50ZXIgaW4gZm9ybXMgYW5kIG1lbnVzCisJICBsaWJyYXJpZXMgKHBhdGNoIGJ5IEp1ZXJnZW4gUGZlaWZlcikuCisJKyByZXdyb3RlICd3YWRkY2huc3RyKCknIHRvIGF2b2lkIHVzaW5nIHRoZSBfbmNfd2FkZGNoX25vc3luYygpCisJICBmdW5jdGlvbiwgdGhlcmVieSBub3QgaW50ZXJwcmV0aW5nIHRhYnMsIGV0Yy4sIGFzIHBlciBzcGVjIChwYXRjaCBieQorCSAgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKworOTcwNTE3CisJKyBzdXBwcmVzcyBjaGVjayBmb3IgcHJlLWV4aXN0aW5nIG5jdXJzZXMgaGVhZGVyIGlmIHRoZSAtLXByZWZpeAorCSAgb3B0aW9uIGlzIHNwZWNpZmllZC4KKwkrIGFkZCBjb25maWd1cmUgb3B0aW9ucyAiLS13aXRoLXN5c3RlbS10eXBlIiBhbmQKKwkgICItLXdpdGgtc3lzdGVtLXJlbGVhc2UiIHRvIGFzc2lzdCBpbiBjaGVja2luZyB0aGUgZ2VuZXJhdGVkCisJICBtYWtlZmlsZXMuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAiLS1lbmFibGUtcnBhdGgiIHRvIGFsbG93IGluc3RhbGxlcnMgdG8gc3BlY2lmeQorCSAgdGhhdCBwcm9ncmFtcyBsaW5rZWQgYWdhaW5zdCBzaGFyZWQgbGlicmFyaWVzIHdpbGwgaGF2ZSB0aGVpciBsaWJyYXJ5CisJICBwYXRoIGVtYmVkZGVkLCBhbGxvd2luZyBpbnN0YWxscyBpbnRvIG5vbnN0YW5kYXJkIGxvY2F0aW9ucy4KKwkrIGFkZCBmbGFncyB0byBPU0YxIHNoYXJlZC1saWJyYXJ5IG9wdGlvbnMgdG8gc3BlY2lmeSB2ZXJzaW9uIGFuZAorCSAgc3ltYm9sIGZpbGUgKHBhdGNoIGJ5IFRpbSBNb29uZXkgPG1vb25leUBkb2diZXJ0LmNjLm5kc3UuTm9EYWsuZWR1PikKKwkrIGFkZCBtaXNzaW5nIGRlZmluaXRpb24gZm9yIEFCSV9WRVJTSU9OIHRvIGMrKy9NYWtlZmlsZS5pbiAocmVwb3J0ZWQKKwkgIGJ5IFNhdG9zaGkgQWRhY2hpIDxhZGFjaGlAd2lzZG9tLmFhLmFwLnRpdGVjaC5hYy5qcD4pLgorCSsgbW9kaWZ5IGxpbmsgZmxhZ3MgdG8gYWNjb21tb2RhdGUgSFAtVVggbGlua2VyIHdoaWNoIGVtYmVkcyBhYnNvbHV0ZQorCSAgcGF0aG5hbWVzIGluIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJpZXMgKHJlcG9ydGVkIGJ5CisJICBKYXNvbiBFdmFucyA8amFzb25lQG1yYy51aWRhaG8uZWR1Piwgc29sdmVkIGJ5IEFsYW4gU2h1dGtvCisJICA8YXRzQGh1YmVydC53dXN0bC5lZHU+KS4KKwkrIGRyb3AgdW5uZWNlc3NhcnkgY2hlY2sgZm9yIGF0dHJpYnV0ZS1jaGFuZ2UgaW4gb25zY3JlZW5fbXZjdXIoKSBzaW5jZQorCSAgbXZjdXIoKSBpcyB0aGUgb25seSBjYWxsZXIgd2l0aGluIHRoZSBsaWJyYXJ5LCBhbmQgdGhhdCBjaGVjayBpbiB0dXJuCisJICBpcyBleGVyY2lzZWQgb25seSBmcm9tIGxpYl9kb3VwZGF0ZS5jIChwYXRjaCBieSBBbGV4YW5kZXIgVi4KKwkgIEx1a3lhbm92KS4KKwkrIGFkZCAnYmxhbmsnIHBhcmFtZXRlciB0byBfbmNfc2Nyb2xsX3dpbmRvdygpIHNvIF9uY19tdmN1cl9zY3JvbGxuKCkKKwkgIGNhbiB1c2UgdGhlIGJhY2tncm91bmQgb2Ygc3Rkc2NyIGFzIGEgcGFyYW1ldGVyIHRvIHRoYXQgZnVuY3Rpb24KKwkgIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgbW92ZWQgX25jX212Y3VyX3Njcm9sbG4oKSBmcm9tIGxpYl9tdmN1ci5jIHRvIGxpYl9kb3VwZGF0ZS5jLCB0byB1c2UKKwkgIHRoZSBsYXR0ZXIncyBpbnRlcm5hbCBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5CisJICBjdXJzb3Igc2F2ZS9yZXN0b3JlIG9wZXJhdGlvbnMgKHBhdGNoIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdikuCisJKyBvbWl0IHBhcmFtZXRlciBvZiBDbHJVcGRhdGUoKSwgc2luY2UgaXQgaXMgY2FsbGVkIG9ubHkgZm9yIG5ld3NjciwKKwkgIGZ1cnRoZXIgb3B0aW1pemVkL3JlZHVjZWQgYnkgdXNpbmcgQ2xlYXJTY3JlZW4oKSBhbmQgVHJhbnNmb3JtTGluZSgpCisJICB0byBnZXQgcmlkIG9mIGR1cGxpY2F0ZSBjb2RlIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgbW9kaWZ5IHNjcm9sbGluZyBhbGdvcml0aG0gaW4gX25jX3Njcm9sbF9vcHRpbWl6ZSgpIHRvIHJlamVjdCBodW5rcworCSAgdGhhdCBhcmUgc21hbGxlciB0aGFuIHRoZSBkaXN0YW5jZSB0byBiZSBtb3ZlZCAocGF0Y2ggYnkgQWxleGFuZGVyIFYuCisJICBMdWt5YW5vdikuCisJKyBjb3JyZWN0IGEgcGxhY2Ugd2hlcmUgdGhlIHBhbmVsIGxpYnJhcnkgd2FzIG5vdCBpZmRlZidkIGluIG5jdXJzZXMuYworCSAgKEp1ZXJnZW4gUGZlaWZlcikKKwkrIGRvY3VtZW50YXRpb24gZml4ZXMgKEp1ZXJnZW4gUGZlaWZlcikKKworOTcwNTE1CTQuMSByZWxlYXNlIGZvciB1cGxvYWQgdG8gcHJlcC5haS5taXQuZWR1CisJKyByZS10YWcgY2hhbmdlcyBzaW5jZSA5NzA1MDUgYXMgNC4xIHJlbGVhc2UuCisKKzk3MDUxMAorCSsgbW9kaWZ5IG5jdXJzZXMgJ2cnIHRlc3QgdG8gYWxsb3cgbW91c2UgaW5wdXQKKwkrIG1vZGlmeSBkZWZhdWx0IHh0ZXJtIGRlc2NyaXB0aW9uIHRvIGluY2x1ZGUgbW91c2UuCisJKyBtb2RpZnkgY29uZmlndXJlIHNjcmlwdCB0byBhZGQgLVd3cml0ZS1zdHJpbmdzIGlmIGdjYyB3YXJuaW5ncyBhcmUKKwkgIGVuYWJsZWQgd2hpbGUgY29uZmlndXJpbmcgLS1lbmFibGUtY29uc3QgKGFuZCBmaXhlZCByZWxhdGVkCisJICB3YXJuaW5ncykuCisJKyBhZGQgdG9nZ2xlLCBzdGF0dXMgZGlzcGxheSBmb3Iga2V5cGFkIG1vZGUgdG8gbmN1cnNlcyAnZycgdGVzdCB0bworCSAgdmVyaWZ5IHRoYXQga2V5cGFkIGFuZCBzY3JvbGxvayBhcmUgbm90IGluaGVyaXRlZCBmcm9tIHBhcmVudCB3aW5kb3cKKwkgIGR1cmluZyBhIGNhbGwgdG8gbmV3d2luLgorCSsgY29ycmVjdGlvbiB0byBNS2V4cGFuZGVkLnNoIHRvIG1ha2UgaXQgd29yayB3aGVuIGNvbmZpZ3VyZSAtLXNyY2RpcgorCSAgaXMgdXNlZCAocmVwb3J0ZWQgYnkgSC5KLkx1KS4KKwkrIHJldmlzZSB0ZXN0IGZvciBib29sLXR5cGUsIGVuc3VyaW5nIHRoYXQgaXQgY2hlY2tzIGlmIGJ1aWx0aW4uaCBpcworCSAgYXZhaWxhYmxlIGJlZm9yZSBpbmNsdWRpbmcgaXQsIGFkZGluZyB0ZXN0IGZvciBzaXplb2YoYm9vbCkgZXF1YWwKKwkgIHRvIHNpemVvZihzaG9ydCksIGFuZCB3YXJuaW5nIHVzZXIgaWYgdGhlIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQKKwkgIChyZXBvcnRlZCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgYWRkIGZpbGVzIHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiBvZiBuY3Vyc2VzIGFzIGFuIGFkZC1vbiBsaWJyYXJ5CisJICBmb3IgR05VIGxpYmMgKHBhdGNoIGJ5IEguSi5MdSA8aGpsQGx1Y29uLm9yZz4pCisKKzk3MDUwNgorCSsgY29ycmVjdCBidWZmZXIgb3ZlcnJ1biBpbiBsaWJfdHJhY2VhdHIuYworCSsgbW9kaWZ5IGNoYW5nZSB0byBsaWJfdmlkYXR0ci5jIHRvIGF2b2lkIHJlZHVuZGFudCBvcmlnX3BhaXIuCisJKyB0dXJuIG9uICdlY2hvKCknIGluIGhhbm9pLmMsIHNpbmNlIGl0IGlzIGluaXRpYWxseSBvZmYuCisJKyByZW5hbWUgbG9jYWwgJ2Vycm5vJyB2YXJpYWJsZSBpbiBldGlwLmggdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBnbG9iYWwKKwkgIChILkouTHUpLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gY2FjaGUgTEQsIEFSLCBBUl9PUFRTIChwYXRjaCBieSBILkouTHUKKwkgIDxoamxAbHVjb24ub3JnPikKKworOTcwNTA1CTQuMSBwcmUtcmVsZWFzZQorCSsgcmVnZW5lcmF0ZSB0aGUgbWlzYyBkaXJlY3RvcnkgaHRtbCBkdW1wcyB3aXRob3V0IHRoZSBsaW5rIGxpc3QsIHdoaWNoCisJICBpcyBub3QgdXNlZnVsLgorCSsgY29ycmVjdCBkZXBlbmRlbmN5IGluIGZvcm0gZGlyZWN0b3J5IG1ha2VmaWxlIHdoaWNoIGNhdXNlZAorCSAgdW5uZWNlc3NhcnkgcmVjb21waWxlcy4KKwkrIGNvcnJlY3Qgc3Vic3RpdHV0aW9uIGZvciBBQklfVkVSU0lPTiBpbiB0ZXN0LW1ha2VmaWxlCisJKyBtb2RpZnkgaW5zdGFsbCBydWxlcyBmb3Igc2hhcmVkLWxpYnJhcnkgdGFyZ2V0cyB0byByZW1vdmUgdGhlIHRhcmdldAorCSAgYmVmb3JlIGluc3RhbGxpbmcsIHNpbmNlIHNvbWUgaW5zdGFsbCBwcm9ncmFtcyBkbyBub3QgcHJvcGVybHkgaGFuZGxlCisJICBvdmVyd3JpdGUgb2Ygc3ltYm9saWMgbGlua3MuCisJKyBjaGFuZ2Ugb3JkZXIgb2YgdG9wLWxldmVsIHRhcmdldHMgc28gdGhhdCAnaW5jbHVkZScgaW1tZWRpYXRlCisJICBwcmVjZWRlcyB0aGUgJ25jdXJzZXMnIGRpcmVjdG9yeSwgcmVkdWNpbmcgdGhlIHRpbWUgYmV0d2VlbiBuZXcKKwkgIGhlYWRlcnMgYW5kIG5ldyBsaWJyYXJpZXMgKHJlcXVlc3RlZCBieSBMYXJyeSBWaXJkZW4pLgorCSsgbW9kaWZ5IGxpYl92aWRhdHRyLmMgc28gdGhhdCBjb2xvcnMgYXJlIHR1cm5lZCBvZmYgb25seSBiZWZvcmUKKwkgIG1vZGlmeWluZyBvdGhlciBhdHRyaWJ1dGVzLCB0dXJuZWQgb24gYWZ0ZXIgb3RoZXJzLiAgVGhpcyBtYWtlcyB0aGUKKwkgIGhhbm9pLmMgcHJvZ3JhbSBkaXNwbGF5IGNvcnJlY3RseSBvbiBGcmVlQlNEIGNvbnNvbGUuCisJKyBtb2RpZnkgZGVidWcgY29kZSBpbiBwYW5lbCBsaWJyYXJ5IHRvIHByaW50IHVzZXItZGF0YSBhZGRyZXNzZXMKKwkgIHJhdGhlciB0aGFuIHRoZSBzdHJpbmdzIHdoaWNoIHRoZXkgKG1heSkgcG9pbnQgdG8uCisJKyBhZGQgY2hlY2sgdG8gZW5zdXJlIHRoYXQgQysrIGJpbmRpbmcgYW5kIGRlbW8gYXJlIG5vdCBidWlsdCB3aXRoIGcrKworCSAgdmVyc2lvbnMgYmVsb3cgMi43LCBzaW5jZSB0aGUgYmluZGluZyB1c2VzIHRlbXBsYXRlcy4KKwkrIG1vZGlmeSBjKysgYmluZGluZyBhbmQgZGVtbyB0byBidWlsZCBhbmQgcnVuIHdpdGggU0dJJ3MgYysrIGNvbXBpbGVyLgorCSAgKEl0IGFsc28gY29tcGlsZXMgd2l0aCB0aGUgU3VuIFNwYXJjV29ya3MgY29tcGlsZXIsIGJ1dCB0aGUgZGVtbyBkb2VzCisJICBub3QgbGluaywgZHVlIHRvIGEgdnRibCBwcm9ibGVtKS4KKwkrIGNvcnJlY3Rpb25zIHRvIGRlbW8uY2MsIHRvIGZpeCBvdXQtb2Ytc2NvcGUgdmFyaWFibGVzIChKdWVyZ2VuCisJICBQZmVpZmVyKS4KKworOTcwNTAzCisJKyBjb3JyZWN0IG1lbW9yeSBsZWFrIGluIF9uY190cmFjZV9idWYoKS4KKwkrIGFkZCBjb25maWd1cmUgdGVzdCBmb3IgcmVnZXhwci5oLCBmb3IgVW5peHdhcmUgMS54LgorCSsgY29ycmVjdCBtaXNzaW5nICIuLyIgcHJlZml4aW5nIG5hbWVzIG9mIGdlbmVyYXRlZCBmaWxlcyBpbiBuY3Vyc2VzCisJICBkaXJlY3RvcnkuCisJKyB1c2Ugc2luZ2xlLXF1b3RlcyBpbiBjb25maWd1cmUgc2NyaXB0cyBhc3NpZ25tZW50cyBmb3IgTUtfU0hBUkVEX0xJQgorCSAgdG8gd29ya2Fyb3VuZCBzaGVsbCBidWcgb24gRnJlZUJTRCAyLjEuNQorCSsgcmVtb3ZlIHRhYnMgZnJvbSBpbnRlcm1lZGlhdGUgI2RlZmluZSdzIGZvciBHQ0NfUFJJTlRGLCBHQ0NfU0NBTkYKKwkgIHRoYXQgY2F1c2VkIGluY29ycmVjdCByZXN1bHQgaW4gbmN1cnNlc19jZmcuaAorCSsgY29ycmVjdCBpbml0aWFsaXphdGlvbiBpbiBsaWJfdHJhY2UuYywgd2hpY2ggb21pdHRlZCB2ZXJzaW9uIGluZm8uCisJKyByZW1vdmUgZWNoLCBlbDEgYXR0cmlidXRlcyBmcm9tIGNvbnMyNXcgZGVzY3JpcHRpb247IHRoZXkgYXBwZWFyIHRvCisJICBtYWxmdW5jdGlvbiBpbiBGcmVlQlNEIDIuMS41CisJKyBjb3JyZWN0IGNvbG9yIGF0dHJpYnV0ZXMgaW4gdGVybWluZm8uc3JjIGFuZCBsaWJfY29sb3IuYyB0byBtYXRjaAorCSAgU1ZyNCBiZWhhdmlvciBieSBpbnRlcmNoYW5naW5nIGNvZGVzIDEsNCwgMyw2IGluIHRoZSBzZXRmL3NldGIKKwkgIGNhcGFiaWxpdGllcy4KKwkrIHVzZSBjdXJzX3NldCgpIHJhdGhlciB0aGFuIGNoZWNrcyB2aWEgdGlnZXRzdHIoKSBmb3IgdGVzdCBwcm9ncmFtcworCSAgdGhhdCBoaWRlIHRoZSBjdXJzb3I6IGZpcmV3b3JrLCByYWluLCB3b3JtLgorCSsgZW5zdXJlIHRoYXQgaWYgdGhlIHRlcm1pbmFsIGxhY2tzIGNoYW5nZV9zY3JvbGxfcmVnaW9uLCBwYXJtX2luZGV4CisJICBhbmQgcGFybV9yaW5kZXggYXJlIHVzZWQgb25seSB0byBzY3JvbGwgdGhlIHdob2xlIHNjcmVlbiAocGF0Y2ggYnkKKwkgIFBldGVyIFdlbW0pLgorCSsgY29ycmVjdCBjdXJzX3NldCgpIGxvZ2ljLCB3aGljaCBkaWQgbm90IHJldHVybiBFUlIgaWYgdGhlIHJlcXVlc3RlZAorCSAgYXR0cmlidXRlcyBkaWQgbm90IGV4aXN0LCBub3IgZGlkIGl0IGFzc3VtZSBhbiB1bmtub3duIGluaXRpYWwgc3RhdGUKKwkgIGZvciB0aGUgY3Vyc29yIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgY29tYmluZSBJRGNUcmFuc2Zvcm1MaW5lIGFuZCBOb0lEY1RyYW5zZm9ybUxpbmUgdG8gbmV3IFRyYW5zZm9ybUxpbmUKKwkgIGZ1bmN0aW9uIGluIGxpYl9kb3VwZGF0ZS5jIChwYXRjaCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgY29ycmVjdCBoYXNobWFwLmMsIHdoaWNoIGRpZCBub3QgdXBkYXRlIGluZGV4IGluZm9ybWF0aW9uIChwYXRjaCBieQorCSAgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKwkrIGZpeGVzIGZvciBDKysgYmluZGluZyBhbmQgZGVtbyAoc2VlIGMrKy9ORVdTKSAoSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGNvcnJlY3QgaW5kZXggaW4gbGliX2luc3RyLmMgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0IHR5cG8gaW4gOTcwNDI2IHBhdGNoIGZyb20gVG9tJ3MgY2xlYW51cCBvZiBsaWJfb3ZlcmxheS5jCisJICAocGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyKS4KKworOTcwNDI2CisJKyBjb3JyZWN0ZWQgY29zdCBjb21wdXRhdGlvbiBpbiBQdXRSYW5nZSgpLCB3aGljaCB3YXMgdXNpbmcKKwkgIG1pbGxpc2Vjb25kcyBjb21wYXJlZCB0byBjaGFyYWN0ZXJzIGJ5IGFkZGluZyB0d28gbmV3IG1lbWJlcnMgdG8gdGhlCisJICBTQ1JFRU4gc3RydWN0LCBfaHBhX2NoX2Nvc3QgYW5kIF9jdXBfY2hfY29zdC4KKwkrIGRyb3AgbmN1cnNlcy9saWJfdW5jdHJsLmMsIGFkZCBuY3Vyc2VzL01LdW5jdHJsLmF3ayB0byBnZW5lcmF0ZSBhCisJICBjb25zdCBhcnJheSBvZiBzdHJpbmdzIChzdWdnZXN0ZWQgYnkgQWxleGFuZGVyIFYuIEx1a3lhbm92KS4gIFRoZQorCSAgb3JpZ2luYWwgc3VnZ2VzdGlvbiBpbiA5NzAxMTggdXNlZCBhIHBlcmwgc2NyaXB0LgorCSsgcmV3cm90ZSBuY3Vyc2VzICdiJyB0ZXN0IHRvIGJldHRlciBleGVyY2lzZSBtYWdpYy1jb29raWUgKHhtYyksIGFzCisJICB3ZWxsIGFzIG5vdGluZyB0aGUgYXR0cmlidXRlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGEgdGVybWluYWwuCisJKyB0cmFjZSB0aGUgY29tcHV0YXRpb24gb2YgY29zdCB2YWx1ZXMgaW4gbGliX212Y3VyLmMKKwkrIG1vZGlmeSBfbmNfdmlzYnVmKCkgdG8gdXNlIG9jdGFsIHJhdGhlciB0aGFuIGhleCwgY29ycmVjdGVkIHNpZ24KKwkgIGV4dGVuc2lvbiBidWcgaW4gdGhhdCBmdW5jdGlvbiB0aGF0IGNhdXNlZCBidWZmZXIgb3ZlcmZsb3cuCisJKyBtb2RpZnkgdHJhY2UgaW4gbGliX2Fjcy5jIHRvIHVzZSBfbmNfdmlzYnVmKCkuCisJKyBzdXBwcmVzcyB0cmFjZSB3aXRoaW4gX3RyYWNlYXR0cjIoKS4KKwkrIGNvcnJlY3QgbG9naWMgb2YgX3RyYWNlY2h0eXBlMigpLCB3aGljaCBkaWQgbm90IGFjY291bnQgZm9yIHJlcGVhdHMKKwkgIG9yIHJlZGVmaW5pdGlvbiB3aXRoaW4gYW4gYWNzYyBzdHJpbmcuCisJKyBtb2RpZnkgZGVidWctbGlicmFyeSB2ZXJzaW9uIGJhdWRyYXRlKCkgdG8gdXNlIGVudmlyb25tZW50IHZhcmlhYmxlCisJICAkQkFVRFJBVEUgdG8gb3ZlcnJpZGUgc3BlZWQgY29tcHV0YXRpb24uICBUaGlzIGlzIG5lZWRlZCBmb3IKKwkgIHJlZ3Jlc3Npb24gdGVzdGluZy4KKwkrIGNvcnJlY3QgcHJvYmxlbXMgc2hvd24gYnkgIndlYmxpbnQgLXBlZGFudGljIi4KKwkrIHVwZGF0ZSBtYWlsaW5nLWxpc3QgaW5mb3JtYXRpb24gKG5vdyBuY3Vyc2VzQGJzZGkuY29tKS4KKworOTcwNDE5CisJKyBJbXByb3ZlIGZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeCBtYW5wYWdlIHRvIGJldHRlciBkZXNjcmliZSB0aGUKKwkgIHByZWNpc2lvbiBwYXJhbWV0ZXIgZm9yIFRZUEVfTlVNRVJJQyBhbmQgVFlQRV9JTlRFR0VSLiAgUHJvdmlkZSBtb3JlCisJICBwcmVjaXNlIGluZm9ybWF0aW9uIGhvdyB0aGUgcmFuZ2UgY2hlY2tpbmcgY2FuIGJlIGF2b2lkZWQuICAocGF0Y2ggYnkKKwkgIEp1ZXJnZW4gUGZlaWZlciwgcmVwb3J0ZWQgYnkgQnJ5YW4gSGVuZGVyc29uKQorCSsgY2hhbmdlIHR5cGUgb2YgbWluL21heCB2YWx1ZSBvZiBmb3JtIHR5cGVzIFRZUEVfSU5URUdFUiB0byBsb25nIHRvCisJICBtYXRjaCBTVnI0IGRvY3VtZW50YXRpb24uCisJKyBzZXQgdGhlIGZvcm0gd2luZG93IHRvIHN0ZHNjciBpbiBzZXRfZm9ybV93aW4oKSBzbyB0aGF0IGZvcm1fd2luKCkKKwkgIHdvbid0IHJldHVybiBudWxsIChwYXRjaCBieSBKdWVyZ2VuIFBmZWlmZXIsIHJlcG9ydGVkIGJ5IEJyeWFuCisJICBIZW5kZXJzb24gPGJyeWFuaEBnaXJhZmZlLm5ldGdhdGUubmV0PikuCisKKzk3MDQxMgorCSsgY29ycmVjdGVkIGlmZGVmJ2luZyBvZiBpbmxpbmUgKGNmOiA5NzAzMjEpIGZvciBUUkFDRSB2cyBDKysuCisJKyBjb3JyZWN0ZWQgdG9nZ2xlX2F0dHJfb2ZmKCkgbWFjcm8gKHBhdGNoIGJ5IEFuZHJpZXMgQnJvdXdlcikuCisJKyBtb2RpZnkgdHJlYXRtZW50IG9mIGVtcHR5IHRva2VuIGluICRNQU5QQVRIIHRvIC91c3IvbWFuIChyZXBvcnRlZCBieQorCSAgPEFuZHJpZXMuQnJvdXdlckBjd2kubmw+KQorCSsgbW9kaWZ5IHRyYWNlcyB0aGF0IHJlY29yZCBmdW5jdGlvbnMtY2FsbGVkIHNvIHRoYXQgY2h0eXBlIGFuZCBhdHRyX3QKKwkgIHZhbHVlcyBhcmUgZXhwcmVzc2VkIHN5bWJvbGljYWxseSwgdG8gc2ltcGxpZnkgcmV1c2Ugb2YgZ2VuZXJhdGVkCisJICB0ZXN0LXNjcmlwdHMgb24gU1ZyNCByZWdyZXNzaW9uIHRlc3RpbmcuCisJKyBhZGQgbmV3IHRyYWNlIGZ1bmN0aW9ucyBfdHJhY2VhdHRyMigpIGFuZCBfdHJhY2VjaHR5cGUyKCkKKworOTcwNDA1CisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1jb25zdCwgdG8gc3VwcG9ydCB0aGUgdXNlIG9mICdjb25zdCcKKwkgIHdoZXJlIFhTSSBzaG91bGQgaGF2ZSwgYnV0IGRpZCBub3QsIHNwZWNpZnkuICBUaGlzIGRlZmluZXMKKwkgIE5DVVJTRVNfQ09OU1QsIHdoaWNoIGlzIGFuIGVtcHR5IHRva2VuIG90aGVyd2lzZSwgZm9yIHN0cmljdAorCSAgY29tcGF0aWJpbGl0eS4KKwkrIG1ha2UgcHJvY2Vzc2luZyBvZiBjb25maWd1cmUgb3B0aW9ucyBtb3JlIHZlcmJvc2UgYnkgZWNob2luZyB0aGUKKwkgIC0tZW5hYmxlLy0td2l0aCB2YWx1ZXMuCisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLWVuYWJsZS1iaWctY29yZQorCSsgc2V0IGluaXRpYWwgc3RhdGUgb2Ygc29mdHdhcmUgZWNobyBvZmYgYXMgcGVyIFhTSS4KKwkrIGNoZWNrIGZvciBDKysgYnVpbHRpbi5oIGhlYWRlcgorCSsgY29ycmVjdCBjb21wdXRhdGlvbiBvZiBhYnNvbHV0ZS1wYXRoIGZvciAkSU5TVEFMTCB0aGF0IGRyb3BwZWQgIi1jIgorCSAgcGFyYW1ldGVyIGZyb20gdGhlIGV4cHJlc3Npb24uCisJKyByZW5hbWUgY29uZmlnLmggdG8gbmN1cnNlc19jZmcuaCB0byBhdm9pZCBuYW1pbmctY29uZmxpY3Qgd2hlbgorCSAgbmN1cnNlcyBpcyBpbnRlZ3JhdGVkIGludG8gbGFyZ2VyIHN5c3RlbXMgKGFkYXB0ZWQgZnJvbSBkaWZmcyBieQorCSAgSC5KLkx1IGZvciBsaWJjKS4KKwkrIGNvcnJlY3QgaW5lcXVhbGl0eSBpbiBsaWJfZG91cGRhdGUuYyB0aGF0IGNhdXNlZCBhIHNpbmdsZS1jaGFyIHRvIG5vdAorCSAgYmUgdXBkYXRlZCB3aGVuIHRoZSBjaGFyIG9uIHRoZSByaWdodC1tYXJnaW4gd2FzIG5vdCBibGFuaywgaWRjb2soKQorCSAgd2FzIHRydWUgKHBhdGNoIGJ5IEFsZXhhbmRlciBWIEx1a3lhbm92IChpbiA5NzAxMjQpLCByZXBvcnRlZAorCSAgYnkgS3JpYW5nIExlcmRzdXdhbmFraWogPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PiBpbiA5NzAzMjkpLgorCSsgbW9kaWZ5ICdjbGVhbicgcnVsZSBpbiBpbmNsdWRlL01ha2VmaWxlIHNvIHRoYXQgZmlsZXMgY3JlYXRlZCBieQorCSAgY29uZmlndXJlIHNjcmlwdCBhcmUgcmVtb3ZlZCBpbiAnZGlzdGNsZWFuJyBydWxlIGluc3RlYWQuCisKKzk3MDMyOAorCSsgY29ycmVjdCBhcnJheSBsaW1pdCBpbiB0cGFyYW1faW50ZXJuYWwoKSwgYWRkIGNhc2UgdG8gaW50ZXJwcmV0ICIleCIKKwkgIChwYXRjaCBieSBBbmRyZWFzIFNjaHdhYikKKwkrIHJld3JvdGUgbnVtYmVyLXBhcnNpbmcgaW4gbmN1cnNlcy5jICdkJyB0ZXN0OyBpdCBkaWQgbm90IHJlc2V0IHRoZQorCSAgdmFsdWUgcHJvcGVybHkgd2hlbiBub24tbnVtZXJpYyBjaGFyYWN0ZXJzIHdlcmUgZ2l2ZW4gKHJlcG9ydGVkIGJ5CisJICBBbmRyZWFzIFNjaHdhYiA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPikKKworOTcwMzIxCisJKyBtb3ZlIGRlZmluaXRpb24gb2YgX19JTlRFUk5BTF9DQVBTX1ZJU0lCTEUgYmVmb3JlIGluY2x1ZGUgZm9yCisJICBwcm9ncy5wcml2LmggKHBhdGNoIGJ5IERhdmlkIE1hY0tlbnppZSkuCisJKyBhZGQgY29uZmlndXJhdGlvbiBzdW1tYXJ5LCByZW9yZGVyZWQgY2hlY2sgZm9yIGRlZmF1bHQgaW5jbHVkZQorCSAgZGlyZWN0b3J5IHRvIGJldHRlciBhY2NvbW1vZGF0ZSBhIGNhc2Ugd2hlcmUgaW5zdGFsbGVyIGlzIGNvbmZpZ3VyaW5nCisJICBhIHNlY29uZCBjb3B5IG9mIG5jdXJzZXMgKHJlcG9ydGVkIGJ5IEtsYXVzIFdlaWRlCisJICA8a3dlaWRlQHRlemNhdC5jb20+KQorCSsgbW92ZWQgdGhlICNkZWZpbmUgZm9yICdpbmxpbmUnIGFzIGFuIGVtcHR5IHRva2VuIGZyb20gdGhlCisJICAkKENGTEFHU19ERUJVRykgc3ltYm9sIGludG8gY29uZmlnLmgsIHRvIGF2b2lkIHJlZGVmaW5pdGlvbiB3YXJuaW5nCisJICAocmVwb3J0ZWQgYnkgV2FyZCBIb3JuZXIpLgorCSsgbW9kaWZ5IHRlc3QgZm9yIGJvb2wgYnVpbHRpbiB0eXBlIHRvIHVzZSAndW5zaWduZWQnIHJhdGhlciB0aGFuCisJICAndW5rbm93bicgd2hlbiBjcm9zcy1jb21waWxpbmcgKHJlcG9ydGVkIGJ5IFdhcmQgSG9ybmVyKS4KKworOTcwMzE1CisJKyBhZGQgaGVhZGVyIGRlcGVuZGVuY2llcyBzbyB0aGF0ICJtYWtlIGluc3RhbGwubGlicyIgd2lsbCBzdWNjZWVkCisJICBldmVuIGlmICJtYWtlIGFsbCIgaXMgbm90IGRvbmUgZmlyc3QuCisJKyBtb3ZlZCBzb21lIG1hY3JvcyBmcm9tIGxpYl9kb3VwZGF0ZS5jIHRvIGN1cnNlcy5wcml2LmggdG8gdXNlIGluCisJICBleHBhbmRlZCBmdW5jdGlvbnMgd2l0aCBBVEFDLgorCSsgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZiBsaWJfaW5zdHIuYzsgYm90aCBYU0kgYW5kIFNWcjQgYWdyZWUgdGhhdAorCSAgdGhlIHdpbm5zdHIgZnVuY3Rpb25zIGNhbiByZXR1cm4gbW9yZSBjaGFyYWN0ZXJzIHRoYW4gd2lsbCBmaXQgb24gb25lCisJICBsaW5lLgorCis5NzAzMDgKKwkrIG1vZGlmeSBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgbGliX2dlbi5jIHRvIHN1cHBvcnQgdHJhY2VzIG9mIGNhbGxlZCAmCisJICByZXR1cm4uCisJKyBhZGQgbmV3IGNvbmZpZ3VyZSBvcHRpb24gIi0tZGlzYWJsZS1tYWNyb3MiLCBmb3IgdGVzdGluZyBjYWxscyB3aXRoaW4KKwkgIGxpYl9nZW4uYworCSsgY29ycmVjdGVkIGxvZ2ljIHRoYXQgc2NyZWVucyBsZXZlbC1jaGVja2luZyBvZiBjYWxsZWQvcmV0dXJuIHRyYWNlcy4KKworOTcwMzAxCisJKyB1c2UgbmV3IGNvbmZpZ3VyZSBtYWNybyBOQ19TVUJTVCB0byByZXBsYWNlIEFDX1BBVEhfUFJPRywgYmV0dGVyCisJICBhZGRyZXNzaW5nIHJlcXVlc3QgYnkgV2FyZCBIb3JuZXIuCisJKyBjaGVjayBmb3IgY3Jvc3MtY29tcGlsaW5nIGJlZm9yZSB0cnlpbmcgdG8gaW52b2tlIHRoZSBhdXRvY29uZgorCSAgQUNfRlVOQ19TRVRWQlVGX1JFVkVSU0VEIG1hY3JvIChyZXBvcnRlZCBieSBXYXJkIEhvcm5lcikKKwkrIGNvcnJlY3Qvc2ltcGxpZnkgbG9vcCBpbiBfbmNfdmlzYnVmKCksIDk3MDIwMSBjaGFuZ2VzIG9taXR0ZWQKKwkgIGEgcG9pbnRlci1pbmNyZW1lbnQuCisJKyBlbGltaW5hdGUgb2Jzb2xldGUgc3ltYm9sIFNIQVJFRF9BQkkgZnJvbSBkaXN0Lm1rIChub3RlZCBieQorCSAgRmxvcmlhbiBMYSBSb2NoZSkuCisKKzk3MDIxNQorCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtZXhwYW5kZWQsIHRvZ2V0aGVyIHdpdGggY29kZSB0aGF0CisJICBpbXBsZW1lbnRzIGFuIGV4cGFuZGVkIGZvcm0gb2YgY2VydGFpbiBjb21wbGV4IG1hY3JvcywgZm9yIHRlc3RpbmcKKwkgIHdpdGggQVRBQy4KKwkrIGRpc2FibGUgQ0hFQ0tfUE9TSVRJT04gdW5sZXNzIC0td2l0aC1hc3NlcnRpb25zIGlzIGNvbmZpZ3VyZWQKKwkgIChBbGV4YW5kZXIgViBMdWt5YW5vdiBwb2ludGVkIG91dCB0aGF0IHRoaXMgaXMgcmVkdW5kYW50KS4KKwkrIHVzZSBrZXluYW1lKCkgdG8gc2hvdyB0cmFjZWQgY2h0eXBlIHZhbHVlcyB3aGVyZSBhcHBsaWNhYmxlIHJhdGhlcgorCSAgdGhhbiBfdHJhY2VjaGFyKCksIHdoaWNoIHRydW5jYXRlcyB0aGUgdmFsdWUgdG8gOC1iaXRzLgorCSsgbWlub3IgZml4ZXMgdG8gVFJBQ0VfSUNBTExTLCBhZGRlZCBUX0NSRUFURSwgVFJBQ0VfQ0NBTExTIG1hY3Jvcy4KKwkrIG1vZGlmeSBtYWtlZmlsZXMgaW4gcHJvZ3MgYW5kIHRlc3QgZGlyZWN0b3JpZXMgdG8gYXZvaWQgdXNpbmcgQworCSAgcHJlcHJvY2Vzc29yIG9wdGlvbnMgb24gbGluayBjb21tYW5kcyAocmVwb3J0ZWQgYnkgV2FyZCBIb3JuZXIpCisJKyBjb3JyZWN0IGlmZGVmL2luY2x1ZGUtb3JkZXIgZm9yIG5jX2FsbG9jLmggdnMgbGliX2ZyZWVhbGwuYyAocmVwb3J0ZWQKKwkgIGJ5IFdhcmQgSG9ybmVyKQorCSsgbW9kaWZ5IGlmZGVmJ3MgdG8gdXNlIGNvbmZpZ3VyZS1kZWZpbmVkIHN5bWJvbHMgY29uc2lzdGVudGx5CisJICAocmVwb3J0ZWQgYnkgV2FyZCBIb3JuZXIpCisJKyBhZGQvdXNlIG5ldyBtYWtlZmlsZSBzeW1ib2xzIEFSLCBBUl9PUFRTIGFuZCBMRCB0byBhc3Npc3QgaW4gbm9uLVVOSVgKKwkgIHBvcnRzIChyZXBvcnRlZCBieSBXYXJkIEhvcm5lciA8d2hvcm5lckB0c2ktdGVsc3lzLmNvbT4pCisJKyByZW5hbWUgc3RydWN0IHRyeSB0byBzdHJ1Y3QgdHJpZXMsIHRvIGF2b2lkIG5hbWUgY29uZmxpY3Qgd2l0aCBDKysKKwkgIChyZXBvcnRlZCBieSBHYXJ5IEpvaG5zb24pLgorCSsgbW9kaWZ5IHdvcm0uYyB0byBoaWRlIGN1cnNvciB3aGlsZSBydW5uaW5nLgorCSsgYWRkIC1XY2FzdC1xdWFsIHRvIGdjYyB3YXJuaW5ncywgZml4IGFjY29yZGluZ2x5LgorCSsgdXNlIFB1dENoYXIgcmF0aGVyIHRoYW4gUHV0QXR0ckNoYXIgaW4gQ2xyVG9FT0wgdG8gcHJvcGVybHkgaGFuZGxlCisJICB3cmFwcGluZyAoQWxleGFuZGVyIFYgTHVreWFub3YpLgorCSsgY29ycmVjdCBzcHVyaW91cyBlY2hvaW5nIG9mIGlucHV0IGluIGhhbm9pLmMgZnJvbSBlcmljJ3MgIzI5MSAmICMyOTIKKwkgIHBhdGNoZXMgKHJlcG9ydGVkIGJ5IFZlcm5vbiBDLiBIb3hpZSA8dmVybkB6ZWJyYS5hbHBoYWNkYy5jb20+KS4KKwkrIGV4dGVuZCBJUklYIGNvbmZpZ3VyYXRpb24gdG8gSVJJWDY0CisJKyBzdXBwbHkgbWlzc2luZyBpbnN0YWxsLmxpYnMgcnVsZSBuZWVkZWQgYWZ0ZXIgcmVzdHJ1Y3R1cmluZworCSAgdGVzdC9NYWtlZmlsZS5pbgorCis5NzAyMDgKKwkrIG1vZGlmeSAibWFrZSBtb3N0bHljbGVhbiIgdG8gbGVhdmUgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQgc291cmNlCisJICBpbiB0aGUgbmN1cnNlcyBkaXJlY3RvcnksIGZvciB1c2UgaW4gY3Jvc3MtY29tcGlsZXMuCisJKyBhdXRvZ2VuZXJhdGVkIG9iamVjdC1kZXBlbmRlbmNpZXMgZm9yIHRlc3QgZGlyZWN0b3J5CisJKyBhZGQgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtcmNzLWlkcworCSsgbW9kaWZ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0byBnZW5lcmF0ZSBtYWpvci9taW5vci9wYXRjaCB2ZXJzaW9ucworCSAgKHN1Z2dlc3RlZCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBzdXBwbHkgbWlzc2luZyB2YV9lbmQncyBpbiBsaWJfc2NhbncuYworCSsgdXNlIHN0cmVhbSBJL08gZm9yIHRyYWNlLW91dHB1dCwgdG8gZWxpbWluYXRlIGZpeGVkLXNpemUgYnVmZmVyCisJKyBhZGQgVFJBQ0VfSUNBTExTIGRlZmluaXRpb24vc3VwcG9ydCB0byBsaWJfdHJhY2UuYworCSsgbW9kaWZ5IEFkYTk1IGJpbmRpbmcgdG8gd29yayB3aXRoIEdOQVQgMy4wOSAoSnVlcmdlbiBQZmVpZmVyKS4KKworOTcwMjAxCisJKyBhZGQvbW9kaWZ5IHRyYWNlcyBmb3IgY2FsbGVkL3JldHVybiB2YWx1ZXMgdG8gc2ltcGxpZnkgZXh0cmFjdGlvbgorCSAgZm9yIHRlc3Qgc2NyaXB0cy4KKwkrIGNoYW5nZWQgX25jX3Zpc2J1ZiB0byBxdW90ZSBpdHMgcmVzdWx0LCBhbmQgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUKKwkgIHRoZSByZXR1cm5lZCBidWZmZXIuCisJKyBpbnZva2UgbGRjb25maWcgYWZ0ZXIgaW5zdGFsbGluZyBzaGFyZWQgbGlicmFyeQorCSsgbW9kaWZ5IGluc3RhbGwgc28gdGhhdCBvdmVyd3JpdGUgYXBwbGllcyB0byBzaGFyZWQgbGlicmFyeSAtbGN1cnNlcworCSAgaW4gcHJlZmVyZW5jZSB0byBzdGF0aWMgbGlicmFyeSAocmVwb3J0ZWQgYnkgWmV5ZCBNIEJlbi1IYWxpbSA5NjA5MjgpLgorCSsgY29ycmVjdCBtaXNzaW5nICc7JyBpbiA5NjEyMjEgbW9kIHRvIG92ZXJ3cml0ZSBvcHRpb25hbCB1c2Ugb2YgJChMTl9TKQorCSAgc3ltYm9sLgorCSsgZml4ZXMgdG8gYWxsb3cgIm1ha2UgaW5zdGFsbCIgdG8gd29yayB3aXRob3V0IGZpcnN0IGRvaW5nIGEgIm1ha2UKKwkgIGFsbCIgKHN1Z2dlc3RlZCBieSBMYXJyeSBWaXJkZW4pLgorCis5NzAxMjUKKwkrIGNvcnJlY3Qgb3JkZXIgb2YgI2lmZGVmIGZvciBUQUJTX09LLgorCSsgaW5zdHJ1bWVudGVkIHRvZS5jIHRvIHRlc3QgbWVtb3J5LWxlYWtzLgorCSsgY29ycmVjdCBtZW1vcnktZGVhbGxvY2F0aW9uIGluIHRvZS5jIChwYXRjaCBieSBKZXNzZSBUaGlsbykuCisJKyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gaW4gY29uZmlndXJhdGlvbiB0ZXN0IGZvciByZWdleC5oIChwYXRjaCBieQorCSAgQW5kcmVhcyBTY2h3YWIpCisJKyBtYWtlIGluZm9jbXAgcmVjb2duaXplIC1JIG9wdGlvbiwgZm9yIFNWcjQgY29tcGF0aWJpbGl0eSAocmVwb3J0ZWQgYnkKKwkgIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+KQorCis5NzAxMTgKKwkrIGFkZCBleHRlbnNpb24gJ3VzZV9kZWZhdWx0X2NvbG9ycygpJywgbW9kaWZpZWQgdGVzdCBhcHBsaWNhdGlvbnMgdGhhdAorCSAgdXNlIGRlZmF1bHQgYmFja2dyb3VuZCAoZmlyZXdvcmssIGdkYywgaGFub2ksIGtuaWdodCwgd29ybSkgdG8KKwkgIGRlbW9uc3RyYXRlLgorCSsgY29ycmVjdCBzb21lIGxpbWl0IGNoZWNrcyBpbiBsaWJfZG91cGRhdGUuYyBleHBvc2VkIHdoaWxlIHJ1bm5pbmcKKwkgIHdvcm0uCisJKyB1c2UgdHlwZUNhbGxvYyBtYWNybyBmb3IgcmVhZGFiaWxpdHkuCisJKyBhZGQvdXNlIGRlZmluaXRpb24gZm9yIENPTlNUIHRvIGFjY29tbW9kYXRlIHRlc3Rpbmcgd2l0aCBTb2xhcmlzCisJICAoU1ZyNCkgY3Vyc2VzLCB3aGljaCBkb2Vzbid0IHVzZSAnY29uc3QnIGluIGl0cyBwcm90b3R5cGVzLgorCSsgbW9kaWZ5IGlmZGVmJ3MgaW4gdGVzdC9oYXNodGVzdC5jIGFuZCB0ZXN0L3ZpZXcuYyB0byBjb21waWxlIHdpdGgKKwkgIFNvbGFyaXMgY3Vyc2VzLgorCSsgbW9kaWZ5IF90cmFjZWR1bXAoKSB0byBwYWQgcGFkIGNvbG9ycyAmIGF0dHJzIGxpbmVzIHRvIG1hdGNoIGNoYW5nZQorCSAgaW4gOTcwMTAxIHNob3dpbmcgZmlyc3QvbGFzdCBjaGFuZ2VzLgorCSsgY29ycmVjdGVkIGxvY2F0aW9uIG9mIHRlcm1pbmF0aW5nIG51bGwgb24gZHluYW1pY2FsbHkgYWxsb2NhdGVkIGZvcm1zCisJICBmaWVsZHMgKHBhdGNoIGJ5IFBlciBGb3JlYnkpLgorCis5NzAxMTEKKwkrIGFkZGVkIGhlYWRlcnMgdG8gbWFrZSB2aWV3LmMgY29tcGlsZSBvbiBTQ08gd2l0aCB0aGUgcmVzaXpldGVybSgpCisJICBjb2RlIChpLmUuLCBzdHJ1Y3Qgd2luc2l6ZSkgLSB0aG91Z2ggdGhpcyBjb21waWxlcywgSSBkb24ndCBoYXZlIGEKKwkgIHN1aXRhYmxlIHRlc3QgY29uZmlndXJhdGlvbiBzaW5jZSBTSUdXSU5DSCBkb2Vzbid0IHBhc3MgbXkgbmV0d29yayB0bworCSAgdGhhdCBtYWNoaW5lIC0gVC5EaWNrZXkuCisJKyB1cGRhdGUgdGVzdC9jb25maWd1cmUuaW4gdG8gc3VwcGx5IHNvbWUgZGVmYXVsdCBzdWJzdGl0dXRpb25zLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gYWRkIC1sbmN1cnNlcyBhZnRlciAtbGdwbSB0byBmaXggcHJvYmxlbQorCSAgbGlua2luZyBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMuCisJKyBhZGQgYSBtaXNzaW5nIG5vcmF3KCkgdG8gdGVzdC9uY3Vyc2VzLmMgKHBsYWNlcyBub3RlZCBieSBKZXJlbXkKKwkgIEJ1aGxlcikKKwkrIGFkZCBhIG1pc3Npbmcgd2NsZWFyKCkgdG8gdGVzdC90ZXN0Y3Vycy5jIChwYXRjaCBieSBKZXJlbXkgQnVobGVyCisJICA8amJ1aGxlckBjcy53YXNoaW5ndG9uLmVkdT4pCisJKyBtb2RpZnkgaGVhZGVycyB0byBhY2NvbW1vZGF0ZSBjb21waWxlcnMgdGhhdCBkb24ndCBhbGxvdyBkdXBsaWNhdGUKKwkgICIjZGVmaW5lIiBsaW5lcyBmb3IgTkNVUlNFU19WRVJTSU9OIChyZXBvcnRlZCBieSBMYXJyeSBXLiBWaXJkZW4KKwkgIDxsdmlyZGVuQGNhcy5vcmc+KQorCSsgZml4IGZvcm1hdHRpbmcgZ2xpdGNoIGluIGN1cnNfZ2V0Y2guM3ggKHBhdGNoIGJ5IEplc3NlIFRoaWxvKS4KKwkrIG1vZGlmeSBsaWJfZG91cGRhdGUgdG8gbWFrZSBlbCwgZWwxIGFuZCBlZCBvcHRpbWl6YXRpb24gdXNlIHRoZQorCSAgY2FuX2NsZWFyX3dpdGggbWFjcm8sIGFuZCBjaGFuZ2UgRW1pdFJhbmdlIHRvIGFsbG93IGxlYXZpbmcgY3Vyc29yIGF0CisJICB0aGUgbWlkZGxlIG9mIGludGVydmFsLCByYXRoZXIgdGhhbiBhbHdheXMgYXQgdGhlIGVuZCAocGF0Y2ggYnkKKwkgIEFsZXhhbmRlciBWIEx1a3lhbm92KS4gIFRoaXMgd2FzIG9yaWdpbmFsbHkgOTYwOTI5LCByZXN5bmMgOTcwMTA2LgorCis5NzAxMDQKKwkrIHdvcmthcm91bmQgZGVmZWN0IGluIGF1dG9jb25mIDIuMTIgKHdoaWNoIHRlcm1pbmF0ZXMgY29uZmlndXJhdGlvbgorCSAgaWYgbm8gQysrIGNvbXBpbGVyIGlzIGZvdW5kKSBieSBhZGRpbmcgYW4gb3B0aW9uIC0td2l0aG91dC1jeHguCisJKyBtb2RpZnkgc2V2ZXJhbCBtYW4tcGFnZXMgdG8gdXNlIHRibCwgd2hlcmUgLm5mLy5maSB3YXMgdXNlZCAocmVwb3J0ZWQKKwkgIGJ5IEplc3NlIFRoaWxvKS4KKwkrIGNvcnJlY3QgZm9udC1jb2RlcyBpbiBzb21lIG1hbi1wYWdlcyAocGF0Y2ggYnkgSmVzc2UgVGhpbG8KKwkgIDxKZXNzZS5UaGlsb0Bwb2JveC5jb20+KQorCSsgdXNlIGNvbmZpZ3VyZSBzY3JpcHQncyBrbm93bGVkZ2Ugb2YgZXhpc3RlbmNlIG9mIGcrKyBsaWJyYXJ5IGZvciB0aGUKKwkgIGMrKyBNYWtlZmlsZSAocmVwb3J0ZWQgYnkgUGF1bCBKYWNrc29uKS4KKwkrIGNvcnJlY3QgbWlzbGVhZGluZyBkZXNjcmlwdGlvbiBvZiAtLWRhdGFkaXIgY29uZmlndXJhdGlvbiBvcHRpb24KKwkgIChyZXBvcnRlZCBieSBQYXVsIEphY2tzb24gPHBqQHNhbS5lbmdyLnNnaS5jb20+KQorCis5NzAxMDEKKwkrIHNldmVyYWwgY29ycmVjdGlvbnMgdG8gX25jX212Y3VyX3Njcm9sbG4oKSwgcHJvbXB0ZWQgYnkgYSBidWcgcmVwb3J0CisJICBmcm9tIFBldGVyIFdlbW06CisJPiB0aGUgbG9naWMgZm9yIG5vbl9kZXN0X3Njcm9sbF9yZWdpb24gd2FzIGludGVyY2hhbmdlZCBiZXR3ZWVuIHRoZQorCSAgZm9yd2FyZCAmIHJldmVyc2Ugc2Nyb2xsaW5nIGNhc2VzLgorCT4gbXVsdGlwbGUgcmV0dXJucyBmcm9tIHRoZSBmdW5jdGlvbiBhbGxvd2VkIGNlcnRhaW4gY29uZGl0aW9ucyB0byBkbworCSAgcGFydCBvZiBhbiBvcGVyYXRpb24gYmVmb3JlIGRpc2NvdmVyaW5nIHRoYXQgaXQgY291bGRuJ3QgYmUKKwkgIGNvbXBsZXRlZCwgcmV0dXJuaW5nIGFuIGVycm9yIHdpdGhvdXQgcmVzdG9yaW5nIHRoZSBjdXJzb3IuCisJPiBzb21lIHJldHVybnMgd2VyZSBFUlIsIHdoZXJlIHRoZSBmdW5jdGlvbiBoYWQgY29tcGxldGVkIHRoZQorCSAgb3BlcmF0aW9uLCBiZWNhdXNlIHRoZSBpbnNlcnQvZGVsZXRlIGxpbmUgbG9naWMgd2FzIGltcHJvcGVybHkKKwkgIHRlc3RlZCAodGhpcyB3YXMgcHJvYmFibHkgdGhlIGNhc2UgUGV0ZXIgc2F3KS4KKwk+IGNvbnRyYXJ5IHRvIGNvbW1lbnRzLCBzb21lIHNjcm9sbGluZyBjYXNlcyB3ZXJlIHRlc3RlZCBhZnRlciB0aGUKKwkgIGluc2VydC9kZWxldGUgbGluZSBtZXRob2QuCisJKyBtb2RpZnkgX3RyYWNlZHVtcCgpIHRvIHNob3cgZmlyc3QvbGFzdCBjaGFuZ2VzLgorCSsgbW9kaWZ5IHBhcmFtIG9mIENsclVwZGF0ZSgpIGluIGxpYl9kb3VwZGF0ZS5jIHRvICduZXdzY3InLCBmaXhlcworCSAgcmVmcmVzaCBwcm9ibGVtIChyZXBvcnRlZCBieSBQZXRlciBXZW1tKSB0aGF0IGNhdXNlZCBudmkgdG8gbm90IHNob3cKKwkgIHJlc3VsdCBvZiAiOnIgIWxzIiB1bnRpbCBhIF5MIHdhcyB0eXBlZC4KKworOTYxMjI5CShpbnRlcm5hbCBhbHBoYSkKKwkrIGNvcnJlY3Qgc29tZSBvZiB0aGUgd3JpdGFibGUtc3RyaW5ncyB3YXJuaW5ncyAocmVwb3J0ZWQgYnkgR2FyeQorCSAgSm9obnNvbiA8Z2pvaG5zb25Ac2Vhc29uLmNvbT4pLiAgTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIHJlbWFpbmluZyBvbmVzCisJICBhcmUgcGFydCBvZiB0aGUgWFNJIHNwZWNpZmljYXRpb24sIGFuZCBjYW4ndCBiZSAiZml4ZWQiLgorCSsgaW1wcm92ZSBpbmNsdWRlLWRlcGVuZGVuY2llcyBpbiBmb3JtLCBtZW51LCBwYW5lbCBkaXJlY3Rvcmllcy4KKwkrIGNvcnJlY3QgbG9naWMgb2YgZGVsYXlfb3V0cHV0KCksIHdoaWNoIHdvdWxkIHJldHVybiBlYXJseSBpZgorCSAgdGhlcmUgaXMgZGF0YSBvbiBzdGRpbi4KKwkrIG1vZGlmeSBpbnRlcmZhY2UgJiBsb2dpYyBvZiBfbmNfdGltZWRfd2FpdCgpIHRvIHN1cHBvcnQgMiBmaWxlCisJICBkZXNjcmlwdG9ycywgbmVlZGVkIGZvciBHUE0uCisJKyBpbnRlZ3JhdGUgcGF0Y2ggYnkgQW5kcmV3IEt1Y2hsaW5nIDxhbWtAbWFnbmV0LmNvbT4gZm9yIEdQTSAobW91c2UpCisJICBzdXBwb3J0LCBjb3JyZWN0aW5nIGxvZ2ljIGluIHdnZXRjaCgpIGFuZCBfbmNfbW91c2VfcGFyc2UoKSB3aGljaAorCSAgcHJldmVudGVkIHBhdGNoIGZyb20gd29ya2luZyBwcm9wZXJseSAtVEQKKwkrIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgcGFuZWwgYWxnb3JpdGhtIChKdWVyZ2VuIFBmZWlmZXIgOTYxMjAzKS4KKwkrIHN0cmlwIFJDUyBpZCdzIGZyb20gZ2VuZXJhdGVkIC5odG1sIGZpbGVzIGluIEFkYTk1IHN1YnRyZWUuCisJKyByZXN5bmMgd2l0aCBnZW5lcmF0ZWQgLmh0bWwgZmlsZXMgKEp1ZXJnZW4gUGZlaWZlciA5NjEyMjMpLgorCSsgdGVybWluZm8uc3JjIDEwLjEuMCAoRVNSKS4KKworOTYxMjI0CTQuMCByZWxlYXNlCisJKyByZWxlYXNlIGFzIDQuMCB0byBhY2NvbW1vZGF0ZSBMaW51eCBsZC5zby4xLjguNQorCSsgY29ycmVjdCBzeW50YXgvc3BlbGxpbmcsIHJlZ2VuZXJhdGVkIC5kb2MgZmlsZXMgZnJvbSAuaHRtbCB1c2luZworCSAgbHlueCAyLjUKKwkrIHJlZmluZWQgZm9ybXMvbWVudXMgbWFrZWZpbGVzIChKdWVyZ2VuIFBmZWlmZXIgOTYxMjIzKS4KKworOTYxMjIxCS0gc25hcHNob3QKKwkrIHJlbW92ZSBsb2dpYyBpbiByZWFkX2VudHJ5LmMgdGhhdCBhdHRlbXB0cyB0byByZWZpbmUgZXJybm8gYnkgdXNpbmcKKwkgICdhY2Nlc3MoKScgZm9yIHRoZSBkaXJlY3RvcnkgKGZyb20gcGF0Y2ggYnkgRmxvcmlhbiBMYSBSb2NoZSkuCisJKyBjb3JyZWN0IGNvbmZpZ3VyZSB0ZXN0L3N1YnN0aXR1dGlvbiB0aGF0IGluaGliaXRzIGdlbmVyYXRpbmcKKwkgIGluY2x1ZGUtcGF0aCB0byAvdXNyL2luY2x1ZGUgaWYgZ2NjIGlzIHVzZWQgKHJlcG9ydGVkIGJ5IEZsb3JpYW4gTGEKKwkgIFJvY2hlKS4KKwkrIG1vZGlmeSBzZXR1cHRlcm0oKSB0byBhbGxvY2F0ZSBuZXcgVEVSTUlOQUwgZm9yIGVhY2ggY2FsbCwganVzdCBhcworCSAgc29sYXJpcycgY3Vyc2VzIGRvZXMgKEFsZXhhbmRlciBWIEx1a3lhbm92IDk2MDgyOSkuCisJKyBjb3JyZWN0ZWQgbWVtb3J5IGxlYWtzIGluIHJlYWRfZW50cnkuYworCSsgYWRkIGNvbmZpZ3VyZSBvcHRpb25zIC0td2l0aC1kYm1hbGxvYywgLS13aXRoLWRtYWxsb2MsIGFuZAorCSAgLS1kaXNhYmxlLWxlYWtzLCB0ZXN0ZWQgYnkgaW5zdHJ1bWVudGluZyBpbmZvY21wLCBuY3Vyc2VzIHByb2dyYW1zLgorCSsgbW92ZSAjaW5jbHVkZSdzIGZvciBzdGRsaWIuaCBhbmQgc3RyaW5nLmggdG8gKi5wcml2LmggdG8gYWNjb21tb2RhdGUKKwkgIHVzZSBvZiBkYm1hbGxvYy4KKwkrIG1vZGlmeSB1c2Ugb2YgJChMTl9TKSB0byBmb2xsb3cgcmVjb21tZW5kYXRpb24gaW4gYXV0b2NvbmYgMi4xMiwKKwkgIGkuZS4sIHNldCBjdXJyZW50IGRpcmVjdG9yeSBiZWZvcmUgbGlua2luZy4KKwkrIHNwbGl0LW91dCBwYW5lbC5wcml2LmgsIGltcHJvdmUgZGVwZW5kZW5jaWVzIGZvciBmb3JtcywgbWVudXMKKwkgIChKdWVyZ2VuIFBmZWlmZXIgOTYxMjA0KS4KKwkrIG1vZGlmeSBfbmNfZnJlZXdpbigpIHRvIHJlc2V0IGdsb2JhbHMgY3Vyc2NyL25ld3Njci9zdGRzY3Igd2hlbgorCSAgZnJlZWluZyB0aGUgY29ycmVzcG9uZGluZyBXSU5ET1cgKGZvdW5kIHVzaW5nIFB1cmlmeSkuCisJKyBtb2RpZnkgZGVsd2luKCkgdG8gcmV0dXJuIEVSUiBpZiB0aGUgd2luZG93IHRvIGJlIGRlbGV0ZWQgaGFzCisJICBzdWJ3aW5kb3dzLCBuZWVkZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiByZXNpemV0ZXJtKCkgKGZvdW5kIHVzaW5nCisJICBQdXJpZnkpLiAgVGVzdGVkIGFuZCBmb3VuZCB0aGF0IFNWcjQgY3Vyc2VzIGJlaGF2ZXMgdGhpcyB3YXkuCisJKyBpbXBsZW1lbnQgbG9naWMgZm9yIF9uY19mcmVlYWxsKCksIGJyaW5naW5nIHN0dWIgdXAgdG8gZGF0ZS4KKworOTYxMjE1CisJKyBtb2RpZnkgd2JrZ2QoKSBzbyB0aGF0IGl0IGRvZXNuJ3Qgc2V0IG51bGxzIGluIHRoZSByZW5kZXJlZCB0ZXh0LAorCSAgZXZlbiBpZiBpdHMgYXJndW1lbnQgZG9lc24ndCBzcGVjaWZ5IGEgY2hhcmFjdGVyIChmaXhlcyB0ZXN0IGNhc2UgYnkKKwkgIEp1ZXJnZW4gUGZlaWZlciBmb3IgYnVnLXJlcG9ydCkuCisJKyBzZXQgd2luZG93LWF0dHJpYnV0ZXMgaW4gd2JrZ2QoKSwgdG8gc2ltcGxpZnkgY29tcGFyaXNvbiBhZ2FpbnN0CisJICBTb2xhcmlzIGN1cnNlcywgd2hpY2ggZG9lcyB0aGlzLgorCis5NjEyMTQJLSBzbmFwc2hvdAorCSsgcmVwbGFjZSBtb3N0IGNvbnN0YW50cyBpbiBuY3Vyc2VzICdvJyB0ZXN0IGJ5IGV4cHJlc3Npb25zLCBtYWtpbmcgaXQKKwkgIHdvcmsgd2l0aCB3aWRlciByYW5nZSBvZiBzY3JlZW4gc2l6ZXMuCisJKyBhZGQgb3B0aW9ucyB0byBuY3Vyc2VzLmMgdG8gc3BlY2lmeSAnZScgdGVzdCBzb2Z0a2V5IGZvcm1hdCwgYW5kIHRoZQorCSAgbnVtYmVyIG9mIGhlYWRlci9mb290ZXIgbGluZXMgdG8gcmlwLW9mZi4KKwkrIGFkZCBeUiAocmVwYWludCBhZnRlciByZXNpemUpLCBeTCAocmVmcmVzaCkgY29tbWFuZHMgdG8gbmN1cnNlcyAncCcKKwkgIHRlc3QuCisJKyBhZGQgc2hlbGwtb3V0ICghKSBjb21tYW5kIHRvIG5jdXJzZXMgJ3AnIHRlc3QgdG8gYWxsb3cgdGVzdCBvZgorCSAgcmVzaXplIGJldHdlZW4gZW5kd2luL3JlZnJlc2guCisJKyBjb3JyZWN0IGxpbmUtd3JhcCBjYXNlIGluIG12Y3VyKCkgYnkgZW1pdHRpbmcgY2FycmlhZ2UgcmV0dXJuLAorCSAgb3Zlcmxvb2tlZCBpbiA5NjA5MjgsIGJ1dCBuZWVkZWQgZHVlIHRvIFNWcjQgY29tcGF0aWJpbGl0eSBjaGFuZ2VzIHRvCisJICB0ZXJtaW5hbCBtb2RlcyBpbiA5NjA5MDcuCisJKyBjb3JyZWN0IGxvZ2ljIGluIHdyZXNpemUgdGhhdCBjYXVzZXMgbmV3IGxpbmVzIHRvIGJlIGFsbG9jYXRlZCwKKwkgIGJyb2tlbiBmb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiBpbmNyZWFzaW5nIHJvd3Mgb25seSBpbiA5NjA5MDcncyBmaXgKKwkgIGZvciBzdWJ3aW5kb3dzLgorCSsgbW9kaWZ5IGNvbmZpZ3VyZSBzY3JpcHQgdG8gZ2VuZXJhdGUgJChMREZMQUdTKSB3aXRoIC1MIGFuZCAtbCBvcHRpb25zCisJICBpbiBwcmVmZXJlbmNlIHRvIGV4cGxpY2l0IGxpYnJhcnkgZmlsZW5hbWVzLiAgKE5PVEU6IHRoaXMgbWF5CisJICByZXF1aXJlIGZ1cnRoZXIgYW1lbmRpbmcsIHNpbmNlIEkgdmFndWVseSByZWNhbGwgYSBkeW5hbWljIGxvYWRlcgorCSAgdGhhdCBkaWQgbm90IHdvcmsgcHJvcGVybHkgd2l0aG91dCB0aGUgZnVsbCBuYW1lcywgYnV0IGl0IHNob3VsZCBiZQorCSAgaGFuZGxlZCBhcyBhbiBleGNlcHRpb24gdG8gdGhlIHJ1bGUsIHNpbmNlIHNvbWUgbGlua2VycyBkbyBidWxrCisJICBpbmNsdXNpb24gb2YgbGlicmFyaWVzIHdoZW4gZ2l2ZW4gdGhlIGZ1bGwgbmFtZSAtIFQuRGlja2V5KS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIGFsbG93IHVzZXItc3VwcGxpZWQgJENGTEFHUyB0byBzZXQgdGhlCisJICBkZWJ1Zy1vcHRpb24gaW4gYWxsIGxpYnJhcmllcyAocmVxdWVzdGVkIGJ5IGxvdHMgb2YgcGVvcGxlKSAtVEQKKwkrIHVzZSByZXR1cm4gY29uc2lzdGVudGx5IGZyb20gbWFpbigpLCByYXRoZXIgdGhhbiBleGl0IChyZXBvcnRlZCBieQorCSAgRmxvcmlhbiBMYSBSb2NoZSkuCisJKyBhZGQgLS1lbmFibGUtZ2V0Y2FwLWNhY2hlIG9wdGlvbiB0byBjb25maWd1cmUsIG5vcm1hbGx5IGRpc2FibGVkCisJICAocmVxdWVzdGVkIGJ5IEZsb3JpYW4gTGEgUm9jaGUpLgorCSsgbWFrZSBjb25maWd1cmUgdGVzdCBmb3IgZ2V0dGltZW9mZGF5KCkgYW5kIHBvc3NpYmx5IC1sYnNkIG1vcmUKKwkgIGVmZmljaWVudCAocmVxdWVzdGVkIGJ5IEZsb3JpYW4gTGEgUm9jaGUgPGZsb3JpYW5Aa25vcmtlLnNhYXIuZGU+KQorCSsgbWlub3IgYWRqdXN0bWVudHMgdG8gQWRhOTUgYmluZGluZyAocGF0Y2hlcyBieSBKdWVyZ2VuIFBmZWlmZXIpCisJKyBjb3JyZWN0IGF0dHJpYnV0ZXMgYWZ0ZXIgZW1pdHRpbmcgb3JpZ19wYWlyIGluIGxpYl92aWRhdHRyLmMgKHBhdGNoCisJICBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisKKzk2MTIwOAorCSsgY29ycmVjdGVkIFJFQURNRSB3cnQgQWRhOTUgKEp1ZXJnZW4gUGZlaWZlcikKKworOTYxMjA3CS0gc25hcHNob3QKKwkrIGludGVncmF0ZSByZXNpemV0ZXJtKCkgaW50byBkb3VwZGF0ZSgpLCBzbyB0aGF0IGlmIHNjcmVlbiBzaXplCisJICBjaGFuZ2VzIGJldHdlZW4gZW5kd2luL3JlZnJlc2gsIG5jdXJzZXMgd2lsbCByZXNpemUgd2luZG93cyB0byBmaXQKKwkgICh0aGlzIG5lZWRzIGFkZGl0aW9uYWwgdGVzdGluZyB3aXRoIHBhZHMgYW5kIHNvZnRrZXlzKS4KKwkrIGFkZCwgZm9yIG1lbW9yeS1sZWFrIHRlc3RpbmcsIF9uY19mcmVlYWxsKCkgZW50cnlwb2ludCB0byBmcmVlIGFsbAorCSAgZGF0YSB1c2VkIGluIG5jdXJzZXMgbGlicmFyeS4KKwkrIGluaXRpYWxpemUgX25jX2lkY29rLCBfbmNfaWRsb2sgc3RhdGljYWxseSB0byByZXNvbHZlIGRpc2NyZXBhbmN5CisJICBiZXR3ZWVuIGluaXRzY3IoKSBhbmQgbmV3d2luKCkgaW5pdGlhbGl6YXRpb24gKHJlcG9ydGVkIGJ5CisJICBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyB0ZXN0IGJ1aWx0IFZFUlNJT049NC4wLCBTSEFSRURfQUJJPTQgd2l0aCBMaW51eCBsZC5zby4xLjguNQorCSAgKHNldCBiZXRhIHZlcnNpb25zIHRvIHRob3NlIHZhbHVlcyAtLSBOT1RFIHRoYXQgc3Vic2VxdWVudCBwcmUtNC4wCisJICBiZXRhIG1heSBub3QgYmUgaW50ZXJjaGFuZ2VhYmxlKS4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHdvcmsgd2l0aCBhdXRvY29uZiAyLjEyCisKKzk2MTEzMAkxLjkuOWcgcmVsZWFzZQorCSsgYWRkIGNvcHlyaWdodCBub3RpY2VzIHRvIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyAod3JpdHRlbiBieSBUaG9tYXMKKwkgIERpY2tleSkuCisKKzk2MTEyNworCT4gcGF0Y2gsIG1vc3RseSBmb3IgcGFuZWwgKEp1ZXJnZW4gUGZlaWZlcik6CisJKyBjb3NtZXRpYyBpbXByb3ZlbWVudCBmb3IgYSBmZXcgcm91dGluZXMgaW4gdGhlIG5jdXJzZXMgY29yZSBsaWJyYXJ5CisJICB0byBhdm9pZCB3YXJuaW5nIG1lc3NhZ2VzLgorCSsgdGhlIHBhbmVsIG92ZXJsYXAgZGV0ZWN0aW9uIHdhcyBicm9rZW4KKwkrIHRoZSBwYW5lbF93aW5kb3coKSBmdW5jdGlvbiB3YXMgbm90IGZvb2wtcHJvb2YuCisJKyBTb21lIGlubGluaW5nLi4uCisJKyBDb3NtZXRpYyBjaGFuZ2VzIChhbHNvIHRvIGF2b2lkIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiBjb21waWxpbmcgd2l0aAorCSAgLURUUkFDRSkuCisKKzk2MTEyNgorCT4gcGF0Y2ggYnkgSnVlcmdlbiBQZmVpZmVyOgorCSsgZWxpbWluYXRlcyB3YXJuaW5nIG1lc3NhZ2VzIGZvciB0aGUgY29tcGlsZSBvZiBsaWJmb3JtLgorCSsgaW5zZXJ0cyBQZXIgRm9yZWJ5J3MgbmV3IGZpZWxkIHR5cGUgVFlQRV9JUFY0IGludG8gbGliZm9ybS4KKwkrIFVwZGF0ZXMgbWFuIHBhZ2UgYW5kIHRoZSBBZGE5NSBiaW5kaW5nIHRvIHJlZmxlY3QgdGhpcy4KKwkrIEltcHJvdmVzIGlubGluaW5nIGluIGxpYm1lbnUgYW5kIGxpYmZvcm0uCisKKzk2MTEyMAorCSsgaW1wcm92ZSB0aGUgdXNlIG9mIHRoZSAiY29uc3QiIHF1YWxpZmllciBpbiB0aGUKKwkgIHBhbmVsIGxpYnJhcnkgKEp1ZXJnZW4gUGZlaWZlcikKKwkrIGNoYW5nZSBzZXRfcGFuZWxfdXNlcnB0cigpIGFuZCBwYW5lbF91c2VycHRyKCkgdG8gdXNlIHZvaWQqCisJICAoSnVlcmdlbiBQZmVpZmVyKQorCis5NjExMTkKKwkrIGNoYW5nZSBBQkkgdG8gMy40CisJKyBwYWNrYWdlIHdpdGggOTYxMTE5IHZlcnNpb24gb2YgQWRhOTUgYmluZGluZyAoZml4ZXMgZm9yIGduYXQtMy4wNykuCisJICAoSnVlcmdlbiBQZmVpZmVyKQorCSsgY29ycmVjdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3Rkc2NyIHBzZXVkbyBwYW5lbCBpbiBwYW5lbCBsaWJyYXJ5CisJICAoSnVlcmdlbiBQZmVpZmVyKQorCSsgdXNlIE1PRFVMRV9JRCAocmNzIGtleXdvcmRzKSBpbiBmb3JtcyBhbmQgbWVudXMgbGlicmFyaWVzIChKdWVyZ2VuCisJICBQZmVpZmVyKS4KKwk+IHBhdGNoICMzMjQgKEVTUik6CisJKyB0eXBvIGluIGN1cnNfdGVybWNhcCBtYW4gcGFnZSAocmVwb3J0ZWQgYnkgSGVuZHJpayBSZWljaGVsCisJICA8MTA2MDY1LjIzNDRAY29tcHVzZXJ2ZS5jb20+KQorCSsgY2hhbmdlIGRlZmF1bHQgeHRlcm0gZW50cnkgdG8geHRlcm0tcjYuCisJKyBhZGQgZW50cnkgZm9yIGNvbG9yX3h0ZXJtCisKKzk2MTExNgktIHNuYXBzaG90CisJKyBsaW50IGZvdW5kIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgaGFkIG9ubHkgI2RlZmluZSBpbXBsZW1lbnRhdGlvbnMKKwkgIChlLmcuLCBhdHRyX29mZiksIG1vZGlmaWVkIGN1cnNlcy5oLmluIHRvIGdlbmVyYXRlIHRoZW0gYXMgcGVyIFhTSQorCSAgQ3Vyc2VzIHJlcXVpcmVtZW50IHRoYXQgZXZlcnkgbWFjcm8gYmUgYXZhaWxhYmxlIGFzIGEgZnVuY3Rpb24uCisJKyBhZGQgY2hlY2sgaW4gaW5mb2NtcC5jIHRvIGd1YXJkIGFnYWluc3Qgc3RyaW5nIGNvbXBhcmUgb2YKKwkgIENBTkNFTExFRF9TVFJJTkcgdmFsdWVzLgorCSsgbW9kaWZ5IGZpcmV3b3JrLmMsIHJhaW4uYyB0byBoaWRlIGN1cnNvciB3aGlsZSBydW5uaW5nLgorCSsgY29ycmVjdCBtaXNzaW5nIHZhX2VuZCBpbiBsaWJfdHBhcm0uYworCSsgbW9kaWZ5IGhhbm9pLmMgdG8gd29yayBvbiBub24tY29sb3IgdGVybWluYWxzLCBhbmQgdG8gdXNlIHRpbWluZworCSAgZGVsYXlzIHdoZW4gaW4gYXV0b3BsYXkgbW9kZS4KKwkrIGNvcnJlY3QgJ2VjaG9jaGFyKCknIHRvIHJlZnJlc2ggaW1tZWRpYXRlbHkgKHJlcG9ydGVkIGJ5IEFkcmlhbgorCSAgR2Fyc2lkZSA8OTRhamcyQGVuZy5jYW0uYWMudWs+KQorCT4gcGF0Y2ggIzMyMiAoRVNSKToKKwkrIHJlb3JnYW5pemUgdGVybWluZm8uc3JjIGVudHJpZXMgZm9yIHh0ZXJtLgorCis5NjExMDkJLSBzbmFwc2hvdAorCSsgY29ycmVjdGVkIGVycm9yIGluIGxpbmUtYnJlYWtvdXQgbG9naWMgKGxpYl9kb3VwZGF0ZS5jKQorCSsgbW9kaWZpZWQgbmV3ZGVtbyB0byB1c2Ugd2dldGNoKHdpbikgcmF0aGVyIHRoYW4gZ2V0Y2goKSB0byBlbGltaW5hdGUKKwkgIGEgc3B1cmlvdXMgY2xlYXItc2NyZWVuLgorCSsgY29ycmVjdGVkIGlmZGVmJ3MgZm9yICdwb2xsKCknIGNvbmZpZ3VyYXRpb24uCisJKyBhZGRlZCBtb2R1bGVzIHRvIG5jdXJzZXMsIGZvcm0sIG1lbnUgZm9yIEFkYTk1IGJpbmRpbmcgKEp1ZXJnZW4KKwkgIFBmZWlmZXIpLgorCSsgbW9kaWZ5IHNldF9maWVsZF9idWZmZXIoKSB0byBhbGxvdyBhc3NpZ25tZW50IG9mIHN0cmluZyBsb25nZXIgdGhhbgorCSAgdGhlIGluaXRpYWwgYnVmZmVyIGxlbmd0aCwgYW5kIHRvIHJldHVybiB0aGUgY29tcGxldGUgc3RyaW5nIHJhdGhlcgorCSAgdGhhbiBvbmx5IHRoZSBpbml0aWFsIHNpemUgKEp1ZXJnZW4gUGZlaWZlciBhbmQgUGVyIEZvcmVieQorCSAgPHBlcmZAZWZkLmx0aC5zZT4pLgorCis5NjExMDIJLSBzbmFwc2hvdAorCSsgY29uZmlndXJlIGZvciAncG9sbCgpJyBpbiBwcmVmZXJlbmNlIHRvICdzZWxlY3QoKScsIHNpbmNlIG9sZGVyCisJICBzeXN0ZW1zIGFyZSBtb3JlIGxpa2VseSB0byBoYXZlIGEgYnJva2VuICdzZWxlY3QoKScuCisJKyBtb2RpZmllZCByZW5kZXJfY2hhcigpIHRvIGF2b2lkIE9SJ2luZyBjb2xvcnMuCisJKyBtaW5vciBmaXhlcyB0byB0ZXN0Y3Vycy5jLCBuZXdkZW1vLmMgdGVzdCBwcm9ncmFtczogaWZkZWYnZCBvdXQgdGhlCisJICByZXNpemUgdGVzdCwgdXNlIHdia2dkIGFuZCBjb3JyZWN0ZWQgYm94KCkgcGFyYW1ldGVycy4KKwkrIG1ha2UgZmx1c2hpbnAoKSB0ZXN0IHdvcmsgaW4gbmN1cnNlcy5jIGJ5IHVzaW5nIG5hcG1zKCkgaW5zdGVhZCBvZgorCSAgc2xlZXAoKS4KKwkrIHVuZG8gRVNSJ3MgY2hhbmdlcyB0byB4dGVybS14MTFyNiAoaXQgbm8gbG9uZ2VyIG1hdGNoZWQgdGhlIFgxMVI2LjEKKwkgIGRpc3RyaWJ1dGlvbiwgYXMgc3RhdGVkKQorCSsgdGVybWluZm8gOS4xMy4xOCByZXN5bmMgKEVTUikKKwkrIGNoZWNrIGZvciBnZXRlbnYoIkhPTUUiKSByZXR1cm5pbmcgbnVsbCAoRVNSKS4KKwkrIGNoYW5nZSBidWZmZXIgdXNlZCB0byBkZWNvZGUgeHRlcm0tbW91c2UgY29tbWFuZHMgdG8gdW5zaWduZWQgdG8KKwkgIGhhbmRsZSBkaXNwbGF5cyB3aWRlciB0aGFuIDEyOCBjaGFycyAoSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGNvcnJlY3QgdHlwbyBjdXJzX291dG9wdHMuM3ggKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0IGxpbWl0LWNoZWNraW5nIGluIHdlbmNsb3NlKCkgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0aW9uIHRvIFBldGVyIFdlbW0ncyBuZXd3aW4gY2hhbmdlIChUaG9tYXMgRmVocgorCSAgPGZlaHJAc3VzZS5kZT4pLgorCSsgY29ycmVjdGlvbnMgdG8gbG9naWMgdGhhdCBjb21iaW5lcyBjb2xvcnMgYW5kIGF0dHJpYnV0ZXM7IHRoZXkgbXVzdAorCSAgbm90IGJlIE9SJ2QgKEp1ZXJnZW4gUGZlaWZlciwgZXh0ZW5kaW5nIGZyb20gcmVwb3J0L3BhdGNoIGJ5IFJpY2sKKwkgIE1hcnNoYWxsKS4KKworOTYxMDI2CS0gc25hcHNob3QKKwkrIHJlc2V0IGZsYWdzIGluICdnZXR3aW4oKScgdGhhdCBtaWdodCBjYXVzZSByZWZyZXNoIHRvIGF0dGVtcHQgdG8KKwkgIG1hbmlwdWxhdGUgdGhlIG5vbi1leGlzdGVudCBwYXJlbnQgb2YgYSB3aW5kb3cgdGhhdCBpcyByZWFkIGZyb20gYQorCSAgZmlsZSAobGliX3NjcmVlbi5jKS4KKwkrIHJlc3RydWN0dXJlIF9uY190aW1lZF93YWl0KCkgdG8gbG9nIG1vcmUgaW5mb3JtYXRpb24sIGFuZCB0byB0cnkgdG8KKwkgIHJlY292ZXIgZnJvbSBiYWRseS1iZWhhdmVkICdzZWxlY3QoKScgY2FsbHMgKHN0aWxsIHRlc3RpbmcgdGhpcykuCisJKyBtb3ZlIGRlZmluZSBmb3IgR09PRF9TRUxFQ1QgaW50byBjb25maWd1cmUgc2NyaXB0LgorCSsgY29ycmVjdGVkIGV4dHJhICdcJyBjaGFyYWN0ZXIgaW5zZXJ0ZWQgYmVmb3JlICcsJyBpbiBjb21wX3NjYW4uYworCSsgY29ycmVjdGVkIGV4cGFuc2lvbiBvZiAlLWZvcm1hdCBjaGFyYWN0ZXJzIGluIGR1bXBfZW50cnkuYzsgc29tZSB3ZXJlCisJICByZW5kZXJlZCBhcyBvY3RhbCBjb25zdGFudHMuCisJKyBtb2RpZnkgZHVtcF9lbnRyeS5jIHRvIG1ha2UgdGVybWluZm8gb3V0cHV0IG1vcmUgcmVhZGFibGUgYW5kIGxpa2UKKwkgIFNWcjQsIGJ5IHVzaW5nICJccyIgZm9yIHNwYWNlcyAobGVhZGluZy90cmFpbGluZyBvbmx5KSwgIlwsIiBmb3IKKwkgIGNvbW1hLCAiXF4iIGFuZCAiXDoiIGFzIHdlbGwuCisJKyBjb3JyZWN0ZWQgc29tZSBtZW1vcnkgbGVha3MgaW4gbmN1cnNlcy5jLCBhbmQgYSBtaW5vciBsb2dpYyBlcnJvcgorCSAgaW4gdGhlIHRvcC1sZXZlbCBjb21tYW5kLXBhcnNlci4KKwkrIGNvcnJlY3Rpb24gZm9yIGxhYmVsIGZvcm1hdCA0IChQQyBzdHlsZSB3aXRoIGluZm8gbGluZSksIGEKKwkgIHNsa19jbGVhcigpLCBzbGtfcmVzdG9yZSgpIHNlcXVlbmNlIGRpZG4ndCByZWRyYXcgdGhlIGluZm8gbGluZQorCSAgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBtb2RpZmllZCB0aGUgc2xrIHdpbmRvdyAoaWYgc2ltdWxhdGVkKSB0byBpbmhlcml0IHRoZSBiYWNrZ3JvdW5kIGFuZAorCSAgZGVmYXVsdCBjaGFyYWN0ZXIgYXR0cmlidXRlcyBmcm9tIHN0ZHNjciAoSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGNvcnJlY3RlZCBsaW1pdC1jaGVjayBpbiBzZXRfdG9wX3JvdyAoSnVlcmdlbiBQZmVpZmVyKS4KKworOTYxMDE5CS0gc25hcHNob3QKKwkrIGNvcnJlY3QgbG9vcC1saW1pdCBpbiB3bm91dHJlZnJlc2goKSwgYnVnIGV4cG9zZWQgZHVyaW5nIHBpcGUtdGVzdGluZworCSAgaGFkICcubGFzdGNoYXInIGVudHJ5IG9uZSBiZXlvbmQgJy5fbWF4eCcuCisJKyBtb2RpZnkgbmN1cnNlcyB0ZXN0LXByb2dyYW0gdG8gd29yayB3aXRoIGRhdGEgcGlwZWQgdG8gaXQuCisJKyBjb3JyZWN0ZWQgcGF0aG5hbWUgY29tcHV0YXRpb24gaW4gcnVuX3RpYy5zaCwgcmVtb3ZpbmcgZXh0cmEgIi4uLyIKKwkgIChyZXBvcnRlZCBieSBUaW0gTW9vbmV5KS4KKwkrIG1vZGlmaWVkIGNvbmZpZ3VyZSBzY3JpcHQgdG8gdXNlIHByZXZpb3VzIGluc3RhbGwncyBsb2NhdGlvbiBmb3IKKwkgIGN1cnNlcy5oCisJKyBhZGRlZCBOZXRCU0QgYW5kIEZyZWVCU0QgdG8gcGxhdGZvcm1zIHRoYXQgdXNlIC0tcHJlZml4PS91c3IgYXMKKwkgIGEgZGVmYXVsdC4KKworOTYxMDEzCisJKyByZXZpc2VkIHh0ZXJtIHRlcm1pbmZvIGRlc2NyaXB0aW9ucyB0byByZWZsZWN0IHRoZSBzZXZlcmFsIHZlcnNpb25zCisJICB0aGF0IGFyZSBhdmFpbGFibGUuCisJKyBjb3JyZWN0ZWQgYSBwb2ludGVyIHJlZmVyZW5jZSBpbiBkdW1wX2VudHJ5LmMgdGhhdCBkaWRuJ3QgdGVzdCBpZgorCSAgdGhlIHBvaW50ZXIgd2FzIC0xLgorCis5NjEwMDUJLSBzbmFwc2hvdAorCSsgY29ycmVjdCBfbmNfbXZjdXJfc2Nyb2xsbiBmb3IgdGVybWluYWxzIHcvbyBzY3JvbGxpbmcgcmVnaW9uLgorCSsgYWRkIC14IG9wdGlvbiB0byBoYXNodGVzdCB0byBjb250cm9sIHdoZXRoZXIgaXQgYWxsb3dzIHdyaXRlcyB0byB0aGUKKwkgIGxvd2VyLXJpZ2h0IGNvcm5lci4KKwkrIGlmZGVmJ2QgKE5DVVJTRVNfVEVTVCkgdGhlIGxvZ2ljIGZvciBfbmNfb3B0aW1pemVfZW5hYmxlIHRvIG1ha2UgaXQKKwkgIHNpbXBsZXIgdG8gY29uc3RydWN0IHRlc3RzIChmb3IgZG91YmxlLWNoZWNrIG9mIF9uY19oYXNoX21hcCB0ZXN0cykuCisJKyBjb3JyZWN0IGlmZGVmJ3MgZm9yIGMrKyBpbiBjdXJzZXMuaAorCSsgY2hhbmdlIGRlZmF1bHQgeHRlcm0gdHlwZSB0byB4dGVybS14MTFyNi4KKwkrIGNvcnJlY3QgcXVvdGluZyBpbiBjb25maWd1cmUgdGhhdCBtYWRlIG1hbi1wYWdlcyBpbnN0YWxsZWQgd2l0aAorCSAgJGRhdGFkaXIgaW5zdGVhZCBvZiBhY3R1YWwgdGVybWluZm8gcGF0aC4KKwkrIGNvcnJlY3Qgd2hpdGVzcGFjZSBpbiBpbmNsdWRlL0NhcHMsIHdoaWNoIGNhdXNlZCBrZjExLCBjbHJfZW9sIGFuZAorCSAgY2xyX2VuZCB0byBiZSBvbWl0dGVkIGZyb20gdGVybWluZm8uNQorCSsgZml4IG1lbW9yeSBsZWFrcyBpbiBkZWxzY3JlZW4oKSAoYWRhcHRlZCBmcm9tIEFsZXhhbmRlciBWIEx1a3lhbm92KS4KKwkrIGltcHJvdmUgYXBwZWFyYW5jZSBvZiBtYXJrZXIgaW4gbXVsdGktc2VsZWN0aW9uIG1lbnUgKEp1ZXJnZW4KKwkgIFBmZWlmZXIpCisJKyBmaXggYmVoYXZpb3IgZm9yIGZvcm1zIHdpdGggYWxsIGZpZWxkcyBpbmFjdGl2ZSAoSnVlcmdlbiBQZmVpZmVyKQorCSsgZG9jdW1lbnQgJ2ZpZWxkX2luZGV4KCknIChKdWVyZ2VuIFBmZWlmZXIpCisJPiBwYXRjaCAjMzIxIChFU1IpOgorCSsgYWRkIHNvbWUgbW9yZSBYRU5JWCBrZXljYXAgdHJhbnNsYXRpb25zIHRvIGluY2x1ZGUvQ2Fwcy4KKwkrIG1vZGlmeSBuZXd3aW4gdG8gc2V0IGluaXRpYWwgc3RhdGUgb2YgZWFjaCBsaW5lIHRvICd0b3VjaGVkJworCSAgKGZyb20gcGF0Y2ggYnkgUGV0ZXIgV2VtbSA8cGV0ZXJAc3Bpbm5lci5kaWFsaXguY29tPikKKwkrIGluIFNFVF9UVFksIHJlcGxhY2UgVENTQU5PVyB3aXRoIFRDU0FEUkFJTiAoQWxleGFuZGVyIFYgTHVreWFub3YpLgorCis5NjA5MjgJLSBzbmFwc2hvdAorCSsgaWZkZWYnZCBvdXQgX25jX2hhc2hfbWFwIChzdGlsbCBzbG93ZXIpCisJKyBhZGQgZ3JhcGhpYyBjaGFyYWN0ZXJzIHRvIHZ0NTIgZGVzY3JpcHRpb24uCisJKyB1c2UgUHV0QXR0ckNoYXIgaW4gQ2xyVG9FT0wgdG8gZW5zdXJlIHByb3BlciBiYWNrZ3JvdW5kLCBwb3NpdGlvbi4KKwkrIHNpbXBsaWZ5L2NvcnJlY3QgbG9naWMgaW4gJ212Y3VyKCknIHRoYXQgZG9lcyB3cmFwcGluZzsgaXQgd2FzCisJICB1cGRhdGluZyB0aGUgcG9zaXRpb24gdy9vIGFjdHVhbGx5IG1vdmluZyB0aGUgY3Vyc29yLCB3aGljaCBicm9rZQorCSAgcmVsYXRpdmUgbW92ZXMuCisJKyBlbnN1cmUgdGhhdCAnZG91cGRhdGUoKScgc2V0cyB0aGUgLm9sZGluZGV4IHZhbHVlcyBiYWNrIHRvIGEgc2FuZQorCSAgc3RhdGU7IHRoaXMgd2FzIGNhdXNpbmcgYSBzcHVyaW91cyByZWZyZXNoIGluIG5jdXJzZXMgJ3InLgorCSsgYWRkIGxvZ2ljIHRvIGNvbmZpZ3VyZSAoZnJvbSB2aWxlKSB0byBndWFyZCBhZ2FpbnN0IGJ1aWxkZXJzIHdobworCSAgZG9uJ3QgcmVtb3ZlIGNvbmZpZy5jYWNoZSAmIGNvbmZpZy5zdGF0dXMgd2hlbiBkb2luZyBuZXcgYnVpbGRzIC1URAorCSsgY29ycmVjdGVkIGxvZ2ljIGZvciAncmVwZWF0X2NoYXInIGluIEVtaXRSYW5nZSAoY2Y6IGVyaWMgIzMxNyksIHdoaWNoCisJICBkaWQgbm90IGZvbGxvdyB0aGUgMi1wYXJhbWV0ZXIgc2NoZW1lIHNwZWNpZmllZCBpbiBYU0kuCisJKyBjb3JyZWN0ZWQgbG9naWMgb2Ygd3JlZnJlc2gsIHdub3V0cmVmcmVzaCBicm9rZW4gaW4gIzMxOSwgbWFraW5nCisJICBjbGVhcm9rIHdvcmsgcHJvcGVybHkgKHJlcG9ydCBieSBNaWNoYWVsIEVsa2lucykuCisJKyBjb3JyZWN0ZWQgcHJvYmxlbSB3aXRoIGVuZHdpbiBpbnRyb2R1Y2VkIGJ5ICMzMTQgKHJlbW92aW5nIHRoZQorCSAgc2Nyb2xsaW5nLXJlZ2lvbiByZXNldCkgdGhhdCBicm9rZSBuY3Vyc2VzLmMgdGVzdHMuCisJKyBjb3JyZWN0ZWQgb3JkZXIgb2YgYXJncyBpbiBBQ19DSEVDS19MSUIgKGZyb20gcmVwb3J0IGJ5IEFtaSBGaXNjaG1hbgorCSAgPGZpc2NobWFuQG1hdGgudWNsYS5lZHU+KS4KKwkrIGNvcnJlY3RlZCBmb3JtYXR0aW5nIG9mIHRlcm1pbmZvLjUgdGFibGVzIChKdWVyZ2VuIEVobGluZykKKwk+IHBhdGNoIDMyMCAoRVNSKToKKwkrIGNoYW5nZSBBQkkgdG8gMy4zCisJKyBlbWl0IGEgY2FycmlhZ2UtcmV0dXJuIGluICdlbmR3aW4oKScgdG8gd29ya2Fyb3VuZCBhIGtlcm5lbCBidWcgaW4KKwkgIEJTREkuICAocmVxdWVzdGVkIGJ5IE1pa2UgS2FyZWxzIDxrYXJlbHNAcmVkcm9jay5ic2RpLmNvbT4pCisJKyByZXZlcnNlIHRoZSBkZWZhdWx0IG8gY29uZmlndXJlIC0tZW5hYmxlLXRlcm1jYXAgKGNvbnNlbnN1cykuCisJPiBwYXRjaCAzMTkgKEVTUik6CisJKyBtb2RpZmllZCBsb2dpYyBmb3IgY2xlYXJvayBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgKGZyb20gcmVwb3J0IGJ5CisJICBNaWNoYWVsIEVsa2lucykgLSB1bnRlc3RlZAorCT4gcGF0Y2ggMzE4IChFU1IpOgorCSsgY29ycmVjdGlvbiB0byAjMzE3LgorCT4gcGF0Y2ggMzE3IChFU1IpOgorCSsgcmUtYWRkIF9uY19oYXNoX21hcAorCSsgbW9kaWZ5IEVtaXRSYW5nZSB0byBtYWludGFpbiBwb3NpdGlvbiBhcyBwZXIgb3JpZ2luYWwgZGVzaWduLgorCSsgYWRkIGhhc2h0ZXN0LmMsIHByb2dyYW0gdG8gdGltZSB0aGUgaGFzaG1hcCBvcHRpbWl6YXRpb24uCisJPiBwYXRjaCAzMTYgKEVTUik6CisJKyBhZGQgbG9naWMgdG8gZGVhbCB3aXRoIG1hZ2ljLWNvb2tpZSAoaG93IHdhcyB0aGlzIHRlc3RlZD8pCisJICAobGliX2RvdXBkYXRlLmMpLgorCSsgYWRkIG5jdXJzZXMuYyBkcml2ZXIgZm9yIG1hZ2ljLWNvb2tpZSwgc29tZSBmaXhlcyB0byBuY3Vyc2VzLmMKKwk+IHBhdGNoIDMxNSAoRVNSKToKKwkrIG1lcmdlZCBBbGV4YW5kZXIgViBMdWt5YW5vdidzIHBhdGNoIHRvIHVzZSBlY2ggYW5kIHJlcCAtIHVudGVzdGVkCisJICAobGliX2RvdXBkYXRlLmMpLgorCSsgbW9kaWZpZWQgaGFuZGxpbmcgb2YgaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxzIC0gdW50ZXN0ZWQKKwkgIChsaWJfZ2V0Y2guYywgbGliX3R3YWl0LmMpLgorCSsgbmV3IGZ1bmN0aW9uIF9uY19tdmN1cl9yZXN1bWUoKQorCSsgZml4IHJldHVybiB2YWx1ZSBmb3IgJ292ZXJsYXkoKScsICdvdmVyd3JpdGUoKScKKworOTYwOTE0CS0gc25hcHNob3QKKwkrIGltcGxlbWVudCBzdWJ3aW5kb3ctbG9naWMgaW4gd3Jlc2l6ZSwgbWlub3IgZml4ZXMgdG8gbmN1cnNlcyAnZycKKwkgIHRlc3QuCisJKyBjb3JyZWN0ZWQgYnJhY2tldGluZyBvZiBmYWxsYmFjay5jIChyZXBvcnRlZC9zdWdnZXN0ZWQgZml4IGJ5IEp1ZXJnZW4KKwkgIEVobGluZyA8ZWhAZWNsaXBzZS5hYmFsbC5kZT4pLgorCSsgdXBkYXRlIHh0ZXJtLWNvbG9yIHRvIHJlZmxlY3QgWEZyZWU4NiAzLjEuM0cgcmVsZWFzZS4KKwkrIGNvcnJlY3QgYnJva2VuIGR0dGVybSBkZXNjcmlwdGlvbiBmcm9tICMzMTQgcGF0Y2ggKGUuZy4sIHNwdXJpb3VzCisJICBuZXdsaW5lLiAgVGhlICdwYWlycycgY2hhbmdlIG1pZ2h0IHdvcmssIGJ1dCBubyBvbmUncyB0ZXN0ZWQgaXQKKwkgIGVpdGhlciA7LSkKKwkrIGNsYXJpZnkgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBidWlsdGluIGZvcm0gZmllbGR0eXBlcyAoSnVlcmdlbgorCSAgUGZlaWZlcikKKwk+IHBhdGNoIDMxNCAoRVNSKToKKwkrIHJlc2V0IHNjcm9sbCByZWdpb24gb24gc3RhcnR1cCByYXRoZXIgdGhhbiBhdCB3cmFwdXAgdGltZQorCSAgKGVuaGFuY2VtZW50IHN1Z2dlc3RlZCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBtYWtlIHN0b3JhZ2Ugb2YgcGFsZXR0ZSB0YWJsZXMgYW5kIHRoZWlyIHNpemUgY291bnRzIHBlci1zY3JlZW4gZm9yCisJICBtdWx0aS10ZXJtaW5hbCBhcHBsaWNhdGlvbnMgKHN1Z2dlc3RlZCBieSBBbGV4YW5kZXIgViBMdWt5YW5vdikuCisJKyBJbXByb3ZlZCBlcnJvciByZXBvcnRpbmcgZm9yIGluZm90b2NhcCB0cmFuc2xhdGlvbiBlcnJvcnMuCisJKyBVcGRhdGUgdGVybWluZm8uc3JjIHRvIDkuMTMuMTQuCisKKzk2MDkwNwktIHNuYXBzaG90CisJKyByZXdyb3RlIHdnZXRzdHIgdG8gbWFrZSBpdCBlcmFzZSBjb250cm9sIGNoYXJzIGFuZCBhbHNvIGZpeCBib2d1cyB1c2UKKwkgIG9mIF9uY19vdXRzdHIgd2hpY2ggY2F1c2VkIHRoZSBkaXNwbGF5IHRvIG5vdCB3cmFwIHByb3Blcmx5IChkaXNwbGF5CisJICBwcm9ibGVtIHJlcG9ydGVkIGJ5IEpvaG4gTS4gRmxpbmNoYmF1Z2ggPGdseW5pc0BuZXRyYXgubmV0PikKKwkrIG1vZGlmeSBuY3Vyc2VzICdmJyB0ZXN0IHRvIGFjY29tbW9kYXRlIHRlcm1pbmFsIHJlc3BvbnNlcyB0byBDMSBjb2RlcworCSAgKGFuZCBzcGxpdCB1cCB0aGlzIHNjcmVlbiB0byBhY2NvbW1vZGF0ZSBub24tQU5TSSB0ZXJtaW5hbHMpLgorCSsgdGVzdCBlbnRlcl9pbnNlcnRfbW9kZSBhbmQgZXhpdF9pbnNlcnRfbW9kZSBpbiBoYXNfaWMoKS4KKwkrIHJlbW92ZWQgYm9ndXMgbG9naWMgaW4gbXZjdXIgdGhhdCBhc3N1bWVzIG5sL25vbmwgc2V0IG91dHB1dCBtb2RlcworCSAgKFhTSSBzYXlzIHRoZXkgYXJlIGlucHV0IG1vZGVzOyBTVnI0IGltcGxlbWVudHMgdGhpcykuCisJKyBhZGRlZCBtYWNyb3MgU0VUX1RUWSwgR0VUX1RUWSB0byB0ZXJtLmgKKwkrIGNvcnJlY3QgZ2V0c3RyKCkgbG9naWMgdGhhdCBhbHRlcmVkIHRlcm1pbmFsIG1vZGVzIHcvbyByZXN0b3JpbmcuCisJKyBkaXNhYmxlIElDUk5MLCBldGMuLCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gbWF0Y2ggU1ZyNCwgcmVtb3ZpbmcKKwkgIHRoZSBjb3JyZXNwb25kaW5nIGxvZ2ljIGZyb20gcmF3LCBjYnJlYWssIGV0Yy4KKwkrIGRpc2FibGUgT05MQ1IgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB0byBtYXRjaCBTVnI0ICh0aGlzIGlzIG5lZWRlZAorCSAgZm9yIGN1cnNvciBvcHRpbWl6YXRpb24gd2hlbiB0aGUgY3Vyc29yLWRvd24gaXMgYSBuZXdsaW5lKS4KKwkrIHJlcGxhY2VkIEVTUidzIGltaXRhdGlvbiBvZiB3cmVzaXplIHdpdGggbXkgb3JpZ2luYWwgKGhpcyBkaWRuJ3QKKwkgIHdvcmspLgorCis5NjA4MzEJLSBzbmFwc2hvdAorCSsgbWVtb3J5IGxlYWtzIChBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgbW9kaWZpZWQgcG5vdXRyZWZyZXNoKCkgdG8gYmUgbW9yZSB0b2xlcmFudCBvZiB0b28tbGFyZ2Ugc2NyZWVuCisJICBzaXplIChyZXBvcnRlZCBieSBNaWNoYWVsIEVsa2lucykuCisJKyBjb3JyZWN0IGhhbmRsaW5nIG9mIHRlcm1pbmZvIGZpbGVzIHdpdGggbm8gc3RyaW5ncyAoUGhpbGlwcGUgRGUKKwkgIE11eXRlcikKKwkrIGNvcnJlY3QgInRpYyAtcyIgdG8gdGFrZSBpbnRvIGFjY291bnQgLUksIC1DIG9wdGlvbnMuCisJKyBtb2RpZnkgbmN1cnNlcyAnZicgdGVzdCB0byBub3QgcHJpbnQgY29kZXMgODAgdGhyb3VnaCA5Riwgc2luY2UgdGhleQorCSAgYXJlIGNvbnNpZGVyZWQgY29udHJvbCBjb2RlcyBieSBBTlNJIHRlcm1pbmFscy4KKworOTYwODI0CS0gc25hcHNob3QKKwkrIGNvcnJlY3Qgc3BlZWQgdmFyaWFibGUtdHlwZSBpbiAndGdldGVudCgpJyAocmVwb3J0ZWQgYnkgUGV0ZXIgV2VtbSkKKwkrIG1ha2UgIi0tZW5hYmxlLWdldGNhcCIgY29uZmlndXJhdGlvbi1vcHRpb24gd29yayAocmVwb3J0ZWQgYnkKKwkgIFBldGVyIFdlbW0gPHBldGVyQHNwaW5uZXIuRElBTGl4LkNPTT4pCisKKzk2MDgyMAorCSsgY29ycmVjdCBlcnIgaW4gOTYwODE3IHRoYXQgY2hhbmdlZCByZXR1cm4tdmFsdWUgb2YgdGlnZXRmbGFnKCkKKwkgIChyZXBvcnRlZCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpLgorCSsgbW9kaWZ5IGluZm9jbXAgdG8gdXNlIGxpYnJhcnkgZGVmYXVsdCBzZWFyY2gtcGF0aCBmb3IgdGVybWluZm8KKwkgIGRpcmVjdG9yeSAoQWxleGFuZGVyIFYuIEx1a3lhbm92KS4KKworOTYwODE3CS0gc25hcHNob3QKKwkrIGNvcnJlY3RlZCBhbiBlcnIgaW4gbXZjdXIgdGhhdCBicm9rZSByZXNpemluZy1iZWhhdmlvci4KKwkrIGNvcnJlY3QgZmFsbC10aHJ1IGJlaGF2aW9yIG9mIF9uY19yZWFkX2VudHJ5KCksIHdoaWNoIHdhcyBub3QgZmluZGluZworCSAgZGVzY3JpcHRpb25zIHRoYXQgZXhpc3RlZCBpbiBkaXJlY3RvcmllcyBwYXN0IHRoZSBmaXJzdCBvbmUgc2VhcmNoZWQKKwkgIChyZXBvcnRlZCBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YpCisJKyBjb3JyZWN0ZWQgdHlwbyBpbiBkdHRlcm0gZGVzY3JpcHRpb24uCisJPiBwYXRjaCAzMTMgKEVTUik6CisJKyBhZGQgZHR0ZXJtIGRlc2NyaXB0aW9uCisJKyBjbGFyaWZ5IG5jdXJzZXMgJ2knIHRlc3QgKGRyb3AgdnNjYW5mIHN1YnRlc3QpCisKKzk2MDgxMAktIHNuYXBzaG90CisJKyBjb3JyZWN0IG5sKCkvbm9ubCgpIHRvIHdvcmsgYXMgcGVyIFNWcjQgJiBYU0kuCisJKyBtaW5vciBmaXhlcyB0byBuY3Vyc2VzLmMgKHVzZSAnbm9yYXcoKScsIG12c2NhbncgcmV0dXJuLWNvZGUpCisJKyByZWZpbmUgY29uZmlndXJlLXRlc3QgZm9yIC1nIG9wdGlvbiAoVGltIE1vb25leSkuCisJKyBjb3JyZWN0IGludGVyYWN0aW9uIGJldHdlZW4gT19CTEFOSyBhbmQgTkVXX0xJTkUgcmVxdWVzdCBpbiBmb3JtCisJICBsaWJyYXJ5IChKdWVyZ2VuIFBmZWlmZXIpCisKKzk2MDgwNAorCSsgcmV2aXNlZCBmaXggdG8gdHBhcm07IHByZXZpb3VzIGZpeCByZXZlcnNlZCBwYXJhbWV0ZXIgb3JkZXIuCisJPiBwYXRjaCAzMTIgKEVTUik6CisJICBjb3JyZWN0IHRlcm1pbmZvLnNyYyBjb3JydXB0ZWQgYnkgIzMxMAorCT4gcGF0Y2ggMzExIChFU1IpOgorCSsgZml4IGlkbG9rKCkgYW5kIGlkY29rKCkgYW5kIHRoZSBkZWZhdWx0IG9mIHRoZSBpZGxvayBzd2l0Y2guCisKKzk2MDgwMwktIHNuYXBzaG90CisJKyBjb3JyZWN0ZWQgdHBhcm0gdG8gaGFuZGxlIGNhcGFiaWxpdHkgc3RyaW5ncyB3aXRob3V0IGV4cGxpY2l0IHBvcAorCSAgKHJlcG9ydGVkIGJ5IFdpbGxpYW0gUCBTZXR6ZXIpCisJKyBhZGQgZmFsbGJhY2sgZGVmIGZvciBHQ0NfTk9SRVRVUk4sIEdDQ19VTlVTRUQgZm9yIHRlcm1jYXAgdXNlcnMKKwkgIChyZXBvcnRlZCBieSBUaW0gTW9vbmV5KS4KKwk+IHBhdGNoIDMxMCAoRVNSKToKKwkrIGRvY3VtZW50YXRpb24gYW5kIHByb3RvdHlwaW5nIGVycm9ycyBmb3IgaGFzX2NvbG9yLCBpbW1lZG9rIGFuZCBpZGNvaworCSAgKHJlcG9ydGVkIGJ5IFdpbGxpYW0gUCBTZXR6ZXIgPHdzZXR6ZXJAcGFtcy5uY3N1LmVkdT4pCisJKyB1cGRhdGVkIHFueCB0ZXJtaW5mbyBlbnRyeSAoYnkgTWljaGFlbCBIdW50ZXIpCisKKzk2MDczMAorCSsgZWxpbWluYXRlIHF1b3RlZCBpbmNsdWRlcyBpbiBuY3Vyc2VzIHN1YmRpcmVjdG9yeSwgZW5zdXJlIGNvbmZpZy5oCisJICBpcyBpbmNsdWRlZCBmaXJzdC4KKwkrIG5ld3Rlcm0gaW5pdGlhbGl6ZXMgdGVybWluYWwgc2V0dGluZ3MgdGhlIHNhbWUgYXMgaW5pdHNjciAocmVwb3J0ZWQKKwkgIGJ5IFRpbSBNb29uZXkpLgorCis5NjA3MjcJLSBzbmFwc2hvdAorCSsgY2FsbCBjYnJlYWsoKSBpbiBpbml0c2NyKCksIGFzIHBlciBYU0kgJiBTVnI0LgorCSsgdHVybiBvZmYgaGFyZHdhcmUgZWNobyBpbiBpbml0c2NyKCkgYXMgcGVyIFhTSSAmIFNWcjQKKwk+IHBhdGNoIDMwOSAoRVNSKToKKwkrIHRlcm1pbmZvIGNoYW5nZXMgKDkuMy4xMCksIGZyb20gQlJMCisJKyBhZGQgbW9yZSBjaGVja3MgdG8gdGVybWluZm8gcGFyc2VyLgorCSsgYWRkIG1vcmUgc3ltYm9scyB0byBpbmZvY21wLgorCis5NjA3MjAJLSBzbmFwc2hvdAorCSsgc2F2ZSBwcmV2aW91cy1hdHRyaWJ1dGUgaW4gbGliX3ZpZGF0dHIuYyBpZiBTUCBpcyBudWxsIChyZXBvcnRlZCBieQorCSAgSnVlcmdlbiBGbHVrIDxsb3Vpc0BkYWNoYXUubWFyY28uZGU+KQorCSsgY29ycmVjdGVkIGNhbGxzIG9uIF9uY19yZW5kZXIgc28gdGhhdCBiYWNrZ3JvdW5kIGNoYXJhY3RlciBpcyBzZXQKKwkgIGFzIHBlciBYU0kuCisJKyBjb3JyZWN0ZWQgd2JrZ2RzZXQgbWFjcm8gKFhTSSBhbGxvd3MgYmFja2dyb3VuZCBjaGFyYWN0ZXIgdG8gYmUKKwkgIG51bGwpLCBhbmQgdGVzdHMgdGhhdCB1c2UgaXQuCisJKyBtb3JlIGNvcnJlY3Rpb25zIHRvIHRlcm1pbmZvICh4dGVybSAmIHJ4dnQpCisJKyB1bmRpZCBjaGFuZ2UgdG8gbWNwcmludCBwcm90b3R5cGUgKGNhbm5vdCB1c2Ugc2l6ZV90IGluIGN1cnNlcy5oCisJICBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyBkZWNsYXJlIGl0IGluIHRoZSBoZWFkZXJzIHRoYXQgd2UgY2FuIHNhZmVseQorCSAgaW5jbHVkZSB0aGVyZWluKS4KKwkrIG1vdmUgdGhlIGlmZGVmcyBmb3IgZXJybm8gaW50byBjdXJzZXMucHJpdi5oCisJPiBwYXRjaCAzMDggKEVTUik6CisJKyB0ZXJtaW5mbyBjaGFuZ2VzICg5LjMuOCkKKwkrIG1vZGlmaWVkIGxvZ2ljIG9mIGVycm9yLXJlcG9ydGluZyBpbiB0ZXJtaW5mbyBwYXJzZXIKKworOTYwNzEzCS0gc25hcHNob3QKKwkrIGFsd2F5cyBjaGVjayBmb3IgPHN5cy9ic2R0eXBlcy5oPiBzaW5jZSBJU0MgbmVlZHMgaXQgdG8gZGVjbGFyZQorCSAgZmRfc2V0IChKdWVyZ2VuIFBmZWlmZXIpCisJKyBpbnN0YWxsIHNoYXJlZC1saWJyYXJpZXMgb24gTmV0QlNEL0ZyZWVCU0Qgd2l0aCBBQkktdmVyc2lvbiAocmVwb3J0ZWQKKwkgIGJ5IEp1ZXJnZW4gUGZlaWZlciwgTWlrZSBMb25nKQorCSsgYWRkIExPQ0FMX0xERkxBR1MyIHN5bWJvbCAoSnVlcmdlbiBQZmVpZmVyKQorCSsgY29ycmVjdGVkIHByb3RvdHlwZSBmb3IgZGVsYXlfb3V0cHV0KCkgLS0gYnVtcCBBQkkgdG8gMy4yCisJKyB0ZXJtaW5mbyBwYXRjaGVzICMzMDYvMzA3IChFU1IpLgorCSsgbW92ZWQgbG9naWMgdGhhdCBmaWx0ZXJzIG91dCBybXVsIGFuZCBybXNvIGZyb20gc2V0dXB0ZXJtIHRvIG5ld3Rlcm0KKwkgIHdoZXJlIGl0IGlzIGxlc3MgbGlrZWx5IHRvIGludGVyZmVyZSB3aXRoIHRlcm1jYXAgYXBwbGljYXRpb25zLgorCis5NjA3MDcKKwkrIHJvbGxiYWNrIEVTUidzICMzMDUgY2hhbmdlIHRvIHRlcm1pbmZvLnNyYyAoaXQgYnJlYWtzIGV4aXN0aW5nCisJICBhcHBsaWNhdGlvbnMsIGUuZy4sICdsZXNzIDI5MCcpLgorCSsgY29ycmVjdCBwYXRoIG9mIGVkaXRfbWFuLnNoLCBhbmQgZml4IHR5cG8gdGhhdCBtYWRlIGFsbCBtYW4tcGFnZXMKKwkgIHByZWZvcm1hdHRlZC4KKwkrIHJlc3RvcmUgbWFuL21lbnVfcmVxdWVzdG5hbWUuM3ggb21pdHRlZCBpbiBaZXlkJ3MgcmVzeW5jIChvb3BzKS4KKwkrIGF1dG8tY29uZmlndXJlIHRoZSBHQ0NfUFJJTlRGTElLRS9HQ0NfU0NBTkZMSUtFIG1hY3JvcyAocmVwb3J0ZWQgYnkKKwkgIFBoaWxpcHBlIERlIE11eXRlcikuCisKKzk2MDcwNgktIHNuYXBzaG90CisJKyBtYWtlIGxpYl92aWRhdHRyLmMgbW9yZSByZWFkYWJsZSB1c2luZyBtYWNyb3MuCisJKyBmaWx0ZXIgb3V0IHJtdWwsIHJtc28gdGhhdCBjb25mbGljdCB3aXRoIHNncjAgd2hlbiByZWFkaW5nIHRlcm1pbmFsCisJICBkZXNjcmlwdGlvbnMuCisJKyBhZGRlZCBzYW5pdHktY2hlY2tpbmcgb2YgdmFyaW91cyBwYWlyZWQgc3RyaW5nIGF0dHJpYnV0ZXMgKEVTUikuCisJKyB3b3JrIGFyb3VuZCBhdXRvY29uZiBidWcsIGZvcmNlICRJTlNUQUxMIHRvIGFic29sdXRlIHBhdGgKKwkgIChyZXBvcnRlZCBieSBaZXlkKS4KKwkrIG1vZGlmeSBtYW4tcGFnZSBpbnN0YWxsIGZvciBCU0RJIHRvIGluc3RhbGwgcHJlZm9ybWF0dGVkIC4wIGZpbGVzCisJICAocmVwb3J0ZWQgYnkgRGF2aWQgTWFjS2VuemllKS4KKwkrIGFkZC91c2UgZ2NjIF9fYXR0cmlidXRlX18gZm9yIHByaW50ZiBhbmQgc2NhbmYgaW4gY3Vyc2VzLmgKKwkrIGFkZGVkIFNHUiBhdHRyaWJ1dGVzIHRlc3QtY2FzZSB0byBuY3Vyc2VzCisJKyByZXZpc2VkIG5jdXJzZXMgJ3QnIGxvZ2ljIHRvIHNob3cgdHJhY2UtZGlzYWJsZSBlZmZlY3QgaW4gdGhlIG1lbnUuCisJKyB1c2UgZ2V0b3B0IGluIG5jdXJzZXMgcHJvZ3JhbSB0byBwcm9jZXNzIC1zIGFuZCAtdCBvcHRpb25zLgorCSsgbWFrZSBuY3Vyc2VzICdwJyBsZWdlbmQgdG9nZ2xlIHdpdGggJz8nCisJKyBkaXNhYmxlIHNjcm9sbG9rIGR1cmluZyB0aGUgbmN1cnNlcyAncCcgdGVzdDsgaWYgaXQgaXMgZW5hYmxlZCB0aGUKKwkgIHN0ZHNjciB3aWxsIHNjcm9sbCB3aGVuIHB1dHRpbmcgdGhlIGJveC1jb3JuZXJzIGluIHRoZSBsb3dlci1yaWdodAorCSAgb2YgdGhlIHNjcmVlbi4KKworOTYwNjI5CS0gc25hcHNob3QKKwkrIGNoZWNrIHJldHVybiBjb2RlIG9mIF9uY19tdmN1cl9zY3JvbGxuKCkgaW4gX25jX3Njcm9sbF9vcHRpbWl6ZSgpIGZvcgorCSAgdGVybWluYWxzIHdpdGggbm8gc2Nyb2xsaW5nLXN1cHBvcnQgKHJlcG9ydGVkIGJ5IE5pa29sYXkgU2hhZHJpbgorCSAgPHF1ZWVuQHFoLm1pcmVhLmFjLnJ1PikKKwkrIGFkZGVkIF5TIHNjcm9sbG9rLXRvZ2dsZSB0byBuY3Vyc2VzICdnJyB0ZXN0LgorCSsgYWRkZWQgXlQgdHJhY2UtdG9nZ2xlIHRvIG5jdXJzZXMgdGVzdHMuCisJKyBtb2RpZmllZCBuY3Vyc2VzIHRlc3QgcHJvZ3JhbSB0byB1c2UgXlEgb3IgRVNDIGNvbnNpc3RlbnRseSBmb3IKKwkgIHRlcm1pbmF0aW5nIHRlc3RzIChyYXRoZXIgdGhhbiBeRCksIGFuZCB0byB1c2UgY29udHJvbCBrZXlzIHJhdGhlcgorCSAgdGhhbiBmdW5jdGlvbiBrZXlzIGluICdnJyB0ZXN0LgorCSsgY29ycmVjdGVkIG1pc3BsYWNlZCB3Y2xydG9lb2wgY2FsbHMgaW4gYWRkY2ggdG8gYWNjb21tb2RhdGUgd3JhcHBpbmcKKwkgIChyZXBvcnRlZCBieSBQaGlsaXBwZSBEZSBNdXl0ZXIpLgorCSsgbW9kaWZ5IGxpYl9kb3VwZGF0ZS5jIHRvIHVzZSBlZmZlY3RpdmUgY29zdHMgdG8gdHJhZGVvZmYgYmV0d2VlbgorCSAgZGVsZXRlLWNoYXJhY3Rlci9pbnNlcnQtY2hhcmFjdGVyIHZzIG5vcm1hbCB1cGRhdGluZyAocmVwb3J0ZWQgYnkKKwkgIERhdmlkIE1hY0tlbnppZSkuCisJKyBjb21wdXRlIGVmZmVjdGl2ZSBjb3N0cyBmb3Igc2NyZWVuIHVwZGF0ZSBvcGVyYXRpb25zIChlLmcuLCBjbHJfZW9zLAorCSAgZGVsZXRlX2NoYXJhY3RlcikuCisJKyBjb3JyZWN0ZWQgZXJyb3IgaW4ga25pZ2h0LmMgZXhwb3NlZCBieSB3cmFwIGZpeGVzIGluIDk2MDYyMjsgdGhlCisJICBtc2d3aW4gbmVlZGVkIHNjcm9sbG9rIHNldC4KKwkrIGNvcnJlY3RlZCBsYXN0IGNoYW5nZSB0byBJRGNUcmFuc2Zvcm1MaW5lIGxvZ2ljIHRvIGF2b2lkIGNvbmZsaWN0CisJICBiZXR3ZWVuIFB1dFJhbmdlIGFuZCBJbnNTdHIKKwkrIG1vZGlmaWVkIHJ1bl90aWMuc2ggdG8gbm90IHVzZSAvdXNyL3RtcCAocmVwb3J0ZWQgYnkgRGF2aWQKKwkgIE1hY0tlbnppZSksIGFuZCBmdXJ0aGVyIHJldmlzZWQgaXQgYW5kIGFjbG9jYWwubTQgdG8gdXNlICRUTVBESVIgaWYKKwkgIHNldC4KKwkrIGNvcnJlY3RlZCBvZmYtYnktb25lIGluIFJvb21Gb3IgY2FsbCBpbiByZWFkX2VudHJ5LmMKKworOTYwNjIyCS0gc25hcHNob3QKKwkrIG1vZGlmaWVkIGxvZ2ljIHRoYXQgd3JhcHMgY3Vyc29yIGluIGFkZGNoIHRvIGZvbGxvdyB0aGUgWFNJIHNwZWMsCisJICAoaW1wbGVtZW50ZWQgaW4gU1ZyNCkgd2hpY2ggc3RhdGVzIHRoYXQgdGhlIGN1cnNvciBwb3NpdGlvbiBpcworCSAgdXBkYXRlZCB3aGVuIHdyYXBwaW5nLiAgUmVuYW1lZCBfTkVFRF9XUkFQIHRvIF9XUkFQUEVEIHRvIHJlZmxlY3QgdGhlCisJICBhY3R1YWwgc2VtYW50aWNzLgorCSsgYWRkZWQgLXMgb3B0aW9uIHRvIHRpYywgdG8gcHJvdmlkZSBiZXR0ZXIgZGlhZ25vc3RpY3MgaW4gcnVuX3RpYy5zaAorCSsgaW1wcm92ZWQgZXJyb3ItcmVjb3ZlcnkgZm9yIHRhYnNldCBpbnN0YWxsLgorCSsgY2hhbmdlIEFCSSB0byAzLjEgKGRyb3BwZWQgdHBhcmFtLCBjb3JyZWN0ZWQgZ2V0YmtnZCgpLCBhZGRlZAorCSAgX3lvZmZzZXQgdG8gV0lORE9XKS4KKwkrIG1vZGlmaWVkIGluaXRpYWxpemF0aW9uIG9mIFNQLT5fb2ZwIHNvIHRoYXQgaW5pdF9hY3MoKSBpcyBjYWxsZWQgd2l0aAorCSAgdGhlICJyaWdodCIgZmlsZSBwb2ludGVyIChyZXBvcnRlZCBieSBSaWNrIE1hcnNoYWxsIDxyam1AbmxjLm5ldC5hdT4KKwkrIGRvY3VtZW50YXRpb24gZml4ZXMgKEp1ZXJnZW4gUGZlaWZlcikuCisJKyBjb3JyZWN0ZWQsIHVzaW5nIG5ldyBTQ1JFRU4gYW5kIFdJTkRPVyBtZW1iZXJzLCB0aGUgYmVoYXZpb3Igb2YKKwkgIG5jdXJzZXMgaWYgb25lIHVzZXMgcmlwb2ZmbGluZSgpIHRvIHJlbW92ZSBhIGxpbmUgZnJvbSB0aGUgdG9wIG9mIHRoZQorCSAgc2NyZWVuIChKdWVyZ2VuIFBmZWlmZXIpLgorCSsgbW9kaWZpZWQgYXV0b2NvbmYgc2NyaXB0cyB0byBwcmVwYXJlIGZvciBBZGE5NSAoR05BVCkgYmluZGluZyB0bworCSAgbmN1cnNlcyAoSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGluY29ycmVjdCBidWZmZXItc2l6ZSBpbiBfbmNfcmVhZF9lbnRyeSwgcmVwb3J0ZWQgYnkgRVNSLgorCis5NjA2MTcKKwkrIGNvcnJlY3RlZCB0d28gbG9naWMgZXJyb3JzIGluIHJlYWRfZW50cnkuYywgd3JpdGVfZW50cnkuYyAoY2FsbGVkIGJ5CisJICB0aWMsIHRoZSB3cml0ZS9yZWFkIG9mIHRlcm1pbmZvIGVudHJpZXMgdXNlZCBpbmNvbnNpc3RlbnQgcnVsZXMgZm9yCisJICBsb2NhdGluZyB0aGUgZW50cmllczsgdGhlICRURVJNSU5GT19ESVJTIGNvZGUgd291bGQgZmluZCBvbmx5IHRoZQorCSAgZmlyc3QgZW50cnkgaW4gYSBsaXN0KS4KKwkrIHJlZmluZWQgcGF0aG5hbWUgY29tcHV0YXRpb24gaW4gcnVuX3RpYy5zaCBhbmQgc2hsaWIuCisJKyBjb3JyZWN0ZWQgaW5pdGlhbGl6YXRpb24gb2YgJElQIGluIG1pc2MvcnVuX3RpYy5zaAorCis5NjA2MTUJLSBzbmFwc2hvdAorCSsgaWZkZWYnZCBvdXQgX25jX2hhc2hfbWFwKCkgY2FsbCBiZWNhdXNlIGl0IGRvZXMgbm90IGltcHJvdmUgc3BlZWQuCisJKyBkaXNwbGF5IHZlcnNpb24gb2YgZ2NjIGlmIGNvbmZpZ3VyZSBzY3JpcHQgaWRlbnRpZmllcyBpdC4KKwkrIG1vZGlmeSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSAvdXNyIGFzIExpbnV4J3MgZGVmYXVsdCBwcmVmaXguCisJKyBtb2RpZnkgcnVuX3RpYy5zaCB0byB1c2Ugc2hsaWIgc2NyaXB0LCBmaXhlcyBzb21lIHByb2JsZW1zIGluc3RhbGxpbmcKKwkgIHdpdGggYSBzaGFyZWQtbGlicmFyeSBjb25maWd1cmF0aW9uLgorCSsgYWRqdXN0ZWQgY29uZmlndXJlIHNjcmlwdCBzbyB0aGF0IGl0IGRvZXNuJ3QgcnVuIHRlc3RzIHdpdGggdGhlCisJICB3YXJuaW5ncyB0dXJuZWQgb24sIHdoaWNoIG1ha2VzIGNvbmZpZy5sb2cgaGFyZCB0byByZWFkLgorCSsgYWRkZWQgJ2xpbnQnIHJ1bGUgdG8gdG9wLWxldmVsIE1ha2VmaWxlLgorCSsgYWRkZWQgY29uZmlndXJlIG9wdGlvbiAnLS13aXRoLWluc3RhbGwtcHJlZml4JyBmb3IgdXNlIGJ5IHN5c3RlbQorCSAgYnVpbGRlcnMgdG8gaW5zdGFsbCBpbnRvIHN0YWdpbmcgbG9jYXRpb25zIChyZXF1ZXN0ZWQgYnkKKwkgIENoYXJsZXMgTGV2ZXJ0IDxjaGFybGVzQGNvbW0ucG9seW10bC5jYT4pLgorCSsgY29ycmVjdGVkIGF1dG9jb25maWd1cmUgZm9yIERlYmlhbiBtYW4gcHJvZ3JhbTsgaXQncyBub3QgaW5zdGFsbGVkCisJICBhcyAibWFuX2RiIi4KKwkrIHNldCBub2VjaG8gaW4gJ3dvcm0nOyBpdCB3YXMgaWZkZWYnZCBmb3IgZGVidWcgb25seQorCSsgdXBkYXRlZCB0ZXN0L2NvbmZpZ3VyZS5pbiBmb3IgdGltaW5nLWRpc3BsYXkgaW4gbmN1cnNlcyAncCcgdGVzdAorCSsgY29ycmVjdGVkIG1pc3NwZWxsZWQgJ2dldGJrZ2QoKScuCisJKyBjb3JyZWN0ZWQgd2JrZ2RzZXQgdG8gd29yayBsaWtlIG9ic2VydmVkIHN5dnI0IChzZXRzIEFfQ0hBUlRFWFQgcGFydAorCSAgdG8gYmxhbmsgaWYgbm8gY2hhcmFjdGVyIGdpdmVuLCBjb3BpZXMgYXR0cmlidXRlcyB0byB3aW5kb3cncworCSAgYXR0cmlidXRlcykuCisJKyBtb2RpZmllZCBsaWJfZG91cGRhdGUuYyB0byB1c2UgbG93ZXItbGV2ZWwgU1AncyBjdXJyZW50X2F0dHIgc3RhdGUKKwkgIGluc3RlYWQgb2YgY3Vyc2NyJ3Mgc3RhdGUsIHNpbmNlIGl0IGlzIHJlZHVuZGFudC4KKwkrIGNvcnJlY3Rpb24gdG8gSURjVHJhbnNmb3JtTGluZSBsb2dpYyB3aGljaCBjb250cm9scyB3aGVyZSBJbnNTdHIgaXMKKwkgIGludm9rZWQgKHJlZmluZWQgYnkgQWxleGFuZGVyIFYgTHVreWFub3YpLgorCT4gcGF0Y2ggMzAzIChFU1IpOgorCSsgY29uZGl0aW9uYWxseSBpbmNsdWRlIENocmlzIFRvcmVrJ3MgaGFzaCBmdW5jdGlvbiBfbmNfaGFzaF9tYXAoKS4KKwkrIGJldHRlciBmaXggZm9yIG52aSByZWZyZXNoLWJ1ZyAoUmljayBNYXJzaGFsbCkKKwkrIGZpeCBmb3IgYnVnIGluIGhhbmRsaW5nIG9mIGludGVycnVwdGVkIGtleXN0cm9rZSB3YWl0cywKKwkgIChXZXJuZXIgRmxlY2spLgorCis5NjA2MDEJLSBzbmFwc2hvdAorCSsgYXV0by1jb25maWd1cmUgbWFuLXBhZ2UgY29tcHJlc3Npb24tZm9ybWF0IGFuZCByZW5hbWVzIGZvciBEZWJpYW4uCisJKyBjb3JyZWN0ZWQgc2V2ZXJhbCB0eXBvcyBpbiBjdXJzZXMuaC5pbiAoaS5lLiwgdGhlIG12WFhYWCBtYWNyb3MpLgorCSsgcmUtb3JkZXIgY3Vyc2VzLnByaXYuaCBmb3IgbGludC4KKwkrIGFkZGVkIHJ1bGVzIGZvciBsaW50bGliLCBsaW50CisJKyBjb3JyZWN0ZWQgaWZkZWYgZm9yIEJST0tFTl9MSU5LRVIgaW4gTUtuYW1lcy5hd2suaW4KKwkrIGNvcnJlY3RlZCBtaXNzaW5nIElOU1RBTExfREFUQSBpbiBtaXNjL01ha2VmaWxlLmluCisJKyBmbHVzaCBvdXRwdXQgd2hlbiBjaGFuZ2luZyBjdXJzb3ItdmlzaWJpbGl0eSAoUmljayBNYXJzaGFsbCkKKwkrIGZpeCBhIG1pbm9yIGJ1ZyBpbiB0aGUgX25jX3JpcG9mZigpIHJvdXRpbmUgYW5kIGltcHJvdmUgZXJyb3IKKwkgIGNoZWNraW5nIHdoZW4gY3JlYXRpbmcgdGhlIGxhYmVsIHdpbmRvdyAoSnVlcmdlbiBQZmVpZmVyKS4KKwkrIGVuaGFuY2VtZW50IHRvIHRoZSBjb250cm9sIG92ZXIgdGhlIG5ldyBQQy1zdHlsZSBzb2Z0IGtleSBmb3JtYXQuCisJICBhbGxvdyBjYWxsZXIgbm93IHRvIHNlbGVjdCB3aGV0aGVyIG9yIG5vdCBvbmUgd2FudHMgdG8gaGF2ZQorCSAgdGhlIGluZGV4LWxpbmU7IHNlZSBjdXJzX3Nsay4zeCBmb3IgZG9jdW1lbnRhdGlvbiAoSnVlcmdlbiBQZmVpZmVyKS4KKwkrIHR5cG9zLCBkb24ndCB1c2UgaW5saW5lIHdpdGggLWcgKFBoaWxpcHBlIERlIE11eXRlcikKKwkrIGZpeGVzIGZvciBtZW51cyAmIHdhdHRyLSwgc2xrLWZ1bmN0aW9ucyAoSnVlcmdlbiBQZmVpZmVyKQorCis5NjA1MjYJLSBzbmFwc2hvdAorCSsgcmVtb3ZlZCAtLXdpdGgtdGljZGlyIG9wdGlvbiBhbHRvZ2V0aGVyLCBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGgKKwkgIGV4aXN0aW5nIGFwcGxpY2F0aW9ucyB2aWEgc3ltYm9saWMgbGluayBpbiBydW5fdGljLnNoCisJKyBwYXRjaCBmb3IgdGVybWlvLmgsIHNpZ25hbCAoUGhpbGlwcGUgRGUgTXV5dGVyKQorCSsgYXV0by1jb25maWd1cmUgZ2NjIHdhcm5pbmcgb3B0aW9ucyByYXRoZXIgdGhhbiBpbmZlciBmcm9tIHZlcnNpb24uCisJKyBhdXRvLWNvbmZpZ3VyZSBfX2F0dHJpYnV0ZV9fIGZvciBkaWZmZXJlbnQgZ2NjIHZlcnNpb25zLgorCSsgY29ycmVjdGVkIHNwZWNpYWwgdXNlIG9mIGNsZWFyb2soKSBpbiBoYXJkc2Nyb2xsLmMgYnkgcmVzZXR0aW5nIGZsYWcKKwkgIGluIHdyZWZyZXNoKCkuCisJKyBpbmNsdWRlIHN0ZGxpYi5oIGJlZm9yZSBkZWZzIGZvciBFWElUX1NVQ0NFU1MsIGZvciBPU0YvMS4KKwkrIGluY2x1ZGUgc3lzL3R5cGVzLmggaW4gY2FzZSBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIHNpemVfdC4KKwkrIGZpeGVzIGZvciBtYWtlZmlsZSAoVGltIE1vb25leSkKKwkrIGZpeGVzIGZvciBtZW51cyAmIGZvcm1zIChKdWVyZ2VuIFBmZWlmZXIpCisKKzk2MDUxOAktIHNuYXBzaG90CisJKyByZXZpc2VkIG5jdXJzZXMuYyBwYW5uZXIgdGVzdCwgbGV0IHBhZCBhYnV0IGFsbCA0IHNpZGVzIG9mIHNjcmVlbi4KKwkrIHJlZmluZWQgY2FzZSBpbiBsaWJfZG91cGRhdGUuYyBmb3IgQ2xyVG9FT0woKS4KKwkrIGNvcnJlY3RlZCBwcmlvciBjaGFuZ2UgZm9yIFB1dFJhbmdlIChBbGV4YW5kZXIgViBMdWt5YW5vdgorCSAgPGxhdkB5YXJzLmZyZWUubmV0PikuCisJKyBhdXRvY29uZiBtb2RzIChUaW0gTW9vbmV5IDxtb29uZXlAZG9nYmVydC5jYy5uZHN1Lk5vRGFrLmVkdT4pLgorCSsgbG9jYWxlIGZpeCBmb3IgZm9ybXMgKFBoaWxpcHBlIERlIE11eXRlciA8cGhkZW11eXRAdWxiLmFjLmJlPikKKwkrIHJlbmFtZWQgIi0td2l0aC1kYXRhZGlyIiBvcHRpb24gdG8gIi0td2l0aC10aWNkaXIiIHRvIGF2b2lkCisJICBjb25mdXNpb24sIGFuZCBtYWRlIHRoaXMgY2hlY2sgZm9yIHRoZSAvdXNyL2xpYi90ZXJtaW5mbyBwcmUtZXhpc3RpbmcKKwkgIGRpcmVjdG9yeS4KKwk+IHBhdGNoZXMgMjk5LTMwMSAoRVNSKToKKwkrIGFkZGVkIGhhc2htYXAuYworCSsgbW9kcyB0byB0cmFjaW5nLCBlc3BlY2lhbGx5IGZvciBBQ1MgY2hhcnMuCisJKyBjb3JyZWN0ZWQgb2ZmLWJ5LW9uZSBpbiBJREN0cmFuc2Zvcm0uCisJKyBjb3JyZWN0ZWQgaW50ZXJtaXR0ZW50IG1vdXNlIGJ1ZyBieSB1c2luZyByZXR1cm4tdmFsdWUgZnJvbSByZWFkKCkuCisJKyBtb2RzIHRvIHBhcnNlX2VudHJ5LmMsIGZvciBzbWFydGVyIGRlZmF1bHRzLgorCis5NjA1MTIKKwkrIHVzZSBnZXRvcHQgaW4gJ3RpYyc7IGFkZGVkIC1MIG9wdGlvbiBhbmQgbW9kaWZpZWQgLWUgb3B0aW9uIHRvIGFsbG93CisJICBsaXN0IGZyb20gYSBmaWxlLgorCis5NjA1MTEKKwkrIGRvbid0IHVzZSBmaXhlZCBidWZmZXItc2l6ZSBpbiB0cGFybSgpLgorCSsgbW9kaWZpZWQgdGljIHRvIGNyZWF0ZSB0ZXJtaW5mbyBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdC4KKwkrIGFkZGVkIC1UIG9wdGlvbnMgdG8gdGljIGFuZCBpbmZvY21wIChmb3IgdGVzdGluZy9hbmFseXNpcykKKwkrIHJlZmluZWQgdGhlIGxlbmd0aCBjcml0ZXJpYSBmb3IgdGVybWNhcCBhbmQgdGVybWluZm8KKwkrIG9wdGltaXplIGxpYl9kb3VwZGF0ZSB3aXRoIG1lbWNweSwgUHV0UmFuZ2UKKwk+IHBhdGNoZXMgMjk3LCAyOTggKEVTUik6CisJKyBpbXBsZW1lbnQgVEVSTUlORk9fRElSUywgYW5kIC1vIG9wdGlvbiBvZiB0aWMKKwkrIGFkZGVkIFRSQUNFX0lFVkVOVAorCSsgcmVtb3ZlZCBib29sZWFuIHZlcnNpb24gb2YgJ2dldG0nCisJKyBhZGRlZCBsaWJfcHJpbnQuYyAoZm9yIFJpY2sgTWFyc2hhbGwpCisJKyBhZGRlZCBoYXNfa2V5KCkKKwkrIGFkZGVkICd0JyB0byBuY3Vyc2VzLmMgdGVzdC4KKwkrIG1vdmVkIGRlbGF5X291dHB1dCgpIHRvIGxpYl90cHV0cy5jCisJKyByZW1vdmVkIHRwYXJhbSgpICh3YXMgYWRkZWQgaW4gMS45LjksIGJ1dCBjb25mbGljdHMgd2l0aCBlbWFjcyBhbmQKKwkgIGlzIG5vdCBwYXJ0IG9mIFgvT3BlbiBDdXJzZXMpLgorCSsgbWlzYyBjdXJzb3IgJiBvcHRpbWl6YXRpb24gZml4ZXMuCisKKzk2MDUwNAktIHNuYXBzaG90CisJKyBtb2RpZmllZCBuY3Vyc2VzICdwJyB0ZXN0IHRvIGFsbG93IGZ1bGwtc2NyZWVuIHJhbmdlIGZvciBwYW5uZXIgc2l6ZS4KKwkrIGZpeGVzIGZvciBsb2NhbGUgKFBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBsYWJhdXRvMS51bGIuYWMuYmU+KQorCSsgZG9uJ3QgdXNlIGZpeGVkIGJ1ZmZlci1zaXplIGluIGZtdF9lbnRyeSgpLgorCSsgYWRkZWQgdXNhZ2UtbWVzc2FnZSB0byAnaW5mb2NtcCcuCisJKyBtb2RpZmllZCBpbnN0YWxsLmluY2x1ZGVzIHJ1bGVzIHRvIHByZXBlbmQgc3ViZGlyZWN0b3J5LW5hbWUgdG8KKwkgICIjaW5jbHVkZSIgaWYgbmVlZGVkLgorCis5NjA0MzAKKwkrIHByb3RlY3Qgd3JlZnJlc2gsIHdub3V0cmVmcmVzaCBmcm9tIGludm9jYXRpb24gd2l0aCBwYWQgYXJndW1lbnQuCisJKyBjb3JyZWN0ZWQgZGVmYXVsdCBDQ0ZMQUdTIGluIHRlc3QvTWFrZWZpbGUuCisKKzk2MDQyOAktIHNuYXBzaG90CisJKyBpbXBsZW1lbnRlZCBsb2dpYyB0byBzdXBwb3J0IHRlcm1pbmFscyB3aXRoIGJhY2tncm91bmQgY29sb3IgZXJhc2UKKwkgIChlLmcuLCByeHZ0IGFuZCB0aGUgbmV3ZXIgY29sb3IgeHRlcm0pLgorCSsgaW1wcm92ZWQgc2NyZWVuIHVwZGF0ZSBsb2dpYyAob2ZmLWJ5LW9uZSBsb2dpYyBlcnJvcjsgdXNlIGNscl9lb3MgaWYKKwkgIHBvc3NpYmxlKQorCis5NjA0MjYJLSBzbmFwc2hvdAorCSsgY2hhbmdlIG5jdXJzZXMgJ2EnIHRlc3QgdG8gcnVuIGluIHJhdyBtb2RlLgorCSsgbWFrZSBUSU9DR1dJTlNaIGNvbmZpZ3VyZSB0ZXN0IGxlc3Mgc3RyaW5nZW50LCBpbiBjYXNlIHVzZXIKKwkgIGNvbmZpZ3VyZXMgdmlhIHRlcm1pbmFsIHRoYXQgY2Fubm90IGdldCBzY3JlZW4gc2l6ZS4KKwk+IHBhdGNoZXMgMjk1LCAyOTYgKEVTUik6CisJKyBuZXcgIi1lIiBvcHRpb24gb2YgdGljLgorCSsgZml4IGZvciAiaW5mb2NtcCAtZSIuCisJKyByZXN0b3JlIHdvcmtpbmctZGlyZWN0b3J5IGluIHJlYWRfdGVybWNhcC5jCisJKyBzcGxpdCBsaWJfa2VybmVsLmMsIGxpYl9zZXR1cC5jIGFuZCBuYW1lcy5jIGluIG9yZGVyIHRvIHJlZHVjZQorCSAgb3ZlcmhlYWQgZm9yIHByb2dyYW1zIHRoYXQgdXNlIG9ubHkgdGVybWNhcCBmZWF0dXJlcy4KKworOTYwNDE4CS0gc25hcHNob3QKKwkrIHVzZSBhdXRvY29uZiAyLjkKKwkrIGZpeCBmb3IgQUlYIDMuMi41IChtdXN0IGRlZmluZSBfUE9TSVhfU09VUkNFIHRvIGdldCB0ZXJtaW9zIHN0cnVjdAorCSAgZGVmaW5pdGlvbnMgdmlhIDx0ZXJtaW9zLmg+LCBtb2RpZmllZCBtYWNyb3MgaW4gbGliX3Jhdy5jIHRvIGF2b2lkCisJICBLJlItc3R5bGUgc3Vic3RpdHV0aW9uKQorCT4gcGF0Y2hlcyAyOTMsIDI5NCAoRVNSKToKKwkrIG1vZHMgdG8gd2dldGNoKCkgaW4gY29va2VkIG1vZGUKKwkrIGNvcnJlY3RlZCBhc2t1c2VyKCkgbG9naWMgaW4gdHNldAorCSsgY29ycmVjdCBpbnRlcmFjdGlvbiBvZiBlbmR3aW4oKSB3aXRoIG1vdXNlIHByb2Nlc3NpbmcKKwkrIGFkZGVkIHRyYWNlIHN1cHBvcnQgZm9yIFRUWSBmbGFncworCis5NjA0MDYKKwkrIGZpeGVzIGZvciBOZVhULCBJU0MgYW5kIEhQVVggYXV0by1jb25maWd1cmUKKwkrIGF1dG9nZW5lcmF0ZSBkZXZlbG9wbWVudCBoZWFkZXItZGVwZW5kZW5jaWVzIChjb25maWcuaCwgKi5wcml2LmgpCisJKyBjb3JyZWN0ZWQgc2luZ2xlLWNvbHVtbiBmb3JtYXR0aW5nIG9mICJ1c2U9IiAoZS5nLiwgaW4gdGljKQorCSsgbW9kaWZ5IHRpYyB0byByZWFkIGZ1bGwgdGVybWluZm8tbmFtZXMKKwkrIGNvcnJlY3RlZCBkaXZpZGUtYnktemVybyB0aGF0IGNhdXNlZCBoYW5nIChvciB3b3JzZSkgd2hlbiByZWRpcmVjdGluZworCSAgb3V0cHV0CisJKyBtb2RpZnkgdGljIHRvIGdlbmVyYXRlIGRpcmVjdG9yaWVzIG9ubHkgYXMtbmVlZGVkIChhbmQgY29ycmVjdGVkCisJICBpbnN0YW5jZSBvZiB1c2Ugb2YgZGF0YSBmcm9tIGZ1bmN0aW9uIHRoYXQgaGFkIGFscmVhZHkgcmV0dXJuZWQpLgorCisjIyMgbmN1cnNlcy0xLjkuOGEgLT4gMS45LjllCisKKyogZml4ZWQgYnJva2VuIHdzeW5jdXAoKS93eXNuY2Rvd24oKSwgYXMgYSByZXN1bHQgd25vdXRyZWZyZXNoKCkgbm93IGhhcworICBjb3B5LWNoYW5nZWQtbGluZXMgYmVoYXZpb3IuCisqIGFkZGVkIGFuZCBkb2N1bWVudGVkIHdyZXNpemUoKSBmdW5jdGlvbi4KKyogbW9yZSBmaXhlcyB0byBMT1dFUi1SSUdIVCBjb3JuZXIgaGFuZGxpbmcuCisqIGNoYW5nZWQgdGhlIGxpbmUtYnJlYWtvdXQgb3B0aW1pemF0aW9uIGNvZGUgdG8gYWxsb3cgc29tZSBsaW5lcyB0byBiZQorICBlbWl0dGVkIGJlZm9yZSB0aGUgZmlyc3QgY2hlY2suCisqIGFkZGVkIG9wdGlvbiBmb3IgdGljIHRvIHVzZSBzeW1ib2xpYyBpbnN0ZWFkIG9mIGhhcmQgbGlua3MgKGZvciBBRlMpCisqIGZpeCB0byByZXN0b3JlIGF1dG8td3JhcCBtb2RlLgorKiB0cmFjZSBsZXZlbCBjYW4gYmUgY29udHJvbGxlZCBieSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyogYmV0dGVyIGhhbmRsaW5nIG9mIE5VTHMgaW4gdGVybWluYWwgZGVzY3JpcHRpb25zLgorKiBpbXByb3ZlZCBjb21wYXRpYmlsaXR5IHdpdGggb2JzZXJ2ZWQgU1ZSNCBiZWhhdmlvci4KKyogdGhlIHJlZnJlc2ggYmVoYXZpb3Igb2Ygb3Zlci1sYXBwaW5nIHdpbmRvd3MgaXMgbm93IG1vcmUgZWZmaWNpZW50IGFuZAorICBiZWhhdmVzIGxpa2UgU1ZSNC4KKyogdXNlIGF1dG9jb25mIDIuNywgd2hpY2ggcmVzdWx0cyBpbiBhIHdvcmtpbmcgc2V0dXAgZm9yIFNDTyA1LjAuCisqIHN1cHBvcnQgZm9yIEVTQ0RFTEFZLgorKiBzbWFsbCBmaXhlcyBmb3IgbWVudS9mb3JtIGNvZGUuCisqIHRoZSB0ZXN0IGRpcmVjdG9yeSBoYXMgaXRzIG93biBjb25maWd1cmUuCisqIGZpeGVzIHRvIHBhZHMgd2hlbiBvcHRpbWl6aW5nIHNjcm9sbGluZy4KKyogZml4ZWQgc2V2ZXJhbCBvZmYtYnktb25lIGJ1Z3MuCisqIGZpeGVzIGZvciB0ZXJtY2FwLT50ZXJtaW5mbyB0cmFuc2xhdGlvbjsgbGVzcyByZXN0cmljdGlvbnMgbW9yZSBjb3JyZWN0CisgIGJlaGF2aW9yLgorCisjIyMgbmN1cnNlcy0xLjkuNyAtPiAxLjkuOGEKKworKiB0ZWFjaCBpbmZvY21wIC1pIHRvIHJlY29nbml6ZSBFQ01BIGhpZ2hsaWdodCBzZXF1ZW5jZXMKKyogaW5mb2NtcCBub3cgZHVtcHMgYWxsIFNWcjQgdGVybWNhcHMgKG5vdCBqdXN0IHRoZSBTVnI0IG9uZXMpIG9uIC1DCisqIHN1cHBvcnQgaW5mb2NtcCAtUkJTRC4KKyogc2F0aXNmeSBYU0kgQ3Vyc2VzIHJlcXVpcmVtZW50IHRoYXQgZXZlcnkgbWFjcm8gYmUgYXZhaWxhYmxlIGFzIGEgZnVuY3Rpb24uCisqIFRoaXMgcmVwcmVzZW50cyB0aGUgbGFzdCBiaWcgY2hhbmdlIHRvIHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIG5jdXJzZXMuIFRoZQorICBBQklfVkVSU0lPTiBoYXMgbm93IGJlZW4gc2V0IGF0IDMuMCBhbmQgc2hvdWxkIHN0YXkgdGhlcmUgYmFycmluZyBhbnkgZ3JlYXQKKyAgY2F0YXN0cm9waGllcyBvciBhY3RzIG9mIEdvZC4KKyogVGhlIEMrKyBoYXMgYmVlbiBjbGVhbmVkIHVwIGluIHJlYWN0aW9uIHRvIHRoZSBjaGFuZ2VzIHRvIHNhdGlzZnkgWFNJJ3MKKyAgcmVxdWlyZW1lbnRzLgorKiBsaWJuY3Vyc2VzIG5vdyBnZXRzIGxpbmtlZCB0byBsaWJjdXJzZXMgdG8gaGVscCBzZWFtbGVzcyBlbXVsYXRpb24KKyAgKHJlcGxhY2VtZW50KSBvZiBhIHZlbmRvcidzIGN1cnNlcy4gLS1kaXNhYmxlLW92ZXJ3cml0ZSB0dXJucyB0aGlzIGJlaGF2aW9yCisgIG9mZi4KKworIyMjIG5jdXJzZXMtMS45LjYgLT4gMS45LjcKKworKiBjb3JyZWN0ZWQgcmV0dXJuIHZhbHVlcyBvZiBzZXR1cHRlcm0oKQorKiBGaXhlZCBzb21lIGJ1Z3MgaW4gdHB1dCAoaXQgZG9lcyBwYWRkaW5nIG5vdykKKyogZml4ZWQgYSBidWcgaW4gdGljIHRoYXQgbWFkZSBpdCBkbyB0aGUgd3JvbmcgdGhpbmcgb24gZW50cmllcyB3aXRoIG1vcmUgdGhhbgorICBvbmUgYHVzZScgY2FwYWJpbGl0eS4KKyogY29ycmVjdGVkIHRoZSBzY3JlZW4tc2l6ZSBjYWxjdWxhdGlvbiBhdCBzdGFydHVwIHRpbWUgdG8gYWx0ZXIgdGhlCisgIG51bWVyaWMgY2FwYWJpbGl0aWVzIGFzIHBlciBTVnI0LCBub3QganVzdCBMSU5FUyBhbmQgQ09MUy4KKyogdG9lKDEpIGludHJvZHVjZWQ7IGRvZXMgd2hhdCBpbmZvY21wIC1UIHVzZWQgdG8uCisqIHRpYygxKSBjYW4gbm93IHRyYW5zbGF0ZSBBSVggYm94MSBhbmQgZm9udFswMTIzXSBjYXBhYmlsaXRpZXMuCisqIHRpYyB1c2VzIG11Y2ggbGVzcyBjb3JlLCB0aGUgZG90aWMuc2gga2x1Z2UgY2FuIGdvIGF3YXkgbm93LgorKiBmaXggcmVhZF9lbnRyeSgpIGFuZCB3cml0ZV9lbnRyeSgpIHRvIHBhc3MgdGhyb3VnaCBjYW5jZWxsZWQgY2FwYWJpbGl0aWVzIE9LLgorKiBBZGQgJEhPTUUvLnRlcm1pbmZvIGFzIHNvdXJjZS90YXJnZXQgZGlyZWN0b3J5IGZvciB0ZXJtaW5mbyBlbnRyaWVzLgorKiB0ZXJtY2FwIGNvbXBpbGF0aW9uIG5vdyBhdXRvbWF0aWNhbGx5IGR1bXBzIGFuIGVudHJ5IHRvICRIT01FLy50ZXJtaW5mby4KKyogYWRkZWQgLWggb3B0aW9uIHRvIHRvZSgxKS4KKyogYWRkZWQgLVIgb3B0aW9uIHRvIHRpYygxKSBhbmQgaW5mb2NtcCgxKS4KKyogYWRkZWQgZmFsbGJhY2stZW50cnktbGlzdCBmZWF0dXJlLgorKiBhZGRlZCAtaSBvcHRpb24gdG8gaW5mb2NtcCgxKS4KKyogZG8gYSBiZXR0ZXIgam9iIGF0IGRldGVjdGluZyBpZiB3ZSdyZSBvbiBTQ08uCisKKyMjIyBuY3Vyc2VzLTEuOS41IC0+IDEuOS42CisKKyogaGFuZGxpbmcgb2YgVEVSTUNBUCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbm93IHdvcmtzIGNvcnJlY3RseS4KKyogdmFyaW91cyBjaGFuZ2VzIHRvIHNob3J0ZW4gdGVybWNhcCB0cmFuc2xhdGlvbnMgdG8gbGVzcyB0aGF0IDEwMjQgY2hhcnMuCisqIHRzZXQoMSkgYWRkZWQKKyogbW91c2Ugc3VwcG9ydCBmb3IgeHRlcm0uCisqIG1vc3QgZGF0YSB0YWJsZXMgYXJlIG5vdyBjb25zdCBhbmQgYWNjb3JkaW5nbHkgbGl2ZSBpbiBzaGFyZWFibGUgdGV4dCBzcGFjZS4KKyogT2JleSB0aGUgWFBHNC9TVnI0IHByYWN0aWNlIHRoYXQgZWNobygpIGlzIGluaXRhbGx5IG9mZi4KKyogdGljIGlzIG11Y2ggYmV0dGVyIGF0IHRyYW5zbGF0aW5nIFhFTklYIGFuZCBBSVggdGVybWNhcCBlbnRyaWVzIG5vdy4KKyogdGljIGNhbiBpbnRlcnByZXQga28gY2FwYWJpbGl0aWVzIG5vdy4KKyogaW50ZWdyYXRlZCBKdWVyZ2VuIFBmZWlmZXIncyBmb3JtcyBsaWJyYXJ5LgorKiB0YXVnaHQgd3JpdGVfZW50cnkoKSBob3cgbm90IHRvIHdyaXRlIG1vcmUgdGhhbiBpdCBuZWVkcyB0bzsgdGhpcyBjaGFuZ2UKKyAgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgdGVybWluZm8gdHJlZSBieSBhIGZ1bGwgMjYlIQorKiBpbmZvY21wIC1UIG9wdGlvbiBhZGRlZC4KKyogYmV0dGVyIHdhcm5pbmdzIGFib3V0IGhpc3RvcmljYWwgdGljIHF1aXJrcyBmcm9tIHRpYy4KKworIyMjIG5jdXJzZXMgMS45LjQgLT4gMS45LjUKKworKiBtZW51cyBsaWJyYXJ5IGlzIG5vdyBpbmNsdWRlZCB3aXRoIGRvY3VtZW50YXRpb24uCisqIGxpYl9tdmN1ciBoYXMgYmVlbiBjYXJlZnVsbHkgcHJvZmlsZWQgYW5kIHR1bmVkLgorKiBGaXhlZCBhIF5aLWhhbmRsaW5nIGJ1ZyB0aGF0IHdhcyB0YW5raW5nIGx5bngoMSkuCisqIEhKIEx1J3MgcGF0Y2hlcyBmb3IgRUxGIHNoYXJlZCBsaWJyYXJpZXMgdW5kZXIgTGludXgKKyogdGVybWluZm8uc3JjIDkuOC4yCisqIHR3ZWFrcyBmb3IgY29tcGlsaW5nIGluIHNlcGVyYXRlIGRpcmVjdG9yaWVzLgorKiBUaG9tYXMgRGlja2V5J3MgcGF0Y2hlcyB0byBzdXBwb3J0IE5lWFQncyBicmFpbi1kZWFkIGxpbmtlcgorKiBFcmljIFJheW1vbmQncyBwYXRjaGVzIHRvIGZpeCBwcm9ibGVtcyB3aXRoIGxvbmcgdGVybWNhcCBlbnRyaWVzLgorKiBtb3JlIHN1cHBvcnQgZm9yIHNoYXJlZCBsaWJyYXJpZXMgdW5kZXIgU3VuT1MgYW5kIElSSVguCisKKyMjIyBuY3Vyc2VzIDEuOS4zIC0+IDEuOS40CisKKyogZml4ZWQgYW4gdW5kZWZpbmVkLW9yZGVyLW9mLWV2YWx1YXRpb24gYnVnIGluIGxpYl9hY3MuYworKiBzeXN0ZW1hdGljYWxseSBnYXZlIG5vbi1BUEkgcHVibGljIGZ1bmN0aW9ucyBhbmQgZGF0YSBhbiBfbmNfIHByZWZpeC4KKyogaW50ZWdyYXRlZCBKdWVyZ2VuIFBmZWlmZXIncyBtZW51IGNvZGUgaW50byB0aGUgZGlzdHJpYnV0aW9uLgorKiB0b3RhbGx5IHJld3JvdGUgdGhlIGtuaWdodCB0ZXN0IGdhbWUncyBpbnRlcmZhY2UKKworIyMjIG5jdXJzZXMgMS45LjJjIC0+IDEuOS4zCisKKyogZml4ZWQgdGhlIFRFUk1DQVBfRklMRSBTdXBwb3J0LgorKiBmaXhlZCBvZmYtYnktb25lIGVycm9ycyBpbiBzY3JvbGxpbmcgY29kZQorKiBhZGRlZCB0cmFjZW11bmNoIHRvIHRoZSB0ZXN0IHRvb2xzCisqIHRvb2sgc3RlcHMgdG8gY3V0IHRoZSBydW5uaW5nIHRpbWUgb2YgbWFrZSBpbnN0YWxsLmRhdGEKKworIyMjIG5jdXJzZXMgMS45LjJjIC0+IDEuOS4yZAorCisqIHJldmlzZWQgJ2NvbmZpZ3VyZScgc2NyaXB0IHRvIHByb2R1Y2UgbGlicmFyaWVzIGZvciBub3JtYWwsIGRlYnVnLAorICBwcm9maWxlIGFuZCBzaGFyZWQgb2JqZWN0IG1vZGVscy4KKworIyMjIG5jdXJzZXMgMS45LjEgLT4gMS45LjIKKworKiB1c2UgJ2F1dG9jb25mJyB0byBpbXBsZW1lbnQgJ2NvbmZpZ3VyZScgc2NyaXB0LgorKiBwYW5lbHMgc3VwcG9ydCBhZGRlZAorKiB0aWMgbm93IGNoZWNrcyBmb3IgZXhjZXNzaXZlbHkgbG9uZyB0ZXJtY2FwIGVudHJpZXMgd2hlbiBkb2luZyB0cmFuc2xhdGlvbgorKiBmaXJzdCBjdXQgYXQgZWxpbWluYXRpbmcgbmFtZXNwYWNlIHBvbGx1dGlvbi4KKworIyMjIG5jdXJzZXMgMS44LjkgLT4gMS45CisKKyogY2xlYW51cCBnY2Mgd2FybmluZ3MgZm9yIHRoZSBmb2xsb3dpbmc6IHVzZSBzaXplX3Qgd2hlcmUgJ2ludCcgaXMgbm90CisgIGFwcHJvcHJpYXRlLCBmaXhlZCBzb21lIHNoYWRvd2VkIHZhcmlhYmxlcywgY2hhbmdlIGF0dHJfdCB0byBjb21wYXRpYmxlIHdpdGgKKyAgY2h0eXBlLCB1c2UgYXR0cl90IGluIHNvbWUgcGxhY2VzIHdoZXJlIGl0IHdhcyBjb25mdXNlZCB3aXRoICdpbnQnLgorKiB1c2UgY2h0eXBlL2F0dHJfdCBjYXN0cyBhcyBhcHByb3ByaWF0ZSB0byBlbnN1cmUgcG9ydGFiaWxpdHkgb2YgbWFza2luZworICBvcGVyYXRpb25zLgorKiBhZGRlZC1iYWNrIHdhZGRjaG5zdHIoKSB0byBsaWJfYWRkc3RyLmMgKGl0IGhhZCBiZWVuIGRlbGV0ZWQpLgorKiBzdXBwbGllZCBtaXNzaW5nIHByb3RvdHlwZXMgaW4gY3Vyc2VzLmgKKyogaW5jbHVkZSA8dGVybWNhcC5oPiBpbiBsaWJfdGVybWNhcC5jIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm90b3R5cGVzCisgIGFyZSBjb25zaXN0ZW50ICh0aGV5IHdlcmVuJ3QpLgorKiBjb3JyZWN0ZWQgcHJvdG90eXBlIG9mIHRwdXRzIGluIDx0ZXJtY2FwLmg+CisqIHJld3JvdGUgdmFyYXJncyBwYXJzaW5nIGluIGxpYl90cGFybS5jICh0byBhdm9pZCByZWZlcmVuY2luZyBtZW1vcnkKKyAgdGhhdCBtYXkgYmUgb3V0IG9mIGJvdW5kcyBvbiB0aGUgc3RhY2spIC0tIFB1cmlmeSBmb3VuZCB0aGlzLgorKiBlbnN1cmUgdGhhdCBUUkFDRSBpcyBkZWZpbmVkIGluIGxpYl90cmFjZS5jICh0byBzb2x2ZSBwcm90b3R5cGUKKyAgd2FybmluZ3MgZnJvbSBnY2MpLgorKiBjb3JyZWN0ZWQgc2Nyb2xsaW5nLXJlZ2lvbiBzaXplIGluICdtdmN1cl93cmFwKCknCisqIG1vcmUgc3BlbGxpbmcgZml4ZXMKKyogdXNlICdjYWxsb2MoKScgdG8gYWxsb2NhdGUgV0lORE9XIHN0cnVjdCBpbiBsaWJfbmV3d2luLmMgKFB1cmlmeSkuCisqIHNldCBkZWZhdWx0IHZhbHVlIGZvciBTUC0+X29mcCBpbiBsaWJfc2V0X3Rlcm0uYyAob3RoZXJ3aXNlIFN1bk9TIGR1bXBzCisgIGNvcmUgaW4gaW5pdF9hY3MoKSkuCisqIGluY2x1ZGUgPGVycm5vLmg+IGluIHdyaXRlX2VudHJ5LmMgKG1vc3QgImJyYWluZGVhZCIgaW5jbHVkZXMgZGVjbGFyZSBlcnJubworICBpbiB0aGF0IGZpbGUpLgorCisjIyMgbmN1cnNlcyAxLjguOCAtPiAxLjguOQorCisqIGNvbXBpbGUgKG1vc3RseSkgY2xlYW4gd2l0aCBnY2MgMi41LjggLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcworICAtV21pc3NpbmctcHJvdG90eXBlcyAtV2NvbnZlcnNpb24gYW5kIHVzaW5nIF9fYXR0cmlidXRlX18gdG8gZmx1c2ggb3V0CisgIG5vbi1wb3J0YWJsZSB1c2Ugb2YgIiV4IiBmb3IgcG9pbnRlcnMsIG9yIGZvciBjaHR5cGUgZGF0YSAod2hpY2ggaXMgZGVjbGFyZWQKKyAgYXMgYSBsb25nKS4KKyogbW9kaWZpZWQgZG91cGRhdGUgdG8gZW5zdXJlIHRoYXQgdHlwYWhlYWQgd2FzIHR1cm5lZCBvbiBiZWZvcmUgYXR0ZW1wdGluZworICBzZWxlY3QtY2FsbCAob3RoZXJ3aXNlLCBzb21lIGltcGxlbWVudGF0aW9ucyBoYW5nKS4KKyogYWRkZWQgdHJhY2UgbWFzayBUUkFDRV9GSUZPLCB1c2UgdGhpcyBpbiBsaWJfZ2V0Y2guYyB0byBhbGxvdyBmaW5lcgorICByZXNvbHV0aW9uIG9mIHRyYWNlcy4KKyogaW1wcm92ZWQgYm91bmRzIGNoZWNraW5nIG9uIHNldmVyYWwgY3JpdGljYWwgZnVuY3Rpb25zLgorKiB0aGUgZGF0YSBkaXJlY3RvcnkgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIG5ldyBtYXN0ZXIgdGVybWluZm8gZmlsZS4KKyogLUYgZmlsZS1jb21wYXJpc29uIG9wdGlvbiBhZGRlZCB0byBpbmZvY21wLgorKiBjb21wYXRpYmlsaXR5IHdpdGggWFNJIEN1cnNlcyBpcyBub3cgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIGJhZ2VzLgorKiB3c3luY3VwL3dzeW5jZG93biBmdW5jdGlvbnMgYXJlIHJlbGlhYmxlIG5vdzsgc3Vid2luZG93IGNvZGUgaW4gZ2VuZXJhbAorICBpcyBtdWNoIGxlc3MgZmxha3kuCisqIGNhcGFiaWxpdGllcyB+bXNnciwgdGlsZGVfZ2xpdGNoLCBpbnNlcnRfcGFkZGluZywgZ2VuZXJpY190eXBlLCBub19wYWRfY2hhciwKKyAgbWVtb3J5X2Fib3ZlLCBtZW1vcnlfYmVsb3csIGFuZCBoYXJkX2NvcHkgYXJlIG5vdyB1c2VkIHByb3Blcmx5LgorKiBjdXJzb3ItbW92ZW1lbnQgb3B0aW1pemF0aW9uIGhhcyBiZWVuIGNvbXBsZXRlbHkgcmV3cml0dGVuLgorKiB2ZXJ0aWNhbC1tb3ZlbWVudCBvcHRpbWl6YXRpb24gbm93IHVzZXMgaGFyZHdhcmUgc2Nyb2xsaW5nLCBpbCwgZGwuCisKKyMjIyBuY3Vyc2VzIDEuOC43IC0+IDEuOC44CisqIHVudGljIG5vIGxvbmdlciBleGlzdHMsIGluZm9jbXAgcmVwbGFjZXMgaXQuCisqIHRpYyBjYW4gdW5kZXJzdGFuZCB0ZXJtY2FwIG5vdywgZXNwZWNpYWxseSBpZiBpdCBpcyBjYWxsZWQgY2FwdG9pbmZvLgorKiBUaGUgTGludXggU3RhbmRhcmQgQ29uc29sZSB0ZXJtaW5mbyBlbnRyeSBpcyBjYWxsZWQgbGludXggaW5zZWFkIG9mIGNvbnNvbGUuCisgIEl0IGFsc28gdXNlcyB0aGUga2VybmVsJ3MgbmV3IG1ldGhvZCBvZiBjaGFuZ2luZyBjaGFyc2V0cy4KKyogaW5pdHNjcigpIHdpbGwgRVhJVCB1cG9uIGVycm9yIChhcyB0aGUgZG9jcyBzYXkpIFRoaXMgd2lsIG1vc3RseSBoYXBwZW4gaWYKKyAgeW91IHRyeSB0byBydW4gb24gYW4gdW5kZWZpbmVkIHRlcm1pbmFsLgorKiBJIGNhbiBnZXQgdGhpbmdzIHJ1bm5pbmcgb24gQUlYIGJ1dCB0aWMgY2FuJ3QgY29tcGlsZSB0ZXJtaW5mby4gSSBoYXZlIHRvCisgIGNvbXBpbGUgZW50cmllcyBvbiBhbm90aGVyIG1hY2hpbmUuIFZvbHVudGVlcnMgdG8gaHVudCB0aGlzIGJ1ZyBhcmUgd2VsY29tZS4KKyogd2JrZ2QoKSBhbmQgd2JrZ2RzZXQoKSBjYW4gYmUgdXNlZCB0byBzZXQgYSB3aW5kb3dzIGJhY2tncm91bmQgdG8gY29sb3IuCisgIHdjbGVhcigpL3dlcmFzZSgpIERPIE5PVCB1c2UgdGhlIGN1cnJlbnQgYXR0cmlidXRlIHRvIGNsZWFyIHRoZSBzY3JlZW4uCisgIFRoaXMgaXMgdGhlIHdheSBTVlI0IGN1cnNlcyB3b3Jrcy4gUERDdXJzZXMgMi4xIGlzIGJyb2tlbiBpbiB0aGlzIHJlc3BlY3QsCisgIHRob3VnaCBQREN1cnNlcyAyLjIgaGFzIGJlZW4gZml4ZWQuCisqIGNsZWFuZWQgdXAgdGhlIHRlc3QvIGRpcmVjdG9yeS4KKyogdGVzdC93b3JtIHdpbGwgc2VnZmF1bHQgYWZ0ZXIgcXVpdGUgYSB3aGlsZS4KKyogbWFueSBzcGVsbGluZyBjb3JyZWN0aW9ucyBjb3VydGVzeSBvZiBUaG9tYXMgRS4gRGlja2V5CisKKyMjIyBuY3Vyc2VzIDEuOC42IC0+IDEuOC43CisqIGNsZWFuZWQgdXAgcHJvZ3JhbXMgaW4gdGVzdC8gZGlyZWN0b3J5LgorKiBmaXhlZCB3YmtnZHNldCgpIG1hY3JvLgorKiBtb2RpZmllZCBnZXRzdHIoKSB0byBzdG9wIGl0IGZyb20gYWR2YW5jaW5nIGN1cnNvciBpbiBub2VjaG8gbW9kZS4KKyogbW9kaWZpZWQgbGludXggdGVybWluZm8gZW50cnkgdG8gd29yayB3aXRoIHRoZSBsYXRlc3Qga2VybmVsIHRvIGdldAorICB0aGUgY29ycmVjdCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldC4KKyogYWxzbyBhZGRlZCBhIGxpbnV4LW1vbm8gZW50cnkgZm9yIHRob3NlIHJ1bm5pbmcgb24gbW9ub2Nocm9tZSBzY3JlZW5zLgorKiBjaGFuZ2VkIGluaXRzY3IoKSBzbyB0aGF0IGl0IGJlaGF2ZXMgbGlrZSB0aGUgbWFuIHBhZ2Ugc2F5cyBpdCBkb2VzLgorICB0aGlzIGZpeGVzIHRoZSBwcm9ibGVtIHdpdGggcHJvZ3JhbXMgaW4gdGVzdC8gY3Jhc2hpbmcgd2l0aCBTSUdTRVYgaWYKKyAgYSB0ZXJtaW5hbCBpcyB1bmRlZmluZWQuCisqIG1vZGlmaWVkIGFkZGNoKCkgdG8gYXZvaWQgdXNpbmcgYW55IHRlcm0uaCAjZGVmaW5lJ3MKKyogcmVtb3ZlZCBkdXBsaWNhdGUgdGdvdG8oKSBpbiBsaWJfdHBhcm0uYworKiBtb2RpZmllZCBkdW1wX2VudHJ5LmMgc28gdGhhdCBpbmZvY21wIGRlYWxzIGNvcnJlY3RseSB3aXRoICcsJyBpbiBhY3NjCisqIG1vZGlmaWVkIGRlbHdpbigpIHRvIGNvcnJlY3RseSBoYW5kbGUgZGVsZXRpbmcgc3Vid2luZG93cy4KKyogZml4ZWQgTWFrZWZpbGUuZGlzdCB0byBzdG9wIGluc3RhbGxpbmcgYW4gZW1wdHkgY3Vyc2VzLmgKKyogZml4ZWQgYSBjb3VwbGUgb2Ygb3V0LW9mLWRhdGUgbm90ZXMgaW4gbWFuIHBhZ2VzLgorCisjIyMgbmN1cnNlcyAxLjguNSAtPiAxLjguNgorKiBJbXBsZW1lbnRlZCB3YmtnZCgpLCBia2dkKCksIGJrZ2RzZXQoKSwgYW5kIHdia2dkc2V0KCkuCisqIFRoZSBoYW5kbGluZyBvZiBhdHRyaWJ1dGVzIGhhcyBiZWVuIGltcHJvdmVkIGFuZCBub3cgZG9lcyBub3QgdHVybiBvZmYgY29sb3IKKyAgaWYgb3RoZXIgYXR0cmlidXRlcyBhcmUgdHVybmVkIG9mZi4KKyogc2Nyb2xsaW5nIGNvZGUgaXMgaW1wcm92ZWQuIFNjcm9sbGluZyBpbiBzdWJ3aW5kb3dzIGlzIHN0aWxsIGJyb2tlbi4KKyogRml4ZXMgdG8gc2V2ZXJhbCBidWdzIHRoYXQgbWFuaWZlc3QgdGhlbSBvbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiBMaW51eC4KKyogVGhlIGRlZmF1bHQgdG8gbWV0YSBub3cgZGVwZW5kcyBvbiB0aGUgc3RhdHVzIG9mIHRoZSB0ZXJtaW5hbCB3aGVuIG5jdXJzZXMKKyAgaXMgc3RhcnRlZC4KKyogVGhlIGludGVyZmFjZSB0byB0aGUgdHJhY2luZyBmYWNpbGl0eSBoYXMgY2hhbmdlZC4gIEluc3RlYWQgb2YgdGhlIHBhaXIgb2YKKyAgZnVuY3Rpb25zIHRyYWNlb24oKSBhbmQgdHJhY2VvZmYoKSwgdGhlcmUgaXMganVzdCBvbmUgZnVuY3Rpb24gdHJhY2UoKSB3aGljaAorICB0YWtlcyBhIHRyYWNlIG1hc2sgYXJndW1lbnQuICBUaGUgdHJhY2UgbWFza3MsIGRlZmluZWQgaW4gY3Vyc2VzLmgsIGFyZQorICBhcyBmb2xsb3dzOgorCisJI2RlZmluZSBUUkFDRV9ESVNBQkxFICAgMHgwMCAgICAvKiB0dXJuIG9mZiB0cmFjaW5nICovCisJI2RlZmluZSBUUkFDRV9PUkRJTkFSWSAgMHgwMSAgICAvKiBvcmRpbmFyeSB0cmFjZSBtb2RlICovCisJI2RlZmluZSBUUkFDRV9DSEFSUFVUICAgMHgwMiAgICAvKiBhbHNvIHRyYWNlIGFsbCBjaGFyYWN0ZXIgb3V0cHV0cyAqLworCSNkZWZpbmUgVFJBQ0VfTUFYSU1VTSAgIDB4MGYgICAgLyogbWF4aW11bSB0cmFjZSBsZXZlbCAqLworCisgIE1vcmUgdHJhY2UgbWFza3MgbWF5IGJlIGFkZGVkLCBvciB0aGVzZSBtYXkgYmUgY2hhbmdlZCwgaW4gZnV0dXJlIHJlbGVhc2VzLgorKiBUaGUgcGFkIGNvZGUgaGFzIGJlZW4gaW1wcm92ZWQgYW5kIHRoZSBwYWQgdGVzdCBjb2RlIGluIHRlc3QvbmN1cnNlcy5jIGhhcworICBiZWVuIGltcHJvdmVkLgorKiBUaGUgcHJvdG90eXBlIGFuc2kgZW50cnkgaGFzIGJlZW4gY2hhbmdlZCB0byB3b3JrIHdpdGggYSB3aWRlciB2YXJpZXR5CisgIG9mIGVtdWxhdG9ycy4KKyogRml4IHRvIHRoZSBwcm90b3R5cGUgYW5zaSBlbnRyeSB0aGF0IGVuYWJsZXMgaXQgdG8gd29yayB3aXRoIFBDIGVtdWxhdG9ycworICB0aGF0IHRyZWF0IHRyYWlsaW5nICI7bSIgaW4gYSBoaWdobGlnaHQgc2VxdWVuY2UgYXMgIjswbSI7IHRoaXMgZG9lc24ndAorICBicmVhayBvcGVyYXRpb24gd2l0aCBhbnkgZW11bGF0b3JzLgorKiBUaGVyZSBhcmUgbm93IHdvcmtpbmcgaW5mb2NtcCwgY2FwdG9pbmZvLCB0cHV0LCBhbmQgdGNsZWFyIHV0aWxpdGllcy4KKyogdGljIGNhbiBub3cgY29tcGlsZSBlbnRyaWVzIGluIHRlcm1jYXAgc3ludGF4LgorKiBDb3JlLWR1bXAgYnVnIGluIHBub3V0cmVmcmVzaCBmaXhlZC4KKyogV2Ugbm93IHJlY29nbml6ZSBhbmQgY29tcGlsZSBhbGwgdGhlIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcyBpbiBSb3NzCisgIFJpZGdlJ3MgbXl0aW5mbyBwYWNrYWdlIChyZW5kZXJpbmcgaXQgb2Jzb2xldGUpLgorKiBHZW5lcmFsIGNsZWFudXAgYW5kIGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnRzLgorKiBGaXhlcyBhbmQgYWRkaXRpb25zIHRvIHRoZSBpbnN0YWxsYXRpb24tZG9jdW1lbnRhdGlvbiBmaWxlcy4KKyogVGFrZSBjdXJzb3IgdG8gbm9ybWFsIG1vZGUgb24gZW5kd2luLgorCisjIyMgbmN1cnNlcyAxLjguNCAtPiAxLjguNQorKiBzZXJpb3VzIGJ1Z3MgaW4gdXBkYXRpbmcgc2NyZWVuIHdoaWNoIGNhdXNlZCBlcnJhdGljIG5vbi1kaXNwbGF5LAorICBmaXhlZC4KKyogZml4ZWQgaW5pdGlhbGl6YXRpb24gZm9yIGdldGNoKCkgcmVsYXRlZCB2YXJpYWJsZSB3aGljaCBjYXVzZQorICB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisqIGZpeGVkIGFub3RoZXIgZG91cGRhdGUgYnVnIHdoaWNoIG9ubHkgYXBwZWFyZWQgaWYgeW91IGhhdmUKKyAgcGFybV9jaGFyLgorKiBpbXBsZW1lbnRlZCByZWRyYXdsbigpIGFuZCByZWRyYXd3aW4oKS4KKyogaW1wbGVtZW50ZWQgd2luc25zdHIoKSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisqIGNsZWFuZWQgdXAgaW5zZXJ0bG4oKSBhbmQgZGVsZXRlbG4oKSBhbmQgaW1wbGVtZW50ZWQgKHcpaW5zZGVsbigpLgorKiBjaGFuZ2VkIE1ha2VmaWxlLmRpc3Qgc28gdGhhdCBpbnN0YWxsYXRpb24gb2YgbWFuIHBhZ2VzIHdpbGwKKyAgdGFrZSBub3RlIG9mIHRoZSB0ZXJtaW5mbyBkaXJlY3RvcnkuCisqIGZpeGVkIENvbmZpZ3VyZSAocmVtb3ZlZCB0aGUgbXlzdGVyaW91cyAnWCcpLgorKiBFcmljIFMuIFJheW1vbmQgZml4ZWQgdGhlIHNjcmlwdC4qIGZpbGVzIHNvIHRoYXQgdGhleSB3b3JrIHdpdGgKKyAgc3RvY2sgYXdrLgorCisjIyMjIG5jdXJzZXMgMS44LjMgLT4gMS44LjQgIyMjIyAjIyMjCisqIGZpeGVkIGJ1ZyBpbiByZWZyZXNoaW5nIHRoZSBzY3JlZW4gYWZ0ZXIgcmV0dXJuIGZyb20gc2hlbGxfbW9kZS4KKyAgVGhlcmUgYXJlIHN0aWxsIHByb2JsZW1zIGJ1dCB0aGV5IGRvbid0IG1hbmlmZXN0IHRoZW1zZWx2ZXMgb24KKyAgbXkgbWFjaGluZSAoTGludXggMC45OS4xNGYpLgorKiBhZGRlZCB3Z2V0bnN0cigpIGFuZCBtb2RpZmllZCB0aGluZ3MgYWNjb3JkaW5nbHkuCisqIGZpeGVkIHRoZSBzY3JpcHQuc3JjIHNjcmlwdC50ZXN0IHRvIHdvcmsgd2l0aCBhd2sgbm90IGp1c3QgZ2F3ay4KKyogQ29uZmlndXJlIGNhbiBub3cgdGFrZSBhbiBhcmd1bWVudCBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4KKyogYWRkZWQgdGVzdC9uY3Vyc2VzLmMgd2hpY2ggcmVwbGFjZXMgc2V2ZXJhbCBvdGhlciBwcm9ncmFtcyBhbmQKKyAgcGVyZm9ybXMgbW9yZSB0ZXN0aW5nLgorW1RoYW5rcyB0byBFcmljIFMgUmF5bW9uZCBmb3IgdGhlIGxhc3QgNF0KKyogbW9yZSBmaXhlcyB0byBsaWJfb3ZlcmxheS5jIGFuZCBhZGRlZCB0ZXN0L292ZXIuYyB0byBpbGx1c3RyYXRlCisgIGhvdyBpdCB3b3Jrcy4KKyogZml4ZWQgdW5nZXRjaCgpIHRvIHRha2UgaW50IGluc3RlYWQgb2YgY2guCisqIGZpeGVzIHRvIGN1cmUgd2dldGNoKCkgaWYgZmx1c2hpbnAoKSBpcyBjYWxsZWQuCisKK09uZSBub3RlIEkgZm9yZ290IHRvIG1lbnRpb24gaW4gMS44LjMgaXMgdGhhdCB0cmFjaW5nIGlzIG9mZiBieQorZGVmYXVsdCBzdGFydGluZyBpbiB0aGUgdmVyc2lvbi4gSWYgeW91IHdhbnQgdHJhY2luZyBvdXRwdXQsIHB1dAordHJhY2VvbigpOyBpbiB5b3VyIGNvZGUgYW5kIGxpbmsgd2l0aCAtbGRjdXJzZXMuCisKKyMjIyMgbmN1cnNlcyAxLjguMiAtPiBuY3Vyc2VzIDEuOC4zICMjIyMgIyMjIworTUFKT1IgQ0hBTkdFUzoKKzEpIFRoZSBvcmRlciBvZiBjYXBhYmlsaXRpZXMgaGFzIGJlZW4gY2hhbmdlZCBpbiBvcmRlciB0byBhY2hpZXZlCitiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIFNWUjQgdGVybWluZm8gZGF0YWJhc2UuIFRoaXMgaGFzIHRoZQordW5mb3J0dW5hdGUgZWZmZWN0IG9mIGJyZWFraW5nIGFwcGxpY2F0aW9uIGN1cnJlbnRseSBsaW5rZWQgd2l0aAorbmN1cnNlcy4gVG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IsIHJlY29tcGlsZSBhbGwgc3VjaCBwcm9ncmFtcy4KK01vc3QgcHJvZ3JhbXMgdXNpbmcgY29sb3Igb3IgbmV3ZXIgY2FwYWJpbGl0aWVzIHdpbGwgYnJlYWssIG90aGVycword2lsbCBwcm9iYWJseSBjb250aW51ZSB0byB3b3JrIG9rLgorCisyKSBQYXZlbCBDdXJ0aXMgaGFzIHJlbm91bmNlZCBoaXMgY29weXJpZ2h0IHRvIHRoZSBwdWJsaWMgZG9tYWluLgorVGhpcyBtZWFucyB0aGF0IGhpcyBvcmlnaW5hbCBzb3VyY2VzIChwb3N0ZWQgdG8gY29tcC5zb3VyY2VzLnVuaXgsCit2b2x1bWUgMSkgYXJlIG5vdyBpbiB0aGUgcHVibGljIGRvbWFpbi4gIFRoZSBjdXJyZW50IHNvdXJjZXMgYXJlCitOT1QgaW4gdGhlIHB1YmxpYyBkb21haW4sIHRoZXkgYXJlIGNvcHlyaWdodGVkIGJ5IG1lLiAgSSdtCitlbnRlcnRhaW5pbmcgaWRlYXMgb24gd2hhdCB0aGUgbmV3IHRlcm1zIG5jdXJzZXMgaXMgcmVsZWFzZWQgdW5kZXIuCisKKzMpIEVyaWMgUy4gUmF5bW9uZCBoYXMgc3VwcGxpZWQgYSBjb21wbGV0ZSBzZXQgb2YgbWFuIHBhZ2VzIGZvcgorbmN1cnNlcyBpbiA/cm9mZiBmb3JtYXQuIFRoZXkgd2lsbCBldmVudHVhbGx5IHJlcGxhY2UgbW9zdCBvZiB0aGUKK2N1cnJlbnQgZG9jcy4gQm90aCBzZXRzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKK090aGVyIGNoYW5nZXMgYW5kIG5vdGVzIGZyb20gMS44LjIgaW5jbHVkZToKKyogU0lHU0VHViBkdXJpbmcgc2Nyb2xsaW5nIG5vIGxvbmdlciBvY2N1cnMuCisqIE90aGVyIHByb2JsZW1zIHdpdGggc2Nyb2xsaW5nIGFuZCB1c2Ugb2YgaWRsIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisqIGxpYl9nZXRjaC5jIGhhcyBiZWVuIHJlLXdyaXR0ZW4gYW5kIHNob3VsZCBwZXJmb3JtIGZsYXdsZXNzbHkuCisgIHBsZWFzZSB1c2UgdGVzdC9nZXRjaC5jIGFuZCBhbnkgb3RoZXIgcHJvZ3JhbXMgdG8gdGVzdCB0aGlzLgorKiByaXBvZmZsaW5lKCkgaXMgaW1wbGVtZW50ZWQgKFRoYW5rcyB0byBFcmljKSBhbmQgc2xrXyBmdW5jdGlvbnMKKyAgY2hhbmdlZCBhY2NvcmRpbmdseS4KKyogSSd2ZSBhZGRlZCBzdXBwb3J0IGZvciB0ZXJtaW5hbHMgdGhhdCBzY3JvbGwgaWYgeW91IHdyaXRlIGluIHRoZQorICBib3R0b20tcmlnaHQgY29ybmVyLgorKiBmaXhlZCBtb3JlIGJ1Z3MgaW4gcGFkcyBjb2RlLiBJZiBhbnlib2R5IGhhcyBhIHByb2dyYW0gdGhhdCB1c2VzCisgIHBhZHMgSSdkIGxvdmUgYSBjb3B5LgorKiBjb3JyZWN0IGhhbmRsaW5nIGZvciB0ZXJtaW5hbCB3aXRoIGJhY2tfY29sb3JfZXJhc2UgY2FwYWJpbGl0eQorICAoc3VjaCBhcyBMaW51eCBjb25zb2xlLCBhbmQgbW9zdCBQQyB0ZXJtaW5hbHMpCisqIF5aIGhhbmRsaW5nIGFwcGFyZW50bHkgZGlkbid0IHdvcmsgKEkgc2hvdWxkIG5ldmVyIHRydXN0IGNvZGUKKyAgc2VudCBtZSB0byBtZSB3aXRob3V0IGV4dGVuc2l2ZSB0ZXN0aW5nKS4gSXQgbm93IHNlZW1zIHRvIGJlCisgIGZpeGVkLiBMZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBwcm9ibGVtcy4KKyogSSd2ZSBhZGRlZCBzdXBwb3J0IGZvciBBcG9sbG8gYW5kIE5lWFQsIGJ1dCBpdCBtYXkgc3RpbGwgYmUKKyAgaW5jb21wbGV0ZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgbGFjayBvZiBQT1NJWAorICBmZWF0dXJlcy4KKyogc2Nyb2xsaW5nIHNob3VsZCBiZSBtb3JlIGVmZmljaWVudCBvbiB0ZXJtaW5hbHMgd2l0aCBpZGwKKyAgY2FwYWJpbGl0aWVzLiBQbGVhc2Ugc2VlIHNyYy9saWJfc2Nyb2xsLmMgZm9yIG1vcmUgbm90ZXMuCisqIFRoZSBsaW5lIGRyYXdpbmcgcm91dGluZXMgd2VyZSBvZmZzZXQgYnkgMSBhdCBib3RoIGVuZHMuIFRoaXMKKyAgaXMgbm93IGZpeGVkLgorKiBhZGRlZCBhIGZldyBtaXNzaW5nIHByb3RvdHlwZXMgYW5kIG1hY3JvcyAoZS5nLiBzZXR0ZXJtKCkpCisqIGZpeGVkIGNvZGUgaW4gc3JjL2xpYl9vdmVybGF5LmMgd2hpY2ggdXNlZCB0byBjcmFzaC4KKyogYWRkZWQgYSBmZXcgbW9yZSBwcm9ncmFtcyBpbiB0ZXN0LyBUaGUgb25lcyBmcm9tIHRoZSBQREN1cnNlcworICBwYWNrYWdlIGFyZSB1c2VmdWwsIGVzcGVjaWFsbHkgaWYgeW91IGhhdmUgU1ZSNCBwcm9wZXIuIEknbQorICBpbnRlcmVzdGVkIGluIHRoZSByZXN1bHRzIHlvdSBnZXQgb24gc3VjaCBhIHN5c3RlbXMgKEVyaWM/IDstKS4KKyAgVGhleSBhbHJlYWR5IGV4cG9zZWQgY2VydGFpbiBidWdzIGluIG5jdXJzZXMuCisqIFNlZSBzcmMvUkVBRE1FIGZvciBwb3J0aW5nIG5vdGVzLgorKiBUaGUgQysrIGNvZGUgc2hvdWxkIHJlYWxseSByZXBsYWNlIG5jdXJzZXMuaCBpbnN0ZWFkIG9mIHdvcmtpbmcKKyAgYXJvdW5kIGl0LiBJdCBzaG91bGQgYXZvaWQgbmFtZS1zcGFjZSBjbGFzaGVzIHdpdGggbnRlcm0uaCAodXNlCisgIHJvd3MgaW5zdGVhZCBvZiBsaW5lcywgZXRjLikKKyogVGhlIEMrKyBzaG91bGQgY29tcGlsZSBvay4gSSd2ZSBhZGRlZCBleHBsaWNpdCBydWxlcyB0byB0aGUKKyAgTWFrZWZpbGUgYmVjYXVzZSBubyBDKysgZGVmYXVsdHMgYXJlIGRvY3VtZW50ZWQgb24gdGhlIHN1bnMuCisqIFRoZSBkb2NzIHNheSB0aGF0IGVjaG8oKSBhbmQgbm9jYnJlYWsoKSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICBBdCB0aGUgbW9tZW50IG5jdXJzZXMgd2lsbCBzd2l0Y2ggdG8gY2JyZWFrKCkgaWYgdGhlIGNhc2UgYWJvdmUKKyAgb2NjdXJzLiBTaG91bGQgaXQgY29udGludWUgdG8gZG8gc28/IEhvdyBhYm91dCBlY2hvKCkgYW5kIG5vcmF3KCk/CisqIFBEQ3Vyc2VzIHNlZW0gdG8gYXNzdW1lIHRoYXQgd2NsZWFyKCkgd2lsbCB1c2UgY3VycmVudCBhdHRyaWJ1dGUKKyAgd2hlbiBjbGVhcmluZyB0aGUgc2NyZWVuLiBBY2NvcmRpbmcgdG8gRXJpYyB0aGlzIGlzIG5vdCB0aGUgY2FzZQorICB3aXRoIFNWUjQuCisqIEkgaGF2ZSBkaXNjb3ZlcmVkLCB0byBteSBjaGFncmluLCBTdW5PUyA0LnggKGFuZCBwcm9iYWJseSBvdGhlciBzeXN0ZW1zKQorICAqIGRvZXNuJ3QgaGF2ZSB2c3NjYW5mIGFuZCBHb2Qga25vd3Mgd2hhdCBlbHNlISAgSSd2ZSB3aWxsIGRvIGEgdnNzY2FuZigpLgorKiBJJ3ZlIGFsc28gZm91bmQgb3V0IHRoYXQgdGhlIHNyYy9zY3JpcHQuKiByZWx5IG9uIGdhd2sgYW5kIHdpbGwgbm90CisgIHdvcmsgd2l0aCBzdG9jayBhd2sgb3IgZXZlbiB3aXRoIG5hd2suIEFueSBjaGFuZ2VzIGFyZSB3ZWxjb21lLgorKiBMaW51eCBpcyBtb3JlIHRvbGVyYW50IG9mIE5VTEwgZGVyZWZlcmVuY2VzIHRoYW4gbW9zdCBzeXN0ZW1zLiBUaGlzCisgIGZhY3Qgd2FzIGV4cG9zZWQgYnkgaGFub2kuCisqIG5jdXJzZXMgc3RpbGwgc2VlbXMgaW5lZmZpY2llbnQgaW4gZHJhd2luZyB0aGUgc2NyZWVuIG9uIGEgc2VyaWFsCisgIGxpbmsgYmV0d2VlbiBMaW51eCBhbmQgc3Vucy4gVGhlIHBhZGRpbmcgbWF5IGJlIHRoZSBjdWxwcml0LgorKiBUaGVyZSBzZWVtcyB0byBiZSBvbmUgbGluZ2VyaW5nIHByb2JsZW0gd2l0aCBkb3VwZGF0ZSgpIGFmdGVyIHNoZWxsaW5nCisgIG91dC4gRGVzcGl0ZSB0aGUgZmFjdCB0aGUgaXQgaXMgc2VuZGluZyBvdXQgdGhlIGNvcnJlY3QgaW5mb3JtYXRpb24KKyAgdG8gdGhlIHRlcm1pbmFsLCBub3RoaW5nIHRha2VzIGVmZmVjdCB1bnRpbCB5b3UgcHJlc3MgXkwgb3IgYW5vdGhlcgorICByZWZyZXNoIHRha2VzIHBsYWNlLiBBbmQgeWVzLCBvdXRwdXQgZG9lcyBnZXQgZmx1c2hlZC4KKworIyMjIyBuY3Vyc2VzIDEuOC4xIC0+IG5jdXJzZXMgMS44LjIgIyMjIyBOb3YgMjgsIDE5OTMgIyMjIworCisqIGFkZGVkIHN1cHBvcnQgZm9yIFNWUjQgYW5kIEJTREkncyBCU0QvMzg2LgorKiBtYWpvciB1cGRhdGUgYW5kIGZpeCB0byBzY3JvbGxpbmcgcm91dGluZS4KKyogTU9SRSBmaXhlcyB0byBzdHVmZiBpbiBsaWJfZ2V0Y2guYy4KKyogY2xlYW5lZC11cCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGNhbiBub3cgZ2VuZXJhdGUKKwlDb25maWcuKiBmaWxlcyB0aHJvdWdoIGFuIGF3ayBzY3JpcHQuCisqIGNoYW5nZWQgc2V0dXB0ZXJtKCkgc28gaXQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSwKKwlhZGQgYWRkZWQgc2V0X2N1cnRlcm0oKSwgZGVsX2N1cnRlcm0oKS4KKyogYSBmZXcgbWlub3IgY2xlYW51cHMuCisqIGFkZGVkIG1vcmUgcHJvdG90eXBlcyBpbiBjdXJzZXMuaAorCisjIyMjIG5jdXJzZXMgMS44IC0+IG5jdXJzZXMgMS44LjEgIyMjIyBOb3YgNCwgMTk5MyAjIyMjCisKKyogYWRkZWQgc3VwcG9ydCBmb3IgTmVYVFN0ZXAgMy4wCisqIGFkZGVkIHRlcm1jYXAgZW11bGF0aW9uIChub3Qgd2VsbCB0ZXN0ZWQpLgorKiBtb3JlIGNvbXBsZXRlIEMrKyBpbnRlcmZhY2UgdG8gbmN1cnNlcy4KKyogZml4ZWQgb3ZlcmxheSgpLCBvdmVyd3JpdGUoKSwgYW5kIGFkZGVkIGNvcHl3aW4oKS4KKyogYSBjb3VwbGUgb2YgYnVnIGZpeGVzLgorKiBhIGZldyBjb2RlIGNsZWFudXBzLgorCisjIyMjIG5jdXJzZXMgMC43LjIvMC43LjMgLT4gbmN1cnNlcyAxLjggIyMjIyBBdWcgMzEsIDE5OTMgIyMjIworCisqIFRoZSBhbm5veWluZyBtZXNzYWdlICJjYW4ndCBvcGVuIGZpbGUuIiB3YXMgZHVlIHRvIG1pc3NpbmcKKyAgdGVybWluZm8gZW50cnkgZm9yIHRoZSB1c2VkIHRlcm1pbmFsLiBJdCBoYXMgbm93IGJlZW4KKyAgcmVwbGFjZWQgYnkgYSBob3BlZnVsbHkgbW9yZSBoZWxwZnVsIG1lc3NhZ2UuCisqIFByb2JsZW1zIHdpdGggcnVubmluZyBvbiBzZXJpYWwgbGluZXMgYXJlIG5vdyBmaXhlZC4KKyogQWRkZWQgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgU3VuT1MsIExpbnV4LCBIUC9VWCwgVWx0cml4LAorICAzODZic2QvQlNESSAoaWYgeW91IGhhdmUgb3RoZXJzIHNlbmQnZW0gdG8gbWUpCisqIENsZWFuZXIgTWFrZWZpbGUuCisqIFRoZSBkb2N1bWVudGF0aW9uIGluIG1hbnVhbC5kb2MgaXMgbm93IG1vcmUgdXB0b2RhdGUuCisqIHVwZGF0ZSBvcHRpbWl6YXRpb24gYW5kIHN1cHBvcnQgZm9yIGhwIHRlcm1pbmFscywgYW5kIDM4NmJzZAorICBjb25zb2xlIGRyaXZlcihzKS4KKyogbXZjdXIgb3B0aW1pemF0aW9uIGZvciB0ZXJtaW5hbHMgd2l0aG91dCBjdXJzb3IgYWRkcmVzc2luZworICAoZG9lc24ndCB3b3JrIG9uIExpbnV4KQorKiBpZiBjdXJzb3IgbW92ZWQgc2luY2UgbGFzdCB1cGRhdGUsIGdldGNoKCkgd2lsbCByZWZyZXNoIHRoZQorICBzY3JlZW4gYmVmb3JlIHdvcmtpbmcuCisqIGdldGNoKCkgJiBhbGFybSgpIGNhbiBub3cgbGl2ZSB0b2dldGhlci4gaW4gMC43LjMgYSBzaWduYWwKKyAgaW50ZXJydXB0ZWQgZ2V0Y2goKSAoYnVnIG9yIGZlYXR1cmU/KSBub3cgdGhlIGdldGNoIGlzCisgIHJlc3RhcnRlZC4KKyogc2NhbncoKSBldCBhbGwgd2VyZSBzaWNrLCBub3cgZml4ZWQuCisqIHN1cHBvcnQgZm9yIDgtYml0IGlucHV0ICh1c2UgbWV0YSgpKS4KKyogYWRkZWQgZGVmYXVsdCBzY3JlZW4gc2l6ZSB0byBhbGwgdGVybWluZm9zLgorKiBhZGRlZCBjKysgTmN1cnNlc3cgY2xhc3MuCisqIHNldmVyYWwgbWlub3IgYnVnIGZpeGVzLgorCisjIyMjIG5jdXJzZXMgMC43LjIgLT4gbmN1cnNlcyAwLjcuMyAjIyMjIE1heSAyNywgMTk5MyAjIyMjCisKKyogQ29uZmlnIGZpbGUgdG8gY29wZSB3aXRoIGRpZmZlcmVudCBwbGF0Zm9ybXMgKDM4NkJTRCwgQlNESSwgVWx0cml4LCBTdW5PUykKKyogbW9yZSBmaXhlcyB0byBsaWJfZ2V0Y2guYworKiBjaGFuZ2VzIHJlbGF0ZWQgdG8gQ29uZmlnCisKKyMjIyMgbmN1cnNlcyAwLjcgLT4gbmN1cnNlcyAwLjcuMiAjIyMjIE1heSAyMiwgMTk5MyAjIyMjCisKKyogZG9jcyB1cGRhdGVkIHNsaWdodGx5IChjb2xvciB1c2FnZSBpcyBub3cgZG9jdW1lbnRlZCkuCisqIHlldCBhbm90aGVyIGZpeCBmb3IgZ2V0Y2goKSwgdGhpcyBvbmUgZml4ZXMgcHJvYmxlbXMgd2l0aCBFU0MgYmVpbmcgc3dhbGxvd2VkCisgIGlmIGFub3RoZXIgY2hhcmFjdGVyIGlzIHR5cGVkIGJlZm9yZSB0aGUgMSBzZWNvbmQgdGltZW91dC4KKyogSG9wZWZ1bGx5LCBhZGRzdHIoKSBhbmQgYWRkY2goKSBhcmUgOC1iaXQgY2xlYW4uCisqIGZpeGVkIGxpYl90cGFybS5jIHRvIHVzZSBzdGRhcmcuaCAoc2hvdWxkIHJ1biBvbiBzdW5zIG5vdykKKyogb3JkZXIgb2YgY2FwYWJpbGl0aWVzIGNoYW5nZWQgdG8gcmVmbGVjdCB0aGF0IHNwZWNpZmllZCBpbiBTWVNWCisgIHRoaXMgd2lsbCBhbGxvdyBmb3IgYmluYXJ5LWNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0ZXJtaW5mbyBkYnMuCisqIGFkZGVkIGhhbGZkZWxheSgpCisqIGZpeGVkIHByb2JsZW1zIHdpdGggYXNjX2luaXQoKQorKiBhZGRlZCBBX1BST1RFQ1QgYW5kIEFfSU5WSVMKKyogY2xlYW5lZCB1cCB2aWRwdXRzKCkKKyogZ2VuZXJhbCBjbGVhbnVwIG9mIHRoZSBjb2RlCisqIG1vcmUgYXR0ZW50aW9uIHRvIHBvcnRhYmlsaXR5IHRvIG90aGVyIHN5c3RlbXMKKyogYWRkZWQgdGVybWluZm9zIGZvciBocDcwMDkyICh3b250IHdvcmsgdW50aWwgY2hhbmdlcyB0byBsaWJfdXBkYXRlLmMgYXJlCisgIG1hZGUpIGFuZCAzODZCU0QgcGN2dCBkcml2ZXJzLgorCitUaGFua3MgdG8gSGVsbG11dGggTWljaGFlbGlzIGZvciBoaXMgaGVscC4KK29wdGltaXphdGlvbiBjb2RlIGlzIHNsYXRlZCBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZSwgc3RheSB0dW5lZCEKKworIyMjIyBuY3Vyc2VzIDAuNi8wLjYxIC0+IG5jdXJzZXMgMC43ICMjIyMgQXByaWwgMSwgMTk5MworUGxlYXNlIG5vdGUgdGhhdCB0aGUgbmV4dCByZWxlYXNlIHdpbGwgYmUgY2FsbGVkIDEuOC4gSWYgeW91IHdhbnQgdG8ga25vdyBhYm91dAordGhlIHJhdGlvbmFsZSBkcm9wIG1lIGEgbGluZS4KKworSW5jbHVkZWQgYXJlIHNldmVyYWwgdGVzdCBwcm9ncmFtcyBpbiB0ZXN0Ly4KK0kndmUgc3BsaXQgdXAgdGhlIHBhbmVscyBsaWJyYXJ5LCByZXZlcnNpLCB0ZXRyaXMsIHNva29iYW4uIFRoZXkgYXJlIG5vdworYXZhaWxhYmxlIHNlcGFyYXRlbHkgZnJvbSBuZXRjb20uY29tOnB1Yi96bWJlbmhhbC8KKworKiBjb2xvciBhbmQgQUNTIHN1cHBvcnQgaXMgbm93IGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBTWVNWIGF0IHRoZSB0ZXJtaW5mbworICBsZXZlbC4KKyogQ2FwYWJpbGl0aWVzIG5vdyBpbmNsdWRlcyBhcyBtYW55IFNZU1YgY2FwcyBJIGNvdWxkIGZpbmQuCisqIHRpZ2V0ZmxhZyx0aWdldG51bSx0aWdldHN0ciBmdW5jdGlvbnMgYWRkZWQuCisqIGJvb2xuYW1lcywgYm9vbGZuYW1lcywgYm9vbGNvZGVzIG51bW5hbWVzLCBudW1mbmFtZXMsIG51bWNvZGVzLAorICBzdHJuYW1lcywgc3RyZm5hbWVzLCBzdHJjb2RlcyBhcnJheXMgYXJlIG5vdyBhZGRlZC4KKyoga2V5bmFtZSgpIGlzIGFkZGVkLgorKiBBbGwgZnVuY3Rpb24ga2V5cyBjYW4gYmUgZGVmaW5lZCBpbiB0ZXJtaW5mbyBlbnRyaWVzLgorKiBmaXhlZCBsaW5fdHBhcm0uYyB0byBiZWhhdmUgcHJvcGVybHkuCisqIHRlcm1pbmZvIGVudHJpZXMgZm9yIHZ0KiBhbmQgeHRlcm0gYXJlIGluY2x1ZGVkIChpbXByb3ZlbWVudHMgYXJlIHdlbGNvbWUpCisqIG1vcmUgYXV0b21hdGlvbiBpbiBoYW5kbGluZyBjYXBzIGFuZCBrZXlzLgorKiBpbmNsdWRlZCBmaXhlcyBmcm9tIDAuNi4xCisqIGFkZGVkIGEgZmV3IG1vcmUgbWlzc2luZyBmdW5jdGlvbnMuCisqIGZpeGVkIGEgY291cGxlIG9mIG1pbm9yIGJ1Z3MuCisqIHVwZGF0ZWQgZG9jcyBKVVNUIGEgbGl0dGxlIChzdGlsbCBtaWxlcyBiZWhpbmQgaW4gZG9jdW1lbnRpbmcgdGhlIG5ld2VyCisJZmVhdHVyZXMpLgorCisjIyMjIG5jdXJzZXMgMC42IC0+IG5jdXJzZXMgMC42MSAjIyMjCisKKzEpIEluY2x1ZGVkIHRoZSBtaXNzaW5nIGRhdGEvY29uc29sZS4KKworMikgYWxsb3cgYXR0cmlidXRlcyB3aGVuIGRyYXdpbmcgYm94ZXMuCisKKzMpIGNvcnJlY3RlZCB1c2FnZSBvZiB3aW4tPl9kZWxheSB2YWx1ZS4KKworNCkgZml4ZWQgYSBidWcgaW4gbGliX2dldGNoLmMuIGlmIGl0IGRpZG4ndCByZWNvZ25pemUgYSBzZXF1ZW5jZSBpdCB3b3VsZAorCXNpbXBseSByZXR1cm4gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzZXF1ZW5jZS4gVGhlIGNvcnJlY3QKKwliZWhhdmlvciBpcyB0byByZXR1cm4gdGhlIGVudGlyZSBzZXF1ZW5jZSBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZS4KKworIyMjIyBuY3Vyc2VzMC41IC0+IG5jdXJzZXMwLjYgIyMjIyBNYXJjaCAxLCAxOTkzICMjIyMKKyogcmVtb3ZlZCBfbnVtY2huZ2QgZnJvbSBzdHJ1Y3QgX3dpbl9zdCBhbmQgbWFkZSBhcHByb3ByaWF0ZSBjaGFuZ2VzLgorKiByZXdyaXR0ZW4ga2dldGNoKCkgdG8gcmVtb3ZlIHByb2JsZW1zIHdpdGggaW50ZXJhY3Rpb24gYmV0d2VlbiBhbGFybSBhbmQKKyAgcmVhZCgpLiBJdCBjYXVzZWQgU0lHU0VHViBldmVyeSBub3cgYW5kIHRoZW4uCisqIGZpeGVkIGEgYnVnIHRoYXQgbWlzY291bnRlZCB0aGUgbnVtYmVycyBvZiBjb2x1bW5zIHdoZW4gdXBkYXRpbmcuCisgIChpbiBsaWJfZG91cGRhdGUuYyhDbHJVcGRhdGUoKSAtLSBpdGVyYXRlIHRvIGNvbHVtbnMgbm90IGNvbHVtbnMtMSkKKyogZml4ZWQgYSBidWcgdGhhdCBjYXVzZSB0aGUgbG93ZXItcmlnaHQgY29ybmVyIHRvIGJlIGluY29ycmVjdC4KKyAgKGluIGxpYl9kb3VwZGF0ZS5jKHB1dENoYXIoKSAtLSBjaGVjayBhZ2FpbnN0IGNvbHVtbnMgbm90IGNvbHVtbnMtMSkKKyogbWFkZSByZXNpemUoKSBhbmQgY2xlYW51cCgpIHN0YXRpYyB0byBsaWJfbmV3dGVybS5jCisqIGFkZGVkIG5vdGltZW91dCgpLgorKiBhZGRlZCB0aW1lb3V0KCkgZGVmaW5lIGluIGN1cnNlcy5oCisqIGFkZGVkIG1vcmUgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgZml4ZWQgbmFwbXMuCisqIGFkZGVkIHVzZV9lbnYoKS4KKyogbW92ZWQgc2NyZWVuIHNpemUgZGV0ZWN0aW9uIHRvIGxpYl9zZXR1cC5jLgorKiBmaXhlZCBuZXd0ZXJtKCkgdG8gY29uZmlybSB0byBwcm90b3R5cGUuCisqIHJlbW92ZWQgU0lHV0lOQ0ggc3VwcG9ydCBhcyBTWVNWIGRvZXMgbm90IGRlZmluZSBpdHMgc2VtYW50aWNzLgorKiBjbGVhbmVkLXVwIGxpYl90b3VjaC5jCisqIGFkZGVkIHdhZGRuc3RyKCkgYW5kIHJlbGF0aXZlcy4KKyogYWRkZWQgc2xrXyogc3VwcG9ydC4KKyogZml4ZWQgYSBidWcgaW4gd2RlbGV0ZWxuKCkuCisqIGFkZGVkIFBBTkVMIGxpYnJhcnkuCisqIG1vZGlmaWVkIE1ha2VmaWxlIGZvciBzbW9vdGhlciBpbnN0YWxsYXRpb24uCisqIHRlcm1pbmZvLmggaXMgcmVhbGx5IHRlcm0uaAorCisjIyMjIG5jdXJzZXMgMC40IC0+IG5jdXJzZXMgMC41ICMjIyMgRmViIDE0LCAxOTkzICMjIyMKKyogY2hhbmdlZCBfd2luX3N0IHN0cnVjdHVyZSB0byBhbGxvdyBzdXBwb3J0IGZvciBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkuCisqIEFkZGl0aW9uIG9mIHRlcm1pbmZvIHN1cHBvcnQgZm9yIGFsbCBLRVlfKi4KKyogU3VwcG9ydCBmb3Igbm9kZWxheSgpLCB0aW1lb3V0KCksIG5vdGltZW91dCgpLgorKiBmaXhlZCBhIGJ1ZyB3aXRoIHRoZSBrZXlwYWQgY2hhciByZWFkaW5nIHRoYXQgZGlkIG5vdCByZXR1cm4gRVNDIHVudGlsCisgIGFub3RoZXIga2V5IGlzIHByZXNzZWQuCisqIG5sIG1hcHBpbmcgbm8gbG9uZ2VyIG9jY3VyIG9uIG91dHB1dCAoYXMgc2hvdWxkIGJlKQorICBmaXhlZCBidWcgJ1xuJyBubyBjYXVzaW5nIGEgTEYuCisqIGZpeGVkIGJ1ZyB0aGF0IHJlc2V0IHRlcm1pbmFsIGNvbG9ycyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgdXNlIGNvbG9yCisgIG9yIG5vdC4KKyogQmV0dGVyIHN1cHBvcnQgZm9yIEFDUyAobm90IHF1aXRlIGNvbXBsZXRlKS4KKyogZml4ZWQgYnVnIGluIHd2bGluZSgpLgorKiBhZGRlZCBjdXJzX3NldCgpLgorKiBjaGFuZ2VkIGZyb20gc2lnbmFsKCkgdG8gc2lnYWN0aW9uKCkuCisqIHJlLWluY2x1ZGVkIHRoZSBjb250ZW50cyBvZiBpbXBvcnRhbnQucGF0Y2ggaW50byBzb3VyY2UuCisKKyMjIyMgbmN1cnNlcyAwLjMgLT4gbmN1cnNlcyAwLjQgIyMjIyBGZWIgMywgMTk5MyAjIyMjCisqIEFkZGl0aW9uIG9mIG1vcmUgS0VZXyogZGVmaW5pdGlvbnMuCisqIEFkZGl0aW9uIG9mIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisqIEFkZGl0aW9uIG9mIHNldmVyYWwgbWlzc2luZyBmdW5jdGlvbnMuCisqIE5vIG1vcmUgY3Jhc2hlcyBpZiBzY3JlZW4gc2l6ZSBpcyB1bmRlZmluZWQgKHVzZSBTSUdXSU5DSCBoYW5kbGVyKS4KKyogYWRkZWQgYSBoYW5kbGVyIHRvIGNsZWFudXAgYWZ0ZXIgU0lHU0VHViAoaG9wZWZ1bGx5IG5ldmVyIG5lZWRlZCkuCisqIGNoYW5nZWQgU1JDRElSIGZyb20gL2V0Yy90ZXJtIHRvIC91c3IvbGliL3Rlcm1pbmZvLgorKiByZW5hbWVkIGNvbXBpbGUvZHVtcCB0byB0aWMvdW50aWMuCisqIE5ldyBzY3JvbGxpbmcgY29kZS4KKyogZml4ZWQgYnVnIHRoYXQgcmV2ZXJzZWQgdGhlIHNlbnNlIG9mIG5sKCkgYW5kIG5vbmwoKS4KKworIyMjIyBuY3Vyc2VzIDAuMiAtPiBuY3Vyc2VzIDAuMyAjIyMjIEphbiAyMCwgMTk5MyAjIyMjCisqIG1vcmUgc3VwcG9ydCBmb3IgY29sb3IgYW5kIGdyYXBoaWNzIHNlZSB0ZXN0LyBmb3IgZXhhbXBsZXMuCisqIGZpeGVkIHZhcmlvdXMgZmlsZXMgdG8gYWxsb3cgY29ycmVjdCB1cGRhdGUgYWZ0ZXIgc2hlbGxpbmcgb3V0LgorKiBtb3JlIGZpeGVzIGZvciB1cGRhdGVzLgorKiBubyBtb3JlIGNvcmUgZHVtcHMgaWYgeW91IGRvbid0IGhhdmUgYSB0ZXJtaW5mbyBlbnRyeS4KKyogc3VwcG9ydCBmb3IgTElORVMgYW5kIENPTFVNTlMgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKiBzdXBwb3J0IGZvciBTSUdXSU5DSCBzaWduYWwuCisqIGFkZGVkIGEgaGFuZGxlciBmb3IgU0lHSU5UIGZvciBjbGVhbiBleGl0cy4KKworIyMjIyBuY3Vyc2VzIDAuMSAtPiBuY3Vyc2VzIDAuMiAjIyMjIEF1ZyAxNCwgMTk5MiAjIyMjCisqIHN1cHBvcnQgZm9yIGNvbG9yLgorKiBzdXBwb3J0IGZvciBQQyBncmFwaGljIGNoYXJhY3RlcnMuCisqIGxpYl90cmFjZS5jIHVwZGF0ZWQgdG8gdXNlIHN0ZGFyZy5oIGFuZCB2cHJpbnRmIHJvdXRpbmVzLgorKiBhZGRlZCBnZGMuYyAoR3JlYXQgRGlnaXRhbCBDbG9jaykgYXMgYW4gZXhhbXBsZSBvZiB1c2luZyBjb2xvci4KKworIyMjIyBuY3Vyc2VzIC0+IG5jdXJzZXMgMC4xICMjIyMgSnVsIDMxLCAxOTkyICMjIyMKKyogcmVwbGFjaW5nIHNndHR5IHN0dWZmIGJ5IHRlcm1pb3Mgc3R1ZmYuCisqIEFOU0lmaWNhdGlvbiBvZiBzb21lIGZ1bmN0aW9ucy4KKyogRGlzYWJsaW5nIGNvc3QgYW5hbHlzaXMgJ2NhdXNlIGl0J3MgaW5jb3JyZWN0LgorKiBBIHF1aWNrIGhhY2sgZm9yIGEgdGVybWluZm8gZW50cnkuCisKKy0tIHZpbGU6dHh0bW9kZToKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L1JFQURNRSBiL25jdXJzZXMtNS43L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJjMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvUkVBRE1FCkBAIC0wLDAgKzEsMjEwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFJFQURNRSx2IDEuMjMgMjAwNi8wNC8yMiAyMjoxOTozNyB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJUkVBRE1FIGZpbGUgZm9yIHRoZSBuY3Vyc2VzIHBhY2thZ2UKKworU2VlIHRoZSBmaWxlIEFOTk9VTkNFIGZvciBhIHN1bW1hcnkgb2YgbmN1cnNlcyBmZWF0dXJlcyBhbmQgcG9ydHMuCitTZWUgdGhlIGZpbGUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBidWlsZCBhbmQgaW5zdGFsbCBuY3Vyc2VzLgorU2VlIHRoZSBmaWxlIE5FV1MgZm9yIGEgcmVsZWFzZSBoaXN0b3J5IGFuZCBidWctZml4IG5vdGVzLgorU2VlIHRoZSBmaWxlIFRPLURPIGZvciB0aGluZ3MgdGhhdCBzdGlsbCBuZWVkIGRvaW5nLCBpbmNsdWRpbmcga25vd24gYnVncy4KKworQnJvd3NlIHRoZSBmaWxlIG1pc2MvbmN1cnNlcy1pbnRyby5odG1sIGZvciBuYXJyYXRpdmUgZGVzY3JpcHRpb25zIG9mIGhvdwordG8gdXNlIG5jdXJzZXMgYW5kIHRoZSBwYW5lbCwgbWVudSwgYW5kIGZvcm0gbGlicmFyaWVzLgorIAorQnJvd3NlIHRoZSBmaWxlIGRvYy9odG1sL2hhY2tndWlkZS5odG1sIGZvciBhIHRvdXIgb2YgdGhlIHBhY2thZ2UgaW50ZXJuYWxzLgorCitST0FETUFQIEFORCBQQUNLQUdFIE9WRVJWSUVXOgorCitZb3Ugc2hvdWxkIGJlIHJlYWRpbmcgdGhpcyBmaWxlIGluIGEgZGlyZWN0b3J5IGNhbGxlZDogIG5jdXJzZXMtZC5kLCB3aGVyZSBkLmQKK2lzIHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVyIChzZWUgdGhlIGRpc3QubWsgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBmb3IKK3RoYXQpLiAgVGhlcmUgc2hvdWxkIGJlIGEgbnVtYmVyIG9mIHN1YmRpcmVjdG9yaWVzLCBpbmNsdWRpbmcgYGMrKycsIGBmb3JtJywKK2BtYW4nLCBgbWVudScsIGBtaXNjJywgYG5jdXJzZXMnLCBgcGFuZWwnLCBgcHJvZ3MnLCBgdGVzdCcsICd0YWNrJyBhbmQgYEFkYTk1Jy4gCisoVGhlICd0YWNrJyBwcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5KS4KKworQSBmdWxsIGJ1aWxkL2luc3RhbGwgb2YgdGhpcyBwYWNrYWdlIHR5cGljYWxseSBpbnN0YWxscyBzZXZlcmFsIGxpYnJhcmllcywgYQoraGFuZGZ1bCBvZiB1dGlsaXRpZXMsIGFuZCBhIGRhdGFiYXNlIGhpZXJhcmNoeS4gIEhlcmUgaXMgYW4gaW52ZW50b3J5IG9mIHRoZQorcGllY2VzOgorCitUaGUgbGlicmFyaWVzIGFyZToKKworCWxpYm5jdXJzZXMuYSAgICAgICAobm9ybWFsKQorCWxpYm5jdXJzZXMuc28gICAgICAoc2hhcmVkKQorCWxpYm5jdXJzZXNfZy5hICAgICAoZGVidWcgYW5kIHRyYWNlIGNvZGUgZW5hYmxlZCkKKwlsaWJuY3Vyc2VzX3AuYSAgICAgKHByb2ZpbGluZyBlbmFibGVkKQorCisJbGlicGFuZWwuYSAgICAgICAgIChub3JtYWwpCisJbGlicGFuZWwuc28gICAgICAgIChzaGFyZWQpCisJbGlicGFuZWxfZy5hICAgICAgIChkZWJ1ZyBhbmQgdHJhY2UgY29kZSBlbmFibGVkKQorCisJbGlibWVudS5hICAgICAgICAgIChub3JtYWwpCisJbGlibWVudS5zbyAgICAgICAgIChzaGFyZWQpCisJbGlibWVudV9nLmEgICAgICAgIChkZWJ1ZyBlbmFibGVkKQorCisJbGliZm9ybS5hICAgICAgICAgIChub3JtYWwpCisJbGliZm9ybS5zbyAgICAgICAgIChzaGFyZWQpCisJbGliZm9ybV9nLmEgICAgICAgIChkZWJ1ZyBlbmFibGVkKQorCitJZiB5b3UgY29uZmlndXJlIHVzaW5nIHRoZSAtLWVuYWJsZS13aWRlYyBvcHRpb24sIGEgInciIGlzIGFwcGVuZGVkIHRvIHRoZQorbGlicmFyeSBuYW1lcyAoZS5nLiwgbGlibmN1cnNlc3cuYSksIGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcmllcyBzdXBwb3J0Cit3aWRlLWNoYXJhY3RlcnMsIGUuZy4sIHZpYSBhIFVURi04IGxvY2FsZS4gIFRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlcworYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgbm9uLXdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb247IHdpZGUtY2hhcmFjdGVyCitmZWF0dXJlcyBhcmUgcHJvdmlkZWQgYnkgaWZkZWYncyBpbiB0aGUgaGVhZGVyIGZpbGVzLiAgVGhlIHdpZGUtY2hhcmFjdGVyCitsaWJyYXJ5IGludGVyZmFjZXMgYXJlIG5vdCBiaW5hcnktY29tcGF0aWJsZSB3aXRoIHRoZSBub24td2lkZS1jaGFyYWN0ZXIKK3ZlcnNpb24uCisKK1RoZSBuY3Vyc2VzIGxpYnJhcmllcyBpbXBsZW1lbnQgdGhlIGN1cnNlcyBBUEkuICBUaGUgcGFuZWwsIG1lbnUgYW5kIGZvcm1zCitsaWJyYXJpZXMgaW1wbGVtZW50IGNsb25lcyBvZiB0aGUgU1ZyNCBwYW5lbCwgbWVudSBhbmQgZm9ybXMgQVBJcy4gIFRoZSBzb3VyY2UKK2NvZGUgZm9yIHRoZXNlIGxpdmVzIGluIHRoZSBgbmN1cnNlcycsIGBwYW5lbCcsIGBtZW51JywgYW5kIGBmb3JtJyBkaXJlY3RvcmllcworcmVzcGVjdGl2ZWx5LgorCitJbiB0aGUgYGMrKycgZGlyZWN0b3J5LCB5b3UnbGwgZmluZCBjb2RlIHRoYXQgZGVmaW5lcyBhbiBpbnRlcmZhY2UgdG8gdGhlCitjdXJzZXMsIGZvcm1zLCBtZW51cyBhbmQgcGFuZWxzIGxpYnJhcnkgcGFja2FnZWQgYXMgQysrIGNsYXNzZXMsIGFuZCBhIGRlbW8gcHJvZ3JhbSBpbiBDKysKK3RvIHRlc3QgaXQuICBUaGVzZSBjbGFzcyBkZWZpbml0aW9uIG1vZHVsZXMgYXJlIG5vdCBpbnN0YWxsZWQgYnkgdGhlICdtYWtlCitpbnN0YWxsLmxpYnMnIHJ1bGUgYXMgbGlibmN1cnNlcysrLgorCitJbiB0aGUgYEFkYTk1JyBkaXJlY3RvcnksIHlvdSdsbCBmaW5kIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gZm9yIGFuCitBZGE5NSBiaW5kaW5nIG9mIHRoZSBjdXJzZXMgQVBJLCB0byBiZSB1c2VkIHdpdGggdGhlIEdOQVQgY29tcGlsZXIuCitUaGlzIGJpbmRpbmcgaXMgYnVpbHQgYnkgYSBub3JtYWwgdG9wLWxldmVsIGBtYWtlJyBpZiBjb25maWd1cmUgZGV0ZWN0cworYW4gdXNhYmxlIHZlcnNpb24gb2YgR05BVCAoMy4xMSBvciBhYm92ZSkuIEl0IGlzIG5vdCBpbnN0YWxsZWQgYXV0b21hdGljYWxseS4KK1NlZSB0aGUgQWRhOTUgZGlyZWN0b3J5IGZvciBtb3JlIGJ1aWxkIGFuZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGFuZAorZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIGJpbmRpbmcuCisKK1RvIGRvIGl0cyBqb2IsIHRoZSBuY3Vyc2VzIGNvZGUgbmVlZHMgeW91ciB0ZXJtaW5hbCB0eXBlIHRvIGJlIHNldCBpbiB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIFRFUk0gKG5vcm1hbGx5IHNldCBieSB5b3VyIE9TOyB1bmRlciBVTklYLCBnZXR0eSgxKQordHlwaWNhbGx5IGRvZXMgdGhpcywgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgaXQgaW4geW91ciAucHJvZmlsZSk7IGFuZCwgaXQgbmVlZHMgYQorZGF0YWJhc2Ugb2YgdGVybWluYWwgZGVzY3JpcHRpb25zIGluIHdoaWNoIHRvIGxvb2sgdXAgeW91ciB0ZXJtaW5hbCB0eXBlJ3MKK2NhcGFiaWxpdGllcy4KKworSW4gb2xkZXIgKFY3L0JTRCkgdmVyc2lvbnMgb2YgY3Vyc2VzLCB0aGUgZGF0YWJhc2Ugd2FzIGEgZmxhdCB0ZXh0IGZpbGUsCisvZXRjL3Rlcm1jYXA7IGluIG5ld2VyIChVU0cvVVNMKSB2ZXJzaW9ucywgdGhlIGRhdGFiYXNlIGlzIGEgaGllcmFyY2h5IG9mCitmYXN0LWxvYWRpbmcgYmluYXJ5IGRlc2NyaXB0aW9uIGJsb2NrcyB1bmRlciAvdXNyL2xpYi90ZXJtaW5mby4gIFRoZXNlIGJpbmFyeQorYmxvY2tzIGFyZSBjb21waWxlZCBmcm9tIGFuIGltcHJvdmVkIGVkaXRhYmxlIHRleHQgcmVwcmVzZW50YXRpb24gY2FsbGVkCitgdGVybWluZm8nIGZvcm1hdCAoZG9jdW1lbnRlZCBpbiBtYW4vdGVybWluZm8uNSkuICBUaGUgbmN1cnNlcyBsaWJyYXJ5IGNhbiB1c2UKK2VpdGhlciAvZXRjL3Rlcm1jYXAgb3IgdGhlIGNvbXBpbGVkIGJpbmFyeSB0ZXJtaW5mbyBibG9ja3MsIGJ1dCBwcmVmZXJzIHRoZQorc2Vjb25kIGZvcm0uCisKK0luIHRoZSBgbWlzYycgZGlyZWN0b3J5LCB0aGVyZSBpcyBhIHRleHQgZmlsZSB0ZXJtaW5mby5zcmMsIGluIGVkaXRhYmxlCit0ZXJtaW5mbyBmb3JtYXQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0ZXJtaW5mbyBiaW5hcmllcyAodGhhdCdzCit3aGF0IG1ha2UgaW5zdGFsbC5kYXRhIGRvZXMpLiAgSWYgdGhlIHBhY2thZ2Ugd2FzIGJ1aWx0IHdpdGggdGhlCistLWVuYWJsZS10ZXJtY2FwIG9wdGlvbiBlbmFibGVkLCBhbmQgdGhlIG5jdXJzZXMgbGlicmFyeSBjYW5ub3QgZmluZCBhIHRlcm1pbmZvCitkZXNjcmlwdGlvbiBmb3IgeW91ciB0ZXJtaW5hbCwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIHRlcm1jYXAgZmlsZSBzdXBwbGllZAord2l0aCB5b3VyIHN5c3RlbSAod2hpY2ggdGhlIG5jdXJzZXMgcGFja2FnZSBpbnN0YWxsYXRpb24gbGVhdmVzIHN0cmljdGx5CithbG9uZSkuCisKK1RoZSB1dGlsaXRpZXMgYXJlIGFzIGZvbGxvd3M6CisKKwl0aWMgICAgICAgICAgICAgLS0gdGVybWluZm8gc291cmNlIHRvIGJpbmFyeSBjb21waWxlcgorCWluZm9jbXAgICAgICAgICAtLSB0ZXJtaW5mbyBiaW5hcnkgdG8gc291cmNlIGRlY29tcGlsZXIvY29tcGFyYXRvcgorCWNsZWFyICAgICAgICAgICAtLSBlbWl0cyBjbGVhci1zY3JlZW4gZm9yIGN1cnJlbnQgdGVybWluYWwKKwl0cHV0ICAgICAgICAgICAgLS0gc2hlbGwtc2NyaXB0IGFjY2VzcyB0byB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMuCisJdG9lCQktLSB0YWJsZSBvZiBlbnRyaWVzIHV0aWxpdHkKKwl0c2V0ICAgICAgICAgICAgLS0gdGVybWluYWwtaW5pdGlhbGl6YXRpb24gdXRpbGl0eQorCitUaGUgZmlyc3QgdHdvICh0aWMgYW5kIGluZm9jbXApIGFyZSB1c2VkIGZvciBtYW5pcHVsYXRpbmcgdGVybWluZm8KK2Rlc2NyaXB0aW9uczsgdGhlIG5leHQgdHdvIChjbGVhciBhbmQgdHB1dCkgYXJlIGZvciB1c2UgaW4gc2hlbGwgc2NyaXB0cy4gIFRoZQorbGFzdCAodHNldCkgaXMgcHJvdmlkZWQgZm9yIDQuNEJTRCBjb21wYXRpYmlsaXR5LiAgVGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgb2YKK3RoZXNlIGxpdmVzIGluIHRoZSBgcHJvZ3MnIGRpcmVjdG9yeS4KKworRGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBmb3IgYWxsIGxpYnJhcmllcyBhbmQgdXRpbGl0aWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUKK2BtYW4nIGFuZCBgZG9jJyBkaXJlY3Rvcmllcy4gIEFuIEhUTUwgaW50cm9kdWN0aW9uIHRvIG5jdXJzZXMsIHBhbmVscywgYW5kCittZW51cyBwcm9ncmFtbWluZyBsaXZlcyBpbiB0aGUgYGRvYy9odG1sJyBkaXJlY3RvcnkuICBNYW5wYWdlcyBpbiBIVE1MIGZvcm1hdAorYXJlIHVuZGVyIGBkb2MvaHRtbC9tYW4nLgorCitUaGUgYHRlc3QnIGRpcmVjdG9yeSBjb250YWlucyBwcm9ncmFtcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHZlcmlmeSBvcgorZGVtb25zdHJhdGUgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgbmN1cnNlcyBsaWJyYXJpZXMuICBTZWUgdGVzdC9SRUFETUUgZm9yCitkZXNjcmlwdGlvbnMgb2YgdGhlc2UgcHJvZ3JhbXMuICBOb3RhYmx5LCB0aGUgYG5jdXJzZXMnIHV0aWxpdHkgaXMgZGVzaWduZWQgdG8KK2hlbHAgeW91IHN5c3RlbWF0aWNhbGx5IGV4ZXJjaXNlIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucy4KKworQVVUSE9SUzoKKworUGF2ZWwgQ3VydGlzOiAKKwl3cm90ZSB0aGUgb3JpZ2luYWwgbmN1cnNlcworCitaZXlkIE0uIEJlbi1IYWxpbToKKwlwb3J0IG9mIG9yaWdpbmFsIHRvIExpbnV4IGFuZCBtYW55IGVuaGFuY2VtZW50cy4KKworVGhvbWFzIERpY2tleSAobWFpbnRhaW5lciBmb3IgMS45LjlnIHRocm91Z2ggNC4xLCByZXN1bWluZyB3aXRoIEZTRidzIDUuMCk6CisJY29uZmlndXJhdGlvbiBzY3JpcHRzLCBwb3J0aW5nLCBtb2RzIHRvIGFkaGVyZSB0byBYU0kgQ3Vyc2VzIGluIHRoZQorCWFyZWFzIG9mIGJhY2tncm91bmQgY29sb3IsIHRlcm1pbmFsIG1vZGVzLiAgQWxzbyBtZW1vcnkgbGVhayB0ZXN0aW5nLAorCXRoZSB3cmVzaXplLCBkZWZhdWx0IGNvbG9ycyBhbmQga2V5IGRlZmluaXRpb24gZXh0ZW5zaW9ucyBhbmQgbnVtZXJvdXMKKwlidWcgZml4ZXMgKG1vcmUgdGhhbiBoYWxmIG9mIHRob3NlIGVudW1lcmF0ZWQgaW4gTkVXUyBiZWdpbm5pbmcgd2l0aAorCXRoZSBpbnRlcm5hbCByZWxlYXNlIDEuOC45KS4KKworRmxvcmlhbiBMYSBSb2NoZSAob2ZmaWNpYWwgbWFpbnRhaW5lciBmb3IgRlNGJ3MgbmN1cnNlcyA0LjIpCisJQmVnaW5uaW5nIHdpdGggcmVsZWFzZSA0LjIsIG5jdXJzZXMgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlULXN0eWxlCisJbGljZW5zZS4KKworRXJpYyBTLiBSYXltb25kOgorCXRoZSBtYW4gcGFnZXMsIGluZm9jbXAoMSksIHRwdXQoMSksIGNsZWFyKDEpLCBjYXB0b2luZm8oMSksIHRzZXQoMSksCisJdG9lKDEpLCBtb3N0IG9mIHRpYygxKSwgdHJhY2UgbGV2ZWxzLCB0aGUgSFRNTCBpbnRybywgd2dldG5zdHIoKSBhbmQKKwltYW55IG90aGVyIGVudHJ5IHBvaW50cywgdGhlIGN1cnNvci1tb3ZlbWVudCBvcHRpbWl6YXRpb24sIHRoZQorCXNjcm9sbC1wYWNrIG9wdGltaXplciBmb3IgdmVydGljYWwgbW90aW9ucywgdGhlIG1vdXNlIGludGVyZmFjZSBhbmQKKwl4dGVybSBtb3VzZSBzdXBwb3J0LCBhbmQgdGhlIG5jdXJzZXMgdGVzdCBwcm9ncmFtLgorCitKdWVyZ2VuIFBmZWlmZXIKKwlUaGUgbWVudSBhbmQgZm9ybSBsaWJyYXJpZXMsIEMrKyBiaW5kaW5ncyBmb3IgbmN1cnNlcywgbWVudXMsIGZvcm1zIGFuZAorCXBhbmVscywgYXMgd2VsbCBhcyB0aGUgQWRhOTUgYmluZGluZy4gIE9uZ29pbmcgc3VwcG9ydCBmb3IgcGFuZWwuCisKK0NPTlRSSUJVVE9SUzoKKworQWxleGFuZGVyIFYuIEx1a3lhbm92CisJZm9yIG51bWVyb3VzIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gdGhlIG9wdGltaXphdGlvbiBsb2dpYy4KKworRGF2aWQgTWFjS2VuemllCisJZm9yIGZpcnN0LWNsYXNzIGJ1Zy1jaGFzaW5nIGFuZCBtZXRob2RpY2FsIHRlc3RpbmcuCisKK1Jvc3MgUmlkZ2UKKwlmb3IgdGhlIGNvZGUgdGhhdCBoYWNrcyB0ZXJtY2FwIHBhcmFtZXRlcml6ZWQgc3RyaW5ncyBpbnRvIHRlcm1pbmZvLgorCitXYXJyZW4gVHVja2VyIGFuZCBHZXJoYXJkIEZ1ZXJua3JhbnosCisJZm9yIHdyaXRpbmcgYW5kIHNlbmRpbmcgdGhlIHBhbmVsIGxpYnJhcnkuCisKK0hlbGxtdXRoIE1pY2hhZWxpcywKKwlmb3IgbWFueSBwYXRjaGVzIGFuZCB0ZXN0aW5nIHRoZSBvcHRpbWl6YXRpb24gY29kZS4KKworRXJpYyBOZXd0b24sIFVscmljaCBEcmVwcGVyLCBhbmQgQW5hdG9seSBJdmFzeXVrOgorCXRoZSBDKysgY29kZS4KKworSm9uYXRoYW4gUm9zcywKKwlmb3IgbGVzc29ucyBpbiB1c2luZyBzZWQuCisKK0tlaXRoIEJvc3RpYyAobWFpbnRhaW5lciBvZiA0LjRCU0QgY3Vyc2VzKQorCWZvciBoZWxwLCBjcml0aWNpc20sIGNvbW1lbnRzLCBidWctZmluZGluZywgYW5kIGJlaW5nIHdpbGxpbmcgdG8KKwlkZWVwLXNpeCBCU0QgY3Vyc2VzIGZvciB0aGlzIG9uZSB3aGVuIGl0IGdyZXcgdXAuCisKK1JpY2hhcmQgU3RhbGxtYW4sCisJZm9yIGhpcyBjb21taXRtZW50IHRvIG1ha2luZyBuY3Vyc2VzIGZyZWUgc29mdHdhcmUuCisKK0NvdW50bGVzcyBvdGhlciBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCBieSByZXBvcnRpbmcgYnVncywgc2VuZGluZyBmaXhlcywKK3N1Z2dlc3RpbmcgaW1wcm92ZW1lbnRzLCBhbmQgZ2VuZXJhbGx5IHdoaW5pbmcgYWJvdXQgbmN1cnNlcyA6LSkKKworQlVHUzoKKwlTZWUgdGhlIElOU1RBTEwgZmlsZSBmb3IgYnVnIGFuZCBkZXZlbG9wZXItbGlzdCBhZGRyZXNzZXMuCisJVGhlIEhhY2tlcidzIEd1aWRlIGluIHRoZSBkb2MgZGlyZWN0b3J5IGluY2x1ZGVzIHNvbWUgZ3VpZGVsaW5lcworCW9uIGhvdyB0byByZXBvcnQgYnVncyBpbiB3YXlzIHRoYXQgd2lsbCBnZXQgdGhlbSBmaXhlZCBtb3N0IHF1aWNrbHkuCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9SRUFETUUuZW14IGIvbmN1cnNlcy01LjcvUkVBRE1FLmVteApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzA0ODE2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvUkVBRE1FLmVteApAQCAtMCwwICsxLDcyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFJFQURNRS5lbXgsdiAxLjggMjAwNi8wNC8yMiAyMjoxOTozNyB0b20gRXhwICQKKy0tIEF1dGhvcjogVGhvbWFzIERpY2tleQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGJ1aWxkIG5jdXJzZXMgb24gT1MvMiBpbiB0aGUgRU1YIGVudmlyb25tZW50LiAgQnV0IHlvdSBtdXN0IGJ1aWxkIGFuZAorYWNxdWlyZSB0b29scy4gIE5vdCBhbGwgb2YgdGhlIHRvb2xzIGRpc3RyaWJ1dGVkIHdpdGggRU1YIHdvcmsgcHJvcGVybHksIGFuZAorc29tZSBhZGRpdGlvbmFsIG9uZXMgYXJlIHJlcXVpcmVkLgorCitGaXJzdCwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZGlzdHJpYnV0ZWQgd2l0aCBuY3Vyc2VzIHdpbGwgbm90IHJ1biBhcy1pcyBpbiBFTVguIAorWW91IGNhbiBnZW5lcmF0ZSBhIG5ldyBvbmUgaWYgeW91IGhhdmUgYXV0b2NvbmYgYnVpbHQgZm9yIEVNWC4gIFlvdSB3aWxsIG5lZWQKK3RoZSBFTVggZGV2ZWxvcG1lbnQgdG9vbHMsIG9mIGNvdXJzZS4gIEdldCB0aGVzZSBwcm9ncmFtcyB0byBzdGFydDoKKworCUdOVSBtNCBwcm9ncmFtICh2ZXJzaW9uIDEuNCkKKwlHTlUgYXV0b2NvbmYgKHZlcnNpb24gMi4xMykuCisJR05VIHBhdGNoICh2ZXJzaW9uIDIuNSkKKworQXBwbHkgdGhlIGF1dG9jb25mIHBhdGNoZXMgZnJvbQorCisJaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mCisJZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYKKworVGhlc2UgYXJlIG9yZGVyZWQgYnkgZGF0ZToKKworCWF1dG9jb25mLTIuMTMtMjAwMzA5MjcucGF0Y2guZ3oKKwlhdXRvY29uZi0yLjEzLTIwMDMwOTI3LWVteC5wYXRjaC5negorCitJIGJ1aWx0IG15IGRldmVsb3BtZW50IGVudmlyb25tZW50IGZvciBuY3Vyc2VzIHVzaW5nIEVNWCAwLjljIGF0IHRoZSBlbmQgb2YKKzE5OTcuICBNdWNoIG9mIHRoZSBFTVggcGF0Y2ggZm9yIGF1dG9jb25mIHdhcyBkb25lIG9yaWdpbmFsbHkgYnkgSi5KLkcuUmlwb2xsLAordXNpbmcgYSBzaW1pbGFyIGVudmlyb25tZW50IChoZSBwcmVmZXJzIHVzaW5nIHRoZSAnYXNoJyBzaGVsbCkuICBOZXdlciB2ZXJzaW9ucworbWF5IGZpeCB0aGVzZSBwcm9ibGVtczoKKworCSsgVGhlIHBka3NoIHByb2dyYW0gZGlzdHJpYnV0ZWQgYXQgSG9iYmVzIGFuZCBMZW8gKHdpdGggYSAxOTk2IGRhdGUpIGlzCisJICBkZWZlY3RpdmUuICBJdCBkb2VzIG5vdCBwcm9jZXNzICJoZXJlIGRvY3VtZW50cyIgY29ycmVjdGx5ICh3aGljaAorCSAgcmVuZGVycyBpdCB1c2VsZXNzIGZvciBydW5uaW5nIHRoZSBhdXRvY29uZiBzY3JpcHQpLiAgSSBidWlsdCBteSBvd24KKwkgIGNvcHkgb2YgcGRrc2ggNS4yLjEzLCB3aGljaCBkb2VzIGhhdmUgdGhlIGJ1ZyBjb3JyZWN0ZWQgKGRvY3VtZW50ZWQKKwkgIGluIHRoZSBjaGFuZ2UgbG9nIGZvciBwZGtzaCkuCisKKwkrIEkgYWxzbyBidWlsdCBmcm9tIHNvdXJjZXMgKGJlY2F1c2UgdGhlIGRpc3RyaWJ1dGVkIGJpbmFyaWVzIGRpZCBub3QKKwkgIHdvcmspIHRoZSBjbXAsIGRpZmYgcHJvZ3JhbXMuCisJICAKKwkgIE90aGVyIHJlcXVpcmVkIHV0aWxpdGllcyBzdWNoIGFzIGFyLCBjYXQsIGNobW9kLCBjcCwgZ2F3aywgZ3JlcCwgbXYsCisJICBscywgcm0sIG1rZGlyLCBzZWQsIHNvcnQgYW5kIHRyIHdvcmtlZC4KKworT25jZSB5b3UgaGF2ZSBhdXRvY29uZiBwYXRjaGVkIGFuZCBpbnN0YWxsZWQsIHJ1biAnYXV0b2NvbmYnIGZyb20gdGhlIHRvcC1sZXZlbAorZGlyZWN0b3J5IG9mIG5jdXJzZXMgdG8gZ2VuZXJhdGUgdGhlIEVNWC1zcGVjaWZpYyBjb25maWd1cmUgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvVE8tRE8gYi9uY3Vyc2VzLTUuNy9UTy1ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTQ3ZDAyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvVE8tRE8KQEAgLTAsMCArMSwyMTIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogVE8tRE8sdiAxLjUxIDIwMDgvMTAvMTEgMTk6MjI6MjcgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NIT1JULVRFUk0gVE8tRE8gSVRFTVM6CisKK0tub3duIFByb2JsZW1zOgorCisrIGxpYnRvb2wgZG9lcyBub3Qgd29yayB3aXRoIEdOQVQuCisKKysgVGhlIHNjcmVlbiBvcHRpbWl6YXRpb24gaGFzIGJlZW4gdGVzdGVkIG9ubHkgaW4gYW4gYWQgaG9jIG1hbm5lci4gIFdlIHNob3VsZAorICBkZXZlbG9wIGEgZ29vZCBzZXQgb2YgcmVncmVzc2lvbiB0ZXN0cyB0byBjb3ZlciBsaWJfZG91cGRhdGUuYyBhbmQKKyAgbGliX212Y3VyLmMuCisKKysgTWFnaWMgY29va2llIHN1cHBvcnQgKGZvciBub256ZXJvIHhtYyB2YWx1ZXMpIGRvZXMgbm90IHdvcmssIHNpbmNlIHRoZSBsb2dpYworICBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCByZWZyZXNoLiAgQWxzbywgdGhlIGluaXRpYWwgb3B0aW1pemUgZG9lcyBub3QKKyAgYWRqdXN0IHRoZSBjdXJyZW50IGxvY2F0aW9uIHdoZW4gYSBjb29raWUgaXMgZW1pdHRlZC4KKworKyBTY3JvbGxpbmcgb3B0aW1pemF0aW9uIGhhcyBob2xlczogIGZvciBleGFtcGxlLCBpdCBmb3JjZXMgcmVwYWludHMgb2YgdGhlCisgIHNjcmVlbiBiZXR3ZWVuIGNhbGxzIHRvIHJlZnJlc2goKS4KKworKyBTVnI0IHVzZXMgc2xpZ2h0bHkgZGlmZmVyZW50IHJ1bGVzIGZvciBkZXRlcm1pbmluZyB3aGVuIHNvZnRrZXlzIGFyZSBzaG93bi4gCisgIEZvciBleGFtcGxlLCB0aGV5IGFyZSBpbml0aWFsbHkgZGlzcGxheWVkIChiZWZvcmUgdGhlIG5jdXJzZXMgJ2UnIHRlc3QKKyAgYWN0aXZhdGVzIHRoZW0pLCBhbmQgYSB0b3VjaHdpbiBjYW4gYXBwYXJlbnRseSBhbHNvIGZvcmNlIHRoZW0gdG8gYmUKKyAgZGlzcGxheWVkLgorCisrIFRoZSBjb2RlIGRlcGFydHMgZnJvbSBwZXJmZWN0IDgtYml0IGNsZWFubmVzcyBpbiBvbmUgcmVzcGVjdDsgeW91IGNhbm5vdAorICBzcGVjaWZ5IGEgY2hhcmFjdGVyIFwyMDAgYXMgcGFydCBvZiBhIGNhcGFiaWxpdHkgc3RyaW5nLCBiZWNhdXNlIHRoZQorICB0ZXJtaW5mbyBsaWJyYXJ5IGludGVycHJldHMgXDIwMCBhcyBhIHJlcXVlc3QgdG8gZW1iZWQgTlVMIChcMDAwKSBhdCB0aGF0CisgIHBvaW50LiAgVGhpcyBpcyBhIGxlZ2FjeSB0ZXJtaW5mbyBwcm9wZXJ0eSB3ZSBjYW4ndCBtZXNzIHdpdGguCisKKysgVGhlIHdpbmRvdyBjbGFzc2VzIGRlZmluZWQgaW4gdGhlIGMrKyBzdWJkaXJlY3RvcnkgbmVlZCBkb2N1bWVudGF0aW9uLiAgU29tZQorICBDKysgcHJvZ3JhbW1lciBjb3VsZCBlYXJuIGEgbG90IG9mIGdvb2Qga2FybWEgYnkgZG9pbmcgdGhpcy4uLgorCisrIHZpZF9hdHRyKCkgc2hvdWxkIHN1cHBvcnQgdGhlIHNldF9hX2F0dHJpYnV0ZXMgKHNncjEpIHN0cmluZywgYnV0IGRvZXMgbm90LiAKKyAgVGhlcmUgYXBwZWFyIHRvIGJlIG5vIHRlcm1pbmFscyB0aGF0IHJlcXVpcmUgdGhhdCBmdW5jdGlvbmFsaXR5LgorCisrIHRoZSBjb25maWd1cmUgLS1kaXNhYmxlLWV4dC1mdW5jcyBvcHRpb24gZG9lcyBub3Qgd29yayBmb3IgQWRhOTUgdHJlZS4KKworKyB0aGUgLS13aXRoLXB0aHJlYWQgY29uZmlndXJhdGlvbiBidWlsZHMgZm9yIEN5Z3dpbiwgYnV0IGRvZXMgbm90IHdvcmsKKyAgcHJvcGVybHkgKHRlc3Qvd29ybS5jIHNob3dzIGFsbCBvZiB0aGUgd29ybXMgaW4gdGhlIHNhbWUgbG9jYXRpb24pLgorCisrIHRoZSAtLWVuYWJsZS1ycGF0aCBjb25maWd1cmUgb3B0aW9uIGJ1aWxkcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcGxhdGZvcm1zOworICBob3dldmVyIGNvbWJpbmluZyBpdCB3aXRoIC0td2l0aC10aWNsaWIgYW5kIC0td2l0aC10ZXJtbGliIGRvZXMgbm90IGFsd2F5cworICBwcm9kdWNlIGxpYnJhcmllcyB0aGF0IGNhbiBiZSBydW4gd2l0aG91dCBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAgQnVpbGRpbmcgdGhvc2Ugd2l0aCBsaWJ0b29sIGRvZXMgbm90IHdvcmsgZWl0aGVyLiAgKFRoaXMgaXMgYSBwcm9ibGVtIHdpdGgKKyAgdGhlIEJTRCBwbGF0Zm9ybXMpLgorCitQb3J0YWJpbGl0eSAob3IgbGFjayB0aGVyZW9mKToKKworKyBVc2VycyBvZiBvbGRlciBTeXN0ZW0gViBVTklYZXMgKGJ1dCBub3QgU29sYXJpcywgYW5kIHByb2JhYmx5IG5vdCBTVnI0KSBtYXkKKyAgdHJpcCBvdmVyIGEga25vd24gcHJvYmxlbSB3aXRoIHRoZSBzaWduYWwtaGFuZGxpbmcgY29kZSB3aGljaCBjYXVzZXMgYWJydXB0CisgIHRlcm1pbmF0aW9uIG9mIG5jdXJzZXMgYXBwbGljYXRpb25zIGZvbGxvd2luZyByZXN1bWUgZnJvbSBhIF5aIHN1c3BlbmQgKHRoaXMKKyAgcHJvYmxlbSB3YXMgZmlyc3Qgc2VlbiBydW5uaW5nIGx5bngpLiAgWW91IHdpbGwgbm90IHNlZSB0aGlzIHByb2JsZW0gaWYgeW91CisgIGFyZSBydW5uaW5nIExpbnV4IG9yIG9uZSBvZiB0aGUgNC40QlNEIGRlcml2YXRpdmVzIGxpa2UgRnJlZUJTRCwgTmV0QlNELCBvcgorICBCU0RJLiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgYW5hbHlzaXMgaW4gdGhlIGhlYWRlciBjb21tZW50IG9mCisgIG5jdXJzZXMvdHR5L2xpYl90c3RwLmMgLgorCisrIEluIHRoZW9yeSwgdndwcmludHcgYW5kIHZ3c2NhbmYgYXJlIHN1cHBvc2VkIHRvIHVzZSB0aGUgb2xkZXIgdmFyYXJncy5oCisgIGludGVyZmFjZSBmb3IgaGFuZGxpbmcgdmFyaWFkaWMgYXJndW1lbnQgbGlzdHMgKGFuZCBhcmUgZGVwcmVjYXRlZCBieSBYL09wZW4KKyAgZm9yIHRoYXQgcmVhc29uKS4gIExpbnV4IGRvZXNuJ3QgaGF2ZSB2YXJhcmdzLmgsIGl0IGhhcyB0aGUgbmV3ZXIKKyAgWC9PcGVuLXN0YW5kYXJkIHN0ZGFyZ3MuaCBlcXVpdmFsZW50LiAgU28gdGhlc2UgZnVuY3Rpb25zIHVzZSBzdGRhcmdzCisgIGluc3RlYWQuICBUaGlzIGlzIHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbSB1bmxlc3MgeW91J3JlIGJ1aWxkaW5nIG5jdXJzZXMgb24KKyAgYSBTeXN0ZW0gViBvbGQgZW5vdWdoIHRvIG9ubHkgaGF2ZSB2YXJhcmdzLmguICAoU29sYXJpcyAyLjUuMSB1c2VkIHRoZQorICBzdGRhcmcuaCBiaW5kaW5nIGFzIHdlbGwpLgorCisrIElmIHlvdSdyZSB1c2luZyBhIEJTRCBlYXJsaWVyIHRoYW4gNC40QlNELCBvciBhIExpbnV4IG9sZCBlbm91Z2ggbm90IHRvIGhhdmUKKyAgYSBuYXRpdmUgdnNzY2FuZigzKSBpbiBpdHMgbGlicmFyeSwgdndzY2FudygpIHdpbGwgbm90IHdvcmsuICBZb3UgbG9zZS4gIChJdAorICBzaG91bGQgd29yayBvbiBhbnkgU3lzdGVtIFYsIGhvd2V2ZXIpLiAgSWYgeW91IHdhbnQgdG8gZml4IHRoaXMsIGFkZCBhbgorICBpbXBsZW1lbnRhdGlvbiB0byBuY3Vyc2VzL3Zzc2NhbmYuYy4KKworKyBUaGUgQysrIGJpbmRpbmcgZmFpbHMgdG8gYnVpbGQgd2l0aCBhIGZldyBDKysgY29tcGlsZXJzLgorCisrIHRlcm1pbmZvLjUgZG9lcyBub3QgZm9ybWF0IHdpdGggdGhlIFN1bk9TIChhbmQgbW9zdCBvdGhlciBwbGF0Zm9ybSdzKSB0YmwKKyAgdXRpbGl0eSBiZWNhdXNlIGl0IHJlbGllcyBvbiBhIGRpdmVyc2lvbiBmb3IgZWFjaCB0YWJsZSBlbnRyeS4gIEdldCB0aGUKKyAgZ3JvZmYgcGFja2FnZS4KKworVW50ZXN0ZWQgZmVhdHVyZXM6CisKKysgVGhlIGNvZGUgZm9yIHRoZSBIUCBjb2xvciBtb2RlbCB1c2luZyBzZXRfY29sb3JfcGFpciBpcyB1bnRlc3RlZC4KKworKyBUaGUgY29kZSBmb3IgaGFuZGxpbmcgc29mdCBsYWJlbHMgb24gYSB0ZXJtaW5hbCB0eXBlIHdpdGggYnVpbHQtaW4gc3VwcG9ydAorICBmb3IgdGhlbSAobnVtX2xhYmVscyA+IDAsIGxhYmVsX2hlaWdodCwgbGFiZWxfd2lkdGgsIGxhYmVsX2Zvcm1hdCwgbGFiZWxfb2ZmLAorICBsYWJlbF9vbiwgcGxhYl9ub3JtLCBsYWJfZiopIGhhcyBub3QgYmVlbiB0ZXN0ZWQuICBUaGUgbGFiZWxfZm9ybWF0IGFuZAorICBsYWJfZiogY2FwYWJpbGl0aWVzIGFyZW4ndCBwcmVzZW50bHkgdXNlZC4KKworTE9OR0VSLVRFUk0gVE8tRE8gSVRFTVM6CisKKzEuIEV4dGVuZGVkIENPU0UgY29uZm9ybWFuY2UKKworVGhlcmUgaXMgYW4gWFBHNCBzdGFuZGFyZCByZWxlYXNlZCBpbiAxOTk2IHdoaWNoIGRlc2NyaWJlcyBhIHN1cGVyc2V0CitvZiB0aGUgU1ZyNCBBUEkuICBUaGUgbGlicmFyeSBpcyBCQVNFIGNvbmZvcm1hbnQgd2l0aCB0aGlzIHN0YW5kYXJkLgorV2Ugd291bGQgbGlrZSB0byBtYWtlIG5jdXJzZXMgZnVsbHkgY29uZm9ybWFudCBhdCB0aGUgRVhURU5ERUQgbGV2ZWwKK3N1cHBvcnRpbmcgaW50ZXJuYXRpb25hbGl6YXRpb24uCisKKzIuIERPUyBwb3J0CisKK09ubHkgYSBmZXcgb2YgdGhlIGZpbGVzIGluIHRoZSBsaWJyYXJ5IGRlcGVuZCBvbiB0aGUgdGVybWluZm8gZm9ybWF0LgorSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGZ1cnRoZXIga2VybmVsaXplIHRoZSBwYWNrYWdlLCB0aGVuIHJld3JpdGUgCithIHNtYWxsIG51bWJlciBvZiBjb3JlIGZpbGVzIHRvIHByb2R1Y2UgYSBmdW5jdGlvbmFsbHktY29tcGF0aWJsZQorcG9ydCB0aGF0IHdvdWxkIGRvIHVwZGF0ZXMgdG8gYSBtZW1vcnktbWFwcGVkIHNjcmVlbiBhcmVhLiAgVGhlIGZpcnN0CityZXN1bHQgb2YgdGhpcyB3b3VsZCBiZSBhIERPUyBwb3J0LgorCiszLiBYIHBvcnQKKworSXQgd291bGQgYmUgbmljZSBpZiBuY3Vyc2VzIGNvdWxkIHJlY29nbml6ZSB3aGVuIGl0IHdhcyBydW5uaW5nIHVuZGVyIFggYW5kCittYWludGFpbiBpdHMgb3duIHdpbmRvdy4gIFdpdGggdGhpcyBmZWF0dXJlLCBhbGwgbmN1cnNlcyBwcm9ncmFtcyB3b3VsZAorYXV0b21hdGljYWxseSBiZWNvbWUgWCBwcm9ncmFtcy4gIFRoZSBjaGFsbGVuZ2UgaXMgdG8gaGFuZGxlIHJlc2l6ZSBldmVudHMKK3Byb3Blcmx5LgorCis0LiBVbnVzZWQgY2FwYWJpbGl0aWVzCisKK1RoZSBjdXJyZW50bHkgdW51c2VkIGNhcGFiaWxpdGllcyBmYWxsIG5hdHVyYWxseSBpbnRvIHNldmVyYWwgZ3JvdXBzOgorCitBLiBTdGF0dXMtbGluZSBjYXBhYmlsaXRpZXM6CisKKwlCb29sZWFuczogaGFzX3N0YXR1c19saW5lLCBzdGF0dXNfbGluZV9lc2Nfb2suCisJTnVtZXJpY3M6IHdpZHRoX3N0YXR1c19saW5lLgorCVN0cmluZ3M6IGRpc19zdGF0dXNfbGluZSwgZnJvbV9zdGF0dXNfbGluZSwgdG9fc3RhdHVzX2xpbmUuCisKK1N5c3RlbSBWIFJlbGVhc2UgMSBjdXJzZXMgbWFkZSBubyB1c2Ugb2YgdGhlc2UgYXQgYWxsLiAgU1ZyNCdzIHVzZSwgaWYKK2FueSwgaXMgdW5rbm93bi4gIEZyb20gdGhlIEFUJlQgdGVybWNhcCBmaWxlIGl0IGxvb2tzIGxpa2UgY3Vyc2VzLCBpbiBnZW5lcmFsLAorc2hvdWxkbid0IHVzZSB0aGVtOyB0ZXJtaW5hbCB2YXJpYW50cyB3aXRoIHN0YXR1cyBsaW5lcyBoYXZlIHRoZWlyIGxpbmUgY291bnQKK2RlY3JlbWVudGVkIGJ5IDEsIHN1Z2dlc3RpbmcgdGhhdCBjdXJzZXMgaXMgc3VwcG9zZWQgdG8gbGVhdmUgdGhlIHN0YXR1cyBsaW5lCithbG9uZS4KKworQi4gUHJpbnRlciBjYXBhYmlsaXRpZXM6CisKKwlCb29sZWFuOiBjb2xfYWRkcl9nbGl0Y2gsIGNyX2NhbmNlbHNfbWljcm9fbW9kZSwgaGFzX3ByaW50X3doZWVsLAorCQlyb3dfYWRkcl9nbGl0Y2gsIHNlbWlfYXV0b19yaWdodF9tYXJnaW4sIGNwaV9jaGFuZ2VzX3JlcywKKwkJbHBpX2NoYW5nZXNfcmVzLgorCU51bWVyaWM6IGJ1ZmZlcl9jYXBhY2l0eSwgZG90X2hvcnpfc3BhY2luZywgZG90X3ZlcnRfc3BhY2luZywKKwkJbWF4X21pY3JvX2FkZHJlc3MsIG1heF9taWNyb19qdW1wLCBtaWNyb19jb2xfc2l6ZSwKKwkJbWljcm9fbGluZV9zaXplLCBudW1iZXJfb2ZfcGlucywgb3V0cHV0X3Jlc19jaGFyLAorCQlvdXRwdXRfcmVzX2xpbmUsIG91dHB1dF9yZXNfaG9yel9pbmNoLCBwcmludF9yYXRlLAorCQl3aWRlX2NoYXJfc2l6ZSwgYml0X2ltYWdlX2VudHdpbmluZywgYml0X2ltYWdlX3R5cGUuCisJU3RyaW5nOiBkb3duX2hhbGZfbGluZSwgZm9ybV9mZWVkLCB1cF9oYWxmX2xpbmUsIHNldF9sZWZ0X21hcmdpbiwKKwkJc2V0X3JpZ2h0X21hcmdpbiwgY2xlYXJfbWFyZ2lucywgY2hhbmdlX2NoYXJfcGl0Y2gKKwkJLi4uIHNldF9wYWdlX2xlbmd0aCAoYWxsIHRoZSBTVnI0IHByaW50ZXIgY2FwcyksCisKK0N1cnNlcyBkb2Vzbid0IHVzZSB0aGVzZS4KKworQy4gUHJpbnRlci1jb250cm9sIGNhcGFiaWxpdGllczoKKworCUJvb2xlYW46IHBydHJfc2lsZW50LgorCVN0cmluZ3M6IHByaW50X3NjcmVlbiwgcHJ0cl9vbiwgcHJ0cl9vZmYsIHBydHJfbm9uLgorCitDdXJzZXMgZG9lc24ndCB1c2UgdGhlc2UuCisKK0QuIERpYWxlciBzdHJpbmdzOgorCisJU3RyaW5nczogaGFuZ3VwLCBkaWFsX3Bob25lLCBxdWlja19kaWFsLCB0b25lLCBwdWxzZSwgZmxhc2hfaG9vaywKKwkJZml4ZWRfcGF1c2UsIHdhaXRfdG9uZS4KKworQ3Vyc2VzIGRvZXNuJ3QgdXNlIHRoZXNlLgorCitFLiBXaW5kb3cgYW5kIHZpcnR1YWwtdGVybWluYWwgY2FwYWJpbGl0aWVzOgorCisJTnVtZXJpY3M6IG1heGltdW1fd2luZG93cywgdmlydHVhbF90ZXJtaW5hbC4KKwlTdHJpbmdzOiByZXFfZm9yX2lucHV0LCBjcmVhdGVfd2luZG93LCBnb3RvX3dpbmRvdywgc2V0X3dpbmRvdy4KKworVGhlc2Ugc2VlbSB0byBiZSBmb3NzaWxzIGZyb20gc29tZSBBVCZUIGV4cGVyaW1lbnRzIG9uIGNoYXJhY3Rlci1iYXNlZAord2luZG93IHN5c3RlbXMgdGhhdCBuZXZlciBlc2NhcGVkIHRoZSBsYWIuICBUaGUgdmlydHVhbF90ZXJtaW5hbCBjYXAgaGFkCitzb21ldGhpbmcgdG8gZG8gd2l0aCBidWlsZGluZyB0ZXJtaW5hbCBlbXVsYXRpb25zIGludG8gdHR5IGxpbmUgZGlzY2lwbGluZXMuCisKK0YuIFVudXNlZCBWRFQgY2FwYWJpbGl0aWVzOgorCisJQm9vbGVhbnM6IGVyYXNlX292ZXJzdHJpa2UsIGhhc19tZXRhX2tleSwgaW5zZXJ0X251bGxfZ2xpdGNoLAorCQltb3ZlX2luc2VydCwgZGVzdF90YWJzX21hZ2ljX3Ntc28sIHRyYW5zcGFyZW50X3VuZGVybGluZSwKKwkJbmVlZHNfeG9uX3hvZmYsIGhhcmRfY3Vyc29yLgorCU51bWVyaWNzOiBsaW5lc19vZl9tZW1vcnksIGJ1dHRvbnMuCisJU3RyaW5nczogcGtleV9rZXksIHBrZXlfbG9jYWwsIHBrZXlfeG1pdCwgdW5kZXJsaW5lX2NoYXIsIAorCQllbnRlcl94b25fbW9kZSwJZXhpdF94b25fbW9kZSwgeG9uX2NoYXJhY3RlciwgeG9mZl9jaGFyYWN0ZXIsIAorCQlkaXNwbGF5X2Nsb2NrLCByZW1vdmVfY2xvY2ssIHVzZXJbMC01XSwgZGlzcGxheV9wY19jaGFyLAorCQllbnRlcl9zY2FuY29kZV9tb2RlLCBleGl0X3NjYW5jb2RlX21vZGUsIHBjX3Rlcm1fb3B0aW9ucywgCisJCXNjYW5jb2RlX2VzY2FwZSwgYWx0X3NjYW5jb2RlX2VzYy4KKworVGhlc2UgYXJlIHRoZSBwb3RlbnRpYWxseSBpbXBvcnRhbnQgb25lcyBmb3IgbmN1cnNlcy4gIE5vdGVzOgorCisJaSkgbmN1cnNlcyBkb2Vzbid0IG5lZWQgbW92ZV9pbnNlcnQ7IGl0IG5ldmVyIHVzZXMgY3VwL2hwYS92cGEgd2hpbGUKKwkJaW5zZXJ0X21vZGUgaXMgb24uCisKKwlpaSkgV2UgcHJvYmFibHkgZG9uJ3QgY2FyZSBhYm91dCBkZXN0X3RhYnNfbWFnaWNfc21zbzsgb25seQorCQlUZWxlcmF5cyB1c2VkIGl0IGFuZCB0aGV5J3JlIGFsbCBsb25nIG9ic29sZXRlLgorCistLSB2aWxlOnR4dG1vZGUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2FjbG9jYWwubTQgYi9uY3Vyc2VzLTUuNy9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGU4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9hY2xvY2FsLm00CkBAIC0wLDAgKzEsNTYyNCBAQAorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCitkbmwgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKK2RubCAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorZG5sIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCitkbmwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKK2RubCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorZG5sIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorZG5sIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorZG5sIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCitkbmwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKK2RubCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorZG5sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKK2RubCBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKK2RubCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorZG5sIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCitkbmwgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sCitkbmwgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTUtb24KK2RubAorZG5sICRJZDogYWNsb2NhbC5tNCx2IDEuNDcwIDIwMDgvMTAvMjUgMjI6MTU6MzIgdG9tIEV4cCAkCitkbmwgTWFjcm9zIHVzZWQgaW4gTkNVUlNFUyBhdXRvLWNvbmZpZ3VyYXRpb24gc2NyaXB0LgorZG5sCitkbmwgVGhlc2UgbWFjcm9zIGFyZSBtYWludGFpbmVkIHNlcGFyYXRlbHkgZnJvbSBOQ1VSU0VTLiAgVGhlIGNvcHlyaWdodCBvbgorZG5sIHRoaXMgZmlsZSBhcHBsaWVzIHRvIHRoZSBhZ2dyZWdhdGlvbiBvZiBtYWNyb3MgYW5kIGRvZXMgbm90IGFmZmVjdCB1c2Ugb2YKK2RubCB0aGVzZSBtYWNyb3MgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorZG5sCitkbmwgU2VlIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCitkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBBTV9MQU5HSU5GT19DT0RFU0VUIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMi8xMC8yNyAyMzoyMTo0MgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBJbnNlcnRlZCBhcyByZXF1ZXN0ZWQgYnkgZ2V0dGV4dCAwLjEwLjQwCitkbmwgRmlsZSBmcm9tIC91c3Ivc2hhcmUvYWNsb2NhbAorZG5sIGNvZGVzZXQubTQKK2RubCA9PT09PT09PT09PT09PT09PT09PQorZG5sIHNlcmlhbCBBTTEKK2RubAorZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorQUNfREVGVU4oW0FNX0xBTkdJTkZPX0NPREVTRVRdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VUXSwgYW1fY3ZfbGFuZ2luZm9fY29kZXNldCwKKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsYW5naW5mby5oPl0sCisgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTtdLAorICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMsCisgICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PW5vKQorICAgIF0pCisgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MQU5HSU5GT19DT0RFU0VULCAxLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisgIGZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FEQV9JTkNMVURFX0RJUlMgdmVyc2lvbjogNSB1cGRhdGVkOiAyMDA2LzEwLzE0IDE1OjIzOjE1CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCB0aGUgbGlzdCBvZiBpbmNsdWRlLW9wdGlvbnMgZm9yIHRoZSBDIHByb2dyYW1zIGluIHRoZSBBZGE5NQorZG5sIGJpbmRpbmcuCitBQ19ERUZVTihbQ0ZfQURBX0lOQ0xVREVfRElSU10sCitbCitBQ1BQRkxBR1M9Ii1JLiAtSS4uLy4uL2luY2x1ZGUgJEFDUFBGTEFHUyIKK2lmIHRlc3QgIiRzcmNkaXIiICE9ICIuIjsgdGhlbgorCUFDUFBGTEFHUz0iLUlcJHtzcmNkaXJ9Ly4uLy4uL2luY2x1ZGUgJEFDUFBGTEFHUyIKK2ZpCitpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwlBQ1BQRkxBR1M9IiRBQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKK2VsaWYgdGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiOyB0aGVuCisJaWYgdGVzdCAiJGluY2x1ZGVkaXIiID0gJyR7cHJlZml4fS9pbmNsdWRlJyA7IHRoZW4KKwkJaWYgdGVzdCAkcHJlZml4ICE9IC91c3IgOyB0aGVuCisJCQlBQ1BQRkxBR1M9IiRBQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKKwkJZmkKKwllbHNlCisJCUFDUFBGTEFHUz0iJEFDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorCWZpCitmaQorQUNfU1VCU1QoQUNQUEZMQUdTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfQ0ZMQUdTIHZlcnNpb246IDcgdXBkYXRlZDogMjAwNC8wNC8yNSAxNzo0ODozMAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDb3B5IG5vbi1wcmVwcm9jZXNzb3IgZmxhZ3MgdG8gJENGTEFHUywgcHJlcHJvY2Vzc29yIGZsYWdzIHRvICRDUFBGTEFHUworZG5sIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlmIGdpdmVuIG1ha2VzIHRoaXMgbWFjcm8gdmVyYm9zZS4KK2RubAorZG5sIFB1dCBhbnkgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRoYXQgdXNlIHF1b3RlZCBzdHJpbmdzIGluICRFWFRSQV9DUFBGTEFHUywKK2RubCB0byBzaW1wbGlmeSB1c2Ugb2YgJENQUEZMQUdTIGluIGNvbXBpbGVyIGNoZWNrcywgZXRjLiwgdGhhdCBhcmUgZWFzaWx5CitkbmwgY29uZnVzZWQgYnkgdGhlIHF1b3RlcyAod2hpY2ggcmVxdWlyZSBiYWNrc2xhc2hlcyB0byBrZWVwIHRoZW0gdXNhYmxlKS4KK0FDX0RFRlVOKFtDRl9BRERfQ0ZMQUdTXSwKK1sKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gJDEKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW1tePV1dKj0nXCcnXCJbW14iXV0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bW14iXV0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisJaWZlbHNlKCQyLCwsW0NGX1ZFUkJPU0UoYWRkIHRvIFwkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzKV0pCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisJaWZlbHNlKCQyLCwsW0NGX1ZFUkJPU0UoYWRkIHRvIFwkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyldKQorCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCWlmZWxzZSgkMiwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJEVYVFJBX0NQUEZMQUdTICRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MpXSkKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCitBQ19TVUJTVChFWFRSQV9DUFBGTEFHUykKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfSU5DRElSIHZlcnNpb246IDkgdXBkYXRlZDogMjAwOC8wMi8wOSAxMzoxNTozNAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBBZGQgYW4gaW5jbHVkZS1kaXJlY3RvcnkgdG8gJENQUEZMQUdTLiAgRG9uJ3QgYWRkIC91c3IvaW5jbHVkZSwgc2luY2UgaXQncworZG5sIHJlZHVuZGFudC4gIFdlIGRvbid0IG5vcm1hbGx5IG5lZWQgdG8gYWRkIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGZvciBnY2MsCitkbmwgYnV0IG9sZCB2ZXJzaW9ucyAoYW5kIHNvbWUgbWlzaW5zdGFsbGVkIG9uZXMpIG5lZWQgdGhhdC4gIFRvIG1ha2UgdGhpbmdzCitkbmwgd29yc2UsIGdjYyAzLnggbWF5IGdpdmUgZXJyb3IgbWVzc2FnZXMgaWYgLUkvdXNyL2xvY2FsL2luY2x1ZGUgaXMgYWRkZWQgdG8KK2RubCB0aGUgaW5jbHVkZS1wYXRoKS4KK0FDX0RFRlVOKFtDRl9BRERfSU5DRElSXSwKK1sKK2lmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJDEKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGlvLmg+XSwKKwkJCQkgIFtwcmludGYoIkhlbGxvIildLAorCQkJCSAgW10sCisJCQkJICBbY2ZfaGF2ZV9pbmNkaXI9eWVzXSkKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgQ0ZfVkVSQk9TRShhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoKQorCQkgIGlmZWxzZSgkMiwsQ1BQRkxBR1MsJDIpPSItSSRjZl9hZGRfaW5jZGlyICRpZmVsc2UoJDIsLENQUEZMQUdTLFskXSQyKSIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfTElCRElSIHZlcnNpb246IDYgdXBkYXRlZDogMjAwOC8wMi8wOSAxMzoxNTozNAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubAlBZGRzIHRvIHRoZSBsaWJyYXJ5LXBhdGgKK2RubAorZG5sCVNvbWUgbWFjaGluZXMgaGF2ZSB0cm91YmxlIHdpdGggbXVsdGlwbGUgLUwgb3B0aW9ucy4KK2RubAorZG5sICQxIGlzIHRoZSAobGlzdCBvZikgZGlyZWN0b3J5KHMpIHRvIGFkZAorZG5sICQyIGlzIHRoZSBvcHRpb25hbCBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byB1cGRhdGUgKGRlZmF1bHQgTERGTEFHUykKK2RubAorQUNfREVGVU4oW0NGX0FERF9MSUJESVJdLAorWworaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAkMQorICBkbworICAgIGlmIHRlc3QgJGNmX2FkZF9saWJkaXIgPSAvdXNyL2xpYiA7IHRoZW4KKyAgICAgIDoKKyAgICBlbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKyAgICB0aGVuCisgICAgICBjZl9oYXZlX2xpYmRpcj1ubworICAgICAgaWYgdGVzdCAtbiAiJExERkxBR1MkTElCUyIgOyB0aGVuCisgICAgICAgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKyAgICAgICAgZm9yIGNmX3Rlc3RfbGliZGlyIGluICRMREZMQUdTICRMSUJTIDsgZG8KKyAgICAgICAgICBpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisgICAgICAgICAgICBjZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKyAgICAgICAgQ0ZfVkVSQk9TRShhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoKQorICAgICAgICBpZmVsc2UoJDIsLExERkxBR1MsJDIpPSItTCRjZl9hZGRfbGliZGlyICRpZmVsc2UoJDIsLExERkxBR1MsWyRdJDIpIgorICAgICAgZmkKKyAgICBmaQorICBkb25lCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfU1VCRElSX1BBVEggdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA3LzA3LzI5IDEwOjEyOjU5CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQXBwZW5kIHRvIGEgc2VhcmNoLWxpc3QgZm9yIGEgbm9uc3RhbmRhcmQgaGVhZGVyL2xpYi1maWxlCitkbmwJJDEgPSB0aGUgdmFyaWFibGUgdG8gcmV0dXJuIGFzIHJlc3VsdAorZG5sCSQyID0gdGhlIHBhY2thZ2UgbmFtZQorZG5sCSQzID0gdGhlIHN1YmRpcmVjdG9yeSwgZS5nLiwgYmluLCBpbmNsdWRlIG9yIGxpYgorZG5sICQ0ID0gdGhlIGRpcmVjdG9yeSB1bmRlciB3aGljaCB3ZSB3aWxsIHRlc3QgZm9yIHN1YmRpcmVjdG9yaWVzCitkbmwgJDUgPSBhIGRpcmVjdG9yeSB0aGF0IHdlIGRvIG5vdCB3YW50ICQ0IHRvIG1hdGNoCitBQ19ERUZVTihbQ0ZfQUREX1NVQkRJUl9QQVRIXSwKK1sKK3Rlc3QgIiQ0IiAhPSAiJDUiICYmIFwKK3Rlc3QgLWQgIiQ0IiAmJiBcCitpZmVsc2UoWyQ1XSxOT05FLCxbKHRlc3QgJDUgPSBOT05FIHx8IHRlc3QgLWQgJDUpICYmXSkgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yICQzLWRpcmVjdG9yaWVzIHVuZGVyICQ0IgorCXRlc3QgLWQgJDQvJDMgJiYgICAgICAgICAgJDE9IlskXSQxICQ0LyQzIgorCXRlc3QgLWQgJDQvJDMvJDIgJiYgICAgICAgJDE9IlskXSQxICQ0LyQzLyQyIgorCXRlc3QgLWQgJDQvJDMvJDIvJDMgJiYgICAgJDE9IlskXSQxICQ0LyQzLyQyLyQzIgorCXRlc3QgLWQgJDQvJDIvJDMgJiYgICAgICAgJDE9IlskXSQxICQ0LyQyLyQzIgorCXRlc3QgLWQgJDQvJDIvJDMvJDIgJiYgICAgJDE9IlskXSQxICQ0LyQyLyQzLyQyIgorfQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BTlNJX0NDX0NIRUNLIHZlcnNpb246IDkgdXBkYXRlZDogMjAwMS8xMi8zMCAxNzo1MzozNAorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIGlzIGFkYXB0ZWQgZnJvbSB0aGUgbWFjcm9zICdmcF9QUk9HX0NDX1NUREMnIGFuZCAnZnBfQ19QUk9UT1RZUEVTJworZG5sIGluIHRoZSBzaGFydXRpbHMgNC4yIGRpc3RyaWJ1dGlvbi4KK0FDX0RFRlVOKFtDRl9BTlNJX0NDX0NIRUNLXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGZvciAke0NDLWNjfSBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQywgY2ZfY3ZfYW5zaV9jYyxbCitjZl9jdl9hbnNpX2NjPW5vCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyMgRG9uJ3QgdHJ5IGdjYyAtYW5zaTsgdGhhdCB0dXJucyBvZmYgdXNlZnVsIGV4dGVuc2lvbnMgYW5kCisjIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KKyMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKKyMgVWx0cml4IGFuZCBPU0YvMQktc3RkMQorIyBIUC1VWAkJCS1BYSAtRF9IUFVYX1NPVVJDRQorIyBTVlI0CQkJLVhjCisjIFVuaXhXYXJlIDEuMgkJKGNhbm5vdCB1c2UgLVhjLCBzaW5jZSBBTlNJL1BPU0lYIGNsYXNoZXMpCitmb3IgY2ZfYXJnIGluICItRENDX0hBU19QUk9UT1MiIFwKKwkiIiBcCisJLXFsYW5nbHZsPWFuc2kgXAorCS1zdGQxIFwKKwktQWUgXAorCSItQWEgLURfSFBVWF9TT1VSQ0UiIFwKKwktWGMKK2RvCisJQ0ZfQUREX0NGTEFHUygkY2ZfYXJnKQorCUFDX1RSWV9DT01QSUxFKAorWworI2lmbmRlZiBDQ19IQVNfUFJPVE9TCisjaWYgIWRlZmluZWQoX19TVERDX18pIHx8IChfX1NURENfXyAhPSAxKQorY2hva2UgbWUKKyNlbmRpZgorI2VuZGlmCitdLFsKKwlpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKKwlzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKKwlzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTtdLAorCVtjZl9jdl9hbnNpX2NjPSIkY2ZfYXJnIjsgYnJlYWtdKQorZG9uZQorQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCitDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfYW5zaV9jYyIgIT0gIm5vIjsgdGhlbgoraWYgdGVzdCAiLiRjZl9jdl9hbnNpX2NjIiAhPSAiLi1EQ0NfSEFTX1BST1RPUyI7IHRoZW4KKwlDRl9BRERfQ0ZMQUdTKCRjZl9jdl9hbnNpX2NjKQorZWxzZQorCUFDX0RFRklORShDQ19IQVNfUFJPVE9TKQorZmkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FOU0lfQ0NfUkVRRCB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDgvMDMvMjMgMTQ6NDg6NTQKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBGb3IgcHJvZ3JhbXMgdGhhdCBtdXN0IHVzZSBhbiBBTlNJIGNvbXBpbGVyLCBvYnRhaW4gY29tcGlsZXIgb3B0aW9ucyB0aGF0Citkbmwgd2lsbCBtYWtlIGl0IHJlY29nbml6ZSBwcm90b3R5cGVzLiAgV2UnbGwgZG8gcHJlcHJvY2Vzc29yIGNoZWNrcyBpbiBvdGhlcgorZG5sIG1hY3Jvcywgc2luY2UgdG9vbHMgc3VjaCBhcyB1bnByb3RvIGNhbiBmYWtlIHByb3RvdHlwZXMsIGJ1dCBvbmx5IHBhcnQgb2YKK2RubCB0aGUgcHJlcHJvY2Vzc29yLgorQUNfREVGVU4oW0NGX0FOU0lfQ0NfUkVRRF0sCitbQUNfUkVRVUlSRShbQ0ZfQU5TSV9DQ19DSEVDS10pCitpZiB0ZXN0ICIkY2ZfY3ZfYW5zaV9jYyIgPSAibm8iOyB0aGVuCisJQUNfTVNHX0VSUk9SKAorW1lvdXIgY29tcGlsZXIgZG9lcyBub3QgYXBwZWFyIHRvIHJlY29nbml6ZSBwcm90b3R5cGVzLgorWW91IGhhdmUgdGhlIGZvbGxvd2luZyBjaG9pY2VzOgorCWEuIGFkanVzdCB5b3VyIGNvbXBpbGVyIG9wdGlvbnMKKwliLiBnZXQgYW4gdXAtdG8tZGF0ZSBjb21waWxlcgorCWMuIHVzZSBhIHdyYXBwZXIgc3VjaCBhcyB1bnByb3RvXSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FXS19CSUdfUFJJTlRGIHZlcnNpb246IDIgdXBkYXRlZDogMjAwOC8xMC8wNCAxNzoxNjoxOAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgYXdrIGNhbiBoYW5kbGUgYmlnIHN0cmluZ3MgdXNpbmcgcHJpbnRmLiAgU29tZSBvbGRlciB2ZXJzaW9ucyBvZgorZG5sIGF3ayBjaG9rZSBvbiBsYXJnZSBzdHJpbmdzIHBhc3NlZCB2aWEgIiVzIi4KK2RubAorZG5sICQxID0gZGVzaXJlZCBzdHJpbmcgc2l6ZQorZG5sICQyID0gdmFyaWFibGUgdG8gc2V0IHdpdGggcmVzdWx0CitBQ19ERUZVTihbQ0ZfQVdLX0JJR19QUklOVEZdLAorWworICAgIGNhc2UgeCRBV0sgaW4gIyh2aQorICAgIHgpCisgICAgICAgIGV2YWwgJDI9bm8KKyAgICAgICAgOzsKKyAgICAqKSAjKHZpCisgICAgICAgIGlmICggJHtBV0t9ICdCRUdJTiB7IHh4ID0gIngiOyB3aGlsZSAobGVuZ3RoKHh4KSA8ICQxKSB7IHh4ID0geHggIngiOyB9OyBwcmludGYoIiVzXG4iLCB4eCk7IH0nIFwKKyAgICAgICAgICAgIHwgJEFXSyAneyBwcmludGYgIiVkXG4iLCBsZW5ndGgoWyRdMCk7IH0nIHwgJEFXSyAnQkVHSU4geyBlcWxzPTA7IHJlY3M9MDsgfSB7IHJlY3MrKzsgaWYgKFskXTAgPT0gMTIwMDApIGVxbHMrKzsgfSBFTkQgeyBpZiAocmVjcyAhPSAxIHx8IGVxbHMgIT0gMSkgZXhpdCAxOyB9JyAyPi9kZXYvbnVsbCA+L2Rldi9udWxsICkgOyB0aGVuCisgICAgICAgICAgICBldmFsICQyPXllcworICAgICAgICBlbHNlCisgICAgICAgICAgICBldmFsICQyPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9CT09MX0RFQ0wgdmVyc2lvbjogOCB1cGRhdGVkOiAyMDA0LzAxLzMwIDE1OjUxOjE4CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBpZiAnYm9vbCcgaXMgYSBidWlsdGluIHR5cGUgaW4gdGhlIGNvbmZpZ3VyZWQgQysrIGNvbXBpbGVyLiAgU29tZQorZG5sIG9sZGVyIGNvbXBpbGVycyAoZS5nLiwgZ2NjIDIuNS44KSBkb24ndCBzdXBwb3J0ICdib29sJyBkaXJlY3RseTsgZ2NjCitkbmwgMi42LjMgZG9lcywgaW4gYW50aWNpcGF0aW9uIG9mIHRoZSBBTlNJIEMrKyBzdGFuZGFyZC4KK2RubAorZG5sIFRyZWF0IHRoZSBjb25maWd1cmF0aW9uLXZhcmlhYmxlIHNwZWNpYWxseSBoZXJlLCBzaW5jZSB3ZSdyZSBkaXJlY3RseQorZG5sIHN1YnN0aXR1dGluZyBpdHMgdmFsdWUgKGkuZS4sIDEvMCkuCitkbmwKK2RubCAkMSBpcyB0aGUgc2hlbGwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbiwgaWYgbm90ICRjdl9jdl9idWlsdGluX2Jvb2wKK0FDX0RFRlVOKFtDRl9CT09MX0RFQ0xdLAorWworQUNfTVNHX0NIRUNLSU5HKGlmIHdlIHNob3VsZCBpbmNsdWRlIHN0ZGJvb2wuaCkKKworQUNfQ0FDSEVfVkFMKGNmX2N2X2hlYWRlcl9zdGRib29sX2gsWworCUFDX1RSWV9DT01QSUxFKFtdLFtib29sIGZvbyA9IGZhbHNlXSwKKwkJW2NmX2N2X2hlYWRlcl9zdGRib29sX2g9MF0sCisJCVtBQ19UUllfQ09NUElMRShbCisjaWZuZGVmIF9fQkVPU19fCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCitdLFtib29sIGZvbyA9IGZhbHNlXSwKKwkJCVtjZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTFdLAorCQkJW2NmX2N2X2hlYWRlcl9zdGRib29sX2g9MF0pXSldKQorCitpZiB0ZXN0ICIkY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPSAxCit0aGVuCUFDX01TR19SRVNVTFQoeWVzKQorZWxzZQlBQ19NU0dfUkVTVUxUKG5vKQorZmkKKworQUNfTVNHX0NIRUNLSU5HKFtmb3IgYnVpbHRpbiBib29sIHR5cGVdKQorCitBQ19DQUNIRV9WQUwoaWZlbHNlKCQxLCxjZl9jdl9idWlsdGluX2Jvb2wsWyQxXSksWworCUFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorXSxbYm9vbCB4ID0gZmFsc2VdLAorCQlbaWZlbHNlKCQxLCxjZl9jdl9idWlsdGluX2Jvb2wsWyQxXSk9MV0sCisJCVtpZmVsc2UoJDEsLGNmX2N2X2J1aWx0aW5fYm9vbCxbJDFdKT0wXSkKKwldKQorCitpZiB0ZXN0ICIkaWZlbHNlKCQxLCxjZl9jdl9idWlsdGluX2Jvb2wsWyQxXSkiID0gMQordGhlbglBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UJQUNfTVNHX1JFU1VMVChubykKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0JPT0xfU0laRSB2ZXJzaW9uOiAxMiB1cGRhdGVkOiAyMDA2LzEyLzE2IDEyOjMzOjMwCitkbmwgLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBmb3IgdGhlIHNpemUgb2YgJ2Jvb2wnIGluIHRoZSBjb25maWd1cmVkIEMrKyBjb21waWxlciAoZS5nLiwgYSB0eXBlKS4KK2RubCBEb24ndCBib3RoZXIgbG9va2luZyBmb3IgYm9vbC5oLCBzaW5jZSBpdCdzIGJlZW4gZGVwcmVjYXRlZC4KK2RubAorZG5sIElmIHRoZSBjdXJyZW50IGNvbXBpbGVyIGlzIEMgcmF0aGVyIHRoYW4gQysrLCB3ZSBnZXQgdGhlIGJvb2wgZGVmaW5pdGlvbgorZG5sIGZyb20gPHN0ZGJvb2wuaD4uCitBQ19ERUZVTihbQ0ZfQk9PTF9TSVpFXSwKK1sKK0FDX01TR19DSEVDS0lORyhbZm9yIHNpemUgb2YgYm9vbF0pCitBQ19DQUNIRV9WQUwoY2ZfY3ZfdHlwZV9vZl9ib29sLFsKKwlybSAtZiBjZl90ZXN0Lm91dAorCUFDX1RSWV9SVU4oWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorCisjaWZkZWYgSEFWRV9HWFhfQlVJTFRJTl9ICisjaW5jbHVkZSA8ZysrL2J1aWx0aW4uaD4KKyNlbGlmIEhBVkVfR1BQX0JVSUxUSU5fSAorI2luY2x1ZGUgPGdwcC9idWlsdGluLmg+CisjZWxpZiBIQVZFX0JVSUxUSU5fSAorI2luY2x1ZGUgPGJ1aWx0aW4uaD4KKyNlbmRpZgorCisjZWxzZQorCisjaWYgJGNmX2N2X2hlYWRlcl9zdGRib29sX2gKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYKKworI2VuZGlmCisKK21haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oImNmX3Rlc3Qub3V0IiwgInciKTsKKwlpZiAoZnAgIT0gMCkgeworCQlib29sIHggPSB0cnVlOworCQlpZiAoKGJvb2wpKC14KSA+PSAwKQorCQkJZnB1dHMoInVuc2lnbmVkICIsIGZwKTsKKwkJaWYgKHNpemVvZih4KSA9PSBzaXplb2YoaW50KSkgICAgICAgZnB1dHMoImludCIsICBmcCk7CisJCWVsc2UgaWYgKHNpemVvZih4KSA9PSBzaXplb2YoY2hhcikpIGZwdXRzKCJjaGFyIiwgZnApOworCQllbHNlIGlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKHNob3J0KSlmcHV0cygic2hvcnQiLGZwKTsKKwkJZWxzZSBpZiAoc2l6ZW9mKHgpID09IHNpemVvZihsb25nKSkgZnB1dHMoImxvbmciLCBmcCk7CisJCWZjbG9zZShmcCk7CisJfQorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CisJCV0sCisJCVtjZl9jdl90eXBlX29mX2Jvb2w9YGNhdCBjZl90ZXN0Lm91dGAKKwkJIGlmIHRlc3QgLXogIiRjZl9jdl90eXBlX29mX2Jvb2wiOyB0aGVuCisJCSAgIGNmX2N2X3R5cGVfb2ZfYm9vbD11bmtub3duCisJCSBmaV0sCisJCVtjZl9jdl90eXBlX29mX2Jvb2w9dW5rbm93bl0sCisJCVtjZl9jdl90eXBlX29mX2Jvb2w9dW5rbm93bl0pCisJXSkKKwlybSAtZiBjZl90ZXN0Lm91dAorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfdHlwZV9vZl9ib29sKQoraWYgdGVzdCAiJGNmX2N2X3R5cGVfb2ZfYm9vbCIgPSB1bmtub3duIDsgdGhlbgorCWNhc2UgLiROQ1VSU0VTX0JPT0wgaW4gIyh2aQorCS5hdXRvfC4pIE5DVVJTRVNfQk9PTD11bnNpZ25lZDs7CisJZXNhYworCUFDX01TR19XQVJOKEFzc3VtaW5nICROQ1VSU0VTX0JPT0wgZm9yIHR5cGUgb2YgYm9vbCkKKwljZl9jdl90eXBlX29mX2Jvb2w9JE5DVVJTRVNfQk9PTAorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQlVJTERfQ0MgdmVyc2lvbjogNiB1cGRhdGVkOiAyMDA2LzEwLzE0IDE1OjIzOjE1CitkbmwgLS0tLS0tLS0tLS0KK2RubCBJZiB3ZSdyZSBjcm9zcy1jb21waWxpbmcsIGFsbG93IHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoZSB0b29scyBhbmQgdGhlaXIKK2RubCBvcHRpb25zLiAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgb3JpZW50ZWQgdG93YXJkIGlkZW50aWZ5aW5nIHRoZSBob3N0CitkbmwgY29tcGlsZXIsIGV0Yy4sIGJ1dCB3ZSBuZWVkIGEgYnVpbGQgY29tcGlsZXIgdG8gZ2VuZXJhdGUgcGFydHMgb2YgdGhlCitkbmwgc291cmNlLgorZG5sCitkbmwgJDEgPSBkZWZhdWx0IGZvciAkQ1BQRkxBR1MKK2RubCAkMiA9IGRlZmF1bHQgZm9yICRMSUJTCitBQ19ERUZVTihbQ0ZfQlVJTERfQ0NdLFsKK0FDX1JFUVVJUkUoW0NGX1BST0dfRVhUXSkKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCisJIyBkZWZhdWx0cyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUKKwk6ICR7QlVJTERfQ0ZMQUdTOj0nJ30KKwk6ICR7QlVJTERfQ1BQRkxBR1M6PSdpZmVsc2UoWyQxXSwsLFskMV0pJ30KKwk6ICR7QlVJTERfTERGTEFHUzo9Jyd9CisJOiAke0JVSUxEX0xJQlM6PSdpZmVsc2UoWyQyXSwsLFskMl0pJ30KKwk6ICR7QlVJTERfRVhFRVhUOj0nJHgnfQorCTogJHtCVUlMRF9PQkpFWFQ6PSdvJ30KKworCUFDX0FSR19XSVRIKGJ1aWxkLWNjLAorCQlbICAtLXdpdGgtYnVpbGQtY2M9WFhYICAgICB0aGUgYnVpbGQgQyBjb21waWxlciAoJEJVSUxEX0NDKV0sCisJCVtCVUlMRF9DQz0iJHdpdGh2YWwiXSwKKwkJW0FDX0NIRUNLX1BST0dTKEJVSUxEX0NDLCBnY2MgY2MgY2wpXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIG5hdGl2ZSBidWlsZCBDIGNvbXBpbGVyKQorCUFDX01TR19SRVNVTFQoJEJVSUxEX0NDKQorCisJQUNfTVNHX0NIRUNLSU5HKGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3IpCisJQUNfQVJHX1dJVEgoYnVpbGQtY3BwLAorCQlbICAtLXdpdGgtYnVpbGQtY3BwPVhYWCAgICB0aGUgYnVpbGQgQyBwcmVwcm9jZXNzb3IgKCRCVUlMRF9DUFApXSwKKwkJW0JVSUxEX0NQUD0iJHdpdGh2YWwiXSwKKwkJW0JVSUxEX0NQUD0nJHtCVUlMRF9DQ30gLUUnXSkKKwlBQ19NU0dfUkVTVUxUKCRCVUlMRF9DUFApCisKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIG5hdGl2ZSBidWlsZCBDIGZsYWdzKQorCUFDX0FSR19XSVRIKGJ1aWxkLWNmbGFncywKKwkJWyAgLS13aXRoLWJ1aWxkLWNmbGFncz1YWFggdGhlIGJ1aWxkIEMgY29tcGlsZXItZmxhZ3MgKCRCVUlMRF9DRkxBR1MpXSwKKwkJW0JVSUxEX0NGTEFHUz0iJHdpdGh2YWwiXSkKKwlBQ19NU0dfUkVTVUxUKCRCVUlMRF9DRkxBR1MpCisKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIG5hdGl2ZSBidWlsZCBDIHByZXByb2Nlc3Nvci1mbGFncykKKwlBQ19BUkdfV0lUSChidWlsZC1jcHBmbGFncywKKwkJWyAgLS13aXRoLWJ1aWxkLWNwcGZsYWdzPVhYWCB0aGUgYnVpbGQgQyBwcmVwcm9jZXNzb3ItZmxhZ3MgKCRCVUlMRF9DUFBGTEFHUyldLAorCQlbQlVJTERfQ1BQRkxBR1M9IiR3aXRodmFsIl0pCisJQUNfTVNHX1JFU1VMVCgkQlVJTERfQ1BQRkxBR1MpCisKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIG5hdGl2ZSBidWlsZCBsaW5rZXItZmxhZ3MpCisJQUNfQVJHX1dJVEgoYnVpbGQtbGRmbGFncywKKwkJWyAgLS13aXRoLWJ1aWxkLWxkZmxhZ3M9WFhYIHRoZSBidWlsZCBsaW5rZXItZmxhZ3MgKCRCVUlMRF9MREZMQUdTKV0sCisJCVtCVUlMRF9MREZMQUdTPSIkd2l0aHZhbCJdKQorCUFDX01TR19SRVNVTFQoJEJVSUxEX0xERkxBR1MpCisKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIG5hdGl2ZSBidWlsZCBsaW5rZXItbGlicmFyaWVzKQorCUFDX0FSR19XSVRIKGJ1aWxkLWxpYnMsCisJCVsgIC0td2l0aC1idWlsZC1saWJzPVhYWCAgIHRoZSBidWlsZCBsaWJyYXJpZXMgKCR7QlVJTERfTElCU30pXSwKKwkJW0JVSUxEX0xJQlM9IiR3aXRodmFsIl0pCisJQUNfTVNHX1JFU1VMVCgkQlVJTERfTElCUykKKworCSMgdGhpcyBhc3N1bWVzIHdlJ3JlIG9uIFVuaXguCisJQlVJTERfRVhFRVhUPQorCUJVSUxEX09CSkVYVD1vCisKKwk6ICR7QlVJTERfQ0M6PScke0NDfSd9CisKKwlpZiAoIHRlc3QgIiRCVUlMRF9DQyIgPSAiJENDIiB8fCB0ZXN0ICIkQlVJTERfQ0MiID0gJyR7Q0N9JyApIDsgdGhlbgorCQlBQ19NU0dfRVJST1IoW0Nyb3NzLWJ1aWxkIHJlcXVpcmVzIHR3byBjb21waWxlcnMuCitVc2UgLS13aXRoLWJ1aWxkLWNjIHRvIHNwZWNpZnkgdGhlIG5hdGl2ZSBjb21waWxlci5dKQorCWZpCisKK2Vsc2UKKwk6ICR7QlVJTERfQ0M6PScke0NDfSd9CisJOiAke0JVSUxEX0NQUDo9JyR7Q1BQfSd9CisJOiAke0JVSUxEX0NGTEFHUzo9JyR7Q0ZMQUdTfSd9CisJOiAke0JVSUxEX0NQUEZMQUdTOj0nJHtDUFBGTEFHU30nfQorCTogJHtCVUlMRF9MREZMQUdTOj0nJHtMREZMQUdTfSd9CisJOiAke0JVSUxEX0xJQlM6PScke0xJQlN9J30KKwk6ICR7QlVJTERfRVhFRVhUOj0nJHgnfQorCTogJHtCVUlMRF9PQkpFWFQ6PSdvJ30KK2ZpCisKK0FDX1NVQlNUKEJVSUxEX0NDKQorQUNfU1VCU1QoQlVJTERfQ1BQKQorQUNfU1VCU1QoQlVJTERfQ0ZMQUdTKQorQUNfU1VCU1QoQlVJTERfQ1BQRkxBR1MpCitBQ19TVUJTVChCVUlMRF9MREZMQUdTKQorQUNfU1VCU1QoQlVJTERfTElCUykKK0FDX1NVQlNUKEJVSUxEX0VYRUVYVCkKK0FDX1NVQlNUKEJVSUxEX09CSkVYVCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ0ZHX0RFRkFVTFRTIHZlcnNpb246IDcgdXBkYXRlZDogMjAwNS8wOS8yNCAxNjoxNTowMAorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIERldGVybWluZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGludG8gd2hpY2ggd2UnbGwgaW5zdGFsbCBuY3Vyc2VzLiAgVGhpcworZG5sIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyJ3MgY29tbWFuZC1saW5lIG9wdGlvbnMuICBUaGVyZSdzIHR3byBpdGVtcyB0bworZG5sIGxvb2sgZm9yOgorZG5sCTEuIHRoZSBwcmVmaXggKGUuZy4sIC91c3IpCitkbmwJMi4gdGhlIGhlYWRlciBmaWxlcyAoZS5nLiwgL3Vzci9pbmNsdWRlL25jdXJzZXMpCitkbmwgV2UnbGwgbG9vayBmb3IgYSBwcmV2aW91cyBpbnN0YWxsYXRpb24gb2YgbmN1cnNlcyBhbmQgdXNlIHRoZSBzYW1lIGRlZmF1bHRzLgorZG5sCitkbmwgV2UgZG9uJ3QgdXNlIEFDX1BSRUZJWF9ERUZBVUxULCBiZWNhdXNlIGl0IGdldHMgZXZhbHVhdGVkIHRvbyBzb29uLCBhbmQKK2RubCB3ZSBkb24ndCB1c2UgQUNfUFJFRklYX1BST0dSQU0sIGJlY2F1c2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoIG5jdXJzZXMncworZG5sIHByb2dyYW1zIGZyb20gYSB2ZW5kb3Incy4KK0FDX0RFRlVOKFtDRl9DRkdfREVGQVVMVFNdLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciBwcmVmaXgpCitpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiIDsgdGhlbgorCWNhc2UgIiRjZl9jdl9zeXN0ZW1fbmFtZSIgaW4KKwkJIyBub24tdmVuZG9yIHN5c3RlbXMgZG9uJ3QgaGF2ZSBhIGNvbmZsaWN0CisJb3BlbmJzZCp8ZnJlZWJzZCp8bGludXgqfGN5Z3dpbip8aypic2QqLWdudSkKKwkJcHJlZml4PS91c3IKKwkJOzsKKwkqKQlwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisJCTs7CisJZXNhYworZmkKK0FDX01TR19SRVNVTFQoJHByZWZpeCkKKworaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIiA7IHRoZW4KK0FDX01TR19DSEVDS0lORyhmb3IgZGVmYXVsdCBpbmNsdWRlLWRpcmVjdG9yeSkKK3Rlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvIDE+JkFDX0ZEX01TRworZm9yIGNmX3N5bWJvbCBpbiBcCisJJGluY2x1ZGVkaXIgXAorCSRpbmNsdWRlZGlyL25jdXJzZXMgXAorCSRwcmVmaXgvaW5jbHVkZSBcCisJJHByZWZpeC9pbmNsdWRlL25jdXJzZXMgXAorCS91c3IvbG9jYWwvaW5jbHVkZSBcCisJL3Vzci9sb2NhbC9pbmNsdWRlL25jdXJzZXMgXAorCS91c3IvaW5jbHVkZSBcCisJL3Vzci9pbmNsdWRlL25jdXJzZXMKK2RvCisJY2ZfZGlyPWBldmFsIGVjaG8gJGNmX3N5bWJvbGAKKwlpZiB0ZXN0IC1mICRjZl9kaXIvY3Vyc2VzLmggOyB0aGVuCisJaWYgKCBmZ3JlcCBOQ1VSU0VTX1ZFUlNJT04gJGNmX2Rpci9jdXJzZXMuaCAyPiYxID4vZGV2L251bGwgKSA7IHRoZW4KKwkJaW5jbHVkZWRpcj0iJGNmX3N5bWJvbCIKKwkJdGVzdCAtbiAiJHZlcmJvc2UiICAmJiBlY2hvICRhY19uICIJZm91bmQgIiAxPiZBQ19GRF9NU0cKKwkJYnJlYWsKKwlmaQorCWZpCisJdGVzdCAtbiAiJHZlcmJvc2UiICAmJiBlY2hvICIJdGVzdGVkICRjZl9kaXIiIDE+JkFDX0ZEX01TRworZG9uZQorQUNfTVNHX1JFU1VMVCgkaW5jbHVkZWRpcikKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NHRVRFTlQgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAwLzA4LzEyIDIzOjE4OjUyCitkbmwgLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSB0ZXJtaW5hbC1jYXBhYmlsaXR5IGRhdGFiYXNlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLiAgSWYgbm90LAorZG5sIG5jdXJzZXMgaGFzIGEgbXVjaC1yZWR1Y2VkIHZlcnNpb24uCitBQ19ERUZVTihbQ0ZfQ0dFVEVOVF0sWworQUNfTVNHX0NIRUNLSU5HKGZvciB0ZXJtaW5hbC1jYXBhYmlsaXR5IGRhdGFiYXNlIGZ1bmN0aW9ucykKK0FDX0NBQ0hFX1ZBTChjZl9jdl9jZ2V0ZW50LFsKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD5dLFsKKwljaGFyIHRlbXBbMTI4XTsKKwljaGFyICpidWYgPSB0ZW1wOworCWNoYXIgKmRiX2FycmF5ID0gdGVtcDsKKwljZ2V0ZW50KCZidWYsIC8qIGludCAqLCAqLyAmZGJfYXJyYXksICJ2dDEwMCIpOworCWNnZXRjYXAoYnVmLCAidGMiLCAnPScpOworCWNnZXRtYXRjaChidWYsICJ0YyIpOworCV0sCisJW2NmX2N2X2NnZXRlbnQ9eWVzXSwKKwlbY2ZfY3ZfY2dldGVudD1ub10pCitdKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfY2dldGVudCkKK3Rlc3QgIiRjZl9jdl9jZ2V0ZW50IiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9CU0RfQ0dFVEVOVCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ0hFQ0tfQ0FDSEUgdmVyc2lvbjogMTEgdXBkYXRlZDogMjAwOC8wMy8yMyAxNDo0NTo1OQorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UncmUgYWNjaWRlbnRhbGx5IHVzaW5nIGEgY2FjaGUgZnJvbSBhIGRpZmZlcmVudCBtYWNoaW5lLgorZG5sIERlcml2ZSB0aGUgc3lzdGVtIG5hbWUsIGFzIGEgY2hlY2sgZm9yIHJldXNpbmcgdGhlIGF1dG9jb25mIGNhY2hlLgorZG5sCitkbmwgSWYgd2UndmUgcGFja2FnZWQgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViLCBydW4gdGhhdCAoc2luY2UgaXQgZG9lcyBhCitkbmwgYmV0dGVyIGpvYiB0aGFuIHVuYW1lKS4gIE5vcm1hbGx5IHdlJ2xsIHVzZSBBQ19DQU5PTklDQUxfSE9TVCwgYnV0IGFsbG93CitkbmwgYW4gZXh0cmEgcGFyYW1ldGVyIHRoYXQgd2UgbWF5IG92ZXJyaWRlLCBlLmcuLCBmb3IgQUNfQ0FOT05JQ0FMX1NZU1RFTQorZG5sIHdoaWNoIGlzIHVzZWZ1bCBpbiBjcm9zcy1jb21waWxlcy4KK2RubAorZG5sIE5vdGU6IHdlIHdvdWxkIHVzZSAkYWNfY29uZmlnX3N1YiwgYnV0IHRoYXQgaXMgb25lIG9mIHRoZSBwbGFjZXMgd2hlcmUKK2RubCBhdXRvY29uZiAyLjV4IGJyb2tlIGNvbXBhdGliaWxpdHkgd2l0aCBhdXRvY29uZiAyLjEzCitBQ19ERUZVTihbQ0ZfQ0hFQ0tfQ0FDSEVdLAorWworaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5ndWVzcyB8fCB0ZXN0IC1mICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyA7IHRoZW4KKwlpZmVsc2UoWyQxXSwsW0FDX0NBTk9OSUNBTF9IT1NUXSxbJDFdKQorCXN5c3RlbV9uYW1lPSIkaG9zdF9vcyIKK2Vsc2UKKwlzeXN0ZW1fbmFtZT0iYCh1bmFtZSAtcyAtcikgMj4vZGV2L251bGxgIgorCWlmIHRlc3QgLXogIiRzeXN0ZW1fbmFtZSIgOyB0aGVuCisJCXN5c3RlbV9uYW1lPSJgKGhvc3RuYW1lKSAyPi9kZXYvbnVsbGAiCisJZmkKK2ZpCit0ZXN0IC1uICIkc3lzdGVtX25hbWUiICYmIEFDX0RFRklORV9VTlFVT1RFRChTWVNURU1fTkFNRSwiJHN5c3RlbV9uYW1lIikKK0FDX0NBQ0hFX1ZBTChjZl9jdl9zeXN0ZW1fbmFtZSxbY2ZfY3Zfc3lzdGVtX25hbWU9IiRzeXN0ZW1fbmFtZSJdKQorCit0ZXN0IC16ICIkc3lzdGVtX25hbWUiICYmIHN5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCit0ZXN0IC1uICIkY2ZfY3Zfc3lzdGVtX25hbWUiICYmIEFDX01TR19SRVNVTFQoQ29uZmlndXJpbmcgZm9yICRjZl9jdl9zeXN0ZW1fbmFtZSkKKworaWYgdGVzdCAiLiRzeXN0ZW1fbmFtZSIgIT0gIi4kY2ZfY3Zfc3lzdGVtX25hbWUiIDsgdGhlbgorCUFDX01TR19SRVNVTFQoQ2FjaGVkIHN5c3RlbSBuYW1lICgkc3lzdGVtX25hbWUpIGRvZXMgbm90IGFncmVlIHdpdGggYWN0dWFsICgkY2ZfY3Zfc3lzdGVtX25hbWUpKQorCUFDX01TR19FUlJPUigiUGxlYXNlIHJlbW92ZSBjb25maWcuY2FjaGUgYW5kIHRyeSBhZ2Fpbi4iKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ0hFQ0tfRVJSTk8gdmVyc2lvbjogMTAgdXBkYXRlZDogMjAwOC8wOC8yMiAxNjozMzoyMgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGRhdGEgdGhhdCBpcyB1c3VhbGx5IGRlY2xhcmVkIGluIDxzdGRpby5oPiBvciA8ZXJybm8uaD4sIGUuZy4sCitkbmwgdGhlICdlcnJubycgdmFyaWFibGUuICBEZWZpbmUgYSBERUNMX3h4eCBzeW1ib2wgaWYgd2UgbXVzdCBkZWNsYXJlIGl0Citkbmwgb3Vyc2VsdmVzLgorZG5sCitkbmwgJDEgPSB0aGUgbmFtZSB0byBjaGVjaworZG5sICQyID0gdGhlIGFzc3VtZWQgdHlwZQorQUNfREVGVU4oW0NGX0NIRUNLX0VSUk5PXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIGV4dGVybmFsICQxIGlzIGRlY2xhcmVkLCBjZl9jdl9kY2xfJDEsWworICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+IF0sCisgICAgaWZlbHNlKCQyLCxpbnQsJDIpIHggPSAoaWZlbHNlKCQyLCxpbnQsJDIpKSAkMSwKKyAgICBbY2ZfY3ZfZGNsXyQxPXllc10sCisgICAgW2NmX2N2X2RjbF8kMT1ub10pCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfZGNsXyQxIiA9IG5vIDsgdGhlbgorICAgIENGX1VQUEVSKGNmX3Jlc3VsdCxkZWNsXyQxKQorICAgIEFDX0RFRklORV9VTlFVT1RFRCgkY2ZfcmVzdWx0KQorZmkKKworIyBJdCdzIHBvc3NpYmxlIChmb3IgbmVhci1VTklYIGNsb25lcykgdGhhdCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0CitDRl9DSEVDS19FWFRFUk5fREFUQSgkMSxpZmVsc2UoJDIsLGludCwkMikpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NIRUNLX0VYVEVSTl9EQVRBIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMS8xMi8zMCAxODowMzoyMworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBleHRlcm5hbCBkYXRhIGluIHRoZSBjdXJyZW50IHNldCBvZiBsaWJyYXJpZXMuICBJZgorZG5sIHdlIGNhbiBtb2RpZnkgaXQsIGl0J3MgcmVhbCBlbm91Z2guCitkbmwgJDEgPSB0aGUgbmFtZSB0byBjaGVjaworZG5sICQyID0gaXRzIHR5cGUKK0FDX0RFRlVOKFtDRl9DSEVDS19FWFRFUk5fREFUQV0sCitbCitBQ19DQUNIRV9DSEVDSyhpZiBleHRlcm5hbCAkMSBleGlzdHMsIGNmX2N2X2hhdmVfJDEsWworICAgIEFDX1RSWV9MSU5LKFsKKyN1bmRlZiAkMQorZXh0ZXJuICQyICQxOworXSwKKyAgICBbJDEgPSAyXSwKKyAgICBbY2ZfY3ZfaGF2ZV8kMT15ZXNdLAorICAgIFtjZl9jdl9oYXZlXyQxPW5vXSkKK10pCisKK2lmIHRlc3QgIiRjZl9jdl9oYXZlXyQxIiA9IHllcyA7IHRoZW4KKyAgICBDRl9VUFBFUihjZl9yZXN1bHQsaGF2ZV8kMSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoJGNmX3Jlc3VsdCkKK2ZpCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ0hFQ0tfR1BNX1dHRVRDSCB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDcvMDQvMjggMTQ6Mzg6MDYKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgR1BNIGlzIGFscmVhZHkgbGlua2VkIHdpdGggY3Vyc2VzLiAgSWYgc28gLSBhbmQgaWYgdGhlIGxpbmthZ2UKK2RubCBpcyBub3QgIndlYWsiIC0gd2FybiBhYm91dCB0aGlzIGJlY2F1c2UgaXQgY2FuIGNyZWF0ZSBwcm9ibGVtcyBsaW5raW5nCitkbmwgYXBwbGljYXRpb25zIHdpdGggbmN1cnNlcy4KK0FDX0RFRlVOKFtDRl9DSEVDS19HUE1fV0dFVENIXSxbCitBQ19DSEVDS19MSUIoZ3BtLEdwbV9XZ2V0Y2gsWworCitBQ19DQUNIRV9DSEVDSyhpZiBHUE0gaXMgd2Vha2x5IGJvdW5kIHRvIGN1cnNlcyBsaWJyYXJ5LCBjZl9jdl9jaGVja19ncG1fd2dldGNoLFsKK2NmX2N2X2NoZWNrX2dwbV93Z2V0Y2g9dW5rbm93bgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzIDsgdGhlbgorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxDRl9FT0YKKyNpbmNsdWRlIDxncG0uaD4KK2ludCBtYWluKCkKK3sKKwlHcG1fV2dldGNoKCk7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KK0NGX0VPRgorCisJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkjIFRoaXMgb25seSB3b3JrcyBpZiB3ZSBjYW4gbG9vayBhdCB0aGUgc3ltYm9sIHRhYmxlLiAgSWYgYSBzaGFyZWQKKwkjIGxpYnJhcnkgaXMgc3RyaXBwZWQgZm9yIGluc3RhbGwsIHdlIGNhbm5vdCB1c2UgdGhhdC4gIFNvIHdlJ3JlIGZvcmNlZAorCSMgdG8gcmVseSBvbiB0aGUgc3RhdGljIGxpYnJhcnksIG5vdGluZyB0aGF0IHNvbWUgcGFja2FnZXJzIG1heSBub3QKKwkjIGluY2x1ZGUgaXQuCisJTElCUz0iLXN0YXRpYyAtbGdwbSAtZHluYW1pYyAkTElCUyIKKwlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSA7IHRoZW4KKwkJaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgOyB0aGVuCisJCQljZl9jdl9jaGVja19ncG1fd2dldGNoPWBubSBjb25mdGVzdCRhY19leGVleHQgfCBlZ3JlcCAnXDx3Z2V0Y2hcPicgfCBlZ3JlcCAnXDxbW3ZWd1ddXVw+J2AKKwkJCXRlc3QgLW4gIiRjZl9jdl9jaGVja19ncG1fd2dldGNoIiAmJiBjZl9jdl9jaGVja19ncG1fd2dldGNoPXllcworCQkJdGVzdCAteiAiJGNmX2N2X2NoZWNrX2dwbV93Z2V0Y2giICYmIGNmX2N2X2NoZWNrX2dwbV93Z2V0Y2g9bm8KKwkJZmkKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0KgorCUxJQlM9IiRjZl9zYXZlX0xJQlMiCitmaQorXSkKKworaWYgdGVzdCAiJGNmX2N2X2NoZWNrX2dwbV93Z2V0Y2giICE9IHllcyA7IHRoZW4KKwlBQ19NU0dfV0FSTihHUE0gbGlicmFyeSBpcyBhbHJlYWR5IGxpbmtlZCB3aXRoIGN1cnNlcyAtIHJlYWQgdGhlIEZBUSkKK2ZpCitdKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1BQX1BBUkFNX0lOSVQgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDAxLzA0LzA3IDIyOjMxOjE4CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB0aGUgQysrIGNvbXBpbGVyIGFjY2VwdHMgZHVwbGljYXRlIHBhcmFtZXRlciBpbml0aWFsaXphdGlvbi4gIFRoaXMKK2RubCBpcyBhIGxhdGUgZmVhdHVyZSBmb3IgdGhlIHN0YW5kYXJkIGFuZCBpcyBub3QgaW4gc29tZSByZWNlbnQgY29tcGlsZXJzCitkbmwgKDE5OTkvOS8xMSkuCitBQ19ERUZVTihbQ0ZfQ1BQX1BBUkFNX0lOSVRdLAorWworaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KK0FDX0NBQ0hFX0NIRUNLKGlmICRDWFggYWNjZXB0cyBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24sY2ZfY3ZfY3BwX3BhcmFtX2luaXQsWworCUFDX0xBTkdfU0FWRQorCUFDX0xBTkdfQ1BMVVNQTFVTCisJQUNfVFJZX1JVTihbCitjbGFzcyBURVNUIHsKK3ByaXZhdGU6CisJaW50IHZhbHVlOworcHVibGljOgorCVRFU1QoaW50IHggPSAxKTsKKwl+VEVTVCgpOworfTsKKworVEVTVDo6VEVTVChpbnQgeCA9IDEpCS8vIHNvbWUgY29tcGlsZXJzIGRvIG5vdCBsaWtlIHNlY29uZCBpbml0aWFsaXplcgoreworCXZhbHVlID0geDsKK30KK3ZvaWQgbWFpbigpIHsgfQorXSwKKwlbY2ZfY3ZfY3BwX3BhcmFtX2luaXQ9eWVzXSwKKwlbY2ZfY3ZfY3BwX3BhcmFtX2luaXQ9bm9dLAorCVtjZl9jdl9jcHBfcGFyYW1faW5pdD11bmtub3duXSkKKwlBQ19MQU5HX1JFU1RPUkUKK10pCitmaQordGVzdCAiJGNmX2N2X2NwcF9wYXJhbV9pbml0IiA9IHllcyAmJiBBQ19ERUZJTkUoQ1BQX0hBU19QQVJBTV9JTklUKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DUFBfU1RBVElDX0NBU1QgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA1LzA3LzIzIDE2OjUyOjQzCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIEMrKyBjb21waWxlciBhY2NlcHRzIHN0YXRpY19jYXN0IGluIGdlbmVyaWNzLiAgVGhpcyBhcHBlYXJzIHRvCitkbmwgbm90IGJlIHN1cHBvcnRlZCBpbiBnKysgYmVmb3JlIDMuMAorQUNfREVGVU4oW0NGX0NQUF9TVEFUSUNfQ0FTVF0sCitbCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorCitBQ19DQUNIRV9DSEVDSyhpZiAkQ1hYIGFjY2VwdHMgc3RhdGljX2Nhc3QsY2ZfY3ZfY3BwX3N0YXRpY19jYXN0LFsKKwlBQ19MQU5HX1NBVkUKKwlBQ19MQU5HX0NQTFVTUExVUworCisJQUNfVFJZX0NPTVBJTEUoWworY2xhc3MgTkN1cnNlc1BhbmVsCit7CitwdWJsaWM6CisgIE5DdXJzZXNQYW5lbChpbnQgbmxpbmVzLAorCSAgICAgICBpbnQgbmNvbHMsCisJICAgICAgIGludCBiZWdpbl95ID0gMCwKKwkgICAgICAgaW50IGJlZ2luX3ggPSAwKQorICB7CisgIH0KKworICB+TkN1cnNlc1BhbmVsKCk7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBOQ3Vyc2VzVXNlclBhbmVsIDogcHVibGljIE5DdXJzZXNQYW5lbAoreworcHVibGljOgorICBOQ3Vyc2VzVXNlclBhbmVsIChpbnQgbmxpbmVzLAorCQkgICAgaW50IG5jb2xzLAorCQkgICAgaW50IGJlZ2luX3kgPSAwLAorCQkgICAgaW50IGJlZ2luX3ggPSAwLAorCQkgICAgY29uc3QgVCogcF9Vc2VyRGF0YSA9IHN0YXRpY19jYXN0PFQqPigwKSkKKyAgICA6IE5DdXJzZXNQYW5lbCAobmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCkKKyAgeworICB9OworICBOQ3Vyc2VzVXNlclBhbmVsKGNvbnN0IFQqIHBfVXNlckRhdGEgPSBzdGF0aWNfY2FzdDxUKj4oMCkpIDogTkN1cnNlc1BhbmVsKCkKKyAgeworICB9OworCisgIHZpcnR1YWwgfk5DdXJzZXNVc2VyUGFuZWwoKSB7fTsKK307CitdLFsKKwljb25zdCBjaGFyKiBwX1VzZXJEYXRhID0gc3RhdGljX2Nhc3Q8Y2hhcio+KDApXSwKKwlbY2ZfY3ZfY3BwX3N0YXRpY19jYXN0PXllc10sCisJW2NmX2N2X2NwcF9zdGF0aWNfY2FzdD1ub10pCisKKwlBQ19MQU5HX1JFU1RPUkUKK10pCisKK2ZpCisKK3Rlc3QgIiRjZl9jdl9jcHBfc3RhdGljX2Nhc3QiID0geWVzICYmIEFDX0RFRklORShDUFBfSEFTX1NUQVRJQ19DQVNUKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DX0lOTElORSB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDcvMDgvMTEgMTQ6MDk6NTAKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzICJpbmxpbmUiLgorZG5sICQxIGlzIHRoZSBuYW1lIG9mIGEgc2hlbGwgdmFyaWFibGUgdG8gc2V0IGlmIGlubGluZSBpcyBzdXBwb3J0ZWQKK2RubCAkMiBpcyB0aGUgdGhyZXNob2xkIGZvciBnY2MgNC54J3Mgb3B0aW9uIGNvbnRyb2xsaW5nIG1heGltdW0gaW5saW5lIHNpemUKK0FDX0RFRlVOKFtDRl9DX0lOTElORV0sWworQUNfQ19JTkxJTkUKKyQxPQoraWYgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyA7IHRoZW4KKyAgJDE9aW5saW5lCisgIGlmIHRlc3QgIiRJTlRFTF9DT01QSUxFUiIgPSB5ZXMKKyAgdGhlbgorICAgIDoKKyAgZWxpZiB0ZXN0ICIkR0NDIiA9IHllcworICB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soaWYgZ2NjIHN1cHBvcnRzIG9wdGlvbnMgdG8gdHVuZSBpbmxpbmluZyxjZl9jdl9nY2NfaW5saW5lLFsKKyAgICAgIGNmX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtc2luZ2xlPSQyIgorICAgICAgQUNfVFJZX0NPTVBJTEUoW2lubGluZSBpbnQgZm9vKHZvaWQpIHsgcmV0dXJuIDE7IH1dLAorICAgICAgWyR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0gZm9vKCldLAorICAgICAgW2NmX2N2X2djY19pbmxpbmU9eWVzXSwKKyAgICAgIFtjZl9jdl9nY2NfaW5saW5lPW5vXSkKKyAgICAgIENGTEFHUz0kY2Zfc2F2ZV9DRkxBR1MKKyAgICBdKQorICAgIGlmIHRlc3QgIiRjZl9jdl9nY2NfaW5saW5lIiA9IHllcyA7IHRoZW4KKyAgICAgICAgQ0ZfQUREX0NGTEFHUyhbLS1wYXJhbSBtYXgtaW5saW5lLWluc25zLXNpbmdsZT0kMl0pCisgICAgZmkKKyAgZmkKK2ZpCitBQ19TVUJTVCgkMSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRElSTkFNRSB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDIvMTIvMjEgMTk6MjU6NTIKK2RubCAtLS0tLS0tLS0tCitkbmwgImRpcm5hbWUiIGlzIG5vdCBwb3J0YWJsZSwgc28gd2UgZmFrZSBpdCB3aXRoIGEgc2hlbGwgc2NyaXB0LgorQUNfREVGVU4oW0NGX0RJUk5BTUVdLFskMT1gZWNobyAkMiB8IHNlZCAtZSAncyUvW1teL11dKiQlJSdgXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9ESVJTX1RPX01BS0UgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAyLzAyLzIzIDIwOjM4OjMxCitkbmwgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQ0ZfRElSU19UT19NQUtFXSwKK1sKK0RJUlNfVE9fTUFLRT0ibGliIgorZm9yIGNmX2l0ZW0gaW4gJGNmX2xpc3RfbW9kZWxzCitkbworCUNGX09CSl9TVUJESVIoJGNmX2l0ZW0sY2Zfc3ViZGlyKQorCWZvciBjZl9pdGVtMiBpbiAkRElSU19UT19NQUtFCisJZG8KKwkJdGVzdCAkY2ZfaXRlbTIgPSAkY2Zfc3ViZGlyICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIi4kY2ZfaXRlbTIiICE9ICIuJGNmX3N1YmRpciIgJiYgRElSU19UT19NQUtFPSIkRElSU19UT19NQUtFICRjZl9zdWJkaXIiCitkb25lCitmb3IgY2ZfZGlyIGluICRESVJTX1RPX01BS0UKK2RvCisJdGVzdCAhIC1kICRjZl9kaXIgJiYgbWtkaXIgJGNmX2RpcgorZG9uZQorQUNfU1VCU1QoRElSU19UT19NQUtFKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9ESVNBQkxFX0xFQUtTIHZlcnNpb246IDQgdXBkYXRlZDogMjAwNi8xMi8xNiAxNToxMDo0MgorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb21iaW5lIG5vLWxlYWsgY2hlY2tzIHdpdGggdGhlIGxpYnJhcmllcyBvciB0b29scyB0aGF0IGFyZSB1c2VkIGZvciB0aGUKK2RubCBjaGVja3MuCitBQ19ERUZVTihbQ0ZfRElTQUJMRV9MRUFLU10sWworCitBQ19SRVFVSVJFKFtDRl9XSVRIX0RNQUxMT0NdKQorQUNfUkVRVUlSRShbQ0ZfV0lUSF9EQk1BTExPQ10pCitBQ19SRVFVSVJFKFtDRl9XSVRIX1ZBTEdSSU5EXSkKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIHBlcmZvcm0gbWVtb3J5LWxlYWsgdGVzdGluZykKK0FDX0FSR19FTkFCTEUobGVha3MsCisJWyAgLS1kaXNhYmxlLWxlYWtzICAgICAgICAgdGVzdDogZnJlZSBwZXJtYW5lbnQgbWVtb3J5LCBhbmFseXplIGxlYWtzXSwKKwlbd2l0aF9ub19sZWFrcz15ZXNdLAorCTogJHt3aXRoX25vX2xlYWtzOj1ub30pCitBQ19NU0dfUkVTVUxUKCR3aXRoX25vX2xlYWtzKQorCitpZiB0ZXN0ICIkd2l0aF9ub19sZWFrcyIgPSB5ZXMgOyB0aGVuCisJQUNfREVGSU5FKE5PX0xFQUtTKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRU5BQkxFX1JQQVRIIHZlcnNpb246IDEgdXBkYXRlZDogMjAwOC8wOS8xMyAxMDoyMjozMAorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBycGF0aCBvcHRpb24gc2hvdWxkIGJlIHVzZWQsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUKK2RubCBjZl9jdl9sZF9ycGF0aCBpZiBzby4KK0FDX0RFRlVOKFtDRl9FTkFCTEVfUlBBVEhdLAorWworQUNfTVNHX0NIRUNLSU5HKGlmIHJwYXRoIG9wdGlvbiBzaG91bGQgYmUgdXNlZCkKK0FDX0FSR19FTkFCTEUocnBhdGgsCitbICAtLWVuYWJsZS1ycGF0aCAgICAgICAgICB1c2UgcnBhdGggb3B0aW9uIHdoZW4gZ2VuZXJhdGluZyBzaGFyZWQgbGlicmFyaWVzXSwKK1tjZl9jdl9sZF9ycGF0aD0kZW5hYmxldmFsXSwKK1tjZl9jdl9sZF9ycGF0aD1ub10pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9sZF9ycGF0aCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRVJSTk8gdmVyc2lvbjogNSB1cGRhdGVkOiAxOTk3LzExLzMwIDEyOjQ0OjM5CitkbmwgLS0tLS0tLS0KK2RubCBDaGVjayBpZiAnZXJybm8nIGlzIGRlY2xhcmVkIGluIDxlcnJuby5oPgorQUNfREVGVU4oW0NGX0VSUk5PXSwKK1sKK0NGX0NIRUNLX0VSUk5PKGVycm5vKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9FVElQX0RFRklORVMgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAzLzAzLzIyIDE5OjEzOjQzCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBmb3IgY29uZmxpY3RpbmcgZGVmaW5pdGlvbnMgb2YgZXhjZXB0aW9uIGluIGdjYyAyLjguMCwgZXRjLiwgYmV0d2VlbgorZG5sIG1hdGguaCBhbmQgYnVpbHRpbi5oLCBvbmx5IGZvciBuY3Vyc2VzCitBQ19ERUZVTihbQ0ZfRVRJUF9ERUZJTkVTXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3Igc3BlY2lhbCBkZWZpbmVzIG5lZWRlZCBmb3IgZXRpcC5oKQorY2Zfc2F2ZV9DWFhGTEFHUz0iJENYWEZMQUdTIgorY2ZfcmVzdWx0PSJub25lIgorZm9yIGNmX21hdGggaW4gIiIgTUFUSF9ICitkbworZm9yIGNmX2V4Y3AgaW4gIiIgTUFUSF9FWENFUFRJT04KK2RvCisJQ1hYRkxBR1M9IiRjZl9zYXZlX0NYWEZMQUdTIC1JJHtzcmNkaXJ9L2MrKyAtSSR7c3JjZGlyfS9tZW51IC1JJHtzcmNkaXJ9L2luY2x1ZGUiCisJdGVzdCAtbiAiJGNmX21hdGgiICYmIENYWEZMQUdTPSIkQ1hYRkxBR1MgLURFVElQX05FRURTXyR7Y2ZfbWF0aH0iCisJdGVzdCAtbiAiJGNmX2V4Y3AiICYmIENYWEZMQUdTPSIkQ1hYRkxBR1MgLURFVElQX05FRURTXyR7Y2ZfZXhjcH0iCitBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8ZXRpcC5oLmluPgorXSxbXSxbCisJdGVzdCAtbiAiJGNmX21hdGgiICYmIEFDX0RFRklORV9VTlFVT1RFRChFVElQX05FRURTXyR7Y2ZfbWF0aH0pCisJdGVzdCAtbiAiJGNmX2V4Y3AiICYmIEFDX0RFRklORV9VTlFVT1RFRChFVElQX05FRURTXyR7Y2ZfZXhjcH0pCisJY2ZfcmVzdWx0PSIkY2ZfbWF0aCAkY2ZfZXhjcCIKKwlicmVhaworXSxbXSkKK2RvbmUKK2RvbmUKK0FDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCkKK0NYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyIKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRklORF9MSU5LQUdFIHZlcnNpb246IDEyIHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMjA6MTM6NTMKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIGEgbGlicmFyeSAoc3BlY2lmaWNhbGx5IHRoZSBsaW5rYWdlIHVzZWQgaW4gdGhlIGNvZGUgZnJhZ21lbnQpLAorZG5sIHNlYXJjaGluZyBmb3IgaXQgaWYgaXQgaXMgbm90IGFscmVhZHkgaW4gdGhlIGxpYnJhcnkgcGF0aC4KK2RubCBTZWUgYWxzbyBDRl9BRERfU0VBUkNIUEFUSC4KK2RubAorZG5sIFBhcmFtZXRlcnMgKDQtb24gYXJlIG9wdGlvbmFsKToKK2RubCAgICAgJDEgPSBoZWFkZXJzIGZvciBsaWJyYXJ5IGVudHJ5cG9pbnQKK2RubCAgICAgJDIgPSBjb2RlIGZyYWdtZW50IGZvciBsaWJyYXJ5IGVudHJ5cG9pbnQKK2RubCAgICAgJDMgPSB0aGUgbGlicmFyeSBuYW1lIHdpdGhvdXQgdGhlICItbCIgb3B0aW9uIG9yICIuc28iIHN1ZmZpeC4KK2RubCAgICAgJDQgPSBhY3Rpb24gdG8gcGVyZm9ybSBpZiBzdWNjZXNzZnVsIChkZWZhdWx0OiB1cGRhdGUgQ1BQRkxBR1MsIGV0YykKK2RubCAgICAgJDUgPSBhY3Rpb24gdG8gcGVyZm9ybSBpZiBub3Qgc3VjY2Vzc2Z1bAorZG5sICAgICAkNiA9IG1vZHVsZSBuYW1lLCBpZiBub3QgdGhlIHNhbWUgYXMgdGhlIGxpYnJhcnkgbmFtZQorZG5sICAgICAkNyA9IGV4dHJhIGxpYnJhcmllcworZG5sCitkbmwgU2V0cyB0aGVzZSB2YXJpYWJsZXM6CitkbmwgICAgICRjZl9jdl9maW5kX2xpbmthZ2VfJDMgLSB5ZXMvbm8gYWNjb3JkaW5nIHRvIHdoZXRoZXIgbGlua2FnZSBpcyBmb3VuZAorZG5sICAgICAkY2ZfY3ZfaGVhZGVyX3BhdGhfJDMgLSBpbmNsdWRlLWRpcmVjdG9yeSBpZiBuZWVkZWQKK2RubCAgICAgJGNmX2N2X2xpYnJhcnlfcGF0aF8kMyAtIGxpYnJhcnktZGlyZWN0b3J5IGlmIG5lZWRlZAorZG5sICAgICAkY2ZfY3ZfbGlicmFyeV9maWxlXyQzIC0gbGlicmFyeS1maWxlIGlmIG5lZWRlZCwgZS5nLiwgLWwkMworQUNfREVGVU4oW0NGX0ZJTkRfTElOS0FHRV0sWworCisjIElmIHRoZSBsaW5rYWdlIGlzIG5vdCBhbHJlYWR5IGluIHRoZSAkQ1BQRkxBR1MvJExERkxBR1MgY29uZmlndXJhdGlvbiwgdGhlc2UKKyMgd2lsbCBiZSBzZXQgb24gY29tcGxldGlvbiBvZiB0aGUgQUNfVFJZX0xJTksgYmVsb3cuCitjZl9jdl9oZWFkZXJfcGF0aF8kMz0KK2NmX2N2X2xpYnJhcnlfcGF0aF8kMz0KKworQ0ZfTVNHX0xPRyhbU3RhcnRpbmcgW0ZJTkRfTElOS0FHRV0oJDMsJDYpXSkKKworQUNfVFJZX0xJTksoWyQxXSxbJDJdLAorICAgIGNmX2N2X2ZpbmRfbGlua2FnZV8kMz15ZXMsWworICAgIGNmX2N2X2ZpbmRfbGlua2FnZV8kMz1ubworCisgICAgQ0ZfTVNHX0xPRyhbU2VhcmNoaW5nIGZvciBoZWFkZXJzIGluIFtGSU5EX0xJTktBR0VdKCQzLCQ2KV0pCisKKyAgICBjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgY2ZfdGVzdF9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisgICAgQ0ZfSEVBREVSX1BBVEgoY2Zfc2VhcmNoLGlmZWxzZShbJDZdLCxbJDNdLFskNl0pKQorICAgIGZvciBjZl9jdl9oZWFkZXJfcGF0aF8kMyBpbiAkY2Zfc2VhcmNoCisgICAgZG8KKyAgICAgIGlmIHRlc3QgLWQgJGNmX2N2X2hlYWRlcl9wYXRoXyQzIDsgdGhlbgorICAgICAgICBDRl9WRVJCT1NFKC4uLiB0ZXN0aW5nICRjZl9jdl9oZWFkZXJfcGF0aF8kMykKKyAgICAgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIC1JJGNmX2N2X2hlYWRlcl9wYXRoXyQzIgorICAgICAgICBBQ19UUllfQ09NUElMRShbJDFdLFskMl0sWworICAgICAgICAgICAgQ0ZfVkVSQk9TRSguLi4gZm91bmQgJDMgaGVhZGVycyBpbiAkY2ZfY3ZfaGVhZGVyX3BhdGhfJDMpCisgICAgICAgICAgICBjZl9jdl9maW5kX2xpbmthZ2VfJDM9bWF5YmUKKyAgICAgICAgICAgIGNmX3Rlc3RfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgICAgIGJyZWFrXSxbCisgICAgICAgICAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBdKQorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlXyQzIiA9IG1heWJlIDsgdGhlbgorCisgICAgICBDRl9NU0dfTE9HKFtTZWFyY2hpbmcgZm9yICQzIGxpYnJhcnkgaW4gW0ZJTkRfTElOS0FHRV0oJDMsJDYpXSkKKworICAgICAgY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIGNmX3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisKKyAgICAgIGlmZWxzZShbJDZdLCwsWworICAgICAgICBDUFBGTEFHUz0iJGNmX3Rlc3RfQ1BQRkxBR1MiCisgICAgICAgIExJQlM9Ii1sJDMgJDcgJGNmX3NhdmVfTElCUyIKKyAgICAgICAgQUNfVFJZX0xJTksoWyQxXSxbJDJdLFsKKyAgICAgICAgICAgIENGX1ZFUkJPU0UoLi4uIGZvdW5kICQzIGxpYnJhcnkgaW4gc3lzdGVtKQorICAgICAgICAgICAgY2ZfY3ZfZmluZF9saW5rYWdlXyQzPXllc10pCisgICAgICAgICAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorICAgICAgICAgICAgXSkKKworICAgICAgaWYgdGVzdCAiJGNmX2N2X2ZpbmRfbGlua2FnZV8kMyIgIT0geWVzIDsgdGhlbgorICAgICAgICBDRl9MSUJSQVJZX1BBVEgoY2Zfc2VhcmNoLCQzKQorICAgICAgICBmb3IgY2ZfY3ZfbGlicmFyeV9wYXRoXyQzIGluICRjZl9zZWFyY2gKKyAgICAgICAgZG8KKyAgICAgICAgICBpZiB0ZXN0IC1kICRjZl9jdl9saWJyYXJ5X3BhdGhfJDMgOyB0aGVuCisgICAgICAgICAgICBDRl9WRVJCT1NFKC4uLiB0ZXN0aW5nICRjZl9jdl9saWJyYXJ5X3BhdGhfJDMpCisgICAgICAgICAgICBDUFBGTEFHUz0iJGNmX3Rlc3RfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSItbCQzICQ3ICRjZl9zYXZlX0xJQlMiCisgICAgICAgICAgICBMREZMQUdTPSIkY2Zfc2F2ZV9MREZMQUdTIC1MJGNmX2N2X2xpYnJhcnlfcGF0aF8kMyIKKyAgICAgICAgICAgIEFDX1RSWV9MSU5LKFskMV0sWyQyXSxbCisgICAgICAgICAgICAgICAgQ0ZfVkVSQk9TRSguLi4gZm91bmQgJDMgbGlicmFyeSBpbiAkY2ZfY3ZfbGlicmFyeV9wYXRoXyQzKQorICAgICAgICAgICAgICAgIGNmX2N2X2ZpbmRfbGlua2FnZV8kMz15ZXMKKyAgICAgICAgICAgICAgICBjZl9jdl9saWJyYXJ5X2ZpbGVfJDM9Ii1sJDMiCisgICAgICAgICAgICAgICAgYnJlYWtdLFsKKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICAgICAgTElCUz0iJGNmX3NhdmVfTElCUyIKKyAgICAgICAgICAgICAgICBMREZMQUdTPSIkY2Zfc2F2ZV9MREZMQUdTIgorICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorICAgICAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIExERkxBR1M9IiRjZl9zYXZlX0xERkxBR1MiCisgICAgICBmaQorCisgICAgZWxzZQorICAgICAgY2ZfY3ZfZmluZF9saW5rYWdlXyQzPW5vCisgICAgZmkKKyAgICBdLCQ3KQorCitpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlXyQzIiA9IHllcyA7IHRoZW4KK2lmZWxzZShbJDRdLCxbCisgIENGX0FERF9JTkNESVIoJGNmX2N2X2hlYWRlcl9wYXRoXyQzKQorICBDRl9BRERfTElCRElSKCRjZl9jdl9saWJyYXJ5X3BhdGhfJDMpCisgIExJQlM9Ii1sJDMgJExJQlMiCitdLFskNF0pCitlbHNlCitpZmVsc2UoWyQ1XSwsQUNfTVNHX1dBUk4oQ2Fubm90IGZpbmQgJDMgbGlicmFyeSksWyQ1XSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZVTkNfRExTWU0gdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA0LzA2LzE2IDIwOjUyOjQ1CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIFRlc3QgZm9yIGRsc3ltKCkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGxpYmRsLgorZG5sCitkbmwgU2V0cworZG5sCSRjZl9oYXZlX2Rsc3ltCitkbmwJJGNmX2hhdmVfbGliZGwKK0FDX0RFRlVOKFtDRl9GVU5DX0RMU1lNXSxbCitjZl9oYXZlX2Rsc3ltPW5vCitBQ19DSEVDS19GVU5DKGRsc3ltLGNmX2hhdmVfZGxzeW09eWVzLFsKKworY2ZfaGF2ZV9saWJkbD1ubworQUNfQ0hFQ0tfTElCKGRsLGRsc3ltLFsKKwljZl9oYXZlX2Rsc3ltPXllcworCWNmX2hhdmVfbGliZGw9eWVzXSldKQorCitpZiB0ZXN0ICIkY2ZfaGF2ZV9kbHN5bSIgPSB5ZXMgOyB0aGVuCisJdGVzdCAiJGNmX2hhdmVfbGliZGwiID0geWVzICYmIExJQlM9Ii1sZGwgJExJQlMiCisKKwlBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBhYmxlIHRvIGxpbmsgdG8gZGwqKCkgZnVuY3Rpb25zKQorCUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8ZGxmY24uaD5dLFsKKwkJdm9pZCAqb2JqOworCQlpZiAoKG9iaiA9IGRsb3BlbigiZmlsZW5hbWUiLCAwKSkgIT0gMCkgeworCQkJaWYgKGRsc3ltKG9iaiwgInN5bWJvbG5hbWUiKSA9PSAwKSB7CisJCQlkbGNsb3NlKG9iaik7CisJCQl9CisJCX1dLFsKKwkJQUNfREVGSU5FKEhBVkVfTElCREwpXSxbCisJCUFDX01TR19FUlJPUihDYW5ub3QgbGluayB0ZXN0IHByb2dyYW0gZm9yIGxpYmRsKV0pCisJQUNfTVNHX1JFU1VMVChvaykKK2Vsc2UKKwlBQ19NU0dfRVJST1IoQ2Fubm90IGZpbmQgZGxzeW0gZnVuY3Rpb24pCitmaQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GVU5DX01FTU1PVkUgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDA2LzEyLzE2IDEyOjMzOjMwCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIG1lbW1vdmUsIG9yIGEgYmNvcHkgdGhhdCBjYW4gaGFuZGxlIG92ZXJsYXBwaW5nIGNvcHkuICBJZiBuZWl0aGVyCitkbmwgaXMgZm91bmQsIGFkZCBvdXIgb3duIHZlcnNpb24gb2YgbWVtbW92ZSB0byB0aGUgbGlzdCBvZiBvYmplY3RzLgorQUNfREVGVU4oW0NGX0ZVTkNfTUVNTU9WRV0sCitbCitBQ19DSEVDS19GVU5DKG1lbW1vdmUsLFsKK0FDX0NIRUNLX0ZVTkMoYmNvcHksWworCUFDX0NBQ0hFX0NIRUNLKGlmIGJjb3B5IGRvZXMgb3ZlcmxhcHBpbmcgbW92ZXMsY2ZfY3ZfZ29vZF9iY29weSxbCisJCUFDX1RSWV9SVU4oWworaW50IG1haW4oKSB7CisJc3RhdGljIGNoYXIgZGF0YVtdID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXd3eHl6IjsKKwljaGFyIHRlbXBbNDBdOworCWJjb3B5KGRhdGEsIHRlbXAsIHNpemVvZihkYXRhKSk7CisJYmNvcHkodGVtcCsxMCwgdGVtcCwgMTUpOworCWJjb3B5KHRlbXArNSwgdGVtcCsxNSwgMTApOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0gKHN0cmNtcCh0ZW1wLCAia2xtbm9wcXJzdHV3d3h5cHFyc3R1d3d4eXoiKSk7Cit9CisJCV0sCisJCVtjZl9jdl9nb29kX2Jjb3B5PXllc10sCisJCVtjZl9jdl9nb29kX2Jjb3B5PW5vXSwKKwkJW2NmX2N2X2dvb2RfYmNvcHk9dW5rbm93bl0pCisJCV0pCisJXSxbY2ZfY3ZfZ29vZF9iY29weT1ub10pCisJaWYgdGVzdCAiJGNmX2N2X2dvb2RfYmNvcHkiID0geWVzIDsgdGhlbgorCQlBQ19ERUZJTkUoVVNFX09LX0JDT1BZKQorCWVsc2UKKwkJQUNfREVGSU5FKFVTRV9NWV9NRU1NT1ZFKQorCWZpCitdKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfRlVOQ19OQU5PU0xFRVAgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA2LzEyLzE2IDEyOjMzOjMwCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgZXhpc3RlbmNlIG9mIHdvcmthYmxlIG5hbm9zbGVlcCgpIGZ1bmN0aW9uLiAgU29tZSBzeXN0ZW1zLCBlLmcuLAorZG5sIEFJWCA0LngsIHByb3ZpZGUgYSBub24td29ya2luZyB2ZXJzaW9uLgorQUNfREVGVU4oW0NGX0ZVTkNfTkFOT1NMRUVQXSxbCitBQ19DQUNIRV9DSEVDSyhpZiBuYW5vc2xlZXAgcmVhbGx5IHdvcmtzLGNmX2N2X2Z1bmNfbmFub3NsZWVwLFsKK0FDX1RSWV9SVU4oWworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKK2ludCBtYWluKCkgeworCXN0cnVjdCB0aW1lc3BlYyB0czEsIHRzMjsKKwlpbnQgY29kZTsKKwl0czEudHZfc2VjICA9IDA7CisJdHMxLnR2X25zZWMgPSA3NTAwMDAwMDA7CisJdHMyLnR2X3NlYyAgPSAwOworCXRzMi50dl9uc2VjID0gMDsKKwllcnJubyA9IDA7CisJY29kZSA9IG5hbm9zbGVlcCgmdHMxLCAmdHMyKTsgLyogb24gZmFpbHVyZSBlcnJubyBpcyBFTk9TWVMuICovCisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufShjb2RlICE9IDApOworfQorXSwKKwlbY2ZfY3ZfZnVuY19uYW5vc2xlZXA9eWVzXSwKKwlbY2ZfY3ZfZnVuY19uYW5vc2xlZXA9bm9dLAorCVtjZl9jdl9mdW5jX25hbm9zbGVlcD11bmtub3duXSldKQorCit0ZXN0ICIkY2ZfY3ZfZnVuY19uYW5vc2xlZXAiID0gInllcyIgJiYgQUNfREVGSU5FKEhBVkVfTkFOT1NMRUVQKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GVU5DX09QRU5QVFkgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA4LzA0LzEyIDE5OjQ5OjAxCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIG9wZW5wdHkoKSBmdW5jdGlvbiwgYWxvbmcgd2l0aCA8cHR5Lmg+IGhlYWRlci4gIEl0IG1heSBuZWVkIHRoZQorZG5sICJ1dGlsIiBsaWJyYXJ5IGFzIHdlbGwuCitBQ19ERUZVTihbQ0ZfRlVOQ19PUEVOUFRZXSwKK1sKK0FDX0NIRUNLX0xJQih1dGlsLG9wZW5wdHksY2ZfY3ZfbGliX3V0aWw9eWVzLGNmX2N2X2xpYl91dGlsPW5vKQorQUNfQ0FDSEVfQ0hFQ0soZm9yIG9wZW5wdHkgaGVhZGVyLGNmX2N2X2Z1bmNfb3BlbnB0eSxbCisgICAgY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICB0ZXN0ICRjZl9jdl9saWJfdXRpbCA9IHllcyAmJiBMSUJTPSItbHV0aWwgJExJQlMiCisgICAgZm9yIGNmX2hlYWRlciBpbiBwdHkuaCBsaWJ1dGlsLmggdXRpbC5oCisgICAgZG8KKyAgICBBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8JGNmX2hlYWRlcj4KK10sWworICAgIGludCB4ID0gb3BlbnB0eSgoaW50ICopMCwgKGludCAqKTAsIChjaGFyICopMCwKKyAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRlcm1pb3MgKikwLCAoc3RydWN0IHdpbnNpemUgKikwKTsKK10sWworICAgICAgICBjZl9jdl9mdW5jX29wZW5wdHk9JGNmX2hlYWRlcgorICAgICAgICBicmVhaworXSxbCisgICAgICAgIGNmX2N2X2Z1bmNfb3BlbnB0eT1ubworXSkKKyAgICBkb25lCisgICAgTElCUz0iJGNmX3NhdmVfTElCUyIKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZVTkNfUE9MTCB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTI6MzM6MzAKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBTZWUgaWYgdGhlIHBvbGwgZnVuY3Rpb24gcmVhbGx5IHdvcmtzLiAgU29tZSBwbGF0Zm9ybXMgaGF2ZSBwb2xsKCksIGJ1dAorZG5sIGl0IGRvZXMgbm90IHdvcmsgZm9yIHRlcm1pbmFscyBvciBmaWxlcy4KK0FDX0RFRlVOKFtDRl9GVU5DX1BPTExdLFsKK0FDX0NBQ0hFX0NIRUNLKGlmIHBvbGwgcmVhbGx5IHdvcmtzLGNmX2N2X3dvcmtpbmdfcG9sbCxbCitBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfUE9MTF9ICisjaW5jbHVkZSA8cG9sbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2VuZGlmCitpbnQgbWFpbigpIHsKKwlzdHJ1Y3QgcG9sbGZkIG15ZmRzOworCWludCByZXQ7CisKKwlteWZkcy5mZCA9IDA7CisJbXlmZHMuZXZlbnRzID0gUE9MTElOOworCisJcmV0ID0gcG9sbCgmbXlmZHMsIDEsIDEwMCk7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufShyZXQgIT0gMCk7Cit9XSwKKwlbY2ZfY3Zfd29ya2luZ19wb2xsPXllc10sCisJW2NmX2N2X3dvcmtpbmdfcG9sbD1ub10sCisJW2NmX2N2X3dvcmtpbmdfcG9sbD11bmtub3duXSldKQordGVzdCAiJGNmX2N2X3dvcmtpbmdfcG9sbCIgPSAieWVzIiAmJiBBQ19ERUZJTkUoSEFWRV9XT1JLSU5HX1BPTEwpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZVTkNfVEVSTUlPUyB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDAvMDcvMjIgMjM6Mzc6MjQKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBTb21lIG9sZC9icm9rZW4gdmFyaWF0aW9ucyBkZWZpbmUgdGNnZXRhdHRyKCkgb25seSBhcyBhIG1hY3JvIGluCitkbmwgdGVybWlvKHMpLmgKK0FDX0RFRlVOKFtDRl9GVU5DX1RFUk1JT1NdLFsKK0FDX1JFUVVJUkUoW0NGX1NUUlVDVF9URVJNSU9TXSkKK0FDX0NBQ0hFX0NIRUNLKGZvciB0Y2dldGF0dHIsIGNmX2N2X2hhdmVfdGNnZXRhdHRyLFsKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSAorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNkZWZpbmUgVFRZIHN0cnVjdCB0ZXJtaW9zCisjZWxzZQorI2lmZGVmIEhBVkVfVEVSTUlPX0gKKyNpbmNsdWRlIDx0ZXJtaW8uaD4KKyNkZWZpbmUgVFRZIHN0cnVjdCB0ZXJtaW8KKyNlbmRpZgorI2VuZGlmCitdLFsKK1RUWSBmb287Cit0Y2dldGF0dHIoMSwgJmZvbyk7XSwKK1tjZl9jdl9oYXZlX3RjZ2V0YXR0cj15ZXNdLAorW2NmX2N2X2hhdmVfdGNnZXRhdHRyPW5vXSldKQordGVzdCAiJGNmX2N2X2hhdmVfdGNnZXRhdHRyIiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9UQ0dFVEFUVFIpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZVTkNfVlNTQ0FORiB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDEvMTIvMTkgMDA6NTA6MTAKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgdnNzY2FuZigpIGZ1bmN0aW9uLCB3aGljaCBpcyBpbiBjOXggYnV0IGdlbmVyYWxseSBub3QgaW4gZWFybGllcgorZG5sIHZlcnNpb25zIG9mIEMuICBJdCBpcyBpbiB0aGUgR05VIEMgbGlicmFyeSwgYW5kIGNhbiBvZnRlbiBiZSBzaW11bGF0ZWQgYnkKK2RubCBvdGhlciBmdW5jdGlvbnMuCitBQ19ERUZVTihbQ0ZfRlVOQ19WU1NDQU5GXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGZvciB2c3NjYW5mIGZ1bmN0aW9uIG9yIHdvcmthcm91bmQsY2ZfY3ZfZnVuY192c3NjYW5mLFsKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPl0sWworCXZhX2xpc3QgYXA7CisJdnNzY2FuZigiZnJvbSIsICIlZCIsIGFwKV0sW2NmX2N2X2Z1bmNfdnNzY2FuZj12c3NjYW5mXSxbCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD5dLFsKKyAgICBGSUxFIHN0cmJ1ZjsKKyAgICBjaGFyICpzdHIgPSAiZnJvbSI7CisKKyAgICBzdHJidWYuX2ZsYWcgPSBfSU9SRUFEOworICAgIHN0cmJ1Zi5fcHRyID0gc3RyYnVmLl9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKikgc3RyOworICAgIHN0cmJ1Zi5fY250ID0gc3RybGVuKHN0cik7CisgICAgc3RyYnVmLl9maWxlID0gX05GSUxFOworICAgIHJldHVybiAodmZzY2FuZigmc3RyYnVmLCAiJWQiLCBhcCkpXSxbY2ZfY3ZfZnVuY192c3NjYW5mPXZmc2NhbmZdLFsKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPl0sWworICAgIEZJTEUgc3RyYnVmOworICAgIGNoYXIgKnN0ciA9ICJmcm9tIjsKKworICAgIHN0cmJ1Zi5fZmxhZyA9IF9JT1JFQUQ7CisgICAgc3RyYnVmLl9wdHIgPSBzdHJidWYuX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKSBzdHI7CisgICAgc3RyYnVmLl9jbnQgPSBzdHJsZW4oc3RyKTsKKyAgICBzdHJidWYuX2ZpbGUgPSBfTkZJTEU7CisgICAgcmV0dXJuIChfZG9zY2FuKCZzdHJidWYsICIlZCIsIGFwKSldLFtjZl9jdl9mdW5jX3Zzc2NhbmY9X2Rvc2Nhbl0sWworY2ZfY3ZfZnVuY192c3NjYW5mPW5vXSldKV0pXSkKKworY2FzZSAkY2ZfY3ZfZnVuY192c3NjYW5mIGluICModmkKK3Zzc2NhbmYpIEFDX0RFRklORShIQVZFX1ZTU0NBTkYpOzsgIyh2aQordmZzY2FuZikgQUNfREVGSU5FKEhBVkVfVkZTQ0FORik7OyAjKHZpCitfZG9zY2FuKSBBQ19ERUZJTkUoSEFWRV9fRE9TQ0FOKTs7Citlc2FjCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR0NDX0FUVFJJQlVURVMgdmVyc2lvbjogMTEgdXBkYXRlZDogMjAwNy8wNy8yOSAwOTo1NToxMgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBmb3IgYXZhaWxhYmlsaXR5IG9mIHVzZWZ1bCBnY2MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzIHRvIHF1aWV0CitkbmwgY29tcGlsZXIgd2FybmluZ3MuICBUaG91Z2ggdXNlZnVsLCBub3QgYWxsIGFyZSBzdXBwb3J0ZWQgLS0gYW5kIGNvbnRyYXJ5CitkbmwgdG8gZG9jdW1lbnRhdGlvbiwgdW5yZWNvZ25pemVkIGRpcmVjdGl2ZXMgY2F1c2Ugb2xkZXIgY29tcGlsZXJzIHRvIGJhcmYuCitBQ19ERUZVTihbQ0ZfR0NDX0FUVFJJQlVURVNdLAorWworaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KK2NhdCA+IGNvbmZ0ZXN0LmkgPDxFT0YKKyNpZm5kZWYgR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfTk9SRVRVUk4KKyNkZWZpbmUgR0NDX05PUkVUVVJOIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2lmbmRlZiBHQ0NfVU5VU0VECisjZGVmaW5lIEdDQ19VTlVTRUQgLyogbm90aGluZyAqLworI2VuZGlmCitFT0YKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ0MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzXSkKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiJHthc19tZS1jb25maWd1cmV9IgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSAiY29uZnRlc3QuaCIKKyNpbmNsdWRlICJjb25mdGVzdC5pIgorI2lmCUdDQ19QUklOVEYKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSAvKm5vdGhpbmcqLworI2VuZGlmCisjaWYJR0NDX1NDQU5GCisjZGVmaW5lIEdDQ19TQ0FORkxJS0UoZm10LHZhcikgIF9fYXR0cmlidXRlX18oKGZvcm1hdChzY2FuZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICAvKm5vdGhpbmcqLworI2VuZGlmCitleHRlcm4gdm9pZCB3b3coY2hhciAqLC4uLikgR0NDX1NDQU5GTElLRSgxLDIpOworZXh0ZXJuIHZvaWQgb29wcyhjaGFyICosLi4uKSBHQ0NfUFJJTlRGTElLRSgxLDIpIEdDQ19OT1JFVFVSTjsKK2V4dGVybiB2b2lkIGZvbyh2b2lkKSBHQ0NfTk9SRVRVUk47CitpbnQgbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W1tdXSBHQ0NfVU5VU0VEKSB7IHJldHVybiAwOyB9CitFT0YKKwlmb3IgY2ZfYXR0cmlidXRlIGluIHNjYW5mIHByaW50ZiB1bnVzZWQgbm9yZXR1cm4KKwlkbworCQlDRl9VUFBFUihjZl9BVFRSSUJVVEUsJGNmX2F0dHJpYnV0ZSkKKwkJY2ZfZGlyZWN0aXZlPSJfX2F0dHJpYnV0ZV9fKCgkY2ZfYXR0cmlidXRlKSkiCisJCWVjaG8gImNoZWNraW5nIGZvciAkQ0MgJGNmX2RpcmVjdGl2ZSIgMT4mQUNfRkRfQ0MKKwkJY2FzZSAkY2ZfYXR0cmlidXRlIGluCisJCXNjYW5mfHByaW50ZikKKwkJY2F0ID5jb25mdGVzdC5oIDw8RU9GCisjZGVmaW5lIEdDQ18kY2ZfQVRUUklCVVRFIDEKK0VPRgorCQkJOzsKKwkJKikKKwkJY2F0ID5jb25mdGVzdC5oIDw8RU9GCisjZGVmaW5lIEdDQ18kY2ZfQVRUUklCVVRFICRjZl9kaXJlY3RpdmUKK0VPRgorCQkJOzsKKwkJZXNhYworCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uICRjZl9hdHRyaWJ1dGUpCisJCQljYXQgY29uZnRlc3QuaCA+PmNvbmZkZWZzLmgKKwkJZmkKKwlkb25lCitlbHNlCisJZmdyZXAgZGVmaW5lIGNvbmZ0ZXN0LmkgPj5jb25mZGVmcy5oCitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR0NDX1ZFUlNJT04gdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA1LzA4LzI3IDA5OjUzOjQyCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIHZlcnNpb24gb2YgZ2NjCitBQ19ERUZVTihbQ0ZfR0NDX1ZFUlNJT05dLFsKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorR0NDX1ZFUlNJT049bm9uZQoraWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKHZlcnNpb24gb2YgJENDKQorCUdDQ19WRVJTSU9OPSJgJHtDQ30gLS12ZXJzaW9ufCBzZWQgLWUgJzIsJGQnIC1lICdzL14uKihHQ0MpIC8vJyAtZSAncy9eW1teMC05Ll1dKi8vJyAtZSAncy9bW14wLTkuXV0uKi8vJ2AiCisJdGVzdCAteiAiJEdDQ19WRVJTSU9OIiAmJiBHQ0NfVkVSU0lPTj11bmtub3duCisJQUNfTVNHX1JFU1VMVCgkR0NDX1ZFUlNJT04pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HQ0NfV0FSTklOR1MgdmVyc2lvbjogMjMgdXBkYXRlZDogMjAwOC8wNy8yNiAxNzo1NDowMgorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB1c2VmdWwgd2FybmluZyBvcHRpb25zLiAgVGhlcmUncyBhIGZldyB0aGF0Citkbmwgd2UgZG9uJ3QgdXNlLCBzaW1wbHkgYmVjYXVzZSB0aGV5J3JlIHRvbyBub2lzeToKK2RubAorZG5sCS1XY29udmVyc2lvbiAodXNlZnVsIGluIG9sZGVyIHZlcnNpb25zIG9mIGdjYywgYnV0IG5vdCBpbiBnY2MgMi43LngpCitkbmwJLVdyZWR1bmRhbnQtZGVjbHMgKHN5c3RlbSBoZWFkZXJzIG1ha2UgdGhpcyB0b28gbm9pc3kpCitkbmwJLVd0cmFkaXRpb25hbCAoY29tYmluZXMgdG9vIG1hbnkgdW5yZWxhdGVkIG1lc3NhZ2VzLCBvbmx5IGEgZmV3IHVzZWZ1bCkKK2RubAktV3dyaXRlLXN0cmluZ3MgKHRvbyBub2lzeSwgYnV0IHNob3VsZCByZXZpZXcgb2NjYXNpb25hbGx5KS4gIFRoaXMKK2RubAkJaXMgZW5hYmxlZCBmb3IgbmN1cnNlcyB1c2luZyAiLS1lbmFibGUtY29uc3QiLgorZG5sCS1wZWRhbnRpYworZG5sCitkbmwgUGFyYW1ldGVyOgorZG5sCSQxIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgZ2NjIHdhcm5pbmcgZmxhZ3MgdGhhdCBhIHBhcnRpY3VsYXIKK2RubAkJYXBwbGljYXRpb24gbWlnaHQgd2FudCB0byB1c2UsIGUuZy4sICJuby11bnVzZWQiIGZvcgorZG5sCQktV25vLXVudXNlZAorZG5sIFNwZWNpYWw6CitkbmwJSWYgJHdpdGhfZXh0X2NvbnN0IGlzICJ5ZXMiLCBhZGQgYSBjaGVjayBmb3IgLVd3cml0ZS1zdHJpbmdzCitkbmwKK0FDX0RFRlVOKFtDRl9HQ0NfV0FSTklOR1NdLAorWworQUNfUkVRVUlSRShbQ0ZfR0NDX1ZFUlNJT05dKQorQ0ZfSU5URUxfQ09NUElMRVIoR0NDLElOVEVMX0NPTVBJTEVSLENGTEFHUykKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICIke2FzX21lLWNvbmZpZ3VyZX0iCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltbXV0pIHsgcmV0dXJuIChhcmd2W1thcmdjLTFdXSA9PSAwKSA7IH0KK0VPRgorCitpZiB0ZXN0ICIkSU5URUxfQ09NUElMRVIiID0geWVzCit0aGVuCisjIFRoZSAiLXdkWFhYIiBvcHRpb25zIHN1cHByZXNzIHdhcm5pbmdzOgorIyByZW1hcmsgIzE0MTk6IGV4dGVybmFsIGRlY2xhcmF0aW9uIGluIHByaW1hcnkgc291cmNlIGZpbGUKKyMgcmVtYXJrICMxNjgyOiBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODM6IGV4cGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4NDogY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxOTM6IHplcm8gdXNlZCBmb3IgdW5kZWZpbmVkIHByZXByb2Nlc3NpbmcgaWRlbnRpZmllcgorIyByZW1hcmsgIzU5MzogdmFyaWFibGUgImN1cnNfc2JfbGVmdF9hcnJvdyIgd2FzIHNldCBidXQgbmV2ZXIgdXNlZAorIyByZW1hcmsgIzgxMDogY29udmVyc2lvbiBmcm9tICJpbnQiIHRvICJEaW1lbnNpb249e3Vuc2lnbmVkIHNob3J0fSIgbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cworIyByZW1hcmsgIzg2OTogcGFyYW1ldGVyICJ0dyIgd2FzIG5ldmVyIHJlZmVyZW5jZWQKKyMgcmVtYXJrICM5ODE6IG9wZXJhbmRzIGFyZSBldmFsdWF0ZWQgaW4gdW5zcGVjaWZpZWQgb3JkZXIKKyMgd2FybmluZyAjMjY5OiBpbnZhbGlkIGZvcm1hdCBzdHJpbmcgY29udmVyc2lvbgorCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ0Mgd2FybmluZyBvcHRpb25zXSkKKwljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlFWFRSQV9DRkxBR1M9Ii1XYWxsIgorCWZvciBjZl9vcHQgaW4gXAorCQl3ZDE0MTkgXAorCQl3ZDE2ODIgXAorCQl3ZDE2ODMgXAorCQl3ZDE2ODQgXAorCQl3ZDE5MyBcCisJCXdkMjc5IFwKKwkJd2Q1OTMgXAorCQl3ZDgxMCBcCisJCXdkODY5IFwKKwkJd2Q5ODEKKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uIC0kY2Zfb3B0KQorCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKworZWxpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorCUFDX0NIRUNLSU5HKFtmb3IgJENDIHdhcm5pbmcgb3B0aW9uc10pCisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItVyAtV2FsbCIKKwljZl93YXJuX0NPTlNUPSIiCisJdGVzdCAiJHdpdGhfZXh0X2NvbnN0IiA9IHllcyAmJiBjZl93YXJuX0NPTlNUPSJXd3JpdGUtc3RyaW5ncyIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJV2JhZC1mdW5jdGlvbi1jYXN0IFwKKwkJV2Nhc3QtYWxpZ24gXAorCQlXY2FzdC1xdWFsIFwKKwkJV2lubGluZSBcCisJCVdtaXNzaW5nLWRlY2xhcmF0aW9ucyBcCisJCVdtaXNzaW5nLXByb3RvdHlwZXMgXAorCQlXbmVzdGVkLWV4dGVybnMgXAorCQlXcG9pbnRlci1hcml0aCBcCisJCVdzaGFkb3cgXAorCQlXc3RyaWN0LXByb3RvdHlwZXMgXAorCQlXdW5kZWYgJGNmX3dhcm5fQ09OU1QgJDEKKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uIC0kY2Zfb3B0KQorCQkJY2FzZSAkY2Zfb3B0IGluICModmkKKwkJCVdjYXN0LXF1YWwpICModmkKKwkJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1EWFRTVFJJTkdERUZJTkVTIgorCQkJCTs7CisJCQlXaW5saW5lKSAjKHZpCisJCQkJY2FzZSAkR0NDX1ZFUlNJT04gaW4KKwkJCQlbWzM0XV0uKikKKwkJCQkJQ0ZfVkVSQk9TRShmZWF0dXJlIGlzIGJyb2tlbiBpbiBnY2MgJEdDQ19WRVJTSU9OKQorCQkJCQljb250aW51ZTs7CisJCQkJZXNhYworCQkJCTs7CisJCQllc2FjCisJCQlFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWZpCisJZG9uZQorCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitBQ19TVUJTVChFWFRSQV9DRkxBR1MpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dOQVRfVFJZX0xJTksgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA0LzA4LzIxIDE5OjAyOjA4CitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSB0aGF0IGEgdGVzdCBwcm9ncmFtIGNvbXBpbGVzL2xpbmtzIHdpdGggR05BVC4KK2RubCAkY2ZfYWRhX21ha2UgaXMgc2V0IHRvIHRoZSBwcm9ncmFtIHRoYXQgY29tcGlsZXMvbGlua3MKK2RubCAkQURBRkxBR1MgbWF5IGJlIHNldCB0byB0aGUgR05BVCBmbGFncy4KK2RubAorZG5sICQxIGlzIHRoZSB0ZXh0IG9mIHRoZSBzcGVjCitkbmwgJDIgaXMgdGhlIHRleHQgb2YgdGhlIGJvZHkKK2RubCAkMyBpcyB0aGUgc2hlbGwgY29tbWFuZCB0byBleGVjdXRlIGlmIHN1Y2Nlc3NmdWwKK2RubCAkNCBpcyB0aGUgc2hlbGwgY29tbWFuZCB0byBleGVjdXRlIGlmIG5vdCBzdWNjZXNzZnVsCitBQ19ERUZVTihbQ0ZfR05BVF9UUllfTElOS10sCitbCitybSAtZiBjb25mdGVzdCoKK2NhdCA+PmNvbmZ0ZXN0LmFkcyA8PENGX0VPRgorJDEKK0NGX0VPRgorY2F0ID4+Y29uZnRlc3QuYWRiIDw8Q0ZfRU9GCiskMgorQ0ZfRU9GCitpZiAoICRjZl9hZGFfbWFrZSAkQURBRkxBR1MgY29uZnRlc3QgMT4mQUNfRkRfQ0MgMj4mMSApIDsgdGhlbgoraWZlbHNlKCQzLCwgICAgICA6LFsgICAgICAkM10pCitpZmVsc2UoJDQsLCxbZWxzZQorICAgJDRdKQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HTkFUX1RSWV9SVU4gdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA0LzA4LzIxIDE5OjAyOjA4CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IHRoYXQgYSB0ZXN0IHByb2dyYW0gY29tcGlsZXMgYW5kIHJ1bnMgd2l0aCBHTkFUCitkbmwgJGNmX2FkYV9tYWtlIGlzIHNldCB0byB0aGUgcHJvZ3JhbSB0aGF0IGNvbXBpbGVzL2xpbmtzCitkbmwgJEFEQUZMQUdTIG1heSBiZSBzZXQgdG8gdGhlIEdOQVQgZmxhZ3MuCitkbmwKK2RubCAkMSBpcyB0aGUgdGV4dCBvZiB0aGUgc3BlYworZG5sICQyIGlzIHRoZSB0ZXh0IG9mIHRoZSBib2R5CitkbmwgJDMgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBzdWNjZXNzZnVsCitkbmwgJDQgaXMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpZiBub3Qgc3VjY2Vzc2Z1bAorQUNfREVGVU4oW0NGX0dOQVRfVFJZX1JVTl0sCitbCitybSAtZiBjb25mdGVzdCoKK2NhdCA+PmNvbmZ0ZXN0LmFkcyA8PENGX0VPRgorJDEKK0NGX0VPRgorY2F0ID4+Y29uZnRlc3QuYWRiIDw8Q0ZfRU9GCiskMgorQ0ZfRU9GCitpZiAoICRjZl9hZGFfbWFrZSAkQURBRkxBR1MgY29uZnRlc3QgMT4mQUNfRkRfQ0MgMj4mMSApIDsgdGhlbgorICAgaWYgKCAuL2NvbmZ0ZXN0IDE+JkFDX0ZEX0NDIDI+JjEgKSA7IHRoZW4KK2lmZWxzZSgkMywsICAgICAgOixbICAgICAgJDNdKQoraWZlbHNlKCQ0LCwsWyAgIGVsc2UKKyAgICAgICQ0XSkKKyAgIGZpCitpZmVsc2UoJDQsLCxbZWxzZQorICAgJDRdKQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HTkFUX1ZFUlNJT04gdmVyc2lvbjogMTIgdXBkYXRlZDogMjAwNi8xMC8xNCAxNToyMzoxNQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSB2ZXJzaW9uIG9mIEdOQVQuCitBQ19ERUZVTihbQ0ZfR05BVF9WRVJTSU9OXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3IgZ25hdCB2ZXJzaW9uKQorY2ZfZ25hdF92ZXJzaW9uPWAke2NmX2FkYV9tYWtlLWduYXRtYWtlfSAtdiAyPiYxIHwgZ3JlcCAnW1swLTldXS5bWzAtOV1dW1swLTldXSonIHxcCisgIHNlZCAtZSAnMiwkZCcgLWUgJ3MvW1teMC05IFwuXV0vL2cnIC1lICdzL15bWyBdXSovLycgLWUgJ3MvIC4qLy8nYAorQUNfTVNHX1JFU1VMVCgkY2ZfZ25hdF92ZXJzaW9uKQorCitjYXNlICRjZl9nbmF0X3ZlcnNpb24gaW4KKyAgMy4xW1sxLTldXSp8My5bWzItOV1dKnxbWzQtOV1dLiopCisgICAgY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9eWVzCisgICAgOzsKKyAgKikgZWNobyBVbnN1cHBvcnRlZCBHTkFUIHZlcnNpb24gJGNmX2duYXRfdmVyc2lvbi4gUmVxdWlyZWQgaXMgMy4xMSBvciBiZXR0ZXIuIERpc2FibGluZyBBZGE5NSBiaW5kaW5nLgorICAgICBjZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworICAgICA7OworZXNhYworY2FzZSAkY2ZfZ25hdF92ZXJzaW9uIGluCisgIDMuW1sxLTldXSp8W1s0LTldXS4qKQorICAgICAgY2ZfY29tcGlsZV9nZW5lcmljcz1nZW5lcmljcworICAgICAgY2ZfZ2VuZXJpY19vYmplY3RzPSJcJHtHRU5PQkpTfSIKKyAgICAgIDs7CisgICopICBjZl9jb21waWxlX2dlbmVyaWNzPQorICAgICAgY2ZfZ2VuZXJpY19vYmplY3RzPQorICAgICAgOzsKK2VzYWMKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR05VX1NPVVJDRSB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDUvMDcvMDkgMTM6MjM6MDcKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UgbXVzdCBkZWZpbmUgX0dOVV9TT1VSQ0UgdG8gZ2V0IGEgcmVhc29uYWJsZSB2YWx1ZSBmb3IKK2RubCBfWE9QRU5fU09VUkNFLCB1cG9uIHdoaWNoIG1hbnkgUE9TSVggZGVmaW5pdGlvbnMgZGVwZW5kLiAgVGhpcyBpcyBhIGRlZmVjdAorZG5sIChvciBtaXNmZWF0dXJlKSBvZiBnbGliYzIsIHdoaWNoIGJyZWFrcyBwb3J0YWJpbGl0eSBvZiBtYW55IGFwcGxpY2F0aW9ucywKK2RubCBzaW5jZSBpdCBpcyBpbnRlcndvdmVuIHdpdGggR05VIGV4dGVuc2lvbnMuCitkbmwKK2RubCBXZWxsLCB5ZXMgd2UgY291bGQgd29yayBhcm91bmQgaXQuLi4KK0FDX0RFRlVOKFtDRl9HTlVfU09VUkNFXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFLGNmX2N2X2dudV9zb3VyY2UsWworQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfZ251X3NvdXJjZT1ub10sCisJW2NmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9HTlVfU09VUkNFIgorCSBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X2dudV9zb3VyY2U9bm9dLAorCVtjZl9jdl9nbnVfc291cmNlPXllc10pCisJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCV0pCitdKQordGVzdCAiJGNmX2N2X2dudV9zb3VyY2UiID0geWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR1BQX0xJQlJBUlkgdmVyc2lvbjogOCB1cGRhdGVkOiAyMDAzLzAyLzAyIDAxOjQxOjQ2CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBJZiB3ZSdyZSB0cnlpbmcgdG8gdXNlIGcrKywgdGVzdCBpZiBsaWJnKysgaXMgaW5zdGFsbGVkIChhIHJhdGhlciBjb21tb24KK2RubCBwcm9ibGVtIDotKS4gIElmIHdlIGhhdmUgdGhlIGNvbXBpbGVyIGJ1dCBubyBsaWJyYXJ5LCB3ZSdsbCBiZSBhYmxlIHRvCitkbmwgY29uZmlndXJlLCBidXQgd29uJ3QgYmUgYWJsZSB0byBidWlsZCB0aGUgYysrIGRlbW8gcHJvZ3JhbS4KK0FDX0RFRlVOKFtDRl9HUFBfTElCUkFSWV0sCitbCitjZl9jeHhfbGlicmFyeT11bmtub3duCitjYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCitvczIqKSAjKHZpCisJY2ZfZ3BwX2xpYm5hbWU9Z3BwCisJOzsKKyopCisJY2ZfZ3BwX2xpYm5hbWU9ZysrCisJOzsKK2VzYWMKK2lmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGliJGNmX2dwcF9saWJuYW1lXSkKKwljZl9zYXZlPSIkTElCUyIKKwlMSUJTPSIkTElCUyAtbCRjZl9ncHBfbGlibmFtZSIKKwlBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8JGNmX2dwcF9saWJuYW1lL2J1aWx0aW4uaD4KKwldLAorCVt0d29fYXJnX2Vycm9yX2hhbmRsZXJfdCBmb28yID0gbGliX2Vycm9yX2hhbmRsZXJdLAorCVtjZl9jeHhfbGlicmFyeT15ZXMKKwkgQ1hYTElCUz0iJENYWExJQlMgLWwkY2ZfZ3BwX2xpYm5hbWUiCisJIGlmIHRlc3QgIiRjZl9ncHBfbGlibmFtZSIgPSBjcHAgOyB0aGVuCisJICAgIEFDX0RFRklORShIQVZFX0dQUF9CVUlMVElOX0gpCisJIGVsc2UKKwkgICAgQUNfREVGSU5FKEhBVkVfR1hYX0JVSUxUSU5fSCkKKwkgZmldLAorCVtBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8YnVpbHRpbi5oPgorCV0sCisJW3R3b19hcmdfZXJyb3JfaGFuZGxlcl90IGZvbzIgPSBsaWJfZXJyb3JfaGFuZGxlcl0sCisJW2NmX2N4eF9saWJyYXJ5PXllcworCSBDWFhMSUJTPSIkQ1hYTElCUyAtbCRjZl9ncHBfbGlibmFtZSIKKwkgQUNfREVGSU5FKEhBVkVfQlVJTFRJTl9IKV0sCisJW2NmX2N4eF9saWJyYXJ5PW5vXSldKQorCUxJQlM9IiRjZl9zYXZlIgorCUFDX01TR19SRVNVTFQoJGNmX2N4eF9saWJyYXJ5KQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR1hYX1ZFUlNJT04gdmVyc2lvbjogNSB1cGRhdGVkOiAyMDA1LzA4LzI3IDA5OjUzOjQyCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgdmVyc2lvbiBvZiBnKysKK0FDX0RFRlVOKFtDRl9HWFhfVkVSU0lPTl0sWworQUNfUkVRVUlSRShbQUNfUFJPR19DUFBdKQorR1hYX1ZFUlNJT049bm9uZQoraWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcodmVyc2lvbiBvZiBnKyspCisJR1hYX1ZFUlNJT049ImAke0NYWC1nKyt9IC0tdmVyc2lvbnwgc2VkIC1lICcyLCRkJyAtZSAncy9eLiooR0NDKSAvLycgLWUgJ3MvXltbXjAtOS5dXSovLycgLWUgJ3MvW1teMC05Ll1dLiovLydgIgorCXRlc3QgLXogIiRHWFhfVkVSU0lPTiIgJiYgR1hYX1ZFUlNJT049dW5rbm93bgorCUFDX01TR19SRVNVTFQoJEdYWF9WRVJTSU9OKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfR1hYX1dBUk5JTkdTIHZlcnNpb246IDUgdXBkYXRlZDogMjAwNS8wOC8xMyAxNDo1NDozOAorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB1c2VmdWwgd2FybmluZyBvcHRpb25zLgorZG5sCitkbmwgTW9zdCBvZiBnY2MncyBvcHRpb25zIGFwcGx5IHRvIGcrKywgZXhjZXB0OgorZG5sCS1XYmFkLWZ1bmN0aW9uLWNhc3QKK2RubAktV21pc3NpbmctZGVjbGFyYXRpb25zCitkbmwJLVduZXN0ZWQtZXh0ZXJucworZG5sCitkbmwgT21pdCBhIGZldyAoZm9yIG5vdyk6CitkbmwJLVdpbmxpbmUKK2RubAorZG5sIFBhcmFtZXRlcjoKK2RubAkkMSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIGcrKyB3YXJuaW5nIGZsYWdzIHRoYXQgYSBwYXJ0aWN1bGFyCitkbmwJCWFwcGxpY2F0aW9uIG1pZ2h0IHdhbnQgdG8gdXNlLCBlLmcuLCAibm8tdW51c2VkIiBmb3IKK2RubAkJLVduby11bnVzZWQKK2RubCBTcGVjaWFsOgorZG5sCUlmICR3aXRoX2V4dF9jb25zdCBpcyAieWVzIiwgYWRkIGEgY2hlY2sgZm9yIC1Xd3JpdGUtc3RyaW5ncworZG5sCitBQ19ERUZVTihbQ0ZfR1hYX1dBUk5JTkdTXSwKK1sKKworQ0ZfSU5URUxfQ09NUElMRVIoR1hYLElOVEVMX0NQTFVTUExVUyxDWFhGTEFHUykKKworQUNfUkVRVUlSRShbQ0ZfR1hYX1ZFUlNJT05dKQorCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQ1BMVVNQTFVTCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbW11dKSB7IHJldHVybiAoYXJndltbYXJnYy0xXV0gPT0gMCkgOyB9CitFT0YKKworaWYgdGVzdCAiJElOVEVMX0NQTFVTUExVUyIgPSB5ZXMKK3RoZW4KKyMgVGhlICItd2RYWFgiIG9wdGlvbnMgc3VwcHJlc3Mgd2FybmluZ3M6CisjIHJlbWFyayAjMTQxOTogZXh0ZXJuYWwgZGVjbGFyYXRpb24gaW4gcHJpbWFyeSBzb3VyY2UgZmlsZQorIyByZW1hcmsgIzE2ODI6IGltcGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4MzogZXhwbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjg0OiBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBzYW1lLXNpemVkIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE5MzogemVybyB1c2VkIGZvciB1bmRlZmluZWQgcHJlcHJvY2Vzc2luZyBpZGVudGlmaWVyCisjIHJlbWFyayAjNTkzOiB2YXJpYWJsZSAiY3Vyc19zYl9sZWZ0X2Fycm93IiB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCisjIHJlbWFyayAjODEwOiBjb252ZXJzaW9uIGZyb20gImludCIgdG8gIkRpbWVuc2lvbj17dW5zaWduZWQgc2hvcnR9IiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzCisjIHJlbWFyayAjODY5OiBwYXJhbWV0ZXIgInR3IiB3YXMgbmV2ZXIgcmVmZXJlbmNlZAorIyByZW1hcmsgIzk4MTogb3BlcmFuZHMgYXJlIGV2YWx1YXRlZCBpbiB1bnNwZWNpZmllZCBvcmRlcgorIyB3YXJuaW5nICMyNjk6IGludmFsaWQgZm9ybWF0IHN0cmluZyBjb252ZXJzaW9uCisKKwlBQ19DSEVDS0lORyhbZm9yICRDQyB3YXJuaW5nIG9wdGlvbnNdKQorCWNmX3NhdmVfQ1hYRkxBR1M9IiRDWFhGTEFHUyIKKwlFWFRSQV9DWFhGTEFHUz0iLVdhbGwiCisJZm9yIGNmX29wdCBpbiBcCisJCXdkMTQxOSBcCisJCXdkMTY4MiBcCisJCXdkMTY4MyBcCisJCXdkMTY4NCBcCisJCXdkMTkzIFwKKwkJd2QyNzkgXAorCQl3ZDU5MyBcCisJCXdkODEwIFwKKwkJd2Q4NjkgXAorCQl3ZDk4MQorCWRvCisJCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyAkRVhUUkFfQ1hYRkxBR1MgLSRjZl9vcHQiCisJCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgQUNfTVNHX1JFU1VMVCguLi4gLSRjZl9vcHQpCisJCQlFWFRSQV9DWFhGTEFHUz0iJEVYVFJBX0NYWEZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MiCisKK2VsaWYgdGVzdCAiJEdYWCIgPSB5ZXMKK3RoZW4KKwlBQ19DSEVDS0lORyhbZm9yICRDWFggd2FybmluZyBvcHRpb25zXSkKKwljZl9zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCisJRVhUUkFfQ1hYRkxBR1M9Ii1XIC1XYWxsIgorCWNmX2d4eF9leHRyYV93YXJuaW5ncz0iIgorCXRlc3QgIiR3aXRoX2V4dF9jb25zdCIgPSB5ZXMgJiYgY2ZfZ3h4X2V4dHJhX3dhcm5pbmdzPSJXd3JpdGUtc3RyaW5ncyIKKwljYXNlICIkR0NDX1ZFUlNJT04iIGluCisJW1sxLTJdXS4qKQorCQk7OworCSopCisJCWNmX2d4eF9leHRyYV93YXJuaW5ncz0iJGNmX2d4eF9leHRyYV93YXJuaW5ncyBXZWZmYysrIgorCQk7OworCWVzYWMKKwlmb3IgY2Zfb3B0IGluIFwKKwkJV2FiaSBcCisJCWZhYmktdmVyc2lvbj0wIFwKKwkJV292ZXJsb2FkZWQtdmlydHVhbCBcCisJCVdzaWduLXByb21vIFwKKwkJV3N5bnRoIFwKKwkJV29sZC1zdHlsZS1jYXN0IFwKKwkJV2Nhc3QtYWxpZ24gXAorCQlXY2FzdC1xdWFsIFwKKwkJV21pc3NpbmctcHJvdG90eXBlcyBcCisJCVdwb2ludGVyLWFyaXRoIFwKKwkJV3NoYWRvdyBcCisJCVdzdHJpY3QtcHJvdG90eXBlcyBcCisJCVd1bmRlZiAkY2ZfZ3h4X2V4dHJhX3dhcm5pbmdzICQxCisJZG8KKwkJQ1hYRkxBR1M9IiRjZl9zYXZlX0NYWEZMQUdTICRFWFRSQV9DWFhGTEFHUyAtV2Vycm9yIC0kY2Zfb3B0IgorCQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uIC0kY2Zfb3B0KQorCQkJRVhUUkFfQ1hYRkxBR1M9IiRFWFRSQV9DWFhGTEFHUyAtJGNmX29wdCIKKwkJZWxzZQorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIEFDX01TR19SRVNVTFQoLi4uIG5vIC0kY2Zfb3B0KQorCQlmaQorCWRvbmUKKwlDWFhGTEFHUz0iJGNmX3NhdmVfQ1hYRkxBR1MiCitmaQorCitybSAtZiBjb25mdGVzdCoKK0FDX0xBTkdfUkVTVE9SRQorQUNfU1VCU1QoRVhUUkFfQ1hYRkxBR1MpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0hBU0hFRF9EQiB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDcvMTEvMjQgMTc6NDM6MzcKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBMb29rIGZvciBhbiBpbnN0YW5jZSBvZiB0aGUgQmVya2VsZXkgaGFzaGVkIGRhdGFiYXNlLgorZG5sCitkbmwgJDEgPSBvcHRpb25hbCBwYXJhbWV0ZXIsIHRvIHNwZWNpZnkgaW5zdGFsbC1wcmVmaXggZm9yIHRoZSBkYXRhYmFzZS4KK0FDX0RFRlVOKFtDRl9IQVNIRURfREJdLAorWworaWZlbHNlKFskMV0sLCxbCitjYXNlICQxIGluICModmkKK3llc3wqYWJsZSopICModmkKKyAgICA7OworKikKKyAgICBpZiB0ZXN0IC1kICIkMSIgOyB0aGVuCisgICAgICAgIENGX0FERF9JTkNESVIoJDEvaW5jbHVkZSkKKyAgICAgICAgQ0ZfQUREX0xJQkRJUigkMS9saWIpCisgICAgZmkKK2VzYWMKK10pCitBQ19DSEVDS19IRUFERVIoZGIuaCxbCitDRl9IQVNIRURfREJfVkVSU0lPTgoraWYgdGVzdCAiJGNmX2N2X2hhc2hlZF9kYl92ZXJzaW9uIiA9IHVua25vd24gOyB0aGVuCisJQUNfTVNHX0VSUk9SKENhbm5vdCBkZXRlcm1pbmUgdmVyc2lvbiBvZiBkYikKK2Vsc2UKKwlDRl9IQVNIRURfREJfTElCUworCWlmIHRlc3QgIiRjZl9jdl9oYXNoZWRfZGJfbGlicyIgPSB1bmtub3duIDsgdGhlbgorCQlBQ19NU0dfRVJST1IoQ2Fubm90IGRldGVybWluZSBsaWJyYXJ5IGZvciBkYikKKwllbGlmIHRlc3QgIiRjZl9jdl9oYXNoZWRfZGJfbGlicyIgIT0gZGVmYXVsdCA7IHRoZW4KKwkJTElCUz0iLWwkY2ZfY3ZfaGFzaGVkX2RiX2xpYnMgJExJQlMiCisJZmkKK2ZpCitdLFsKKwlBQ19NU0dfRVJST1IoQ2Fubm90IGZpbmQgZGIuaCkKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0hBU0hFRF9EQl9MSUJTIHZlcnNpb246IDggdXBkYXRlZDogMjAwOC8wOC8wNCAwNjoxODowNgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgR2l2ZW4gdGhhdCB3ZSBoYXZlIHRoZSBoZWFkZXIgYW5kIHZlcnNpb24gZm9yIGhhc2hlZCBkYXRhYmFzZSwgZmluZCB0aGUKK2RubCBsaWJyYXJ5IGluZm9ybWF0aW9uLgorQUNfREVGVU4oW0NGX0hBU0hFRF9EQl9MSUJTXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGZvciBkYiBsaWJyYXJpZXMsIGNmX2N2X2hhc2hlZF9kYl9saWJzLFsKK2NmX2N2X2hhc2hlZF9kYl9saWJzPXVua25vd24KK2ZvciBjZl9kYl9saWJzIGluICIiIGRiJGNmX2N2X2hhc2hlZF9kYl92ZXJzaW9uIGRiLSRjZl9jdl9oYXNoZWRfZGJfdmVyc2lvbiBkYiAnJworZG8KKwljZl9zYXZlX2xpYnM9IiRMSUJTIgorCWlmIHRlc3QgLW4gIiRjZl9kYl9saWJzIjsgdGhlbgorCQlMSUJTPSItbCRjZl9kYl9saWJzICRMSUJTIgorCWZpCisJQ0ZfTVNHX0xPRyhjaGVja2luZyBmb3IgbGlicmFyeSAiJGNmX2RiX2xpYnMiKQorCUFDX1RSWV9MSU5LKFsKKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8ZGIuaD4KK10sWworCWNoYXIgKnBhdGggPSAiL3RtcC9mb28iOworI2lmZGVmIERCX1ZFUlNJT05fTUFKT1IKKyNpZiBEQl9WRVJTSU9OX01BSk9SID49IDQKKwlEQiAqcmVzdWx0ID0gMDsKKwlkYl9jcmVhdGUoJnJlc3VsdCwgTlVMTCwgMCk7CisJcmVzdWx0LT5vcGVuKHJlc3VsdCwKKwkJTlVMTCwKKwkJcGF0aCwKKwkJcGF0aCwKKwkJREJfSEFTSCwKKwkJREJfQ1JFQVRFLAorCQkwNjQ0KTsKKyNlbGlmIERCX1ZFUlNJT05fTUFKT1IgPj0gMworCURCICpyZXN1bHQgPSAwOworCWRiX2NyZWF0ZSgmcmVzdWx0LCBOVUxMLCAwKTsKKwlyZXN1bHQtPm9wZW4ocmVzdWx0LAorCQlwYXRoLAorCQlwYXRoLAorCQlEQl9IQVNILAorCQlEQl9DUkVBVEUsCisJCTA2NDQpOworI2VsaWYgREJfVkVSU0lPTl9NQUpPUiA+PSAyCisJREIgKnJlc3VsdCA9IDA7CisJZGJfb3BlbihwYXRoLAorCQlEQl9IQVNILAorCQlEQl9DUkVBVEUsCisJCTA2NDQsCisJCShEQl9FTlYgKikgMCwKKwkJKERCX0lORk8gKikgMCwKKwkJJnJlc3VsdCk7CisjZW5kaWYgLyogREJfVkVSU0lPTl9NQUpPUiAqLworI2Vsc2UKKwlEQiAqcmVzdWx0ID0gZGJvcGVuKHBhdGgsCisJCSAgICAgMiwKKwkJICAgICAwNjQ0LAorCQkgICAgIERCX0hBU0gsCisJCSAgICAgMCk7CisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KHJlc3VsdCAhPSAwKQorXSxbCisJaWYgdGVzdCAtbiAiJGNmX2RiX2xpYnMiIDsgdGhlbgorCQljZl9jdl9oYXNoZWRfZGJfbGlicz0kY2ZfZGJfbGlicworCWVsc2UKKwkJY2ZfY3ZfaGFzaGVkX2RiX2xpYnM9ZGVmYXVsdAorCWZpCisJTElCUz0iJGNmX3NhdmVfbGlicyIKKwlicmVhaworXSkKKwlMSUJTPSIkY2Zfc2F2ZV9saWJzIgorZG9uZQorXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSEFTSEVEX0RCX1ZFUlNJT04gdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA3LzEyLzAxIDE1OjAxOjM3CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBHaXZlbiB0aGF0IHdlIGhhdmUgdGhlIGhlYWRlciBmaWxlIGZvciBoYXNoZWQgZGF0YWJhc2UsIGZpbmQgdGhlIHZlcnNpb24KK2RubCBpbmZvcm1hdGlvbi4KK0FDX0RFRlVOKFtDRl9IQVNIRURfREJfVkVSU0lPTl0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgdmVyc2lvbiBvZiBkYiwgY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24sWworY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb249dW5rbm93bgorCitmb3IgY2ZfZGJfdmVyc2lvbiBpbiAxIDIgMyA0IDUKK2RvCisJQ0ZfTVNHX0xPRyhjaGVja2luZyBmb3IgZGIgdmVyc2lvbiAkY2ZfZGJfdmVyc2lvbikKKwlBQ19UUllfQ09NUElMRShbCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPGRiLmg+CisKKyNpZmRlZiBEQl9WRVJTSU9OX01BSk9SCisJLyogZGIyIChEQl9WRVJTSU9OX01BSk9SPTIpIGhhcyBhbHNvIERCX1ZFUlNJT05fTUlOT1IsIHRlc3RlZCB3aXRoIDcgKi8KKyNpZiAkY2ZfZGJfdmVyc2lvbiA9PSBEQl9WRVJTSU9OX01BSk9SCisJLyogb2sgKi8KKyNlbHNlCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZWxzZQorI2lmICRjZl9kYl92ZXJzaW9uID09IDEKKwkvKiBvazogYXNzdW1pbmcgdGhpcyBpcyBEQiAxLjguNSAqLworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorXSxbREJUICpmb28gPSAwXSxbCisJY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb249JGNmX2RiX3ZlcnNpb24KKwlicmVhaworCV0pCitkb25lCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9IRUFERVJfUEFUSCB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDIvMTEvMTAgMTQ6NDY6NTkKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGhlYWRlci1maWxlCitBQ19ERUZVTihbQ0ZfSEVBREVSX1BBVEhdLAorW0NGX1NVQkRJUl9QQVRIKCQxLCQyLGluY2x1ZGUpCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgICQxPSJbJF0kMSAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyLyQyICYmICQxPSJbJF0kMSAkaW5jbHVkZWRpci8kMiIKK30KKwordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRvbGRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpciAgICAmJiAkMT0iWyRdJDEgJG9sZGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpci8kMiAmJiAkMT0iWyRdJDEgJG9sZGluY2x1ZGVkaXIvJDIiCit9CisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSEVMUF9NRVNTQUdFIHZlcnNpb246IDMgdXBkYXRlZDogMTk5OC8wMS8xNCAxMDo1NjoyMworZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIEluc2VydCB0ZXh0IGludG8gdGhlIGhlbHAtbWVzc2FnZSwgZm9yIHJlYWRhYmlsaXR5LCBmcm9tIEFDX0FSR19XSVRILgorQUNfREVGVU4oW0NGX0hFTFBfTUVTU0FHRV0sCitbQUNfRElWRVJUX0hFTFAoWyQxXSlkbmwKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSU5DTFVERV9ESVJTIHZlcnNpb246IDUgdXBkYXRlZDogMjAwNi8xMC8xNCAxNToyMzoxNQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCB0aGUgbGlzdCBvZiBpbmNsdWRlLW9wdGlvbnMgYWNjb3JkaW5nIHRvIHdoZXRoZXIgd2UncmUgYnVpbGRpbmcKK2RubCBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBvciB1c2luZyAnLS1zcmNkaXI9RElSJyBvcHRpb24uICBJZiB3ZSdyZSBidWlsZGluZworZG5sIHdpdGggZ2NjLCBkb24ndCBhcHBlbmQgdGhlIGluY2x1ZGVkaXIgaWYgaXQgaGFwcGVucyB0byBiZSAvdXNyL2luY2x1ZGUsCitkbmwgc2luY2UgdGhhdCB1c3VhbGx5IGJyZWFrcyBnY2MncyBzaGFkb3ctaW5jbHVkZXMuCitBQ19ERUZVTihbQ0ZfSU5DTFVERV9ESVJTXSwKK1sKK0NQUEZMQUdTPSItSS4gLUkuLi9pbmNsdWRlICRDUFBGTEFHUyIKK2lmIHRlc3QgIiRzcmNkaXIiICE9ICIuIjsgdGhlbgorCUNQUEZMQUdTPSItSVwke3NyY2Rpcn0vLi4vaW5jbHVkZSAkQ1BQRkxBR1MiCitmaQoraWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorZWxpZiB0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSI7IHRoZW4KKwlpZiB0ZXN0ICIkaW5jbHVkZWRpciIgPSAnJHtwcmVmaXh9L2luY2x1ZGUnIDsgdGhlbgorCQlpZiB0ZXN0ICRwcmVmaXggIT0gL3VzciA7IHRoZW4KKwkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKKwkJZmkKKwllbHNlCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKKwlmaQorZmkKK0FDX1NVQlNUKENQUEZMQUdTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9JTlRFTF9DT01QSUxFUiB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDUvMDgvMDYgMTg6Mzc6MjkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBnaXZlbiBjb21waWxlciBpcyByZWFsbHkgdGhlIEludGVsIGNvbXBpbGVyIGZvciBMaW51eC4gIEl0CitkbmwgdHJpZXMgdG8gaW1pdGF0ZSBnY2MsIGJ1dCBkb2VzIG5vdCByZXR1cm4gYW4gZXJyb3Igd2hlbiBpdCBmaW5kcyBhIG1pc21hdGNoCitkbmwgYmV0d2VlbiBwcm90b3R5cGVzLCBlLmcuLCBhcyBleGVyY2lzZWQgYnkgQ0ZfTUlTU0lOR19DSEVDSy4KK2RubAorZG5sIFRoaXMgbWFjcm8gc2hvdWxkIGJlIHJ1biAic29vbiIgYWZ0ZXIgQUNfUFJPR19DQyBvciBBQ19QUk9HX0NQTFVTUExVUywgdG8KK2RubCBlbnN1cmUgdGhhdCBpdCBpcyBub3QgbWlzdGFrZW4gZm9yIGdjYy9nKysuICBJdCBpcyBub3JtYWxseSBpbnZva2VkIGZyb20KK2RubCB0aGUgd3JhcHBlcnMgZm9yIGdjYyBhbmQgZysrIHdhcm5pbmdzLgorZG5sCitkbmwgJDEgPSBHQ0MgKGRlZmF1bHQpIG9yIEdYWAorZG5sICQyID0gSU5URUxfQ09NUElMRVIgKGRlZmF1bHQpIG9yIElOVEVMX0NQTFVTUExVUworZG5sICQzID0gQ0ZMQUdTIChkZWZhdWx0KSBvciBDWFhGTEFHUworQUNfREVGVU4oW0NGX0lOVEVMX0NPTVBJTEVSXSxbCitpZmVsc2UoJDIsLElOVEVMX0NPTVBJTEVSLFskMl0pPW5vCisKK2lmIHRlc3QgIiRpZmVsc2UoJDEsLFskMV0sR0NDKSIgPSB5ZXMgOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbgorCWxpbnV4KnxnbnUqKQorCQlBQ19NU0dfQ0hFQ0tJTkcoaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgaWZlbHNlKCQxLEdYWCxDKyssQykgY29tcGlsZXIpCisJCWNmX3NhdmVfQ0ZMQUdTPSIkaWZlbHNlKCQzLCxDRkxBR1MsWyQzXSkiCisJCWlmZWxzZSgkMywsQ0ZMQUdTLFskM10pPSIkaWZlbHNlKCQzLCxDRkxBR1MsWyQzXSkgLW5vLWdjYyIKKwkJQUNfVFJZX0NPTVBJTEUoW10sWworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKK10sW2lmZWxzZSgkMiwsSU5URUxfQ09NUElMRVIsWyQyXSk9eWVzCitjZl9zYXZlX0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIC13ZTE0NyAtbm8tZ2NjIgorXSxbXSkKKwkJaWZlbHNlKCQzLCxDRkxBR1MsWyQzXSk9IiRjZl9zYXZlX0NGTEFHUyIKKwkJQUNfTVNHX1JFU1VMVCgkaWZlbHNlKCQyLCxJTlRFTF9DT01QSUxFUixbJDJdKSkKKwkJOzsKKwllc2FjCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9JU0FTQ0lJIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMC8wOC8xMiAyMzoxODo1MgorZG5sIC0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB3ZSBoYXZlIGVpdGhlciBhIGZ1bmN0aW9uIG9yIG1hY3JvIGZvciAnaXNhc2NpaSgpJy4KK0FDX0RFRlVOKFtDRl9JU0FTQ0lJXSwKK1sKK0FDX01TR19DSEVDS0lORyhmb3IgaXNhc2NpaSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl9oYXZlX2lzYXNjaWksWworCUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8Y3R5cGUuaD5dLFtpbnQgeCA9IGlzYXNjaWkoJyAnKV0sCisJW2NmX2N2X2hhdmVfaXNhc2NpaT15ZXNdLAorCVtjZl9jdl9oYXZlX2lzYXNjaWk9bm9dKQorXSlkbmwKK0FDX01TR19SRVNVTFQoJGNmX2N2X2hhdmVfaXNhc2NpaSkKK3Rlc3QgIiRjZl9jdl9oYXZlX2lzYXNjaWkiID0geWVzICYmIEFDX0RFRklORShIQVZFX0lTQVNDSUkpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xBUkdFRklMRSB2ZXJzaW9uOiA3IHVwZGF0ZWQ6IDIwMDcvMDYvMDIgMTE6NTg6NTAKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBBZGQgY2hlY2tzIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQuCitBQ19ERUZVTihbQ0ZfTEFSR0VGSUxFXSxbCitpZmRlZihbQUNfRlVOQ19GU0VFS09dLFsKKyAgICBBQ19TWVNfTEFSR0VGSUxFCisgICAgaWYgdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiICE9IG5vIDsgdGhlbgorCUFDX0ZVTkNfRlNFRUtPCisKKwkjIE5vcm1hbGx5IHdlIHdvdWxkIGNvbGxlY3QgdGhlc2UgZGVmaW5pdGlvbnMgaW4gdGhlIGNvbmZpZy5oLAorCSMgYnV0IChsaWtlIF9YT1BFTl9TT1VSQ0UpLCBzb21lIGVudmlyb25tZW50cyByZWx5IG9uIGhhdmluZyB0aGVzZQorCSMgZGVmaW5lZCBiZWZvcmUgYW55IG9mIHRoZSBzeXN0ZW0gaGVhZGVycyBhcmUgaW5jbHVkZWQuICBBbm90aGVyCisJIyBjYXNlIGNvbWVzIHVwIHdpdGggQysrLCBlLmcuLCBvbiBBSVggdGhlIGNvbXBpbGVyIGNvbXBpbGVzIHRoZQorCSMgaGVhZGVyIGZpbGVzIGJ5IHRoZW1zZWx2ZXMgYmVmb3JlIGxvb2tpbmcgYXQgdGhlIGJvZHkgZmlsZXMgaXQgaXMKKwkjIHRvbGQgdG8gY29tcGlsZS4gIEZvciBuY3Vyc2VzLCB0aG9zZSBoZWFkZXIgZmlsZXMgZG8gbm90IGluY2x1ZGUKKwkjIHRoZSBjb25maWcuaAorCXRlc3QgIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiICAgICAgIT0gbm8gJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9MQVJHRV9GSUxFUyAiCisJdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIiAhPSBubyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0xBUkdFRklMRV9TT1VSQ0UgIgorCXRlc3QgIiRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgIT0gbm8gJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9GSUxFX09GRlNFVF9CSVRTPSRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyAiCisKKwlBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHRvIHVzZSBzdHJ1Y3QgZGlyZW50NjQsIGNmX2N2X3N0cnVjdF9kaXJlbnQ2NCxbCisJCUFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKwkJXSxbCisJCS8qIGlmIHRyYW5zaXRpb25hbCBsYXJnZWZpbGUgc3VwcG9ydCBpcyBzZXR1cCwgdGhpcyBpcyB0cnVlICovCisJCWV4dGVybiBzdHJ1Y3QgZGlyZW50NjQgKiByZWFkZGlyKERJUiAqKTsKKwkJc3RydWN0IGRpcmVudDY0ICp4ID0gcmVhZGRpcigoRElSICopMCk7CisJCXN0cnVjdCBkaXJlbnQgKnkgPSByZWFkZGlyKChESVIgKikwKTsKKwkJaW50IHogPSB4IC0geTsKKwkJXSwKKwkJW2NmX2N2X3N0cnVjdF9kaXJlbnQ2ND15ZXNdLAorCQlbY2ZfY3Zfc3RydWN0X2RpcmVudDY0PW5vXSkKKwldKQorCXRlc3QgIiRjZl9jdl9zdHJ1Y3RfZGlyZW50NjQiID0geWVzICYmIEFDX0RFRklORShIQVZFX1NUUlVDVF9ESVJFTlQ2NCkKKyAgICBmaQorXSkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTERGTEFHU19TVEFUSUMgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA4LzEwLzE4IDE3OjU4OjIwCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsZXIvbGlua2VyIGZsYWdzIHVzZWQgdG8gdGVtcG9yYXJpbHkgZm9yY2UgdXNhZ2Ugb2Ygc3RhdGljCitkbmwgbGlicmFyaWVzLiAgVGhpcyBkZXBlbmRzIG9uIHRoZSBjb21waWxlciBhbmQgcGxhdGZvcm0uICBVc2UgdGhpcyB0byBoZWxwCitkbmwgZW5zdXJlIHRoYXQgdGhlIGxpbmtlciBwaWNrcyB1cCBhIGdpdmVuIGxpYnJhcnkgYmFzZWQgb24gaXRzIHBvc2l0aW9uIGluCitkbmwgdGhlIGxpc3Qgb2YgbGlua2VyIG9wdGlvbnMgYW5kIGxpYnJhcmllcy4KK0FDX0RFRlVOKFtDRl9MREZMQUdTX1NUQVRJQ10sWworCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKAorCU9TLzIqfG9zMip8YWl4W1s0NV1dKikgCSMoIHZpCisJCUxERkxBR1NfU1RBVElDPQorCQlMREZMQUdTX1NIQVJFRD0KKwkJOzsKKyAgICAqKSAJIyggbm9ybWFsbHksIGV4Y2VwdCB3aGVuIGJyb2tlbgorICAgICAgICBMREZMQUdTX1NUQVRJQz0tc3RhdGljCisgICAgICAgIExERkxBR1NfU0hBUkVEPS1keW5hbWljCisgICAgICAgIDs7CisgICAgZXNhYworZWxzZQorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICMoCisJYWl4W1s0NV1dKikgCSMoIGZyb20gbGQgbWFucGFnZQorCQlMREZMQUdTX1NUQVRJQz0tYnN0YXRpYworCQlMREZMQUdTX1NIQVJFRD0tYmR5bmFtaWMKKwkJOzsKKwlocHV4KikJCSMoIGZyb20gbGQgbWFucGFnZSBmb3IgaHB1eDEwLjIwLCBocHV4MTEuMTEKKwkJIyBXZSBjb3VsZCBhbHNvIHVzZSBqdXN0ICJhcmNoaXZlIiBhbmQgInNoYXJlZCIuCisJCUxERkxBR1NfU1RBVElDPS1XbCwtYSxhcmNoaXZlX3NoYXJlZAorCQlMREZMQUdTX1NIQVJFRD0tV2wsLWEsc2hhcmVkX2FyY2hpdmUKKwkJOzsKKwlpcml4KikJCSMoIGZyb20gbGQgbWFucGFnZSBJUklYNjQKKwkJTERGTEFHU19TVEFUSUM9LUJzdGF0aWMKKwkJTERGTEFHU19TSEFSRUQ9LUJkeW5hbWljCisJCTs7CisJb3NmW1s0NV1dKikJIyggZnJvbSBsZCBtYW5wYWdlIG9zZjQuMGQsIG9zZjUuMQorCQkjIGFsdGVybmF0aXZlICItb2xkc3R5bGVfbGlibG9va3VwIiAobm90IGluIGNjIG1hbnBhZ2UpCisJCUxERkxBR1NfU1RBVElDPS1ub3NvIAorCQlMREZMQUdTX1NIQVJFRD0tc29fYXJjaGl2ZQorCQk7OworCXNvbGFyaXMyKikKKwkJTERGTEFHU19TVEFUSUM9LUJzdGF0aWMKKwkJTERGTEFHU19TSEFSRUQ9LUJkeW5hbWljCisJCTs7CisJZXNhYworZmkKKworQUNfU1VCU1QoTERGTEFHU19TVEFUSUMpCitBQ19TVUJTVChMREZMQUdTX1NIQVJFRCkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTElCUkFSWV9QQVRIIHZlcnNpb246IDcgdXBkYXRlZDogMjAwMi8xMS8xMCAxNDo0Njo1OQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGxpYnJhcnktZmlsZQorQUNfREVGVU4oW0NGX0xJQlJBUllfUEFUSF0sCitbQ0ZfU1VCRElSX1BBVEgoJDEsJDIsbGliKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTElCX1BSRUZJWCB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDgvMDkvMTMgMTE6MzQ6MTYKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQ29tcHV0ZSB0aGUgbGlicmFyeS1wcmVmaXggZm9yIHRoZSBnaXZlbiBob3N0IHN5c3RlbQorZG5sICQxID0gdmFyaWFibGUgdG8gc2V0CitBQ19ERUZVTihbQ0ZfTElCX1BSRUZJWF0sCitbCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCU9TLzIqfG9zMiopICModmkKKyAgICAgICAgTElCX1BSRUZJWD0nJworICAgICAgICA7OworCSopCUxJQl9QUkVGSVg9J2xpYicKKyAgICAgICAgOzsKKwllc2FjCitpZmVsc2UoJDEsLCxbJDE9JExJQl9QUkVGSVhdKQorCUFDX1NVQlNUKExJQl9QUkVGSVgpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJQl9SVUxFUyB2ZXJzaW9uOiA1MyB1cGRhdGVkOiAyMDA4LzA5LzIwIDE5OjUxOjU5CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgQXBwZW5kIGRlZmluaXRpb25zIGFuZCBydWxlcyBmb3IgdGhlIGdpdmVuIG1vZGVscyB0byB0aGUgc3ViZGlyZWN0b3J5CitkbmwgTWFrZWZpbGVzLCBhbmQgdGhlIHJlY3Vyc2lvbiBydWxlIGZvciB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLiAgSWYgdGhlCitkbmwgc3ViZGlyZWN0b3J5IGlzIGEgbGlicmFyeS1zb3VyY2UgZGlyZWN0b3J5LCBtb2RpZnkgdGhlIExJQlNfVE9fTUFLRSBsaXN0IGluCitkbmwgdGhlIGNvcnJlc3BvbmRpbmcgbWFrZWZpbGUgdG8gbGlzdCB0aGUgbW9kZWxzIHRoYXQgd2UnbGwgZ2VuZXJhdGUuCitkbmwKK2RubCBGb3Igc2hhcmVkIGxpYnJhcmllcywgbWFrZSBhIGxpc3Qgb2Ygc3ltYm9saWMgbGlua3MgdG8gY29uc3RydWN0IHdoZW4KK2RubCBnZW5lcmF0aW5nIGVhY2ggbGlicmFyeS4gIFRoZSBjb252ZW50aW9uIHVzZWQgZm9yIExpbnV4IGlzIHRoZSBzaW1wbGVzdAorZG5sIG9uZToKK2RubAlsaWI8bmFtZT4uc28JLT4KK2RubAlsaWI8bmFtZT4uc28uPG1ham9yPgktPgorZG5sCWxpYjxuYW1lPi5zby48bWFqPi48bWlub3I+CitBQ19ERUZVTihbQ0ZfTElCX1JVTEVTXSwKK1sKK0NGX0xJQl9QUkVGSVgoY2ZfcHJlZml4KQorQUNfUkVRVUlSRShbQ0ZfU1VCU1RfTkNVUlNFU19WRVJTSU9OXSkKKworaWYgdGVzdCAkY2ZfY3Zfc2hsaWJfdmVyc2lvbiA9IGN5Z2RsbCA7IHRoZW4KKwlUSU5GT19OQU1FPSRUSU5GT19BUkdfU1VGRklYCisJVElORk9fU1VGRklYPS5kbGwKK2ZpCisKK2ZvciBjZl9kaXIgaW4gJFNSQ19TVUJESVJTCitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXIgOyB0aGVuCisJCWNvbnRpbnVlCisJZWxpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzOyB0aGVuCisKKwkJU0hBUkVEX0xJQj0KKwkJTElCU19UT19NQUtFPQorCQlmb3IgY2ZfaXRlbSBpbiAkY2ZfTElTVF9NT0RFTFMKKwkJZG8KKwkJCUNGX0xJQl9TVUZGSVgoJGNmX2l0ZW0sY2Zfc3VmZml4LGNmX2RlcHN1ZikKKwkJCWlmIHRlc3QgJGNmX2l0ZW0gPSBzaGFyZWQgOyB0aGVuCisJCQlpZiB0ZXN0ICIkY2ZfY3ZfZG9fc3ltbGlua3MiID0geWVzIDsgdGhlbgorCQkJCWNhc2UgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiBpbiAjKHZpCisJCQkJcmVsKSAjKHZpCisJCQkJCWNhc2UgIiRjZl9jdl9zeXN0ZW1fbmFtZSIgaW4gIyh2aQorCQkJCQlkYXJ3aW4qKQorCQkJCQljYXNlIC4ke0xJQl9TVUZGSVh9IGluCisJCQkJCS53KikKKwkJCQkJCWNmX3N1ZmZpeD1gZWNobyAkY2Zfc3VmZml4IHwgc2VkICdzL153Ly8nYAorCQkJCQkJY2Zfc3VmZml4PXcnLiR7UkVMX1ZFUlNJT059JyIkY2Zfc3VmZml4IgorCQkJCQkJOzsKKwkJCQkJKikKKwkJCQkJCWNmX3N1ZmZpeD0nLiR7UkVMX1ZFUlNJT059JyIkY2Zfc3VmZml4IgorCQkJCQkJOzsKKwkJCQkJZXNhYworCQkJCQk7OyAjKHZpCisJCQkJCSopIGNmX3N1ZmZpeD0iJGNmX3N1ZmZpeCInLiR7UkVMX1ZFUlNJT059JyA7OworCQkJCQllc2FjCisJCQkJCTs7CisJCQkJYWJpKQorCQkJCQljYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluICModmkKKwkJCQkJZGFyd2luKikKKwkJCQkJY2FzZSAuJHtMSUJfU1VGRklYfSBpbgorCQkJCQkudyopCisJCQkJCQljZl9zdWZmaXg9YGVjaG8gJGNmX3N1ZmZpeCB8IHNlZCAncy9edy8vJ2AKKwkJCQkJCWNmX3N1ZmZpeD13Jy4ke0FCSV9WRVJTSU9OfSciJGNmX3N1ZmZpeCIKKwkJCQkJCTs7CisJCQkJCSopCisJCQkJCQljZl9zdWZmaXg9Jy4ke0FCSV9WRVJTSU9OfSciJGNmX3N1ZmZpeCIKKwkJCQkJCTs7CisJCQkJCWVzYWMKKwkJCQkJOzsgIyh2aQorCQkJCQkqKSBjZl9zdWZmaXg9IiRjZl9zdWZmaXgiJy4ke0FCSV9WRVJTSU9OfScgOzsKKwkJCQkJZXNhYworCQkJCQk7OworCQkJCWVzYWMKKwkJCWZpCisJCQkjIGN5Z3dpbiBuZWVkcyBpbXBvcnQgbGlicmFyeSwgYW5kIGhhcyB1bmlxdWUgbmFtaW5nIGNvbnZlbnRpb24KKwkJCSMgdXNlIGF1dG9kZXRlY3RlZCAke2NmX3ByZWZpeH0gZm9yIGltcG9ydCBsaWIgYW5kIHN0YXRpYyBsaWIsIGJ1dAorCQkJIyB1c2UgJ2N5ZycgcHJlZml4IGZvciBzaGFyZWQgbGliLgorCQkJaWYgdGVzdCAkY2ZfY3Zfc2hsaWJfdmVyc2lvbiA9IGN5Z2RsbCA7IHRoZW4KKwkJCQljZl9jeWdzdWY9YGVjaG8gIiRjZl9zdWZmaXgiIHwgc2VkIC1lICdzL1wuZGxsL1wke0FCSV9WRVJTSU9OfS5kbGwvJ2AKKwkJCQlMSUJTX1RPX01BS0U9IiRMSUJTX1RPX01BS0UgLi4vbGliL2N5ZyR7Y2ZfZGlyfSR7Y2ZfY3lnc3VmfSIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCWZpCisJCQlMSUJTX1RPX01BS0U9IiRMSUJTX1RPX01BS0UgLi4vbGliLyR7Y2ZfcHJlZml4fSR7Y2ZfZGlyfSR7Y2Zfc3VmZml4fSIKKwkJZG9uZQorCisJCWlmIHRlc3QgJGNmX2RpciA9IG5jdXJzZXMgOyB0aGVuCisJCQljZl9zdWJzZXRzPSIkTElCX1NVQlNFVFMiCisJCQljZl9yX3BhcnRzPSIkY2Zfc3Vic2V0cyIKKwkJCWNmX2xpYmxpc3Q9IiRMSUJTX1RPX01BS0UiCisKKwkJCXdoaWxlIHRlc3QgLW4gIiRjZl9yX3BhcnRzIgorCQkJZG8KKwkJCQljZl9sX3BhcnRzPWBlY2hvICIkY2Zfcl9wYXJ0cyIgfHNlZCAtZSAncy8gLiokLy8nYAorCQkJCWNmX3JfcGFydHM9YGVjaG8gIiRjZl9yX3BhcnRzIiB8c2VkIC1lICdzL15bW14gXV0qIC8vJ2AKKwkJCQlpZiB0ZXN0ICIkY2ZfbF9wYXJ0cyIgIT0gIiRjZl9yX3BhcnRzIiA7IHRoZW4KKwkJCQkJY2ZfaXRlbT0KKwkJCQkJY2FzZSAkY2ZfbF9wYXJ0cyBpbiAjKHZpCisJCQkJCSp0ZXJtbGliKikgIyh2aQorCQkJCQkJY2ZfaXRlbT1gZWNobyAkY2ZfbGlibGlzdCB8c2VkIC1lIHMlJHtMSUJfTkFNRX0ke0xJQl9TVUZGSVh9JSR7VElORk9fTElCX1NVRkZJWH0lZ2AKKwkJCQkJCTs7CisJCQkJCSp0aWNsaWIqKQorCQkJCQkJY2ZfaXRlbT1gZWNobyAkY2ZfbGlibGlzdCB8c2VkIC1lIHMlJHtMSUJfTkFNRX0ke0xJQl9TVUZGSVh9JSR7VElDU19MSUJfU1VGRklYfSVnYAorCQkJCQkJOzsKKwkJCQkJKikKKwkJCQkJCWJyZWFrCisJCQkJCQk7OworCQkJCQllc2FjCisJCQkJCWlmIHRlc3QgLW4gIiRjZl9pdGVtIjsgdGhlbgorCQkJCQkJTElCU19UT19NQUtFPSIkY2ZfaXRlbSAkTElCU19UT19NQUtFIgorCQkJCQlmaQorCQkJCWVsc2UKKwkJCQkJYnJlYWsKKwkJCQlmaQorCQkJZG9uZQorCQllbHNlCisJCQljZl9zdWJzZXRzPWBlY2hvICIkTElCX1NVQlNFVFMiIHwgc2VkIC1lICdzL150ZXJtbGliLiogLy8nYAorCQlmaQorCisJCXNlZCAtZSAicyVATElCU19UT19NQUtFQCUkTElCU19UT19NQUtFJSIgXAorCQkgICAgLWUgInMlQFNIQVJFRF9MSUJAJSRTSEFSRURfTElCJSIgXAorCQkJJGNmX2Rpci9NYWtlZmlsZSA+JGNmX2Rpci9NYWtlZmlsZS5vdXQKKwkJbXYgJGNmX2Rpci9NYWtlZmlsZS5vdXQgJGNmX2Rpci9NYWtlZmlsZQorCisJCSRBV0sgLWYgJHNyY2Rpci9tay0wdGguYXdrIFwKKwkJCWxpYm5hbWU9IiR7Y2ZfZGlyfSR7TElCX1NVRkZJWH0iIHN1YnNldHM9IiRMSUJfU1VCU0VUUyIgXAorCQkJJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXMgPj4kY2ZfZGlyL01ha2VmaWxlCisKKwkJZm9yIGNmX3N1YnNldCBpbiAkY2Zfc3Vic2V0cworCQlkbworCQkJY2Zfc3ViZGlycz0KKwkJCWZvciBjZl9pdGVtIGluICRjZl9MSVNUX01PREVMUworCQkJZG8KKwkJCWVjaG8gIkFwcGVuZGluZyBydWxlcyBmb3IgJHtjZl9pdGVtfSBtb2RlbCAoJHtjZl9kaXJ9OiAke2NmX3N1YnNldH0pIgorCQkJQ0ZfVVBQRVIoY2ZfSVRFTSwkY2ZfaXRlbSkKKwkJCUNGX0xJQl9TVUZGSVgoJGNmX2l0ZW0sY2Zfc3VmZml4LGNmX2RlcHN1ZikKKwkJCUNGX09CSl9TVUJESVIoJGNmX2l0ZW0sY2Zfc3ViZGlyKQorCisJCQkjIFRlc3QgZm9yIGNhc2Ugd2hlcmUgd2UgYnVpbGQgbGlidGluZm8gd2l0aCBhIGRpZmZlcmVudCBuYW1lLgorCQkJY2ZfbGlibmFtZT0kY2ZfZGlyCisJCQlpZiB0ZXN0ICRjZl9kaXIgPSBuY3Vyc2VzIDsgdGhlbgorCQkJCWNhc2UgJGNmX3N1YnNldCBpbgorCQkJCSpiYXNlKikKKwkJCQkJY2ZfbGlibmFtZT0ke2NmX2xpYm5hbWV9JExJQl9TVUZGSVgKKwkJCQkJOzsKKwkJCQkqdGVybWxpYiopCisJCQkJCWNmX2xpYm5hbWU9JFRJTkZPX0xJQl9TVUZGSVgKKwkJCQkJOzsKKwkJCQl0aWNsaWIqKQorCQkJCQljZl9saWJuYW1lPSRUSUNTX0xJQl9TVUZGSVgKKwkJCQkJOzsKKwkJCQllc2FjCisJCQllbHNlCisJCQkJY2ZfbGlibmFtZT0ke2NmX2xpYm5hbWV9JExJQl9TVUZGSVgKKwkJCWZpCisJCQlpZiB0ZXN0IC1uICIke0RGVF9BUkdfU1VGRklYfSIgOyB0aGVuCisJCQkJIyB1bmRvICRMSUJfU1VGRklYIGFkZC1vbiBpbiBDRl9MSUJfU1VGRklYCisJCQkJY2Zfc3VmZml4PWBlY2hvICRjZl9zdWZmaXggfHNlZCAtZSAicyVeJHtMSUJfU1VGRklYfSUlImAKKwkJCWZpCisKKwkJCSMgVGhlc2UgZGVwZW5kZW5jaWVzIHJlYWxseSBhcmUgZm9yIGRldmVsb3BtZW50LCBub3QKKwkJCSMgYnVpbGRzLCBidXQgdGhleSBhcmUgdXNlZnVsIGluIHBvcnRpbmcsIHRvby4KKwkJCWNmX2RlcGVuZD0iLi4vaW5jbHVkZS9uY3Vyc2VzX2NmZy5oIgorCQkJaWYgdGVzdCAiJHNyY2RpciIgPSAiLiI7IHRoZW4KKwkJCQljZl9yZWxkaXI9Ii4iCisJCQllbHNlCisJCQkJY2ZfcmVsZGlyPSJcJHtzcmNkaXJ9IgorCQkJZmkKKworCQkJaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvJGNmX2Rpci5wcml2Lmg7IHRoZW4KKwkJCQljZl9kZXBlbmQ9IiRjZl9kZXBlbmQgJGNmX3JlbGRpci8kY2ZfZGlyLnByaXYuaCIKKwkJCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvY3Vyc2VzLnByaXYuaDsgdGhlbgorCQkJCWNmX2RlcGVuZD0iJGNmX2RlcGVuZCAkY2ZfcmVsZGlyL2N1cnNlcy5wcml2LmgiCisJCQlmaQorCisgCQkJY2ZfZGlyX3N1ZmZpeD0KKyAJCQlvbGRfY2Zfc3VmZml4PSIkY2Zfc3VmZml4IgorIAkJCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4IiA9IHllcyA7IHRoZW4KKwkJCWlmIHRlc3QgLW4gIiRMSUJfU1VGRklYIiA7IHRoZW4KKwkJCQljYXNlICRMSUJfU1VGRklYIGluCisJCQkJdyopCisJCQkJCWNmX2xpYm5hbWU9YGVjaG8gJGNmX2xpYm5hbWUgfCBzZWQgJ3MvdyQvLydgCisJCQkJCWNmX3N1ZmZpeD1gZWNobyAkY2Zfc3VmZml4IHwgc2VkICdzL153Ly8nYAorCQkJCQljZl9kaXJfc3VmZml4PXcKKwkJCQkJOzsKKwkJCQllc2FjCisJCQlmaQorIAkJCWZpCisKKwkJCSRBV0sgLWYgJHNyY2Rpci9tay0xc3QuYXdrIFwKKwkJCQluYW1lPSR7Y2ZfbGlibmFtZX0ke2NmX2Rpcl9zdWZmaXh9IFwKKwkJCQl0cmFjZXM9JExJQl9UUkFDSU5HIFwKKwkJCQlNT0RFTD0kY2ZfSVRFTSBcCisJCQkJbW9kZWw9JGNmX3N1YmRpciBcCisJCQkJcHJlZml4PSRjZl9wcmVmaXggXAorCQkJCXN1ZmZpeD0kY2Zfc3VmZml4IFwKKwkJCQlzdWJzZXQ9JGNmX3N1YnNldCBcCisJCQkJVGVybWxpYlJvb3Q9JFRJTkZPX05BTUUgXAorCQkJCVRlcm1saWJTdWZmaXg9JFRJTkZPX1NVRkZJWCBcCisJCQkJU2hsaWJWZXI9JGNmX2N2X3NobGliX3ZlcnNpb24gXAorCQkJCVNobGliVmVySW5maXg9JGNmX2N2X3NobGliX3ZlcnNpb25faW5maXggXAorCQkJCVJlTGluaz0ke2NmX2N2X2RvX3JlbGluay1ub30gXAorCQkJCURvTGlua3M9JGNmX2N2X2RvX3N5bWxpbmtzIFwKKwkJCQlybVNvTG9jcz0kY2ZfY3Zfcm1fc29fbG9jcyBcCisJCQkJbGRjb25maWc9IiRMRENPTkZJRyIgXAorCQkJCW92ZXJ3cml0ZT0kV0lUSF9PVkVSV1JJVEUgXAorCQkJCWRlcGVuZD0iJGNmX2RlcGVuZCIgXAorCQkJCWhvc3Q9IiRob3N0IiBcCisJCQkJJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXMgPj4kY2ZfZGlyL01ha2VmaWxlCisKKwkJCWNmX3N1ZmZpeD0iJG9sZF9jZl9zdWZmaXgiCisKKwkJCWZvciBjZl9zdWJkaXIyIGluICRjZl9zdWJkaXJzIGxpYgorCQkJZG8KKwkJCQl0ZXN0ICRjZl9zdWJkaXIgPSAkY2Zfc3ViZGlyMiAmJiBicmVhaworCQkJZG9uZQorCQkJdGVzdCAiJHtjZl9zdWJzZXR9LiR7Y2Zfc3ViZGlyMn0iICE9ICIke2NmX3N1YnNldH0uJHtjZl9zdWJkaXJ9IiAmJiBcCisJCQkkQVdLIC1mICRzcmNkaXIvbWstMm5kLmF3ayBcCisJCQkJbmFtZT0kY2ZfZGlyIFwKKwkJCQl0cmFjZXM9JExJQl9UUkFDSU5HIFwKKwkJCQlNT0RFTD0kY2ZfSVRFTSBcCisJCQkJbW9kZWw9JGNmX3N1YmRpciBcCisJCQkJc3Vic2V0PSRjZl9zdWJzZXQgXAorCQkJCXNyY2Rpcj0kc3JjZGlyIFwKKwkJCQllY2hvPSRXSVRIX0VDSE8gXAorCQkJCWNyZW5hbWVzPSRjZl9jdl9wcm9nX0NDX2NfbyBcCisJCQkJY3h4cmVuYW1lcz0kY2ZfY3ZfcHJvZ19DWFhfY19vIFwKKwkJCQkkc3JjZGlyLyRjZl9kaXIvbW9kdWxlcyA+PiRjZl9kaXIvTWFrZWZpbGUKKwkJCWNmX3N1YmRpcnM9IiRjZl9zdWJkaXJzICRjZl9zdWJkaXIiCisJCQlkb25lCisJCWRvbmUKKwlmaQorCisJZWNobyAnCWNkICckY2ZfZGlyJyAmJiAke01BS0V9ICR7Q0ZfTUZMQUdTfSBbJF1AJyA+Pk1ha2VmaWxlCitkb25lCisKK2ZvciBjZl9kaXIgaW4gJFNSQ19TVUJESVJTCitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXIgOyB0aGVuCisJCWNvbnRpbnVlCisJZmkKKworCWlmIHRlc3QgLWYgJGNmX2Rpci9NYWtlZmlsZSA7IHRoZW4KKwkJY2FzZSAiJGNmX2RpciIgaW4KKwkJQWRhOTUpICModmkKKwkJCWVjaG8gJ2xpYnMgXCcgPj4gTWFrZWZpbGUKKwkJCWVjaG8gJ2luc3RhbGwubGlicyBcJyA+PiBNYWtlZmlsZQorCQkJZWNobyAndW5pbnN0YWxsLmxpYnMgOjonID4+IE1ha2VmaWxlCisJCQllY2hvICcJY2QgJyRjZl9kaXInICYmICR7TUFLRX0gJHtDRl9NRkxBR1N9IFskXUAnID4+IE1ha2VmaWxlCisJCQk7OworCQllc2FjCisJZmkKKworCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXM7IHRoZW4KKwkJZWNobyA+PiBNYWtlZmlsZQorCQlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9oZWFkZXJzOyB0aGVuCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKK2luc3RhbGwuaW5jbHVkZXMgXFwKK3VuaW5zdGFsbC5pbmNsdWRlcyBcXAorQ0ZfRU9GCisJCWZpCitpZiB0ZXN0ICIkY2ZfZGlyIiAhPSAiYysrIiA7IHRoZW4KK2VjaG8gJ2xpbnQgXCcgPj4gTWFrZWZpbGUKK2ZpCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKK2xpYnMgXFwKK2xpbnRsaWIgXFwKK2luc3RhbGwubGlicyBcXAordW5pbnN0YWxsLmxpYnMgXFwKK2luc3RhbGwuJGNmX2RpciBcXAordW5pbnN0YWxsLiRjZl9kaXIgOjoKKwljZCAkY2ZfZGlyICYmIFwke01BS0V9IFwke0NGX01GTEFHU30gXFskXUAKK0NGX0VPRgorCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvaGVhZGVyczsgdGhlbgorY2F0ID4+IE1ha2VmaWxlIDw8Q0ZfRU9GCisKK2xpYnMgXFwKK2luc3RhbGwubGlicyBcXAordW5pbnN0YWxsLmxpYnMgXFwKK2luc3RhbGwuaW5jbHVkZXMgXFwKK3VuaW5zdGFsbC5pbmNsdWRlcyA6OgorCWNkICRjZl9kaXIgJiYgXCR7TUFLRX0gXCR7Q0ZfTUZMQUdTfSBcWyRdQAorQ0ZfRU9GCitmaQorZG9uZQorCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKKworaW5zdGFsbC5saWJzIHVuaW5zdGFsbC5saWJzIFxcCitpbnN0YWxsLmRhdGEgdW5pbnN0YWxsLmRhdGEgOjoKKyRNQUtFX1RFUk1JTkZPCWNkIG1pc2MgJiYgXCR7TUFLRX0gXCR7Q0ZfTUZMQUdTfSBcWyRdQAorCitpbnN0YWxsLm1hbiBcXAordW5pbnN0YWxsLm1hbiA6OgorCWNkIG1hbiAmJiBcJHtNQUtFfSBcJHtDRl9NRkxBR1N9IFxbJF1ACisKK2Rpc3RjbGVhbiA6OgorCXJtIC1mIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgTWFrZWZpbGUgaW5jbHVkZS9uY3Vyc2VzX2NmZy5oCisJcm0gLWYgaGVhZGVycy5zaCBoZWFkZXJzLnNlZCBta19zaGFyZWRfbGliLnNoCisJcm0gLXJmIFwke0RJUlNfVE9fTUFLRX0KK0NGX0VPRgorCisjIFNwZWNpYWwgY2FzZTogdGFjaydzIG1hbnBhZ2UgbGl2ZXMgaW4gaXRzIG93biBkaXJlY3RvcnkuCitpZiB0ZXN0IC1kIHRhY2sgOyB0aGVuCitpZiB0ZXN0IC1mICRzcmNkaXIvJHRhY2suaDsgdGhlbgorY2F0ID4+IE1ha2VmaWxlIDw8Q0ZfRU9GCisKK2luc3RhbGwubWFuIFxcCit1bmluc3RhbGwubWFuIDo6CisJY2QgdGFjayAmJiBcJHtNQUtFfSBcJHtDRl9NRkxBR1N9IFxbJF1ACitDRl9FT0YKK2ZpCitmaQorCitkbmwgSWYgd2UncmUgaW5zdGFsbGluZyBpbnRvIGEgc3ViZGlyZWN0b3J5IG9mIC91c3IvaW5jbHVkZSwgZXRjLiwgd2Ugc2hvdWxkCitkbmwgcHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5J3MgbmFtZSB0byB0aGUgIiNpbmNsdWRlIiBwYXRocy4gIEl0IHdvbid0IGh1cnQKK2RubCBhbnl0aGluZywgYW5kIHdpbGwgbWFrZSBpdCBtb3JlIHN0YW5kYXJkaXplZC4gIEl0J3MgYXdrd2FyZCB0byBkZWNpZGUgdGhpcworZG5sIGF0IGNvbmZpZ3VyYXRpb24gYmVjYXVzZSBvZiBxdW90aW5nLCBzbyB3ZSdsbCBzaW1wbHkgbWFrZSBhbGwgaGVhZGVycworZG5sIGluc3RhbGxlZCB2aWEgYSBzY3JpcHQgdGhhdCBjYW4gZG8gdGhlIHJpZ2h0IHRoaW5nLgorCitybSAtZiBoZWFkZXJzLnNlZCBoZWFkZXJzLnNoCisKK2RubCAoIGdlbmVyYXRpbmcgdGhpcyBzY3JpcHQgbWFrZXMgdGhlIG1ha2VmaWxlcyBhIGxpdHRsZSB0aWRpZXIgOi0pCitlY2hvIGNyZWF0aW5nIGhlYWRlcnMuc2gKK2NhdCA+aGVhZGVycy5zaCA8PENGX0VPRgorIyEgL2Jpbi9zaAorIyBUaGlzIHNoZWxsIHNjcmlwdCBpcyBnZW5lcmF0ZWQgYnkgdGhlICdjb25maWd1cmUnIHNjcmlwdC4gIEl0IGlzIGludm9rZWQgaW4gYQorIyBzdWJkaXJlY3Rvcnkgb2YgdGhlIGJ1aWxkIHRyZWUuICBJdCBnZW5lcmF0ZXMgYSBzZWQtc2NyaXB0IGluIHRoZSBwYXJlbnQKKyMgZGlyZWN0b3J5IHRoYXQgaXMgdXNlZCB0byBhZGp1c3QgaW5jbHVkZXMgZm9yIGhlYWRlciBmaWxlcyB0aGF0IHJlc2lkZSBpbiBhCisjIHN1YmRpcmVjdG9yeSBvZiAvdXNyL2luY2x1ZGUsIGV0Yy4KK1BSRz0iIgord2hpbGUgdGVzdCBcWyRdIyAhPSAzCitkbworUFJHPSJcJFBSRyBcWyRdMSI7IHNoaWZ0Citkb25lCitEU1Q9XFskXTEKK1JFRj1cWyRdMgorU1JDPVxbJF0zCitUTVBTUkM9XCR7VE1QRElSLS90bXB9L1xgYmFzZW5hbWUgXCRTUkNcYFwkXCQKK1RNUFNFRD1cJHtUTVBESVItL3RtcH0vaGVhZGVycy5zZWRcJFwkCitlY2hvIGluc3RhbGxpbmcgXCRTUkMgaW4gXCREU1QKK0NGX0VPRgorCitpZiB0ZXN0ICRXSVRIX0NVUlNFU19IID0geWVzOyB0aGVuCisJY2F0ID4+aGVhZGVycy5zaCA8PENGX0VPRgorY2FzZSBcJERTVCBpbgorLyovaW5jbHVkZS8qKQorCUVORD1cYGJhc2VuYW1lIFwkRFNUXGAKKwlmb3IgaSBpbiBcYGNhdCBcJFJFRi8uLi8qL2hlYWRlcnMgfGZncmVwIC12ICIjIlxgCisJZG8KKwkJTkFNRT1cYGJhc2VuYW1lIFwkaVxgCisJCWVjaG8gInMvPFwkTkFNRT4vPFwkRU5EXC9cJE5BTUU+LyIgPj4gXCRUTVBTRUQKKwlkb25lCisJOzsKKyopCisJZWNobyAiIiA+PiBcJFRNUFNFRAorCTs7Citlc2FjCitDRl9FT0YKKworZWxzZQorCWNhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKK2Nhc2UgXCREU1QgaW4KKy8qL2luY2x1ZGUvKikKKwlFTkQ9XGBiYXNlbmFtZSBcJERTVFxgCisJZm9yIGkgaW4gXGBjYXQgXCRSRUYvLi4vKi9oZWFkZXJzIHxmZ3JlcCAtdiAiIyJcYAorCWRvCisJCU5BTUU9XGBiYXNlbmFtZSBcJGlcYAorCQlpZiB0ZXN0ICJcJE5BTUUiID0gImN1cnNlcy5oIgorCQl0aGVuCisJCQllY2hvICJzLzxjdXJzZXMuaD4vPG5jdXJzZXMuaD4vIiA+PiBcJFRNUFNFRAorCQkJTkFNRT1uY3Vyc2VzLmgKKwkJZmkKKwkJZWNobyAicy88XCROQU1FPi88XCRFTkRcL1wkTkFNRT4vIiA+PiBcJFRNUFNFRAorCWRvbmUKKwk7OworKikKKwllY2hvICJzLzxjdXJzZXMuaD4vPG5jdXJzZXMuaD4vIiA+PiBcJFRNUFNFRAorCTs7Citlc2FjCitDRl9FT0YKK2ZpCitjYXQgPj5oZWFkZXJzLnNoIDw8Q0ZfRU9GCitybSAtZiBcJFRNUFNSQworc2VkIC1mIFwkVE1QU0VEIFwkU1JDID4gXCRUTVBTUkMKK05BTUU9XGBiYXNlbmFtZSBcJFNSQ1xgCitDRl9FT0YKK2lmIHRlc3QgJFdJVEhfQ1VSU0VTX0ggIT0geWVzOyB0aGVuCisJY2F0ID4+aGVhZGVycy5zaCA8PENGX0VPRgordGVzdCAiXCROQU1FIiA9ICJjdXJzZXMuaCIgJiYgTkFNRT1uY3Vyc2VzLmgKK0NGX0VPRgorZmkKK2NhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKKyMgSnVzdCBpbiBjYXNlIHNvbWVvbmUgZ3ppcCdkIG1hbnBhZ2VzLCByZW1vdmUgdGhlIGNvbmZsaWN0aW5nIGNvcHkuCit0ZXN0IC1mIFwkRFNUL1wkTkFNRS5neiAmJiBybSAtZiBcJERTVC9cJE5BTUUuZ3oKKworZXZhbCBcJFBSRyBcJFRNUFNSQyBcJERTVC9cJE5BTUUKK3JtIC1mIFwkVE1QU1JDIFwkVE1QU0VECitDRl9FT0YKKworY2htb2QgMDc1NSBoZWFkZXJzLnNoCisKK2ZvciBjZl9kaXIgaW4gJFNSQ19TVUJESVJTCitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXIgOyB0aGVuCisJCWNvbnRpbnVlCisJZmkKKworCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL2hlYWRlcnM7IHRoZW4KKwkJJEFXSyAtZiAkc3JjZGlyL21rLWhkci5hd2sgXAorCQkJc3Vic2V0PSIkTElCX1NVQlNFVFMiIFwKKwkJCWNvbXBhdD0iJFdJVEhfQ1VSU0VTX0giIFwKKwkJCSRzcmNkaXIvJGNmX2Rpci9oZWFkZXJzID4+JGNmX2Rpci9NYWtlZmlsZQorCWZpCisKKwlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzOyB0aGVuCisJCWlmIHRlc3QgIiRjZl9kaXIiICE9ICJjKysiIDsgdGhlbgorCQkJY2F0ID4+JGNmX2Rpci9NYWtlZmlsZSA8PCJDRl9FT0YiCitkZXBlbmQgOiAke0FVVE9fU1JDfQorCW1ha2VkZXBlbmQgLS0gJHtDUFBGTEFHU30gLS0gJHtDX1NSQ30KKworIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorQ0ZfRU9GCisJCWZpCisJZmkKK2RvbmUKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSUJfU09OQU1FIHZlcnNpb246IDMgdXBkYXRlZDogMjAwNi8xMi8xNiAxNTo1NTo0NgorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIHRoZSBhbmQgc29uYW1lIGZvciB0aGUgZ2l2ZW4gc2hhcmVkIGxpYnJhcnkuICBTZXQgdGhlIGNhY2hlIHZhcmlhYmxlCitkbmwgY2ZfY3ZfJDNfc29uYW1lIHRvIHRoaXMsIHVubGVzcyBpdCBpcyBub3QgZm91bmQuICBUaGVuIHNldCB0aGUgY2FjaGUKK2RubCB2YXJpYWJsZSB0byAidW5rbm93biIuCitkbmwKK2RubCAkMSA9IGhlYWRlcnMKK2RubCAkMiA9IGNvZGUKK2RubCAkMyA9IGxpYnJhcnkgbmFtZQorQUNfREVGVU4oW0NGX0xJQl9TT05BTUVdLAorWworQUNfQ0FDSEVfQ0hFQ0soZm9yIHNvbmFtZSBvZiAkMyBsaWJyYXJ5LGNmX2N2XyQzX3NvbmFtZSxbCisKK2NmX2N2XyQzX3NvbmFtZT11bmtub3duCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXMgOyB0aGVuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxDRl9FT0YKKyQxCitpbnQgbWFpbigpCit7CiskMgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CitDRl9FT0YKK2NmX3NhdmVfTElCUz0iJExJQlMiCisJTElCUz0iLWwkMyAkTElCUyIKKwlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSA7IHRoZW4KKwkJaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgOyB0aGVuCisJCQljZl9jdl8kM19zb25hbWU9YGxkZCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCBzZWQgLWUgJ3MsXi4qLywsJyAtZSAncywgLiokLCwnIHwgZmdyZXAgbGliJDMuYAorCQkJdGVzdCAteiAiJGNmX2N2XyQzX3NvbmFtZSIgJiYgY2ZfY3ZfJDNfc29uYW1lPXVua25vd24KKwkJZmkKKwlmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKK10pCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJQl9TVUZGSVggdmVyc2lvbjogMTUgdXBkYXRlZDogMjAwOC8wOS8xMyAxMTo1NDo0OAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDb21wdXRlIHRoZSBsaWJyYXJ5IGZpbGUtc3VmZml4IGZyb20gdGhlIGdpdmVuIG1vZGVsIG5hbWUKK2RubCAkMSA9IG1vZGVsIG5hbWUKK2RubCAkMiA9IHZhcmlhYmxlIHRvIHNldCAodGhlIG5vbWluYWwgbGlicmFyeSBzdWZmaXgpCitkbmwgJDMgPSBkZXBlbmRlbmN5IHZhcmlhYmxlIHRvIHNldCAoYWN0dWFsIGZpbGVuYW1lKQorZG5sIFRoZSB2YXJpYWJsZSAkTElCX1NVRkZJWCwgaWYgc2V0LCBwcmVwZW5kcyB0aGUgdmFyaWFibGUgdG8gc2V0LgorQUNfREVGVU4oW0NGX0xJQl9TVUZGSVhdLAorWworCUFDX1JFUVVJUkUoW0NGX1NVQlNUX05DVVJTRVNfVkVSU0lPTl0pCisJY2FzZSAkMSBpbgorCWxpYnRvb2wpCisJCSQyPScubGEnCisJCSQzPVskXSQyCisJCTs7CisJbm9ybWFsKQorCQkkMj0nLmEnCisJCSQzPVskXSQyCisJCTs7CisJZGVidWcpCisJCSQyPSdfZy5hJworCQkkMz1bJF0kMgorCQk7OworCXByb2ZpbGUpCisJCSQyPSdfcC5hJworCQkkMz1bJF0kMgorCQk7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkJY3lnd2luKikKKwkJCSQyPScuZGxsJworCQkJJDM9Jy5kbGwuYScKKwkJCTs7CisJCWRhcndpbiopCisJCQkkMj0nLmR5bGliJworCQkJJDM9WyRdJDIKKwkJCTs7CisJCWhwdXgqKQorCQkJY2FzZSAkdGFyZ2V0IGluCisJCQlpYTY0KikKKwkJCQkkMj0nLnNvJworCQkJCSQzPVskXSQyCisJCQkJOzsKKwkJCSopCisJCQkJJDI9Jy5zbCcKKwkJCQkkMz1bJF0kMgorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkqKQkkMj0nLnNvJworCQkJJDM9WyRdJDIKKwkJCTs7CisJCWVzYWMKKwllc2FjCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmICQyPSIke0xJQl9TVUZGSVh9WyRdeyQyfSIKKwl0ZXN0IC1uICIkTElCX1NVRkZJWCIgJiYgJDM9IiR7TElCX1NVRkZJWH1bJF17JDN9IgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSUJfVFlQRSB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDAvMTAvMjAgMjI6NTc6NDkKK2RubCAtLS0tLS0tLS0tLQorZG5sIENvbXB1dGUgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8gLWxpYnJhcnkgZnJvbSB0aGUgZ2l2ZW4gbW9kZWwgbmFtZQorZG5sICQxID0gbW9kZWwgbmFtZQorZG5sICQyID0gdmFyaWFibGUgdG8gc2V0CitkbmwgVGhlIHZhcmlhYmxlICRMSUJfU1VGRklYLCBpZiBzZXQsIHByZXBlbmRzIHRoZSB2YXJpYWJsZSB0byBzZXQuCitBQ19ERUZVTihbQ0ZfTElCX1RZUEVdLAorWworCWNhc2UgJDEgaW4KKwlsaWJ0b29sKSAkMj0nJyAgIDs7CisJbm9ybWFsKSAgJDI9JycgICA7OworCWRlYnVnKSAgICQyPSdfZycgOzsKKwlwcm9maWxlKSAkMj0nX3AnIDs7CisJc2hhcmVkKSAgJDI9JycgICA7OworCWVzYWMKKwl0ZXN0IC1uICIkTElCX1NVRkZJWCIgJiYgJDI9IiR7TElCX1NVRkZJWH1bJF17JDJ9IgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSU5LX0RBVEFPTkxZIHZlcnNpb246IDggdXBkYXRlZDogMjAwNi8xMi8xNiAxMjozMzozMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBTb21lIHN5c3RlbXMgaGF2ZSBhIG5vbi1BTlNJIGxpbmtlciB0aGF0IGRvZXNuJ3QgcHVsbCBpbiBtb2R1bGVzIHRoYXQgaGF2ZQorZG5sIG9ubHkgZGF0YSAoaS5lLiwgbm8gZnVuY3Rpb25zKSwgZm9yIGV4YW1wbGUgTmVYVC4gIE9uIHRob3NlIHN5c3RlbXMgd2UnbGwKK2RubCBoYXZlIHRvIHByb3ZpZGUgd3JhcHBlcnMgZm9yIGdsb2JhbCB0YWJsZXMgdG8gZW5zdXJlIHRoZXkncmUgbGlua2VkCitkbmwgcHJvcGVybHkuCitBQ19ERUZVTihbQ0ZfTElOS19EQVRBT05MWV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIGRhdGEtb25seSBsaWJyYXJ5IG1vZHVsZSBsaW5rc10pCitBQ19DQUNIRV9WQUwoY2ZfY3ZfbGlua19kYXRhb25seSxbCisJcm0gLWYgY29uZnRlc3QuYQorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCitpbnQJdGVzdGRhdGFbWzNdXSA9IHsgMTIzLCA0NTYsIDc4OSB9OworRU9GCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgOyB0aGVuCisJCW12IGNvbmZ0ZXN0Lm8gZGF0YS5vICYmIFwKKwkJKCAkQVIgJEFSX09QVFMgY29uZnRlc3QuYSBkYXRhLm8gKSAyPiZBQ19GRF9DQyAxPi9kZXYvbnVsbAorCWZpCisJcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBkYXRhLm8KKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgoraW50CXRlc3RmdW5jKCkKK3sKKyNpZiBkZWZpbmVkKE5lWFQpCisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgxKTsJLyogSSdtIHRvbGQgdGhpcyBsaW5rZXIgaXMgYnJva2VuICovCisjZWxzZQorCWV4dGVybiBpbnQgdGVzdGRhdGFbWzNdXTsKKwlyZXR1cm4gdGVzdGRhdGFbWzBdXSA9PSAxMjMKKwkgICAmJiAgdGVzdGRhdGFbWzFdXSA9PSA0NTYKKwkgICAmJiAgdGVzdGRhdGFbWzJdXSA9PSA3ODk7CisjZW5kaWYKK30KK0VPRgorCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCW12IGNvbmZ0ZXN0Lm8gZnVuYy5vICYmIFwKKwkJKCAkQVIgJEFSX09QVFMgY29uZnRlc3QuYSBmdW5jLm8gKSAyPiZBQ19GRF9DQyAxPi9kZXYvbnVsbAorCWZpCisJcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBmdW5jLm8KKwkoIGV2YWwgJFJBTkxJQiBjb25mdGVzdC5hICkgMj4mQUNfRkRfQ0MgPi9kZXYvbnVsbAorCWNmX3NhdmVMSUJTPSIkTElCUyIKKwlMSUJTPSJjb25mdGVzdC5hICRMSUJTIgorCUFDX1RSWV9SVU4oWworCWludCBtYWluKCkKKwl7CisJCWV4dGVybiBpbnQgdGVzdGZ1bmMoKTsKKwkJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSAoIXRlc3RmdW5jKCkpOworCX0KKwldLAorCVtjZl9jdl9saW5rX2RhdGFvbmx5PXllc10sCisJW2NmX2N2X2xpbmtfZGF0YW9ubHk9bm9dLAorCVtjZl9jdl9saW5rX2RhdGFvbmx5PXVua25vd25dKQorCUxJQlM9IiRjZl9zYXZlTElCUyIKKwldKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfbGlua19kYXRhb25seSkKKworaWYgdGVzdCAiJGNmX2N2X2xpbmtfZGF0YW9ubHkiID0gbm8gOyB0aGVuCisJQUNfREVGSU5FKEJST0tFTl9MSU5LRVIpCisJQlJPS0VOX0xJTktFUj0xCitmaQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0xJTktfRlVOQ1MgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDA2LzEyLzE2IDEyOjMzOjMwCitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIE1vc3QgVW5peCBzeXN0ZW1zIGhhdmUgYm90aCBsaW5rIGFuZCBzeW1saW5rLCBhIGZldyBkb24ndCBoYXZlIHN5bWxpbmsuCitkbmwgQSBmZXcgbm9uLVVuaXggc3lzdGVtcyBpbXBsZW1lbnQgc3ltbGluaywgYnV0IG5vdCBsaW5rLgorZG5sIEEgZmV3IG5vbi1zeXN0ZW1zIGltcGxlbWVudCBuZWl0aGVyIChvciBoYXZlIG5vbmZ1bmN0aW9uYWwgdmVyc2lvbnMpLgorQUNfREVGVU4oW0NGX0xJTktfRlVOQ1NdLAorWworQUNfQ0hFQ0tfRlVOQ1MoIFwKKwlyZW1vdmUgXAorCXVubGluayApCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCUFDX0NIRUNLX0ZVTkNTKCBcCisJCWxpbmsgXAorCQlzeW1saW5rICkKK2Vsc2UKKwlBQ19DQUNIRV9DSEVDSyhpZiBsaW5rL3N5bWxpbmsgZnVuY3Rpb25zIHdvcmssY2ZfY3ZfbGlua19mdW5jcyxbCisJCWNmX2N2X2xpbmtfZnVuY3M9CisJCWZvciBjZl9mdW5jIGluIGxpbmsgc3ltbGluayA7IGRvCisJCQlBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgoraW50IG1haW4oKQoreworCWludCBmYWlsID0gMDsKKwljaGFyICpzcmMgPSAiY29uZmlnLmxvZyI7CisJY2hhciAqZHN0ID0gImNvbmZ0ZXN0LmNoayI7CisJc3RydWN0IHN0YXQgc3JjX3NiOworCXN0cnVjdCBzdGF0IGRzdF9zYjsKKworCXN0YXQoc3JjLCAmc3JjX3NiKTsKKwlmYWlsID0gKCRjZl9mdW5jKCJjb25maWcubG9nIiwgImNvbmZ0ZXN0LmNoayIpIDwgMCkKKwkgICAgfHwgKHN0YXQoZHN0LCAmZHN0X3NiKSA8IDApCisJICAgIHx8IChkc3Rfc2Iuc3RfbXRpbWUgIT0gc3JjX3NiLnN0X210aW1lKTsKKyNpZmRlZiBIQVZFX1VOTElOSworCXVubGluayhkc3QpOworI2Vsc2UKKwlyZW1vdmUoZHN0KTsKKyNlbmRpZgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0gKGZhaWwpOworfQorCQkJXSxbCisJCQljZl9jdl9saW5rX2Z1bmNzPSIkY2ZfY3ZfbGlua19mdW5jcyAkY2ZfZnVuYyIKKwkJCWV2YWwgJ2FjX2N2X2Z1bmNfJyRjZl9mdW5jJz15ZXMnXSxbCisJCQlldmFsICdhY19jdl9mdW5jXyckY2ZfZnVuYyc9bm8nXSxbCisJCQlldmFsICdhY19jdl9mdW5jXyckY2ZfZnVuYyc9ZXJyb3InXSkKKwkJZG9uZQorCQl0ZXN0IC16ICIkY2ZfY3ZfbGlua19mdW5jcyIgJiYgY2ZfY3ZfbGlua19mdW5jcz1ubworCV0pCisJdGVzdCAiJGFjX2N2X2Z1bmNfbGluayIgICAgPSB5ZXMgJiYgQUNfREVGSU5FKEhBVkVfTElOSykKKwl0ZXN0ICIkYWNfY3ZfZnVuY19zeW1saW5rIiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9TWU1MSU5LKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFJTl9SRVRVUk4gdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA2LzEyLzEwIDA5OjUxOjU0CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiBhIHJldHVybiBmcm9tIG1haW4gdG8gdGhlIHNoZWxsIGFjdHVhbGx5IHJldHVybnMgdGhlIHNhbWUgZXhpdAorZG5sIGNvZGUuICBUaGlzIGlzIHRydWUgZm9yIGFsbW9zdCBhbnkgUE9TSVggZW52aXJvbm1lbnQuCitkbmwKK2RubCBTb21lIHZlcnkgb2xkIGVudmlyb25tZW50cyBkaWQgbm90IGZsdXNoIHN0ZG91dCwgZXRjLiwgb24gYW4gZXhpdC4gIFRoYXQKK2RubCB3b3VsZCBiZSBhIHVzZWZ1bCBjYXNlIHRvIHRlc3QgZm9yIGFsc28uCitBQ19ERUZVTihbQ0ZfTUFJTl9SRVRVUk5dLAorWworY2ZfY3ZfbWFpbl9yZXR1cm49cmV0dXJuCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01BS0VGTEFHUyB2ZXJzaW9uOiAxMiB1cGRhdGVkOiAyMDA2LzEwLzIxIDA4OjI3OjAzCitkbmwgLS0tLS0tLS0tLS0tCitkbmwgU29tZSAnbWFrZScgcHJvZ3JhbXMgc3VwcG9ydCAke01BS0VGTEFHU30sIHNvbWUgJHtNRkxBR1N9LCB0byBwYXNzICdtYWtlJworZG5sIG9wdGlvbnMgdG8gbG93ZXItbGV2ZWxzLiAgSXQncyB2ZXJ5IHVzZWZ1bCBmb3IgIm1ha2UgLW4iIC0tIGlmIHdlIGhhdmUgaXQuCitkbmwgKEdOVSAnbWFrZScgZG9lcyBib3RoLCBzb21ldGhpbmcgUE9TSVggJ21ha2UnLCB3aGljaCBoYXBwZW5zIHRvIG1ha2UgdGhlCitkbmwgJHtNQUtFRkxBR1N9IHZhcmlhYmxlIGluY29tcGF0aWJsZSBiZWNhdXNlIGl0IGFkZHMgdGhlIGFzc2lnbm1lbnRzIDotKQorQUNfREVGVU4oW0NGX01BS0VGTEFHU10sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgbWFrZWZsYWdzIHZhcmlhYmxlLCBjZl9jdl9tYWtlZmxhZ3MsWworCWNmX2N2X21ha2VmbGFncz0nJworCWZvciBjZl9vcHRpb24gaW4gJy0ke01BS0VGTEFHU30nICcke01GTEFHU30nCisJZG8KKwkJY2F0ID5jZl9tYWtlZmxhZ3MudG1wIDw8Q0ZfRU9GCitTSEVMTCA9IC9iaW4vc2gKK2FsbCA6CisJQCBlY2hvICcuJGNmX29wdGlvbicKK0NGX0VPRgorCQljZl9yZXN1bHQ9YCR7TUFLRS1tYWtlfSAtayAtZiBjZl9tYWtlZmxhZ3MudG1wIDI+L2Rldi9udWxsIHwgc2VkIC1lICdzLFtbIAldXSokLCwnYAorCQljYXNlICIkY2ZfcmVzdWx0IiBpbgorCQkuKmspCisJCQljZl9yZXN1bHQ9YCR7TUFLRS1tYWtlfSAtayAtZiBjZl9tYWtlZmxhZ3MudG1wIENDPWNjIDI+L2Rldi9udWxsYAorCQkJY2FzZSAiJGNmX3Jlc3VsdCIgaW4KKwkJCS4qQ0M9KikJY2ZfY3ZfbWFrZWZsYWdzPQorCQkJCTs7CisJCQkqKQljZl9jdl9tYWtlZmxhZ3M9JGNmX29wdGlvbgorCQkJCTs7CisJCQllc2FjCisJCQlicmVhaworCQkJOzsKKwkJLi0pCTs7CisJCSopCWVjaG8gImdpdmVuIG9wdGlvbiBcIiRjZl9vcHRpb25cIiwgbm8gbWF0Y2ggXCIkY2ZfcmVzdWx0XCIiCisJCQk7OworCQllc2FjCisJZG9uZQorCXJtIC1mIGNmX21ha2VmbGFncy50bXAKK10pCisKK0FDX1NVQlNUKGNmX2N2X21ha2VmbGFncykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFLRV9UQUdTIHZlcnNpb246IDIgdXBkYXRlZDogMjAwMC8xMC8wNCAwOToxODo0MAorZG5sIC0tLS0tLS0tLS0tLQorZG5sIEdlbmVyYXRlIHRhZ3MvVEFHUyB0YXJnZXRzIGZvciBtYWtlZmlsZXMuICBEbyBub3QgZ2VuZXJhdGUgVEFHUyBpZiB3ZSBoYXZlCitkbmwgYSBtb25vY2FzZSBmaWxlc3lzdGVtLgorQUNfREVGVU4oW0NGX01BS0VfVEFHU10sWworQUNfUkVRVUlSRShbQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FU10pCitBQ19DSEVDS19QUk9HKE1BS0VfTE9XRVJfVEFHUywgY3RhZ3MsIHllcywgbm8pCisKK2lmIHRlc3QgIiRjZl9jdl9taXhlZGNhc2UiID0geWVzIDsgdGhlbgorCUFDX0NIRUNLX1BST0coTUFLRV9VUFBFUl9UQUdTLCBldGFncywgeWVzLCBubykKK2Vsc2UKKwlNQUtFX1VQUEVSX1RBR1M9bm8KK2ZpCisKK2lmIHRlc3QgIiRNQUtFX1VQUEVSX1RBR1MiID0geWVzIDsgdGhlbgorCU1BS0VfVVBQRVJfVEFHUz0KK2Vsc2UKKwlNQUtFX1VQUEVSX1RBR1M9IiMiCitmaQorQUNfU1VCU1QoTUFLRV9VUFBFUl9UQUdTKQorCitpZiB0ZXN0ICIkTUFLRV9MT1dFUl9UQUdTIiA9IHllcyA7IHRoZW4KKwlNQUtFX0xPV0VSX1RBR1M9CitlbHNlCisJTUFLRV9MT1dFUl9UQUdTPSIjIgorZmkKK0FDX1NVQlNUKE1BS0VfTE9XRVJfVEFHUykKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFOUEFHRV9GT1JNQVQgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDAzLzEyLzIwIDE5OjMwOjM0CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBPcHRpb24gdG8gYWxsb3cgdXNlciB0byBvdmVycmlkZSBhdXRvbWF0aWMgY29uZmlndXJhdGlvbiBvZiBtYW5wYWdlIGZvcm1hdC4KK2RubCBUaGVyZSBhcmUgc2V2ZXJhbCBzcGVjaWFsIGNhc2VzOgorZG5sCitkbmwJZ3ppcCAtIG1hbiBjaGVja3MgZm9yLCBjYW4gZGlzcGxheSBnemlwJ2QgZmlsZXMKK2RubAljb21wcmVzcyAtIG1hbiBjaGVja3MgZm9yLCBjYW4gZGlzcGxheSBjb21wcmVzc2VkIGZpbGVzCitkbmwJQlNESSAtIGZpbGVzIGluIHRoZSBjYXQtZGlyZWN0b3JpZXMgYXJlIHN1ZmZpeGVkICIuMCIKK2RubAlmb3JtYXR0ZWQgLSBpbnN0YWxsZXIgc2hvdWxkIGZvcm1hdCAocHV0IGZpbGVzIGluIGNhdC1kaXJlY3RvcnkpCitkbmwJY2F0b25seSAtIGluc3RhbGxlciBzaG91bGQgb25seSBmb3JtYXQsIGUuZy4sIGZvciBhIHR1cm5rZXkgc3lzdGVtLgorZG5sCitkbmwgVGhlcmUgYXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHRoaXMgbWFjcm8gZG9lcyBub3QgdGVzdCwgZS5nLiwgSFBVWCdzCitkbmwgY29tcHJlc3NlZCBtYW5wYWdlcyAoYnV0IHVuY29tcHJlc3NlZCBtYW5wYWdlcyBhcmUgZmluZSwgYW5kIEhQVVgncyBuYW1pbmcKK2RubCBjb252ZW50aW9uIHdvdWxkIG5vdCBtYXRjaCBvdXIgdXNlKS4KK0FDX0RFRlVOKFtDRl9NQU5QQUdFX0ZPUk1BVF0sCitbCitBQ19SRVFVSVJFKFtDRl9QQVRIU0VQXSkKK0FDX01TR19DSEVDS0lORyhmb3JtYXQgb2YgbWFuLXBhZ2VzKQorCitBQ19BUkdfV0lUSChtYW5wYWdlLWZvcm1hdCwKKwlbICAtLXdpdGgtbWFucGFnZS1mb3JtYXQgICBzcGVjaWZ5IG1hbnBhZ2UtZm9ybWF0OiBnemlwL2NvbXByZXNzL0JTREkvbm9ybWFsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGx5IGZvcm1hdHRlZC9jYXRvbmx5LCBlLmcuLCBnemlwLGZvcm1hdHRlZF0sCisJW01BTlBBR0VfRk9STUFUPSR3aXRodmFsXSwKKwlbTUFOUEFHRV9GT1JNQVQ9dW5rbm93bl0pCisKK3Rlc3QgLXogIiRNQU5QQUdFX0ZPUk1BVCIgJiYgTUFOUEFHRV9GT1JNQVQ9dW5rbm93bgorTUFOUEFHRV9GT1JNQVQ9YGVjaG8gIiRNQU5QQUdFX0ZPUk1BVCIgfCBzZWQgLWUgJ3MvLC8gL2cnYAorCitjZl91bmtub3duPQorCitjYXNlICRNQU5QQUdFX0ZPUk1BVCBpbgordW5rbm93bikKKyAgaWYgdGVzdCAteiAiJE1BTlBBVEgiIDsgdGhlbgorICAgIE1BTlBBVEg9Ii91c3IvbWFuOi91c3Ivc2hhcmUvbWFuIgorICBmaQorCisgICMgbG9vayBmb3IgdGhlICdkYXRlJyBtYW4tcGFnZSAoaXQncyBtb3N0IGxpa2VseSB0byBiZSBpbnN0YWxsZWQhKQorICBNQU5QQUdFX0ZPUk1BVD0KKyAgY2ZfcHJlZm9ybT1ubworICBjZl9jYXRvbmx5PXllcworICBjZl9leGFtcGxlPWRhdGUKKworICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhTRVB9IgorICBmb3IgY2ZfZGlyIGluICRNQU5QQVRIOyBkbworICAgIHRlc3QgLXogIiRjZl9kaXIiICYmIGNmX2Rpcj0vdXNyL21hbgorICAgIGZvciBjZl9uYW1lIGluICRjZl9kaXIvbWFuKi8kY2ZfZXhhbXBsZS5bWzAxXV0qICRjZl9kaXIvY2F0Ki8kY2ZfZXhhbXBsZS5bWzAxXV0qICRjZl9kaXIvbWFuKi8kY2ZfZXhhbXBsZSAkY2ZfZGlyL2NhdCovJGNmX2V4YW1wbGUKKyAgICBkbworICAgICAgY2ZfdGVzdD1gZWNobyAkY2ZfbmFtZSB8IHNlZCAtZSAncy8qLy8nYAorICAgICAgaWYgdGVzdCAieCRjZl90ZXN0IiA9ICJ4JGNmX25hbWUiIDsgdGhlbgorCisJY2FzZSAiJGNmX25hbWUiIGluCisJKi5neikgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBnemlwIjs7CisJKi5aKSAgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBjb21wcmVzcyI7OworCSouMCkJTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBCU0RJIjs7CisJKikgICAgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBub3JtYWwiOzsKKwllc2FjCisKKwljYXNlICIkY2ZfbmFtZSIgaW4KKwkkY2ZfZGlyL21hbiopCisJICBjZl9jYXRvbmx5PW5vCisJICA7OworCSRjZl9kaXIvY2F0KikKKwkgIGNmX3ByZWZvcm09eWVzCisJICA7OworCWVzYWMKKwlicmVhaworICAgICAgZmkKKworICAgICAgIyBpZiB3ZSBmb3VuZCBhIG1hdGNoIGluIGVpdGhlciBtYW4qIG9yIGNhdCosIHN0b3AgbG9va2luZworICAgICAgaWYgdGVzdCAtbiAiJE1BTlBBR0VfRk9STUFUIiA7IHRoZW4KKwljZl9mb3VuZD1ubworCXRlc3QgIiRjZl9wcmVmb3JtIiA9IHllcyAmJiBNQU5QQUdFX0ZPUk1BVD0iJE1BTlBBR0VfRk9STUFUIGZvcm1hdHRlZCIKKwl0ZXN0ICIkY2ZfY2F0b25seSIgPSB5ZXMgJiYgTUFOUEFHRV9GT1JNQVQ9IiRNQU5QQUdFX0ZPUk1BVCBjYXRvbmx5IgorCWNhc2UgIiRjZl9uYW1lIiBpbgorCSRjZl9kaXIvY2F0KikKKwkgIGNmX2ZvdW5kPXllcworCSAgOzsKKwllc2FjCisJdGVzdCAkY2ZfZm91bmQ9eWVzICYmIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICAjIG9ubHkgY2hlY2sgdGhlIGZpcnN0IGRpcmVjdG9yeSBpbiAkTUFOUEFUSCB3aGVyZSB3ZSBmaW5kIG1hbnBhZ2VzCisgICAgaWYgdGVzdCAtbiAiJE1BTlBBR0VfRk9STUFUIiA7IHRoZW4KKyAgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgIyBpZiB3ZSBkaWQgbm90IGZpbmQgdGhlIGV4YW1wbGUsIGp1c3QgYXNzdW1lIGl0IGlzIG5vcm1hbAorICB0ZXN0IC16ICIkTUFOUEFHRV9GT1JNQVQiICYmIE1BTlBBR0VfRk9STUFUPW5vcm1hbAorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgOzsKKyopCisgIGZvciBjZl9vcHRpb24gaW4gJE1BTlBBR0VfRk9STUFUOyBkbworICAgICBjYXNlICRjZl9vcHRpb24gaW4gIyh2aQorICAgICBnemlwfGNvbXByZXNzfEJTREl8bm9ybWFsfGZvcm1hdHRlZHxjYXRvbmx5KQorICAgICAgIDs7CisgICAgICopCisgICAgICAgY2ZfdW5rbm93bj0iJGNmX3Vua25vd24gJGNmX29wdGlvbiIKKyAgICAgICA7OworICAgICBlc2FjCisgIGRvbmUKKyAgOzsKK2VzYWMKKworQUNfTVNHX1JFU1VMVCgkTUFOUEFHRV9GT1JNQVQpCitpZiB0ZXN0IC1uICIkY2ZfdW5rbm93biIgOyB0aGVuCisgIEFDX01TR19XQVJOKFVuZXhwZWN0ZWQgbWFucGFnZS1mb3JtYXQgJGNmX3Vua25vd24pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9NQU5QQUdFX1JFTkFNRVMgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDA1LzA2LzE4IDE4OjUxOjU3CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhlIERlYmlhbiBwZW9wbGUgaGF2ZSB0aGVpciBvd24gbmFtaW5nIGNvbnZlbnRpb24gZm9yIG1hbnBhZ2VzLiAgVGhpcworZG5sIG9wdGlvbiBsZXRzIHVzIG92ZXJyaWRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgcmVuYW1pbmcsIG9yCitkbmwgZGlzYWJsZSBpdCBhbHRvZ2V0aGVyLgorQUNfREVGVU4oW0NGX01BTlBBR0VfUkVOQU1FU10sCitbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIG1hbnBhZ2UgcmVuYW1pbmcpCisKK0FDX0FSR19XSVRIKG1hbnBhZ2UtcmVuYW1lcywKKwlbICAtLXdpdGgtbWFucGFnZS1yZW5hbWVzICBzcGVjaWZ5IG1hbnBhZ2UtcmVuYW1pbmddLAorCVtNQU5QQUdFX1JFTkFNRVM9JHdpdGh2YWxdLAorCVtNQU5QQUdFX1JFTkFNRVM9eWVzXSkKKworY2FzZSAiLiRNQU5QQUdFX1JFTkFNRVMiIGluICModmkKKy5ubykgIyh2aQorICA7OworLnwueWVzKQorICAjIERlYmlhbiAnbWFuJyBwcm9ncmFtPworICBpZiB0ZXN0IC1mIC9ldGMvZGViaWFuX3ZlcnNpb24gOyB0aGVuCisgICAgTUFOUEFHRV9SRU5BTUVTPWBjZCAkc3JjZGlyICYmIHB3ZGAvbWFuL21hbl9kYi5yZW5hbWVzCisgIGVsc2UKKyAgICBNQU5QQUdFX1JFTkFNRVM9bm8KKyAgZmkKKyAgOzsKK2VzYWMKKworaWYgdGVzdCAiJE1BTlBBR0VfUkVOQU1FUyIgIT0gbm8gOyB0aGVuCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9tYW4vJE1BTlBBR0VfUkVOQU1FUyA7IHRoZW4KKyAgICBNQU5QQUdFX1JFTkFNRVM9YGNkICRzcmNkaXIvbWFuICYmIHB3ZGAvJE1BTlBBR0VfUkVOQU1FUworICBlbGlmIHRlc3QgISAtZiAkTUFOUEFHRV9SRU5BTUVTIDsgdGhlbgorICAgIEFDX01TR19FUlJPUihub3QgYSBmaWxlbmFtZTogJE1BTlBBR0VfUkVOQU1FUykKKyAgZmkKKworICB0ZXN0ICEgLWQgbWFuICYmIG1rZGlyIG1hbgorCisgICMgQ29uc3RydWN0IGEgc2VkLXNjcmlwdCB0byBwZXJmb3JtIHJlbmFtaW5nIHdpdGhpbiBtYW4tcGFnZXMKKyAgaWYgdGVzdCAtbiAiJE1BTlBBR0VfUkVOQU1FUyIgOyB0aGVuCisgICAgdGVzdCAhIC1kIG1hbiAmJiBta2RpciBtYW4KKyAgICBzaCAkc3JjZGlyL21hbi9tYWtlX3NlZC5zaCAkTUFOUEFHRV9SRU5BTUVTID4uL2VkaXRfbWFuLnNlZAorICBmaQorZmkKKworQUNfTVNHX1JFU1VMVCgkTUFOUEFHRV9SRU5BTUVTKQorQUNfU1VCU1QoTUFOUEFHRV9SRU5BTUVTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9NQU5QQUdFX1NZTUxJTktTIHZlcnNpb246IDQgdXBkYXRlZDogMjAwMy8xMi8xMyAxODowMTo1OAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTb21lIHBlb3BsZSBleHBlY3QgZWFjaCB0b29sIHRvIG1ha2UgYWxsIGFsaWFzZXMgZm9yIG1hbnBhZ2VzIGluIHRoZQorZG5sIG1hbi1kaXJlY3RvcnkuICBUaGlzIGFjY29tbW9kYXRlcyB0aGUgb2xkZXIsIGxlc3MtY2FwYWJsZSBpbXBsZW1lbnRhdGlvbnMKK2RubCBvZiAnbWFuJywgYW5kIGlzIG9wdGlvbmFsLgorQUNfREVGVU4oW0NGX01BTlBBR0VfU1lNTElOS1NdLAorWworQUNfTVNHX0NIRUNLSU5HKGlmIG1hbnBhZ2UgYWxpYXNlcyB3aWxsIGJlIGluc3RhbGxlZCkKKworQUNfQVJHX1dJVEgobWFucGFnZS1hbGlhc2VzLAorCVsgIC0td2l0aC1tYW5wYWdlLWFsaWFzZXMgIHNwZWNpZnkgbWFucGFnZS1hbGlhc2VzIHVzaW5nIC5zb10sCisJW01BTlBBR0VfQUxJQVNFUz0kd2l0aHZhbF0sCisJW01BTlBBR0VfQUxJQVNFUz15ZXNdKQorCitBQ19NU0dfUkVTVUxUKCRNQU5QQUdFX0FMSUFTRVMpCisKK2lmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KKwljZl91c2Vfc3ltbGlua3M9eWVzCitlbHNlCisJY2ZfdXNlX3N5bWxpbmtzPW5vCitmaQorCitNQU5QQUdFX1NZTUxJTktTPW5vCitpZiB0ZXN0ICIkTUFOUEFHRV9BTElBU0VTIiA9IHllcyA7IHRoZW4KK0FDX01TR19DSEVDS0lORyhpZiBtYW5wYWdlIHN5bWxpbmtzIHNob3VsZCBiZSB1c2VkKQorCitBQ19BUkdfV0lUSChtYW5wYWdlLXN5bWxpbmtzLAorCVsgIC0td2l0aC1tYW5wYWdlLXN5bWxpbmtzIHNwZWNpZnkgbWFucGFnZS1hbGlhc2VzIHVzaW5nIHN5bWxpbmtzXSwKKwlbTUFOUEFHRV9TWU1MSU5LUz0kd2l0aHZhbF0sCisJW01BTlBBR0VfU1lNTElOS1M9JGNmX3VzZV9zeW1saW5rc10pCisKK2lmIHRlc3QgIiQkY2ZfdXNlX3N5bWxpbmtzIiA9IG5vOyB0aGVuCitpZiB0ZXN0ICIkTUFOUEFHRV9TWU1MSU5LUyIgPSB5ZXMgOyB0aGVuCisJQUNfTVNHX1dBUk4oY2Fubm90IG1ha2Ugc3ltbGlua3MsIHdpbGwgdXNlIC5zbyBmaWxlcykKKwlNQU5QQUdFX1NZTUxJTktTPW5vCitmaQorZmkKKworQUNfTVNHX1JFU1VMVCgkTUFOUEFHRV9TWU1MSU5LUykKK2ZpCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFOUEFHRV9UQkwgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAyLzAxLzE5IDIyOjUxOjMyCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIG9wdGlvbiBjYXVzZXMgbWFucGFnZXMgdG8gYmUgcnVuIHRocm91Z2ggdGJsKDEpIHRvIGdlbmVyYXRlIHRhYmxlcworZG5sIGNvcnJlY3RseS4KK0FDX0RFRlVOKFtDRl9NQU5QQUdFX1RCTF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIG1hbnBhZ2UgdGJsKQorCitBQ19BUkdfV0lUSChtYW5wYWdlLXRibCwKKwlbICAtLXdpdGgtbWFucGFnZS10YmwgICAgICBzcGVjaWZ5IG1hbnBhZ2UgcHJvY2Vzc2luZyB3aXRoIHRibF0sCisJW01BTlBBR0VfVEJMPSR3aXRodmFsXSwKKwlbTUFOUEFHRV9UQkw9bm9dKQorCitBQ19NU0dfUkVTVUxUKCRNQU5QQUdFX1RCTCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUFOX1BBR0VTIHZlcnNpb246IDM1IHVwZGF0ZWQ6IDIwMDcvMDMvMzEgMTE6NDc6MjkKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBUcnkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtYW4tcGFnZXMgb24gdGhlIHN5c3RlbSBhcmUgY29tcHJlc3NlZCwgYW5kIGlmCitkbmwgc28sIHdoYXQgZm9ybWF0IGlzIHVzZWQuICBVc2UgdGhpcyBpbmZvcm1hdGlvbiB0byBjb25zdHJ1Y3QgYSBzY3JpcHQgdGhhdAorZG5sIHdpbGwgaW5zdGFsbCBtYW4tcGFnZXMuCitBQ19ERUZVTihbQ0ZfTUFOX1BBR0VTXSwKK1sKK0NGX0hFTFBfTUVTU0FHRShPcHRpb25zIHRvIFNwZWNpZnkgSG93IE1hbnBhZ2VzIGFyZSBJbnN0YWxsZWQ6KQorQ0ZfTUFOUEFHRV9GT1JNQVQKK0NGX01BTlBBR0VfUkVOQU1FUworQ0ZfTUFOUEFHRV9TWU1MSU5LUworQ0ZfTUFOUEFHRV9UQkwKKworICBpZiB0ZXN0ICIkcHJlZml4IiA9ICJOT05FIiA7IHRoZW4KKyAgICAgY2ZfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGVsc2UKKyAgICAgY2ZfcHJlZml4PSIkcHJlZml4IgorICBmaQorCisgIGNhc2UgIiRNQU5QQUdFX0ZPUk1BVCIgaW4gIyAodmkKKyAgKmNhdG9ubHkqKSAjICh2aQorICAgIGNmX2Zvcm1hdD15ZXMKKyAgICBjZl9pbmJvdGg9bm8KKyAgICA7OworICAqZm9ybWF0dGVkKikgIyAodmkKKyAgICBjZl9mb3JtYXQ9eWVzCisgICAgY2ZfaW5ib3RoPXllcworICAgIDs7CisgICopCisgICAgY2ZfZm9ybWF0PW5vCisgICAgY2ZfaW5ib3RoPW5vCisgICAgOzsKKyAgZXNhYworCit0ZXN0ICEgLWQgbWFuICYmIG1rZGlyIG1hbgorCitjZl9zb19zdHJpcD0KK2NmX2NvbXByZXNzPQorY2FzZSAiJE1BTlBBR0VfRk9STUFUIiBpbiAjKHZpCisqY29tcHJlc3MqKSAjKHZpCisJY2Zfc29fc3RyaXA9IloiCisJY2ZfY29tcHJlc3M9Y29tcHJlc3MKKyAgOzsKKypnemlwKikgIyh2aQorCWNmX3NvX3N0cmlwPSJneiIKKwljZl9jb21wcmVzcz1nemlwCisgIDs7Citlc2FjCisKK2NmX2VkaXRfbWFuPS4vZWRpdF9tYW4uc2gKK2NmX21hbl9hbGlhcz1gcHdkYC9tYW5fYWxpYXMuc2VkCisKK2NhdCA+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisjISAvYmluL3NoCisjIHRoaXMgc2NyaXB0IGlzIGdlbmVyYXRlZCBieSB0aGUgY29uZmlndXJlLXNjcmlwdCBDRl9NQU5fUEFHRVMgbWFjcm8uCisKK3ByZWZpeD0iJGNmX3ByZWZpeCIKK2RhdGFkaXI9IiRkYXRhZGlyIgorCitOQ1VSU0VTX01BSk9SPSIkTkNVUlNFU19NQUpPUiIKK05DVVJTRVNfTUlOT1I9IiROQ1VSU0VTX01JTk9SIgorTkNVUlNFU19QQVRDSD0iJE5DVVJTRVNfUEFUQ0giCisKK05DVVJTRVNfT1NQRUVEPSIkTkNVUlNFU19PU1BFRUQiCitURVJNSU5GTz0iJFRFUk1JTkZPIgorCitNS0RJUlM9InNoIGBjZCAkc3JjZGlyICYmIHB3ZGAvbWtkaXJzLnNoIgorCitJTlNUQUxMPSIkSU5TVEFMTCIKK0lOU1RBTExfREFUQT0iJElOU1RBTExfREFUQSIKKwordHJhbnNmb3JtPSIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKworVE1QPVwke1RNUERJUi0vdG1wfS9tYW5cJFwkCit0cmFwICJybSAtZiBcJFRNUCIgMCAxIDIgNSAxNQorCitmb3JtPVxbJF0xCitzaGlmdCB8fCBleGl0IDEKKwordmVyYj1cWyRdMQorc2hpZnQgfHwgZXhpdCAxCisKK21hbmRpcj1cWyRdMQorc2hpZnQgfHwgZXhpdCAxCisKK3NyY2Rpcj1cWyRdMQordG9wX3NyY2Rpcj1cWyRdc3JjZGlyLy4uCitzaGlmdCB8fCBleGl0IDEKKworaWYgdGVzdCAiXCRmb3JtIiA9IG5vcm1hbCA7IHRoZW4KKwlpZiB0ZXN0ICIkY2ZfZm9ybWF0IiA9IHllcyA7IHRoZW4KKwlpZiB0ZXN0ICIkY2ZfaW5ib3RoIiA9IG5vIDsgdGhlbgorCQlzaCBcWyRdMCBmb3JtYXQgXCR2ZXJiIFwkbWFuZGlyIFwkc3JjZGlyIFxbJF0qCisJCWV4aXQgJD8KKwlmaQorCWZpCisJY2Zfc3ViZGlyPVwkbWFuZGlyL21hbgorCWNmX3RhYmxlcz0kTUFOUEFHRV9UQkwKK2Vsc2UKKwljZl9zdWJkaXI9XCRtYW5kaXIvY2F0CisJY2ZfdGFibGVzPXllcworZmkKKworIyBwcm9jZXNzIHRoZSBsaXN0IG9mIHNvdXJjZS1maWxlcworZm9yIGkgaW4gXFskXSogOyBkbworY2FzZSBcJGkgaW4gIyh2aQorKi5vcmlnfCoucmVqKSA7OyAjKHZpCisqLltbMC05XV0qKQorCXNlY3Rpb249XGBleHByICJcJGkiIDogJy4qXFwuXFwoW1swLTldXVxcKVtbeG1dXSonXGA7CisJaWYgdGVzdCBcJHZlcmIgPSBpbnN0YWxsaW5nIDsgdGhlbgorCWlmIHRlc3QgISAtZCBcJGNmX3N1YmRpclwke3NlY3Rpb259IDsgdGhlbgorCQlcJE1LRElSUyBcJGNmX3N1YmRpclwkc2VjdGlvbgorCWZpCisJZmkKKworCSMgcmVwbGFjZSB2YXJpYWJsZXMgaW4gbWFuIHBhZ2UKKwlpZiB0ZXN0ICEgLWYgJGNmX21hbl9hbGlhcyA7IHRoZW4KK2NhdCA+PiRjZl9tYW5fYWxpYXMgPDwtQ0ZfRU9GMgorCQlzLEBEQVRBRElSQCxcJGRhdGFkaXIsZworCQlzLEBURVJNSU5GT0AsXCRURVJNSU5GTyxnCisJCXMsQE5DVVJTRVNfTUFKT1JALFwkTkNVUlNFU19NQUpPUixnCisJCXMsQE5DVVJTRVNfTUlOT1JALFwkTkNVUlNFU19NSU5PUixnCisJCXMsQE5DVVJTRVNfUEFUQ0hALFwkTkNVUlNFU19QQVRDSCxnCisJCXMsQE5DVVJTRVNfT1NQRUVEQCxcJE5DVVJTRVNfT1NQRUVELGcKK0NGX0VPRgorCWlmZWxzZSgkMSwsLFsKKwlmb3IgY2ZfbmFtZSBpbiAkMQorCWRvCisJCWNmX05BTUU9YGVjaG8gIiRjZl9uYW1lIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKwkJY2ZfbmFtZT1gZWNobyAkY2ZfbmFtZXxzZWQgIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lImAKK2NhdCA+PiRjZl9lZGl0X21hbiA8PC1DRl9FT0YKKwkJcyxAJGNmX05BTUVALCRjZl9uYW1lLAorQ0ZfRU9GCisJZG9uZQorCV0pCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKK0NGX0VPRjIKKwkJZWNobyAiLi4ubWFkZSAkY2ZfbWFuX2FsaWFzIgorCWZpCisKKwlhbGlhc2VzPQorCWNmX3NvdXJjZT1cYGJhc2VuYW1lIFwkaVxgCisJaW5hbGlhcz1cJGNmX3NvdXJjZQorCXRlc3QgISAtZiBcJGluYWxpYXMgJiYgaW5hbGlhcz0iXCRzcmNkaXIvXCRpbmFsaWFzIgorCWlmIHRlc3QgISAtZiBcJGluYWxpYXMgOyB0aGVuCisJCWVjaG8gLi4gc2tpcHBlZCBcJGNmX3NvdXJjZQorCQljb250aW51ZQorCWZpCitDRl9FT0YKKworaWYgdGVzdCAiJE1BTlBBR0VfQUxJQVNFUyIgIT0gbm8gOyB0aGVuCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlhbGlhc2VzPVxgc2VkIC1mIFwkdG9wX3NyY2Rpci9tYW4vbWFubGlua3Muc2VkIFwkaW5hbGlhcyB8c2VkIC1mICRjZl9tYW5fYWxpYXMgfCBzb3J0IC11XGAKK0NGX0VPRgorZmkKKworaWYgdGVzdCAiJE1BTlBBR0VfUkVOQU1FUyIgPSBubyA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCSMgcGVyZm9ybSBwcm9ncmFtIHRyYW5zZm9ybWF0aW9ucyBmb3Igc2VjdGlvbiAxIG1hbiBwYWdlcworCWlmIHRlc3QgXCRzZWN0aW9uID0gMSA7IHRoZW4KKwkJY2ZfdGFyZ2V0PVwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0vXGBlY2hvIFwkY2Zfc291cmNlfHNlZCAiXCR7dHJhbnNmb3JtfSJcYAorCWVsc2UKKwkJY2ZfdGFyZ2V0PVwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0vXCRjZl9zb3VyY2UKKwlmaQorQ0ZfRU9GCitlbHNlCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwljZl90YXJnZXQ9XGBncmVwICJeXCRjZl9zb3VyY2UiICRNQU5QQUdFX1JFTkFNRVMgfCAkQVdLICd7cHJpbnQgXFskXTJ9J1xgCisJaWYgdGVzdCAteiAiXCRjZl90YXJnZXQiIDsgdGhlbgorCQllY2hvICc/IG1pc3NpbmcgcmVuYW1lIGZvciAnXCRjZl9zb3VyY2UKKwkJY2ZfdGFyZ2V0PSJcJGNmX3NvdXJjZSIKKwlmaQorCWNmX3RhcmdldD0iXCRjZl9zdWJkaXJcJHtzZWN0aW9ufS9cJHtjZl90YXJnZXR9IgorCitDRl9FT0YKK2ZpCisKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCXNlZAktZiAkY2ZfbWFuX2FsaWFzIFxcCitDRl9FT0YKKworaWYgdGVzdCAtZiAkTUFOUEFHRV9SRU5BTUVTIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJCTwgXCRpIHwgc2VkIC1mIGBwd2RgL2VkaXRfbWFuLnNlZCA+XCRUTVAKK0NGX0VPRgorZWxzZQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJCTwgXCRpID5cJFRNUAorQ0ZfRU9GCitmaQorCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKK2lmIHRlc3QgXCRjZl90YWJsZXMgPSB5ZXMgOyB0aGVuCisJdGJsIFwkVE1QID5cJFRNUC5vdXQKKwltdiBcJFRNUC5vdXQgXCRUTVAKK2ZpCitDRl9FT0YKKworaWYgdGVzdCAkd2l0aF9jdXJzZXNfaCAhPSB5ZXMgOyB0aGVuCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlzZWQgLWUgIi9cI1sgICAgXSppbmNsdWRlL3MsY3Vyc2VzLmgsbmN1cnNlcy5oLCIgPCBcJFRNUCA+XCRUTVAub3V0CisJbXYgXCRUTVAub3V0IFwkVE1QCitDRl9FT0YKK2ZpCisKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCWlmIHRlc3QgXCRmb3JtID0gZm9ybWF0IDsgdGhlbgorCQlucm9mZiAtbWFuIFwkVE1QID5cJFRNUC5vdXQKKwkJbXYgXCRUTVAub3V0IFwkVE1QCisJZmkKK0NGX0VPRgorCitpZiB0ZXN0IC1uICIkY2ZfY29tcHJlc3MiIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJaWYgdGVzdCBcJHZlcmIgPSBpbnN0YWxsaW5nIDsgdGhlbgorCWlmICggJGNmX2NvbXByZXNzIC1mIFwkVE1QICkKKwl0aGVuCisJCW12IFwkVE1QLiRjZl9zb19zdHJpcCBcJFRNUAorCWZpCisJZmkKKwljZl90YXJnZXQ9IlwkY2ZfdGFyZ2V0LiRjZl9zb19zdHJpcCIKK0NGX0VPRgorZmkKKworY2FzZSAiJE1BTlBBR0VfRk9STUFUIiBpbiAjKHZpCisqQlNESSopCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlpZiB0ZXN0IFwkZm9ybSA9IGZvcm1hdCA7IHRoZW4KKwkJIyBCU0RJIGluc3RhbGxzIG9ubHkgLjAgc3VmZml4ZXMgaW4gdGhlIGNhdCBkaXJlY3RvcmllcworCQljZl90YXJnZXQ9IlxgZWNobyBcJGNmX3RhcmdldHxzZWQgLWUgJ3MvXC5bWzEtOV1dXCtbW2Etel1dKi8uMC8nXGAiCisJZmkKK0NGX0VPRgorICA7OworZXNhYworCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlzdWZmaXg9XGBiYXNlbmFtZSBcJGNmX3RhcmdldCB8IHNlZCAtZSAncyVeW1teLl1dKiUlJ1xgCisJaWYgdGVzdCBcJHZlcmIgPSBpbnN0YWxsaW5nIDsgdGhlbgorCQllY2hvIFwkdmVyYiBcJGNmX3RhcmdldAorCQlcJElOU1RBTExfREFUQSBcJFRNUCBcJGNmX3RhcmdldAorCQl0ZXN0IC1kIFwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0gJiYKKwkJdGVzdCAtbiAiXCRhbGlhc2VzIiAmJiAoCisJCQljZCBcJGNmX3N1YmRpclwke3NlY3Rpb259ICYmICgKKwkJCQljZl9zb3VyY2U9XGBlY2hvIFwkY2ZfdGFyZ2V0IHxzZWQgLWUgJ3MlXi4qL1woW1teL11dW1teL11dKi9bW14vXV1bW14vXV0qJFwpJVwxJSdcYAorCQkJCXRlc3QgLW4gIiRjZl9zb19zdHJpcCIgJiYgY2Zfc291cmNlPVxgZWNobyBcJGNmX3NvdXJjZSB8c2VkIC1lICdzJVwuJGNmX3NvX3N0cmlwXCQlJSdcYAorCQkJCWNmX3RhcmdldD1cYGJhc2VuYW1lIFwkY2ZfdGFyZ2V0XGAKKwkJCQlmb3IgY2ZfYWxpYXMgaW4gXCRhbGlhc2VzCisJCQkJZG8KKwkJCQkJaWYgdGVzdCBcJHNlY3Rpb24gPSAxIDsgdGhlbgorCQkJCQkJY2ZfYWxpYXM9XGBlY2hvIFwkY2ZfYWxpYXN8c2VkICJcJHt0cmFuc2Zvcm19IlxgCisJCQkJCWZpCisKKwkJCQkJaWYgdGVzdCAiJE1BTlBBR0VfU1lNTElOS1MiID0geWVzIDsgdGhlbgorCQkJCQkJaWYgdGVzdCAtZiBcJGNmX2FsaWFzXCR7c3VmZml4fSA7IHRoZW4KKwkJCQkJCQlpZiAoIGNtcCAtcyBcJGNmX3RhcmdldCBcJGNmX2FsaWFzXCR7c3VmZml4fSApCisJCQkJCQkJdGhlbgorCQkJCQkJCQljb250aW51ZQorCQkJCQkJCWZpCisJCQkJCQlmaQorCQkJCQkJZWNobyAuLiBcJHZlcmIgYWxpYXMgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJCXJtIC1mIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCQkkTE5fUyBcJGNmX3RhcmdldCBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQllbGlmIHRlc3QgIlwkY2ZfdGFyZ2V0IiAhPSAiXCRjZl9hbGlhc1wke3N1ZmZpeH0iIDsgdGhlbgorCQkJCQkJZWNobyAiLnNvIFwkY2Zfc291cmNlIiA+XCRUTVAKK0NGX0VPRgoraWYgdGVzdCAtbiAiJGNmX2NvbXByZXNzIiA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCQkJCQkJaWYgdGVzdCAtbiAiJGNmX3NvX3N0cmlwIiA7IHRoZW4KKwkJCQkJCQkkY2ZfY29tcHJlc3MgLWYgXCRUTVAKKwkJCQkJCQltdiBcJFRNUC4kY2Zfc29fc3RyaXAgXCRUTVAKKwkJCQkJCWZpCitDRl9FT0YKK2ZpCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwkJCQkJCWVjaG8gLi4gXCR2ZXJiIGFsaWFzIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCQlybSAtZiBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQkJXCRJTlNUQUxMX0RBVEEgXCRUTVAgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJZmkKKwkJCQlkb25lCisJCQkpCisJCSkKKwllbGlmIHRlc3QgXCR2ZXJiID0gcmVtb3ZpbmcgOyB0aGVuCisJCXRlc3QgLWYgXCRjZl90YXJnZXQgJiYgKAorCQkJZWNobyBcJHZlcmIgXCRjZl90YXJnZXQKKwkJCXJtIC1mIFwkY2ZfdGFyZ2V0CisJCSkKKwkJdGVzdCAtZCBcJGNmX3N1YmRpclwke3NlY3Rpb259ICYmCisJCXRlc3QgLW4gIlwkYWxpYXNlcyIgJiYgKAorCQkJY2QgXCRjZl9zdWJkaXJcJHtzZWN0aW9ufSAmJiAoCisJCQkJZm9yIGNmX2FsaWFzIGluIFwkYWxpYXNlcworCQkJCWRvCisJCQkJCWlmIHRlc3QgXCRzZWN0aW9uID0gMSA7IHRoZW4KKwkJCQkJCWNmX2FsaWFzPVxgZWNobyBcJGNmX2FsaWFzfHNlZCAiXCR7dHJhbnNmb3JtfSJcYAorCQkJCQlmaQorCisJCQkJCWVjaG8gLi4gXCR2ZXJiIGFsaWFzIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCXJtIC1mIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJZG9uZQorCQkJKQorCQkpCisJZWxzZQorIwkJZWNobyAiLmh5IDAiCisJCWNhdCBcJFRNUAorCWZpCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAkY2ZfaW5ib3RoID0geWVzIDsgdGhlbgoraWYgdGVzdCBcJGZvcm0gIT0gZm9ybWF0IDsgdGhlbgorCXNoIFxbJF0wIGZvcm1hdCBcJHZlcmIgXCRtYW5kaXIgXCRzcmNkaXIgXFskXSoKK2ZpCitmaQorCitleGl0IDAKK0NGX0VPRgorY2htb2QgNzU1ICRjZl9lZGl0X21hbgorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX01BVEhfTElCIHZlcnNpb246IDUgdXBkYXRlZDogMjAwMC8wNS8yOCAwMTozOToxMAorZG5sIC0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMuICBBdCBsZWFzdCBvbmUgVU5JWCBzeXN0ZW0sIEFwcGxlIE1hY2ludG9zaAorZG5sIFJoYXBzb2R5IDUuNSwgZG9lcyBub3QgaGF2ZSAtbG0uICBXZSBjYW5ub3QgdXNlIHRoZSBzaW1wbGVyCitkbmwgQUNfQ0hFQ0tfTElCKG0sc2luKSwgYmVjYXVzZSB0aGF0IGZhaWxzIGZvciBDKysuCitBQ19ERUZVTihbQ0ZfTUFUSF9MSUJdLAorWworQUNfQ0FDSEVfQ0hFQ0soaWYgLWxtIG5lZWRlZCBmb3IgbWF0aCBmdW5jdGlvbnMsCisJY2ZfY3ZfbmVlZF9saWJtLFsKKwlBQ19UUllfTElOSyhbCisJI2luY2x1ZGUgPHN0ZGlvLmg+CisJI2luY2x1ZGUgPG1hdGguaD4KKwldLAorCVtkb3VibGUgeCA9IHJhbmQoKTsgcHJpbnRmKCJyZXN1bHQgPSAlZ1xuIiwgXWlmZWxzZSgkMiwsc2luKHgpLCQyKVspXSwKKwlbY2ZfY3ZfbmVlZF9saWJtPW5vXSwKKwlbY2ZfY3ZfbmVlZF9saWJtPXllc10pXSkKK2lmIHRlc3QgIiRjZl9jdl9uZWVkX2xpYm0iID0geWVzCit0aGVuCitpZmVsc2UoJDEsLFsKKwlMSUJTPSIkTElCUyAtbG0iCitdLFskMT0tbG1dKQorZmkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FUyB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDMvMDkvMjAgMTc6MDc6NTUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIGZpbGUtc3lzdGVtIHN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLiAgSWYgd2UncmUgYWJsZSB0bworZG5sIGNyZWF0ZSBhIGxvd2VyY2FzZSBuYW1lIGFuZCBzZWUgaXQgYXMgdXBwZXJjYXNlLCBpdCBkb2Vzbid0IHN1cHBvcnQgdGhhdC4KK0FDX0RFRlVOKFtDRl9NSVhFRENBU0VfRklMRU5BTUVTXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGlmIGZpbGVzeXN0ZW0gc3VwcG9ydHMgbWl4ZWQtY2FzZSBmaWxlbmFtZXMsY2ZfY3ZfbWl4ZWRjYXNlLFsKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCWNhc2UgJHRhcmdldF9hbGlhcyBpbiAjKHZpCisJKi1vczItZW14KnwqLW1zZG9zZGpncHAqfCotY3lnd2luKnwqLW1pbmd3MzIqfCotdXdpbiopICModmkKKwkJY2ZfY3ZfbWl4ZWRjYXNlPW5vCisJCTs7CisJKikKKwkJY2ZfY3ZfbWl4ZWRjYXNlPXllcworCQk7OworCWVzYWMKK2Vsc2UKKwlybSAtZiBjb25mdGVzdCBDT05GVEVTVAorCWVjaG8gdGVzdCA+Y29uZnRlc3QKKwlpZiB0ZXN0IC1mIENPTkZURVNUIDsgdGhlbgorCQljZl9jdl9taXhlZGNhc2U9bm8KKwllbHNlCisJCWNmX2N2X21peGVkY2FzZT15ZXMKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0IENPTkZURVNUCitmaQorXSkKK3Rlc3QgIiRjZl9jdl9taXhlZGNhc2UiID0geWVzICYmIEFDX0RFRklORShNSVhFRENBU0VfRklMRU5BTUVTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9NS1NURU1QIHZlcnNpb246IDUgdXBkYXRlZDogMjAwNi8xMi8xNiAxMjozMzozMAorZG5sIC0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgYSB3b3JraW5nIG1rc3RlbXAuICBUaGlzIGNyZWF0ZXMgdHdvIGZpbGVzLCBjaGVja3MgdGhhdCB0aGV5IGFyZQorZG5sIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIGFuZCBkaXN0aW5jdCAoQW1pZ2FPUyBhcHBhcmVudGx5IGZhaWxzIG9uIHRoZSBsYXN0KS4KK0FDX0RFRlVOKFtDRl9NS1NURU1QXSxbCitBQ19DQUNIRV9DSEVDSyhmb3Igd29ya2luZyBta3N0ZW1wLCBjZl9jdl9mdW5jX21rc3RlbXAsWworcm0gLWYgY29uZnRlc3QqCitBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitpbnQgbWFpbigpCit7CisJY2hhciAqdG1wbCA9ICJjb25mdGVzdFhYWFhYWCI7CisJY2hhciBuYW1lWzJdWzgwXTsKKwlpbnQgbjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc2I7CisKKwl1bWFzaygwNzcpOworCWZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKKwkJc3RyY3B5KG5hbWVbbl0sIHRtcGwpOworCQlpZiAoKGZkID0gbWtzdGVtcChuYW1lW25dKSkgPj0gMCkgeworCQkJaWYgKCFzdHJjbXAobmFtZVtuXSwgdG1wbCkKKwkJCSB8fCBzdGF0KG5hbWVbbl0sICZzYikgIT0gMAorCQkJIHx8IChzYi5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHCisJCQkgfHwgKHNiLnN0X21vZGUgJiAwNzcpICE9IDApIHsKKwkJCQlyZXN1bHQgPSAxOworCQkJfQorCQkJY2xvc2UoZmQpOworCQl9CisJfQorCWlmIChyZXN1bHQgPT0gMAorCSAmJiAhc3RyY21wKG5hbWVbMF0sIG5hbWVbMV0pKQorCQlyZXN1bHQgPSAxOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocmVzdWx0KTsKK30KK10sW2NmX2N2X2Z1bmNfbWtzdGVtcD15ZXMKK10sW2NmX2N2X2Z1bmNfbWtzdGVtcD1ubworXSxbQUNfQ0hFQ0tfRlVOQyhta3N0ZW1wKQorXSkKK10pCitpZiB0ZXN0ICIkY2ZfY3ZfZnVuY19ta3N0ZW1wIiA9IHllcyA7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9NS1NURU1QKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTVNHX0xPRyB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMDk6NTU6MTIKK2RubCAtLS0tLS0tLS0tCitkbmwgV3JpdGUgYSBkZWJ1ZyBtZXNzYWdlIHRvIGNvbmZpZy5sb2csIGFsb25nIHdpdGggdGhlIGxpbmUgbnVtYmVyIGluIHRoZQorZG5sIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQ0ZfTVNHX0xPR10sWworZWNobyAiJHthc19tZS1jb25maWd1cmV9Ol9fb2xpbmVfXzogdGVzdGluZyAkKiAuLi4iIDE+JkFDX0ZEX0NDCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX05DVVJTRVNfQUJJXzYgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA1LzA5LzE3IDE4OjQyOjQ5CitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCBuY3Vyc2VzJyBBQkkgdG8gNiB1bmxlc3Mgb3ZlcnJpZGRlbiBieSBleHBsaWNpdCBjb25maWd1cmUgb3B0aW9uLCBhbmQKK2RubCB3YXJuIGFib3V0IHRoaXMuCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19BQklfNl0sWworaWYgdGVzdCAiJHt3aXRoX2FiaV92ZXJzaW9uK3NldH0iICE9IHNldDsgdGhlbgorCWNhc2UgJGNmX2N2X3JlbF92ZXJzaW9uIGluCisJNS4qKQorCQljZl9jdl9yZWxfdmVyc2lvbj02LjAKKwkJY2ZfY3ZfYWJpX3ZlcnNpb249NgorCQlBQ19NU0dfV0FSTihPdmVycmlkaW5nIEFCSSB2ZXJzaW9uIHRvICRjZl9jdl9hYmlfdmVyc2lvbikKKwkJOzsKKwllc2FjCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OT19MRUFLU19PUFRJT04gdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA2LzEyLzE2IDE0OjI0OjA1CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgc2VlIENGX1dJVEhfTk9fTEVBS1MKK0FDX0RFRlVOKFtDRl9OT19MRUFLU19PUFRJT05dLFsKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2UgJDEgZm9yIHRlc3RpbmcpCitBQ19BUkdfV0lUSCgkMSwKKwlbJDJdLAorCVtBQ19ERUZJTkUoJDMpaWZlbHNlKFskNF0sLFsKKwkgJDQKK10pCisJOiAke3dpdGhfY2ZsYWdzOj0tZ30KKwk6ICR7d2l0aF9ub19sZWFrczo9eWVzfQorCSB3aXRoXyQxPXllc10sCisJW3dpdGhfJDE9XSkKK0FDX01TR19SRVNVTFQoJHt3aXRoXyQxOi1ub30pCisKK2Nhc2UgLiR3aXRoX2NmbGFncyBpbiAjKHZpCisuKi1nKikKKwljYXNlIC4kQ0ZMQUdTIGluICModmkKKwkuKi1nKikgIyh2aQorCQk7OworCSopCisJCUNGX0FERF9DRkxBR1MoWy1nXSkKKwkJOzsKKwllc2FjCisJOzsKK2VzYWMKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTlVNQkVSX1NZTlRBWCB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDMvMDkvMjAgMTg6MTI6NDkKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgbnVtYmVyLiAgSWYgbm90LCByZXBvcnQgYW4gZXJyb3IuCitkbmwgJDEgaXMgdGhlIHZhcmlhYmxlCitkbmwgJDIgaXMgdGhlIG1lc3NhZ2UKK0FDX0RFRlVOKFtDRl9OVU1CRVJfU1lOVEFYXSxbCitpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgIGNhc2UgJDEgaW4gIyh2aQorICBbWzAtOV1dKikgIyh2aQorIAk7OworICAqKQorCUFDX01TR19FUlJPUigkMiBpcyBub3QgYSBudW1iZXI6ICQxKQorIAk7OworICBlc2FjCitlbHNlCisgIEFDX01TR19FUlJPUigkMiB2YWx1ZSBpcyBlbXB0eSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX09CSl9TVUJESVIgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDAyLzAyLzIzIDIwOjM4OjMxCitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIENvbXB1dGUgdGhlIG9iamVjdC1kaXJlY3RvcnkgbmFtZSBmcm9tIHRoZSBnaXZlbiBtb2RlbCBuYW1lCitBQ19ERUZVTihbQ0ZfT0JKX1NVQkRJUl0sCitbCisJY2FzZSAkMSBpbgorCWxpYnRvb2wpICQyPSdvYmpfbG8nICA7OworCW5vcm1hbCkgICQyPSdvYmplY3RzJyA7OworCWRlYnVnKSAgICQyPSdvYmpfZycgOzsKKwlwcm9maWxlKSAkMj0nb2JqX3AnIDs7CisJc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJCWN5Z3dpbikgIyh2aQorCQkJJDI9J29iamVjdHMnIDs7CisJCSopCisJCQkkMj0nb2JqX3MnIDs7CisJCWVzYWMKKwllc2FjCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BBVEhTRVAgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAxLzAxLzEyIDAxOjIzOjUzCitkbmwgLS0tLS0tLS0tLQorZG5sIFByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlICRQQVRIIGFuZCBzaW1pbGFyIHNlcGFyYXRvcgorQUNfREVGVU4oW0NGX1BBVEhTRVBdLAorWworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJb3MyKikJUEFUSFNFUD0nOycgIDs7CisJKikJUEFUSFNFUD0nOicgIDs7CisJZXNhYworaWZlbHNlKCQxLCwsWyQxPSRQQVRIU0VQXSkKKwlBQ19TVUJTVChQQVRIU0VQKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QQVRIX1NZTlRBWCB2ZXJzaW9uOiAxMiB1cGRhdGVkOiAyMDA4LzAzLzIzIDE0OjQ1OjU5CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayB0aGUgYXJndW1lbnQgdG8gc2VlIHRoYXQgaXQgbG9va3MgbGlrZSBhIHBhdGhuYW1lLiAgUmV3cml0ZSBpdCBpZiBpdAorZG5sIGJlZ2lucyB3aXRoIG9uZSBvZiB0aGUgcHJlZml4L2V4ZWNfcHJlZml4IHZhcmlhYmxlcywgYW5kIHRoZW4gYWdhaW4gaWYgdGhlCitkbmwgcmVzdWx0IGJlZ2lucyB3aXRoICdOT05FJy4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHdvcmsgYXJvdW5kIGF1dG9jb25mJ3MKK2RubCBkZWxheWVkIGV2YWx1YXRpb24gb2YgdGhvc2Ugc3ltYm9scy4KK0FDX0RFRlVOKFtDRl9QQVRIX1NZTlRBWF0sWworaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorICBjZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLlskXSQxIiBpbiAjKHZpCisuXFskXVwoKlwpKnwuXCcqXCcqKSAjKHZpCisgIDs7CisuLnwuLyp8LlxcKikgIyh2aQorICA7OworLltbYS16QS1aXV06W1tcXC9dXSopICModmkgT1MvMiBFTVgKKyAgOzsKKy5cWyRdeypwcmVmaXh9KikgIyh2aQorICBldmFsICQxPSJbJF0kMSIKKyAgY2FzZSAiLlskXSQxIiBpbiAjKHZpCisgIC5OT05FLyopCisgICAgJDE9YGVjaG8gWyRdJDEgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgJDE9YGVjaG8gWyRdJDEgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgIDs7CisqKQorICBpZmVsc2UoJDIsLFtBQ19NU0dfRVJST1IoW2V4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIlskXSQxXCJdKV0sJDIpCisgIDs7Citlc2FjCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BPU0lYX0NfU09VUkNFIHZlcnNpb246IDYgdXBkYXRlZDogMjAwNS8wNy8xNCAyMDoyNToxMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRGVmaW5lIF9QT1NJWF9DX1NPVVJDRSB0byB0aGUgZ2l2ZW4gbGV2ZWwsIGFuZCBfUE9TSVhfU09VUkNFIGlmIG5lZWRlZC4KK2RubAorZG5sCVBPU0lYLjEtMTk5MAkJCQlfUE9TSVhfU09VUkNFCitkbmwJUE9TSVguMS0xOTkwIGFuZAkJCV9QT1NJWF9TT1VSQ0UgYW5kCitkbmwJCVBPU0lYLjItMTk5MiBDLUxhbmd1YWdlCQkJX1BPU0lYX0NfU09VUkNFPTIKK2RubAkJQmluZGluZ3MgT3B0aW9uCitkbmwJUE9TSVguMWItMTk5MwkJCQlfUE9TSVhfQ19TT1VSQ0U9MTk5MzA5TAorZG5sCVBPU0lYLjFjLTE5OTYJCQkJX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwKK2RubAlYL09wZW4gMjAwMAkJCQlfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorZG5sCitkbmwgUGFyYW1ldGVyczoKK2RubAkkMSBpcyB0aGUgbm9taW5hbCB2YWx1ZSBmb3IgX1BPU0lYX0NfU09VUkNFCitBQ19ERUZVTihbQ0ZfUE9TSVhfQ19TT1VSQ0VdLAorWworY2ZfUE9TSVhfQ19TT1VSQ0U9aWZlbHNlKCQxLCwxOTk1MDZMLCQxKQorCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworQ0ZfUkVNT1ZFX0RFRklORShjZl90cmltX0NGTEFHUywkY2Zfc2F2ZV9DRkxBR1MsX1BPU0lYX0NfU09VUkNFKQorQ0ZfUkVNT1ZFX0RFRklORShjZl90cmltX0NQUEZMQUdTLCRjZl9zYXZlX0NQUEZMQUdTLF9QT1NJWF9DX1NPVVJDRSkKKworQUNfQ0FDSEVfQ0hFQ0soaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UsY2ZfY3ZfcG9zaXhfY19zb3VyY2UsWworCUNGX01TR19MT0coaWYgdGhlIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgZ28gbm8gZnVydGhlcikKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X3Bvc2l4X2Nfc291cmNlPW5vXSwKKwlbY2Zfd2FudF9wb3NpeF9zb3VyY2U9bm8KKwkgY2FzZSAuJGNmX1BPU0lYX0NfU09VUkNFIGluICModmkKKwkgLltbMTJdXT8/KikgIyh2aQorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIgorCQk7OworCSAuMikgIyh2aQorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIgorCQljZl93YW50X3Bvc2l4X3NvdXJjZT15ZXMKKwkJOzsKKwkgLiopCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSBlc2FjCisJIGlmIHRlc3QgIiRjZl93YW50X3Bvc2l4X3NvdXJjZSIgPSB5ZXMgOyB0aGVuCisJCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZkZWYgX1BPU0lYX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSxbXSwKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9IiRjZl9jdl9wb3NpeF9jX3NvdXJjZSAtRF9QT1NJWF9TT1VSQ0UiKQorCSBmaQorCSBDRl9NU0dfTE9HKGlmZGVmIGZyb20gdmFsdWUgJGNmX1BPU0lYX0NfU09VUkNFKQorCSBDRkxBR1M9IiRjZl90cmltX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIKKwkgQ0ZfTVNHX0xPRyhpZiB0aGUgc2Vjb25kIGNvbXBpbGUgZG9lcyBub3QgbGVhdmUgb3VyIGRlZmluaXRpb24gaW50YWN0IGVycm9yKQorCSBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sLAorCSBbY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm9dKQorCSBDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCV0pCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiICE9IG5vIDsgdGhlbgorCUNGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCUNQUEZMQUdTPSIkY2ZfdHJpbV9DUFBGTEFHUyIKKwlpZiB0ZXN0ICIkY2ZfY3ZfY2NfdV9kX29wdGlvbnMiID0geWVzIDsgdGhlbgorCQljZl90ZW1wX3Bvc2l4X2Nfc291cmNlPWBlY2hvICIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiIHwgXAorCQkJCXNlZCAtZSAncy8tRC8tVS9nJyAtZSAncy89W1teIAldXSovL2cnYAorCQlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl90ZW1wX3Bvc2l4X2Nfc291cmNlIgorCWZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiCitmaQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BSRURFRklORSB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDMvMDcvMjYgMTc6NTM6NTYKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBBZGQgZGVmaW5pdGlvbnMgdG8gQ1BQRkxBR1MgdG8gZW5zdXJlIHRoZXkncmUgcHJlZGVmaW5lZCBmb3IgYWxsIGNvbXBpbGVzLgorZG5sCitkbmwgJDEgPSBzeW1ib2wgdG8gdGVzdAorZG5sICQyID0gdmFsdWUgKGlmIGFueSkgdG8gdXNlIGZvciBhIHByZWRlZmluaXRpb24KK0FDX0RFRlVOKFtDRl9QUkVERUZJTkVdLAorWworQUNfTVNHX0NIRUNLSU5HKGlmIHdlIG11c3QgZGVmaW5lICQxKQorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK10sWworI2lmbmRlZiAkMQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSxbY2ZfcmVzdWx0PW5vXSxbY2ZfcmVzdWx0PXllc10pCitBQ19NU0dfUkVTVUxUKCRjZl9yZXN1bHQpCisKK2lmIHRlc3QgIiRjZl9yZXN1bHQiID0geWVzIDsgdGhlbgorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgaWZlbHNlKCQyLCwtRCQxLFstRCQxPSQyXSkiCitlbGlmIHRlc3QgIngkMiIgIT0gIngiIDsgdGhlbgorCUFDX01TR19DSEVDS0lORyhjaGVja2luZyBmb3IgY29tcGF0aWJsZSB2YWx1ZSB2ZXJzdXMgJDIpCisJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK10sWworI2lmICQxLSQyIDwgMAorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSxbY2ZfcmVzdWx0PXllc10sW2NmX3Jlc3VsdD1ub10pCisJQUNfTVNHX1JFU1VMVCgkY2ZfcmVzdWx0KQorCWlmIHRlc3QgIiRjZl9yZXN1bHQiID0gbm8gOyB0aGVuCisJCSMgcGVyaGFwcyB3ZSBjYW4gb3ZlcnJpZGUgaXQgLSB0cnkuLi4KKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRCQxPSQyIgorCWZpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUkdfUlVMRVMgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA2LzA2LzAzIDExOjQ1OjA4CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgQXBwZW5kIGRlZmluaXRpb25zIGFuZCBydWxlcyBmb3IgdGhlIGdpdmVuIHByb2dyYW1zIHRvIHRoZSBzdWJkaXJlY3RvcnkKK2RubCBNYWtlZmlsZXMsIGFuZCB0aGUgcmVjdXJzaW9uIHJ1bGUgZm9yIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuCitkbmwKK2RubCBwYXJhbWV0ZXJzCitkbmwJJDEgPSBzY3JpcHQgdG8gcnVuCitkbmwJJDIgPSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzCitkbmwKK2RubCB2YXJpYWJsZXMKK2RubAkkQVdLCitBQ19ERUZVTihbQ0ZfUFJHX1JVTEVTXSwKK1sKK2ZvciBjZl9kaXIgaW4gJDIKK2RvCisJaWYgdGVzdCAhIC1kICRzcmNkaXIvJGNmX2RpcjsgdGhlbgorCQljb250aW51ZQorCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvcHJvZ3JhbXM7IHRoZW4KKwkJJEFXSyAtZiAkMSAkc3JjZGlyLyRjZl9kaXIvcHJvZ3JhbXMgPj4kY2ZfZGlyL01ha2VmaWxlCisJZmkKK2RvbmUKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0FXSyB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDYvMDkvMTYgMTE6NDA6NTkKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBhd2ssIGVuc3VyZSB0aGF0IHRoZSBjaGVjayBmb3VuZCBzb21ldGhpbmcuCitBQ19ERUZVTihbQ0ZfUFJPR19BV0tdLAorWworQUNfUFJPR19BV0sKK3Rlc3QgLXogIiRBV0siICYmIEFDX01TR19FUlJPUihObyBhd2sgcHJvZ3JhbSBmb3VuZCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19DQ19DX08gdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA2LzEyLzE2IDE1OjU1OjQ2CitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBBbmFsb2dvdXMgdG8gQUNfUFJPR19DQ19DX08sIGJ1dCBtb3JlIHVzZWZ1bDogdGVzdHMgb25seSAkQ0MsIGVuc3VyZXMgdGhhdAorZG5sIHRoZSBvdXRwdXQgZmlsZSBjYW4gYmUgcmVuYW1lZCwgYW5kIGFsbG93cyBmb3IgYSBzaGVsbCB2YXJpYWJsZSB0aGF0IGNhbgorZG5sIGJlIHVzZWQgbGF0ZXIuICBUaGUgcGFyYW1ldGVyIGlzIGVpdGhlciBDQyBvciBDWFguICBUaGUgcmVzdWx0IGlzIHRoZQorZG5sIGNhY2hlIHZhcmlhYmxlOgorZG5sCSRjZl9jdl9wcm9nX0NDX2NfbworZG5sCSRjZl9jdl9wcm9nX0NYWF9jX28KK0FDX0RFRlVOKFtDRl9QUk9HX0NDX0NfT10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgWyRdJDEgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyXSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl9wcm9nXyQxX2NfbywKK1sKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxDRl9FT0YKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKQoreworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CitDRl9FT0YKKyMgV2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuCisjIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgorYWNfdHJ5PSdbJF0kMSAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mQUNfRkRfQ0MnCitpZiBBQ19UUllfRVZBTChhY190cnkpICYmCisgIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYgQUNfVFJZX0VWQUwoYWNfdHJ5KTsKK3RoZW4KKyAgZXZhbCBjZl9jdl9wcm9nXyQxX2Nfbz15ZXMKK2Vsc2UKKyAgZXZhbCBjZl9jdl9wcm9nXyQxX2Nfbz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorXSlkbmwKK2lmIHRlc3QgJGNmX2N2X3Byb2dfJDFfY19vID0geWVzOyB0aGVuCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfQ0NfVV9EIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNS8wNy8xNCAxNjo1OTozMAorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgQyAocHJlcHJvY2Vzc29yKSAtVSBhbmQgLUQgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlcgorZG5sIGdpdmVuIHJhdGhlciB0aGFuIGJ5IHR5cGUgb2Ygb3B0aW9uLiAgU29tZSBjb21waWxlcnMgaW5zaXN0IG9uIGFwcGx5IGFsbAorZG5sIG9mIHRoZSAtVSBvcHRpb25zIGFmdGVyIGFsbCBvZiB0aGUgLUQgb3B0aW9ucy4gIE90aGVycyBhbGxvdyBtaXhpbmcgdGhlbSwKK2RubCBhbmQgbWF5IHByZWRlZmluZSBzeW1ib2xzIHRoYXQgY29uZmxpY3Qgd2l0aCB0aG9zZSB3ZSBkZWZpbmUuCitBQ19ERUZVTihbQ0ZfUFJPR19DQ19VX0RdLAorWworQUNfQ0FDSEVfQ0hFQ0soaWYgJENDIC1VIGFuZCAtRCBvcHRpb25zIHdvcmsgdG9nZXRoZXIsY2ZfY3ZfY2NfdV9kX29wdGlvbnMsWworCWNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlDUFBGTEFHUz0iLVVVX0RfT1BUSU9OUyAtRFVfRF9PUFRJT05TIC1ERF9VX09QVElPTlMgLVVEX1VfT1BUSU9OUyIKKwlBQ19UUllfQ09NUElMRShbXSxbCisjaWZuZGVmIFVfRF9PUFRJT05TCittYWtlIGFuIHVuZGVmaW5lZC1lcnJvcgorI2VuZGlmCisjaWZkZWYgIERfVV9PUFRJT05TCittYWtlIGEgZGVmaW5lZC1lcnJvcgorI2VuZGlmCisJXSxbCisJY2ZfY3ZfY2NfdV9kX29wdGlvbnM9eWVzXSxbCisJY2ZfY3ZfY2NfdV9kX29wdGlvbnM9bm9dKQorCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfRUdSRVAgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA2LzA5LzE2IDExOjQwOjU5CitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIEFDX1BST0dfRUdSRVAgd2FzIGludHJvZHVjZWQgaW4gYXV0b2NvbmYgMi41My4KK2RubCBUaGlzIG1hY3JvIGFkZHMgYSBjaGVjayB0byBlbnN1cmUgdGhlIHNjcmlwdCBmb3VuZCBzb21ldGhpbmcuCitBQ19ERUZVTihbQ0ZfUFJPR19FR1JFUF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlZ3JlcF0sIFthY19jdl9wcm9nX2VncmVwXSwKKyAgIFtpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCisgICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKKyAgICBmaV0pCisgRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKyBBQ19TVUJTVChbRUdSRVBdKQordGVzdCAteiAiJEVHUkVQIiAmJiBBQ19NU0dfRVJST1IoTm8gZWdyZXAgcHJvZ3JhbSBmb3VuZCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19FWFQgdmVyc2lvbjogMTAgdXBkYXRlZDogMjAwNC8wMS8wMyAxOToyODoxOAorZG5sIC0tLS0tLS0tLS0tCitkbmwgQ29tcHV0ZSAkUFJPR19FWFQsIHVzZWQgZm9yIG5vbi1Vbml4IHBvcnRzLCBzdWNoIGFzIE9TLzIgRU1YLgorQUNfREVGVU4oW0NGX1BST0dfRVhUXSwKK1sKK0FDX1JFUVVJUkUoW0NGX0NIRUNLX0NBQ0hFXSkKK2Nhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCitvczIqKQorICAgIENGTEFHUz0iJENGTEFHUyAtWm10IgorICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfX1NUX01UX0VSUk5PX18iCisgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtWm10IgorICAgICMgYXV0b2NvbmYncyBtYWNybyBzZXRzIC1aZXhlIGFuZCBzdWZmaXggYm90aCwgd2hpY2ggY29uZmxpY3Q6dworICAgIExERkxBR1M9IiRMREZMQUdTIC1abXQgLVpjcnRkbGwiCisgICAgYWNfY3ZfZXhlZXh0PS5leGUKKyAgICA7OworZXNhYworCitBQ19FWEVFWFQKK0FDX09CSkVYVAorCitQUk9HX0VYVD0iJEVYRUVYVCIKK0FDX1NVQlNUKFBST0dfRVhUKQordGVzdCAtbiAiJFBST0dfRVhUIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoUFJPR19FWFQsIiRQUk9HX0VYVCIpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfSU5TVEFMTCB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDIvMTIvMjEgMjI6NDY6MDcKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBGb3JjZSAkSU5TVEFMTCB0byBiZSBhbiBhYnNvbHV0ZS1wYXRoLiAgT3RoZXJ3aXNlLCBlZGl0X21hbi5zaCBhbmQgdGhlCitkbmwgbWlzYy90YWJzZXQgaW5zdGFsbCB3b24ndCB3b3JrIHByb3Blcmx5LiAgVXN1YWxseSB0aGlzIGhhcHBlbnMgb25seSB3aGVuCitkbmwgdXNpbmcgdGhlIGZhbGxiYWNrIG1raW5zdGFsbGRpcnMgc2NyaXB0CitBQ19ERUZVTihbQ0ZfUFJPR19JTlNUQUxMXSwKK1tBQ19QUk9HX0lOU1RBTEwKK2Nhc2UgJElOU1RBTEwgaW4KKy8qKQorICA7OworKikKKyAgQ0ZfRElSTkFNRShjZl9kaXIsJElOU1RBTEwpCisgIHRlc3QgLXogIiRjZl9kaXIiICYmIGNmX2Rpcj0uCisgIElOU1RBTEw9YGNkICRjZl9kaXIgJiYgcHdkYC9gZWNobyAkSU5TVEFMTCB8IHNlZCAtZSAncyVeLiovJSUnYAorICA7OworZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QUk9HX0xEQ09ORklHIHZlcnNpb246IDEgdXBkYXRlZDogMjAwMy8wOS8yMCAxNzowNzo1NQorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgbGRjb25maWcsIG5lZWRlZCB0byBmaXh1cCBzaGFyZWQgbGlicmFyaWVzIHRoYXQgd291bGQgYmUgYnVpbHQKK2RubCBhbmQgdGhlbiB1c2VkIGluIHRoZSBpbnN0YWxsLgorQUNfREVGVU4oW0NGX1BST0dfTERDT05GSUddLFsKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorICBMRENPTkZJRz06CitlbHNlCitjYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluICModmkKK2ZyZWVic2QqKSAjKHZpCisgIHRlc3QgLXogIiRMRENPTkZJRyIgJiYgTERDT05GSUc9Ii9zYmluL2xkY29uZmlnIC1SIgorICA7OworKikgTERQQVRIPSRQQVRIOi9zYmluOi91c3Ivc2JpbgorICBBQ19QQVRIX1BST0coTERDT05GSUcsbGRjb25maWcsLCRMRFBBVEgpCisgIDs7Citlc2FjCitmaQorQUNfU1VCU1QoTERDT05GSUcpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BST0dfTElOVCB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDYvMDkvMTYgMTE6NDA6NTkKK2RubCAtLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtDRl9QUk9HX0xJTlRdLAorWworQUNfQ0hFQ0tfUFJPR1MoTElOVCwgdGRsaW50IGxpbnQgYWxpbnQpCitBQ19TVUJTVChMSU5UX09QVFMpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1JFR0VYIHZlcnNpb246IDMgdXBkYXRlZDogMTk5Ny8xMS8wMSAxNDoyNjowMQorZG5sIC0tLS0tLS0tCitkbmwgQXR0ZW1wdCB0byBkZXRlcm1pbmUgaWYgd2UndmUgZ290IG9uZSBvZiB0aGUgZmxhdm9ycyBvZiByZWd1bGFyLWV4cHJlc3Npb24KK2RubCBjb2RlIHRoYXQgd2UgY2FuIHN1cHBvcnQuCitBQ19ERUZVTihbQ0ZfUkVHRVhdLAorWworQUNfTVNHX0NIRUNLSU5HKFtmb3IgcmVndWxhci1leHByZXNzaW9uIGhlYWRlcnNdKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3JlZ2V4LFsKK0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8cmVnZXguaD5dLFsKKwlyZWdleF90ICpwOworCWludCB4ID0gcmVnY29tcChwLCAiIiwgMCk7CisJaW50IHkgPSByZWdleGVjKHAsICIiLCAwLCAwLCAwKTsKKwlyZWdmcmVlKHApOworCV0sW2NmX2N2X3JlZ2V4PSJyZWdleC5oIl0sWworCUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cmVnZXhwLmg+XSxbCisJCWNoYXIgKnAgPSBjb21waWxlKCIiLCAiIiwgIiIsIDApOworCQlpbnQgeCA9IHN0ZXAoIiIsICIiKTsKKwldLFtjZl9jdl9yZWdleD0icmVnZXhwLmgiXSxbCisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCUxJQlM9Ii1sZ2VuICRMSUJTIgorCQlBQ19UUllfTElOSyhbI2luY2x1ZGUgPHJlZ2V4cHIuaD5dLFsKKwkJCWNoYXIgKnAgPSBjb21waWxlKCIiLCAiIiwgIiIpOworCQkJaW50IHggPSBzdGVwKCIiLCAiIik7CisJCV0sW2NmX2N2X3JlZ2V4PSJyZWdleHByLmgiXSxbTElCUz0iJGNmX3NhdmVfTElCUyJdKV0pXSkKK10pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9yZWdleCkKK2Nhc2UgJGNmX2N2X3JlZ2V4IGluCisJcmVnZXguaCkgICBBQ19ERUZJTkUoSEFWRV9SRUdFWF9IX0ZVTkNTKSA7OworCXJlZ2V4cC5oKSAgQUNfREVGSU5FKEhBVkVfUkVHRVhQX0hfRlVOQ1MpIDs7CisJcmVnZXhwci5oKSBBQ19ERUZJTkUoSEFWRV9SRUdFWFBSX0hfRlVOQ1MpIDs7Citlc2FjCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1JFTU9WRV9ERUZJTkUgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA1LzA3LzA5IDE2OjEyOjE4CitkbmwgLS0tLS0tLS0tLS0tLS0tLQorZG5sIFJlbW92ZSBhbGwgLVUgYW5kIC1EIG9wdGlvbnMgdGhhdCByZWZlciB0byB0aGUgZ2l2ZW4gc3ltYm9sIGZyb20gYSBsaXN0Citkbmwgb2YgQyBjb21waWxlciBvcHRpb25zLiAgVGhpcyB3b3JrcyBhcm91bmQgdGhlIHByb2JsZW0gdGhhdCBub3QgYWxsCitkbmwgY29tcGlsZXJzIHByb2Nlc3MgLVUgYW5kIC1EIG9wdGlvbnMgZnJvbSBsZWZ0LXRvLXJpZ2h0LCBzbyBhIC1VIG9wdGlvbgorZG5sIGNhbm5vdCBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgZWZmZWN0IG9mIGEgcHJlY2VkaW5nIC1EIG9wdGlvbi4KK2RubAorZG5sICQxID0gdGFyZ2V0ICh3aGljaCBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgc291cmNlIHZhcmlhYmxlKQorZG5sICQyID0gc291cmNlIChpbmNsdWRpbmcgJyQnKQorZG5sICQzID0gc3ltYm9sIHRvIHJlbW92ZQorZGVmaW5lKFtDRl9SRU1PVkVfREVGSU5FXSwKK1sKKyMgcmVtb3ZlICQzIHN5bWJvbCBmcm9tICQyCiskMT1gZWNobyAiJDIiIHwgXAorCXNlZAktZSAncy8tW1tVRF1dJDNcKD1bW14gCV1dKlwpXD9bWyAJXV0vIC9nJyBcCisJCS1lICdzLy1bW1VEXV0kM1woPVtbXiAJXV0qXClcP1skXS8vZydgCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1JFTU9WRV9MSUIgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA3LzAyLzE3IDE0OjExOjUyCitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIFJlbW92ZSB0aGUgZ2l2ZW4gbGlicmFyeSBmcm9tIHRoZSBzeW1ib2wKK2RubAorZG5sICQxID0gdGFyZ2V0ICh3aGljaCBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgc291cmNlIHZhcmlhYmxlKQorZG5sICQyID0gc291cmNlIChpbmNsdWRpbmcgJyQnKQorZG5sICQzID0gbGlicmFyeSB0byByZW1vdmUKK2RlZmluZShbQ0ZfUkVNT1ZFX0xJQl0sCitbCisjIHJlbW92ZSAkMyBsaWJyYXJ5IGZyb20gJDIKKyQxPWBlY2hvICIkMiIgfCBzZWQgLWUgJ3MvLWwkM1tbIAldXS8vZycgLWUgJ3MvLWwkM1skXS8vJ2AKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUlBBVEhfSEFDSyB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDgvMDkvMTMgMTI6NTM6MjYKK2RubCAtLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQ0ZfUlBBVEhfSEFDS10sCitbCitBQ19SRVFVSVJFKFtDRl9TSEFSRURfT1BUU10pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHVwZGF0ZWQgTERGTEFHUykKK2lmIHRlc3QgLW4gIiRMREZMQUdTIiA7IHRoZW4KK0FDX01TR19SRVNVTFQobWF5YmUpCitDRl9WRVJCT1NFKC4uLmNoZWNraW5nIExERkxBR1MgJExERkxBR1MpCitDRl9WRVJCT1NFKC4uLmNoZWNraW5nIEVYVFJBX0xERkxBR1MgJEVYVFJBX0xERkxBR1MpCitjYXNlICIkRVhUUkFfTERGTEFHUyIgaW4gIyh2aQorLVdsLC1ycGF0aCwqKSAjKHZpCisJY2ZfcnBhdGhfaGFjaz0iLVdsLC1ycGF0aCwiCisJOzsKKy1SXCAqKQorCWNmX3JwYXRoX2hhY2s9Ii1SICIKKwk7OworLVIqKQorCWNmX3JwYXRoX2hhY2s9Ii1SIgorCTs7CisqKQorCWNmX3JwYXRoX2hhY2s9CisJOzsKK2VzYWMKK2lmIHRlc3QgLW4gIiRjZl9ycGF0aF9oYWNrIiA7IHRoZW4KKwljZl9ycGF0aF9kc3Q9CisJZm9yIGNmX3JwYXRoX3NyYyBpbiAkTERGTEFHUworCWRvCisJCUNGX1ZFUkJPU0UoRmlsdGVyaW5nICRjZl9ycGF0aF9zcmMpCisJCWNhc2UgJGNmX3JwYXRoX3NyYyBpbiAjKHZpCisJCS1MKikgIyh2aQorCQkJaWYgdGVzdCAiJGNmX3JwYXRoX2hhY2siID0gIi1SICIgOyB0aGVuCisJCQkJY2ZfcnBhdGhfdG1wPWBlY2hvICIkY2ZfcnBhdGhfc3JjIiB8c2VkIC1lICdzJS1MJS1SICUnYAorCQkJZWxzZQorCQkJCWNmX3JwYXRoX3RtcD1gZWNobyAiJGNmX3JwYXRoX3NyYyIgfHNlZCAtZSBzJS1MJSRjZl9ycGF0aF9oYWNrJWAKKwkJCWZpCisJCQlDRl9WRVJCT1NFKC4uLkZpbHRlciAkY2ZfcnBhdGhfdG1wKQorCQkJRVhUUkFfTERGTEFHUz0iJGNmX3JwYXRoX3RtcCAkRVhUUkFfTERGTEFHUyIKKwkJCTs7CisJCWVzYWMKKwkJY2ZfcnBhdGhfZHN0PSIkY2ZfcnBhdGhfZHN0ICRjZl9ycGF0aF9zcmMiCisJZG9uZQorCUxERkxBR1M9JGNmX3JwYXRoX2RzdAorCUNGX1ZFUkJPU0UoLi4uY2hlY2tlZCBMREZMQUdTICRMREZMQUdTKQorCUNGX1ZFUkJPU0UoLi4uY2hlY2tlZCBFWFRSQV9MREZMQUdTICRFWFRSQV9MREZMQUdTKQorZmkKK2Vsc2UKK0FDX01TR19SRVNVTFQobm8pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TSEFSRURfT1BUUyB2ZXJzaW9uOiA1MyB1cGRhdGVkOiAyMDA4LzEwLzI1IDE4OjE0OjIwCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIEF0dGVtcHQgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBDQy9MRCBvcHRpb25zIGZvciBjcmVhdGluZyBhIHNoYXJlZAorZG5sIGxpYnJhcnkuCitkbmwKK2RubCBOb3RlOiAke0xPQ0FMX0xERkxBR1N9IGlzIHVzZWQgdG8gbGluayBleGVjdXRhYmxlcyB0aGF0IHdpbGwgcnVuIHdpdGhpbiB0aGUKK2RubCBidWlsZC10cmVlLCBpLmUuLCBieSBtYWtpbmcgdXNlIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgY29tcGlsZWQgaW4gLi4vbGliCitkbmwgV2UgYXZvaWQgY29tcGlsaW5nLWluIGEgLi4vbGliIHBhdGggZm9yIHRoZSBzaGFyZWQgbGlicmFyeSBzaW5jZSB0aGF0IGNhbgorZG5sIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzIGF0IHJ1bnRpbWUuCitkbmwgJHtMT0NBTF9MREZMQUdTMn0gaGFzIHRoZSBzYW1lIGludGVudGlvbiBidXQgYXNzdW1lcyB0aGF0IHRoZSBzaGFyZWQgbGlicmFyaWVzCitkbmwgYXJlIGNvbXBpbGVkIGluIC4uLy4uL2xpYgorZG5sCitkbmwgVGhlIHZhcmlhYmxlICdjZl9jdl9kb19zeW1saW5rcycgaXMgdXNlZCB0byBjb250cm9sIHdoZXRoZXIgd2UgY29uZmlndXJlCitkbmwgdG8gaW5zdGFsbCBzeW1ib2xpYyBsaW5rcyB0byB0aGUgcmVsL2FiaSB2ZXJzaW9ucyBvZiBzaGFyZWQgbGlicmFyaWVzLgorZG5sCitkbmwgVGhlIHZhcmlhYmxlICdjZl9jdl9zaGxpYl92ZXJzaW9uJyBjb250cm9scyB3aGV0aGVyIHdlIHVzZSB0aGUgcmVsIG9yIGFiaQorZG5sIHZlcnNpb24gd2hlbiBtYWtpbmcgc3ltYm9saWMgbGlua3MuCitkbmwKK2RubCBUaGUgdmFyaWFibGUgJ2NmX2N2X3NobGliX3ZlcnNpb25faW5maXgnIGNvbnRyb2xzIHdoZXRoZXIgc2hhcmVkIGxpYnJhcnkKK2RubCB2ZXJzaW9uIG51bWJlcnMgYXJlIGluZml4IChleDogbGlibmN1cnNlcy48dmVyPi5keWxpYikgb3IgcG9zdGZpeAorZG5sIChleDogbGlibmN1cnNlcy5zby48dmVyPikuCitkbmwKK2RubCBTb21lIGxvYWRlcnMgbGVhdmUgJ3NvX2xvY2F0aW9ucycgbHlpbmcgYXJvdW5kLiAgSXQncyBuaWNlIHRvIGNsZWFuIHVwLgorQUNfREVGVU4oW0NGX1NIQVJFRF9PUFRTXSwKK1sKKwlBQ19SRVFVSVJFKFtDRl9TVUJTVF9OQ1VSU0VTX1ZFUlNJT05dKQorCUxPQ0FMX0xERkxBR1M9CisJTE9DQUxfTERGTEFHUzI9CisJTERfU0hBUkVEX09QVFM9CisJSU5TVEFMTF9MSUI9Ii1tIDY0NCIKKworCWNmX2N2X2RvX3N5bWxpbmtzPW5vCisKKwlBQ19NU0dfQ0hFQ0tJTkcoaWYgcmVsZWFzZS9hYmkgdmVyc2lvbiBzaG91bGQgYmUgdXNlZCBmb3Igc2hhcmVkIGxpYnMpCisJQUNfQVJHX1dJVEgoc2hsaWItdmVyc2lvbiwKKwlbICAtLXdpdGgtc2hsaWItdmVyc2lvbj1YICBTcGVjaWZ5IHJlbCBvciBhYmkgdmVyc2lvbiBmb3Igc2hhcmVkIGxpYnNdLAorCVt0ZXN0IC16ICIkd2l0aHZhbCIgJiYgd2l0aHZhbD1hdXRvCisJY2FzZSAkd2l0aHZhbCBpbiAjKHZpCisJeWVzKSAjKHZpCisJCWNmX2N2X3NobGliX3ZlcnNpb249YXV0bworCQk7OworCXJlbHxhYml8YXV0b3xubykgIyh2aQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPSR3aXRodmFsCisJCTs7CisJKikKKwkJQUNfTVNHX0VSUk9SKFtvcHRpb24gdmFsdWUgbXVzdCBiZSBvbmUgb2Y6IHJlbCwgYWJpLCBhdXRvIG9yIG5vXSkKKwkJOzsKKwllc2FjCisJXSxbY2ZfY3Zfc2hsaWJfdmVyc2lvbj1hdXRvXSkKKwlBQ19NU0dfUkVTVUxUKCRjZl9jdl9zaGxpYl92ZXJzaW9uKQorCisJY2ZfY3Zfcm1fc29fbG9jcz1ubworCisJIyBTb21lIGxlc3MtY2FwYWJsZSBwb3J0cyBvZiBnY2Mgc3VwcG9ydCBvbmx5IC1mcGljCisJQ0NfU0hBUkVEX09QVFM9CisJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwl0aGVuCisJCUFDX01TR19DSEVDS0lORyh3aGljaCAkQ0Mgb3B0aW9uIHRvIHVzZSkKKwkJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJCWZvciBDQ19TSEFSRURfT1BUUyBpbiAtZlBJQyAtZnBpYyAnJworCQlkbworCQkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJENDX1NIQVJFRF9PUFRTIgorCQkJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpby5oPl0sW2ludCB4ID0gMV0sW2JyZWFrXSxbXSkKKwkJZG9uZQorCQlBQ19NU0dfUkVTVUxUKCRDQ19TSEFSRURfT1BUUykKKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJZmkKKworCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9bm8KKworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluCisJYmVvcyopCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtbyAkW0BdIC1YbGlua2VyIC1zb25hbWU9YGJhc2VuYW1lICRbQF1gIC1ub3N0YXJ0IC1lIDAnCisJCTs7CisJY3lnd2luKikKKwkJQ0NfU0hBUkVEX09QVFM9CisJCU1LX1NIQVJFRF9MSUI9J3NoIC4uL21rX3NoYXJlZF9saWIuc2ggWyRdQCBbJF17Q0N9IFskXXtDRkxBR1N9JworCQljZl9jdl9zaGxpYl92ZXJzaW9uPWN5Z2RsbAorCQljZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4PWN5Z2RsbAorCQljYXQgPm1rX3NoYXJlZF9saWIuc2ggPDwtQ0ZfRU9GCisJCSMhL2Jpbi9zaAorCQlTSEFSRURfTElCPVxbJF0xCisJCUlNUE9SVF9MSUI9XGBlY2hvICJcWyRdMSIgfCBzZWQgLWUgJ3MvY3lnL2xpYi8nIC1lICdzL1tbMC05XV0qXC5kbGxbJF0vLmRsbC5hLydcYAorCQlzaGlmdAorCQljYXQgPDwtRU9GCisJCUxpbmtpbmcgc2hhcmVkIGxpYnJhcnkKKwkJKiogU0hBUkVEX0xJQiBcWyRdU0hBUkVEX0xJQgorCQkqKiBJTVBPUlRfTElCIFxbJF1JTVBPUlRfTElCCitFT0YKKwkJZXhlYyBcWyRdKiAtc2hhcmVkIC1XbCwtLW91dC1pbXBsaWI9Li4vbGliL1xbJF17SU1QT1JUX0xJQn0gLVdsLC0tZXhwb3J0LWFsbC1zeW1ib2xzIC1vIC4uL2xpYi9cWyRde1NIQVJFRF9MSUJ9CitDRl9FT0YKKwkJY2htb2QgK3ggbWtfc2hhcmVkX2xpYi5zaCAKKwkJOzsKKwlkYXJ3aW4qKQorCQlFWFRSQV9DRkxBR1M9Ii1uby1jcHAtcHJlY29tcCIKKwkJQ0NfU0hBUkVEX09QVFM9Ii1keW5hbWljIgorCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAke2xpYmRpcn0vYGJhc2VuYW1lICRbQF1gIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHtBQklfVkVSU0lPTn0gLWN1cnJlbnRfdmVyc2lvbiAke0FCSV9WRVJTSU9OfSAtbyAkW0BdJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249YWJpCisJCWNmX2N2X3NobGliX3ZlcnNpb25faW5maXg9eWVzCisJCUFDX0NBQ0hFX0NIRUNLKFtpZiBsZCAtc2VhcmNoX3BhdGhzX2ZpcnN0IHdvcmtzXSwgY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3QsIFsKKwkJCWNmX3NhdmVfTERGTEFHUz0kTERGTEFHUworCQkJTERGTEFHUz0iJExERkxBR1MgLVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QiCisJCQlBQ19UUllfTElOSygsIFtpbnQgaTtdLCBjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdD15ZXMsIGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0PW5vKQorCQkJCUxERkxBR1M9JGNmX3NhdmVfTERGTEFHU10pCisJCWlmIHRlc3QgJGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0ID0geWVzOyB0aGVuCisJCQlMREZMQUdTPSIkTERGTEFHUyAtV2wsLXNlYXJjaF9wYXRoc19maXJzdCIKKwkJZmkKKwkJOzsKKwlocHV4KikKKwkJIyAodGVzdGVkIHdpdGggZ2NjIDIuNy4yIC0tIEkgZG9uJ3QgaGF2ZSBjODkpCisJCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJCQlMRF9TSEFSRURfT1BUUz0nLVhsaW5rZXIgK2IgLVhsaW5rZXIgJHtsaWJkaXJ9JworCQllbHNlCisJCQlDQ19TSEFSRURfT1BUUz0nK1onCisJCQlMRF9TSEFSRURfT1BUUz0nLVdsLCtiLCR7bGliZGlyfScKKwkJZmkKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gK2IgJHtsaWJkaXJ9IC1iIC1vICRbQF0nCisJCSMgSFAtVVggc2hhcmVkIGxpYnJhcmllcyBtdXN0IGJlIGV4ZWN1dGFibGUsIGFuZCBzaG91bGQgYmUKKwkJIyByZWFkb25seSB0byBleHBsb2l0IGEgcXVpcmsgaW4gdGhlIG1lbW9yeSBtYW5hZ2VyLgorCQlJTlNUQUxMX0xJQj0iLW0gNTU1IgorCQk7OworCWlyaXgqKQorCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkJCQljZl9sZF9ycGF0aF9vcHQ9Ii1XbCwtcnBhdGgsIgorCQkJCUVYVFJBX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJCWVsc2UKKwkJCQljZl9sZF9ycGF0aF9vcHQ9Ii1ycGF0aCAiCisJCQkJRVhUUkFfTERGTEFHUz0iLXJwYXRoIFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCQlmaQorCQlmaQorCQkjIHRlc3RlZCB3aXRoIElSSVggNS4yIGFuZCAnY2MnLgorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctS1BJQycKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLXJkYXRhX3NoYXJlZCAtc29uYW1lIGBiYXNlbmFtZSAkW0BdYCAtbyAkW0BdJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1XbCwtc29uYW1lLGBiYXNlbmFtZSAkW0BdYCAtbyAkW0BdJworCQlmaQorCQljZl9jdl9ybV9zb19sb2NzPXllcworCQk7OworCWxpbnV4KnxnbnUqfGsqYnNkKi1nbnUpCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLVdsLC1ycGF0aCxcJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQlmaQorCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJY2ZfbGRfcnBhdGhfb3B0PSItV2wsLXJwYXRoLCIKKwkJCUVYVFJBX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0ZfU0hBUkVEX1NPTkFNRQorCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnLC1zdGF0cywtbGMgLW8gJFtAXScKKwkJOzsKKwlvcGVuYnNkW1syLTldXS4qKQorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWNmX2xkX3JwYXRoX29wdD0iLVdsLC1ycGF0aCwiCisJCQlFWFRSQV9MREZMQUdTPSItV2wsLXJwYXRoLFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCWZpCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCUNGX1NIQVJFRF9TT05BTUUKKwkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1XbCwtQnNoYXJlYWJsZSwtc29uYW1lLCckY2ZfY3Zfc2hhcmVkX3NvbmFtZScsLXN0YXRzLC1sYyAtbyAkW0BdJworCQk7OworCW50by1xbngqfG9wZW5ic2QqfGZyZWVic2RbWzEyXV0uKikKKwkJQ0NfU0hBUkVEX09QVFM9IiRDQ19TSEFSRURfT1BUUyAtRFBJQyIKKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLUJzaGFyZWFibGUgLW8gJFtAXScKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQk7OworCWZyZWVic2QqKQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiAmJiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLXJwYXRoIFwkKExPQ0FMX0xJQkRJUikiCisJCQlMT0NBTF9MREZMQUdTMj0iLXJwYXRoIFwke2xpYmRpcn0gJExPQ0FMX0xERkxBR1MiCisJCQljZl9sZF9ycGF0aF9vcHQ9Ii1ycGF0aCAiCisJCQlFWFRSQV9MREZMQUdTPSItcnBhdGggXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0ZfU0hBUkVEX1NPTkFNRQorCQlNS19TSEFSRURfTElCPScke0xEfSAtQnNoYXJlYWJsZSAtc29uYW1lPWBiYXNlbmFtZSAkW0BdYCAtbyAkW0BdJworCQk7OworCW5ldGJzZCopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCXRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgJiYgY2ZfbGRfcnBhdGhfb3B0PSItV2wsLXJwYXRoLCIKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgJiYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJCUVYVFJBX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG87IHRoZW4KKwkJCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLmVsZl9zbzsgdGhlbgorCQkJCWNmX2N2X3NobGliX3ZlcnNpb249YWJpCisJCQllbHNlCisJCQkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwkJCWZpCisJCQlmaQorCQkJQ0ZfU0hBUkVEX1NPTkFNRQorCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1zaGFyZWQgLVdsLC1zb25hbWUsJyRjZl9jdl9zaGFyZWRfc29uYW1lJyAtbyAkW0BdJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0xEfSAtQnNoYXJlYWJsZSAtbyAkW0BdJworCQlmaQorCQk7OworCW9zZip8bWxzKyopCisJCSMgdGVzdGVkIHdpdGggT1NGLzEgVjMuMiBhbmQgJ2NjJworCQkjIHRlc3RlZCB3aXRoIE9TRi8xIFYzLjIgYW5kIGdjYyAyLjYuMyAoYnV0IHRoZSBjKysgZGVtbyBkaWRuJ3QKKwkJIyBsaW5rIHdpdGggc2hhcmVkIGxpYnMpLgorCQlNS19TSEFSRURfTElCPScke0xEfSAtc2V0X3ZlcnNpb24gJHtSRUxfVkVSU0lPTn06JHtBQklfVkVSU0lPTn0gLWV4cGVjdF91bnJlc29sdmVkICIqIiAtc2hhcmVkIC1zb25hbWUgYGJhc2VuYW1lICRbQF1gJworCQljYXNlICRob3N0X29zIGluCisJCW9zZjQqKQorCQkJTUtfU0hBUkVEX0xJQj0iJHtNS19TSEFSRURfTElCfSAtbXN5bSIKKwkJCTs7CisJCWVzYWMKKwkJTUtfU0hBUkVEX0xJQj0iJHtNS19TSEFSRURfTElCfSInIC1vICRbQF0nCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLVdsLC1ycGF0aCxcJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQlmaQorCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJY2ZfbGRfcnBhdGhfb3B0PSItcnBhdGgiCisJCQkjIEVYVFJBX0xERkxBR1M9IiRMT0NBTF9MREZMQUdTICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQljZl9jdl9ybV9zb19sb2NzPXllcworCQk7OworCXNjbzMuMnY1KikgICMgKGFsc28gdXcyKiBhbmQgVVc3KSBob3BzIDEzLUFwci05OAorCQkjIHRlc3RlZCB3aXRoIG9zcjUuMC41CisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1iZWxmIC1LUElDJworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSAtZHkgLUcgLWggYGJhc2VuYW1lICRbQF0gLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfSAtbyBbJF1AJworCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJIyBvbmx5IHdheSBpcyB0byBzZXQgTERfUlVOX1BBVEggYnV0IG5vIHN3aXRjaCBmb3IgaXQKKwkJCVJVTl9QQVRIPSRsaWJkaXIKKwkJZmkKKwkJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQlMSU5LX1BST0dTPSdMRF9SVU5fUEFUSD0ke2xpYmRpcn0nCisJCUxJTktfVEVTVFM9J1B3ZD1gcHdkYDtMRF9SVU5fUEFUSD1gZGlybmFtZSAkJHtQd2R9YC9saWInCisJCTs7CisJc3Vub3M0KikKKwkJIyB0ZXN0ZWQgd2l0aCBTdW5PUyA0LjEuMSBhbmQgZ2NjIDIuNy4wCisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1LUElDJworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSAtYXNzZXJ0IHB1cmUtdGV4dCAtbyAkW0BdJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCTs7CisJc29sYXJpczIqKQorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDUuNS4xIChzb2xhcmlzIDIuNS4xKSBhbmQgZ2NjIDIuNy4yCisJCSMgdGVzdGVkIHdpdGggU3VuT1MgNS4xMCAoc29sYXJpcyAxMCkgYW5kIGdjYyAzLjQuMworCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1SIFwkKExPQ0FMX0xJQkRJUik6XCR7bGliZGlyfSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWNmX2xkX3JwYXRoX29wdD0iLVIiCisJCQlFWFRSQV9MREZMQUdTPSIkTE9DQUxfTERGTEFHUyAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKwkJQ0ZfU0hBUkVEX1NPTkFNRQorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPScteGNvZGU9cGljMzInCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtZHkgLUcgLWggJyRjZl9jdl9zaGFyZWRfc29uYW1lJyAtbyAkW0BdJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0NDfSAtc2hhcmVkIC1keSAtRyAtaCAnJGNmX2N2X3NoYXJlZF9zb25hbWUnIC1vICRbQF0nCisJCWZpCisJCTs7CisJc3lzdjV1dzcqfHVuaXhfc3YqKQorCQkjIHRlc3RlZCB3aXRoIFVuaXhXYXJlIDcuMS4wIChnY2MgMi45NS4yIGFuZCBjYykKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLUtQSUMnCisJCWZpCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1kIHkgLUcgLW8gWyRdQCcKKwkJOzsKKwkqKQorCQlDQ19TSEFSRURfT1BUUz0ndW5rbm93bicKKwkJTUtfU0hBUkVEX0xJQj0nZWNobyB1bmtub3duJworCQk7OworCWVzYWMKKworCSMgVGhpcyB3b3JrcyBpZiB0aGUgbGFzdCB0b2tlbnMgaW4gJE1LX1NIQVJFRF9MSUIgYXJlIHRoZSAtbyB0YXJnZXQuCisJY2FzZSAiJGNmX2N2X3NobGliX3ZlcnNpb24iIGluICModmkKKwlyZWx8YWJpKQorCQljYXNlICIkTUtfU0hBUkVEX0xJQiIgaW4gIyh2aQorCQkqJy1vICRbQF0nKQorCQkJdGVzdCAiJGNmX2N2X2RvX3N5bWxpbmtzIiA9IG5vICYmIGNmX2N2X2RvX3N5bWxpbmtzPXllcworCQkJOzsKKwkJKikKKwkJCUFDX01TR19XQVJOKGlnbm9yZWQgLS13aXRoLXNobGliLXZlcnNpb24pCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworCisJaWYgdGVzdCAtbiAiJGNmX2xkX3JwYXRoX29wdCIgOyB0aGVuCisJCUFDX01TR19DSEVDS0lORyhpZiB3ZSBuZWVkIGEgc3BhY2UgYWZ0ZXIgcnBhdGggb3B0aW9uKQorCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCQlMSUJTPSIkTElCUyAke2NmX2xkX3JwYXRoX29wdH0kbGliZGlyIgorCQlBQ19UUllfTElOSygsICwgY2ZfcnBhdGhfc3BhY2U9bm8sIGNmX3JwYXRoX3NwYWNlPXllcykKKwkJTElCUz0iJGNmX3NhdmVfTElCUyIKKwkJQUNfTVNHX1JFU1VMVCgkY2ZfcnBhdGhfc3BhY2UpCisJCXRlc3QgIiRjZl9ycGF0aF9zcGFjZSIgPSB5ZXMgJiYgY2ZfbGRfcnBhdGhfb3B0PSIkY2ZfbGRfcnBhdGhfb3B0ICIKKwkJTUtfU0hBUkVEX0xJQj0iJE1LX1NIQVJFRF9MSUIgJGNmX2xkX3JwYXRoX29wdFwke2xpYmRpcn0iCisJZmkKKworCUFDX1NVQlNUKENDX1NIQVJFRF9PUFRTKQorCUFDX1NVQlNUKExEX1NIQVJFRF9PUFRTKQorCUFDX1NVQlNUKE1LX1NIQVJFRF9MSUIpCisJQUNfU1VCU1QoTElOS19QUk9HUykKKwlBQ19TVUJTVChMSU5LX1RFU1RTKQorCUFDX1NVQlNUKEVYVFJBX0xERkxBR1MpCisJQUNfU1VCU1QoTE9DQUxfTERGTEFHUykKKwlBQ19TVUJTVChMT0NBTF9MREZMQUdTMikKKwlBQ19TVUJTVChJTlNUQUxMX0xJQikKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU0hBUkVEX1NPTkFNRSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDgvMDkvMDggMTg6MzQ6NDMKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgdXRpbGl0eSBtYWNybyBmb3IgQ0ZfU0hBUkVEX09QVFMsIGNvbnN0cnVjdHMgIiRjZl9jdl9zaGFyZWRfc29uYW1lIiBmb3IKK2RubCBzdWJzdGl0dXRpb24gaW50byBNS19TSEFSRURfTElCIHN0cmluZyBmb3IgdGhlICItc29uYW1lIiAob3Igc2ltaWxhcikKK2RubCBvcHRpb24uCitkbmwKK2RubCAkMSBpcyB0aGUgZGVmYXVsdCB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciAiJGNmX2N2X3NobGliX3ZlcnNpb24iLgorZG5sIElmIG1pc3NpbmcsIHVzZSAicmVsIi4KK2RlZmluZShbQ0ZfU0hBUkVEX1NPTkFNRV0sCitbCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPWlmZWxzZSgkMSwscmVsLCQxKQorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJFtAXSAuJHtSRUxfVkVSU0lPTn1gLiR7QUJJX1ZFUlNJT059JworCWVsc2UKKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRbQF1gJworCWZpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NJR1dJTkNIIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNi8wNC8wMiAxNjo0MTowOQorZG5sIC0tLS0tLS0tLS0tCitkbmwgVXNlIHRoaXMgbWFjcm8gYWZ0ZXIgQ0ZfWE9QRU5fU09VUkNFLCBidXQgZG8gbm90IHJlcXVpcmUgaXQgKG5vdCBhbGwKK2RubCBwcm9ncmFtcyBuZWVkIHRoaXMgdGVzdCkuCitkbmwKK2RubCBUaGlzIGlzIHJlYWxseSBhIE1hY09TIFggMTAuNC4zIHdvcmthcm91bmQuICBEZWZpbmluZyBfUE9TSVhfQ19TT1VSQ0UKK2RubCBmb3JjZXMgU0lHV0lOQ0ggdG8gYmUgdW5kZWZpbmVkIChicmVha3MgeHRlcm0sIG5jdXJzZXMpLiAgT2RkbHksIHRoZSBzdHJ1Y3QKK2RubCB3aW5zaXplIGRlY2xhcmF0aW9uIGlzIGxlZnQgYWxvbmUgLSB3ZSBtYXkgcmV2aXNpdCB0aGlzIGlmIEFwcGxlIGNob29zZSB0bworZG5sIGJyZWFrIHRoYXQgcGFydCBvZiB0aGUgaW50ZXJmYWNlIGFzIHdlbGwuCitBQ19ERUZVTihbQ0ZfU0lHV0lOQ0hdLAorWworQUNfQ0FDSEVfQ0hFQ0soaWYgU0lHV0lOQ0ggaXMgZGVmaW5lZCxjZl9jdl9kZWZpbmVfc2lnd2luY2gsWworCUFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+CitdLFtpbnQgeCA9IFNJR1dJTkNIXSwKKwlbY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoPXllc10sCisJW0FDX1RSWV9DT01QSUxFKFsKKyN1bmRlZiBfWE9QRU5fU09VUkNFCisjdW5kZWYgX1BPU0lYX1NPVVJDRQorI3VuZGVmIF9QT1NJWF9DX1NPVVJDRQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KK10sW2ludCB4ID0gU0lHV0lOQ0hdLAorCVtjZl9jdl9kZWZpbmVfc2lnd2luY2g9bWF5YmVdLAorCVtjZl9jdl9kZWZpbmVfc2lnd2luY2g9bm9dKQorXSkKK10pCisKK2lmIHRlc3QgIiRjZl9jdl9kZWZpbmVfc2lnd2luY2giID0gbWF5YmUgOyB0aGVuCitBQ19DQUNIRV9DSEVDSyhmb3IgYWN0dWFsIFNJR1dJTkNIIGRlZmluaXRpb24sY2ZfY3ZfZml4dXBfc2lnd2luY2gsWworY2ZfY3ZfZml4dXBfc2lnd2luY2g9dW5rbm93bgorY2Zfc2lnd2luY2g9MzIKK3doaWxlIHRlc3QgJGNmX3NpZ3dpbmNoICE9IDEKK2RvCisJQUNfVFJZX0NPTVBJTEUoWworI3VuZGVmIF9YT1BFTl9TT1VSQ0UKKyN1bmRlZiBfUE9TSVhfU09VUkNFCisjdW5kZWYgX1BPU0lYX0NfU09VUkNFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorXSxbCisjaWYgU0lHV0lOQ0ggIT0gJGNmX3NpZ3dpbmNoCittYWtlIGFuIGVycm9yCisjZW5kaWYKK2ludCB4ID0gU0lHV0lOQ0hdLAorCVtjZl9jdl9maXh1cF9zaWd3aW5jaD0kY2Zfc2lnd2luY2gKKwkgYnJlYWtdKQorCitjZl9zaWd3aW5jaD1gZXhwciAkY2Zfc2lnd2luY2ggLSAxYAorZG9uZQorXSkKKworCWlmIHRlc3QgIiRjZl9jdl9maXh1cF9zaWd3aW5jaCIgIT0gdW5rbm93biA7IHRoZW4KKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRFNJR1dJTkNIPSRjZl9jdl9maXh1cF9zaWd3aW5jaCIKKwlmaQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU0lHX0FUT01JQ19UIHZlcnNpb246IDIgdXBkYXRlZDogMjAwNS8wOS8xOCAxNzoyNzoxMgorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIHNpZ25hbCBoYW5kbGVyLCBidXQgdGhlcmUgYXJlIHNvbWUgZ2NjIGRlcGVkZW5jaWVzIGluIHRoYXQgcmVjb21tZW5kYXRpb24uCitkbmwgVHJ5IGFueXdheS4KK0FDX0RFRlVOKFtDRl9TSUdfQVRPTUlDX1RdLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciBzaWduYWwgZ2xvYmFsIGRhdGF0eXBlKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3NpZ19hdG9taWNfdCxbCisJZm9yIGNmX3R5cGUgaW4gXAorCQkidm9sYXRpbGUgc2lnX2F0b21pY190IiBcCisJCSJzaWdfYXRvbWljX3QiIFwKKwkJImludCIKKwlkbworCUFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitleHRlcm4gJGNmX3R5cGUgeDsKKyRjZl90eXBlIHg7CitzdGF0aWMgdm9pZCBoYW5kbGVyKGludCBzaWcpCit7CisJeCA9IDU7Cit9XSwKKwkJW3NpZ25hbChTSUdJTlQsIGhhbmRsZXIpOworCQkgeCA9IDFdLAorCQlbY2ZfY3Zfc2lnX2F0b21pY190PSRjZl90eXBlXSwKKwkJW2NmX2N2X3NpZ19hdG9taWNfdD1ub10pCisJCXRlc3QgIiRjZl9jdl9zaWdfYXRvbWljX3QiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCV0pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9zaWdfYXRvbWljX3QpCit0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBBQ19ERUZJTkVfVU5RVU9URUQoU0lHX0FUT01JQ19ULCAkY2ZfY3Zfc2lnX2F0b21pY190KQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TSVpFQ0hBTkdFIHZlcnNpb246IDggdXBkYXRlZDogMjAwMC8xMS8wNCAxMjoyMjoxNgorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgZGVmaW5pdGlvbnMgJiBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3Igd2luZG93IHNpemUtY2hhbmdpbmcKK2RubCBGSVhNRTogY2hlY2sgdGhhdCB0aGlzIHdvcmtzIHdpdGggInNuYWtlIiAoSFAtVVggMTAueCkKK0FDX0RFRlVOKFtDRl9TSVpFQ0hBTkdFXSwKK1sKK0FDX1JFUVVJUkUoW0NGX1NUUlVDVF9URVJNSU9TXSkKK0FDX0NBQ0hFX0NIRUNLKGRlY2xhcmF0aW9uIG9mIHNpemUtY2hhbmdlLCBjZl9jdl9zaXplY2hhbmdlLFsKKyAgICBjZl9jdl9zaXplY2hhbmdlPXVua25vd24KKyAgICBjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisKK2ZvciBjZl9vcHRzIGluICIiICJORUVEX1BURU1fSCIKK2RvCisKKyAgICBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisgICAgdGVzdCAtbiAiJGNmX29wdHMiICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUQkY2Zfb3B0cyIKKyAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfVEVSTUlPU19ICisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1RFUk1JT19ICisjaW5jbHVkZSA8dGVybWlvLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIE5FRURfUFRFTV9ICisvKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgU0NPOiAgdGhleSBuZWdsZWN0ZWQgdG8gZGVmaW5lIHN0cnVjdCB3aW5zaXplIGluCisgKiB0ZXJtaW9zLmggLS0gaXQncyBvbmx5IGluIHRlcm1pby5oIGFuZCBwdGVtLmgKKyAqLworI2luY2x1ZGUgICAgICAgIDxzeXMvc3RyZWFtLmg+CisjaW5jbHVkZSAgICAgICAgPHN5cy9wdGVtLmg+CisjZW5kaWYKKyNpZiAhZGVmaW5lZChzdW4pIHx8ICFkZWZpbmVkKEhBVkVfVEVSTUlPU19IKQorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCitdLFsKKyNpZmRlZiBUSU9DR1NJWkUKKwlzdHJ1Y3QgdHR5c2l6ZSB3aW47CS8qIEZJWE1FOiB3aGF0IHN5c3RlbSBpcyB0aGlzPyAqLworCWludCB5ID0gd2luLnRzX2xpbmVzOworCWludCB4ID0gd2luLnRzX2NvbHM7CisjZWxzZQorI2lmZGVmIFRJT0NHV0lOU1oKKwlzdHJ1Y3Qgd2luc2l6ZSB3aW47CisJaW50IHkgPSB3aW4ud3Nfcm93OworCWludCB4ID0gd2luLndzX2NvbDsKKyNlbHNlCisJbm8gVElPQ0dTSVpFIG9yIFRJT0NHV0lOU1oKKyNlbmRpZiAvKiBUSU9DR1dJTlNaICovCisjZW5kaWYgLyogVElPQ0dTSVpFICovCisJXSwKKwlbY2ZfY3Zfc2l6ZWNoYW5nZT15ZXNdLAorCVtjZl9jdl9zaXplY2hhbmdlPW5vXSkKKworCUNQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKwlpZiB0ZXN0ICIkY2ZfY3Zfc2l6ZWNoYW5nZSIgPSB5ZXMgOyB0aGVuCisJCWVjaG8gInNpemUtY2hhbmdlIHN1Y2NlZWRlZCAoJGNmX29wdHMpIiA+JkFDX0ZEX0NDCisJCXRlc3QgLW4gIiRjZl9vcHRzIiAmJiBjZl9jdl9zaXplY2hhbmdlPSIkY2Zfb3B0cyIKKwkJYnJlYWsKKwlmaQorZG9uZQorXSkKK2lmIHRlc3QgIiRjZl9jdl9zaXplY2hhbmdlIiAhPSBubyA7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9TSVpFQ0hBTkdFKQorCWNhc2UgJGNmX2N2X3NpemVjaGFuZ2UgaW4gIyh2aQorCU5FRUQqKQorCQlBQ19ERUZJTkVfVU5RVU9URUQoJGNmX2N2X3NpemVjaGFuZ2UgKQorCQk7OworCWVzYWMKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NSQ19NT0RVTEVTIHZlcnNpb246IDE4IHVwZGF0ZWQ6IDIwMDUvMDUvMjggMTI6NTg6NTQKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIEZvciBlYWNoIHBhcmFtZXRlciwgdGVzdCBpZiB0aGUgc291cmNlLWRpcmVjdG9yeSBleGlzdHMsIGFuZCBpZiBpdCBjb250YWlucworZG5sIGEgJ21vZHVsZXMnIGZpbGUuICBJZiBzbywgYWRkIHRvIHRoZSBsaXN0ICRjZl9jdl9zcmNfbW9kdWxlcyB3aGljaCB3ZSdsbAorZG5sIHVzZSBpbiBDRl9MSUJfUlVMRVMuCitkbmwKK2RubCBUaGlzIHVzZXMgdGhlIGNvbmZpZ3VyZWQgdmFsdWUgdG8gbWFrZSB0aGUgbGlzdHMgU1JDX1NVQkRJUlMgYW5kCitkbmwgU1VCX01BS0VGSUxFUyB3aGljaCBhcmUgdXNlZCBpbiB0aGUgbWFrZWZpbGUtZ2VuZXJhdGlvbiBzY2hlbWUuCitBQ19ERUZVTihbQ0ZfU1JDX01PRFVMRVNdLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciBzcmMgbW9kdWxlcykKKworIyBkZXBlbmRlbmNpZXMgYW5kIGxpbmtlci1hcmd1bWVudHMgZm9yIHRlc3QtcHJvZ3JhbXMKK1RFU1RfREVQUz0iJHtMSUJfRElSfS8ke0xJQl9QUkVGSVh9JHtMSUJfTkFNRX0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVBTIgorVEVTVF9ERVAyPSIke0xJQl8yTkR9LyR7TElCX1BSRUZJWH0ke0xJQl9OQU1FfSR7REZUX0RFUF9TVUZGSVh9ICRURVNUX0RFUDIiCitpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAibGlidG9vbCI7IHRoZW4KKwlURVNUX0FSR1M9IiR7VEVTVF9ERVBTfSIKKwlURVNUX0FSRzI9IiR7VEVTVF9ERVAyfSIKK2Vsc2UKKwlURVNUX0FSR1M9Ii1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkdTIgorCVRFU1RfQVJHMj0iLWwke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9ICRURVNUX0FSRzIiCitmaQorCitjZl9jdl9zcmNfbW9kdWxlcz0KK2ZvciBjZl9kaXIgaW4gJDEKK2RvCisJaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvbW9kdWxlczsgdGhlbgorCisJCSMgV2UgbWF5L21heSBub3QgaGF2ZSB0YWNrIGluIHRoZSBkaXN0cmlidXRpb24sIHRob3VnaCB0aGUKKwkJIyBtYWtlZmlsZSBpcy4KKwkJaWYgdGVzdCAkY2ZfZGlyID0gdGFjayA7IHRoZW4KKwkJCWlmIHRlc3QgISAtZiAkc3JjZGlyLyR7Y2ZfZGlyfS8ke2NmX2Rpcn0uaDsgdGhlbgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQlmaQorCisJCWlmIHRlc3QgLXogIiRjZl9jdl9zcmNfbW9kdWxlcyI7IHRoZW4KKwkJCWNmX2N2X3NyY19tb2R1bGVzPSRjZl9kaXIKKwkJZWxzZQorCQkJY2ZfY3Zfc3JjX21vZHVsZXM9IiRjZl9jdl9zcmNfbW9kdWxlcyAkY2ZfZGlyIgorCQlmaQorCisJCSMgTWFrZSB0aGUgbmN1cnNlc19jZmcuaCBmaWxlIHJlY29yZCB0aGUgbGlicmFyeSBpbnRlcmZhY2UgZmlsZXMgYXMKKwkJIyB3ZWxsLiAgVGhlc2UgYXJlIGhlYWRlciBmaWxlcyB0aGF0IGFyZSB0aGUgc2FtZSBuYW1lIGFzIHRoZWlyCisJCSMgZGlyZWN0b3J5LiAgTmN1cnNlcyBpcyB0aGUgb25seSBsaWJyYXJ5IHRoYXQgZG9lcyBub3QgZm9sbG93CisJCSMgdGhhdCBwYXR0ZXJuLgorCQlpZiB0ZXN0ICRjZl9kaXIgPSB0YWNrIDsgdGhlbgorCQkJY29udGludWUKKwkJZWxpZiB0ZXN0IC1mICRzcmNkaXIvJHtjZl9kaXJ9LyR7Y2ZfZGlyfS5oOyB0aGVuCisJCQlDRl9VUFBFUihjZl9oYXZlX2luY2x1ZGUsJGNmX2RpcikKKwkJCUFDX0RFRklORV9VTlFVT1RFRChIQVZFXyR7Y2ZfaGF2ZV9pbmNsdWRlfV9IKQorCQkJQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfTElCJHtjZl9oYXZlX2luY2x1ZGV9KQorCQkJVEVTVF9ERVBTPSIke0xJQl9ESVJ9LyR7TElCX1BSRUZJWH0ke2NmX2Rpcn0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVBTIgorCQkJVEVTVF9ERVAyPSIke0xJQl8yTkR9LyR7TElCX1BSRUZJWH0ke2NmX2Rpcn0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVAyIgorCQkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisJCQkJVEVTVF9BUkdTPSIke1RFU1RfREVQU30iCisJCQkJVEVTVF9BUkcyPSIke1RFU1RfREVQMn0iCisJCQllbHNlCisJCQkJVEVTVF9BUkdTPSItbCR7Y2ZfZGlyfSR7REZUX0FSR19TVUZGSVh9ICRURVNUX0FSR1MiCisJCQkJVEVTVF9BUkcyPSItbCR7Y2ZfZGlyfSR7REZUX0FSR19TVUZGSVh9ICRURVNUX0FSRzIiCisJCQlmaQorCQlmaQorCWZpCitkb25lCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9zcmNfbW9kdWxlcykKKworVEVTVF9BUkdTPSItTCR7TElCX0RJUn0gJFRFU1RfQVJHUyIKK1RFU1RfQVJHMj0iLUwke0xJQl8yTkR9ICRURVNUX0FSRzIiCisKK0FDX1NVQlNUKFRFU1RfQVJHUykKK0FDX1NVQlNUKFRFU1RfREVQUykKKworQUNfU1VCU1QoVEVTVF9BUkcyKQorQUNfU1VCU1QoVEVTVF9ERVAyKQorCitTUkNfU1VCRElSUz0ibWFuIGluY2x1ZGUiCitmb3IgY2ZfZGlyIGluICRjZl9jdl9zcmNfbW9kdWxlcworZG8KKwlTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTICRjZl9kaXIiCitkb25lCitTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIHRlc3QiCit0ZXN0IC16ICIkTUFLRV9URVJNSU5GTyIgJiYgU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyBtaXNjIgordGVzdCAiJGNmX3dpdGhfY3h4X2JpbmRpbmciICE9IG5vICYmIFNSQ19TVUJESVJTPSIkU1JDX1NVQkRJUlMgYysrIgorCitBREFfU1VCRElSUz0KK2lmIHRlc3QgIiRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPSB5ZXMgJiYgdGVzdCAtZiAkc3JjZGlyL0FkYTk1L01ha2VmaWxlLmluOyB0aGVuCisgICBTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIEFkYTk1IgorICAgQURBX1NVQkRJUlM9ImdlbiBzcmMgc2FtcGxlcyIKK2ZpCisKK1NVQl9NQUtFRklMRVM9Citmb3IgY2ZfZGlyIGluICRTUkNfU1VCRElSUworZG8KKwlTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyAkY2ZfZGlyL01ha2VmaWxlIgorZG9uZQorCitpZiB0ZXN0IC1uICIkQURBX1NVQkRJUlMiOyB0aGVuCisgICBmb3IgY2ZfZGlyIGluICRBREFfU1VCRElSUworICAgZG8KKyAgICAgIFNVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIEFkYTk1LyRjZl9kaXIvTWFrZWZpbGUiCisgICBkb25lCisgICBBQ19TVUJTVChBREFfU1VCRElSUykKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NURENQUF9MSUJSQVJZIHZlcnNpb246IDUgdXBkYXRlZDogMjAwMC8wOC8xMiAyMzoxODo1MgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIC1sc3RkYysrLCB3aGljaCBpcyBHTlUncyBzdGFuZGFyZCBDKysgbGlicmFyeS4KK0FDX0RFRlVOKFtDRl9TVERDUFBfTElCUkFSWV0sCitbCitpZiB0ZXN0IC1uICIkR1hYIiA7IHRoZW4KK2Nhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKK29zMiopICModmkKKwljZl9zdGRjcHBfbGlibmFtZT1zdGRjcHAKKwk7OworKikKKwljZl9zdGRjcHBfbGlibmFtZT1zdGRjKysKKwk7OworZXNhYworQUNfQ0FDSEVfQ0hFQ0soZm9yIGxpYnJhcnkgJGNmX3N0ZGNwcF9saWJuYW1lLGNmX2N2X2xpYnN0ZGNwcCxbCisJY2Zfc2F2ZT0iJExJQlMiCisJTElCUz0iJExJQlMgLWwkY2Zfc3RkY3BwX2xpYm5hbWUiCitBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8c3Ryc3RyZWFtLmg+XSxbCitjaGFyIGJ1Zls4MF07CitzdHJzdHJlYW1idWYgZm9vKGJ1Ziwgc2l6ZW9mKGJ1ZikpCitdLAorCVtjZl9jdl9saWJzdGRjcHA9eWVzXSwKKwlbY2ZfY3ZfbGlic3RkY3BwPW5vXSkKKwlMSUJTPSIkY2Zfc2F2ZSIKK10pCit0ZXN0ICIkY2ZfY3ZfbGlic3RkY3BwIiA9IHllcyAmJiBDWFhMSUJTPSIkQ1hYTElCUyAtbCRjZl9zdGRjcHBfbGlibmFtZSIKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NUUklQX0dfT1BUIHZlcnNpb246IDMgdXBkYXRlZDogMjAwMi8xMi8yMSAxOToyNTo1MgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwJUmVtb3ZlICItZyIgb3B0aW9uIGZyb20gdGhlIGNvbXBpbGVyIG9wdGlvbnMKK0FDX0RFRlVOKFtDRl9TVFJJUF9HX09QVF0sCitbJDE9YGVjaG8gJHskMX0gfCBzZWQgLWUgJ3MlLWcgJSUnIC1lICdzJS1nJCUlJ2BdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NUUlVDVF9TSUdBQ1RJT04gdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAwLzA4LzEyIDIzOjE4OjUyCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHdlIG5lZWQgX1BPU0lYX1NPVVJDRSBkZWZpbmVkIHRvIHVzZSBzdHJ1Y3Qgc2lnYWN0aW9uLiAgV2UnbGwgb25seQorZG5sIGRvIHRoaXMgaWYgd2UndmUgZm91bmQgdGhlIHNpZ2FjdGlvbiBmdW5jdGlvbi4KK2RubAorZG5sIElmIG5lZWRlZCwgZGVmaW5lIFNWUjRfQUNUSU9OLgorQUNfREVGVU4oW0NGX1NUUlVDVF9TSUdBQ1RJT05dLFsKK2lmIHRlc3QgIiRhY19jdl9mdW5jX3NpZ2FjdGlvbiIgPSB5ZXM7IHRoZW4KK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHNpZ2FjdGlvbiBuZWVkcyBfUE9TSVhfU09VUkNFKQorQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPl0sCisJW3N0cnVjdCBzaWdhY3Rpb24gYWN0XSwKKwlbc2lnYWN0X2JhZD1ub10sCisJWworQUNfVFJZX0NPTVBJTEUoWworI2RlZmluZSBfUE9TSVhfU09VUkNFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+XSwKKwlbc3RydWN0IHNpZ2FjdGlvbiBhY3RdLAorCVtzaWdhY3RfYmFkPXllcworCSBBQ19ERUZJTkUoU1ZSNF9BQ1RJT04pXSwKKwkgW3NpZ2FjdF9iYWQ9dW5rbm93bl0pXSkKK0FDX01TR19SRVNVTFQoJHNpZ2FjdF9iYWQpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVFJVQ1RfVEVSTUlPUyB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDAvMTEvMDQgMTI6MjI6NDYKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNvbWUgbWFjaGluZXMgcmVxdWlyZSBfUE9TSVhfU09VUkNFIHRvIGNvbXBsZXRlbHkgZGVmaW5lIHN0cnVjdCB0ZXJtaW9zLgorZG5sIElmIHNvLCBkZWZpbmUgU1ZSNF9URVJNSU8KK0FDX0RFRlVOKFtDRl9TVFJVQ1RfVEVSTUlPU10sWworQUNfQ0hFQ0tfSEVBREVSUyggXAordGVybWlvLmggXAordGVybWlvcy5oIFwKK3VuaXN0ZC5oIFwKKykKK2lmIHRlc3QgIiRJU0MiID0geWVzIDsgdGhlbgorCUFDX0NIRUNLX0hFQURFUlMoIHN5cy90ZXJtaW8uaCApCitmaQoraWYgdGVzdCAiJGFjX2N2X2hlYWRlcl90ZXJtaW9zX2giID0geWVzIDsgdGhlbgorCWNhc2UgIiRDRkxBR1MgJENQUEZMQUdTIiBpbgorCSotRF9QT1NJWF9TT1VSQ0UqKQorCQl0ZXJtaW9zX2JhZD1kdW5ubyA7OworCSopCXRlcm1pb3NfYmFkPW1heWJlIDs7CisJZXNhYworCWlmIHRlc3QgIiR0ZXJtaW9zX2JhZCIgPSBtYXliZSA7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB0ZXJtaW9zLmggbmVlZHMgX1BPU0lYX1NPVVJDRSkKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHRlcm1pb3MuaD5dLAorCQlbc3RydWN0IHRlcm1pb3MgZm9vOyBpbnQgeCA9IGZvby5jX2lmbGFnXSwKKwkJdGVybWlvc19iYWQ9bm8sIFsKKwkJQUNfVFJZX0NPTVBJTEUoWworI2RlZmluZSBfUE9TSVhfU09VUkNFCisjaW5jbHVkZSA8dGVybWlvcy5oPl0sCisJCQlbc3RydWN0IHRlcm1pb3MgZm9vOyBpbnQgeCA9IGZvby5jX2lmbGFnXSwKKwkJCXRlcm1pb3NfYmFkPXVua25vd24sCisJCQl0ZXJtaW9zX2JhZD15ZXMgQUNfREVGSU5FKFNWUjRfVEVSTUlPKSkKKwkJCV0pCisJQUNfTVNHX1JFU1VMVCgkdGVybWlvc19iYWQpCisJZmkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NVQkRJUl9QQVRIIHZlcnNpb246IDUgdXBkYXRlZDogMjAwNy8wNy8yOSAwOTo1NToxMgorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgQ29uc3RydWN0IGEgc2VhcmNoLWxpc3QgZm9yIGEgbm9uc3RhbmRhcmQgaGVhZGVyL2xpYi1maWxlCitkbmwJJDEgPSB0aGUgdmFyaWFibGUgdG8gcmV0dXJuIGFzIHJlc3VsdAorZG5sCSQyID0gdGhlIHBhY2thZ2UgbmFtZQorZG5sCSQzID0gdGhlIHN1YmRpcmVjdG9yeSwgZS5nLiwgYmluLCBpbmNsdWRlIG9yIGxpYgorQUNfREVGVU4oW0NGX1NVQkRJUl9QQVRIXSwKK1skMT0iIgorCitDRl9BRERfU1VCRElSX1BBVEgoJDEsJDIsJDMsL3VzciwkcHJlZml4KQorQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLCQzLCRwcmVmaXgsTk9ORSkKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMywvdXNyL2xvY2FsLCRwcmVmaXgpCitDRl9BRERfU1VCRElSX1BBVEgoJDEsJDIsJDMsL29wdCwkcHJlZml4KQorQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLCQzLFskXUhPTUUsJHByZWZpeCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1VCU1QgdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA2LzA2LzE3IDEyOjMzOjAzCitkbmwgLS0tLS0tLS0KK2RubAlTaG9ydGhhbmQgbWFjcm8gZm9yIHN1YnN0aXR1dGluZyB0aGluZ3MgdGhhdCB0aGUgdXNlciBtYXkgb3ZlcnJpZGUKK2RubAl3aXRoIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorZG5sCitkbmwJJDEgPSBsb25nL2Rlc2NyaXB0aXZlIG5hbWUKK2RubAkkMiA9IGVudmlyb25tZW50IHZhcmlhYmxlCitkbmwJJDMgPSBkZWZhdWx0IHZhbHVlCitBQ19ERUZVTihbQ0ZfU1VCU1RdLAorW0FDX0NBQ0hFX1ZBTChjZl9jdl9zdWJzdF8kMixbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yICQxIChzeW1ib2wgJDIpKQorQ0ZfU1VCU1RfSUYoWy16ICJbJF0kMiJdLCBbJDJdLCBbJDNdKQorY2ZfY3Zfc3Vic3RfJDI9WyRdJDIKK0FDX01TR19SRVNVTFQoWyRdJDIpCitdKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVUJTVF9JRiB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDYvMDYvMTcgMTI6MzM6MDMKK2RubCAtLS0tLS0tLS0tLQorZG5sCVNob3J0aGFuZCBtYWNybyBmb3Igc3Vic3RpdHV0aW5nIHRoaW5ncyB0aGF0IHRoZSB1c2VyIG1heSBvdmVycmlkZQorZG5sCXdpdGggYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCitkbmwKK2RubAkkMSA9IGNvbmRpdGlvbiB0byBwYXNzIHRvICJ0ZXN0IgorZG5sCSQyID0gZW52aXJvbm1lbnQgdmFyaWFibGUKK2RubAkkMyA9IHZhbHVlIGlmIHRoZSB0ZXN0IHN1Y2NlZWRzCitkbmwJJDQgPSB2YWx1ZSBpZiB0aGUgdGVzdCBmYWlscworQUNfREVGVU4oW0NGX1NVQlNUX0lGXSwKK1sKK2lmIHRlc3QgJDEgOyB0aGVuCisJJDI9JDMKK2lmZWxzZSgkNCwsLFtlbHNlCisJJDI9JDRdKQorZmkKK0FDX1NVQlNUKCQyKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVUJTVF9OQ1VSU0VTX1ZFUlNJT04gdmVyc2lvbjogOCB1cGRhdGVkOiAyMDA2LzA5LzE2IDExOjQwOjU5CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgR2V0IHRoZSB2ZXJzaW9uLW51bWJlciBmb3IgdXNlIGluIHNoYXJlZC1saWJyYXJ5IG5hbWluZywgZXRjLgorQUNfREVGVU4oW0NGX1NVQlNUX05DVVJTRVNfVkVSU0lPTl0sCitbCitBQ19SRVFVSVJFKFtDRl9QUk9HX0VHUkVQXSkKK05DVVJTRVNfTUFKT1I9ImAkYWNfY3ZfcHJvZ19lZ3JlcCAnXk5DVVJTRVNfTUFKT1JbWyAJXV0qPScgJHNyY2Rpci9kaXN0Lm1rIHwgc2VkIC1lICdzL15bW14wLTldXSovLydgIgorTkNVUlNFU19NSU5PUj0iYCRhY19jdl9wcm9nX2VncmVwICdeTkNVUlNFU19NSU5PUltbIAldXSo9JyAkc3JjZGlyL2Rpc3QubWsgfCBzZWQgLWUgJ3MvXltbXjAtOV1dKi8vJ2AiCitOQ1VSU0VTX1BBVENIPSJgJGFjX2N2X3Byb2dfZWdyZXAgJ15OQ1VSU0VTX1BBVENIW1sgCV1dKj0nICRzcmNkaXIvZGlzdC5tayB8IHNlZCAtZSAncy9eW1teMC05XV0qLy8nYCIKK2NmX2N2X2FiaV92ZXJzaW9uPSR7TkNVUlNFU19NQUpPUn0KK2NmX2N2X3JlbF92ZXJzaW9uPSR7TkNVUlNFU19NQUpPUn0uJHtOQ1VSU0VTX01JTk9SfQorZG5sIFNob3cgdGhlIGNvbXB1dGVkIHZlcnNpb24sIGZvciBsb2dnaW5nCitjZl9jdl90aW1lc3RhbXA9YGRhdGVgCitBQ19NU0dfUkVTVUxUKENvbmZpZ3VyaW5nIE5DVVJTRVMgJGNmX2N2X3JlbF92ZXJzaW9uIEFCSSAkY2ZfY3ZfYWJpX3ZlcnNpb24gKCRjZl9jdl90aW1lc3RhbXApKQorZG5sIFdlIG5lZWQgdGhlc2UgdmFsdWVzIGluIHRoZSBnZW5lcmF0ZWQgaGVhZGVycworQUNfU1VCU1QoTkNVUlNFU19NQUpPUikKK0FDX1NVQlNUKE5DVVJTRVNfTUlOT1IpCitBQ19TVUJTVChOQ1VSU0VTX1BBVENIKQorZG5sIFdlIG5lZWQgdGhlc2UgdmFsdWVzIGluIHRoZSBnZW5lcmF0ZWQgbWFrZWZpbGVzCitBQ19TVUJTVChjZl9jdl9yZWxfdmVyc2lvbikKK0FDX1NVQlNUKGNmX2N2X2FiaV92ZXJzaW9uKQorQUNfU1VCU1QoY2ZfY3ZfYnVpbHRpbl9ib29sKQorQUNfU1VCU1QoY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaCkKK0FDX1NVQlNUKGNmX2N2X3R5cGVfb2ZfYm9vbClkbmwKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU1lTX1RJTUVfU0VMRUNUIHZlcnNpb246IDQgdXBkYXRlZDogMjAwMC8xMC8wNCAwOToxODo0MAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHdlIGNhbiBpbmNsdWRlIDxzeXMvdGltZS5oPiB3aXRoIDxzeXMvc2VsZWN0Lmg+OyB0aGlzIGJyZWFrcyBvbgorZG5sIG9sZGVyIFNDTyBjb25maWd1cmF0aW9ucy4KK0FDX0RFRlVOKFtDRl9TWVNfVElNRV9TRUxFQ1RdLAorWworQUNfTVNHX0NIRUNLSU5HKGlmIHN5cy90aW1lLmggd29ya3Mgd2l0aCBzeXMvc2VsZWN0LmgpCitBQ19DQUNIRV9WQUwoY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0LFsKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKK10sW10sW2NmX2N2X3N5c190aW1lX3NlbGVjdD15ZXNdLAorICAgICBbY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0PW5vXSkKKyAgICAgXSkKK0FDX01TR19SRVNVTFQoJGNmX2N2X3N5c190aW1lX3NlbGVjdCkKK3Rlc3QgIiRjZl9jdl9zeXNfdGltZV9zZWxlY3QiID0geWVzICYmIEFDX0RFRklORShIQVZFX1NZU19USU1FX1NFTEVDVCkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVE9QX0JVSUxERElSIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNi8xMC8xNSAxNjozMzoyMworZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIERlZmluZSBhIHRvcF9idWlsZGRpciBzeW1ib2wsIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIGFuIGFic29sdXRlIHBhdGguCitBQ19ERUZVTihbQ0ZfVE9QX0JVSUxERElSXSwKK1sKK3RvcF9idWlsZGRpcj1gcHdkYAorQUNfU1VCU1QodG9wX2J1aWxkZGlyKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9UWVBFT0ZfQ0hUWVBFIHZlcnNpb246IDggdXBkYXRlZDogMjAwNi8xMi8xNiAxMjozMzozMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBEZXRlcm1pbmUgdGhlIHR5cGUgd2Ugc2hvdWxkIHVzZSBmb3IgY2h0eXBlIChhbmQgYXR0cl90LCB3aGljaCBpcyB0cmVhdGVkCitkbmwgYXMgdGhlIHNhbWUgdGhpbmcpLiAgV2Ugd2FudCBhcm91bmQgMzIgYml0cywgc28gb24gbW9zdCBtYWNoaW5lcyB3YW50IGEKK2RubCBsb25nLCBidXQgb24gbmV3ZXIgNjQtYml0IG1hY2hpbmVzLCBwcm9iYWJseSB3YW50IGFuIGludC4gIElmIHdlJ3JlIHVzaW5nCitkbmwgd2lkZSBjaGFyYWN0ZXJzLCB3ZSBoYXZlIHRvIGhhdmUgYSB0eXBlIGNvbXBhdGlibGUgd2l0aCB0aGF0LCBhcyB3ZWxsLgorQUNfREVGVU4oW0NGX1RZUEVPRl9DSFRZUEVdLAorWworQUNfTVNHX0NIRUNLSU5HKFtmb3IgdHlwZSBvZiBjaHR5cGVdKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3R5cGVvZl9jaHR5cGUsWworCQlBQ19UUllfUlVOKFsKKyNkZWZpbmUgV0FOVF9CSVRTIDMxCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCJjZl90ZXN0Lm91dCIsICJ3Iik7CisJaWYgKGZwICE9IDApIHsKKwkJY2hhciAqcmVzdWx0ID0gImxvbmciOworCQlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID4gc2l6ZW9mKHVuc2lnbmVkIGludCkpIHsKKwkJCWludCBuOworCQkJdW5zaWduZWQgaW50IHgsIHk7CisJCQlmb3IgKG4gPSAwOyBuIDwgV0FOVF9CSVRTOyBuKyspIHsKKwkJCQl4ID0gKDEgPDwgbik7CisJCQkJeSA9ICh4ID4+IG4pOworCQkJCWlmICh5ICE9IDEgfHwgeCA9PSAwKSB7CisJCQkJCXggPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQkvKgorCQkJICogSWYgeCBpcyBub256ZXJvLCBhbiBpbnQgaXMgYmlnIGVub3VnaCBmb3IgdGhlIGJpdHMKKwkJCSAqIHRoYXQgd2Ugd2FudC4KKwkJCSAqLworCQkJcmVzdWx0ID0gKHggIT0gMCkgPyAiaW50IiA6ICJsb25nIjsKKwkJfQorCQlmcHV0cyhyZXN1bHQsIGZwKTsKKwkJZmNsb3NlKGZwKTsKKwl9CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KKwkJXSwKKwkJW2NmX2N2X3R5cGVvZl9jaHR5cGU9YGNhdCBjZl90ZXN0Lm91dGBdLAorCQlbY2ZfY3ZfdHlwZW9mX2NodHlwZT1sb25nXSwKKwkJW2NmX2N2X3R5cGVvZl9jaHR5cGU9bG9uZ10pCisJCXJtIC1mIGNmX3Rlc3Qub3V0CisJXSkKK0FDX01TR19SRVNVTFQoJGNmX2N2X3R5cGVvZl9jaHR5cGUpCisKK0FDX1NVQlNUKGNmX2N2X3R5cGVvZl9jaHR5cGUpCitBQ19ERUZJTkVfVU5RVU9URUQoVFlQRU9GX0NIVFlQRSwkY2ZfY3ZfdHlwZW9mX2NodHlwZSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfVFlQRV9TSUdBQ1RJT04gdmVyc2lvbjogMyB1cGRhdGVkOiAyMDAwLzA4LzEyIDIzOjE4OjUyCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubAorQUNfREVGVU4oW0NGX1RZUEVfU0lHQUNUSU9OXSwKK1sKK0FDX01TR19DSEVDS0lORyhbZm9yIHR5cGUgc2lnYWN0aW9uX3RdKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3R5cGVfc2lnYWN0aW9uLFsKKwlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c2lnbmFsLmg+XSwKKwkJW3NpZ2FjdGlvbl90IHhdLAorCQlbY2ZfY3ZfdHlwZV9zaWdhY3Rpb249eWVzXSwKKwkJW2NmX2N2X3R5cGVfc2lnYWN0aW9uPW5vXSldKQorQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfdHlwZV9zaWdhY3Rpb24pCit0ZXN0ICIkY2ZfY3ZfdHlwZV9zaWdhY3Rpb24iID0geWVzICYmIEFDX0RFRklORShIQVZFX1RZUEVfU0lHQUNUSU9OKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9VTlNJR05FRF9MSVRFUkFMUyB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDE5OTgvMDIvMDcgMjI6MTA6MTYKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRlc3QgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzICdVJyBhbmQgJ0wnIHN1ZmZpeGVzLiAgT25seSBvbGQgY29tcGlsZXJzCitkbmwgd29uJ3QsIGJ1dCB0aGV5J3JlIHN0aWxsIHRoZXJlLgorQUNfREVGVU4oW0NGX1VOU0lHTkVEX0xJVEVSQUxTXSwKK1sKK0FDX01TR19DSEVDS0lORyhbaWYgdW5zaWduZWQgbGl0ZXJhbHMgYXJlIGxlZ2FsXSkKK0FDX0NBQ0hFX1ZBTChjZl9jdl91bnNpZ25lZF9saXRlcmFscyxbCisJQUNfVFJZX0NPTVBJTEUoW10sW2xvbmcgeCA9IDFMICsgMVVMICsgMVUgKyAxXSwKKwkJW2NmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzPXllc10sCisJCVtjZl9jdl91bnNpZ25lZF9saXRlcmFscz1ub10pCisJXSkKK0FDX01TR19SRVNVTFQoJGNmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9VUFBFUiB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDEvMDEvMjkgMjM6NDA6NTkKK2RubCAtLS0tLS0tLQorZG5sIE1ha2UgYW4gdXBwZXJjYXNlIHZlcnNpb24gb2YgYSB2YXJpYWJsZQorZG5sICQxPXVwcGVyY2FzZSgkMikKK0FDX0RFRlVOKFtDRl9VUFBFUl0sCitbCiskMT1gZWNobyAiJDIiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9VVEY4X0xJQiB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDgvMTAvMTcgMTk6Mzc6NTIKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBtdWx0aWJ5dGUgc3VwcG9ydCwgYW5kIGlmIG5vdCBmb3VuZCwgdXRmOCBjb21wYXRpYmlsaXR5IGxpYnJhcnkKK0FDX0RFRlVOKFtDRl9VVEY4X0xJQl0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgbXVsdGlieXRlIGNoYXJhY3RlciBzdXBwb3J0LGNmX2N2X3V0ZjhfbGliLFsKKwljZl9zYXZlX0xJQlM9IiRMSUJTIgorCUFDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD5dLFtwdXR3YygwLDApO10sCisJW2NmX2N2X3V0ZjhfbGliPXllc10sCisJW0NGX0ZJTkRfTElOS0FHRShbCisjaW5jbHVkZSA8bGlidXRmOC5oPl0sW3B1dHdjKDAsMCk7XSx1dGY4LAorCQlbY2ZfY3ZfdXRmOF9saWI9YWRkLW9uXSwKKwkJW2NmX2N2X3V0ZjhfbGliPW5vXSkKK10pXSkKKworIyBIQVZFX0xJQlVURjhfSCBpcyB1c2VkIGJ5IG5jdXJzZXMgaWYgY3Vyc2VzLmggaXMgc2hhcmVkIGJldHdlZW4KKyMgbmN1cnNlcy9uY3Vyc2VzdzoKK2lmIHRlc3QgIiRjZl9jdl91dGY4X2xpYiIgPSAiYWRkLW9uIiA7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9MSUJVVEY4X0gpCisJQ0ZfQUREX0lOQ0RJUigkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCkKKwlDRl9BRERfTElCRElSKCRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCkKKwlMSUJTPSItbHV0ZjggJExJQlMiCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9WRVJCT1NFIHZlcnNpb246IDMgdXBkYXRlZDogMjAwNy8wNy8yOSAwOTo1NToxMgorZG5sIC0tLS0tLS0tLS0KK2RubCBVc2UgQUNfVkVSQk9TRSB3L28gdGhlIHdhcm5pbmdzCitBQ19ERUZVTihbQ0ZfVkVSQk9TRV0sCitbdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkkMSIgMT4mQUNfRkRfTVNHCitDRl9NU0dfTE9HKFskMV0pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dDSEFSX1RZUEUgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA0LzAxLzE3IDE5OjE4OjIwCitkbmwgLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHR5cGUgd2lkZS1jaGFyYWN0ZXIgdHlwZSAkMSBpcyBkZWNsYXJlZCwgYW5kIGlmIHNvLCB3aGljaCBoZWFkZXIKK2RubCBmaWxlIGlzIG5lZWRlZC4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IGEgc2hlbGwgdmFyaWFibGUgd2hlbgorZG5sIHRoZSB0eXBlIGlzIG5vdCBmb3VuZC4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgc2V0cyBhIHNoZWxsIHZhcmlhYmxlIGZvciB0aGUKK2RubCBvcHBvc2l0ZSBzZW5zZS4KK0FDX0RFRlVOKFtDRl9XQ0hBUl9UWVBFXSwKK1sKKyMgVGhpcyBpcyBuZWVkZWQgb24gVHJ1NjQgNS4wIHRvIGRlY2xhcmUgJDEKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIG11c3QgaW5jbHVkZSB3Y2hhci5oIHRvIGRlY2xhcmUgJDEsY2ZfY3ZfJDEsWworQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9MSUJVVEY4X0gKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWZdLAorCVskMSBzdGF0ZV0sCisJW2NmX2N2XyQxPW5vXSwKKwlbQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpZmRlZiBIQVZFX0xJQlVURjhfSAorI2luY2x1ZGUgPGxpYnV0ZjguaD4KKyNlbmRpZl0sCisJWyQxIHZhbHVlXSwKKwlbY2ZfY3ZfJDE9eWVzXSwKKwlbY2ZfY3ZfJDE9dW5rbm93bl0pXSldKQorCitpZiB0ZXN0ICIkY2ZfY3ZfJDEiID0geWVzIDsgdGhlbgorCUFDX0RFRklORShORUVEX1dDSEFSX0gpCisJTkVFRF9XQ0hBUl9IPTEKK2ZpCisKK2lmZWxzZSgkMiwsLFsKKyMgaWYgd2UgZG8gbm90IGZpbmQgJDEgaW4gZWl0aGVyIHBsYWNlLCB1c2Ugc3Vic3RpdHV0aW9uIHRvIHByb3ZpZGUgYSBmYWxsYmFjay4KK2lmIHRlc3QgIiRjZl9jdl8kMSIgPSB1bmtub3duIDsgdGhlbgorCSQyPTEKK2ZpCitdKQoraWZlbHNlKCQzLCwsWworIyBpZiB3ZSBmaW5kICQxIGluIGVpdGhlciBwbGFjZSwgdXNlIHN1YnN0aXR1dGlvbiB0byBwcm92aWRlIGEgZmFsbGJhY2suCitpZiB0ZXN0ICIkY2ZfY3ZfJDEiICE9IHVua25vd24gOyB0aGVuCisJJDM9MQorZmkKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dFQUtfU1lNQk9MUyB2ZXJzaW9uOiAxIHVwZGF0ZWQ6IDIwMDgvMDgvMTYgMTk6MTg6MDYKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsZXItc3VwcG9ydCBmb3Igd2VhayBzeW1ib2xzLgorZG5sIFRoaXMgd29ya3Mgd2l0aCAicmVjZW50IiBnY2MuCitBQ19ERUZVTihbQ0ZfV0VBS19TWU1CT0xTXSxbCitBQ19DQUNIRV9DSEVDSyhpZiAkQ0Mgc3VwcG9ydHMgd2VhayBzeW1ib2xzLGNmX2N2X3dlYWtfc3ltYm9scyxbCisKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRpby5oPl0sCitbCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGlmIGRlZmluZWQgX19VU0VfSVNPQzk5CisjICAgIGRlZmluZSBfY2F0X3ByYWdtYShleHApCV9QcmFnbWEoI2V4cCkKKyMgICAgZGVmaW5lIF93ZWFrX3ByYWdtYShleHApCV9jYXRfcHJhZ21hKHdlYWsgbmFtZSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF93ZWFrX3ByYWdtYShleHApCisjICBlbmRpZgorIyAgZGVmaW5lIF9kZWNsYXJlKG5hbWUpCV9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9fdHlwZW9mX18obmFtZSkgbmFtZQorIyAgZGVmaW5lIHdlYWtfc3ltYm9sKG5hbWUpCV93ZWFrX3ByYWdtYShuYW1lKSBfZGVjbGFyZShuYW1lKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKyNlbmRpZgorCit3ZWFrX3N5bWJvbChmb3Blbik7CitdLFtjZl9jdl93ZWFrX3N5bWJvbHM9eWVzXSxbY2ZfY3Zfd2Vha19zeW1ib2xzPW5vXSkKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfQUJJX1ZFUlNJT04gdmVyc2lvbjogMSB1cGRhdGVkOiAyMDAzLzA5LzIwIDE4OjEyOjQ5CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEFsbG93IGxpYnJhcnkncyBBQkkgdG8gYmUgb3ZlcnJpZGRlbi4gIEdlbmVyYWxseSB0aGlzIGhhcHBlbnMgd2hlbiBhCitkbmwgcGFja2FnZXIgaGFzIGluY3JlbWVudGVkIHRoZSBBQkkgcGFzdCB0aGF0IHVzZWQgaW4gdGhlIG9yaWdpbmFsIHBhY2thZ2UsCitkbmwgYW5kIHdpc2hlcyB0byBrZWVwIGRvaW5nIHRoaXMuCitkbmwKK2RubCAkMSBpcyB0aGUgcGFja2FnZSBuYW1lLCBpZiBhbnksIHRvIGRlcml2ZSBhIGNvcnJlc3BvbmRpbmcge3BhY2thZ2V9X0FCSQorZG5sIHN5bWJvbC4KK0FDX0RFRlVOKFtDRl9XSVRIX0FCSV9WRVJTSU9OXSxbCit0ZXN0IC16ICIkY2ZfY3ZfYWJpX3ZlcnNpb24iICYmIGNmX2N2X2FiaV92ZXJzaW9uPTAKK0FDX0FSR19XSVRIKGFiaS12ZXJzaW9uLAorWyAgLS13aXRoLWFiaS12ZXJzaW9uPVhYWCAgb3ZlcnJpZGUgZGVyaXZlZCBBQkkgdmVyc2lvbl0sCitbQUNfTVNHX1dBUk4ob3ZlcnJpZGluZyBBQkkgdmVyc2lvbiAkY2ZfY3ZfYWJpX3ZlcnNpb24gdG8gJHdpdGh2YWwpCisgY2ZfY3ZfYWJpX3ZlcnNpb249JHdpdGh2YWxdKQorIENGX05VTUJFUl9TWU5UQVgoJGNmX2N2X2FiaV92ZXJzaW9uLEFCSSB2ZXJzaW9uKQoraWZlbHNlKCQxLCwsWworJDFfQUJJPSRjZl9jdl9hYmlfdmVyc2lvbgorXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9EQk1BTExPQyB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDYvMTIvMTYgMTQ6MjQ6MDUKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29uZmlndXJlLW9wdGlvbiBmb3IgZGJtYWxsb2MuICBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIHVzZWQgdG8gb3ZlcnJpZGUKK2RubCB0aGUgdXBkYXRpbmcgb2YgJExJQlMsIGUuZy4sIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggc3Vic2VxdWVudCB0ZXN0cy4KK0FDX0RFRlVOKFtDRl9XSVRIX0RCTUFMTE9DXSxbCitDRl9OT19MRUFLU19PUFRJT04oZGJtYWxsb2MsCisJWyAgLS13aXRoLWRibWFsbG9jICAgICAgICAgdGVzdDogdXNlIENvbm9yIENhaGlsbCdzIGRibWFsbG9jIGxpYnJhcnldLAorCVtVU0VfREJNQUxMT0NdKQorCitpZiB0ZXN0ICIkd2l0aF9kYm1hbGxvYyIgPSB5ZXMgOyB0aGVuCisJQUNfQ0hFQ0tfSEVBREVSKGRibWFsbG9jLmgsCisJCVtBQ19DSEVDS19MSUIoZGJtYWxsb2MsW2RlYnVnX21hbGxvY11pZmVsc2UoJDEsLFtdLFssJDFdKSldKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9ETUFMTE9DIHZlcnNpb246IDYgdXBkYXRlZDogMjAwNi8xMi8xNiAxNDoyNDowNQorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIENvbmZpZ3VyZS1vcHRpb24gZm9yIGRtYWxsb2MuICBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIHVzZWQgdG8gb3ZlcnJpZGUKK2RubCB0aGUgdXBkYXRpbmcgb2YgJExJQlMsIGUuZy4sIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggc3Vic2VxdWVudCB0ZXN0cy4KK0FDX0RFRlVOKFtDRl9XSVRIX0RNQUxMT0NdLFsKK0NGX05PX0xFQUtTX09QVElPTihkbWFsbG9jLAorCVsgIC0td2l0aC1kbWFsbG9jICAgICAgICAgIHRlc3Q6IHVzZSBHcmF5IFdhdHNvbidzIGRtYWxsb2MgbGlicmFyeV0sCisJW1VTRV9ETUFMTE9DXSkKKworaWYgdGVzdCAiJHdpdGhfZG1hbGxvYyIgPSB5ZXMgOyB0aGVuCisJQUNfQ0hFQ0tfSEVBREVSKGRtYWxsb2MuaCwKKwkJW0FDX0NIRUNLX0xJQihkbWFsbG9jLFtkbWFsbG9jX2RlYnVnXWlmZWxzZSgkMSwsW10sWywkMV0pKV0pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX0dQTSB2ZXJzaW9uOiA3IHVwZGF0ZWQ6IDIwMDgvMDMvMjMgMTQ6NDg6NTQKK2RubCAtLS0tLS0tLS0tLQorZG5sCitkbmwgVGhlIG9wdGlvbiBwYXJhbWV0ZXIgKGlmIG5laXRoZXIgeWVzL25vKSBpcyBhc3N1bWVkIHRvIGJlIHRoZSBuYW1lIG9mCitkbmwgdGhlIGdwbSBsaWJyYXJ5LCBlLmcuLCBmb3IgZHluYW1pYyBsb2FkaW5nLgorQUNfREVGVU4oW0NGX1dJVEhfR1BNXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggdGhlIEdQTSBtb3VzZSBsaWJyYXJ5KQorQUNfQVJHX1dJVEgoZ3BtLAorCVsgIC0td2l0aC1ncG0gICAgICAgICAgICAgIHVzZSBBbGVzc2FuZHJvIFJ1YmluaSdzIEdQTSBsaWJyYXJ5XSwKKwlbd2l0aF9ncG09JHdpdGh2YWxdLAorCVt3aXRoX2dwbT1tYXliZV0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2dwbSkKKworaWYgdGVzdCAiJHdpdGhfZ3BtIiAhPSBubyA7IHRoZW4KKwlBQ19DSEVDS19IRUFERVIoZ3BtLmgsWworCQlBQ19ERUZJTkUoSEFWRV9HUE1fSCkKKwkJaWYgdGVzdCAiJHdpdGhfZ3BtIiAhPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ3BtIiAhPSBtYXliZSA7IHRoZW4KKwkJCUNGX1ZFUkJPU0UoYXNzdW1pbmcgd2UgcmVhbGx5IGhhdmUgR1BNIGxpYnJhcnkpCisJCQlBQ19ERUZJTkUoSEFWRV9MSUJHUE0pCisJCWVsc2UKKwkJCUFDX0NIRUNLX0xJQihncG0sR3BtX09wZW4sWzpdLFsKKwkJCQlBQ19NU0dfRVJST1IoQ2Fubm90IGxpbmsgd2l0aCBHUE0gbGlicmFyeSkKKwkJZmkKKwkJd2l0aF9ncG09eWVzCisJCV0pCisJXSxbCisJCXRlc3QgIiR3aXRoX2dwbSIgIT0gbWF5YmUgJiYgQUNfTVNHX1dBUk4oQ2Fubm90IGZpbmQgR1BNIGhlYWRlcikKKwkJd2l0aF9ncG09bm8KKwldKQorZmkKK10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9MSUJUT09MIHZlcnNpb246IDE5IHVwZGF0ZWQ6IDIwMDgvMDMvMjkgMTU6NDY6NDMKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBQcm92aWRlIGEgY29uZmlndXJlIG9wdGlvbiB0byBpbmNvcnBvcmF0ZSBsaWJ0b29sLiAgRGVmaW5lIHNldmVyYWwgdXNlZnVsCitkbmwgc3ltYm9scyBmb3IgdGhlIG1ha2VmaWxlIHJ1bGVzLgorZG5sCitkbmwgVGhlIHJlZmVyZW5jZSB0byBBQ19QUk9HX0xJQlRPT0wgZG9lcyBub3Qgbm9ybWFsbHkgd29yaywgc2luY2UgaXQgdXNlcworZG5sIG1hY3JvcyBmcm9tIGxpYnRvb2wubTQgd2hpY2ggaXMgaW4gdGhlIGFjbG9jYWwgZGlyZWN0b3J5IG9mIGF1dG9tYWtlLgorZG5sIEZvbGxvd2luZyBpcyBhIHNpbXBsZSBzY3JpcHQgd2hpY2ggdHVybnMgb24gdGhlIEFDX1BST0dfTElCVE9PTCBtYWNyby4KK2RubCBCdXQgdGhhdCBzdGlsbCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHNpbmNlIHRoZSBtYWNybyBpcyBleHBhbmRlZCBvdXRzaWRlCitkbmwgdGhlIENGX1dJVEhfTElCVE9PTCBtYWNybzoKK2RubAorZG5sCSMhL2Jpbi9zaAorZG5sCUFDTE9DQUw9YGFjbG9jYWwgLS1wcmludC1hYy1kaXJgCitkbmwJaWYgdGVzdCAteiAiJEFDTE9DQUwiIDsgdGhlbgorZG5sCQllY2hvIGNhbm5vdCBmaW5kIGFjbG9jYWwgZGlyZWN0b3J5CitkbmwJCWV4aXQgMQorZG5sCWVsaWYgdGVzdCAhIC1mICRBQ0xPQ0FML2xpYnRvb2wubTQgOyB0aGVuCitkbmwJCWVjaG8gY2Fubm90IGZpbmQgbGlidG9vbC5tNCBmaWxlCitkbmwJCWV4aXQgMQorZG5sCWZpCitkbmwJCitkbmwJTE9DQUw9YWNsb2NhbC5tNAorZG5sCU9SSUc9YWNsb2NhbC5tNC5vcmlnCitkbmwJCitkbmwJdHJhcCAibXYgJE9SSUcgJExPQ0FMIiAwIDEgMiA1IDE1CitkbmwJcm0gLWYgJE9SSUcKK2RubAltdiAkTE9DQUwgJE9SSUcKK2RubAkKK2RubAkjIHNlZCB0aGUgTElCVE9PTD0gYXNzaWdubWVudCB0byBvbWl0IHRoZSBjdXJyZW50IGRpcmVjdG9yeT8KK2RubAlzZWQgLWUgJ3MvXkxJQlRPT0w9LiovTElCVE9PTD0ke0xJQlRPT0wtbGlidG9vbH0vJyAkQUNMT0NBTC9saWJ0b29sLm00ID4+JExPQ0FMCitkbmwJY2F0ICRPUklHID4+JExPQ0FMCitkbmwJCitkbmwJYXV0b2NvbmYtMjU3ICQqCitkbmwKK0FDX0RFRlVOKFtDRl9XSVRIX0xJQlRPT0xdLAorWworaWZkZWYoW0FDX1BST0dfTElCVE9PTF0sLFsKK0xJQlRPT0w9CitdKQorIyBjb21tb24gbGlicmFyeSBtYWludGVuYW5jZSBzeW1ib2xzIHRoYXQgYXJlIGNvbnZlbmllbnQgZm9yIGxpYnRvb2wgc2NyaXB0czoKK0xJQl9DUkVBVEU9JyR7QVJ9IC1jcicKK0xJQl9PQkpFQ1Q9JyR7T0JKRUNUU30nCitMSUJfU1VGRklYPS5hCitMSUJfUFJFUD0iJFJBTkxJQiIKKworIyBzeW1ib2xzIHVzZWQgdG8gcHJvcCBsaWJ0b29sIHVwIHRvIGVuYWJsZSBpdCB0byBkZXRlcm1pbmUgd2hhdCBpdCBzaG91bGQgYmUKKyMgZG9pbmc6CitMSUJfQ0xFQU49CitMSUJfQ09NUElMRT0KK0xJQl9MSU5LPScke0NDfScKK0xJQl9JTlNUQUxMPQorTElCX1VOSU5TVEFMTD0KKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIGxpYnJhcmllcyB3aXRoIGxpYnRvb2wpCitBQ19BUkdfV0lUSChsaWJ0b29sLAorCVsgIC0td2l0aC1saWJ0b29sICAgICAgICAgIGdlbmVyYXRlIGxpYnJhcmllcyB3aXRoIGxpYnRvb2xdLAorCVt3aXRoX2xpYnRvb2w9JHdpdGh2YWxdLAorCVt3aXRoX2xpYnRvb2w9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9saWJ0b29sKQoraWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIjsgdGhlbgoraWZkZWYoW0FDX1BST0dfTElCVE9PTF0sWworCSMgbWlzc2luZ19jb250ZW50X0FDX1BST0dfTElCVE9PTHt7CisJQUNfUFJPR19MSUJUT09MCisJIyBtaXNzaW5nX2NvbnRlbnRfQUNfUFJPR19MSUJUT09MfX0KK10sWworIAlpZiB0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAieWVzIiA7IHRoZW4KKwkJQ0ZfUEFUSF9TWU5UQVgod2l0aF9saWJ0b29sKQorCQlMSUJUT09MPSR3aXRoX2xpYnRvb2wKKwllbHNlCisgCQlBQ19QQVRIX1BST0coTElCVE9PTCxsaWJ0b29sKQorIAlmaQorIAlpZiB0ZXN0IC16ICIkTElCVE9PTCIgOyB0aGVuCisgCQlBQ19NU0dfRVJST1IoQ2Fubm90IGZpbmQgbGlidG9vbCkKKyAJZmkKK10pZG5sCisJTElCX0NSRUFURT0nJHtMSUJUT09MfSAtLW1vZGU9bGluayAke0NDfSAtcnBhdGggJHtERVNURElSfSR7bGliZGlyfSAtdmVyc2lvbi1pbmZvIGBjdXQgLWYxICR7c3JjZGlyfS9WRVJTSU9OYCAke0xJQlRPT0xfT1BUU30gLW8nCisJTElCX09CSkVDVD0nJHtPQkpFQ1RTOi5vPS5sb30nCisJTElCX1NVRkZJWD0ubGEKKwlMSUJfQ0xFQU49JyR7TElCVE9PTH0gLS1tb2RlPWNsZWFuJworCUxJQl9DT01QSUxFPScke0xJQlRPT0x9IC0tbW9kZT1jb21waWxlJworCUxJQl9MSU5LPScke0xJQlRPT0x9IC0tbW9kZT1saW5rICR7Q0N9ICR7TElCVE9PTF9PUFRTfScKKwlMSUJfSU5TVEFMTD0nJHtMSUJUT09MfSAtLW1vZGU9aW5zdGFsbCcKKwlMSUJfVU5JTlNUQUxMPScke0xJQlRPT0x9IC0tbW9kZT11bmluc3RhbGwnCisJTElCX1BSRVA9OgorCisJIyBTaG93IHRoZSB2ZXJzaW9uIG9mIGxpYnRvb2wKKwlBQ19NU0dfQ0hFQ0tJTkcodmVyc2lvbiBvZiBsaWJ0b29sKQorCisJIyBTYXZlIHRoZSB2ZXJzaW9uIGluIGEgY2FjaGUgdmFyaWFibGUgLSB0aGlzIGlzIG5vdCBlbnRpcmVseSBhIGdvb2QKKwkjIHRoaW5nLCBidXQgdGhlIHZlcnNpb24gc3RyaW5nIGZyb20gbGlidG9vbCBpcyB2ZXJ5IHVnbHksIGFuZCBmb3IKKwkjIGJ1ZyByZXBvcnRzIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBoYXZlIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisJY2ZfY3ZfbGlidG9vbF92ZXJzaW9uPWAkTElCVE9PTCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtZSAnL14kL2QnIHxzZWQgLWUgJzIsJGQnIC1lICdzLyhbW14pXV0qKS8vZycgLWUgJ3MvXltbXjEtOV1dKi8vJyAtZSAncy9bW14wLTkuXV0uKi8vJ2AKKwlBQ19NU0dfUkVTVUxUKCRjZl9jdl9saWJ0b29sX3ZlcnNpb24pCisJaWYgdGVzdCAteiAiJGNmX2N2X2xpYnRvb2xfdmVyc2lvbiIgOyB0aGVuCisJCUFDX01TR19FUlJPUihUaGlzIGlzIG5vdCBHTlUgbGlidG9vbCkKKwlmaQorCisJIyBzcGVjaWFsIGhhY2sgdG8gYWRkIC0tdGFnIG9wdGlvbiBmb3IgQysrIGNvbXBpbGVyCisJY2FzZSAkY2ZfY3ZfbGlidG9vbF92ZXJzaW9uIGluCisJMS5bWzUtOV1dKnxbWzItOV1dKikKKwkJTElCVE9PTF9DWFg9IiRMSUJUT09MIC0tdGFnPUNYWCIKKwkJTElCVE9PTD0iJExJQlRPT0wgLS10YWc9Q0MiCisJCTs7CisJKikKKwkJTElCVE9PTF9DWFg9IiRMSUJUT09MIgorCQk7OworCWVzYWMKK2Vsc2UKKwlMSUJUT09MPSIiCisJTElCVE9PTF9DWFg9IiIKK2ZpCisKK3Rlc3QgLXogIiRMSUJUT09MIiAmJiBFQ0hPX0xUPQorCitBQ19TVUJTVChMSUJUT09MKQorQUNfU1VCU1QoTElCVE9PTF9DWFgpCitBQ19TVUJTVChMSUJUT09MX09QVFMpCisKK0FDX1NVQlNUKExJQl9DUkVBVEUpCitBQ19TVUJTVChMSUJfT0JKRUNUKQorQUNfU1VCU1QoTElCX1NVRkZJWCkKK0FDX1NVQlNUKExJQl9QUkVQKQorCitBQ19TVUJTVChMSUJfQ0xFQU4pCitBQ19TVUJTVChMSUJfQ09NUElMRSkKK0FDX1NVQlNUKExJQl9MSU5LKQorQUNfU1VCU1QoTElCX0lOU1RBTEwpCitBQ19TVUJTVChMSUJfVU5JTlNUQUxMKQorCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1dJVEhfUEFUSCB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDcvMDUvMTMgMTM6MTY6MzUKK2RubCAtLS0tLS0tLS0tLS0KK2RubCBXcmFwcGVyIGZvciBBQ19BUkdfV0lUSCB0byBlbnN1cmUgdGhhdCB1c2VyIHN1cHBsaWVzIGEgcGF0aG5hbWUsIG5vdCBqdXN0CitkbmwgZGVmYXVsdGluZyB0byB5ZXMvbm8uCitkbmwKK2RubCAkMSA9IG9wdGlvbiBuYW1lCitkbmwgJDIgPSBoZWxwLXRleHQKK2RubCAkMyA9IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldAorZG5sICQ0ID0gZGVmYXVsdCB2YWx1ZSwgc2hvd24gaW4gdGhlIGhlbHAtbWVzc2FnZSwgbXVzdCBiZSBhIGNvbnN0YW50CitkbmwgJDUgPSBkZWZhdWx0IHZhbHVlLCBpZiBpdCdzIGFuIGV4cHJlc3Npb24gJiBjYW5ub3QgYmUgaW4gdGhlIGhlbHAtbWVzc2FnZQorZG5sCitBQ19ERUZVTihbQ0ZfV0lUSF9QQVRIXSwKK1tBQ19BUkdfV0lUSCgkMSxbJDIgXShkZWZhdWx0OiBpZmVsc2UoJDQsLGVtcHR5LCQ0KSksLAoraWZlbHNlKCQ0LCxbd2l0aHZhbD0iJHskM30iXSxbd2l0aHZhbD0iJHskMy1pZmVsc2UoJDUsLCQ0LCQ1KX0iXSkpZG5sCitpZiBpZmVsc2UoJDUsLHRydWUsW3Rlc3QgLW4gIiQ1Il0pIDsgdGhlbgorQ0ZfUEFUSF9TWU5UQVgod2l0aHZhbCkKK2ZpCiskMz0iJHdpdGh2YWwiCitBQ19TVUJTVCgkMylkbmwKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9QQVRITElTVCB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDEvMTIvMTAgMDE6Mjg6MzAKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgUHJvY2VzcyBhbiBvcHRpb24gc3BlY2lmeWluZyBhIGxpc3Qgb2YgY29sb24tc2VwYXJhdGVkIHBhdGhzLgorZG5sCitkbmwgJDEgPSBvcHRpb24gbmFtZQorZG5sICQyID0gaGVscC10ZXh0CitkbmwgJDMgPSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQKK2RubCAkNCA9IGRlZmF1bHQgdmFsdWUsIHNob3duIGluIHRoZSBoZWxwLW1lc3NhZ2UsIG11c3QgYmUgYSBjb25zdGFudAorZG5sICQ1ID0gZGVmYXVsdCB2YWx1ZSwgaWYgaXQncyBhbiBleHByZXNzaW9uICYgY2Fubm90IGJlIGluIHRoZSBoZWxwLW1lc3NhZ2UKK2RubCAkNiA9IGZsYWcgdG8gdGVsbCBpZiB3ZSB3YW50IHRvIGRlZmluZSBvciBzdWJzdGl0dXRlCitkbmwKK0FDX0RFRlVOKFtDRl9XSVRIX1BBVEhMSVNUXSxbCitBQ19SRVFVSVJFKFtDRl9QQVRIU0VQXSkKK0FDX0FSR19XSVRIKCQxLFskMiBdKGRlZmF1bHQ6IGlmZWxzZSgkNCwsZW1wdHksJDQpKSwsCitpZmVsc2UoJDQsLFt3aXRodmFsPSR7JDN9XSxbd2l0aHZhbD0keyQzLWlmZWxzZSgkNSwsJDQsJDUpfV0pKWRubAorCitJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke1BBVEhTRVB9IgorY2ZfZHN0X3BhdGg9Citmb3IgY2Zfc3JjX3BhdGggaW4gJHdpdGh2YWwKK2RvCisgIENGX1BBVEhfU1lOVEFYKGNmX3NyY19wYXRoKQorICB0ZXN0IC1uICIkY2ZfZHN0X3BhdGgiICYmIGNmX2RzdF9wYXRoPSIke2NmX2RzdF9wYXRofToiCisgIGNmX2RzdF9wYXRoPSIke2NmX2RzdF9wYXRofSR7Y2Zfc3JjX3BhdGh9IgorZG9uZQorSUZTPSIkYWNfc2F2ZV9pZnMiCisKK2lmZWxzZSgkNixkZWZpbmUsWworIyBTdHJpcCBzaW5nbGUgcXVvdGVzIGZyb20gdGhlIHZhbHVlLCBlLmcuLCB3aGVuIGl0IHdhcyBzdXBwbGllZCBhcyBhIGxpdGVyYWwKKyMgZm9yICQ0IG9yICQ1LgorY2FzZSAkY2ZfZHN0X3BhdGggaW4gIyh2aQorXCcqKQorICBjZl9kc3RfcGF0aD1gZWNobyAkY2ZfZHN0X3BhdGggfHNlZCAtZSBzL1wnLy8gLWUgcy9cJ1wkLy9gCisgIDs7Citlc2FjCitjZl9kc3RfcGF0aD1gZWNobyAiJGNmX2RzdF9wYXRoIiB8IHNlZCAtZSAncy9cXFxcL1xcXFxcXFxcL2cnYAorXSkKKworZXZhbCAnJDM9IiRjZl9kc3RfcGF0aCInCitBQ19TVUJTVCgkMylkbmwKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX1BUSFJFQUQgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA4LzA4LzIzIDE4OjI2OjA1CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIFBPU0lYIHRocmVhZCBsaWJyYXJ5LgorQUNfREVGVU4oW0NGX1dJVEhfUFRIUkVBRF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkpCitBQ19BUkdfV0lUSChwdGhyZWFkLAorICAgIFsgIC0td2l0aC1wdGhyZWFkICAgICAgICAgIHVzZSBQT1NJWCB0aHJlYWQgbGlicmFyeV0sCisgICAgW3dpdGhfcHRocmVhZD0kd2l0aHZhbF0sCisgICAgW3dpdGhfcHRocmVhZD1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3B0aHJlYWQpCisKK2lmIHRlc3QgIiR3aXRoX3B0aHJlYWQiICE9IG5vIDsgdGhlbgorICAgIEFDX0NIRUNLX0hFQURFUihwdGhyZWFkLmgsWworICAgICAgICBBQ19ERUZJTkUoSEFWRV9QVEhSRUFEU19IKQorCisgICAgICAgIEFDX01TR19DSEVDS0lORyhpZiB3ZSBjYW4gbGluayB3aXRoIHRoZSBwdGhyZWFkIGxpYnJhcnkpCisgICAgICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9Ii1scHRocmVhZCAkTElCUyIKKyAgICAgICAgQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK10sWworICAgICAgICBpbnQgcmMgPSBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsKK10sW3dpdGhfcHRocmVhZD15ZXNdLFt3aXRoX3B0aHJlYWQ9bm9dKQorICAgICAgICBMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorICAgICAgICBBQ19NU0dfUkVTVUxUKCR3aXRoX3B0aHJlYWQpCisKKyAgICAgICAgaWYgdGVzdCAiJHdpdGhfcHRocmVhZCIgPSB5ZXMgOyB0aGVuCisgICAgICAgICAgICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCisgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJQVEhSRUFEUykKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKENhbm5vdCBsaW5rIHdpdGggcHRocmVhZCBsaWJyYXJ5KQorICAgICAgICBmaQorICAgIF0pCitmaQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX1JFTF9WRVJTSU9OIHZlcnNpb246IDEgdXBkYXRlZDogMjAwMy8wOS8yMCAxODoxMjo0OQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBBbGxvdyBsaWJyYXJ5J3MgcmVsZWFzZS12ZXJzaW9uIHRvIGJlIG92ZXJyaWRkZW4uICBHZW5lcmFsbHkgdGhpcyBoYXBwZW5zIHdoZW4gYQorZG5sIHBhY2thZ2VyIGhhcyBpbmNyZW1lbnRlZCB0aGUgcmVsZWFzZS12ZXJzaW9uIHBhc3QgdGhhdCB1c2VkIGluIHRoZSBvcmlnaW5hbCBwYWNrYWdlLAorZG5sIGFuZCB3aXNoZXMgdG8ga2VlcCBkb2luZyB0aGlzLgorZG5sCitkbmwgJDEgaXMgdGhlIHBhY2thZ2UgbmFtZSwgaWYgYW55LCB0byBkZXJpdmUgY29ycmVzcG9uZGluZyB7cGFja2FnZX1fTUFKT1IKK2RubCBhbmQge3BhY2thZ2V9X01JTk9SIHN5bWJvbHMKK2RubCBzeW1ib2wuCitBQ19ERUZVTihbQ0ZfV0lUSF9SRUxfVkVSU0lPTl0sWwordGVzdCAteiAiJGNmX2N2X3JlbF92ZXJzaW9uIiAmJiBjZl9jdl9yZWxfdmVyc2lvbj0wLjAKK0FDX0FSR19XSVRIKHJlbC12ZXJzaW9uLAorWyAgLS13aXRoLXJlbC12ZXJzaW9uPVhYWCAgb3ZlcnJpZGUgZGVyaXZlZCByZWxlYXNlIHZlcnNpb25dLAorW0FDX01TR19XQVJOKG92ZXJyaWRpbmcgcmVsZWFzZSB2ZXJzaW9uICRjZl9jdl9yZWxfdmVyc2lvbiB0byAkd2l0aHZhbCkKKyBjZl9jdl9yZWxfdmVyc2lvbj0kd2l0aHZhbF0pCitpZmVsc2UoJDEsLFsKKyBDRl9OVU1CRVJfU1lOVEFYKCRjZl9jdl9yZWxfdmVyc2lvbixSZWxlYXNlIHZlcnNpb24pCitdLFsKKyAkMV9NQUpPUj1gZWNobyAiJGNmX2N2X3JlbF92ZXJzaW9uIiB8IHNlZCAtZSAncy9cLi4qLy8nYAorICQxX01JTk9SPWBlY2hvICIkY2ZfY3ZfcmVsX3ZlcnNpb24iIHwgc2VkIC1lICdzL15bW14uXV0qLy8nIC1lICdzL15cLi8vJyAtZSAncy9cLi4qLy8nYAorIENGX05VTUJFUl9TWU5UQVgoWyRdJDFfTUFKT1IsUmVsZWFzZSBtYWpvci12ZXJzaW9uKQorIENGX05VTUJFUl9TWU5UQVgoWyRdJDFfTUlOT1IsUmVsZWFzZSBtaW5vci12ZXJzaW9uKQorXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9TWVNNT1VTRSB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDMvMDMvMjIgMTk6MTM6NDMKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgSWYgd2UgY2FuIGNvbXBpbGUgd2l0aCBzeXNtb3VzZSwgbWFrZSBpdCBhdmFpbGFibGUgdW5sZXNzIGl0IGlzIG5vdCB3YW50ZWQuCitBQ19ERUZVTihbQ0ZfV0lUSF9TWVNNT1VTRV0sWworIyBub3QgZXZlcnlvbmUgaGFzICJ0ZXN0IC1jIgoraWYgdGVzdCAtYyAvZGV2L3N5c21vdXNlIDI+L2Rldi9udWxsIDsgdGhlbgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIHVzZSBzeXNtb3VzZSkKK0FDX0FSR19XSVRIKHN5c21vdXNlLAorCVsgIC0td2l0aC1zeXNtb3VzZSAgICAgICAgIHVzZSBzeXNtb3VzZSAoRnJlZUJTRCBjb25zb2xlKV0sCisJW2NmX3dpdGhfc3lzbW91c2U9JHdpdGh2YWxdLAorCVtjZl93aXRoX3N5c21vdXNlPW1heWJlXSkKKwlpZiB0ZXN0ICIkY2Zfd2l0aF9zeXNtb3VzZSIgIT0gbm8gOyB0aGVuCisJQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPG9zcmVsZGF0ZS5oPgorI2lmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA0MDAwMTcpCisjaW5jbHVkZSA8c3lzL2NvbnNpby5oPgorI2luY2x1ZGUgPHN5cy9mYmlvLmg+CisjZWxzZQorI2luY2x1ZGUgPG1hY2hpbmUvY29uc29sZS5oPgorI2VuZGlmCitdLFsKKwlzdHJ1Y3QgbW91c2VfaW5mbyB0aGVfbW91c2U7CisJaW9jdGwoMCwgQ09OU19NT1VTRUNUTCwgJnRoZV9tb3VzZSk7CitdLFtjZl93aXRoX3N5c21vdXNlPXllc10sW2NmX3dpdGhfc3lzbW91c2U9bm9dKQorCWZpCitBQ19NU0dfUkVTVUxUKCRjZl93aXRoX3N5c21vdXNlKQordGVzdCAiJGNmX3dpdGhfc3lzbW91c2UiID0geWVzICYmIEFDX0RFRklORShVU0VfU1lTTU9VU0UpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9XSVRIX1ZBTEdSSU5EIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNi8xMi8xNCAxODowMDoyMQorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtDRl9XSVRIX1ZBTEdSSU5EXSxbCitDRl9OT19MRUFLU19PUFRJT04odmFsZ3JpbmQsCisJWyAgLS13aXRoLXZhbGdyaW5kICAgICAgICAgdGVzdDogdXNlIHZhbGdyaW5kXSwKKwlbVVNFX1ZBTEdSSU5EXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfWE9QRU5fU09VUkNFIHZlcnNpb246IDI2IHVwZGF0ZWQ6IDIwMDgvMDcvMjcgMTE6MjY6NTcKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBUcnkgdG8gZ2V0IF9YT1BFTl9TT1VSQ0UgZGVmaW5lZCBwcm9wZXJseSB0aGF0IHdlIGNhbiB1c2UgUE9TSVggZnVuY3Rpb25zLAorZG5sIG9yIGFkYXB0IHRvIHRoZSB2ZW5kb3IncyBkZWZpbml0aW9ucyB0byBnZXQgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5LAorZG5sIHdpdGhvdXQgbG9zaW5nIHRoZSBjb21tb24gbm9uLVBPU0lYIGZlYXR1cmVzLgorZG5sCitkbmwgUGFyYW1ldGVyczoKK2RubAkkMSBpcyB0aGUgbm9taW5hbCB2YWx1ZSBmb3IgX1hPUEVOX1NPVVJDRQorZG5sCSQyIGlzIHRoZSBub21pbmFsIHZhbHVlIGZvciBfUE9TSVhfQ19TT1VSQ0UKK0FDX0RFRlVOKFtDRl9YT1BFTl9TT1VSQ0VdLFsKKworQUNfUkVRVUlSRShbQ0ZfUFJPR19DQ19VX0RdKQorCitjZl9YT1BFTl9TT1VSQ0U9aWZlbHNlKCQxLCw1MDAsJDEpCitjZl9QT1NJWF9DX1NPVVJDRT1pZmVsc2UoJDIsLDE5OTUwNkwsJDIpCisKK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorYWl4W1s0NV1dKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfQUxMX1NPVVJDRSIKKwk7OworZnJlZWJzZCp8ZHJhZ29uZmx5KikgIyh2aQorCSMgNS54IGhlYWRlcnMgYXNzb2NpYXRlCisJIwlfWE9QRU5fU09VUkNFPTYwMCB3aXRoIF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMCisJIwlfWE9QRU5fU09VUkNFPTUwMCB3aXRoIF9QT1NJWF9DX1NPVVJDRT0xOTk1MDZMCisJY2ZfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCWNmX1hPUEVOX1NPVVJDRT02MDAKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0JTRF9UWVBFUyAtRF9fQlNEX1ZJU0lCTEUgLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIC1EX1hPUEVOX1NPVVJDRT0kY2ZfWE9QRU5fU09VUkNFIgorCTs7CitocHV4KikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfSFBVWF9TT1VSQ0UiCisJOzsKK2lyaXhbWzU2XV0uKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfU0dJX1NPVVJDRSIKKwk7OworbGludXgqfGdudSp8aypic2QqLWdudSkgIyh2aQorCUNGX0dOVV9TT1VSQ0UKKwk7OworbWlyYnNkKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIG9yIF9QT1NJWF9TT1VSQ0UgYnJlYWtzIDxhcnBhL2luZXQuaD4KKwk7OworbmV0YnNkKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBJUHY2IGZvciBseW54IG9uIE5ldEJTRCAxLjYsIGJyZWFrcyB4dGVybSwgaXMgbm90IG5lZWRlZCBmb3IgbmN1cnNlc3cKKwk7Oworb3BlbmJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgeHRlcm0gb24gT3BlbkJTRCAyLjgsIGlzIG5vdCBuZWVkZWQgZm9yIG5jdXJzZXN3CisJOzsKK29zZltbNDVdXSopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX09TRl9TT1VSQ0UiCisJOzsKK250by1xbngqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9RTlhfU09VUkNFIgorCTs7CitzY28qKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIEx5bnggb24gU0NPIFVuaXggLyBPcGVuU2VydmVyCisJOzsKK3NvbGFyaXMqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9fRVhURU5TSU9OU19fIgorCTs7CisqKQorCUFDX0NBQ0hFX0NIRUNLKGlmIHdlIHNob3VsZCBkZWZpbmUgX1hPUEVOX1NPVVJDRSxjZl9jdl94b3Blbl9zb3VyY2UsWworCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZl0sCisJW2NmX2N2X3hvcGVuX3NvdXJjZT1ub10sCisJW2NmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwkgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLAorCVtjZl9jdl94b3Blbl9zb3VyY2U9bm9dLAorCVtjZl9jdl94b3Blbl9zb3VyY2U9JGNmX1hPUEVOX1NPVVJDRV0pCisJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCV0pCitdKQorCWlmIHRlc3QgIiRjZl9jdl94b3Blbl9zb3VyY2UiICE9IG5vIDsgdGhlbgorCQlDRl9SRU1PVkVfREVGSU5FKENGTEFHUywkQ0ZMQUdTLF9YT1BFTl9TT1VSQ0UpCisJCUNGX1JFTU9WRV9ERUZJTkUoQ1BQRkxBR1MsJENQUEZMQUdTLF9YT1BFTl9TT1VSQ0UpCisJCXRlc3QgIiRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPSB5ZXMgJiYgXAorCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtVV9YT1BFTl9TT1VSQ0UiCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfWE9QRU5fU09VUkNFPSRjZl9jdl94b3Blbl9zb3VyY2UiCisJZmkKKwlDRl9QT1NJWF9DX1NPVVJDRSgkY2ZfUE9TSVhfQ19TT1VSQ0UpCisJOzsKK2VzYWMKK10pCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9hbm5vdW5jZS5odG1sLmluIGIvbmN1cnNlcy01LjcvYW5ub3VuY2UuaHRtbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDQxMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYW5ub3VuY2UuaHRtbC5pbgpAQCAtMCwwICsxLDU4OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAzLjAvL0VOIj4KKzwhLS0KKyAgJElkOiBhbm5vdW5jZS5odG1sLmluLHYgMS43MCAyMDA4LzExLzAyIDAxOjAzOjA1IHRvbSBFeHAgJAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPkFubm91bmNpbmcgbmN1cnNlcyBAVkVSU0lPTkA8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKworPEgxPkFubm91bmNpbmcgbmN1cnNlcyBAVkVSU0lPTkA8L0gxPgorCitUaGUgbmN1cnNlcyAobmV3IGN1cnNlcykgbGlicmFyeSBpcyBhIGZyZWUgc29mdHdhcmUgZW11bGF0aW9uIG9mCitjdXJzZXMgaW4gU3lzdGVtIFYgUmVsZWFzZSA0LjAsIGFuZCBtb3JlLiAgSXQgdXNlcyB0ZXJtaW5mbyBmb3JtYXQsCitzdXBwb3J0cyBwYWRzIGFuZCBjb2xvcgorYW5kIG11bHRpcGxlIGhpZ2hsaWdodHMgYW5kIGZvcm1zIGNoYXJhY3RlcnMgYW5kIGZ1bmN0aW9uLWtleSBtYXBwaW5nLAorYW5kIGhhcyBhbGwgdGhlIG90aGVyIFNZU1YtY3Vyc2VzIGVuaGFuY2VtZW50cyBvdmVyIEJTRCBjdXJzZXMuPFA+CisKK0luIG1pZC1KdW5lIDE5OTUsIHRoZSBtYWludGFpbmVyIG9mIDQuNEJTRCBjdXJzZXMgZGVjbGFyZWQgdGhhdCBoZQorY29uc2lkZXJlZCA0LjRCU0QgY3Vyc2VzIG9ic29sZXRlLCBhbmQgZW5jb3VyYWdlZCB0aGUga2VlcGVycyBvZgorVW5peCByZWxlYXNlcyBzdWNoIGFzIEJTRC9PUywgRnJlZUJTRCBhbmQgTmV0QlNEIHRvIHN3aXRjaCBvdmVyIHRvCituY3Vyc2VzLjxQPgorCitUaGUgbmN1cnNlcyBjb2RlIHdhcyBkZXZlbG9wZWQgdW5kZXIgR05VL0xpbnV4LgorSXQgaGFzIGJlZW4gaW4gdXNlIGZvciBzb21lIHRpbWUgd2l0aCBPcGVuQlNEIGFzIHRoZSBzeXN0ZW0gY3Vyc2VzIGxpYnJhcnksCithbmQgb24gRnJlZUJTRCBhbmQgTmV0QlNEIGFzIGFuIGV4dGVybmFsIHBhY2thZ2UuCitJdCBzaG91bGQgcG9ydCBlYXNpbHkgdG8gYW55IEFOU0kvUE9TSVgtY29uZm9ybWluZyBVTklYLgorSXQgaGFzIGV2ZW4gYmVlbiBwb3J0ZWQgdG8gT1MvMiBXYXJwITxQPgorCitUaGUgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIHRoZSBsaWJyYXJ5IGFuZCBzdXBwb3J0IHV0aWxpdGllcywgaW5jbHVkaW5nIGEKK3Rlcm1pbmZvIGNvbXBpbGVyIHRpYygxKSwgYSBkZWNvbXBpbGVyIGluZm9jbXAoMSksIGNsZWFyKDEpLCB0cHV0KDEpLCB0c2V0KDEpLAorYW5kIGEgdGVybWNhcCBjb252ZXJzaW9uIHRvb2wgY2FwdG9pbmZvKDEpLiAgRnVsbCBtYW51YWwgcGFnZXMgYXJlIHByb3ZpZGVkIGZvcgordGhlIGxpYnJhcnkgYW5kIHRvb2xzLjxQPgorCitUaGUgbmN1cnNlcyBkaXN0cmlidXRpb24gaXMgYXZhaWxhYmxlIHZpYSBhbm9ueW1vdXMgRlRQIGF0Cit0aGUgR05VIGRpc3RyaWJ1dGlvbiBzaXRlCis8QSBIUkVGPSJmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbmN1cnNlcy8iPmZ0cDovL2Z0cC5nbnUub3JnL2dudS9uY3Vyc2VzLzwvQT4mbmJzcDsuCis8YnI+SXQgaXMgYWxzbyBhdmFpbGFibGUgYXQKKzxBIEhSRUY9ImZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvIj5mdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLzwvQT4mbmJzcDsuCisKKzxIMT5SZWxlYXNlIE5vdGVzPC9IMT4KKworVGhpcyByZWxlYXNlIGlzIGRlc2lnbmVkIHRvIGJlIHVwd2FyZCBjb21wYXRpYmxlIGZyb20gbmN1cnNlcyA1LjAgdGhyb3VnaCA1LjY7Cit2ZXJ5IGZldyBhcHBsaWNhdGlvbnMgd2lsbCByZXF1aXJlIHJlY29tcGlsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCitUaGVzZSBhcmUgdGhlIGhpZ2hsaWdodHMgZnJvbSB0aGUgY2hhbmdlLWxvZyBzaW5jZSBuY3Vyc2VzIDUuNiByZWxlYXNlLgorPHA+CitJbnRlcmZhY2UgY2hhbmdlczoKKzx1bD4KKwk8bGk+Z2VuZXJhdGUgbGlua2FibGUgc3R1YnMgZm9yIHNvbWUgbWFjcm9zOgorCTxicj4KKwkgIGdldGF0dHJzCisKKzwvdWw+CitOZXcgZmVhdHVyZXMgYW5kIGltcHJvdmVtZW50czoKKzx1bD4KKyAgICAgICAgPGxpPmxpYnJhcnkKKwk8dWw+CisJCTxsaT5uZXcgZmxhdm9yIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkgcHJvdmlkZXMgcnVkaW1lbnRhcnkKKwkJICAgIHN1cHBvcnQgZm9yIFBPU0lYIHRocmVhZHMuICBTZXZlcmFsIGZ1bmN0aW9ucyBhcmUKKwkJICAgIHJlZW50cmFudCwgYnV0IG1vc3QgcmVxdWlyZSBlaXRoZXIgYSB3aW5kb3ctbGV2ZWwgb3IKKwkJICAgIHNjcmVlbi1sZXZlbCBtdXRleC48YnI+CisJCSAgICAoVGhpcyBpcyA8ZW0+QVBJPC9lbT4tY29tcGF0aWJsZSwKKwkJICAgICBidXQgbm90IDxlbT5BQkk8L2VtPi1jb21wYXRpYmxlIHdpdGggdGhlIG5vcm1hbCBsaWJyYXJ5KS4KKworCQk8bGk+YWRkIDxjb2RlPk5DVVJTRVNfT1BBUVVFPC9jb2RlPiBzeW1ib2wgdG8gY3Vyc2VzLmgsIHdpbGwKKwkJICAgIHVzZSB0byBtYWtlIHN0cnVjdHMgb3BhcXVlIGluIHNlbGVjdGVkIGNvbmZpZ3VyYXRpb25zLgorCisJCTxsaT5hZGQgPGNvZGU+TkNVUlNFU19FWFRfRlVOQ1M8L2NvZGU+IGFuZAorCQkgICAgPGNvZGU+TkNVUlNFU19FWFRfQ09MT1JTPC9jb2RlPiBzeW1ib2xzIHRvIGN1cnNlcy5oIHRvIG1ha2UKKwkJICAgIGl0IHNpbXBsZXIgdG8gdGVsbCBpZiB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25zIGFuZC9vciBjb2xvcnMKKwkJICAgIGFyZSBkZWNsYXJlZC4KKworCQk8bGk+YWRkIHdyZXNpemUoKSB0byBDKysgYmluZGluZyAKKworCQk8bGk+ZWxpbWluYXRlIGZpeGVkLWJ1ZmZlciB2c3ByaW50ZigpIGNhbGxzIGluIEMrKyBiaW5kaW5nLgorCisJCTxsaT5hZGQgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gQysrIGJpbmRpbmcgd2hpY2ggd3JhcCBDIGZ1bmN0aW9ucworCQkgICAgdGhhdCBwYXNzIGEgV0lORE9XKiBwYXJhbWV0ZXIuCisKKwkJPGxpPmFkYXB0IG1vdXNlLWhhbmRsaW5nIGNvZGUgZnJvbSBtZW51IGxpYnJhcnkgaW4gZm9ybS1saWJyYXJ5CisKKwkJPGxpPmltcHJvdmUgdHJhY2luZyBmb3IgZm9ybSBsaWJyYXJ5LCBzaG93aW5nIGNyZWF0ZWQgZm9ybXMsCisJCSAgICBmaWVsZHMsIGV0Yy4KKworCQk8bGk+bWFrZSAkTkNVUlNFU19OT19QQURESU5HIGZlYXR1cmUgd29yayBmb3IgdGVybWNhcCBpbnRlcmZhY2UgLgorCisJCTxsaT5hZGQgY2hlY2sgdG8gdHJhY2UtZmlsZSBvcGVuLCBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyBhCisJCSAgICBkaXJlY3RvcnksIGFkZCAiLmxvZyIgdG8gdGhlIG5hbWUgYW5kIHRyeSBhZ2Fpbi4KKworCQk8bGk+c2V2ZXJhbCBuZXcgbWFucGFnZXM6ICBjdXJzX2xlZ2FjeS4zeCwgY3Vyc19tZW1sZWFrcy4zeCwKKwkJICAgIGN1cnNfb3BhcXVlLjN4IGFuZCBjdXJzX3RocmVhZHMuM3gKKwk8L3VsPgorCisgICAgICAgIDxsaT5wcm9ncmFtczoKKwk8dWw+CisJCTxsaT5tb2RpZmllZCB0aHJlZSB0ZXN0LXByb2dyYW1zIHRvIGRlbW9uc3RyYXRlIHRoZSB0aHJlYWRpbmcKKwkJICAgIHN1cHBvcnQgaW4gdGhpcyB2ZXJzaW9uOiBkaXR0bywgcmFpbiwgd29ybS4KKworCQk8bGk+c2V2ZXJhbCBuZXcgdGVzdC1wcm9ncmFtczogZGVtb19wYW5lbHMsIGRvdHNfbXZjdXIsCisJCSAgICBpbmNoX3dpZGUsIGluY2hzLCBrZXlfbmFtZSwga2V5X25hbWVzLCBzYXZlc2NyZWVuLAorCQkgICAgc2F2ZXNjcmVlbi5zaCB0ZXN0X2FycmF5cywgdGVzdF9nZXRfd3N0ciwgdGVzdF9nZXRzdHIsCisJCSAgICB0ZXN0X2luc3RyLCB0ZXN0X2lud3N0ciBhbmQgdGVzdF9vcGFxdWUuCisKKwkJPGxpPmFkZCA8Y29kZT5hZGFjdXJzZXMtY29uZmlnPC9jb2RlPiB0byB0aGUgQWRhOTUgaW5zdGFsbC4KKworCQk8bGk+bW9kaWZ5IHRpYyA8Y29kZT4tZjwvY29kZT4gb3B0aW9uIHRvIGZvcm1hdCBzcGFjZXMgYXMKKwkJICAgIDxjb2RlPlxzPC9jb2RlPiB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBsb3N0IHdoZW4gdGhhdAorCQkgICAgaXMgcmVhZCBiYWNrIGluIHVuZm9ybWF0dGVkIHN0cmluZ3MuCisKKwkJPGxpPlRoZSA8Y29kZT50YWNrPC9jb2RlPiBwcm9ncmFtIGlzIG5vdyBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5CisJCSAgICBmcm9tIG5jdXJzZXMuCisJPC91bD4KKworCTxsaT50ZXJtaW5hbCBkYXRhYmFzZQorCTx1bD4KKwkgICAgPGxpPmFkZGVkIGVudHJpZXM6CisJCTx1bD4KKwkJPGxpPjxjb2RlPkV0ZXJtLTI1NmNvbG9yPC9jb2RlPiwKKwkJICAgIDxjb2RlPkV0ZXJtLTg4Y29sb3I8L2NvZGU+IGFuZAorCQkgICAgPGNvZGU+cnh2dC04OGNvbG9yPC9jb2RlPgorCQk8bGk+PGNvZGU+YXRlcm08L2NvZGU+CisJCTxsaT48Y29kZT5rb25zb2xlLTI1NmNvbG9yPC9jb2RlPgorCQk8bGk+PGNvZGU+bXJ4dnQ8L2NvZGU+CisJCTxsaT48Y29kZT5zY3JlZW4ubWx0ZXJtPC9jb2RlPgorCQk8bGk+PGNvZGU+c2NyZWVuLnJ4dnQ8L2NvZGU+CisJCTxsaT48Y29kZT50ZXJhdGVybTQuNTk8L2NvZGU+IGlzIG5vdyB0aGUgcHJpbWFyeSBwcmltYXJ5CisJCSAgICB0ZXJhdGVybSBlbnRyeSwgcmVuYW1lZCBvcmlnaW5hbCB0bworCQkgICAgPGNvZGU+dGVyYXRlcm0yLjM8L2NvZGU+CisJCTxsaT48Y29kZT45dGVybTwvY29kZT4gdGVybWluYWwKKwkJPGxpPk5ld2J1cnkgRGF0YSBlbnRyaWVzCisJCTwvdWw+CisJICAgIDxsaT51cGRhdGVkL2ltcHJvdmVkIGVudHJpZXM6CisJCTx1bD4KKwkgICAgICAgIDxsaT48Y29kZT5nbm9tZTwvY29kZT4gdG8gdmVyc2lvbiAyLjIyLjMKKwkJPGxpPjxjb2RlPmgxOTwvY29kZT4sIDxjb2RlPnoxMDA8L2NvZGU+CisJCTxsaT48Y29kZT5rb25zb2xlPC9jb2RlPiB0byB2ZXJzaW9uIDEuNi42CisJCTxsaT48Y29kZT5tbHRlcm08L2NvZGU+LCA8Y29kZT5tbHRlcm0rcGNma2V5czwvY29kZT4KKwkJPGxpPjxjb2RlPnh0ZXJtPC9jb2RlPiwgYW5kIGJ1aWxkaW5nLWJsb2NrcyBmb3IgZnVuY3Rpb24ta2V5cworCQkgICAgdG8gPGEgaHJlZj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3h0ZXJtL3h0ZXJtLmxvZy5odG1sI3h0ZXJtXzIzMCI+eHRlcm0gcGF0Y2ggIzIzMDwvYT4uCisJCTwvdWw+CisJPC91bD4KKzwvdWw+CitNYWpvciBidWcgZml4ZXM6Cis8dWw+CisJPGxpPmFkZCBsb2dpYyB0byB0aWMgZm9yIGNhbmNlbGxpbmcgc3RyaW5ncyBpbiB1c2VyLWRlZmluZWQKKwkgICAgY2FwYWJpbGl0aWVzCisJICAgICh0aGlzIGlzIDxlbT5uZWVkZWQ8L2VtPiBmb3IKKwkgICAgIGN1cnJlbnQgPGNvZGU+a29uc29sZTwvY29kZT4gdGVybWluZm8gZW50cnkpLgorCisJPGxpPm1vZGlmeSA8Y29kZT5tay0xc3QuYXdrPC9jb2RlPiBzbyB0aGUgZ2VuZXJhdGVkIG1ha2VmaWxlIHJ1bGVzIGZvcgorCSAgICBsaW5raW5nIG9yIGluc3RhbGxpbmcgc2hhcmVkIGxpYnJhcmllcyBkbyBub3QgZmlyc3QgcmVtb3ZlIHRoZQorCSAgICBsaWJyYXJ5LCBpbiBjYXNlIGl0IGlzIGluIHVzZSwgZS5nLiwgPGNvZGU+bGlibmN1cnNlcy5zbzwvY29kZT4gYnkKKwkgICAgPGNvZGU+L2Jpbi9zaDwvY29kZT4uCisKKwk8bGk+Y29ycmVjdCBjaGVjayBmb3Igbm90aW1lb3V0KCkgaW4gd2dldGNoKCkuCisKKwk8bGk+Zml4IGEgc2lnbi1leHRlbnNpb24gYnVnIGluIGluZm9jbXAncyByZXBhaXJfYWNzYygpIGZ1bmN0aW9uLgorCisJPGxpPmNoYW5nZSB3aW5uc3RyKCkgdG8gc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCisJPGxpPm1ha2UgQWRhOTUgZGVtb19wYW5lbHMoKSBleGFtcGxlIHdvcmsuCisKKwk8bGk+Zml4IGZvciBhZGRpbmcgYSBub24tc3BhY2luZyBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisKKwk8bGk+ZmlsbCBpbiBleHRlbmRlZC1jb2xvciBwYWlyIHRvIG1ha2UgY29sb3JzIHdvcmsKKwkgICAgZm9yIHdpZGUtY2hhcmFjdGVycyB1c2luZyBleHRlbmRlZC1jb2xvcnMuCisKKwk8bGk+aW1wcm92ZSByZWZyZXNoIG9mIHdpbmRvdyBvbiB0b3Agb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMsCisJICAgIHRha2luZyBpbnRvIGFjY291bnQgc3BsaXQgY2hhcmFjdGVycyBvbiBsZWZ0L3JpZ2h0IHdpbmRvdworCSAgICBib3VuZGFyaWVzLgorCisJPGxpPm1vZGlmeSA8Y29kZT53aW5fd2NobnN0cigpPC9jb2RlPiB0byBlbnN1cmUgdGhhdCBvbmx5IGEgYmFzZSBjZWxsCisJICAgIGlzIHJldHVybmVkIGZvciBlYWNoIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXIuCisKKwk8bGk+aW1wcm92ZSA8Y29kZT53YWRkY2goKTwvY29kZT4gYW5kIDxjb2RlPndpbnNjaCgpPC9jb2RlPiBoYW5kbGluZyBvZgorCSAgICBFSUxTRVEgZnJvbSA8Y29kZT5tYnJ0b3djKCk8L2NvZGU+IGJ5IHVzaW5nIDxjb2RlPnVuY3RybCgpPC9jb2RlPgorCSAgICB0byBkaXNwbGF5IGlsbGVnYWwgYnl0ZXMgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGFwcGVuZCBmdXJ0aGVyIGJ5dGVzCisJICAgIHRvIG1ha2UgdXAgYSB2YWxpZCBzZXF1ZW5jZS4KKworCTxsaT5yZXN0b3JlIDxjb2RlPmN1cnNfc2V0KCk8L2NvZGU+IHN0YXRlIGFmdGVyCisJICAgIDxjb2RlPmVuZHdpbigpPC9jb2RlPi88Y29kZT5yZWZyZXNoKCk8L2NvZGU+CisKKwk8bGk+bW9kaWZ5IDxjb2RlPmtleW5hbWUoKTwvY29kZT4gdG8gdXNlICJeWCIgZm9ybSBvbmx5IGlmCisJICAgIDxjb2RlPm1ldGEoKTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkLCBvciBpZiA8Y29kZT5rZXluYW1lKCk8L2NvZGU+CisJICAgIGlzIGNhbGxlZCB3aXRob3V0IGluaXRpYWxpemluZyBjdXJzZXMsIGUuZy4sIHZpYQorCSAgICA8Y29kZT5pbml0c2NyKCk8L2NvZGU+IG9yIDxjb2RlPm5ld3Rlcm0oKTwvY29kZT4uCisKKwk8bGk+bW9kaWZ5IDxjb2RlPnVuY3RybCgpPC9jb2RlPiB0byBjaGVjayBjb2RlcyBpbiAxMjgtMjU1IHJhbmdlIHZlcnN1cworCSAgICA8Y29kZT5pc3ByaW50KCk8L2NvZGU+LgorCSAgICBJZiB0aGV5IGFyZSBub3QgcHJpbnRhYmxlLCBhbmQgbG9jYWxlIHdhcyBzZXQsIHVzZSBhICJNLSIgb3IgIn4iCisJICAgIHNlcXVlbmNlLgorCisJPGxpPmltcHJvdmUgPGNvZGU+cmVzaXpldGVybSgpPC9jb2RlPiBieSBtb3ZpbmcgcmlwcGVkLW9mZiBsaW5lcywgYW5kCisJICAgIHJlcGFpbnRpbmcgdGhlIHNvZnQta2V5cy4KKworCTxsaT5tb2RpZnkgZm9ybSBsaWJyYXJ5IHRvIGFjY2VwdCBjb250cm9sIGNoYXJhY3RlcnMgc3VjaCBhcyBuZXdsaW5lCisJICAgIGluIHNldF9maWVsZF9idWZmZXIoKSwgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMuCisKKwk8bGk+dXNlIDxjb2RlPk5DVVJTRVNfTU9VU0VfTUFTSygpPC9jb2RlPiBpbiBkZWZpbml0aW9uIG9mCisJICAgIDxjb2RlPkJVVFRPTl9SRUxFQVNFKCk8L2NvZGU+LCBldGMuLCB0byBtYWtlIHRob3NlIHdvcmsgcHJvcGVybHkKKwkgICAgd2l0aCB0aGUgPGNvZGU+LS1lbmFibGUtZXh0LW1vdXNlPC9jb2RlPiBjb25maWd1cmF0aW9uCisKKwk8bGk+Y29ycmVjdCBzb21lIGZ1bmN0aW9ucyBpbiBBZGE5NSBiaW5kaW5nIHdoaWNoIHdlcmUgdXNpbmcgcmV0dXJuCisJICAgIHZhbHVlIGZyb20gQyB3aGVyZSBub25lIHdhcyByZXR1cm5lZC4KKworCTxsaT5yZXZpZXdlZC9maXhlZCBpc3N1ZXMgcmVwb3J0ZWQgYnkgQ292ZXJpdHkgYW5kIEtsb2N3b3JrIHRvb2xzLgorPC91bD4KKworUG9ydGFiaWxpdHk6Cis8dWw+CisgICAgICAgIDxsaT5jb25maWd1cmUgc2NyaXB0OgorICAgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGk+bmV3IG9wdGlvbnM6CisgICAgICAgICAgICA8ZGw+CisKKwkgICAgPGR0Pi0tZGlzYWJsZS1iaWctc3RyaW5ncworCSAgICA8ZGQ+Y29udHJvbCB3aGV0aGVyIHN0YXRpYyBzdHJpbmcgdGFibGVzIGFyZSBnZW5lcmF0ZWQgYXMgc2luZ2xlCisJICAgICAgICBsYXJnZSBzdHJpbmdzICh0byBpbXByb3ZlIHN0YXJ0dXAgcGVyZm9ybWFuY2UpLCBvciBhcyBhcnJheQorCQlvZiBpbmRpdmlkdWFsIHN0cmluZ3MuCisKKwkgICAgPGR0Pi0tZGlzYWJsZS1yZWxpbmsKKwkgICAgPGRkPmNvbnRyb2wgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIGFyZSByZWxpbmtlZCAoZHVyaW5nIGluc3RhbGwpCisJCXdoZW4gcnBhdGggaXMgZW5hYmxlZC4KKworCSAgICA8ZHQ+LS1kaXNhYmxlLXRpYy1kZXBlbmRzCisJICAgIDxkZD5tYWtlIGV4cGxpY2l0IHdoZXRoZXIgdGljIGxpYnJhcnkgZGVwZW5kcyBvbiBuY3Vyc2VzL25jdXJzZXN3CisJICAgICAgICBsaWJyYXJ5LgorCisJICAgIDxkdD4tLWVuYWJsZS1taXhlZC1jYXNlCisJICAgIDxkZD5vdmVycmlkZSB0aGUgY29uZmlndXJlIHNjcmlwdCdzIGNoZWNrIGlmIHRoZSBmaWxlc3lzdGVtCisJCXN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLgorCSAgICAgICAgVGhpcyBhbGxvd3Mgb25lIHRvIGNvbnRyb2wgaG93IHRoZSB0ZXJtaW5hbCBkYXRhYmFzZQorCQltYXBzIHRvIHRoZSBmaWxlc3lzdGVtLgorCQlGb3IgZmlsZXN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBtaXhlZC1jYXNlLCB0aGUgbGlicmFyeQorCQl1c2VzIGdlbmVyYXRlIDItY2hhcmFjdGVyIChoZXhhZGVjaW1hbCkgY29kZXMgZm9yIHRoZQorCQlsb3dlci1sZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSB0ZXJtaW5mbyBkYXRhYmFzZQorCisJICAgIDxkdD4tLWVuYWJsZS1yZWVudHJhbnQKKwkgICAgPGRkPmJ1aWxkcyBhIGRpZmZlcmVudCBmbGF2b3Igb2YgdGhlIG5jdXJzZXMgbGlicmFyeSAobmN1cnNlc3QpCisJICAgICAgICB3aGljaCBpbXByb3ZlcyByZWVudHJhbnQgdXNlIG9mIHRoZQorCQlsaWJyYXJ5IGJ5IHJlZHVjaW5nIGdsb2JhbCBhbmQgc3RhdGljIHZhcmlhYmxlcworCSAgICAgICAgKHNlZSB0aGUgIi0td2l0aC1wdGhyZWFkIiBvcHRpb24gZm9yIHRoZSB0aHJlYWRlZCBzdXBwb3J0KS4KKworCSAgICA8ZHQ+LS1lbmFibGUtd2Vhay1zeW1ib2xzCisJICAgIDxkZD51c2Ugd2Vhay1zeW1ib2xzIGZvciBsaW5raW5nIHRvIHRoZSBQT1NJWCB0aHJlYWQgbGlicmFyeSwKKwkgICAgICAgIGFuZCB1c2UgdGhlIHNhbWUgc29uYW1lIGZvciB0aGUgbmN1cnNlcyBzaGFyZWQgbGlicmFyeQorCQlhcyB0aGUgbm9ybWFsIGxpYnJhcnkgKGNhdmVhdDogdGhlIEFCSSBpcyBmb3IgdGhlIHRocmVhZGVkCisJCWxpYnJhcnksIHdoaWNoIG1ha2VzIGdsb2JhbCBkYXRhIGFjY2Vzc2VkIHZpYSBmdW5jdGlvbnMpLgorCisJICAgIDxkdD4tLXdpdGgtcHRocmVhZAorCSAgICA8ZGQ+YnVpbGQgd2l0aCB0aGUgUE9TSVggdGhyZWFkIGxpYnJhcnkgKHRlc3RlZCB3aXRoIEFJWCwKKwkgICAgICAgIExpbnV4LCBGcmVlQlNELCBPcGVuQlNELCBIUFVYLCBJUklYNjQsIFNvbGFyaXMsIFRydTY0KS4KKworCSAgICA8ZHQ+LS13aXRoLXRpY2xpYgorCSAgICA8ZGQ+YnVpbGQvaW5zdGFsbCB0aGUgdGljLXN1cHBvcnQgZnVuY3Rpb25zIGluIGEgc2VwYXJhdGUgbGlicmFyeQorCisgICAgICAgICAgICA8L2RsPgorCisJICA8bGk+aW1wcm92ZWQgb3B0aW9uczoKKwkgICAgPGRsPgorCisJICAgIDxkdD4tLWVuYWJsZS1leHQtY29sb3JzCisJICAgIDxkZD5yZXF1aXJlcyB0aGUgd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbi4KKworCSAgICA8ZHQ+LS13aXRoLWNodHlwZQorCSAgICA8ZGQ+aWdub3JlIG9wdGlvbiB2YWx1ZSAidW5zaWduZWQiIGlzIGFsd2F5cyBhZGRlZCB0bworCQl0aGUgdHlwZSBpbiBjdXJzZXMuaDsgZG8gdGhlIHNhbWUgZm9yIC0td2l0aC1tbWFzay10LgorCisJICAgIDxkdD4tLXdpdGgtZG1hbGxvYworCSAgICA8ZGQ+YnVpbGQtZml4IGZvciByZWRlZmluaXRpb24gb2YgPGNvZGU+c3RybmR1cDwvY29kZT4uCisKKwkgICAgPGR0Pi0td2l0aC1oYXNoZWQtZGIKKwkgICAgPGRkPmFjY2VwdHMgYSBwYXJhbWV0ZXIgd2hpY2ggaXMgdGhlIGluc3RhbGwtcHJlZml4IG9mIGEgZ2l2ZW4KKwkgICAgICAgIEJlcmtlbGV5IERhdGFiYXNlLgorCisJICAgIDxkdD4tLXdpdGgtaGFzaGVkLWRiCisJICAgIDxkZD50aGUgJExJQlMgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIHRoZSBzZWFyY2ggZm9yIHRoZSBkYgorCQlsaWJyYXJ5LgorCisJICAgIDxkdD4tLXdpdGhvdXQtaGFzaGVkLWRiCisJICAgIDxkZD5hc3N1bWVkIHdoZW4gIi0tZGlzYWJsZS1kYXRhYmFzZSIgaXMgdXNlZC4KKworCSAgICA8L2RsPgorCisJPC91bD4KKworCTxsaT5vdGhlciBjb25maWd1cmUvYnVpbGQgaXNzdWVzOgorCSAgPHVsPgorCSAgPGxpPmJ1aWxkLWZpeGVzIGZvciBMeW54T1MKKwkgIDxsaT5tb2RpZnkgc2hhcmVkLWxpYnJhcnkgcnVsZXMgdG8gYWxsb3cgRnJlZUJTRCAzLnggdG8gdXNlIHJwYXRoLgorCSAgPGxpPmJ1aWxkLWZpeCBmb3IgRnJlZUJTRCAiY29udGVtcG9yYXJ5IiBUVFkgaW50ZXJmYWNlLgorCSAgPGxpPmJ1aWxkLWZpeGVzIGZvciBBSVggd2l0aCBsaWJ0b29sLgorCSAgPGxpPmJ1aWxkLWZpeGVzIGZvciBEYXJ3aW4gYW5kIGxpYnRvb2wuCisJICA8bGk+bW9kaWZ5IEJlT1Mtc3BlY2lmaWMgaWZkZWYncyB0byBidWlsZCBvbiBIYWlrdS4KKwkgIDxsaT5jb3JyZWN0ZWQgZ2NjIG9wdGlvbnMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcworCSAgICAgIGFuZCBJUklYNjQuCisJICA8bGk+Y2hhbmdlIHNoYXJlZC1saWJyYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIE9wZW5CU0QsIG1ha2UgcnBhdGggd29yay4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgdXNpbmcgbGlidXRmOCwgZS5nLiwgb24gT3BlbkJTRCAzLjcKKwkgIDxsaT5hZGQgIi1lIiBvcHRpb24gaW4gbmN1cnNlcy9NYWtlZmlsZS5pbiB3aGVuIGdlbmVyYXRpbmcgc291cmNlLWZpbGVzCisJICAgICAgdG8gZm9yY2UgZWFybGllciBleGl0IGlmIHRoZSBidWlsZCBlbnZpcm9ubWVudCBmYWlscyB1bmV4cGVjdGVkbHkuCisJICA8bGk+YWRkIHN1cHBvcnQgZm9yIHNoYXJlZCBsaWJyYXJpZXMgZm9yIFFOWC4KKwkgIDxsaT5jaGFuZ2UgZGVsaW1pdGVyIGluIDxjb2RlPk1LbGliX2dlbi5zaDwvY29kZT4gZnJvbSAnJScgdG8gJ0AnLCB0bworCSAgICAgIGF2b2lkIHN1YnN0aXR1dGlvbiBieSBJQk0geGxjIHRvICcjJyBhcyBwYXJ0IG9mIGl0cyBleHRlbnNpb25zIHRvCisJICAgICAgZGlncmFwaHMuCisJPC91bD4KKworCTxsaT5saWJyYXJ5OgorCTx1bD4KKwk8bGk+cmV3cml0ZSB3cmFwcGVyIGZvciA8Y29kZT53Y3J0b21iKCk8L2NvZGU+LCBtYWtpbmcgaXQgd29yayBvbgorCSAgICBTb2xhcmlzLiAgVGhpcyBpcyB1c2VkIGluIHRoZSBmb3JtIGxpYnJhcnkgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGgKKwkgICAgb2YgdGhlIGJ1ZmZlciBuZWVkZWQgYnkgPGNvZGU+ZmllbGRfYnVmZmVyPC9jb2RlPi4KKwk8bGk+YWRkL3VzZSBjb25maWd1cmUgc2NyaXB0IG1hY3JvIENGX1NJR19BVE9NSUNfVCwgdXNlIHRoZSBjb3JyZXNwb25kaW5nCisJICAgIHR5cGUgZm9yIGRhdGEgbWFuaXB1bGF0ZWQgYnkgc2lnbmFsIGhhbmRsZXJzLgorCTxsaT5zZXQgbG9jYWxlIGluIG1pc2MvbmN1cnNlcy1jb25maWcuaW4gc2luY2UgaXQgdXNlcyBhIHJhbmdlCisJPGxpPmRpc2FibGUgR1BNIG1vdXNlIHN1cHBvcnQgd2hlbiAkVEVSTSBkb2VzIG5vdCBoYXBwZW4gdG8gY29udGFpbgorCSAgICAibGludXgiLCBzaW5jZSBHcG1fT3BlbigpIG5vIGxvbmdlciBsaW1pdHMgaXRzIGFzc2VydGlvbiB0byB0ZXJtaW5hbHMKKwkgICAgdGhhdCBpdCBtaWdodCBoYW5kbGUsIGUuZy4sIHdpdGhpbiAic2NyZWVuIiBpbiB4dGVybS4KKwk8bGk+cmVzZXQgbW91c2UgZmlsZS1kZXNjcmlwdG9yIHdoZW4gdW5sb2FkaW5nIEdQTSBsaWJyYXJ5LgorCTwvdWw+CisKKwk8bGk+dGVzdCBwcm9ncmFtczoKKwk8dWw+CisJPGxpPnVwZGF0ZSB0ZXN0IHByb2dyYW1zIHRvIGJ1aWxkL3dvcmsgd2l0aCB2YXJpb3VzIFVOSVggY3Vyc2VzIGZvcgorCSAgICBjb21wYXJpc29ucy4KKwk8L3VsPgorPC91bD4KKworPEgxPkZlYXR1cmVzIG9mIE5jdXJzZXM8L0gxPgorCitUaGUgbmN1cnNlcyBwYWNrYWdlIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBTVnI0IChTeXN0ZW0gViBSZWxlYXNlIDQpIGN1cnNlczoKKworPFVMPgorPExJPkFsbCAyNTcgb2YgdGhlIFNWcjQgY2FsbHMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIChhbmQgYXJlIGRvY3VtZW50ZWQpLgorPExJPkZ1bGwgc3VwcG9ydCBmb3IgU1ZyNCBjdXJzZXMgZmVhdHVyZXMgaW5jbHVkaW5nIGtleWJvYXJkIG1hcHBpbmcsIGNvbG9yLAorZm9ybXMtZHJhd2luZyB3aXRoIEFDUyBjaGFyYWN0ZXJzLCBhbmQgYXV0b21hdGljIHJlY29nbml0aW9uIG9mIGtleXBhZAorYW5kIGZ1bmN0aW9uIGtleXMuCis8TEk+QW4gZW11bGF0aW9uIG9mIHRoZSBTVnI0IHBhbmVscyBsaWJyYXJ5LCBzdXBwb3J0aW5nCithIHN0YWNrIG9mIHdpbmRvd3Mgd2l0aCBiYWNraW5nIHN0b3JlLCBpcyBpbmNsdWRlZC4KKzxMST5BbiBlbXVsYXRpb24gb2YgdGhlIFNWcjQgbWVudXMgbGlicmFyeSwgc3VwcG9ydGluZworYSB1bmlmb3JtIGJ1dCBmbGV4aWJsZSBpbnRlcmZhY2UgZm9yIG1lbnUgcHJvZ3JhbW1pbmcsIGlzIGluY2x1ZGVkLgorPExJPkFuIGVtdWxhdGlvbiBvZiB0aGUgU1ZyNCBmb3JtIGxpYnJhcnksIHN1cHBvcnRpbmcKK2RhdGEgY29sbGVjdGlvbiB0aHJvdWdoIG9uLXNjcmVlbiBmb3JtcywgaXMgaW5jbHVkZWQuCis8TEk+QmluYXJ5IHRlcm1pbmZvIGVudHJpZXMgZ2VuZXJhdGVkIGJ5IHRoZSBuY3Vyc2VzIHRpYygxKSBpbXBsZW1lbnRhdGlvbgorYXJlIGJpdC1mb3ItYml0LWNvbXBhdGlibGUgd2l0aCB0aGUgZW50cnkgZm9ybWF0IFNWcjQgY3Vyc2VzIHVzZXMuCis8TEk+VGhlIHV0aWxpdGllcyBoYXZlIG9wdGlvbnMgdG8gYWxsb3cgeW91IHRvIGZpbHRlciB0ZXJtaW5mbworZW50cmllcyBmb3IgdXNlIHdpdGggbGVzcyBjYXBhYmxlIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+LzxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4KK3ZlcnNpb25zIHN1Y2ggYXMgdGhlIEhQL1VYIGFuZCBBSVggcG9ydHMuPC9VTD4KKworVGhlIG5jdXJzZXMgcGFja2FnZSBhbHNvIGhhcyBtYW55IHVzZWZ1bCBleHRlbnNpb25zIG92ZXIgU1ZyNDoKKworPFVMPgorPExJPlRoZSBBUEkgaXMgOC1iaXQgY2xlYW4gYW5kIGJhc2UtbGV2ZWwgY29uZm9ybWFudCB3aXRoIHRoZSBYL09QRU4gY3Vyc2VzCitzcGVjaWZpY2F0aW9uLCBYU0kgY3Vyc2VzICh0aGF0IGlzLCBpdCBpbXBsZW1lbnRzIGFsbCBCQVNFIGxldmVsIGZlYXR1cmVzLAorYW5kIG1vc3QgRVhURU5ERUQgZmVhdHVyZXMpLgorSXQgaW5jbHVkZXMgbWFueSBmdW5jdGlvbiBjYWxscyBub3Qgc3VwcG9ydGVkIHVuZGVyIFNWcjQgY3Vyc2VzCisoYnV0IHBvcnRhYmlsaXR5IG9mIGFsbAorY2FsbHMgaXMgZG9jdW1lbnRlZCBzbyB5b3UgY2FuIHVzZSB0aGUgU1ZyNCBzdWJzZXQgb25seSkuCis8TEk+VW5saWtlIFNWcjMgY3Vyc2VzLCBuY3Vyc2VzIGNhbiB3cml0ZSB0byB0aGUgcmlnaHRtb3N0LWJvdHRvbW1vc3QgY29ybmVyCitvZiB0aGUgc2NyZWVuIGlmIHlvdXIgdGVybWluYWwgaGFzIGFuIGluc2VydC1jaGFyYWN0ZXIgY2FwYWJpbGl0eS4KKzxMST5BZGE5NSBhbmQgQysrIGJpbmRpbmdzLgorPExJPlN1cHBvcnQgZm9yIG1vdXNlIGV2ZW50IHJlcG9ydGluZyB3aXRoIFggV2luZG93IHh0ZXJtCithbmQgRnJlZUJTRCBhbmQgT1MvMiBjb25zb2xlIHdpbmRvd3MuCis8TEk+RXh0ZW5kZWQgbW91c2Ugc3VwcG9ydCB2aWEgQWxlc3NhbmRybyBSdWJpbmkncyBncG0gcGFja2FnZS4KKzxMST5UaGUgZnVuY3Rpb24gPENPREU+d3Jlc2l6ZSgpPC9DT0RFPiBhbGxvd3MgeW91IHRvIHJlc2l6ZSB3aW5kb3dzLCBwcmVzZXJ2aW5nCit0aGVpciBkYXRhLgorPExJPlRoZSBmdW5jdGlvbiA8Q09ERT51c2VfZGVmYXVsdF9jb2xvcnMoKTwvQ09ERT4gYWxsb3dzIHlvdSB0bwordXNlIHRoZSB0ZXJtaW5hbCdzIGRlZmF1bHQgY29sb3JzIGZvciB0aGUgZGVmYXVsdCBjb2xvciBwYWlyLAorYWNoaWV2aW5nIHRoZSBlZmZlY3Qgb2YgdHJhbnNwYXJlbnQgY29sb3JzLgorPExJPlRoZSBmdW5jdGlvbnMgPENPREU+a2V5b2soKTwvQ09ERT4KK2FuZCA8Q09ERT5kZWZpbmVfa2V5KCk8L0NPREU+IGFsbG93Cit5b3UgdG8gYmV0dGVyIGNvbnRyb2wgdGhlIHVzZSBvZiBmdW5jdGlvbiBrZXlzLAorZS5nLiwgZGlzYWJsaW5nIHRoZSBuY3Vyc2VzIEtFWV9NT1VTRSwKK29yIGJ5IGRlZmluaW5nIG1vcmUgdGhhbiBvbmUgY29udHJvbCBzZXF1ZW5jZSB0byBtYXAgdG8gYSBnaXZlbiBrZXkgY29kZS4KKzxMST5TdXBwb3J0IGZvciAyNTYtY29sb3IgdGVybWluYWxzLCBzdWNoIGFzIG1vZGVybiB4dGVybSwgd2hlbiBjb25maWd1cmVkCit1c2luZyB0aGUgPGNvZGU+LS1lbmFibGUtZXh0LWNvbG9yczwvY29kZT4gb3B0aW9uLgorPExJPlN1cHBvcnQgZm9yIDE2LWNvbG9yIHRlcm1pbmFscywgc3VjaCBhcyBhaXh0ZXJtIGFuZCBtb2Rlcm4geHRlcm0uCis8TEk+QmV0dGVyIGN1cnNvci1tb3ZlbWVudCBvcHRpbWl6YXRpb24uICBUaGUgcGFja2FnZSBub3cgZmVhdHVyZXMgYQorY3Vyc29yLWxvY2FsLW1vdmVtZW50IGNvbXB1dGF0aW9uIG1vcmUgZWZmaWNpZW50IHRoYW4gZWl0aGVyIEJTRCdzCitvciBTeXN0ZW0gVidzLgorPExJPlN1cGVyIGhhcmR3YXJlIHNjcm9sbGluZyBzdXBwb3J0LiAgVGhlIHNjcmVlbi11cGRhdGUgY29kZSBpbmNvcnBvcmF0ZXMKK2Egbm92ZWwsIHNpbXBsZSwgYW5kIGNoZWFwIGFsZ29yaXRobSB0aGF0IGVuYWJsZXMgaXQgdG8gbWFrZSBvcHRpbWFsCit1c2Ugb2YgaGFyZHdhcmUgc2Nyb2xsaW5nLCBsaW5lLWluc2VydGlvbiwgYW5kIGxpbmUtZGVsZXRpb24KK2ZvciBzY3JlZW4tbGluZSBtb3ZlbWVudHMuICBUaGlzIGFsZ29yaXRobSBpcyBtb3JlIHBvd2VyZnVsIHRoYW4KK3RoZSA0LjRCU0QgY3Vyc2VzIHF1aWNrY2goKSByb3V0aW5lLgorPExJPlJlYWwgc3VwcG9ydCBmb3IgdGVybWluYWxzIHdpdGggdGhlIG1hZ2ljLWNvb2tpZSBnbGl0Y2guICBUaGUKK3NjcmVlbi11cGRhdGUgY29kZSB3aWxsIHJlZnJhaW4gZnJvbSBkcmF3aW5nIGEgaGlnaGxpZ2h0IGlmIHRoZSBtYWdpYy0KK2Nvb2tpZSB1bmF0dHJpYnV0ZWQgc3BhY2VzIHJlcXVpcmVkIGp1c3QgYmVmb3JlIHRoZSBiZWdpbm5pbmcgYW5kCithZnRlciB0aGUgZW5kIHdvdWxkIHN0ZXAgb24gYSBub24tc3BhY2UgY2hhcmFjdGVyLiAgSXQgd2lsbAorYXV0b21hdGljYWxseSBzaGlmdCBoaWdobGlnaHQgYm91bmRhcmllcyB3aGVuIGRvaW5nIHNvIHdvdWxkIG1ha2UgaXQKK3Bvc3NpYmxlIHRvIGRyYXcgdGhlIGhpZ2hsaWdodCB3aXRob3V0IGNoYW5naW5nIHRoZSB2aXN1YWwgYXBwZWFyYW5jZQorb2YgdGhlIHNjcmVlbi4KKzxMST5JdCBpcyBwb3NzaWJsZSB0byBnZW5lcmF0ZSB0aGUgbGlicmFyeSB3aXRoIGEgbGlzdCBvZiBwcmUtbG9hZGVkCitmYWxsYmFjayBlbnRyaWVzIGxpbmtlZCB0byBpdCBzbyB0aGF0IGl0IGNhbiBzZXJ2ZSB0aG9zZSB0ZXJtaW5hbCB0eXBlcyBldmVuCit3aGVuIG5vIHRlcm1pbmZvIHRyZWUgb3IgdGVybWNhcCBmaWxlIGlzIGFjY2Vzc2libGUgKHRoaXMgbWF5IGJlIHVzZWZ1bAorZm9yIHN1cHBvcnQgb2Ygc2NyZWVuLW9yaWVudGVkIHByb2dyYW1zIHRoYXQgbXVzdCBydW4gaW4gc2luZ2xlLXVzZXIgbW9kZSkuCis8TEk+VGhlIHRpYygxKS9jYXB0b2luZm8gdXRpbGl0eSBwcm92aWRlZCB3aXRoIG5jdXJzZXMgaGFzIHRoZQorYWJpbGl0eSB0byB0cmFuc2xhdGUgbWFueSB0ZXJtY2FwcyBmcm9tIHRoZSBYRU5JWCwgSUJNIGFuZAorQVQmYW1wO1QgZXh0ZW5zaW9uIHNldHMuCis8TEk+QSBCU0QtbGlrZSB0c2V0KDEpIHV0aWxpdHkgaXMgcHJvdmlkZWQuCis8TEk+VGhlIG5jdXJzZXMgbGlicmFyeSBhbmQgdXRpbGl0aWVzIHdpbGwgYXV0b21hdGljYWxseSByZWFkIHRlcm1pbmZvCitlbnRyaWVzIGZyb20gJEhPTUUvLnRlcm1pbmZvIGlmIGl0IGV4aXN0cywgYW5kIGNvbXBpbGUgdG8gdGhhdCBkaXJlY3RvcnkKK2lmIGl0IGV4aXN0cyBhbmQgdGhlIHVzZXIgaGFzIG5vIHdyaXRlIGFjY2VzcyB0byB0aGUgc3lzdGVtIGRpcmVjdG9yeS4KK1RoaXMgZmVhdHVyZSBtYWtlcyBpdCBlYXNpZXIgZm9yIHVzZXJzIHRvIGhhdmUgcGVyc29uYWwgdGVybWluZm8gZW50cmllcword2l0aG91dCBnaXZpbmcgdXAgYWNjZXNzIHRvIHRoZSBzeXN0ZW0gdGVybWluZm8gZGlyZWN0b3J5LgorPExJPllvdSBtYXkgc3BlY2lmeSBhIHBhdGggb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBjb21waWxlZAorZGVzY3JpcHRpb25zIHdpdGggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRFUk1JTkZPX0RJUlMgKHRoaXMKK2dlbmVyYWxpemVzIHRoZSBmZWF0dXJlIHByb3ZpZGVkIGJ5IFRFUk1JTkZPIHVuZGVyIHN0b2NrIFN5c3RlbSBWLikKKzxMST5JbiB0ZXJtaW5mbyBzb3VyY2UgZmlsZXMsIHVzZSBjYXBhYmlsaXRpZXMgbWF5IHJlZmVyIG5vdCBqdXN0IHRvCitvdGhlciBlbnRyaWVzIGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlIChhcyBpbiBTeXN0ZW0gVikgYnV0IGFsc28gdG8KK2NvbXBpbGVkIGVudHJpZXMgaW4gZWl0aGVyIHRoZSBzeXN0ZW0gdGVybWluZm8gZGlyZWN0b3J5IG9yIHRoZSB1c2VyJ3MKKyRIT01FLy50ZXJtaW5mbyBkaXJlY3RvcnkuCis8TEk+QSBzY3JpcHQgKDxTVFJPTkc+Y2FwY29udmVydDwvU1RST05HPikgaXMgcHJvdmlkZWQgdG8gaGVscCBCU0QgdXNlcnMKK3RyYW5zaXRpb24gZnJvbSB0ZXJtY2FwIHRvIHRlcm1pbmZvLiAgSXQgZ2F0aGVycyB0aGUgaW5mb3JtYXRpb24gaW4gYQorVEVSTUNBUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQvb3IgYSB+Ly50ZXJtY2FwIGxvY2FsIGVudHJpZXMgZmlsZQorYW5kIGNvbnZlcnRzIGl0IHRvIGFuIGVxdWl2YWxlbnQgbG9jYWwgdGVybWluZm8gdHJlZSB1bmRlciAkSE9NRS8udGVybWluZm8uCis8TEk+QXV0b21hdGljIGZhbGxiYWNrIHRvIHRoZSAvZXRjL3Rlcm1jYXAgZmlsZSBjYW4gYmUgY29tcGlsZWQgaW4KK3doZW4gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkIGEgdGVybWluZm8gdHJlZS4gIFRoaXMgZmVhdHVyZSBpcyBuZWl0aGVyCitmYXN0IG5vciBjaGVhcCwgeW91IGRvbid0IHdhbnQgdG8gdXNlIGl0IHVubGVzcyB5b3UgaGF2ZSB0bywKK2J1dCBpdCdzIHRoZXJlLgorPExJPlRoZSB0YWJsZS1vZi1lbnRyaWVzIHV0aWxpdHkgPFNUUk9ORz50b2U8L1NUUk9ORz4gbWFrZXMgaXQgZWFzeSBmb3IgdXNlcnMgdG8KK3NlZSBleGFjdGx5IHdoYXQgdGVybWluYWwgdHlwZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLgorPExJPlRoZSBsaWJyYXJ5IG1lZXRzIHRoZSBYU0kgcmVxdWlyZW1lbnQgdGhhdCBldmVyeSBtYWNybyBlbnRyeQorcG9pbnQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gd2hpY2ggbWF5IGJlIGxpbmtlZCAoYW5kIHdpbGwgYmUKK3Byb3RvdHlwZS1jaGVja2VkKSBpZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpcyBkaXNhYmxlZCB3aXRoCis8Q09ERT4jdW5kZWY8L0NPREU+LgorPExJPkFuIEhUTUwgIkludHJvZHVjdGlvbiB0byBQcm9ncmFtbWluZyB3aXRoIE5DVVJTRVMiIGRvY3VtZW50IHByb3ZpZGVzCithIG5hcnJhdGl2ZSBpbnRyb2R1Y3Rpb24gdG8gdGhlIGN1cnNlcyBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCis8L1VMPgorCis8SDE+U3RhdGUgb2YgdGhlIFBhY2thZ2U8L0gxPgorCitOdW1lcm91cyBidWdzIHByZXNlbnQgaW4gZWFybGllciB2ZXJzaW9ucyBoYXZlIGJlZW4gZml4ZWQ7IHRoZQorbGlicmFyeSBpcyBmYXIgbW9yZSByZWxpYWJsZSB0aGFuIGl0IHVzZWQgdG8gYmUuICBCb3VuZHMgY2hlY2tpbmcgaW4gbWFueQorYGRhbmdlcm91cycgZW50cnkgcG9pbnRzIGhhcyBiZWVuIGltcHJvdmVkLiAgVGhlIGNvZGUgaXMgbm93IHR5cGUtc2FmZQorYWNjb3JkaW5nIHRvIGdjYyAtV2FsbC4gIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGNoZWNrZWQgZm9yIG1hbGxvYyBsZWFrcyBhbmQKK2FyZW5hIGNvcnJ1cHRpb24gYnkgdGhlIFB1cmlmeSBtZW1vcnktYWxsb2NhdGlvbiB0ZXN0ZXIuPFA+CisKK1RoZSBuY3Vyc2VzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIHdpdGggYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zCitpbmNsdWRpbmcgKHZlcnNpb25zIHN0YXJ0aW5nIHdpdGggdGhvc2Ugbm90ZWQpOgorPERMPgorPERUPiBjZGsKKzxERD4gQ3Vyc2VzIERldmVsb3BtZW50IEtpdAorPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2Nkay8iPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9jZGsvPC9BPgorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy52ZXh1cy5jYS9wcm9kdWN0cy9DREsvIj5odHRwOi8vd3d3LnZleHVzLmNhL3Byb2R1Y3RzL0NESy88L2E+Cis8RFQ+IGRlZAorPEREPiBkaXJlY3RvcnktZWRpdG9yCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGVkLyI+aHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RlZC88L0E+Cis8RFQ+IGRpYWxvZworPEREPiB0aGUgdW5kZXJseWluZyBhcHBsaWNhdGlvbiB1c2VkIGluIFNsYWNrd2FyZSdzIHNldHVwLCBhbmQgdGhlIGJhc2lzCitmb3Igc2ltaWxhciBhcHBsaWNhdGlvbnMgb24gR05VL0xpbnV4LgorPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RpYWxvZy8iPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWFsb2cvPC9BPgorPERUPiBseW54Cis8REQ+IHRoZSBjaGFyYWN0ZXItc2NyZWVuIFdXVyBicm93c2VyCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vbHlueC5pc2Mub3JnL3JlbGVhc2UvIj5odHRwOi8vbHlueC5pc2Mub3JnL3JlbGVhc2UvPC9BPgorPERUPiBNaWRuaWdodCBDb21tYW5kZXIKKzxERD4gZmlsZSBtYW5hZ2VyCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vd3d3LmliaWJsaW8ub3JnL21jLyI+aHR0cDovL3d3dy5pYmlibGlvLm9yZy9tYy88L0E+Cis8RFQ+IG11dHQKKzxERD4gbWFpbCB1dGlsaXR5Cis8YnI+Cis8QSBIUkVGPSJodHRwOi8vd3d3Lm11dHQub3JnLyI+aHR0cDovL3d3dy5tdXR0Lm9yZy88L0E+Cis8RFQ+IG5jZnRwCis8REQ+IGZpbGUtdHJhbnNmZXIgdXRpbGl0eQorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5uY2Z0cC5jb20vIj5odHRwOi8vd3d3Lm5jZnRwLmNvbS88L0E+Cis8RFQ+IG52aQorPEREPiBOZXcgdmkgdmVyc2lvbnMgMS41MCBhcmUgYWJsZSB0byB1c2UgbmN1cnNlcyB2ZXJzaW9ucyAxLjkuNyBhbmQgbGF0ZXIuCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvIj5odHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvPC9BPgorPGJyPgorPERUPiBwaW5mbworPEREPiBMeW54LWxpa2UgaW5mbyBicm93c2VyLgorPEEgSFJFRj0iaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9waW5mby8iPmh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvcGluZm8vPC9BPgorPERUPiB0aW4KKzxERD4gbmV3c3JlYWRlciwgc3VwcG9ydGluZyBjb2xvciwgTUlNRQorPEEgSFJFRj0iaHR0cDovL3d3dy50aW4ub3JnLyI+aHR0cDovL3d3dy50aW4ub3JnLzwvQT4KKzwvREw+CithcyB3ZWxsIGFzIHNvbWUgdGhhdCB1c2UgbmN1cnNlcyBmb3IgdGhlIHRlcm1pbmZvIHN1cHBvcnQgYWxvbmU6Cis8REw+Cis8RFQ+IG1pbmljb20KKzxERD4gdGVybWluYWwgZW11bGF0b3IKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9taW5pY29tLyI+CitodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvbWluaWNvbS88L0E+Cis8RFQ+IHZpbGUKKzxERD4gdmktbGlrZS1lbWFjcworPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3ZpbGUvIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvdmlsZS88L0E+Cis8L0RMPgorPFA+CisKK1RoZSBuY3Vyc2VzIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIHNlbGVjdGlvbiBvZiB0ZXN0IHByb2dyYW1zIChpbmNsdWRpbmcKK2EgZmV3IGdhbWVzKS4KKworPEgyPldobydzIFdobyBhbmQgV2hhdCdzIFdoYXQ8L0gyPgorCitaZXlkIEJlbi1IYWxpbQorc3RhcnRlZCBpdCBmcm9tIGEgcHJldmlvdXMgcGFja2FnZSBwY3Vyc2VzLCB3cml0dGVuIGJ5IFBhdmVsIEN1cnRpcy4KK0VyaWMgUy4gUmF5bW9uZAorY29udGludWVkIGRldmVsb3BtZW50LgorSiZ1dW1sO3JnZW4gUGZlaWZlciB3cm90ZSBtb3N0IG9mIHRoZSBmb3JtIGFuZCBtZW51IGxpYnJhcmllcy4KK09uZ29pbmcgd29yayBpcyBiZWluZyBkb25lIGJ5Cis8QSBIUkVGPSJtYWlsdG86ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0Ij5UaG9tYXMgRGlja2V5PC9BPi4KK1Rob21hcyBEaWNrZXkKK2FjdHMgYXMgdGhlIG1haW50YWluZXIgZm9yIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCit3aGljaCBob2xkcyB0aGUgY29weXJpZ2h0IG9uIG5jdXJzZXMuCitDb250YWN0IHRoZSBjdXJyZW50IG1haW50YWluZXJzIGF0Cis8QSBIUkVGPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+YnVnLW5jdXJzZXNAZ251Lm9yZzwvQT4uCis8UD4KKworVG8gam9pbiB0aGUgbmN1cnNlcyBtYWlsaW5nIGxpc3QsIHBsZWFzZSB3cml0ZSBlbWFpbCB0bworPENPREU+YnVnLW5jdXJzZXMtcmVxdWVzdEBnbnUub3JnPC9DT0RFPiBjb250YWluaW5nIHRoZSBsaW5lOgorPFBSRT4KKyAgICAgICAgICAgICBzdWJzY3JpYmUgJmx0O25hbWUmZ3Q7QCZsdDtob3N0LmRvbWFpbiZndDsKKzwvUFJFPgorCitUaGlzIGxpc3QgaXMgb3BlbiB0byBhbnlvbmUgaW50ZXJlc3RlZCBpbiBoZWxwaW5nIHdpdGggdGhlIGRldmVsb3BtZW50IGFuZAordGVzdGluZyBvZiB0aGlzIHBhY2thZ2UuPFA+CisKK0JldGEgdmVyc2lvbnMgb2YgbmN1cnNlcyBhbmQgcGF0Y2hlcyB0byB0aGUgY3VycmVudCByZWxlYXNlIGFyZSBtYWRlIGF2YWlsYWJsZSBhdAorPEEgSFJFRj0iZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy8iPmZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvPC9BPiZuYnNwOy4KKworPEgyPkZ1dHVyZSBQbGFuczwvSDI+Cis8VUw+Cis8TEk+RXh0ZW5kZWQtbGV2ZWwgWFBHNCBjb25mb3JtYW5jZSwgd2l0aCBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0LgorPExJPlBvcnRzIHRvIG1vcmUgc3lzdGVtcywgaW5jbHVkaW5nIERPUyBhbmQgV2luZG93cy4KKzwvVUw+CitXZSBuZWVkIHBlb3BsZSB0byBoZWxwIHdpdGggdGhlc2UgcHJvamVjdHMuICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gd29ya2luZworb24gdGhlbSwgcGxlYXNlIGpvaW4gdGhlIG5jdXJzZXMgbGlzdC4KKworPEgyPk90aGVyIFJlbGF0ZWQgUmVzb3VyY2VzPC9IMj4KKworVGhlIGRpc3RyaWJ1dGlvbiBwcm92aWRlcyBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIHRlcm1pbmZvLWZvcm1hdAordGVybWluYWwgZGVzY3JpcHRpb24gZmlsZSBvbmNlIG1haW50YWluZWQgYnkKKzxBIEhSRUY9Imh0dHA6Ly93d3cuY2F0Yi5vcmcvfmVzci90ZXJtaW5mby8iPkVyaWMgUmF5bW9uZDwvQT4mbmJzcDsuCitVbmxpa2UgdGhlIG9sZGVyIHZlcnNpb24sIHRoZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbyBkYXRhIGFyZSBwcm92aWRlZAoraW4gdGhlIHNhbWUgZmlsZSwgYW5kIHByb3ZpZGVzIHNldmVyYWwgdXNlci1kZWZpbmFibGUgZXh0ZW5zaW9ucworYmV5b25kIHRoZSBYL09wZW4gc3BlY2lmaWNhdGlvbi48UD4KKworWW91IGNhbiBmaW5kIGxvdHMgb2YgaW5mb3JtYXRpb24gb24gdGVybWluYWwtcmVsYXRlZCB0b3BpY3MKK25vdCBjb3ZlcmVkIGluIHRoZSB0ZXJtaW5mbyBmaWxlIGF0Cis8QSBIUkVGPSJodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnNodWZvcmQvdGVybWluYWxfaW5kZXguaHRtbCI+UmljaGFyZCBTaHVmb3JkJ3MKK2FyY2hpdmU8L0E+Jm5ic3A7LgorPC9CT0RZPgorPC9IVE1MPgorPCEtLQorIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpodG1sCisjIGNhc2UtZm9sZC1zZWFyY2g6bmlsCisjIGZpbGwtY29sdW1uOjcwCisjIEVuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL01ha2VmaWxlLmluIGIvbmN1cnNlcy01LjcvYysrL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDU4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jKysvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyMzkgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuODQgMjAwNy8wNC8yOCAxNToyOToxMiB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisjCisjICBTaW1wbGUgbWFrZWZpbGUgZm9yIGMrKyB3aW5kb3cgY2xhc3MgZGVtbworCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCisKK0NGX01GTEFHUyAJPSBAY2ZfY3ZfbWFrZWZsYWdzQAorQFNFVF9NQUtFQAoreAkJPSBARVhFRVhUQAorbwkJPSAuQE9CSkVYVEAKKworTU9ERUwJCT0gLi4vQERGVF9PQkpfU1VCRElSQAorREVTVERJUgkJPSBAREVTVERJUkAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2xpYmRpcgkJPSBAbGliZGlyQAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorCitMSUJUT09MCQk9IEBMSUJUT09MX0NYWEAKK0xJQlRPT0xfQ0xFQU4JPSBATElCX0NMRUFOQAorTElCVE9PTF9DT01QSUxFCT0gQExJQl9DT01QSUxFQAorTElCVE9PTF9MSU5LCT0gQExJQl9MSU5LQAorTElCVE9PTF9JTlNUQUxMCT0gQExJQl9JTlNUQUxMQAorTElCVE9PTF9VTklOU1RBTEwgPSBATElCX1VOSU5TVEFMTEAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfTElCCT0gQElOU1RBTExAIEBJTlNUQUxMX0xJQkAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK0FSCQk9IEBBUkAKK0FSX09QVFMJCT0gQEFSX09QVFNACisKK0NYWF9BUgkJPSBAQ1hYX0FSQAorQ1hYX0FSX09QVFMJPSBAQ1hYX0FSX09QVFNACitSQU5MSUIJCT0gQExJQl9QUkVQQAorCitDWFgJCT0gQENYWEAKK0NQUAkJPSBAQ1hYQ1BQQAorQ1hYRkxBR1MJPSBAQ1hYRkxBR1NAIEBFWFRSQV9DWFhGTEFHU0AKK0NYWExJQlMJCT0gQENYWExJQlNACisKK0lOQ0RJUgkJPSAuLi9pbmNsdWRlCitDUFBGTEFHUwk9IC1JLi4vYysrIC1JJChJTkNESVIpIC1JJChzcmNkaXIpIC1ESEFWRV9DT05GSUdfSCBAQ1BQRkxBR1NACisKK0NDCQk9ICR7Q1hYfQorQ0NGTEFHUwkJPSAkKENQUEZMQUdTKSAkKENYWEZMQUdTKQorCitDRkxBR1NfTElCVE9PTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDWFhfR19PUFRAIC1EVFJBQ0UKK0NGTEFHU19QUk9GSUxFCT0gJChDQ0ZMQUdTKSAtcGcKK0NGTEFHU19TSEFSRUQJPSAkKENDRkxBR1MpIEBDQ19TSEFSRURfT1BUU0AKKworQ0ZMQUdTX0RFRkFVTFQJPSAkKENGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK05DVVJTRVNfTUFKT1IJPSBATkNVUlNFU19NQUpPUkAKK05DVVJTRVNfTUlOT1IJPSBATkNVUlNFU19NSU5PUkAKK1JFTF9WRVJTSU9OICAgICA9IEBjZl9jdl9yZWxfdmVyc2lvbkAKK0FCSV9WRVJTSU9OCT0gQGNmX2N2X2FiaV92ZXJzaW9uQAorCitMT0NBTF9MSUJESVIJPSBAdG9wX2J1aWxkZGlyQC9saWIKKworTElOSwkJPSBATElOS19QUk9HU0AgJChMSUJUT09MX0xJTkspIEBDWFhMREZMQUdTQAorU0hMSUJfRElSUwk9IC1MLi4vbGliCitTSExJQl9MSVNUCT0gJChTSExJQl9ESVJTKSAtbG5jdXJzZXNATElCX1NVRkZJWEAgQFNITElCX0xJU1RACisKK0xJQlJPT1QJCT0gbmN1cnNlcysrCisKK0xJQk5BTUVfTElCVE9PTAk9IEBMSUJfUFJFRklYQCQoTElCUk9PVClATElCX1NVRkZJWEAubGEKK0xJQk5BTUVfTk9STUFMCT0gQExJQl9QUkVGSVhAJChMSUJST09UKUBMSUJfU1VGRklYQC5hCitMSUJOQU1FCQk9IEBMSUJfUFJFRklYQCQoTElCUk9PVClAQ1hYX0xJQl9TVUZGSVhACisKK0xJTktfRkxBR1MJPSBARVhUUkFfTERGTEFHU0AgLUwuLi9saWIgLWwkKExJQlJPT1QpQExJQl9TVUZGSVhACisKK0xJTktfTElCVE9PTAk9IEBFWFRSQV9MREZMQUdTQCAtTC4uL2xpYiAuLi9saWIvJChMSUJOQU1FKQorTElOS19OT1JNQUwJPSAkKExJTktfRkxBR1MpCitMSU5LX0RFQlVHCT0gJChMSU5LX0ZMQUdTKQorTElOS19QUk9GSUxFCT0gJChMSU5LX0ZMQUdTKQorTElOS19TSEFSRUQJPSAkKExJTktfRkxBR1MpCisKK1RFU1RfQVJHUwk9IEBMREZMQUdTX1NUQVRJQ0AgQFRFU1RfQVJHU0AgQExERkxBR1NfU0hBUkVEQCAKKworTERGTEFHUwkJPSAkKFRFU1RfQVJHUykgQExERkxBR1NAIFwKKwlATERfTU9ERUxAIEBMSUJTQCBATE9DQUxfTERGTEFHU0AgJChDWFhMSUJTKQorCitMREZMQUdTX0xJQlRPT0wJPSAkKExERkxBR1MpICQoQ0ZMQUdTX0xJQlRPT0wpCitMREZMQUdTX05PUk1BTAk9ICQoTERGTEFHUykgJChDRkxBR1NfTk9STUFMKQorTERGTEFHU19ERUJVRwk9ICQoTERGTEFHUykgJChDRkxBR1NfREVCVUcpCitMREZMQUdTX1BST0ZJTEUJPSAkKExERkxBR1MpICQoQ0ZMQUdTX1BST0ZJTEUpCitMREZMQUdTX1NIQVJFRAk9ICQoTERGTEFHUykgJChDRkxBR1NfU0hBUkVEKSBATERfU0hBUkVEX09QVFNACisKK0xERkxBR1NfREVGQVVMVAk9ICQoTElOS19AREZUX1VQUl9NT0RFTEApICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK0FVVE9fU1JDCT0gXAorCQlldGlwLmgKKworYWxsIFwKK2xpYnMgOjoJCSQoQVVUT19TUkMpIC4uL2xpYi8kKExJQk5BTUUpCisKK2FsbCA6OgkJZGVtbyR4CisKK3NvdXJjZXMgOgkkKEFVVE9fU1JDKQorCitkZXBlbmQgOgorCit0YWdzOgorCWN0YWdzICouW2hdICouY2MKKworIyBCdWlsZCBhIGNvbnZlbnRpb25hbCBsaWJyYXJ5IGZvciBpbnN0YWxsaW5nLCBzaW5jZSBhIHNoYXJlZCBsaWJyYXJ5IHdvdWxkCisjIHB1bGwgaW4gYWxsIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcmllcyAocGFuZWwsIG1lbnUsIGZvcm0sIG5jdXJzZXMpIGFzIGRpcmVjdAorIyBkZXBlbmRlbmNpZXMuCitMSUJfT0JKUyA9IFwKKwkkKE1PREVMKS9jdXJzZXNmJG8gXAorCSQoTU9ERUwpL2N1cnNlc20kbyBcCisJJChNT0RFTCkvY3Vyc2VzdyRvIFwKKwkkKE1PREVMKS9jdXJzZXNwYWQkbyBcCisJJChNT0RFTCkvY3Vyc2VzcCRvIFwKKwkkKE1PREVMKS9jdXJzc2xrJG8gXAorCSQoTU9ERUwpL2N1cnNlc2FwcCRvIFwKKwkkKE1PREVMKS9jdXJzZXNtYWluJG8KKworLi4vbGliLyQoTElCTkFNRV9OT1JNQUwpIDogJChMSUJfT0JKUykKKwkkKENYWF9BUikgJChDWFhfQVJfT1BUUykgJEAgJD8KKwkkKFJBTkxJQikgJEAKKworLi4vbGliLyQoTElCTkFNRV9MSUJUT09MKSA6ICQoTElCX09CSlMpCisJY2QgLi4vbGliICYmICQoTElCVE9PTF9MSU5LKSAkKENYWCkgJChDWFhGTEFHUykgXAorCQktbyAkKExJQk5BTUUpICQoTElCX09CSlM6JG89LmxvKSBcCisJCS1ycGF0aCAkKElOU1RBTExfUFJFRklYKSQobGliZGlyKSBcCisJCS12ZXJzaW9uLWluZm8gJChOQ1VSU0VTX01BSk9SKTokKE5DVVJTRVNfTUlOT1IpICQoU0hMSUJfTElTVCkKKworT0JKU19ERU1PID0gJChNT0RFTCkvZGVtbyRvCisKKyQoTU9ERUwpL2RlbW8kbyA6ICQoc3JjZGlyKS9kZW1vLmNjIFwKKwkkKGN1cnNlc2ZfaCkgJChjdXJzZXNtX2gpICQoY3Vyc2VzYXBwX2gpCisKK2RlbW8keDoJJChPQkpTX0RFTU8pIFwKKwkuLi9saWIvJChMSUJOQU1FKSAgXAorCUBURVNUX0RFUFNACisJQEVDSE9fTElOS0AgJChMSU5LKSAtbyAkQCAkKE9CSlNfREVNTykgJChMREZMQUdTX0RFRkFVTFQpCisKK2V0aXAuaDoJJChzcmNkaXIpL2V0aXAuaC5pbiAkKHNyY2RpcikvZWRpdF9jZmcuc2gKKwljcCAkKHNyY2RpcikvZXRpcC5oLmluICRACisJc2ggJChzcmNkaXIpL2VkaXRfY2ZnLnNoIC4uL2luY2x1ZGUvbmN1cnNlc19jZmcuaCAkQAorCiskKERFU1RESVIpJChsaWJkaXIpIDoKKwlzaCAkKHNyY2RpcikvLi4vbWtkaXJzLnNoICRACisKK2luc3RhbGwgXAoraW5zdGFsbC5saWJzOjogLi4vbGliLyQoTElCTkFNRSkgJChERVNURElSKSQobGliZGlyKQorCSQoTElCVE9PTF9JTlNUQUxMKSAkKElOU1RBTExfTElCKSAuLi9saWIvJChMSUJOQU1FKSAkKERFU1RESVIpJChsaWJkaXIpLyQoTElCTkFNRSkKKwordW5pbnN0YWxsIFwKK3VuaW5zdGFsbC5saWJzOjoKKwktJChMSUJUT09MX1VOSU5TVEFMTCkgcm0gLWYgJChERVNURElSKSQobGliZGlyKS8kKExJQk5BTUUpCisKK21vc3RseWNsZWFuIDo6CisJLXJtIC1mIGNvcmUgdGFncyBUQUdTICp+ICouYmFrICouaSAqLmlpICoubG4gKi5hdGFjIHRyYWNlCisKK2NsZWFuIDo6IG1vc3RseWNsZWFuCisJLXNoIC1jICJpZiB0ZXN0IC1uICckeCcgOyB0aGVuICQoTUFLRSkgY2xlYW4geD0nJzsgZmkiCisJLXJtIC1yZiAkKE1PREVMKS9TdW5XU19jYWNoZQorCS0kKExJQlRPT0xfQ0xFQU4pIHJtIC1mIGRlbW8keCAkKEFVVE9fU1JDKSAuLi9saWIvJChMSUJOQU1FKSAkKExJQl9PQkpTKSAkKE9CSlNfREVNTykKKwktcm0gLXJmIC5saWJzCisKK2Rpc3RjbGVhbiA6OiBjbGVhbgorCS1ybSAtZiBNYWtlZmlsZQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY3Vyc2Vzd19oCT0gJChzcmNkaXIpL2N1cnNlc3cuaCBcCisJCSAgZXRpcC5oIFwKKwkJICAkKElOQ0RJUikvY3Vyc2VzLmgKKworY3Vyc2VzcF9oCT0gJChzcmNkaXIpL2N1cnNlc3AuaCBcCisJCSAgJChjdXJzZXN3X2gpIFwKKwkJICAkKElOQ0RJUikvcGFuZWwuaAorCitjdXJzZXNmX2gJPSAkKHNyY2RpcikvY3Vyc2VzZi5oIFwKKwkJICAkKGN1cnNlc3BfaCkgXAorCQkgICQoSU5DRElSKS9mb3JtLmgKKworY3Vyc2VzbV9oCT0gJChzcmNkaXIpL2N1cnNlc20uaCBcCisJCSAgJChjdXJzZXNwX2gpIFwKKwkJICAkKElOQ0RJUikvbWVudS5oCisKK2N1cnNzbGtfaAk9ICQoc3JjZGlyKS9jdXJzc2xrLmggXAorCQkgICQoY3Vyc2Vzd19oKQorCitjdXJzZXNhcHBfaAk9ICQoc3JjZGlyKS9jdXJzZXNhcHAuaCBcCisJCSAgJChjdXJzc2xrX2gpCisKKyQoSU5DRElSKS9mb3JtLmggOgorCWNkIC4uL2Zvcm0gJiYgJChNQUtFKSAkQAorCiskKElOQ0RJUikvbWVudS5oIDoKKwljZCAuLi9tZW51ICYmICQoTUFLRSkgJEAKKworJChJTkNESVIpL3BhbmVsLmggOgorCWNkIC4uL3BhbmVsICYmICQoTUFLRSkgJEAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL05FV1MgYi9uY3Vyc2VzLTUuNy9jKysvTkVXUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQ4OGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL05FV1MKQEAgLTAsMCArMSw3MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBORVdTLHYgMS40IDIwMDYvMDQvMjIgMjI6MTk6MzcgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGEgbG9nIG9mIGNoYW5nZXMgdGhhdCB0aGUgbmN1cnNlcyBDKysgYmluZGluZyBoYXMgZ29uZQordGhyb3VnaCBzdGFydGluZyB3aXRoIHRoZSBpbnRlZ3JhdGlvbiBvZiBtZW51IGFuZCBmb3JtcyBpbnRlZ3JhdGlvbgoraW50byB0aGUgYmluZGluZy4KKworOTkwNzMxICArIEltcHJvdmUgc3VwcG9ydCBmb3IgcGFkcy4gQSB2aWV3cG9ydCB3aW5kb3cgbWF5IG5vdyBiZSBhZGRlZCB0bworICAgICAgICAgIGEgcGFkLiBJdCB3aWxsIHRoZW4gYmUgcG9zc2libGUgdG8gdXNlIGEgYnVpbHRpbiBwYW5uaW5nIG1lY2hhbmlzbQorICAgICAgICAgIHRvIHZpZXcgdGhlIHBhZC4KKworOTcwOTA4CSsgSW1wcm92ZSBOQ3Vyc2VzV2luZG93IGNsYXNzOiBhZGRlZCBhZGRpdGlvbmFsIG1ldGhvZHMgdG8KKwkgIGNvdmVyIG1vcmUgbmN1cnNlcyBmdW5jdGlvbmFsaXR5LiBNYWtlIHJlZnJlc2goKSBhbmQgCisJICBub3V0cmVmcmVzaCgpIHZpcnR1YWwgbWVtYmVycyB0byBhbGxvdyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24KKwkgIGluIHRoZSBOQ3Vyc2VzUGFuZWwgY2xhc3MuCisJKyBDQVVUSU9OOiBjaGFuZ2VkIG9yZGVyIG9mIHBhcmFtZXRlcnMgaW4gdmxpbmUoKSBhbmQgaGxpbmUoKSBvZgorCSAgTkN1cnNlc1dpbmRvdyBjbGFzcy4KKwkrIE1ha2UgcmVmcmVzaCgpIGluIE5DdXJzZXNQYW5lbCBub24tc3RhdGljLCBpdCBpcyBub3cgYQorCSAgcmVpbXBsZW1lbnRhdGlvbiAgb2YgcmVmcmVzaCgpIGluIHRoZSBiYXNlIGNsYXNzLiBBZGRlZCAKKwkgIG5vdXRyZWZyZXNoKCkgdG8gTkN1cnNlc1BhbmVsLgorCSsgQWRkZWQgTkN1cnNlc0Zvcm0gYW5kIHJlbGF0ZWQgY2xhc3NlcyB0byBzdXBwb3J0IGxpYmZvcm0KKwkgIGZ1bmN0aW9uYWxpdHkuCisJKyBNb3ZlZCBtb3N0IG9mIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCBzdHVmZiBmcm9tIGN1cnNlc3cuaCB0bworCSAgZXRpcC5oCisJKyBBZGRlZCBOQ3Vyc2VzQXBwbGljYXRpb24gY2xhc3MgdG8gc3VwcG9ydCBlYXN5IGNvbmZpZ3VyYXRpb24gCisJICBvZiBtZW51IGFuZCBmb3JtcyByZWxhdGVkIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyByaXBwZWQgb2YKKwkgIHRpdGxlIGxpbmVzIGFuZCBTb2Z0LUxhYmVsLUtleXMgZm9yIGFuIGFwcGxpY2F0aW9uLgorCSsgU3VwcG9ydCBvZiBBdXRvLUNsZWFudXAgZm9yIGEgbWVudXMgZmllbGRsaXN0LgorCSsgQ2hhbmdlIG9mIHJldHVybiB0eXBlIGZvciBjdXJyZW50X2l0ZW0oKSBhbmQgb3BlcmF0b3JbXSBmb3IKKwkgIG1lbnVzLgorCSsgRW5oYW5jZWQgZGVtby4KKzk3MDUwMgorCSsgSW50cm9kdWNlZCB0aGUgVEhST1cgYW5kIFRIUk9XUyBmdW5jdGlvbnMvbWFjcm9zIHRvIHByZXBhcmUKKwkgIGEgc21vb3RoZXIgdHJhbnNpdGlvbiB0byByZWFsIGV4Y2VwdGlvbiBoYW5kbGluZy4KKwkrIEV4Y2VwdGlvbiBjbGFzc2VzIHByb3ZpZGVkIGluIGV0aXAuaAorCSsgQWRkZWQgdGhlIE5DdXJzZXNNZW51IGNsYXNzIHRvIHN1cHBvcnQgbGlibWVudSBmdW5jdGlvbmFsaXR5LgorCSsgVGhlIGluaGVyaXRhY2UgcmVsYXRpb24gYmV0d2VlbiBOQ3Vyc2VzV2luZG93IGFuZCBOQ3Vyc2VzQ29sb3JXaW5kb3cKKwkgIHdhcyBraW5kIG9mIGJyYWluIGRhbWFnZS4gTW9ub2Nocm9tZSBpcyBhIHNwZWNpYWwgY2FzZSBvZiBjb2xvcmVkLCBzbworCSAgdGhlIHJlbGF0aW9uIHNob3VsZCBiZSBqdXN0IHRoZSBvcHBvc2l0ZS4gVGhpcyB3b3VsZCBhbGxvdyBhbGwgCisJICBkZXJpdmVkIGNsYXNzZXMgbGlrZSBOQ3Vyc2VzUGFuZWwsIE5DdXJzZXNNZW51IG9yIE5DdXJzZXNGb3JtIHRvIAorCSAgaGF2ZSBjb2xvcnMuCisJICBUbyByZXNvbHZlIHRoYXQgZGVzaWduIGZsYXcgSSBwdXQgdGhlIGNvbG9yIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgCisJICBOQ3Vyc2VzV2luZG93IGNsYXNzIGFuZCBpdCBjYW4gYmUgc3dpdGNoZWQgb24gYnkgdGhlIHN0YXRpYyBtZW1iZXIKKwkgIHVzZUNvbG9ycygpLiBOQ3Vyc2VzQ29sb3JXaW5kb3cgaXMgc3RpbGwgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkKKwkgIHJlYXNvbnMuCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9jKysvUFJPQkxFTVMgYi9uY3Vyc2VzLTUuNy9jKysvUFJPQkxFTVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyYTdkZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9QUk9CTEVNUwpAQCAtMCwwICsxLDM0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFBST0JMRU1TLHYgMS4zIDIwMDYvMDQvMjIgMjI6MTk6MzcgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGEgbGlzdCBvZiBvcGVuIHByb2JsZW1zLiBUaGlzIG1haW5seSBsaXN0cyBrbm93biBtaXNzaW5nIHBpZWNlcworYW5kIGRlc2lnbiBmbGF3cy4KKworMS4gVGVzdGluZyEhIQorMi4gQmV0dGVyIGRlbW8gcHJvZ3JhbQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL1JFQURNRS1maXJzdCBiL25jdXJzZXMtNS43L2MrKy9SRUFETUUtZmlyc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ODdmNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9SRUFETUUtZmlyc3QKQEAgLTAsMCArMSw4MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUtZmlyc3QsdiAxLjkgMjAwNy8wMS8yNyAxODoyNzowOSB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIEMrKyBpbnRlcmZhY2UgdG8gbmN1cnNlcyByb3V0aW5lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBzZXZlcmFsIEMrKyBjbGFzc2VzIHdoaWNoCitlYXNlIHRoZSB1c2Ugb2Ygd3JpdGluZyBuY3Vyc2VzLWJhc2VkIHByb2dyYW1zLiAgVGhlIGNvZGUgd2FzIG9yaWdpbmFsbHkKK2Rlcml2ZWQgZnJvbSB0aGUgbGliZysrIEN1cnNlc1dpbmRvdyBjbGFzcywgYnV0IHJld3JpdHRlbiBmb3IgbmN1cnNlcy4KKworVGhlIGNsYXNzZXMgc2ltcGxpZnkgdGhlIHVzZSBvZiB3aW5kb3cgc3BlY2lmaWMgZnVuY3Rpb25zIGJ5CitlbmNhcHN1bGF0aW5nIHRoZW0gaW4gdGhlIHdpbmRvdyBvYmplY3QuICBGdW5jdGlvbiBvdmVybG9hZGluZyBpcwordXNlZCBpbiBvcmRlciB0byBuYXJyb3cgdGhlIGludGVyZmFjZS4gIEZvciBleGFtcGxlLCB5b3UgZG8gbm90IGhhdmUgdGhlCitkaXN0aW5jdGlvbiBiZXR3ZWVuIGBwcmludHcnIGFuZCBgbXZwcmludHcnIGFueW1vcmUuCisKK0Egc2Vjb25kIGJlbmVmaXQgaXMgdGhlIHJlbW92YWwgb2YgYWxsICNkZWZpbmVzIHdoaWNoIGFyZSBpbmNsdWRlZCBpbgordGhlIGN1cnNlcy5oIGZpbGUuICBUaGlzIGlzIGEgc3RlYWR5IGNhdXNlIG9mIHRyb3VibGUgYmVjYXVzZSBtYW55Citjb21tb24gaWRlbnRpZmllcnMgYXJlIHVzZWQuICBJbnN0ZWFkIG5vdyBhbGwgI2RlZmluZXMgYXJlIGlubGluZQorZnVuY3Rpb25zLCB3aGljaCBhbHNvIGFsbG93cyBzdHJpY3QgdHlwZSBjaGVja2luZyBvZiBhcmd1bWVudHMuCisKK1RoZSBuZXh0IGVuaGFuY2VtZW50IGlzIGNvbG9yIHN1cHBvcnQuIEl0IHdhcyBvcmlnaW5hbGx5IHByb3ZpZGVkIGJ5IGEgCitkZXJpdmVkIGNsYXNzLiAgVGhpcyBjYXVzZWQgc29tZSB0cm91YmxlIGlmIHlvdSB0aGluayBhYm91dCBQYW5lbHMgb3IKK01lbnVzIGFuZCBGb3JtcyB3aXRoIGNvbG9ycy4gIFdlIGRlY2lkZWQgdG8gcHV0IGNvbG9yIHN1cHBvcnQgaW50byB0aGUKK2Jhc2UgY2xhc3Mgc28gdGhhdCBhbnkgZGVyaXZlZCBjbGFzcyBtYXkgdXNlIGNvbG9yIHN1cHBvcnQgYWxzby4KK1RoZSBpbXBsZW1lbnRhdGlvbiBjaG9zZW4gaGVyZSBpcyBkaXJlY3RlZCB0byB1bnJlc3RyaWN0ZWQgdXNlCitvZiBtaXhlcyBvZiBjb2xvciBhbmQgbW9ub2Nocm9tZSB3aW5kb3dzLiAgVGhlIG9yaWdpbmFsIE5DdXJzZXNDb2xvcldpbmRvdworY2xhc3MgaXMgbWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgorCitUaGUgbGFzdCBwb2ludCB0byBtZW50aW9uIGlzIHRoZSBzdXBwb3J0IG9mIG90aGVyIHBhY2thZ2VzIHRoYXQgYXJlCitkaXN0cmlidXRlZCB3aXRoIHRoZSBuY3Vyc2VzIHBhY2thZ2U6ICB0aGUgcGFuZWxzIGxpYnJhcnksIHRoZSBtZW51IGxpYnJhcnkKK2FuZCB0aGUgZm9ybSBsaWJyYXJ5LiAgVGhpcyBzdXBwb3J0IGlzIHByb3ZpZGVkIGJ5IHRoZSBOQ3Vyc2VzUGFuZWwgY2xhc3MsCit3aGljaCBpcyBhbHNvIGRlcml2ZWQgZnJvbSB0aGUgTkN1cnNlc1dpbmRvdyBjbGFzcyBhbmQgdGhlIE5DdXJzZXNNZW51CithbmQgTkN1cnNlc0Zvcm0gY2xhc3NlcyB3aGljaCBhcmUgZGVyaXZlZCBmcm9tIE5DdXJzZXNQYW5lbC4gIFRoaXMgYWxsb3dzCitidWlsZGluZyBpbnRlcmZhY2VzIHdpdGggd2luZG93cy4KKworUGxlYXNlIHNlZSB0aGUgZXhhbXBsZSBwcm9ncmFtIGZvciBhIHF1aWNrIGludHJvZHVjdGlvbi4KKworTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIGNsYXNzZXMuCitIb3BlZnVsbHkgc29tZSB3aWxsIGJlIHdyaXR0ZW4gaW4gdGhlIG5vdCB0b28gZGlzdGFudCBmdXR1cmUuICBGb3Igbm93LAordG8gZmluZCBvdXQgaG93IHRvIHVzZSB0aGUgY2xhc3NlcywgcmVhZCB0aGUgY29kZSBhbmQgdGhlIGV4YW1wbGUgcHJvZ3JhbS4KKworU3VnZ2VzdGlvbnMgZm9yIGVuaGFuY2VtZW50cyBhbmQgY29udHJpYnV0aW9ucyBvZiBjb2RlIChhbmQgZG9jcykgYXJlCit3ZWxjb21lLiAgUGxlYXNlIGxldCB1cyBrbm93IHdoaWNoIGZ1bmN0aW9uYWxpdHkgeW91IG1pc3MuCisKK09yaWdpbmFsIGF1dGhvcjoKKyAgICAgRXJpYyBOZXd0b24gICAgICAgICA8bmV3dG9uQHJvY2t5Lm9zd2Vnby5lZHU+IGZvciBGU0YncyBsaWJnKysKKworQXV0aG9ycyBvZiBmaXJzdCBuY3Vyc2VzIGJhc2VkIHJlbGVhc2UgKE5DdXJzZXNXaW5kb3csIE5DdXJzZXNQYW5lbCk6CisgICAgIFVscmljaCBEcmVwcGVyICAgICAgPGRyZXBwZXJAaXJhLnVrYS5kZT4KKyBhbmQgQW5hdG9seSBJdmFzeXVrICAgICA8YW5hdG9seUBuaWNrLmNzaC5yaXQuZWR1PgorCitBdXRob3JzIG9mIHRoaXMgcmVsZWFzZToKKyAgICAgSnVlcmdlbiBQZmVpZmVyCisgICAgIFRob21hcyBFLiBEaWNrZXkKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2MrKy9jdXJzZXNhcHAuY2MgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzYXBwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYWI2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzYXBwLmNjCkBAIC0wLDAgKzEsMTY0IEBACisvLyAqIHRoaXMgaXMgZm9yIG1ha2luZyBlbWFjcyBoYXBweTogLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImN1cnNlc2FwcC5oIgorCitNT0RVTEVfSUQoIiRJZDogY3Vyc2VzYXBwLmNjLHYgMS4xNSAyMDA4LzA4LzE2IDE3OjE1OjM1IHRvbSBFeHAgJCIpCisKK3ZvaWQKK05DdXJzZXNBcHBsaWNhdGlvbjo6aW5pdChib29sIGJDb2xvcnMpCit7CisgIGlmIChiQ29sb3JzKQorICAgIE5DdXJzZXNXaW5kb3c6OnVzZUNvbG9ycygpOworCisgIGlmIChSb290X1dpbmRvdy0+Y29sb3JzKCkgPiAxKSB7CisgICAgYl9Db2xvcnMgPSBUUlVFOworICAgIFJvb3RfV2luZG93LT5zZXRjb2xvcigxKTsKKyAgICBSb290X1dpbmRvdy0+c2V0cGFsZXR0ZShDT0xPUl9ZRUxMT1csQ09MT1JfQkxVRSk7CisgICAgUm9vdF9XaW5kb3ctPnNldGNvbG9yKDIpOworICAgIFJvb3RfV2luZG93LT5zZXRwYWxldHRlKENPTE9SX0NZQU4sQ09MT1JfQkxVRSk7CisgICAgUm9vdF9XaW5kb3ctPnNldGNvbG9yKDMpOworICAgIFJvb3RfV2luZG93LT5zZXRwYWxldHRlKENPTE9SX0JMQUNLLENPTE9SX0JMVUUpOworICAgIFJvb3RfV2luZG93LT5zZXRjb2xvcig0KTsKKyAgICBSb290X1dpbmRvdy0+c2V0cGFsZXR0ZShDT0xPUl9CTEFDSyxDT0xPUl9DWUFOKTsKKyAgICBSb290X1dpbmRvdy0+c2V0Y29sb3IoNSk7CisgICAgUm9vdF9XaW5kb3ctPnNldHBhbGV0dGUoQ09MT1JfQkxVRSxDT0xPUl9ZRUxMT1cpOworICAgIFJvb3RfV2luZG93LT5zZXRjb2xvcig2KTsKKyAgICBSb290X1dpbmRvdy0+c2V0cGFsZXR0ZShDT0xPUl9CTEFDSyxDT0xPUl9HUkVFTik7CisgIH0KKyAgZWxzZQorICAgIGJfQ29sb3JzID0gRkFMU0U7CisKKyAgUm9vdF9XaW5kb3ctPmJrZ2QoJyAnfHdpbmRvd19iYWNrZ3JvdW5kcygpKTsKK30KKworTkN1cnNlc0FwcGxpY2F0aW9uKiBOQ3Vyc2VzQXBwbGljYXRpb246OnRoZUFwcCA9IDA7CitOQ3Vyc2VzV2luZG93KiBOQ3Vyc2VzQXBwbGljYXRpb246OnRpdGxlV2luZG93ID0gMDsKK05DdXJzZXNBcHBsaWNhdGlvbjo6U0xLX0xpbmsqIE5DdXJzZXNBcHBsaWNhdGlvbjo6c2xrX3N0YWNrID0gMDsKKworTkN1cnNlc0FwcGxpY2F0aW9uOjp+TkN1cnNlc0FwcGxpY2F0aW9uKCkKK3sKKyAgU29mdF9MYWJlbF9LZXlfU2V0KiBTOworCisgIGRlbGV0ZSB0aXRsZVdpbmRvdzsKKyAgdGl0bGVXaW5kb3cgPSAwOworCisgIHdoaWxlKCAoUz10b3AoKSkgKSB7CisgICAgcG9wKCk7CisgICAgZGVsZXRlIFM7CisgIH0KKworICBkZWxldGUgUm9vdF9XaW5kb3c7CisgIFJvb3RfV2luZG93ID0gMDsKKworICA6OmVuZHdpbigpOworfQorCitpbnQgTkN1cnNlc0FwcGxpY2F0aW9uOjpyaW5pdChOQ3Vyc2VzV2luZG93JiB3KQoreworICB0aXRsZVdpbmRvdyA9ICZ3OworICByZXR1cm4gT0s7Cit9CisKK3ZvaWQgTkN1cnNlc0FwcGxpY2F0aW9uOjpwdXNoKFNvZnRfTGFiZWxfS2V5X1NldCYgUykKK3sKKyAgU0xLX0xpbmsqIEwgPSBuZXcgU0xLX0xpbms7CisgIGFzc2VydChMICE9IDApOworICBMLT5wcmV2ID0gc2xrX3N0YWNrOworICBMLT5TTEtzID0gJlM7CisgIHNsa19zdGFjayA9IEw7CisgIGlmIChSb290X1dpbmRvdykKKyAgICBTLnNob3coKTsKK30KKworYm9vbCBOQ3Vyc2VzQXBwbGljYXRpb246OnBvcCgpCit7CisgIGlmIChzbGtfc3RhY2spIHsKKyAgICBTTEtfTGluayogTCA9IHNsa19zdGFjazsKKyAgICBzbGtfc3RhY2sgPSBzbGtfc3RhY2stPnByZXY7CisgICAgZGVsZXRlIEw7CisgICAgaWYgKFJvb3RfV2luZG93KSB7CisgICAgICBTb2Z0X0xhYmVsX0tleV9TZXQqIHh4ID0gdG9wKCk7CisgICAgICBpZiAoeHggIT0gMCkKKyAgICAgICAgeHgtPnNob3coKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChzbGtfc3RhY2sgPyBGQUxTRSA6IFRSVUUpOworfQorCitTb2Z0X0xhYmVsX0tleV9TZXQqIE5DdXJzZXNBcHBsaWNhdGlvbjo6dG9wKCkgY29uc3QKK3sKKyAgaWYgKHNsa19zdGFjaykKKyAgICByZXR1cm4gc2xrX3N0YWNrLT5TTEtzOworICBlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNvZnRfTGFiZWxfS2V5X1NldCo+KDApOworfQorCitpbnQgTkN1cnNlc0FwcGxpY2F0aW9uOjpvcGVyYXRvcigpKHZvaWQpCit7CisgIGJvb2wgYkNvbG9ycyA9IGJfQ29sb3JzOworICBTb2Z0X0xhYmVsX0tleV9TZXQqIFMgPSAwOworCisgIGludCB0cyA9IHRpdGxlc2l6ZSgpOworICBpZiAodHM+MCkKKyAgICBOQ3Vyc2VzV2luZG93OjpyaXBvZmZsaW5lKHRzLHJpbml0KTsKKyAgU29mdF9MYWJlbF9LZXlfU2V0OjpMYWJlbF9MYXlvdXQgZm10ID0gdXNlU0xLcygpOworICBpZiAoZm10IT1Tb2Z0X0xhYmVsX0tleV9TZXQ6Ok5vbmUpIHsKKyAgICBTID0gbmV3IFNvZnRfTGFiZWxfS2V5X1NldChmbXQpOworICAgIGFzc2VydChTICE9IDApOworICAgIGluaXRfbGFiZWxzKCpTKTsKKyAgfQorCisgIFJvb3RfV2luZG93ID0gbmV3IE5DdXJzZXNXaW5kb3coOjpzdGRzY3IpOworICBpbml0KGJDb2xvcnMpOworCisgIGlmICh0cz4wKQorICAgIHRpdGxlKCk7CisgIGlmIChmbXQhPVNvZnRfTGFiZWxfS2V5X1NldDo6Tm9uZSkgeworICAgIHB1c2goKlMpOworICB9CisKKyAgcmV0dXJuIHJ1bigpOworfQorCitOQ3Vyc2VzQXBwbGljYXRpb246Ok5DdXJzZXNBcHBsaWNhdGlvbihib29sIGJDb2xvcnMpCisgIDogYl9Db2xvcnMoYkNvbG9ycyksCisgICAgUm9vdF9XaW5kb3coTlVMTCkKK3sKKyAgaWYgKHRoZUFwcCkKKyAgICBUSFJPVyhuZXcgTkN1cnNlc0V4Y2VwdGlvbigiQXBwbGljYXRpb24gb2JqZWN0IGFscmVhZHkgY3JlYXRlZC4iKSk7CisgIGVsc2UKKyAgICB0aGVBcHAgPSB0aGlzOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2N1cnNlc2FwcC5oIGIvbmN1cnNlcy01LjcvYysrL2N1cnNlc2FwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOTk1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzYXBwLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8vICogVGhpcyBtYWtlcyBlbWFjcyBoYXBweSAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyAkSWQ6IGN1cnNlc2FwcC5oLHYgMS4xMSAyMDA1LzA1LzI4IDIxOjU3OjQ0IHRvbSBFeHAgJAorCisjaWZuZGVmIE5DVVJTRVNfQ1VSU0VTQVBQX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX0NVUlNFU0FQUF9IX2luY2wKKworI2luY2x1ZGUgPGN1cnNzbGsuaD4KKworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0FwcGxpY2F0aW9uIHsKK3B1YmxpYzoKKyAgdHlwZWRlZiBzdHJ1Y3QgX3Nsa19saW5rIHsgICAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWludGFpbgorICAgIHN0cnVjdCBfc2xrX2xpbmsqIHByZXY7ICAgICAgICAgICAvLyBhIHN0YWNrIG9mIFNMS3MKKyAgICBTb2Z0X0xhYmVsX0tleV9TZXQqIFNMS3M7CisgIH0gU0xLX0xpbms7Citwcml2YXRlOgorICBzdGF0aWMgaW50IHJpbml0KE5DdXJzZXNXaW5kb3cmIHcpOyAvLyBJbnRlcm5hbCBJbml0IGZ1bmN0aW9uIGZvciB0aXRsZQorICBzdGF0aWMgTkN1cnNlc0FwcGxpY2F0aW9uKiB0aGVBcHA7ICAvLyBHbG9iYWwgcmVmLiB0byB0aGUgYXBwbGljYXRpb24KKworICBzdGF0aWMgU0xLX0xpbmsqIHNsa19zdGFjazsKKworcHJvdGVjdGVkOgorICBzdGF0aWMgTkN1cnNlc1dpbmRvdyogdGl0bGVXaW5kb3c7ICAvLyBUaGUgVGl0bGUgV2luZG93IChpZiBhbnkpCisKKyAgYm9vbCBiX0NvbG9yczsgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyBhIGNvbG9yIGFwcGxpY2F0aW9uPworICBOQ3Vyc2VzV2luZG93KiBSb290X1dpbmRvdzsgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGRzY3IgZXF1aXYuCisKKyAgLy8gSW5pdGlhbGl6YXRpb24gb2YgYXR0cmlidXRlczsKKyAgLy8gUmV3cml0ZSB0aGlzIGluIHlvdXIgZGVyaXZlZCBjbGFzcyBpZiB5b3UgcHJlZmVyIG90aGVyIHNldHRpbmdzCisgIHZpcnR1YWwgdm9pZCBpbml0KGJvb2wgYkNvbG9ycyk7CisKKyAgLy8gVGhlIG51bWJlciBvZiBsaW5lcyBmb3IgdGhlIHRpdGxlIHdpbmRvdy4gRGVmYXVsdCBpcyBubyB0aXRsZSB3aW5kb3cKKyAgLy8gWW91IG1heSByZXdyaXRlIHRoaXMgaW4geW91ciBkZXJpdmVkIGNsYXNzCisgIHZpcnR1YWwgaW50IHRpdGxlc2l6ZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwdXQgc29tZXRoaW5nIGludG8gdGhlIHRpdGxlIHdpbmRvdyBpbml0aWFsbHkKKyAgLy8gWW91IG1heSByZXdyaXRlIHRoaXMgaW4geW91ciBkZXJpdmVkIGNsYXNzCisgIHZpcnR1YWwgdm9pZCB0aXRsZSgpIHsKKyAgfQorCisgIC8vIFRoZSBsYXlvdXQgdXNlZCBmb3IgdGhlIFNvZnQgTGFiZWwgS2V5cy4gRGVmYXVsdCBpcyB0byBoYXZlIG5vIFNMS3MuCisgIC8vIFlvdSBtYXkgcmV3cml0ZSB0aGlzIGluIHlvdXIgZGVyaXZlZCBjbGFzcworICB2aXJ0dWFsIFNvZnRfTGFiZWxfS2V5X1NldDo6TGFiZWxfTGF5b3V0IHVzZVNMS3MoKSBjb25zdCB7CisgICAgcmV0dXJuIFNvZnRfTGFiZWxfS2V5X1NldDo6Tm9uZTsKKyAgfQorCisgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBTTEtzLiBEZWZhdWx0IGlzIG5vdGhpbmcuCisgIC8vIFlvdSBtYXkgcmV3cml0ZSB0aGlzIGluIHlvdXIgZGVyaXZlZCBjbGFzcworICB2aXJ0dWFsIHZvaWQgaW5pdF9sYWJlbHMoU29mdF9MYWJlbF9LZXlfU2V0JiBTKSBjb25zdCB7CisgIH0KKworICAvLyBZb3VyIGRlcml2ZWQgY2xhc3MgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QuIFRoZSByZXR1cm4gdmFsdWUgbXVzdAorICAvLyBiZSB0aGUgZXhpdCB2YWx1ZSBvZiB5b3VyIGFwcGxpY2F0aW9uLgorICB2aXJ0dWFsIGludCBydW4oKSA9IDA7CisKKyAgLy8gVGhlIGNvbnN0cnVjdG9yIGlzIHByb3RlY3RlZCwgc28geW91IG1heSB1c2UgaXQgaW4geW91ciBkZXJpdmVkCisgIC8vIGNsYXNzIGNvbnN0cnVjdG9yLiBUaGUgYXJndW1lbnQgdGVsbHMgd2hldGhlciBvciBub3QgeW91IHdhbnQgY29sb3JzLgorICBOQ3Vyc2VzQXBwbGljYXRpb24oYm9vbCB3YW50Q29sb3JzID0gRkFMU0UpOworCisgIE5DdXJzZXNBcHBsaWNhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNBcHBsaWNhdGlvbiYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNBcHBsaWNhdGlvbihjb25zdCBOQ3Vyc2VzQXBwbGljYXRpb24mIHJocykKKyAgICA6IGJfQ29sb3JzKHJocy5iX0NvbG9ycyksCisgICAgICBSb290X1dpbmRvdyhyaHMuUm9vdF9XaW5kb3cpCisgIHsKKyAgfQorCitwdWJsaWM6CisgIHZpcnR1YWwgfk5DdXJzZXNBcHBsaWNhdGlvbigpOworCisgIC8vIEdldCBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gb2JqZWN0CisgIHN0YXRpYyBOQ3Vyc2VzQXBwbGljYXRpb24qIGdldEFwcGxpY2F0aW9uKCkgeworICAgIHJldHVybiB0aGVBcHA7CisgIH0KKworICAvLyBUaGlzIG1ldGhvZCBydW5zIHRoZSBhcHBsaWNhdGlvbiBhbmQgcmV0dXJucyBpdHMgZXhpdCB2YWx1ZQorICBpbnQgb3BlcmF0b3IoKSh2b2lkKTsKKworICAvLyBQcm9jZXNzIHRoZSBjb21tYW5kbGluZSBhcmd1bWVudHMuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseQorICAvLyBpZ25vcmVzIHRoZW0uIFlvdXIgZGVyaXZlZCBjbGFzcyBtYXkgcmV3cml0ZSB0aGlzLgorICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXJncyhpbnQgYXJnYywgY2hhciogYXJndltdKSB7CisgIH0KKworICAvLyBEb2VzIHRoaXMgYXBwbGljYXRpb24gdXNlIGNvbG9ycz8KKyAgaW5saW5lIGJvb2wgdXNlQ29sb3JzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9yczsKKyAgfQorCisgIC8vIFB1c2ggdGhlIEtleSBTZXQgUyBvbnRvIHRoZSBTTEsgU3RhY2suIFMgdGhlbiBiZWNvbWVzIHRoZSBjdXJyZW50IHNldAorICAvLyBvZiBTb2Z0IExhYmVsbGVkIEtleXMuCisgIHZvaWQgcHVzaChTb2Z0X0xhYmVsX0tleV9TZXQmIFMpOworCisgIC8vIFRocm93IGF3YXkgdGhlIGN1cnJlbnQgc2V0IG9mIFNMS3MgYW5kIG1ha2UgdGhlIHByZXZpb3VzIG9uZSB0aGUKKyAgLy8gbmV3IGN1cnJlbnQgc2V0LgorICBib29sIHBvcCgpOworCisgIC8vIFJldHJpZXZlIHRoZSBjdXJyZW50IHNldCBvZiBTb2Z0IExhYmVsbGVkIEtleXMuCisgIFNvZnRfTGFiZWxfS2V5X1NldCogdG9wKCkgY29uc3Q7CisKKyAgLy8gQXR0cmlidXRlcyB0byB1c2UgZm9yIG1lbnUgYW5kIGZvcm1zIGZvcmVncm91bmRzCisgIHZpcnR1YWwgY2h0eXBlIGZvcmVncm91bmRzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9ycyA/IENPTE9SX1BBSVIoMSkgOiBBX0JPTEQ7CisgIH0KKworICAvLyBBdHRyaWJ1dGVzIHRvIHVzZSBmb3IgbWVudSBhbmQgZm9ybXMgYmFja2dyb3VuZHMKKyAgdmlydHVhbCBjaHR5cGUgYmFja2dyb3VuZHMoKSBjb25zdCB7CisgICAgcmV0dXJuIGJfQ29sb3JzID8gQ09MT1JfUEFJUigyKSA6IEFfTk9STUFMOworICB9CisKKyAgLy8gQXR0cmlidXRlcyB0byB1c2UgZm9yIGluYWN0aXZlIChtZW51KSBlbGVtZW50cworICB2aXJ0dWFsIGNodHlwZSBpbmFjdGl2ZXMoKSBjb25zdCB7CisgICAgcmV0dXJuIGJfQ29sb3JzID8gKENPTE9SX1BBSVIoMyl8QV9ESU0pIDogQV9ESU07CisgIH0KKworICAvLyBBdHRyaWJ1dGVzIHRvIHVzZSBmb3IgKGZvcm0pIGxhYmVscyBhbmQgU0xLcworICB2aXJ0dWFsIGNodHlwZSBsYWJlbHMoKSBjb25zdCB7CisgICAgcmV0dXJuIGJfQ29sb3JzID8gQ09MT1JfUEFJUig0KSA6IEFfTk9STUFMOworICB9CisKKyAgLy8gQXR0cmlidXRlcyB0byB1c2UgZm9yIGZvcm0gYmFja2dyb3VuZHMKKyAgdmlydHVhbCBjaHR5cGUgZGlhbG9nX2JhY2tncm91bmRzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9ycyA/IENPTE9SX1BBSVIoNCkgOiBBX05PUk1BTDsKKyAgfQorCisgIC8vIEF0dHJpYnV0ZXMgdG8gdXNlIGFzIGRlZmF1bHQgZm9yIChmb3JtKSB3aW5kb3cgYmFja2dyb3VuZHMKKyAgdmlydHVhbCBjaHR5cGUgd2luZG93X2JhY2tncm91bmRzKCkgY29uc3QgeworICAgIHJldHVybiBiX0NvbG9ycyA/IENPTE9SX1BBSVIoNSkgOiBBX05PUk1BTDsKKyAgfQorCisgIC8vIEF0dHJpYnV0ZXMgdG8gdXNlIGZvciB0aGUgdGl0bGUgd2luZG93CisgIHZpcnR1YWwgY2h0eXBlIHNjcmVlbl90aXRsZXMoKSBjb25zdCB7CisgICAgcmV0dXJuIGJfQ29sb3JzID8gQ09MT1JfUEFJUig2KSA6IEFfQk9MRDsKKyAgfQorCit9OworIAorI2VuZGlmIC8qIE5DVVJTRVNfQ1VSU0VTQVBQX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2N1cnNlc2YuY2MgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzZi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWYxMjAyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL2N1cnNlc2YuY2MKQEAgLTAsMCArMSw0NTQgQEAKKy8vICogdGhpcyBpcyBmb3IgbWFraW5nIGVtYWNzIGhhcHB5OiAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJjdXJzZXNmLmgiCisjaW5jbHVkZSAiY3Vyc2VzYXBwLmgiCisKK01PRFVMRV9JRCgiJElkOiBjdXJzZXNmLmNjLHYgMS4yMSAyMDA1LzA4LzEzIDE4OjA5OjA2IHRvbSBFeHAgJCIpCisKK05DdXJzZXNGb3JtRmllbGQ6On5OQ3Vyc2VzRm9ybUZpZWxkICgpCit7CisgIGlmIChmaWVsZCkKKyAgICBPbkVycm9yKDo6ZnJlZV9maWVsZCAoZmllbGQpKTsKK30KKworLyogQ29uc3RydWN0IGEgRklFTEQqIGFycmF5IGZyb20gYW4gYXJyYXkgb2YgTkN1cnNlc0Zvcm1GaWVsZAorICogb2JqZWN0cy4KKyAqLworRklFTEQqKgorTkN1cnNlc0Zvcm06Om1hcEZpZWxkcyhOQ3Vyc2VzRm9ybUZpZWxkKiBuZmllbGRzW10pCit7CisgIGludCBmaWVsZENvdW50ID0gMCxsY3Y7CisgIEZJRUxEKiogb2xkX2ZpZWxkczsKKworICBhc3NlcnQobmZpZWxkcyAhPSAwKTsKKworICBmb3IgKGxjdj0wOyBuZmllbGRzW2xjdl0tPmZpZWxkOyArK2xjdikKKyAgICArK2ZpZWxkQ291bnQ7CisKKyAgRklFTEQqKiBmaWVsZHMgPSBuZXcgRklFTEQqW2ZpZWxkQ291bnQgKyAxXTsKKworICBmb3IgKGxjdj0wO25maWVsZHNbbGN2XS0+ZmllbGQ7KytsY3YpIHsKKyAgICBmaWVsZHNbbGN2XSA9IG5maWVsZHNbbGN2XS0+ZmllbGQ7CisgIH0KKyAgZmllbGRzW2xjdl0gPSBOVUxMOworCisgIG15X2ZpZWxkcyA9IG5maWVsZHM7CisKKyAgaWYgKGZvcm0gJiYgKG9sZF9maWVsZHMgPSA6OmZvcm1fZmllbGRzKGZvcm0pKSkgeworICAgIDo6c2V0X2Zvcm1fZmllbGRzKGZvcm0sIHN0YXRpY19jYXN0PEZJRUxEKio+KDApKTsKKyAgICBkZWxldGVbXSBvbGRfZmllbGRzOworICB9CisgIHJldHVybiBmaWVsZHM7Cit9CisKK3ZvaWQgTkN1cnNlc0Zvcm06OnNldERlZmF1bHRBdHRyaWJ1dGVzKCkKK3sKKyAgTkN1cnNlc0FwcGxpY2F0aW9uKiBTID0gTkN1cnNlc0FwcGxpY2F0aW9uOjpnZXRBcHBsaWNhdGlvbigpOworCisgIGludCBuID0gY291bnQoKTsKKyAgaWYgKG4gPiAwKSB7CisgICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKSB7CisgICAgICBOQ3Vyc2VzRm9ybUZpZWxkKiBmID0gKCp0aGlzKVtpXTsKKyAgICAgIGlmICgoZi0+b3B0aW9ucygpICYgKE9fRURJVHxPX0FDVElWRSkpPT0oT19FRElUfE9fQUNUSVZFKSkgeworCWlmIChTKSB7CisJICBmLT5zZXRfZm9yZWdyb3VuZChTLT5mb3JlZ3JvdW5kcygpKTsKKwkgIGYtPnNldF9iYWNrZ3JvdW5kKFMtPmJhY2tncm91bmRzKCkpOworCX0KKwlmLT5zZXRfcGFkX2NoYXJhY3RlcignXycpOworICAgICAgfQorICAgICAgZWxzZSB7CisJaWYgKFMpCisJICBmLT5zZXRfYmFja2dyb3VuZChTLT5sYWJlbHMoKSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKFMpIHsKKyAgICBia2dkKCcgJ3xTLT5kaWFsb2dfYmFja2dyb3VuZHMoKSk7CisgICAgaWYgKHN1YikKKyAgICAgIHN1Yi0+YmtnZCgnICd8Uy0+ZGlhbG9nX2JhY2tncm91bmRzKCkpOworICB9Cit9CisKK3ZvaWQKK05DdXJzZXNGb3JtOjpJbml0Rm9ybShOQ3Vyc2VzRm9ybUZpZWxkKiBuZmllbGRzW10sCisJCSAgICAgIGJvb2wgd2l0aF9mcmFtZSwKKwkJICAgICAgYm9vbCBhdXRvRGVsZXRlX0ZpZWxkcykKK3sKKyAgaW50IG1yb3dzLCBtY29sczsKKworICBrZXlwYWQoVFJVRSk7CisgIG1ldGEoVFJVRSk7CisKKyAgYl9mcmFtZWQgPSB3aXRoX2ZyYW1lOworICBiX2F1dG9EZWxldGUgPSBhdXRvRGVsZXRlX0ZpZWxkczsKKworICBmb3JtID0gc3RhdGljX2Nhc3Q8Rk9STSo+KDApOworICBmb3JtID0gOjpuZXdfZm9ybShtYXBGaWVsZHMobmZpZWxkcykpOworICBpZiAoIWZvcm0pCisgICAgT25FcnJvciAoRV9TWVNURU1fRVJST1IpOworCisgIFVzZXJIb29rKiBob29rID0gbmV3IFVzZXJIb29rOworICBob29rLT5tX3VzZXIgICA9IE5VTEw7CisgIGhvb2stPm1fYmFjayAgID0gdGhpczsKKyAgaG9vay0+bV9vd25lciAgPSBmb3JtOworICA6OnNldF9mb3JtX3VzZXJwdHIoZm9ybSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaG9vaykpOworCisgIDo6c2V0X2Zvcm1faW5pdCAgKGZvcm0sIF9uY194eF9mcm1faW5pdCk7CisgIDo6c2V0X2Zvcm1fdGVybSAgKGZvcm0sIF9uY194eF9mcm1fdGVybSk7CisgIDo6c2V0X2ZpZWxkX2luaXQgKGZvcm0sIF9uY194eF9mbGRfaW5pdCk7CisgIDo6c2V0X2ZpZWxkX3Rlcm0gKGZvcm0sIF9uY194eF9mbGRfdGVybSk7CisKKyAgc2NhbGUobXJvd3MsIG1jb2xzKTsKKyAgOjpzZXRfZm9ybV93aW4oZm9ybSwgdyk7CisKKyAgaWYgKHdpdGhfZnJhbWUpIHsKKyAgICBpZiAoKG1yb3dzID4gaGVpZ2h0KCktMikgfHwgKG1jb2xzID4gd2lkdGgoKS0yKSkKKyAgICAgIE9uRXJyb3IoRV9OT19ST09NKTsKKyAgICBzdWIgPSBuZXcgTkN1cnNlc1dpbmRvdygqdGhpcyxtcm93cyxtY29scywxLDEsJ3InKTsKKyAgICA6OnNldF9mb3JtX3N1Yihmb3JtLCBzdWItPncpOworICAgIGJfc3ViX293bmVyID0gVFJVRTsKKyAgfQorICBlbHNlIHsKKyAgICBzdWIgPSBzdGF0aWNfY2FzdDxOQ3Vyc2VzV2luZG93Kj4oMCk7CisgICAgYl9zdWJfb3duZXIgPSBGQUxTRTsKKyAgfQorICBvcHRpb25zX29uKE9fTkxfT1ZFUkxPQUQpOworICBzZXREZWZhdWx0QXR0cmlidXRlcygpOworfQorCitOQ3Vyc2VzRm9ybTo6fk5DdXJzZXNGb3JtKCkKK3sKKyAgVXNlckhvb2sqIGhvb2sgPSByZWludGVycHJldF9jYXN0PFVzZXJIb29rKj4oOjpmb3JtX3VzZXJwdHIoZm9ybSkpOworICBkZWxldGUgaG9vazsKKyAgaWYgKGJfc3ViX293bmVyKSB7CisgICAgZGVsZXRlIHN1YjsKKyAgICA6OnNldF9mb3JtX3N1Yihmb3JtLCBzdGF0aWNfY2FzdDxXSU5ET1cgKj4oMCkpOworICB9CisgIGlmIChmb3JtKSB7CisgICAgRklFTEQqKiBmaWVsZHMgPSA6OmZvcm1fZmllbGRzKGZvcm0pOworICAgIGludCBjbnQgPSBjb3VudCgpOworCisgICAgT25FcnJvcig6OnNldF9mb3JtX2ZpZWxkcyhmb3JtLCBzdGF0aWNfY2FzdDxGSUVMRCoqPigwKSkpOworCisgICAgaWYgKGJfYXV0b0RlbGV0ZSkgeworICAgICAgaWYgKGNudD4wKSB7CisJZm9yIChpbnQgaT0wOyBpIDw9IGNudDsgaSsrKQorCSAgZGVsZXRlIG15X2ZpZWxkc1tpXTsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZVtdIG15X2ZpZWxkczsKKyAgICB9CisKKyAgICA6OmZyZWVfZm9ybShmb3JtKTsKKyAgICAvLyBJdCdzIGVzc2VudGlhbCB0byBkbyB0aGlzIGFmdGVyIGZyZWVfZm9ybSgpCisgICAgZGVsZXRlW10gZmllbGRzOworICB9Cit9CisKK3ZvaWQKK05DdXJzZXNGb3JtOjpzZXRTdWJXaW5kb3coTkN1cnNlc1dpbmRvdyYgbnN1YikKK3sKKyAgaWYgKCFpc0Rlc2NlbmRhbnQobnN1YikpCisgICAgT25FcnJvcihFX1NZU1RFTV9FUlJPUik7CisgIGVsc2UgeworICAgIGlmIChiX3N1Yl9vd25lcikKKyAgICAgIGRlbGV0ZSBzdWI7CisgICAgc3ViID0gJm5zdWI7CisgICAgOjpzZXRfZm9ybV9zdWIoZm9ybSxzdWItPncpOworICB9Cit9CisKKy8qIEludGVybmFsIGhvb2sgZnVuY3Rpb25zLiBUaGV5IHdpbGwgcm91dGUgdGhlIGhvb2sKKyAqIGNhbGxzIHRvIHZpcnR1YWwgbWV0aG9kcyBvZiB0aGUgTkN1cnNlc0Zvcm0gY2xhc3MsCisgKiBzbyBpbiBDKysgcHJvdmlkaW5nIGEgaG9vayBpcyBkb25lIHNpbXBseSBieQorICogaW1wbGVtZW50aW5nIGEgdmlydHVhbCBtZXRob2QgaW4gYSBkZXJpdmVkIGNsYXNzCisgKi8KK3ZvaWQKK19uY194eF9mcm1faW5pdChGT1JNICpmKQoreworICBOQ3Vyc2VzRm9ybTo6Z2V0SG9vayhmKS0+T25fRm9ybV9Jbml0KCk7Cit9CisKK3ZvaWQKK19uY194eF9mcm1fdGVybShGT1JNICpmKQoreworICBOQ3Vyc2VzRm9ybTo6Z2V0SG9vayhmKS0+T25fRm9ybV9UZXJtaW5hdGlvbigpOworfQorCit2b2lkCitfbmNfeHhfZmxkX2luaXQoRk9STSAqZikKK3sKKyAgTkN1cnNlc0Zvcm0qIEYgPSBOQ3Vyc2VzRm9ybTo6Z2V0SG9vayhmKTsKKyAgRi0+T25fRmllbGRfSW5pdCAoKihGLT5jdXJyZW50X2ZpZWxkICgpKSk7Cit9CisKK3ZvaWQKK19uY194eF9mbGRfdGVybShGT1JNICpmKQoreworICBOQ3Vyc2VzRm9ybSogRiA9IE5DdXJzZXNGb3JtOjpnZXRIb29rKGYpOworICBGLT5Pbl9GaWVsZF9UZXJtaW5hdGlvbiAoKihGLT5jdXJyZW50X2ZpZWxkICgpKSk7Cit9CisKK3ZvaWQKK05DdXJzZXNGb3JtOjpPbl9Gb3JtX0luaXQoKQoreworfQorCit2b2lkCitOQ3Vyc2VzRm9ybTo6T25fRm9ybV9UZXJtaW5hdGlvbigpCit7Cit9CisKK3ZvaWQKK05DdXJzZXNGb3JtOjpPbl9GaWVsZF9Jbml0KE5DdXJzZXNGb3JtRmllbGQmIGZpZWxkKQoreworfQorCit2b2lkCitOQ3Vyc2VzRm9ybTo6T25fRmllbGRfVGVybWluYXRpb24oTkN1cnNlc0Zvcm1GaWVsZCYgZmllbGQpCit7Cit9CisKKy8vIGNhbGwgdGhlIGZvcm0gZHJpdmVyIGFuZCBkbyBiYXNpYyBlcnJvciBjaGVja2luZy4KK2ludAorTkN1cnNlc0Zvcm06OmRyaXZlciAoaW50IGMpCit7CisgIGludCByZXMgPSA6OmZvcm1fZHJpdmVyIChmb3JtLCBjKTsKKyAgc3dpdGNoIChyZXMpIHsKKyAgY2FzZSBFX09LOgorICBjYXNlIEVfUkVRVUVTVF9ERU5JRUQ6CisgIGNhc2UgRV9JTlZBTElEX0ZJRUxEOgorICBjYXNlIEVfVU5LTk9XTl9DT01NQU5EOgorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIE9uRXJyb3IgKHJlcyk7CisgIH0KKyAgcmV0dXJuIChyZXMpOworfQorCit2b2lkIE5DdXJzZXNGb3JtOjpPbl9SZXF1ZXN0X0RlbmllZChpbnQgYykgY29uc3QKK3sKKyAgOjpiZWVwKCk7Cit9CisKK3ZvaWQgTkN1cnNlc0Zvcm06Ok9uX0ludmFsaWRfRmllbGQoaW50IGMpIGNvbnN0Cit7CisgIDo6YmVlcCgpOworfQorCit2b2lkIE5DdXJzZXNGb3JtOjpPbl9Vbmtub3duX0NvbW1hbmQoaW50IGMpIGNvbnN0Cit7CisgIDo6YmVlcCgpOworfQorCitzdGF0aWMgY29uc3QgaW50IENNRF9RVUlUID0gTUFYX0NPTU1BTkQgKyAxOworCitOQ3Vyc2VzRm9ybUZpZWxkKgorTkN1cnNlc0Zvcm06Om9wZXJhdG9yKCkodm9pZCkKK3sKKyAgaW50IGRydkNtbmQ7CisgIGludCBlcnI7CisgIGludCBjOworCisgIHBvc3QoKTsKKyAgc2hvdygpOworICByZWZyZXNoKCk7CisKKyAgd2hpbGUgKCgoZHJ2Q21uZCA9IHZpcnR1YWxpemUoKGM9Z2V0S2V5KCkpKSkgIT0gQ01EX1FVSVQpKSB7CisgICAgc3dpdGNoKChlcnI9ZHJpdmVyKGRydkNtbmQpKSkgeworICAgIGNhc2UgRV9SRVFVRVNUX0RFTklFRDoKKyAgICAgIE9uX1JlcXVlc3RfRGVuaWVkKGMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBFX0lOVkFMSURfRklFTEQ6CisgICAgICBPbl9JbnZhbGlkX0ZpZWxkKGMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBFX1VOS05PV05fQ09NTUFORDoKKyAgICAgIE9uX1Vua25vd25fQ29tbWFuZChjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRV9PSzoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBPbkVycm9yKGVycik7CisgICAgfQorICB9CisKKyAgdW5wb3N0KCk7CisgIGhpZGUoKTsKKyAgcmVmcmVzaCgpOworICByZXR1cm4gbXlfZmllbGRzWzo6ZmllbGRfaW5kZXggKDo6Y3VycmVudF9maWVsZCAoZm9ybSkpXTsKK30KKworLy8gUHJvdmlkZSBhIGRlZmF1bHQga2V5IHZpcnR1YWxpemF0aW9uLiBUcmFuc2xhdGUgdGhlIGtleWJvYXJkCisvLyBjb2RlIGMgaW50byBhIGZvcm0gcmVxdWVzdCBjb2RlLgorLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYSBob3BlZnVsbHkgc3RyYWlnaHRmb3J3YXJkCisvLyBtYXBwaW5nIGZvciB0aGUgbW9zdCBjb21tb24ga2V5c3Ryb2tlcyBhbmQgZm9ybSByZXF1ZXN0cy4KK2ludAorTkN1cnNlc0Zvcm06OnZpcnR1YWxpemUoaW50IGMpCit7CisgIHN3aXRjaChjKSB7CisKKyAgY2FzZSBLRVlfSE9NRSAgICAgIDogcmV0dXJuKFJFUV9GSVJTVF9GSUVMRCk7CisgIGNhc2UgS0VZX0VORCAgICAgICA6IHJldHVybihSRVFfTEFTVF9GSUVMRCk7CisKKyAgY2FzZSBLRVlfRE9XTiAgICAgIDogcmV0dXJuKFJFUV9ET1dOX0NIQVIpOworICBjYXNlIEtFWV9VUCAgICAgICAgOiByZXR1cm4oUkVRX1VQX0NIQVIpOworICBjYXNlIEtFWV9MRUZUICAgICAgOiByZXR1cm4oUkVRX1BSRVZfQ0hBUik7CisgIGNhc2UgS0VZX1JJR0hUICAgICA6IHJldHVybihSRVFfTkVYVF9DSEFSKTsKKworICBjYXNlIEtFWV9OUEFHRSAgICAgOiByZXR1cm4oUkVRX05FWFRfUEFHRSk7CisgIGNhc2UgS0VZX1BQQUdFICAgICA6IHJldHVybihSRVFfUFJFVl9QQUdFKTsKKworICBjYXNlIEtFWV9CQUNLU1BBQ0UgOiByZXR1cm4oUkVRX0RFTF9QUkVWKTsKKyAgY2FzZSBLRVlfRU5URVIgICAgIDogcmV0dXJuKFJFUV9ORVdfTElORSk7CisgIGNhc2UgS0VZX0NMRUFSICAgICA6IHJldHVybihSRVFfQ0xSX0ZJRUxEKTsKKworICBjYXNlIENUUkwoJ1gnKSAgICAgOiByZXR1cm4oQ01EX1FVSVQpOyAgICAgICAgLy8gZVhpdAorCisgIGNhc2UgQ1RSTCgnRicpICAgICA6IHJldHVybihSRVFfTkVYVF9GSUVMRCk7ICAvLyBGb3J3YXJkCisgIGNhc2UgQ1RSTCgnQicpICAgICA6IHJldHVybihSRVFfUFJFVl9GSUVMRCk7ICAvLyBCYWNrd2FyZAorICBjYXNlIENUUkwoJ0wnKSAgICAgOiByZXR1cm4oUkVRX0xFRlRfRklFTEQpOyAgLy8gTGVmdAorICBjYXNlIENUUkwoJ1InKSAgICAgOiByZXR1cm4oUkVRX1JJR0hUX0ZJRUxEKTsgLy8gUmlnaHQKKyAgY2FzZSBDVFJMKCdVJykgICAgIDogcmV0dXJuKFJFUV9VUF9GSUVMRCk7ICAgIC8vIFVwCisgIGNhc2UgQ1RSTCgnRCcpICAgICA6IHJldHVybihSRVFfRE9XTl9GSUVMRCk7ICAvLyBEb3duCisKKyAgY2FzZSBDVFJMKCdXJykgICAgIDogcmV0dXJuKFJFUV9ORVhUX1dPUkQpOworICBjYXNlIENUUkwoJ1QnKSAgICAgOiByZXR1cm4oUkVRX1BSRVZfV09SRCk7CisKKyAgY2FzZSBDVFJMKCdBJykgICAgIDogcmV0dXJuKFJFUV9CRUdfRklFTEQpOworICBjYXNlIENUUkwoJ0UnKSAgICAgOiByZXR1cm4oUkVRX0VORF9GSUVMRCk7CisKKyAgY2FzZSBDVFJMKCdJJykgICAgIDogcmV0dXJuKFJFUV9JTlNfQ0hBUik7CisgIGNhc2UgQ1RSTCgnTScpICAgICA6CisgIGNhc2UgQ1RSTCgnSicpICAgICA6IHJldHVybihSRVFfTkVXX0xJTkUpOworICBjYXNlIENUUkwoJ08nKSAgICAgOiByZXR1cm4oUkVRX0lOU19MSU5FKTsKKyAgY2FzZSBDVFJMKCdWJykgICAgIDogcmV0dXJuKFJFUV9ERUxfQ0hBUik7CisgIGNhc2UgQ1RSTCgnSCcpICAgICA6IHJldHVybihSRVFfREVMX1BSRVYpOworICBjYXNlIENUUkwoJ1knKSAgICAgOiByZXR1cm4oUkVRX0RFTF9MSU5FKTsKKyAgY2FzZSBDVFJMKCdHJykgICAgIDogcmV0dXJuKFJFUV9ERUxfV09SRCk7CisgIGNhc2UgQ1RSTCgnSycpICAgICA6IHJldHVybihSRVFfQ0xSX0VPRik7CisKKyAgY2FzZSBDVFJMKCdOJykgICAgIDogcmV0dXJuKFJFUV9ORVhUX0NIT0lDRSk7CisgIGNhc2UgQ1RSTCgnUCcpICAgICA6IHJldHVybihSRVFfUFJFVl9DSE9JQ0UpOworCisgIGRlZmF1bHQ6CisgICAgcmV0dXJuKGMpOworICB9Cit9CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVXNlciBEZWZpbmVkIEZpZWxkdHlwZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitib29sIF9uY194eF9mbGRfZmNoZWNrKEZJRUxEICpmLCBjb25zdCB2b2lkICp1KQoreworICBOQ3Vyc2VzRm9ybUZpZWxkKiBGID0gcmVpbnRlcnByZXRfY2FzdDxOQ3Vyc2VzRm9ybUZpZWxkKj4oY29uc3RfY2FzdDx2b2lkICo+KHUpKTsKKyAgYXNzZXJ0KEYgIT0gMCk7CisgIFVzZXJEZWZpbmVkRmllbGRUeXBlKiB1ZGYgPSByZWludGVycHJldF9jYXN0PFVzZXJEZWZpbmVkRmllbGRUeXBlKj4oRi0+ZmllbGR0eXBlKCkpOworICBhc3NlcnQodWRmICE9IDApOworICByZXR1cm4gdWRmLT5maWVsZF9jaGVjaygqRik7Cit9CisKK2Jvb2wgX25jX3h4X2ZsZF9jY2hlY2soaW50IGMsIGNvbnN0IHZvaWQgKnUpCit7CisgIE5DdXJzZXNGb3JtRmllbGQqIEYgPSByZWludGVycHJldF9jYXN0PE5DdXJzZXNGb3JtRmllbGQqPihjb25zdF9jYXN0PHZvaWQgKj4odSkpOworICBhc3NlcnQoRiAhPSAwKTsKKyAgVXNlckRlZmluZWRGaWVsZFR5cGUqIHVkZiA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxVc2VyRGVmaW5lZEZpZWxkVHlwZSo+KEYtPmZpZWxkdHlwZSgpKTsKKyAgYXNzZXJ0KHVkZiAhPSAwKTsKKyAgcmV0dXJuIHVkZi0+Y2hhcl9jaGVjayhjKTsKK30KKwordm9pZCogX25jX3h4X2ZsZF9tYWtlYXJnKHZhX2xpc3QqIHZhKQoreworICByZXR1cm4gdmFfYXJnKCp2YSxOQ3Vyc2VzRm9ybUZpZWxkKik7Cit9CisKK0ZJRUxEVFlQRSogVXNlckRlZmluZWRGaWVsZFR5cGU6OmdlbmVyaWNfZmllbGR0eXBlID0KKyAgOjpuZXdfZmllbGR0eXBlKF9uY194eF9mbGRfZmNoZWNrLAorCQkgIF9uY194eF9mbGRfY2NoZWNrKTsKKworRklFTERUWVBFKiBVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZTo6Z2VuZXJpY19maWVsZHR5cGVfd2l0aF9jaG9pY2UgPQorICA6Om5ld19maWVsZHR5cGUoX25jX3h4X2ZsZF9mY2hlY2ssCisJCSAgX25jX3h4X2ZsZF9jY2hlY2spOworCitib29sIF9uY194eF9uZXh0X2Nob2ljZShGSUVMRCAqZiwgY29uc3Qgdm9pZCAqdSkKK3sKKyAgTkN1cnNlc0Zvcm1GaWVsZCogRiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TkN1cnNlc0Zvcm1GaWVsZCo+KGNvbnN0X2Nhc3Q8dm9pZCAqPih1KSk7CisgIGFzc2VydChGICE9IDApOworICBVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZSogdWRmID0KKyAgICByZWludGVycHJldF9jYXN0PFVzZXJEZWZpbmVkRmllbGRUeXBlX1dpdGhfQ2hvaWNlKj4oRi0+ZmllbGR0eXBlKCkpOworICBhc3NlcnQodWRmICE9IDApOworICByZXR1cm4gdWRmLT5uZXh0KCpGKTsKK30KKworYm9vbCBfbmNfeHhfcHJldl9jaG9pY2UoRklFTEQgKmYsIGNvbnN0IHZvaWQgKnUpCit7CisgIE5DdXJzZXNGb3JtRmllbGQqIEYgPSByZWludGVycHJldF9jYXN0PE5DdXJzZXNGb3JtRmllbGQqPihjb25zdF9jYXN0PHZvaWQgKj4odSkpOworICBhc3NlcnQoRiAhPSAwKTsKKyAgVXNlckRlZmluZWRGaWVsZFR5cGVfV2l0aF9DaG9pY2UqIHVkZiA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZSo+KEYtPmZpZWxkdHlwZSgpKTsKKyAgYXNzZXJ0KHVkZiAhPSAwKTsKKyAgcmV0dXJuIHVkZi0+cHJldmlvdXMoKkYpOworfQorCitjbGFzcyBVREZfSW5pdAoreworcHJpdmF0ZToKKyAgaW50IGNvZGU7CisgIHN0YXRpYyBVREZfSW5pdCogSTsKKworcHVibGljOgorICBVREZfSW5pdCgpCisgICAgOiBjb2RlKDApCisgIHsKKyAgICBjb2RlID0gOjpzZXRfZmllbGR0eXBlX2FyZyhVc2VyRGVmaW5lZEZpZWxkVHlwZTo6Z2VuZXJpY19maWVsZHR5cGUsCisJCQkgICAgICAgX25jX3h4X2ZsZF9tYWtlYXJnLAorCQkJICAgICAgIE5VTEwsCisJCQkgICAgICAgTlVMTCk7CisgICAgaWYgKGNvZGU9PUVfT0spCisgICAgICBjb2RlID0gOjpzZXRfZmllbGR0eXBlX2FyZworCShVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZTo6Z2VuZXJpY19maWVsZHR5cGVfd2l0aF9jaG9pY2UsCisJIF9uY194eF9mbGRfbWFrZWFyZywKKwkgTlVMTCwKKwkgTlVMTCk7CisgICAgaWYgKGNvZGU9PUVfT0spCisgICAgICBjb2RlID0gOjpzZXRfZmllbGR0eXBlX2Nob2ljZQorCShVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZTo6Z2VuZXJpY19maWVsZHR5cGVfd2l0aF9jaG9pY2UsCisJIF9uY194eF9uZXh0X2Nob2ljZSwKKwkgX25jX3h4X3ByZXZfY2hvaWNlKTsKKyAgfQorfTsKKworVURGX0luaXQqIFVERl9Jbml0OjpJID0gbmV3IFVERl9Jbml0KCk7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzZi5oIGIvbmN1cnNlcy01LjcvYysrL2N1cnNlc2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGEzMGMzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL2N1cnNlc2YuaApAQCAtMCwwICsxLDk2NyBAQAorLy8gKiBUaGlzIG1ha2VzIGVtYWNzIGhhcHB5IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vICRJZDogY3Vyc2VzZi5oLHYgMS4yOCAyMDA1LzA4LzEzIDE4OjA4OjI0IHRvbSBFeHAgJAorCisjaWZuZGVmIE5DVVJTRVNfQ1VSU0VTRl9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19DVVJTRVNGX0hfaW5jbCAxCisKKyNpbmNsdWRlIDxjdXJzZXNwLmg+CisKKyNpZm5kZWYgX19FWFRfUU5YCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworZXh0ZXJuICJDIiB7CisjICBpbmNsdWRlIDxmb3JtLmg+Cit9CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGJ1aXRpbiBhbmQgdXNlciBkZWZpbmVkIEZpZWxkdHlwZXMuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0Zvcm1GaWVsZDsgLy8gZm9yd2FyZCBkZWNsYXJhdGlvbgorCisvLyBDbGFzcyB0byByZXByZXNlbnQgYnVpbHRpbiBmaWVsZCB0eXBlcyBhcyB3ZWxsIGFzIEMrKyB3cml0dGVuIG5ldworLy8gZmllbGR0eXBlcyAoc2VlIGNsYXNzZXMgVXNlckRlZmluZUZpZWxkVHlwZS4uLgorY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0ZpZWxkVHlwZQoreworICBmcmllbmQgY2xhc3MgTkN1cnNlc0Zvcm1GaWVsZDsKKworcHJvdGVjdGVkOgorICBGSUVMRFRZUEUqIGZpZWxkdHlwZTsKKworICBpbmxpbmUgdm9pZCBPbkVycm9yKGludCBlcnIpIGNvbnN0IFRIUk9XUyhOQ3Vyc2VzRm9ybUV4Y2VwdGlvbikgeworICAgIGlmIChlcnIhPUVfT0spCisgICAgICBUSFJPVyhuZXcgTkN1cnNlc0Zvcm1FeGNlcHRpb24gKGVycikpOworICB9CisKKyAgTkN1cnNlc0ZpZWxkVHlwZShGSUVMRFRZUEUgKmYpIDogZmllbGR0eXBlKGYpIHsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNGaWVsZFR5cGUoKSB7fQorCisgIC8vIFNldCB0aGUgZmllbGRzIGYgZmllbGR0eXBlIHRvIHRoaXMgb25lLgorICB2aXJ0dWFsIHZvaWQgc2V0KE5DdXJzZXNGb3JtRmllbGQmIGYpID0gMDsKKworcHVibGljOgorICBOQ3Vyc2VzRmllbGRUeXBlKCkKKyAgICA6IGZpZWxkdHlwZShTVEFUSUNfQ0FTVChGSUVMRFRZUEUqKSgwKSkKKyAgeworICB9CisKKyAgTkN1cnNlc0ZpZWxkVHlwZSYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNGaWVsZFR5cGUmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzRmllbGRUeXBlKGNvbnN0IE5DdXJzZXNGaWVsZFR5cGUmIHJocykKKyAgICA6IGZpZWxkdHlwZShyaHMuZmllbGR0eXBlKQorICB7CisgIH0KKworfTsKKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBjbGFzcyByZXByZXNlbnRpbmcgYSBmb3JtcyBmaWVsZCwgd3JhcHBpbmcgdGhlIGxvd2xldmVsIEZJRUxEIHN0cnVjdAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNGb3JtRmllbGQKK3sKKyAgZnJpZW5kIGNsYXNzIE5DdXJzZXNGb3JtOworCitwcm90ZWN0ZWQ6CisgIEZJRUxEICpmaWVsZDsJCSAgICAgLy8gbG93bGV2ZWwgc3RydWN0dXJlCisgIE5DdXJzZXNGaWVsZFR5cGUqIGZ0eXBlOyAgIC8vIEFzc29jaWF0ZWQgZmllbGQgdHlwZQorCisgIC8vIEVycm9yIGhhbmRsZXIKKyAgaW5saW5lIHZvaWQgT25FcnJvciAoaW50IGVycikgY29uc3QgVEhST1dTKE5DdXJzZXNGb3JtRXhjZXB0aW9uKSB7CisgICAgaWYgKGVyciAhPSBFX09LKQorICAgICAgVEhST1cobmV3IE5DdXJzZXNGb3JtRXhjZXB0aW9uIChlcnIpKTsKKyAgfQorCitwdWJsaWM6CisgIC8vIENyZWF0ZSBhICdOdWxsJyBmaWVsZC4gQ2FuIGJlIHVzZWQgdG8gZGVsaW1pdCBhIGZpZWxkIGxpc3QKKyAgTkN1cnNlc0Zvcm1GaWVsZCgpCisgICAgOiBmaWVsZChTVEFUSUNfQ0FTVChGSUVMRCopKDApKSwKKyAgICAgIGZ0eXBlKFNUQVRJQ19DQVNUKE5DdXJzZXNGaWVsZFR5cGUqKSgwKSkKKyAgeworICB9CisKKyAgLy8gQ3JlYXRlIGEgbmV3IGZpZWxkCisgIE5DdXJzZXNGb3JtRmllbGQgKGludCByb3dzLAorCQkgICAgaW50IG5jb2xzLAorCQkgICAgaW50IGZpcnN0X3JvdyA9IDAsCisJCSAgICBpbnQgZmlyc3RfY29sID0gMCwKKwkJICAgIGludCBvZmZzY3JlZW5fcm93cyA9IDAsCisJCSAgICBpbnQgYWRkaXRpb25hbF9idWZmZXJzID0gMCkKKyAgICA6IGZpZWxkKDApLAorICAgICAgZnR5cGUoU1RBVElDX0NBU1QoTkN1cnNlc0ZpZWxkVHlwZSopKDApKQorICB7CisgICAgICBmaWVsZCA9IDo6bmV3X2ZpZWxkKHJvd3MsIG5jb2xzLCBmaXJzdF9yb3csIGZpcnN0X2NvbCwKKwkJCSAgb2Zmc2NyZWVuX3Jvd3MsIGFkZGl0aW9uYWxfYnVmZmVycyk7CisgICAgICBpZiAoIWZpZWxkKQorCU9uRXJyb3IoZXJybm8pOworICB9CisKKyAgTkN1cnNlc0Zvcm1GaWVsZCYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNGb3JtRmllbGQmIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzRm9ybUZpZWxkKGNvbnN0IE5DdXJzZXNGb3JtRmllbGQmIHJocykKKyAgICA6IGZpZWxkKHJocy5maWVsZCksIGZ0eXBlKHJocy5mdHlwZSkKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc0Zvcm1GaWVsZCAoKTsKKworICAvLyBEdXBsaWNhdGUgdGhlIGZpZWxkIGF0IGEgbmV3IHBvc2l0aW9uCisgIGlubGluZSBOQ3Vyc2VzRm9ybUZpZWxkKiBkdXAoaW50IGZpcnN0X3JvdywgaW50IGZpcnN0X2NvbCkKKyAgeworICAgIE5DdXJzZXNGb3JtRmllbGQqIGYgPSBuZXcgTkN1cnNlc0Zvcm1GaWVsZCgpOworICAgIGlmICghZikKKyAgICAgIE9uRXJyb3IoRV9TWVNURU1fRVJST1IpOworICAgIGVsc2UgeworICAgICAgZi0+ZnR5cGUgPSBmdHlwZTsKKyAgICAgIGYtPmZpZWxkID0gOjpkdXBfZmllbGQoZmllbGQsZmlyc3Rfcm93LGZpcnN0X2NvbCk7CisgICAgICBpZiAoIWYtPmZpZWxkKQorCU9uRXJyb3IoZXJybm8pOworICAgIH0KKyAgICByZXR1cm4gZjsKKyAgfQorCisgIC8vIExpbmsgdGhlIGZpZWxkIHRvIGEgbmV3IGxvY2F0aW9uCisgIGlubGluZSBOQ3Vyc2VzRm9ybUZpZWxkKiBsaW5rKGludCBmaXJzdF9yb3csIGludCBmaXJzdF9jb2wpIHsKKyAgICBOQ3Vyc2VzRm9ybUZpZWxkKiBmID0gbmV3IE5DdXJzZXNGb3JtRmllbGQoKTsKKyAgICBpZiAoIWYpCisgICAgICBPbkVycm9yKEVfU1lTVEVNX0VSUk9SKTsKKyAgICBlbHNlIHsKKyAgICAgIGYtPmZ0eXBlID0gZnR5cGU7CisgICAgICBmLT5maWVsZCA9IDo6bGlua19maWVsZChmaWVsZCxmaXJzdF9yb3csZmlyc3RfY29sKTsKKyAgICAgIGlmICghZi0+ZmllbGQpCisJT25FcnJvcihlcnJubyk7CisgICAgfQorICAgIHJldHVybiBmOworICB9CisKKyAgLy8gR2V0IHRoZSBsb3dsZXZlbCBmaWVsZCByZXByZXNlbnRhdGlvbgorICBpbmxpbmUgRklFTEQqIGdldF9maWVsZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gZmllbGQ7CisgIH0KKworICAvLyBSZXRyaWV2ZSBpbmZvIGFib3V0IHRoZSBmaWVsZAorICBpbmxpbmUgdm9pZCBpbmZvKGludCYgcm93cywgaW50JiBuY29scywKKwkJICAgaW50JiBmaXJzdF9yb3csIGludCYgZmlyc3RfY29sLAorCQkgICBpbnQmIG9mZnNjcmVlbl9yb3dzLCBpbnQmIGFkZGl0aW9uYWxfYnVmZmVycykgY29uc3QgeworICAgIE9uRXJyb3IoOjpmaWVsZF9pbmZvKGZpZWxkLCAmcm93cywgJm5jb2xzLAorCQkJICZmaXJzdF9yb3csICZmaXJzdF9jb2wsCisJCQkgJm9mZnNjcmVlbl9yb3dzLCAmYWRkaXRpb25hbF9idWZmZXJzKSk7CisgIH0KKworICAvLyBSZXRyaWV2ZSBpbmZvIGFib3V0IHRoZSBmaWVsZHMgZHluYW1pYyBwcm9wZXJ0aWVzLgorICBpbmxpbmUgdm9pZCBkeW5hbWljX2luZm8oaW50JiBkeW5hbWljX3Jvd3MsIGludCYgZHluYW1pY19jb2xzLAorCQkJICAgaW50JiBtYXhfZ3Jvd3RoKSBjb25zdCB7CisgICAgT25FcnJvcig6OmR5bmFtaWNfZmllbGRfaW5mbyhmaWVsZCwgJmR5bmFtaWNfcm93cywgJmR5bmFtaWNfY29scywKKwkJCQkgJm1heF9ncm93dGgpKTsKKyAgfQorCisgIC8vIEZvciBhIGR5bmFtaWMgZmllbGQgeW91IG1heSBzZXQgdGhlIG1heGltdW0gZ3Jvd3RoIGxpbWl0LgorICAvLyBBIHplcm8gbWVhbnMgdW5saW1pdGVkIGdyb3d0aC4KKyAgaW5saW5lIHZvaWQgc2V0X21heGltdW1fZ3Jvd3RoKGludCBncm93dGggPSAwKSB7CisgICAgT25FcnJvcig6OnNldF9tYXhfZmllbGQoZmllbGQsZ3Jvd3RoKSk7CisgIH0KKworICAvLyBNb3ZlIHRoZSBmaWVsZCB0byBhIG5ldyBwb3NpdGlvbgorICBpbmxpbmUgdm9pZCBtb3ZlKGludCByb3csIGludCBjb2wpIHsKKyAgICBPbkVycm9yKDo6bW92ZV9maWVsZChmaWVsZCxyb3csY29sKSk7CisgIH0KKworICAvLyBNYXJrIHRoZSBmaWVsZCB0byBzdGFydCBhIG5ldyBwYWdlCisgIGlubGluZSB2b2lkIG5ld19wYWdlKGJvb2wgcGFnZUZsYWcgPSBGQUxTRSkgeworICAgIE9uRXJyb3IoOjpzZXRfbmV3X3BhZ2UoZmllbGQscGFnZUZsYWcpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHdoZXRoZXIgb3Igbm90IHRoZSBmaWVsZCBzdGFydHMgYSBuZXcgcGFnZS4KKyAgaW5saW5lIGJvb2wgaXNfbmV3X3BhZ2UoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6bmV3X3BhZ2UoZmllbGQpOworICB9CisKKyAgLy8gU2V0IHRoZSBqdXN0aWZpY2F0aW9uIGZvciB0aGUgZmllbGQKKyAgaW5saW5lIHZvaWQgc2V0X2p1c3RpZmljYXRpb24oaW50IGp1c3QpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX2p1c3QoZmllbGQsanVzdCkpOworICB9CisKKyAgLy8gUmV0cmlldmUgdGhlIGZpZWxkcyBqdXN0aWZpY2F0aW9uCisgIGlubGluZSBpbnQganVzdGlmaWNhdGlvbigpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmaWVsZF9qdXN0KGZpZWxkKTsKKyAgfQorICAvLyBTZXQgdGhlIGZvcmVncm91bmQgYXR0cmlidXRlIGZvciB0aGUgZmllbGQKKyAgaW5saW5lIHZvaWQgc2V0X2ZvcmVncm91bmQoY2h0eXBlIGZvcmVncm91bmQpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX2ZvcmUoZmllbGQsZm9yZWdyb3VuZCkpOworICB9CisKKyAgLy8gUmV0cmlldmUgdGhlIGZpZWxkcyBmb3JlZ3JvdW5kIGF0dHJpYnV0ZQorICBpbmxpbmUgY2h0eXBlIGZvcmUoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZmllbGRfZm9yZShmaWVsZCk7CisgIH0KKworICAvLyBTZXQgdGhlIGJhY2tncm91bmQgYXR0cmlidXRlIGZvciB0aGUgZmllbGQKKyAgaW5saW5lIHZvaWQgc2V0X2JhY2tncm91bmQoY2h0eXBlIGJhY2tncm91bmQpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX2JhY2soZmllbGQsYmFja2dyb3VuZCkpOworICB9CisKKyAgLy8gUmV0cmlldmUgdGhlIGZpZWxkcyBiYWNrZ3JvdW5kIGF0dHJpYnV0ZQorICBpbmxpbmUgY2h0eXBlIGJhY2soKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZmllbGRfYmFjayhmaWVsZCk7CisgIH0KKworICAvLyBTZXQgdGhlIHBhZGRpbmcgY2hhcmFjdGVyIGZvciB0aGUgZmllbGQKKyAgaW5saW5lIHZvaWQgc2V0X3BhZF9jaGFyYWN0ZXIoaW50IHBhZGRpbmcpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX3BhZChmaWVsZCwgcGFkZGluZykpOworICB9CisKKyAgLy8gUmV0cmlldmUgdGhlIGZpZWxkcyBwYWRkaW5nIGNoYXJhY3RlcgorICBpbmxpbmUgaW50IHBhZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmaWVsZF9wYWQoZmllbGQpOworICB9CisKKyAgLy8gU3dpdGNoIG9uIHRoZSBmaWVsZHMgb3B0aW9ucworICBpbmxpbmUgdm9pZCBvcHRpb25zX29uIChGaWVsZF9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6OmZpZWxkX29wdHNfb24gKGZpZWxkLCBvcHRzKSk7CisgIH0KKworICAvLyBTd2l0Y2ggb2ZmIHRoZSBmaWVsZHMgb3B0aW9ucworICBpbmxpbmUgdm9pZCBvcHRpb25zX29mZiAoRmllbGRfT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjpmaWVsZF9vcHRzX29mZiAoZmllbGQsIG9wdHMpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSBmaWVsZHMgb3B0aW9ucworICBpbmxpbmUgRmllbGRfT3B0aW9ucyBvcHRpb25zICgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmaWVsZF9vcHRzIChmaWVsZCk7CisgIH0KKworICAvLyBTZXQgdGhlIGZpZWxkcyBvcHRpb25zCisgIGlubGluZSB2b2lkIHNldF9vcHRpb25zIChGaWVsZF9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6OnNldF9maWVsZF9vcHRzIChmaWVsZCwgb3B0cykpOworICB9CisKKyAgLy8gTWFyayB0aGUgZmllbGQgYXMgY2hhbmdlZAorICBpbmxpbmUgdm9pZCBzZXRfY2hhbmdlZChib29sIGNoYW5nZUZsYWcgPSBUUlVFKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF9zdGF0dXMoZmllbGQsY2hhbmdlRmxhZykpOworICB9CisKKyAgLy8gVGVzdCB3aGV0aGVyIG9yIG5vdCB0aGUgZmllbGQgaXMgbWFya2VkIGFzIGNoYW5nZWQKKyAgaW5saW5lIGJvb2wgY2hhbmdlZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmaWVsZF9zdGF0dXMoZmllbGQpOworICB9CisKKyAgLy8gUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmllbGQgaW4gdGhlIGZpZWxkIGFycmF5IG9mIGEgZm9ybQorICAvLyBvciAtMSBpZiB0aGUgZmllbGQgaXMgbm90IGFzc29jaWF0ZWQgdG8gYSBmb3JtCisgIGlubGluZSBpbnQgKGluZGV4KSgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmaWVsZF9pbmRleChmaWVsZCk7CisgIH0KKworICAvLyBTdG9yZSBhIHZhbHVlIGluIGEgZmllbGRzIGJ1ZmZlci4gVGhlIGRlZmF1bHQgYnVmZmVyIGlzIG5yLiAwCisgIGlubGluZSB2b2lkIHNldF92YWx1ZShjb25zdCBjaGFyICp2YWwsIGludCBidWZmZXIgPSAwKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF9idWZmZXIoZmllbGQsYnVmZmVyLHZhbCkpOworICB9CisKKyAgLy8gUmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgZmllbGRzIGJ1ZmZlci4gVGhlIGRlZmF1bHQgYnVmZmVyIGlzIG5yLiAwCisgIGlubGluZSBjaGFyKiB2YWx1ZShpbnQgYnVmZmVyID0gMCkgY29uc3QgeworICAgIHJldHVybiA6OmZpZWxkX2J1ZmZlcihmaWVsZCxidWZmZXIpOworICB9CisKKyAgLy8gU2V0IHRoZSB2YWxpZGF0aW9uIHR5cGUgb2YgdGhlIGZpZWxkLgorICBpbmxpbmUgdm9pZCBzZXRfZmllbGR0eXBlKE5DdXJzZXNGaWVsZFR5cGUmIGYpIHsKKyAgICBmdHlwZSA9ICZmOworICAgIGYuc2V0KCp0aGlzKTsgLy8gQSBnb29kIGZyaWVuZCBtYXkgZG8gdGhhdC4uLgorICB9CisKKyAgLy8gUmV0cmlldmUgdGhlIHZhbGlkYXRpb24gdHlwZSBvZiB0aGUgZmllbGQuCisgIGlubGluZSBOQ3Vyc2VzRmllbGRUeXBlKiBmaWVsZHR5cGUoKSBjb25zdCB7CisgICAgcmV0dXJuIGZ0eXBlOworICB9CisKK307CisKKyAgLy8gVGhpcyBhcmUgdGhlIGJ1aWx0LWluIGhvb2sgZnVuY3Rpb25zIGluIHRoaXMgQysrIGJpbmRpbmcuIEluIEMrKyB3ZSB1c2UKKyAgLy8gdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zIChzZWUgYmVsb3cgT25fLi4uX0luaXQgYW5kIE9uXy4uLl9UZXJtaW5hdGlvbikKKyAgLy8gdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gYW4gb2JqZWN0IG9yaWVudGVkIG1hbm5lci4KK2V4dGVybiAiQyIgeworICB2b2lkIF9uY194eF9mcm1faW5pdChGT1JNICopOworICB2b2lkIF9uY194eF9mcm1fdGVybShGT1JNICopOworICB2b2lkIF9uY194eF9mbGRfaW5pdChGT1JNICopOworICB2b2lkIF9uY194eF9mbGRfdGVybShGT1JNICopOworfQorCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIGNsYXNzIHJlcHJlc2VudGluZyBhIGZvcm0sIHdyYXBwaW5nIHRoZSBsb3dsZXZlbCBGT1JNIHN0cnVjdAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNGb3JtIDogcHVibGljIE5DdXJzZXNQYW5lbAoreworcHJvdGVjdGVkOgorICBGT1JNKiBmb3JtOyAgLy8gdGhlIGxvd2xldmVsIHN0cnVjdHVyZQorCitwcml2YXRlOgorICBOQ3Vyc2VzV2luZG93KiBzdWI7ICAgLy8gdGhlIHN1YndpbmRvdyBvYmplY3QKKyAgYm9vbCBiX3N1Yl9vd25lcjsgICAgIC8vIGlzIHRoaXMgb3VyIG93biBzdWJ3aW5kb3c/CisgIGJvb2wgYl9mcmFtZWQ7CS8vIGhhcyB0aGUgZm9ybSBhIGJvcmRlcj8KKyAgYm9vbCBiX2F1dG9EZWxldGU7ICAgIC8vIERlbGV0ZSBmaWVsZHMgd2hlbiBkZWxldGluZyBmb3JtPworCisgIE5DdXJzZXNGb3JtRmllbGQqKiBteV9maWVsZHM7IC8vIFRoZSBhcnJheSBvZiBmaWVsZHMgZm9yIHRoaXMgZm9ybQorCisgIC8vIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSBmb3JtJ3MgdXNlciBkYXRhIGZpZWxkIHRvIGxpbmsgdGhlCisgIC8vIEZPUk0qIHRvIHRoZSBDKysgb2JqZWN0IGFuZCB0byBwcm92aWRlIGV4dHJhIHNwYWNlIGZvciBhIHVzZXIgcG9pbnRlci4KKyAgdHlwZWRlZiBzdHJ1Y3QgeworICAgIHZvaWQqCSAgICAgICBtX3VzZXI7CSAgICAvLyB0aGUgcG9pbnRlciBmb3IgdGhlIHVzZXIncyBkYXRhCisgICAgY29uc3QgTkN1cnNlc0Zvcm0qIG1fYmFjazsgICAgICAvLyBiYWNrd2FyZCBwb2ludGVyIHRvIEMrKyBvYmplY3QKKyAgICBjb25zdCBGT1JNKgkgICAgICAgbV9vd25lcjsKKyAgfSBVc2VySG9vazsKKworICAvLyBHZXQgdGhlIGJhY2t3YXJkIHBvaW50ZXIgdG8gdGhlIEMrKyBvYmplY3QgZnJvbSBhIEZPUk0KKyAgc3RhdGljIGlubGluZSBOQ3Vyc2VzRm9ybSogZ2V0SG9vayhjb25zdCBGT1JNICpmKSB7CisgICAgVXNlckhvb2sqIGhvb2sgPSByZWludGVycHJldF9jYXN0PFVzZXJIb29rKj4oOjpmb3JtX3VzZXJwdHIoZikpOworICAgIGFzc2VydChob29rICE9IDAgJiYgaG9vay0+bV9vd25lcj09Zik7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TkN1cnNlc0Zvcm0qPihob29rLT5tX2JhY2spOworICB9CisKKyAgZnJpZW5kIHZvaWQgX25jX3h4X2ZybV9pbml0KEZPUk0gKik7CisgIGZyaWVuZCB2b2lkIF9uY194eF9mcm1fdGVybShGT1JNICopOworICBmcmllbmQgdm9pZCBfbmNfeHhfZmxkX2luaXQoRk9STSAqKTsKKyAgZnJpZW5kIHZvaWQgX25jX3h4X2ZsZF90ZXJtKEZPUk0gKik7CisKKyAgLy8gQ2FsY3VsYXRlIEZJRUxEKiBhcnJheSBmb3IgdGhlIG1lbnUKKyAgRklFTEQqKiBtYXBGaWVsZHMoTkN1cnNlc0Zvcm1GaWVsZCogbmZpZWxkc1tdKTsKKworcHJvdGVjdGVkOgorICAvLyBpbnRlcm5hbCByb3V0aW5lcworICBpbmxpbmUgdm9pZCBzZXRfdXNlcih2b2lkICp1c2VyKSB7CisgICAgVXNlckhvb2sqIHVwdHIgPSByZWludGVycHJldF9jYXN0PFVzZXJIb29rKj4oOjpmb3JtX3VzZXJwdHIgKGZvcm0pKTsKKyAgICBhc3NlcnQgKHVwdHIgIT0gMCAmJiB1cHRyLT5tX2JhY2s9PXRoaXMgJiYgdXB0ci0+bV9vd25lcj09Zm9ybSk7CisgICAgdXB0ci0+bV91c2VyID0gdXNlcjsKKyAgfQorCisgIGlubGluZSB2b2lkICpnZXRfdXNlcigpIHsKKyAgICBVc2VySG9vayogdXB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VXNlckhvb2sqPig6OmZvcm1fdXNlcnB0ciAoZm9ybSkpOworICAgIGFzc2VydCAodXB0ciAhPSAwICYmIHVwdHItPm1fYmFjaz09dGhpcyAmJiB1cHRyLT5tX293bmVyPT1mb3JtKTsKKyAgICByZXR1cm4gdXB0ci0+bV91c2VyOworICB9CisKKyAgdm9pZCBJbml0Rm9ybSAoTkN1cnNlc0Zvcm1GaWVsZCogRmllbGRzW10sCisJCSBib29sIHdpdGhfZnJhbWUsCisJCSBib29sIGF1dG9EZWxldGVGaWVsZHMpOworCisgIGlubGluZSB2b2lkIE9uRXJyb3IgKGludCBlcnIpIGNvbnN0IFRIUk9XUyhOQ3Vyc2VzRm9ybUV4Y2VwdGlvbikgeworICAgIGlmIChlcnIgIT0gRV9PSykKKyAgICAgIFRIUk9XKG5ldyBOQ3Vyc2VzRm9ybUV4Y2VwdGlvbiAoZXJyKSk7CisgIH0KKworICAvLyB0aGlzIHdyYXBzIHRoZSBmb3JtX2RyaXZlciBjYWxsLgorICB2aXJ0dWFsIGludCBkcml2ZXIgKGludCBjKSA7CisKKyAgLy8gJ0ludGVybmFsJyBjb25zdHJ1Y3RvciwgYnVpbGRzIGFuIG9iamVjdCB3aXRob3V0IGFzc29jaWF0aW9uIHRvIGEKKyAgLy8gZmllbGQgYXJyYXkuCisgIE5DdXJzZXNGb3JtKCBpbnQgIG5saW5lcywKKwkgICAgICAgaW50ICBuY29scywKKwkgICAgICAgaW50ICBiZWdpbl95ID0gMCwKKwkgICAgICAgaW50ICBiZWdpbl94ID0gMCkKKyAgICA6IE5DdXJzZXNQYW5lbChubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KSwKKyAgICAgIGZvcm0gKFNUQVRJQ19DQVNUKEZPUk0qKSgwKSksCisgICAgICBzdWIoMCksCisgICAgICBiX3N1Yl9vd25lcigwKSwKKyAgICAgIGJfZnJhbWVkKDApLAorICAgICAgYl9hdXRvRGVsZXRlKDApLAorICAgICAgbXlfZmllbGRzKDApCisgIHsKKyAgfQorCitwdWJsaWM6CisgIC8vIENyZWF0ZSBmb3JtIGZvciB0aGUgZGVmYXVsdCBwYW5lbC4KKyAgTkN1cnNlc0Zvcm0gKE5DdXJzZXNGb3JtRmllbGQqIEZpZWxkc1tdLAorCSAgICAgICBib29sIHdpdGhfZnJhbWU9RkFMU0UsCSAgICAgIC8vIHJlc2VydmUgc3BhY2UgZm9yIGEgZnJhbWU/CisJICAgICAgIGJvb2wgYXV0b0RlbGV0ZV9GaWVsZHM9RkFMU0UpICAvLyBkbyBhdXRvbWF0aWMgY2xlYW51cD8KKyAgICA6IE5DdXJzZXNQYW5lbCgpLAorICAgICAgZm9ybSgwKSwKKyAgICAgIHN1YigwKSwKKyAgICAgIGJfc3ViX293bmVyKDApLAorICAgICAgYl9mcmFtZWQoMCksCisgICAgICBiX2F1dG9EZWxldGUoMCksCisgICAgICBteV9maWVsZHMoMCkKKyAgeworICAgIEluaXRGb3JtKEZpZWxkcywgd2l0aF9mcmFtZSwgYXV0b0RlbGV0ZV9GaWVsZHMpOworICB9CisKKyAgLy8gQ3JlYXRlIGEgZm9ybSBpbiBhIHBhbmVsIHdpdGggdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCBzaXplLgorICBOQ3Vyc2VzRm9ybSAoTkN1cnNlc0Zvcm1GaWVsZCogRmllbGRzW10sCisJICAgICAgIGludCAgbmxpbmVzLAorCSAgICAgICBpbnQgIG5jb2xzLAorCSAgICAgICBpbnQgIGJlZ2luX3ksCisJICAgICAgIGludCAgYmVnaW5feCwKKwkgICAgICAgYm9vbCB3aXRoX2ZyYW1lPUZBTFNFLAkgICAgIC8vIHJlc2VydmUgc3BhY2UgZm9yIGEgZnJhbWU/CisJICAgICAgIGJvb2wgYXV0b0RlbGV0ZV9GaWVsZHM9RkFMU0UpIC8vIGRvIGF1dG9tYXRpYyBjbGVhbnVwPworICAgIDogTkN1cnNlc1BhbmVsKG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpLAorICAgICAgZm9ybSgwKSwKKyAgICAgIHN1YigwKSwKKyAgICAgIGJfc3ViX293bmVyKDApLAorICAgICAgYl9mcmFtZWQoMCksCisgICAgICBiX2F1dG9EZWxldGUoMCksCisgICAgICBteV9maWVsZHMoMCkKKyAgeworICAgICAgSW5pdEZvcm0oRmllbGRzLCB3aXRoX2ZyYW1lLCBhdXRvRGVsZXRlX0ZpZWxkcyk7CisgIH0KKworICBOQ3Vyc2VzRm9ybSYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNGb3JtJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICAgIE5DdXJzZXNQYW5lbDo6b3BlcmF0b3I9KHJocyk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNGb3JtKGNvbnN0IE5DdXJzZXNGb3JtJiByaHMpCisgICAgOiBOQ3Vyc2VzUGFuZWwocmhzKSwKKyAgICAgIGZvcm0ocmhzLmZvcm0pLAorICAgICAgc3ViKHJocy5zdWIpLAorICAgICAgYl9zdWJfb3duZXIocmhzLmJfc3ViX293bmVyKSwKKyAgICAgIGJfZnJhbWVkKHJocy5iX2ZyYW1lZCksCisgICAgICBiX2F1dG9EZWxldGUocmhzLmJfYXV0b0RlbGV0ZSksCisgICAgICBteV9maWVsZHMocmhzLm15X2ZpZWxkcykKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc0Zvcm0oKTsKKworICAvLyBTZXQgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZvcm0KKyAgdmlydHVhbCB2b2lkIHNldERlZmF1bHRBdHRyaWJ1dGVzKCk7CisKKyAgLy8gUmV0cmlldmUgY3VycmVudCBmaWVsZCBvZiB0aGUgZm9ybS4KKyAgaW5saW5lIE5DdXJzZXNGb3JtRmllbGQqIGN1cnJlbnRfZmllbGQoKSBjb25zdCB7CisgICAgcmV0dXJuIG15X2ZpZWxkc1s6OmZpZWxkX2luZGV4KDo6Y3VycmVudF9maWVsZChmb3JtKSldOworICB9CisKKyAgLy8gU2V0IHRoZSBmb3JtcyBzdWJ3aW5kb3cKKyAgdm9pZCBzZXRTdWJXaW5kb3coTkN1cnNlc1dpbmRvdyYgc3ViKTsKKworICAvLyBTZXQgdGhlc2UgZmllbGRzIGZvciB0aGUgZm9ybQorICBpbmxpbmUgdm9pZCBzZXRGaWVsZHMoTkN1cnNlc0Zvcm1GaWVsZCogRmllbGRzW10pIHsKKyAgICBPbkVycm9yKDo6c2V0X2Zvcm1fZmllbGRzKGZvcm0sbWFwRmllbGRzKEZpZWxkcykpKTsKKyAgfQorCisgIC8vIFJlbW92ZSB0aGUgZm9ybSBmcm9tIHRoZSBzY3JlZW4KKyAgaW5saW5lIHZvaWQgdW5wb3N0ICh2b2lkKSB7CisgICAgT25FcnJvciAoOjp1bnBvc3RfZm9ybSAoZm9ybSkpOworICB9CisKKyAgLy8gUG9zdCB0aGUgZm9ybSB0byB0aGUgc2NyZWVuIGlmIGZsYWcgaXMgdHJ1ZSwgdW5wb3N0IGl0IG90aGVyd2lzZQorICBpbmxpbmUgdm9pZCBwb3N0KGJvb2wgZmxhZyA9IFRSVUUpIHsKKyAgICBPbkVycm9yIChmbGFnID8gOjpwb3N0X2Zvcm0oZm9ybSkgOiA6OnVucG9zdF9mb3JtIChmb3JtKSk7CisgIH0KKworICAvLyBEZWNvcmF0aW9ucworICBpbmxpbmUgdm9pZCBmcmFtZShjb25zdCBjaGFyICp0aXRsZT1OVUxMLCBjb25zdCBjaGFyKiBidGl0bGU9TlVMTCkgeworICAgIGlmIChiX2ZyYW1lZCkKKyAgICAgIE5DdXJzZXNQYW5lbDo6ZnJhbWUodGl0bGUsYnRpdGxlKTsKKyAgICBlbHNlCisgICAgICBPbkVycm9yKEVfU1lTVEVNX0VSUk9SKTsKKyAgfQorCisgIGlubGluZSB2b2lkIGJvbGRmcmFtZShjb25zdCBjaGFyICp0aXRsZT1OVUxMLCBjb25zdCBjaGFyKiBidGl0bGU9TlVMTCkgeworICAgIGlmIChiX2ZyYW1lZCkKKyAgICAgIE5DdXJzZXNQYW5lbDo6Ym9sZGZyYW1lKHRpdGxlLGJ0aXRsZSk7CisgICAgZWxzZQorICAgICAgT25FcnJvcihFX1NZU1RFTV9FUlJPUik7CisgIH0KKworICBpbmxpbmUgdm9pZCBsYWJlbChjb25zdCBjaGFyICp0b3BMYWJlbCwgY29uc3QgY2hhciAqYm90dG9tTGFiZWwpIHsKKyAgICBpZiAoYl9mcmFtZWQpCisgICAgICBOQ3Vyc2VzUGFuZWw6OmxhYmVsKHRvcExhYmVsLGJvdHRvbUxhYmVsKTsKKyAgICBlbHNlCisgICAgICBPbkVycm9yKEVfU1lTVEVNX0VSUk9SKTsKKyAgfQorCisgIC8vIC0tLS0tCisgIC8vIEhvb2tzCisgIC8vIC0tLS0tCisKKyAgLy8gQ2FsbGVkIGFmdGVyIHRoZSBmb3JtIGdldHMgcmVwb3NpdGlvbmVkIGluIGl0cyB3aW5kb3cuCisgIC8vIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHRoZSBmb3JtIGlzIHBvc3RlZC4KKyAgdmlydHVhbCB2b2lkIE9uX0Zvcm1fSW5pdCgpOworCisgIC8vIENhbGxlZCBiZWZvcmUgdGhlIGZvcm0gZ2V0cyByZXBvc2l0aW9uZWQgaW4gaXRzIHdpbmRvdy4KKyAgLy8gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaWYgdGhlIGZvcm0gaXMgdW5wb3N0ZWQuCisgIHZpcnR1YWwgdm9pZCBPbl9Gb3JtX1Rlcm1pbmF0aW9uKCk7CisKKyAgLy8gQ2FsbGVkIGFmdGVyIHRoZSBmaWVsZCBiZWNhbWUgdGhlIGN1cnJlbnQgZmllbGQKKyAgdmlydHVhbCB2b2lkIE9uX0ZpZWxkX0luaXQoTkN1cnNlc0Zvcm1GaWVsZCYgZmllbGQpOworCisgIC8vIENhbGxlZCBiZWZvcmUgdGhpcyBmaWVsZCBpcyBsZWZ0IGFzIGN1cnJlbnQgZmllbGQuCisgIHZpcnR1YWwgdm9pZCBPbl9GaWVsZF9UZXJtaW5hdGlvbihOQ3Vyc2VzRm9ybUZpZWxkJiBmaWVsZCk7CisKKyAgLy8gQ2FsY3VsYXRlIHJlcXVpcmVkIHdpbmRvdyBzaXplIGZvciB0aGUgZm9ybS4KKyAgdm9pZCBzY2FsZShpbnQmIHJvd3MsIGludCYgbmNvbHMpIGNvbnN0IHsKKyAgICBPbkVycm9yKDo6c2NhbGVfZm9ybShmb3JtLCZyb3dzLCZuY29scykpOworICB9CisKKyAgLy8gUmV0cmlldmUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGUgZm9ybS4KKyAgaW50IGNvdW50KCkgY29uc3QgeworICAgIHJldHVybiA6OmZpZWxkX2NvdW50KGZvcm0pOworICB9CisKKyAgLy8gTWFrZSB0aGUgcGFnZSB0aGUgY3VycmVudCBwYWdlIG9mIHRoZSBmb3JtLgorICB2b2lkIHNldF9wYWdlKGludCBwYWdlTnVtKSB7CisgICAgT25FcnJvcig6OnNldF9mb3JtX3BhZ2UoZm9ybSwgcGFnZU51bSkpOworICB9CisKKyAgLy8gUmV0cmlldmUgY3VycmVudCBwYWdlIG51bWJlcgorICBpbnQgcGFnZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpmb3JtX3BhZ2UoZm9ybSk7CisgIH0KKworICAvLyBTd2l0Y2ggb24gdGhlIGZvcm1zIG9wdGlvbnMKKyAgaW5saW5lIHZvaWQgb3B0aW9uc19vbiAoRm9ybV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6OmZvcm1fb3B0c19vbiAoZm9ybSwgb3B0cykpOworICB9CisKKyAgLy8gU3dpdGNoIG9mZiB0aGUgZm9ybXMgb3B0aW9ucworICBpbmxpbmUgdm9pZCBvcHRpb25zX29mZiAoRm9ybV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6OmZvcm1fb3B0c19vZmYgKGZvcm0sIG9wdHMpKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIHRoZSBmb3JtcyBvcHRpb25zCisgIGlubGluZSBGb3JtX09wdGlvbnMgb3B0aW9ucyAoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6Zm9ybV9vcHRzIChmb3JtKTsKKyAgfQorCisgIC8vIFNldCB0aGUgZm9ybXMgb3B0aW9ucworICBpbmxpbmUgdm9pZCBzZXRfb3B0aW9ucyAoRm9ybV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6OnNldF9mb3JtX29wdHMgKGZvcm0sIG9wdHMpKTsKKyAgfQorCisgIC8vIEFyZSB0aGVyZSBtb3JlIGRhdGEgaW4gdGhlIGN1cnJlbnQgZmllbGQgYWZ0ZXIgdGhlIGRhdGEgc2hvd24KKyAgaW5saW5lIGJvb2wgZGF0YV9haGVhZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpkYXRhX2FoZWFkKGZvcm0pOworICB9CisKKyAgLy8gQXJlIHRoZXJlIG1vcmUgZGF0YSBpbiB0aGUgY3VycmVudCBmaWVsZCBiZWZvcmUgdGhlIGRhdGEgc2hvd24KKyAgaW5saW5lIGJvb2wgZGF0YV9iZWhpbmQoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6ZGF0YV9iZWhpbmQoZm9ybSk7CisgIH0KKworICAvLyBQb3NpdGlvbiB0aGUgY3Vyc29yIHRvIHRoZSBjdXJyZW50IGZpZWxkCisgIGlubGluZSB2b2lkIHBvc2l0aW9uX2N1cnNvciAoKSB7CisgICAgT25FcnJvciAoOjpwb3NfZm9ybV9jdXJzb3IgKGZvcm0pKTsKKyAgfQorICAvLyBTZXQgdGhlIGN1cnJlbnQgZmllbGQKKyAgaW5saW5lIHZvaWQgc2V0X2N1cnJlbnQoTkN1cnNlc0Zvcm1GaWVsZCYgRikgeworICAgIE9uRXJyb3IgKDo6c2V0X2N1cnJlbnRfZmllbGQoZm9ybSwgRi5maWVsZCkpOworICB9CisKKyAgLy8gUHJvdmlkZSBhIGRlZmF1bHQga2V5IHZpcnR1YWxpemF0aW9uLiBUcmFuc2xhdGUgdGhlIGtleWJvYXJkCisgIC8vIGNvZGUgYyBpbnRvIGEgZm9ybSByZXF1ZXN0IGNvZGUuCisgIC8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgaG9wZWZ1bGx5IHN0cmFpZ2h0Zm9yd2FyZAorICAvLyBtYXBwaW5nIGZvciB0aGUgbW9zdCBjb21tb24ga2V5c3Ryb2tlcyBhbmQgZm9ybSByZXF1ZXN0cy4KKyAgdmlydHVhbCBpbnQgdmlydHVhbGl6ZShpbnQgYyk7CisKKyAgLy8gT3BlcmF0b3JzCisgIGlubGluZSBOQ3Vyc2VzRm9ybUZpZWxkKiBvcGVyYXRvcltdKGludCBpKSBjb25zdCB7CisgICAgaWYgKCAoaSA8IDApIHx8IChpID49IDo6ZmllbGRfY291bnQgKGZvcm0pKSApCisgICAgICBPbkVycm9yIChFX0JBRF9BUkdVTUVOVCk7CisgICAgcmV0dXJuIG15X2ZpZWxkc1tpXTsKKyAgfQorCisgIC8vIFBlcmZvcm0gdGhlIG1lbnUncyBvcGVyYXRpb24KKyAgLy8gUmV0dXJuIHRoZSBmaWVsZCB3aGVyZSB5b3UgbGVmdCB0aGUgZm9ybS4KKyAgdmlydHVhbCBOQ3Vyc2VzRm9ybUZpZWxkKiBvcGVyYXRvcigpKHZvaWQpOworCisgIC8vIEV4Y2VwdGlvbiBoYW5kbGVycy4gVGhlIGRlZmF1bHQgaXMgYSBCZWVwLgorICB2aXJ0dWFsIHZvaWQgT25fUmVxdWVzdF9EZW5pZWQoaW50IGMpIGNvbnN0OworICB2aXJ0dWFsIHZvaWQgT25fSW52YWxpZF9GaWVsZChpbnQgYykgY29uc3Q7CisgIHZpcnR1YWwgdm9pZCBPbl9Vbmtub3duX0NvbW1hbmQoaW50IGMpIGNvbnN0OworCit9OworCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyBpcyB0aGUgdHlwaWNhbCBDKysgdHlwZXNhZmUgd2F5IHRvIGFsbG93IHRvIGF0dGFjaAorLy8gdXNlciBkYXRhIHRvIGEgZmllbGQgb2YgYSBmb3JtLiBJdHMgYXNzdW1lZCB0aGF0IHRoZSB1c2VyCisvLyBkYXRhIGJlbG9uZ3MgdG8gc29tZSBjbGFzcyBULiBVc2UgVCBhcyB0ZW1wbGF0ZSBhcmd1bWVudAorLy8gdG8gY3JlYXRlIGEgVXNlckZpZWxkLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1VzZXJGaWVsZCA6IHB1YmxpYyBOQ3Vyc2VzRm9ybUZpZWxkCit7CitwdWJsaWM6CisgIE5DdXJzZXNVc2VyRmllbGQgKGludCByb3dzLAorCQkgICAgaW50IG5jb2xzLAorCQkgICAgaW50IGZpcnN0X3JvdyA9IDAsCisJCSAgICBpbnQgZmlyc3RfY29sID0gMCwKKwkJICAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBTVEFUSUNfQ0FTVChUKikoMCksCisJCSAgICBpbnQgb2Zmc2NyZWVuX3Jvd3MgPSAwLAorCQkgICAgaW50IGFkZGl0aW9uYWxfYnVmZmVycyA9IDApCisgICAgOiBOQ3Vyc2VzRm9ybUZpZWxkIChyb3dzLCBuY29scywKKwkJCWZpcnN0X3JvdywgZmlyc3RfY29sLAorCQkJb2Zmc2NyZWVuX3Jvd3MsIGFkZGl0aW9uYWxfYnVmZmVycykgeworICAgICAgaWYgKGZpZWxkKQorCU9uRXJyb3IoOjpzZXRfZmllbGRfdXNlcnB0cihmaWVsZCwgU1RBVElDX0NBU1Qodm9pZCAqKShwX1VzZXJEYXRhKSkpOworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc1VzZXJGaWVsZCgpIHt9OworCisgIGlubGluZSBjb25zdCBUKiBVc2VyRGF0YSAodm9pZCkgY29uc3QgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPig6OmZpZWxkX3VzZXJwdHIgKGZpZWxkKSk7CisgIH0KKworICBpbmxpbmUgdmlydHVhbCB2b2lkIHNldFVzZXJEYXRhKGNvbnN0IFQqIHBfVXNlckRhdGEpIHsKKyAgICBpZiAoZmllbGQpCisgICAgICBPbkVycm9yICg6OnNldF9maWVsZF91c2VycHRyIChmaWVsZCwgU1RBVElDX0NBU1Qodm9pZCAqKShwX1VzZXJEYXRhKSkpOworICB9Cit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBzYW1lIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGF0dGFjaCB1c2VyIGRhdGEgdG8gYSBmb3JtCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1VzZXJGb3JtIDogcHVibGljIE5DdXJzZXNGb3JtCit7Citwcm90ZWN0ZWQ6CisgIC8vICdJbnRlcm5hbCcgY29uc3RydWN0b3IsIGJ1aWxkcyBhbiBvYmplY3Qgd2l0aG91dCBhc3NvY2lhdGlvbiB0byBhCisgIC8vIGZpZWxkIGFycmF5LgorICBOQ3Vyc2VzVXNlckZvcm0oIGludCAgbmxpbmVzLAorCQkgICBpbnQgIG5jb2xzLAorCQkgICBpbnQgIGJlZ2luX3kgPSAwLAorCQkgICBpbnQgIGJlZ2luX3ggPSAwLAorCQkgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApKQorICAgIDogTkN1cnNlc0Zvcm0obmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCkgeworICAgICAgaWYgKGZvcm0pCisJc2V0X3VzZXIgKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH0KKworcHVibGljOgorICBOQ3Vyc2VzVXNlckZvcm0gKE5DdXJzZXNGb3JtRmllbGQgRmllbGRzW10sCisJCSAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBTVEFUSUNfQ0FTVChUKikoMCksCisJCSAgIGJvb2wgd2l0aF9mcmFtZT1GQUxTRSwKKwkJICAgYm9vbCBhdXRvRGVsZXRlX0ZpZWxkcz1GQUxTRSkKKyAgICA6IE5DdXJzZXNGb3JtIChGaWVsZHMsIHdpdGhfZnJhbWUsIGF1dG9EZWxldGVfRmllbGRzKSB7CisgICAgICBpZiAoZm9ybSkKKwlzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfTsKKworICBOQ3Vyc2VzVXNlckZvcm0gKE5DdXJzZXNGb3JtRmllbGQgRmllbGRzW10sCisJCSAgIGludCBubGluZXMsCisJCSAgIGludCBuY29scywKKwkJICAgaW50IGJlZ2luX3kgPSAwLAorCQkgICBpbnQgYmVnaW5feCA9IDAsCisJCSAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBTVEFUSUNfQ0FTVChUKikoMCksCisJCSAgIGJvb2wgd2l0aF9mcmFtZT1GQUxTRSwKKwkJICAgYm9vbCBhdXRvRGVsZXRlX0ZpZWxkcz1GQUxTRSkKKyAgICA6IE5DdXJzZXNGb3JtIChGaWVsZHMsIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gsCisJCSAgIHdpdGhfZnJhbWUsIGF1dG9EZWxldGVfRmllbGRzKSB7CisgICAgICBpZiAoZm9ybSkKKwlzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfTsKKworICB2aXJ0dWFsIH5OQ3Vyc2VzVXNlckZvcm0oKSB7CisgIH07CisKKyAgaW5saW5lIFQqIFVzZXJEYXRhICh2b2lkKSBjb25zdCB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGdldF91c2VyICgpKTsKKyAgfTsKKworICBpbmxpbmUgdmlydHVhbCB2b2lkIHNldFVzZXJEYXRhIChjb25zdCBUKiBwX1VzZXJEYXRhKSB7CisgICAgaWYgKGZvcm0pCisgICAgICBzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfQorCit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJ1aWx0aW4gRmllbGR0eXBlcworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIEFscGhhX0ZpZWxkIDogcHVibGljIE5DdXJzZXNGaWVsZFR5cGUKK3sKK3ByaXZhdGU6CisgIGludCBtaW5fZmllbGRfd2lkdGg7CisKKyAgdm9pZCBzZXQoTkN1cnNlc0Zvcm1GaWVsZCYgZikgeworICAgIE9uRXJyb3IoOjpzZXRfZmllbGRfdHlwZShmLmdldF9maWVsZCgpLGZpZWxkdHlwZSxtaW5fZmllbGRfd2lkdGgpKTsKKyAgfQorCitwdWJsaWM6CisgIEFscGhhX0ZpZWxkKGludCB3aWR0aCkKKyAgICA6IE5DdXJzZXNGaWVsZFR5cGUoVFlQRV9BTFBIQSksCisgICAgICBtaW5fZmllbGRfd2lkdGgod2lkdGgpIHsKKyAgfQorfTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgQWxwaGFudW1lcmljX0ZpZWxkIDogcHVibGljIE5DdXJzZXNGaWVsZFR5cGUKK3sKK3ByaXZhdGU6CisgIGludCBtaW5fZmllbGRfd2lkdGg7CisKKyAgdm9pZCBzZXQoTkN1cnNlc0Zvcm1GaWVsZCYgZikgeworICAgIE9uRXJyb3IoOjpzZXRfZmllbGRfdHlwZShmLmdldF9maWVsZCgpLGZpZWxkdHlwZSxtaW5fZmllbGRfd2lkdGgpKTsKKyAgfQorCitwdWJsaWM6CisgIEFscGhhbnVtZXJpY19GaWVsZChpbnQgd2lkdGgpCisgICAgOiBOQ3Vyc2VzRmllbGRUeXBlKFRZUEVfQUxOVU0pLAorICAgICAgbWluX2ZpZWxkX3dpZHRoKHdpZHRoKSB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIEludGVnZXJfRmllbGQgOiBwdWJsaWMgTkN1cnNlc0ZpZWxkVHlwZQoreworcHJpdmF0ZToKKyAgaW50IHByZWNpc2lvbjsKKyAgbG9uZyBsb3dlcl9saW1pdCwgdXBwZXJfbGltaXQ7CisKKyAgdm9pZCBzZXQoTkN1cnNlc0Zvcm1GaWVsZCYgZikgeworICAgIE9uRXJyb3IoOjpzZXRfZmllbGRfdHlwZShmLmdldF9maWVsZCgpLGZpZWxkdHlwZSwKKwkJCSAgICAgcHJlY2lzaW9uLGxvd2VyX2xpbWl0LHVwcGVyX2xpbWl0KSk7CisgIH0KKworcHVibGljOgorICBJbnRlZ2VyX0ZpZWxkKGludCBwcmVjLCBsb25nIGxvdz0wTCwgbG9uZyBoaWdoPTBMKQorICAgIDogTkN1cnNlc0ZpZWxkVHlwZShUWVBFX0lOVEVHRVIpLAorICAgICAgcHJlY2lzaW9uKHByZWMpLCBsb3dlcl9saW1pdChsb3cpLCB1cHBlcl9saW1pdChoaWdoKSB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE51bWVyaWNfRmllbGQgOiBwdWJsaWMgTkN1cnNlc0ZpZWxkVHlwZQoreworcHJpdmF0ZToKKyAgaW50IHByZWNpc2lvbjsKKyAgZG91YmxlIGxvd2VyX2xpbWl0LCB1cHBlcl9saW1pdDsKKworICB2b2lkIHNldChOQ3Vyc2VzRm9ybUZpZWxkJiBmKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF90eXBlKGYuZ2V0X2ZpZWxkKCksZmllbGR0eXBlLAorCQkJICAgICBwcmVjaXNpb24sbG93ZXJfbGltaXQsdXBwZXJfbGltaXQpKTsKKyAgfQorCitwdWJsaWM6CisgIE51bWVyaWNfRmllbGQoaW50IHByZWMsIGRvdWJsZSBsb3c9MC4wLCBkb3VibGUgaGlnaD0wLjApCisgICAgOiBOQ3Vyc2VzRmllbGRUeXBlKFRZUEVfTlVNRVJJQyksCisgICAgICBwcmVjaXNpb24ocHJlYyksIGxvd2VyX2xpbWl0KGxvdyksIHVwcGVyX2xpbWl0KGhpZ2gpIHsKKyAgfQorfTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkIDogcHVibGljIE5DdXJzZXNGaWVsZFR5cGUKK3sKK3ByaXZhdGU6CisgIGNoYXIqIHJlZ2V4OworCisgIHZvaWQgc2V0KE5DdXJzZXNGb3JtRmllbGQmIGYpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX3R5cGUoZi5nZXRfZmllbGQoKSxmaWVsZHR5cGUscmVnZXgpKTsKKyAgfQorCisgIHZvaWQgY29weV9yZWdleChjb25zdCBjaGFyICpzb3VyY2UpCisgIHsKKyAgICByZWdleCA9IG5ldyBjaGFyWzEgKyA6OnN0cmxlbihzb3VyY2UpXTsKKyAgICAoOjpzdHJjcHkpKHJlZ2V4LCBzb3VyY2UpOworICB9CisKK3B1YmxpYzoKKyAgUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkKGNvbnN0IGNoYXIgKmV4cHIpCisgICAgOiBOQ3Vyc2VzRmllbGRUeXBlKFRZUEVfUkVHRVhQKSwKKyAgICAgIHJlZ2V4KE5VTEwpCisgIHsKKyAgICBjb3B5X3JlZ2V4KGV4cHIpOworICB9CisKKyAgUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkJiBvcGVyYXRvcj0oY29uc3QgUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICAgIGNvcHlfcmVnZXgocmhzLnJlZ2V4KTsKKyAgICAgIE5DdXJzZXNGaWVsZFR5cGU6Om9wZXJhdG9yPShyaHMpOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBSZWd1bGFyX0V4cHJlc3Npb25fRmllbGQoY29uc3QgUmVndWxhcl9FeHByZXNzaW9uX0ZpZWxkJiByaHMpCisgICAgOiBOQ3Vyc2VzRmllbGRUeXBlKHJocyksCisgICAgICByZWdleChOVUxMKQorICB7CisgICAgY29weV9yZWdleChyaHMucmVnZXgpOworICB9CisKKyAgflJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZCgpIHsKKyAgICBkZWxldGVbXSByZWdleDsKKyAgfQorfTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgRW51bWVyYXRpb25fRmllbGQgOiBwdWJsaWMgTkN1cnNlc0ZpZWxkVHlwZQoreworcHJpdmF0ZToKKyAgY29uc3QgY2hhcioqIGxpc3Q7CisgIGludCBjYXNlX3NlbnNpdGl2ZTsKKyAgaW50IG5vbl91bmlxdWVfbWF0Y2hlczsKKworICB2b2lkIHNldChOQ3Vyc2VzRm9ybUZpZWxkJiBmKSB7CisgICAgT25FcnJvcig6OnNldF9maWVsZF90eXBlKGYuZ2V0X2ZpZWxkKCksZmllbGR0eXBlLAorCQkJICAgICBsaXN0LGNhc2Vfc2Vuc2l0aXZlLG5vbl91bmlxdWVfbWF0Y2hlcykpOworICB9CitwdWJsaWM6CisgIEVudW1lcmF0aW9uX0ZpZWxkKGNvbnN0IGNoYXIqIGVudW1zW10sCisJCSAgICBib29sIGNhc2Vfc2Vucz1GQUxTRSwKKwkJICAgIGJvb2wgbm9uX3VuaXF1ZT1GQUxTRSkKKyAgICA6IE5DdXJzZXNGaWVsZFR5cGUoVFlQRV9FTlVNKSwKKyAgICAgIGxpc3QoZW51bXMpLAorICAgICAgY2FzZV9zZW5zaXRpdmUoY2FzZV9zZW5zID8gLTEgOiAwKSwKKyAgICAgIG5vbl91bmlxdWVfbWF0Y2hlcyhub25fdW5pcXVlID8gLTEgOiAwKSB7CisgIH0KKworICBFbnVtZXJhdGlvbl9GaWVsZCYgb3BlcmF0b3I9KGNvbnN0IEVudW1lcmF0aW9uX0ZpZWxkJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICAgIE5DdXJzZXNGaWVsZFR5cGU6Om9wZXJhdG9yPShyaHMpOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBFbnVtZXJhdGlvbl9GaWVsZChjb25zdCBFbnVtZXJhdGlvbl9GaWVsZCYgcmhzKQorICAgIDogTkN1cnNlc0ZpZWxkVHlwZShyaHMpLAorICAgICAgbGlzdChyaHMubGlzdCksCisgICAgICBjYXNlX3NlbnNpdGl2ZShyaHMuY2FzZV9zZW5zaXRpdmUpLAorICAgICAgbm9uX3VuaXF1ZV9tYXRjaGVzKHJocy5ub25fdW5pcXVlX21hdGNoZXMpCisgIHsKKyAgfQorfTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgSVBWNF9BZGRyZXNzX0ZpZWxkIDogcHVibGljIE5DdXJzZXNGaWVsZFR5cGUKK3sKK3ByaXZhdGU6CisgIHZvaWQgc2V0KE5DdXJzZXNGb3JtRmllbGQmIGYpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX3R5cGUoZi5nZXRfZmllbGQoKSxmaWVsZHR5cGUpKTsKKyAgfQorCitwdWJsaWM6CisgIElQVjRfQWRkcmVzc19GaWVsZCgpIDogTkN1cnNlc0ZpZWxkVHlwZShUWVBFX0lQVjQpIHsKKyAgfQorfTsKKworZXh0ZXJuICJDIiB7CisgIGJvb2wgX25jX3h4X2ZsZF9mY2hlY2soRklFTEQgKiwgY29uc3Qgdm9pZCopOworICBib29sIF9uY194eF9mbGRfY2NoZWNrKGludCBjLCBjb25zdCB2b2lkICopOworICB2b2lkKiBfbmNfeHhfZmxkX21ha2VhcmcodmFfbGlzdCopOworfQorCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgVXNlci1EZWZpbmVkIEZpZWxkdHlwZXMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBVc2VyRGVmaW5lZEZpZWxkVHlwZSA6IHB1YmxpYyBOQ3Vyc2VzRmllbGRUeXBlCit7CisgIGZyaWVuZCBjbGFzcyBVREZfSW5pdDsgLy8gSW50ZXJuYWwgaGVscGVyIHRvIHNldCB1cCBzdGF0aWNzCitwcml2YXRlOgorICAvLyBGb3IgYWxsIEMrKyBkZWZpbmVkIGZpZWxkdHlwZXMgd2UgbmVlZCBvbmx5IG9uZSBnZW5lcmljIGxvd2xldmVsCisgIC8vIEZJRUxEVFlQRSogZWxlbWVudC4KKyAgc3RhdGljIEZJRUxEVFlQRSogZ2VuZXJpY19maWVsZHR5cGU7CisKK3Byb3RlY3RlZDoKKyAgLy8gVGhpcyBhcmUgdGhlIGZ1bmN0aW9ucyByZXF1aXJlZCBieSB0aGUgbG93IGxldmVsIGxpYmZvcm1zIGZ1bmN0aW9ucworICAvLyB0byBjb25zdHJ1Y3QgYSBmaWVsZHR5cGUuCisgIGZyaWVuZCBib29sIF9uY194eF9mbGRfZmNoZWNrKEZJRUxEICosIGNvbnN0IHZvaWQqKTsKKyAgZnJpZW5kIGJvb2wgX25jX3h4X2ZsZF9jY2hlY2soaW50IGMsIGNvbnN0IHZvaWQgKik7CisgIGZyaWVuZCB2b2lkKiBfbmNfeHhfZmxkX21ha2VhcmcodmFfbGlzdCopOworCisgIHZvaWQgc2V0KE5DdXJzZXNGb3JtRmllbGQmIGYpIHsKKyAgICBPbkVycm9yKDo6c2V0X2ZpZWxkX3R5cGUoZi5nZXRfZmllbGQoKSxmaWVsZHR5cGUsJmYpKTsKKyAgfQorCitwcm90ZWN0ZWQ6CisgIC8vIFJlZGVmaW5lIHRoaXMgZnVuY3Rpb24gdG8gZG8gYSBmaWVsZCB2YWxpZGF0aW9uLiBUaGUgYXJndW1lbnQKKyAgLy8gaXMgYSByZWZlcmVuY2UgdG8gdGhlIGZpZWxkIHlvdSBzaG91bGQgdmFsaWRhdGUuCisgIHZpcnR1YWwgYm9vbCBmaWVsZF9jaGVjayhOQ3Vyc2VzRm9ybUZpZWxkJiBmKSA9IDA7CisKKyAgLy8gUmVkZWZpbmUgdGhpcyBmdW5jdGlvbiB0byBkbyBhIGNoYXJhY3RlciB2YWxpZGF0aW9uLiBUaGUgYXJndW1lbnQKKyAgLy8gaXMgdGhlIGNoYXJhY3RlciB0byBiZSB2YWxpZGF0ZWQuCisgIHZpcnR1YWwgYm9vbCBjaGFyX2NoZWNrIChpbnQgYykgPSAwOworCitwdWJsaWM6CisgIFVzZXJEZWZpbmVkRmllbGRUeXBlKCkgOiBOQ3Vyc2VzRmllbGRUeXBlKGdlbmVyaWNfZmllbGR0eXBlKSB7CisgIH0KK307CisKK2V4dGVybiAiQyIgeworICBib29sIF9uY194eF9uZXh0X2Nob2ljZShGSUVMRCosIGNvbnN0IHZvaWQgKik7CisgIGJvb2wgX25jX3h4X3ByZXZfY2hvaWNlKEZJRUxEKiwgY29uc3Qgdm9pZCAqKTsKK30KKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIFVzZXItRGVmaW5lZCBGaWVsZHR5cGVzIHdpdGggQ2hvaWNlIGZ1bmN0aW9ucworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIFVzZXJEZWZpbmVkRmllbGRUeXBlX1dpdGhfQ2hvaWNlIDogcHVibGljIFVzZXJEZWZpbmVkRmllbGRUeXBlCit7CisgIGZyaWVuZCBjbGFzcyBVREZfSW5pdDsgLy8gSW50ZXJuYWwgaGVscGVyIHRvIHNldCB1cCBzdGF0aWNzCitwcml2YXRlOgorICAvLyBGb3IgYWxsIEMrKyBkZWZpbmVkIGZpZWxkdHlwZXMgd2l0aCBjaG9pY2UgZnVuY3Rpb25zIHdlIG5lZWQgb25seSBvbmUKKyAgLy8gZ2VuZXJpYyBsb3dsZXZlbCBGSUVMRFRZUEUqIGVsZW1lbnQuCisgIHN0YXRpYyBGSUVMRFRZUEUqIGdlbmVyaWNfZmllbGR0eXBlX3dpdGhfY2hvaWNlOworCisgIC8vIFRoaXMgYXJlIHRoZSBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgdGhlIGxvdyBsZXZlbCBsaWJmb3JtcyBmdW5jdGlvbnMKKyAgLy8gdG8gY29uc3RydWN0IGEgZmllbGR0eXBlIHdpdGggY2hvaWNlIGZ1bmN0aW9ucy4KKyAgZnJpZW5kIGJvb2wgX25jX3h4X25leHRfY2hvaWNlKEZJRUxEKiwgY29uc3Qgdm9pZCAqKTsKKyAgZnJpZW5kIGJvb2wgX25jX3h4X3ByZXZfY2hvaWNlKEZJRUxEKiwgY29uc3Qgdm9pZCAqKTsKKworcHJvdGVjdGVkOgorICAvLyBSZWRlZmluZSB0aGlzIGZ1bmN0aW9uIHRvIGRvIHRoZSByZXRyaWV2YWwgb2YgdGhlIG5leHQgY2hvaWNlIHZhbHVlLgorICAvLyBUaGUgYXJndW1lbnQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGZpZWxkIHRvYmUgZXhhbWluZWQuCisgIHZpcnR1YWwgYm9vbCBuZXh0ICAgIChOQ3Vyc2VzRm9ybUZpZWxkJiBmKSA9IDA7CisKKyAgLy8gUmVkZWZpbmUgdGhpcyBmdW5jdGlvbiB0byBkbyB0aGUgcmV0cmlldmFsIG9mIHRoZSBwcmV2aW91cyBjaG9pY2UgdmFsdWUuCisgIC8vIFRoZSBhcmd1bWVudCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZmllbGQgdG9iZSBleGFtaW5lZC4KKyAgdmlydHVhbCBib29sIHByZXZpb3VzKE5DdXJzZXNGb3JtRmllbGQmIGYpID0gMDsKKworcHVibGljOgorICBVc2VyRGVmaW5lZEZpZWxkVHlwZV9XaXRoX0Nob2ljZSgpIHsKKyAgICBmaWVsZHR5cGUgPSBnZW5lcmljX2ZpZWxkdHlwZV93aXRoX2Nob2ljZTsKKyAgfQorfTsKKworI2VuZGlmIC8qIE5DVVJTRVNfQ1VSU0VTRl9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2MrKy9jdXJzZXNtLmNjIGIvbmN1cnNlcy01LjcvYysrL2N1cnNlc20uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1M2E2NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9jdXJzZXNtLmNjCkBAIC0wLDAgKzEsNDA3IEBACisvLyAqIHRoaXMgaXMgZm9yIG1ha2luZyBlbWFjcyBoYXBweTogLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiY3Vyc2VzbS5oIgorI2luY2x1ZGUgImN1cnNlc2FwcC5oIgorCitNT0RVTEVfSUQoIiRJZDogY3Vyc2VzbS5jYyx2IDEuMjIgMjAwNS8wNC8wMiAyMDozOTowNSB0b20gRXhwICQiKQorCitOQ3Vyc2VzTWVudUl0ZW06On5OQ3Vyc2VzTWVudUl0ZW0oKQoreworICBpZiAoaXRlbSkKKyAgICBPbkVycm9yKDo6ZnJlZV9pdGVtKGl0ZW0pKTsKK30KKworYm9vbAorTkN1cnNlc01lbnVJdGVtOjphY3Rpb24oKQoreworICByZXR1cm4gRkFMU0U7Cit9CisKK05DdXJzZXNNZW51Q2FsbGJhY2tJdGVtOjp+TkN1cnNlc01lbnVDYWxsYmFja0l0ZW0oKQoreworfQorCitib29sCitOQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbTo6YWN0aW9uKCkKK3sKKyAgaWYgKHBfZmN0KQorICAgIHJldHVybiBwX2ZjdCAoKnRoaXMpOworICBlbHNlCisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKiBJbnRlcm5hbCBob29rIGZ1bmN0aW9ucy4gVGhleSB3aWxsIHJvdXRlIHRoZSBob29rCisgKiBjYWxscyB0byB2aXJ0dWFsIG1ldGhvZHMgb2YgdGhlIE5DdXJzZXNNZW51IGNsYXNzLAorICogc28gaW4gQysrIHByb3ZpZGluZyBhIGhvb2sgaXMgZG9uZSBzaW1wbHkgYnkKKyAqIGltcGxlbWVudGluZyBhIHZpcnR1YWwgbWV0aG9kIGluIGEgZGVyaXZlZCBjbGFzcworICovCit2b2lkCitfbmNfeHhfbW51X2luaXQoTUVOVSAqbSkKK3sKKyAgTkN1cnNlc01lbnU6OmdldEhvb2sobSktPk9uX01lbnVfSW5pdCgpOworfQorCit2b2lkCitfbmNfeHhfbW51X3Rlcm0oTUVOVSAqbSkKK3sKKyAgTkN1cnNlc01lbnU6OmdldEhvb2sobSktPk9uX01lbnVfVGVybWluYXRpb24oKTsKK30KKwordm9pZAorX25jX3h4X2l0bV9pbml0KE1FTlUgKm0pCit7CisgIE5DdXJzZXNNZW51KiBNID0gTkN1cnNlc01lbnU6OmdldEhvb2sobSk7CisgIE0tPk9uX0l0ZW1fSW5pdCAoKihNLT5jdXJyZW50X2l0ZW0gKCkpKTsKK30KKwordm9pZAorX25jX3h4X2l0bV90ZXJtKE1FTlUgKm0pCit7CisgIE5DdXJzZXNNZW51KiBNID0gTkN1cnNlc01lbnU6OmdldEhvb2sobSk7CisgIE0tPk9uX0l0ZW1fVGVybWluYXRpb24gKCooTS0+Y3VycmVudF9pdGVtICgpKSk7Cit9CisKKy8qIENvbnN0cnVjdCBhbiBJVEVNKiBhcnJheSBmcm9tIGFuIGFycmF5IG9mIE5DdXJzZXNNZW51SXRlbQorICogb2JqZWN0cy4KKyAqLworSVRFTSoqCitOQ3Vyc2VzTWVudTo6bWFwSXRlbXMoTkN1cnNlc01lbnVJdGVtKiBuaXRlbXNbXSkKK3sKKyAgaW50IGl0ZW1Db3VudCA9IDAsbGN2OworCisgIGZvciAobGN2PTA7IG5pdGVtc1tsY3ZdLT5pdGVtOyArK2xjdikKKyAgICArK2l0ZW1Db3VudDsKKworICBJVEVNKiogaXRlbUFycmF5ID0gbmV3IElURU0qW2l0ZW1Db3VudCArIDFdOworCisgIGZvciAobGN2PTA7bml0ZW1zW2xjdl0tPml0ZW07KytsY3YpIHsKKyAgICBpdGVtQXJyYXlbbGN2XSA9IG5pdGVtc1tsY3ZdLT5pdGVtOworICB9CisgIGl0ZW1BcnJheVtsY3ZdID0gTlVMTDsKKworICBteV9pdGVtcyA9IG5pdGVtczsKKworICBpZiAobWVudSkKKyAgICBkZWxldGVbXSA6Om1lbnVfaXRlbXMobWVudSk7CisgIHJldHVybiBpdGVtQXJyYXk7Cit9CisKK3ZvaWQKK05DdXJzZXNNZW51OjpJbml0TWVudShOQ3Vyc2VzTWVudUl0ZW0qIG5pdGVtc1tdLAorCQkgICAgICBib29sIHdpdGhfZnJhbWUsCisJCSAgICAgIGJvb2wgYXV0b0RlbGV0ZV9JdGVtcykKK3sKKyAgaW50IG1yb3dzLCBtY29sczsKKworICBrZXlwYWQoVFJVRSk7CisgIG1ldGEoVFJVRSk7CisKKyAgYl9mcmFtZWQgPSB3aXRoX2ZyYW1lOworICBiX2F1dG9EZWxldGUgPSBhdXRvRGVsZXRlX0l0ZW1zOworCisgIG1lbnUgPSBzdGF0aWNfY2FzdDxNRU5VKj4oMCk7CisgIG1lbnUgPSA6Om5ld19tZW51KG1hcEl0ZW1zKG5pdGVtcykpOworICBpZiAoIW1lbnUpCisgICAgT25FcnJvciAoRV9TWVNURU1fRVJST1IpOworCisgIFVzZXJIb29rKiBob29rID0gbmV3IFVzZXJIb29rOworICBob29rLT5tX3VzZXIgICA9IE5VTEw7CisgIGhvb2stPm1fYmFjayAgID0gdGhpczsKKyAgaG9vay0+bV9vd25lciAgPSBtZW51OworICA6OnNldF9tZW51X3VzZXJwdHIobWVudSwgc3RhdGljX2Nhc3Q8dm9pZCo+KGhvb2spKTsKKworICA6OnNldF9tZW51X2luaXQgKG1lbnUsIF9uY194eF9tbnVfaW5pdCk7CisgIDo6c2V0X21lbnVfdGVybSAobWVudSwgX25jX3h4X21udV90ZXJtKTsKKyAgOjpzZXRfaXRlbV9pbml0IChtZW51LCBfbmNfeHhfaXRtX2luaXQpOworICA6OnNldF9pdGVtX3Rlcm0gKG1lbnUsIF9uY194eF9pdG1fdGVybSk7CisKKyAgc2NhbGUobXJvd3MsIG1jb2xzKTsKKyAgOjpzZXRfbWVudV93aW4obWVudSwgdyk7CisKKyAgaWYgKHdpdGhfZnJhbWUpIHsKKyAgICBpZiAoKG1yb3dzID4gaGVpZ2h0KCktMikgfHwgKG1jb2xzID4gd2lkdGgoKS0yKSkKKyAgICAgIE9uRXJyb3IoRV9OT19ST09NKTsKKyAgICBzdWIgPSBuZXcgTkN1cnNlc1dpbmRvdygqdGhpcyxtcm93cyxtY29scywxLDEsJ3InKTsKKyAgICA6OnNldF9tZW51X3N1YihtZW51LCBzdWItPncpOworICAgIGJfc3ViX293bmVyID0gVFJVRTsKKyAgfQorICBlbHNlIHsKKyAgICBzdWIgPSBzdGF0aWNfY2FzdDxOQ3Vyc2VzV2luZG93Kj4oMCk7CisgICAgYl9zdWJfb3duZXIgPSBGQUxTRTsKKyAgfQorICBzZXREZWZhdWx0QXR0cmlidXRlcygpOworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6c2V0RGVmYXVsdEF0dHJpYnV0ZXMoKQoreworICBOQ3Vyc2VzQXBwbGljYXRpb24qIFMgPSBOQ3Vyc2VzQXBwbGljYXRpb246OmdldEFwcGxpY2F0aW9uKCk7CisgIGlmIChTKSB7CisgICAgOjpzZXRfbWVudV9mb3JlKG1lbnUsIFMtPmZvcmVncm91bmRzKCkpOworICAgIDo6c2V0X21lbnVfYmFjayhtZW51LCBTLT5iYWNrZ3JvdW5kcygpKTsKKyAgICA6OnNldF9tZW51X2dyZXkobWVudSwgUy0+aW5hY3RpdmVzKCkpOworICB9Cit9CisKK05DdXJzZXNNZW51Ojp+TkN1cnNlc01lbnUoKQoreworICBVc2VySG9vayogaG9vayA9IHJlaW50ZXJwcmV0X2Nhc3Q8VXNlckhvb2sqPig6Om1lbnVfdXNlcnB0cihtZW51KSk7CisgIGRlbGV0ZSBob29rOworICBpZiAoYl9zdWJfb3duZXIpIHsKKyAgICBkZWxldGUgc3ViOworICAgIDo6c2V0X21lbnVfc3ViKG1lbnUsIHN0YXRpY19jYXN0PFdJTkRPVyAqPigwKSk7CisgIH0KKyAgaWYgKG1lbnUpIHsKKyAgICBJVEVNKiogaXRtcyA9IDo6bWVudV9pdGVtcyhtZW51KTsKKyAgICBpbnQgY250ID0gY291bnQoKTsKKworICAgIE9uRXJyb3IoOjpzZXRfbWVudV9pdGVtcyhtZW51LCBzdGF0aWNfY2FzdDxJVEVNKio+KDApKSk7CisKKyAgICBpZiAoYl9hdXRvRGVsZXRlKSB7CisgICAgICBpZiAoY250PjApIHsKKwlmb3IgKGludCBpPTA7IGkgPD0gY250OyBpKyspCisJICBkZWxldGUgbXlfaXRlbXNbaV07CisgICAgICB9CisgICAgICBkZWxldGVbXSBteV9pdGVtczsKKyAgICB9CisKKyAgICA6OmZyZWVfbWVudShtZW51KTsKKyAgICAvLyBJdCdzIGVzc2VudGlhbCB0byBkbyB0aGlzIGFmdGVyIGZyZWVfbWVudSgpCisgICAgZGVsZXRlW10gaXRtczsKKyAgfQorfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6c2V0U3ViV2luZG93KE5DdXJzZXNXaW5kb3cmIG5zdWIpCit7CisgIGlmICghaXNEZXNjZW5kYW50KG5zdWIpKQorICAgIE9uRXJyb3IoRV9TWVNURU1fRVJST1IpOworICBlbHNlIHsKKyAgICBpZiAoYl9zdWJfb3duZXIpCisgICAgICBkZWxldGUgc3ViOworICAgIHN1YiA9ICZuc3ViOworICAgIDo6c2V0X21lbnVfc3ViKG1lbnUsc3ViLT53KTsKKyAgfQorfQorCitib29sCitOQ3Vyc2VzTWVudTo6c2V0X3BhdHRlcm4gKGNvbnN0IGNoYXIgKnBhdCkKK3sKKyAgaW50IHJlcyA9IDo6c2V0X21lbnVfcGF0dGVybiAobWVudSwgcGF0KTsKKyAgc3dpdGNoKHJlcykgeworICBjYXNlIEVfT0s6CisgICAgYnJlYWs7CisgIGNhc2UgRV9OT19NQVRDSDoKKyAgICByZXR1cm4gRkFMU0U7CisgIGRlZmF1bHQ6CisgICAgT25FcnJvciAocmVzKTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworLy8gY2FsbCB0aGUgbWVudSBkcml2ZXIgYW5kIGRvIGJhc2ljIGVycm9yIGNoZWNraW5nLgoraW50CitOQ3Vyc2VzTWVudTo6ZHJpdmVyIChpbnQgYykKK3sKKyAgaW50IHJlcyA9IDo6bWVudV9kcml2ZXIgKG1lbnUsIGMpOworICBzd2l0Y2ggKHJlcykgeworICBjYXNlIEVfT0s6CisgIGNhc2UgRV9SRVFVRVNUX0RFTklFRDoKKyAgY2FzZSBFX05PVF9TRUxFQ1RBQkxFOgorICBjYXNlIEVfVU5LTk9XTl9DT01NQU5EOgorICBjYXNlIEVfTk9fTUFUQ0g6CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgT25FcnJvciAocmVzKTsKKyAgfQorICByZXR1cm4gKHJlcyk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgQ01EX1FVSVQgICA9IE1BWF9DT01NQU5EICsgMTsKK3N0YXRpYyBjb25zdCBpbnQgQ01EX0FDVElPTiA9IE1BWF9DT01NQU5EICsgMjsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcm92aWRlIGEgZGVmYXVsdCBrZXkgdmlydHVhbGl6YXRpb24uIFRyYW5zbGF0ZSB0aGUga2V5Ym9hcmQKKy8vIGNvZGUgYyBpbnRvIGEgbWVudSByZXF1ZXN0IGNvZGUuCisvLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIGhvcGVmdWxseSBzdHJhaWdodGZvcndhcmQKKy8vIG1hcHBpbmcgZm9yIHRoZSBtb3N0IGNvbW1vbiBrZXlzdHJva2VzIGFuZCBtZW51IHJlcXVlc3RzLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50CitOQ3Vyc2VzTWVudTo6dmlydHVhbGl6ZShpbnQgYykKK3sKKyAgc3dpdGNoKGMpIHsKKyAgY2FzZSBDVFJMKCdYJykgICAgIDogcmV0dXJuKENNRF9RVUlUKTsgICAgICAgICAgICAgIC8vIGVYaXQKKworICBjYXNlIEtFWV9ET1dOICAgICAgOiByZXR1cm4oUkVRX0RPV05fSVRFTSk7CisgIGNhc2UgQ1RSTCgnTicpICAgICA6IHJldHVybihSRVFfTkVYVF9JVEVNKTsgICAgICAgICAvLyBOZXh0CisgIGNhc2UgS0VZX1VQICAgICAgICA6IHJldHVybihSRVFfVVBfSVRFTSk7CisgIGNhc2UgQ1RSTCgnUCcpICAgICA6IHJldHVybihSRVFfUFJFVl9JVEVNKTsgICAgICAgICAvLyBQcmV2aW91cworCisgIGNhc2UgQ1RSTCgnVScpICAgICA6IHJldHVybihSRVFfU0NSX1VMSU5FKTsgICAgICAgICAvLyBVcAorICBjYXNlIENUUkwoJ0QnKSAgICAgOiByZXR1cm4oUkVRX1NDUl9ETElORSk7ICAgICAgICAgLy8gRG93bgorICBjYXNlIENUUkwoJ0YnKSAgICAgOiByZXR1cm4oUkVRX1NDUl9EUEFHRSk7ICAgICAgICAgLy8gRm9yd2FyZAorICBjYXNlIENUUkwoJ0InKSAgICAgOiByZXR1cm4oUkVRX1NDUl9VUEFHRSk7ICAgICAgICAgLy8gQmFja3dhcmQKKworICBjYXNlIENUUkwoJ1knKSAgICAgOiByZXR1cm4oUkVRX0NMRUFSX1BBVFRFUk4pOworICBjYXNlIENUUkwoJ0gnKSAgICAgOiByZXR1cm4oUkVRX0JBQ0tfUEFUVEVSTik7CisgIGNhc2UgQ1RSTCgnQScpICAgICA6IHJldHVybihSRVFfTkVYVF9NQVRDSCk7CisgIGNhc2UgQ1RSTCgnRScpICAgICA6IHJldHVybihSRVFfUFJFVl9NQVRDSCk7CisgIGNhc2UgQ1RSTCgnVCcpICAgICA6IHJldHVybihSRVFfVE9HR0xFX0lURU0pOworCisgIGNhc2UgQ1RSTCgnSicpICAgICA6CisgIGNhc2UgQ1RSTCgnTScpICAgICA6IHJldHVybihDTURfQUNUSU9OKTsKKworICBjYXNlIEtFWV9IT01FICAgICAgOiByZXR1cm4oUkVRX0ZJUlNUX0lURU0pOworICBjYXNlIEtFWV9MRUZUICAgICAgOiByZXR1cm4oUkVRX0xFRlRfSVRFTSk7CisgIGNhc2UgS0VZX1JJR0hUICAgICA6IHJldHVybihSRVFfUklHSFRfSVRFTSk7CisgIGNhc2UgS0VZX0VORCAgICAgICA6IHJldHVybihSRVFfTEFTVF9JVEVNKTsKKyAgY2FzZSBLRVlfQkFDS1NQQUNFIDogcmV0dXJuKFJFUV9CQUNLX1BBVFRFUk4pOworICBjYXNlIEtFWV9OUEFHRSAgICAgOiByZXR1cm4oUkVRX1NDUl9EUEFHRSk7CisgIGNhc2UgS0VZX1BQQUdFICAgICA6IHJldHVybihSRVFfU0NSX1VQQUdFKTsKKworICBkZWZhdWx0OgorICAgIHJldHVybihjKTsKKyAgfQorfQorCitOQ3Vyc2VzTWVudUl0ZW0qCitOQ3Vyc2VzTWVudTo6b3BlcmF0b3IoKSh2b2lkKQoreworICBpbnQgZHJ2Q21uZDsKKyAgaW50IGVycjsKKyAgaW50IGM7CisgIGJvb2wgYl9hY3Rpb24gPSBGQUxTRTsKKworICBwb3N0KCk7CisgIHNob3coKTsKKyAgcmVmcmVzaCgpOworCisgIHdoaWxlICghYl9hY3Rpb24gJiYgKChkcnZDbW5kID0gdmlydHVhbGl6ZSgoYz1nZXRLZXkoKSkpKSAhPSBDTURfUVVJVCkpIHsKKworICAgIHN3aXRjaCgoZXJyPWRyaXZlcihkcnZDbW5kKSkpIHsKKyAgICBjYXNlIEVfUkVRVUVTVF9ERU5JRUQ6CisgICAgICBPbl9SZXF1ZXN0X0RlbmllZChjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRV9OT1RfU0VMRUNUQUJMRToKKyAgICAgIE9uX05vdF9TZWxlY3RhYmxlKGMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBFX1VOS05PV05fQ09NTUFORDoKKyAgICAgIGlmIChkcnZDbW5kID09IENNRF9BQ1RJT04pIHsKKwlpZiAob3B0aW9ucygpICYgT19PTkVWQUxVRSkgeworCSAgTkN1cnNlc01lbnVJdGVtKiBpdG0gPSBjdXJyZW50X2l0ZW0oKTsKKwkgIGFzc2VydChpdG0gIT0gMCk7CisJICBpZiAoaXRtLT5vcHRpb25zKCkgJiBPX1NFTEVDVEFCTEUpCisJICAgIHsKKwkgICAgICBiX2FjdGlvbiA9IGl0bS0+YWN0aW9uKCk7CisJICAgICAgcmVmcmVzaCgpOworCSAgICB9CisJICBlbHNlCisJICAgIE9uX05vdF9TZWxlY3RhYmxlKGMpOworCX0KKwllbHNlIHsKKwkgIGludCBuID0gY291bnQoKTsKKwkgIGZvcihpbnQgaT0wOyBpPG47IGkrKykgeworCSAgICBOQ3Vyc2VzTWVudUl0ZW0qIGl0bSA9IG15X2l0ZW1zW2ldOworCSAgICBpZiAoaXRtLT52YWx1ZSgpKSB7CisJICAgICAgYl9hY3Rpb24gfD0gaXRtLT5hY3Rpb24oKTsKKwkgICAgICByZWZyZXNoKCk7CisJICAgIH0KKwkgIH0KKwl9CisgICAgICB9IGVsc2UKKwlPbl9Vbmtub3duX0NvbW1hbmQoYyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEVfTk9fTUFUQ0g6CisgICAgICBPbl9Ob19NYXRjaChjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRV9PSzoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBPbkVycm9yKGVycik7CisgICAgfQorICB9CisKKyAgdW5wb3N0KCk7CisgIGhpZGUoKTsKKyAgcmVmcmVzaCgpOworICBpZiAob3B0aW9ucygpICYgT19PTkVWQUxVRSkKKyAgICByZXR1cm4gbXlfaXRlbXNbOjppdGVtX2luZGV4ICg6OmN1cnJlbnRfaXRlbSAobWVudSkpXTsKKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6T25fTWVudV9Jbml0KCkKK3sKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX01lbnVfVGVybWluYXRpb24oKQoreworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6T25fSXRlbV9Jbml0KE5DdXJzZXNNZW51SXRlbSYgaXRlbSkKK3sKK30KKwordm9pZAorTkN1cnNlc01lbnU6Ok9uX0l0ZW1fVGVybWluYXRpb24oTkN1cnNlc01lbnVJdGVtJiBpdGVtKQoreworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6T25fUmVxdWVzdF9EZW5pZWQoaW50IGMpIGNvbnN0Cit7CisgIDo6YmVlcCgpOworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6T25fTm90X1NlbGVjdGFibGUoaW50IGMpIGNvbnN0Cit7CisgIDo6YmVlcCgpOworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6T25fTm9fTWF0Y2goaW50IGMpIGNvbnN0Cit7CisgIDo6YmVlcCgpOworfQorCit2b2lkCitOQ3Vyc2VzTWVudTo6T25fVW5rbm93bl9Db21tYW5kKGludCBjKSBjb25zdAoreworICA6OmJlZXAoKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2MrKy9jdXJzZXNtLmggYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YzIyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzbS5oCkBAIC0wLDAgKzEsNjcyIEBACisvLyAqIFRoaXMgbWFrZXMgZW1hY3MgaGFwcHkgLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gJElkOiBjdXJzZXNtLmgsdiAxLjI1IDIwMDUvMDgvMTMgMTg6MTA6MzYgdG9tIEV4cCAkCisKKyNpZm5kZWYgTkNVUlNFU19DVVJTRVNNX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX0NVUlNFU01fSF9pbmNsIDEKKworI2luY2x1ZGUgPGN1cnNlc3AuaD4KKworZXh0ZXJuICJDIiB7CisjICBpbmNsdWRlIDxtZW51Lmg+Cit9CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyB3cmFwcyB0aGUgSVRFTSB0eXBlIG9mIDxtZW51Lmg+CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc01lbnVJdGVtCit7CisgIGZyaWVuZCBjbGFzcyBOQ3Vyc2VzTWVudTsKKworcHJvdGVjdGVkOgorICBJVEVNICppdGVtOworCisgIGlubGluZSB2b2lkIE9uRXJyb3IgKGludCBlcnIpIGNvbnN0IFRIUk9XUyhOQ3Vyc2VzTWVudUV4Y2VwdGlvbikgeworICAgIGlmIChlcnIgIT0gRV9PSykKKyAgICAgIFRIUk9XKG5ldyBOQ3Vyc2VzTWVudUV4Y2VwdGlvbiAoZXJyKSk7CisgIH0KKworcHVibGljOgorICBOQ3Vyc2VzTWVudUl0ZW0gKGNvbnN0IGNoYXIqIHBfbmFtZSAgICAgPSBOVUxMLAorCQkgICBjb25zdCBjaGFyKiBwX2Rlc2NyaXB0ID0gTlVMTCkKKyAgICA6IGl0ZW0oMCkKKyAgeworICAgIGl0ZW0gPSBwX25hbWUgPyA6Om5ld19pdGVtIChwX25hbWUsIHBfZGVzY3JpcHQpIDogU1RBVElDX0NBU1QoSVRFTSopKDApOworICAgIGlmIChwX25hbWUgJiYgIWl0ZW0pCisgICAgICBPbkVycm9yIChFX1NZU1RFTV9FUlJPUik7CisgIH0KKyAgLy8gQ3JlYXRlIGFuIGl0ZW0uIElmIHlvdSBwYXNzIGJvdGggcGFyYW1ldGVycyBhcyBOVUxMLCBhIGRlbGltaXRpbmcKKyAgLy8gaXRlbSBpcyBjb25zdHJ1Y3RlZCB3aGljaCBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgYSBsaXN0IG9mCisgIC8vIE5DdXJzZXNNZW51IG9iamVjdHMuCisKKyAgTkN1cnNlc01lbnVJdGVtJiBvcGVyYXRvcj0oY29uc3QgTkN1cnNlc01lbnVJdGVtJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc01lbnVJdGVtKGNvbnN0IE5DdXJzZXNNZW51SXRlbSYgcmhzKQorICAgIDogaXRlbSgwKQorICB7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzTWVudUl0ZW0gKCk7CisgIC8vIFJlbGVhc2UgdGhlIGl0ZW1zIG1lbW9yeQorCisgIGlubGluZSBjb25zdCBjaGFyKiBuYW1lICgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjppdGVtX25hbWUgKGl0ZW0pOworICB9CisgIC8vIE5hbWUgb2YgdGhlIGl0ZW0KKworICBpbmxpbmUgY29uc3QgY2hhciogZGVzY3JpcHRpb24gKCkgY29uc3QgeworICAgIHJldHVybiA6Oml0ZW1fZGVzY3JpcHRpb24gKGl0ZW0pOworICB9CisgIC8vIERlc2NyaXB0aW9uIG9mIHRoZSBpdGVtCisKKyAgaW5saW5lIGludCAoaW5kZXgpICh2b2lkKSBjb25zdCB7CisgICAgcmV0dXJuIDo6aXRlbV9pbmRleCAoaXRlbSk7CisgIH0KKyAgLy8gSW5kZXggb2YgdGhlIGl0ZW0gaW4gYW4gaXRlbSBhcnJheSAob3IgLTEpCisKKyAgaW5saW5lIHZvaWQgb3B0aW9uc19vbiAoSXRlbV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6Oml0ZW1fb3B0c19vbiAoaXRlbSwgb3B0cykpOworICB9CisgIC8vIFN3aXRjaCBvbiB0aGUgaXRlbXMgb3B0aW9ucworCisgIGlubGluZSB2b2lkIG9wdGlvbnNfb2ZmIChJdGVtX09wdGlvbnMgb3B0cykgeworICAgIE9uRXJyb3IgKDo6aXRlbV9vcHRzX29mZiAoaXRlbSwgb3B0cykpOworICB9CisgIC8vIFN3aXRjaCBvZmYgdGhlIGl0ZW0ncyBvcHRpb24KKworICBpbmxpbmUgSXRlbV9PcHRpb25zIG9wdGlvbnMgKCkgY29uc3QgeworICAgIHJldHVybiA6Oml0ZW1fb3B0cyAoaXRlbSk7CisgIH0KKyAgLy8gUmV0cmlldmUgdGhlIGl0ZW1zIG9wdGlvbnMKKworICBpbmxpbmUgdm9pZCBzZXRfb3B0aW9ucyAoSXRlbV9PcHRpb25zIG9wdHMpIHsKKyAgICBPbkVycm9yICg6OnNldF9pdGVtX29wdHMgKGl0ZW0sIG9wdHMpKTsKKyAgfQorICAvLyBTZXQgdGhlIGl0ZW1zIG9wdGlvbnMKKworICBpbmxpbmUgdm9pZCBzZXRfdmFsdWUgKGJvb2wgZikgeworICAgIE9uRXJyb3IgKDo6c2V0X2l0ZW1fdmFsdWUgKGl0ZW0sZikpOworICB9CisgIC8vIFNldC9SZXNldCB0aGUgaXRlbXMgc2VsZWN0aW9uIHN0YXRlCisKKyAgaW5saW5lIGJvb2wgdmFsdWUgKCkgY29uc3QgeworICAgIHJldHVybiA6Oml0ZW1fdmFsdWUgKGl0ZW0pOworICB9CisgIC8vIFJldHJpZXZlIHRoZSBpdGVtcyBzZWxlY3Rpb24gc3RhdGUKKworICBpbmxpbmUgYm9vbCB2aXNpYmxlICgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjppdGVtX3Zpc2libGUgKGl0ZW0pOworICB9CisgIC8vIFJldHJpZXZlIHZpc2liaWxpdHkgb2YgdGhlIGl0ZW0KKworICB2aXJ0dWFsIGJvb2wgYWN0aW9uKCk7CisgIC8vIFBlcmZvcm0gYW4gYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZW07IHlvdSBtYXkgdXNlIHRoaXMgaW4gYW4KKyAgLy8gdXNlciBzdXBwbGllZCBkcml2ZXIgZm9yIGEgbWVudTsgeW91IG1heSBkZXJpdmUgZnJvbSB0aGlzIGNsYXNzIGFuZAorICAvLyBvdmVybG9hZCBhY3Rpb24oKSB0byBzdXBwbHkgaXRlbXMgd2l0aCBkaWZmZXJlbnQgYWN0aW9ucy4KKyAgLy8gSWYgYW4gYWN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIG1lbnUgd2lsbCBiZSBleGl0ZWQuIFRoZSBkZWZhdWx0IGFjdGlvbgorICAvLyBpcyB0byBkbyBub3RoaW5nLgorfTsKKworLy8gUHJvdG90eXBlIGZvciBhbiBpdGVtcyBjYWxsYmFjayBmdW5jdGlvbi4KK3R5cGVkZWYgYm9vbCBJVEVNQ0FMTEJBQ0soTkN1cnNlc01lbnVJdGVtJik7CisKKy8vIElmIHlvdSBkb24ndCBsaWtlIHRvIGNyZWF0ZSBhIGNoaWxkIGNsYXNzIGZvciBpbmRpdmlkdWFsIGl0ZW1zIHRvCisvLyBvdmVybG9hZCBhY3Rpb24oKSwgeW91IG1heSB1c2UgdGhpcyBjbGFzcyBhbmQgcHJvdmlkZSBhIGNhbGxiYWNrCisvLyBmdW5jdGlvbiBwb2ludGVyIGZvciBpdGVtcy4KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNNZW51Q2FsbGJhY2tJdGVtIDogcHVibGljIE5DdXJzZXNNZW51SXRlbQoreworcHJpdmF0ZToKKyAgSVRFTUNBTExCQUNLKiBwX2ZjdDsKKworcHVibGljOgorICBOQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbShJVEVNQ0FMTEJBQ0sqIGZjdCAgICAgICA9IE5VTEwsCisJCQkgIGNvbnN0IGNoYXIqIHBfbmFtZSAgICAgID0gTlVMTCwKKwkJCSAgY29uc3QgY2hhciogcF9kZXNjcmlwdCAgPSBOVUxMICkKKyAgICA6IE5DdXJzZXNNZW51SXRlbSAocF9uYW1lLCBwX2Rlc2NyaXB0KSwKKyAgICAgIHBfZmN0IChmY3QpIHsKKyAgfQorCisgIE5DdXJzZXNNZW51Q2FsbGJhY2tJdGVtJiBvcGVyYXRvcj0oY29uc3QgTkN1cnNlc01lbnVDYWxsYmFja0l0ZW0mIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgICp0aGlzID0gcmhzOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbShjb25zdCBOQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbSYgcmhzKQorICAgIDogTkN1cnNlc01lbnVJdGVtKHJocyksCisgICAgICBwX2ZjdCgwKQorICB7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzTWVudUNhbGxiYWNrSXRlbSgpOworCisgIGJvb2wgYWN0aW9uKCk7Cit9OworCisgIC8vIFRoaXMgYXJlIHRoZSBidWlsdC1pbiBob29rIGZ1bmN0aW9ucyBpbiB0aGlzIEMrKyBiaW5kaW5nLiBJbiBDKysgd2UgdXNlCisgIC8vIHZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucyAoc2VlIGJlbG93IE9uXy4uLl9Jbml0IGFuZCBPbl8uLi5fVGVybWluYXRpb24pCisgIC8vIHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5IGluIGFuIG9iamVjdCBvcmllbnRlZCBtYW5uZXIuCitleHRlcm4gIkMiIHsKKyAgdm9pZCBfbmNfeHhfbW51X2luaXQoTUVOVSAqKTsKKyAgdm9pZCBfbmNfeHhfbW51X3Rlcm0oTUVOVSAqKTsKKyAgdm9pZCBfbmNfeHhfaXRtX2luaXQoTUVOVSAqKTsKKyAgdm9pZCBfbmNfeHhfaXRtX3Rlcm0oTUVOVSAqKTsKK30KKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoaXMgd3JhcHMgdGhlIE1FTlUgdHlwZSBvZiA8bWVudS5oPgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNNZW51IDogcHVibGljIE5DdXJzZXNQYW5lbAoreworcHJvdGVjdGVkOgorICBNRU5VICptZW51OworCitwcml2YXRlOgorICBOQ3Vyc2VzV2luZG93KiBzdWI7ICAgLy8gdGhlIHN1YndpbmRvdyBvYmplY3QKKyAgYm9vbCBiX3N1Yl9vd25lcjsgICAgIC8vIGlzIHRoaXMgb3VyIG93biBzdWJ3aW5kb3c/CisgIGJvb2wgYl9mcmFtZWQ7ICAgICAgICAvLyBoYXMgdGhlIG1lbnUgYSBib3JkZXI/CisgIGJvb2wgYl9hdXRvRGVsZXRlOyAgICAvLyBEZWxldGUgaXRlbXMgd2hlbiBkZWxldGluZyBtZW51PworCisgIE5DdXJzZXNNZW51SXRlbSoqIG15X2l0ZW1zOyAvLyBUaGUgYXJyYXkgb2YgaXRlbXMgZm9yIHRoaXMgbWVudQorCisgIC8vIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSBtZW51J3MgdXNlciBkYXRhIGZpZWxkIHRvIGxpbmsgdGhlCisgIC8vIE1FTlUqIHRvIHRoZSBDKysgb2JqZWN0IGFuZCB0byBwcm92aWRlIGV4dHJhIHNwYWNlIGZvciBhIHVzZXIgcG9pbnRlci4KKyAgdHlwZWRlZiBzdHJ1Y3QgeworICAgIHZvaWQqICAgICAgICAgICAgICBtX3VzZXI7ICAgICAgLy8gdGhlIHBvaW50ZXIgZm9yIHRoZSB1c2VyJ3MgZGF0YQorICAgIGNvbnN0IE5DdXJzZXNNZW51KiBtX2JhY2s7ICAgICAgLy8gYmFja3dhcmQgcG9pbnRlciB0byBDKysgb2JqZWN0CisgICAgY29uc3QgTUVOVSogICAgICAgIG1fb3duZXI7CisgIH0gVXNlckhvb2s7CisKKyAgLy8gR2V0IHRoZSBiYWNrd2FyZCBwb2ludGVyIHRvIHRoZSBDKysgb2JqZWN0IGZyb20gYSBNRU5VCisgIHN0YXRpYyBpbmxpbmUgTkN1cnNlc01lbnUqIGdldEhvb2soY29uc3QgTUVOVSAqbSkgeworICAgIFVzZXJIb29rKiBob29rID0gU1RBVElDX0NBU1QoVXNlckhvb2sqKSg6Om1lbnVfdXNlcnB0cihtKSk7CisgICAgYXNzZXJ0KGhvb2sgIT0gMCAmJiBob29rLT5tX293bmVyPT1tKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxOQ3Vyc2VzTWVudSo+KGhvb2stPm1fYmFjayk7CisgIH0KKworICBmcmllbmQgdm9pZCBfbmNfeHhfbW51X2luaXQoTUVOVSAqKTsKKyAgZnJpZW5kIHZvaWQgX25jX3h4X21udV90ZXJtKE1FTlUgKik7CisgIGZyaWVuZCB2b2lkIF9uY194eF9pdG1faW5pdChNRU5VICopOworICBmcmllbmQgdm9pZCBfbmNfeHhfaXRtX3Rlcm0oTUVOVSAqKTsKKworICAvLyBDYWxjdWxhdGUgSVRFTSogYXJyYXkgZm9yIHRoZSBtZW51CisgIElURU0qKiBtYXBJdGVtcyhOQ3Vyc2VzTWVudUl0ZW0qIG5pdGVtc1tdKTsKKworcHJvdGVjdGVkOgorICAvLyBpbnRlcm5hbCByb3V0aW5lcworICBpbmxpbmUgdm9pZCBzZXRfdXNlcih2b2lkICp1c2VyKSB7CisgICAgVXNlckhvb2sqIHVwdHIgPSBTVEFUSUNfQ0FTVChVc2VySG9vayopKDo6bWVudV91c2VycHRyIChtZW51KSk7CisgICAgYXNzZXJ0ICh1cHRyICE9IDAgJiYgdXB0ci0+bV9iYWNrPT10aGlzICYmIHVwdHItPm1fb3duZXI9PW1lbnUpOworICAgIHVwdHItPm1fdXNlciA9IHVzZXI7CisgIH0KKworICBpbmxpbmUgdm9pZCAqZ2V0X3VzZXIoKSB7CisgICAgVXNlckhvb2sqIHVwdHIgPSBTVEFUSUNfQ0FTVChVc2VySG9vayopKDo6bWVudV91c2VycHRyIChtZW51KSk7CisgICAgYXNzZXJ0ICh1cHRyICE9IDAgJiYgdXB0ci0+bV9iYWNrPT10aGlzICYmIHVwdHItPm1fb3duZXI9PW1lbnUpOworICAgIHJldHVybiB1cHRyLT5tX3VzZXI7CisgIH0KKworICB2b2lkIEluaXRNZW51IChOQ3Vyc2VzTWVudUl0ZW0qIG1lbnVbXSwKKwkJIGJvb2wgd2l0aF9mcmFtZSwKKwkJIGJvb2wgYXV0b0RlbGV0ZUl0ZW1zKTsKKworICBpbmxpbmUgdm9pZCBPbkVycm9yIChpbnQgZXJyKSBjb25zdCBUSFJPV1MoTkN1cnNlc01lbnVFeGNlcHRpb24pIHsKKyAgICBpZiAoZXJyICE9IEVfT0spCisgICAgICBUSFJPVyhuZXcgTkN1cnNlc01lbnVFeGNlcHRpb24gKHRoaXMsIGVycikpOworICB9CisKKyAgLy8gdGhpcyB3cmFwcyB0aGUgbWVudV9kcml2ZXIgY2FsbC4KKyAgdmlydHVhbCBpbnQgZHJpdmVyIChpbnQgYykgOworCisgIC8vICdJbnRlcm5hbCcgY29uc3RydWN0b3IgdG8gY3JlYXRlIGEgbWVudSB3aXRob3V0IGFzc29jaWF0aW9uIHRvCisgIC8vIGFuIGFycmF5IG9mIGl0ZW1zLgorICBOQ3Vyc2VzTWVudSggaW50ICBubGluZXMsCisJICAgICAgIGludCAgbmNvbHMsCisJICAgICAgIGludCAgYmVnaW5feSA9IDAsCisJICAgICAgIGludCAgYmVnaW5feCA9IDApCisgICAgOiBOQ3Vyc2VzUGFuZWwobmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCksCisgICAgICBtZW51IChTVEFUSUNfQ0FTVChNRU5VKikoMCkpLAorICAgICAgc3ViKDApLAorICAgICAgYl9zdWJfb3duZXIoMCksCisgICAgICBiX2ZyYW1lZCgwKSwKKyAgICAgIGJfYXV0b0RlbGV0ZSgwKSwKKyAgICAgIG15X2l0ZW1zKDApCisgIHsKKyAgfQorCitwdWJsaWM6CisgIC8vIE1ha2UgYSBmdWxsIHdpbmRvdyBzaXplIG1lbnUKKyAgTkN1cnNlc01lbnUgKE5DdXJzZXNNZW51SXRlbSogSXRlbXNbXSwKKwkgICAgICAgYm9vbCB3aXRoX2ZyYW1lPUZBTFNFLCAgICAgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgYSBmcmFtZT8KKwkgICAgICAgYm9vbCBhdXRvRGVsZXRlX0l0ZW1zPUZBTFNFKSAgLy8gQXV0b2NsZWFudXAgb2YgSXRlbXM/CisgICAgOiBOQ3Vyc2VzUGFuZWwoKSwKKyAgICAgIG1lbnUoMCksCisgICAgICBzdWIoMCksCisgICAgICBiX3N1Yl9vd25lcigwKSwKKyAgICAgIGJfZnJhbWVkKDApLAorICAgICAgYl9hdXRvRGVsZXRlKDApLAorICAgICAgbXlfaXRlbXMoMCkKKyAgeworICAgICAgSW5pdE1lbnUoSXRlbXMsIHdpdGhfZnJhbWUsIGF1dG9EZWxldGVfSXRlbXMpOworICB9CisKKyAgLy8gTWFrZSBhIG1lbnUgd2l0aCBhIHdpbmRvdyBvZiB0aGlzIHNpemUuCisgIE5DdXJzZXNNZW51IChOQ3Vyc2VzTWVudUl0ZW0qIEl0ZW1zW10sCisJICAgICAgIGludCAgbmxpbmVzLAorCSAgICAgICBpbnQgIG5jb2xzLAorCSAgICAgICBpbnQgIGJlZ2luX3kgPSAwLAorCSAgICAgICBpbnQgIGJlZ2luX3ggPSAwLAorCSAgICAgICBib29sIHdpdGhfZnJhbWU9RkFMU0UsICAgICAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBhIGZyYW1lPworCSAgICAgICBib29sIGF1dG9EZWxldGVfSXRlbXM9RkFMU0UpICAvLyBBdXRvY2xlYW51cCBvZiBJdGVtcz8KKyAgICA6IE5DdXJzZXNQYW5lbChubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KSwKKyAgICAgIG1lbnUoMCksCisgICAgICBzdWIoMCksCisgICAgICBiX3N1Yl9vd25lcigwKSwKKyAgICAgIGJfZnJhbWVkKDApLAorICAgICAgYl9hdXRvRGVsZXRlKDApLAorICAgICAgbXlfaXRlbXMoMCkKKyAgeworICAgICAgSW5pdE1lbnUoSXRlbXMsIHdpdGhfZnJhbWUsIGF1dG9EZWxldGVfSXRlbXMpOworICB9CisKKyAgTkN1cnNlc01lbnUmIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzTWVudSYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgICBOQ3Vyc2VzUGFuZWw6Om9wZXJhdG9yPShyaHMpOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzTWVudShjb25zdCBOQ3Vyc2VzTWVudSYgcmhzKQorICAgIDogTkN1cnNlc1BhbmVsKHJocyksCisgICAgICBtZW51KHJocy5tZW51KSwKKyAgICAgIHN1YihyaHMuc3ViKSwKKyAgICAgIGJfc3ViX293bmVyKHJocy5iX3N1Yl9vd25lciksCisgICAgICBiX2ZyYW1lZChyaHMuYl9mcmFtZWQpLAorICAgICAgYl9hdXRvRGVsZXRlKHJocy5iX2F1dG9EZWxldGUpLAorICAgICAgbXlfaXRlbXMocmhzLm15X2l0ZW1zKQorICB7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzTWVudSAoKTsKKworICAvLyBSZXRyaWV2ZSB0aGUgbWVudXMgc3Vid2luZG93CisgIGlubGluZSBOQ3Vyc2VzV2luZG93JiBzdWJXaW5kb3coKSBjb25zdCB7CisgICAgYXNzZXJ0KHN1YiE9TlVMTCk7CisgICAgcmV0dXJuICpzdWI7CisgIH0KKworICAvLyBTZXQgdGhlIG1lbnVzIHN1YndpbmRvdworICB2b2lkIHNldFN1YldpbmRvdyhOQ3Vyc2VzV2luZG93JiBzdWIpOworCisgIC8vIFNldCB0aGVzZSBpdGVtcyBmb3IgdGhlIG1lbnUKKyAgaW5saW5lIHZvaWQgc2V0SXRlbXMoTkN1cnNlc01lbnVJdGVtKiBJdGVtc1tdKSB7CisgICAgT25FcnJvcig6OnNldF9tZW51X2l0ZW1zKG1lbnUsbWFwSXRlbXMoSXRlbXMpKSk7CisgIH0KKworICAvLyBSZW1vdmUgdGhlIG1lbnUgZnJvbSB0aGUgc2NyZWVuCisgIGlubGluZSB2b2lkIHVucG9zdCAodm9pZCkgeworICAgIE9uRXJyb3IgKDo6dW5wb3N0X21lbnUgKG1lbnUpKTsKKyAgfQorCisgIC8vIFBvc3QgdGhlIG1lbnUgdG8gdGhlIHNjcmVlbiBpZiBmbGFnIGlzIHRydWUsIHVucG9zdCBpdCBvdGhlcndpc2UKKyAgaW5saW5lIHZvaWQgcG9zdChib29sIGZsYWcgPSBUUlVFKSB7CisgICAgZmxhZyA/IE9uRXJyb3IgKDo6cG9zdF9tZW51KG1lbnUpKSA6IE9uRXJyb3IgKDo6dW5wb3N0X21lbnUgKG1lbnUpKTsKKyAgfQorCisgIC8vIEdldCB0aGUgbnVtZXIgb2Ygcm93cyBhbmQgY29sdW1ucyBmb3IgdGhpcyBtZW51CisgIGlubGluZSB2b2lkIHNjYWxlIChpbnQmIG1yb3dzLCBpbnQmIG1jb2xzKSBjb25zdCAgeworICAgIE9uRXJyb3IgKDo6c2NhbGVfbWVudSAobWVudSwgJm1yb3dzLCAmbWNvbHMpKTsKKyAgfQorCisgIC8vIFNldCB0aGUgZm9ybWF0IG9mIHRoaXMgbWVudQorICBpbmxpbmUgdm9pZCBzZXRfZm9ybWF0KGludCBtcm93cywgaW50IG1jb2xzKSB7CisgICAgT25FcnJvciAoOjpzZXRfbWVudV9mb3JtYXQobWVudSwgbXJvd3MsIG1jb2xzKSk7CisgIH0KKworICAvLyBHZXQgdGhlIGZvcm1hdCBvZiB0aGlzIG1lbnUKKyAgaW5saW5lIHZvaWQgbWVudV9mb3JtYXQoaW50JiByb3dzLGludCYgbmNvbHMpIHsKKyAgICA6Om1lbnVfZm9ybWF0KG1lbnUsJnJvd3MsJm5jb2xzKTsKKyAgfQorCisgIC8vIEl0ZW1zIG9mIHRoZSBtZW51CisgIGlubGluZSBOQ3Vyc2VzTWVudUl0ZW0qIGl0ZW1zKCkgY29uc3QgeworICAgIHJldHVybiAqbXlfaXRlbXM7CisgIH0KKworICAvLyBHZXQgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGlzIG1lbnUKKyAgaW5saW5lIGludCBjb3VudCgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjppdGVtX2NvdW50KG1lbnUpOworICB9CisKKyAgLy8gR2V0IHRoZSBjdXJyZW50IGl0ZW0gKGkuZS4gdGhlIG9uZSB0aGUgY3Vyc29yIGlzIGxvY2F0ZWQpCisgIGlubGluZSBOQ3Vyc2VzTWVudUl0ZW0qIGN1cnJlbnRfaXRlbSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbXlfaXRlbXNbOjppdGVtX2luZGV4KDo6Y3VycmVudF9pdGVtKG1lbnUpKV07CisgIH0KKworICAvLyBHZXQgdGhlIG1hcmtlciBzdHJpbmcKKyAgaW5saW5lIGNvbnN0IGNoYXIqIG1hcmsoKSBjb25zdCB7CisgICAgcmV0dXJuIDo6bWVudV9tYXJrKG1lbnUpOworICB9CisKKyAgLy8gU2V0IHRoZSBtYXJrZXIgc3RyaW5nCisgIGlubGluZSB2b2lkIHNldF9tYXJrKGNvbnN0IGNoYXIgKm1hcmtlcikgeworICAgIE9uRXJyb3IgKDo6c2V0X21lbnVfbWFyayAobWVudSwgbWFya2VyKSk7CisgIH0KKworICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhlIHJlcXVlc3QgY29kZSBjCisgIGlubGluZSBzdGF0aWMgY29uc3QgY2hhciogcmVxdWVzdF9uYW1lKGludCBjKSB7CisgICAgcmV0dXJuIDo6bWVudV9yZXF1ZXN0X25hbWUoYyk7CisgIH0KKworICAvLyBHZXQgdGhlIGN1cnJlbnQgcGF0dGVybgorICBpbmxpbmUgY2hhciogcGF0dGVybigpIGNvbnN0IHsKKyAgICByZXR1cm4gOjptZW51X3BhdHRlcm4obWVudSk7CisgIH0KKworICAvLyB0cnVlIGlmIHRoZXJlIGlzIGEgcGF0dGVybiBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLgorICBib29sIHNldF9wYXR0ZXJuIChjb25zdCBjaGFyICpwYXQpOworCisgIC8vIHNldCB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgbWVudQorICAvLyBpLmUuIHNldCBmb3JlLCBiYWNrIGFuZCBncmV5IGF0dHJpYnV0ZQorICB2aXJ0dWFsIHZvaWQgc2V0RGVmYXVsdEF0dHJpYnV0ZXMoKTsKKworICAvLyBHZXQgdGhlIG1lbnVzIGJhY2tncm91bmQgYXR0cmlidXRlcworICBpbmxpbmUgY2h0eXBlIGJhY2soKSBjb25zdCB7CisgICAgcmV0dXJuIDo6bWVudV9iYWNrKG1lbnUpOworICB9CisKKyAgLy8gR2V0IHRoZSBtZW51cyBmb3JlZ3JvdW5kIGF0dHJpYnV0ZXMKKyAgaW5saW5lIGNodHlwZSBmb3JlKCkgY29uc3QgeworICAgIHJldHVybiA6Om1lbnVfZm9yZShtZW51KTsKKyAgfQorCisgIC8vIEdldCB0aGUgbWVudXMgZ3JleSBhdHRyaWJ1dGVzICh1c2VkIGZvciB1bnNlbGVjdGFibGUgaXRlbXMpCisgIGlubGluZSBjaHR5cGUgZ3JleSgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjptZW51X2dyZXkobWVudSk7CisgIH0KKworICAvLyBTZXQgdGhlIG1lbnVzIGJhY2tncm91bmQgYXR0cmlidXRlcworICBpbmxpbmUgY2h0eXBlIHNldF9iYWNrZ3JvdW5kKGNodHlwZSBhKSB7CisgICAgcmV0dXJuIDo6c2V0X21lbnVfYmFjayhtZW51LGEpOworICB9CisKKyAgLy8gU2V0IHRoZSBtZW51cyBmb3JlZ3JvdW5kIGF0dHJpYnV0ZXMKKyAgaW5saW5lIGNodHlwZSBzZXRfZm9yZWdyb3VuZChjaHR5cGUgYSkgeworICAgIHJldHVybiA6OnNldF9tZW51X2ZvcmUobWVudSxhKTsKKyAgfQorCisgIC8vIFNldCB0aGUgbWVudXMgZ3JleSBhdHRyaWJ1dGVzICh1c2VkIGZvciB1bnNlbGVjdGFibGUgaXRlbXMpCisgIGlubGluZSBjaHR5cGUgc2V0X2dyZXkoY2h0eXBlIGEpIHsKKyAgICByZXR1cm4gOjpzZXRfbWVudV9ncmV5KG1lbnUsYSk7CisgIH0KKworICBpbmxpbmUgdm9pZCBvcHRpb25zX29uIChNZW51X09wdGlvbnMgb3B0cykgeworICAgIE9uRXJyb3IgKDo6bWVudV9vcHRzX29uIChtZW51LG9wdHMpKTsKKyAgfQorCisgIGlubGluZSB2b2lkIG9wdGlvbnNfb2ZmKE1lbnVfT3B0aW9ucyBvcHRzKSB7CisgICAgT25FcnJvciAoOjptZW51X29wdHNfb2ZmKG1lbnUsb3B0cykpOworICB9CisKKyAgaW5saW5lIE1lbnVfT3B0aW9ucyBvcHRpb25zKCkgY29uc3QgeworICAgIHJldHVybiA6Om1lbnVfb3B0cyhtZW51KTsKKyAgfQorCisgIGlubGluZSB2b2lkIHNldF9vcHRpb25zIChNZW51X09wdGlvbnMgb3B0cykgeworICAgIE9uRXJyb3IgKDo6c2V0X21lbnVfb3B0cyAobWVudSxvcHRzKSk7CisgIH0KKworICBpbmxpbmUgaW50IHBhZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gOjptZW51X3BhZChtZW51KTsKKyAgfQorCisgIGlubGluZSB2b2lkIHNldF9wYWQgKGludCBwYWRjaCkgeworICAgIE9uRXJyb3IgKDo6c2V0X21lbnVfcGFkIChtZW51LCBwYWRjaCkpOworICB9CisKKyAgLy8gUG9zaXRpb24gdGhlIGN1cnNvciB0byB0aGUgY3VycmVudCBpdGVtCisgIGlubGluZSB2b2lkIHBvc2l0aW9uX2N1cnNvciAoKSBjb25zdCB7CisgICAgT25FcnJvciAoOjpwb3NfbWVudV9jdXJzb3IgKG1lbnUpKTsKKyAgfQorCisgIC8vIFNldCB0aGUgY3VycmVudCBpdGVtCisgIGlubGluZSB2b2lkIHNldF9jdXJyZW50KE5DdXJzZXNNZW51SXRlbSYgSSkgeworICAgIE9uRXJyb3IgKDo6c2V0X2N1cnJlbnRfaXRlbShtZW51LCBJLml0ZW0pKTsKKyAgfQorCisgIC8vIEdldCB0aGUgY3VycmVudCB0b3Agcm93IG9mIHRoZSBtZW51CisgIGlubGluZSBpbnQgdG9wX3JvdyAodm9pZCkgY29uc3QgeworICAgIHJldHVybiA6OnRvcF9yb3cgKG1lbnUpOworICB9CisKKyAgLy8gU2V0IHRoZSBjdXJyZW50IHRvcCByb3cgb2YgdGhlIG1lbnUKKyAgaW5saW5lIHZvaWQgc2V0X3RvcF9yb3cgKGludCByb3cpIHsKKyAgICBPbkVycm9yICg6OnNldF90b3Bfcm93IChtZW51LCByb3cpKTsKKyAgfQorCisgIC8vIHNwYWNpbmcgY29udHJvbAorICAvLyBTZXQgdGhlIHNwYWNpbmcgZm9yIHRoZSBtZW51CisgIGlubGluZSB2b2lkIHNldFNwYWNpbmcoaW50IHNwY19kZXNjcmlwdGlvbiwKKwkJCSBpbnQgc3BjX3Jvd3MsCisJCQkgaW50IHNwY19jb2x1bW5zKSB7CisgICAgT25FcnJvcig6OnNldF9tZW51X3NwYWNpbmcobWVudSwKKwkJCSAgICAgICBzcGNfZGVzY3JpcHRpb24sCisJCQkgICAgICAgc3BjX3Jvd3MsCisJCQkgICAgICAgc3BjX2NvbHVtbnMpKTsKKyAgfQorCisgIC8vIEdldCB0aGUgc3BhY2luZyBpbmZvIGZvciB0aGUgbWVudQorICBpbmxpbmUgdm9pZCBTcGFjaW5nKGludCYgc3BjX2Rlc2NyaXB0aW9uLAorCQkgICAgICBpbnQmIHNwY19yb3dzLAorCQkgICAgICBpbnQmIHNwY19jb2x1bW5zKSBjb25zdCB7CisgICAgT25FcnJvcig6Om1lbnVfc3BhY2luZyhtZW51LAorCQkJICAgJnNwY19kZXNjcmlwdGlvbiwKKwkJCSAgICZzcGNfcm93cywKKwkJCSAgICZzcGNfY29sdW1ucykpOworICB9CisKKyAgLy8gRGVjb3JhdGlvbnMKKyAgaW5saW5lIHZvaWQgZnJhbWUoY29uc3QgY2hhciAqdGl0bGU9TlVMTCwgY29uc3QgY2hhciogYnRpdGxlPU5VTEwpIHsKKyAgICBpZiAoYl9mcmFtZWQpCisgICAgICBOQ3Vyc2VzUGFuZWw6OmZyYW1lKHRpdGxlLGJ0aXRsZSk7CisgICAgZWxzZQorICAgICAgT25FcnJvcihFX1NZU1RFTV9FUlJPUik7CisgIH0KKworICBpbmxpbmUgdm9pZCBib2xkZnJhbWUoY29uc3QgY2hhciAqdGl0bGU9TlVMTCwgY29uc3QgY2hhciogYnRpdGxlPU5VTEwpIHsKKyAgICBpZiAoYl9mcmFtZWQpCisgICAgICBOQ3Vyc2VzUGFuZWw6OmJvbGRmcmFtZSh0aXRsZSxidGl0bGUpOworICAgIGVsc2UKKyAgICAgIE9uRXJyb3IoRV9TWVNURU1fRVJST1IpOworICB9CisKKyAgaW5saW5lIHZvaWQgbGFiZWwoY29uc3QgY2hhciAqdG9wTGFiZWwsIGNvbnN0IGNoYXIgKmJvdHRvbUxhYmVsKSB7CisgICAgaWYgKGJfZnJhbWVkKQorICAgICAgTkN1cnNlc1BhbmVsOjpsYWJlbCh0b3BMYWJlbCxib3R0b21MYWJlbCk7CisgICAgZWxzZQorICAgICAgT25FcnJvcihFX1NZU1RFTV9FUlJPUik7CisgIH0KKworICAvLyAtLS0tLQorICAvLyBIb29rcworICAvLyAtLS0tLQorCisgIC8vIENhbGxlZCBhZnRlciB0aGUgbWVudSBnZXRzIHJlcG9zaXRpb25lZCBpbiBpdHMgd2luZG93LgorICAvLyBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgbWVudSBpcyBwb3N0ZWQuCisgIHZpcnR1YWwgdm9pZCBPbl9NZW51X0luaXQoKTsKKworICAvLyBDYWxsZWQgYmVmb3JlIHRoZSBtZW51IGdldHMgcmVwb3NpdGlvbmVkIGluIGl0cyB3aW5kb3cuCisgIC8vIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHRoZSBtZW51IGlzIHVucG9zdGVkLgorICB2aXJ0dWFsIHZvaWQgT25fTWVudV9UZXJtaW5hdGlvbigpOworCisgIC8vIENhbGxlZCBhZnRlciB0aGUgaXRlbSBiZWNhbWUgdGhlIGN1cnJlbnQgaXRlbQorICB2aXJ0dWFsIHZvaWQgT25fSXRlbV9Jbml0KE5DdXJzZXNNZW51SXRlbSYgaXRlbSk7CisKKyAgLy8gQ2FsbGVkIGJlZm9yZSB0aGlzIGl0ZW0gaXMgbGVmdCBhcyBjdXJyZW50IGl0ZW0uCisgIHZpcnR1YWwgdm9pZCBPbl9JdGVtX1Rlcm1pbmF0aW9uKE5DdXJzZXNNZW51SXRlbSYgaXRlbSk7CisKKyAgLy8gUHJvdmlkZSBhIGRlZmF1bHQga2V5IHZpcnR1YWxpemF0aW9uLiBUcmFuc2xhdGUgdGhlIGtleWJvYXJkCisgIC8vIGNvZGUgYyBpbnRvIGEgbWVudSByZXF1ZXN0IGNvZGUuCisgIC8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgaG9wZWZ1bGx5IHN0cmFpZ2h0Zm9yd2FyZAorICAvLyBtYXBwaW5nIGZvciB0aGUgbW9zdCBjb21tb24ga2V5c3Ryb2tlcyBhbmQgbWVudSByZXF1ZXN0cy4KKyAgdmlydHVhbCBpbnQgdmlydHVhbGl6ZShpbnQgYyk7CisKKworICAvLyBPcGVyYXRvcnMKKyAgaW5saW5lIE5DdXJzZXNNZW51SXRlbSogb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeworICAgIGlmICggKGkgPCAwKSB8fCAoaSA+PSA6Oml0ZW1fY291bnQgKG1lbnUpKSApCisgICAgICBPbkVycm9yIChFX0JBRF9BUkdVTUVOVCk7CisgICAgcmV0dXJuIChteV9pdGVtc1tpXSk7CisgIH0KKworICAvLyBQZXJmb3JtIHRoZSBtZW51J3Mgb3BlcmF0aW9uCisgIC8vIFJldHVybiB0aGUgaXRlbSB3aGVyZSB5b3UgbGVmdCB0aGUgc2VsZWN0aW9uIG1hcmsgZm9yIGEgc2luZ2xlCisgIC8vIHNlbGVjdGlvbiBtZW51LCBvciBOVUxMIGZvciBhIG11bHRpdmFsdWVkIG1lbnUuCisgIHZpcnR1YWwgTkN1cnNlc01lbnVJdGVtKiBvcGVyYXRvcigpKHZvaWQpOworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIEV4Y2VwdGlvbiBoYW5kbGVycworICAvLyBDYWxsZWQgYnkgb3BlcmF0b3IoKQorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIENhbGxlZCBpZiB0aGUgcmVxdWVzdCBpcyBkZW5pZWQKKyAgdmlydHVhbCB2b2lkIE9uX1JlcXVlc3RfRGVuaWVkKGludCBjKSBjb25zdDsKKworICAvLyBDYWxsZWQgaWYgdGhlIGl0ZW0gaXMgbm90IHNlbGVjdGFibGUKKyAgdmlydHVhbCB2b2lkIE9uX05vdF9TZWxlY3RhYmxlKGludCBjKSBjb25zdDsKKworICAvLyBDYWxsZWQgaWYgcGF0dGVybiBkb2Vzbid0IG1hdGNoCisgIHZpcnR1YWwgdm9pZCBPbl9Ob19NYXRjaChpbnQgYykgY29uc3Q7CisKKyAgLy8gQ2FsbGVkIGlmIHRoZSBjb21tYW5kIGlzIHVua25vd24KKyAgdmlydHVhbCB2b2lkIE9uX1Vua25vd25fQ29tbWFuZChpbnQgYykgY29uc3Q7CisKK307CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyBpcyB0aGUgdHlwaWNhbCBDKysgdHlwZXNhZmUgd2F5IHRvIGFsbG93IHRvIGF0dGFjaAorLy8gdXNlciBkYXRhIHRvIGFuIGl0ZW0gb2YgYSBtZW51LiBJdHMgYXNzdW1lZCB0aGF0IHRoZSB1c2VyCisvLyBkYXRhIGJlbG9uZ3MgdG8gc29tZSBjbGFzcyBULiBVc2UgVCBhcyB0ZW1wbGF0ZSBhcmd1bWVudAorLy8gdG8gY3JlYXRlIGEgVXNlckl0ZW0uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1VzZXJJdGVtIDogcHVibGljIE5DdXJzZXNNZW51SXRlbQoreworcHVibGljOgorICBOQ3Vyc2VzVXNlckl0ZW0gKGNvbnN0IGNoYXIqIHBfbmFtZSwKKwkJICAgY29uc3QgY2hhciogcF9kZXNjcmlwdCA9IE5VTEwsCisJCSAgIGNvbnN0IFQqIHBfVXNlckRhdGEgICAgPSBTVEFUSUNfQ0FTVChUKikoMCkpCisgICAgOiBOQ3Vyc2VzTWVudUl0ZW0gKHBfbmFtZSwgcF9kZXNjcmlwdCkgeworICAgICAgaWYgKGl0ZW0pCisJT25FcnJvciAoOjpzZXRfaXRlbV91c2VycHRyIChpdGVtLCBjb25zdF9jYXN0PHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4ocF9Vc2VyRGF0YSkpKSk7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzVXNlckl0ZW0oKSB7fQorCisgIGlubGluZSBjb25zdCBUKiBVc2VyRGF0YSAodm9pZCkgY29uc3QgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPig6Oml0ZW1fdXNlcnB0ciAoaXRlbSkpOworICB9OworCisgIGlubGluZSB2aXJ0dWFsIHZvaWQgc2V0VXNlckRhdGEoY29uc3QgVCogcF9Vc2VyRGF0YSkgeworICAgIGlmIChpdGVtKQorICAgICAgT25FcnJvciAoOjpzZXRfaXRlbV91c2VycHRyIChpdGVtLCBjb25zdF9jYXN0PHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KHBfVXNlckRhdGEpKSkpOworICB9Cit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBzYW1lIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGF0dGFjaCB1c2VyIGRhdGEgdG8gYSBtZW51CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1VzZXJNZW51IDogcHVibGljIE5DdXJzZXNNZW51Cit7Citwcm90ZWN0ZWQ6CisgIE5DdXJzZXNVc2VyTWVudSggaW50ICBubGluZXMsCisJCSAgIGludCAgbmNvbHMsCisJCSAgIGludCAgYmVnaW5feSA9IDAsCisJCSAgIGludCAgYmVnaW5feCA9IDAsCisJCSAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBTVEFUSUNfQ0FTVChUKikoMCkpCisgICAgOiBOQ3Vyc2VzTWVudShubGluZXMsbmNvbHMsYmVnaW5feSxiZWdpbl94KSB7CisgICAgICBpZiAobWVudSkKKwlzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfQorCitwdWJsaWM6CisgIE5DdXJzZXNVc2VyTWVudSAoTkN1cnNlc01lbnVJdGVtIEl0ZW1zW10sCisJCSAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBTVEFUSUNfQ0FTVChUKikoMCksCisJCSAgIGJvb2wgd2l0aF9mcmFtZT1GQUxTRSwKKwkJICAgYm9vbCBhdXRvRGVsZXRlX0l0ZW1zPUZBTFNFKQorICAgIDogTkN1cnNlc01lbnUgKEl0ZW1zLCB3aXRoX2ZyYW1lLCBhdXRvRGVsZXRlX0l0ZW1zKSB7CisgICAgICBpZiAobWVudSkKKwlzZXRfdXNlciAoY29uc3RfY2FzdDx2b2lkICo+KHBfVXNlckRhdGEpKTsKKyAgfTsKKworICBOQ3Vyc2VzVXNlck1lbnUgKE5DdXJzZXNNZW51SXRlbSBJdGVtc1tdLAorCQkgICBpbnQgbmxpbmVzLAorCQkgICBpbnQgbmNvbHMsCisJCSAgIGludCBiZWdpbl95ID0gMCwKKwkJICAgaW50IGJlZ2luX3ggPSAwLAorCQkgICBjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApLAorCQkgICBib29sIHdpdGhfZnJhbWU9RkFMU0UpCisgICAgOiBOQ3Vyc2VzTWVudSAoSXRlbXMsIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gsIHdpdGhfZnJhbWUpIHsKKyAgICAgIGlmIChtZW51KQorCXNldF91c2VyIChjb25zdF9jYXN0PHZvaWQgKj4ocF9Vc2VyRGF0YSkpOworICB9OworCisgIHZpcnR1YWwgfk5DdXJzZXNVc2VyTWVudSgpIHsKKyAgfTsKKworICBpbmxpbmUgVCogVXNlckRhdGEgKHZvaWQpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oZ2V0X3VzZXIgKCkpOworICB9OworCisgIGlubGluZSB2aXJ0dWFsIHZvaWQgc2V0VXNlckRhdGEgKGNvbnN0IFQqIHBfVXNlckRhdGEpIHsKKyAgICBpZiAobWVudSkKKyAgICAgIHNldF91c2VyIChjb25zdF9jYXN0PHZvaWQgKj4ocF9Vc2VyRGF0YSkpOworICB9Cit9OworCisjZW5kaWYgLyogTkNVUlNFU19DVVJTRVNNX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2N1cnNlc21haW4uY2MgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2VzbWFpbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgyZDRhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL2N1cnNlc21haW4uY2MKQEAgLTAsMCArMSw5MyBAQAorLy8gKiB0aGlzIGlzIGZvciBtYWtpbmcgZW1hY3MgaGFwcHk6IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImN1cnNlc2FwcC5oIgorCisjaWYgQ1BQX0hBU19UUllfQ0FUQ0ggJiYgSEFWRV9JT1NUUkVBTQorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2Vsc2UKKyN1bmRlZiBDUFBfSEFTX1RSWV9DQVRDSAorI2RlZmluZSBDUFBfSEFTX1RSWV9DQVRDSCAwCisjZW5kaWYKKworTU9EVUxFX0lEKCIkSWQ6IGN1cnNlc21haW4uY2MsdiAxLjE0IDIwMDcvMDQvMDcgMTc6MTA6MTEgdG9tIEV4cCAkIikKKworI2lmIEhBVkVfTE9DQUxFX0gKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbHNlCisjZGVmaW5lIHNldGxvY2FsZShuYW1lLHN0cmluZykgLyogbm90aGluZyAqLworI2VuZGlmCisKKyNpZiBOT19MRUFLUworI2luY2x1ZGUgPG5jX2FsbG9jLmg+CisjZW5kaWYKKworLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBtYWluKCkgZm9yIGEgTkN1cnNlc0FwcGxpY2F0aW9uLgorICogWW91IG9ubHkgaGF2ZSB0byBpbnN0YW50aWF0ZSBhIHN0YXRpYyBOQ3Vyc2VzQXBwbGljYXRpb24gb2JqZWN0IGluIHlvdXIKKyAqIG1haW4gYXBwbGljYXRpb24gc291cmNlIGZpbGUgYW5kIGxpbmsgdGhpcyBtb2R1bGUgd2l0aCB5b3VyIGFwcGxpY2F0aW9uLgorICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgTkN1cnNlc0FwcGxpY2F0aW9uKiBBID0gTkN1cnNlc0FwcGxpY2F0aW9uOjpnZXRBcHBsaWNhdGlvbigpOworICBpZiAoIUEpCisgICAgcmV0dXJuKDEpOworICBlbHNlIHsKKyAgICBpbnQgcmVzOworCisgICAgQS0+aGFuZGxlQXJncyhhcmdjLGFyZ3YpOworICAgIDo6ZW5kd2luKCk7CisjaWYgQ1BQX0hBU19UUllfQ0FUQ0gKKyAgICB0cnkgeworICAgICAgcmVzID0gKCpBKSgpOworICAgICAgOjplbmR3aW4oKTsKKyAgICB9CisgICAgY2F0Y2goY29uc3QgTkN1cnNlc0V4Y2VwdGlvbiAmZSkgeworICAgICAgOjplbmR3aW4oKTsKKyAgICAgIHN0ZDo6Y2VyciA8PCBlLm1lc3NhZ2UgPDwgc3RkOjplbmRsOworICAgICAgcmVzID0gZS5lcnJvcm5vOworICAgIH0KKyNlbHNlCisgICAgcmVzID0gKCpBKSgpOworICAgIDo6ZW5kd2luKCk7CisjZW5kaWYKKyNpZiBOT19MRUFLUworICAgIGRlbGV0ZSBBOworICAgIF9uY19mcmVlX2FuZF9leGl0KHJlcyk7CisjZWxzZQorICAgIHJldHVybihyZXMpOworI2VuZGlmCisgIH0KK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2MrKy9jdXJzZXNwLmNjIGIvbmN1cnNlcy01LjcvYysrL2N1cnNlc3AuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0ZWFiNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9jdXJzZXNwLmNjCkBAIC0wLDAgKzEsMTM4IEBACisvLyAqIHRoaXMgaXMgZm9yIG1ha2luZyBlbWFjcyBoYXBweTogLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTMsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiY3Vyc2VzcC5oIgorCitNT0RVTEVfSUQoIiRJZDogY3Vyc2VzcC5jYyx2IDEuMjUgMjAwNS8wOC8wNiAyMjoxMjozNiB0b20gRXhwICQiKQorCitOQ3Vyc2VzUGFuZWwqIE5DdXJzZXNQYW5lbDo6ZHVtbXkgPSBzdGF0aWNfY2FzdDxOQ3Vyc2VzUGFuZWwqPigwKTsKKwordm9pZCBOQ3Vyc2VzUGFuZWw6OmluaXQoKQoreworICBwID0gOjpuZXdfcGFuZWwodyk7CisgIGlmICghcCkKKyAgICBPbkVycm9yKEVSUik7CisKKyAgVXNlckhvb2sqIGhvb2sgPSBuZXcgVXNlckhvb2s7CisgIGhvb2stPm1fdXNlciAgPSBOVUxMOworICBob29rLT5tX2JhY2sgID0gdGhpczsKKyAgaG9vay0+bV9vd25lciA9IHA7CisgIDo6c2V0X3BhbmVsX3VzZXJwdHIocCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+KGhvb2spKTsKK30KKworTkN1cnNlc1BhbmVsOjp+TkN1cnNlc1BhbmVsKCkKK3sKKyAgVXNlckhvb2sqIGhvb2sgPSBVc2VyUG9pbnRlcigpOworICBhc3NlcnQoaG9vayAhPSAwICYmIGhvb2stPm1fYmFjaz09dGhpcyAmJiBob29rLT5tX293bmVyPT1wKTsKKyAgZGVsZXRlIGhvb2s7CisgIDo6ZGVsX3BhbmVsKHApOworICA6OnVwZGF0ZV9wYW5lbHMoKTsKK30KKwordm9pZAorTkN1cnNlc1BhbmVsOjpyZWRyYXcoKQoreworICBQQU5FTCAqcGFuOworCisgIHBhbiA9IDo6cGFuZWxfYWJvdmUoTlVMTCk7CisgIHdoaWxlIChwYW4pIHsKKyAgICA6OnRvdWNod2luKHBhbmVsX3dpbmRvdyhwYW4pKTsKKyAgICBwYW4gPSA6OnBhbmVsX2Fib3ZlKHBhbik7CisgIH0KKyAgOjp1cGRhdGVfcGFuZWxzKCk7CisgIDo6ZG91cGRhdGUoKTsKK30KKworaW50CitOQ3Vyc2VzUGFuZWw6OnJlZnJlc2goKQoreworICA6OnVwZGF0ZV9wYW5lbHMoKTsKKyAgcmV0dXJuIDo6ZG91cGRhdGUoKTsKK30KKworaW50CitOQ3Vyc2VzUGFuZWw6Om5vdXRyZWZyZXNoKCkKK3sKKyAgOjp1cGRhdGVfcGFuZWxzKCk7CisgIHJldHVybiBPSzsKK30KKwordm9pZAorTkN1cnNlc1BhbmVsOjpib2xkZnJhbWUoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIqIGJ0aXRsZSkKK3sKKyAgc3RhbmRvdXQoKTsKKyAgZnJhbWUodGl0bGUsIGJ0aXRsZSk7CisgIHN0YW5kZW5kKCk7Cit9CisKK3ZvaWQKK05DdXJzZXNQYW5lbDo6ZnJhbWUoY29uc3QgY2hhciAqdGl0bGUsY29uc3QgY2hhciAqYnRpdGxlKQoreworICBpbnQgZXJyID0gT0s7CisgIGlmICghdGl0bGUgJiYgIWJ0aXRsZSkgeworICAgIGVyciA9IGJveCgpOworICB9CisgIGVsc2UgeworICAgIGVyciA9IGJveCgpOworICAgIGlmIChlcnI9PU9LKQorICAgICAgbGFiZWwodGl0bGUsYnRpdGxlKTsKKyAgfQorICBPbkVycm9yKGVycik7Cit9CisKK3ZvaWQKK05DdXJzZXNQYW5lbDo6bGFiZWwoY29uc3QgY2hhciAqdExhYmVsLCBjb25zdCBjaGFyICpiTGFiZWwpCit7CisgIGlmICh0TGFiZWwpCisgICAgY2VudGVydGV4dCgwLHRMYWJlbCk7CisgIGlmIChiTGFiZWwpCisgICAgY2VudGVydGV4dChtYXh5KCksYkxhYmVsKTsKK30KKwordm9pZAorTkN1cnNlc1BhbmVsOjpjZW50ZXJ0ZXh0KGludCByb3csY29uc3QgY2hhciAqbGFiZWxUZXh0KQoreworICBpZiAobGFiZWxUZXh0KSB7CisgICAgaW50IHggPSAobWF4eCgpIC0gOjpzdHJsZW4obGFiZWxUZXh0KSkgLyAyOworICAgIGlmICh4PDApCisgICAgICB4PTA7CisgICAgT25FcnJvcihhZGRzdHIocm93LCB4LCBsYWJlbFRleHQsIHdpZHRoKCkpKTsKKyAgfQorfQorCitpbnQKK05DdXJzZXNQYW5lbDo6Z2V0S2V5KHZvaWQpCit7CisgIHJldHVybiBnZXRjaCgpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2N1cnNlc3AuaCBiL25jdXJzZXMtNS43L2MrKy9jdXJzZXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2M2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9jdXJzZXNwLmgKQEAgLTAsMCArMSwyNjggQEAKKy8vICogVGhpcyBtYWtlcyBlbWFjcyBoYXBweSAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE5DVVJTRVNfQ1VSU0VTUF9IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19DVVJTRVNQX0hfaW5jbCAxCisKKy8vICRJZDogY3Vyc2VzcC5oLHYgMS4yOSAyMDA4LzA4LzE2IDE3OjIwOjIzIHRvbSBFeHAgJAorCisjaW5jbHVkZSA8Y3Vyc2Vzdy5oPgorCitleHRlcm4gIkMiIHsKKyMgIGluY2x1ZGUgPHBhbmVsLmg+Cit9CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNQYW5lbAorICA6IHB1YmxpYyBOQ3Vyc2VzV2luZG93Cit7Citwcm90ZWN0ZWQ6CisgIFBBTkVMICpwOworICBzdGF0aWMgTkN1cnNlc1BhbmVsICpkdW1teTsKKworcHJpdmF0ZToKKyAgLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgdGhlIHBhbmVsJ3MgdXNlciBkYXRhIGZpZWxkIHRvIGxpbmsgdGhlCisgIC8vIFBBTkVMKiB0byB0aGUgQysrIG9iamVjdCBhbmQgdG8gcHJvdmlkZSBleHRyYSBzcGFjZSBmb3IgYSB1c2VyIHBvaW50ZXIuCisgIHR5cGVkZWYgc3RydWN0IHsKKyAgICB2b2lkKiAgICAgICAgICAgICAgIG1fdXNlcjsgICAgICAvLyB0aGUgcG9pbnRlciBmb3IgdGhlIHVzZXIncyBkYXRhCisgICAgY29uc3QgTkN1cnNlc1BhbmVsKiBtX2JhY2s7ICAgICAgLy8gYmFja3dhcmQgcG9pbnRlciB0byBDKysgb2JqZWN0CisgICAgY29uc3QgUEFORUwqICAgICAgICBtX293bmVyOyAgICAgLy8gdGhlIHBhbmVsIGl0c2VsZgorICB9IFVzZXJIb29rOworCisgIGlubGluZSBVc2VySG9vayAqVXNlclBvaW50ZXIoKQorICB7CisgICAgVXNlckhvb2sqIHVwdHIgPSByZWludGVycHJldF9jYXN0PFVzZXJIb29rKj4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9jYXN0PHZvaWQgKj4oOjpwYW5lbF91c2VycHRyIChwKSkpOworICAgIHJldHVybiB1cHRyOworICB9CisKKyAgdm9pZCBpbml0KCk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBwYW5lbCBvYmplY3QKKworcHJvdGVjdGVkOgorICB2b2lkIHNldF91c2VyKHZvaWQgKnVzZXIpCisgIHsKKyAgICBVc2VySG9vayogdXB0ciA9IFVzZXJQb2ludGVyKCk7CisgICAgaWYgKHVwdHIgIT0gMCAmJiB1cHRyLT5tX2JhY2s9PXRoaXMgJiYgdXB0ci0+bV9vd25lcj09cCkgeworICAgICAgdXB0ci0+bV91c2VyID0gdXNlcjsKKyAgICB9CisgIH0KKyAgLy8gU2V0IHRoZSB1c2VyIHBvaW50ZXIgb2YgdGhlIHBhbmVsLgorCisgIHZvaWQgKmdldF91c2VyKCkKKyAgeworICAgIFVzZXJIb29rKiB1cHRyID0gVXNlclBvaW50ZXIoKTsKKyAgICB2b2lkICpyZXN1bHQgPSAwOworICAgIGlmICh1cHRyICE9IDAgJiYgdXB0ci0+bV9iYWNrPT10aGlzICYmIHVwdHItPm1fb3duZXI9PXApCisgICAgICByZXN1bHQgPSB1cHRyLT5tX3VzZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHZvaWQgT25FcnJvciAoaW50IGVycikgY29uc3QgVEhST1dTKE5DdXJzZXNQYW5lbEV4Y2VwdGlvbikKKyAgeworICAgIGlmIChlcnI9PUVSUikKKyAgICAgIFRIUk9XKG5ldyBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24gKHRoaXMsIGVycikpOworICB9CisgIC8vIElmIGVyciBpcyBlcXVhbCB0byB0aGUgY3Vyc2VzIGVycm9yIGluZGljYXRvciBFUlIsIGFuIGVycm9yIGhhbmRsZXIKKyAgLy8gaXMgY2FsbGVkLgorCisgIC8vIEdldCBhIGtleXN0cm9rZS4gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjYWxscyBnZXRjaCgpCisgIHZpcnR1YWwgaW50IGdldEtleSh2b2lkKTsKKworcHVibGljOgorICBOQ3Vyc2VzUGFuZWwoaW50IG5saW5lcywKKwkgICAgICAgaW50IG5jb2xzLAorCSAgICAgICBpbnQgYmVnaW5feSA9IDAsCisJICAgICAgIGludCBiZWdpbl94ID0gMCkKKyAgICA6IE5DdXJzZXNXaW5kb3cobmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCksIHAoMCkKKyAgeworICAgIGluaXQoKTsKKyAgfQorICAvLyBDcmVhdGUgYSBwYW5lbCB3aXRoIHRoaXMgc2l6ZSBzdGFydGluZyBhdCB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uLgorCisgIE5DdXJzZXNQYW5lbCgpCisgICAgOiBOQ3Vyc2VzV2luZG93KDo6c3Rkc2NyKSwgcCgwKQorICB7CisgICAgaW5pdCgpOworICB9CisgIC8vIFRoaXMgY29uc3RydWN0b3IgY3JlYXRlcyB0aGUgZGVmYXVsdCBQYW5lbCBhc3NvY2lhdGVkIHdpdGggdGhlCisgIC8vIDo6c3Rkc2NyIHdpbmRvdworCisgIE5DdXJzZXNQYW5lbCYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNQYW5lbCYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgICBOQ3Vyc2VzV2luZG93OjpvcGVyYXRvcj0ocmhzKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc1BhbmVsKGNvbnN0IE5DdXJzZXNQYW5lbCYgcmhzKQorICAgIDogTkN1cnNlc1dpbmRvdyhyaHMpLAorICAgICAgcChyaHMucCkKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc1BhbmVsKCk7CisKKyAgLy8gYmFzaWMgbWFuaXB1bGF0aW9uCisgIGlubGluZSB2b2lkIGhpZGUoKQorICB7CisgICAgT25FcnJvciAoOjpoaWRlX3BhbmVsKHApKTsKKyAgfQorICAvLyBIaWRlIHRoZSBwYW5lbC4gSXQgc3RheXMgaW4gdGhlIHN0YWNrIGJ1dCBiZWNvbWVzIGludmlzaWJsZS4KKworICBpbmxpbmUgdm9pZCBzaG93KCkKKyAgeworICAgIE9uRXJyb3IgKDo6c2hvd19wYW5lbChwKSk7CisgIH0KKyAgLy8gU2hvdyB0aGUgcGFuZWwsIGkuZS4gbWFrZSBpdCB2aXNpYmxlLgorCisgIGlubGluZSB2b2lkIHRvcCgpCisgIHsKKyAgICBPbkVycm9yICg6OnRvcF9wYW5lbChwKSk7CisgIH0KKyAgLy8gTWFrZSB0aGlzIHBhbmVsIHRoZSB0b3AgcGFuZWwgaW4gdGhlIHN0YWNrLgorCisgIGlubGluZSB2b2lkIGJvdHRvbSgpCisgIHsKKyAgICBPbkVycm9yICg6OmJvdHRvbV9wYW5lbChwKSk7CisgIH0KKyAgLy8gTWFrZSB0aGlzIHBhbmVsIHRoZSBib3R0b20gcGFuZWwgaW4gdGhlIHN0YWNrLgorICAvLyBOLkIuOiBUaGUgcGFuZWwgYXNzb2NpYXRlZCB3aXRoIDo6c3Rkc2NyIGlzIGFsd2F5cyBvbiB0aGUgYm90dG9tLiBTbworICAvLyBhY3R1YWxseSBib3R0b20oKSBtYWtlcyB0aGUgcGFuZWwgdGhlIGZpcnN0IGFib3ZlIDo6c3Rkc2NyLgorCisgIHZpcnR1YWwgaW50IG12d2luKGludCB5LCBpbnQgeCkKKyAgeworICAgIE9uRXJyb3IoOjptb3ZlX3BhbmVsKHAsIHksIHgpKTsKKyAgICByZXR1cm4gT0s7CisgIH0KKworICBpbmxpbmUgYm9vbCBoaWRkZW4oKSBjb25zdAorICB7CisgICAgcmV0dXJuICg6OnBhbmVsX2hpZGRlbiAocCkgPyBUUlVFIDogRkFMU0UpOworICB9CisgIC8vIFJldHVybiBUUlVFIGlmIHRoZSBwYW5lbCBpcyBoaWRkZW4sIEZBTFNFIG90aGVyd2lzZS4KKworLyogVGhlIGZ1bmN0aW9ucyBwYW5lbF9hYm92ZSgpIGFuZCBwYW5lbF9iZWxvdygpIGFyZSBub3QgcmVmbGVjdGVkIGluCisgICB0aGUgTkN1cnNlc1BhbmVsIGNsYXNzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzLCB0aGF0IHdlIGNhbm5vdAorICAgYXNzdW1lIHRoYXQgYSBwYW5lbCByZXRyaWV2ZWQgYnkgdGhvc2Ugb3BlcmF0aW9ucyBpcyBvbmUgd3JhcHBlZAorICAgYnkgYSBDKysgY2xhc3MuIEFsdGhvdWdoIHRoaXMgc2l0dWF0aW9uIG1pZ2h0IGJlIGhhbmRsZWQsIHdlIGFsc28KKyAgIG5lZWQgYSByZXZlcnNlIG1hcHBpbmcgZnJvbSBQQU5FTCB0byBOQ3Vyc2VzUGFuZWwgd2hpY2ggbmVlZHMgc29tZQorICAgcmVkZXNpZ24gb2YgdGhlIGxvdyBsZXZlbCBzdHVmZi4gQXQgdGhlIG1vbWVudCwgd2UgZGVmaW5lIHRoZW0gaW4gdGhlCisgICBpbnRlcmZhY2UgYnV0IHRoZXkgd2lsbCBhbHdheXMgcHJvZHVjZSBhbiBlcnJvci4gKi8KKyAgaW5saW5lIE5DdXJzZXNQYW5lbCYgYWJvdmUoKSBjb25zdAorICB7CisgICAgT25FcnJvcihFUlIpOworICAgIHJldHVybiAqZHVtbXk7CisgIH0KKworICBpbmxpbmUgTkN1cnNlc1BhbmVsJiBiZWxvdygpIGNvbnN0CisgIHsKKyAgICBPbkVycm9yKEVSUik7CisgICAgcmV0dXJuICpkdW1teTsKKyAgfQorCisgIC8vIFRob3NlIHR3byBhcmUgcmV3cml0ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdmlydHVhbCBtZW1iZXJzIG9mCisgIC8vIE5DdXJzZXNXaW5kb3cKKyAgdmlydHVhbCBpbnQgcmVmcmVzaCgpOworICAvLyBQcm9wYWdhdGUgYWxsIHBhbmVsIGNoYW5nZXMgdG8gdGhlIHZpcnR1YWwgc2NyZWVuIGFuZCB1cGRhdGUgdGhlCisgIC8vIHBoeXNpY2FsIHNjcmVlbi4KKworICB2aXJ0dWFsIGludCBub3V0cmVmcmVzaCgpOworICAvLyBQcm9wYWdhdGUgYWxsIHBhbmVsIGNoYW5nZXMgdG8gdGhlIHZpcnR1YWwgc2NyZWVuLgorCisgIHN0YXRpYyB2b2lkIHJlZHJhdygpOworICAvLyBSZWRyYXcgYWxsIHBhbmVscy4KKworICAvLyBkZWNvcmF0aW9ucworICB2aXJ0dWFsIHZvaWQgZnJhbWUoY29uc3QgY2hhciogdGl0bGU9TlVMTCwKKwkJICAgICBjb25zdCBjaGFyKiBidGl0bGU9TlVMTCk7CisgIC8vIFB1dCBhIGZyYW1lIGFyb3VuZCB0aGUgcGFuZWwgYW5kIHB1dCB0aGUgdGl0bGUgY2VudGVyZWQgaW4gdGhlIHRvcCBsaW5lCisgIC8vIGFuZCBidGl0bGUgaW4gdGhlIGJvdHRvbSBsaW5lLgorCisgIHZpcnR1YWwgdm9pZCBib2xkZnJhbWUoY29uc3QgY2hhciogdGl0bGU9TlVMTCwKKwkJCSBjb25zdCBjaGFyKiBidGl0bGU9TlVMTCk7CisgIC8vIFNhbWUgYXMgZnJhbWUoKSwgYnV0IHVzZSBoaWdobGlnaHRlZCBhdHRyaWJ1dGVzLgorCisgIHZpcnR1YWwgdm9pZCBsYWJlbChjb25zdCBjaGFyKiB0b3BMYWJlbCwKKwkJICAgICBjb25zdCBjaGFyKiBib3R0b21MYWJlbCk7CisgIC8vIFB1dCB0aGUgdGl0bGUgY2VudGVyZWQgaW4gdGhlIHRvcCBsaW5lIGFuZCBidGl0bGUgaW4gdGhlIGJvdHRvbSBsaW5lLgorCisgIHZpcnR1YWwgdm9pZCBjZW50ZXJ0ZXh0KGludCByb3csY29uc3QgY2hhciogbGFiZWwpOworICAvLyBQdXQgdGhlIGxhYmVsIHRleHQgY2VudGVyZWQgaW4gdGhlIHNwZWNpZmllZCByb3cuCit9OworCisvKiBXZSB1c2UgdGVtcGxhdGVzIHRvIHByb3ZpZGUgYSB0eXBlc2FmZSBtZWNoYW5pc20gdG8gYXNzb2NpYXRlCisgKiB1c2VyIGRhdGEgd2l0aCBhIHBhbmVsLiBBIE5DdXJzZXNVc2VyUGFuZWw8VD4gaXMgYSBwYW5lbAorICogYXNzb2NpYXRlZCB3aXRoIHNvbWUgdXNlciBkYXRhIG9mIHR5cGUgVC4KKyAqLwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTkN1cnNlc1VzZXJQYW5lbCA6IHB1YmxpYyBOQ3Vyc2VzUGFuZWwKK3sKK3B1YmxpYzoKKyAgTkN1cnNlc1VzZXJQYW5lbCAoaW50IG5saW5lcywKKwkJICAgIGludCBuY29scywKKwkJICAgIGludCBiZWdpbl95ID0gMCwKKwkJICAgIGludCBiZWdpbl94ID0gMCwKKwkJICAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBTVEFUSUNfQ0FTVChUKikoMCkpCisgICAgOiBOQ3Vyc2VzUGFuZWwgKG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpCisgIHsKKyAgICAgIGlmIChwKQorCXNldF91c2VyIChjb25zdF9jYXN0PHZvaWQgKj4ocF9Vc2VyRGF0YSkpOworICB9OworICAvLyBUaGlzIGNyZWF0ZXMgYW4gdXNlciBwYW5lbCBvZiB0aGUgcmVxdWVzdGVkIHNpemUgd2l0aCBhc3NvY2lhdGVkCisgIC8vIHVzZXIgZGF0YSBwb2ludGVkIHRvIGJ5IHBfVXNlckRhdGEuCisKKyAgTkN1cnNlc1VzZXJQYW5lbChjb25zdCBUKiBwX1VzZXJEYXRhID0gU1RBVElDX0NBU1QoVCopKDApKSA6IE5DdXJzZXNQYW5lbCgpCisgIHsKKyAgICBpZiAocCkKKyAgICAgIHNldF91c2VyKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH07CisgIC8vIFRoaXMgY3JlYXRlcyBhbiB1c2VyIHBhbmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgOjpzdGRzY3IgYW5kIHVzZXIgZGF0YQorICAvLyBwb2ludGVkIHRvIGJ5IHBfVXNlckRhdGEuCisKKyAgdmlydHVhbCB+TkN1cnNlc1VzZXJQYW5lbCgpIHt9OworCisgIFQqIFVzZXJEYXRhICh2b2lkKSBjb25zdAorICB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGdldF91c2VyICgpKTsKKyAgfTsKKyAgLy8gUmV0cmlldmUgdGhlIHVzZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHBhbmVsLgorCisgIHZpcnR1YWwgdm9pZCBzZXRVc2VyRGF0YSAoY29uc3QgVCogcF9Vc2VyRGF0YSkKKyAgeworICAgIGlmIChwKQorICAgICAgc2V0X3VzZXIgKGNvbnN0X2Nhc3Q8dm9pZCAqPihwX1VzZXJEYXRhKSk7CisgIH0KKyAgLy8gQXNzb2NpYXRlIHRoZSB1c2VyIHBhbmVsIHdpdGggdGhlIHVzZXIgZGF0YSBwb2ludGVkIHRvIGJ5IHBfVXNlckRhdGEuCit9OworCisjZW5kaWYgLyogTkNVUlNFU19DVVJTRVNQX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2N1cnNlc3BhZC5jYyBiL25jdXJzZXMtNS43L2MrKy9jdXJzZXNwYWQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjNThmYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9jdXJzZXNwYWQuY2MKQEAgLTAsMCArMSwyNzkgQEAKKy8vICogdGhpcyBpcyBmb3IgbWFraW5nIGVtYWNzIGhhcHB5OiAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPGV0aXAuaD4KKyNpbmNsdWRlIDxjdXJzZXN3Lmg+CisKK01PRFVMRV9JRCgiJElkOiBjdXJzZXNwYWQuY2MsdiAxLjEzIDIwMDgvMDgvMDQgMTg6NTk6MjIgdG9tIEV4cCAkIikKKworTkN1cnNlc1BhZDo6TkN1cnNlc1BhZChpbnQgbmxpbmVzLCBpbnQgbmNvbHMpCisgIDogTkN1cnNlc1dpbmRvdygpLAorICAgIHZpZXdXaW4oc3RhdGljX2Nhc3Q8TkN1cnNlc1dpbmRvdyo+KDApKSwKKyAgICB2aWV3U3ViKHN0YXRpY19jYXN0PE5DdXJzZXNXaW5kb3cqPigwKSksCisgICAgaF9ncmlkc2l6ZSgwKSwgdl9ncmlkc2l6ZSgwKSwKKyAgICBtaW5fcm93KDApLCBtaW5fY29sKDApCit7CisgIHcgPSA6Om5ld3BhZChubGluZXMsIG5jb2xzKTsKKyAgaWYgKHN0YXRpY19jYXN0PFdJTkRPVyo+KDApID09IHcpIHsKKyAgICBjb3VudC0tOworICAgIGVycl9oYW5kbGVyKCJDYW5ub3QgY29uc3RydWN0IHdpbmRvdyIpOworICB9CisgIGFsbG9jZWQgPSBUUlVFOworfQorCisKK2ludCBOQ3Vyc2VzUGFkOjpkcml2ZXIgKGludCBrZXkpCit7CisgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgc3dpdGNoKGtleSkgeworICBjYXNlIEtFWV9VUDoKKyAgICAvLyA9PT09PT09CisgICAgcmV0dXJuIFJFUV9QQURfVVA7CisgIGNhc2UgS0VZX0RPV046CisgICAgLy8gPT09PT09PT09CisgICAgcmV0dXJuIFJFUV9QQURfRE9XTjsKKyAgY2FzZSBLRVlfTEVGVDoKKyAgICAvLyA9PT09PT09PT0KKyAgICByZXR1cm4gUkVRX1BBRF9MRUZUOworICBjYXNlIEtFWV9SSUdIVDoKKyAgICAvLyA9PT09PT09PT09CisgICAgcmV0dXJuIFJFUV9QQURfUklHSFQ7CisgIGNhc2UgS0VZX0VYSVQ6CisgICAgLy8gPT09PT09PT09CisgIGNhc2UgQ1RSTCgnWCcpOgorICAgIC8vID09PT09PT09PT0KKyAgICByZXR1cm4gUkVRX1BBRF9FWElUOworCisgIGRlZmF1bHQ6IHJldHVybihrZXkpOworICB9Cit9CisKKwordm9pZCBOQ3Vyc2VzUGFkOjpvcGVyYXRvcigpKHZvaWQpCit7CisgIE5DdXJzZXNXaW5kb3cqIFcgPSBXaW4oKTsKKworICBpZiAoc3RhdGljX2Nhc3Q8TkN1cnNlc1dpbmRvdyo+KDApICE9IFcpIHsKKyAgICBpbnQgV2lkdGggID0gVy0+d2lkdGgoKTsKKyAgICBpbnQgSGVpZ2h0ID0gVy0+aGVpZ2h0KCk7CisKKyAgICBpbnQgcmVxID0gUkVRX1BBRF9SRUZSRVNIOworCisgICAgVy0+a2V5cGFkKFRSVUUpOworICAgIFctPm1ldGEoVFJVRSk7CisgICAgcmVmcmVzaCgpOworCisgICAgZG8geworICAgICAgYm9vbCBjaGFuZ2VkID0gRkFMU0U7CisKKyAgICAgIHN3aXRjaCAocmVxKSB7CisgICAgICBjYXNlIFJFUV9QQURfUkVGUkVTSDoKKwkvLyA9PT09PT09PT09PT09PT09CisJY2hhbmdlZCA9IFRSVUU7CisJYnJlYWs7CisgICAgICBjYXNlIFJFUV9QQURfTEVGVDoKKwkvLyA9PT09PT09PT09PT09CisJaWYgKG1pbl9jb2wgPiAwKSB7CisJICBjaGFuZ2VkID0gVFJVRTsKKwkgIGlmIChtaW5fY29sIDwgaF9ncmlkc2l6ZSkKKwkgICAgbWluX2NvbCA9IDA7CisJICBlbHNlCisJICAgIG1pbl9jb2wgLT0gaF9ncmlkc2l6ZTsKKwl9CisJZWxzZQorCSAgT25OYXZpZ2F0aW9uRXJyb3IocmVxKTsKKwlicmVhazsKKyAgICAgIGNhc2UgUkVRX1BBRF9SSUdIVDoKKwkvLyA9PT09PT09PT09PT09PQorCWlmIChtaW5fY29sIDwgKHdpZHRoKCkgLSBXaWR0aCAtIDEpKSB7CisJICBjaGFuZ2VkID0gVFJVRTsKKwkgIGlmIChtaW5fY29sID4gKHdpZHRoKCkgLSBXaWR0aCAtIGhfZ3JpZHNpemUgLSAxKSkKKwkgICAgbWluX2NvbCA9IHdpZHRoKCkgLSBXaWR0aCAtIDE7CisJICBlbHNlCisJICAgIG1pbl9jb2wgKz0gaF9ncmlkc2l6ZTsKKwl9CisJZWxzZQorCSAgT25OYXZpZ2F0aW9uRXJyb3IocmVxKTsKKwlicmVhazsKKyAgICAgIGNhc2UgUkVRX1BBRF9VUDoKKwkvLyA9PT09PT09PT09PQorCWlmIChtaW5fcm93ID4gMCkgeworCSAgY2hhbmdlZCA9IFRSVUU7CisJICBpZiAobWluX3JvdyA8IHZfZ3JpZHNpemUpCisJICAgIG1pbl9yb3cgPSAwOworCSAgZWxzZQorCSAgICBtaW5fcm93IC09IHZfZ3JpZHNpemU7CisJfQorCWVsc2UKKwkgIE9uTmF2aWdhdGlvbkVycm9yKHJlcSk7CisJYnJlYWs7CisgICAgICBjYXNlIFJFUV9QQURfRE9XTjoKKwkvLyA9PT09PT09PT09PT09CisJaWYgKG1pbl9yb3cgPCAoaGVpZ2h0KCkgLSBIZWlnaHQgLSAxKSkgeworCSAgY2hhbmdlZCA9IFRSVUU7CisJICBpZiAobWluX3JvdyA+IChoZWlnaHQoKSAtIEhlaWdodCAtIHZfZ3JpZHNpemUgLSAxKSkKKwkgICAgbWluX3JvdyA9IGhlaWdodCgpIC0gSGVpZ2h0IC0gMTsKKwkgIGVsc2UKKwkgICAgbWluX3JvdyArPSB2X2dyaWRzaXplOworCX0KKwllbHNlCisJICBPbk5hdmlnYXRpb25FcnJvcihyZXEpOworCWJyZWFrOworCisgICAgICBkZWZhdWx0OgorCU9uVW5rbm93bk9wZXJhdGlvbihyZXEpOworICAgICAgfQorCisgICAgICBpZiAoY2hhbmdlZCkgeworCW5vdXRyZWZyZXNoKCk7CisJVy0+c3luY3VwKCk7CisJT25PcGVyYXRpb24ocmVxKTsKKwl2aWV3V2luLT5yZWZyZXNoKCk7CisgICAgICB9CisgICAgfSB3aGlsZSggKHJlcT1kcml2ZXIoVy0+Z2V0Y2goKSkpICE9IFJFUV9QQURfRVhJVCApOworICB9Cit9CisKKworaW50IE5DdXJzZXNQYWQ6OnJlZnJlc2goKQoreworICBpbnQgcmVzID0gbm91dHJlZnJlc2goKTsKKyAgaWYgKHJlcz09T0sgJiYgKHN0YXRpY19jYXN0PE5DdXJzZXNXaW5kb3cqPigwKSAhPSB2aWV3V2luKSkgeworICAgIHJlcyA9ICh2aWV3V2luLT5yZWZyZXNoKCkpOworICB9CisgIHJldHVybihyZXMpOworfQorCitpbnQgTkN1cnNlc1BhZDo6bm91dHJlZnJlc2goKQoreworICBpbnQgcmVzID0gT0s7CisgIE5DdXJzZXNXaW5kb3cqIFcgPSBXaW4oKTsKKyAgaWYgKHN0YXRpY19jYXN0PE5DdXJzZXNXaW5kb3cqPigwKSAhPSBXKSB7CisgICAgaW50IGhpZ2ggPSBXLT5tYXh5KCk7CisgICAgaW50IHdpZGUgPSBXLT5tYXh4KCk7CisgICAgcmVzID0gY29weXdpbigqVywgbWluX3JvdywgbWluX2NvbCwKKwkJICAwLCAwLCBoaWdoLCB3aWRlLAorCQkgIEZBTFNFKTsKKyAgICBpZiAocmVzPT1PSykgeworICAgICAgVy0+c3luY3VwKCk7CisgICAgICByZXMgPSB2aWV3V2luLT5ub3V0cmVmcmVzaCgpOworICAgIH0KKyAgfQorICByZXR1cm4gKHJlcyk7Cit9CisKK3ZvaWQgTkN1cnNlc1BhZDo6c2V0V2luZG93KE5DdXJzZXNXaW5kb3cmIHZpZXcsCisJCQkgICBpbnQgdl9ncmlkIE5DVVJTRVNfUEFSQU1fSU5JVCgxKSwKKwkJCSAgIGludCBoX2dyaWQgTkNVUlNFU19QQVJBTV9JTklUKDEpKQoreworICB2aWV3V2luID0gJnZpZXc7CisgIG1pbl9yb3cgPSBtaW5fY29sID0gMDsKKyAgaWYgKGhfZ3JpZCA8PTAgfHwgdl9ncmlkIDw9IDApCisgICAgZXJyX2hhbmRsZXIoIklsbGVnYWwgR3JpZHNpemUiKTsKKyAgZWxzZSB7CisgICAgaF9ncmlkc2l6ZSA9IGhfZ3JpZDsKKyAgICB2X2dyaWRzaXplID0gdl9ncmlkOworICB9Cit9CisKK3ZvaWQgTkN1cnNlc1BhZDo6c2V0U3ViV2luZG93KE5DdXJzZXNXaW5kb3cmIHN1YikKK3sKKyAgaWYgKHN0YXRpY19jYXN0PE5DdXJzZXNXaW5kb3cqPigwKSA9PSB2aWV3V2luKQorICAgIGVycl9oYW5kbGVyKCJQYWQgaGFzIG5vIHZpZXdwb3J0Iik7CisgIGFzc2VydCh2aWV3V2luICE9IDApOworICBpZiAoIXZpZXdXaW4tPmlzRGVzY2VuZGFudChzdWIpKQorICAgIFRIUk9XKG5ldyBOQ3Vyc2VzRXhjZXB0aW9uKCJOQ3Vyc2VzRnJhbWVQYWQiLCBFX1NZU1RFTV9FUlJPUikpOworICB2aWV3U3ViID0gJnN1YjsKK30KKwordm9pZCBOQ3Vyc2VzRnJhbWVkUGFkOjpPbk9wZXJhdGlvbihpbnQgcGFkX3JlcSkKK3sKKyAgTkN1cnNlc1dpbmRvdyogVyA9IFdpbigpOworICBOQ3Vyc2VzV2luZG93KiBXMiA9IGdldFdpbmRvdygpOworCisgIGlmICgoc3RhdGljX2Nhc3Q8TkN1cnNlc1dpbmRvdyo+KDApICE9IFcpICYmIChzdGF0aWNfY2FzdDxOQ3Vyc2VzV2luZG93Kj4oMCkgIT0gVzIpKSB7CisgICAgaW50IFdpZHRoICA9IFctPndpZHRoKCk7CisgICAgaW50IEhlaWdodCA9IFctPmhlaWdodCgpOworICAgIGludCBpLCByb3csIGNvbCwgaF9sZW4sIHZfbGVuOworCisgICAgaF9sZW4gPSAoV2lkdGgqV2lkdGggKyB3aWR0aCgpIC0gMSkvd2lkdGgoKTsKKyAgICBpZiAoaF9sZW49PTApCisgICAgICBoX2xlbiA9IDE7CisgICAgaWYgKGhfbGVuID4gV2lkdGgpCisgICAgICBoX2xlbiA9IFdpZHRoOworCisgICAgdl9sZW4gPSAoSGVpZ2h0KkhlaWdodCArIGhlaWdodCgpIC0gMSkvaGVpZ2h0KCk7CisgICAgaWYgKHZfbGVuPT0wKQorICAgICAgdl9sZW4gPSAxOworICAgIGlmICh2X2xlbiA+IEhlaWdodCkKKyAgICAgIHZfbGVuID0gSGVpZ2h0OworCisgICAgY29sICA9IChtaW5fY29sICogV2lkdGggKyB3aWR0aCgpIC0gMSkgIC8gd2lkdGgoKTsKKyAgICBpZiAoY29sICsgaF9sZW4gPiBXaWR0aCkKKyAgICAgIGNvbCA9IFdpZHRoIC0gaF9sZW47CisKKyAgICByb3cgID0gKG1pbl9yb3cgKiBIZWlnaHQgKyBoZWlnaHQoKSAtIDEpIC8gaGVpZ2h0KCk7CisgICAgaWYgKHJvdyArIHZfbGVuID4gSGVpZ2h0KQorICAgICAgcm93ID0gSGVpZ2h0IC0gdl9sZW47CisKKyAgICBXMi0+dmxpbmUoMSxXaWR0aCsxLEhlaWdodCk7CisgICAgVzItPmF0dHJvbihBX1JFVkVSU0UpOworICAgIGlmICh2X2xlbj49MikgeworICAgICAgVzItPmFkZGNoKHJvdysxLFdpZHRoKzEsQUNTX1VBUlJPVyk7CisgICAgICBmb3IoaT0yO2k8dl9sZW47aSsrKQorCVcyLT5hZGRjaChyb3craSxXaWR0aCsxLCcgJyk7CisgICAgICBXMi0+YWRkY2gocm93K3ZfbGVuLFdpZHRoKzEsQUNTX0RBUlJPVyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZm9yKGk9MTtpPD12X2xlbjtpKyspCisJVzItPmFkZGNoKHJvdytpLFdpZHRoKzEsJyAnKTsKKyAgICB9CisgICAgVzItPmF0dHJvZmYoQV9SRVZFUlNFKTsKKworICAgIFcyLT5obGluZShIZWlnaHQrMSwxLFdpZHRoKTsKKyAgICBXMi0+YXR0cm9uKEFfUkVWRVJTRSk7CisgICAgaWYgKGhfbGVuID49IDIpIHsKKyAgICAgIFcyLT5hZGRjaChIZWlnaHQrMSxjb2wrMSxBQ1NfTEFSUk9XKTsKKyAgICAgIGZvcihpPTI7aTxoX2xlbjtpKyspCisJVzItPmFkZGNoKEhlaWdodCsxLGNvbCtpLCcgJyk7CisgICAgICBXMi0+YWRkY2goSGVpZ2h0KzEsY29sK2hfbGVuLEFDU19SQVJST1cpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZvcihpPTE7aTw9aF9sZW47aSsrKQorCVcyLT5hZGRjaChIZWlnaHQrMSxjb2wraSwnICcpOworICAgIH0KKyAgICBXMi0+YXR0cm9mZihBX1JFVkVSU0UpOworICB9Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9jKysvY3Vyc2Vzdy5jYyBiL25jdXJzZXMtNS43L2MrKy9jdXJzZXN3LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNWQwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2Vzdy5jYwpAQCAtMCwwICsxLDQ3MCBAQAorLy8gKiB0aGlzIGlzIGZvciBtYWtpbmcgZW1hY3MgaGFwcHk6IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBdXRob3JzOgorICoJVGhvbWFzIEUuIERpY2tleQorICoJSnVlcmdlbiBQZmVpZmVyCisgKgorICogVGhlIE5DdXJzZXNXaW5kb3cgY2xhc3Mgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gYSBmaWxlIHdyaXR0ZW4gYnkKKyAqIEVyaWMgTmV3dG9uLCBsYXRlciBtb2RpZmllZCBieSBVbHJpY2ggRHJlcHBlciBhbmQgQW5hdG9seSBJdmFzeXVrLgorICogSG93ZXZlciwgYXNpZGUgZnJvbSB0aGUgY29tcGF0aWJsZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiwgbm8gdHJhY2UKKyAqIG9mIHRoZSBvcmlnaW5hbCBjb2RlIHJlbWFpbnMgaW4gdGhpcyB2ZXJzaW9uOiBpdCBjb25zaXN0cyBvbmx5IG9mCisgKiBjaGFuZ2VzIGludHJvZHVjZWQgc2luY2UgMTk5NS4KKyAqLworCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJjdXJzZXN3LmgiCisKK01PRFVMRV9JRCgiJElkOiBjdXJzZXN3LmNjLHYgMS40OSAyMDA3LzEyLzE1IDIzOjAxOjU3IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgQ09MT1JTX05FRURfSU5JVElBTElaQVRJT04gIC0xCisjZGVmaW5lIENPTE9SU19OT1RfSU5JVElBTElaRUQgICAgICAgMAorI2RlZmluZSBDT0xPUlNfTU9OT0NIUk9NRSAgICAgICAgICAgIDEKKyNkZWZpbmUgQ09MT1JTX0FSRV9SRUFMTFlfVEhFUkUgICAgICAyCisKKyNkZWZpbmUgSGF2ZUNvbG9ycygpIChjb2xvckluaXRpYWxpemVkID09IENPTE9SU19BUkVfUkVBTExZX1RIRVJFKQorCisvLyBkZWNsYXJlIHN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBjbGFzcworbG9uZyBOQ3Vyc2VzV2luZG93Ojpjb3VudCA9IDBMOworYm9vbCBOQ3Vyc2VzV2luZG93OjpiX2luaXRpYWxpemVkID0gRkFMU0U7CisKK2ludAorTkN1cnNlc1dpbmRvdzo6c2NhbncoY29uc3QgY2hhciogZm10LCAuLi4pCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgIHJlc3VsdCA9IDo6dndfc2NhbncgKHcsIGNvbnN0X2Nhc3Q8TkNVUlNFU19DT05TVCBjaGFyICo+KGZtdCksIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworaW50CitOQ3Vyc2VzV2luZG93OjpzY2FudyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIqIGZtdCwgLi4uKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBpZiAoOjp3bW92ZSh3LCB5LCB4KSAhPSBFUlIpIHsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlyZXN1bHQgPSA6OnZ3X3NjYW53ICh3LCBjb25zdF9jYXN0PE5DVVJTRVNfQ09OU1QgY2hhciAqPihmbXQpLCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworaW50CitOQ3Vyc2VzV2luZG93OjpzY2Fudyhjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgcmVzdWx0ID0gOjp2d19zY2FudyAodywgY29uc3RfY2FzdDxOQ1VSU0VTX0NPTlNUIGNoYXIgKj4oZm10KSwgYXJncyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK2ludAorTkN1cnNlc1dpbmRvdzo6c2NhbncoaW50IHksIGludCB4LCBjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgaWYgKDo6d21vdmUodywgeSwgeCkgIT0gRVJSKSB7CisJcmVzdWx0ID0gOjp2d19zY2FudyAodywgY29uc3RfY2FzdDxOQ1VSU0VTX0NPTlNUIGNoYXIgKj4oZm10KSwgYXJncyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworaW50CitOQ3Vyc2VzV2luZG93OjpwcmludHcoY29uc3QgY2hhciAqIGZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgIGludCByZXN1bHQgPSA6OnZ3X3ByaW50dyh3LCBmbXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK2ludAorTkN1cnNlc1dpbmRvdzo6cHJpbnR3KGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgIGludCByZXN1bHQgPSA6Ondtb3ZlKHcsIHksIHgpOworICAgIGlmIChyZXN1bHQgPT0gT0spIHsKKwlyZXN1bHQgPSA6OnZ3X3ByaW50dyh3LCBmbXQsIGFyZ3MpOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQKK05DdXJzZXNXaW5kb3c6OnByaW50dyhjb25zdCBjaGFyICogZm10LCB2YV9saXN0IGFyZ3MpCit7CisgICAgaW50IHJlc3VsdCA9IDo6dndfcHJpbnR3KHcsIGZtdCwgYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQKK05DdXJzZXNXaW5kb3c6OnByaW50dyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKiBmbXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgcmVzdWx0ID0gOjp3bW92ZSh3LCB5LCB4KTsKKyAgICBpZiAocmVzdWx0ID09IE9LKSB7CisJcmVzdWx0ID0gOjp2d19wcmludHcodywgZm10LCBhcmdzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkCitOQ3Vyc2VzV2luZG93OjpzZXRfa2V5Ym9hcmQodm9pZCkKK3sKKyAgICBrZXlwYWQoVFJVRSk7CisgICAgbWV0YShUUlVFKTsKK30KKwordm9pZAorTkN1cnNlc1dpbmRvdzo6ZXJyX2hhbmRsZXIoY29uc3QgY2hhciAqbXNnKSBjb25zdCBUSFJPV1MoTkN1cnNlc0V4Y2VwdGlvbikKK3sKKyAgVEhST1cobmV3IE5DdXJzZXNFeGNlcHRpb24obXNnKSk7Cit9CisKK3ZvaWQKK05DdXJzZXNXaW5kb3c6OmluaXRpYWxpemUoKQoreworICAgIGlmICghYl9pbml0aWFsaXplZCkgeworCTo6aW5pdHNjcigpOworCWJfaW5pdGlhbGl6ZWQgPSBUUlVFOworCWlmIChjb2xvckluaXRpYWxpemVkID09IENPTE9SU19ORUVEX0lOSVRJQUxJWkFUSU9OKSB7CisJICAgIGNvbG9ySW5pdGlhbGl6ZWQgPSBDT0xPUlNfTk9UX0lOSVRJQUxJWkVEOworCSAgICB1c2VDb2xvcnMoKTsKKwl9CisJOjpub2VjaG8oKTsKKwk6OmNicmVhaygpOworICAgIH0KK30KKwordm9pZAorTkN1cnNlc1dpbmRvdzo6Y29uc3RydWN0aW5nKCkKK3sKKyAgICBpbml0aWFsaXplKCk7CisgICAgKytjb3VudDsKK30KKworTkN1cnNlc1dpbmRvdzo6TkN1cnNlc1dpbmRvdygpCisgIDogdygwKSwgYWxsb2NlZChGQUxTRSksIHBhcigwKSwgc3Vid2lucygwKSwgc2liKDApCit7CisgICAgY29uc3RydWN0aW5nKCk7CisKKyAgICB3ID0gc3RhdGljX2Nhc3Q8V0lORE9XICo+KDApOworICAgIHNldF9rZXlib2FyZCgpOworfQorCitOQ3Vyc2VzV2luZG93OjpOQ3Vyc2VzV2luZG93KGludCBubGluZXMsIGludCBuY29scywgaW50IGJlZ2luX3ksIGludCBiZWdpbl94KQorICA6IHcoMCksIGFsbG9jZWQoVFJVRSksIHBhcigwKSwgc3Vid2lucygwKSwgc2liKDApCit7CisgICAgY29uc3RydWN0aW5nKCk7CisKKyAgICB3ID0gOjpuZXd3aW4obmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCk7CisgICAgaWYgKHcgPT0gMCkgeworCWVycl9oYW5kbGVyKCJDYW5ub3QgY29uc3RydWN0IHdpbmRvdyIpOworICAgIH0KKyAgICBzZXRfa2V5Ym9hcmQoKTsKK30KKworTkN1cnNlc1dpbmRvdzo6TkN1cnNlc1dpbmRvdyhXSU5ET1cqIHdpbmRvdykKKyAgOiB3KDApLCBhbGxvY2VkKEZBTFNFKSwgcGFyKDApLCBzdWJ3aW5zKDApLCBzaWIoMCkKK3sKKyAgICBjb25zdHJ1Y3RpbmcoKTsKKworICAgIC8vIFdlIHVzZWQgdG8gdXNlIGEgcmVmZXJlbmNlIG9uIHRoZSAid2luZG93IiBwYXJhbWV0ZXIsIGJ1dCB3ZSBjYW5ub3QgZG8KKyAgICAvLyB0aGF0IHdpdGggYW4gb3BhcXVlIHBvaW50ZXIgKHNlZSBOQ1VSU0VTX09QQVFVRSkuICBJZiB0aGUgcGFyYW1ldGVyIHdhcworICAgIC8vICI6OnN0ZHNjciIsIHRoYXQgaXMgZmlyc3Qgc2V0IHZpYSB0aGUgImNvbnN0cnVjdGluZygpIGNhbGwsIGFuZCBpcyBudWxsCisgICAgLy8gdXAgdG8gdGhhdCBwb2ludC4gIFNvIHdlIGFsbG93IGEgbnVsbCBwb2ludGVyIGhlcmUgYXMgbWVhbmluZyB0aGUgInNhbWUiCisgICAgLy8gYXMgIjo6c3Rkc2NyIi4KKyAgICB3ID0gd2luZG93ID8gd2luZG93IDogOjpzdGRzY3I7CisgICAgc2V0X2tleWJvYXJkKCk7Cit9CisKK05DdXJzZXNXaW5kb3c6Ok5DdXJzZXNXaW5kb3coTkN1cnNlc1dpbmRvdyYgd2luLCBpbnQgbnksIGludCBueCwKKwkJCSAgICAgaW50IGJlZ2luX3ksIGludCBiZWdpbl94LCBjaGFyIGFic3JlbCkKKyAgOiB3KDApLCBhbGxvY2VkKFRSVUUpLCBwYXIoMCksIHN1YndpbnMoMCksIHNpYigwKQoreworICAgIGNvbnN0cnVjdGluZygpOworICAgIGlmIChhYnNyZWwgPT0gJ2EnKSB7CS8vIGFic29sdXRlIG9yaWdpbgorCWJlZ2luX3kgLT0gd2luLmJlZ3koKTsKKwliZWdpbl94IC09IHdpbi5iZWd4KCk7CisgICAgfQorCisgICAgLy8gTGluayB0aGlzIHdpbmRvdyBpbnRvIGl0cyBwYXJlbnQncyBsaXN0IG9mIHN1YndpbmRvd3MuCisgICAgLy8gV2UgdXNlIGRlcndpbigpLCBzaW5jZSB0aGlzIGFsc28gd29ya3MgZm9yIHBhZHMuCisgICAgdyA9IDo6ZGVyd2luKHdpbi53LCBueSwgbngsIGJlZ2luX3ksIGJlZ2luX3gpOworICAgIGlmICh3ID09IDApIHsKKwllcnJfaGFuZGxlcigiQ2Fubm90IGNvbnN0cnVjdCBzdWJ3aW5kb3ciKTsKKyAgICB9CisKKyAgICBwYXIgPSAmd2luOworICAgIHNpYiA9IHdpbi5zdWJ3aW5zOworICAgIHdpbi5zdWJ3aW5zID0gdGhpczsKK30KKworTkN1cnNlc1dpbmRvdzo6TkN1cnNlc1dpbmRvdyhOQ3Vyc2VzV2luZG93JiB3aW4sCisJCQkJYm9vbCBkb19ib3ggTkNVUlNFU19QQVJBTV9JTklUKFRSVUUpKQorICA6IHcoMCksIGFsbG9jZWQoVFJVRSksIHBhcigwKSwgc3Vid2lucygwKSwgc2liKDApCit7CisgICAgY29uc3RydWN0aW5nKCk7CisgICAgaW50IG15SGVpZ2h0ID0gd2luLmhlaWdodCgpOworICAgIGludCBteVdpZHRoICA9IHdpbi53aWR0aCgpOworICAgIHcgPSA6OiBkZXJ3aW4od2luLncsIG15SGVpZ2h0IC0gMiwgbXlXaWR0aCAtIDIsIDEsIDEpOworICAgIGlmICh3ID09IDApIHsKKwllcnJfaGFuZGxlcigiQ2Fubm90IGNvbnN0cnVjdCBzdWJ3aW5kb3ciKTsKKyAgICB9CisKKyAgICBwYXIgPSAmd2luOworICAgIHNpYiA9IHdpbi5zdWJ3aW5zOworICAgIHdpbi5zdWJ3aW5zID0gdGhpczsKKyAgICBzdWJ3aW5zID0gMDsKKworICAgIGlmIChkb19ib3gpIHsKKwl3aW4uYm94KCk7CisJd2luLnRvdWNod2luKCk7CisgICAgfQorfQorCitOQ3Vyc2VzV2luZG93IE5DdXJzZXNXaW5kb3c6OkNsb25lKCkKK3sKKyAgICBXSU5ET1cgKmQgPSA6OmR1cHdpbih3KTsKKyAgICBOQ3Vyc2VzV2luZG93IFcoZCk7CisgICAgVy5zdWJ3aW5zID0gc3Vid2luczsKKyAgICBXLnNpYiA9IHNpYjsKKyAgICBXLnBhciA9IHBhcjsKKyAgICBXLmFsbG9jZWQgPSBhbGxvY2VkOworICAgIHJldHVybiBXOworfQorCit0eXBlZGVmIGludCAoKlJJUE9GRklOSVQpKE5DdXJzZXNXaW5kb3cmKTsKK3N0YXRpYyBSSVBPRkZJTklUIFJfSU5JVFs1XTsgICAgICAgLy8gVGhlcmUgY2FuJ3QgYmUgbW9yZQorc3RhdGljIGludCByX2luaXRfaWR4ICAgPSAwOworc3RhdGljIFJJUE9GRklOSVQqIHByaXAgPSBSX0lOSVQ7CisKK05DdXJzZXNXaW5kb3c6Ok5DdXJzZXNXaW5kb3coV0lORE9XICp3aW4sIGludCBuY29scykKKyAgOiB3KDApLCBhbGxvY2VkKEZBTFNFKSwgcGFyKDApLCBzdWJ3aW5zKDApLCBzaWIoMCkKK3sKKyAgICBpbml0aWFsaXplKCk7CisgICAgdyA9IHdpbjsKKyAgICBhc3NlcnQoKHctPl9tYXh4ICsxICkgPT0gbmNvbHMpOworfQorCitpbnQgX25jX3h4X3JpcG9mZl9pbml0KFdJTkRPVyAqdywgaW50IG5jb2xzKQoreworICAgIGludCByZXMgPSBFUlI7CisKKyAgICBSSVBPRkZJTklUIGluaXQgPSAqcHJpcCsrOworICAgIGlmIChpbml0KSB7CisJTkN1cnNlc1dpbmRvdyogVyA9IG5ldyBOQ3Vyc2VzV2luZG93KHcsbmNvbHMpOworCXJlcyA9IGluaXQoKlcpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitpbnQgTkN1cnNlc1dpbmRvdzo6cmlwb2ZmbGluZShpbnQgcmlwb2ZmX2xpbmVzLAorCQkJICAgICAgaW50ICgqaW5pdCkoTkN1cnNlc1dpbmRvdyYgd2luKSkKK3sKKyAgICBpbnQgY29kZSA9IDo6X25jX3JpcG9mZmxpbmUocmlwb2ZmX2xpbmVzLF9uY194eF9yaXBvZmZfaW5pdCk7CisgICAgaWYgKGNvZGUgPT0gT0sgJiYgaW5pdCAmJiByaXBvZmZfbGluZXMpIHsKKwlSX0lOSVRbcl9pbml0X2lkeCsrXSA9IGluaXQ7CisgICAgfQorICAgIHJldHVybiBjb2RlOworfQorCitib29sCitOQ3Vyc2VzV2luZG93Ojppc0Rlc2NlbmRhbnQoTkN1cnNlc1dpbmRvdyYgd2luKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBmb3IgKE5DdXJzZXNXaW5kb3cqIHAgPSBzdWJ3aW5zOyBwICE9IE5VTEw7IHAgPSBwLT5zaWIpIHsKKwlpZiAocCA9PSAmd2luIHx8IHAtPmlzRGVzY2VuZGFudCh3aW4pKSB7CisJICAgIHJlc3VsdCA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZAorTkN1cnNlc1dpbmRvdzo6a2lsbF9zdWJ3aW5kb3dzKCkKK3sKKyAgICBOQ3Vyc2VzV2luZG93KiBwID0gc3Vid2luczsKKworICAgIHN1YndpbnMgPSAwOworICAgIHdoaWxlIChwICE9IDApIHsKKwlOQ3Vyc2VzV2luZG93KiBxID0gcC0+c2liOworCXAtPmtpbGxfc3Vid2luZG93cygpOworCWlmIChwLT5hbGxvY2VkKSB7CisJICAgIGlmIChwLT53ICE9IDApCisJCTo6ZGVsd2luKHAtPncpOworCX0KKwlkZWxldGUgcDsKKwlwID0gcTsKKyAgICB9Cit9CisKKworTkN1cnNlc1dpbmRvdzo6fk5DdXJzZXNXaW5kb3coKQoreworICAgIGtpbGxfc3Vid2luZG93cygpOworCisgICAgaWYgKHBhciAhPSAwKSB7CisJLy8gUmVtb3ZlIHRoaXMgd2luZG93IGZyb20gdGhlIHBhcmVudCdzIGxpc3Qgb2Ygc3Vid2luZG93cy4KKwlOQ3Vyc2VzV2luZG93ICogbmV4dCA9IHBhci0+c3Vid2luczsKKwlOQ3Vyc2VzV2luZG93ICogcHJldiA9IDA7CisJd2hpbGUgKG5leHQgIT0gMCkgeworCSAgICBpZiAobmV4dCA9PSB0aGlzKSB7CisJCWlmIChwcmV2ICE9IDApIHsKKwkJICAgIHByZXYtPnNpYiA9IG5leHQtPnNpYjsKKwkJfSBlbHNlIHsKKwkJICAgIHBhci0+c3Vid2lucyA9IG5leHQtPnNpYjsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICBwcmV2ID0gbmV4dDsKKwkgICAgbmV4dCA9IG5leHQtPnNpYjsKKwl9CisgICAgfQorCisgICAgaWYgKGFsbG9jZWQgJiYgdyAhPSAwKQorCTo6ZGVsd2luKHcpOworCisgICAgaWYgKGFsbG9jZWQpIHsKKwktLWNvdW50OworCWlmIChjb3VudCA9PSAwKSB7CisJICAgIDo6ZW5kd2luKCk7CisJfSBlbHNlIGlmIChjb3VudCA8IDApIHsgLy8gY2Fubm90IGhhcHBlbiEKKwkgICAgZXJyX2hhbmRsZXIoIlRvbyBtYW55IHdpbmRvd3MgZGVzdHJveWVkIik7CisJfQorICAgIH0KK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb2xvciBzdHVmZgorLy8KK2ludCBOQ3Vyc2VzV2luZG93Ojpjb2xvckluaXRpYWxpemVkID0gQ09MT1JTX05PVF9JTklUSUFMSVpFRDsKKwordm9pZAorTkN1cnNlc1dpbmRvdzo6dXNlQ29sb3JzKHZvaWQpCit7CisgICAgaWYgKGNvbG9ySW5pdGlhbGl6ZWQgPT0gQ09MT1JTX05PVF9JTklUSUFMSVpFRCkgeworCWlmIChiX2luaXRpYWxpemVkKSB7CisJICAgIGlmICg6Omhhc19jb2xvcnMoKSkgeworCQk6OnN0YXJ0X2NvbG9yKCk7CisJCWNvbG9ySW5pdGlhbGl6ZWQgPSBDT0xPUlNfQVJFX1JFQUxMWV9USEVSRTsKKwkgICAgfSBlbHNlIHsKKwkJY29sb3JJbml0aWFsaXplZCA9IENPTE9SU19NT05PQ0hST01FOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgY29sb3JJbml0aWFsaXplZCA9IENPTE9SU19ORUVEX0lOSVRJQUxJWkFUSU9OOworCX0KKyAgICB9Cit9CisKK3Nob3J0CitOQ3Vyc2VzV2luZG93OjpnZXRQYWlyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KFBBSVJfTlVNQkVSKGdldGF0dHJzKHcpKSk7Cit9CisKK3Nob3J0CitOQ3Vyc2VzV2luZG93OjpnZXRjb2xvcihpbnQgZ2V0YmFjaykgY29uc3QKK3sKKyAgICBzaG9ydCBmb3JlLCBiYWNrOworCisgICAgaWYgKEhhdmVDb2xvcnMoKSkgeworCWlmICg6OnBhaXJfY29udGVudChnZXRQYWlyKCksICZmb3JlLCAmYmFjaykgPT0gRVJSKQorCSAgICBlcnJfaGFuZGxlcigiQ2FuJ3QgZ2V0IGNvbG9yIHBhaXIiKTsKKyAgICB9IGVsc2UgeworCS8vIE1vbm9jaHJvbWUgbWVhbnMgd2hpdGUgb24gYmxhY2sKKwliYWNrID0gQ09MT1JfQkxBQ0s7CisJZm9yZSA9IENPTE9SX1dISVRFOworICAgIH0KKyAgICByZXR1cm4gZ2V0YmFjayA/IGJhY2sgOiBmb3JlOworfQorCitpbnQgTkN1cnNlc1dpbmRvdzo6TnVtYmVyT2ZDb2xvcnMoKQoreworICAgIHJldHVybiAoSGF2ZUNvbG9ycygpKSA/IENPTE9SUyA6IDE7Cit9CisKK3Nob3J0CitOQ3Vyc2VzV2luZG93OjpnZXRjb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChIYXZlQ29sb3JzKCkpID8gZ2V0UGFpcigpIDogMDsKK30KKworaW50CitOQ3Vyc2VzV2luZG93OjpzZXRwYWxldHRlKHNob3J0IGZvcmUsIHNob3J0IGJhY2ssIHNob3J0IHBhaXIpCit7CisgICAgcmV0dXJuIChIYXZlQ29sb3JzKCkpID8gOjppbml0X3BhaXIocGFpciwgZm9yZSwgYmFjaykgOiBPSzsKK30KKworaW50CitOQ3Vyc2VzV2luZG93OjpzZXRwYWxldHRlKHNob3J0IGZvcmUsIHNob3J0IGJhY2spCit7CisgICAgcmV0dXJuIHNldHBhbGV0dGUoZm9yZSwgYmFjaywgZ2V0UGFpcigpKTsKK30KKworCitpbnQKK05DdXJzZXNXaW5kb3c6OnNldGNvbG9yKHNob3J0IHBhaXIpCit7CisgICAgaWYgKEhhdmVDb2xvcnMoKSkgeworCWlmICgocGFpciA8IDEpIHx8IChwYWlyID4gQ09MT1JfUEFJUlMpKQorCSAgICBlcnJfaGFuZGxlcigiQ2FuJ3Qgc2V0IGNvbG9yIHBhaXIiKTsKKworCWF0dHJvZmYoQV9DT0xPUik7CisJYXR0cnNldChDT0xPUl9QQUlSKHBhaXIpKTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCisjaWYgSEFWRV9IQVNfS0VZCitib29sIE5DdXJzZXNXaW5kb3c6Omhhc19tb3VzZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICgoOjpoYXNfa2V5KEtFWV9NT1VTRSkgfHwgOjpfbmNfaGFzX21vdXNlKCkpCisJICAgICA/IFRSVUUgOiBGQUxTRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2MrKy9jdXJzZXN3LmggYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2Vzdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTkyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc2Vzdy5oCkBAIC0wLDAgKzEsMTU1NiBAQAorLy8gKiBUaGlzIG1ha2VzIGVtYWNzIGhhcHB5IC0qLU1vZGU6IEMrKzstKi0KKy8vIHZpbGU6Y3BwbW9kZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBOQ1VSU0VTX0NVUlNFU1dfSF9pbmNsCisjZGVmaW5lIE5DVVJTRVNfQ1VSU0VTV19IX2luY2wgMQorCisvLyAkSWQ6IGN1cnNlc3cuaCx2IDEuNDggMjAwOC8wMS8xOSAyMTowOToxMCB0b20gRXhwICQKKworI2luY2x1ZGUgPGV0aXAuaD4KKworZXh0ZXJuICJDIiB7CisjICBpbmNsdWRlICAgPGN1cnNlcy5oPgorfQorCisvKiBTQ08gMy4ydjQgY3Vyc2VzLmggaW5jbHVkZXMgdGVybS5oLCB3aGljaCBkZWZpbmVzIGxpbmVzIGFzIGEgbWFjcm8uCisgICBVbmRlZmluZSBpdCBoZXJlLCBiZWNhdXNlIE5DdXJzZXNXaW5kb3cgdXNlcyBsaW5lcyBhcyBhIG1ldGhvZC4gICovCisjdW5kZWYgbGluZXMKKworLyogIkNvbnZlcnQiIG1hY3JvcyB0byBpbmxpbmVzLiBXZSdsbCBkZWZpbmUgaXQgYXMgYW5vdGhlciBzeW1ib2wgdG8gYXZvaWQKKyAqIGNvbmZsaWN0IHdpdGggbGlicmFyeSBzeW1ib2xzLgorICovCisjdW5kZWYgVU5ERUYKKyNkZWZpbmUgVU5ERUYobmFtZSkgQ1VSXyAjI25hbWUKKworI2lmZGVmIGFkZGNoCitpbmxpbmUgaW50IFVOREVGKGFkZGNoKShjaHR5cGUgY2gpICB7IHJldHVybiBhZGRjaChjaCk7IH0KKyN1bmRlZiBhZGRjaAorI2RlZmluZSBhZGRjaCBVTkRFRihhZGRjaCkKKyNlbmRpZgorCisjaWZkZWYgYWRkY2hzdHIKK2lubGluZSBpbnQgVU5ERUYoYWRkY2hzdHIpKGNodHlwZSAqYXQpIHsgcmV0dXJuIGFkZGNoc3RyKGF0KTsgfQorI3VuZGVmIGFkZGNoc3RyCisjZGVmaW5lIGFkZGNoc3RyIFVOREVGKGFkZGNoc3RyKQorI2VuZGlmCisKKyNpZmRlZiBhZGRuc3RyCitpbmxpbmUgaW50IFVOREVGKGFkZG5zdHIpKGNvbnN0IGNoYXIgKnN0ciwgaW50IG4pCit7IHJldHVybiBhZGRuc3RyKHN0ciwgbik7IH0KKyN1bmRlZiBhZGRuc3RyCisjZGVmaW5lIGFkZG5zdHIgVU5ERUYoYWRkbnN0cikKKyNlbmRpZgorCisjaWZkZWYgYWRkc3RyCitpbmxpbmUgaW50IFVOREVGKGFkZHN0cikoY29uc3QgY2hhciAqIHN0cikgIHsgcmV0dXJuIGFkZHN0cihzdHIpOyB9CisjdW5kZWYgYWRkc3RyCisjZGVmaW5lIGFkZHN0ciBVTkRFRihhZGRzdHIpCisjZW5kaWYKKworI2lmZGVmIGF0dHJvZmYKK2lubGluZSBpbnQgVU5ERUYoYXR0cm9mZikoY2h0eXBlIGF0KSB7IHJldHVybiBhdHRyb2ZmKGF0KTsgfQorI3VuZGVmIGF0dHJvZmYKKyNkZWZpbmUgYXR0cm9mZiBVTkRFRihhdHRyb2ZmKQorI2VuZGlmCisKKyNpZmRlZiBhdHRyb24KK2lubGluZSBpbnQgVU5ERUYoYXR0cm9uKShjaHR5cGUgYXQpIHsgcmV0dXJuIGF0dHJvbihhdCk7IH0KKyN1bmRlZiBhdHRyb24KKyNkZWZpbmUgYXR0cm9uIFVOREVGKGF0dHJvbikKKyNlbmRpZgorCisjaWZkZWYgYXR0cnNldAoraW5saW5lIGNodHlwZSBVTkRFRihhdHRyc2V0KShjaHR5cGUgYXQpIHsgcmV0dXJuIGF0dHJzZXQoYXQpOyB9CisjdW5kZWYgYXR0cnNldAorI2RlZmluZSBhdHRyc2V0IFVOREVGKGF0dHJzZXQpCisjZW5kaWYKKworI2lmZGVmIGJrZ2QKK2lubGluZSBpbnQgVU5ERUYoYmtnZCkoY2h0eXBlIGNoKSB7IHJldHVybiBia2dkKGNoKTsgfQorI3VuZGVmIGJrZ2QKKyNkZWZpbmUgYmtnZCBVTkRFRihia2dkKQorI2VuZGlmCisKKyNpZmRlZiBia2dkc2V0CitpbmxpbmUgdm9pZCBVTkRFRihia2dkc2V0KShjaHR5cGUgY2gpIHsgYmtnZHNldChjaCk7IH0KKyN1bmRlZiBia2dkc2V0CisjZGVmaW5lIGJrZ2RzZXQgVU5ERUYoYmtnZHNldCkKKyNlbmRpZgorCisjaWZkZWYgYm9yZGVyCitpbmxpbmUgaW50IFVOREVGKGJvcmRlcikoY2h0eXBlIGxzLCBjaHR5cGUgcnMsIGNodHlwZSB0cywgY2h0eXBlIGJzLCBjaHR5cGUgdGwsIGNodHlwZSB0ciwgY2h0eXBlIGJsLCBjaHR5cGUgYnIpCit7IHJldHVybiBib3JkZXIobHMsIHJzLCB0cywgYnMsIHRsLCB0ciwgYmwsIGJyKTsgfQorI3VuZGVmIGJvcmRlcgorI2RlZmluZSBib3JkZXIgVU5ERUYoYm9yZGVyKQorI2VuZGlmCisKKyNpZmRlZiBib3gKK2lubGluZSBpbnQgVU5ERUYoYm94KShXSU5ET1cgKndpbiwgaW50IHYsIGludCBoKSB7IHJldHVybiBib3god2luLCB2LCBoKTsgfQorI3VuZGVmIGJveAorI2RlZmluZSBib3ggVU5ERUYoYm94KQorI2VuZGlmCisKKyNpZmRlZiBjaGdhdAoraW5saW5lIGludCBVTkRFRihjaGdhdCkoaW50IG4sIGF0dHJfdCBhdHRyLCBzaG9ydCBjb2xvciwgY29uc3Qgdm9pZCAqb3B0cykgeworICByZXR1cm4gY2hnYXQobiwgYXR0ciwgY29sb3IsIG9wdHMpOyB9CisjdW5kZWYgY2hnYXQKKyNkZWZpbmUgY2hnYXQgVU5ERUYoY2hnYXQpCisjZW5kaWYKKworI2lmZGVmIGNsZWFyCitpbmxpbmUgaW50IFVOREVGKGNsZWFyKSgpICB7IHJldHVybiBjbGVhcigpOyB9CisjdW5kZWYgY2xlYXIKKyNkZWZpbmUgY2xlYXIgVU5ERUYoY2xlYXIpCisjZW5kaWYKKworI2lmZGVmIGNsZWFyb2sKK2lubGluZSBpbnQgVU5ERUYoY2xlYXJvaykoV0lORE9XKiB3aW4sIGJvb2wgYmYpICB7IHJldHVybiBjbGVhcm9rKHdpbiwgYmYpOyB9CisjdW5kZWYgY2xlYXJvaworI2RlZmluZSBjbGVhcm9rIFVOREVGKGNsZWFyb2spCisjZWxzZQorZXh0ZXJuICJDIiBOQ1VSU0VTX0lNUEVYUCBpbnQgTkNVUlNFU19BUEkgY2xlYXJvayhXSU5ET1cqLCBib29sKTsKKyNlbmRpZgorCisjaWZkZWYgY2xydG9ib3QKK2lubGluZSBpbnQgVU5ERUYoY2xydG9ib3QpKCkgIHsgcmV0dXJuIGNscnRvYm90KCk7IH0KKyN1bmRlZiBjbHJ0b2JvdAorI2RlZmluZSBjbHJ0b2JvdCBVTkRFRihjbHJ0b2JvdCkKKyNlbmRpZgorCisjaWZkZWYgY2xydG9lb2wKK2lubGluZSBpbnQgVU5ERUYoY2xydG9lb2wpKCkgIHsgcmV0dXJuIGNscnRvZW9sKCk7IH0KKyN1bmRlZiBjbHJ0b2VvbAorI2RlZmluZSBjbHJ0b2VvbCBVTkRFRihjbHJ0b2VvbCkKKyNlbmRpZgorCisjaWZkZWYgY29sb3Jfc2V0CitpbmxpbmUgY2h0eXBlIFVOREVGKGNvbG9yX3NldCkoc2hvcnQgcCwgdm9pZCogb3B0cykgeyByZXR1cm4gY29sb3Jfc2V0KHAsIG9wdHMpOyB9CisjdW5kZWYgY29sb3Jfc2V0CisjZGVmaW5lIGNvbG9yX3NldCBVTkRFRihjb2xvcl9zZXQpCisjZW5kaWYKKworI2lmZGVmIGNybW9kZQoraW5saW5lIGludCBVTkRFRihjcm1vZGUpKHZvaWQpIHsgcmV0dXJuIGNybW9kZSgpOyB9CisjdW5kZWYgY3Jtb2RlCisjZGVmaW5lIGNybW9kZSBVTkRFRihjcm1vZGUpCisjZW5kaWYKKworI2lmZGVmIGRlbGNoCitpbmxpbmUgaW50IFVOREVGKGRlbGNoKSgpICB7IHJldHVybiBkZWxjaCgpOyB9CisjdW5kZWYgZGVsY2gKKyNkZWZpbmUgZGVsY2ggVU5ERUYoZGVsY2gpCisjZW5kaWYKKworI2lmZGVmIGRlbGV0ZWxuCitpbmxpbmUgaW50IFVOREVGKGRlbGV0ZWxuKSgpICB7IHJldHVybiBkZWxldGVsbigpOyB9CisjdW5kZWYgZGVsZXRlbG4KKyNkZWZpbmUgZGVsZXRlbG4gVU5ERUYoZGVsZXRlbG4pCisjZW5kaWYKKworI2lmZGVmIGVjaG9jaGFyCitpbmxpbmUgaW50IFVOREVGKGVjaG9jaGFyKShjaHR5cGUgY2gpICB7IHJldHVybiBlY2hvY2hhcihjaCk7IH0KKyN1bmRlZiBlY2hvY2hhcgorI2RlZmluZSBlY2hvY2hhciBVTkRFRihlY2hvY2hhcikKKyNlbmRpZgorCisjaWZkZWYgZXJhc2UKK2lubGluZSBpbnQgVU5ERUYoZXJhc2UpKCkgIHsgcmV0dXJuIGVyYXNlKCk7IH0KKyN1bmRlZiBlcmFzZQorI2RlZmluZSBlcmFzZSBVTkRFRihlcmFzZSkKKyNlbmRpZgorCisjaWZkZWYgZml4dGVybQoraW5saW5lIGludCBVTkRFRihmaXh0ZXJtKSh2b2lkKSB7IHJldHVybiBmaXh0ZXJtKCk7IH0KKyN1bmRlZiBmaXh0ZXJtCisjZGVmaW5lIGZpeHRlcm0gVU5ERUYoZml4dGVybSkKKyNlbmRpZgorCisjaWZkZWYgZmx1c2hvaworaW5saW5lIGludCBVTkRFRihmbHVzaG9rKShXSU5ET1cqIF93aW4sIGJvb2wgX2JmKSAgeworICByZXR1cm4gZmx1c2hvayhfd2luLCBfYmYpOyB9CisjdW5kZWYgZmx1c2hvaworI2RlZmluZSBmbHVzaG9rIFVOREVGKGZsdXNob2spCisjZWxzZQorI2RlZmluZSBfbm9fZmx1c2hvaworI2VuZGlmCisKKyNpZmRlZiBnZXRhdHRycworaW5saW5lIGludCBVTkRFRihnZXRhdHRycykoV0lORE9XICp3aW4pIHsgcmV0dXJuIGdldGF0dHJzKHdpbik7IH0KKyN1bmRlZiBnZXRhdHRycworI2RlZmluZSBnZXRhdHRycyBVTkRFRihnZXRhdHRycykKKyNlbmRpZgorCisjaWZkZWYgZ2V0YmVneXgKK2lubGluZSB2b2lkIFVOREVGKGdldGJlZ3l4KShXSU5ET1cqIHdpbiwgaW50JiB5LCBpbnQmIHgpIHsgZ2V0YmVneXgod2luLCB5LCB4KTsgfQorI3VuZGVmIGdldGJlZ3l4CisjZGVmaW5lIGdldGJlZ3l4IFVOREVGKGdldGJlZ3l4KQorI2VuZGlmCisKKyNpZmRlZiBnZXRia2dkCitpbmxpbmUgY2h0eXBlIFVOREVGKGdldGJrZ2QpKGNvbnN0IFdJTkRPVyAqd2luKSB7IHJldHVybiBnZXRia2dkKHdpbik7IH0KKyN1bmRlZiBnZXRia2dkCisjZGVmaW5lIGdldGJrZ2QgVU5ERUYoZ2V0YmtnZCkKKyNlbmRpZgorCisjaWZkZWYgZ2V0Y2gKK2lubGluZSBpbnQgVU5ERUYoZ2V0Y2gpKCkgIHsgcmV0dXJuIGdldGNoKCk7IH0KKyN1bmRlZiBnZXRjaAorI2RlZmluZSBnZXRjaCBVTkRFRihnZXRjaCkKKyNlbmRpZgorCisjaWZkZWYgZ2V0bWF4eXgKK2lubGluZSB2b2lkIFVOREVGKGdldG1heHl4KShXSU5ET1cqIHdpbiwgaW50JiB5LCBpbnQmIHgpIHsgZ2V0bWF4eXgod2luLCB5LCB4KTsgfQorI3VuZGVmIGdldG1heHl4CisjZGVmaW5lIGdldG1heHl4IFVOREVGKGdldG1heHl4KQorI2VuZGlmCisKKyNpZmRlZiBnZXRuc3RyCitpbmxpbmUgaW50IFVOREVGKGdldG5zdHIpKGNoYXIgKl9zdHIsIGludCBuKSAgeyByZXR1cm4gZ2V0bnN0cihfc3RyLCBuKTsgfQorI3VuZGVmIGdldG5zdHIKKyNkZWZpbmUgZ2V0bnN0ciBVTkRFRihnZXRuc3RyKQorI2VuZGlmCisKKyNpZmRlZiBnZXRwYXJ5eAoraW5saW5lIHZvaWQgVU5ERUYoZ2V0cGFyeXgpKFdJTkRPVyogd2luLCBpbnQmIHksIGludCYgeCkgeyBnZXRwYXJ5eCh3aW4sIHksIHgpOyB9CisjdW5kZWYgZ2V0cGFyeXgKKyNkZWZpbmUgZ2V0cGFyeXggVU5ERUYoZ2V0cGFyeXgpCisjZW5kaWYKKworI2lmZGVmIGdldHN0cgoraW5saW5lIGludCBVTkRFRihnZXRzdHIpKGNoYXIgKl9zdHIpICB7IHJldHVybiBnZXRzdHIoX3N0cik7IH0KKyN1bmRlZiBnZXRzdHIKKyNkZWZpbmUgZ2V0c3RyIFVOREVGKGdldHN0cikKKyNlbmRpZgorCisjaWZkZWYgZ2V0eXgKK2lubGluZSB2b2lkIFVOREVGKGdldHl4KShjb25zdCBXSU5ET1cqIHdpbiwgaW50JiB5LCBpbnQmIHgpIHsKKyAgZ2V0eXgod2luLCB5LCB4KTsgfQorI3VuZGVmIGdldHl4CisjZGVmaW5lIGdldHl4IFVOREVGKGdldHl4KQorI2VuZGlmCisKKyNpZmRlZiBobGluZQoraW5saW5lIGludCBVTkRFRihobGluZSkoY2h0eXBlIGNoLCBpbnQgbikgeyByZXR1cm4gaGxpbmUoY2gsIG4pOyB9CisjdW5kZWYgaGxpbmUKKyNkZWZpbmUgaGxpbmUgVU5ERUYoaGxpbmUpCisjZW5kaWYKKworI2lmZGVmIGluY2gKK2lubGluZSBjaHR5cGUgVU5ERUYoaW5jaCkoKSAgeyByZXR1cm4gaW5jaCgpOyB9CisjdW5kZWYgaW5jaAorI2RlZmluZSBpbmNoIFVOREVGKGluY2gpCisjZW5kaWYKKworI2lmZGVmIGluY2hzdHIKK2lubGluZSBpbnQgVU5ERUYoaW5jaHN0cikoY2h0eXBlICpzdHIpICB7IHJldHVybiBpbmNoc3RyKHN0cik7IH0KKyN1bmRlZiBpbmNoc3RyCisjZGVmaW5lIGluY2hzdHIgVU5ERUYoaW5jaHN0cikKKyNlbmRpZgorCisjaWZkZWYgaW5uc3RyCitpbmxpbmUgaW50IFVOREVGKGlubnN0cikoY2hhciAqX3N0ciwgaW50IG4pICB7IHJldHVybiBpbm5zdHIoX3N0ciwgbik7IH0KKyN1bmRlZiBpbm5zdHIKKyNkZWZpbmUgaW5uc3RyIFVOREVGKGlubnN0cikKKyNlbmRpZgorCisjaWZkZWYgaW5zY2gKK2lubGluZSBpbnQgVU5ERUYoaW5zY2gpKGNodHlwZSBjKSAgeyByZXR1cm4gaW5zY2goYyk7IH0KKyN1bmRlZiBpbnNjaAorI2RlZmluZSBpbnNjaCBVTkRFRihpbnNjaCkKKyNlbmRpZgorCisjaWZkZWYgaW5zZGVsbG4KK2lubGluZSBpbnQgVU5ERUYoaW5zZGVsbG4pKGludCBuKSAgeyByZXR1cm4gaW5zZGVsbG4obik7IH0KKyN1bmRlZiBpbnNkZWxsbgorI2RlZmluZSBpbnNkZWxsbiBVTkRFRihpbnNkZWxsbikKKyNlbmRpZgorCisjaWZkZWYgaW5zZXJ0bG4KK2lubGluZSBpbnQgVU5ERUYoaW5zZXJ0bG4pKCkgIHsgcmV0dXJuIGluc2VydGxuKCk7IH0KKyN1bmRlZiBpbnNlcnRsbgorI2RlZmluZSBpbnNlcnRsbiBVTkRFRihpbnNlcnRsbikKKyNlbmRpZgorCisjaWZkZWYgaW5zbnN0cgoraW5saW5lIGludCBVTkRFRihpbnNuc3RyKShjb25zdCBjaGFyICpfc3RyLCBpbnQgbikgIHsKKyAgcmV0dXJuIGluc25zdHIoX3N0ciwgbik7IH0KKyN1bmRlZiBpbnNuc3RyCisjZGVmaW5lIGluc25zdHIgVU5ERUYoaW5zbnN0cikKKyNlbmRpZgorCisjaWZkZWYgaW5zc3RyCitpbmxpbmUgaW50IFVOREVGKGluc3N0cikoY29uc3QgY2hhciAqX3N0cikgIHsKKyAgcmV0dXJuIGluc3N0cihfc3RyKTsgfQorI3VuZGVmIGluc3N0cgorI2RlZmluZSBpbnNzdHIgVU5ERUYoaW5zc3RyKQorI2VuZGlmCisKKyNpZmRlZiBpbnN0cgoraW5saW5lIGludCBVTkRFRihpbnN0cikoY2hhciAqX3N0cikgIHsgcmV0dXJuIGluc3RyKF9zdHIpOyB9CisjdW5kZWYgaW5zdHIKKyNkZWZpbmUgaW5zdHIgVU5ERUYoaW5zdHIpCisjZW5kaWYKKworI2lmZGVmIGludHJmbHVzaAoraW5saW5lIHZvaWQgVU5ERUYoaW50cmZsdXNoKShXSU5ET1cgKndpbiwgYm9vbCBiZikgeyBpbnRyZmx1c2goKTsgfQorI3VuZGVmIGludHJmbHVzaAorI2RlZmluZSBpbnRyZmx1c2ggVU5ERUYoaW50cmZsdXNoKQorI2VuZGlmCisKKyNpZmRlZiBsZWF2ZW9rCitpbmxpbmUgaW50IFVOREVGKGxlYXZlb2spKFdJTkRPVyogd2luLCBib29sIGJmKSAgeyByZXR1cm4gbGVhdmVvayh3aW4sIGJmKTsgfQorI3VuZGVmIGxlYXZlb2sKKyNkZWZpbmUgbGVhdmVvayBVTkRFRihsZWF2ZW9rKQorI2Vsc2UKK2V4dGVybiAiQyIgTkNVUlNFU19JTVBFWFAgaW50IE5DVVJTRVNfQVBJIGxlYXZlb2soV0lORE9XKiB3aW4sIGJvb2wgYmYpOworI2VuZGlmCisKKyNpZmRlZiBtb3ZlCitpbmxpbmUgaW50IFVOREVGKG1vdmUpKGludCB4LCBpbnQgeSkgIHsgcmV0dXJuIG1vdmUoeCwgeSk7IH0KKyN1bmRlZiBtb3ZlCisjZGVmaW5lIG1vdmUgVU5ERUYobW92ZSkKKyNlbmRpZgorCisjaWZkZWYgbXZhZGRjaAoraW5saW5lIGludCBVTkRFRihtdmFkZGNoKShpbnQgeSwgaW50IHgsIGNodHlwZSBjaCkKK3sgcmV0dXJuIG12YWRkY2goeSwgeCwgY2gpOyB9CisjdW5kZWYgbXZhZGRjaAorI2RlZmluZSBtdmFkZGNoIFVOREVGKG12YWRkY2gpCisjZW5kaWYKKworI2lmZGVmIG12YWRkbnN0cgoraW5saW5lIGludCBVTkRFRihtdmFkZG5zdHIpKGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbikKK3sgcmV0dXJuIG12YWRkbnN0cih5LCB4LCBzdHIsIG4pOyB9CisjdW5kZWYgbXZhZGRuc3RyCisjZGVmaW5lIG12YWRkbnN0ciBVTkRFRihtdmFkZG5zdHIpCisjZW5kaWYKKworI2lmZGVmIG12YWRkc3RyCitpbmxpbmUgaW50IFVOREVGKG12YWRkc3RyKShpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKiBzdHIpCit7IHJldHVybiBtdmFkZHN0cih5LCB4LCBzdHIpOyB9CisjdW5kZWYgbXZhZGRzdHIKKyNkZWZpbmUgbXZhZGRzdHIgVU5ERUYobXZhZGRzdHIpCisjZW5kaWYKKworI2lmZGVmIG12Y2hnYXQKK2lubGluZSBpbnQgVU5ERUYobXZjaGdhdCkoaW50IHksIGludCB4LCBpbnQgbiwKKwkJCSAgYXR0cl90IGF0dHIsIHNob3J0IGNvbG9yLCBjb25zdCB2b2lkICpvcHRzKSB7CisgIHJldHVybiBtdmNoZ2F0KHksIHgsIG4sIGF0dHIsIGNvbG9yLCBvcHRzKTsgfQorI3VuZGVmIG12Y2hnYXQKKyNkZWZpbmUgbXZjaGdhdCBVTkRFRihtdmNoZ2F0KQorI2VuZGlmCisKKyNpZmRlZiBtdmRlbGNoCitpbmxpbmUgaW50IFVOREVGKG12ZGVsY2gpKGludCB5LCBpbnQgeCkgeyByZXR1cm4gbXZkZWxjaCh5LCB4KTt9CisjdW5kZWYgbXZkZWxjaAorI2RlZmluZSBtdmRlbGNoIFVOREVGKG12ZGVsY2gpCisjZW5kaWYKKworI2lmZGVmIG12Z2V0Y2gKK2lubGluZSBpbnQgVU5ERUYobXZnZXRjaCkoaW50IHksIGludCB4KSB7IHJldHVybiBtdmdldGNoKHksIHgpO30KKyN1bmRlZiBtdmdldGNoCisjZGVmaW5lIG12Z2V0Y2ggVU5ERUYobXZnZXRjaCkKKyNlbmRpZgorCisjaWZkZWYgbXZnZXRuc3RyCitpbmxpbmUgaW50IFVOREVGKG12Z2V0bnN0cikoaW50IHksIGludCB4LCBjaGFyICpzdHIsIGludCBuKSB7CisgIHJldHVybiBtdmdldG5zdHIoeSwgeCwgc3RyLCBuKTt9CisjdW5kZWYgbXZnZXRuc3RyCisjZGVmaW5lIG12Z2V0bnN0ciBVTkRFRihtdmdldG5zdHIpCisjZW5kaWYKKworI2lmZGVmIG12Z2V0c3RyCitpbmxpbmUgaW50IFVOREVGKG12Z2V0c3RyKShpbnQgeSwgaW50IHgsIGNoYXIgKnN0cikge3JldHVybiBtdmdldHN0cih5LCB4LCBzdHIpO30KKyN1bmRlZiBtdmdldHN0cgorI2RlZmluZSBtdmdldHN0ciBVTkRFRihtdmdldHN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZpbmNoCitpbmxpbmUgY2h0eXBlIFVOREVGKG12aW5jaCkoaW50IHksIGludCB4KSB7IHJldHVybiBtdmluY2goeSwgeCk7fQorI3VuZGVmIG12aW5jaAorI2RlZmluZSBtdmluY2ggVU5ERUYobXZpbmNoKQorI2VuZGlmCisKKyNpZmRlZiBtdmlubnN0cgoraW5saW5lIGludCBVTkRFRihtdmlubnN0cikoaW50IHksIGludCB4LCBjaGFyICpfc3RyLCBpbnQgbikgeworICByZXR1cm4gbXZpbm5zdHIoeSwgeCwgX3N0ciwgbik7IH0KKyN1bmRlZiBtdmlubnN0cgorI2RlZmluZSBtdmlubnN0ciBVTkRFRihtdmlubnN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZpbnNjaAoraW5saW5lIGludCBVTkRFRihtdmluc2NoKShpbnQgeSwgaW50IHgsIGNodHlwZSBjKQoreyByZXR1cm4gbXZpbnNjaCh5LCB4LCBjKTsgfQorI3VuZGVmIG12aW5zY2gKKyNkZWZpbmUgbXZpbnNjaCBVTkRFRihtdmluc2NoKQorI2VuZGlmCisKKyNpZmRlZiBtdmluc25zdHIKK2lubGluZSBpbnQgVU5ERUYobXZpbnNuc3RyKShpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKl9zdHIsIGludCBuKSB7CisgIHJldHVybiBtdmluc25zdHIoeSwgeCwgX3N0ciwgbik7IH0KKyN1bmRlZiBtdmluc25zdHIKKyNkZWZpbmUgbXZpbnNuc3RyIFVOREVGKG12aW5zbnN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZpbnNzdHIKK2lubGluZSBpbnQgVU5ERUYobXZpbnNzdHIpKGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqX3N0cikgIHsKKyAgcmV0dXJuIG12aW5zc3RyKHksIHgsIF9zdHIpOyB9CisjdW5kZWYgbXZpbnNzdHIKKyNkZWZpbmUgbXZpbnNzdHIgVU5ERUYobXZpbnNzdHIpCisjZW5kaWYKKworI2lmZGVmIG12d2FkZGNoCitpbmxpbmUgaW50IFVOREVGKG12d2FkZGNoKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgY2gpCit7IHJldHVybiBtdndhZGRjaCh3aW4sIHksIHgsIGNoKTsgfQorI3VuZGVmIG12d2FkZGNoCisjZGVmaW5lIG12d2FkZGNoIFVOREVGKG12d2FkZGNoKQorI2VuZGlmCisKKyNpZmRlZiBtdndhZGRjaG5zdHIKK2lubGluZSBpbnQgVU5ERUYobXZ3YWRkY2huc3RyKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgKnN0ciwgaW50IG4pCit7IHJldHVybiBtdndhZGRjaG5zdHIod2luLCB5LCB4LCBzdHIsIG4pOyB9CisjdW5kZWYgbXZ3YWRkY2huc3RyCisjZGVmaW5lIG12d2FkZGNobnN0ciBVTkRFRihtdndhZGRjaG5zdHIpCisjZW5kaWYKKworI2lmZGVmIG12d2FkZGNoc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2FkZGNoc3RyKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgKnN0cikKK3sgcmV0dXJuIG12d2FkZGNoc3RyKHdpbiwgeSwgeCwgc3RyKTsgfQorI3VuZGVmIG12d2FkZGNoc3RyCisjZGVmaW5lIG12d2FkZGNoc3RyIFVOREVGKG12d2FkZGNoc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndhZGRuc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2FkZG5zdHIpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKnN0ciwgaW50IG4pCit7IHJldHVybiBtdndhZGRuc3RyKHdpbiwgeSwgeCwgc3RyLCBuKTsgfQorI3VuZGVmIG12d2FkZG5zdHIKKyNkZWZpbmUgbXZ3YWRkbnN0ciBVTkRFRihtdndhZGRuc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndhZGRzdHIKK2lubGluZSBpbnQgVU5ERUYobXZ3YWRkc3RyKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaGFyICogc3RyKQoreyByZXR1cm4gbXZ3YWRkc3RyKHdpbiwgeSwgeCwgc3RyKTsgfQorI3VuZGVmIG12d2FkZHN0cgorI2RlZmluZSBtdndhZGRzdHIgVU5ERUYobXZ3YWRkc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndjaGdhdAoraW5saW5lIGludCBVTkRFRihtdndjaGdhdCkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgaW50IG4sCisJCQkgICBhdHRyX3QgYXR0ciwgc2hvcnQgY29sb3IsIGNvbnN0IHZvaWQgKm9wdHMpIHsKKyAgcmV0dXJuIG12d2NoZ2F0KHdpbiwgeSwgeCwgbiwgYXR0ciwgY29sb3IsIG9wdHMpOyB9CisjdW5kZWYgbXZ3Y2hnYXQKKyNkZWZpbmUgbXZ3Y2hnYXQgVU5ERUYobXZ3Y2hnYXQpCisjZW5kaWYKKworI2lmZGVmIG12d2RlbGNoCitpbmxpbmUgaW50IFVOREVGKG12d2RlbGNoKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4KQoreyByZXR1cm4gbXZ3ZGVsY2god2luLCB5LCB4KTsgfQorI3VuZGVmIG12d2RlbGNoCisjZGVmaW5lIG12d2RlbGNoIFVOREVGKG12d2RlbGNoKQorI2VuZGlmCisKKyNpZmRlZiBtdndnZXRjaAoraW5saW5lIGludCBVTkRFRihtdndnZXRjaCkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkgeyByZXR1cm4gbXZ3Z2V0Y2god2luLCB5LCB4KTt9CisjdW5kZWYgbXZ3Z2V0Y2gKKyNkZWZpbmUgbXZ3Z2V0Y2ggVU5ERUYobXZ3Z2V0Y2gpCisjZW5kaWYKKworI2lmZGVmIG12d2dldG5zdHIKK2lubGluZSBpbnQgVU5ERUYobXZ3Z2V0bnN0cikoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqc3RyLCBpbnQgbikKK3tyZXR1cm4gbXZ3Z2V0bnN0cih3aW4sIHksIHgsIHN0ciwgbik7fQorI3VuZGVmIG12d2dldG5zdHIKKyNkZWZpbmUgbXZ3Z2V0bnN0ciBVTkRFRihtdndnZXRuc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndnZXRzdHIKK2lubGluZSBpbnQgVU5ERUYobXZ3Z2V0c3RyKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaGFyICpzdHIpCit7cmV0dXJuIG12d2dldHN0cih3aW4sIHksIHgsIHN0cik7fQorI3VuZGVmIG12d2dldHN0cgorI2RlZmluZSBtdndnZXRzdHIgVU5ERUYobXZ3Z2V0c3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndobGluZQoraW5saW5lIGludCBVTkRFRihtdndobGluZSkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2h0eXBlIGMsIGludCBuKSB7CisgIHJldHVybiBtdndobGluZSh3aW4sIHksIHgsIGMsIG4pOyB9CisjdW5kZWYgbXZ3aGxpbmUKKyNkZWZpbmUgbXZ3aGxpbmUgVU5ERUYobXZ3aGxpbmUpCisjZW5kaWYKKworI2lmZGVmIG12d2luY2gKK2lubGluZSBjaHR5cGUgVU5ERUYobXZ3aW5jaCkoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkgeworICByZXR1cm4gbXZ3aW5jaCh3aW4sIHksIHgpO30KKyN1bmRlZiBtdndpbmNoCisjZGVmaW5lIG12d2luY2ggVU5ERUYobXZ3aW5jaCkKKyNlbmRpZgorCisjaWZkZWYgbXZ3aW5jaG5zdHIKK2lubGluZSBpbnQgVU5ERUYobXZ3aW5jaG5zdHIpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSAqc3RyLCBpbnQgbikgIHsgcmV0dXJuIG12d2luY2huc3RyKHdpbiwgeSwgeCwgc3RyLCBuKTsgfQorI3VuZGVmIG12d2luY2huc3RyCisjZGVmaW5lIG12d2luY2huc3RyIFVOREVGKG12d2luY2huc3RyKQorI2VuZGlmCisKKyNpZmRlZiBtdndpbmNoc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2luY2hzdHIpKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSAqc3RyKSAgeyByZXR1cm4gbXZ3aW5jaHN0cih3aW4sIHksIHgsIHN0cik7IH0KKyN1bmRlZiBtdndpbmNoc3RyCisjZGVmaW5lIG12d2luY2hzdHIgVU5ERUYobXZ3aW5jaHN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3aW5uc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2lubnN0cikoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqX3N0ciwgaW50IG4pIHsKKyAgcmV0dXJuIG12d2lubnN0cih3aW4sIHksIHgsIF9zdHIsIG4pOyB9CisjdW5kZWYgbXZ3aW5uc3RyCisjZGVmaW5lIG12d2lubnN0ciBVTkRFRihtdndpbm5zdHIpCisjZW5kaWYKKworI2lmZGVmIG12d2luc2NoCitpbmxpbmUgaW50IFVOREVGKG12d2luc2NoKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaHR5cGUgYykKK3sgcmV0dXJuIG12d2luc2NoKHdpbiwgeSwgeCwgYyk7IH0KKyN1bmRlZiBtdndpbnNjaAorI2RlZmluZSBtdndpbnNjaCBVTkRFRihtdndpbnNjaCkKKyNlbmRpZgorCisjaWZkZWYgbXZ3aW5zbnN0cgoraW5saW5lIGludCBVTkRFRihtdndpbnNuc3RyKShXSU5ET1cgKncsIGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqX3N0ciwgaW50IG4pIHsKKyAgcmV0dXJuIG12d2luc25zdHIodywgeSwgeCwgX3N0ciwgbik7IH0KKyN1bmRlZiBtdndpbnNuc3RyCisjZGVmaW5lIG12d2luc25zdHIgVU5ERUYobXZ3aW5zbnN0cikKKyNlbmRpZgorCisjaWZkZWYgbXZ3aW5zc3RyCitpbmxpbmUgaW50IFVOREVGKG12d2luc3N0cikoV0lORE9XICp3LCBpbnQgeSwgaW50IHgsICBjb25zdCBjaGFyICpfc3RyKSAgeworICByZXR1cm4gbXZ3aW5zc3RyKHcsIHksIHgsIF9zdHIpOyB9CisjdW5kZWYgbXZ3aW5zc3RyCisjZGVmaW5lIG12d2luc3N0ciBVTkRFRihtdndpbnNzdHIpCisjZW5kaWYKKworI2lmZGVmIG12d3ZsaW5lCitpbmxpbmUgaW50IFVOREVGKG12d3ZsaW5lKShXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaHR5cGUgYywgaW50IG4pIHsKKyAgcmV0dXJuIG12d3ZsaW5lKHdpbiwgeSwgeCwgYywgbik7IH0KKyN1bmRlZiBtdnd2bGluZQorI2RlZmluZSBtdnd2bGluZSBVTkRFRihtdnd2bGluZSkKKyNlbmRpZgorCisjaWZkZWYgbmFwbXMKK2lubGluZSB2b2lkIFVOREVGKG5hcG1zKSh1bnNpZ25lZCBsb25nIHgpIHsgbmFwbXMoeCk7IH0KKyN1bmRlZiBuYXBtcworI2RlZmluZSBuYXBtcyBVTkRFRihuYXBtcykKKyNlbmRpZgorCisjaWZkZWYgbm9jcm1vZGUKK2lubGluZSBpbnQgVU5ERUYobm9jcm1vZGUpKHZvaWQpIHsgcmV0dXJuIG5vY3Jtb2RlKCk7IH0KKyN1bmRlZiBub2NybW9kZQorI2RlZmluZSBub2NybW9kZSBVTkRFRihub2NybW9kZSkKKyNlbmRpZgorCisjaWZkZWYgbm9kZWxheQoraW5saW5lIHZvaWQgVU5ERUYobm9kZWxheSkoKSB7IG5vZGVsYXkoKTsgfQorI3VuZGVmIG5vZGVsYXkKKyNkZWZpbmUgbm9kZWxheSBVTkRFRihub2RlbGF5KQorI2VuZGlmCisKKyNpZmRlZiByZWRyYXd3aW4KK2lubGluZSBpbnQgVU5ERUYocmVkcmF3d2luKShXSU5ET1cgKndpbikgIHsgcmV0dXJuIHJlZHJhd3dpbih3aW4pOyB9CisjdW5kZWYgcmVkcmF3d2luCisjZGVmaW5lIHJlZHJhd3dpbiBVTkRFRihyZWRyYXd3aW4pCisjZW5kaWYKKworI2lmZGVmIHJlZnJlc2gKK2lubGluZSBpbnQgVU5ERUYocmVmcmVzaCkoKSAgeyByZXR1cm4gcmVmcmVzaCgpOyB9CisjdW5kZWYgcmVmcmVzaAorI2RlZmluZSByZWZyZXNoIFVOREVGKHJlZnJlc2gpCisjZW5kaWYKKworI2lmZGVmIHJlc2V0dGVybQoraW5saW5lIGludCBVTkRFRihyZXNldHRlcm0pKHZvaWQpIHsgcmV0dXJuIHJlc2V0dGVybSgpOyB9CisjdW5kZWYgcmVzZXR0ZXJtCisjZGVmaW5lIHJlc2V0dGVybSBVTkRFRihyZXNldHRlcm0pCisjZW5kaWYKKworI2lmZGVmIHNhdmV0ZXJtCitpbmxpbmUgaW50IFVOREVGKHNhdmV0ZXJtKSh2b2lkKSB7IHJldHVybiBzYXZldGVybSgpOyB9CisjdW5kZWYgc2F2ZXRlcm0KKyNkZWZpbmUgc2F2ZXRlcm0gVU5ERUYoc2F2ZXRlcm0pCisjZW5kaWYKKworI2lmZGVmIHNjcmwKK2lubGluZSBpbnQgVU5ERUYoc2NybCkoaW50IGwpIHsgcmV0dXJuIHNjcmwobCk7IH0KKyN1bmRlZiBzY3JsCisjZGVmaW5lIHNjcmwgVU5ERUYoc2NybCkKKyNlbmRpZgorCisjaWZkZWYgc2Nyb2xsCitpbmxpbmUgaW50IFVOREVGKHNjcm9sbCkoV0lORE9XICp3aW4pIHsgcmV0dXJuIHNjcm9sbCh3aW4pOyB9CisjdW5kZWYgc2Nyb2xsCisjZGVmaW5lIHNjcm9sbCBVTkRFRihzY3JvbGwpCisjZW5kaWYKKworI2lmZGVmIHNjcm9sbG9rCitpbmxpbmUgaW50IFVOREVGKHNjcm9sbG9rKShXSU5ET1cqIHdpbiwgYm9vbCBiZikgIHsgcmV0dXJuIHNjcm9sbG9rKHdpbiwgYmYpOyB9CisjdW5kZWYgc2Nyb2xsb2sKKyNkZWZpbmUgc2Nyb2xsb2sgVU5ERUYoc2Nyb2xsb2spCisjZWxzZQorI2lmCWRlZmluZWQoX19OQ1VSU0VTX0gpCitleHRlcm4gIkMiIE5DVVJTRVNfSU1QRVhQIGludCBOQ1VSU0VTX0FQSSBzY3JvbGxvayhXSU5ET1cqLCBib29sKTsKKyNlbHNlCitleHRlcm4gIkMiIE5DVVJTRVNfSU1QRVhQIGludCBOQ1VSU0VTX0FQSSBzY3JvbGxvayhXSU5ET1cqLCBjaGFyKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBzZXRzY3JyZWcKK2lubGluZSBpbnQgVU5ERUYoc2V0c2NycmVnKShpbnQgdCwgaW50IGIpIHsgcmV0dXJuIHNldHNjcnJlZyh0LCBiKTsgfQorI3VuZGVmIHNldHNjcnJlZworI2RlZmluZSBzZXRzY3JyZWcgVU5ERUYoc2V0c2NycmVnKQorI2VuZGlmCisKKyNpZmRlZiBzdGFuZGVuZAoraW5saW5lIGludCBVTkRFRihzdGFuZGVuZCkoKSAgeyByZXR1cm4gc3RhbmRlbmQoKTsgfQorI3VuZGVmIHN0YW5kZW5kCisjZGVmaW5lIHN0YW5kZW5kIFVOREVGKHN0YW5kZW5kKQorI2VuZGlmCisKKyNpZmRlZiBzdGFuZG91dAoraW5saW5lIGludCBVTkRFRihzdGFuZG91dCkoKSAgeyByZXR1cm4gc3RhbmRvdXQoKTsgfQorI3VuZGVmIHN0YW5kb3V0CisjZGVmaW5lIHN0YW5kb3V0IFVOREVGKHN0YW5kb3V0KQorI2VuZGlmCisKKyNpZmRlZiBzdWJwYWQKK2lubGluZSBXSU5ET1cgKlVOREVGKHN1YnBhZCkoV0lORE9XICpwLCBpbnQgbCwgaW50IGMsIGludCB5LCBpbnQgeCkKK3sgcmV0dXJuIGRlcndpbihwLCBsLCBjLCB5LCB4KTsgfQorI3VuZGVmIHN1YnBhZAorI2RlZmluZSBzdWJwYWQgVU5ERUYoc3VicGFkKQorI2VuZGlmCisKKyNpZmRlZiB0aW1lb3V0CitpbmxpbmUgdm9pZCBVTkRFRih0aW1lb3V0KShpbnQgZGVsYXkpIHsgdGltZW91dChkZWxheSk7IH0KKyN1bmRlZiB0aW1lb3V0CisjZGVmaW5lIHRpbWVvdXQgVU5ERUYodGltZW91dCkKKyNlbmRpZgorCisjaWZkZWYgdG91Y2hsaW5lCitpbmxpbmUgaW50IFVOREVGKHRvdWNobGluZSkoV0lORE9XICp3aW4sIGludCBzLCBpbnQgYykKK3sgcmV0dXJuIHRvdWNobGluZSh3aW4sIHMsIGMpOyB9CisjdW5kZWYgdG91Y2hsaW5lCisjZGVmaW5lIHRvdWNobGluZSBVTkRFRih0b3VjaGxpbmUpCisjZW5kaWYKKworI2lmZGVmIHRvdWNod2luCitpbmxpbmUgaW50IFVOREVGKHRvdWNod2luKShXSU5ET1cgKndpbikgeyByZXR1cm4gdG91Y2h3aW4od2luKTsgfQorI3VuZGVmIHRvdWNod2luCisjZGVmaW5lIHRvdWNod2luIFVOREVGKHRvdWNod2luKQorI2VuZGlmCisKKyNpZmRlZiB1bnRvdWNod2luCitpbmxpbmUgaW50IFVOREVGKHVudG91Y2h3aW4pKFdJTkRPVyAqd2luKSB7IHJldHVybiB1bnRvdWNod2luKHdpbik7IH0KKyN1bmRlZiB1bnRvdWNod2luCisjZGVmaW5lIHVudG91Y2h3aW4gVU5ERUYodW50b3VjaHdpbikKKyNlbmRpZgorCisjaWZkZWYgdmxpbmUKK2lubGluZSBpbnQgVU5ERUYodmxpbmUpKGNodHlwZSBjaCwgaW50IG4pIHsgcmV0dXJuIHZsaW5lKGNoLCBuKTsgfQorI3VuZGVmIHZsaW5lCisjZGVmaW5lIHZsaW5lIFVOREVGKHZsaW5lKQorI2VuZGlmCisKKyNpZmRlZiB3YWRkY2hzdHIKK2lubGluZSBpbnQgVU5ERUYod2FkZGNoc3RyKShXSU5ET1cgKndpbiwgY2h0eXBlICphdCkgeyByZXR1cm4gd2FkZGNoc3RyKHdpbiwgYXQpOyB9CisjdW5kZWYgd2FkZGNoc3RyCisjZGVmaW5lIHdhZGRjaHN0ciBVTkRFRih3YWRkY2hzdHIpCisjZW5kaWYKKworI2lmZGVmIHdhZGRzdHIKK2lubGluZSBpbnQgVU5ERUYod2FkZHN0cikoV0lORE9XICp3aW4sIGNoYXIgKnN0cikgeyByZXR1cm4gd2FkZHN0cih3aW4sIHN0cik7IH0KKyN1bmRlZiB3YWRkc3RyCisjZGVmaW5lIHdhZGRzdHIgVU5ERUYod2FkZHN0cikKKyNlbmRpZgorCisjaWZkZWYgd2F0dHJvZmYKK2lubGluZSBpbnQgVU5ERUYod2F0dHJvZmYpKFdJTkRPVyAqd2luLCBpbnQgYXR0KSB7IHJldHVybiB3YXR0cm9mZih3aW4sIGF0dCk7IH0KKyN1bmRlZiB3YXR0cm9mZgorI2RlZmluZSB3YXR0cm9mZiBVTkRFRih3YXR0cm9mZikKKyNlbmRpZgorCisjaWZkZWYgd2F0dHJzZXQKK2lubGluZSBpbnQgVU5ERUYod2F0dHJzZXQpKFdJTkRPVyAqd2luLCBpbnQgYXR0KSB7IHJldHVybiB3YXR0cnNldCh3aW4sIGF0dCk7IH0KKyN1bmRlZiB3YXR0cnNldAorI2RlZmluZSB3YXR0cnNldCBVTkRFRih3YXR0cnNldCkKKyNlbmRpZgorCisjaWZkZWYgd2luY2gKK2lubGluZSBjaHR5cGUgVU5ERUYod2luY2gpKGNvbnN0IFdJTkRPVyogd2luKSB7IHJldHVybiB3aW5jaCh3aW4pOyB9CisjdW5kZWYgd2luY2gKKyNkZWZpbmUgd2luY2ggVU5ERUYod2luY2gpCisjZW5kaWYKKworI2lmZGVmIHdpbmNobnN0cgoraW5saW5lIGludCBVTkRFRih3aW5jaG5zdHIpKFdJTkRPVyAqd2luLCBjaHR5cGUgKnN0ciwgaW50IG4pICB7IHJldHVybiB3aW5jaG5zdHIod2luLCBzdHIsIG4pOyB9CisjdW5kZWYgd2luY2huc3RyCisjZGVmaW5lIHdpbmNobnN0ciBVTkRFRih3aW5jaG5zdHIpCisjZW5kaWYKKworI2lmZGVmIHdpbmNoc3RyCitpbmxpbmUgaW50IFVOREVGKHdpbmNoc3RyKShXSU5ET1cgKndpbiwgY2h0eXBlICpzdHIpICB7IHJldHVybiB3aW5jaHN0cih3aW4sIHN0cik7IH0KKyN1bmRlZiB3aW5jaHN0cgorI2RlZmluZSB3aW5jaHN0ciBVTkRFRih3aW5jaHN0cikKKyNlbmRpZgorCisjaWZkZWYgd2luc3N0cgoraW5saW5lIGludCBVTkRFRih3aW5zc3RyKShXSU5ET1cgKncsIGNvbnN0IGNoYXIgKl9zdHIpICB7CisgIHJldHVybiB3aW5zc3RyKHcsIF9zdHIpOyB9CisjdW5kZWYgd2luc3N0cgorI2RlZmluZSB3aW5zc3RyIFVOREVGKHdpbnNzdHIpCisjZW5kaWYKKworI2lmZGVmIHdzdGFuZGVuZAoraW5saW5lIGludCBVTkRFRih3c3RhbmRlbmQpKFdJTkRPVyAqd2luKSAgeyByZXR1cm4gd3N0YW5kZW5kKHdpbik7IH0KKyN1bmRlZiB3c3RhbmRlbmQKKyNkZWZpbmUgd3N0YW5kZW5kIFVOREVGKHdzdGFuZGVuZCkKKyNlbmRpZgorCisjaWZkZWYgd3N0YW5kb3V0CitpbmxpbmUgaW50IFVOREVGKHdzdGFuZG91dCkoV0lORE9XICp3aW4pICB7IHJldHVybiB3c3RhbmRvdXQod2luKTsgfQorI3VuZGVmIHdzdGFuZG91dAorI2RlZmluZSB3c3RhbmRvdXQgVU5ERUYod3N0YW5kb3V0KQorI2VuZGlmCisKKy8qCisgKgorICogQysrIGNsYXNzIGZvciB3aW5kb3dzLgorICoKKyAqLworCitleHRlcm4gIkMiIGludCAgICAgX25jX3JpcG9mZmxpbmUoaW50LCBpbnQgKCppbml0KShXSU5ET1cqLCBpbnQpKTsKK2V4dGVybiAiQyIgaW50ICAgICBfbmNfeHhfcmlwb2ZmX2luaXQoV0lORE9XICosIGludCk7CitleHRlcm4gIkMiIGludCAgICAgX25jX2hhc19tb3VzZSh2b2lkKTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1dpbmRvdworeworICBmcmllbmQgY2xhc3MgTkN1cnNlc01lbnU7CisgIGZyaWVuZCBjbGFzcyBOQ3Vyc2VzRm9ybTsKKworcHJpdmF0ZToKKyAgc3RhdGljIGJvb2wgICAgYl9pbml0aWFsaXplZDsKKyAgc3RhdGljIHZvaWQgICAgaW5pdGlhbGl6ZSgpOworICB2b2lkICAgICAgICAgICBjb25zdHJ1Y3RpbmcoKTsKKyAgZnJpZW5kIGludCAgICAgX25jX3h4X3JpcG9mZl9pbml0KFdJTkRPVyAqLCBpbnQpOworCisgIHZvaWQgICAgICAgICAgIHNldF9rZXlib2FyZCgpOworCisgIHNob3J0ICAgICAgICAgIGdldGNvbG9yKGludCBnZXRiYWNrKSBjb25zdDsKKyAgc2hvcnQgICAgICAgICAgZ2V0UGFpcigpIGNvbnN0OworCisgIHN0YXRpYyBpbnQgICAgIHNldHBhbGV0dGUoc2hvcnQgZm9yZSwgc2hvcnQgYmFjaywgc2hvcnQgcGFpcik7CisgIHN0YXRpYyBpbnQgICAgIGNvbG9ySW5pdGlhbGl6ZWQ7CisKKyAgLy8gVGhpcyBwcml2YXRlIGNvbnN0cnVjdG9yIGlzIG9ubHkgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uCisgIC8vIG9mIHdpbmRvd3MgZ2VuZXJhdGVkIGJ5IHJpcG9mZmxpbmUoKSBjYWxscy4KKyAgTkN1cnNlc1dpbmRvdyhXSU5ET1cqIHdpbiwgaW50IG5jb2xzKTsKKworcHJvdGVjdGVkOgorICB2aXJ0dWFsIHZvaWQgICBlcnJfaGFuZGxlcihjb25zdCBjaGFyICopIGNvbnN0IFRIUk9XUyhOQ3Vyc2VzRXhjZXB0aW9uKTsKKyAgLy8gU2lnbmFsIGFuIGVycm9yIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UgdGV4dC4KKworICBzdGF0aWMgbG9uZyBjb3VudDsgICAgICAgIC8vIGNvdW50IG9mIGFsbCBhY3RpdmUgd2luZG93czoKKyAgLy8gICBXZSByZWx5IG9uIHRoZSBjKysgcHJvbWlzZSB0aGF0CisgIC8vICAgYWxsIG90aGVyd2lzZSB1bmluaXRpYWxpemVkCisgIC8vICAgc3RhdGljIGNsYXNzIHZhcnMgYXJlIHNldCB0byAwCisKKyAgV0lORE9XKiAgICAgICAgdzsgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnNlcyBXSU5ET1cKKworICBib29sICAgICAgICAgICBhbGxvY2VkOyAgICAgICAgICAvLyBUUlVFIGlmIHdlIG93biB0aGUgV0lORE9XCisKKyAgTkN1cnNlc1dpbmRvdyogcGFyOyAgICAgICAgICAgICAgLy8gcGFyZW50LCBpZiBzdWJ3aW5kb3cKKyAgTkN1cnNlc1dpbmRvdyogc3Vid2luczsgICAgICAgICAgLy8gaGVhZCBvZiBzdWJ3aW5kb3dzIGxpc3QKKyAgTkN1cnNlc1dpbmRvdyogc2liOyAgICAgICAgICAgICAgLy8gbmV4dCBzdWJ3aW5kb3cgb2YgcGFyZW50CisKKyAgdm9pZCAgICAgICAgICAga2lsbF9zdWJ3aW5kb3dzKCk7IC8vIGRpc2FibGUgYWxsIHN1YndpbmRvd3MKKyAgLy8gRGVzdHJveSBhbGwgc3Vid2luZG93cy4KKworICAvKiBPbmx5IGZvciB1c2UgYnkgZGVyaXZlZCBjbGFzc2VzLiBUaGV5IGFyZSB0aGVuIGluIGNoYXJnZSB0bworICAgICBmaWxsIHRoZSBtZW1iZXIgdmFyaWFibGVzIGNvcnJlY3RseS4gKi8KKyAgTkN1cnNlc1dpbmRvdygpOworCitwdWJsaWM6CisgIE5DdXJzZXNXaW5kb3coV0lORE9XKiB3aW5kb3cpOyAgIC8vIHVzZWZ1bCBvbmx5IGZvciBzdGRzY3IKKworICBOQ3Vyc2VzV2luZG93KGludCBubGluZXMsICAgICAgICAvLyBudW1iZXIgb2YgbGluZXMKKwkJaW50IG5jb2xzLCAgICAgICAgIC8vIG51bWJlciBvZiBjb2x1bW5zCisJCWludCBiZWdpbl95LCAgICAgICAvLyBsaW5lIG9yaWdpbgorCQlpbnQgYmVnaW5feCk7ICAgICAgLy8gY29sIG9yaWdpbgorCisgIE5DdXJzZXNXaW5kb3coTkN1cnNlc1dpbmRvdyYgcGFyLC8vIHBhcmVudCB3aW5kb3cKKwkJaW50IG5saW5lcywgICAgICAgIC8vIG51bWJlciBvZiBsaW5lcworCQlpbnQgbmNvbHMsICAgICAgICAgLy8gbnVtYmVyIG9mIGNvbHVtbnMKKwkJaW50IGJlZ2luX3ksICAgICAgIC8vIGFic29sdXRlIG9yIHJlbGF0aXZlCisJCWludCBiZWdpbl94LCAgICAgICAvLyAgIG9yaWdpbnM6CisJCWNoYXIgYWJzcmVsID0gJ2EnKTsvLyBpZiBgYScsIGJlZ2luX3kgJiBiZWdpbl94IGFyZQorICAvLyBhYnNvbHV0ZSBzY3JlZW4gcG9zLCBlbHNlIGlmIGByJywgdGhleSBhcmUgcmVsYXRpdmUgdG8gcGFyIG9yaWdpbgorCisgIE5DdXJzZXNXaW5kb3coTkN1cnNlc1dpbmRvdyYgcGFyLC8vIHBhcmVudCB3aW5kb3cKKwkJYm9vbCBkb19ib3ggPSBUUlVFKTsKKyAgLy8gdGhpcyBpcyB0aGUgdmVyeSBjb21tb24gY2FzZSB0aGF0IHdlIHdhbnQgdG8gY3JlYXRlIHRoZSBzdWJ3aW5kb3cgdGhhdAorICAvLyBpcyB0d28gbGluZXMgYW5kIHR3byBjb2x1bW5zIHNtYWxsZXIgYW5kIGJlZ2lucyBhdCAoMSwxKS4KKyAgLy8gV2UgbWF5IGF1dG9tYXRpY2FsbHkgcmVxdWVzdCB0aGUgYm94IGFyb3VuZCBpdC4KKworICBOQ3Vyc2VzV2luZG93JiBvcGVyYXRvcj0oY29uc3QgTkN1cnNlc1dpbmRvdyYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykKKyAgICAgICp0aGlzID0gcmhzOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE5DdXJzZXNXaW5kb3coY29uc3QgTkN1cnNlc1dpbmRvdyYgcmhzKQorICAgIDogdyhyaHMudyksIGFsbG9jZWQocmhzLmFsbG9jZWQpLCBwYXIocmhzLnBhciksIHN1YndpbnMocmhzLnN1YndpbnMpLCBzaWIocmhzLnNpYikKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc1dpbmRvdygpOworCisgIE5DdXJzZXNXaW5kb3cgQ2xvbmUoKTsKKyAgLy8gTWFrZSBhbiBleGFjdCBjb3B5IG9mIHRoZSB3aW5kb3cuCisKKyAgLy8gSW5pdGlhbGl6YXRpb24uCisgIHN0YXRpYyB2b2lkICAgIHVzZUNvbG9ycyh2b2lkKTsKKyAgLy8gQ2FsbCB0aGlzIHJvdXRpbmUgdmVyeSBlYXJseSBpZiB5b3Ugd2FudCB0byBoYXZlIGNvbG9ycy4KKworICBzdGF0aWMgaW50IHJpcG9mZmxpbmUoaW50IHJpcG9mZl9saW5lcywKKwkJCWludCAoKmluaXQpKE5DdXJzZXNXaW5kb3cmIHdpbikpOworICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSB3aW5kb3cgb2YgcmlwcGVkLW9mIGxpbmVzLgorICAvLyBJZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUsIGxpbmVzIGFyZSByZW1vdmVkIGZyb20gdGhlIHRvcCwgaWYgaXQKKyAgLy8gaXMgbmVnYXRpdmUgbGluZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYm90dG9tLiBUaGlzIGVuaGFuY2VzIHRoZQorICAvLyBsb3dsZXZlbCByaXBvZmZsaW5lKCkgZnVuY3Rpb24gYmVjYXVzZSBpdCB1c2VzIHRoZSBpbnRlcm5hbAorICAvLyBpbXBsZW1lbnRhdGlvbiB0aGF0IGFsbG93cyB0byByZW1vdmUgbW9yZSB0aGFuIGp1c3QgYSBzaW5nbGUgbGluZS4KKyAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIG5jdXJzZXMgZnVuY3Rpb24uIFRoZQorICAvLyBjcmVhdGlvbiBvZiB0aGUgd2luZG93IGlzIGRlZmVycmVkIHVudGlsIG5jdXJzZXMgZ2V0cyBpbml0aWFsaXplZC4KKyAgLy8gVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIHRoZW4gY2FsbGVkLgorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gdGVybWluYWwgc3RhdHVzCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgbGluZXMoKSBjb25zdCB7IGluaXRpYWxpemUoKTsgcmV0dXJuIExJTkVTOyB9CisgIC8vIE51bWJlciBvZiBsaW5lcyBvbiB0ZXJtaW5hbCwgKm5vdCogd2luZG93CisKKyAgaW50ICAgICAgICAgICAgY29scygpIGNvbnN0IHsgaW5pdGlhbGl6ZSgpOyByZXR1cm4gQ09MUzsgfQorICAvLyBOdW1iZXIgb2YgY29scyAgb24gdGVybWluYWwsICpub3QqIHdpbmRvdworCisgIGludCAgICAgICAgICAgIHRhYnNpemUoKSBjb25zdCB7IGluaXRpYWxpemUoKTsgcmV0dXJuIFRBQlNJWkU7IH0KKyAgLy8gU2l6ZSBvZiBhIHRhYiBvbiB0ZXJtaW5hbCwgKm5vdCogd2luZG93CisKKyAgc3RhdGljIGludCAgICAgTnVtYmVyT2ZDb2xvcnMoKTsKKyAgLy8gTnVtYmVyIG9mIGF2YWlsYWJsZSBjb2xvcnMKKworICBpbnQgICAgICAgICAgICBjb2xvcnMoKSBjb25zdCB7IHJldHVybiBOdW1iZXJPZkNvbG9ycygpOyB9CisgIC8vIE51bWJlciBvZiBhdmFpbGFibGUgY29sb3JzCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyB3aW5kb3cgc3RhdHVzCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWF4eSgpICsgMTsgfQorICAvLyBOdW1iZXIgb2YgbGluZXMgaW4gdGhpcyB3aW5kb3cKKworICBpbnQgICAgICAgICAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1heHgoKSArIDE7IH0KKyAgLy8gTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhpcyB3aW5kb3cKKworICBpbnQgICAgICAgICAgICBiZWd4KCkgY29uc3QgeyByZXR1cm4gZ2V0YmVneCh3KTsgfQorICAvLyBDb2x1bW4gb2YgdG9wIGxlZnQgY29ybmVyIHJlbGF0aXZlIHRvIHN0ZHNjcgorCisgIGludCAgICAgICAgICAgIGJlZ3koKSBjb25zdCB7IHJldHVybiBnZXRiZWd5KHcpOyB9CisgIC8vIExpbmUgb2YgdG9wIGxlZnQgY29ybmVyIHJlbGF0aXZlIHRvIHN0ZHNjcgorCisgIGludCAgICAgICAgICAgIGN1cngoKSBjb25zdCB7IHJldHVybiBnZXRjdXJ4KHcpOyB9CisgIC8vIENvbHVtbiBvZiB0b3AgbGVmdCBjb3JuZXIgcmVsYXRpdmUgdG8gc3Rkc2NyCisKKyAgaW50ICAgICAgICAgICAgY3VyeSgpIGNvbnN0IHsgcmV0dXJuIGdldGN1cnkodyk7IH0KKyAgLy8gTGluZSBvZiB0b3AgbGVmdCBjb3JuZXIgcmVsYXRpdmUgdG8gc3Rkc2NyCisKKyAgaW50ICAgICAgICAgICAgbWF4eCgpIGNvbnN0IHsgcmV0dXJuIGdldG1heHgodykgPT0gRVJSID8gRVJSIDogZ2V0bWF4eCh3KS0xOyB9CisgIC8vIExhcmdlc3QgeCBjb29yZCBpbiB3aW5kb3cKKworICBpbnQgICAgICAgICAgICBtYXh5KCkgY29uc3QgeyByZXR1cm4gZ2V0bWF4eSh3KSA9PSBFUlIgPyBFUlIgOiBnZXRtYXh5KHcpLTE7IH0KKyAgLy8gTGFyZ2VzdCB5IGNvb3JkIGluIHdpbmRvdworCisgIHNob3J0ICAgICAgICAgIGdldGNvbG9yKCkgY29uc3Q7CisgIC8vIEFjdHVhbCBjb2xvciBwYWlyCisKKyAgc2hvcnQgICAgICAgICAgZm9yZWdyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIGdldGNvbG9yKDApOyB9CisgIC8vIEFjdHVhbCBmb3JlZ3JvdW5kIGNvbG9yCisKKyAgc2hvcnQgICAgICAgICAgYmFja2dyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIGdldGNvbG9yKDEpOyB9CisgIC8vIEFjdHVhbCBiYWNrZ3JvdW5kIGNvbG9yCisKKyAgaW50ICAgICAgICAgICAgc2V0cGFsZXR0ZShzaG9ydCBmb3JlLCBzaG9ydCBiYWNrKTsKKyAgLy8gU2V0IGNvbG9yIHBhbGV0dGUgZW50cnkKKworICBpbnQgICAgICAgICAgICBzZXRjb2xvcihzaG9ydCBwYWlyKTsKKyAgLy8gU2V0IGFjdHVhbGx5IHVzZWQgcGFsZXR0ZSBlbnRyeQorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gd2luZG93IHBvc2l0aW9uaW5nCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgdmlydHVhbCBpbnQgICAgbXZ3aW4oaW50IGJlZ2luX3ksIGludCBiZWdpbl94KSB7CisgICAgcmV0dXJuIDo6bXZ3aW4odywgYmVnaW5feSwgYmVnaW5feCk7IH0KKyAgLy8gTW92ZSB3aW5kb3cgdG8gbmV3IHBvc2l0aW9uIHdpdGggdGhlIG5ldyBwb3NpdGlvbiBhcyB0b3AgbGVmdCBjb3JuZXIuCisgIC8vIFRoaXMgaXMgdmlydHVhbCBiZWNhdXNlIGl0IGlzIHJlZGVmaW5lZCBpbiBOQ3Vyc2VzUGFuZWwuCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBjb29yZGluYXRlIHBvc2l0aW9uaW5nCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgbW92ZShpbnQgeSwgaW50IHgpIHsgcmV0dXJuIDo6d21vdmUodywgeSwgeCk7IH0KKyAgLy8gTW92ZSBjdXJzb3IgdGhlIHRoaXMgcG9zaXRpb24KKworICB2b2lkICAgICAgICAgICBnZXR5eChpbnQmIHksIGludCYgeCkgY29uc3QgeyA6OmdldHl4KHcsIHksIHgpOyB9CisgIC8vIEdldCBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IKKworICB2b2lkICAgICAgICAgICBnZXRiZWd5eChpbnQmIHksIGludCYgeCkgY29uc3QgeyA6OmdldGJlZ3l4KHcsIHksIHgpOyB9CisgIC8vIEdldCBiZWdpbm5pbmcgb2YgdGhlIHdpbmRvdworCisgIHZvaWQgICAgICAgICAgIGdldG1heHl4KGludCYgeSwgaW50JiB4KSBjb25zdCB7IDo6Z2V0bWF4eXgodywgeSwgeCk7IH0KKyAgLy8gR2V0IHNpemUgb2YgdGhlIHdpbmRvdworCisgIHZvaWQgICAgICAgICAgIGdldHBhcnl4KGludCYgeSwgaW50JiB4KSBjb25zdCB7IDo6Z2V0cGFyeXgodywgeSwgeCk7IH0KKyAgLy8gR2V0IHBhcmVudCdzIGJlZ2lubmluZyBvZiB0aGUgd2luZG93CisKKyAgaW50ICAgICAgICAgICAgbXZjdXIoaW50IG9sZHJvdywgaW50IG9sZGNvbCwgaW50IG5ld3JvdywgaW50IG5ld2NvbCkgY29uc3QgeworICAgIHJldHVybiA6Om12Y3VyKG9sZHJvdywgb2xkY29sLCBuZXdyb3csIG5ld2NvbCk7IH0KKyAgLy8gUGVyZm9ybSBsb3dsZXZlbCBjdXJzb3IgbW90aW9uIHRoYXQgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5LgorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gaW5wdXQKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBpbnQgICAgICAgICAgICBnZXRjaCgpIHsgcmV0dXJuIDo6d2dldGNoKHcpOyB9CisgIC8vIEdldCBhIGtleXN0cm9rZSBmcm9tIHRoZSB3aW5kb3cuCisKKyAgaW50ICAgICAgICAgICAgZ2V0Y2goaW50IHksIGludCB4KSB7IHJldHVybiA6Om12d2dldGNoKHcsIHksIHgpOyB9CisgIC8vIE1vdmUgY3Vyc29yIHRvIHBvc2l0aW9uIGFuZCBnZXQgYSBrZXlzdHJva2UgZnJvbSB0aGUgd2luZG93CisKKyAgaW50ICAgICAgICAgICAgZ2V0c3RyKGNoYXIqIHN0ciwgaW50IG49LTEpIHsKKyAgICByZXR1cm4gOjp3Z2V0bnN0cih3LCBzdHIsIG4pOyB9CisgIC8vIFJlYWQgYSBzZXJpZXMgb2YgY2hhcmFjdGVycyBpbnRvIHN0ciB1bnRpbCBhIG5ld2xpbmUgb3IgY2FycmlhZ2UgcmV0dXJuCisgIC8vIGlzIHJlY2VpdmVkLiBSZWFkIGF0IG1vc3QgbiBjaGFyYWN0ZXJzLiBJZiBuIGlzIG5lZ2F0aXZlLCB0aGUgbGltaXQgaXMKKyAgLy8gaWdub3JlZC4KKworICBpbnQgICAgICAgICAgICBnZXRzdHIoaW50IHksIGludCB4LCBjaGFyKiBzdHIsIGludCBuPS0xKSB7CisgICAgcmV0dXJuIDo6bXZ3Z2V0bnN0cih3LCB5LCB4LCBzdHIsIG4pOyB9CisgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gdGhlIGdldHN0cigpCisgIC8vIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICBpbnQgICAgICAgICAgICBpbnN0cihjaGFyICpzLCBpbnQgbj0tMSkgeyByZXR1cm4gOjp3aW5uc3RyKHcsIHMsIG4pOyB9CisgIC8vIEdldCBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIHdpbmRvdyBpbnRvIHRoZSBidWZmZXIgcy4gUmV0cmlldmUKKyAgLy8gYXQgbW9zdCBuIGNoYXJhY3RlcnMsIGlmIG4gaXMgbmVnYXRpdmUgcmV0cmlldmUgYWxsIGNoYXJhY3RlcnMgdXAgdG8gdGhlCisgIC8vIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLiBBdHRyaWJ1dGVzIGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBjaGFyYWN0ZXJzLgorCisgIGludCAgICAgICAgICAgIGluc3RyKGludCB5LCBpbnQgeCwgY2hhciAqcywgaW50IG49LTEpIHsKKyAgICByZXR1cm4gOjptdndpbm5zdHIodywgeSwgeCwgcywgbik7IH0KKyAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcGVyZm9ybSB0aGUgaW5zdHIoKQorICAvLyBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgaW50ICAgICAgICAgICAgc2NhbncoY29uc3QgY2hhciogZm10LCAuLi4pCisgICAgLy8gUGVyZm9ybSBhIHNjYW53IGZ1bmN0aW9uIGZyb20gdGhlIHdpbmRvdy4KKyNpZiBfX0dOVUdfXyA+PSAyCisgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAoc2NhbmYsIDIsIDMpKSk7CisjZWxzZQorICA7CisjZW5kaWYKKworICBpbnQgICAgICAgICAgICBzY2Fudyhjb25zdCBjaGFyKiwgdmFfbGlzdCk7CisgICAgLy8gUGVyZm9ybSBhIHNjYW53IGZ1bmN0aW9uIGZyb20gdGhlIHdpbmRvdy4KKworICBpbnQgICAgICAgICAgICBzY2FudyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIqIGZtdCwgLi4uKQorICAgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHBlcmZvcm0gYSBzY2FudworICAgIC8vIGZyb20gdGhlIHdpbmRvdy4KKyNpZiBfX0dOVUdfXyA+PSAyCisgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAoc2NhbmYsIDQsIDUpKSk7CisjZWxzZQorICA7CisjZW5kaWYKKworICBpbnQgICAgICAgICAgICBzY2FudyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCk7CisgICAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcGVyZm9ybSBhIHNjYW53CisgICAgLy8gZnJvbSB0aGUgd2luZG93LgorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gb3V0cHV0CisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgYWRkY2goY29uc3QgY2h0eXBlIGNoKSB7IHJldHVybiA6OndhZGRjaCh3LCBjaCk7IH0KKyAgLy8gUHV0IGF0dHJpYnV0ZWQgY2hhcmFjdGVyIHRvIHRoZSB3aW5kb3cuCisKKyAgaW50ICAgICAgICAgICAgYWRkY2goaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgY2gpIHsKKyAgICByZXR1cm4gOjptdndhZGRjaCh3LCB5LCB4LCBjaCk7IH0KKyAgLy8gTW92ZSBjdXJzb3IgdG8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiBwdXQgYXR0cmlidXRlZCBjaGFyYWN0ZXIKKyAgLy8gdG8gdGhlIHdpbmRvdy4KKworICBpbnQgICAgICAgICAgICBlY2hvY2hhcihjb25zdCBjaHR5cGUgY2gpIHsgcmV0dXJuIDo6d2VjaG9jaGFyKHcsIGNoKTsgfQorICAvLyBQdXQgYXR0cmlidXRlZCBjaGFyYWN0ZXIgdG8gdGhlIHdpbmRvdyBhbmQgcmVmcmVzaCBpdCBpbW1lZGlhdGVseS4KKworICBpbnQgICAgICAgICAgICBhZGRzdHIoY29uc3QgY2hhciogc3RyLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6OndhZGRuc3RyKHcsIHN0ciwgbik7IH0KKyAgLy8gV3JpdGUgdGhlIHN0cmluZyBzdHIgdG8gdGhlIHdpbmRvdywgc3RvcCB3cml0aW5nIGlmIHRoZSB0ZXJtaW5hdGluZworICAvLyBOVUwgb3IgdGhlIGxpbWl0IG4gaXMgcmVhY2hlZC4gSWYgbiBpcyBuZWdhdGl2ZSwgaXQgaXMgaWdub3JlZC4KKworICBpbnQgICAgICAgICAgICBhZGRzdHIoaW50IHksIGludCB4LCBjb25zdCBjaGFyICogc3RyLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6Om12d2FkZG5zdHIodywgeSwgeCwgc3RyLCBuKTsgfQorICAvLyBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiBwZXJmb3JtIHRoZSBhZGRjaHN0cgorICAvLyBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgaW50ICAgICAgICAgICAgYWRkY2hzdHIoY29uc3QgY2h0eXBlKiBzdHIsIGludCBuPS0xKSB7CisgICAgcmV0dXJuIDo6d2FkZGNobnN0cih3LCBzdHIsIG4pOyB9CisgIC8vIFdyaXRlIHRoZSBzdHJpbmcgc3RyIHRvIHRoZSB3aW5kb3csIHN0b3Agd3JpdGluZyBpZiB0aGUgdGVybWluYXRpbmcKKyAgLy8gTlVMIG9yIHRoZSBsaW1pdCBuIGlzIHJlYWNoZWQuIElmIG4gaXMgbmVnYXRpdmUsIGl0IGlzIGlnbm9yZWQuCisKKyAgaW50ICAgICAgICAgICAgYWRkY2hzdHIoaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgKiBzdHIsIGludCBuPS0xKSB7CisgICAgcmV0dXJuIDo6bXZ3YWRkY2huc3RyKHcsIHksIHgsIHN0ciwgbik7IH0KKyAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcGVyZm9ybSB0aGUgYWRkY2hzdHIKKyAgLy8gYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgIGludCAgICAgICAgICAgIHByaW50dyhjb25zdCBjaGFyKiBmbXQsIC4uLikKKyAgICAvLyBEbyBhIGZvcm1hdHRlZCBwcmludCB0byB0aGUgd2luZG93LgorI2lmIChfX0dOVUdfXyA+PSAyKSAmJiAhZGVmaW5lZChwcmludGYpCisgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworI2Vsc2UKKyAgOworI2VuZGlmCisKKyAgaW50ICAgICAgICAgICAgcHJpbnR3KGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQorICAgIC8vIE1vdmUgdGhlIGN1cnNvciBhbmQgdGhlbiBkbyBhIGZvcm1hdHRlZCBwcmludCB0byB0aGUgd2luZG93LgorI2lmIChfX0dOVUdfXyA+PSAyKSAmJiAhZGVmaW5lZChwcmludGYpCisgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCA0LCA1KSkpOworI2Vsc2UKKyAgOworI2VuZGlmCisKKyAgaW50ICAgICAgICAgICAgcHJpbnR3KGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCBhcmdzKTsKKyAgICAvLyBEbyBhIGZvcm1hdHRlZCBwcmludCB0byB0aGUgd2luZG93LgorCisgIGludCAgICAgICAgICAgIHByaW50dyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKiBmbXQsIHZhX2xpc3QgYXJncyk7CisgICAgLy8gTW92ZSB0aGUgY3Vyc29yIGFuZCB0aGVuIGRvIGEgZm9ybWF0dGVkIHByaW50IHRvIHRoZSB3aW5kb3cuCisKKyAgY2h0eXBlICAgICAgICAgaW5jaCgpIGNvbnN0IHsgcmV0dXJuIDo6d2luY2godyk7IH0KKyAgLy8gUmV0cmlldmUgYXR0cmlidXRlZCBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorCisgIGNodHlwZSAgICAgICAgIGluY2goaW50IHksIGludCB4KSB7IHJldHVybiA6Om12d2luY2godywgeSwgeCk7IH0KKyAgLy8gTW92ZSBjdXJzb3IgdG8gcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIHJldHJpZXZlIGF0dHJpYnV0ZWQgY2hhcmFjdGVyCisgIC8vIGF0IHRoaXMgcG9zaXRpb24uCisKKyAgaW50ICAgICAgICAgICAgaW5jaHN0cihjaHR5cGUqIHN0ciwgaW50IG49LTEpIHsKKyAgICByZXR1cm4gOjp3aW5jaG5zdHIodywgc3RyLCBuKTsgfQorICAvLyBSZWFkIHRoZSBzdHJpbmcgc3RyIGZyb20gdGhlIHdpbmRvdywgc3RvcCByZWFkaW5nIGlmIHRoZSB0ZXJtaW5hdGluZworICAvLyBOVUwgb3IgdGhlIGxpbWl0IG4gaXMgcmVhY2hlZC4gSWYgbiBpcyBuZWdhdGl2ZSwgaXQgaXMgaWdub3JlZC4KKworICBpbnQgICAgICAgICAgICBpbmNoc3RyKGludCB5LCBpbnQgeCwgY2h0eXBlICogc3RyLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6Om12d2luY2huc3RyKHcsIHksIHgsIHN0ciwgbik7IH0KKyAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcGVyZm9ybSB0aGUgaW5jaHN0cgorICAvLyBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgaW50ICAgICAgICAgICAgaW5zY2goY2h0eXBlIGNoKSB7IHJldHVybiA6OndpbnNjaCh3LCBjaCk7IH0KKyAgLy8gSW5zZXJ0IGF0dHJpYnV0ZWQgY2hhcmFjdGVyIGludG8gdGhlIHdpbmRvdyBiZWZvcmUgY3VycmVudCBjdXJzb3IKKyAgLy8gcG9zaXRpb24uCisKKyAgaW50ICAgICAgICAgICAgaW5zY2goaW50IHksIGludCB4LCBjaHR5cGUgY2gpIHsKKyAgICByZXR1cm4gOjptdndpbnNjaCh3LCB5LCB4LCBjaCk7IH0KKyAgLy8gTW92ZSBjdXJzb3IgdG8gcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIGluc2VydCB0aGUgYXR0cmlidXRlZAorICAvLyBjaGFyYWN0ZXIgYmVmb3JlIHRoYXQgcG9zaXRpb24uCisKKyAgaW50ICAgICAgICAgICAgaW5zZXJ0bG4oKSB7IHJldHVybiA6OndpbnNkZWxsbih3LCAxKTsgfQorICAvLyBJbnNlcnQgYW4gZW1wdHkgbGluZSBhYm92ZSB0aGUgY3VycmVudCBsaW5lLgorCisgIGludCAgICAgICAgICAgIGluc2RlbGxuKGludCBuPTEpIHsgcmV0dXJuIDo6d2luc2RlbGxuKHcsIG4pOyB9CisgIC8vIElmIG4+MCBpbnNlcnQgdGhhdCBtYW55IGxpbmVzIGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuIElmIG48MCBkZWxldGUKKyAgLy8gdGhhdCBtYW55IGxpbmVzIGJlZ2lubmluZyB3aXRoIHRoZSBjdXJyZW50IGxpbmUuCisKKyAgaW50ICAgICAgICAgICAgaW5zc3RyKGNvbnN0IGNoYXIgKnMsIGludCBuPS0xKSB7CisgICAgcmV0dXJuIDo6d2luc25zdHIodywgcywgbik7IH0KKyAgLy8gSW5zZXJ0IHRoZSBzdHJpbmcgaW50byB0aGUgd2luZG93IGJlZm9yZSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisgIC8vIEluc2VydCBzdG9wcyBhdCBlbmQgb2Ygc3RyaW5nIG9yIHdoZW4gdGhlIGxpbWl0IG4gaXMgcmVhY2hlZC4gSWYgbiBpcworICAvLyBuZWdhdGl2ZSwgaXQgaXMgaWdub3JlZC4KKworICBpbnQgICAgICAgICAgICBpbnNzdHIoaW50IHksIGludCB4LCBjb25zdCBjaGFyICpzLCBpbnQgbj0tMSkgeworICAgIHJldHVybiA6Om12d2luc25zdHIodywgeSwgeCwgcywgbik7IH0KKyAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcGVyZm9ybSB0aGUgaW5zc3RyKCkKKyAgLy8gYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgIGludCAgICAgICAgICAgIGF0dHJvbiAoY2h0eXBlIGF0KSB7IHJldHVybiA6OndhdHRyb24gKHcsIGF0KTsgfQorICAvLyBTd2l0Y2ggb24gdGhlIHdpbmRvdyBhdHRyaWJ1dGVzOworCisgIGludCAgICAgICAgICAgIGF0dHJvZmYoY2h0eXBlIGF0KSB7IHJldHVybiA6OndhdHRyb2ZmKHcsIHN0YXRpY19jYXN0PGludD4oYXQpKTsgfQorICAvLyBTd2l0Y2ggb2ZmIHRoZSB3aW5kb3cgYXR0cmlidXRlczsKKworICBpbnQgICAgICAgICAgICBhdHRyc2V0KGNodHlwZSBhdCkgeyByZXR1cm4gOjp3YXR0cnNldCh3LCBzdGF0aWNfY2FzdDxpbnQ+KGF0KSk7IH0KKyAgLy8gU2V0IHRoZSB3aW5kb3cgYXR0cmlidXRlczsKKworICBjaHR5cGUgICAgICAgICBhdHRyZ2V0KCkgeyByZXR1cm4gOjpnZXRhdHRycyh3KTsgfQorICAvLyBHZXQgdGhlIHdpbmRvdyBhdHRyaWJ1dGVzOworCisgIGludCAgICAgICAgICAgIGNvbG9yX3NldChzaG9ydCBjb2xvcl9wYWlyX251bWJlciwgdm9pZCogb3B0cz1OVUxMKSB7CisgICAgcmV0dXJuIDo6d2NvbG9yX3NldCh3LCBjb2xvcl9wYWlyX251bWJlciwgb3B0cyk7IH0KKyAgLy8gU2V0IHRoZSB3aW5kb3cgY29sb3IgYXR0cmlidXRlOworCisgIGludCAgICAgICAgICAgIGNoZ2F0KGludCBuLCBhdHRyX3QgYXR0ciwgc2hvcnQgY29sb3IsIGNvbnN0IHZvaWQgKm9wdHM9TlVMTCkgeworICAgIHJldHVybiA6OndjaGdhdCh3LCBuLCBhdHRyLCBjb2xvciwgb3B0cyk7IH0KKyAgLy8gQ2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBuZXh0IG4gY2hhcmFjdGVycyBpbiB0aGUgY3VycmVudCBsaW5lLiBJZgorICAvLyBuIGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGluIHRoZQorICAvLyBsaW5lLCB0aGUgYXR0cmlidXRlcyB3aWxsIGJlIGNoYW5nZWQgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKworICBpbnQgICAgICAgICAgICBjaGdhdChpbnQgeSwgaW50IHgsCisJCSAgICAgICBpbnQgbiwgYXR0cl90IGF0dHIsIHNob3J0IGNvbG9yLCBjb25zdCB2b2lkICpvcHRzPU5VTEwpIHsKKyAgICByZXR1cm4gOjptdndjaGdhdCh3LCB5LCB4LCBuLCBhdHRyLCBjb2xvciwgb3B0cyk7IH0KKyAgLy8gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIHRoZW4gcGVyZm9ybSBjaGdhdCgpIGFzCisgIC8vIGRlc2NyaWJlZCBhYm92ZS4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGJhY2tncm91bmQKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBjaHR5cGUgICAgICAgICBnZXRia2dkKCkgY29uc3QgeyByZXR1cm4gOjpnZXRia2dkKHcpOyB9CisgIC8vIEdldCBjdXJyZW50IGJhY2tncm91bmQgc2V0dGluZy4KKworICBpbnQgICAgICAgICAgICBia2dkKGNvbnN0IGNodHlwZSBjaCkgeyByZXR1cm4gOjp3YmtnZCh3LCBjaCk7IH0KKyAgLy8gU2V0IHRoZSBiYWNrZ3JvdW5kIHByb3BlcnR5IGFuZCBhcHBseSBpdCB0byB0aGUgd2luZG93LgorCisgIHZvaWQgICAgICAgICAgIGJrZ2RzZXQoY2h0eXBlIGNoKSB7IDo6d2JrZ2RzZXQodywgY2gpOyB9CisgIC8vIFNldCB0aGUgYmFja2dyb3VuZCBwcm9wZXJ0eS4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGJvcmRlcnMKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBpbnQgICAgICAgICAgICBib3goY2h0eXBlIHZlcnQ9MCwgY2h0eXBlICBob3I9MCkgeworICAgIHJldHVybiA6Ondib3JkZXIodywgdmVydCwgdmVydCwgaG9yLCBob3IsIDAsIDAsIDAsIDApOyB9CisgIC8vIERyYXcgYSBib3ggYXJvdW5kIHRoZSB3aW5kb3cgd2l0aCB0aGUgZ2l2ZW4gdmVydGljYWwgYW5kIGhvcml6b250YWwKKyAgLy8gZHJhd2luZyBjaGFyYWN0ZXJzLiBJZiB5b3Ugc3BlY2lmeSBhIHplcm8gYXMgY2hhcmFjdGVyLCBjdXJzZXMgd2lsbCB0cnkKKyAgLy8gdG8gZmluZCBhICJuaWNlIiBjaGFyYWN0ZXIuCisKKyAgaW50ICAgICAgICAgICAgYm9yZGVyKGNodHlwZSBsZWZ0PTAsIGNodHlwZSByaWdodD0wLAorCQkJY2h0eXBlIHRvcCA9MCwgY2h0eXBlIGJvdHRvbT0wLAorCQkJY2h0eXBlIHRvcF9sZWZ0ID0wLCBjaHR5cGUgdG9wX3JpZ2h0PTAsCisJCQljaHR5cGUgYm90dG9tX2xlZnQgPTAsIGNodHlwZSBib3R0b21fcmlnaHQ9MCkgeworICAgIHJldHVybiA6Ondib3JkZXIodywgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0b3BfbGVmdCwgdG9wX3JpZ2h0LAorCQkgICAgIGJvdHRvbV9sZWZ0LCBib3R0b21fcmlnaHQpOyB9CisgIC8vIERyYXcgYSBib3JkZXIgYXJvdW5kIHRoZSB3aW5kb3cgd2l0aCB0aGUgZ2l2ZW4gY2hhcmFjdGVycyBmb3IgdGhlCisgIC8vIHZhcmlvdXMgcGFydHMgb2YgdGhlIGJvcmRlci4gSWYgeW91IHBhc3MgemVybyBmb3IgYSBjaGFyYWN0ZXIsIGN1cnNlcworICAvLyB3aWxsIHRyeSB0byBmaW5kICJuaWNlIiBjaGFyYWN0ZXJzLgorCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gbGluZXMgYW5kIGJveGVzCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgaGxpbmUoaW50IGxlbiwgY2h0eXBlIGNoPTApIHsgcmV0dXJuIDo6d2hsaW5lKHcsIGNoLCBsZW4pOyB9CisgIC8vIERyYXcgYSBob3Jpem9udGFsIGxpbmUgb2YgbGVuIGNoYXJhY3RlcnMgd2l0aCB0aGUgZ2l2ZW4gY2hhcmFjdGVyLiBJZgorICAvLyB5b3UgcGFzcyB6ZXJvIGZvciB0aGUgY2hhcmFjdGVyLCBjdXJzZXMgd2lsbCB0cnkgdG8gZmluZCBhICJuaWNlIiBvbmUuCisKKyAgaW50ICAgICAgICAgICAgaGxpbmUoaW50IHksIGludCB4LCBpbnQgbGVuLCBjaHR5cGUgY2g9MCkgeworICAgIHJldHVybiA6Om12d2hsaW5lKHcsIHksIHgsIGNoLCBsZW4pOyB9CisgIC8vIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIGFuZCB0aGVuIGRyYXcgYSBob3Jpem9udGFsIGxpbmUuCisKKyAgaW50ICAgICAgICAgICAgdmxpbmUoaW50IGxlbiwgY2h0eXBlIGNoPTApIHsgcmV0dXJuIDo6d3ZsaW5lKHcsIGNoLCBsZW4pOyB9CisgIC8vIERyYXcgYSB2ZXJ0aWNhbCBsaW5lIG9mIGxlbiBjaGFyYWN0ZXJzIHdpdGggdGhlIGdpdmVuIGNoYXJhY3Rlci4gSWYKKyAgLy8geW91IHBhc3MgemVybyBmb3IgdGhlIGNoYXJhY3RlciwgY3Vyc2VzIHdpbGwgdHJ5IHRvIGZpbmQgYSAibmljZSIgb25lLgorCisgIGludCAgICAgICAgICAgIHZsaW5lKGludCB5LCBpbnQgeCwgaW50IGxlbiwgY2h0eXBlIGNoPTApIHsKKyAgICByZXR1cm4gOjptdnd2bGluZSh3LCB5LCB4LCBjaCwgbGVuKTsgfQorICAvLyBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgdGhlbiBkcmF3IGEgdmVydGljYWwgbGluZS4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGVyYXN1cmUKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBpbnQgICAgICAgICAgICBlcmFzZSgpIHsgcmV0dXJuIDo6d2VyYXNlKHcpOyB9CisgIC8vIEVyYXNlIHRoZSB3aW5kb3cuCisKKyAgaW50ICAgICAgICAgICAgY2xlYXIoKSB7IHJldHVybiA6OndjbGVhcih3KTsgfQorICAvLyBDbGVhciB0aGUgd2luZG93LgorCisgIGludCAgICAgICAgICAgIGNsZWFyb2soYm9vbCBiZikgeyByZXR1cm4gOjpjbGVhcm9rKHcsIGJmKTsgfQorICAvLyBTZXQvUmVzZXQgdGhlIGNsZWFyIGZsYWcuIElmIHNldCwgdGhlIG5leHQgcmVmcmVzaCgpIHdpbGwgY2xlYXIgdGhlCisgIC8vIHNjcmVlbi4KKworICBpbnQgICAgICAgICAgICBjbHJ0b2JvdCgpIHsgcmV0dXJuIDo6d2NscnRvYm90KHcpOyB9CisgIC8vIENsZWFyIHRvIHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4KKworICBpbnQgICAgICAgICAgICBjbHJ0b2VvbCgpIHsgcmV0dXJuIDo6d2NscnRvZW9sKHcpOyB9CisgIC8vIENsZWFyIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKKyAgaW50ICAgICAgICAgICAgZGVsY2goKSB7IHJldHVybiA6OndkZWxjaCh3KTsgfQorICAvLyBEZWxldGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCisKKyAgaW50ICAgICAgICAgICAgZGVsY2goaW50IHksIGludCB4KSB7IHJldHVybiA6Om12d2RlbGNoKHcsIHksIHgpOyB9CisgIC8vIE1vdmUgY3Vyc29yIHRvIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgZGVsZXRlIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlCisgIC8vIGN1cnNvci4KKworICBpbnQgICAgICAgICAgICBkZWxldGVsbigpIHsgcmV0dXJuIDo6d2luc2RlbGxuKHcsIC0xKTsgfQorICAvLyBEZWxldGUgdGhlIGN1cnJlbnQgbGluZS4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIHNjcmVlbiBjb250cm9sCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgc2Nyb2xsKGludCBhbW91bnQ9MSkgeyByZXR1cm4gOjp3c2NybCh3LCBhbW91bnQpOyB9CisgIC8vIFNjcm9sbCBhbW91bnQgbGluZXMuIElmIGFtb3VudCBpcyBwb3NpdGl2ZSwgc2Nyb2xsIHVwLCBvdGhlcndpc2UKKyAgLy8gc2Nyb2xsIGRvd24uCisKKyAgaW50ICAgICAgICAgICAgc2Nyb2xsb2soYm9vbCBiZikgeyByZXR1cm4gOjpzY3JvbGxvayh3LCBiZik7IH0KKyAgLy8gSWYgYmYgaXMgVFJVRSwgd2luZG93IHNjcm9sbHMgaWYgY3Vyc29yIGlzIG1vdmVkIG9mZiB0aGUgYm90dG9tCisgIC8vIGVkZ2Ugb2YgdGhlIHdpbmRvdyBvciBhIHNjcm9sbGluZyByZWdpb24sIG90aGVyd2lzZSB0aGUgY3Vyc29yIGlzIGxlZnQKKyAgLy8gYXQgdGhlIGJvdHRvbSBsaW5lLgorCisgIGludCAgICAgICAgICAgIHNldHNjcnJlZyhpbnQgZnJvbSwgaW50IHRvKSB7CisgICAgcmV0dXJuIDo6d3NldHNjcnJlZyh3LCBmcm9tLCB0byk7IH0KKyAgLy8gRGVmaW5lIGEgc29mdCBzY3JvbGxpbmcgcmVnaW9uLgorCisgIGludCAgICAgICAgICAgIGlkbG9rKGJvb2wgYmYpIHsgcmV0dXJuIDo6aWRsb2sodywgYmYpOyB9CisgIC8vIElmIGJmIGlzIFRSVUUsIHVzZSBpbnNlcnQvZGVsZXRlIGxpbmUgaGFyZHdhcmUgc3VwcG9ydCBpZiBwb3NzaWJsZS4KKyAgLy8gT3RoZXJ3aXNlIGRvIGl0IGluIHNvZnR3YXJlLgorCisgIHZvaWQgICAgICAgICAgIGlkY29rKGJvb2wgYmYpIHsgOjppZGNvayh3LCBiZik7IH0KKyAgLy8gSWYgYmYgaXMgVFJVRSwgdXNlIGluc2VydC9kZWxldGUgY2hhcmFjdGVyIGhhcmR3YXJlIHN1cHBvcnQgaWYgcG9zc2libGUuCisgIC8vIE90aGVyd2lzZSBkbyBpdCBpbiBzb2Z0d2FyZS4KKworICBpbnQgICAgICAgICAgICB0b3VjaGxpbmUoaW50IHMsIGludCBjKSB7IHJldHVybiA6OnRvdWNobGluZSh3LCBzLCBjKTsgfQorICAvLyBNYXJrIHRoZSBnaXZlbiBsaW5lcyBhcyBtb2RpZmllZC4KKworICBpbnQgICAgICAgICAgICB0b3VjaHdpbigpICAgeyByZXR1cm4gOjp3dG91Y2hsbih3LCAwLCBoZWlnaHQoKSwgMSk7IH0KKyAgLy8gTWFyayB0aGUgd2hvbGUgd2luZG93IGFzIG1vZGlmaWVkLgorCisgIGludCAgICAgICAgICAgIHVudG91Y2h3aW4oKSB7IHJldHVybiA6Ond0b3VjaGxuKHcsIDAsIGhlaWdodCgpLCAwKTsgfQorICAvLyBNYXJrIHRoZSB3aG9sZSB3aW5kb3cgYXMgdW5tb2RpZmllZC4KKworICBpbnQgICAgICAgICAgICB0b3VjaGxuKGludCBzLCBpbnQgY250LCBib29sIGNoYW5nZWQ9VFJVRSkgeworICAgIHJldHVybiA6Ond0b3VjaGxuKHcsIHMsIGNudCwgc3RhdGljX2Nhc3Q8aW50PihjaGFuZ2VkID8gMSA6IDApKTsgfQorICAvLyBNYXJrIGNudCBsaW5lcyBiZWdpbm5pbmcgZnJvbSBsaW5lIHMgYXMgY2hhbmdlZCBvciB1bmNoYW5nZWQsIGRlcGVuZGluZworICAvLyBvbiB0aGUgdmFsdWUgb2YgdGhlIGNoYW5nZWQgZmxhZy4KKworICBib29sICAgICAgICAgICBpc19saW5ldG91Y2hlZChpbnQgbGluZSkgY29uc3QgeworICAgIHJldHVybiAoOjppc19saW5ldG91Y2hlZCh3LCBsaW5lKSA/IFRSVUU6RkFMU0UpOyB9CisgIC8vIFJldHVybiBUUlVFIGlmIGxpbmUgaXMgbWFya2VkIGFzIGNoYW5nZWQsIEZBTFNFIG90aGVyd2lzZQorCisgIGJvb2wgICAgICAgICAgIGlzX3dpbnRvdWNoZWQoKSBjb25zdCB7CisgICAgcmV0dXJuICg6OmlzX3dpbnRvdWNoZWQodykgPyBUUlVFOkZBTFNFKTsgfQorICAvLyBSZXR1cm4gVFJVRSBpZiB3aW5kb3cgaXMgbWFya2VkIGFzIGNoYW5nZWQsIEZBTFNFIG90aGVyd2lzZQorCisgIGludCAgICAgICAgICAgIGxlYXZlb2soYm9vbCBiZikgeyByZXR1cm4gOjpsZWF2ZW9rKHcsIGJmKTsgfQorICAvLyBJZiBiZiBpcyBUUlVFLCBjdXJzZXMgd2lsbCBsZWF2ZSB0aGUgY3Vyc29yIGFmdGVyIGFuIHVwZGF0ZSB3aGVyZWV2ZXIKKyAgLy8gaXQgaXMgYWZ0ZXIgdGhlIHVwZGF0ZS4KKworICBpbnQgICAgICAgICAgICByZWRyYXdsbihpbnQgZnJvbSwgaW50IG4pIHsgcmV0dXJuIDo6d3JlZHJhd2xuKHcsIGZyb20sIG4pOyB9CisgIC8vIFJlZHJhdyBuIGxpbmVzIHN0YXJ0aW5nIGZyb20gdGhlIHJlcXVlc3RlZCBsaW5lCisKKyAgaW50ICAgICAgICAgICAgcmVkcmF3d2luKCkgeyByZXR1cm4gOjp3cmVkcmF3bG4odywgMCwgaGVpZ2h0KCkpOyB9CisgIC8vIFJlZHJhdyB0aGUgd2hvbGUgd2luZG93CisKKyAgaW50ICAgICAgICAgICAgZG91cGRhdGUoKSAgeyByZXR1cm4gOjpkb3VwZGF0ZSgpOyB9CisgIC8vIERvIGFsbCBvdXRwdXRzIHRvIG1ha2UgdGhlIHBoeXNpY2FsIHNjcmVlbiBsb29raW5nIGxpa2UgdGhlIHZpcnR1YWwgb25lCisKKyAgdm9pZCAgICAgICAgICAgc3luY2Rvd24oKSAgeyA6OndzeW5jZG93bih3KTsgfQorICAvLyBQcm9wYWdhdGUgdGhlIGNoYW5nZXMgZG93biB0byBhbGwgZGVzY2VuZGFudCB3aW5kb3dzCisKKyAgdm9pZCAgICAgICAgICAgc3luY3VwKCkgICAgeyA6OndzeW5jdXAodyk7IH0KKyAgLy8gUHJvcGFnYXRlIHRoZSBjaGFuZ2VzIHVwIGluIHRoZSBoaWVyYXJjaHkKKworICB2b2lkICAgICAgICAgICBjdXJzeW5jdXAoKSB7IDo6d2N1cnN5bmN1cCh3KTsgfQorICAvLyBQb3NpdGlvbiB0aGUgY3Vyc29yIGluIGFsbCBhbmNlc3RvciB3aW5kb3dzIGNvcnJlc3BvbmRpbmcgdG8gb3VyIHNldHRpbmcKKworICBpbnQgICAgICAgICAgICBzeW5jb2soYm9vbCBiZikgeyByZXR1cm4gOjpzeW5jb2sodywgYmYpOyB9CisgIC8vIElmIGNhbGxlZCB3aXRoIGJmPVRSVUUsIHN5bmN1cCgpIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgd2luZG93IGlzIGNoYW5nZWQKKworI2lmbmRlZiBfbm9fZmx1c2hvaworICBpbnQgICAgICAgICAgICBmbHVzaG9rKGJvb2wgYmYpIHsgcmV0dXJuIDo6Zmx1c2hvayh3LCBiZik7IH0KKyNlbmRpZgorCisgIHZvaWQgICAgICAgICAgIGltbWVkb2soYm9vbCBiZikgeyA6OmltbWVkb2sodywgYmYpOyB9CisgIC8vIElmIGNhbGxlZCB3aXRoIGJmPVRSVUUsIGFueSBjaGFuZ2UgaW4gdGhlIHdpbmRvdyB3aWxsIGNhdXNlIGFuCisgIC8vIGF1dG9tYXRpYyBpbW1lZGlhdGUgcmVmcmVzaCgpCisKKyAgaW50ICAgICAgICAgICAgaW50cmZsdXNoKGJvb2wgYmYpIHsgcmV0dXJuIDo6aW50cmZsdXNoKHcsIGJmKTsgfQorCisgIGludCAgICAgICAgICAgIGtleXBhZChib29sIGJmKSB7IHJldHVybiA6OmtleXBhZCh3LCBiZik7IH0KKyAgLy8gSWYgY2FsbGVkIHdpdGggYmY9VFJVRSwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgaW50ZXJwcmV0IGZ1bmN0aW9uIGtleXMuCisKKyAgaW50ICAgICAgICAgICAgbm9kZWxheShib29sIGJmKSB7IHJldHVybiA6Om5vZGVsYXkodywgYmYpOyB9CisKKyAgaW50ICAgICAgICAgICAgbWV0YShib29sIGJmKSB7IHJldHVybiA6Om1ldGEodywgYmYpOyB9CisgIC8vIElmIGNhbGxlZCB3aXRoIGJmPVRSVUUsIGtleXMgbWF5IGdlbmVyYXRlIDgtQml0IGNoYXJhY3RlcnMuIE90aGVyd2lzZQorICAvLyA3LUJpdCBjaGFyYWN0ZXJzIGFyZSBnZW5lcmF0ZWQuCisKKyAgaW50ICAgICAgICAgICAgc3RhbmRvdXQoKSB7IHJldHVybiA6OndzdGFuZG91dCh3KTsgfQorICAvLyBFbmFibGUgInN0YW5kb3V0IiBhdHRyaWJ1dGVzCisKKyAgaW50ICAgICAgICAgICAgc3RhbmRlbmQoKSB7IHJldHVybiA6OndzdGFuZGVuZCh3KTsgfQorICAvLyBEaXNhYmxlICJzdGFuZG91dCIgYXR0cmlidXRlcworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gVGhlIG5leHQgdHdvIGFyZSB2aXJ0dWFsLCBiZWNhdXNlIHdlIHJlZGVmaW5lIHRoZW0gaW4gdGhlCisgIC8vIE5DdXJzZXNQYW5lbCBjbGFzcy4KKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB2aXJ0dWFsIGludCAgICByZWZyZXNoKCkgeyByZXR1cm4gOjp3cmVmcmVzaCh3KTsgfQorICAvLyBQcm9wYWdhdGUgdGhlIGNoYW5nZXMgaW4gdGhpcyB3aW5kb3cgdG8gdGhlIHZpcnR1YWwgc2NyZWVuIGFuZCBjYWxsCisgIC8vIGRvdXBkYXRlKCkuIFRoaXMgaXMgcmVkZWZpbmVkIGluIE5DdXJzZXNQYW5lbC4KKworICB2aXJ0dWFsIGludCAgICBub3V0cmVmcmVzaCgpIHsgcmV0dXJuIDo6d25vdXRyZWZyZXNoKHcpOyB9CisgIC8vIFByb3BhZ2F0ZSB0aGUgY2hhbmdlcyBpbiB0aGlzIHdpbmRvdyB0byB0aGUgdmlydHVhbCBzY3JlZW4uIFRoaXMgaXMKKyAgLy8gcmVkZWZpbmVkIGluIE5DdXJzZXNQYW5lbC4KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIG11bHRpcGxlIHdpbmRvdyBjb250cm9sCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgaW50ICAgICAgICAgICAgb3ZlcmxheShOQ3Vyc2VzV2luZG93JiB3aW4pIHsKKyAgICByZXR1cm4gOjpvdmVybGF5KHcsIHdpbi53KTsgfQorICAvLyBPdmVybGF5IHRoaXMgd2luZG93IG92ZXIgd2luLgorCisgIGludCAgICAgICAgICAgIG92ZXJ3cml0ZShOQ3Vyc2VzV2luZG93JiB3aW4pIHsKKyAgICByZXR1cm4gOjpvdmVyd3JpdGUodywgd2luLncpOyB9CisgIC8vIE92ZXJ3cml0ZSB3aW4gd2l0aCB0aGlzIHdpbmRvdy4KKworICBpbnQgICAgICAgICAgICBjb3B5d2luKE5DdXJzZXNXaW5kb3cmIHdpbiwKKwkJCSBpbnQgc21pbnJvdywgaW50IHNtaW5jb2wsCisJCQkgaW50IGRtaW5yb3csIGludCBkbWluY29sLAorCQkJIGludCBkbWF4cm93LCBpbnQgZG1heGNvbCwgYm9vbCBvdmVybGF5d2luPVRSVUUpIHsKKyAgICByZXR1cm4gOjpjb3B5d2luKHcsIHdpbi53LCBzbWlucm93LCBzbWluY29sLCBkbWlucm93LCBkbWluY29sLAorCQkgICAgIGRtYXhyb3csIGRtYXhjb2wsIHN0YXRpY19jYXN0PGludD4ob3ZlcmxheXdpbiA/IDEgOiAwKSk7IH0KKyAgLy8gT3ZlcmxheSBvciBvdmVyd3JpdGUgdGhlIHJlY3RhbmdsZSBpbiB3aW4gZ2l2ZW4gYnkgZG1pbnJvdyxkbWluY29sLAorICAvLyBkbWF4cm93LGRtYXhjb2wgd2l0aCB0aGUgcmVjdGFuZ2xlIGluIHRoaXMgd2luZG93IGJlZ2lubmluZyBhdAorICAvLyBzbWlucm93LHNtaW5jb2wuCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBFeHRlbmRlZCBmdW5jdGlvbnMKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2lmIGRlZmluZWQoTkNVUlNFU19FWFRfRlVOQ1MpICYmIChOQ1VSU0VTX0VYVF9GVU5DUyAhPSAwKQorICBpbnQgICAgICAgICAgICB3cmVzaXplKGludCBuZXdMaW5lcywgaW50IG5ld0NvbHVtbnMpIHsKKyAgICByZXR1cm4gOjp3cmVzaXplKHcsIG5ld0xpbmVzLCBuZXdDb2x1bW5zKTsgfQorI2VuZGlmCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBNb3VzZSByZWxhdGVkCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgYm9vbCBoYXNfbW91c2UoKSBjb25zdDsKKyAgLy8gUmV0dXJuIFRSVUUgaWYgdGVybWluYWwgc3VwcG9ydHMgYSBtb3VzZSwgRkFMU0Ugb3RoZXJ3aXNlCisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyB0cmF2ZXJzYWwgc3VwcG9ydAorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIE5DdXJzZXNXaW5kb3cqICBjaGlsZCgpIHsgcmV0dXJuIHN1YndpbnM7IH0KKyAgLy8gR2V0IHRoZSBmaXJzdCBjaGlsZCB3aW5kb3cuCisKKyAgTkN1cnNlc1dpbmRvdyogIHNpYmxpbmcoKSB7IHJldHVybiBzaWI7IH0KKyAgLy8gR2V0IHRoZSBuZXh0IGNoaWxkIG9mIG15IHBhcmVudC4KKworICBOQ3Vyc2VzV2luZG93KiAgcGFyZW50KCkgeyByZXR1cm4gcGFyOyB9CisgIC8vIEdldCBteSBwYXJlbnQuCisKKyAgYm9vbCBpc0Rlc2NlbmRhbnQoTkN1cnNlc1dpbmRvdyYgd2luKTsKKyAgLy8gUmV0dXJuIFRSVUUgaWYgd2luIGlzIGEgZGVzY2VuZGFudCBvZiB0aGlzLgorfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2UgbGVhdmUgdGhpcyBoZXJlIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzQ29sb3JXaW5kb3cgOiBwdWJsaWMgTkN1cnNlc1dpbmRvdworeworcHVibGljOgorICBOQ3Vyc2VzQ29sb3JXaW5kb3coV0lORE9XKiAmd2luZG93KSAgIC8vIHVzZWZ1bCBvbmx5IGZvciBzdGRzY3IKKyAgICA6IE5DdXJzZXNXaW5kb3cod2luZG93KSB7CisgICAgICB1c2VDb2xvcnMoKTsgfQorCisgIE5DdXJzZXNDb2xvcldpbmRvdyhpbnQgbmxpbmVzLCAgICAgICAgLy8gbnVtYmVyIG9mIGxpbmVzCisJCSAgICAgaW50IG5jb2xzLCAgICAgICAgIC8vIG51bWJlciBvZiBjb2x1bW5zCisJCSAgICAgaW50IGJlZ2luX3ksICAgICAgIC8vIGxpbmUgb3JpZ2luCisJCSAgICAgaW50IGJlZ2luX3gpICAgICAgIC8vIGNvbCBvcmlnaW4KKyAgICA6IE5DdXJzZXNXaW5kb3cobmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCkgeworICAgICAgdXNlQ29sb3JzKCk7IH0KKworICBOQ3Vyc2VzQ29sb3JXaW5kb3coTkN1cnNlc1dpbmRvdyYgcGFyZW50V2luLC8vIHBhcmVudCB3aW5kb3cKKwkJICAgICBpbnQgbmxpbmVzLCAgICAgICAgLy8gbnVtYmVyIG9mIGxpbmVzCisJCSAgICAgaW50IG5jb2xzLCAgICAgICAgIC8vIG51bWJlciBvZiBjb2x1bW5zCisJCSAgICAgaW50IGJlZ2luX3ksICAgICAgIC8vIGFic29sdXRlIG9yIHJlbGF0aXZlCisJCSAgICAgaW50IGJlZ2luX3gsICAgICAgIC8vICAgb3JpZ2luczoKKwkJICAgICBjaGFyIGFic3JlbCA9ICdhJykgLy8gaWYgYGEnLCBieSAmIGJ4IGFyZQorICAgIDogTkN1cnNlc1dpbmRvdyhwYXJlbnRXaW4sCisJCSAgICBubGluZXMsIG5jb2xzLAkvLyBhYnNvbHV0ZSBzY3JlZW4gcG9zLAorCQkgICAgYmVnaW5feSwgYmVnaW5feCwgICAvLyBlbHNlIGlmIGByJywgdGhleSBhcmUKKwkJICAgIGFic3JlbCApIHsgICAgICAgICAgLy8gcmVsYXRpdmUgdG8gcGFyIG9yaWdpbgorICAgICAgdXNlQ29sb3JzKCk7IH0KK307CisKKy8vIFRoZXNlIGVudW0gZGVmaW5pdGlvbnMgcmVhbGx5IGJlbG9uZyBpbnNpZGUgdGhlIE5DdXJzZXNQYWQgY2xhc3MsIGJ1dCBvbmx5CisvLyByZWNlbnQgY29tcGlsZXJzIHN1cHBvcnQgdGhhdCBmZWF0dXJlLgorCisgIHR5cGVkZWYgZW51bSB7CisgICAgUkVRX1BBRF9SRUZSRVNIID0gS0VZX01BWCArIDEsCisgICAgUkVRX1BBRF9VUCwKKyAgICBSRVFfUEFEX0RPV04sCisgICAgUkVRX1BBRF9MRUZULAorICAgIFJFUV9QQURfUklHSFQsCisgICAgUkVRX1BBRF9FWElUCisgIH0gUGFkX1JlcXVlc3Q7CisKKyAgY29uc3QgUGFkX1JlcXVlc3QgUEFEX0xPVyAgPSBSRVFfUEFEX1JFRlJFU0g7ICAgLy8gbG93ZXN0ICBvcC1jb2RlCisgIGNvbnN0IFBhZF9SZXF1ZXN0IFBBRF9ISUdIID0gUkVRX1BBRF9FWElUOyAgICAgIC8vIGhpZ2hlc3Qgb3AtY29kZQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYWQgU3VwcG9ydC4gV2UgYWxsb3cgYW4gYXNzb2NpYXRpb24gb2YgYSBwYWQgd2l0aCBhICJyZWFsIiB3aW5kb3cKKy8vIHRocm91Z2ggd2hpY2ggdGhlIHBhZCBtYXkgYmUgdmlld2VkLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1BhZCA6IHB1YmxpYyBOQ3Vyc2VzV2luZG93Cit7Citwcml2YXRlOgorICBOQ3Vyc2VzV2luZG93KiB2aWV3V2luOyAgICAgICAvLyB0aGUgInZpZXdwb3J0IiB3aW5kb3cKKyAgTkN1cnNlc1dpbmRvdyogdmlld1N1YjsgICAgICAgLy8gdGhlICJ2aWV3cG9ydCIgc3Vid2luZG93CisKKyAgaW50IGhfZ3JpZHNpemUsIHZfZ3JpZHNpemU7CisKK3Byb3RlY3RlZDoKKyAgaW50IG1pbl9yb3csIG1pbl9jb2w7ICAgICAgICAgLy8gdG9wIGxlZnQgcm93L2NvbCBvZiB0aGUgcGFkcyBkaXNwbGF5IGFyZWEKKworICBOQ3Vyc2VzV2luZG93KiBXaW4odm9pZCkgY29uc3QgeworICAgIC8vIEdldCB0aGUgd2luZG93IGludG8gd2hpY2ggdGhlIHBhZCBzaG91bGQgYmUgY29waWVkIChpZiBhbnkpCisgICAgcmV0dXJuICh2aWV3U3ViP3ZpZXdTdWI6KHZpZXdXaW4/dmlld1dpbjowKSk7CisgIH0KKworICBOQ3Vyc2VzV2luZG93KiBnZXRXaW5kb3codm9pZCkgY29uc3QgeworICAgIHJldHVybiB2aWV3V2luOworICB9CisKKyAgTkN1cnNlc1dpbmRvdyogZ2V0U3ViV2luZG93KHZvaWQpIGNvbnN0IHsKKyAgICByZXR1cm4gdmlld1N1YjsKKyAgfQorCisgIHZpcnR1YWwgaW50IGRyaXZlciAoaW50IGtleSk7ICAgICAgLy8gVmlydHVhbGl6ZSBrZXlzdHJva2Uga2V5CisgIC8vIFRoZSBkcml2ZXIgdHJhbnNsYXRlcyB0aGUga2V5c3Ryb2tlIGMgaW50byBhbiBQYWRfUmVxdWVzdAorCisgIHZpcnR1YWwgdm9pZCBPblVua25vd25PcGVyYXRpb24oaW50IHBhZF9yZXEpIHsKKyAgICA6OmJlZXAoKTsKKyAgfQorICAvLyBUaGlzIGlzIGNhbGxlZCBpZiB0aGUgZHJpdmVyIHJldHVybnMgYW4gdW5rbm93biBvcC1jb2RlCisKKyAgdmlydHVhbCB2b2lkIE9uTmF2aWdhdGlvbkVycm9yKGludCBwYWRfcmVxKSB7CisgICAgOjpiZWVwKCk7CisgIH0KKyAgLy8gVGhpcyBpcyBjYWxsZWQgaWYgYSBuYXZpZ2F0aW9uIHJlcXVlc3QgY291bGRuJ3QgYmUgc2F0aXNmaWVkCisKKyAgdmlydHVhbCB2b2lkIE9uT3BlcmF0aW9uKGludCBwYWRfcmVxKSB7CisgIH07CisgIC8vIE9uT3BlcmF0aW9uIGlzIGNhbGxlZCBpZiBhIFBhZF9PcGVyYXRpb24gd2FzIGV4ZWN1dGVkIGFuZCBqdXN0IGJlZm9yZQorICAvLyB0aGUgcmVmcmVzaCgpIG9wZXJhdGlvbiBpcyBkb25lLgorCitwdWJsaWM6CisgIE5DdXJzZXNQYWQoaW50IG5saW5lcywgaW50IG5jb2xzKTsKKyAgLy8gY3JlYXRlIGEgcGFkIHdpdGggdGhlIGdpdmVuIHNpemUKKworICBOQ3Vyc2VzUGFkJiBvcGVyYXRvcj0oY29uc3QgTkN1cnNlc1BhZCYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgICBOQ3Vyc2VzV2luZG93OjpvcGVyYXRvcj0ocmhzKTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc1BhZChjb25zdCBOQ3Vyc2VzUGFkJiByaHMpCisgICAgOiBOQ3Vyc2VzV2luZG93KHJocyksCisgICAgICB2aWV3V2luKHJocy52aWV3V2luKSwKKyAgICAgIHZpZXdTdWIocmhzLnZpZXdTdWIpLAorICAgICAgaF9ncmlkc2l6ZShyaHMuaF9ncmlkc2l6ZSksCisgICAgICB2X2dyaWRzaXplKHJocy52X2dyaWRzaXplKSwKKyAgICAgIG1pbl9yb3cocmhzLm1pbl9yb3cpLAorICAgICAgbWluX2NvbChyaHMubWluX2NvbCkKKyAgeworICB9CisKKyAgdmlydHVhbCB+TkN1cnNlc1BhZCgpIHt9CisKKyAgaW50IGVjaG9jaGFyKGNvbnN0IGNodHlwZSBjaCkgeyByZXR1cm4gOjpwZWNob2NoYXIodywgY2gpOyB9CisgIC8vIFB1dCB0aGUgYXR0cmlidXRlZCBjaGFyYWN0ZXIgb250byB0aGUgcGFkIGFuZCBpbW1lZGlhdGVseSBkbyBhCisgIC8vIHByZWZyZXNoKCkuCisKKyAgaW50IHJlZnJlc2goKTsKKyAgLy8gSWYgYSB2aWV3cG9ydCBpcyBkZWZpbmVkIHRoZSBwYWQgaXMgZGlzcGxheWVkIGluIHRoaXMgd2luZG93LCBvdGhlcndpc2UKKyAgLy8gdGhpcyBpcyBhIG5vb3AuCisKKyAgaW50IHJlZnJlc2goaW50IHBtaW5yb3csIGludCBwbWluY29sLAorCSAgICAgIGludCBzbWlucm93LCBpbnQgc21pbmNvbCwKKwkgICAgICBpbnQgc21heHJvdywgaW50IHNtYXhjb2wpIHsKKyAgICByZXR1cm4gOjpwcmVmcmVzaCh3LCBwbWlucm93LCBwbWluY29sLAorCQkgICAgICBzbWlucm93LCBzbWluY29sLCBzbWF4cm93LCBzbWF4Y29sKTsKKyAgfQorICAvLyBUaGUgY29vcmRpbmF0ZXMgc21pbnJvdyxzbWluY29sLHNtYXhyb3csc21heGNvbCBkZXNjcmliZSBhIHJlY3RhbmdsZQorICAvLyBvbiB0aGUgc2NyZWVuLiA8Yj5yZWZyZXNoPC9iPiBjb3BpZXMgYSByZWN0YW5nbGUgb2YgdGhpcyBzaXplIGJlZ2lubmluZworICAvLyB3aXRoIHRvcCBsZWZ0IGNvcm5lciBwbWlucm93LHBtaW5jb2wgb250byB0aGUgc2NyZWVuIGFuZCBjYWxscyBkb3VwZGF0ZSgpLgorCisgIGludCBub3V0cmVmcmVzaCgpOworICAvLyBJZiBhIHZpZXdwb3J0IGlzIGRlZmluZWQgdGhlIHBhZCBpcyBkaXNwbGF5ZWQgaW4gdGhpcyB3aW5kb3csIG90aGVyd2lzZQorICAvLyB0aGlzIGlzIGEgbm9vcC4KKworICBpbnQgbm91dHJlZnJlc2goaW50IHBtaW5yb3csIGludCBwbWluY29sLAorCQkgIGludCBzbWlucm93LCBpbnQgc21pbmNvbCwKKwkJICBpbnQgc21heHJvdywgaW50IHNtYXhjb2wpIHsKKyAgICByZXR1cm4gOjpwbm91dHJlZnJlc2godywgcG1pbnJvdywgcG1pbmNvbCwKKwkJCSAgc21pbnJvdywgc21pbmNvbCwgc21heHJvdywgc21heGNvbCk7CisgIH0KKyAgLy8gRG9lcyB0aGUgc2FtZSBhcyByZWZyZXNoKCkgYnV0IHdpdGhvdXQgY2FsbGluZyBkb3VwZGF0ZSgpLgorCisgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3coTkN1cnNlc1dpbmRvdyYgdmlldywgaW50IHZfZ3JpZCA9IDEsIGludCBoX2dyaWQgPSAxKTsKKyAgLy8gQWRkIHRoZSB3aW5kb3cgInZpZXciIGFzIHZpZXdpbmcgd2luZG93IHRvIHRoZSBwYWQuCisKKyAgdmlydHVhbCB2b2lkIHNldFN1YldpbmRvdyhOQ3Vyc2VzV2luZG93JiBzdWIpOworICAvLyBVc2UgdGhlIHN1YndpbmRvdyAic3ViIiBvZiB0aGUgdmlld3BvcnQgd2luZG93IGZvciB0aGUgYWN0dWFsIHZpZXdpbmcuCisgIC8vIFRoZSBmdWxsIHZpZXdwb3J0IHdpbmRvdyBpcyB1c3VhbGx5IHVzZWQgdG8gcHJvdmlkZSBzb21lIGRlY29yYXRpb25zCisgIC8vIGxpa2UgZnJhbWVzLCB0aXRsZXMgZXRjLgorCisgIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpICh2b2lkKTsKKyAgLy8gUGVyZm9ybSBQYWQncyBvcGVyYXRpb24KK307CisKKy8vIEEgRnJhbWVkUGFkIGlzIGNvbnN0cnVjdGVkIGFsd2F5cyB3aXRoIGEgdmlld3BvcnQgd2luZG93LiBUaGlzIHZpZXdwb3J0CisvLyB3aWxsIGJlIGZyYW1lZCAoYnkgYSBib3goKSBjb21tYW5kKSBhbmQgdGhlIGludGVyaW9yIG9mIHRoZSBib3ggaXMgdGhlCisvLyB2aWV3cG9ydCBzdWJ3aW5kb3cuIE9uIHRoZSBmcmFtZSB3ZSBkaXNwbGF5IHNjcm9sbGJhciBzbGlkZXJzLgorY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0ZyYW1lZFBhZCA6IHB1YmxpYyBOQ3Vyc2VzUGFkCit7Citwcm90ZWN0ZWQ6CisgIHZpcnR1YWwgdm9pZCBPbk9wZXJhdGlvbihpbnQgcGFkX3JlcSk7CisKK3B1YmxpYzoKKyAgTkN1cnNlc0ZyYW1lZFBhZChOQ3Vyc2VzV2luZG93JiB3aW4sIGludCBubGluZXMsIGludCBuY29scywKKwkJICAgaW50IHZfZ3JpZCA9IDEsIGludCBoX2dyaWQgPSAxKQorICAgIDogTkN1cnNlc1BhZChubGluZXMsIG5jb2xzKSB7CisgICAgTkN1cnNlc1BhZDo6c2V0V2luZG93KHdpbiwgdl9ncmlkLCBoX2dyaWQpOworICAgIE5DdXJzZXNQYWQ6OnNldFN1YldpbmRvdygqKG5ldyBOQ3Vyc2VzV2luZG93KHdpbikpKTsKKyAgfQorICAvLyBDb25zdHJ1Y3QgdGhlIEZyYW1lZFBhZCB3aXRoIHRoZSBnaXZlbiBXaW5kb3cgd2luIGFzIHZpZXdwb3J0LgorCisgIHZpcnR1YWwgfk5DdXJzZXNGcmFtZWRQYWQoKSB7CisgICAgZGVsZXRlIGdldFN1YldpbmRvdygpOworICB9CisKKyAgdm9pZCBzZXRXaW5kb3coTkN1cnNlc1dpbmRvdyYgdmlldywgaW50IHZfZ3JpZCA9IDEsIGludCBoX2dyaWQgPSAxKSB7CisgICAgZXJyX2hhbmRsZXIoIk9wZXJhdGlvbiBub3QgYWxsb3dlZCIpOworICB9CisgIC8vIERpc2FibGUgdGhpcyBjYWxsOyB0aGUgdmlld3BvcnQgaXMgYWxyZWFkeSBkZWZpbmVkCisKKyAgdm9pZCBzZXRTdWJXaW5kb3coTkN1cnNlc1dpbmRvdyYgc3ViKSB7CisgICAgZXJyX2hhbmRsZXIoIk9wZXJhdGlvbiBub3QgYWxsb3dlZCIpOworICB9CisgIC8vIERpc2FibGUgdGhpcyBjYWxsOyB0aGUgdmlld3BvcnQgc3Vid2luZG93IGlzIGFscmVhZHkgZGVmaW5lZAorCit9OworCisjZW5kaWYgLyogTkNVUlNFU19DVVJTRVNXX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2N1cnNzbGsuY2MgYi9uY3Vyc2VzLTUuNy9jKysvY3Vyc3Nsay5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmJjOWRhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL2N1cnNzbGsuY2MKQEAgLTAsMCArMSwxMzIgQEAKKy8vICogdGhpcyBpcyBmb3IgbWFraW5nIGVtYWNzIGhhcHB5OiAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJjdXJzc2xrLmgiCisjaW5jbHVkZSAiY3Vyc2VzYXBwLmgiCisKK01PRFVMRV9JRCgiJElkOiBjdXJzc2xrLmNjLHYgMS4xNSAyMDA1LzA4LzA2IDIyOjEyOjM2IHRvbSBFeHAgJCIpCisKK1NvZnRfTGFiZWxfS2V5X1NldDo6U29mdF9MYWJlbF9LZXkmCisgIFNvZnRfTGFiZWxfS2V5X1NldDo6U29mdF9MYWJlbF9LZXk6Om9wZXJhdG9yPShjaGFyICp0ZXh0KQoreworICBkZWxldGVbXSBsYWJlbDsKKyAgbGFiZWwgPSBuZXcgY2hhclsxICsgOjpzdHJsZW4odGV4dCldOworICAoOjpzdHJjcHkpKGxhYmVsLHRleHQpOworICByZXR1cm4gKnRoaXM7Cit9CisKK2xvbmcgU29mdF9MYWJlbF9LZXlfU2V0Ojpjb3VudCAgICAgID0gMEw7CitpbnQgIFNvZnRfTGFiZWxfS2V5X1NldDo6bnVtX2xhYmVscyA9IDA7CisKK1NvZnRfTGFiZWxfS2V5X1NldDo6TGFiZWxfTGF5b3V0CisgIFNvZnRfTGFiZWxfS2V5X1NldDo6Zm9ybWF0ID0gTm9uZTsKKwordm9pZCBTb2Z0X0xhYmVsX0tleV9TZXQ6OmluaXQoKQoreworICBzbGtfYXJyYXkgPSBuZXcgU29mdF9MYWJlbF9LZXlbbnVtX2xhYmVsc107CisgIGZvcihpbnQgaT0wOyBpIDwgbnVtX2xhYmVsczsgaSsrKSB7CisgICAgc2xrX2FycmF5W2ldLm51bSA9IGkrMTsKKyAgfQorICBiX2F0dHJJbml0ID0gRkFMU0U7Cit9CisKK1NvZnRfTGFiZWxfS2V5X1NldDo6U29mdF9MYWJlbF9LZXlfU2V0KCkKKyAgOiBiX2F0dHJJbml0KEZBTFNFKSwKKyAgICBzbGtfYXJyYXkoTlVMTCkKK3sKKyAgaWYgKGZvcm1hdD09Tm9uZSkKKyAgICBFcnJvcigiTm8gZGVmYXVsdCBTTEsgbGF5b3V0Iik7CisgIGluaXQoKTsKK30KKworU29mdF9MYWJlbF9LZXlfU2V0OjpTb2Z0X0xhYmVsX0tleV9TZXQoU29mdF9MYWJlbF9LZXlfU2V0OjpMYWJlbF9MYXlvdXQgZm10KQorICA6IGJfYXR0ckluaXQoRkFMU0UpLAorICAgIHNsa19hcnJheShOVUxMKQoreworICBpZiAoZm10PT1Ob25lKQorICAgIEVycm9yKCJJbnZhbGlkIFNMSyBMYXlvdXQiKTsKKyAgaWYgKGNvdW50Kys9PTApIHsKKyAgICBmb3JtYXQgPSBmbXQ7CisgICAgaWYgKEVSUiA9PSA6OnNsa19pbml0KHN0YXRpY19jYXN0PGludD4oZm10KSkpCisgICAgICBFcnJvcigic2xrX2luaXQiKTsKKyAgICBudW1fbGFiZWxzID0gKGZtdD49UENfU3R5bGU/MTI6OCk7CisgIH0KKyAgZWxzZSBpZiAoZm10IT1mb3JtYXQpCisgICAgRXJyb3IoIkFsbCBTTEtzIG11c3QgaGF2ZSBzYW1lIGxheW91dCIpOworICBpbml0KCk7Cit9CisKK1NvZnRfTGFiZWxfS2V5X1NldDo6flNvZnRfTGFiZWxfS2V5X1NldCgpIHsKKyAgaWYgKCE6OmlzZW5kd2luKCkpCisgICAgY2xlYXIoKTsKKyAgZGVsZXRlW10gc2xrX2FycmF5OworICBjb3VudC0tOworfQorCitTb2Z0X0xhYmVsX0tleV9TZXQ6OlNvZnRfTGFiZWxfS2V5JiBTb2Z0X0xhYmVsX0tleV9TZXQ6Om9wZXJhdG9yW10oaW50IGkpIHsKKyAgaWYgKGk8MSB8fCBpPm51bV9sYWJlbHMpCisgICAgRXJyb3IoIkludmFsaWQgTGFiZWwgaW5kZXgiKTsKKyAgcmV0dXJuIHNsa19hcnJheVtpLTFdOworfQorCit2b2lkIFNvZnRfTGFiZWxfS2V5X1NldDo6YWN0aXZhdGVfbGFiZWwoaW50IGksIGJvb2wgYmYpIHsKKyAgaWYgKCFiX2F0dHJJbml0KSB7CisgICAgTkN1cnNlc0FwcGxpY2F0aW9uKiBBID0gTkN1cnNlc0FwcGxpY2F0aW9uOjpnZXRBcHBsaWNhdGlvbigpOworICAgIGlmIChBKSBhdHRyc2V0KEEtPmxhYmVscygpKTsKKyAgICBiX2F0dHJJbml0ID0gVFJVRTsKKyAgfQorICBTb2Z0X0xhYmVsX0tleSYgSyA9ICgqdGhpcylbaV07CisgIGlmIChFUlI9PTo6c2xrX3NldChLLm51bSxiZj9LLmxhYmVsOiIiLEsuZm9ybWF0KSkKKyAgICBFcnJvcigic2xrX3NldCIpOworICBub3V0cmVmcmVzaCgpOworfQorCit2b2lkIFNvZnRfTGFiZWxfS2V5X1NldDo6YWN0aXZhdGVfbGFiZWxzKGJvb2wgYmYpCit7CisgIGlmICghYl9hdHRySW5pdCkgeworICAgIE5DdXJzZXNBcHBsaWNhdGlvbiogQSA9IE5DdXJzZXNBcHBsaWNhdGlvbjo6Z2V0QXBwbGljYXRpb24oKTsKKyAgICBpZiAoQSkgYXR0cnNldChBLT5sYWJlbHMoKSk7CisgICAgYl9hdHRySW5pdCA9IFRSVUU7CisgIH0KKyAgZm9yKGludCBpPTE7IGkgPD0gbnVtX2xhYmVsczsgaSsrKSB7CisgICAgU29mdF9MYWJlbF9LZXkmIEsgPSAoKnRoaXMpW2ldOworICAgIGlmIChFUlI9PTo6c2xrX3NldChLLm51bSxiZj9LLmxhYmVsOiIiLEsuZm9ybWF0KSkKKyAgICAgIEVycm9yKCJzbGtfc2V0Iik7CisgIH0KKyAgaWYgKGJmKQorICAgIHJlc3RvcmUoKTsKKyAgZWxzZQorICAgIGNsZWFyKCk7CisgIG5vdXRyZWZyZXNoKCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9jKysvY3Vyc3Nsay5oIGIvbmN1cnNlcy01LjcvYysrL2N1cnNzbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTE2OTVlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL2N1cnNzbGsuaApAQCAtMCwwICsxLDIzOCBAQAorLy8gKiB0aGlzIGlzIGZvciBtYWtpbmcgZW1hY3MgaGFwcHk6IC0qLU1vZGU6IEMrKzstKi0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vICRJZDogY3Vyc3Nsay5oLHYgMS4xMyAyMDA1LzA1LzI4IDIxOjU4OjE4IHRvbSBFeHAgJAorCisjaWZuZGVmIE5DVVJTRVNfQ1VSU1NMS19IX2luY2wKKyNkZWZpbmUgTkNVUlNFU19DVVJTU0xLX0hfaW5jbAorCisjaW5jbHVkZSA8Y3Vyc2Vzdy5oPgorCitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBTb2Z0X0xhYmVsX0tleV9TZXQgeworcHVibGljOgorICAvLyBUaGlzIGlubmVyIGNsYXNzIHJlcHJlc2VudHMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBTb2Z0IExhYmVsIEtleSAoU0xLKQorICBjbGFzcyBOQ1VSU0VTX0lNUEVYUCBTb2Z0X0xhYmVsX0tleSB7CisgICAgZnJpZW5kIGNsYXNzIFNvZnRfTGFiZWxfS2V5X1NldDsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgZW51bSB7IExlZnQ9MCwgQ2VudGVyPTEsIFJpZ2h0PTIgfSBKdXN0aWZpY2F0aW9uOworCisgIHByaXZhdGU6CisgICAgY2hhciAqbGFiZWw7ICAgICAgICAgICAvLyBUaGUgVGV4dCBvZiB0aGUgTGFiZWwKKyAgICBKdXN0aWZpY2F0aW9uIGZvcm1hdDsgIC8vIFRoZSBKdXN0aWZpY2F0aW9uCisgICAgaW50IG51bTsgICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHRoZSBMYWJlbAorCisgICAgU29mdF9MYWJlbF9LZXkoKSA6IGxhYmVsKE5VTEwpLCBmb3JtYXQoTGVmdCksIG51bSgtMSkgeworICAgIH0KKworICAgIHZpcnR1YWwgflNvZnRfTGFiZWxfS2V5KCkgeworICAgICAgZGVsZXRlW10gbGFiZWw7CisgICAgfTsKKworICBwdWJsaWM6CisgICAgLy8gU2V0IHRoZSB0ZXh0IG9mIHRoZSBMYWJlbAorICAgIFNvZnRfTGFiZWxfS2V5JiBvcGVyYXRvcj0oY2hhciAqdGV4dCk7CisKKyAgICAvLyBTZXQgdGhlIEp1c3RpZmljYXRpb24gb2YgdGhlIExhYmVsCisgICAgU29mdF9MYWJlbF9LZXkmIG9wZXJhdG9yPShKdXN0aWZpY2F0aW9uIGp1c3QpIHsKKyAgICAgIGZvcm1hdCA9IGp1c3Q7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgLy8gUmV0cmlldmUgdGhlIHRleHQgb2YgdGhlIGxhYmVsCisgICAgaW5saW5lIGNoYXIqIG9wZXJhdG9yKCkodm9pZCkgY29uc3QgeworICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIFNvZnRfTGFiZWxfS2V5JiBvcGVyYXRvcj0oY29uc3QgU29mdF9MYWJlbF9LZXkmIHJocykKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAgICp0aGlzID0gcmhzOworICAgICAgfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFNvZnRfTGFiZWxfS2V5KGNvbnN0IFNvZnRfTGFiZWxfS2V5JiByaHMpCisgICAgICA6IGxhYmVsKE5VTEwpLAorICAgICAgICBmb3JtYXQocmhzLmZvcm1hdCksCisgICAgICAgIG51bShyaHMubnVtKQorICAgIHsKKyAgICAgICp0aGlzID0gcmhzLmxhYmVsOworICAgIH0KKyAgfTsKKworcHVibGljOgorICB0eXBlZGVmIGVudW0geworICAgIE5vbmUgICAgICAgICAgICAgICAgPSAtMSwKKyAgICBUaHJlZV9Ud29fVGhyZWUgICAgID0gMCwKKyAgICBGb3VyX0ZvdXIgICAgICAgICAgID0gMSwKKyAgICBQQ19TdHlsZSAgICAgICAgICAgID0gMiwKKyAgICBQQ19TdHlsZV9XaXRoX0luZGV4ID0gMworICB9IExhYmVsX0xheW91dDsKKworcHJpdmF0ZToKKyAgc3RhdGljIGxvbmcgTkNVUlNFU19JTVBFWFAgY291bnQ7ICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIEtleSBTZXRzCisgIHN0YXRpYyBMYWJlbF9MYXlvdXQgTkNVUlNFU19JTVBFWFAgIGZvcm1hdDsgICAgIC8vIExheW91dCBvZiB0aGUgS2V5IFNldHMKKyAgc3RhdGljIGludCAgTkNVUlNFU19JTVBFWFAgbnVtX2xhYmVsczsgICAgICAgICAgLy8gTnVtYmVyIE9mIExhYmVscyBpbiBLZXkgU2V0cworICBib29sIE5DVVJTRVNfSU1QRVhQIGJfYXR0ckluaXQ7ICAgICAgICAgICAgICAgICAvLyBBcmUgYXR0cmlidXRlcyBpbml0aWFsaXplZAorCisgIFNvZnRfTGFiZWxfS2V5ICpzbGtfYXJyYXk7ICAgICAgIC8vIFRoZSBhcnJheSBvZiBTTEsncworCisgIC8vIEluaXQgdGhlIEtleSBTZXQKKyAgdm9pZCBpbml0KCk7CisKKyAgLy8gQWN0aXZhdGUgb3IgRGVhY3RpdmF0ZSBMYWJlbCMgaSwgTGFiZWwgY291bnRpbmcgc3RhcnRzIHdpdGggMSEKKyAgdm9pZCBhY3RpdmF0ZV9sYWJlbChpbnQgaSwgYm9vbCBiZj1UUlVFKTsKKworICAvLyBBY3RpdmF0ZSBvZiBEZWFjdGl2YXRlIGFsbCBMYWJlbHMKKyAgdm9pZCBhY3RpdmF0ZV9sYWJlbHMoYm9vbCBiZik7CisKK3Byb3RlY3RlZDoKKyAgaW5saW5lIHZvaWQgRXJyb3IgKGNvbnN0IGNoYXIqIG1zZykgY29uc3QgVEhST1dTKE5DdXJzZXNFeGNlcHRpb24pIHsKKyAgICBUSFJPVyhuZXcgTkN1cnNlc0V4Y2VwdGlvbiAobXNnKSk7CisgIH0KKworICAvLyBSZW1vdmUgU0xLJ3MgZnJvbSBzY3JlZW4KKyAgdm9pZCBjbGVhcigpIHsKKyAgICBpZiAoRVJSPT06OnNsa19jbGVhcigpKQorICAgICAgRXJyb3IoInNsa19jbGVhciIpOworICB9CisKKyAgLy8gUmVzdG9yZSB0aGVtCisgIHZvaWQgcmVzdG9yZSgpIHsKKyAgICBpZiAoRVJSPT06OnNsa19yZXN0b3JlKCkpCisgICAgICBFcnJvcigic2xrX3Jlc3RvcmUiKTsKKyAgfQorCitwdWJsaWM6CisKKyAgLy8gQ29uc3RydWN0IGEgS2V5IFNldCwgdXNlIHRoZSBtb3N0IGNvbWZvcnRhYmxlIGxheW91dCBhcyBkZWZhdWx0LgorICAvLyBZb3UgbXVzdCBjcmVhdGUgYSBTb2Z0X0xhYmVsX0tleV9TZXQgYmVmb3JlIHlvdSBjcmVhdGUgYW55IG9iamVjdCBvZgorICAvLyB0aGUgTkN1cnNlc1dpbmRvdywgTkN1cnNlc1BhbmVsIG9yIGRlcml2ZWQgY2xhc3Nlcy4gKEFjdHVhbGx5IGJlZm9yZQorICAvLyA6OmluaXRzY3IoKSBpcyBjYWxsZWQpLgorICBTb2Z0X0xhYmVsX0tleV9TZXQoTGFiZWxfTGF5b3V0IGZtdCk7CisKKyAgLy8gVGhpcyBjb25zdHJ1Y3RvciBhc3N1bWVzLCB0aGF0IHlvdSBhbHJlYWR5IGNvbnN0cnVjdGVkIGEgS2V5IFNldAorICAvLyB3aXRoIGEgbGF5b3V0IGJ5IHRoZSBjb25zdHJ1Y3RvciBhYm92ZS4gVGhpcyBsYXlvdXQgd2lsbCBiZSByZXVzZWQuCisgIE5DVVJTRVNfSU1QRVhQIFNvZnRfTGFiZWxfS2V5X1NldCgpOworCisgIFNvZnRfTGFiZWxfS2V5X1NldCYgb3BlcmF0b3I9KGNvbnN0IFNvZnRfTGFiZWxfS2V5X1NldCYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgICBpbml0KCk7CQkvLyBhbGxvY2F0ZSBhIG5ldyBzbGtfYXJyYXlbXQorICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBTb2Z0X0xhYmVsX0tleV9TZXQoY29uc3QgU29mdF9MYWJlbF9LZXlfU2V0JiByaHMpCisgICAgOiBiX2F0dHJJbml0KHJocy5iX2F0dHJJbml0KSwKKyAgICAgIHNsa19hcnJheShOVUxMKQorICB7CisgICAgaW5pdCgpOwkJLy8gYWxsb2NhdGUgYSBuZXcgc2xrX2FycmF5W10KKyAgfQorCisgIHZpcnR1YWwgflNvZnRfTGFiZWxfS2V5X1NldCgpOworCisgIC8vIEdldCBMYWJlbCMgaS4gTGFiZWwgY291bnRpbmcgc3RhcnRzIHdpdGggMSEKKyAgTkNVUlNFU19JTVBFWFAgU29mdF9MYWJlbF9LZXkmIG9wZXJhdG9yW10oaW50IGkpOworCisgIC8vIFJldHJpZXZlIG51bWJlciBvZiBMYWJlbHMKKyAgaW5saW5lIGludCBsYWJlbHMoKSBjb25zdCB7IHJldHVybiBudW1fbGFiZWxzOyB9CisKKyAgLy8gUmVmcmVzaCB0aGUgU0xLIHBvcnRpb24gb2YgdGhlIHNjcmVlbgorICBpbmxpbmUgdm9pZCByZWZyZXNoKCkgeworICAgIGlmIChFUlI9PTo6c2xrX3JlZnJlc2goKSkKKyAgICAgIEVycm9yKCJzbGtfcmVmcmVzaCIpOworICB9CisKKyAgLy8gTWFyayB0aGUgU0xLIHBvcnRpb24gb2YgdGhlIHNjcmVlbiBmb3IgcmVmcmVzaCwgZGVmZXIgYWN0dWFsIHJlZnJlc2gKKyAgLy8gdW50aWwgbmV4dCB1cGRhdGUgY2FsbC4KKyAgaW5saW5lIHZvaWQgbm91dHJlZnJlc2goKSB7CisgICAgaWYgKEVSUj09OjpzbGtfbm91dHJlZnJlc2goKSkKKyAgICAgIEVycm9yKCJzbGtfbm91dHJlZnJlc2giKTsKKyAgfQorCisgIC8vIE1hcmsgdGhlIHdob2xlIFNMSyBwb3J0aW9uIG9mIHRoZSBzY3JlZW4gYXMgbW9kaWZpZWQKKyAgaW5saW5lIHZvaWQgdG91Y2goKSB7CisgICAgaWYgKEVSUj09OjpzbGtfdG91Y2goKSkKKyAgICAgIEVycm9yKCJzbGtfdG91Y2giKTsKKyAgfQorCisgIC8vIEFjdGl2YXRlIExhYmVsIyBpCisgIGlubGluZSB2b2lkIHNob3coaW50IGkpIHsKKyAgICBhY3RpdmF0ZV9sYWJlbChpLEZBTFNFKTsKKyAgICBhY3RpdmF0ZV9sYWJlbChpLFRSVUUpOworICB9CisKKyAgLy8gSGlkZSBMYWJlbCMgaQorICBpbmxpbmUgdm9pZCBoaWRlKGludCBpKSB7CisgICAgYWN0aXZhdGVfbGFiZWwoaSxGQUxTRSk7CisgIH0KKworICAvLyBTaG93IGFsbCBMYWJlbHMKKyAgaW5saW5lIHZvaWQgc2hvdygpIHsKKyAgICBhY3RpdmF0ZV9sYWJlbHMoRkFMU0UpOworICAgIGFjdGl2YXRlX2xhYmVscyhUUlVFKTsKKyAgfQorCisgIC8vIEhpZGUgYWxsIExhYmVscworICBpbmxpbmUgdm9pZCBoaWRlKCkgeworICAgIGFjdGl2YXRlX2xhYmVscyhGQUxTRSk7CisgIH0KKworICBpbmxpbmUgdm9pZCBhdHRyb24oYXR0cl90IGF0dHJzKSB7CisgICAgaWYgKEVSUj09OjpzbGtfYXR0cm9uKGF0dHJzKSkKKyAgICAgIEVycm9yKCJzbGtfYXR0cm9uIik7CisgIH0KKworICBpbmxpbmUgdm9pZCBhdHRyb2ZmKGF0dHJfdCBhdHRycykgeworICAgIGlmIChFUlI9PTo6c2xrX2F0dHJvZmYoYXR0cnMpKQorICAgICAgRXJyb3IoInNsa19hdHRyb2ZmIik7CisgIH0KKworICBpbmxpbmUgdm9pZCBhdHRyc2V0KGF0dHJfdCBhdHRycykgeworICAgIGlmIChFUlI9PTo6c2xrX2F0dHJzZXQoYXR0cnMpKQorICAgICAgRXJyb3IoInNsa19hdHRyc2V0Iik7CisgIH0KKworICBpbmxpbmUgdm9pZCBjb2xvcihzaG9ydCBjb2xvcl9wYWlyX251bWJlcikgeworICAgIGlmIChFUlI9PTo6c2xrX2NvbG9yKGNvbG9yX3BhaXJfbnVtYmVyKSkKKyAgICAgIEVycm9yKCJzbGtfY29sb3IiKTsKKyAgfQorCisgIGlubGluZSBhdHRyX3QgYXR0cigpIGNvbnN0IHsKKyAgICByZXR1cm4gOjpzbGtfYXR0cigpOworICB9Cit9OworCisjZW5kaWYgLyogTkNVUlNFU19DVVJTU0xLX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2RlbW8uY2MgYi9uY3Vyc2VzLTUuNy9jKysvZGVtby5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGQ1ZjJiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL2RlbW8uY2MKQEAgLTAsMCArMSw1NjMgQEAKKy8vICogVGhpcyBtYWtlcyBlbWFjcyBoYXBweSAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogICBTaWxseSBkZW1vIHByb2dyYW0gZm9yIHRoZSBOQ3Vyc2VzUGFuZWwgY2xhc3MuCisgKgorICogICB3cml0dGVuIGJ5IEFuYXRvbHkgSXZhc3l1ayAoYW5hdG9seUBuaWNrLmNzaC5yaXQuZWR1KQorICoKKyAqICAgRGVtbyBjb2RlIGZvciBOQ3Vyc2VzTWVudSBhbmQgTkN1cnNlc0Zvcm0gd3JpdHRlbiBieQorICogICBKdWVyZ2VuIFBmZWlmZXIKKyAqCisgKiAkSWQ6IGRlbW8uY2MsdiAxLjM4IDIwMDgvMDgvMDQgMTc6MTY6NTcgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiY3Vyc2VzYXBwLmgiCisjaW5jbHVkZSAiY3Vyc2VzbS5oIgorI2luY2x1ZGUgImN1cnNlc2YuaCIKKworZXh0ZXJuICJDIiB1bnNpZ25lZCBpbnQgc2xlZXAodW5zaWduZWQgaW50KTsKKworI3VuZGVmIGluZGV4IC8vIG5lZWRlZCBmb3IgTmVYVAorCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIFNpbGx5RGVtbworeworICBwdWJsaWM6CisgIHZvaWQgcnVuKGludCBzbGVlcHRpbWUpIHsKKworICAgIE5DdXJzZXNQYW5lbCAqbXlzdGQgPSBuZXcgTkN1cnNlc1BhbmVsKCk7CisKKyAgICAvLyAgTWFrZSBhIGZldyBzbWFsbCBkZW1vIHBhbmVscworCisgICAgTkN1cnNlc1BhbmVsICp1ID0gbmV3IE5DdXJzZXNQYW5lbCg4LCAyMCwgMTIsIDQpOworICAgIE5DdXJzZXNQYW5lbCAqdiA9IG5ldyBOQ3Vyc2VzUGFuZWwoOCwgMjAsIDEwLCA2KTsKKyAgICBOQ3Vyc2VzUGFuZWwgKncgPSBuZXcgTkN1cnNlc1BhbmVsKDgsIDIwLCA4LCA4KTsKKyAgICBOQ3Vyc2VzUGFuZWwgKnggPSBuZXcgTkN1cnNlc1BhbmVsKDgsIDIwLCA2LCAxMCk7CisgICAgTkN1cnNlc1BhbmVsICp5ID0gbmV3IE5DdXJzZXNQYW5lbCg4LCAyMCwgNCwgMTIpOworICAgIE5DdXJzZXNQYW5lbCAqeiA9IG5ldyBOQ3Vyc2VzUGFuZWwoOCwgMzAsIDIsIDE0KTsKKworICAgIC8vICBEcmF3IHNvbWV0aGluZyBvbiB0aGUgbWFpbiBzY3JlZW4sIHNvIHdlIGNhbiBzZWUgd2hhdCBoYXBwZW5zCisgICAgLy8gIHdoZW4gcGFuZWxzIGdldCBtb3ZlZCBvciBkZWxldGVkLgorCisgICAgbXlzdGQtPmJveCgpOworICAgIG15c3RkLT5tb3ZlKG15c3RkLT5oZWlnaHQoKS8yLCAxKTsKKyAgICBteXN0ZC0+aGxpbmUobXlzdGQtPndpZHRoKCktMik7CisgICAgbXlzdGQtPm1vdmUoMSwgbXlzdGQtPndpZHRoKCkvMik7CisgICAgbXlzdGQtPnZsaW5lKG15c3RkLT5oZWlnaHQoKS0yKTsKKyAgICBteXN0ZC0+YWRkY2goMCwgbXlzdGQtPndpZHRoKCkvMiwgQUNTX1RURUUpOworICAgIG15c3RkLT5hZGRjaChteXN0ZC0+aGVpZ2h0KCktMSwgbXlzdGQtPndpZHRoKCkvMiwgQUNTX0JURUUpOworICAgIG15c3RkLT5hZGRjaChteXN0ZC0+aGVpZ2h0KCkvMiwgMCwgQUNTX0xURUUpOworICAgIG15c3RkLT5hZGRjaChteXN0ZC0+aGVpZ2h0KCkvMiwgbXlzdGQtPndpZHRoKCktMSwgQUNTX1JURUUpOworICAgIG15c3RkLT5hZGRjaChteXN0ZC0+aGVpZ2h0KCkvMiwgbXlzdGQtPndpZHRoKCkvMiwgQUNTX1BMVVMpOworCisgICAgLy8gIERyYXcgZnJhbWVzIHdpdGggdGl0bGVzIGFyb3VuZCBwYW5lbHMgc28gdGhhdCB3ZSBjYW4gc2VlIHdoZXJlCisgICAgLy8gIHRoZSBwYW5lbHMgYXJlIGxvY2F0ZWQuCisgICAgdS0+Ym9sZGZyYW1lKCJXaW4gVSIpOworICAgIHYtPmZyYW1lKCJXaW4gViIpOworICAgIHctPmJvbGRmcmFtZSgiV2luIFciKTsKKyAgICB4LT5mcmFtZSgiV2luIFgiKTsKKyAgICB5LT5ib2xkZnJhbWUoIldpbiBZIik7CisgICAgei0+ZnJhbWUoIldpbiBaIik7CisgICAgaWYgKE5DdXJzZXNBcHBsaWNhdGlvbjo6Z2V0QXBwbGljYXRpb24oKS0+dXNlQ29sb3JzKCkpIHsKKyAgICAgIHUtPmJrZ2QoJyAnfENPTE9SX1BBSVIoMSkpOworICAgICAgdy0+YmtnZCgnICd8Q09MT1JfUEFJUigxKSk7CisgICAgICB5LT5ia2dkKCcgJ3xDT0xPUl9QQUlSKDEpKTsKKyAgICAgIHYtPmJrZ2QoJyAnfENPTE9SX1BBSVIoMikpOworICAgICAgeC0+YmtnZCgnICd8Q09MT1JfUEFJUigyKSk7CisgICAgICB6LT5ia2dkKCcgJ3xDT0xPUl9QQUlSKDIpKTsKKyAgICB9CisKKyAgICAvLyAgQSByZWZyZXNoIHRvIGFueSB2YWxpZCBwYW5lbCB1cGRhdGVzIGFsbCBwYW5lbHMgYW5kIHJlZnJlc2hlcworICAgIC8vICB0aGUgc2NyZWVuLiAgVXNpbmcgbXlzdGQgaXMganVzdCBjb252ZW5pZW50IC0gV2Uga25vdyBpdCdzIGFsd2F5cworICAgIC8vICB2YWxpZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwcm9ncmFtLgorCisgICAgbXlzdGQtPnJlZnJlc2goKTsKKyAgICBzbGVlcChzbGVlcHRpbWUpOworCisgICAgLy8gIFNob3cgd2hhdCBoYXBwZW5zIHdoZW4gcGFuZWxzIGFyZSBkZWxldGVkIGFuZCBtb3ZlZC4KKworICAgIHNsZWVwKHNsZWVwdGltZSk7CisgICAgZGVsZXRlIHU7CisgICAgbXlzdGQtPnJlZnJlc2goKTsKKworICAgIHNsZWVwKHNsZWVwdGltZSk7CisgICAgZGVsZXRlIHo7CisgICAgbXlzdGQtPnJlZnJlc2goKTsKKworICAgIHNsZWVwKHNsZWVwdGltZSk7CisgICAgZGVsZXRlIHY7CisgICAgbXlzdGQtPnJlZnJlc2goKTsKKworICAgIC8vIHNob3cgaG93IGl0IGxvb2tzIHdoZW4gYSBwYW5lbCBtb3ZlcworICAgIHNsZWVwKHNsZWVwdGltZSk7CisgICAgeS0+bXZ3aW4oNSwgMzApOworICAgIG15c3RkLT5yZWZyZXNoKCk7CisKKyAgICBzbGVlcChzbGVlcHRpbWUpOworICAgIGRlbGV0ZSB5OworICAgIG15c3RkLT5yZWZyZXNoKCk7CisKKyAgICAvLyBzaG93IGhvdyBpdCBsb29rcyB3aGVuIHlvdSByYWlzZSBhIHBhbmVsCisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKyAgICB3LT50b3AoKTsKKyAgICBteXN0ZC0+cmVmcmVzaCgpOworCisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKyAgICBkZWxldGUgdzsKKyAgICBteXN0ZC0+cmVmcmVzaCgpOworCisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKyAgICBkZWxldGUgeDsKKworICAgIG15c3RkLT5jbGVhcigpOworICAgIG15c3RkLT5yZWZyZXNoKCk7CisKKyAgICAvLyAgRG9uJ3QgZm9yZ2V0IHRvIGNsZWFuIHVwIHRoZSBtYWluIHNjcmVlbi4gIFNpbmNlIHRoaXMgaXMgdGhlCisgICAgLy8gIGxhc3QgdGhpbmcgdXNpbmcgTkN1cnNlc1dpbmRvdywgdGhpcyBoYXMgdGhlIGVmZmVjdCBvZgorICAgIC8vICBzaHV0dGluZyBkb3duIG5jdXJzZXMgYW5kIHJlc3RvcmluZyB0aGUgdGVybWluYWwgc3RhdGUuCisKKyAgICBzbGVlcChzbGVlcHRpbWUpOworICAgIGRlbGV0ZSBteXN0ZDsKKyAgfQorfTsKKworY2xhc3MgVXNlckRhdGEKK3sKK3ByaXZhdGU6CisgIGludCB1OworcHVibGljOgorICBVc2VyRGF0YShpbnQgeCkgOiB1KHgpIHt9CisgIGludCBzbGVlcHRpbWUoKSBjb25zdCB7IHJldHVybiB1OyB9Cit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCit0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBNeUFjdGlvbiA6IHB1YmxpYyBOQ3Vyc2VzVXNlckl0ZW08VD4KK3sKK3B1YmxpYzoKKyAgTXlBY3Rpb24gKGNvbnN0IGNoYXIqIHBfbmFtZSwKKyAgICAgICAgICAgIGNvbnN0IFQqIHBfVXNlckRhdGEpCisgICAgOiBOQ3Vyc2VzVXNlckl0ZW08VD4ocF9uYW1lLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oMCksIHBfVXNlckRhdGEpCisgIHt9CisKKyAgdmlydHVhbCB+TXlBY3Rpb24oKSB7fQorCisgIGJvb2wgYWN0aW9uKCkgeworICAgIFNpbGx5RGVtbyBhOworICAgIGEucnVuKE5DdXJzZXNVc2VySXRlbTxUPjo6VXNlckRhdGEoKS0+c2xlZXB0aW1lKCkpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfTsKKwordGVtcGxhdGUgY2xhc3MgTXlBY3Rpb248VXNlckRhdGE+OwordGVtcGxhdGUgY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1VzZXJJdGVtPFVzZXJEYXRhPjsKKworY2xhc3MgUXVpdEl0ZW0gOiBwdWJsaWMgTkN1cnNlc01lbnVJdGVtCit7CitwdWJsaWM6CisgIFF1aXRJdGVtKCkgOiBOQ3Vyc2VzTWVudUl0ZW0oIlF1aXQiKSB7CisgIH0KKworICBib29sIGFjdGlvbigpIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgTGFiZWwgOiBwdWJsaWMgTkN1cnNlc0Zvcm1GaWVsZAoreworcHVibGljOgorICBMYWJlbChjb25zdCBjaGFyKiB0aXRsZSwKKyAgICAgICAgaW50IHJvdywgaW50IGNvbCkKKyAgICA6IE5DdXJzZXNGb3JtRmllbGQoMSwgc3RhdGljX2Nhc3Q8aW50Pig6OnN0cmxlbih0aXRsZSkpLCByb3csIGNvbCkgeworICAgICAgc2V0X3ZhbHVlKHRpdGxlKTsKKyAgICAgIG9wdGlvbnNfb2ZmKE9fRURJVHxPX0FDVElWRSk7CisgIH0KK307CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIE15RmllbGRUeXBlIDogcHVibGljIFVzZXJEZWZpbmVkRmllbGRUeXBlCit7Citwcml2YXRlOgorICBpbnQgY2hrOworcHJvdGVjdGVkOgorICBib29sIGZpZWxkX2NoZWNrKE5DdXJzZXNGb3JtRmllbGQmIGYpIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorICBib29sIGNoYXJfY2hlY2soaW50IGMpIHsKKyAgICByZXR1cm4gKGM9PWNoaz9UUlVFOkZBTFNFKTsKKyAgfQorcHVibGljOgorICBNeUZpZWxkVHlwZShpbnQgeCkgOiBjaGsoeCkgeworICB9Cit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBUZXN0Rm9ybSA6IHB1YmxpYyBOQ3Vyc2VzRm9ybQoreworcHJpdmF0ZToKKyAgTkN1cnNlc0Zvcm1GaWVsZCoqIEY7CisgIE15RmllbGRUeXBlKiBtZnQ7CisgIEludGVnZXJfRmllbGQgKmlmdDsKKyAgRW51bWVyYXRpb25fRmllbGQgKmVmdDsKKworICBzdGF0aWMgY29uc3QgY2hhciAqd2Vla2RheXNbXTsKKworcHVibGljOgorICBUZXN0Rm9ybSgpCisgICAgOiBOQ3Vyc2VzRm9ybSgxMywgNTEsIChsaW5lcygpIC0gMTUpLzIsIChjb2xzKCkgLSA1MykvMiksCisgICAgICBGKDApLAorICAgICAgbWZ0KDApLAorICAgICAgaWZ0KDApLAorICAgICAgZWZ0KDApCisgIHsKKworICAgIEYgICAgID0gbmV3IE5DdXJzZXNGb3JtRmllbGQqWzEwXTsKKyAgICBtZnQgICA9IG5ldyBNeUZpZWxkVHlwZSgnWCcpOworICAgIGlmdCAgID0gbmV3IEludGVnZXJfRmllbGQoMCwgMSwgMTApOworICAgIGVmdCAgID0gbmV3IEVudW1lcmF0aW9uX0ZpZWxkKHdlZWtkYXlzKTsKKworICAgIEZbMF0gID0gbmV3IExhYmVsKCJEZW1vIEVudHJ5IEZvcm0iLCAwLCAxNik7CisgICAgRlsxXSAgPSBuZXcgTGFiZWwoIldlZWtkYXkgRW51bSIsIDIsIDEpOworICAgIEZbMl0gID0gbmV3IExhYmVsKCJOdW1iZXIoMS0xMCkiLCAyLCAyMSk7CisgICAgRlszXSAgPSBuZXcgTGFiZWwoIk9ubHkgJ1gnIiwgMiwgMzUpOworICAgIEZbNF0gID0gbmV3IExhYmVsKCJNdWx0aWxpbmUgRmllbGQgKER5bmFtaWMgYW5kIFNjcm9sbGFibGUpIiwgNSwgMSk7CisgICAgRls1XSAgPSBuZXcgTkN1cnNlc0Zvcm1GaWVsZCgxLCAxOCwgMywgMSk7CisgICAgRls2XSAgPSBuZXcgTkN1cnNlc0Zvcm1GaWVsZCgxLCAxMiwgMywgMjEpOworICAgIEZbN10gID0gbmV3IE5DdXJzZXNGb3JtRmllbGQoMSwgMTIsIDMsIDM1KTsKKyAgICBGWzhdICA9IG5ldyBOQ3Vyc2VzRm9ybUZpZWxkKDQsIDQ2LCA2LCAxLCAyKTsKKyAgICBGWzldICA9IG5ldyBOQ3Vyc2VzRm9ybUZpZWxkKCk7CisKKyAgICBJbml0Rm9ybShGLCBUUlVFLCBUUlVFKTsKKyAgICBib2xkZnJhbWUoKTsKKworICAgIEZbNV0tPnNldF9maWVsZHR5cGUoKmVmdCk7CisgICAgRls2XS0+c2V0X2ZpZWxkdHlwZSgqaWZ0KTsKKworICAgIEZbN10tPnNldF9maWVsZHR5cGUoKm1mdCk7CisgICAgRls3XS0+c2V0X21heGltdW1fZ3Jvd3RoKDIwKTsgLy8gbWF4LiAyMCBjaGFyYWN0ZXJzCisgICAgRls3XS0+b3B0aW9uc19vZmYoT19TVEFUSUMpOyAgLy8gbWFrZSBmaWVsZCBkeW5hbWljCisKKyAgICBGWzhdLT5zZXRfbWF4aW11bV9ncm93dGgoMTApOyAvLyBtYXguIDEwIGxpbmVzCisgICAgRls4XS0+b3B0aW9uc19vZmYoT19TVEFUSUMpOyAgLy8gbWFrZSBmaWVsZCBkeW5hbWljCisgIH0KKworICBUZXN0Rm9ybSYgb3BlcmF0b3I9KGNvbnN0IFRlc3RGb3JtJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICAqdGhpcyA9IHJoczsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgVGVzdEZvcm0oY29uc3QgVGVzdEZvcm0mIHJocykKKyAgICA6IE5DdXJzZXNGb3JtKHJocyksIEYoMCksIG1mdCgwKSwgaWZ0KDApLCBlZnQoMCkKKyAgeworICB9CisKKyAgflRlc3RGb3JtKCkgeworICAgIGRlbGV0ZSBtZnQ7CisgICAgZGVsZXRlIGlmdDsKKyAgICBkZWxldGUgZWZ0OworICB9Cit9OworCitjb25zdCBjaGFyKiBUZXN0Rm9ybTo6d2Vla2RheXNbXSA9IHsKKyAgICAiU3VuZGF5IiwgIk1vbmRheSIsICJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsCisgICAgIkZyaWRheSIsICJTYXR1cmRheSIsIE5VTEwgfTsKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgRm9ybUFjdGlvbiA6IHB1YmxpYyBOQ3Vyc2VzTWVudUl0ZW0KK3sKK3B1YmxpYzoKKyAgRm9ybUFjdGlvbihjb25zdCBjaGFyICpzKSA6IE5DdXJzZXNNZW51SXRlbShzKSB7CisgIH0KKworICBib29sIGFjdGlvbigpIHsKKyAgICBUZXN0Rm9ybSBGOworICAgIFNvZnRfTGFiZWxfS2V5X1NldCogUyA9IG5ldyBTb2Z0X0xhYmVsX0tleV9TZXQ7CisgICAgZm9yKGludCBpPTE7IGkgPD0gUy0+bGFiZWxzKCk7IGkrKykgeworICAgICAgY2hhciBidWZbOF07CisgICAgICBhc3NlcnQoaSA8IDEwMCk7CisgICAgICA6OnNwcmludGYoYnVmLCAiRnJtJTAyZCIsIGkpOworICAgICAgKCpTKVtpXSA9IGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRleHQKKyAgICAgICgqUylbaV0gPSBTb2Z0X0xhYmVsX0tleV9TZXQ6OlNvZnRfTGFiZWxfS2V5OjpMZWZ0OyAvLyBKdXN0aWZpY2F0aW9uCisgICAgfQorICAgIE5DdXJzZXNBcHBsaWNhdGlvbjo6Z2V0QXBwbGljYXRpb24oKS0+cHVzaCgqUyk7CisgICAgRigpOworICAgIE5DdXJzZXNBcHBsaWNhdGlvbjo6Z2V0QXBwbGljYXRpb24oKS0+cG9wKCk7CisgICAgZGVsZXRlIFM7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBQYWRBY3Rpb24gOiBwdWJsaWMgTkN1cnNlc01lbnVJdGVtCit7CitwdWJsaWM6CisgIFBhZEFjdGlvbihjb25zdCBjaGFyKiBzKSA6IE5DdXJzZXNNZW51SXRlbShzKSB7CisgIH0KKworICBib29sIGFjdGlvbigpIHsKKyAgICBjb25zdCBpbnQgR1JJRFNJWkUgPSAzOworICAgIGNvbnN0IGludCBQQURTSVpFICA9IDIwMDsKKyAgICB1bnNpZ25lZCBncmlkY291bnQgPSAwOworCisgICAgTkN1cnNlc1BhbmVsIG15c3RkOworICAgIE5DdXJzZXNQYW5lbCBQKG15c3RkLmxpbmVzKCktMiwgbXlzdGQuY29scygpLTIsIDEsIDEpOworICAgIE5DdXJzZXNGcmFtZWRQYWQgRlAoUCwgUEFEU0laRSwgUEFEU0laRSk7CisKKyAgICBmb3IgKGludCBpPTA7IGkgPCBQQURTSVpFOyBpKyspIHsKKyAgICAgIGZvciAoaW50IGo9MDsgaiA8IFBBRFNJWkU7IGorKykgeworICAgICAgICBpZiAoaSAlIEdSSURTSVpFID09IDAgJiYgaiAlIEdSSURTSVpFID09IDApIHsKKyAgICAgICAgICBpZiAoaT09MCB8fCBqPT0wKQorICAgICAgICAgICAgRlAuYWRkY2goJysnKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBGUC5hZGRjaChzdGF0aWNfY2FzdDxjaHR5cGU+KCdBJyArIChncmlkY291bnQrKyAlIDI2KSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGkgJSBHUklEU0laRSA9PSAwKQorICAgICAgICAgIEZQLmFkZGNoKCctJyk7CisgICAgICAgIGVsc2UgaWYgKGogJSBHUklEU0laRSA9PSAwKQorICAgICAgICAgIEZQLmFkZGNoKCd8Jyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBGUC5hZGRjaCgnICcpOworICAgICAgfQorICAgIH0KKworICAgIFAubGFiZWwoIlBhZCBEZW1vIiwgTlVMTCk7CisgICAgRlAoKTsKKyAgICBQLmNsZWFyKCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9OworCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK2NsYXNzIFBhc3NpdmVJdGVtIDogcHVibGljIE5DdXJzZXNNZW51SXRlbQoreworcHVibGljOgorICBQYXNzaXZlSXRlbShjb25zdCBjaGFyKiB0ZXh0KSA6IE5DdXJzZXNNZW51SXRlbSh0ZXh0KSB7CisgICAgb3B0aW9uc19vZmYoT19TRUxFQ1RBQkxFKTsKKyAgfQorfTsKKworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBTY2FuQWN0aW9uIDogcHVibGljIE5DdXJzZXNNZW51SXRlbQoreworcHVibGljOgorICBTY2FuQWN0aW9uKGNvbnN0IGNoYXIqIHMpIDogTkN1cnNlc01lbnVJdGVtKHMpIHsKKyAgfQorCisgIGJvb2wgYWN0aW9uKCkgeworICAgIE5DdXJzZXNQYW5lbCAqbXlzdGQgPSBuZXcgTkN1cnNlc1BhbmVsKCk7CisKKyAgICBOQ3Vyc2VzUGFuZWwgKncgPSBuZXcgTkN1cnNlc1BhbmVsKG15c3RkLT5saW5lcygpIC0gMiwgbXlzdGQtPmNvbHMoKSAtIDIsIDEsIDEpOworICAgIHctPmJveCgpOworICAgIHctPnJlZnJlc2goKTsKKworICAgIE5DdXJzZXNQYW5lbCAqcyA9IG5ldyBOQ3Vyc2VzUGFuZWwody0+bGluZXMoKSAtIDYsIHctPmNvbHMoKSAtIDYsIDMsIDMpOworICAgIHMtPnNjcm9sbG9rKFRSVUUpOworICAgIDo6ZWNobygpOworCisgICAgcy0+cHJpbnR3KCJFbnRlciBkZWNpbWFsIGludGVnZXJzLiAgVGhlIHJ1bm5pbmcgdG90YWwgd2lsbCBiZSBzaG93blxuIik7CisgICAgaW50IG52YWx1ZSA9IC0xOworICAgIGludCByZXN1bHQgPSAwOworICAgIHdoaWxlIChudmFsdWUgIT0gMCkgeworICAgICAgbnZhbHVlID0gMDsKKyAgICAgIHMtPnNjYW53KCIlZCIsICZudmFsdWUpOworICAgICAgaWYgKG52YWx1ZSAhPSAwKSB7CisgICAgICAgIHMtPnByaW50dygiJWQ6ICIsIHJlc3VsdCArPSBudmFsdWUpOworICAgICAgfQorICAgICAgcy0+cmVmcmVzaCgpOworICAgIH0KKyAgICBzLT5wcmludHcoIlxuUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpOworICAgIHMtPmdldGNoKCk7CisKKyAgICBkZWxldGUgczsKKyAgICBkZWxldGUgdzsKKyAgICBkZWxldGUgbXlzdGQ7CisgICAgOjpub2VjaG8oKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK307CisKKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworY2xhc3MgTXlNZW51IDogcHVibGljIE5DdXJzZXNNZW51Cit7Citwcml2YXRlOgorICBOQ3Vyc2VzUGFuZWwqIFA7CisgIE5DdXJzZXNNZW51SXRlbSoqIEk7CisgIFVzZXJEYXRhICp1OworICAjZGVmaW5lIG5faXRlbXMgNworCitwdWJsaWM6CisgIE15TWVudSAoKQorICAgIDogTkN1cnNlc01lbnUgKG5faXRlbXMrMiwgOCwgKGxpbmVzKCktMTApLzIsIChjb2xzKCktMTApLzIpLAorICAgICAgUCgwKSwgSSgwKSwgdSgwKQorICB7CisgICAgdSA9IG5ldyBVc2VyRGF0YSgxKTsKKyAgICBJID0gbmV3IE5DdXJzZXNNZW51SXRlbSpbMStuX2l0ZW1zXTsKKyAgICBJWzBdID0gbmV3IFBhc3NpdmVJdGVtKCJPbmUiKTsKKyAgICBJWzFdID0gbmV3IFBhc3NpdmVJdGVtKCJUd28iKTsKKyAgICBJWzJdID0gbmV3IE15QWN0aW9uPFVzZXJEYXRhPiAoIlNpbGx5IiwgdSk7CisgICAgSVszXSA9IG5ldyBGb3JtQWN0aW9uKCJGb3JtIik7CisgICAgSVs0XSA9IG5ldyBQYWRBY3Rpb24oIlBhZCIpOworICAgIElbNV0gPSBuZXcgU2NhbkFjdGlvbigiU2NhbiIpOworICAgIElbNl0gPSBuZXcgUXVpdEl0ZW0oKTsKKyAgICBJWzddID0gbmV3IE5DdXJzZXNNZW51SXRlbSgpOyAvLyBUZXJtaW5hdGluZyBlbXB0eSBpdGVtCisKKyAgICBJbml0TWVudShJLCBUUlVFLCBUUlVFKTsKKworICAgIFAgPSBuZXcgTkN1cnNlc1BhbmVsKDEsIG5faXRlbXMsIExJTkVTLTEsIDEpOworICAgIGJvbGRmcmFtZSgiRGVtbyIsICJTaWxseSIpOworICAgIFAtPnNob3coKTsKKyAgfQorCisgIE15TWVudSYgb3BlcmF0b3I9KGNvbnN0IE15TWVudSYgcmhzKQorICB7CisgICAgaWYgKHRoaXMgIT0gJnJocykgeworICAgICAgKnRoaXMgPSByaHM7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIE15TWVudShjb25zdCBNeU1lbnUmIHJocykKKyAgICA6IE5DdXJzZXNNZW51KHJocyksIFAoMCksIEkoMCksIHUoMCkKKyAgeworICB9CisKKyAgfk15TWVudSgpCisgIHsKKyAgICBQLT5oaWRlKCk7CisgICAgZGVsZXRlIFA7CisgICAgZGVsZXRlIHU7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgT25fTWVudV9Jbml0KCkKKyAgeworICAgIE5DdXJzZXNXaW5kb3cgVyg6OnN0ZHNjcik7CisgICAgUC0+bW92ZSgwLCAwKTsKKyAgICBQLT5jbHJ0b2VvbCgpOworICAgIGZvcihpbnQgaT0xOyBpPD1jb3VudCgpOyBpKyspCisgICAgICBQLT5hZGRjaCgnMCcgKyBpKTsKKyAgICBQLT5ia2dkKFcuZ2V0YmtnZCgpKTsKKyAgICByZWZyZXNoKCk7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgT25fTWVudV9UZXJtaW5hdGlvbigpCisgIHsKKyAgICBQLT5tb3ZlKDAsIDApOworICAgIFAtPmNscnRvZW9sKCk7CisgICAgcmVmcmVzaCgpOworICB9CisKKyAgdmlydHVhbCB2b2lkIE9uX0l0ZW1fSW5pdChOQ3Vyc2VzTWVudUl0ZW0mIGl0ZW0pCisgIHsKKyAgICBQLT5tb3ZlKDAsIGl0ZW0uaW5kZXgoKSk7CisgICAgUC0+YXR0cm9uKEFfUkVWRVJTRSk7CisgICAgUC0+cHJpbnR3KCIlMWQiLCAxK2l0ZW0uaW5kZXgoKSk7CisgICAgUC0+YXR0cm9mZihBX1JFVkVSU0UpOworICAgIHJlZnJlc2goKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBPbl9JdGVtX1Rlcm1pbmF0aW9uKE5DdXJzZXNNZW51SXRlbSYgaXRlbSkKKyAgeworICAgIFAtPm1vdmUoMCwgaXRlbS5pbmRleCgpKTsKKyAgICBQLT5hdHRyb2ZmKEFfUkVWRVJTRSk7CisgICAgUC0+cHJpbnR3KCIlMWQiLCAxK2l0ZW0uaW5kZXgoKSk7CisgICAgcmVmcmVzaCgpOworICB9Cit9OworLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitjbGFzcyBUZXN0QXBwbGljYXRpb24gOiBwdWJsaWMgTkN1cnNlc0FwcGxpY2F0aW9uCit7Citwcm90ZWN0ZWQ6CisgIGludCB0aXRsZXNpemUoKSBjb25zdCB7IHJldHVybiAxOyB9CisgIHZvaWQgdGl0bGUoKTsKKyAgU29mdF9MYWJlbF9LZXlfU2V0OjpMYWJlbF9MYXlvdXQgdXNlU0xLcygpIGNvbnN0IHsKKyAgICByZXR1cm4gU29mdF9MYWJlbF9LZXlfU2V0OjpQQ19TdHlsZV9XaXRoX0luZGV4OworICB9CisgIHZvaWQgaW5pdF9sYWJlbHMoU29mdF9MYWJlbF9LZXlfU2V0JiBTKSBjb25zdDsKKworcHVibGljOgorICBUZXN0QXBwbGljYXRpb24oKSA6IE5DdXJzZXNBcHBsaWNhdGlvbihUUlVFKSB7CisgIH0KKworICBpbnQgcnVuKCk7Cit9OworCit2b2lkIFRlc3RBcHBsaWNhdGlvbjo6aW5pdF9sYWJlbHMoU29mdF9MYWJlbF9LZXlfU2V0JiBTKSBjb25zdAoreworICBmb3IoaW50IGk9MTsgaSA8PSBTLmxhYmVscygpOyBpKyspIHsKKyAgICBjaGFyIGJ1Zls4XTsKKyAgICBhc3NlcnQoaSA8IDEwMCk7CisgICAgOjpzcHJpbnRmKGJ1ZiwgIktleSUwMmQiLCBpKTsKKyAgICBTW2ldID0gYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dAorICAgIFNbaV0gPSBTb2Z0X0xhYmVsX0tleV9TZXQ6OlNvZnRfTGFiZWxfS2V5OjpMZWZ0OyAvLyBKdXN0aWZpY2F0aW9uCisgIH0KK30KKwordm9pZCBUZXN0QXBwbGljYXRpb246OnRpdGxlKCkKK3sKKyAgY29uc3QgY2hhciAqIGNvbnN0IHRpdGxlVGV4dCA9ICJTaW1wbGUgQysrIEJpbmRpbmcgRGVtbyI7CisgIGNvbnN0IGludCBsZW4gPSA6OnN0cmxlbih0aXRsZVRleHQpOworCisgIHRpdGxlV2luZG93LT5ia2dkKHNjcmVlbl90aXRsZXMoKSk7CisgIHRpdGxlV2luZG93LT5hZGRzdHIoMCwgKHRpdGxlV2luZG93LT5jb2xzKCkgLSBsZW4pLzIsIHRpdGxlVGV4dCk7CisgIHRpdGxlV2luZG93LT5ub3V0cmVmcmVzaCgpOworfQorCisKK2ludCBUZXN0QXBwbGljYXRpb246OnJ1bigpCit7CisgIE15TWVudSBNOworICBNKCk7CisgIHJldHVybiAwOworfQorCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KK3N0YXRpYyBUZXN0QXBwbGljYXRpb24gKkRlbW8gPSBuZXcgVGVzdEFwcGxpY2F0aW9uKCk7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9jKysvZWRpdF9jZmcuc2ggYi9uY3Vyc2VzLTUuNy9jKysvZWRpdF9jZmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzNjMzFiMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9lZGl0X2NmZy5zaApAQCAtMCwwICsxLDcxIEBACisjIS9iaW4vc2gKKyMgJElkOiBlZGl0X2NmZy5zaCx2IDEuMTcgMjAwOC8wOC8zMCAxOTo0NDoyNSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTctb24KKyMKKyMgRWRpdCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgZXRpcC5oIGZpbGUgYmFzZWQgb24gdGhlIGF1dG9jb25mLWdlbmVyYXRlZAorIyB2YWx1ZXM6CisjCisjCSQxID0gbmN1cnNlc19jZmcuaAorIwkkMiA9IGV0aXAuaAorIworZWNobyAic3Vic3RpdHV0aW5nIGF1dG9jb25mJ2QgdmFsdWVzIGZyb20gJDEgaW50byAkMiIKK2ZvciBuYW1lIGluIFwKKwlDUFBfSEFTX1BBUkFNX0lOSVQgXAorCUNQUF9IQVNfU1RBVElDX0NBU1QgXAorCUVUSVBfTkVFRFNfTUFUSF9FWENFUFRJT04gXAorCUVUSVBfTkVFRFNfTUFUSF9IIFwKKwlIQVZFX0JVSUxUSU5fSCBcCisJSEFWRV9HUFBfQlVJTFRJTl9IIFwKKwlIQVZFX0dYWF9CVUlMVElOX0ggXAorCUhBVkVfSU9TVFJFQU0gXAorCUhBVkVfVFlQRUlORk8gXAorCUhBVkVfVkFMVUVTX0ggXAorCUlPU1RSRUFNX05BTUVTUEFDRQorZG8KKwlybSAtZiAkMi5iYWsKKwltdiAkMiAkMi5iYWsKKwlpZiAoIGdyZXAgIlsgCV0kbmFtZVsgCV0xIiAkMSAyPiYxID4vZGV2L251bGwpCisJdGhlbgorCQl2YWx1ZT0xCisJCXNlZCAtZSAncy9kZWZpbmUgJyRuYW1lJy4qJC9kZWZpbmUgJyRuYW1lJyAxLycgJDIuYmFrID4kMgorCWVsc2UKKwkJdmFsdWU9MAorCQlzZWQgLWUgJ3MvZGVmaW5lICckbmFtZScuKiQvZGVmaW5lICckbmFtZScgMC8nICQyLmJhayA+JDIKKwlmaQorCWlmIChjbXAgLXMgJDIgJDIuYmFrKQorCXRoZW4KKwkJZWNobyAnLi4uICckbmFtZSAkdmFsdWUKKwkJbXYgJDIuYmFrICQyCisJZWxzZQorCQllY2hvICcuLi4gJyRuYW1lICR2YWx1ZQorCQlybSAtZiAkMi5iYWsKKwlmaQorZG9uZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2V0aXAuaC5pbiBiL25jdXJzZXMtNS43L2MrKy9ldGlwLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2NDJhNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2MrKy9ldGlwLmguaW4KQEAgLTAsMCArMSwzNzggQEAKKy8vICogVGhpcyBtYWtlcyBlbWFjcyBoYXBweSAtKi1Nb2RlOiBDKys7LSotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyAkSWQ6IGV0aXAuaC5pbix2IDEuMzcgMjAwOC8wOC8zMCAxOToyNzozMiB0b20gRXhwICQKKworI2lmbmRlZiBOQ1VSU0VTX0VUSVBfSF9pbmNsCisjZGVmaW5lIE5DVVJTRVNfRVRJUF9IX2luY2wgMQorCisvLyBUaGVzZSBhcmUgc3Vic3RpdHV0ZWQgYXQgY29uZmlndXJlL2J1aWxkIHRpbWUKKyNpZm5kZWYgSEFWRV9CVUlMVElOX0gKKyNkZWZpbmUgSEFWRV9CVUlMVElOX0ggMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HWFhfQlVJTFRJTl9ICisjZGVmaW5lIEhBVkVfR1hYX0JVSUxUSU5fSCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dQUF9CVUlMVElOX0gKKyNkZWZpbmUgSEFWRV9HUFBfQlVJTFRJTl9IIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfSU9TVFJFQU0KKyNkZWZpbmUgSEFWRV9JT1NUUkVBTSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RZUEVJTkZPCisjZGVmaW5lIEhBVkVfVFlQRUlORk8gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9WQUxVRVNfSAorI2RlZmluZSBIQVZFX1ZBTFVFU19IIDAKKyNlbmRpZgorCisjaWZuZGVmIEVUSVBfTkVFRFNfTUFUSF9ICisjZGVmaW5lIEVUSVBfTkVFRFNfTUFUSF9IIDAKKyNlbmRpZgorCisjaWZuZGVmIEVUSVBfTkVFRFNfTUFUSF9FWENFUFRJT04KKyNkZWZpbmUgRVRJUF9ORUVEU19NQVRIX0VYQ0VQVElPTiAwCisjZW5kaWYKKworI2lmbmRlZiBDUFBfSEFTX1BBUkFNX0lOSVQKKyNkZWZpbmUgQ1BQX0hBU19QQVJBTV9JTklUIDAKKyNlbmRpZgorCisjaWZuZGVmIENQUF9IQVNfU1RBVElDX0NBU1QKKyNkZWZpbmUgQ1BQX0hBU19TVEFUSUNfQ0FTVCAwCS8vIHdvcmthcm91bmQgZm9yIGcrKyAyLjk1LjMKKyNlbmRpZgorCisjaWZuZGVmIElPU1RSRUFNX05BTUVTUEFDRQorI2RlZmluZSBJT1NUUkVBTV9OQU1FU1BBQ0UgMAorI2VuZGlmCisKKyNpZmRlZiBfX0dOVUdfXworIyAgaWYgKChfX0dOVUdfXyA8PSAyKSAmJiAoX19HTlVDX01JTk9SX18gPCA4KSkKKyMgICAgaWYgSEFWRV9UWVBFSU5GTworIyAgICAgIGluY2x1ZGUgPHR5cGVpbmZvPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUdfXykKKyMgIGlmIEhBVkVfQlVJTFRJTl9IIHx8IEhBVkVfR1hYX0JVSUxUSU5fSCB8fCBIQVZFX0dQUF9CVUlMVElOX0gKKyMgICAgaWYgRVRJUF9ORUVEU19NQVRIX0gKKyMgICAgICBpZiBFVElQX05FRURTX01BVEhfRVhDRVBUSU9OCisjICAgICAgICB1bmRlZiBleGNlcHRpb24KKyMgICAgICAgIGRlZmluZSBleGNlcHRpb24gbWF0aF9leGNlcHRpb24KKyMgICAgICBlbmRpZgorIyAgICAgIGluY2x1ZGUgPG1hdGguaD4KKyMgICAgZW5kaWYKKyMgICAgdW5kZWYgZXhjZXB0aW9uCisjICAgIGRlZmluZSBleGNlcHRpb24gYnVpbHRpbl9leGNlcHRpb24KKyMgICAgaWYgSEFWRV9HUFBfQlVJTFRJTl9ICisjICAgICBpbmNsdWRlIDxncHAvYnVpbHRpbi5oPgorIyAgICBlbGlmIEhBVkVfR1hYX0JVSUxUSU5fSAorIyAgICAgaW5jbHVkZSA8ZysrL2J1aWx0aW4uaD4KKyMgICAgZWxzZQorIyAgICAgaW5jbHVkZSA8YnVpbHRpbi5oPgorIyAgICBlbmRpZgorIyAgICB1bmRlZiBleGNlcHRpb24KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkIChfX1NVTlBST19DQykKKyMgIGluY2x1ZGUgPGdlbmVyaWMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmN1cnNlc19kbGwuaD4KKworZXh0ZXJuICJDIiB7CisjaWYgSEFWRV9WQUxVRVNfSAorIyAgaW5jbHVkZSA8dmFsdWVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGV0aS5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cit9CisKKy8vIExhbmd1YWdlIGZlYXR1cmVzCisjaWYgQ1BQX0hBU19QQVJBTV9JTklUCisjZGVmaW5lIE5DVVJTRVNfUEFSQU1fSU5JVCh2YWx1ZSkgPSB2YWx1ZQorI2Vsc2UKKyNkZWZpbmUgTkNVUlNFU19QQVJBTV9JTklUKHZhbHVlKSAvKm5vdGhpbmcqLworI2VuZGlmCisKKyNpZiBDUFBfSEFTX1NUQVRJQ19DQVNUCisjZGVmaW5lIFNUQVRJQ19DQVNUKHMpIHN0YXRpY19jYXN0PHM+CisjZWxzZQorI2RlZmluZSBTVEFUSUNfQ0FTVChzKSAocykKKyNlbmRpZgorCisvLyBGb3J3YXJkIERlY2xhcmF0aW9ucworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc1BhbmVsOworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc01lbnU7CitjbGFzcyBOQ1VSU0VTX0lNUEVYUCBOQ3Vyc2VzRm9ybTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0V4Y2VwdGlvbgoreworcHVibGljOgorICBjb25zdCBjaGFyICptZXNzYWdlOworICBpbnQgZXJyb3JubzsKKworICBOQ3Vyc2VzRXhjZXB0aW9uIChjb25zdCBjaGFyKiBtc2csIGludCBlcnIpCisgICAgOiBtZXNzYWdlKG1zZyksIGVycm9ybm8gKGVycikKKyAgICB7fTsKKworICBOQ3Vyc2VzRXhjZXB0aW9uIChjb25zdCBjaGFyKiBtc2cpCisgICAgOiBtZXNzYWdlKG1zZyksIGVycm9ybm8gKEVfU1lTVEVNX0VSUk9SKQorICAgIHt9OworCisgIE5DdXJzZXNFeGNlcHRpb24mIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzRXhjZXB0aW9uJiByaHMpCisgIHsKKyAgICBlcnJvcm5vID0gcmhzLmVycm9ybm87CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc0V4Y2VwdGlvbihjb25zdCBOQ3Vyc2VzRXhjZXB0aW9uJiByaHMpCisgICAgOiBtZXNzYWdlKHJocy5tZXNzYWdlKSwgZXJyb3JubyhyaHMuZXJyb3JubykKKyAgeworICB9CisKKyAgdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc25hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuICJOQ3Vyc2VzV2luZG93IjsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNFeGNlcHRpb24oKQorICB7CisgIH0KK307CisKK2NsYXNzIE5DVVJTRVNfSU1QRVhQIE5DdXJzZXNQYW5lbEV4Y2VwdGlvbiA6IHB1YmxpYyBOQ3Vyc2VzRXhjZXB0aW9uCit7CitwdWJsaWM6CisgIGNvbnN0IE5DdXJzZXNQYW5lbCogcDsKKworICBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24gKGNvbnN0IGNoYXIgKm1zZywgaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKG1zZywgZXJyKSwKKyAgICBwIChOVUxMKQorICAgIHt9OworCisgIE5DdXJzZXNQYW5lbEV4Y2VwdGlvbiAoY29uc3QgTkN1cnNlc1BhbmVsKiBwYW5lbCwKKwkJCSBjb25zdCBjaGFyICptc2csCisJCQkgaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKG1zZywgZXJyKSwKKyAgICBwIChwYW5lbCkKKyAgICB7fTsKKworICBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24gKGludCBlcnIpIDoKKyAgICBOQ3Vyc2VzRXhjZXB0aW9uICgicGFuZWwgbGlicmFyeSBlcnJvciIsIGVyciksCisgICAgcCAoTlVMTCkKKyAgICB7fTsKKworICBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24gKGNvbnN0IE5DdXJzZXNQYW5lbCogcGFuZWwsCisJCQkgaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKCJwYW5lbCBsaWJyYXJ5IGVycm9yIiwgZXJyKSwKKyAgICBwIChwYW5lbCkKKyAgICB7fTsKKworICBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24mIG9wZXJhdG9yPShjb25zdCBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24mIHJocykKKyAgeworICAgIGlmICh0aGlzICE9ICZyaHMpIHsKKyAgICAgIE5DdXJzZXNFeGNlcHRpb246Om9wZXJhdG9yPShyaHMpOworICAgICAgcCA9IHJocy5wOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBOQ3Vyc2VzUGFuZWxFeGNlcHRpb24oY29uc3QgTkN1cnNlc1BhbmVsRXhjZXB0aW9uJiByaHMpCisgICAgOiBOQ3Vyc2VzRXhjZXB0aW9uKHJocyksIHAocmhzLnApCisgIHsKKyAgfQorCisgIHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NuYW1lKCkgY29uc3QgeworICAgIHJldHVybiAiTkN1cnNlc1BhbmVsIjsKKyAgfQorCisgIHZpcnR1YWwgfk5DdXJzZXNQYW5lbEV4Y2VwdGlvbigpCisgIHsKKyAgfQorfTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc01lbnVFeGNlcHRpb24gOiBwdWJsaWMgTkN1cnNlc0V4Y2VwdGlvbgoreworcHVibGljOgorICBjb25zdCBOQ3Vyc2VzTWVudSogbTsKKworICBOQ3Vyc2VzTWVudUV4Y2VwdGlvbiAoY29uc3QgY2hhciAqbXNnLCBpbnQgZXJyKSA6CisgICAgTkN1cnNlc0V4Y2VwdGlvbiAobXNnLCBlcnIpLAorICAgIG0gKE5VTEwpCisgICAge307CisKKyAgTkN1cnNlc01lbnVFeGNlcHRpb24gKGNvbnN0IE5DdXJzZXNNZW51KiBtZW51LAorCQkJY29uc3QgY2hhciAqbXNnLAorCQkJaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKG1zZywgZXJyKSwKKyAgICBtIChtZW51KQorICAgIHt9OworCisgIE5DdXJzZXNNZW51RXhjZXB0aW9uIChpbnQgZXJyKSA6CisgICAgTkN1cnNlc0V4Y2VwdGlvbiAoIm1lbnUgbGlicmFyeSBlcnJvciIsIGVyciksCisgICAgbSAoTlVMTCkKKyAgICB7fTsKKworICBOQ3Vyc2VzTWVudUV4Y2VwdGlvbiAoY29uc3QgTkN1cnNlc01lbnUqIG1lbnUsCisJCQlpbnQgZXJyKSA6CisgICAgTkN1cnNlc0V4Y2VwdGlvbiAoIm1lbnUgbGlicmFyeSBlcnJvciIsIGVyciksCisgICAgbSAobWVudSkKKyAgICB7fTsKKworICBOQ3Vyc2VzTWVudUV4Y2VwdGlvbiYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNNZW51RXhjZXB0aW9uJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICBOQ3Vyc2VzRXhjZXB0aW9uOjpvcGVyYXRvcj0ocmhzKTsKKyAgICAgIG0gPSByaHMubTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc01lbnVFeGNlcHRpb24oY29uc3QgTkN1cnNlc01lbnVFeGNlcHRpb24mIHJocykKKyAgICA6IE5DdXJzZXNFeGNlcHRpb24ocmhzKSwgbShyaHMubSkKKyAgeworICB9CisKKyAgdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc25hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuICJOQ3Vyc2VzTWVudSI7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzTWVudUV4Y2VwdGlvbigpCisgIHsKKyAgfQorfTsKKworY2xhc3MgTkNVUlNFU19JTVBFWFAgTkN1cnNlc0Zvcm1FeGNlcHRpb24gOiBwdWJsaWMgTkN1cnNlc0V4Y2VwdGlvbgoreworcHVibGljOgorICBjb25zdCBOQ3Vyc2VzRm9ybSogZjsKKworICBOQ3Vyc2VzRm9ybUV4Y2VwdGlvbiAoY29uc3QgY2hhciAqbXNnLCBpbnQgZXJyKSA6CisgICAgTkN1cnNlc0V4Y2VwdGlvbiAobXNnLCBlcnIpLAorICAgIGYgKE5VTEwpCisgICAge307CisKKyAgTkN1cnNlc0Zvcm1FeGNlcHRpb24gKGNvbnN0IE5DdXJzZXNGb3JtKiBmb3JtLAorCQkJY29uc3QgY2hhciAqbXNnLAorCQkJaW50IGVycikgOgorICAgIE5DdXJzZXNFeGNlcHRpb24gKG1zZywgZXJyKSwKKyAgICBmIChmb3JtKQorICAgIHt9OworCisgIE5DdXJzZXNGb3JtRXhjZXB0aW9uIChpbnQgZXJyKSA6CisgICAgTkN1cnNlc0V4Y2VwdGlvbiAoImZvcm0gbGlicmFyeSBlcnJvciIsIGVyciksCisgICAgZiAoTlVMTCkKKyAgICB7fTsKKworICBOQ3Vyc2VzRm9ybUV4Y2VwdGlvbiAoY29uc3QgTkN1cnNlc0Zvcm0qIGZvcm0sCisJCQlpbnQgZXJyKSA6CisgICAgTkN1cnNlc0V4Y2VwdGlvbiAoImZvcm0gbGlicmFyeSBlcnJvciIsIGVyciksCisgICAgZiAoZm9ybSkKKyAgICB7fTsKKworICBOQ3Vyc2VzRm9ybUV4Y2VwdGlvbiYgb3BlcmF0b3I9KGNvbnN0IE5DdXJzZXNGb3JtRXhjZXB0aW9uJiByaHMpCisgIHsKKyAgICBpZiAodGhpcyAhPSAmcmhzKSB7CisgICAgICBOQ3Vyc2VzRXhjZXB0aW9uOjpvcGVyYXRvcj0ocmhzKTsKKyAgICAgIGYgPSByaHMuZjsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgTkN1cnNlc0Zvcm1FeGNlcHRpb24oY29uc3QgTkN1cnNlc0Zvcm1FeGNlcHRpb24mIHJocykKKyAgICA6IE5DdXJzZXNFeGNlcHRpb24ocmhzKSwgZihyaHMuZikKKyAgeworICB9CisKKyAgdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc25hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuICJOQ3Vyc2VzRm9ybSI7CisgIH0KKworICB2aXJ0dWFsIH5OQ3Vyc2VzRm9ybUV4Y2VwdGlvbigpCisgIHsKKyAgfQorfTsKKworI2lmICEoKGRlZmluZWQoX19HTlVHX18pICYmIGRlZmluZWQoX19FWENFUFRJT05TKSkgfHwgZGVmaW5lZChfX1NVTlBST19DQykpCisjICBpZiBIQVZFX0lPU1RSRUFNCisjICAgICBpbmNsdWRlIDxpb3N0cmVhbT4KKyMgICAgIGlmIElPU1RSRUFNX05BTUVTUEFDRQordXNpbmcgc3RkOjpjZXJyOwordXNpbmcgc3RkOjplbmRsOworIyAgICAgZW5kaWYKKyMgIGVsc2UKKyMgICAgIGluY2x1ZGUgPGlvc3RyZWFtLmg+CisjICBlbmRpZgorICAgZXh0ZXJuICJDIiB2b2lkIGV4aXQoaW50KTsKKyNlbmRpZgorCitpbmxpbmUgdm9pZCBUSFJPVyhjb25zdCBOQ3Vyc2VzRXhjZXB0aW9uICplKSB7CisjaWYgZGVmaW5lZChfX0dOVUdfXykgJiYgZGVmaW5lZChfX0VYQ0VQVElPTlMpCisjICBpZiAoKF9fR05VR19fIDw9IDIpICYmIChfX0dOVUNfTUlOT1JfXyA8IDgpKQorICAgICAgKCpsaWJfZXJyb3JfaGFuZGxlcikoZSA/IGUtPmNsYXNzbmFtZSgpIDogIiIsIGUgPyBlLT5tZXNzYWdlIDogIiIpOworI2Vsc2UKKyNkZWZpbmUgQ1BQX0hBU19UUllfQ0FUQ0ggMQorI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQorIyAgaWYgIWRlZmluZWQoX19TVU5QUk9fQ0NfQ09NUEFUKSB8fCAoX19TVU5QUk9fQ0NfQ09NUEFUIDwgNSkKKyAgZ2VuZXJpY2Vycm9yKDEsICgoZSAhPSAwKSA/IChjaGFyICopKGUtPm1lc3NhZ2UpIDogIiIpKTsKKyNlbHNlCisjZGVmaW5lIENQUF9IQVNfVFJZX0NBVENIIDEKKyNlbmRpZgorI2Vsc2UKKyAgaWYgKGUpCisgICAgY2VyciA8PCBlLT5tZXNzYWdlIDw8IGVuZGw7CisgIGV4aXQoMCk7CisjZW5kaWYKKworI2lmbmRlZiBDUFBfSEFTX1RSWV9DQVRDSAorI2RlZmluZSBDUFBfSEFTX1RSWV9DQVRDSCAwCisjZGVmaW5lIE5DVVJTRVNfQ1BQX1RSWQkJLyogbm90aGluZyAqLworI2RlZmluZSBOQ1VSU0VTX0NQUF9DQVRDSChlKQlpZiAoZmFsc2UpCisjZGVmaW5lIFRIUk9XUyhzKQkJLyogbm90aGluZyAqLworI2VsaWYgQ1BQX0hBU19UUllfQ0FUQ0gKKyAgdGhyb3cgKmU7CisjZGVmaW5lIE5DVVJTRVNfQ1BQX1RSWQkJdHJ5CisjZGVmaW5lIE5DVVJTRVNfQ1BQX0NBVENIKGUpCWNhdGNoKGUpCisjZGVmaW5lIFRIUk9XUyhzKQkJdGhyb3cocykKKyNlbmRpZgorfQorCisjZW5kaWYgLyogTkNVUlNFU19FVElQX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL2hlYWRlcnMgYi9uY3Vyc2VzLTUuNy9jKysvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmUwMzExCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL2hlYWRlcnMKQEAgLTAsMCArMSw0MCBAQAorIyBDKysgaGVhZGVycworIyAkSWQ6IGhlYWRlcnMsdiAxLjMgMjAwNi8xMi8yNCAxNjoyNTo0NSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk3CisjCiskKHNyY2RpcikvY3Vyc2VzYXBwLmgKKyQoc3JjZGlyKS9jdXJzZXNmLmgKKyQoc3JjZGlyKS9jdXJzZXNtLmgKKyQoc3JjZGlyKS9jdXJzZXNwLmgKKyQoc3JjZGlyKS9jdXJzZXN3LmgKKyQoc3JjZGlyKS9jdXJzc2xrLmgKK2V0aXAuaAorIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9jKysvaW50ZXJuYWwuaCBiL25jdXJzZXMtNS43L2MrKy9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjZlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jKysvaW50ZXJuYWwuaApAQCAtMCwwICsxLDYwIEBACisvLyAqIFRoaXMgbWFrZXMgZW1hY3MgaGFwcHkgLSotTW9kZTogQysrOy0qLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gJElkOiBpbnRlcm5hbC5oLHYgMS4xNiAyMDA4LzEwLzI1IDIxOjM1OjQ0IHRvbSBFeHAgJAorCisjaWZuZGVmIE5DVVJTRVNfQ1BMVVNfSU5URVJOQUxfSAorI2RlZmluZSBOQ1VSU0VTX0NQTFVTX0lOVEVSTkFMX0ggMQorCisjaW5jbHVkZSA8bmN1cnNlc19jZmcuaD4KKworI2lmIFVTRV9SQ1NfSURTCisjZGVmaW5lIE1PRFVMRV9JRChpZCkgc3RhdGljIGNvbnN0IGNoYXIgSWRlbnRbXSA9IGlkOworI2Vsc2UKKyNkZWZpbmUgTU9EVUxFX0lEKGlkKSAvKm5vdGhpbmcqLworI2VuZGlmCisKKyNpZm5kZWYgX1FOWF9TT1VSQ0UKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWZuZGVmIENUUkwKKyNkZWZpbmUgQ1RSTCh4KSAoKHgpICYgMHgxZikKKyNlbmRpZgorCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2VuZGlmIC8qIE5DVVJTRVNfQ1BMVVNfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvYysrL21vZHVsZXMgYi9uY3Vyc2VzLTUuNy9jKysvbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRmYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvYysrL21vZHVsZXMKQEAgLTAsMCArMSw0NSBAQAorIyBQcm9ncmFtIG1vZHVsZXMKKyMgJElkOiBtb2R1bGVzLHYgMS43IDIwMDYvMTIvMjQgMDA6NTM6MDggdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQkxOTk1LW9uCisjCisKK0AgYmFzZQorY3Vyc2VzZgkJYysrCQkkKHNyY2RpcikJJChjdXJzZXNmX2gpICQoY3Vyc2VzYXBwX2gpCitjdXJzZXNtCQljKysJCSQoc3JjZGlyKQkkKGN1cnNlc21faCkgJChjdXJzZXNhcHBfaCkKK2N1cnNlc3AJCWMrKwkJJChzcmNkaXIpCSQoY3Vyc2VzcF9oKQorY3Vyc2VzdwkJYysrCQkkKHNyY2RpcikJJChjdXJzZXN3X2gpCitjdXJzZXNwYWQJYysrCQkkKHNyY2RpcikJJChjdXJzZXN3X2gpCitjdXJzc2xrCQljKysJCSQoc3JjZGlyKQkkKGN1cnNzbGtfaCkgJChjdXJzZXNhcHBfaCkKK2N1cnNlc2FwcAljKysJCSQoc3JjZGlyKQkkKGN1cnNlc2FwcF9oKQorY3Vyc2VzbWFpbgljKysJCSQoc3JjZGlyKQkkKGN1cnNlc2FwcF9oKQorZGVtbwkJYysrCQkkKHNyY2RpcikJJChjdXJzZXNmX2gpICQoY3Vyc2VzbV9oKSAkKGN1cnNlc2FwcF9oKQorCisjIHZpbGU6bWFrZW1vZGUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2NvbmZpZy5ndWVzcyBiL25jdXJzZXMtNS43L2NvbmZpZy5ndWVzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNzYwN2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTUyNiBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4CisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAwOC0wNC0xNCcKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lciA8cGVyQGJvdGhuZXIuY29tPi4KKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgVGhpcyBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUgc2ltaWxhciB0bworIyBjb25maWcuc3ViLiAgSWYgaXQgc3VjY2VlZHMsIGl0IHByaW50cyB0aGUgc3lzdGVtIG5hbWUgb24gc3Rkb3V0LCBhbmQKKyMgZXhpdHMgd2l0aCAwLiAgT3RoZXJ3aXNlLCBpdCBleGl0cyB3aXRoIDEuCisjCisjIFRoZSBwbGFuIGlzIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzIGlmIHlvdQorIyBkb24ndCBzcGVjaWZ5IGFuIGV4cGxpY2l0IGJ1aWxkIHN5c3RlbSB0eXBlLgorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXQorCitPdXRwdXQgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBvZiB0aGUgc3lzdGVtIFxgJG1lJyBpcyBydW4gb24uCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKKworT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIiA+JjIKKyAgICAgICBleGl0IDEgOzsKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKK2lmIHRlc3QgJCMgIT0gMDsgdGhlbgorICBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgZXhpdCAxCitmaQorCit0cmFwICdleGl0IDEnIDEgMiAxNQorCisjIENDX0ZPUl9CVUlMRCAtLSBjb21waWxlciB1c2VkIGJ5IHRoaXMgc2NyaXB0LiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhCisjIGNvbXBpbGVyIHRvIGFpZCBpbiBzeXN0ZW0gZGV0ZWN0aW9uIGlzIGRpc2NvdXJhZ2VkIGFzIGl0IHJlcXVpcmVzCisjIHRlbXBvcmFyeSBmaWxlcyB0byBiZSBjcmVhdGVkIGFuZCwgYXMgeW91IGNhbiBzZWUgYmVsb3csIGl0IGlzIGEKKyMgaGVhZGFjaGUgdG8gZGVhbCB3aXRoIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KKworIyBIaXN0b3JpY2FsbHksIGBDQ19GT1JfQlVJTEQnIHVzZWQgdG8gYmUgbmFtZWQgYEhPU1RfQ0MnLiBXZSBzdGlsbAorIyB1c2UgYEhPU1RfQ0MnIGlmIGRlZmluZWQsIGJ1dCBpdCBpcyBkZXByZWNhdGVkLgorCisjIFBvcnRhYmxlIHRtcCBkaXJlY3RvcnkgY3JlYXRpb24gaW5zcGlyZWQgYnkgdGhlIEF1dG9jb25mIHRlYW0uCisKK3NldF9jY19mb3JfYnVpbGQ9JwordHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7Cit0cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOworOiAke1RNUERJUj0vdG1wfSA7CisgeyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAorIHsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgOyB9IHx8CisgeyB0bXA9JFRNUERJUi9jZy0kJCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApICYmIGVjaG8gIldhcm5pbmc6IGNyZWF0aW5nIGluc2VjdXJlIHRlbXAgZGlyZWN0b3J5IiA+JjIgOyB9IHx8CisgeyBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMiA7IGV4aXQgMSA7IH0gOworZHVtbXk9JHRtcC9kdW1teSA7Cit0bXBmaWxlcz0iJGR1bW15LmMgJGR1bW15Lm8gJGR1bW15LnJlbCAkZHVtbXkiIDsKK2Nhc2UgJENDX0ZPUl9CVUlMRCwkSE9TVF9DQywkQ0MgaW4KKyAsLCkgICAgZWNobyAiaW50IHg7IiA+ICRkdW1teS5jIDsKKwlmb3IgYyBpbiBjYyBnY2MgYzg5IGM5OSA7IGRvCisJICBpZiAoJGMgLWMgLW8gJGR1bW15Lm8gJGR1bW15LmMpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgICAgIENDX0ZPUl9CVUlMRD0iJGMiOyBicmVhayA7CisJICBmaSA7CisJZG9uZSA7CisJaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geCA7IHRoZW4KKwkgIENDX0ZPUl9CVUlMRD1ub19jb21waWxlcl9mb3VuZCA7CisJZmkKKwk7OworICwsKikgICBDQ19GT1JfQlVJTEQ9JENDIDs7CisgLCosKikgIENDX0ZPUl9CVUlMRD0kSE9TVF9DQyA7OworZXNhYyA7IHNldF9jY19mb3JfYnVpbGQ9IDsnCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gZmluZCB1bmFtZSBvbiBhIFB5cmFtaWQgT1N4IHdoZW4gcnVuIGluIHRoZSBCU0QgdW5pdmVyc2UuCisjIChnaGF6aUBub2MucnV0Z2Vycy5lZHUgMTk5NC0wOC0yNCkKK2lmICh0ZXN0IC1mIC8uYXR0YmluL3VuYW1lKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJUEFUSD0kUEFUSDovLmF0dGJpbiA7IGV4cG9ydCBQQVRICitmaQorCitVTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KK1VOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1JFTEVBU0U9dW5rbm93bgorVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KK1VOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cHBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCisJIyAqLSotbmV0YnNkZWNvZmYqIGFuZCAqLSotbmV0YnNkKi4gIEZvciB0YXJnZXRzIHRoYXQgcmVjZW50bHkKKwkjIHN3aXRjaGVkIHRvIEVMRiwgKi0qLW5ldGJzZCogd291bGQgc2VsZWN0IHRoZSBvbGQKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoaXMgcHJvdmlkZXMgYm90aCBmb3J3YXJkCisJIyBjb21wYXRpYmlsaXR5IGFuZCBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgdGhlCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuCisJIworCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgorCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgorCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YCgvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKWAKKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKKwkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OworCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OworCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7CisJICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKKwkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGwKKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJICAgICAgICBvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgorCSAgICBEZWJpYW4qKQorCQlyZWxlYXNlPSctZ251JworCQk7OworCSAgICAqKQorCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCSAgICAgICAgVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCWV4aXQgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorICAgICAgICBlY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybTpyaXNjb3M6KjoqfGFybTpSSVNDT1M6KjoqKQorCWVjaG8gYXJtLXVua25vd24tcmlzY29zCisJZXhpdCA7OworICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqIHwgU1I4MDAwOkhJLVVYL01QUDoqOiopCisJZWNobyBocHBhMS4xLWhpdGFjaGktaGl1eG1wcAorCWV4aXQgOzsKKyAgICBQeXJhbWlkKjpPU3gqOio6KiB8IE1JUyo6T1N4KjoqOiogfCBNSVMqOlNNUF9EQy1PU3gqOio6KikKKwkjIGFrZWVAd3BkaXMwMy53cGFmYi5hZi5taWwgKEVhcmxlIEYuIEFrZSkgY29udHJpYnV0ZWQgTUlTIGFuZCBOSUxFLgorCWlmIHRlc3QgImAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgIiA9IGF0dCA7IHRoZW4KKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtc3lzdjMKKwllbHNlCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAorCWZpCisJZXhpdCA7OworICAgIE5JTEUqOio6KjpkY29zeCkKKwllY2hvIHB5cmFtaWQtcHlyYW1pZC1zdnI0CisJZXhpdCA7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCWVjaG8gc3BhcmMtaWNsLW54NgorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDppc2lzOjQuMio6NyopCisJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCisJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgc3VuNEg6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1oYWwtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwllY2hvIGkzODYtcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLW1pbGFuLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKjoqTWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorICAgICAgICAjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcworICAgICAgICBVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCisJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCSAgICBlbHNlCisJCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQorCSAgICBmaQorCWVsc2UKKwkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJZmkKKyAJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1Nl0pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisgICAgICAgICAgICAgICAgICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisgICAgICAgICAgICAgICAgICAgICAgNTI4KSBIUF9BUkNIPSJocHBhMS4xIiA7OyAjIENQVV9QQV9SSVNDMV8xCisgICAgICAgICAgICAgICAgICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworICAgICAgICAgICAgICAgICAgICAgICAgICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMgOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eICAgICAgICAgICAgICAvLycgPDwgRU9GID4kZHVtbXkuYworCisgICAgICAgICAgICAgICNkZWZpbmUgX0hQVVhfU09VUkNFCisgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisgICAgICAgICAgICAgIGludCBtYWluICgpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorICAgICAgICAgICAgICAgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3B1KQorICAgICAgICAgICAgICAJeworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgCSAgICBzd2l0Y2ggKGJpdHMpCisgICAgICAgICAgICAgIAkJeworICAgICAgICAgICAgICAJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJfSBicmVhazsKKyAgICAgICAgICAgICAgI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKyAgICAgICAgICAgICAgCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgIAlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgIGV4aXQgKDApOworICAgICAgICAgICAgICB9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIF9fTFA2NF9fID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlIUF9BUkNIPSJocHBhMi4wdyIKKwkgICAgZWxzZQorCQlIUF9BUkNIPSJocHBhNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7SFBfQVJDSH0taHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIGlhNjQ6SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWVjaG8gaWE2NC1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgMzA1MCo6SEktVVg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDx1bmlzdGQuaD4KKwlpbnQKKwltYWluICgpCisJeworCSAgbG9uZyBjcHUgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCSAgLyogVGhlIG9yZGVyIG1hdHRlcnMsIGJlY2F1c2UgQ1BVX0lTX0hQX01DNjhLIGVycm9uZW91c2x5IHJldHVybnMKKwkgICAgIHRydWUgZm9yIENQVV9QQV9SSVNDMV8wLiAgQ1BVX0lTX1BBX1JJU0MgcmV0dXJucyBjb3JyZWN0CisJICAgICByZXN1bHRzLCBob3dldmVyLiAgKi8KKwkgIGlmIChDUFVfSVNfUEFfUklTQyAoY3B1KSkKKwkgICAgeworCSAgICAgIHN3aXRjaCAoY3B1KQorCQl7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMl8wOiBwdXRzICgiaHBwYTIuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgZGVmYXVsdDogcHV0cyAoImhwcGEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKENQVV9JU19IUF9NQzY4SyAoY3B1KSkKKwkgICAgcHV0cyAoIm02OGstaGl0YWNoaS1oaXV4d2UyIik7CisJICBlbHNlIHB1dHMgKCJ1bmtub3duLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZXhpdCAoMCk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgorCWV4aXQgOzsKKyAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCisJZWNobyBocHBhMS4xLWhwLWJzZAorCWV4aXQgOzsKKyAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1ic2QKKwlleGl0IDs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAorCWV4aXQgOzsKKyAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtb3NmCisJZXhpdCA7OworICAgIGhwOD8/Ok9TRjE6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1vc2YKKwlleGl0IDs7CisgICAgaSo4NjpPU0YxOio6KikKKwlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtaworCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQorCWZpCisJZXhpdCA7OworICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKKwllY2hvIGhwcGExLjEtaHAtbGl0ZXMKKwlleGl0IDs7CisgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKKwllY2hvIGMxLWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorICAgICAgICBleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisgICAgICAgIGV4aXQgOzsKKyAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKyAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKyAgICAgICAgZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3BhcmMqOkJTRC9PUzoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6QlNEL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkZyZWVCU0Q6KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICBwYzk4KQorCQllY2hvIGkzODYtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCWVzYWMKKwlleGl0IDs7CisgICAgaSo6Q1lHV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KKwlleGl0IDs7CisgICAgKjpNSU5HVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisgICAgCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOlBXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCisJZXhpdCA7OworICAgICo6SW50ZXJpeCo6WzM0NTZdKikKKyAgICAJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHg4NikKKwkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgRU02NFQgfCBhdXRoZW50aWNhbWQpCisJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi1nbnVgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLWdudQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYXJtKjpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXworCXRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyBjcmlzLWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gY3Jpc3YzMi1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorICAgIAllY2hvIGZydi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiBtaXBzCisJI3VuZGVmIG1pcHNlbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPW1pcHNlbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9bWlwcworCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJworCSAgICAvXkNQVS97CisJCXM6IDo6ZworCQlwCisJICAgIH0nYCIKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCTs7CisgICAgbWlwczY0OkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjdW5kZWYgQ1BVCisJI3VuZGVmIG1pcHM2NAorCSN1bmRlZiBtaXBzNjRlbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPW1pcHM2NGVsCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCUNQVT1taXBzNjQKKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15DUFUveworCQlzOiA6OmcKKwkJcAorCSAgICB9J2AiCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwk7OworICAgIG9yMzI6TGludXg6KjoqKQorCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKyAgICAgICAgZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgbGQuc28uMSA+L2Rldi9udWxsCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LWdudSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHZheDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeDg2XzY0OkxpbnV4Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCSMgVGhlIEJGRCBsaW5rZXIga25vd3Mgd2hhdCB0aGUgZGVmYXVsdCBvYmplY3QgZmlsZSBmb3JtYXQgaXMsIHNvCisJIyBmaXJzdCBzZWUgaWYgaXQgd2lsbCB0ZWxsIHVzLiBjZCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJldmVudAorCSMgcHJvYmxlbXMgd2l0aCBvdGhlciBwcm9ncmFtcyBvciBkaXJlY3RvcmllcyBjYWxsZWQgYGxkJyBpbiB0aGUgcGF0aC4KKwkjIFNldCBMQ19BTEw9QyB0byBlbnN1cmUgbGQgb3V0cHV0cyBtZXNzYWdlcyBpbiBFbmdsaXNoLgorCWxkX3N1cHBvcnRlZF90YXJnZXRzPWBjZCAvOyBMQ19BTEw9QyBsZCAtLWhlbHAgMj4mMSBcCisJCQkgfCBzZWQgLW5lICcvc3VwcG9ydGVkIHRhcmdldHM6LyFkCisJCQkJICAgIHMvWyAJXVsgCV0qLyAvZworCQkJCSAgICBzLy4qc3VwcG9ydGVkIHRhcmdldHM6ICovLworCQkJCSAgICBzLyAuKi8vCisJCQkJICAgIHAnYAorICAgICAgICBjYXNlICIkbGRfc3VwcG9ydGVkX3RhcmdldHMiIGluCisJICBlbGYzMi1pMzg2KQorCQlURU5UQVRJVkU9IiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251IgorCQk7OworCSAgYS5vdXQtaTM4Ni1saW51eCkKKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVhb3V0IgorCQlleGl0IDs7CisJICAiIikKKwkJIyBFaXRoZXIgYSBwcmUtQkZEIGEub3V0IGxpbmtlciAobGludXgtZ251b2xkbGQpIG9yCisJCSMgb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgorCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudW9sZGxkIgorCQlleGl0IDs7CisJZXNhYworCSMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRlZmF1bHQgY29tcGlsZXIgaXMgYS5vdXQgb3IgZWxmCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmZGVmIF9fRUxGX18KKwkjIGlmZGVmIF9fR0xJQkNfXworCSMgIGlmIF9fR0xJQkNfXyA+PSAyCisJTElCQz1nbnUKKwkjICBlbHNlCisJTElCQz1nbnVsaWJjMQorCSMgIGVuZGlmCisJIyBlbHNlCisJTElCQz1nbnVsaWJjMQorCSMgZW5kaWYKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19QR0kpIHx8IGRlZmluZWQoX19TVU5QUk9fQykgfHwgZGVmaW5lZChfX1NVTlBST19DQykKKwlMSUJDPWdudQorCSNlbHNlCisJTElCQz1nbnVhb3V0CisJI2VuZGlmCisJI2VuZGlmCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKK0VPRgorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15MSUJDL3sKKwkJczogOjpnCisJCXAKKwkgICAgfSdgIgorCXRlc3QgeCIke0xJQkN9IiAhPSB4ICYmIHsKKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCQlleGl0CisJfQorCXRlc3QgeCIke1RFTlRBVElWRX0iICE9IHggJiYgeyBlY2hvICIke1RFTlRBVElWRX0iOyBleGl0OyB9CisJOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKyAgICAgICAgIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorICAgICAgICAjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisgICAgICAgICMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisgICAgICAgICMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LjAqOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisgICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgorCWZpCisJZXhpdCA7OworICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgorICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpMzg2LgorCWVjaG8gaTM4Ni1wYy1tc2Rvc2RqZ3BwCisgICAgICAgIGV4aXQgOzsKKyAgICBJbnRlbDpNYWNoOjMqOiopCisJZWNobyBpMzg2LXBjLW1hY2gzCisJZXhpdCA7OworICAgIHBhcmFnb246KjoqOiopCisJZWNobyBpODYwLWludGVsLW9zZjEKKwlleGl0IDs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CisJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgorCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKKwlmaQorCWV4aXQgOzsKKyAgICBtaW5pKjpDVElYOlNZUyo1OiopCisJIyAibWluaWZyYW1lIgorCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCisJZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJZWNobyBtNjhrLWRpYWItZG5peAorCWV4aXQgOzsKKyAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQorCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKKyAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKKwlPU19SRUw9JycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisgICAgICAgIC9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorICAgICAgICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuMCo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKSAjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorICAgICAgICAgICAgICAgICAgICAgICMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KKyAgICAgICAgZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorICAgICAgICBleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCSAgICAgICAgZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWVsc2UKKwkgICAgICAgIGVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1pMzg2CisJCVVOQU1FX01BQ0hJTkU9cGMKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpRTlg6Kjo0KikKKwllY2hvIGkzODYtcGMtcW54CisJZXhpdCA7OworICAgIE5TRS0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zZS10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU1ItPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc3ItdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpOb25TdG9wLVVYOio6KikKKwllY2hvIG1pcHMtY29tcGFxLW5vbnN0b3B1eAorCWV4aXQgOzsKKyAgICBCUzIwMDA6UE9TSVgqOio6KikKKwllY2hvIGJzMjAwMC1zaWVtZW5zLXN5c3YKKwlleGl0IDs7CisgICAgRFMvKjpVTklYX1N5c3RlbV9WOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tJHtVTkFNRV9TWVNURU19LSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpQbGFuOToqOiopCisJIyAidW5hbWUgLW0iIGlzIG5vdCBjb25zaXN0ZW50LCBzbyB1c2UgJGNwdXR5cGUgaW5zdGVhZC4gMzg2CisJIyBpcyBjb252ZXJ0ZWQgdG8gaTM4NiBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciB4ODYKKwkjIG9wZXJhdGluZyBzeXN0ZW1zLgorCWlmIHRlc3QgIiRjcHV0eXBlIiA9ICIzODYiOyB0aGVuCisJICAgIFVOQU1FX01BQ0hJTkU9aTM4NgorCWVsc2UKKwkgICAgVU5BTUVfTUFDSElORT0iJGNwdXR5cGUiCisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1wbGFuOQorCWV4aXQgOzsKKyAgICAqOlRPUFMtMTA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMTAKKwlleGl0IDs7CisgICAgKjpURU5FWDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRlbmV4CisJZXhpdCA7OworICAgIEtTMTA6VE9QUy0yMDoqOiogfCBLTDEwOlRPUFMtMjA6KjoqIHwgVFlQRTQ6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC1kZWMtdG9wczIwCisJZXhpdCA7OworICAgIFhLTC0xOlRPUFMtMjA6KjoqIHwgVFlQRTU6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC14a2wtdG9wczIwCisJZXhpdCA7OworICAgICo6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOklUUzoqOiopCisJZWNobyBwZHAxMC11bmtub3duLWl0cworCWV4aXQgOzsKKyAgICBTRUk6KjoqOlNFSVVYKQorICAgICAgICBlY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRyYWdvbkZseToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCWV4aXQgOzsKKyAgICAqOipWTVM6KjoqKQorICAgIAlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7Citlc2FjCisKKyNlY2hvICcoTm8gdW5hbWUgY29tbWFuZCBvciB1bmFtZSBvdXRwdXQgbm90IHJlY29nbml6ZWQuKScgMT4mMgorI2VjaG8gIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgMT4mMgorCitldmFsICRzZXRfY2NfZm9yX2J1aWxkCitjYXQgPiRkdW1teS5jIDw8RU9GCisjaWZkZWYgX1NFUVVFTlRfCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCittYWluICgpCit7CisjaWYgZGVmaW5lZCAoc29ueSkKKyNpZiBkZWZpbmVkIChNSVBTRUIpCisgIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCisgICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCisgIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKKyNpZmRlZiBORVdTT1M0CisgICAgICAgICAgIjQiCisjZWxzZQorCSAgIiIKKyNlbmRpZgorICAgICAgICAgKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19hcm0pICYmIGRlZmluZWQgKF9fYWNvcm4pICYmIGRlZmluZWQgKF9fdW5peCkKKyAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCisgIHByaW50ZiAoIm02OGstaHAtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5lWFQpCisjaWYgIWRlZmluZWQgKF9fQVJDSElURUNUVVJFX18pCisjZGVmaW5lIF9fQVJDSElURUNUVVJFX18gIm02OGsiCisjZW5kaWYKKyAgaW50IHZlcnNpb247CisgIHZlcnNpb249YChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsYDsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgICAgc3RydWN0IHV0c25hbWUgdW47CisKKyAgICB1bmFtZSgmdW4pOworCisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYyIiwgMikgPT0gMCkgeworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgyXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOworCisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyMgaWYgIWRlZmluZWQgKHVsdHJpeCkKKyMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgaWYgZGVmaW5lZCAoQlNEKQorIyAgIGlmIEJTRCA9PSA0MworICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyMgICBlbHNlCisjICAgIGlmIEJTRCA9PSAxOTkwMDYKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zcmVub1xuIik7IGV4aXQgKDApOworIyAgICBlbHNlCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgIGVuZGlmCisjIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChhbGxpYW50KSAmJiBkZWZpbmVkIChpODYwKQorICBwcmludGYgKCJpODYwLWFsbGlhbnQtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworICBleGl0ICgxKTsKK30KK0VPRgorCiskQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCisjIEFwb2xsb3MgcHV0IHRoZSBzeXN0ZW0gdHlwZSBpbiB0aGUgZW52aXJvbm1lbnQuCisKK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQorCisjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCisKK2lmIFsgLXggL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyBdCit0aGVuCisgICAgY2FzZSBgZ2V0c3lzaW5mbyAtZiBjcHVfdHlwZWAgaW4KKyAgICBjMSopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMyKikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIGMzNCopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMzgqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzQqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBlc2FjCitmaQorCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKK2FuZAorICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvY29uZmlnLnN1YiBiL25jdXJzZXMtNS43L2NvbmZpZy5zdWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTY0OTM1MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNjczIEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDgtMDYtMTYnCisKKyMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgorIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCisjIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKKyAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgb3M9LSRtYXliZV9vcworICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgOzsKKyAgKikKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzLy1bXi1dKiQvLydgCisgICAgaWYgWyAkYmFzaWNfbWFjaGluZSAhPSAkMSBdCisgICAgdGhlbiBvcz1gZWNobyAkMSB8IHNlZCAncy8uKi0vLS8nYAorICAgIGVsc2Ugb3M9OyBmaQorICAgIDs7Citlc2FjCisKKyMjIyBMZXQncyByZWNvZ25pemUgY29tbW9uIG1hY2hpbmVzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcyBzbworIyMjIHRoYXQgdGhpbmdzIGxpa2UgY29uZmlnLnN1YiBkZWNzdGF0aW9uLTMxMDAgd29yay4gIFdlIGFsc28KKyMjIyByZWNvZ25pemUgc29tZSBtYW51ZmFjdHVyZXJzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcywgc28gd2UKKyMjIyBjYW4gcHJvdmlkZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIGJlbG93LgorY2FzZSAkb3MgaW4KKwktc3VuKm9zKikKKwkJIyBQcmV2ZW50IGZvbGxvd2luZyBjbGF1c2UgZnJvbSBoYW5kbGluZyB0aGlzIGludmFsaWQgaW5wdXQuCisJCTs7CisJLWRlYyogfCAtbWlwcyogfCAtc2VxdWVudCogfCAtZW5jb3JlKiB8IC1wYzUzMiogfCAtc2dpKiB8IC1zb255KiB8IFwKKwktYXR0KiB8IC03MzAwKiB8IC0zMzAwKiB8IC1kZWx0YSogfCAtbW90b3JvbGEqIHwgLXN1blsyMzRdKiB8IFwKKwktdW5pY29tKiB8IC1pYm0qIHwgLW5leHQgfCAtaHAgfCAtaXNpKiB8IC1hcG9sbG8gfCAtYWx0b3MqIHwgXAorCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCisJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKKwktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5KQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zY291dCkKKwkJOzsKKwktd3JzKQorCQlvcz0tdnh3b3JrcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c29zKikKKwkJb3M9LWNob3J1c29zCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKyAJLWNob3J1c3JkYikKKyAJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorIAkJOzsKKwktaGl1eCopCisJCW9zPS1oaXV4d2UyCisJCTs7CisJLXNjbzYpCisJCW9zPS1zY281djYKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281KQorCQlvcz0tc2NvMy4ydjUKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY280KQorCQlvcz0tc2NvMy4ydjQKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjIuWzQtOV0qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LydgCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4ydls0LTldKikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbyopCisJCW9zPS1zY28zLjJ2MgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXVkayopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktaXNjKQorCQlvcz0taXNjMi4yCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktY2xpeCopCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCisJCTs7CisJLWlzYyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktbHlueCopCisJCW9zPS1seW54b3MKKwkJOzsKKwktcHR4KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCisJCTs7CisJLXdpbmRvd3NudCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKKwkJOzsKKwktcHNvcyopCisJCW9zPS1wc29zCisJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7Citlc2FjCisKKyMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzIzNDVdIHwgYXJtdlszNDVdW2xiXSB8IGF2ciB8IGF2cjMyIFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAorCXwgcHlyYW1pZCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IHwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB2ODUwIHwgdjg1MGUgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGspCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMikKKwkJIyBNb3Rvcm9sYSA2OEhDMTEvMTIuCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCisJfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAorCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiBcCisJfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKKwl8IGF2ci0qIHwgYXZyMzItKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiB8IGM1NHgtKiB8IGM1NXgtKiB8IGM2eC0qIFwKKwl8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisJfCBlbHhzaS0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGg4MzAwLSogfCBoODUwMC0qIFwKKwl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAorCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcm9tcC0qIHwgcnM2MDAwLSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdHJvbmdhcm0tKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiB8IHRodW1iLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogfCB0aWxlLSogXAorCXwgdHJvbi0qIFwKKwl8IHY4NTAtKiB8IHY4NTBlLSogfCB2YXgtKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogfCB4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAorCXwgeW1wLSogXAorCXwgejhrLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisgICAgCWFiYWN1cykKKwkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgorCQk7OworCWFkb2JlNjhrKQorCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQorCQlvcz0tc2NvdXQKKwkJOzsKKwlhbGxpYW50IHwgZng4MCkKKwkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKKwkJOzsKKwlhbHRvcyB8IGFsdG9zMzA2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCisJCTs7CisJYW0yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCisJCW9zPS1ic2QKKwkJOzsKKwlhbWQ2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJOzsKKwlhbWQ2NC0qKQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWFtZGFobCkKKwkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCisJCW9zPS1zeXN2CisJCTs7CisJYW1pZ2EgfCBhbWlnYS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQk7OworCWFtaWdhb3MgfCBhbWlnYWRvcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwlhbWlnYXVuaXggfCBhbWl4KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tc3lzdjQKKwkJOzsKKwlhcG9sbG82OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tc3lzdgorCQk7OworCWFwb2xsbzY4YnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1ic2QKKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKyAgICAgICAgY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTYpCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworIyBJJ20gbm90IHN1cmUgd2hhdCAiU3lzdjMyIiBtZWFucy4gIFNob3VsZCB0aGlzIGJlIHN5c3YzLjI/CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbTY4a25vbW11KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwltNjhrbm9tbXUtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCW04OGstb21yb24qKQorCQliYXNpY19tYWNoaW5lPW04OGstb21yb24KKwkJOzsKKwltYWdudW0gfCBtMzIzMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLW1pcHMKKwkJb3M9LXN5c3YKKwkJOzsKKwltZXJsaW4pCisJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlaworCQlvcz0tc3lzdgorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5jcjMwMDApCisJCWJhc2ljX21hY2hpbmU9aTQ4Ni1uY3IKKwkJb3M9LXN5c3Y0CisJCTs7CisJbmV0YnNkMzg2KQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tbmV0YnNkCisJCTs7CisJbmV0d2luZGVyKQorCQliYXNpY19tYWNoaW5lPWFybXY0bC1yZWJlbAorCQlvcz0tbGludXgKKwkJOzsKKwluZXdzIHwgbmV3czcwMCB8IG5ld3M4MDAgfCBuZXdzOTAwKQorCQliYXNpY19tYWNoaW5lPW02OGstc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3czEwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDMwLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MtMzYwMCB8IHJpc2MtbmV3cykKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5lY3Y3MCkKKwkJYmFzaWNfbWFjaGluZT12NzAtbmVjCisJCW9zPS1zeXN2CisJCTs7CisJbmV4dCB8IG0qLW5leHQgKQorCQliYXNpY19tYWNoaW5lPW02OGstbmV4dAorCQljYXNlICRvcyBpbgorCQkgICAgLW5leHRzdGVwKiApCisJCQk7OworCQkgICAgLW5zMiopCisJCSAgICAgIG9zPS1uZXh0c3RlcDIKKwkJCTs7CisJCSAgICAqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAzCisJCQk7OworCQllc2FjCisJCTs7CisJbmgzMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmhbNDVdMDAwKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmluZHk5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbmluZHkKKwkJOzsKKwltb245NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbW9uOTYwCisJCTs7CisJbm9uc3RvcHV4KQorCQliYXNpY19tYWNoaW5lPW1pcHMtY29tcGFxCisJCW9zPS1ub25zdG9wdXgKKwkJOzsKKwlucDEpCisJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCisJCTs7CisJbnNyLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uc3ItdGFuZGVtCisJCTs7CisJb3A1MG4tKiB8IG9wNjBjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJb3M9LXByb2VsZgorCQk7OworCW9wZW5yaXNjIHwgb3BlbnJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1vcjMyLXVua25vd24KKwkJOzsKKwlvczQwMCkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tb3M0MDAKKwkJOzsKKwlPU0U2ODAwMCB8IG9zZTY4MDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJb3M2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ub25lCisJCW9zPS1vczY4aworCQk7OworCXBhLWhpdGFjaGkpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJcGFyYWdvbikKKwkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCisJCW9zPS1vc2YKKwkJOzsKKwlwYXJpc2MpCisJCWJhc2ljX21hY2hpbmU9aHBwYS11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCXBhcmlzYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGEtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJcGJkKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXR0aQorCQk7OworCXBiYikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXR0aQorCQk7OworCXBjNTMyIHwgcGM1MzItKikKKwkJYmFzaWNfbWFjaGluZT1uczMyay1wYzUzMgorCQk7OworCXBjOTgpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQk7OworCXBjOTgtKikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bSB8IHA1IHwgazUgfCBrNiB8IG5leGdlbiB8IHZpYWMzKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJOzsKKwlwZW50aXVtcHJvIHwgcDYgfCA2eDg2IHwgYXRobG9uIHwgYXRobG9uXyopCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW1paSB8IHBlbnRpdW0yIHwgcGVudGl1bWlpaSB8IHBlbnRpdW0zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtNCkKKwkJYmFzaWNfbWFjaGluZT1pNzg2LXBjCisJCTs7CisJcGVudGl1bS0qIHwgcDUtKiB8IGs1LSogfCBrNi0qIHwgbmV4Z2VuLSogfCB2aWFjMy0qKQorCQliYXNpY19tYWNoaW5lPWk1ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtcHJvLSogfCBwNi0qIHwgNng4Ni0qIHwgYXRobG9uLSopCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1paS0qIHwgcGVudGl1bTItKiB8IHBlbnRpdW1paWktKiB8IHBlbnRpdW0zLSopCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW00LSopCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBuKQorCQliYXNpY19tYWNoaW5lPXBuLWdvdWxkCisJCTs7CisJcG93ZXIpCWJhc2ljX21hY2hpbmU9cG93ZXItaWJtCisJCTs7CisJcHBjKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQk7OworCXBwYy0qKQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGNsZSB8IHBvd2VycGNsaXR0bGUgfCBwcGMtbGUgfCBwb3dlcnBjLWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtdW5rbm93bgorCQk7OworCXBwY2xlLSogfCBwb3dlcnBjbGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjQpCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LXVua25vd24KKwkJOzsKKwlwcGM2NC0qKSBiYXNpY19tYWNoaW5lPXBvd2VycGM2NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0bGUgfCBwb3dlcnBjNjRsaXR0bGUgfCBwcGM2NC1sZSB8IHBvd2VycGM2NC1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtdW5rbm93bgorCQk7OworCXBwYzY0bGUtKiB8IHBvd2VycGM2NGxpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtaWJtCisJCTs7CisJcHczMikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXVua25vd24KKwkJb3M9LXB3MzIKKwkJOzsKKwlyZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyb202OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwlybVs0Nl0wMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNpZW1lbnMKKwkJOzsKKwlydHBjIHwgcnRwYy0qKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJczM5MCB8IHMzOTAtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQorCQk7OworCXMzOTB4IHwgczM5MHgtKikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsKKwlzYTI5MjAwKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlzYjEpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KKwkJOzsKKwlzYjFlbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCisJCTs7CisJc2RlKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2EzMi1zZGUKKwkJb3M9LWVsZgorCQk7OworCXNlaSkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQlvcz0tc2VpdXgKKwkJOzsKKwlzZXF1ZW50KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQk7OworCXNoKQorCQliYXNpY19tYWNoaW5lPXNoLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCXNoNWVsKQorCQliYXNpY19tYWNoaW5lPXNoNWxlLXVua25vd24KKwkJOzsKKwlzaDY0KQorCQliYXNpY19tYWNoaW5lPXNoNjQtdW5rbm93bgorCQk7OworCXNwYXJjbGl0ZS13cnMgfCBzaW1zby13cnMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmNsaXRlLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXNwczcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MgorCQk7OworCXNwdXIpCisJCWJhc2ljX21hY2hpbmU9c3B1ci11bmtub3duCisJCTs7CisJc3QyMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCisJCTs7CisJc3RyYXR1cykKKwkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKKwkJb3M9LXN5c3Y0CisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdGljNTR4IHwgYzU0eCopCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM1NXggfCBjNTV4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4IHwgYzZ4KikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9dGlsZS11bmtub3duCisJCW9zPS1saW51eC1nbnUKKwkJOzsKKwl0eDM5KQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KKwkJOzsKKwl0eDM5ZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCisJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CisJdWRpMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwl1bHRyYTMpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ueXUKKwkJb3M9LXN5bTEKKwkJOzsKKwl2ODEwIHwgbmVjdjgxMCkKKwkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQlvcz0tbm9uZQorCQk7OworCXZheHYpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tc3lzdgorCQk7OworCXZtcykKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS12bXMKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CisJdnh3b3Jrczk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3M2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3MyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl3NjUqKQorCQliYXNpY19tYWNoaW5lPXc2NS13ZGMKKwkJb3M9LW5vbmUKKwkJOzsKKwl3ODlrLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCW9zPS1wcm9lbGYKKwkJOzsKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwl4cHMgfCB4cHMxMDApCisJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAorCQk7OworCXltcCkKKwkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJejhrLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJbm9uZSkKKwkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKKwkJb3M9LW5vbmUKKwkJOzsKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCXJvbXApCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKKwlyczYwMDApCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCQk7OworCXZheCkKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CisJcGRwMTEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCisJCTs7CisJd2UzMmspCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwljeWRyYSkKKwkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCisJCTs7CisJb3Jpb24pCisJCWJhc2ljX21hY2hpbmU9b3Jpb24taGlnaGxldmVsCisJCTs7CisJb3Jpb24xMDUpCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQorCQk7OworCSotdW5rbm93bikKKwkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KKwkJOzsKKwkqKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBjYW5vbmljYWxpemUgY2VydGFpbiBhbGlhc2VzIGZvciBtYW51ZmFjdHVyZXJzLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotZGlnaXRhbCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvZGlnaXRhbC4qL2RlYy8nYAorCQk7OworCSotY29tbW9kb3JlKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9jb21tb2RvcmUuKi9jYm0vJ2AKKwkJOzsKKwkqKQorCQk7OworZXNhYworCisjIERlY29kZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgYWxpYXNlcyBmb3IgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcy4KKworaWYgWyB4IiRvcyIgIT0geCIiIF0KK3RoZW4KK2Nhc2UgJG9zIGluCisgICAgICAgICMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisgICAgICAgICMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKKwkJOzsKKwktc29sYXJpcykKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJLXN2cjQqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdW5peHdhcmUqKQorCQlvcz0tc3lzdjQuMnV3CisJCTs7CisJLWdudS9saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8bGludXgtZ251fCdgCisJCTs7CisJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtc29sYXJpcyogfCAtc3ltKiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAorCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCisJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworICAgICAgICAtb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKKwktd2luY2UqKQorCQlvcz0td2luY2UKKwkJOzsKKwktb3Nmcm9zZSopCisJCW9zPS1vc2Zyb3NlCisJCTs7CisJLW9zZiopCisJCW9zPS1vc2YKKwkJOzsKKwktdXRlayopCisJCW9zPS1ic2QKKwkJOzsKKwktZHluaXgqKQorCQlvcz0tYnNkCisJCTs7CisJLWFjaXMqKQorCQlvcz0tYW9zCisJCTs7CisJLWF0aGVvcyopCisJCW9zPS1hdGhlb3MKKwkJOzsKKwktc3lsbGFibGUqKQorCQlvcz0tc3lsbGFibGUKKwkJOzsKKwktMzg2YnNkKQorCQlvcz0tYnNkCisJCTs7CisJLWN0aXgqIHwgLXV0cyopCisJCW9zPS1zeXN2CisJCTs7CisJLW5vdmEqKQorCQlvcz0tcnRtay1ub3ZhCisJCTs7CisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKKwkJb3M9LW5zaworCQk7OworCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwktc2luaXg1LiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCisJCTs7CisJLXNpbml4KikKKwkJb3M9LXN5c3Y0CisJCTs7CisgICAgICAgIC10cGYqKQorCQlvcz0tdHBmCisJCTs7CisJLXRyaXRvbiopCisJCW9zPS1zeXN2MworCQk7OworCS1vc3MqKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXN2cjMpCisJCW9zPS1zeXN2MworCQk7OworCS1zeXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KKwktc3lzdiopCisJCTs7CisJLW9zZSopCisJCW9zPS1vc2UKKwkJOzsKKwktZXMxODAwKikKKwkJb3M9LW9zZQorCQk7OworCS14ZW5peCkKKwkJb3M9LXhlbml4CisJCTs7CisJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJb3M9LW1pbnQKKwkJOzsKKwktYXJvcyopCisJCW9zPS1hcm9zCisJCTs7CisJLWthb3MqKQorCQlvcz0ta2FvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5vbmUpCisJCTs7CisJKikKKwkJIyBHZXQgcmlkIG9mIHRoZSBgLScgYXQgdGhlIGJlZ2lubmluZyBvZiAkb3MuCisJCW9zPWBlY2hvICRvcyB8IHNlZCAncy9bXi1dKi0vLydgCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogc3lzdGVtIFxgJG9zXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKK2Vsc2UKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgorIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKKyMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KKworIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAorIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAorIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCisjIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKKyMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCisKK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAgICAgICAgc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworICAgICAgICBzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisgICAgICAgIGM0eC0qIHwgdGljNHgtKikKKyAgICAgICAgCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJIyBUaGlzIGFsc28gZXhpc3RzIGluIHRoZSBjb25maWd1cmUgcHJvZ3JhbSwgYnV0IHdhcyBub3QgdGhlCisJCSMgZGVmYXVsdC4KKwkJIyBvcz0tc3Vub3M0CisJCTs7CisJbTY4Ki1jaXNjbykKKwkJb3M9LWFvdXQKKwkJOzsKKyAgICAgICAgbWVwLSopCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi1jaXNjbykKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLSopCisJCW9zPS1lbGYKKwkJOzsKKwlvcjMyLSopCisJCW9zPS1jb2ZmCisJCTs7CisJKi10dGkpCSMgbXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KKwkJb3M9LXN5c3YzCisJCTs7CisJc3BhcmMtKiB8ICotc3VuKQorCQlvcz0tc3Vub3M0LjEuMQorCQk7OworCSotYmUpCisJCW9zPS1iZW9zCisJCTs7CisJKi1oYWlrdSkKKwkJb3M9LWhhaWt1CisJCTs7CisJKi1pYm0pCisJCW9zPS1haXgKKwkJOzsKKyAgICAJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvY29uZmlndXJlIGIvbmN1cnNlcy01LjcvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzNDIzODcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jb25maWd1cmUKQEAgLTAsMCArMSwxODM5NSBAQAorIyEgL2Jpbi9zaAorIyBGcm9tIGNvbmZpZ3VyZS5pbiBSZXZpc2lvbjogMS40NTQgLgorIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorIyBHZW5lcmF0ZWQgYnkgQXV0b2NvbmYgMi41Mi4yMDA4MDMyNS4KKyMKKyMgQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9InNlZCB5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9InNlZCB5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2V0IC1vIHBvc2l4CitmaQorCisjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCithc19tZT1gZWNobyAiJDAiIHxzZWQgJ3MsLipbXFwvXSwsJ2AKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitlY2hvID5jb25mJCQuZmlsZQoraWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCisgICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgorICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KKyAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsc2UKKyAgICBhc19sbl9zPSdsbiAtcycKKyAgZmkKK2VsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2xuX3M9bG4KK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKworYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorCisjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KK2lmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc191bnNldD11bnNldAorZWxzZQorICBhc191bnNldD1mYWxzZQorZmkKKworIyBOTFMgbnVpc2FuY2VzLgorJGFzX3Vuc2V0IExBTkcgfHwgdGVzdCAiJHtMQU5HK3NldH0iICE9IHNldCB8fCB7IExBTkc9QzsgZXhwb3J0IExBTkc7IH0KKyRhc191bnNldCBMQ19BTEwgfHwgdGVzdCAiJHtMQ19BTEwrc2V0fSIgIT0gc2V0IHx8IHsgTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IH0KKyRhc191bnNldCBMQ19USU1FIHx8IHRlc3QgIiR7TENfVElNRStzZXR9IiAhPSBzZXQgfHwgeyBMQ19USU1FPUM7IGV4cG9ydCBMQ19USU1FOyB9CiskYXNfdW5zZXQgTENfQ1RZUEUgfHwgdGVzdCAiJHtMQ19DVFlQRStzZXR9IiAhPSBzZXQgfHwgeyBMQ19DVFlQRT1DOyBleHBvcnQgTENfQ1RZUEU7IH0KKyRhc191bnNldCBMQU5HVUFHRSB8fCB0ZXN0ICIke0xBTkdVQUdFK3NldH0iICE9IHNldCB8fCB7IExBTkdVQUdFPUM7IGV4cG9ydCBMQU5HVUFHRTsgfQorJGFzX3Vuc2V0IExDX0NPTExBVEUgfHwgdGVzdCAiJHtMQ19DT0xMQVRFK3NldH0iICE9IHNldCB8fCB7IExDX0NPTExBVEU9QzsgZXhwb3J0IExDX0NPTExBVEU7IH0KKyRhc191bnNldCBMQ19OVU1FUklDIHx8IHRlc3QgIiR7TENfTlVNRVJJQytzZXR9IiAhPSBzZXQgfHwgeyBMQ19OVU1FUklDPUM7IGV4cG9ydCBMQ19OVU1FUklDOyB9CiskYXNfdW5zZXQgTENfTUVTU0FHRVMgfHwgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiAhPSBzZXQgfHwgeyBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IH0KKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCithc19ubD0nCisnCitJRlM9IiAJJGFzX25sIgorCisjIENEUEFUSC4KKyRhc191bnNldCBDRFBBVEggfHwgdGVzdCAiJHtDRFBBVEgrc2V0fSIgIT0gc2V0IHx8IHsgQ0RQQVRIPTo7IGV4cG9ydCBDRFBBVEg7IH0KKworIyBOYW1lIG9mIHRoZSBob3N0LgorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKK2V4ZWMgNj4mMQorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0gTUFLRUZMQUdTPQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzaGVsbCBoZXJlIGRvY3VtZW50LgorIyBUaGlzIHZhcmlhYmxlIHNlZW1zIG9ic29sZXRlLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQsIGFuZAorIyBvbmx5IGFjX21heF9zZWRfbGluZXMgc2hvdWxkIGJlIHVzZWQuCis6ICR7YWNfbWF4X2hlcmVfbGluZXM9Mzh9CisKK2FjX3VuaXF1ZV9maWxlPSJuY3Vyc2VzL2Jhc2UvbGliX2luaXRzY3IuYyIKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorYWNfaW5pdF9oZWxwPQorYWNfaW5pdF92ZXJzaW9uPWZhbHNlCisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorY2FjaGVfZmlsZT0vZGV2L251bGwKK2V4ZWNfcHJlZml4PU5PTkUKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFkaXI9JyR7cHJlZml4fS9zaGFyZScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworaW5mb2Rpcj0nJHtwcmVmaXh9L2luZm8nCittYW5kaXI9JyR7cHJlZml4fS9tYW4nCisKKyMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorUEFDS0FHRV9OQU1FPQorUEFDS0FHRV9UQVJOQU1FPQorUEFDS0FHRV9WRVJTSU9OPQorUEFDS0FHRV9TVFJJTkc9CitQQUNLQUdFX0JVR1JFUE9SVD0KKworYWNfcHJldj0KK2ZvciBhY19vcHRpb24KK2RvCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgYWNfb3B0YXJnPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFtePV0qPVwoLipcKSdgCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19vcHRpb24gaW4KKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCB8IC0tZGF0YSB8IC0tZGF0IHwgLS1kYSkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCisgIHwgLS1kYT0qKQorICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworCisgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAorICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT1ubyIgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICRhY19vcHRpb24gaW4KKyAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXNhYworICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT0nJGFjX29wdGFyZyciIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwKKyAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKyAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1sb2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMpCisgICAgbm9fY3JlYXRlPXllcyA7OworCisgIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorICB8IC0tbm8tcmVjdXJzIHwgLS1uby1yZWN1ciB8IC0tbm8tcmVjdSB8IC0tbm8tcmVjIHwgLS1uby1yZSB8IC0tbm8tcikKKyAgICBub19yZWN1cnNpb249eWVzIDs7CisKKyAgLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaSB8IC0tb2xkaW5jbHVkZWQgXAorICB8IC0tb2xkaW5jbHVkZSB8IC0tb2xkaW5jbHVkIHwgLS1vbGRpbmNsdSB8IC0tb2xkaW5jbCB8IC0tb2xkaW5jIFwKKyAgfCAtLW9sZGluIHwgLS1vbGRpIHwgLS1vbGQgfCAtLW9sIHwgLS1vKQorICAgIGFjX3ByZXY9b2xkaW5jbHVkZWRpciA7OworICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKyAgfCAtLW9sZGluY2x1ZGU9KiB8IC0tb2xkaW5jbHVkPSogfCAtLW9sZGluY2x1PSogfCAtLW9sZGluY2w9KiB8IC0tb2xkaW5jPSogXAorICB8IC0tb2xkaW49KiB8IC0tb2xkaT0qIHwgLS1vbGQ9KiB8IC0tb2w9KiB8IC0tbz0qKQorICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCisgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorICAgIHByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKyAgfCAtLXByb2dyYW0tcHJlIHwgLS1wcm9ncmFtLXByIHwgLS1wcm9ncmFtLXApCisgICAgYWNfcHJldj1wcm9ncmFtX3ByZWZpeCA7OworICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKyAgfCAtLXByb2dyYW0tcHJlZj0qIHwgLS1wcm9ncmFtLXByZT0qIHwgLS1wcm9ncmFtLXByPSogfCAtLXByb2dyYW0tcD0qKQorICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpIHwgLS1wcm9ncmFtLXN1ZmYgXAorICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKyAgICBhY19wcmV2PXByb2dyYW1fc3VmZml4IDs7CisgIC1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpPSogXAorICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCisgICAgcHJvZ3JhbV9zdWZmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAorICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3JhbS10cmFuIFwKKyAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQorICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAorICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKKyAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0kYWNfb3B0YXJnIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAorICAgIGNhc2UgJGFjX29wdGlvbiBpbgorICAgICAgKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKKyAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBlc2FjCisgICAgZXZhbCAid2l0aF8kYWNfcGFja2FnZT0nJGFjX29wdGFyZyciIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZSB8IHNlZCAncy8tL18vZydgCisgICAgZXZhbCAid2l0aF8kYWNfcGFja2FnZT1ubyIgOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworCisgIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICRhY19vcHRpb24KK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIDs7CisKKyAgKj0qKQorICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19lbnZ2YXIiIDogIi4qW15fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhcmlhYmxlIG5hbWU6ICRhY19lbnZ2YXIiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYAorICAgIGV2YWwgIiRhY19lbnZ2YXI9JyRhY19vcHRhcmcnIgorICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisKKyAgKikKKyAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCisgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KK2ZvciBhY192YXIgaW4gZXhlY19wcmVmaXggcHJlZml4CitkbworICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qIHwgTk9ORSB8ICcnICkgOzsKKyAgICAqKSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBwYXRoIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KK2ZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorICAgICAgICAgICAgICBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIKK2RvCisgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSA7OworICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIHBhdGggZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICBlc2FjCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCitpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcworICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gaXRzIHBhcmVudC4KKyAgYWNfcHJvZz0kMAorICBhY19jb25mZGlyPWBlY2hvICIkYWNfcHJvZyIgfCBzZWQgJ3MlW1xcL11bXlxcL11bXlxcL10qJCUlJ2AKKyAgdGVzdCAieCRhY19jb25mZGlyIiA9ICJ4JGFjX3Byb2ciICYmIGFjX2NvbmZkaXI9LgorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKyAgaWYgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzIGluICRhY19jb25mZGlyIG9yIC4uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBlbHNlCisgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBzb3VyY2VzIGluICRzcmNkaXIiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGZpCitmaQorc3JjZGlyPWBlY2hvICIkc3JjZGlyIiB8IHNlZCAncyVcKFteXFwvXVwpW1xcL10qJCVcMSUnYAorYWNfZW52X2J1aWxkX2FsaWFzX3NldD0ke2J1aWxkX2FsaWFzK3NldH0KK2FjX2Vudl9idWlsZF9hbGlhc192YWx1ZT0kYnVpbGRfYWxpYXMKK2FjX2N2X2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9CithY19jdl9lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCithY19lbnZfaG9zdF9hbGlhc19zZXQ9JHtob3N0X2FsaWFzK3NldH0KK2FjX2Vudl9ob3N0X2FsaWFzX3ZhbHVlPSRob3N0X2FsaWFzCithY19jdl9lbnZfaG9zdF9hbGlhc19zZXQ9JHtob3N0X2FsaWFzK3NldH0KK2FjX2N2X2Vudl9ob3N0X2FsaWFzX3ZhbHVlPSRob3N0X2FsaWFzCithY19lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9CithY19lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKK2FjX2N2X2Vudl90YXJnZXRfYWxpYXNfc2V0PSR7dGFyZ2V0X2FsaWFzK3NldH0KK2FjX2N2X2Vudl90YXJnZXRfYWxpYXNfdmFsdWU9JHRhcmdldF9hbGlhcworYWNfZW52X0NDX3NldD0ke0NDK3NldH0KK2FjX2Vudl9DQ192YWx1ZT0kQ0MKK2FjX2N2X2Vudl9DQ19zZXQ9JHtDQytzZXR9CithY19jdl9lbnZfQ0NfdmFsdWU9JENDCithY19lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9CithY19lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKK2FjX2N2X2Vudl9DRkxBR1Nfc2V0PSR7Q0ZMQUdTK3NldH0KK2FjX2N2X2Vudl9DRkxBR1NfdmFsdWU9JENGTEFHUworYWNfZW52X0xERkxBR1Nfc2V0PSR7TERGTEFHUytzZXR9CithY19lbnZfTERGTEFHU192YWx1ZT0kTERGTEFHUworYWNfY3ZfZW52X0xERkxBR1Nfc2V0PSR7TERGTEFHUytzZXR9CithY19jdl9lbnZfTERGTEFHU192YWx1ZT0kTERGTEFHUworYWNfZW52X0NQUEZMQUdTX3NldD0ke0NQUEZMQUdTK3NldH0KK2FjX2Vudl9DUFBGTEFHU192YWx1ZT0kQ1BQRkxBR1MKK2FjX2N2X2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9CithY19jdl9lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCithY19lbnZfQ1BQX3NldD0ke0NQUCtzZXR9CithY19lbnZfQ1BQX3ZhbHVlPSRDUFAKK2FjX2N2X2Vudl9DUFBfc2V0PSR7Q1BQK3NldH0KK2FjX2N2X2Vudl9DUFBfdmFsdWU9JENQUAorYWNfZW52X0NYWF9zZXQ9JHtDWFgrc2V0fQorYWNfZW52X0NYWF92YWx1ZT0kQ1hYCithY19jdl9lbnZfQ1hYX3NldD0ke0NYWCtzZXR9CithY19jdl9lbnZfQ1hYX3ZhbHVlPSRDWFgKK2FjX2Vudl9DWFhGTEFHU19zZXQ9JHtDWFhGTEFHUytzZXR9CithY19lbnZfQ1hYRkxBR1NfdmFsdWU9JENYWEZMQUdTCithY19jdl9lbnZfQ1hYRkxBR1Nfc2V0PSR7Q1hYRkxBR1Mrc2V0fQorYWNfY3ZfZW52X0NYWEZMQUdTX3ZhbHVlPSRDWFhGTEFHUworYWNfZW52X0NYWENQUF9zZXQ9JHtDWFhDUFArc2V0fQorYWNfZW52X0NYWENQUF92YWx1ZT0kQ1hYQ1BQCithY19jdl9lbnZfQ1hYQ1BQX3NldD0ke0NYWENQUCtzZXR9CithY19jdl9lbnZfQ1hYQ1BQX3ZhbHVlPSRDWFhDUFAKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8RU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyB0aGlzIHBhY2thZ2UgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQorICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKworRU9GCisKKyAgY2F0IDw8RU9GCitJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQorCitCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CithbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KKworRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisKK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9zaGFyZV0KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW1BSRUZJWC9pbmZvXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbUFJFRklYL21hbl0KK0VPRgorCisgIGNhdCA8PFxFT0YKKworUHJvZ3JhbSBuYW1lczoKKyAgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVggICAgICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICAgICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCisgIC0tdGFyZ2V0PVRBUkdFVCAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgY29tcGlsZXJzIGZvciBUQVJHRVQgW0hPU1RdCitFT0YKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCisKKyAgY2F0IDw8XEVPRgorCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorCisgIC0td2l0aC1yZWwtdmVyc2lvbj1YWFggIG92ZXJyaWRlIGRlcml2ZWQgcmVsZWFzZSB2ZXJzaW9uCisgIC0td2l0aC1hYmktdmVyc2lvbj1YWFggIG92ZXJyaWRlIGRlcml2ZWQgQUJJIHZlcnNpb24KKyAgLS13aXRoLXN5c3RlbS10eXBlPVhYWCAgdGVzdDogb3ZlcnJpZGUgZGVyaXZlZCBob3N0IHN5c3RlbS10eXBlCisgIC0td2l0aG91dC1jeHggICAgICAgICAgIGRvIG5vdCBhZGp1c3QgbmN1cnNlcyBib29sIHRvIG1hdGNoIEMrKworICAtLXdpdGhvdXQtY3h4LWJpbmRpbmcgICBkbyBub3QgYnVpbGQgQysrIGJpbmRpbmcgYW5kIGRlbW8KKyAgLS13aXRob3V0LWFkYSAgICAgICAgICAgc3VwcHJlc3MgY2hlY2sgZm9yIEFkYTk1LCBkb24ndCBidWlsZCBkZW1vCisgIC0td2l0aG91dC1wcm9ncyAgICAgICAgIHN1cHByZXNzIGJ1aWxkIHdpdGggcHJvZ3JhbXMgKGUuZy4sIHRpYykKKyAgLS13aXRob3V0LWN1cnNlcy1oICAgICAgaW5zdGFsbCBjdXJzZXMuaCBhcyBuY3Vyc2VzLmggb25seQorICAtLWVuYWJsZS1taXhlZC1jYXNlICAgICB0aWMgc2hvdWxkIGFzc3VtZSBtaXhlZC1jYXNlIGZpbGVuYW1lcworICAtLXdpdGgtaW5zdGFsbC1wcmVmaXggICBwcmVmaXhlcyBhY3R1YWwgaW5zdGFsbC1sb2NhdGlvbiAoJERFU1RESVIpCitCdWlsZC1Ub29scyBOZWVkZWQgdG8gQ29tcGlsZSBUZW1wb3JhcnkgQXBwbGljYXRpb25zIGZvciBDcm9zcy1jb21waWxpbmc6CisgIC0td2l0aC1idWlsZC1jYz1YWFggICAgIHRoZSBidWlsZCBDIGNvbXBpbGVyICgkQlVJTERfQ0MpCisgIC0td2l0aC1idWlsZC1jcHA9WFhYICAgIHRoZSBidWlsZCBDIHByZXByb2Nlc3NvciAoJEJVSUxEX0NQUCkKKyAgLS13aXRoLWJ1aWxkLWNmbGFncz1YWFggdGhlIGJ1aWxkIEMgY29tcGlsZXItZmxhZ3MgKCRCVUlMRF9DRkxBR1MpCisgIC0td2l0aC1idWlsZC1jcHBmbGFncz1YWFggdGhlIGJ1aWxkIEMgcHJlcHJvY2Vzc29yLWZsYWdzICgkQlVJTERfQ1BQRkxBR1MpCisgIC0td2l0aC1idWlsZC1sZGZsYWdzPVhYWCB0aGUgYnVpbGQgbGlua2VyLWZsYWdzICgkQlVJTERfTERGTEFHUykKKyAgLS13aXRoLWJ1aWxkLWxpYnM9WFhYICAgdGhlIGJ1aWxkIGxpYnJhcmllcyAoJHtCVUlMRF9MSUJTfSkKK09wdGlvbnMgdG8gU3BlY2lmeSB0aGUgTGlicmFyaWVzIEJ1aWx0L1VzZWQ6CisgIC0td2l0aC1saWJ0b29sICAgICAgICAgIGdlbmVyYXRlIGxpYnJhcmllcyB3aXRoIGxpYnRvb2wKKyAgLS13aXRoLXNoYXJlZCAgICAgICAgICAgZ2VuZXJhdGUgc2hhcmVkLWxpYnJhcmllcworICAtLXdpdGgtbm9ybWFsICAgICAgICAgICBnZW5lcmF0ZSBub3JtYWwtbGlicmFyaWVzIChkZWZhdWx0KQorICAtLXdpdGgtZGVidWcgICAgICAgICAgICBnZW5lcmF0ZSBkZWJ1Zy1saWJyYXJpZXMgKGRlZmF1bHQpCisgIC0td2l0aC1wcm9maWxlICAgICAgICAgIGdlbmVyYXRlIHByb2ZpbGUtbGlicmFyaWVzCisgIC0td2l0aC10ZXJtbGliICAgICAgICAgIGdlbmVyYXRlIHNlcGFyYXRlIHRlcm1pbmZvIGxpYnJhcnkKKyAgLS13aXRoLXRpY2xpYiAgICAgICAgICAgZ2VuZXJhdGUgc2VwYXJhdGUgdGljIGxpYnJhcnkKKyAgLS13aXRoLWdwbSAgICAgICAgICAgICAgdXNlIEFsZXNzYW5kcm8gUnViaW5pJ3MgR1BNIGxpYnJhcnkKKyAgLS13aXRob3V0LWRsc3ltICAgICAgICAgZG8gbm90IHVzZSBkbHN5bSgpIHRvIGxvYWQgR1BNIGR5bmFtaWNhbGx5CisgIC0td2l0aC1zeXNtb3VzZSAgICAgICAgIHVzZSBzeXNtb3VzZSAoRnJlZUJTRCBjb25zb2xlKQorICAtLWVuYWJsZS1ycGF0aCAgICAgICAgICB1c2UgcnBhdGggb3B0aW9uIHdoZW4gZ2VuZXJhdGluZyBzaGFyZWQgbGlicmFyaWVzCisgIC0tZGlzYWJsZS1yZWxpbmsgICAgICAgIHJlbGluayBzaGFyZWQgbGlicmFyaWVzIGR1cmluZyBpbnN0YWxsCisgIC0td2l0aC1zaGxpYi12ZXJzaW9uPVggIFNwZWNpZnkgcmVsIG9yIGFiaSB2ZXJzaW9uIGZvciBzaGFyZWQgbGlicworRmluZS1UdW5pbmcgWW91ciBDb25maWd1cmF0aW9uOgorICAtLWRpc2FibGUtb3ZlcndyaXRlICAgICBsZWF2ZSBvdXQgdGhlIGxpbmsgdG8gLWxjdXJzZXMKKyAgLS1kaXNhYmxlLWRhdGFiYXNlICAgICAgZG8gbm90IHVzZSB0ZXJtaW5mbywgb25seSBmYWxsYmFja3MvdGVybWNhcAorICAtLXdpdGgtZGF0YWJhc2U9WFhYICAgICBzcGVjaWZ5IHRlcm1pbmZvIHNvdXJjZSB0byBpbnN0YWxsCisgIC0td2l0aC1oYXNoZWQtZGIgICAgICAgIHNwZWNpZnkgaGFzaGVkLWRhdGFiYXNlIGxpYnJhcnkKKyAgLS13aXRoLWZhbGxiYWNrcz1YWFggICAgc3BlY2lmeSBsaXN0IG9mIGZhbGxiYWNrIHRlcm1pbmFsIGRlc2NyaXB0aW9ucworICAtLXdpdGhvdXQteHRlcm0tbmV3ICAgICBzcGVjaWZ5IGlmIHh0ZXJtIHRlcm1pbmZvIHNob3VsZCBiZSBvbGQgdmVyc2lvbgorICAtLXdpdGgtdGVybWluZm8tZGlycz1YWFggc3BlY2lmeSBsaXN0IG9mIHRlcm1pbmZvIGRpcmVjdG9yaWVzIChkZWZhdWx0OiBEQVRBRElSL3Rlcm1pbmZvKQorICAtLXdpdGgtZGVmYXVsdC10ZXJtaW5mby1kaXI9RElSIGRlZmF1bHQgdGVybWluZm8gZGlyZWN0b3J5IChkZWZhdWx0OiBEQVRBRElSL3Rlcm1pbmZvKQorICAtLWRpc2FibGUtYmlnLWNvcmUgICAgICBhc3N1bWUgbWFjaGluZSBoYXMgbGl0dGxlIG1lbW9yeQorICAtLWRpc2FibGUtYmlnLXN0cmluZ3MgICBhc3N1bWUgY29tcGlsZXIgaGFzIG9ubHkgc3RhbmRhcmQtc2l6ZSBzdHJpbmdzCisgIC0tZW5hYmxlLXRlcm1jYXAgICAgICAgIGNvbXBpbGUgaW4gdGVybWNhcCBmYWxsYmFjayBzdXBwb3J0CisgIC0td2l0aC10ZXJtcGF0aD1YWFggICAgIHNwZWNpZnkgbGlzdCBvZiB0ZXJtY2FwIGZpbGVzIChkZWZhdWx0OiAvZXRjL3Rlcm1jYXA6L3Vzci9zaGFyZS9taXNjL3Rlcm1jYXApCisgIC0tZW5hYmxlLWdldGNhcCAgICAgICAgIGZhc3QgdGVybWNhcCBsb2FkLCBubyB4cmVmcyB0byB0ZXJtaW5mbworICAtLWVuYWJsZS1nZXRjYXAtY2FjaGUgICBjYWNoZSB0cmFuc2xhdGVkIHRlcm1jYXBzIGluIH4vLnRlcm1pbmZvCisgIC0tZGlzYWJsZS1ob21lLXRlcm1pbmZvIGRyb3Agfi8udGVybWluZm8gZnJvbSB0ZXJtaW5mbyBzZWFyY2gtcGF0aAorICAtLWRpc2FibGUtcm9vdC1lbnZpcm9uICByZXN0cmljdCBlbnZpcm9ubWVudCB3aGVuIHJ1bm5pbmcgYXMgcm9vdAorICAtLWVuYWJsZS1zeW1saW5rcyAgICAgICBtYWtlIHRpYyB1c2Ugc3ltYm9saWMgbGlua3Mgbm90IGhhcmQgbGlua3MKKyAgLS1lbmFibGUtYnJva2VuX2xpbmtlciAgY29tcGlsZSB3aXRoIGJyb2tlbi1saW5rZXIgc3VwcG9ydCBjb2RlCisgIC0tZW5hYmxlLWJzZHBhZCAgICAgICAgIHJlY29nbml6ZSBCU0Qtc3R5bGUgcHJlZml4IHBhZGRpbmcKKyAgLS1lbmFibGUtd2lkZWMgICAgICAgICAgY29tcGlsZSB3aXRoIHdpZGUtY2hhci9VVEYtOCBjb2RlCisgIC0tZGlzYWJsZS1scDY0ICAgICAgICAgIGFsbG93IGNodHlwZSB0byBiZSBsb25nIChpZ25vcmUgX0xQNjQpCisgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyAgLS1kaXNhYmxlLXRwYXJtLXZhcmFyZ3MgY29tcGlsZSB0cGFybSgpIHdpdGhvdXQgdmFyYXJncyBpbnRlcmZhY2UKKyAgLS1kaXNhYmxlLXRpYy1kZXBlbmRzICAgbGluayB0aWMgbGlicmFyeSB3aXRob3V0IGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gbmN1cnNlcyBsaWJyYXJ5CisgIC0td2l0aC1ib29sPVRZUEUgICAgICAgIG92ZXJyaWRlIGZhbGxiYWNrIHR5cGUgb2YgYm9vbCB2YXJpYWJsZQorICAtLXdpdGgtY2Fwcz1hbHQgICAgICAgICBjb21waWxlIHdpdGggYWx0ZXJuYXRlIENhcHMgZmlsZQorICAtLXdpdGgtY2h0eXBlPVRZUEUgICAgICBvdmVycmlkZSB0eXBlIG9mIGNodHlwZQorICAtLXdpdGgtb3NwZWVkPVRZUEUgICAgICBvdmVycmlkZSB0eXBlIG9mIG9zcGVlZCB2YXJpYWJsZQorICAtLXdpdGgtbW1hc2stdD1UWVBFICAgICBvdmVycmlkZSB0eXBlIG9mIG1tYXNrX3QKKyAgLS13aXRoLXJjcy1pZHMgICAgICAgICAgY29tcGlsZS1pbiBSQ1MgaWRlbnRpZmllcnMKK09wdGlvbnMgdG8gU3BlY2lmeSBIb3cgTWFucGFnZXMgYXJlIEluc3RhbGxlZDoKKyAgLS13aXRoLW1hbnBhZ2UtZm9ybWF0ICAgc3BlY2lmeSBtYW5wYWdlLWZvcm1hdDogZ3ppcC9jb21wcmVzcy9CU0RJL25vcm1hbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxseSBmb3JtYXR0ZWQvY2F0b25seSwgZS5nLiwgZ3ppcCxmb3JtYXR0ZWQKKyAgLS13aXRoLW1hbnBhZ2UtcmVuYW1lcyAgc3BlY2lmeSBtYW5wYWdlLXJlbmFtaW5nCisgIC0td2l0aC1tYW5wYWdlLWFsaWFzZXMgIHNwZWNpZnkgbWFucGFnZS1hbGlhc2VzIHVzaW5nIC5zbworICAtLXdpdGgtbWFucGFnZS1zeW1saW5rcyBzcGVjaWZ5IG1hbnBhZ2UtYWxpYXNlcyB1c2luZyBzeW1saW5rcworICAtLXdpdGgtbWFucGFnZS10YmwgICAgICBzcGVjaWZ5IG1hbnBhZ2UgcHJvY2Vzc2luZyB3aXRoIHRibAorRXh0ZW5zaW9uczoKKyAgLS1kaXNhYmxlLWV4dC1mdW5jcyAgICAgZGlzYWJsZSBmdW5jdGlvbi1leHRlbnNpb25zCisgIC0tZW5hYmxlLWNvbnN0ICAgICAgICAgIGNvbXBpbGUgd2l0aCBleHRyYS9ub24tc3RhbmRhcmQgY29uc3QKKyAgLS1lbmFibGUtZXh0LWNvbG9ycyAgICAgY29tcGlsZSBmb3IgMjU2LWNvbG9yIHN1cHBvcnQKKyAgLS1lbmFibGUtZXh0LW1vdXNlICAgICAgY29tcGlsZSBmb3IgZXh0ZW5kZWQgbW91c2UtZW5jb2RpbmcKKyAgLS1lbmFibGUtbm8tcGFkZGluZyAgICAgY29tcGlsZSB3aXRoICROQ1VSU0VTX05PX1BBRERJTkcgY29kZQorICAtLWVuYWJsZS1zaWduZWQtY2hhciAgICBjb21waWxlIHVzaW5nIHNpZ25lZCBCb29sZWFuJ3MgaW4gdGVybS5oCisgIC0tZW5hYmxlLXNpZ3dpbmNoICAgICAgIGNvbXBpbGUgd2l0aCBTSUdXSU5DSCBoYW5kbGVyCisgIC0tZW5hYmxlLXRjYXAtbmFtZXMgICAgIGNvbXBpbGUgd2l0aCB1c2VyLWRlZmluYWJsZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMKK0RldmVsb3BtZW50IENvZGU6CisgIC0td2l0aG91dC1kZXZlbG9wICAgICAgIGRpc2FibGUgZGV2ZWxvcG1lbnQgb3B0aW9ucworICAtLWVuYWJsZS1oYXJkLXRhYnMgICAgICBjb21waWxlIHdpdGggaGFyZC10YWJzIGNvZGUKKyAgLS1lbmFibGUteG1jLWdsaXRjaCAgICAgY29tcGlsZSB3aXRoIHN1cHBvcnQgZm9yIHhtYyAobWFnaWMtY29va2llKQorRXhwZXJpbWVudGFsIENvZGU6CisgIC0tZGlzYWJsZS1hc3N1bWVkLWNvbG9yIGRvIG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgZGVmYXVsdC1jb2xvcnMKKyAgLS1kaXNhYmxlLWhhc2htYXAgICAgICAgY29tcGlsZSB3aXRob3V0IGhhc2htYXAgc2Nyb2xsaW5nLW9wdGltaXphdGlvbgorICAtLWVuYWJsZS1jb2xvcmZnYmcgICAgICBjb21waWxlIHdpdGggJENPTE9SRkdCRyBjb2RlCisgIC0td2l0aC1wdGhyZWFkICAgICAgICAgIHVzZSBQT1NJWCB0aHJlYWQgbGlicmFyeQorICAtLWVuYWJsZS13ZWFrLXN5bWJvbHMgICBlbmFibGUgd2Vhay1zeW1ib2xzIGZvciBwdGhyZWFkcworICAtLWVuYWJsZS1yZWVudHJhbnQgICAgICBjb21waWxlIHdpdGggZXhwZXJpbWVudGFsIHJlZW50cmFudCBjb2RlCisgIC0tZW5hYmxlLXNhZmUtc3ByaW50ZiAgIGNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgc2FmZS1zcHJpbnRmIGNvZGUKKyAgLS1kaXNhYmxlLXNjcm9sbC1oaW50cyAgY29tcGlsZSB3aXRob3V0IHNjcm9sbC1oaW50cyBjb2RlCisgIC0tZW5hYmxlLXdnZXRjaC1ldmVudHMgIGNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgd2dldGNoLWV2ZW50cyBjb2RlCitUZXN0aW5nL2RldmVsb3BtZW50IE9wdGlvbnM6CisgIC0tZW5hYmxlLWVjaG8gICAgICAgICAgIGJ1aWxkOiBkaXNwbGF5ICJjb21waWxpbmciIGNvbW1hbmRzIChkZWZhdWx0KQorICAtLWVuYWJsZS13YXJuaW5ncyAgICAgICBidWlsZDogdHVybiBvbiBHQ0MgY29tcGlsZXIgd2FybmluZ3MKKyAgLS1lbmFibGUtYXNzZXJ0aW9ucyAgICAgdGVzdDogdHVybiBvbiBnZW5lcmF0aW9uIG9mIGFzc2VydGlvbiBjb2RlCisgIC0td2l0aC1kbWFsbG9jICAgICAgICAgIHRlc3Q6IHVzZSBHcmF5IFdhdHNvbidzIGRtYWxsb2MgbGlicmFyeQorICAtLXdpdGgtZGJtYWxsb2MgICAgICAgICB0ZXN0OiB1c2UgQ29ub3IgQ2FoaWxsJ3MgZGJtYWxsb2MgbGlicmFyeQorICAtLXdpdGgtdmFsZ3JpbmQgICAgICAgICB0ZXN0OiB1c2UgdmFsZ3JpbmQKKyAgLS1kaXNhYmxlLWxlYWtzICAgICAgICAgdGVzdDogZnJlZSBwZXJtYW5lbnQgbWVtb3J5LCBhbmFseXplIGxlYWtzCisgIC0tZW5hYmxlLWV4cGFuZGVkICAgICAgIHRlc3Q6IGdlbmVyYXRlIGZ1bmN0aW9ucyBmb3IgY2VydGFpbiBtYWNyb3MKKyAgLS1kaXNhYmxlLW1hY3JvcyAgICAgICAgdGVzdDogdXNlIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBtYWNyb3MKKyAgLS13aXRoLXRyYWNlICAgICAgICAgICAgdGVzdDogYWRkIHRyYWNlKCkgZnVuY3Rpb24gdG8gYWxsIG1vZGVscyBvZiBuY3Vyc2VzCitBZGE5NSBCaW5kaW5nIE9wdGlvbnM6CisgIC0td2l0aC1hZGEtY29tcGlsZXI9Q01EIHNwZWNpZnkgQWRhOTUgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdCBnbmF0bWFrZSkKKyAgLS13aXRoLWFkYS1pbmNsdWRlPURJUiAgQWRhIGluY2x1ZGVzIGFyZSBpbiBESVIgKGRlZmF1bHQ6IFBSRUZJWC9saWIvYWRhL2FkYWluY2x1ZGUpCisgIC0td2l0aC1hZGEtb2JqZWN0cz1ESVIgIEFkYSBvYmplY3RzIGFyZSBpbiBESVIgKGRlZmF1bHQ6IFBSRUZJWC9saWIvYWRhL2FkYWxpYikKKworU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCisgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQorICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CisgIENQUEZMQUdTICAgIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYgeW91IGhhdmUKKyAgICAgICAgICAgICAgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisgIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCisgIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncworICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK0VPRgorZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBhY19wb3BkaXI9YHB3ZGAKKyAgZm9yIGFjX3N1YmRpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19zdWJkaXIiID0geDogJiYgY29udGludWUKKyAgICBjZCAkYWNfc3ViZGlyCisgICAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAvJGFjX3N1YmRpci4KKyAgICBhY19kb3RzPWBlY2hvICRhY19zdWJkaXIgfAorICAgICAgICAgICAgIHNlZCAncyxeXC4vLCw7cyxbXi9dJCwmLyw7cyxbXi9dKi8sLi4vLGcnYAorCisgICAgY2FzZSAkc3JjZGlyIGluCisgICAgLikgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgICBhY19zdWJfc3JjZGlyPSRzcmNkaXIgOzsKKyAgICBbXFwvXSogfCA/OltcXC9dKiApICMgQWJzb2x1dGUgcGF0aC4KKyAgICAgIGFjX3N1Yl9zcmNkaXI9JHNyY2Rpci8kYWNfc3ViZGlyIDs7CisgICAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgICAgYWNfc3ViX3NyY2Rpcj0kYWNfZG90cyRzcmNkaXIvJGFjX3N1YmRpciA7OworICAgIGVzYWMKKworICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAkYWNfc3ViX3NyY2Rpci9jb25maWd1cmUuZ251OyB0aGVuCisgICAgICBlY2hvCisgICAgICAkU0hFTEwgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlLmdudSAgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAkYWNfc3ViX3NyY2Rpci9jb25maWd1cmU7IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgICRTSEVMTCAkYWNfc3ViX3NyY2Rpci9jb25maWd1cmUgIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlLmFjIHx8CisgICAgICAgICAgIHRlc3QgLWYgJGFjX3N1Yl9zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCisgICAgICBlY2hvCisgICAgICAkYWNfY29uZmlndXJlIC0taGVscAorICAgIGVsc2UKKyAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfc3ViZGlyIiA+JjIKKyAgICBmaQorICAgIGNkICRhY19wb3BkaXIKKyAgZG9uZQorZmkKKwordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAwCitpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgIGNhdCA8PFxFT0YKKworQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK0VPRgorICBleGl0IDAKK2ZpCitleGVjIDU+Y29uZmlnLmxvZworY2F0ID4mNSA8PEVPRgorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisKK0l0IHdhcyBjcmVhdGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTIuMjAwODAzMjUuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICAkICQwICRACisKK0VPRgoreworY2F0IDw8X0FTVU5BTUUKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGwgICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisKK1BBVEggPSAkUEFUSAorCitfQVNVTkFNRQorfSA+JjUKKworY2F0ID4mNSA8PEVPRgorIyMgLS0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLSAjIworCitFT0YKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19zZXA9Citmb3IgYWNfYXJnCitkbworICBjYXNlICRhY19hcmcgaW4KKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jKSA7OworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpIDs7CisgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKyAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKKyAgICBhY19zZXA9IiAiIDs7CisgICopIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MkYWNfc2VwJGFjX2FyZyIKKyAgICAgYWNfc2VwPSIgIiA7OworICBlc2FjCisgICMgR2V0IHJpZCBvZiB0aGUgbGVhZGluZyBzcGFjZS4KK2RvbmUKKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgordHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisgIGVjaG8gPiY1CisgIGVjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIiA+JjUKKyAgZWNobyAiIyMgQ2FjaGUgdmFyaWFibGVzLiAgIyMiID4mNQorICBlY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIgPiY1CisgIGVjaG8gPiY1CisgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCit7CisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgYChhY19zcGFjZT0nIiciJyAnIiciJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKyAgICAqYWNfc3BhY2U9XCAqKQorICAgICAgc2VkIC1uIFwKKyAgICAgICAgInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOworICAgIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgorICAgICAgOzsKKyAgICAqKQorICAgICAgc2VkIC1uIFwKKyAgICAgICAgInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICA7OworICAgIGVzYWM7Cit9ID4mNQorICBzZWQgIi9eJC9kIiBjb25mZGVmcy5oID5jb25mdGVzdC5sb2cKKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5sb2c7IHRoZW4KKyAgICBlY2hvID4mNQorICAgIGVjaG8gIiMjIC0tLS0tLS0tLS0tLSAjIyIgPiY1CisgICAgZWNobyAiIyMgY29uZmRlZnMuaC4gICMjIiA+JjUKKyAgICBlY2hvICIjIyAtLS0tLS0tLS0tLS0gIyMiID4mNQorICAgIGVjaG8gPiY1CisgICAgY2F0IGNvbmZ0ZXN0LmxvZyA+JjUKKyAgZmkKKyAgKGVjaG87IGVjaG8pID4mNQorICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisgICAgZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiID4mNQorICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIiA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29yZSBjb3JlLiogKi5jb3JlIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgJyAwCitmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCitkb25lCithY19zaWduYWw9MAorCisjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisjIEFJWCBjcHAgbG9zZXMgb24gYW4gZW1wdHkgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGF0IGxlYXN0IGEgbmV3bGluZS4KK2VjaG8gPmNvbmZkZWZzLmgKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgoraWYgdGVzdCAteiAiJENPTkZJR19TSVRFIjsgdGhlbgorICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZWxzZQorICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZmkKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KKyAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTo5OTc6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBjYXQgIiRhY19zaXRlX2ZpbGUiID4mNQorICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KKyAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6MTAwODogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICRjYWNoZV9maWxlOzsKKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gLi8kY2FjaGVfZmlsZTs7CisgICAgZXNhYworICBmaQorZWxzZQorICB7IGVjaG8gIiRhc19tZToxMDE2OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICA+JGNhY2hlX2ZpbGUKK2ZpCisKKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKyMgdmFsdWUuCithY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKK2ZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfAorICAgICAgICAgICAgICAgc2VkIC1uICdzL15hY19lbnZfXChbYS16QS1aXzAtOV0qXClfc2V0PS4qL1wxL3AnYDsgZG8KKyAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19vbGRfdmFsPSJcJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUiCisgIGV2YWwgYWNfbmV3X3ZhbD0iXCRhY19lbnZfJHthY192YXJ9X3ZhbHVlIgorICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgc2V0LCkKKyAgICAgIHsgZWNobyAiJGFzX21lOjEwMzI6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgZWNobyAiJGFzX21lOjEwMzY6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsKTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKyAgICAgICAgeyBlY2hvICIkYXNfbWU6MTA0MjogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKyAgICAgICAgeyBlY2hvICIkYXNfbWU6MTA0NDogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CitlY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mMjt9CisgICAgICAgIHsgZWNobyAiJGFzX21lOjEwNDY6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjI7fQorICAgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorICAgICAgZmk7OworICBlc2FjCisgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmCisgICMgd2UgcGFzcyBzb21lIHR3aWNlIChpbiBhZGRpdGlvbiB0byB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cykuCisgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgorICAgIGNhc2UgJGFjX25ld192YWwgaW4KKyAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKKyAgICAgIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICRhY192YXI9JGFjX25ld192YWwiCisgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOjEwNjU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICB7IHsgZWNobyAiJGFzX21lOjEwNjc6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitjYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgorICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCisnIEVDSE9fVD0nCScgOzsKKyAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OworICAqKSAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OworZXNhYworZWNobyAiIyEgJFNIRUxMIiA+Y29uZnRlc3Quc2gKK2VjaG8gICJleGl0IDAiICAgPj5jb25mdGVzdC5zaAorY2htb2QgK3ggY29uZnRlc3Quc2gKK2lmIHsgKGVjaG8gIiRhc19tZToxMDg4OiBQQVRIPVwiLjsuXCI7IGNvbmZ0ZXN0LnNoIikgPiY1CisgIChQQVRIPSIuOy4iOyBjb25mdGVzdC5zaCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwOTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICBhY19wYXRoX3NlcGFyYXRvcj0nOycKK2Vsc2UKKyAgYWNfcGF0aF9zZXBhcmF0b3I9OgorZmkKK1BBVEhfU0VQQVJBVE9SPSIkYWNfcGF0aF9zZXBhcmF0b3IiCitybSAtZiBjb25mdGVzdC5zaAorCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGluY2x1ZGUvbmN1cnNlc19jZmcuaDppbmNsdWRlL25jdXJzZXNfY2ZnLmhpbiIKKwordG9wX2J1aWxkZGlyPWBwd2RgCisKK2VjaG8gIiRhc19tZToxMTA0OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZWdyZXAuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfZWdyZXArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJworICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCisgICAgZmkKK2ZpCitlY2hvICIkYXNfbWU6MTExNDogcmVzdWx0OiAkYWNfY3ZfcHJvZ19lZ3JlcCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19lZ3JlcCIgPiY2CisgRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKwordGVzdCAteiAiJEVHUkVQIiAmJiB7IHsgZWNobyAiJGFzX21lOjExMTg6IGVycm9yOiBObyBlZ3JlcCBwcm9ncmFtIGZvdW5kIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IE5vIGVncmVwIHByb2dyYW0gZm91bmQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworTkNVUlNFU19NQUpPUj0iYCRhY19jdl9wcm9nX2VncmVwICdeTkNVUlNFU19NQUpPUlsgCV0qPScgJHNyY2Rpci9kaXN0Lm1rIHwgc2VkIC1lICdzL15bXjAtOV0qLy8nYCIKK05DVVJTRVNfTUlOT1I9ImAkYWNfY3ZfcHJvZ19lZ3JlcCAnXk5DVVJTRVNfTUlOT1JbIAldKj0nICRzcmNkaXIvZGlzdC5tayB8IHNlZCAtZSAncy9eW14wLTldKi8vJ2AiCitOQ1VSU0VTX1BBVENIPSJgJGFjX2N2X3Byb2dfZWdyZXAgJ15OQ1VSU0VTX1BBVENIWyAJXSo9JyAkc3JjZGlyL2Rpc3QubWsgfCBzZWQgLWUgJ3MvXlteMC05XSovLydgIgorY2ZfY3ZfYWJpX3ZlcnNpb249JHtOQ1VSU0VTX01BSk9SfQorY2ZfY3ZfcmVsX3ZlcnNpb249JHtOQ1VSU0VTX01BSk9SfS4ke05DVVJTRVNfTUlOT1J9CitjZl9jdl90aW1lc3RhbXA9YGRhdGVgCitlY2hvICIkYXNfbWU6MTEyODogcmVzdWx0OiBDb25maWd1cmluZyBOQ1VSU0VTICRjZl9jdl9yZWxfdmVyc2lvbiBBQkkgJGNmX2N2X2FiaV92ZXJzaW9uICgkY2ZfY3ZfdGltZXN0YW1wKSIgPiY1CitlY2hvICIke0VDSE9fVH1Db25maWd1cmluZyBOQ1VSU0VTICRjZl9jdl9yZWxfdmVyc2lvbiBBQkkgJGNmX2N2X2FiaV92ZXJzaW9uICgkY2ZfY3ZfdGltZXN0YW1wKSIgPiY2CisKK3Rlc3QgLXogIiRjZl9jdl9yZWxfdmVyc2lvbiIgJiYgY2ZfY3ZfcmVsX3ZlcnNpb249MC4wCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcmVsLXZlcnNpb24gb3IgLS13aXRob3V0LXJlbC12ZXJzaW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9yZWxfdmVyc2lvbitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9yZWxfdmVyc2lvbiIKKyAgeyBlY2hvICIkYXNfbWU6MTEzNjogV0FSTklORzogb3ZlcnJpZGluZyByZWxlYXNlIHZlcnNpb24gJGNmX2N2X3JlbF92ZXJzaW9uIHRvICR3aXRodmFsIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogb3ZlcnJpZGluZyByZWxlYXNlIHZlcnNpb24gJGNmX2N2X3JlbF92ZXJzaW9uIHRvICR3aXRodmFsIiA+JjI7fQorIGNmX2N2X3JlbF92ZXJzaW9uPSR3aXRodmFsCitmaTsKKworIE5DVVJTRVNfTUFKT1I9YGVjaG8gIiRjZl9jdl9yZWxfdmVyc2lvbiIgfCBzZWQgLWUgJ3MvXC4uKi8vJ2AKKyBOQ1VSU0VTX01JTk9SPWBlY2hvICIkY2ZfY3ZfcmVsX3ZlcnNpb24iIHwgc2VkIC1lICdzL15bXi5dKi8vJyAtZSAncy9eXC4vLycgLWUgJ3MvXC4uKi8vJ2AKKworaWYgdGVzdCAtbiAiJE5DVVJTRVNfTUFKT1IiIDsgdGhlbgorICBjYXNlICROQ1VSU0VTX01BSk9SIGluICModmkKKyAgWzAtOV0qKSAjKHZpCisgCTs7CisgICopCisJeyB7IGVjaG8gIiRhc19tZToxMTQ5OiBlcnJvcjogUmVsZWFzZSBtYWpvci12ZXJzaW9uIGlzIG5vdCBhIG51bWJlcjogJE5DVVJTRVNfTUFKT1IiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogUmVsZWFzZSBtYWpvci12ZXJzaW9uIGlzIG5vdCBhIG51bWJlcjogJE5DVVJTRVNfTUFKT1IiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAJOzsKKyAgZXNhYworZWxzZQorICB7IHsgZWNobyAiJGFzX21lOjExNTU6IGVycm9yOiBSZWxlYXNlIG1ham9yLXZlcnNpb24gdmFsdWUgaXMgZW1wdHkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogUmVsZWFzZSBtYWpvci12ZXJzaW9uIHZhbHVlIGlzIGVtcHR5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitpZiB0ZXN0IC1uICIkTkNVUlNFU19NSU5PUiIgOyB0aGVuCisgIGNhc2UgJE5DVVJTRVNfTUlOT1IgaW4gIyh2aQorICBbMC05XSopICModmkKKyAJOzsKKyAgKikKKwl7IHsgZWNobyAiJGFzX21lOjExNjU6IGVycm9yOiBSZWxlYXNlIG1pbm9yLXZlcnNpb24gaXMgbm90IGEgbnVtYmVyOiAkTkNVUlNFU19NSU5PUiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBSZWxlYXNlIG1pbm9yLXZlcnNpb24gaXMgbm90IGEgbnVtYmVyOiAkTkNVUlNFU19NSU5PUiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIAk7OworICBlc2FjCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6MTE3MTogZXJyb3I6IFJlbGVhc2UgbWlub3ItdmVyc2lvbiB2YWx1ZSBpcyBlbXB0eSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBSZWxlYXNlIG1pbm9yLXZlcnNpb24gdmFsdWUgaXMgZW1wdHkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK3Rlc3QgLXogIiRjZl9jdl9hYmlfdmVyc2lvbiIgJiYgY2ZfY3ZfYWJpX3ZlcnNpb249MAorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFiaS12ZXJzaW9uIG9yIC0td2l0aG91dC1hYmktdmVyc2lvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYWJpX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYWJpX3ZlcnNpb24iCisgIHsgZWNobyAiJGFzX21lOjExODE6IFdBUk5JTkc6IG92ZXJyaWRpbmcgQUJJIHZlcnNpb24gJGNmX2N2X2FiaV92ZXJzaW9uIHRvICR3aXRodmFsIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogb3ZlcnJpZGluZyBBQkkgdmVyc2lvbiAkY2ZfY3ZfYWJpX3ZlcnNpb24gdG8gJHdpdGh2YWwiID4mMjt9CisgY2ZfY3ZfYWJpX3ZlcnNpb249JHdpdGh2YWwKK2ZpOworCitpZiB0ZXN0IC1uICIkY2ZfY3ZfYWJpX3ZlcnNpb24iIDsgdGhlbgorICBjYXNlICRjZl9jdl9hYmlfdmVyc2lvbiBpbiAjKHZpCisgIFswLTldKikgIyh2aQorIAk7OworICAqKQorCXsgeyBlY2hvICIkYXNfbWU6MTE5MTogZXJyb3I6IEFCSSB2ZXJzaW9uIGlzIG5vdCBhIG51bWJlcjogJGNmX2N2X2FiaV92ZXJzaW9uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEFCSSB2ZXJzaW9uIGlzIG5vdCBhIG51bWJlcjogJGNmX2N2X2FiaV92ZXJzaW9uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgCTs7CisgIGVzYWMKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZToxMTk3OiBlcnJvcjogQUJJIHZlcnNpb24gdmFsdWUgaXMgZW1wdHkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQUJJIHZlcnNpb24gdmFsdWUgaXMgZW1wdHkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uOyBkbworICBpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC1zaDsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC5zaDsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICRhY19kaXIvc2h0b29sOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOjEyMTk6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKyAgeyB7IGVjaG8gIiRhc19tZToxMjI5OiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2VjaG8gIiRhc19tZToxMjMzOiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKKyAgYWNfY3ZfYnVpbGRfYWxpYXM9YCRhY19jb25maWdfZ3Vlc3NgCit0ZXN0IC16ICIkYWNfY3ZfYnVpbGRfYWxpYXMiICYmCisgIHsgeyBlY2hvICIkYXNfbWU6MTI0MjogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2FjX2N2X2J1aWxkPWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXNgIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6MTI0NjogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCitlY2hvICIkYXNfbWU6MTI1MTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjYKK2J1aWxkPSRhY19jdl9idWlsZAorYnVpbGRfY3B1PWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitidWlsZF92ZW5kb3I9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2J1aWxkX29zPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKK2VjaG8gIiRhc19tZToxMjU4OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaG9zdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9ob3N0X2FsaWFzPSRob3N0X2FsaWFzCit0ZXN0IC16ICIkYWNfY3ZfaG9zdF9hbGlhcyIgJiYKKyAgYWNfY3ZfaG9zdF9hbGlhcz0kYWNfY3ZfYnVpbGRfYWxpYXMKK2FjX2N2X2hvc3Q9YCRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzYCB8fAorICB7IHsgZWNobyAiJGFzX21lOjEyNjc6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhcyBmYWlsZWQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCitlY2hvICIkYXNfbWU6MTI3MjogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaG9zdCIgPiY2Citob3N0PSRhY19jdl9ob3N0Citob3N0X2NwdT1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKworaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5ndWVzcyB8fCB0ZXN0IC1mICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyA7IHRoZW4KKwllY2hvICIkYXNfbWU6MTI4MDogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90YXJnZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfdGFyZ2V0X2FsaWFzPSR0YXJnZXRfYWxpYXMKK3Rlc3QgIngkYWNfY3ZfdGFyZ2V0X2FsaWFzIiA9ICJ4IiAmJgorICBhY19jdl90YXJnZXRfYWxpYXM9JGFjX2N2X2hvc3RfYWxpYXMKK2FjX2N2X3RhcmdldD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhc2AgfHwKKyAgeyB7IGVjaG8gIiRhc19tZToxMjg5OiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhcyBmYWlsZWQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X3RhcmdldF9hbGlhcyBmYWlsZWQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZmkKK2VjaG8gIiRhc19tZToxMjk0OiByZXN1bHQ6ICRhY19jdl90YXJnZXQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3RhcmdldCIgPiY2Cit0YXJnZXQ9JGFjX2N2X3RhcmdldAordGFyZ2V0X2NwdT1gZWNobyAkYWNfY3ZfdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK3RhcmdldF92ZW5kb3I9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCit0YXJnZXRfb3M9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KKyMgd2lsbCBnZXQgY2Fub25pY2FsaXplZC4KK3Rlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCisgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKyAgICBOT05FTk9ORXMseCx4LCAmJgorICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisJc3lzdGVtX25hbWU9IiRob3N0X29zIgorZWxzZQorCXN5c3RlbV9uYW1lPSJgKHVuYW1lIC1zIC1yKSAyPi9kZXYvbnVsbGAiCisJaWYgdGVzdCAteiAiJHN5c3RlbV9uYW1lIiA7IHRoZW4KKwkJc3lzdGVtX25hbWU9ImAoaG9zdG5hbWUpIDI+L2Rldi9udWxsYCIKKwlmaQorZmkKK3Rlc3QgLW4gIiRzeXN0ZW1fbmFtZSIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBTWVNURU1fTkFNRSAiJHN5c3RlbV9uYW1lIgorRU9GCisKK2lmIHRlc3QgIiR7Y2ZfY3Zfc3lzdGVtX25hbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2ZfY3Zfc3lzdGVtX25hbWU9IiRzeXN0ZW1fbmFtZSIKK2ZpCisKK3Rlc3QgLXogIiRzeXN0ZW1fbmFtZSIgJiYgc3lzdGVtX25hbWU9IiRjZl9jdl9zeXN0ZW1fbmFtZSIKK3Rlc3QgLW4gIiRjZl9jdl9zeXN0ZW1fbmFtZSIgJiYgZWNobyAiJGFzX21lOjEzMjU6IHJlc3VsdDogQ29uZmlndXJpbmcgZm9yICRjZl9jdl9zeXN0ZW1fbmFtZSIgPiY1CitlY2hvICIke0VDSE9fVH1Db25maWd1cmluZyBmb3IgJGNmX2N2X3N5c3RlbV9uYW1lIiA+JjYKKworaWYgdGVzdCAiLiRzeXN0ZW1fbmFtZSIgIT0gIi4kY2ZfY3Zfc3lzdGVtX25hbWUiIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMzI5OiByZXN1bHQ6IENhY2hlZCBzeXN0ZW0gbmFtZSAoJHN5c3RlbV9uYW1lKSBkb2VzIG5vdCBhZ3JlZSB3aXRoIGFjdHVhbCAoJGNmX2N2X3N5c3RlbV9uYW1lKSIgPiY1CitlY2hvICIke0VDSE9fVH1DYWNoZWQgc3lzdGVtIG5hbWUgKCRzeXN0ZW1fbmFtZSkgZG9lcyBub3QgYWdyZWUgd2l0aCBhY3R1YWwgKCRjZl9jdl9zeXN0ZW1fbmFtZSkiID4mNgorCXsgeyBlY2hvICIkYXNfbWU6MTMzMTogZXJyb3I6IFwiUGxlYXNlIHJlbW92ZSBjb25maWcuY2FjaGUgYW5kIHRyeSBhZ2Fpbi5cIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcIlBsZWFzZSByZW1vdmUgY29uZmlnLmNhY2hlIGFuZCB0cnkgYWdhaW4uXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzdGVtLXR5cGUgb3IgLS13aXRob3V0LXN5c3RlbS10eXBlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXN0ZW1fdHlwZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9zeXN0ZW1fdHlwZSIKKyAgeyBlY2hvICIkYXNfbWU6MTMzOTogV0FSTklORzogb3ZlcnJpZGluZyBzeXN0ZW0gdHlwZSB0byAkd2l0aHZhbCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG92ZXJyaWRpbmcgc3lzdGVtIHR5cGUgdG8gJHdpdGh2YWwiID4mMjt9CisgY2ZfY3Zfc3lzdGVtX25hbWU9JHdpdGh2YWwKK2ZpOworCisjIyMJU2F2ZSB0aGUgZ2l2ZW4gJENGTEFHUyB0byBhbGxvdyB1c2VyLW92ZXJyaWRlLgorY2ZfdXNlcl9DRkxBR1M9IiRDRkxBR1MiCisKKyMjIwlEZWZhdWx0IGluc3RhbGwtbG9jYXRpb24KKworZWNobyAiJGFzX21lOjEzNDk6IGNoZWNraW5nIGZvciBwcmVmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcHJlZml4Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIiA7IHRoZW4KKwljYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluCisJCSMgbm9uLXZlbmRvciBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb25mbGljdAorCW9wZW5ic2QqfGZyZWVic2QqfGxpbnV4KnxjeWd3aW4qfGsqYnNkKi1nbnUpCisJCXByZWZpeD0vdXNyCisJCTs7CisJKikJcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorCQk7OworCWVzYWMKK2ZpCitlY2hvICIkYXNfbWU6MTM2MTogcmVzdWx0OiAkcHJlZml4IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRwcmVmaXgiID4mNgorCitpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiIDsgdGhlbgorZWNobyAiJGFzX21lOjEzNjU6IGNoZWNraW5nIGZvciBkZWZhdWx0IGluY2x1ZGUtZGlyZWN0b3J5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlZmF1bHQgaW5jbHVkZS1kaXJlY3RvcnkuLi4gJEVDSE9fQyIgPiY2Cit0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAxPiY2Citmb3IgY2Zfc3ltYm9sIGluIFwKKwkkaW5jbHVkZWRpciBcCisJJGluY2x1ZGVkaXIvbmN1cnNlcyBcCisJJHByZWZpeC9pbmNsdWRlIFwKKwkkcHJlZml4L2luY2x1ZGUvbmN1cnNlcyBcCisJL3Vzci9sb2NhbC9pbmNsdWRlIFwKKwkvdXNyL2xvY2FsL2luY2x1ZGUvbmN1cnNlcyBcCisJL3Vzci9pbmNsdWRlIFwKKwkvdXNyL2luY2x1ZGUvbmN1cnNlcworZG8KKwljZl9kaXI9YGV2YWwgZWNobyAkY2Zfc3ltYm9sYAorCWlmIHRlc3QgLWYgJGNmX2Rpci9jdXJzZXMuaCA7IHRoZW4KKwlpZiAoIGZncmVwIE5DVVJTRVNfVkVSU0lPTiAkY2ZfZGlyL2N1cnNlcy5oIDI+JjEgPi9kZXYvbnVsbCApIDsgdGhlbgorCQlpbmNsdWRlZGlyPSIkY2Zfc3ltYm9sIgorCQl0ZXN0IC1uICIkdmVyYm9zZSIgICYmIGVjaG8gJGFjX24gIglmb3VuZCAiIDE+JjYKKwkJYnJlYWsKKwlmaQorCWZpCisJdGVzdCAtbiAiJHZlcmJvc2UiICAmJiBlY2hvICIJdGVzdGVkICRjZl9kaXIiIDE+JjYKK2RvbmUKK2VjaG8gIiRhc19tZToxMzg4OiByZXN1bHQ6ICRpbmNsdWRlZGlyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRpbmNsdWRlZGlyIiA+JjYKK2ZpCisKKyMjIwlDaGVja3MgZm9yIHByb2dyYW1zLgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MTQwMjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorZWNobyAiJGFzX21lOjE0MTc6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTQyNTogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjE0Mjg6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE0Mzc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCitlY2hvICIkYXNfbWU6MTQ1MjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxNDYwOiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTQ2MzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIENDPSRhY19jdF9DQworZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MTQ3NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCitlY2hvICIkYXNfbWU6MTQ5MTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxNDk5OiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTUwMjogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE1MTE6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X0NDPSJjYyIKK2VjaG8gIiRhc19tZToxNTI2OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjE1MzQ6IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToxNTM3OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgQ0M9JGFjX2N0X0NDCitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MTU1MDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQoraWYgdGVzdCAiJGFjX2Rpci8kYWNfd29yZCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgIGNvbnRpbnVlCitmaQorYWNfY3ZfcHJvZ19DQz0iY2MiCitlY2hvICIkYXNfbWU6MTU3MDogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBzaGlmdAorICAgIHNldCBkdW1teSAiJGFjX2Rpci8kYWNfd29yZCIgJHsxKyIkQCJ9CisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxNTkyOiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTU5NTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToxNjA2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCitlY2hvICIkYXNfbWU6MTYyMTogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZToxNjI5OiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTYzMjogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MTY0NTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorZWNobyAiJGFzX21lOjE2NjA6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTY2ODogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjE2NzE6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgQ0M9JGFjX2N0X0NDCitmaQorCitmaQorCit0ZXN0IC16ICIkQ0MiICYmIHsgeyBlY2hvICIkYXNfbWU6MTY4MzogZXJyb3I6IG5vIGFjY2VwdGFibGUgY2MgZm91bmQgaW4gXCRQQVRIIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgY2MgZm91bmQgaW4gXCRQQVRIIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KK2VjaG8gIiRhc19tZToxNjg4OiIgXAorICAgICAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CithY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCit7IChldmFsIGVjaG8gIiRhc19tZToxNjkxOiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTY5NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChldmFsIGVjaG8gIiRhc19tZToxNjk2OiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE2OTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoZXZhbCBlY2hvICIkYXNfbWU6MTcwMTogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNzA0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNzA4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5leGUiCisjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisjIG9mIGV4ZWV4dC4KK2VjaG8gIiRhc19tZToxNzI0OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0Li4uICRFQ0hPX0MiID4mNgorYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTcyNzogXCIkYWNfbGlua19kZWZhdWx0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmtfZGVmYXVsdCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE3MzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAjIEZpbmQgdGhlIG91dHB1dCwgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdCBsaWtlbHkuICBUaGlzIHNjaGVtZSBpcworIyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikgb25seSBhcyBhIGxhc3QKKyMgcmVzb3J0LgorZm9yIGFjX2ZpbGUgaW4gYGxzIGEuZXhlIGNvbmZ0ZXN0LmV4ZSAyPi9kZXYvbnVsbDsKKyAgICAgICAgICAgICAgICBscyBhLm91dCBjb25mdGVzdCAyPi9kZXYvbnVsbDsKKyAgICAgICAgICAgICAgICBscyBhLiogY29uZnRlc3QuKiAyPi9kZXYvbnVsbGA7IGRvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLm8gfCAqLm9iaiB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiICkgOzsKKyAgICBhLm91dCApICMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisgICAgICAgICAgICAjIGNlcnRhaW5seSByaWdodC4KKyAgICAgICAgICAgIGJyZWFrOzsKKyAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKyAgICAgICAgICAjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCAtLWFraW0uCisgICAgICAgICAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorICAgICAgICAgIGJyZWFrOzsKKyAgICAqICkgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3sgeyBlY2hvICIkYXNfbWU6MTc1MzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMiID4mMjt9CisgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorZmkKKworYWNfZXhlZXh0PSRhY19jdl9leGVleHQKK2VjaG8gIiRhc19tZToxNzU5OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjYKKworIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCitlY2hvICIkYXNfbWU6MTc2NDogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisjIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCisjIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJworICB7IChldmFsIGVjaG8gIiRhc19tZToxNzcwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTc3MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgZWNobyAiJGFzX21lOjE3ODA6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgZmkKKyAgZmkKK2ZpCitlY2hvICIkYXNfbWU6MTc4ODogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKworcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCitlY2hvICIkYXNfbWU6MTc5NTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICRFQ0hPX0MiID4mNgorZWNobyAiJGFzX21lOjE3OTc6IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CitlY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjYKKworZWNobyAiJGFzX21lOjE4MDA6IGNoZWNraW5nIGZvciBleGVjdXRhYmxlIHN1ZmZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBleGVjdXRhYmxlIHN1ZmZpeC4uLiAkRUNIT19DIiA+JjYKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE4MDI6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE4MDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKKyMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAorIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKKyMgYHJtJy4KK2ZvciBhY19maWxlIGluIGAobHMgY29uZnRlc3QuZXhlOyBscyBjb25mdGVzdDsgbHMgY29uZnRlc3QuKikgMj4vZGV2L251bGxgOyBkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi5vIHwgKi5vYmogfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisgICAgICAgICAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorICAgICAgICAgIGJyZWFrOzsKKyAgICAqICkgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6MTgyMTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIEVYRUVYVDogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgRVhFRVhUOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluayIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CitlY2hvICIkYXNfbWU6MTgyNzogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9leGVleHQiID4mNgorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2VjaG8gIiRhc19tZToxODMzOiBjaGVja2luZyBmb3Igb2JqZWN0IHN1ZmZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvYmplY3Qgc3VmZml4Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxODM5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE4NTE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE4NTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICBmb3IgYWNfZmlsZSBpbiBgKGxzIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqOyBscyBjb25mdGVzdC4qKSAyPi9kZXYvbnVsbGA7IGRvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3sgeyBlY2hvICIkYXNfbWU6MTg2NjogZXJyb3I6IGNhbm5vdCBjb21wdXRlIE9CSkVYVDogY2Fubm90IGNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgT0JKRVhUOiBjYW5ub3QgY29tcGlsZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjE4NzM6IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfb2JqZXh0IiA+JjYKK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JE9CSkVYVAorZWNobyAiJGFzX21lOjE4Nzc6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxODgzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE4OTg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE5MDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTkwNDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE5MDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQorZWNobyAiJGFzX21lOjE5MTk6IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2CitHQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLWciCitlY2hvICIkYXNfbWU6MTkyNTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE5MzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxOTQzOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxOTQ2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE5NDk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxOTUyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9wcm9nX2NjX2c9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTk2MjogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCisjIFNvbWUgcGVvcGxlIHVzZSBhIEMrKyBjb21waWxlciB0byBjb21waWxlIEMuICBTaW5jZSB3ZSB1c2UgYGV4aXQnLAorIyBpbiBDKysgd2UgbmVlZCB0byBkZWNsYXJlIGl0LiAgSW4gY2FzZSBzb21lb25lIHVzZXMgdGhlIHNhbWUgY29tcGlsZXIKKyMgZm9yIGJvdGggY29tcGlsaW5nIEMgYW5kIEMrKyB3ZSBuZWVkIHRvIGhhdmUgdGhlIEMrKyBjb21waWxlciBkZWNpZGUKKyMgdGhlIGRlY2xhcmF0aW9uIG9mIGV4aXQsIHNpbmNlIGl0J3MgdGhlIG1vc3QgZGVtYW5kaW5nIGVudmlyb25tZW50LgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjaWZuZGVmIF9fY3BsdXNwbHVzCisgIGNob2tlIG1lCisjZW5kaWYKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTk4OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTk5MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxOTk1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTk5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGZvciBhY19kZWNsYXJhdGlvbiBpbiBcCisgICAnJ1wKKyAgICcjaW5jbHVkZSA8c3RkbGliLmg+JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKKyAgICd2b2lkIGV4aXQgKGludCk7JworZG8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyMDEwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyRhY19kZWNsYXJhdGlvbgoraW50CittYWluICgpCit7CitleGl0ICg0Mik7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIwMjM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjIwMjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjAyOTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjIwMzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjA0MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfZGVjbGFyYXRpb24KK2ludAorbWFpbiAoKQoreworZXhpdCAoNDIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyMDU0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyMDU3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjIwNjA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyMDYzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorcm0gLWYgY29uZnRlc3QqCitpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCisgIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCisgIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCisgIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCitmaQorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitHQ0NfVkVSU0lPTj1ub25lCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwllY2hvICIkYXNfbWU6MjA5MzogY2hlY2tpbmcgdmVyc2lvbiBvZiAkQ0MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB2ZXJzaW9uIG9mICRDQy4uLiAkRUNIT19DIiA+JjYKKwlHQ0NfVkVSU0lPTj0iYCR7Q0N9IC0tdmVyc2lvbnwgc2VkIC1lICcyLCRkJyAtZSAncy9eLiooR0NDKSAvLycgLWUgJ3MvXlteMC05Ll0qLy8nIC1lICdzL1teMC05Ll0uKi8vJ2AiCisJdGVzdCAteiAiJEdDQ19WRVJTSU9OIiAmJiBHQ0NfVkVSU0lPTj11bmtub3duCisJZWNobyAiJGFzX21lOjIwOTc6IHJlc3VsdDogJEdDQ19WRVJTSU9OIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRHQ0NfVkVSU0lPTiIgPiY2CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KK2VjaG8gIiRhc19tZToyMTA3OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNgorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIxMjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIxMzM6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjIxMzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIxNjIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIxNjY6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjIxNzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQorZWNobyAiJGFzX21lOjIyMDk6IHJlc3VsdDogJENQUCIgPiY1CitlY2hvICIke0VDSE9fVH0kQ1BQIiA+JjYKK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjIxOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgICAgICAgICAgICAgICAgICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjIyNDogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MjIzMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjI1MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjI1NzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MjI2MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgOgorZWxzZQorICB7IHsgZWNobyAiJGFzX21lOjIyOTE6IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2siID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworaWYgdGVzdCAkYWNfY3ZfY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgICBlY2hvICIkYXNfbWU6MjMwNDogY2hlY2tpbmcgd2hldGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2djY190cmFkaXRpb25hbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAgIGFjX3BhdHRlcm49IkF1dG9jb25mLioneCciCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjMxMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c2d0dHkuaD4KK2ludCBBdXRvY29uZiA9IFRJT0NHRVRQOworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZWxzZQorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0gbm87IHRoZW4KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDIzMjYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHRlcm1pby5oPgoraW50IEF1dG9jb25mID0gVENHRVRBOworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCitmaQorZWNobyAiJGFzX21lOjIzMzk6IHJlc3VsdDogJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY2CisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgQ0M9IiRDQyAtdHJhZGl0aW9uYWwiCisgIGZpCitmaQorCitlY2hvICIkYXNfbWU6MjM0NjogY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9wcm9nX0NDX2NfbytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorQ0ZfRU9GCisjIFdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbgorIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KK2FjX3RyeT0nJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1JworaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjM2MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjIzNjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgKGV2YWwgZWNobyAiJGFzX21lOjIzNjc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyMzcwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07Cit0aGVuCisgIGV2YWwgY2ZfY3ZfcHJvZ19DQ19jX289eWVzCitlbHNlCisgIGV2YWwgY2ZfY3ZfcHJvZ19DQ19jX289bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKK2lmIHRlc3QgJGNmX2N2X3Byb2dfQ0NfY19vID0geWVzOyB0aGVuCisgIGVjaG8gIiRhc19tZToyMzgxOiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MjM4NDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitlY2hvICIkYXNfbWU6MjM4ODogY2hlY2tpbmcgZm9yIFBPU0lYaXplZCBJU0MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUE9TSVhpemVkIElTQy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgLWQgL2V0Yy9jb25mL2tjb25maWcuZCAmJgorICAgZ3JlcCBfUE9TSVhfVkVSU0lPTiAvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oID4vZGV2L251bGwgMj4mMQordGhlbgorICBlY2hvICIkYXNfbWU6MjM5MzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgSVNDPXllcyAjIElmIGxhdGVyIHRlc3RzIHdhbnQgdG8gY2hlY2sgZm9yIElTQy4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRSAxCitFT0YKKworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENDPSIkQ0MgLXBvc2l4IgorICBlbHNlCisgICAgQ0M9IiRDQyAtWHAiCisgIGZpCitlbHNlCisgIGVjaG8gIiRhc19tZToyNDA3OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgSVNDPQorZmkKKworZWNobyAiJGFzX21lOjI0MTI6IGNoZWNraW5nIGZvciAke0NDLWNjfSBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAke0NDLWNjfSBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfYW5zaV9jYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjZl9jdl9hbnNpX2NjPW5vCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyMgRG9uJ3QgdHJ5IGdjYyAtYW5zaTsgdGhhdCB0dXJucyBvZmYgdXNlZnVsIGV4dGVuc2lvbnMgYW5kCisjIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KKyMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKKyMgVWx0cml4IGFuZCBPU0YvMQktc3RkMQorIyBIUC1VWAkJCS1BYSAtRF9IUFVYX1NPVVJDRQorIyBTVlI0CQkJLVhjCisjIFVuaXhXYXJlIDEuMgkJKGNhbm5vdCB1c2UgLVhjLCBzaW5jZSBBTlNJL1BPU0lYIGNsYXNoZXMpCitmb3IgY2ZfYXJnIGluICItRENDX0hBU19QUk9UT1MiIFwKKwkiIiBcCisJLXFsYW5nbHZsPWFuc2kgXAorCS1zdGQxIFwKKwktQWUgXAorCSItQWEgLURfSFBVWF9TT1VSQ0UiIFwKKwktWGMKK2RvCisKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gJGNmX2FyZworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCisJQ1BQRkxBR1M9IiRjZl9uZXdfY3BwZmxhZ3MgJENQUEZMQUdTIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyNTA2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmbmRlZiBDQ19IQVNfUFJPVE9TCisjaWYgIWRlZmluZWQoX19TVERDX18pIHx8IChfX1NURENfXyAhPSAxKQorY2hva2UgbWUKKyNlbmRpZgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisJaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CisJc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CisJc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjI1Mjc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI1MzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjUzMzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI1MzY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9hbnNpX2NjPSIkY2ZfYXJnIjsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCitDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisKK2ZpCitlY2hvICIkYXNfbWU6MjU0OTogcmVzdWx0OiAkY2ZfY3ZfYW5zaV9jYyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfYW5zaV9jYyIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9hbnNpX2NjIiAhPSAibm8iOyB0aGVuCitpZiB0ZXN0ICIuJGNmX2N2X2Fuc2lfY2MiICE9ICIuLURDQ19IQVNfUFJPVE9TIjsgdGhlbgorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRjZl9jdl9hbnNpX2NjCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKK2Vsc2UKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBDQ19IQVNfUFJPVE9TIDEKK0VPRgorCitmaQorZmkKKworaWYgdGVzdCAiJGNmX2N2X2Fuc2lfY2MiID0gIm5vIjsgdGhlbgorCXsgeyBlY2hvICIkYXNfbWU6MjYzMjogZXJyb3I6IFlvdXIgY29tcGlsZXIgZG9lcyBub3QgYXBwZWFyIHRvIHJlY29nbml6ZSBwcm90b3R5cGVzLgorWW91IGhhdmUgdGhlIGZvbGxvd2luZyBjaG9pY2VzOgorCWEuIGFkanVzdCB5b3VyIGNvbXBpbGVyIG9wdGlvbnMKKwliLiBnZXQgYW4gdXAtdG8tZGF0ZSBjb21waWxlcgorCWMuIHVzZSBhIHdyYXBwZXIgc3VjaCBhcyB1bnByb3RvIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFlvdXIgY29tcGlsZXIgZG9lcyBub3QgYXBwZWFyIHRvIHJlY29nbml6ZSBwcm90b3R5cGVzLgorWW91IGhhdmUgdGhlIGZvbGxvd2luZyBjaG9pY2VzOgorCWEuIGFkanVzdCB5b3VyIGNvbXBpbGVyIG9wdGlvbnMKKwliLiBnZXQgYW4gdXAtdG8tZGF0ZSBjb21waWxlcgorCWMuIHVzZSBhIHdyYXBwZXIgc3VjaCBhcyB1bnByb3RvIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitjYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorb3MyKikKKyAgICBDRkxBR1M9IiRDRkxBR1MgLVptdCIKKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX19TVF9NVF9FUlJOT19fIgorICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLVptdCIKKyAgICAjIGF1dG9jb25mJ3MgbWFjcm8gc2V0cyAtWmV4ZSBhbmQgc3VmZml4IGJvdGgsIHdoaWNoIGNvbmZsaWN0OncKKyAgICBMREZMQUdTPSIkTERGTEFHUyAtWm10IC1aY3J0ZGxsIgorICAgIGFjX2N2X2V4ZWV4dD0uZXhlCisgICAgOzsKK2VzYWMKKworUFJPR19FWFQ9IiRFWEVFWFQiCisKK3Rlc3QgLW4gIiRQUk9HX0VYVCIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBQUk9HX0VYVCAiJFBST0dfRVhUIgorRU9GCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorICBMRENPTkZJRz06CitlbHNlCitjYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluICModmkKK2ZyZWVic2QqKSAjKHZpCisgIHRlc3QgLXogIiRMRENPTkZJRyIgJiYgTERDT05GSUc9Ii9zYmluL2xkY29uZmlnIC1SIgorICA7OworKikgTERQQVRIPSRQQVRIOi9zYmluOi91c3Ivc2JpbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxkY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsZGNvbmZpZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjI2NzI6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9MRENPTkZJRytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXNlICRMRENPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9MRENPTkZJRz0iJExEQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRMRFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIjsgdGhlbgorICAgYWNfY3ZfcGF0aF9MRENPTkZJRz0iJGFjX2Rpci8kYWNfd29yZCIKKyAgIGVjaG8gIiRhc19tZToyNjg5OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKKyAgIGJyZWFrCitmaQorZG9uZQorCisgIDs7Citlc2FjCitmaQorTERDT05GSUc9JGFjX2N2X3BhdGhfTERDT05GSUcKKworaWYgdGVzdCAtbiAiJExEQ09ORklHIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MjcwMDogcmVzdWx0OiAkTERDT05GSUciID4mNQorZWNobyAiJHtFQ0hPX1R9JExEQ09ORklHIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjI3MDM6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICA7OworZXNhYworZmkKKworZWNobyAiJGFzX21lOjI3MTE6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBib29sIGlzIGNvbnNpc3RlbnQgd2l0aCBDKysiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBlbnN1cmUgYm9vbCBpcyBjb25zaXN0ZW50IHdpdGggQysrLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWN4eCBvciAtLXdpdGhvdXQtY3h4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jeHgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfY3h4IgorICBjZl93aXRoX2N4eD0kd2l0aHZhbAorZWxzZQorICBjZl93aXRoX2N4eD15ZXMKK2ZpOworZWNobyAiJGFzX21lOjI3MjE6IHJlc3VsdDogJGNmX3dpdGhfY3h4IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl93aXRoX2N4eCIgPiY2CitpZiB0ZXN0ICJYJGNmX3dpdGhfY3h4IiA9IFhubyA7IHRoZW4KKwlDWFg9IiIKKwlHWFg9IiIKK2Vsc2UKKwkjIHdpdGggYXV0b2NvbmYgMi4xMywgd2UgY2FuIGNoYW5nZSB0aGUgZXJyb3IgdG8gYSB3YXJuaW5nOgorCQlhY19leHQ9Y2MKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gJENDQyBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZToyNzM5OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKK2VjaG8gIiRhc19tZToyNzU0OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjI3NjI6IHJlc3VsdDogJENYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kQ1hYIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjI3NjU6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiAkQ0NDIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbCBGQ0MgS0NDIFJDQyB4bENfciB4bEMKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6Mjc3ODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCitlY2hvICIkYXNfbWU6Mjc5MzogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK2FjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKK2lmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIGVjaG8gIiRhc19tZToyODAxOiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NYWCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToyODA0OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRhY19jdF9DWFgiIHx8IGFjX2N0X0NYWD0iZysrIgorCisgIENYWD0kYWNfY3RfQ1hYCitmaQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitlY2hvICIkYXNfbWU6MjgxNjoiIFwKKyAgICAgImNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1CithY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCit7IChldmFsIGVjaG8gIiRhc19tZToyODE5OiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MjgyMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChldmFsIGVjaG8gIiRhc19tZToyODI0OiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI4Mjc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoZXZhbCBlY2hvICIkYXNfbWU6MjgyOTogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyODMyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKworZWNobyAiJGFzX21lOjI4MzU6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyODQxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjI4NTY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI4NTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Mjg2MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI4NjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCitlY2hvICIkYXNfbWU6Mjg3NzogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2CitHWFg9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9Ii1nIgorZWNobyAiJGFzX21lOjI4ODM6IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyODg5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MjkwMTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MjkwNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToyOTA3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MjkxMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X3Byb2dfY3h4X2c9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MjkyMDogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jeHhfZyIgPiY2CitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmkKK2ZvciBhY19kZWNsYXJhdGlvbiBpbiBcCisgICAnJ1wKKyAgICcjaW5jbHVkZSA8c3RkbGliLmg+JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKKyAgICd2b2lkIGV4aXQgKGludCk7JworZG8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAyOTQ3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyRhY19kZWNsYXJhdGlvbgoraW50CittYWluICgpCit7CitleGl0ICg0Mik7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjI5NjA6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI5NjM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Mjk2NjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjI5Njk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMjk3OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfZGVjbGFyYXRpb24KK2ludAorbWFpbiAoKQoreworZXhpdCAoNDIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToyOTkxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToyOTk0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjI5OTc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTozMDAwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorcm0gLWYgY29uZnRlc3QqCitpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCisgIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCisgIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCisgIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworCQkjIGF1dG9jb25mIDIuNXggcmVtb3ZlZCB0aGUgZXJyb3IgLSBieSBoYXJkY29kaW5nIGl0IHRvIGcrKy4KKwlpZiB0ZXN0ICIkQ1hYIiA9ICJnKysiIDsgdGhlbgorCQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImcrKyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZysrOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzAyNzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wYXRoX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXNlICRDWFggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCI7IHRoZW4KKyAgIGFjX2N2X3BhdGhfQ1hYPSIkYWNfZGlyLyRhY193b3JkIgorICAgZWNobyAiJGFzX21lOjMwNDQ6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorICAgYnJlYWsKK2ZpCitkb25lCisKKyAgOzsKK2VzYWMKK2ZpCitDWFg9JGFjX2N2X3BhdGhfQ1hYCisKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozMDU1OiByZXN1bHQ6ICRDWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozMDU4OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKwlmaQorCWlmIHRlc3QgIiRDWFgiID0gImcrKyIgOyB0aGVuCisJCXsgZWNobyAiJGFzX21lOjMwNjQ6IFdBUk5JTkc6IGlnbm9yaW5nIGhhcmRjb2RlZCBnKysiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpZ25vcmluZyBoYXJkY29kZWQgZysrIiA+JjI7fQorCQljZl93aXRoX2N4eD1ubzsgQ1hYPSIiOyBHWFg9IiI7CisJZmkKK2ZpCisKK0dYWF9WRVJTSU9OPW5vbmUKK2lmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJZWNobyAiJGFzX21lOjMwNzI6IGNoZWNraW5nIHZlcnNpb24gb2YgZysrIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdmVyc2lvbiBvZiBnKysuLi4gJEVDSE9fQyIgPiY2CisJR1hYX1ZFUlNJT049ImAke0NYWC1nKyt9IC0tdmVyc2lvbnwgc2VkIC1lICcyLCRkJyAtZSAncy9eLiooR0NDKSAvLycgLWUgJ3MvXlteMC05Ll0qLy8nIC1lICdzL1teMC05Ll0uKi8vJ2AiCisJdGVzdCAteiAiJEdYWF9WRVJTSU9OIiAmJiBHWFhfVkVSU0lPTj11bmtub3duCisJZWNobyAiJGFzX21lOjMwNzY6IHJlc3VsdDogJEdYWF9WRVJTSU9OIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRHWFhfVkVSU0lPTiIgPiY2CitmaQorCitjYXNlICRHWFhfVkVSU0lPTiBpbgorMSp8Mi5bMC02XSopCisJIyBHWFg9IiI7IENYWD0iIjsgYWNfY3ZfcHJvZ19neHg9bm8KKwkjIGNmX2N4eF9saWJyYXJ5PW5vCisJeyBlY2hvICIkYXNfbWU6MzA4NDogV0FSTklORzogdGVtcGxhdGVzIGRvIG5vdCB3b3JrIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogdGVtcGxhdGVzIGRvIG5vdCB3b3JrIiA+JjI7fQorCTs7Citlc2FjCisKK2VjaG8gIiRhc19tZTozMDg5OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBDKysgYmluZGluZyBhbmQgZGVtbyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIEMrKyBiaW5kaW5nIGFuZCBkZW1vLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWN4eC1iaW5kaW5nIG9yIC0td2l0aG91dC1jeHgtYmluZGluZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY3h4X2JpbmRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfY3h4X2JpbmRpbmciCisgIGNmX3dpdGhfY3h4X2JpbmRpbmc9JHdpdGh2YWwKK2Vsc2UKKyAgY2Zfd2l0aF9jeHhfYmluZGluZz0kY2Zfd2l0aF9jeHgKK2ZpOworZWNobyAiJGFzX21lOjMwOTk6IHJlc3VsdDogJGNmX3dpdGhfY3h4X2JpbmRpbmciID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX3dpdGhfY3h4X2JpbmRpbmciID4mNgorCitlY2hvICIkYXNfbWU6MzEwMjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBBZGE5NSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggQWRhOTUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWRhIG9yIC0td2l0aG91dC1hZGEgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FkYStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9hZGEiCisgIGNmX3dpdGhfYWRhPSR3aXRodmFsCitlbHNlCisgIGNmX3dpdGhfYWRhPXllcworZmk7CitlY2hvICIkYXNfbWU6MzExMjogcmVzdWx0OiAkY2Zfd2l0aF9hZGEiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX3dpdGhfYWRhIiA+JjYKKworZWNobyAiJGFzX21lOjMxMTU6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHByb2dyYW1zIHN1Y2ggYXMgdGljIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgcHJvZ3JhbXMgc3VjaCBhcyB0aWMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcHJvZ3Mgb3IgLS13aXRob3V0LXByb2dzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wcm9ncytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9wcm9ncyIKKyAgY2Zfd2l0aF9wcm9ncz0kd2l0aHZhbAorZWxzZQorICBjZl93aXRoX3Byb2dzPXllcworZmk7CitlY2hvICIkYXNfbWU6MzEyNTogcmVzdWx0OiAkY2Zfd2l0aF9wcm9ncyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2Zfd2l0aF9wcm9ncyIgPiY2CisKK2VjaG8gIiRhc19tZTozMTI4OiBjaGVja2luZyBpZiB5b3Ugd2lzaCB0byBpbnN0YWxsIGN1cnNlcy5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdpc2ggdG8gaW5zdGFsbCBjdXJzZXMuaC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jdXJzZXMtaCBvciAtLXdpdGhvdXQtY3Vyc2VzLWggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2N1cnNlc19oK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2N1cnNlc19oIgorICB3aXRoX2N1cnNlc19oPSR3aXRodmFsCitlbHNlCisgIHdpdGhfY3Vyc2VzX2g9eWVzCitmaTsKK2VjaG8gIiRhc19tZTozMTM4OiByZXN1bHQ6ICR3aXRoX2N1cnNlc19oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2N1cnNlc19oIiA+JjYKKworbW9kdWxlc190b19idWlsZD0ibmN1cnNlcyIKK2lmIHRlc3QgIlgkY2Zfd2l0aF9wcm9ncyIgIT0gWG5vIDsgdGhlbgorbW9kdWxlc190b19idWlsZD0iJG1vZHVsZXNfdG9fYnVpbGQgcHJvZ3MgdGFjayIKK2ZpCittb2R1bGVzX3RvX2J1aWxkPSIkbW9kdWxlc190b19idWlsZCBwYW5lbCBtZW51IGZvcm0iCisKK3Rlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzLF4sJHByb2dyYW1fcHJlZml4LDskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgordGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMsXCQsJHByb2dyYW1fc3VmZml4LDskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgRG91YmxlIGFueSBcIG9yICQuICBlY2hvIG1pZ2h0IGludGVycHJldCBiYWNrc2xhc2hlcy4KKyMgQnkgZGVmYXVsdCB3YXMgYHMseCx4JywgcmVtb3ZlIGl0IGlmIHVzZWxlc3MuCitjYXQgPDxcX0FDRU9GID5jb25mdGVzdC5zZWQKK3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8KK19BQ0VPRgorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gZWNobyAkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSB8IHNlZCAtZiBjb25mdGVzdC5zZWRgCitybSBjb25mdGVzdC5zZWQKKworZm9yIGFjX3Byb2cgaW4gbWF3ayBnYXdrIG5hd2sgYXdrCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjMxNjQ6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorZWNobyAiJGFzX21lOjMxNzk6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzE4NzogcmVzdWx0OiAkQVdLIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRBV0siID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzE5MDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKK3Rlc3QgLXogIiRBV0siICYmIHsgeyBlY2hvICIkYXNfbWU6MzE5NzogZXJyb3I6IE5vIGF3ayBwcm9ncmFtIGZvdW5kIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IE5vIGF3ayBwcm9ncmFtIGZvdW5kIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2VjaG8gIiRhc19tZTozMjAxOiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZWdyZXAuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfZWdyZXArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJworICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCisgICAgZmkKK2ZpCitlY2hvICIkYXNfbWU6MzIxMTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19lZ3JlcCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19lZ3JlcCIgPiY2CisgRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKwordGVzdCAteiAiJEVHUkVQIiAmJiB7IHsgZWNobyAiJGFzX21lOjMyMTU6IGVycm9yOiBObyBlZ3JlcCBwcm9ncmFtIGZvdW5kIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IE5vIGVncmVwIHByb2dyYW0gZm91bmQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KK2VjaG8gIiRhc19tZTozMjMxOiBjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSRhY19zYXZlX0lGUworICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorICAgIGNhc2UgJGFjX2Rpci8gaW4KKyAgICAvIHwgLi8gfCAuLy8gfCAvY0MvKiBcCisgICAgfCAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiBcCisgICAgfCAvdXNyL3VjYi8qICkgOzsKKyAgICAqKQorICAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorICAgICAgIyBieSBkZWZhdWx0LgorICAgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY19wcm9nIjsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKyAgICAgICAgICAgIGdyZXAgZHNwbXNnICIkYWNfZGlyLyRhY19wcm9nIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorCSAgICA6CisJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgcHdwbHVzICIkYWNfZGlyLyRhY19wcm9nIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYWNfZGlyLyRhY19wcm9nIC1jIgorCSAgICBicmVhayAyCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgV2UgZG9uJ3QgY2FjaGUgYQorICAgICMgcGF0aCBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQorZWNobyAiJGFzX21lOjMyODA6IHJlc3VsdDogJElOU1RBTEwiID4mNQorZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNgorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCitjYXNlICRJTlNUQUxMIGluCisvKikKKyAgOzsKKyopCisgIGNmX2Rpcj1gZWNobyAkSU5TVEFMTCB8IHNlZCAtZSAncyUvW14vXSokJSUnYAorICB0ZXN0IC16ICIkY2ZfZGlyIiAmJiBjZl9kaXI9LgorICBJTlNUQUxMPWBjZCAkY2ZfZGlyICYmIHB3ZGAvYGVjaG8gJElOU1RBTEwgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgOzsKK2VzYWMKKworZm9yIGFjX3Byb2cgaW4gdGRsaW50IGxpbnQgYWxpbnQKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzMwNTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0xJTlQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJTlQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTElOVD0iJExJTlQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19MSU5UPSIkYWNfcHJvZyIKK2VjaG8gIiRhc19tZTozMzIwOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorTElOVD0kYWNfY3ZfcHJvZ19MSU5UCitpZiB0ZXN0IC1uICIkTElOVCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjMzMjg6IHJlc3VsdDogJExJTlQiID4mNQorZWNobyAiJHtFQ0hPX1R9JExJTlQiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzMzMTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIHRlc3QgLW4gIiRMSU5UIiAmJiBicmVhaworZG9uZQorCitlY2hvICIkYXNfbWU6MzMzODogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJEVDSE9fQyIgPiY2CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozMzQyOiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzM0NTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorZWNobyAiJHtFQ0hPX1R9bm8sIHVzaW5nICRMTl9TIiA+JjYKK2ZpCisKK2VjaG8gIiRhc19tZTozMzQ5OiBjaGVja2luZyBmb3IgbG9uZyBmaWxlIG5hbWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxvbmcgZmlsZSBuYW1lcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9zeXNfbG9uZ19maWxlX25hbWVzPXllcworIyBUZXN0IGZvciBsb25nIGZpbGUgbmFtZXMgaW4gYWxsIHRoZSBwbGFjZXMgd2Uga25vdyBtaWdodCBtYXR0ZXI6CisjICAgICAgLgkJdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGVyZSBidWlsZGluZyB3aWxsIGhhcHBlbgorIyAgICAgICRwcmVmaXgvbGliCXdoZXJlIHdlIHdpbGwgYmUgaW5zdGFsbGluZyB0aGluZ3MKKyMgICAgICAkZXhlY19wcmVmaXgvbGliCWxpa2V3aXNlCisjIGV2YWwgaXQgdG8gZXhwYW5kIGV4ZWNfcHJlZml4LgorIyAgICAgICRUTVBESVIJCWlmIHNldCwgd2hlcmUgaXQgbWlnaHQgd2FudCB0byB3cml0ZSB0ZW1wb3JhcnkgZmlsZXMKKyMgaWYgJFRNUERJUiBpcyBub3Qgc2V0OgorIyAgICAgIC90bXAJCXdoZXJlIGl0IG1pZ2h0IHdhbnQgdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzCisjICAgICAgL3Zhci90bXAJCWxpa2V3aXNlCisjICAgICAgL3Vzci90bXAJCWxpa2V3aXNlCitpZiB0ZXN0IC1uICIkVE1QRElSIiAmJiB0ZXN0IC1kICIkVE1QRElSIiAmJiB0ZXN0IC13ICIkVE1QRElSIjsgdGhlbgorICBhY190bXBkaXJzPSRUTVBESVIKK2Vsc2UKKyAgYWNfdG1wZGlycz0nL3RtcCAvdmFyL3RtcCAvdXNyL3RtcCcKK2ZpCitmb3IgYWNfZGlyIGluICAuICRhY190bXBkaXJzIGBldmFsIGVjaG8gJHByZWZpeC9saWIgJGV4ZWNfcHJlZml4L2xpYmAgOyBkbworICB0ZXN0IC1kICRhY19kaXIgfHwgY29udGludWUKKyAgdGVzdCAtdyAkYWNfZGlyIHx8IGNvbnRpbnVlICMgSXQgaXMgbGVzcyBjb25mdXNpbmcgdG8gbm90IGVjaG8gYW55dGhpbmcgaGVyZS4KKyAgYWNfeGRpcj0kYWNfZGlyL2NmJCQKKyAgKHVtYXNrIDA3NyAmJiBta2RpciAkYWNfeGRpciAyPi9kZXYvbnVsbCkgfHwgY29udGludWUKKyAgYWNfdGYxPSRhY194ZGlyL2NvbmZ0ZXN0OTAxMjM0NQorICBhY190ZjI9JGFjX3hkaXIvY29uZnRlc3Q5MDEyMzQ2CisgIChlY2hvIDEgPiRhY190ZjEpIDI+L2Rldi9udWxsCisgIChlY2hvIDIgPiRhY190ZjIpIDI+L2Rldi9udWxsCisgIGFjX3ZhbD1gY2F0ICRhY190ZjEgMj4vZGV2L251bGxgCisgIGlmIHRlc3QgISAtZiAkYWNfdGYxIHx8IHRlc3QgIiRhY192YWwiICE9IDE7IHRoZW4KKyAgICBhY19jdl9zeXNfbG9uZ19maWxlX25hbWVzPW5vCisgICAgcm0gLXJmICRhY194ZGlyIDI+L2Rldi9udWxsCisgICAgYnJlYWsKKyAgZmkKKyAgcm0gLXJmICRhY194ZGlyIDI+L2Rldi9udWxsCitkb25lCitmaQorZWNobyAiJGFzX21lOjMzODg6IHJlc3VsdDogJGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMiID4mNgoraWYgdGVzdCAkYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xPTkdfRklMRV9OQU1FUyAxCitFT0YKKworZmkKKworZWNobyAiJGFzX21lOjMzOTg6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBhc3N1bWUgbWl4ZWQtY2FzZSBmaWxlbmFtZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBzaG91bGQgYXNzdW1lIG1peGVkLWNhc2UgZmlsZW5hbWVzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWl4ZWQtY2FzZSBvciAtLWRpc2FibGUtbWl4ZWQtY2FzZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taXhlZF9jYXNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9taXhlZF9jYXNlIgorICBlbmFibGVfbWl4ZWRjYXNlPSRlbmFibGV2YWwKK2Vsc2UKKyAgZW5hYmxlX21peGVkY2FzZT1hdXRvCitmaTsKK2VjaG8gIiRhc19tZTozNDA4OiByZXN1bHQ6ICRlbmFibGVfbWl4ZWRjYXNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfbWl4ZWRjYXNlIiA+JjYKK2lmIHRlc3QgIiRlbmFibGVfbWl4ZWRjYXNlIiA9ICJhdXRvIiA7IHRoZW4KKworZWNobyAiJGFzX21lOjM0MTI6IGNoZWNraW5nIGlmIGZpbGVzeXN0ZW0gc3VwcG9ydHMgbWl4ZWQtY2FzZSBmaWxlbmFtZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBmaWxlc3lzdGVtIHN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9taXhlZGNhc2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgOyB0aGVuCisJY2FzZSAkdGFyZ2V0X2FsaWFzIGluICModmkKKwkqLW9zMi1lbXgqfCotbXNkb3NkamdwcCp8Ki1jeWd3aW4qfCotbWluZ3czMip8Ki11d2luKikgIyh2aQorCQljZl9jdl9taXhlZGNhc2U9bm8KKwkJOzsKKwkqKQorCQljZl9jdl9taXhlZGNhc2U9eWVzCisJCTs7CisJZXNhYworZWxzZQorCXJtIC1mIGNvbmZ0ZXN0IENPTkZURVNUCisJZWNobyB0ZXN0ID5jb25mdGVzdAorCWlmIHRlc3QgLWYgQ09ORlRFU1QgOyB0aGVuCisJCWNmX2N2X21peGVkY2FzZT1ubworCWVsc2UKKwkJY2ZfY3ZfbWl4ZWRjYXNlPXllcworCWZpCisJcm0gLWYgY29uZnRlc3QgQ09ORlRFU1QKK2ZpCisKK2ZpCitlY2hvICIkYXNfbWU6MzQzOTogcmVzdWx0OiAkY2ZfY3ZfbWl4ZWRjYXNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9taXhlZGNhc2UiID4mNgordGVzdCAiJGNmX2N2X21peGVkY2FzZSIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTUlYRURDQVNFX0ZJTEVOQU1FUyAxCitFT0YKKworZWxzZQorICAgIGNmX2N2X21peGVkY2FzZT0kZW5hYmxlX21peGVkY2FzZQorICAgIGlmIHRlc3QgIiRlbmFibGVfbWl4ZWRjYXNlIiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBNSVhFRENBU0VfRklMRU5BTUVTIDEKK0VPRgorCisgICAgZmkKK2ZpCisKKyMgZG8gdGhpcyBhZnRlciBtaXhlZC1jYXNlIG9wdGlvbiAodGFncy9UQUdTIGlzIG5vdCBhcyBpbXBvcnRhbnQgYXMgdGljKS4KK2VjaG8gIiRhc19tZTozNDU2OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwke01BS0V9IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfS4uLiAkRUNIT19DIiA+JjYKK3NldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSwuLystLF9fcF8sJ2AKK2lmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcRU9GCithbGw6CisJQGVjaG8gJ2FjX21ha2V0ZW1wPSIke01BS0V9IicKK0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitldmFsIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbCB8IGdyZXAgdGVtcD1gCitpZiB0ZXN0IC1uICIkYWNfbWFrZXRlbXAiOyB0aGVuCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllcworZWxzZQorICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9wcm9nX21ha2VfJyR7YWNfbWFrZX1fc2V0YFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzQ3NjogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgU0VUX01BS0U9CitlbHNlCisgIGVjaG8gIiRhc19tZTozNDgwOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjdGFncyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY3RhZ3M7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozNDg3OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFLRV9MT1dFUl9UQUdTK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRNQUtFX0xPV0VSX1RBR1MiOyB0aGVuCisgIGFjX2N2X3Byb2dfTUFLRV9MT1dFUl9UQUdTPSIkTUFLRV9MT1dFUl9UQUdTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfTUFLRV9MT1dFUl9UQUdTPSJ5ZXMiCitlY2hvICIkYXNfbWU6MzUwMjogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX01BS0VfTE9XRVJfVEFHUyIgJiYgYWNfY3ZfcHJvZ19NQUtFX0xPV0VSX1RBR1M9Im5vIgorZmkKK2ZpCitNQUtFX0xPV0VSX1RBR1M9JGFjX2N2X3Byb2dfTUFLRV9MT1dFUl9UQUdTCitpZiB0ZXN0IC1uICIkTUFLRV9MT1dFUl9UQUdTIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzUxMTogcmVzdWx0OiAkTUFLRV9MT1dFUl9UQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNQUtFX0xPV0VSX1RBR1MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzUxNDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitpZiB0ZXN0ICIkY2ZfY3ZfbWl4ZWRjYXNlIiA9IHllcyA7IHRoZW4KKwkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImV0YWdzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBldGFnczsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjM1MjE6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BS0VfVVBQRVJfVEFHUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1M9IiRNQUtFX1VQUEVSX1RBR1MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1M9InllcyIKK2VjaG8gIiRhc19tZTozNTM2OiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFLRV9VUFBFUl9UQUdTIiAmJiBhY19jdl9wcm9nX01BS0VfVVBQRVJfVEFHUz0ibm8iCitmaQorZmkKK01BS0VfVVBQRVJfVEFHUz0kYWNfY3ZfcHJvZ19NQUtFX1VQUEVSX1RBR1MKK2lmIHRlc3QgLW4gIiRNQUtFX1VQUEVSX1RBR1MiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozNTQ1OiByZXN1bHQ6ICRNQUtFX1VQUEVSX1RBR1MiID4mNQorZWNobyAiJHtFQ0hPX1R9JE1BS0VfVVBQRVJfVEFHUyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozNTQ4OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2Vsc2UKKwlNQUtFX1VQUEVSX1RBR1M9bm8KK2ZpCisKK2lmIHRlc3QgIiRNQUtFX1VQUEVSX1RBR1MiID0geWVzIDsgdGhlbgorCU1BS0VfVVBQRVJfVEFHUz0KK2Vsc2UKKwlNQUtFX1VQUEVSX1RBR1M9IiMiCitmaQorCitpZiB0ZXN0ICIkTUFLRV9MT1dFUl9UQUdTIiA9IHllcyA7IHRoZW4KKwlNQUtFX0xPV0VSX1RBR1M9CitlbHNlCisJTUFLRV9MT1dFUl9UQUdTPSIjIgorZmkKKworZWNobyAiJGFzX21lOjM1Njg6IGNoZWNraW5nIGZvciBtYWtlZmxhZ3MgdmFyaWFibGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFrZWZsYWdzIHZhcmlhYmxlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9tYWtlZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNmX2N2X21ha2VmbGFncz0nJworCWZvciBjZl9vcHRpb24gaW4gJy0ke01BS0VGTEFHU30nICcke01GTEFHU30nCisJZG8KKwkJY2F0ID5jZl9tYWtlZmxhZ3MudG1wIDw8Q0ZfRU9GCitTSEVMTCA9IC9iaW4vc2gKK2FsbCA6CisJQCBlY2hvICcuJGNmX29wdGlvbicKK0NGX0VPRgorCQljZl9yZXN1bHQ9YCR7TUFLRS1tYWtlfSAtayAtZiBjZl9tYWtlZmxhZ3MudG1wIDI+L2Rldi9udWxsIHwgc2VkIC1lICdzLFsgCV0qJCwsJ2AKKwkJY2FzZSAiJGNmX3Jlc3VsdCIgaW4KKwkJLiprKQorCQkJY2ZfcmVzdWx0PWAke01BS0UtbWFrZX0gLWsgLWYgY2ZfbWFrZWZsYWdzLnRtcCBDQz1jYyAyPi9kZXYvbnVsbGAKKwkJCWNhc2UgIiRjZl9yZXN1bHQiIGluCisJCQkuKkNDPSopCWNmX2N2X21ha2VmbGFncz0KKwkJCQk7OworCQkJKikJY2ZfY3ZfbWFrZWZsYWdzPSRjZl9vcHRpb24KKwkJCQk7OworCQkJZXNhYworCQkJYnJlYWsKKwkJCTs7CisJCS4tKQk7OworCQkqKQllY2hvICJnaXZlbiBvcHRpb24gXCIkY2Zfb3B0aW9uXCIsIG5vIG1hdGNoIFwiJGNmX3Jlc3VsdFwiIgorCQkJOzsKKwkJZXNhYworCWRvbmUKKwlybSAtZiBjZl9tYWtlZmxhZ3MudG1wCisKK2ZpCitlY2hvICIkYXNfbWU6MzYwMjogcmVzdWx0OiAkY2ZfY3ZfbWFrZWZsYWdzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9tYWtlZmxhZ3MiID4mNgorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzYwODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCitlY2hvICIkYXNfbWU6MzYyMzogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozNjMxOiByZXN1bHQ6ICRSQU5MSUIiID4mNQorZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozNjM0OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozNjQzOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCitlY2hvICIkYXNfbWU6MzY1ODogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9Iic6JyIKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjM2Njc6IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjM2NzA6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxkOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6MzY4MjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0xEK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfTEQ9IiR7YWNfdG9vbF9wcmVmaXh9bGQiCitlY2hvICIkYXNfbWU6MzY5NzogZm91bmQgJGFjX2Rpci8kYWNfd29yZCIgPiY1CiticmVhaworZG9uZQorCitmaQorZmkKK0xEPSRhY19jdl9wcm9nX0xECitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozNzA1OiByZXN1bHQ6ICRMRCIgPiY1CitlY2hvICIke0VDSE9fVH0kTEQiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzcwODogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTEQiOyB0aGVuCisgIGFjX2N0X0xEPSRMRAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsZDsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjM3MTc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9MRCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTEQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTEQ9IiRhY19jdF9MRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0kYWNfcGF0aF9zZXBhcmF0b3IKK2FjX2R1bW15PSIkUEFUSCIKK2ZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICBJRlM9JGFjX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICRhc19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQiIHx8IGNvbnRpbnVlCithY19jdl9wcm9nX2FjX2N0X0xEPSJsZCIKK2VjaG8gIiRhc19tZTozNzMyOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfTEQiICYmIGFjX2N2X3Byb2dfYWNfY3RfTEQ9ImxkIgorZmkKK2ZpCithY19jdF9MRD0kYWNfY3ZfcHJvZ19hY19jdF9MRAoraWYgdGVzdCAtbiAiJGFjX2N0X0xEIjsgdGhlbgorICBlY2hvICIkYXNfbWU6Mzc0MTogcmVzdWx0OiAkYWNfY3RfTEQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0xEIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjM3NDQ6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBMRD0kYWNfY3RfTEQKK2Vsc2UKKyAgTEQ9IiRhY19jdl9wcm9nX0xEIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTozNzU2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKK2VjaG8gIiRhc19tZTozNzcxOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjM3Nzk6IHJlc3VsdDogJEFSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRBUiIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTozNzgyOiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6Mzc5MTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorZWNobyAiJGFzX21lOjM4MDY6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9BUiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGVjaG8gIiRhc19tZTozODE1OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQVIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MzgxODogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIEFSPSRhY19jdF9BUgorZWxzZQorICBBUj0iJGFjX2N2X3Byb2dfQVIiCitmaQorCitpZiB0ZXN0ICIke2NmX2N2X3N1YnN0X0FSX09QVFMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworZWNobyAiJGFzX21lOjM4MzE6IGNoZWNraW5nIGZvciBhcmNoaXZlciBvcHRpb25zIChzeW1ib2wgQVJfT1BUUykiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgb3B0aW9ucyAoc3ltYm9sIEFSX09QVFMpLi4uICRFQ0hPX0MiID4mNgorCitpZiB0ZXN0IC16ICIkQVJfT1BUUyIgOyB0aGVuCisJQVJfT1BUUz1ydgorCitmaQorCitjZl9jdl9zdWJzdF9BUl9PUFRTPSRBUl9PUFRTCitlY2hvICIkYXNfbWU6Mzg0MDogcmVzdWx0OiAkQVJfT1BUUyIgPiY1CitlY2hvICIke0VDSE9fVH0kQVJfT1BUUyIgPiY2CisKK2ZpCisKK2VjaG8gIiRhc19tZTozODQ1OiBjaGVja2luZyBpZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYW4gaW5zdGFsbC1wcmVmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3UgaGF2ZSBzcGVjaWZpZWQgYW4gaW5zdGFsbC1wcmVmaXguLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW5zdGFsbC1wcmVmaXggb3IgLS13aXRob3V0LWluc3RhbGwtcHJlZml4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9pbnN0YWxsX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9pbnN0YWxsX3ByZWZpeCIKKyAgY2FzZSAiJHdpdGh2YWwiIGluICModmkKKwl5ZXN8bm8pICModmkKKwkJOzsKKwkqKQlERVNURElSPSIkd2l0aHZhbCIKKwkJOzsKKwllc2FjCitmaTsKK2VjaG8gIiRhc19tZTozODU4OiByZXN1bHQ6ICRERVNURElSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRERVNURElSIiA+JjYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIElmIHdlJ3JlIGNyb3NzLWNvbXBpbGluZywgYWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHRvb2xzIGFuZCB0aGVpcgorIyBvcHRpb25zLiAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgb3JpZW50ZWQgdG93YXJkIGlkZW50aWZ5aW5nIHRoZSBob3N0CisjIGNvbXBpbGVyLCBldGMuLCBidXQgd2UgbmVlZCBhIGJ1aWxkIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHBhcnRzIG9mIHRoZSBzb3VyY2UuCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCisJIyBkZWZhdWx0cyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUKKwk6ICR7QlVJTERfQ0ZMQUdTOj0nJ30KKwk6ICR7QlVJTERfQ1BQRkxBR1M6PScnfQorCTogJHtCVUlMRF9MREZMQUdTOj0nJ30KKwk6ICR7QlVJTERfTElCUzo9Jyd9CisJOiAke0JVSUxEX0VYRUVYVDo9JyR4J30KKwk6ICR7QlVJTERfT0JKRVhUOj0nbyd9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtY2Mgb3IgLS13aXRob3V0LWJ1aWxkLWNjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9jYytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9jYyIKKyAgQlVJTERfQ0M9IiR3aXRodmFsIgorZWxzZQorICBmb3IgYWNfcHJvZyBpbiBnY2MgY2MgY2wKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6Mzg4NjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0JVSUxEX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRCVUlMRF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19CVUlMRF9DQz0iJEJVSUxEX0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfQlVJTERfQ0M9IiRhY19wcm9nIgorZWNobyAiJGFzX21lOjM5MDE6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworZmkKK2ZpCitCVUlMRF9DQz0kYWNfY3ZfcHJvZ19CVUlMRF9DQworaWYgdGVzdCAtbiAiJEJVSUxEX0NDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MzkwOTogcmVzdWx0OiAkQlVJTERfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0NDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjM5MTI6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkQlVJTERfQ0MiICYmIGJyZWFrCitkb25lCisKK2ZpOworCWVjaG8gIiRhc19tZTozOTIwOiBjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CisJZWNobyAiJGFzX21lOjM5MjI6IHJlc3VsdDogJEJVSUxEX0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DQyIgPiY2CisKKwllY2hvICIkYXNfbWU6MzkyNTogY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBDIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtY3BwIG9yIC0td2l0aG91dC1idWlsZC1jcHAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2J1aWxkX2NwcCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9jcHAiCisgIEJVSUxEX0NQUD0iJHdpdGh2YWwiCitlbHNlCisgIEJVSUxEX0NQUD0nJHtCVUlMRF9DQ30gLUUnCitmaTsKKwllY2hvICIkYXNfbWU6MzkzNTogcmVzdWx0OiAkQlVJTERfQ1BQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DUFAiID4mNgorCisJZWNobyAiJGFzX21lOjM5Mzg6IGNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBmbGFncyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBmbGFncy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1idWlsZC1jZmxhZ3Mgb3IgLS13aXRob3V0LWJ1aWxkLWNmbGFncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYnVpbGRfY2ZsYWdzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2J1aWxkX2NmbGFncyIKKyAgQlVJTERfQ0ZMQUdTPSIkd2l0aHZhbCIKK2ZpOworCWVjaG8gIiRhc19tZTozOTQ2OiByZXN1bHQ6ICRCVUlMRF9DRkxBR1MiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0NGTEFHUyIgPiY2CisKKwllY2hvICIkYXNfbWU6Mzk0OTogY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBDIHByZXByb2Nlc3Nvci1mbGFncyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgQyBwcmVwcm9jZXNzb3ItZmxhZ3MuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYnVpbGQtY3BwZmxhZ3Mgb3IgLS13aXRob3V0LWJ1aWxkLWNwcGZsYWdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9jcHBmbGFncytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9idWlsZF9jcHBmbGFncyIKKyAgQlVJTERfQ1BQRkxBR1M9IiR3aXRodmFsIgorZmk7CisJZWNobyAiJGFzX21lOjM5NTc6IHJlc3VsdDogJEJVSUxEX0NQUEZMQUdTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRCVUlMRF9DUFBGTEFHUyIgPiY2CisKKwllY2hvICIkYXNfbWU6Mzk2MDogY2hlY2tpbmcgZm9yIG5hdGl2ZSBidWlsZCBsaW5rZXItZmxhZ3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmF0aXZlIGJ1aWxkIGxpbmtlci1mbGFncy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1idWlsZC1sZGZsYWdzIG9yIC0td2l0aG91dC1idWlsZC1sZGZsYWdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9sZGZsYWdzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2J1aWxkX2xkZmxhZ3MiCisgIEJVSUxEX0xERkxBR1M9IiR3aXRodmFsIgorZmk7CisJZWNobyAiJGFzX21lOjM5Njg6IHJlc3VsdDogJEJVSUxEX0xERkxBR1MiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0xERkxBR1MiID4mNgorCisJZWNobyAiJGFzX21lOjM5NzE6IGNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgbGlua2VyLWxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYXRpdmUgYnVpbGQgbGlua2VyLWxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1idWlsZC1saWJzIG9yIC0td2l0aG91dC1idWlsZC1saWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9idWlsZF9saWJzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2J1aWxkX2xpYnMiCisgIEJVSUxEX0xJQlM9IiR3aXRodmFsIgorZmk7CisJZWNobyAiJGFzX21lOjM5Nzk6IHJlc3VsdDogJEJVSUxEX0xJQlMiID4mNQorZWNobyAiJHtFQ0hPX1R9JEJVSUxEX0xJQlMiID4mNgorCisJIyB0aGlzIGFzc3VtZXMgd2UncmUgb24gVW5peC4KKwlCVUlMRF9FWEVFWFQ9CisJQlVJTERfT0JKRVhUPW8KKworCTogJHtCVUlMRF9DQzo9JyR7Q0N9J30KKworCWlmICggdGVzdCAiJEJVSUxEX0NDIiA9ICIkQ0MiIHx8IHRlc3QgIiRCVUlMRF9DQyIgPSAnJHtDQ30nICkgOyB0aGVuCisJCXsgeyBlY2hvICIkYXNfbWU6Mzk4OTogZXJyb3I6IENyb3NzLWJ1aWxkIHJlcXVpcmVzIHR3byBjb21waWxlcnMuCitVc2UgLS13aXRoLWJ1aWxkLWNjIHRvIHNwZWNpZnkgdGhlIG5hdGl2ZSBjb21waWxlci4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQ3Jvc3MtYnVpbGQgcmVxdWlyZXMgdHdvIGNvbXBpbGVycy4KK1VzZSAtLXdpdGgtYnVpbGQtY2MgdG8gc3BlY2lmeSB0aGUgbmF0aXZlIGNvbXBpbGVyLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWZpCisKK2Vsc2UKKwk6ICR7QlVJTERfQ0M6PScke0NDfSd9CisJOiAke0JVSUxEX0NQUDo9JyR7Q1BQfSd9CisJOiAke0JVSUxEX0NGTEFHUzo9JyR7Q0ZMQUdTfSd9CisJOiAke0JVSUxEX0NQUEZMQUdTOj0nJHtDUFBGTEFHU30nfQorCTogJHtCVUlMRF9MREZMQUdTOj0nJHtMREZMQUdTfSd9CisJOiAke0JVSUxEX0xJQlM6PScke0xJQlN9J30KKwk6ICR7QlVJTERfRVhFRVhUOj0nJHgnfQorCTogJHtCVUlMRF9PQkpFWFQ6PSdvJ30KK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIE9wdGlvbnMgdG8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgc2V0IG9mIGxpYnJhcmllcyB3aGljaCBhcmUgdXNlZC4KKyMjIyBVc2UgIi0td2l0aG91dC1ub3JtYWwgLS13aXRoLXNoYXJlZCIgdG8gYWxsb3cgdGhlIGRlZmF1bHQgbW9kZWwgdG8gYmUKKyMjIyBzaGFyZWQsIGZvciBleGFtcGxlLgorY2ZfbGlzdF9tb2RlbHM9IiIKKworTElCVE9PTD0KKworIyBjb21tb24gbGlicmFyeSBtYWludGVuYW5jZSBzeW1ib2xzIHRoYXQgYXJlIGNvbnZlbmllbnQgZm9yIGxpYnRvb2wgc2NyaXB0czoKK0xJQl9DUkVBVEU9JyR7QVJ9IC1jcicKK0xJQl9PQkpFQ1Q9JyR7T0JKRUNUU30nCitMSUJfU1VGRklYPS5hCitMSUJfUFJFUD0iJFJBTkxJQiIKKworIyBzeW1ib2xzIHVzZWQgdG8gcHJvcCBsaWJ0b29sIHVwIHRvIGVuYWJsZSBpdCB0byBkZXRlcm1pbmUgd2hhdCBpdCBzaG91bGQgYmUKKyMgZG9pbmc6CitMSUJfQ0xFQU49CitMSUJfQ09NUElMRT0KK0xJQl9MSU5LPScke0NDfScKK0xJQl9JTlNUQUxMPQorTElCX1VOSU5TVEFMTD0KKworZWNobyAiJGFzX21lOjQwMzA6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGxpYnJhcmllcyB3aXRoIGxpYnRvb2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBsaWJyYXJpZXMgd2l0aCBsaWJ0b29sLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wgb3IgLS13aXRob3V0LWxpYnRvb2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbGlidG9vbCIKKyAgd2l0aF9saWJ0b29sPSR3aXRodmFsCitlbHNlCisgIHdpdGhfbGlidG9vbD1ubworZmk7CitlY2hvICIkYXNfbWU6NDA0MDogcmVzdWx0OiAkd2l0aF9saWJ0b29sIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2xpYnRvb2wiID4mNgoraWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIjsgdGhlbgorCisgCWlmIHRlc3QgIiR3aXRoX2xpYnRvb2wiICE9ICJ5ZXMiIDsgdGhlbgorCitpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgY2ZfcGF0aF9zeW50YXg9IiRwcmVmaXgiCitlbHNlCisgIGNmX3BhdGhfc3ludGF4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCitmaQorCitjYXNlICIuJHdpdGhfbGlidG9vbCIgaW4gIyh2aQorLlwkXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW2EtekEtWl06W1xcL10qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXCR7KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgd2l0aF9saWJ0b29sPSIkd2l0aF9saWJ0b29sIgorICBjYXNlICIuJHdpdGhfbGlidG9vbCIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgIHdpdGhfbGlidG9vbD1gZWNobyAkd2l0aF9saWJ0b29sIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICAgIDs7CisgIGVzYWMKKyAgOzsgIyh2aQorLm5vfC5OT05FLyopCisgIHdpdGhfbGlidG9vbD1gZWNobyAkd2l0aF9saWJ0b29sIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICA7OworKikKKyAgeyB7IGVjaG8gIiRhc19tZTo0MDcxOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGhfbGlidG9vbFwiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRoX2xpYnRvb2xcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICA7OworZXNhYworCisJCUxJQlRPT0w9JHdpdGhfbGlidG9vbAorCWVsc2UKKyAJCSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlidG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGlidG9vbDsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjQwODE6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9MSUJUT09MK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhc2UgJExJQlRPT0wgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTElCVE9PTD0iJExJQlRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIjsgdGhlbgorICAgYWNfY3ZfcGF0aF9MSUJUT09MPSIkYWNfZGlyLyRhY193b3JkIgorICAgZWNobyAiJGFzX21lOjQwOTg6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorICAgYnJlYWsKK2ZpCitkb25lCisKKyAgOzsKK2VzYWMKK2ZpCitMSUJUT09MPSRhY19jdl9wYXRoX0xJQlRPT0wKKworaWYgdGVzdCAtbiAiJExJQlRPT0wiOyB0aGVuCisgIGVjaG8gIiRhc19tZTo0MTA5OiByZXN1bHQ6ICRMSUJUT09MIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMSUJUT09MIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOjQxMTI6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworIAlmaQorIAlpZiB0ZXN0IC16ICIkTElCVE9PTCIgOyB0aGVuCisgCQl7IHsgZWNobyAiJGFzX21lOjQxMTg6IGVycm9yOiBDYW5ub3QgZmluZCBsaWJ0b29sIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBmaW5kIGxpYnRvb2wiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAJZmkKKwlMSUJfQ1JFQVRFPScke0xJQlRPT0x9IC0tbW9kZT1saW5rICR7Q0N9IC1ycGF0aCAke0RFU1RESVJ9JHtsaWJkaXJ9IC12ZXJzaW9uLWluZm8gYGN1dCAtZjEgJHtzcmNkaXJ9L1ZFUlNJT05gICR7TElCVE9PTF9PUFRTfSAtbycKKwlMSUJfT0JKRUNUPScke09CSkVDVFM6Lm89LmxvfScKKwlMSUJfU1VGRklYPS5sYQorCUxJQl9DTEVBTj0nJHtMSUJUT09MfSAtLW1vZGU9Y2xlYW4nCisJTElCX0NPTVBJTEU9JyR7TElCVE9PTH0gLS1tb2RlPWNvbXBpbGUnCisJTElCX0xJTks9JyR7TElCVE9PTH0gLS1tb2RlPWxpbmsgJHtDQ30gJHtMSUJUT09MX09QVFN9JworCUxJQl9JTlNUQUxMPScke0xJQlRPT0x9IC0tbW9kZT1pbnN0YWxsJworCUxJQl9VTklOU1RBTEw9JyR7TElCVE9PTH0gLS1tb2RlPXVuaW5zdGFsbCcKKwlMSUJfUFJFUD06CisKKwkjIFNob3cgdGhlIHZlcnNpb24gb2YgbGlidG9vbAorCWVjaG8gIiRhc19tZTo0MTMzOiBjaGVja2luZyB2ZXJzaW9uIG9mIGxpYnRvb2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB2ZXJzaW9uIG9mIGxpYnRvb2wuLi4gJEVDSE9fQyIgPiY2CisKKwkjIFNhdmUgdGhlIHZlcnNpb24gaW4gYSBjYWNoZSB2YXJpYWJsZSAtIHRoaXMgaXMgbm90IGVudGlyZWx5IGEgZ29vZAorCSMgdGhpbmcsIGJ1dCB0aGUgdmVyc2lvbiBzdHJpbmcgZnJvbSBsaWJ0b29sIGlzIHZlcnkgdWdseSwgYW5kIGZvcgorCSMgYnVnIHJlcG9ydHMgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGhhdmUgdGhlIG9yaWdpbmFsIHN0cmluZy4KKwljZl9jdl9saWJ0b29sX3ZlcnNpb249YCRMSUJUT09MIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1lICcvXiQvZCcgfHNlZCAtZSAnMiwkZCcgLWUgJ3MvKFteKV0qKS8vZycgLWUgJ3MvXlteMS05XSovLycgLWUgJ3MvW14wLTkuXS4qLy8nYAorCWVjaG8gIiRhc19tZTo0MTQwOiByZXN1bHQ6ICRjZl9jdl9saWJ0b29sX3ZlcnNpb24iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2xpYnRvb2xfdmVyc2lvbiIgPiY2CisJaWYgdGVzdCAteiAiJGNmX2N2X2xpYnRvb2xfdmVyc2lvbiIgOyB0aGVuCisJCXsgeyBlY2hvICIkYXNfbWU6NDE0MzogZXJyb3I6IFRoaXMgaXMgbm90IEdOVSBsaWJ0b29sIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFRoaXMgaXMgbm90IEdOVSBsaWJ0b29sIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJZmkKKworCSMgc3BlY2lhbCBoYWNrIHRvIGFkZCAtLXRhZyBvcHRpb24gZm9yIEMrKyBjb21waWxlcgorCWNhc2UgJGNmX2N2X2xpYnRvb2xfdmVyc2lvbiBpbgorCTEuWzUtOV0qfFsyLTldKikKKwkJTElCVE9PTF9DWFg9IiRMSUJUT09MIC0tdGFnPUNYWCIKKwkJTElCVE9PTD0iJExJQlRPT0wgLS10YWc9Q0MiCisJCTs7CisJKikKKwkJTElCVE9PTF9DWFg9IiRMSUJUT09MIgorCQk7OworCWVzYWMKK2Vsc2UKKwlMSUJUT09MPSIiCisJTElCVE9PTF9DWFg9IiIKK2ZpCisKK3Rlc3QgLXogIiRMSUJUT09MIiAmJiBFQ0hPX0xUPQorCitpZiB0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAibm8iIDsgdGhlbgorCitjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIGxpYnRvb2wiCisKK2Vsc2UKKworZWNobyAiJGFzX21lOjQxNzE6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNoYXJlZCBvciAtLXdpdGhvdXQtc2hhcmVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfc2hhcmVkIgorICB3aXRoX3NoYXJlZD0kd2l0aHZhbAorZWxzZQorICB3aXRoX3NoYXJlZD1ubworZmk7CitlY2hvICIkYXNfbWU6NDE4MTogcmVzdWx0OiAkd2l0aF9zaGFyZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfc2hhcmVkIiA+JjYKK3Rlc3QgIiR3aXRoX3NoYXJlZCIgPSAieWVzIiAmJiBjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIHNoYXJlZCIKKworZWNobyAiJGFzX21lOjQxODU6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5vcm1hbCBvciAtLXdpdGhvdXQtbm9ybWFsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ub3JtYWwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbm9ybWFsIgorICB3aXRoX25vcm1hbD0kd2l0aHZhbAorZWxzZQorICB3aXRoX25vcm1hbD15ZXMKK2ZpOworZWNobyAiJGFzX21lOjQxOTU6IHJlc3VsdDogJHdpdGhfbm9ybWFsIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX25vcm1hbCIgPiY2Cit0ZXN0ICIkd2l0aF9ub3JtYWwiID0gInllcyIgJiYgY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBub3JtYWwiCisKK2VjaG8gIiRhc19tZTo0MTk5OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVidWcgb3IgLS13aXRob3V0LWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9kZWJ1ZyIKKyAgd2l0aF9kZWJ1Zz0kd2l0aHZhbAorZWxzZQorICB3aXRoX2RlYnVnPXllcworZmk7CitlY2hvICIkYXNfbWU6NDIwOTogcmVzdWx0OiAkd2l0aF9kZWJ1ZyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9kZWJ1ZyIgPiY2Cit0ZXN0ICIkd2l0aF9kZWJ1ZyIgPSAieWVzIiAmJiBjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIGRlYnVnIgorCitlY2hvICIkYXNfbWU6NDIxMzogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgcHJvZmlsaW5nIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHByb2ZpbGluZyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcHJvZmlsZSBvciAtLXdpdGhvdXQtcHJvZmlsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcHJvZmlsZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9wcm9maWxlIgorICB3aXRoX3Byb2ZpbGU9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9wcm9maWxlPW5vCitmaTsKK2VjaG8gIiRhc19tZTo0MjIzOiByZXN1bHQ6ICR3aXRoX3Byb2ZpbGUiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfcHJvZmlsZSIgPiY2Cit0ZXN0ICIkd2l0aF9wcm9maWxlIiA9ICJ5ZXMiICYmIGNmX2xpc3RfbW9kZWxzPSIkY2ZfbGlzdF9tb2RlbHMgcHJvZmlsZSIKKworZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitlY2hvICIkYXNfbWU6NDIzMTogY2hlY2tpbmcgZm9yIHNwZWNpZmllZCBtb2RlbHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3BlY2lmaWVkIG1vZGVscy4uLiAkRUNIT19DIiA+JjYKK3Rlc3QgLXogIiRjZl9saXN0X21vZGVscyIgJiYgY2ZfbGlzdF9tb2RlbHM9bm9ybWFsCit0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAibm8iICYmIGNmX2xpc3RfbW9kZWxzPWxpYnRvb2wKK2VjaG8gIiRhc19tZTo0MjM1OiByZXN1bHQ6ICRjZl9saXN0X21vZGVscyIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfbGlzdF9tb2RlbHMiID4mNgorCisjIyMgVXNlIHRoZSBmaXJzdCBtb2RlbCBhcyB0aGUgZGVmYXVsdCwgYW5kIHNhdmUgaXRzIHN1ZmZpeCBmb3IgdXNlIGluIGJ1aWxkaW5nCisjIyMgdXAgdGVzdC1hcHBsaWNhdGlvbnMuCitlY2hvICIkYXNfbWU6NDI0MDogY2hlY2tpbmcgZm9yIGRlZmF1bHQgbW9kZWwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGVmYXVsdCBtb2RlbC4uLiAkRUNIT19DIiA+JjYKK0RGVF9MV1JfTU9ERUw9YGVjaG8gIiRjZl9saXN0X21vZGVscyIgfCAkQVdLICd7cHJpbnQgJDF9J2AKK2VjaG8gIiRhc19tZTo0MjQzOiByZXN1bHQ6ICRERlRfTFdSX01PREVMIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRERlRfTFdSX01PREVMIiA+JjYKKworREZUX1VQUl9NT0RFTD1gZWNobyAiJERGVF9MV1JfTU9ERUwiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCitUSUNTX05BTUU9dGljCisKK1RJTkZPX05BTUU9dGluZm8KKworTElCX05BTUU9bmN1cnNlcworCitMSUJfRElSPS4uL2xpYgorTElCXzJORD0uLi8uLi9saWIKKworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwlPUy8yKnxvczIqKSAjKHZpCisgICAgICAgIExJQl9QUkVGSVg9JycKKyAgICAgICAgOzsKKwkqKQlMSUJfUFJFRklYPSdsaWInCisgICAgICAgIDs7CisJZXNhYworY2ZfcHJlZml4PSRMSUJfUFJFRklYCisKK0xJQl9QUkVGSVg9JGNmX3ByZWZpeAorCitMSUJfU1VGRklYPQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2VjaG8gIiRhc19tZTo0MjcyOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBhIHNlcGFyYXRlIHRlcm1pbmZvIGxpYnJhcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBhIHNlcGFyYXRlIHRlcm1pbmZvIGxpYnJhcnkuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGVybWxpYiBvciAtLXdpdGhvdXQtdGVybWxpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdGVybWxpYitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90ZXJtbGliIgorICB3aXRoX3Rlcm1saWI9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF90ZXJtbGliPW5vCitmaTsKK2VjaG8gIiRhc19tZTo0MjgyOiByZXN1bHQ6ICR3aXRoX3Rlcm1saWIiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfdGVybWxpYiIgPiY2CisKK2VjaG8gIiRhc19tZTo0Mjg1OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBidWlsZCBhIHNlcGFyYXRlIHRpYyBsaWJyYXJ5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBzZXBhcmF0ZSB0aWMgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10aWNsaWIgb3IgLS13aXRob3V0LXRpY2xpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdGljbGliK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3RpY2xpYiIKKyAgd2l0aF90aWNsaWI9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF90aWNsaWI9bm8KK2ZpOworZWNobyAiJGFzX21lOjQyOTU6IHJlc3VsdDogJHdpdGhfdGljbGliIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3RpY2xpYiIgPiY2CisKKyMjIyBDaGVja3MgZm9yIHNwZWNpYWwgbGlicmFyaWVzLCBtdXN0IGJlIGRvbmUgdXAtZnJvbnQuCitTSExJQl9MSVNUPSIiCisKK2VjaG8gIiRhc19tZTo0MzAxOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggdGhlIEdQTSBtb3VzZSBsaWJyYXJ5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIHRoZSBHUE0gbW91c2UgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ncG0gb3IgLS13aXRob3V0LWdwbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ3BtK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2dwbSIKKyAgd2l0aF9ncG09JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9ncG09bWF5YmUKK2ZpOworZWNobyAiJGFzX21lOjQzMTE6IHJlc3VsdDogJHdpdGhfZ3BtIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2dwbSIgPiY2CisKK2lmIHRlc3QgIiR3aXRoX2dwbSIgIT0gbm8gOyB0aGVuCisJZWNobyAiJGFzX21lOjQzMTU6IGNoZWNraW5nIGZvciBncG0uaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBncG0uaC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2dwbV9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDMyMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8Z3BtLmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQzMjU6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjQzMzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX2dwbV9oPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfaGVhZGVyX2dwbV9oPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NDM1MDogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2dwbV9oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfZ3BtX2giID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2dwbV9oID0geWVzOyB0aGVuCisKKwkJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9HUE1fSCAxCitFT0YKKworCQlpZiB0ZXN0ICIkd2l0aF9ncG0iICE9IHllcyAmJiB0ZXN0ICIkd2l0aF9ncG0iICE9IG1heWJlIDsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhc3N1bWluZyB3ZSByZWFsbHkgaGF2ZSBHUE0gbGlicmFyeSIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NDM2MTogdGVzdGluZyBhc3N1bWluZyB3ZSByZWFsbHkgaGF2ZSBHUE0gbGlicmFyeSAuLi4iIDE+JjUKKworCQkJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJHUE0gMQorRU9GCisKKwkJZWxzZQorCQkJZWNobyAiJGFzX21lOjQzNjg6IGNoZWNraW5nIGZvciBHcG1fT3BlbiBpbiAtbGdwbSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHcG1fT3BlbiBpbiAtbGdwbS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2dwbV9HcG1fT3BlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdwbSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQzNzYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIEdwbV9PcGVuICgpOworaW50CittYWluICgpCit7CitHcG1fT3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQzOTU6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQzOTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0NDAxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDQwNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9ncG1fR3BtX09wZW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9ncG1fR3BtX09wZW49bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjQ0MTU6IHJlc3VsdDogJGFjX2N2X2xpYl9ncG1fR3BtX09wZW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9ncG1fR3BtX09wZW4iID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2dwbV9HcG1fT3BlbiA9IHllczsgdGhlbgorICA6CitlbHNlCisKKwkJCQl7IHsgZWNobyAiJGFzX21lOjQ0MjE6IGVycm9yOiBDYW5ub3QgbGluayB3aXRoIEdQTSBsaWJyYXJ5IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBsaW5rIHdpdGggR1BNIGxpYnJhcnkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJZmkKKwkJd2l0aF9ncG09eWVzCisKK2ZpCisKK2Vsc2UKKworCQl0ZXN0ICIkd2l0aF9ncG0iICE9IG1heWJlICYmIHsgZWNobyAiJGFzX21lOjQ0MzE6IFdBUk5JTkc6IENhbm5vdCBmaW5kIEdQTSBoZWFkZXIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW5ub3QgZmluZCBHUE0gaGVhZGVyIiA+JjI7fQorCQl3aXRoX2dwbT1ubworCitmaQorCitmaQorCitpZiB0ZXN0ICIkd2l0aF9ncG0iICE9IG5vIDsgdGhlbgorCWVjaG8gIiRhc19tZTo0NDQwOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsb2FkIEdQTSBkeW5hbWljYWxseSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxvYWQgR1BNIGR5bmFtaWNhbGx5Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRsc3ltIG9yIC0td2l0aG91dC1kbHN5bSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGxzeW0rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZGxzeW0iCisgIHdpdGhfZGxzeW09JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9kbHN5bT15ZXMKK2ZpOworCWVjaG8gIiRhc19tZTo0NDUwOiByZXN1bHQ6ICR3aXRoX2Rsc3ltIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2Rsc3ltIiA+JjYKKwlpZiB0ZXN0ICIkd2l0aF9kbHN5bSIgPSB5ZXMgOyB0aGVuCisKK2NmX2hhdmVfZGxzeW09bm8KK2VjaG8gIiRhc19tZTo0NDU1OiBjaGVja2luZyBmb3IgZGxzeW0iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxzeW0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZGxzeW0rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA0NDYxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGRsc3ltICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRsc3ltICgpOworY2hhciAoKmYpICgpOworCitpbnQKK21haW4gKCkKK3sKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9kbHN5bSkgfHwgZGVmaW5lZCAoX19zdHViX19fZGxzeW0pCitjaG9rZSBtZQorI2Vsc2UKK2YgPSBkbHN5bTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0NDkyOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NDk1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDQ5ODogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ1MDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX2Rsc3ltPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX2Rsc3ltPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo0NTExOiByZXN1bHQ6ICRhY19jdl9mdW5jX2Rsc3ltIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Rsc3ltIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfZGxzeW0gPSB5ZXM7IHRoZW4KKyAgY2ZfaGF2ZV9kbHN5bT15ZXMKK2Vsc2UKKworY2ZfaGF2ZV9saWJkbD1ubworZWNobyAiJGFzX21lOjQ1MTg6IGNoZWNraW5nIGZvciBkbHN5bSBpbiAtbGRsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsc3ltIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbHN5bStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNDUyNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZGxzeW0gKCk7CitpbnQKK21haW4gKCkKK3sKK2Rsc3ltICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDU0NTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDU0ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ1NTE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NTU0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX2RsX2Rsc3ltPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZGxfZGxzeW09bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjQ1NjU6IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbHN5bSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsc3ltIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbHN5bSA9IHllczsgdGhlbgorCisJY2ZfaGF2ZV9kbHN5bT15ZXMKKwljZl9oYXZlX2xpYmRsPXllcworZmkKKworZmkKKworaWYgdGVzdCAiJGNmX2hhdmVfZGxzeW0iID0geWVzIDsgdGhlbgorCXRlc3QgIiRjZl9oYXZlX2xpYmRsIiA9IHllcyAmJiBMSUJTPSItbGRsICRMSUJTIgorCisJZWNobyAiJGFzX21lOjQ1Nzg6IGNoZWNraW5nIHdoZXRoZXIgYWJsZSB0byBsaW5rIHRvIGRsKigpIGZ1bmN0aW9ucyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYWJsZSB0byBsaW5rIHRvIGRsKigpIGZ1bmN0aW9ucy4uLiAkRUNIT19DIiA+JjYKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQ1ODEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGRsZmNuLmg+CitpbnQKK21haW4gKCkKK3sKKworCQl2b2lkICpvYmo7CisJCWlmICgob2JqID0gZGxvcGVuKCJmaWxlbmFtZSIsIDApKSAhPSAwKSB7CisJCQlpZiAoZGxzeW0ob2JqLCAic3ltYm9sbmFtZSIpID09IDApIHsKKwkJCWRsY2xvc2Uob2JqKTsKKwkJCX0KKwkJfQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDU5OTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDYwMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ2MDU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NjA4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCQljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xJQkRMIDEKK0VPRgorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCQl7IHsgZWNobyAiJGFzX21lOjQ2MTk6IGVycm9yOiBDYW5ub3QgbGluayB0ZXN0IHByb2dyYW0gZm9yIGxpYmRsIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBsaW5rIHRlc3QgcHJvZ3JhbSBmb3IgbGliZGwiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJZWNobyAiJGFzX21lOjQ2MjQ6IHJlc3VsdDogb2siID4mNQorZWNobyAiJHtFQ0hPX1R9b2siID4mNgorZWxzZQorCXsgeyBlY2hvICIkYXNfbWU6NDYyNzogZXJyb3I6IENhbm5vdCBmaW5kIGRsc3ltIGZ1bmN0aW9uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBmaW5kIGRsc3ltIGZ1bmN0aW9uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisJCWlmIHRlc3QgIiR3aXRoX2dwbSIgIT0geWVzIDsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhc3N1bWluZyBzb25hbWUgZm9yIGdwbSBpcyAkd2l0aF9ncG0iIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjQ2MzU6IHRlc3RpbmcgYXNzdW1pbmcgc29uYW1lIGZvciBncG0gaXMgJHdpdGhfZ3BtIC4uLiIgMT4mNQorCisJCQljZl9jdl9ncG1fc29uYW1lPSIkd2l0aF9ncG0iCisJCWVsc2UKKworZWNobyAiJGFzX21lOjQ2NDA6IGNoZWNraW5nIGZvciBzb25hbWUgb2YgZ3BtIGxpYnJhcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29uYW1lIG9mIGdwbSBsaWJyYXJ5Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9ncG1fc29uYW1lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NmX2N2X2dwbV9zb25hbWU9dW5rbm93bgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzIDsgdGhlbgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCisjaW5jbHVkZSA8Z3BtLmg+CitpbnQgbWFpbigpCit7CitpZiAoR3BtX09wZW4oMCwwKSkgR3BtX0Nsb3NlKCk7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KK0NGX0VPRgorY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwlMSUJTPSItbGdwbSAkTElCUyIKKwlpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0NjU4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NjYxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gOyB0aGVuCisJCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ2NjM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ2NjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA7IHRoZW4KKwkJCWNmX2N2X2dwbV9zb25hbWU9YGxkZCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCBzZWQgLWUgJ3MsXi4qLywsJyAtZSAncywgLiokLCwnIHwgZmdyZXAgbGliZ3BtLmAKKwkJCXRlc3QgLXogIiRjZl9jdl9ncG1fc29uYW1lIiAmJiBjZl9jdl9ncG1fc29uYW1lPXVua25vd24KKwkJZmkKKwlmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKKworZmkKK2VjaG8gIiRhc19tZTo0Njc3OiByZXN1bHQ6ICRjZl9jdl9ncG1fc29uYW1lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9ncG1fc29uYW1lIiA+JjYKKworCQlmaQorCQl0ZXN0ICIkY2ZfY3ZfZ3BtX3NvbmFtZSIgIT0gInVua25vd24iICYmIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgTElCR1BNX1NPTkFNRSAiJGNmX2N2X2dwbV9zb25hbWUiCitFT0YKKworCQlTSExJQl9MSVNUPSItbGRsICRTSExJQl9MSVNUIgorCWVsc2UKKwkJU0hMSUJfTElTVD0iLWxncG0gJFNITElCX0xJU1QiCisJZmkKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xJQkdQTSAxCitFT0YKKworZWNobyAiJGFzX21lOjQ2OTM6IGNoZWNraW5nIGZvciBHcG1fV2dldGNoIGluIC1sZ3BtIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEdwbV9XZ2V0Y2ggaW4gLWxncG0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ncG1fR3BtX1dnZXRjaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdwbSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQ3MDEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIEdwbV9XZ2V0Y2ggKCk7CitpbnQKK21haW4gKCkKK3sKK0dwbV9XZ2V0Y2ggKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0NzIwOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0NzIzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDcyNjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjQ3Mjk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZ3BtX0dwbV9XZ2V0Y2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9ncG1fR3BtX1dnZXRjaD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6NDc0MDogcmVzdWx0OiAkYWNfY3ZfbGliX2dwbV9HcG1fV2dldGNoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZ3BtX0dwbV9XZ2V0Y2giID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2dwbV9HcG1fV2dldGNoID0geWVzOyB0aGVuCisKK2VjaG8gIiRhc19tZTo0NzQ0OiBjaGVja2luZyBpZiBHUE0gaXMgd2Vha2x5IGJvdW5kIHRvIGN1cnNlcyBsaWJyYXJ5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgR1BNIGlzIHdlYWtseSBib3VuZCB0byBjdXJzZXMgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjZl9jdl9jaGVja19ncG1fd2dldGNoPXVua25vd24KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllcyA7IHRoZW4KKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCisjaW5jbHVkZSA8Z3BtLmg+CitpbnQgbWFpbigpCit7CisJR3BtX1dnZXRjaCgpOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CitDRl9FT0YKKworCWNmX3NhdmVfTElCUz0iJExJQlMiCisJIyBUaGlzIG9ubHkgd29ya3MgaWYgd2UgY2FuIGxvb2sgYXQgdGhlIHN5bWJvbCB0YWJsZS4gIElmIGEgc2hhcmVkCisJIyBsaWJyYXJ5IGlzIHN0cmlwcGVkIGZvciBpbnN0YWxsLCB3ZSBjYW5ub3QgdXNlIHRoYXQuICBTbyB3ZSdyZSBmb3JjZWQKKwkjIHRvIHJlbHkgb24gdGhlIHN0YXRpYyBsaWJyYXJ5LCBub3RpbmcgdGhhdCBzb21lIHBhY2thZ2VycyBtYXkgbm90CisJIyBpbmNsdWRlIGl0LgorCUxJQlM9Ii1zdGF0aWMgLWxncG0gLWR5bmFtaWMgJExJQlMiCisJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDc2ODogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDc3MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9IDsgdGhlbgorCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0NzczOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0Nzc2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gOyB0aGVuCisJCQljZl9jdl9jaGVja19ncG1fd2dldGNoPWBubSBjb25mdGVzdCRhY19leGVleHQgfCBlZ3JlcCAnXDx3Z2V0Y2hcPicgfCBlZ3JlcCAnXDxbdlZ3V11cPidgCisJCQl0ZXN0IC1uICIkY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaCIgJiYgY2ZfY3ZfY2hlY2tfZ3BtX3dnZXRjaD15ZXMKKwkJCXRlc3QgLXogIiRjZl9jdl9jaGVja19ncG1fd2dldGNoIiAmJiBjZl9jdl9jaGVja19ncG1fd2dldGNoPW5vCisJCWZpCisJZmkKKwlybSAtZiBjb25mdGVzdCoKKwlMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKKworZmkKK2VjaG8gIiRhc19tZTo0Nzg4OiByZXN1bHQ6ICRjZl9jdl9jaGVja19ncG1fd2dldGNoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9jaGVja19ncG1fd2dldGNoIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X2NoZWNrX2dwbV93Z2V0Y2giICE9IHllcyA7IHRoZW4KKwl7IGVjaG8gIiRhc19tZTo0NzkyOiBXQVJOSU5HOiBHUE0gbGlicmFyeSBpcyBhbHJlYWR5IGxpbmtlZCB3aXRoIGN1cnNlcyAtIHJlYWQgdGhlIEZBUSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEdQTSBsaWJyYXJ5IGlzIGFscmVhZHkgbGlua2VkIHdpdGggY3Vyc2VzIC0gcmVhZCB0aGUgRkFRIiA+JjI7fQorZmkKKworZmkKKworZmkKKworIyBub3QgZXZlcnlvbmUgaGFzICJ0ZXN0IC1jIgoraWYgdGVzdCAtYyAvZGV2L3N5c21vdXNlIDI+L2Rldi9udWxsIDsgdGhlbgorZWNobyAiJGFzX21lOjQ4MDI6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSBzeXNtb3VzZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSBzeXNtb3VzZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNtb3VzZSBvciAtLXdpdGhvdXQtc3lzbW91c2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3N5c21vdXNlK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3N5c21vdXNlIgorICBjZl93aXRoX3N5c21vdXNlPSR3aXRodmFsCitlbHNlCisgIGNmX3dpdGhfc3lzbW91c2U9bWF5YmUKK2ZpOworCWlmIHRlc3QgIiRjZl93aXRoX3N5c21vdXNlIiAhPSBubyA7IHRoZW4KKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQ4MTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8b3NyZWxkYXRlLmg+CisjaWYgKF9fRnJlZUJTRF92ZXJzaW9uID49IDQwMDAxNykKKyNpbmNsdWRlIDxzeXMvY29uc2lvLmg+CisjaW5jbHVkZSA8c3lzL2ZiaW8uaD4KKyNlbHNlCisjaW5jbHVkZSA8bWFjaGluZS9jb25zb2xlLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKwlzdHJ1Y3QgbW91c2VfaW5mbyB0aGVfbW91c2U7CisJaW9jdGwoMCwgQ09OU19NT1VTRUNUTCwgJnRoZV9tb3VzZSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NDgzNzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDg0MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo0ODQzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NDg0NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX3dpdGhfc3lzbW91c2U9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX3dpdGhfc3lzbW91c2U9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlmaQorZWNobyAiJGFzX21lOjQ4NTY6IHJlc3VsdDogJGNmX3dpdGhfc3lzbW91c2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX3dpdGhfc3lzbW91c2UiID4mNgordGVzdCAiJGNmX3dpdGhfc3lzbW91c2UiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9TWVNNT1VTRSAxCitFT0YKKworZmkKKworaWYgdGVzdCBYIiRDQ19HX09QVCIgPSBYIiIgOyB0aGVuCisJQ0NfR19PUFQ9Jy1nJworCXRlc3QgLW4gIiRHQ0MiICYmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nfSIgIT0geWVzICYmIENDX0dfT1BUPScnCitmaQorCitpZiB0ZXN0IFgiJENYWF9HX09QVCIgPSBYIiIgOyB0aGVuCisJQ1hYX0dfT1BUPSctZycKKwl0ZXN0IC1uICIkR1hYIiAmJiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2d9IiAhPSB5ZXMgJiYgQ1hYX0dfT1BUPScnCitmaQorCitlY2hvICIkYXNfbWU6NDg3NDogY2hlY2tpbmcgZm9yIGRlZmF1bHQgbG9hZGVyIGZsYWdzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlZmF1bHQgbG9hZGVyIGZsYWdzLi4uICRFQ0hPX0MiID4mNgorY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorbGlidG9vbCkgTERfTU9ERUw9JycgICA7Oworbm9ybWFsKSAgTERfTU9ERUw9JycgICA7OworZGVidWcpICAgTERfTU9ERUw9JENDX0dfT1BUIDs7Citwcm9maWxlKSBMRF9NT0RFTD0nLXBnJzs7CitzaGFyZWQpICBMRF9NT0RFTD0nJyAgIDs7Citlc2FjCitlY2hvICIkYXNfbWU6NDg4MzogcmVzdWx0OiAkTERfTU9ERUwiID4mNQorZWNobyAiJHtFQ0hPX1R9JExEX01PREVMIiA+JjYKKworY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorc2hhcmVkKQorCitlY2hvICIkYXNfbWU6NDg4OTogY2hlY2tpbmcgaWYgcnBhdGggb3B0aW9uIHNob3VsZCBiZSB1c2VkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgcnBhdGggb3B0aW9uIHNob3VsZCBiZSB1c2VkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggb3IgLS1kaXNhYmxlLXJwYXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9ycGF0aCIKKyAgY2ZfY3ZfbGRfcnBhdGg9JGVuYWJsZXZhbAorZWxzZQorICBjZl9jdl9sZF9ycGF0aD1ubworZmk7CitlY2hvICIkYXNfbWU6NDg5OTogcmVzdWx0OiAkY2ZfY3ZfbGRfcnBhdGgiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2xkX3JwYXRoIiA+JjYKKworZWNobyAiJGFzX21lOjQ5MDI6IGNoZWNraW5nIGlmIHNoYXJlZCBsaWJyYXJpZXMgc2hvdWxkIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgc2hhcmVkIGxpYnJhcmllcyBzaG91bGQgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWxpbmsgb3IgLS1kaXNhYmxlLXJlbGluayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yZWxpbmsrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3JlbGluayIKKyAgY2ZfY3ZfZG9fcmVsaW5rPSRlbmFibGV2YWwKK2Vsc2UKKyAgY2ZfY3ZfZG9fcmVsaW5rPXllcworZmk7CitlY2hvICIkYXNfbWU6NDkxMjogcmVzdWx0OiAkY2ZfY3ZfZG9fcmVsaW5rIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9kb19yZWxpbmsiID4mNgorCTs7Citlc2FjCisKKwlMT0NBTF9MREZMQUdTPQorCUxPQ0FMX0xERkxBR1MyPQorCUxEX1NIQVJFRF9PUFRTPQorCUlOU1RBTExfTElCPSItbSA2NDQiCisKKwljZl9jdl9kb19zeW1saW5rcz1ubworCisJZWNobyAiJGFzX21lOjQ5MjQ6IGNoZWNraW5nIGlmIHJlbGVhc2UvYWJpIHZlcnNpb24gc2hvdWxkIGJlIHVzZWQgZm9yIHNoYXJlZCBsaWJzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgcmVsZWFzZS9hYmkgdmVyc2lvbiBzaG91bGQgYmUgdXNlZCBmb3Igc2hhcmVkIGxpYnMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2hsaWItdmVyc2lvbiBvciAtLXdpdGhvdXQtc2hsaWItdmVyc2lvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc2hsaWJfdmVyc2lvbitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9zaGxpYl92ZXJzaW9uIgorICB0ZXN0IC16ICIkd2l0aHZhbCIgJiYgd2l0aHZhbD1hdXRvCisJY2FzZSAkd2l0aHZhbCBpbiAjKHZpCisJeWVzKSAjKHZpCisJCWNmX2N2X3NobGliX3ZlcnNpb249YXV0bworCQk7OworCXJlbHxhYml8YXV0b3xubykgIyh2aQorCQljZl9jdl9zaGxpYl92ZXJzaW9uPSR3aXRodmFsCisJCTs7CisJKikKKwkJeyB7IGVjaG8gIiRhc19tZTo0OTM5OiBlcnJvcjogb3B0aW9uIHZhbHVlIG11c3QgYmUgb25lIG9mOiByZWwsIGFiaSwgYXV0byBvciBubyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBvcHRpb24gdmFsdWUgbXVzdCBiZSBvbmUgb2Y6IHJlbCwgYWJpLCBhdXRvIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7CisJZXNhYworCitlbHNlCisgIGNmX2N2X3NobGliX3ZlcnNpb249YXV0bworZmk7CisJZWNobyAiJGFzX21lOjQ5NDg6IHJlc3VsdDogJGNmX2N2X3NobGliX3ZlcnNpb24iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3NobGliX3ZlcnNpb24iID4mNgorCisJY2ZfY3Zfcm1fc29fbG9jcz1ubworCisJIyBTb21lIGxlc3MtY2FwYWJsZSBwb3J0cyBvZiBnY2Mgc3VwcG9ydCBvbmx5IC1mcGljCisJQ0NfU0hBUkVEX09QVFM9CisJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwl0aGVuCisJCWVjaG8gIiRhc19tZTo0OTU3OiBjaGVja2luZyB3aGljaCAkQ0Mgb3B0aW9uIHRvIHVzZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoaWNoICRDQyBvcHRpb24gdG8gdXNlLi4uICRFQ0hPX0MiID4mNgorCQljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJZm9yIENDX1NIQVJFRF9PUFRTIGluIC1mUElDIC1mcGljICcnCisJCWRvCisJCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkQ0NfU0hBUkVEX09QVFMiCisJCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDQ5NjQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK2ludCB4ID0gMQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo0OTc2OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0OTc5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjQ5ODI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo0OTg1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlkb25lCisJCWVjaG8gIiRhc19tZTo0OTk0OiByZXN1bHQ6ICRDQ19TSEFSRURfT1BUUyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0NfU0hBUkVEX09QVFMiID4mNgorCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwlmaQorCisJY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeD1ubworCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwliZW9zKikKKwkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gJHtDRkxBR1N9IC1vICRAIC1YbGlua2VyIC1zb25hbWU9YGJhc2VuYW1lICRAYCAtbm9zdGFydCAtZSAwJworCQk7OworCWN5Z3dpbiopCisJCUNDX1NIQVJFRF9PUFRTPQorCQlNS19TSEFSRURfTElCPSdzaCAuLi9ta19zaGFyZWRfbGliLnNoICRAICR7Q0N9ICR7Q0ZMQUdTfScKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1jeWdkbGwKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeD1jeWdkbGwKKwkJY2F0ID5ta19zaGFyZWRfbGliLnNoIDw8LUNGX0VPRgorCQkjIS9iaW4vc2gKKwkJU0hBUkVEX0xJQj1cJDEKKwkJSU1QT1JUX0xJQj1cYGVjaG8gIlwkMSIgfCBzZWQgLWUgJ3MvY3lnL2xpYi8nIC1lICdzL1swLTldKlwuZGxsJC8uZGxsLmEvJ1xgCisJCXNoaWZ0CisJCWNhdCA8PC1FT0YKKwkJTGlua2luZyBzaGFyZWQgbGlicmFyeQorCQkqKiBTSEFSRURfTElCIFwkU0hBUkVEX0xJQgorCQkqKiBJTVBPUlRfTElCIFwkSU1QT1JUX0xJQgorRU9GCisJCWV4ZWMgXCQqIC1zaGFyZWQgLVdsLC0tb3V0LWltcGxpYj0uLi9saWIvXCR7SU1QT1JUX0xJQn0gLVdsLC0tZXhwb3J0LWFsbC1zeW1ib2xzIC1vIC4uL2xpYi9cJHtTSEFSRURfTElCfQorQ0ZfRU9GCisJCWNobW9kICt4IG1rX3NoYXJlZF9saWIuc2gKKwkJOzsKKwlkYXJ3aW4qKQorCQlFWFRSQV9DRkxBR1M9Ii1uby1jcHAtcHJlY29tcCIKKwkJQ0NfU0hBUkVEX09QVFM9Ii1keW5hbWljIgorCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAke2xpYmRpcn0vYGJhc2VuYW1lICRAYCAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7QUJJX1ZFUlNJT059IC1jdXJyZW50X3ZlcnNpb24gJHtBQklfVkVSU0lPTn0gLW8gJEAnCisJCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1hYmkKKwkJY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeD15ZXMKKwkJZWNobyAiJGFzX21lOjUwMzA6IGNoZWNraW5nIGlmIGxkIC1zZWFyY2hfcGF0aHNfZmlyc3Qgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsZCAtc2VhcmNoX3BhdGhzX2ZpcnN0IHdvcmtzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJCQljZl9zYXZlX0xERkxBR1M9JExERkxBR1MKKwkJCUxERkxBR1M9IiRMREZMQUdTIC1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0IgorCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1MDM5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CitpbnQgaTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjUwNTE6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjUwNTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo1MDU3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTA2MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9sZGZsYWdzX3NlYXJjaF9wYXRoc19maXJzdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJCQlMREZMQUdTPSRjZl9zYXZlX0xERkxBR1MKK2ZpCitlY2hvICIkYXNfbWU6NTA3MTogcmVzdWx0OiAkY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2xkZmxhZ3Nfc2VhcmNoX3BhdGhzX2ZpcnN0IiA+JjYKKwkJaWYgdGVzdCAkY2ZfY3ZfbGRmbGFnc19zZWFyY2hfcGF0aHNfZmlyc3QgPSB5ZXM7IHRoZW4KKwkJCUxERkxBR1M9IiRMREZMQUdTIC1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0IgorCQlmaQorCQk7OworCWhwdXgqKQorCQkjICh0ZXN0ZWQgd2l0aCBnY2MgMi43LjIgLS0gSSBkb24ndCBoYXZlIGM4OSkKKwkJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkJCUxEX1NIQVJFRF9PUFRTPSctWGxpbmtlciArYiAtWGxpbmtlciAke2xpYmRpcn0nCisJCWVsc2UKKwkJCUNDX1NIQVJFRF9PUFRTPScrWicKKwkJCUxEX1NIQVJFRF9PUFRTPSctV2wsK2IsJHtsaWJkaXJ9JworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSArYiAke2xpYmRpcn0gLWIgLW8gJEAnCisJCSMgSFAtVVggc2hhcmVkIGxpYnJhcmllcyBtdXN0IGJlIGV4ZWN1dGFibGUsIGFuZCBzaG91bGQgYmUKKwkJIyByZWFkb25seSB0byBleHBsb2l0IGEgcXVpcmsgaW4gdGhlIG1lbW9yeSBtYW5hZ2VyLgorCQlJTlNUQUxMX0xJQj0iLW0gNTU1IgorCQk7OworCWlyaXgqKQorCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkJCQljZl9sZF9ycGF0aF9vcHQ9Ii1XbCwtcnBhdGgsIgorCQkJCUVYVFJBX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCR7bGliZGlyfSAkRVhUUkFfTERGTEFHUyIKKwkJCWVsc2UKKwkJCQljZl9sZF9ycGF0aF9vcHQ9Ii1ycGF0aCAiCisJCQkJRVhUUkFfTERGTEFHUz0iLXJwYXRoIFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCQlmaQorCQlmaQorCQkjIHRlc3RlZCB3aXRoIElSSVggNS4yIGFuZCAnY2MnLgorCQlpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKwkJCUNDX1NIQVJFRF9PUFRTPSctS1BJQycKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLXJkYXRhX3NoYXJlZCAtc29uYW1lIGBiYXNlbmFtZSAkQGAgLW8gJEAnCisJCWVsc2UKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAYCAtbyAkQCcKKwkJZmkKKwkJY2ZfY3Zfcm1fc29fbG9jcz15ZXMKKwkJOzsKKwlsaW51eCp8Z251KnxrKmJzZCotZ251KQorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1XbCwtcnBhdGgsXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWNmX2xkX3JwYXRoX29wdD0iLVdsLC1ycGF0aCwiCisJCQlFWFRSQV9MREZMQUdTPSItV2wsLXJwYXRoLFwke2xpYmRpcn0gJEVYVFJBX0xERkxBR1MiCisJCWZpCisKKwl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gcmVsOyB0aGVuCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQCAuJHtSRUxfVkVSU0lPTn1gLiR7QUJJX1ZFUlNJT059JworCWVsc2UKKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAYCcKKwlmaQorCisJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9ICR7Q0ZMQUdTfSAtc2hhcmVkIC1XbCwtc29uYW1lLCckY2ZfY3Zfc2hhcmVkX3NvbmFtZScsLXN0YXRzLC1sYyAtbyAkQCcKKwkJOzsKKwlvcGVuYnNkWzItOV0uKikKKwkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCIgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItV2wsLXJwYXRoLFwkKExPQ0FMX0xJQkRJUikiCisJCQlMT0NBTF9MREZMQUdTMj0iJExPQ0FMX0xERkxBR1MiCisJCWZpCisJCWlmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQljZl9sZF9ycGF0aF9vcHQ9Ii1XbCwtcnBhdGgsIgorCQkJRVhUUkFfTERGTEFHUz0iLVdsLC1ycGF0aCxcJHtsaWJkaXJ9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQlDQ19TSEFSRURfT1BUUz0iJENDX1NIQVJFRF9PUFRTIC1EUElDIgorCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJZmkKKworCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLVdsLC1Cc2hhcmVhYmxlLC1zb25hbWUsJyRjZl9jdl9zaGFyZWRfc29uYW1lJywtc3RhdHMsLWxjIC1vICRAJworCQk7OworCW50by1xbngqfG9wZW5ic2QqfGZyZWVic2RbMTJdLiopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1Cc2hhcmVhYmxlIC1vICRAJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCTs7CisJZnJlZWJzZCopCisJCUNDX1NIQVJFRF9PUFRTPSIkQ0NfU0hBUkVEX09QVFMgLURQSUMiCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiICYmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQlMT0NBTF9MREZMQUdTPSItcnBhdGggXCQoTE9DQUxfTElCRElSKSIKKwkJCUxPQ0FMX0xERkxBR1MyPSItcnBhdGggXCR7bGliZGlyfSAkTE9DQUxfTERGTEFHUyIKKwkJCWNmX2xkX3JwYXRoX29wdD0iLXJwYXRoICIKKwkJCUVYVFJBX0xERkxBR1M9Ii1ycGF0aCBcJHtsaWJkaXJ9ICRFWFRSQV9MREZMQUdTIgorCQlmaQorCisJdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0byAmJiBjZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCWlmIHRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IHJlbDsgdGhlbgorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEAgLiR7UkVMX1ZFUlNJT059YC4ke0FCSV9WRVJTSU9OfScKKwllbHNlCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQGAnCisJZmkKKworCQlNS19TSEFSRURfTElCPScke0xEfSAtQnNoYXJlYWJsZSAtc29uYW1lPWBiYXNlbmFtZSAkQGAgLW8gJEAnCisJCTs7CisJbmV0YnNkKikKKwkJQ0NfU0hBUkVEX09QVFM9IiRDQ19TSEFSRURfT1BUUyAtRFBJQyIKKwkJdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyAmJiBjZl9sZF9ycGF0aF9vcHQ9Ii1XbCwtcnBhdGgsIgorCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiAmJiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLVdsLC1ycGF0aCxcJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQkJRVhUUkFfTERGTEFHUz0iLVdsLC1ycGF0aCxcJHtsaWJkaXJ9ICRFWFRSQV9MREZMQUdTIgorCQkJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gYXV0bzsgdGhlbgorCQkJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuZWxmX3NvOyB0aGVuCisJCQkJY2ZfY3Zfc2hsaWJfdmVyc2lvbj1hYmkKKwkJCWVsc2UKKwkJCQljZl9jdl9zaGxpYl92ZXJzaW9uPXJlbAorCQkJZmkKKwkJCWZpCisKKwl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJaWYgdGVzdCAiJGNmX2N2X3NobGliX3ZlcnNpb24iID0gcmVsOyB0aGVuCisJCWNmX2N2X3NoYXJlZF9zb25hbWU9J2BiYXNlbmFtZSAkQCAuJHtSRUxfVkVSU0lPTn1gLiR7QUJJX1ZFUlNJT059JworCWVsc2UKKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAYCcKKwlmaQorCisJCQlNS19TSEFSRURfTElCPScke0NDfSAke0NGTEFHU30gLXNoYXJlZCAtV2wsLXNvbmFtZSwnJGNmX2N2X3NoYXJlZF9zb25hbWUnIC1vICRAJworCQllbHNlCisJCQlNS19TSEFSRURfTElCPScke0xEfSAtQnNoYXJlYWJsZSAtbyAkQCcKKwkJZmkKKwkJOzsKKwlvc2YqfG1scysqKQorCQkjIHRlc3RlZCB3aXRoIE9TRi8xIFYzLjIgYW5kICdjYycKKwkJIyB0ZXN0ZWQgd2l0aCBPU0YvMSBWMy4yIGFuZCBnY2MgMi42LjMgKGJ1dCB0aGUgYysrIGRlbW8gZGlkbid0CisJCSMgbGluayB3aXRoIHNoYXJlZCBsaWJzKS4KKwkJTUtfU0hBUkVEX0xJQj0nJHtMRH0gLXNldF92ZXJzaW9uICR7UkVMX1ZFUlNJT059OiR7QUJJX1ZFUlNJT059IC1leHBlY3RfdW5yZXNvbHZlZCAiKiIgLXNoYXJlZCAtc29uYW1lIGBiYXNlbmFtZSAkQGAnCisJCWNhc2UgJGhvc3Rfb3MgaW4KKwkJb3NmNCopCisJCQlNS19TSEFSRURfTElCPSIke01LX1NIQVJFRF9MSUJ9IC1tc3ltIgorCQkJOzsKKwkJZXNhYworCQlNS19TSEFSRURfTElCPSIke01LX1NIQVJFRF9MSUJ9IicgLW8gJEAnCisJCWlmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9ICJzaGFyZWQiIDsgdGhlbgorCQkJTE9DQUxfTERGTEFHUz0iLVdsLC1ycGF0aCxcJChMT0NBTF9MSUJESVIpIgorCQkJTE9DQUxfTERGTEFHUzI9IiRMT0NBTF9MREZMQUdTIgorCQlmaQorCQlpZiB0ZXN0ICIkY2ZfY3ZfbGRfcnBhdGgiID0geWVzIDsgdGhlbgorCQkJY2ZfbGRfcnBhdGhfb3B0PSItcnBhdGgiCisJCQkjIEVYVFJBX0xERkxBR1M9IiRMT0NBTF9MREZMQUdTICRFWFRSQV9MREZMQUdTIgorCQlmaQorCQljZl9jdl9ybV9zb19sb2NzPXllcworCQk7OworCXNjbzMuMnY1KikgICMgKGFsc28gdXcyKiBhbmQgVVc3KSBob3BzIDEzLUFwci05OAorCQkjIHRlc3RlZCB3aXRoIG9zcjUuMC41CisJCWlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCQkJQ0NfU0hBUkVEX09QVFM9Jy1iZWxmIC1LUElDJworCQlmaQorCQlNS19TSEFSRURfTElCPScke0xEfSAtZHkgLUcgLWggYGJhc2VuYW1lICRAIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0gLW8gJEAnCisJCWlmIHRlc3QgIiRjZl9jdl9sZF9ycGF0aCIgPSB5ZXMgOyB0aGVuCisJCQkjIG9ubHkgd2F5IGlzIHRvIHNldCBMRF9SVU5fUEFUSCBidXQgbm8gc3dpdGNoIGZvciBpdAorCQkJUlVOX1BBVEg9JGxpYmRpcgorCQlmaQorCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCUxJTktfUFJPR1M9J0xEX1JVTl9QQVRIPSR7bGliZGlyfScKKwkJTElOS19URVNUUz0nUHdkPWBwd2RgO0xEX1JVTl9QQVRIPWBkaXJuYW1lICQke1B3ZH1gL2xpYicKKwkJOzsKKwlzdW5vczQqKQorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDQuMS4xIGFuZCBnY2MgMi43LjAKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLUtQSUMnCisJCWZpCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1hc3NlcnQgcHVyZS10ZXh0IC1vICRAJworCQl0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSBhdXRvICYmIGNmX2N2X3NobGliX3ZlcnNpb249cmVsCisJCTs7CisJc29sYXJpczIqKQorCQkjIHRlc3RlZCB3aXRoIFN1bk9TIDUuNS4xIChzb2xhcmlzIDIuNS4xKSBhbmQgZ2NjIDIuNy4yCisJCSMgdGVzdGVkIHdpdGggU3VuT1MgNS4xMCAoc29sYXJpcyAxMCkgYW5kIGdjYyAzLjQuMworCQlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIiA7IHRoZW4KKwkJCUxPQ0FMX0xERkxBR1M9Ii1SIFwkKExPQ0FMX0xJQkRJUik6XCR7bGliZGlyfSIKKwkJCUxPQ0FMX0xERkxBR1MyPSIkTE9DQUxfTERGTEFHUyIKKwkJZmkKKwkJaWYgdGVzdCAiJGNmX2N2X2xkX3JwYXRoIiA9IHllcyA7IHRoZW4KKwkJCWNmX2xkX3JwYXRoX29wdD0iLVIiCisJCQlFWFRSQV9MREZMQUdTPSIkTE9DQUxfTERGTEFHUyAkRVhUUkFfTERGTEFHUyIKKwkJZmkKKworCXRlc3QgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiA9IGF1dG8gJiYgY2ZfY3Zfc2hsaWJfdmVyc2lvbj1yZWwKKwlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgPSByZWw7IHRoZW4KKwkJY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nYGJhc2VuYW1lICRAIC4ke1JFTF9WRVJTSU9OfWAuJHtBQklfVkVSU0lPTn0nCisJZWxzZQorCQljZl9jdl9zaGFyZWRfc29uYW1lPSdgYmFzZW5hbWUgJEBgJworCWZpCisKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLXhjb2RlPXBpYzMyJworCQkJTUtfU0hBUkVEX0xJQj0nJHtDQ30gLWR5IC1HIC1oICckY2ZfY3Zfc2hhcmVkX3NvbmFtZScgLW8gJEAnCisJCWVsc2UKKwkJCU1LX1NIQVJFRF9MSUI9JyR7Q0N9IC1zaGFyZWQgLWR5IC1HIC1oICckY2ZfY3Zfc2hhcmVkX3NvbmFtZScgLW8gJEAnCisJCWZpCisJCTs7CisJc3lzdjV1dzcqfHVuaXhfc3YqKQorCQkjIHRlc3RlZCB3aXRoIFVuaXhXYXJlIDcuMS4wIChnY2MgMi45NS4yIGFuZCBjYykKKwkJaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisJCQlDQ19TSEFSRURfT1BUUz0nLUtQSUMnCisJCWZpCisJCU1LX1NIQVJFRF9MSUI9JyR7TER9IC1kIHkgLUcgLW8gJEAnCisJCTs7CisJKikKKwkJQ0NfU0hBUkVEX09QVFM9J3Vua25vd24nCisJCU1LX1NIQVJFRF9MSUI9J2VjaG8gdW5rbm93bicKKwkJOzsKKwllc2FjCisKKwkjIFRoaXMgd29ya3MgaWYgdGhlIGxhc3QgdG9rZW5zIGluICRNS19TSEFSRURfTElCIGFyZSB0aGUgLW8gdGFyZ2V0LgorCWNhc2UgIiRjZl9jdl9zaGxpYl92ZXJzaW9uIiBpbiAjKHZpCisJcmVsfGFiaSkKKwkJY2FzZSAiJE1LX1NIQVJFRF9MSUIiIGluICModmkKKwkJKictbyAkQCcpCisJCQl0ZXN0ICIkY2ZfY3ZfZG9fc3ltbGlua3MiID0gbm8gJiYgY2ZfY3ZfZG9fc3ltbGlua3M9eWVzCisJCQk7OworCQkqKQorCQkJeyBlY2hvICIkYXNfbWU6NTI4ODogV0FSTklORzogaWdub3JlZCAtLXdpdGgtc2hsaWItdmVyc2lvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGlnbm9yZWQgLS13aXRoLXNobGliLXZlcnNpb24iID4mMjt9CisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworCisJaWYgdGVzdCAtbiAiJGNmX2xkX3JwYXRoX29wdCIgOyB0aGVuCisJCWVjaG8gIiRhc19tZTo1Mjk2OiBjaGVja2luZyBpZiB3ZSBuZWVkIGEgc3BhY2UgYWZ0ZXIgcnBhdGggb3B0aW9uIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgbmVlZCBhIHNwYWNlIGFmdGVyIHJwYXRoIG9wdGlvbi4uLiAkRUNIT19DIiA+JjYKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkJTElCUz0iJExJQlMgJHtjZl9sZF9ycGF0aF9vcHR9JGxpYmRpciIKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1MzAxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjUzMTM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjUzMTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo1MzE5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTMyMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX3JwYXRoX3NwYWNlPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX3JwYXRoX3NwYWNlPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJTElCUz0iJGNmX3NhdmVfTElCUyIKKwkJZWNobyAiJGFzX21lOjUzMzI6IHJlc3VsdDogJGNmX3JwYXRoX3NwYWNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9ycGF0aF9zcGFjZSIgPiY2CisJCXRlc3QgIiRjZl9ycGF0aF9zcGFjZSIgPSB5ZXMgJiYgY2ZfbGRfcnBhdGhfb3B0PSIkY2ZfbGRfcnBhdGhfb3B0ICIKKwkJTUtfU0hBUkVEX0xJQj0iJE1LX1NIQVJFRF9MSUIgJGNmX2xkX3JwYXRoX29wdFwke2xpYmRpcn0iCisJZmkKKworaWYgdGVzdCAiJENDX1NIQVJFRF9PUFRTIiA9ICJ1bmtub3duIjsgdGhlbgorCWZvciBtb2RlbCBpbiAkY2ZfbGlzdF9tb2RlbHM7IGRvCisJCWlmIHRlc3QgIiRtb2RlbCIgPSAic2hhcmVkIjsgdGhlbgorCQkJeyB7IGVjaG8gIiRhc19tZTo1MzQxOiBlcnJvcjogU2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogU2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJZmkKKwlkb25lCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1vdmVyd3JpdGUgdG8gbGVhdmUgb3V0IHRoZSBsaW5rIHRvIC1sY3Vyc2VzCitlY2hvICIkYXNfbWU6NTM1MTogY2hlY2tpbmcgaWYgeW91IHdpc2ggdG8gaW5zdGFsbCBuY3Vyc2VzIG92ZXJ3cml0aW5nIGN1cnNlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3aXNoIHRvIGluc3RhbGwgbmN1cnNlcyBvdmVyd3JpdGluZyBjdXJzZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vdmVyd3JpdGUgb3IgLS1kaXNhYmxlLW92ZXJ3cml0ZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vdmVyd3JpdGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX292ZXJ3cml0ZSIKKyAgd2l0aF9vdmVyd3JpdGU9JGVuYWJsZXZhbAorZWxzZQorICBpZiB0ZXN0ICIkcHJlZml4IiA9ICIvdXNyIiA7IHRoZW4gd2l0aF9vdmVyd3JpdGU9eWVzOyBlbHNlIHdpdGhfb3ZlcndyaXRlPW5vOyBmaQorZmk7CitlY2hvICIkYXNfbWU6NTM2MTogcmVzdWx0OiAkd2l0aF9vdmVyd3JpdGUiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfb3ZlcndyaXRlIiA+JjYKKworZWNobyAiJGFzX21lOjUzNjQ6IGNoZWNraW5nIGlmIGV4dGVybmFsIHRlcm1pbmZvLWRhdGFiYXNlIGlzIHVzZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBleHRlcm5hbCB0ZXJtaW5mby1kYXRhYmFzZSBpcyB1c2VkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGF0YWJhc2Ugb3IgLS1kaXNhYmxlLWRhdGFiYXNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RhdGFiYXNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9kYXRhYmFzZSIKKyAgdXNlX2RhdGFiYXNlPSRlbmFibGV2YWwKK2Vsc2UKKyAgdXNlX2RhdGFiYXNlPXllcworZmk7CitlY2hvICIkYXNfbWU6NTM3NDogcmVzdWx0OiAkdXNlX2RhdGFiYXNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR1c2VfZGF0YWJhc2UiID4mNgorCitjYXNlICRob3N0X29zIGluICModmkKK29zMiopICModmkKKwlURVJNSU5GT19TUkM9JyR7dG9wX3NyY2Rpcn0vbWlzYy9lbXguc3JjJworCTs7CisqKSAjKHZpCisJVEVSTUlORk9fU1JDPScke3RvcF9zcmNkaXJ9L21pc2MvdGVybWluZm8uc3JjJworCTs7Citlc2FjCisKKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCW9zMiopCVBBVEhTRVA9JzsnICA7OworCSopCVBBVEhTRVA9JzonICA7OworCWVzYWMKKworaWYgdGVzdCAiJHVzZV9kYXRhYmFzZSIgIT0gbm8gOyB0aGVuCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0RBVEFCQVNFIDEKK0VPRgorCisJZWNobyAiJGFzX21lOjUzOTY6IGNoZWNraW5nIHdoaWNoIHRlcm1pbmZvIHNvdXJjZS1maWxlIHdpbGwgYmUgaW5zdGFsbGVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hpY2ggdGVybWluZm8gc291cmNlLWZpbGUgd2lsbCBiZSBpbnN0YWxsZWQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kYXRhYmFzZSBvciAtLWRpc2FibGUtZGF0YWJhc2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGF0YWJhc2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2RhdGFiYXNlIgorICBURVJNSU5GT19TUkM9JHdpdGh2YWwKK2ZpOworCWVjaG8gIiRhc19tZTo1NDA0OiByZXN1bHQ6ICRURVJNSU5GT19TUkMiID4mNQorZWNobyAiJHtFQ0hPX1R9JFRFUk1JTkZPX1NSQyIgPiY2CisKKwllY2hvICIkYXNfbWU6NTQwNzogY2hlY2tpbmcgd2hldGhlciB0byB1c2UgaGFzaGVkIGRhdGFiYXNlIGluc3RlYWQgb2YgZGlyZWN0b3J5L3RyZWUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBoYXNoZWQgZGF0YWJhc2UgaW5zdGVhZCBvZiBkaXJlY3RvcnkvdHJlZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1oYXNoZWQtZGIgb3IgLS13aXRob3V0LWhhc2hlZC1kYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaGFzaGVkX2RiK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2hhc2hlZF9kYiIKKworZWxzZQorICB3aXRoX2hhc2hlZF9kYj1ubworZmk7CisJZWNobyAiJGFzX21lOjU0MTc6IHJlc3VsdDogJHdpdGhfaGFzaGVkX2RiIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2hhc2hlZF9kYiIgPiY2CitlbHNlCisJd2l0aF9oYXNoZWRfZGI9bm8KK2ZpCisKK2VjaG8gIiRhc19tZTo1NDIzOiBjaGVja2luZyBmb3IgbGlzdCBvZiBmYWxsYmFjayBkZXNjcmlwdGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlzdCBvZiBmYWxsYmFjayBkZXNjcmlwdGlvbnMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZmFsbGJhY2tzIG9yIC0td2l0aG91dC1mYWxsYmFja3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2ZhbGxiYWNrcytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9mYWxsYmFja3MiCisgIHdpdGhfZmFsbGJhY2s9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9mYWxsYmFjaz0KK2ZpOworZWNobyAiJGFzX21lOjU0MzM6IHJlc3VsdDogJHdpdGhfZmFsbGJhY2siID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZmFsbGJhY2siID4mNgorRkFMTEJBQ0tfTElTVD1gZWNobyAiJHdpdGhfZmFsbGJhY2siIHwgc2VkIC1lICdzLywvIC9nJ2AKKworZWNobyAiJGFzX21lOjU0Mzc6IGNoZWNraW5nIGlmIHlvdSB3YW50IG1vZGVybiB4dGVybSBvciBhbnRpcXVlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgbW9kZXJuIHh0ZXJtIG9yIGFudGlxdWUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgteHRlcm0tbmV3IG9yIC0td2l0aG91dC14dGVybS1uZXcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3h0ZXJtX25ldytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF94dGVybV9uZXciCisgIHdpdGhfeHRlcm1fbmV3PSR3aXRodmFsCitlbHNlCisgIHdpdGhfeHRlcm1fbmV3PXllcworZmk7CitjYXNlICR3aXRoX3h0ZXJtX25ldyBpbgorbm8pCXdpdGhfeHRlcm1fbmV3PXh0ZXJtLW9sZDs7CisqKQl3aXRoX3h0ZXJtX25ldz14dGVybS1uZXc7OworZXNhYworZWNobyAiJGFzX21lOjU0NTE6IHJlc3VsdDogJHdpdGhfeHRlcm1fbmV3IiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3h0ZXJtX25ldyIgPiY2CitXSElDSF9YVEVSTT0kd2l0aF94dGVybV9uZXcKKworTUFLRV9URVJNSU5GTz0KK2lmIHRlc3QgIiR1c2VfZGF0YWJhc2UiID0gbm8gOyB0aGVuCisJVEVSTUlORk89IiR7ZGF0YWRpcn0vdGVybWluZm8iCisJTUFLRV9URVJNSU5GTz0iIyIKK2Vsc2UKKworZWNobyAiJGFzX21lOjU0NjE6IGNoZWNraW5nIGZvciBsaXN0IG9mIHRlcm1pbmZvIGRpcmVjdG9yaWVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpc3Qgb2YgdGVybWluZm8gZGlyZWN0b3JpZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGVybWluZm8tZGlycyBvciAtLXdpdGhvdXQtdGVybWluZm8tZGlycyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdGVybWluZm9fZGlycytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90ZXJtaW5mb19kaXJzIgorCitlbHNlCisgIHdpdGh2YWw9JHtURVJNSU5GT19ESVJTLSR7ZGF0YWRpcn0vdGVybWluZm99CitmaTsKK0lGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7UEFUSFNFUH0iCitjZl9kc3RfcGF0aD0KK2ZvciBjZl9zcmNfcGF0aCBpbiAkd2l0aHZhbAorZG8KKworaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorICBjZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiRjZl9zcmNfcGF0aCIgaW4gIyh2aQorLlwkXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW2EtekEtWl06W1xcL10qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXCR7KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgY2Zfc3JjX3BhdGg9IiRjZl9zcmNfcGF0aCIKKyAgY2FzZSAiLiRjZl9zcmNfcGF0aCIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgIGNmX3NyY19wYXRoPWBlY2hvICRjZl9zcmNfcGF0aCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgICA7OworICBlc2FjCisgIDs7ICModmkKKy5ub3wuTk9ORS8qKQorICBjZl9zcmNfcGF0aD1gZWNobyAkY2Zfc3JjX3BhdGggfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgIDs7CisqKQorICB7IHsgZWNobyAiJGFzX21lOjU1MDE6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkY2Zfc3JjX3BhdGhcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkY2Zfc3JjX3BhdGhcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICA7OworZXNhYworCisgIHRlc3QgLW4gIiRjZl9kc3RfcGF0aCIgJiYgY2ZfZHN0X3BhdGg9IiR7Y2ZfZHN0X3BhdGh9OiIKKyAgY2ZfZHN0X3BhdGg9IiR7Y2ZfZHN0X3BhdGh9JHtjZl9zcmNfcGF0aH0iCitkb25lCitJRlM9IiRhY19zYXZlX2lmcyIKKworZXZhbCAnVEVSTUlORk9fRElSUz0iJGNmX2RzdF9wYXRoIicKKworZWNobyAiJGFzX21lOjU1MTQ6IHJlc3VsdDogJFRFUk1JTkZPX0RJUlMiID4mNQorZWNobyAiJHtFQ0hPX1R9JFRFUk1JTkZPX0RJUlMiID4mNgordGVzdCAtbiAiJFRFUk1JTkZPX0RJUlMiICYmIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgVEVSTUlORk9fRElSUyAiJFRFUk1JTkZPX0RJUlMiCitFT0YKKworZWNobyAiJGFzX21lOjU1MjA6IGNoZWNraW5nIGZvciBkZWZhdWx0IHRlcm1pbmZvIGRpcmVjdG9yeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZWZhdWx0IHRlcm1pbmZvIGRpcmVjdG9yeS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0LXRlcm1pbmZvLWRpciBvciAtLXdpdGhvdXQtZGVmYXVsdC10ZXJtaW5mby1kaXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRfdGVybWluZm9fZGlyK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2RlZmF1bHRfdGVybWluZm9fZGlyIgorCitlbHNlCisgIHdpdGh2YWw9IiR7VEVSTUlORk8tJHtkYXRhZGlyfS90ZXJtaW5mb30iCitmaTsgaWYgdGVzdCAtbiAiJHtkYXRhZGlyfS90ZXJtaW5mbyIgOyB0aGVuCisKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBjZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKyAgY2ZfcGF0aF9zeW50YXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2ZpCisKK2Nhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorLlwkXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW2EtekEtWl06W1xcL10qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXCR7KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgd2l0aHZhbD0iJHdpdGh2YWwiCisgIGNhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgIHdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgOzsKKyopCisgIHsgeyBlY2hvICIkYXNfbWU6NTU1NjogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGh2YWxcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICA7OworZXNhYworCitmaQorVEVSTUlORk89IiR3aXRodmFsIgorCitlY2hvICIkYXNfbWU6NTU2NTogcmVzdWx0OiAkVEVSTUlORk8iID4mNQorZWNobyAiJHtFQ0hPX1R9JFRFUk1JTkZPIiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgVEVSTUlORk8gIiRURVJNSU5GTyIKK0VPRgorCitmaQorCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtYmlnLWNvcmUgdG8gbWFrZSB0aWMgcnVuIG9uIHNtYWxsIG1hY2hpbmVzCisjIyMJV2UgbmVlZCA0TWIsIGNoZWNrIGlmIHdlIGNhbiBhbGxvY2F0ZSA1MCUgbW9yZSB0aGFuIHRoYXQuCitlY2hvICIkYXNfbWU6NTU3NTogY2hlY2tpbmcgaWYgYmlnLWNvcmUgb3B0aW9uIHNlbGVjdGVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgYmlnLWNvcmUgb3B0aW9uIHNlbGVjdGVkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYmlnLWNvcmUgb3IgLS1kaXNhYmxlLWJpZy1jb3JlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2JpZ19jb3JlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9iaWdfY29yZSIKKyAgd2l0aF9iaWdfY29yZT0kZW5hYmxldmFsCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHdpdGhfYmlnX2NvcmU9bm8KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA1NTg3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4oKSB7CisJdW5zaWduZWQgbG9uZyBuID0gNjAwMDAwMEw7CisJY2hhciAqcyA9IG1hbGxvYyhuKTsKKwlpZiAocyAhPSAwKQorCQlzWzBdID0gc1tuLTFdID0gMDsKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KHMgPT0gMCk7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTYwMTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTYwNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTYwNjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjU2MDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICB3aXRoX2JpZ19jb3JlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQord2l0aF9iaWdfY29yZT1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmk7CitlY2hvICIkYXNfbWU6NTYyMTogcmVzdWx0OiAkd2l0aF9iaWdfY29yZSIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9iaWdfY29yZSIgPiY2Cit0ZXN0ICIkd2l0aF9iaWdfY29yZSIgPSAieWVzIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0JJR19DT1JFIDEKK0VPRgorCisjIyMgSVNPIEMgb25seSBndWFyYW50ZWVzIDUxMi1jaGFyIHN0cmluZ3MsIHdlIGhhdmUgdGFibGVzIHdoaWNoIGxvYWQgZmFzdGVyCisjIyMgd2hlbiBjb25zdHJ1Y3RlZCB1c2luZyAiYmlnIiBzdHJpbmdzLiAgTW9yZSB0aGFuIHRoZSBDIGNvbXBpbGVyLCB0aGUgYXdrCisjIyMgcHJvZ3JhbSBpcyBhIGxpbWl0IG9uIG1vc3QgdmVuZG9yIFVOSVggc3lzdGVtcy4gIENoZWNrIHRoYXQgd2UgY2FuIGJ1aWxkLgorZWNobyAiJGFzX21lOjU2MzA6IGNoZWNraW5nIGlmIGJpZy1zdHJpbmdzIG9wdGlvbiBzZWxlY3RlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGJpZy1zdHJpbmdzIG9wdGlvbiBzZWxlY3RlZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWJpZy1zdHJpbmdzIG9yIC0tZGlzYWJsZS1iaWctc3RyaW5ncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9iaWdfc3RyaW5ncytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfYmlnX3N0cmluZ3MiCisgIHdpdGhfYmlnX3N0cmluZ3M9JGVuYWJsZXZhbAorZWxzZQorCisgICAgY2FzZSB4JEFXSyBpbiAjKHZpCisgICAgeCkKKyAgICAgICAgZXZhbCB3aXRoX2JpZ19zdHJpbmdzPW5vCisgICAgICAgIDs7CisgICAgKikgIyh2aQorICAgICAgICBpZiAoICR7QVdLfSAnQkVHSU4geyB4eCA9ICJ4Ijsgd2hpbGUgKGxlbmd0aCh4eCkgPCAxMjAwMCkgeyB4eCA9IHh4ICJ4IjsgfTsgcHJpbnRmKCIlc1xuIiwgeHgpOyB9JyBcCisgICAgICAgICAgICB8ICRBV0sgJ3sgcHJpbnRmICIlZFxuIiwgbGVuZ3RoKCQwKTsgfScgfCAkQVdLICdCRUdJTiB7IGVxbHM9MDsgcmVjcz0wOyB9IHsgcmVjcysrOyBpZiAoJDAgPT0gMTIwMDApIGVxbHMrKzsgfSBFTkQgeyBpZiAocmVjcyAhPSAxIHx8IGVxbHMgIT0gMSkgZXhpdCAxOyB9JyAyPi9kZXYvbnVsbCA+L2Rldi9udWxsICkgOyB0aGVuCisgICAgICAgICAgICBldmFsIHdpdGhfYmlnX3N0cmluZ3M9eWVzCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV2YWwgd2l0aF9iaWdfc3RyaW5ncz1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKKworZmk7CitlY2hvICIkYXNfbWU6NTY1NDogcmVzdWx0OiAkd2l0aF9iaWdfc3RyaW5ncyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9iaWdfc3RyaW5ncyIgPiY2CisKK1VTRV9CSUdfU1RSSU5HUz0wCit0ZXN0ICIkd2l0aF9iaWdfc3RyaW5ncyIgPSAieWVzIiAmJiBVU0VfQklHX1NUUklOR1M9MQorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS10ZXJtY2FwIHRvIGNvbXBpbGUgaW4gdGhlIHRlcm1jYXAgZmFsbGJhY2sgc3VwcG9ydAorZWNobyAiJGFzX21lOjU2NjE6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRlcm1jYXAtZmFsbGJhY2sgc3VwcG9ydCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRlcm1jYXAtZmFsbGJhY2sgc3VwcG9ydC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRlcm1jYXAgb3IgLS1kaXNhYmxlLXRlcm1jYXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVybWNhcCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfdGVybWNhcCIKKyAgd2l0aF90ZXJtY2FwPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF90ZXJtY2FwPW5vCitmaTsKK2VjaG8gIiRhc19tZTo1NjcxOiByZXN1bHQ6ICR3aXRoX3Rlcm1jYXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfdGVybWNhcCIgPiY2CisKK2lmIHRlc3QgIiR3aXRoX3Rlcm1jYXAiICE9ICJ5ZXMiIDsgdGhlbgorCWlmIHRlc3QgIiR1c2VfZGF0YWJhc2UiID0gbm8gOyB0aGVuCisJCWlmIHRlc3QgLXogIiR3aXRoX2ZhbGxiYWNrIiA7IHRoZW4KKwkJCXsgeyBlY2hvICIkYXNfbWU6NTY3NzogZXJyb3I6IFlvdSBoYXZlIGRpc2FibGVkIHRoZSBkYXRhYmFzZSB3L28gc3BlY2lmeWluZyBmYWxsYmFja3MiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogWW91IGhhdmUgZGlzYWJsZWQgdGhlIGRhdGFiYXNlIHcvbyBzcGVjaWZ5aW5nIGZhbGxiYWNrcyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQlmaQorCWZpCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgUFVSRV9URVJNSU5GTyAxCitFT0YKKworZWxzZQorCitpZiB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIDsgdGhlbgorCXsgeyBlY2hvICIkYXNfbWU6NTY4OTogZXJyb3I6IE9wdGlvbnMgLS13aXRoLXRpY2xpYiBhbmQgLS1lbmFibGUtdGVybWNhcCBjYW5ub3QgYmUgY29tYmluZWQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogT3B0aW9ucyAtLXdpdGgtdGljbGliIGFuZCAtLWVuYWJsZS10ZXJtY2FwIGNhbm5vdCBiZSBjb21iaW5lZCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1RFUk1DQVAgMQorRU9GCisKK2VjaG8gIiRhc19tZTo1Njk4OiBjaGVja2luZyBmb3IgbGlzdCBvZiB0ZXJtY2FwIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpc3Qgb2YgdGVybWNhcCBmaWxlcy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10ZXJtcGF0aCBvciAtLXdpdGhvdXQtdGVybXBhdGggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Rlcm1wYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3Rlcm1wYXRoIgorCitlbHNlCisgIHdpdGh2YWw9JHtURVJNUEFUSC0vZXRjL3Rlcm1jYXA6L3Vzci9zaGFyZS9taXNjL3Rlcm1jYXB9CitmaTsKK0lGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7UEFUSFNFUH0iCitjZl9kc3RfcGF0aD0KK2ZvciBjZl9zcmNfcGF0aCBpbiAkd2l0aHZhbAorZG8KKworaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorICBjZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiRjZl9zcmNfcGF0aCIgaW4gIyh2aQorLlwkXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW2EtekEtWl06W1xcL10qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXCR7KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgY2Zfc3JjX3BhdGg9IiRjZl9zcmNfcGF0aCIKKyAgY2FzZSAiLiRjZl9zcmNfcGF0aCIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgIGNmX3NyY19wYXRoPWBlY2hvICRjZl9zcmNfcGF0aCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgICA7OworICBlc2FjCisgIDs7ICModmkKKy5ub3wuTk9ORS8qKQorICBjZl9zcmNfcGF0aD1gZWNobyAkY2Zfc3JjX3BhdGggfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgIDs7CisqKQorICB7IHsgZWNobyAiJGFzX21lOjU3Mzg6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkY2Zfc3JjX3BhdGhcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCIkY2Zfc3JjX3BhdGhcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICA7OworZXNhYworCisgIHRlc3QgLW4gIiRjZl9kc3RfcGF0aCIgJiYgY2ZfZHN0X3BhdGg9IiR7Y2ZfZHN0X3BhdGh9OiIKKyAgY2ZfZHN0X3BhdGg9IiR7Y2ZfZHN0X3BhdGh9JHtjZl9zcmNfcGF0aH0iCitkb25lCitJRlM9IiRhY19zYXZlX2lmcyIKKworZXZhbCAnVEVSTVBBVEg9IiRjZl9kc3RfcGF0aCInCisKK2VjaG8gIiRhc19tZTo1NzUxOiByZXN1bHQ6ICRURVJNUEFUSCIgPiY1CitlY2hvICIke0VDSE9fVH0kVEVSTVBBVEgiID4mNgordGVzdCAtbiAiJFRFUk1QQVRIIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFRFUk1QQVRIICIkVEVSTVBBVEgiCitFT0YKKworIyMjCXVzZSBvcHRpb24gLS1lbmFibGUtZ2V0Y2FwIHRvIHVzZSBhIGhhY2tlZCBnZXRjYXAgZm9yIHJlYWRpbmcgdGVybWNhcHMKK2VjaG8gIiRhc19tZTo1NzU4OiBjaGVja2luZyBpZiBmYXN0IHRlcm1jYXAtbG9hZGVyIGlzIG5lZWRlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGZhc3QgdGVybWNhcC1sb2FkZXIgaXMgbmVlZGVkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2V0Y2FwIG9yIC0tZGlzYWJsZS1nZXRjYXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ2V0Y2FwK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9nZXRjYXAiCisgIHdpdGhfZ2V0Y2FwPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9nZXRjYXA9bm8KK2ZpOworZWNobyAiJGFzX21lOjU3Njg6IHJlc3VsdDogJHdpdGhfZ2V0Y2FwIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2dldGNhcCIgPiY2Cit0ZXN0ICIkd2l0aF9nZXRjYXAiID0gInllcyIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0dFVENBUCAxCitFT0YKKworZWNobyAiJGFzX21lOjU3NzQ6IGNoZWNraW5nIGlmIHRyYW5zbGF0ZWQgdGVybWNhcHMgd2lsbCBiZSBjYWNoZWQgaW4gfi8udGVybWluZm8iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0cmFuc2xhdGVkIHRlcm1jYXBzIHdpbGwgYmUgY2FjaGVkIGluIH4vLnRlcm1pbmZvLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2V0Y2FwLWNhY2hlIG9yIC0tZGlzYWJsZS1nZXRjYXAtY2FjaGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ2V0Y2FwX2NhY2hlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9nZXRjYXBfY2FjaGUiCisgIHdpdGhfZ2V0Y2FwX2NhY2hlPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9nZXRjYXBfY2FjaGU9bm8KK2ZpOworZWNobyAiJGFzX21lOjU3ODQ6IHJlc3VsdDogJHdpdGhfZ2V0Y2FwX2NhY2hlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2dldGNhcF9jYWNoZSIgPiY2Cit0ZXN0ICIkd2l0aF9nZXRjYXBfY2FjaGUiID0gInllcyIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0dFVENBUF9DQUNIRSAxCitFT0YKKworZmkKKworIyMjICAgVXNlIG9wdGlvbiAtLWRpc2FibGUtaG9tZS10ZXJtaW5mbyB0byBjb21wbGV0ZWx5IHJlbW92ZSB+Ly50ZXJtaW5mbworZWNobyAiJGFzX21lOjU3OTM6IGNoZWNraW5nIGlmIH4vLnRlcm1pbmZvIGlzIHdhbnRlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIH4vLnRlcm1pbmZvIGlzIHdhbnRlZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWhvbWUtdGVybWluZm8gb3IgLS1kaXNhYmxlLWhvbWUtdGVybWluZm8gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaG9tZV90ZXJtaW5mbytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfaG9tZV90ZXJtaW5mbyIKKyAgd2l0aF9ob21lX3Rlcm1pbmZvPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9ob21lX3Rlcm1pbmZvPXllcworZmk7CitlY2hvICIkYXNfbWU6NTgwMzogcmVzdWx0OiAkd2l0aF9ob21lX3Rlcm1pbmZvIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX2hvbWVfdGVybWluZm8iID4mNgordGVzdCAiJHdpdGhfaG9tZV90ZXJtaW5mbyIgPSAieWVzIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfSE9NRV9URVJNSU5GTyAxCitFT0YKKworZWNobyAiJGFzX21lOjU4MDk6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSByZXN0cmljdGVkIGVudmlyb25tZW50IHdoZW4gcnVubmluZyBhcyByb290IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIHJlc3RyaWN0ZWQgZW52aXJvbm1lbnQgd2hlbiBydW5uaW5nIGFzIHJvb3QuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yb290LWVudmlyb24gb3IgLS1kaXNhYmxlLXJvb3QtZW52aXJvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yb290X2Vudmlyb24rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3Jvb3RfZW52aXJvbiIKKyAgd2l0aF9yb290X2Vudmlyb249JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3Jvb3RfZW52aXJvbj15ZXMKK2ZpOworZWNobyAiJGFzX21lOjU4MTk6IHJlc3VsdDogJHdpdGhfcm9vdF9lbnZpcm9uIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3Jvb3RfZW52aXJvbiIgPiY2Cit0ZXN0ICIkd2l0aF9yb290X2Vudmlyb24iID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9ST09UX0VOVklST04gMQorRU9GCisKKyMjIyAgIFVzZSBvcHRpb24gLS1lbmFibGUtc3ltbGlua3MgdG8gbWFrZSB0aWMgdXNlIHN5bWxpbmtzLCBub3QgaGFyZCBsaW5rcworIyMjICAgdG8gcmVkdWNlIHN0b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciB0aGUgdGVybWluZm8gZGF0YWJhc2UuCisKK2ZvciBhY19mdW5jIGluIFwKKwlyZW1vdmUgXAorCXVubGluaworZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6NTgzMzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDU4MzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgJGFjX2Z1bmMgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKK2Nob2tlIG1lCisjZWxzZQorZiA9ICRhY19mdW5jOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjU4NzA6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjU4NzM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo1ODc2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTg3OTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NTg4OTogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIDsgdGhlbgorCitmb3IgYWNfZnVuYyBpbiBcCisJCWxpbmsgXAorCQlzeW1saW5rCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZTo1OTA2OiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNTkxMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKK2NoYXIgKCpmKSAoKTsKKworaW50CittYWluICgpCit7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorY2hva2UgbWUKKyNlbHNlCitmID0gJGFjX2Z1bmM7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NTk0MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NTk0NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjU5NDk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo1OTUyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2V2YWwgIiRhc19hY192YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo1OTYyOiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitFT0YKKworZmkKK2RvbmUKKworZWxzZQorCWVjaG8gIiRhc19tZTo1OTczOiBjaGVja2luZyBpZiBsaW5rL3N5bWxpbmsgZnVuY3Rpb25zIHdvcmsiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsaW5rL3N5bWxpbmsgZnVuY3Rpb25zIHdvcmsuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2xpbmtfZnVuY3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCQljZl9jdl9saW5rX2Z1bmNzPQorCQlmb3IgY2ZfZnVuYyBpbiBsaW5rIHN5bWxpbmsgOyBkbworCQkJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKworCQkJZXZhbCAnYWNfY3ZfZnVuY18nJGNmX2Z1bmMnPWVycm9yJworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDU5ODYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKK2ludCBtYWluKCkKK3sKKwlpbnQgZmFpbCA9IDA7CisJY2hhciAqc3JjID0gImNvbmZpZy5sb2ciOworCWNoYXIgKmRzdCA9ICJjb25mdGVzdC5jaGsiOworCXN0cnVjdCBzdGF0IHNyY19zYjsKKwlzdHJ1Y3Qgc3RhdCBkc3Rfc2I7CisKKwlzdGF0KHNyYywgJnNyY19zYik7CisJZmFpbCA9ICgkY2ZfZnVuYygiY29uZmlnLmxvZyIsICJjb25mdGVzdC5jaGsiKSA8IDApCisJICAgIHx8IChzdGF0KGRzdCwgJmRzdF9zYikgPCAwKQorCSAgICB8fCAoZHN0X3NiLnN0X210aW1lICE9IHNyY19zYi5zdF9tdGltZSk7CisjaWZkZWYgSEFWRV9VTkxJTksKKwl1bmxpbmsoZHN0KTsKKyNlbHNlCisJcmVtb3ZlKGRzdCk7CisjZW5kaWYKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59IChmYWlsKTsKK30KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYwMTY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYwMTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjYwMjE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MDI0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCQkJY2ZfY3ZfbGlua19mdW5jcz0iJGNmX2N2X2xpbmtfZnVuY3MgJGNmX2Z1bmMiCisJCQlldmFsICdhY19jdl9mdW5jXyckY2ZfZnVuYyc9eWVzJworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJCQlldmFsICdhY19jdl9mdW5jXyckY2ZfZnVuYyc9bm8nCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisJCWRvbmUKKwkJdGVzdCAteiAiJGNmX2N2X2xpbmtfZnVuY3MiICYmIGNmX2N2X2xpbmtfZnVuY3M9bm8KKworZmkKK2VjaG8gIiRhc19tZTo2MDQyOiByZXN1bHQ6ICRjZl9jdl9saW5rX2Z1bmNzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9saW5rX2Z1bmNzIiA+JjYKKwl0ZXN0ICIkYWNfY3ZfZnVuY19saW5rIiAgICA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xJTksgMQorRU9GCisKKwl0ZXN0ICIkYWNfY3ZfZnVuY19zeW1saW5rIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NZTUxJTksgMQorRU9GCisKK2ZpCisKK3dpdGhfbGlua3M9bm8KK3dpdGhfc3ltbGlua3M9bm8KKworIyBzb2Z0IGxpbmtzIChzeW1ib2xpYyBsaW5rcykgYXJlIHVzZWZ1bCBmb3Igc29tZSBzeXN0ZW1zIHdoZXJlIGhhcmQgbGlua3MgZG8KKyMgbm90IHdvcmssIG9yIHRvIG1ha2UgaXQgc2ltcGxlciB0byBjb3B5IHRlcm1pbmZvIHRyZWVzIGFyb3VuZC4KK2lmIHRlc3QgIiRhY19jdl9mdW5jX3N5bWxpbmsiID0geWVzIDsgdGhlbgorICAgIGVjaG8gIiRhc19tZTo2MDYwOiBjaGVja2luZyBpZiB0aWMgc2hvdWxkIHVzZSBzeW1ib2xpYyBsaW5rcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHRpYyBzaG91bGQgdXNlIHN5bWJvbGljIGxpbmtzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3ltbGlua3Mgb3IgLS1kaXNhYmxlLXN5bWxpbmtzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N5bWxpbmtzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9zeW1saW5rcyIKKyAgd2l0aF9zeW1saW5rcz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfc3ltbGlua3M9bm8KK2ZpOworICAgIGVjaG8gIiRhc19tZTo2MDcwOiByZXN1bHQ6ICR3aXRoX3N5bWxpbmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3N5bWxpbmtzIiA+JjYKK2ZpCisKKyMgSWYgd2UgaGF2ZSBoYXJkIGxpbmtzIGFuZCBkaWQgbm90IGNob29zZSB0byB1c2Ugc29mdCBsaW5rcyBpbnN0ZWFkLCB0aGVyZSBpcworIyBubyByZWFzb24gdG8gbWFrZSB0aGlzIGNob2ljZSBvcHRpb25hbCAtIHVzZSB0aGUgaGFyZCBsaW5rcy4KK2lmIHRlc3QgIiR3aXRoX3N5bWxpbmtzIiA9IG5vIDsgdGhlbgorICAgIGVjaG8gIiRhc19tZTo2MDc3OiBjaGVja2luZyBpZiB0aWMgc2hvdWxkIHVzZSBoYXJkIGxpbmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGljIHNob3VsZCB1c2UgaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjYKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19saW5rIiA9IHllcyA7IHRoZW4KKwl3aXRoX2xpbmtzPXllcworICAgIGVsc2UKKwl3aXRoX2xpbmtzPW5vCisgICAgZmkKKyAgICBlY2hvICIkYXNfbWU6NjA4NDogcmVzdWx0OiAkd2l0aF9saW5rcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9saW5rcyIgPiY2CitmaQorCit0ZXN0ICIkd2l0aF9saW5rcyIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0xJTktTIDEKK0VPRgorCit0ZXN0ICIkd2l0aF9zeW1saW5rcyIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1NZTUxJTktTIDEKK0VPRgorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWJyb2tlbi1saW5rZXIgdG8gZm9yY2Ugb24gdXNlIG9mIGJyb2tlbi1saW5rZXIgc3VwcG9ydAorZWNobyAiJGFzX21lOjYwOTc6IGNoZWNraW5nIGlmIHlvdSB3YW50IGJyb2tlbi1saW5rZXIgc3VwcG9ydCBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgYnJva2VuLWxpbmtlciBzdXBwb3J0IGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1icm9rZW5fbGlua2VyIG9yIC0tZGlzYWJsZS1icm9rZW5fbGlua2VyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Jyb2tlbl9saW5rZXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2Jyb2tlbl9saW5rZXIiCisgIHdpdGhfYnJva2VuX2xpbmtlcj0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfYnJva2VuX2xpbmtlcj0ke0JST0tFTl9MSU5LRVItbm99CitmaTsKK2VjaG8gIiRhc19tZTo2MTA3OiByZXN1bHQ6ICR3aXRoX2Jyb2tlbl9saW5rZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYnJva2VuX2xpbmtlciIgPiY2CisKK0JST0tFTl9MSU5LRVI9MAoraWYgdGVzdCAiJHdpdGhfYnJva2VuX2xpbmtlciIgPSB5ZXMgOyB0aGVuCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQlJPS0VOX0xJTktFUiAxCitFT0YKKworCUJST0tFTl9MSU5LRVI9MQorZWxpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSBzaGFyZWQgOyB0aGVuCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCWN5Z3dpbiopCisJCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEJST0tFTl9MSU5LRVIgMQorRU9GCisKKwkJQlJPS0VOX0xJTktFUj0xCisJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJY3lnd2luIGxpbmtlciBpcyBicm9rZW4gYW55d2F5IiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo2MTI3OiB0ZXN0aW5nIGN5Z3dpbiBsaW5rZXIgaXMgYnJva2VuIGFueXdheSAuLi4iIDE+JjUKKworCQk7OworCWVzYWMKK2ZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtYnNkcGFkIHRvIGhhdmUgdHB1dHMgcHJvY2VzcyBCU0Qtc3R5bGUgcHJlZml4IHBhZGRpbmcKK2VjaG8gIiRhc19tZTo2MTM0OiBjaGVja2luZyBpZiB0cHV0cyBzaG91bGQgcHJvY2VzcyBCU0Qtc3R5bGUgcHJlZml4IHBhZGRpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0cHV0cyBzaG91bGQgcHJvY2VzcyBCU0Qtc3R5bGUgcHJlZml4IHBhZGRpbmcuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ic2RwYWQgb3IgLS1kaXNhYmxlLWJzZHBhZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ic2RwYWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2JzZHBhZCIKKyAgd2l0aF9ic2RwYWQ9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2JzZHBhZD1ubworZmk7CitlY2hvICIkYXNfbWU6NjE0NDogcmVzdWx0OiAkd2l0aF9ic2RwYWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYnNkcGFkIiA+JjYKK3Rlc3QgIiR3aXRoX2JzZHBhZCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQlNEX1RQVVRTIDEKK0VPRgorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLXdpZGVjIHRvIHR1cm4gb24gdXNlIG9mIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQKK05DVVJTRVNfQ0hfVD1jaHR5cGUKK05DVVJTRVNfTElCVVRGOD0wCisKK05FRURfV0NIQVJfSD0wCitOQ1VSU0VTX01CU1RBVEVfVD0wCitOQ1VSU0VTX1dDSEFSX1Q9MAorTkNVUlNFU19XSU5UX1Q9MAorCisjIENoZWNrIHRvIGRlZmluZSBfWE9QRU5fU09VUkNFICJhdXRvbWF0aWNhbGx5IgorCitlY2hvICIkYXNfbWU6NjE2MTogY2hlY2tpbmcgaWYgJENDIC1VIGFuZCAtRCBvcHRpb25zIHdvcmsgdG9nZXRoZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkQ0MgLVUgYW5kIC1EIG9wdGlvbnMgd29yayB0b2dldGhlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfY2NfdV9kX29wdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKwlDUFBGTEFHUz0iLVVVX0RfT1BUSU9OUyAtRFVfRF9PUFRJT05TIC1ERF9VX09QVElPTlMgLVVEX1VfT1BUSU9OUyIKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDYxNzAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBVX0RfT1BUSU9OUworbWFrZSBhbiB1bmRlZmluZWQtZXJyb3IKKyNlbmRpZgorI2lmZGVmICBEX1VfT1BUSU9OUworbWFrZSBhIGRlZmluZWQtZXJyb3IKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYxODk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYxOTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjE5NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYxOTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisJY2ZfY3ZfY2NfdV9kX29wdGlvbnM9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWNmX2N2X2NjX3VfZF9vcHRpb25zPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCitmaQorZWNobyAiJGFzX21lOjYyMTI6IHJlc3VsdDogJGNmX2N2X2NjX3VfZF9vcHRpb25zIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPiY2CisKK2NmX1hPUEVOX1NPVVJDRT01MDAKK2NmX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwKKworY2FzZSAkaG9zdF9vcyBpbiAjKHZpCithaXhbNDVdKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfQUxMX1NPVVJDRSIKKwk7OworZnJlZWJzZCp8ZHJhZ29uZmx5KikgIyh2aQorCSMgNS54IGhlYWRlcnMgYXNzb2NpYXRlCisJIwlfWE9QRU5fU09VUkNFPTYwMCB3aXRoIF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMCisJIwlfWE9QRU5fU09VUkNFPTUwMCB3aXRoIF9QT1NJWF9DX1NPVVJDRT0xOTk1MDZMCisJY2ZfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCWNmX1hPUEVOX1NPVVJDRT02MDAKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0JTRF9UWVBFUyAtRF9fQlNEX1ZJU0lCTEUgLURfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFIC1EX1hPUEVOX1NPVVJDRT0kY2ZfWE9QRU5fU09VUkNFIgorCTs7CitocHV4KikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfSFBVWF9TT1VSQ0UiCisJOzsKK2lyaXhbNTZdLiopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1NHSV9TT1VSQ0UiCisJOzsKK2xpbnV4KnxnbnUqfGsqYnNkKi1nbnUpICModmkKKworZWNobyAiJGFzX21lOjYyMzg6IGNoZWNraW5nIGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgbXVzdCBkZWZpbmUgX0dOVV9TT1VSQ0UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2dudV9zb3VyY2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2MjQ1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2MjYwOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MjYzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjYyNjY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2MjY5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZ251X3NvdXJjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9zYXZlPSIkQ1BQRkxBR1MiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2Mjc4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYyOTM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYyOTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjI5OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYzMDI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9nbnVfc291cmNlPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2dudV9zb3VyY2U9eWVzCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6NjMxNzogcmVzdWx0OiAkY2ZfY3ZfZ251X3NvdXJjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZ251X3NvdXJjZSIgPiY2Cit0ZXN0ICIkY2ZfY3ZfZ251X3NvdXJjZSIgPSB5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9HTlVfU09VUkNFIgorCisJOzsKK21pcmJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBvciBfUE9TSVhfU09VUkNFIGJyZWFrcyA8YXJwYS9pbmV0Lmg+CisJOzsKK25ldGJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgSVB2NiBmb3IgbHlueCBvbiBOZXRCU0QgMS42LCBicmVha3MgeHRlcm0sIGlzIG5vdCBuZWVkZWQgZm9yIG5jdXJzZXN3CisJOzsKK29wZW5ic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIHh0ZXJtIG9uIE9wZW5CU0QgMi44LCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7Citvc2ZbNDVdKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfT1NGX1NPVVJDRSIKKwk7OworbnRvLXFueCopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1FOWF9TT1VSQ0UiCisJOzsKK3NjbyopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgTHlueCBvbiBTQ08gVW5peCAvIE9wZW5TZXJ2ZXIKKwk7Oworc29sYXJpcyopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX19FWFRFTlNJT05TX18iCisJOzsKKyopCisJZWNobyAiJGFzX21lOjYzNDQ6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1hPUEVOX1NPVVJDRSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1hPUEVOX1NPVVJDRS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfeG9wZW5fc291cmNlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDYzNTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjYzNjY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYzNjk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjM3MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjYzNzU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl94b3Blbl9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2Zfc2F2ZT0iJENQUEZMQUdTIgorCSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRT0kY2ZfWE9QRU5fU09VUkNFIgorCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDYzODQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjM5OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjQwMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2NDA1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjQwODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3hvcGVuX3NvdXJjZT1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl94b3Blbl9zb3VyY2U9JGNmX1hPUEVOX1NPVVJDRQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjY0MjM6IHJlc3VsdDogJGNmX2N2X3hvcGVuX3NvdXJjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfeG9wZW5fc291cmNlIiA+JjYKKwlpZiB0ZXN0ICIkY2ZfY3ZfeG9wZW5fc291cmNlIiAhPSBubyA7IHRoZW4KKworIyByZW1vdmUgX1hPUEVOX1NPVVJDRSBzeW1ib2wgZnJvbSAkQ0ZMQUdTCitDRkxBR1M9YGVjaG8gIiRDRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXV9YT1BFTl9TT1VSQ0VcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF1fWE9QRU5fU09VUkNFXCg9W14gCV0qXClcPyQvL2cnYAorCisjIHJlbW92ZSBfWE9QRU5fU09VUkNFIHN5bWJvbCBmcm9tICRDUFBGTEFHUworQ1BQRkxBR1M9YGVjaG8gIiRDUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdX1hPUEVOX1NPVVJDRVwoPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXV9YT1BFTl9TT1VSQ0VcKD1bXiAJXSpcKVw/JC8vZydgCisKKwkJdGVzdCAiJGNmX2N2X2NjX3VfZF9vcHRpb25zIiA9IHllcyAmJiBcCisJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1VX1hPUEVOX1NPVVJDRSIKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0U9JGNmX2N2X3hvcGVuX3NvdXJjZSIKKwlmaQorCitjZl9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UKKworY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisKKyMgcmVtb3ZlIF9QT1NJWF9DX1NPVVJDRSBzeW1ib2wgZnJvbSAkY2Zfc2F2ZV9DRkxBR1MKK2NmX3RyaW1fQ0ZMQUdTPWBlY2hvICIkY2Zfc2F2ZV9DRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXV9QT1NJWF9DX1NPVVJDRVwoPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXV9QT1NJWF9DX1NPVVJDRVwoPVteIAldKlwpXD8kLy9nJ2AKKworIyByZW1vdmUgX1BPU0lYX0NfU09VUkNFIHN5bWJvbCBmcm9tICRjZl9zYXZlX0NQUEZMQUdTCitjZl90cmltX0NQUEZMQUdTPWBlY2hvICIkY2Zfc2F2ZV9DUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdX1BPU0lYX0NfU09VUkNFXCg9W14gCV0qXClcP1sgCV0vIC9nJyBcCisJCS1lICdzLy1bVURdX1BPU0lYX0NfU09VUkNFXCg9W14gCV0qXClcPyQvL2cnYAorCitlY2hvICIkYXNfbWU6NjQ1NzogY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBzaG91bGQgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfcG9zaXhfY19zb3VyY2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjY0NjM6IHRlc3RpbmcgaWYgdGhlIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgZ28gbm8gZnVydGhlciAuLi4iIDE+JjUKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjQ2NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2NDgxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NDg0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY0ODc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NDkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2Zfd2FudF9wb3NpeF9zb3VyY2U9bm8KKwkgY2FzZSAuJGNmX1BPU0lYX0NfU09VUkNFIGluICModmkKKwkgLlsxMl0/PyopICModmkKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9Ii1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSIKKwkJOzsKKwkgLjIpICModmkKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9Ii1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSIKKwkJY2Zfd2FudF9wb3NpeF9zb3VyY2U9eWVzCisJCTs7CisJIC4qKQorCQljZl93YW50X3Bvc2l4X3NvdXJjZT15ZXMKKwkJOzsKKwkgZXNhYworCSBpZiB0ZXN0ICIkY2Zfd2FudF9wb3NpeF9zb3VyY2UiID0geWVzIDsgdGhlbgorCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY1MTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyNpZmRlZiBfUE9TSVhfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjUyNjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjUyOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2NTMyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NjUzNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfcG9zaXhfY19zb3VyY2U9IiRjZl9jdl9wb3NpeF9jX3NvdXJjZSAtRF9QT1NJWF9TT1VSQ0UiCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJIGZpCisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo2NTQ2OiB0ZXN0aW5nIGlmZGVmIGZyb20gdmFsdWUgJGNmX1BPU0lYX0NfU09VUkNFIC4uLiIgMT4mNQorCisJIENGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCSBDUFBGTEFHUz0iJGNmX3RyaW1fQ1BQRkxBR1MgJGNmX2N2X3Bvc2l4X2Nfc291cmNlIgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NjU1MTogdGVzdGluZyBpZiB0aGUgc2Vjb25kIGNvbXBpbGUgZG9lcyBub3QgbGVhdmUgb3VyIGRlZmluaXRpb24gaW50YWN0IGVycm9yIC4uLiIgMT4mNQorCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjU1NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2NTY5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NTcyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY1NzU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NTc4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9wb3NpeF9jX3NvdXJjZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCSBDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6NjU5NDogcmVzdWx0OiAkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3Bvc2l4X2Nfc291cmNlIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X3Bvc2l4X2Nfc291cmNlIiAhPSBubyA7IHRoZW4KKwlDRkxBR1M9IiRjZl90cmltX0NGTEFHUyIKKwlDUFBGTEFHUz0iJGNmX3RyaW1fQ1BQRkxBR1MiCisJaWYgdGVzdCAiJGNmX2N2X2NjX3VfZF9vcHRpb25zIiA9IHllcyA7IHRoZW4KKwkJY2ZfdGVtcF9wb3NpeF9jX3NvdXJjZT1gZWNobyAiJGNmX2N2X3Bvc2l4X2Nfc291cmNlIiB8IFwKKwkJCQlzZWQgLWUgJ3MvLUQvLVUvZycgLWUgJ3MvPVteIAldKi8vZydgCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJGNmX3RlbXBfcG9zaXhfY19zb3VyY2UiCisJZmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIKK2ZpCisKKwk7OworZXNhYworCisjIFdvcmsgYXJvdW5kIGJyZWFrYWdlIG9uIE9TIFgKKworZWNobyAiJGFzX21lOjY2MTM6IGNoZWNraW5nIGlmIFNJR1dJTkNIIGlzIGRlZmluZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBTSUdXSU5DSCBpcyBkZWZpbmVkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9kZWZpbmVfc2lnd2luY2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjYyMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+CisKK2ludAorbWFpbiAoKQoreworaW50IHggPSBTSUdXSU5DSAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2NjM1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NjM4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY2NDE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NjQ0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY2NTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjdW5kZWYgX1hPUEVOX1NPVVJDRQorI3VuZGVmIF9QT1NJWF9TT1VSQ0UKKyN1bmRlZiBfUE9TSVhfQ19TT1VSQ0UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+CisKK2ludAorbWFpbiAoKQoreworaW50IHggPSBTSUdXSU5DSAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2NjY5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NjcyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY2NzU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2Njc4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoPW1heWJlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2RlZmluZV9zaWd3aW5jaD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6NjY5MjogcmVzdWx0OiAkY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9kZWZpbmVfc2lnd2luY2giID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfZGVmaW5lX3NpZ3dpbmNoIiA9IG1heWJlIDsgdGhlbgorZWNobyAiJGFzX21lOjY2OTY6IGNoZWNraW5nIGZvciBhY3R1YWwgU0lHV0lOQ0ggZGVmaW5pdGlvbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhY3R1YWwgU0lHV0lOQ0ggZGVmaW5pdGlvbi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfZml4dXBfc2lnd2luY2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2ZfY3ZfZml4dXBfc2lnd2luY2g9dW5rbm93bgorY2Zfc2lnd2luY2g9MzIKK3doaWxlIHRlc3QgJGNmX3NpZ3dpbmNoICE9IDEKK2RvCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA2NzA3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI3VuZGVmIF9YT1BFTl9TT1VSQ0UKKyN1bmRlZiBfUE9TSVhfU09VUkNFCisjdW5kZWYgX1BPU0lYX0NfU09VUkNFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorCitpbnQKK21haW4gKCkKK3sKKworI2lmIFNJR1dJTkNIICE9ICRjZl9zaWd3aW5jaAorbWFrZSBhbiBlcnJvcgorI2VuZGlmCitpbnQgeCA9IFNJR1dJTkNICisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY3Mjk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY3MzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjczNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY3Mzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9maXh1cF9zaWd3aW5jaD0kY2Zfc2lnd2luY2gKKwkgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitjZl9zaWd3aW5jaD1gZXhwciAkY2Zfc2lnd2luY2ggLSAxYAorZG9uZQorCitmaQorZWNobyAiJGFzX21lOjY3NTI6IHJlc3VsdDogJGNmX2N2X2ZpeHVwX3NpZ3dpbmNoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9maXh1cF9zaWd3aW5jaCIgPiY2CisKKwlpZiB0ZXN0ICIkY2ZfY3ZfZml4dXBfc2lnd2luY2giICE9IHVua25vd24gOyB0aGVuCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURTSUdXSU5DSD0kY2ZfY3ZfZml4dXBfc2lnd2luY2giCisJZmkKK2ZpCisKKyMgQ2hlY2tzIGZvciBDT0RFU0VUIHN1cHBvcnQuCisKKyAgZWNobyAiJGFzX21lOjY3NjI6IGNoZWNraW5nIGZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YW1fY3ZfbGFuZ2luZm9fY29kZXNldCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY3NjggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGxhbmdpbmZvLmg+CitpbnQKK21haW4gKCkKK3sKK2NoYXIqIGNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo2NzgwOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2NzgzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Njc4NjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY3ODk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithbV9jdl9sYW5naW5mb19jb2Rlc2V0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjY4MDA6IHJlc3VsdDogJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQiID4mNgorICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTEFOR0lORk9fQ09ERVNFVCAxCitFT0YKKworICBmaQorCisjIHVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gd29yayBhcm91bmQgYSBkZWZlY3QgaW4gZ2NjJ3MgZml4aW5jbHVkZXMuCitOQ1VSU0VTX09LX1dDSEFSX1Q9CitOQ1VSU0VTX09LX1dJTlRfVD0KKworZWNobyAiJGFzX21lOjY4MTQ6IGNoZWNraW5nIGlmIHlvdSB3YW50IHdpZGUtY2hhcmFjdGVyIGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB3aWRlLWNoYXJhY3RlciBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2lkZWMgb3IgLS1kaXNhYmxlLXdpZGVjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3dpZGVjK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV93aWRlYyIKKyAgd2l0aF93aWRlYz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfd2lkZWM9bm8KK2ZpOworZWNobyAiJGFzX21lOjY4MjQ6IHJlc3VsdDogJHdpdGhfd2lkZWMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfd2lkZWMiID4mNgoraWYgdGVzdCAiJHdpdGhfd2lkZWMiID0geWVzIDsgdGhlbgorCUxJQl9TVUZGSVg9Incke0xJQl9TVUZGSVh9IgorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9XSURFQ19TVVBQT1JUIDEKK0VPRgorCitlY2hvICIkYXNfbWU6NjgzMjogY2hlY2tpbmcgaWYgd2UgbXVzdCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIG11c3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQuLi4gJEVDSE9fQyIgPiY2CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY4MzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECittYWtlIGFuIGVycm9yCisjZW5kaWYKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6Njg1MTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Njg1NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo2ODU3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Njg2MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX3Jlc3VsdD1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9yZXN1bHQ9eWVzCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlY2hvICIkYXNfbWU6Njg2OTogcmVzdWx0OiAkY2ZfcmVzdWx0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9yZXN1bHQiID4mNgorCitpZiB0ZXN0ICIkY2ZfcmVzdWx0IiA9IHllcyA7IHRoZW4KKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCIKK2VsaWYgdGVzdCAieCIgIT0gIngiIDsgdGhlbgorCWVjaG8gIiRhc19tZTo2ODc1OiBjaGVja2luZyBjaGVja2luZyBmb3IgY29tcGF0aWJsZSB2YWx1ZSB2ZXJzdXMgIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgY2hlY2tpbmcgZm9yIGNvbXBhdGlibGUgdmFsdWUgdmVyc3VzIC4uLiAkRUNIT19DIiA+JjYKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDY4NzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitpbnQKK21haW4gKCkKK3sKKworI2lmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQtIDwgMAorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjY4OTQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY4OTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NjkwMDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjY5MDM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9yZXN1bHQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX3Jlc3VsdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCWVjaG8gIiRhc19tZTo2OTEyOiByZXN1bHQ6ICRjZl9yZXN1bHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX3Jlc3VsdCIgPiY2CisJaWYgdGVzdCAiJGNmX3Jlc3VsdCIgPSBubyA7IHRoZW4KKwkJIyBwZXJoYXBzIHdlIGNhbiBvdmVycmlkZSBpdCAtIHRyeS4uLgorCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRV9FWFRFTkRFRD0iCisJZmkKK2ZpCisKKwkjIHdpdGhfb3ZlcndyaXRlPW5vCisJTkNVUlNFU19DSF9UPWNjaGFyX3QKKworZm9yIGFjX2Z1bmMgaW4gcHV0d2MgYnRvd2Mgd2N0b2IgbWJ0b3djIHdjdG9tYiBtYmxlbiBtYnJsZW4gbWJydG93YyB3Y3NydG9tYnMgbWJzcnRvd2NzIHdjc3RvbWJzIG1ic3Rvd2NzCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZTo2OTI2OiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNjkzMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKK2NoYXIgKCpmKSAoKTsKKworaW50CittYWluICgpCit7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorY2hva2UgbWUKKyNlbHNlCitmID0gJGFjX2Z1bmM7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6Njk2MzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6Njk2NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjY5Njk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo2OTcyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2V2YWwgIiRhc19hY192YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo2OTgyOiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitFT0YKKworZmkKK2RvbmUKKworCWlmIHRlc3QgIiRhY19jdl9mdW5jX3B1dHdjIiAhPSB5ZXMgOyB0aGVuCisKK2VjaG8gIiRhc19tZTo2OTk0OiBjaGVja2luZyBmb3IgbXVsdGlieXRlIGNoYXJhY3RlciBzdXBwb3J0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc3VwcG9ydC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdXRmOF9saWIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNmX3NhdmVfTElCUz0iJExJQlMiCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3MDAyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CitwdXR3YygwLDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzAxNTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzAxODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjcwMjE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MDI0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfdXRmOF9saWI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworIyBJZiB0aGUgbGlua2FnZSBpcyBub3QgYWxyZWFkeSBpbiB0aGUgJENQUEZMQUdTLyRMREZMQUdTIGNvbmZpZ3VyYXRpb24sIHRoZXNlCisjIHdpbGwgYmUgc2V0IG9uIGNvbXBsZXRpb24gb2YgdGhlIEFDX1RSWV9MSU5LIGJlbG93LgorY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOD0KK2NmX2N2X2xpYnJhcnlfcGF0aF91dGY4PQorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzAzNjogdGVzdGluZyBTdGFydGluZyBGSU5EX0xJTktBR0UodXRmOCwpIC4uLiIgMT4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDcwMzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8bGlidXRmOC5oPgoraW50CittYWluICgpCit7CitwdXR3YygwLDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzA1MjogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzA1NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjcwNTg6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MDYxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZmluZF9saW5rYWdlX3V0Zjg9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGNmX2N2X2ZpbmRfbGlua2FnZV91dGY4PW5vCisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo3MDcwOiB0ZXN0aW5nIFNlYXJjaGluZyBmb3IgaGVhZGVycyBpbiBGSU5EX0xJTktBR0UodXRmOCwpIC4uLiIgMT4mNQorCisgICAgY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIGNmX3Rlc3RfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworICAgIGNmX3NlYXJjaD0iIgorCit0ZXN0ICIvdXNyIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3VzciIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvdXNyIgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2luY2x1ZGUvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9pbmNsdWRlL3V0ZjgiCisJdGVzdCAtZCAvdXNyL2luY2x1ZGUvdXRmOC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci91dGY4L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci91dGY4L2luY2x1ZGUvdXRmOCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci91dGY4L2luY2x1ZGUvdXRmOCIKK30KKwordGVzdCAiJHByZWZpeCIgIT0gIk5PTkUiICYmIFwKK3Rlc3QgLWQgIiRwcmVmaXgiICYmIFwKKyB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkcHJlZml4IgorCXRlc3QgLWQgJHByZWZpeC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2luY2x1ZGUiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlL3V0ZjgiCisJdGVzdCAtZCAkcHJlZml4L2luY2x1ZGUvdXRmOC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2luY2x1ZGUvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC91dGY4L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC91dGY4L2luY2x1ZGUvdXRmOCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC91dGY4L2luY2x1ZGUvdXRmOCIKK30KKwordGVzdCAiL3Vzci9sb2NhbCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IvbG9jYWwiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgL3Vzci9sb2NhbCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvaW5jbHVkZS91dGY4IgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlL3V0ZjgvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9pbmNsdWRlL3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvdXRmOC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL3V0ZjgvaW5jbHVkZSIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvdXRmOC9pbmNsdWRlL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvdXRmOC9pbmNsdWRlL3V0ZjgiCit9CisKK3Rlc3QgIi9vcHQiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvb3B0IiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyIC9vcHQiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZSIKKwl0ZXN0IC1kIC9vcHQvaW5jbHVkZS91dGY4ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2luY2x1ZGUvdXRmOCIKKwl0ZXN0IC1kIC9vcHQvaW5jbHVkZS91dGY4L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZS91dGY4L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0L3V0ZjgvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC91dGY4L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0L3V0ZjgvaW5jbHVkZS91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L3V0ZjgvaW5jbHVkZS91dGY4IgorfQorCit0ZXN0ICIkSE9NRSIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIiRIT01FIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyICRIT01FIgorCXRlc3QgLWQgJEhPTUUvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvaW5jbHVkZSIKKwl0ZXN0IC1kICRIT01FL2luY2x1ZGUvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvaW5jbHVkZS91dGY4IgorCXRlc3QgLWQgJEhPTUUvaW5jbHVkZS91dGY4L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2luY2x1ZGUvdXRmOC9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvdXRmOC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS91dGY4L2luY2x1ZGUiCisJdGVzdCAtZCAkSE9NRS91dGY4L2luY2x1ZGUvdXRmOCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvdXRmOC9pbmNsdWRlL3V0ZjgiCit9CisKK3Rlc3QgIiRpbmNsdWRlZGlyIiAhPSBOT05FICYmIFwKK3Rlc3QgIiRpbmNsdWRlZGlyIiAhPSAiL3Vzci9pbmNsdWRlIiAmJiBcCit0ZXN0IC1kICIkaW5jbHVkZWRpciIgJiYgeworCXRlc3QgLWQgJGluY2x1ZGVkaXIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRpbmNsdWRlZGlyIgorCXRlc3QgLWQgJGluY2x1ZGVkaXIvdXRmOCAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGluY2x1ZGVkaXIvdXRmOCIKK30KKwordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRvbGRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpciAgICAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpci91dGY4ICYmIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkb2xkaW5jbHVkZWRpci91dGY4IgorfQorCisgICAgZm9yIGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjggaW4gJGNmX3NlYXJjaAorICAgIGRvCisgICAgICBpZiB0ZXN0IC1kICRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IDsgdGhlbgorICAgICAgICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nICRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo3MTUxOiB0ZXN0aW5nIC4uLiB0ZXN0aW5nICRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IC4uLiIgMT4mNQorCisgICAgICAgIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyAtSSRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IgorICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDcxNTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8bGlidXRmOC5oPgoraW50CittYWluICgpCit7CitwdXR3YygwLDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3MTY4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MTcxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjcxNzQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MTc3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworICAgICAgICAgICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gZm91bmQgdXRmOCBoZWFkZXJzIGluICRjZl9jdl9oZWFkZXJfcGF0aF91dGY4IiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo3MTgyOiB0ZXN0aW5nIC4uLiBmb3VuZCB1dGY4IGhlYWRlcnMgaW4gJGNmX2N2X2hlYWRlcl9wYXRoX3V0ZjggLi4uIiAxPiY1CisKKyAgICAgICAgICAgIGNmX2N2X2ZpbmRfbGlua2FnZV91dGY4PW1heWJlCisgICAgICAgICAgICBjZl90ZXN0X0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgICAgICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICAgICAgIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlX3V0ZjgiID0gbWF5YmUgOyB0aGVuCisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo3MjAwOiB0ZXN0aW5nIFNlYXJjaGluZyBmb3IgdXRmOCBsaWJyYXJ5IGluIEZJTkRfTElOS0FHRSh1dGY4LCkgLi4uIiAxPiY1CisKKyAgICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBjZl9zYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCisgICAgICBpZiB0ZXN0ICIkY2ZfY3ZfZmluZF9saW5rYWdlX3V0ZjgiICE9IHllcyA7IHRoZW4KKyAgICAgICAgY2Zfc2VhcmNoPSIiCisKK3Rlc3QgIi91c3IiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvdXNyIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgL3VzciIKKwl0ZXN0IC1kIC91c3IvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xpYiIKKwl0ZXN0IC1kIC91c3IvbGliL3V0ZjggJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbGliL3V0ZjgiCisJdGVzdCAtZCAvdXNyL2xpYi91dGY4L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9saWIvdXRmOC9saWIiCisJdGVzdCAtZCAvdXNyL3V0ZjgvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL3V0ZjgvbGliIgorCXRlc3QgLWQgL3Vzci91dGY4L2xpYi91dGY4ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL3V0ZjgvbGliL3V0ZjgiCit9CisKK3Rlc3QgIiRwcmVmaXgiICE9ICJOT05FIiAmJiBcCit0ZXN0IC1kICIkcHJlZml4IiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkcHJlZml4IgorCXRlc3QgLWQgJHByZWZpeC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliIgorCXRlc3QgLWQgJHByZWZpeC9saWIvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIvdXRmOCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliL3V0ZjgvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYi91dGY4L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvdXRmOC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvdXRmOC9saWIiCisJdGVzdCAtZCAkcHJlZml4L3V0ZjgvbGliL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvdXRmOC9saWIvdXRmOCIKK30KKwordGVzdCAiL3Vzci9sb2NhbCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IvbG9jYWwiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAvdXNyL2xvY2FsIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvbGliIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9saWIvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9saWIvdXRmOCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvbGliL3V0ZjgvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2xpYi91dGY4L2xpYiIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvdXRmOC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvdXRmOC9saWIiCisJdGVzdCAtZCAvdXNyL2xvY2FsL3V0ZjgvbGliL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvdXRmOC9saWIvdXRmOCIKK30KKwordGVzdCAiL29wdCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi9vcHQiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAvb3B0IgorCXRlc3QgLWQgL29wdC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvbGliIgorCXRlc3QgLWQgL29wdC9saWIvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC9saWIvdXRmOCIKKwl0ZXN0IC1kIC9vcHQvbGliL3V0ZjgvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2xpYi91dGY4L2xpYiIKKwl0ZXN0IC1kIC9vcHQvdXRmOC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvdXRmOC9saWIiCisJdGVzdCAtZCAvb3B0L3V0ZjgvbGliL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvdXRmOC9saWIvdXRmOCIKK30KKwordGVzdCAiJEhPTUUiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkSE9NRSIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRIT01FIgorCXRlc3QgLWQgJEhPTUUvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9saWIiCisJdGVzdCAtZCAkSE9NRS9saWIvdXRmOCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvbGliL3V0ZjgiCisJdGVzdCAtZCAkSE9NRS9saWIvdXRmOC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2xpYi91dGY4L2xpYiIKKwl0ZXN0IC1kICRIT01FL3V0ZjgvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS91dGY4L2xpYiIKKwl0ZXN0IC1kICRIT01FL3V0ZjgvbGliL3V0ZjggJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL3V0ZjgvbGliL3V0ZjgiCit9CisKKyAgICAgICAgZm9yIGNmX2N2X2xpYnJhcnlfcGF0aF91dGY4IGluICRjZl9zZWFyY2gKKyAgICAgICAgZG8KKyAgICAgICAgICBpZiB0ZXN0IC1kICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCA7IHRoZW4KKyAgICAgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgJGNmX2N2X2xpYnJhcnlfcGF0aF91dGY4IiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo3MjY4OiB0ZXN0aW5nIC4uLiB0ZXN0aW5nICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCAuLi4iIDE+JjUKKworICAgICAgICAgICAgQ1BQRkxBR1M9IiRjZl90ZXN0X0NQUEZMQUdTIgorICAgICAgICAgICAgTElCUz0iLWx1dGY4ICAkY2Zfc2F2ZV9MSUJTIgorICAgICAgICAgICAgTERGTEFHUz0iJGNmX3NhdmVfTERGTEFHUyAtTCRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCIKKyAgICAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzI3NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CitpbnQKK21haW4gKCkKK3sKK3B1dHdjKDAsMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3Mjg3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3MjkwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzI5MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjcyOTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisgICAgICAgICAgICAgICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gZm91bmQgdXRmOCBsaWJyYXJ5IGluICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzMwMTogdGVzdGluZyAuLi4gZm91bmQgdXRmOCBsaWJyYXJ5IGluICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCAuLi4iIDE+JjUKKworICAgICAgICAgICAgICAgIGNmX2N2X2ZpbmRfbGlua2FnZV91dGY4PXllcworICAgICAgICAgICAgICAgIGNmX2N2X2xpYnJhcnlfZmlsZV91dGY4PSItbHV0ZjgiCisgICAgICAgICAgICAgICAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorICAgICAgICAgICAgICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCisgICAgICAgICAgICAgICAgTERGTEFHUz0iJGNmX3NhdmVfTERGTEFHUyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCisgICAgICAgIENQUEZMQUdTPSIkY2Zfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJGNmX3NhdmVfTERGTEFHUyIKKyAgICAgIGZpCisKKyAgICBlbHNlCisgICAgICBjZl9jdl9maW5kX2xpbmthZ2VfdXRmOD1ubworICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgIiRjZl9jdl9maW5kX2xpbmthZ2VfdXRmOCIgPSB5ZXMgOyB0aGVuCitjZl9jdl91dGY4X2xpYj1hZGQtb24KK2Vsc2UKK2NmX2N2X3V0ZjhfbGliPW5vCitmaQorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo3MzM5OiByZXN1bHQ6ICRjZl9jdl91dGY4X2xpYiIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfdXRmOF9saWIiID4mNgorCisjIEhBVkVfTElCVVRGOF9IIGlzIHVzZWQgYnkgbmN1cnNlcyBpZiBjdXJzZXMuaCBpcyBzaGFyZWQgYmV0d2VlbgorIyBuY3Vyc2VzL25jdXJzZXN3OgoraWYgdGVzdCAiJGNmX2N2X3V0ZjhfbGliIiA9ICJhZGQtb24iIDsgdGhlbgorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTElCVVRGOF9IIDEKK0VPRgorCitpZiB0ZXN0IC1uICIkY2ZfY3ZfaGVhZGVyX3BhdGhfdXRmOCIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICRjZl9jdl9oZWFkZXJfcGF0aF91dGY4CisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3MzczICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitwcmludGYoIkhlbGxvIikKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzM4NTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzM4ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3MzkxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzM5NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaGF2ZV9pbmNkaXI9eWVzCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQkgIENQUEZMQUdTPSRjZl9zYXZlX0NQUEZMQUdTCisJCQlmaQorCQkgIGZpCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorCQkgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NzQxMTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisJCSAgQ1BQRkxBR1M9Ii1JJGNmX2FkZF9pbmNkaXIgJENQUEZMQUdTIgorCisgICAgICAgICAgY2ZfdG9wX2luY2Rpcj1gZWNobyAkY2ZfYWRkX2luY2RpciB8IHNlZCAtZSAncyUvaW5jbHVkZS8uKiQlL2luY2x1ZGUlJ2AKKyAgICAgICAgICB0ZXN0ICIkY2ZfdG9wX2luY2RpciIgPSAiJGNmX2FkZF9pbmNkaXIiICYmIGJyZWFrCisgICAgICAgICAgY2ZfYWRkX2luY2Rpcj0iJGNmX3RvcF9pbmNkaXIiCisJCWVsc2UKKwkJICBicmVhaworCQlmaQorCSAgZmkKKwlkb25lCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOCIgOyB0aGVuCisgIGZvciBjZl9hZGRfbGliZGlyIGluICRjZl9jdl9saWJyYXJ5X3BhdGhfdXRmOAorICBkbworICAgIGlmIHRlc3QgJGNmX2FkZF9saWJkaXIgPSAvdXNyL2xpYiA7IHRoZW4KKyAgICAgIDoKKyAgICBlbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKyAgICB0aGVuCisgICAgICBjZl9oYXZlX2xpYmRpcj1ubworICAgICAgaWYgdGVzdCAtbiAiJExERkxBR1MkTElCUyIgOyB0aGVuCisgICAgICAgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKyAgICAgICAgZm9yIGNmX3Rlc3RfbGliZGlyIGluICRMREZMQUdTICRMSUJTIDsgZG8KKyAgICAgICAgICBpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisgICAgICAgICAgICBjZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKyAgICAgICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo3NDQ1OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGggLi4uIiAxPiY1CisKKyAgICAgICAgTERGTEFHUz0iLUwkY2ZfYWRkX2xpYmRpciAkTERGTEFHUyIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKKworCUxJQlM9Ii1sdXRmOCAkTElCUyIKK2ZpCisKKwkJaWYgdGVzdCAiJGNmX2N2X3V0ZjhfbGliIiAhPSBubyA7IHRoZW4KKwkJCU5DVVJTRVNfTElCVVRGOD0xCisJCWZpCisJZmkKKworIyBUaGlzIGlzIG5lZWRlZCBvbiBUcnU2NCA1LjAgdG8gZGVjbGFyZSBtYnN0YXRlX3QKK2VjaG8gIiRhc19tZTo3NDYyOiBjaGVja2luZyBpZiB3ZSBtdXN0IGluY2x1ZGUgd2NoYXIuaCB0byBkZWNsYXJlIG1ic3RhdGVfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIG11c3QgaW5jbHVkZSB3Y2hhci5oIHRvIGRlY2xhcmUgbWJzdGF0ZV90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9tYnN0YXRlX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NDY5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9MSUJVVEY4X0gKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWYKK2ludAorbWFpbiAoKQoreworbWJzdGF0ZV90IHN0YXRlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc0ODc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc0OTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzQ5MzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc0OTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9tYnN0YXRlX3Q9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NTAzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpZmRlZiBIQVZFX0xJQlVURjhfSAorI2luY2x1ZGUgPGxpYnV0ZjguaD4KKyNlbmRpZgoraW50CittYWluICgpCit7CittYnN0YXRlX3QgdmFsdWUKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzUyMjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzUyNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3NTI4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzUzMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X21ic3RhdGVfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfbWJzdGF0ZV90PXVua25vd24KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6NzU0MzogcmVzdWx0OiAkY2ZfY3ZfbWJzdGF0ZV90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9tYnN0YXRlX3QiID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfbWJzdGF0ZV90IiA9IHllcyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBORUVEX1dDSEFSX0ggMQorRU9GCisKKwlORUVEX1dDSEFSX0g9MQorZmkKKworIyBpZiB3ZSBkbyBub3QgZmluZCBtYnN0YXRlX3QgaW4gZWl0aGVyIHBsYWNlLCB1c2Ugc3Vic3RpdHV0aW9uIHRvIHByb3ZpZGUgYSBmYWxsYmFjay4KK2lmIHRlc3QgIiRjZl9jdl9tYnN0YXRlX3QiID0gdW5rbm93biA7IHRoZW4KKwlOQ1VSU0VTX01CU1RBVEVfVD0xCitmaQorCisjIFRoaXMgaXMgbmVlZGVkIG9uIFRydTY0IDUuMCB0byBkZWNsYXJlIHdjaGFyX3QKK2VjaG8gIiRhc19tZTo3NTYwOiBjaGVja2luZyBpZiB3ZSBtdXN0IGluY2x1ZGUgd2NoYXIuaCB0byBkZWNsYXJlIHdjaGFyX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBtdXN0IGluY2x1ZGUgd2NoYXIuaCB0byBkZWNsYXJlIHdjaGFyX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3djaGFyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NTY3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9MSUJVVEY4X0gKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWYKK2ludAorbWFpbiAoKQoreword2NoYXJfdCBzdGF0ZQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3NTg1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3NTg4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjc1OTE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3NTk0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3Zfd2NoYXJfdD1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDc2MDEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2lmZGVmIEhBVkVfTElCVVRGOF9ICisjaW5jbHVkZSA8bGlidXRmOC5oPgorI2VuZGlmCitpbnQKK21haW4gKCkKK3sKK3djaGFyX3QgdmFsdWUKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzYyMDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzYyMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3NjI2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzYyOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3djaGFyX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3djaGFyX3Q9dW5rbm93bgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo3NjQxOiByZXN1bHQ6ICRjZl9jdl93Y2hhcl90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl93Y2hhcl90IiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X3djaGFyX3QiID0geWVzIDsgdGhlbgorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5FRURfV0NIQVJfSCAxCitFT0YKKworCU5FRURfV0NIQVJfSD0xCitmaQorCisjIGlmIHdlIGRvIG5vdCBmaW5kIHdjaGFyX3QgaW4gZWl0aGVyIHBsYWNlLCB1c2Ugc3Vic3RpdHV0aW9uIHRvIHByb3ZpZGUgYSBmYWxsYmFjay4KK2lmIHRlc3QgIiRjZl9jdl93Y2hhcl90IiA9IHVua25vd24gOyB0aGVuCisJTkNVUlNFU19XQ0hBUl9UPTEKK2ZpCisKKyMgaWYgd2UgZmluZCB3Y2hhcl90IGluIGVpdGhlciBwbGFjZSwgdXNlIHN1YnN0aXR1dGlvbiB0byBwcm92aWRlIGEgZmFsbGJhY2suCitpZiB0ZXN0ICIkY2ZfY3Zfd2NoYXJfdCIgIT0gdW5rbm93biA7IHRoZW4KKwlOQ1VSU0VTX09LX1dDSEFSX1Q9MQorZmkKKworIyBUaGlzIGlzIG5lZWRlZCBvbiBUcnU2NCA1LjAgdG8gZGVjbGFyZSB3aW50X3QKK2VjaG8gIiRhc19tZTo3NjYzOiBjaGVja2luZyBpZiB3ZSBtdXN0IGluY2x1ZGUgd2NoYXIuaCB0byBkZWNsYXJlIHdpbnRfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIG11c3QgaW5jbHVkZSB3Y2hhci5oIHRvIGRlY2xhcmUgd2ludF90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl93aW50X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NjcwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9MSUJVVEY4X0gKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWYKK2ludAorbWFpbiAoKQoreword2ludF90IHN0YXRlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc2ODg6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc2OTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzY5NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc2OTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl93aW50X3Q9bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3NzA0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpZmRlZiBIQVZFX0xJQlVURjhfSAorI2luY2x1ZGUgPGxpYnV0ZjguaD4KKyNlbmRpZgoraW50CittYWluICgpCit7Cit3aW50X3QgdmFsdWUKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzcyMzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzcyNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3NzI5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzczMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3dpbnRfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3Zfd2ludF90PXVua25vd24KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6Nzc0NDogcmVzdWx0OiAkY2ZfY3Zfd2ludF90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl93aW50X3QiID4mNgorCitpZiB0ZXN0ICIkY2ZfY3Zfd2ludF90IiA9IHllcyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBORUVEX1dDSEFSX0ggMQorRU9GCisKKwlORUVEX1dDSEFSX0g9MQorZmkKKworIyBpZiB3ZSBkbyBub3QgZmluZCB3aW50X3QgaW4gZWl0aGVyIHBsYWNlLCB1c2Ugc3Vic3RpdHV0aW9uIHRvIHByb3ZpZGUgYSBmYWxsYmFjay4KK2lmIHRlc3QgIiRjZl9jdl93aW50X3QiID0gdW5rbm93biA7IHRoZW4KKwlOQ1VSU0VTX1dJTlRfVD0xCitmaQorCisjIGlmIHdlIGZpbmQgd2ludF90IGluIGVpdGhlciBwbGFjZSwgdXNlIHN1YnN0aXR1dGlvbiB0byBwcm92aWRlIGEgZmFsbGJhY2suCitpZiB0ZXN0ICIkY2ZfY3Zfd2ludF90IiAhPSB1bmtub3duIDsgdGhlbgorCU5DVVJTRVNfT0tfV0lOVF9UPTEKK2ZpCisKKwlpZiB0ZXN0ICIkTkNVUlNFU19NQlNUQVRFX1QiICE9IDA7IHRoZW4KKwkJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkVFRF9NQlNUQVRFX1RfREVGIDEKK0VPRgorCisJZmkKK2ZpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1kaXNhYmxlLWxwNjQgdG8gYWxsb3cgbG9uZyBjaHR5cGUKK2Nhc2UgJGNmX2N2X2FiaV92ZXJzaW9uIGluCitbMzQ1XSopCisJZGVmYXVsdF93aXRoX2xwNjQ9bm8KKwk7OworKikKKwlkZWZhdWx0X3dpdGhfbHA2ND15ZXMKKwk7OworZXNhYworCitlY2hvICIkYXNfbWU6Nzc4MzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgX0xQNjQgZGVmaW5pdGlvbiBpbiBjdXJzZXMuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIF9MUDY0IGRlZmluaXRpb24gaW4gY3Vyc2VzLmguLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1scDY0IG9yIC0tZGlzYWJsZS1scDY0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xwNjQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2xwNjQiCisgIHdpdGhfbHA2ND0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfbHA2ND0kZGVmYXVsdF93aXRoX2xwNjQKK2ZpOworZWNobyAiJGFzX21lOjc3OTM6IHJlc3VsdDogJHdpdGhfbHA2NCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9scDY0IiA+JjYKKworaWYgdGVzdCAiJHdpdGhfbHA2NCIgPSB5ZXMgOyB0aGVuCisJY2ZfY3ZfZW5hYmxlX2xwNjQ9MQorZWxzZQorCWNmX2N2X2VuYWJsZV9scDY0PTAKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sYXJnZWZpbGUgb3IgLS1kaXNhYmxlLWxhcmdlZmlsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sYXJnZWZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2xhcmdlZmlsZSIKKworZmk7CitpZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KKworICBlY2hvICIkYXNfbWU6NzgwOTogY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDPW5vCisgICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgIGFjX3NhdmVfQ0M9JENDCisgICAgICAgd2hpbGUgOjsgZG8KKyAgICAgCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorICAgICAJICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKyAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzgyMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjc4NDE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc4NDQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6Nzg0NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjc4NTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICAgICAJIENDPSIkQ0MgLW4zMiIKKyAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3ODYwOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3ODYzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjc4NjY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3ODY5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz0nIC1uMzInOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICAgYnJlYWsKKyAgICAgICBkb25lCisgICAgICAgQ0M9JGFjX3NhdmVfQ0MKKyAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKK2ZpCitlY2hvICIkYXNfbWU6Nzg4MzogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY2CisgIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCisgIGZpCisKKyAgZWNobyAiJGFzX21lOjc4ODk6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPW5vCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgNzg5NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6NzkxNzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzkyMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo3OTIzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6NzkyNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3OTM1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo3OTU2OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3OTU5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjc5NjI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo3OTY1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYnJlYWsKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6Nzk3NjogcmVzdWx0OiAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjYKK2lmIHRlc3QgIiRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgIT0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMKK0VPRgorCitmaQorcm0gLWYgY29uZnRlc3QqCisgIGVjaG8gIiRhc19tZTo3OTg2OiBjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZV9maWxlcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9bm8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA3OTk0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo4MDE0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MDE3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjgwMjA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MDIzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDgwMzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2RlZmluZSBfTEFSR0VfRklMRVMgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjgwNTM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgwNTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODA1OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgwNjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9MTsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBicmVhaworZG9uZQorZmkKK2VjaG8gIiRhc19tZTo4MDczOiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19sYXJnZV9maWxlcyIgPiY2CitpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiAhPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIF9MQVJHRV9GSUxFUyAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzCitFT0YKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworICAgIGlmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubyA7IHRoZW4KKwllY2hvICIkYXNfbWU6ODA4NjogY2hlY2tpbmcgZm9yIF9MQVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0xBUkdFRklMRV9TT1VSQ0UgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9bm8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA4MDk0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CityZXR1cm4gIWZzZWVrbzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODEwNjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODEwOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo4MTEyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODExNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA4MTI0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgMQorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3JldHVybiAhZnNlZWtvOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo4MTM3OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MTQwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjgxNDM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo4MTQ2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9MTsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBicmVhaworZG9uZQorZmkKK2VjaG8gIiRhc19tZTo4MTU3OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiID4mNgoraWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIiAhPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZQorRU9GCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworIyBXZSB1c2VkIHRvIHRyeSBkZWZpbmluZyBfWE9QRU5fU09VUkNFPTUwMCB0b28sIHRvIHdvcmsgYXJvdW5kIGEgYnVnCisjIGluIGdsaWJjIDIuMS4zLCBidXQgdGhhdCBicmVha3MgdG9vIG1hbnkgb3RoZXIgdGhpbmdzLgorIyBJZiB5b3Ugd2FudCBmc2Vla28gYW5kIGZ0ZWxsbyB3aXRoIGdsaWJjLCB1cGdyYWRlIHRvIGEgZml4ZWQgZ2xpYmMuCitlY2hvICIkYXNfbWU6ODE3MTogY2hlY2tpbmcgZm9yIGZzZWVrbyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmc2Vla28uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZnNlZWtvK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgODE3NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcmV0dXJuIGZzZWVrbyAmJiBmc2Vla28gKHN0ZGluLCAwLCAwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjgxODk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjgxOTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo4MTk1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODE5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfZnNlZWtvPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX2ZzZWVrbz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6ODIwODogcmVzdWx0OiAkYWNfY3ZfZnVuY19mc2Vla28iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZnNlZWtvIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfZnNlZWtvID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfRlNFRUtPIDEKK0VPRgorCitmaQorCisJIyBOb3JtYWxseSB3ZSB3b3VsZCBjb2xsZWN0IHRoZXNlIGRlZmluaXRpb25zIGluIHRoZSBjb25maWcuaCwKKwkjIGJ1dCAobGlrZSBfWE9QRU5fU09VUkNFKSwgc29tZSBlbnZpcm9ubWVudHMgcmVseSBvbiBoYXZpbmcgdGhlc2UKKwkjIGRlZmluZWQgYmVmb3JlIGFueSBvZiB0aGUgc3lzdGVtIGhlYWRlcnMgYXJlIGluY2x1ZGVkLiAgQW5vdGhlcgorCSMgY2FzZSBjb21lcyB1cCB3aXRoIEMrKywgZS5nLiwgb24gQUlYIHRoZSBjb21waWxlciBjb21waWxlcyB0aGUKKwkjIGhlYWRlciBmaWxlcyBieSB0aGVtc2VsdmVzIGJlZm9yZSBsb29raW5nIGF0IHRoZSBib2R5IGZpbGVzIGl0IGlzCisJIyB0b2xkIHRvIGNvbXBpbGUuICBGb3IgbmN1cnNlcywgdGhvc2UgaGVhZGVyIGZpbGVzIGRvIG5vdCBpbmNsdWRlCisJIyB0aGUgY29uZmlnLmgKKwl0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiAgICAgICE9IG5vICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfTEFSR0VfRklMRVMgIgorCXRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgIT0gbm8gJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9MQVJHRUZJTEVfU09VUkNFICIKKwl0ZXN0ICIkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiICE9IG5vICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfRklMRV9PRkZTRVRfQklUUz0kYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMgIgorCisJZWNobyAiJGFzX21lOjgyMjk6IGNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHN0cnVjdCBkaXJlbnQ2NCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHN0cnVjdCBkaXJlbnQ2NC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfc3RydWN0X2RpcmVudDY0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA4MjM2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorCitpbnQKK21haW4gKCkKK3sKKworCQkvKiBpZiB0cmFuc2l0aW9uYWwgbGFyZ2VmaWxlIHN1cHBvcnQgaXMgc2V0dXAsIHRoaXMgaXMgdHJ1ZSAqLworCQlleHRlcm4gc3RydWN0IGRpcmVudDY0ICogcmVhZGRpcihESVIgKik7CisJCXN0cnVjdCBkaXJlbnQ2NCAqeCA9IHJlYWRkaXIoKERJUiAqKTApOworCQlzdHJ1Y3QgZGlyZW50ICp5ID0gcmVhZGRpcigoRElSICopMCk7CisJCWludCB6ID0geCAtIHk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6ODI1NzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODI2MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo4MjYzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6ODI2NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3N0cnVjdF9kaXJlbnQ2ND15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3Zfc3RydWN0X2RpcmVudDY0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6ODI3NzogcmVzdWx0OiAkY2ZfY3Zfc3RydWN0X2RpcmVudDY0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9zdHJ1Y3RfZGlyZW50NjQiID4mNgorCXRlc3QgIiRjZl9jdl9zdHJ1Y3RfZGlyZW50NjQiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0RJUkVOVDY0IDEKK0VPRgorCisgICAgZmkKKworIyMjICAgdXNlIG9wdGlvbiAtLWRpc2FibGUtdHBhcm0tdmFyYXJncyB0byBtYWtlIHRwYXJtKCkgY29uZm9ybSB0byBYL09wZW4KK2VjaG8gIiRhc19tZTo4Mjg2OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0cGFybSBub3QgdG8gdXNlIFgvT3BlbiBmaXhlZC1wYXJhbWV0ZXIgbGlzdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRwYXJtIG5vdCB0byB1c2UgWC9PcGVuIGZpeGVkLXBhcmFtZXRlciBsaXN0Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdHBhcm0tdmFyYXJncyBvciAtLWRpc2FibGUtdHBhcm0tdmFyYXJncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV90cGFybV92YXJhcmdzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV90cGFybV92YXJhcmdzIgorICB3aXRoX3RwYXJtX3ZhcmFyZ3M9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3RwYXJtX3ZhcmFyZ3M9eWVzCitmaTsKK2VjaG8gIiRhc19tZTo4Mjk2OiByZXN1bHQ6ICR3aXRoX3RwYXJtX3ZhcmFyZ3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfdHBhcm1fdmFyYXJncyIgPiY2CitOQ1VSU0VTX1RQQVJNX1ZBUkFSR1M9MAordGVzdCAiJHdpdGhfdHBhcm1fdmFyYXJncyIgPSB5ZXMgJiYgTkNVUlNFU19UUEFSTV9WQVJBUkdTPTEKKworIyMjICAgdXNlIG9wdGlvbiAtLWRpc2FibGUtdGljLWRlcGVuZHMgdG8gbWFrZSBsaWJ0aWMgbm90IGV4cGxpY2l0bHkgZGVwZW5kIG9uIG5jdXJzZXMvbmN1cnNlc3cKK2lmIHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0gbm8gOyB0aGVuCitlY2hvICIkYXNfbWU6ODMwMzogY2hlY2tpbmcgaWYgeW91IHdhbnQgdGljIGxpYnJhcnkgdG8gdXNlIGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gbmN1cnNlcyRMSUJfU1VGRklYIGxpYnJhcnkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0aWMgbGlicmFyeSB0byB1c2UgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBuY3Vyc2VzJExJQl9TVUZGSVggbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRpYy1kZXBlbmRzIG9yIC0tZGlzYWJsZS10aWMtZGVwZW5kcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV90aWNfZGVwZW5kcytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfdGljX2RlcGVuZHMiCisgIHdpdGhfdGljX2RlcGVuZHM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3RpY19kZXBlbmRzPXllcworZmk7CitlY2hvICIkYXNfbWU6ODMxMzogcmVzdWx0OiAkd2l0aF90aWNfZGVwZW5kcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF90aWNfZGVwZW5kcyIgPiY2CitlbHNlCisJd2l0aF90aWNfZGVwZW5kcz1ubworZmkKKworIyMjICAgdXNlIG9wdGlvbiAtLXdpdGgtYm9vbCB0byBvdmVycmlkZSBib29sJ3MgdHlwZQorZWNobyAiJGFzX21lOjgzMjA6IGNoZWNraW5nIGZvciB0eXBlIG9mIGJvb2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdHlwZSBvZiBib29sLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWJvb2wgb3IgLS13aXRob3V0LWJvb2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Jvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYm9vbCIKKyAgTkNVUlNFU19CT09MPSIkd2l0aHZhbCIKK2Vsc2UKKyAgTkNVUlNFU19CT09MPWF1dG8KK2ZpOworZWNobyAiJGFzX21lOjgzMzA6IHJlc3VsdDogJE5DVVJTRVNfQk9PTCIgPiY1CitlY2hvICIke0VDSE9fVH0kTkNVUlNFU19CT09MIiA+JjYKKworZWNobyAiJGFzX21lOjgzMzM6IGNoZWNraW5nIGZvciBhbHRlcm5hdGUgdGVybWluYWwgY2FwYWJpbGl0aWVzIGZpbGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYWx0ZXJuYXRlIHRlcm1pbmFsIGNhcGFiaWxpdGllcyBmaWxlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNhcHMgb3IgLS13aXRob3V0LWNhcHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NhcHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfY2FwcyIKKyAgVEVSTUlORk9fQ0FQUz1DYXBzLiR3aXRodmFsCitlbHNlCisgIFRFUk1JTkZPX0NBUFM9Q2FwcworZmk7Cit0ZXN0IC1mICIke3NyY2Rpcn0vaW5jbHVkZS8ke1RFUk1JTkZPX0NBUFN9IiB8fCBURVJNSU5GT19DQVBTPUNhcHMKK2VjaG8gIiRhc19tZTo4MzQ0OiByZXN1bHQ6ICRURVJNSU5GT19DQVBTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRURVJNSU5GT19DQVBTIiA+JjYKKworIyMjICAgdXNlIG9wdGlvbiAtLXdpdGgtY2h0eXBlIHRvIG92ZXJyaWRlIGNodHlwZSdzIHR5cGUKK2VjaG8gIiRhc19tZTo4MzQ4OiBjaGVja2luZyBmb3IgdHlwZSBvZiBjaHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdHlwZSBvZiBjaHR5cGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2h0eXBlIG9yIC0td2l0aG91dC1jaHR5cGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NodHlwZStzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9jaHR5cGUiCisgIE5DVVJTRVNfQ0hUWVBFPSIkd2l0aHZhbCIKK2Vsc2UKKyAgTkNVUlNFU19DSFRZUEU9YXV0bworZmk7CitlY2hvICIkYXNfbWU6ODM1ODogcmVzdWx0OiAkTkNVUlNFU19DSFRZUEUiID4mNQorZWNobyAiJHtFQ0hPX1R9JE5DVVJTRVNfQ0hUWVBFIiA+JjYKKworIyMjICAgdXNlIG9wdGlvbiAtLXdpdGgtb3NwZWVkIHRvIG92ZXJyaWRlIG9zcGVlZCdzIHR5cGUKK2VjaG8gIiRhc19tZTo4MzYyOiBjaGVja2luZyBmb3IgdHlwZSBvZiBvc3BlZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdHlwZSBvZiBvc3BlZWQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3NwZWVkIG9yIC0td2l0aG91dC1vc3BlZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX29zcGVlZCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9vc3BlZWQiCisgIE5DVVJTRVNfT1NQRUVEPSIkd2l0aHZhbCIKK2Vsc2UKKyAgTkNVUlNFU19PU1BFRUQ9c2hvcnQKK2ZpOworZWNobyAiJGFzX21lOjgzNzI6IHJlc3VsdDogJE5DVVJTRVNfT1NQRUVEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSROQ1VSU0VTX09TUEVFRCIgPiY2CisKKyMjIyAgIHVzZSBvcHRpb24gLS13aXRoLW1tYXNrLXQgdG8gb3ZlcnJpZGUgbW1hc2tfdCdzIHR5cGUKK2VjaG8gIiRhc19tZTo4Mzc2OiBjaGVja2luZyBmb3IgdHlwZSBvZiBtbWFza190IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHR5cGUgb2YgbW1hc2tfdC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tbWFzay10IG9yIC0td2l0aG91dC1tbWFzay10IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tbWFza190K3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX21tYXNrX3QiCisgIE5DVVJTRVNfTU1BU0tfVD0iJHdpdGh2YWwiCitlbHNlCisgIE5DVVJTRVNfTU1BU0tfVD1hdXRvCitmaTsKK2VjaG8gIiRhc19tZTo4Mzg2OiByZXN1bHQ6ICROQ1VSU0VTX01NQVNLX1QiID4mNQorZWNobyAiJHtFQ0hPX1R9JE5DVVJTRVNfTU1BU0tfVCIgPiY2CisKKyMjIyBFbmFibGUgY29tcGlsaW5nLWluIHJjcyBpZCdzCitlY2hvICIkYXNfbWU6ODM5MDogY2hlY2tpbmcgaWYgUkNTIGlkZW50aWZpZXJzIHNob3VsZCBiZSBjb21waWxlZC1pbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIFJDUyBpZGVudGlmaWVycyBzaG91bGQgYmUgY29tcGlsZWQtaW4uLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcmNzLWlkcyBvciAtLXdpdGhvdXQtcmNzLWlkcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcmNzX2lkcytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9yY3NfaWRzIgorICB3aXRoX3Jjc19pZHM9JHdpdGh2YWwKK2Vsc2UKKyAgd2l0aF9yY3NfaWRzPW5vCitmaTsKK2VjaG8gIiRhc19tZTo4NDAwOiByZXN1bHQ6ICR3aXRoX3Jjc19pZHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfcmNzX2lkcyIgPiY2Cit0ZXN0ICIkd2l0aF9yY3NfaWRzIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfUkNTX0lEUyAxCitFT0YKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitlY2hvICIkYXNfbWU6ODQwODogY2hlY2tpbmcgZm9ybWF0IG9mIG1hbi1wYWdlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvcm1hdCBvZiBtYW4tcGFnZXMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFucGFnZS1mb3JtYXQgb3IgLS13aXRob3V0LW1hbnBhZ2UtZm9ybWF0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tYW5wYWdlX2Zvcm1hdCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tYW5wYWdlX2Zvcm1hdCIKKyAgTUFOUEFHRV9GT1JNQVQ9JHdpdGh2YWwKK2Vsc2UKKyAgTUFOUEFHRV9GT1JNQVQ9dW5rbm93bgorZmk7CisKK3Rlc3QgLXogIiRNQU5QQUdFX0ZPUk1BVCIgJiYgTUFOUEFHRV9GT1JNQVQ9dW5rbm93bgorTUFOUEFHRV9GT1JNQVQ9YGVjaG8gIiRNQU5QQUdFX0ZPUk1BVCIgfCBzZWQgLWUgJ3MvLC8gL2cnYAorCitjZl91bmtub3duPQorCitjYXNlICRNQU5QQUdFX0ZPUk1BVCBpbgordW5rbm93bikKKyAgaWYgdGVzdCAteiAiJE1BTlBBVEgiIDsgdGhlbgorICAgIE1BTlBBVEg9Ii91c3IvbWFuOi91c3Ivc2hhcmUvbWFuIgorICBmaQorCisgICMgbG9vayBmb3IgdGhlICdkYXRlJyBtYW4tcGFnZSAoaXQncyBtb3N0IGxpa2VseSB0byBiZSBpbnN0YWxsZWQhKQorICBNQU5QQUdFX0ZPUk1BVD0KKyAgY2ZfcHJlZm9ybT1ubworICBjZl9jYXRvbmx5PXllcworICBjZl9leGFtcGxlPWRhdGUKKworICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhTRVB9IgorICBmb3IgY2ZfZGlyIGluICRNQU5QQVRIOyBkbworICAgIHRlc3QgLXogIiRjZl9kaXIiICYmIGNmX2Rpcj0vdXNyL21hbgorICAgIGZvciBjZl9uYW1lIGluICRjZl9kaXIvbWFuKi8kY2ZfZXhhbXBsZS5bMDFdKiAkY2ZfZGlyL2NhdCovJGNmX2V4YW1wbGUuWzAxXSogJGNmX2Rpci9tYW4qLyRjZl9leGFtcGxlICRjZl9kaXIvY2F0Ki8kY2ZfZXhhbXBsZQorICAgIGRvCisgICAgICBjZl90ZXN0PWBlY2hvICRjZl9uYW1lIHwgc2VkIC1lICdzLyovLydgCisgICAgICBpZiB0ZXN0ICJ4JGNmX3Rlc3QiID0gIngkY2ZfbmFtZSIgOyB0aGVuCisKKwljYXNlICIkY2ZfbmFtZSIgaW4KKwkqLmd6KSBNQU5QQUdFX0ZPUk1BVD0iJE1BTlBBR0VfRk9STUFUIGd6aXAiOzsKKwkqLlopICBNQU5QQUdFX0ZPUk1BVD0iJE1BTlBBR0VfRk9STUFUIGNvbXByZXNzIjs7CisJKi4wKQlNQU5QQUdFX0ZPUk1BVD0iJE1BTlBBR0VfRk9STUFUIEJTREkiOzsKKwkqKSAgICBNQU5QQUdFX0ZPUk1BVD0iJE1BTlBBR0VfRk9STUFUIG5vcm1hbCI7OworCWVzYWMKKworCWNhc2UgIiRjZl9uYW1lIiBpbgorCSRjZl9kaXIvbWFuKikKKwkgIGNmX2NhdG9ubHk9bm8KKwkgIDs7CisJJGNmX2Rpci9jYXQqKQorCSAgY2ZfcHJlZm9ybT15ZXMKKwkgIDs7CisJZXNhYworCWJyZWFrCisgICAgICBmaQorCisgICAgICAjIGlmIHdlIGZvdW5kIGEgbWF0Y2ggaW4gZWl0aGVyIG1hbiogb3IgY2F0Kiwgc3RvcCBsb29raW5nCisgICAgICBpZiB0ZXN0IC1uICIkTUFOUEFHRV9GT1JNQVQiIDsgdGhlbgorCWNmX2ZvdW5kPW5vCisJdGVzdCAiJGNmX3ByZWZvcm0iID0geWVzICYmIE1BTlBBR0VfRk9STUFUPSIkTUFOUEFHRV9GT1JNQVQgZm9ybWF0dGVkIgorCXRlc3QgIiRjZl9jYXRvbmx5IiA9IHllcyAmJiBNQU5QQUdFX0ZPUk1BVD0iJE1BTlBBR0VfRk9STUFUIGNhdG9ubHkiCisJY2FzZSAiJGNmX25hbWUiIGluCisJJGNmX2Rpci9jYXQqKQorCSAgY2ZfZm91bmQ9eWVzCisJICA7OworCWVzYWMKKwl0ZXN0ICRjZl9mb3VuZD15ZXMgJiYgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgICMgb25seSBjaGVjayB0aGUgZmlyc3QgZGlyZWN0b3J5IGluICRNQU5QQVRIIHdoZXJlIHdlIGZpbmQgbWFucGFnZXMKKyAgICBpZiB0ZXN0IC1uICIkTUFOUEFHRV9GT1JNQVQiIDsgdGhlbgorICAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICAjIGlmIHdlIGRpZCBub3QgZmluZCB0aGUgZXhhbXBsZSwganVzdCBhc3N1bWUgaXQgaXMgbm9ybWFsCisgIHRlc3QgLXogIiRNQU5QQUdFX0ZPUk1BVCIgJiYgTUFOUEFHRV9GT1JNQVQ9bm9ybWFsCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICA7OworKikKKyAgZm9yIGNmX29wdGlvbiBpbiAkTUFOUEFHRV9GT1JNQVQ7IGRvCisgICAgIGNhc2UgJGNmX29wdGlvbiBpbiAjKHZpCisgICAgIGd6aXB8Y29tcHJlc3N8QlNESXxub3JtYWx8Zm9ybWF0dGVkfGNhdG9ubHkpCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBjZl91bmtub3duPSIkY2ZfdW5rbm93biAkY2Zfb3B0aW9uIgorICAgICAgIDs7CisgICAgIGVzYWMKKyAgZG9uZQorICA7OworZXNhYworCitlY2hvICIkYXNfbWU6ODQ5NzogcmVzdWx0OiAkTUFOUEFHRV9GT1JNQVQiID4mNQorZWNobyAiJHtFQ0hPX1R9JE1BTlBBR0VfRk9STUFUIiA+JjYKK2lmIHRlc3QgLW4gIiRjZl91bmtub3duIiA7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6ODUwMDogV0FSTklORzogVW5leHBlY3RlZCBtYW5wYWdlLWZvcm1hdCAkY2ZfdW5rbm93biIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuZXhwZWN0ZWQgbWFucGFnZS1mb3JtYXQgJGNmX3Vua25vd24iID4mMjt9CitmaQorCitlY2hvICIkYXNfbWU6ODUwNDogY2hlY2tpbmcgZm9yIG1hbnBhZ2UgcmVuYW1pbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFucGFnZSByZW5hbWluZy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tYW5wYWdlLXJlbmFtZXMgb3IgLS13aXRob3V0LW1hbnBhZ2UtcmVuYW1lcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWFucGFnZV9yZW5hbWVzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX21hbnBhZ2VfcmVuYW1lcyIKKyAgTUFOUEFHRV9SRU5BTUVTPSR3aXRodmFsCitlbHNlCisgIE1BTlBBR0VfUkVOQU1FUz15ZXMKK2ZpOworCitjYXNlICIuJE1BTlBBR0VfUkVOQU1FUyIgaW4gIyh2aQorLm5vKSAjKHZpCisgIDs7CisufC55ZXMpCisgICMgRGViaWFuICdtYW4nIHByb2dyYW0/CisgIGlmIHRlc3QgLWYgL2V0Yy9kZWJpYW5fdmVyc2lvbiA7IHRoZW4KKyAgICBNQU5QQUdFX1JFTkFNRVM9YGNkICRzcmNkaXIgJiYgcHdkYC9tYW4vbWFuX2RiLnJlbmFtZXMKKyAgZWxzZQorICAgIE1BTlBBR0VfUkVOQU1FUz1ubworICBmaQorICA7OworZXNhYworCitpZiB0ZXN0ICIkTUFOUEFHRV9SRU5BTUVTIiAhPSBubyA7IHRoZW4KKyAgaWYgdGVzdCAtZiAkc3JjZGlyL21hbi8kTUFOUEFHRV9SRU5BTUVTIDsgdGhlbgorICAgIE1BTlBBR0VfUkVOQU1FUz1gY2QgJHNyY2Rpci9tYW4gJiYgcHdkYC8kTUFOUEFHRV9SRU5BTUVTCisgIGVsaWYgdGVzdCAhIC1mICRNQU5QQUdFX1JFTkFNRVMgOyB0aGVuCisgICAgeyB7IGVjaG8gIiRhc19tZTo4NTMyOiBlcnJvcjogbm90IGEgZmlsZW5hbWU6ICRNQU5QQUdFX1JFTkFNRVMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbm90IGEgZmlsZW5hbWU6ICRNQU5QQUdFX1JFTkFNRVMiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZmkKKworICB0ZXN0ICEgLWQgbWFuICYmIG1rZGlyIG1hbgorCisgICMgQ29uc3RydWN0IGEgc2VkLXNjcmlwdCB0byBwZXJmb3JtIHJlbmFtaW5nIHdpdGhpbiBtYW4tcGFnZXMKKyAgaWYgdGVzdCAtbiAiJE1BTlBBR0VfUkVOQU1FUyIgOyB0aGVuCisgICAgdGVzdCAhIC1kIG1hbiAmJiBta2RpciBtYW4KKyAgICBzaCAkc3JjZGlyL21hbi9tYWtlX3NlZC5zaCAkTUFOUEFHRV9SRU5BTUVTID4uL2VkaXRfbWFuLnNlZAorICBmaQorZmkKKworZWNobyAiJGFzX21lOjg1NDY6IHJlc3VsdDogJE1BTlBBR0VfUkVOQU1FUyIgPiY1CitlY2hvICIke0VDSE9fVH0kTUFOUEFHRV9SRU5BTUVTIiA+JjYKKworZWNobyAiJGFzX21lOjg1NDk6IGNoZWNraW5nIGlmIG1hbnBhZ2UgYWxpYXNlcyB3aWxsIGJlIGluc3RhbGxlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIG1hbnBhZ2UgYWxpYXNlcyB3aWxsIGJlIGluc3RhbGxlZC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tYW5wYWdlLWFsaWFzZXMgb3IgLS13aXRob3V0LW1hbnBhZ2UtYWxpYXNlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWFucGFnZV9hbGlhc2VzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX21hbnBhZ2VfYWxpYXNlcyIKKyAgTUFOUEFHRV9BTElBU0VTPSR3aXRodmFsCitlbHNlCisgIE1BTlBBR0VfQUxJQVNFUz15ZXMKK2ZpOworCitlY2hvICIkYXNfbWU6ODU2MDogcmVzdWx0OiAkTUFOUEFHRV9BTElBU0VTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNQU5QQUdFX0FMSUFTRVMiID4mNgorCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisJY2ZfdXNlX3N5bWxpbmtzPXllcworZWxzZQorCWNmX3VzZV9zeW1saW5rcz1ubworZmkKKworTUFOUEFHRV9TWU1MSU5LUz1ubworaWYgdGVzdCAiJE1BTlBBR0VfQUxJQVNFUyIgPSB5ZXMgOyB0aGVuCitlY2hvICIkYXNfbWU6ODU3MTogY2hlY2tpbmcgaWYgbWFucGFnZSBzeW1saW5rcyBzaG91bGQgYmUgdXNlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIG1hbnBhZ2Ugc3ltbGlua3Mgc2hvdWxkIGJlIHVzZWQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFucGFnZS1zeW1saW5rcyBvciAtLXdpdGhvdXQtbWFucGFnZS1zeW1saW5rcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWFucGFnZV9zeW1saW5rcytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9tYW5wYWdlX3N5bWxpbmtzIgorICBNQU5QQUdFX1NZTUxJTktTPSR3aXRodmFsCitlbHNlCisgIE1BTlBBR0VfU1lNTElOS1M9JGNmX3VzZV9zeW1saW5rcworZmk7CisKK2lmIHRlc3QgIiQkY2ZfdXNlX3N5bWxpbmtzIiA9IG5vOyB0aGVuCitpZiB0ZXN0ICIkTUFOUEFHRV9TWU1MSU5LUyIgPSB5ZXMgOyB0aGVuCisJeyBlY2hvICIkYXNfbWU6ODU4NDogV0FSTklORzogY2Fubm90IG1ha2Ugc3ltbGlua3MiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW5ub3QgbWFrZSBzeW1saW5rcyIgPiYyO30KKwlNQU5QQUdFX1NZTUxJTktTPW5vCitmaQorZmkKKworZWNobyAiJGFzX21lOjg1OTA6IHJlc3VsdDogJE1BTlBBR0VfU1lNTElOS1MiID4mNQorZWNobyAiJHtFQ0hPX1R9JE1BTlBBR0VfU1lNTElOS1MiID4mNgorZmkKKworZWNobyAiJGFzX21lOjg1OTQ6IGNoZWNraW5nIGZvciBtYW5wYWdlIHRibCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYW5wYWdlIHRibC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tYW5wYWdlLXRibCBvciAtLXdpdGhvdXQtbWFucGFnZS10Ymwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21hbnBhZ2VfdGJsK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX21hbnBhZ2VfdGJsIgorICBNQU5QQUdFX1RCTD0kd2l0aHZhbAorZWxzZQorICBNQU5QQUdFX1RCTD1ubworZmk7CisKK2VjaG8gIiRhc19tZTo4NjA1OiByZXN1bHQ6ICRNQU5QQUdFX1RCTCIgPiY1CitlY2hvICIke0VDSE9fVH0kTUFOUEFHRV9UQkwiID4mNgorCisgIGlmIHRlc3QgIiRwcmVmaXgiID0gIk5PTkUiIDsgdGhlbgorICAgICBjZl9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKyAgZWxzZQorICAgICBjZl9wcmVmaXg9IiRwcmVmaXgiCisgIGZpCisKKyAgY2FzZSAiJE1BTlBBR0VfRk9STUFUIiBpbiAjICh2aQorICAqY2F0b25seSopICMgKHZpCisgICAgY2ZfZm9ybWF0PXllcworICAgIGNmX2luYm90aD1ubworICAgIDs7CisgICpmb3JtYXR0ZWQqKSAjICh2aQorICAgIGNmX2Zvcm1hdD15ZXMKKyAgICBjZl9pbmJvdGg9eWVzCisgICAgOzsKKyAgKikKKyAgICBjZl9mb3JtYXQ9bm8KKyAgICBjZl9pbmJvdGg9bm8KKyAgICA7OworICBlc2FjCisKK3Rlc3QgISAtZCBtYW4gJiYgbWtkaXIgbWFuCisKK2NmX3NvX3N0cmlwPQorY2ZfY29tcHJlc3M9CitjYXNlICIkTUFOUEFHRV9GT1JNQVQiIGluICModmkKKypjb21wcmVzcyopICModmkKKwljZl9zb19zdHJpcD0iWiIKKwljZl9jb21wcmVzcz1jb21wcmVzcworICA7OworKmd6aXAqKSAjKHZpCisJY2Zfc29fc3RyaXA9Imd6IgorCWNmX2NvbXByZXNzPWd6aXAKKyAgOzsKK2VzYWMKKworY2ZfZWRpdF9tYW49Li9lZGl0X21hbi5zaAorY2ZfbWFuX2FsaWFzPWBwd2RgL21hbl9hbGlhcy5zZWQKKworY2F0ID4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKyMhIC9iaW4vc2gKKyMgdGhpcyBzY3JpcHQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb25maWd1cmUtc2NyaXB0IENGX01BTl9QQUdFUyBtYWNyby4KKworcHJlZml4PSIkY2ZfcHJlZml4IgorZGF0YWRpcj0iJGRhdGFkaXIiCisKK05DVVJTRVNfTUFKT1I9IiROQ1VSU0VTX01BSk9SIgorTkNVUlNFU19NSU5PUj0iJE5DVVJTRVNfTUlOT1IiCitOQ1VSU0VTX1BBVENIPSIkTkNVUlNFU19QQVRDSCIKKworTkNVUlNFU19PU1BFRUQ9IiROQ1VSU0VTX09TUEVFRCIKK1RFUk1JTkZPPSIkVEVSTUlORk8iCisKK01LRElSUz0ic2ggYGNkICRzcmNkaXIgJiYgcHdkYC9ta2RpcnMuc2giCisKK0lOU1RBTEw9IiRJTlNUQUxMIgorSU5TVEFMTF9EQVRBPSIkSU5TVEFMTF9EQVRBIgorCit0cmFuc2Zvcm09IiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorCitUTVA9XCR7VE1QRElSLS90bXB9L21hblwkXCQKK3RyYXAgInJtIC1mIFwkVE1QIiAwIDEgMiA1IDE1CisKK2Zvcm09XCQxCitzaGlmdCB8fCBleGl0IDEKKwordmVyYj1cJDEKK3NoaWZ0IHx8IGV4aXQgMQorCittYW5kaXI9XCQxCitzaGlmdCB8fCBleGl0IDEKKworc3JjZGlyPVwkMQordG9wX3NyY2Rpcj1cJHNyY2Rpci8uLgorc2hpZnQgfHwgZXhpdCAxCisKK2lmIHRlc3QgIlwkZm9ybSIgPSBub3JtYWwgOyB0aGVuCisJaWYgdGVzdCAiJGNmX2Zvcm1hdCIgPSB5ZXMgOyB0aGVuCisJaWYgdGVzdCAiJGNmX2luYm90aCIgPSBubyA7IHRoZW4KKwkJc2ggXCQwIGZvcm1hdCBcJHZlcmIgXCRtYW5kaXIgXCRzcmNkaXIgXCQqCisJCWV4aXQgJD8KKwlmaQorCWZpCisJY2Zfc3ViZGlyPVwkbWFuZGlyL21hbgorCWNmX3RhYmxlcz0kTUFOUEFHRV9UQkwKK2Vsc2UKKwljZl9zdWJkaXI9XCRtYW5kaXIvY2F0CisJY2ZfdGFibGVzPXllcworZmkKKworIyBwcm9jZXNzIHRoZSBsaXN0IG9mIHNvdXJjZS1maWxlcworZm9yIGkgaW4gXCQqIDsgZG8KK2Nhc2UgXCRpIGluICModmkKKyoub3JpZ3wqLnJlaikgOzsgIyh2aQorKi5bMC05XSopCisJc2VjdGlvbj1cYGV4cHIgIlwkaSIgOiAnLipcXC5cXChbMC05XVxcKVt4bV0qJ1xgOworCWlmIHRlc3QgXCR2ZXJiID0gaW5zdGFsbGluZyA7IHRoZW4KKwlpZiB0ZXN0ICEgLWQgXCRjZl9zdWJkaXJcJHtzZWN0aW9ufSA7IHRoZW4KKwkJXCRNS0RJUlMgXCRjZl9zdWJkaXJcJHNlY3Rpb24KKwlmaQorCWZpCisKKwkjIHJlcGxhY2UgdmFyaWFibGVzIGluIG1hbiBwYWdlCisJaWYgdGVzdCAhIC1mICRjZl9tYW5fYWxpYXMgOyB0aGVuCitjYXQgPj4kY2ZfbWFuX2FsaWFzIDw8LUNGX0VPRjIKKwkJcyxAREFUQURJUkAsXCRkYXRhZGlyLGcKKwkJcyxAVEVSTUlORk9ALFwkVEVSTUlORk8sZworCQlzLEBOQ1VSU0VTX01BSk9SQCxcJE5DVVJTRVNfTUFKT1IsZworCQlzLEBOQ1VSU0VTX01JTk9SQCxcJE5DVVJTRVNfTUlOT1IsZworCQlzLEBOQ1VSU0VTX1BBVENIQCxcJE5DVVJTRVNfUEFUQ0gsZworCQlzLEBOQ1VSU0VTX09TUEVFREAsXCROQ1VSU0VTX09TUEVFRCxnCitDRl9FT0YKKworCWZvciBjZl9uYW1lIGluICBjYXB0b2luZm8gY2xlYXIgaW5mb2NtcCBpbmZvdG9jYXAgdGljIHRvZSB0cHV0CisJZG8KKwkJY2ZfTkFNRT1gZWNobyAiJGNmX25hbWUiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCQljZl9uYW1lPWBlY2hvICRjZl9uYW1lfHNlZCAiJHByb2dyYW1fdHJhbnNmb3JtX25hbWUiYAorY2F0ID4+JGNmX2VkaXRfbWFuIDw8LUNGX0VPRgorCQlzLEAkY2ZfTkFNRUAsJGNmX25hbWUsCitDRl9FT0YKKwlkb25lCisKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorQ0ZfRU9GMgorCQllY2hvICIuLi5tYWRlICRjZl9tYW5fYWxpYXMiCisJZmkKKworCWFsaWFzZXM9CisJY2Zfc291cmNlPVxgYmFzZW5hbWUgXCRpXGAKKwlpbmFsaWFzPVwkY2Zfc291cmNlCisJdGVzdCAhIC1mIFwkaW5hbGlhcyAmJiBpbmFsaWFzPSJcJHNyY2Rpci9cJGluYWxpYXMiCisJaWYgdGVzdCAhIC1mIFwkaW5hbGlhcyA7IHRoZW4KKwkJZWNobyAuLiBza2lwcGVkIFwkY2Zfc291cmNlCisJCWNvbnRpbnVlCisJZmkKK0NGX0VPRgorCitpZiB0ZXN0ICIkTUFOUEFHRV9BTElBU0VTIiAhPSBubyA7IHRoZW4KK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCWFsaWFzZXM9XGBzZWQgLWYgXCR0b3Bfc3JjZGlyL21hbi9tYW5saW5rcy5zZWQgXCRpbmFsaWFzIHxzZWQgLWYgJGNmX21hbl9hbGlhcyB8IHNvcnQgLXVcYAorQ0ZfRU9GCitmaQorCitpZiB0ZXN0ICIkTUFOUEFHRV9SRU5BTUVTIiA9IG5vIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJIyBwZXJmb3JtIHByb2dyYW0gdHJhbnNmb3JtYXRpb25zIGZvciBzZWN0aW9uIDEgbWFuIHBhZ2VzCisJaWYgdGVzdCBcJHNlY3Rpb24gPSAxIDsgdGhlbgorCQljZl90YXJnZXQ9XCRjZl9zdWJkaXJcJHtzZWN0aW9ufS9cYGVjaG8gXCRjZl9zb3VyY2V8c2VkICJcJHt0cmFuc2Zvcm19IlxgCisJZWxzZQorCQljZl90YXJnZXQ9XCRjZl9zdWJkaXJcJHtzZWN0aW9ufS9cJGNmX3NvdXJjZQorCWZpCitDRl9FT0YKK2Vsc2UKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCWNmX3RhcmdldD1cYGdyZXAgIl5cJGNmX3NvdXJjZSIgJE1BTlBBR0VfUkVOQU1FUyB8ICRBV0sgJ3twcmludCBcJDJ9J1xgCisJaWYgdGVzdCAteiAiXCRjZl90YXJnZXQiIDsgdGhlbgorCQllY2hvICc/IG1pc3NpbmcgcmVuYW1lIGZvciAnXCRjZl9zb3VyY2UKKwkJY2ZfdGFyZ2V0PSJcJGNmX3NvdXJjZSIKKwlmaQorCWNmX3RhcmdldD0iXCRjZl9zdWJkaXJcJHtzZWN0aW9ufS9cJHtjZl90YXJnZXR9IgorCitDRl9FT0YKK2ZpCisKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCXNlZAktZiAkY2ZfbWFuX2FsaWFzIFxcCitDRl9FT0YKKworaWYgdGVzdCAtZiAkTUFOUEFHRV9SRU5BTUVTIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJCTwgXCRpIHwgc2VkIC1mIGBwd2RgL2VkaXRfbWFuLnNlZCA+XCRUTVAKK0NGX0VPRgorZWxzZQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJCTwgXCRpID5cJFRNUAorQ0ZfRU9GCitmaQorCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKK2lmIHRlc3QgXCRjZl90YWJsZXMgPSB5ZXMgOyB0aGVuCisJdGJsIFwkVE1QID5cJFRNUC5vdXQKKwltdiBcJFRNUC5vdXQgXCRUTVAKK2ZpCitDRl9FT0YKKworaWYgdGVzdCAkd2l0aF9jdXJzZXNfaCAhPSB5ZXMgOyB0aGVuCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlzZWQgLWUgIi9cI1sgICAgXSppbmNsdWRlL3MsY3Vyc2VzLmgsbmN1cnNlcy5oLCIgPCBcJFRNUCA+XCRUTVAub3V0CisJbXYgXCRUTVAub3V0IFwkVE1QCitDRl9FT0YKK2ZpCisKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCWlmIHRlc3QgXCRmb3JtID0gZm9ybWF0IDsgdGhlbgorCQlucm9mZiAtbWFuIFwkVE1QID5cJFRNUC5vdXQKKwkJbXYgXCRUTVAub3V0IFwkVE1QCisJZmkKK0NGX0VPRgorCitpZiB0ZXN0IC1uICIkY2ZfY29tcHJlc3MiIDsgdGhlbgorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJaWYgdGVzdCBcJHZlcmIgPSBpbnN0YWxsaW5nIDsgdGhlbgorCWlmICggJGNmX2NvbXByZXNzIC1mIFwkVE1QICkKKwl0aGVuCisJCW12IFwkVE1QLiRjZl9zb19zdHJpcCBcJFRNUAorCWZpCisJZmkKKwljZl90YXJnZXQ9IlwkY2ZfdGFyZ2V0LiRjZl9zb19zdHJpcCIKK0NGX0VPRgorZmkKKworY2FzZSAiJE1BTlBBR0VfRk9STUFUIiBpbiAjKHZpCisqQlNESSopCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwlpZiB0ZXN0IFwkZm9ybSA9IGZvcm1hdCA7IHRoZW4KKwkJIyBCU0RJIGluc3RhbGxzIG9ubHkgLjAgc3VmZml4ZXMgaW4gdGhlIGNhdCBkaXJlY3RvcmllcworCQljZl90YXJnZXQ9IlxgZWNobyBcJGNmX3RhcmdldHxzZWQgLWUgJ3MvXC5bMS05XVwrW2Etel0qLy4wLydcYCIKKwlmaQorQ0ZfRU9GCisgIDs7Citlc2FjCisKK2NhdCA+PiRjZl9lZGl0X21hbiA8PENGX0VPRgorCXN1ZmZpeD1cYGJhc2VuYW1lIFwkY2ZfdGFyZ2V0IHwgc2VkIC1lICdzJV5bXi5dKiUlJ1xgCisJaWYgdGVzdCBcJHZlcmIgPSBpbnN0YWxsaW5nIDsgdGhlbgorCQllY2hvIFwkdmVyYiBcJGNmX3RhcmdldAorCQlcJElOU1RBTExfREFUQSBcJFRNUCBcJGNmX3RhcmdldAorCQl0ZXN0IC1kIFwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0gJiYKKwkJdGVzdCAtbiAiXCRhbGlhc2VzIiAmJiAoCisJCQljZCBcJGNmX3N1YmRpclwke3NlY3Rpb259ICYmICgKKwkJCQljZl9zb3VyY2U9XGBlY2hvIFwkY2ZfdGFyZ2V0IHxzZWQgLWUgJ3MlXi4qL1woW14vXVteL10qL1teL11bXi9dKiRcKSVcMSUnXGAKKwkJCQl0ZXN0IC1uICIkY2Zfc29fc3RyaXAiICYmIGNmX3NvdXJjZT1cYGVjaG8gXCRjZl9zb3VyY2UgfHNlZCAtZSAncyVcLiRjZl9zb19zdHJpcFwkJSUnXGAKKwkJCQljZl90YXJnZXQ9XGBiYXNlbmFtZSBcJGNmX3RhcmdldFxgCisJCQkJZm9yIGNmX2FsaWFzIGluIFwkYWxpYXNlcworCQkJCWRvCisJCQkJCWlmIHRlc3QgXCRzZWN0aW9uID0gMSA7IHRoZW4KKwkJCQkJCWNmX2FsaWFzPVxgZWNobyBcJGNmX2FsaWFzfHNlZCAiXCR7dHJhbnNmb3JtfSJcYAorCQkJCQlmaQorCisJCQkJCWlmIHRlc3QgIiRNQU5QQUdFX1NZTUxJTktTIiA9IHllcyA7IHRoZW4KKwkJCQkJCWlmIHRlc3QgLWYgXCRjZl9hbGlhc1wke3N1ZmZpeH0gOyB0aGVuCisJCQkJCQkJaWYgKCBjbXAgLXMgXCRjZl90YXJnZXQgXCRjZl9hbGlhc1wke3N1ZmZpeH0gKQorCQkJCQkJCXRoZW4KKwkJCQkJCQkJY29udGludWUKKwkJCQkJCQlmaQorCQkJCQkJZmkKKwkJCQkJCWVjaG8gLi4gXCR2ZXJiIGFsaWFzIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCQlybSAtZiBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQkJJExOX1MgXCRjZl90YXJnZXQgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJZWxpZiB0ZXN0ICJcJGNmX3RhcmdldCIgIT0gIlwkY2ZfYWxpYXNcJHtzdWZmaXh9IiA7IHRoZW4KKwkJCQkJCWVjaG8gIi5zbyBcJGNmX3NvdXJjZSIgPlwkVE1QCitDRl9FT0YKK2lmIHRlc3QgLW4gIiRjZl9jb21wcmVzcyIgOyB0aGVuCitjYXQgPj4kY2ZfZWRpdF9tYW4gPDxDRl9FT0YKKwkJCQkJCWlmIHRlc3QgLW4gIiRjZl9zb19zdHJpcCIgOyB0aGVuCisJCQkJCQkJJGNmX2NvbXByZXNzIC1mIFwkVE1QCisJCQkJCQkJbXYgXCRUTVAuJGNmX3NvX3N0cmlwIFwkVE1QCisJCQkJCQlmaQorQ0ZfRU9GCitmaQorY2F0ID4+JGNmX2VkaXRfbWFuIDw8Q0ZfRU9GCisJCQkJCQllY2hvIC4uIFwkdmVyYiBhbGlhcyBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQkJcm0gLWYgXCRjZl9hbGlhc1wke3N1ZmZpeH0KKwkJCQkJCVwkSU5TVEFMTF9EQVRBIFwkVE1QIFwkY2ZfYWxpYXNcJHtzdWZmaXh9CisJCQkJCWZpCisJCQkJZG9uZQorCQkJKQorCQkpCisJZWxpZiB0ZXN0IFwkdmVyYiA9IHJlbW92aW5nIDsgdGhlbgorCQl0ZXN0IC1mIFwkY2ZfdGFyZ2V0ICYmICgKKwkJCWVjaG8gXCR2ZXJiIFwkY2ZfdGFyZ2V0CisJCQlybSAtZiBcJGNmX3RhcmdldAorCQkpCisJCXRlc3QgLWQgXCRjZl9zdWJkaXJcJHtzZWN0aW9ufSAmJgorCQl0ZXN0IC1uICJcJGFsaWFzZXMiICYmICgKKwkJCWNkIFwkY2Zfc3ViZGlyXCR7c2VjdGlvbn0gJiYgKAorCQkJCWZvciBjZl9hbGlhcyBpbiBcJGFsaWFzZXMKKwkJCQlkbworCQkJCQlpZiB0ZXN0IFwkc2VjdGlvbiA9IDEgOyB0aGVuCisJCQkJCQljZl9hbGlhcz1cYGVjaG8gXCRjZl9hbGlhc3xzZWQgIlwke3RyYW5zZm9ybX0iXGAKKwkJCQkJZmkKKworCQkJCQllY2hvIC4uIFwkdmVyYiBhbGlhcyBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCQlybSAtZiBcJGNmX2FsaWFzXCR7c3VmZml4fQorCQkJCWRvbmUKKwkJCSkKKwkJKQorCWVsc2UKKyMJCWVjaG8gIi5oeSAwIgorCQljYXQgXCRUTVAKKwlmaQorCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgJGNmX2luYm90aCA9IHllcyA7IHRoZW4KK2lmIHRlc3QgXCRmb3JtICE9IGZvcm1hdCA7IHRoZW4KKwlzaCBcJDAgZm9ybWF0IFwkdmVyYiBcJG1hbmRpciBcJHNyY2RpciBcJCoKK2ZpCitmaQorCitleGl0IDAKK0NGX0VPRgorY2htb2QgNzU1ICRjZl9lZGl0X21hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyBOb3RlIHRoYXQgc29tZSBmdW5jdGlvbnMgKHN1Y2ggYXMgY29uc3QpIGFyZSBub3JtYWxseSBkaXNhYmxlZCBhbnl3YXkuCitlY2hvICIkYXNfbWU6ODkxNjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBmdW5jdGlvbiBleHRlbnNpb25zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBmdW5jdGlvbiBleHRlbnNpb25zLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0LWZ1bmNzIG9yIC0tZGlzYWJsZS1leHQtZnVuY3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZXh0X2Z1bmNzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9leHRfZnVuY3MiCisgIHdpdGhfZXh0X2Z1bmNzPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9leHRfZnVuY3M9eWVzCitmaTsKK2VjaG8gIiRhc19tZTo4OTI2OiByZXN1bHQ6ICR3aXRoX2V4dF9mdW5jcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9leHRfZnVuY3MiID4mNgoraWYgdGVzdCAiJHdpdGhfZXh0X2Z1bmNzIiA9IHllcyA7IHRoZW4KKwlOQ1VSU0VTX0VYVF9GVU5DUz0xCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9DVVJTRVNfVkVSU0lPTiAxCitFT0YKKworCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfSEFTX0tFWSAxCitFT0YKKworCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfUkVTSVpFVEVSTSAxCitFT0YKKworCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfUkVTSVpFX1RFUk0gMQorRU9GCisKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUyAxCitFT0YKKworCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfV1JFU0laRSAxCitFT0YKKworCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVNfRVhUX0ZVTkNTIDEKK0VPRgorCitlbHNlCisJTkNVUlNFU19FWFRfRlVOQ1M9MAorZmkKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1jb25zdCB0byB0dXJuIG9uIHVzZSBvZiBjb25zdCBiZXlvbmQgdGhhdCBpbiBYU0kuCitlY2hvICIkYXNfbWU6ODk2MzogY2hlY2tpbmcgZm9yIGV4dGVuZGVkIHVzZSBvZiBjb25zdCBrZXl3b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGV4dGVuZGVkIHVzZSBvZiBjb25zdCBrZXl3b3JkLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY29uc3Qgb3IgLS1kaXNhYmxlLWNvbnN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NvbnN0K3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9jb25zdCIKKyAgd2l0aF9leHRfY29uc3Q9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2V4dF9jb25zdD1ubworZmk7CitlY2hvICIkYXNfbWU6ODk3MzogcmVzdWx0OiAkd2l0aF9leHRfY29uc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZXh0X2NvbnN0IiA+JjYKK05DVVJTRVNfQ09OU1Q9Jy8qbm90aGluZyovJworaWYgdGVzdCAiJHdpdGhfZXh0X2NvbnN0IiA9IHllcyA7IHRoZW4KKwlOQ1VSU0VTX0NPTlNUPWNvbnN0CitmaQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWV4dC1jb2xvcnMgdG8gdHVybiBvbiB1c2Ugb2YgY29sb3JzIGJleW9uZCAxNi4KK2VjaG8gIiRhc19tZTo4OTgxOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgZXh0ZW5kZWQgY29sb3JzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIGV4dGVuZGVkIGNvbG9ycy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4dC1jb2xvcnMgb3IgLS1kaXNhYmxlLWV4dC1jb2xvcnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZXh0X2NvbG9ycytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZXh0X2NvbG9ycyIKKyAgd2l0aF9leHRfY29sb3JzPSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9leHRfY29sb3JzPW5vCitmaTsKK2VjaG8gIiRhc19tZTo4OTkxOiByZXN1bHQ6ICR3aXRoX2V4dF9jb2xvcnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZXh0X2NvbG9ycyIgPiY2CitOQ1VSU0VTX0VYVF9DT0xPUlM9MAoraWYgdGVzdCAiJHdpdGhfZXh0X2NvbG9ycyIgPSB5ZXMgOyB0aGVuCisJaWYgdGVzdCAiJHdpdGhfd2lkZWMiICE9IHllcyA7IHRoZW4KKwkJeyB7IGVjaG8gIiRhc19tZTo4OTk2OiBlcnJvcjogVGhpcyBvcHRpb24gYXBwbGllcyBvbmx5IHRvIHdpZGUtY2hhcmFjdGVyIGxpYnJhcnkiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogVGhpcyBvcHRpb24gYXBwbGllcyBvbmx5IHRvIHdpZGUtY2hhcmFjdGVyIGxpYnJhcnkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwllbHNlCisJCSMgY2Fubm90IGJlIEFCSSA1IHNpbmNlIGl0IGNoYW5nZXMgc2l6ZW9mKGNjaGFyX3QpCisKK2lmIHRlc3QgIiR7d2l0aF9hYmlfdmVyc2lvbitzZXR9IiAhPSBzZXQ7IHRoZW4KKwljYXNlICRjZl9jdl9yZWxfdmVyc2lvbiBpbgorCTUuKikKKwkJY2ZfY3ZfcmVsX3ZlcnNpb249Ni4wCisJCWNmX2N2X2FiaV92ZXJzaW9uPTYKKwkJeyBlY2hvICIkYXNfbWU6OTAwNzogV0FSTklORzogT3ZlcnJpZGluZyBBQkkgdmVyc2lvbiB0byAkY2ZfY3ZfYWJpX3ZlcnNpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBPdmVycmlkaW5nIEFCSSB2ZXJzaW9uIHRvICRjZl9jdl9hYmlfdmVyc2lvbiIgPiYyO30KKwkJOzsKKwllc2FjCitmaQorCisJZmkKKwlOQ1VSU0VTX0VYVF9DT0xPUlM9MQorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVNfRVhUX0NPTE9SUyAxCitFT0YKKworZmkKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1leHQtbW91c2UgdG8gbW9kaWZ5IGNvZGluZyB0byBzdXBwb3J0IDUtYnV0dG9uIG1pY2UKK2VjaG8gIiRhc19tZTo5MDIyOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgZXh0ZW5kZWQgbW91c2UgZW5jb2RpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgZXh0ZW5kZWQgbW91c2UgZW5jb2RpbmcuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHQtbW91c2Ugb3IgLS1kaXNhYmxlLWV4dC1tb3VzZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9leHRfbW91c2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2V4dF9tb3VzZSIKKyAgd2l0aF9leHRfbW91c2U9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2V4dF9tb3VzZT1ubworZmk7CitlY2hvICIkYXNfbWU6OTAzMjogcmVzdWx0OiAkd2l0aF9leHRfbW91c2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZXh0X21vdXNlIiA+JjYKK05DVVJTRVNfTU9VU0VfVkVSU0lPTj0xCitpZiB0ZXN0ICIkd2l0aF9leHRfbW91c2UiID0geWVzIDsgdGhlbgorCU5DVVJTRVNfTU9VU0VfVkVSU0lPTj0yCisKK2lmIHRlc3QgIiR7d2l0aF9hYmlfdmVyc2lvbitzZXR9IiAhPSBzZXQ7IHRoZW4KKwljYXNlICRjZl9jdl9yZWxfdmVyc2lvbiBpbgorCTUuKikKKwkJY2ZfY3ZfcmVsX3ZlcnNpb249Ni4wCisJCWNmX2N2X2FiaV92ZXJzaW9uPTYKKwkJeyBlY2hvICIkYXNfbWU6OTA0MzogV0FSTklORzogT3ZlcnJpZGluZyBBQkkgdmVyc2lvbiB0byAkY2ZfY3ZfYWJpX3ZlcnNpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBPdmVycmlkaW5nIEFCSSB2ZXJzaW9uIHRvICRjZl9jdl9hYmlfdmVyc2lvbiIgPiYyO30KKwkJOzsKKwllc2FjCitmaQorCitmaQorCitlY2hvICIkYXNfbWU6OTA1MTogY2hlY2tpbmcgaWYgeW91IHdhbnQgXCROQ1VSU0VTX05PX1BBRERJTkcgY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IFwkTkNVUlNFU19OT19QQURESU5HIGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uby1wYWRkaW5nIG9yIC0tZGlzYWJsZS1uby1wYWRkaW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25vX3BhZGRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX25vX3BhZGRpbmciCisgIHdpdGhfbm9fcGFkZGluZz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfbm9fcGFkZGluZz0kd2l0aF9leHRfZnVuY3MKK2ZpOworZWNobyAiJGFzX21lOjkwNjE6IHJlc3VsdDogJHdpdGhfbm9fcGFkZGluZyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9ub19wYWRkaW5nIiA+JjYKK3Rlc3QgIiR3aXRoX25vX3BhZGRpbmciID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVNfTk9fUEFERElORyAxCitFT0YKKworZWNobyAiJGFzX21lOjkwNjc6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTA3MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5MDgxOiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTo5MDg3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTEwOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTEyNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICA6CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTE0OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisgICAgICAgICAgICAgICAgICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisgICAgICAgICAgICAgICAgICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKyAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICAkYWNfbWFpbl9yZXR1cm4oMik7CisgICRhY19tYWluX3JldHVybiAoMCk7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTE3NDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTE3NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTE3OTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjkxODI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK2ZpCitlY2hvICIkYXNfbWU6OTE5NTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFNURENfSEVBREVSUyAxCitFT0YKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KKworZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCisgICAgICAgICAgICAgICAgICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6OTIxMTogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA5MjE3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTIyMzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTIyNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5MjI5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTIzMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo5MjQyOiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK0VPRgorCitmaQorZG9uZQorCitlY2hvICIkYXNfbWU6OTI1MjogY2hlY2tpbmcgZm9yIHNpZ25lZCBjaGFyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNpZ25lZCBjaGFyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX3NpZ25lZF9jaGFyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTI1OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKHNpZ25lZCBjaGFyICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAoc2lnbmVkIGNoYXIpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTI3MzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTI3NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5Mjc5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTI4MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfc2lnbmVkX2NoYXI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X3R5cGVfc2lnbmVkX2NoYXI9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6OTI5MjogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduZWRfY2hhciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaWduZWRfY2hhciIgPiY2CisKK2VjaG8gIiRhc19tZTo5Mjk1OiBjaGVja2luZyBzaXplIG9mIHNpZ25lZCBjaGFyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBzaWduZWQgY2hhci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3NpZ25lZF9jaGFyIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA5MzA0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2ludCBfYXJyYXlfIFsxIC0gMiAqICEoKHNpemVvZiAoc2lnbmVkIGNoYXIpKSA+PSAwKV0KKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTMxNjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTMxOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5MzIyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTMyNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDkzMzAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaW50IF9hcnJheV8gWzEgLSAyICogISgoc2l6ZW9mIChzaWduZWQgY2hhcikpIDw9ICRhY19taWQpXQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5MzQyOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5MzQ1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjkzNDg6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5MzUxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfbG89YGV4cHIgJGFjX21pZCArIDFgOyBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA5MzY3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2ludCBfYXJyYXlfIFsxIC0gMiAqICEoKHNpemVvZiAoc2lnbmVkIGNoYXIpKSA+PSAkYWNfbWlkKV0KKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTM3OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTM4MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTo5Mzg1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTM4ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2hpPWBleHByICRhY19taWQgLSAxYDsgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTQwNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpbnQgX2FycmF5XyBbMSAtIDIgKiAhKChzaXplb2YgKHNpZ25lZCBjaGFyKSkgPD0gJGFjX21pZCldCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjk0MTY6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjk0MTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTQyMjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjk0MjU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSRhY19sbworZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOjk0Mzg6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmciID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTQ0MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworaWYgKCFmKQorICAkYWNfbWFpbl9yZXR1cm4gKDEpOworZnByaW50ZiAoZiwgIiVkIiwgKHNpemVvZiAoc2lnbmVkIGNoYXIpKSk7CitmY2xvc2UgKGYpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjk0NTk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjk0NjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjk0NjQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NDY3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MAorZmkKK2ZpCitlY2hvICIkYXNfbWU6OTQ4MzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2Zfc2lnbmVkX2NoYXIiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBTSVpFT0ZfU0lHTkVEX0NIQVIgJGFjX2N2X3NpemVvZl9zaWduZWRfY2hhcgorRU9GCisKK2lmIHRlc3QgIiRhY19jdl9zaXplb2Zfc2lnbmVkX2NoYXIiID0gMSA7IHRoZW4KKwlOQ1VSU0VTX1NCT09MPSJzaWduZWQgY2hhciIKK2Vsc2UKKwlOQ1VSU0VTX1NCT09MPSJjaGFyIgorZmkKK2VjaG8gIiRhc19tZTo5NDk0OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2Ugc2lnbmVkIEJvb2xlYW4gYXJyYXkgaW4gdGVybS5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdXNlIHNpZ25lZCBCb29sZWFuIGFycmF5IGluIHRlcm0uaC4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpZ25lZC1jaGFyIG9yIC0tZGlzYWJsZS1zaWduZWQtY2hhciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWduZWRfY2hhcitzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfc2lnbmVkX2NoYXIiCisgIHdpdGhfc2lnbmVkX2NoYXI9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3NpZ25lZF9jaGFyPW5vCitmaTsKK2VjaG8gIiRhc19tZTo5NTA0OiByZXN1bHQ6ICR3aXRoX3NpZ25lZF9jaGFyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3NpZ25lZF9jaGFyIiA+JjYKK3Rlc3QgIiR3aXRoX3NpZ25lZF9jaGFyIiAhPSB5ZXMgJiYgTkNVUlNFU19TQk9PTD0iY2hhciIKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1zaWd3aW5jaCB0byB0dXJuIG9uIHVzZSBvZiBTSUdXSU5DSCBsb2dpYworZWNobyAiJGFzX21lOjk1MDk6IGNoZWNraW5nIGlmIHlvdSB3YW50IFNJR1dJTkNIIGhhbmRsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBTSUdXSU5DSCBoYW5kbGVyLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lnd2luY2ggb3IgLS1kaXNhYmxlLXNpZ3dpbmNoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NpZ3dpbmNoK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9zaWd3aW5jaCIKKyAgd2l0aF9zaWd3aW5jaD0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfc2lnd2luY2g9JHdpdGhfZXh0X2Z1bmNzCitmaTsKK2VjaG8gIiRhc19tZTo5NTE5OiByZXN1bHQ6ICR3aXRoX3NpZ3dpbmNoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3NpZ3dpbmNoIiA+JjYKK3Rlc3QgIiR3aXRoX3NpZ3dpbmNoIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfU0lHV0lOQ0ggMQorRU9GCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtdGNhcC1uYW1lcyB0byBhbGxvdyB1c2VyIHRvIGRlZmluZSBuZXcgY2FwYWJpbGl0aWVzCitlY2hvICIkYXNfbWU6OTUyNjogY2hlY2tpbmcgaWYgeW91IHdhbnQgdXNlci1kZWZpbmFibGUgdGVybWluYWwgY2FwYWJpbGl0aWVzIGxpa2UgdGVybWNhcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHVzZXItZGVmaW5hYmxlIHRlcm1pbmFsIGNhcGFiaWxpdGllcyBsaWtlIHRlcm1jYXAuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10Y2FwLW5hbWVzIG9yIC0tZGlzYWJsZS10Y2FwLW5hbWVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3RjYXBfbmFtZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3RjYXBfbmFtZXMiCisgIHdpdGhfdGNhcF9uYW1lcz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfdGNhcF9uYW1lcz0kd2l0aF9leHRfZnVuY3MKK2ZpOworZWNobyAiJGFzX21lOjk1MzY6IHJlc3VsdDogJHdpdGhfdGNhcF9uYW1lcyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF90Y2FwX25hbWVzIiA+JjYKK05DVVJTRVNfWE5BTUVTPTAKK3Rlc3QgIiR3aXRoX3RjYXBfbmFtZXMiID0geWVzICYmIE5DVVJTRVNfWE5BTUVTPTEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGVzZSBvcHRpb25zIGFyZSByZWxhdGl2ZWx5IHNhZmUgdG8gZXhwZXJpbWVudCB3aXRoLgorCitlY2hvICIkYXNfbWU6OTU0NDogY2hlY2tpbmcgaWYgeW91IHdhbnQgYWxsIGRldmVsb3BtZW50IGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBhbGwgZGV2ZWxvcG1lbnQgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZXZlbG9wIG9yIC0td2l0aG91dC1kZXZlbG9wIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZXZlbG9wK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2RldmVsb3AiCisgIHdpdGhfZGV2ZWxvcD0kd2l0aHZhbAorZWxzZQorICB3aXRoX2RldmVsb3A9bm8KK2ZpOworZWNobyAiJGFzX21lOjk1NTQ6IHJlc3VsdDogJHdpdGhfZGV2ZWxvcCIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9kZXZlbG9wIiA+JjYKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1oYXJkLXRhYnMgdG8gdHVybiBvbiB1c2Ugb2YgaGFyZC10YWJzIG9wdGltaXplCitlY2hvICIkYXNfbWU6OTU1ODogY2hlY2tpbmcgaWYgeW91IHdhbnQgaGFyZC10YWJzIGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBoYXJkLXRhYnMgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWhhcmQtdGFicyBvciAtLWRpc2FibGUtaGFyZC10YWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2hhcmRfdGFicytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfaGFyZF90YWJzIgorCitlbHNlCisgIGVuYWJsZV9oYXJkX3RhYnM9JHdpdGhfZGV2ZWxvcAorZmk7CitlY2hvICIkYXNfbWU6OTU2ODogcmVzdWx0OiAkZW5hYmxlX2hhcmRfdGFicyIgPiY1CitlY2hvICIke0VDSE9fVH0kZW5hYmxlX2hhcmRfdGFicyIgPiY2Cit0ZXN0ICIkZW5hYmxlX2hhcmRfdGFicyIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0hBUkRfVEFCUyAxCitFT0YKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS14bWMtZ2xpdGNoIHRvIHR1cm4gb24gdXNlIG9mIG1hZ2ljLWNvb2tpZSBvcHRpbWl6ZQorZWNobyAiJGFzX21lOjk1NzU6IGNoZWNraW5nIGlmIHlvdSB3YW50IGxpbWl0ZWQgc3VwcG9ydCBmb3IgeG1jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgbGltaXRlZCBzdXBwb3J0IGZvciB4bWMuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS14bWMtZ2xpdGNoIG9yIC0tZGlzYWJsZS14bWMtZ2xpdGNoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3htY19nbGl0Y2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3htY19nbGl0Y2giCisKK2Vsc2UKKyAgZW5hYmxlX3htY19nbGl0Y2g9JHdpdGhfZGV2ZWxvcAorZmk7CitlY2hvICIkYXNfbWU6OTU4NTogcmVzdWx0OiAkZW5hYmxlX3htY19nbGl0Y2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV94bWNfZ2xpdGNoIiA+JjYKK3Rlc3QgIiRlbmFibGVfeG1jX2dsaXRjaCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1hNQ19TVVBQT1JUIDEKK0VPRgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZXNlIGFyZSBqdXN0IGV4cGVyaW1lbnRhbCwgcHJvYmFibHkgc2hvdWxkIG5vdCBiZSBpbiBhIHBhY2thZ2U6CisKK2VjaG8gIiRhc19tZTo5NTk0OiBjaGVja2luZyBpZiB5b3UgZG8gbm90IHdhbnQgdG8gYXNzdW1lIGNvbG9ycyBhcmUgd2hpdGUtb24tYmxhY2siID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3UgZG8gbm90IHdhbnQgdG8gYXNzdW1lIGNvbG9ycyBhcmUgd2hpdGUtb24tYmxhY2suLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hc3N1bWVkLWNvbG9yIG9yIC0tZGlzYWJsZS1hc3N1bWVkLWNvbG9yIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Fzc3VtZWRfY29sb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2Fzc3VtZWRfY29sb3IiCisgIHdpdGhfYXNzdW1lZF9jb2xvcj0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfYXNzdW1lZF9jb2xvcj15ZXMKK2ZpOworZWNobyAiJGFzX21lOjk2MDQ6IHJlc3VsdDogJHdpdGhfYXNzdW1lZF9jb2xvciIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9hc3N1bWVkX2NvbG9yIiA+JjYKK3Rlc3QgIiR3aXRoX2Fzc3VtZWRfY29sb3IiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9BU1NVTUVEX0NPTE9SIDEKK0VPRgorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWhhc2htYXAgdG8gdHVybiBvbiB1c2Ugb2YgaGFzaG1hcCBzY3JvbGxpbmcgbG9naWMKK2VjaG8gIiRhc19tZTo5NjExOiBjaGVja2luZyBpZiB5b3Ugd2FudCBoYXNobWFwIHNjcm9sbGluZy1vcHRpbWl6YXRpb24gY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IGhhc2htYXAgc2Nyb2xsaW5nLW9wdGltaXphdGlvbiBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaGFzaG1hcCBvciAtLWRpc2FibGUtaGFzaG1hcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9oYXNobWFwK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9oYXNobWFwIgorICB3aXRoX2hhc2htYXA9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2hhc2htYXA9eWVzCitmaTsKK2VjaG8gIiRhc19tZTo5NjIxOiByZXN1bHQ6ICR3aXRoX2hhc2htYXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfaGFzaG1hcCIgPiY2Cit0ZXN0ICIkd2l0aF9oYXNobWFwIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfSEFTSE1BUCAxCitFT0YKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1jb2xvcmZnYmcgdG8gdHVybiBvbiB1c2Ugb2YgJENPTE9SRkdCRyBlbnZpcm9ubWVudAorZWNobyAiJGFzX21lOjk2Mjg6IGNoZWNraW5nIGlmIHlvdSB3YW50IGNvbG9yZmdiZyBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgY29sb3JmZ2JnIGNvZGUuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb2xvcmZnYmcgb3IgLS1kaXNhYmxlLWNvbG9yZmdiZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jb2xvcmZnYmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2NvbG9yZmdiZyIKKyAgd2l0aF9jb2xvcmZnYmc9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2NvbG9yZmdiZz1ubworZmk7CitlY2hvICIkYXNfbWU6OTYzODogcmVzdWx0OiAkd2l0aF9jb2xvcmZnYmciID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfY29sb3JmZ2JnIiA+JjYKK3Rlc3QgIiR3aXRoX2NvbG9yZmdiZyIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0NPTE9SRkdCRyAxCitFT0YKKworIyBUaGlzIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCAoMjAwODAzMjkpLCBidXQgc2hvdWxkIHVsdGltYXRlbHkgYmUgbW92ZWQgdG8KKyMgdGhlIHNjcmlwdC1ibG9jayAtLXdpdGgtbm9ybWFsLCBldGMuCisKK2VjaG8gIiRhc19tZTo5NjQ3OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggdGhlIHB0aHJlYWQgbGlicmFyeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCB0aGUgcHRocmVhZCBsaWJyYXJ5Li4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXB0aHJlYWQgb3IgLS13aXRob3V0LXB0aHJlYWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3B0aHJlYWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcHRocmVhZCIKKyAgd2l0aF9wdGhyZWFkPSR3aXRodmFsCitlbHNlCisgIHdpdGhfcHRocmVhZD1ubworZmk7CitlY2hvICIkYXNfbWU6OTY1NzogcmVzdWx0OiAkd2l0aF9wdGhyZWFkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3B0aHJlYWQiID4mNgorCitpZiB0ZXN0ICIkd2l0aF9wdGhyZWFkIiAhPSBubyA7IHRoZW4KKyAgICBlY2hvICIkYXNfbWU6OTY2MTogY2hlY2tpbmcgZm9yIHB0aHJlYWQuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwdGhyZWFkLmguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9wdGhyZWFkX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSA5NjY3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjk2NzE6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjk2Nzc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2hlYWRlcl9wdGhyZWFkX2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTo5Njk2OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfcHRocmVhZF9oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfcHRocmVhZF9oIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9wdGhyZWFkX2ggPSB5ZXM7IHRoZW4KKworICAgICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1BUSFJFQURTX0ggMQorRU9GCisKKyAgICAgICAgZWNobyAiJGFzX21lOjk3MDQ6IGNoZWNraW5nIGlmIHdlIGNhbiBsaW5rIHdpdGggdGhlIHB0aHJlYWQgbGlicmFyeSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsaW5rIHdpdGggdGhlIHB0aHJlYWQgbGlicmFyeS4uLiAkRUNIT19DIiA+JjYKKyAgICAgICAgY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iLWxwdGhyZWFkICRMSUJTIgorICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDk3MDkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICAgICAgICBpbnQgcmMgPSBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6OTcyNTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6OTcyODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjk3MzE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5NzM0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgd2l0aF9wdGhyZWFkPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit3aXRoX3B0aHJlYWQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCisgICAgICAgIGVjaG8gIiRhc19tZTo5NzQ0OiByZXN1bHQ6ICR3aXRoX3B0aHJlYWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfcHRocmVhZCIgPiY2CisKKyAgICAgICAgaWYgdGVzdCAiJHdpdGhfcHRocmVhZCIgPSB5ZXMgOyB0aGVuCisgICAgICAgICAgICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCisgICAgICAgICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xJQlBUSFJFQURTIDEKK0VPRgorCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6OTc1NDogZXJyb3I6IENhbm5vdCBsaW5rIHdpdGggcHRocmVhZCBsaWJyYXJ5IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBsaW5rIHdpdGggcHRocmVhZCBsaWJyYXJ5IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIGZpCisKK2ZpCisKK2ZpCisKK2VjaG8gIiRhc19tZTo5NzYzOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2Ugd2Vhay1zeW1ib2xzIGZvciBwdGhyZWFkcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSB3ZWFrLXN5bWJvbHMgZm9yIHB0aHJlYWRzLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2Vhay1zeW1ib2xzIG9yIC0tZGlzYWJsZS13ZWFrLXN5bWJvbHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd2Vha19zeW1ib2xzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV93ZWFrX3N5bWJvbHMiCisgIHVzZV93ZWFrX3N5bWJvbHM9JHdpdGh2YWwKK2Vsc2UKKyAgdXNlX3dlYWtfc3ltYm9scz1ubworZmk7CitlY2hvICIkYXNfbWU6OTc3MzogcmVzdWx0OiAkdXNlX3dlYWtfc3ltYm9scyIgPiY1CitlY2hvICIke0VDSE9fVH0kdXNlX3dlYWtfc3ltYm9scyIgPiY2CitpZiB0ZXN0ICIkdXNlX3dlYWtfc3ltYm9scyIgPSB5ZXMgOyB0aGVuCisKK2VjaG8gIiRhc19tZTo5Nzc3OiBjaGVja2luZyBpZiAkQ0Mgc3VwcG9ydHMgd2VhayBzeW1ib2xzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJENDIHN1cHBvcnRzIHdlYWsgc3ltYm9scy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfd2Vha19zeW1ib2xzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgOTc4NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorIyAgaWYgZGVmaW5lZCBfX1VTRV9JU09DOTkKKyMgICAgZGVmaW5lIF9jYXRfcHJhZ21hKGV4cCkJX1ByYWdtYSgjZXhwKQorIyAgICBkZWZpbmUgX3dlYWtfcHJhZ21hKGV4cCkJX2NhdF9wcmFnbWEod2VhayBuYW1lKQorIyAgZWxzZQorIyAgICBkZWZpbmUgX3dlYWtfcHJhZ21hKGV4cCkKKyMgIGVuZGlmCisjICBkZWZpbmUgX2RlY2xhcmUobmFtZSkJX19leHRlbnNpb25fXyBleHRlcm4gX190eXBlb2ZfXyhuYW1lKSBuYW1lCisjICBkZWZpbmUgd2Vha19zeW1ib2wobmFtZSkJX3dlYWtfcHJhZ21hKG5hbWUpIF9kZWNsYXJlKG5hbWUpIF9fYXR0cmlidXRlX18oKHdlYWspKQorI2VuZGlmCisKK3dlYWtfc3ltYm9sKGZvcGVuKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTo5ODEwOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5ODEzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjk4MTY6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTo5ODE5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3Zfd2Vha19zeW1ib2xzPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl93ZWFrX3N5bWJvbHM9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZTo5ODMwOiByZXN1bHQ6ICRjZl9jdl93ZWFrX3N5bWJvbHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3dlYWtfc3ltYm9scyIgPiY2CisKK2Vsc2UKKyAgICBjZl9jdl93ZWFrX3N5bWJvbHM9bm8KK2ZpCisKK2lmIHRlc3QgJGNmX2N2X3dlYWtfc3ltYm9scyA9IHllcyA7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfV0VBS19TWU1CT0xTIDEKK0VPRgorCitmaQorCitQVEhSRUFEPQoraWYgdGVzdCAiJHdpdGhfcHRocmVhZCIgPSAieWVzIiA7IHRoZW4KKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfUFRIUkVBRFMgMQorRU9GCisKKyAgICBlbmFibGVfcmVlbnRyYW50PXllcworICAgIGlmIHRlc3QgJGNmX2N2X3dlYWtfc3ltYm9scyA9IHllcyA7IHRoZW4KKyAgICAgICAgUFRIUkVBRD0tbHB0aHJlYWQKKyAgICBmaQorZmkKKworIyBSZWVudHJhbnQgY29kZSBoYXMgdG8gYmUgb3BhcXVlOyB0aGVyZSdzIGxpdHRsZSBhZHZhbnRhZ2UgdG8gbWFraW5nIG5jdXJzZXMKKyMgb3BhcXVlIG91dHNpZGUgb2YgdGhhdCwgc28gdGhlcmUgaXMgbm8gLS1lbmFibGUtb3BhcXVlIG9wdGlvbi4gIFdlIGNhbiB1c2UKKyMgdGhpcyBvcHRpb24gd2l0aG91dCAtLXdpdGgtcHRocmVhZHMsIGJ1dCB0aGlzIHdpbGwgYmUgYWx3YXlzIHNldCBmb3IKKyMgcHRocmVhZHMuCitlY2hvICIkYXNfbWU6OTg2MDogY2hlY2tpbmcgaWYgeW91IHdhbnQgZXhwZXJpbWVudGFsIHJlZW50cmFudCBjb2RlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgZXhwZXJpbWVudGFsIHJlZW50cmFudCBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVlbnRyYW50IG9yIC0tZGlzYWJsZS1yZWVudHJhbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVlbnRyYW50K3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9yZWVudHJhbnQiCisgIHdpdGhfcmVlbnRyYW50PSRlbmFibGV2YWwKK2Vsc2UKKyAgd2l0aF9yZWVudHJhbnQ9bm8KK2ZpOworZWNobyAiJGFzX21lOjk4NzA6IHJlc3VsdDogJHdpdGhfcmVlbnRyYW50IiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX3JlZW50cmFudCIgPiY2CitpZiB0ZXN0ICIkd2l0aF9yZWVudHJhbnQiID0geWVzIDsgdGhlbgorCWNmX2N2X2VuYWJsZV9yZWVudHJhbnQ9MQorCWNmX2N2X2VuYWJsZV9vcGFxdWU9Ik5DVVJTRVNfSU5URVJOQUxTIgorCU5DVVJTRVNfT1BBUVVFPTEKKwlOQ1VSU0VTX1NJWkVfVD1pbnQKKyAgICBpZiB0ZXN0ICRjZl9jdl93ZWFrX3N5bWJvbHMgPSB5ZXMgOyB0aGVuCisKKyMgcmVtb3ZlIHB0aHJlYWQgbGlicmFyeSBmcm9tICRMSUJTCitMSUJTPWBlY2hvICIkTElCUyIgfCBzZWQgLWUgJ3MvLWxwdGhyZWFkWyAJXS8vZycgLWUgJ3MvLWxwdGhyZWFkJC8vJ2AKKworICAgIGVsc2UKKyAgICAgICAgTElCX1NVRkZJWD0idCR7TElCX1NVRkZJWH0iCisgICAgZmkKKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfUkVFTlRSQU5UIDEKK0VPRgorCitpZiB0ZXN0ICIke3dpdGhfYWJpX3ZlcnNpb24rc2V0fSIgIT0gc2V0OyB0aGVuCisJY2FzZSAkY2ZfY3ZfcmVsX3ZlcnNpb24gaW4KKwk1LiopCisJCWNmX2N2X3JlbF92ZXJzaW9uPTYuMAorCQljZl9jdl9hYmlfdmVyc2lvbj02CisJCXsgZWNobyAiJGFzX21lOjk4OTQ6IFdBUk5JTkc6IE92ZXJyaWRpbmcgQUJJIHZlcnNpb24gdG8gJGNmX2N2X2FiaV92ZXJzaW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogT3ZlcnJpZGluZyBBQkkgdmVyc2lvbiB0byAkY2ZfY3ZfYWJpX3ZlcnNpb24iID4mMjt9CisJCTs7CisJZXNhYworZmkKKworZWxzZQorCWNmX2N2X2VuYWJsZV9yZWVudHJhbnQ9MAorCWNmX2N2X2VuYWJsZV9vcGFxdWU9Ik5DVVJTRVNfT1BBUVVFIgorCU5DVVJTRVNfT1BBUVVFPTAKKwlOQ1VSU0VTX1NJWkVfVD1zaG9ydAorZmkKKworZWNobyAiJGFzX21lOjk5MDc6IGNoZWNraW5nIGlmIHlvdSB3YW50IGV4cGVyaW1lbnRhbCBzYWZlLXNwcmludGYgY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IGV4cGVyaW1lbnRhbCBzYWZlLXNwcmludGYgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNhZmUtc3ByaW50ZiBvciAtLWRpc2FibGUtc2FmZS1zcHJpbnRmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NhZmVfc3ByaW50ZitzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfc2FmZV9zcHJpbnRmIgorICB3aXRoX3NhZmVfc3ByaW50Zj0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfc2FmZV9zcHJpbnRmPW5vCitmaTsKK2VjaG8gIiRhc19tZTo5OTE3OiByZXN1bHQ6ICR3aXRoX3NhZmVfc3ByaW50ZiIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF9zYWZlX3NwcmludGYiID4mNgordGVzdCAiJHdpdGhfc2FmZV9zcHJpbnRmIiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfU0FGRV9TUFJJTlRGIDEKK0VPRgorCisjIyMgICB1c2Ugb3B0aW9uIC0tZGlzYWJsZS1zY3JvbGwtaGludHMgdG8gdHVybiBvZmYgdXNlIG9mIHNjcm9sbC1oaW50cyBzY3JvbGxpbmcgbG9naWMKKyMgd2hlbiBoYXNobWFwIGlzIHVzZWQgc2Nyb2xsIGhpbnRzIGFyZSB1c2VsZXNzCitpZiB0ZXN0ICIkd2l0aF9oYXNobWFwIiA9IG5vIDsgdGhlbgorZWNobyAiJGFzX21lOjk5MjY6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aG91dCBzY3JvbGxpbmctaGludHMgY29kZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aG91dCBzY3JvbGxpbmctaGludHMgY29kZS4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNjcm9sbC1oaW50cyBvciAtLWRpc2FibGUtc2Nyb2xsLWhpbnRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Njcm9sbF9oaW50cytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfc2Nyb2xsX2hpbnRzIgorICB3aXRoX3Njcm9sbF9oaW50cz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfc2Nyb2xsX2hpbnRzPXllcworZmk7CitlY2hvICIkYXNfbWU6OTkzNjogcmVzdWx0OiAkd2l0aF9zY3JvbGxfaGludHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfc2Nyb2xsX2hpbnRzIiA+JjYKK3Rlc3QgIiR3aXRoX3Njcm9sbF9oaW50cyIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX1NDUk9MTF9ISU5UUyAxCitFT0YKKworZmkKKworZWNobyAiJGFzX21lOjk5NDQ6IGNoZWNraW5nIGlmIHlvdSB3YW50IGV4cGVyaW1lbnRhbCB3Z2V0Y2gtZXZlbnRzIGNvZGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgd2dldGNoLWV2ZW50cyBjb2RlLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2dldGNoLWV2ZW50cyBvciAtLWRpc2FibGUtd2dldGNoLWV2ZW50cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV93Z2V0Y2hfZXZlbnRzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV93Z2V0Y2hfZXZlbnRzIgorICB3aXRoX3dnZXRjaF9ldmVudHM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX3dnZXRjaF9ldmVudHM9bm8KK2ZpOworZWNobyAiJGFzX21lOjk5NTQ6IHJlc3VsdDogJHdpdGhfd2dldGNoX2V2ZW50cyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF93Z2V0Y2hfZXZlbnRzIiA+JjYKK3Rlc3QgIiR3aXRoX3dnZXRjaF9ldmVudHMiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5DVVJTRVNfV0dFVENIX0VWRU5UUyAxCitFT0YKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtZWNobyB0byBzdXBwcmVzcyBmdWxsIGRpc3BsYXkgY29tcGlsaW5nIGNvbW1hbmRzCitlY2hvICIkYXNfbWU6OTk2MzogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBmdWxsIGNvbW1hbmRzIGR1cmluZyBidWlsZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgZnVsbCBjb21tYW5kcyBkdXJpbmcgYnVpbGQuLi4gJEVDSE9fQyIgPiY2CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lY2hvIG9yIC0tZGlzYWJsZS1lY2hvIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2VjaG8rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2VjaG8iCisgIHdpdGhfZWNobz0kZW5hYmxldmFsCitlbHNlCisgIHdpdGhfZWNobz15ZXMKK2ZpOworaWYgdGVzdCAiJHdpdGhfZWNobyIgPSB5ZXM7IHRoZW4KKwlFQ0hPX0xJTks9CitlbHNlCisJRUNIT19MSU5LPSdAIGVjaG8gbGlua2luZyAkQCAuLi4gOycKKwl0ZXN0IC1uICIkTElCVE9PTCIgJiYgTElCVE9PTD0iJExJQlRPT0wgLS1zaWxlbnQiCisJdGVzdCAtbiAiJExJQlRPT0xfQ1hYIiAmJiBMSUJUT09MX0NYWD0iJExJQlRPT0xfQ1hYIC0tc2lsZW50IgorZmkKK2VjaG8gIiRhc19tZTo5OTgwOiByZXN1bHQ6ICR3aXRoX2VjaG8iID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfZWNobyIgPiY2CisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLXdhcm5pbmdzIHRvIHR1cm4gb24gYWxsIGdjYyB3YXJuaW5ncworZWNobyAiJGFzX21lOjk5ODQ6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHNlZSBjb21waWxlciB3YXJuaW5ncyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHNlZSBjb21waWxlciB3YXJuaW5ncy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdhcm5pbmdzIG9yIC0tZGlzYWJsZS13YXJuaW5ncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV93YXJuaW5ncytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfd2FybmluZ3MiCisgIHdpdGhfd2FybmluZ3M9JGVuYWJsZXZhbAorZmk7CitlY2hvICIkYXNfbWU6OTk5MjogcmVzdWx0OiAkd2l0aF93YXJuaW5ncyIgPiY1CitlY2hvICIke0VDSE9fVH0kd2l0aF93YXJuaW5ncyIgPiY2CisKK2lmIHRlc3QgIngkd2l0aF93YXJuaW5ncyIgPSAieHllcyI7IHRoZW4KKyAJQURBRkxBR1M9IiRBREFGTEFHUyAtZ25hdGciCisKK0lOVEVMX0NPTVBJTEVSPW5vCisKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4KKwlsaW51eCp8Z251KikKKwkJZWNobyAiJGFzX21lOjEwMDAzOiBjaGVja2luZyBpZiB0aGlzIGlzIHJlYWxseSBJbnRlbCBDIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKKwkJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJCUNGTEFHUz0iJENGTEFHUyAtbm8tZ2NjIgorCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEwMDA4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAwMjU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMDI4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMDMxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAwMzQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBJTlRFTF9DT01QSUxFUj15ZXMKK2NmX3NhdmVfQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgLXdlMTQ3IC1uby1nY2MiCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkJZWNobyAiJGFzX21lOjEwMDQ1OiByZXN1bHQ6ICRJTlRFTF9DT01QSUxFUiIgPiY1CitlY2hvICIke0VDSE9fVH0kSU5URUxfQ09NUElMRVIiID4mNgorCQk7OworCWVzYWMKK2ZpCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDEwMDUyICIke2FzX21lLWNvbmZpZ3VyZX0iCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7IHJldHVybiAoYXJndlthcmdjLTFdID09IDApIDsgfQorRU9GCisKK2lmIHRlc3QgIiRJTlRFTF9DT01QSUxFUiIgPSB5ZXMKK3RoZW4KKyMgVGhlICItd2RYWFgiIG9wdGlvbnMgc3VwcHJlc3Mgd2FybmluZ3M6CisjIHJlbWFyayAjMTQxOTogZXh0ZXJuYWwgZGVjbGFyYXRpb24gaW4gcHJpbWFyeSBzb3VyY2UgZmlsZQorIyByZW1hcmsgIzE2ODI6IGltcGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4MzogZXhwbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjg0OiBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBzYW1lLXNpemVkIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE5MzogemVybyB1c2VkIGZvciB1bmRlZmluZWQgcHJlcHJvY2Vzc2luZyBpZGVudGlmaWVyCisjIHJlbWFyayAjNTkzOiB2YXJpYWJsZSAiY3Vyc19zYl9sZWZ0X2Fycm93IiB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCisjIHJlbWFyayAjODEwOiBjb252ZXJzaW9uIGZyb20gImludCIgdG8gIkRpbWVuc2lvbj17dW5zaWduZWQgc2hvcnR9IiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzCisjIHJlbWFyayAjODY5OiBwYXJhbWV0ZXIgInR3IiB3YXMgbmV2ZXIgcmVmZXJlbmNlZAorIyByZW1hcmsgIzk4MTogb3BlcmFuZHMgYXJlIGV2YWx1YXRlZCBpbiB1bnNwZWNpZmllZCBvcmRlcgorIyB3YXJuaW5nICMyNjk6IGludmFsaWQgZm9ybWF0IHN0cmluZyBjb252ZXJzaW9uCisKKwl7IGVjaG8gIiRhc19tZToxMDA3MDogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNQorZWNobyAiJGFzX21lOiBjaGVja2luZyBmb3IgJENDIHdhcm5pbmcgb3B0aW9ucy4uLiIgPiY2O30KKwljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlFWFRSQV9DRkxBR1M9Ii1XYWxsIgorCWZvciBjZl9vcHQgaW4gXAorCQl3ZDE0MTkgXAorCQl3ZDE2ODIgXAorCQl3ZDE2ODMgXAorCQl3ZDE2ODQgXAorCQl3ZDE5MyBcCisJCXdkMjc5IFwKKwkJd2Q1OTMgXAorCQl3ZDgxMCBcCisJCXdkODY5IFwKKwkJd2Q5ODEKKwlkbworCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDA4NzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAwOTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhc19tZToxMDA5MjogcmVzdWx0OiAuLi4gLSRjZl9vcHQiID4mNQorZWNobyAiJHtFQ0hPX1R9Li4uIC0kY2Zfb3B0IiA+JjYKKwkJCUVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisKK2VsaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KKwl7IGVjaG8gIiRhc19tZToxMDEwMTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMuLi4iID4mNQorZWNobyAiJGFzX21lOiBjaGVja2luZyBmb3IgJENDIHdhcm5pbmcgb3B0aW9ucy4uLiIgPiY2O30KKwljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlFWFRSQV9DRkxBR1M9Ii1XIC1XYWxsIgorCWNmX3dhcm5fQ09OU1Q9IiIKKwl0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzICYmIGNmX3dhcm5fQ09OU1Q9Ild3cml0ZS1zdHJpbmdzIgorCWZvciBjZl9vcHQgaW4gXAorCQlXYmFkLWZ1bmN0aW9uLWNhc3QgXAorCQlXY2FzdC1hbGlnbiBcCisJCVdjYXN0LXF1YWwgXAorCQlXaW5saW5lIFwKKwkJV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKwkJV21pc3NpbmctcHJvdG90eXBlcyBcCisJCVduZXN0ZWQtZXh0ZXJucyBcCisJCVdwb2ludGVyLWFyaXRoIFwKKwkJV3NoYWRvdyBcCisJCVdzdHJpY3QtcHJvdG90eXBlcyBcCisJCVd1bmRlZiAkY2Zfd2Fybl9DT05TVCBXZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IFdleHRyYSBXbm8tdW5rbm93bi1wcmFnbWFzIFdzd2l0Y2gtZW51bQorCWRvCisJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTICRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMTIxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDEyNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiJGFzX21lOjEwMTI2OiByZXN1bHQ6IC4uLiAtJGNmX29wdCIgPiY1CitlY2hvICIke0VDSE9fVH0uLi4gLSRjZl9vcHQiID4mNgorCQkJY2FzZSAkY2Zfb3B0IGluICModmkKKwkJCVdjYXN0LXF1YWwpICModmkKKwkJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1EWFRTVFJJTkdERUZJTkVTIgorCQkJCTs7CisJCQlXaW5saW5lKSAjKHZpCisJCQkJY2FzZSAkR0NDX1ZFUlNJT04gaW4KKwkJCQlbMzRdLiopCisJCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJZmVhdHVyZSBpcyBicm9rZW4gaW4gZ2NjICRHQ0NfVkVSU0lPTiIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTAxMzc6IHRlc3RpbmcgZmVhdHVyZSBpcyBicm9rZW4gaW4gZ2NjICRHQ0NfVkVSU0lPTiAuLi4iIDE+JjUKKworCQkJCQljb250aW51ZTs7CisJCQkJZXNhYworCQkJCTs7CisJCQllc2FjCisJCQlFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWZpCisJZG9uZQorCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisJaWYgdGVzdCAiJGNmX3dpdGhfY3h4IiA9IHllcyA7IHRoZW4KKworSU5URUxfQ1BMVVNQTFVTPW5vCisKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4KKwlsaW51eCp8Z251KikKKwkJZWNobyAiJGFzX21lOjEwMTU3OiBjaGVja2luZyBpZiB0aGlzIGlzIHJlYWxseSBJbnRlbCBDKysgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGlzIGlzIHJlYWxseSBJbnRlbCBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CisJCWNmX3NhdmVfQ0ZMQUdTPSIkQ1hYRkxBR1MiCisJCUNYWEZMQUdTPSIkQ1hYRkxBR1MgLW5vLWdjYyIKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDE2MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorI2Vsc2UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMTc5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDE4MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMDE4NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMTg4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgSU5URUxfQ1BMVVNQTFVTPXllcworY2Zfc2F2ZV9DRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyAtd2UxNDcgLW5vLWdjYyIKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCisJCWVjaG8gIiRhc19tZToxMDE5OTogcmVzdWx0OiAkSU5URUxfQ1BMVVNQTFVTIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRJTlRFTF9DUExVU1BMVVMiID4mNgorCQk7OworCWVzYWMKK2ZpCisKK2FjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMDIxMyAiY29uZmlndXJlIgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeyByZXR1cm4gKGFyZ3ZbYXJnYy0xXSA9PSAwKSA7IH0KK0VPRgorCitpZiB0ZXN0ICIkSU5URUxfQ1BMVVNQTFVTIiA9IHllcwordGhlbgorIyBUaGUgIi13ZFhYWCIgb3B0aW9ucyBzdXBwcmVzcyB3YXJuaW5nczoKKyMgcmVtYXJrICMxNDE5OiBleHRlcm5hbCBkZWNsYXJhdGlvbiBpbiBwcmltYXJ5IHNvdXJjZSBmaWxlCisjIHJlbWFyayAjMTY4MjogaW1wbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjgzOiBleHBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODQ6IGNvbnZlcnNpb24gZnJvbSBwb2ludGVyIHRvIHNhbWUtc2l6ZWQgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTkzOiB6ZXJvIHVzZWQgZm9yIHVuZGVmaW5lZCBwcmVwcm9jZXNzaW5nIGlkZW50aWZpZXIKKyMgcmVtYXJrICM1OTM6IHZhcmlhYmxlICJjdXJzX3NiX2xlZnRfYXJyb3ciIHdhcyBzZXQgYnV0IG5ldmVyIHVzZWQKKyMgcmVtYXJrICM4MTA6IGNvbnZlcnNpb24gZnJvbSAiaW50IiB0byAiRGltZW5zaW9uPXt1bnNpZ25lZCBzaG9ydH0iIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMKKyMgcmVtYXJrICM4Njk6IHBhcmFtZXRlciAidHciIHdhcyBuZXZlciByZWZlcmVuY2VkCisjIHJlbWFyayAjOTgxOiBvcGVyYW5kcyBhcmUgZXZhbHVhdGVkIGluIHVuc3BlY2lmaWVkIG9yZGVyCisjIHdhcm5pbmcgIzI2OTogaW52YWxpZCBmb3JtYXQgc3RyaW5nIGNvbnZlcnNpb24KKworCXsgZWNobyAiJGFzX21lOjEwMjMxOiBjaGVja2luZyBmb3IgJENDIHdhcm5pbmcgb3B0aW9ucy4uLiIgPiY1CitlY2hvICIkYXNfbWU6IGNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zLi4uIiA+JjY7fQorCWNmX3NhdmVfQ1hYRkxBR1M9IiRDWFhGTEFHUyIKKwlFWFRSQV9DWFhGTEFHUz0iLVdhbGwiCisJZm9yIGNmX29wdCBpbiBcCisJCXdkMTQxOSBcCisJCXdkMTY4MiBcCisJCXdkMTY4MyBcCisJCXdkMTY4NCBcCisJCXdkMTkzIFwKKwkJd2QyNzkgXAorCQl3ZDU5MyBcCisJCXdkODEwIFwKKwkJd2Q4NjkgXAorCQl3ZDk4MQorCWRvCisJCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyAkRVhUUkFfQ1hYRkxBR1MgLSRjZl9vcHQiCisJCWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwMjQ4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDI1MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiJGFzX21lOjEwMjUzOiByZXN1bHQ6IC4uLiAtJGNmX29wdCIgPiY1CitlY2hvICIke0VDSE9fVH0uLi4gLSRjZl9vcHQiID4mNgorCQkJRVhUUkFfQ1hYRkxBR1M9IiRFWFRSQV9DWFhGTEFHUyAtJGNmX29wdCIKKwkJZmkKKwlkb25lCisJQ1hYRkxBR1M9IiRjZl9zYXZlX0NYWEZMQUdTIgorCitlbGlmIHRlc3QgIiRHWFgiID0geWVzCit0aGVuCisJeyBlY2hvICIkYXNfbWU6MTAyNjI6IGNoZWNraW5nIGZvciAkQ1hYIHdhcm5pbmcgb3B0aW9ucy4uLiIgPiY1CitlY2hvICIkYXNfbWU6IGNoZWNraW5nIGZvciAkQ1hYIHdhcm5pbmcgb3B0aW9ucy4uLiIgPiY2O30KKwljZl9zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCisJRVhUUkFfQ1hYRkxBR1M9Ii1XIC1XYWxsIgorCWNmX2d4eF9leHRyYV93YXJuaW5ncz0iIgorCXRlc3QgIiR3aXRoX2V4dF9jb25zdCIgPSB5ZXMgJiYgY2ZfZ3h4X2V4dHJhX3dhcm5pbmdzPSJXd3JpdGUtc3RyaW5ncyIKKwljYXNlICIkR0NDX1ZFUlNJT04iIGluCisJWzEtMl0uKikKKwkJOzsKKwkqKQorCQljZl9neHhfZXh0cmFfd2FybmluZ3M9IiRjZl9neHhfZXh0cmFfd2FybmluZ3MgV2VmZmMrKyIKKwkJOzsKKwllc2FjCisJZm9yIGNmX29wdCBpbiBcCisJCVdhYmkgXAorCQlmYWJpLXZlcnNpb249MCBcCisJCVdvdmVybG9hZGVkLXZpcnR1YWwgXAorCQlXc2lnbi1wcm9tbyBcCisJCVdzeW50aCBcCisJCVdvbGQtc3R5bGUtY2FzdCBcCisJCVdjYXN0LWFsaWduIFwKKwkJV2Nhc3QtcXVhbCBcCisJCVdtaXNzaW5nLXByb3RvdHlwZXMgXAorCQlXcG9pbnRlci1hcml0aCBcCisJCVdzaGFkb3cgXAorCQlXc3RyaWN0LXByb3RvdHlwZXMgXAorCQlXdW5kZWYgJGNmX2d4eF9leHRyYV93YXJuaW5ncyBXbm8tdW51c2VkCisJZG8KKwkJQ1hYRkxBR1M9IiRjZl9zYXZlX0NYWEZMQUdTICRFWFRSQV9DWFhGTEFHUyAtV2Vycm9yIC0kY2Zfb3B0IgorCQlpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDI5MTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTAyOTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhc19tZToxMDI5NjogcmVzdWx0OiAuLi4gLSRjZl9vcHQiID4mNQorZWNobyAiJHtFQ0hPX1R9Li4uIC0kY2Zfb3B0IiA+JjYKKwkJCUVYVFJBX0NYWEZMQUdTPSIkRVhUUkFfQ1hYRkxBR1MgLSRjZl9vcHQiCisJCWVsc2UKKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIkYXNfbWU6MTAzMDA6IHJlc3VsdDogLi4uIG5vIC0kY2Zfb3B0IiA+JjUKK2VjaG8gIiR7RUNIT19UfS4uLiBubyAtJGNmX29wdCIgPiY2CisJCWZpCisJZG9uZQorCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyIKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0KgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKKwlmaQorZmkKKworaWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KK2NhdCA+IGNvbmZ0ZXN0LmkgPDxFT0YKKyNpZm5kZWYgR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GIDAKKyNlbmRpZgorI2lmbmRlZiBHQ0NfTk9SRVRVUk4KKyNkZWZpbmUgR0NDX05PUkVUVVJOIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorI2lmbmRlZiBHQ0NfVU5VU0VECisjZGVmaW5lIEdDQ19VTlVTRUQgLyogbm90aGluZyAqLworI2VuZGlmCitFT0YKK2lmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJeyBlY2hvICIkYXNfbWU6MTAzMzY6IGNoZWNraW5nIGZvciAkQ0MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzLi4uIiA+JjUKK2VjaG8gIiRhc19tZTogY2hlY2tpbmcgZm9yICRDQyBfX2F0dHJpYnV0ZV9fIGRpcmVjdGl2ZXMuLi4iID4mNjt9CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMDMzOSAiJHthc19tZS1jb25maWd1cmV9IgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSAiY29uZnRlc3QuaCIKKyNpbmNsdWRlICJjb25mdGVzdC5pIgorI2lmCUdDQ19QUklOVEYKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSAvKm5vdGhpbmcqLworI2VuZGlmCisjaWYJR0NDX1NDQU5GCisjZGVmaW5lIEdDQ19TQ0FORkxJS0UoZm10LHZhcikgIF9fYXR0cmlidXRlX18oKGZvcm1hdChzY2FuZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICAvKm5vdGhpbmcqLworI2VuZGlmCitleHRlcm4gdm9pZCB3b3coY2hhciAqLC4uLikgR0NDX1NDQU5GTElLRSgxLDIpOworZXh0ZXJuIHZvaWQgb29wcyhjaGFyICosLi4uKSBHQ0NfUFJJTlRGTElLRSgxLDIpIEdDQ19OT1JFVFVSTjsKK2V4dGVybiB2b2lkIGZvbyh2b2lkKSBHQ0NfTk9SRVRVUk47CitpbnQgbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W10gR0NDX1VOVVNFRCkgeyByZXR1cm4gMDsgfQorRU9GCisJZm9yIGNmX2F0dHJpYnV0ZSBpbiBzY2FuZiBwcmludGYgdW51c2VkIG5vcmV0dXJuCisJZG8KKworY2ZfQVRUUklCVVRFPWBlY2hvICIkY2ZfYXR0cmlidXRlIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworCQljZl9kaXJlY3RpdmU9Il9fYXR0cmlidXRlX18oKCRjZl9hdHRyaWJ1dGUpKSIKKwkJZWNobyAiY2hlY2tpbmcgZm9yICRDQyAkY2ZfZGlyZWN0aXZlIiAxPiY1CisJCWNhc2UgJGNmX2F0dHJpYnV0ZSBpbgorCQlzY2FuZnxwcmludGYpCisJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAxCitFT0YKKwkJCTs7CisJCSopCisJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAkY2ZfZGlyZWN0aXZlCitFT0YKKwkJCTs7CisJCWVzYWMKKwkJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTAzNzc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwMzgwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIkYXNfbWU6MTAzODI6IHJlc3VsdDogLi4uICRjZl9hdHRyaWJ1dGUiID4mNQorZWNobyAiJHtFQ0hPX1R9Li4uICRjZl9hdHRyaWJ1dGUiID4mNgorCQkJY2F0IGNvbmZ0ZXN0LmggPj5jb25mZGVmcy5oCisJCWZpCisJZG9uZQorZWxzZQorCWZncmVwIGRlZmluZSBjb25mdGVzdC5pID4+Y29uZmRlZnMuaAorZmkKK3JtIC1yZiBjb25mdGVzdCoKK2ZpCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWFzc2VydGlvbnMgdG8gdHVybiBvbiBnZW5lcmF0aW9uIG9mIGFzc2VydGlvbiBjb2RlCitlY2hvICIkYXNfbWU6MTAzOTQ6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBydW50aW1lIGFzc2VydGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBlbmFibGUgcnVudGltZSBhc3NlcnRpb25zLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXNzZXJ0aW9ucyBvciAtLWRpc2FibGUtYXNzZXJ0aW9ucyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hc3NlcnRpb25zK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9hc3NlcnRpb25zIgorICB3aXRoX2Fzc2VydGlvbnM9JGVuYWJsZXZhbAorZWxzZQorICB3aXRoX2Fzc2VydGlvbnM9bm8KK2ZpOworZWNobyAiJGFzX21lOjEwNDA0OiByZXN1bHQ6ICR3aXRoX2Fzc2VydGlvbnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JHdpdGhfYXNzZXJ0aW9ucyIgPiY2CitpZiB0ZXN0IC1uICIkR0NDIgordGhlbgorCWlmIHRlc3QgIiR3aXRoX2Fzc2VydGlvbnMiID0gbm8KKwl0aGVuCisJCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5ERUJVRyAxCitFT0YKKworCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1ETkRFQlVHIgorCWVsc2UKKwkJQURBRkxBR1M9IiRBREFGTEFHUyAtZ25hdGEiCisJZmkKK2ZpCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1sZWFrcyB0byBzdXBwcmVzcyAicGVybWFuZW50IiBsZWFrcywgZm9yIHRlc3RpbmcKKworZWNobyAiJGFzX21lOjEwNDIyOiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byB1c2UgZG1hbGxvYyBmb3IgdGVzdGluZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSBkbWFsbG9jIGZvciB0ZXN0aW5nLi4uICRFQ0hPX0MiID4mNgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRtYWxsb2Mgb3IgLS13aXRob3V0LWRtYWxsb2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZG1hbGxvYyIKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX0RNQUxMT0MgMQorRU9GCisKKwk6ICR7d2l0aF9jZmxhZ3M6PS1nfQorCTogJHt3aXRoX25vX2xlYWtzOj15ZXN9CisJIHdpdGhfZG1hbGxvYz15ZXMKK2Vsc2UKKyAgd2l0aF9kbWFsbG9jPQorZmk7CitlY2hvICIkYXNfbWU6MTA0Mzg6IHJlc3VsdDogJHt3aXRoX2RtYWxsb2M6LW5vfSIgPiY1CitlY2hvICIke0VDSE9fVH0ke3dpdGhfZG1hbGxvYzotbm99IiA+JjYKKworY2FzZSAuJHdpdGhfY2ZsYWdzIGluICModmkKKy4qLWcqKQorCWNhc2UgLiRDRkxBR1MgaW4gIyh2aQorCS4qLWcqKSAjKHZpCisJCTs7CisJKikKKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAtZworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCisJQ1BQRkxBR1M9IiRjZl9uZXdfY3BwZmxhZ3MgJENQUEZMQUdTIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisJCTs7CisJZXNhYworCTs7Citlc2FjCisKK2lmIHRlc3QgIiR3aXRoX2RtYWxsb2MiID0geWVzIDsgdGhlbgorCWVjaG8gIiRhc19tZToxMDUyMjogY2hlY2tpbmcgZm9yIGRtYWxsb2MuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbWFsbG9jLmguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9kbWFsbG9jX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMDUyOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDUzMjogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTA1Mzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX2RtYWxsb2NfaD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2hlYWRlcl9kbWFsbG9jX2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMDU1NzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2RtYWxsb2NfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX2RtYWxsb2NfaCIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfZG1hbGxvY19oID0geWVzOyB0aGVuCisKK2VjaG8gIiRhc19tZToxMDU2MTogY2hlY2tpbmcgZm9yIGRtYWxsb2NfZGVidWcgaW4gLWxkbWFsbG9jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRtYWxsb2NfZGVidWcgaW4gLWxkbWFsbG9jLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZG1hbGxvY19kbWFsbG9jX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZG1hbGxvYyAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEwNTY5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkbWFsbG9jX2RlYnVnICgpOworaW50CittYWluICgpCit7CitkbWFsbG9jX2RlYnVnICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA1ODg6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEwNTkxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTA1OTQ6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDU5NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9kbWFsbG9jX2RtYWxsb2NfZGVidWc9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2xpYl9kbWFsbG9jX2RtYWxsb2NfZGVidWc9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjEwNjA4OiByZXN1bHQ6ICRhY19jdl9saWJfZG1hbGxvY19kbWFsbG9jX2RlYnVnIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZG1hbGxvY19kbWFsbG9jX2RlYnVnIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9kbWFsbG9jX2RtYWxsb2NfZGVidWcgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBIQVZFX0xJQkRNQUxMT0MgMQorRU9GCisKKyAgTElCUz0iLWxkbWFsbG9jICRMSUJTIgorCitmaQorCitmaQorCitmaQorCitlY2hvICIkYXNfbWU6MTA2MjM6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSBkYm1hbGxvYyBmb3IgdGVzdGluZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSBkYm1hbGxvYyBmb3IgdGVzdGluZy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kYm1hbGxvYyBvciAtLXdpdGhvdXQtZGJtYWxsb2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RibWFsbG9jK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2RibWFsbG9jIgorICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfREJNQUxMT0MgMQorRU9GCisKKwk6ICR7d2l0aF9jZmxhZ3M6PS1nfQorCTogJHt3aXRoX25vX2xlYWtzOj15ZXN9CisJIHdpdGhfZGJtYWxsb2M9eWVzCitlbHNlCisgIHdpdGhfZGJtYWxsb2M9CitmaTsKK2VjaG8gIiRhc19tZToxMDYzOTogcmVzdWx0OiAke3dpdGhfZGJtYWxsb2M6LW5vfSIgPiY1CitlY2hvICIke0VDSE9fVH0ke3dpdGhfZGJtYWxsb2M6LW5vfSIgPiY2CisKK2Nhc2UgLiR3aXRoX2NmbGFncyBpbiAjKHZpCisuKi1nKikKKwljYXNlIC4kQ0ZMQUdTIGluICModmkKKwkuKi1nKikgIyh2aQorCQk7OworCSopCisKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gLWcKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKiRjZl9hZGRfY2ZsYWdzKSAjKHZpCisJCQk7OworCQkqKSAjKHZpCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7Cit5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworCQk7OworCWVzYWMKKwk7OworZXNhYworCitpZiB0ZXN0ICIkd2l0aF9kYm1hbGxvYyIgPSB5ZXMgOyB0aGVuCisJZWNobyAiJGFzX21lOjEwNzIzOiBjaGVja2luZyBmb3IgZGJtYWxsb2MuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkYm1hbGxvYy5oLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfZGJtYWxsb2NfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEwNzI5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxkYm1hbGxvYy5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMDczMzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTA3Mzk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX2RibWFsbG9jX2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9oZWFkZXJfZGJtYWxsb2NfaD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjEwNzU4OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfZGJtYWxsb2NfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX2RibWFsbG9jX2giID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2RibWFsbG9jX2ggPSB5ZXM7IHRoZW4KKworZWNobyAiJGFzX21lOjEwNzYyOiBjaGVja2luZyBmb3IgZGVidWdfbWFsbG9jIGluIC1sZGJtYWxsb2MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGVidWdfbWFsbG9jIGluIC1sZGJtYWxsb2MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kYm1hbGxvY19kZWJ1Z19tYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkYm1hbGxvYyAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEwNzcwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkZWJ1Z19tYWxsb2MgKCk7CitpbnQKK21haW4gKCkKK3sKK2RlYnVnX21hbGxvYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwNzg5OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMDc5MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEwNzk1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTA3OTg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZGJtYWxsb2NfZGVidWdfbWFsbG9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfZGJtYWxsb2NfZGVidWdfbWFsbG9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMDgwOTogcmVzdWx0OiAkYWNfY3ZfbGliX2RibWFsbG9jX2RlYnVnX21hbGxvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RibWFsbG9jX2RlYnVnX21hbGxvYyIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfZGJtYWxsb2NfZGVidWdfbWFsbG9jID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgSEFWRV9MSUJEQk1BTExPQyAxCitFT0YKKworICBMSUJTPSItbGRibWFsbG9jICRMSUJTIgorCitmaQorCitmaQorCitmaQorCitlY2hvICIkYXNfbWU6MTA4MjQ6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSB2YWxncmluZCBmb3IgdGVzdGluZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHVzZSB2YWxncmluZCBmb3IgdGVzdGluZy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC12YWxncmluZCBvciAtLXdpdGhvdXQtdmFsZ3JpbmQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3ZhbGdyaW5kK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3ZhbGdyaW5kIgorICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfVkFMR1JJTkQgMQorRU9GCisKKwk6ICR7d2l0aF9jZmxhZ3M6PS1nfQorCTogJHt3aXRoX25vX2xlYWtzOj15ZXN9CisJIHdpdGhfdmFsZ3JpbmQ9eWVzCitlbHNlCisgIHdpdGhfdmFsZ3JpbmQ9CitmaTsKK2VjaG8gIiRhc19tZToxMDg0MDogcmVzdWx0OiAke3dpdGhfdmFsZ3JpbmQ6LW5vfSIgPiY1CitlY2hvICIke0VDSE9fVH0ke3dpdGhfdmFsZ3JpbmQ6LW5vfSIgPiY2CisKK2Nhc2UgLiR3aXRoX2NmbGFncyBpbiAjKHZpCisuKi1nKikKKwljYXNlIC4kQ0ZMQUdTIGluICModmkKKwkuKi1nKikgIyh2aQorCQk7OworCSopCisKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gLWcKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW149XSo9J1wnJ1wiW14iXSovLydgCisKKwkJCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJCQkmJiBjZl9maXhfY3BwZmxhZ3M9eWVzCisKKwkJCWlmIHRlc3QgJGNmX2ZpeF9jcHBmbGFncyA9IHllcyA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWVsaWYgdGVzdCAiJHtjZl90c3RfY2ZsYWdzfSIgPSAiXCInIiA7IHRoZW4KKwkJCQljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQkJY29udGludWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRDUFBGTEFHUyIgaW4KKwkJKiRjZl9hZGRfY2ZsYWdzKSAjKHZpCisJCQk7OworCQkqKSAjKHZpCisJCQljZl9uZXdfY3BwZmxhZ3M9IiRjZl9uZXdfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJY2ZfbmV3X2NmbGFncz0iJGNmX25ld19jZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisJCTs7CisJZXNhYworCTs7Cit5ZXMpCisJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCisJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXlteIl0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisKKwlDRkxBR1M9IiRDRkxBR1MgJGNmX25ld19jZmxhZ3MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NwcGZsYWdzIiA7IHRoZW4KKworCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworCQk7OworCWVzYWMKKwk7OworZXNhYworCitlY2hvICIkYXNfbWU6MTA5MjM6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHBlcmZvcm0gbWVtb3J5LWxlYWsgdGVzdGluZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIHBlcmZvcm0gbWVtb3J5LWxlYWsgdGVzdGluZy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxlYWtzIG9yIC0tZGlzYWJsZS1sZWFrcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sZWFrcytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbGVha3MiCisgIHdpdGhfbm9fbGVha3M9eWVzCitlbHNlCisgIDogJHt3aXRoX25vX2xlYWtzOj1ub30KK2ZpOworZWNobyAiJGFzX21lOjEwOTMzOiByZXN1bHQ6ICR3aXRoX25vX2xlYWtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSR3aXRoX25vX2xlYWtzIiA+JjYKKworaWYgdGVzdCAiJHdpdGhfbm9fbGVha3MiID0geWVzIDsgdGhlbgorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIE5PX0xFQUtTIDEKK0VPRgorCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DX0FMTE9DX0ggMQorRU9GCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWV4cGFuZGVkIHRvIGdlbmVyYXRlIGNlcnRhaW4gbWFjcm9zIGFzIGZ1bmN0aW9ucworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXhwYW5kZWQgb3IgLS1kaXNhYmxlLWV4cGFuZGVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2V4cGFuZGVkK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9leHBhbmRlZCIKKyAgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFU19FWFBBTkRFRCAxCitFT0YKKworZmk7CisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1tYWNyb3MgdG8gc3VwcHJlc3MgbWFjcm9zIGluIGZhdm9yIG9mIGZ1bmN0aW9ucworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFjcm9zIG9yIC0tZGlzYWJsZS1tYWNyb3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWFjcm9zK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9tYWNyb3MiCisgIHRlc3QgIiRlbmFibGV2YWwiID0gbm8gJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFU19OT01BQ1JPUyAxCitFT0YKKworZmk7CisKKyMgTm9ybWFsbHkgd2Ugb25seSBhZGQgdHJhY2UoKSB0byB0aGUgZGVidWctbGlicmFyeS4gIEFsbG93IHRoaXMgdG8gYmUKKyMgZXh0ZW5kZWQgdG8gYWxsIG1vZGVscyBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5OgorY2ZfYWxsX3RyYWNlcz1ubworY2FzZSAiJENGTEFHUyAkQ1BQRkxBR1MiIGluCisqLURUUkFDRSopCisJY2ZfYWxsX3RyYWNlcz15ZXMKKwk7OworZXNhYworCitlY2hvICIkYXNfbWU6MTA5Nzg6IGNoZWNraW5nIHdoZXRoZXIgdG8gYWRkIHRyYWNlIGZlYXR1cmUgdG8gYWxsIG1vZGVscyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYWRkIHRyYWNlIGZlYXR1cmUgdG8gYWxsIG1vZGVscy4uLiAkRUNIT19DIiA+JjYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10cmFjZSBvciAtLXdpdGhvdXQtdHJhY2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3RyYWNlK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3RyYWNlIgorICBjZl93aXRoX3RyYWNlPSR3aXRodmFsCitlbHNlCisgIGNmX3dpdGhfdHJhY2U9JGNmX2FsbF90cmFjZXMKK2ZpOworZWNobyAiJGFzX21lOjEwOTg4OiByZXN1bHQ6ICRjZl93aXRoX3RyYWNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl93aXRoX3RyYWNlIiA+JjYKKworaWYgdGVzdCAiJGNmX3dpdGhfdHJhY2UiID0geWVzIDsgdGhlbgorCUxJQl9UUkFDSU5HPWFsbAorCUFEQV9UUkFDRT1UUlVFCisKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gLURUUkFDRQorZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCisJQ1BQRkxBR1M9IiRjZl9uZXdfY3BwZmxhZ3MgJENQUEZMQUdTIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCitlbHNlCisJTElCX1RSQUNJTkc9REVCVUcKKwlBREFfVFJBQ0U9RkFMU0UKK2ZpCisKKyMjIwlDaGVja3MgZm9yIGxpYnJhcmllcy4KK2VjaG8gIiRhc19tZToxMTA2OTogY2hlY2tpbmcgZm9yIGdldHRpbWVvZmRheSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXR0aW1lb2ZkYXkuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTEwNzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZ2V0dGltZW9mZGF5ICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGdldHRpbWVvZmRheSAoKTsKK2NoYXIgKCpmKSAoKTsKKworaW50CittYWluICgpCit7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0dGltZW9mZGF5KSB8fCBkZWZpbmVkIChfX3N0dWJfX19nZXR0aW1lb2ZkYXkpCitjaG9rZSBtZQorI2Vsc2UKK2YgPSBnZXR0aW1lb2ZkYXk7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTExMDY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExMTA5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTExMTI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTExNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9mdW5jX2dldHRpbWVvZmRheT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTExMjU6IHJlc3VsdDogJGFjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2dldHRpbWVvZmRheSIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX2dldHRpbWVvZmRheSA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCitFT0YKKworZWxzZQorCitlY2hvICIkYXNfbWU6MTExMzQ6IGNoZWNraW5nIGZvciBnZXR0aW1lb2ZkYXkgaW4gLWxic2QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0dGltZW9mZGF5IGluIC1sYnNkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfYnNkX2dldHRpbWVvZmRheStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGJzZCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExMTQyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBnZXR0aW1lb2ZkYXkgKCk7CitpbnQKK21haW4gKCkKK3sKK2dldHRpbWVvZmRheSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMTYxOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTE2NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMTY3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTExNzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfYnNkX2dldHRpbWVvZmRheT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2JzZF9nZXR0aW1lb2ZkYXk9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOjExMTgxOiByZXN1bHQ6ICRhY19jdl9saWJfYnNkX2dldHRpbWVvZmRheSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2JzZF9nZXR0aW1lb2ZkYXkiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2JzZF9nZXR0aW1lb2ZkYXkgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQorRU9GCisKKwlMSUJTPSIkTElCUyAtbGJzZCIKK2ZpCisKK2ZpCisKK2VjaG8gIiRhc19tZToxMTE5MzogY2hlY2tpbmcgaWYgLWxtIG5lZWRlZCBmb3IgbWF0aCBmdW5jdGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAtbG0gbmVlZGVkIGZvciBtYXRoIGZ1bmN0aW9ucy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbmVlZF9saWJtK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExMjAwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworCSNpbmNsdWRlIDxzdGRpby5oPgorCSNpbmNsdWRlIDxtYXRoLmg+CisKK2ludAorbWFpbiAoKQoreworZG91YmxlIHggPSByYW5kKCk7IHByaW50ZigicmVzdWx0ID0gJWdcbiIsIHNpbih4KSkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMjE1OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTIxODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMjIxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTEyMjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9uZWVkX2xpYm09bm8KK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3ZfbmVlZF9saWJtPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTEyMzQ6IHJlc3VsdDogJGNmX2N2X25lZWRfbGlibSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbmVlZF9saWJtIiA+JjYKK2lmIHRlc3QgIiRjZl9jdl9uZWVkX2xpYm0iID0geWVzCit0aGVuCitNQVRIX0xJQj0tbG0KK2ZpCisKKyMjIwlDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK2VjaG8gIiRhc19tZToxMTI0MjogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTI0OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTI1NjogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTEyNjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTI4NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICBlZ3JlcCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTEzMDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICA6CitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExMzIzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKyAgICAgICAgICAgICAgICAgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKyAgICAgICAgICAgICAgICAgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorICAgICAgICB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgICRhY19tYWluX3JldHVybigyKTsKKyAgJGFjX21haW5fcmV0dXJuICgwKTsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTM0OTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTEzNTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExMzU0OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTEzNTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK2ZpCitlY2hvICIkYXNfbWU6MTEzNzA6IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBTVERDX0hFQURFUlMgMQorRU9GCisKK2ZpCisKK2FjX2hlYWRlcl9kaXJlbnQ9bm8KK2ZvciBhY19oZHIgaW4gZGlyZW50Lmggc3lzL25kaXIuaCBzeXMvZGlyLmggbmRpci5oOyBkbworICBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl9kaXJlbnRfJGFjX2hkciIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6MTEzODM6IGNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExMzg5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDwkYWNfaGRyPgorCitpbnQKK21haW4gKCkKK3sKK2lmICgoRElSICopIDApCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE0MDQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNDA3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNDEwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE0MTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTE0MjM6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZHIiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2FjX2hlYWRlcl9kaXJlbnQ9JGFjX2hkcjsgYnJlYWsKK2ZpCisKK2RvbmUKKyMgVHdvIHZlcnNpb25zIG9mIG9wZW5kaXIgZXQgYWwuIGFyZSBpbiAtbGRpciBhbmQgLWx4IG9uIFNDTyBYZW5peC4KK2lmIHRlc3QgJGFjX2hlYWRlcl9kaXJlbnQgPSBkaXJlbnQuaDsgdGhlbgorICBlY2hvICIkYXNfbWU6MTE0MzY6IGNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1sZGlyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9wZW5kaXIgaW4gLWxkaXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kaXJfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRpciAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExNDQ0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBvcGVuZGlyICgpOworaW50CittYWluICgpCit7CitvcGVuZGlyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE0NjM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExNDY2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE0Njk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTQ3MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9kaXJfb3BlbmRpcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2Rpcl9vcGVuZGlyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMTQ4MzogcmVzdWx0OiAkYWNfY3ZfbGliX2Rpcl9vcGVuZGlyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGlyX29wZW5kaXIiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2Rpcl9vcGVuZGlyID0geWVzOyB0aGVuCisgIExJQlM9IiRMSUJTIC1sZGlyIgorZmkKKworZWxzZQorICBlY2hvICIkYXNfbWU6MTE0OTA6IGNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1seCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1seC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHggICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTQ5OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgb3BlbmRpciAoKTsKK2ludAorbWFpbiAoKQoreworb3BlbmRpciAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNTE3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTUyMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNTIzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE1MjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfeF9vcGVuZGlyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfeF9vcGVuZGlyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMTUzNzogcmVzdWx0OiAkYWNfY3ZfbGliX3hfb3BlbmRpciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3hfb3BlbmRpciIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfeF9vcGVuZGlyID0geWVzOyB0aGVuCisgIExJQlM9IiRMSUJTIC1seCIKK2ZpCisKK2ZpCisKK2VjaG8gIiRhc19tZToxMTU0NTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTU1MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK2ludAorbWFpbiAoKQoreworaWYgKChzdHJ1Y3QgdG0gKikgMCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMTU2NzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE1NzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE1NzM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTU3NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2hlYWRlcl90aW1lPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9oZWFkZXJfdGltZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMTU4NjogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90aW1lIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCitFT0YKKworZmkKKworZWNobyAiJGFzX21lOjExNTk2OiBjaGVja2luZyBmb3IgcmVndWxhci1leHByZXNzaW9uIGhlYWRlcnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcmVndWxhci1leHByZXNzaW9uIGhlYWRlcnMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3JlZ2V4K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE2MDMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+CitpbnQKK21haW4gKCkKK3sKKworCXJlZ2V4X3QgKnA7CisJaW50IHggPSByZWdjb21wKHAsICIiLCAwKTsKKwlpbnQgeSA9IHJlZ2V4ZWMocCwgIiIsIDAsIDAsIDApOworCXJlZ2ZyZWUocCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjIxOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTYyNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjI3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE2MzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9yZWdleD0icmVnZXguaCIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTYzOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8cmVnZXhwLmg+CitpbnQKK21haW4gKCkKK3sKKworCQljaGFyICpwID0gY29tcGlsZSgiIiwgIiIsICIiLCAwKTsKKwkJaW50IHggPSBzdGVwKCIiLCAiIik7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjUzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTY1NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjU5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE2NjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9yZWdleD0icmVnZXhwLmgiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCQljZl9zYXZlX0xJQlM9IiRMSUJTIgorCQlMSUJTPSItbGdlbiAkTElCUyIKKwkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTY3MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8cmVnZXhwci5oPgoraW50CittYWluICgpCit7CisKKwkJCWNoYXIgKnAgPSBjb21waWxlKCIiLCAiIiwgIiIpOworCQkJaW50IHggPSBzdGVwKCIiLCAiIik7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjg3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTY5MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNjkzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTE2OTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9yZWdleD0icmVnZXhwci5oIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitMSUJTPSIkY2Zfc2F2ZV9MSUJTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorCitlY2hvICIkYXNfbWU6MTE3MTI6IHJlc3VsdDogJGNmX2N2X3JlZ2V4IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9yZWdleCIgPiY2CitjYXNlICRjZl9jdl9yZWdleCBpbgorCXJlZ2V4LmgpICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9SRUdFWF9IX0ZVTkNTIDEKK0VPRgorIDs7CisJcmVnZXhwLmgpICBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1JFR0VYUF9IX0ZVTkNTIDEKK0VPRgorIDs7CisJcmVnZXhwci5oKSBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1JFR0VYUFJfSF9GVU5DUyAxCitFT0YKKyA7OworZXNhYworCitmb3IgYWNfaGVhZGVyIGluIFwKK2ZjbnRsLmggXAorZ2V0b3B0LmggXAorbGltaXRzLmggXAorbG9jYWxlLmggXAorcG9sbC5oIFwKK3N5cy9ic2R0eXBlcy5oIFwKK3N5cy9pb2N0bC5oIFwKK3N5cy9wYXJhbS5oIFwKK3N5cy9wb2xsLmggXAorc3lzL3NlbGVjdC5oIFwKK3N5cy90aW1lLmggXAorc3lzL3RpbWVzLmggXAordHR5ZW50LmggXAordW5pc3RkLmggXAord2N0eXBlLmggXAorCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6MTE3NDg6IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE3NTQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExNzU4OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxMTc2NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTE3ODM6IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKKyMgY2hlY2sgZm9yIElTQyAodGhpcyBtYXkgYWxzbyBkZWZpbmUgX1BPU0lYX1NPVVJDRSkKKyMgTm90ZTogZXZlbiBub24tUG9zaXggSVNDIG5lZWRzIDxzeXMvYnNkdHlwZXMuaD4gdG8gZGVjbGFyZSBmZF9zZXQKK2lmIHRlc3QgIiRJU0MiID0geWVzIDsgdGhlbgorCitlY2hvICIkYXNfbWU6MTE3OTc6IGNoZWNraW5nIGZvciBtYWluIGluIC1sY3Bvc2l4IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxjcG9zaXguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9jcG9zaXhfbWFpbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNwb3NpeCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDExODA1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7CittYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE4MTc6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExODIwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE4MjM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTgyNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9jcG9zaXhfbWFpbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX2Nwb3NpeF9tYWluPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZToxMTgzNzogcmVzdWx0OiAkYWNfY3ZfbGliX2Nwb3NpeF9tYWluIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfY3Bvc2l4X21haW4iID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2Nwb3NpeF9tYWluID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgSEFWRV9MSUJDUE9TSVggMQorRU9GCisKKyAgTElCUz0iLWxjcG9zaXggJExJQlMiCisKK2ZpCisKKwllY2hvICIkYXNfbWU6MTE4NDg6IGNoZWNraW5nIGZvciBiemVybyBpbiAtbGluZXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYnplcm8gaW4gLWxpbmV0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfaW5ldF9iemVybytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGluZXQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMTg1NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgYnplcm8gKCk7CitpbnQKK21haW4gKCkKK3sKK2J6ZXJvICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE4NzU6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExODc4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTE4ODE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTg4NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9pbmV0X2J6ZXJvPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl9saWJfaW5ldF9iemVybz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6MTE4OTU6IHJlc3VsdDogJGFjX2N2X2xpYl9pbmV0X2J6ZXJvIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfaW5ldF9iemVybyIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfaW5ldF9iemVybyA9IHllczsgdGhlbgorICBMSUJTPSIkTElCUyAtbGluZXQiCitmaQorZmkKKworZWNobyAiJGFzX21lOjExOTAyOiBjaGVja2luZyBpZiBzeXMvdGltZS5oIHdvcmtzIHdpdGggc3lzL3NlbGVjdC5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgc3lzL3RpbWUuaCB3b3JrcyB3aXRoIHN5cy9zZWxlY3QuaC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfc3lzX3RpbWVfc2VsZWN0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE5MDkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjExOTI5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMTkzMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMTkzNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjExOTM4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9zeXNfdGltZV9zZWxlY3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKKworZWNobyAiJGFzX21lOjExOTUwOiByZXN1bHQ6ICRjZl9jdl9zeXNfdGltZV9zZWxlY3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3N5c190aW1lX3NlbGVjdCIgPiY2Cit0ZXN0ICIkY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0IiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NZU19USU1FX1NFTEVDVCAxCitFT0YKKworIyMjCWNoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworZWNobyAiJGFzX21lOjExOTY0OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19zdGRjK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2Nfc3RkYz1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTE5NzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorIyBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKKyMgYnJlYWtzIHNvbWUgc3lzdGVtcycgaGVhZGVyIGZpbGVzLgorIyBBSVgJCQktcWxhbmdsdmw9YW5zaQorIyBVbHRyaXggYW5kIE9TRi8xCS1zdGQxCisjIEhQLVVYIDEwLjIwIGFuZCBsYXRlcgktQWUKKyMgSFAtVVggb2xkZXIgdmVyc2lvbnMJLUFhIC1EX0hQVVhfU09VUkNFCisjIFNWUjQJCQktWGMgLURfX0VYVEVOU0lPTlNfXworZm9yIGFjX2FyZyBpbiAiIiAtcWxhbmdsdmw9YW5zaSAtc3RkMSAtQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyMDIxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjAyNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjAyNzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMDMwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19hcmcKK2JyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Citkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19zdGRjIiBpbgorICB4fHhubykKKyAgICBlY2hvICIkYXNfbWU6MTIwNDc6IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OworICAqKQorICAgIGVjaG8gIiRhc19tZToxMjA1MDogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNgorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2Nfc3RkYyIgOzsKK2VzYWMKKworZWNobyAiJGFzX21lOjEyMDU1OiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2NfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjA2MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludAorbWFpbiAoKQoreworLyogRklYTUU6IEluY2x1ZGUgdGhlIGNvbW1lbnRzIHN1Z2dlc3RlZCBieSBQYXVsLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IHg7CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpjY3A7CisgIGNoYXIgKipwOworICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CisgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworICAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMuCisgICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCisgICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbiAqLworICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CisgIGNjcCA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytjY3A7CisgIHAgPSAoY2hhcioqKSBjY3A7CisgIGNjcCA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwOworICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMuICAqLworICAgIGNoYXIgKnQ7CisgICAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsKKworICAgICp0KysgPSAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgICAgc3RydWN0IHMgKmI7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICB9CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjExOTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIxMjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIxMjU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjEyODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2NfY29uc3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTIxMzg6IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNgoraWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIGNvbnN0CitFT0YKKworZmkKKworZWNobyAiJGFzX21lOjEyMTQ4OiBjaGVja2luZyBmb3IgaW5saW5lIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfY19pbmxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfY19pbmxpbmU9bm8KK2ZvciBhY19rdyBpbiBpbmxpbmUgX19pbmxpbmVfXyBfX2lubGluZTsgZG8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjE1NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaWZuZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgJGFjX2t3IGludCBzdGF0aWNfZm9vICgpIHtyZXR1cm4gMDsgfQorJGFjX2t3IGludCBmb28gKCkge3JldHVybiAwOyB9CisjZW5kaWYKKworX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjE2NTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIxNjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIxNzE6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjE3NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2NfaW5saW5lPSRhY19rdzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorCitmaQorZWNobyAiJGFzX21lOjEyMTg1OiByZXN1bHQ6ICRhY19jdl9jX2lubGluZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfY19pbmxpbmUiID4mNgorY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgaW5saW5lIHwgeWVzKSA7OworICBubykKK2NhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIGlubGluZQorRU9GCisgOzsKKyAgKikgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgaW5saW5lICRhY19jdl9jX2lubGluZQorRU9GCisgOzsKK2VzYWMKKworTkNVUlNFU19JTkxJTkU9CitpZiB0ZXN0ICIkYWNfY3ZfY19pbmxpbmUiICE9IG5vIDsgdGhlbgorICBOQ1VSU0VTX0lOTElORT1pbmxpbmUKKyAgaWYgdGVzdCAiJElOVEVMX0NPTVBJTEVSIiA9IHllcworICB0aGVuCisgICAgOgorICBlbGlmIHRlc3QgIiRHQ0MiID0geWVzCisgIHRoZW4KKyAgICBlY2hvICIkYXNfbWU6MTIyMDg6IGNoZWNraW5nIGlmIGdjYyBzdXBwb3J0cyBvcHRpb25zIHRvIHR1bmUgaW5saW5pbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBnY2Mgc3VwcG9ydHMgb3B0aW9ucyB0byB0dW5lIGlubGluaW5nLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9nY2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKyAgICAgIGNmX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtc2luZ2xlPTEyMDAiCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyMjE3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKK2lubGluZSBpbnQgZm9vKHZvaWQpIHsgcmV0dXJuIDE7IH0KK2ludAorbWFpbiAoKQoreworJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSBmb28oKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjIyOTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIyMzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIyMzU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjIzODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2djY19pbmxpbmU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2djY19pbmxpbmU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIENGTEFHUz0kY2Zfc2F2ZV9DRkxBR1MKKworZmkKK2VjaG8gIiRhc19tZToxMjI1MDogcmVzdWx0OiAkY2ZfY3ZfZ2NjX2lubGluZSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZ2NjX2lubGluZSIgPiY2CisgICAgaWYgdGVzdCAiJGNmX2N2X2djY19pbmxpbmUiID0geWVzIDsgdGhlbgorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluIC0tcGFyYW0gbWF4LWlubGluZS1pbnNucy1zaW5nbGU9MTIwMAorZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCisJQ1BQRkxBR1M9IiRjZl9uZXdfY3BwZmxhZ3MgJENQUEZMQUdTIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19leHRyYV9jcHBmbGFncyIgOyB0aGVuCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisgICAgZmkKKyAgZmkKK2ZpCisKK2VjaG8gIiRhc19tZToxMjMyNjogY2hlY2tpbmcgZm9yIHNpZ25hbCBnbG9iYWwgZGF0YXR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2lnbmFsIGdsb2JhbCBkYXRhdHlwZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfc2lnX2F0b21pY190K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwlmb3IgY2ZfdHlwZSBpbiBcCisJCSJ2b2xhdGlsZSBzaWdfYXRvbWljX3QiIFwKKwkJInNpZ19hdG9taWNfdCIgXAorCQkiaW50IgorCWRvCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjMzOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitleHRlcm4gJGNmX3R5cGUgeDsKKyRjZl90eXBlIHg7CitzdGF0aWMgdm9pZCBoYW5kbGVyKGludCBzaWcpCit7CisJeCA9IDU7Cit9CitpbnQKK21haW4gKCkKK3sKK3NpZ25hbChTSUdJTlQsIGhhbmRsZXIpOworCQkgeCA9IDEKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTIzNjE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyMzY0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyMzY3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTIzNzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9zaWdfYXRvbWljX3Q9JGNmX3R5cGUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3Zfc2lnX2F0b21pY190PW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCXRlc3QgIiRjZl9jdl9zaWdfYXRvbWljX3QiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCitmaQorCitlY2hvICIkYXNfbWU6MTIzODQ6IHJlc3VsdDogJGNmX2N2X3NpZ19hdG9taWNfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3Zfc2lnX2F0b21pY190IiA+JjYKK3Rlc3QgIiRjZl9jdl9zaWdfYXRvbWljX3QiICE9IG5vICYmIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgU0lHX0FUT01JQ19UICRjZl9jdl9zaWdfYXRvbWljX3QKK0VPRgorCitpZiB0ZXN0ICROQ1VSU0VTX0NIVFlQRSA9IGF1dG8gOyB0aGVuCisKK2VjaG8gIiRhc19tZToxMjM5MjogY2hlY2tpbmcgZm9yIHR5cGUgb2YgY2h0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHR5cGUgb2YgY2h0eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl90eXBlb2ZfY2h0eXBlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwkJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgY2ZfY3ZfdHlwZW9mX2NodHlwZT1sb25nCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI0MDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjZGVmaW5lIFdBTlRfQklUUyAzMQorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpCit7CisJRklMRSAqZnAgPSBmb3BlbigiY2ZfdGVzdC5vdXQiLCAidyIpOworCWlmIChmcCAhPSAwKSB7CisJCWNoYXIgKnJlc3VsdCA9ICJsb25nIjsKKwkJaWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA+IHNpemVvZih1bnNpZ25lZCBpbnQpKSB7CisJCQlpbnQgbjsKKwkJCXVuc2lnbmVkIGludCB4LCB5OworCQkJZm9yIChuID0gMDsgbiA8IFdBTlRfQklUUzsgbisrKSB7CisJCQkJeCA9ICgxIDw8IG4pOworCQkJCXkgPSAoeCA+PiBuKTsKKwkJCQlpZiAoeSAhPSAxIHx8IHggPT0gMCkgeworCQkJCQl4ID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJLyoKKwkJCSAqIElmIHggaXMgbm9uemVybywgYW4gaW50IGlzIGJpZyBlbm91Z2ggZm9yIHRoZSBiaXRzCisJCQkgKiB0aGF0IHdlIHdhbnQuCisJCQkgKi8KKwkJCXJlc3VsdCA9ICh4ICE9IDApID8gImludCIgOiAibG9uZyI7CisJCX0KKwkJZnB1dHMocmVzdWx0LCBmcCk7CisJCWZjbG9zZShmcCk7CisJfQorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMCk7Cit9CisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjQzNzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI0NDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNDQyOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI0NDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl90eXBlb2ZfY2h0eXBlPWBjYXQgY2ZfdGVzdC5vdXRgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl90eXBlb2ZfY2h0eXBlPWxvbmcKK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKwkJcm0gLWYgY2ZfdGVzdC5vdXQKKworZmkKKworZWNobyAiJGFzX21lOjEyNDYwOiByZXN1bHQ6ICRjZl9jdl90eXBlb2ZfY2h0eXBlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl90eXBlb2ZfY2h0eXBlIiA+JjYKKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBUWVBFT0ZfQ0hUWVBFICRjZl9jdl90eXBlb2ZfY2h0eXBlCitFT0YKKworZWxzZQorCWNmX2N2X3R5cGVvZl9jaHR5cGU9JE5DVVJTRVNfQ0hUWVBFCitmaQordGVzdCAiJGNmX2N2X3R5cGVvZl9jaHR5cGUiID0gdW5zaWduZWQgJiYgY2ZfY3ZfdHlwZW9mX2NodHlwZT0iIgorCitlY2hvICIkYXNfbWU6MTI0NzI6IGNoZWNraW5nIGlmIHVuc2lnbmVkIGxpdGVyYWxzIGFyZSBsZWdhbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHVuc2lnbmVkIGxpdGVyYWxzIGFyZSBsZWdhbC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdW5zaWduZWRfbGl0ZXJhbHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI0NzkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKK2xvbmcgeCA9IDFMICsgMVVMICsgMVUgKyAxCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNDkxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjQ5NDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjQ5NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNTAwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfdW5zaWduZWRfbGl0ZXJhbHM9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCisKK2VjaG8gIiRhc19tZToxMjUxMjogcmVzdWx0OiAkY2ZfY3ZfdW5zaWduZWRfbGl0ZXJhbHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzIiA+JjYKKworY2ZfY3ZfMVVMPSIxIgordGVzdCAiLiRjZl9jdl91bnNpZ25lZF9saXRlcmFscyIgPSAueWVzICYmIGNmX2N2XzFVTD0iJHtjZl9jdl8xVUx9VSIKK3Rlc3QgIi4kY2ZfY3ZfdHlwZW9mX2NodHlwZSIgICAgPSAubG9uZyAmJiBjZl9jdl8xVUw9IiR7Y2ZfY3ZfMVVMfUwiCisKK2lmIHRlc3QgJE5DVVJTRVNfTU1BU0tfVCA9IGF1dG8gOyB0aGVuCisJY2ZfY3ZfdHlwZW9mX21tYXNrX3Q9bG9uZworZWxzZQorCWNmX2N2X3R5cGVvZl9tbWFza190PSROQ1VSU0VTX01NQVNLX1QKK2ZpCit0ZXN0ICIkY2ZfY3ZfdHlwZW9mX21tYXNrX3QiID0gdW5zaWduZWQgJiYgY2ZfY3ZfdHlwZW9mX21tYXNrX3Q9IiIKKworIyMjCUNoZWNrcyBmb3IgZXh0ZXJuYWwtZGF0YQorCitlY2hvICIkYXNfbWU6MTI1Mjg6IGNoZWNraW5nIGlmIGV4dGVybmFsIGVycm5vIGlzIGRlY2xhcmVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgZXh0ZXJuYWwgZXJybm8gaXMgZGVjbGFyZWQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2RjbF9lcnJubytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjUzNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CitpbnQKK21haW4gKCkKK3sKK2ludCB4ID0gKGludCkgZXJybm8KKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI1NTM6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNTU2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNTU5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI1NjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9kY2xfZXJybm89eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2RjbF9lcnJubz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjEyNTczOiByZXN1bHQ6ICRjZl9jdl9kY2xfZXJybm8iID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2RjbF9lcnJubyIgPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9kY2xfZXJybm8iID0gbm8gOyB0aGVuCisKK2NmX3Jlc3VsdD1gZWNobyAiZGVjbF9lcnJubyIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRjZl9yZXN1bHQgMQorRU9GCisKK2ZpCisKKyMgSXQncyBwb3NzaWJsZSAoZm9yIG5lYXItVU5JWCBjbG9uZXMpIHRoYXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdAorCitlY2hvICIkYXNfbWU6MTI1ODg6IGNoZWNraW5nIGlmIGV4dGVybmFsIGVycm5vIGV4aXN0cyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGV4dGVybmFsIGVycm5vIGV4aXN0cy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfaGF2ZV9lcnJubytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjU5NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyN1bmRlZiBlcnJubworZXh0ZXJuIGludCBlcnJubzsKKworaW50CittYWluICgpCit7CitlcnJubyA9IDIKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNjEwOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjYxMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNjE2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI2MTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9oYXZlX2Vycm5vPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9oYXZlX2Vycm5vPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOjEyNjMwOiByZXN1bHQ6ICRjZl9jdl9oYXZlX2Vycm5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9oYXZlX2Vycm5vIiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X2hhdmVfZXJybm8iID0geWVzIDsgdGhlbgorCitjZl9yZXN1bHQ9YGVjaG8gImhhdmVfZXJybm8iIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfcmVzdWx0IDEKK0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6MTI2NDM6IGNoZWNraW5nIGlmIGRhdGEtb25seSBsaWJyYXJ5IG1vZHVsZSBsaW5rcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGRhdGEtb25seSBsaWJyYXJ5IG1vZHVsZSBsaW5rcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbGlua19kYXRhb25seStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJcm0gLWYgY29uZnRlc3QuYQorCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTI2NTEgImNvbmZpZ3VyZSIKK2ludAl0ZXN0ZGF0YVszXSA9IHsgMTIzLCA0NTYsIDc4OSB9OworRU9GCisJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI2NTQ6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNjU3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gOyB0aGVuCisJCW12IGNvbmZ0ZXN0Lm8gZGF0YS5vICYmIFwKKwkJKCAkQVIgJEFSX09QVFMgY29uZnRlc3QuYSBkYXRhLm8gKSAyPiY1IDE+L2Rldi9udWxsCisJZmkKKwlybSAtZiBjb25mdGVzdC4kYWNfZXh0IGRhdGEubworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTI2NjQgImNvbmZpZ3VyZSIKK2ludAl0ZXN0ZnVuYygpCit7CisjaWYgZGVmaW5lZChOZVhUKQorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0oMSk7CS8qIEknbSB0b2xkIHRoaXMgbGlua2VyIGlzIGJyb2tlbiAqLworI2Vsc2UKKwlleHRlcm4gaW50IHRlc3RkYXRhWzNdOworCXJldHVybiB0ZXN0ZGF0YVswXSA9PSAxMjMKKwkgICAmJiAgdGVzdGRhdGFbMV0gPT0gNDU2CisJICAgJiYgIHRlc3RkYXRhWzJdID09IDc4OTsKKyNlbmRpZgorfQorRU9GCisJaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI2Nzc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyNjgwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKwkJbXYgY29uZnRlc3QubyBmdW5jLm8gJiYgXAorCQkoICRBUiAkQVJfT1BUUyBjb25mdGVzdC5hIGZ1bmMubyApIDI+JjUgMT4vZGV2L251bGwKKwlmaQorCXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgZnVuYy5vCisJKCBldmFsICRSQU5MSUIgY29uZnRlc3QuYSApIDI+JjUgPi9kZXYvbnVsbAorCWNmX3NhdmVMSUJTPSIkTElCUyIKKwlMSUJTPSJjb25mdGVzdC5hICRMSUJTIgorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X2xpbmtfZGF0YW9ubHk9dW5rbm93bgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyNjkzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworCWludCBtYWluKCkKKwl7CisJCWV4dGVybiBpbnQgdGVzdGZ1bmMoKTsKKwkJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSAoIXRlc3RmdW5jKCkpOworCX0KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyNzA0OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjcwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI3MDk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjcxMjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2xpbmtfZGF0YW9ubHk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9saW5rX2RhdGFvbmx5PW5vCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisJTElCUz0iJGNmX3NhdmVMSUJTIgorCitmaQorCitlY2hvICIkYXNfbWU6MTI3Mjc6IHJlc3VsdDogJGNmX2N2X2xpbmtfZGF0YW9ubHkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2xpbmtfZGF0YW9ubHkiID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfbGlua19kYXRhb25seSIgPSBubyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBCUk9LRU5fTElOS0VSIDEKK0VPRgorCisJQlJPS0VOX0xJTktFUj0xCitmaQorCisjIyMJQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KKworZm9yIGFjX2Z1bmMgaW4gXAorZ2V0Y3dkIFwKK2dldGVnaWQgXAorZ2V0ZXVpZCBcCitnZXR0dHluYW0gXAoraXNzZXR1Z2lkIFwKK3BvbGwgXAorcmVtb3ZlIFwKK3NlbGVjdCBcCitzZXRidWYgXAorc2V0YnVmZmVyIFwKK3NldHZidWYgXAorc2lnYWN0aW9uIFwKK3NpZ3ZlYyBcCitzdHJkdXAgXAorc3Ryc3RyIFwKK3RjZ2V0cGdycCBcCit0aW1lcyBcCit2c25wcmludGYgXAorCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZToxMjc2MjogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEyNzY4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyICRhY19mdW5jICgpOworY2hhciAoKmYpICgpOworCitpbnQKK21haW4gKCkKK3sKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2YgPSAkYWNfZnVuYzsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjc5OTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI4MDI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjgwNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyODA4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2V2YWwgIiRhc19hY192YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMjgxODogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorRU9GCisKK2ZpCitkb25lCisKK2lmIHRlc3QgIiR3aXRoX2dldGNhcCIgPSAieWVzIiA7IHRoZW4KKworZWNobyAiJGFzX21lOjEyODMwOiBjaGVja2luZyBmb3IgdGVybWluYWwtY2FwYWJpbGl0eSBkYXRhYmFzZSBmdW5jdGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdGVybWluYWwtY2FwYWJpbGl0eSBkYXRhYmFzZSBmdW5jdGlvbnMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2NnZXRlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMjgzNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisJY2hhciB0ZW1wWzEyOF07CisJY2hhciAqYnVmID0gdGVtcDsKKwljaGFyICpkYl9hcnJheSA9IHRlbXA7CisJY2dldGVudCgmYnVmLCAvKiBpbnQgKiwgKi8gJmRiX2FycmF5LCAidnQxMDAiKTsKKwljZ2V0Y2FwKGJ1ZiwgInRjIiwgJz0nKTsKKwljZ2V0bWF0Y2goYnVmLCAidGMiKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI4NTc6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyODYwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI4NjM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjg2NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2NnZXRlbnQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2NnZXRlbnQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCisKK2VjaG8gIiRhc19tZToxMjg3ODogcmVzdWx0OiAkY2ZfY3ZfY2dldGVudCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfY2dldGVudCIgPiY2Cit0ZXN0ICIkY2ZfY3ZfY2dldGVudCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9CU0RfQ0dFVEVOVCAxCitFT0YKKworZmkKKworZWNobyAiJGFzX21lOjEyODg2OiBjaGVja2luZyBmb3IgaXNhc2NpaSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpc2FzY2lpLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9oYXZlX2lzYXNjaWkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI4OTMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CitpbnQKK21haW4gKCkKK3sKK2ludCB4ID0gaXNhc2NpaSgnICcpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMjkwNTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI5MDg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjkxMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyOTE0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfaGF2ZV9pc2FzY2lpPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9oYXZlX2lzYXNjaWk9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6MTI5MjU6IHJlc3VsdDogJGNmX2N2X2hhdmVfaXNhc2NpaSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfaGF2ZV9pc2FzY2lpIiA+JjYKK3Rlc3QgIiRjZl9jdl9oYXZlX2lzYXNjaWkiID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfSVNBU0NJSSAxCitFT0YKKworaWYgdGVzdCAiJGFjX2N2X2Z1bmNfc2lnYWN0aW9uIiA9IHllczsgdGhlbgorZWNobyAiJGFzX21lOjEyOTMyOiBjaGVja2luZyB3aGV0aGVyIHNpZ2FjdGlvbiBuZWVkcyBfUE9TSVhfU09VUkNFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzaWdhY3Rpb24gbmVlZHMgX1BPU0lYX1NPVVJDRS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI5MzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBzaWdhY3Rpb24gYWN0CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyOTQ5OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMjk1MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMjk1NTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyOTU4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgc2lnYWN0X2JhZD1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTI5NjYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KK2ludAorbWFpbiAoKQoreworc3RydWN0IHNpZ2FjdGlvbiBhY3QKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTI5ODE6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEyOTg0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEyOTg3OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTI5OTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBzaWdhY3RfYmFkPXllcworCSBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBTVlI0X0FDVElPTiAxCitFT0YKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitzaWdhY3RfYmFkPXVua25vd24KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2VjaG8gIiRhc19tZToxMzAwNTogcmVzdWx0OiAkc2lnYWN0X2JhZCIgPiY1CitlY2hvICIke0VDSE9fVH0kc2lnYWN0X2JhZCIgPiY2CitmaQorCitlY2hvICIkYXNfbWU6MTMwMDk6IGNoZWNraW5nIGlmIG5hbm9zbGVlcCByZWFsbHkgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBuYW5vc2xlZXAgcmVhbGx5IHdvcmtzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9mdW5jX25hbm9zbGVlcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl9mdW5jX25hbm9zbGVlcD11bmtub3duCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTMwMTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKworaW50IG1haW4oKSB7CisJc3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyOworCWludCBjb2RlOworCXRzMS50dl9zZWMgID0gMDsKKwl0czEudHZfbnNlYyA9IDc1MDAwMDAwMDsKKwl0czIudHZfc2VjICA9IDA7CisJdHMyLnR2X25zZWMgPSAwOworCWVycm5vID0gMDsKKwljb2RlID0gbmFub3NsZWVwKCZ0czEsICZ0czIpOyAvKiBvbiBmYWlsdXJlIGVycm5vIGlzIEVOT1NZUy4gKi8KKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KGNvZGUgIT0gMCk7Cit9CisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzA0NDogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMwNDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMDQ5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMwNTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9mdW5jX25hbm9zbGVlcD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2Z1bmNfbmFub3NsZWVwPW5vCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorZWNobyAiJGFzX21lOjEzMDY0OiByZXN1bHQ6ICRjZl9jdl9mdW5jX25hbm9zbGVlcCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZnVuY19uYW5vc2xlZXAiID4mNgorCit0ZXN0ICIkY2ZfY3ZfZnVuY19uYW5vc2xlZXAiID0gInllcyIgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQU5PU0xFRVAgMQorRU9GCisKK2ZvciBhY19oZWFkZXIgaW4gXAordGVybWlvLmggXAordGVybWlvcy5oIFwKK3VuaXN0ZC5oIFwKKworZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOjEzMDc4OiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMDg0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzA4ODogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTMwOTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjEzMTEzOiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK0VPRgorCitmaQorZG9uZQorCitpZiB0ZXN0ICIkSVNDIiA9IHllcyA7IHRoZW4KKworZm9yIGFjX2hlYWRlciBpbiBzeXMvdGVybWlvLmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZToxMzEyODogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzEzNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMxMzg6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjEzMTQ0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMzE2MzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitFT0YKKworZmkKK2RvbmUKKworZmkKK2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfdGVybWlvc19oIiA9IHllcyA7IHRoZW4KKwljYXNlICIkQ0ZMQUdTICRDUFBGTEFHUyIgaW4KKwkqLURfUE9TSVhfU09VUkNFKikKKwkJdGVybWlvc19iYWQ9ZHVubm8gOzsKKwkqKQl0ZXJtaW9zX2JhZD1tYXliZSA7OworCWVzYWMKKwlpZiB0ZXN0ICIkdGVybWlvc19iYWQiID0gbWF5YmUgOyB0aGVuCisJZWNobyAiJGFzX21lOjEzMTgxOiBjaGVja2luZyB3aGV0aGVyIHRlcm1pb3MuaCBuZWVkcyBfUE9TSVhfU09VUkNFIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0ZXJtaW9zLmggbmVlZHMgX1BPU0lYX1NPVVJDRS4uLiAkRUNIT19DIiA+JjYKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMTg0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCB0ZXJtaW9zIGZvbzsgaW50IHggPSBmb28uY19pZmxhZworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzE5NjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMxOTk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMyMDI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzIwNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIHRlcm1pb3NfYmFkPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMjEzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2RlZmluZSBfUE9TSVhfU09VUkNFCisjaW5jbHVkZSA8dGVybWlvcy5oPgoraW50CittYWluICgpCit7CitzdHJ1Y3QgdGVybWlvcyBmb287IGludCB4ID0gZm9vLmNfaWZsYWcKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMyMjc6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMjMwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzMjMzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMyMzY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICB0ZXJtaW9zX2JhZD11bmtub3duCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3Rlcm1pb3NfYmFkPXllcyBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBTVlI0X1RFUk1JTyAxCitFT0YKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJZWNobyAiJGFzX21lOjEzMjUxOiByZXN1bHQ6ICR0ZXJtaW9zX2JhZCIgPiY1CitlY2hvICIke0VDSE9fVH0kdGVybWlvc19iYWQiID4mNgorCWZpCitmaQorCitlY2hvICIkYXNfbWU6MTMyNTY6IGNoZWNraW5nIGZvciB0Y2dldGF0dHIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdGNnZXRhdHRyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9oYXZlX3RjZ2V0YXR0citzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMjYzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVEVSTUlPU19ICisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2RlZmluZSBUVFkgc3RydWN0IHRlcm1pb3MKKyNlbHNlCisjaWZkZWYgSEFWRV9URVJNSU9fSAorI2luY2x1ZGUgPHRlcm1pby5oPgorI2RlZmluZSBUVFkgc3RydWN0IHRlcm1pbworI2VuZGlmCisjZW5kaWYKKworaW50CittYWluICgpCit7CisKK1RUWSBmb287Cit0Y2dldGF0dHIoMSwgJmZvbyk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzI5MTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMyOTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzI5NzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMzAwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfaGF2ZV90Y2dldGF0dHI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2hhdmVfdGNnZXRhdHRyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMzMxMDogcmVzdWx0OiAkY2ZfY3ZfaGF2ZV90Y2dldGF0dHIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2hhdmVfdGNnZXRhdHRyIiA+JjYKK3Rlc3QgIiRjZl9jdl9oYXZlX3RjZ2V0YXR0ciIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9UQ0dFVEFUVFIgMQorRU9GCisKK2VjaG8gIiRhc19tZToxMzMxNjogY2hlY2tpbmcgZm9yIHZzc2NhbmYgZnVuY3Rpb24gb3Igd29ya2Fyb3VuZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB2c3NjYW5mIGZ1bmN0aW9uIG9yIHdvcmthcm91bmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2Z1bmNfdnNzY2FuZitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMzIzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKKworCXZhX2xpc3QgYXA7CisJdnNzY2FuZigiZnJvbSIsICIlZCIsIGFwKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMzMzk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMzQyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTMzNDU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzM0ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2Z1bmNfdnNzY2FuZj12c3NjYW5mCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzM1NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CisKKyAgICBGSUxFIHN0cmJ1ZjsKKyAgICBjaGFyICpzdHIgPSAiZnJvbSI7CisKKyAgICBzdHJidWYuX2ZsYWcgPSBfSU9SRUFEOworICAgIHN0cmJ1Zi5fcHRyID0gc3RyYnVmLl9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKikgc3RyOworICAgIHN0cmJ1Zi5fY250ID0gc3RybGVuKHN0cik7CisgICAgc3RyYnVmLl9maWxlID0gX05GSUxFOworICAgIHJldHVybiAodmZzY2FuZigmc3RyYnVmLCAiJWQiLCBhcCkpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxMzM3ODogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTMzODE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzM4NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzMzg3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZnVuY192c3NjYW5mPXZmc2NhbmYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzMzk1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKKworICAgIEZJTEUgc3RyYnVmOworICAgIGNoYXIgKnN0ciA9ICJmcm9tIjsKKworICAgIHN0cmJ1Zi5fZmxhZyA9IF9JT1JFQUQ7CisgICAgc3RyYnVmLl9wdHIgPSBzdHJidWYuX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKSBzdHI7CisgICAgc3RyYnVmLl9jbnQgPSBzdHJsZW4oc3RyKTsKKyAgICBzdHJidWYuX2ZpbGUgPSBfTkZJTEU7CisgICAgcmV0dXJuIChfZG9zY2FuKCZzdHJidWYsICIlZCIsIGFwKSkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNDE3OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzQyMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNDIzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM0MjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9mdW5jX3Zzc2NhbmY9X2Rvc2NhbgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NmX2N2X2Z1bmNfdnNzY2FuZj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMzQ0MTogcmVzdWx0OiAkY2ZfY3ZfZnVuY192c3NjYW5mIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9mdW5jX3Zzc2NhbmYiID4mNgorCitjYXNlICRjZl9jdl9mdW5jX3Zzc2NhbmYgaW4gIyh2aQordnNzY2FuZikgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9WU1NDQU5GIDEKK0VPRgorOzsgIyh2aQordmZzY2FuZikgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9WRlNDQU5GIDEKK0VPRgorOzsgIyh2aQorX2Rvc2NhbikgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9fRE9TQ0FOIDEKK0VPRgorOzsKK2VzYWMKKworZWNobyAiJGFzX21lOjEzNDU5OiBjaGVja2luZyBmb3Igd29ya2luZyBta3N0ZW1wIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWtzdGVtcC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfZnVuY19ta3N0ZW1wK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK3JtIC1mIGNvbmZ0ZXN0KgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgZWNobyAiJGFzX21lOjEzNDY3OiBjaGVja2luZyBmb3IgbWtzdGVtcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBta3N0ZW1wLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX21rc3RlbXArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzQ3MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBta3N0ZW1wICgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIG1rc3RlbXAgKCk7CitjaGFyICgqZikgKCk7CisKK2ludAorbWFpbiAoKQoreworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX21rc3RlbXApIHx8IGRlZmluZWQgKF9fc3R1Yl9fX21rc3RlbXApCitjaG9rZSBtZQorI2Vsc2UKK2YgPSBta3N0ZW1wOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNTA0OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzUwNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNTEwOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM1MTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX21rc3RlbXA9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2Z1bmNfbWtzdGVtcD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTM1MjM6IHJlc3VsdDogJGFjX2N2X2Z1bmNfbWtzdGVtcCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19ta3N0ZW1wIiA+JjYKKworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzNTI4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KK2ludCBtYWluKCkKK3sKKwljaGFyICp0bXBsID0gImNvbmZ0ZXN0WFhYWFhYIjsKKwljaGFyIG5hbWVbMl1bODBdOworCWludCBuOworCWludCByZXN1bHQgPSAwOworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCXVtYXNrKDA3Nyk7CisJZm9yIChuID0gMDsgbiA8IDI7ICsrbikgeworCQlzdHJjcHkobmFtZVtuXSwgdG1wbCk7CisJCWlmICgoZmQgPSBta3N0ZW1wKG5hbWVbbl0pKSA+PSAwKSB7CisJCQlpZiAoIXN0cmNtcChuYW1lW25dLCB0bXBsKQorCQkJIHx8IHN0YXQobmFtZVtuXSwgJnNiKSAhPSAwCisJCQkgfHwgKHNiLnN0X21vZGUgJiBTX0lGTVQpICE9IFNfSUZSRUcKKwkJCSB8fCAoc2Iuc3RfbW9kZSAmIDA3NykgIT0gMCkgeworCQkJCXJlc3VsdCA9IDE7CisJCQl9CisJCQljbG9zZShmZCk7CisJCX0KKwl9CisJaWYgKHJlc3VsdCA9PSAwCisJICYmICFzdHJjbXAobmFtZVswXSwgbmFtZVsxXSkpCisJCXJlc3VsdCA9IDE7CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufShyZXN1bHQpOworfQorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM1NjY6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzNTY5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzU3MTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzNTc0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZnVuY19ta3N0ZW1wPXllcworCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9mdW5jX21rc3RlbXA9bm8KKworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZWNobyAiJGFzX21lOjEzNTg5OiByZXN1bHQ6ICRjZl9jdl9mdW5jX21rc3RlbXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2Z1bmNfbWtzdGVtcCIgPiY2CitpZiB0ZXN0ICIkY2ZfY3ZfZnVuY19ta3N0ZW1wIiA9IHllcyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX01LU1RFTVAgMQorRU9GCisKK2ZpCisKKyMgc2V0dXAgZm9yIHByb3RvdHlwZSBvZiBmYWxsYmFjayBmb3IgdnNzY2FuZigpCisKK2lmIHRlc3QgIiRjZl9jdl9mdW5jX3Zzc2NhbmYiID0gdnNzY2FuZiA7IHRoZW4KKwlIQVZFX1ZTU0NBTkY9MQorZWxzZQorCUhBVkVfVlNTQ0FORj0wCitmaQorCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKwl7IGVjaG8gIiRhc19tZToxMzYwNzogV0FSTklORzogY3Jvc3MgY29tcGlsaW5nOiBhc3N1bWUgc2V0dmJ1ZiBwYXJhbXMgbm90IHJldmVyc2VkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogY3Jvc3MgY29tcGlsaW5nOiBhc3N1bWUgc2V0dmJ1ZiBwYXJhbXMgbm90IHJldmVyc2VkIiA+JjI7fQorZWxzZQorCWVjaG8gIiRhc19tZToxMzYxMDogY2hlY2tpbmcgd2hldGhlciBzZXR2YnVmIGFyZ3VtZW50cyBhcmUgcmV2ZXJzZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHNldHZidWYgYXJndW1lbnRzIGFyZSByZXZlcnNlZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6MTM2MTY6IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmciID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTM2MjEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisvKiBJZiBzZXR2YnVmIGhhcyB0aGUgcmV2ZXJzZWQgZm9ybWF0LCBleGl0IDAuICovCitpbnQKK21haW4gKCkKK3sKKyAgLyogVGhpcyBjYWxsIGhhcyB0aGUgYXJndW1lbnRzIHJldmVyc2VkLgorICAgICBBIHJldmVyc2VkIHN5c3RlbSBtYXkgY2hlY2sgYW5kIHNlZSB0aGF0IHRoZSBhZGRyZXNzIG9mIG1haW4KKyAgICAgaXMgbm90IF9JT0xCRiwgX0lPTkJGLCBvciBfSU9GQkYsIGFuZCByZXR1cm4gbm9uemVyby4gICovCisgIGlmIChzZXR2YnVmKHN0ZG91dCwgX0lPTEJGLCAoY2hhciAqKSBtYWluLCBCVUZTSVopICE9IDApCisgICAgJGFjX21haW5fcmV0dXJuKDEpOworICBwdXRjKCdccicsIHN0ZG91dCk7CisgICRhY19tYWluX3JldHVybigwKTsJCQkvKiBOb24tcmV2ZXJzZWQgc3lzdGVtcyBzZWd2IGhlcmUuICAqLworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNjM4OiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzY0MTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM2NDM6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzY0NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlCitmaQorZWNobyAiJGFzX21lOjEzNjU5OiByZXN1bHQ6ICRhY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZCIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgU0VUVkJVRl9SRVZFUlNFRCAxCitFT0YKKworZmkKKworZmkKK2VjaG8gIiRhc19tZToxMzY3MDogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX3NpZ25hbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzNjc2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBzaWduYWwKKyMgdW5kZWYgc2lnbmFsCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkICgqc2lnbmFsIChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOworI2Vsc2UKK3ZvaWQgKCpzaWduYWwgKCkpICgpOworI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworaW50IGk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNjk4OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzcwMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzcwNDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzNzA3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CithY19jdl90eXBlX3NpZ25hbD1pbnQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6MTM3MTc6IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3NpZ25hbCIgPiY2CisKK2NhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgUkVUU0lHVFlQRSAkYWNfY3ZfdHlwZV9zaWduYWwKK0VPRgorCitlY2hvICIkYXNfbWU6MTM3MjQ6IGNoZWNraW5nIGZvciB0eXBlIHNpZ2FjdGlvbl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHR5cGUgc2lnYWN0aW9uX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3R5cGVfc2lnYWN0aW9uK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzNzMxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHNpZ25hbC5oPgoraW50CittYWluICgpCit7CitzaWdhY3Rpb25fdCB4CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzNzQ0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzc0NzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxMzc1MDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzNzUzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfdHlwZV9zaWdhY3Rpb249eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3R5cGVfc2lnYWN0aW9uPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitlY2hvICIkYXNfbWU6MTM3NjQ6IHJlc3VsdDogJGNmX2N2X3R5cGVfc2lnYWN0aW9uIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl90eXBlX3NpZ2FjdGlvbiIgPiY2Cit0ZXN0ICIkY2ZfY3ZfdHlwZV9zaWdhY3Rpb24iID0geWVzICYmIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVFlQRV9TSUdBQ1RJT04gMQorRU9GCisKK2VjaG8gIiRhc19tZToxMzc3MDogY2hlY2tpbmcgZGVjbGFyYXRpb24gb2Ygc2l6ZS1jaGFuZ2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBkZWNsYXJhdGlvbiBvZiBzaXplLWNoYW5nZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfc2l6ZWNoYW5nZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisgICAgY2ZfY3Zfc2l6ZWNoYW5nZT11bmtub3duCisgICAgY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCitmb3IgY2Zfb3B0cyBpbiAiIiAiTkVFRF9QVEVNX0giCitkbworCisgICAgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorICAgIHRlc3QgLW4gIiRjZl9vcHRzIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EJGNmX29wdHMiCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzc4NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfVEVSTUlPX0gKKyNpbmNsdWRlIDx0ZXJtaW8uaD4KKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgTkVFRF9QVEVNX0gKKy8qIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBTQ086ICB0aGV5IG5lZ2xlY3RlZCB0byBkZWZpbmUgc3RydWN0IHdpbnNpemUgaW4KKyAqIHRlcm1pb3MuaCAtLSBpdCdzIG9ubHkgaW4gdGVybWlvLmggYW5kIHB0ZW0uaAorICovCisjaW5jbHVkZSAgICAgICAgPHN5cy9zdHJlYW0uaD4KKyNpbmNsdWRlICAgICAgICA8c3lzL3B0ZW0uaD4KKyNlbmRpZgorI2lmICFkZWZpbmVkKHN1bikgfHwgIWRlZmluZWQoSEFWRV9URVJNSU9TX0gpCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyNpZmRlZiBUSU9DR1NJWkUKKwlzdHJ1Y3QgdHR5c2l6ZSB3aW47CS8qIEZJWE1FOiB3aGF0IHN5c3RlbSBpcyB0aGlzPyAqLworCWludCB5ID0gd2luLnRzX2xpbmVzOworCWludCB4ID0gd2luLnRzX2NvbHM7CisjZWxzZQorI2lmZGVmIFRJT0NHV0lOU1oKKwlzdHJ1Y3Qgd2luc2l6ZSB3aW47CisJaW50IHkgPSB3aW4ud3Nfcm93OworCWludCB4ID0gd2luLndzX2NvbDsKKyNlbHNlCisJbm8gVElPQ0dTSVpFIG9yIFRJT0NHV0lOU1oKKyNlbmRpZiAvKiBUSU9DR1dJTlNaICovCisjZW5kaWYgLyogVElPQ0dTSVpFICovCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM4Mjk6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzODMyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjEzODM1OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTM4Mzg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9zaXplY2hhbmdlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9zaXplY2hhbmdlPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKwlDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisJaWYgdGVzdCAiJGNmX2N2X3NpemVjaGFuZ2UiID0geWVzIDsgdGhlbgorCQllY2hvICJzaXplLWNoYW5nZSBzdWNjZWVkZWQgKCRjZl9vcHRzKSIgPiY1CisJCXRlc3QgLW4gIiRjZl9vcHRzIiAmJiBjZl9jdl9zaXplY2hhbmdlPSIkY2Zfb3B0cyIKKwkJYnJlYWsKKwlmaQorZG9uZQorCitmaQorZWNobyAiJGFzX21lOjEzODU3OiByZXN1bHQ6ICRjZl9jdl9zaXplY2hhbmdlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9zaXplY2hhbmdlIiA+JjYKK2lmIHRlc3QgIiRjZl9jdl9zaXplY2hhbmdlIiAhPSBubyA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1NJWkVDSEFOR0UgMQorRU9GCisKKwljYXNlICRjZl9jdl9zaXplY2hhbmdlIGluICModmkKKwlORUVEKikKKwkJY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfY3Zfc2l6ZWNoYW5nZSAgMQorRU9GCisKKwkJOzsKKwllc2FjCitmaQorCitlY2hvICIkYXNfbWU6MTM4NzQ6IGNoZWNraW5nIGZvciBtZW1tb3ZlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1lbW1vdmUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfbWVtbW92ZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDEzODgwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIG1lbW1vdmUgKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgbWVtbW92ZSAoKTsKK2NoYXIgKCpmKSAoKTsKKworaW50CittYWluICgpCit7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfbWVtbW92ZSkgfHwgZGVmaW5lZCAoX19zdHViX19fbWVtbW92ZSkKK2Nob2tlIG1lCisjZWxzZQorZiA9IG1lbW1vdmU7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM5MTE6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzOTE0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM5MTc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzkyMDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfbWVtbW92ZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfZnVuY19tZW1tb3ZlPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxMzkzMDogcmVzdWx0OiAkYWNfY3ZfZnVuY19tZW1tb3ZlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21lbW1vdmUiID4mNgoraWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworZWNobyAiJGFzX21lOjEzOTM2OiBjaGVja2luZyBmb3IgYmNvcHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYmNvcHkuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfYmNvcHkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxMzk0MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBiY29weSAoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBiY29weSAoKTsKK2NoYXIgKCpmKSAoKTsKKworaW50CittYWluICgpCit7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfYmNvcHkpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2Jjb3B5KQorY2hva2UgbWUKKyNlbHNlCitmID0gYmNvcHk7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM5NzM6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjEzOTc2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTM5Nzk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxMzk4MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfYmNvcHk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2N2X2Z1bmNfYmNvcHk9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjEzOTkyOiByZXN1bHQ6ICRhY19jdl9mdW5jX2Jjb3B5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Jjb3B5IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfYmNvcHkgPSB5ZXM7IHRoZW4KKworCWVjaG8gIiRhc19tZToxMzk5NjogY2hlY2tpbmcgaWYgYmNvcHkgZG9lcyBvdmVybGFwcGluZyBtb3ZlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGJjb3B5IGRvZXMgb3ZlcmxhcHBpbmcgbW92ZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2dvb2RfYmNvcHkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCQlpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBjZl9jdl9nb29kX2Jjb3B5PXVua25vd24KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDAwNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeworCXN0YXRpYyBjaGFyIGRhdGFbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV3d3h5eiI7CisJY2hhciB0ZW1wWzQwXTsKKwliY29weShkYXRhLCB0ZW1wLCBzaXplb2YoZGF0YSkpOworCWJjb3B5KHRlbXArMTAsIHRlbXAsIDE1KTsKKwliY29weSh0ZW1wKzUsIHRlbXArMTUsIDEwKTsKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59IChzdHJjbXAodGVtcCwgImtsbW5vcHFyc3R1d3d4eXBxcnN0dXd3eHl6IikpOworfQorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQwMjA6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0MDIzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNDAyNTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0MDI4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfZ29vZF9iY29weT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2dvb2RfYmNvcHk9bm8KK2ZpCitybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2VjaG8gIiRhc19tZToxNDA0MTogcmVzdWx0OiAkY2ZfY3ZfZ29vZF9iY29weSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZ29vZF9iY29weSIgPiY2CisKK2Vsc2UKKyAgY2ZfY3ZfZ29vZF9iY29weT1ubworZmkKKworCWlmIHRlc3QgIiRjZl9jdl9nb29kX2Jjb3B5IiA9IHllcyA7IHRoZW4KKwkJY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgVVNFX09LX0JDT1BZIDEKK0VPRgorCisJZWxzZQorCQljYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBVU0VfTVlfTUVNTU9WRSAxCitFT0YKKworCWZpCisKK2ZpCisKK2VjaG8gIiRhc19tZToxNDA2MjogY2hlY2tpbmcgaWYgcG9sbCByZWFsbHkgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBwb2xsIHJlYWxseSB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3Zfd29ya2luZ19wb2xsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X3dvcmtpbmdfcG9sbD11bmtub3duCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQwNzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1BPTExfSAorI2luY2x1ZGUgPHBvbGwuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbmRpZgoraW50IG1haW4oKSB7CisJc3RydWN0IHBvbGxmZCBteWZkczsKKwlpbnQgcmV0OworCisJbXlmZHMuZmQgPSAwOworCW15ZmRzLmV2ZW50cyA9IFBPTExJTjsKKworCXJldCA9IHBvbGwoJm15ZmRzLCAxLCAxMDApOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocmV0ICE9IDApOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0MDkzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDA5NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQwOTg6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDEwMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3dvcmtpbmdfcG9sbD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3dvcmtpbmdfcG9sbD1ubworZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK2VjaG8gIiRhc19tZToxNDExMzogcmVzdWx0OiAkY2ZfY3Zfd29ya2luZ19wb2xsIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl93b3JraW5nX3BvbGwiID4mNgordGVzdCAiJGNmX2N2X3dvcmtpbmdfcG9sbCIgPSAieWVzIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1dPUktJTkdfUE9MTCAxCitFT0YKKworIyBzcGVjaWFsIGNoZWNrIGZvciB0ZXN0L2RpdHRvLmMKKworZWNobyAiJGFzX21lOjE0MTIxOiBjaGVja2luZyBmb3Igb3BlbnB0eSBpbiAtbHV0aWwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb3BlbnB0eSBpbiAtbHV0aWwuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl91dGlsX29wZW5wdHkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWx1dGlsICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQxMjkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIG9wZW5wdHkgKCk7CitpbnQKK21haW4gKCkKK3sKK29wZW5wdHkgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDE0ODogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQxNTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNDE1NDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0MTU3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX3V0aWxfb3BlbnB0eT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorYWNfY3ZfbGliX3V0aWxfb3BlbnB0eT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6MTQxNjg6IHJlc3VsdDogJGFjX2N2X2xpYl91dGlsX29wZW5wdHkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl91dGlsX29wZW5wdHkiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX3V0aWxfb3BlbnB0eSA9IHllczsgdGhlbgorICBjZl9jdl9saWJfdXRpbD15ZXMKK2Vsc2UKKyAgY2ZfY3ZfbGliX3V0aWw9bm8KK2ZpCisKK2VjaG8gIiRhc19tZToxNDE3NjogY2hlY2tpbmcgZm9yIG9wZW5wdHkgaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9wZW5wdHkgaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9mdW5jX29wZW5wdHkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgIGNmX3NhdmVfTElCUz0iJExJQlMiCisgICAgdGVzdCAkY2ZfY3ZfbGliX3V0aWwgPSB5ZXMgJiYgTElCUz0iLWx1dGlsICRMSUJTIgorICAgIGZvciBjZl9oZWFkZXIgaW4gcHR5LmggbGlidXRpbC5oIHV0aWwuaAorICAgIGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDE4NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwkY2ZfaGVhZGVyPgorCitpbnQKK21haW4gKCkKK3sKKworICAgIGludCB4ID0gb3BlbnB0eSgoaW50ICopMCwgKGludCAqKTAsIChjaGFyICopMCwKKyAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRlcm1pb3MgKikwLCAoc3RydWN0IHdpbnNpemUgKikwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQyMDQ6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0MjA3OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQyMTA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDIxMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKKyAgICAgICAgY2ZfY3ZfZnVuY19vcGVucHR5PSRjZl9oZWFkZXIKKyAgICAgICAgYnJlYWsKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICAgY2ZfY3ZfZnVuY19vcGVucHR5PW5vCisKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZG9uZQorICAgIExJQlM9IiRjZl9zYXZlX0xJQlMiCisKK2ZpCitlY2hvICIkYXNfbWU6MTQyMzE6IHJlc3VsdDogJGNmX2N2X2Z1bmNfb3BlbnB0eSIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfZnVuY19vcGVucHR5IiA+JjYKKworaWYgdGVzdCAiJGNmX2N2X2Z1bmNfb3BlbnB0eSIgIT0gbm8gOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBVU0VfT1BFTlBUWV9IRUFERVIgPCRjZl9jdl9mdW5jX29wZW5wdHk+CitFT0YKKworICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9YVEVSTV9QVFkgMQorRU9GCisKKyAgICBpZiB0ZXN0ICIkY2ZfY3ZfbGliX3V0aWwiID0geWVzIDsgdGhlbgorICAgICAgICBURVNUX0xJQlM9Ii1sdXRpbCAkVEVTVF9MSUJTIgorICAgIGZpCitmaQorCitpZiB0ZXN0ICIkd2l0aF9oYXNoZWRfZGIiICE9IG5vIDsgdGhlbgorCWNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9IQVNIRURfREIgMQorRU9GCisKK2Nhc2UgJHdpdGhfaGFzaGVkX2RiIGluICModmkKK3llc3wqYWJsZSopICModmkKKyAgICA7OworKikKKyAgICBpZiB0ZXN0IC1kICIkd2l0aF9oYXNoZWRfZGIiIDsgdGhlbgorCitpZiB0ZXN0IC1uICIkd2l0aF9oYXNoZWRfZGIvaW5jbHVkZSIgOyB0aGVuCisgIGZvciBjZl9hZGRfaW5jZGlyIGluICR3aXRoX2hhc2hlZF9kYi9pbmNsdWRlCisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDI4MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworcHJpbnRmKCJIZWxsbyIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0Mjk1OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDI5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNDMwMTogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0MzA0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxNDMyMTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIC4uLiIgMT4mNQorCisJCSAgQ1BQRkxBR1M9Ii1JJGNmX2FkZF9pbmNkaXIgJENQUEZMQUdTIgorCisgICAgICAgICAgY2ZfdG9wX2luY2Rpcj1gZWNobyAkY2ZfYWRkX2luY2RpciB8IHNlZCAtZSAncyUvaW5jbHVkZS8uKiQlL2luY2x1ZGUlJ2AKKyAgICAgICAgICB0ZXN0ICIkY2ZfdG9wX2luY2RpciIgPSAiJGNmX2FkZF9pbmNkaXIiICYmIGJyZWFrCisgICAgICAgICAgY2ZfYWRkX2luY2Rpcj0iJGNmX3RvcF9pbmNkaXIiCisJCWVsc2UKKwkJICBicmVhaworCQlmaQorCSAgZmkKKwlkb25lCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgLW4gIiR3aXRoX2hhc2hlZF9kYi9saWIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAkd2l0aF9oYXNoZWRfZGIvbGliCisgIGRvCisgICAgaWYgdGVzdCAkY2ZfYWRkX2xpYmRpciA9IC91c3IvbGliIDsgdGhlbgorICAgICAgOgorICAgIGVsaWYgdGVzdCAtZCAkY2ZfYWRkX2xpYmRpcgorICAgIHRoZW4KKyAgICAgIGNmX2hhdmVfbGliZGlyPW5vCisgICAgICBpZiB0ZXN0IC1uICIkTERGTEFHUyRMSUJTIiA7IHRoZW4KKyAgICAgICAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworICAgICAgICBmb3IgY2ZfdGVzdF9saWJkaXIgaW4gJExERkxBR1MgJExJQlMgOyBkbworICAgICAgICAgIGlmIHRlc3QgIi4kY2ZfdGVzdF9saWJkaXIiID0gIi4tTCRjZl9hZGRfbGliZGlyIiA7IHRoZW4KKyAgICAgICAgICAgIGNmX2hhdmVfbGliZGlyPXllczsgYnJlYWsKKyAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNmX2hhdmVfbGliZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjE0MzU1OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGggLi4uIiAxPiY1CisKKyAgICAgICAgTERGTEFHUz0iLUwkY2ZfYWRkX2xpYmRpciAkTERGTEFHUyIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKKworICAgIGZpCitlc2FjCisKK2VjaG8gIiRhc19tZToxNDM2NjogY2hlY2tpbmcgZm9yIGRiLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGIuaC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2RiX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDM3MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8ZGIuaD4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQzNzY6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjE0MzgyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2N2X2hlYWRlcl9kYl9oPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfaGVhZGVyX2RiX2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZToxNDQwMTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2RiX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9kYl9oIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9kYl9oID0geWVzOyB0aGVuCisKK2VjaG8gIiRhc19tZToxNDQwNTogY2hlY2tpbmcgZm9yIHZlcnNpb24gb2YgZGIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdmVyc2lvbiBvZiBkYi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb249dW5rbm93bgorCitmb3IgY2ZfZGJfdmVyc2lvbiBpbiAxIDIgMyA0IDUKK2RvCisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxNDQxNjogdGVzdGluZyBjaGVja2luZyBmb3IgZGIgdmVyc2lvbiAkY2ZfZGJfdmVyc2lvbiAuLi4iIDE+JjUKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQ0MTkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPGRiLmg+CisKKyNpZmRlZiBEQl9WRVJTSU9OX01BSk9SCisJLyogZGIyIChEQl9WRVJTSU9OX01BSk9SPTIpIGhhcyBhbHNvIERCX1ZFUlNJT05fTUlOT1IsIHRlc3RlZCB3aXRoIDcgKi8KKyNpZiAkY2ZfZGJfdmVyc2lvbiA9PSBEQl9WRVJTSU9OX01BSk9SCisJLyogb2sgKi8KKyNlbHNlCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCisjZWxzZQorI2lmICRjZl9kYl92ZXJzaW9uID09IDEKKwkvKiBvazogYXNzdW1pbmcgdGhpcyBpcyBEQiAxLjguNSAqLworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK0RCVCAqZm9vID0gMAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDQ0OTogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ0NTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ0NTU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDQ1ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKKwljZl9jdl9oYXNoZWRfZGJfdmVyc2lvbj0kY2ZfZGJfdmVyc2lvbgorCWJyZWFrCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorCitmaQorZWNobyAiJGFzX21lOjE0NDcyOiByZXN1bHQ6ICRjZl9jdl9oYXNoZWRfZGJfdmVyc2lvbiIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24iID4mNgorCitpZiB0ZXN0ICIkY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24iID0gdW5rbm93biA7IHRoZW4KKwl7IHsgZWNobyAiJGFzX21lOjE0NDc2OiBlcnJvcjogQ2Fubm90IGRldGVybWluZSB2ZXJzaW9uIG9mIGRiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgdmVyc2lvbiBvZiBkYiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorCitlY2hvICIkYXNfbWU6MTQ0ODE6IGNoZWNraW5nIGZvciBkYiBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGIgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9oYXNoZWRfZGJfbGlicytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjZl9jdl9oYXNoZWRfZGJfbGlicz11bmtub3duCitmb3IgY2ZfZGJfbGlicyBpbiAiIiBkYiRjZl9jdl9oYXNoZWRfZGJfdmVyc2lvbiBkYi0kY2ZfY3ZfaGFzaGVkX2RiX3ZlcnNpb24gZGIgJycKK2RvCisJY2Zfc2F2ZV9saWJzPSIkTElCUyIKKwlpZiB0ZXN0IC1uICIkY2ZfZGJfbGlicyI7IHRoZW4KKwkJTElCUz0iLWwkY2ZfZGJfbGlicyAkTElCUyIKKwlmaQorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTQ0OTU6IHRlc3RpbmcgY2hlY2tpbmcgZm9yIGxpYnJhcnkgIiRjZl9kYl9saWJzIiAuLi4iIDE+JjUKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQ0OTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPGRiLmg+CisKK2ludAorbWFpbiAoKQoreworCisJY2hhciAqcGF0aCA9ICIvdG1wL2ZvbyI7CisjaWZkZWYgREJfVkVSU0lPTl9NQUpPUgorI2lmIERCX1ZFUlNJT05fTUFKT1IgPj0gNAorCURCICpyZXN1bHQgPSAwOworCWRiX2NyZWF0ZSgmcmVzdWx0LCBOVUxMLCAwKTsKKwlyZXN1bHQtPm9wZW4ocmVzdWx0LAorCQlOVUxMLAorCQlwYXRoLAorCQlwYXRoLAorCQlEQl9IQVNILAorCQlEQl9DUkVBVEUsCisJCTA2NDQpOworI2VsaWYgREJfVkVSU0lPTl9NQUpPUiA+PSAzCisJREIgKnJlc3VsdCA9IDA7CisJZGJfY3JlYXRlKCZyZXN1bHQsIE5VTEwsIDApOworCXJlc3VsdC0+b3BlbihyZXN1bHQsCisJCXBhdGgsCisJCXBhdGgsCisJCURCX0hBU0gsCisJCURCX0NSRUFURSwKKwkJMDY0NCk7CisjZWxpZiBEQl9WRVJTSU9OX01BSk9SID49IDIKKwlEQiAqcmVzdWx0ID0gMDsKKwlkYl9vcGVuKHBhdGgsCisJCURCX0hBU0gsCisJCURCX0NSRUFURSwKKwkJMDY0NCwKKwkJKERCX0VOViAqKSAwLAorCQkoREJfSU5GTyAqKSAwLAorCQkmcmVzdWx0KTsKKyNlbmRpZiAvKiBEQl9WRVJTSU9OX01BSk9SICovCisjZWxzZQorCURCICpyZXN1bHQgPSBkYm9wZW4ocGF0aCwKKwkJICAgICAyLAorCQkgICAgIDA2NDQsCisJCSAgICAgREJfSEFTSCwKKwkJICAgICAwKTsKKyNlbmRpZgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocmVzdWx0ICE9IDApCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0NTUzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDU1NjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0NTU5OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ1NjI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisJaWYgdGVzdCAtbiAiJGNmX2RiX2xpYnMiIDsgdGhlbgorCQljZl9jdl9oYXNoZWRfZGJfbGlicz0kY2ZfZGJfbGlicworCWVsc2UKKwkJY2ZfY3ZfaGFzaGVkX2RiX2xpYnM9ZGVmYXVsdAorCWZpCisJTElCUz0iJGNmX3NhdmVfbGlicyIKKwlicmVhaworCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTElCUz0iJGNmX3NhdmVfbGlicyIKK2RvbmUKKworZmkKK2VjaG8gIiRhc19tZToxNDU4MjogcmVzdWx0OiAkY2ZfY3ZfaGFzaGVkX2RiX2xpYnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X2hhc2hlZF9kYl9saWJzIiA+JjYKKworCWlmIHRlc3QgIiRjZl9jdl9oYXNoZWRfZGJfbGlicyIgPSB1bmtub3duIDsgdGhlbgorCQl7IHsgZWNobyAiJGFzX21lOjE0NTg2OiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBsaWJyYXJ5IGZvciBkYiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZGV0ZXJtaW5lIGxpYnJhcnkgZm9yIGRiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJZWxpZiB0ZXN0ICIkY2ZfY3ZfaGFzaGVkX2RiX2xpYnMiICE9IGRlZmF1bHQgOyB0aGVuCisJCUxJQlM9Ii1sJGNmX2N2X2hhc2hlZF9kYl9saWJzICRMSUJTIgorCWZpCitmaQorCitlbHNlCisKKwl7IHsgZWNobyAiJGFzX21lOjE0NTk2OiBlcnJvcjogQ2Fubm90IGZpbmQgZGIuaCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDYW5ub3QgZmluZCBkYi5oIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCisKK2ZpCisKK2lmIHRlc3QgLXogIiRjZl91c2VyX0NGTEFHUyIgJiYgdGVzdCAiJHdpdGhfbm9fbGVha3MiID0gbm8gOyB0aGVuCisJQ0ZMQUdTPWBlY2hvICR7Q0ZMQUdTfSB8IHNlZCAtZSAncyUtZyAlJScgLWUgJ3MlLWckJSUnYAorCUNYWEZMQUdTPWBlY2hvICR7Q1hYRkxBR1N9IHwgc2VkIC1lICdzJS1nICUlJyAtZSAncyUtZyQlJSdgCitmaQorCisjIEp1c3QgaW4gY2FzZSwgY2hlY2sgaWYgdGhlIEMgY29tcGlsZXIgaGFzIGEgYm9vbCB0eXBlLgorCitlY2hvICIkYXNfbWU6MTQ2MTE6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBpbmNsdWRlIHN0ZGJvb2wuaCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIHNob3VsZCBpbmNsdWRlIHN0ZGJvb2wuaC4uLiAkRUNIT19DIiA+JjYKKworaWYgdGVzdCAiJHtjZl9jdl9oZWFkZXJfc3RkYm9vbF9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0NjE5ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50CittYWluICgpCit7Citib29sIGZvbyA9IGZhbHNlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0NjMxOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDYzNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNDYzNzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0NjQwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaD0wCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQ2NDcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZuZGVmIF9fQkVPU19fCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworYm9vbCBmb28gPSBmYWxzZQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDY2MzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ2NjY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ2Njk6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDY3MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2hlYWRlcl9zdGRib29sX2g9MQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTAKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2lmIHRlc3QgIiRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IDEKK3RoZW4JZWNobyAiJGFzX21lOjE0Njg2OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQllY2hvICIkYXNfbWU6MTQ2ODg6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZWNobyAiJGFzX21lOjE0NjkyOiBjaGVja2luZyBmb3IgYnVpbHRpbiBib29sIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYnVpbHRpbiBib29sIHR5cGUuLi4gJEVDSE9fQyIgPiY2CisKK2lmIHRlc3QgIiR7Y2ZfY3ZfY2NfYm9vbF90eXBlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0NzAwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK2ludAorbWFpbiAoKQoreworYm9vbCB4ID0gZmFsc2UKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ3MTU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0NzE4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0NzIxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ3MjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9jY19ib29sX3R5cGU9MQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9jY19ib29sX3R5cGU9MAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorCitpZiB0ZXN0ICIkY2ZfY3ZfY2NfYm9vbF90eXBlIiA9IDEKK3RoZW4JZWNobyAiJGFzX21lOjE0NzM3OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQllY2hvICIkYXNfbWU6MTQ3Mzk6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworIyBDaGVjayBmb3IgQysrIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcyAoYW5kIGVuc3VyZSB0aGF0IGl0J3MgdGhlcmUhKQoraWYgdGVzdCAtbiAiJENYWCIgOyB0aGVuCisJYWNfZXh0PWNjCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKK2lmIHRlc3QgLW4gIiRHWFgiIDsgdGhlbgorY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorb3MyKikgIyh2aQorCWNmX3N0ZGNwcF9saWJuYW1lPXN0ZGNwcAorCTs7CisqKQorCWNmX3N0ZGNwcF9saWJuYW1lPXN0ZGMrKworCTs7Citlc2FjCitlY2hvICIkYXNfbWU6MTQ3NjE6IGNoZWNraW5nIGZvciBsaWJyYXJ5ICRjZl9zdGRjcHBfbGlibmFtZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5ICRjZl9zdGRjcHBfbGlibmFtZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfbGlic3RkY3BwK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljZl9zYXZlPSIkTElCUyIKKwlMSUJTPSIkTElCUyAtbCRjZl9zdGRjcHBfbGlibmFtZSIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQ3NzAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3Ryc3RyZWFtLmg+CitpbnQKK21haW4gKCkKK3sKKworY2hhciBidWZbODBdOworc3Ryc3RyZWFtYnVmIGZvbyhidWYsIHNpemVvZihidWYpKQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDc4NjogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ3ODk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNDc5MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0Nzk1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfbGlic3RkY3BwPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl9saWJzdGRjcHA9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTElCUz0iJGNmX3NhdmUiCisKK2ZpCitlY2hvICIkYXNfbWU6MTQ4MDc6IHJlc3VsdDogJGNmX2N2X2xpYnN0ZGNwcCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfbGlic3RkY3BwIiA+JjYKK3Rlc3QgIiRjZl9jdl9saWJzdGRjcHAiID0geWVzICYmIENYWExJQlM9IiRDWFhMSUJTIC1sJGNmX3N0ZGNwcF9saWJuYW1lIgorZmkKKworCWVjaG8gIiRhc19tZToxNDgxMjogY2hlY2tpbmcgd2hldGhlciAkQ1hYIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENYWCB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X3Byb2dfQ1hYX2NfbytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8Q0ZfRU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkKK3sKKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorQ0ZfRU9GCisjIFdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbgorIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KK2FjX3RyeT0nJENYWCAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0ODI4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ4MzE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE0ODMzOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTQ4MzY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsKK3RoZW4KKyAgZXZhbCBjZl9jdl9wcm9nX0NYWF9jX289eWVzCitlbHNlCisgIGV2YWwgY2ZfY3ZfcHJvZ19DWFhfY19vPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCitpZiB0ZXN0ICRjZl9jdl9wcm9nX0NYWF9jX28gPSB5ZXM7IHRoZW4KKyAgZWNobyAiJGFzX21lOjE0ODQ3OiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6MTQ4NTA6IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworCWNhc2UgJEdYWF9WRVJTSU9OIGluCisJMSp8Mi4wLTYqKQorCQljZl9jeHhfbGlicmFyeT15ZXMKKwkJOzsKKwkqLTIuNyp8Mi43KikKKworY2ZfY3h4X2xpYnJhcnk9dW5rbm93bgorY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorb3MyKikgIyh2aQorCWNmX2dwcF9saWJuYW1lPWdwcAorCTs7CisqKQorCWNmX2dwcF9saWJuYW1lPWcrKworCTs7Citlc2FjCitpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCWVjaG8gIiRhc19tZToxNDg3MDogY2hlY2tpbmcgZm9yIGxpYiRjZl9ncHBfbGlibmFtZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWIkY2ZfZ3BwX2xpYm5hbWUuLi4gJEVDSE9fQyIgPiY2CisJY2Zfc2F2ZT0iJExJQlMiCisJTElCUz0iJExJQlMgLWwkY2ZfZ3BwX2xpYm5hbWUiCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNDg3NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwkY2ZfZ3BwX2xpYm5hbWUvYnVpbHRpbi5oPgorCitpbnQKK21haW4gKCkKK3sKK3R3b19hcmdfZXJyb3JfaGFuZGxlcl90IGZvbzIgPSBsaWJfZXJyb3JfaGFuZGxlcgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ4ODk6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0ODkyOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ4OTU6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDg5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N4eF9saWJyYXJ5PXllcworCSBDWFhMSUJTPSIkQ1hYTElCUyAtbCRjZl9ncHBfbGlibmFtZSIKKwkgaWYgdGVzdCAiJGNmX2dwcF9saWJuYW1lIiA9IGNwcCA7IHRoZW4KKwkgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9HUFBfQlVJTFRJTl9IIDEKK0VPRgorCisJIGVsc2UKKwkgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9HWFhfQlVJTFRJTl9IIDEKK0VPRgorCisJIGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTQ5MTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8YnVpbHRpbi5oPgorCitpbnQKK21haW4gKCkKK3sKK3R3b19hcmdfZXJyb3JfaGFuZGxlcl90IGZvbzIgPSBsaWJfZXJyb3JfaGFuZGxlcgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ5MzE6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE0OTM0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTQ5Mzc6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNDk0MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N4eF9saWJyYXJ5PXllcworCSBDWFhMSUJTPSIkQ1hYTElCUyAtbCRjZl9ncHBfbGlibmFtZSIKKwkgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9CVUlMVElOX0ggMQorRU9GCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfY3h4X2xpYnJhcnk9bm8KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCUxJQlM9IiRjZl9zYXZlIgorCWVjaG8gIiRhc19tZToxNDk1NzogcmVzdWx0OiAkY2ZfY3h4X2xpYnJhcnkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N4eF9saWJyYXJ5IiA+JjYKK2ZpCisKKwkJOzsKKwkqKQorCQljZl9jeHhfbGlicmFyeT1ubworCQk7OworCWVzYWMKKworCWFjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorZWNobyAiJGFzX21lOjE0OTczOiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFhDUFArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE0OTkwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNDk5NTogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTUwMDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUwMjQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1MDI4OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxNTAzNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCisKK2ZpCisgIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorZmkKK2VjaG8gIiRhc19tZToxNTA3MTogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDWFhDUFAiID4mNgorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNsaW5lIDE1MDgxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTA4NjogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBlZ3JlcCAtdiAnXiAqXCsnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6MTUwOTI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUxMTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1MTE5OiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGVncmVwIC12ICdeICpcKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZToxNTEyNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICA6CitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6MTUxNTM6IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjayIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjayIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworYWNfZXh0PWNjCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKK2ZvciBhY19oZWFkZXIgaW4gaW9zdHJlYW0gdHlwZWluZm8KK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZToxNTE2ODogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNTE3NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUxNzg6IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZWdyZXAgLXYgJ14gKlwrJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOjE1MTg0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOjE1MjAzOiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK0VPRgorCitmaQorZG9uZQorCisgICAgaWYgdGVzdCB4IiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iID0geHllcyA7IHRoZW4KKyAgICAgICAgZWNobyAiJGFzX21lOjE1MjE0OiBjaGVja2luZyBpZiBpb3N0cmVhbSB1c2VzIHN0ZC1uYW1lc3BhY2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBpb3N0cmVhbSB1c2VzIHN0ZC1uYW1lc3BhY2UuLi4gJEVDSE9fQyIgPiY2CisgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUyMTcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8aW9zdHJlYW0+Cit1c2luZyBzdGQ6OmVuZGw7Cit1c2luZyBzdGQ6OmNlcnI7CitpbnQKK21haW4gKCkKK3sKKworY2VyciA8PCAidGVzdGluZyIgPDwgZW5kbDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTIzNDogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUyMzc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUyNDA6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTI0MzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2lvc3RyZWFtX25hbWVzcGFjZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2ZfaW9zdHJlYW1fbmFtZXNwYWNlPW5vCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIGVjaG8gIiRhc19tZToxNTI1MjogcmVzdWx0OiAkY2ZfaW9zdHJlYW1fbmFtZXNwYWNlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9pb3N0cmVhbV9uYW1lc3BhY2UiID4mNgorICAgICAgICBpZiB0ZXN0ICIkY2ZfaW9zdHJlYW1fbmFtZXNwYWNlIiA9IHllcyA7IHRoZW4KKyAgICAgICAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIElPU1RSRUFNX05BTUVTUEFDRSAxCitFT0YKKworICAgICAgICBmaQorICAgIGZpCisKK2VjaG8gIiRhc19tZToxNTI2MjogY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGluY2x1ZGUgc3RkYm9vbC5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGluY2x1ZGUgc3RkYm9vbC5oLi4uICRFQ0hPX0MiID4mNgorCitpZiB0ZXN0ICIke2NmX2N2X2hlYWRlcl9zdGRib29sX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUyNzAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQKK21haW4gKCkKK3sKK2Jvb2wgZm9vID0gZmFsc2UKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUyODI6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1Mjg1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1Mjg4OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUyOTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2NhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNTI5OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZm5kZWYgX19CRU9TX18KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7Citib29sIGZvbyA9IGZhbHNlCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1MzE0OiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTMxNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNTMyMDogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1MzIzOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaD0xCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2hlYWRlcl9zdGRib29sX2g9MAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworaWYgdGVzdCAiJGNmX2N2X2hlYWRlcl9zdGRib29sX2giID0gMQordGhlbgllY2hvICIkYXNfbWU6MTUzMzc6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CitlbHNlCWVjaG8gIiRhc19tZToxNTMzOTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitlY2hvICIkYXNfbWU6MTUzNDM6IGNoZWNraW5nIGZvciBidWlsdGluIGJvb2wgdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBidWlsdGluIGJvb2wgdHlwZS4uLiAkRUNIT19DIiA+JjYKKworaWYgdGVzdCAiJHtjZl9jdl9idWlsdGluX2Jvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTUzNTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworaW50CittYWluICgpCit7Citib29sIHggPSBmYWxzZQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTM2NjogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTUzNjk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTUzNzI6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTM3NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X2J1aWx0aW5fYm9vbD0xCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2J1aWx0aW5fYm9vbD0wCitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCisKK2lmIHRlc3QgIiRjZl9jdl9idWlsdGluX2Jvb2wiID0gMQordGhlbgllY2hvICIkYXNfbWU6MTUzODg6IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CitlbHNlCWVjaG8gIiRhc19tZToxNTM5MDogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitlY2hvICIkYXNfbWU6MTUzOTQ6IGNoZWNraW5nIGZvciBzaXplIG9mIGJvb2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2l6ZSBvZiBib29sLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl90eXBlX29mX2Jvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCXJtIC1mIGNmX3Rlc3Qub3V0CisJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgY2ZfY3ZfdHlwZV9vZl9ib29sPXVua25vd24KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNTQwNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKworI2lmZGVmIEhBVkVfR1hYX0JVSUxUSU5fSAorI2luY2x1ZGUgPGcrKy9idWlsdGluLmg+CisjZWxpZiBIQVZFX0dQUF9CVUlMVElOX0gKKyNpbmNsdWRlIDxncHAvYnVpbHRpbi5oPgorI2VsaWYgSEFWRV9CVUlMVElOX0gKKyNpbmNsdWRlIDxidWlsdGluLmg+CisjZW5kaWYKKworI2Vsc2UKKworI2lmICRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKKyNlbmRpZgorCittYWluKCkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKCJjZl90ZXN0Lm91dCIsICJ3Iik7CisJaWYgKGZwICE9IDApIHsKKwkJYm9vbCB4ID0gdHJ1ZTsKKwkJaWYgKChib29sKSgteCkgPj0gMCkKKwkJCWZwdXRzKCJ1bnNpZ25lZCAiLCBmcCk7CisJCWlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKGludCkpICAgICAgIGZwdXRzKCJpbnQiLCAgZnApOworCQllbHNlIGlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKGNoYXIpKSBmcHV0cygiY2hhciIsIGZwKTsKKwkJZWxzZSBpZiAoc2l6ZW9mKHgpID09IHNpemVvZihzaG9ydCkpZnB1dHMoInNob3J0IixmcCk7CisJCWVsc2UgaWYgKHNpemVvZih4KSA9PSBzaXplb2YobG9uZykpIGZwdXRzKCJsb25nIiwgZnApOworCQlmY2xvc2UoZnApOworCX0KKwkke2NmX2N2X21haW5fcmV0dXJuOi1yZXR1cm59KDApOworfQorCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTU0NDc6IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1NDUwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNTQ1MjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1NDU1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgY2ZfY3ZfdHlwZV9vZl9ib29sPWBjYXQgY2ZfdGVzdC5vdXRgCisJCSBpZiB0ZXN0IC16ICIkY2ZfY3ZfdHlwZV9vZl9ib29sIjsgdGhlbgorCQkgICBjZl9jdl90eXBlX29mX2Jvb2w9dW5rbm93bgorCQkgZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X3R5cGVfb2ZfYm9vbD11bmtub3duCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCisKKwlybSAtZiBjZl90ZXN0Lm91dAorZWNobyAiJGFzX21lOjE1NDczOiByZXN1bHQ6ICRjZl9jdl90eXBlX29mX2Jvb2wiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3R5cGVfb2ZfYm9vbCIgPiY2CitpZiB0ZXN0ICIkY2ZfY3ZfdHlwZV9vZl9ib29sIiA9IHVua25vd24gOyB0aGVuCisJY2FzZSAuJE5DVVJTRVNfQk9PTCBpbiAjKHZpCisJLmF1dG98LikgTkNVUlNFU19CT09MPXVuc2lnbmVkOzsKKwllc2FjCisJeyBlY2hvICIkYXNfbWU6MTU0Nzk6IFdBUk5JTkc6IEFzc3VtaW5nICROQ1VSU0VTX0JPT0wgZm9yIHR5cGUgb2YgYm9vbCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEFzc3VtaW5nICROQ1VSU0VTX0JPT0wgZm9yIHR5cGUgb2YgYm9vbCIgPiYyO30KKwljZl9jdl90eXBlX29mX2Jvb2w9JE5DVVJTRVNfQk9PTAorZmkKKworZWNobyAiJGFzX21lOjE1NDg0OiBjaGVja2luZyBmb3Igc3BlY2lhbCBkZWZpbmVzIG5lZWRlZCBmb3IgZXRpcC5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNwZWNpYWwgZGVmaW5lcyBuZWVkZWQgZm9yIGV0aXAuaC4uLiAkRUNIT19DIiA+JjYKK2NmX3NhdmVfQ1hYRkxBR1M9IiRDWFhGTEFHUyIKK2NmX3Jlc3VsdD0ibm9uZSIKK2ZvciBjZl9tYXRoIGluICIiIE1BVEhfSAorZG8KK2ZvciBjZl9leGNwIGluICIiIE1BVEhfRVhDRVBUSU9OCitkbworCUNYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyAtSSR7c3JjZGlyfS9jKysgLUkke3NyY2Rpcn0vbWVudSAtSSR7c3JjZGlyfS9pbmNsdWRlIgorCXRlc3QgLW4gIiRjZl9tYXRoIiAmJiBDWFhGTEFHUz0iJENYWEZMQUdTIC1ERVRJUF9ORUVEU18ke2NmX21hdGh9IgorCXRlc3QgLW4gIiRjZl9leGNwIiAmJiBDWFhGTEFHUz0iJENYWEZMQUdTIC1ERVRJUF9ORUVEU18ke2NmX2V4Y3B9IgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNTQ5NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxldGlwLmguaW4+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1NTEwOiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTUxMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisgICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZToxNTUxNjogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1NTE5OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCXRlc3QgLW4gIiRjZl9tYXRoIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIEVUSVBfTkVFRFNfJHtjZl9tYXRofSAxCitFT0YKKworCXRlc3QgLW4gIiRjZl9leGNwIiAmJiBjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIEVUSVBfTkVFRFNfJHtjZl9leGNwfSAxCitFT0YKKworCWNmX3Jlc3VsdD0iJGNmX21hdGggJGNmX2V4Y3AiCisJYnJlYWsKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitkb25lCitlY2hvICIkYXNfbWU6MTU1NDA6IHJlc3VsdDogJGNmX3Jlc3VsdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfcmVzdWx0IiA+JjYKK0NYWEZMQUdTPSIkY2Zfc2F2ZV9DWFhGTEFHUyIKKworaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KK2VjaG8gIiRhc19tZToxNTU0NTogY2hlY2tpbmcgaWYgJENYWCBhY2NlcHRzIHBhcmFtZXRlciBpbml0aWFsaXphdGlvbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRDWFggYWNjZXB0cyBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2NmX2N2X2NwcF9wYXJhbV9pbml0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwlhY19leHQ9Y2MKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CithY19tYWluX3JldHVybj1yZXR1cm4KKworCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X2NwcF9wYXJhbV9pbml0PXVua25vd24KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNTU2MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2NsYXNzIFRFU1QgeworcHJpdmF0ZToKKwlpbnQgdmFsdWU7CitwdWJsaWM6CisJVEVTVChpbnQgeCA9IDEpOworCX5URVNUKCk7Cit9OworCitURVNUOjpURVNUKGludCB4ID0gMSkJLy8gc29tZSBjb21waWxlcnMgZG8gbm90IGxpa2Ugc2Vjb25kIGluaXRpYWxpemVyCit7CisJdmFsdWUgPSB4OworfQordm9pZCBtYWluKCkgeyB9CisKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZToxNTU4MTogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTU1ODQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1NTg2OiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTU1ODk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9jcHBfcGFyYW1faW5pdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2NwcF9wYXJhbV9pbml0PW5vCitmaQorcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisJYWNfZXh0PWNjCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKK2ZpCitlY2hvICIkYXNfbWU6MTU2MDg6IHJlc3VsdDogJGNmX2N2X2NwcF9wYXJhbV9pbml0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9jcHBfcGFyYW1faW5pdCIgPiY2CitmaQordGVzdCAiJGNmX2N2X2NwcF9wYXJhbV9pbml0IiA9IHllcyAmJiBjYXQgPj5jb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBDUFBfSEFTX1BBUkFNX0lOSVQgMQorRU9GCisKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisKK2VjaG8gIiRhc19tZToxNTYxNzogY2hlY2tpbmcgaWYgJENYWCBhY2NlcHRzIHN0YXRpY19jYXN0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJENYWCBhY2NlcHRzIHN0YXRpY19jYXN0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtjZl9jdl9jcHBfc3RhdGljX2Nhc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworCWFjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2FjX21haW5fcmV0dXJuPXJldHVybgorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjbGluZSAxNTYzMSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2NsYXNzIE5DdXJzZXNQYW5lbAoreworcHVibGljOgorICBOQ3Vyc2VzUGFuZWwoaW50IG5saW5lcywKKwkgICAgICAgaW50IG5jb2xzLAorCSAgICAgICBpbnQgYmVnaW5feSA9IDAsCisJICAgICAgIGludCBiZWdpbl94ID0gMCkKKyAgeworICB9CisKKyAgfk5DdXJzZXNQYW5lbCgpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTkN1cnNlc1VzZXJQYW5lbCA6IHB1YmxpYyBOQ3Vyc2VzUGFuZWwKK3sKK3B1YmxpYzoKKyAgTkN1cnNlc1VzZXJQYW5lbCAoaW50IG5saW5lcywKKwkJICAgIGludCBuY29scywKKwkJICAgIGludCBiZWdpbl95ID0gMCwKKwkJICAgIGludCBiZWdpbl94ID0gMCwKKwkJICAgIGNvbnN0IFQqIHBfVXNlckRhdGEgPSBzdGF0aWNfY2FzdDxUKj4oMCkpCisgICAgOiBOQ3Vyc2VzUGFuZWwgKG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpCisgIHsKKyAgfTsKKyAgTkN1cnNlc1VzZXJQYW5lbChjb25zdCBUKiBwX1VzZXJEYXRhID0gc3RhdGljX2Nhc3Q8VCo+KDApKSA6IE5DdXJzZXNQYW5lbCgpCisgIHsKKyAgfTsKKworICB2aXJ0dWFsIH5OQ3Vyc2VzVXNlclBhbmVsKCkge307Cit9OworCitpbnQKK21haW4gKCkKK3sKKworCWNvbnN0IGNoYXIqIHBfVXNlckRhdGEgPSBzdGF0aWNfY2FzdDxjaGFyKj4oMCkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTU2NzU6IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOjE1Njc4OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKyAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1NjgxOiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6MTU2ODQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBjZl9jdl9jcHBfc3RhdGljX2Nhc3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2NmX2N2X2NwcF9zdGF0aWNfY2FzdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisJYWNfZXh0PWNjCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorYWNfbWFpbl9yZXR1cm49cmV0dXJuCisKK2ZpCitlY2hvICIkYXNfbWU6MTU3MDI6IHJlc3VsdDogJGNmX2N2X2NwcF9zdGF0aWNfY2FzdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfY3BwX3N0YXRpY19jYXN0IiA+JjYKKworZmkKKwordGVzdCAiJGNmX2N2X2NwcF9zdGF0aWNfY2FzdCIgPSB5ZXMgJiYgY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQ1BQX0hBU19TVEFUSUNfQ0FTVCAxCitFT0YKKworCUNYWF9BUj0nJChBUiknCisJQ1hYX0FSX09QVFM9JyQoQVJfT1BUUyknCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCWlyaXgqKSAjKHZpCisJICAgIGlmIHRlc3QgIiRHWFgiICE9IHllcyA7IHRoZW4KKwkJQ1hYX0FSPSckKENYWCknCisJCUNYWF9BUl9PUFRTPSctYXIgLW8nCisJICAgIGZpCisJICAgIDs7CisJc2NvMy4ydjUqKSAjKHZpCisJICAgIENYWExERkxBR1M9Ii11IG1haW4iCisJICAgIDs7CisJc29sYXJpczIqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiAhPSB5ZXMgOyB0aGVuCisJCUNYWF9BUj0nJChDWFgpJworCQlDWFhfQVJfT1BUUz0nLXhhciAtbycKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKK2Vsc2UKKwljZl9jeHhfbGlicmFyeT1ubworCWNmX2N2X2J1aWx0aW5fYm9vbD0xCisKKwkjIEp1c3QgYmVjYXVzZSB3ZSBhcmUgbm90IGNvbmZpZ3VyaW5nIGFnYWluc3QgQysrIHJpZ2h0IG5vdyBkb2VzIG5vdAorCSMgbWVhbiB0aGF0IGEgdXNlciB3aWxsIG5vdCB3YW50IHRvIHVzZSBDKysuICBTb21lIGRpc3RyaWJ1dG9ycyBkaXNhYmxlCisJIyB0aGUgQysrIHBvcnRpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIGFzIGEgc2hvcnRjdXQgKG9yIGp1c3QgdG8gYXZvaWQKKwkjIGNvbXBpbGluZyB0aGUgZGVtbyBpbiB0aGUgYysrIGRpcmVjdG9yeSkuICBTbyB3ZSBuZWVkIGEgcmVhc29uYWJsZQorCSMgZGVmYXVsdCBmb3IgdGhlICdib29sJyB0eXBlLgorCSMKKwkjIENhdmVhdDogc2luY2UgdGhlIHN0b3JhZ2Ugb2YgdGhlIGJvb2wgdHlwZSBpcyBub3Qgc3RhbmRhcmRpemVkLCBpdAorCSMgbWF5IGNoYW5nZS4KKworCWlmIHRlc3QgIiROQ1VSU0VTX0JPT0wiICE9IGF1dG8gOyB0aGVuCisJCWNmX2N2X3R5cGVfb2ZfYm9vbD0kTkNVUlNFU19CT09MCisJCWNmX2N2X2hlYWRlcl9zdGRib29sX2g9MAorCWVsc2UKKwkJaWYgdGVzdCAiJGNmX2N2X2hlYWRlcl9zdGRib29sX2giID0gMSA7IHRoZW4KKworZWNobyAiJGFzX21lOjE1NzUwOiBjaGVja2luZyBmb3Igc2l6ZSBvZiBib29sIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNpemUgb2YgYm9vbC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7Y2ZfY3ZfdHlwZV9vZl9ib29sK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwlybSAtZiBjZl90ZXN0Lm91dAorCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X3R5cGVfb2ZfYm9vbD11bmtub3duCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorI2xpbmUgMTU3NjEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisKKyNpZmRlZiBIQVZFX0dYWF9CVUlMVElOX0gKKyNpbmNsdWRlIDxnKysvYnVpbHRpbi5oPgorI2VsaWYgSEFWRV9HUFBfQlVJTFRJTl9ICisjaW5jbHVkZSA8Z3BwL2J1aWx0aW4uaD4KKyNlbGlmIEhBVkVfQlVJTFRJTl9ICisjaW5jbHVkZSA8YnVpbHRpbi5oPgorI2VuZGlmCisKKyNlbHNlCisKKyNpZiAkY2ZfY3ZfaGVhZGVyX3N0ZGJvb2xfaAorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCisjZW5kaWYKKworbWFpbigpCit7CisJRklMRSAqZnAgPSBmb3BlbigiY2ZfdGVzdC5vdXQiLCAidyIpOworCWlmIChmcCAhPSAwKSB7CisJCWJvb2wgeCA9IHRydWU7CisJCWlmICgoYm9vbCkoLXgpID49IDApCisJCQlmcHV0cygidW5zaWduZWQgIiwgZnApOworCQlpZiAoc2l6ZW9mKHgpID09IHNpemVvZihpbnQpKSAgICAgICBmcHV0cygiaW50IiwgIGZwKTsKKwkJZWxzZSBpZiAoc2l6ZW9mKHgpID09IHNpemVvZihjaGFyKSkgZnB1dHMoImNoYXIiLCBmcCk7CisJCWVsc2UgaWYgKHNpemVvZih4KSA9PSBzaXplb2Yoc2hvcnQpKWZwdXRzKCJzaG9ydCIsZnApOworCQllbHNlIGlmIChzaXplb2YoeCkgPT0gc2l6ZW9mKGxvbmcpKSBmcHV0cygibG9uZyIsIGZwKTsKKwkJZmNsb3NlKGZwKTsKKwl9CisJJHtjZl9jdl9tYWluX3JldHVybjotcmV0dXJufSgwKTsKK30KKworX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOjE1ODAzOiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTgwNjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6MTU4MDg6IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZToxNTgxMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGNmX2N2X3R5cGVfb2ZfYm9vbD1gY2F0IGNmX3Rlc3Qub3V0YAorCQkgaWYgdGVzdCAteiAiJGNmX2N2X3R5cGVfb2ZfYm9vbCI7IHRoZW4KKwkJICAgY2ZfY3ZfdHlwZV9vZl9ib29sPXVua25vd24KKwkJIGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitjZl9jdl90eXBlX29mX2Jvb2w9dW5rbm93bgorZmkKK3JtIC1mIGNvcmUgY29yZS4qICouY29yZSBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorCisJcm0gLWYgY2ZfdGVzdC5vdXQKK2VjaG8gIiRhc19tZToxNTgyOTogcmVzdWx0OiAkY2ZfY3ZfdHlwZV9vZl9ib29sIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl90eXBlX29mX2Jvb2wiID4mNgoraWYgdGVzdCAiJGNmX2N2X3R5cGVfb2ZfYm9vbCIgPSB1bmtub3duIDsgdGhlbgorCWNhc2UgLiROQ1VSU0VTX0JPT0wgaW4gIyh2aQorCS5hdXRvfC4pIE5DVVJTRVNfQk9PTD11bnNpZ25lZDs7CisJZXNhYworCXsgZWNobyAiJGFzX21lOjE1ODM1OiBXQVJOSU5HOiBBc3N1bWluZyAkTkNVUlNFU19CT09MIGZvciB0eXBlIG9mIGJvb2wiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBBc3N1bWluZyAkTkNVUlNFU19CT09MIGZvciB0eXBlIG9mIGJvb2wiID4mMjt9CisJY2ZfY3ZfdHlwZV9vZl9ib29sPSROQ1VSU0VTX0JPT0wKK2ZpCisKKwkJZWxzZQorCQkJZWNobyAiJGFzX21lOjE1ODQxOiBjaGVja2luZyBmb3IgZmFsbGJhY2sgdHlwZSBvZiBib29sIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZhbGxiYWNrIHR5cGUgb2YgYm9vbC4uLiAkRUNIT19DIiA+JjYKKwkJCWNhc2UgIiRob3N0X2NwdSIgaW4gIyh2aQorCQkJaT84NikJY2ZfY3ZfdHlwZV9vZl9ib29sPWNoYXIJOzsgIyh2aQorCQkJKikJY2ZfY3ZfdHlwZV9vZl9ib29sPWludAk7OworCQkJZXNhYworCQkJZWNobyAiJGFzX21lOjE1ODQ3OiByZXN1bHQ6ICRjZl9jdl90eXBlX29mX2Jvb2wiID4mNQorZWNobyAiJHtFQ0hPX1R9JGNmX2N2X3R5cGVfb2ZfYm9vbCIgPiY2CisJCWZpCisJZmkKK2ZpCisKKyMgSWYgdGhlIEMgY29tcGlsZXIgZGlkIG5vdCBkZWNsYXJlIGJvb2wsIGFuZCB3ZSBkaWQgbm90IGRldGVybWluZSB0aGF0IHRoZSBDKysKKyMgY29tcGlsZXIgZG9lcyBub3QgZGVjbGFyZSBib29sLCB0dXJuIG9uIGFuIGlmZGVmIGluIGN1cnNlcy5oIHRoYXQgbWFrZXMgdGhlCisjIG5jdXJzZXMgbGlicmFyeSB1c2UgdGhlIHNhbWUgdHlwZSBhcyBDKysgYm9vbC4gIE5vdGUgdGhhdCB0aGlzIGFsbG93cyBvbmUgdG8KKyMgc3BlY2lmeSB0aGUgdHlwZSBvZiBib29sIGluIGEgY29uZmlndXJlLXNjcmlwdCBvcHRpb24gYW5kIHBvc3Rwb25lCisjIGludGVncmF0aW9uIHdpdGggdGhlIEMrKyBjb21waWxlciBwcm92aWRlZCB0aGF0IHRoZSB0eXBlcyBhcmUgY29tcGF0aWJsZS4KK1VTRV9DWFhfQk9PTD0xCitpZiB0ZXN0ICRjZl9jdl9jY19ib29sX3R5cGUgPSAxCit0aGVuCisJIyBvb3BzOiBDIGhhcyBhIGJvb2wuICBVbmxpa2VseSwgYnV0IEMrKyBjb3VsZCBkaWZmZXIuCisJVVNFX0NYWF9CT09MPTAKK2VsaWYgdGVzdCAkY2ZfY3ZfYnVpbHRpbl9ib29sID0gMAordGhlbgorCSMgQysrIGhhcyBubyBib29sCisJVVNFX0NYWF9CT09MPTAKK2Vsc2UKKwkjIHRoaXMgaXMgdGhlIG5vcm1hbCBjYXNlCisJVVNFX0NYWF9CT09MPSdkZWZpbmVkKF9fY3BsdXNwbHVzKScKK2ZpCisKK2lmIHRlc3QgLWYgIiR7c3JjZGlyfS9BZGE5NS9NYWtlZmlsZS5pbiIgOyB0aGVuCisKK2lmIHRlc3QgIiRjZl93aXRoX2FkYSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAibm8iOyB0aGVuCisJeyBlY2hvICIkYXNfbWU6MTU4NzY6IFdBUk5JTkc6IGxpYnRvb2wgZG9lcyBub3Qgc3VwcG9ydCBBZGEgLSBkaXNhYmxpbmcgZmVhdHVyZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpYnRvb2wgZG9lcyBub3Qgc3VwcG9ydCBBZGEgLSBkaXNhYmxpbmcgZmVhdHVyZSIgPiYyO30KKwljZl93aXRoX2FkYT1ubworICAgIGZpCitmaQorCitpZiB0ZXN0ICIkY2Zfd2l0aF9hZGEiICE9ICJubyIgOyB0aGVuCitjZl9hZGFfbWFrZT1nbmF0bWFrZQorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkY2ZfYWRhX21ha2UiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRjZl9hZGFfbWFrZTsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE1ODg2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfZ25hdF9leGlzdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGduYXRfZXhpc3RzIjsgdGhlbgorICBhY19jdl9wcm9nX2duYXRfZXhpc3RzPSIkZ25hdF9leGlzdHMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19zYXZlX0lGUz0kSUZTOyBJRlM9JGFjX3BhdGhfc2VwYXJhdG9yCithY19kdW1teT0iJFBBVEgiCitmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgSUZTPSRhY19zYXZlX0lGUworICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAkYXNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkIiB8fCBjb250aW51ZQorYWNfY3ZfcHJvZ19nbmF0X2V4aXN0cz0ieWVzIgorZWNobyAiJGFzX21lOjE1OTAxOiBmb3VuZCAkYWNfZGlyLyRhY193b3JkIiA+JjUKK2JyZWFrCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfZ25hdF9leGlzdHMiICYmIGFjX2N2X3Byb2dfZ25hdF9leGlzdHM9Im5vIgorZmkKK2ZpCitnbmF0X2V4aXN0cz0kYWNfY3ZfcHJvZ19nbmF0X2V4aXN0cworaWYgdGVzdCAtbiAiJGduYXRfZXhpc3RzIjsgdGhlbgorICBlY2hvICIkYXNfbWU6MTU5MTA6IHJlc3VsdDogJGduYXRfZXhpc3RzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRnbmF0X2V4aXN0cyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToxNTkxMzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitpZiB0ZXN0ICIkYWNfY3ZfcHJvZ19nbmF0X2V4aXN0cyIgPSBubzsgdGhlbgorICAgY2ZfYWRhX21ha2U9CitlbHNlCisKK2VjaG8gIiRhc19tZToxNTkyMTogY2hlY2tpbmcgZm9yIGduYXQgdmVyc2lvbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnbmF0IHZlcnNpb24uLi4gJEVDSE9fQyIgPiY2CitjZl9nbmF0X3ZlcnNpb249YCR7Y2ZfYWRhX21ha2UtZ25hdG1ha2V9IC12IDI+JjEgfCBncmVwICdbMC05XS5bMC05XVswLTldKicgfFwKKyAgc2VkIC1lICcyLCRkJyAtZSAncy9bXjAtOSBcLl0vL2cnIC1lICdzL15bIF0qLy8nIC1lICdzLyAuKi8vJ2AKK2VjaG8gIiRhc19tZToxNTkyNTogcmVzdWx0OiAkY2ZfZ25hdF92ZXJzaW9uIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9nbmF0X3ZlcnNpb24iID4mNgorCitjYXNlICRjZl9nbmF0X3ZlcnNpb24gaW4KKyAgMy4xWzEtOV0qfDMuWzItOV0qfFs0LTldLiopCisgICAgY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9eWVzCisgICAgOzsKKyAgKikgZWNobyBVbnN1cHBvcnRlZCBHTkFUIHZlcnNpb24gJGNmX2duYXRfdmVyc2lvbi4gUmVxdWlyZWQgaXMgMy4xMSBvciBiZXR0ZXIuIERpc2FibGluZyBBZGE5NSBiaW5kaW5nLgorICAgICBjZl9jdl9wcm9nX2duYXRfY29ycmVjdD1ubworICAgICA7OworZXNhYworY2FzZSAkY2ZfZ25hdF92ZXJzaW9uIGluCisgIDMuWzEtOV0qfFs0LTldLiopCisgICAgICBjZl9jb21waWxlX2dlbmVyaWNzPWdlbmVyaWNzCisgICAgICBjZl9nZW5lcmljX29iamVjdHM9Ilwke0dFTk9CSlN9IgorICAgICAgOzsKKyAgKikgIGNmX2NvbXBpbGVfZ2VuZXJpY3M9CisgICAgICBjZl9nZW5lcmljX29iamVjdHM9CisgICAgICA7OworZXNhYworCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm00Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtNDsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOjE1OTQ4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTTRfZXhpc3RzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRNNF9leGlzdHMiOyB0aGVuCisgIGFjX2N2X3Byb2dfTTRfZXhpc3RzPSIkTTRfZXhpc3RzIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSRhY19wYXRoX3NlcGFyYXRvcgorYWNfZHVtbXk9IiRQQVRIIgorZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgJGFzX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCIgfHwgY29udGludWUKK2FjX2N2X3Byb2dfTTRfZXhpc3RzPSJ5ZXMiCitlY2hvICIkYXNfbWU6MTU5NjM6IGZvdW5kICRhY19kaXIvJGFjX3dvcmQiID4mNQorYnJlYWsKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NNF9leGlzdHMiICYmIGFjX2N2X3Byb2dfTTRfZXhpc3RzPSJubyIKK2ZpCitmaQorTTRfZXhpc3RzPSRhY19jdl9wcm9nX000X2V4aXN0cworaWYgdGVzdCAtbiAiJE00X2V4aXN0cyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOjE1OTcyOiByZXN1bHQ6ICRNNF9leGlzdHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JE00X2V4aXN0cyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZToxNTk3NTogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgICBpZiB0ZXN0ICIkYWNfY3ZfcHJvZ19NNF9leGlzdHMiID0gbm87IHRoZW4KKyAgICAgIGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vCisgICAgICBlY2hvIEFkYTk1IGJpbmRpbmcgcmVxdWlyZWQgcHJvZ3JhbSBtNCBub3QgZm91bmQuIEFkYTk1IGJpbmRpbmcgZGlzYWJsZWQuCisgICBmaQorICAgaWYgdGVzdCAiJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiA9IHllczsgdGhlbgorICAgICAgZWNobyAiJGFzX21lOjE1OTg0OiBjaGVja2luZyBpZiBHTkFUIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgR05BVCB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKKworcm0gLWYgY29uZnRlc3QqCitjYXQgPj5jb25mdGVzdC5hZHMgPDxDRl9FT0YKK3Byb2NlZHVyZSBjb25mdGVzdDsKK0NGX0VPRgorY2F0ID4+Y29uZnRlc3QuYWRiIDw8Q0ZfRU9GCit3aXRoIFRleHRfSU87Cit3aXRoIEdOQVQuT1NfTGliOworcHJvY2VkdXJlIGNvbmZ0ZXN0IGlzCitiZWdpbgorICAgVGV4dF9JTy5QdXQgKCJIZWxsbyBXb3JsZCIpOworICAgVGV4dF9JTy5OZXdfTGluZTsKKyAgIEdOQVQuT1NfTGliLk9TX0V4aXQgKDApOworZW5kIGNvbmZ0ZXN0OworQ0ZfRU9GCitpZiAoICRjZl9hZGFfbWFrZSAkQURBRkxBR1MgY29uZnRlc3QgMT4mNSAyPiYxICkgOyB0aGVuCisgICBpZiAoIC4vY29uZnRlc3QgMT4mNSAyPiYxICkgOyB0aGVuCisgICAgICBjZl9jdl9wcm9nX2duYXRfY29ycmVjdD15ZXMKKyAgIGVsc2UKKyAgICAgIGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vCisgICBmaQorZWxzZQorICAgY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgZWNobyAiJGFzX21lOjE2MDEyOiByZXN1bHQ6ICRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPiY1CitlY2hvICIke0VDSE9fVH0kY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID4mNgorICAgZmkKK2ZpCitpZiB0ZXN0CSIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiID0geWVzOyB0aGVuCisgICBBREFGTEFHUz0iLU8zIC1nbmF0cG4gJEFEQUZMQUdTIgorCisgICBlY2hvICIkYXNfbWU6MTYwMTk6IGNoZWNraW5nIGlmIEdOQVQgcHJhZ21hIFVucmVmZXJlbmNlZCB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIEdOQVQgcHJhZ21hIFVucmVmZXJlbmNlZCB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKKworcm0gLWYgY29uZnRlc3QqCitjYXQgPj5jb25mdGVzdC5hZHMgPDxDRl9FT0YKK3Byb2NlZHVyZSBjb25mdGVzdDsKK0NGX0VPRgorY2F0ID4+Y29uZnRlc3QuYWRiIDw8Q0ZfRU9GCit3aXRoIFRleHRfSU87Cit3aXRoIEdOQVQuT1NfTGliOworcHJvY2VkdXJlIGNvbmZ0ZXN0IGlzCisgICB0ZXN0IDogSW50ZWdlcjsKKyAgIHByYWdtYSBVbnJlZmVyZW5jZWQgKHRlc3QpOworYmVnaW4KKyAgIHRlc3QgOj0gMTsKKyAgIFRleHRfSU8uUHV0ICgiSGVsbG8gV29ybGQiKTsKKyAgIFRleHRfSU8uTmV3X0xpbmU7CisgICBHTkFULk9TX0xpYi5PU19FeGl0ICgwKTsKK2VuZCBjb25mdGVzdDsKK0NGX0VPRgoraWYgKCAkY2ZfYWRhX21ha2UgJEFEQUZMQUdTIGNvbmZ0ZXN0IDE+JjUgMj4mMSApIDsgdGhlbgorICAgICAgY2ZfY3ZfcHJhZ21hX3VucmVmZXJlbmNlZD15ZXMKK2Vsc2UKKyAgIGNmX2N2X3ByYWdtYV91bnJlZmVyZW5jZWQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgZWNobyAiJGFzX21lOjE2MDQ2OiByZXN1bHQ6ICRjZl9jdl9wcmFnbWFfdW5yZWZlcmVuY2VkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9wcmFnbWFfdW5yZWZlcmVuY2VkIiA+JjYKKworICAgIyBpZiB0aGUgcHJhZ21hIGlzIHN1cHBvcnRlZCwgdXNlIGl0IChuZWVkZWQgaW4gdGhlIFRyYWNlIGNvZGUpLgorICAgaWYgdGVzdCAkY2ZfY3ZfcHJhZ21hX3VucmVmZXJlbmNlZCA9IHllcyA7IHRoZW4KKyAgICAgIFBSQUdNQV9VTlJFRj1UUlVFCisgICBlbHNlCisgICAgICBQUkFHTUFfVU5SRUY9RkFMU0UKKyAgIGZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWRhLWNvbXBpbGVyIG9yIC0td2l0aG91dC1hZGEtY29tcGlsZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FkYV9jb21waWxlcitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9hZGFfY29tcGlsZXIiCisgIGNmX2FkYV9jb21waWxlcj0kd2l0aHZhbAorZWxzZQorICBjZl9hZGFfY29tcGlsZXI9Z25hdG1ha2UKK2ZpOworCisgICBjZl9hZGFfcGFja2FnZT10ZXJtaW5hbF9pbnRlcmZhY2UKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZGEtaW5jbHVkZSBvciAtLXdpdGhvdXQtYWRhLWluY2x1ZGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FkYV9pbmNsdWRlK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX2FkYV9pbmNsdWRlIgorCitlbHNlCisgIHdpdGh2YWw9IiR7QURBX0lOQ0xVREUtJHByZWZpeC9saWIvYWRhL2FkYWluY2x1ZGV9IgorZmk7IGlmIHRlc3QgLW4gIiRwcmVmaXgvbGliL2FkYS9hZGFpbmNsdWRlIiA7IHRoZW4KKworaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorICBjZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiR3aXRodmFsIiBpbiAjKHZpCisuXCRcKCpcKSp8LlwnKlwnKikgIyh2aQorICA7OworLi58Li8qfC5cXCopICModmkKKyAgOzsKKy5bYS16QS1aXTpbXFwvXSopICModmkgT1MvMiBFTVgKKyAgOzsKKy5cJHsqcHJlZml4fSopICModmkKKyAgZXZhbCB3aXRodmFsPSIkd2l0aHZhbCIKKyAgY2FzZSAiLiR3aXRodmFsIiBpbiAjKHZpCisgIC5OT05FLyopCisgICAgd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgICA7OworICBlc2FjCisgIDs7ICModmkKKy5ub3wuTk9ORS8qKQorICB3aXRodmFsPWBlY2hvICR3aXRodmFsIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICA7OworKikKKyAgeyB7IGVjaG8gIiRhc19tZToxNjA5OTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGh2YWxcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICA7OworZXNhYworCitmaQorQURBX0lOQ0xVREU9IiR3aXRodmFsIgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFkYS1vYmplY3RzIG9yIC0td2l0aG91dC1hZGEtb2JqZWN0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYWRhX29iamVjdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfYWRhX29iamVjdHMiCisKK2Vsc2UKKyAgd2l0aHZhbD0iJHtBREFfT0JKRUNUUy0kcHJlZml4L2xpYi9hZGEvYWRhbGlifSIKK2ZpOyBpZiB0ZXN0IC1uICIkcHJlZml4L2xpYi9hZGEvYWRhbGliIiA7IHRoZW4KKworaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGNmX3BhdGhfc3ludGF4PSIkcHJlZml4IgorZWxzZQorICBjZl9wYXRoX3N5bnRheD0iJGFjX2RlZmF1bHRfcHJlZml4IgorZmkKKworY2FzZSAiLiR3aXRodmFsIiBpbiAjKHZpCisuXCRcKCpcKSp8LlwnKlwnKikgIyh2aQorICA7OworLi58Li8qfC5cXCopICModmkKKyAgOzsKKy5bYS16QS1aXTpbXFwvXSopICModmkgT1MvMiBFTVgKKyAgOzsKKy5cJHsqcHJlZml4fSopICModmkKKyAgZXZhbCB3aXRodmFsPSIkd2l0aHZhbCIKKyAgY2FzZSAiLiR3aXRodmFsIiBpbiAjKHZpCisgIC5OT05FLyopCisgICAgd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgICA7OworICBlc2FjCisgIDs7ICModmkKKy5ub3wuTk9ORS8qKQorICB3aXRodmFsPWBlY2hvICR3aXRodmFsIHwgc2VkIC1lIHMlTk9ORSUkY2ZfcGF0aF9zeW50YXglYAorICA7OworKikKKyAgeyB7IGVjaG8gIiRhc19tZToxNjE0MTogZXJyb3I6IGV4cGVjdGVkIGEgcGF0aG5hbWUsIG5vdCBcIiR3aXRodmFsXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGh2YWxcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICA7OworZXNhYworCitmaQorQURBX09CSkVDVFM9IiR3aXRodmFsIgorCitmaQorZmkKK2Vsc2UKKyAgIGNmX3dpdGhfYWRhPW5vCitmaQorCisjIyMgQ29uc3RydWN0IHRoZSBuY3Vyc2VzIGxpYnJhcnktc3Vic2V0cywgaWYgYW55LCBmcm9tIHRoaXMgc2V0IG9mIGtleXdvcmRzOgorIyMjCW5vbmUsIGJhc2UsIGV4dF9mdW5jcywgZXh0X3RpbmZvLCB0aWNsaWIsIHRlcm1saWIsIHdpZGVjaGFyCisjIyMKKyMjIyB0aWNsaWIgbW9kdWxlcyBtYXkgYmUgYSBzZXBhcmF0ZSBsaWJyYXJ5LCBvdGhlcndpc2UgY29udGFpbmVkIGluIHRlcm1saWIuCisjIyMgdGVybWxpYiBtb2R1bGVzIG1heSBiZSBhIHNlcGFyYXRlIGxpYnJhcnksIG90aGVyd2lzZSBjb250YWluZWQgaW4gbmN1cnNlcy4KKyMjIworIyMjIFRoZSBvZiAiKyIgb3IgIiAiIGJldHdlZW4gdGhlIHRva2VucyBjb250cm9scyB0aGUgd2F5IHRoZSBzY3JpcHQKKyMjIyBjaG9vc2VzIHRvIHNwbGl0IG1vZHVsZSBsaXN0cyBpbnRvIGxpYnJhcmllcy4KKyMjIworIyMjIChzZWUgQ0ZfTElCX1JVTEVTKS4KK2VjaG8gIiRhc19tZToxNjE2NjogY2hlY2tpbmcgZm9yIGxpYnJhcnkgc3Vic2V0cyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5IHN1YnNldHMuLi4gJEVDSE9fQyIgPiY2CitMSUJfU1VCU0VUUz0KKworaWYgdGVzdCAiJGNmX3dpdGhfcHJvZ3MiID0geWVzIHx8IHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0gbm8gfHwgdGVzdCAiJHdpdGhfdGVybWNhcCIgIT0gbm87IHRoZW4KKwlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU310aWNsaWIiCisJaWYgdGVzdCAiJHdpdGhfdGljbGliIiAhPSBubyA7IHRoZW4KKwkJTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9ICIKKwllbHNlCisJCUxJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfSsiCisJZmkKK2ZpCisKK0xJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfXRlcm1saWIiCit0ZXN0ICIkd2l0aF9leHRfZnVuY3MiID0geWVzICYmIExJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfStleHRfdGluZm8iCitpZiB0ZXN0ICIkd2l0aF90ZXJtbGliIiAhPSBubyA7IHRoZW4KKwlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30gIgorZWxzZQorCUxJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfSsiCitmaQorCitMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU31iYXNlIgordGVzdCAiJHdpdGhfd2lkZWMiICAgICA9IHllcyAmJiBMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rd2lkZWNoYXIiCit0ZXN0ICIkd2l0aF9leHRfZnVuY3MiID0geWVzICYmIExJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfStleHRfZnVuY3MiCisKK2VjaG8gIiRhc19tZToxNjE5MTogcmVzdWx0OiAkTElCX1NVQlNFVFMiID4mNQorZWNobyAiJHtFQ0hPX1R9JExJQl9TVUJTRVRTIiA+JjYKKworIyMjIENvbnN0cnVjdCB0aGUgbGlzdCBvZiBpbmNsdWRlLWRpcmVjdG9yaWVzIHRvIGJlIGdlbmVyYXRlZAorCitDUFBGTEFHUz0iLUkuIC1JLi4vaW5jbHVkZSAkQ1BQRkxBR1MiCitpZiB0ZXN0ICIkc3JjZGlyIiAhPSAiLiI7IHRoZW4KKwlDUFBGTEFHUz0iLUlcJHtzcmNkaXJ9Ly4uL2luY2x1ZGUgJENQUEZMQUdTIgorZmkKK2lmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUlcJHtpbmNsdWRlZGlyfSIKK2VsaWYgdGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiOyB0aGVuCisJaWYgdGVzdCAiJGluY2x1ZGVkaXIiID0gJyR7cHJlZml4fS9pbmNsdWRlJyA7IHRoZW4KKwkJaWYgdGVzdCAkcHJlZml4ICE9IC91c3IgOyB0aGVuCisJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCisJCWZpCisJZWxzZQorCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCisJZmkKK2ZpCisKK0FDUFBGTEFHUz0iLUkuIC1JLi4vLi4vaW5jbHVkZSAkQUNQUEZMQUdTIgoraWYgdGVzdCAiJHNyY2RpciIgIT0gIi4iOyB0aGVuCisJQUNQUEZMQUdTPSItSVwke3NyY2Rpcn0vLi4vLi4vaW5jbHVkZSAkQUNQUEZMQUdTIgorZmkKK2lmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorCUFDUFBGTEFHUz0iJEFDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorZWxpZiB0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSI7IHRoZW4KKwlpZiB0ZXN0ICIkaW5jbHVkZWRpciIgPSAnJHtwcmVmaXh9L2luY2x1ZGUnIDsgdGhlbgorCQlpZiB0ZXN0ICRwcmVmaXggIT0gL3VzciA7IHRoZW4KKwkJCUFDUFBGTEFHUz0iJEFDUFBGTEFHUyAtSVwke2luY2x1ZGVkaXJ9IgorCQlmaQorCWVsc2UKKwkJQUNQUEZMQUdTPSIkQUNQUEZMQUdTIC1JXCR7aW5jbHVkZWRpcn0iCisJZmkKK2ZpCisKKyMjIyBCdWlsZCB1cCBwaWVjZXMgZm9yIG1ha2VmaWxlIHJ1bGVzCitlY2hvICIkYXNfbWU6MTYyMjk6IGNoZWNraW5nIGRlZmF1bHQgbGlicmFyeSBzdWZmaXgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBkZWZhdWx0IGxpYnJhcnkgc3VmZml4Li4uICRFQ0hPX0MiID4mNgorCisJY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorCWxpYnRvb2wpIERGVF9BUkdfU1VGRklYPScnICAgOzsKKwlub3JtYWwpICBERlRfQVJHX1NVRkZJWD0nJyAgIDs7CisJZGVidWcpICAgREZUX0FSR19TVUZGSVg9J19nJyA7OworCXByb2ZpbGUpIERGVF9BUkdfU1VGRklYPSdfcCcgOzsKKwlzaGFyZWQpICBERlRfQVJHX1NVRkZJWD0nJyAgIDs7CisJZXNhYworCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBERlRfQVJHX1NVRkZJWD0iJHtMSUJfU1VGRklYfSR7REZUX0FSR19TVUZGSVh9IgorZWNobyAiJGFzX21lOjE2MjQwOiByZXN1bHQ6ICRERlRfQVJHX1NVRkZJWCIgPiY1CitlY2hvICIke0VDSE9fVH0kREZUX0FSR19TVUZGSVgiID4mNgorCitlY2hvICIkYXNfbWU6MTYyNDM6IGNoZWNraW5nIGRlZmF1bHQgbGlicmFyeS1kZXBlbmRlbmN5IHN1ZmZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlZmF1bHQgbGlicmFyeS1kZXBlbmRlbmN5IHN1ZmZpeC4uLiAkRUNIT19DIiA+JjYKKworCWNhc2UgJERGVF9MV1JfTU9ERUwgaW4KKwlsaWJ0b29sKQorCQlERlRfTElCX1NVRkZJWD0nLmxhJworCQlERlRfREVQX1NVRkZJWD0kREZUX0xJQl9TVUZGSVgKKwkJOzsKKwlub3JtYWwpCisJCURGVF9MSUJfU1VGRklYPScuYScKKwkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCTs7CisJZGVidWcpCisJCURGVF9MSUJfU1VGRklYPSdfZy5hJworCQlERlRfREVQX1NVRkZJWD0kREZUX0xJQl9TVUZGSVgKKwkJOzsKKwlwcm9maWxlKQorCQlERlRfTElCX1NVRkZJWD0nX3AuYScKKwkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCTs7CisJc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCQljeWd3aW4qKQorCQkJREZUX0xJQl9TVUZGSVg9Jy5kbGwnCisJCQlERlRfREVQX1NVRkZJWD0nLmRsbC5hJworCQkJOzsKKwkJZGFyd2luKikKKwkJCURGVF9MSUJfU1VGRklYPScuZHlsaWInCisJCQlERlRfREVQX1NVRkZJWD0kREZUX0xJQl9TVUZGSVgKKwkJCTs7CisJCWhwdXgqKQorCQkJY2FzZSAkdGFyZ2V0IGluCisJCQlpYTY0KikKKwkJCQlERlRfTElCX1NVRkZJWD0nLnNvJworCQkJCURGVF9ERVBfU1VGRklYPSRERlRfTElCX1NVRkZJWAorCQkJCTs7CisJCQkqKQorCQkJCURGVF9MSUJfU1VGRklYPScuc2wnCisJCQkJREZUX0RFUF9TVUZGSVg9JERGVF9MSUJfU1VGRklYCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCSopCURGVF9MSUJfU1VGRklYPScuc28nCisJCQlERlRfREVQX1NVRkZJWD0kREZUX0xJQl9TVUZGSVgKKwkJCTs7CisJCWVzYWMKKwllc2FjCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmIERGVF9MSUJfU1VGRklYPSIke0xJQl9TVUZGSVh9JHtERlRfTElCX1NVRkZJWH0iCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmIERGVF9ERVBfU1VGRklYPSIke0xJQl9TVUZGSVh9JHtERlRfREVQX1NVRkZJWH0iCitlY2hvICIkYXNfbWU6MTYyOTI6IHJlc3VsdDogJERGVF9ERVBfU1VGRklYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRERlRfREVQX1NVRkZJWCIgPiY2CisKK2VjaG8gIiRhc19tZToxNjI5NTogY2hlY2tpbmcgZGVmYXVsdCBvYmplY3QgZGlyZWN0b3J5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVmYXVsdCBvYmplY3QgZGlyZWN0b3J5Li4uICRFQ0hPX0MiID4mNgorCisJY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorCWxpYnRvb2wpIERGVF9PQkpfU1VCRElSPSdvYmpfbG8nICA7OworCW5vcm1hbCkgIERGVF9PQkpfU1VCRElSPSdvYmplY3RzJyA7OworCWRlYnVnKSAgIERGVF9PQkpfU1VCRElSPSdvYmpfZycgOzsKKwlwcm9maWxlKSBERlRfT0JKX1NVQkRJUj0nb2JqX3AnIDs7CisJc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJCWN5Z3dpbikgIyh2aQorCQkJREZUX09CSl9TVUJESVI9J29iamVjdHMnIDs7CisJCSopCisJCQlERlRfT0JKX1NVQkRJUj0nb2JqX3MnIDs7CisJCWVzYWMKKwllc2FjCitlY2hvICIkYXNfbWU6MTYzMTE6IHJlc3VsdDogJERGVF9PQkpfU1VCRElSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRERlRfT0JKX1NVQkRJUiIgPiY2CisKKyMgbGlidG9vbCB0aGlua3MgaXQgY2FuIG1ha2UgYysrIHNoYXJlZCBsaWJyYXJpZXMgKHBlcmhhcHMgb25seSBnKyspCitpZiB0ZXN0ICIkY2Zfd2l0aF9jeHgiID0geWVzIDsgdGhlbgorZWNobyAiJGFzX21lOjE2MzE2OiBjaGVja2luZyBjKysgbGlicmFyeS1kZXBlbmRlbmN5IHN1ZmZpeCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGMrKyBsaWJyYXJ5LWRlcGVuZGVuY3kgc3VmZml4Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIjsgdGhlbgorCUNYWF9MSUJfU1VGRklYPSRERlRfREVQX1NVRkZJWAorZWxzZQorCisJY2FzZSBub3JtYWwgaW4KKwlsaWJ0b29sKQorCQlDWFhfTElCX1NVRkZJWD0nLmxhJworCQlDWFhfREVQX1NVRkZJWD0kQ1hYX0xJQl9TVUZGSVgKKwkJOzsKKwlub3JtYWwpCisJCUNYWF9MSUJfU1VGRklYPScuYScKKwkJQ1hYX0RFUF9TVUZGSVg9JENYWF9MSUJfU1VGRklYCisJCTs7CisJZGVidWcpCisJCUNYWF9MSUJfU1VGRklYPSdfZy5hJworCQlDWFhfREVQX1NVRkZJWD0kQ1hYX0xJQl9TVUZGSVgKKwkJOzsKKwlwcm9maWxlKQorCQlDWFhfTElCX1NVRkZJWD0nX3AuYScKKwkJQ1hYX0RFUF9TVUZGSVg9JENYWF9MSUJfU1VGRklYCisJCTs7CisJc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCQljeWd3aW4qKQorCQkJQ1hYX0xJQl9TVUZGSVg9Jy5kbGwnCisJCQlDWFhfREVQX1NVRkZJWD0nLmRsbC5hJworCQkJOzsKKwkJZGFyd2luKikKKwkJCUNYWF9MSUJfU1VGRklYPScuZHlsaWInCisJCQlDWFhfREVQX1NVRkZJWD0kQ1hYX0xJQl9TVUZGSVgKKwkJCTs7CisJCWhwdXgqKQorCQkJY2FzZSAkdGFyZ2V0IGluCisJCQlpYTY0KikKKwkJCQlDWFhfTElCX1NVRkZJWD0nLnNvJworCQkJCUNYWF9ERVBfU1VGRklYPSRDWFhfTElCX1NVRkZJWAorCQkJCTs7CisJCQkqKQorCQkJCUNYWF9MSUJfU1VGRklYPScuc2wnCisJCQkJQ1hYX0RFUF9TVUZGSVg9JENYWF9MSUJfU1VGRklYCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCSopCUNYWF9MSUJfU1VGRklYPScuc28nCisJCQlDWFhfREVQX1NVRkZJWD0kQ1hYX0xJQl9TVUZGSVgKKwkJCTs7CisJCWVzYWMKKwllc2FjCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmIENYWF9MSUJfU1VGRklYPSIke0xJQl9TVUZGSVh9JHtDWFhfTElCX1NVRkZJWH0iCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmIENYWF9ERVBfU1VGRklYPSIke0xJQl9TVUZGSVh9JHtDWFhfREVQX1NVRkZJWH0iCitmaQorZWNobyAiJGFzX21lOjE2MzY5OiByZXN1bHQ6ICRDWFhfTElCX1NVRkZJWCIgPiY1CitlY2hvICIke0VDSE9fVH0kQ1hYX0xJQl9TVUZGSVgiID4mNgorCitmaQorCisjIGRvIG5vdCB3YW50IC1sZGwgaW4gYnVpbGQgZXhjZXB0IGFzIG5lZWRlZCBmb3IgLWxuY3Vyc2VzIGRlcGVuZGVuY3kKK2lmIHRlc3QgIiR3aXRoX2Rsc3ltIiA9IHllcyA7IHRoZW4KK2lmIHRlc3QgJERGVF9MV1JfTU9ERUwgPSBzaGFyZWQgfHwgXAorICAgdGVzdCAkREZUX0xXUl9NT0RFTCA9IGxpYnRvb2wgOyB0aGVuCisKKyMgcmVtb3ZlIGRsIGxpYnJhcnkgZnJvbSAkTElCUworTElCUz1gZWNobyAiJExJQlMiIHwgc2VkIC1lICdzLy1sZGxbIAldLy9nJyAtZSAncy8tbGRsJC8vJ2AKKworZmkKK2ZpCisjIyMgU2V0IHVwIGxvdy1sZXZlbCB0ZXJtaW5mbyBkZXBlbmRlbmNpZXMgZm9yIG1ha2VmaWxlcy4KKworIyBUSUNTX0xJU1QgYW5kIFRJTkZPX0xJU1QgYXJlIG5lZWRlZCB0byBidWlsZCBsaWJ0aWMuc28gYW5kIGxpYnRlcm0uc28sIGJ1dAorIyBkbyBub3QgbmVlZCBsaWJkbAorVElDU19MSVNUPQoraWYgdGVzdCAiJHdpdGhfZGxzeW0iID0geWVzIDsgdGhlbgorCisjIHJlbW92ZSBkbCBsaWJyYXJ5IGZyb20gJFNITElCX0xJU1QKK1RJTkZPX0xJU1Q9YGVjaG8gIiRTSExJQl9MSVNUIiB8IHNlZCAtZSAncy8tbGRsWyAJXS8vZycgLWUgJ3MvLWxkbCQvLydgCisKK2ZpCisKK2lmIHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0gbm8gOyB0aGVuCisKKwlpZiB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IHllcyA7IHRoZW4KKwkJVElDU19OQU1FPSR3aXRoX3RpY2xpYgorCQlUSUNTX0FSR19TVUZGSVg9IiR7d2l0aF90aWNsaWJ9YGVjaG8gJHtERlRfQVJHX1NVRkZJWH18c2VkIC1lICJzL14ke0xJQl9TVUZGSVh9Ly8iYCIKKwkJVElDU19ERVBfU1VGRklYPSIke3dpdGhfdGljbGlifWBlY2hvICR7REZUX0RFUF9TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJQ1NfTElCX1NVRkZJWD0iJHt3aXRoX3RpY2xpYn0iCisJZWxzZQorCQlUSUNTX0FSR19TVUZGSVg9IiR7VElDU19OQU1FfSR7REZUX0FSR19TVUZGSVh9IgorCQlUSUNTX0RFUF9TVUZGSVg9IiR7VElDU19OQU1FfSR7REZUX0RFUF9TVUZGSVh9IgorCQlUSUNTX0xJQl9TVUZGSVg9IiR7VElDU19OQU1FfSR7TElCX1NVRkZJWH0iCisJZmkKKwlUSUNTX0FSR1M9Ii1MJHtMSUJfRElSfSAtbCR7VElDU19MSUJfU1VGRklYfSIKK2Vsc2UKKwlUSUNTX0FSR1M9Ii1MJHtMSUJfRElSfSAtbCR7TElCX05BTUV9JHtERlRfQVJHX1NVRkZJWH0iCitmaQorCitpZiB0ZXN0ICIkd2l0aF90ZXJtbGliIiAhPSBubyA7IHRoZW4KKworCWlmIHRlc3QgIiR3aXRoX3Rlcm1saWIiICE9IHllcyA7IHRoZW4KKwkJVElORk9fTkFNRT0kd2l0aF90ZXJtbGliCisJCVRJTkZPX1NVRkZJWD0iYGVjaG8gJHtERlRfTElCX1NVRkZJWH18c2VkIC1lICJzL14ke0xJQl9TVUZGSVh9Ly8iYCIKKwkJVElORk9fQVJHX1NVRkZJWD0iJHt3aXRoX3Rlcm1saWJ9YGVjaG8gJHtERlRfQVJHX1NVRkZJWH18c2VkIC1lICJzL14ke0xJQl9TVUZGSVh9Ly8iYCIKKwkJVElORk9fREVQX1NVRkZJWD0iJHt3aXRoX3Rlcm1saWJ9YGVjaG8gJHtERlRfREVQX1NVRkZJWH18c2VkIC1lICJzL14ke0xJQl9TVUZGSVh9Ly8iYCIKKwkJVElORk9fTElCX1NVRkZJWD0iJHt3aXRoX3Rlcm1saWJ9IgorCWVsc2UKKwkJVElORk9fU1VGRklYPSR7REZUX0xJQl9TVUZGSVh9CisJCVRJTkZPX0FSR19TVUZGSVg9IiR7VElORk9fTkFNRX0ke0RGVF9BUkdfU1VGRklYfSIKKwkJVElORk9fREVQX1NVRkZJWD0iJHtUSU5GT19OQU1FfSR7REZUX0RFUF9TVUZGSVh9IgorCQlUSU5GT19MSUJfU1VGRklYPSIke1RJTkZPX05BTUV9JHtMSUJfU1VGRklYfSIKKwlmaQorCisJVEVTVF9ERVBTPSIke0xJQl9ESVJ9LyR7TElCX1BSRUZJWH0ke1RJTkZPX0RFUF9TVUZGSVh9IgorCVRFU1RfREVQMj0iJHtMSUJfMk5EfS8ke0xJQl9QUkVGSVh9JHtUSU5GT19ERVBfU1VGRklYfSIKKwlpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAibGlidG9vbCI7IHRoZW4KKwkJVEVTVF9BUkdTPSIke1RFU1RfREVQU30iCisJCVRFU1RfQVJHMj0iJHtURVNUX0RFUDJ9IgorCQlUSU5GT19BUkdTPSItTCR7TElCX0RJUn0gJFRFU1RfQVJHUyIKKwllbHNlCisJCVRFU1RfQVJHUz0iLWwke1RJTkZPX0FSR19TVUZGSVh9IgorCQlURVNUX0FSRzI9Ii1sJHtUSU5GT19BUkdfU1VGRklYfSIKKwkJVElDU19MSVNUPSIkU0hMSUJfTElTVCAtbCR7VElORk9fTElCX1NVRkZJWH0iCisJCVRJTkZPX0FSR1M9Ii1MJHtMSUJfRElSfSAkVEVTVF9BUkdTIgorCQlTSExJQl9MSVNUPSIkU0hMSUJfTElTVCAtbCR7VElORk9fTElCX1NVRkZJWH0iCisJZmkKK2Vsc2UKKwkjIHRoZSBuZXh0IGxpbmVzIGFyZSBuZWVkZWQgZm9yIGxpbmtpbmcgbGlidGljIG92ZXIgbGlibmN1cnNlcworCVRJTkZPX05BTUU9JHtMSUJfTkFNRX0KKwlUSU5GT19TVUZGSVg9JHtERlRfTElCX1NVRkZJWH0KKwlUSU5GT19BUkdfU1VGRklYPSR7TElCX05BTUV9JHtERlRfQVJHX1NVRkZJWH0KKwlpZiB0ZXN0ICIkd2l0aF90aWNfZGVwZW5kcyIgPSB5ZXMgOyB0aGVuCisJCVRJQ1NfTElTVD0iJFNITElCX0xJU1QgLWwke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9IgorCWVsc2UKKwkJVElDU19MSVNUPSIkU0hMSUJfTElTVCIKKwlmaQorCisJVElORk9fQVJHUz0iLUwke0xJQl9ESVJ9IC1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSIKK2ZpCisKK2lmIHRlc3QgIiRERlRfTFdSX01PREVMIiA9IHNoYXJlZCA7IHRoZW4KKwljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJY3lnd2luKikKKwkJIyAibGliIiBmaWxlcyBoYXZlICIuZGxsLmEiIHN1ZmZpeCwgImN5ZyIgZmlsZXMgaGF2ZSAiLmRsbCIKKwkJVElORk9fU1VGRklYPS5kbGwKKwkJOzsKKwllc2FjCitmaQorCitpZiB0ZXN0ICIkd2l0aF9kbHN5bSIgPSB5ZXMgOyB0aGVuCisKKyMgcmVtb3ZlIGRsIGxpYnJhcnkgZnJvbSAkVElDU19MSVNUCitUSUNTX0xJU1Q9YGVjaG8gIiRUSUNTX0xJU1QiIHwgc2VkIC1lICdzLy1sZGxbIAldLy9nJyAtZSAncy8tbGRsJC8vJ2AKKworZmkKKworaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisgICAgT0JKRVhUPWxvCitmaQorCisjIG5lZWRlZCBmb3IgQWRhOTUKK1RJTkZPX0FSR1MyPWBlY2hvICIkVElORk9fQVJHUyIgfCBzZWQgLWUgJ3MsLUxcLlwuLywtTC4uLy4uLywnYAorCitjYXNlICRERlRfTFdSX01PREVMIGluCitub3JtYWx8ZGVidWd8cHJvZmlsZSkKKworaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIygKKwlPUy8yKnxvczIqfGFpeFs0NV0qKSAJIyggdmkKKwkJTERGTEFHU19TVEFUSUM9CisJCUxERkxBR1NfU0hBUkVEPQorCQk7OworICAgICopIAkjKCBub3JtYWxseSwgZXhjZXB0IHdoZW4gYnJva2VuCisgICAgICAgIExERkxBR1NfU1RBVElDPS1zdGF0aWMKKyAgICAgICAgTERGTEFHU19TSEFSRUQ9LWR5bmFtaWMKKyAgICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIygKKwlhaXhbNDVdKikgCSMoIGZyb20gbGQgbWFucGFnZQorCQlMREZMQUdTX1NUQVRJQz0tYnN0YXRpYworCQlMREZMQUdTX1NIQVJFRD0tYmR5bmFtaWMKKwkJOzsKKwlocHV4KikJCSMoIGZyb20gbGQgbWFucGFnZSBmb3IgaHB1eDEwLjIwLCBocHV4MTEuMTEKKwkJIyBXZSBjb3VsZCBhbHNvIHVzZSBqdXN0ICJhcmNoaXZlIiBhbmQgInNoYXJlZCIuCisJCUxERkxBR1NfU1RBVElDPS1XbCwtYSxhcmNoaXZlX3NoYXJlZAorCQlMREZMQUdTX1NIQVJFRD0tV2wsLWEsc2hhcmVkX2FyY2hpdmUKKwkJOzsKKwlpcml4KikJCSMoIGZyb20gbGQgbWFucGFnZSBJUklYNjQKKwkJTERGTEFHU19TVEFUSUM9LUJzdGF0aWMKKwkJTERGTEFHU19TSEFSRUQ9LUJkeW5hbWljCisJCTs7CisJb3NmWzQ1XSopCSMoIGZyb20gbGQgbWFucGFnZSBvc2Y0LjBkLCBvc2Y1LjEKKwkJIyBhbHRlcm5hdGl2ZSAiLW9sZHN0eWxlX2xpYmxvb2t1cCIgKG5vdCBpbiBjYyBtYW5wYWdlKQorCQlMREZMQUdTX1NUQVRJQz0tbm9zbworCQlMREZMQUdTX1NIQVJFRD0tc29fYXJjaGl2ZQorCQk7OworCXNvbGFyaXMyKikKKwkJTERGTEFHU19TVEFUSUM9LUJzdGF0aWMKKwkJTERGTEFHU19TSEFSRUQ9LUJkeW5hbWljCisJCTs7CisJZXNhYworZmkKKworCTs7Citlc2FjCisKK2VjaG8gIiRhc19tZToxNjUyMjogY2hlY2tpbmcgd2hlcmUgd2Ugd2lsbCBpbnN0YWxsIGN1cnNlcy5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hlcmUgd2Ugd2lsbCBpbnN0YWxsIGN1cnNlcy5oLi4uICRFQ0hPX0MiID4mNgordGVzdCAiJHdpdGhfb3ZlcndyaXRlIiA9IG5vICYmIFwKK3Rlc3QgIngkaW5jbHVkZWRpciIgPSAneCR7cHJlZml4fS9pbmNsdWRlJyAmJiBcCisJaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUvbmN1cnNlcycke0xJQl9TVUZGSVh9CitlY2hvICIkYXNfbWU6MTY1Mjc6IHJlc3VsdDogJGluY2x1ZGVkaXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGluY2x1ZGVkaXIiID4mNgorCisjIyMgUmVzb2x2ZSBhIGNvbmZsaWN0IGJldHdlZW4gbm9ybWFsIGFuZCB3aWRlLWN1cnNlcyBieSBmb3JjaW5nIGFwcGxpY2F0aW9ucworIyMjIHRoYXQgd2lsbCBuZWVkIGxpYnV0ZjggdG8gYWRkIGl0IHRvIHRoZWlyIGNvbmZpZ3VyZSBzY3JpcHQuCitpZiB0ZXN0ICIkd2l0aF9vdmVyd3JpdGUiICE9IG5vIDsgdGhlbgoraWYgdGVzdCAiJE5DVVJTRVNfTElCVVRGOCIgPSAxIDsgdGhlbgorCU5DVVJTRVNfTElCVVRGOD0nZGVmaW5lZChIQVZFX0xJQlVURjhfSCknCisJeyBlY2hvICIkYXNfbWU6MTY1MzU6IFdBUk5JTkc6IFdpZGUtY2hhcmFjdGVyIGFwcGxpY2F0aW9ucyBtdXN0IGRlZmluZSBIQVZFX0xJQlVURjhfSCB0byBpbmNsdWRlIGN1cnNlcy5oIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogV2lkZS1jaGFyYWN0ZXIgYXBwbGljYXRpb25zIG11c3QgZGVmaW5lIEhBVkVfTElCVVRGOF9IIHRvIGluY2x1ZGUgY3Vyc2VzLmgiID4mMjt9CitmaQorZmkKKworIyB1c2VkIHRvIHNlcGFyYXRlIHRhY2sgb3V0IG9mIHRoZSB0cmVlCitOQ1VSU0VTX1RSRUU9CisKKyMjIyBwcmVkZWZpbmVkIHN0dWZmIGZvciB0aGUgdGVzdCBwcm9ncmFtcworY2F0ID4+Y29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9TTEtfQ09MT1IgMQorRU9GCisKKyMjIyBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMgZm9yIHdoaWNoIHdlJ2xsIGN1c3RvbWl6ZSBtYWtlZmlsZXMKKyMjIyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb21waWxlLXJ1bGVzLgorCitlY2hvICIkYXNfbWU6MTY1NTE6IGNoZWNraW5nIGZvciBzcmMgbW9kdWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzcmMgbW9kdWxlcy4uLiAkRUNIT19DIiA+JjYKKworIyBkZXBlbmRlbmNpZXMgYW5kIGxpbmtlci1hcmd1bWVudHMgZm9yIHRlc3QtcHJvZ3JhbXMKK1RFU1RfREVQUz0iJHtMSUJfRElSfS8ke0xJQl9QUkVGSVh9JHtMSUJfTkFNRX0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVBTIgorVEVTVF9ERVAyPSIke0xJQl8yTkR9LyR7TElCX1BSRUZJWH0ke0xJQl9OQU1FfSR7REZUX0RFUF9TVUZGSVh9ICRURVNUX0RFUDIiCitpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAibGlidG9vbCI7IHRoZW4KKwlURVNUX0FSR1M9IiR7VEVTVF9ERVBTfSIKKwlURVNUX0FSRzI9IiR7VEVTVF9ERVAyfSIKK2Vsc2UKKwlURVNUX0FSR1M9Ii1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSAkVEVTVF9BUkdTIgorCVRFU1RfQVJHMj0iLWwke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9ICRURVNUX0FSRzIiCitmaQorCitjZl9jdl9zcmNfbW9kdWxlcz0KK2ZvciBjZl9kaXIgaW4gJG1vZHVsZXNfdG9fYnVpbGQKK2RvCisJaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvbW9kdWxlczsgdGhlbgorCisJCSMgV2UgbWF5L21heSBub3QgaGF2ZSB0YWNrIGluIHRoZSBkaXN0cmlidXRpb24sIHRob3VnaCB0aGUKKwkJIyBtYWtlZmlsZSBpcy4KKwkJaWYgdGVzdCAkY2ZfZGlyID0gdGFjayA7IHRoZW4KKwkJCWlmIHRlc3QgISAtZiAkc3JjZGlyLyR7Y2ZfZGlyfS8ke2NmX2Rpcn0uaDsgdGhlbgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQlmaQorCisJCWlmIHRlc3QgLXogIiRjZl9jdl9zcmNfbW9kdWxlcyI7IHRoZW4KKwkJCWNmX2N2X3NyY19tb2R1bGVzPSRjZl9kaXIKKwkJZWxzZQorCQkJY2ZfY3Zfc3JjX21vZHVsZXM9IiRjZl9jdl9zcmNfbW9kdWxlcyAkY2ZfZGlyIgorCQlmaQorCisJCSMgTWFrZSB0aGUgbmN1cnNlc19jZmcuaCBmaWxlIHJlY29yZCB0aGUgbGlicmFyeSBpbnRlcmZhY2UgZmlsZXMgYXMKKwkJIyB3ZWxsLiAgVGhlc2UgYXJlIGhlYWRlciBmaWxlcyB0aGF0IGFyZSB0aGUgc2FtZSBuYW1lIGFzIHRoZWlyCisJCSMgZGlyZWN0b3J5LiAgTmN1cnNlcyBpcyB0aGUgb25seSBsaWJyYXJ5IHRoYXQgZG9lcyBub3QgZm9sbG93CisJCSMgdGhhdCBwYXR0ZXJuLgorCQlpZiB0ZXN0ICRjZl9kaXIgPSB0YWNrIDsgdGhlbgorCQkJY29udGludWUKKwkJZWxpZiB0ZXN0IC1mICRzcmNkaXIvJHtjZl9kaXJ9LyR7Y2ZfZGlyfS5oOyB0aGVuCisKK2NmX2hhdmVfaW5jbHVkZT1gZWNobyAiJGNmX2RpciIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKKwkJCWNhdCA+PmNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgSEFWRV8ke2NmX2hhdmVfaW5jbHVkZX1fSCAxCitFT0YKKworCQkJY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBIQVZFX0xJQiR7Y2ZfaGF2ZV9pbmNsdWRlfSAxCitFT0YKKworCQkJVEVTVF9ERVBTPSIke0xJQl9ESVJ9LyR7TElCX1BSRUZJWH0ke2NmX2Rpcn0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVBTIgorCQkJVEVTVF9ERVAyPSIke0xJQl8yTkR9LyR7TElCX1BSRUZJWH0ke2NmX2Rpcn0ke0RGVF9ERVBfU1VGRklYfSAkVEVTVF9ERVAyIgorCQkJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisJCQkJVEVTVF9BUkdTPSIke1RFU1RfREVQU30iCisJCQkJVEVTVF9BUkcyPSIke1RFU1RfREVQMn0iCisJCQllbHNlCisJCQkJVEVTVF9BUkdTPSItbCR7Y2ZfZGlyfSR7REZUX0FSR19TVUZGSVh9ICRURVNUX0FSR1MiCisJCQkJVEVTVF9BUkcyPSItbCR7Y2ZfZGlyfSR7REZUX0FSR19TVUZGSVh9ICRURVNUX0FSRzIiCisJCQlmaQorCQlmaQorCWZpCitkb25lCitlY2hvICIkYXNfbWU6MTY2MTQ6IHJlc3VsdDogJGNmX2N2X3NyY19tb2R1bGVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjZl9jdl9zcmNfbW9kdWxlcyIgPiY2CisKK1RFU1RfQVJHUz0iLUwke0xJQl9ESVJ9ICRURVNUX0FSR1MiCitURVNUX0FSRzI9Ii1MJHtMSUJfMk5EfSAkVEVTVF9BUkcyIgorCitTUkNfU1VCRElSUz0ibWFuIGluY2x1ZGUiCitmb3IgY2ZfZGlyIGluICRjZl9jdl9zcmNfbW9kdWxlcworZG8KKwlTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTICRjZl9kaXIiCitkb25lCitTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIHRlc3QiCit0ZXN0IC16ICIkTUFLRV9URVJNSU5GTyIgJiYgU1JDX1NVQkRJUlM9IiRTUkNfU1VCRElSUyBtaXNjIgordGVzdCAiJGNmX3dpdGhfY3h4X2JpbmRpbmciICE9IG5vICYmIFNSQ19TVUJESVJTPSIkU1JDX1NVQkRJUlMgYysrIgorCitBREFfU1VCRElSUz0KK2lmIHRlc3QgIiRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPSB5ZXMgJiYgdGVzdCAtZiAkc3JjZGlyL0FkYTk1L01ha2VmaWxlLmluOyB0aGVuCisgICBTUkNfU1VCRElSUz0iJFNSQ19TVUJESVJTIEFkYTk1IgorICAgQURBX1NVQkRJUlM9ImdlbiBzcmMgc2FtcGxlcyIKK2ZpCisKK1NVQl9NQUtFRklMRVM9Citmb3IgY2ZfZGlyIGluICRTUkNfU1VCRElSUworZG8KKwlTVUJfTUFLRUZJTEVTPSIkU1VCX01BS0VGSUxFUyAkY2ZfZGlyL01ha2VmaWxlIgorZG9uZQorCitpZiB0ZXN0IC1uICIkQURBX1NVQkRJUlMiOyB0aGVuCisgICBmb3IgY2ZfZGlyIGluICRBREFfU1VCRElSUworICAgZG8KKyAgICAgIFNVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIEFkYTk1LyRjZl9kaXIvTWFrZWZpbGUiCisgICBkb25lCisKK2ZpCisKK2lmIHRlc3QgIiRjZl93aXRoX2FkYSIgIT0gIm5vIiAmJiB0ZXN0ICIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiICE9ICJubyI7IHRoZW4KKyAgIFNVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIEFkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnIgorZmkKKworRElSU19UT19NQUtFPSJsaWIiCitmb3IgY2ZfaXRlbSBpbiAkY2ZfbGlzdF9tb2RlbHMKK2RvCisKKwljYXNlICRjZl9pdGVtIGluCisJbGlidG9vbCkgY2Zfc3ViZGlyPSdvYmpfbG8nICA7OworCW5vcm1hbCkgIGNmX3N1YmRpcj0nb2JqZWN0cycgOzsKKwlkZWJ1ZykgICBjZl9zdWJkaXI9J29ial9nJyA7OworCXByb2ZpbGUpIGNmX3N1YmRpcj0nb2JqX3AnIDs7CisJc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJCWN5Z3dpbikgIyh2aQorCQkJY2Zfc3ViZGlyPSdvYmplY3RzJyA7OworCQkqKQorCQkJY2Zfc3ViZGlyPSdvYmpfcycgOzsKKwkJZXNhYworCWVzYWMKKworCWZvciBjZl9pdGVtMiBpbiAkRElSU19UT19NQUtFCisJZG8KKwkJdGVzdCAkY2ZfaXRlbTIgPSAkY2Zfc3ViZGlyICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIi4kY2ZfaXRlbTIiICE9ICIuJGNmX3N1YmRpciIgJiYgRElSU19UT19NQUtFPSIkRElSU19UT19NQUtFICRjZl9zdWJkaXIiCitkb25lCitmb3IgY2ZfZGlyIGluICRESVJTX1RPX01BS0UKK2RvCisJdGVzdCAhIC1kICRjZl9kaXIgJiYgbWtkaXIgJGNmX2RpcgorZG9uZQorCitjYXQgPj5jb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIE5DVVJTRVNfUEFUSFNFUCAnJFBBVEhTRVAnCitFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBOQ1VSU0VTX1ZFUlNJT05fU1RSSU5HICIke05DVVJTRVNfTUFKT1J9LiR7TkNVUlNFU19NSU5PUn0uJHtOQ1VSU0VTX1BBVENIfSIKK0VPRgorCisjIyMgTm93IHRoYXQgd2UncmUgZG9uZSBydW5uaW5nIHRlc3RzLCBhZGQgdGhlIGNvbXBpbGVyLXdhcm5pbmdzLCBpZiBhbnkKKworY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkRVhUUkFfQ0ZMQUdTCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKworCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKKyMjIyBJZiB3ZSdyZSBidWlsZGluZyB3aXRoIHJwYXRoLCB0cnkgdG8gbGluayBub24tc3RhbmRhcmQgbGlicyB0aGF0IHdheSB0b28uCitpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAic2hhcmVkIjsgdGhlbgorCitlY2hvICIkYXNfbWU6MTY3NjM6IGNoZWNraW5nIGZvciB1cGRhdGVkIExERkxBR1MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdXBkYXRlZCBMREZMQUdTLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAtbiAiJExERkxBR1MiIDsgdGhlbgorZWNobyAiJGFzX21lOjE2NzY2OiByZXN1bHQ6IG1heWJlIiA+JjUKK2VjaG8gIiR7RUNIT19UfW1heWJlIiA+JjYKK3Rlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uY2hlY2tpbmcgTERGTEFHUyAkTERGTEFHUyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTY3NzA6IHRlc3RpbmcgLi4uY2hlY2tpbmcgTERGTEFHUyAkTERGTEFHUyAuLi4iIDE+JjUKKwordGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi5jaGVja2luZyBFWFRSQV9MREZMQUdTICRFWFRSQV9MREZMQUdTIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxNjc3NDogdGVzdGluZyAuLi5jaGVja2luZyBFWFRSQV9MREZMQUdTICRFWFRSQV9MREZMQUdTIC4uLiIgMT4mNQorCitjYXNlICIkRVhUUkFfTERGTEFHUyIgaW4gIyh2aQorLVdsLC1ycGF0aCwqKSAjKHZpCisJY2ZfcnBhdGhfaGFjaz0iLVdsLC1ycGF0aCwiCisJOzsKKy1SXCAqKQorCWNmX3JwYXRoX2hhY2s9Ii1SICIKKwk7OworLVIqKQorCWNmX3JwYXRoX2hhY2s9Ii1SIgorCTs7CisqKQorCWNmX3JwYXRoX2hhY2s9CisJOzsKK2VzYWMKK2lmIHRlc3QgLW4gIiRjZl9ycGF0aF9oYWNrIiA7IHRoZW4KKwljZl9ycGF0aF9kc3Q9CisJZm9yIGNmX3JwYXRoX3NyYyBpbiAkTERGTEFHUworCWRvCisJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJRmlsdGVyaW5nICRjZl9ycGF0aF9zcmMiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjE2Nzk2OiB0ZXN0aW5nIEZpbHRlcmluZyAkY2ZfcnBhdGhfc3JjIC4uLiIgMT4mNQorCisJCWNhc2UgJGNmX3JwYXRoX3NyYyBpbiAjKHZpCisJCS1MKikgIyh2aQorCQkJaWYgdGVzdCAiJGNmX3JwYXRoX2hhY2siID0gIi1SICIgOyB0aGVuCisJCQkJY2ZfcnBhdGhfdG1wPWBlY2hvICIkY2ZfcnBhdGhfc3JjIiB8c2VkIC1lICdzJS1MJS1SICUnYAorCQkJZWxzZQorCQkJCWNmX3JwYXRoX3RtcD1gZWNobyAiJGNmX3JwYXRoX3NyYyIgfHNlZCAtZSBzJS1MJSRjZl9ycGF0aF9oYWNrJWAKKwkJCWZpCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLkZpbHRlciAkY2ZfcnBhdGhfdG1wIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxNjgwNzogdGVzdGluZyAuLi5GaWx0ZXIgJGNmX3JwYXRoX3RtcCAuLi4iIDE+JjUKKworCQkJRVhUUkFfTERGTEFHUz0iJGNmX3JwYXRoX3RtcCAkRVhUUkFfTERGTEFHUyIKKwkJCTs7CisJCWVzYWMKKwkJY2ZfcnBhdGhfZHN0PSIkY2ZfcnBhdGhfZHN0ICRjZl9ycGF0aF9zcmMiCisJZG9uZQorCUxERkxBR1M9JGNmX3JwYXRoX2RzdAorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uY2hlY2tlZCBMREZMQUdTICRMREZMQUdTIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxNjgxNzogdGVzdGluZyAuLi5jaGVja2VkIExERkxBR1MgJExERkxBR1MgLi4uIiAxPiY1CisKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLmNoZWNrZWQgRVhUUkFfTERGTEFHUyAkRVhUUkFfTERGTEFHUyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06MTY4MjE6IHRlc3RpbmcgLi4uY2hlY2tlZCBFWFRSQV9MREZMQUdTICRFWFRSQV9MREZMQUdTIC4uLiIgMT4mNQorCitmaQorZWxzZQorZWNobyAiJGFzX21lOjE2ODI1OiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCisKKyMjIyBEZWZpbmUgc3Vic3RpdHV0aW9ucyBmb3IgaGVhZGVyIGZpbGVzIHRvIGF2b2lkIG5hbWUtcG9sbHV0aW9uCisKK2lmIHRlc3QgIiRjZl9jdl9oYXZlX3RjZ2V0YXR0ciIgPSB5ZXMgOyB0aGVuCisJSEFWRV9UQ0dFVEFUVFI9MQorZWxzZQorCUhBVkVfVENHRVRBVFRSPTAKK2ZpCisKK2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfdGVybWlvX2giID0geWVzIDsgdGhlbgorCUhBVkVfVEVSTUlPX0g9MQorZWxzZQorCUhBVkVfVEVSTUlPX0g9MAorZmkKKworaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl90ZXJtaW9zX2giID0geWVzIDsgdGhlbgorCUhBVkVfVEVSTUlPU19IPTEKK2Vsc2UKKwlIQVZFX1RFUk1JT1NfSD0wCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdCAiJHVzZV9kYXRhYmFzZSIgPSB5ZXMgJiYgU1VCX01BS0VGSUxFUz0iJFNVQl9NQUtFRklMRVMgbWlzYy9ydW5fdGljLnNoOm1pc2MvcnVuX3RpYy5pbiIKK1NVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIG1pc2MvbmN1cnNlcy1jb25maWc6bWlzYy9uY3Vyc2VzLWNvbmZpZy5pbiIKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBpbmNsdWRlL01LdGVybS5oLmF3ayBpbmNsdWRlL2N1cnNlcy5oZWFkOmluY2x1ZGUvY3Vyc2VzLmguaW4gaW5jbHVkZS90ZXJtY2FwLmggaW5jbHVkZS91bmN0cmwuaCAkU1VCX01BS0VGSUxFUyBNYWtlZmlsZSIKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZWZhdWx0IgorY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgZG9uJ3QgcHV0IG5ld2xpbmVzIGluIGNhY2hlIHZhcmlhYmxlcycgdmFsdWVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgoreworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlIGAoYWNfc3BhY2U9JyAnOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorICAgICphY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICAgIHNlZCAtbiBcCisgICAgICAgICJzLycvJ1xcXFwnJy9nOworICAgIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gXAorICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgIDs7CisgICAgZXNhYzsKK30gfAorICBzZWQgJworICAgICB0IGNsZWFyCisgICAgIDogY2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICAvXmFjX2N2X2Vudi8hcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDogZW5kJyA+PmNvbmZjYWNoZQoraWYgY21wIC1zICRjYWNoZV9maWxlIGNvbmZjYWNoZTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgJGNhY2hlX2ZpbGU7IHRoZW4KKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJiBlY2hvICJ1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICBlbHNlCisgICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWyAJXSpWUEFUSFsgCV0qPS97CitzLzoqXCQoc3JjZGlyKToqLzovOworcy86Klwke3NyY2Rpcn06Ki86LzsKK3MvOipAc3JjZGlyQDoqLzovOworcy9eXChbXj1dKj1bIAldKlwpOiovXDEvOworcy86KiQvLzsKK3MvXltePV0qPVsgCV0qJC8vOworfScKK2ZpCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKKzogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyBlY2hvICIkYXNfbWU6MTY5MzU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9CitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorYWNfY3NfaW52b2NhdGlvbj0iXCQwIFwkQCIKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CitlbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBzZXQgLW8gcG9zaXgKK2ZpCisKKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KK2FzX21lPWBlY2hvICIkMCIgfHNlZCAncywuKltcXC9dLCwnYAorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2VjaG8gPmNvbmYkJC5maWxlCitpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKKyAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCisgIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgorICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxzZQorICAgIGFzX2xuX3M9J2xuIC1zJworICBmaQorZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbG5fcz1sbgorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorCithc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisKKyMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgoraWYgKEZPTz1GT087IHVuc2V0IEZPTykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Vuc2V0PXVuc2V0CitlbHNlCisgIGFzX3Vuc2V0PWZhbHNlCitmaQorCisjIE5MUyBudWlzYW5jZXMuCiskYXNfdW5zZXQgTEFORyB8fCB0ZXN0ICIke0xBTkcrc2V0fSIgIT0gc2V0IHx8IHsgTEFORz1DOyBleHBvcnQgTEFORzsgfQorJGFzX3Vuc2V0IExDX0FMTCB8fCB0ZXN0ICIke0xDX0FMTCtzZXR9IiAhPSBzZXQgfHwgeyBMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgfQorJGFzX3Vuc2V0IExDX1RJTUUgfHwgdGVzdCAiJHtMQ19USU1FK3NldH0iICE9IHNldCB8fCB7IExDX1RJTUU9QzsgZXhwb3J0IExDX1RJTUU7IH0KKyRhc191bnNldCBMQ19DVFlQRSB8fCB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICE9IHNldCB8fCB7IExDX0NUWVBFPUM7IGV4cG9ydCBMQ19DVFlQRTsgfQorJGFzX3Vuc2V0IExBTkdVQUdFIHx8IHRlc3QgIiR7TEFOR1VBR0Urc2V0fSIgIT0gc2V0IHx8IHsgTEFOR1VBR0U9QzsgZXhwb3J0IExBTkdVQUdFOyB9CiskYXNfdW5zZXQgTENfQ09MTEFURSB8fCB0ZXN0ICIke0xDX0NPTExBVEUrc2V0fSIgIT0gc2V0IHx8IHsgTENfQ09MTEFURT1DOyBleHBvcnQgTENfQ09MTEFURTsgfQorJGFzX3Vuc2V0IExDX05VTUVSSUMgfHwgdGVzdCAiJHtMQ19OVU1FUklDK3NldH0iICE9IHNldCB8fCB7IExDX05VTUVSSUM9QzsgZXhwb3J0IExDX05VTUVSSUM7IH0KKyRhc191bnNldCBMQ19NRVNTQUdFUyB8fCB0ZXN0ICIke0xDX01FU1NBR0VTK3NldH0iICE9IHNldCB8fCB7IExDX01FU1NBR0VTPUM7IGV4cG9ydCBMQ19NRVNTQUdFUzsgfQorCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KK2FzX25sPScKKycKK0lGUz0iIAkkYXNfbmwiCisKKyMgQ0RQQVRILgorJGFzX3Vuc2V0IENEUEFUSCB8fCB0ZXN0ICIke0NEUEFUSCtzZXR9IiAhPSBzZXQgfHwgeyBDRFBBVEg9OjsgZXhwb3J0IENEUEFUSDsgfQorCitleGVjIDY+JjEKKworX0FDRU9GCisKKyMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KK2lmIHRlc3QgLW4gIiRhY19jb25maWdfZmlsZXMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19maWxlcz1cIiRhY19jb25maWdfZmlsZXNcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19oZWFkZXJzIjsgdGhlbgorICBlY2hvICJjb25maWdfaGVhZGVycz1cIiRhY19jb25maWdfaGVhZGVyc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2xpbmtzIjsgdGhlbgorICBlY2hvICJjb25maWdfbGlua3M9XCIkYWNfY29uZmlnX2xpbmtzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19jb25maWdfY29tbWFuZHMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19jb21tYW5kcz1cIiRhY19jb25maWdfY29tbWFuZHNcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGZyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUKK2N1cnJlbnQgY29uZmlndXJhdGlvbi4KKworVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisKK0NvbmZpZ3VyYXRpb24gZmlsZXM6CiskY29uZmlnX2ZpbGVzCisKK0NvbmZpZ3VyYXRpb24gaGVhZGVyczoKKyRjb25maWdfaGVhZGVycworCitDb25maWd1cmF0aW9uIGNvbW1hbmRzOgorJGNvbmZpZ19jb21tYW5kcworCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9jb25mQGdudS5vcmc+LiIKK0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PEVPRgorYWNfY3NfdmVyc2lvbj0iXFwKK2NvbmZpZy5zdGF0dXMKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41Mi4yMDA4MDMyNSwKKyAgd2l0aCBvcHRpb25zIFxcImBlY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisKK0NvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKK3NyY2Rpcj0kc3JjZGlyCitJTlNUQUxMPSIkSU5TVEFMTCIKK0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKyMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0CisjIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPSopCisgICAgYWNfb3B0aW9uPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCisgICAgc2hpZnQKKyAgICBzZXQgZHVtbXkgIiRhY19vcHRpb24iICIkYWNfb3B0YXJnIiAkezErIiRAIn0KKyAgICBzaGlmdAorICAgIDs7CisgIC0qKTs7CisgICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKKyAgICAgIyBhcmd1bWVudHMuCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICBlc2FjCisKKyAgY2FzZSAkMSBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PEVPRgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBlY2hvICJydW5uaW5nICRTSEVMTCAkMCAiICRhY19jb25maWd1cmVfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIgorICAgIGV4ZWMgJFNIRUxMICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7OworRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKyAgLS12ZXJzaW9uIHwgLS12ZXJzKiB8IC1WICkKKyAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgeyB7IGVjaG8gIiRhc19tZToxNzExMTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKKyAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgZGVidWc9OiA7OworICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgIHNoaWZ0CisgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICQxIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgc2hpZnQKKyAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICQxIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworCisgICMgVGhpcyBpcyBhbiBlcnJvci4KKyAgLSopIHsgeyBlY2hvICIkYXNfbWU6MTcxMzA6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisKKyAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIgOzsKKworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2V4ZWMgNT4+Y29uZmlnLmxvZworY2F0ID4mNSA8PCBfQUNFT0YKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJ1bm5pbmcgY29uZmlnLnN0YXR1cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5ICRhc19tZSAyLjUyLjIwMDgwMzI1LCBleGVjdXRlZCB3aXRoCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICA+ICRhY19jc19pbnZvY2F0aW9uCitvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKworX0FDRU9GCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxFT0YKKyMKKyMgSU5JVC1DT01NQU5EUyBzZWN0aW9uLgorIworCisjIyMgU3BlY2lhbCBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlCisjIyMgY29uZmlndXJhdGlvbi1ydW4gaW50byBjb25maWcuc3RhdHVzCisKK0FXSz0iJEFXSyIKK0RGVF9BUkdfU1VGRklYPSIkREZUX0FSR19TVUZGSVgiCitERlRfTFdSX01PREVMPSIkREZUX0xXUl9NT0RFTCIKK0VDSE9fTElOSz0iJEVDSE9fTElOSyIKK0xEQ09ORklHPSIkTERDT05GSUciCitMSUJfTkFNRT0iJExJQl9OQU1FIgorTElCX1NVQlNFVFM9IiRMSUJfU1VCU0VUUyIKK0xJQl9TVUZGSVg9IiRMSUJfU1VGRklYIgorTElCX1RSQUNJTkc9IiRMSUJfVFJBQ0lORyIKK01BS0VfVEVSTUlORk89IiRNQUtFX1RFUk1JTkZPIgorTkNVUlNFU19NQUpPUj0iJE5DVVJTRVNfTUFKT1IiCitOQ1VSU0VTX01JTk9SPSIkTkNVUlNFU19NSU5PUiIKK05DVVJTRVNfT1NQRUVEPSIkTkNVUlNFU19PU1BFRUQiCitOQ1VSU0VTX1BBVENIPSIkTkNVUlNFU19QQVRDSCIKK1NSQ19TVUJESVJTPSIkU1JDX1NVQkRJUlMiCitURVJNSU5GTz0iJFRFUk1JTkZPIgorVElORk9fQVJHX1NVRkZJWD0iJFRJTkZPX0FSR19TVUZGSVgiCitUSU5GT19MSUJfU1VGRklYPSIkVElORk9fTElCX1NVRkZJWCIKK1RJTkZPX05BTUU9IiRUSU5GT19OQU1FIgorVElORk9fU1VGRklYPSIkVElORk9fU1VGRklYIgorVElDU19BUkdfU1VGRklYPSIkVElDU19BUkdfU1VGRklYIgorVElDU19MSUJfU1VGRklYPSIkVElDU19MSUJfU1VGRklYIgorVElDU19OQU1FPSIkVElDU19OQU1FIgorV0lUSF9DVVJTRVNfSD0iJHdpdGhfY3Vyc2VzX2giCitXSVRIX0VDSE89IiR3aXRoX2VjaG8iCitXSVRIX09WRVJXUklURT0iJHdpdGhfb3ZlcndyaXRlIgorY2ZfTElTVF9NT0RFTFM9IiRjZl9saXN0X21vZGVscyIKK2NmX2N2X2FiaV92ZXJzaW9uPSIkY2ZfY3ZfYWJpX3ZlcnNpb24iCitjZl9jdl9kb19yZWxpbms9IiRjZl9jdl9kb19yZWxpbmsiCitjZl9jdl9kb19zeW1saW5rcz0iJGNmX2N2X2RvX3N5bWxpbmtzIgorY2ZfY3ZfZW5hYmxlX2xwNjQ9IiRjZl9jdl9lbmFibGVfbHA2NCIKK2NmX2N2X2VuYWJsZV9vcGFxdWU9IiRjZl9jdl9lbmFibGVfb3BhcXVlIgorY2ZfY3ZfcHJvZ19DQ19jX289JGNmX2N2X3Byb2dfQ0NfY19vCitjZl9jdl9wcm9nX0NYWF9jX289JGNmX2N2X3Byb2dfQ1hYX2NfbworY2ZfY3ZfcmVsX3ZlcnNpb249IiRjZl9jdl9yZWxfdmVyc2lvbiIKK2NmX2N2X3JtX3NvX2xvY3M9IiRjZl9jdl9ybV9zb19sb2NzIgorY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nJGNmX2N2X3NoYXJlZF9zb25hbWUnCitjZl9jdl9zaGxpYl92ZXJzaW9uPSIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIKK2NmX2N2X3NobGliX3ZlcnNpb25faW5maXg9IiRjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4IgorY2ZfY3Zfc3lzdGVtX25hbWU9IiRjZl9jdl9zeXN0ZW1fbmFtZSIKK2NmX3dpdGhfY3h4X2JpbmRpbmc9IiRjZl93aXRoX2N4eF9iaW5kaW5nIgoraG9zdD0iJGhvc3QiCit0YXJnZXQ9IiR0YXJnZXQiCisKK0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworZG8KKyAgY2FzZSAiJGFjX2NvbmZpZ190YXJnZXQiIGluCisgICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorICAiaW5jbHVkZS9NS3Rlcm0uaC5hd2siICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvTUt0ZXJtLmguYXdrIiA7OworICAiaW5jbHVkZS9jdXJzZXMuaGVhZCIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS9jdXJzZXMuaGVhZDppbmNsdWRlL2N1cnNlcy5oLmluIiA7OworICAiaW5jbHVkZS90ZXJtY2FwLmgiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvdGVybWNhcC5oIiA7OworICAiaW5jbHVkZS91bmN0cmwuaCIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS91bmN0cmwuaCIgOzsKKyAgIiRTVUJfTUFLRUZJTEVTIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkU1VCX01BS0VGSUxFUyIgOzsKKyAgIk1ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKyAgImRlZmF1bHQiICkgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlZmF1bHQiIDs7CisgICJpbmNsdWRlL25jdXJzZXNfY2ZnLmgiICkgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBpbmNsdWRlL25jdXJzZXNfY2ZnLmg6aW5jbHVkZS9uY3Vyc2VzX2NmZy5oaW4iIDs7CisgICopIHsgeyBlY2hvICIkYXNfbWU6MTcyMjc6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIGVzYWMKK2RvbmUKKworIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CisjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgoraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKyAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKKyAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKKyAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKK2ZpCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIGhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCiskZGVidWcgfHwKK3sKKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD87IHJtIC1yZiAkdG1wICYmIGV4aXQgJGV4aXRfc3RhdHVzJyAwCisgIHRyYXAgJ3sgKGV4aXQgMSk7IGV4aXQgMTsgfScgMSAyIDEzIDE1Cit9CisKKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorOiAke1RNUERJUj0vdG1wfQoreworICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIkVE1QRElSL2NzWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9JFRNUERJUi9jcyQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKQorfSB8fAoreworICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorfQorCitFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxFT0YKKworIworIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMKKworIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKK2lmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgorICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOworICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKK3MsQFNIRUxMQCwkU0hFTEwsO3QgdAorcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0CitzLEBwcmVmaXhALCRwcmVmaXgsO3QgdAorcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAorcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKK3MsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKK3MsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKK3MsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKK3MsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKK3MsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAorcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAorcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKK3MsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKK3MsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKK3MsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKK3MsQG1hbmRpckAsJG1hbmRpciw7dCB0CitzLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAorcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKK3MsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0CitzLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKK3MsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAorcyxAYnVpbGRfYWxpYXNALCRidWlsZF9hbGlhcyw7dCB0CitzLEBob3N0X2FsaWFzQCwkaG9zdF9hbGlhcyw7dCB0CitzLEB0YXJnZXRfYWxpYXNALCR0YXJnZXRfYWxpYXMsO3QgdAorcyxARUNIT19DQCwkRUNIT19DLDt0IHQKK3MsQEVDSE9fTkAsJEVDSE9fTiw7dCB0CitzLEBFQ0hPX1RALCRFQ0hPX1QsO3QgdAorcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0CitzLEBERUZTQCwkREVGUyw7dCB0CitzLEBMSUJTQCwkTElCUyw7dCB0CitzLEB0b3BfYnVpbGRkaXJALCR0b3BfYnVpbGRkaXIsO3QgdAorcyxARUdSRVBALCRFR1JFUCw7dCB0CitzLEBOQ1VSU0VTX01BSk9SQCwkTkNVUlNFU19NQUpPUiw7dCB0CitzLEBOQ1VSU0VTX01JTk9SQCwkTkNVUlNFU19NSU5PUiw7dCB0CitzLEBOQ1VSU0VTX1BBVENIQCwkTkNVUlNFU19QQVRDSCw7dCB0CitzLEBjZl9jdl9yZWxfdmVyc2lvbkAsJGNmX2N2X3JlbF92ZXJzaW9uLDt0IHQKK3MsQGNmX2N2X2FiaV92ZXJzaW9uQCwkY2ZfY3ZfYWJpX3ZlcnNpb24sO3QgdAorcyxAY2ZfY3ZfYnVpbHRpbl9ib29sQCwkY2ZfY3ZfYnVpbHRpbl9ib29sLDt0IHQKK3MsQGNmX2N2X2hlYWRlcl9zdGRib29sX2hALCRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oLDt0IHQKK3MsQGNmX2N2X3R5cGVfb2ZfYm9vbEAsJGNmX2N2X3R5cGVfb2ZfYm9vbCw7dCB0CitzLEBidWlsZEAsJGJ1aWxkLDt0IHQKK3MsQGJ1aWxkX2NwdUAsJGJ1aWxkX2NwdSw7dCB0CitzLEBidWlsZF92ZW5kb3JALCRidWlsZF92ZW5kb3IsO3QgdAorcyxAYnVpbGRfb3NALCRidWlsZF9vcyw7dCB0CitzLEBob3N0QCwkaG9zdCw7dCB0CitzLEBob3N0X2NwdUAsJGhvc3RfY3B1LDt0IHQKK3MsQGhvc3RfdmVuZG9yQCwkaG9zdF92ZW5kb3IsO3QgdAorcyxAaG9zdF9vc0AsJGhvc3Rfb3MsO3QgdAorcyxAdGFyZ2V0QCwkdGFyZ2V0LDt0IHQKK3MsQHRhcmdldF9jcHVALCR0YXJnZXRfY3B1LDt0IHQKK3MsQHRhcmdldF92ZW5kb3JALCR0YXJnZXRfdmVuZG9yLDt0IHQKK3MsQHRhcmdldF9vc0AsJHRhcmdldF9vcyw7dCB0CitzLEBDQ0AsJENDLDt0IHQKK3MsQENGTEFHU0AsJENGTEFHUyw7dCB0CitzLEBMREZMQUdTQCwkTERGTEFHUyw7dCB0CitzLEBDUFBGTEFHU0AsJENQUEZMQUdTLDt0IHQKK3MsQGFjX2N0X0NDQCwkYWNfY3RfQ0MsO3QgdAorcyxARVhFRVhUQCwkRVhFRVhULDt0IHQKK3MsQE9CSkVYVEAsJE9CSkVYVCw7dCB0CitzLEBDUFBALCRDUFAsO3QgdAorcyxARVhUUkFfQ1BQRkxBR1NALCRFWFRSQV9DUFBGTEFHUyw7dCB0CitzLEBQUk9HX0VYVEAsJFBST0dfRVhULDt0IHQKK3MsQExEQ09ORklHQCwkTERDT05GSUcsO3QgdAorcyxAQ1hYQCwkQ1hYLDt0IHQKK3MsQENYWEZMQUdTQCwkQ1hYRkxBR1MsO3QgdAorcyxAYWNfY3RfQ1hYQCwkYWNfY3RfQ1hYLDt0IHQKK3MsQEFXS0AsJEFXSyw7dCB0CitzLEBJTlNUQUxMX1BST0dSQU1ALCRJTlNUQUxMX1BST0dSQU0sO3QgdAorcyxASU5TVEFMTF9TQ1JJUFRALCRJTlNUQUxMX1NDUklQVCw7dCB0CitzLEBJTlNUQUxMX0RBVEFALCRJTlNUQUxMX0RBVEEsO3QgdAorcyxATElOVEAsJExJTlQsO3QgdAorcyxATElOVF9PUFRTQCwkTElOVF9PUFRTLDt0IHQKK3MsQExOX1NALCRMTl9TLDt0IHQKK3MsQFNFVF9NQUtFQCwkU0VUX01BS0UsO3QgdAorcyxATUFLRV9MT1dFUl9UQUdTQCwkTUFLRV9MT1dFUl9UQUdTLDt0IHQKK3MsQE1BS0VfVVBQRVJfVEFHU0AsJE1BS0VfVVBQRVJfVEFHUyw7dCB0CitzLEBjZl9jdl9tYWtlZmxhZ3NALCRjZl9jdl9tYWtlZmxhZ3MsO3QgdAorcyxAUkFOTElCQCwkUkFOTElCLDt0IHQKK3MsQGFjX2N0X1JBTkxJQkAsJGFjX2N0X1JBTkxJQiw7dCB0CitzLEBMREAsJExELDt0IHQKK3MsQGFjX2N0X0xEQCwkYWNfY3RfTEQsO3QgdAorcyxAQVJALCRBUiw7dCB0CitzLEBhY19jdF9BUkAsJGFjX2N0X0FSLDt0IHQKK3MsQEFSX09QVFNALCRBUl9PUFRTLDt0IHQKK3MsQERFU1RESVJALCRERVNURElSLDt0IHQKK3MsQEJVSUxEX0NDQCwkQlVJTERfQ0MsO3QgdAorcyxAQlVJTERfQ1BQQCwkQlVJTERfQ1BQLDt0IHQKK3MsQEJVSUxEX0NGTEFHU0AsJEJVSUxEX0NGTEFHUyw7dCB0CitzLEBCVUlMRF9DUFBGTEFHU0AsJEJVSUxEX0NQUEZMQUdTLDt0IHQKK3MsQEJVSUxEX0xERkxBR1NALCRCVUlMRF9MREZMQUdTLDt0IHQKK3MsQEJVSUxEX0xJQlNALCRCVUlMRF9MSUJTLDt0IHQKK3MsQEJVSUxEX0VYRUVYVEAsJEJVSUxEX0VYRUVYVCw7dCB0CitzLEBCVUlMRF9PQkpFWFRALCRCVUlMRF9PQkpFWFQsO3QgdAorcyxAY2ZfbGlzdF9tb2RlbHNALCRjZl9saXN0X21vZGVscyw7dCB0CitzLEBMSUJUT09MQCwkTElCVE9PTCw7dCB0CitzLEBMSUJUT09MX0NYWEAsJExJQlRPT0xfQ1hYLDt0IHQKK3MsQExJQlRPT0xfT1BUU0AsJExJQlRPT0xfT1BUUyw7dCB0CitzLEBMSUJfQ1JFQVRFQCwkTElCX0NSRUFURSw7dCB0CitzLEBMSUJfT0JKRUNUQCwkTElCX09CSkVDVCw7dCB0CitzLEBMSUJfU1VGRklYQCwkTElCX1NVRkZJWCw7dCB0CitzLEBMSUJfUFJFUEAsJExJQl9QUkVQLDt0IHQKK3MsQExJQl9DTEVBTkAsJExJQl9DTEVBTiw7dCB0CitzLEBMSUJfQ09NUElMRUAsJExJQl9DT01QSUxFLDt0IHQKK3MsQExJQl9MSU5LQCwkTElCX0xJTkssO3QgdAorcyxATElCX0lOU1RBTExALCRMSUJfSU5TVEFMTCw7dCB0CitzLEBMSUJfVU5JTlNUQUxMQCwkTElCX1VOSU5TVEFMTCw7dCB0CitzLEBERlRfTFdSX01PREVMQCwkREZUX0xXUl9NT0RFTCw7dCB0CitzLEBERlRfVVBSX01PREVMQCwkREZUX1VQUl9NT0RFTCw7dCB0CitzLEBUSUNTX05BTUVALCRUSUNTX05BTUUsO3QgdAorcyxAVElORk9fTkFNRUAsJFRJTkZPX05BTUUsO3QgdAorcyxATElCX05BTUVALCRMSUJfTkFNRSw7dCB0CitzLEBMSUJfUFJFRklYQCwkTElCX1BSRUZJWCw7dCB0CitzLEBDQ19HX09QVEAsJENDX0dfT1BULDt0IHQKK3MsQENYWF9HX09QVEAsJENYWF9HX09QVCw7dCB0CitzLEBMRF9NT0RFTEAsJExEX01PREVMLDt0IHQKK3MsQENDX1NIQVJFRF9PUFRTQCwkQ0NfU0hBUkVEX09QVFMsO3QgdAorcyxATERfU0hBUkVEX09QVFNALCRMRF9TSEFSRURfT1BUUyw7dCB0CitzLEBNS19TSEFSRURfTElCQCwkTUtfU0hBUkVEX0xJQiw7dCB0CitzLEBMSU5LX1BST0dTQCwkTElOS19QUk9HUyw7dCB0CitzLEBMSU5LX1RFU1RTQCwkTElOS19URVNUUyw7dCB0CitzLEBFWFRSQV9MREZMQUdTQCwkRVhUUkFfTERGTEFHUyw7dCB0CitzLEBMT0NBTF9MREZMQUdTQCwkTE9DQUxfTERGTEFHUyw7dCB0CitzLEBMT0NBTF9MREZMQUdTMkAsJExPQ0FMX0xERkxBR1MyLDt0IHQKK3MsQElOU1RBTExfTElCQCwkSU5TVEFMTF9MSUIsO3QgdAorcyxAVEVSTUlORk9fU1JDQCwkVEVSTUlORk9fU1JDLDt0IHQKK3MsQFBBVEhTRVBALCRQQVRIU0VQLDt0IHQKK3MsQEZBTExCQUNLX0xJU1RALCRGQUxMQkFDS19MSVNULDt0IHQKK3MsQFdISUNIX1hURVJNQCwkV0hJQ0hfWFRFUk0sO3QgdAorcyxAVEVSTUlORk9fRElSU0AsJFRFUk1JTkZPX0RJUlMsO3QgdAorcyxAVEVSTUlORk9ALCRURVJNSU5GTyw7dCB0CitzLEBNQUtFX1RFUk1JTkZPQCwkTUFLRV9URVJNSU5GTyw7dCB0CitzLEBVU0VfQklHX1NUUklOR1NALCRVU0VfQklHX1NUUklOR1MsO3QgdAorcyxAVEVSTVBBVEhALCRURVJNUEFUSCw7dCB0CitzLEBCUk9LRU5fTElOS0VSQCwkQlJPS0VOX0xJTktFUiw7dCB0CitzLEBOQ1VSU0VTX0NIX1RALCROQ1VSU0VTX0NIX1QsO3QgdAorcyxATkNVUlNFU19MSUJVVEY4QCwkTkNVUlNFU19MSUJVVEY4LDt0IHQKK3MsQE5FRURfV0NIQVJfSEAsJE5FRURfV0NIQVJfSCw7dCB0CitzLEBOQ1VSU0VTX01CU1RBVEVfVEAsJE5DVVJTRVNfTUJTVEFURV9ULDt0IHQKK3MsQE5DVVJTRVNfV0NIQVJfVEAsJE5DVVJTRVNfV0NIQVJfVCw7dCB0CitzLEBOQ1VSU0VTX1dJTlRfVEAsJE5DVVJTRVNfV0lOVF9ULDt0IHQKK3MsQE5DVVJTRVNfT0tfV0NIQVJfVEAsJE5DVVJTRVNfT0tfV0NIQVJfVCw7dCB0CitzLEBOQ1VSU0VTX09LX1dJTlRfVEAsJE5DVVJTRVNfT0tfV0lOVF9ULDt0IHQKK3MsQGNmX2N2X2VuYWJsZV9scDY0QCwkY2ZfY3ZfZW5hYmxlX2xwNjQsO3QgdAorcyxATkNVUlNFU19UUEFSTV9WQVJBUkdTQCwkTkNVUlNFU19UUEFSTV9WQVJBUkdTLDt0IHQKK3MsQE5DVVJTRVNfQk9PTEAsJE5DVVJTRVNfQk9PTCw7dCB0CitzLEBURVJNSU5GT19DQVBTQCwkVEVSTUlORk9fQ0FQUyw7dCB0CitzLEBOQ1VSU0VTX09TUEVFREAsJE5DVVJTRVNfT1NQRUVELDt0IHQKK3MsQE1BTlBBR0VfUkVOQU1FU0AsJE1BTlBBR0VfUkVOQU1FUyw7dCB0CitzLEBOQ1VSU0VTX0VYVF9GVU5DU0AsJE5DVVJTRVNfRVhUX0ZVTkNTLDt0IHQKK3MsQE5DVVJTRVNfQ09OU1RALCROQ1VSU0VTX0NPTlNULDt0IHQKK3MsQE5DVVJTRVNfRVhUX0NPTE9SU0AsJE5DVVJTRVNfRVhUX0NPTE9SUyw7dCB0CitzLEBOQ1VSU0VTX01PVVNFX1ZFUlNJT05ALCROQ1VSU0VTX01PVVNFX1ZFUlNJT04sO3QgdAorcyxATkNVUlNFU19TQk9PTEAsJE5DVVJTRVNfU0JPT0wsO3QgdAorcyxATkNVUlNFU19YTkFNRVNALCROQ1VSU0VTX1hOQU1FUyw7dCB0CitzLEBQVEhSRUFEQCwkUFRIUkVBRCw7dCB0CitzLEBjZl9jdl9lbmFibGVfcmVlbnRyYW50QCwkY2ZfY3ZfZW5hYmxlX3JlZW50cmFudCw7dCB0CitzLEBjZl9jdl9lbmFibGVfb3BhcXVlQCwkY2ZfY3ZfZW5hYmxlX29wYXF1ZSw7dCB0CitzLEBOQ1VSU0VTX09QQVFVRUAsJE5DVVJTRVNfT1BBUVVFLDt0IHQKK3MsQE5DVVJTRVNfU0laRV9UQCwkTkNVUlNFU19TSVpFX1QsO3QgdAorcyxARUNIT19MSU5LQCwkRUNIT19MSU5LLDt0IHQKK3MsQEVYVFJBX0NGTEFHU0AsJEVYVFJBX0NGTEFHUyw7dCB0CitzLEBFWFRSQV9DWFhGTEFHU0AsJEVYVFJBX0NYWEZMQUdTLDt0IHQKK3MsQEFEQV9UUkFDRUAsJEFEQV9UUkFDRSw7dCB0CitzLEBNQVRIX0xJQkAsJE1BVEhfTElCLDt0IHQKK3MsQE5DVVJTRVNfSU5MSU5FQCwkTkNVUlNFU19JTkxJTkUsO3QgdAorcyxAY2ZfY3ZfdHlwZW9mX2NodHlwZUAsJGNmX2N2X3R5cGVvZl9jaHR5cGUsO3QgdAorcyxAY2ZfY3ZfMVVMQCwkY2ZfY3ZfMVVMLDt0IHQKK3MsQGNmX2N2X3R5cGVvZl9tbWFza190QCwkY2ZfY3ZfdHlwZW9mX21tYXNrX3QsO3QgdAorcyxASEFWRV9WU1NDQU5GQCwkSEFWRV9WU1NDQU5GLDt0IHQKK3MsQFRFU1RfTElCU0AsJFRFU1RfTElCUyw7dCB0CitzLEBDWFhDUFBALCRDWFhDUFAsO3QgdAorcyxAQ1hYTERGTEFHU0AsJENYWExERkxBR1MsO3QgdAorcyxAQ1hYX0FSQCwkQ1hYX0FSLDt0IHQKK3MsQENYWF9BUl9PUFRTQCwkQ1hYX0FSX09QVFMsO3QgdAorcyxAQ1hYTElCU0AsJENYWExJQlMsO3QgdAorcyxAVVNFX0NYWF9CT09MQCwkVVNFX0NYWF9CT09MLDt0IHQKK3MsQGduYXRfZXhpc3RzQCwkZ25hdF9leGlzdHMsO3QgdAorcyxATTRfZXhpc3RzQCwkTTRfZXhpc3RzLDt0IHQKK3MsQGNmX2FkYV9tYWtlQCwkY2ZfYWRhX21ha2UsO3QgdAorcyxAY2ZfYWRhX2NvbXBpbGVyQCwkY2ZfYWRhX2NvbXBpbGVyLDt0IHQKK3MsQGNmX2FkYV9wYWNrYWdlQCwkY2ZfYWRhX3BhY2thZ2UsO3QgdAorcyxAQURBRkxBR1NALCRBREFGTEFHUyw7dCB0CitzLEBjZl9jb21waWxlX2dlbmVyaWNzQCwkY2ZfY29tcGlsZV9nZW5lcmljcyw7dCB0CitzLEBjZl9nZW5lcmljX29iamVjdHNALCRjZl9nZW5lcmljX29iamVjdHMsO3QgdAorcyxAUFJBR01BX1VOUkVGQCwkUFJBR01BX1VOUkVGLDt0IHQKK3MsQEFEQV9JTkNMVURFQCwkQURBX0lOQ0xVREUsO3QgdAorcyxAQURBX09CSkVDVFNALCRBREFfT0JKRUNUUyw7dCB0CitzLEBBQ1BQRkxBR1NALCRBQ1BQRkxBR1MsO3QgdAorcyxAREZUX0FSR19TVUZGSVhALCRERlRfQVJHX1NVRkZJWCw7dCB0CitzLEBERlRfREVQX1NVRkZJWEAsJERGVF9ERVBfU1VGRklYLDt0IHQKK3MsQERGVF9PQkpfU1VCRElSQCwkREZUX09CSl9TVUJESVIsO3QgdAorcyxAQ1hYX0xJQl9TVUZGSVhALCRDWFhfTElCX1NVRkZJWCw7dCB0CitzLEBUSUNTX0FSR19TVUZGSVhALCRUSUNTX0FSR19TVUZGSVgsO3QgdAorcyxAVElDU19ERVBfU1VGRklYQCwkVElDU19ERVBfU1VGRklYLDt0IHQKK3MsQFRJQ1NfTElCX1NVRkZJWEAsJFRJQ1NfTElCX1NVRkZJWCw7dCB0CitzLEBUSUNTX0FSR1NALCRUSUNTX0FSR1MsO3QgdAorcyxAVElORk9fQVJHX1NVRkZJWEAsJFRJTkZPX0FSR19TVUZGSVgsO3QgdAorcyxAVElORk9fREVQX1NVRkZJWEAsJFRJTkZPX0RFUF9TVUZGSVgsO3QgdAorcyxAVElORk9fTElCX1NVRkZJWEAsJFRJTkZPX0xJQl9TVUZGSVgsO3QgdAorcyxAVElORk9fQVJHU0AsJFRJTkZPX0FSR1MsO3QgdAorcyxAVElORk9fQVJHUzJALCRUSU5GT19BUkdTMiw7dCB0CitzLEBMREZMQUdTX1NUQVRJQ0AsJExERkxBR1NfU1RBVElDLDt0IHQKK3MsQExERkxBR1NfU0hBUkVEQCwkTERGTEFHU19TSEFSRUQsO3QgdAorcyxAV0lUSF9PVkVSV1JJVEVALCRXSVRIX09WRVJXUklURSw7dCB0CitzLEBUSUNTX0xJU1RALCRUSUNTX0xJU1QsO3QgdAorcyxAVElORk9fTElTVEAsJFRJTkZPX0xJU1QsO3QgdAorcyxAU0hMSUJfTElTVEAsJFNITElCX0xJU1QsO3QgdAorcyxATkNVUlNFU19UUkVFQCwkTkNVUlNFU19UUkVFLDt0IHQKK3MsQFRFU1RfQVJHU0AsJFRFU1RfQVJHUyw7dCB0CitzLEBURVNUX0RFUFNALCRURVNUX0RFUFMsO3QgdAorcyxAVEVTVF9BUkcyQCwkVEVTVF9BUkcyLDt0IHQKK3MsQFRFU1RfREVQMkAsJFRFU1RfREVQMiw7dCB0CitzLEBBREFfU1VCRElSU0AsJEFEQV9TVUJESVJTLDt0IHQKK3MsQERJUlNfVE9fTUFLRUAsJERJUlNfVE9fTUFLRSw7dCB0CitzLEBIQVZFX1RDR0VUQVRUUkAsJEhBVkVfVENHRVRBVFRSLDt0IHQKK3MsQEhBVkVfVEVSTUlPX0hALCRIQVZFX1RFUk1JT19ILDt0IHQKK3MsQEhBVkVfVEVSTUlPU19IQCwkSEFWRV9URVJNSU9TX0gsO3QgdAorQ0VPRgorCitFT0YKKworICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKyAgIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKKyAgIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCisgIGFjX21heF9zZWRfbGluZXM9NDgKKyAgYWNfc2VkX2ZyYWc9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCisgIGFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorICBhY19lbmQ9JGFjX21heF9zZWRfbGluZXMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorICBhY19tb3JlX2xpbmVzPToKKyAgYWNfc2VkX2NtZHM9CisgIHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbworICAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgorICAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCisgICAgZWxzZQorICAgICAgc2VkICIke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZworICAgIGZpCisgICAgaWYgdGVzdCAhIC1zICR0bXAvc3Vicy5mcmFnOyB0aGVuCisgICAgICBhY19tb3JlX2xpbmVzPWZhbHNlCisgICAgZWxzZQorICAgICAgIyBUaGUgcHVycG9zZSBvZiB0aGUgbGFiZWwgYW5kIG9mIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uIGlzIHRvCisgICAgICAjIHNwZWVkIHVwIHRoZSBzZWQgcHJvY2Vzc2luZyAoaWYgdGhlcmUgYXJlIG5vIGBAJyBhdCBhbGwsIHRoZXJlCisgICAgICAjIGlzIG5vIG5lZWQgdG8gYnJvd3NlIGFueSBvZiB0aGUgc3Vic3RpdHV0aW9ucykuCisgICAgICAjIFRoZXNlIGFyZSB0aGUgdHdvIGV4dHJhIHNlZCBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuCisgICAgICAoZWNobyAnOnQKKyAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKKyAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKyAgCWFjX3NlZF9jbWRzPSJzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisgICAgICBlbHNlCisgIAlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgZmkKKyAgICAgIGFjX3NlZF9mcmFnPWBleHByICRhY19zZWRfZnJhZyArIDFgCisgICAgICBhY19iZWc9JGFjX2VuZAorICAgICAgYWNfZW5kPWBleHByICRhY19lbmQgKyAkYWNfbWF4X3NlZF9saW5lc2AKKyAgICBmaQorICBkb25lCisgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKyAgICBhY19zZWRfY21kcz1jYXQKKyAgZmkKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKK2ZvciBhY19maWxlIGluIDogJENPTkZJR19GSUxFUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKyAgICAgICAgY2F0ID4kdG1wL3N0ZGluCisgICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisgICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisgICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgZXNhYworCisgICMgQ29tcHV0ZSBAc3JjZGlyQCwgQHRvcF9zcmNkaXJALCBhbmQgQElOU1RBTExAIGZvciBzdWJkaXJlY3Rvcmllcy4KKyAgYWNfZGlyPWAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKyAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisgICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKyAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgICAgeyBjYXNlICIkYWNfZGlyIiBpbgorICBbXFwvXSogfCA/OltcXC9dKiApIGFzX2luY3JfZGlyPTs7CisgICopICAgICAgICAgICAgICAgICAgICAgIGFzX2luY3JfZGlyPS47OworZXNhYworYXNfZHVtbXk9IiRhY19kaXIiCitmb3IgYXNfbWtkaXJfZGlyIGluIGBJRlM9Jy9cXCc7IHNldCBYICRhc19kdW1teTsgc2hpZnQ7IGVjaG8gIiRAImA7IGRvCisgIGNhc2UgJGFzX21rZGlyX2RpciBpbgorICAgICMgU2tpcCBET1MgZHJpdmVzcGVjCisgICAgPzopIGFzX2luY3JfZGlyPSRhc19ta2Rpcl9kaXIgOzsKKyAgICAqKQorICAgICAgYXNfaW5jcl9kaXI9JGFzX2luY3JfZGlyLyRhc19ta2Rpcl9kaXIKKyAgICAgIHRlc3QgLWQgIiRhc19pbmNyX2RpciIgfHwgbWtkaXIgIiRhc19pbmNyX2RpciIKKyAgICA7OworICBlc2FjCitkb25lOyB9CisKKyAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gJGFjX2RpcnxzZWQgJ3MsXlwuLywsJ2AiCisgICAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teL10qLC4uLyxnJ2AKKyAgZWxzZQorICAgIGFjX2Rpcl9zdWZmaXg9IGFjX2RvdHM9CisgIGZpCisKKyAgY2FzZSAkc3JjZGlyIGluCisgIC4pICBhY19zcmNkaXI9LgorICAgICAgaWYgdGVzdCAteiAiJGFjX2RvdHMiOyB0aGVuCisgICAgICAgICBhY190b3Bfc3JjZGlyPS4KKyAgICAgIGVsc2UKKyAgICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHMgfCBzZWQgJ3MsLyQsLCdgCisgICAgICBmaSA7OworICBbXFwvXSogfCA/OltcXC9dKiApCisgICAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgcGF0aC4KKyAgICBhY19zcmNkaXI9JGFjX2RvdHMkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY19kb3RzJHNyY2RpciA7OworICBlc2FjCisKKyAgY2FzZSAkSU5TVEFMTCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX2RvdHMkSU5TVEFMTCA7OworICBlc2FjCisKKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOjE3NjEwOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgZmkKKyAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlnLnN0YXR1cy4gICovCisgIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKworICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQorICAjIHNyYyB0cmVlLgorICBhY19maWxlX2lucHV0cz1gSUZTPToKKyAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KKyAgICAgIGNhc2UgJGYgaW4KKyAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgW1xcLyRdKikKKyAgICAgICAgICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisgICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZToxNzYyODogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICBlY2hvICRmOzsKKyAgICAgICopICMgUmVsYXRpdmUKKyAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorICAgICAgICAgICAjIEJ1aWxkIHRyZWUKKyAgICAgICAgICAgZWNobyAkZgorICAgICAgICAgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAjIFNvdXJjZSB0cmVlCisgICAgICAgICAgIGVjaG8gJHNyY2Rpci8kZgorICAgICAgICAgZWxzZQorICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCisgICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6MTc2NDE6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgZmk7OworICAgICAgZXNhYworICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PEVPRgorICBzZWQgIiRhY192cHN1YgorJGV4dHJhc3ViCitFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorOnQKKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKK3MsQGNvbmZpZ3VyZV9pbnB1dEAsJGNvbmZpZ3VyZV9pbnB1dCw7dCB0CitzLEBzcmNkaXJALCRhY19zcmNkaXIsO3QgdAorcyxAdG9wX3NyY2RpckAsJGFjX3RvcF9zcmNkaXIsO3QgdAorcyxASU5TVEFMTEAsJGFjX0lOU1RBTEwsO3QgdAorIiAkYWNfZmlsZV9pbnB1dHMgfCAoZXZhbCAiJGFjX3NlZF9jbWRzIikgPiR0bXAvb3V0CisgIHJtIC1mICR0bXAvc3RkaW4KKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIG12ICR0bXAvb3V0ICRhY19maWxlCisgIGVsc2UKKyAgICBjYXQgJHRtcC9vdXQKKyAgICBybSAtZiAkdG1wL291dAorICBmaQorCitkb25lCitFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XEVPRgorCisjCisjIENPTkZJR19IRUFERVIgc2VjdGlvbi4KKyMKKworIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKKyMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KKyMKKyMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KK2FjX2RBPSdzLF5cKFsgCV0qXCkjXChbIAldKmRlZmluZVsgCV1bIAldKlwpJworYWNfZEI9J1sgCV0uKiQsXDEjXDInCithY19kQz0nICcKK2FjX2REPScsO3QnCisjIGFjX2kgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRoIHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgorYWNfaUE9J3MsXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCithY19pQj0nXChbIAldXCksXDEjXDJkZWZpbmVcMycKK2FjX2lDPScgJworYWNfaUQ9J1w0LDt0JworIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KK2FjX3VBPSdzLF5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJworYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKK2FjX3VDPScgJworYWNfdUQ9Jyw7dCcKKworZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0hFQURFUlM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCisgICAgICAgIGNhdCA+JHRtcC9zdGRpbgorICAgICAgICBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgIGVzYWMKKworICB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtICYmIHsgZWNobyAiJGFzX21lOjE3NzA3OiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorCisgICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCisgICMgc3JjIHRyZWUuCisgIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgorICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbworICAgICAgY2FzZSAkZiBpbgorICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7CisgICAgICBbXFwvJF0qKQorICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKyAgICAgICAgIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOjE3NzE4OiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgIGVjaG8gJGY7OworICAgICAgKikgIyBSZWxhdGl2ZQorICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisgICAgICAgICAgICMgQnVpbGQgdHJlZQorICAgICAgICAgICBlY2hvICRmCisgICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICMgU291cmNlIHRyZWUKKyAgICAgICAgICAgZWNobyAkc3JjZGlyLyRmCisgICAgICAgICBlbHNlCisgICAgICAgICAgICMgL2Rldi9udWxsIHRyZWUKKyAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZToxNzczMTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICBmaTs7CisgICAgICBlc2FjCisgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCisgIHNlZCAncy9bIAldKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCisKK0VPRgorCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYSBsaXN0IG9mICNkZWZpbmUncy4gIFdlIHdvbid0IHVzZSBpdCBhcyBhIHNlZAorIyBzY3JpcHQsIGJ1dCBhcyBkYXRhIHRvIGluc2VydCB3aGVyZSB3ZSBzZWUgQERFRlNALiAgV2UgZXhwZWN0IEFDX1NBVkVfREVGUyB0bworIyBiZSBlaXRoZXIgJ2NhdCcgb3IgJ3NvcnQnLgorY2F0IGNvbmZkZWZzLmggfCB1bmlxID5jb25mdGVzdC52YWxzCisKKyMgQnJlYWsgdXAgY29uZnRlc3QudmFscyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbgorIyB0aGUgc2l6ZSBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvby4KKworcm0gLWYgY29uZnRlc3QudGFpbAorZWNobyAnICBybSAtZiBjb25mdGVzdC5mcmFnJyA+PiAkQ09ORklHX1NUQVRVUword2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LnZhbHMgPi9kZXYvbnVsbAorZG8KKyAgIyBXcml0ZSBjaHVua3Mgb2YgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byBjb25mdGVzdC5mcmFnLgorICBlY2hvICcgIGNhdCA+PiBjb25mdGVzdC5mcmFnIDw8Q0VPRicgPj4gJENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC52YWxzIHwgc2VkIC1lICdzLyNpZmRlZi4qLyNpZiAwLycgPj4gJENPTkZJR19TVEFUVVMKKyAgZWNobyAnQ0VPRicgPj4gJENPTkZJR19TVEFUVVMKKyAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LnZhbHMgPiBjb25mdGVzdC50YWlsCisgIHJtIC1mIGNvbmZ0ZXN0LnZhbHMKKyAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC52YWxzCitkb25lCitybSAtZiBjb25mdGVzdC52YWxzCisKKyMgUnVuIHNlZCB0byBzdWJzdGl0dXRlIHRoZSBjb250ZW50cyBvZiBjb25mdGVzdC5mcmFnIGludG8gJHRtcC9pbiBhdCB0aGUKKyMgbWFya2VyIEBERUZTQC4KK2VjaG8gJyAgY2F0ID4+IGNvbmZ0ZXN0LmVkaXQgPDxDRU9GCisvQERFRlNAL3IgY29uZnRlc3QuZnJhZworL0BERUZTQC9kCitDRU9GCitzZWQgLWYgY29uZnRlc3QuZWRpdCAkdG1wL2luID4gJHRtcC9vdXQKK3JtIC1mICR0bXAvaW4KK212ICR0bXAvb3V0ICR0bXAvaW4KK3JtIC1mIGNvbmZ0ZXN0LmVkaXQgY29uZnRlc3QuZnJhZworJyA+PiAkQ09ORklHX1NUQVRVUworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKyAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlnLnN0YXR1cy4gICovCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgorICAgIGVjaG8gIi8qIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAorICBlbHNlCisgICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKKyAgZmkKKyAgY2F0ICR0bXAvaW4gPj4kdG1wL2NvbmZpZy5oCisgIHJtIC1mICR0bXAvaW4KKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIGlmIGNtcCAtcyAkYWNfZmlsZSAkdG1wL2NvbmZpZy5oIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICB7IGVjaG8gIiRhc19tZToxNzc4OTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKK2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIGFjX2Rpcj1gJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKyAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisgICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisgICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYWNfZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgICBpZiB0ZXN0ICIkYWNfZGlyIiAhPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKyAgICAgICAgeyBjYXNlICIkYWNfZGlyIiBpbgorICBbXFwvXSogfCA/OltcXC9dKiApIGFzX2luY3JfZGlyPTs7CisgICopICAgICAgICAgICAgICAgICAgICAgIGFzX2luY3JfZGlyPS47OworZXNhYworYXNfZHVtbXk9IiRhY19kaXIiCitmb3IgYXNfbWtkaXJfZGlyIGluIGBJRlM9Jy9cXCc7IHNldCBYICRhc19kdW1teTsgc2hpZnQ7IGVjaG8gIiRAImA7IGRvCisgIGNhc2UgJGFzX21rZGlyX2RpciBpbgorICAgICMgU2tpcCBET1MgZHJpdmVzcGVjCisgICAgPzopIGFzX2luY3JfZGlyPSRhc19ta2Rpcl9kaXIgOzsKKyAgICAqKQorICAgICAgYXNfaW5jcl9kaXI9JGFzX2luY3JfZGlyLyRhc19ta2Rpcl9kaXIKKyAgICAgIHRlc3QgLWQgIiRhc19pbmNyX2RpciIgfHwgbWtkaXIgIiRhc19pbmNyX2RpciIKKyAgICA7OworICBlc2FjCitkb25lOyB9CisKKyAgICAgIGZpCisgICAgICBybSAtZiAkYWNfZmlsZQorICAgICAgbXYgJHRtcC9jb25maWcuaCAkYWNfZmlsZQorICAgIGZpCisgIGVsc2UKKyAgICBjYXQgJHRtcC9jb25maWcuaAorICAgIHJtIC1mICR0bXAvY29uZmlnLmgKKyAgZmkKK2RvbmUKK0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcRU9GCisKKyMKKyMgQ09ORklHX0NPTU1BTkRTIHNlY3Rpb24uCisjCitmb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfQ09NTUFORFM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorICBhY19kZXN0PWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYAorICBhY19zb3VyY2U9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisKKyAgY2FzZSAkYWNfZGVzdCBpbgorICAgIGRlZmF1bHQgKQorCitmb3IgY2ZfZGlyIGluIHRlc3QKK2RvCisJaWYgdGVzdCAhIC1kICRzcmNkaXIvJGNmX2RpcjsgdGhlbgorCQljb250aW51ZQorCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvcHJvZ3JhbXM7IHRoZW4KKwkJJEFXSyAtZiAkc3JjZGlyL3Rlc3QvbWstdGVzdC5hd2sgRUNIT19MSU5LPSIkRUNIT19MSU5LIiAkc3JjZGlyLyRjZl9kaXIvcHJvZ3JhbXMgPj4kY2ZfZGlyL01ha2VmaWxlCisJZmkKK2RvbmUKKworCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwlPUy8yKnxvczIqKSAjKHZpCisgICAgICAgIExJQl9QUkVGSVg9JycKKyAgICAgICAgOzsKKwkqKQlMSUJfUFJFRklYPSdsaWInCisgICAgICAgIDs7CisJZXNhYworY2ZfcHJlZml4PSRMSUJfUFJFRklYCisKK2lmIHRlc3QgJGNmX2N2X3NobGliX3ZlcnNpb24gPSBjeWdkbGwgOyB0aGVuCisJVElORk9fTkFNRT0kVElORk9fQVJHX1NVRkZJWAorCVRJTkZPX1NVRkZJWD0uZGxsCitmaQorCitmb3IgY2ZfZGlyIGluICRTUkNfU1VCRElSUworZG8KKwlpZiB0ZXN0ICEgLWQgJHNyY2Rpci8kY2ZfZGlyIDsgdGhlbgorCQljb250aW51ZQorCWVsaWYgdGVzdCAtZiAkc3JjZGlyLyRjZl9kaXIvbW9kdWxlczsgdGhlbgorCisJCVNIQVJFRF9MSUI9CisJCUxJQlNfVE9fTUFLRT0KKwkJZm9yIGNmX2l0ZW0gaW4gJGNmX0xJU1RfTU9ERUxTCisJCWRvCisKKwljYXNlICRjZl9pdGVtIGluCisJbGlidG9vbCkKKwkJY2Zfc3VmZml4PScubGEnCisJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCTs7CisJbm9ybWFsKQorCQljZl9zdWZmaXg9Jy5hJworCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQk7OworCWRlYnVnKQorCQljZl9zdWZmaXg9J19nLmEnCisJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCTs7CisJcHJvZmlsZSkKKwkJY2Zfc3VmZml4PSdfcC5hJworCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQk7OworCXNoYXJlZCkKKwkJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4KKwkJY3lnd2luKikKKwkJCWNmX3N1ZmZpeD0nLmRsbCcKKwkJCWNmX2RlcHN1Zj0nLmRsbC5hJworCQkJOzsKKwkJZGFyd2luKikKKwkJCWNmX3N1ZmZpeD0nLmR5bGliJworCQkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJCTs7CisJCWhwdXgqKQorCQkJY2FzZSAkdGFyZ2V0IGluCisJCQlpYTY0KikKKwkJCQljZl9zdWZmaXg9Jy5zbycKKwkJCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQkJCTs7CisJCQkqKQorCQkJCWNmX3N1ZmZpeD0nLnNsJworCQkJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCSopCWNmX3N1ZmZpeD0nLnNvJworCQkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJCTs7CisJCWVzYWMKKwllc2FjCisJdGVzdCAtbiAiJExJQl9TVUZGSVgiICYmIGNmX3N1ZmZpeD0iJHtMSUJfU1VGRklYfSR7Y2Zfc3VmZml4fSIKKwl0ZXN0IC1uICIkTElCX1NVRkZJWCIgJiYgY2ZfZGVwc3VmPSIke0xJQl9TVUZGSVh9JHtjZl9kZXBzdWZ9IgorCisJCQlpZiB0ZXN0ICRjZl9pdGVtID0gc2hhcmVkIDsgdGhlbgorCQkJaWYgdGVzdCAiJGNmX2N2X2RvX3N5bWxpbmtzIiA9IHllcyA7IHRoZW4KKwkJCQljYXNlICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIgaW4gIyh2aQorCQkJCXJlbCkgIyh2aQorCQkJCQljYXNlICIkY2ZfY3Zfc3lzdGVtX25hbWUiIGluICModmkKKwkJCQkJZGFyd2luKikKKwkJCQkJY2FzZSAuJHtMSUJfU1VGRklYfSBpbgorCQkJCQkudyopCisJCQkJCQljZl9zdWZmaXg9YGVjaG8gJGNmX3N1ZmZpeCB8IHNlZCAncy9edy8vJ2AKKwkJCQkJCWNmX3N1ZmZpeD13Jy4ke1JFTF9WRVJTSU9OfSciJGNmX3N1ZmZpeCIKKwkJCQkJCTs7CisJCQkJCSopCisJCQkJCQljZl9zdWZmaXg9Jy4ke1JFTF9WRVJTSU9OfSciJGNmX3N1ZmZpeCIKKwkJCQkJCTs7CisJCQkJCWVzYWMKKwkJCQkJOzsgIyh2aQorCQkJCQkqKSBjZl9zdWZmaXg9IiRjZl9zdWZmaXgiJy4ke1JFTF9WRVJTSU9OfScgOzsKKwkJCQkJZXNhYworCQkJCQk7OworCQkJCWFiaSkKKwkJCQkJY2FzZSAiJGNmX2N2X3N5c3RlbV9uYW1lIiBpbiAjKHZpCisJCQkJCWRhcndpbiopCisJCQkJCWNhc2UgLiR7TElCX1NVRkZJWH0gaW4KKwkJCQkJLncqKQorCQkJCQkJY2Zfc3VmZml4PWBlY2hvICRjZl9zdWZmaXggfCBzZWQgJ3MvXncvLydgCisJCQkJCQljZl9zdWZmaXg9dycuJHtBQklfVkVSU0lPTn0nIiRjZl9zdWZmaXgiCisJCQkJCQk7OworCQkJCQkqKQorCQkJCQkJY2Zfc3VmZml4PScuJHtBQklfVkVSU0lPTn0nIiRjZl9zdWZmaXgiCisJCQkJCQk7OworCQkJCQllc2FjCisJCQkJCTs7ICModmkKKwkJCQkJKikgY2Zfc3VmZml4PSIkY2Zfc3VmZml4IicuJHtBQklfVkVSU0lPTn0nIDs7CisJCQkJCWVzYWMKKwkJCQkJOzsKKwkJCQllc2FjCisJCQlmaQorCQkJIyBjeWd3aW4gbmVlZHMgaW1wb3J0IGxpYnJhcnksIGFuZCBoYXMgdW5pcXVlIG5hbWluZyBjb252ZW50aW9uCisJCQkjIHVzZSBhdXRvZGV0ZWN0ZWQgJHtjZl9wcmVmaXh9IGZvciBpbXBvcnQgbGliIGFuZCBzdGF0aWMgbGliLCBidXQKKwkJCSMgdXNlICdjeWcnIHByZWZpeCBmb3Igc2hhcmVkIGxpYi4KKwkJCWlmIHRlc3QgJGNmX2N2X3NobGliX3ZlcnNpb24gPSBjeWdkbGwgOyB0aGVuCisJCQkJY2ZfY3lnc3VmPWBlY2hvICIkY2Zfc3VmZml4IiB8IHNlZCAtZSAncy9cLmRsbC9cJHtBQklfVkVSU0lPTn0uZGxsLydgCisJCQkJTElCU19UT19NQUtFPSIkTElCU19UT19NQUtFIC4uL2xpYi9jeWcke2NmX2Rpcn0ke2NmX2N5Z3N1Zn0iCisJCQkJY29udGludWUKKwkJCWZpCisJCQlmaQorCQkJTElCU19UT19NQUtFPSIkTElCU19UT19NQUtFIC4uL2xpYi8ke2NmX3ByZWZpeH0ke2NmX2Rpcn0ke2NmX3N1ZmZpeH0iCisJCWRvbmUKKworCQlpZiB0ZXN0ICRjZl9kaXIgPSBuY3Vyc2VzIDsgdGhlbgorCQkJY2Zfc3Vic2V0cz0iJExJQl9TVUJTRVRTIgorCQkJY2Zfcl9wYXJ0cz0iJGNmX3N1YnNldHMiCisJCQljZl9saWJsaXN0PSIkTElCU19UT19NQUtFIgorCisJCQl3aGlsZSB0ZXN0IC1uICIkY2Zfcl9wYXJ0cyIKKwkJCWRvCisJCQkJY2ZfbF9wYXJ0cz1gZWNobyAiJGNmX3JfcGFydHMiIHxzZWQgLWUgJ3MvIC4qJC8vJ2AKKwkJCQljZl9yX3BhcnRzPWBlY2hvICIkY2Zfcl9wYXJ0cyIgfHNlZCAtZSAncy9eW14gXSogLy8nYAorCQkJCWlmIHRlc3QgIiRjZl9sX3BhcnRzIiAhPSAiJGNmX3JfcGFydHMiIDsgdGhlbgorCQkJCQljZl9pdGVtPQorCQkJCQljYXNlICRjZl9sX3BhcnRzIGluICModmkKKwkJCQkJKnRlcm1saWIqKSAjKHZpCisJCQkJCQljZl9pdGVtPWBlY2hvICRjZl9saWJsaXN0IHxzZWQgLWUgcyUke0xJQl9OQU1FfSR7TElCX1NVRkZJWH0lJHtUSU5GT19MSUJfU1VGRklYfSVnYAorCQkJCQkJOzsKKwkJCQkJKnRpY2xpYiopCisJCQkJCQljZl9pdGVtPWBlY2hvICRjZl9saWJsaXN0IHxzZWQgLWUgcyUke0xJQl9OQU1FfSR7TElCX1NVRkZJWH0lJHtUSUNTX0xJQl9TVUZGSVh9JWdgCisJCQkJCQk7OworCQkJCQkqKQorCQkJCQkJYnJlYWsKKwkJCQkJCTs7CisJCQkJCWVzYWMKKwkJCQkJaWYgdGVzdCAtbiAiJGNmX2l0ZW0iOyB0aGVuCisJCQkJCQlMSUJTX1RPX01BS0U9IiRjZl9pdGVtICRMSUJTX1RPX01BS0UiCisJCQkJCWZpCisJCQkJZWxzZQorCQkJCQlicmVhaworCQkJCWZpCisJCQlkb25lCisJCWVsc2UKKwkJCWNmX3N1YnNldHM9YGVjaG8gIiRMSUJfU1VCU0VUUyIgfCBzZWQgLWUgJ3MvXnRlcm1saWIuKiAvLydgCisJCWZpCisKKwkJc2VkIC1lICJzJUBMSUJTX1RPX01BS0VAJSRMSUJTX1RPX01BS0UlIiBcCisJCSAgICAtZSAicyVAU0hBUkVEX0xJQkAlJFNIQVJFRF9MSUIlIiBcCisJCQkkY2ZfZGlyL01ha2VmaWxlID4kY2ZfZGlyL01ha2VmaWxlLm91dAorCQltdiAkY2ZfZGlyL01ha2VmaWxlLm91dCAkY2ZfZGlyL01ha2VmaWxlCisKKwkJJEFXSyAtZiAkc3JjZGlyL21rLTB0aC5hd2sgXAorCQkJbGlibmFtZT0iJHtjZl9kaXJ9JHtMSUJfU1VGRklYfSIgc3Vic2V0cz0iJExJQl9TVUJTRVRTIiBcCisJCQkkc3JjZGlyLyRjZl9kaXIvbW9kdWxlcyA+PiRjZl9kaXIvTWFrZWZpbGUKKworCQlmb3IgY2Zfc3Vic2V0IGluICRjZl9zdWJzZXRzCisJCWRvCisJCQljZl9zdWJkaXJzPQorCQkJZm9yIGNmX2l0ZW0gaW4gJGNmX0xJU1RfTU9ERUxTCisJCQlkbworCQkJZWNobyAiQXBwZW5kaW5nIHJ1bGVzIGZvciAke2NmX2l0ZW19IG1vZGVsICgke2NmX2Rpcn06ICR7Y2Zfc3Vic2V0fSkiCisKK2NmX0lURU09YGVjaG8gIiRjZl9pdGVtIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworCWNhc2UgJGNmX2l0ZW0gaW4KKwlsaWJ0b29sKQorCQljZl9zdWZmaXg9Jy5sYScKKwkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJOzsKKwlub3JtYWwpCisJCWNmX3N1ZmZpeD0nLmEnCisJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCTs7CisJZGVidWcpCisJCWNmX3N1ZmZpeD0nX2cuYScKKwkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJOzsKKwlwcm9maWxlKQorCQljZl9zdWZmaXg9J19wLmEnCisJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCTs7CisJc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbgorCQljeWd3aW4qKQorCQkJY2Zfc3VmZml4PScuZGxsJworCQkJY2ZfZGVwc3VmPScuZGxsLmEnCisJCQk7OworCQlkYXJ3aW4qKQorCQkJY2Zfc3VmZml4PScuZHlsaWInCisJCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQkJOzsKKwkJaHB1eCopCisJCQljYXNlICR0YXJnZXQgaW4KKwkJCWlhNjQqKQorCQkJCWNmX3N1ZmZpeD0nLnNvJworCQkJCWNmX2RlcHN1Zj0kY2Zfc3VmZml4CisJCQkJOzsKKwkJCSopCisJCQkJY2Zfc3VmZml4PScuc2wnCisJCQkJY2ZfZGVwc3VmPSRjZl9zdWZmaXgKKwkJCQk7OworCQkJZXNhYworCQkJOzsKKwkJKikJY2Zfc3VmZml4PScuc28nCisJCQljZl9kZXBzdWY9JGNmX3N1ZmZpeAorCQkJOzsKKwkJZXNhYworCWVzYWMKKwl0ZXN0IC1uICIkTElCX1NVRkZJWCIgJiYgY2Zfc3VmZml4PSIke0xJQl9TVUZGSVh9JHtjZl9zdWZmaXh9IgorCXRlc3QgLW4gIiRMSUJfU1VGRklYIiAmJiBjZl9kZXBzdWY9IiR7TElCX1NVRkZJWH0ke2NmX2RlcHN1Zn0iCisKKwljYXNlICRjZl9pdGVtIGluCisJbGlidG9vbCkgY2Zfc3ViZGlyPSdvYmpfbG8nICA7OworCW5vcm1hbCkgIGNmX3N1YmRpcj0nb2JqZWN0cycgOzsKKwlkZWJ1ZykgICBjZl9zdWJkaXI9J29ial9nJyA7OworCXByb2ZpbGUpIGNmX3N1YmRpcj0nb2JqX3AnIDs7CisJc2hhcmVkKQorCQljYXNlICRjZl9jdl9zeXN0ZW1fbmFtZSBpbiAjKHZpCisJCWN5Z3dpbikgIyh2aQorCQkJY2Zfc3ViZGlyPSdvYmplY3RzJyA7OworCQkqKQorCQkJY2Zfc3ViZGlyPSdvYmpfcycgOzsKKwkJZXNhYworCWVzYWMKKworCQkJIyBUZXN0IGZvciBjYXNlIHdoZXJlIHdlIGJ1aWxkIGxpYnRpbmZvIHdpdGggYSBkaWZmZXJlbnQgbmFtZS4KKwkJCWNmX2xpYm5hbWU9JGNmX2RpcgorCQkJaWYgdGVzdCAkY2ZfZGlyID0gbmN1cnNlcyA7IHRoZW4KKwkJCQljYXNlICRjZl9zdWJzZXQgaW4KKwkJCQkqYmFzZSopCisJCQkJCWNmX2xpYm5hbWU9JHtjZl9saWJuYW1lfSRMSUJfU1VGRklYCisJCQkJCTs7CisJCQkJKnRlcm1saWIqKQorCQkJCQljZl9saWJuYW1lPSRUSU5GT19MSUJfU1VGRklYCisJCQkJCTs7CisJCQkJdGljbGliKikKKwkJCQkJY2ZfbGlibmFtZT0kVElDU19MSUJfU1VGRklYCisJCQkJCTs7CisJCQkJZXNhYworCQkJZWxzZQorCQkJCWNmX2xpYm5hbWU9JHtjZl9saWJuYW1lfSRMSUJfU1VGRklYCisJCQlmaQorCQkJaWYgdGVzdCAtbiAiJHtERlRfQVJHX1NVRkZJWH0iIDsgdGhlbgorCQkJCSMgdW5kbyAkTElCX1NVRkZJWCBhZGQtb24gaW4gQ0ZfTElCX1NVRkZJWAorCQkJCWNmX3N1ZmZpeD1gZWNobyAkY2Zfc3VmZml4IHxzZWQgLWUgInMlXiR7TElCX1NVRkZJWH0lJSJgCisJCQlmaQorCisJCQkjIFRoZXNlIGRlcGVuZGVuY2llcyByZWFsbHkgYXJlIGZvciBkZXZlbG9wbWVudCwgbm90CisJCQkjIGJ1aWxkcywgYnV0IHRoZXkgYXJlIHVzZWZ1bCBpbiBwb3J0aW5nLCB0b28uCisJCQljZl9kZXBlbmQ9Ii4uL2luY2x1ZGUvbmN1cnNlc19jZmcuaCIKKwkJCWlmIHRlc3QgIiRzcmNkaXIiID0gIi4iOyB0aGVuCisJCQkJY2ZfcmVsZGlyPSIuIgorCQkJZWxzZQorCQkJCWNmX3JlbGRpcj0iXCR7c3JjZGlyfSIKKwkJCWZpCisKKwkJCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyLyRjZl9kaXIucHJpdi5oOyB0aGVuCisJCQkJY2ZfZGVwZW5kPSIkY2ZfZGVwZW5kICRjZl9yZWxkaXIvJGNmX2Rpci5wcml2LmgiCisJCQllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL2N1cnNlcy5wcml2Lmg7IHRoZW4KKwkJCQljZl9kZXBlbmQ9IiRjZl9kZXBlbmQgJGNmX3JlbGRpci9jdXJzZXMucHJpdi5oIgorCQkJZmkKKworIAkJCWNmX2Rpcl9zdWZmaXg9CisgCQkJb2xkX2NmX3N1ZmZpeD0iJGNmX3N1ZmZpeCIKKyAJCQlpZiB0ZXN0ICIkY2ZfY3Zfc2hsaWJfdmVyc2lvbl9pbmZpeCIgPSB5ZXMgOyB0aGVuCisJCQlpZiB0ZXN0IC1uICIkTElCX1NVRkZJWCIgOyB0aGVuCisJCQkJY2FzZSAkTElCX1NVRkZJWCBpbgorCQkJCXcqKQorCQkJCQljZl9saWJuYW1lPWBlY2hvICRjZl9saWJuYW1lIHwgc2VkICdzL3ckLy8nYAorCQkJCQljZl9zdWZmaXg9YGVjaG8gJGNmX3N1ZmZpeCB8IHNlZCAncy9edy8vJ2AKKwkJCQkJY2ZfZGlyX3N1ZmZpeD13CisJCQkJCTs7CisJCQkJZXNhYworCQkJZmkKKyAJCQlmaQorCisJCQkkQVdLIC1mICRzcmNkaXIvbWstMXN0LmF3ayBcCisJCQkJbmFtZT0ke2NmX2xpYm5hbWV9JHtjZl9kaXJfc3VmZml4fSBcCisJCQkJdHJhY2VzPSRMSUJfVFJBQ0lORyBcCisJCQkJTU9ERUw9JGNmX0lURU0gXAorCQkJCW1vZGVsPSRjZl9zdWJkaXIgXAorCQkJCXByZWZpeD0kY2ZfcHJlZml4IFwKKwkJCQlzdWZmaXg9JGNmX3N1ZmZpeCBcCisJCQkJc3Vic2V0PSRjZl9zdWJzZXQgXAorCQkJCVRlcm1saWJSb290PSRUSU5GT19OQU1FIFwKKwkJCQlUZXJtbGliU3VmZml4PSRUSU5GT19TVUZGSVggXAorCQkJCVNobGliVmVyPSRjZl9jdl9zaGxpYl92ZXJzaW9uIFwKKwkJCQlTaGxpYlZlckluZml4PSRjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4IFwKKwkJCQlSZUxpbms9JHtjZl9jdl9kb19yZWxpbmstbm99IFwKKwkJCQlEb0xpbmtzPSRjZl9jdl9kb19zeW1saW5rcyBcCisJCQkJcm1Tb0xvY3M9JGNmX2N2X3JtX3NvX2xvY3MgXAorCQkJCWxkY29uZmlnPSIkTERDT05GSUciIFwKKwkJCQlvdmVyd3JpdGU9JFdJVEhfT1ZFUldSSVRFIFwKKwkJCQlkZXBlbmQ9IiRjZl9kZXBlbmQiIFwKKwkJCQlob3N0PSIkaG9zdCIgXAorCQkJCSRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzID4+JGNmX2Rpci9NYWtlZmlsZQorCisJCQljZl9zdWZmaXg9IiRvbGRfY2Zfc3VmZml4IgorCisJCQlmb3IgY2Zfc3ViZGlyMiBpbiAkY2Zfc3ViZGlycyBsaWIKKwkJCWRvCisJCQkJdGVzdCAkY2Zfc3ViZGlyID0gJGNmX3N1YmRpcjIgJiYgYnJlYWsKKwkJCWRvbmUKKwkJCXRlc3QgIiR7Y2Zfc3Vic2V0fS4ke2NmX3N1YmRpcjJ9IiAhPSAiJHtjZl9zdWJzZXR9LiR7Y2Zfc3ViZGlyfSIgJiYgXAorCQkJJEFXSyAtZiAkc3JjZGlyL21rLTJuZC5hd2sgXAorCQkJCW5hbWU9JGNmX2RpciBcCisJCQkJdHJhY2VzPSRMSUJfVFJBQ0lORyBcCisJCQkJTU9ERUw9JGNmX0lURU0gXAorCQkJCW1vZGVsPSRjZl9zdWJkaXIgXAorCQkJCXN1YnNldD0kY2Zfc3Vic2V0IFwKKwkJCQlzcmNkaXI9JHNyY2RpciBcCisJCQkJZWNobz0kV0lUSF9FQ0hPIFwKKwkJCQljcmVuYW1lcz0kY2ZfY3ZfcHJvZ19DQ19jX28gXAorCQkJCWN4eHJlbmFtZXM9JGNmX2N2X3Byb2dfQ1hYX2NfbyBcCisJCQkJJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXMgPj4kY2ZfZGlyL01ha2VmaWxlCisJCQljZl9zdWJkaXJzPSIkY2Zfc3ViZGlycyAkY2Zfc3ViZGlyIgorCQkJZG9uZQorCQlkb25lCisJZmkKKworCWVjaG8gJwljZCAnJGNmX2RpcicgJiYgJHtNQUtFfSAke0NGX01GTEFHU30gJEAnID4+TWFrZWZpbGUKK2RvbmUKKworZm9yIGNmX2RpciBpbiAkU1JDX1NVQkRJUlMKK2RvCisJaWYgdGVzdCAhIC1kICRzcmNkaXIvJGNmX2RpciA7IHRoZW4KKwkJY29udGludWUKKwlmaQorCisJaWYgdGVzdCAtZiAkY2ZfZGlyL01ha2VmaWxlIDsgdGhlbgorCQljYXNlICIkY2ZfZGlyIiBpbgorCQlBZGE5NSkgIyh2aQorCQkJZWNobyAnbGlicyBcJyA+PiBNYWtlZmlsZQorCQkJZWNobyAnaW5zdGFsbC5saWJzIFwnID4+IE1ha2VmaWxlCisJCQllY2hvICd1bmluc3RhbGwubGlicyA6OicgPj4gTWFrZWZpbGUKKwkJCWVjaG8gJwljZCAnJGNmX2RpcicgJiYgJHtNQUtFfSAke0NGX01GTEFHU30gJEAnID4+IE1ha2VmaWxlCisJCQk7OworCQllc2FjCisJZmkKKworCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL21vZHVsZXM7IHRoZW4KKwkJZWNobyA+PiBNYWtlZmlsZQorCQlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9oZWFkZXJzOyB0aGVuCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKK2luc3RhbGwuaW5jbHVkZXMgXFwKK3VuaW5zdGFsbC5pbmNsdWRlcyBcXAorQ0ZfRU9GCisJCWZpCitpZiB0ZXN0ICIkY2ZfZGlyIiAhPSAiYysrIiA7IHRoZW4KK2VjaG8gJ2xpbnQgXCcgPj4gTWFrZWZpbGUKK2ZpCitjYXQgPj4gTWFrZWZpbGUgPDxDRl9FT0YKK2xpYnMgXFwKK2xpbnRsaWIgXFwKK2luc3RhbGwubGlicyBcXAordW5pbnN0YWxsLmxpYnMgXFwKK2luc3RhbGwuJGNmX2RpciBcXAordW5pbnN0YWxsLiRjZl9kaXIgOjoKKwljZCAkY2ZfZGlyICYmIFwke01BS0V9IFwke0NGX01GTEFHU30gXCRACitDRl9FT0YKKwllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL2hlYWRlcnM7IHRoZW4KK2NhdCA+PiBNYWtlZmlsZSA8PENGX0VPRgorCitsaWJzIFxcCitpbnN0YWxsLmxpYnMgXFwKK3VuaW5zdGFsbC5saWJzIFxcCitpbnN0YWxsLmluY2x1ZGVzIFxcCit1bmluc3RhbGwuaW5jbHVkZXMgOjoKKwljZCAkY2ZfZGlyICYmIFwke01BS0V9IFwke0NGX01GTEFHU30gXCRACitDRl9FT0YKK2ZpCitkb25lCisKK2NhdCA+PiBNYWtlZmlsZSA8PENGX0VPRgorCitpbnN0YWxsLmxpYnMgdW5pbnN0YWxsLmxpYnMgXFwKK2luc3RhbGwuZGF0YSB1bmluc3RhbGwuZGF0YSA6OgorJE1BS0VfVEVSTUlORk8JY2QgbWlzYyAmJiBcJHtNQUtFfSBcJHtDRl9NRkxBR1N9IFwkQAorCitpbnN0YWxsLm1hbiBcXAordW5pbnN0YWxsLm1hbiA6OgorCWNkIG1hbiAmJiBcJHtNQUtFfSBcJHtDRl9NRkxBR1N9IFwkQAorCitkaXN0Y2xlYW4gOjoKKwlybSAtZiBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIE1ha2VmaWxlIGluY2x1ZGUvbmN1cnNlc19jZmcuaAorCXJtIC1mIGhlYWRlcnMuc2ggaGVhZGVycy5zZWQgbWtfc2hhcmVkX2xpYi5zaAorCXJtIC1yZiBcJHtESVJTX1RPX01BS0V9CitDRl9FT0YKKworIyBTcGVjaWFsIGNhc2U6IHRhY2sncyBtYW5wYWdlIGxpdmVzIGluIGl0cyBvd24gZGlyZWN0b3J5LgoraWYgdGVzdCAtZCB0YWNrIDsgdGhlbgoraWYgdGVzdCAtZiAkc3JjZGlyLyR0YWNrLmg7IHRoZW4KK2NhdCA+PiBNYWtlZmlsZSA8PENGX0VPRgorCitpbnN0YWxsLm1hbiBcXAordW5pbnN0YWxsLm1hbiA6OgorCWNkIHRhY2sgJiYgXCR7TUFLRX0gXCR7Q0ZfTUZMQUdTfSBcJEAKK0NGX0VPRgorZmkKK2ZpCisKK3JtIC1mIGhlYWRlcnMuc2VkIGhlYWRlcnMuc2gKKworZWNobyBjcmVhdGluZyBoZWFkZXJzLnNoCitjYXQgPmhlYWRlcnMuc2ggPDxDRl9FT0YKKyMhIC9iaW4vc2gKKyMgVGhpcyBzaGVsbCBzY3JpcHQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSAnY29uZmlndXJlJyBzY3JpcHQuICBJdCBpcyBpbnZva2VkIGluIGEKKyMgc3ViZGlyZWN0b3J5IG9mIHRoZSBidWlsZCB0cmVlLiAgSXQgZ2VuZXJhdGVzIGEgc2VkLXNjcmlwdCBpbiB0aGUgcGFyZW50CisjIGRpcmVjdG9yeSB0aGF0IGlzIHVzZWQgdG8gYWRqdXN0IGluY2x1ZGVzIGZvciBoZWFkZXIgZmlsZXMgdGhhdCByZXNpZGUgaW4gYQorIyBzdWJkaXJlY3Rvcnkgb2YgL3Vzci9pbmNsdWRlLCBldGMuCitQUkc9IiIKK3doaWxlIHRlc3QgXCQjICE9IDMKK2RvCitQUkc9IlwkUFJHIFwkMSI7IHNoaWZ0Citkb25lCitEU1Q9XCQxCitSRUY9XCQyCitTUkM9XCQzCitUTVBTUkM9XCR7VE1QRElSLS90bXB9L1xgYmFzZW5hbWUgXCRTUkNcYFwkXCQKK1RNUFNFRD1cJHtUTVBESVItL3RtcH0vaGVhZGVycy5zZWRcJFwkCitlY2hvIGluc3RhbGxpbmcgXCRTUkMgaW4gXCREU1QKK0NGX0VPRgorCitpZiB0ZXN0ICRXSVRIX0NVUlNFU19IID0geWVzOyB0aGVuCisJY2F0ID4+aGVhZGVycy5zaCA8PENGX0VPRgorY2FzZSBcJERTVCBpbgorLyovaW5jbHVkZS8qKQorCUVORD1cYGJhc2VuYW1lIFwkRFNUXGAKKwlmb3IgaSBpbiBcYGNhdCBcJFJFRi8uLi8qL2hlYWRlcnMgfGZncmVwIC12ICIjIlxgCisJZG8KKwkJTkFNRT1cYGJhc2VuYW1lIFwkaVxgCisJCWVjaG8gInMvPFwkTkFNRT4vPFwkRU5EXC9cJE5BTUU+LyIgPj4gXCRUTVBTRUQKKwlkb25lCisJOzsKKyopCisJZWNobyAiIiA+PiBcJFRNUFNFRAorCTs7Citlc2FjCitDRl9FT0YKKworZWxzZQorCWNhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKK2Nhc2UgXCREU1QgaW4KKy8qL2luY2x1ZGUvKikKKwlFTkQ9XGBiYXNlbmFtZSBcJERTVFxgCisJZm9yIGkgaW4gXGBjYXQgXCRSRUYvLi4vKi9oZWFkZXJzIHxmZ3JlcCAtdiAiIyJcYAorCWRvCisJCU5BTUU9XGBiYXNlbmFtZSBcJGlcYAorCQlpZiB0ZXN0ICJcJE5BTUUiID0gImN1cnNlcy5oIgorCQl0aGVuCisJCQllY2hvICJzLzxjdXJzZXMuaD4vPG5jdXJzZXMuaD4vIiA+PiBcJFRNUFNFRAorCQkJTkFNRT1uY3Vyc2VzLmgKKwkJZmkKKwkJZWNobyAicy88XCROQU1FPi88XCRFTkRcL1wkTkFNRT4vIiA+PiBcJFRNUFNFRAorCWRvbmUKKwk7OworKikKKwllY2hvICJzLzxjdXJzZXMuaD4vPG5jdXJzZXMuaD4vIiA+PiBcJFRNUFNFRAorCTs7Citlc2FjCitDRl9FT0YKK2ZpCitjYXQgPj5oZWFkZXJzLnNoIDw8Q0ZfRU9GCitybSAtZiBcJFRNUFNSQworc2VkIC1mIFwkVE1QU0VEIFwkU1JDID4gXCRUTVBTUkMKK05BTUU9XGBiYXNlbmFtZSBcJFNSQ1xgCitDRl9FT0YKK2lmIHRlc3QgJFdJVEhfQ1VSU0VTX0ggIT0geWVzOyB0aGVuCisJY2F0ID4+aGVhZGVycy5zaCA8PENGX0VPRgordGVzdCAiXCROQU1FIiA9ICJjdXJzZXMuaCIgJiYgTkFNRT1uY3Vyc2VzLmgKK0NGX0VPRgorZmkKK2NhdCA+PmhlYWRlcnMuc2ggPDxDRl9FT0YKKyMgSnVzdCBpbiBjYXNlIHNvbWVvbmUgZ3ppcCdkIG1hbnBhZ2VzLCByZW1vdmUgdGhlIGNvbmZsaWN0aW5nIGNvcHkuCit0ZXN0IC1mIFwkRFNUL1wkTkFNRS5neiAmJiBybSAtZiBcJERTVC9cJE5BTUUuZ3oKKworZXZhbCBcJFBSRyBcJFRNUFNSQyBcJERTVC9cJE5BTUUKK3JtIC1mIFwkVE1QU1JDIFwkVE1QU0VECitDRl9FT0YKKworY2htb2QgMDc1NSBoZWFkZXJzLnNoCisKK2ZvciBjZl9kaXIgaW4gJFNSQ19TVUJESVJTCitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXIgOyB0aGVuCisJCWNvbnRpbnVlCisJZmkKKworCWlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL2hlYWRlcnM7IHRoZW4KKwkJJEFXSyAtZiAkc3JjZGlyL21rLWhkci5hd2sgXAorCQkJc3Vic2V0PSIkTElCX1NVQlNFVFMiIFwKKwkJCWNvbXBhdD0iJFdJVEhfQ1VSU0VTX0giIFwKKwkJCSRzcmNkaXIvJGNmX2Rpci9oZWFkZXJzID4+JGNmX2Rpci9NYWtlZmlsZQorCWZpCisKKwlpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9tb2R1bGVzOyB0aGVuCisJCWlmIHRlc3QgIiRjZl9kaXIiICE9ICJjKysiIDsgdGhlbgorCQkJY2F0ID4+JGNmX2Rpci9NYWtlZmlsZSA8PCJDRl9FT0YiCitkZXBlbmQgOiAke0FVVE9fU1JDfQorCW1ha2VkZXBlbmQgLS0gJHtDUFBGTEFHU30gLS0gJHtDX1NSQ30KKworIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorQ0ZfRU9GCisJCWZpCisJZmkKK2RvbmUKKworIDs7CisgIGVzYWMKK2RvbmUKK0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxFT0YKKworeyAoZXhpdCAwKTsgZXhpdCAwOyB9CitFT0YKK2NobW9kICt4ICRDT05GSUdfU1RBVFVTCithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGV4ZWMgNT4vZGV2L251bGwKKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KK2ZpCiske01BS0UtbWFrZX0gcHJlaW5zdGFsbApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvY29uZmlndXJlLmluIGIvbmN1cnNlcy01LjcvY29uZmlndXJlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDQyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9jb25maWd1cmUuaW4KQEAgLTAsMCArMSwxODI4IEBACitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKK2RubCBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorZG5sICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCitkbmwgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKK2RubCBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorZG5sIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCitkbmwgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCitkbmwgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCitkbmwgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKK2RubCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorZG5sIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCitkbmwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKK2RubCBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorZG5sIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorZG5sIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCitkbmwgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKK2RubCBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwKK2RubCBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NS1vbgorZG5sCitkbmwgJElkOiBjb25maWd1cmUuaW4sdiAxLjQ1NCAyMDA4LzEwLzE4IDE0OjUzOjMyIHRvbSBFeHAgJAorZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCitkbmwKK2RubCBTZWUgaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mLyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KK2RubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfUFJFUkVRKDIuMTMuMjAwMjAyMTApCitBQ19SRVZJU0lPTigkUmV2aXNpb246IDEuNDU0ICQpCitBQ19JTklUKG5jdXJzZXMvYmFzZS9saWJfaW5pdHNjci5jKQorQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL25jdXJzZXNfY2ZnLmg6aW5jbHVkZS9uY3Vyc2VzX2NmZy5oaW4pCisKK0NGX1RPUF9CVUlMRERJUgorQ0ZfU1VCU1RfTkNVUlNFU19WRVJTSU9OCisKK0NGX1dJVEhfUkVMX1ZFUlNJT04oTkNVUlNFUykKK0NGX1dJVEhfQUJJX1ZFUlNJT04KKworQ0ZfQ0hFQ0tfQ0FDSEUoW0FDX0NBTk9OSUNBTF9TWVNURU1dKQorQUNfQVJHX1dJVEgoc3lzdGVtLXR5cGUsCitbICAtLXdpdGgtc3lzdGVtLXR5cGU9WFhYICB0ZXN0OiBvdmVycmlkZSBkZXJpdmVkIGhvc3Qgc3lzdGVtLXR5cGVdLAorW0FDX01TR19XQVJOKG92ZXJyaWRpbmcgc3lzdGVtIHR5cGUgdG8gJHdpdGh2YWwpCisgY2ZfY3Zfc3lzdGVtX25hbWU9JHdpdGh2YWxdKQorCisjIyMJU2F2ZSB0aGUgZ2l2ZW4gJENGTEFHUyB0byBhbGxvdyB1c2VyLW92ZXJyaWRlLgorY2ZfdXNlcl9DRkxBR1M9IiRDRkxBR1MiCisKKyMjIwlEZWZhdWx0IGluc3RhbGwtbG9jYXRpb24KK0NGX0NGR19ERUZBVUxUUworCisjIyMJQ2hlY2tzIGZvciBwcm9ncmFtcy4KK0FDX1BST0dfQ0MKK0NGX0dDQ19WRVJTSU9OCisKK0FDX1BST0dfQ1BQCitBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorQ0ZfUFJPR19DQ19DX08oQ0MpCitBQ19JU0NfUE9TSVgKK0NGX0FOU0lfQ0NfUkVRRAorQ0ZfUFJPR19FWFQKK0NGX1BST0dfTERDT05GSUcKKworZG5sIERFRkVDVCBpbiBhdXRvY29uZiAyLjEyOglhbiBhdHRlbXB0IHRvIHNldCBwb2xpY3ksIHRoaXMgYnJlYWtzIHRoZQorZG5sCQkJCWNvbmZpZ3VyZSBzY3JpcHQgYnkgbm90IGxldHRpbmcgdXMgdGVzdCBpZiBDKysKK2RubAkJCQlpcyBwcmVzZW50LCBtYWtpbmcgdGhpcyBvcHRpb24gbmVjZXNzYXJ5LgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGVuc3VyZSBib29sIGlzIGNvbnNpc3RlbnQgd2l0aCBDKyspCitBQ19BUkdfV0lUSChjeHgsCisJWyAgLS13aXRob3V0LWN4eCAgICAgICAgICAgZG8gbm90IGFkanVzdCBuY3Vyc2VzIGJvb2wgdG8gbWF0Y2ggQysrXSwKKwlbY2Zfd2l0aF9jeHg9JHdpdGh2YWxdLAorCVtjZl93aXRoX2N4eD15ZXNdKQorQUNfTVNHX1JFU1VMVCgkY2Zfd2l0aF9jeHgpCitpZiB0ZXN0ICJYJGNmX3dpdGhfY3h4IiA9IFhubyA7IHRoZW4KKwlDWFg9IiIKKwlHWFg9IiIKK2Vsc2UKKwkjIHdpdGggYXV0b2NvbmYgMi4xMywgd2UgY2FuIGNoYW5nZSB0aGUgZXJyb3IgdG8gYSB3YXJuaW5nOgorCXB1c2hkZWYoW0FDX01TR19FUlJPUl0sCisJCVtBQ19NU0dfUkVTVUxUKG5vKQorCQkgQUNfTVNHX1dBUk4oW1lvdSBkb24ndCBoYXZlIGFueSBDKysgY29tcGlsZXIsIHRvbyBiYWRdKQorCQljZl93aXRoX2N4eD1ubzsgQ1hYPSIiOyBHWFg9IiI7XSlkbmwKKwlBQ19QUk9HX0NYWAorCXBvcGRlZihbQUNfTVNHX0VSUk9SXSlkbmwKKwkjIGF1dG9jb25mIDIuNXggcmVtb3ZlZCB0aGUgZXJyb3IgLSBieSBoYXJkY29kaW5nIGl0IHRvIGcrKy4KKwlpZiB0ZXN0ICIkQ1hYIiA9ICJnKysiIDsgdGhlbgorCQlBQ19QQVRIX1BST0coQ1hYLGcrKykKKwlmaQorCWlmIHRlc3QgIiRDWFgiID0gImcrKyIgOyB0aGVuCisJCUFDX01TR19XQVJOKGlnbm9yaW5nIGhhcmRjb2RlZCBnKyspCisJCWNmX3dpdGhfY3h4PW5vOyBDWFg9IiI7IEdYWD0iIjsKKwlmaQorZmkKKworQ0ZfR1hYX1ZFUlNJT04KK2Nhc2UgJEdYWF9WRVJTSU9OIGluCisxKnwyLltbMC02XV0qKQorCSMgR1hYPSIiOyBDWFg9IiI7IGFjX2N2X3Byb2dfZ3h4PW5vCisJIyBjZl9jeHhfbGlicmFyeT1ubworCUFDX01TR19XQVJOKHRlbXBsYXRlcyBkbyBub3Qgd29yaykKKwk7OworZXNhYworCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgQysrIGJpbmRpbmcgYW5kIGRlbW8pCitBQ19BUkdfV0lUSChjeHgtYmluZGluZywKKwlbICAtLXdpdGhvdXQtY3h4LWJpbmRpbmcgICBkbyBub3QgYnVpbGQgQysrIGJpbmRpbmcgYW5kIGRlbW9dLAorCVtjZl93aXRoX2N4eF9iaW5kaW5nPSR3aXRodmFsXSwKKwlbY2Zfd2l0aF9jeHhfYmluZGluZz0kY2Zfd2l0aF9jeHhdKQorQUNfTVNHX1JFU1VMVCgkY2Zfd2l0aF9jeHhfYmluZGluZykKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIHdpdGggQWRhOTUpCitBQ19BUkdfV0lUSChhZGEsCisJWyAgLS13aXRob3V0LWFkYSAgICAgICAgICAgc3VwcHJlc3MgY2hlY2sgZm9yIEFkYTk1LCBkb24ndCBidWlsZCBkZW1vXSwKKwlbY2Zfd2l0aF9hZGE9JHdpdGh2YWxdLAorCVtjZl93aXRoX2FkYT15ZXNdKQorQUNfTVNHX1JFU1VMVCgkY2Zfd2l0aF9hZGEpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCBwcm9ncmFtcyBzdWNoIGFzIHRpYykKK0FDX0FSR19XSVRIKHByb2dzLAorCVsgIC0td2l0aG91dC1wcm9ncyAgICAgICAgIHN1cHByZXNzIGJ1aWxkIHdpdGggcHJvZ3JhbXMgKGUuZy4sIHRpYyldLAorCVtjZl93aXRoX3Byb2dzPSR3aXRodmFsXSwKKwlbY2Zfd2l0aF9wcm9ncz15ZXNdKQorQUNfTVNHX1JFU1VMVCgkY2Zfd2l0aF9wcm9ncykKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3aXNoIHRvIGluc3RhbGwgY3Vyc2VzLmgpCitBQ19BUkdfV0lUSChjdXJzZXMtaCwKKwlbICAtLXdpdGhvdXQtY3Vyc2VzLWggICAgICBpbnN0YWxsIGN1cnNlcy5oIGFzIG5jdXJzZXMuaCBvbmx5XSwKKwlbd2l0aF9jdXJzZXNfaD0kd2l0aHZhbF0sCisJW3dpdGhfY3Vyc2VzX2g9eWVzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfY3Vyc2VzX2gpCisKK21vZHVsZXNfdG9fYnVpbGQ9Im5jdXJzZXMiCitpZiB0ZXN0ICJYJGNmX3dpdGhfcHJvZ3MiICE9IFhubyA7IHRoZW4KK21vZHVsZXNfdG9fYnVpbGQ9IiRtb2R1bGVzX3RvX2J1aWxkIHByb2dzIHRhY2siCitmaQorbW9kdWxlc190b19idWlsZD0iJG1vZHVsZXNfdG9fYnVpbGQgcGFuZWwgbWVudSBmb3JtIgorCitBQ19BUkdfUFJPR1JBTQorCitDRl9QUk9HX0FXSworQ0ZfUFJPR19FR1JFUAorQ0ZfUFJPR19JTlNUQUxMCitDRl9QUk9HX0xJTlQKK0FDX1BST0dfTE5fUworCitBQ19TWVNfTE9OR19GSUxFX05BTUVTCisKK0FDX01TR19DSEVDS0lORyhpZiB3ZSBzaG91bGQgYXNzdW1lIG1peGVkLWNhc2UgZmlsZW5hbWVzKQorQUNfQVJHX0VOQUJMRShtaXhlZC1jYXNlLAorCVsgIC0tZW5hYmxlLW1peGVkLWNhc2UgICAgIHRpYyBzaG91bGQgYXNzdW1lIG1peGVkLWNhc2UgZmlsZW5hbWVzXSwKKwlbZW5hYmxlX21peGVkY2FzZT0kZW5hYmxldmFsXSwKKwlbZW5hYmxlX21peGVkY2FzZT1hdXRvXSkKK0FDX01TR19SRVNVTFQoJGVuYWJsZV9taXhlZGNhc2UpCitpZiB0ZXN0ICIkZW5hYmxlX21peGVkY2FzZSIgPSAiYXV0byIgOyB0aGVuCisgICAgQ0ZfTUlYRURDQVNFX0ZJTEVOQU1FUworZWxzZQorICAgIGNmX2N2X21peGVkY2FzZT0kZW5hYmxlX21peGVkY2FzZQorICAgIGlmIHRlc3QgIiRlbmFibGVfbWl4ZWRjYXNlIiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoTUlYRURDQVNFX0ZJTEVOQU1FUykKKyAgICBmaQorZmkKKworIyBkbyB0aGlzIGFmdGVyIG1peGVkLWNhc2Ugb3B0aW9uICh0YWdzL1RBR1MgaXMgbm90IGFzIGltcG9ydGFudCBhcyB0aWMpLgorQUNfUFJPR19NQUtFX1NFVAorQ0ZfTUFLRV9UQUdTCitDRl9NQUtFRkxBR1MKKworZG5sIFRoZXNlIGFyZSBzdGFuZGFyZCBhbW9uZyAqTklYIHN5c3RlbXMsIGJ1dCBub3Qgd2hlbiBjcm9zcy1jb21waWxpbmcKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsICc6JykKK0FDX0NIRUNLX1RPT0woTEQsIGxkLCBsZCkKK0FDX0NIRUNLX1RPT0woQVIsIGFyLCBhcikKK0NGX1NVQlNUKGFyY2hpdmVyIG9wdGlvbnMsQVJfT1BUUyxydikKKworZG5sIFNwZWNpYWwgb3B0aW9uIGZvciB1c2UgYnkgc3lzdGVtLWJ1aWxkZXJzOiB0aGUgaW5zdGFsbC1wcmVmaXggaXMgdXNlZCB0bworZG5sIGFkanVzdCB0aGUgbG9jYXRpb24gaW50byB3aGljaCB0aGUgYWN0dWFsIGluc3RhbGwgaXMgZG9uZSwgc28gdGhhdCBhbgorZG5sIGFyY2hpdmUgY2FuIGJlIGJ1aWx0IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBob3N0IHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24uCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IGhhdmUgc3BlY2lmaWVkIGFuIGluc3RhbGwtcHJlZml4KQorQUNfQVJHX1dJVEgoaW5zdGFsbC1wcmVmaXgsCisJWyAgLS13aXRoLWluc3RhbGwtcHJlZml4ICAgcHJlZml4ZXMgYWN0dWFsIGluc3RhbGwtbG9jYXRpb24gKCRERVNURElSKV0sCisJW2Nhc2UgIiR3aXRodmFsIiBpbiAjKHZpCisJeWVzfG5vKSAjKHZpCisJCTs7CisJKikJREVTVERJUj0iJHdpdGh2YWwiCisJCTs7CisJZXNhY10pCitBQ19NU0dfUkVTVUxUKCRERVNURElSKQorQUNfU1VCU1QoREVTVERJUikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfSEVMUF9NRVNTQUdFKEJ1aWxkLVRvb2xzIE5lZWRlZCB0byBDb21waWxlIFRlbXBvcmFyeSBBcHBsaWNhdGlvbnMgZm9yIENyb3NzLWNvbXBpbGluZzopCisjIElmIHdlJ3JlIGNyb3NzLWNvbXBpbGluZywgYWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHRvb2xzIGFuZCB0aGVpcgorIyBvcHRpb25zLiAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgb3JpZW50ZWQgdG93YXJkIGlkZW50aWZ5aW5nIHRoZSBob3N0CisjIGNvbXBpbGVyLCBldGMuLCBidXQgd2UgbmVlZCBhIGJ1aWxkIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHBhcnRzIG9mIHRoZSBzb3VyY2UuCitDRl9CVUlMRF9DQworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitDRl9IRUxQX01FU1NBR0UoT3B0aW9ucyB0byBTcGVjaWZ5IHRoZSBMaWJyYXJpZXMgQnVpbHQvVXNlZDopCisKKyMjIyBPcHRpb25zIHRvIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIHNldCBvZiBsaWJyYXJpZXMgd2hpY2ggYXJlIHVzZWQuCisjIyMgVXNlICItLXdpdGhvdXQtbm9ybWFsIC0td2l0aC1zaGFyZWQiIHRvIGFsbG93IHRoZSBkZWZhdWx0IG1vZGVsIHRvIGJlCisjIyMgc2hhcmVkLCBmb3IgZXhhbXBsZS4KK2NmX2xpc3RfbW9kZWxzPSIiCitBQ19TVUJTVChjZl9saXN0X21vZGVscylkbmwJdGhlIGNvbXBsZXRlIGxpc3Qgb2YgbW9kZWxzICgibm9ybWFsIGRlYnVnIikKKworQ0ZfV0lUSF9MSUJUT09MCitpZiB0ZXN0ICIkd2l0aF9saWJ0b29sIiAhPSAibm8iIDsgdGhlbgorCitjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIGxpYnRvb2wiCisKK2Vsc2UKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMpCitBQ19BUkdfV0lUSChzaGFyZWQsCisJWyAgLS13aXRoLXNoYXJlZCAgICAgICAgICAgZ2VuZXJhdGUgc2hhcmVkLWxpYnJhcmllc10sCisJW3dpdGhfc2hhcmVkPSR3aXRodmFsXSwKKwlbd2l0aF9zaGFyZWQ9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9zaGFyZWQpCit0ZXN0ICIkd2l0aF9zaGFyZWQiID0gInllcyIgJiYgY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBzaGFyZWQiCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzKQorQUNfQVJHX1dJVEgobm9ybWFsLAorCVsgIC0td2l0aC1ub3JtYWwgICAgICAgICAgIGdlbmVyYXRlIG5vcm1hbC1saWJyYXJpZXMgKGRlZmF1bHQpXSwKKwlbd2l0aF9ub3JtYWw9JHdpdGh2YWxdLAorCVt3aXRoX25vcm1hbD15ZXNdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9ub3JtYWwpCit0ZXN0ICIkd2l0aF9ub3JtYWwiID0gInllcyIgJiYgY2ZfbGlzdF9tb2RlbHM9IiRjZl9saXN0X21vZGVscyBub3JtYWwiCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMpCitBQ19BUkdfV0lUSChkZWJ1ZywKKwlbICAtLXdpdGgtZGVidWcgICAgICAgICAgICBnZW5lcmF0ZSBkZWJ1Zy1saWJyYXJpZXMgKGRlZmF1bHQpXSwKKwlbd2l0aF9kZWJ1Zz0kd2l0aHZhbF0sCisJW3dpdGhfZGVidWc9eWVzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfZGVidWcpCit0ZXN0ICIkd2l0aF9kZWJ1ZyIgPSAieWVzIiAmJiBjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIGRlYnVnIgorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgcHJvZmlsaW5nIGxpYnJhcmllcykKK0FDX0FSR19XSVRIKHByb2ZpbGUsCisJWyAgLS13aXRoLXByb2ZpbGUgICAgICAgICAgZ2VuZXJhdGUgcHJvZmlsZS1saWJyYXJpZXNdLAorCVt3aXRoX3Byb2ZpbGU9JHdpdGh2YWxdLAorCVt3aXRoX3Byb2ZpbGU9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9wcm9maWxlKQordGVzdCAiJHdpdGhfcHJvZmlsZSIgPSAieWVzIiAmJiBjZl9saXN0X21vZGVscz0iJGNmX2xpc3RfbW9kZWxzIHByb2ZpbGUiCisKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQUNfTVNHX0NIRUNLSU5HKGZvciBzcGVjaWZpZWQgbW9kZWxzKQordGVzdCAteiAiJGNmX2xpc3RfbW9kZWxzIiAmJiBjZl9saXN0X21vZGVscz1ub3JtYWwKK2RubCBJZiB3ZSB1c2UgbGlidG9vbCB0byBnZW5lcmF0ZSBsaWJyYXJpZXMsIHRoZW4gaXQgbXVzdCBiZSB0aGUgb25seQorZG5sIHNwZWNpZmllZCBtb2RlbC4KK3Rlc3QgIiR3aXRoX2xpYnRvb2wiICE9ICJubyIgJiYgY2ZfbGlzdF9tb2RlbHM9bGlidG9vbAorQUNfTVNHX1JFU1VMVCgkY2ZfbGlzdF9tb2RlbHMpCisKKyMjIyBVc2UgdGhlIGZpcnN0IG1vZGVsIGFzIHRoZSBkZWZhdWx0LCBhbmQgc2F2ZSBpdHMgc3VmZml4IGZvciB1c2UgaW4gYnVpbGRpbmcKKyMjIyB1cCB0ZXN0LWFwcGxpY2F0aW9ucy4KK0FDX01TR19DSEVDS0lORyhmb3IgZGVmYXVsdCBtb2RlbCkKK0RGVF9MV1JfTU9ERUw9YGVjaG8gIiRjZl9saXN0X21vZGVscyIgfCAkQVdLICd7cHJpbnQgJDF9J2AKK0FDX01TR19SRVNVTFQoJERGVF9MV1JfTU9ERUwpCisKK0NGX1VQUEVSKERGVF9VUFJfTU9ERUwsJERGVF9MV1JfTU9ERUwpZG5sCisKK0FDX1NVQlNUKERGVF9MV1JfTU9ERUwpZG5sCXRoZSBkZWZhdWx0IG1vZGVsICgibm9ybWFsIikKK0FDX1NVQlNUKERGVF9VUFJfTU9ERUwpZG5sCXRoZSBkZWZhdWx0IG1vZGVsICgiTk9STUFMIikKKworVElDU19OQU1FPXRpYworQUNfU1VCU1QoVElDU19OQU1FKQorCitUSU5GT19OQU1FPXRpbmZvCitBQ19TVUJTVChUSU5GT19OQU1FKQorCitMSUJfTkFNRT1uY3Vyc2VzCitBQ19TVUJTVChMSUJfTkFNRSkKKworTElCX0RJUj0uLi9saWIKK0xJQl8yTkQ9Li4vLi4vbGliCisKK0NGX0xJQl9QUkVGSVgoY2ZfcHJlZml4KQorTElCX1BSRUZJWD0kY2ZfcHJlZml4CitBQ19TVUJTVChMSUJfUFJFRklYKQorCitMSUJfU1VGRklYPQorQUNfU1VCU1QoTElCX1NVRkZJWCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBzZXBhcmF0ZSB0ZXJtaW5mbyBsaWJyYXJ5KQorQUNfQVJHX1dJVEgodGVybWxpYiwKKwlbICAtLXdpdGgtdGVybWxpYiAgICAgICAgICBnZW5lcmF0ZSBzZXBhcmF0ZSB0ZXJtaW5mbyBsaWJyYXJ5XSwKKwlbd2l0aF90ZXJtbGliPSR3aXRodmFsXSwKKwlbd2l0aF90ZXJtbGliPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfdGVybWxpYikKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEgc2VwYXJhdGUgdGljIGxpYnJhcnkpCitBQ19BUkdfV0lUSCh0aWNsaWIsCisJWyAgLS13aXRoLXRpY2xpYiAgICAgICAgICAgZ2VuZXJhdGUgc2VwYXJhdGUgdGljIGxpYnJhcnldLAorCVt3aXRoX3RpY2xpYj0kd2l0aHZhbF0sCisJW3dpdGhfdGljbGliPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfdGljbGliKQorCisjIyMgQ2hlY2tzIGZvciBzcGVjaWFsIGxpYnJhcmllcywgbXVzdCBiZSBkb25lIHVwLWZyb250LgorU0hMSUJfTElTVD0iIgorQ0ZfV0lUSF9HUE0KK2lmIHRlc3QgIiR3aXRoX2dwbSIgIT0gbm8gOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGxvYWQgR1BNIGR5bmFtaWNhbGx5KQorCUFDX0FSR19XSVRIKGRsc3ltLAorCQlbICAtLXdpdGhvdXQtZGxzeW0gICAgICAgICBkbyBub3QgdXNlIGRsc3ltKCkgdG8gbG9hZCBHUE0gZHluYW1pY2FsbHldLAorCQlbd2l0aF9kbHN5bT0kd2l0aHZhbF0sCisJCVt3aXRoX2Rsc3ltPXllc10pCisJQUNfTVNHX1JFU1VMVCgkd2l0aF9kbHN5bSkKKwlpZiB0ZXN0ICIkd2l0aF9kbHN5bSIgPSB5ZXMgOyB0aGVuCisJCUNGX0ZVTkNfRExTWU0KKwkJaWYgdGVzdCAiJHdpdGhfZ3BtIiAhPSB5ZXMgOyB0aGVuCisJCQlDRl9WRVJCT1NFKGFzc3VtaW5nIHNvbmFtZSBmb3IgZ3BtIGlzICR3aXRoX2dwbSkKKwkJCWNmX2N2X2dwbV9zb25hbWU9IiR3aXRoX2dwbSIKKwkJZWxzZQorCQkJQ0ZfTElCX1NPTkFNRShbI2luY2x1ZGUgPGdwbS5oPl0sW2lmIChHcG1fT3BlbigwLDApKSBHcG1fQ2xvc2UoKTtdLGdwbSkKKwkJZmkKKwkJdGVzdCAiJGNmX2N2X2dwbV9zb25hbWUiICE9ICJ1bmtub3duIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoTElCR1BNX1NPTkFNRSwiJGNmX2N2X2dwbV9zb25hbWUiKQorCQlTSExJQl9MSVNUPSItbGRsICRTSExJQl9MSVNUIgorCWVsc2UKKwkJU0hMSUJfTElTVD0iLWxncG0gJFNITElCX0xJU1QiCisJZmkKKwlBQ19ERUZJTkUoSEFWRV9MSUJHUE0pCisJQ0ZfQ0hFQ0tfR1BNX1dHRVRDSAorZmkKKworQ0ZfV0lUSF9TWVNNT1VTRQorCitkbmwgTm90IGFsbCBwb3J0cyBvZiBnY2Mgc3VwcG9ydCB0aGUgLWcgb3B0aW9uCisKK2lmIHRlc3QgWCIkQ0NfR19PUFQiID0gWCIiIDsgdGhlbgorCUNDX0dfT1BUPSctZycKKwl0ZXN0IC1uICIkR0NDIiAmJiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZ30iICE9IHllcyAmJiBDQ19HX09QVD0nJworZmkKK0FDX1NVQlNUKENDX0dfT1BUKQorCitpZiB0ZXN0IFgiJENYWF9HX09QVCIgPSBYIiIgOyB0aGVuCisJQ1hYX0dfT1BUPSctZycKKwl0ZXN0IC1uICIkR1hYIiAmJiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2d9IiAhPSB5ZXMgJiYgQ1hYX0dfT1BUPScnCitmaQorQUNfU1VCU1QoQ1hYX0dfT1BUKQorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGRlZmF1bHQgbG9hZGVyIGZsYWdzKQorY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorbGlidG9vbCkgTERfTU9ERUw9JycgICA7Oworbm9ybWFsKSAgTERfTU9ERUw9JycgICA7OworZGVidWcpICAgTERfTU9ERUw9JENDX0dfT1BUIDs7Citwcm9maWxlKSBMRF9NT0RFTD0nLXBnJzs7CitzaGFyZWQpICBMRF9NT0RFTD0nJyAgIDs7Citlc2FjCitBQ19TVUJTVChMRF9NT0RFTClkbmwJCXRoZSB0eXBlIG9mIGxpbmsgKGUuZy4sIC1nIG9yIC1wZykKK0FDX01TR19SRVNVTFQoJExEX01PREVMKQorCitjYXNlICRERlRfTFdSX01PREVMIGluCitzaGFyZWQpCitDRl9FTkFCTEVfUlBBVEgKK0FDX01TR19DSEVDS0lORyhpZiBzaGFyZWQgbGlicmFyaWVzIHNob3VsZCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbCkKK0FDX0FSR19FTkFCTEUocmVsaW5rLAorWyAgLS1kaXNhYmxlLXJlbGluayAgICAgICAgcmVsaW5rIHNoYXJlZCBsaWJyYXJpZXMgZHVyaW5nIGluc3RhbGxdLAorW2NmX2N2X2RvX3JlbGluaz0kZW5hYmxldmFsXSwKK1tjZl9jdl9kb19yZWxpbms9eWVzXSkKK0FDX01TR19SRVNVTFQoJGNmX2N2X2RvX3JlbGluaykKKwk7OworZXNhYworCitDRl9TSEFSRURfT1BUUworaWYgdGVzdCAiJENDX1NIQVJFRF9PUFRTIiA9ICJ1bmtub3duIjsgdGhlbgorCWZvciBtb2RlbCBpbiAkY2ZfbGlzdF9tb2RlbHM7IGRvCisJCWlmIHRlc3QgIiRtb2RlbCIgPSAic2hhcmVkIjsgdGhlbgorCQkJQUNfRVJST1IoU2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24pCisJCWZpCisJZG9uZQorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfSEVMUF9NRVNTQUdFKEZpbmUtVHVuaW5nIFlvdXIgQ29uZmlndXJhdGlvbjopCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1vdmVyd3JpdGUgdG8gbGVhdmUgb3V0IHRoZSBsaW5rIHRvIC1sY3Vyc2VzCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdpc2ggdG8gaW5zdGFsbCBuY3Vyc2VzIG92ZXJ3cml0aW5nIGN1cnNlcykKK0FDX0FSR19FTkFCTEUob3ZlcndyaXRlLAorCVsgIC0tZGlzYWJsZS1vdmVyd3JpdGUgICAgIGxlYXZlIG91dCB0aGUgbGluayB0byAtbGN1cnNlc10sCisJW3dpdGhfb3ZlcndyaXRlPSRlbmFibGV2YWxdLAorCVtpZiB0ZXN0ICIkcHJlZml4IiA9ICIvdXNyIiA7IHRoZW4gd2l0aF9vdmVyd3JpdGU9eWVzOyBlbHNlIHdpdGhfb3ZlcndyaXRlPW5vOyBmaV0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX292ZXJ3cml0ZSkKKworQUNfTVNHX0NIRUNLSU5HKGlmIGV4dGVybmFsIHRlcm1pbmZvLWRhdGFiYXNlIGlzIHVzZWQpCitBQ19BUkdfRU5BQkxFKGRhdGFiYXNlLAorCVsgIC0tZGlzYWJsZS1kYXRhYmFzZSAgICAgIGRvIG5vdCB1c2UgdGVybWluZm8sIG9ubHkgZmFsbGJhY2tzL3Rlcm1jYXBdLAorCVt1c2VfZGF0YWJhc2U9JGVuYWJsZXZhbF0sCisJW3VzZV9kYXRhYmFzZT15ZXNdKQorQUNfTVNHX1JFU1VMVCgkdXNlX2RhdGFiYXNlKQorCitjYXNlICRob3N0X29zIGluICModmkKK29zMiopICModmkKKwlURVJNSU5GT19TUkM9JyR7dG9wX3NyY2Rpcn0vbWlzYy9lbXguc3JjJworCTs7CisqKSAjKHZpCisJVEVSTUlORk9fU1JDPScke3RvcF9zcmNkaXJ9L21pc2MvdGVybWluZm8uc3JjJworCTs7Citlc2FjCitBQ19TVUJTVChURVJNSU5GT19TUkMpCisKK0NGX1BBVEhTRVAKK2lmIHRlc3QgIiR1c2VfZGF0YWJhc2UiICE9IG5vIDsgdGhlbgorCUFDX0RFRklORShVU0VfREFUQUJBU0UpCisKKwlBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggdGVybWluZm8gc291cmNlLWZpbGUgd2lsbCBiZSBpbnN0YWxsZWQpCisJQUNfQVJHX0VOQUJMRShkYXRhYmFzZSwKKwkJWyAgLS13aXRoLWRhdGFiYXNlPVhYWCAgICAgc3BlY2lmeSB0ZXJtaW5mbyBzb3VyY2UgdG8gaW5zdGFsbF0sCisJCVtURVJNSU5GT19TUkM9JHdpdGh2YWxdKQorCUFDX01TR19SRVNVTFQoJFRFUk1JTkZPX1NSQykKKworCUFDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIHVzZSBoYXNoZWQgZGF0YWJhc2UgaW5zdGVhZCBvZiBkaXJlY3RvcnkvdHJlZSkKKwlBQ19BUkdfV0lUSChoYXNoZWQtZGIsCisJCVsgIC0td2l0aC1oYXNoZWQtZGIgICAgICAgIHNwZWNpZnkgaGFzaGVkLWRhdGFiYXNlIGxpYnJhcnldLCwKKwkJW3dpdGhfaGFzaGVkX2RiPW5vXSkKKwlBQ19NU0dfUkVTVUxUKCR3aXRoX2hhc2hlZF9kYikKK2Vsc2UKKwl3aXRoX2hhc2hlZF9kYj1ubworZmkKKworQUNfTVNHX0NIRUNLSU5HKGZvciBsaXN0IG9mIGZhbGxiYWNrIGRlc2NyaXB0aW9ucykKK0FDX0FSR19XSVRIKGZhbGxiYWNrcywKKwlbICAtLXdpdGgtZmFsbGJhY2tzPVhYWCAgICBzcGVjaWZ5IGxpc3Qgb2YgZmFsbGJhY2sgdGVybWluYWwgZGVzY3JpcHRpb25zXSwKKwlbd2l0aF9mYWxsYmFjaz0kd2l0aHZhbF0sCisJW3dpdGhfZmFsbGJhY2s9XSkKK0FDX01TR19SRVNVTFQoJHdpdGhfZmFsbGJhY2spCitGQUxMQkFDS19MSVNUPWBlY2hvICIkd2l0aF9mYWxsYmFjayIgfCBzZWQgLWUgJ3MvLC8gL2cnYAorQUNfU1VCU1QoRkFMTEJBQ0tfTElTVCkKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IG1vZGVybiB4dGVybSBvciBhbnRpcXVlKQorQUNfQVJHX1dJVEgoeHRlcm0tbmV3LAorCVsgIC0td2l0aG91dC14dGVybS1uZXcgICAgIHNwZWNpZnkgaWYgeHRlcm0gdGVybWluZm8gc2hvdWxkIGJlIG9sZCB2ZXJzaW9uXSwKKwlbd2l0aF94dGVybV9uZXc9JHdpdGh2YWxdLAorCVt3aXRoX3h0ZXJtX25ldz15ZXNdKQorY2FzZSAkd2l0aF94dGVybV9uZXcgaW4KK25vKQl3aXRoX3h0ZXJtX25ldz14dGVybS1vbGQ7OworKikJd2l0aF94dGVybV9uZXc9eHRlcm0tbmV3OzsKK2VzYWMKK0FDX01TR19SRVNVTFQoJHdpdGhfeHRlcm1fbmV3KQorV0hJQ0hfWFRFUk09JHdpdGhfeHRlcm1fbmV3CitBQ19TVUJTVChXSElDSF9YVEVSTSkKKworTUFLRV9URVJNSU5GTz0KK2lmIHRlc3QgIiR1c2VfZGF0YWJhc2UiID0gbm8gOyB0aGVuCisJVEVSTUlORk89IiR7ZGF0YWRpcn0vdGVybWluZm8iCisJTUFLRV9URVJNSU5GTz0iIyIKK2Vsc2UKKworQUNfTVNHX0NIRUNLSU5HKGZvciBsaXN0IG9mIHRlcm1pbmZvIGRpcmVjdG9yaWVzKQorQ0ZfV0lUSF9QQVRITElTVCh0ZXJtaW5mby1kaXJzLAorCVsgIC0td2l0aC10ZXJtaW5mby1kaXJzPVhYWCBzcGVjaWZ5IGxpc3Qgb2YgdGVybWluZm8gZGlyZWN0b3JpZXNdLAorCVRFUk1JTkZPX0RJUlMsCisJREFUQURJUi90ZXJtaW5mbywKKwkke2RhdGFkaXJ9L3Rlcm1pbmZvKQorQUNfTVNHX1JFU1VMVCgkVEVSTUlORk9fRElSUykKK3Rlc3QgLW4gIiRURVJNSU5GT19ESVJTIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoVEVSTUlORk9fRElSUywiJFRFUk1JTkZPX0RJUlMiKQorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGRlZmF1bHQgdGVybWluZm8gZGlyZWN0b3J5KQorQ0ZfV0lUSF9QQVRIKGRlZmF1bHQtdGVybWluZm8tZGlyLAorCVsgIC0td2l0aC1kZWZhdWx0LXRlcm1pbmZvLWRpcj1ESVIgZGVmYXVsdCB0ZXJtaW5mbyBkaXJlY3RvcnldLAorCVRFUk1JTkZPLAorCURBVEFESVIvdGVybWluZm8sCisJJHtkYXRhZGlyfS90ZXJtaW5mbykKK0FDX01TR19SRVNVTFQoJFRFUk1JTkZPKQorQUNfREVGSU5FX1VOUVVPVEVEKFRFUk1JTkZPLCIkVEVSTUlORk8iKQorCitmaQorCitBQ19TVUJTVChURVJNSU5GTykKK0FDX1NVQlNUKE1BS0VfVEVSTUlORk8pCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1iaWctY29yZSB0byBtYWtlIHRpYyBydW4gb24gc21hbGwgbWFjaGluZXMKKyMjIwlXZSBuZWVkIDRNYiwgY2hlY2sgaWYgd2UgY2FuIGFsbG9jYXRlIDUwJSBtb3JlIHRoYW4gdGhhdC4KK0FDX01TR19DSEVDS0lORyhpZiBiaWctY29yZSBvcHRpb24gc2VsZWN0ZWQpCitBQ19BUkdfRU5BQkxFKGJpZy1jb3JlLAorCVsgIC0tZGlzYWJsZS1iaWctY29yZSAgICAgIGFzc3VtZSBtYWNoaW5lIGhhcyBsaXR0bGUgbWVtb3J5XSwKKwlbd2l0aF9iaWdfY29yZT0kZW5hYmxldmFsXSwKKwlbQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbigpIHsKKwl1bnNpZ25lZCBsb25nIG4gPSA2MDAwMDAwTDsKKwljaGFyICpzID0gbWFsbG9jKG4pOworCWlmIChzICE9IDApCisJCXNbMF0gPSBzW24tMV0gPSAwOworCSR7Y2ZfY3ZfbWFpbl9yZXR1cm46LXJldHVybn0ocyA9PSAwKTsKK31dLAorCVt3aXRoX2JpZ19jb3JlPXllc10sCisJW3dpdGhfYmlnX2NvcmU9bm9dLAorCVt3aXRoX2JpZ19jb3JlPW5vXSldKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9iaWdfY29yZSkKK3Rlc3QgIiR3aXRoX2JpZ19jb3JlIiA9ICJ5ZXMiICYmIEFDX0RFRklORShIQVZFX0JJR19DT1JFKQorCisjIyMgSVNPIEMgb25seSBndWFyYW50ZWVzIDUxMi1jaGFyIHN0cmluZ3MsIHdlIGhhdmUgdGFibGVzIHdoaWNoIGxvYWQgZmFzdGVyCisjIyMgd2hlbiBjb25zdHJ1Y3RlZCB1c2luZyAiYmlnIiBzdHJpbmdzLiAgTW9yZSB0aGFuIHRoZSBDIGNvbXBpbGVyLCB0aGUgYXdrCisjIyMgcHJvZ3JhbSBpcyBhIGxpbWl0IG9uIG1vc3QgdmVuZG9yIFVOSVggc3lzdGVtcy4gIENoZWNrIHRoYXQgd2UgY2FuIGJ1aWxkLgorQUNfTVNHX0NIRUNLSU5HKGlmIGJpZy1zdHJpbmdzIG9wdGlvbiBzZWxlY3RlZCkKK0FDX0FSR19FTkFCTEUoYmlnLXN0cmluZ3MsCisJWyAgLS1kaXNhYmxlLWJpZy1zdHJpbmdzICAgYXNzdW1lIGNvbXBpbGVyIGhhcyBvbmx5IHN0YW5kYXJkLXNpemUgc3RyaW5nc10sCisJW3dpdGhfYmlnX3N0cmluZ3M9JGVuYWJsZXZhbF0sCisJW0NGX0FXS19CSUdfUFJJTlRGKDEyMDAwLHdpdGhfYmlnX3N0cmluZ3MpXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfYmlnX3N0cmluZ3MpCisKK1VTRV9CSUdfU1RSSU5HUz0wCit0ZXN0ICIkd2l0aF9iaWdfc3RyaW5ncyIgPSAieWVzIiAmJiBVU0VfQklHX1NUUklOR1M9MQorQUNfU1VCU1QoVVNFX0JJR19TVFJJTkdTKQorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS10ZXJtY2FwIHRvIGNvbXBpbGUgaW4gdGhlIHRlcm1jYXAgZmFsbGJhY2sgc3VwcG9ydAorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRlcm1jYXAtZmFsbGJhY2sgc3VwcG9ydCkKK0FDX0FSR19FTkFCTEUodGVybWNhcCwKKwlbICAtLWVuYWJsZS10ZXJtY2FwICAgICAgICBjb21waWxlIGluIHRlcm1jYXAgZmFsbGJhY2sgc3VwcG9ydF0sCisJW3dpdGhfdGVybWNhcD0kZW5hYmxldmFsXSwKKwlbd2l0aF90ZXJtY2FwPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfdGVybWNhcCkKKworaWYgdGVzdCAiJHdpdGhfdGVybWNhcCIgIT0gInllcyIgOyB0aGVuCisJaWYgdGVzdCAiJHVzZV9kYXRhYmFzZSIgPSBubyA7IHRoZW4KKwkJaWYgdGVzdCAteiAiJHdpdGhfZmFsbGJhY2siIDsgdGhlbgorCQkJQUNfRVJST1IoWW91IGhhdmUgZGlzYWJsZWQgdGhlIGRhdGFiYXNlIHcvbyBzcGVjaWZ5aW5nIGZhbGxiYWNrcykKKwkJZmkKKwlmaQorCUFDX0RFRklORShQVVJFX1RFUk1JTkZPKQorZWxzZQorCitpZiB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIDsgdGhlbgorCUFDX0VSUk9SKE9wdGlvbnMgLS13aXRoLXRpY2xpYiBhbmQgLS1lbmFibGUtdGVybWNhcCBjYW5ub3QgYmUgY29tYmluZWQpCitmaQorCitBQ19ERUZJTkUoVVNFX1RFUk1DQVApCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxpc3Qgb2YgdGVybWNhcCBmaWxlcykKK0NGX1dJVEhfUEFUSExJU1QodGVybXBhdGgsCisJWyAgLS13aXRoLXRlcm1wYXRoPVhYWCAgICAgc3BlY2lmeSBsaXN0IG9mIHRlcm1jYXAgZmlsZXNdLAorCVRFUk1QQVRILAorCS9ldGMvdGVybWNhcDovdXNyL3NoYXJlL21pc2MvdGVybWNhcCkKK0FDX01TR19SRVNVTFQoJFRFUk1QQVRIKQordGVzdCAtbiAiJFRFUk1QQVRIIiAmJiBBQ19ERUZJTkVfVU5RVU9URUQoVEVSTVBBVEgsIiRURVJNUEFUSCIpCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWdldGNhcCB0byB1c2UgYSBoYWNrZWQgZ2V0Y2FwIGZvciByZWFkaW5nIHRlcm1jYXBzCitBQ19NU0dfQ0hFQ0tJTkcoaWYgZmFzdCB0ZXJtY2FwLWxvYWRlciBpcyBuZWVkZWQpCitBQ19BUkdfRU5BQkxFKGdldGNhcCwKKwlbICAtLWVuYWJsZS1nZXRjYXAgICAgICAgICBmYXN0IHRlcm1jYXAgbG9hZCwgbm8geHJlZnMgdG8gdGVybWluZm9dLAorCVt3aXRoX2dldGNhcD0kZW5hYmxldmFsXSwKKwlbd2l0aF9nZXRjYXA9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9nZXRjYXApCit0ZXN0ICIkd2l0aF9nZXRjYXAiID0gInllcyIgJiYgQUNfREVGSU5FKFVTRV9HRVRDQVApCisKK0FDX01TR19DSEVDS0lORyhpZiB0cmFuc2xhdGVkIHRlcm1jYXBzIHdpbGwgYmUgY2FjaGVkIGluIH4vLnRlcm1pbmZvKQorQUNfQVJHX0VOQUJMRShnZXRjYXAtY2FjaGUsCisJWyAgLS1lbmFibGUtZ2V0Y2FwLWNhY2hlICAgY2FjaGUgdHJhbnNsYXRlZCB0ZXJtY2FwcyBpbiB+Ly50ZXJtaW5mb10sCisJW3dpdGhfZ2V0Y2FwX2NhY2hlPSRlbmFibGV2YWxdLAorCVt3aXRoX2dldGNhcF9jYWNoZT1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2dldGNhcF9jYWNoZSkKK3Rlc3QgIiR3aXRoX2dldGNhcF9jYWNoZSIgPSAieWVzIiAmJiBBQ19ERUZJTkUoVVNFX0dFVENBUF9DQUNIRSkKKworZmkKKworIyMjICAgVXNlIG9wdGlvbiAtLWRpc2FibGUtaG9tZS10ZXJtaW5mbyB0byBjb21wbGV0ZWx5IHJlbW92ZSB+Ly50ZXJtaW5mbworQUNfTVNHX0NIRUNLSU5HKGlmIH4vLnRlcm1pbmZvIGlzIHdhbnRlZCkKK0FDX0FSR19FTkFCTEUoaG9tZS10ZXJtaW5mbywKKwlbICAtLWRpc2FibGUtaG9tZS10ZXJtaW5mbyBkcm9wIH4vLnRlcm1pbmZvIGZyb20gdGVybWluZm8gc2VhcmNoLXBhdGhdLAorCVt3aXRoX2hvbWVfdGVybWluZm89JGVuYWJsZXZhbF0sCisJW3dpdGhfaG9tZV90ZXJtaW5mbz15ZXNdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9ob21lX3Rlcm1pbmZvKQordGVzdCAiJHdpdGhfaG9tZV90ZXJtaW5mbyIgPSAieWVzIiAmJiBBQ19ERUZJTkUoVVNFX0hPTUVfVEVSTUlORk8pCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2UgcmVzdHJpY3RlZCBlbnZpcm9ubWVudCB3aGVuIHJ1bm5pbmcgYXMgcm9vdCkKK0FDX0FSR19FTkFCTEUocm9vdC1lbnZpcm9uLAorCVsgIC0tZGlzYWJsZS1yb290LWVudmlyb24gIHJlc3RyaWN0IGVudmlyb25tZW50IHdoZW4gcnVubmluZyBhcyByb290XSwKKwlbd2l0aF9yb290X2Vudmlyb249JGVuYWJsZXZhbF0sCisJW3dpdGhfcm9vdF9lbnZpcm9uPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3Jvb3RfZW52aXJvbikKK3Rlc3QgIiR3aXRoX3Jvb3RfZW52aXJvbiIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9ST09UX0VOVklST04pCisKKyMjIyAgIFVzZSBvcHRpb24gLS1lbmFibGUtc3ltbGlua3MgdG8gbWFrZSB0aWMgdXNlIHN5bWxpbmtzLCBub3QgaGFyZCBsaW5rcworIyMjICAgdG8gcmVkdWNlIHN0b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciB0aGUgdGVybWluZm8gZGF0YWJhc2UuCitDRl9MSU5LX0ZVTkNTCisKK3dpdGhfbGlua3M9bm8KK3dpdGhfc3ltbGlua3M9bm8KKworIyBzb2Z0IGxpbmtzIChzeW1ib2xpYyBsaW5rcykgYXJlIHVzZWZ1bCBmb3Igc29tZSBzeXN0ZW1zIHdoZXJlIGhhcmQgbGlua3MgZG8KKyMgbm90IHdvcmssIG9yIHRvIG1ha2UgaXQgc2ltcGxlciB0byBjb3B5IHRlcm1pbmZvIHRyZWVzIGFyb3VuZC4KK2lmIHRlc3QgIiRhY19jdl9mdW5jX3N5bWxpbmsiID0geWVzIDsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhpZiB0aWMgc2hvdWxkIHVzZSBzeW1ib2xpYyBsaW5rcykKKyAgICBBQ19BUkdfRU5BQkxFKHN5bWxpbmtzLAorCVsgIC0tZW5hYmxlLXN5bWxpbmtzICAgICAgIG1ha2UgdGljIHVzZSBzeW1ib2xpYyBsaW5rcyBub3QgaGFyZCBsaW5rc10sCisJW3dpdGhfc3ltbGlua3M9JGVuYWJsZXZhbF0sCisJW3dpdGhfc3ltbGlua3M9bm9dKQorICAgIEFDX01TR19SRVNVTFQoJHdpdGhfc3ltbGlua3MpCitmaQorCisjIElmIHdlIGhhdmUgaGFyZCBsaW5rcyBhbmQgZGlkIG5vdCBjaG9vc2UgdG8gdXNlIHNvZnQgbGlua3MgaW5zdGVhZCwgdGhlcmUgaXMKKyMgbm8gcmVhc29uIHRvIG1ha2UgdGhpcyBjaG9pY2Ugb3B0aW9uYWwgLSB1c2UgdGhlIGhhcmQgbGlua3MuCitpZiB0ZXN0ICIkd2l0aF9zeW1saW5rcyIgPSBubyA7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgdGljIHNob3VsZCB1c2UgaGFyZCBsaW5rcykKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19saW5rIiA9IHllcyA7IHRoZW4KKwl3aXRoX2xpbmtzPXllcworICAgIGVsc2UKKwl3aXRoX2xpbmtzPW5vCisgICAgZmkKKyAgICBBQ19NU0dfUkVTVUxUKCR3aXRoX2xpbmtzKQorZmkKKwordGVzdCAiJHdpdGhfbGlua3MiID0geWVzICYmIEFDX0RFRklORShVU0VfTElOS1MpCit0ZXN0ICIkd2l0aF9zeW1saW5rcyIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9TWU1MSU5LUykKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1icm9rZW4tbGlua2VyIHRvIGZvcmNlIG9uIHVzZSBvZiBicm9rZW4tbGlua2VyIHN1cHBvcnQKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBicm9rZW4tbGlua2VyIHN1cHBvcnQgY29kZSkKK0FDX0FSR19FTkFCTEUoYnJva2VuX2xpbmtlciwKKwlbICAtLWVuYWJsZS1icm9rZW5fbGlua2VyICBjb21waWxlIHdpdGggYnJva2VuLWxpbmtlciBzdXBwb3J0IGNvZGVdLAorCVt3aXRoX2Jyb2tlbl9saW5rZXI9JGVuYWJsZXZhbF0sCisJW3dpdGhfYnJva2VuX2xpbmtlcj0ke0JST0tFTl9MSU5LRVItbm99XSkKK0FDX01TR19SRVNVTFQoJHdpdGhfYnJva2VuX2xpbmtlcikKKworQlJPS0VOX0xJTktFUj0wCitpZiB0ZXN0ICIkd2l0aF9icm9rZW5fbGlua2VyIiA9IHllcyA7IHRoZW4KKwlBQ19ERUZJTkUoQlJPS0VOX0xJTktFUikKKwlCUk9LRU5fTElOS0VSPTEKK2VsaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gc2hhcmVkIDsgdGhlbgorCWNhc2UgJGNmX2N2X3N5c3RlbV9uYW1lIGluICModmkKKwljeWd3aW4qKQorCQlBQ19ERUZJTkUoQlJPS0VOX0xJTktFUikKKwkJQlJPS0VOX0xJTktFUj0xCisJCUNGX1ZFUkJPU0UoY3lnd2luIGxpbmtlciBpcyBicm9rZW4gYW55d2F5KQorCQk7OworCWVzYWMKK2ZpCitBQ19TVUJTVChCUk9LRU5fTElOS0VSKQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWJzZHBhZCB0byBoYXZlIHRwdXRzIHByb2Nlc3MgQlNELXN0eWxlIHByZWZpeCBwYWRkaW5nCitBQ19NU0dfQ0hFQ0tJTkcoaWYgdHB1dHMgc2hvdWxkIHByb2Nlc3MgQlNELXN0eWxlIHByZWZpeCBwYWRkaW5nKQorQUNfQVJHX0VOQUJMRShic2RwYWQsCisJWyAgLS1lbmFibGUtYnNkcGFkICAgICAgICAgcmVjb2duaXplIEJTRC1zdHlsZSBwcmVmaXggcGFkZGluZ10sCisJW3dpdGhfYnNkcGFkPSRlbmFibGV2YWxdLAorCVt3aXRoX2JzZHBhZD1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2JzZHBhZCkKK3Rlc3QgIiR3aXRoX2JzZHBhZCIgPSB5ZXMgJiYgQUNfREVGSU5FKEJTRF9UUFVUUykKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS13aWRlYyB0byB0dXJuIG9uIHVzZSBvZiB3aWRlLWNoYXJhY3RlciBzdXBwb3J0CitOQ1VSU0VTX0NIX1Q9Y2h0eXBlCitOQ1VSU0VTX0xJQlVURjg9MAorCitORUVEX1dDSEFSX0g9MAorTkNVUlNFU19NQlNUQVRFX1Q9MAorTkNVUlNFU19XQ0hBUl9UPTAKK05DVVJTRVNfV0lOVF9UPTAKKworIyBDaGVjayB0byBkZWZpbmUgX1hPUEVOX1NPVVJDRSAiYXV0b21hdGljYWxseSIKK0NGX1hPUEVOX1NPVVJDRQorCisjIFdvcmsgYXJvdW5kIGJyZWFrYWdlIG9uIE9TIFgKK0NGX1NJR1dJTkNICisKKyMgQ2hlY2tzIGZvciBDT0RFU0VUIHN1cHBvcnQuCitBTV9MQU5HSU5GT19DT0RFU0VUCisKKyMgdXNlIHRoZXNlIHZhcmlhYmxlcyB0byB3b3JrIGFyb3VuZCBhIGRlZmVjdCBpbiBnY2MncyBmaXhpbmNsdWRlcy4KK05DVVJTRVNfT0tfV0NIQVJfVD0KK05DVVJTRVNfT0tfV0lOVF9UPQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgd2lkZS1jaGFyYWN0ZXIgY29kZSkKK0FDX0FSR19FTkFCTEUod2lkZWMsCisJWyAgLS1lbmFibGUtd2lkZWMgICAgICAgICAgY29tcGlsZSB3aXRoIHdpZGUtY2hhci9VVEYtOCBjb2RlXSwKKwlbd2l0aF93aWRlYz0kZW5hYmxldmFsXSwKKwlbd2l0aF93aWRlYz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3dpZGVjKQoraWYgdGVzdCAiJHdpdGhfd2lkZWMiID0geWVzIDsgdGhlbgorCUxJQl9TVUZGSVg9Incke0xJQl9TVUZGSVh9IgorCUFDX0RFRklORShVU0VfV0lERUNfU1VQUE9SVCkKKwlDRl9QUkVERUZJTkUoX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCkKKwkjIHdpdGhfb3ZlcndyaXRlPW5vCisJTkNVUlNFU19DSF9UPWNjaGFyX3QKKwlBQ19DSEVDS19GVU5DUyhwdXR3YyBidG93YyB3Y3RvYiBtYnRvd2Mgd2N0b21iIG1ibGVuIG1icmxlbiBtYnJ0b3djIHdjc3J0b21icyBtYnNydG93Y3Mgd2NzdG9tYnMgbWJzdG93Y3MpCisJaWYgdGVzdCAiJGFjX2N2X2Z1bmNfcHV0d2MiICE9IHllcyA7IHRoZW4KKwkJQ0ZfVVRGOF9MSUIKKwkJaWYgdGVzdCAiJGNmX2N2X3V0ZjhfbGliIiAhPSBubyA7IHRoZW4KKwkJCU5DVVJTRVNfTElCVVRGOD0xCisJCWZpCisJZmkKKwlDRl9XQ0hBUl9UWVBFKG1ic3RhdGVfdCwgTkNVUlNFU19NQlNUQVRFX1QpCisJQ0ZfV0NIQVJfVFlQRSh3Y2hhcl90LCAgIE5DVVJTRVNfV0NIQVJfVCwgICBOQ1VSU0VTX09LX1dDSEFSX1QpCisJQ0ZfV0NIQVJfVFlQRSh3aW50X3QsICAgIE5DVVJTRVNfV0lOVF9ULCAgICBOQ1VSU0VTX09LX1dJTlRfVCkKKworCWlmIHRlc3QgIiROQ1VSU0VTX01CU1RBVEVfVCIgIT0gMDsgdGhlbgorCQlBQ19ERUZJTkUoTkVFRF9NQlNUQVRFX1RfREVGKQorCWZpCitmaQorQUNfU1VCU1QoTkNVUlNFU19DSF9UKQorQUNfU1VCU1QoTkNVUlNFU19MSUJVVEY4KQorCitBQ19TVUJTVChORUVEX1dDSEFSX0gpCitBQ19TVUJTVChOQ1VSU0VTX01CU1RBVEVfVCkKK0FDX1NVQlNUKE5DVVJTRVNfV0NIQVJfVCkKK0FDX1NVQlNUKE5DVVJTRVNfV0lOVF9UKQorCitBQ19TVUJTVChOQ1VSU0VTX09LX1dDSEFSX1QpCitBQ19TVUJTVChOQ1VSU0VTX09LX1dJTlRfVCkKKworIyMjICAgdXNlIG9wdGlvbiAtLWRpc2FibGUtbHA2NCB0byBhbGxvdyBsb25nIGNodHlwZQorY2FzZSAkY2ZfY3ZfYWJpX3ZlcnNpb24gaW4KK1tbMzQ1XV0qKQorCWRlZmF1bHRfd2l0aF9scDY0PW5vCisJOzsKKyopCisJZGVmYXVsdF93aXRoX2xwNjQ9eWVzCisJOzsKK2VzYWMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gZW5hYmxlIF9MUDY0IGRlZmluaXRpb24gaW4gY3Vyc2VzLmgpCitBQ19BUkdfRU5BQkxFKGxwNjQsCisJWyAgLS1kaXNhYmxlLWxwNjQgICAgICAgICAgYWxsb3cgY2h0eXBlIHRvIGJlIGxvbmcgKGlnbm9yZSBfTFA2NCldLAorCVt3aXRoX2xwNjQ9JGVuYWJsZXZhbF0sCisJW3dpdGhfbHA2ND0kZGVmYXVsdF93aXRoX2xwNjRdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9scDY0KQorCitpZiB0ZXN0ICIkd2l0aF9scDY0IiA9IHllcyA7IHRoZW4KKwljZl9jdl9lbmFibGVfbHA2ND0xCitlbHNlCisJY2ZfY3ZfZW5hYmxlX2xwNjQ9MAorZmkKK0FDX1NVQlNUKGNmX2N2X2VuYWJsZV9scDY0KQorCitDRl9MQVJHRUZJTEUKKworIyMjICAgdXNlIG9wdGlvbiAtLWRpc2FibGUtdHBhcm0tdmFyYXJncyB0byBtYWtlIHRwYXJtKCkgY29uZm9ybSB0byBYL09wZW4KK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0cGFybSBub3QgdG8gdXNlIFgvT3BlbiBmaXhlZC1wYXJhbWV0ZXIgbGlzdCkKK0FDX0FSR19FTkFCTEUodHBhcm0tdmFyYXJncywKKwlbICAtLWRpc2FibGUtdHBhcm0tdmFyYXJncyBjb21waWxlIHRwYXJtKCkgd2l0aG91dCB2YXJhcmdzIGludGVyZmFjZV0sCisJW3dpdGhfdHBhcm1fdmFyYXJncz0kZW5hYmxldmFsXSwKKwlbd2l0aF90cGFybV92YXJhcmdzPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3RwYXJtX3ZhcmFyZ3MpCitOQ1VSU0VTX1RQQVJNX1ZBUkFSR1M9MAordGVzdCAiJHdpdGhfdHBhcm1fdmFyYXJncyIgPSB5ZXMgJiYgTkNVUlNFU19UUEFSTV9WQVJBUkdTPTEKK0FDX1NVQlNUKE5DVVJTRVNfVFBBUk1fVkFSQVJHUykKKworIyMjICAgdXNlIG9wdGlvbiAtLWRpc2FibGUtdGljLWRlcGVuZHMgdG8gbWFrZSBsaWJ0aWMgbm90IGV4cGxpY2l0bHkgZGVwZW5kIG9uIG5jdXJzZXMvbmN1cnNlc3cKK2lmIHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0gbm8gOyB0aGVuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdGljIGxpYnJhcnkgdG8gdXNlIGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gbmN1cnNlcyRMSUJfU1VGRklYIGxpYnJhcnkpCitBQ19BUkdfRU5BQkxFKHRpYy1kZXBlbmRzLAorCVsgIC0tZGlzYWJsZS10aWMtZGVwZW5kcyAgIGxpbmsgdGljIGxpYnJhcnkgd2l0aG91dCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIG5jdXJzZXMgbGlicmFyeV0sCisJW3dpdGhfdGljX2RlcGVuZHM9JGVuYWJsZXZhbF0sCisJW3dpdGhfdGljX2RlcGVuZHM9eWVzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfdGljX2RlcGVuZHMpCitlbHNlCisJd2l0aF90aWNfZGVwZW5kcz1ubworZmkKKworIyMjICAgdXNlIG9wdGlvbiAtLXdpdGgtYm9vbCB0byBvdmVycmlkZSBib29sJ3MgdHlwZQorQUNfTVNHX0NIRUNLSU5HKGZvciB0eXBlIG9mIGJvb2wpCitBQ19BUkdfV0lUSChib29sLAorCVsgIC0td2l0aC1ib29sPVRZUEUgICAgICAgIG92ZXJyaWRlIGZhbGxiYWNrIHR5cGUgb2YgYm9vbCB2YXJpYWJsZV0sCisJW05DVVJTRVNfQk9PTD0iJHdpdGh2YWwiXSwKKwlbTkNVUlNFU19CT09MPWF1dG9dKQorQUNfTVNHX1JFU1VMVCgkTkNVUlNFU19CT09MKQorQUNfU1VCU1QoTkNVUlNFU19CT09MKQorCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGFsdGVybmF0ZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgZmlsZSkKK0FDX0FSR19XSVRIKGNhcHMsCisJWyAgLS13aXRoLWNhcHM9YWx0ICAgICAgICAgY29tcGlsZSB3aXRoIGFsdGVybmF0ZSBDYXBzIGZpbGVdLAorCVtURVJNSU5GT19DQVBTPUNhcHMuJHdpdGh2YWxdLAorCVtURVJNSU5GT19DQVBTPUNhcHNdKQordGVzdCAtZiAiJHtzcmNkaXJ9L2luY2x1ZGUvJHtURVJNSU5GT19DQVBTfSIgfHwgVEVSTUlORk9fQ0FQUz1DYXBzCitBQ19NU0dfUkVTVUxUKCRURVJNSU5GT19DQVBTKQorQUNfU1VCU1QoVEVSTUlORk9fQ0FQUykKKworIyMjICAgdXNlIG9wdGlvbiAtLXdpdGgtY2h0eXBlIHRvIG92ZXJyaWRlIGNodHlwZSdzIHR5cGUKK0FDX01TR19DSEVDS0lORyhmb3IgdHlwZSBvZiBjaHR5cGUpCitBQ19BUkdfV0lUSChjaHR5cGUsCisJWyAgLS13aXRoLWNodHlwZT1UWVBFICAgICAgb3ZlcnJpZGUgdHlwZSBvZiBjaHR5cGVdLAorCVtOQ1VSU0VTX0NIVFlQRT0iJHdpdGh2YWwiXSwKKwlbTkNVUlNFU19DSFRZUEU9YXV0b10pCitBQ19NU0dfUkVTVUxUKCROQ1VSU0VTX0NIVFlQRSkKKworIyMjICAgdXNlIG9wdGlvbiAtLXdpdGgtb3NwZWVkIHRvIG92ZXJyaWRlIG9zcGVlZCdzIHR5cGUKK0FDX01TR19DSEVDS0lORyhmb3IgdHlwZSBvZiBvc3BlZWQpCitBQ19BUkdfV0lUSChvc3BlZWQsCisJWyAgLS13aXRoLW9zcGVlZD1UWVBFICAgICAgb3ZlcnJpZGUgdHlwZSBvZiBvc3BlZWQgdmFyaWFibGVdLAorCVtOQ1VSU0VTX09TUEVFRD0iJHdpdGh2YWwiXSwKKwlbTkNVUlNFU19PU1BFRUQ9c2hvcnRdKQorQUNfTVNHX1JFU1VMVCgkTkNVUlNFU19PU1BFRUQpCitBQ19TVUJTVChOQ1VSU0VTX09TUEVFRCkKKworIyMjICAgdXNlIG9wdGlvbiAtLXdpdGgtbW1hc2stdCB0byBvdmVycmlkZSBtbWFza190J3MgdHlwZQorQUNfTVNHX0NIRUNLSU5HKGZvciB0eXBlIG9mIG1tYXNrX3QpCitBQ19BUkdfV0lUSChtbWFzay10LAorCVsgIC0td2l0aC1tbWFzay10PVRZUEUgICAgIG92ZXJyaWRlIHR5cGUgb2YgbW1hc2tfdF0sCisJW05DVVJTRVNfTU1BU0tfVD0iJHdpdGh2YWwiXSwKKwlbTkNVUlNFU19NTUFTS19UPWF1dG9dKQorQUNfTVNHX1JFU1VMVCgkTkNVUlNFU19NTUFTS19UKQorCisjIyMgRW5hYmxlIGNvbXBpbGluZy1pbiByY3MgaWQncworQUNfTVNHX0NIRUNLSU5HKGlmIFJDUyBpZGVudGlmaWVycyBzaG91bGQgYmUgY29tcGlsZWQtaW4pCitBQ19BUkdfV0lUSChyY3MtaWRzLAorCVsgIC0td2l0aC1yY3MtaWRzICAgICAgICAgIGNvbXBpbGUtaW4gUkNTIGlkZW50aWZpZXJzXSwKKwlbd2l0aF9yY3NfaWRzPSR3aXRodmFsXSwKKwlbd2l0aF9yY3NfaWRzPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfcmNzX2lkcykKK3Rlc3QgIiR3aXRoX3Jjc19pZHMiID0geWVzICYmIEFDX0RFRklORShVU0VfUkNTX0lEUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfTUFOX1BBR0VTKFsgY2FwdG9pbmZvIGNsZWFyIGluZm9jbXAgaW5mb3RvY2FwIHRpYyB0b2UgdHB1dCBdKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitDRl9IRUxQX01FU1NBR0UoRXh0ZW5zaW9uczopCisKKyMjIyBOb3RlIHRoYXQgc29tZSBmdW5jdGlvbnMgKHN1Y2ggYXMgY29uc3QpIGFyZSBub3JtYWxseSBkaXNhYmxlZCBhbnl3YXkuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBmdW5jdGlvbiBleHRlbnNpb25zKQorQUNfQVJHX0VOQUJMRShleHQtZnVuY3MsCisJWyAgLS1kaXNhYmxlLWV4dC1mdW5jcyAgICAgZGlzYWJsZSBmdW5jdGlvbi1leHRlbnNpb25zXSwKKwlbd2l0aF9leHRfZnVuY3M9JGVuYWJsZXZhbF0sCisJW3dpdGhfZXh0X2Z1bmNzPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2V4dF9mdW5jcykKK2lmIHRlc3QgIiR3aXRoX2V4dF9mdW5jcyIgPSB5ZXMgOyB0aGVuCisJTkNVUlNFU19FWFRfRlVOQ1M9MQorCUFDX0RFRklORShIQVZFX0NVUlNFU19WRVJTSU9OKQorCUFDX0RFRklORShIQVZFX0hBU19LRVkpCisJQUNfREVGSU5FKEhBVkVfUkVTSVpFVEVSTSkKKwlBQ19ERUZJTkUoSEFWRV9SRVNJWkVfVEVSTSkKKwlBQ19ERUZJTkUoSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMpCisJQUNfREVGSU5FKEhBVkVfV1JFU0laRSkKKwlBQ19ERUZJTkUoTkNVUlNFU19FWFRfRlVOQ1MpCitlbHNlCisJTkNVUlNFU19FWFRfRlVOQ1M9MAorZmkKK0FDX1NVQlNUKE5DVVJTRVNfRVhUX0ZVTkNTKQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWNvbnN0IHRvIHR1cm4gb24gdXNlIG9mIGNvbnN0IGJleW9uZCB0aGF0IGluIFhTSS4KK0FDX01TR19DSEVDS0lORyhmb3IgZXh0ZW5kZWQgdXNlIG9mIGNvbnN0IGtleXdvcmQpCitBQ19BUkdfRU5BQkxFKGNvbnN0LAorCVsgIC0tZW5hYmxlLWNvbnN0ICAgICAgICAgIGNvbXBpbGUgd2l0aCBleHRyYS9ub24tc3RhbmRhcmQgY29uc3RdLAorCVt3aXRoX2V4dF9jb25zdD0kZW5hYmxldmFsXSwKKwlbd2l0aF9leHRfY29uc3Q9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9leHRfY29uc3QpCitOQ1VSU0VTX0NPTlNUPScvKm5vdGhpbmcqLycKK2lmIHRlc3QgIiR3aXRoX2V4dF9jb25zdCIgPSB5ZXMgOyB0aGVuCisJTkNVUlNFU19DT05TVD1jb25zdAorZmkKK0FDX1NVQlNUKE5DVVJTRVNfQ09OU1QpCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtZXh0LWNvbG9ycyB0byB0dXJuIG9uIHVzZSBvZiBjb2xvcnMgYmV5b25kIDE2LgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIHVzZSBleHRlbmRlZCBjb2xvcnMpCitBQ19BUkdfRU5BQkxFKGV4dC1jb2xvcnMsCisJWyAgLS1lbmFibGUtZXh0LWNvbG9ycyAgICAgY29tcGlsZSBmb3IgMjU2LWNvbG9yIHN1cHBvcnRdLAorCVt3aXRoX2V4dF9jb2xvcnM9JGVuYWJsZXZhbF0sCisJW3dpdGhfZXh0X2NvbG9ycz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2V4dF9jb2xvcnMpCitOQ1VSU0VTX0VYVF9DT0xPUlM9MAoraWYgdGVzdCAiJHdpdGhfZXh0X2NvbG9ycyIgPSB5ZXMgOyB0aGVuCisJaWYgdGVzdCAiJHdpdGhfd2lkZWMiICE9IHllcyA7IHRoZW4KKwkJQUNfTVNHX0VSUk9SKFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB3aWRlLWNoYXJhY3RlciBsaWJyYXJ5KQorCWVsc2UKKwkJIyBjYW5ub3QgYmUgQUJJIDUgc2luY2UgaXQgY2hhbmdlcyBzaXplb2YoY2NoYXJfdCkKKwkJQ0ZfTkNVUlNFU19BQklfNgorCWZpCisJTkNVUlNFU19FWFRfQ09MT1JTPTEKKwlBQ19ERUZJTkUoTkNVUlNFU19FWFRfQ09MT1JTKQorZmkKK0FDX1NVQlNUKE5DVVJTRVNfRVhUX0NPTE9SUykKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1leHQtbW91c2UgdG8gbW9kaWZ5IGNvZGluZyB0byBzdXBwb3J0IDUtYnV0dG9uIG1pY2UKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2UgZXh0ZW5kZWQgbW91c2UgZW5jb2RpbmcpCitBQ19BUkdfRU5BQkxFKGV4dC1tb3VzZSwKKwlbICAtLWVuYWJsZS1leHQtbW91c2UgICAgICBjb21waWxlIGZvciBleHRlbmRlZCBtb3VzZS1lbmNvZGluZ10sCisJW3dpdGhfZXh0X21vdXNlPSRlbmFibGV2YWxdLAorCVt3aXRoX2V4dF9tb3VzZT1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2V4dF9tb3VzZSkKK05DVVJTRVNfTU9VU0VfVkVSU0lPTj0xCitpZiB0ZXN0ICIkd2l0aF9leHRfbW91c2UiID0geWVzIDsgdGhlbgorCU5DVVJTRVNfTU9VU0VfVkVSU0lPTj0yCisJQ0ZfTkNVUlNFU19BQklfNgorZmkKK0FDX1NVQlNUKE5DVVJTRVNfTU9VU0VfVkVSU0lPTikKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IFwkTkNVUlNFU19OT19QQURESU5HIGNvZGUpCitBQ19BUkdfRU5BQkxFKG5vLXBhZGRpbmcsCisJWyAgLS1lbmFibGUtbm8tcGFkZGluZyAgICAgY29tcGlsZSB3aXRoICROQ1VSU0VTX05PX1BBRERJTkcgY29kZV0sCisJW3dpdGhfbm9fcGFkZGluZz0kZW5hYmxldmFsXSwKKwlbd2l0aF9ub19wYWRkaW5nPSR3aXRoX2V4dF9mdW5jc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX25vX3BhZGRpbmcpCit0ZXN0ICIkd2l0aF9ub19wYWRkaW5nIiA9IHllcyAmJiBBQ19ERUZJTkUoTkNVUlNFU19OT19QQURESU5HKQorCitBQ19DSEVDS19TSVpFT0YoW3NpZ25lZCBjaGFyXSwgMCkKK2lmIHRlc3QgIiRhY19jdl9zaXplb2Zfc2lnbmVkX2NoYXIiID0gMSA7IHRoZW4KKwlOQ1VSU0VTX1NCT09MPSJzaWduZWQgY2hhciIKK2Vsc2UKKwlOQ1VSU0VTX1NCT09MPSJjaGFyIgorZmkKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byB1c2Ugc2lnbmVkIEJvb2xlYW4gYXJyYXkgaW4gdGVybS5oKQorQUNfQVJHX0VOQUJMRShzaWduZWQtY2hhciwKKwlbICAtLWVuYWJsZS1zaWduZWQtY2hhciAgICBjb21waWxlIHVzaW5nIHNpZ25lZCBCb29sZWFuJ3MgaW4gdGVybS5oXSwKKwlbd2l0aF9zaWduZWRfY2hhcj0kZW5hYmxldmFsXSwKKwlbd2l0aF9zaWduZWRfY2hhcj1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3NpZ25lZF9jaGFyKQordGVzdCAiJHdpdGhfc2lnbmVkX2NoYXIiICE9IHllcyAmJiBOQ1VSU0VTX1NCT09MPSJjaGFyIgorQUNfU1VCU1QoTkNVUlNFU19TQk9PTCkKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1zaWd3aW5jaCB0byB0dXJuIG9uIHVzZSBvZiBTSUdXSU5DSCBsb2dpYworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IFNJR1dJTkNIIGhhbmRsZXIpCitBQ19BUkdfRU5BQkxFKHNpZ3dpbmNoLAorCVsgIC0tZW5hYmxlLXNpZ3dpbmNoICAgICAgIGNvbXBpbGUgd2l0aCBTSUdXSU5DSCBoYW5kbGVyXSwKKwlbd2l0aF9zaWd3aW5jaD0kZW5hYmxldmFsXSwKKwlbd2l0aF9zaWd3aW5jaD0kd2l0aF9leHRfZnVuY3NdKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9zaWd3aW5jaCkKK3Rlc3QgIiR3aXRoX3NpZ3dpbmNoIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX1NJR1dJTkNIKQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLXRjYXAtbmFtZXMgdG8gYWxsb3cgdXNlciB0byBkZWZpbmUgbmV3IGNhcGFiaWxpdGllcworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHVzZXItZGVmaW5hYmxlIHRlcm1pbmFsIGNhcGFiaWxpdGllcyBsaWtlIHRlcm1jYXApCitBQ19BUkdfRU5BQkxFKHRjYXAtbmFtZXMsCisJWyAgLS1lbmFibGUtdGNhcC1uYW1lcyAgICAgY29tcGlsZSB3aXRoIHVzZXItZGVmaW5hYmxlIHRlcm1pbmFsIGNhcGFiaWxpdGllc10sCisJW3dpdGhfdGNhcF9uYW1lcz0kZW5hYmxldmFsXSwKKwlbd2l0aF90Y2FwX25hbWVzPSR3aXRoX2V4dF9mdW5jc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3RjYXBfbmFtZXMpCitOQ1VSU0VTX1hOQU1FUz0wCit0ZXN0ICIkd2l0aF90Y2FwX25hbWVzIiA9IHllcyAmJiBOQ1VSU0VTX1hOQU1FUz0xCitBQ19TVUJTVChOQ1VSU0VTX1hOQU1FUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGVzZSBvcHRpb25zIGFyZSByZWxhdGl2ZWx5IHNhZmUgdG8gZXhwZXJpbWVudCB3aXRoLgorQ0ZfSEVMUF9NRVNTQUdFKERldmVsb3BtZW50IENvZGU6KQorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IGFsbCBkZXZlbG9wbWVudCBjb2RlKQorQUNfQVJHX1dJVEgoZGV2ZWxvcCwKKwlbICAtLXdpdGhvdXQtZGV2ZWxvcCAgICAgICBkaXNhYmxlIGRldmVsb3BtZW50IG9wdGlvbnNdLAorCVt3aXRoX2RldmVsb3A9JHdpdGh2YWxdLAorCVt3aXRoX2RldmVsb3A9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9kZXZlbG9wKQorCisjIyMgICB1c2Ugb3B0aW9uIC0tZW5hYmxlLWhhcmQtdGFicyB0byB0dXJuIG9uIHVzZSBvZiBoYXJkLXRhYnMgb3B0aW1pemUKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBoYXJkLXRhYnMgY29kZSkKK0FDX0FSR19FTkFCTEUoaGFyZC10YWJzLAorCVsgIC0tZW5hYmxlLWhhcmQtdGFicyAgICAgIGNvbXBpbGUgd2l0aCBoYXJkLXRhYnMgY29kZV0sLAorCVtlbmFibGVfaGFyZF90YWJzPSR3aXRoX2RldmVsb3BdKQorQUNfTVNHX1JFU1VMVCgkZW5hYmxlX2hhcmRfdGFicykKK3Rlc3QgIiRlbmFibGVfaGFyZF90YWJzIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX0hBUkRfVEFCUykKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS14bWMtZ2xpdGNoIHRvIHR1cm4gb24gdXNlIG9mIG1hZ2ljLWNvb2tpZSBvcHRpbWl6ZQorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IGxpbWl0ZWQgc3VwcG9ydCBmb3IgeG1jKQorQUNfQVJHX0VOQUJMRSh4bWMtZ2xpdGNoLAorCVsgIC0tZW5hYmxlLXhtYy1nbGl0Y2ggICAgIGNvbXBpbGUgd2l0aCBzdXBwb3J0IGZvciB4bWMgKG1hZ2ljLWNvb2tpZSldLCwKKwlbZW5hYmxlX3htY19nbGl0Y2g9JHdpdGhfZGV2ZWxvcF0pCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfeG1jX2dsaXRjaCkKK3Rlc3QgIiRlbmFibGVfeG1jX2dsaXRjaCIgPSB5ZXMgJiYgQUNfREVGSU5FKFVTRV9YTUNfU1VQUE9SVCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGVzZSBhcmUganVzdCBleHBlcmltZW50YWwsIHByb2JhYmx5IHNob3VsZCBub3QgYmUgaW4gYSBwYWNrYWdlOgorQ0ZfSEVMUF9NRVNTQUdFKEV4cGVyaW1lbnRhbCBDb2RlOikKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSBkbyBub3Qgd2FudCB0byBhc3N1bWUgY29sb3JzIGFyZSB3aGl0ZS1vbi1ibGFjaykKK0FDX0FSR19FTkFCTEUoYXNzdW1lZC1jb2xvciwKKwlbICAtLWRpc2FibGUtYXNzdW1lZC1jb2xvciBkbyBub3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IGRlZmF1bHQtY29sb3JzXSwKKwlbd2l0aF9hc3N1bWVkX2NvbG9yPSRlbmFibGV2YWxdLAorCVt3aXRoX2Fzc3VtZWRfY29sb3I9eWVzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfYXNzdW1lZF9jb2xvcikKK3Rlc3QgIiR3aXRoX2Fzc3VtZWRfY29sb3IiID0geWVzICYmIEFDX0RFRklORShVU0VfQVNTVU1FRF9DT0xPUikKKworIyMjICAgdXNlIG9wdGlvbiAtLWVuYWJsZS1oYXNobWFwIHRvIHR1cm4gb24gdXNlIG9mIGhhc2htYXAgc2Nyb2xsaW5nIGxvZ2ljCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgaGFzaG1hcCBzY3JvbGxpbmctb3B0aW1pemF0aW9uIGNvZGUpCitBQ19BUkdfRU5BQkxFKGhhc2htYXAsCisJWyAgLS1kaXNhYmxlLWhhc2htYXAgICAgICAgY29tcGlsZSB3aXRob3V0IGhhc2htYXAgc2Nyb2xsaW5nLW9wdGltaXphdGlvbl0sCisJW3dpdGhfaGFzaG1hcD0kZW5hYmxldmFsXSwKKwlbd2l0aF9oYXNobWFwPXllc10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2hhc2htYXApCit0ZXN0ICIkd2l0aF9oYXNobWFwIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX0hBU0hNQVApCisKKyMjIyAgIHVzZSBvcHRpb24gLS1lbmFibGUtY29sb3JmZ2JnIHRvIHR1cm4gb24gdXNlIG9mICRDT0xPUkZHQkcgZW52aXJvbm1lbnQKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBjb2xvcmZnYmcgY29kZSkKK0FDX0FSR19FTkFCTEUoY29sb3JmZ2JnLAorCVsgIC0tZW5hYmxlLWNvbG9yZmdiZyAgICAgIGNvbXBpbGUgd2l0aCAkQ09MT1JGR0JHIGNvZGVdLAorCVt3aXRoX2NvbG9yZmdiZz0kZW5hYmxldmFsXSwKKwlbd2l0aF9jb2xvcmZnYmc9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9jb2xvcmZnYmcpCit0ZXN0ICIkd2l0aF9jb2xvcmZnYmciID0geWVzICYmIEFDX0RFRklORShVU0VfQ09MT1JGR0JHKQorCisjIFRoaXMgaXMgc3RpbGwgZXhwZXJpbWVudGFsICgyMDA4MDMyOSksIGJ1dCBzaG91bGQgdWx0aW1hdGVseSBiZSBtb3ZlZCB0bworIyB0aGUgc2NyaXB0LWJsb2NrIC0td2l0aC1ub3JtYWwsIGV0Yy4KK0NGX1dJVEhfUFRIUkVBRAorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gdXNlIHdlYWstc3ltYm9scyBmb3IgcHRocmVhZHMpCitBQ19BUkdfRU5BQkxFKHdlYWstc3ltYm9scywKKyAgICBbICAtLWVuYWJsZS13ZWFrLXN5bWJvbHMgICBlbmFibGUgd2Vhay1zeW1ib2xzIGZvciBwdGhyZWFkc10sCisgICAgW3VzZV93ZWFrX3N5bWJvbHM9JHdpdGh2YWxdLAorICAgIFt1c2Vfd2Vha19zeW1ib2xzPW5vXSkKK0FDX01TR19SRVNVTFQoJHVzZV93ZWFrX3N5bWJvbHMpCitpZiB0ZXN0ICIkdXNlX3dlYWtfc3ltYm9scyIgPSB5ZXMgOyB0aGVuCisgICAgQ0ZfV0VBS19TWU1CT0xTCitlbHNlCisgICAgY2ZfY3Zfd2Vha19zeW1ib2xzPW5vCitmaQorCitpZiB0ZXN0ICRjZl9jdl93ZWFrX3N5bWJvbHMgPSB5ZXMgOyB0aGVuCisgICAgQUNfREVGSU5FKFVTRV9XRUFLX1NZTUJPTFMpCitmaQorCitQVEhSRUFEPQoraWYgdGVzdCAiJHdpdGhfcHRocmVhZCIgPSAieWVzIiA7IHRoZW4KKyAgICBBQ19ERUZJTkUoVVNFX1BUSFJFQURTKQorICAgIGVuYWJsZV9yZWVudHJhbnQ9eWVzCisgICAgaWYgdGVzdCAkY2ZfY3Zfd2Vha19zeW1ib2xzID0geWVzIDsgdGhlbgorICAgICAgICBQVEhSRUFEPS1scHRocmVhZAorICAgIGZpCitmaQorQUNfU1VCU1QoUFRIUkVBRCkKKworIyBSZWVudHJhbnQgY29kZSBoYXMgdG8gYmUgb3BhcXVlOyB0aGVyZSdzIGxpdHRsZSBhZHZhbnRhZ2UgdG8gbWFraW5nIG5jdXJzZXMKKyMgb3BhcXVlIG91dHNpZGUgb2YgdGhhdCwgc28gdGhlcmUgaXMgbm8gLS1lbmFibGUtb3BhcXVlIG9wdGlvbi4gIFdlIGNhbiB1c2UKKyMgdGhpcyBvcHRpb24gd2l0aG91dCAtLXdpdGgtcHRocmVhZHMsIGJ1dCB0aGlzIHdpbGwgYmUgYWx3YXlzIHNldCBmb3IKKyMgcHRocmVhZHMuCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgZXhwZXJpbWVudGFsIHJlZW50cmFudCBjb2RlKQorQUNfQVJHX0VOQUJMRShyZWVudHJhbnQsCisJWyAgLS1lbmFibGUtcmVlbnRyYW50ICAgICAgY29tcGlsZSB3aXRoIGV4cGVyaW1lbnRhbCByZWVudHJhbnQgY29kZV0sCisJW3dpdGhfcmVlbnRyYW50PSRlbmFibGV2YWxdLAorCVt3aXRoX3JlZW50cmFudD1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3JlZW50cmFudCkKK2lmIHRlc3QgIiR3aXRoX3JlZW50cmFudCIgPSB5ZXMgOyB0aGVuCisJY2ZfY3ZfZW5hYmxlX3JlZW50cmFudD0xCisJY2ZfY3ZfZW5hYmxlX29wYXF1ZT0iTkNVUlNFU19JTlRFUk5BTFMiCisJTkNVUlNFU19PUEFRVUU9MQorCU5DVVJTRVNfU0laRV9UPWludAorICAgIGlmIHRlc3QgJGNmX2N2X3dlYWtfc3ltYm9scyA9IHllcyA7IHRoZW4KKyAgICAgICAgQ0ZfUkVNT1ZFX0xJQihMSUJTLCRMSUJTLHB0aHJlYWQpCisgICAgZWxzZQorICAgICAgICBMSUJfU1VGRklYPSJ0JHtMSUJfU1VGRklYfSIKKyAgICBmaQorCUFDX0RFRklORShVU0VfUkVFTlRSQU5UKQorCUNGX05DVVJTRVNfQUJJXzYKK2Vsc2UKKwljZl9jdl9lbmFibGVfcmVlbnRyYW50PTAKKwljZl9jdl9lbmFibGVfb3BhcXVlPSJOQ1VSU0VTX09QQVFVRSIKKwlOQ1VSU0VTX09QQVFVRT0wCisJTkNVUlNFU19TSVpFX1Q9c2hvcnQKK2ZpCitBQ19TVUJTVChjZl9jdl9lbmFibGVfcmVlbnRyYW50KQorQUNfU1VCU1QoY2ZfY3ZfZW5hYmxlX29wYXF1ZSkKK0FDX1NVQlNUKE5DVVJTRVNfT1BBUVVFKQorQUNfU1VCU1QoTkNVUlNFU19TSVpFX1QpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgc2FmZS1zcHJpbnRmIGNvZGUpCitBQ19BUkdfRU5BQkxFKHNhZmUtc3ByaW50ZiwKKwlbICAtLWVuYWJsZS1zYWZlLXNwcmludGYgICBjb21waWxlIHdpdGggZXhwZXJpbWVudGFsIHNhZmUtc3ByaW50ZiBjb2RlXSwKKwlbd2l0aF9zYWZlX3NwcmludGY9JGVuYWJsZXZhbF0sCisJW3dpdGhfc2FmZV9zcHJpbnRmPW5vXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfc2FmZV9zcHJpbnRmKQordGVzdCAiJHdpdGhfc2FmZV9zcHJpbnRmIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX1NBRkVfU1BSSU5URikKKworIyMjICAgdXNlIG9wdGlvbiAtLWRpc2FibGUtc2Nyb2xsLWhpbnRzIHRvIHR1cm4gb2ZmIHVzZSBvZiBzY3JvbGwtaGludHMgc2Nyb2xsaW5nIGxvZ2ljCisjIHdoZW4gaGFzaG1hcCBpcyB1c2VkIHNjcm9sbCBoaW50cyBhcmUgdXNlbGVzcworaWYgdGVzdCAiJHdpdGhfaGFzaG1hcCIgPSBubyA7IHRoZW4KK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBleHBlcmltZW50IHdpdGhvdXQgc2Nyb2xsaW5nLWhpbnRzIGNvZGUpCitBQ19BUkdfRU5BQkxFKHNjcm9sbC1oaW50cywKKwlbICAtLWRpc2FibGUtc2Nyb2xsLWhpbnRzICBjb21waWxlIHdpdGhvdXQgc2Nyb2xsLWhpbnRzIGNvZGVdLAorCVt3aXRoX3Njcm9sbF9oaW50cz0kZW5hYmxldmFsXSwKKwlbd2l0aF9zY3JvbGxfaGludHM9eWVzXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfc2Nyb2xsX2hpbnRzKQordGVzdCAiJHdpdGhfc2Nyb2xsX2hpbnRzIiA9IHllcyAmJiBBQ19ERUZJTkUoVVNFX1NDUk9MTF9ISU5UUykKK2ZpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCBleHBlcmltZW50YWwgd2dldGNoLWV2ZW50cyBjb2RlKQorQUNfQVJHX0VOQUJMRSh3Z2V0Y2gtZXZlbnRzLAorCVsgIC0tZW5hYmxlLXdnZXRjaC1ldmVudHMgIGNvbXBpbGUgd2l0aCBleHBlcmltZW50YWwgd2dldGNoLWV2ZW50cyBjb2RlXSwKKwlbd2l0aF93Z2V0Y2hfZXZlbnRzPSRlbmFibGV2YWxdLAorCVt3aXRoX3dnZXRjaF9ldmVudHM9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF93Z2V0Y2hfZXZlbnRzKQordGVzdCAiJHdpdGhfd2dldGNoX2V2ZW50cyIgPSB5ZXMgJiYgQUNfREVGSU5FKE5DVVJTRVNfV0dFVENIX0VWRU5UUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0ZfSEVMUF9NRVNTQUdFKFRlc3RpbmcvZGV2ZWxvcG1lbnQgT3B0aW9uczopCisKKyMjIwl1c2Ugb3B0aW9uIC0tZGlzYWJsZS1lY2hvIHRvIHN1cHByZXNzIGZ1bGwgZGlzcGxheSBjb21waWxpbmcgY29tbWFuZHMKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGZ1bGwgY29tbWFuZHMgZHVyaW5nIGJ1aWxkKQorQUNfQVJHX0VOQUJMRShlY2hvLAorCVsgIC0tZW5hYmxlLWVjaG8gICAgICAgICAgIGJ1aWxkOiBkaXNwbGF5ICJjb21waWxpbmciIGNvbW1hbmRzIChkZWZhdWx0KV0sCisJW3dpdGhfZWNobz0kZW5hYmxldmFsXSwKKwlbd2l0aF9lY2hvPXllc10pCitpZiB0ZXN0ICIkd2l0aF9lY2hvIiA9IHllczsgdGhlbgorCUVDSE9fTElOSz0KK2Vsc2UKKwlFQ0hPX0xJTks9J0AgZWNobyBsaW5raW5nICRAIC4uLiA7JworCXRlc3QgLW4gIiRMSUJUT09MIiAmJiBMSUJUT09MPSIkTElCVE9PTCAtLXNpbGVudCIKKwl0ZXN0IC1uICIkTElCVE9PTF9DWFgiICYmIExJQlRPT0xfQ1hYPSIkTElCVE9PTF9DWFggLS1zaWxlbnQiCitmaQorQUNfTVNHX1JFU1VMVCgkd2l0aF9lY2hvKQorQUNfU1VCU1QoRUNIT19MSU5LKQorCisjIyMJdXNlIG9wdGlvbiAtLWVuYWJsZS13YXJuaW5ncyB0byB0dXJuIG9uIGFsbCBnY2Mgd2FybmluZ3MKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBzZWUgY29tcGlsZXIgd2FybmluZ3MpCitBQ19BUkdfRU5BQkxFKHdhcm5pbmdzLAorCVsgIC0tZW5hYmxlLXdhcm5pbmdzICAgICAgIGJ1aWxkOiB0dXJuIG9uIEdDQyBjb21waWxlciB3YXJuaW5nc10sCisJW3dpdGhfd2FybmluZ3M9JGVuYWJsZXZhbF0pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3dhcm5pbmdzKQorCitpZiB0ZXN0ICJ4JHdpdGhfd2FybmluZ3MiID0gInh5ZXMiOyB0aGVuCisgCUFEQUZMQUdTPSIkQURBRkxBR1MgLWduYXRnIgorCUNGX0dDQ19XQVJOSU5HUyhXZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IFdleHRyYSBXbm8tdW5rbm93bi1wcmFnbWFzIFdzd2l0Y2gtZW51bSkKKwlpZiB0ZXN0ICIkY2Zfd2l0aF9jeHgiID0geWVzIDsgdGhlbgorCQlDRl9HWFhfV0FSTklOR1MoV25vLXVudXNlZCkKKwlmaQorZmkKK0NGX0dDQ19BVFRSSUJVVEVTCisKKyMjIwl1c2Ugb3B0aW9uIC0tZW5hYmxlLWFzc2VydGlvbnMgdG8gdHVybiBvbiBnZW5lcmF0aW9uIG9mIGFzc2VydGlvbiBjb2RlCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bnRpbWUgYXNzZXJ0aW9ucykKK0FDX0FSR19FTkFCTEUoYXNzZXJ0aW9ucywKKwlbICAtLWVuYWJsZS1hc3NlcnRpb25zICAgICB0ZXN0OiB0dXJuIG9uIGdlbmVyYXRpb24gb2YgYXNzZXJ0aW9uIGNvZGVdLAorCVt3aXRoX2Fzc2VydGlvbnM9JGVuYWJsZXZhbF0sCisJW3dpdGhfYXNzZXJ0aW9ucz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX2Fzc2VydGlvbnMpCitpZiB0ZXN0IC1uICIkR0NDIgordGhlbgorCWlmIHRlc3QgIiR3aXRoX2Fzc2VydGlvbnMiID0gbm8KKwl0aGVuCisJCUFDX0RFRklORShOREVCVUcpCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUROREVCVUciCisJZWxzZQorCQlBREFGTEFHUz0iJEFEQUZMQUdTIC1nbmF0YSIKKwlmaQorZmkKKworIyMjCXVzZSBvcHRpb24gLS1kaXNhYmxlLWxlYWtzIHRvIHN1cHByZXNzICJwZXJtYW5lbnQiIGxlYWtzLCBmb3IgdGVzdGluZworQ0ZfRElTQUJMRV9MRUFLUworQUNfREVGSU5FKEhBVkVfTkNfQUxMT0NfSCkKKworIyMjCXVzZSBvcHRpb24gLS1lbmFibGUtZXhwYW5kZWQgdG8gZ2VuZXJhdGUgY2VydGFpbiBtYWNyb3MgYXMgZnVuY3Rpb25zCitBQ19BUkdfRU5BQkxFKGV4cGFuZGVkLAorCVsgIC0tZW5hYmxlLWV4cGFuZGVkICAgICAgIHRlc3Q6IGdlbmVyYXRlIGZ1bmN0aW9ucyBmb3IgY2VydGFpbiBtYWNyb3NdLAorCVt0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyAmJiBBQ19ERUZJTkUoTkNVUlNFU19FWFBBTkRFRCldKQorCisjIyMJdXNlIG9wdGlvbiAtLWRpc2FibGUtbWFjcm9zIHRvIHN1cHByZXNzIG1hY3JvcyBpbiBmYXZvciBvZiBmdW5jdGlvbnMKK0FDX0FSR19FTkFCTEUobWFjcm9zLAorCVsgIC0tZGlzYWJsZS1tYWNyb3MgICAgICAgIHRlc3Q6IHVzZSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gbWFjcm9zXSwKKwlbdGVzdCAiJGVuYWJsZXZhbCIgPSBubyAmJiBBQ19ERUZJTkUoTkNVUlNFU19OT01BQ1JPUyldKQorCisjIE5vcm1hbGx5IHdlIG9ubHkgYWRkIHRyYWNlKCkgdG8gdGhlIGRlYnVnLWxpYnJhcnkuICBBbGxvdyB0aGlzIHRvIGJlCisjIGV4dGVuZGVkIHRvIGFsbCBtb2RlbHMgb2YgdGhlIG5jdXJzZXMgbGlicmFyeToKK2NmX2FsbF90cmFjZXM9bm8KK2Nhc2UgIiRDRkxBR1MgJENQUEZMQUdTIiBpbgorKi1EVFJBQ0UqKQorCWNmX2FsbF90cmFjZXM9eWVzCisJOzsKK2VzYWMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gYWRkIHRyYWNlIGZlYXR1cmUgdG8gYWxsIG1vZGVscykKK0FDX0FSR19XSVRIKHRyYWNlLAorWyAgLS13aXRoLXRyYWNlICAgICAgICAgICAgdGVzdDogYWRkIHRyYWNlKCkgZnVuY3Rpb24gdG8gYWxsIG1vZGVscyBvZiBuY3Vyc2VzXSwKK1tjZl93aXRoX3RyYWNlPSR3aXRodmFsXSwKK1tjZl93aXRoX3RyYWNlPSRjZl9hbGxfdHJhY2VzXSkKK0FDX01TR19SRVNVTFQoJGNmX3dpdGhfdHJhY2UpCisKK2lmIHRlc3QgIiRjZl93aXRoX3RyYWNlIiA9IHllcyA7IHRoZW4KKwlMSUJfVFJBQ0lORz1hbGwKKwlBREFfVFJBQ0U9VFJVRQorCUNGX0FERF9DRkxBR1MoLURUUkFDRSkKK2Vsc2UKKwlMSUJfVFJBQ0lORz1ERUJVRworCUFEQV9UUkFDRT1GQUxTRQorZmkKKworQUNfU1VCU1QoQURBX1RSQUNFKQorCisjIyMJQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitBQ19DSEVDS19GVU5DKGdldHRpbWVvZmRheSwKKwlBQ19ERUZJTkUoSEFWRV9HRVRUSU1FT0ZEQVkpLFsKKworQUNfQ0hFQ0tfTElCKGJzZCwgZ2V0dGltZW9mZGF5LAorCUFDX0RFRklORShIQVZFX0dFVFRJTUVPRkRBWSkKKwlMSUJTPSIkTElCUyAtbGJzZCIpXSlkbmwgQ0xJWDogYnplcm8sIHNlbGVjdCwgZ2V0dGltZW9mZGF5CisKK0NGX01BVEhfTElCKE1BVEhfTElCLHNpbih4KSkKK0FDX1NVQlNUKE1BVEhfTElCKQorCisjIyMJQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitBQ19TVERDX0hFQURFUlMKK0FDX0hFQURFUl9ESVJFTlQKK0FDX0hFQURFUl9USU1FCitDRl9SRUdFWAorCitkbmwgVGhlc2UgYXJlIHNvbWUgb3RoZXIgcG90ZW50aWFsbHkgbm9ucG9ydGFibGUgaGVhZGVycy4KK0FDX0NIRUNLX0hFQURFUlMoIFwKK2ZjbnRsLmggXAorZ2V0b3B0LmggXAorbGltaXRzLmggXAorbG9jYWxlLmggXAorcG9sbC5oIFwKK3N5cy9ic2R0eXBlcy5oIFwKK3N5cy9pb2N0bC5oIFwKK3N5cy9wYXJhbS5oIFwKK3N5cy9wb2xsLmggXAorc3lzL3NlbGVjdC5oIFwKK3N5cy90aW1lLmggXAorc3lzL3RpbWVzLmggXAordHR5ZW50LmggXAordW5pc3RkLmggXAord2N0eXBlLmggXAorKQorCisjIGNoZWNrIGZvciBJU0MgKHRoaXMgbWF5IGFsc28gZGVmaW5lIF9QT1NJWF9TT1VSQ0UpCisjIE5vdGU6IGV2ZW4gbm9uLVBvc2l4IElTQyBuZWVkcyA8c3lzL2JzZHR5cGVzLmg+IHRvIGRlY2xhcmUgZmRfc2V0CitpZiB0ZXN0ICIkSVNDIiA9IHllcyA7IHRoZW4KKwlBQ19DSEVDS19MSUIoY3Bvc2l4LG1haW4pCisJQUNfQ0hFQ0tfTElCKGluZXQsYnplcm8sTElCUz0iJExJQlMgLWxpbmV0IilkbmwgYWxzbyAnc2VsZWN0KCknCitmaQorCitDRl9TWVNfVElNRV9TRUxFQ1QKKworIyMjCWNoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCitBQ19MQU5HX0MKK0FDX0NfQ09OU1QKK0NGX0NfSU5MSU5FKE5DVVJTRVNfSU5MSU5FLDEyMDApCitDRl9TSUdfQVRPTUlDX1QKKworaWYgdGVzdCAkTkNVUlNFU19DSFRZUEUgPSBhdXRvIDsgdGhlbgorCUNGX1RZUEVPRl9DSFRZUEUKK2Vsc2UKKwljZl9jdl90eXBlb2ZfY2h0eXBlPSROQ1VSU0VTX0NIVFlQRQorZmkKK3Rlc3QgIiRjZl9jdl90eXBlb2ZfY2h0eXBlIiA9IHVuc2lnbmVkICYmIGNmX2N2X3R5cGVvZl9jaHR5cGU9IiIKK0FDX1NVQlNUKGNmX2N2X3R5cGVvZl9jaHR5cGUpCisKK0NGX1VOU0lHTkVEX0xJVEVSQUxTCitjZl9jdl8xVUw9IjEiCit0ZXN0ICIuJGNmX2N2X3Vuc2lnbmVkX2xpdGVyYWxzIiA9IC55ZXMgJiYgY2ZfY3ZfMVVMPSIke2NmX2N2XzFVTH1VIgordGVzdCAiLiRjZl9jdl90eXBlb2ZfY2h0eXBlIiAgICA9IC5sb25nICYmIGNmX2N2XzFVTD0iJHtjZl9jdl8xVUx9TCIKK0FDX1NVQlNUKGNmX2N2XzFVTCkKKworaWYgdGVzdCAkTkNVUlNFU19NTUFTS19UID0gYXV0byA7IHRoZW4KKwljZl9jdl90eXBlb2ZfbW1hc2tfdD1sb25nCitlbHNlCisJY2ZfY3ZfdHlwZW9mX21tYXNrX3Q9JE5DVVJTRVNfTU1BU0tfVAorZmkKK3Rlc3QgIiRjZl9jdl90eXBlb2ZfbW1hc2tfdCIgPSB1bnNpZ25lZCAmJiBjZl9jdl90eXBlb2ZfbW1hc2tfdD0iIgorQUNfU1VCU1QoY2ZfY3ZfdHlwZW9mX21tYXNrX3QpCisKKyMjIwlDaGVja3MgZm9yIGV4dGVybmFsLWRhdGEKK0NGX0VSUk5PCitDRl9MSU5LX0RBVEFPTkxZCisKKyMjIwlDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorQUNfQ0hFQ0tfRlVOQ1MoIFwKK2dldGN3ZCBcCitnZXRlZ2lkIFwKK2dldGV1aWQgXAorZ2V0dHR5bmFtIFwKK2lzc2V0dWdpZCBcCitwb2xsIFwKK3JlbW92ZSBcCitzZWxlY3QgXAorc2V0YnVmIFwKK3NldGJ1ZmZlciBcCitzZXR2YnVmIFwKK3NpZ2FjdGlvbiBcCitzaWd2ZWMgXAorc3RyZHVwIFwKK3N0cnN0ciBcCit0Y2dldHBncnAgXAordGltZXMgXAordnNucHJpbnRmIFwKKykKK2lmIHRlc3QgIiR3aXRoX2dldGNhcCIgPSAieWVzIiA7IHRoZW4KKwlDRl9DR0VURU5UCitmaQorCitDRl9JU0FTQ0lJCitDRl9TVFJVQ1RfU0lHQUNUSU9OCitDRl9GVU5DX05BTk9TTEVFUAorQ0ZfRlVOQ19URVJNSU9TCitDRl9GVU5DX1ZTU0NBTkYKK0NGX01LU1RFTVAKKworIyBzZXR1cCBmb3IgcHJvdG90eXBlIG9mIGZhbGxiYWNrIGZvciB2c3NjYW5mKCkKK0NGX1NVQlNUX0lGKFsiJGNmX2N2X2Z1bmNfdnNzY2FuZiIgPSB2c3NjYW5mXSwgSEFWRV9WU1NDQU5GLCAxLCAwKQorCitkbmwgRklYTUUgKG1heSBuZWVkIHRoaXMpIEFDX1NZU19SRVNUQVJUQUJMRV9TWVNDQUxMUworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgOyB0aGVuCisJQUNfTVNHX1dBUk4oY3Jvc3MgY29tcGlsaW5nOiBhc3N1bWUgc2V0dmJ1ZiBwYXJhbXMgbm90IHJldmVyc2VkKQorZWxzZQorCUFDX0ZVTkNfU0VUVkJVRl9SRVZFUlNFRAorZmkKK0FDX1RZUEVfU0lHTkFMCitDRl9UWVBFX1NJR0FDVElPTgorQ0ZfU0laRUNIQU5HRQorQ0ZfRlVOQ19NRU1NT1ZFCitDRl9GVU5DX1BPTEwKKworIyBzcGVjaWFsIGNoZWNrIGZvciB0ZXN0L2RpdHRvLmMKK0NGX0ZVTkNfT1BFTlBUWQoraWYgdGVzdCAiJGNmX2N2X2Z1bmNfb3BlbnB0eSIgIT0gbm8gOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFVTRV9PUEVOUFRZX0hFQURFUiw8JGNmX2N2X2Z1bmNfb3BlbnB0eT4pCisgICAgQUNfREVGSU5FKFVTRV9YVEVSTV9QVFkpCisgICAgaWYgdGVzdCAiJGNmX2N2X2xpYl91dGlsIiA9IHllcyA7IHRoZW4KKyAgICAgICAgVEVTVF9MSUJTPSItbHV0aWwgJFRFU1RfTElCUyIKKyAgICBmaQorZmkKK0FDX1NVQlNUKFRFU1RfTElCUykKKworaWYgdGVzdCAiJHdpdGhfaGFzaGVkX2RiIiAhPSBubyA7IHRoZW4KKwlBQ19ERUZJTkUoVVNFX0hBU0hFRF9EQikKKwlDRl9IQVNIRURfREIoJHdpdGhfaGFzaGVkX2RiKQorZmkKKworZG5sIFdlJ2xsIGRvIG91ciBvd24gLWcgbGlicmFyaWVzLCB1bmxlc3MgdGhlIHVzZXIncyBvdmVycmlkZGVuIHZpYSAkQ0ZMQUdTCitpZiB0ZXN0IC16ICIkY2ZfdXNlcl9DRkxBR1MiICYmIHRlc3QgIiR3aXRoX25vX2xlYWtzIiA9IG5vIDsgdGhlbgorCUNGX1NUUklQX0dfT1BUKENGTEFHUykKKwlDRl9TVFJJUF9HX09QVChDWFhGTEFHUykKK2ZpCisKKyMgSnVzdCBpbiBjYXNlLCBjaGVjayBpZiB0aGUgQyBjb21waWxlciBoYXMgYSBib29sIHR5cGUuCitDRl9CT09MX0RFQ0woY2ZfY3ZfY2NfYm9vbF90eXBlKQorCisjIENoZWNrIGZvciBDKysgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzIChhbmQgZW5zdXJlIHRoYXQgaXQncyB0aGVyZSEpCitpZiB0ZXN0IC1uICIkQ1hYIiA7IHRoZW4KKwlBQ19MQU5HX0NQTFVTUExVUworCUNGX1NURENQUF9MSUJSQVJZCisJQ0ZfUFJPR19DQ19DX08oQ1hYKQorCisJY2FzZSAkR1hYX1ZFUlNJT04gaW4KKwkxKnwyLlswLTZdKikKKwkJY2ZfY3h4X2xpYnJhcnk9eWVzCisJCTs7CisJKi0yLjcqfDIuNyopCisJCUNGX0dQUF9MSUJSQVJZCisJCTs7CisJKikKKwkJY2ZfY3h4X2xpYnJhcnk9bm8KKwkJOzsKKwllc2FjCisKKwlBQ19DSEVDS19IRUFERVJTKGlvc3RyZWFtIHR5cGVpbmZvKQorCisgICAgaWYgdGVzdCB4IiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iID0geHllcyA7IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKGlmIGlvc3RyZWFtIHVzZXMgc3RkLW5hbWVzcGFjZSkKKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPGlvc3RyZWFtPgordXNpbmcgc3RkOjplbmRsOwordXNpbmcgc3RkOjpjZXJyO10sWworY2VyciA8PCAidGVzdGluZyIgPDwgZW5kbDsKK10sW2NmX2lvc3RyZWFtX25hbWVzcGFjZT15ZXNdLFtjZl9pb3N0cmVhbV9uYW1lc3BhY2U9bm9dKQorICAgICAgICBBQ19NU0dfUkVTVUxUKCRjZl9pb3N0cmVhbV9uYW1lc3BhY2UpCisgICAgICAgIGlmIHRlc3QgIiRjZl9pb3N0cmVhbV9uYW1lc3BhY2UiID0geWVzIDsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FKElPU1RSRUFNX05BTUVTUEFDRSkKKyAgICAgICAgZmkKKyAgICBmaQorCisJQ0ZfQk9PTF9ERUNMCisJQ0ZfQk9PTF9TSVpFCisJQ0ZfRVRJUF9ERUZJTkVTCisJQ0ZfQ1BQX1BBUkFNX0lOSVQKKwlDRl9DUFBfU1RBVElDX0NBU1QKKworCUNYWF9BUj0nJChBUiknCisJQ1hYX0FSX09QVFM9JyQoQVJfT1BUUyknCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCWlyaXgqKSAjKHZpCisJICAgIGlmIHRlc3QgIiRHWFgiICE9IHllcyA7IHRoZW4KKwkJQ1hYX0FSPSckKENYWCknCisJCUNYWF9BUl9PUFRTPSctYXIgLW8nCisJICAgIGZpCisJICAgIDs7CisJc2NvMy4ydjUqKSAjKHZpCisJICAgIENYWExERkxBR1M9Ii11IG1haW4iCisJICAgIDs7CisJc29sYXJpczIqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiAhPSB5ZXMgOyB0aGVuCisJCUNYWF9BUj0nJChDWFgpJworCQlDWFhfQVJfT1BUUz0nLXhhciAtbycKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisJQUNfU1VCU1QoQ1hYTERGTEFHUykKKwlBQ19TVUJTVChDWFhfQVIpCisJQUNfU1VCU1QoQ1hYX0FSX09QVFMpCitlbHNlCisJY2ZfY3h4X2xpYnJhcnk9bm8KKwljZl9jdl9idWlsdGluX2Jvb2w9MQorCisJIyBKdXN0IGJlY2F1c2Ugd2UgYXJlIG5vdCBjb25maWd1cmluZyBhZ2FpbnN0IEMrKyByaWdodCBub3cgZG9lcyBub3QKKwkjIG1lYW4gdGhhdCBhIHVzZXIgd2lsbCBub3Qgd2FudCB0byB1c2UgQysrLiAgU29tZSBkaXN0cmlidXRvcnMgZGlzYWJsZQorCSMgdGhlIEMrKyBwb3J0aW9uIG9mIHRoaXMgY29uZmlndXJhdGlvbiBhcyBhIHNob3J0Y3V0IChvciBqdXN0IHRvIGF2b2lkCisJIyBjb21waWxpbmcgdGhlIGRlbW8gaW4gdGhlIGMrKyBkaXJlY3RvcnkpLiAgU28gd2UgbmVlZCBhIHJlYXNvbmFibGUKKwkjIGRlZmF1bHQgZm9yIHRoZSAnYm9vbCcgdHlwZS4KKwkjCisJIyBDYXZlYXQ6IHNpbmNlIHRoZSBzdG9yYWdlIG9mIHRoZSBib29sIHR5cGUgaXMgbm90IHN0YW5kYXJkaXplZCwgaXQKKwkjIG1heSBjaGFuZ2UuCisKKwlpZiB0ZXN0ICIkTkNVUlNFU19CT09MIiAhPSBhdXRvIDsgdGhlbgorCQljZl9jdl90eXBlX29mX2Jvb2w9JE5DVVJTRVNfQk9PTAorCQljZl9jdl9oZWFkZXJfc3RkYm9vbF9oPTAKKwllbHNlCisJCWlmIHRlc3QgIiRjZl9jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IDEgOyB0aGVuCisJCQlDRl9CT09MX1NJWkUKKwkJZWxzZQorCQkJQUNfTVNHX0NIRUNLSU5HKGZvciBmYWxsYmFjayB0eXBlIG9mIGJvb2wpCisJCQljYXNlICIkaG9zdF9jcHUiIGluICModmkKKwkJCWk/ODYpCWNmX2N2X3R5cGVfb2ZfYm9vbD1jaGFyCTs7ICModmkKKwkJCSopCWNmX2N2X3R5cGVfb2ZfYm9vbD1pbnQJOzsKKwkJCWVzYWMKKwkJCUFDX01TR19SRVNVTFQoJGNmX2N2X3R5cGVfb2ZfYm9vbCkKKwkJZmkKKwlmaQorZmkKK0FDX1NVQlNUKENYWExJQlMpCisKKyMgSWYgdGhlIEMgY29tcGlsZXIgZGlkIG5vdCBkZWNsYXJlIGJvb2wsIGFuZCB3ZSBkaWQgbm90IGRldGVybWluZSB0aGF0IHRoZSBDKysKKyMgY29tcGlsZXIgZG9lcyBub3QgZGVjbGFyZSBib29sLCB0dXJuIG9uIGFuIGlmZGVmIGluIGN1cnNlcy5oIHRoYXQgbWFrZXMgdGhlCisjIG5jdXJzZXMgbGlicmFyeSB1c2UgdGhlIHNhbWUgdHlwZSBhcyBDKysgYm9vbC4gIE5vdGUgdGhhdCB0aGlzIGFsbG93cyBvbmUgdG8KKyMgc3BlY2lmeSB0aGUgdHlwZSBvZiBib29sIGluIGEgY29uZmlndXJlLXNjcmlwdCBvcHRpb24gYW5kIHBvc3Rwb25lCisjIGludGVncmF0aW9uIHdpdGggdGhlIEMrKyBjb21waWxlciBwcm92aWRlZCB0aGF0IHRoZSB0eXBlcyBhcmUgY29tcGF0aWJsZS4KK1VTRV9DWFhfQk9PTD0xCitpZiB0ZXN0ICRjZl9jdl9jY19ib29sX3R5cGUgPSAxCit0aGVuCisJIyBvb3BzOiBDIGhhcyBhIGJvb2wuICBVbmxpa2VseSwgYnV0IEMrKyBjb3VsZCBkaWZmZXIuCisJVVNFX0NYWF9CT09MPTAKK2VsaWYgdGVzdCAkY2ZfY3ZfYnVpbHRpbl9ib29sID0gMAordGhlbgorCSMgQysrIGhhcyBubyBib29sCisJVVNFX0NYWF9CT09MPTAKK2Vsc2UKKwkjIHRoaXMgaXMgdGhlIG5vcm1hbCBjYXNlCisJVVNFX0NYWF9CT09MPSdkZWZpbmVkKF9fY3BsdXNwbHVzKScKK2ZpCitBQ19TVUJTVChVU0VfQ1hYX0JPT0wpCisKK0NGX0hFTFBfTUVTU0FHRShBZGE5NSBCaW5kaW5nIE9wdGlvbnM6KQorCitkbmwgSWYgdGhlIEFkYTk1IHNvdXJjZS10cmVlIGlzIHByZXNlbnQsIGFkZCB0aGF0IHRvIHRoZSBidWlsZCB1bmxlc3MgaXQgd2lsbAorZG5sIG5vdCB3b3JrLCBvciB3YXMgbm90IHJlcXVlc3RlZC4KK2lmIHRlc3QgLWYgIiR7c3JjZGlyfS9BZGE5NS9NYWtlZmlsZS5pbiIgOyB0aGVuCisKK2RubCBsaWJ0b29sIGRvZXMgbm90IGtub3cgYW55dGhpbmcgYWJvdXQgR05BVCwgdGhvdWdoIGEgY2hhbmdlIG1hZGUgaW4gMTk5OAorZG5sIHByb3ZpZGVkIGZvciBpdCAic29tZWRheSIuICBEaXNhYmxlIHRoZSBhZGEgc3VidHJlZSBpZiB3ZSBhcmUgdXNpbmcKK2RubCBsaWJ0b29sIC1URCAyMDA3MDcxNAoraWYgdGVzdCAiJGNmX3dpdGhfYWRhIiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR3aXRoX2xpYnRvb2wiICE9ICJubyI7IHRoZW4KKwlBQ19NU0dfV0FSTihsaWJ0b29sIGRvZXMgbm90IHN1cHBvcnQgQWRhIC0gZGlzYWJsaW5nIGZlYXR1cmUpCisJY2Zfd2l0aF9hZGE9bm8KKyAgICBmaQorZmkKKworZG5sIENoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgR05VIEFkYSBUcmFuc2xhdG9yIChHTkFUKS4KK2RubCBBdCB0aGUgbW9tZW50IHdlIHN1cHBvcnQgbm8gb3RoZXIgQWRhOTUgY29tcGlsZXIuCitpZiB0ZXN0ICIkY2Zfd2l0aF9hZGEiICE9ICJubyIgOyB0aGVuCitjZl9hZGFfbWFrZT1nbmF0bWFrZQorQUNfQ0hFQ0tfUFJPRyhnbmF0X2V4aXN0cywgJGNmX2FkYV9tYWtlLCB5ZXMsIG5vKQoraWYgdGVzdCAiJGFjX2N2X3Byb2dfZ25hdF9leGlzdHMiID0gbm87IHRoZW4KKyAgIGNmX2FkYV9tYWtlPQorZWxzZQorICAgQ0ZfR05BVF9WRVJTSU9OCisgICBBQ19DSEVDS19QUk9HKE00X2V4aXN0cywgbTQsIHllcywgbm8pCisgICBpZiB0ZXN0ICIkYWNfY3ZfcHJvZ19NNF9leGlzdHMiID0gbm87IHRoZW4KKyAgICAgIGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0PW5vCisgICAgICBlY2hvIEFkYTk1IGJpbmRpbmcgcmVxdWlyZWQgcHJvZ3JhbSBtNCBub3QgZm91bmQuIEFkYTk1IGJpbmRpbmcgZGlzYWJsZWQuCisgICBmaQorICAgaWYgdGVzdCAiJGNmX2N2X3Byb2dfZ25hdF9jb3JyZWN0IiA9IHllczsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKGlmIEdOQVQgd29ya3MpCisgICAgICBDRl9HTkFUX1RSWV9SVU4oW3Byb2NlZHVyZSBjb25mdGVzdDtdLAorW3dpdGggVGV4dF9JTzsKK3dpdGggR05BVC5PU19MaWI7Citwcm9jZWR1cmUgY29uZnRlc3QgaXMKK2JlZ2luCisgICBUZXh0X0lPLlB1dCAoIkhlbGxvIFdvcmxkIik7CisgICBUZXh0X0lPLk5ld19MaW5lOworICAgR05BVC5PU19MaWIuT1NfRXhpdCAoMCk7CitlbmQgY29uZnRlc3Q7XSxbY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9eWVzXSxbY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3Q9bm9dKQorICAgICAgQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QpCisgICBmaQorZmkKK2lmIHRlc3QJIiRjZl9jdl9wcm9nX2duYXRfY29ycmVjdCIgPSB5ZXM7IHRoZW4KKyAgIEFEQUZMQUdTPSItTzMgLWduYXRwbiAkQURBRkxBR1MiCisKKyAgIEFDX01TR19DSEVDS0lORyhpZiBHTkFUIHByYWdtYSBVbnJlZmVyZW5jZWQgd29ya3MpCisgICBDRl9HTkFUX1RSWV9MSU5LKFtwcm9jZWR1cmUgY29uZnRlc3Q7XSwKK1t3aXRoIFRleHRfSU87Cit3aXRoIEdOQVQuT1NfTGliOworcHJvY2VkdXJlIGNvbmZ0ZXN0IGlzCisgICB0ZXN0IDogSW50ZWdlcjsKKyAgIHByYWdtYSBVbnJlZmVyZW5jZWQgKHRlc3QpOworYmVnaW4KKyAgIHRlc3QgOj0gMTsKKyAgIFRleHRfSU8uUHV0ICgiSGVsbG8gV29ybGQiKTsKKyAgIFRleHRfSU8uTmV3X0xpbmU7CisgICBHTkFULk9TX0xpYi5PU19FeGl0ICgwKTsKK2VuZCBjb25mdGVzdDtdLFtjZl9jdl9wcmFnbWFfdW5yZWZlcmVuY2VkPXllc10sW2NmX2N2X3ByYWdtYV91bnJlZmVyZW5jZWQ9bm9dKQorICAgQUNfTVNHX1JFU1VMVCgkY2ZfY3ZfcHJhZ21hX3VucmVmZXJlbmNlZCkKKworICAgIyBpZiB0aGUgcHJhZ21hIGlzIHN1cHBvcnRlZCwgdXNlIGl0IChuZWVkZWQgaW4gdGhlIFRyYWNlIGNvZGUpLgorICAgaWYgdGVzdCAkY2ZfY3ZfcHJhZ21hX3VucmVmZXJlbmNlZCA9IHllcyA7IHRoZW4KKyAgICAgIFBSQUdNQV9VTlJFRj1UUlVFCisgICBlbHNlCisgICAgICBQUkFHTUFfVU5SRUY9RkFMU0UKKyAgIGZpCisKKyAgIEFDX0FSR19XSVRIKGFkYS1jb21waWxlciwKKwlbICAtLXdpdGgtYWRhLWNvbXBpbGVyPUNNRCBzcGVjaWZ5IEFkYTk1IGNvbXBpbGVyIGNvbW1hbmQgKGRlZmF1bHQgZ25hdG1ha2UpXSwKKwlbY2ZfYWRhX2NvbXBpbGVyPSR3aXRodmFsXSwKKwlbY2ZfYWRhX2NvbXBpbGVyPWduYXRtYWtlXSkKKworICAgY2ZfYWRhX3BhY2thZ2U9dGVybWluYWxfaW50ZXJmYWNlCisKKyAgIEFDX1NVQlNUKGNmX2FkYV9tYWtlKQorICAgQUNfU1VCU1QoY2ZfYWRhX2NvbXBpbGVyKQorICAgQUNfU1VCU1QoY2ZfYWRhX3BhY2thZ2UpCisgICBBQ19TVUJTVChBREFGTEFHUykKKyAgIEFDX1NVQlNUKGNmX2NvbXBpbGVfZ2VuZXJpY3MpCisgICBBQ19TVUJTVChjZl9nZW5lcmljX29iamVjdHMpCisgICBBQ19TVUJTVChQUkFHTUFfVU5SRUYpCisKKyAgIENGX1dJVEhfUEFUSChhZGEtaW5jbHVkZSwKKyAgICAgICBbICAtLXdpdGgtYWRhLWluY2x1ZGU9RElSICBBZGEgaW5jbHVkZXMgYXJlIGluIERJUl0sCisgICAgICAgQURBX0lOQ0xVREUsCisgICAgICAgUFJFRklYL2xpYi9hZGEvYWRhaW5jbHVkZSwKKyAgICAgICBbJF1wcmVmaXgvbGliL2FkYS9hZGFpbmNsdWRlKQorICAgQUNfU1VCU1QoQURBX0lOQ0xVREUpCisKKyAgIENGX1dJVEhfUEFUSChhZGEtb2JqZWN0cywKKyAgICAgICBbICAtLXdpdGgtYWRhLW9iamVjdHM9RElSICBBZGEgb2JqZWN0cyBhcmUgaW4gRElSXSwKKyAgICAgICBBREFfT0JKRUNUUywKKyAgICAgICBQUkVGSVgvbGliL2FkYS9hZGFsaWIsCisgICAgICAgWyRdcHJlZml4L2xpYi9hZGEvYWRhbGliKQorICAgQUNfU1VCU1QoQURBX09CSkVDVFMpCisKK2ZpCitmaQorZWxzZQorICAgY2Zfd2l0aF9hZGE9bm8KK2ZpCisKKyMjIyBDb25zdHJ1Y3QgdGhlIG5jdXJzZXMgbGlicmFyeS1zdWJzZXRzLCBpZiBhbnksIGZyb20gdGhpcyBzZXQgb2Yga2V5d29yZHM6CisjIyMJbm9uZSwgYmFzZSwgZXh0X2Z1bmNzLCBleHRfdGluZm8sIHRpY2xpYiwgdGVybWxpYiwgd2lkZWNoYXIKKyMjIworIyMjIHRpY2xpYiBtb2R1bGVzIG1heSBiZSBhIHNlcGFyYXRlIGxpYnJhcnksIG90aGVyd2lzZSBjb250YWluZWQgaW4gdGVybWxpYi4KKyMjIyB0ZXJtbGliIG1vZHVsZXMgbWF5IGJlIGEgc2VwYXJhdGUgbGlicmFyeSwgb3RoZXJ3aXNlIGNvbnRhaW5lZCBpbiBuY3Vyc2VzLgorIyMjCisjIyMgVGhlIG9mICIrIiBvciAiICIgYmV0d2VlbiB0aGUgdG9rZW5zIGNvbnRyb2xzIHRoZSB3YXkgdGhlIHNjcmlwdAorIyMjIGNob29zZXMgdG8gc3BsaXQgbW9kdWxlIGxpc3RzIGludG8gbGlicmFyaWVzLgorIyMjCisjIyMgKHNlZSBDRl9MSUJfUlVMRVMpLgorQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJyYXJ5IHN1YnNldHMpCitMSUJfU1VCU0VUUz0KKworaWYgdGVzdCAiJGNmX3dpdGhfcHJvZ3MiID0geWVzIHx8IHRlc3QgIiR3aXRoX3RpY2xpYiIgIT0gbm8gfHwgdGVzdCAiJHdpdGhfdGVybWNhcCIgIT0gbm87IHRoZW4KKwlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU310aWNsaWIiCisJaWYgdGVzdCAiJHdpdGhfdGljbGliIiAhPSBubyA7IHRoZW4KKwkJTElCX1NVQlNFVFM9IiR7TElCX1NVQlNFVFN9ICIKKwllbHNlCisJCUxJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfSsiCisJZmkKK2ZpCisKK0xJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfXRlcm1saWIiCit0ZXN0ICIkd2l0aF9leHRfZnVuY3MiID0geWVzICYmIExJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfStleHRfdGluZm8iCitpZiB0ZXN0ICIkd2l0aF90ZXJtbGliIiAhPSBubyA7IHRoZW4KKwlMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30gIgorZWxzZQorCUxJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfSsiCitmaQorCitMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU31iYXNlIgordGVzdCAiJHdpdGhfd2lkZWMiICAgICA9IHllcyAmJiBMSUJfU1VCU0VUUz0iJHtMSUJfU1VCU0VUU30rd2lkZWNoYXIiCit0ZXN0ICIkd2l0aF9leHRfZnVuY3MiID0geWVzICYmIExJQl9TVUJTRVRTPSIke0xJQl9TVUJTRVRTfStleHRfZnVuY3MiCisKK0FDX01TR19SRVNVTFQoJExJQl9TVUJTRVRTKQorCisjIyMgQ29uc3RydWN0IHRoZSBsaXN0IG9mIGluY2x1ZGUtZGlyZWN0b3JpZXMgdG8gYmUgZ2VuZXJhdGVkCitDRl9JTkNMVURFX0RJUlMKK0NGX0FEQV9JTkNMVURFX0RJUlMKKworIyMjIEJ1aWxkIHVwIHBpZWNlcyBmb3IgbWFrZWZpbGUgcnVsZXMKK0FDX01TR19DSEVDS0lORyhkZWZhdWx0IGxpYnJhcnkgc3VmZml4KQorQ0ZfTElCX1RZUEUoJERGVF9MV1JfTU9ERUwsREZUX0FSR19TVUZGSVgpZG5sCitBQ19TVUJTVChERlRfQVJHX1NVRkZJWClkbmwgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8gIi1sbmN1cnNlcyIgKCIiKQorQUNfTVNHX1JFU1VMVCgkREZUX0FSR19TVUZGSVgpCisKK0FDX01TR19DSEVDS0lORyhkZWZhdWx0IGxpYnJhcnktZGVwZW5kZW5jeSBzdWZmaXgpCitDRl9MSUJfU1VGRklYKCRERlRfTFdSX01PREVMLERGVF9MSUJfU1VGRklYLERGVF9ERVBfU1VGRklYKWRubAorQUNfU1VCU1QoREZUX0RFUF9TVUZGSVgpZG5sIHRoZSBjb3JyZXNwb25kaW5nIGxpYnJhcnktc3VmZml4ICgiLmEiKQorQUNfTVNHX1JFU1VMVCgkREZUX0RFUF9TVUZGSVgpCisKK0FDX01TR19DSEVDS0lORyhkZWZhdWx0IG9iamVjdCBkaXJlY3RvcnkpCitDRl9PQkpfU1VCRElSKCRERlRfTFdSX01PREVMLERGVF9PQkpfU1VCRElSKWRubAorQUNfU1VCU1QoREZUX09CSl9TVUJESVIpZG5sIHRoZSBkZWZhdWx0IG9iamVjdC1kaXJlY3RvcnkgKCJvYmoiKQorQUNfTVNHX1JFU1VMVCgkREZUX09CSl9TVUJESVIpCisKKyMgbGlidG9vbCB0aGlua3MgaXQgY2FuIG1ha2UgYysrIHNoYXJlZCBsaWJyYXJpZXMgKHBlcmhhcHMgb25seSBnKyspCitpZiB0ZXN0ICIkY2Zfd2l0aF9jeHgiID0geWVzIDsgdGhlbgorQUNfTVNHX0NIRUNLSU5HKGMrKyBsaWJyYXJ5LWRlcGVuZGVuY3kgc3VmZml4KQoraWYgdGVzdCAiJHdpdGhfbGlidG9vbCIgIT0gIm5vIjsgdGhlbgorCUNYWF9MSUJfU1VGRklYPSRERlRfREVQX1NVRkZJWAorZWxzZQorCUNGX0xJQl9TVUZGSVgobm9ybWFsLENYWF9MSUJfU1VGRklYLENYWF9ERVBfU1VGRklYKWRubCB3ZSBub3JtYWxseSBtYWtlIGEgc3RhdGljIGxpYnJhcnkKK2ZpCitBQ19NU0dfUkVTVUxUKCRDWFhfTElCX1NVRkZJWCkKK0FDX1NVQlNUKENYWF9MSUJfU1VGRklYKQorZmkKKworIyBkbyBub3Qgd2FudCAtbGRsIGluIGJ1aWxkIGV4Y2VwdCBhcyBuZWVkZWQgZm9yIC1sbmN1cnNlcyBkZXBlbmRlbmN5CitpZiB0ZXN0ICIkd2l0aF9kbHN5bSIgPSB5ZXMgOyB0aGVuCitpZiB0ZXN0ICRERlRfTFdSX01PREVMID0gc2hhcmVkIHx8IFwKKyAgIHRlc3QgJERGVF9MV1JfTU9ERUwgPSBsaWJ0b29sIDsgdGhlbgorCUNGX1JFTU9WRV9MSUIoTElCUywkTElCUyxkbCkKK2ZpCitmaQorIyMjIFNldCB1cCBsb3ctbGV2ZWwgdGVybWluZm8gZGVwZW5kZW5jaWVzIGZvciBtYWtlZmlsZXMuCisKKyMgVElDU19MSVNUIGFuZCBUSU5GT19MSVNUIGFyZSBuZWVkZWQgdG8gYnVpbGQgbGlidGljLnNvIGFuZCBsaWJ0ZXJtLnNvLCBidXQKKyMgZG8gbm90IG5lZWQgbGliZGwKK1RJQ1NfTElTVD0KK2lmIHRlc3QgIiR3aXRoX2Rsc3ltIiA9IHllcyA7IHRoZW4KKwlDRl9SRU1PVkVfTElCKFRJTkZPX0xJU1QsJFNITElCX0xJU1QsZGwpCitmaQorCitpZiB0ZXN0ICIkd2l0aF90aWNsaWIiICE9IG5vIDsgdGhlbgorCisJaWYgdGVzdCAiJHdpdGhfdGljbGliIiAhPSB5ZXMgOyB0aGVuCisJCVRJQ1NfTkFNRT0kd2l0aF90aWNsaWIKKwkJVElDU19BUkdfU1VGRklYPSIke3dpdGhfdGljbGlifWBlY2hvICR7REZUX0FSR19TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJQ1NfREVQX1NVRkZJWD0iJHt3aXRoX3RpY2xpYn1gZWNobyAke0RGVF9ERVBfU1VGRklYfXxzZWQgLWUgInMvXiR7TElCX1NVRkZJWH0vLyJgIgorCQlUSUNTX0xJQl9TVUZGSVg9IiR7d2l0aF90aWNsaWJ9IgorCWVsc2UKKwkJVElDU19BUkdfU1VGRklYPSIke1RJQ1NfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSIKKwkJVElDU19ERVBfU1VGRklYPSIke1RJQ1NfTkFNRX0ke0RGVF9ERVBfU1VGRklYfSIKKwkJVElDU19MSUJfU1VGRklYPSIke1RJQ1NfTkFNRX0ke0xJQl9TVUZGSVh9IgorCWZpCisJVElDU19BUkdTPSItTCR7TElCX0RJUn0gLWwke1RJQ1NfTElCX1NVRkZJWH0iCitlbHNlCisJVElDU19BUkdTPSItTCR7TElCX0RJUn0gLWwke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9IgorZmkKK0FDX1NVQlNUKFRJQ1NfQVJHX1NVRkZJWCkKK0FDX1NVQlNUKFRJQ1NfREVQX1NVRkZJWCkKK0FDX1NVQlNUKFRJQ1NfTElCX1NVRkZJWCkKK0FDX1NVQlNUKFRJQ1NfQVJHUykKKworaWYgdGVzdCAiJHdpdGhfdGVybWxpYiIgIT0gbm8gOyB0aGVuCisKKwlpZiB0ZXN0ICIkd2l0aF90ZXJtbGliIiAhPSB5ZXMgOyB0aGVuCisJCVRJTkZPX05BTUU9JHdpdGhfdGVybWxpYgorCQlUSU5GT19TVUZGSVg9ImBlY2hvICR7REZUX0xJQl9TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJTkZPX0FSR19TVUZGSVg9IiR7d2l0aF90ZXJtbGlifWBlY2hvICR7REZUX0FSR19TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJTkZPX0RFUF9TVUZGSVg9IiR7d2l0aF90ZXJtbGlifWBlY2hvICR7REZUX0RFUF9TVUZGSVh9fHNlZCAtZSAicy9eJHtMSUJfU1VGRklYfS8vImAiCisJCVRJTkZPX0xJQl9TVUZGSVg9IiR7d2l0aF90ZXJtbGlifSIKKwllbHNlCisJCVRJTkZPX1NVRkZJWD0ke0RGVF9MSUJfU1VGRklYfQorCQlUSU5GT19BUkdfU1VGRklYPSIke1RJTkZPX05BTUV9JHtERlRfQVJHX1NVRkZJWH0iCisJCVRJTkZPX0RFUF9TVUZGSVg9IiR7VElORk9fTkFNRX0ke0RGVF9ERVBfU1VGRklYfSIKKwkJVElORk9fTElCX1NVRkZJWD0iJHtUSU5GT19OQU1FfSR7TElCX1NVRkZJWH0iCisJZmkKKworCVRFU1RfREVQUz0iJHtMSUJfRElSfS8ke0xJQl9QUkVGSVh9JHtUSU5GT19ERVBfU1VGRklYfSIKKwlURVNUX0RFUDI9IiR7TElCXzJORH0vJHtMSUJfUFJFRklYfSR7VElORk9fREVQX1NVRkZJWH0iCisJaWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gImxpYnRvb2wiOyB0aGVuCisJCVRFU1RfQVJHUz0iJHtURVNUX0RFUFN9IgorCQlURVNUX0FSRzI9IiR7VEVTVF9ERVAyfSIKKwkJVElORk9fQVJHUz0iLUwke0xJQl9ESVJ9ICRURVNUX0FSR1MiCisJZWxzZQorCQlURVNUX0FSR1M9Ii1sJHtUSU5GT19BUkdfU1VGRklYfSIKKwkJVEVTVF9BUkcyPSItbCR7VElORk9fQVJHX1NVRkZJWH0iCisJCVRJQ1NfTElTVD0iJFNITElCX0xJU1QgLWwke1RJTkZPX0xJQl9TVUZGSVh9IgorCQlUSU5GT19BUkdTPSItTCR7TElCX0RJUn0gJFRFU1RfQVJHUyIKKwkJU0hMSUJfTElTVD0iJFNITElCX0xJU1QgLWwke1RJTkZPX0xJQl9TVUZGSVh9IgorCWZpCitlbHNlCisJIyB0aGUgbmV4dCBsaW5lcyBhcmUgbmVlZGVkIGZvciBsaW5raW5nIGxpYnRpYyBvdmVyIGxpYm5jdXJzZXMKKwlUSU5GT19OQU1FPSR7TElCX05BTUV9CisJVElORk9fU1VGRklYPSR7REZUX0xJQl9TVUZGSVh9CisJVElORk9fQVJHX1NVRkZJWD0ke0xJQl9OQU1FfSR7REZUX0FSR19TVUZGSVh9CisJaWYgdGVzdCAiJHdpdGhfdGljX2RlcGVuZHMiID0geWVzIDsgdGhlbgorCQlUSUNTX0xJU1Q9IiRTSExJQl9MSVNUIC1sJHtMSUJfTkFNRX0ke0RGVF9BUkdfU1VGRklYfSIKKwllbHNlCisJCVRJQ1NfTElTVD0iJFNITElCX0xJU1QiCisJZmkKKworCVRJTkZPX0FSR1M9Ii1MJHtMSUJfRElSfSAtbCR7TElCX05BTUV9JHtERlRfQVJHX1NVRkZJWH0iCitmaQorCitpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSBzaGFyZWQgOyB0aGVuCisJY2FzZSAkY2ZfY3Zfc3lzdGVtX25hbWUgaW4gIyh2aQorCWN5Z3dpbiopCisJCSMgImxpYiIgZmlsZXMgaGF2ZSAiLmRsbC5hIiBzdWZmaXgsICJjeWciIGZpbGVzIGhhdmUgIi5kbGwiCisJCVRJTkZPX1NVRkZJWD0uZGxsCisJCTs7CisJZXNhYworZmkKKworQUNfU1VCU1QoVElORk9fQVJHX1NVRkZJWCkKK0FDX1NVQlNUKFRJTkZPX0RFUF9TVUZGSVgpCitBQ19TVUJTVChUSU5GT19MSUJfU1VGRklYKQorQUNfU1VCU1QoVElORk9fQVJHUykKKworaWYgdGVzdCAiJHdpdGhfZGxzeW0iID0geWVzIDsgdGhlbgorCUNGX1JFTU9WRV9MSUIoVElDU19MSVNULCRUSUNTX0xJU1QsZGwpCitmaQorCitpZiB0ZXN0ICIkREZUX0xXUl9NT0RFTCIgPSAibGlidG9vbCI7IHRoZW4KKyAgICBPQkpFWFQ9bG8KK2ZpCisKKyMgbmVlZGVkIGZvciBBZGE5NQorVElORk9fQVJHUzI9YGVjaG8gIiRUSU5GT19BUkdTIiB8IHNlZCAtZSAncywtTFwuXC4vLC1MLi4vLi4vLCdgCitBQ19TVUJTVChUSU5GT19BUkdTMikKKworY2FzZSAkREZUX0xXUl9NT0RFTCBpbgorbm9ybWFsfGRlYnVnfHByb2ZpbGUpCisJQ0ZfTERGTEFHU19TVEFUSUMKKwk7OworZXNhYworCitBQ19NU0dfQ0hFQ0tJTkcod2hlcmUgd2Ugd2lsbCBpbnN0YWxsIGN1cnNlcy5oKQordGVzdCAiJHdpdGhfb3ZlcndyaXRlIiA9IG5vICYmIFwKK3Rlc3QgIngkaW5jbHVkZWRpciIgPSAneCR7cHJlZml4fS9pbmNsdWRlJyAmJiBcCisJaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUvbmN1cnNlcycke0xJQl9TVUZGSVh9CitBQ19NU0dfUkVTVUxUKCRpbmNsdWRlZGlyKQorCisjIyMgUmVzb2x2ZSBhIGNvbmZsaWN0IGJldHdlZW4gbm9ybWFsIGFuZCB3aWRlLWN1cnNlcyBieSBmb3JjaW5nIGFwcGxpY2F0aW9ucworIyMjIHRoYXQgd2lsbCBuZWVkIGxpYnV0ZjggdG8gYWRkIGl0IHRvIHRoZWlyIGNvbmZpZ3VyZSBzY3JpcHQuCitpZiB0ZXN0ICIkd2l0aF9vdmVyd3JpdGUiICE9IG5vIDsgdGhlbgoraWYgdGVzdCAiJE5DVVJTRVNfTElCVVRGOCIgPSAxIDsgdGhlbgorCU5DVVJTRVNfTElCVVRGOD0nZGVmaW5lZChIQVZFX0xJQlVURjhfSCknCisJQUNfTVNHX1dBUk4oV2lkZS1jaGFyYWN0ZXIgYXBwbGljYXRpb25zIG11c3QgZGVmaW5lIEhBVkVfTElCVVRGOF9IIHRvIGluY2x1ZGUgY3Vyc2VzLmgpCitmaQorZmkKKworQUNfU1VCU1QoV0lUSF9PVkVSV1JJVEUpCitBQ19TVUJTVChUSUNTX0xJU1QpCitBQ19TVUJTVChUSU5GT19MSVNUKQorQUNfU1VCU1QoU0hMSUJfTElTVCkKKworIyB1c2VkIHRvIHNlcGFyYXRlIHRhY2sgb3V0IG9mIHRoZSB0cmVlCitOQ1VSU0VTX1RSRUU9CitBQ19TVUJTVChOQ1VSU0VTX1RSRUUpCisKKyMjIyBwcmVkZWZpbmVkIHN0dWZmIGZvciB0aGUgdGVzdCBwcm9ncmFtcworQUNfREVGSU5FKEhBVkVfU0xLX0NPTE9SKQorCisjIyMgQ29uc3RydWN0IHRoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGZvciB3aGljaCB3ZSdsbCBjdXN0b21pemUgbWFrZWZpbGVzCisjIyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29tcGlsZS1ydWxlcy4KKworQ0ZfU1JDX01PRFVMRVMoJG1vZHVsZXNfdG9fYnVpbGQpCisKK2lmIHRlc3QgIiRjZl93aXRoX2FkYSIgIT0gIm5vIiAmJiB0ZXN0ICIkY2ZfY3ZfcHJvZ19nbmF0X2NvcnJlY3QiICE9ICJubyI7IHRoZW4KKyAgIFNVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIEFkYTk1L2dlbi9hZGFjdXJzZXMtY29uZmlnIgorZmkKKworQ0ZfRElSU19UT19NQUtFCisKK0FDX0RFRklORV9VTlFVT1RFRChOQ1VSU0VTX1BBVEhTRVAsJyRQQVRIU0VQJykKKworQUNfREVGSU5FX1VOUVVPVEVEKE5DVVJTRVNfVkVSU0lPTl9TVFJJTkcsICIke05DVVJTRVNfTUFKT1J9LiR7TkNVUlNFU19NSU5PUn0uJHtOQ1VSU0VTX1BBVENIfSIpCisKKyMjIyBOb3cgdGhhdCB3ZSdyZSBkb25lIHJ1bm5pbmcgdGVzdHMsIGFkZCB0aGUgY29tcGlsZXItd2FybmluZ3MsIGlmIGFueQorQ0ZfQUREX0NGTEFHUygkRVhUUkFfQ0ZMQUdTKQorCisjIyMgSWYgd2UncmUgYnVpbGRpbmcgd2l0aCBycGF0aCwgdHJ5IHRvIGxpbmsgbm9uLXN0YW5kYXJkIGxpYnMgdGhhdCB3YXkgdG9vLgoraWYgdGVzdCAiJERGVF9MV1JfTU9ERUwiID0gInNoYXJlZCI7IHRoZW4KKyAgQ0ZfUlBBVEhfSEFDSworZmkKKworIyMjIERlZmluZSBzdWJzdGl0dXRpb25zIGZvciBoZWFkZXIgZmlsZXMgdG8gYXZvaWQgbmFtZS1wb2xsdXRpb24KK0NGX1NVQlNUX0lGKFsiJGNmX2N2X2hhdmVfdGNnZXRhdHRyIiA9IHllc10sIEhBVkVfVENHRVRBVFRSLCAxLCAwKQorQ0ZfU1VCU1RfSUYoWyIkYWNfY3ZfaGVhZGVyX3Rlcm1pb19oIiA9IHllc10sIEhBVkVfVEVSTUlPX0gsIDEsIDApCitDRl9TVUJTVF9JRihbIiRhY19jdl9oZWFkZXJfdGVybWlvc19oIiA9IHllc10sIEhBVkVfVEVSTUlPU19ILCAxLCAwKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdCAiJHVzZV9kYXRhYmFzZSIgPSB5ZXMgJiYgU1VCX01BS0VGSUxFUz0iJFNVQl9NQUtFRklMRVMgbWlzYy9ydW5fdGljLnNoOm1pc2MvcnVuX3RpYy5pbiIKK1NVQl9NQUtFRklMRVM9IiRTVUJfTUFLRUZJTEVTIG1pc2MvbmN1cnNlcy1jb25maWc6bWlzYy9uY3Vyc2VzLWNvbmZpZy5pbiIKK0FDX09VVFBVVCggXAorCWluY2x1ZGUvTUt0ZXJtLmguYXdrIFwKKwlpbmNsdWRlL2N1cnNlcy5oZWFkOmluY2x1ZGUvY3Vyc2VzLmguaW4gXAorCWluY2x1ZGUvdGVybWNhcC5oIFwKKwlpbmNsdWRlL3VuY3RybC5oIFwKKwkkU1VCX01BS0VGSUxFUyBcCisJTWFrZWZpbGUsWworQ0ZfUFJHX1JVTEVTKFskc3JjZGlyL3Rlc3QvbWstdGVzdC5hd2sgRUNIT19MSU5LPSIkRUNIT19MSU5LIl0sIHRlc3QpCitDRl9MSUJfUlVMRVMoJFNSQ19TVUJESVJTKQorXSxbCisjIyMgU3BlY2lhbCBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlCisjIyMgY29uZmlndXJhdGlvbi1ydW4gaW50byBjb25maWcuc3RhdHVzCisKK0FXSz0iJEFXSyIKK0RGVF9BUkdfU1VGRklYPSIkREZUX0FSR19TVUZGSVgiCitERlRfTFdSX01PREVMPSIkREZUX0xXUl9NT0RFTCIKK0VDSE9fTElOSz0iJEVDSE9fTElOSyIKK0xEQ09ORklHPSIkTERDT05GSUciCitMSUJfTkFNRT0iJExJQl9OQU1FIgorTElCX1NVQlNFVFM9IiRMSUJfU1VCU0VUUyIKK0xJQl9TVUZGSVg9IiRMSUJfU1VGRklYIgorTElCX1RSQUNJTkc9IiRMSUJfVFJBQ0lORyIKK01BS0VfVEVSTUlORk89IiRNQUtFX1RFUk1JTkZPIgorTkNVUlNFU19NQUpPUj0iJE5DVVJTRVNfTUFKT1IiCitOQ1VSU0VTX01JTk9SPSIkTkNVUlNFU19NSU5PUiIKK05DVVJTRVNfT1NQRUVEPSIkTkNVUlNFU19PU1BFRUQiCitOQ1VSU0VTX1BBVENIPSIkTkNVUlNFU19QQVRDSCIKK1NSQ19TVUJESVJTPSIkU1JDX1NVQkRJUlMiCitURVJNSU5GTz0iJFRFUk1JTkZPIgorVElORk9fQVJHX1NVRkZJWD0iJFRJTkZPX0FSR19TVUZGSVgiCitUSU5GT19MSUJfU1VGRklYPSIkVElORk9fTElCX1NVRkZJWCIKK1RJTkZPX05BTUU9IiRUSU5GT19OQU1FIgorVElORk9fU1VGRklYPSIkVElORk9fU1VGRklYIgorVElDU19BUkdfU1VGRklYPSIkVElDU19BUkdfU1VGRklYIgorVElDU19MSUJfU1VGRklYPSIkVElDU19MSUJfU1VGRklYIgorVElDU19OQU1FPSIkVElDU19OQU1FIgorV0lUSF9DVVJTRVNfSD0iJHdpdGhfY3Vyc2VzX2giCitXSVRIX0VDSE89IiR3aXRoX2VjaG8iCitXSVRIX09WRVJXUklURT0iJHdpdGhfb3ZlcndyaXRlIgorY2ZfTElTVF9NT0RFTFM9IiRjZl9saXN0X21vZGVscyIKK2NmX2N2X2FiaV92ZXJzaW9uPSIkY2ZfY3ZfYWJpX3ZlcnNpb24iCitjZl9jdl9kb19yZWxpbms9IiRjZl9jdl9kb19yZWxpbmsiCitjZl9jdl9kb19zeW1saW5rcz0iJGNmX2N2X2RvX3N5bWxpbmtzIgorY2ZfY3ZfZW5hYmxlX2xwNjQ9IiRjZl9jdl9lbmFibGVfbHA2NCIKK2NmX2N2X2VuYWJsZV9vcGFxdWU9IiRjZl9jdl9lbmFibGVfb3BhcXVlIgorY2ZfY3ZfcHJvZ19DQ19jX289JGNmX2N2X3Byb2dfQ0NfY19vCitjZl9jdl9wcm9nX0NYWF9jX289JGNmX2N2X3Byb2dfQ1hYX2NfbworY2ZfY3ZfcmVsX3ZlcnNpb249IiRjZl9jdl9yZWxfdmVyc2lvbiIKK2NmX2N2X3JtX3NvX2xvY3M9IiRjZl9jdl9ybV9zb19sb2NzIgorY2ZfY3Zfc2hhcmVkX3NvbmFtZT0nJGNmX2N2X3NoYXJlZF9zb25hbWUnCitjZl9jdl9zaGxpYl92ZXJzaW9uPSIkY2ZfY3Zfc2hsaWJfdmVyc2lvbiIKK2NmX2N2X3NobGliX3ZlcnNpb25faW5maXg9IiRjZl9jdl9zaGxpYl92ZXJzaW9uX2luZml4IgorY2ZfY3Zfc3lzdGVtX25hbWU9IiRjZl9jdl9zeXN0ZW1fbmFtZSIKK2NmX3dpdGhfY3h4X2JpbmRpbmc9IiRjZl93aXRoX2N4eF9iaW5kaW5nIgoraG9zdD0iJGhvc3QiCit0YXJnZXQ9IiR0YXJnZXQiCisKK10sY2F0KWRubAorJHtNQUtFLW1ha2V9IHByZWluc3RhbGwKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2NvbnZlcnRfY29uZmlndXJlLnBsIGIvbmN1cnNlcy01LjcvY29udmVydF9jb25maWd1cmUucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExYmRjNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2NvbnZlcnRfY29uZmlndXJlLnBsCkBAIC0wLDAgKzEsMTE5IEBACitleHRwcm9jIHBlcmwgLVMgLXcKKworIyAkSWQ6IGNvbnZlcnRfY29uZmlndXJlLnBsLHYgMS4zIDIwMDYvMDQvMjIgMjM6MDQ6MDYgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhlIGNvbnZlcnRlZCBzY3JpcHQgaXMgd3JpdHRlbiB0byBzdGRvdXQsIHNvIHJ1biB0aGlzIHNjcmlwdCBhcworIyAgICBjb252ZXJ0X2NvbmZpZ3VyZSBjb25maWd1cmUgPiBjb25maWd1cmUuY21kCisjCisjIFdoZW4gdGhlIGNvbnZlcnRlZCBzY3JpcHQgcnVucywgaXQgZXhwZWN0cyB0aGF0IC90bXAgZGlyIGlzCisjIGF2YWlsYWJsZSAoc28gd2UgY3JlYXRlIGl0KS4KKyMKKyMgcnVuIHRoZSByZXN1bHQgbGlrZSB0aGlzOgorIyAgICAuXGNvbmZpZ3VyZQorCisjIFNvbWUgZnJlcXVlbnQgbWFudWFsIGludGVydmVudGlvbjoKKyMgYSkgU29tZSBtYWtlZmlsZXMgaGFyZHdpcmUgU0hFTEwgPSAvYmluL3NoID09PiBjaGFuZ2UgdG86IHNoCisjIGIpIFNvbWUgbWFrZWZpbGVzIHJlY29nbml6ZSB0aGF0IGV4ZSBmaWxlcyB0ZXJtaW5hdGUgb24gLmV4ZQorIyAgICBZb3UgbmVlZCB0byBnaXZlIHRoaXMgc2NyaXB0IC1uby16ZXhlIG9wdGlvbi4uLgorCitzaGlmdCwgJG5vX3pleGUgPSAxIGlmIEBBUkdWIGFuZCAkQVJHVlswXSBlcSAnLW5vLXpleGUnOworCitta2RpciAnL3RtcCcsIDA3NzcgdW5sZXNzIC1kICcvdG1wJzsKKworcHJpbnQgPDxFT0Y7CitleHRwcm9jIHNoCisKK0VPRgorCitwcmludCA8PEVPRiB1bmxlc3MgJG5vX3pleGU7CisjIE1ha2Ugc2Vuc2libGUgZGVmYXVsdHM6CitDQz0iZ2NjIC1aZXhlIC1abXQiCitleHBvcnQgQ0MKK0NYWD0iZ2NjIC1aZXhlIC1abXQiCitleHBvcnQgQ1hYCisjR0NDT1BUPSIkR0NDT1BUIC1aZXhlIgorI2V4cG9ydCBHQ0NPUFQKK0VPRgorCitwcmludCA8PEVPRjsKK0NPTkZJR19TSEVMTD1zaAorZXhwb3J0IENPTkZJR19TSEVMTAorCisjIE9wdGltaXphdGlvbiAoR05VIG1ha2UgMy43NCBjYW5ub3QgYmUgbG9hZGVkIDotKCk6CitlbXhsb2FkIC1tIDMwIHNoLmV4ZSBscy5leGUgdHIuZXhlIGlkLmV4ZSBzZWQuZXhlICMgbWFrZS5leGUgCitlbXhsb2FkIC1tIDMwIGdyZXAuZXhlIGVncmVwLmV4ZSBmZ3JlcC5leGUgY2F0LmV4ZSBybS5leGUgbXYuZXhlIGNwLmV4ZQorZW14bG9hZCAtbSAzMCB1bmlxLmV4ZSBiYXNlbmFtZS5leGUgc29ydC5leGUgYXdrLmV4ZSBlY2hvLmV4ZQorCisKK0VPRgorCiskY2hlY2tpbmdfcGF0aCA9IDA7CisKK3doaWxlICg8PikgeworICBpZiAoL2ZvclxzKyhcdyspXHMraW5ccypcJChQQVRIfGFjX2R1bW15KVxzKjsvKSB7CisgICAgJGNoZWNraW5nX3BhdGggPSAxOworICAgICR2YXJuYW1lID0gJDE7CisgICAgJHN1YnN0PSA8PEVPUworJHZhcm5hbWU9ImBlY2hvIC1FIFxcIlwkJHZhcm5hbWVcXCIgfCB0ciBcXFxcXFxcXFxcXFxcXFxcIC8gYCIKK0VPUworICB9IAorICBpZiAoL2lmXHMrdGVzdFxzKy16XHMrXCJcJElOU1RBTExcIi8pIHsKKyAgICAkY2hlY2tpbmdfaW5zdGFsbCA9IDE7CisgIH0gCisgICRjaGVja2luZ19pbnN0YWxsID0gJGNoZWNraW5nX3BhdGggPSAwIGlmIC9eXHMqZG9uZVxzKiQvOworICAjIFdlIHdhbnQgdG8gY3JlYXRlIGFuIGV4dHJhIGxpbmUgbGlrZSB0aGlzIG9uZToKKyMgICBhY19kaXI9ImBlY2hvIC1FIFwiJGFjX2RpclwiIHwgdHIgXFxcXFxcXFwgLyBgIgorICBze14oKFxzKilpZlxzK3Rlc3QpXHMqLWZccyooXCQkdmFybmFtZS9cUyspXHMqO30KKyAgIHskMiRzdWJzdCQxIC1mICQzIC1vIC1mICQzLmV4ZSA7fQorICAgICAgaWYgJGNoZWNraW5nX3BhdGg7CSMgQ2hlY2tpbmcgZm9yIGV4ZWN1dGFibGVzCisgICMgY2hhbmdlIHwvdXNyL3NiaW4vKnwgdG8gfC91c3Ivc2Jpbi8qfD86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSp8CisgICMgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRvIHNraXAgKHdpdGggYm90aCBjYXNlcykKKyAgc3tcUXwvdXNyL3NiaW4vKnx9CisgICB7fC91c3Ivc2Jpbi8qfD86W1xcXFwvXW9zMltcXFxcL11pbnN0YWxsW1xcXFwvXSp8PzpbXFxcXC9dT1MyW1xcXFwvXUlOU1RBTExbXFxcXC9dKnx9CisgICAgICBpZiAkY2hlY2tpbmdfaW5zdGFsbDsJIyBEbyBub3QgYWNjZXB0IGQ6L29zMi9pbnN0YWxsL2luc3RhbGwuZXhlCisgIHMvXihob3N0fGJ1aWxkKT1OT05FJC8kMT14ODYtZW14LW9zMi87CSMgTWFrZSBkZWZhdWx0IGhvc3QvYnVpbGQKKyAgcy8iXCRce0lGU306IiQvIlwke0lGU307Ii87CSMgRml4IElGUyBsaW5lCisgIHMvXGJJRlM9XCI6XCIkL0lGUz0iOyIvOwkjIEZpeCBhbm90aGVyIElGUyBsaW5lCisgIHMvXGJ0ZXN0XHMrLXNccytjb25mdGVzdFxiL3Rlc3QgLWYgY29uZnRlc3QvZzsgIyBGaXggZXhlIHRlc3QKKyAgIyBUaGlzIG9uZSBpcyBuZWVkZWQgZm9yIGN1cnNlczoKKyAgcy9eXHMqaG9zdD1gLipcJGFjX2NvbmZpZ19zdWIgXCRob3N0X2FsaWFzYC8kJlxuaWYgdGVzdCAteiAiXCRob3N0IjsgdGhlbiBob3N0PVwkaG9zdF9hbGlhczsgZmkvOworICBzLC9iaW4vc2goPyFbL1x3XSksc2gsZzsKKyAgcyxeKFxzKi91c3Ivc2Jpbi9zZW5kbWFpbFxzKilcXCQsJDEgImB3aGVuY2Ugc2VuZG1haWwgfCB0ciAnXFxcXFxcXFwnIC8gYCIgXFwsOworICBwcmludDsKK30KKworX19FTkRfXworCitDaGFuZ2VzOgk5OC8xMSA6IHN1cHBvcnQgY2hlY2sgZm9yIGV4ZWN1dGFibGVzIGluIG5jdXJzZXMuCisJCTk5LzIgIDogc3VwcG9ydCBJTlNUQUxMLCAKKwkJCW5ldyBJRlM9JzonIHN0eWxlCisJCTk5LzExIDogZmluZCBzZW5kbWFpbAorCQkwMC8wMSA6IGV4cG9ydCBDT05GSUdfU0hFTEwKKwkJMDAvMTAgOiBuZXcgc3ludGF4IGZvciBob3N0PWAuLi5gIGxpbmUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Rpc3QubWsgYi9uY3Vyc2VzLTUuNy9kaXN0Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MWQ3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kaXN0Lm1rCkBAIC0wLDAgKzEsMTY1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogZGlzdC5tayx2IDEuNjcxIDIwMDgvMTEvMDIgMDA6NTg6MzggdG9tIEV4cCAkCisjIE1ha2VmaWxlIGZvciBjcmVhdGluZyBuY3Vyc2VzIGRpc3RyaWJ1dGlvbnMuCisjCisjIFRoaXMgb25seSBuZWVkcyB0byBiZSB1c2VkIGRpcmVjdGx5IGFzIGEgbWFrZWZpbGUgYnkgZGV2ZWxvcGVycywgYnV0CisjIGNvbmZpZ3VyZSBtaW5lcyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciBvdXQgb2YgaGVyZS4gIFRvIG1vdmUKKyMgdG8gYSBuZXcgdmVyc2lvbiBudW1iZXIsIGp1c3QgZWRpdCB0aGlzIGZpbGUgYW5kIHJ1biBjb25maWd1cmUuCisjCitTSEVMTCA9IC9iaW4vc2gKKworIyBUaGVzZSBkZWZpbmUgdGhlIG1ham9yL21pbm9yL3BhdGNoIHZlcnNpb25zIG9mIG5jdXJzZXMuCitOQ1VSU0VTX01BSk9SID0gNQorTkNVUlNFU19NSU5PUiA9IDcKK05DVVJTRVNfUEFUQ0ggPSAyMDA4MTEwMgorCisjIFdlIGRvbid0IGFwcGVuZCB0aGUgcGF0Y2ggdG8gdGhlIHZlcnNpb24sIHNpbmNlIHRoaXMgb25seSBhcHBsaWVzIHRvIHJlbGVhc2VzCitWRVJTSU9OID0gJChOQ1VSU0VTX01BSk9SKS4kKE5DVVJTRVNfTUlOT1IpCisKKyMgVGhlIG1vc3QgcmVjZW50IGh0bWwgZmlsZXMgd2VyZSBnZW5lcmF0ZWQgd2l0aCBseW54IDIuOC42LCB1c2luZyBuY3Vyc2VzCisjIGNvbmZpZ3VyZWQgd2l0aAorIwktLXdpdGhvdXQtbWFucGFnZS1yZW5hbWVzCisjIG9uIERlYmlhbi90ZXN0aW5nLiAgVGhlIC1zY3JvbGxiYXIgYW5kIC13aWR0aCBvcHRpb25zIGFyZSB1c2VkIHRvIG1ha2UgbHlueAorIyB1c2UgNzkgY29sdW1ucyBhcyBpdCBkaWQgaW4gMi44LjUgYW5kIGJlZm9yZS4KK0RVTVAJPSBseW54IC1kdW1wIC1zY3JvbGxiYXI9MCAtd2lkdGg9NzkKK0RVTVAyCT0gJChEVU1QKSAtbm9saXN0CisKK0dOQVRIVE1MPSBgdHlwZSAtcCBnbmF0aHRtbCB8fCB0eXBlIC1wIGduYXRodG1sLnBsYAorCisjIG1hbjJodG1sIDMuMC4xIGlzIGEgUGVybCBzY3JpcHQgd2hpY2ggYXNzdW1lcyB0aGF0IHBhZ2VzIGFyZSBmaXhlZCBzaXplLgorIyBOb3QgYWxsIG1hbiBwcm9ncmFtcyBhZ3JlZSB3aXRoIHRoaXMgYXNzdW1wdGlvbjsgc29tZSB1c2UgaGFsZi1zcGFjaW5nLCB3aGljaAorIyBoYXMgdGhlIGVmZmVjdCBvZiBsZW5ndGhlbmluZyB0aGUgdGV4dCBwb3J0aW9uIG9mIHRoZSBwYWdlIC0tIHNvIG1hbjJodG1sCisjIHdvdWxkIHJlbW92ZSBzb21lIHRleHQuICBUaGUgbWFuIHByb2dyYW0gb24gUmVkaGF0IDYuMSBhcHBlYXJzIHRvIHdvcmsgd2l0aAorIyBtYW4yaHRtbCBpZiB3ZSBzZXQgdGhlIHRvcC9ib3R0b20gbWFyZ2lucyB0byA2ICh0aGUgZGVmYXVsdCBpcyA3KS4gIE5ld2VyCisjIHZlcnNpb25zIG9mICdtYW4nIG9uIExpbnV4IGxlYXZlIG5vIG1hcmdpbiAoYW5kIG1ha2UgaXQgaGFyZGVyIHRvIHN5bmMgd2l0aAorIyBwYWdlcykuCitNQU4ySFRNTD0gbWFuMmh0bWwgLWJvdG09MCAtdG9wbT0wIC1jZ2l1cmwgJyQkdGl0bGUuJCRzZWN0aW9uJCRzdWJzZWN0aW9uLmh0bWwnCisKK0FMTAk9IEFOTk9VTkNFIGRvYy9odG1sL2Fubm91bmNlLmh0bWwgZG9jL25jdXJzZXMtaW50cm8uZG9jIGRvYy9oYWNrZ3VpZGUuZG9jIG1hbmh0bWwgYWRhaHRtbAorCithbGwgOgkkKEFMTCkKKworZGlzdDoJJChBTEwpCisJKGNkIC4uOyAgdGFyIGN2ZiBuY3Vyc2VzLSQoVkVSU0lPTikudGFyIGBzZWQgPG5jdXJzZXMtJChWRVJTSU9OKS9NQU5JRkVTVCAncy9eLi9uY3Vyc2VzLSQoVkVSU0lPTikvJ2A7ICBnemlwIG5jdXJzZXMtJChWRVJTSU9OKS50YXIpCisKK2Rpc3RjbGVhbjoKKwlybSAtZiAkKEFMTCkgc3Vic3QudG1wIHN1YnN0LnNlZAorCisjIERvbid0IG1lc3Mgd2l0aCBhbm5vdW5jZS5odG1sLmluIHVubGVzcyB5b3UgaGF2ZSBseW54IGF2YWlsYWJsZSEKK2RvYy9odG1sL2Fubm91bmNlLmh0bWw6IGFubm91bmNlLmh0bWwuaW4KKwlzZWQgJ3MsQFZFUlNJT05ALCQoVkVSU0lPTiksJyA8YW5ub3VuY2UuaHRtbC5pbiA+ICRACisKK0FOTk9VTkNFIDogZG9jL2h0bWwvYW5ub3VuY2UuaHRtbAorCSQoRFVNUCkgZG9jL2h0bWwvYW5ub3VuY2UuaHRtbCA+ICRACisKK2RvYy9uY3Vyc2VzLWludHJvLmRvYzogZG9jL2h0bWwvbmN1cnNlcy1pbnRyby5odG1sCisJJChEVU1QMikgZG9jL2h0bWwvbmN1cnNlcy1pbnRyby5odG1sID4gJEAKK2RvYy9oYWNrZ3VpZGUuZG9jOiBkb2MvaHRtbC9oYWNrZ3VpZGUuaHRtbAorCSQoRFVNUDIpIGRvYy9odG1sL2hhY2tndWlkZS5odG1sID4gJEAKKworIyBUaGlzIGlzIHRoZSBvcmlnaW5hbCBjb21tYW5kOgorIwlNQU5QUk9HCT0gdGJsIHwgbnJvZmYgLW1hbgorIworIyBUaGlzIGhhcHBlbnMgdG8gd29yayBmb3IgZ3JvZmYgMS4xOC4xIG9uIERlYmlhbi4gIEF0IHNvbWUgcG9pbnQgZ3JvZmYncworIyBtYWludGFpbmVyIGNoYW5nZWQgdGhlIGxpbmUtbGVuZ3RoICh3ZSBkbyBub3Qgd2FudC9uZWVkIHRoYXQgaGVyZSkuCisjCisjIFRoZSBkaXN0cmlidXRlZCBodG1sIGZpbGVzIGFyZSBmb3JtYXR0ZWQgdXNpbmcKKyMJY29uZmlndXJlIC0td2l0aG91dC1tYW5wYWdlLXJlbmFtZXMKKyMKKyMgVGhlIGVkaXRfbWFuLnNlZCBzY3JpcHQgaXMgYnVpbHQgYXMgYSBzaWRlLWVmZmVjdCBvZiBpbnN0YWxsaW5nIHRoZSBtYW5wYWdlcy4KKyMgSWYgdGhhdCBjb25mbGljdHMgd2l0aCB0aGUgLS13aXRob3V0LW1hbnBhZ2UtcmVuYW1lcywgeW91IGNhbiBpbnN0YWxsIHRob3NlCisjIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uIHVzaW5nIHRoZSAtLXdpdGgtaW5zdGFsbC1wcmVmaXggb3B0aW9uIG9mIHRoZQorIyBjb25maWd1cmUgc2NyaXB0LgorTUFOUFJPRwk9IHRibCB8IG5yb2ZmIC1tYW5kb2MgLXJMTD02NW4gLXJMVD03MW4gLVRhc2NpaQorCittYW5odG1sOgorCUBybSAtZiBkb2MvaHRtbC9tYW4vKi5odG1sCisJQG1rZGlyIC1wIGRvYy9odG1sL21hbgorCUBybSAtZiBzdWJzdC50bXAgOworCUBmb3IgZiBpbiBtYW4vKi5bMC05XSo7IGRvIFwKKwkgICBtPWBiYXNlbmFtZSAkJGZgIDtcCisJICAgeD1gZWNobyAkJG0gfCBhd2sgLUYuICd7cHJpbnQgJCQyO30nYCA7XAorCSAgIHh1PWBlY2hvICQkeCB8IGRkIGNvbnY9dWNhc2UgMj4vZGV2L251bGxgIDtcCisJICAgaWYgWyAiJCR7eH0iICE9ICIkJHt4dX0iIF07IHRoZW4gXAorCSAgICAgZWNobyAicy8kJHt4dX0vJCR7eH0vZyIgPj4gc3Vic3QudG1wIDtcCisJICAgZmkgO1wKKwlkb25lCisJIyBjaGFuZ2Ugc29tZSB0aGluZ3MgdG8gbWFrZSB3ZWJsaW50IGhhcHB5OgorCUBjYXQgbWFuX2FsaWFzLnNlZCAgICAgICAgICAgPj4gc3Vic3QudG1wCisJQGVjaG8gJ3MvPEI+LzxTVFJPTkc+L2cnICAgICA+PiBzdWJzdC50bXAKKwlAZWNobyAncy88XC9CPi88XC9TVFJPTkc+L2cnID4+IHN1YnN0LnRtcAorCUBlY2hvICdzLzxJPi88RU0+L2cnICAgICAgICAgPj4gc3Vic3QudG1wCisJQGVjaG8gJ3MvPFwvST4vPFwvRU0+L2cnICAgICA+PiBzdWJzdC50bXAKKwlAbWlzYy9jc29ydCA8IHN1YnN0LnRtcCB8IHVuaXEgPiBzdWJzdC5zZWQKKwlAZWNobyAnLzxcL1RJVExFPi9hXCcgPj4gc3Vic3Quc2VkCisJQGVjaG8gJzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj5cJyA+PiBzdWJzdC5zZWQKKwlAZWNobyAnPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0XC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPicgPj4gc3Vic3Quc2VkCisJQHJtIC1mIHN1YnN0LnRtcAorCUBmb3IgZiBpbiBtYW4vKi5bMC05XSogOyBkbyBcCisJICAgbT1gYmFzZW5hbWUgJCRmYCA7XAorCSAgIFQ9YGVncmVwICdeLlRIJyAkJGZ8c2VkIC1lICdzL14uVEggLy8nIC1lIHMnLyIvL2cnIC1lICdzL1sgCV1cKyQkLy8nYCA7IFwKKwkgICBnPSQke219Lmh0bWwgO1wKKwkgICBpZiBbIC1mIGRvYy9odG1sLyQkZyBdOyB0aGVuIGNobW9kICt3IGRvYy9odG1sLyQkZzsgZmk7XAorCSAgIGVjaG8gIkNvbnZlcnRpbmcgJCRtIHRvIEhUTUwiIDtcCisJICAgZWNobyAnPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4nID4gZG9jL2h0bWwvbWFuLyQkZyA7XAorCSAgIGVjaG8gJzwhLS0gJyA+PiBkb2MvaHRtbC9tYW4vJCRnIDtcCisJICAgZWdyZXAgJ14uXFwiW14jXScgJCRmIHwgXAorCSAgIAlzZWQJLWUgJ3MvXCQkL0AvZycgXAorCQkJLWUgJ3MvXi4uLi8gICovJyBcCisJCQktZSAncy88L1wmbHQ7L2cnIFwKKwkJCS1lICdzLz4vXCZndDsvZycgXAorCSAgID4+IGRvYy9odG1sL21hbi8kJGcgO1wKKwkgICBlY2hvICctLT4nID4+IGRvYy9odG1sL21hbi8kJGcgO1wKKwkgICAuL2VkaXRfbWFuLnNoIG5vcm1hbCBlZGl0aW5nIC91c3IvbWFuIG1hbiAkJGYgfCAkKE1BTlBST0cpIHwgdHIgJ1wyNTUnICctJyB8ICQoTUFOMkhUTUwpIC10aXRsZSAiJCRUIiB8IFwKKwkgICBzZWQgLWYgc3Vic3Quc2VkIHxcCisJICAgc2VkIC1lICdzLyJjdXJzZXMuM3guaHRtbCIvIm5jdXJzZXMuM3guaHRtbCIvZycgXAorCSAgID4+IGRvYy9odG1sL21hbi8kJGcgO1wKKwlkb25lCisJQHJtIC1mIHN1YnN0LnNlZAorCisjCisjIFBsZWFzZSBub3RlIHRoYXQgdGhpcyB0YXJnZXQgY2FuIG9ubHkgYmUgcHJvcGVybHkgYnVpbHQgaWYgdGhlIGJ1aWxkIG9mIHRoZQorIyBBZGE5NSBzdWJkaXIgaGFzIGJlZW4gZG9uZS4gIFRoZSByZWFzb24gaXMsIHRoYXQgdGhlIGduYXRodG1sIHRvb2wgdXNlcyB0aGUKKyMgLmFsaSBmaWxlcyBnZW5lcmF0ZWQgYnkgdGhlIEFkYTk1IGNvbXBpbGVyIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gIFRoZXNlCisjIC5hbGkgZmlsZXMgY29udGFpbiBjcm9zcyByZWZlcmVuY2luZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBnbmF0aHRtbC4KK2FkYWh0bWw6CisJaWYgWyAhIC16ICIkKEdOQVRIVE1MKSIgXTsgdGhlbiBcCisJICAoY2QgLi9BZGE5NS9nZW4gOyBtYWtlIGh0bWwpIDtcCisJZmkKKworIyBUaGlzIG9ubHkgd29ya3Mgb24gYSBjbGVhbiBzb3VyY2UgdHJlZSwgb2YgY291cnNlLgorTUFOSUZFU1Q6CisJLXJtIC1mICRACisJdG91Y2ggJEAKKwlmaW5kIC4gLXR5cGUgZiAtcHJpbnQgfG1pc2MvY3NvcnQgfCBmZ3JlcCAtdiAubHNtIHxmZ3JlcCAtdiAuc3BlYyA+JEAKKworVEFHUzoKKwlldGFncyAqLyouW2NoXQorCisjIE1ha2VmaWxlIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2hhY2tndWlkZS5kb2MgYi9uY3Vyc2VzLTUuNy9kb2MvaGFja2d1aWRlLmRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTBiYTVjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2hhY2tndWlkZS5kb2MKQEAgLTAsMCArMSw2ODIgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQSBIYWNrZXIncyBHdWlkZSB0byBOQ1VSU0VTCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudHMKKworICAgICAqIEFic3RyYWN0CisgICAgICogT2JqZWN0aXZlIG9mIHRoZSBQYWNrYWdlCisgICAgICAgICAgKyBXaHkgU3lzdGVtIFYgQ3Vyc2VzPworICAgICAgICAgICsgSG93IHRvIERlc2lnbiBFeHRlbnNpb25zCisgICAgICogUG9ydGFiaWxpdHkgYW5kIENvbmZpZ3VyYXRpb24KKyAgICAgKiBEb2N1bWVudGF0aW9uIENvbnZlbnRpb25zCisgICAgICogSG93IHRvIFJlcG9ydCBCdWdzCisgICAgICogQSBUb3VyIG9mIHRoZSBOY3Vyc2VzIExpYnJhcnkKKyAgICAgICAgICArIExpYnJhcnkgT3ZlcnZpZXcKKyAgICAgICAgICArIFRoZSBFbmdpbmUgUm9vbQorICAgICAgICAgICsgS2V5Ym9hcmQgSW5wdXQKKyAgICAgICAgICArIE1vdXNlIEV2ZW50cworICAgICAgICAgICsgT3V0cHV0IGFuZCBTY3JlZW4gVXBkYXRpbmcKKyAgICAgKiBUaGUgRm9ybXMgYW5kIE1lbnUgTGlicmFyaWVzCisgICAgICogQSBUb3VyIG9mIHRoZSBUZXJtaW5mbyBDb21waWxlcgorICAgICAgICAgICsgVHJhbnNsYXRpb24gb2YgTm9uLXVzZSBDYXBhYmlsaXRpZXMKKyAgICAgICAgICArIFVzZSBDYXBhYmlsaXR5IFJlc29sdXRpb24KKyAgICAgICAgICArIFNvdXJjZS1Gb3JtIFRyYW5zbGF0aW9uCisgICAgICogT3RoZXIgVXRpbGl0aWVzCisgICAgICogU3R5bGUgVGlwcyBmb3IgRGV2ZWxvcGVycworICAgICAqIFBvcnRpbmcgSGludHMKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdAorCisgICBUaGlzIGRvY3VtZW50IGlzIGEgaGFja2VyJ3MgdG91ciBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5IGFuZCB1dGlsaXRpZXMuCisgICBJdCAgZGlzY3Vzc2VzICBkZXNpZ24gIHBoaWxvc29waHksICBpbXBsZW1lbnRhdGlvbiAgbWV0aG9kcywgIGFuZCAgdGhlCisgICBjb252ZW50aW9ucyAgdXNlZCAgZm9yICBjb2RpbmcgIGFuZCAgZG9jdW1lbnRhdGlvbi4gIEl0IGlzIHJlY29tbWVuZGVkCisgICByZWFkaW5nICBmb3IgIGFueW9uZSAgd2hvICBpcyAgaW50ZXJlc3RlZCAgaW4gIHBvcnRpbmcsICBleHRlbmRpbmcgIG9yCisgICBpbXByb3ZpbmcgdGhlIHBhY2thZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBvZiB0aGUgUGFja2FnZQorCisgICBUaGUgb2JqZWN0aXZlIG9mIHRoZSBuY3Vyc2VzIHBhY2thZ2UgaXMgdG8gcHJvdmlkZSBhIGZyZWUgc29mdHdhcmUgQVBJCisgICBmb3IgY2hhcmFjdGVyLWNlbGwgdGVybWluYWxzIGFuZCB0ZXJtaW5hbCBlbXVsYXRvcnMgd2l0aCB0aGUgZm9sbG93aW5nCisgICBjaGFyYWN0ZXJpc3RpY3M6CisgICAgICogU291cmNlLWNvbXBhdGlibGUgICAgd2l0aCAgICBoaXN0b3JpY2FsICAgY3Vyc2VzICAgaW1wbGVtZW50YXRpb25zCisgICAgICAgKGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgQlNEIGN1cnNlcyBhbmQgU3lzdGVtIFYgY3Vyc2VzLgorICAgICAqIENvbmZvcm1hbnQgIHdpdGggdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgaXNzdWVkIGFzIHBhcnQgb2YgWFBHNCBieQorICAgICAgIFgvT3Blbi4KKyAgICAgKiBIaWdoLXF1YWxpdHkgIC0tICBzdGFibGUgYW5kIHJlbGlhYmxlIGNvZGUsIHdpZGUgcG9ydGFiaWxpdHksIGdvb2QKKyAgICAgICBwYWNrYWdpbmcsIHN1cGVyaW9yIGRvY3VtZW50YXRpb24uCisgICAgICogRmVhdHVyZWZ1bCAgLS0gIHNob3VsZCAgZWxpbWluYXRlICBhcyAgbXVjaCAgb2YgIHRoZSBkcnVkZ2VyeSBvZiBDCisgICAgICAgaW50ZXJmYWNlIHByb2dyYW1taW5nIGFzIHBvc3NpYmxlLCBmcmVlaW5nIHByb2dyYW1tZXJzIHRvIHRoaW5rIGF0CisgICAgICAgYSBoaWdoZXIgbGV2ZWwgb2YgZGVzaWduLgorCisgICBUaGVzZSAgb2JqZWN0aXZlcyAgYXJlICBpbiAgcHJpb3JpdHkgIG9yZGVyLiAgU28sICBmb3IgZXhhbXBsZSwgc291cmNlCisgICBjb21wYXRpYmlsaXR5ICB3aXRoICBvbGRlciAgdmVyc2lvbiAgbXVzdCAgdHJ1bXAgIGZlYXR1cmVmdWxuZXNzIC0tIHdlCisgICBjYW5ub3QgIGFkZCAgZmVhdHVyZXMgIGlmICBpdCAgbWVhbnMgIGJyZWFraW5nICB0aGUgcG9ydGlvbiBvZiB0aGUgQVBJCisgICBjb3JyZXNwb25kaW5nIHRvIGhpc3RvcmljYWwgY3Vyc2VzIHZlcnNpb25zLgorCitXaHkgU3lzdGVtIFYgQ3Vyc2VzPworCisgICBXZSAgdXNlZCBTeXN0ZW0gViBjdXJzZXMgYXMgYSBtb2RlbCwgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGVpciBBUEksIGluCisgICBvcmRlciB0byBmdWxmaWxsIHRoZSBmaXJzdCB0d28gb2JqZWN0aXZlcy4KKworICAgU3lzdGVtICBWICBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGNhbiBzdXBwb3J0IEJTRCBjdXJzZXMgcHJvZ3JhbXMgd2l0aAorICAganVzdCBhIHJlY29tcGlsYXRpb24sIHNvIGJ5IGNhcHR1cmluZyB0aGUgU3lzdGVtIFYgQVBJIHdlIGFsc28gY2FwdHVyZQorICAgQlNEJ3MuCisKKyAgIE1vcmUgIGltcG9ydGFudGx5ICBmb3IgIHRoZSAgZnV0dXJlLCB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBpc3N1ZWQgYnkKKyAgIFgvT3BlbiAgaXMgIGV4cGxpY2l0bHkgYW5kIGNsb3NlbHkgbW9kZWxlZCBvbiBTeXN0ZW0gVi4gU28gY29uZm9ybWFuY2UKKyAgIHdpdGggU3lzdGVtIFYgdG9vayB1cyBtb3N0IG9mIHRoZSB3YXkgdG8gYmFzZS1sZXZlbCBYU0kgY29uZm9ybWFuY2UuCisKK0hvdyB0byBEZXNpZ24gRXh0ZW5zaW9ucworCisgICBUaGUgIHRoaXJkICBvYmplY3RpdmUgKHN0YW5kYXJkcyBjb25mb3JtYW5jZSkgcmVxdWlyZXMgdGhhdCBpdCBiZSBlYXN5CisgICB0byAgY29uZGl0aW9uICBzb3VyY2UgIGNvZGUgIHVzaW5nICBuY3Vyc2VzICBzbyAgdGhhdCAgdGhlICBhYnNlbmNlIG9mCisgICBub25zdGFuZGFyZCBleHRlbnNpb25zIGRvZXMgbm90IGJyZWFrIHRoZSBjb2RlLgorCisgICBBY2NvcmRpbmdseSwgIHdlICBoYXZlICBhICBwb2xpY3kgb2YgYXNzb2NpYXRpbmcgd2l0aCBlYWNoIG5vbnN0YW5kYXJkCisgICBleHRlbnNpb24gIGEgIGZlYXR1cmUgIG1hY3JvLCBzbyB0aGF0IG5jdXJzZXMgY2xpZW50IGNvZGUgY2FuIHVzZSB0aGlzCisgICBtYWNybyAgdG8gIGNvbmRpdGlvbiAgaW4gIG9yICBvdXQgIHRoZSAgY29kZSB0aGF0IHJlcXVpcmVzIHRoZSBuY3Vyc2VzCisgICBleHRlbnNpb24uCisKKyAgIEZvciAgZXhhbXBsZSwgIHRoZXJlIGlzIGEgbWFjcm8gTkNVUlNFU19NT1VTRV9WRVJTSU9OIHdoaWNoIFhTSSBDdXJzZXMKKyAgIGRvZXMgIG5vdCAgZGVmaW5lLCBidXQgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgbmN1cnNlcyBsaWJyYXJ5IGhlYWRlci4KKyAgIFlvdSBjYW4gdXNlIHRoaXMgdG8gY29uZGl0aW9uIHRoZSBjYWxscyB0byB0aGUgbW91c2UgQVBJIGNhbGxzLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydGFiaWxpdHkgYW5kIENvbmZpZ3VyYXRpb24KKworICAgQ29kZSAgd3JpdHRlbiAgZm9yICBuY3Vyc2VzIG1heSBhc3N1bWUgYW4gQU5TSS1zdGFuZGFyZCBDIGNvbXBpbGVyIGFuZAorICAgUE9TSVgtY29tcGF0aWJsZSAgT1MgIGludGVyZmFjZS4gIEl0IG1heSBhbHNvIGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgYQorICAgU3lzdGVtLVYtY29tcGF0aWJsZSBzZWxlY3QoMikgY2FsbC4KKworICAgV2UgZW5jb3VyYWdlIChidXQgZG8gbm90IHJlcXVpcmUpIGRldmVsb3BlcnMgdG8gbWFrZSB0aGUgY29kZSBmcmllbmRseQorICAgdG8gbGVzcy1jYXBhYmxlIFVOSVggZW52aXJvbm1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisgICBXZSAgZW5jb3VyYWdlICBkZXZlbG9wZXJzICB0byAgc3VwcG9ydCAgT1Mtc3BlY2lmaWMgIG9wdGltaXphdGlvbnMgYW5kCisgICBtZXRob2RzIG5vdCBhdmFpbGFibGUgdW5kZXIgUE9TSVgvQU5TSSwgcHJvdmlkZWQgb25seSB0aGF0OgorICAgICAqIEFsbCAgc3VjaCAgY29kZSAgaXMgcHJvcGVybHkgY29uZGl0aW9uZWQgc28gdGhlIGJ1aWxkIHByb2Nlc3MgZG9lcworICAgICAgIG5vdCBhdHRlbXB0IHRvIGNvbXBpbGUgaXQgdW5kZXIgYSBwbGFpbiBBTlNJL1BPU0lYIGVudmlyb25tZW50LgorICAgICAqIEFkZGluZyAgICBzdWNoICAgaW1wbGVtZW50YXRpb24gICBtZXRob2RzICAgZG9lcyAgIG5vdCAgIGludHJvZHVjZQorICAgICAgIGluY29tcGF0aWJpbGl0aWVzIGluIHRoZSBuY3Vyc2VzIEFQSSBiZXR3ZWVuIHBsYXRmb3Jtcy4KKworICAgV2UgIHVzZSBHTlUgYXV0b2NvbmYoMSkgYXMgYSB0b29sIHRvIGRlYWwgd2l0aCBwb3J0YWJpbGl0eSBpc3N1ZXMuIFRoZQorICAgcmlnaHQgd2F5IHRvIGxldmVyYWdlIGFuIE9TLXNwZWNpZmljIGZlYXR1cmUgaXMgdG8gbW9kaWZ5IHRoZSBhdXRvY29uZgorICAgc3BlY2lmaWNhdGlvbiAgZmlsZXMgIChjb25maWd1cmUuaW4gIGFuZCAgYWNsb2NhbC5tNCkgIHRvIHNldCB1cCBhIG5ldworICAgZmVhdHVyZSBtYWNybywgd2hpY2ggeW91IHRoZW4gdXNlIHRvIGNvbmRpdGlvbiB5b3VyIGNvZGUuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gQ29udmVudGlvbnMKKworICAgVGhlcmUgIGFyZSAgdGhyZWUga2luZHMgb2YgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWNrYWdlLgorICAgRWFjaCBoYXMgYSBkaWZmZXJlbnQgcHJlZmVycmVkIGZvcm1hdDoKKyAgICAgKiBQYWNrYWdlLWludGVybmFsIGZpbGVzIChSRUFETUUsIElOU1RBTEwsIFRPLURPIGV0Yy4pCisgICAgICogTWFudWFsIHBhZ2VzLgorICAgICAqIEV2ZXJ5dGhpbmcgZWxzZSAoaS5lLiwgbmFycmF0aXZlIGRvY3VtZW50YXRpb24pLgorCisgICBPdXIgY29udmVudGlvbnMgYXJlIHNpbXBsZToKKyAgICAxLiBNYWludGFpbiBwYWNrYWdlLWludGVybmFsIGZpbGVzIGluIHBsYWluIHRleHQuIFRoZSBleHBlY3RlZCB2aWV3ZXIKKyAgICAgICBmb3IgIHRoZW0gIG1vcmUoMSkgIG9yICBhbiAgZWRpdG9yICB3aW5kb3c7ICB0aGVyZSdzICBubyAgcG9pbnQgaW4KKyAgICAgICBlbGFib3JhdGUgbWFyay11cC4KKyAgICAyLiBNYXJrICB1cCBtYW51YWwgcGFnZXMgaW4gdGhlIG1hbiBtYWNyb3MuIFRoZXNlIGhhdmUgdG8gYmUgdmlld2FibGUKKyAgICAgICB0aHJvdWdoIHRyYWRpdGlvbmFsIG1hbigxKSBwcm9ncmFtcy4KKyAgICAzLiBXcml0ZSBldmVyeXRoaW5nIGVsc2UgaW4gSFRNTC4KKworICAgV2hlbiAgaW4gIGRvdWJ0LCAgSFRNTGl6ZSAgYSAgbWFzdGVyIGFuZCB1c2UgbHlueCgxKSB0byBnZW5lcmF0ZSBwbGFpbgorICAgQVNDSUkgKGFzIHdlIGRvIGZvciB0aGUgYW5ub3VuY2VtZW50IGRvY3VtZW50KS4KKworICAgVGhlIHJlYXNvbiBmb3IgY2hvb3NpbmcgSFRNTCBpcyB0aGF0IGl0J3MgKGEpIHdlbGwtYWRhcHRlZCBmb3Igb24tbGluZQorICAgYnJvd3NpbmcgdGhyb3VnaCB2aWV3ZXJzIHRoYXQgYXJlIGV2ZXJ5d2hlcmU7IChiKSBtb3JlIGVhc2lseSByZWFkYWJsZQorICAgYXMgIHBsYWluICB0ZXh0ICB0aGFuIG1vc3Qgb3RoZXIgbWFyay11cHMsIGlmIHlvdSBkb24ndCBoYXZlIGEgdmlld2VyOworICAgYW5kICAgKGMpICAgY2FycmllcyAgIGVub3VnaCAgaW5mb3JtYXRpb24gIHRoYXQgIHlvdSAgY2FuICBnZW5lcmF0ZSAgYQorICAgbmljZS1sb29raW5nICBwcmludGVkICB2ZXJzaW9uICBmcm9tICBpdC4gIEFsc28sICBvZiAgY291cnNlLCAgaXQgbWFrZQorICAgZXhwb3J0aW5nIHRoaW5ncyBsaWtlIHRoZSBhbm5vdW5jZW1lbnQgZG9jdW1lbnQgdG8gV1dXIHByZXR0eSB0cml2aWFsLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gUmVwb3J0IEJ1Z3MKKworICAgVGhlICByZXBvcnRpbmcgIGFkZHJlc3MgIGZvciAgYnVncyAgaXMgIGJ1Zy1uY3Vyc2VzQGdudS5vcmcuIFRoaXMgaXMgYQorICAgbWFqb3Jkb21vICBsaXN0OyAgdG8gam9pbiwgd3JpdGUgdG8gYnVnLW5jdXJzZXMtcmVxdWVzdEBnbnUub3JnIHdpdGggYQorICAgbWVzc2FnZSBjb250YWluaW5nIHRoZSBsaW5lOgorICAgICAgICAgICAgIHN1YnNjcmliZSA8bmFtZT5APGhvc3QuZG9tYWluPgorCisgICBUaGUgIG5jdXJzZXMgIGNvZGUgaXMgbWFpbnRhaW5lZCBieSBhIHNtYWxsIGdyb3VwIG9mIHZvbHVudGVlcnMuIFdoaWxlCisgICB3ZSAgdHJ5ICBvdXIgIGJlc3QgdG8gZml4IGJ1Z3MgcHJvbXB0bHksIHdlIHNpbXBseSBkb24ndCBoYXZlIGEgbG90IG9mCisgICBob3VycyAgdG8gIHNwZW5kICBvbiAgZWxlbWVudGFyeSAgaGFuZC1ob2xkaW5nLiBXZSByZWx5IG9uIGludGVsbGlnZW50CisgICBjb29wZXJhdGlvbiAgZnJvbSAgb3VyICB1c2Vycy4gIElmICB5b3UgIHRoaW5rIHlvdSBoYXZlIGZvdW5kIGEgYnVnIGluCisgICBuY3Vyc2VzLCAgdGhlcmUgIGFyZSBzb21lIHN0ZXBzIHlvdSBjYW4gdGFrZSBiZWZvcmUgY29udGFjdGluZyB1cyB0aGF0CisgICB3aWxsIGhlbHAgZ2V0IHRoZSBidWcgZml4ZWQgcXVpY2tseS4KKworICAgSW4gIG9yZGVyICB0byAgdXNlICBvdXIgYnVnLWZpeGluZyB0aW1lIGVmZmljaWVudGx5LCB3ZSBwdXQgcGVvcGxlIHdobworICAgc2hvdyB1cyB0aGV5J3ZlIHRha2VuIHRoZXNlIHN0ZXBzIGF0IHRoZSBoZWFkIG9mIG91ciBxdWV1ZS4gVGhpcyBtZWFucworICAgdGhhdCAgaWYgeW91IGRvbid0LCB5b3UnbGwgcHJvYmFibHkgZW5kIHVwIGF0IHRoZSB0YWlsIGVuZCBhbmQgaGF2ZSB0bworICAgd2FpdCBhIHdoaWxlLgorICAgIDEuIERldmVsb3AgYSByZWNpcGUgdG8gcmVwcm9kdWNlIHRoZSBidWcuCisgICAgICAgQnVncyAgd2UgIGNhbiByZXByb2R1Y2UgYXJlIGxpa2VseSB0byBiZSBmaXhlZCB2ZXJ5IHF1aWNrbHksIG9mdGVuCisgICAgICAgd2l0aGluICBkYXlzLiAgVGhlIG1vc3QgZWZmZWN0aXZlIHNpbmdsZSB0aGluZyB5b3UgY2FuIGRvIHRvIGdldCBhCisgICAgICAgcXVpY2sgIGZpeCAgaXMgIGRldmVsb3AgYSB3YXkgd2UgY2FuIGR1cGxpY2F0ZSB0aGUgYmFkIGJlaGF2aW9yIC0tCisgICAgICAgaWRlYWxseSwgIGJ5ICBnaXZpbmcgIHVzIHNvdXJjZSBmb3IgYSBzbWFsbCwgcG9ydGFibGUgdGVzdCBwcm9ncmFtCisgICAgICAgdGhhdCAgYnJlYWtzIHRoZSBsaWJyYXJ5LiAoRXZlbiBiZXR0ZXIgaXMgYSBrZXlzdHJva2UgcmVjaXBlIHVzaW5nCisgICAgICAgb25lIG9mIHRoZSB0ZXN0IHByb2dyYW1zIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4pCisgICAgMi4gVHJ5IHRvIHJlcHJvZHVjZSB0aGUgYnVnIG9uIGEgZGlmZmVyZW50IHRlcm1pbmFsIHR5cGUuCisgICAgICAgSW4gIG91ciBleHBlcmllbmNlLCBtb3N0IG9mIHRoZSBiZWhhdmlvcnMgcGVvcGxlIHJlcG9ydCBhcyBsaWJyYXJ5CisgICAgICAgYnVncyBhcmUgYWN0dWFsbHkgZHVlIHRvIHN1YnRsZSBwcm9ibGVtcyBpbiB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMuCisgICAgICAgVGhpcyBpcyBlc3BlY2lhbGx5IGxpa2VseSB0byBiZSB0cnVlIGlmIHlvdSdyZSB1c2luZyBhIHRyYWRpdGlvbmFsCisgICAgICAgYXN5bmNocm9ub3VzICB0ZXJtaW5hbCAgb3IgUEMtYmFzZWQgdGVybWluYWwgZW11bGF0b3IsIHJhdGhlciB0aGFuCisgICAgICAgeHRlcm0gb3IgYSBVTklYIGNvbnNvbGUgZW50cnkuCisgICAgICAgSXQncyB0aGVyZWZvcmUgZXh0cmVtZWx5IGhlbHBmdWwgaWYgeW91IGNhbiB0ZWxsIHVzIHdoZXRoZXIgb3Igbm90CisgICAgICAgeW91ciAgcHJvYmxlbSAgcmVwcm9kdWNlcyAgb24gb3RoZXIgdGVybWluYWwgdHlwZXMuIFVzdWFsbHkgeW91J2xsCisgICAgICAgaGF2ZSAgYm90aCAgYSAgY29uc29sZSAgdHlwZSAgYW5kICB4dGVybSBhdmFpbGFibGU7IHBsZWFzZSB0ZWxsIHVzCisgICAgICAgd2hldGhlciBvciBub3QgeW91ciBidWcgcmVwcm9kdWNlcyBvbiBib3RoLgorICAgICAgIElmICB5b3UgIGhhdmUgIHh0ZXJtICBhdmFpbGFibGUsICBpdCBpcyBhbHNvIGdvb2QgdG8gY29sbGVjdCB4dGVybQorICAgICAgIHJlcG9ydHMgZm9yIGRpZmZlcmVudCB3aW5kb3cgc2l6ZXMuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHlvdQorICAgICAgIG5vcm1hbGx5ICB1c2UgIGFuIHVudXN1YWwgeHRlcm0gd2luZG93IHNpemUgLS0gYSBzdXJwcmlzaW5nIG51bWJlcgorICAgICAgIG9mIHRoZSBidWdzIHdlJ3ZlIHNlZW4gYXJlIGVpdGhlciB0cmlnZ2VyZWQgb3IgbWFza2VkIGJ5IHRoZXNlLgorICAgIDMuIEdlbmVyYXRlIGFuZCBleGFtaW5lIGEgdHJhY2UgZmlsZSBmb3IgdGhlIGJyb2tlbiBiZWhhdmlvci4KKyAgICAgICBSZWNvbXBpbGUgICB5b3VyICBwcm9ncmFtICB3aXRoICB0aGUgIGRlYnVnZ2luZyAgdmVyc2lvbnMgIG9mICB0aGUKKyAgICAgICBsaWJyYXJpZXMuICBJbnNlcnQgIGEgIHRyYWNlKCkgIGNhbGwgIHdpdGggIHRoZSAgYXJndW1lbnQgIHNldCAgdG8KKyAgICAgICBUUkFDRV9VUERBVEUuICAoU2VlICJXcml0aW5nIFByb2dyYW1zIHdpdGggTkNVUlNFUyIgZm9yIGRldGFpbHMgb24KKyAgICAgICB0cmFjZSAgbGV2ZWxzLikgUmVwcm9kdWNlIHlvdXIgYnVnLCB0aGVuIGxvb2sgYXQgdGhlIHRyYWNlIGZpbGUgdG8KKyAgICAgICBzZWUgd2hhdCB0aGUgbGlicmFyeSB3YXMgYWN0dWFsbHkgZG9pbmcuCisgICAgICAgQW5vdGhlciAgZnJlcXVlbnQgIGNhdXNlICBvZiAgYXBwYXJlbnQgIGJ1Z3MgaXMgYXBwbGljYXRpb24gY29kaW5nCisgICAgICAgZXJyb3JzICB0aGF0ICBjYXVzZSAgdGhlICB3cm9uZyAgdGhpbmdzICB0byAgYmUgcHV0IG9uIHRoZSB2aXJ0dWFsCisgICAgICAgc2NyZWVuLiBMb29raW5nIGF0IHRoZSB2aXJ0dWFsLXNjcmVlbiBkdW1wcyBpbiB0aGUgdHJhY2UgZmlsZSB3aWxsCisgICAgICAgdGVsbCAgeW91ICBpbW1lZGlhdGVseSBpZiB0aGlzIGlzIGhhcHBlbmluZywgYW5kIHNhdmUgeW91IGZyb20gdGhlCisgICAgICAgcG9zc2libGUgIGVtYmFycmFzc21lbnQgb2YgYmVpbmcgdG9sZCB0aGF0IHRoZSBidWcgaXMgaW4geW91ciBjb2RlCisgICAgICAgYW5kIGlzIHlvdXIgcHJvYmxlbSByYXRoZXIgdGhhbiBvdXJzLgorICAgICAgIElmICB0aGUgIHZpcnR1YWwtc2NyZWVuICBkdW1wcyAgbG9vayBjb3JyZWN0IGJ1dCB0aGUgYnVnIHBlcnNpc3RzLAorICAgICAgIGl0J3MgIHBvc3NpYmxlICB0byAgY3JhbmsgdXAgdGhlIHRyYWNlIGxldmVsIHRvIGdpdmUgbW9yZSBhbmQgbW9yZQorICAgICAgIGluZm9ybWF0aW9uICBhYm91dCAgdGhlICBsaWJyYXJ5J3MgIHVwZGF0ZSBhY3Rpb25zIGFuZCB0aGUgY29udHJvbAorICAgICAgIHNlcXVlbmNlcyAgaXQgIGlzc3VlcyAgdG8gIHBlcmZvcm0gdGhlbS4gVGhlIHRlc3QgZGlyZWN0b3J5IG9mIHRoZQorICAgICAgIGRpc3RyaWJ1dGlvbiBjb250YWlucyBhIHRvb2wgZm9yIGRpZ2VzdGluZyB0aGVzZSBsb2dzIHRvIG1ha2UgdGhlbQorICAgICAgIGxlc3MgdGVkaW91cyB0byB3YWRlIHRocm91Z2guCisgICAgICAgT2Z0ZW4geW91J2xsIGZpbmQgdGVybWluZm8gcHJvYmxlbXMgYXQgdGhpcyBzdGFnZSBieSBub3RpY2luZyB0aGF0CisgICAgICAgdGhlICBlc2NhcGUgIHNlcXVlbmNlcyBwdXQgb3V0IGZvciB2YXJpb3VzIGNhcGFiaWxpdGllcyBhcmUgd3JvbmcuCisgICAgICAgSWYgIG5vdCwgIHlvdSdyZSBsaWtlbHkgdG8gbGVhcm4gZW5vdWdoIHRvIGJlIGFibGUgdG8gY2hhcmFjdGVyaXplCisgICAgICAgYW55IGJ1ZyBpbiB0aGUgc2NyZWVuLXVwZGF0ZSBsb2dpYyBxdWl0ZSBleGFjdGx5LgorICAgIDQuIFJlcG9ydCBkZXRhaWxzIGFuZCBzeW1wdG9tcywgbm90IGp1c3QgaW50ZXJwcmV0YXRpb25zLgorICAgICAgIElmICB5b3UgIGRvIHRoZSBwcmVjZWRpbmcgdHdvIHN0ZXBzLCBpdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHlvdSdsbAorICAgICAgIGRpc2NvdmVyIHRoZSBuYXR1cmUgb2YgdGhlIHByb2JsZW0geW91cnNlbGYgYW5kIGJlIGFibGUgdG8gc2VuZCB1cworICAgICAgIGEgIGZpeC4gIFRoaXMgIHdpbGwgIGNyZWF0ZSBoYXBweSBmZWVsaW5ncyBhbGwgYXJvdW5kIGFuZCBlYXJuIHlvdQorICAgICAgIGdvb2QgIGthcm1hIGZvciB0aGUgZmlyc3QgdGltZSB5b3UgcnVuIGludG8gYSBidWcgeW91IHJlYWxseSBjYW4ndAorICAgICAgIGNoYXJhY3Rlcml6ZSBhbmQgZml4IHlvdXJzZWxmLgorICAgICAgIElmICB5b3UncmUgIHN0aWxsICBzdHVjaywgIGF0ICBsZWFzdCAgeW91J2xsIGtub3cgd2hhdCB0byB0ZWxsIHVzLgorICAgICAgIFJlbWVtYmVyLCAgd2UgIG5lZWQgIGRldGFpbHMuICBJZiAgeW91IGd1ZXNzIGFib3V0IHdoYXQgaXMgc2FmZSB0bworICAgICAgIGxlYXZlIG91dCwgeW91IGFyZSB0b28gbGlrZWx5IHRvIGJlIHdyb25nLgorICAgICAgIElmICB5b3VyICBidWcgIHByb2R1Y2VzIGEgYmFkIHVwZGF0ZSwgaW5jbHVkZSBhIHRyYWNlIGZpbGUuIFRyeSB0bworICAgICAgIG1ha2UgIHRoZSAgdHJhY2UgIGF0IHRoZSBsZWFzdCB2b2x1bWlub3VzIGxldmVsIHRoYXQgcGlucyBkb3duIHRoZQorICAgICAgIGJ1Zy4gIExvZ3MgIHRoYXQgIGhhdmUgIGJlZW4gdGhyb3VnaCB0cmFjZW11bmNoIGFyZSBPSywgaXQgZG9lc24ndAorICAgICAgIHRocm93ICAgYXdheSAgIGFueSAgIGluZm9ybWF0aW9uICAoYWN0dWFsbHkgIHRoZXkncmUgIGJldHRlciAgdGhhbgorICAgICAgIHVuLW11bmNoZWQgb25lcyBiZWNhdXNlIHRoZXkncmUgZWFzaWVyIHRvIHJlYWQpLgorICAgICAgIElmICB5b3VyIGJ1ZyBwcm9kdWNlcyBhIGNvcmUtZHVtcCwgcGxlYXNlIGluY2x1ZGUgYSBzeW1ib2xpYyBzdGFjaworICAgICAgIHRyYWNlIGdlbmVyYXRlZCBieSBnZGIoMSkgb3IgeW91ciBsb2NhbCBlcXVpdmFsZW50LgorICAgICAgIFRlbGwgdXMgYWJvdXQgZXZlcnkgdGVybWluYWwgb24gd2hpY2ggeW91J3ZlIHJlcHJvZHVjZWQgdGhlIGJ1ZyAtLQorICAgICAgIGFuZCAgZXZlcnkgIHRlcm1pbmFsIG9uIHdoaWNoIHlvdSBjYW4ndC4gSWRlYWxseSwgc2VudCB1cyB0ZXJtaW5mbworICAgICAgIHNvdXJjZXMgZm9yIGFsbCBvZiB0aGVzZSAoeW91cnMgbWlnaHQgZGlmZmVyIGZyb20gb3VycykuCisgICAgICAgSW5jbHVkZSAgeW91ciBuY3Vyc2VzIHZlcnNpb24gYW5kIHlvdXIgT1MvbWFjaGluZSB0eXBlLCBvZiBjb3Vyc2UhCisgICAgICAgWW91IGNhbiBmaW5kIHlvdXIgbmN1cnNlcyB2ZXJzaW9uIGluIHRoZSBjdXJzZXMuaCBmaWxlLgorCisgICBJZiAgeW91ciAgcHJvYmxlbSAgc21lbGxzICBsaWtlIGEgbG9naWMgZXJyb3Igb3IgaW4gY3Vyc29yIG1vdmVtZW50IG9yCisgICBzY3JvbGxpbmcgIG9yIGEgYmFkIGNhcGFiaWxpdHksIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB0aW55IHRlc3QgZnJhbWVzCisgICBmb3IgIHRoZSAgbGlicmFyeSAgYWxnb3JpdGhtcyBpbiB0aGUgcHJvZ3MgZGlyZWN0b3J5IHRoYXQgbWF5IGhlbHAgeW91CisgICBpc29sYXRlICBpdC4gVGhlc2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgYnVpbGQsIGJ1dCBkbyBoYXZlIHRoZWlyCisgICBvd24gbWFrZSBwcm9kdWN0aW9ucy4KKworICAgVGhlICAgbW9zdCAgaW1wb3J0YW50ICBvZiAgdGhlc2UgIGlzICBtdmN1ciwgIGEgIHRlc3QgIGZyYW1lICBmb3IgIHRoZQorICAgY3Vyc29yLW1vdmVtZW50ICBvcHRpbWl6YXRpb24gIGNvZGUuICBXaXRoICB0aGlzICBwcm9ncmFtLCB5b3UgY2FuIHNlZQorICAgZGlyZWN0bHkgIHdoYXQgIGNvbnRyb2wgc2VxdWVuY2VzIHdpbGwgYmUgZW1pdHRlZCBmb3IgYW55IGdpdmVuIGN1cnNvcgorICAgbW92ZW1lbnQgb3Igc2Nyb2xsL2luc2VydC9kZWxldGUgb3BlcmF0aW9ucy4gSWYgeW91IHRoaW5rIHlvdSd2ZSBnb3QgYQorICAgYmFkICBjYXBhYmlsaXR5ICBpZGVudGlmaWVkLCAgeW91ICBjYW4gIGRpc2FibGUgaXQgYW5kIHRlc3QgYWdhaW4uIFRoZQorICAgcHJvZ3JhbSBpcyBjb21tYW5kLWRyaXZlbiBhbmQgaGFzIG9uLWxpbmUgaGVscC4KKworICAgSWYgIHlvdSB0aGluayB0aGUgdmVydGljYWwtc2Nyb2xsIG9wdGltaXphdGlvbiBpcyBicm9rZW4sIG9yIGp1c3Qgd2FudAorICAgdG8gIHVuZGVyc3RhbmQgIGhvdyBpdCB3b3JrcyBiZXR0ZXIsIGJ1aWxkIGhhc2htYXAgYW5kIHJlYWQgdGhlIGhlYWRlcgorICAgY29tbWVudHMgIG9mIGhhcmRzY3JvbGwuYyBhbmQgaGFzaG1hcC5jOyB0aGVuIHRyeSBpdCBvdXQuIFlvdSBjYW4gYWxzbworICAgdGVzdCB0aGUgaGFyZHdhcmUtc2Nyb2xsaW5nIG9wdGltaXphdGlvbiBzZXBhcmF0ZWx5IHdpdGggaGFyZHNjcm9sbC4KKworICAgICAgICAgICAgICAgICAgICAgICAgIEEgVG91ciBvZiB0aGUgTmN1cnNlcyBMaWJyYXJ5CisKK0xpYnJhcnkgT3ZlcnZpZXcKKworICAgTW9zdCAgb2YgIHRoZSAgbGlicmFyeSBpcyBzdXBlcnN0cnVjdHVyZSAtLSBmYWlybHkgdHJpdmlhbCBjb252ZW5pZW5jZQorICAgaW50ZXJmYWNlcyAgdG8gYSBzbWFsbCBzZXQgb2YgYmFzaWMgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdXNlZAorICAgdG8gIG1hbmlwdWxhdGUgIHRoZSAgdmlydHVhbCAgc2NyZWVuIChpbiBwYXJ0aWN1bGFyLCBub25lIG9mIHRoaXMgY29kZQorICAgZG9lcyAgYW55ICBJL08gIGV4Y2VwdCAgdGhyb3VnaCAgY2FsbHMgIHRvICBtb3JlICBmdW5kYW1lbnRhbCAgbW9kdWxlcworICAgZGVzY3JpYmVkIGJlbG93KS4gVGhlIGZpbGVzCisKKyAgICAgbGliX2FkZGNoLmMgICAgbGliX2JrZ2QuYyAgICBsaWJfYm94LmMgICAgbGliX2NoZ2F0LmMgICBsaWJfY2xlYXIuYworICAgICBsaWJfY2xlYXJvay5jICBsaWJfY2xyYm90LmMgIGxpYl9jbHJlb2wuYyBsaWJfY29sb3JzZXQuYyBsaWJfZGF0YS5jCisgICAgIGxpYl9kZWxjaC5jICAgIGxpYl9kZWx3aW4uYyAgICBsaWJfZWNoby5jICAgbGliX2VyYXNlLmMgICBsaWJfZ2VuLmMKKyAgICAgbGliX2dldHN0ci5jICBsaWJfaGxpbmUuYyAgbGliX2ltbWVkb2suYyAgbGliX2luY2hzdHIuYyBsaWJfaW5zY2guYworICAgICBsaWJfaW5zZGVsLmMgIGxpYl9pbnNzdHIuYyBsaWJfaW5zdHIuYyBsaWJfaXNlbmR3aW4uYyBsaWJfa2V5bmFtZS5jCisgICAgIGxpYl9sZWF2ZW9rLmMgICBsaWJfbW92ZS5jICAgbGliX212d2luLmMgICBsaWJfb3ZlcmxheS5jICBsaWJfcGFkLmMKKyAgICAgbGliX3ByaW50dy5jICBsaWJfcmVkcmF3bG4uYyAgbGliX3NjYW53LmMgbGliX3NjcmVlbi5jIGxpYl9zY3JvbGwuYworICAgICBsaWJfc2Nyb2xsb2suYyAgICAgIGxpYl9zY3JyZWcuYyAgICAgIGxpYl9zZXRfdGVybS5jICAgICAgbGliX3Nsay5jCisgICAgIGxpYl9zbGthdHJfc2V0LmMgICBsaWJfc2xrYXRyb2YuYyAgIGxpYl9zbGthdHJvbi5jICBsaWJfc2xrYXRyc2V0LmMKKyAgICAgbGliX3Nsa2F0dHIuYyAgICAgbGliX3Nsa2NsZWFyLmMgICAgbGliX3Nsa2NvbG9yLmMgICAgbGliX3Nsa2luaXQuYworICAgICBsaWJfc2xrbGFiLmMgIGxpYl9zbGtyZWZyLmMgbGliX3Nsa3NldC5jIGxpYl9zbGt0b3VjaC5jIGxpYl90b3VjaC5jCisgICAgIGxpYl91bmN0cmwuYyBsaWJfdmxpbmUuYyBsaWJfd2F0dHJvZmYuYyBsaWJfd2F0dHJvbi5jIGxpYl93aW5kb3cuYworCisgICBhcmUgIGFsbCAgaW4gIHRoaXMgIGNhdGVnb3J5LiAgVGhleSAgYXJlIHZlcnkgdW5saWtlbHkgdG8gbmVlZCBjaGFuZ2UsCisgICBiYXJyaW5nIGJ1Z3Mgb3Igc29tZSBmdW5kYW1lbnRhbCByZW9yZ2FuaXphdGlvbiBpbiB0aGUgdW5kZXJseWluZyBkYXRhCisgICBzdHJ1Y3R1cmVzLgorCisgICBUaGVzZSBmaWxlcyBhcmUgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcgc3VwcG9ydDoKKworICAgICBsaWJfdHJhY2UuYyAgICAgbGliX3RyYWNlYXRyLmMgICAgbGliX3RyYWNlYml0cy5jICAgIGxpYl90cmFjZWNoci5jCisgICAgIGxpYl90cmFjZWRtcC5jIGxpYl90cmFjZW1zZS5jIHRyYWNlX2J1Zi5jCisKKyAgIEl0ICBpcyAgcmF0aGVyIHVubGlrZWx5IHlvdSB3aWxsIGV2ZXIgbmVlZCB0byBjaGFuZ2UgdGhlc2UsIHVubGVzcyB5b3UKKyAgIHdhbnQgdG8gaW50cm9kdWNlIGEgbmV3IGRlYnVnIHRyYWNlIGxldmVsIGZvciBzb21lIHJlYXNvbi4KKworICAgVGhlcmUgIGlzICBhbm90aGVyICBncm91cCAgb2YgIGZpbGVzICB0aGF0ICBkbyBkaXJlY3QgSS9PIHZpYSB0cHV0cygpLAorICAgY29tcHV0YXRpb25zICBvbiAgdGhlICB0ZXJtaW5hbCAgY2FwYWJpbGl0aWVzLCAgb3IgIHF1ZXJpZXMgIHRvIHRoZSBPUworICAgZW52aXJvbm1lbnQsICBidXQgIG5ldmVydGhlbGVzcyBoYXZlIG9ubHkgZmFpcmx5IGxvdyBjb21wbGV4aXR5LiBUaGVzZQorICAgaW5jbHVkZToKKworICAgICBsaWJfYWNzLmMgICBsaWJfYmVlcC5jICAgbGliX2NvbG9yLmMgICBsaWJfZW5kd2luLmMgICBsaWJfaW5pdHNjci5jCisgICAgIGxpYl9sb25nbmFtZS5jICBsaWJfbmV3dGVybS5jICBsaWJfb3B0aW9ucy5jIGxpYl90ZXJtY2FwLmMgbGliX3RpLmMKKyAgICAgbGliX3RwYXJtLmMgbGliX3RwdXRzLmMgbGliX3ZpZGF0dHIuYyByZWFkX2VudHJ5LmMuCisKKyAgIFRoZXkgYXJlIGxpa2VseSB0byBuZWVkIHJldmlzaW9uIG9ubHkgaWYgbmN1cnNlcyBpcyBiZWluZyBwb3J0ZWQgdG8gYW4KKyAgIGVudmlyb25tZW50IHdpdGhvdXQgYW4gdW5kZXJseWluZyB0ZXJtaW5mbyBjYXBhYmlsaXR5IHJlcHJlc2VudGF0aW9uLgorCisgICBUaGVzZSAgZmlsZXMgIGhhdmUgIHNlcmlvdXMgIGhvb2tzICBpbnRvICB0aGUgIHR0eSAgZHJpdmVyICBhbmQgc2lnbmFsCisgICBmYWNpbGl0aWVzOgorCisgICAgIGxpYl9rZXJuZWwuYyBsaWJfYmF1ZHJhdGUuYyBsaWJfcmF3LmMgbGliX3RzdHAuYyBsaWJfdHdhaXQuYworCisgICBJZiB5b3UgcnVuIGludG8gcG9ydGluZyBzbmFmdXMgbW92aW5nIHRoZSBwYWNrYWdlIHRvIGFub3RoZXIgVU5JWCwgdGhlCisgICBwcm9ibGVtICBpcyAgbGlrZWx5ICB0byBiZSBpbiBvbmUgb2YgdGhlc2UgZmlsZXMuIFRoZSBmaWxlIGxpYl9wcmludC5jCisgICB1c2VzIHNsZWVwKDIpIGFuZCBhbHNvIGZhbGxzIGluIHRoaXMgY2F0ZWdvcnkuCisKKyAgIEFsbW9zdCBhbGwgb2YgdGhlIHJlYWwgd29yayBpcyBkb25lIGluIHRoZSBmaWxlcworCisgICAgIGhhcmRzY3JvbGwuYyAgIGhhc2htYXAuYyAgIGxpYl9hZGRjaC5jICBsaWJfZG91cGRhdGUuYyAgbGliX2dldGNoLmMKKyAgICAgbGliX21vdXNlLmMgbGliX212Y3VyLmMgbGliX3JlZnJlc2guYyBsaWJfc2V0dXAuYyBsaWJfdmlkYXR0ci5jCisKKyAgIE1vc3QgIG9mICB0aGUgIGFsZ29yaXRobWljICBjb21wbGV4aXR5ICBpbiAgdGhlIGxpYnJhcnkgbGl2ZXMgaW4gdGhlc2UKKyAgIGZpbGVzLiAgSWYgIHRoZXJlIGlzIGEgcmVhbCBidWcgaW4gbmN1cnNlcyBpdHNlbGYsIGl0J3MgcHJvYmFibHkgaGVyZS4KKyAgIFdlJ2xsIHRvdXIgc29tZSBvZiB0aGVzZSBmaWxlcyBpbiBkZXRhaWwgYmVsb3cgKHNlZSBUaGUgRW5naW5lIFJvb20pLgorCisgICBGaW5hbGx5LCAgdGhlcmUgIGlzICBhICBncm91cCAgb2YgIGZpbGVzICB0aGF0IGlzIGFjdHVhbGx5IG1vc3Qgb2YgdGhlCisgICB0ZXJtaW5mbyAgY29tcGlsZXIuICBUaGUgcmVhc29uIHRoaXMgY29kZSBsaXZlcyBpbiB0aGUgbmN1cnNlcyBsaWJyYXJ5CisgICBpcyB0byBzdXBwb3J0IGZhbGxiYWNrIHRvIC9ldGMvdGVybWNhcC4gVGhlc2UgZmlsZXMgaW5jbHVkZQorCisgICAgIGFsbG9jX2VudHJ5LmMgIGNhcHRvaW5mby5jICBjb21wX2NhcHRhYi5jICBjb21wX2Vycm9yLmMgY29tcF9oYXNoLmMKKyAgICAgY29tcF9wYXJzZS5jIGNvbXBfc2Nhbi5jIHBhcnNlX2VudHJ5LmMgcmVhZF90ZXJtY2FwLmMgd3JpdGVfZW50cnkuYworCisgICBXZSdsbCBkaXNjdXNzIHRoZXNlIGluIHRoZSBjb21waWxlciB0b3VyLgorCitUaGUgRW5naW5lIFJvb20KKworICBLZXlib2FyZCBJbnB1dAorCisgICBBbGwgIG5jdXJzZXMgIGlucHV0ICBmdW5uZWxzIHRocm91Z2ggdGhlIGZ1bmN0aW9uIHdnZXRjaCgpLCBkZWZpbmVkIGluCisgICBsaWJfZ2V0Y2guYy4gIFRoaXMgZnVuY3Rpb24gaXMgdHJpY2t5OyBpdCBoYXMgdG8gcG9sbCBmb3Iga2V5Ym9hcmQgYW5kCisgICBtb3VzZSAgZXZlbnRzIGFuZCBkbyBhIHJ1bm5pbmcgbWF0Y2ggb2YgaW5jb21pbmcgaW5wdXQgYWdhaW5zdCB0aGUgc2V0CisgICBvZiBkZWZpbmVkIHNwZWNpYWwga2V5cy4KKworICAgVGhlICBjZW50cmFsICBkYXRhICBzdHJ1Y3R1cmUgIGluIHRoaXMgbW9kdWxlIGlzIGEgRklGTyBxdWV1ZSwgdXNlZCB0bworICAgbWF0Y2ggICBtdWx0aXBsZS1jaGFyYWN0ZXIgICBpbnB1dCAgIHNlcXVlbmNlcyAgIGFnYWluc3QgICBzcGVjaWFsLWtleQorICAgY2FwYWJpbGl0aWVzOyBhbHNvIHRvIGltcGxlbWVudCBwdXNoYmFjayB2aWEgdW5nZXRjaCgpLgorCisgICBUaGUgd2dldGNoKCkgY29kZSBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZnVuY3Rpb24ga2V5IHNlcXVlbmNlcyBhbmQgdGhlCisgICBzYW1lICBzZXF1ZW5jZXMgIHR5cGVkIG1hbnVhbGx5IGJ5IGRvaW5nIGEgdGltZWQgd2FpdCBhZnRlciBlYWNoIGlucHV0CisgICBjaGFyYWN0ZXIgIHRoYXQgIGNvdWxkICBsZWFkICBhICBmdW5jdGlvbiAga2V5IHNlcXVlbmNlLiBJZiB0aGUgZW50aXJlCisgICBzZXF1ZW5jZSAgdGFrZXMgIGxlc3MgIHRoYW4gIDEgIHNlY29uZCwgIGl0ICBpcyAgYXNzdW1lZCAgdG8gaGF2ZSBiZWVuCisgICBnZW5lcmF0ZWQgYnkgYSBmdW5jdGlvbiBrZXkgcHJlc3MuCisKKyAgIEhhY2tlcnMgIGJydWlzZWQgIGJ5ICBwcmV2aW91cyBlbmNvdW50ZXJzIHdpdGggdmFyaWFudCBzZWxlY3QoMikgY2FsbHMKKyAgIG1heSAgZmluZCAgdGhlICBjb2RlICBpbiAgbGliX3R3YWl0LmMgIGludGVyZXN0aW5nLiAgSXQgZGVhbHMgd2l0aCB0aGUKKyAgIHByb2JsZW0gdGhhdCBzb21lIEJTRCBzZWxlY3RzIGRvbid0IHJldHVybiBhIHJlbGlhYmxlIHRpbWUtbGVmdCB2YWx1ZS4KKyAgIFRoZSBmdW5jdGlvbiB0aW1lZF93YWl0KCkgZWZmZWN0aXZlbHkgc2ltdWxhdGVzIGEgU3lzdGVtIFYgc2VsZWN0LgorCisgIE1vdXNlIEV2ZW50cworCisgICBJZiB0aGUgbW91c2UgaW50ZXJmYWNlIGlzIGFjdGl2ZSwgd2dldGNoKCkgcG9sbHMgZm9yIG1vdXNlIGV2ZW50cyBlYWNoCisgICBjYWxsLCAgYmVmb3JlICBpdCAgZ29lcyAgdG8gIHRoZSAga2V5Ym9hcmQgIGZvciAgaW5wdXQuICBJdCAgaXMgIHVwIHRvCisgICBsaWJfbW91c2UuYyBob3cgdGhlIHBvbGxpbmcgaXMgYWNjb21wbGlzaGVkOyBpdCBtYXkgdmFyeSBmb3IgZGlmZmVyZW50CisgICBkZXZpY2VzLgorCisgICBVbmRlciAgeHRlcm0sICBob3dldmVyLCAgbW91c2UgIGV2ZW50ICBub3RpZmljYXRpb25zICBjb21lICBpbiB2aWEgdGhlCisgICBrZXlib2FyZCAgaW5wdXQgIHN0cmVhbS4gIFRoZXkgIGFyZSAgcmVjb2duaXplZCAgYnkgIGhhdmluZyAgdGhlIGttb3VzCisgICBjYXBhYmlsaXR5ICBhcyBhIHByZWZpeC4gVGhpcyBpcyBraW5kIG9mIGtsdWdleSwgYnV0IHRyeWluZyB0byB3aXJlIGluCisgICByZWNvZ25pdGlvbiAgIG9mICAgYSAgbW91c2UgIGtleSAgcHJlZml4ICB3aXRob3V0ICBnb2luZyAgdGhyb3VnaCAgdGhlCisgICBmdW5jdGlvbi1rZXkgIG1hY2hpbmVyeSAgd291bGQgYmUganVzdCB0b28gcGFpbmZ1bCwgYW5kIHRoaXMgdHVybnMgb3V0CisgICB0byAgaW1wbHkgaGF2aW5nIHRoZSBwcmVmaXggc29tZXdoZXJlIGluIHRoZSBmdW5jdGlvbi1rZXkgY2FwYWJpbGl0aWVzCisgICBhdCB0ZXJtaW5hbC10eXBlIGluaXRpYWxpemF0aW9uLgorCisgICBUaGlzICBrbHVnZSAgb25seSAgd29ya3MgIGJlY2F1c2UgIGttb3VzICBpc24ndCAgYWN0dWFsbHkgIHVzZWQgYnkgYW55CisgICBoaXN0b3JpYyB0ZXJtaW5hbCB0eXBlIG9yIGN1cnNlcyBpbXBsZW1lbnRhdGlvbiB3ZSBrbm93IG9mLiBCZXN0IGd1ZXNzCisgICBpcyAgaXQncyAgYSAgcmVsaWMgIG9mIHNvbWUgZm9yZ290dGVuIGV4cGVyaW1lbnQgaW4taG91c2UgYXQgQmVsbCBMYWJzCisgICB0aGF0ICBkaWRuJ3QgIGxlYXZlICBhbnkgIHRyYWNlcyAgaW4gdGhlIHB1YmxpY2x5LWRpc3RyaWJ1dGVkIFN5c3RlbSBWCisgICB0ZXJtaW5mbyAgZmlsZXMuICBJZiBTeXN0ZW0gViBvciBYUEc0IGV2ZXIgZ2V0cyBzZXJpb3VzIGFib3V0IHVzaW5nIGl0CisgICBhZ2FpbiwgdGhpcyBrbHVnZSBtYXkgaGF2ZSB0byBjaGFuZ2UuCisKKyAgIEhlcmUgYXJlIHNvbWUgbW9yZSBkZXRhaWxzIGFib3V0IG1vdXNlIGV2ZW50IGhhbmRsaW5nOgorCisgICBUaGUgbGliX21vdXNlKCljb2RlIGlzIGxvZ2ljYWxseSBzcGxpdCBpbnRvIGEgbG93ZXIgbGV2ZWwgdGhhdCBhY2NlcHRzCisgICBldmVudCAgcmVwb3J0cyAgaW4gIGEgIGRldmljZS1kZXBlbmRlbnQgZm9ybWF0IGFuZCBhbiB1cHBlciBsZXZlbCB0aGF0CisgICBwYXJzZXMgbW91c2UgZ2VzdHVyZXMgYW5kIGZpbHRlcnMgZXZlbnRzLiBUaGUgbWVkaWF0aW5nIGRhdGEgc3RydWN0dXJlCisgICBpcyBhIGNpcmN1bGFyIHF1ZXVlIG9mIGV2ZW50IHN0cnVjdHVyZXMuCisKKyAgIEZ1bmN0aW9uYWxseSwgdGhlIGxvd2VyIGxldmVsJ3Mgam9iIGlzIHRvIHBpY2sgdXAgcHJpbWl0aXZlIGV2ZW50cyBhbmQKKyAgIHB1dCAgdGhlbSAgb24gIHRoZSBjaXJjdWxhciBxdWV1ZS4gVGhpcyBjYW4gaGFwcGVuIGluIG9uZSBvZiB0d28gd2F5czoKKyAgIGVpdGhlciAgKGEpICBfbmNfbW91c2VfZXZlbnQoKSAgZGV0ZWN0cyAgYSAgc2VyaWVzICBvZiAgaW5jb21pbmcgbW91c2UKKyAgIHJlcG9ydHMgIGFuZCBxdWV1ZXMgdGhlbSwgb3IgKGIpIGNvZGUgaW4gbGliX2dldGNoLmMgZGV0ZWN0cyB0aGUga21vdXMKKyAgIHByZWZpeCAgaW4gIHRoZSAga2V5Ym9hcmQgIGlucHV0ICBzdHJlYW0gYW5kIGNhbGxzIF9uY19tb3VzZV9pbmxpbmUgdG8KKyAgIHF1ZXVlIHVwIGEgc2VyaWVzIG9mIGFkamFjZW50IG1vdXNlIHJlcG9ydHMuCisKKyAgIEluIGVpdGhlciBjYXNlLCBfbmNfbW91c2VfcGFyc2UoKSBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZSBzZXJpZXMgaXMKKyAgIGFjY2VwdGVkIHRvIHBhcnNlIHRoZSBkaWdlc3RlZCBtb3VzZSByZXBvcnRzIChsb3ctbGV2ZWwgZXZlbnRzKSBpbnRvIGEKKyAgIGdlc3R1cmUgKGEgaGlnaC1sZXZlbCBvciBjb21wb3NpdGUgZXZlbnQpLgorCisgIE91dHB1dCBhbmQgU2NyZWVuIFVwZGF0aW5nCisKKyAgIFdpdGggdGhlIHNpbmdsZSBleGNlcHRpb24gb2YgY2hhcmFjdGVyIGVjaG9lcyBkdXJpbmcgYSB3Z2V0bnN0cigpIGNhbGwKKyAgICh3aGljaCAgc2ltdWxhdGVzICBjb29rZWQtbW9kZSBsaW5lIGVkaXRpbmcgaW4gYW4gbmN1cnNlcyB3aW5kb3cpLCB0aGUKKyAgIGxpYnJhcnkgbm9ybWFsbHkgZG9lcyBhbGwgaXRzIG91dHB1dCBhdCByZWZyZXNoIHRpbWUuCisKKyAgIFRoZSAgbWFpbiAgam9iICBpcyAgdG8gIGdvICBmcm9tICB0aGUgIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNjcmVlbiAoYXMKKyAgIHJlcHJlc2VudGVkICBpbiAgdGhlIGN1cnNjciB3aW5kb3cgc3RydWN0dXJlKSB0byB0aGUgZGVzaXJlZCBuZXcgc3RhdGUKKyAgIChhcyByZXByZXNlbnRlZCBpbiB0aGUgbmV3c2NyIHdpbmRvdyBzdHJ1Y3R1cmUpLCB3aGlsZSBkb2luZyBhcyBsaXR0bGUKKyAgIEkvTyBhcyBwb3NzaWJsZS4KKworICAgVGhlICBicmFpbnMgIG9mIHRoaXMgb3BlcmF0aW9uIGFyZSB0aGUgbW9kdWxlcyBoYXNobWFwLmMsIGhhcmRzY3JvbGwuYworICAgYW5kICBsaWJfZG91cGRhdGUuYzsgdGhlIGxhdHRlciB0d28gdXNlIGxpYl9tdmN1ci5jLiBFc3NlbnRpYWxseSwgd2hhdAorICAgaGFwcGVucyBsb29rcyBsaWtlIHRoaXM6CisKKyAgIFRoZSAgaGFzaG1hcC5jICBtb2R1bGUgdHJpZXMgdG8gZGV0ZWN0IHZlcnRpY2FsIG1vdGlvbiBjaGFuZ2VzIGJldHdlZW4KKyAgIHRoZSAgcmVhbCAgYW5kIHZpcnR1YWwgc2NyZWVucy4gVGhpcyBpbmZvcm1hdGlvbiBpcyByZXByZXNlbnRlZCBieSB0aGUKKyAgIG9sZGluZGV4ICBtZW1iZXJzICBpbiAgdGhlICBuZXdzY3IgIHN0cnVjdHVyZS4gIFRoZXNlICBhcmUgbW9kaWZpZWQgYnkKKyAgIHZlcnRpY2FsLW1vdGlvbiAgYW5kICBjbGVhciAgb3BlcmF0aW9ucywgIGFuZCAgYm90aCBhcmUgcmUtaW5pdGlhbGl6ZWQKKyAgIGFmdGVyIGVhY2ggdXBkYXRlLiBUbyB0aGlzIGNoYW5nZS1qb3VybmFsbGluZyBpbmZvcm1hdGlvbiwgdGhlIGhhc2htYXAKKyAgIGNvZGUgIGFkZHMgIGRlZHVjdGlvbnMgIG1hZGUgdXNpbmcgYSBtb2RpZmllZCBIZWNrZWwgYWxnb3JpdGhtIG9uIGhhc2gKKyAgIHZhbHVlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgbGluZSBjb250ZW50cy4KKworICAgVGhlICBoYXJkc2Nyb2xsLmMgbW9kdWxlIGNvbXB1dGVzIGFuIG9wdGltdW0gc2V0IG9mIHNjcm9sbCwgaW5zZXJ0aW9uLAorICAgYW5kICAgZGVsZXRpb24gICBvcGVyYXRpb25zICB0byAgbWFrZSAgdGhlICBpbmRpY2VzICBtYXRjaC4gIEl0ICBjYWxscworICAgX25jX212Y3VyX3Njcm9sbG4oKSBpbiBsaWJfbXZjdXIuYyB0byBkbyB0aG9zZSBtb3Rpb25zLgorCisgICBUaGVuICBsaWJfZG91cGRhdGUuYyAgZ29lcyAgdG8gIHdvcmsuICBJdHMgIGpvYiAgaXMgdG8gZG8gbGluZS1ieS1saW5lCisgICB0cmFuc2Zvcm1hdGlvbnMgIG9mIGN1cnNjciBsaW5lcyB0byBuZXdzY3IgbGluZXMuIEl0cyBtYWluIHRvb2wgaXMgdGhlCisgICByb3V0aW5lICBtdmN1cigpICBpbiAgbGliX212Y3VyLmMuICBUaGlzICByb3V0aW5lIGRvZXMgY3Vyc29yLW1vdmVtZW50CisgICBvcHRpbWl6YXRpb24sICBhdHRlbXB0aW5nIHRvIGdldCBmcm9tIGdpdmVuIHNjcmVlbiBsb2NhdGlvbiBBIHRvIGdpdmVuCisgICBsb2NhdGlvbiBCIGluIHRoZSBmZXdlc3Qgb3V0cHV0IGNoYXJhY3RlcnMgcG9zc2libGUuCisKKyAgIElmICB5b3UgIHdhbnQgdG8gd29yayBvbiBzY3JlZW4gb3B0aW1pemF0aW9ucywgeW91IHNob3VsZCB1c2UgdGhlIGZhY3QKKyAgIHRoYXQgIChpbiAgdGhlICB0cmFjZS1lbmFibGVkICB2ZXJzaW9uICBvZiAgdGhlICBsaWJyYXJ5KSBlbmFibGluZyB0aGUKKyAgIFRSQUNFX1RJTUVTICB0cmFjZSAgbGV2ZWwgIGNhdXNlcyAgYSAgcmVwb3J0ICB0byBiZSBlbWl0dGVkIGFmdGVyIGVhY2gKKyAgIHNjcmVlbiAgdXBkYXRlICBnaXZpbmcgIHRoZSAgZWxhcHNlZCAgdGltZSAgYW5kICBhIGNvdW50IG9mIGNoYXJhY3RlcnMKKyAgIGVtaXR0ZWQgIGR1cmluZyAgdGhlICB1cGRhdGUuICBZb3UgY2FuIHVzZSB0aGlzIHRvIHRlbGwgd2hlbiBhbiB1cGRhdGUKKyAgIG9wdGltaXphdGlvbiBpbXByb3ZlcyBlZmZpY2llbmN5LgorCisgICBJbiAgdGhlICB0cmFjZS1lbmFibGVkICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvCisgICBkaXNhYmxlIGFuZCByZS1lbmFibGUgdmFyaW91cyBvcHRpbWl6YXRpb25zIGF0IHJ1bnRpbWUgYnkgdHdlYWtpbmcgdGhlCisgICB2YXJpYWJsZSAgX25jX29wdGltaXplX2VuYWJsZS4gIFNlZSAgdGhlICBmaWxlIGluY2x1ZGUvY3Vyc2VzLmguaW4gZm9yCisgICBtYXNrIHZhbHVlcywgbmVhciB0aGUgZW5kLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEZvcm1zIGFuZCBNZW51IExpYnJhcmllcworCisgICBUaGUgIGZvcm1zICBhbmQgbWVudSBsaWJyYXJpZXMgc2hvdWxkIHdvcmsgcmVsaWFibHkgaW4gYW55IGVudmlyb25tZW50CisgICB5b3UgIGNhbiAgcG9ydCBuY3Vyc2VzIHRvLiBUaGUgb25seSBwb3J0YWJpbGl0eSBpc3N1ZSBhbnl3aGVyZSBpbiB0aGVtCisgICBpcyAgd2hhdCAgZmxhdm9yICBvZiAgcmVndWxhciBleHByZXNzaW9ucyB0aGUgYnVpbHQtaW4gZm9ybSBmaWVsZCB0eXBlCisgICBUWVBFX1JFR0VYUCB3aWxsIHJlY29nbml6ZS4KKworICAgVGhlICBjb25maWd1cmF0aW9uICBjb2RlICBwcmVmZXJzIHRoZSBQT1NJWCByZWdleCBmYWNpbGl0eSwgbW9kZWxlZCBvbgorICAgU3lzdGVtICBWJ3MsICBidXQgIHdpbGwgIHNldHRsZSAgZm9yICBCU0QgIHJlZ2V4cHMgaWYgdGhlIGZvcm1lciBpc24ndAorICAgYXZhaWxhYmxlLgorCisgICBIaXN0b3JpY2FsICBub3RlOiAgdGhlICBwYW5lbHMgY29kZSB3YXMgd3JpdHRlbiBwcmltYXJpbHkgdG8gYXNzaXN0IGluCisgICBwb3J0aW5nICB1Mzg2bW9uICAyLjAgKGNvbXAuc291cmNlcy5taXNjIHYxNGkwMDEtNCkgdG8gc3lzdGVtcyBsYWNraW5nCisgICBwYW5lbHMgIHN1cHBvcnQ7IHUzODZtb24gMi4xMCBhbmQgYmV5b25kIHVzZSBpdC4gVGhpcyB2ZXJzaW9uIGhhcyBiZWVuCisgICBzbGlnaHRseSBjbGVhbmVkIHVwIGZvciBuY3Vyc2VzLgorCisgICAgICAgICAgICAgICAgICAgICAgICBBIFRvdXIgb2YgdGhlIFRlcm1pbmZvIENvbXBpbGVyCisKKyAgIFRoZSBuY3Vyc2VzIGltcGxlbWVudGF0aW9uIG9mIHRpYyBpcyByYXRoZXIgY29tcGxleCBpbnRlcm5hbGx5OyBpdCBoYXMKKyAgIHRvICBkbyAgYSAgdHJ5aW5nICBjb21iaW5hdGlvbiAgb2YgbWlzc2lvbnMuIFRoaXMgc3RhcnRzIHdpdGggdGhlIGZhY3QKKyAgIHRoYXQsICBpbiAgYWRkaXRpb24gIHRvICBpdHMgbm9ybWFsIGR1dHkgb2YgY29tcGlsaW5nIHRlcm1pbmZvIHNvdXJjZXMKKyAgIGludG8gIGxvYWRhYmxlICB0ZXJtaW5mbyBiaW5hcmllcywgaXQgaGFzIHRvIGJlIGFibGUgdG8gaGFuZGxlIHRlcm1jYXAKKyAgIHN5bnRheCBhbmQgY29tcGlsZSB0aGF0IHRvbyBpbnRvIHRlcm1pbmZvIGVudHJpZXMuCisKKyAgIFRoZSAgaW1wbGVtZW50YXRpb24gIHRoZXJlZm9yZSAgc3RhcnRzICB3aXRoIGEgdGFibGUtZHJpdmVuLCBkdWFsLW1vZGUKKyAgIGxleGljYWwgYW5hbHl6ZXIgKGluIGNvbXBfc2Nhbi5jKS4gVGhlIGxleGVyIGNob29zZXMgaXRzIG1vZGUgKHRlcm1jYXAKKyAgIG9yIHRlcm1pbmZvKSBiYXNlZCBvbiB0aGUgZmlyc3QgYCwnIG9yIGA6JyBpdCBmaW5kcyBpbiBlYWNoIGVudHJ5LiBUaGUKKyAgIGxleGVyICBkb2VzICBhbGwgIHRoZSB3b3JrIG9mIHJlY29nbml6aW5nIGNhcGFiaWxpdHkgbmFtZXMgYW5kIHZhbHVlczsKKyAgIHRoZSAgZ3JhbW1hciBhYm92ZSBpdCBpcyB0cml2aWFsLCBqdXN0ICJwYXJzZSBlbnRyaWVzIHRpbGwgeW91IHJ1biBvdXQKKyAgIG9mIGZpbGUiLgorCitUcmFuc2xhdGlvbiBvZiBOb24tdXNlIENhcGFiaWxpdGllcworCisgICBUcmFuc2xhdGlvbiAgIG9mICBtb3N0ICB0aGluZ3MgIGJlc2lkZXMgIHVzZSAgY2FwYWJpbGl0aWVzICBpcyAgcHJldHR5CisgICBzdHJhaWdodGZvcndhcmQuICAgVGhlICAgbGV4aWNhbCAgIGFuYWx5emVyJ3MgICB0b2tlbml6ZXIgIGhhbmRzICBlYWNoCisgICBjYXBhYmlsaXR5ICBuYW1lICB0byBhIGhhc2ggZnVuY3Rpb24sIHdoaWNoIGRyaXZlcyBhIHRhYmxlIGxvb2t1cC4gVGhlCisgICB0YWJsZSBlbnRyeSB5aWVsZHMgYW4gaW5kZXggd2hpY2ggaXMgdXNlZCB0byBsb29rIHVwIHRoZSB0b2tlbiB0eXBlIGluCisgICBhbm90aGVyIHRhYmxlLCBhbmQgY29udHJvbHMgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHZhbHVlLgorCisgICBPbmUgIHBvc3NpYmx5ICBpbnRlcmVzdGluZyBhc3BlY3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIGlzIHRoZSB3YXkgdGhlCisgICBjb21waWxlciAgdGFibGVzICBhcmUgIGluaXRpYWxpemVkLiAgQWxsICB0aGUgIHRhYmxlcyBhcmUgZ2VuZXJhdGVkIGJ5CisgICB2YXJpb3VzICBhd2svc2VkL3NoICBzY3JpcHRzICBmcm9tICBhIG1hc3RlciB0YWJsZSBpbmNsdWRlL0NhcHM7IHRoZXNlCisgICBzY3JpcHRzICBhY3R1YWxseSAgd3JpdGUgIEMgIGluaXRpYWxpemVycyAgd2hpY2ggIGFyZSAgbGlua2VkICB0byAgdGhlCisgICBjb21waWxlci4gRnVydGhlcm1vcmUsIHRoZSBoYXNoIHRhYmxlIGlzIGdlbmVyYXRlZCBpbiB0aGUgc2FtZSB3YXksIHNvCisgICBpdCAgZG9lc24ndCAgaGF2ZSAgdG8gIGJlICBnZW5lcmF0ZWQgYXQgY29tcGlsZXIgc3RhcnR1cCB0aW1lIChhbm90aGVyCisgICBiZW5lZml0ICBvZiAgdGhpcyAgb3JnYW5pemF0aW9uICBpcyAgdGhhdCAgdGhlICBoYXNoICB0YWJsZSAgY2FuIGJlIGluCisgICBzaGFyZWFibGUgdGV4dCBzcGFjZSkuCisKKyAgIFRodXMsIGFkZGluZyBhIG5ldyBjYXBhYmlsaXR5IGlzIHVzdWFsbHkgcHJldHR5IHRyaXZpYWwsIGp1c3QgYSBtYXR0ZXIKKyAgIG9mICBhZGRpbmcgIG9uZSAgbGluZSB0byB0aGUgaW5jbHVkZS9DYXBzIGZpbGUuIFdlJ2xsIGhhdmUgbW9yZSB0byBzYXkKKyAgIGFib3V0IHRoaXMgaW4gdGhlIHNlY3Rpb24gb24gU291cmNlLUZvcm0gVHJhbnNsYXRpb24uCisKK1VzZSBDYXBhYmlsaXR5IFJlc29sdXRpb24KKworICAgVGhlICBiYWNrZ3JvdW5kICBwcm9ibGVtICB0aGF0ICBtYWtlcyAgdGljIHRyaWNreSBpc24ndCB0aGUgY2FwYWJpbGl0eQorICAgdHJhbnNsYXRpb24gIGl0c2VsZiwgIGl0J3MgIHRoZSAgcmVzb2x1dGlvbiBvZiB1c2UgY2FwYWJpbGl0aWVzLiBPbGRlcgorICAgdmVyc2lvbnMgd291bGQgbm90IGhhbmRsZSBmb3J3YXJkIHVzZSByZWZlcmVuY2VzIGZvciB0aGlzIHJlYXNvbiAodGhhdAorICAgaXMsIGEgdXNpbmcgdGVybWluYWwgYWx3YXlzIGhhZCB0byBmb2xsb3cgaXRzIHVzZSB0YXJnZXQgaW4gdGhlIHNvdXJjZQorICAgZmlsZSkuICBCeSAgZG9pbmcgIHRoaXMsICB0aGV5ICBnb3QgIGF3YXkgd2l0aCBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbgorICAgdGFjdGljOyAgY29tcGlsZSAgZXZlcnl0aGluZyAgYXMgIGl0ICBibG93cyBieSwgdGhlbiByZXNvbHZlIHVzZXMgZnJvbQorICAgY29tcGlsZWQgZW50cmllcy4KKworICAgVGhpcyAgd29uJ3QgIGRvICBmb3IgIG5jdXJzZXMuICBUaGUgIHByb2JsZW0gIGlzICB0aGF0ICB0aGF0IHRoZSB3aG9sZQorICAgY29tcGlsYXRpb24gIHByb2Nlc3MgIGhhcyAgdG8gIGJlIGVtYmVkZGFibGUgaW4gdGhlIG5jdXJzZXMgbGlicmFyeSBzbworICAgdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGJ5IHRoZSBzdGFydHVwIGNvZGUgdG8gdHJhbnNsYXRlIHRlcm1jYXAgZW50cmllcworICAgb24gIHRoZSAgZmx5LiAgVGhlICBlbWJlZGRlZCAgdmVyc2lvbiAgY2FuJ3QgIGdvIHByb21pc2N1b3VzbHkgd3JpdGluZworICAgZXZlcnl0aGluZyAgaXQgIHRyYW5zbGF0ZXMgIG91dCAgdG8gIGRpc2sgIC0tICBmb3IgIG9uZSB0aGluZywgaXQgd2lsbAorICAgdHlwaWNhbGx5IGJlIHJ1bm5pbmcgd2l0aCBub24tcm9vdCBwZXJtaXNzaW9ucy4KKworICAgU28gIG91ciAgdGljICBpcyAgZGVzaWduZWQgIHRvICBwYXJzZSAgYW4gIGVudGlyZSB0ZXJtaW5mbyBmaWxlIGludG8gYQorICAgZG91Ymx5LWxpbmtlZCAgY2lyY3VsYXIgIGxpc3Qgb2YgZW50cnkgc3RydWN0dXJlcyBpbi1jb3JlLCBhbmQgdGhlbiBkbworICAgdXNlICByZXNvbHV0aW9uICBpbi1tZW1vcnkgIGJlZm9yZSB3cml0aW5nIGV2ZXJ5dGhpbmcgb3V0LiBUaGlzIGRlc2lnbgorICAgaGFzIG90aGVyIGFkdmFudGFnZXM6IGl0IG1ha2VzIGZvcndhcmQgYW5kIGJhY2sgdXNlLXJlZmVyZW5jZXMgZXF1YWxseQorICAgZWFzeSAgKHNvICB3ZSBnZXQgdGhlIGxhdHRlciBmb3IgZnJlZSksIGFuZCBpdCBtYWtlcyBjaGVja2luZyBmb3IgbmFtZQorICAgY29sbGlzaW9ucyBiZWZvcmUgdGhleSdyZSB3cml0dGVuIG91dCBlYXN5IHRvIGRvLgorCisgICBBbmQgICB0aGlzICBpcyAgZXhhY3RseSAgaG93ICB0aGUgIGVtYmVkZGVkICB2ZXJzaW9uICB3b3Jrcy4gIEJ1dCAgdGhlCisgICBzdGFuZC1hbG9uZSAgdXNlci1hY2Nlc3NpYmxlICB2ZXJzaW9uICBvZiAgdGljICBwYXJ0bHkgIHJldmVydHMgdG8gdGhlCisgICBoaXN0b3JpY2FsIHN0cmF0ZWd5OyBpdCB3cml0ZXMgdG8gZGlzayAobm90IGtlZXBpbmcgaW4gY29yZSkgYW55IGVudHJ5CisgICB3aXRoIG5vIHVzZSByZWZlcmVuY2VzLgorCisgICBUaGlzICBpcyAgc3RyaWN0bHkgIGEgIGNvcmUtZWNvbm9teSAga2x1Z2UsICBpbXBsZW1lbnRlZCAgYmVjYXVzZSAgdGhlCisgICB0ZXJtaW5mbyAgbWFzdGVyIGZpbGUgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgc29tZSBjb3JlLXBvb3Igc3lzdGVtcyBzd2FwCisgICBsaWtlIGNyYXp5IHdoZW4geW91IGNvbXBpbGUgaXQgYWxsIGluIG1lbW9yeS4uLnRoZXJlIGhhdmUgYmVlbiByZXBvcnRzCisgICBvZiAgdGhpcyBwcm9jZXNzIHRha2luZyB0aHJlZSBob3VycywgcmF0aGVyIHRoYW4gdGhlIHR3ZW50eSBzZWNvbmRzIG9yCisgICBsZXNzIHR5cGljYWwgb24gdGhlIGF1dGhvcidzIGRldmVsb3BtZW50IGJveC4KKworICAgU28uIFRoZSBleGVjdXRhYmxlIHRpYyBwYXNzZXMgdGhlIGVudHJ5LXBhcnNlciBhIGhvb2sgdGhhdCBpbW1lZGlhdGVseQorICAgd3JpdGVzICBvdXQgIHRoZSAgcmVmZXJlbmNlZCAgZW50cnkgaWYgaXQgaGFzIG5vIHVzZSBjYXBhYmlsaXRpZXMuIFRoZQorICAgY29tcGlsZXIgIG1haW4gbG9vcCByZWZyYWlucyBmcm9tIGFkZGluZyB0aGUgZW50cnkgdG8gdGhlIGluLWNvcmUgbGlzdAorICAgd2hlbiAgdGhpcyBob29rIGZpcmVzLiBJZiBzb21lIG90aGVyIGVudHJ5IGxhdGVyIG5lZWRzIHRvIHJlZmVyZW5jZSBhbgorICAgZW50cnkgIHRoYXQgIGdvdCAgd3JpdHRlbiAgaW1tZWRpYXRlbHksIHRoYXQncyBPSzsgdGhlIHJlc29sdXRpb24gY29kZQorICAgd2lsbCBmZXRjaCBpdCBvZmYgZGlzayB3aGVuIGl0IGNhbid0IGZpbmQgaXQgaW4gY29yZS4KKworICAgTmFtZSAgY29sbGlzaW9ucyAgd2lsbCAgc3RpbGwgIGJlICBkZXRlY3RlZCwgIGp1c3Qgbm90IGFzIGNsZWFubHkuIFRoZQorICAgd3JpdGVfZW50cnkoKSAgIGNvZGUgICBjb21wbGFpbnMgIGJlZm9yZSAgb3ZlcndyaXRpbmcgIGFuICBlbnRyeSAgdGhhdAorICAgcG9zdGRhdGVzICB0aGUgdGltZSBvZiB0aWMncyBmaXJzdCBjYWxsIHRvIHdyaXRlX2VudHJ5KCksIFRodXMgaXQgd2lsbAorICAgY29tcGxhaW4gIGFib3V0IG92ZXJ3cml0aW5nIGVudHJpZXMgbmV3bHkgbWFkZSBkdXJpbmcgdGhlIHRpYyBydW4sIGJ1dAorICAgbm90IGFib3V0IG92ZXJ3cml0aW5nIG9uZXMgdGhhdCBwcmVkYXRlIGl0LgorCitTb3VyY2UtRm9ybSBUcmFuc2xhdGlvbgorCisgICBBbm90aGVyIHVzZSBvZiB0aWMgaXMgdG8gZG8gc291cmNlIHRyYW5zbGF0aW9uIGJldHdlZW4gdmFyaW91cyB0ZXJtY2FwCisgICBhbmQgdGVybWluZm8gZm9ybWF0cy4gVGhlcmUgYXJlIG1vcmUgdmFyaWFudHMgb3V0IHRoZXJlIHRoYW4geW91IG1pZ2h0CisgICB0aGluazsgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhcmUgZGVzY3JpYmVkIGluIHRoZSBjYXB0b2luZm8oMSkgbWFudWFsCisgICBwYWdlLgorCisgICBUaGUgIHRyYW5zbGF0aW9uIG91dHB1dCBjb2RlIChkdW1wX2VudHJ5KCkgaW4gbmN1cnNlcy9kdW1wX2VudHJ5LmMpIGlzCisgICBzaGFyZWQgIHdpdGggIHRoZSAgaW5mb2NtcCgxKSAgdXRpbGl0eS4gIEl0ICB0YWtlcyAgdGhlICBzYW1lIGludGVybmFsCisgICByZXByZXNlbnRhdGlvbiAgdXNlZCAgdG8gIGdlbmVyYXRlICB0aGUgIGJpbmFyeSAgZm9ybSAgYW5kIGR1bXBzIGl0IHRvCisgICBzdGFuZGFyZCBvdXRwdXQgaW4gYSBzcGVjaWZpZWQgZm9ybWF0LgorCisgICBUaGUgIGluY2x1ZGUvQ2FwcyAgZmlsZSAgaGFzICBhIGhlYWRlciBjb21tZW50IGRlc2NyaWJpbmcgd2F5cyB5b3UgY2FuCisgICBzcGVjaWZ5ICBzb3VyY2UgIHRyYW5zbGF0aW9ucyAgZm9yICBub25zdGFuZGFyZCAgY2FwYWJpbGl0aWVzICBqdXN0IGJ5CisgICBhbHRlcmluZyB0aGUgbWFzdGVyIHRhYmxlLiBJdCdzIHBvc3NpYmxlIHRvIHNldCB1cCBjYXBhYmlsaXR5IGFsaWFzaW5nCisgICBvciAgdGVsbCAgdGhlICBjb21waWxlciAgdG8gIHBsYWluICBpZ25vcmUgIGEgZ2l2ZW4gY2FwYWJpbGl0eSB3aXRob3V0CisgICB3cml0aW5nIGFueSBDIGNvZGUgYXQgYWxsLgorCisgICBGb3IgIGNpcmN1bXN0YW5jZXMgd2hlcmUgeW91IG5lZWQgdG8gZG8gYWxnb3JpdGhtaWMgdHJhbnNsYXRpb24sIHRoZXJlCisgICBhcmUgIGZ1bmN0aW9ucyAgaW4gIHBhcnNlX2VudHJ5LmMgY2FsbGVkIGFmdGVyIHRoZSBwYXJzZSBvZiBlYWNoIGVudHJ5CisgICB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgc3VjaCB0cmFuc2xhdGlvbnMuIFRoaXMsCisgICBmb3IgIGV4YW1wbGUsICBpcyAgd2hlcmUgIHRoZSBBSVggYm94MSBjYXBhYmlsaXR5IGdldCB0cmFuc2xhdGVkIHRvIGFuCisgICBhY3NjIHN0cmluZy4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciBVdGlsaXRpZXMKKworICAgVGhlICBpbmZvY21wICB1dGlsaXR5ICBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIHNhbWUgZW50cnktZHVtcGluZworICAgY29kZSAgdXNlZCAgYnkgdGljIGZvciBzb3VyY2UgdHJhbnNsYXRpb24uIFBlcmhhcHMgdGhlIG9uZSBpbnRlcmVzdGluZworICAgYXNwZWN0ICBvZiAgdGhlICBjb2RlICBpcyB0aGUgdXNlIG9mIGEgcHJlZGljYXRlIGZ1bmN0aW9uIHBhc3NlZCBpbiB0bworICAgZHVtcF9lbnRyeSgpICB0byAgY29udHJvbCAgd2hpY2ggIGNhcGFiaWxpdGllcyAgYXJlICBkdW1wZWQuICBUaGlzICBpcworICAgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGhhbmRsZSBib3RoIHRoZSBvcmRpbmFyeSBEZS1jb21waWxhdGlvbiBjYXNlIGFuZAorICAgZW50cnkgZGlmZmVyZW5jZSByZXBvcnRpbmcuCisKKyAgIFRoZSAgdHB1dCAgYW5kICBjbGVhciAgdXRpbGl0aWVzICBqdXN0ICBkbyBhbiBlbnRyeSBsb2FkIGZvbGxvd2VkIGJ5IGEKKyAgIHRwdXRzKCkgb2YgYSBzZWxlY3RlZCBjYXBhYmlsaXR5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZSBUaXBzIGZvciBEZXZlbG9wZXJzCisKKyAgIFNlZSAgIHRoZSAgVE8tRE8gIGZpbGUgIGluICB0aGUgIHRvcC1sZXZlbCAgZGlyZWN0b3J5ICBvZiAgdGhlICBzb3VyY2UKKyAgIGRpc3RyaWJ1dGlvbiBmb3IgYWRkaXRpb25zIHRoYXQgd291bGQgYmUgcGFydGljdWxhcmx5IHVzZWZ1bC4KKworICAgVGhlICBwcmVmaXggIF9uY18gIHNob3VsZCBiZSB1c2VkIG9uIGxpYnJhcnkgcHVibGljIGZ1bmN0aW9ucyB0aGF0IGFyZQorICAgbm90ICBwYXJ0ICBvZiAgdGhlICBjdXJzZXMgIEFQSSAgaW4gIG9yZGVyIHRvIHByZXZlbnQgcG9sbHV0aW9uIG9mIHRoZQorICAgYXBwbGljYXRpb24gIG5hbWVzcGFjZS4gIElmICB5b3UgaGF2ZSB0byBhZGQgdG8gb3IgbW9kaWZ5IHRoZSBmdW5jdGlvbgorICAgcHJvdG90eXBlcyAgaW4gY3Vyc2VzLmguaW4sIHJlYWQgbmN1cnNlcy9NS2xpYl9nZW4uc2ggZmlyc3Qgc28geW91IGNhbgorICAgYXZvaWQgIGJyZWFraW5nIFhTSSBjb25mb3JtYW5jZS4gUGxlYXNlIGpvaW4gdGhlIG5jdXJzZXMgbWFpbGluZyBsaXN0LgorICAgU2VlICB0aGUgSU5TVEFMTCBmaWxlIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGRpc3RyaWJ1dGlvbiBmb3IgZGV0YWlscworICAgb24gdGhlIGxpc3QuCisKKyAgIExvb2sgIGZvciAgdGhlICBzdHJpbmcgIEZJWE1FICBpbiAgc291cmNlICBmaWxlcyB0byB0YWcgbWlub3IgYnVncyBhbmQKKyAgIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IGNvdWxkIHVzZSBmaXhpbmcuCisKKyAgIERvbid0ICB0cnkgIHRvIGF1dG8tZGV0ZWN0IE9TIGZlYXR1cmVzIGluIHRoZSBtYWluIGJvZHkgb2YgdGhlIEMgY29kZS4KKyAgIFRoYXQncyB0aGUgam9iIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4KKworICAgVG8gaG9sZCBkb3duIGNvbXBsZXhpdHksIGRvIG1ha2UgeW91ciBjb2RlIGRhdGEtZHJpdmVuLiBFc3BlY2lhbGx5LCBpZgorICAgeW91ICBjYW4gZHJpdmUgbG9naWMgZnJvbSBhIHRhYmxlIGZpbHRlcmVkIG91dCBvZiBpbmNsdWRlL0NhcHMsIGRvIGl0LgorICAgSWYgIHlvdSAgZmluZCAgeW91ICBuZWVkICB0byBhdWdtZW50IHRoZSBkYXRhIGluIHRoYXQgZmlsZSBpbiBvcmRlciB0bworICAgZ2VuZXJhdGUgIHRoZSAgcHJvcGVyIHRhYmxlLCB0aGF0J3Mgc3RpbGwgcHJlZmVyYWJsZSB0byBhZC1ob2MgY29kZSAtLQorICAgdGhhdCdzIHdoeSB0aGUgZmlmdGggZmllbGQgKGZsYWdzKSBpcyB0aGVyZS4KKworICAgSGF2ZSBmdW4hCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRpbmcgSGludHMKKworICAgVGhlICBmb2xsb3dpbmcgIG5vdGVzICBhcmUgaW50ZW5kZWQgdG8gYmUgYSBmaXJzdCBzdGVwIHRvd2FyZHMgRE9TIGFuZAorICAgTWFjaW50b3NoIHBvcnRzIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcmllcy4KKworICAgVGhlICBmb2xsb3dpbmcgbGlicmFyeSBtb2R1bGVzIGFyZSBgcHVyZSBjdXJzZXMnOyB0aGV5IG9wZXJhdGUgb25seSBvbgorICAgdGhlICBjdXJzZXMgIGludGVybmFsICBzdHJ1Y3R1cmVzLCAgZG8gYWxsIG91dHB1dCB0aHJvdWdoIG90aGVyIGN1cnNlcworICAgY2FsbHMgIChub3QgIGluY2x1ZGluZyAgdHB1dHMoKSAgYW5kIHB1dHAoKSkgYW5kIGRvIG5vdCBjYWxsIGFueSBvdGhlcgorICAgVU5JWCAgcm91dGluZXMgIHN1Y2ggIGFzICBzaWduYWwoMikgIG9yICB0aGUgc3RkaW8gbGlicmFyeS4gVGh1cywgdGhleQorICAgc2hvdWxkIG5vdCBuZWVkIHRvIGJlIG1vZGlmaWVkIGZvciBzaW5nbGUtdGVybWluYWwgcG9ydHMuCisKKyAgICAgbGliX2FkZGNoLmMgICAgbGliX2FkZHN0ci5jICAgIGxpYl9ia2dkLmMgICBsaWJfYm94LmMgICBsaWJfY2xlYXIuYworICAgICBsaWJfY2xyYm90LmMgICBsaWJfY2xyZW9sLmMgIGxpYl9kZWxjaC5jICBsaWJfZGVsd2luLmMgIGxpYl9lcmFzZS5jCisgICAgIGxpYl9pbmNoc3RyLmMgIGxpYl9pbnNjaC5jICBsaWJfaW5zZGVsLmMgbGliX2luc3N0ci5jIGxpYl9rZXluYW1lLmMKKyAgICAgbGliX21vdmUuYyAgIGxpYl9tdndpbi5jICAgbGliX25ld3dpbi5jICAgbGliX292ZXJsYXkuYyAgIGxpYl9wYWQuYworICAgICBsaWJfcHJpbnR3LmMgIGxpYl9yZWZyZXNoLmMgIGxpYl9zY2Fudy5jICBsaWJfc2Nyb2xsLmMgbGliX3NjcnJlZy5jCisgICAgIGxpYl9zZXRfdGVybS5jICBsaWJfdG91Y2guYyAgbGliX3RwYXJtLmMgIGxpYl90cHV0cy5jICBsaWJfdW5jdHJsLmMKKyAgICAgbGliX3dpbmRvdy5jIHBhbmVsLmMKKworICAgVGhpcyBtb2R1bGUgaXMgcHVyZSBjdXJzZXMsIGJ1dCBjYWxscyBvdXRzdHIoKToKKworICAgICBsaWJfZ2V0c3RyLmMKKworICAgVGhlc2UgIG1vZHVsZXMgIGFyZSAgcHVyZSAgY3Vyc2VzLCAgZXhjZXB0ICB0aGF0ICB0aGV5IHVzZSB0cHV0cygpIGFuZAorICAgcHV0cCgpOgorCisgICAgIGxpYl9iZWVwLmMgICBsaWJfY29sb3IuYyAgIGxpYl9lbmR3aW4uYyAgIGxpYl9vcHRpb25zLmMgICBsaWJfc2xrLmMKKyAgICAgbGliX3ZpZGF0dHIuYworCisgICBUaGlzIG1vZHVsZXMgYXNzaXN0IGluIFBPU0lYIGVtdWxhdGlvbiBvbiBub24tUE9TSVggc3lzdGVtczoKKworICAgc2lnYWN0aW9uLmMKKyAgICAgICAgICBzaWduYWwgY2FsbHMKKworICAgVGhlICAgIGZvbGxvd2luZyAgIHNvdXJjZSAgIGZpbGVzICAgd2lsbCAgIG5vdCAgIGJlICAgbmVlZGVkICAgZm9yICAgYQorICAgc2luZ2xlLXRlcm1pbmFsLXR5cGUgcG9ydC4KKworICAgICBhbGxvY19lbnRyeS5jICAgY2FwdG9pbmZvLmMgICBjbGVhci5jICAgY29tcF9jYXB0YWIuYyAgY29tcF9lcnJvci5jCisgICAgIGNvbXBfaGFzaC5jICAgY29tcF9tYWluLmMgICBjb21wX3BhcnNlLmMgIGNvbXBfc2Nhbi5jICBkdW1wX2VudHJ5LmMKKyAgICAgaW5mb2NtcC5jIHBhcnNlX2VudHJ5LmMgcmVhZF9lbnRyeS5jIHRwdXQuYyB3cml0ZV9lbnRyeS5jCisKKyAgIFRoZSAgZm9sbG93aW5nICBtb2R1bGVzIHdpbGwgdXNlIG9wZW4oKS9yZWFkKCkvd3JpdGUoKS9jbG9zZSgpL2xzZWVrKCkKKyAgIG9uIGZpbGVzLCBidXQgbm8gb3RoZXIgT1MgY2FsbHMuCisKKyAgIGxpYl9zY3JlZW4uYworICAgICAgICAgIHVzZWQgdG8gcmVhZC93cml0ZSBzY3JlZW4gZHVtcHMKKworICAgbGliX3RyYWNlLmMKKyAgICAgICAgICB1c2VkIHRvIHdyaXRlIHRyYWNlIGRhdGEgdG8gdGhlIGxvZ2ZpbGUKKworICAgTW9kdWxlcyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUgbW9kaWZpZWQgZm9yIGEgcG9ydCBzdGFydCBoZXJlOgorCisgICBUaGUgIGZvbGxvd2luZyAgbW9kdWxlcyAgYXJlICBgcHVyZSAgY3Vyc2VzJyAgYnV0ICBjb250YWluIGFzc3VtcHRpb25zCisgICBpbmFwcHJvcHJpYXRlIGZvciBhIG1lbW9yeS1tYXBwZWQgcG9ydC4KKworICAgbGliX2xvbmduYW1lLmMKKyAgICAgICAgICBhc3N1bWVzIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0ZXJtaW5hbHMKKworICAgbGliX2Fjcy5jCisgICAgICAgICAgYXNzdW1lcyBhY3NfbWFwIGFzIGEgZG91YmxlIGluZGlyZWN0aW9uCisKKyAgIGxpYl9tdmN1ci5jCisgICAgICAgICAgYXNzdW1lcyBjdXJzb3IgbW92ZXMgaGF2ZSB2YXJpYWJsZSBjb3N0CisKKyAgIGxpYl90ZXJtY2FwLmMKKyAgICAgICAgICBhc3N1bWVzIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0ZXJtaW5hbHMKKworICAgbGliX3RpLmMKKyAgICAgICAgICBhc3N1bWVzIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0ZXJtaW5hbHMKKworICAgVGhlIGZvbGxvd2luZyBtb2R1bGVzIHVzZSBVTklYLXNwZWNpZmljIGNhbGxzOgorCisgICBsaWJfZG91cGRhdGUuYworICAgICAgICAgIGlucHV0IGNoZWNraW5nCisKKyAgIGxpYl9nZXRjaC5jCisgICAgICAgICAgcmVhZCgpCisKKyAgIGxpYl9pbml0c2NyLmMKKyAgICAgICAgICBnZXRlbnYoKQorCisgICBsaWJfbmV3dGVybS5jCisgICBsaWJfYmF1ZHJhdGUuYworICAgbGliX2tlcm5lbC5jCisgICAgICAgICAgdmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGFuZCBzeXN0ZW0gY2FsbHMKKworICAgbGliX3Jhdy5jCisgICAgICAgICAgdmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGNhbGxzCisKKyAgIGxpYl9zZXR1cC5jCisgICAgICAgICAgdmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGNhbGxzCisKKyAgIGxpYl9yZXN0YXJ0LmMKKyAgICAgICAgICB2YXJpb3VzIHR0eS1tYW5pcHVsYXRpb24gY2FsbHMKKworICAgbGliX3RzdHAuYworICAgICAgICAgIHNpZ25hbC1tYW5pcHVsYXRpb24gY2FsbHMKKworICAgbGliX3R3YWl0LmMKKyAgICAgICAgICBnZXR0aW1lb2ZkYXkoKSwgc2VsZWN0KCkuCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworICAgIEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgorCisgICAoTm90ZTogVGhpcyBpcyBub3QgdGhlIGJ1ZyBhZGRyZXNzISkKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL0FkYTk1Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9BZGE5NS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0M2I5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9BZGE5NS5odG1sCkBAIC0wLDAgKzEsMTgzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yLy9FTiI+Cis8IS0tCisgICRJZDogQWRhOTUuaHRtbCx2IDEuNiAyMDA0LzAxLzE4IDAwOjMyOjQ3IHRvbSBFeHAgJAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY2xlYXIuMSx2IDEuMyAyMDAwLzA3LzE1IDIzOjU5OjM1IGNoaW5hIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+QWRhOTUgQmluZGluZyBmb3IgbmN1cnNlczwvVGl0bGU+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5BZGE5NSBCaW5kaW5nIGZvciBuY3Vyc2VzPC9IMT4KK2J5IEomdXVtbDtyZ2VuIFBmZWlmZXIuCisKKzxIUiBTSVpFPTMgTk9TSEFERT4KKzxIMj5HZW5lcmFsIFJlbWFya3M8L0gyPgorPFVMPgorPExJPlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIFZlcnNpb24gMDEuMDAgb2YgdGhlIGJpbmRpbmcuPC9MST4KKzxMST5UaGUgZnVuY3Rpb25hbGl0eSBpcyBtb2RlbGVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgbmN1cnNlcworcGFja2FnZSwgYSBjbG9uZSBvZiB0aGUgU1ZyNCBjdXJzZXMgbW9kZWwuPEJSPgorSSBkaWQgdGhlIGRldmVsb3BtZW50IG9uIGFuIEludGVsIGJveCBydW5uaW5nIHRoZSBsYXRlc3Qgc3RhYmxlIHJlbGVhc2Ugb2YKKzxBIEhSRUY9Imh0dHA6Ly93d3cubGludXgub3JnIj5MaW51eDwvQT4sIG5jdXJzZXMgYW5kIHRoZSBtb3N0IHJlY2VudCByZWxlYXNlZAorPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05VIEFkYSBUcmFuc2xhdG9yPC9BPgorZ25hdCB2ZXJzaW9ucy4gRm9yIGFueSBvbGRlciB2ZXJzaW9ucyBvZiBuY3Vyc2VzIGFuZCBnbmF0CitpdCBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrLjwvTEk+Cis8TEk+WW91IG11c3QgaGF2ZSB0aGUgbTQgbWFjcm9wcm9jZXNzb3IgdG8gYnVpbGQgdGhpcyBwYWNrYWdlLgorSWYgeW91IGRvbid0IGhhdmUgdGhpcyBwcm9ncmFtLCB5b3UgY2FuIGdldCB0aGUgRlNGIHZlcnNpb24KKzxBIEhSRUY9ImZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvIj5oZXJlPC9BPi48L0xJPgorPExJPkFkYSBwcm9ncmFtcyBhcmUgc3VwcG9zZWQgdG8gYmUgcmVhZGFibGUuIE9uZSBvZiBteQorZmF2b3JpdGUgbWV0aG9kcyB0byBtYWtlIGNvZGUgcmVhZGFibGUgaXMgdG8gdXNlIGV4cHJlc3NpdmUKK25hbWVzIGZvciB0aGUgaWRlbnRpZmllcnMuIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgYSBtYXBwaW5nCitvZiB0aGUgY3J5cHRpYyBjdXJzZXMgbmFtZXMgdG8gdGhlIEFkYSBuYW1lcyBpbiB0aGlzIDxBIEhSRUY9ImFkYS90YWJsZS5odG1sIj50YWJsZTwvQT4uPC9MST4KKzxMST5UaGlzIGlzIG5vdCBhIHR5cGljYWwgb25lLXRvLW9uZSBpbnRlcmZhY2UgbWFwcGluZy4gSXQgaXMKK2Nsb3NlIHRvIG9uZS10by1vbmUgb24gdGhlIGZ1bmN0aW9uYWwgbGV2ZWwuIEVhY2ggKG4pY3Vyc2VzIGZ1bmN0aW9uCitoYXMgaXQncyBjb3VudGVycGFydCB3aXRoIGEgbW9yZSBvciBsZXNzIHNpbWlsYXIgZm9ybWFsIHBhcmFtZXRlciBsaXN0CitpbiB0aGUgYmluZGluZy4gSXQgaXMgbm90IG9uZS10by1vbmUgd2l0aCByZXNwZWN0IHRvIHRoZSBkYXRhdHlwZXMuCitJIHRyaWVkIHRvIG1ha2UgcmVjb3JkcyBvdXQgb2YgdGhlIGZsYXQgY2h0eXBlIGFuZCBzaW1pbGFyIHN0cnVjdHVyZXMsCitzbyB5b3UgZG9uJ3QgaGF2ZSB0byBkbyBiaXQgb3BlcmF0aW9ucyB0byBtYXJrIGFuIGF0dHJpYnV0ZWQgY2hhcmFjdGVyCithcyBib2xkLiBKdXN0IG1ha2UgdGhlIGJvb2xlYW4gbWVtYmVyIDxTVFJPTkc+Ym9sZDwvU1RST05HPiBvZiB0aGUgcmVjb3JkCit0cnVlLiBUaGUgYmluZGluZyBhbHNvIGhpZGVzIHRoZSBzdHJ1Y3R1cmVzIGxpa2UgV0lORE9XLCBQQU5FTCwgTUVOVSwgRk9STQorZXRjLiAhIEl0J3MgYSBwdXJlIGZ1bmN0aW9uYWwgQVBJLjwvTEk+Cis8TEk+SSB0cnkgdG8gZG8gYXMgbXVjaCBlcnJvciBjaGVja2luZyBhcyBwb3NzaWJsZSBhbmQgZmVhc2libGUKK2luIHRoZSBiaW5kaW5nLiBJIHdpbGwgcmFpc2UgYW4gQWRhIGV4Y2VwdGlvbiB3aGVuIHNvbWV0aGluZword2VudCB3cm9uZyBpbiB0aGUgbG93LWxldmVsIGN1cnNlcy4gVGhpcyBoYXMgdGhlIGVmZmVjdCB0aGF0IC0gYXQgbGVhc3QKK2ZpcnN0IHRpbWUgaW4gbXkgbGlmZSAtIChuKWN1cnNlcyBwcm9ncmFtcyBoYXZlIG5vdyBhIHZlcnkgcmlnaWQgZXJyb3IKK2NoZWNraW5nLCBidXQgLSB0aGFua3MgdG8gQWRhIC0geW91IGRvbid0IGhhdmUgdG8gY29kZSB0aGUgb3JnaWFzdGljCitlcnJvciBjaGVja2luZyBzdHlsZSBvZiBDLjwvTEk+Cis8TEk+U3VwcG9ydCBmb3Igd2lkZSBjaGFyYWN0ZXJzIGlzIGN1cnJlbnRseSBub3QgaW4gdGhlIGJpbmRpbmcsIGFzIGl0CitpcyBub3QgcmVhbGx5IGluIG5jdXJzZXMgYXQgdGhpcyBwb2ludCBpbiB0aW1lLjwvTEk+Cis8L1VMPgorCis8SDI+TGltaXRhdGlvbnM8L0gyPgorPFVMPgorPExJPkkgcHJvdmlkZSBubyBTQ1JFRU4gZGF0YXR5cGUgYW5kIGZ1bmN0aW9ucyB0byBzZXQgYSBuZXcgc2NyZWVuLgorSWYgeW91IG5lZWQgdGhpcyAobW9zdGx5IGZvciBkZWJ1Z2dpbmcgSSBndWVzcyksIHdyaXRlIGEgc21hbGwKK0Mgcm91dGluZSBkb2luZyBhbGwgdGhpcyBhbmQgaW1wb3J0IGl0IGludG8geW91ciBBZGEgcHJvZ3JhbS48L0xJPgorPExJPkkgcHJvdmlkZSBubyBmdW5jdGlvbnMgdG8gc3dpdGNoIG9uL29mZiBjdXJzZXMgdHJhY2luZyBvcHRpb25zLgorU2FtZSBzdWdnZXN0aW9uIGFzIGFib3ZlLjwvTEk+Cis8TEk+QWx0aG91Z2ggQWRhOTUgaXMgYW4gT08gTGFuZ3VhZ2UsIHRoaXMgYmluZGluZyBkb2Vzbid0IHByb3ZpZGUKK2FuIE9PIGFic3RyYWN0aW9uIG9mIHRoZSAobiljdXJzZXMgZnVuY3Rpb25hbGl0eS4gQXMgbWVudGlvbmVkIGFib3ZlCitpdCdzIGEgdGhpbiBiaW5kaW5nIGZvciB0aGUgKG4pY3Vyc2VzIGZ1bmN0aW9ucy4gQnV0IHdpdGhvdXQgYW55Citkb3VidCBpdCB3b3VsZCBiZSBuaWNlIHRvIGJ1aWxkIG9uIHRvcCBvZiB0aGlzIGFuIE9PIGFic3RyYWN0aW9uCitvZiAobiljdXJzZXMgZnVuY3Rpb25hbGl0eS48QlI+CitUaGUgb25seSBleGNlcHRpb24gaXMgdGhlIG1ldGhvZCBob3cgZmllbGR0eXBlcyBhcmUgcmVwcmVzZW50ZWQgaW4KK3RoaXMgQmluZGluZy4gV2UgcHJvdmlkZSBhbiBhYnN0cmFjdCB0YWdnZWQgdHlwZSBGaWVsZF9UeXBlIGZyb20KK3doaWNoIHRoZSB2YXJpb3VzIGZpZWxkdHlwZXMgYXJlIGRlcml2ZWQuPC9MST4KKzxMST5JIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCB0aGUgbGlua19maWVsZHR5cGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUKK2Zvcm1zIHN1YnN5c3RlbS48L0xJPgorPExJPlRoZSAqX0lPIHBhY2thZ2VzIGFyZSBjdXJyZW50bHkgb3V0cHV0IG9ubHkuPC9MST4KKzwvVUw+CisKKzxIMj5IaWVyYXJjaHkgb2YgcGFja2FnZXM8L0gyPgorPFVMPgorPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0iPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4KKyAgICA8VUw+PExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtIj5DdXJzZXM8L0E+CisJPFVMPjxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSI+TW91c2U8L0E+CisgICAgICAgICAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtIj5QYW5lbHM8L0E+CisgICAgICAgICAgICA8VUw+PExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0iPlVzZXJfRGF0YTwvQT4KKyAgICAgICAgICAgIDwvVUw+CisJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSI+TWVudXM8L0E+CisJICAgICAgICA8VUw+PExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtIj5NZW51X1VzZXJfRGF0YTwvQT4KKwkJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSI+SXRlbV9Vc2VyX0RhdGE8L0E+CisJCTwvVUw+CisJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSI+Rm9ybXM8L0E+CisJCTxVTD48TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0iPkZvcm1fVXNlcl9EYXRhPC9BPgorCQkgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSI+RmllbGRfVXNlcl9EYXRhPC9BPgorCQkgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtIj5GaWVsZF9UeXBlczwvQT4KKwkJICAgIDxVTD48TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0iPkFscGhhPC9BPgorCQkgICAgICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0iPkFscGhhTnVtZXJpYzwvQT4KKwkJICAgICAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0iPkludEZpZWxkPC9BPgorCQkgICAgICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtIj5OdW1lcmljPC9BPgorCQkgICAgICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0iPlJlZ0V4cDwvQT4KKwkJICAgICAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtIj5JUFY0X0FkZHJlc3M8L0E+CisJCSAgICAgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtIj5FbnVtZXJhdGlvbjwvQT4KKwkJICAgICAgICA8VUw+PExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSI+QWRhPC9BPgorCQkJPC9VTD4KKwkJCTxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtIj5Vc2VyPC9BPgorCQkgICAgICAgIDxVTD48TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0iPkNob2ljZTwvQT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvVUw+CisgICAgICAgICAgICAgICAgICAgICA8L1VMPgorCQk8L1VMPgorCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSI+VGV4dF9JTzwvQT4KKwkJPFVMPjxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0iPkludGVnZXJfSU88L0E+CisJCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSI+RmxvYXRfSU88L0E+CisJCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSI+Rml4ZWRfSU88L0E+CisJCSAgICA8TEk+PEEgSFJFRj0iYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtIj5EZWNpbWFsX0lPPC9BPgorCQkgICAgPExJPjxBIEhSRUY9ImFkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSI+TW9kdWxhcl9JTzwvQT4KKwkJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtIj5FbnVtZXJhdGlvbl9JTzwvQT4KKwkJICAgIDxMST48QSBIUkVGPSJhZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0iPkNvbXBsZXhfSU88L0E+CisJCTwvVUw+CisgICAgICAgICA8L1VMPgorICAgICA8L1VMPgorPC9VTD4KK0lmIHlvdSB3YW50IHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIGh0bWwgcGFnZXMgb2YgdGhlIHBhY2thZ2Ugc3BlY3MsIGNsaWNrIDxBIEhSRUY9ImFkYS9pbmRleC5odG0iPmhlcmU8L0E+LgorPEgyPkltcGxlbWVudGF0aW9uIERldGFpbHM8L0gyPgorPEg0PkJlaGluZCB0aGUgYWJzdHJhY3Rpb248L0g0PgorQWxsIHRoZSBuZXcgdHlwZXMgbGlrZSA8U1RST05HPldpbmRvdzwvU1RST05HPiwgPFNUUk9ORz5QYW5lbDwvU1RST05HPiwKKzxTVFJPTkc+TWVudTwvU1RST05HPiwgPFNUUk9ORz5Gb3JtPC9TVFJPTkc+IGV0Yy4gYXJlIGp1c3QKK29wYXF1ZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHBvaW50ZXJzIHRvIHRoZSBjb3JyZXNwb25kaW5nCitsb3cgbGV2ZWwgKG4pY3Vyc2VzIHN0cnVjdHVyZXMgbGlrZQorPFNUUk9ORz5XSU5ET1cgKjwvU1RST05HPiwgPFNUUk9ORz5QQU5FTCAqPC9TVFJPTkc+LAorPFNUUk9ORz5NRU5VICo8L1NUUk9ORz4gb3IgPFNUUk9ORz5GT1JNICo8L1NUUk9ORz4uCitTbyB5b3UgY2FuIHNhZmVseSBwYXNzIHRoZW0gdG8gQyByb3V0aW5lcyB0aGF0IGV4cGVjdCBhIHBvaW50ZXIKK3RvIG9uZSBvZiB0aG9zZSBzdHJ1Y3R1cmVzLgorPEg0PkV4dGVuZGVkIHJpcG9mZmxpbmUoKSB1c2FnZTwvSDQ+CitUaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvZiAobiljdXJzZXMgc2F5cywgdGhhdCB0aGUgbGluZSBwYXJhbWV0ZXIKK2RldGVybWluZXMgb25seSB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IDxTVFJPTkc+b25lPC9TVFJPTkc+IGxpbmUgaXMKK3N0b2xlbiBmcm9tIHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBzY3JlZW4uIFNvIGVzc2VudGlhbGx5IG9ubHkgdGhlCitzaWduIG9mIHRoZSBwYXJhbWV0ZXIgaXMgZXZhbHVhdGVkLiBuY3Vyc2VzIGhhcyBpbnRlcm5hbGx5IGltcGxlbWVudGVkCitpdCBpbiBhIHdheSwgdGhhdCB1c2VzIHRoZSBsaW5lIHBhcmFtZXRlciBhbHNvIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZgorbGluZXMgdG8gc3RlYWwuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgaW4gdGhlIDxTVFJPTkc+UmlwX09mZl9MaW5lczwvU1RST05HPgorcm91dGluZSBvZiB0aGUgYmluZGluZy4KKzxIND48QSBOQU1FPSJ1c2VycG9pbnRlciI+SG93IHVzZXIgZGVmaW5lZCBmaWVsZCB0eXBlcyB3b3JrPC9BPjwvSDQ+CitUQkQKKzxIND5FbnVtZXJhdGlvbiBmaWVsZHMgaGFuZGxpbmc8L0g0PgorVGhlIChuKWN1cnNlcyBkb2N1bWVudGF0aW9uIHNheXMsIHRoYXQgdGhlIFN0cmluZyBhcnJheXMgdG8gYmUgcGFzc2VkIHRvCithbiBUWVBFX0VOVU0gZmllbGR0eXBlIG11c3Qgbm90IGJlIGF1dG9tYXRpYyB2YXJpYWJsZXMuIFRoaXMgaXMgbm90IHRydWUKK2luIHRoaXMgYmluZGluZywgYmVjYXVzZSBpdCBpcyBpbnRlcm5hbGx5IGFycmFuZ2VkIHRvIHNhZmVseSBjb3B5IHRoZXNlCit2YWx1ZXMuCis8SDQ+PEEgTkFNRT0iY29tcGlsZXIiPlVzaW5nIG90aGVyIEFkYSBjb21waWxlcnM8L0E+PC9IND4KK1RoaXMgc2hvdWxkIGJhc2ljYWxseSBub3QgYmUgYSBwcm9ibGVtLgorPEg0PlBvcnQgdG8gb3RoZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9uczwvSDQ+CitCYXNpY2FsbHkgaXQgc2hvdWxkIG5vdCBiZSB0b28gaGFyZCB0byBtYWtlIGFsbCB0aGlzIHJ1biBvbiBhIHJlZ3VsYXIgU1ZyNAoraW1wbGVtZW50YXRpb24gb2YgY3Vyc2VzLiBUaGUgcHJvYmxlbXMgYXJlIHByb2JhYmx5IHRoZXNlOjxCUj4KKzxVTD4KKzxMST5uY3Vyc2VzIGhhcyBzb21lIGFkZGl0aW9uYWwgZmVhdHVyZXMgd2hpY2ggYXJlIHByZXNlbnRlZCBpbiB0aGlzIGJpbmRpbmcuIFlvdQoraGF2ZSB0d28gY2hvaWNlcyB0byBkZWFsIHdpdGggdGhpczoKKzxVTD4KKzxMST5FbXVsYXRlIHRoZSBmZWF0dXJlIGluIHRoaXMgYmluZGluZzwvTEk+Cis8TEk+UmFpc2UgYW4gZXhjZXB0aW9uIGZvciBub24gaW1wbGVtZW50ZWQgZmVhdHVyZXM8L0xJPgorPC9VTD4KK01vc3QgbGlrZWx5IHlvdSB3aWxsIGZvbGxvdyBhIG1peGVkIGFwcHJvYWNoLiBTb21lIGZlYXR1cmVzIGFyZSBlYXN5IHRvIHNpbXVsYXRlLAorb3RoZXJzIHdpbGwgYmUgaGFyZCBpZiBub3QgaW1wb3NzaWJsZS48L0xJPgorPC9VTD4KK0knbSBxdWl0ZSBzdXJlIEkgZm9yZ290IHNvbWV0aGluZy4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8uaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL05DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTEwMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy5odG1sCkBAIC0wLDAgKzEsNjQxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PQorIkhUTUwgVGlkeSBmb3IgTGludXgveDg2ICh2ZXJzIDFzdCBEZWNlbWJlciAyMDA0KSwgc2VlIHd3dy53My5vcmciPgorPHRpdGxlPk5DVVJTRVMgUHJvZ3JhbW1pbmcgSE9XVE88L3RpdGxlPgorPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PQorIk1vZHVsYXIgRG9jQm9vayBIVE1MIFN0eWxlc2hlZXQgVmVyc2lvbiAxLjciPgorPC9oZWFkPgorPGJvZHkgY2xhc3M9IkFSVElDTEUiIGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiIGxpbms9CisiIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzxkaXYgY2xhc3M9IkFSVElDTEUiPgorPGRpdiBjbGFzcz0iVElUTEVQQUdFIj4KKzxoMSBjbGFzcz0iVElUTEUiPjxhIG5hbWU9IkFFTjIiIGlkPSJBRU4yIj5OQ1VSU0VTIFByb2dyYW1taW5nCitIT1dUTzwvYT48L2gxPgorPGgzIGNsYXNzPSJBVVRIT1IiPjxhIG5hbWU9IkFFTjQiIGlkPSJBRU40Ij5QcmFkZWVwIFBhZGFsYTwvYT48L2gzPgorPGRpdiBjbGFzcz0iQUZGSUxJQVRJT04iPgorPGRpdiBjbGFzcz0iQUREUkVTUyI+Cis8cCBjbGFzcz0iQUREUkVTUyI+PGNvZGUgY2xhc3M9IkVNQUlMIj4mbHQ7PGEgaHJlZj0KKyJtYWlsdG86cHBhZGFsYUBnbWFpbC5jb20iPnBwYWRhbGFAZ21haWwuY29tPC9hPiZndDs8L2NvZGU+PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxwIGNsYXNzPSJQVUJEQVRFIj52MS45LCAyMDA1LTA2LTIwPGJyPjwvcD4KKzxkaXYgY2xhc3M9IlJFVkhJU1RPUlkiPgorPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgorPHRyPgorPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMyI+PGI+UmV2aXNpb24KK0hpc3Rvcnk8L2I+PC90aD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDEuOTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDUtMDYtMjA8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPlRoZSBsaWNlbnNlIGhhcyBiZWVuIGNoYW5nZWQgdG8gdGhlCitNSVQtc3R5bGUgbGljZW5zZSB1c2VkIGJ5IE5DVVJTRVMuIE5vdGUgdGhhdCB0aGUgcHJvZ3JhbXMgYXJlIGFsc28KK3JlLWxpY2Vuc2VkIHVuZGVyIHRoaXMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDEuODwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDUtMDYtMTc8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPkxvdHMgb2YgdXBkYXRlcy4gQWRkZWQgcmVmZXJlbmNlcyBhbmQKK3BlcmwgZXhhbXBsZXMuIENoYW5nZXMgdG8gZXhhbXBsZXMuIE1hbnkgZ3JhbW1hdGljYWwgYW5kIHN0eWxpc3RpYworY2hhbmdlcyB0byB0aGUgY29udGVudC4gQ2hhbmdlcyB0byBOQ1VSU0VTIGhpc3RvcnkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDEuNy4xPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+MjAwMi0wNi0yNTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzZWQgYnk6IHBwYWRhbGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+QWRkZWQgYSBSRUFETUUgZmlsZSBmb3IgYnVpbGRpbmcgYW5kCitpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIGZyb20gc291cmNlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjc8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDAyLTA2LTI1PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5BZGRlZCAiT3RoZXIgZm9ybWF0cyIgc2VjdGlvbiBhbmQgbWFkZQorYSBsb3Qgb2YgZmFuY3kgY2hhbmdlcyB0byB0aGUgcHJvZ3JhbXMuIElubGluaW5nIG9mIHByb2dyYW1zIGlzCitnb25lLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjYuMTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDItMDItMjQ8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPlJlbW92ZWQgdGhlIG9sZCBDaGFuZ2Vsb2cgc2VjdGlvbiwKK2NsZWFuZWQgdGhlIG1ha2VmaWxlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjY8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDAyLTAyLTE2PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5Db3JyZWN0ZWQgYSBsb3Qgb2Ygc3BlbGxpbmcgbWlzdGFrZXMsCithZGRlZCBBQ1MgdmFyaWFibGVzIHNlY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNpb24gMS41PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+MjAwMi0wMS0wNTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzZWQgYnk6IHBwYWRhbGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZCBhbGlnbj0ibGVmdCIgY29sc3Bhbj0iMyI+Q2hhbmdlZCBzdHJ1Y3R1cmUgdG8gcHJlc2VudCBwcm9wZXIKK1RPQzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjMuMTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDEtMDctMjY8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPkNvcnJlY3RlZCBtYWludGFpbmVycyBwYXJhZ3JhcGgsCitDb3JyZWN0ZWQgc3RhYmxlIHJlbGVhc2UgbnVtYmVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDEuMzwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDEtMDctMjQ8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPkFkZGVkIGNvcHlyaWdodCBub3RpY2VzIHRvIG1haW4KK2RvY3VtZW50IChMRFAgbGljZW5zZSkgYW5kIHByb2dyYW1zIChHUEwpLCBDb3JyZWN0ZWQKK3ByaW50d19leGFtcGxlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2lvbiAxLjI8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4yMDAxLTA2LTA1PC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+UmV2aXNlZCBieTogcHBhZGFsYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0IiBjb2xzcGFuPSIzIj5JbmNvcnBvcmF0ZWQgcmF2aSdzIGNoYW5nZXMuIE1haW5seSB0bworaW50cm9kdWN0aW9uLCBtZW51LCBmb3JtLCBqdXN0Zm9yZnVuIHNlY3Rpb25zPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlJldmlzaW9uIDEuMTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPjIwMDEtMDUtMjI8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5SZXZpc2VkIGJ5OiBwcGFkYWxhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIGNvbHNwYW49IjMiPkFkZGVkICJhIHdvcmQgYWJvdXQgd2luZG93IiBzZWN0aW9uLAorQWRkZWQgc2NhbndfZXhhbXBsZS48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXY+Cis8ZGl2IGNsYXNzPSJBQlNUUkFDVCI+PGEgbmFtZT0iQUVONjciIGlkPSJBRU42NyI+PC9hPgorPHA+PGVtPlRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gYmUgYW4gIkFsbCBpbiBPbmUiIGd1aWRlIGZvcgorcHJvZ3JhbW1pbmcgd2l0aCBuY3Vyc2VzIGFuZCBpdHMgc2lzdGVyIGxpYnJhcmllcy4gV2UgZ3JhZHVhdGUgZnJvbQorYSBzaW1wbGUgIkhlbGxvIFdvcmxkIiBwcm9ncmFtIHRvIG1vcmUgY29tcGxleCBmb3JtIG1hbmlwdWxhdGlvbi4KK05vIHByaW9yIGV4cGVyaWVuY2UgaW4gbmN1cnNlcyBpcyBhc3N1bWVkLiBTZW5kIGNvbW1lbnRzIHRvCis8YSBocmVmPSJtYWlsdG86cHBhZGFsYUBnbWFpbC5jb20iIHRhcmdldD0iX3RvcCI+dGhpcworYWRkcmVzczwvYT48L2VtPjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8aHI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJUT0MiPgorPGRsPgorPGR0PjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvZHQ+Cis8ZHQ+MS4gPGEgaHJlZj0iI0lOVFJPIj5JbnRyb2R1Y3Rpb248L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xLjEuIDxhIGhyZWY9IiNXSEFUSVMiPldoYXQgaXMgTkNVUlNFUz88L2E+PC9kdD4KKzxkdD4xLjIuIDxhIGhyZWY9IiNXSEFUQ0FOV0VETyI+V2hhdCB3ZSBjYW4gZG8gd2l0aAorTkNVUlNFUzwvYT48L2R0PgorPGR0PjEuMy4gPGEgaHJlZj0iI1dIRVJFVE9HRVRJVCI+V2hlcmUgdG8gZ2V0IGl0PC9hPjwvZHQ+Cis8ZHQ+MS40LiA8YSBocmVmPSIjUFVSUE9TRSI+UHVycG9zZS9TY29wZSBvZiB0aGUgZG9jdW1lbnQ8L2E+PC9kdD4KKzxkdD4xLjUuIDxhIGhyZWY9IiNBQk9VVFBST0dSQU1TIj5BYm91dCB0aGUgUHJvZ3JhbXM8L2E+PC9kdD4KKzxkdD4xLjYuIDxhIGhyZWY9IiNPVEhFUkZPUk1BVFMiPk90aGVyIEZvcm1hdHMgb2YgdGhlCitkb2N1bWVudDwvYT48L2R0PgorPGR0PjEuNy4gPGEgaHJlZj0iI0NSRURJVFMiPkNyZWRpdHM8L2E+PC9kdD4KKzxkdD4xLjguIDxhIGhyZWY9IiNXSVNITElTVCI+V2lzaCBMaXN0PC9hPjwvZHQ+Cis8ZHQ+MS45LiA8YSBocmVmPSIjQ09QWVJJR0hUIj5Db3B5cmlnaHQ8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjIuIDxhIGhyZWY9IiNIRUxMT1dPUkxEIj5IZWxsbyBXb3JsZCAhISE8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4yLjEuIDxhIGhyZWY9IiNDT01QSUxFQ1VSU0VTIj5Db21waWxpbmcgV2l0aCB0aGUgTkNVUlNFUworTGlicmFyeTwvYT48L2R0PgorPGR0PjIuMi4gPGEgaHJlZj0iI0RJU1NFQ1RJT04iPkRpc3NlY3Rpb248L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjMuIDxhIGhyZWY9IiNHT1JZIj5UaGUgR29yeSBEZXRhaWxzPC9hPjwvZHQ+Cis8ZHQ+NC4gPGEgaHJlZj0iI0lOSVQiPkluaXRpYWxpemF0aW9uPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+NC4xLiA8YSBocmVmPSIjQUJPVVRJTklUIj5Jbml0aWFsaXphdGlvbiBmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD40LjIuIDxhIGhyZWY9IiNSQVdDQlJFQUsiPnJhdygpIGFuZCBjYnJlYWsoKTwvYT48L2R0PgorPGR0PjQuMy4gPGEgaHJlZj0iI0VDSE9OT0VDSE8iPmVjaG8oKSBhbmQgbm9lY2hvKCk8L2E+PC9kdD4KKzxkdD40LjQuIDxhIGhyZWY9IiNLRVlQQUQiPmtleXBhZCgpPC9hPjwvZHQ+Cis8ZHQ+NC41LiA8YSBocmVmPSIjSEFMRkRFTEFZIj5oYWxmZGVsYXkoKTwvYT48L2R0PgorPGR0PjQuNi4gPGEgaHJlZj0iI01JU0NJTklUIj5NaXNjZWxsYW5lb3VzIEluaXRpYWxpemF0aW9uCitmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD40LjcuIDxhIGhyZWY9IiNJTklURVgiPkFuIEV4YW1wbGU8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjUuIDxhIGhyZWY9IiNBV09SRFdJTkRPV1MiPkEgV29yZCBhYm91dCBXaW5kb3dzPC9hPjwvZHQ+Cis8ZHQ+Ni4gPGEgaHJlZj0iI1BSSU5UVyI+T3V0cHV0IGZ1bmN0aW9uczwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjYuMS4gPGEgaHJlZj0iI0FERENIQ0xBU1MiPmFkZGNoKCkgY2xhc3Mgb2YgZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+Ni4yLiA8YSBocmVmPSIjQUVOMjk4Ij5tdmFkZGNoKCksIHdhZGRjaCgpIGFuZAorbXZ3YWRkY2goKTwvYT48L2R0PgorPGR0PjYuMy4gPGEgaHJlZj0iI1BSSU5UV0NMQVNTIj5wcmludHcoKSBjbGFzcyBvZgorZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+Ni40LiA8YSBocmVmPSIjQUREU1RSQ0xBU1MiPmFkZHN0cigpIGNsYXNzIG9mCitmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD42LjUuIDxhIGhyZWY9IiNBQ0FVVElPTiI+QSB3b3JkIG9mIGNhdXRpb248L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjcuIDxhIGhyZWY9IiNTQ0FOVyI+SW5wdXQgZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+Ny4xLiA8YSBocmVmPSIjR0VUQ0hDTEFTUyI+Z2V0Y2goKSBjbGFzcyBvZiBmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD43LjIuIDxhIGhyZWY9IiNTQ0FOV0NMQVNTIj5zY2FudygpIGNsYXNzIG9mIGZ1bmN0aW9uczwvYT48L2R0PgorPGR0PjcuMy4gPGEgaHJlZj0iI0dFVFNUUkNMQVNTIj5nZXRzdHIoKSBjbGFzcyBvZgorZnVuY3Rpb25zPC9hPjwvZHQ+Cis8ZHQ+Ny40LiA8YSBocmVmPSIjR0VUU1RSRVgiPlNvbWUgZXhhbXBsZXM8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjguIDxhIGhyZWY9IiNBVFRSSUIiPkF0dHJpYnV0ZXM8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD44LjEuIDxhIGhyZWY9IiNBVFRSSUJERVRBSUxTIj5UaGUgZGV0YWlsczwvYT48L2R0PgorPGR0PjguMi4gPGEgaHJlZj0iI0FUVFJPTlZTQVRUUlNFVCI+YXR0cm9uKCkgdnMgYXR0cnNldCgpPC9hPjwvZHQ+Cis8ZHQ+OC4zLiA8YSBocmVmPSIjQVRUUl9HRVQiPmF0dHJfZ2V0KCk8L2E+PC9kdD4KKzxkdD44LjQuIDxhIGhyZWY9IiNBVFRSX0ZVTkNTIj5hdHRyXyBmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD44LjUuIDxhIGhyZWY9IiNXQVRUUkZVTkNTIj53YXR0ciBmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD44LjYuIDxhIGhyZWY9IiNDSEdBVCI+Y2hnYXQoKSBmdW5jdGlvbnM8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjkuIDxhIGhyZWY9IiNXSU5ET1dTIj5XaW5kb3dzPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+OS4xLiA8YSBocmVmPSIjV0lORE9XQkFTSUNTIj5UaGUgYmFzaWNzPC9hPjwvZHQ+Cis8ZHQ+OS4yLiA8YSBocmVmPSIjTEVUQkVXSU5ET1ciPkxldCB0aGVyZSBiZSBhIFdpbmRvdyAhISE8L2E+PC9kdD4KKzxkdD45LjMuIDxhIGhyZWY9IiNCT1JERVJFWEVYUEwiPkV4cGxhbmF0aW9uPC9hPjwvZHQ+Cis8ZHQ+OS40LiA8YSBocmVmPSIjT1RIRVJTVFVGRiI+VGhlIG90aGVyIHN0dWZmIGluIHRoZQorZXhhbXBsZTwvYT48L2R0PgorPGR0PjkuNS4gPGEgaHJlZj0iI09USEVSQk9SREVSRlVOQ1MiPk90aGVyIEJvcmRlcgorZnVuY3Rpb25zPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4xMC4gPGEgaHJlZj0iI0NPTE9SIj5Db2xvcnM8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xMC4xLiA8YSBocmVmPSIjQ09MT1JCQVNJQ1MiPlRoZSBiYXNpY3M8L2E+PC9kdD4KKzxkdD4xMC4yLiA8YSBocmVmPSIjQ0hBTkdFQ09MT1JERUZTIj5DaGFuZ2luZyBDb2xvcgorRGVmaW5pdGlvbnM8L2E+PC9kdD4KKzxkdD4xMC4zLiA8YSBocmVmPSIjQ09MT1JDT05URU5UIj5Db2xvciBDb250ZW50PC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4xMS4gPGEgaHJlZj0iI0tFWVMiPkludGVyZmFjaW5nIHdpdGggdGhlIGtleSBib2FyZDwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjExLjEuIDxhIGhyZWY9IiNLRVlTQkFTSUNTIj5UaGUgQmFzaWNzPC9hPjwvZHQ+Cis8ZHQ+MTEuMi4gPGEgaHJlZj0iI1NJTVBMRUtFWUVYIj5BIFNpbXBsZSBLZXkgVXNhZ2UKK2V4YW1wbGU8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjEyLiA8YSBocmVmPSIjTU9VU0UiPkludGVyZmFjaW5nIHdpdGggdGhlIG1vdXNlPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+MTIuMS4gPGEgaHJlZj0iI01PVVNFQkFTSUNTIj5UaGUgQmFzaWNzPC9hPjwvZHQ+Cis8ZHQ+MTIuMi4gPGEgaHJlZj0iI0dFVFRJTkdFVkVOVFMiPkdldHRpbmcgdGhlIGV2ZW50czwvYT48L2R0PgorPGR0PjEyLjMuIDxhIGhyZWY9IiNNT1VTRVRPR0VUSEVSIj5QdXR0aW5nIGl0IGFsbCBUb2dldGhlcjwvYT48L2R0PgorPGR0PjEyLjQuIDxhIGhyZWY9IiNNSVNDTU9VU0VGVU5DUyI+TWlzY2VsbGFuZW91cworRnVuY3Rpb25zPC9hPjwvZHQ+Cis8L2RsPgorPC9kZD4KKzxkdD4xMy4gPGEgaHJlZj0iI1NDUkVFTiI+U2NyZWVuIE1hbmlwdWxhdGlvbjwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjEzLjEuIDxhIGhyZWY9IiNHRVRZWCI+Z2V0eXgoKSBmdW5jdGlvbnM8L2E+PC9kdD4KKzxkdD4xMy4yLiA8YSBocmVmPSIjU0NSRUVORFVNUCI+U2NyZWVuIER1bXBpbmc8L2E+PC9kdD4KKzxkdD4xMy4zLiA8YSBocmVmPSIjV0lORE9XRFVNUCI+V2luZG93IER1bXBpbmc8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjE0LiA8YSBocmVmPSIjTUlTQyI+TWlzY2VsbGFuZW91cyBmZWF0dXJlczwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjE0LjEuIDxhIGhyZWY9IiNDVVJTU0VUIj5jdXJzX3NldCgpPC9hPjwvZHQ+Cis8ZHQ+MTQuMi4gPGEgaHJlZj0iI1RFTVBMRUFWRSI+VGVtcG9yYXJpbHkgTGVhdmluZyBDdXJzZXMKK21vZGU8L2E+PC9kdD4KKzxkdD4xNC4zLiA8YSBocmVmPSIjQUNTVkFSUyI+QUNTXyB2YXJpYWJsZXM8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjE1LiA8YSBocmVmPSIjT1RIRVJMSUIiPk90aGVyIGxpYnJhcmllczwvYT48L2R0PgorPGR0PjE2LiA8YSBocmVmPSIjUEFORUxTIj5QYW5lbCBMaWJyYXJ5PC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+MTYuMS4gPGEgaHJlZj0iI1BBTkVMQkFTSUNTIj5UaGUgQmFzaWNzPC9hPjwvZHQ+Cis8ZHQ+MTYuMi4gPGEgaHJlZj0iI0NPTVBJTEVQQU5FTFMiPkNvbXBpbGluZyBXaXRoIHRoZSBQYW5lbHMKK0xpYnJhcnk8L2E+PC9kdD4KKzxkdD4xNi4zLiA8YSBocmVmPSIjUEFORUxCUk9XU0lORyI+UGFuZWwgV2luZG93IEJyb3dzaW5nPC9hPjwvZHQ+Cis8ZHQ+MTYuNC4gPGEgaHJlZj0iI1VTRVJQVFJVU0lORyI+VXNpbmcgVXNlciBQb2ludGVyczwvYT48L2R0PgorPGR0PjE2LjUuIDxhIGhyZWY9IiNQQU5FTE1PVkVSRVNJWkUiPk1vdmluZyBhbmQgUmVzaXppbmcKK1BhbmVsczwvYT48L2R0PgorPGR0PjE2LjYuIDxhIGhyZWY9IiNQQU5FTFNIT1dISURFIj5IaWRpbmcgYW5kIFNob3dpbmcKK1BhbmVsczwvYT48L2R0PgorPGR0PjE2LjcuIDxhIGhyZWY9IiNQQU5FTEFCT1ZFIj5wYW5lbF9hYm92ZSgpIGFuZCBwYW5lbF9iZWxvdygpCitGdW5jdGlvbnM8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjE3LiA8YSBocmVmPSIjTUVOVVMiPk1lbnVzIExpYnJhcnk8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xNy4xLiA8YSBocmVmPSIjTUVOVUJBU0lDUyI+VGhlIEJhc2ljczwvYT48L2R0PgorPGR0PjE3LjIuIDxhIGhyZWY9IiNDT01QSUxFTUVOVVMiPkNvbXBpbGluZyBXaXRoIHRoZSBNZW51CitMaWJyYXJ5PC9hPjwvZHQ+Cis8ZHQ+MTcuMy4gPGEgaHJlZj0iI01FTlVEUklWRVIiPk1lbnUgRHJpdmVyOiBUaGUgd29yayBob3JzZSBvZiB0aGUKK21lbnUgc3lzdGVtPC9hPjwvZHQ+Cis8ZHQ+MTcuNC4gPGEgaHJlZj0iI01FTlVXSU5ET1dTIj5NZW51IFdpbmRvd3M8L2E+PC9kdD4KKzxkdD4xNy41LiA8YSBocmVmPSIjU0NST0xMTUVOVVMiPlNjcm9sbGluZyBNZW51czwvYT48L2R0PgorPGR0PjE3LjYuIDxhIGhyZWY9IiNNVUxUSUNPTFVNTiI+TXVsdGkgQ29sdW1uYXIgTWVudXM8L2E+PC9kdD4KKzxkdD4xNy43LiA8YSBocmVmPSIjTVVMVElWQUxVRU1FTlVTIj5NdWx0aSBWYWx1ZWQgTWVudXM8L2E+PC9kdD4KKzxkdD4xNy44LiA8YSBocmVmPSIjTUVOVU9QVCI+TWVudSBPcHRpb25zPC9hPjwvZHQ+Cis8ZHQ+MTcuOS4gPGEgaHJlZj0iI01FTlVVU0VSUFRSIj5UaGUgdXNlZnVsIFVzZXIgUG9pbnRlcjwvYT48L2R0PgorPC9kbD4KKzwvZGQ+Cis8ZHQ+MTguIDxhIGhyZWY9IiNGT1JNUyI+Rm9ybXMgTGlicmFyeTwvYT48L2R0PgorPGRkPgorPGRsPgorPGR0PjE4LjEuIDxhIGhyZWY9IiNGT1JNQkFTSUNTIj5UaGUgQmFzaWNzPC9hPjwvZHQ+Cis8ZHQ+MTguMi4gPGEgaHJlZj0iI0NPTVBJTEVGT1JNUyI+Q29tcGlsaW5nIFdpdGggdGhlIEZvcm1zCitMaWJyYXJ5PC9hPjwvZHQ+Cis8ZHQ+MTguMy4gPGEgaHJlZj0iI1BMQVlGSUVMRFMiPlBsYXlpbmcgd2l0aCBGaWVsZHM8L2E+PC9kdD4KKzxkdD4xOC40LiA8YSBocmVmPSIjRk9STVdJTkRPV1MiPkZvcm0gV2luZG93czwvYT48L2R0PgorPGR0PjE4LjUuIDxhIGhyZWY9IiNGSUxFRFZBTElEQVRFIj5GaWVsZCBWYWxpZGF0aW9uPC9hPjwvZHQ+Cis8ZHQ+MTguNi4gPGEgaHJlZj0iI0ZPUk1EUklWRVIiPkZvcm0gRHJpdmVyOiBUaGUgd29yayBob3JzZSBvZiB0aGUKK2Zvcm1zIHN5c3RlbTwvYT48L2R0PgorPC9kbD4KKzwvZGQ+Cis8ZHQ+MTkuIDxhIGhyZWY9IiNUT09MUyI+VG9vbHMgYW5kIFdpZGdldCBMaWJyYXJpZXM8L2E+PC9kdD4KKzxkZD4KKzxkbD4KKzxkdD4xOS4xLiA8YSBocmVmPSIjQ0RLIj5DREsgKEN1cnNlcyBEZXZlbG9wbWVudCBLaXQpPC9hPjwvZHQ+Cis8ZHQ+MTkuMi4gPGEgaHJlZj0iI0RJQUxPRyI+VGhlIGRpYWxvZzwvYT48L2R0PgorPGR0PjE5LjMuIDxhIGhyZWY9IiNQRVJMQ1VSU0VTIj5QZXJsIEN1cnNlcyBNb2R1bGVzIENVUlNFUzo6Rk9STQorYW5kIENVUlNFUzo6V0lER0VUUzwvYT48L2R0PgorPC9kbD4KKzwvZGQ+Cis8ZHQ+MjAuIDxhIGhyZWY9IiNKVVNURk9SRlVOIj5KdXN0IEZvciBGdW4gISEhPC9hPjwvZHQ+Cis8ZGQ+Cis8ZGw+Cis8ZHQ+MjAuMS4gPGEgaHJlZj0iI0dBTUVPRkxJRkUiPlRoZSBHYW1lIG9mIExpZmU8L2E+PC9kdD4KKzxkdD4yMC4yLiA8YSBocmVmPSIjTUFHSUMiPk1hZ2ljIFNxdWFyZTwvYT48L2R0PgorPGR0PjIwLjMuIDxhIGhyZWY9IiNIQU5PSSI+VG93ZXJzIG9mIEhhbm9pPC9hPjwvZHQ+Cis8ZHQ+MjAuNC4gPGEgaHJlZj0iI1FVRUVOUyI+UXVlZW5zIFB1enpsZTwvYT48L2R0PgorPGR0PjIwLjUuIDxhIGhyZWY9IiNTSFVGRkxFIj5TaHVmZmxlPC9hPjwvZHQ+Cis8ZHQ+MjAuNi4gPGEgaHJlZj0iI1RUIj5UeXBpbmcgVHV0b3I8L2E+PC9kdD4KKzwvZGw+Cis8L2RkPgorPGR0PjIxLiA8YSBocmVmPSIjUkVGIj5SZWZlcmVuY2VzPC9hPjwvZHQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJJTlRSTyIgaWQ9IklOVFJPIj4xLgorSW50cm9kdWN0aW9uPC9hPjwvaDI+Cis8cD5JbiB0aGUgb2xkZW4gZGF5cyBvZiB0ZWxldHlwZSB0ZXJtaW5hbHMsIHRlcm1pbmFscyB3ZXJlIGF3YXkKK2Zyb20gY29tcHV0ZXJzIGFuZCB3ZXJlIGNvbm5lY3RlZCB0byB0aGVtIHRocm91Z2ggc2VyaWFsIGNhYmxlcy4KK1RoZSB0ZXJtaW5hbHMgY291bGQgYmUgY29uZmlndXJlZCBieSBzZW5kaW5nIGEgc2VyaWVzIG9mIGJ5dGVzLiBBbGwKK3RoZSBjYXBhYmlsaXRpZXMgKHN1Y2ggYXMgbW92aW5nIHRoZSBjdXJzb3IgdG8gYSBuZXcgbG9jYXRpb24sCitlcmFzaW5nIHBhcnQgb2YgdGhlIHNjcmVlbiwgc2Nyb2xsaW5nIHRoZSBzY3JlZW4sIGNoYW5naW5nIG1vZGVzCitldGMuKSBvZiB0ZXJtaW5hbHMgY291bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGVzZSBzZXJpZXMgb2YgYnl0ZXMuCitUaGVzZSBjb250cm9sIHNlZXVxbmNlcyBhcmUgdXN1YWxseSBjYWxsZWQgZXNjYXBlIHNlcXVlbmNlcywKK2JlY2F1c2UgdGhleSBzdGFydCB3aXRoIGFuIGVzY2FwZSgweDFCKSBjaGFyYWN0ZXIuIEV2ZW4gdG9kYXksIHdpdGgKK3Byb3BlciBlbXVsYXRpb24sIHdlIGNhbiBzZW5kIGVzY2FwZSBzZXF1ZW5jZXMgdG8gdGhlIGVtdWxhdG9yIGFuZAorYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3Qgb24gYSB0ZXJtaW5hbCB3aW5kb3cuPC9wPgorPHA+U3VwcG9zZSB5b3Ugd2FudGVkIHRvIHByaW50IGEgbGluZSBpbiBjb2xvci4gVHJ5IHR5cGluZyB0aGlzIG9uCit5b3VyIGNvbnNvbGUuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPmVjaG8gIl5bWzA7MzE7NDBtSW4gQ29sb3IiPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGZpcnN0IGNoYXJhY3RlciBpcyBhbiBlc2NhcGUgY2hhcmFjdGVyLCB3aGljaCBsb29rcyBsaWtlIHR3bworY2hhcmFjdGVycyBeIGFuZCBbLiBUbyBiZSBhYmxlIHRvIHByaW50IGl0LCB5b3UgaGF2ZSB0byBwcmVzcworQ1RSTCtWIGFuZCB0aGVuIHRoZSBFU0Mga2V5LiBBbGwgdGhlIG90aGVycyBhcmUgbm9ybWFsIHByaW50YWJsZQorY2hhcmFjdGVycy4gWW91IHNob3VsZCBiZSBhYmxlIHRvIHNlZSB0aGUgc3RyaW5nICJJbiBDb2xvciIgaW4gcmVkLgorSXQgc3RheXMgdGhhdCB3YXkgYW5kIHRvIHJldmVydCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBtb2RlIHR5cGUKK3RoaXMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPmVjaG8gIl5bWzA7Mzc7NDBtIjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPk5vdywgd2hhdCBkbyB0aGVzZSBtYWdpYyBjaGFyYWN0ZXJzIG1lYW4/IERpZmZpY3VsdCB0bworY29tcHJlaGVuZD8gVGhleSBtaWdodCBldmVuIGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHRlcm1pbmFscy4KK1NvIHRoZSBkZXNpZ25lcnMgb2YgVU5JWCBpbnZlbnRlZCBhIG1lY2hhbmlzbSBuYW1lZCA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnRlcm1jYXA8L3Zhcj4uIEl0IGlzIGEgZmlsZSB0aGF0IGxpc3RzIGFsbCB0aGUKK2NhcGFiaWxpdGllcyBvZiBhIHBhcnRpY3VsYXIgdGVybWluYWwsIGFsb25nIHdpdGggdGhlIGVzY2FwZQorc2VxdWVuY2VzIG5lZWRlZCB0byBhY2hpZXZlIGEgcGFydGljdWxhciBlZmZlY3QuIEluIHRoZSBsYXRlcgoreWVhcnMsIHRoaXMgd2FzIHJlcGxhY2VkIGJ5IDx2YXIgY2xhc3M9IkxJVEVSQUwiPnRlcm1pbmZvPC92YXI+LgorV2l0aG91dCBkZWx2aW5nIHRvbyBtdWNoIGludG8gZGV0YWlscywgdGhpcyBtZWNoYW5pc20gYWxsb3dzCithcHBsaWNhdGlvbiBwcm9ncmFtcyB0byBxdWVyeSB0aGUgdGVybWluZm8gZGF0YWJhc2UgYW5kIG9idGFpbiB0aGUKK2NvbnRyb2wgY2hhcmFjdGVycyB0byBiZSBzZW50IHRvIGEgdGVybWluYWwgb3IgdGVybWluYWwKK2VtdWxhdG9yLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IldIQVRJUyIgaWQ9IldIQVRJUyI+MS4xLiBXaGF0IGlzCitOQ1VSU0VTPzwvYT48L2gzPgorPHA+WW91IG1pZ2h0IGJlIHdvbmRlcmluZywgd2hhdCB0aGUgaW1wb3J0IG9mIGFsbCB0aGlzIHRlY2huaWNhbAorZ2liYmVyaXNoIGlzLiBJbiB0aGUgYWJvdmUgc2NlbmFyaW8sIGV2ZXJ5IGFwcGxpY2F0aW9uIHByb2dyYW0gaXMKK3N1cHBvc2VkIHRvIHF1ZXJ5IHRoZSB0ZXJtaW5mbyBhbmQgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IHN0dWZmCisoc2VuZGluZyBjb250cm9sIGNoYXJhY3RlcnMgZXRjLikuIEl0IHNvb24gYmVjYW1lIGRpZmZpY3VsdCB0bworbWFuYWdlIHRoaXMgY29tcGxleGl0eSBhbmQgdGhpcyBnYXZlIGJpcnRoIHRvICdDVVJTRVMnLiBDdXJzZXMgaXMgYQorcHVuIG9uIHRoZSBuYW1lICJjdXJzb3Igb3B0aW1pemF0aW9uIi4gVGhlIEN1cnNlcyBsaWJyYXJ5IGZvcm1zIGEKK3dyYXBwZXIgb3ZlciB3b3JraW5nIHdpdGggcmF3IHRlcm1pbmFsIGNvZGVzLCBhbmQgcHJvdmlkZXMgaGlnaGx5CitmbGV4aWJsZSBhbmQgZWZmaWNpZW50IEFQSSAoQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlKS4gSXQKK3Byb3ZpZGVzIGZ1bmN0aW9ucyB0byBtb3ZlIHRoZSBjdXJzb3IsIGNyZWF0ZSB3aW5kb3dzLCBwcm9kdWNlCitjb2xvcnMsIHBsYXkgd2l0aCBtb3VzZSBldGMuIFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtcyBuZWVkIG5vdAord29ycnkgYWJvdXQgdGhlIHVuZGVybHlpbmcgdGVybWluYWwgY2FwYWJpbGl0aWVzLjwvcD4KKzxwPlNvIHdoYXQgaXMgTkNVUlNFUz8gTkNVUlNFUyBpcyBhIGNsb25lIG9mIHRoZSBvcmlnaW5hbCBTeXN0ZW0gVgorUmVsZWFzZSA0LjAgKFNWcjQpIGN1cnNlcy4gSXQgaXMgYSBmcmVlbHkgZGlzdHJpYnV0YWJsZSBsaWJyYXJ5LAorZnVsbHkgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb24gb2YgY3Vyc2VzLiBJbiBzaG9ydCwgaXQgaXMgYQorbGlicmFyeSBvZiBmdW5jdGlvbnMgdGhhdCBtYW5hZ2VzIGFuIGFwcGxpY2F0aW9uJ3MgZGlzcGxheSBvbgorY2hhcmFjdGVyLWNlbGwgdGVybWluYWxzLiBJbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkb2N1bWVudCwgdGhlCit0ZXJtcyBjdXJzZXMgYW5kIG5jdXJzZXMgYXJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5LjwvcD4KKzxwPkEgZGV0YWlsZWQgaGlzdG9yeSBvZiBOQ1VSU0VTIGNhbiBiZSBmb3VuZCBpbiB0aGUgTkVXUyBmaWxlIGZyb20KK3RoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiBUaGUgY3VycmVudCBwYWNrYWdlIGlzIG1haW50YWluZWQgYnkKKzxhIGhyZWY9Im1haWx0bzpkaWNrZXlAaGlzLmNvbSIgdGFyZ2V0PSJfdG9wIj5UaG9tYXMgRGlja2V5PC9hPi4KK1lvdSBjYW4gY29udGFjdCB0aGUgbWFpbnRhaW5lcnMgYXQgPGEgaHJlZj0KKyJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyIgdGFyZ2V0PQorIl90b3AiPmJ1Zy1uY3Vyc2VzQGdudS5vcmc8L2E+LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iV0hBVENBTldFRE8iIGlkPSJXSEFUQ0FOV0VETyI+MS4yLiBXaGF0Cit3ZSBjYW4gZG8gd2l0aCBOQ1VSU0VTPC9hPjwvaDM+Cis8cD5OQ1VSU0VTIG5vdCBvbmx5IGNyZWF0ZXMgYSB3cmFwcGVyIG92ZXIgdGVybWluYWwgY2FwYWJpbGl0aWVzLAorYnV0IGFsc28gZ2l2ZXMgYSByb2J1c3QgZnJhbWV3b3JrIHRvIGNyZWF0ZSBuaWNlIGxvb2tpbmcgVUkgKFVzZXIKK0ludGVyZmFjZSlzIGluIHRleHQgbW9kZS4gSXQgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGNyZWF0ZSB3aW5kb3dzCitldGMuIEl0cyBzaXN0ZXIgbGlicmFyaWVzIHBhbmVsLCBtZW51IGFuZCBmb3JtIHByb3ZpZGUgYW4gZXh0ZW5zaW9uCit0byB0aGUgYmFzaWMgY3Vyc2VzIGxpYnJhcnkuIFRoZXNlIGxpYnJhcmllcyB1c3VhbGx5IGNvbWUgYWxvbmcKK3dpdGggY3Vyc2VzLiBPbmUgY2FuIGNyZWF0ZSBhcHBsaWNhdGlvbnMgdGhhdCBjb250YWluIG11bHRpcGxlCit3aW5kb3dzLCBtZW51cywgcGFuZWxzIGFuZCBmb3Jtcy4gV2luZG93cyBjYW4gYmUgbWFuYWdlZAoraW5kZXBlbmRlbnRseSwgY2FuIHByb3ZpZGUgJ3Njcm9sbGFiaWxpdHknIGFuZCBldmVuIGNhbiBiZQoraGlkZGVuLjwvcD4KKzxwPk1lbnVzIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhbiBlYXN5IGNvbW1hbmQgc2VsZWN0aW9uIG9wdGlvbi4KK0Zvcm1zIGFsbG93IHRoZSBjcmVhdGlvbiBvZiBlYXN5LXRvLXVzZSBkYXRhIGVudHJ5IGFuZCBkaXNwbGF5Cit3aW5kb3dzLiBQYW5lbHMgZXh0ZW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgbmN1cnNlcyB0byBkZWFsIHdpdGgKK292ZXJsYXBwaW5nIGFuZCBzdGFja2VkIHdpbmRvd3MuPC9wPgorPHA+VGhlc2UgYXJlIGp1c3Qgc29tZSBvZiB0aGUgYmFzaWMgdGhpbmdzIHdlIGNhbiBkbyB3aXRoIG5jdXJzZXMuCitBcyB3ZSBtb3ZlIGFsb25nLCBXZSB3aWxsIHNlZSBhbGwgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGVzZQorbGlicmFyaWVzLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iV0hFUkVUT0dFVElUIiBpZD0iV0hFUkVUT0dFVElUIj4xLjMuCitXaGVyZSB0byBnZXQgaXQ8L2E+PC9oMz4KKzxwPkFsbCByaWdodCwgbm93IHRoYXQgeW91IGtub3cgd2hhdCB5b3UgY2FuIGRvIHdpdGggbmN1cnNlcywgeW91CittdXN0IGJlIHJlYXJpbmcgdG8gZ2V0IHN0YXJ0ZWQuIE5DVVJTRVMgaXMgdXN1YWxseSBzaGlwcGVkIHdpdGgKK3lvdXIgaW5zdGFsbGF0aW9uLiBJbiBjYXNlIHlvdSBkb24ndCBoYXZlIHRoZSBsaWJyYXJ5IG9yIHdhbnQgdG8KK2NvbXBpbGUgaXQgb24geW91ciBvd24sIHJlYWQgb24uPC9wPgorPHA+PGVtPkNvbXBpbGluZyB0aGUgcGFja2FnZTwvZW0+PC9wPgorPHA+TkNVUlNFUyBjYW4gYmUgb2J0YWluZWQgZnJvbSA8YSBocmVmPQorImZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvbmN1cnNlcy9uY3Vyc2VzLnRhci5neiIgdGFyZ2V0PQorIl90b3AiPmZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvbmN1cnNlcy9uY3Vyc2VzLnRhci5nejwvYT4gb3IgYW55CitvZiB0aGUgZnRwIHNpdGVzIG1lbnRpb25lZCBpbiA8YSBocmVmPQorImh0dHA6Ly93d3cuZ251Lm9yZy9vcmRlci9mdHAuaHRtbCIgdGFyZ2V0PQorIl90b3AiPmh0dHA6Ly93d3cuZ251Lm9yZy9vcmRlci9mdHAuaHRtbDwvYT4uPC9wPgorPHA+UmVhZCB0aGUgUkVBRE1FIGFuZCBJTlNUQUxMIGZpbGVzIGZvciBkZXRhaWxzIG9uIHRvIGhvdyB0bworaW5zdGFsbCBpdC4gSXQgdXN1YWxseSBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+ICAgIHRhciB6eHZmIG5jdXJzZXMmbHQ7dmVyc2lvbiZndDsudGFyLmd6ICAjIHVuemlwIGFuZCB1bnRhciB0aGUgYXJjaGl2ZQorICAgIGNkIG5jdXJzZXMmbHQ7dmVyc2lvbiZndDsgICAgICAgICAgICAgICAjIGNkIHRvIHRoZSBkaXJlY3RvcnkKKyAgICAuL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb25maWd1cmUgdGhlIGJ1aWxkIGFjY29yZGluZyB0byB5b3VyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVudmlyb25tZW50CisgICAgbWFrZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFrZSBpdAorICAgIHN1IHJvb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJlY29tZSByb290CisgICAgbWFrZSBpbnN0YWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5zdGFsbCBpdDwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPjxlbT5Vc2luZyB0aGUgUlBNPC9lbT48L3A+Cis8cD5OQ1VSU0VTIFJQTSBjYW4gYmUgZm91bmQgYW5kIGRvd25sb2FkZWQgZnJvbSA8YSBocmVmPQorImh0dHA6Ly9ycG1maW5kLm5ldCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vcnBtZmluZC5uZXQ8L2E+IC4gVGhlIFJQTQorY2FuIGJlIGluc3RhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBhZnRlciBiZWNvbWluZworcm9vdC48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIHJwbSAtaSAmbHQ7ZG93bmxvYWRlZCBycG0mZ3Q7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJQVVJQT1NFIiBpZD0iUFVSUE9TRSI+MS40LiBQdXJwb3NlL1Njb3BlCitvZiB0aGUgZG9jdW1lbnQ8L2E+PC9oMz4KKzxwPlRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gYmUgYSAiQWxsIGluIE9uZSIgZ3VpZGUgZm9yCitwcm9ncmFtbWluZyB3aXRoIG5jdXJzZXMgYW5kIGl0cyBzaXN0ZXIgbGlicmFyaWVzLiBXZSBncmFkdWF0ZSBmcm9tCithIHNpbXBsZSAiSGVsbG8gV29ybGQiIHByb2dyYW0gdG8gbW9yZSBjb21wbGV4IGZvcm0gbWFuaXB1bGF0aW9uLgorTm8gcHJpb3IgZXhwZXJpZW5jZSBpbiBuY3Vyc2VzIGlzIGFzc3VtZWQuIFRoZSB3cml0aW5nIGlzIGluZm9ybWFsLAorYnV0IGEgbG90IG9mIGRldGFpbCBpcyBwcm92aWRlZCBmb3IgZWFjaCBvZiB0aGUgZXhhbXBsZXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBQk9VVFBST0dSQU1TIiBpZD0iQUJPVVRQUk9HUkFNUyI+MS41LgorQWJvdXQgdGhlIFByb2dyYW1zPC9hPjwvaDM+Cis8cD5BbGwgdGhlIHByb2dyYW1zIGluIHRoZSBkb2N1bWVudCBhcmUgYXZhaWxhYmxlIGluIHppcHBlZCBmb3JtCis8YSBocmVmPQorImh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy9uY3Vyc2VzX3Byb2dyYW1zLnRhci5neiIKK3RhcmdldD0iX3RvcCI+aGVyZTwvYT4uIFVuemlwIGFuZCB1bnRhciBpdC4gVGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK2xvb2tzIGxpa2UgdGhpcy48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+bmN1cnNlcworICAgfAorICAgfC0tLS0mZ3Q7IEp1c3RGb3JGdW4gICAgIC0tIGp1c3QgZm9yIGZ1biBwcm9ncmFtcworICAgfC0tLS0mZ3Q7IGJhc2ljcyAgICAgICAgIC0tIGJhc2ljIHByb2dyYW1zCisgICB8LS0tLSZndDsgZGVtbyAgICAgICAgICAgLS0gb3V0cHV0IGZpbGVzIGdvIGludG8gdGhpcyBkaXJlY3RvcnkgYWZ0ZXIgbWFrZQorICAgfCAgICAgICAgICB8CisgICB8ICAgICAgICAgIHwtLS0tJmd0OyBleGUgLS0gZXhlIGZpbGVzIG9mIGFsbCBleGFtcGxlIHByb2dyYW1zCisgICB8LS0tLSZndDsgZm9ybXMgICAgICAgICAgLS0gcHJvZ3JhbXMgcmVsYXRlZCB0byBmb3JtIGxpYnJhcnkKKyAgIHwtLS0tJmd0OyBtZW51cyAgICAgICAgICAtLSBwcm9ncmFtcyByZWxhdGVkIHRvIG1lbnVzIGxpYnJhcnkKKyAgIHwtLS0tJmd0OyBwYW5lbHMgICAgICAgICAtLSBwcm9ncmFtcyByZWxhdGVkIHRvIHBhbmVscyBsaWJyYXJ5CisgICB8LS0tLSZndDsgcGVybCAgICAgICAgICAgLS0gcGVybCBlcXVpdmFsZW50cyBvZiB0aGUgZXhhbXBsZXMgKGNvbnRyaWJ1dGVkCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IEFudXJhZGhhIFJhdG5hd2VlcmEpCisgICB8LS0tLSZndDsgTWFrZWZpbGUgICAgICAgLS0gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZQorICAgfC0tLS0mZ3Q7IFJFQURNRSAgICAgICAgIC0tIHRoZSB0b3AgbGV2ZWwgUkVBRE1FIGZpbGUuIGNvbnRhaW5zIGluc3RydWN0aW9ucworICAgfC0tLS0mZ3Q7IENPUFlJTkcgICAgICAgIC0tIGNvcHlyaWdodCBub3RpY2U8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGUgaW5kaXZpZHVhbCBkaXJlY3RvcmllcyBjb250YWluIHRoZSBmb2xsb3dpbmcgZmlsZXMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPkRlc2NyaXB0aW9uIG9mIGZpbGVzIGluIGVhY2ggZGlyZWN0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSnVzdEZvckZ1bgorICAgIHwKKyAgICB8LS0tLSZndDsgaGFub2kuYyAgIC0tIFRoZSBUb3dlcnMgb2YgSGFub2kgU29sdmVyCisgICAgfC0tLS0mZ3Q7IGxpZmUuYyAgICAtLSBUaGUgR2FtZSBvZiBMaWZlIGRlbW8KKyAgICB8LS0tLSZndDsgbWFnaWMuYyAgIC0tIEFuIE9kZCBPcmRlciBNYWdpYyBTcXVhcmUgYnVpbGRlciAKKyAgICB8LS0tLSZndDsgcXVlZW5zLmMgIC0tIFRoZSBmYW1vdXMgTi1RdWVlbnMgU29sdmVyCisgICAgfC0tLS0mZ3Q7IHNodWZmbGUuYyAtLSBBIGZ1biBnYW1lLCBpZiB5b3UgaGF2ZSB0aW1lIHRvIGtpbGwKKyAgICB8LS0tLSZndDsgdHQuYyAgICAgIC0tIEEgdmVyeSB0cml2aWFsIHR5cGluZyB0dXRvcgorCisgIGJhc2ljcworICAgIHwKKyAgICB8LS0tLSZndDsgYWNzX3ZhcnMuYyAgICAgICAgICAgIC0tIEFDU18gdmFyaWFibGVzIGV4YW1wbGUKKyAgICB8LS0tLSZndDsgaGVsbG9fd29ybGQuYyAgICAgICAgIC0tIFNpbXBsZSAiSGVsbG8gV29ybGQiIFByb2dyYW0KKyAgICB8LS0tLSZndDsgaW5pdF9mdW5jX2V4YW1wbGUuYyAgIC0tIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBleGFtcGxlCisgICAgfC0tLS0mZ3Q7IGtleV9jb2RlLmMgICAgICAgICAgICAtLSBTaG93cyB0aGUgc2NhbiBjb2RlIG9mIHRoZSBrZXkgcHJlc3NlZAorICAgIHwtLS0tJmd0OyBtb3VzZV9tZW51LmMgICAgICAgICAgLS0gQSBtZW51IGFjY2Vzc2libGUgYnkgbW91c2UKKyAgICB8LS0tLSZndDsgb3RoZXJfYm9yZGVyLmMgICAgICAgIC0tIFNob3dzIHVzYWdlIG9mIG90aGVyIGJvcmRlciBmdW5jdGlvbnMgYXBhCisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBydCBmcm9tIGJveCgpCisgICAgfC0tLS0mZ3Q7IHByaW50d19leGFtcGxlLmMgICAgICAtLSBBIHZlcnkgc2ltcGxlIHByaW50dygpIGV4YW1wbGUKKyAgICB8LS0tLSZndDsgc2NhbndfZXhhbXBsZS5jICAgICAgIC0tIEEgdmVyeSBzaW1wbGUgZ2V0c3RyKCkgZXhhbXBsZQorICAgIHwtLS0tJmd0OyBzaW1wbGVfYXR0ci5jICAgICAgICAgLS0gQSBwcm9ncmFtIHRoYXQgY2FuIHByaW50IGEgYyBmaWxlIHdpdGggCisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBjb21tZW50cyBpbiBhdHRyaWJ1dGUKKyAgICB8LS0tLSZndDsgc2ltcGxlX2NvbG9yLmMgICAgICAgIC0tIEEgc2ltcGxlIGV4YW1wbGUgZGVtb25zdHJhdGluZyBjb2xvcnMKKyAgICB8LS0tLSZndDsgc2ltcGxlX2tleS5jICAgICAgICAgIC0tIEEgbWVudSBhY2Nlc3NpYmxlIHdpdGgga2V5Ym9hcmQgVVAsIERPV04gCisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhcnJvd3MKKyAgICB8LS0tLSZndDsgdGVtcF9sZWF2ZS5jICAgICAgICAgIC0tIERlbW9uc3RyYXRlcyB0ZW1wb3JhcmlseSBsZWF2aW5nIGN1cnNlcyBtb2RlCisgICAgfC0tLS0mZ3Q7IHdpbl9ib3JkZXIuYyAgICAgICAgICAtLSBTaG93cyBDcmVhdGlvbiBvZiB3aW5kb3dzIGFuZCBib3JkZXJzCisgICAgfC0tLS0mZ3Q7IHdpdGhfY2hnYXQuYyAgICAgICAgICAtLSBjaGdhdCgpIHVzYWdlIGV4YW1wbGUKKworICBmb3JtcyAKKyAgICB8CisgICAgfC0tLS0mZ3Q7IGZvcm1fYXR0cmliLmMgICAgIC0tIFVzYWdlIG9mIGZpZWxkIGF0dHJpYnV0ZXMKKyAgICB8LS0tLSZndDsgZm9ybV9vcHRpb25zLmMgICAgLS0gVXNhZ2Ugb2YgZmllbGQgb3B0aW9ucworICAgIHwtLS0tJmd0OyBmb3JtX3NpbXBsZS5jICAgICAtLSBBIHNpbXBsZSBmb3JtIGV4YW1wbGUKKyAgICB8LS0tLSZndDsgZm9ybV93aW4uYyAgICAgICAgLS0gRGVtbyBvZiB3aW5kb3dzIGFzc29jaWF0ZWQgd2l0aCBmb3JtcworCisgIG1lbnVzIAorICAgIHwKKyAgICB8LS0tLSZndDsgbWVudV9hdHRyaWIuYyAgICAgLS0gVXNhZ2Ugb2YgbWVudSBhdHRyaWJ1dGVzCisgICAgfC0tLS0mZ3Q7IG1lbnVfaXRlbV9kYXRhLmMgIC0tIFVzYWdlIG9mIGl0ZW1fbmFtZSgpIGV0Yy4uIGZ1bmN0aW9ucworICAgIHwtLS0tJmd0OyBtZW51X211bHRpX2NvbHVtbi5jICAgIC0tIENyZWF0ZXMgbXVsdGkgY29sdW1uYXIgbWVudXMKKyAgICB8LS0tLSZndDsgbWVudV9zY3JvbGwuYyAgICAgLS0gRGVtb25zdHJhdGVzIHNjcm9sbGluZyBjYXBhYmlsaXR5IG9mIG1lbnVzCisgICAgfC0tLS0mZ3Q7IG1lbnVfc2ltcGxlLmMgICAgIC0tIEEgc2ltcGxlIG1lbnUgYWNjZXNzZWQgYnkgYXJyb3cga2V5cworICAgIHwtLS0tJmd0OyBtZW51X3RvZ2dsZS5jICAgICAtLSBDcmVhdGVzIG11bHRpIHZhbHVlZCBtZW51cyBhbmQgZXhwbGFpbnMKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gUkVRX1RPR0dMRV9JVEVNCisgICAgfC0tLS0mZ3Q7IG1lbnVfdXNlcnB0ci5jICAgIC0tIFVzYWdlIG9mIHVzZXIgcG9pbnRlcgorICAgIHwtLS0tJmd0OyBtZW51X3dpbi5jICAgICAgICAtLSBEZW1vIG9mIHdpbmRvd3MgYXNzb2NpYXRlZCB3aXRoIG1lbnVzCisKKyAgcGFuZWxzIAorICAgIHwKKyAgICB8LS0tLSZndDsgcGFuZWxfYnJvd3NlLmMgICAgLS0gUGFuZWwgYnJvd3NpbmcgdGhyb3VnaCB0YWIuIFVzYWdlIG9mIHVzZXIgCisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHBvaW50ZXIKKyAgICB8LS0tLSZndDsgcGFuZWxfaGlkZS5jICAgICAgLS0gSGlkaW5nIGFuZCBVbiBoaWRpbmcgb2YgcGFuZWxzCisgICAgfC0tLS0mZ3Q7IHBhbmVsX3Jlc2l6ZS5jICAgIC0tIE1vdmluZyBhbmQgcmVzaXppbmcgb2YgcGFuZWxzCisgICAgfC0tLS0mZ3Q7IHBhbmVsX3NpbXBsZS5jICAgIC0tIEEgc2ltcGxlIHBhbmVsIGV4YW1wbGUKKworICBwZXJsCisgICAgfC0tLS0mZ3Q7IDAxLTEwLnBsICAgICAgICAgIC0tIFBlcmwgZXF1aXZhbGVudHMgb2YgZmlyc3QgdGVuIGV4YW1wbGUgcHJvZ3JhbXM8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGVyZSBpcyBhIHRvcCBsZXZlbCBNYWtlZmlsZSBpbmNsdWRlZCBpbiB0aGUgbWFpbiBkaXJlY3RvcnkuIEl0CitidWlsZHMgYWxsIHRoZSBmaWxlcyBhbmQgcHV0cyB0aGUgcmVhZHktdG8tdXNlIGV4ZXMgaW4gZGVtby9leGUKK2RpcmVjdG9yeS4gWW91IGNhbiBhbHNvIGRvIHNlbGVjdGl2ZSBtYWtlIGJ5IGdvaW5nIGludG8gdGhlCitjb3JyZXNwb25kaW5nIGRpcmVjdG9yeS4gRWFjaCBkaXJlY3RvcnkgY29udGFpbnMgYSBSRUFETUUgZmlsZQorZXhwbGFpbmluZyB0aGUgcHVycG9zZSBvZiBlYWNoIGMgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LjwvcD4KKzxwPkZvciBldmVyeSBleGFtcGxlLCBJIGhhdmUgaW5jbHVkZWQgcGF0aCBuYW1lIGZvciB0aGUgZmlsZQorcmVsYXRpdmUgdG8gdGhlIGV4YW1wbGVzIGRpcmVjdG9yeS48L3A+Cis8cD5JZiB5b3UgcHJlZmVyIGJyb3dzaW5nIGluZGl2aWR1YWwgcHJvZ3JhbXMsIHBvaW50IHlvdXIgYnJvd3NlcgordG8gPGEgaHJlZj0KKyJodHRwOi8vdGxkcC5vcmcvSE9XVE8vTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy9uY3Vyc2VzX3Byb2dyYW1zLyIKK3RhcmdldD0KKyJfdG9wIj5odHRwOi8vdGxkcC5vcmcvSE9XVE8vTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy9uY3Vyc2VzX3Byb2dyYW1zLzwvYT48L3A+Cis8cD5BbGwgdGhlIHByb2dyYW1zIGFyZSByZWxlYXNlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIHRoYXQgaXMKK3VzZWQgYnkgbmN1cnNlcyAoTUlULXN0eWxlKS4gVGhpcyBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gZG8KK3ByZXR0eSBtdWNoIGFueXRoaW5nIG90aGVyIHRoYW4gY2xhaW1pbmcgdGhlbSBhcyB5b3Vycy4gRmVlbCBmcmVlCit0byB1c2UgdGhlbSBpbiB5b3VyIHByb2dyYW1zIGFzIGFwcHJvcHJpYXRlLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iT1RIRVJGT1JNQVRTIiBpZD0iT1RIRVJGT1JNQVRTIj4xLjYuCitPdGhlciBGb3JtYXRzIG9mIHRoZSBkb2N1bWVudDwvYT48L2gzPgorPHA+VGhpcyBob3d0byBpcyBhbHNvIGF2YWlsYWJlIGluIHZhcmlvdXMgb3RoZXIgZm9ybWF0cyBvbiB0aGUKK3RsZHAub3JnIHNpdGUuIEhlcmUgYXJlIHRoZSBsaW5rcyB0byBvdGhlciBmb3JtYXRzIG9mIHRoaXMKK2RvY3VtZW50LjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkxJU1RGT1JNQVRTIiBpZD0iTElTVEZPUk1BVFMiPjEuNi4xLgorUmVhZGlseSBhdmFpbGFibGUgZm9ybWF0cyBmcm9tIHRsZHAub3JnPC9hPjwvaDQ+Cis8dWw+Cis8bGk+Cis8cD48YSBocmVmPQorImh0dHA6Ly93d3cuaWJpYmxpby5vcmcvcHViL0xpbnV4L2RvY3MvSE9XVE8vb3RoZXItZm9ybWF0cy9wZGYvTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy5wZGYiCit0YXJnZXQ9Il90b3AiPkFjcm9iYXQgUERGIEZvcm1hdDwvYT48L3A+Cis8L2xpPgorPGxpPgorPHA+PGEgaHJlZj0KKyJodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC9kb2NzL0hPV1RPL290aGVyLWZvcm1hdHMvcHMvTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy5wcy5neiIKK3RhcmdldD0iX3RvcCI+UG9zdFNjcmlwdCBGb3JtYXQ8L2E+PC9wPgorPC9saT4KKzxsaT4KKzxwPjxhIGhyZWY9CisiaHR0cDovL3d3dy5pYmlibGlvLm9yZy9wdWIvTGludXgvZG9jcy9IT1dUTy9vdGhlci1mb3JtYXRzL2h0bWwvTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy1odG1sLnRhci5neiIKK3RhcmdldD0iX3RvcCI+SW4gTXVsdGlwbGUgSFRNTCBwYWdlczwvYT48L3A+Cis8L2xpPgorPGxpPgorPHA+PGEgaHJlZj0KKyJodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC9kb2NzL0hPV1RPL290aGVyLWZvcm1hdHMvaHRtbF9zaW5nbGUvTkNVUlNFUy1Qcm9ncmFtbWluZy1IT1dUTy5odG1sIgordGFyZ2V0PSJfdG9wIj5JbiBPbmUgYmlnIEhUTUwgZm9ybWF0PC9hPjwvcD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJCVUlMRFNPVVJDRSIgaWQ9IkJVSUxEU09VUkNFIj4xLjYuMi4KK0J1aWxkaW5nIGZyb20gc291cmNlPC9hPjwvaDQ+Cis8cD5JZiBhYm92ZSBsaW5rcyBhcmUgYnJva2VuIG9yIGlmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCBzZ21sCityZWFkIG9uLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPiYjMTM7ICAgIEdldCBib3RoIHRoZSBzb3VyY2UgYW5kIHRoZSB0YXIsZ3ppcHBlZCBwcm9ncmFtcywgYXZhaWxhYmxlIGF0CisgICAgICAgIGh0dHA6Ly9jdnN2aWV3LnRsZHAub3JnL2luZGV4LmNnaS9MRFAvaG93dG8vZG9jYm9vay8KKyAgICAgICAgTkNVUlNFUy1IT1dUTy9OQ1VSU0VTLVByb2dyYW1taW5nLUhPV1RPLnNnbWwKKyAgICAgICAgaHR0cDovL2N2c3ZpZXcudGxkcC5vcmcvaW5kZXguY2dpL0xEUC9ob3d0by9kb2Nib29rLworICAgICAgICBOQ1VSU0VTLUhPV1RPL25jdXJzZXNfcHJvZ3JhbXMudGFyLmd6CisKKyAgICBVbnppcCBuY3Vyc2VzX3Byb2dyYW1zLnRhci5neiB3aXRoCisgICAgdGFyIHp4dmYgbmN1cnNlc19wcm9ncmFtcy50YXIuZ3oKKworICAgIFVzZSBqYWRlIHRvIGNyZWF0ZSB2YXJpb3VzIGZvcm1hdHMuIEZvciBleGFtcGxlIGlmIHlvdSBqdXN0IHdhbnQgdG8gY3JlYXRlCisgICAgdGhlIG11bHRpcGxlIGh0bWwgZmlsZXMsIHlvdSB3b3VsZCB1c2UKKyAgICAgICAgamFkZSAtdCBzZ21sIC1pIGh0bWwgLWQgJmx0O3BhdGggdG8gZG9jYm9vayBodG1sIHN0eWxlc2hlZXQmZ3Q7CisgICAgICAgIE5DVVJTRVMtUHJvZ3JhbW1pbmctSE9XVE8uc2dtbAorICAgIHRvIGdldCBwZGYsIGZpcnN0IGNyZWF0ZSBhIHNpbmdsZSBodG1sIGZpbGUgb2YgdGhlIEhPV1RPIHdpdGggCisgICAgICAgIGphZGUgLXQgc2dtbCAtaSBodG1sIC1kICZsdDtwYXRoIHRvIGRvY2Jvb2sgaHRtbCBzdHlsZXNoZWV0Jmd0OyAtViBub2NodW5rcworICAgICAgICBOQ1VSU0VTLVByb2dyYW1taW5nLUhPV1RPLnNnbWwgJmd0OyBOQ1VSU0VTLU9ORS1CSUctRklMRS5odG1sCisgICAgdGhlbiB1c2UgaHRtbGRvYyB0byBnZXQgcGRmIGZpbGUgd2l0aAorICAgICAgICBodG1sZG9jIC0tc2l6ZSB1bml2ZXJzYWwgLXQgcGRmIC0tZmlyc3RwYWdlIHAxIC1mICZsdDtvdXRwdXQgZmlsZSBuYW1lLnBkZiZndDsKKyAgICAgICAgTkNVUlNFUy1PTkUtQklHLUZJTEUuaHRtbAorICAgIGZvciBwcywgeW91IHdvdWxkIHVzZQorICAgICAgICBodG1sZG9jIC0tc2l6ZSB1bml2ZXJzYWwgLXQgcHMgLS1maXJzdHBhZ2UgcDEgLWYgJmx0O291dHB1dCBmaWxlIG5hbWUucHMmZ3Q7CisgICAgICAgIE5DVVJTRVMtT05FLUJJRy1GSUxFLmh0bWw8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5TZWUgPGEgaHJlZj0iaHR0cDovL3d3dy50bGRwLm9yZy9MRFAvTERQLUF1dGhvci1HdWlkZS8iIHRhcmdldD0KKyJfdG9wIj5MRFAgQXV0aG9yIGd1aWRlPC9hPiBmb3IgbW9yZSBkZXRhaWxzLiBJZiBhbGwgZWxzZSBmYWlsZXMsCittYWlsIG1lIGF0IDxhIGhyZWY9InBwYWRhbGFAZ21haWwuY29tIiB0YXJnZXQ9CisiX3RvcCI+cHBhZGFsYUBnbWFpbC5jb208L2E+PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNSRURJVFMiIGlkPSJDUkVESVRTIj4xLjcuCitDcmVkaXRzPC9hPjwvaDM+Cis8cD5JIHRoYW5rIDxhIGhyZWY9Im1haWx0bzpzaGFyYXRoXzFAdXNhLm5ldCIgdGFyZ2V0PQorIl90b3AiPlNoYXJhdGg8L2E+IGFuZCBFbXJlIEFrYmFzIGZvciBoZWxwaW5nIG1lIHdpdGggZmV3IHNlY3Rpb25zLgorVGhlIGludHJvZHVjdGlvbiB3YXMgaW5pdGlhbGx5IHdyaXR0ZW4gYnkgc2hhcmF0aC4gSSByZXdyb3RlIGl0Cit3aXRoIGZldyBleGNlcnB0cyB0YWtlbiBmcm9tIGhpcyBpbml0aWFsIHdvcmsuIEVtcmUgaGVscGVkIGluCit3cml0aW5nIHByaW50dyBhbmQgc2Nhbncgc2VjdGlvbnMuPC9wPgorPHA+UGVybCBlcXVpdmFsZW50cyBvZiB0aGUgZXhhbXBsZSBwcm9ncmFtcyBhcmUgY29udHJpYnV0ZWQgYnkKKzxhIGhyZWY9Im1haWx0bzpBcmF0bmF3ZWVyYUB2aXJ0dXNhLmNvbSIgdGFyZ2V0PSJfdG9wIj5BbnVyYWRoYQorUmF0bmF3ZWVyYTwvYT4uPC9wPgorPHA+VGhlbiBjb21lcyA8YSBocmVmPSJtYWlsdG86cGFyaW1pQGVjZS5hcml6b25hLmVkdSIgdGFyZ2V0PQorIl90b3AiPlJhdmkgUGFyaW1pPC9hPiwgbXkgZGVhcmVzdCBmcmllbmQsIHdobyBoYXMgYmVlbiBvbiB0aGlzCitwcm9qZWN0IGJlZm9yZSBldmVuIG9uZSBsaW5lIHdhcyB3cml0dGVuLiBIZSBjb25zdGFudGx5IGJvbWJhcmRlZAorbWUgd2l0aCBzdWdnZXN0aW9ucyBhbmQgcGF0aWVudGx5IHJldmlld2VkIHRoZSB3aG9sZSB0ZXh0LiBIZSBhbHNvCitjaGVja2VkIGVhY2ggcHJvZ3JhbSBvbiBMaW51eCBhbmQgU29sYXJpcy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IldJU0hMSVNUIiBpZD0iV0lTSExJU1QiPjEuOC4gV2lzaAorTGlzdDwvYT48L2gzPgorPHA+VGhpcyBpcyB0aGUgd2lzaCBsaXN0LCBpbiB0aGUgb3JkZXIgb2YgcHJpb3JpdHkuIElmIHlvdSBoYXZlIGEKK3dpc2ggb3IgeW91IHdhbnQgdG8gd29yayBvbiBjb21wbGV0aW5nIHRoZSB3aXNoLCBtYWlsIDxhIGhyZWY9CisibWFpbHRvOnBwYWRhbGFAZ21haWwuY29tIiB0YXJnZXQ9Il90b3AiPm1lPC9hPi48L3A+Cis8dWw+Cis8bGk+Cis8cD5BZGQgZXhhbXBsZXMgdG8gbGFzdCBwYXJ0cyBvZiBmb3JtcyBzZWN0aW9uLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5QcmVwYXJlIGEgRGVtbyBzaG93aW5nIGFsbCB0aGUgcHJvZ3JhbXMgYW5kIGFsbG93IHRoZSB1c2VyIHRvCiticm93c2UgdGhyb3VnaCBkZXNjcmlwdGlvbiBvZiBlYWNoIHByb2dyYW0uIExldCB0aGUgdXNlciBjb21waWxlCithbmQgc2VlIHRoZSBwcm9ncmFtIGluIGFjdGlvbi4gQSBkaWFsb2cgYmFzZWQgaW50ZXJmYWNlIGlzCitwcmVmZXJyZWQuPC9wPgorPC9saT4KKzxsaT4KKzxwPkFkZCBkZWJ1ZyBpbmZvLiBfdHJhY2VmLCBfdHJhY2Vtb3VzZSBzdHVmZi48L3A+Cis8L2xpPgorPGxpPgorPHA+QWNjZXNzaW5nIHRlcm1jYXAsIHRlcm1pbmZvIHVzaW5nIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBuY3Vyc2VzCitwYWNrYWdlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5Xb3JraW5nIG9uIHR3byB0ZXJtaW5hbHMgc2ltdWx0YW5lb3VzbHkuPC9wPgorPC9saT4KKzxsaT4KKzxwPkFkZCBtb3JlIHN0dWZmIHRvIG1pc2NlbGxhbmVvdXMgc2VjdGlvbi48L3A+Cis8L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQ09QWVJJR0hUIiBpZD0iQ09QWVJJR0hUIj4xLjkuCitDb3B5cmlnaHQ8L2E+PC9oMz4KKzxwPkNvcHlyaWdodCAmY29weTsgMjAwMSBieSBQcmFkZWVwIFBhZGFsYS48L3A+Cis8cD5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KK2ZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAorbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsCitzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0CitwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUKK2ZvbGxvd2luZyBjb25kaXRpb25zOjwvcD4KKzxwPlRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS48L3A+Cis8cD5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCitDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCitTT0ZUV0FSRS48L3A+Cis8cD5FeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUKK2NvcHlyaWdodCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0bworcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dAorcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJIRUxMT1dPUkxEIiBpZD0iSEVMTE9XT1JMRCI+Mi4gSGVsbG8KK1dvcmxkICEhITwvYT48L2gyPgorPHA+V2VsY29tZSB0byB0aGUgd29ybGQgb2YgY3Vyc2VzLiBCZWZvcmUgd2UgcGx1bmdlIGludG8gdGhlCitsaWJyYXJ5IGFuZCBsb29rIGludG8gaXRzIHZhcmlvdXMgZmVhdHVyZXMsIGxldCdzIHdyaXRlIGEgc2ltcGxlCitwcm9ncmFtIGFuZCBzYXkgaGVsbG8gdG8gdGhlIHdvcmxkLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNPTVBJTEVDVVJTRVMiIGlkPSJDT01QSUxFQ1VSU0VTIj4yLjEuCitDb21waWxpbmcgV2l0aCB0aGUgTkNVUlNFUyBMaWJyYXJ5PC9hPjwvaDM+Cis8cD5UbyB1c2UgbmN1cnNlcyBsaWJyYXJ5IGZ1bmN0aW9ucywgeW91IGhhdmUgdG8gaW5jbHVkZSBuY3Vyc2VzLmgKK2luIHlvdXIgcHJvZ3JhbXMuIFRvIGxpbmsgdGhlIHByb2dyYW0gd2l0aCBuY3Vyc2VzIHRoZSBmbGFnCistbG5jdXJzZXMgc2hvdWxkIGJlIGFkZGVkLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgI2luY2x1ZGUgJmx0O25jdXJzZXMuaCZndDsKKyAgICAuCisgICAgLgorICAgIC4KKworICAgIGNvbXBpbGUgYW5kIGxpbms6IGdjYyAmbHQ7cHJvZ3JhbSBmaWxlJmd0OyAtbG5jdXJzZXM8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCSFciIGlkPSJCSFciPjwvYT4KKzxwPjxiPkV4YW1wbGUgMS4gVGhlIEhlbGxvIFdvcmxkICEhISBQcm9ncmFtPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O25jdXJzZXMuaCZndDsKKworaW50IG1haW4oKQoreyAgICAgICAKKyAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBjdXJzZXMgbW9kZSAgICAgICAgICAgICAgKi8KKyAgICAgICAgcHJpbnR3KCJIZWxsbyBXb3JsZCAhISEiKTsgICAgICAvKiBQcmludCBIZWxsbyBXb3JsZCAgICAgICAgICAgICAgKi8KKyAgICAgICAgcmVmcmVzaCgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBpdCBvbiB0byB0aGUgcmVhbCBzY3JlZW4gKi8KKyAgICAgICAgZ2V0Y2goKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGZvciB1c2VyIGlucHV0ICovCisgICAgICAgIGVuZHdpbigpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIGN1cnNlcyBtb2RlICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJESVNTRUNUSU9OIiBpZD0iRElTU0VDVElPTiI+Mi4yLgorRGlzc2VjdGlvbjwvYT48L2gzPgorPHA+VGhlIGFib3ZlIHByb2dyYW0gcHJpbnRzICJIZWxsbyBXb3JsZCAhISEiIHRvIHRoZSBzY3JlZW4gYW5kCitleGl0cy4gVGhpcyBwcm9ncmFtIHNob3dzIGhvdyB0byBpbml0aWFsaXplIGN1cnNlcyBhbmQgZG8gc2NyZWVuCittYW5pcHVsYXRpb24gYW5kIGVuZCBjdXJzZXMgbW9kZS4gTGV0J3MgZGlzc2VjdCBpdCBsaW5lIGJ5CitsaW5lLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkFCT1VULUlOSVRTQ1IiIGlkPSJBQk9VVC1JTklUU0NSIj4yLjIuMS4KK0Fib3V0IGluaXRzY3IoKTwvYT48L2g0PgorPHA+VGhlIGZ1bmN0aW9uIGluaXRzY3IoKSBpbml0aWFsaXplcyB0aGUgdGVybWluYWwgaW4gY3Vyc2VzIG1vZGUuCitJbiBzb21lIGltcGxlbWVudGF0aW9ucywgaXQgY2xlYXJzIHRoZSBzY3JlZW4gYW5kIHByZXNlbnRzIGEgYmxhbmsKK3NjcmVlbi4gVG8gZG8gYW55IHNjcmVlbiBtYW5pcHVsYXRpb24gdXNpbmcgY3Vyc2VzIHBhY2thZ2UgdGhpcyBoYXMKK3RvIGJlIGNhbGxlZCBmaXJzdC4gVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY3Vyc2VzIHN5c3RlbSBhbmQKK2FsbG9jYXRlcyBtZW1vcnkgZm9yIG91ciBwcmVzZW50IHdpbmRvdyAoY2FsbGVkIDx2YXIgY2xhc3M9CisiTElURVJBTCI+c3Rkc2NyPC92YXI+KSBhbmQgc29tZSBvdGhlciBkYXRhLXN0cnVjdHVyZXMuIFVuZGVyCitleHRyZW1lIGNhc2VzIHRoaXMgZnVuY3Rpb24gbWlnaHQgZmFpbCBkdWUgdG8gaW5zdWZmaWNpZW50IG1lbW9yeQordG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjdXJzZXMgbGlicmFyeSdzIGRhdGEgc3RydWN0dXJlcy48L3A+Cis8cD5BZnRlciB0aGlzIGlzIGRvbmUsIHdlIGNhbiBkbyBhIHZhcmlldHkgb2YgaW5pdGlhbGl6YXRpb25zIHRvCitjdXN0b21pemUgb3VyIGN1cnNlcyBzZXR0aW5ncy4gVGhlc2UgZGV0YWlscyB3aWxsIGJlIGV4cGxhaW5lZAorPGEgaHJlZj0iI0lOSVQiPmxhdGVyPC9hPiAuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJNWVNULVJFRlJFU0giIGlkPSJNWVNULVJFRlJFU0giPjIuMi4yLgorVGhlIG15c3RlcmlvdXMgcmVmcmVzaCgpPC9hPjwvaDQ+Cis8cD5UaGUgbmV4dCBsaW5lIHByaW50dyBwcmludHMgdGhlIHN0cmluZyAiSGVsbG8gV29ybGQgISEhIiBvbiB0bwordGhlIHNjcmVlbi4gVGhpcyBmdW5jdGlvbiBpcyBhbmFsb2dvdXMgdG8gbm9ybWFsIHByaW50ZiBpbiBhbGwKK3Jlc3BlY3RzIGV4Y2VwdCB0aGF0IGl0IHByaW50cyB0aGUgZGF0YSBvbiBhIHdpbmRvdyBjYWxsZWQgc3Rkc2NyCithdCB0aGUgY3VycmVudCAoeSx4KSBjby1vcmRpbmF0ZXMuIFNpbmNlIG91ciBwcmVzZW50IGNvLW9yZGluYXRlcworYXJlIGF0IDAsMCB0aGUgc3RyaW5nIGlzIHByaW50ZWQgYXQgdGhlIGxlZnQgaGFuZCBjb3JuZXIgb2YgdGhlCit3aW5kb3cuPC9wPgorPHA+VGhpcyBicmluZ3MgdXMgdG8gdGhhdCBteXN0ZXJpb3VzIHJlZnJlc2goKS4gV2VsbCwgd2hlbiB3ZQorY2FsbGVkIHByaW50dyB0aGUgZGF0YSBpcyBhY3R1YWxseSB3cml0dGVuIHRvIGFuIGltYWdpbmFyeSB3aW5kb3csCit3aGljaCBpcyBub3QgdXBkYXRlZCBvbiB0aGUgc2NyZWVuIHlldC4gVGhlIGpvYiBvZiBwcmludHcgaXMgdG8KK3VwZGF0ZSBhIGZldyBmbGFncyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB3cml0ZSB0aGUgZGF0YSB0byBhCitidWZmZXIgY29ycmVzcG9uZGluZyB0byBzdGRzY3IuIEluIG9yZGVyIHRvIHNob3cgaXQgb24gdGhlIHNjcmVlbiwKK3dlIG5lZWQgdG8gY2FsbCByZWZyZXNoKCkgYW5kIHRlbGwgdGhlIGN1cnNlcyBzeXN0ZW0gdG8gZHVtcCB0aGUKK2NvbnRlbnRzIG9uIHRoZSBzY3JlZW4uPC9wPgorPHA+VGhlIHBoaWxvc29waHkgYmVoaW5kIGFsbCB0aGlzIGlzIHRvIGFsbG93IHRoZSBwcm9ncmFtbWVyIHRvIGRvCittdWx0aXBsZSB1cGRhdGVzIG9uIHRoZSBpbWFnaW5hcnkgc2NyZWVuIG9yIHdpbmRvd3MgYW5kIGRvIGEKK3JlZnJlc2ggb25jZSBhbGwgaGlzIHNjcmVlbiB1cGRhdGUgaXMgZG9uZS4gcmVmcmVzaCgpIGNoZWNrcyB0aGUKK3dpbmRvdyBhbmQgdXBkYXRlcyBvbmx5IHRoZSBwb3J0aW9uIHdoaWNoIGhhcyBiZWVuIGNoYW5nZWQuIFRoaXMKK2ltcHJvdmVzIHBlcmZvcm1hbmNlIGFuZCBvZmZlcnMgZ3JlYXRlciBmbGV4aWJpbGl0eSB0b28uIEJ1dCwgaXQgaXMKK3NvbWV0aW1lcyBmcnVzdHJhdGluZyB0byBiZWdpbm5lcnMuIEEgY29tbW9uIG1pc3Rha2UgY29tbWl0dGVkIGJ5CitiZWdpbm5lcnMgaXMgdG8gZm9yZ2V0IHRvIGNhbGwgcmVmcmVzaCgpIGFmdGVyIHRoZXkgZGlkIHNvbWUgdXBkYXRlCit0aHJvdWdoIHByaW50dygpIGNsYXNzIG9mIGZ1bmN0aW9ucy4gSSBzdGlsbCBmb3JnZXQgdG8gYWRkIGl0Citzb21ldGltZXMgOi0pPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJBQk9VVC1FTkRXSU4iIGlkPSJBQk9VVC1FTkRXSU4iPjIuMi4zLgorQWJvdXQgZW5kd2luKCk8L2E+PC9oND4KKzxwPkFuZCBmaW5hbGx5IGRvbid0IGZvcmdldCB0byBlbmQgdGhlIGN1cnNlcyBtb2RlLiBPdGhlcndpc2UgeW91cgordGVybWluYWwgbWlnaHQgYmVoYXZlIHN0cmFuZ2VseSBhZnRlciB0aGUgcHJvZ3JhbSBxdWl0cy4gZW5kd2luKCkKK2ZyZWVzIHRoZSBtZW1vcnkgdGFrZW4gYnkgY3Vyc2VzIHN1Yi1zeXN0ZW0gYW5kIGl0cyBkYXRhIHN0cnVjdHVyZXMKK2FuZCBwdXRzIHRoZSB0ZXJtaW5hbCBpbiBub3JtYWwgbW9kZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorYWZ0ZXIgeW91IGFyZSBkb25lIHdpdGggdGhlIGN1cnNlcyBtb2RlLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IkdPUlkiIGlkPSJHT1JZIj4zLiBUaGUgR29yeQorRGV0YWlsczwvYT48L2gyPgorPHA+Tm93IHRoYXQgd2UgaGF2ZSBzZWVuIGhvdyB0byB3cml0ZSBhIHNpbXBsZSBjdXJzZXMgcHJvZ3JhbSBsZXQncworZ2V0IGludG8gdGhlIGRldGFpbHMuIFRoZXJlIGFyZSBtYW55IGZ1bmN0aW9ucyB0aGF0IGhlbHAgY3VzdG9taXplCit3aGF0IHlvdSBzZWUgb24gc2NyZWVuIGFuZCBtYW55IGZlYXR1cmVzIHdoaWNoIGNhbiBiZSBwdXQgdG8gZnVsbAordXNlLjwvcD4KKzxwPkhlcmUgd2UgZ28uLi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IklOSVQiIGlkPSJJTklUIj40LgorSW5pdGlhbGl6YXRpb248L2E+PC9oMj4KKzxwPldlIG5vdyBrbm93IHRoYXQgdG8gaW5pdGlhbGl6ZSBjdXJzZXMgc3lzdGVtIHRoZSBmdW5jdGlvbgoraW5pdHNjcigpIGhhcyB0byBiZSBjYWxsZWQuIFRoZXJlIGFyZSBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIGNhbGxlZAorYWZ0ZXIgdGhpcyBpbml0aWFsaXphdGlvbiB0byBjdXN0b21pemUgb3VyIGN1cnNlcyBzZXNzaW9uLiBXZSBtYXkKK2FzayB0aGUgY3Vyc2VzIHN5c3RlbSB0byBzZXQgdGhlIHRlcm1pbmFsIGluIHJhdyBtb2RlIG9yIGluaXRpYWxpemUKK2NvbG9yIG9yIGluaXRpYWxpemUgdGhlIG1vdXNlIGV0Yy4uIExldCdzIGRpc2N1c3Mgc29tZSBvZiB0aGUKK2Z1bmN0aW9ucyB0aGF0IGFyZSBub3JtYWxseSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdHNjcigpOzwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkFCT1VUSU5JVCIgaWQ9IkFCT1VUSU5JVCI+NC4xLgorSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zPC9hPjwvaDM+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlJBV0NCUkVBSyIgaWQ9IlJBV0NCUkVBSyI+NC4yLiByYXcoKSBhbmQKK2NicmVhaygpPC9hPjwvaDM+Cis8cD5Ob3JtYWxseSB0aGUgdGVybWluYWwgZHJpdmVyIGJ1ZmZlcnMgdGhlIGNoYXJhY3RlcnMgYSB1c2VyIHR5cGVzCit1bnRpbCBhIG5ldyBsaW5lIG9yIGNhcnJpYWdlIHJldHVybiBpcyBlbmNvdW50ZXJlZC4gQnV0IG1vc3QKK3Byb2dyYW1zIHJlcXVpcmUgdGhhdCB0aGUgY2hhcmFjdGVycyBiZSBhdmFpbGFibGUgYXMgc29vbiBhcyB0aGUKK3VzZXIgdHlwZXMgdGhlbS4gVGhlIGFib3ZlIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gZGlzYWJsZSBsaW5lCitidWZmZXJpbmcuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyBpbiB0aGUgd2F5Citjb250cm9sIGNoYXJhY3RlcnMgbGlrZSBzdXNwZW5kIChDVFJMLVopLCBpbnRlcnJ1cHQgYW5kIHF1aXQKKyhDVFJMLUMpIGFyZSBwYXNzZWQgdG8gdGhlIHByb2dyYW0uIEluIHRoZSByYXcoKSBtb2RlIHRoZXNlCitjaGFyYWN0ZXJzIGFyZSBkaXJlY3RseSBwYXNzZWQgdG8gdGhlIHByb2dyYW0gd2l0aG91dCBnZW5lcmF0aW5nIGEKK3NpZ25hbC4gSW4gdGhlIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmNicmVhaygpPC92YXI+IG1vZGUgdGhlc2UKK2NvbnRyb2wgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYW55IG90aGVyIGNoYXJhY3RlciBieSB0aGUKK3Rlcm1pbmFsIGRyaXZlci4gSSBwZXJzb25hbGx5IHByZWZlciB0byB1c2UgcmF3KCkgYXMgSSBjYW4gZXhlcmNpc2UKK2dyZWF0ZXIgY29udHJvbCBvdmVyIHdoYXQgdGhlIHVzZXIgZG9lcy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkVDSE9OT0VDSE8iIGlkPSJFQ0hPTk9FQ0hPIj40LjMuIGVjaG8oKQorYW5kIG5vZWNobygpPC9hPjwvaDM+Cis8cD5UaGVzZSBmdW5jdGlvbnMgY29udHJvbCB0aGUgZWNob2luZyBvZiBjaGFyYWN0ZXJzIHR5cGVkIGJ5IHRoZQordXNlciB0byB0aGUgdGVybWluYWwuIDx2YXIgY2xhc3M9IkxJVEVSQUwiPm5vZWNobygpPC92YXI+IHN3aXRjaGVzCitvZmYgZWNob2luZy4gVGhlIHJlYXNvbiB5b3UgbWlnaHQgd2FudCB0byBkbyB0aGlzIGlzIHRvIGdhaW4gbW9yZQorY29udHJvbCBvdmVyIGVjaG9pbmcgb3IgdG8gc3VwcHJlc3MgdW5uZWNlc3NhcnkgZWNob2luZyB3aGlsZQordGFraW5nIGlucHV0IGZyb20gdGhlIHVzZXIgdGhyb3VnaCB0aGUgZ2V0Y2goKSBldGMuIGZ1bmN0aW9ucy4gTW9zdAorb2YgdGhlIGludGVyYWN0aXZlIHByb2dyYW1zIGNhbGwgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5ub2VjaG8oKTwvdmFyPiBhdCBpbml0aWFsaXphdGlvbiBhbmQgZG8gdGhlIGVjaG9pbmcgb2YKK2NoYXJhY3RlcnMgaW4gYSBjb250cm9sbGVkIG1hbm5lci4gSXQgZ2l2ZXMgdGhlIHByb2dyYW1tZXIgdGhlCitmbGV4aWJpbGl0eSBvZiBlY2hvaW5nIGNoYXJhY3RlcnMgYXQgYW55IHBsYWNlIGluIHRoZSB3aW5kb3cKK3dpdGhvdXQgdXBkYXRpbmcgY3VycmVudCAoeSx4KSBjby1vcmRpbmF0ZXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJLRVlQQUQiIGlkPSJLRVlQQUQiPjQuNC4KK2tleXBhZCgpPC9hPjwvaDM+Cis8cD5UaGlzIGlzIG15IGZhdm9yaXRlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBJdCBlbmFibGVzIHRoZQorcmVhZGluZyBvZiBmdW5jdGlvbiBrZXlzIGxpa2UgRjEsIEYyLCBhcnJvdyBrZXlzIGV0Yy4gQWxtb3N0IGV2ZXJ5CitpbnRlcmFjdGl2ZSBwcm9ncmFtIGVuYWJsZXMgdGhpcywgYXMgYXJyb3cga2V5cyBhcmUgYSBtYWpvciBwYXJ0IG9mCithbnkgVXNlciBJbnRlcmZhY2UuIERvIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmtleXBhZChzdGRzY3IsCitUUlVFKTwvdmFyPiB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGZvciB0aGUgcmVndWxhciBzY3JlZW4gKHN0ZHNjcikuCitZb3Ugd2lsbCBsZWFybiBtb3JlIGFib3V0IGtleSBtYW5hZ2VtZW50IGluIGxhdGVyIHNlY3Rpb25zIG9mIHRoaXMKK2RvY3VtZW50LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iSEFMRkRFTEFZIiBpZD0iSEFMRkRFTEFZIj40LjUuCitoYWxmZGVsYXkoKTwvYT48L2gzPgorPHA+VGhpcyBmdW5jdGlvbiwgdGhvdWdoIG5vdCB1c2VkIHZlcnkgb2Z0ZW4sIGlzIGEgdXNlZnVsIG9uZSBhdAordGltZXMuIGhhbGZkZWxheSgpaXMgY2FsbGVkIHRvIGVuYWJsZSB0aGUgaGFsZi1kZWxheSBtb2RlLCB3aGljaCBpcworc2ltaWxhciB0byB0aGUgY2JyZWFrKCkgbW9kZSBpbiB0aGF0IGNoYXJhY3RlcnMgdHlwZWQgYXJlCitpbW1lZGlhdGVseSBhdmFpbGFibGUgdG8gcHJvZ3JhbS4gSG93ZXZlciwgaXQgd2FpdHMgZm9yICdYJyB0ZW50aHMKK29mIGEgc2Vjb25kIGZvciBpbnB1dCBhbmQgdGhlbiByZXR1cm5zIEVSUiwgaWYgbm8gaW5wdXQgaXMKK2F2YWlsYWJsZS4gJ1gnIGlzIHRoZSB0aW1lb3V0IHZhbHVlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KK2hhbGZkZWxheSgpLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGFzayB0aGUgdXNlcgorZm9yIGlucHV0LCBhbmQgaWYgaGUgZG9lc24ndCByZXNwb25kIHdpdGggaW4gY2VydGFpbiB0aW1lLCB3ZSBjYW4KK2RvIHNvbWUgdGhpbmcgZWxzZS4gT25lIHBvc3NpYmxlIGV4YW1wbGUgaXMgYSB0aW1lb3V0IGF0IHRoZQorcGFzc3dvcmQgcHJvbXB0LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUlTQ0lOSVQiIGlkPSJNSVNDSU5JVCI+NC42LgorTWlzY2VsbGFuZW91cyBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZXJlIGFyZSBmZXcgbW9yZSBmdW5jdGlvbnMgd2hpY2ggYXJlIGNhbGxlZCBhdCBpbml0aWFsaXphdGlvbgordG8gY3VzdG9taXplIGN1cnNlcyBiZWhhdmlvci4gVGhleSBhcmUgbm90IHVzZWQgYXMgZXh0ZW5zaXZlbHkgYXMKK3Rob3NlIG1lbnRpb25lZCBhYm92ZS4gU29tZSBvZiB0aGVtIGFyZSBleHBsYWluZWQgd2hlcmUKK2FwcHJvcHJpYXRlLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iSU5JVEVYIiBpZD0iSU5JVEVYIj40LjcuIEFuCitFeGFtcGxlPC9hPjwvaDM+Cis8cD5MZXQncyB3cml0ZSBhIHByb2dyYW0gd2hpY2ggd2lsbCBjbGFyaWZ5IHRoZSB1c2FnZSBvZiB0aGVzZQorZnVuY3Rpb25zLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJJTkZVIiBpZD0iQklORlUiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMi4gSW5pdGlhbGl6YXRpb24gRnVuY3Rpb24gVXNhZ2UgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKK2ludCBtYWluKCkKK3sgICAgICAgaW50IGNoOworCisgICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAqLworICAgICAgICByYXcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgYnVmZmVyaW5nIGRpc2FibGVkICAgICAgKi8KKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7ICAgICAgICAgICAvKiBXZSBnZXQgRjEsIEYyIGV0Yy4uICAgICAgICAgICovCisgICAgICAgIG5vZWNobygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgZWNobygpIHdoaWxlIHdlIGRvIGdldGNoICovCisKKyAgICAgICAgcHJpbnR3KCJUeXBlIGFueSBjaGFyYWN0ZXIgdG8gc2VlIGl0IGluIGJvbGRcbiIpOworICAgICAgICBjaCA9IGdldGNoKCk7ICAgICAgICAgICAgICAgICAgIC8qIElmIHJhdygpIGhhZG4ndCBiZWVuIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHdlIGhhdmUgdG8gcHJlc3MgZW50ZXIgYmVmb3JlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZ2V0cyB0byB0aGUgcHJvZ3JhbSAgICAgICAgICAqLworICAgICAgICBpZihjaCA9PSBLRVlfRigxKSkgICAgICAgICAgICAgIC8qIFdpdGhvdXQga2V5cGFkIGVuYWJsZWQgdGhpcyB3aWxsICovCisgICAgICAgICAgICAgICAgcHJpbnR3KCJGMSBLZXkgcHJlc3NlZCIpOy8qICBub3QgZ2V0IHRvIHVzIGVpdGhlciAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpdGhvdXQgbm9lY2hvKCkgc29tZSB1Z2x5IGVzY2FwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoYXJhY2h0ZXJzIG1pZ2h0IGhhdmUgYmVlbiBwcmludGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb24gc2NyZWVuICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBlbHNlCisgICAgICAgIHsgICAgICAgcHJpbnR3KCJUaGUgcHJlc3NlZCBrZXkgaXMgIik7CisgICAgICAgICAgICAgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlYyIsIGNoKTsKKyAgICAgICAgICAgICAgICBhdHRyb2ZmKEFfQk9MRCk7CisgICAgICAgIH0KKyAgICAgICAgcmVmcmVzaCgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBpdCBvbiB0byB0aGUgcmVhbCBzY3JlZW4gKi8KKyAgICAgICAgZ2V0Y2goKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGZvciB1c2VyIGlucHV0ICovCisgICAgICAgIGVuZHdpbigpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIGN1cnNlcyBtb2RlICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+VGhpcyBwcm9ncmFtIGlzIHNlbGYtZXhwbGFuYXRvcnkuIEJ1dCBJIHVzZWQgZnVuY3Rpb25zIHdoaWNoCithcmVuJ3QgZXhwbGFpbmVkIHlldC4gVGhlIGZ1bmN0aW9uIDx2YXIgY2xhc3M9CisiTElURVJBTCI+Z2V0Y2goKTwvdmFyPiBpcyB1c2VkIHRvIGdldCBhIGNoYXJhY3RlciBmcm9tIHVzZXIuIEl0IGlzCitlcXVpdmFsZW50IHRvIG5vcm1hbCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5nZXRjaGFyKCk8L3Zhcj4gZXhjZXB0Cit0aGF0IHdlIGNhbiBkaXNhYmxlIHRoZSBsaW5lIGJ1ZmZlcmluZyB0byBhdm9pZCAmbHQ7ZW50ZXImZ3Q7IGFmdGVyCitpbnB1dC4gTG9vayBmb3IgbW9yZSBhYm91dCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5nZXRjaCgpPC92YXI+YW5kCityZWFkaW5nIGtleXMgaW4gdGhlIDxhIGhyZWY9IiNLRVlTIj5rZXkgbWFuYWdlbWVudCBzZWN0aW9uPC9hPiAuCitUaGUgZnVuY3Rpb25zIGF0dHJvbiBhbmQgYXR0cm9mZiBhcmUgdXNlZCB0byBzd2l0Y2ggc29tZSBhdHRyaWJ1dGVzCitvbiBhbmQgb2ZmIHJlc3BlY3RpdmVseS4gSW4gdGhlIGV4YW1wbGUgSSB1c2VkIHRoZW0gdG8gcHJpbnQgdGhlCitjaGFyYWN0ZXIgaW4gYm9sZC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBsYWluZWQgaW4gZGV0YWlsCitsYXRlci48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iQVdPUkRXSU5ET1dTIiBpZD0iQVdPUkRXSU5ET1dTIj41LiBBCitXb3JkIGFib3V0IFdpbmRvd3M8L2E+PC9oMj4KKzxwPkJlZm9yZSB3ZSBwbHVuZ2UgaW50byB0aGUgbXlyaWFkIG5jdXJzZXMgZnVuY3Rpb25zLCBsZXQgbWUgY2xlYXIKK2ZldyB0aGluZ3MgYWJvdXQgd2luZG93cy4gV2luZG93cyBhcmUgZXhwbGFpbmVkIGluIGRldGFpbCBpbgorZm9sbG93aW5nIDxhIGhyZWY9IiNXSU5ET1dTIj5zZWN0aW9uczwvYT48L3A+Cis8cD5BIFdpbmRvdyBpcyBhbiBpbWFnaW5hcnkgc2NyZWVuIGRlZmluZWQgYnkgY3Vyc2VzIHN5c3RlbS4gQQord2luZG93IGRvZXMgbm90IG1lYW4gYSBib3JkZXJlZCB3aW5kb3cgd2hpY2ggeW91IHVzdWFsbHkgc2VlIG9uCitXaW45WCBwbGF0Zm9ybXMuIFdoZW4gY3Vyc2VzIGlzIGluaXRpYWxpemVkLCBpdCBjcmVhdGVzIGEgZGVmYXVsdAord2luZG93IG5hbWVkIDx2YXIgY2xhc3M9IkxJVEVSQUwiPnN0ZHNjcjwvdmFyPiB3aGljaCByZXByZXNlbnRzCit5b3VyIDgweDI1IChvciB0aGUgc2l6ZSBvZiB3aW5kb3cgaW4gd2hpY2ggeW91IGFyZSBydW5uaW5nKSBzY3JlZW4uCitJZiB5b3UgYXJlIGRvaW5nIHNpbXBsZSB0YXNrcyBsaWtlIHByaW50aW5nIGZldyBzdHJpbmdzLCByZWFkaW5nCitpbnB1dCBldGMuLCB5b3UgY2FuIHNhZmVseSB1c2UgdGhpcyBzaW5nbGUgd2luZG93IGZvciBhbGwgb2YgeW91cgorcHVycG9zZXMuIFlvdSBjYW4gYWxzbyBjcmVhdGUgd2luZG93cyBhbmQgY2FsbCBmdW5jdGlvbnMgd2hpY2gKK2V4cGxpY2l0bHkgd29yayBvbiB0aGUgc3BlY2lmaWVkIHdpbmRvdy48L3A+Cis8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IGNhbGw8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIHByaW50dygiSGkgVGhlcmUgISEhIik7CisgICAgcmVmcmVzaCgpOzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPkl0IHByaW50cyB0aGUgc3RyaW5nIG9uIHN0ZHNjciBhdCB0aGUgcHJlc2VudCBjdXJzb3IgcG9zaXRpb24uCitTaW1pbGFybHkgdGhlIGNhbGwgdG8gcmVmcmVzaCgpLCB3b3JrcyBvbiBzdGRzY3Igb25seS48L3A+Cis8cD5TYXkgeW91IGhhdmUgY3JlYXRlZCA8YSBocmVmPSIjV0lORE9XUyI+d2luZG93czwvYT4gdGhlbiB5b3UKK2hhdmUgdG8gY2FsbCBhIGZ1bmN0aW9uIHdpdGggYSAndycgYWRkZWQgdG8gdGhlIHVzdWFsIGZ1bmN0aW9uLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgd3ByaW50dyh3aW4sICJIaSBUaGVyZSAhISEiKTsKKyAgICB3cmVmcmVzaCh3aW4pOzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPkFzIHlvdSB3aWxsIHNlZSBpbiB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnQsIG5hbWluZyBvZiBmdW5jdGlvbnMKK2ZvbGxvdyB0aGUgc2FtZSBjb252ZW50aW9uLiBGb3IgZWFjaCBmdW5jdGlvbiB0aGVyZSB1c3VhbGx5IGFyZQordGhyZWUgbW9yZSBmdW5jdGlvbnMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+ICAgIHByaW50dyhzdHJpbmcpOyAgICAgICAgLyogUHJpbnQgb24gc3Rkc2NyIGF0IHByZXNlbnQgY3Vyc29yIHBvc2l0aW9uICovCisgICAgbXZwcmludHcoeSwgeCwgc3RyaW5nKTsvKiBNb3ZlIHRvICh5LCB4KSB0aGVuIHByaW50IHN0cmluZyAgICAgKi8KKyAgICB3cHJpbnR3KHdpbiwgc3RyaW5nKTsgIC8qIFByaW50IG9uIHdpbmRvdyB3aW4gYXQgcHJlc2VudCBjdXJzb3IgcG9zaXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIHRoZSB3aW5kb3cgKi8KKyAgICBtdndwcmludHcod2luLCB5LCB4LCBzdHJpbmcpOyAgIC8qIE1vdmUgdG8gKHksIHgpIHJlbGF0aXZlIHRvIHdpbmRvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY28tb3JkaW5hdGVzIGFuZCB0aGVuIHByaW50ICAgICAgICAgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5Vc3VhbGx5IHRoZSB3LWxlc3MgZnVuY3Rpb25zIGFyZSBtYWNyb3Mgd2hpY2ggZXhwYW5kIHRvCitjb3JyZXNwb25kaW5nIHctZnVuY3Rpb24gd2l0aCBzdGRzY3IgYXMgdGhlIHdpbmRvdyBwYXJhbWV0ZXIuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJQUklOVFciIGlkPSJQUklOVFciPjYuIE91dHB1dAorZnVuY3Rpb25zPC9hPjwvaDI+Cis8cD5JIGd1ZXNzIHlvdSBjYW4ndCB3YWl0IGFueSBtb3JlIHRvIHNlZSBzb21lIGFjdGlvbi4gQmFjayB0byBvdXIKK29keXNzZXkgb2YgY3Vyc2VzIGZ1bmN0aW9ucy4gTm93IHRoYXQgY3Vyc2VzIGlzIGluaXRpYWxpemVkLCBsZXQncworaW50ZXJhY3Qgd2l0aCB3b3JsZC48L3A+Cis8cD5UaGVyZSBhcmUgdGhyZWUgY2xhc3NlcyBvZiBmdW5jdGlvbnMgd2hpY2ggeW91IGNhbiB1c2UgdG8gZG8KK291dHB1dCBvbiBzY3JlZW4uPC9wPgorPG9sIHR5cGU9IjEiPgorPGxpPgorPHA+YWRkY2goKSBjbGFzczogUHJpbnQgc2luZ2xlIGNoYXJhY3RlciB3aXRoIGF0dHJpYnV0ZXM8L3A+Cis8L2xpPgorPGxpPgorPHA+cHJpbnR3KCkgY2xhc3M6IFByaW50IGZvcm1hdHRlZCBvdXRwdXQgc2ltaWxhciB0byBwcmludGYoKTwvcD4KKzwvbGk+Cis8bGk+Cis8cD5hZGRzdHIoKSBjbGFzczogUHJpbnQgc3RyaW5nczwvcD4KKzwvbGk+Cis8L29sPgorPHA+VGhlc2UgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSBhbmQgaXQncyBhIG1hdHRlciBvZgorc3R5bGUgYXMgdG8gd2hpY2ggY2xhc3MgaXMgdXNlZC4gTGV0J3Mgc2VlIGVhY2ggb25lIGluIGRldGFpbC48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBRERDSENMQVNTIiBpZD0iQUREQ0hDTEFTUyI+Ni4xLiBhZGRjaCgpCitjbGFzcyBvZiBmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZXNlIGZ1bmN0aW9ucyBwdXQgYSBzaW5nbGUgY2hhcmFjdGVyIGludG8gdGhlIGN1cnJlbnQgY3Vyc29yCitsb2NhdGlvbiBhbmQgYWR2YW5jZSB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnNvci4gWW91IGNhbiBnaXZlIHRoZQorY2hhcmFjdGVyIHRvIGJlIHByaW50ZWQgYnV0IHRoZXkgdXN1YWxseSBhcmUgdXNlZCB0byBwcmludCBhCitjaGFyYWN0ZXIgd2l0aCBzb21lIGF0dHJpYnV0ZXMuIEF0dHJpYnV0ZXMgYXJlIGV4cGxhaW5lZCBpbiBkZXRhaWwKK2luIGxhdGVyIDxhIGhyZWY9IiNBVFRSSUIiPnNlY3Rpb25zPC9hPiBvZiB0aGUgZG9jdW1lbnQuIElmIGEKK2NoYXJhY3RlciBpcyBhc3NvY2lhdGVkIHdpdGggYW4gYXR0cmlidXRlKGJvbGQsIHJldmVyc2UgdmlkZW8KK2V0Yy4pLCB3aGVuIGN1cnNlcyBwcmludHMgdGhlIGNoYXJhY3RlciwgaXQgaXMgcHJpbnRlZCBpbiB0aGF0CithdHRyaWJ1dGUuPC9wPgorPHA+SW4gb3JkZXIgdG8gY29tYmluZSBhIGNoYXJhY3RlciB3aXRoIHNvbWUgYXR0cmlidXRlcywgeW91IGhhdmUKK3R3byBvcHRpb25zOjwvcD4KKzx1bD4KKzxsaT4KKzxwPkJ5IE9SJ2luZyBhIHNpbmdsZSBjaGFyYWN0ZXIgd2l0aCB0aGUgZGVzaXJlZCBhdHRyaWJ1dGUgbWFjcm9zLgorVGhlc2UgYXR0cmlidXRlIG1hY3JvcyBjb3VsZCBiZSBmb3VuZCBpbiB0aGUgaGVhZGVyIGZpbGUKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPm5jdXJzZXMuaDwvdmFyPi4gRm9yIGV4YW1wbGUsIHlvdSB3YW50IHRvCitwcmludCBhIGNoYXJhY3RlciBjaChvZiB0eXBlIGNoYXIpIGJvbGQgYW5kIHVuZGVybGluZWQsIHlvdSB3b3VsZAorY2FsbCBhZGRjaCgpIGFzIGJlbG93LjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSI5MCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBhZGRjaChjaCB8IEFfQk9MRCB8IEFfVU5ERVJMSU5FKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2xpPgorPGxpPgorPHA+QnkgdXNpbmcgZnVuY3Rpb25zIGxpa2UgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5hdHRyc2V0KCksYXR0cm9uKCksYXR0cm9mZigpPC92YXI+LiBUaGVzZSBmdW5jdGlvbnMgYXJlCitleHBsYWluZWQgaW4gdGhlIDxhIGhyZWY9IiNBVFRSSUIiPkF0dHJpYnV0ZXM8L2E+IHNlY3Rpb24uIEJyaWVmbHksCit0aGV5IG1hbmlwdWxhdGUgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gd2luZG93LiBPbmNlCitzZXQsIHRoZSBjaGFyYWN0ZXIgcHJpbnRlZCBpbiB0aGUgd2luZG93IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlCithdHRyaWJ1dGVzIHVudGlsIGl0IGlzIHR1cm5lZCBvZmYuPC9wPgorPC9saT4KKzwvdWw+Cis8cD5BZGRpdGlvbmFsbHksIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmN1cnNlczwvdmFyPiBwcm92aWRlcyBzb21lCitzcGVjaWFsIGNoYXJhY3RlcnMgZm9yIGNoYXJhY3Rlci1iYXNlZCBncmFwaGljcy4gWW91IGNhbiBkcmF3Cit0YWJsZXMsIGhvcml6b250YWwgb3IgdmVydGljYWwgbGluZXMsIGV0Yy4gWW91IGNhbiBmaW5kIGFsbAorYXZhbGlhYmxlIGNoYXJhY3RlcnMgaW4gdGhlIGhlYWRlciBmaWxlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+bmN1cnNlcy5oPC92YXI+LiBUcnkgbG9va2luZyBmb3IgbWFjcm9zIGJlZ2lubmluZyB3aXRoCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5BQ1NfPC92YXI+IGluIHRoaXMgZmlsZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkFFTjI5OCIgaWQ9IkFFTjI5OCI+Ni4yLiBtdmFkZGNoKCksCit3YWRkY2goKSBhbmQgbXZ3YWRkY2goKTwvYT48L2gzPgorPHA+PHZhciBjbGFzcz0iTElURVJBTCI+bXZhZGRjaCgpPC92YXI+IGlzIHVzZWQgdG8gbW92ZSB0aGUgY3Vyc29yCit0byBhIGdpdmVuIHBvaW50LCBhbmQgdGhlbiBwcmludC4gVGh1cywgdGhlIGNhbGxzOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPiAgICBtb3ZlKHJvdyxjb2wpOyAgICAvKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHJvdzxlbT50aDwvZW0+IHJvdyBhbmQgY29sPGVtPnRoPC9lbT4gY29sdW1uICovCisgICAgYWRkY2goY2gpOzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KK2NhbiBiZSByZXBsYWNlZCBieQorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBtdmFkZGNoKHJvdyxjb2wsY2gpOzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPjx2YXIgY2xhc3M9IkxJVEVSQUwiPndhZGRjaCgpPC92YXI+IGlzIHNpbWlsYXIgdG8gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5hZGRjaCgpPC92YXI+LCBleGNlcHQgdGhhdCBpdCBhZGRzIGEgY2hhcmFjdGVyIGludG8gdGhlCitnaXZlbiB3aW5kb3cuIChOb3RlIHRoYXQgPHZhciBjbGFzcz0iTElURVJBTCI+YWRkY2goKTwvdmFyPiBhZGRzIGEKK2NoYXJhY3RlciBpbnRvIHRoZSB3aW5kb3cgPHZhciBjbGFzcz0iTElURVJBTCI+c3Rkc2NyPC92YXI+Lik8L3A+Cis8cD5JbiBhIHNpbWlsYXIgZmFzaGlvbiA8dmFyIGNsYXNzPSJMSVRFUkFMIj5tdndhZGRjaCgpPC92YXI+CitmdW5jdGlvbiBpcyB1c2VkIHRvIGFkZCBhIGNoYXJhY3RlciBpbnRvIHRoZSBnaXZlbiB3aW5kb3cgYXQgdGhlCitnaXZlbiBjb29yZGluYXRlcy48L3A+Cis8cD5Ob3csIHdlIGFyZSBmYW1pbGlhciB3aXRoIHRoZSBiYXNpYyBvdXRwdXQgZnVuY3Rpb24gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5hZGRjaCgpPC92YXI+LiBCdXQsIGlmIHdlIHdhbnQgdG8gcHJpbnQgYSBzdHJpbmcsIGl0Cit3b3VsZCBiZSB2ZXJ5IGFubm95aW5nIHRvIHByaW50IGl0IGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuCitGb3J0dW5hdGVseSwgPHZhciBjbGFzcz0iTElURVJBTCI+bmN1cnNlczwvdmFyPiBwcm92aWRlcworPHZhciBjbGFzcz0iTElURVJBTCI+cHJpbnRmPC92YXI+PGVtPi1saWtlPC9lbT4gb3IgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5wdXRzPC92YXI+PGVtPi1saWtlPC9lbT4gZnVuY3Rpb25zLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iUFJJTlRXQ0xBU1MiIGlkPSJQUklOVFdDTEFTUyI+Ni4zLgorcHJpbnR3KCkgY2xhc3Mgb2YgZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGVzZSBmdW5jdGlvbnMgYXJlIHNpbWlsYXIgdG8gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5wcmludGYoKTwvdmFyPiB3aXRoIHRoZSBhZGRlZCBjYXBhYmlsaXR5IG9mIHByaW50aW5nIGF0CithbnkgcG9zaXRpb24gb24gdGhlIHNjcmVlbi48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJQUklOVFdNVlBSSU5UVyIgaWQ9CisiUFJJTlRXTVZQUklOVFciPjYuMy4xLiBwcmludHcoKSBhbmQgbXZwcmludHc8L2E+PC9oND4KKzxwPlRoZXNlIHR3byBmdW5jdGlvbnMgd29yayBtdWNoIGxpa2UgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5wcmludGYoKTwvdmFyPi4gPHZhciBjbGFzcz0iTElURVJBTCI+bXZwcmludHcoKTwvdmFyPiBjYW4KK2JlIHVzZWQgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGEgcG9zaXRpb24gYW5kIHRoZW4gcHJpbnQuIElmIHlvdQord2FudCB0byBtb3ZlIHRoZSBjdXJzb3IgZmlyc3QgYW5kIHRoZW4gcHJpbnQgdXNpbmcgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5wcmludHcoKTwvdmFyPiBmdW5jdGlvbiwgdXNlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+bW92ZSgpPC92YXI+IGZpcnN0IGFuZCB0aGVuIHVzZSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnByaW50dygpPC92YXI+IHRob3VnaCBJIHNlZSBubyBwb2ludCB3aHkgb25lIHNob3VsZCBhdm9pZAordXNpbmcgPHZhciBjbGFzcz0iTElURVJBTCI+bXZwcmludHcoKTwvdmFyPiwgeW91IGhhdmUgdGhlCitmbGV4aWJpbGl0eSB0byBtYW5pcHVsYXRlLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iV1BSSU5UV01WV1BSSU5UVyIgaWQ9CisiV1BSSU5UV01WV1BSSU5UVyI+Ni4zLjIuIHdwcmludHcoKSBhbmQgbXZ3cHJpbnR3PC9hPjwvaDQ+Cis8cD5UaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBzaW1pbGFyIHRvIGFib3ZlIHR3byBleGNlcHQgdGhhdCB0aGV5CitwcmludCBpbiB0aGUgY29ycmVzcG9uZGluZyB3aW5kb3cgZ2l2ZW4gYXMgYXJndW1lbnQuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJWV1BSSU5UVyIgaWQ9IlZXUFJJTlRXIj42LjMuMy4KK3Z3cHJpbnR3KCk8L2E+PC9oND4KKzxwPlRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnZwcmludGYoKTwvdmFyPi4gVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHZhcmlhYmxlIG51bWJlciBvZgorYXJndW1lbnRzIGFyZSB0byBiZSBwcmludGVkLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iU0lNUExFUFJJTlRXRVgiIGlkPQorIlNJTVBMRVBSSU5UV0VYIj42LjMuNC4gQSBTaW1wbGUgcHJpbnR3IGV4YW1wbGU8L2E+PC9oND4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJQUkVYIiBpZD0iQlBSRVgiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMy4gQSBTaW1wbGUgcHJpbnR3IGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bmN1cnNlcy5oJmd0OyAgICAgICAgICAgICAgICAgICAvKiBuY3Vyc2VzLmggaW5jbHVkZXMgc3RkaW8uaCAqLyAgCisjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7IAorIAoraW50IG1haW4oKQoreworIGNoYXIgbWVzZ1tdPSJKdXN0IGEgc3RyaW5nIjsgICAgICAgICAgIC8qIG1lc3NhZ2UgdG8gYmUgYXBwZWFyZWQgb24gdGhlIHNjcmVlbiAqLworIGludCByb3csY29sOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygcm93cyBhbmQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBudW1iZXIgb2YgY29sdW1zIG9mIHRoZSBzY3JlZW4gKi8KKyBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCB0aGUgY3Vyc2VzIG1vZGUgKi8KKyBnZXRtYXh5eChzdGRzY3Iscm93LGNvbCk7ICAgICAgICAgICAgICAvKiBnZXQgdGhlIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zICovCisgbXZwcmludHcocm93LzIsKGNvbC1zdHJsZW4obWVzZykpLzIsIiVzIixtZXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmludCB0aGUgbWVzc2FnZSBhdCB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4gKi8KKyBtdnByaW50dyhyb3ctMiwwLCJUaGlzIHNjcmVlbiBoYXMgJWQgcm93cyBhbmQgJWQgY29sdW1uc1xuIixyb3csY29sKTsKKyBwcmludHcoIlRyeSByZXNpemluZyB5b3VyIHdpbmRvdyhpZiBwb3NzaWJsZSkgYW5kIHRoZW4gcnVuIHRoaXMgcHJvZ3JhbSBhZ2FpbiIpOworIHJlZnJlc2goKTsKKyBnZXRjaCgpOworIGVuZHdpbigpOworCisgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+QWJvdmUgcHJvZ3JhbSBkZW1vbnN0cmF0ZXMgaG93IGVhc3kgaXQgaXMgdG8gdXNlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cHJpbnR3PC92YXI+LiBZb3UganVzdCBmZWVkIHRoZSBjb29yZGluYXRlcyBhbmQgdGhlCittZXNzYWdlIHRvIGJlIGFwcGVhcmVkIG9uIHRoZSBzY3JlZW4sIHRoZW4gaXQgZG9lcyB3aGF0IHlvdQord2FudC48L3A+Cis8cD5UaGUgYWJvdmUgcHJvZ3JhbSBpbnRyb2R1Y2VzIHVzIHRvIGEgbmV3IGZ1bmN0aW9uIDx2YXIgY2xhc3M9CisiTElURVJBTCI+Z2V0bWF4eXgoKTwvdmFyPiwgYSBtYWNybyBkZWZpbmVkIGluIDx2YXIgY2xhc3M9CisiTElURVJBTCI+bmN1cnNlcy5oPC92YXI+LiBJdCBnaXZlcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIHRoZQorbnVtYmVyIG9mIHJvd3MgaW4gYSBnaXZlbiB3aW5kb3cuIDx2YXIgY2xhc3M9CisiTElURVJBTCI+Z2V0bWF4eXgoKTwvdmFyPiBkb2VzIHRoaXMgYnkgdXBkYXRpbmcgdGhlIHZhcmlhYmxlcworZ2l2ZW4gdG8gaXQuIFNpbmNlIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmdldG1heHl4KCk8L3Zhcj4gaXMgbm90IGEKK2Z1bmN0aW9uIHdlIGRvbid0IHBhc3MgcG9pbnRlcnMgdG8gaXQsIHdlIGp1c3QgZ2l2ZSB0d28gaW50ZWdlcgordmFyaWFibGVzLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBRERTVFJDTEFTUyIgaWQ9IkFERFNUUkNMQVNTIj42LjQuCithZGRzdHIoKSBjbGFzcyBvZiBmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPjx2YXIgY2xhc3M9IkxJVEVSQUwiPmFkZHN0cigpPC92YXI+IGlzIHVzZWQgdG8gcHV0IGEgY2hhcmFjdGVyCitzdHJpbmcgaW50byBhIGdpdmVuIHdpbmRvdy4gVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGNhbGxpbmcKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPmFkZGNoKCk8L3Zhcj4gb25jZSBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gYQorZ2l2ZW4gc3RyaW5nLiBUaGlzIGlzIHRydWUgZm9yIGFsbCBvdXRwdXQgZnVuY3Rpb25zLiBUaGVyZSBhcmUKK290aGVyIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmFtaWx5IHN1Y2ggYXMgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5tdmFkZHN0cigpLG12d2FkZHN0cigpPC92YXI+IGFuZCA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPndhZGRzdHIoKTwvdmFyPiwgd2hpY2ggb2JleSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gb2YKK2N1cnNlcy4oZS5nLiBtdmFkZHN0cigpIGlzIHNpbWlsYXIgdG8gdGhlIHJlc3BlY3RpdmUgY2FsbHMgbW92ZSgpCithbmQgdGhlbiBhZGRzdHIoKS4pIEFub3RoZXIgZnVuY3Rpb24gb2YgdGhpcyBmYW1pbHkgaXMgYWRkbnN0cigpLAord2hpY2ggdGFrZXMgYW4gaW50ZWdlciBwYXJhbWV0ZXIoc2F5IG4pIGFkZGl0aW9uYWxseS4gVGhpcyBmdW5jdGlvbgorcHV0cyBhdCBtb3N0IG4gY2hhcmFjdGVycyBpbnRvIHRoZSBzY3JlZW4uIElmIG4gaXMgbmVnYXRpdmUsIHRoZW4KK3RoZSBlbnRpcmUgc3RyaW5nIHdpbGwgYmUgYWRkZWQuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBQ0FVVElPTiIgaWQ9IkFDQVVUSU9OIj42LjUuIEEgd29yZCBvZgorY2F1dGlvbjwvYT48L2gzPgorPHA+QWxsIHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHkgY28tb3JkaW5hdGUgZmlyc3QgYW5kIHRoZW4geCBpbiB0aGVpcgorYXJndW1lbnRzLiBBIGNvbW1vbiBtaXN0YWtlIGJ5IGJlZ2lubmVycyBpcyB0byBwYXNzIHgseSBpbiB0aGF0CitvcmRlci4gSWYgeW91IGFyZSBkb2luZyB0b28gbWFueSBtYW5pcHVsYXRpb25zIG9mICh5LHgpCitjby1vcmRpbmF0ZXMsIHRoaW5rIG9mIGRpdmlkaW5nIHRoZSBzY3JlZW4gaW50byB3aW5kb3dzIGFuZAorbWFuaXB1bGF0ZSBlYWNoIG9uZSBzZXBhcmF0ZWx5LiBXaW5kb3dzIGFyZSBleHBsYWluZWQgaW4gdGhlCis8YSBocmVmPSIjV0lORE9XUyI+d2luZG93czwvYT4gc2VjdGlvbi48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iU0NBTlciIGlkPSJTQ0FOVyI+Ny4gSW5wdXQKK2Z1bmN0aW9uczwvYT48L2gyPgorPHA+V2VsbCwgcHJpbnRpbmcgd2l0aG91dCB0YWtpbmcgaW5wdXQsIGlzIGJvcmluZy4gTGV0J3Mgc2VlCitmdW5jdGlvbnMgd2hpY2ggYWxsb3cgdXMgdG8gZ2V0IGlucHV0IGZyb20gdXNlci4gVGhlc2UgZnVuY3Rpb25zCithbHNvIGNhbiBiZSBkaXZpZGVkIGludG8gdGhyZWUgY2F0ZWdvcmllcy48L3A+Cis8b2wgdHlwZT0iMSI+Cis8bGk+Cis8cD5nZXRjaCgpIGNsYXNzOiBHZXQgYSBjaGFyYWN0ZXI8L3A+Cis8L2xpPgorPGxpPgorPHA+c2NhbncoKSBjbGFzczogR2V0IGZvcm1hdHRlZCBpbnB1dDwvcD4KKzwvbGk+Cis8bGk+Cis8cD5nZXRzdHIoKSBjbGFzczogR2V0IHN0cmluZ3M8L3A+Cis8L2xpPgorPC9vbD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkdFVENIQ0xBU1MiIGlkPSJHRVRDSENMQVNTIj43LjEuIGdldGNoKCkKK2NsYXNzIG9mIGZ1bmN0aW9uczwvYT48L2gzPgorPHA+VGhlc2UgZnVuY3Rpb25zIHJlYWQgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gdGhlIHRlcm1pbmFsLiBCdXQKK3RoZXJlIGFyZSBzZXZlcmFsIHN1YnRsZSBmYWN0cyB0byBjb25zaWRlci4gRm9yIGV4YW1wbGUgaWYgeW91Citkb24ndCB1c2UgdGhlIGZ1bmN0aW9uIGNicmVhaygpLCBjdXJzZXMgd2lsbCBub3QgcmVhZCB5b3VyIGlucHV0CitjaGFyYWN0ZXJzIGNvbnRpZ3VvdXNseSBidXQgd2lsbCBiZWdpbiByZWFkIHRoZW0gb25seSBhZnRlciBhIG5ldworbGluZSBvciBhbiBFT0YgaXMgZW5jb3VudGVyZWQuIEluIG9yZGVyIHRvIGF2b2lkIHRoaXMsIHRoZSBjYnJlYWsoKQorZnVuY3Rpb24gbXVzdCB1c2VkIHNvIHRoYXQgY2hhcmFjdGVycyBhcmUgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHRvCit5b3VyIHByb2dyYW0uIEFub3RoZXIgd2lkZWx5IHVzZWQgZnVuY3Rpb24gaXMgbm9lY2hvKCkuIEFzIHRoZSBuYW1lCitzdWdnZXN0cywgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHNldCAodXNlZCksIHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlCitrZXllZCBpbiBieSB0aGUgdXNlciB3aWxsIG5vdCBzaG93IHVwIG9uIHRoZSBzY3JlZW4uIFRoZSB0d28KK2Z1bmN0aW9ucyBjYnJlYWsoKSBhbmQgbm9lY2hvKCkgYXJlIHR5cGljYWwgZXhhbXBsZXMgb2Yga2V5CittYW5hZ2VtZW50LiBGdW5jdGlvbnMgb2YgdGhpcyBnZW5yZSBhcmUgZXhwbGFpbmVkIGluIHRoZSA8YSBocmVmPQorIiNLRVlTIj5rZXkgbWFuYWdlbWVudCBzZWN0aW9uPC9hPiAuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJTQ0FOV0NMQVNTIiBpZD0iU0NBTldDTEFTUyI+Ny4yLiBzY2FudygpCitjbGFzcyBvZiBmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZXNlIGZ1bmN0aW9ucyBhcmUgc2ltaWxhciB0byA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPnNjYW5mKCk8L3Zhcj4gd2l0aCB0aGUgYWRkZWQgY2FwYWJpbGl0eSBvZiBnZXR0aW5nIHRoZQoraW5wdXQgZnJvbSBhbnkgbG9jYXRpb24gb24gdGhlIHNjcmVlbi48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJTQ0FOV01WU0NBTlciIGlkPSJTQ0FOV01WU0NBTlciPjcuMi4xLgorc2NhbncoKSBhbmQgbXZzY2FudzwvYT48L2g0PgorPHA+VGhlIHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBzaW1pbGFyIHRvIHRoYXQgb2YgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5zc2NhbmYoKTwvdmFyPiwgd2hlcmUgdGhlIGxpbmUgdG8gYmUgc2Nhbm5lZCBpcyBwcm92aWRlZAorYnkgPHZhciBjbGFzcz0iTElURVJBTCI+d2dldHN0cigpPC92YXI+IGZ1bmN0aW9uLiBUaGF0IGlzLCB0aGVzZQorZnVuY3Rpb25zIGNhbGwgdG8gPHZhciBjbGFzcz0iTElURVJBTCI+d2dldHN0cigpPC92YXI+CitmdW5jdGlvbihleHBsYWluZWQgYmVsb3cpIGFuZCB1c2VzIHRoZSByZXN1bHRpbmcgbGluZSBmb3IgYQorc2Nhbi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IldTQ0FOV01WV1NDQU5XIiBpZD0KKyJXU0NBTldNVldTQ0FOVyI+Ny4yLjIuIHdzY2FudygpIGFuZCBtdndzY2FudygpPC9hPjwvaDQ+Cis8cD5UaGVzZSBhcmUgc2ltaWxhciB0byBhYm92ZSB0d28gZnVuY3Rpb25zIGV4Y2VwdCB0aGF0IHRoZXkgcmVhZAorZnJvbSBhIHdpbmRvdywgd2hpY2ggaXMgc3VwcGxpZWQgYXMgb25lIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlc2UKK2Z1bmN0aW9ucy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IlZXU0NBTlciIGlkPSJWV1NDQU5XIj43LjIuMy4KK3Z3c2NhbncoKTwvYT48L2g0PgorPHA+VGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIDx2YXIgY2xhc3M9IkxJVEVSQUwiPnZzY2FuZigpPC92YXI+LgorVGhpcyBjYW4gYmUgdXNlZCB3aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgdG8gYmUKK3NjYW5uZWQuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkdFVFNUUkNMQVNTIiBpZD0iR0VUU1RSQ0xBU1MiPjcuMy4KK2dldHN0cigpIGNsYXNzIG9mIGZ1bmN0aW9uczwvYT48L2gzPgorPHA+VGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdldCBzdHJpbmdzIGZyb20gdGhlIHRlcm1pbmFsLiBJbgorZXNzZW5jZSwgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgc2FtZSB0YXNrIGFzIHdvdWxkIGJlIGFjaGlldmVkCitieSBhIHNlcmllcyBvZiBjYWxscyB0byA8dmFyIGNsYXNzPSJMSVRFUkFMIj5nZXRjaCgpPC92YXI+IHVudGlsIGEKK25ld2xpbmUsIGNhcnJpYWdlIHJldHVybiwgb3IgZW5kLW9mLWZpbGUgaXMgcmVjZWl2ZWQuIFRoZSByZXN1bHRpbmcKK3N0cmluZyBvZiBjaGFyYWN0ZXJzIGFyZSBwb2ludGVkIHRvIGJ5IDx2YXIgY2xhc3M9CisiTElURVJBTCI+c3RyPC92YXI+LCB3aGljaCBpcyBhIGNoYXJhY3RlciBwb2ludGVyIHByb3ZpZGVkIGJ5IHRoZQordXNlci48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkdFVFNUUkVYIiBpZD0iR0VUU1RSRVgiPjcuNC4gU29tZQorZXhhbXBsZXM8L2E+PC9oMz4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJTQ0VYIiBpZD0iQlNDRVgiPjwvYT4KKzxwPjxiPkV4YW1wbGUgNC4gQSBTaW1wbGUgc2NhbncgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7ICAgICAgICAgICAgICAgICAgIC8qIG5jdXJzZXMuaCBpbmNsdWRlcyBzdGRpby5oICovICAKKyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsgCisgCitpbnQgbWFpbigpCit7CisgY2hhciBtZXNnW109IkVudGVyIGEgc3RyaW5nOiAiOyAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIHRvIGJlIGFwcGVhcmVkIG9uIHRoZSBzY3JlZW4gKi8KKyBjaGFyIHN0cls4MF07CisgaW50IHJvdyxjb2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gc3RvcmUgdGhlIG51bWJlciBvZiByb3dzIGFuZCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIG51bWJlciBvZiBjb2x1bXMgb2YgdGhlIHNjcmVlbiAqLworIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHRoZSBjdXJzZXMgbW9kZSAqLworIGdldG1heHl4KHN0ZHNjcixyb3csY29sKTsgICAgICAgICAgICAgIC8qIGdldCB0aGUgbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgKi8KKyBtdnByaW50dyhyb3cvMiwoY29sLXN0cmxlbihtZXNnKSkvMiwiJXMiLG1lc2cpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmludCB0aGUgbWVzc2FnZSBhdCB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4gKi8KKyBnZXRzdHIoc3RyKTsKKyBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJZb3UgRW50ZXJlZDogJXMiLCBzdHIpOworIGdldGNoKCk7CisgZW5kd2luKCk7CisKKyByZXR1cm4gMDsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iQVRUUklCIiBpZD0iQVRUUklCIj44LgorQXR0cmlidXRlczwvYT48L2gyPgorPHA+V2UgaGF2ZSBzZWVuIGFuIGV4YW1wbGUgb2YgaG93IGF0dHJpYnV0ZXMgY2FuIGJlIHVzZWQgdG8gcHJpbnQKK2NoYXJhY3RlcnMgd2l0aCBzb21lIHNwZWNpYWwgZWZmZWN0cy4gQXR0cmlidXRlcywgd2hlbiBzZXQKK3BydWRlbnRseSwgY2FuIHByZXNlbnQgaW5mb3JtYXRpb24gaW4gYW4gZWFzeSwgdW5kZXJzdGFuZGFibGUKK21hbm5lci4gVGhlIGZvbGxvd2luZyBwcm9ncmFtIHRha2VzIGEgQyBmaWxlIGFzIGlucHV0IGFuZCBwcmludHMKK3RoZSBmaWxlIHdpdGggY29tbWVudHMgaW4gYm9sZC4gU2NhbiB0aHJvdWdoIHRoZSBjb2RlLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJTSUFUIiBpZD0iQlNJQVQiPjwvYT4KKzxwPjxiPkV4YW1wbGUgNS4gQSBTaW1wbGUgQXR0cmlidXRlcyBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+LyogcGFnZXIgZnVuY3Rpb25hbGl0eSBieSBKb3NlcGggU3BhaW5ob3VyIiAmbHQ7c3BhaW5ob3VAYmVsbHNvdXRoLm5ldCZndDsgKi8KKyNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7IAorICBpbnQgY2gsIHByZXYsIHJvdywgY29sOworICBwcmV2ID0gRU9GOworICBGSUxFICpmcDsKKyAgaW50IHksIHg7CisKKyAgaWYoYXJnYyAhPSAyKQorICB7CisgICAgcHJpbnRmKCJVc2FnZTogJXMgJmx0O2EgYyBmaWxlIG5hbWUmZ3Q7XG4iLCBhcmd2WzBdKTsKKyAgICBleGl0KDEpOworICB9CisgIGZwID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKyAgaWYoZnAgPT0gTlVMTCkKKyAgeworICAgIHBlcnJvcigiQ2Fubm90IG9wZW4gaW5wdXQgZmlsZSIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBjdXJzZXMgbW9kZSAqLworICBnZXRtYXh5eChzdGRzY3IsIHJvdywgY29sKTsgICAgICAgICAgIC8qIGZpbmQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHNjcmVlZW4gKi8KKyAgd2hpbGUoKGNoID0gZmdldGMoZnApKSAhPSBFT0YpICAgICAgICAvKiByZWFkIHRoZSBmaWxlIHRpbGwgd2UgcmVhY2ggdGhlIGVuZCAqLworICB7CisgICAgZ2V0eXgoc3Rkc2NyLCB5LCB4KTsgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGN1cnNlciBwb3NpdGlvbiAqLworICAgIGlmKHkgPT0gKHJvdyAtIDEpKSAgICAgICAgICAgICAgICAgIC8qIGFyZSB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc2NyZWVuICovCisgICAgeworICAgICAgcHJpbnR3KCImbHQ7LVByZXNzIEFueSBLZXktJmd0OyIpOyAgICAgIC8qIHRlbGwgdGhlIHVzZXIgdG8gcHJlc3MgYSBrZXkgKi8KKyAgICAgIGdldGNoKCk7CisgICAgICBjbGVhcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2xlYXIgdGhlIHNjcmVlbiAqLworICAgICAgbW92ZSgwLCAwKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjcmVlbiAqLworICAgIH0KKyAgICBpZihwcmV2ID09ICcvJyAmYW1wOyZhbXA7IGNoID09ICcqJykgICAgICAgIC8qIElmIGl0IGlzIC8gYW5kICogdGhlbiBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3dpdGNoIGJvbGQgb24gKi8gICAgCisgICAgeworICAgICAgYXR0cm9uKEFfQk9MRCk7ICAgICAgICAgICAgICAgICAgIC8qIGN1dCBib2xkIG9uICovCisgICAgICBnZXR5eChzdGRzY3IsIHksIHgpOyAgICAgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGN1cnNlciBwb3NpdGlvbiAqLworICAgICAgbW92ZSh5LCB4IC0gMSk7ICAgICAgICAgICAgICAgICAgIC8qIGJhY2sgdXAgb25lIHNwYWNlICovCisgICAgICBwcmludHcoIiVjJWMiLCAnLycsIGNoKTsgICAgICAgICAgLyogVGhlIGFjdHVhbCBwcmludGluZyBpcyBkb25lIGhlcmUgKi8KKyAgICB9CisgICAgZWxzZQorICAgICAgcHJpbnR3KCIlYyIsIGNoKTsKKyAgICByZWZyZXNoKCk7CisgICAgaWYocHJldiA9PSAnKicgJmFtcDsmYW1wOyBjaCA9PSAnLycpCisgICAgICBhdHRyb2ZmKEFfQk9MRCk7ICAgICAgICAgICAgICAgICAgLyogU3dpdGNoIGl0IG9mZiBvbmNlIHdlIGdvdCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYW5kIHRoZW4gLyAqLworICAgIHByZXYgPSBjaDsKKyAgfQorICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJzZXMgbW9kZSAqLworICBmY2xvc2UoZnApOworICByZXR1cm4gMDsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5Eb24ndCB3b3JyeSBhYm91dCBhbGwgdGhvc2UgaW5pdGlhbGl6YXRpb24gYW5kIG90aGVyIGNyYXAuCitDb25jZW50cmF0ZSBvbiB0aGUgd2hpbGUgbG9vcC4gSXQgcmVhZHMgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIGZpbGUKK2FuZCBzZWFyY2hlcyBmb3IgdGhlIHBhdHRlcm4gLyouIE9uY2UgaXQgc3BvdHMgdGhlIHBhdHRlcm4sIGl0Citzd2l0Y2hlcyB0aGUgQk9MRCBhdHRyaWJ1dGUgb24gd2l0aCA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmF0dHJvbigpPC92YXI+IC4gV2hlbiB3ZSBnZXQgdGhlIHBhdHRlcm4gKi8gaXQgaXMKK3N3aXRjaGVkIG9mZiBieSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5hdHRyb2ZmKCk8L3Zhcj4gLjwvcD4KKzxwPlRoZSBhYm92ZSBwcm9ncmFtIGFsc28gaW50cm9kdWNlcyB1cyB0byB0d28gdXNlZnVsIGZ1bmN0aW9ucworPHZhciBjbGFzcz0iTElURVJBTCI+Z2V0eXgoKTwvdmFyPiBhbmQgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5tb3ZlKCk8L3Zhcj4uIFRoZSBmaXJzdCBmdW5jdGlvbiBnZXRzIHRoZSBjby1vcmRpbmF0ZXMgb2YKK3RoZSBwcmVzZW50IGN1cnNvciBpbnRvIHRoZSB2YXJpYWJsZXMgeSwgeC4gU2luY2UgZ2V0eXgoKSBpcyBhCittYWNybyB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgcG9pbnRlcnMgdG8gdmFyaWFibGVzLiBUaGUgZnVuY3Rpb24KKzx2YXIgY2xhc3M9IkxJVEVSQUwiPm1vdmUoKTwvdmFyPiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZQorY28tb3JkaW5hdGVzIGdpdmVuIHRvIGl0LjwvcD4KKzxwPlRoZSBhYm92ZSBwcm9ncmFtIGlzIHJlYWxseSBhIHNpbXBsZSBvbmUgd2hpY2ggZG9lc24ndCBkbyBtdWNoLgorT24gdGhlc2UgbGluZXMgb25lIGNvdWxkIHdyaXRlIGEgbW9yZSB1c2VmdWwgcHJvZ3JhbSB3aGljaCByZWFkcyBhCitDIGZpbGUsIHBhcnNlcyBpdCBhbmQgcHJpbnRzIGl0IGluIGRpZmZlcmVudCBjb2xvcnMuIE9uZSBjb3VsZCBldmVuCitleHRlbmQgaXQgdG8gb3RoZXIgbGFuZ3VhZ2VzIGFzIHdlbGwuPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQVRUUklCREVUQUlMUyIgaWQ9IkFUVFJJQkRFVEFJTFMiPjguMS4KK1RoZSBkZXRhaWxzPC9hPjwvaDM+Cis8cD5MZXQncyBnZXQgaW50byBtb3JlIGRldGFpbHMgb2YgYXR0cmlidXRlcy4gVGhlIGZ1bmN0aW9ucworPHZhciBjbGFzcz0iTElURVJBTCI+YXR0cm9uKCksIGF0dHJvZmYoKSwgYXR0cnNldCgpPC92YXI+ICwgYW5kCit0aGVpciBzaXN0ZXIgZnVuY3Rpb25zIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmF0dHJfZ2V0KCk8L3Zhcj4gZXRjLi4KK2NhbiBiZSB1c2VkIHRvIHN3aXRjaCBhdHRyaWJ1dGVzIG9uL29mZiAsIGdldCBhdHRyaWJ1dGVzIGFuZAorcHJvZHVjZSBhIGNvbG9yZnVsIGRpc3BsYXkuPC9wPgorPHA+VGhlIGZ1bmN0aW9ucyBhdHRyb24gYW5kIGF0dHJvZmYgdGFrZSBhIGJpdC1tYXNrIG9mIGF0dHJpYnV0ZXMKK2FuZCBzd2l0Y2ggdGhlbSBvbiBvciBvZmYsIHJlc3BlY3RpdmVseS4gVGhlIGZvbGxvd2luZyB2aWRlbworYXR0cmlidXRlcywgd2hpY2ggYXJlIGRlZmluZWQgaW4gJmx0O2N1cnNlcy5oJmd0OyBjYW4gYmUgcGFzc2VkIHRvCit0aGVzZSBmdW5jdGlvbnMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICAKKyAgICBBX05PUk1BTCAgICAgICAgTm9ybWFsIGRpc3BsYXkgKG5vIGhpZ2hsaWdodCkKKyAgICBBX1NUQU5ET1VUICAgICAgQmVzdCBoaWdobGlnaHRpbmcgbW9kZSBvZiB0aGUgdGVybWluYWwuCisgICAgQV9VTkRFUkxJTkUgICAgIFVuZGVybGluaW5nCisgICAgQV9SRVZFUlNFICAgICAgIFJldmVyc2UgdmlkZW8KKyAgICBBX0JMSU5LICAgICAgICAgQmxpbmtpbmcKKyAgICBBX0RJTSAgICAgICAgICAgSGFsZiBicmlnaHQKKyAgICBBX0JPTEQgICAgICAgICAgRXh0cmEgYnJpZ2h0IG9yIGJvbGQKKyAgICBBX1BST1RFQ1QgICAgICAgUHJvdGVjdGVkIG1vZGUKKyAgICBBX0lOVklTICAgICAgICAgSW52aXNpYmxlIG9yIGJsYW5rIG1vZGUKKyAgICBBX0FMVENIQVJTRVQgICAgQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKyAgICBBX0NIQVJURVhUICAgICAgQml0LW1hc2sgdG8gZXh0cmFjdCBhIGNoYXJhY3RlcgorICAgIENPTE9SX1BBSVIobikgICBDb2xvci1wYWlyIG51bWJlciBuIAorICAgIDwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBsYXN0IG9uZSBpcyB0aGUgbW9zdCBjb2xvcmZ1bCBvbmUgOi0pIENvbG9ycyBhcmUgZXhwbGFpbmVkCitpbiB0aGUgPGEgaHJlZj0iI2NvbG9yIiB0YXJnZXQ9Il90b3AiPm5leHQgc2VjdGlvbnM8L2E+LjwvcD4KKzxwPldlIGNhbiBPUih8KSBhbnkgbnVtYmVyIG9mIGFib3ZlIGF0dHJpYnV0ZXMgdG8gZ2V0IGEgY29tYmluZWQKK2VmZmVjdC4gSWYgeW91IHdhbnRlZCByZXZlcnNlIHZpZGVvIHdpdGggYmxpbmtpbmcgY2hhcmFjdGVycyB5b3UKK2NhbiB1c2U8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIGF0dHJvbihBX1JFVkVSU0UgfCBBX0JMSU5LKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkFUVFJPTlZTQVRUUlNFVCIgaWQ9CisiQVRUUk9OVlNBVFRSU0VUIj44LjIuIGF0dHJvbigpIHZzIGF0dHJzZXQoKTwvYT48L2gzPgorPHA+VGhlbiB3aGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYXR0cm9uKCkgYW5kIGF0dHJzZXQoKT8KK2F0dHJzZXQgc2V0cyB0aGUgYXR0cmlidXRlcyBvZiB3aW5kb3cgd2hlcmVhcyBhdHRyb24ganVzdCBzd2l0Y2hlcworb24gdGhlIGF0dHJpYnV0ZSBnaXZlbiB0byBpdC4gU28gYXR0cnNldCgpIGZ1bGx5IG92ZXJyaWRlcyB3aGF0ZXZlcgorYXR0cmlidXRlcyB0aGUgd2luZG93IHByZXZpb3VzbHkgaGFkIGFuZCBzZXRzIGl0IHRvIHRoZSBuZXcKK2F0dHJpYnV0ZShzKS4gU2ltaWxhcmx5IGF0dHJvZmYoKSBqdXN0IHN3aXRjaGVzIG9mZiB0aGUKK2F0dHJpYnV0ZShzKSBnaXZlbiB0byBpdCBhcyBhbiBhcmd1bWVudC4gVGhpcyBnaXZlcyB1cyB0aGUKK2ZsZXhpYmlsaXR5IG9mIG1hbmFnaW5nIGF0dHJpYnV0ZXMgZWFzaWx5LkJ1dCBpZiB5b3UgdXNlIHRoZW0KK2NhcmVsZXNzbHkgeW91IG1heSBsb29zZSB0cmFjayBvZiB3aGF0IGF0dHJpYnV0ZXMgdGhlIHdpbmRvdyBoYXMKK2FuZCBnYXJibGUgdGhlIGRpc3BsYXkuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIHdoaWxlIG1hbmFnaW5nCittZW51cyB3aXRoIGNvbG9ycyBhbmQgaGlnaGxpZ2h0aW5nLiBTbyBkZWNpZGUgb24gYSBjb25zaXN0ZW50Citwb2xpY3kgYW5kIHN0aWNrIHRvIGl0LiBZb3UgY2FuIGFsd2F5cyB1c2UgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5zdGFuZGVuZCgpPC92YXI+IHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5hdHRyc2V0KEFfTk9STUFMKTwvdmFyPiB3aGljaCB0dXJucyBvZmYgYWxsIGF0dHJpYnV0ZXMKK2FuZCBicmluZ3MgeW91IHRvIG5vcm1hbCBtb2RlLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQVRUUl9HRVQiIGlkPSJBVFRSX0dFVCI+OC4zLgorYXR0cl9nZXQoKTwvYT48L2gzPgorPHA+VGhlIGZ1bmN0aW9uIGF0dHJfZ2V0KCkgZ2V0cyB0aGUgY3VycmVudCBhdHRyaWJ1dGVzIGFuZCBjb2xvcgorcGFpciBvZiB0aGUgd2luZG93LiBUaG91Z2ggd2UgbWlnaHQgbm90IHVzZSB0aGlzIGFzIG9mdGVuIGFzIHRoZQorYWJvdmUgZnVuY3Rpb25zLCB0aGlzIGlzIHVzZWZ1bCBpbiBzY2FubmluZyBhcmVhcyBvZiBzY3JlZW4uIFNheSB3ZQord2FudGVkIHRvIGRvIHNvbWUgY29tcGxleCB1cGRhdGUgb24gc2NyZWVuIGFuZCB3ZSBhcmUgbm90IHN1cmUgd2hhdAorYXR0cmlidXRlIGVhY2ggY2hhcmFjdGVyIGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhlbiB0aGlzIGZ1bmN0aW9uIGNhbgorYmUgdXNlZCB3aXRoIGVpdGhlciBhdHRyc2V0IG9yIGF0dHJvbiB0byBwcm9kdWNlIHRoZSBkZXNpcmVkCitlZmZlY3QuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJBVFRSX0ZVTkNTIiBpZD0iQVRUUl9GVU5DUyI+OC40LiBhdHRyXworZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGVyZSBhcmUgc2VyaWVzIG9mIGZ1bmN0aW9ucyBsaWtlIGF0dHJfc2V0KCksIGF0dHJfb24gZXRjLi4KK1RoZXNlIGFyZSBzaW1pbGFyIHRvIGFib3ZlIGZ1bmN0aW9ucyBleGNlcHQgdGhhdCB0aGV5IHRha2UKK3BhcmFtZXRlcnMgb2YgdHlwZSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5hdHRyX3Q8L3Zhcj4uPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJXQVRUUkZVTkNTIiBpZD0iV0FUVFJGVU5DUyI+OC41LiB3YXR0cgorZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5Gb3IgZWFjaCBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zIHdlIGhhdmUgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uCit3aXRoICd3JyB3aGljaCBvcGVyYXRlcyBvbiBhIHBhcnRpY3VsYXIgd2luZG93LiBUaGUgYWJvdmUgZnVuY3Rpb25zCitvcGVyYXRlIG9uIHN0ZHNjci48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNIR0FUIiBpZD0iQ0hHQVQiPjguNi4gY2hnYXQoKQorZnVuY3Rpb25zPC9hPjwvaDM+Cis8cD5UaGUgZnVuY3Rpb24gY2hnYXQoKSBpcyBsaXN0ZWQgaW4gdGhlIGVuZCBvZiB0aGUgbWFuIHBhZ2UKK2N1cnNfYXR0ci4gSXQgYWN0dWFsbHkgaXMgYSB1c2VmdWwgb25lLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkCit0byBzZXQgYXR0cmlidXRlcyBmb3IgYSBncm91cCBvZiBjaGFyYWN0ZXJzIHdpdGhvdXQgbW92aW5nLiBJIG1lYW4KK2l0ICEhISB3aXRob3V0IG1vdmluZyB0aGUgY3Vyc29yIDotKSBJdCBjaGFuZ2VzIHRoZSBhdHRyaWJ1dGVzIG9mIGEKK2dpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IGN1cnNvcgorbG9jYXRpb24uPC9wPgorPHA+V2UgY2FuIGdpdmUgLTEgYXMgdGhlIGNoYXJhY3RlciBjb3VudCB0byB1cGRhdGUgdGlsbCBlbmQgb2YKK2xpbmUuIElmIHlvdSB3YW50IHRvIGNoYW5nZSBhdHRyaWJ1dGVzIG9mIGNoYXJhY3RlcnMgZnJvbSBjdXJyZW50Citwb3NpdGlvbiB0byBlbmQgb2YgbGluZSwganVzdCB1c2UgdGhpcy48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIGNoZ2F0KC0xLCBBX1JFVkVSU0UsIDAsIE5VTEwpOzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyBmb3IgY2hhcmFjdGVycwordGhhdCBhcmUgYWxyZWFkeSBvbiB0aGUgc2NyZWVuLiBNb3ZlIHRvIHRoZSBjaGFyYWN0ZXIgZnJvbSB3aGljaAoreW91IHdhbnQgdG8gY2hhbmdlIGFuZCBjaGFuZ2UgdGhlIGF0dHJpYnV0ZS48L3A+Cis8cD5PdGhlciBmdW5jdGlvbnMgd2NoZ2F0KCksIG12Y2hnYXQoKSwgd2NoZ2F0KCkgYmVoYXZlIHNpbWlsYXJseQorZXhjZXB0IHRoYXQgdGhlIHcgZnVuY3Rpb25zIG9wZXJhdGUgb24gdGhlIHBhcnRpY3VsYXIgd2luZG93LiBUaGUKK212IGZ1bmN0aW9ucyBmaXJzdCBtb3ZlIHRoZSBjdXJzb3IgdGhlbiBwZXJmb3JtIHRoZSB3b3JrIGdpdmVuIHRvCit0aGVtLiBBY3R1YWxseSBjaGdhdCBpcyBhIG1hY3JvIHdoaWNoIGlzIHJlcGxhY2VkIGJ5IGEgd2NoZ2F0KCkKK3dpdGggc3Rkc2NyIGFzIHRoZSB3aW5kb3cuIE1vc3Qgb2YgdGhlICJ3LWxlc3MiIGZ1bmN0aW9ucyBhcmUKK21hY3Jvcy48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCV0lDSCIgaWQ9IkJXSUNIIj48L2E+Cis8cD48Yj5FeGFtcGxlIDYuIENoZ2F0KCkgVXNhZ2UgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7ICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAqLworICAgICAgICBzdGFydF9jb2xvcigpOyAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGNvbG9yIGZ1bmN0aW9uYWxpdHkgICAgKi8KKyAgICAgICAgCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9DWUFOLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIHByaW50dygiQSBCaWcgc3RyaW5nIHdoaWNoIGkgZGlkbid0IGNhcmUgdG8gdHlwZSBmdWxseSAiKTsKKyAgICAgICAgbXZjaGdhdCgwLCAwLCAtMSwgQV9CTElOSywgMSwgTlVMTCk7ICAgIAorICAgICAgICAvKiAKKyAgICAgICAgICogRmlyc3QgdHdvIHBhcmFtZXRlcnMgc3BlY2lmeSB0aGUgcG9zaXRpb24gYXQgd2hpY2ggdG8gc3RhcnQgCisgICAgICAgICAqIFRoaXJkIHBhcmFtZXRlciBudW1iZXIgb2YgY2hhcmFjdGVycyB0byB1cGRhdGUuIC0xIG1lYW5zIHRpbGwgCisgICAgICAgICAqIGVuZCBvZiBsaW5lCisgICAgICAgICAqIEZvcnRoIHBhcmFtZXRlciBpcyB0aGUgbm9ybWFsIGF0dHJpYnV0ZSB5b3Ugd2FudGVkIHRvIGdpdmUgCisgICAgICAgICAqIHRvIHRoZSBjaGFyY3RlcgorICAgICAgICAgKiBGaWZ0aCBpcyB0aGUgY29sb3IgaW5kZXguIEl0IGlzIHRoZSBpbmRleCBnaXZlbiBkdXJpbmcgaW5pdF9wYWlyKCkKKyAgICAgICAgICogdXNlIDAgaWYgeW91IGRpZG4ndCB3YW50IGNvbG9yCisgICAgICAgICAqIFNpeHRoIG9uZSBpcyBhbHdheXMgTlVMTCAKKyAgICAgICAgICovCisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgZ2V0Y2goKTsKKyAgICAgICAgZW5kd2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+VGhpcyBleGFtcGxlIGFsc28gaW50cm9kdWNlcyB1cyB0byB0aGUgY29sb3Igd29ybGQgb2YgY3Vyc2VzLgorQ29sb3JzIHdpbGwgYmUgZXhwbGFpbmVkIGluIGRldGFpbCBsYXRlci4gVXNlIDAgZm9yIG5vIGNvbG9yLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJXSU5ET1dTIiBpZD0iV0lORE9XUyI+OS4KK1dpbmRvd3M8L2E+PC9oMj4KKzxwPldpbmRvd3MgZm9ybSB0aGUgbW9zdCBpbXBvcnRhbnQgY29uY2VwdCBpbiBjdXJzZXMuIFlvdSBoYXZlIHNlZW4KK3RoZSBzdGFuZGFyZCB3aW5kb3cgc3Rkc2NyIGFib3ZlIHdoZXJlIGFsbCB0aGUgZnVuY3Rpb25zIGltcGxpY2l0bHkKK29wZXJhdGVkIG9uIHRoaXMgd2luZG93LiBOb3cgdG8gbWFrZSBkZXNpZ24gZXZlbiBhIHNpbXBsZXN0IEdVSSwKK3lvdSBuZWVkIHRvIHJlc29ydCB0byB3aW5kb3dzLiBUaGUgbWFpbiByZWFzb24geW91IG1heSB3YW50IHRvIHVzZQord2luZG93cyBpcyB0byBtYW5pcHVsYXRlIHBhcnRzIG9mIHRoZSBzY3JlZW4gc2VwYXJhdGVseSwgZm9yIGJldHRlcgorZWZmaWNpZW5jeSwgYnkgdXBkYXRpbmcgb25seSB0aGUgd2luZG93cyB0aGF0IG5lZWQgdG8gYmUgY2hhbmdlZAorYW5kIGZvciBhIGJldHRlciBkZXNpZ24uIEkgd291bGQgc2F5IHRoZSBsYXN0IHJlYXNvbiBpcyB0aGUgbW9zdAoraW1wb3J0YW50IGluIGdvaW5nIGZvciB3aW5kb3dzLiBZb3Ugc2hvdWxkIGFsd2F5cyBzdHJpdmUgZm9yIGEKK2JldHRlciBhbmQgZWFzeS10by1tYW5hZ2UgZGVzaWduIGluIHlvdXIgcHJvZ3JhbXMuIElmIHlvdSBhcmUKK3dyaXRpbmcgYmlnLCBjb21wbGV4IEdVSXMgdGhpcyBpcyBvZiBwaXZvdGFsIGltcG9ydGFuY2UgYmVmb3JlIHlvdQorc3RhcnQgZG9pbmcgYW55dGhpbmcuPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iV0lORE9XQkFTSUNTIiBpZD0iV0lORE9XQkFTSUNTIj45LjEuIFRoZQorYmFzaWNzPC9hPjwvaDM+Cis8cD5BIFdpbmRvdyBjYW4gYmUgY3JlYXRlZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPm5ld3dpbigpPC92YXI+LiBJdCBkb2Vzbid0IGNyZWF0ZSBhbnkgdGhpbmcgb24gdGhlIHNjcmVlbgorYWN0dWFsbHkuIEl0IGFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgc3RydWN0dXJlIHRvIG1hbmlwdWxhdGUgdGhlCit3aW5kb3cgYW5kIHVwZGF0ZXMgdGhlIHN0cnVjdHVyZSB3aXRoIGRhdGEgcmVnYXJkaW5nIHRoZSB3aW5kb3cKK2xpa2UgaXQncyBzaXplLCBiZWdpbnksIGJlZ2lueCBldGMuLiBIZW5jZSBpbiBjdXJzZXMsIGEgd2luZG93IGlzCitqdXN0IGFuIGFic3RyYWN0aW9uIG9mIGFuIGltYWdpbmFyeSB3aW5kb3csIHdoaWNoIGNhbiBiZQorbWFuaXB1bGF0ZWQgaW5kZXBlbmRlbnQgb2Ygb3RoZXIgcGFydHMgb2Ygc2NyZWVuLiBUaGUgZnVuY3Rpb24KK25ld3dpbigpIHJldHVybnMgYSBwb2ludGVyIHRvIHN0cnVjdHVyZSBXSU5ET1csIHdoaWNoIGNhbiBiZSBwYXNzZWQKK3RvIHdpbmRvdyByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIHdwcmludHcoKSBldGMuLiBGaW5hbGx5IHRoZSB3aW5kb3cKK2NhbiBiZSBkZXN0cm95ZWQgd2l0aCBkZWx3aW4oKS4gSXQgd2lsbCBkZWFsbG9jYXRlIHRoZSBtZW1vcnkKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgd2luZG93IHN0cnVjdHVyZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkxFVEJFV0lORE9XIiBpZD0iTEVUQkVXSU5ET1ciPjkuMi4gTGV0Cit0aGVyZSBiZSBhIFdpbmRvdyAhISE8L2E+PC9oMz4KKzxwPldoYXQgZnVuIGlzIGl0LCBpZiBhIHdpbmRvdyBpcyBjcmVhdGVkIGFuZCB3ZSBjYW4ndCBzZWUgaXQuIFNvCit0aGUgZnVuIHBhcnQgYmVnaW5zIGJ5IGRpc3BsYXlpbmcgdGhlIHdpbmRvdy4gVGhlIGZ1bmN0aW9uCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5ib3goKTwvdmFyPiBjYW4gYmUgdXNlZCB0byBkcmF3IGEgYm9yZGVyCithcm91bmQgdGhlIHdpbmRvdy4gTGV0J3MgZXhwbG9yZSB0aGVzZSBmdW5jdGlvbnMgaW4gbW9yZSBkZXRhaWwgaW4KK3RoaXMgZXhhbXBsZS48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCV0lCTyIgaWQ9IkJXSUJPIj48L2E+Cis8cD48Yj5FeGFtcGxlIDcuIFdpbmRvdyBCb3JkZXIgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKKworV0lORE9XICpjcmVhdGVfbmV3d2luKGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCk7Cit2b2lkIGRlc3Ryb3lfd2luKFdJTkRPVyAqbG9jYWxfd2luKTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sgICAgICAgV0lORE9XICpteV93aW47CisgICAgICAgIGludCBzdGFydHgsIHN0YXJ0eSwgd2lkdGgsIGhlaWdodDsKKyAgICAgICAgaW50IGNoOworCisgICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAqLworICAgICAgICBjYnJlYWsoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgYnVmZmVyaW5nIGRpc2FibGVkLCBQYXNzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZXZlcnR5IHRoaW5nIHRvIG1lICAgICAgICAgICAqLworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsgICAgICAgICAgIC8qIEkgbmVlZCB0aGF0IG5pZnR5IEYxICAgICAgICAgKi8KKworICAgICAgICBoZWlnaHQgPSAzOworICAgICAgICB3aWR0aCA9IDEwOworICAgICAgICBzdGFydHkgPSAoTElORVMgLSBoZWlnaHQpIC8gMjsgIC8qIENhbGN1bGF0aW5nIGZvciBhIGNlbnRlciBwbGFjZW1lbnQgKi8KKyAgICAgICAgc3RhcnR4ID0gKENPTFMgLSB3aWR0aCkgLyAyOyAgICAvKiBvZiB0aGUgd2luZG93ICAgICAgICAgICAgICAgICovCisgICAgICAgIHByaW50dygiUHJlc3MgRjEgdG8gZXhpdCIpOworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIG15X3dpbiA9IGNyZWF0ZV9uZXd3aW4oaGVpZ2h0LCB3aWR0aCwgc3RhcnR5LCBzdGFydHgpOworCisgICAgICAgIHdoaWxlKChjaCA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjaCkKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgS0VZX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lfd2luKG15X3dpbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X3dpbiA9IGNyZWF0ZV9uZXd3aW4oaGVpZ2h0LCB3aWR0aCwgc3RhcnR5LC0tc3RhcnR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveV93aW4obXlfd2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfd2luID0gY3JlYXRlX25ld3dpbihoZWlnaHQsIHdpZHRoLCBzdGFydHksKytzdGFydHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95X3dpbihteV93aW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV93aW4gPSBjcmVhdGVfbmV3d2luKGhlaWdodCwgd2lkdGgsIC0tc3RhcnR5LHN0YXJ0eCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveV93aW4obXlfd2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfd2luID0gY3JlYXRlX25ld3dpbihoZWlnaHQsIHdpZHRoLCArK3N0YXJ0eSxzdGFydHgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJzZXMgbW9kZSAgICAgICAgICAgICAgICAqLworICAgICAgICByZXR1cm4gMDsKK30KKworV0lORE9XICpjcmVhdGVfbmV3d2luKGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCkKK3sgICAgICAgV0lORE9XICpsb2NhbF93aW47CisKKyAgICAgICAgbG9jYWxfd2luID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHN0YXJ0eSwgc3RhcnR4KTsKKyAgICAgICAgYm94KGxvY2FsX3dpbiwgMCAsIDApOyAgICAgICAgICAvKiAwLCAwIGdpdmVzIGRlZmF1bHQgY2hhcmFjdGVycyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmb3IgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbGluZXMgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICB3cmVmcmVzaChsb2NhbF93aW4pOyAgICAgICAgICAgIC8qIFNob3cgdGhhdCBib3ggICAgICAgICAgICAgICAgKi8KKworICAgICAgICByZXR1cm4gbG9jYWxfd2luOworfQorCit2b2lkIGRlc3Ryb3lfd2luKFdJTkRPVyAqbG9jYWxfd2luKQoreyAgICAgICAKKyAgICAgICAgLyogYm94KGxvY2FsX3dpbiwgJyAnLCAnICcpOyA6IFRoaXMgd29uJ3QgcHJvZHVjZSB0aGUgZGVzaXJlZAorICAgICAgICAgKiByZXN1bHQgb2YgZXJhc2luZyB0aGUgd2luZG93LiBJdCB3aWxsIGxlYXZlIGl0J3MgZm91ciBjb3JuZXJzIAorICAgICAgICAgKiBhbmQgc28gYW4gdWdseSByZW1uYW50IG9mIHdpbmRvdy4gCisgICAgICAgICAqLworICAgICAgICB3Ym9yZGVyKGxvY2FsX3dpbiwgJyAnLCAnICcsICcgJywnICcsJyAnLCcgJywnICcsJyAnKTsKKyAgICAgICAgLyogVGhlIHBhcmFtZXRlcnMgdGFrZW4gYXJlIAorICAgICAgICAgKiAxLiB3aW46IHRoZSB3aW5kb3cgb24gd2hpY2ggdG8gb3BlcmF0ZQorICAgICAgICAgKiAyLiBsczogY2hhcmFjdGVyIHRvIGJlIHVzZWQgZm9yIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgICogMy4gcnM6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgd2luZG93IAorICAgICAgICAgKiA0LiB0czogY2hhcmFjdGVyIHRvIGJlIHVzZWQgZm9yIHRoZSB0b3Agc2lkZSBvZiB0aGUgd2luZG93IAorICAgICAgICAgKiA1LiBiczogY2hhcmFjdGVyIHRvIGJlIHVzZWQgZm9yIHRoZSBib3R0b20gc2lkZSBvZiB0aGUgd2luZG93IAorICAgICAgICAgKiA2LiB0bDogY2hhcmFjdGVyIHRvIGJlIHVzZWQgZm9yIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgICogNy4gdHI6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUgd2luZG93IAorICAgICAgICAgKiA4LiBibDogY2hhcmFjdGVyIHRvIGJlIHVzZWQgZm9yIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdyAKKyAgICAgICAgICogOS4gYnI6IGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgd2luZG93CisgICAgICAgICAqLworICAgICAgICB3cmVmcmVzaChsb2NhbF93aW4pOworICAgICAgICBkZWx3aW4obG9jYWxfd2luKTsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkJPUkRFUkVYRVhQTCIgaWQ9IkJPUkRFUkVYRVhQTCI+OS4zLgorRXhwbGFuYXRpb248L2E+PC9oMz4KKzxwPkRvbid0IHNjcmVhbS4gSSBrbm93IGl0J3MgYSBiaWcgZXhhbXBsZS4gQnV0IEkgaGF2ZSB0byBleHBsYWluCitzb21lIGltcG9ydGFudCB0aGluZ3MgaGVyZSA6LSkuIFRoaXMgcHJvZ3JhbSBjcmVhdGVzIGEgcmVjdGFuZ3VsYXIKK3dpbmRvdyB0aGF0IGNhbiBiZSBtb3ZlZCB3aXRoIGxlZnQsIHJpZ2h0LCB1cCwgZG93biBhcnJvdyBrZXlzLiBJdAorcmVwZWF0ZWRseSBjcmVhdGVzIGFuZCBkZXN0cm95cyB3aW5kb3dzIGFzIHVzZXIgcHJlc3MgYSBrZXkuIERvbid0CitnbyBiZXlvbmQgdGhlIHNjcmVlbiBsaW1pdHMuIENoZWNraW5nIGZvciB0aG9zZSBsaW1pdHMgaXMgbGVmdCBhcworYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuIExldCdzIGRpc3NlY3QgaXQgYnkgbGluZSBieSBsaW5lLjwvcD4KKzxwPlRoZSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5jcmVhdGVfbmV3d2luKCk8L3Zhcj4gZnVuY3Rpb24gY3JlYXRlcworYSB3aW5kb3cgd2l0aCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5uZXd3aW4oKTwvdmFyPiBhbmQgZGlzcGxheXMgYQorYm9yZGVyIGFyb3VuZCBpdCB3aXRoIGJveC4gVGhlIGZ1bmN0aW9uIDx2YXIgY2xhc3M9CisiTElURVJBTCI+ZGVzdHJveV93aW4oKTwvdmFyPiBmaXJzdCBlcmFzZXMgdGhlIHdpbmRvdyBmcm9tIHNjcmVlbgorYnkgcGFpbnRpbmcgYSBib3JkZXIgd2l0aCAnICcgY2hhcmFjdGVyIGFuZCB0aGVuIGNhbGxpbmcKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPmRlbHdpbigpPC92YXI+IHRvIGRlYWxsb2NhdGUgbWVtb3J5IHJlbGF0ZWQgdG8KK2l0LiBEZXBlbmRpbmcgb24gdGhlIGtleSB0aGUgdXNlciBwcmVzc2VzLCBzdGFydHkgb3Igc3RhcnR4IGlzCitjaGFuZ2VkIGFuZCBhIG5ldyB3aW5kb3cgaXMgY3JlYXRlZC48L3A+Cis8cD5JbiB0aGUgZGVzdHJveV93aW4sIGFzIHlvdSBjYW4gc2VlLCBJIHVzZWQgd2JvcmRlciBpbnN0ZWFkIG9mCitib3guIFRoZSByZWFzb24gaXMgd3JpdHRlbiBpbiB0aGUgY29tbWVudHMgKFlvdSBtaXNzZWQgaXQuIEkga25vdy4KK1JlYWQgdGhlIGNvZGUgOi0pKS4gd2JvcmRlciBkcmF3cyBhIGJvcmRlciBhcm91bmQgdGhlIHdpbmRvdyB3aXRoCit0aGUgY2hhcmFjdGVycyBnaXZlbiB0byBpdCBhcyB0aGUgNCBjb3JuZXIgcG9pbnRzIGFuZCB0aGUgNCBsaW5lcy4KK1RvIHB1dCBpdCBjbGVhcmx5LCBpZiB5b3UgaGF2ZSBjYWxsZWQgd2JvcmRlciBhcyBiZWxvdzo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj4gICAgd2JvcmRlcih3aW4sICd8JywgJ3wnLCAnLScsICctJywgJysnLCAnKycsICcrJywgJysnKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5pdCBwcm9kdWNlcyBzb21lIHRoaW5nIGxpa2U8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgICstLS0tLS0tLS0tLS0rCisgICAgfCAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLSs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik9USEVSU1RVRkYiIGlkPSJPVEhFUlNUVUZGIj45LjQuIFRoZQorb3RoZXIgc3R1ZmYgaW4gdGhlIGV4YW1wbGU8L2E+PC9oMz4KKzxwPllvdSBjYW4gYWxzbyBzZWUgaW4gdGhlIGFib3ZlIGV4YW1wbGVzLCB0aGF0IEkgaGF2ZSB1c2VkIHRoZQordmFyaWFibGVzIENPTFMsIExJTkVTIHdoaWNoIGFyZSBpbml0aWFsaXplZCB0byB0aGUgc2NyZWVuIHNpemVzCithZnRlciBpbml0c2NyKCkuIFRoZXkgY2FuIGJlIHVzZWZ1bCBpbiBmaW5kaW5nIHNjcmVlbiBkaW1lbnNpb25zCithbmQgZmluZGluZyB0aGUgY2VudGVyIGNvLW9yZGluYXRlIG9mIHRoZSBzY3JlZW4gYXMgYWJvdmUuIFRoZQorZnVuY3Rpb24gPHZhciBjbGFzcz0iTElURVJBTCI+Z2V0Y2goKTwvdmFyPiBhcyB1c3VhbCBnZXRzIHRoZSBrZXkKK2Zyb20ga2V5Ym9hcmQgYW5kIGFjY29yZGluZyB0byB0aGUga2V5IGl0IGRvZXMgdGhlIGNvcnJlc3BvbmRpbmcKK3dvcmsuIFRoaXMgdHlwZSBvZiBzd2l0Y2gtIGNhc2UgaXMgdmVyeSBjb21tb24gaW4gYW55IEdVSSBiYXNlZAorcHJvZ3JhbXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJPVEhFUkJPUkRFUkZVTkNTIiBpZD0KKyJPVEhFUkJPUkRFUkZVTkNTIj45LjUuIE90aGVyIEJvcmRlciBmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPkFib3ZlIHByb2dyYW0gaXMgZ3Jvc3NseSBpbmVmZmljaWVudCBpbiB0aGF0IHdpdGggZWFjaCBwcmVzcyBvZgorYSBrZXksIGEgd2luZG93IGlzIGRlc3Ryb3llZCBhbmQgYW5vdGhlciBpcyBjcmVhdGVkLiBTbyBsZXQncyB3cml0ZQorYSBtb3JlIGVmZmljaWVudCBwcm9ncmFtIHdoaWNoIHVzZXMgb3RoZXIgYm9yZGVyIHJlbGF0ZWQKK2Z1bmN0aW9ucy48L3A+Cis8cD5UaGUgZm9sbG93aW5nIHByb2dyYW0gdXNlcyA8dmFyIGNsYXNzPSJMSVRFUkFMIj5tdmhsaW5lKCk8L3Zhcj4KK2FuZCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5tdnZsaW5lKCk8L3Zhcj4gdG8gYWNoaWV2ZSBzaW1pbGFyIGVmZmVjdC4KK1RoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHNpbXBsZS4gVGhleSBjcmVhdGUgYSBob3Jpem9udGFsIG9yCit2ZXJ0aWNhbCBsaW5lIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIGF0IHRoZSBzcGVjaWZpZWQKK3Bvc2l0aW9uLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJPVEJPIiBpZD0iQk9UQk8iPjwvYT4KKzxwPjxiPkV4YW1wbGUgOC4gTW9yZSBib3JkZXIgZnVuY3Rpb25zPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O25jdXJzZXMuaCZndDsKKwordHlwZWRlZiBzdHJ1Y3QgX3dpbl9ib3JkZXJfc3RydWN0IHsKKyAgICAgICAgY2h0eXBlICBscywgcnMsIHRzLCBicywgCisgICAgICAgICAgICAgICAgdGwsIHRyLCBibCwgYnI7Cit9V0lOX0JPUkRFUjsKKwordHlwZWRlZiBzdHJ1Y3QgX1dJTl9zdHJ1Y3QgeworCisgICAgICAgIGludCBzdGFydHgsIHN0YXJ0eTsKKyAgICAgICAgaW50IGhlaWdodCwgd2lkdGg7CisgICAgICAgIFdJTl9CT1JERVIgYm9yZGVyOworfVdJTjsKKwordm9pZCBpbml0X3dpbl9wYXJhbXMoV0lOICpwX3dpbik7Cit2b2lkIHByaW50X3dpbl9wYXJhbXMoV0lOICpwX3dpbik7Cit2b2lkIGNyZWF0ZV9ib3goV0lOICp3aW4sIGJvb2wgZmxhZyk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7ICAgICAgIFdJTiB3aW47CisgICAgICAgIGludCBjaDsKKworICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGN1cnNlcyBtb2RlICAgICAgICAgICAgKi8KKyAgICAgICAgc3RhcnRfY29sb3IoKTsgICAgICAgICAgICAgICAgICAvKiBTdGFydCB0aGUgY29sb3IgZnVuY3Rpb25hbGl0eSAqLworICAgICAgICBjYnJlYWsoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmUgYnVmZmVyaW5nIGRpc2FibGVkLCBQYXNzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZXZlcnR5IHRoaW5nIHRvIG1lICAgICAgICAgICAqLworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsgICAgICAgICAgIC8qIEkgbmVlZCB0aGF0IG5pZnR5IEYxICAgICAgICAgKi8KKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9DWUFOLCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgd2luZG93IHBhcmFtZXRlcnMgKi8KKyAgICAgICAgaW5pdF93aW5fcGFyYW1zKCZhbXA7d2luKTsKKyAgICAgICAgcHJpbnRfd2luX3BhcmFtcygmYW1wO3dpbik7CisKKyAgICAgICAgYXR0cm9uKENPTE9SX1BBSVIoMSkpOworICAgICAgICBwcmludHcoIlByZXNzIEYxIHRvIGV4aXQiKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICBhdHRyb2ZmKENPTE9SX1BBSVIoMSkpOworICAgICAgICAKKyAgICAgICAgY3JlYXRlX2JveCgmYW1wO3dpbiwgVFJVRSk7CisgICAgICAgIHdoaWxlKChjaCA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjaCkKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgS0VZX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9ib3goJmFtcDt3aW4sIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aW4uc3RhcnR4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfYm94KCZhbXA7d2luLCBUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2JveCgmYW1wO3dpbiwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3dpbi5zdGFydHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9ib3goJmFtcDt3aW4sIFRSVUUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfYm94KCZhbXA7d2luLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2luLnN0YXJ0eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2JveCgmYW1wO3dpbiwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2JveCgmYW1wO3dpbiwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3dpbi5zdGFydHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9ib3goJmFtcDt3aW4sIFRSVUUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJzZXMgbW9kZSAgICAgICAgICAgICAgICAqLworICAgICAgICByZXR1cm4gMDsKK30KK3ZvaWQgaW5pdF93aW5fcGFyYW1zKFdJTiAqcF93aW4pCit7CisgICAgICAgIHBfd2luLSZndDtoZWlnaHQgPSAzOworICAgICAgICBwX3dpbi0mZ3Q7d2lkdGggPSAxMDsKKyAgICAgICAgcF93aW4tJmd0O3N0YXJ0eSA9IChMSU5FUyAtIHBfd2luLSZndDtoZWlnaHQpLzI7ICAgICAgCisgICAgICAgIHBfd2luLSZndDtzdGFydHggPSAoQ09MUyAtIHBfd2luLSZndDt3aWR0aCkvMjsKKworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLmxzID0gJ3wnOworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLnJzID0gJ3wnOworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLnRzID0gJy0nOworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLmJzID0gJy0nOworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLnRsID0gJysnOworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLnRyID0gJysnOworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLmJsID0gJysnOworICAgICAgICBwX3dpbi0mZ3Q7Ym9yZGVyLmJyID0gJysnOworCit9Cit2b2lkIHByaW50X3dpbl9wYXJhbXMoV0lOICpwX3dpbikKK3sKKyNpZmRlZiBfREVCVUcKKyAgICAgICAgbXZwcmludHcoMjUsIDAsICIlZCAlZCAlZCAlZCIsIHBfd2luLSZndDtzdGFydHgsIHBfd2luLSZndDtzdGFydHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3dpbi0mZ3Q7d2lkdGgsIHBfd2luLSZndDtoZWlnaHQpOworICAgICAgICByZWZyZXNoKCk7CisjZW5kaWYKK30KK3ZvaWQgY3JlYXRlX2JveChXSU4gKnBfd2luLCBib29sIGZsYWcpCit7ICAgICAgIGludCBpLCBqOworICAgICAgICBpbnQgeCwgeSwgdywgaDsKKworICAgICAgICB4ID0gcF93aW4tJmd0O3N0YXJ0eDsKKyAgICAgICAgeSA9IHBfd2luLSZndDtzdGFydHk7CisgICAgICAgIHcgPSBwX3dpbi0mZ3Q7d2lkdGg7CisgICAgICAgIGggPSBwX3dpbi0mZ3Q7aGVpZ2h0OworCisgICAgICAgIGlmKGZsYWcgPT0gVFJVRSkKKyAgICAgICAgeyAgICAgICBtdmFkZGNoKHksIHgsIHBfd2luLSZndDtib3JkZXIudGwpOworICAgICAgICAgICAgICAgIG12YWRkY2goeSwgeCArIHcsIHBfd2luLSZndDtib3JkZXIudHIpOworICAgICAgICAgICAgICAgIG12YWRkY2goeSArIGgsIHgsIHBfd2luLSZndDtib3JkZXIuYmwpOworICAgICAgICAgICAgICAgIG12YWRkY2goeSArIGgsIHggKyB3LCBwX3dpbi0mZ3Q7Ym9yZGVyLmJyKTsKKyAgICAgICAgICAgICAgICBtdmhsaW5lKHksIHggKyAxLCBwX3dpbi0mZ3Q7Ym9yZGVyLnRzLCB3IC0gMSk7CisgICAgICAgICAgICAgICAgbXZobGluZSh5ICsgaCwgeCArIDEsIHBfd2luLSZndDtib3JkZXIuYnMsIHcgLSAxKTsKKyAgICAgICAgICAgICAgICBtdnZsaW5lKHkgKyAxLCB4LCBwX3dpbi0mZ3Q7Ym9yZGVyLmxzLCBoIC0gMSk7CisgICAgICAgICAgICAgICAgbXZ2bGluZSh5ICsgMSwgeCArIHcsIHBfd2luLSZndDtib3JkZXIucnMsIGggLSAxKTsKKworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmb3IoaiA9IHk7IGogJmx0Oz0geSArIGg7ICsraikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpID0geDsgaSAmbHQ7PSB4ICsgdzsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdmFkZGNoKGosIGksICcgJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICByZWZyZXNoKCk7CisKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iQ09MT1IiIGlkPSJDT0xPUiI+MTAuIENvbG9yczwvYT48L2gyPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQ09MT1JCQVNJQ1MiIGlkPSJDT0xPUkJBU0lDUyI+MTAuMS4gVGhlCitiYXNpY3M8L2E+PC9oMz4KKzxwPkxpZmUgc2VlbXMgZHVsbCB3aXRoIG5vIGNvbG9ycy4gQ3Vyc2VzIGhhcyBhIG5pY2UgbWVjaGFuaXNtIHRvCitoYW5kbGUgY29sb3JzLiBMZXQncyBnZXQgaW50byB0aGUgdGhpY2sgb2YgdGhlIHRoaW5ncyB3aXRoIGEgc21hbGwKK3Byb2dyYW0uPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iQlNJQ08iIGlkPSJCU0lDTyI+PC9hPgorPHA+PGI+RXhhbXBsZSA5LiBBIFNpbXBsZSBDb2xvciBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O25jdXJzZXMuaCZndDsKKwordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sIGludCBzdGFydHksIGludCBzdGFydHgsIGludCB3aWR0aCwgY2hhciAqc3RyaW5nKTsKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7ICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgY3Vyc2VzIG1vZGUgICAgICAgICAgICAqLworICAgICAgICBpZihoYXNfY29sb3JzKCkgPT0gRkFMU0UpCisgICAgICAgIHsgICAgICAgZW5kd2luKCk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJZb3VyIHRlcm1pbmFsIGRvZXMgbm90IHN1cHBvcnQgY29sb3JcbiIpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhcnRfY29sb3IoKTsgICAgICAgICAgICAgICAgICAvKiBTdGFydCBjb2xvciAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKworICAgICAgICBhdHRyb24oQ09MT1JfUEFJUigxKSk7CisgICAgICAgIHByaW50X2luX21pZGRsZShzdGRzY3IsIExJTkVTIC8gMiwgMCwgMCwgIlZpb2xhICEhISBJbiBjb2xvciAuLi4iKTsKKyAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDEpKTsKKyAgICAgICAgZ2V0Y2goKTsKKyAgICAgICAgZW5kd2luKCk7Cit9Cit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcpCit7ICAgICAgIGludCBsZW5ndGgsIHgsIHk7CisgICAgICAgIGZsb2F0IHRlbXA7CisKKyAgICAgICAgaWYod2luID09IE5VTEwpCisgICAgICAgICAgICAgICAgd2luID0gc3Rkc2NyOworICAgICAgICBnZXR5eCh3aW4sIHksIHgpOworICAgICAgICBpZihzdGFydHggIT0gMCkKKyAgICAgICAgICAgICAgICB4ID0gc3RhcnR4OworICAgICAgICBpZihzdGFydHkgIT0gMCkKKyAgICAgICAgICAgICAgICB5ID0gc3RhcnR5OworICAgICAgICBpZih3aWR0aCA9PSAwKQorICAgICAgICAgICAgICAgIHdpZHRoID0gODA7CisKKyAgICAgICAgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgIHRlbXAgPSAod2lkdGggLSBsZW5ndGgpLyAyOworICAgICAgICB4ID0gc3RhcnR4ICsgKGludCl0ZW1wOworICAgICAgICBtdndwcmludHcod2luLCB5LCB4LCAiJXMiLCBzdHJpbmcpOworICAgICAgICByZWZyZXNoKCk7Cit9Cis8L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5BcyB5b3UgY2FuIHNlZSwgdG8gc3RhcnQgdXNpbmcgY29sb3IsIHlvdSBzaG91bGQgZmlyc3QgY2FsbCB0aGUKK2Z1bmN0aW9uIDx2YXIgY2xhc3M9IkxJVEVSQUwiPnN0YXJ0X2NvbG9yKCk8L3Zhcj4uIEFmdGVyIHRoYXQsIHlvdQorY2FuIHVzZSBjb2xvciBjYXBhYmlsaXRpZXMgb2YgeW91ciB0ZXJtaW5hbHMgdXNpbmcgdmFyaW91cworZnVuY3Rpb25zLiBUbyBmaW5kIG91dCB3aGV0aGVyIGEgdGVybWluYWwgaGFzIGNvbG9yIGNhcGFiaWxpdGllcyBvcgorbm90LCB5b3UgY2FuIHVzZSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5oYXNfY29sb3JzKCk8L3Zhcj4gZnVuY3Rpb24sCit3aGljaCByZXR1cm5zIEZBTFNFIGlmIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IGNvbG9yLjwvcD4KKzxwPkN1cnNlcyBpbml0aWFsaXplcyBhbGwgdGhlIGNvbG9ycyBzdXBwb3J0ZWQgYnkgdGVybWluYWwgd2hlbgorc3RhcnRfY29sb3IoKSBpcyBjYWxsZWQuIFRoZXNlIGNhbiBiZSBhY2Nlc3NlZCBieSB0aGUgZGVmaW5lCitjb25zdGFudHMgbGlrZSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5DT0xPUl9CTEFDSzwvdmFyPiBldGMuIE5vdyB0bworYWN0dWFsbHkgc3RhcnQgdXNpbmcgY29sb3JzLCB5b3UgaGF2ZSB0byBkZWZpbmUgcGFpcnMuIENvbG9ycyBhcmUKK2Fsd2F5cyB1c2VkIGluIHBhaXJzLiBUaGF0IG1lYW5zIHlvdSBoYXZlIHRvIHVzZSB0aGUgZnVuY3Rpb24KKzx2YXIgY2xhc3M9IkxJVEVSQUwiPmluaXRfcGFpcigpPC92YXI+IHRvIGRlZmluZSB0aGUgZm9yZWdyb3VuZCBhbmQKK2JhY2tncm91bmQgZm9yIHRoZSBwYWlyIG51bWJlciB5b3UgZ2l2ZS4gQWZ0ZXIgdGhhdCB0aGF0IHBhaXIKK251bWJlciBjYW4gYmUgdXNlZCBhcyBhIG5vcm1hbCBhdHRyaWJ1dGUgd2l0aCA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPkNPTE9SX1BBSVIoKTwvdmFyPmZ1bmN0aW9uLiBUaGlzIG1heSBzZWVtIHRvIGJlCitjdW1iZXJzb21lIGF0IGZpcnN0LiBCdXQgdGhpcyBlbGVnYW50IHNvbHV0aW9uIGFsbG93cyB1cyB0byBtYW5hZ2UKK2NvbG9yIHBhaXJzIHZlcnkgZWFzaWx5LiBUbyBhcHByZWNpYXRlIGl0LCB5b3UgaGF2ZSB0byBsb29rIGludG8KK3RoZSB0aGUgc291cmNlIGNvZGUgb2YgImRpYWxvZyIsIGEgdXRpbGl0eSBmb3IgZGlzcGxheWluZyBkaWFsb2cKK2JveGVzIGZyb20gc2hlbGwgc2NyaXB0cy4gVGhlIGRldmVsb3BlcnMgaGF2ZSBkZWZpbmVkIGZvcmVncm91bmQKK2FuZCBiYWNrZ3JvdW5kIGNvbWJpbmF0aW9ucyBmb3IgYWxsIHRoZSBjb2xvcnMgdGhleSBtaWdodCBuZWVkIGFuZAoraW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZy4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gc2V0CithdHRyaWJ1dGVzIGp1c3QgYnkgYWNjZXNzaW5nIGEgcGFpciB3aGljaCB3ZSBhbHJlYWR5IGhhdmUgZGVmaW5lZAorYXMgYSBjb25zdGFudC48L3A+Cis8cD5UaGUgZm9sbG93aW5nIGNvbG9ycyBhcmUgZGVmaW5lZCBpbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmN1cnNlcy5oPC92YXI+LiBZb3UgY2FuIHVzZSB0aGVzZSBhcyBwYXJhbWV0ZXJzIGZvcgordmFyaW91cyBjb2xvciBmdW5jdGlvbnMuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICAgICAgQ09MT1JfQkxBQ0sgICAwCisgICAgICAgIENPTE9SX1JFRCAgICAgMQorICAgICAgICBDT0xPUl9HUkVFTiAgIDIKKyAgICAgICAgQ09MT1JfWUVMTE9XICAzCisgICAgICAgIENPTE9SX0JMVUUgICAgNAorICAgICAgICBDT0xPUl9NQUdFTlRBIDUKKyAgICAgICAgQ09MT1JfQ1lBTiAgICA2CisgICAgICAgIENPTE9SX1dISVRFICAgNzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQ0hBTkdFQ09MT1JERUZTIiBpZD0KKyJDSEFOR0VDT0xPUkRFRlMiPjEwLjIuIENoYW5naW5nIENvbG9yIERlZmluaXRpb25zPC9hPjwvaDM+Cis8cD5UaGUgZnVuY3Rpb24gPHZhciBjbGFzcz0iTElURVJBTCI+aW5pdF9jb2xvcigpPC92YXI+Y2FuIGJlIHVzZWQKK3RvIGNoYW5nZSB0aGUgcmdiIHZhbHVlcyBmb3IgdGhlIGNvbG9ycyBkZWZpbmVkIGJ5IGN1cnNlcworaW5pdGlhbGx5LiBTYXkgeW91IHdhbnRlZCB0byBsaWdodGVuIHRoZSBpbnRlbnNpdHkgb2YgcmVkIGNvbG9yIGJ5CithIG1pbnVzY3VsZS4gVGhlbiB5b3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIGFzPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBpbml0X2NvbG9yKENPTE9SX1JFRCwgNzAwLCAwLCAwKTsKKyAgICAvKiBwYXJhbSAxICAgICA6IGNvbG9yIG5hbWUKKyAgICAgKiBwYXJhbSAyLCAzLCA0IDogcmdiIGNvbnRlbnQgbWluID0gMCwgbWF4ID0gMTAwMCAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPklmIHlvdXIgdGVybWluYWwgY2Fubm90IGNoYW5nZSB0aGUgY29sb3IgZGVmaW5pdGlvbnMsIHRoZQorZnVuY3Rpb24gcmV0dXJucyBFUlIuIFRoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmNhbl9jaGFuZ2VfY29sb3IoKTwvdmFyPiBjYW4gYmUgdXNlZCB0byBmaW5kIG91dCB3aGV0aGVyCit0aGUgdGVybWluYWwgaGFzIHRoZSBjYXBhYmlsaXR5IG9mIGNoYW5naW5nIGNvbG9yIGNvbnRlbnQgb3Igbm90LgorVGhlIHJnYiBjb250ZW50IGlzIHNjYWxlZCBmcm9tIDAgdG8gMTAwMC4gSW5pdGlhbGx5IFJFRCBjb2xvciBpcworZGVmaW5lZCB3aXRoIGNvbnRlbnQgMTAwMChyKSwgMChnKSwgMChiKS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNPTE9SQ09OVEVOVCIgaWQ9IkNPTE9SQ09OVEVOVCI+MTAuMy4KK0NvbG9yIENvbnRlbnQ8L2E+PC9oMz4KKzxwPlRoZSBmdW5jdGlvbnMgPHZhciBjbGFzcz0iTElURVJBTCI+Y29sb3JfY29udGVudCgpPC92YXI+IGFuZAorPHZhciBjbGFzcz0iTElURVJBTCI+cGFpcl9jb250ZW50KCk8L3Zhcj4gY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUKK2NvbG9yIGNvbnRlbnQgYW5kIGZvcmVncm91bmQsIGJhY2tncm91bmQgY29tYmluYXRpb24gZm9yIHRoZQorcGFpci48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iS0VZUyIgaWQ9IktFWVMiPjExLiBJbnRlcmZhY2luZyB3aXRoIHRoZQora2V5IGJvYXJkPC9hPjwvaDI+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJLRVlTQkFTSUNTIiBpZD0iS0VZU0JBU0lDUyI+MTEuMS4gVGhlCitCYXNpY3M8L2E+PC9oMz4KKzxwPk5vIEdVSSBpcyBjb21wbGV0ZSB3aXRob3V0IGEgc3Ryb25nIHVzZXIgaW50ZXJmYWNlIGFuZCB0bworaW50ZXJhY3Qgd2l0aCB0aGUgdXNlciwgYSBjdXJzZXMgcHJvZ3JhbSBzaG91bGQgYmUgc2Vuc2l0aXZlIHRvIGtleQorcHJlc3NlcyBvciB0aGUgbW91c2UgYWN0aW9ucyBkb25lIGJ5IHRoZSB1c2VyLiBMZXQncyBkZWFsIHdpdGggdGhlCitrZXlzIGZpcnN0LjwvcD4KKzxwPkFzIHlvdSBoYXZlIHNlZW4gaW4gYWxtb3N0IGFsbCBvZiB0aGUgYWJvdmUgZXhhbXBsZXMsIGl0J3MgdmVyeQorZWFzeSB0byBnZXQga2V5IGlucHV0IGZyb20gdGhlIHVzZXIuIEEgc2ltcGxlIHdheSBvZiBnZXR0aW5nIGtleQorcHJlc3NlcyBpcyB0byB1c2UgPHZhciBjbGFzcz0iTElURVJBTCI+Z2V0Y2goKTwvdmFyPiBmdW5jdGlvbi4gVGhlCitjYnJlYWsgbW9kZSBzaG91bGQgYmUgZW5hYmxlZCB0byByZWFkIGtleXMgd2hlbiB5b3UgYXJlIGludGVyZXN0ZWQKK2luIHJlYWRpbmcgaW5kaXZpZHVhbCBrZXkgaGl0cyByYXRoZXIgdGhhbiBjb21wbGV0ZSBsaW5lcyBvZiB0ZXh0Cisod2hpY2ggdXN1YWxseSBlbmQgd2l0aCBhIGNhcnJpYWdlIHJldHVybikuIGtleXBhZCBzaG91bGQgYmUKK2VuYWJsZWQgdG8gZ2V0IHRoZSBGdW5jdGlvbnMga2V5cywgYXJyb3cga2V5cyBldGMuIFNlZSB0aGUKK2luaXRpYWxpemF0aW9uIHNlY3Rpb24gZm9yIGRldGFpbHMuPC9wPgorPHA+PHZhciBjbGFzcz0iTElURVJBTCI+Z2V0Y2goKTwvdmFyPiByZXR1cm5zIGFuIGludGVnZXIKK2NvcnJlc3BvbmRpbmcgdG8gdGhlIGtleSBwcmVzc2VkLiBJZiBpdCBpcyBhIG5vcm1hbCBjaGFyYWN0ZXIsIHRoZQoraW50ZWdlciB2YWx1ZSB3aWxsIGJlIGVxdWl2YWxlbnQgdG8gdGhlIGNoYXJhY3Rlci4gT3RoZXJ3aXNlIGl0CityZXR1cm5zIGEgbnVtYmVyIHdoaWNoIGNhbiBiZSBtYXRjaGVkIHdpdGggdGhlIGNvbnN0YW50cyBkZWZpbmVkIGluCis8dmFyIGNsYXNzPSJMSVRFUkFMIj5jdXJzZXMuaDwvdmFyPi4gRm9yIGV4YW1wbGUgaWYgdGhlIHVzZXIKK3ByZXNzZXMgRjEsIHRoZSBpbnRlZ2VyIHJldHVybmVkIGlzIDI2NS4gVGhpcyBjYW4gYmUgY2hlY2tlZCB1c2luZwordGhlIG1hY3JvIEtFWV9GKCkgZGVmaW5lZCBpbiBjdXJzZXMuaC4gVGhpcyBtYWtlcyByZWFkaW5nIGtleXMKK3BvcnRhYmxlIGFuZCBlYXN5IHRvIG1hbmFnZS48L3A+Cis8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IGNhbGwgZ2V0Y2goKSBsaWtlIHRoaXM8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIGludCBjaDsKKworICAgIGNoID0gZ2V0Y2goKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5nZXRjaCgpIHdpbGwgd2FpdCBmb3IgdGhlIHVzZXIgdG8gcHJlc3MgYSBrZXksICh1bmxlc3MgeW91CitzcGVjaWZpZWQgYSB0aW1lb3V0KSBhbmQgd2hlbiB1c2VyIHByZXNzZXMgYSBrZXksIHRoZSBjb3JyZXNwb25kaW5nCitpbnRlZ2VyIGlzIHJldHVybmVkLiBUaGVuIHlvdSBjYW4gY2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIHdpdGggdGhlCitjb25zdGFudHMgZGVmaW5lZCBpbiBjdXJzZXMuaCB0byBtYXRjaCBhZ2FpbnN0IHRoZSBrZXlzIHlvdQord2FudC48L3A+Cis8cD5UaGUgZm9sbG93aW5nIGNvZGUgcGllY2Ugd2lsbCBkbyB0aGF0IGpvYi48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIGlmKGNoID09IEtFWV9MRUZUKQorICAgICAgICBwcmludHcoIkxlZnQgYXJyb3cgaXMgcHJlc3NlZFxuIik7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+TGV0J3Mgd3JpdGUgYSBzbWFsbCBwcm9ncmFtIHdoaWNoIGNyZWF0ZXMgYSBtZW51IHdoaWNoIGNhbiBiZQorbmF2aWdhdGVkIGJ5IHVwIGFuZCBkb3duIGFycm93cy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlNJTVBMRUtFWUVYIiBpZD0iU0lNUExFS0VZRVgiPjExLjIuIEEKK1NpbXBsZSBLZXkgVXNhZ2UgZXhhbXBsZTwvYT48L2gzPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iQlNJS0UiIGlkPSJCU0lLRSI+PC9hPgorPHA+PGI+RXhhbXBsZSAxMC4gQSBTaW1wbGUgS2V5IFVzYWdlIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKKyNkZWZpbmUgV0lEVEggMzAKKyNkZWZpbmUgSEVJR0hUIDEwIAorCitpbnQgc3RhcnR4ID0gMDsKK2ludCBzdGFydHkgPSAwOworCitjaGFyICpjaG9pY2VzW10gPSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0IiwKKyAgICAgICAgICAgICAgICAgIH07CitpbnQgbl9jaG9pY2VzID0gc2l6ZW9mKGNob2ljZXMpIC8gc2l6ZW9mKGNoYXIgKik7Cit2b2lkIHByaW50X21lbnUoV0lORE9XICptZW51X3dpbiwgaW50IGhpZ2hsaWdodCk7CisKK2ludCBtYWluKCkKK3sgICAgICAgV0lORE9XICptZW51X3dpbjsKKyAgICAgICAgaW50IGhpZ2hsaWdodCA9IDE7CisgICAgICAgIGludCBjaG9pY2UgPSAwOworICAgICAgICBpbnQgYzsKKworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBjYnJlYWsoKTsgICAgICAgLyogTGluZSBidWZmZXJpbmcgZGlzYWJsZWQuIHBhc3Mgb24gZXZlcnl0aGluZyAqLworICAgICAgICBzdGFydHggPSAoODAgLSBXSURUSCkgLyAyOworICAgICAgICBzdGFydHkgPSAoMjQgLSBIRUlHSFQpIC8gMjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbWVudV93aW4gPSBuZXd3aW4oSEVJR0hULCBXSURUSCwgc3RhcnR5LCBzdGFydHgpOworICAgICAgICBrZXlwYWQobWVudV93aW4sIFRSVUUpOworICAgICAgICBtdnByaW50dygwLCAwLCAiVXNlIGFycm93IGtleXMgdG8gZ28gdXAgYW5kIGRvd24sIFByZXNzIGVudGVyIHRvIHNlbGVjdCBhIGNob2ljZSIpOworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIHByaW50X21lbnUobWVudV93aW4sIGhpZ2hsaWdodCk7CisgICAgICAgIHdoaWxlKDEpCisgICAgICAgIHsgICAgICAgYyA9IHdnZXRjaChtZW51X3dpbik7CisgICAgICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGlnaGxpZ2h0ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gbl9jaG9pY2VzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1oaWdobGlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGlnaGxpZ2h0ID09IG5fY2hvaWNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraGlnaGxpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZSA9IGhpZ2hsaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdnByaW50dygyNCwgMCwgIkNoYXJjdGVyIHByZXNzZWQgaXMgPSAlM2QgSG9wZWZ1bGx5IGl0IGNhbiBiZSBwcmludGVkIGFzICclYyciLCBjLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRfbWVudShtZW51X3dpbiwgaGlnaGxpZ2h0KTsKKyAgICAgICAgICAgICAgICBpZihjaG9pY2UgIT0gMCkgLyogVXNlciBkaWQgYSBjaG9pY2UgY29tZSBvdXQgb2YgdGhlIGluZmluaXRlIGxvb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgIAorICAgICAgICBtdnByaW50dygyMywgMCwgIllvdSBjaG9zZSBjaG9pY2UgJWQgd2l0aCBjaG9pY2Ugc3RyaW5nICVzXG4iLCBjaG9pY2UsIGNob2ljZXNbY2hvaWNlIC0gMV0pOworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIGVuZHdpbigpOworICAgICAgICByZXR1cm4gMDsKK30KKworCit2b2lkIHByaW50X21lbnUoV0lORE9XICptZW51X3dpbiwgaW50IGhpZ2hsaWdodCkKK3sKKyAgICAgICAgaW50IHgsIHksIGk7ICAgIAorCisgICAgICAgIHggPSAyOworICAgICAgICB5ID0gMjsKKyAgICAgICAgYm94KG1lbnVfd2luLCAwLCAwKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgIHsgICAgICAgaWYoaGlnaGxpZ2h0ID09IGkgKyAxKSAvKiBIaWdoIGxpZ2h0IHRoZSBwcmVzZW50IGNob2ljZSAqLworICAgICAgICAgICAgICAgIHsgICAgICAgd2F0dHJvbihtZW51X3dpbiwgQV9SRVZFUlNFKTsgCisgICAgICAgICAgICAgICAgICAgICAgICBtdndwcmludHcobWVudV93aW4sIHksIHgsICIlcyIsIGNob2ljZXNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgd2F0dHJvZmYobWVudV93aW4sIEFfUkVWRVJTRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG12d3ByaW50dyhtZW51X3dpbiwgeSwgeCwgIiVzIiwgY2hvaWNlc1tpXSk7CisgICAgICAgICAgICAgICAgKyt5OworICAgICAgICB9CisgICAgICAgIHdyZWZyZXNoKG1lbnVfd2luKTsKK30KKzwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJNT1VTRSIgaWQ9Ik1PVVNFIj4xMi4gSW50ZXJmYWNpbmcgd2l0aAordGhlIG1vdXNlPC9hPjwvaDI+Cis8cD5Ob3cgdGhhdCB5b3UgaGF2ZSBzZWVuIGhvdyB0byBnZXQga2V5cywgbGV0cyBkbyB0aGUgc2FtZSB0aGluZworZnJvbSBtb3VzZS4gVXN1YWxseSBlYWNoIFVJIGFsbG93cyB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoIGJvdGgKK2tleWJvYXJkIGFuZCBtb3VzZS48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJNT1VTRUJBU0lDUyIgaWQ9Ik1PVVNFQkFTSUNTIj4xMi4xLiBUaGUKK0Jhc2ljczwvYT48L2gzPgorPHA+QmVmb3JlIHlvdSBkbyBhbnkgdGhpbmcgZWxzZSwgdGhlIGV2ZW50cyB5b3Ugd2FudCB0byByZWNlaXZlCitoYXZlIHRvIGJlIGVuYWJsZWQgd2l0aCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5tb3VzZW1hc2soKTwvdmFyPi48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj4gICAgbW91c2VtYXNrKCAgbW1hc2tfdCBuZXdtYXNrLCAgICAvKiBUaGUgZXZlbnRzIHlvdSB3YW50IHRvIGxpc3RlbiB0byAqLworICAgICAgICAgICAgICAgIG1tYXNrX3QgKm9sZG1hc2spICAgIC8qIFRoZSBvbGQgZXZlbnRzIG1hc2sgICAgICAgICAgICAgICAgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGUgZmlyc3QgcGFyYW1ldGVyIHRvIGFib3ZlIGZ1bmN0aW9uIGlzIGEgYml0IG1hc2sgb2YgZXZlbnRzCit5b3Ugd291bGQgbGlrZSB0byBsaXN0ZW4uIEJ5IGRlZmF1bHQsIGFsbCB0aGUgZXZlbnRzIGFyZSB0dXJuZWQKK29mZi4gVGhlIGJpdCBtYXNrIDx2YXIgY2xhc3M9IkxJVEVSQUwiPkFMTF9NT1VTRV9FVkVOVFM8L3Zhcj4gY2FuCitiZSB1c2VkIHRvIGdldCBhbGwgdGhlIGV2ZW50cy48L3A+Cis8cD5UaGUgZm9sbG93aW5nIGFyZSBhbGwgdGhlIGV2ZW50IG1hc2tzOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgTmFtZSAgICAgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQlVUVE9OMV9QUkVTU0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiAxIGRvd24KKyAgICAgICBCVVRUT04xX1JFTEVBU0VEICAgICAgICAgbW91c2UgYnV0dG9uIDEgdXAKKyAgICAgICBCVVRUT04xX0NMSUNLRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDEgY2xpY2tlZAorICAgICAgIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMSBkb3VibGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gMSB0cmlwbGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjJfUFJFU1NFRCAgICAgICAgICBtb3VzZSBidXR0b24gMiBkb3duCisgICAgICAgQlVUVE9OMl9SRUxFQVNFRCAgICAgICAgIG1vdXNlIGJ1dHRvbiAyIHVwCisgICAgICAgQlVUVE9OMl9DTElDS0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiAyIGNsaWNrZWQKKyAgICAgICBCVVRUT04yX0RPVUJMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDIgZG91YmxlIGNsaWNrZWQKKyAgICAgICBCVVRUT04yX1RSSVBMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDIgdHJpcGxlIGNsaWNrZWQKKyAgICAgICBCVVRUT04zX1BSRVNTRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDMgZG93bgorICAgICAgIEJVVFRPTjNfUkVMRUFTRUQgICAgICAgICBtb3VzZSBidXR0b24gMyB1cAorICAgICAgIEJVVFRPTjNfQ0xJQ0tFRCAgICAgICAgICBtb3VzZSBidXR0b24gMyBjbGlja2VkCisgICAgICAgQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAzIGRvdWJsZSBjbGlja2VkCisgICAgICAgQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAzIHRyaXBsZSBjbGlja2VkCisgICAgICAgQlVUVE9ONF9QUkVTU0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiA0IGRvd24KKyAgICAgICBCVVRUT040X1JFTEVBU0VEICAgICAgICAgbW91c2UgYnV0dG9uIDQgdXAKKyAgICAgICBCVVRUT040X0NMSUNLRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDQgY2xpY2tlZAorICAgICAgIEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gNCBkb3VibGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjRfVFJJUExFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gNCB0cmlwbGUgY2xpY2tlZAorICAgICAgIEJVVFRPTl9TSElGVCAgICAgICAgICAgICBzaGlmdCB3YXMgZG93biBkdXJpbmcgYnV0dG9uIHN0YXRlIGNoYW5nZQorICAgICAgIEJVVFRPTl9DVFJMICAgICAgICAgICAgICBjb250cm9sIHdhcyBkb3duIGR1cmluZyBidXR0b24gc3RhdGUgY2hhbmdlCisgICAgICAgQlVUVE9OX0FMVCAgICAgICAgICAgICAgIGFsdCB3YXMgZG93biBkdXJpbmcgYnV0dG9uIHN0YXRlIGNoYW5nZQorICAgICAgIEFMTF9NT1VTRV9FVkVOVFMgICAgICAgICByZXBvcnQgYWxsIGJ1dHRvbiBzdGF0ZSBjaGFuZ2VzCisgICAgICAgUkVQT1JUX01PVVNFX1BPU0lUSU9OICAgIHJlcG9ydCBtb3VzZSBtb3ZlbWVudDwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iR0VUVElOR0VWRU5UUyIgaWQ9IkdFVFRJTkdFVkVOVFMiPjEyLjIuCitHZXR0aW5nIHRoZSBldmVudHM8L2E+PC9oMz4KKzxwPk9uY2UgYSBjbGFzcyBvZiBtb3VzZSBldmVudHMgaGF2ZSBiZWVuIGVuYWJsZWQsIGdldGNoKCkgY2xhc3Mgb2YKK2Z1bmN0aW9ucyByZXR1cm4gS0VZX01PVVNFIGV2ZXJ5IHRpbWUgc29tZSBtb3VzZSBldmVudCBoYXBwZW5zLgorVGhlbiB0aGUgbW91c2UgZXZlbnQgY2FuIGJlIHJldHJpZXZlZCB3aXRoIDx2YXIgY2xhc3M9CisiTElURVJBTCI+Z2V0bW91c2UoKTwvdmFyPi48L3A+Cis8cD5UaGUgY29kZSBhcHByb3hpbWF0ZWx5IGxvb2tzIGxpa2UgdGhpczo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgIE1FVkVOVCBldmVudDsKKworICAgIGNoID0gZ2V0Y2goKTsKKyAgICBpZihjaCA9PSBLRVlfTU9VU0UpCisgICAgICAgIGlmKGdldG1vdXNlKCZhbXA7ZXZlbnQpID09IE9LKQorICAgICAgICAgICAgLiAgICAvKiBEbyBzb21lIHRoaW5nIHdpdGggdGhlIGV2ZW50ICovCisgICAgICAgICAgICAuCisgICAgICAgICAgICAuPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+Z2V0bW91c2UoKSByZXR1cm5zIHRoZSBldmVudCBpbnRvIHRoZSBwb2ludGVyIGdpdmVuIHRvIGl0LiBJdCdzCithIHN0cnVjdHVyZSB3aGljaCBjb250YWluczwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgdHlwZWRlZiBzdHJ1Y3QKKyAgICB7CisgICAgICAgIHNob3J0IGlkOyAgICAgICAgIC8qIElEIHRvIGRpc3Rpbmd1aXNoIG11bHRpcGxlIGRldmljZXMgKi8KKyAgICAgICAgaW50IHgsIHksIHo7ICAgICAgLyogZXZlbnQgY29vcmRpbmF0ZXMgKi8KKyAgICAgICAgbW1hc2tfdCBic3RhdGU7ICAgLyogYnV0dG9uIHN0YXRlIGJpdHMgKi8KKyAgICB9ICAgIDwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSA8dmFyIGNsYXNzPSJMSVRFUkFMIj5ic3RhdGU8L3Zhcj4gaXMgdGhlIG1haW4gdmFyaWFibGUgd2UKK2FyZSBpbnRlcmVzdGVkIGluLiBJdCB0ZWxscyB0aGUgYnV0dG9uIHN0YXRlIG9mIHRoZSBtb3VzZS48L3A+Cis8cD5UaGVuIHdpdGggYSBjb2RlIHNuaXBwZXQgbGlrZSB0aGUgZm9sbG93aW5nLCB3ZSBjYW4gZmluZCBvdXQKK3doYXQgaGFwcGVuZWQuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBpZihldmVudC5ic3RhdGUgJmFtcDsgQlVUVE9OMV9QUkVTU0VEKQorICAgICAgICBwcmludHcoIkxlZnQgQnV0dG9uIFByZXNzZWQiKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1PVVNFVE9HRVRIRVIiIGlkPSJNT1VTRVRPR0VUSEVSIj4xMi4zLgorUHV0dGluZyBpdCBhbGwgVG9nZXRoZXI8L2E+PC9oMz4KKzxwPlRoYXQncyBwcmV0dHkgbXVjaCBpbnRlcmZhY2luZyB3aXRoIG1vdXNlLiBMZXQncyBjcmVhdGUgdGhlIHNhbWUKK21lbnUgYW5kIGVuYWJsZSBtb3VzZSBpbnRlcmFjdGlvbi4gVG8gbWFrZSB0aGluZ3Mgc2ltcGxlciwga2V5CitoYW5kbGluZyBpcyByZW1vdmVkLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJNT01FIiBpZD0iQk1PTUUiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMTEuIEFjY2VzcyB0aGUgbWVudSB3aXRoIG1vdXNlICEhITwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKKyNkZWZpbmUgV0lEVEggMzAKKyNkZWZpbmUgSEVJR0hUIDEwIAorCitpbnQgc3RhcnR4ID0gMDsKK2ludCBzdGFydHkgPSAwOworCitjaGFyICpjaG9pY2VzW10gPSB7ICAgICAiQ2hvaWNlIDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4aXQiLAorICAgICAgICAgICAgICAgICAgfTsKKworaW50IG5fY2hvaWNlcyA9IHNpemVvZihjaG9pY2VzKSAvIHNpemVvZihjaGFyICopOworCit2b2lkIHByaW50X21lbnUoV0lORE9XICptZW51X3dpbiwgaW50IGhpZ2hsaWdodCk7Cit2b2lkIHJlcG9ydF9jaG9pY2UoaW50IG1vdXNlX3gsIGludCBtb3VzZV95LCBpbnQgKnBfY2hvaWNlKTsKKworaW50IG1haW4oKQoreyAgICAgICBpbnQgYywgY2hvaWNlID0gMDsKKyAgICAgICAgV0lORE9XICptZW51X3dpbjsKKyAgICAgICAgTUVWRU5UIGV2ZW50OworCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGNicmVhaygpOyAgICAgICAvL0xpbmUgYnVmZmVyaW5nIGRpc2FibGVkLiBwYXNzIG9uIGV2ZXJ5dGhpbmcKKworICAgICAgICAvKiBUcnkgdG8gcHV0IHRoZSB3aW5kb3cgaW4gdGhlIG1pZGRsZSBvZiBzY3JlZW4gKi8KKyAgICAgICAgc3RhcnR4ID0gKDgwIC0gV0lEVEgpIC8gMjsKKyAgICAgICAgc3RhcnR5ID0gKDI0IC0gSEVJR0hUKSAvIDI7CisgICAgICAgIAorICAgICAgICBhdHRyb24oQV9SRVZFUlNFKTsKKyAgICAgICAgbXZwcmludHcoMjMsIDEsICJDbGljayBvbiBFeGl0IHRvIHF1aXQgKFdvcmtzIGJlc3QgaW4gYSB2aXJ0dWFsIGNvbnNvbGUpIik7CisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgYXR0cm9mZihBX1JFVkVSU0UpOworCisgICAgICAgIC8qIFByaW50IHRoZSBtZW51IGZvciB0aGUgZmlyc3QgdGltZSAqLworICAgICAgICBtZW51X3dpbiA9IG5ld3dpbihIRUlHSFQsIFdJRFRILCBzdGFydHksIHN0YXJ0eCk7CisgICAgICAgIHByaW50X21lbnUobWVudV93aW4sIDEpOworICAgICAgICAvKiBHZXQgYWxsIHRoZSBtb3VzZSBldmVudHMgKi8KKyAgICAgICAgbW91c2VtYXNrKEFMTF9NT1VTRV9FVkVOVFMsIE5VTEwpOworICAgICAgICAKKyAgICAgICAgd2hpbGUoMSkKKyAgICAgICAgeyAgICAgICBjID0gd2dldGNoKG1lbnVfd2luKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgS0VZX01PVVNFOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYoZ2V0bW91c2UoJmFtcDtldmVudCkgPT0gT0spCisgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIC8qIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGxlZnQgbW91c2UgYnV0dG9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGV2ZW50LmJzdGF0ZSAmYW1wOyBCVVRUT04xX1BSRVNTRUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgcmVwb3J0X2Nob2ljZShldmVudC54ICsgMSwgZXZlbnQueSArIDEsICZhbXA7Y2hvaWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaG9pY2UgPT0gLTEpIC8vRXhpdCBjaG9zZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12cHJpbnR3KDIyLCAxLCAiQ2hvaWNlIG1hZGUgaXMgOiAlZCBTdHJpbmcgQ2hvc2VuIGlzIFwiJTEwc1wiIiwgY2hvaWNlLCBjaG9pY2VzW2Nob2ljZSAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9tZW51KG1lbnVfd2luLCBjaG9pY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAgICAgICAgCitlbmQ6CisgICAgICAgIGVuZHdpbigpOworICAgICAgICByZXR1cm4gMDsKK30KKworCit2b2lkIHByaW50X21lbnUoV0lORE9XICptZW51X3dpbiwgaW50IGhpZ2hsaWdodCkKK3sKKyAgICAgICAgaW50IHgsIHksIGk7ICAgIAorCisgICAgICAgIHggPSAyOworICAgICAgICB5ID0gMjsKKyAgICAgICAgYm94KG1lbnVfd2luLCAwLCAwKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgIHsgICAgICAgaWYoaGlnaGxpZ2h0ID09IGkgKyAxKQorICAgICAgICAgICAgICAgIHsgICAgICAgd2F0dHJvbihtZW51X3dpbiwgQV9SRVZFUlNFKTsgCisgICAgICAgICAgICAgICAgICAgICAgICBtdndwcmludHcobWVudV93aW4sIHksIHgsICIlcyIsIGNob2ljZXNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgd2F0dHJvZmYobWVudV93aW4sIEFfUkVWRVJTRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG12d3ByaW50dyhtZW51X3dpbiwgeSwgeCwgIiVzIiwgY2hvaWNlc1tpXSk7CisgICAgICAgICAgICAgICAgKyt5OworICAgICAgICB9CisgICAgICAgIHdyZWZyZXNoKG1lbnVfd2luKTsKK30KKworLyogUmVwb3J0IHRoZSBjaG9pY2UgYWNjb3JkaW5nIHRvIG1vdXNlIHBvc2l0aW9uICovCit2b2lkIHJlcG9ydF9jaG9pY2UoaW50IG1vdXNlX3gsIGludCBtb3VzZV95LCBpbnQgKnBfY2hvaWNlKQoreyAgICAgICBpbnQgaSxqLCBjaG9pY2U7CisKKyAgICAgICAgaSA9IHN0YXJ0eCArIDI7CisgICAgICAgIGogPSBzdGFydHkgKyAzOworICAgICAgICAKKyAgICAgICAgZm9yKGNob2ljZSA9IDA7IGNob2ljZSAmbHQ7IG5fY2hvaWNlczsgKytjaG9pY2UpCisgICAgICAgICAgICAgICAgaWYobW91c2VfeSA9PSBqICsgY2hvaWNlICZhbXA7JmFtcDsgbW91c2VfeCAmZ3Q7PSBpICZhbXA7JmFtcDsgbW91c2VfeCAmbHQ7PSBpICsgc3RybGVuKGNob2ljZXNbY2hvaWNlXSkpCisgICAgICAgICAgICAgICAgeyAgICAgICBpZihjaG9pY2UgPT0gbl9jaG9pY2VzIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBfY2hvaWNlID0gLTE7ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwX2Nob2ljZSA9IGNob2ljZSArIDE7IAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUlTQ01PVVNFRlVOQ1MiIGlkPQorIk1JU0NNT1VTRUZVTkNTIj4xMi40LiBNaXNjZWxsYW5lb3VzIEZ1bmN0aW9uczwvYT48L2gzPgorPHA+VGhlIGZ1bmN0aW9ucyBtb3VzZV90cmFmbygpIGFuZCB3bW91c2VfdHJhZm8oKSBjYW4gYmUgdXNlZCB0bworY29udmVydCB0byBtb3VzZSBjby1vcmRpbmF0ZXMgdG8gc2NyZWVuIHJlbGF0aXZlIGNvLW9yZGluYXRlcy4gU2VlCitjdXJzX21vdXNlKDNYKSBtYW4gcGFnZSBmb3IgZGV0YWlscy48L3A+Cis8cD5UaGUgbW91c2VpbnRlcnZhbCBmdW5jdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHRpbWUgKGluIHRob3VzYW5kcworb2YgYSBzZWNvbmQpIHRoYXQgY2FuIGVsYXBzZSBiZXR3ZWVuIHByZXNzIGFuZCByZWxlYXNlIGV2ZW50cyBpbgorb3JkZXIgZm9yIHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBhIGNsaWNrLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKK3RoZSBwcmV2aW91cyBpbnRlcnZhbCB2YWx1ZS4gVGhlIGRlZmF1bHQgaXMgb25lIGZpZnRoIG9mIGEKK3NlY29uZC48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iU0NSRUVOIiBpZD0iU0NSRUVOIj4xMy4gU2NyZWVuCitNYW5pcHVsYXRpb248L2E+PC9oMj4KKzxwPkluIHRoaXMgc2VjdGlvbiwgd2Ugd2lsbCBsb29rIGludG8gc29tZSBmdW5jdGlvbnMsIHdoaWNoIGFsbG93Cit1cyB0byBtYW5hZ2UgdGhlIHNjcmVlbiBlZmZpY2llbnRseSBhbmQgdG8gd3JpdGUgc29tZSBmYW5jeQorcHJvZ3JhbXMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaW4gd3JpdGluZyBnYW1lcy48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJHRVRZWCIgaWQ9IkdFVFlYIj4xMy4xLiBnZXR5eCgpCitmdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPSJMSVRFUkFMIj5nZXR5eCgpPC92YXI+IGNhbiBiZSB1c2VkIHRvCitmaW5kIG91dCB0aGUgcHJlc2VudCBjdXJzb3IgY28tb3JkaW5hdGVzLiBJdCB3aWxsIGZpbGwgdGhlIHZhbHVlcworb2YgeCBhbmQgeSBjby1vcmRpbmF0ZXMgaW4gdGhlIGFyZ3VtZW50cyBnaXZlbiB0byBpdC4gU2luY2UgZ2V0eXgoKQoraXMgYSBtYWNybyB5b3UgZG9uJ3QgaGF2ZSB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZXMuIEl0CitjYW4gYmUgY2FsbGVkIGFzPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICBnZXR5eCh3aW4sIHksIHgpOworICAgIC8qIHdpbjogd2luZG93IHBvaW50ZXIKKyAgICAgKiAgIHksIHg6IHksIHggY28tb3JkaW5hdGVzIHdpbGwgYmUgcHV0IGludG8gdGhpcyB2YXJpYWJsZXMgCisgICAgICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGZ1bmN0aW9uIGdldHBhcnl4KCkgZ2V0cyB0aGUgYmVnaW5uaW5nIGNvLW9yZGluYXRlcyBvZiB0aGUKK3N1YiB3aW5kb3cgcmVsYXRpdmUgdG8gdGhlIG1haW4gd2luZG93LiBUaGlzIGlzIHNvbWUgdGltZXMgdXNlZnVsCit0byB1cGRhdGUgYSBzdWIgd2luZG93LiBXaGVuIGRlc2lnbmluZyBmYW5jeSBzdHVmZiBsaWtlIHdyaXRpbmcKK211bHRpcGxlIG1lbnVzLCBpdCBiZWNvbWVzIGRpZmZpY3VsdCB0byBzdG9yZSB0aGUgbWVudSBwb3NpdGlvbnMsCit0aGVpciBmaXJzdCBvcHRpb24gY28tb3JkaW5hdGVzIGV0Yy4gQSBzaW1wbGUgc29sdXRpb24gdG8gdGhpcworcHJvYmxlbSwgaXMgdG8gY3JlYXRlIG1lbnVzIGluIHN1YiB3aW5kb3dzIGFuZCBsYXRlciBmaW5kIHRoZQorc3RhcnRpbmcgY28tb3JkaW5hdGVzIG9mIHRoZSBtZW51cyBieSB1c2luZyBnZXRwYXJ5eCgpLjwvcD4KKzxwPlRoZSBmdW5jdGlvbnMgZ2V0YmVneXgoKSBhbmQgZ2V0bWF4eXgoKSBzdG9yZSBjdXJyZW50IHdpbmRvdydzCitiZWdpbm5pbmcgYW5kIG1heGltdW0gY28tb3JkaW5hdGVzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBpbgordGhlIHNhbWUgd2F5IGFzIGFib3ZlIGluIG1hbmFnaW5nIHRoZSB3aW5kb3dzIGFuZCBzdWIgd2luZG93cworZWZmZWN0aXZlbHkuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJTQ1JFRU5EVU1QIiBpZD0iU0NSRUVORFVNUCI+MTMuMi4gU2NyZWVuCitEdW1waW5nPC9hPjwvaDM+Cis8cD5XaGlsZSB3cml0aW5nIGdhbWVzLCBzb21lIHRpbWVzIGl0IGJlY29tZXMgbmVjZXNzYXJ5IHRvIHN0b3JlCit0aGUgc3RhdGUgb2YgdGhlIHNjcmVlbiBhbmQgcmVzdG9yZSBpdCBiYWNrIHRvIHRoZSBzYW1lIHN0YXRlLiBUaGUKK2Z1bmN0aW9uIHNjcl9kdW1wKCkgY2FuIGJlIHVzZWQgdG8gZHVtcCB0aGUgc2NyZWVuIGNvbnRlbnRzIHRvIGEKK2ZpbGUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQuIExhdGVyIGl0IGNhbiBiZSByZXN0b3JlZCBieSBzY3JfcmVzdG9yZQorZnVuY3Rpb24uIFRoZXNlIHR3byBzaW1wbGUgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGVmZmVjdGl2ZWx5IHRvCittYWludGFpbiBhIGZhc3QgbW92aW5nIGdhbWUgd2l0aCBjaGFuZ2luZyBzY2VuYXJpb3MuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJXSU5ET1dEVU1QIiBpZD0iV0lORE9XRFVNUCI+MTMuMy4gV2luZG93CitEdW1waW5nPC9hPjwvaDM+Cis8cD5UbyBzdG9yZSBhbmQgcmVzdG9yZSB3aW5kb3dzLCB0aGUgZnVuY3Rpb25zIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cHV0d2luKCk8L3Zhcj4gYW5kIDx2YXIgY2xhc3M9IkxJVEVSQUwiPmdldHdpbigpPC92YXI+CitjYW4gYmUgdXNlZC4gPHZhciBjbGFzcz0iTElURVJBTCI+cHV0d2luKCk8L3Zhcj4gcHV0cyB0aGUgcHJlc2VudAord2luZG93IHN0YXRlIGludG8gYSBmaWxlLCB3aGljaCBjYW4gYmUgbGF0ZXIgcmVzdG9yZWQgYnkKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPmdldHdpbigpPC92YXI+LjwvcD4KKzxwPlRoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPSJMSVRFUkFMIj5jb3B5d2luKCk8L3Zhcj4gY2FuIGJlIHVzZWQgdG8KK2NvcHkgYSB3aW5kb3cgY29tcGxldGVseSBvbnRvIGFub3RoZXIgd2luZG93LiBJdCB0YWtlcyB0aGUgc291cmNlCithbmQgZGVzdGluYXRpb24gd2luZG93cyBhcyBwYXJhbWV0ZXJzIGFuZCBhY2NvcmRpbmcgdG8gdGhlCityZWN0YW5nbGUgc3BlY2lmaWVkLCBpdCBjb3BpZXMgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiBmcm9tIHNvdXJjZQordG8gZGVzdGluYXRpb24gd2luZG93LiBJdCdzIGxhc3QgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyIHRvCitvdmVyd3JpdGUgb3IganVzdCBvdmVybGF5IHRoZSBjb250ZW50cyBvbiB0byB0aGUgZGVzdGluYXRpb24KK3dpbmRvdy4gSWYgdGhpcyBhcmd1bWVudCBpcyB0cnVlLCB0aGVuIHRoZSBjb3B5aW5nIGlzCitub24tZGVzdHJ1Y3RpdmUuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9Ik1JU0MiIGlkPSJNSVNDIj4xNC4gTWlzY2VsbGFuZW91cworZmVhdHVyZXM8L2E+PC9oMj4KKzxwPk5vdyB5b3Uga25vdyBlbm91Z2ggZmVhdHVyZXMgdG8gd3JpdGUgYSBnb29kIGN1cnNlcyBwcm9ncmFtLAord2l0aCBhbGwgYmVsbHMgYW5kIHdoaXN0bGVzLiBUaGVyZSBhcmUgc29tZSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucword2hpY2ggYXJlIHVzZWZ1bCBpbiB2YXJpb3VzIGNhc2VzLiBMZXQncyBnbyBoZWFkbG9uZyBpbnRvIHNvbWUgb2YKK3Rob3NlLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkNVUlNTRVQiIGlkPSJDVVJTU0VUIj4xNC4xLgorY3Vyc19zZXQoKTwvYT48L2gzPgorPHA+VGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBtYWtlIHRoZSBjdXJzb3IgaW52aXNpYmxlLiBUaGUKK3BhcmFtZXRlciB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZTwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgMCA6IGludmlzaWJsZSAgICAgIG9yCisgICAgMSA6IG5vcm1hbCAgICBvcgorICAgIDIgOiB2ZXJ5IHZpc2libGUuPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJURU1QTEVBVkUiIGlkPSJURU1QTEVBVkUiPjE0LjIuCitUZW1wb3JhcmlseSBMZWF2aW5nIEN1cnNlcyBtb2RlPC9hPjwvaDM+Cis8cD5Tb21lIHRpbWVzIHlvdSBtYXkgd2FudCB0byBnZXQgYmFjayB0byBjb29rZWQgbW9kZSAobm9ybWFsIGxpbmUKK2J1ZmZlcmluZyBtb2RlKSB0ZW1wb3JhcmlseS4gSW4gc3VjaCBhIGNhc2UgeW91IHdpbGwgZmlyc3QgbmVlZCB0bworc2F2ZSB0aGUgdHR5IG1vZGVzIHdpdGggYSBjYWxsIHRvIDx2YXIgY2xhc3M9CisiTElURVJBTCI+ZGVmX3Byb2dfbW9kZSgpPC92YXI+IGFuZCB0aGVuIGNhbGwgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5lbmR3aW4oKTwvdmFyPiB0byBlbmQgdGhlIGN1cnNlcyBtb2RlLiBUaGlzIHdpbGwgbGVhdmUKK3lvdSBpbiB0aGUgb3JpZ2luYWwgdHR5IG1vZGUuIFRvIGdldCBiYWNrIHRvIGN1cnNlcyBvbmNlIHlvdSBhcmUKK2RvbmUsIGNhbGwgPHZhciBjbGFzcz0iTElURVJBTCI+cmVzZXRfcHJvZ19tb2RlKCk8L3Zhcj4gLiBUaGlzCitmdW5jdGlvbiByZXR1cm5zIHRoZSB0dHkgdG8gdGhlIHN0YXRlIHN0b3JlZCBieSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPmRlZl9wcm9nX21vZGUoKTwvdmFyPi4gVGhlbiBkbyByZWZyZXNoKCksIGFuZCB5b3UgYXJlCitiYWNrIHRvIHRoZSBjdXJzZXMgbW9kZS4gSGVyZSBpcyBhbiBleGFtcGxlIHNob3dpbmcgdGhlIHNlcXVlbmNlIG9mCit0aGluZ3MgdG8gYmUgZG9uZS48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJCVEVMRSIgaWQ9IkJURUxFIj48L2E+Cis8cD48Yj5FeGFtcGxlIDEyLiBUZW1wb3JhcmlseSBMZWF2aW5nIEN1cnNlcyBNb2RlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O25jdXJzZXMuaCZndDsKKworaW50IG1haW4oKQoreyAgICAgICAKKyAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBjdXJzZXMgbW9kZSAgICAgICAgICAgICAgKi8KKyAgICAgICAgcHJpbnR3KCJIZWxsbyBXb3JsZCAhISFcbiIpOyAgICAvKiBQcmludCBIZWxsbyBXb3JsZCAgICAgICAgICAgICAgKi8KKyAgICAgICAgcmVmcmVzaCgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBpdCBvbiB0byB0aGUgcmVhbCBzY3JlZW4gKi8KKyAgICAgICAgZGVmX3Byb2dfbW9kZSgpOyAgICAgICAgICAgICAgICAvKiBTYXZlIHRoZSB0dHkgbW9kZXMgICAgICAgICAgICAgKi8KKyAgICAgICAgZW5kd2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3Vyc2VzIG1vZGUgdGVtcG9yYXJpbHkgICAgKi8KKyAgICAgICAgc3lzdGVtKCIvYmluL3NoIik7ICAgICAgICAgICAgICAvKiBEbyB3aGF0ZXZlciB5b3UgbGlrZSBpbiBjb29rZWQgbW9kZSAqLworICAgICAgICByZXNldF9wcm9nX21vZGUoKTsgICAgICAgICAgICAgIC8qIFJldHVybiB0byB0aGUgcHJldmlvdXMgdHR5IG1vZGUqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0b3JlZCBieSBkZWZfcHJvZ19tb2RlKCkgICAgICAqLworICAgICAgICByZWZyZXNoKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvIHJlZnJlc2goKSB0byByZXN0b3JlIHRoZSAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBjb250ZW50cyAgICAgICAgICAgICAgICAqLworICAgICAgICBwcmludHcoIkFub3RoZXIgU3RyaW5nXG4iKTsgICAgIC8qIEJhY2sgdG8gY3Vyc2VzIHVzZSB0aGUgZnVsbCAgICAqLworICAgICAgICByZWZyZXNoKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNhcGFiaWxpdGllcyBvZiBjdXJzZXMgICAgICAgICAqLworICAgICAgICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJzZXMgbW9kZSAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQUNTVkFSUyIgaWQ9IkFDU1ZBUlMiPjE0LjMuIEFDU18KK3ZhcmlhYmxlczwvYT48L2gzPgorPHA+SWYgeW91IGhhdmUgZXZlciBwcm9ncmFtbWVkIGluIERPUywgeW91IGtub3cgYWJvdXQgdGhvc2UgbmlmdHkKK2NoYXJhY3RlcnMgaW4gZXh0ZW5kZWQgY2hhcmFjdGVyIHNldC4gVGhleSBhcmUgcHJpbnRhYmxlIG9ubHkgb24KK3NvbWUgdGVybWluYWxzLiBOQ1VSU0VTIGZ1bmN0aW9ucyBsaWtlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+Ym94KCk8L3Zhcj4gdXNlIHRoZXNlIGNoYXJhY3RlcnMuIEFsbCB0aGVzZSB2YXJpYWJsZXMKK3N0YXJ0IHdpdGggQUNTIG1lYW5pbmcgYWx0ZXJuYXRpdmUgY2hhcmFjdGVyIHNldC4gWW91IG1pZ2h0IGhhdmUKK25vdGljZWQgbWUgdXNpbmcgdGhlc2UgY2hhcmFjdGVycyBpbiBzb21lIG9mIHRoZSBwcm9ncmFtcyBhYm92ZS4KK0hlcmUncyBhbiBleGFtcGxlIHNob3dpbmcgYWxsIHRoZSBjaGFyYWN0ZXJzLjwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9IkJBQ1NWQVJTIiBpZD0iQkFDU1ZBUlMiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMTMuIEFDUyBWYXJpYWJsZXMgRXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtuY3Vyc2VzLmgmZ3Q7CisKK2ludCBtYWluKCkKK3sKKyAgICAgICAgaW5pdHNjcigpOworCisgICAgICAgIHByaW50dygiVXBwZXIgbGVmdCBjb3JuZXIgICAgICAgICAgICIpOyBhZGRjaChBQ1NfVUxDT1JORVIpOyBwcmludHcoIlxuIik7IAorICAgICAgICBwcmludHcoIkxvd2VyIGxlZnQgY29ybmVyICAgICAgICAgICAiKTsgYWRkY2goQUNTX0xMQ09STkVSKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkxvd2VyIHJpZ2h0IGNvcm5lciAgICAgICAgICAiKTsgYWRkY2goQUNTX0xSQ09STkVSKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlRlZSBwb2ludGluZyByaWdodCAgICAgICAgICAiKTsgYWRkY2goQUNTX0xURUUpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiVGVlIHBvaW50aW5nIGxlZnQgICAgICAgICAgICIpOyBhZGRjaChBQ1NfUlRFRSk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJUZWUgcG9pbnRpbmcgdXAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19CVEVFKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlRlZSBwb2ludGluZyBkb3duICAgICAgICAgICAiKTsgYWRkY2goQUNTX1RURUUpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiSG9yaXpvbnRhbCBsaW5lICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfSExJTkUpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiVmVydGljYWwgbGluZSAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfVkxJTkUpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiTGFyZ2UgUGx1cyBvciBjcm9zcyBvdmVyICAgICIpOyBhZGRjaChBQ1NfUExVUyk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJTY2FuIExpbmUgMSAgICAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19TMSk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJTY2FuIExpbmUgMyAgICAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19TMyk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJTY2FuIExpbmUgNyAgICAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19TNyk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJTY2FuIExpbmUgOSAgICAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19TOSk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJEaWFtb25kICAgICAgICAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19ESUFNT05EKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkNoZWNrZXIgYm9hcmQgKHN0aXBwbGUpICAgICAiKTsgYWRkY2goQUNTX0NLQk9BUkQpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiRGVncmVlIFN5bWJvbCAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfREVHUkVFKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlBsdXMvTWludXMgU3ltYm9sICAgICAgICAgICAiKTsgYWRkY2goQUNTX1BMTUlOVVMpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiQnVsbGV0ICAgICAgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfQlVMTEVUKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkFycm93IFBvaW50aW5nIExlZnQgICAgICAgICAiKTsgYWRkY2goQUNTX0xBUlJPVyk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJBcnJvdyBQb2ludGluZyBSaWdodCAgICAgICAgIik7IGFkZGNoKEFDU19SQVJST1cpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiQXJyb3cgUG9pbnRpbmcgRG93biAgICAgICAgICIpOyBhZGRjaChBQ1NfREFSUk9XKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkFycm93IFBvaW50aW5nIFVwICAgICAgICAgICAiKTsgYWRkY2goQUNTX1VBUlJPVyk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJCb2FyZCBvZiBzcXVhcmVzICAgICAgICAgICAgIik7IGFkZGNoKEFDU19CT0FSRCk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJMYW50ZXJuIFN5bWJvbCAgICAgICAgICAgICAgIik7IGFkZGNoKEFDU19MQU5URVJOKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlNvbGlkIFNxdWFyZSBCbG9jayAgICAgICAgICAiKTsgYWRkY2goQUNTX0JMT0NLKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIkxlc3MvRXF1YWwgc2lnbiAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX0xFUVVBTCk7IHByaW50dygiXG4iKTsKKyAgICAgICAgcHJpbnR3KCJHcmVhdGVyL0VxdWFsIHNpZ24gICAgICAgICAgIik7IGFkZGNoKEFDU19HRVFVQUwpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiUGkgICAgICAgICAgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfUEkpOyBwcmludHcoIlxuIik7CisgICAgICAgIHByaW50dygiTm90IGVxdWFsICAgICAgICAgICAgICAgICAgICIpOyBhZGRjaChBQ1NfTkVRVUFMKTsgcHJpbnR3KCJcbiIpOworICAgICAgICBwcmludHcoIlVLIHBvdW5kIHNpZ24gICAgICAgICAgICAgICAiKTsgYWRkY2goQUNTX1NURVJMSU5HKTsgcHJpbnR3KCJcbiIpOworCisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgZ2V0Y2goKTsKKyAgICAgICAgZW5kd2luKCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9Ik9USEVSTElCIiBpZD0iT1RIRVJMSUIiPjE1LiBPdGhlcgorbGlicmFyaWVzPC9hPjwvaDI+Cis8cD5BcGFydCBmcm9tIHRoZSBjdXJzZXMgbGlicmFyeSwgdGhlcmUgYXJlIGZldyB0ZXh0IG1vZGUKK2xpYnJhcmllcywgd2hpY2ggcHJvdmlkZSBtb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIGEgbG90IG9mIGZlYXR1cmVzLgorVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBleHBsYWluIHRocmVlIHN0YW5kYXJkIGxpYnJhcmllcyB3aGljaCBhcmUKK3VzdWFsbHkgZGlzdHJpYnV0ZWQgYWxvbmcgd2l0aCBjdXJzZXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJQQU5FTFMiIGlkPSJQQU5FTFMiPjE2LiBQYW5lbAorTGlicmFyeTwvYT48L2gyPgorPHA+Tm93IHRoYXQgeW91IGFyZSBwcm9maWNpZW50IGluIGN1cnNlcywgeW91IHdhbnRlZCB0byBkbyBzb21lCit0aGluZyBiaWcuIFlvdSBjcmVhdGVkIGEgbG90IG9mIG92ZXJsYXBwaW5nIHdpbmRvd3MgdG8gZ2l2ZSBhCitwcm9mZXNzaW9uYWwgd2luZG93cy10eXBlIGxvb2suIFVuZm9ydHVuYXRlbHksIGl0IHNvb24gYmVjb21lcworZGlmZmljdWx0IHRvIG1hbmFnZSB0aGVzZS4gVGhlIG11bHRpcGxlIHJlZnJlc2hlcywgdXBkYXRlcyBwbHVuZ2UKK3lvdSBpbnRvIGEgbmlnaHRtYXJlLiBUaGUgb3ZlcmxhcHBpbmcgd2luZG93cyBjcmVhdGUgYmxvdGNoZXMsCit3aGVuZXZlciB5b3UgZm9yZ2V0IHRvIHJlZnJlc2ggdGhlIHdpbmRvd3MgaW4gdGhlIHByb3BlciBvcmRlci48L3A+Cis8cD5Eb24ndCBkZXNwYWlyLiBUaGVyZSdzIGFuIGVsZWdhbnQgc29sdXRpb24gcHJvdmlkZWQgaW4gcGFuZWxzCitsaWJyYXJ5LiBJbiB0aGUgd29yZHMgb2YgZGV2ZWxvcGVycyBvZiBuY3Vyc2VzPC9wPgorPHA+PGVtPldoZW4geW91ciBpbnRlcmZhY2UgZGVzaWduIGlzIHN1Y2ggdGhhdCB3aW5kb3dzIG1heSBkaXZlCitkZWVwZXIgaW50byB0aGUgdmlzaWJpbGl0eSBzdGFjayBvciBwb3AgdG8gdGhlIHRvcCBhdCBydW50aW1lLCB0aGUKK3Jlc3VsdGluZyBib29rLWtlZXBpbmcgY2FuIGJlIHRlZGlvdXMgYW5kIGRpZmZpY3VsdCB0byBnZXQgcmlnaHQuCitIZW5jZSB0aGUgcGFuZWxzIGxpYnJhcnkuPC9lbT48L3A+Cis8cD5JZiB5b3UgaGF2ZSBsb3Qgb2Ygb3ZlcmxhcHBpbmcgd2luZG93cywgdGhlbiBwYW5lbHMgbGlicmFyeSBpcwordGhlIHdheSB0byBnby4gSXQgb2J2aWF0ZXMgdGhlIG5lZWQgb2YgZG9pbmcgc2VyaWVzIG9mCit3bm91dHJlZnJlc2goKSwgZG91cGRhdGUoKSBhbmQgcmVsaWV2ZXMgdGhlIGJ1cmRlbiBvZiBkb2luZyBpdAorY29ycmVjdGx5KGJvdHRvbSB1cCkuIFRoZSBsaWJyYXJ5IG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK29yZGVyIG9mIHdpbmRvd3MsIHRoZWlyIG92ZXJsYXBwaW5nIGFuZCB1cGRhdGUgdGhlIHNjcmVlbiBwcm9wZXJseS4KK1NvIHdoeSB3YWl0PyBMZXQncyB0YWtlIGEgY2xvc2UgcGVlayBpbnRvIHBhbmVscy48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJQQU5FTEJBU0lDUyIgaWQ9IlBBTkVMQkFTSUNTIj4xNi4xLiBUaGUKK0Jhc2ljczwvYT48L2gzPgorPHA+UGFuZWwgb2JqZWN0IGlzIGEgd2luZG93IHRoYXQgaXMgaW1wbGljaXRseSB0cmVhdGVkIGFzIHBhcnQgb2YgYQorZGVjayBpbmNsdWRpbmcgYWxsIG90aGVyIHBhbmVsIG9iamVjdHMuIFRoZSBkZWNrIGlzIHRyZWF0ZWQgYXMgYQorc3RhY2sgd2l0aCB0aGUgdG9wIHBhbmVsIGJlaW5nIGNvbXBsZXRlbHkgdmlzaWJsZSBhbmQgdGhlIG90aGVyCitwYW5lbHMgbWF5IG9yIG1heSBub3QgYmUgb2JzY3VyZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucy4gU28KK3RoZSBiYXNpYyBpZGVhIGlzIHRvIGNyZWF0ZSBhIHN0YWNrIG9mIG92ZXJsYXBwaW5nIHBhbmVscyBhbmQgdXNlCitwYW5lbHMgbGlicmFyeSB0byBkaXNwbGF5IHRoZW0gY29ycmVjdGx5LiBUaGVyZSBpcyBhIGZ1bmN0aW9uCitzaW1pbGFyIHRvIHJlZnJlc2goKSB3aGljaCwgd2hlbiBjYWxsZWQgLCBkaXNwbGF5cyBwYW5lbHMgaW4gdGhlCitjb3JyZWN0IG9yZGVyLiBGdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHRvIGhpZGUgb3Igc2hvdyBwYW5lbHMsIG1vdmUKK3BhbmVscywgY2hhbmdlIGl0cyBzaXplIGV0Yy4uIFRoZSBvdmVybGFwcGluZyBwcm9ibGVtIGlzIG1hbmFnZWQgYnkKK3RoZSBwYW5lbHMgbGlicmFyeSBkdXJpbmcgYWxsIHRoZSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMuPC9wPgorPHA+VGhlIGdlbmVyYWwgZmxvdyBvZiBhIHBhbmVsIHByb2dyYW0gZ29lcyBsaWtlIHRoaXM6PC9wPgorPG9sIHR5cGU9IjEiPgorPGxpPgorPHA+Q3JlYXRlIHRoZSB3aW5kb3dzICh3aXRoIG5ld3dpbigpKSB0byBiZSBhdHRhY2hlZCB0byB0aGUKK3BhbmVscy48L3A+Cis8L2xpPgorPGxpPgorPHA+Q3JlYXRlIHBhbmVscyB3aXRoIHRoZSBjaG9zZW4gdmlzaWJpbGl0eSBvcmRlci4gU3RhY2sgdGhlbSB1cAorYWNjb3JkaW5nIHRvIHRoZSBkZXNpcmVkIHZpc2liaWxpdHkuIFRoZSBmdW5jdGlvbiBuZXdfcGFuZWwoKSBpcwordXNlZCB0byBjcmVhdGVkIHBhbmVscy48L3A+Cis8L2xpPgorPGxpPgorPHA+Q2FsbCB1cGRhdGVfcGFuZWxzKCkgdG8gd3JpdGUgdGhlIHBhbmVscyB0byB0aGUgdmlydHVhbCBzY3JlZW4KK2luIGNvcnJlY3QgdmlzaWJpbGl0eSBvcmRlci4gRG8gYSBkb3VwZGF0ZSgpIHRvIHNob3cgaXQgb24gdGhlCitzY3JlZW4uPC9wPgorPC9saT4KKzxsaT4KKzxwPk1haW5wdWxhdGUgdGhlIHBhbmVscyB3aXRoIHNob3dfcGFuZWwoKSwgaGlkZV9wYW5lbCgpLAorbW92ZV9wYW5lbCgpIGV0Yy4gTWFrZSB1c2Ugb2YgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIHBhbmVsX2hpZGRlbigpCithbmQgcGFuZWxfd2luZG93KCkuIE1ha2UgdXNlIG9mIHVzZXIgcG9pbnRlciB0byBzdG9yZSBjdXN0b20gZGF0YQorZm9yIGEgcGFuZWwuIFVzZSB0aGUgZnVuY3Rpb25zIHNldF9wYW5lbF91c2VycHRyKCkgYW5kCitwYW5lbF91c2VycHRyKCkgdG8gc2V0IGFuZCBnZXQgdGhlIHVzZXIgcG9pbnRlciBmb3IgYSBwYW5lbC48L3A+Cis8L2xpPgorPGxpPgorPHA+V2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGUgcGFuZWwgdXNlIGRlbF9wYW5lbCgpIHRvIGRlbGV0ZSB0aGUKK3BhbmVsLjwvcD4KKzwvbGk+Cis8L29sPgorPHA+TGV0J3MgbWFrZSB0aGUgY29uY2VwdHMgY2xlYXIsIHdpdGggc29tZSBwcm9ncmFtcy4gVGhlIGZvbGxvd2luZworaXMgYSBzaW1wbGUgcHJvZ3JhbSB3aGljaCBjcmVhdGVzIDMgb3ZlcmxhcHBpbmcgcGFuZWxzIGFuZCBzaG93cwordGhlbSBvbiB0aGUgc2NyZWVuLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQ09NUElMRVBBTkVMUyIgaWQ9IkNPTVBJTEVQQU5FTFMiPjE2LjIuCitDb21waWxpbmcgV2l0aCB0aGUgUGFuZWxzIExpYnJhcnk8L2E+PC9oMz4KKzxwPlRvIHVzZSBwYW5lbHMgbGlicmFyeSBmdW5jdGlvbnMsIHlvdSBoYXZlIHRvIGluY2x1ZGUgcGFuZWwuaCBhbmQKK3RvIGxpbmsgdGhlIHByb2dyYW0gd2l0aCBwYW5lbHMgbGlicmFyeSB0aGUgZmxhZyAtbHBhbmVsIHNob3VsZCBiZQorYWRkZWQgYWxvbmcgd2l0aCAtbG5jdXJzZXMgaW4gdGhhdCBvcmRlci48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+ICAgICNpbmNsdWRlICZsdDtwYW5lbC5oJmd0OworICAgIC4KKyAgICAuCisgICAgLgorCisgICAgY29tcGlsZSBhbmQgbGluazogZ2NjICZsdDtwcm9ncmFtIGZpbGUmZ3Q7IC1scGFuZWwgLWxuY3Vyc2VzPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iUFBBU0kiIGlkPSJQUEFTSSI+PC9hPgorPHA+PGI+RXhhbXBsZSAxNC4gUGFuZWwgYmFzaWNzPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O3BhbmVsLmgmZ3Q7CisKK2ludCBtYWluKCkKK3sgICAgICAgV0lORE9XICpteV93aW5zWzNdOworICAgICAgICBQQU5FTCAgKm15X3BhbmVsc1szXTsKKyAgICAgICAgaW50IGxpbmVzID0gMTAsIGNvbHMgPSA0MCwgeSA9IDIsIHggPSA0LCBpOworCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworCisgICAgICAgIC8qIENyZWF0ZSB3aW5kb3dzIGZvciB0aGUgcGFuZWxzICovCisgICAgICAgIG15X3dpbnNbMF0gPSBuZXd3aW4obGluZXMsIGNvbHMsIHksIHgpOworICAgICAgICBteV93aW5zWzFdID0gbmV3d2luKGxpbmVzLCBjb2xzLCB5ICsgMSwgeCArIDUpOworICAgICAgICBteV93aW5zWzJdID0gbmV3d2luKGxpbmVzLCBjb2xzLCB5ICsgMiwgeCArIDEwKTsKKworICAgICAgICAvKiAKKyAgICAgICAgICogQ3JlYXRlIGJvcmRlcnMgYXJvdW5kIHRoZSB3aW5kb3dzIHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlIGVmZmVjdAorICAgICAgICAgKiBvZiBwYW5lbHMKKyAgICAgICAgICovCisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IDM7ICsraSkKKyAgICAgICAgICAgICAgICBib3gobXlfd2luc1tpXSwgMCwgMCk7CisKKyAgICAgICAgLyogQXR0YWNoIGEgcGFuZWwgdG8gZWFjaCB3aW5kb3cgKi8gICAgIC8qIE9yZGVyIGlzIGJvdHRvbSB1cCAqLworICAgICAgICBteV9wYW5lbHNbMF0gPSBuZXdfcGFuZWwobXlfd2luc1swXSk7ICAgLyogUHVzaCAwLCBvcmRlcjogc3Rkc2NyLTAgKi8KKyAgICAgICAgbXlfcGFuZWxzWzFdID0gbmV3X3BhbmVsKG15X3dpbnNbMV0pOyAgIC8qIFB1c2ggMSwgb3JkZXI6IHN0ZHNjci0wLTEgKi8KKyAgICAgICAgbXlfcGFuZWxzWzJdID0gbmV3X3BhbmVsKG15X3dpbnNbMl0pOyAgIC8qIFB1c2ggMiwgb3JkZXI6IHN0ZHNjci0wLTEtMiAqLworCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgc3RhY2tpbmcgb3JkZXIuIDJuZCBwYW5lbCB3aWxsIGJlIG9uIHRvcCAqLworICAgICAgICB1cGRhdGVfcGFuZWxzKCk7CisKKyAgICAgICAgLyogU2hvdyBpdCBvbiB0aGUgc2NyZWVuICovCisgICAgICAgIGRvdXBkYXRlKCk7CisgICAgICAgIAorICAgICAgICBnZXRjaCgpOworICAgICAgICBlbmR3aW4oKTsKK30KKzwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPkFzIHlvdSBjYW4gc2VlLCBhYm92ZSBwcm9ncmFtIGZvbGxvd3MgYSBzaW1wbGUgZmxvdyBhcworZXhwbGFpbmVkLiBUaGUgd2luZG93cyBhcmUgY3JlYXRlZCB3aXRoIG5ld3dpbigpIGFuZCB0aGVuIHRoZXkgYXJlCithdHRhY2hlZCB0byBwYW5lbHMgd2l0aCBuZXdfcGFuZWwoKS4gQXMgd2UgYXR0YWNoIG9uZSBwYW5lbCBhZnRlcgorYW5vdGhlciwgdGhlIHN0YWNrIG9mIHBhbmVscyBnZXRzIHVwZGF0ZWQuIFRvIHB1dCB0aGVtIG9uIHNjcmVlbgordXBkYXRlX3BhbmVscygpIGFuZCBkb3VwZGF0ZSgpIGFyZSBjYWxsZWQuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJQQU5FTEJST1dTSU5HIiBpZD0iUEFORUxCUk9XU0lORyI+MTYuMy4KK1BhbmVsIFdpbmRvdyBCcm93c2luZzwvYT48L2gzPgorPHA+QSBzbGlnaHRseSBjb21wbGljYXRlZCBleGFtcGxlIGlzIGdpdmVuIGJlbG93LiBUaGlzIHByb2dyYW0KK2NyZWF0ZXMgMyB3aW5kb3dzIHdoaWNoIGNhbiBiZSBjeWNsZWQgdGhyb3VnaCB1c2luZyB0YWIuIEhhdmUgYQorbG9vayBhdCB0aGUgY29kZS48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJQUEFCUiIgaWQ9IlBQQUJSIj48L2E+Cis8cD48Yj5FeGFtcGxlIDE1LiBQYW5lbCBXaW5kb3cgQnJvd3NpbmcgRXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtwYW5lbC5oJmd0OworCisjZGVmaW5lIE5MSU5FUyAxMAorI2RlZmluZSBOQ09MUyA0MAorCit2b2lkIGluaXRfd2lucyhXSU5ET1cgKip3aW5zLCBpbnQgbik7Cit2b2lkIHdpbl9zaG93KFdJTkRPVyAqd2luLCBjaGFyICpsYWJlbCwgaW50IGxhYmVsX2NvbG9yKTsKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKTsKKworaW50IG1haW4oKQoreyAgICAgICBXSU5ET1cgKm15X3dpbnNbM107CisgICAgICAgIFBBTkVMICAqbXlfcGFuZWxzWzNdOworICAgICAgICBQQU5FTCAgKnRvcDsKKyAgICAgICAgaW50IGNoOworCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGFsbCB0aGUgY29sb3JzICovCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDIsIENPTE9SX0dSRUVOLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigzLCBDT0xPUl9CTFVFLCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcig0LCBDT0xPUl9DWUFOLCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgaW5pdF93aW5zKG15X3dpbnMsIDMpOworICAgICAgICAKKyAgICAgICAgLyogQXR0YWNoIGEgcGFuZWwgdG8gZWFjaCB3aW5kb3cgKi8gICAgIC8qIE9yZGVyIGlzIGJvdHRvbSB1cCAqLworICAgICAgICBteV9wYW5lbHNbMF0gPSBuZXdfcGFuZWwobXlfd2luc1swXSk7ICAgLyogUHVzaCAwLCBvcmRlcjogc3Rkc2NyLTAgKi8KKyAgICAgICAgbXlfcGFuZWxzWzFdID0gbmV3X3BhbmVsKG15X3dpbnNbMV0pOyAgIC8qIFB1c2ggMSwgb3JkZXI6IHN0ZHNjci0wLTEgKi8KKyAgICAgICAgbXlfcGFuZWxzWzJdID0gbmV3X3BhbmVsKG15X3dpbnNbMl0pOyAgIC8qIFB1c2ggMiwgb3JkZXI6IHN0ZHNjci0wLTEtMiAqLworCisgICAgICAgIC8qIFNldCB1cCB0aGUgdXNlciBwb2ludGVycyB0byB0aGUgbmV4dCBwYW5lbCAqLworICAgICAgICBzZXRfcGFuZWxfdXNlcnB0cihteV9wYW5lbHNbMF0sIG15X3BhbmVsc1sxXSk7CisgICAgICAgIHNldF9wYW5lbF91c2VycHRyKG15X3BhbmVsc1sxXSwgbXlfcGFuZWxzWzJdKTsKKyAgICAgICAgc2V0X3BhbmVsX3VzZXJwdHIobXlfcGFuZWxzWzJdLCBteV9wYW5lbHNbMF0pOworCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgc3RhY2tpbmcgb3JkZXIuIDJuZCBwYW5lbCB3aWxsIGJlIG9uIHRvcCAqLworICAgICAgICB1cGRhdGVfcGFuZWxzKCk7CisKKyAgICAgICAgLyogU2hvdyBpdCBvbiB0aGUgc2NyZWVuICovCisgICAgICAgIGF0dHJvbihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXNlIHRhYiB0byBicm93c2UgdGhyb3VnaCB0aGUgd2luZG93cyAoRjEgdG8gRXhpdCkiKTsKKyAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgZG91cGRhdGUoKTsKKworICAgICAgICB0b3AgPSBteV9wYW5lbHNbMl07CisgICAgICAgIHdoaWxlKChjaCA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjaCkKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gKFBBTkVMICopcGFuZWxfdXNlcnB0cih0b3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfcGFuZWwodG9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVwZGF0ZV9wYW5lbHMoKTsKKyAgICAgICAgICAgICAgICBkb3VwZGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGVuZHdpbigpOworICAgICAgICByZXR1cm4gMDsKK30KKworLyogUHV0IGFsbCB0aGUgd2luZG93cyAqLwordm9pZCBpbml0X3dpbnMoV0lORE9XICoqd2lucywgaW50IG4pCit7ICAgICAgIGludCB4LCB5LCBpOworICAgICAgICBjaGFyIGxhYmVsWzgwXTsKKworICAgICAgICB5ID0gMjsKKyAgICAgICAgeCA9IDEwOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuOyArK2kpCisgICAgICAgIHsgICAgICAgd2luc1tpXSA9IG5ld3dpbihOTElORVMsIE5DT0xTLCB5LCB4KTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGxhYmVsLCAiV2luZG93IE51bWJlciAlZCIsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICB3aW5fc2hvdyh3aW5zW2ldLCBsYWJlbCwgaSArIDEpOworICAgICAgICAgICAgICAgIHkgKz0gMzsKKyAgICAgICAgICAgICAgICB4ICs9IDc7CisgICAgICAgIH0KK30KKworLyogU2hvdyB0aGUgd2luZG93IHdpdGggYSBib3JkZXIgYW5kIGEgbGFiZWwgKi8KK3ZvaWQgd2luX3Nob3coV0lORE9XICp3aW4sIGNoYXIgKmxhYmVsLCBpbnQgbGFiZWxfY29sb3IpCit7ICAgICAgIGludCBzdGFydHgsIHN0YXJ0eSwgaGVpZ2h0LCB3aWR0aDsKKworICAgICAgICBnZXRiZWd5eCh3aW4sIHN0YXJ0eSwgc3RhcnR4KTsKKyAgICAgICAgZ2V0bWF4eXgod2luLCBoZWlnaHQsIHdpZHRoKTsKKworICAgICAgICBib3god2luLCAwLCAwKTsKKyAgICAgICAgbXZ3YWRkY2god2luLCAyLCAwLCBBQ1NfTFRFRSk7IAorICAgICAgICBtdndobGluZSh3aW4sIDIsIDEsIEFDU19ITElORSwgd2lkdGggLSAyKTsgCisgICAgICAgIG12d2FkZGNoKHdpbiwgMiwgd2lkdGggLSAxLCBBQ1NfUlRFRSk7IAorICAgICAgICAKKyAgICAgICAgcHJpbnRfaW5fbWlkZGxlKHdpbiwgMSwgMCwgd2lkdGgsIGxhYmVsLCBDT0xPUl9QQUlSKGxhYmVsX2NvbG9yKSk7Cit9CisKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKQoreyAgICAgICBpbnQgbGVuZ3RoLCB4LCB5OworICAgICAgICBmbG9hdCB0ZW1wOworCisgICAgICAgIGlmKHdpbiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHdpbiA9IHN0ZHNjcjsKKyAgICAgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICAgICAgaWYoc3RhcnR4ICE9IDApCisgICAgICAgICAgICAgICAgeCA9IHN0YXJ0eDsKKyAgICAgICAgaWYoc3RhcnR5ICE9IDApCisgICAgICAgICAgICAgICAgeSA9IHN0YXJ0eTsKKyAgICAgICAgaWYod2lkdGggPT0gMCkKKyAgICAgICAgICAgICAgICB3aWR0aCA9IDgwOworCisgICAgICAgIGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICB0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKS8gMjsKKyAgICAgICAgeCA9IHN0YXJ0eCArIChpbnQpdGVtcDsKKyAgICAgICAgd2F0dHJvbih3aW4sIGNvbG9yKTsKKyAgICAgICAgbXZ3cHJpbnR3KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsKKyAgICAgICAgd2F0dHJvZmYod2luLCBjb2xvcik7CisgICAgICAgIHJlZnJlc2goKTsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlVTRVJQVFJVU0lORyIgaWQ9IlVTRVJQVFJVU0lORyI+MTYuNC4KK1VzaW5nIFVzZXIgUG9pbnRlcnM8L2E+PC9oMz4KKzxwPkluIHRoZSBhYm92ZSBleGFtcGxlIEkgdXNlZCB1c2VyIHBvaW50ZXJzIHRvIGZpbmQgb3V0IHRoZSBuZXh0Cit3aW5kb3cgaW4gdGhlIGN5Y2xlLiBXZSBjYW4gYXR0YWNoIGN1c3RvbSBpbmZvcm1hdGlvbiB0byB0aGUgcGFuZWwKK2J5IHNwZWNpZnlpbmcgYSB1c2VyIHBvaW50ZXIsIHdoaWNoIGNhbiBwb2ludCB0byBhbnkgaW5mb3JtYXRpb24KK3lvdSB3YW50IHRvIHN0b3JlLiBJbiB0aGlzIGNhc2UgSSBzdG9yZWQgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQKK3BhbmVsIGluIHRoZSBjeWNsZS4gVXNlciBwb2ludGVyIGZvciBhIHBhbmVsIGNhbiBiZSBzZXQgd2l0aCB0aGUKK2Z1bmN0aW9uIDx2YXIgY2xhc3M9IkxJVEVSQUwiPnNldF9wYW5lbF91c2VycHRyKCk8L3Zhcj4uIEl0IGNhbiBiZQorYWNjZXNzZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cGFuZWxfdXNlcnB0cigpPC92YXI+IHdoaWNoIHdpbGwgcmV0dXJuIHRoZSB1c2VyIHBvaW50ZXIKK2ZvciB0aGUgcGFuZWwgZ2l2ZW4gYXMgYXJndW1lbnQuIEFmdGVyIGZpbmRpbmcgdGhlIG5leHQgcGFuZWwgaW4KK3RoZSBjeWNsZSBJdCdzIGJyb3VnaHQgdG8gdGhlIHRvcCBieSB0aGUgZnVuY3Rpb24gdG9wX3BhbmVsKCkuIFRoaXMKK2Z1bmN0aW9uIGJyaW5ncyB0aGUgcGFuZWwgZ2l2ZW4gYXMgYXJndW1lbnQgdG8gdGhlIHRvcCBvZiB0aGUgcGFuZWwKK3N0YWNrLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iUEFORUxNT1ZFUkVTSVpFIiBpZD0KKyJQQU5FTE1PVkVSRVNJWkUiPjE2LjUuIE1vdmluZyBhbmQgUmVzaXppbmcgUGFuZWxzPC9hPjwvaDM+Cis8cD5UaGUgZnVuY3Rpb24gPHZhciBjbGFzcz0iTElURVJBTCI+bW92ZV9wYW5lbCgpPC92YXI+IGNhbiBiZSB1c2VkCit0byBtb3ZlIGEgcGFuZWwgdG8gdGhlIGRlc2lyZWQgbG9jYXRpb24uIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUKK3Bvc2l0aW9uIG9mIHRoZSBwYW5lbCBpbiB0aGUgc3RhY2suIE1ha2Ugc3VyZSB0aGF0IHlvdSB1c2UKK21vdmVfcGFuZWwoKSBpbnN0ZWFkIG12d2luKCkgb24gdGhlIHdpbmRvdyBhc3NvY2lhdGVkIHdpdGggdGhlCitwYW5lbC48L3A+Cis8cD5SZXNpemluZyBhIHBhbmVsIGlzIHNsaWdodGx5IGNvbXBsZXguIFRoZXJlIGlzIG5vIHN0cmFpZ2h0Citmb3J3YXJkIGZ1bmN0aW9uIGp1c3QgdG8gcmVzaXplIHRoZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIGEgcGFuZWwuCitBIHNvbHV0aW9uIHRvIHJlc2l6ZSBhIHBhbmVsIGlzIHRvIGNyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCB0aGUKK2Rlc2lyZWQgc2l6ZXMsIGNoYW5nZSB0aGUgd2luZG93IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFuZWwgdXNpbmcKK3JlcGxhY2VfcGFuZWwoKS4gRG9uJ3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGUgb2xkIHdpbmRvdy4gVGhlIHdpbmRvdworYXNzb2NpYXRlZCB3aXRoIGEgcGFuZWwgY2FuIGJlIGZvdW5kIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbgorcGFuZWxfd2luZG93KCkuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBwcm9ncmFtIHNob3dzIHRoZXNlIGNvbmNlcHRzLCBpbiBzdXBwb3NlZGx5IHNpbXBsZQorcHJvZ3JhbS4gWW91IGNhbiBjeWNsZSB0aHJvdWdoIHRoZSB3aW5kb3cgd2l0aCAmbHQ7VEFCJmd0OyBhcwordXN1YWwuIFRvIHJlc2l6ZSBvciBtb3ZlIHRoZSBhY3RpdmUgcGFuZWwgcHJlc3MgJ3InIGZvciByZXNpemUgJ20nCitmb3IgbW92aW5nLiBUaGVuIHVzZSBhcnJvdyBrZXlzIHRvIHJlc2l6ZSBvciBtb3ZlIGl0IHRvIHRoZSBkZXNpcmVkCit3YXkgYW5kIHByZXNzIGVudGVyIHRvIGVuZCB5b3VyIHJlc2l6aW5nIG9yIG1vdmluZy4gVGhpcyBleGFtcGxlCittYWtlcyB1c2Ugb2YgdXNlciBkYXRhIHRvIGdldCB0aGUgcmVxdWlyZWQgZGF0YSB0byBkbyB0aGUKK29wZXJhdGlvbnMuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iUFBBUkUiIGlkPSJQUEFSRSI+PC9hPgorPHA+PGI+RXhhbXBsZSAxNi4gUGFuZWwgTW92aW5nIGFuZCBSZXNpemluZyBleGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O3BhbmVsLmgmZ3Q7CisKK3R5cGVkZWYgc3RydWN0IF9QQU5FTF9EQVRBIHsKKyAgICAgICAgaW50IHgsIHksIHcsIGg7CisgICAgICAgIGNoYXIgbGFiZWxbODBdOyAKKyAgICAgICAgaW50IGxhYmVsX2NvbG9yOworICAgICAgICBQQU5FTCAqbmV4dDsKK31QQU5FTF9EQVRBOworCisjZGVmaW5lIE5MSU5FUyAxMAorI2RlZmluZSBOQ09MUyA0MAorCit2b2lkIGluaXRfd2lucyhXSU5ET1cgKip3aW5zLCBpbnQgbik7Cit2b2lkIHdpbl9zaG93KFdJTkRPVyAqd2luLCBjaGFyICpsYWJlbCwgaW50IGxhYmVsX2NvbG9yKTsKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKTsKK3ZvaWQgc2V0X3VzZXJfcHRycyhQQU5FTCAqKnBhbmVscywgaW50IG4pOworCitpbnQgbWFpbigpCit7ICAgICAgIFdJTkRPVyAqbXlfd2luc1szXTsKKyAgICAgICAgUEFORUwgICpteV9wYW5lbHNbM107CisgICAgICAgIFBBTkVMX0RBVEEgICp0b3A7CisgICAgICAgIFBBTkVMICpzdGFja190b3A7CisgICAgICAgIFdJTkRPVyAqdGVtcF93aW4sICpvbGRfd2luOworICAgICAgICBpbnQgY2g7CisgICAgICAgIGludCBuZXd4LCBuZXd5LCBuZXd3LCBuZXdoOworICAgICAgICBpbnQgc2l6ZSA9IEZBTFNFLCBtb3ZlID0gRkFMU0U7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBzdGFydF9jb2xvcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgYWxsIHRoZSBjb2xvcnMgKi8KKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMiwgQ09MT1JfR1JFRU4sIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDMsIENPTE9SX0JMVUUsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDQsIENPTE9SX0NZQU4sIENPTE9SX0JMQUNLKTsKKworICAgICAgICBpbml0X3dpbnMobXlfd2lucywgMyk7CisgICAgICAgIAorICAgICAgICAvKiBBdHRhY2ggYSBwYW5lbCB0byBlYWNoIHdpbmRvdyAqLyAgICAgLyogT3JkZXIgaXMgYm90dG9tIHVwICovCisgICAgICAgIG15X3BhbmVsc1swXSA9IG5ld19wYW5lbChteV93aW5zWzBdKTsgICAvKiBQdXNoIDAsIG9yZGVyOiBzdGRzY3ItMCAqLworICAgICAgICBteV9wYW5lbHNbMV0gPSBuZXdfcGFuZWwobXlfd2luc1sxXSk7ICAgLyogUHVzaCAxLCBvcmRlcjogc3Rkc2NyLTAtMSAqLworICAgICAgICBteV9wYW5lbHNbMl0gPSBuZXdfcGFuZWwobXlfd2luc1syXSk7ICAgLyogUHVzaCAyLCBvcmRlcjogc3Rkc2NyLTAtMS0yICovCisKKyAgICAgICAgc2V0X3VzZXJfcHRycyhteV9wYW5lbHMsIDMpOworICAgICAgICAvKiBVcGRhdGUgdGhlIHN0YWNraW5nIG9yZGVyLiAybmQgcGFuZWwgd2lsbCBiZSBvbiB0b3AgKi8KKyAgICAgICAgdXBkYXRlX3BhbmVscygpOworCisgICAgICAgIC8qIFNob3cgaXQgb24gdGhlIHNjcmVlbiAqLworICAgICAgICBhdHRyb24oQ09MT1JfUEFJUig0KSk7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMywgMCwgIlVzZSAnbScgZm9yIG1vdmluZywgJ3InIGZvciByZXNpemluZyIpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJVc2UgdGFiIHRvIGJyb3dzZSB0aHJvdWdoIHRoZSB3aW5kb3dzIChGMSB0byBFeGl0KSIpOworICAgICAgICBhdHRyb2ZmKENPTE9SX1BBSVIoNCkpOworICAgICAgICBkb3VwZGF0ZSgpOworCisgICAgICAgIHN0YWNrX3RvcCA9IG15X3BhbmVsc1syXTsKKyAgICAgICAgdG9wID0gKFBBTkVMX0RBVEEgKilwYW5lbF91c2VycHRyKHN0YWNrX3RvcCk7CisgICAgICAgIG5ld3ggPSB0b3AtJmd0O3g7CisgICAgICAgIG5ld3kgPSB0b3AtJmd0O3k7CisgICAgICAgIG5ld3cgPSB0b3AtJmd0O3c7CisgICAgICAgIG5ld2ggPSB0b3AtJmd0O2g7CisgICAgICAgIHdoaWxlKChjaCA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjaCkKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgOTogICAgICAgICAvKiBUYWIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gKFBBTkVMX0RBVEEgKilwYW5lbF91c2VycHRyKHN0YWNrX3RvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9wYW5lbCh0b3AtJmd0O25leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja190b3AgPSB0b3AtJmd0O25leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA9IChQQU5FTF9EQVRBICopcGFuZWxfdXNlcnB0cihzdGFja190b3ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd4ID0gdG9wLSZndDt4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd5ID0gdG9wLSZndDt5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd3ID0gdG9wLSZndDt3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdoID0gdG9wLSZndDtoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOiAgICAgICAvKiBSZS1TaXplKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJvbihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXZwcmludHcoTElORVMgLSA0LCAwLCAiRW50ZXJlZCBSZXNpemluZyA6VXNlIEFycm93IEtleXMgdG8gcmVzaXplIGFuZCBwcmVzcyAmbHQ7RU5URVImZ3Q7IHRvIGVuZCByZXNpemluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJvZmYoQ09MT1JfUEFJUig0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbSc6ICAgICAgIC8qIE1vdmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cm9uKENPTE9SX1BBSVIoNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdnByaW50dyhMSU5FUyAtIDQsIDAsICJFbnRlcmVkIE1vdmluZzogVXNlIEFycm93IEtleXMgdG8gTW92ZSBhbmQgcHJlc3MgJmx0O0VOVEVSJmd0OyB0byBlbmQgbW92aW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2l6ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIC0tbmV3eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK25ld3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobW92ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmV3eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2l6ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICsrbmV3eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5ld3c7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobW92ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbmV3eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2l6ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIC0tbmV3eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK25ld2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobW92ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmV3eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzaXplID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgKytuZXd5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbmV3aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtb3ZlID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytuZXd5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6ICAgICAgICAvKiBFbnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKExJTkVTIC0gNCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2l6ZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIG9sZF93aW4gPSBwYW5lbF93aW5kb3coc3RhY2tfdG9wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3dpbiA9IG5ld3dpbihuZXdoLCBuZXd3LCBuZXd5LCBuZXd4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlX3BhbmVsKHN0YWNrX3RvcCwgdGVtcF93aW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbl9zaG93KHRlbXBfd2luLCB0b3AtJmd0O2xhYmVsLCB0b3AtJmd0O2xhYmVsX2NvbG9yKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsd2luKG9sZF93aW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtb3ZlID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgbW92ZV9wYW5lbChzdGFja190b3AsIG5ld3ksIG5ld3gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdHRyb24oQ09MT1JfUEFJUig0KSk7CisgICAgICAgICAgICAgICAgbXZwcmludHcoTElORVMgLSAzLCAwLCAiVXNlICdtJyBmb3IgbW92aW5nLCAncicgZm9yIHJlc2l6aW5nIik7CisgICAgICAgICAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXNlIHRhYiB0byBicm93c2UgdGhyb3VnaCB0aGUgd2luZG93cyAoRjEgdG8gRXhpdCkiKTsKKyAgICAgICAgICAgICAgICBhdHRyb2ZmKENPTE9SX1BBSVIoNCkpOworICAgICAgICAgICAgICAgIHJlZnJlc2goKTsgICAgICAKKyAgICAgICAgICAgICAgICB1cGRhdGVfcGFuZWxzKCk7CisgICAgICAgICAgICAgICAgZG91cGRhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBlbmR3aW4oKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qIFB1dCBhbGwgdGhlIHdpbmRvd3MgKi8KK3ZvaWQgaW5pdF93aW5zKFdJTkRPVyAqKndpbnMsIGludCBuKQoreyAgICAgICBpbnQgeCwgeSwgaTsKKyAgICAgICAgY2hhciBsYWJlbFs4MF07CisKKyAgICAgICAgeSA9IDI7CisgICAgICAgIHggPSAxMDsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbjsgKytpKQorICAgICAgICB7ICAgICAgIHdpbnNbaV0gPSBuZXd3aW4oTkxJTkVTLCBOQ09MUywgeSwgeCk7CisgICAgICAgICAgICAgICAgc3ByaW50ZihsYWJlbCwgIldpbmRvdyBOdW1iZXIgJWQiLCBpICsgMSk7CisgICAgICAgICAgICAgICAgd2luX3Nob3cod2luc1tpXSwgbGFiZWwsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICB5ICs9IDM7CisgICAgICAgICAgICAgICAgeCArPSA3OworICAgICAgICB9Cit9CisKKy8qIFNldCB0aGUgUEFORUxfREFUQSBzdHJ1Y3R1cmVzIGZvciBpbmRpdmlkdWFsIHBhbmVscyAqLwordm9pZCBzZXRfdXNlcl9wdHJzKFBBTkVMICoqcGFuZWxzLCBpbnQgbikKK3sgICAgICAgUEFORUxfREFUQSAqcHRyczsKKyAgICAgICAgV0lORE9XICp3aW47CisgICAgICAgIGludCB4LCB5LCB3LCBoLCBpOworICAgICAgICBjaGFyIHRlbXBbODBdOworICAgICAgICAKKyAgICAgICAgcHRycyA9IChQQU5FTF9EQVRBICopY2FsbG9jKG4sIHNpemVvZihQQU5FTF9EQVRBKSk7CisKKyAgICAgICAgZm9yKGkgPSAwO2kgJmx0OyBuOyArK2kpCisgICAgICAgIHsgICAgICAgd2luID0gcGFuZWxfd2luZG93KHBhbmVsc1tpXSk7CisgICAgICAgICAgICAgICAgZ2V0YmVneXgod2luLCB5LCB4KTsKKyAgICAgICAgICAgICAgICBnZXRtYXh5eCh3aW4sIGgsIHcpOworICAgICAgICAgICAgICAgIHB0cnNbaV0ueCA9IHg7CisgICAgICAgICAgICAgICAgcHRyc1tpXS55ID0geTsKKyAgICAgICAgICAgICAgICBwdHJzW2ldLncgPSB3OworICAgICAgICAgICAgICAgIHB0cnNbaV0uaCA9IGg7CisgICAgICAgICAgICAgICAgc3ByaW50Zih0ZW1wLCAiV2luZG93IE51bWJlciAlZCIsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICBzdHJjcHkocHRyc1tpXS5sYWJlbCwgdGVtcCk7CisgICAgICAgICAgICAgICAgcHRyc1tpXS5sYWJlbF9jb2xvciA9IGkgKyAxOworICAgICAgICAgICAgICAgIGlmKGkgKyAxID09IG4pCisgICAgICAgICAgICAgICAgICAgICAgICBwdHJzW2ldLm5leHQgPSBwYW5lbHNbMF07CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcHRyc1tpXS5uZXh0ID0gcGFuZWxzW2kgKyAxXTsKKyAgICAgICAgICAgICAgICBzZXRfcGFuZWxfdXNlcnB0cihwYW5lbHNbaV0sICZhbXA7cHRyc1tpXSk7CisgICAgICAgIH0KK30KKworLyogU2hvdyB0aGUgd2luZG93IHdpdGggYSBib3JkZXIgYW5kIGEgbGFiZWwgKi8KK3ZvaWQgd2luX3Nob3coV0lORE9XICp3aW4sIGNoYXIgKmxhYmVsLCBpbnQgbGFiZWxfY29sb3IpCit7ICAgICAgIGludCBzdGFydHgsIHN0YXJ0eSwgaGVpZ2h0LCB3aWR0aDsKKworICAgICAgICBnZXRiZWd5eCh3aW4sIHN0YXJ0eSwgc3RhcnR4KTsKKyAgICAgICAgZ2V0bWF4eXgod2luLCBoZWlnaHQsIHdpZHRoKTsKKworICAgICAgICBib3god2luLCAwLCAwKTsKKyAgICAgICAgbXZ3YWRkY2god2luLCAyLCAwLCBBQ1NfTFRFRSk7IAorICAgICAgICBtdndobGluZSh3aW4sIDIsIDEsIEFDU19ITElORSwgd2lkdGggLSAyKTsgCisgICAgICAgIG12d2FkZGNoKHdpbiwgMiwgd2lkdGggLSAxLCBBQ1NfUlRFRSk7IAorICAgICAgICAKKyAgICAgICAgcHJpbnRfaW5fbWlkZGxlKHdpbiwgMSwgMCwgd2lkdGgsIGxhYmVsLCBDT0xPUl9QQUlSKGxhYmVsX2NvbG9yKSk7Cit9CisKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKQoreyAgICAgICBpbnQgbGVuZ3RoLCB4LCB5OworICAgICAgICBmbG9hdCB0ZW1wOworCisgICAgICAgIGlmKHdpbiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHdpbiA9IHN0ZHNjcjsKKyAgICAgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICAgICAgaWYoc3RhcnR4ICE9IDApCisgICAgICAgICAgICAgICAgeCA9IHN0YXJ0eDsKKyAgICAgICAgaWYoc3RhcnR5ICE9IDApCisgICAgICAgICAgICAgICAgeSA9IHN0YXJ0eTsKKyAgICAgICAgaWYod2lkdGggPT0gMCkKKyAgICAgICAgICAgICAgICB3aWR0aCA9IDgwOworCisgICAgICAgIGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICB0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKS8gMjsKKyAgICAgICAgeCA9IHN0YXJ0eCArIChpbnQpdGVtcDsKKyAgICAgICAgd2F0dHJvbih3aW4sIGNvbG9yKTsKKyAgICAgICAgbXZ3cHJpbnR3KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsKKyAgICAgICAgd2F0dHJvZmYod2luLCBjb2xvcik7CisgICAgICAgIHJlZnJlc2goKTsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5Db25jZW50cmF0ZSBvbiB0aGUgbWFpbiB3aGlsZSBsb29wLiBPbmNlIGl0IGZpbmRzIG91dCB0aGUgdHlwZQorb2Yga2V5IHByZXNzZWQsIGl0IHRha2VzIGFwcHJvcHJpYXRlIGFjdGlvbi4gSWYgJ3InIGlzIHByZXNzZWQKK3Jlc2l6aW5nIG1vZGUgaXMgc3RhcnRlZC4gQWZ0ZXIgdGhpcyB0aGUgbmV3IHNpemVzIGFyZSB1cGRhdGVkIGFzCit0aGUgdXNlciBwcmVzc2VzIHRoZSBhcnJvdyBrZXlzLiBXaGVuIHRoZSB1c2VyIHByZXNzZXMKKyZsdDtFTlRFUiZndDsgcHJlc2VudCBzZWxlY3Rpb24gZW5kcyBhbmQgcGFuZWwgaXMgcmVzaXplZCBieSB1c2luZwordGhlIGNvbmNlcHQgZXhwbGFpbmVkLiBXaGlsZSBpbiByZXNpemluZyBtb2RlIHRoZSBwcm9ncmFtIGRvZXNuJ3QKK3Nob3cgaG93IHRoZSB3aW5kb3cgaXMgZ2V0dGluZyByZXNpemVkLiBJdCdzIGxlZnQgYXMgYW4gZXhlcmNpc2UgdG8KK3RoZSByZWFkZXIgdG8gcHJpbnQgYSBkb3R0ZWQgYm9yZGVyIHdoaWxlIGl0IGdldHMgcmVzaXplZCB0byBhIG5ldworcG9zaXRpb24uPC9wPgorPHA+V2hlbiB0aGUgdXNlciBwcmVzc2VzICdtJyB0aGUgbW92ZSBtb2RlIHN0YXJ0cy4gVGhpcyBpcyBhIGJpdAorc2ltcGxlciB0aGFuIHJlc2l6aW5nLiBBcyB0aGUgYXJyb3cga2V5cyBhcmUgcHJlc3NlZCB0aGUgbmV3Citwb3NpdGlvbiBpcyB1cGRhdGVkIGFuZCBwcmVzc2luZyBvZiAmbHQ7RU5URVImZ3Q7IGNhdXNlcyB0aGUgcGFuZWwKK3RvIGJlIG1vdmVkIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG1vdmVfcGFuZWwoKS48L3A+Cis8cD5JbiB0aGlzIHByb2dyYW0gdGhlIHVzZXIgZGF0YSB3aGljaCBpcyByZXByZXNlbnRlZCBhcworUEFORUxfREFUQSwgcGxheXMgdmVyeSBpbXBvcnRhbnQgcm9sZSBpbiBmaW5kaW5nIHRoZSBhc3NvY2lhdGVkCitpbmZvcm1hdGlvbiB3aXRoIGEgcGFuZWwuIEFzIHdyaXR0ZW4gaW4gdGhlIGNvbW1lbnRzLCB0aGUKK1BBTkVMX0RBVEEgc3RvcmVzIHRoZSBwYW5lbCBzaXplcywgbGFiZWwsIGxhYmVsIGNvbG9yIGFuZCBhIHBvaW50ZXIKK3RvIHRoZSBuZXh0IHBhbmVsIGluIHRoZSBjeWNsZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlBBTkVMU0hPV0hJREUiIGlkPSJQQU5FTFNIT1dISURFIj4xNi42LgorSGlkaW5nIGFuZCBTaG93aW5nIFBhbmVsczwvYT48L2gzPgorPHA+QSBQYW5lbCBjYW4gYmUgaGlkZGVuIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbiBoaWRlX3BhbmVsKCkuIFRoaXMKK2Z1bmN0aW9uIG1lcmVseSByZW1vdmVzIGl0IGZvcm0gdGhlIHN0YWNrIG9mIHBhbmVscywgdGh1cyBoaWRpbmcgaXQKK29uIHRoZSBzY3JlZW4gb25jZSB5b3UgZG8gdXBkYXRlX3BhbmVscygpIGFuZCBkb3VwZGF0ZSgpLiBJdAorZG9lc24ndCBkZXN0cm95IHRoZSBQQU5FTCBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBoaWRkZW4KK3BhbmVsLiBJdCBjYW4gYmUgc2hvd24gYWdhaW4gYnkgdXNpbmcgdGhlIHNob3dfcGFuZWwoKQorZnVuY3Rpb24uPC9wPgorPHA+VGhlIGZvbGxvd2luZyBwcm9ncmFtIHNob3dzIHRoZSBoaWRpbmcgb2YgcGFuZWxzLiBQcmVzcyAnYScgb3IKKydiJyBvciAnYycgdG8gc2hvdyBvciBoaWRlIGZpcnN0LCBzZWNvbmQgYW5kIHRoaXJkIHdpbmRvd3MKK3Jlc3BlY3RpdmVseS4gSXQgdXNlcyBhIHVzZXIgZGF0YSB3aXRoIGEgc21hbGwgdmFyaWFibGUgaGlkZSwgd2hpY2gKK2tlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHdpbmRvdyBpcyBoaWRkZW4gb3Igbm90LiBGb3Igc29tZSByZWFzb24KK3RoZSBmdW5jdGlvbiA8dmFyIGNsYXNzPSJMSVRFUkFMIj5wYW5lbF9oaWRkZW4oKTwvdmFyPiB3aGljaCB0ZWxscword2hldGhlciBhIHBhbmVsIGlzIGhpZGRlbiBvciBub3QgaXMgbm90IHdvcmtpbmcuIEEgYnVnIHJlcG9ydCB3YXMKK2Fsc28gcHJlc2VudGVkIGJ5IE1pY2hhZWwgQW5kcmVzIDxhIGhyZWY9CisiaHR0cDovL3d3dy5nZW9jcmF3bGVyLmNvbS9hcmNoaXZlcy8zLzM0NC8xOTk5LzkvMC8yNjQzNTQ5LyIKK3RhcmdldD0iX3RvcCI+aGVyZTwvYT48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJQUEFISSIgaWQ9IlBQQUhJIj48L2E+Cis8cD48Yj5FeGFtcGxlIDE3LiBQYW5lbCBIaWRpbmcgYW5kIFNob3dpbmcgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtwYW5lbC5oJmd0OworCit0eXBlZGVmIHN0cnVjdCBfUEFORUxfREFUQSB7CisgICAgICAgIGludCBoaWRlOyAgICAgICAvKiBUUlVFIGlmIHBhbmVsIGlzIGhpZGRlbiAqLworfVBBTkVMX0RBVEE7CisKKyNkZWZpbmUgTkxJTkVTIDEwCisjZGVmaW5lIE5DT0xTIDQwCisKK3ZvaWQgaW5pdF93aW5zKFdJTkRPVyAqKndpbnMsIGludCBuKTsKK3ZvaWQgd2luX3Nob3coV0lORE9XICp3aW4sIGNoYXIgKmxhYmVsLCBpbnQgbGFiZWxfY29sb3IpOwordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sIGludCBzdGFydHksIGludCBzdGFydHgsIGludCB3aWR0aCwgY2hhciAqc3RyaW5nLCBjaHR5cGUgY29sb3IpOworCitpbnQgbWFpbigpCit7ICAgICAgIFdJTkRPVyAqbXlfd2luc1szXTsKKyAgICAgICAgUEFORUwgICpteV9wYW5lbHNbM107CisgICAgICAgIFBBTkVMX0RBVEEgcGFuZWxfZGF0YXNbM107CisgICAgICAgIFBBTkVMX0RBVEEgKnRlbXA7CisgICAgICAgIGludCBjaDsKKworICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhbGwgdGhlIGNvbG9ycyAqLworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigyLCBDT0xPUl9HUkVFTiwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMywgQ09MT1JfQkxVRSwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoNCwgQ09MT1JfQ1lBTiwgQ09MT1JfQkxBQ0spOworCisgICAgICAgIGluaXRfd2lucyhteV93aW5zLCAzKTsKKyAgICAgICAgCisgICAgICAgIC8qIEF0dGFjaCBhIHBhbmVsIHRvIGVhY2ggd2luZG93ICovICAgICAvKiBPcmRlciBpcyBib3R0b20gdXAgKi8KKyAgICAgICAgbXlfcGFuZWxzWzBdID0gbmV3X3BhbmVsKG15X3dpbnNbMF0pOyAgIC8qIFB1c2ggMCwgb3JkZXI6IHN0ZHNjci0wICovCisgICAgICAgIG15X3BhbmVsc1sxXSA9IG5ld19wYW5lbChteV93aW5zWzFdKTsgICAvKiBQdXNoIDEsIG9yZGVyOiBzdGRzY3ItMC0xICovCisgICAgICAgIG15X3BhbmVsc1syXSA9IG5ld19wYW5lbChteV93aW5zWzJdKTsgICAvKiBQdXNoIDIsIG9yZGVyOiBzdGRzY3ItMC0xLTIgKi8KKworICAgICAgICAvKiBJbml0aWFsaXplIHBhbmVsIGRhdGFzIHNheWluZyB0aGF0IG5vdGhpbmcgaXMgaGlkZGVuICovCisgICAgICAgIHBhbmVsX2RhdGFzWzBdLmhpZGUgPSBGQUxTRTsKKyAgICAgICAgcGFuZWxfZGF0YXNbMV0uaGlkZSA9IEZBTFNFOworICAgICAgICBwYW5lbF9kYXRhc1syXS5oaWRlID0gRkFMU0U7CisKKyAgICAgICAgc2V0X3BhbmVsX3VzZXJwdHIobXlfcGFuZWxzWzBdLCAmYW1wO3BhbmVsX2RhdGFzWzBdKTsKKyAgICAgICAgc2V0X3BhbmVsX3VzZXJwdHIobXlfcGFuZWxzWzFdLCAmYW1wO3BhbmVsX2RhdGFzWzFdKTsKKyAgICAgICAgc2V0X3BhbmVsX3VzZXJwdHIobXlfcGFuZWxzWzJdLCAmYW1wO3BhbmVsX2RhdGFzWzJdKTsKKworICAgICAgICAvKiBVcGRhdGUgdGhlIHN0YWNraW5nIG9yZGVyLiAybmQgcGFuZWwgd2lsbCBiZSBvbiB0b3AgKi8KKyAgICAgICAgdXBkYXRlX3BhbmVscygpOworCisgICAgICAgIC8qIFNob3cgaXQgb24gdGhlIHNjcmVlbiAqLworICAgICAgICBhdHRyb24oQ09MT1JfUEFJUig0KSk7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMywgMCwgIlNob3cgb3IgSGlkZSBhIHdpbmRvdyB3aXRoICdhJyhmaXJzdCB3aW5kb3cpICAnYicoU2Vjb25kIFdpbmRvdykgICdjJyhUaGlyZCBXaW5kb3cpIik7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIkYxIHRvIEV4aXQiKTsKKworICAgICAgICBhdHRyb2ZmKENPTE9SX1BBSVIoNCkpOworICAgICAgICBkb3VwZGF0ZSgpOworICAgICAgICAKKyAgICAgICAgd2hpbGUoKGNoID0gZ2V0Y2goKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGNoKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSAnYSc6ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IChQQU5FTF9EQVRBICopcGFuZWxfdXNlcnB0cihteV9wYW5lbHNbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0ZW1wLSZndDtoaWRlID09IEZBTFNFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIGhpZGVfcGFuZWwobXlfcGFuZWxzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLSZndDtoaWRlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgc2hvd19wYW5lbChteV9wYW5lbHNbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAtJmd0O2hpZGUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gKFBBTkVMX0RBVEEgKilwYW5lbF91c2VycHRyKG15X3BhbmVsc1sxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRlbXAtJmd0O2hpZGUgPT0gRkFMU0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgaGlkZV9wYW5lbChteV9wYW5lbHNbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAtJmd0O2hpZGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICBzaG93X3BhbmVsKG15X3BhbmVsc1sxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC0mZ3Q7aGlkZSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAoUEFORUxfREFUQSAqKXBhbmVsX3VzZXJwdHIobXlfcGFuZWxzWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGVtcC0mZ3Q7aGlkZSA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICBoaWRlX3BhbmVsKG15X3BhbmVsc1syXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC0mZ3Q7aGlkZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgIHNob3dfcGFuZWwobXlfcGFuZWxzWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLSZndDtoaWRlID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVwZGF0ZV9wYW5lbHMoKTsKKyAgICAgICAgICAgICAgICBkb3VwZGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGVuZHdpbigpOworICAgICAgICByZXR1cm4gMDsKK30KKworLyogUHV0IGFsbCB0aGUgd2luZG93cyAqLwordm9pZCBpbml0X3dpbnMoV0lORE9XICoqd2lucywgaW50IG4pCit7ICAgICAgIGludCB4LCB5LCBpOworICAgICAgICBjaGFyIGxhYmVsWzgwXTsKKworICAgICAgICB5ID0gMjsKKyAgICAgICAgeCA9IDEwOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuOyArK2kpCisgICAgICAgIHsgICAgICAgd2luc1tpXSA9IG5ld3dpbihOTElORVMsIE5DT0xTLCB5LCB4KTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGxhYmVsLCAiV2luZG93IE51bWJlciAlZCIsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICB3aW5fc2hvdyh3aW5zW2ldLCBsYWJlbCwgaSArIDEpOworICAgICAgICAgICAgICAgIHkgKz0gMzsKKyAgICAgICAgICAgICAgICB4ICs9IDc7CisgICAgICAgIH0KK30KKworLyogU2hvdyB0aGUgd2luZG93IHdpdGggYSBib3JkZXIgYW5kIGEgbGFiZWwgKi8KK3ZvaWQgd2luX3Nob3coV0lORE9XICp3aW4sIGNoYXIgKmxhYmVsLCBpbnQgbGFiZWxfY29sb3IpCit7ICAgICAgIGludCBzdGFydHgsIHN0YXJ0eSwgaGVpZ2h0LCB3aWR0aDsKKworICAgICAgICBnZXRiZWd5eCh3aW4sIHN0YXJ0eSwgc3RhcnR4KTsKKyAgICAgICAgZ2V0bWF4eXgod2luLCBoZWlnaHQsIHdpZHRoKTsKKworICAgICAgICBib3god2luLCAwLCAwKTsKKyAgICAgICAgbXZ3YWRkY2god2luLCAyLCAwLCBBQ1NfTFRFRSk7IAorICAgICAgICBtdndobGluZSh3aW4sIDIsIDEsIEFDU19ITElORSwgd2lkdGggLSAyKTsgCisgICAgICAgIG12d2FkZGNoKHdpbiwgMiwgd2lkdGggLSAxLCBBQ1NfUlRFRSk7IAorICAgICAgICAKKyAgICAgICAgcHJpbnRfaW5fbWlkZGxlKHdpbiwgMSwgMCwgd2lkdGgsIGxhYmVsLCBDT0xPUl9QQUlSKGxhYmVsX2NvbG9yKSk7Cit9CisKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKQoreyAgICAgICBpbnQgbGVuZ3RoLCB4LCB5OworICAgICAgICBmbG9hdCB0ZW1wOworCisgICAgICAgIGlmKHdpbiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHdpbiA9IHN0ZHNjcjsKKyAgICAgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICAgICAgaWYoc3RhcnR4ICE9IDApCisgICAgICAgICAgICAgICAgeCA9IHN0YXJ0eDsKKyAgICAgICAgaWYoc3RhcnR5ICE9IDApCisgICAgICAgICAgICAgICAgeSA9IHN0YXJ0eTsKKyAgICAgICAgaWYod2lkdGggPT0gMCkKKyAgICAgICAgICAgICAgICB3aWR0aCA9IDgwOworCisgICAgICAgIGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICB0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKS8gMjsKKyAgICAgICAgeCA9IHN0YXJ0eCArIChpbnQpdGVtcDsKKyAgICAgICAgd2F0dHJvbih3aW4sIGNvbG9yKTsKKyAgICAgICAgbXZ3cHJpbnR3KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsKKyAgICAgICAgd2F0dHJvZmYod2luLCBjb2xvcik7CisgICAgICAgIHJlZnJlc2goKTsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlBBTkVMQUJPVkUiIGlkPSJQQU5FTEFCT1ZFIj4xNi43LgorcGFuZWxfYWJvdmUoKSBhbmQgcGFuZWxfYmVsb3coKSBGdW5jdGlvbnM8L2E+PC9oMz4KKzxwPlRoZSBmdW5jdGlvbnMgPHZhciBjbGFzcz0iTElURVJBTCI+cGFuZWxfYWJvdmUoKTwvdmFyPiBhbmQKKzx2YXIgY2xhc3M9IkxJVEVSQUwiPnBhbmVsX2JlbG93KCk8L3Zhcj4gY2FuIGJlIHVzZWQgdG8gZmluZCBvdXQKK3RoZSBwYW5lbCBhYm92ZSBhbmQgYmVsb3cgYSBwYW5lbC4gSWYgdGhlIGFyZ3VtZW50IHRvIHRoZXNlCitmdW5jdGlvbnMgaXMgTlVMTCwgdGhlbiB0aGV5IHJldHVybiBhIHBvaW50ZXIgdG8gYm90dG9tIHBhbmVsIGFuZAordG9wIHBhbmVsIHJlc3BlY3RpdmVseS48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iTUVOVVMiIGlkPSJNRU5VUyI+MTcuIE1lbnVzCitMaWJyYXJ5PC9hPjwvaDI+Cis8cD5UaGUgbWVudXMgbGlicmFyeSBwcm92aWRlcyBhIG5pY2UgZXh0ZW5zaW9uIHRvIGJhc2ljIGN1cnNlcywKK3Rocm91Z2ggd2hpY2ggeW91IGNhbiBjcmVhdGUgbWVudXMuIEl0IHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucwordG8gY3JlYXRlIG1lbnVzLiBCdXQgdGhleSBoYXZlIHRvIGJlIGN1c3RvbWl6ZWQgdG8gZ2l2ZSBhIG5pY2VyCitsb29rLCB3aXRoIGNvbG9ycyBldGMuIExldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzLjwvcD4KKzxwPkEgbWVudSBpcyBhIHNjcmVlbiBkaXNwbGF5IHRoYXQgYXNzaXN0cyB0aGUgdXNlciB0byBjaG9vc2Ugc29tZQorc3Vic2V0IG9mIGEgZ2l2ZW4gc2V0IG9mIGl0ZW1zLiBUbyBwdXQgaXQgc2ltcGxlLCBhIG1lbnUgaXMgYQorY29sbGVjdGlvbiBvZiBpdGVtcyBmcm9tIHdoaWNoIG9uZSBvciBtb3JlIGl0ZW1zIGNhbiBiZSBjaG9zZW4uCitTb21lIHJlYWRlcnMgbWlnaHQgbm90IGJlIGF3YXJlIG9mIG11bHRpcGxlIGl0ZW0gc2VsZWN0aW9uCitjYXBhYmlsaXR5LiBNZW51IGxpYnJhcnkgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byB3cml0ZSBtZW51cyBmcm9tCit3aGljaCB0aGUgdXNlciBjYW4gY2hvc2UgbW9yZSB0aGFuIG9uZSBpdGVtIGFzIHRoZSBwcmVmZXJyZWQKK2Nob2ljZS4gVGhpcyBpcyBkZWFsdCB3aXRoIGluIGEgbGF0ZXIgc2VjdGlvbi4gTm93IGl0IGlzIHRpbWUgZm9yCitzb21lIHJ1ZGltZW50cy48L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJNRU5VQkFTSUNTIiBpZD0iTUVOVUJBU0lDUyI+MTcuMS4gVGhlCitCYXNpY3M8L2E+PC9oMz4KKzxwPlRvIGNyZWF0ZSBtZW51cywgeW91IGZpcnN0IGNyZWF0ZSBpdGVtcywgYW5kIHRoZW4gcG9zdCB0aGUgbWVudQordG8gdGhlIGRpc3BsYXkuIEFmdGVyIHRoYXQsIGFsbCB0aGUgcHJvY2Vzc2luZyBvZiB1c2VyIHJlc3BvbnNlcyBpcworZG9uZSBpbiBhbiBlbGVnYW50IGZ1bmN0aW9uIG1lbnVfZHJpdmVyKCkgd2hpY2ggaXMgdGhlIHdvcmsgaG9yc2UKK29mIGFueSBtZW51IHByb2dyYW0uPC9wPgorPHA+VGhlIGdlbmVyYWwgZmxvdyBvZiBjb250cm9sIG9mIGEgbWVudSBwcm9ncmFtIGxvb2tzIGxpa2UKK3RoaXMuPC9wPgorPG9sIHR5cGU9IjEiPgorPGxpPgorPHA+SW5pdGlhbGl6ZSBjdXJzZXM8L3A+Cis8L2xpPgorPGxpPgorPHA+Q3JlYXRlIGl0ZW1zIHVzaW5nIG5ld19pdGVtKCkuIFlvdSBjYW4gc3BlY2lmeSBhIG5hbWUgYW5kCitkZXNjcmlwdGlvbiBmb3IgdGhlIGl0ZW1zLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5DcmVhdGUgdGhlIG1lbnUgd2l0aCBuZXdfbWVudSgpIGJ5IHNwZWNpZnlpbmcgdGhlIGl0ZW1zIHRvIGJlCithdHRhY2hlZCB3aXRoLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5Qb3N0IHRoZSBtZW51IHdpdGggbWVudV9wb3N0KCkgYW5kIHJlZnJlc2ggdGhlIHNjcmVlbi48L3A+Cis8L2xpPgorPGxpPgorPHA+UHJvY2VzcyB0aGUgdXNlciByZXF1ZXN0cyB3aXRoIGEgbG9vcCBhbmQgZG8gbmVjZXNzYXJ5IHVwZGF0ZXMKK3RvIG1lbnUgd2l0aCBtZW51X2RyaXZlci48L3A+Cis8L2xpPgorPGxpPgorPHA+VW5wb3N0IHRoZSBtZW51IHdpdGggbWVudV91bnBvc3QoKTwvcD4KKzwvbGk+Cis8bGk+Cis8cD5GcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIG1lbnUgYnkgZnJlZV9tZW51KCk8L3A+Cis8L2xpPgorPGxpPgorPHA+RnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgaXRlbXMgd2l0aCBmcmVlX2l0ZW0oKTwvcD4KKzwvbGk+Cis8bGk+Cis8cD5FbmQgY3Vyc2VzPC9wPgorPC9saT4KKzwvb2w+Cis8cD5MZXQncyBzZWUgYSBwcm9ncmFtIHdoaWNoIHByaW50cyBhIHNpbXBsZSBtZW51IGFuZCB1cGRhdGVzIHRoZQorY3VycmVudCBzZWxlY3Rpb24gd2l0aCB1cCwgZG93biBhcnJvd3MuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJDT01QSUxFTUVOVVMiIGlkPSJDT01QSUxFTUVOVVMiPjE3LjIuCitDb21waWxpbmcgV2l0aCB0aGUgTWVudSBMaWJyYXJ5PC9hPjwvaDM+Cis8cD5UbyB1c2UgbWVudSBsaWJyYXJ5IGZ1bmN0aW9ucywgeW91IGhhdmUgdG8gaW5jbHVkZSBtZW51LmggYW5kIHRvCitsaW5rIHRoZSBwcm9ncmFtIHdpdGggbWVudSBsaWJyYXJ5IHRoZSBmbGFnIC1sbWVudSBzaG91bGQgYmUgYWRkZWQKK2Fsb25nIHdpdGggLWxuY3Vyc2VzIGluIHRoYXQgb3JkZXIuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICAjaW5jbHVkZSAmbHQ7bWVudS5oJmd0OworICAgIC4KKyAgICAuCisgICAgLgorCisgICAgY29tcGlsZSBhbmQgbGluazogZ2NjICZsdDtwcm9ncmFtIGZpbGUmZ3Q7IC1sbWVudSAtbG5jdXJzZXM8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJNTUVTSSIgaWQ9Ik1NRVNJIj48L2E+Cis8cD48Yj5FeGFtcGxlIDE4LiBNZW51IEJhc2ljczwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtjdXJzZXMuaCZndDsKKyNpbmNsdWRlICZsdDttZW51LmgmZ3Q7CisKKyNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQorI2RlZmluZSBDVFJMRCAgIDQKKworY2hhciAqY2hvaWNlc1tdID0geworICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0IiwKKyAgICAgICAgICAgICAgICAgIH07CisKK2ludCBtYWluKCkKK3sgICAgICAgSVRFTSAqKm15X2l0ZW1zOworICAgICAgICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBNRU5VICpteV9tZW51OworICAgICAgICBpbnQgbl9jaG9pY2VzLCBpOworICAgICAgICBJVEVNICpjdXJfaXRlbTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgICAgIAorICAgICAgICBuX2Nob2ljZXMgPSBBUlJBWV9TSVpFKGNob2ljZXMpOworICAgICAgICBteV9pdGVtcyA9IChJVEVNICoqKWNhbGxvYyhuX2Nob2ljZXMgKyAxLCBzaXplb2YoSVRFTSAqKSk7CisKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgbXlfaXRlbXNbaV0gPSBuZXdfaXRlbShjaG9pY2VzW2ldLCBjaG9pY2VzW2ldKTsKKyAgICAgICAgbXlfaXRlbXNbbl9jaG9pY2VzXSA9IChJVEVNICopTlVMTDsKKworICAgICAgICBteV9tZW51ID0gbmV3X21lbnUoKElURU0gKiopbXlfaXRlbXMpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJGMSB0byBFeGl0Iik7CisgICAgICAgIHBvc3RfbWVudShteV9tZW51KTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIHdoaWxlKChjID0gZ2V0Y2goKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICBzd2l0Y2goYykKKyAgICAgICAgICAgIHsgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX0RPV05fSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9VUF9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgIAorCisgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1swXSk7CisgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1sxXSk7CisgICAgICAgIGZyZWVfbWVudShteV9tZW51KTsKKyAgICAgICAgZW5kd2luKCk7Cit9CisgICAgICAgIDwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPlRoaXMgcHJvZ3JhbSBkZW1vbnN0cmF0ZXMgdGhlIGJhc2ljIGNvbmNlcHRzIGludm9sdmVkIGluCitjcmVhdGluZyBhIG1lbnUgdXNpbmcgbWVudXMgbGlicmFyeS4gRmlyc3Qgd2UgY3JlYXRlIHRoZSBpdGVtcwordXNpbmcgbmV3X2l0ZW0oKSBhbmQgdGhlbiBhdHRhY2ggdGhlbSB0byB0aGUgbWVudSB3aXRoIG5ld19tZW51KCkKK2Z1bmN0aW9uLiBBZnRlciBwb3N0aW5nIHRoZSBtZW51IGFuZCByZWZyZXNoaW5nIHRoZSBzY3JlZW4sIHRoZQorbWFpbiBwcm9jZXNzaW5nIGxvb3Agc3RhcnRzLiBJdCByZWFkcyB1c2VyIGlucHV0IGFuZCB0YWtlcworY29ycmVzcG9uZGluZyBhY3Rpb24uIFRoZSBmdW5jdGlvbiBtZW51X2RyaXZlcigpIGlzIHRoZSBtYWluIHdvcmsKK2hvcnNlIG9mIHRoZSBtZW51IHN5c3RlbS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gdGhpcyBmdW5jdGlvbgordGVsbHMgd2hhdCdzIHRvIGJlIGRvbmUgd2l0aCB0aGUgbWVudS4gQWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXIsCittZW51X2RyaXZlcigpIGRvZXMgdGhlIGNvcnJlc3BvbmRpbmcgdGFzay4gVGhlIHZhbHVlIGNhbiBiZSBlaXRoZXIKK2EgbWVudSBuYXZpZ2F0aW9uYWwgcmVxdWVzdCwgYW4gYXNjaWkgY2hhcmFjdGVyLCBvciBhIEtFWV9NT1VTRQorc3BlY2lhbCBrZXkgYXNzb2NpYXRlZCB3aXRoIGEgbW91c2UgZXZlbnQuPC9wPgorPHA+VGhlIG1lbnVfZHJpdmVyIGFjY2VwdHMgZm9sbG93aW5nIG5hdmlnYXRpb25hbCByZXF1ZXN0cy48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj4mIzEzOyAgICAgUkVRX0xFRlRfSVRFTSAgICAgICAgIE1vdmUgbGVmdCB0byBhbiBpdGVtLgorICAgICBSRVFfUklHSFRfSVRFTSAgICAgIE1vdmUgcmlnaHQgdG8gYW4gaXRlbS4KKyAgICAgUkVRX1VQX0lURU0gICAgICAgICBNb3ZlIHVwIHRvIGFuIGl0ZW0uCisgICAgIFJFUV9ET1dOX0lURU0gICAgICAgTW92ZSBkb3duIHRvIGFuIGl0ZW0uCisgICAgIFJFUV9TQ1JfVUxJTkUgICAgICAgU2Nyb2xsIHVwIGEgbGluZS4KKyAgICAgUkVRX1NDUl9ETElORSAgICAgICAgICBTY3JvbGwgZG93biBhIGxpbmUuCisgICAgIFJFUV9TQ1JfRFBBR0UgICAgICAgICAgU2Nyb2xsIGRvd24gYSBwYWdlLgorICAgICBSRVFfU0NSX1VQQUdFICAgICAgICAgU2Nyb2xsIHVwIGEgcGFnZS4KKyAgICAgUkVRX0ZJUlNUX0lURU0gICAgIE1vdmUgdG8gdGhlIGZpcnN0IGl0ZW0uCisgICAgIFJFUV9MQVNUX0lURU0gICAgICAgICBNb3ZlIHRvIHRoZSBsYXN0IGl0ZW0uCisgICAgIFJFUV9ORVhUX0lURU0gICAgICAgICBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgIFJFUV9QUkVWX0lURU0gICAgICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtLiAKKyAgICAgUkVRX1RPR0dMRV9JVEVNICAgICBTZWxlY3QvZGVzZWxlY3QgYW4gaXRlbS4KKyAgICAgUkVRX0NMRUFSX1BBVFRFUk4gICAgIENsZWFyIHRoZSBtZW51IHBhdHRlcm4gYnVmZmVyLgorICAgICBSRVFfQkFDS19QQVRURVJOICAgICAgRGVsZXRlIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbSB0aGUgcGF0dGVybiBidWZmZXIuCisgICAgIFJFUV9ORVhUX01BVENIICAgICBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gbWF0Y2hpbmcgdGhlIHBhdHRlcm4gbWF0Y2guCisgICAgIFJFUV9QUkVWX01BVENIICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIG1hdGNoLiYjMTM7PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+RG9uJ3QgZ2V0IG92ZXJ3aGVsbWVkIGJ5IHRoZSBudW1iZXIgb2Ygb3B0aW9ucy4gV2Ugd2lsbCBzZWUgdGhlbQorc2xvd2x5IG9uZSBhZnRlciBhbm90aGVyLiBUaGUgb3B0aW9ucyBvZiBpbnRlcmVzdCBpbiB0aGlzIGV4YW1wbGUKK2FyZSBSRVFfVVBfSVRFTSBhbmQgUkVRX0RPV05fSVRFTS4gVGhlc2UgdHdvIG9wdGlvbnMgd2hlbiBwYXNzZWQgdG8KK21lbnVfZHJpdmVyLCBtZW51IGRyaXZlciB1cGRhdGVzIHRoZSBjdXJyZW50IGl0ZW0gdG8gb25lIGl0ZW0gdXAgb3IKK2Rvd24gcmVzcGVjdGl2ZWx5LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUVOVURSSVZFUiIgaWQ9Ik1FTlVEUklWRVIiPjE3LjMuIE1lbnUKK0RyaXZlcjogVGhlIHdvcmsgaG9yc2Ugb2YgdGhlIG1lbnUgc3lzdGVtPC9hPjwvaDM+Cis8cD5BcyB5b3UgaGF2ZSBzZWVuIGluIHRoZSBhYm92ZSBleGFtcGxlLCBtZW51X2RyaXZlciBwbGF5cyBhbgoraW1wb3J0YW50IHJvbGUgaW4gdXBkYXRpbmcgdGhlIG1lbnUuIEl0IGlzIHZlcnkgaW1wb3J0YW50IHRvCit1bmRlcnN0YW5kIHZhcmlvdXMgb3B0aW9ucyBpdCB0YWtlcyBhbmQgd2hhdCB0aGV5IGRvLiBBcyBleHBsYWluZWQKK2Fib3ZlLCB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byBtZW51X2RyaXZlcigpIGNhbiBiZSBlaXRoZXIgYQorbmF2aWdhdGlvbmFsIHJlcXVlc3QsIGEgcHJpbnRhYmxlIGNoYXJhY3RlciBvciBhIEtFWV9NT1VTRSBrZXkuCitMZXQncyBkaXNzZWN0IHRoZSBkaWZmZXJlbnQgbmF2aWdhdGlvbmFsIHJlcXVlc3RzLjwvcD4KKzx1bD4KKzxsaT4KKzxwPjxlbT5SRVFfTEVGVF9JVEVNIGFuZCBSRVFfUklHSFRfSVRFTTwvZW0+PC9wPgorPHA+QSBNZW51IGNhbiBiZSBkaXNwbGF5ZWQgd2l0aCBtdWx0aXBsZSBjb2x1bW5zIGZvciBtb3JlIHRoYW4gb25lCitpdGVtLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHVzaW5nIHRoZSA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPm1lbnVfZm9ybWF0KCk8L3Zhcj5mdW5jdGlvbi4gV2hlbiBhIG11bHRpIGNvbHVtbmFyIG1lbnUKK2lzIGRpc3BsYXllZCB0aGVzZSByZXF1ZXN0cyBjYXVzZSB0aGUgbWVudSBkcml2ZXIgdG8gbW92ZSB0aGUKK2N1cnJlbnQgc2VsZWN0aW9uIHRvIGxlZnQgb3IgcmlnaHQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfVVBfSVRFTSBhbmQgUkVRX0RPV05fSVRFTTwvZW0+PC9wPgorPHA+VGhlc2UgdHdvIG9wdGlvbnMgeW91IGhhdmUgc2VlbiBpbiB0aGUgYWJvdmUgZXhhbXBsZS4gVGhlc2UKK29wdGlvbnMgd2hlbiBnaXZlbiwgbWFrZXMgdGhlIG1lbnVfZHJpdmVyIHRvIG1vdmUgdGhlIGN1cnJlbnQKK3NlbGVjdGlvbiB0byBhbiBpdGVtIHVwIG9yIGRvd24uPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSXyogb3B0aW9uczwvZW0+PC9wPgorPHA+VGhlIGZvdXIgb3B0aW9ucyBSRVFfU0NSX1VMSU5FLCBSRVFfU0NSX0RMSU5FLCBSRVFfU0NSX0RQQUdFLAorUkVRX1NDUl9VUEFHRSBhcmUgcmVsYXRlZCB0byBzY3JvbGxpbmcuIElmIGFsbCB0aGUgaXRlbXMgaW4gdGhlCittZW51IGNhbm5vdCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lbnUgc3ViIHdpbmRvdywgdGhlbiB0aGUgbWVudSBpcworc2Nyb2xsYWJsZS4gVGhlc2UgcmVxdWVzdHMgY2FuIGJlIGdpdmVuIHRvIHRoZSBtZW51X2RyaXZlciB0byBkbwordGhlIHNjcm9sbGluZyBlaXRoZXIgb25lIGxpbmUgdXAsIGRvd24gb3Igb25lIHBhZ2UgZG93biBvciB1cAorcmVzcGVjdGl2ZWx5LjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0ZJUlNUX0lURU0sIFJFUV9MQVNUX0lURU0sIFJFUV9ORVhUX0lURU0gYW5kCitSRVFfUFJFVl9JVEVNPC9lbT48L3A+Cis8cD5UaGVzZSByZXF1ZXN0cyBhcmUgc2VsZiBleHBsYW5hdG9yeS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9UT0dHTEVfSVRFTTwvZW0+PC9wPgorPHA+VGhpcyByZXF1ZXN0IHdoZW4gZ2l2ZW4sIHRvZ2dsZXMgdGhlIHByZXNlbnQgc2VsZWN0aW9uLiBUaGlzCitvcHRpb24gaXMgdG8gYmUgdXNlZCBvbmx5IGluIGEgbXVsdGkgdmFsdWVkIG1lbnUuIFNvIHRvIHVzZSB0aGlzCityZXF1ZXN0IHRoZSBvcHRpb24gT19PTkVWQUxVRSBtdXN0IGJlIG9mZi4gVGhpcyBvcHRpb24gY2FuIGJlIG1hZGUKK29mZiBvciBvbiB3aXRoIHNldF9tZW51X29wdHMoKS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlBhdHRlcm4gUmVxdWVzdHM8L2VtPjwvcD4KKzxwPkV2ZXJ5IG1lbnUgaGFzIGFuIGFzc29jaWF0ZWQgcGF0dGVybiBidWZmZXIsIHdoaWNoIGlzIHVzZWQgdG8KK2ZpbmQgdGhlIG5lYXJlc3QgbWF0Y2ggdG8gdGhlIGFzY2lpIGNoYXJhY3RlcnMgZW50ZXJlZCBieSB0aGUgdXNlci4KK1doZW5ldmVyIGFzY2lpIGNoYXJhY3RlcnMgYXJlIGdpdmVuIHRvIG1lbnVfZHJpdmVyLCBpdCBwdXRzIGluIHRvCit0aGUgcGF0dGVybiBidWZmZXIuIEl0IGFsc28gdHJpZXMgdG8gZmluZCB0aGUgbmVhcmVzdCBtYXRjaCB0byB0aGUKK3BhdHRlcm4gaW4gdGhlIGl0ZW1zIGxpc3QgYW5kIG1vdmVzIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoYXQgaXRlbS4KK1RoZSByZXF1ZXN0IFJFUV9DTEVBUl9QQVRURVJOIGNsZWFycyB0aGUgcGF0dGVybiBidWZmZXIuIFRoZQorcmVxdWVzdCBSRVFfQkFDS19QQVRURVJOIGRlbGV0ZXMgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpbiB0aGUKK3BhdHRlcm4gYnVmZmVyLiBJbiBjYXNlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSBpdGVtIHRoZW4KK3RoZSBtYXRjaGVkIGl0ZW1zIGNhbiBiZSBjeWNsZWQgdGhyb3VnaCBSRVFfTkVYVF9NQVRDSCBhbmQKK1JFUV9QUkVWX01BVENIIHdoaWNoIG1vdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IGFuZAorcHJldmlvdXMgbWF0Y2hlcyByZXNwZWN0aXZlbHkuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5Nb3VzZSBSZXF1ZXN0czwvZW0+PC9wPgorPHA+SW4gY2FzZSBvZiBLRVlfTU9VU0UgcmVxdWVzdHMsIGFjY29yZGluZyB0byB0aGUgbW91c2UgcG9zaXRpb24KK2FuIGFjdGlvbiBpcyB0YWtlbiBhY2NvcmRpbmdseS4gVGhlIGFjdGlvbiB0byBiZSB0YWtlbiBpcyBleHBsYWluZWQKK2luIHRoZSBtYW4gcGFnZSBhcyw8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iOTAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPjxlbT4gICAgICAgSWYgIHRoZSAgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBLRVlfTU9VU0Ugc3BlY2lhbCBrZXksIHRoZQorICAgICAgIGFzc29jaWF0ZWQgbW91c2UgZXZlbnQgaXMgdHJhbnNsYXRlZCBpbnRvIG9uZSBvZiB0aGUgYWJvdmUKKyAgICAgICBwcmUtZGVmaW5lZCAgcmVxdWVzdHMuICAgQ3VycmVudGx5IG9ubHkgY2xpY2tzIGluIHRoZSB1c2VyCisgICAgICAgd2luZG93IChlLmcuIGluc2lkZSB0aGUgbWVudSBkaXNwbGF5IGFyZWEgb3IgIHRoZSAgZGVjb3JhJnNoeTsKKyAgICAgICB0aW9uICB3aW5kb3cpICBhcmUgaGFuZGxlZC4gSWYgeW91IGNsaWNrIGFib3ZlIHRoZSBkaXNwbGF5CisgICAgICAgcmVnaW9uIG9mIHRoZSBtZW51LCBhIFJFUV9TQ1JfVUxJTkUgaXMgZ2VuZXJhdGVkLCAgaWYgIHlvdQorICAgICAgIGRvdWJsZWNsaWNrICBhICBSRVFfU0NSX1VQQUdFICBpcyAgZ2VuZXJhdGVkICBhbmQgIGlmICB5b3UKKyAgICAgICB0cmlwbGVjbGljayBhIFJFUV9GSVJTVF9JVEVNIGlzIGdlbmVyYXRlZC4gIElmICB5b3UgIGNsaWNrCisgICAgICAgYmVsb3cgIHRoZSAgZGlzcGxheSByZWdpb24gb2YgdGhlIG1lbnUsIGEgUkVRX1NDUl9ETElORSBpcworICAgICAgIGdlbmVyYXRlZCwgaWYgeW91IGRvdWJsZWNsaWNrIGEgUkVRX1NDUl9EUEFHRSBpcyBnZW5lcmF0ZWQKKyAgICAgICBhbmQgIGlmICB5b3UgIHRyaXBsZWNsaWNrIGEgUkVRX0xBU1RfSVRFTSBpcyBnZW5lcmF0ZWQuIElmCisgICAgICAgeW91IGNsaWNrIGF0IGFuIGl0ZW0gaW5zaWRlIHRoZSBkaXNwbGF5IGFyZWEgb2YgdGhlICBtZW51LAorICAgICAgIHRoZSBtZW51IGN1cnNvciBpcyBwb3NpdGlvbmVkIHRvIHRoYXQgaXRlbS48L2VtPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvbGk+Cis8L3VsPgorPHA+RWFjaCBvZiB0aGUgYWJvdmUgcmVxdWVzdHMgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZworbGluZXMgd2l0aCBzZXZlcmFsIGV4YW1wbGVzIHdoZW5ldmVyIGFwcHJvcHJpYXRlLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUVOVVdJTkRPV1MiIGlkPSJNRU5VV0lORE9XUyI+MTcuNC4gTWVudQorV2luZG93czwvYT48L2gzPgorPHA+RXZlcnkgbWVudSBjcmVhdGVkIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdyBhbmQgYSBzdWIgd2luZG93LgorVGhlIG1lbnUgd2luZG93IGRpc3BsYXlzIGFueSB0aXRsZSBvciBib3JkZXIgYXNzb2NpYXRlZCB3aXRoIHRoZQorbWVudS4gVGhlIG1lbnUgc3ViIHdpbmRvdyBkaXNwbGF5cyB0aGUgbWVudSBpdGVtcyBjdXJyZW50bHkKK2F2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLiBCdXQgd2UgZGlkbid0IHNwZWNpZnkgYW55IHdpbmRvdyBvciBzdWIKK3dpbmRvdyBpbiB0aGUgc2ltcGxlIGV4YW1wbGUuIFdoZW4gYSB3aW5kb3cgaXMgbm90IHNwZWNpZmllZCwKK3N0ZHNjciBpcyB0YWtlbiBhcyB0aGUgbWFpbiB3aW5kb3csIGFuZCB0aGVuIG1lbnUgc3lzdGVtIGNhbGN1bGF0ZXMKK3RoZSBzdWIgd2luZG93IHNpemUgcmVxdWlyZWQgZm9yIHRoZSBkaXNwbGF5IG9mIGl0ZW1zLiBUaGVuIGl0ZW1zCithcmUgZGlzcGxheWVkIGluIHRoZSBjYWxjdWxhdGVkIHN1YiB3aW5kb3cuIFNvIGxldCdzIHBsYXkgd2l0aAordGhlc2Ugd2luZG93cyBhbmQgZGlzcGxheSBhIG1lbnUgd2l0aCBhIGJvcmRlciBhbmQgYSB0aXRsZS48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJNTUVXSSIgaWQ9Ik1NRVdJIj48L2E+Cis8cD48Yj5FeGFtcGxlIDE5LiBNZW51IFdpbmRvd3MgVXNhZ2UgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDttZW51LmgmZ3Q7CisKKyNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQorI2RlZmluZSBDVFJMRCAgIDQKKworY2hhciAqY2hvaWNlc1tdID0geworICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopTlVMTCwKKyAgICAgICAgICAgICAgICAgIH07Cit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcik7CisKK2ludCBtYWluKCkKK3sgICAgICAgSVRFTSAqKm15X2l0ZW1zOworICAgICAgICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBNRU5VICpteV9tZW51OworICAgICAgICBXSU5ET1cgKm15X21lbnVfd2luOworICAgICAgICBpbnQgbl9jaG9pY2VzLCBpOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBzdGFydF9jb2xvcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisKKyAgICAgICAgLyogQ3JlYXRlIGl0ZW1zICovCisgICAgICAgIG5fY2hvaWNlcyA9IEFSUkFZX1NJWkUoY2hvaWNlcyk7CisgICAgICAgIG15X2l0ZW1zID0gKElURU0gKiopY2FsbG9jKG5fY2hvaWNlcywgc2l6ZW9mKElURU0gKikpOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuX2Nob2ljZXM7ICsraSkKKyAgICAgICAgICAgICAgICBteV9pdGVtc1tpXSA9IG5ld19pdGVtKGNob2ljZXNbaV0sIGNob2ljZXNbaV0pOworCisgICAgICAgIC8qIENyYXRlIG1lbnUgKi8KKyAgICAgICAgbXlfbWVudSA9IG5ld19tZW51KChJVEVNICoqKW15X2l0ZW1zKTsKKworICAgICAgICAvKiBDcmVhdGUgdGhlIHdpbmRvdyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUgKi8KKyAgICAgICAgbXlfbWVudV93aW4gPSBuZXd3aW4oMTAsIDQwLCA0LCA0KTsKKyAgICAgICAga2V5cGFkKG15X21lbnVfd2luLCBUUlVFKTsKKyAgICAgCisgICAgICAgIC8qIFNldCBtYWluIHdpbmRvdyBhbmQgc3ViIHdpbmRvdyAqLworICAgICAgICBzZXRfbWVudV93aW4obXlfbWVudSwgbXlfbWVudV93aW4pOworICAgICAgICBzZXRfbWVudV9zdWIobXlfbWVudSwgZGVyd2luKG15X21lbnVfd2luLCA2LCAzOCwgMywgMSkpOworCisgICAgICAgIC8qIFNldCBtZW51IG1hcmsgdG8gdGhlIHN0cmluZyAiICogIiAqLworICAgICAgICBzZXRfbWVudV9tYXJrKG15X21lbnUsICIgKiAiKTsKKworICAgICAgICAvKiBQcmludCBhIGJvcmRlciBhcm91bmQgdGhlIG1haW4gd2luZG93IGFuZCBwcmludCBhIHRpdGxlICovCisgICAgICAgIGJveChteV9tZW51X3dpbiwgMCwgMCk7CisgICAgICAgIHByaW50X2luX21pZGRsZShteV9tZW51X3dpbiwgMSwgMCwgNDAsICJNeSBNZW51IiwgQ09MT1JfUEFJUigxKSk7CisgICAgICAgIG12d2FkZGNoKG15X21lbnVfd2luLCAyLCAwLCBBQ1NfTFRFRSk7CisgICAgICAgIG12d2hsaW5lKG15X21lbnVfd2luLCAyLCAxLCBBQ1NfSExJTkUsIDM4KTsKKyAgICAgICAgbXZ3YWRkY2gobXlfbWVudV93aW4sIDIsIDM5LCBBQ1NfUlRFRSk7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIkYxIHRvIGV4aXQiKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICAKKyAgICAgICAgLyogUG9zdCB0aGUgbWVudSAqLworICAgICAgICBwb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIHdyZWZyZXNoKG15X21lbnVfd2luKTsKKworICAgICAgICB3aGlsZSgoYyA9IHdnZXRjaChteV9tZW51X3dpbikpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX0RPV05fSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9VUF9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdyZWZyZXNoKG15X21lbnVfd2luKTsKKyAgICAgICAgfSAgICAgICAKKworICAgICAgICAvKiBVbnBvc3QgYW5kIGZyZWUgYWxsIHRoZSBtZW1vcnkgdGFrZW4gdXAgKi8KKyAgICAgICAgdW5wb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIGZyZWVfbWVudShteV9tZW51KTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgZnJlZV9pdGVtKG15X2l0ZW1zW2ldKTsKKyAgICAgICAgZW5kd2luKCk7Cit9CisKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKQoreyAgICAgICBpbnQgbGVuZ3RoLCB4LCB5OworICAgICAgICBmbG9hdCB0ZW1wOworCisgICAgICAgIGlmKHdpbiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHdpbiA9IHN0ZHNjcjsKKyAgICAgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICAgICAgaWYoc3RhcnR4ICE9IDApCisgICAgICAgICAgICAgICAgeCA9IHN0YXJ0eDsKKyAgICAgICAgaWYoc3RhcnR5ICE9IDApCisgICAgICAgICAgICAgICAgeSA9IHN0YXJ0eTsKKyAgICAgICAgaWYod2lkdGggPT0gMCkKKyAgICAgICAgICAgICAgICB3aWR0aCA9IDgwOworCisgICAgICAgIGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICB0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKS8gMjsKKyAgICAgICAgeCA9IHN0YXJ0eCArIChpbnQpdGVtcDsKKyAgICAgICAgd2F0dHJvbih3aW4sIGNvbG9yKTsKKyAgICAgICAgbXZ3cHJpbnR3KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsKKyAgICAgICAgd2F0dHJvZmYod2luLCBjb2xvcik7CisgICAgICAgIHJlZnJlc2goKTsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5UaGlzIGV4YW1wbGUgY3JlYXRlcyBhIG1lbnUgd2l0aCBhIHRpdGxlLCBib3JkZXIsIGEgZmFuY3kgbGluZQorc2VwYXJhdGluZyB0aXRsZSBhbmQgdGhlIGl0ZW1zLiBBcyB5b3UgY2FuIHNlZSwgaW4gb3JkZXIgdG8gYXR0YWNoCithIHdpbmRvdyB0byBhIG1lbnUgdGhlIGZ1bmN0aW9uIHNldF9tZW51X3dpbigpIGhhcyB0byBiZSB1c2VkLiBUaGVuCit3ZSBhdHRhY2ggdGhlIHN1YiB3aW5kb3cgYWxzby4gVGhpcyBkaXNwbGF5cyB0aGUgaXRlbXMgaW4gdGhlIHN1Ygord2luZG93LiBZb3UgY2FuIGFsc28gc2V0IHRoZSBtYXJrIHN0cmluZyB3aGljaCBnZXRzIGRpc3BsYXllZCB0bwordGhlIGxlZnQgb2YgdGhlIHNlbGVjdGVkIGl0ZW0gd2l0aCBzZXRfbWVudV9tYXJrKCkuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJTQ1JPTExNRU5VUyIgaWQ9IlNDUk9MTE1FTlVTIj4xNy41LgorU2Nyb2xsaW5nIE1lbnVzPC9hPjwvaDM+Cis8cD5JZiB0aGUgc3ViIHdpbmRvdyBnaXZlbiBmb3IgYSB3aW5kb3cgaXMgbm90IGJpZyBlbm91Z2ggdG8gc2hvdworYWxsIHRoZSBpdGVtcywgdGhlbiB0aGUgbWVudSB3aWxsIGJlIHNjcm9sbGFibGUuIFdoZW4geW91IGFyZSBvbgordGhlIGxhc3QgaXRlbSBpbiB0aGUgcHJlc2VudCBsaXN0LCBpZiB5b3Ugc2VuZCBSRVFfRE9XTl9JVEVNLCBpdAorZ2V0cyB0cmFuc2xhdGVkIGludG8gUkVRX1NDUl9ETElORSBhbmQgdGhlIG1lbnUgc2Nyb2xscyBieSBvbmUKK2l0ZW0uIFlvdSBjYW4gbWFudWFsbHkgZ2l2ZSBSRVFfU0NSXyBvcGVyYXRpb25zIHRvIGRvIHNjcm9sbGluZy4KK0xldCdzIHNlZSBob3cgaXQgY2FuIGJlIGRvbmUuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iTU1FU0MiIGlkPSJNTUVTQyI+PC9hPgorPHA+PGI+RXhhbXBsZSAyMC4gU2Nyb2xsaW5nIE1lbnVzIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7Y3Vyc2VzLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bWVudS5oJmd0OworCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNkZWZpbmUgQ1RSTEQgICA0CisKK2NoYXIgKmNob2ljZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDgiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4aXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilOVUxMLAorICAgICAgICAgICAgICAgICAgfTsKK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLCBpbnQgc3RhcnR5LCBpbnQgc3RhcnR4LCBpbnQgd2lkdGgsIGNoYXIgKnN0cmluZywgY2h0eXBlIGNvbG9yKTsKKworaW50IG1haW4oKQoreyAgICAgICBJVEVNICoqbXlfaXRlbXM7CisgICAgICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1FTlUgKm15X21lbnU7CisgICAgICAgIFdJTkRPVyAqbXlfbWVudV93aW47CisgICAgICAgIGludCBuX2Nob2ljZXMsIGk7CisgICAgICAgIAorICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIHN0YXJ0X2NvbG9yKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDIsIENPTE9SX0NZQU4sIENPTE9SX0JMQUNLKTsKKworICAgICAgICAvKiBDcmVhdGUgaXRlbXMgKi8KKyAgICAgICAgbl9jaG9pY2VzID0gQVJSQVlfU0laRShjaG9pY2VzKTsKKyAgICAgICAgbXlfaXRlbXMgPSAoSVRFTSAqKiljYWxsb2Mobl9jaG9pY2VzLCBzaXplb2YoSVRFTSAqKSk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICAgICAgICAgIG15X2l0ZW1zW2ldID0gbmV3X2l0ZW0oY2hvaWNlc1tpXSwgY2hvaWNlc1tpXSk7CisKKyAgICAgICAgLyogQ3JhdGUgbWVudSAqLworICAgICAgICBteV9tZW51ID0gbmV3X21lbnUoKElURU0gKiopbXlfaXRlbXMpOworCisgICAgICAgIC8qIENyZWF0ZSB0aGUgd2luZG93IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudSAqLworICAgICAgICBteV9tZW51X3dpbiA9IG5ld3dpbigxMCwgNDAsIDQsIDQpOworICAgICAgICBrZXlwYWQobXlfbWVudV93aW4sIFRSVUUpOworICAgICAKKyAgICAgICAgLyogU2V0IG1haW4gd2luZG93IGFuZCBzdWIgd2luZG93ICovCisgICAgICAgIHNldF9tZW51X3dpbihteV9tZW51LCBteV9tZW51X3dpbik7CisgICAgICAgIHNldF9tZW51X3N1YihteV9tZW51LCBkZXJ3aW4obXlfbWVudV93aW4sIDYsIDM4LCAzLCAxKSk7CisgICAgICAgIHNldF9tZW51X2Zvcm1hdChteV9tZW51LCA1LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAvKiBTZXQgbWVudSBtYXJrIHRvIHRoZSBzdHJpbmcgIiAqICIgKi8KKyAgICAgICAgc2V0X21lbnVfbWFyayhteV9tZW51LCAiICogIik7CisKKyAgICAgICAgLyogUHJpbnQgYSBib3JkZXIgYXJvdW5kIHRoZSBtYWluIHdpbmRvdyBhbmQgcHJpbnQgYSB0aXRsZSAqLworICAgICAgICBib3gobXlfbWVudV93aW4sIDAsIDApOworICAgICAgICBwcmludF9pbl9taWRkbGUobXlfbWVudV93aW4sIDEsIDAsIDQwLCAiTXkgTWVudSIsIENPTE9SX1BBSVIoMSkpOworICAgICAgICBtdndhZGRjaChteV9tZW51X3dpbiwgMiwgMCwgQUNTX0xURUUpOworICAgICAgICBtdndobGluZShteV9tZW51X3dpbiwgMiwgMSwgQUNTX0hMSU5FLCAzOCk7CisgICAgICAgIG12d2FkZGNoKG15X21lbnVfd2luLCAyLCAzOSwgQUNTX1JURUUpOworICAgICAgICAKKyAgICAgICAgLyogUG9zdCB0aGUgbWVudSAqLworICAgICAgICBwb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIHdyZWZyZXNoKG15X21lbnVfd2luKTsKKyAgICAgICAgCisgICAgICAgIGF0dHJvbihDT0xPUl9QQUlSKDIpKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXNlIFBhZ2VVcCBhbmQgUGFnZURvd24gdG8gc2NvbGwgZG93biBvciB1cCBhIHBhZ2Ugb2YgaXRlbXMiKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAxLCAwLCAiQXJyb3cgS2V5cyB0byBuYXZpZ2F0ZSAoRjEgdG8gRXhpdCkiKTsKKyAgICAgICAgYXR0cm9mZihDT0xPUl9QQUlSKDIpKTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIHdoaWxlKChjID0gd2dldGNoKG15X21lbnVfd2luKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfRE9XTl9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1VQX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX05QQUdFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfU0NSX0RQQUdFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9QUEFHRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1NDUl9VUEFHRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3cmVmcmVzaChteV9tZW51X3dpbik7CisgICAgICAgIH0gICAgICAgCisKKyAgICAgICAgLyogVW5wb3N0IGFuZCBmcmVlIGFsbCB0aGUgbWVtb3J5IHRha2VuIHVwICovCisgICAgICAgIHVucG9zdF9tZW51KG15X21lbnUpOworICAgICAgICBmcmVlX21lbnUobXlfbWVudSk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICAgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1tpXSk7CisgICAgICAgIGVuZHdpbigpOworfQorCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcikKK3sgICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKyAgICAgICAgZmxvYXQgdGVtcDsKKworICAgICAgICBpZih3aW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB3aW4gPSBzdGRzY3I7CisgICAgICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgICAgIGlmKHN0YXJ0eCAhPSAwKQorICAgICAgICAgICAgICAgIHggPSBzdGFydHg7CisgICAgICAgIGlmKHN0YXJ0eSAhPSAwKQorICAgICAgICAgICAgICAgIHkgPSBzdGFydHk7CisgICAgICAgIGlmKHdpZHRoID09IDApCisgICAgICAgICAgICAgICAgd2lkdGggPSA4MDsKKworICAgICAgICBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkvIDI7CisgICAgICAgIHggPSBzdGFydHggKyAoaW50KXRlbXA7CisgICAgICAgIHdhdHRyb24od2luLCBjb2xvcik7CisgICAgICAgIG12d3ByaW50dyh3aW4sIHksIHgsICIlcyIsIHN0cmluZyk7CisgICAgICAgIHdhdHRyb2ZmKHdpbiwgY29sb3IpOworICAgICAgICByZWZyZXNoKCk7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+VGhpcyBwcm9ncmFtIGlzIHNlbGYtZXhwbGFuYXRvcnkuIEluIHRoaXMgZXhhbXBsZSB0aGUgbnVtYmVyIG9mCitjaG9pY2VzIGhhcyBiZWVuIGluY3JlYXNlZCB0byB0ZW4sIHdoaWNoIGlzIGxhcmdlciB0aGFuIG91ciBzdWIKK3dpbmRvdyBzaXplIHdoaWNoIGNhbiBob2xkIDYgaXRlbXMuIFRoaXMgbWVzc2FnZSBoYXMgdG8gYmUKK2V4cGxpY2l0bHkgY29udmV5ZWQgdG8gdGhlIG1lbnUgc3lzdGVtIHdpdGggdGhlIGZ1bmN0aW9uCitzZXRfbWVudV9mb3JtYXQoKS4gSW4gaGVyZSB3ZSBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygcm93cyBhbmQKK2NvbHVtbnMgd2Ugd2FudCB0byBiZSBkaXNwbGF5ZWQgZm9yIGEgc2luZ2xlIHBhZ2UuIFdlIGNhbiBzcGVjaWZ5CithbnkgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIHNob3duLCBpbiB0aGUgcm93cyB2YXJpYWJsZXMsIGlmIGl0IGlzCitsZXNzIHRoYW4gdGhlIGhlaWdodCBvZiB0aGUgc3ViIHdpbmRvdy4gSWYgdGhlIGtleSBwcmVzc2VkIGJ5IHRoZQordXNlciBpcyBhIFBBR0UgVVAgb3IgUEFHRSBET1dOLCB0aGUgbWVudSBpcyBzY3JvbGxlZCBhIHBhZ2UgZHVlIHRvCit0aGUgcmVxdWVzdHMgKFJFUV9TQ1JfRFBBR0UgYW5kIFJFUV9TQ1JfVVBBR0UpIGdpdmVuIHRvCittZW51X2RyaXZlcigpLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTVVMVElDT0xVTU4iIGlkPSJNVUxUSUNPTFVNTiI+MTcuNi4KK011bHRpIENvbHVtbmFyIE1lbnVzPC9hPjwvaDM+Cis8cD5JbiB0aGUgYWJvdmUgZXhhbXBsZSB5b3UgaGF2ZSBzZWVuIGhvdyB0byB1c2UgdGhlIGZ1bmN0aW9uCitzZXRfbWVudV9mb3JtYXQoKS4gSSBkaWRuJ3QgbWVudGlvbiB3aGF0IHRoZSBjb2xzIHZhcmlhYmxlICh0aGlyZAorcGFyYW1ldGVyKSBkb2VzLiBXZWxsLCBJZiB5b3VyIHN1YiB3aW5kb3cgaXMgd2lkZSBlbm91Z2gsIHlvdSBjYW4KK29wdCB0byBkaXNwbGF5IG1vcmUgdGhhbiBvbmUgaXRlbSBwZXIgcm93LiBUaGlzIGNhbiBiZSBzcGVjaWZpZWQgaW4KK3RoZSBjb2xzIHZhcmlhYmxlLiBUbyBtYWtlIHRoaW5ncyBzaW1wbGVyLCB0aGUgZm9sbG93aW5nIGV4YW1wbGUKK2RvZXNuJ3Qgc2hvdyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBpdGVtcy48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJNTUVNVUNPIiBpZD0iTU1FTVVDTyI+PC9hPgorPHA+PGI+RXhhbXBsZSAyMS4gTWlsdCBDb2x1bW5hciBNZW51cyBFeGFtcGxlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O2N1cnNlcy5oJmd0OworI2luY2x1ZGUgJmx0O21lbnUuaCZndDsKKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisjZGVmaW5lIENUUkxEICAgNAorCitjaGFyICpjaG9pY2VzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDEiLCAiQ2hvaWNlIDIiLCAiQ2hvaWNlIDMiLCAiQ2hvaWNlIDQiLCAiQ2hvaWNlIDUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA2IiwgIkNob2ljZSA3IiwgIkNob2ljZSA4IiwgIkNob2ljZSA5IiwgIkNob2ljZSAxMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDExIiwgIkNob2ljZSAxMiIsICJDaG9pY2UgMTMiLCAiQ2hvaWNlIDE0IiwgIkNob2ljZSAxNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDE2IiwgIkNob2ljZSAxNyIsICJDaG9pY2UgMTgiLCAiQ2hvaWNlIDE5IiwgIkNob2ljZSAyMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKU5VTEwsCisgICAgICAgICAgICAgICAgICB9OworCitpbnQgbWFpbigpCit7ICAgICAgIElURU0gKipteV9pdGVtczsKKyAgICAgICAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTUVOVSAqbXlfbWVudTsKKyAgICAgICAgV0lORE9XICpteV9tZW51X3dpbjsKKyAgICAgICAgaW50IG5fY2hvaWNlcywgaTsKKyAgICAgICAgCisgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzICovCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMiwgQ09MT1JfQ1lBTiwgQ09MT1JfQkxBQ0spOworCisgICAgICAgIC8qIENyZWF0ZSBpdGVtcyAqLworICAgICAgICBuX2Nob2ljZXMgPSBBUlJBWV9TSVpFKGNob2ljZXMpOworICAgICAgICBteV9pdGVtcyA9IChJVEVNICoqKWNhbGxvYyhuX2Nob2ljZXMsIHNpemVvZihJVEVNICopKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgbXlfaXRlbXNbaV0gPSBuZXdfaXRlbShjaG9pY2VzW2ldLCBjaG9pY2VzW2ldKTsKKworICAgICAgICAvKiBDcmF0ZSBtZW51ICovCisgICAgICAgIG15X21lbnUgPSBuZXdfbWVudSgoSVRFTSAqKilteV9pdGVtcyk7CisKKyAgICAgICAgLyogU2V0IG1lbnUgb3B0aW9uIG5vdCB0byBzaG93IHRoZSBkZXNjcmlwdGlvbiAqLworICAgICAgICBtZW51X29wdHNfb2ZmKG15X21lbnUsIE9fU0hPV0RFU0MpOworCisgICAgICAgIC8qIENyZWF0ZSB0aGUgd2luZG93IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudSAqLworICAgICAgICBteV9tZW51X3dpbiA9IG5ld3dpbigxMCwgNzAsIDQsIDQpOworICAgICAgICBrZXlwYWQobXlfbWVudV93aW4sIFRSVUUpOworICAgICAKKyAgICAgICAgLyogU2V0IG1haW4gd2luZG93IGFuZCBzdWIgd2luZG93ICovCisgICAgICAgIHNldF9tZW51X3dpbihteV9tZW51LCBteV9tZW51X3dpbik7CisgICAgICAgIHNldF9tZW51X3N1YihteV9tZW51LCBkZXJ3aW4obXlfbWVudV93aW4sIDYsIDY4LCAzLCAxKSk7CisgICAgICAgIHNldF9tZW51X2Zvcm1hdChteV9tZW51LCA1LCAzKTsKKyAgICAgICAgc2V0X21lbnVfbWFyayhteV9tZW51LCAiICogIik7CisKKyAgICAgICAgLyogUHJpbnQgYSBib3JkZXIgYXJvdW5kIHRoZSBtYWluIHdpbmRvdyBhbmQgcHJpbnQgYSB0aXRsZSAqLworICAgICAgICBib3gobXlfbWVudV93aW4sIDAsIDApOworICAgICAgICAKKyAgICAgICAgYXR0cm9uKENPTE9SX1BBSVIoMikpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDMsIDAsICJVc2UgUGFnZVVwIGFuZCBQYWdlRG93biB0byBzY3JvbGwiKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXNlIEFycm93IEtleXMgdG8gbmF2aWdhdGUgKEYxIHRvIEV4aXQpIik7CisgICAgICAgIGF0dHJvZmYoQ09MT1JfUEFJUigyKSk7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICAvKiBQb3N0IHRoZSBtZW51ICovCisgICAgICAgIHBvc3RfbWVudShteV9tZW51KTsKKyAgICAgICAgd3JlZnJlc2gobXlfbWVudV93aW4pOworICAgICAgICAKKyAgICAgICAgd2hpbGUoKGMgPSB3Z2V0Y2gobXlfbWVudV93aW4pKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9ET1dOX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfVVBfSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX0xFRlRfSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfUklHSFQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9SSUdIVF9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9OUEFHRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1NDUl9EUEFHRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfUFBBR0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9TQ1JfVVBBR0UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd3JlZnJlc2gobXlfbWVudV93aW4pOworICAgICAgICB9ICAgICAgIAorCisgICAgICAgIC8qIFVucG9zdCBhbmQgZnJlZSBhbGwgdGhlIG1lbW9yeSB0YWtlbiB1cCAqLworICAgICAgICB1bnBvc3RfbWVudShteV9tZW51KTsKKyAgICAgICAgZnJlZV9tZW51KG15X21lbnUpOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuX2Nob2ljZXM7ICsraSkKKyAgICAgICAgICAgICAgICBmcmVlX2l0ZW0obXlfaXRlbXNbaV0pOworICAgICAgICBlbmR3aW4oKTsKK308L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8cD5XYXRjaCB0aGUgZnVuY3Rpb24gY2FsbCB0byBzZXRfbWVudV9mb3JtYXQoKS4gSXQgc3BlY2lmaWVzIHRoZQorbnVtYmVyIG9mIGNvbHVtbnMgdG8gYmUgMywgdGh1cyBkaXNwbGF5aW5nIDMgaXRlbXMgcGVyIHJvdy4gV2UgaGF2ZQorYWxzbyBzd2l0Y2hlZCBvZmYgdGhlIHNob3dpbmcgZGVzY3JpcHRpb25zIHdpdGggdGhlIGZ1bmN0aW9uCittZW51X29wdHNfb2ZmKCkuIFRoZXJlIGFyZSBjb3VwbGUgb2YgZnVuY3Rpb25zIHNldF9tZW51X29wdHMoKSwKK21lbnVfb3B0c19vbigpIGFuZCBtZW51X29wdHMoKSB3aGljaCBjYW4gYmUgdXNlZCB0byBtYW5pcHVsYXRlIG1lbnUKK29wdGlvbnMuIFRoZSBmb2xsb3dpbmcgbWVudSBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPiAgICAgICBPX09ORVZBTFVFCisgICAgICAgICAgICBPbmx5IG9uZSBpdGVtIGNhbiBiZSBzZWxlY3RlZCBmb3IgdGhpcyBtZW51LgorCisgICAgICAgT19TSE9XREVTQworICAgICAgICAgICAgRGlzcGxheSAgdGhlICBpdGVtICBkZXNjcmlwdGlvbnMgIHdoZW4gIHRoZSAgbWVudSAgaXMKKyAgICAgICAgICAgIHBvc3RlZC4KKworICAgICAgIE9fUk9XTUFKT1IKKyAgICAgICAgICAgIERpc3BsYXkgdGhlIG1lbnUgaW4gcm93LW1ham9yIG9yZGVyLgorCisgICAgICAgT19JR05PUkVDQVNFCisgICAgICAgICAgICBJZ25vcmUgdGhlIGNhc2Ugd2hlbiBwYXR0ZXJuLW1hdGNoaW5nLgorCisgICAgICAgT19TSE9XTUFUQ0gKKyAgICAgICAgICAgIE1vdmUgdGhlIGN1cnNvciB0byB3aXRoaW4gdGhlIGl0ZW0gIG5hbWUgIHdoaWxlICBwYXQmc2h5OworICAgICAgICAgICAgdGVybi1tYXRjaGluZy4KKworICAgICAgIE9fTk9OQ1lDTElDCisgICAgICAgICAgICBEb24ndCAgIHdyYXAgICBhcm91bmQgIG5leHQtaXRlbSAgYW5kICBwcmV2aW91cy1pdGVtLAorICAgICAgICAgICAgcmVxdWVzdHMgdG8gdGhlIG90aGVyIGVuZCBvZiB0aGUgbWVudS48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5BbGwgb3B0aW9ucyBhcmUgb24gYnkgZGVmYXVsdC4gWW91IGNhbiBzd2l0Y2ggc3BlY2lmaWMKK2F0dHJpYnV0ZXMgb24gb3Igb2ZmIHdpdGggbWVudV9vcHRzX29uKCkgYW5kIG1lbnVfb3B0c19vZmYoKQorZnVuY3Rpb25zLiBZb3UgY2FuIGFsc28gdXNlIHNldF9tZW51X29wdHMoKSB0byBkaXJlY3RseSBzcGVjaWZ5IHRoZQorb3B0aW9ucy4gVGhlIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgT1IgZWQgdmFsdWUgb2YKK3NvbWUgb2YgdGhvc2UgYWJvdmUgY29uc3RhbnRzLiBUaGUgZnVuY3Rpb24gbWVudV9vcHRzKCkgY2FuIGJlIHVzZWQKK3RvIGZpbmQgb3V0IGEgbWVudSdzIHByZXNlbnQgb3B0aW9ucy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9Ik1VTFRJVkFMVUVNRU5VUyIgaWQ9CisiTVVMVElWQUxVRU1FTlVTIj4xNy43LiBNdWx0aSBWYWx1ZWQgTWVudXM8L2E+PC9oMz4KKzxwPllvdSBtaWdodCBiZSB3b25kZXJpbmcgd2hhdCBpZiB5b3Ugc3dpdGNoIG9mZiB0aGUgb3B0aW9uCitPX09ORVZBTFVFLiBUaGVuIHRoZSBtZW51IGJlY29tZXMgbXVsdGktdmFsdWVkLiBUaGF0IG1lYW5zIHlvdSBjYW4KK3NlbGVjdCBtb3JlIHRoYW4gb25lIGl0ZW0uIFRoaXMgYnJpbmdzIHVzIHRvIHRoZSByZXF1ZXN0CitSRVFfVE9HR0xFX0lURU0uIExldCdzIHNlZSBpdCBpbiBhY3Rpb24uPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iTU1FVE8iIGlkPSJNTUVUTyI+PC9hPgorPHA+PGI+RXhhbXBsZSAyMi4gTXVsdGkgVmFsdWVkIE1lbnVzIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7Y3Vyc2VzLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bWVudS5oJmd0OworCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNkZWZpbmUgQ1RSTEQgICA0CisKK2NoYXIgKmNob2ljZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdCIsCisgICAgICAgICAgICAgICAgICB9OworCitpbnQgbWFpbigpCit7ICAgICAgIElURU0gKipteV9pdGVtczsKKyAgICAgICAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTUVOVSAqbXlfbWVudTsKKyAgICAgICAgaW50IG5fY2hvaWNlcywgaTsKKyAgICAgICAgSVRFTSAqY3VyX2l0ZW07CisgICAgICAgIAorICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLyAKKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgaXRlbXMgKi8KKyAgICAgICAgbl9jaG9pY2VzID0gQVJSQVlfU0laRShjaG9pY2VzKTsKKyAgICAgICAgbXlfaXRlbXMgPSAoSVRFTSAqKiljYWxsb2Mobl9jaG9pY2VzICsgMSwgc2l6ZW9mKElURU0gKikpOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuX2Nob2ljZXM7ICsraSkKKyAgICAgICAgICAgICAgICBteV9pdGVtc1tpXSA9IG5ld19pdGVtKGNob2ljZXNbaV0sIGNob2ljZXNbaV0pOworICAgICAgICBteV9pdGVtc1tuX2Nob2ljZXNdID0gKElURU0gKilOVUxMOworCisgICAgICAgIG15X21lbnUgPSBuZXdfbWVudSgoSVRFTSAqKilteV9pdGVtcyk7CisKKyAgICAgICAgLyogTWFrZSB0aGUgbWVudSBtdWx0aSB2YWx1ZWQgKi8KKyAgICAgICAgbWVudV9vcHRzX29mZihteV9tZW51LCBPX09ORVZBTFVFKTsKKworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDMsIDAsICJVc2UgJmx0O1NQQUNFJmd0OyB0byBzZWxlY3Qgb3IgdW5zZWxlY3QgYW4gaXRlbS4iKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiJmx0O0VOVEVSJmd0OyB0byBzZWUgcHJlc2VudGx5IHNlbGVjdGVkIGl0ZW1zKEYxIHRvIEV4aXQpIik7CisgICAgICAgIHBvc3RfbWVudShteV9tZW51KTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIHdoaWxlKChjID0gZ2V0Y2goKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfRE9XTl9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1VQX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfVE9HR0xFX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6ICAgICAgICAvKiBFbnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICBjaGFyIHRlbXBbMjAwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRFTSAqKml0ZW1zOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gbWVudV9pdGVtcyhteV9tZW51KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFswXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IGl0ZW1fY291bnQobXlfbWVudSk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtX3ZhbHVlKGl0ZW1zW2ldKSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgc3RyY2F0KHRlbXAsIGl0ZW1fbmFtZShpdGVtc1tpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KHRlbXAsICIgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKDIwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXZwcmludHcoMjAsIDAsIHRlbXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gICAgICAgCisKKyAgICAgICAgZnJlZV9pdGVtKG15X2l0ZW1zWzBdKTsKKyAgICAgICAgZnJlZV9pdGVtKG15X2l0ZW1zWzFdKTsKKyAgICAgICAgZnJlZV9tZW51KG15X21lbnUpOworICAgICAgICBlbmR3aW4oKTsKK30KKyAgICAgICAgPC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+V2hldywgQSBsb3Qgb2YgbmV3IGZ1bmN0aW9ucy4gTGV0J3MgdGFrZSB0aGVtIG9uZSBhZnRlciBhbm90aGVyLgorRmlyc3RseSwgdGhlIFJFUV9UT0dHTEVfSVRFTS4gSW4gYSBtdWx0aS12YWx1ZWQgbWVudSwgdGhlIHVzZXIKK3Nob3VsZCBiZSBhbGxvd2VkIHRvIHNlbGVjdCBvciB1biBzZWxlY3QgbW9yZSB0aGFuIG9uZSBpdGVtLiBUaGUKK3JlcXVlc3QgUkVRX1RPR0dMRV9JVEVNIHRvZ2dsZXMgdGhlIHByZXNlbnQgc2VsZWN0aW9uLiBJbiB0aGlzIGNhc2UKK3doZW4gc3BhY2UgaXMgcHJlc3NlZCBSRVFfVE9HR0xFX0lURU0gcmVxdWVzdCBpcyBzZW50IHRvCittZW51X2RyaXZlciB0byBhY2hpZXZlIHRoZSByZXN1bHQuPC9wPgorPHA+Tm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyAmbHQ7RU5URVImZ3Q7IHdlIHNob3cgdGhlIGl0ZW1zIGhlCitwcmVzZW50bHkgc2VsZWN0ZWQuIEZpcnN0IHdlIGZpbmQgb3V0IHRoZSBpdGVtcyBhc3NvY2lhdGVkIHdpdGggdGhlCittZW51IHVzaW5nIHRoZSBmdW5jdGlvbiBtZW51X2l0ZW1zKCkuIFRoZW4gd2UgbG9vcCB0aHJvdWdoIHRoZQoraXRlbXMgdG8gZmluZCBvdXQgaWYgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQgb3Igbm90LiBUaGUgZnVuY3Rpb24KK2l0ZW1fdmFsdWUoKSByZXR1cm5zIFRSVUUgaWYgYW4gaXRlbSBpcyBzZWxlY3RlZC4gVGhlIGZ1bmN0aW9uCitpdGVtX2NvdW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBtZW51LiBUaGUgaXRlbSBuYW1lCitjYW4gYmUgZm91bmQgd2l0aCBpdGVtX25hbWUoKS4gWW91IGNhbiBhbHNvIGZpbmQgdGhlIGRlc2NyaXB0aW9uCithc3NvY2lhdGVkIHdpdGggYW4gaXRlbSB1c2luZyBpdGVtX2Rlc2NyaXB0aW9uKCkuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJNRU5VT1BUIiBpZD0iTUVOVU9QVCI+MTcuOC4gTWVudQorT3B0aW9uczwvYT48L2gzPgorPHA+V2VsbCwgYnkgdGhpcyB0aW1lIHlvdSBtdXN0IGJlIGl0Y2hpbmcgZm9yIHNvbWUgZGlmZmVyZW5jZSBpbgoreW91ciBtZW51LCB3aXRoIGxvdHMgb2YgZnVuY3Rpb25hbGl0eS4gSSBrbm93LiBZb3Ugd2FudCBDb2xvcnMgISEhLgorWW91IHdhbnQgdG8gY3JlYXRlIG5pY2UgbWVudXMgc2ltaWxhciB0byB0aG9zZSB0ZXh0IG1vZGUgPGEgaHJlZj0KKyJodHRwOi8vd3d3LmplcnNleS5uZXQvfmRlYmluam9lL2dhbWVzLyIgdGFyZ2V0PSJfdG9wIj5kb3MKK2dhbWVzPC9hPi4gVGhlIGZ1bmN0aW9ucyBzZXRfbWVudV9mb3JlKCkgYW5kIHNldF9tZW51X2JhY2soKSBjYW4gYmUKK3VzZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHNlbGVjdGVkIGl0ZW0gYW5kIHVuc2VsZWN0ZWQKK2l0ZW0uIFRoZSBuYW1lcyBhcmUgbWlzbGVhZGluZy4gVGhleSBkb24ndCBjaGFuZ2UgbWVudSdzIGZvcmVncm91bmQKK29yIGJhY2tncm91bmQgd2hpY2ggd291bGQgaGF2ZSBiZWVuIHVzZWxlc3MuPC9wPgorPHA+VGhlIGZ1bmN0aW9uIHNldF9tZW51X2dyZXkoKSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGRpc3BsYXkKK2F0dHJpYnV0ZSBmb3IgdGhlIG5vbi1zZWxlY3RhYmxlIGl0ZW1zIGluIHRoZSBtZW51LiBUaGlzIGJyaW5ncyB1cwordG8gdGhlIGludGVyZXN0aW5nIG9wdGlvbiBmb3IgYW4gaXRlbSB0aGUgb25lIGFuZCBvbmx5CitPX1NFTEVDVEFCTEUuIFdlIGNhbiB0dXJuIGl0IG9mZiBieSB0aGUgZnVuY3Rpb24gaXRlbV9vcHRzX29mZigpCithbmQgYWZ0ZXIgdGhhdCB0aGF0IGl0ZW0gaXMgbm90IHNlbGVjdGFibGUuIEl0J3MgbGlrZSBhIGdyYXllZCBpdGVtCitpbiB0aG9zZSBmYW5jeSB3aW5kb3dzIG1lbnVzLiBMZXQncyBwdXQgdGhlc2UgY29uY2VwdHMgaW4gcHJhY3RpY2UKK3dpdGggdGhpcyBleGFtcGxlPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iTU1FQVQiIGlkPSJNTUVBVCI+PC9hPgorPHA+PGI+RXhhbXBsZSAyMy4gTWVudSBPcHRpb25zIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7bWVudS5oJmd0OworCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNkZWZpbmUgQ1RSTEQgICA0CisKK2NoYXIgKmNob2ljZXNbXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdCIsCisgICAgICAgICAgICAgICAgICB9OworCitpbnQgbWFpbigpCit7ICAgICAgIElURU0gKipteV9pdGVtczsKKyAgICAgICAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTUVOVSAqbXlfbWVudTsKKyAgICAgICAgaW50IG5fY2hvaWNlcywgaTsKKyAgICAgICAgSVRFTSAqY3VyX2l0ZW07CisgICAgICAgIAorICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLyAKKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBzdGFydF9jb2xvcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgICAgICBpbml0X3BhaXIoMSwgQ09MT1JfUkVELCBDT0xPUl9CTEFDSyk7CisgICAgICAgIGluaXRfcGFpcigyLCBDT0xPUl9HUkVFTiwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMywgQ09MT1JfTUFHRU5UQSwgQ09MT1JfQkxBQ0spOworCisgICAgICAgIC8qIEluaXRpYWxpemUgaXRlbXMgKi8KKyAgICAgICAgbl9jaG9pY2VzID0gQVJSQVlfU0laRShjaG9pY2VzKTsKKyAgICAgICAgbXlfaXRlbXMgPSAoSVRFTSAqKiljYWxsb2Mobl9jaG9pY2VzICsgMSwgc2l6ZW9mKElURU0gKikpOworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBuX2Nob2ljZXM7ICsraSkKKyAgICAgICAgICAgICAgICBteV9pdGVtc1tpXSA9IG5ld19pdGVtKGNob2ljZXNbaV0sIGNob2ljZXNbaV0pOworICAgICAgICBteV9pdGVtc1tuX2Nob2ljZXNdID0gKElURU0gKilOVUxMOworICAgICAgICBpdGVtX29wdHNfb2ZmKG15X2l0ZW1zWzNdLCBPX1NFTEVDVEFCTEUpOworICAgICAgICBpdGVtX29wdHNfb2ZmKG15X2l0ZW1zWzZdLCBPX1NFTEVDVEFCTEUpOworCisgICAgICAgIC8qIENyZWF0ZSBtZW51ICovCisgICAgICAgIG15X21lbnUgPSBuZXdfbWVudSgoSVRFTSAqKilteV9pdGVtcyk7CisKKyAgICAgICAgLyogU2V0IGZvcmUgZ3JvdW5kIGFuZCBiYWNrIGdyb3VuZCBvZiB0aGUgbWVudSAqLworICAgICAgICBzZXRfbWVudV9mb3JlKG15X21lbnUsIENPTE9SX1BBSVIoMSkgfCBBX1JFVkVSU0UpOworICAgICAgICBzZXRfbWVudV9iYWNrKG15X21lbnUsIENPTE9SX1BBSVIoMikpOworICAgICAgICBzZXRfbWVudV9ncmV5KG15X21lbnUsIENPTE9SX1BBSVIoMykpOworCisgICAgICAgIC8qIFBvc3QgdGhlIG1lbnUgKi8KKyAgICAgICAgbXZwcmludHcoTElORVMgLSAzLCAwLCAiUHJlc3MgJmx0O0VOVEVSJmd0OyB0byBzZWUgdGhlIG9wdGlvbiBzZWxlY3RlZCIpOworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJVcCBhbmQgRG93biBhcnJvdyBrZXlzIHRvIG5hdmlhZ2UgKEYxIHRvIEV4aXQpIik7CisgICAgICAgIHBvc3RfbWVudShteV9tZW51KTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIHdoaWxlKChjID0gZ2V0Y2goKSkgIT0gS0VZX0YoMSkpCisgICAgICAgIHsgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51X2RyaXZlcihteV9tZW51LCBSRVFfRE9XTl9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX1VQX0lURU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8qIEVudGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoMjAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdnByaW50dygyMCwgMCwgIkl0ZW0gc2VsZWN0ZWQgaXMgOiAlcyIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lKGN1cnJlbnRfaXRlbShteV9tZW51KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NfbWVudV9jdXJzb3IobXlfbWVudSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAKKyAgICAgICAgdW5wb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIGZvcihpID0gMDsgaSAmbHQ7IG5fY2hvaWNlczsgKytpKQorICAgICAgICAgICAgICAgIGZyZWVfaXRlbShteV9pdGVtc1tpXSk7CisgICAgICAgIGZyZWVfbWVudShteV9tZW51KTsKKyAgICAgICAgZW5kd2luKCk7Cit9CisgICAgICAgIDwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUVOVVVTRVJQVFIiIGlkPSJNRU5VVVNFUlBUUiI+MTcuOS4gVGhlCit1c2VmdWwgVXNlciBQb2ludGVyPC9hPjwvaDM+Cis8cD5XZSBjYW4gYXNzb2NpYXRlIGEgdXNlciBwb2ludGVyIHdpdGggZWFjaCBpdGVtIGluIHRoZSBtZW51LiBJdAord29ya3MgdGhlIHNhbWUgd2F5IGFzIHVzZXIgcG9pbnRlciBpbiBwYW5lbHMuIEl0J3Mgbm90IHRvdWNoZWQgYnkKK21lbnUgc3lzdGVtLiBZb3UgY2FuIHN0b3JlIGFueSB0aGluZyB5b3UgbGlrZSBpbiB0aGF0LiBJIHVzdWFsbHkKK3VzZSBpdCB0byBzdG9yZSB0aGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbWVudSBvcHRpb24gaXMKK2Nob3NlbiAoSXQncyBzZWxlY3RlZCBhbmQgbWF5IGJlIHRoZSB1c2VyIHByZXNzZWQKKyZsdDtFTlRFUiZndDspOzwvcD4KKzxkaXYgY2xhc3M9IkVYQU1QTEUiPjxhIG5hbWU9Ik1NRVVTIiBpZD0iTU1FVVMiPjwvYT4KKzxwPjxiPkV4YW1wbGUgMjQuIE1lbnUgVXNlciBQb2ludGVyIFVzYWdlPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O2N1cnNlcy5oJmd0OworI2luY2x1ZGUgJmx0O21lbnUuaCZndDsKKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCisjZGVmaW5lIENUUkxEICAgNAorCitjaGFyICpjaG9pY2VzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSAyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNob2ljZSA1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaG9pY2UgNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2hvaWNlIDciLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4aXQiLAorICAgICAgICAgICAgICAgICAgfTsKK3ZvaWQgZnVuYyhjaGFyICpuYW1lKTsKKworaW50IG1haW4oKQoreyAgICAgICBJVEVNICoqbXlfaXRlbXM7CisgICAgICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIE1FTlUgKm15X21lbnU7CisgICAgICAgIGludCBuX2Nob2ljZXMsIGk7CisgICAgICAgIElURU0gKmN1cl9pdGVtOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8gCisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKyAgICAgICAgY2JyZWFrKCk7CisgICAgICAgIG5vZWNobygpOworICAgICAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0spOworICAgICAgICBpbml0X3BhaXIoMiwgQ09MT1JfR1JFRU4sIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDMsIENPTE9SX01BR0VOVEEsIENPTE9SX0JMQUNLKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGl0ZW1zICovCisgICAgICAgIG5fY2hvaWNlcyA9IEFSUkFZX1NJWkUoY2hvaWNlcyk7CisgICAgICAgIG15X2l0ZW1zID0gKElURU0gKiopY2FsbG9jKG5fY2hvaWNlcyArIDEsIHNpemVvZihJVEVNICopKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgIHsgICAgICAgbXlfaXRlbXNbaV0gPSBuZXdfaXRlbShjaG9pY2VzW2ldLCBjaG9pY2VzW2ldKTsKKyAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHVzZXIgcG9pbnRlciAqLworICAgICAgICAgICAgICAgIHNldF9pdGVtX3VzZXJwdHIobXlfaXRlbXNbaV0sIGZ1bmMpOworICAgICAgICB9CisgICAgICAgIG15X2l0ZW1zW25fY2hvaWNlc10gPSAoSVRFTSAqKU5VTEw7CisKKyAgICAgICAgLyogQ3JlYXRlIG1lbnUgKi8KKyAgICAgICAgbXlfbWVudSA9IG5ld19tZW51KChJVEVNICoqKW15X2l0ZW1zKTsKKworICAgICAgICAvKiBQb3N0IHRoZSBtZW51ICovCisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMywgMCwgIlByZXNzICZsdDtFTlRFUiZndDsgdG8gc2VlIHRoZSBvcHRpb24gc2VsZWN0ZWQiKTsKKyAgICAgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiVXAgYW5kIERvd24gYXJyb3cga2V5cyB0byBuYXZpYWdlIChGMSB0byBFeGl0KSIpOworICAgICAgICBwb3N0X21lbnUobXlfbWVudSk7CisgICAgICAgIHJlZnJlc2goKTsKKworICAgICAgICB3aGlsZSgoYyA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICAgIHsgICAgICAgY2FzZSBLRVlfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudV9kcml2ZXIobXlfbWVudSwgUkVRX0RPV05fSVRFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVlfVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVfZHJpdmVyKG15X21lbnUsIFJFUV9VUF9JVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAvKiBFbnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICBJVEVNICpjdXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwKShjaGFyICopOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1cnJlbnRfaXRlbShteV9tZW51KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGl0ZW1fdXNlcnB0cihjdXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKChjaGFyICopaXRlbV9uYW1lKGN1cikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NfbWVudV9jdXJzb3IobXlfbWVudSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgIAorICAgICAgICB1bnBvc3RfbWVudShteV9tZW51KTsKKyAgICAgICAgZm9yKGkgPSAwOyBpICZsdDsgbl9jaG9pY2VzOyArK2kpCisgICAgICAgICAgICAgICAgZnJlZV9pdGVtKG15X2l0ZW1zW2ldKTsKKyAgICAgICAgZnJlZV9tZW51KG15X21lbnUpOworICAgICAgICBlbmR3aW4oKTsKK30KKwordm9pZCBmdW5jKGNoYXIgKm5hbWUpCit7ICAgICAgIG1vdmUoMjAsIDApOworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICBtdnByaW50dygyMCwgMCwgIkl0ZW0gc2VsZWN0ZWQgaXMgOiAlcyIsIG5hbWUpOworfSAgICAgICA8L3NwYW4+PC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iRk9STVMiIGlkPSJGT1JNUyI+MTguIEZvcm1zCitMaWJyYXJ5PC9hPjwvaDI+Cis8cD5XZWxsLiBJZiB5b3UgaGF2ZSBzZWVuIHRob3NlIGZvcm1zIG9uIHdlYiBwYWdlcyB3aGljaCB0YWtlIGlucHV0Citmcm9tIHVzZXJzIGFuZCBkbyB2YXJpb3VzIGtpbmRzIG9mIHRoaW5ncywgeW91IG1pZ2h0IGJlIHdvbmRlcmluZworaG93IHdvdWxkIGFueSBvbmUgY3JlYXRlIHN1Y2ggZm9ybXMgaW4gdGV4dCBtb2RlIGRpc3BsYXkuIEl0J3MKK3F1aXRlIGRpZmZpY3VsdCB0byB3cml0ZSB0aG9zZSBuaWZ0eSBmb3JtcyBpbiBwbGFpbiBuY3Vyc2VzLiBGb3JtcworbGlicmFyeSB0cmllcyB0byBwcm92aWRlIGEgYmFzaWMgZnJhbWUgd29yayB0byBidWlsZCBhbmQgbWFpbnRhaW4KK2Zvcm1zIHdpdGggZWFzZS4gSXQgaGFzIGxvdCBvZiBmZWF0dXJlcyhmdW5jdGlvbnMpIHdoaWNoIG1hbmFnZQordmFsaWRhdGlvbiwgZHluYW1pYyBleHBhbnNpb24gb2YgZmllbGRzIGV0Yy4uIExldCdzIHNlZSBpdCBpbiBmdWxsCitmbG93LjwvcD4KKzxwPkEgZm9ybSBpcyBhIGNvbGxlY3Rpb24gb2YgZmllbGRzOyBlYWNoIGZpZWxkIGNhbiBiZSBlaXRoZXIgYQorbGFiZWwoc3RhdGljIHRleHQpIG9yIGEgZGF0YS1lbnRyeSBsb2NhdGlvbi4gVGhlIGZvcm1zIGFsc28gbGlicmFyeQorcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGRpdmlkZSBmb3JtcyBpbnRvIG11bHRpcGxlIHBhZ2VzLjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkZPUk1CQVNJQ1MiIGlkPSJGT1JNQkFTSUNTIj4xOC4xLiBUaGUKK0Jhc2ljczwvYT48L2gzPgorPHA+Rm9ybXMgYXJlIGNyZWF0ZWQgaW4gbXVjaCB0aGUgc2FtZSB3YXkgYXMgbWVudXMuIEZpcnN0IHRoZQorZmllbGRzIHJlbGF0ZWQgdG8gdGhlIGZvcm0gYXJlIGNyZWF0ZWQgd2l0aCBuZXdfZmllbGQoKS4gWW91IGNhbgorc2V0IG9wdGlvbnMgZm9yIHRoZSBmaWVsZHMsIHNvIHRoYXQgdGhleSBjYW4gYmUgZGlzcGxheWVkIHdpdGggc29tZQorZmFuY3kgYXR0cmlidXRlcywgdmFsaWRhdGVkIGJlZm9yZSB0aGUgZmllbGQgbG9vc2VzIGZvY3VzIGV0Yy4uCitUaGVuIHRoZSBmaWVsZHMgYXJlIGF0dGFjaGVkIHRvIGZvcm0uIEFmdGVyIHRoaXMsIHRoZSBmb3JtIGNhbiBiZQorcG9zdGVkIHRvIGRpc3BsYXkgYW5kIGlzIHJlYWR5IHRvIHJlY2VpdmUgaW5wdXRzLiBPbiB0aGUgc2ltaWxhcgorbGluZXMgdG8gbWVudV9kcml2ZXIoKSwgdGhlIGZvcm0gaXMgbWFuaXB1bGF0ZWQgd2l0aCBmb3JtX2RyaXZlcigpLgorV2UgY2FuIHNlbmQgcmVxdWVzdHMgdG8gZm9ybV9kcml2ZXIgdG8gbW92ZSBmb2N1cyB0byBhIGNlcnRhaW4KK2ZpZWxkLCBtb3ZlIGN1cnNvciB0byBlbmQgb2YgdGhlIGZpZWxkIGV0Yy4uIEFmdGVyIHRoZSB1c2VyIGVudGVycwordmFsdWVzIGluIHRoZSBmaWVsZHMgYW5kIHZhbGlkYXRpb24gZG9uZSwgZm9ybSBjYW4gYmUgdW5wb3N0ZWQgYW5kCittZW1vcnkgYWxsb2NhdGVkIGNhbiBiZSBmcmVlZC48L3A+Cis8cD5UaGUgZ2VuZXJhbCBmbG93IG9mIGNvbnRyb2wgb2YgYSBmb3JtcyBwcm9ncmFtIGxvb2tzIGxpa2UKK3RoaXMuPC9wPgorPG9sIHR5cGU9IjEiPgorPGxpPgorPHA+SW5pdGlhbGl6ZSBjdXJzZXM8L3A+Cis8L2xpPgorPGxpPgorPHA+Q3JlYXRlIGZpZWxkcyB1c2luZyBuZXdfZmllbGQoKS4gWW91IGNhbiBzcGVjaWZ5IHRoZSBoZWlnaHQgYW5kCit3aWR0aCBvZiB0aGUgZmllbGQsIGFuZCBpdHMgcG9zaXRpb24gb24gdGhlIGZvcm0uPC9wPgorPC9saT4KKzxsaT4KKzxwPkNyZWF0ZSB0aGUgZm9ybXMgd2l0aCBuZXdfZm9ybSgpIGJ5IHNwZWNpZnlpbmcgdGhlIGZpZWxkcyB0byBiZQorYXR0YWNoZWQgd2l0aC48L3A+Cis8L2xpPgorPGxpPgorPHA+UG9zdCB0aGUgZm9ybSB3aXRoIGZvcm1fcG9zdCgpIGFuZCByZWZyZXNoIHRoZSBzY3JlZW4uPC9wPgorPC9saT4KKzxsaT4KKzxwPlByb2Nlc3MgdGhlIHVzZXIgcmVxdWVzdHMgd2l0aCBhIGxvb3AgYW5kIGRvIG5lY2Vzc2FyeSB1cGRhdGVzCit0byBmb3JtIHdpdGggZm9ybV9kcml2ZXIuPC9wPgorPC9saT4KKzxsaT4KKzxwPlVucG9zdCB0aGUgbWVudSB3aXRoIGZvcm1fdW5wb3N0KCk8L3A+Cis8L2xpPgorPGxpPgorPHA+RnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byBtZW51IGJ5IGZyZWVfZm9ybSgpPC9wPgorPC9saT4KKzxsaT4KKzxwPkZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIGl0ZW1zIHdpdGggZnJlZV9maWVsZCgpPC9wPgorPC9saT4KKzxsaT4KKzxwPkVuZCBjdXJzZXM8L3A+Cis8L2xpPgorPC9vbD4KKzxwPkFzIHlvdSBjYW4gc2VlLCB3b3JraW5nIHdpdGggZm9ybXMgbGlicmFyeSBpcyBtdWNoIHNpbWlsYXIgdG8KK2hhbmRsaW5nIG1lbnUgbGlicmFyeS4gVGhlIGZvbGxvd2luZyBleGFtcGxlcyB3aWxsIGV4cGxvcmUgdmFyaW91cworYXNwZWN0cyBvZiBmb3JtIHByb2Nlc3NpbmcuIExldCdzIHN0YXJ0IHRoZSBqb3VybmV5IHdpdGggYSBzaW1wbGUKK2V4YW1wbGUuIGZpcnN0LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQ09NUElMRUZPUk1TIiBpZD0iQ09NUElMRUZPUk1TIj4xOC4yLgorQ29tcGlsaW5nIFdpdGggdGhlIEZvcm1zIExpYnJhcnk8L2E+PC9oMz4KKzxwPlRvIHVzZSBmb3JtcyBsaWJyYXJ5IGZ1bmN0aW9ucywgeW91IGhhdmUgdG8gaW5jbHVkZSBmb3JtLmggYW5kCit0byBsaW5rIHRoZSBwcm9ncmFtIHdpdGggZm9ybXMgbGlicmFyeSB0aGUgZmxhZyAtbGZvcm0gc2hvdWxkIGJlCithZGRlZCBhbG9uZyB3aXRoIC1sbmN1cnNlcyBpbiB0aGF0IG9yZGVyLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj4gICAgI2luY2x1ZGUgJmx0O2Zvcm0uaCZndDsKKyAgICAuCisgICAgLgorICAgIC4KKworICAgIGNvbXBpbGUgYW5kIGxpbms6IGdjYyAmbHQ7cHJvZ3JhbSBmaWxlJmd0OyAtbGZvcm0gLWxuY3Vyc2VzPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iRkZPU0kiIGlkPSJGRk9TSSI+PC9hPgorPHA+PGI+RXhhbXBsZSAyNS4gRm9ybXMgQmFzaWNzPC9iPjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIj48c3BhbiBjbGFzcz0KKyJJTkxJTkVNRURJQU9CSkVDVCI+I2luY2x1ZGUgJmx0O2Zvcm0uaCZndDsKKworaW50IG1haW4oKQoreyAgICAgICBGSUVMRCAqZmllbGRbM107CisgICAgICAgIEZPUk0gICpteV9mb3JtOworICAgICAgICBpbnQgY2g7CisgICAgICAgIAorICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcyAqLworICAgICAgICBpbml0c2NyKCk7CisgICAgICAgIGNicmVhaygpOworICAgICAgICBub2VjaG8oKTsKKyAgICAgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZmllbGRzICovCisgICAgICAgIGZpZWxkWzBdID0gbmV3X2ZpZWxkKDEsIDEwLCA0LCAxOCwgMCwgMCk7CisgICAgICAgIGZpZWxkWzFdID0gbmV3X2ZpZWxkKDEsIDEwLCA2LCAxOCwgMCwgMCk7CisgICAgICAgIGZpZWxkWzJdID0gTlVMTDsKKworICAgICAgICAvKiBTZXQgZmllbGQgb3B0aW9ucyAqLworICAgICAgICBzZXRfZmllbGRfYmFjayhmaWVsZFswXSwgQV9VTkRFUkxJTkUpOyAgLyogUHJpbnQgYSBsaW5lIGZvciB0aGUgb3B0aW9uICAqLworICAgICAgICBmaWVsZF9vcHRzX29mZihmaWVsZFswXSwgT19BVVRPU0tJUCk7ICAgLyogRG9uJ3QgZ28gdG8gbmV4dCBmaWVsZCB3aGVuIHRoaXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpZWxkIGlzIGZpbGxlZCB1cCAgICAgICAgICAgKi8KKyAgICAgICAgc2V0X2ZpZWxkX2JhY2soZmllbGRbMV0sIEFfVU5ERVJMSU5FKTsgCisgICAgICAgIGZpZWxkX29wdHNfb2ZmKGZpZWxkWzFdLCBPX0FVVE9TS0lQKTsKKworICAgICAgICAvKiBDcmVhdGUgdGhlIGZvcm0gYW5kIHBvc3QgaXQgKi8KKyAgICAgICAgbXlfZm9ybSA9IG5ld19mb3JtKGZpZWxkKTsKKyAgICAgICAgcG9zdF9mb3JtKG15X2Zvcm0pOworICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIAorICAgICAgICBtdnByaW50dyg0LCAxMCwgIlZhbHVlIDE6Iik7CisgICAgICAgIG12cHJpbnR3KDYsIDEwLCAiVmFsdWUgMjoiKTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIC8qIExvb3AgdGhyb3VnaCB0byBnZXQgdXNlciByZXF1ZXN0cyAqLworICAgICAgICB3aGlsZSgoY2ggPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHbyB0byBuZXh0IGZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9ORVhUX0ZJRUxEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gdGhlIGVuZCBvZiB0aGUgcHJlc2VudCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVhdmVzIG5pY2VseSBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX0VORF9MSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gcHJldmlvdXMgZmllbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX1BSRVZfRklFTEQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfRU5EX0xJTkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgaXMgYSBub3JtYWwgY2hhcmFjdGVyLCBpdCBnZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIFVuIHBvc3QgZm9ybSBhbmQgZnJlZSB0aGUgbWVtb3J5ICovCisgICAgICAgIHVucG9zdF9mb3JtKG15X2Zvcm0pOworICAgICAgICBmcmVlX2Zvcm0obXlfZm9ybSk7CisgICAgICAgIGZyZWVfZmllbGQoZmllbGRbMF0pOworICAgICAgICBmcmVlX2ZpZWxkKGZpZWxkWzFdKTsgCisKKyAgICAgICAgZW5kd2luKCk7CisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPkFib3ZlIGV4YW1wbGUgaXMgcHJldHR5IHN0cmFpZ2h0IGZvcndhcmQuIEl0IGNyZWF0ZXMgdHdvIGZpZWxkcword2l0aCA8dmFyIGNsYXNzPSJMSVRFUkFMIj5uZXdfZmllbGQoKTwvdmFyPi4gbmV3X2ZpZWxkKCkgdGFrZXMKK2hlaWdodCwgd2lkdGgsIHN0YXJ0eSwgc3RhcnR4LCBudW1iZXIgb2Ygb2Zmc2NyZWVuIHJvd3MgYW5kIG51bWJlcgorb2YgYWRkaXRpb25hbCB3b3JraW5nIGJ1ZmZlcnMuIFRoZSBmaWZ0aCBhcmd1bWVudCBudW1iZXIgb2YKK29mZnNjcmVlbiByb3dzIHNwZWNpZmllcyBob3cgbXVjaCBvZiB0aGUgZmllbGQgdG8gYmUgc2hvd24uIElmIGl0CitpcyB6ZXJvLCB0aGUgZW50aXJlIGZpZWxkIGlzIGFsd2F5cyBkaXNwbGF5ZWQgb3RoZXJ3aXNlIHRoZSBmb3JtCit3aWxsIGJlIHNjcm9sbGFibGUgd2hlbiB0aGUgdXNlciBhY2Nlc3NlcyBub3QgZGlzcGxheWVkIHBhcnRzIG9mCit0aGUgZmllbGQuIFRoZSBmb3JtcyBsaWJyYXJ5IGFsbG9jYXRlcyBvbmUgYnVmZmVyIHBlciBmaWVsZCB0bworc3RvcmUgdGhlIGRhdGEgdXNlciBlbnRlcnMuIFVzaW5nIHRoZSBsYXN0IHBhcmFtZXRlciB0byBuZXdfZmllbGQoKQord2UgY2FuIHNwZWNpZnkgaXQgdG8gYWxsb2NhdGUgc29tZSBhZGRpdGlvbmFsIGJ1ZmZlcnMuIFRoZXNlIGNhbiBiZQordXNlZCBmb3IgYW55IHB1cnBvc2UgeW91IGxpa2UuPC9wPgorPHA+QWZ0ZXIgY3JlYXRpbmcgdGhlIGZpZWxkcywgYmFjayBncm91bmQgYXR0cmlidXRlIG9mIGJvdGggb2YgdGhlbQoraXMgc2V0IHRvIGFuIHVuZGVyc2NvcmUgd2l0aCBzZXRfZmllbGRfYmFjaygpLiBUaGUgQVVUT1NLSVAgb3B0aW9uCitpcyB0dXJuZWQgb2ZmIHVzaW5nIGZpZWxkX29wdHNfb2ZmKCkuIElmIHRoaXMgb3B0aW9uIGlzIHR1cm5lZCBvbiwKK2ZvY3VzIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgZm9ybSBvbmNlIHRoZSBhY3RpdmUgZmllbGQKK2lzIGZpbGxlZCB1cCBjb21wbGV0ZWx5LjwvcD4KKzxwPkFmdGVyIGF0dGFjaGluZyB0aGUgZmllbGRzIHRvIHRoZSBmb3JtLCBpdCBpcyBwb3N0ZWQuIEhlcmUgb24sCit1c2VyIGlucHV0cyBhcmUgcHJvY2Vzc2VkIGluIHRoZSB3aGlsZSBsb29wLCBieSBtYWtpbmcKK2NvcnJlc3BvbmRpbmcgcmVxdWVzdHMgdG8gZm9ybV9kcml2ZXIuIFRoZSBkZXRhaWxzIG9mIGFsbCB0aGUKK3JlcXVlc3RzIHRvIHRoZSBmb3JtX2RyaXZlcigpIGFyZSBleHBsYWluZWQgbGF0ZXIuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJQTEFZRklFTERTIiBpZD0iUExBWUZJRUxEUyI+MTguMy4KK1BsYXlpbmcgd2l0aCBGaWVsZHM8L2E+PC9oMz4KKzxwPkVhY2ggZm9ybSBmaWVsZCBpcyBhc3NvY2lhdGVkIHdpdGggYSBsb3Qgb2YgYXR0cmlidXRlcy4gVGhleSBjYW4KK2JlIG1hbmlwdWxhdGVkIHRvIGdldCB0aGUgcmVxdWlyZWQgZWZmZWN0IGFuZCB0byBoYXZlIGZ1biAhISEuIFNvCit3aHkgd2FpdD88L3A+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJGRVRDSElORk8iIGlkPSJGRVRDSElORk8iPjE4LjMuMS4KK0ZldGNoaW5nIFNpemUgYW5kIExvY2F0aW9uIG9mIEZpZWxkPC9hPjwvaDQ+Cis8cD5UaGUgcGFyYW1ldGVycyB3ZSBoYXZlIGdpdmVuIGF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9mIGEgZmllbGQKK2NhbiBiZSByZXRyaWV2ZWQgd2l0aCBmaWVsZF9pbmZvKCkuIEl0IHJldHVybnMgaGVpZ2h0LCB3aWR0aCwKK3N0YXJ0eSwgc3RhcnR4LCBudW1iZXIgb2Ygb2Zmc2NyZWVuIHJvd3MsIGFuZCBudW1iZXIgb2YgYWRkaXRpb25hbAorYnVmZmVycyBpbnRvIHRoZSBwYXJhbWV0ZXJzIGdpdmVuIHRvIGl0LiBJdCBpcyBhIHNvcnQgb2YgaW52ZXJzZSBvZgorbmV3X2ZpZWxkKCkuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IGZpZWxkX2luZm8oICAgICBGSUVMRCAqZmllbGQsICAgICAgICAgICAgICAvKiBmaWVsZCBmcm9tIHdoaWNoIHRvIGZldGNoICovCisgICAgICAgICAgICAgICAgICAgIGludCAqaGVpZ2h0LCAqaW50IHdpZHRoLCAgIC8qIGZpZWxkIHNpemUgKi8gCisgICAgICAgICAgICAgICAgICAgIGludCAqdG9wLCBpbnQgKmxlZnQsICAgICAgIC8qIHVwcGVyIGxlZnQgY29ybmVyICovCisgICAgICAgICAgICAgICAgICAgIGludCAqb2Zmc2NyZWVuLCAgICAgICAgICAgIC8qIG51bWJlciBvZiBvZmZzY3JlZW4gcm93cyAqLworICAgICAgICAgICAgICAgICAgICBpbnQgKm5idWYpOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygd29ya2luZyBidWZmZXJzICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJNT1ZFRklFTEQiIGlkPSJNT1ZFRklFTEQiPjE4LjMuMi4gTW92aW5nCit0aGUgZmllbGQ8L2E+PC9oND4KKzxwPlRoZSBsb2NhdGlvbiBvZiB0aGUgZmllbGQgY2FuIGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50IHBvc2l0aW9uCit3aXRoIG1vdmVfZmllbGQoKS48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgbW92ZV9maWVsZCggICAgRklFTEQgKmZpZWxkLCAgICAgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCk7ICAgICAgICAvKiBuZXcgdXBwZXItbGVmdCBjb3JuZXIgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5BcyB1c3VhbCwgdGhlIGNoYW5nZWQgcG9zaXRpb24gY2FuIGJlIHF1ZXJpZWQgd2l0aAorZmllbGRfaW5mb3IoKS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkpVU1RJRllGSUVMRCIgaWQ9IkpVU1RJRllGSUVMRCI+MTguMy4zLgorRmllbGQgSnVzdGlmaWNhdGlvbjwvYT48L2g0PgorPHA+VGhlIGp1c3RpZmljYXRpb24gdG8gYmUgZG9uZSBmb3IgdGhlIGZpZWxkIGNhbiBiZSBmaXhlZCB1c2luZwordGhlIGZ1bmN0aW9uIHNldF9maWVsZF9qdXN0KCkuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+ICAgIGludCBzZXRfZmllbGRfanVzdChGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICBpbnQganVzdG1vZGUpOyAgICAgICAgIC8qIG1vZGUgdG8gc2V0ICovCisgICAgaW50IGZpZWxkX2p1c3QoRklFTEQgKmZpZWxkKTsgICAgICAgICAgLyogZmV0Y2gganVzdGlmeSBtb2RlIG9mIGZpZWxkICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGp1c3RpZmljYXRpb24gbW9kZSB2YWx1ZWQgYWNjZXB0ZWQgYW5kIHJldHVybmVkIGJ5IHRoZXNlCitmdW5jdGlvbnMgYXJlIE5PX0pVU1RJRklDQVRJT04sIEpVU1RJRllfUklHSFQsIEpVU1RJRllfTEVGVCwgb3IKK0pVU1RJRllfQ0VOVEVSLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iRklFTERESVNQQVRUUklCIiBpZD0KKyJGSUVMRERJU1BBVFRSSUIiPjE4LjMuNC4gRmllbGQgRGlzcGxheSBBdHRyaWJ1dGVzPC9hPjwvaDQ+Cis8cD5BcyB5b3UgaGF2ZSBzZWVuLCBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgZGlzcGxheSBhdHRyaWJ1dGUgZm9yCit0aGUgZmllbGRzIGNhbiBiZSBzZXQgd2l0aCBzZXRfZmllbGRfZm9yZSgpIGFuZCBzZXRmaWVsZF9iYWNrKCkuCitUaGVzZSBmdW5jdGlvbnMgc2V0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgYXR0cmlidXRlIG9mIHRoZQorZmllbGRzLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHBhZCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBmaWxsZWQKK2luIHRoZSB1bmZpbGxlZCBwb3J0aW9uIG9mIHRoZSBmaWVsZC4gVGhlIHBhZCBjaGFyYWN0ZXIgaXMgc2V0IHdpdGgKK2EgY2FsbCB0byBzZXRfZmllbGRfcGFkKCkuIERlZmF1bHQgcGFkIHZhbHVlIGlzIGEgc3BhY2UuIFRoZQorZnVuY3Rpb25zIGZpZWxkX2ZvcmUoKSwgZmllbGRfYmFjaywgZmllbGRfcGFkKCkgY2FuIGJlIHVzZWQgdG8KK3F1ZXJ5IHRoZSBwcmVzZW50IGZvcmVncm91bmQsIGJhY2tncm91bmQgYXR0cmlidXRlcyBhbmQgcGFkCitjaGFyYWN0ZXIgZm9yIHRoZSBmaWVsZC4gVGhlIGZvbGxvd2luZyBsaXN0IGdpdmVzIHRoZSB1c2FnZSBvZgorZnVuY3Rpb25zLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPiYjMTM7aW50IHNldF9maWVsZF9mb3JlKEZJRUxEICpmaWVsZCwgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2h0eXBlIGF0dHIpOyAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLyAKKworY2h0eXBlIGZpZWxkX2ZvcmUoRklFTEQgKmZpZWxkKTsgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJucyBmb3JlZ3JvdW5kIGF0dHJpYnV0ZSAqLworCitpbnQgc2V0X2ZpZWxkX2JhY2soRklFTEQgKmZpZWxkLCAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBjaHR5cGUgYXR0cik7ICAgICAgICAvKiBhdHRyaWJ1dGUgdG8gc2V0ICovIAorCitjaHR5cGUgZmllbGRfYmFjayhGSUVMRCAqZmllbGQpOyAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm5zIGJhY2tncm91bmQgYXR0cmlidXRlICovCisKK2ludCBzZXRfZmllbGRfcGFkKEZJRUxEICpmaWVsZCwgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgaW50IHBhZCk7ICAgICAgICAgICAgIC8qIHBhZCBjaGFyYWN0ZXIgdG8gc2V0ICovIAorCitjaHR5cGUgZmllbGRfcGFkKEZJRUxEICpmaWVsZCk7ICAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybnMgcHJlc2VudCBwYWQgY2hhcmFjdGVyICovJiMxMzs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaG91Z2ggYWJvdmUgZnVuY3Rpb25zIHNlZW0gcXVpdGUgc2ltcGxlLCB1c2luZyBjb2xvcnMgd2l0aAorc2V0X2ZpZWxkX2ZvcmUoKSBtYXkgYmUgZnJ1c3RyYXRpbmcgaW4gdGhlIGJlZ2lubmluZy4gTGV0IG1lIGZpcnN0CitleHBsYWluIGFib3V0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgYXR0cmlidXRlcyBvZiBhIGZpZWxkLiBUaGUKK2ZvcmVncm91bmQgYXR0cmlidXRlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhcmFjdGVyLiBUaGF0IG1lYW5zIGEKK2NoYXJhY3RlciBpbiB0aGUgZmllbGQgaXMgcHJpbnRlZCB3aXRoIHRoZSBhdHRyaWJ1dGUgeW91IGhhdmUgc2V0Cit3aXRoIHNldF9maWVsZF9mb3JlKCkuIEJhY2tncm91bmQgYXR0cmlidXRlIGlzIHRoZSBhdHRyaWJ1dGUgdXNlZAordG8gZmlsbCBiYWNrZ3JvdW5kIG9mIGZpZWxkLCB3aGV0aGVyIGFueSBjaGFyYWN0ZXIgaXMgdGhlcmUgb3Igbm90LgorU28gd2hhdCBhYm91dCBjb2xvcnM/IFNpbmNlIGNvbG9ycyBhcmUgYWx3YXlzIGRlZmluZWQgaW4gcGFpcnMsCit3aGF0IGlzIHRoZSByaWdodCB3YXkgdG8gZGlzcGxheSBjb2xvcmVkIGZpZWxkcz8gSGVyZSdzIGFuIGV4YW1wbGUKK2NsYXJpZnlpbmcgY29sb3IgYXR0cmlidXRlcy48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJGRk9BVCIgaWQ9IkZGT0FUIj48L2E+Cis8cD48Yj5FeGFtcGxlIDI2LiBGb3JtIEF0dHJpYnV0ZXMgZXhhbXBsZTwvYj48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0iIzAwMDAwMCI+PHNwYW4gY2xhc3M9CisiSU5MSU5FTUVESUFPQkpFQ1QiPiNpbmNsdWRlICZsdDtmb3JtLmgmZ3Q7CisKK2ludCBtYWluKCkKK3sgICAgICAgRklFTEQgKmZpZWxkWzNdOworICAgICAgICBGT1JNICAqbXlfZm9ybTsKKyAgICAgICAgaW50IGNoOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBzdGFydF9jb2xvcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgZmV3IGNvbG9yIHBhaXJzICovCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisgICAgICAgIGluaXRfcGFpcigyLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZmllbGRzICovCisgICAgICAgIGZpZWxkWzBdID0gbmV3X2ZpZWxkKDEsIDEwLCA0LCAxOCwgMCwgMCk7CisgICAgICAgIGZpZWxkWzFdID0gbmV3X2ZpZWxkKDEsIDEwLCA2LCAxOCwgMCwgMCk7CisgICAgICAgIGZpZWxkWzJdID0gTlVMTDsKKworICAgICAgICAvKiBTZXQgZmllbGQgb3B0aW9ucyAqLworICAgICAgICBzZXRfZmllbGRfZm9yZShmaWVsZFswXSwgQ09MT1JfUEFJUigxKSk7LyogUHV0IHRoZSBmaWVsZCB3aXRoIGJsdWUgYmFja2dyb3VuZCAqLworICAgICAgICBzZXRfZmllbGRfYmFjayhmaWVsZFswXSwgQ09MT1JfUEFJUigyKSk7LyogYW5kIHdoaXRlIGZvcmVncm91bmQgKGNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFyZSBwcmludGVkIGluIHdoaXRlICAgICAgICAgKi8KKyAgICAgICAgZmllbGRfb3B0c19vZmYoZmllbGRbMF0sIE9fQVVUT1NLSVApOyAgIC8qIERvbid0IGdvIHRvIG5leHQgZmllbGQgd2hlbiB0aGlzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWVsZCBpcyBmaWxsZWQgdXAgICAgICAgICAgICovCisgICAgICAgIHNldF9maWVsZF9iYWNrKGZpZWxkWzFdLCBBX1VOREVSTElORSk7IAorICAgICAgICBmaWVsZF9vcHRzX29mZihmaWVsZFsxXSwgT19BVVRPU0tJUCk7CisKKyAgICAgICAgLyogQ3JlYXRlIHRoZSBmb3JtIGFuZCBwb3N0IGl0ICovCisgICAgICAgIG15X2Zvcm0gPSBuZXdfZm9ybShmaWVsZCk7CisgICAgICAgIHBvc3RfZm9ybShteV9mb3JtKTsKKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICAKKyAgICAgICAgc2V0X2N1cnJlbnRfZmllbGQobXlfZm9ybSwgZmllbGRbMF0pOyAvKiBTZXQgZm9jdXMgdG8gdGhlIGNvbG9yZWQgZmllbGQgKi8KKyAgICAgICAgbXZwcmludHcoNCwgMTAsICJWYWx1ZSAxOiIpOworICAgICAgICBtdnByaW50dyg2LCAxMCwgIlZhbHVlIDI6Iik7CisgICAgICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwgIlVzZSBVUCwgRE9XTiBhcnJvdyBrZXlzIHRvIHN3aXRjaCBiZXR3ZWVuIGZpZWxkcyIpOworICAgICAgICByZWZyZXNoKCk7CisKKyAgICAgICAgLyogTG9vcCB0aHJvdWdoIHRvIGdldCB1c2VyIHJlcXVlc3RzICovCisgICAgICAgIHdoaWxlKChjaCA9IGdldGNoKCkpICE9IEtFWV9GKDEpKQorICAgICAgICB7ICAgICAgIHN3aXRjaChjaCkKKyAgICAgICAgICAgICAgICB7ICAgICAgIGNhc2UgS0VZX0RPV046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRvIG5leHQgZmllbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX05FWFRfRklFTEQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHbyB0byB0aGUgZW5kIG9mIHRoZSBwcmVzZW50IGJ1ZmZlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWF2ZXMgbmljZWx5IGF0IHRoZSBsYXN0IGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfRU5EX0xJTkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZX1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHbyB0byBwcmV2aW91cyBmaWVsZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfUFJFVl9GSUVMRCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9FTkRfTElORSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhpcyBpcyBhIG5vcm1hbCBjaGFyYWN0ZXIsIGl0IGdldHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogVW4gcG9zdCBmb3JtIGFuZCBmcmVlIHRoZSBtZW1vcnkgKi8KKyAgICAgICAgdW5wb3N0X2Zvcm0obXlfZm9ybSk7CisgICAgICAgIGZyZWVfZm9ybShteV9mb3JtKTsKKyAgICAgICAgZnJlZV9maWVsZChmaWVsZFswXSk7CisgICAgICAgIGZyZWVfZmllbGQoZmllbGRbMV0pOyAKKworICAgICAgICBlbmR3aW4oKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPHA+UGxheSB3aXRoIHRoZSBjb2xvciBwYWlycyBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIGZvcmVncm91bmQKK2FuZCBiYWNrZ3JvdW5kIGF0dHJpYnV0ZXMuIEluIG15IHByb2dyYW1zIHVzaW5nIGNvbG9yIGF0dHJpYnV0ZXMsIEkKK3VzdWFsbHkgc2V0IG9ubHkgdGhlIGJhY2tncm91bmQgd2l0aCBzZXRfZmllbGRfYmFjaygpLiBDdXJzZXMKK3NpbXBseSBkb2Vzbid0IGFsbG93IGRlZmluaW5nIGluZGl2aWR1YWwgY29sb3IgYXR0cmlidXRlcy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkZJRUxET1BUSU9OQklUUyIgaWQ9CisiRklFTERPUFRJT05CSVRTIj4xOC4zLjUuIEZpZWxkIE9wdGlvbiBCaXRzPC9hPjwvaDQ+Cis8cD5UaGVyZSBpcyBhbHNvIGEgbGFyZ2UgY29sbGVjdGlvbiBvZiBmaWVsZCBvcHRpb24gYml0cyB5b3UgY2FuCitzZXQgdG8gY29udHJvbCB2YXJpb3VzIGFzcGVjdHMgb2YgZm9ybXMgcHJvY2Vzc2luZy4gWW91IGNhbgorbWFuaXB1bGF0ZSB0aGVtIHdpdGggdGhlc2UgZnVuY3Rpb25zOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfb3B0cyhGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAvKiBhdHRyaWJ1dGUgdG8gc2V0ICovIAorCitpbnQgZmllbGRfb3B0c19vbihGSUVMRCAqZmllbGQsICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAgLyogYXR0cmlidXRlcyB0byB0dXJuIG9uICovIAorCitpbnQgZmllbGRfb3B0c19vZmYoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAgLyogYXR0cmlidXRlcyB0byB0dXJuIG9mZiAqLyAKKworaW50IGZpZWxkX29wdHMoRklFTEQgKmZpZWxkKTsgICAgICAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8gPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGZ1bmN0aW9uIHNldF9maWVsZF9vcHRzKCkgY2FuIGJlIHVzZWQgdG8gZGlyZWN0bHkgc2V0CithdHRyaWJ1dGVzIG9mIGEgZmllbGQgb3IgeW91IGNhbiBjaG9vc2UgdG8gc3dpdGNoIGEgZmV3IGF0dHJpYnV0ZXMKK29uIGFuZCBvZmYgd2l0aCBmaWVsZF9vcHRzX29uKCkgYW5kIGZpZWxkX29wdHNfb2ZmKCkgc2VsZWN0aXZlbHkuCitBbnl0aW1lIHlvdSBjYW4gcXVlcnkgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWVsZCB3aXRoIGZpZWxkX29wdHMoKS4KK1RoZSBmb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuIEJ5IGRlZmF1bHQsIGFsbAorb3B0aW9ucyBhcmUgb24uPC9wPgorPGRpdiBjbGFzcz0iVkFSSUFCTEVMSVNUIj4KKzxkbD4KKzxkdD5PX1ZJU0lCTEU8L2R0PgorPGRkPgorPHA+Q29udHJvbHMgd2hldGhlciB0aGUgZmllbGQgaXMgdmlzaWJsZSBvbiB0aGUgc2NyZWVuLiBDYW4gYmUgdXNlZAorZHVyaW5nIGZvcm0gcHJvY2Vzc2luZyB0byBoaWRlIG9yIHBvcCB1cCBmaWVsZHMgZGVwZW5kaW5nIG9uIHRoZQordmFsdWUgb2YgcGFyZW50IGZpZWxkcy48L3A+Cis8L2RkPgorPGR0Pk9fQUNUSVZFPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGFjdGl2ZSBkdXJpbmcgZm9ybXMgcHJvY2Vzc2luZworKGkuZS4gdmlzaXRlZCBieSBmb3JtIG5hdmlnYXRpb24ga2V5cykuIENhbiBiZSB1c2VkIHRvIG1ha2UgbGFiZWxzCitvciBkZXJpdmVkIGZpZWxkcyB3aXRoIGJ1ZmZlciB2YWx1ZXMgYWx0ZXJhYmxlIGJ5IHRoZSBmb3JtcworYXBwbGljYXRpb24sIG5vdCB0aGUgdXNlci48L3A+Cis8L2RkPgorPGR0Pk9fUFVCTElDPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIHdoZXRoZXIgZGF0YSBpcyBkaXNwbGF5ZWQgZHVyaW5nIGZpZWxkIGVudHJ5LiBJZiB0aGlzCitvcHRpb24gaXMgdHVybmVkIG9mZiBvbiBhIGZpZWxkLCB0aGUgbGlicmFyeSB3aWxsIGFjY2VwdCBhbmQgZWRpdAorZGF0YSBpbiB0aGF0IGZpZWxkLCBidXQgaXQgd2lsbCBub3QgYmUgZGlzcGxheWVkIGFuZCB0aGUgdmlzaWJsZQorZmllbGQgY3Vyc29yIHdpbGwgbm90IG1vdmUuIFlvdSBjYW4gdHVybiBvZmYgdGhlIE9fUFVCTElDIGJpdCB0bworZGVmaW5lIHBhc3N3b3JkIGZpZWxkcy48L3A+Cis8L2RkPgorPGR0Pk9fRURJVDwvZHQ+Cis8ZGQ+Cis8cD5Db250cm9scyB3aGV0aGVyIHRoZSBmaWVsZCdzIGRhdGEgY2FuIGJlIG1vZGlmaWVkLiBXaGVuIHRoaXMKK29wdGlvbiBpcyBvZmYsIGFsbCBlZGl0aW5nIHJlcXVlc3RzIGV4Y2VwdCA8dmFyIGNsYXNzPQorIkxJVEVSQUwiPlJFUV9QUkVWX0NIT0lDRTwvdmFyPiBhbmQgPHZhciBjbGFzcz0KKyJMSVRFUkFMIj5SRVFfTkVYVF9DSE9JQ0U8L3Zhcj53aWxsIGZhaWwuIFN1Y2ggcmVhZC1vbmx5IGZpZWxkcyBtYXkKK2JlIHVzZWZ1bCBmb3IgaGVscCBtZXNzYWdlcy48L3A+Cis8L2RkPgorPGR0Pk9fV1JBUDwvZHQ+Cis8ZGQ+Cis8cD5Db250cm9scyB3b3JkLXdyYXBwaW5nIGluIG11bHRpLWxpbmUgZmllbGRzLiBOb3JtYWxseSwgd2hlbiBhbnkKK2NoYXJhY3RlciBvZiBhIChibGFuay1zZXBhcmF0ZWQpIHdvcmQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZQorY3VycmVudCBsaW5lLCB0aGUgZW50aXJlIHdvcmQgaXMgd3JhcHBlZCB0byB0aGUgbmV4dCBsaW5lIChhc3N1bWluZwordGhlcmUgaXMgb25lKS4gV2hlbiB0aGlzIG9wdGlvbiBpcyBvZmYsIHRoZSB3b3JkIHdpbGwgYmUgc3BsaXQKK2Fjcm9zcyB0aGUgbGluZSBicmVhay48L3A+Cis8L2RkPgorPGR0Pk9fQkxBTks8L2R0PgorPGRkPgorPHA+Q29udHJvbHMgZmllbGQgYmxhbmtpbmcuIFdoZW4gdGhpcyBvcHRpb24gaXMgb24sIGVudGVyaW5nIGEKK2NoYXJhY3RlciBhdCB0aGUgZmlyc3QgZmllbGQgcG9zaXRpb24gZXJhc2VzIHRoZSBlbnRpcmUgZmllbGQKKyhleGNlcHQgZm9yIHRoZSBqdXN0LWVudGVyZWQgY2hhcmFjdGVyKS48L3A+Cis8L2RkPgorPGR0Pk9fQVVUT1NLSVA8L2R0PgorPGRkPgorPHA+Q29udHJvbHMgYXV0b21hdGljIHNraXAgdG8gbmV4dCBmaWVsZCB3aGVuIHRoaXMgb25lIGZpbGxzLgorTm9ybWFsbHksIHdoZW4gdGhlIGZvcm1zIHVzZXIgdHJpZXMgdG8gdHlwZSBtb3JlIGRhdGEgaW50byBhIGZpZWxkCit0aGFuIHdpbGwgZml0LCB0aGUgZWRpdGluZyBsb2NhdGlvbiBqdW1wcyB0byBuZXh0IGZpZWxkLiBXaGVuIHRoaXMKK29wdGlvbiBpcyBvZmYsIHRoZSB1c2VyJ3MgY3Vyc29yIHdpbGwgaGFuZyBhdCB0aGUgZW5kIG9mIHRoZSBmaWVsZC4KK1RoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaW4gZHluYW1pYyBmaWVsZHMgdGhhdCBoYXZlIG5vdCByZWFjaGVkCit0aGVpciBzaXplIGxpbWl0LjwvcD4KKzwvZGQ+Cis8ZHQ+T19OVUxMT0s8L2R0PgorPGRkPgorPHA+Q29udHJvbHMgd2hldGhlciB2YWxpZGF0aW9uIGlzIGFwcGxpZWQgdG8gYmxhbmsgZmllbGRzLgorTm9ybWFsbHksIGl0IGlzIG5vdDsgdGhlIHVzZXIgY2FuIGxlYXZlIGEgZmllbGQgYmxhbmsgd2l0aG91dAoraW52b2tpbmcgdGhlIHVzdWFsIHZhbGlkYXRpb24gY2hlY2sgb24gZXhpdC4gSWYgdGhpcyBvcHRpb24gaXMgb2ZmCitvbiBhIGZpZWxkLCBleGl0IGZyb20gaXQgd2lsbCBpbnZva2UgYSB2YWxpZGF0aW9uIGNoZWNrLjwvcD4KKzwvZGQ+Cis8ZHQ+T19QQVNTT0s8L2R0PgorPGRkPgorPHA+Q29udHJvbHMgd2hldGhlciB2YWxpZGF0aW9uIG9jY3VycyBvbiBldmVyeSBleGl0LCBvciBvbmx5IGFmdGVyCit0aGUgZmllbGQgaXMgbW9kaWZpZWQuIE5vcm1hbGx5IHRoZSBsYXR0ZXIgaXMgdHJ1ZS4gU2V0dGluZworT19QQVNTT0sgbWF5IGJlIHVzZWZ1bCBpZiB5b3VyIGZpZWxkJ3MgdmFsaWRhdGlvbiBmdW5jdGlvbiBtYXkKK2NoYW5nZSBkdXJpbmcgZm9ybXMgcHJvY2Vzc2luZy48L3A+Cis8L2RkPgorPGR0Pk9fU1RBVElDPC9kdD4KKzxkZD4KKzxwPkNvbnRyb2xzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGZpeGVkIHRvIGl0cyBpbml0aWFsIGRpbWVuc2lvbnMuCitJZiB5b3UgdHVybiB0aGlzIG9mZiwgdGhlIGZpZWxkIGJlY29tZXMgZHluYW1pYyBhbmQgd2lsbCBzdHJldGNoIHRvCitmaXQgZW50ZXJlZCBkYXRhLjwvcD4KKzwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8cD5BIGZpZWxkJ3Mgb3B0aW9ucyBjYW5ub3QgYmUgY2hhbmdlZCB3aGlsZSB0aGUgZmllbGQgaXMgY3VycmVudGx5CitzZWxlY3RlZC4gSG93ZXZlciwgb3B0aW9ucyBtYXkgYmUgY2hhbmdlZCBvbiBwb3N0ZWQgZmllbGRzIHRoYXQgYXJlCitub3QgY3VycmVudC48L3A+Cis8cD5UaGUgb3B0aW9uIHZhbHVlcyBhcmUgYml0LW1hc2tzIGFuZCBjYW4gYmUgY29tcG9zZWQgd2l0aAorbG9naWNhbC1vciBpbiB0aGUgb2J2aW91cyB3YXkuIFlvdSBoYXZlIHNlZW4gdGhlIHVzYWdlIG9mIHN3aXRjaGluZworb2ZmIE9fQVVUT1NLSVAgb3B0aW9uLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY2xhcmlmaWVzIHVzYWdlIG9mCitzb21lIG1vcmUgb3B0aW9ucy4gT3RoZXIgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIHdoZXJlCithcHByb3ByaWF0ZS48L3A+Cis8ZGl2IGNsYXNzPSJFWEFNUExFIj48YSBuYW1lPSJGRk9PUCIgaWQ9IkZGT09QIj48L2E+Cis8cD48Yj5FeGFtcGxlIDI3LiBGaWVsZCBPcHRpb25zIFVzYWdlIGV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7Zm9ybS5oJmd0OworCisjZGVmaW5lIFNUQVJUWCAxNQorI2RlZmluZSBTVEFSVFkgNAorI2RlZmluZSBXSURUSCAyNQorCisjZGVmaW5lIE5fRklFTERTIDMKKworaW50IG1haW4oKQoreyAgICAgICBGSUVMRCAqZmllbGRbTl9GSUVMRFNdOworICAgICAgICBGT1JNICAqbXlfZm9ybTsKKyAgICAgICAgaW50IGNoLCBpOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGZpZWxkcyAqLworICAgICAgICBmb3IoaSA9IDA7IGkgJmx0OyBOX0ZJRUxEUyAtIDE7ICsraSkKKyAgICAgICAgICAgICAgICBmaWVsZFtpXSA9IG5ld19maWVsZCgxLCBXSURUSCwgU1RBUlRZICsgaSAqIDIsIFNUQVJUWCwgMCwgMCk7CisgICAgICAgIGZpZWxkW05fRklFTERTIC0gMV0gPSBOVUxMOworCisgICAgICAgIC8qIFNldCBmaWVsZCBvcHRpb25zICovCisgICAgICAgIHNldF9maWVsZF9iYWNrKGZpZWxkWzFdLCBBX1VOREVSTElORSk7ICAvKiBQcmludCBhIGxpbmUgZm9yIHRoZSBvcHRpb24gICovCisgICAgICAgIAorICAgICAgICBmaWVsZF9vcHRzX29mZihmaWVsZFswXSwgT19BQ1RJVkUpOyAvKiBUaGlzIGZpZWxkIGlzIGEgc3RhdGljIGxhYmVsICovCisgICAgICAgIGZpZWxkX29wdHNfb2ZmKGZpZWxkWzFdLCBPX1BVQkxJQyk7IC8qIFRoaXMgZmlsZWQgaXMgbGlrZSBhIHBhc3N3b3JkIGZpZWxkKi8KKyAgICAgICAgZmllbGRfb3B0c19vZmYoZmllbGRbMV0sIE9fQVVUT1NLSVApOyAvKiBUbyBhdm9pZCBlbnRlcmluZyB0aGUgc2FtZSBmaWVsZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFmdGVyIGxhc3QgY2hhcmFjdGVyIGlzIGVudGVyZWQgKi8KKyAgICAgICAgCisgICAgICAgIC8qIENyZWF0ZSB0aGUgZm9ybSBhbmQgcG9zdCBpdCAqLworICAgICAgICBteV9mb3JtID0gbmV3X2Zvcm0oZmllbGQpOworICAgICAgICBwb3N0X2Zvcm0obXlfZm9ybSk7CisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgCisgICAgICAgIHNldF9maWVsZF9qdXN0KGZpZWxkWzBdLCBKVVNUSUZZX0NFTlRFUik7IC8qIENlbnRlciBKdXN0aWZpY2F0aW9uICovCisgICAgICAgIHNldF9maWVsZF9idWZmZXIoZmllbGRbMF0sIDAsICJUaGlzIGlzIGEgc3RhdGljIEZpZWxkIik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBmaWVsZCAgKi8KKyAgICAgICAgbXZwcmludHcoU1RBUlRZLCBTVEFSVFggLSAxMCwgIkZpZWxkIDE6Iik7CisgICAgICAgIG12cHJpbnR3KFNUQVJUWSArIDIsIFNUQVJUWCAtIDEwLCAiRmllbGQgMjoiKTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIC8qIExvb3AgdGhyb3VnaCB0byBnZXQgdXNlciByZXF1ZXN0cyAqLworICAgICAgICB3aGlsZSgoY2ggPSBnZXRjaCgpKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHbyB0byBuZXh0IGZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9ORVhUX0ZJRUxEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gdGhlIGVuZCBvZiB0aGUgcHJlc2VudCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVhdmVzIG5pY2VseSBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX0VORF9MSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gcHJldmlvdXMgZmllbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX1BSRVZfRklFTEQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfRU5EX0xJTkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgaXMgYSBub3JtYWwgY2hhcmFjdGVyLCBpdCBnZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIFVuIHBvc3QgZm9ybSBhbmQgZnJlZSB0aGUgbWVtb3J5ICovCisgICAgICAgIHVucG9zdF9mb3JtKG15X2Zvcm0pOworICAgICAgICBmcmVlX2Zvcm0obXlfZm9ybSk7CisgICAgICAgIGZyZWVfZmllbGQoZmllbGRbMF0pOworICAgICAgICBmcmVlX2ZpZWxkKGZpZWxkWzFdKTsgCisKKyAgICAgICAgZW5kd2luKCk7CisgICAgICAgIHJldHVybiAwOworfTwvc3Bhbj48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKzxwPlRoaXMgZXhhbXBsZSwgdGhvdWdoIHVzZWxlc3MsIHNob3dzIHRoZSB1c2FnZSBvZiBvcHRpb25zLiBJZgordXNlZCBwcm9wZXJseSwgdGhleSBjYW4gcHJlc2VudCBpbmZvcm1hdGlvbiB2ZXJ5IGVmZmVjdGl2ZWx5IGluIGEKK2Zvcm0uIFRoZSBzZWNvbmQgZmllbGQgYmVpbmcgbm90IE9fUFVCTElDLCBkb2VzIG5vdCBzaG93IHRoZQorY2hhcmFjdGVycyB5b3UgYXJlIHR5cGluZy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IkZJRUxEU1RBVFVTIiBpZD0iRklFTERTVEFUVVMiPjE4LjMuNi4KK0ZpZWxkIFN0YXR1czwvYT48L2g0PgorPHA+VGhlIGZpZWxkIHN0YXR1cyBzcGVjaWZpZXMgd2hldGhlciB0aGUgZmllbGQgaGFzIGdvdCBlZGl0ZWQgb3IKK25vdC4gSXQgaXMgaW5pdGlhbGx5IHNldCB0byBGQUxTRSBhbmQgd2hlbiB1c2VyIGVudGVycyBzb21ldGhpbmcKK2FuZCB0aGUgZGF0YSBidWZmZXIgZ2V0cyBtb2RpZmllZCBpdCBiZWNvbWVzIFRSVUUuIFNvIGEgZmllbGQncworc3RhdHVzIGNhbiBiZSBxdWVyaWVkIHRvIGZpbmQgb3V0IHdoZXRoZXIgaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IKK25vdC4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY2FuIGFzc2lzdCBpbiB0aG9zZSBvcGVyYXRpb25zLjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfc3RhdHVzKEZJRUxEICpmaWVsZCwgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMpOyAgICAgICAgIC8qIHN0YXR1cyB0byBzZXQgKi8KKworaW50IGZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQpOyAgICAgICAgIC8qIGZldGNoIHN0YXR1cyBvZiBmaWVsZCAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPkl0J3MgYmV0dGVyIHRvIGNoZWNrIHRoZSBmaWVsZCdzIHN0YXR1cyBvbmx5IGFmdGVyIGFmdGVyIGxlYXZpbmcKK3RoZSBmaWVsZCwgYXMgZGF0YSBidWZmZXIgbWlnaHQgbm90IGhhdmUgYmVlbiB1cGRhdGVkIHlldCBhcyB0aGUKK3ZhbGlkYXRpb24gaXMgc3RpbGwgZHVlLiBUbyBndWFyYW50ZWUgdGhhdCByaWdodCBzdGF0dXMgaXMKK3JldHVybmVkLCBjYWxsIGZpZWxkX3N0YXR1cygpIGVpdGhlciAoMSkgaW4gdGhlIGZpZWxkJ3MgZXhpdAordmFsaWRhdGlvbiBjaGVjayByb3V0aW5lLCAoMikgZnJvbSB0aGUgZmllbGQncyBvciBmb3JtJ3MKK2luaXRpYWxpemF0aW9uIG9yIHRlcm1pbmF0aW9uIGhvb2tzLCBvciAoMykganVzdCBhZnRlciBhCitSRVFfVkFMSURBVElPTiByZXF1ZXN0IGhhcyBiZWVuIHByb2Nlc3NlZCBieSB0aGUgZm9ybXMgZHJpdmVyPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJGSUVMRFVTRVJQVFIiIGlkPSJGSUVMRFVTRVJQVFIiPjE4LjMuNy4KK0ZpZWxkIFVzZXIgUG9pbnRlcjwvYT48L2g0PgorPHA+RXZlcnkgZmllbGQgc3RydWN0dXJlIGNvbnRhaW5zIG9uZSBwb2ludGVyIHRoYXQgY2FuIGJlIHVzZWQgYnkKK3RoZSB1c2VyIGZvciB2YXJpb3VzIHB1cnBvc2VzLiBJdCBpcyBub3QgdG91Y2hlZCBieSBmb3JtcyBsaWJyYXJ5CithbmQgY2FuIGJlIHVzZWQgZm9yIGFueSBwdXJwb3NlIGJ5IHRoZSB1c2VyLiBUaGUgZm9sbG93aW5nCitmdW5jdGlvbnMgc2V0IGFuZCBmZXRjaCB1c2VyIHBvaW50ZXIuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPmludCBzZXRfZmllbGRfdXNlcnB0cihGSUVMRCAqZmllbGQsICAgCisgICAgICAgICAgIGNoYXIgKnVzZXJwdHIpOyAgICAgIC8qIHRoZSB1c2VyIHBvaW50ZXIgeW91IHdpc2ggdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdpdGggdGhlIGZpZWxkICAgICovCisKK2NoYXIgKmZpZWxkX3VzZXJwdHIoRklFTEQgKmZpZWxkKTsgICAgICAvKiBmZXRjaCB1c2VyIHBvaW50ZXIgb2YgdGhlIGZpZWxkICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJWQVJJQUJMRVNJWkVGSUVMRFMiIGlkPQorIlZBUklBQkxFU0laRUZJRUxEUyI+MTguMy44LiBWYXJpYWJsZS1TaXplZCBGaWVsZHM8L2E+PC9oND4KKzxwPklmIHlvdSB3YW50IGEgZHluYW1pY2FsbHkgY2hhbmdpbmcgZmllbGQgd2l0aCB2YXJpYWJsZSB3aWR0aCwKK3RoaXMgaXMgdGhlIGZlYXR1cmUgeW91IHdhbnQgdG8gcHV0IHRvIGZ1bGwgdXNlLiBUaGlzIHdpbGwgYWxsb3cKK3RoZSB1c2VyIHRvIGVudGVyIG1vcmUgZGF0YSB0aGFuIHRoZSBvcmlnaW5hbCBzaXplIG9mIHRoZSBmaWVsZCBhbmQKK2xldCB0aGUgZmllbGQgZ3Jvdy4gQWNjb3JkaW5nIHRvIHRoZSBmaWVsZCBvcmllbnRhdGlvbiBpdCB3aWxsCitzY3JvbGwgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkgdG8gaW5jb3Jwb3JhdGUgdGhlIG5ldyBkYXRhLjwvcD4KKzxwPlRvIG1ha2UgYSBmaWVsZCBkeW5hbWljYWxseSBncm93YWJsZSwgdGhlIG9wdGlvbiBPX1NUQVRJQyBzaG91bGQKK2JlIHR1cm5lZCBvZmYuIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+ICAgIGZpZWxkX29wdHNfb2ZmKGZpZWxkX3BvaW50ZXIsIE9fU1RBVElDKTs8L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5CdXQgaXQncyB1c3VhbGx5IG5vdCBhZHZpc2FibGUgdG8gYWxsb3cgYSBmaWVsZCB0byBncm93CitpbmZpbml0ZWx5LiBZb3UgY2FuIHNldCBhIG1heGltdW0gbGltaXQgdG8gdGhlIGdyb3d0aCBvZiB0aGUgZmllbGQKK3dpdGg8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgc2V0X21heF9maWVsZChGSUVMRCAqZmllbGQsICAgIC8qIEZpZWxkIG9uIHdoaWNoIHRvIG9wZXJhdGUgKi8KKyAgICAgICAgICAgICAgICAgIGludCBtYXhfZ3Jvd3RoKTsgLyogbWF4aW11bSBncm93dGggYWxsb3dlZCBmb3IgdGhlIGZpZWxkICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGZpZWxkIGluZm8gZm9yIGEgZHluYW1pY2FsbHkgZ3Jvd2FibGUgZmllbGQgY2FuIGJlIHJldHJpZXZlZAorYnk8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgZHluYW1pY19maWVsZF9pbmZvKCBGSUVMRCAqZmllbGQsICAgICAvKiBGaWVsZCBvbiB3aGljaCB0byBvcGVyYXRlICovCisgICAgICAgICAgICBpbnQgICAqcHJvd3MsICAgICAvKiBudW1iZXIgb2Ygcm93cyB3aWxsIGJlIGZpbGxlZCBpbiB0aGlzICovCisgICAgICAgICAgICBpbnQgICAqcGNvbHMsICAgICAvKiBudW1iZXIgb2YgY29sdW1ucyB3aWxsIGJlIGZpbGxlZCBpbiB0aGlzKi8KKyAgICAgICAgICAgIGludCAgICpwbWF4KSAgICAgIC8qIG1heGltdW0gYWxsb3dhYmxlIGdyb3d0aCB3aWxsIGJlIGZpbGxlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gdGhpcyAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KK1Rob3VnaCBmaWVsZF9pbmZvIHdvcmsgYXMgdXN1YWwsIGl0IGlzIGFkdmlzYWJsZSB0byB1c2UgdGhpcworZnVuY3Rpb24gdG8gZ2V0IHRoZSBwcm9wZXIgYXR0cmlidXRlcyBvZiBhIGR5bmFtaWNhbGx5IGdyb3dhYmxlCitmaWVsZC4KKzxwPlJlY2FsbCB0aGUgbGlicmFyeSByb3V0aW5lIG5ld19maWVsZDsgYSBuZXcgZmllbGQgY3JlYXRlZCB3aXRoCitoZWlnaHQgc2V0IHRvIG9uZSB3aWxsIGJlIGRlZmluZWQgdG8gYmUgYSBvbmUgbGluZSBmaWVsZC4gQSBuZXcKK2ZpZWxkIGNyZWF0ZWQgd2l0aCBoZWlnaHQgZ3JlYXRlciB0aGFuIG9uZSB3aWxsIGJlIGRlZmluZWQgdG8gYmUgYQorbXVsdGkgbGluZSBmaWVsZC48L3A+Cis8cD5BIG9uZSBsaW5lIGZpZWxkIHdpdGggT19TVEFUSUMgdHVybmVkIG9mZiAoZHluYW1pY2FsbHkgZ3Jvd2FibGUKK2ZpZWxkKSB3aWxsIGNvbnRhaW4gYSBzaW5nbGUgZml4ZWQgcm93LCBidXQgdGhlIG51bWJlciBvZiBjb2x1bW5zCitjYW4gaW5jcmVhc2UgaWYgdGhlIHVzZXIgZW50ZXJzIG1vcmUgZGF0YSB0aGFuIHRoZSBpbml0aWFsIGZpZWxkCit3aWxsIGhvbGQuIFRoZSBudW1iZXIgb2YgY29sdW1ucyBkaXNwbGF5ZWQgd2lsbCByZW1haW4gZml4ZWQgYW5kCit0aGUgYWRkaXRpb25hbCBkYXRhIHdpbGwgc2Nyb2xsIGhvcml6b250YWxseS48L3A+Cis8cD5BIG11bHRpIGxpbmUgZmllbGQgd2l0aCBPX1NUQVRJQyB0dXJuZWQgb2ZmIChkeW5hbWljYWxseQorZ3Jvd2FibGUgZmllbGQpIHdpbGwgY29udGFpbiBhIGZpeGVkIG51bWJlciBvZiBjb2x1bW5zLCBidXQgdGhlCitudW1iZXIgb2Ygcm93cyBjYW4gaW5jcmVhc2UgaWYgdGhlIHVzZXIgZW50ZXJzIG1vcmUgZGF0YSB0aGFuIHRoZQoraW5pdGlhbCBmaWVsZCB3aWxsIGhvbGQuIFRoZSBudW1iZXIgb2Ygcm93cyBkaXNwbGF5ZWQgd2lsbCByZW1haW4KK2ZpeGVkIGFuZCB0aGUgYWRkaXRpb25hbCBkYXRhIHdpbGwgc2Nyb2xsIHZlcnRpY2FsbHkuPC9wPgorPHA+VGhlIGFib3ZlIHR3byBwYXJhZ3JhcGhzIHByZXR0eSBtdWNoIGRlc2NyaWJlIGEgZHluYW1pY2FsbHkKK2dyb3dhYmxlIGZpZWxkJ3MgYmVoYXZpb3IuIFRoZSB3YXkgb3RoZXIgcGFydHMgb2YgZm9ybXMgbGlicmFyeQorYmVoYXZlcyBpcyBkZXNjcmliZWQgYmVsb3c6PC9wPgorPG9sIHR5cGU9IjEiPgorPGxpPgorPHA+VGhlIGZpZWxkIG9wdGlvbiBPX0FVVE9TS0lQIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUgb3B0aW9uCitPX1NUQVRJQyBpcyBvZmYgYW5kIHRoZXJlIGlzIG5vIG1heGltdW0gZ3Jvd3RoIHNwZWNpZmllZCBmb3IgdGhlCitmaWVsZC4gQ3VycmVudGx5LCBPX0FVVE9TS0lQIGdlbmVyYXRlcyBhbiBhdXRvbWF0aWMgUkVRX05FWFRfRklFTEQKK2Zvcm0gZHJpdmVyIHJlcXVlc3Qgd2hlbiB0aGUgdXNlciB0eXBlcyBpbiB0aGUgbGFzdCBjaGFyYWN0ZXIKK3Bvc2l0aW9uIG9mIGEgZmllbGQuIE9uIGEgZ3Jvd2FibGUgZmllbGQgd2l0aCBubyBtYXhpbXVtIGdyb3d0aAorc3BlY2lmaWVkLCB0aGVyZSBpcyBubyBsYXN0IGNoYXJhY3RlciBwb3NpdGlvbi4gSWYgYSBtYXhpbXVtIGdyb3d0aAoraXMgc3BlY2lmaWVkLCB0aGUgT19BVVRPU0tJUCBvcHRpb24gd2lsbCB3b3JrIGFzIG5vcm1hbCBpZiB0aGUKK2ZpZWxkIGhhcyBncm93biB0byBpdHMgbWF4aW11bSBzaXplLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5UaGUgZmllbGQganVzdGlmaWNhdGlvbiB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlIG9wdGlvbiBPX1NUQVRJQworaXMgb2ZmLiBDdXJyZW50bHksIHNldF9maWVsZF9qdXN0IGNhbiBiZSB1c2VkIHRvIEpVU1RJRllfTEVGVCwKK0pVU1RJRllfUklHSFQsIEpVU1RJRllfQ0VOVEVSIHRoZSBjb250ZW50cyBvZiBhIG9uZSBsaW5lIGZpZWxkLiBBCitncm93YWJsZSBvbmUgbGluZSBmaWVsZCB3aWxsLCBieSBkZWZpbml0aW9uLCBncm93IGFuZCBzY3JvbGwKK2hvcml6b250YWxseSBhbmQgbWF5IGNvbnRhaW4gbW9yZSBkYXRhIHRoYW4gY2FuIGJlIGp1c3RpZmllZC4gVGhlCityZXR1cm4gZnJvbSBmaWVsZF9qdXN0IHdpbGwgYmUgdW5jaGFuZ2VkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5UaGUgb3ZlcmxvYWRlZCBmb3JtIGRyaXZlciByZXF1ZXN0IFJFUV9ORVdfTElORSB3aWxsIG9wZXJhdGUgdGhlCitzYW1lIHdheSByZWdhcmRsZXNzIG9mIHRoZSBPX05MX09WRVJMT0FEIGZvcm0gb3B0aW9uIGlmIHRoZSBmaWVsZAorb3B0aW9uIE9fU1RBVElDIGlzIG9mZiBhbmQgdGhlcmUgaXMgbm8gbWF4aW11bSBncm93dGggc3BlY2lmaWVkIGZvcgordGhlIGZpZWxkLiBDdXJyZW50bHksIGlmIHRoZSBmb3JtIG9wdGlvbiBPX05MX09WRVJMT0FEIGlzIG9uLAorUkVRX05FV19MSU5FIGltcGxpY2l0bHkgZ2VuZXJhdGVzIGEgUkVRX05FWFRfRklFTEQgaWYgY2FsbGVkIGZyb20KK3RoZSBsYXN0IGxpbmUgb2YgYSBmaWVsZC4gSWYgYSBmaWVsZCBjYW4gZ3JvdyB3aXRob3V0IGJvdW5kLCB0aGVyZQoraXMgbm8gbGFzdCBsaW5lLCBzbyBSRVFfTkVXX0xJTkUgd2lsbCBuZXZlciBpbXBsaWNpdGx5IGdlbmVyYXRlIGEKK1JFUV9ORVhUX0ZJRUxELiBJZiBhIG1heGltdW0gZ3Jvd3RoIGxpbWl0IGlzIHNwZWNpZmllZCBhbmQgdGhlCitPX05MX09WRVJMT0FEIGZvcm0gb3B0aW9uIGlzIG9uLCBSRVFfTkVXX0xJTkUgd2lsbCBvbmx5IGltcGxpY2l0bHkKK2dlbmVyYXRlIFJFUV9ORVhUX0ZJRUxEIGlmIHRoZSBmaWVsZCBoYXMgZ3Jvd24gdG8gaXRzIG1heGltdW0gc2l6ZQorYW5kIHRoZSB1c2VyIGlzIG9uIHRoZSBsYXN0IGxpbmUuPC9wPgorPC9saT4KKzxsaT4KKzxwPlRoZSBsaWJyYXJ5IGNhbGwgZHVwX2ZpZWxkIHdpbGwgd29yayBhcyB1c3VhbDsgaXQgd2lsbCBkdXBsaWNhdGUKK3RoZSBmaWVsZCwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGJ1ZmZlciBzaXplIGFuZCBjb250ZW50cyBvZiB0aGUKK2ZpZWxkIGJlaW5nIGR1cGxpY2F0ZWQuIEFueSBzcGVjaWZpZWQgbWF4aW11bSBncm93dGggd2lsbCBhbHNvIGJlCitkdXBsaWNhdGVkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5UaGUgbGlicmFyeSBjYWxsIGxpbmtfZmllbGQgd2lsbCB3b3JrIGFzIHVzdWFsOyBpdCB3aWxsCitkdXBsaWNhdGUgYWxsIGZpZWxkIGF0dHJpYnV0ZXMgYW5kIHNoYXJlIGJ1ZmZlcnMgd2l0aCB0aGUgZmllbGQKK2JlaW5nIGxpbmtlZC4gSWYgdGhlIE9fU1RBVElDIGZpZWxkIG9wdGlvbiBpcyBzdWJzZXF1ZW50bHkgY2hhbmdlZAorYnkgYSBmaWVsZCBzaGFyaW5nIGJ1ZmZlcnMsIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyB0byBhbiBhdHRlbXB0IHRvCitlbnRlciBtb3JlIGRhdGEgaW50byB0aGUgZmllbGQgdGhhbiB0aGUgYnVmZmVyIHdpbGwgY3VycmVudGx5IGhvbGQKK3dpbGwgZGVwZW5kIG9uIHRoZSBzZXR0aW5nIG9mIHRoZSBvcHRpb24gaW4gdGhlIGN1cnJlbnQgZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPlRoZSBsaWJyYXJ5IGNhbGwgZmllbGRfaW5mbyB3aWxsIHdvcmsgYXMgdXN1YWw7IHRoZSB2YXJpYWJsZQorbnJvdyB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlIG9mIHRoZSBvcmlnaW5hbCBjYWxsIHRvIG5ld19maWVsZC4gVGhlCit1c2VyIHNob3VsZCB1c2UgZHluYW1pY19maWVsZF9pbmZvLCBkZXNjcmliZWQgYWJvdmUsIHRvIHF1ZXJ5IHRoZQorY3VycmVudCBzaXplIG9mIHRoZSBidWZmZXIuPC9wPgorPC9saT4KKzwvb2w+Cis8cD5Tb21lIG9mIHRoZSBhYm92ZSBwb2ludHMgbWFrZSBzZW5zZSBvbmx5IGFmdGVyIGV4cGxhaW5pbmcgZm9ybQorZHJpdmVyLiBXZSB3aWxsIGJlIGxvb2tpbmcgaW50byB0aGF0IGluIG5leHQgZmV3IHNlY3Rpb25zLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJGT1JNV0lORE9XUyIgaWQ9IkZPUk1XSU5ET1dTIj4xOC40LiBGb3JtCitXaW5kb3dzPC9hPjwvaDM+Cis8cD5UaGUgZm9ybSB3aW5kb3dzIGNvbmNlcHQgaXMgcHJldHR5IG11Y2ggc2ltaWxhciB0byBtZW51IHdpbmRvd3MuCitFdmVyeSBmb3JtIGlzIGFzc29jaWF0ZWQgd2l0aCBhIG1haW4gd2luZG93IGFuZCBhIHN1YiB3aW5kb3cuIFRoZQorZm9ybSBtYWluIHdpbmRvdyBkaXNwbGF5cyBhbnkgdGl0bGUgb3IgYm9yZGVyIGFzc29jaWF0ZWQgb3IKK3doYXRldmVyIHRoZSB1c2VyIHdpc2hlcy4gVGhlbiB0aGUgc3ViIHdpbmRvdyBjb250YWlucyBhbGwgdGhlCitmaWVsZHMgYW5kIGRpc3BsYXlzIHRoZW0gYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9uLiBUaGlzIGdpdmVzCit0aGUgZmxleGliaWxpdHkgb2YgbWFuaXB1bGF0aW5nIGZhbmN5IGZvcm0gZGlzcGxheWluZyB2ZXJ5CitlYXNpbHkuPC9wPgorPHA+U2luY2UgdGhpcyBpcyBwcmV0dHkgbXVjaCBzaW1pbGFyIHRvIG1lbnUgd2luZG93cywgSSBhbQorcHJvdmlkaW5nIGFuIGV4YW1wbGUgd2l0aCBvdXQgbXVjaCBleHBsYW5hdGlvbi4gVGhlIGZ1bmN0aW9ucyBhcmUKK3NpbWlsYXIgYW5kIHRoZXkgd29yayB0aGUgc2FtZSB3YXkuPC9wPgorPGRpdiBjbGFzcz0iRVhBTVBMRSI+PGEgbmFtZT0iRkZPV0kiIGlkPSJGRk9XSSI+PC9hPgorPHA+PGI+RXhhbXBsZSAyOC4gRm9ybSBXaW5kb3dzIEV4YW1wbGU8L2I+PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPjxzcGFuIGNsYXNzPQorIklOTElORU1FRElBT0JKRUNUIj4jaW5jbHVkZSAmbHQ7Zm9ybS5oJmd0OworCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcik7CisKK2ludCBtYWluKCkKK3sKKyAgICAgICAgRklFTEQgKmZpZWxkWzNdOworICAgICAgICBGT1JNICAqbXlfZm9ybTsKKyAgICAgICAgV0lORE9XICpteV9mb3JtX3dpbjsKKyAgICAgICAgaW50IGNoLCByb3dzLCBjb2xzOworICAgICAgICAKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMgKi8KKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBzdGFydF9jb2xvcigpOworICAgICAgICBjYnJlYWsoKTsKKyAgICAgICAgbm9lY2hvKCk7CisgICAgICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgICAgIC8qIEluaXRpYWxpemUgZmV3IGNvbG9yIHBhaXJzICovCisgICAgICAgIGluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBmaWVsZHMgKi8KKyAgICAgICAgZmllbGRbMF0gPSBuZXdfZmllbGQoMSwgMTAsIDYsIDEsIDAsIDApOworICAgICAgICBmaWVsZFsxXSA9IG5ld19maWVsZCgxLCAxMCwgOCwgMSwgMCwgMCk7CisgICAgICAgIGZpZWxkWzJdID0gTlVMTDsKKworICAgICAgICAvKiBTZXQgZmllbGQgb3B0aW9ucyAqLworICAgICAgICBzZXRfZmllbGRfYmFjayhmaWVsZFswXSwgQV9VTkRFUkxJTkUpOworICAgICAgICBmaWVsZF9vcHRzX29mZihmaWVsZFswXSwgT19BVVRPU0tJUCk7IC8qIERvbid0IGdvIHRvIG5leHQgZmllbGQgd2hlbiB0aGlzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmllbGQgaXMgZmlsbGVkIHVwICAgICAgICAgICAgICovCisgICAgICAgIHNldF9maWVsZF9iYWNrKGZpZWxkWzFdLCBBX1VOREVSTElORSk7IAorICAgICAgICBmaWVsZF9vcHRzX29mZihmaWVsZFsxXSwgT19BVVRPU0tJUCk7CisgICAgICAgIAorICAgICAgICAvKiBDcmVhdGUgdGhlIGZvcm0gYW5kIHBvc3QgaXQgKi8KKyAgICAgICAgbXlfZm9ybSA9IG5ld19mb3JtKGZpZWxkKTsKKyAgICAgICAgCisgICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgYXJlYSByZXF1aXJlZCBmb3IgdGhlIGZvcm0gKi8KKyAgICAgICAgc2NhbGVfZm9ybShteV9mb3JtLCAmYW1wO3Jvd3MsICZhbXA7Y29scyk7CisKKyAgICAgICAgLyogQ3JlYXRlIHRoZSB3aW5kb3cgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmb3JtICovCisgICAgICAgIG15X2Zvcm1fd2luID0gbmV3d2luKHJvd3MgKyA0LCBjb2xzICsgNCwgNCwgNCk7CisgICAgICAgIGtleXBhZChteV9mb3JtX3dpbiwgVFJVRSk7CisKKyAgICAgICAgLyogU2V0IG1haW4gd2luZG93IGFuZCBzdWIgd2luZG93ICovCisgICAgICAgIHNldF9mb3JtX3dpbihteV9mb3JtLCBteV9mb3JtX3dpbik7CisgICAgICAgIHNldF9mb3JtX3N1YihteV9mb3JtLCBkZXJ3aW4obXlfZm9ybV93aW4sIHJvd3MsIGNvbHMsIDIsIDIpKTsKKworICAgICAgICAvKiBQcmludCBhIGJvcmRlciBhcm91bmQgdGhlIG1haW4gd2luZG93IGFuZCBwcmludCBhIHRpdGxlICovCisgICAgICAgIGJveChteV9mb3JtX3dpbiwgMCwgMCk7CisgICAgICAgIHByaW50X2luX21pZGRsZShteV9mb3JtX3dpbiwgMSwgMCwgY29scyArIDQsICJNeSBGb3JtIiwgQ09MT1JfUEFJUigxKSk7CisgICAgICAgIAorICAgICAgICBwb3N0X2Zvcm0obXlfZm9ybSk7CisgICAgICAgIHdyZWZyZXNoKG15X2Zvcm1fd2luKTsKKworICAgICAgICBtdnByaW50dyhMSU5FUyAtIDIsIDAsICJVc2UgVVAsIERPV04gYXJyb3cga2V5cyB0byBzd2l0Y2ggYmV0d2VlbiBmaWVsZHMiKTsKKyAgICAgICAgcmVmcmVzaCgpOworCisgICAgICAgIC8qIExvb3AgdGhyb3VnaCB0byBnZXQgdXNlciByZXF1ZXN0cyAqLworICAgICAgICB3aGlsZSgoY2ggPSB3Z2V0Y2gobXlfZm9ybV93aW4pKSAhPSBLRVlfRigxKSkKKyAgICAgICAgeyAgICAgICBzd2l0Y2goY2gpCisgICAgICAgICAgICAgICAgeyAgICAgICBjYXNlIEtFWV9ET1dOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHbyB0byBuZXh0IGZpZWxkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1fZHJpdmVyKG15X2Zvcm0sIFJFUV9ORVhUX0ZJRUxEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gdGhlIGVuZCBvZiB0aGUgcHJlc2VudCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVhdmVzIG5pY2VseSBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX0VORF9MSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWV9VUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR28gdG8gcHJldmlvdXMgZmllbGQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9kcml2ZXIobXlfZm9ybSwgUkVRX1BSRVZfRklFTEQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBSRVFfRU5EX0xJTkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgaXMgYSBub3JtYWwgY2hhcmFjdGVyLCBpdCBnZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtX2RyaXZlcihteV9mb3JtLCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIFVuIHBvc3QgZm9ybSBhbmQgZnJlZSB0aGUgbWVtb3J5ICovCisgICAgICAgIHVucG9zdF9mb3JtKG15X2Zvcm0pOworICAgICAgICBmcmVlX2Zvcm0obXlfZm9ybSk7CisgICAgICAgIGZyZWVfZmllbGQoZmllbGRbMF0pOworICAgICAgICBmcmVlX2ZpZWxkKGZpZWxkWzFdKTsgCisKKyAgICAgICAgZW5kd2luKCk7CisgICAgICAgIHJldHVybiAwOworfQorCit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eCwgaW50IHdpZHRoLCBjaGFyICpzdHJpbmcsIGNodHlwZSBjb2xvcikKK3sgICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKyAgICAgICAgZmxvYXQgdGVtcDsKKworICAgICAgICBpZih3aW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB3aW4gPSBzdGRzY3I7CisgICAgICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgICAgIGlmKHN0YXJ0eCAhPSAwKQorICAgICAgICAgICAgICAgIHggPSBzdGFydHg7CisgICAgICAgIGlmKHN0YXJ0eSAhPSAwKQorICAgICAgICAgICAgICAgIHkgPSBzdGFydHk7CisgICAgICAgIGlmKHdpZHRoID09IDApCisgICAgICAgICAgICAgICAgd2lkdGggPSA4MDsKKworICAgICAgICBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkvIDI7CisgICAgICAgIHggPSBzdGFydHggKyAoaW50KXRlbXA7CisgICAgICAgIHdhdHRyb24od2luLCBjb2xvcik7CisgICAgICAgIG12d3ByaW50dyh3aW4sIHksIHgsICIlcyIsIHN0cmluZyk7CisgICAgICAgIHdhdHRyb2ZmKHdpbiwgY29sb3IpOworICAgICAgICByZWZyZXNoKCk7Cit9PC9zcGFuPjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJGSUxFRFZBTElEQVRFIiBpZD0iRklMRURWQUxJREFURSI+MTguNS4KK0ZpZWxkIFZhbGlkYXRpb248L2E+PC9oMz4KKzxwPkJ5IGRlZmF1bHQsIGEgZmllbGQgd2lsbCBhY2NlcHQgYW55IGRhdGEgaW5wdXQgYnkgdGhlIHVzZXIuIEl0CitpcyBwb3NzaWJsZSB0byBhdHRhY2ggdmFsaWRhdGlvbiB0byB0aGUgZmllbGQuIFRoZW4gYW55IGF0dGVtcHQgYnkKK3RoZSB1c2VyIHRvIGxlYXZlIHRoZSBmaWVsZCwgd2hpbGUgaXQgY29udGFpbnMgZGF0YSB0aGF0IGRvZXNuJ3QKK21hdGNoIHRoZSB2YWxpZGF0aW9uIHR5cGUgd2lsbCBmYWlsLiBTb21lIHZhbGlkYXRpb24gdHlwZXMgYWxzbworaGF2ZSBhIGNoYXJhY3Rlci12YWxpZGl0eSBjaGVjayBmb3IgZWFjaCB0aW1lIGEgY2hhcmFjdGVyIGlzCitlbnRlcmVkIGluIHRoZSBmaWVsZC48L3A+Cis8cD5WYWxpZGF0aW9uIGNhbiBiZSBhdHRhY2hlZCB0byBhIGZpZWxkIHdpdGggdGhlIGZvbGxvd2luZworZnVuY3Rpb24uPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKmZ0eXBlLCAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgLi4uKTsgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGFyZ3VtZW50cyovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorT25jZSBzZXQsIHRoZSB2YWxpZGF0aW9uIHR5cGUgZm9yIGEgZmllbGQgY2FuIGJlIHF1ZXJpZWQgd2l0aAorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+RklFTERUWVBFICpmaWVsZF90eXBlKEZJRUxEICpmaWVsZCk7ICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGUgZm9ybSBkcml2ZXIgdmFsaWRhdGVzIHRoZSBkYXRhIGluIGEgZmllbGQgb25seSB3aGVuIGRhdGEgaXMKK2VudGVyZWQgYnkgdGhlIGVuZC11c2VyLiBWYWxpZGF0aW9uIGRvZXMgbm90IG9jY3VyIHdoZW48L3A+Cis8dWw+Cis8bGk+Cis8cD50aGUgYXBwbGljYXRpb24gcHJvZ3JhbSBjaGFuZ2VzIHRoZSBmaWVsZCB2YWx1ZSBieSBjYWxsaW5nCitzZXRfZmllbGRfYnVmZmVyLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5saW5rZWQgZmllbGQgdmFsdWVzIGFyZSBjaGFuZ2VkIGluZGlyZWN0bHkgLS0gYnkgY2hhbmdpbmcgdGhlCitmaWVsZCB0byB3aGljaCB0aGV5IGFyZSBsaW5rZWQ8L3A+Cis8L2xpPgorPC91bD4KKzxwPlRoZSBmb2xsb3dpbmcgYXJlIHRoZSBwcmUtZGVmaW5lZCB2YWxpZGF0aW9uIHR5cGVzLiBZb3UgY2FuIGFsc28KK3NwZWNpZnkgY3VzdG9tIHZhbGlkYXRpb24sIHRob3VnaCBpdCdzIGEgYml0IHRyaWNreSBhbmQKK2N1bWJlcnNvbWUuPC9wPgorPGgxIGNsYXNzPSJCUklER0VIRUFEIj48YSBuYW1lPSJBRU4xMDY5IiBpZD0KKyJBRU4xMDY5Ij48L2E+VFlQRV9BTFBIQTwvaDE+Cis8cD5UaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBhbHBoYWJldGljIGRhdGE7IG5vIGJsYW5rcywgbm8gZGlnaXRzLAorbm8gc3BlY2lhbCBjaGFyYWN0ZXJzICh0aGlzIGlzIGNoZWNrZWQgYXQgY2hhcmFjdGVyLWVudHJ5IHRpbWUpLiBJdAoraXMgc2V0IHVwIHdpdGg6PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0FMUEhBLCAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoKTsgICAgICAgICAgICAvKiBtYXhpbXVtIHdpZHRoIG9mIGZpZWxkICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIHdpZHRoIGFyZ3VtZW50IHNldHMgYSBtaW5pbXVtIHdpZHRoIG9mIGRhdGEuIFRoZSB1c2VyIGhhcyB0bworZW50ZXIgYXQtbGVhc3Qgd2lkdGggbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIGhlIGNhbiBsZWF2ZSB0aGUKK2ZpZWxkLiBUeXBpY2FsbHkgeW91J2xsIHdhbnQgdG8gc2V0IHRoaXMgdG8gdGhlIGZpZWxkIHdpZHRoOyBpZgoraXQncyBncmVhdGVyIHRoYW4gdGhlIGZpZWxkIHdpZHRoLCB0aGUgdmFsaWRhdGlvbiBjaGVjayB3aWxsIGFsd2F5cworZmFpbC4gQSBtaW5pbXVtIHdpZHRoIG9mIHplcm8gbWFrZXMgZmllbGQgY29tcGxldGlvbiBvcHRpb25hbC48L3A+Cis8aDEgY2xhc3M9IkJSSURHRUhFQUQiPjxhIG5hbWU9IkFFTjEwNzMiIGlkPQorIkFFTjEwNzMiPjwvYT5UWVBFX0FMTlVNPC9oMT4KKzxwPlRoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGFscGhhYmV0aWMgZGF0YSBhbmQgZGlnaXRzOyBubyBibGFua3MsCitubyBzcGVjaWFsIGNoYXJhY3RlcnMgKHRoaXMgaXMgY2hlY2tlZCBhdCBjaGFyYWN0ZXItZW50cnkgdGltZSkuIEl0CitpcyBzZXQgdXAgd2l0aDo8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj5pbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfQUxOVU0sICAgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgpOyAgICAgICAgICAgIC8qIG1heGltdW0gd2lkdGggb2YgZmllbGQgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGUgd2lkdGggYXJndW1lbnQgc2V0cyBhIG1pbmltdW0gd2lkdGggb2YgZGF0YS4gQXMgd2l0aAorVFlQRV9BTFBIQSwgdHlwaWNhbGx5IHlvdSdsbCB3YW50IHRvIHNldCB0aGlzIHRvIHRoZSBmaWVsZCB3aWR0aDsKK2lmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZSBmaWVsZCB3aWR0aCwgdGhlIHZhbGlkYXRpb24gY2hlY2sgd2lsbAorYWx3YXlzIGZhaWwuIEEgbWluaW11bSB3aWR0aCBvZiB6ZXJvIG1ha2VzIGZpZWxkIGNvbXBsZXRpb24KK29wdGlvbmFsLjwvcD4KKzxoMSBjbGFzcz0iQlJJREdFSEVBRCI+PGEgbmFtZT0iQUVOMTA3NyIgaWQ9CisiQUVOMTA3NyI+PC9hPlRZUEVfRU5VTTwvaDE+Cis8cD5UaGlzIHR5cGUgYWxsb3dzIHlvdSB0byByZXN0cmljdCBhIGZpZWxkJ3MgdmFsdWVzIHRvIGJlIGFtb25nIGEKK3NwZWNpZmllZCBzZXQgb2Ygc3RyaW5nIHZhbHVlcyAoZm9yIGV4YW1wbGUsIHRoZSB0d28tbGV0dGVyIHBvc3RhbAorY29kZXMgZm9yIFUuUy4gc3RhdGVzKS4gSXQgaXMgc2V0IHVwIHdpdGg6PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0VOVU0sICAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnZhbHVlbGlzdDsgICAgICAvKiBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyAqLworICAgICAgICAgICAgICAgICAgIGludCBjaGVja2Nhc2U7ICAgICAgICAgLyogY2FzZS1zZW5zaXRpdmU/ICovCisgICAgICAgICAgICAgICAgICAgaW50IGNoZWNrdW5pcXVlKTsgICAgICAvKiBtdXN0IHNwZWNpZnkgdW5pcXVlbHk/ICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIHZhbHVlbGlzdCBwYXJhbWV0ZXIgbXVzdCBwb2ludCBhdCBhIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mCit2YWxpZCBzdHJpbmdzLiBUaGUgY2hlY2tjYXNlIGFyZ3VtZW50LCBpZiB0cnVlLCBtYWtlcyBjb21wYXJpc29uCit3aXRoIHRoZSBzdHJpbmcgY2FzZS1zZW5zaXRpdmUuPC9wPgorPHA+V2hlbiB0aGUgdXNlciBleGl0cyBhIFRZUEVfRU5VTSBmaWVsZCwgdGhlIHZhbGlkYXRpb24gcHJvY2VkdXJlCit0cmllcyB0byBjb21wbGV0ZSB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIHRvIGEgdmFsaWQgZW50cnkuIElmIGEKK2NvbXBsZXRlIGNob2ljZSBzdHJpbmcgaGFzIGJlZW4gZW50ZXJlZCwgaXQgaXMgb2YgY291cnNlIHZhbGlkLiBCdXQKK2l0IGlzIGFsc28gcG9zc2libGUgdG8gZW50ZXIgYSBwcmVmaXggb2YgYSB2YWxpZCBzdHJpbmcgYW5kIGhhdmUgaXQKK2NvbXBsZXRlZCBmb3IgeW91LjwvcD4KKzxwPkJ5IGRlZmF1bHQsIGlmIHlvdSBlbnRlciBzdWNoIGEgcHJlZml4IGFuZCBpdCBtYXRjaGVzIG1vcmUgdGhhbgorb25lIHZhbHVlIGluIHRoZSBzdHJpbmcgbGlzdCwgdGhlIHByZWZpeCB3aWxsIGJlIGNvbXBsZXRlZCB0byB0aGUKK2ZpcnN0IG1hdGNoaW5nIHZhbHVlLiBCdXQgdGhlIGNoZWNrdW5pcXVlIGFyZ3VtZW50LCBpZiB0cnVlLAorcmVxdWlyZXMgcHJlZml4IG1hdGNoZXMgdG8gYmUgdW5pcXVlIGluIG9yZGVyIHRvIGJlIHZhbGlkLjwvcD4KKzxwPlRoZSBSRVFfTkVYVF9DSE9JQ0UgYW5kIFJFUV9QUkVWX0NIT0lDRSBpbnB1dCByZXF1ZXN0cyBjYW4gYmUKK3BhcnRpY3VsYXJseSB1c2VmdWwgd2l0aCB0aGVzZSBmaWVsZHMuPC9wPgorPGgxIGNsYXNzPSJCUklER0VIRUFEIj48YSBuYW1lPSJBRU4xMDg0IiBpZD0KKyJBRU4xMDg0Ij48L2E+VFlQRV9JTlRFR0VSPC9oMT4KKzxwPlRoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGFuIGludGVnZXIuIEl0IGlzIHNldCB1cCBhcyBmb2xsb3dzOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9JTlRFR0VSLCAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGludCBwYWRkaW5nLCAgICAgICAgICAgLyogIyBwbGFjZXMgdG8gemVyby1wYWQgdG8gKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgdm1pbiwgaW50IHZtYXgpOyAgIC8qIHZhbGlkIHJhbmdlICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VmFsaWQgY2hhcmFjdGVycyBjb25zaXN0IG9mIGFuIG9wdGlvbmFsIGxlYWRpbmcgbWludXMgYW5kCitkaWdpdHMuIFRoZSByYW5nZSBjaGVjayBpcyBwZXJmb3JtZWQgb24gZXhpdC4gSWYgdGhlIHJhbmdlIG1heGltdW0KK2lzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWluaW11bSwgdGhlIHJhbmdlIGlzIGlnbm9yZWQuPC9wPgorPHA+SWYgdGhlIHZhbHVlIHBhc3NlcyBpdHMgcmFuZ2UgY2hlY2ssIGl0IGlzIHBhZGRlZCB3aXRoIGFzIG1hbnkKK2xlYWRpbmcgemVybyBkaWdpdHMgYXMgbmVjZXNzYXJ5IHRvIG1lZXQgdGhlIHBhZGRpbmcgYXJndW1lbnQuPC9wPgorPHA+QSBUWVBFX0lOVEVHRVIgdmFsdWUgYnVmZmVyIGNhbiBjb252ZW5pZW50bHkgYmUgaW50ZXJwcmV0ZWQgd2l0aAordGhlIEMgbGlicmFyeSBmdW5jdGlvbiBhdG9pKDMpLjwvcD4KKzxoMSBjbGFzcz0iQlJJREdFSEVBRCI+PGEgbmFtZT0iQUVOMTA5MCIgaWQ9CisiQUVOMTA5MCI+PC9hPlRZUEVfTlVNRVJJQzwvaDE+Cis8cD5UaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBhIGRlY2ltYWwgbnVtYmVyLiBJdCBpcyBzZXQgdXAgYXMKK2ZvbGxvd3M6PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX05VTUVSSUMsICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHBhZGRpbmcsICAgICAgICAgICAvKiAjIHBsYWNlcyBvZiBwcmVjaXNpb24gKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgdm1pbiwgaW50IHZtYXgpOyAgIC8qIHZhbGlkIHJhbmdlICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VmFsaWQgY2hhcmFjdGVycyBjb25zaXN0IG9mIGFuIG9wdGlvbmFsIGxlYWRpbmcgbWludXMgYW5kCitkaWdpdHMuIHBvc3NpYmx5IGluY2x1ZGluZyBhIGRlY2ltYWwgcG9pbnQuIFRoZSByYW5nZSBjaGVjayBpcworcGVyZm9ybWVkIG9uIGV4aXQuIElmIHRoZSByYW5nZSBtYXhpbXVtIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bwordGhlIG1pbmltdW0sIHRoZSByYW5nZSBpcyBpZ25vcmVkLjwvcD4KKzxwPklmIHRoZSB2YWx1ZSBwYXNzZXMgaXRzIHJhbmdlIGNoZWNrLCBpdCBpcyBwYWRkZWQgd2l0aCBhcyBtYW55Cit0cmFpbGluZyB6ZXJvIGRpZ2l0cyBhcyBuZWNlc3NhcnkgdG8gbWVldCB0aGUgcGFkZGluZyBhcmd1bWVudC48L3A+Cis8cD5BIFRZUEVfTlVNRVJJQyB2YWx1ZSBidWZmZXIgY2FuIGNvbnZlbmllbnRseSBiZSBpbnRlcnByZXRlZCB3aXRoCit0aGUgQyBsaWJyYXJ5IGZ1bmN0aW9uIGF0b2YoMykuPC9wPgorPGgxIGNsYXNzPSJCUklER0VIRUFEIj48YSBuYW1lPSJBRU4xMDk2IiBpZD0KKyJBRU4xMDk2Ij48L2E+VFlQRV9SRUdFWFA8L2gxPgorPHA+VGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgZGF0YSBtYXRjaGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gSXQKK2lzIHNldCB1cCBhcyBmb2xsb3dzOjwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPmludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9SRUdFWFAsICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlZ2V4cCk7ICAgICAgICAgLyogZXhwcmVzc2lvbiB0byBtYXRjaCAqLzwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPlRoZSBzeW50YXggZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaXMgdGhhdCBvZiByZWdjb21wKDMpLiBUaGUKK2NoZWNrIGZvciByZWd1bGFyLWV4cHJlc3Npb24gbWF0Y2ggaXMgcGVyZm9ybWVkIG9uIGV4aXQuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJGT1JNRFJJVkVSIiBpZD0iRk9STURSSVZFUiI+MTguNi4gRm9ybQorRHJpdmVyOiBUaGUgd29yayBob3JzZSBvZiB0aGUgZm9ybXMgc3lzdGVtPC9hPjwvaDM+Cis8cD5BcyBpbiB0aGUgbWVudSBzeXN0ZW0sIGZvcm1fZHJpdmVyKCkgcGxheXMgYSB2ZXJ5IGltcG9ydGFudCByb2xlCitpbiBmb3JtcyBzeXN0ZW0uIEFsbCB0eXBlcyBvZiByZXF1ZXN0cyB0byBmb3JtcyBzeXN0ZW0gc2hvdWxkIGJlCitmdW5uZWxlZCB0aHJvdWdoIGZvcm1fZHJpdmVyKCkuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IGZvcm1fZHJpdmVyKEZPUk0gKmZvcm0sICAgICAvKiBmb3JtIG9uIHdoaWNoIHRvIG9wZXJhdGUgICAgICovCisgICAgICAgICAgICAgICAgaW50IHJlcXVlc3QpICAgIC8qIGZvcm0gcmVxdWVzdCBjb2RlICAgICAgICAgKi88L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5BcyB5b3UgaGF2ZSBzZWVuIHNvbWUgb2YgdGhlIGV4YW1wbGVzIGFib3ZlLCB5b3UgaGF2ZSB0byBiZSBpbiBhCitsb29wIGxvb2tpbmcgZm9yIHVzZXIgaW5wdXQgYW5kIHRoZW4gZGVjaWRlIHdoZXRoZXIgaXQncyBhIGZpZWxkCitkYXRhIG9yIGEgZm9ybSByZXF1ZXN0LiBUaGUgZm9ybSByZXF1ZXN0cyBhcmUgdGhlbiBwYXNzZWQgdG8KK2Zvcm1fZHJpdmVyKCkgdG8gZG8gdGhlIHdvcmsuPC9wPgorPHA+VGhlIHJlcXVlc3RzIHJvdWdobHkgY2FuIGJlIGRpdmlkZWQgaW50byBmb2xsb3dpbmcgY2F0ZWdvcmllcy4KK0RpZmZlcmVudCByZXF1ZXN0cyBhbmQgdGhlaXIgdXNhZ2UgaXMgZXhwbGFpbmVkIGJlbG93OjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IlBBR0VOQVZSRVEiIGlkPSJQQUdFTkFWUkVRIj4xOC42LjEuIFBhZ2UKK05hdmlnYXRpb24gUmVxdWVzdHM8L2E+PC9oND4KKzxwPlRoZXNlIHJlcXVlc3RzIGNhdXNlIHBhZ2UtbGV2ZWwgbW92ZXMgdGhyb3VnaCB0aGUgZm9ybSwKK3RyaWdnZXJpbmcgZGlzcGxheSBvZiBhIG5ldyBmb3JtIHNjcmVlbi4gQSBmb3JtIGNhbiBiZSBtYWRlIG9mCittdWx0aXBsZSBwYWdlcy4gSWYgeW91IGhhdmUgYSBiaWcgZm9ybSB3aXRoIGxvdCBvZiBmaWVsZHMgYW5kCitsb2dpY2FsIHNlY3Rpb25zLCB0aGVuIHlvdSBjYW4gZGl2aWRlIHRoZSBmb3JtIGludG8gcGFnZXMuIFRoZQorZnVuY3Rpb24gc2V0X25ld19wYWdlKCkgdG8gc2V0IGEgbmV3IHBhZ2UgYXQgdGhlIGZpZWxkCitzcGVjaWZpZWQuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9CisiIzAwMDAwMCI+aW50IHNldF9uZXdfcGFnZShGSUVMRCAqZmllbGQsLyogRmllbGQgYXQgd2hpY2ggcGFnZSBicmVhayB0byBiZSBzZXQgb3IgdW5zZXQgKi8KKyAgICAgICAgIGJvb2wgbmV3X3BhZ2VfZmxhZyk7IC8qIHNob3VsZCBiZSBUUlVFIHRvIHB1dCBhIGJyZWFrICovPC9mb250PgorPC9wcmU+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPHA+VGhlIGZvbGxvd2luZyByZXF1ZXN0cyBhbGxvdyB5b3UgdG8gbW92ZSB0byBkaWZmZXJlbnQgcGFnZXM8L3A+Cis8dWw+Cis8bGk+Cis8cD48ZW0+UkVRX05FWFRfUEFHRTwvZW0+IE1vdmUgdG8gdGhlIG5leHQgZm9ybSBwYWdlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1BSRVZfUEFHRTwvZW0+IE1vdmUgdG8gdGhlIHByZXZpb3VzIGZvcm0gcGFnZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9GSVJTVF9QQUdFPC9lbT4gTW92ZSB0byB0aGUgZmlyc3QgZm9ybSBwYWdlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0xBU1RfUEFHRTwvZW0+IE1vdmUgdG8gdGhlIGxhc3QgZm9ybSBwYWdlLjwvcD4KKzwvbGk+Cis8L3VsPgorPHA+VGhlc2UgcmVxdWVzdHMgdHJlYXQgdGhlIGxpc3QgYXMgY3ljbGljOyB0aGF0IGlzLCBSRVFfTkVYVF9QQUdFCitmcm9tIHRoZSBsYXN0IHBhZ2UgZ29lcyB0byB0aGUgZmlyc3QsIGFuZCBSRVFfUFJFVl9QQUdFIGZyb20gdGhlCitmaXJzdCBwYWdlIGdvZXMgdG8gdGhlIGxhc3QuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJJTlRFUkZJRUxETkFWUkVRIiBpZD0KKyJJTlRFUkZJRUxETkFWUkVRIj4xOC42LjIuIEludGVyLUZpZWxkIE5hdmlnYXRpb24gUmVxdWVzdHM8L2E+PC9oND4KKzxwPlRoZXNlIHJlcXVlc3RzIGhhbmRsZSBuYXZpZ2F0aW9uIGJldHdlZW4gZmllbGRzIG9uIHRoZSBzYW1lCitwYWdlLjwvcD4KKzx1bD4KKzxsaT4KKzxwPjxlbT5SRVFfTkVYVF9GSUVMRDwvZW0+IE1vdmUgdG8gbmV4dCBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9QUkVWX0ZJRUxEPC9lbT4gTW92ZSB0byBwcmV2aW91cyBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9GSVJTVF9GSUVMRDwvZW0+IE1vdmUgdG8gdGhlIGZpcnN0IGZpZWxkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0xBU1RfRklFTEQ8L2VtPiBNb3ZlIHRvIHRoZSBsYXN0IGZpZWxkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NORVhUX0ZJRUxEPC9lbT4gTW92ZSB0byBzb3J0ZWQgbmV4dCBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TUFJFVl9GSUVMRDwvZW0+IE1vdmUgdG8gc29ydGVkIHByZXZpb3VzIGZpZWxkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NGSVJTVF9GSUVMRDwvZW0+IE1vdmUgdG8gdGhlIHNvcnRlZCBmaXJzdCBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TTEFTVF9GSUVMRDwvZW0+IE1vdmUgdG8gdGhlIHNvcnRlZCBsYXN0IGZpZWxkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0xFRlRfRklFTEQ8L2VtPiBNb3ZlIGxlZnQgdG8gZmllbGQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfUklHSFRfRklFTEQ8L2VtPiBNb3ZlIHJpZ2h0IHRvIGZpZWxkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1VQX0ZJRUxEPC9lbT4gTW92ZSB1cCB0byBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9ET1dOX0ZJRUxEPC9lbT4gTW92ZSBkb3duIHRvIGZpZWxkLjwvcD4KKzwvbGk+Cis8L3VsPgorPHA+VGhlc2UgcmVxdWVzdHMgdHJlYXQgdGhlIGxpc3Qgb2YgZmllbGRzIG9uIGEgcGFnZSBhcyBjeWNsaWM7Cit0aGF0IGlzLCBSRVFfTkVYVF9GSUVMRCBmcm9tIHRoZSBsYXN0IGZpZWxkIGdvZXMgdG8gdGhlIGZpcnN0LCBhbmQKK1JFUV9QUkVWX0ZJRUxEIGZyb20gdGhlIGZpcnN0IGZpZWxkIGdvZXMgdG8gdGhlIGxhc3QuIFRoZSBvcmRlciBvZgordGhlIGZpZWxkcyBmb3IgdGhlc2UgKGFuZCB0aGUgUkVRX0ZJUlNUX0ZJRUxEIGFuZCBSRVFfTEFTVF9GSUVMRAorcmVxdWVzdHMpIGlzIHNpbXBseSB0aGUgb3JkZXIgb2YgdGhlIGZpZWxkIHBvaW50ZXJzIGluIHRoZSBmb3JtCithcnJheSAoYXMgc2V0IHVwIGJ5IG5ld19mb3JtKCkgb3Igc2V0X2Zvcm1fZmllbGRzKCk8L3A+Cis8cD5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHRyYXZlcnNlIHRoZSBmaWVsZHMgYXMgaWYgdGhleSBoYWQgYmVlbgorc29ydGVkIGluIHNjcmVlbi1wb3NpdGlvbiBvcmRlciwgc28gdGhlIHNlcXVlbmNlIGdvZXMgbGVmdC10by1yaWdodAorYW5kIHRvcC10by1ib3R0b20uIFRvIGRvIHRoaXMsIHVzZSB0aGUgc2Vjb25kIGdyb3VwIG9mIGZvdXIKK3NvcnRlZC1tb3ZlbWVudCByZXF1ZXN0cy48L3A+Cis8cD5GaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBtb3ZlIGJldHdlZW4gZmllbGRzIHVzaW5nIHZpc3VhbAorZGlyZWN0aW9ucyB1cCwgZG93biwgcmlnaHQsIGFuZCBsZWZ0LiBUbyBhY2NvbXBsaXNoIHRoaXMsIHVzZSB0aGUKK3RoaXJkIGdyb3VwIG9mIGZvdXIgcmVxdWVzdHMuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIHBvc2l0aW9uIG9mIGEKK2Zvcm0gZm9yIHB1cnBvc2VzIG9mIHRoZXNlIHJlcXVlc3RzIGlzIGl0cyB1cHBlci1sZWZ0IGNvcm5lci48L3A+Cis8cD5Gb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIG11bHRpLWxpbmUgZmllbGQgQiwgYW5kIHR3bworc2luZ2xlLWxpbmUgZmllbGRzIEEgYW5kIEMgb24gdGhlIHNhbWUgbGluZSB3aXRoIEIsIHdpdGggQSB0byB0aGUKK2xlZnQgb2YgQiBhbmQgQyB0byB0aGUgcmlnaHQgb2YgQi4gQSBSRVFfTU9WRV9SSUdIVCBmcm9tIEEgd2lsbCBnbwordG8gQiBvbmx5IGlmIEEsIEIsIGFuZCBDIGFsbCBzaGFyZSB0aGUgc2FtZSBmaXJzdCBsaW5lOyBvdGhlcndpc2UKK2l0IHdpbGwgc2tpcCBvdmVyIEIgdG8gQy48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IklOVFJBRklFTEROQVZSRVEiIGlkPQorIklOVFJBRklFTEROQVZSRVEiPjE4LjYuMy4gSW50cmEtRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0czwvYT48L2g0PgorPHA+VGhlc2UgcmVxdWVzdHMgZHJpdmUgbW92ZW1lbnQgb2YgdGhlIGVkaXQgY3Vyc29yIHdpdGhpbiB0aGUKK2N1cnJlbnRseSBzZWxlY3RlZCBmaWVsZC48L3A+Cis8dWw+Cis8bGk+Cis8cD48ZW0+UkVRX05FWFRfQ0hBUjwvZW0+IE1vdmUgdG8gbmV4dCBjaGFyYWN0ZXIuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfUFJFVl9DSEFSPC9lbT4gTW92ZSB0byBwcmV2aW91cyBjaGFyYWN0ZXIuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfTkVYVF9MSU5FPC9lbT4gTW92ZSB0byBuZXh0IGxpbmUuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfUFJFVl9MSU5FPC9lbT4gTW92ZSB0byBwcmV2aW91cyBsaW5lLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX05FWFRfV09SRDwvZW0+IE1vdmUgdG8gbmV4dCB3b3JkLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1BSRVZfV09SRDwvZW0+IE1vdmUgdG8gcHJldmlvdXMgd29yZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9CRUdfRklFTEQ8L2VtPiBNb3ZlIHRvIGJlZ2lubmluZyBvZiBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9FTkRfRklFTEQ8L2VtPiBNb3ZlIHRvIGVuZCBvZiBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9CRUdfTElORTwvZW0+IE1vdmUgdG8gYmVnaW5uaW5nIG9mIGxpbmUuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfRU5EX0xJTkU8L2VtPiBNb3ZlIHRvIGVuZCBvZiBsaW5lLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0xFRlRfQ0hBUjwvZW0+IE1vdmUgbGVmdCBpbiBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9SSUdIVF9DSEFSPC9lbT4gTW92ZSByaWdodCBpbiBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9VUF9DSEFSPC9lbT4gTW92ZSB1cCBpbiBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9ET1dOX0NIQVI8L2VtPiBNb3ZlIGRvd24gaW4gZmllbGQuPC9wPgorPC9saT4KKzwvdWw+Cis8cD5FYWNoIHdvcmQgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIGFuZCBuZXh0IGNoYXJhY3RlcnMgYnkKK3doaXRlc3BhY2UuIFRoZSBjb21tYW5kcyB0byBtb3ZlIHRvIGJlZ2lubmluZyBhbmQgZW5kIG9mIGxpbmUgb3IKK2ZpZWxkIGxvb2sgZm9yIHRoZSBmaXJzdCBvciBsYXN0IG5vbi1wYWQgY2hhcmFjdGVyIGluIHRoZWlyCityYW5nZXMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJTQ1JPTExSRVEiIGlkPSJTQ1JPTExSRVEiPjE4LjYuNC4KK1Njcm9sbGluZyBSZXF1ZXN0czwvYT48L2g0PgorPHA+RmllbGRzIHRoYXQgYXJlIGR5bmFtaWMgYW5kIGhhdmUgZ3Jvd24gYW5kIGZpZWxkcyBleHBsaWNpdGx5CitjcmVhdGVkIHdpdGggb2Zmc2NyZWVuIHJvd3MgYXJlIHNjcm9sbGFibGUuIE9uZS1saW5lIGZpZWxkcyBzY3JvbGwKK2hvcml6b250YWxseTsgbXVsdGktbGluZSBmaWVsZHMgc2Nyb2xsIHZlcnRpY2FsbHkuIE1vc3Qgc2Nyb2xsaW5nCitpcyB0cmlnZ2VyZWQgYnkgZWRpdGluZyBhbmQgaW50cmEtZmllbGQgbW92ZW1lbnQgKHRoZSBsaWJyYXJ5CitzY3JvbGxzIHRoZSBmaWVsZCB0byBrZWVwIHRoZSBjdXJzb3IgdmlzaWJsZSkuIEl0IGlzIHBvc3NpYmxlIHRvCitleHBsaWNpdGx5IHJlcXVlc3Qgc2Nyb2xsaW5nIHdpdGggdGhlIGZvbGxvd2luZyByZXF1ZXN0czo8L3A+Cis8dWw+Cis8bGk+Cis8cD48ZW0+UkVRX1NDUl9GTElORTwvZW0+IFNjcm9sbCB2ZXJ0aWNhbGx5IGZvcndhcmQgYSBsaW5lLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NDUl9CTElORTwvZW0+IFNjcm9sbCB2ZXJ0aWNhbGx5IGJhY2t3YXJkIGEgbGluZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfRlBBR0U8L2VtPiBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGEgcGFnZS48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfQlBBR0U8L2VtPiBTY3JvbGwgdmVydGljYWxseSBiYWNrd2FyZCBhIHBhZ2UuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0ZIUEFHRTwvZW0+IFNjcm9sbCB2ZXJ0aWNhbGx5IGZvcndhcmQgaGFsZiBhCitwYWdlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1NDUl9CSFBBR0U8L2VtPiBTY3JvbGwgdmVydGljYWxseSBiYWNrd2FyZCBoYWxmIGEKK3BhZ2UuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0ZDSEFSPC9lbT4gU2Nyb2xsIGhvcml6b250YWxseSBmb3J3YXJkIGEKK2NoYXJhY3Rlci48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfQkNIQVI8L2VtPiBTY3JvbGwgaG9yaXpvbnRhbGx5IGJhY2t3YXJkIGEKK2NoYXJhY3Rlci48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfSEZMSU5FPC9lbT4gU2Nyb2xsIGhvcml6b250YWxseSBvbmUgZmllbGQgd2lkdGgKK2ZvcndhcmQuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfU0NSX0hCTElORTwvZW0+IFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGZpZWxkIHdpZHRoCitiYWNrd2FyZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfSEZIQUxGPC9lbT4gU2Nyb2xsIGhvcml6b250YWxseSBvbmUgaGFsZiBmaWVsZCB3aWR0aAorZm9yd2FyZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9TQ1JfSEJIQUxGPC9lbT4gU2Nyb2xsIGhvcml6b250YWxseSBvbmUgaGFsZiBmaWVsZCB3aWR0aAorYmFja3dhcmQuPC9wPgorPC9saT4KKzwvdWw+Cis8cD5Gb3Igc2Nyb2xsaW5nIHB1cnBvc2VzLCBhIHBhZ2Ugb2YgYSBmaWVsZCBpcyB0aGUgaGVpZ2h0IG9mIGl0cwordmlzaWJsZSBwYXJ0LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iRURJVFJFUSIgaWQ9IkVESVRSRVEiPjE4LjYuNS4gRWRpdGluZworUmVxdWVzdHM8L2E+PC9oND4KKzxwPldoZW4geW91IHBhc3MgdGhlIGZvcm1zIGRyaXZlciBhbiBBU0NJSSBjaGFyYWN0ZXIsIGl0IGlzIHRyZWF0ZWQKK2FzIGEgcmVxdWVzdCB0byBhZGQgdGhlIGNoYXJhY3RlciB0byB0aGUgZmllbGQncyBkYXRhIGJ1ZmZlci4KK1doZXRoZXIgdGhpcyBpcyBhbiBpbnNlcnRpb24gb3IgYSByZXBsYWNlbWVudCBkZXBlbmRzIG9uIHRoZQorZmllbGQncyBlZGl0IG1vZGUgKGluc2VydGlvbiBpcyB0aGUgZGVmYXVsdC48L3A+Cis8cD5UaGUgZm9sbG93aW5nIHJlcXVlc3RzIHN1cHBvcnQgZWRpdGluZyB0aGUgZmllbGQgYW5kIGNoYW5naW5nCit0aGUgZWRpdCBtb2RlOjwvcD4KKzx1bD4KKzxsaT4KKzxwPjxlbT5SRVFfSU5TX01PREU8L2VtPiBTZXQgaW5zZXJ0aW9uIG1vZGUuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfT1ZMX01PREU8L2VtPiBTZXQgb3ZlcmxheSBtb2RlLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX05FV19MSU5FPC9lbT4gTmV3IGxpbmUgcmVxdWVzdCAoc2VlIGJlbG93IGZvcgorZXhwbGFuYXRpb24pLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX0lOU19DSEFSPC9lbT4gSW5zZXJ0IHNwYWNlIGF0IGNoYXJhY3RlciBsb2NhdGlvbi48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9JTlNfTElORTwvZW0+IEluc2VydCBibGFuayBsaW5lIGF0IGNoYXJhY3RlcgorbG9jYXRpb24uPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfREVMX0NIQVI8L2VtPiBEZWxldGUgY2hhcmFjdGVyIGF0IGN1cnNvci48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9ERUxfUFJFVjwvZW0+IERlbGV0ZSBwcmV2aW91cyB3b3JkIGF0IGN1cnNvci48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9ERUxfTElORTwvZW0+IERlbGV0ZSBsaW5lIGF0IGN1cnNvci48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9ERUxfV09SRDwvZW0+IERlbGV0ZSB3b3JkIGF0IGN1cnNvci48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9DTFJfRU9MPC9lbT4gQ2xlYXIgdG8gZW5kIG9mIGxpbmUuPC9wPgorPC9saT4KKzxsaT4KKzxwPjxlbT5SRVFfQ0xSX0VPRjwvZW0+IENsZWFyIHRvIGVuZCBvZiBmaWVsZC48L3A+Cis8L2xpPgorPGxpPgorPHA+PGVtPlJFUV9DTFJfRklFTEQ8L2VtPiBDbGVhciBlbnRpcmUgZmllbGQuPC9wPgorPC9saT4KKzwvdWw+Cis8cD5UaGUgYmVoYXZpb3Igb2YgdGhlIFJFUV9ORVdfTElORSBhbmQgUkVRX0RFTF9QUkVWIHJlcXVlc3RzIGlzCitjb21wbGljYXRlZCBhbmQgcGFydGx5IGNvbnRyb2xsZWQgYnkgYSBwYWlyIG9mIGZvcm1zIG9wdGlvbnMuIFRoZQorc3BlY2lhbCBjYXNlcyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGN1cnNvciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mCithIGZpZWxkLCBvciBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWVsZC48L3A+Cis8cD5GaXJzdCwgd2UgY29uc2lkZXIgUkVRX05FV19MSU5FOjwvcD4KKzxwPlRoZSBub3JtYWwgYmVoYXZpb3Igb2YgUkVRX05FV19MSU5FIGluIGluc2VydCBtb2RlIGlzIHRvIGJyZWFrCit0aGUgY3VycmVudCBsaW5lIGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZWRpdCBjdXJzb3IsIGluc2VydGluZyB0aGUKK3BvcnRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSBhZnRlciB0aGUgY3Vyc29yIGFzIGEgbmV3IGxpbmUKK2ZvbGxvd2luZyB0aGUgY3VycmVudCBhbmQgbW92aW5nIHRoZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZgordGhhdCBuZXcgbGluZSAoeW91IG1heSB0aGluayBvZiB0aGlzIGFzIGluc2VydGluZyBhIG5ld2xpbmUgaW4gdGhlCitmaWVsZCBidWZmZXIpLjwvcD4KKzxwPlRoZSBub3JtYWwgYmVoYXZpb3Igb2YgUkVRX05FV19MSU5FIGluIG92ZXJsYXkgbW9kZSBpcyB0byBjbGVhcgordGhlIGN1cnJlbnQgbGluZSBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgZWRpdCBjdXJzb3IgdG8gZW5kIG9mCitsaW5lLiBUaGUgY3Vyc29yIGlzIHRoZW4gbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dAorbGluZS48L3A+Cis8cD5Ib3dldmVyLCBSRVFfTkVXX0xJTkUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkLCBvciBvbiB0aGUKK2xhc3QgbGluZSBvZiBhIGZpZWxkLCBpbnN0ZWFkIGRvZXMgYSBSRVFfTkVYVF9GSUVMRC4gT19OTF9PVkVSTE9BRAorb3B0aW9uIGlzIG9mZiwgdGhpcyBzcGVjaWFsIGFjdGlvbiBpcyBkaXNhYmxlZC48L3A+Cis8cD5Ob3csIGxldCB1cyBjb25zaWRlciBSRVFfREVMX1BSRVY6PC9wPgorPHA+VGhlIG5vcm1hbCBiZWhhdmlvciBvZiBSRVFfREVMX1BSRVYgaXMgdG8gZGVsZXRlIHRoZSBwcmV2aW91cworY2hhcmFjdGVyLiBJZiBpbnNlcnQgbW9kZSBpcyBvbiwgYW5kIHRoZSBjdXJzb3IgaXMgYXQgdGhlIHN0YXJ0IG9mCithIGxpbmUsIGFuZCB0aGUgdGV4dCBvbiB0aGF0IGxpbmUgd2lsbCBmaXQgb24gdGhlIHByZXZpb3VzIG9uZSwgaXQKK2luc3RlYWQgYXBwZW5kcyB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUgcHJldmlvdXMKK29uZSBhbmQgZGVsZXRlcyB0aGUgY3VycmVudCBsaW5lICh5b3UgbWF5IHRoaW5rIG9mIHRoaXMgYXMgZGVsZXRpbmcKK2EgbmV3bGluZSBmcm9tIHRoZSBmaWVsZCBidWZmZXIpLjwvcD4KKzxwPkhvd2V2ZXIsIFJFUV9ERUxfUFJFViBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQgaXMgaW5zdGVhZAordHJlYXRlZCBhcyBhIFJFUV9QUkVWX0ZJRUxELjwvcD4KKzxwPklmIHRoZSBPX0JTX09WRVJMT0FEIG9wdGlvbiBpcyBvZmYsIHRoaXMgc3BlY2lhbCBhY3Rpb24gaXMKK2Rpc2FibGVkIGFuZCB0aGUgZm9ybXMgZHJpdmVyIGp1c3QgcmV0dXJucyBFX1JFUVVFU1RfREVOSUVELjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iT1JERVJSRVEiIGlkPSJPUkRFUlJFUSI+MTguNi42LiBPcmRlcgorUmVxdWVzdHM8L2E+PC9oND4KKzxwPklmIHRoZSB0eXBlIG9mIHlvdXIgZmllbGQgaXMgb3JkZXJlZCwgYW5kIGhhcyBhc3NvY2lhdGVkCitmdW5jdGlvbnMgZm9yIGdldHRpbmcgdGhlIG5leHQgYW5kIHByZXZpb3VzIHZhbHVlcyBvZiB0aGUgdHlwZSBmcm9tCithIGdpdmVuIHZhbHVlLCB0aGVyZSBhcmUgcmVxdWVzdHMgdGhhdCBjYW4gZmV0Y2ggdGhhdCB2YWx1ZSBpbnRvCit0aGUgZmllbGQgYnVmZmVyOjwvcD4KKzx1bD4KKzxsaT4KKzxwPjxlbT5SRVFfTkVYVF9DSE9JQ0U8L2VtPiBQbGFjZSB0aGUgc3VjY2Vzc29yIHZhbHVlIG9mIHRoZQorY3VycmVudCB2YWx1ZSBpbiB0aGUgYnVmZmVyLjwvcD4KKzwvbGk+Cis8bGk+Cis8cD48ZW0+UkVRX1BSRVZfQ0hPSUNFPC9lbT4gUGxhY2UgdGhlIHByZWRlY2Vzc29yIHZhbHVlIG9mIHRoZQorY3VycmVudCB2YWx1ZSBpbiB0aGUgYnVmZmVyLjwvcD4KKzwvbGk+Cis8L3VsPgorPHA+T2YgdGhlIGJ1aWx0LWluIGZpZWxkIHR5cGVzLCBvbmx5IFRZUEVfRU5VTSBoYXMgYnVpbHQtaW4KK3N1Y2Nlc3NvciBhbmQgcHJlZGVjZXNzb3IgZnVuY3Rpb25zLiBXaGVuIHlvdSBkZWZpbmUgYSBmaWVsZCB0eXBlCitvZiB5b3VyIG93biAoc2VlIEN1c3RvbSBWYWxpZGF0aW9uIFR5cGVzKSwgeW91IGNhbiBhc3NvY2lhdGUgb3VyCitvd24gb3JkZXJpbmcgZnVuY3Rpb25zLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iQVBQTElDQ09NTUFORFMiIGlkPQorIkFQUExJQ0NPTU1BTkRTIj4xOC42LjcuIEFwcGxpY2F0aW9uIENvbW1hbmRzPC9hPjwvaDQ+Cis8cD5Gb3JtIHJlcXVlc3RzIGFyZSByZXByZXNlbnRlZCBhcyBpbnRlZ2VycyBhYm92ZSB0aGUgY3Vyc2VzIHZhbHVlCitncmVhdGVyIHRoYW4gS0VZX01BWCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb25zdGFudAorTUFYX0NPTU1BTkQuIEEgdmFsdWUgd2l0aGluIHRoaXMgcmFuZ2UgZ2V0cyBpZ25vcmVkIGJ5Citmb3JtX2RyaXZlcigpLiBTbyB0aGlzIGNhbiBiZSB1c2VkIGZvciBhbnkgcHVycG9zZSBieSB0aGUKK2FwcGxpY2F0aW9uLiBJdCBjYW4gYmUgdHJlYXRlZCBhcyBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBhY3Rpb24KK2FuZCB0YWtlIGNvcnJlc3BvbmRpbmcgYWN0aW9uLjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QxIj4KKzxocj4KKzxoMiBjbGFzcz0iU0VDVDEiPjxhIG5hbWU9IlRPT0xTIiBpZD0iVE9PTFMiPjE5LiBUb29scyBhbmQgV2lkZ2V0CitMaWJyYXJpZXM8L2E+PC9oMj4KKzxwPk5vdyB0aGF0IHlvdSBoYXZlIHNlZW4gdGhlIGNhcGFiaWxpdGllcyBvZiBuY3Vyc2VzIGFuZCBpdHMKK3Npc3RlciBsaWJyYXJpZXMsIHlvdSBhcmUgcm9sbGluZyB5b3VyIHNsZWV2ZXMgdXAgYW5kIGdlYXJpbmcgZm9yIGEKK3Byb2plY3QgdGhhdCBoZWF2aWx5IG1hbmlwdWxhdGVzIHNjcmVlbi4gQnV0IHdhaXQuLiBJdCBjYW4gYmUKK3ByZXR0eSBkaWZmaWN1bHQgdG8gd3JpdGUgYW5kIG1haW50YWluIGNvbXBsZXggR1VJIHdpZGdldHMgaW4gcGxhaW4KK25jdXJzZXMgb3IgZXZlbiB3aXRoIHRoZSBhZGRpdGlvbmFsIGxpYnJhcmllcy4gVGhlcmUgYXJlIHNvbWUKK3JlYWR5LXRvLXVzZSB0b29scyBhbmQgd2lkZ2V0IGxpYnJhcmllcyB0aGF0IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YKK3dyaXRpbmcgeW91ciBvd24gd2lkZ2V0cy4gWW91IGNhbiB1c2Ugc29tZSBvZiB0aGVtLCBnZXQgaWRlYXMgZnJvbQordGhlIGNvZGUsIG9yIGV2ZW4gZXh0ZW5kIHRoZW0uPC9wPgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iQ0RLIiBpZD0iQ0RLIj4xOS4xLiBDREsgKEN1cnNlcworRGV2ZWxvcG1lbnQgS2l0KTwvYT48L2gzPgorPHA+SW4gdGhlIGF1dGhvcidzIHdvcmRzPC9wPgorPHA+PGVtPkNESyBzdGFuZHMgZm9yICdDdXJzZXMgRGV2ZWxvcG1lbnQgS2l0JyBhbmQgaXQgY3VycmVudGx5Citjb250YWlucyAyMSByZWFkeSB0byB1c2Ugd2lkZ2V0cyB3aGljaCBmYWNpbGl0YXRlIHRoZSBzcGVlZHkKK2RldmVsb3BtZW50IG9mIGZ1bGwgc2NyZWVuIGN1cnNlcyBwcm9ncmFtcy48L2VtPjwvcD4KKzxwPlRoZSBraXQgcHJvdmlkZXMgc29tZSB1c2VmdWwgd2lkZ2V0cywgd2hpY2ggY2FuIGJlIHVzZWQgaW4geW91cgorcHJvZ3JhbXMgZGlyZWN0bHkuIEl0J3MgcHJldHR5IHdlbGwgd3JpdHRlbiBhbmQgdGhlIGRvY3VtZW50YXRpb24KK2lzIHZlcnkgZ29vZC4gVGhlIGV4YW1wbGVzIGluIHRoZSBleGFtcGxlcyBkaXJlY3RvcnkgY2FuIGJlIGEgZ29vZAorcGxhY2UgdG8gc3RhcnQgZm9yIGJlZ2lubmVycy4gVGhlIENESyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tCis8YSBocmVmPSJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLyIgdGFyZ2V0PQorIl90b3AiPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9jZGsvPC9hPiAuIEZvbGxvdyB0aGUKK2luc3RydWN0aW9ucyBpbiBSRUFETUUgZmlsZSB0byBpbnN0YWxsIGl0LjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QzIj4KKzxocj4KKzxoNCBjbGFzcz0iU0VDVDMiPjxhIG5hbWU9IldJREdFVExJU1QiIGlkPSJXSURHRVRMSVNUIj4xOS4xLjEuCitXaWRnZXQgTGlzdDwvYT48L2g0PgorPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgbGlzdCBvZiB3aWRnZXRzIHByb3ZpZGVkIHdpdGggY2RrIGFuZCB0aGVpcgorZGVzY3JpcHRpb24uPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0UwRTBFMCIgd2lkdGg9IjEwMCUiPgorPHRyPgorPHRkPgorPHByZSBjbGFzcz0iUFJPR1JBTUxJU1RJTkciPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiPldpZGdldCBUeXBlICAgICAgICAgICBRdWljayBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBbHBoYWxpc3QgICAgICAgICAgICAgQWxsb3dzIGEgdXNlciB0byBzZWxlY3QgZnJvbSBhIGxpc3Qgb2Ygd29yZHMsIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICB0aGUgYWJpbGl0eSB0byBuYXJyb3cgdGhlIHNlYXJjaCBsaXN0IGJ5IHR5cGluZyBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgZmV3IGNoYXJhY3RlcnMgb2YgdGhlIGRlc2lyZWQgd29yZC4KK0J1dHRvbmJveCAgICAgICAgICAgICBUaGlzIGNyZWF0ZXMgYSBtdWx0aXBsZSBidXR0b24gd2lkZ2V0LiAKK0NhbGVuZGFyICAgICAgICAgICAgICBDcmVhdGVzIGEgbGl0dGxlIHNpbXBsZSBjYWxlbmRhciB3aWRnZXQuCitEaWFsb2cgICAgICAgICAgICAgICAgUHJvbXB0cyB0aGUgdXNlciB3aXRoIGEgbWVzc2FnZSwgYW5kIHRoZSB1c2VyCisgICAgICAgICAgICAgICAgICAgICAgY2FuIHBpY2sgYW4gYW5zd2VyIGZyb20gdGhlIGJ1dHRvbnMgcHJvdmlkZWQuCitFbnRyeSAgICAgICAgICAgICAgICAgQWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIHZhcmlvdXMgdHlwZXMgb2YgaW5mb3JtYXRpb24uCitGaWxlIFNlbGVjdG9yICAgICAgICAgQSBmaWxlIHNlbGVjdG9yIGJ1aWx0IGZyb20gQ2RrIGJhc2Ugd2lkZ2V0cy4gVGhpcworICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUgc2hvd3MgaG93IHRvIGNyZWF0ZSBtb3JlIGNvbXBsaWNhdGVkIHdpZGdldHMKKyAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgQ2RrIHdpZGdldCBsaWJyYXJ5LgorR3JhcGggICAgICAgICAgICAgICAgIERyYXdzIGEgZ3JhcGguCitIaXN0b2dyYW0gICAgICAgICAgICAgRHJhd3MgYSBoaXN0b2dyYW0uCitJdGVtIExpc3QgICAgICAgICAgICAgQ3JlYXRlcyBhIHBvcCB1cCBmaWVsZCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgb25lIG9mIHNldmVyYWwgY2hvaWNlcyBpbiBhIHNtYWxsIGZpZWxkLiBWZXJ5IHVzZWZ1bAorICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGluZ3MgbGlrZSBkYXlzIG9mIHRoZSB3ZWVrIG9yIG1vbnRoIG5hbWVzLgorTGFiZWwgICAgICAgICAgICAgICAgIERpc3BsYXlzIG1lc3NhZ2VzIGluIGEgcG9wIHVwIGJveCwgb3IgdGhlIGxhYmVsIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2NyZWVuLgorTWFycXVlZSAgICAgICAgICAgICAgIERpc3BsYXlzIGEgbWVzc2FnZSBpbiBhIHNjcm9sbGluZyBtYXJxdWVlLgorTWF0cml4ICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBjb21wbGV4IG1hdHJpeCB3aXRoIGxvdHMgb2Ygb3B0aW9ucy4KK01lbnUgICAgICAgICAgICAgICAgICBDcmVhdGVzIGEgcHVsbC1kb3duIG1lbnUgaW50ZXJmYWNlLgorTXVsdGlwbGUgTGluZSBFbnRyeSAgIEEgbXVsdGlwbGUgbGluZSBlbnRyeSBmaWVsZC4gVmVyeSB1c2VmdWwKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgbG9uZyBmaWVsZHMuIChsaWtlIGEgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICBmaWVsZCkKK1JhZGlvIExpc3QgICAgICAgICAgICBDcmVhdGVzIGEgcmFkaW8gYnV0dG9uIGxpc3QuCitTY2FsZSAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG51bWVyaWMgc2NhbGUuIFVzZWQgZm9yIGFsbG93aW5nIGEgdXNlciB0bworICAgICAgICAgICAgICAgICAgICAgIHBpY2sgYSBudW1lcmljIHZhbHVlIGFuZCByZXN0cmljdCB0aGVtIHRvIGEgcmFuZ2Ugb2YgCisgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLgorU2Nyb2xsaW5nIExpc3QgICAgICAgIENyZWF0ZXMgYSBzY3JvbGxpbmcgbGlzdC9tZW51IGxpc3QuCitTY3JvbGxpbmcgV2luZG93ICAgICAgQ3JlYXRlcyBhIHNjcm9sbGluZyBsb2cgZmlsZSB2aWV3ZXIuIENhbiBhZGQgCisgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gaW50byB0aGUgd2luZG93IHdoaWxlIGl0cyBydW5uaW5nLiAKKyAgICAgICAgICAgICAgICAgICAgICBBIGdvb2Qgd2lkZ2V0IGZvciBkaXNwbGF5aW5nIHRoZSBwcm9ncmVzcyBvZgorICAgICAgICAgICAgICAgICAgICAgIHNvbWV0aGluZy4gKGFraW4gdG8gYSBjb25zb2xlIHdpbmRvdykKK1NlbGVjdGlvbiBMaXN0ICAgICAgICBDcmVhdGVzIGEgbXVsdGlwbGUgb3B0aW9uIHNlbGVjdGlvbiBsaXN0LgorU2xpZGVyICAgICAgICAgICAgICAgIEFraW4gdG8gdGhlIHNjYWxlIHdpZGdldCwgdGhpcyB3aWRnZXQgcHJvdmlkZXMgYQorICAgICAgICAgICAgICAgICAgICAgIHZpc3VhbCBzbGlkZSBiYXIgdG8gcmVwcmVzZW50IHRoZSBudW1lcmljIHZhbHVlLgorVGVtcGxhdGUgICAgICAgICAgICAgIENyZWF0ZXMgYSBlbnRyeSBmaWVsZCB3aXRoIGNoYXJhY3RlciBzZW5zaXRpdmUgCisgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zLiBVc2VkIGZvciBwcmUtZm9ybWF0dGVkIGZpZWxkcyBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgYW5kIHBob25lIG51bWJlcnMuCitWaWV3ZXIgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGZpbGUvaW5mb3JtYXRpb24gdmlld2VyLiBWZXJ5IHVzZWZ1bAorICAgICAgICAgICAgICAgICAgICAgIHdoZW4geW91IG5lZWQgdG8gZGlzcGxheSBsb2FkcyBvZiBpbmZvcm1hdGlvbi4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPkEgZmV3IG9mIHRoZSB3aWRnZXRzIGFyZSBtb2RpZmllZCBieSBUaG9tYXMgRGlja2V5IGluIHJlY2VudAordmVyc2lvbnMuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMyI+Cis8aHI+Cis8aDQgY2xhc3M9IlNFQ1QzIj48YSBuYW1lPSJDREtBVFRSQUNUIiBpZD0iQ0RLQVRUUkFDVCI+MTkuMS4yLiBTb21lCitBdHRyYWN0aXZlIEZlYXR1cmVzPC9hPjwvaDQ+Cis8cD5BcGFydCBmcm9tIG1ha2luZyBvdXIgbGlmZSBlYXNpZXIgd2l0aCByZWFkaWx5IHVzYWJsZSB3aWRnZXRzLAorY2RrIHNvbHZlcyBvbmUgZnJ1c3RyYXRpbmcgcHJvYmxlbSB3aXRoIHByaW50aW5nIG11bHRpIGNvbG9yZWQKK3N0cmluZ3MsIGp1c3RpZmllZCBzdHJpbmdzIGVsZWdhbnRseS4gU3BlY2lhbCBmb3JtYXR0aW5nIHRhZ3MgY2FuCitiZSBlbWJlZGRlZCBpbiB0aGUgc3RyaW5ncyB3aGljaCBhcmUgcGFzc2VkIHRvIENESyBmdW5jdGlvbnMuIEZvcgorRXhhbXBsZTwvcD4KKzxwPklmIHRoZSBzdHJpbmc8L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRTBFMEUwIiB3aWR0aD0iMTAwJSI+Cis8dHI+Cis8dGQ+Cis8cHJlIGNsYXNzPSJQUk9HUkFNTElTVElORyI+Cis8Zm9udCBjb2xvcj0KKyIjMDAwMDAwIj4iJmx0Oy9CLzEmZ3Q7VGhpcyBsaW5lIHNob3VsZCBoYXZlIGEgeWVsbG93IGZvcmVncm91bmQgYW5kIGEgYmx1ZQorYmFja2dyb3VuZC4mbHQ7ITEmZ3Q7IjwvZm9udD4KKzwvcHJlPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzxwPmdpdmVuIGFzIGEgcGFyYW1ldGVyIHRvIG5ld0NES0xhYmVsKCksIGl0IHByaW50cyB0aGUgbGluZSB3aXRoCit5ZWxsb3cgZm9yZWdyb3VuZCBhbmQgYmx1ZSBiYWNrZ3JvdW5kLiBUaGVyZSBhcmUgb3RoZXIgdGFncworYXZhaWxhYmxlIGZvciBqdXN0aWZ5aW5nIHN0cmluZywgZW1iZWRkaW5nIHNwZWNpYWwgZHJhd2luZworY2hhcmFjdGVycyBldGMuLiBQbGVhc2UgcmVmZXIgdG8gdGhlIG1hbiBwYWdlIGNka19kaXNwbGF5KDNYKSBmb3IKK2RldGFpbHMuIFRoZSBtYW4gcGFnZSBleHBsYWlucyB0aGUgdXNhZ2Ugd2l0aCBuaWNlIGV4YW1wbGVzLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDMiPgorPGhyPgorPGg0IGNsYXNzPSJTRUNUMyI+PGEgbmFtZT0iQ0RLQ09OQ0xVU0lPTiIgaWQ9CisiQ0RLQ09OQ0xVU0lPTiI+MTkuMS4zLiBDb25jbHVzaW9uPC9hPjwvaDQ+Cis8cD5BbGwgaW4gYWxsLCBDREsgaXMgYSB3ZWxsLXdyaXR0ZW4gcGFja2FnZSBvZiB3aWRnZXRzLCB3aGljaCBpZgordXNlZCBwcm9wZXJseSBjYW4gZm9ybSBhIHN0cm9uZyBmcmFtZSB3b3JrIGZvciBkZXZlbG9waW5nIGNvbXBsZXgKK0dVSS48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iRElBTE9HIiBpZD0iRElBTE9HIj4xOS4yLiBUaGUKK2RpYWxvZzwvYT48L2gzPgorPHA+TG9uZyBsb25nIGFnbywgaW4gU2VwdGVtYmVyIDE5OTQsIHdoZW4gZmV3IHBlb3BsZSBrbmV3IGxpbnV4LAorSmVmZiBUcmFudGVyIHdyb3RlIGFuIDxhIGhyZWY9CisiaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWU1LzI4MDcuaHRtbCIgdGFyZ2V0PQorIl90b3AiPmFydGljbGU8L2E+IG9uIGRpYWxvZyBpbiBMaW51eCBKb3VybmFsLiBIZSBzdGFydHMgdGhlCithcnRpY2xlIHdpdGggdGhlc2Ugd29yZHMuLjwvcD4KKzxwPjxlbT5MaW51eCBpcyBiYXNlZCBvbiB0aGUgVW5peCBvcGVyYXRpbmcgc3lzdGVtLCBidXQgYWxzbworZmVhdHVyZXMgYSBudW1iZXIgb2YgdW5pcXVlIGFuZCB1c2VmdWwga2VybmVsIGZlYXR1cmVzIGFuZAorYXBwbGljYXRpb24gcHJvZ3JhbXMgdGhhdCBvZnRlbiBnbyBiZXlvbmQgd2hhdCBpcyBhdmFpbGFibGUgdW5kZXIKK1VuaXguIE9uZSBsaXR0bGUta25vd24gZ2VtIGlzICJkaWFsb2ciLCBhIHV0aWxpdHkgZm9yIGNyZWF0aW5nCitwcm9mZXNzaW9uYWwtbG9va2luZyBkaWFsb2cgYm94ZXMgZnJvbSB3aXRoaW4gc2hlbGwgc2NyaXB0cy4gVGhpcworYXJ0aWNsZSBwcmVzZW50cyBhIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byB0aGUgZGlhbG9nIHV0aWxpdHksIGFuZAorc2hvd3MgZXhhbXBsZXMgb2YgaG93IGFuZCB3aGVyZSBpdCBjYW4gYmUgdXNlZDwvZW0+PC9wPgorPHA+QXMgaGUgZXhwbGFpbnMsIGRpYWxvZyBpcyBhIHJlYWwgZ2VtIGluIG1ha2luZworcHJvZmVzc2lvbmFsLWxvb2tpbmcgZGlhbG9nIGJveGVzIHdpdGggZWFzZS4gSXQgY3JlYXRlcyBhIHZhcmlldHkKK29mIGRpYWxvZyBib3hlcywgbWVudXMsIGNoZWNrIGxpc3RzIGV0Yy4uIEl0IGlzIHVzdWFsbHkgaW5zdGFsbGVkCitieSBkZWZhdWx0LiBJZiBub3QsIHlvdSBjYW4gZG93bmxvYWQgaXQgZnJvbSA8YSBocmVmPQorImh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWFsb2cvIiB0YXJnZXQ9Il90b3AiPlRob21hcworRGlja2V5PC9hPidzIHNpdGUuPC9wPgorPHA+VGhlIGFib3ZlLW1lbnRpb25lZCBhcnRpY2xlIGdpdmVzIGEgdmVyeSBnb29kIG92ZXJ2aWV3IG9mIGl0cwordXNlcyBhbmQgY2FwYWJpbGl0ZXMuIFRoZSBtYW4gcGFnZSBoYXMgbW9yZSBkZXRhaWxzLiBJdCBjYW4gYmUgdXNlZAoraW4gdmFyaWV0eSBvZiBzaXR1YXRpb25zLiBPbmUgZ29vZCBleGFtcGxlIGlzIGJ1aWxkaW5nIG9mIGxpbnV4CitrZXJuZWwgaW4gdGV4dCBtb2RlLiBMaW51eCBrZXJuZWwgdXNlcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgZGlhbG9nCit0YWlsb3JlZCBmb3IgaXRzIG5lZWRzLjwvcD4KKzxwPmRpYWxvZyB3YXMgaW5pdGlhbGx5IGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aCBzaGVsbCBzY3JpcHRzLiBJZgoreW91IHdhbnQgdG8gdXNlIGl0cyBmdW5jdGlvbmFsaXR5IGluIGEgYyBwcm9ncmFtLCB0aGVuIHlvdSBjYW4gdXNlCitsaWJkaWFsb2cuIFRoZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGluZyB0aGlzIGlzIHNwYXJzZS4gRGVmaW5pdGl2ZQorcmVmZXJlbmNlIGlzIHRoZSBkaWFsb2cuaCBoZWFkZXIgZmlsZSB3aGljaCBjb21lcyB3aXRoIHRoZSBsaWJyYXJ5LgorWW91IG1heSBuZWVkIHRvIGhhY2sgaGVyZSBhbmQgdGhlcmUgdG8gZ2V0IHRoZSByZXF1aXJlZCBvdXRwdXQuIFRoZQorc291cmNlIGlzIGVhc2lseSBjdXN0b21pemFibGUuIEkgaGF2ZSB1c2VkIGl0IG9uIGEgbnVtYmVyIG9mCitvY2Nhc2lvbnMgYnkgbW9kaWZ5aW5nIHRoZSBjb2RlLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iUEVSTENVUlNFUyIgaWQ9IlBFUkxDVVJTRVMiPjE5LjMuIFBlcmwKK0N1cnNlcyBNb2R1bGVzIENVUlNFUzo6Rk9STSBhbmQgQ1VSU0VTOjpXSURHRVRTPC9hPjwvaDM+Cis8cD5UaGUgcGVybCBtb2R1bGUgQ3Vyc2VzLCBDdXJzZXM6OkZvcm0gYW5kIEN1cnNlczo6V2lkZ2V0cyBnaXZlCithY2Nlc3MgdG8gY3Vyc2VzIGZyb20gcGVybC4gSWYgeW91IGhhdmUgY3Vyc2VzIGFuZCBiYXNpYyBwZXJsIGlzCitpbnN0YWxsZWQsIHlvdSBjYW4gZ2V0IHRoZXNlIG1vZHVsZXMgZnJvbSA8YSBocmVmPQorImh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy8wMW1vZHVsZXMuaW5kZXguaHRtbCIgdGFyZ2V0PQorIl90b3AiPkNQQU4gQWxsIE1vZHVsZXMgcGFnZTwvYT4uIEdldCB0aGUgdGhyZWUgemlwcGVkIG1vZHVsZXMgaW4KK3RoZSBDdXJzZXMgY2F0ZWdvcnkuIE9uY2UgaW5zdGFsbGVkIHlvdSBjYW4gdXNlIHRoZXNlIG1vZHVsZXMgZnJvbQorcGVybCBzY3JpcHRzIGxpa2UgYW55IG90aGVyIG1vZHVsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGVybAorbW9kdWxlcyBzZWUgcGVybG1vZCBtYW4gcGFnZS4gVGhlIGFib3ZlIG1vZHVsZXMgY29tZSB3aXRoIGdvb2QKK2RvY3VtZW50YXRpb24gYW5kIHRoZXkgaGF2ZSBzb21lIGRlbW8gc2NyaXB0cyB0byB0ZXN0IHRoZQorZnVuY3Rpb25hbGl0eS4gVGhvdWdoIHRoZSB3aWRnZXRzIHByb3ZpZGVkIGFyZSB2ZXJ5IHJ1ZGltZW50YXJ5LAordGhlc2UgbW9kdWxlcyBwcm92aWRlIGdvb2QgYWNjZXNzIHRvIGN1cnNlcyBsaWJyYXJ5IGZyb20gcGVybC48L3A+Cis8cD5Tb21lIG9mIG15IGNvZGUgZXhhbXBsZXMgYXJlIGNvbnZlcnRlZCB0byBwZXJsIGJ5IEFudXJhZGhhCitSYXRuYXdlZXJhIGFuZCB0aGV5IGFyZSBhdmFpbGFibGUgaW4gdGhlIDx2YXIgY2xhc3M9CisiTElURVJBTCI+cGVybDwvdmFyPiBkaXJlY3RvcnkuPC9wPgorPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIG1hbiBwYWdlcyBDdXJzZXMoMykgLCBDdXJzZXM6OkZvcm0oMykKK2FuZCBDdXJzZXM6OldpZGdldHMoMykuIFRoZXNlIHBhZ2VzIGFyZSBpbnN0YWxsZWQgb25seSB3aGVuIHRoZQorYWJvdmUgbW9kdWxlcyBhcmUgYWNxdWlyZWQgYW5kIGluc3RhbGxlZC48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDEiPgorPGhyPgorPGgyIGNsYXNzPSJTRUNUMSI+PGEgbmFtZT0iSlVTVEZPUkZVTiIgaWQ9IkpVU1RGT1JGVU4iPjIwLiBKdXN0IEZvcgorRnVuICEhITwvYT48L2gyPgorPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZldyBwcm9ncmFtcyB3cml0dGVuIGJ5IG1lIGp1c3QgZm9yIGZ1bi4KK1RoZXkgZG9uJ3Qgc2lnbmlmeSBhIGJldHRlciBwcm9ncmFtbWluZyBwcmFjdGljZSBvciB0aGUgYmVzdCB3YXkgb2YKK3VzaW5nIG5jdXJzZXMuIFRoZXkgYXJlIHByb3ZpZGVkIGhlcmUgc28gYXMgdG8gYWxsb3cgYmVnaW5uZXJzIHRvCitnZXQgaWRlYXMgYW5kIGFkZCBtb3JlIHByb2dyYW1zIHRvIHRoaXMgc2VjdGlvbi4gSWYgeW91IGhhdmUKK3dyaXR0ZW4gYSBjb3VwbGUgb2YgbmljZSwgc2ltcGxlIHByb2dyYW1zIGluIGN1cnNlcyBhbmQgd2FudCB0aGVtCit0byBpbmNsdWRlZCBoZXJlLCBjb250YWN0IDxhIGhyZWY9Im1haWx0bzpwcGFkYWxhQGdtYWlsLmNvbSIKK3RhcmdldD0iX3RvcCI+bWU8L2E+LjwvcD4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IkdBTUVPRkxJRkUiIGlkPSJHQU1FT0ZMSUZFIj4yMC4xLiBUaGUKK0dhbWUgb2YgTGlmZTwvYT48L2gzPgorPHA+R2FtZSBvZiBsaWZlIGlzIGEgd29uZGVyIG9mIG1hdGguIEluIDxhIGhyZWY9CisiaHR0cDovL3d3dy5tYXRoLmNvbS9zdHVkZW50cy93b25kZXJzL2xpZmUvbGlmZS5odG1sIiB0YXJnZXQ9CisiX3RvcCI+UGF1bCBDYWxsYWhhbjwvYT4ncyB3b3JkczwvcD4KKzx0YWJsZSBib3JkZXI9IjAiIGJnY29sb3I9IiNFMEUwRTAiIHdpZHRoPSIxMDAlIj4KKzx0cj4KKzx0ZD4KKzxwcmUgY2xhc3M9IlBST0dSQU1MSVNUSU5HIj4KKzxmb250IGNvbG9yPQorIiMwMDAwMDAiPjxlbT5UaGUgR2FtZSBvZiBMaWZlIChvciBzaW1wbHkgTGlmZSkgaXMgbm90IGEgZ2FtZSBpbiB0aGUgY29udmVudGlvbmFsIHNlbnNlLiBUaGVyZQorYXJlIG5vIHBsYXllcnMsIGFuZCBubyB3aW5uaW5nIG9yIGxvc2luZy4gT25jZSB0aGUgInBpZWNlcyIgYXJlIHBsYWNlZCBpbiB0aGUKK3N0YXJ0aW5nIHBvc2l0aW9uLCB0aGUgcnVsZXMgZGV0ZXJtaW5lIGV2ZXJ5dGhpbmcgdGhhdCBoYXBwZW5zIGxhdGVyLgorTmV2ZXJ0aGVsZXNzLCBMaWZlIGlzIGZ1bGwgb2Ygc3VycHJpc2VzISBJbiBtb3N0IGNhc2VzLCBpdCBpcyBpbXBvc3NpYmxlIHRvIGxvb2sKK2F0IGEgc3RhcnRpbmcgcG9zaXRpb24gKG9yIHBhdHRlcm4pIGFuZCBzZWUgd2hhdCB3aWxsIGhhcHBlbiBpbiB0aGUgZnV0dXJlLiBUaGUKK29ubHkgd2F5IHRvIGZpbmQgb3V0IGlzIHRvIGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhlIGdhbWUuPC9lbT48L2ZvbnQ+Cis8L3ByZT48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8cD5UaGlzIHByb2dyYW0gc3RhcnRzIHdpdGggYSBzaW1wbGUgaW52ZXJ0ZWQgVSBwYXR0ZXJuIGFuZCBzaG93cworaG93IHdvbmRlcmZ1bCBsaWZlIHdvcmtzLiBUaGVyZSBpcyBhIGxvdCBvZiByb29tIGZvciBpbXByb3ZlbWVudCBpbgordGhlIHByb2dyYW0uIFlvdSBjYW4gbGV0IHRoZSB1c2VyIGVudGVyIHBhdHRlcm4gb2YgaGlzIGNob2ljZSBvcgorZXZlbiB0YWtlIGlucHV0IGZyb20gYSBmaWxlLiBZb3UgY2FuIGFsc28gY2hhbmdlIHJ1bGVzIGFuZCBwbGF5Cit3aXRoIGEgbG90IG9mIHZhcmlhdGlvbnMuIFNlYXJjaCBvbiA8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20iCit0YXJnZXQ9Il90b3AiPmdvb2dsZTwvYT4gZm9yIGludGVyZXN0aW5nIGluZm9ybWF0aW9uIG9uIGdhbWUgb2YKK2xpZmUuPC9wPgorPHA+PGVtPkZpbGUgUGF0aDogSnVzdEZvckZ1bi9saWZlLmM8L2VtPjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iU0VDVDIiPgorPGhyPgorPGgzIGNsYXNzPSJTRUNUMiI+PGEgbmFtZT0iTUFHSUMiIGlkPSJNQUdJQyI+MjAuMi4gTWFnaWMKK1NxdWFyZTwvYT48L2gzPgorPHA+TWFnaWMgU3F1YXJlLCBhbm90aGVyIHdvbmRlciBvZiBtYXRoLCBpcyB2ZXJ5IHNpbXBsZSB0bwordW5kZXJzdGFuZCBidXQgdmVyeSBkaWZmaWN1bHQgdG8gbWFrZS4gSW4gYSBtYWdpYyBzcXVhcmUgc3VtIG9mIHRoZQorbnVtYmVycyBpbiBlYWNoIHJvdywgZWFjaCBjb2x1bW4gaXMgZXF1YWwuIEV2ZW4gZGlhZ25vbCBzdW0gY2FuIGJlCitlcXVhbC4gVGhlcmUgYXJlIG1hbnkgdmFyaWF0aW9ucyB3aGljaCBoYXZlIHNwZWNpYWwgcHJvcGVydGllcy48L3A+Cis8cD5UaGlzIHByb2dyYW0gY3JlYXRlcyBhIHNpbXBsZSBtYWdpYyBzcXVhcmUgb2Ygb2RkIG9yZGVyLjwvcD4KKzxwPjxlbT5GaWxlIFBhdGg6IEp1c3RGb3JGdW4vbWFnaWMuYzwvZW0+PC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMiI+Cis8aHI+Cis8aDMgY2xhc3M9IlNFQ1QyIj48YSBuYW1lPSJIQU5PSSIgaWQ9IkhBTk9JIj4yMC4zLiBUb3dlcnMgb2YKK0hhbm9pPC9hPjwvaDM+Cis8cD5UaGUgZmFtb3VzIHRvd2VycyBvZiBoYW5vaSBzb2x2ZXIuIFRoZSBhaW0gb2YgdGhlIGdhbWUgaXMgdG8KK21vdmUgdGhlIGRpc2tzIG9uIHRoZSBmaXJzdCBwZWcgdG8gbGFzdCBwZWcsIHVzaW5nIG1pZGRsZSBwZWcgYXMgYQordGVtcG9yYXJ5IHN0YXkuIFRoZSBjYXRjaCBpcyBub3QgdG8gcGxhY2UgYSBsYXJnZXIgZGlzayBvdmVyIGEKK3NtYWxsIGRpc2sgYXQgYW55IHRpbWUuPC9wPgorPHA+PGVtPkZpbGUgUGF0aDogSnVzdEZvckZ1bi9oYW5vaS5jPC9lbT48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlFVRUVOUyIgaWQ9IlFVRUVOUyI+MjAuNC4gUXVlZW5zCitQdXp6bGU8L2E+PC9oMz4KKzxwPlRoZSBvYmplY3RpdmUgb2YgdGhlIGZhbW91cyBOLVF1ZWVuIHB1enpsZSBpcyB0byBwdXQgTiBxdWVlbnMgb24KK2EgTiBYIE4gY2hlc3MgYm9hcmQgd2l0aG91dCBhdHRhY2tpbmcgZWFjaCBvdGhlci48L3A+Cis8cD5UaGlzIHByb2dyYW0gc29sdmVzIGl0IHdpdGggYSBzaW1wbGUgYmFja3RyYWNraW5nIHRlY2huaXF1ZS48L3A+Cis8cD48ZW0+RmlsZSBQYXRoOiBKdXN0Rm9yRnVuL3F1ZWVucy5jPC9lbT48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlNIVUZGTEUiIGlkPSJTSFVGRkxFIj4yMC41LgorU2h1ZmZsZTwvYT48L2gzPgorPHA+QSBmdW4gZ2FtZSwgaWYgeW91IGhhdmUgdGltZSB0byBraWxsLjwvcD4KKzxwPjxlbT5GaWxlIFBhdGg6IEp1c3RGb3JGdW4vc2h1ZmZsZS5jPC9lbT48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9IlNFQ1QyIj4KKzxocj4KKzxoMyBjbGFzcz0iU0VDVDIiPjxhIG5hbWU9IlRUIiBpZD0iVFQiPjIwLjYuIFR5cGluZyBUdXRvcjwvYT48L2gzPgorPHA+QSBzaW1wbGUgdHlwaW5nIHR1dG9yLCBJIGNyZWF0ZWQgbW9yZSBvdXQgb2YgbmVlZCB0aGFuIGZvciBlYXNlCitvZiB1c2UuIElmIHlvdSBrbm93IGhvdyB0byBwdXQgeW91ciBmaW5nZXJzIGNvcnJlY3RseSBvbiB0aGUKK2tleWJvYXJkLCBidXQgbGFjayBwcmFjdGljZSwgdGhpcyBjYW4gYmUgaGVscGZ1bC48L3A+Cis8cD48ZW0+RmlsZSBQYXRoOiBKdXN0Rm9yRnVuL3R0LmM8L2VtPjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJTRUNUMSI+Cis8aHI+Cis8aDIgY2xhc3M9IlNFQ1QxIj48YSBuYW1lPSJSRUYiIGlkPSJSRUYiPjIxLiBSZWZlcmVuY2VzPC9hPjwvaDI+Cis8dWw+Cis8bGk+Cis8cD5OQ1VSU0VTIG1hbiBwYWdlczwvcD4KKzwvbGk+Cis8bGk+Cis8cD5OQ1VSU0VTIEZBUSBhdCA8YSBocmVmPQorImh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzL25jdXJzZXMuZmFxLmh0bWwiIHRhcmdldD0KKyJfdG9wIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy9uY3Vyc2VzLmZhcS5odG1sPC9hPjwvcD4KKzwvbGk+Cis8bGk+Cis8cD5Xcml0aW5nIHByb2dyYW1zIHdpdGggTkNVUlNFUyBieSBFcmljIFJheW1vbmQgYW5kIFpleWQgTS4KK0Jlbi1IYWxpbSBhdCA8YSBocmVmPQorImh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzL25jdXJzZXMtaW50cm8uaHRtbCIgdGFyZ2V0PQorIl90b3AiPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzL25jdXJzZXMtaW50cm8uaHRtbDwvYT4gLQorc29tZXdoYXQgb2Jzb2xldGUuIEkgd2FzIGluc3BpcmVkIGJ5IHRoaXMgZG9jdW1lbnQgYW5kIHRoZQorc3RydWN0dXJlIG9mIHRoaXMgSE9XVE8gZm9sbG93cyBmcm9tIHRoZSBvcmlnaW5hbCBkb2N1bWVudDwvcD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9maWxlcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZmlsZXMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmFkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZmlsZXMuaHRtCkBAIC0wLDAgKzEsNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+PC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMiBBTElHTj1DRU5URVI+RmlsZXM8L0gyPgorPEEgSFJFRj0iZmlsZXMvVC5odG0iPltUXTwvQT4KKzwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZmlsZXMvVC5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZmlsZXMvVC5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkNjk1MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9maWxlcy9ULmh0bQpAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5UPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GaWxlcyAtIFQ8L0gyPgorPEEgSFJFRj0iLi4vZmlsZXMuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGQuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXguYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZGI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRiPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0iIFRBUkdFVD0ibWFpbiI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtIiBUQVJHRVQ9Im1haW4iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSIgVEFSR0VUPSJtYWluIj50ZXJtaW5hbF9pbnRlcmZhY2UuYWRzPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyZGE2MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy5odG0KQEAgLTAsMCArMSwyNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+PC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMiBBTElHTj1DRU5URVI+RnVuY3Rpb25zL1Byb2NlZHVyZXM8L0gyPgorPEEgSFJFRj0iZnVuY3MvQS5odG0iPltBXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0IuaHRtIj5bQl08L0E+Cis8QSBIUkVGPSJmdW5jcy9DLmh0bSI+W0NdPC9BPgorPEEgSFJFRj0iZnVuY3MvRC5odG0iPltEXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0UuaHRtIj5bRV08L0E+Cis8QSBIUkVGPSJmdW5jcy9GLmh0bSI+W0ZdPC9BPgorPEEgSFJFRj0iZnVuY3MvRy5odG0iPltHXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0guaHRtIj5bSF08L0E+Cis8QSBIUkVGPSJmdW5jcy9JLmh0bSI+W0ldPC9BPgorPEEgSFJFRj0iZnVuY3MvSy5odG0iPltLXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0wuaHRtIj5bTF08L0E+Cis8QSBIUkVGPSJmdW5jcy9NLmh0bSI+W01dPC9BPgorPEEgSFJFRj0iZnVuY3MvTi5odG0iPltOXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL08uaHRtIj5bT108L0E+Cis8QSBIUkVGPSJmdW5jcy9QLmh0bSI+W1BdPC9BPgorPEEgSFJFRj0iZnVuY3MvUS5odG0iPltRXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1IuaHRtIj5bUl08L0E+Cis8QSBIUkVGPSJmdW5jcy9TLmh0bSI+W1NdPC9BPgorPEEgSFJFRj0iZnVuY3MvVC5odG0iPltUXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1UuaHRtIj5bVV08L0E+Cis8QSBIUkVGPSJmdW5jcy9WLmh0bSI+W1ZdPC9BPgorPEEgSFJFRj0iZnVuY3MvVy5odG0iPltXXTwvQT4KKzwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvQS5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvQS5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3MDY5ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9BLmh0bQpAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5BPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBBPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI5XzEzIiBUQVJHRVQ9Im1haW4iPkFib3ZlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyM18xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NTIzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyOF8xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NTI4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUzNF8xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NTM0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU0Ml8xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NTQyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1M18xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NjUzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2Ml8xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NjYyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY3N18xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6Njc3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4Nl8xNCIgVEFSR0VUPSJtYWluIj5BZGQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6Njg2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDdfMTQiIFRBUkdFVD0ibWFpbiI+QWRkX0NoYXJhY3Rlcl9Ub19QYWRfQW5kX0VjaG9fSXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTMwNzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzEyXzE0IiBUQVJHRVQ9Im1haW4iPkFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzMTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTUxXzE0IiBUQVJHRVQ9Im1haW4iPkFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjU1MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NTdfMTQiIFRBUkdFVD0ibWFpbiI+QWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8gLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NTU3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk1OV8xNiIgVEFSR0VUPSJtYWluIj5BaGVhZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzUwXzE2IiBUQVJHRVQ9Im1haW4iPkFsbG9jYXRlX0FyZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE2XzE0IiBUQVJHRVQ9Im1haW4iPkFsbG93X1Njcm9sbGluZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODM2XzE0IiBUQVJHRVQ9Im1haW4iPkFzc3VtZV9EZWZhdWx0X0NvbG9yczwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9CLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9CLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM1ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0IuaHRtCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPkI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIEI8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1NF8xNCIgVEFSR0VUPSJtYWluIj5CYWNrZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjQ1NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NTlfMTQiIFRBUkdFVD0ibWFpbiI+QmFja2dyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0NTk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDUxXzE0IiBUQVJHRVQ9Im1haW4iPkJhY2tncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDUxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1Nl8xNCIgVEFSR0VUPSJtYWluIj5CYWNrZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQ1NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDUyXzE2IiBUQVJHRVQ9Im1haW4iPkJhdWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY0N18xMyIgVEFSR0VUPSJtYWluIj5CYXVkcmF0ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzBfMTQiIFRBUkdFVD0ibWFpbiI+QmVlcDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NTFfMTYiIFRBUkdFVD0ibWFpbiI+QmVlcGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk3NV8xNiIgVEFSR0VUPSJtYWluIj5CZWhpbmQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEzNF8xMyIgVEFSR0VUPSJtYWluIj5CZWxvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDRfMTQiIFRBUkdFVD0ibWFpbiI+Qm9yZGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl83N18xNCIgVEFSR0VUPSJtYWluIj5Cb3R0b208L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzY1XzE2IiBUQVJHRVQ9Im1haW4iPkJvdHRvbXBhbmVsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyMF8xNCIgVEFSR0VUPSJtYWluIj5Cb3g8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvQy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvQy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhMDI3NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9DLmh0bQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5DPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBDPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjEzXzE2IiBUQVJHRVQ9Im1haW4iPkNhbmNoYW5nZWNvbG9yPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzlfMTMiIFRBUkdFVD0ibWFpbiI+Q2FuX0NoYW5nZV9Db2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NzFfMTYiIFRBUkdFVD0ibWFpbiI+Q2JyZWFrPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4Ml8xMyIgVEFSR0VUPSJtYWluIj5DaGFuZ2VkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg0NV8xNCIgVEFSR0VUPSJtYWluIj5DaGFuZ2VfQXR0cmlidXRlcyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczo4NDU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU0XzE0IiBUQVJHRVQ9Im1haW4iPkNoYW5nZV9BdHRyaWJ1dGVzIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjg1NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTE2XzE0IiBUQVJHRVQ9Im1haW4iPkNoYW5nZV9CYWNrZ3JvdW5kPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTJfMTQiIFRBUkdFVD0ibWFpbiI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xODVfMTMiIFRBUkdFVD0ibWFpbiI+Q2hhcl9DaGVja19Sb3V0ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA4MF8xNCIgVEFSR0VUPSJtYWluIj5DbGVhcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NjhfMTYiIFRBUkdFVD0ibWFpbiI+Q2xlYXJfT2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTgxXzE0IiBUQVJHRVQ9Im1haW4iPkNsZWFyX09uX05leHRfVXBkYXRlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MzNfMTQiIFRBUkdFVD0ibWFpbiI+Q2xlYXJfU29mdF9MYWJlbF9LZXlzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwOTRfMTQiIFRBUkdFVD0ibWFpbiI+Q2xlYXJfVG9fRW5kX09mX0xpbmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA4N18xNCIgVEFSR0VUPSJtYWluIj5DbGVhcl9Ub19FbmRfT2ZfU2NyZWVuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOThfMTMiIFRBUkdFVD0ibWFpbiI+Q29sIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6OTg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85OV8xMyIgVEFSR0VUPSJtYWluIj5Db2wgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo5OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjMwXzE2IiBUQVJHRVQ9Im1haW4iPkNvbG9yY29udGVudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ0XzE0IiBUQVJHRVQ9Im1haW4iPkNvbG9yX0NvbnRlbnQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDE1XzEzIiBUQVJHRVQ9Im1haW4iPkNvbHVtbnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3NF8xNCIgVEFSR0VUPSJtYWluIj5Db3B5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiIFRBUkdFVD0ibWFpbiI+Q29weXdpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjdfMTMiIFRBUkdFVD0ibWFpbiI+Q29weV9Bcmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzc0XzE2IiBUQVJHRVQ9Im1haW4iPkNvdW50IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjc3NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MTJfMTYiIFRBUkdFVD0ibWFpbiI+Q291bnQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6OTEyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU2OV8xMyIgVEFSR0VUPSJtYWluIj5DcmVhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6NTY5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5M18xMyIgVEFSR0VUPSJtYWluIj5DcmVhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6MjkzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18xMyIgVEFSR0VUPSJtYWluIj5DcmVhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NjIzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80OF8xMyIgVEFSR0VUPSJtYWluIj5DcmVhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRzOjQ4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY0XzEzIiBUQVJHRVQ9Im1haW4iPkNyZWF0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkczo2NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xOTFfMTMiIFRBUkdFVD0ibWFpbiI+Q3JlYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjE5MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MzhfMTMiIFRBUkdFVD0ibWFpbiI+Q3JlYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjYzODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjdfMTMiIFRBUkdFVD0ibWFpbiI+Q3JlYXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkczo2NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjlfMTMiIFRBUkdFVD0ibWFpbiI+Q3VycmVudCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo3Mjk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjk0XzEzIiBUQVJHRVQ9Im1haW4iPkN1cnJlbnQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6Mjk0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNDBfMTYiIFRBUkdFVD0ibWFpbiI+Q3VycmVudF9GbGQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDgxXzEzIiBUQVJHRVQ9Im1haW4iPkN1cnJlbnRfV2luZG93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMwMF8xNiIgVEFSR0VUPSJtYWluIj5DdXJyX0l0ZW08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ2MF8xNyIgVEFSR0VUPSJtYWluIj5jdXJzZXNfZnJlZWFsbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODU5XzE0IiBUQVJHRVQ9Im1haW4iPkN1cnNlc19GcmVlX0FsbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODQ2XzEzIiBUQVJHRVQ9Im1haW4iPkN1cnNlc19WZXJzaW9uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NTJfMTYiIFRBUkdFVD0ibWFpbiI+Y3Vyc2VzX3ZlcnNpb25DPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMTdfMTYiIFRBUkdFVD0ibWFpbiI+Q3Vyc19TZXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQzOF8xNiIgVEFSR0VUPSJtYWluIj5DX0Fzc3VtZV9EZWZhdWx0X0NvbG9yczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDhfMTMiIFRBUkdFVD0ibWFpbiI+Q19CdWlsdGluX1JvdXRlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDlfMTMiIFRBUkdFVD0ibWFpbiI+Q19DaG9pY2VfUm91dGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzc4XzEzIiBUQVJHRVQ9Im1haW4iPkNfR2VuZXJpY19DaG9pY2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83OV8xMyIgVEFSR0VUPSJtYWluIj5DX0dlbmVyaWNfVHlwZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDI2XzE2IiBUQVJHRVQ9Im1haW4iPkNfVXNlX0RlZmF1bHRfQ29sb3JzPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0QuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0QuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDI2NDcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvRC5odG0KQEAgLTAsMCArMSw0NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+RDwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gRDwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjkyXzEzIiBUQVJHRVQ9Im1haW4iPkRhdGFfQWhlYWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjk3XzEzIiBUQVJHRVQ9Im1haW4iPkRhdGFfQmVoaW5kPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwMl8xMyIgVEFSR0VUPSJtYWluIj5EZWZhdWx0X0ZpZWxkX09wdGlvbnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI1XzEzIiBUQVJHRVQ9Im1haW4iPkRlZmF1bHRfRm9ybV9PcHRpb25zPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE2OF8xMyIgVEFSR0VUPSJtYWluIj5EZWZhdWx0X0l0ZW1fT3B0aW9uczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNDZfMTMiIFRBUkdFVD0ibWFpbiI+RGVmYXVsdF9NZW51X09wdGlvbnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5Nl8xNCIgVEFSR0VUPSJtYWluIj5EZWZpbmVfS2V5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMDBfMTYiIFRBUkdFVD0ibWFpbiI+RGVma2V5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNDlfMTYiIFRBUkdFVD0ibWFpbiI+RGVmX1Byb2dfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjUxXzE2IiBUQVJHRVQ9Im1haW4iPkRlZl9TaGVsbF9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMzJfMTYiIFRBUkdFVD0ibWFpbiI+RGVsYXlvdXRwdXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzM18xNCIgVEFSR0VUPSJtYWluIj5EZWxheV9PdXRwdXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTg4XzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczo1ODg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzE1XzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczozMTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjM0XzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo2MzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjAzXzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyMDM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjQ1XzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo2NDU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEzOV8xNCIgVEFSR0VUPSJtYWluIj5EZWxldGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzOjEzOTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzM0XzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZV9DaGFyYWN0ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTMzNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzM5XzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZV9DaGFyYWN0ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTMzOTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjEyXzE0IiBUQVJHRVQ9Im1haW4iPkRlbGV0ZV9MaW5lPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xNTZfMTYiIFRBUkdFVD0ibWFpbiI+RGVsX1BhbmVsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwNF8xMyIgVEFSR0VUPSJtYWluIj5EZXJpdmVkX1dpbmRvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOThfMTYiIFRBUkdFVD0ibWFpbiI+RGVyd2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEyNl8xNiIgVEFSR0VUPSJtYWluIj5EZXNjbmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjoxMjY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjcwXzE2IiBUQVJHRVQ9Im1haW4iPkRlc2NuYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjI3MDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNzhfMTYiIFRBUkdFVD0ibWFpbiI+RGVzY25hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6Mjc4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3NF8xNCIgVEFSR0VUPSJtYWluIj5EZXNjcmlwdGlvbiAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyNzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjc4XzE0IiBUQVJHRVQ9Im1haW4iPkRlc2NyaXB0aW9uIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjI3ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzFfMTQiIFRBUkdFVD0ibWFpbiI+RGlzcGF0Y2hfRXZlbnQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA1OV8xNiIgVEFSR0VUPSJtYWluIj5Eb19VcGRhdGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzExXzEzIiBUQVJHRVQ9Im1haW4iPkRyaXZlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo3MTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjYwXzEzIiBUQVJHRVQ9Im1haW4iPkRyaXZlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo2NjA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTczXzE2IiBUQVJHRVQ9Im1haW4iPkRyaXZlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo5NzM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjE0XzEzIiBUQVJHRVQ9Im1haW4iPkR1cGxpY2F0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczo2MTQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzIxXzEzIiBUQVJHRVQ9Im1haW4iPkR1cGxpY2F0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczozMjE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzIxXzE2IiBUQVJHRVQ9Im1haW4iPkR1cHdpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNTFfMTYiIFRBUkdFVD0ibWFpbiI+RHVwX0ZpZWxkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5M18xNCIgVEFSR0VUPSJtYWluIj5EeW5hbWljX0luZm88L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU5XzE2IiBUQVJHRVQ9Im1haW4iPkR5bl9JbmZvPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0UuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0UuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkM2YyNTYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvRS5odG0KQEAgLTAsMCArMSwxOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+RTwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gRTwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODA5XzE2IiBUQVJHRVQ9Im1haW4iPkVjaG88L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU4Nl8xNCIgVEFSR0VUPSJtYWluIj5FbmFibGVfS2V5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NF8xMyIgVEFSR0VUPSJtYWluIj5FbmNsb3NlZF9Jbl9XaW5kb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEzXzE2IiBUQVJHRVQ9Im1haW4iPkVuZHdpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjhfMTQiIFRBUkdFVD0ibWFpbiI+RW5kX01vdXNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5N18xNCIgVEFSR0VUPSJtYWluIj5FbmRfU2NyZWVuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5NV8xNCIgVEFSR0VUPSJtYWluIj5FbmRfV2luZG93czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDc0XzE0IiBUQVJHRVQ9Im1haW4iPkVyYXNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNjBfMTYiIFRBUkdFVD0ibWFpbiI+RXJhc2VjaGFyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NTJfMTMiIFRBUkdFVD0ibWFpbiI+RXJhc2VfQ2hhcmFjdGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCIgVEFSR0VUPSJtYWluIj5FdGlfRXhjZXB0aW9uPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0YuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0YuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDBkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvRi5odG0KQEAgLTAsMCArMSw1NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+RjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gRjwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjAxXzEzIiBUQVJHRVQ9Im1haW4iPkZpZWxkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NjhfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfQmFjayAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo0Njg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDc4XzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX0JhY2sgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6NDc4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI1NV8xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9CdWZmZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6MjU1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI2Nl8xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9CdWZmZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6MjY2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3N18xMyIgVEFSR0VUPSJtYWluIj5GaWVsZF9DaGVja19Sb3V0ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjA3XzEzIiBUQVJHRVQ9Im1haW4iPkZpZWxkX0NvdW50PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQyNF8xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9Gb3JlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjQyNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MzRfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfRm9yZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo0MzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjEzXzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX0p1c3Q8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzc0XzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX09wdHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzUyXzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX09wdHNfT2ZmPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM0OV8xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9PcHRzX09uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUwN18xNiIgVEFSR0VUPSJtYWluIj5GaWVsZF9QYWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjkzXzE2IiBUQVJHRVQ9Im1haW4iPkZpZWxkX1N0YXR1czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzJfMTYiIFRBUkdFVD0ibWFpbiI+RmllbGRfVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0IiBUQVJHRVQ9Im1haW4iPkZpbGxfU3RyaW5nIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkczoxMTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyIgVEFSR0VUPSJtYWluIj5GaWxsX1N0cmluZyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZHM6MTIxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc2MV8xNiIgVEFSR0VUPSJtYWluIj5GbGFzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzVfMTQiIFRBUkdFVD0ibWFpbiI+Rmxhc2hfU2NyZWVuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiIgVEFSR0VUPSJtYWluIj5GbGRfSW5mbzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzY1XzE0IiBUQVJHRVQ9Im1haW4iPkZsdXNoIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6NjU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Nl8xNCIgVEFSR0VUPSJtYWluIj5GbHVzaCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjY2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNDJfMTYiIFRBUkdFVD0ibWFpbiI+Rmx1c2hpbnA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzOF8xNCIgVEFSR0VUPSJtYWluIj5GbHVzaF9JbnB1dDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MzRfMTQiIFRBUkdFVD0ibWFpbiI+Rm9yZWdyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0MzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM5XzE0IiBUQVJHRVQ9Im1haW4iPkZvcmVncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NDM5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzMV8xNCIgVEFSR0VUPSJtYWluIj5Gb3JlZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQzMTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzZfMTQiIFRBUkdFVD0ibWFpbiI+Rm9yZWdyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0MzY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTUxXzE0IiBUQVJHRVQ9Im1haW4iPkZvcm1hdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84ODlfMTYiIFRBUkdFVD0ibWFpbiI+Rm9ybV9PcHRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2N18xNiIgVEFSR0VUPSJtYWluIj5Gb3JtX09wdHNfT2ZmPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2NF8xNiIgVEFSR0VUPSJtYWluIj5Gb3JtX09wdHNfT248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODRfMTYiIFRBUkdFVD0ibWFpbiI+Rm9ybV9SZXF1ZXN0X05hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6ODQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTJfMTYiIFRBUkdFVD0ibWFpbiI+Rm9ybV9SZXF1ZXN0X05hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI6OTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjI4XzE2IiBUQVJHRVQ9Im1haW4iPkZvcm1fU3ViPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzczXzE2IiBUQVJHRVQ9Im1haW4iPkZvcm1fVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MDBfMTYiIFRBUkdFVD0ibWFpbiI+Rm9ybV9XaW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzE0IiBUQVJHRVQ9Im1haW4iPkZyZWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6MTM2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MF8xNCIgVEFSR0VUPSJtYWluIj5GcmVlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjE4MDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MjVfMTYiIFRBUkdFVD0ibWFpbiI+RnJlZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo4MjU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTU4XzE2IiBUQVJHRVQ9Im1haW4iPkZyZWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6OTU4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzMV8xNiIgVEFSR0VUPSJtYWluIj5GcmVlaXRlbTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMTQiIFRBUkdFVD0ibWFpbiI+RnJlZV9Bcmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTMzXzE2IiBUQVJHRVQ9Im1haW4iPkZyZWVfRmllbGQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTk2XzE2IiBUQVJHRVQ9Im1haW4iPkZybV9Ecml2ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzgxXzEzIiBUQVJHRVQ9Im1haW4iPkZ1bmN0aW9uX0tleTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODZfMTMiIFRBUkdFVD0ibWFpbiI+RnVuY3Rpb25fS2V5X0NvZGU8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvRy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvRy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2YzNiMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9HLmh0bQpAQCAtMCwwICsxLDk2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5HPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBHPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzg4XzEzIiBUQVJHRVQ9Im1haW4iPkdlbmVyaWNfQ2hhcl9DaGVjazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzgxXzEzIiBUQVJHRVQ9Im1haW4iPkdlbmVyaWNfRmllbGRfQ2hlY2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODBfMTMiIFRBUkdFVD0ibWFpbiI+R2VuZXJpY19OZXh0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg3XzEzIiBUQVJHRVQ9Im1haW4iPkdlbmVyaWNfUHJldjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDYzXzE0IiBUQVJHRVQ9Im1haW4iPkdldCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNDYzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzRfMTQiIFRBUkdFVD0ibWFpbiI+R2V0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE0NzQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM3MF8xNiIgVEFSR0VUPSJtYWluIj5HZXRCZWdYPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNjdfMTYiIFRBUkdFVD0ibWFpbiI+R2V0QmVnWTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzg4XzE2IiBUQVJHRVQ9Im1haW4iPkdldEN1clg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM4NV8xNiIgVEFSR0VUPSJtYWluIj5HZXRDdXJZPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNTBfMTYiIFRBUkdFVD0ibWFpbiI+R2V0TWF4WDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzQ3XzE2IiBUQVJHRVQ9Im1haW4iPkdldE1heFk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNjZfMTYiIFRBUkdFVD0ibWFpbiI+R2V0bW91c2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQwN18xNiIgVEFSR0VUPSJtYWluIj5HZXRQYXJYPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MDRfMTYiIFRBUkdFVD0ibWFpbiI+R2V0UGFyWTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNjVfMTYiIFRBUkdFVD0ibWFpbiI+Z2V0d2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzYyXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Bcmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEyNV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfQmFja2dyb3VuZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjJfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X0J1ZmZlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczozNjI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY4XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9CdWZmZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6MzY4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgyNl8xMyIgVEFSR0VUPSJtYWluIj5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczo4MjY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODMyXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9DaGFyYWN0ZXJfQXR0cmlidXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjgzMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9DdXJzb3JfUG9zaXRpb248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81OV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfRW50cnk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM3XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9FdmVudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDg0XzE2IiBUQVJHRVQ9Im1haW4iPkdldF9GaWVsZGluZGV4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzU5XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9GaWVsZHR5cGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTY1XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9GaWVsZF9Jbml0X0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTcwXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9GaWVsZF9UZXJtX0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82M18xMyIgVEFSR0VUPSJtYWluIj5HZXRfRmxhZyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzOjYzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzY0XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9GbGFnIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRzOjY0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3NV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfRm9ybV9Jbml0X0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTgwXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Gb3JtX1Rlcm1fSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDVfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0luZGV4IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjc0NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMTBfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0luZGV4IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjMxMDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNDBfMTYiIFRBUkdFVD0ibWFpbiI+R2V0X0l0ZW1pbmRleDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODlfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X0l0ZW1fSW5pdF9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU5NF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfSXRlbV9UZXJtX0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzQ1XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9KdXN0aWZpY2F0aW9uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxNV8xMyIgVEFSR0VUPSJtYWluIj5HZXRfS2V5UGFkX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzUxXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9LZXlzdHJva2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk5XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9NZW51X0luaXRfSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MzJfMTYiIFRBUkdFVD0ibWFpbiI+R2V0X01lbnVfTWFyayAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo1MzI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTQwXzE2IiBUQVJHRVQ9Im1haW4iPkdldF9NZW51X01hcmsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NTQwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYwNF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfTWVudV9UZXJtX0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTMzXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Nb3VzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY3XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9OdW1iZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkczo2NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82OF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfTnVtYmVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRzOjY4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxMV8xNCIgVEFSR0VUPSJtYWluIj5HZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0MTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDE2XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjQxNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NThfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NjU4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY2M18xMyIgVEFSR0VUPSJtYWluIj5HZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo2NjM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjUxXzE0IiBUQVJHRVQ9Im1haW4iPkdldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjI1MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTZfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MjU2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0N18xNCIgVEFSR0VUPSJtYWluIj5HZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozNDc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzUyXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjM1MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjUyXzE0IiBUQVJHRVQ9Im1haW4iPkdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNzBfMTYiIFRBUkdFVD0ibWFpbiI+R2V0X1BhZ2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzU4XzE2IiBUQVJHRVQ9Im1haW4iPkdldF9QYXR0ZXJuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjhfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1NpemU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUyMl8xNCIgVEFSR0VUPSJtYWluIj5HZXRfU29mdF9MYWJlbF9LZXkgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTUyMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTI3XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Tb2Z0X0xhYmVsX0tleSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNTI3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NjNfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTU2MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTY3XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE1Njc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzEzXzE2IiBUQVJHRVQ9Im1haW4iPkdldF9TcGFjaW5nPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzNfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1N0cmluZyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzOjczPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzZfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1N0cmluZyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzOjc2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzU3XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9TdHJpbmcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZHM6NTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTIyXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9TdWJfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjUyMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzhfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1N1Yl9XaW5kb3cgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6Mzc4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzc5XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9UeXBlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8xNCIgVEFSR0VUPSJtYWluIj5HZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkczo1OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHM6NjQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhLmFkczo1OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzOjY0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzE0IiBUQVJHRVQ9Im1haW4iPkdldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YS5hZHM6NjQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjlfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkczo2OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8xNCIgVEFSR0VUPSJtYWluIj5HZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzOjU5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIiBUQVJHRVQ9Im1haW4iPkdldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YS5hZHM6NjQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8xNCIgVEFSR0VUPSJtYWluIj5HZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZHM6NTk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyIgVEFSR0VUPSJtYWluIj5HZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZHM6NjQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTExXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9XaW5kb3cgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NTExPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2N18xMyIgVEFSR0VUPSJtYWluIj5HZXRfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjM2NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTAyXzEzIiBUQVJHRVQ9Im1haW4iPkdldF9XaW5kb3cgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzOjEwMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDhfMTMiIFRBUkdFVD0ibWFpbiI+R2V0X1dpbmRvdyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZHM6NDg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyIgVEFSR0VUPSJtYWluIj5HZXRfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6NjI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzNl8xNCIgVEFSR0VUPSJtYWluIj5HZXRfV2luZG93X1Bvc2l0aW9uPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3MV8xNCIgVEFSR0VUPSJtYWluIj5HcmV5IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQ3MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzZfMTQiIFRBUkdFVD0ibWFpbiI+R3JleSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0NzY8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvSC5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvSC5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMjU2ZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9ILmh0bQpAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5IPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBIPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTlfMTYiIFRBUkdFVD0ibWFpbiI+SGFsZmRlbGF5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkyM18xNCIgVEFSR0VUPSJtYWluIj5IYWxmX0RlbGF5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxODRfMTYiIFRBUkdFVD0ibWFpbiI+SGFzY29sb3JzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU0N18xNiIgVEFSR0VUPSJtYWluIj5IYXNrZXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcyNl8xMyIgVEFSR0VUPSJtYWluIj5IYXNfQ29sb3JzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNzZfMTYiIFRBUkdFVD0ibWFpbiI+SGFzX0ljPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwODhfMTYiIFRBUkdFVD0ibWFpbiI+SGFzX0lsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NjJfMTMiIFRBUkdFVD0ibWFpbiI+SGFzX0luc2VydF9DaGFyYWN0ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY2N18xMyIgVEFSR0VUPSJtYWluIj5IYXNfSW5zZXJ0X0xpbmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzY3XzEzIiBUQVJHRVQ9Im1haW4iPkhhc19LZXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOThfMTMiIFRBUkdFVD0ibWFpbiI+SGFzX01vdXNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzYwXzEzIiBUQVJHRVQ9Im1haW4iPkhhc19TdHJpbmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzk3XzE0IiBUQVJHRVQ9Im1haW4iPkhpZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzk1XzE2IiBUQVJHRVQ9Im1haW4iPkhpZGVwYW5lbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjhfMTQiIFRBUkdFVD0ibWFpbiI+SG9yaXpvbnRhbF9MaW5lPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0kuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0kuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTNjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvSS5odG0KQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+STwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gSTwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTkyXzE3IiBUQVJHRVQ9Im1haW4iPklEQ19PazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85ODBfMTYiIFRBUkdFVD0ibWFpbiI+SURMX09rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMDlfMTQiIFRBUkdFVD0ibWFpbiI+SW1tZWRpYXRlX1VwZGF0ZV9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMTRfMTciIFRBUkdFVD0ibWFpbiI+SW1tZWRvazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODJfMTQiIFRBUkdFVD0ibWFpbiI+SW5mbzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk5XzE2IiBUQVJHRVQ9Im1haW4iPkluaXRjb2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTQ0XzE2IiBUQVJHRVQ9Im1haW4iPkluaXRwYWlyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMF8xNiIgVEFSR0VUPSJtYWluIj5Jbml0c2NyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzFfMTQiIFRBUkdFVD0ibWFpbiI+SW5pdF9Db2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEyXzE0IiBUQVJHRVQ9Im1haW4iPkluaXRfUGFpcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODZfMTQiIFRBUkdFVD0ibWFpbiI+SW5pdF9TY3JlZW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5OV8xNCIgVEFSR0VUPSJtYWluIj5Jbml0X1NvZnRfTGFiZWxfS2V5czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODlfMTQiIFRBUkdFVD0ibWFpbiI+SW5pdF9XaW5kb3dzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzFfMTQiIFRBUkdFVD0ibWFpbiI+SW5zZXJ0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzNzE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM3N18xNCIgVEFSR0VUPSJtYWluIj5JbnNlcnQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTM3NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzg5XzE0IiBUQVJHRVQ9Im1haW4iPkluc2VydCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMzg5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOThfMTQiIFRBUkdFVD0ibWFpbiI+SW5zZXJ0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjEzOTg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNF8xNCIgVEFSR0VUPSJtYWluIj5JbnNlcnRfRGVsZXRlX0xpbmVzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMThfMTQiIFRBUkdFVD0ibWFpbiI+SW5zZXJ0X0xpbmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODcxXzE2IiBUQVJHRVQ9Im1haW4iPkludHJmbHVzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjNfMTYiIFRBUkdFVD0ibWFpbiI+SXNlbmR3aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTAyXzEzIiBUQVJHRVQ9Im1haW4iPklzX0VuZF9XaW5kb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc0XzEzIiBUQVJHRVQ9Im1haW4iPklzX0Z1bmN0aW9uX0tleTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI0XzEzIiBUQVJHRVQ9Im1haW4iPklzX0hpZGRlbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTFfMTYiIFRBUkdFVD0ibWFpbiI+SXNfS2V5cGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUwXzEzIiBUQVJHRVQ9Im1haW4iPklzX01pbnVzT25lX1BvaW50ZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTExOV8xNiIgVEFSR0VUPSJtYWluIj5Jc19OZXc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzYzXzEzIiBUQVJHRVQ9Im1haW4iPklzX05ld19QYWdlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMzVfMTYiIFRBUkdFVD0ibWFpbiI+SXNfU2Nyb2xsX09rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjBfMTMiIFRBUkdFVD0ibWFpbiI+SXNfVG91Y2hlZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMTYwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjVfMTMiIFRBUkdFVD0ibWFpbiI+SXNfVG91Y2hlZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMTY1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEyOF8xNiIgVEFSR0VUPSJtYWluIj5JdGVtbmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjoxMjg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjUzXzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1uYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjI1MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNjFfMTYiIFRBUkdFVD0ibWFpbiI+SXRlbW5hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6MjYxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyM18xMyIgVEFSR0VUPSJtYWluIj5JdGVtczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjlfMTMiIFRBUkdFVD0ibWFpbiI+SXRlbV9Db3VudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NjBfMTYiIFRBUkdFVD0ibWFpbiI+SXRlbV9Jbml0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIzNF8xNiIgVEFSR0VUPSJtYWluIj5JdGVtX09wdHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjE0XzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1fT3B0c19PZmY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjExXzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1fT3B0c19PbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NjhfMTYiIFRBUkdFVD0ibWFpbiI+SXRlbV9UZXJtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY0XzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1fVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNjhfMTYiIFRBUkdFVD0ibWFpbiI+SXRlbV9WYWw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTgxXzE2IiBUQVJHRVQ9Im1haW4iPkl0ZW1fVmlzPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0suaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL0suaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlY2U5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvSy5odG0KQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+SzwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gSzwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjRfMTYiIFRBUkdFVD0ibWFpbiI+S2V5bmFtZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTg3XzE2IiBUQVJHRVQ9Im1haW4iPktleW9rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg0MF8xNiIgVEFSR0VUPSJtYWluIj5LZXlwYWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxMF8xNCIgVEFSR0VUPSJtYWluIj5LZXlfTmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNjEwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTZfMTMiIFRBUkdFVD0ibWFpbiI+S2V5X05hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTYxNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDY4XzE2IiBUQVJHRVQ9Im1haW4iPktpbGxjaGFyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NTdfMTMiIFRBUkdFVD0ibWFpbiI+S2lsbF9DaGFyYWN0ZXI8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvTC5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvTC5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkNjNkZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9MLmh0bQpAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5MPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBMPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDAyXzE0IiBUQVJHRVQ9Im1haW4iPkxlYXZlX0N1cnNvcl9BZnRlcl9VcGRhdGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAwMl8xNiIgVEFSR0VUPSJtYWluIj5MZWF2ZV9PazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMV8xMyIgVEFSR0VUPSJtYWluIj5MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6MTAxPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTAyXzEzIiBUQVJHRVQ9Im1haW4iPkxpbmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczoxMDI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDEyXzEzIiBUQVJHRVQ9Im1haW4iPkxpbmVzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNzdfMTMiIFRBUkdFVD0ibWFpbiI+TGluZV9MZW5ndGggLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo3NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzc4XzEzIiBUQVJHRVQ9Im1haW4iPkxpbmVfTGVuZ3RoIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6Nzg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzI4XzEzIiBUQVJHRVQ9Im1haW4iPkxpbms8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTcyXzE2IiBUQVJHRVQ9Im1haW4iPkxua19GaWVsZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTEwXzE2IiBUQVJHRVQ9Im1haW4iPkxvbmduYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjIxMTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjExOF8xNiIgVEFSR0VUPSJtYWluIj5Mb25nbmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjoyMTE4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NzdfMTQiIFRBUkdFVD0ibWFpbiI+TG9uZ19OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE2Nzc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY4MV8xMyIgVEFSR0VUPSJtYWluIj5Mb25nX05hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTY4MTwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9NLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9NLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA5NWYyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL00uaHRtCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPk08L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIE08L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8xMyIgVEFSR0VUPSJtYWluIj5NYWtlX0FyZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDlfMTQiIFRBUkdFVD0ibWFpbiI+TWFyayAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0MDk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDEzXzE0IiBUQVJHRVQ9Im1haW4iPk1hcmsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDEzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYwOF8xNiIgVEFSR0VUPSJtYWluIj5NZW51X0JhY2sgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NjA4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYxOF8xNiIgVEFSR0VUPSJtYWluIj5NZW51X0JhY2sgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NjE4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc4N18xNiIgVEFSR0VUPSJtYWluIj5NZW51X0ZtdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NjlfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9Gb3JlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjU2OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NzlfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9Gb3JlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjU3OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NDdfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9HcmV5IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjY0NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NTdfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9HcmV5IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjY1NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NzZfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9Jbml0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQxNF8xNiIgVEFSR0VUPSJtYWluIj5NZW51X09wdHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk0XzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfT3B0c19PZmY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzkxXzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfT3B0c19PbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82ODJfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9QYWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDcwXzE2IiBUQVJHRVQ9Im1haW4iPk1lbnVfU3ViPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg4NF8xNiIgVEFSR0VUPSJtYWluIj5NZW51X1Rlcm08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjNfMTYiIFRBUkdFVD0ibWFpbiI+TWVudV9Vc2VycHRyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ0Nl8xNiIgVEFSR0VUPSJtYWluIj5NZW51X1dpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MjlfMTYiIFRBUkdFVD0ibWFpbiI+TWV0YTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMTBfMTYiIFRBUkdFVD0ibWFpbiI+TU1hc2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMjExXzE2IiBUQVJHRVQ9Im1haW4iPk1vdXNlaW50ZXJ2YWw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNTJfMTYiIFRBUkdFVD0ibWFpbiI+TW91c2VfQXZhaWw8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTYxXzEzIiBUQVJHRVQ9Im1haW4iPk1vdXNlX0ludGVydmFsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYxMl8xNCIgVEFSR0VUPSJtYWluIj5Nb3ZlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjYxMjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTE3XzE0IiBUQVJHRVQ9Im1haW4iPk1vdmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRzOjExNzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83ODZfMTYiIFRBUkdFVD0ibWFpbiI+TW92ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo3ODY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEzMl8xNiIgVEFSR0VUPSJtYWluIj5Nb3ZlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkYjoxMzI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTExXzE0IiBUQVJHRVQ9Im1haW4iPk1vdmVfQ3Vyc29yPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyNl8xNCIgVEFSR0VUPSJtYWluIj5Nb3ZlX0Rlcml2ZWRfV2luZG93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxOV8xNCIgVEFSR0VUPSJtYWluIj5Nb3ZlX1dpbmRvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNTBfMTYiIFRBUkdFVD0ibWFpbiI+TXZkZXJ3aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2XzE2IiBUQVJHRVQ9Im1haW4iPm12d2FkZGNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1ODBfMTYiIFRBUkdFVD0ibWFpbiI+TXZ3ZGVsY2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzM2XzE2IiBUQVJHRVQ9Im1haW4iPk12d2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MDRfMTYiIFRBUkdFVD0ibWFpbiI+TXZ3aW5jaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI5XzE2IiBUQVJHRVQ9Im1haW4iPk12d2luc2NoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NjhfMTYiIFRBUkdFVD0ibWFpbiI+TXZ3aW5zbnN0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MTZfMTYiIFRBUkdFVD0ibWFpbiI+TV9Qb3N0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjkxNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTRfMTYiIFRBUkdFVD0ibWFpbiI+TV9Qb3N0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjM1NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDNfMTYiIFRBUkdFVD0ibWFpbiI+TV9TY2FsZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo2NDM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDgzXzE2IiBUQVJHRVQ9Im1haW4iPk1fU2NhbGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NDgzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkxOF8xNiIgVEFSR0VUPSJtYWluIj5NX1VucG9zdCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkYjo5MTg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzU2XzE2IiBUQVJHRVQ9Im1haW4iPk1fVW5wb3N0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjM1NjwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9OLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9OLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjhkZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL04uaHRtCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPk48L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIE48L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2NV8xNCIgVEFSR0VUPSJtYWluIj5OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjI2NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjhfMTQiIFRBUkdFVD0ibWFpbiI+TmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyNjg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMzMF8xNiIgVEFSR0VUPSJtYWluIj5OYXBtczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODA2XzE0IiBUQVJHRVQ9Im1haW4iPk5hcF9NaWxsaV9TZWNvbmRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNl8xNiIgVEFSR0VUPSJtYWluIj5OZXdmaWVsZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MDRfMTYiIFRBUkdFVD0ibWFpbiI+TmV3Rm9ybTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OF8xNiIgVEFSR0VUPSJtYWluIj5OZXdpdGVtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkzOV8xNiIgVEFSR0VUPSJtYWluIj5OZXdtZW51PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MjdfMTYiIFRBUkdFVD0ibWFpbiI+TmV3cGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl81MV8xNiIgVEFSR0VUPSJtYWluIj5OZXdwYW5lbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzRfMTYiIFRBUkdFVD0ibWFpbiI+TmV3d2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyMl8xMyIgVEFSR0VUPSJtYWluIj5OZXdfRmllbGR0eXBlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMTQiIFRBUkdFVD0ibWFpbiI+TmV3X0xpbmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo4NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg3XzE0IiBUQVJHRVQ9Im1haW4iPk5ld19MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6ODc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI2N18xMyIgVEFSR0VUPSJtYWluIj5OZXdfUGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODlfMTQiIFRBUkdFVD0ibWFpbiI+TmV3X1BhZ2UgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo4OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkwXzE0IiBUQVJHRVQ9Im1haW4iPk5ld19QYWdlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6OTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTkzXzEzIiBUQVJHRVQ9Im1haW4iPk5leHRfUm91dGVyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk0N18xNiIgVEFSR0VUPSJtYWluIj5OTDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NzNfMTYiIFRBUkdFVD0ibWFpbiI+Tm9DYnJlYWs8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTAyXzE2IiBUQVJHRVQ9Im1haW4iPk5vZGVsYXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODExXzE2IiBUQVJHRVQ9Im1haW4iPk5vRWNobzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NDlfMTYiIFRBUkdFVD0ibWFpbiI+Tm9OTDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83OTJfMTYiIFRBUkdFVD0ibWFpbiI+Tm9SYXc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTM1XzE2IiBUQVJHRVQ9Im1haW4iPk5vdGltZW91dDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84ODVfMTciIFRBUkdFVD0ibWFpbiI+Tm9fUWlmbHVzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjFfMTMiIFRBUkdFVD0ibWFpbiI+TnVtYmVyX09mX0NvbG9yczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjRfMTMiIFRBUkdFVD0ibWFpbiI+TnVtYmVyX09mX0NvbG9yX1BhaXJzPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL08uaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL08uaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjQyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvTy5odG0KQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+TzwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gTzwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTlfMTciIFRBUkdFVD0ibWFpbiI+T3V0cHV0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExOTRfMTQiIFRBUkdFVD0ibWFpbiI+T3ZlcmxheSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMTk0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMDhfMTYiIFRBUkdFVD0ibWFpbiI+T3ZlcmxheSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjoxMzA4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODhfMTQiIFRBUkdFVD0ibWFpbiI+T3ZlcndyaXRlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjExODg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI5Nl8xNiIgVEFSR0VUPSJtYWluIj5PdmVyd3JpdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MTI5NjwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9QLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9QLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA1N2MzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1AuaHRtCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPlA8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIFA8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ3Ml8xNCIgVEFSR0VUPSJtYWluIj5QYWRfQ2hhcmFjdGVyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjQ3MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OTBfMTQiIFRBUkdFVD0ibWFpbiI+UGFkX0NoYXJhY3RlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0OTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQwXzEzIiBUQVJHRVQ9Im1haW4iPlBhZ2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MF8xMyIgVEFSR0VUPSJtYWluIj5QYWdlX0xlbmd0aCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjgwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODFfMTMiIFRBUkdFVD0ibWFpbiI+UGFnZV9MZW5ndGggLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo4MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTY3XzE2IiBUQVJHRVQ9Im1haW4iPlBhaXJjb250ZW50PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTlfMTQiIFRBUkdFVD0ibWFpbiI+UGFpcl9Db250ZW50PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xNDRfMTYiIFRBUkdFVD0ibWFpbiI+UGFuZWxfSGlkZGVuPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjVfMTYiIFRBUkdFVD0ibWFpbiI+UGFuZWxfVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTA1XzE2IiBUQVJHRVQ9Im1haW4iPlBhbmVsX1dpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjdfMTQiIFRBUkdFVD0ibWFpbiI+UGF0dGVybjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTMxXzE2IiBUQVJHRVQ9Im1haW4iPlBlY2hvY2hhcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzUyXzEzIiBUQVJHRVQ9Im1haW4iPlBlZWsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTM1MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzU4XzEzIiBUQVJHRVQ9Im1haW4iPlBlZWsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTM1ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE0XzE0IiBUQVJHRVQ9Im1haW4iPlBlZWsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTQxNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDIzXzE0IiBUQVJHRVQ9Im1haW4iPlBlZWsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTQyMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM4XzE0IiBUQVJHRVQ9Im1haW4iPlBlZWsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTQzODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQ3XzE0IiBUQVJHRVQ9Im1haW4iPlBlZWsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTQ0NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA2XzE2IiBUQVJHRVQ9Im1haW4iPlBub3V0cmVmcmVzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82ODNfMTQiIFRBUkdFVD0ibWFpbiI+UG9zaXRpb25fQ3Vyc29yIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjY4MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zOTRfMTQiIFRBUkdFVD0ibWFpbiI+UG9zaXRpb25fQ3Vyc29yIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjM5NDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NzJfMTQiIFRBUkdFVD0ibWFpbiI+UG9zdCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo2NzI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzIyXzE0IiBUQVJHRVQ9Im1haW4iPlBvc3QgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MzIyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk0MV8xNiIgVEFSR0VUPSJtYWluIj5Qb3NfRm9ybV9DdXJzb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDk5XzE2IiBUQVJHRVQ9Im1haW4iPlBvc19NZW51X0N1cnNvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2IiBUQVJHRVQ9Im1haW4iPlByZWZyZXNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMV8xMyIgVEFSR0VUPSJtYWluIj5QcmV2X1JvdXRlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczoxMDg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDlfMTQiIFRBUkdFVD0ibWFpbiI+UHV0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6MTA5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzOjExNTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNl8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczoxMTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU0XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHM6NTQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzYxXzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pby5hZHM6NjE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzUwXzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHM6NTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU3XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHM6NTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80OV8xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkczo0OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU1XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzOjU1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiIFRBUkdFVD0ibWFpbiI+UHV0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHM6NTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81N18xNCIgVEFSR0VUPSJtYWluIj5QdXQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkczo1NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzUwXzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzOjUwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTdfMTQiIFRBUkdFVD0ibWFpbiI+UHV0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZHM6NTc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ5XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHM6NDk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU1XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pby5hZHM6NTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ5XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHM6NDk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU1XzE0IiBUQVJHRVQ9Im1haW4iPlB1dCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHM6NTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQzXzE2IiBUQVJHRVQ9Im1haW4iPnB1dHA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzUzXzE2IiBUQVJHRVQ9Im1haW4iPnB1dHdpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OF8xNCIgVEFSR0VUPSJtYWluIj5QdXRfQnVmPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE4XzE0IiBUQVJHRVQ9Im1haW4iPlB1dF9MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6MTE4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTIyXzE0IiBUQVJHRVQ9Im1haW4iPlB1dF9MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6MTIyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc2XzE0IiBUQVJHRVQ9Im1haW4iPlB1dF9TdHJpbmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ1XzE0IiBUQVJHRVQ9Im1haW4iPlB1dF9XaW5kb3c8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvUS5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvUS5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4NzQ2OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9RLmh0bQpAQCAtMCwwICsxLDggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPlE8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIFE8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg4M18xNyIgVEFSR0VUPSJtYWluIj5RaWZsdXNoPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1IuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1IuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTBjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvUi5odG0KQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+UjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gUjwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzkwXzE2IiBUQVJHRVQ9Im1haW4iPlJhdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81ODlfMTQiIFRBUkdFVD0ibWFpbiI+UmVkZWZpbmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NTg5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxM18xNCIgVEFSR0VUPSJtYWluIj5SZWRlZmluZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo2MTM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA1OV8xNCIgVEFSR0VUPSJtYWluIj5SZWRyYXcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTA1OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDYzXzE0IiBUQVJHRVQ9Im1haW4iPlJlZHJhdyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMDYzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwOTBfMTYiIFRBUkdFVD0ibWFpbiI+UmVkcmF3d2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNDVfMTQiIFRBUkdFVD0ibWFpbiI+UmVmcmVzaCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMDQ1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODNfMTQiIFRBUkdFVD0ibWFpbiI+UmVmcmVzaCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMjgzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MTJfMTQiIFRBUkdFVD0ibWFpbiI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUxN18xNCIgVEFSR0VUPSJtYWluIj5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDUyXzE0IiBUQVJHRVQ9Im1haW4iPlJlZnJlc2hfV2l0aG91dF9VcGRhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTA1MjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk1XzE0IiBUQVJHRVQ9Im1haW4iPlJlZnJlc2hfV2l0aG91dF9VcGRhdGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTI5NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDFfMTQiIFRBUkdFVD0ibWFpbiI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMTBfMTQiIFRBUkdFVD0ibWFpbiI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNzdfMTQiIFRBUkdFVD0ibWFpbiI+UmVsZWFzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTExXzE0IiBUQVJHRVQ9Im1haW4iPlJlcGxhY2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzExOV8xNiIgVEFSR0VUPSJtYWluIj5SZXBsYWNlX1BhbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzZfMTQiIFRBUkdFVD0ibWFpbiI+UmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjI3NjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzlfMTQiIFRBUkdFVD0ibWFpbiI+UmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjI3OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDZfMTQiIFRBUkdFVD0ibWFpbiI+UmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjEwNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDlfMTQiIFRBUkdFVD0ibWFpbiI+UmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjEwOTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MF8xNiIgVEFSR0VUPSJtYWluIj5SZXF1ZXN0X05hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6ODA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODhfMTYiIFRBUkdFVD0ibWFpbiI+UmVxdWVzdF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjg4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyOTVfMTYiIFRBUkdFVD0ibWFpbiI+UmVzZXR0eTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzY1XzE0IiBUQVJHRVQ9Im1haW4iPlJlc2V0X0N1cnNlc19Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNjdfMTYiIFRBUkdFVD0ibWFpbiI+UmVzZXRfUHJvZ19Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNjlfMTYiIFRBUkdFVD0ibWFpbiI+UmVzZXRfU2hlbGxfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzc2XzE0IiBUQVJHRVQ9Im1haW4iPlJlc2V0X1Rlcm1pbmFsX1N0YXRlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MTFfMTQiIFRBUkdFVD0ibWFpbiI+UmVzaXplPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MzhfMTQiIFRBUkdFVD0ibWFpbiI+UmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMwNl8xNiIgVEFSR0VUPSJtYWluIj5SaXBvZmZsaW5lPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODlfMTQiIFRBUkdFVD0ibWFpbiI+UmlwX09mZl9MaW5lczwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9TLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9TLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjA4ZTRmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1MuaHRtCkBAIC0wLDAgKzEsMTkxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5TPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBTPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjg1XzE2IiBUQVJHRVQ9Im1haW4iPlNhdmV0dHk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1OV8xNCIgVEFSR0VUPSJtYWluIj5TYXZlX0N1cnNlc19Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NzFfMTQiIFRBUkdFVD0ibWFpbiI+U2F2ZV9UZXJtaW5hbF9TdGF0ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjdfMTQiIFRBUkdFVD0ibWFpbiI+U2NhbGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NTI3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4M18xNCIgVEFSR0VUPSJtYWluIj5TY2FsZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozODM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg2N18xNCIgVEFSR0VUPSJtYWluIj5TY3JlZW5fRHVtcF9Ub19GaWxlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzVfMTQiIFRBUkdFVD0ibWFpbiI+U2NyZWVuX0luaXRfRnJvbV9GaWxlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzFfMTQiIFRBUkdFVD0ibWFpbiI+U2NyZWVuX1Jlc3RvcmVfRnJvbV9GaWxlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzlfMTQiIFRBUkdFVD0ibWFpbiI+U2NyZWVuX1NldF9GaWxlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMjJfMTQiIFRBUkdFVD0ibWFpbiI+U2Nyb2xsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjJfMTMiIFRBUkdFVD0ibWFpbiI+U2Nyb2xsaW5nX0FsbG93ZWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAyNF8xNiIgVEFSR0VUPSJtYWluIj5TY3JvbGxvazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDkwXzE2IiBUQVJHRVQ9Im1haW4iPnNjcl9kdW1wPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MTZfMTYiIFRBUkdFVD0ibWFpbiI+c2NyX2luaXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUwM18xNiIgVEFSR0VUPSJtYWluIj5zY3JfcmVzdG9yZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTI5XzE2IiBUQVJHRVQ9Im1haW4iPnNjcl9zZXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEwOF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfQmFja2dyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxMTA4PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0Nl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfQmFja2dyb3VuZCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0NDY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDQzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9CYWNrZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQ0MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNTRfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0J1ZmZlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84ODZfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0NicmVha19Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgxN18xNCIgVEFSR0VUPSJtYWluIj5TZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85Ml8xNCIgVEFSR0VUPSJtYWluIj5TZXRfQ29sIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6OTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfQ29sIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6OTM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODM4XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Db2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0N1cnJlbnQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NzIzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI4OF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfQ3VycmVudCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyODg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTAyNl8xNiIgVEFSR0VUPSJtYWluIj5TZXRfQ3VycmVudF9GbGQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjg3XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9DdXJyX0l0ZW08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwMV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfQ3Vyc29yX1Zpc2liaWxpdHk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODk4XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9FY2hvX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY0XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Fc2NhcGVfVGltZXJfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OTVfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjdfMTMiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkdHlwZV9Bcmc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjM0XzEzIiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZHR5cGVfQ2hvaWNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ0OF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfQmFjazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MDRfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX0ZvcmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjY1XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9Jbml0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0MV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfSW5pdF9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE5Nl8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfSnVzdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMTBfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX01heDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzBfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX09wdHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDkwXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9QYWQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjgxXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UZXJtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0N18xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVGVybV9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQ5XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzOjQ5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl81MF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmllbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHM6NTA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODRfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi5hZHM6ODQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNTFfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZpZWxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHM6NTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQ3XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzLmFkczo0NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHM6NTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzUxXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkczo1MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzcwXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHM6NzA8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU3XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GaWVsZF9Vc2VycHRyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIzMV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX0J1ZmZlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNzhfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZsZF9TdGF0dXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUxXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLmFkYjoxNTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTJfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZsZF9UeXBlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRiOjUyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl81Ml8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRiOjUyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk3XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkYjo5NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81Ml8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGI6NTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzUyXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGI6NTI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81NV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRmxkX1R5cGUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkYjo1NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzUzXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GbGRfVHlwZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiOjUzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkyOF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDI2XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JlZ3JvdW5kIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjQyNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MjNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0ZvcmVncm91bmQgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NDIzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUzN18xNCIgVEFSR0VUPSJtYWluIj5TZXRfRm9ybWF0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY5N18xNiIgVEFSR0VUPSJtYWluIj5TZXRfRm9ybV9Jbml0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfRm9ybV9Jbml0X0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODQ1XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JtX09wdHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjEzXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JtX1N1YjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MTNfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0Zvcm1fVGVybTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTlfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0Zvcm1fVGVybV9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU4XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JtX1VzZXJwdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTg1XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9Gb3JtX1dpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MzNfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0ZybV9GaWVsZHM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA1Nl8xNiIgVEFSR0VUPSJtYWluIj5TZXRfRnJtX1BhZ2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzU0XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9GdHlwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ2M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfR3JleTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MThfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjYxODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTNfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRiOjg5MzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MDVfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1fSW5pdDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjVfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1fSW5pdF9Ib29rPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5NF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfSXRlbV9PcHRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgxOV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfSXRlbV9UZXJtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3MV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfSXRlbV9UZXJtX0hvb2s8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTFfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1fVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNTVfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X0l0ZW1fVmFsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMzOV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfSnVzdGlmaWNhdGlvbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTBfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0tleVBhZF9Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTVfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X0xpbmUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo5NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk2XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9MaW5lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZHM6OTY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDAzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9NYXJrIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjQwMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MTRfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01hcmsgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZGI6NTE0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4N18xNCIgVEFSR0VUPSJtYWluIj5TZXRfTWF4aW11bV9TaXplPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU5MV8xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9CYWNrPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc2OF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9GbXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTUyXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X0ZvcmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjI5XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X0dyZXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODMzXzE2IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X0luaXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTc3XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X0luaXRfSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNzRfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01lbnVfT3B0czwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NjdfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X01lbnVfUGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ1N18xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9TdWI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODQ3XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X1Rlcm08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTgzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9NZW51X1Rlcm1fSG9vazwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81MF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9Vc2VycHRyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQzM18xNiIgVEFSR0VUPSJtYWluIj5TZXRfTWVudV9XaW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTA0XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9NZXRhX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzU3XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9OZXdfUGFnZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NzVfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X05MX01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Ob0RlbGF5X01vZGU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzk3XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjM5NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NDRfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NjQ0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIzNl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczoyMzY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzMzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjMzMzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjZfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1BhZF9DaGFyYWN0ZXIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NDY2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ4NF8xNCIgVEFSR0VUPSJtYWluIj5TZXRfUGFkX0NoYXJhY3RlciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczo0ODQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzM0XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9QYWdlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjczNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTA1XzE2IiBUQVJHRVQ9Im1haW4iPlNldF9QYWdlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRiOjExMDU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81NF8xNiIgVEFSR0VUPSJtYWluIj5TZXRfUGFuZWxfVXNlcnB0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjBfMTMiIFRBUkdFVD0ibWFpbiI+U2V0X1BhdHRlcm4gLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NTIwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzczNl8xNiIgVEFSR0VUPSJtYWluIj5TZXRfUGF0dGVybiAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo3MzY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTM1XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OTJfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1Jhd19Nb2RlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjdfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1Njcm9sbF9SZWdpb248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwNV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfU29mdF9MYWJlbF9LZXk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1Nl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTcyXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDBfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1NwYWNpbmcgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6NTAwPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY5M18xNiIgVEFSR0VUPSJtYWluIj5TZXRfU3BhY2luZyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjo2OTM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzc2XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9TdGF0dXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTE2XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9TdWJfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjUxNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzJfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1N1Yl9XaW5kb3cgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MzcyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY0M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfU3luY2hfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NTJfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1RpbWVvdXRfTW9kZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMTRfMTYiIFRBUkdFVD0ibWFpbiI+U2V0X1RvcHJvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTlfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1RvcF9Sb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzOjUzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0IiBUQVJHRVQ9Im1haW4iPlNldF9Vc2VyX0RhdGEgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHM6NTM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNThfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkczo1ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18xNCIgVEFSR0VUPSJtYWluIj5TZXRfVXNlcl9EYXRhIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzOjUzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiIFRBUkdFVD0ibWFpbiI+U2V0X1VzZXJfRGF0YSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzOjUzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIxMl8xNCIgVEFSR0VUPSJtYWluIj5TZXRfVmFsdWU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTA1XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9XaW5kb3cgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZHM6NTA1PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2MV8xNCIgVEFSR0VUPSJtYWluIj5TZXRfV2luZG93IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjM2MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzU5XzE0IiBUQVJHRVQ9Im1haW4iPlNldF9XaW5kb3cgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczo1OTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODdfMTQiIFRBUkdFVD0ibWFpbiI+U2hvdzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfODVfMTYiIFRBUkdFVD0ibWFpbiI+U2hvd3BhbmVsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NTVfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX0F0dHIgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MTk1NTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTY1XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19BdHRyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjE5NjU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkxOV8xNiIgVEFSR0VUPSJtYWluIj5TbGtfQXR0cm9mZjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTE3XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19BdHRyb248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk0MV8xNiIgVEFSR0VUPSJtYWluIj5TbGtfQXR0cnNldDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODg1XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19DbGVhcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTc1XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19Db2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODE5XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19Jbml0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NjlfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX0xhYmVsIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjE4Njk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg3N18xNiIgVEFSR0VUPSJtYWluIj5TbGtfTGFiZWwgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MTg3NzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODU4XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19Ob3V0cmVmcmVzaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODQ4XzE2IiBUQVJHRVQ9Im1haW4iPlNsa19SZWZyZXNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4OTVfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX1Jlc3RvcmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgzMV8xNiIgVEFSR0VUPSJtYWluIj5TbGtfU2V0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MDVfMTYiIFRBUkdFVD0ibWFpbiI+U2xrX1RvdWNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwOF8xNCIgVEFSR0VUPSJtYWluIj5TcGFjaW5nPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyIgVEFSR0VUPSJtYWluIj5TdGFuZGFyZF9XaW5kb3c8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODAwXzE0IiBUQVJHRVQ9Im1haW4iPlN0YW5kb3V0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MDdfMTQiIFRBUkdFVD0ibWFpbiI+U3RhcnRfQ29sb3I8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTIzXzEzIiBUQVJHRVQ9Im1haW4iPlN0YXJ0X01vdXNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDZfMTYiIFRBUkdFVD0ibWFpbiI+U3VicGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI3MF8xNiIgVEFSR0VUPSJtYWluIj5TdWJ3aW48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI3M18xMyIgVEFSR0VUPSJtYWluIj5TdWJfUGFkPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5NF8xMyIgVEFSR0VUPSJtYWluIj5TdWJfV2luZG93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NzJfMTMiIFRBUkdFVD0ibWFpbiI+U3VwcG9ydGVkX0F0dHJpYnV0ZXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODA2XzE0IiBUQVJHRVQ9Im1haW4iPlN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwM18xNCIgVEFSR0VUPSJtYWluIj5Td2l0Y2hfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczo0MDM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUwXzE0IiBUQVJHRVQ9Im1haW4iPlN3aXRjaF9PcHRpb25zIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzOjY1MDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNDJfMTQiIFRBUkdFVD0ibWFpbiI+U3dpdGNoX09wdGlvbnMgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM6MjQyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzOV8xNCIgVEFSR0VUPSJtYWluIj5Td2l0Y2hfT3B0aW9ucyAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkczozMzk8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0OF8xNCIgVEFSR0VUPSJtYWluIj5Td2l0Y2hfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MzhfMTQiIFRBUkdFVD0ibWFpbiI+U3luY2hyb25pemVfRG93bndhcmRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzM18xNCIgVEFSR0VUPSJtYWluIj5TeW5jaHJvbml6ZV9VcHdhcmRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM2M18xNiIgVEFSR0VUPSJtYWluIj5TeW5jb2s8L0E+Cis8L1VMPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvVC5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvVC5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4ZGVhMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9ULmh0bQpAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT5UPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIMj5GdW5jdGlvbnMgLSBUPC9IMj4KKzxBIEhSRUY9Ii4uL2Z1bmNzLmh0bSIgVEFSR0VUPSJfc2VsZiI+W2luZGV4XTwvQT4KKzxVTCBDT01QQUNUIFRZUEU9RElTQz4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MThfMTMiIFRBUkdFVD0ibWFpbiI+VGFiX1NpemU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEwMF8xNiIgVEFSR0VUPSJtYWluIj5UZXJtYXR0cnM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY4N18xNCIgVEFSR0VUPSJtYWluIj5UZXJtaW5hbF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE2ODc8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY5MV8xMyIgVEFSR0VUPSJtYWluIj5UZXJtaW5hbF9OYW1lIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjE2OTE8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEyNl8xNiIgVEFSR0VUPSJtYWluIj5UZXJtbmFtZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjoyMTI2PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMzRfMTYiIFRBUkdFVD0ibWFpbiI+VGVybW5hbWUgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MjEzNDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzUxXzE2IiBUQVJHRVQ9Im1haW4iPnRnZXRlbnQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl83MV8xNiIgVEFSR0VUPSJtYWluIj50Z2V0ZmxhZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzg5XzE2IiBUQVJHRVQ9Im1haW4iPnRnZXRudW08L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDhfMTYiIFRBUkdFVD0ibWFpbiI+dGdldHN0ciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRiOjEwODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEyOV8xNiIgVEFSR0VUPSJtYWluIj50Z2V0c3RyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGI6MTI5PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTUxXzE2IiBUQVJHRVQ9Im1haW4iPnRnb3RvPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTNfMTMiIFRBUkdFVD0ibWFpbiI+VEdvdG88L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNjlfMTYiIFRBUkdFVD0ibWFpbiI+dGlnZXRmbGFnPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzg3XzE2IiBUQVJHRVQ9Im1haW4iPnRpZ2V0c3RyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiOjg3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEwOF8xNiIgVEFSR0VUPSJtYWluIj50aWdldHN0ciAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkYjoxMDg8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTI3XzE2IiBUQVJHRVQ9Im1haW4iPnRpZ2V0c3RyIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRiOjEyNzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODJfMTQiIFRBUkdFVD0ibWFpbiI+VG9wPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl83NV8xNiIgVEFSR0VUPSJtYWluIj5Ub3BwYW5lbDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMjdfMTYiIFRBUkdFVD0ibWFpbiI+VG9wcm93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwNV8xMyIgVEFSR0VUPSJtYWluIj5Ub3BfUm93PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDFfMTQiIFRBUkdFVD0ibWFpbiI+VG91Y2ggLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM6MTE0MTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQ1XzE0IiBUQVJHRVQ9Im1haW4iPlRvdWNoIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRzOjExNDU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0M18xNCIgVEFSR0VUPSJtYWluIj5Ub3VjaF9Tb2Z0X0xhYmVsX0tleXM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQwXzE2IiBUQVJHRVQ9Im1haW4iPnRwdXRzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwMl8xNCIgVEFSR0VUPSJtYWluIj5UcmFjZV9PbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl8xMDZfMTQiIFRBUkdFVD0ibWFpbiI+VHJhY2VfUHV0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDNfMTYiIFRBUkdFVD0ibWFpbiI+VHJhbnNmb3JtPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTRfMTQiIFRBUkdFVD0ibWFpbiI+VHJhbnNmb3JtX0Nvb3JkaW5hdGVzPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1UuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1UuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMGY5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvZnVuY3MvVS5odG0KQEAgLTAsMCArMSwyMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+VTwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SDI+RnVuY3Rpb25zIC0gVTwvSDI+Cis8QSBIUkVGPSIuLi9mdW5jcy5odG0iIFRBUkdFVD0iX3NlbGYiPltpbmRleF08L0E+Cis8VUwgQ09NUEFDVCBUWVBFPURJU0M+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAxNl8xNiIgVEFSR0VUPSJtYWluIj5VbmN0cmwgLSAgdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZGI6MjAxNjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDI0XzE2IiBUQVJHRVQ9Im1haW4iPlVuY3RybCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjoyMDI0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2Ml8xNCIgVEFSR0VUPSJtYWluIj5VbmRvX0tleXN0cm9rZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MzdfMTYiIFRBUkdFVD0ibWFpbiI+VW5nZXRjaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xODZfMTYiIFRBUkdFVD0ibWFpbiI+VW5nZXRtb3VzZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDlfMTQiIFRBUkdFVD0ibWFpbiI+VW5nZXRfTW91c2U8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEzNl8xNCIgVEFSR0VUPSJtYWluIj5VbnRvdWNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjJfMTQiIFRBUkdFVD0ibWFpbiI+VW5fQ29udHJvbCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNjIyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjdfMTMiIFRBUkdFVD0ibWFpbiI+VW5fQ29udHJvbCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczoxNjI3PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl85Ml8xNCIgVEFSR0VUPSJtYWluIj5VcGRhdGVfUGFuZWxzPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNDBfMTQiIFRBUkdFVD0ibWFpbiI+VXBkYXRlX1NjcmVlbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODMxXzE0IiBUQVJHRVQ9Im1haW4iPlVzZV9EZWZhdWx0X0NvbG9yczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODUxXzEzIiBUQVJHRVQ9Im1haW4iPlVzZV9FeHRlbmRlZF9OYW1lczwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDc1XzE2IiBUQVJHRVQ9Im1haW4iPnVzZV9leHRlbmRlZF9uYW1lc0M8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTk1XzE0IiBUQVJHRVQ9Im1haW4iPlVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODhfMTQiIFRBUkdFVD0ibWFpbiI+VXNlX0luc2VydF9EZWxldGVfTGluZTwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9WLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9WLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTI2ZDdjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1YuaHRtCkBAIC0wLDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPlY8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIFY8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl81M18xMyIgVEFSR0VUPSJtYWluIj5WYWx1ZSAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHM6NTM8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjE4XzEzIiBUQVJHRVQ9Im1haW4iPlZhbHVlIC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzOjIxODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MzdfMTQiIFRBUkdFVD0ibWFpbiI+VmVydGljYWxfTGluZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMjdfMTMiIFRBUkdFVD0ibWFpbiI+VmlzaWJsZTwvQT4KKzwvVUw+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9XLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9mdW5jcy9XLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjcyNDJhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2Z1bmNzL1cuaHRtCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPlc8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEgyPkZ1bmN0aW9ucyAtIFc8L0gyPgorPEEgSFJFRj0iLi4vZnVuY3MuaHRtIiBUQVJHRVQ9Il9zZWxmIj5baW5kZXhdPC9BPgorPFVMIENPTVBBQ1QgVFlQRT1ESVNDPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MV8xNiIgVEFSR0VUPSJtYWluIj5XYWRkY2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDA3XzE2IiBUQVJHRVQ9Im1haW4iPldhZGRjaG5zdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzc2XzE2IiBUQVJHRVQ9Im1haW4iPldhZGRuc3RyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY1NV8xNiIgVEFSR0VUPSJtYWluIj5XYXR0cmdldCAtICB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkYjo2NTU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjc4XzE2IiBUQVJHRVQ9Im1haW4iPldhdHRyZ2V0IC0gIHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiOjY3ODwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTRfMTYiIFRBUkdFVD0ibWFpbiI+V2F0dHJvZmY8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjExXzE2IiBUQVJHRVQ9Im1haW4iPldhdHRyb248L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjM5XzE2IiBUQVJHRVQ9Im1haW4iPldhdHRyc2V0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNTlfMTciIFRBUkdFVD0ibWFpbiI+V0JhY2tncm91bmQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2IiBUQVJHRVQ9Im1haW4iPldib3JkZXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE2OV8xNiIgVEFSR0VUPSJtYWluIj5XQ2hhbmdlQmtnZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTlfMTYiIFRBUkdFVD0ibWFpbiI+V2NoZ2F0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMjdfMTYiIFRBUkdFVD0ibWFpbiI+V2NsZWFyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMzdfMTYiIFRBUkdFVD0ibWFpbiI+V2NsZWFyYm90PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNDdfMTYiIFRBUkdFVD0ibWFpbiI+V2NsZWFyZW9sPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NjdfMTYiIFRBUkdFVD0ibWFpbiI+V2RlbGNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NF8xNiIgVEFSR0VUPSJtYWluIj5XZGVsd2luPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwOF8xNiIgVEFSR0VUPSJtYWluIj5XZWNob2NoYXI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTk3XzE2IiBUQVJHRVQ9Im1haW4iPldlbmNsb3NlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMTdfMTYiIFRBUkdFVD0ibWFpbiI+V2VyYXNlPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExODBfMTYiIFRBUkdFVD0ibWFpbiI+V2dldGJrZ2Q8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTIzXzE2IiBUQVJHRVQ9Im1haW4iPldnZXRjaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzc5XzE2IiBUQVJHRVQ9Im1haW4iPldnZXRuc3RyPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ5MF8xNiIgVEFSR0VUPSJtYWluIj5XaGxpbmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU5M18xNiIgVEFSR0VUPSJtYWluIj5XaW5jaDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzMxXzE2IiBUQVJHRVQ9Im1haW4iPldpbmNobnN0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjg5XzE2IiBUQVJHRVQ9Im1haW4iPldpbm5zdHI8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYxNV8xNiIgVEFSR0VUPSJtYWluIj5XaW5zY2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMyMV8xNiIgVEFSR0VUPSJtYWluIj5XaW5zZGVsbG48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0N18xNiIgVEFSR0VUPSJtYWluIj5XaW5zbnN0cjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjMzXzE2IiBUQVJHRVQ9Im1haW4iPldMaW5lVG91Y2hlZDwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzdfMTYiIFRBUkdFVD0ibWFpbiI+V21vdmU8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA4MF8xNiIgVEFSR0VUPSJtYWluIj5Xbm91dHJlZnJlc2g8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUxXzE0IiBUQVJHRVQ9Im1haW4iPldyYXBfQnVpbHRpbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTAzXzE2IiBUQVJHRVQ9Im1haW4iPldyZWRyYXdsbjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDY5XzE2IiBUQVJHRVQ9Im1haW4iPldyZWZyZXNoPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDNfMTYiIFRBUkdFVD0ibWFpbiI+d3Jlc2l6ZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTU1XzE2IiBUQVJHRVQ9Im1haW4iPldzY3JsPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDZfMTYiIFRBUkdFVD0ibWFpbiI+V3NldHNjcnJlZzwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MDFfMTYiIFRBUkdFVD0ibWFpbiI+V3NldF9Db2xvcjwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81OTFfMTYiIFRBUkdFVD0ibWFpbiI+d3N0YW5kZW5kPC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU4OV8xNiIgVEFSR0VUPSJtYWluIj53c3RhbmRvdXQ8L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTE0XzE3IiBUQVJHRVQ9Im1haW4iPld0aW1lb3V0PC9BPgorPExJPjxBIEhSRUY9Ii4uL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExOTFfMTYiIFRBUkdFVD0ibWFpbiI+V3RvdWNobG48L0E+Cis8TEk+PEEgSFJFRj0iLi4vdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTA3XzE2IiBUQVJHRVQ9Im1haW4iPld2bGluZTwvQT4KKzxMST48QSBIUkVGPSIuLi90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjQ2XzE2IiBUQVJHRVQ9Im1haW4iPldXaW5Ub3VjaGVkPC9BPgorPC9VTD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL2luZGV4Lmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9pbmRleC5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExMzQ4NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9pbmRleC5odG0KQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgRnJhbWVzZXQvL0VOIj4KKzxIVE1MPgorPEhFQUQ+PFRJVExFPlNvdXJjZSBCcm93c2VyPC9USVRMRT48L0hFQUQ+Cis8RlJBTUVTRVQgQ09MUz0iMjUwLCoiPgorPE5PRlJBTUVTPgorPEgyIEFMSUdOPUNFTlRFUj5GaWxlczwvSDI+Cis8QSBIUkVGPSJmaWxlcy9ULmh0bSI+W1RdPC9BPgorPEhSPgorPEgyIEFMSUdOPUNFTlRFUj5GdW5jdGlvbnMvUHJvY2VkdXJlczwvSDI+Cis8QSBIUkVGPSJmdW5jcy9BLmh0bSI+W0FdPC9BPgorPEEgSFJFRj0iZnVuY3MvQi5odG0iPltCXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0MuaHRtIj5bQ108L0E+Cis8QSBIUkVGPSJmdW5jcy9ELmh0bSI+W0RdPC9BPgorPEEgSFJFRj0iZnVuY3MvRS5odG0iPltFXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0YuaHRtIj5bRl08L0E+Cis8QSBIUkVGPSJmdW5jcy9HLmh0bSI+W0ddPC9BPgorPEEgSFJFRj0iZnVuY3MvSC5odG0iPltIXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0kuaHRtIj5bSV08L0E+Cis8QSBIUkVGPSJmdW5jcy9LLmh0bSI+W0tdPC9BPgorPEEgSFJFRj0iZnVuY3MvTC5odG0iPltMXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL00uaHRtIj5bTV08L0E+Cis8QSBIUkVGPSJmdW5jcy9OLmh0bSI+W05dPC9BPgorPEEgSFJFRj0iZnVuY3MvTy5odG0iPltPXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1AuaHRtIj5bUF08L0E+Cis8QSBIUkVGPSJmdW5jcy9RLmh0bSI+W1FdPC9BPgorPEEgSFJFRj0iZnVuY3MvUi5odG0iPltSXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1MuaHRtIj5bU108L0E+Cis8QSBIUkVGPSJmdW5jcy9ULmh0bSI+W1RdPC9BPgorPEEgSFJFRj0iZnVuY3MvVS5odG0iPltVXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1YuaHRtIj5bVl08L0E+Cis8QSBIUkVGPSJmdW5jcy9XLmh0bSI+W1ddPC9BPgorPC9OT0ZSQU1FUz4KKzxGUkFNRVNFVCBST1dTPSI1MCUsNTAlIj4KKzxGUkFNRSBOQU1FPWZpbGVzIFNSQz1maWxlcy5odG0+Cis8RlJBTUUgTkFNRT1mdW5jcyBTUkM9ZnVuY3MuaHRtPgorPC9GUkFNRVNFVD4KKzxGUkFNRSBOQU1FPW1haW4gU1JDPW1haW4uaHRtPgorPC9GUkFNRVNFVD4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9tYWluLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS9tYWluLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODUwNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL21haW4uaHRtCkBAIC0wLDAgKzEsNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8UCBBTElHTj1yaWdodD48QSBIUkVGPSJtYWluLmh0bSIgVEFSR0VUPSJfdG9wIj5bTm8gZnJhbWUgdmVyc2lvbiBpcyBoZXJlXTwvQT48UD48SDIgQUxJR049Q0VOVEVSPkZpbGVzPC9IMj4KKzxBIEhSRUY9ImZpbGVzL1QuaHRtIj5bVF08L0E+Cis8SFI+PEgyIEFMSUdOPUNFTlRFUj5GdW5jdGlvbnMvUHJvY2VkdXJlczwvSDI+Cis8QSBIUkVGPSJmdW5jcy9BLmh0bSI+W0FdPC9BPgorPEEgSFJFRj0iZnVuY3MvQi5odG0iPltCXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0MuaHRtIj5bQ108L0E+Cis8QSBIUkVGPSJmdW5jcy9ELmh0bSI+W0RdPC9BPgorPEEgSFJFRj0iZnVuY3MvRS5odG0iPltFXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0YuaHRtIj5bRl08L0E+Cis8QSBIUkVGPSJmdW5jcy9HLmh0bSI+W0ddPC9BPgorPEEgSFJFRj0iZnVuY3MvSC5odG0iPltIXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL0kuaHRtIj5bSV08L0E+Cis8QSBIUkVGPSJmdW5jcy9LLmh0bSI+W0tdPC9BPgorPEEgSFJFRj0iZnVuY3MvTC5odG0iPltMXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL00uaHRtIj5bTV08L0E+Cis8QSBIUkVGPSJmdW5jcy9OLmh0bSI+W05dPC9BPgorPEEgSFJFRj0iZnVuY3MvTy5odG0iPltPXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1AuaHRtIj5bUF08L0E+Cis8QSBIUkVGPSJmdW5jcy9RLmh0bSI+W1FdPC9BPgorPEEgSFJFRj0iZnVuY3MvUi5odG0iPltSXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1MuaHRtIj5bU108L0E+Cis8QSBIUkVGPSJmdW5jcy9ULmh0bSI+W1RdPC9BPgorPEEgSFJFRj0iZnVuY3MvVS5odG0iPltVXTwvQT4KKzxBIEhSRUY9ImZ1bmNzL1YuaHRtIj5bVl08L0E+Cis8QSBIUkVGPSJmdW5jcy9XLmh0bSI+W1ddPC9BPgorPEhSPgorWW91IHNob3VsZCBzdGFydCB5b3VyIGJyb3dzaW5nIHdpdGggb25lIG9mIHRoZXNlIGZpbGVzOgorPFVMPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGEuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpYy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2UuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm8uYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4LmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtIj50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZHM8L0E+Cis8TEk+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkczwvQT4KKzxMST48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSI+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW8uYWRzPC9BPgorPExJPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0iPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRzPC9BPgorPC9VTD4KKzwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGFibGUuaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90YWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNmQwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGFibGUuaHRtbApAQCAtMCwwICsxLDM0MSBAQAorPCFET0NUWVBFIEhUTUwKK1BVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPkNvcnJlc3BvbmRlbmNlIGJldHdlZW4gbmN1cnNlcyBDIGFuZCBBZGEgZnVuY3Rpb25zPC9USVRMRT4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPkNvcnJlc3BvbmRlbmNlIGJldHdlZW4gbmN1cnNlcyBDIGFuZCBBZGEgZnVuY3Rpb25zPC9IMT4KKzxIMj5Tb3J0ZWQgYnkgQyBmdW5jdGlvbiBuYW1lPC9IMj4KKzxUQUJMRSBBTElHTj1DRU5URVIgQk9SREVSPgorPFRSIEFMSUdOPUxFRlQ+Cis8VEg+QyBuYW1lPC9USD48VEg+QWRhIG5hbWU8L1RIPjxUSD5tYW4gcGFnZTwvVEg+PC9UUj4KKzxUUj48VEQ+YXNzdW1lX2RlZmF1bHRfY29sb3JzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNTYiPkFzc3VtZV9EZWZhdWx0X0NvbG9yczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5iYXVkcmF0ZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTMxIj5CYXVkcmF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5iZWVwKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80MCI+QmVlcDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19iZWVwLjN4Lmh0bWwiPmN1cnNfYmVlcC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmJvdHRvbV9wYW5lbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzMiPkJvdHRvbTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5ib3goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzI2Ij5Cb3g8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y2FuX2NoYW5nZV9jb2xvcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQ2Ij5DYW5fQ2hhbmdlX0NvbG9yPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5jYnJlYWsoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQyIj5TZXRfQ2JyZWFrX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y2xlYXJvaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTQiPkNsZWFyX09uX05leHRfVXBkYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y29sb3JfY29udGVudCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQ3Ij5Db2xvcl9Db250ZW50PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5jb3B5d2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83OSI+Q29weTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdmVybGF5LjN4Lmh0bWwiPmN1cnNfb3ZlcmxheS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmN1cnJlbnRfZmllbGQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzU4Ij5DdXJyZW50PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y3VycmVudF9pdGVtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xNCI+Q3VycmVudDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Y3Vyc2NyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMiI+Q3VycmVudF9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5jdXJzZXNfdmVyc2lvbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTU3Ij5DdXJzZXNfVmVyc2lvbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19leHRlbmQuM3guaHRtbCI+Y3Vyc19leHRlbmQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5jdXJzX3NldCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTUzIj5TZXRfQ3Vyc29yX1Zpc2liaWxpdHk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZGF0YV9haGVhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTQiPkRhdGFfQWhlYWQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZGF0YS4zeC5odG1sIj5mb3JtX2RhdGEuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5kYXRhX2JlaGluZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTUiPkRhdGFfQmVoaW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2RhdGEuM3guaHRtbCI+Zm9ybV9kYXRhLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZGVmaW5lX2tleSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTI0Ij5EZWZpbmVfS2V5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9kZWZpbmVfa2V5LjN4Lmh0bWwiPmRlZmluZV9rZXkuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5kZWZfcHJvZ19tb2RlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNDgiPlNhdmVfQ3Vyc2VzX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZGVsYXlfb3V0cHV0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMjkiPkRlbGF5X091dHB1dDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmRlbF9wYW5lbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzE1Ij5EZWxldGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZGVsd2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMiI+RGVsZXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmRlcndpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQiPkRlcml2ZWRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmRvdXBkYXRlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82MSI+VXBkYXRlX1NjcmVlbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmR1cF9maWVsZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNCI+RHVwbGljYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmR1cHdpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTUiPkR1cGxpY2F0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5keW5hbWljX2ZpZWxkX2luZm8oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzI2Ij5EeW5hbWljX0luZm88L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfaW5mby4zeC5odG1sIj5mb3JtX2ZpZWxkX2luZm8uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5lY2hvKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80NCI+U2V0X0VjaG9fTW9kZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5lbmR3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzUiPkVuZF9XaW5kb3dzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZXJhc2VjaGFyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMzIiPkVyYXNlX0NoYXJhY3RlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9iYWNrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yMSI+QmFja2dyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX2JhY2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzIyIj5CYWNrZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfYnVmZmVyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV85Ij5HZXRfQnVmZmVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX2NvdW50KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80MyI+RmllbGRfQ291bnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX2ZvcmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzE4Ij5Gb3JlZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfZm9yZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMTkiPkZvcmVncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9pbmRleCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNjEiPkdldF9JbmRleDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX2luZm8oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzI1Ij5JbmZvPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2luZm8uM3guaHRtbCI+Zm9ybV9maWVsZF9pbmZvLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfaW5pdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMzYiPkdldF9GaWVsZF9Jbml0X0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9qdXN0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV83Ij5HZXRfSnVzdGlmaWNhdGlvbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwiPmZvcm1fZmllbGRfanVzdC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX29wdHNfb24oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX29wdHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzE1Ij5HZXRfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX29wdHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzE2Ij5HZXRfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX3BhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMjQiPlBhZF9DaGFyYWN0ZXI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5maWVsZF9zdGF0dXMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzExIj5DaGFuZ2VkPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZpZWxkX3Rlcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzM3Ij5HZXRfRmllbGRfVGVybV9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfdHlwZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzIiPkdldF9UeXBlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCI+Zm9ybV9maWVsZF92YWxpZGF0aW9uLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8yIj5HZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV9maWVsZF91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZmllbGRfdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8zIj5HZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV9maWVsZF91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zmxhc2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQxIj5GbGFzaF9TY3JlZW48L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYmVlcC4zeC5odG1sIj5jdXJzX2JlZXAuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mbHVzaGlucCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTMwIj5GbHVzaF9JbnB1dDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZvcm1fZHJpdmVyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV81NiI+RHJpdmVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2RyaXZlci4zeC5odG1sIj5mb3JtX2RyaXZlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZvcm1fZmllbGRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80MiI+RmllbGRzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzM4Ij5HZXRfRm9ybV9Jbml0X0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX29wdHNfb24oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzQ5Ij5Td2l0Y2hfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZvcm1fb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTAiPkdldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV81MSI+R2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX3BhZ2UoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzYwIj5QYWdlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV9zdWIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzMwIj5HZXRfU3ViX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX3Rlcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzM5Ij5HZXRfRm9ybV9UZXJtX0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mb3JtX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8yIj5HZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Zm9ybV91c2VycHRyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMyI+R2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwiPmZvcm1fdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZvcm1fd2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yOCI+R2V0X1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5mcmVlX2ZpZWxkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zIj5EZWxldGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZnJlZV9mb3JtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80NyI+RGVsZXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX25ldy4zeC5odG1sIj5mb3JtX25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmZyZWVfaXRlbSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMyI+RGVsZXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+ZnJlZV9tZW51KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV82MCI+RGVsZXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X25ldy4zeC5odG1sIj5tZW51X25ldy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmdldGJlZ3l4KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84NiI+R2V0X1dpbmRvd19Qb3NpdGlvbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Z2V0bWF4eXgoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzg1Ij5HZXRfU2l6ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Z2V0bW91c2UoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jQUZVXzIiPkdldF9Nb3VzZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Z2V0cGFyeXgoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzg4Ij5HZXRfT3JpZ2luX1JlbGF0aXZlX1RvX1BhcmVudDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+Z2V0eXgoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzg3Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldHl4LjN4Lmh0bWwiPmN1cnNfZ2V0eXguM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5oYWxmZGVsYXkoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQ3Ij5IYWxmX0RlbGF5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmhhc19jb2xvcnMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0NCI+SGFzX0NvbG9yczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aGFzX2ljKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMzQiPkhhc19JbnNlcnRfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmhhc19pbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTM1Ij5IYXNfSW5zZXJ0X0xpbmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aGFzX2tleSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMzEiPkhhc19LZXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmhpZGVfcGFuZWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV83Ij5IaWRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmlkY29rKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV81NiI+VXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aWRsb2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzU1Ij5Vc2VfSW5zZXJ0X0RlbGV0ZV9MaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aW1tZWRvaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTgiPkltbWVkaWF0ZV9VcGRhdGVfTW9kZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmluaXRfY29sb3IoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0NSI+SW5pdF9Db2xvcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aW5pdF9wYWlyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNDIiPkluaXRfUGFpcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aW5pdHNjcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMyI+SW5pdF9TY3JlZW48L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pbml0c2NyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV80Ij5Jbml0X1dpbmRvd3M8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pbnRyZmx1c2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQ4Ij5TZXRfRmx1c2hfT25fSW50ZXJydXB0X01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXNlbmR3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzYiPklzX0VuZF9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pc19saW5ldG91Y2hlZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNzciPklzX1RvdWNoZWQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmlzX3dpbnRvdWNoZWQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzc4Ij5Jc19Ub3VjaGVkPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5pdGVtX2NvdW50KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81OCI+SXRlbV9Db3VudDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXRlbV9kZXNjcmlwdGlvbigpOzwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzEyIj5EZXNjcmlwdGlvbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sIj5taXRlbV9uYW1lLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXRlbV9pbmRleCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMTciPkdldF9JbmRleDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXRlbV9pbml0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81MiI+R2V0X0l0ZW1fSW5pdF9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXRlbV9uYW1lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xMSI+TmFtZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sIj5taXRlbV9uYW1lLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXRlbV9vcHRzX29uKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV84Ij5Td2l0Y2hfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+aXRlbV9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xMCI+R2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfOSI+R2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fdGVybSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTMiPkdldF9JdGVtX1Rlcm1fSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzIiPkdldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbCI+bWl0ZW1fdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzMiPkdldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbCI+bWl0ZW1fdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fdmFsdWUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzUiPlZhbHVlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV92YWx1ZS4zeC5odG1sIj5taXRlbV92YWx1ZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPml0ZW1fdmlzaWJsZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNiI+VmlzaWJsZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdmlzaWJsZS4zeC5odG1sIj5taXRlbV92aXNpYmxlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+a2V5bmFtZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTI1Ij5LZXlfTmFtZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmtleW5hbWUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyNiI+S2V5X05hbWU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5rZXlvaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTIzIj5FbmFibGVfS2V5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9rZXlvay4zeC5odG1sIj5rZXlvay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmtleXBhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNDYiPlNldF9LZXlQYWRfTW9kZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5raWxsY2hhcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTMzIj5LaWxsX0NoYXJhY3RlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5sZWF2ZW9rKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV81NyI+TGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmxpbmtfZmllbGQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzUiPkxpbms8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bG9uZ25hbWUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzNyI+TG9uZ19OYW1lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPmxvbmduYW1lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMzgiPkxvbmdfTmFtZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X2JhY2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzM1Ij5CYWNrZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9iYWNrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8zNiI+QmFja2dyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfZHJpdmVyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV82MSI+RHJpdmVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2RyaXZlci4zeC5odG1sIj5tZW51X2RyaXZlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfZm9yZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMzIiPkZvcmVncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X2ZvcmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzMzIj5Gb3JlZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9mb3JtYXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQ3Ij5Gb3JtYXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfZm9ybWF0LjN4Lmh0bWwiPm1lbnVfZm9ybWF0LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9ncmV5KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8zOCI+R3JleTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfZ3JleSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMzkiPkdyZXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzU0Ij5HZXRfTWVudV9Jbml0X0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X2l0ZW1zKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81NyI+SXRlbXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaXRlbXMuM3guaHRtbCI+bWVudV9pdGVtcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfbWFyaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMzAiPk1hcms8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfbWFyay4zeC5odG1sIj5tZW51X21hcmsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X29wdHNfb24oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzIwIj5Td2l0Y2hfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMjEiPkdldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yMiI+R2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X3BhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNDEiPlBhZF9DaGFyYWN0ZXI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X3BhdHRlcm4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQ1Ij5QYXR0ZXJuPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9yZXF1ZXN0bmFtZS4zeDwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzYyIj48L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfZHJpdmVyLjN4Lmh0bWwiPm1lbnVfZHJpdmVyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV9zcGFjaW5nKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV80MyI+U3BhY2luZzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwiPm1lbnVfc3BhY2luZy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfc3ViKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yNiI+R2V0X1N1Yl9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV90ZXJtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81NSI+R2V0X01lbnVfVGVybV9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWVudV91c2VycHRyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMiI+R2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1lbnVfdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzMiPkdldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sIj5tZW51X3VzZXJwdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tZW51X3dpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMjQiPkdldF9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bWV0YSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNDUiPlNldF9NZXRhX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bW91c2VpbnRlcnZhbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNBRlVfNSI+TW91c2VfSW50ZXJ2YWw8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1vdXNlbWFzaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNBRlVfMSI+U3RhcnRfTW91c2U8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm1vdmVfZmllbGQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzQ0Ij5Nb3ZlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tb3ZlX3BhbmVsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfMTEiPk1vdmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZkZXJ3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE3Ij5Nb3ZlX0Rlcml2ZWRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm12d2FkZGNobnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMjQiPkFkZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3YWRkY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzkiPkFkZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3YWRkbnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMjIiPkFkZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tdndjaGdhdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMzkiPkNoYW5nZV9BdHRyaWJ1dGVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3ZGVsY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzk2Ij5EZWxldGVfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tdndnZXRuc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDgiPkdldDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tdndpbmNobnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTA2Ij5QZWVrPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3aW5jaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOTgiPlBlZWs8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tdndpbm5zdHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEwNCI+UGVlazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bXZ3aW5zY2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEwMCI+SW5zZXJ0PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwiPmN1cnNfaW5zY2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tdndpbnNuc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDIiPkluc2VydDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5tdndpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTYiPk1vdmVfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5hcG1zKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNTQiPk5hcF9NaWxsaV9TZWNvbmRzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPl9uY19mcmVlYWxsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNTkiPkN1cnNlc19GcmVlX0FsbDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X2ZpZWxkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xIj5DcmVhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X2ZpZWxkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yIj5OZXdfRmllbGQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X2Zvcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzQ1Ij5DcmVhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3LjN4Lmh0bWwiPmZvcm1fbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X2Zvcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzQ2Ij5OZXdfRm9ybTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXcuM3guaHRtbCI+Zm9ybV9uZXcuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5uZXdfaXRlbSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMSI+Q3JlYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X2l0ZW0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzIiPk5ld19JdGVtPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X21lbnUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzU5Ij5DcmVhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfbmV3LjN4Lmh0bWwiPm1lbnVfbmV3LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3cGFkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84OSI+TmV3X1BhZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5uZXdfcGFnZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNjMiPklzX05ld19QYWdlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX25ld19wYWdlLjN4Lmh0bWwiPmZvcm1fbmV3X3BhZ2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5uZXdfcGFuZWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV8xIj5DcmVhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bmV3X3BhbmVsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfMiI+TmV3X1BhbmVsPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPm5ld3dpbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTEiPkNyZWF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5ubCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTMiPlNldF9OTF9Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bm9kZWxheSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTAiPlNldF9Ob0RlbGF5X01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+bm90aW1lb3V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV81MiI+U2V0X0VzY2FwZV9UaW1lX01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+b3ZlcmxheSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfODEiPk92ZXJsYXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5vdmVyd3JpdGUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzgwIj5PdmVyd3JpdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wYWlyX2NvbnRlbnQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE0MyI+UGFpcl9Db250ZW50PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wYW5lbF9hYm92ZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzEzIj5BYm92ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wYW5lbF9iZWxvdygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzE0Ij5CZWxvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wYW5lbF9oaWRkZW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV8xMiI+SXNfSGlkZGVuPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnBhbmVsX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzIiPkdldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cGFuZWxfdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNBRlVfMyI+R2V0X1VzZXJfRGF0YTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wYW5lbF93aW5kb3coKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV84Ij5HZXRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnBhbmVsX3dpbmRvdygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzkiPlBhbmVsX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wZWNob2NoYXIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzkzIj5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wbm91dHJlZnJlc2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzkyIj5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnBvc19mb3JtX2N1cnNvcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNTMiPlBvc2l0aW9uX0N1cnNvcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9jdXJzb3IuM3guaHRtbCI+Zm9ybV9jdXJzb3IuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wb3NfbWVudV9jdXJzb3IoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzI4Ij5Qb3NpdGlvbl9DdXJzb3I8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfY3Vyc29yLjN4Lmh0bWwiPm1lbnVfY3Vyc29yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cG9zdF9mb3JtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV81MiI+UG9zdDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9wb3N0LjN4Lmh0bWwiPmZvcm1fcG9zdC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnBvc3RfbWVudSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMTgiPlBvc3Q8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfcG9zdC4zeC5odG1sIj5tZW51X3Bvc3QuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5wcmVmcmVzaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOTEiPlJlZnJlc2g8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cWlmbHVzaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNDkiPlNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5yYXcoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzQzIj5TZXRfUmF3X01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cmVkcmF3d2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82NCI+UmVkcmF3PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+cmVwbGFjZV9wYW5lbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzEwIj5SZXBsYWNlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnJlc2V0X3Byb2dfbW9kZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQ5Ij5SZXNldF9DdXJzZXNfTW9kZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5yZXNldHR5KCk7PC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTUxIj5SZXNldF9UZXJtaW5hbF9TdGF0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5yaXBvZmZsaW5lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNTIiPlJpcF9PZmZfTGluZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2F2ZXR0eSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTUwIj5TYXZlX1Rlcm1pbmFsX1N0YXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNjYWxlX2Zvcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzMxIj5TY2FsZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zY2FsZV9tZW51KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yNyI+U2NhbGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2NyX2R1bXAoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE2MCI+U2NyZWVuX0R1bXBfVG9fRmlsZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2NyX2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE2MiI+U2NyZWVuX0luaXRfRnJvbV9GaWxlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zY3JvbGxvaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTkiPkFsbG93X1Njcm9sbGluZzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNjcl9yZXN0b3JlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNjEiPlNjcmVlbl9SZXN0b3JlX0Zyb21fRmlsZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2NyX3NldCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTYzIj5TY3JlZW5fU2V0X0ZpbGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9jdXJyZW50X2ZpZWxkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV81NyI+U2V0X0N1cnJlbnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfY3VycmVudF9pdGVtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xMyI+U2V0X0N1cnJlbnQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9maWVsZF9iYWNrKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8yMCI+U2V0X0JhY2tncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfYnVmZmVyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV84Ij5TZXRfQnVmZmVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9maWVsZF9mb3JlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xNyI+U2V0X0ZvcmVncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfaW5pdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMzIiPlNldF9GaWVsZF9Jbml0X0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfanVzdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNiI+U2V0X0p1c3RpZmljYXRpb248L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfbWF4KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8xMiI+U2V0X01heGltdW1fU2l6ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfb3B0cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMTMiPlNldF9PcHRpb25zPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX3BhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMjMiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX3N0YXR1cygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfMTAiPlNldF9TdGF0dXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX3Rlcm0oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzMzIj5TZXRfRmllbGRfVGVybV9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2ZpZWxkX3R5cGUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8xIj5TZXRfVHlwZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZmllbGRfdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8xIj5TZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV9maWVsZF91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2Zvcm1fZmllbGRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80MCI+UmVkZWZpbmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9mb3JtX2ZpZWxkcygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNBRlVfNDEiPlNldF9GaWVsZHM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9mb3JtX2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzM0Ij5TZXRfRm9ybV9Jbml0X0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZm9ybV9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV80OCI+U2V0X09wdGlvbnM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZm9ybV9wYWdlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV81OSI+U2V0X1BhZ2U8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZm9ybV9zdWIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzI5Ij5TZXRfU3ViX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZm9ybV90ZXJtKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI0FGVV8zNSI+U2V0X0Zvcm1fVGVybV9Ib29rPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2Zvcm1fdXNlcnB0cjwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jQUZVXzEiPlNldF9Vc2VyX0RhdGE8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sIj5mb3JtX3VzZXJwdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfZm9ybV93aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzI3Ij5TZXRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9mb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9pdGVtX2luaXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzQ4Ij5TZXRfSXRlbV9Jbml0X0hvb2s8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2suM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfaXRlbV9vcHRzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV83Ij5TZXRfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X2l0ZW1fdGVybSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNDkiPlNldF9JdGVtX1Rlcm1fSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9pdGVtX3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8xIj5TZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV91c2VycHRyLjN4Lmh0bWwiPm1pdGVtX3VzZXJwdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfaXRlbV92YWx1ZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNCI+U2V0X1ZhbHVlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV92YWx1ZS4zeC5odG1sIj5taXRlbV92YWx1ZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X2JhY2soKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzM0Ij5TZXRfQmFja2dyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X2ZvcmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzMxIj5TZXRfRm9yZWdyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X2Zvcm1hdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNDYiPlNldF9Gb3JtYXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfZm9ybWF0LjN4Lmh0bWwiPm1lbnVfZm9ybWF0LjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X21lbnVfZ3JleSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfMzciPlNldF9HcmV5PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X21lbnVfaW5pdCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTAiPlNldF9NZW51X0luaXRfSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X2l0ZW1zKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV81NiI+UmVkZWZpbmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfaXRlbXMuM3guaHRtbCI+bWVudV9pdGVtcy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X21hcmsoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzI5Ij5TZXRfTWFyazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9tYXJrLjN4Lmh0bWwiPm1lbnVfbWFyay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X29wdHMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzE5Ij5TZXRfT3B0aW9uczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X3BhZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNDAiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X21lbnVfcGF0dGVybigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNDQiPlNldF9QYXR0ZXJuPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X21lbnVfc3BhY2luZygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNDIiPlNldF9TcGFjaW5nPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3NwYWNpbmcuM3guaHRtbCI+bWVudV9zcGFjaW5nLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X21lbnVfc3ViKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yNSI+U2V0X1N1Yl9XaW5kb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X21lbnVfdGVybSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNBRlVfNTEiPlNldF9NZW51X1Rlcm1fSG9vazwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9tZW51X3VzZXJwdHI8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8xIj5TZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9tZW51X3VzZXJwdHIuM3guaHRtbCI+bWVudV91c2VycHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2V0X21lbnVfd2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8yMyI+U2V0X1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vbWVudV93aW4uM3guaHRtbCI+bWVudV93aW4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zZXRfbmV3X3BhZ2UoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jQUZVXzYyIj5TZXRfTmV3X1BhZ2U8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3X3BhZ2UuM3guaHRtbCI+Zm9ybV9uZXdfcGFnZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF9wYW5lbF91c2VycHRyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI0FGVV8xIj5TZXRfVXNlcl9EYXRhPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNldF90b3Bfcm93KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI0FGVV8xNSI+U2V0X1RvcF9Sb3c8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNob3dfcGFuZWwoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI0FGVV81Ij5TaG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19hdHRyb24oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExOCI+U3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX2F0dHJzZXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExOSI+U2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX2F0dHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyMCI+R2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX2F0dHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyMSI+R2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX2NsZWFyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTUiPkNsZWFyX1NvZnRfTGFiZWxfS2V5czwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfY29sb3IoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEyMiI+U2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19pbml0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDkiPkluaXRfU29mdF9MYWJlbF9LZXlzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnNsa19sYWJlbCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTEzIj5HZXRfU29mdF9MYWJlbF9LZXk8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX2xhYmVsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTQiPkdldF9Tb2Z0X0xhYmVsX0tleTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfbm91dHJlZnJlc2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExMiI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c2xrX3JlZnJlc2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExMSI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfcmVzdG9yZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTE2Ij5SZXN0b3JlX1NvZnRfTGFiZWxfS2V5czwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfc2V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMTAiPlNldF9Tb2Z0X0xhYmVsX0tleTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zbGtfdG91Y2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzExNyI+VG91Y2hfU29mdF9MYWJlbF9LZXlzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5jdXJzX3Nsay4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnN0YW5kb3V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8zMiI+U3RhbmRvdXQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zdGFydF9jb2xvcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTQxIj5TdGFydF9Db2xvcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c3Rkc2NyPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMSI+U3RhbmRhcmRfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+c3VicGFkKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV85MCI+U3ViX1BhZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD5zdWJ3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEzIj5TdWJfV2luZG93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnN5bmNvaygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMjAiPlNldF9TeW5jaF9Nb2RlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnRlcm1hdHRycygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTM2Ij5TdXBwb3J0ZWRfQXR0cmlidXRlczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD50ZXJtbmFtZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTM5Ij5UZXJtaW5hbF9OYW1lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnRlcm1uYW1lKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNDAiPlRlcm1pbmFsX05hbWU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dG9wX3BhbmVsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNBRlVfNCI+VG9wPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnRvcF9yb3coKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jQUZVXzE2Ij5Ub3BfUm93PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9taXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD50b3VjaGxpbmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzc1Ij5Ub3VjaDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dG91Y2h3aW4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzc0Ij5Ub3VjaDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+X3RyYWNlZigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNBRlVfMiI+VHJhY2VfUHV0PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD50cmFjZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNBRlVfMSI+VHJhY2Vfb248L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnVuY3RybCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTI3Ij5Vbl9Db250cm9sPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dW5jdHJsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMjgiPlVuX0NvbnRyb2w8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD51bmdldGNoKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8zMCI+VW5kb19LZXlzdHJva2U8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnVuZ2V0bW91c2UoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jQUZVXzMiPlVuZ2V0X01vdXNlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD51bnRvdWNod2luKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83MyI+VW50b3VjaDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dXBkYXRlX3BhbmVscygpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jQUZVXzYiPlVwZGF0ZV9QYW5lbHM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+dXNlX2RlZmF1bHRfY29sb3JzKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xNTUiPlVzZV9EZWZhdWx0X0NvbG9yczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD51c2VfZXh0ZW5kZWRfbmFtZXMoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzE1OCI+VXNlX0V4dGVuZGVkX05hbWVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2V4dGVuZC4zeC5odG1sIj5jdXJzX2V4dGVuZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndhZGRjaG5zdHIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzIzIj5BZGQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndhZGRjaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOCI+QWRkPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YWRkbnN0cigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMjEiPkFkZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YXR0cl9nZXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzM1Ij5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YXR0cl9nZXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzM2Ij5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndhdHRyb24oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzMzIj5Td2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndhdHRyc2V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8zNCI+U2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2JrZ2RnZXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzcyIj5HZXRfQmFja2dyb3VuZDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndia2dkc2V0KCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV83MCI+U2V0X0JhY2tncm91bmQ8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53YmtnZCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNzEiPkNoYW5nZV9CYWNrZ3JvdW5kPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2JvcmRlcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMjUiPkJvcmRlcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53Y2hnYXQoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzM4Ij5DaGFuZ2VfQXR0cmlidXRlczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndjbGVhcigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNjciPkNsZWFyPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53Y2xydG9ib3QoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzY4Ij5DbGVhcl9Ub19FbmRfT2ZfU2NyZWVuPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53Y2xydG9lb2woKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzY5Ij5DbGVhcl9Ub19FbmRfT2ZfTGluZTwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2NvbG9yX3NldCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMzciPlNldF9Db2xvcjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndkZWxjaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOTUiPkRlbGV0ZV9DaGFyYWN0ZXI8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsY2guM3guaHRtbCI+Y3Vyc19kZWxjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndkZWxldGVsbigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfODMiPkRlbGV0ZV9MaW5lPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPmN1cnNfZGVsZXRlbG4uM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53ZWNob2NoYXIoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzEwIj5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2VuY2xvc2UoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jQUZVXzQiPkVuY2xvc2VkX0luX1dpbmRvdzwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2VyYXNlKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82NiI+RXJhc2U8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndnZXRjaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMjkiPkdldF9LZXlzdHJva2U8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndnZXRuc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDciPkdldDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53aGxpbmUoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzI3Ij5Ib3Jpem9udGFsX0xpbmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2luY2huc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDUiPlBlZWs8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53aW5jaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOTciPlBlZWs8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2guM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53aW5uc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDMiPlBlZWs8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0ci4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndpbnNjaCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfOTkiPkluc2VydDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2luc2RlbGxuKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84MiI+SW5zZXJ0X0RlbGV0ZV9MaW5lczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d2luc2VydGxuKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV84NCI+SW5zZXJ0X0xpbmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbi4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndpbnNuc3RyKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xMDEiPkluc2VydDwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53bW92ZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNyI+TW92ZV9DdXJzb3I8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfbW92ZS4zeC5odG1sIj5jdXJzX21vdmUuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53bm91dHJlZnJlc2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzYzIj5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d3JlZHJhd2xuKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV82NSI+UmVkcmF3PC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d3JlZnJlc2goKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzYyIj5SZWZyZXNoPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d3Jlc2l6ZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTY0Ij5SZXNpemU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL3dyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZS4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndzY3JsKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV85NCI+U2Nyb2xsPC9BPjwvVEQ+PFREPjxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcm9sbC4zeC5odG1sIj5jdXJzX3Njcm9sbC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndzZXRzY3JyZWcoKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzYwIj5TZXRfU2Nyb2xsX1JlZ2lvbjwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cy4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPndzeW5jZG93bigpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMTkiPlN5bmNocm9uaXplX0Rvd253YXJkczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53c3luY3VwKCk8L1REPjxURD48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI0FGVV8xOCI+U3luY2hyb25pemVfVXB3YXJkczwvQT48L1REPjxURD48QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9URD48L1RSPgorPFRSPjxURD53dGltZW91dCgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfNTEiPlNldF9UaW1lb3V0X01vZGU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzLjN4PC9BPjwvVEQ+PC9UUj4KKzxUUj48VEQ+d3RvdWNobG4oKTwvVEQ+PFREPjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jQUZVXzc2Ij5DaGFuZ2VfTGluZV9TdGF0dXM8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaC4zeDwvQT48L1REPjwvVFI+Cis8VFI+PFREPnd2bGluZSgpPC9URD48VEQ+PEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNBRlVfMjgiPlZlcnRpY2FsX0xpbmU8L0E+PC9URD48VEQ+PEEgSFJFRj0iLi4vbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyLjN4PC9BPjwvVEQ+PC9UUj4KKzwvVEFCTEU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjIyZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtCkBAIC0wLDAgKzEsMTIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eC5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXggICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDFfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU29tZSBoZWxwZXJzPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMjciPkNwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICBjaGFyc19wdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTdfMjciPlN0cjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRmlsbCB0aGUgc3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlcnMgcmVmZXJlbmNlZCBieSB0aGU8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgY2hhcnNfcHRyLjwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzciPkxlbjwvQT48L0ZPTlQ+IDogTmF0dXJhbDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMjciPkNwPC9BPiAvPSBOdWxsX1B0ciA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzUwXzciPkxlbjwvQT4gOj0gTmF0dXJhbCAoU3RybGVuICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzI3Ij5DcDwvQT4pKTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+J0xlbmd0aCAmbHQ7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl81MF83Ij5MZW48L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZGVjbGFyZTwvYj4KKyAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMTMiPlM8L0E+PC9GT05UPiA6IFN0cmluZyAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNTBfNyI+TGVuPC9BPik7CisgICAgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl81OF8xMyI+UzwvQT4gOj0gVmFsdWUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMjciPkNwPC9BPik7CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+J0ZpcnN0IC4uICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+J0ZpcnN0ICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzUwXzciPkxlbjwvQT4gLSAxKSkgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzU4XzEzIj5TPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzU4XzEzIj5TPC9BPic8Yj5SYW5nZTwvYj4pOworICAgICAgICAgPGI+ZW5kPC9iPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNTBfNyI+TGVuPC9BPiA6PSAwOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNTBfNyI+TGVuPC9BPiAmbHQ7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTdfMjciPlN0cjwvQT4nTGVuZ3RoIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+ICgoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExN18yNyI+U3RyPC9BPidGaXJzdCArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl81MF83Ij5MZW48L0E+KSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE3XzI3Ij5TdHI8L0E+J0xhc3QpIDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7ICcgJyk7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzI2Ij5DcDwvQT48L0ZPTlQ+IDogY2hhcnNfcHRyKSA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1XzciPkxlbjwvQT48L0ZPTlQ+IDogTmF0dXJhbDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMjYiPkNwPC9BPiAvPSBOdWxsX1B0ciA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzc1XzciPkxlbjwvQT4gOj0gTmF0dXJhbCAoU3RybGVuICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzI2Ij5DcDwvQT4pKTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNzVfNyI+TGVuPC9BPiA9IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJldHVybjwvYj4gIiI7CisgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgPGI+ZGVjbGFyZTwvYj4KKyAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODNfMTYiPlM8L0E+PC9GT05UPiA6IFN0cmluZyAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfNzVfNyI+TGVuPC9BPik7CisgICAgICAgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8yNiI+Q3A8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRiLmh0bSNyZWZfODNfMTYiPlM8L0E+KTsKKyAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzgzXzE2Ij5TPC9BPjsKKyAgICAgICAgICAgIDxiPmVuZDwvYj47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+ICIiOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzI5Ij5Db2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+Y2FzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzI5Ij5Db2RlPC9BPiA8Yj5pczwvYj4KKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiAgICAgICAgICAgICAgPSZndDsgPGI+bnVsbDwvYj47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODFfNCI+RV9TeXN0ZW1fRXJyb3I8L0E+ICAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODlfNCI+RXRpX1N5c3RlbV9FcnJvcjwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODJfNCI+RV9CYWRfQXJndW1lbnQ8L0E+ICAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTBfNCI+RXRpX0JhZF9Bcmd1bWVudDwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODNfNCI+RV9Qb3N0ZWQ8L0E+ICAgICAgICAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTFfNCI+RXRpX1Bvc3RlZDwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODRfNCI+RV9Db25uZWN0ZWQ8L0E+ICAgICAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTJfNCI+RXRpX0Nvbm5lY3RlZDwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODVfNCI+RV9CYWRfU3RhdGU8L0E+ICAgICAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTNfNCI+RXRpX0JhZF9TdGF0ZTwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODZfNCI+RV9Ob19Sb29tPC9BPiAgICAgICAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTRfNCI+RXRpX05vX1Jvb208L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzg3XzQiPkVfTm90X1Bvc3RlZDwvQT4gICAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzk1XzQiPkV0aV9Ob3RfUG9zdGVkPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84OF80Ij5FX1Vua25vd25fQ29tbWFuZDwvQT4gPSZndDsgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM5Nl80Ij5FdGlfVW5rbm93bl9Db21tYW5kPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84OV80Ij5FX05vX01hdGNoPC9BPiAgICAgICAgPSZndDsgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM5N180Ij5FdGlfTm9fTWF0Y2g8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzkwXzQiPkVfTm90X1NlbGVjdGFibGU8L0E+ICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzk4XzQiPkV0aV9Ob3RfU2VsZWN0YWJsZTwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTFfNCI+RV9Ob3RfQ29ubmVjdGVkPC9BPiAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zOTlfNCI+RXRpX05vdF9Db25uZWN0ZWQ8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzkyXzQiPkVfUmVxdWVzdF9EZW5pZWQ8L0E+ICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDAwXzQiPkV0aV9SZXF1ZXN0X0RlbmllZDwvQT47CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTNfNCI+RV9JbnZhbGlkX0ZpZWxkPC9BPiAgID0mZ3Q7IDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MDFfNCI+RXRpX0ludmFsaWRfRmllbGQ8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk0XzQiPkVfQ3VycmVudDwvQT4gICAgICAgICA9Jmd0OyA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDAyXzQiPkV0aV9DdXJyZW50PC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+Y2FzZTwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxNjBjZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bQpAQCAtMCwwICsxLDEzMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXguYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4LmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eCAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTYgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgY3Vyc2VzIGJpbmRpbmcuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgbW9kdWxlIGlzIGdlbmVyYXRlZC4gUGxlYXNlIGRvbid0IGNoYW5nZSBpdCBtYW51YWxseSE8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUnVuIHRoZSBnZW5lcmF0b3IgaW5zdGVhZC48L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gU3lzdGVtOworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMjBfMTAiPlVuY2hlY2tlZF9Db252ZXJzaW9uPC9BPjsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl80MV80MCI+QXV4PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPik7CisKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzEyIj5DX0ludDwvQT48L0ZPTlQ+ICAgICAgPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmludDsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+PC9GT05UPiAgICA8Yj5pczwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuc2hvcnQ7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzEyIj5DX0xvbmdfSW50PC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmxvbmc7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzEyIj5DX1NpemVfVDwvQT48L0ZPTlQ+ICAgPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLnNpemVfdDsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTIiPkNfVUludDwvQT48L0ZPTlQ+ICAgICA8Yj5pczwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMudW5zaWduZWQ7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzEyIj5DX1VMb25nPC9BPjwvRk9OVD4gICAgPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLnVuc2lnbmVkX2xvbmc7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzEyIj5DX0NoYXJfUHRyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3MuY2hhcnNfcHRyOworICAgPGI+dHlwZTwvYj4gICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml8xMiI+Q19Wb2lkX1B0cjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFN5c3RlbS5BZGRyZXNzOworICAgPGI+dHlwZTwvYj4gICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18xMiI+Q19DaHR5cGU8L0E+PC9GT05UPiAgIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82MF8xMiI+Q19VTG9uZzwvQT47CisgICA8Yj50eXBlPC9iPiAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEyIj5DX0F0dHJUeXBlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYwXzEyIj5DX1VMb25nPC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIGhvdyB0aG9zZSBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gbmN1cnNlcy4gSSBzZWUgdGhlbSBhbHNvPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGV4YWN0bHkgbGlrZSB0aGlzIGluIGFsbCBFVEkgaW1wbGVtZW50YXRpb25zIEkgZXZlciB0ZXN0ZWQuIFNvIGl0PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGNvdWxkIGJlIHRoYXQgdGhpcyBpcyBxdWl0ZSBnZW5lcmFsLCBidXQgcGxlYXNlIGNoZWNrIHdpdGggeW91ciBjdXJzZXMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgY3JpdGljYWwsIGJlY2F1c2UgY3Vyc2VzIHNvbWV0aW1lIG1peGVzIGJvb2xlYW4gcmV0dXJucyB3aXRoPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJldHVybmluZyBhbiBlcnJvciBzdGF0dXMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzQiPkN1cnNlc19PazwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDA7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IC0xOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0XzQiPkN1cnNlc19UcnVlPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1XzQiPkN1cnNlc19GYWxzZTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDA7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRXRpX0Vycm9yOiB0eXBlIGZvciBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgbWVudSBhbmQgZm9ybSBzdWJzeXN0ZW08L0VNPjwvRk9OVD4KKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA8Yj5yYW5nZTwvYj4gLTE0IC4uIDA7CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfNCI+RV9PazwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDA7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzQiPkVfU3lzdGVtX0Vycm9yPC9BPjwvRk9OVD4gICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtMTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODJfNCI+RV9CYWRfQXJndW1lbnQ8L0E+PC9GT05UPiAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IC0yOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84M180Ij5FX1Bvc3RlZDwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzQiPkVfQ29ubmVjdGVkPC9BPjwvRk9OVD4gICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtNDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODVfNCI+RV9CYWRfU3RhdGU8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IC01OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Nl80Ij5FX05vX1Jvb208L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTY7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzQiPkVfTm90X1Bvc3RlZDwvQT48L0ZPTlQ+ICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtNzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODhfNCI+RV9Vbmtub3duX0NvbW1hbmQ8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IC04OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OV80Ij5FX05vX01hdGNoPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gLTk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkwXzQiPkVfTm90X1NlbGVjdGFibGU8L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtMTA7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxXzQiPkVfTm90X0Nvbm5lY3RlZDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtMTE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyXzQiPkVfUmVxdWVzdF9EZW5pZWQ8L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtMTI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzXzQiPkVfSW52YWxpZF9GaWVsZDwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtMTM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0XzQiPkVfQ3VycmVudDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSAtMTQ7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzk0XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl85NF8yOSI+Q29kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRGlzcGF0Y2ggdGhlIGVycm9yIGNvZGUgYW5kIHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb248L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNvbWUgaGVscGVyczwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IENodHlwZV9Ub19BdHRyQ2hhciA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICA8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMjBfMTAiPlVuY2hlY2tlZF9Db252ZXJzaW9uPC9BPiAoPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzE3XzkiPlNvdXJjZTwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMThfOSI+VGFyZ2V0PC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxiPmZ1bmN0aW9uPC9iPiBBdHRyQ2hhcl9Ub19DaHR5cGUgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzIwXzEwIj5VbmNoZWNrZWRfQ29udmVyc2lvbjwvQT4gKDxBIEhSRUY9InVuY2hjb252X19hZHMuaHRtI3JlZl8xN185Ij5Tb3VyY2U8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMThfOSI+VGFyZ2V0PC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBBdHRyQ2hhcl9Ub19BdHRyVHlwZSA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICA8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMjBfMTAiPlVuY2hlY2tlZF9Db252ZXJzaW9uPC9BPiAoPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzE3XzkiPlNvdXJjZTwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InVuY2hjb252X19hZHMuaHRtI3JlZl8xOF85Ij5UYXJnZXQ8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gQXR0clR5cGVfVG9fQXR0ckNoYXIgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgPEEgSFJFRj0idW5jaGNvbnZfX2Fkcy5odG0jcmVmXzIwXzEwIj5VbmNoZWNrZWRfQ29udmVyc2lvbjwvQT4gKDxBIEhSRUY9InVuY2hjb252X19hZHMuaHRtI3JlZl8xN185Ij5Tb3VyY2U8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ1bmNoY29udl9fYWRzLmh0bSNyZWZfMThfOSI+VGFyZ2V0PC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzQ0XzE0Ij5GaWxsX1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzQ0XzI3Ij5DcDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgY2hhcnNfcHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExN18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2FkYi5odG0jcmVmXzQ1XzI3Ij5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRmlsbCB0aGUgU3RyIHBhcmFtZXRlciB3aXRoIHRoZSBzdHJpbmcgZGVub3RlZCBieSB0aGUgY2hhcnNfcHRyPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEMtU3R5bGUgc3RyaW5nLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl83M18xMyI+RmlsbF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZGIuaHRtI3JlZl83M18yNiI+Q3A8L0E+PC9GT05UPiA6IGNoYXJzX3B0cikgPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYnV0IGFzIGZ1bmN0aW9uLjwvRU0+PC9GT05UPgorCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmI1MGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0KQEAgLTAsMCArMSw3MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYSAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjkgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo1MDoyNSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQxXzUzIj5BbHBoYTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQ5XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80OV8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl81MF8zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNDRfOSI+QWxwaGFfRmllbGQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzciPkNfQWxwaGFfRmllbGRfVHlwZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNDlfNyI+Q19BbHBoYV9GaWVsZF9UeXBlPC9BPiwgIlRZUEVfQUxQSEEiKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMTYiPlNldF9GbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl81Ml8xNiI+RjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQ5XzMwIj5GbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl81Ml8xNiI+Q2Z0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNDlfNyI+Q19BbHBoYV9GaWVsZF9UeXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTJfMTYiPkFyZzE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl81N183Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzUyXzE2Ij5TZXRfRmxkX1R5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl81NF8zMCI+QXJnMTwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNTBfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNDZfOSI+TWluaW11bV9GaWVsZF9XaWR0aDwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZGIuaHRtI3JlZl81N183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNTdfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCI+V3JhcF9CdWlsdGluPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNDlfMzAiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzUwXzMwIj5UeXA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNDlfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQxXzUzIj5BbHBoYTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTFhMjRjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0KQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5BbHBoYSAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDFfNTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzQ0XzU4Ij5BbHBoYTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRzLmh0bSNyZWZfNDFfNTMiPkFscGhhPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfOSI+QWxwaGFfRmllbGQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPgorICAgICA8Yj53aXRoPC9iPiA8Yj5yZWNvcmQ8L2I+CisgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfOSI+TWluaW11bV9GaWVsZF9XaWR0aDwvQT48L0ZPTlQ+IDogTmF0dXJhbCA6PSAwOworICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYV9fYWRiLmh0bSNyZWZfNDZfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzQ2XzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2FkYi5odG0jcmVmXzQ3XzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhX19hZHMuaHRtI3JlZl80NF85Ij5BbHBoYV9GaWVsZDwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFfX2Fkcy5odG0jcmVmXzQxXzUzIj5BbHBoYTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOWZmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0KQEAgLTAsMCArMSw3MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuOSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA4LzA3LzI2IDE4OjUwOjE1IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF81OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzQxXzUzIj5BbHBoYU51bWVyaWM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNTBfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl81MF8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNTFfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl80NV85Ij5BbHBoYU51bWVyaWNfRmllbGQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzciPkNfQWxwaGFOdW1lcmljX0ZpZWxkX1R5cGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl80OV83Ij5DX0FscGhhTnVtZXJpY19GaWVsZF9UeXBlPC9BPiwgIlRZUEVfQUxOVU0iKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMTYiPlNldF9GbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTJfMTYiPkY8L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNTBfMzAiPkZsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl81Ml8xNiI+Q2Z0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzQ5XzciPkNfQWxwaGFOdW1lcmljX0ZpZWxkX1R5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTJfMTYiPkFyZzE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTdfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRiLmh0bSNyZWZfNTJfMTYiPlNldF9GbGRfVHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl81NF8zMCI+QXJnMTwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl80N185Ij5NaW5pbXVtX0ZpZWxkX1dpZHRoPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl81N183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzU3XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMTQiPldyYXBfQnVpbHRpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl81MF8zMCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzMwIj5UeXA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzUwXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWFscGhhbnVtZXJpY19fYWRzLmh0bSNyZWZfNDFfNTMiPkFscGhhTnVtZXJpYzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NmVlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0KQEAgLTAsMCArMSw2MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWMuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuQWxwaGFOdW1lcmljICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MV81MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzQ0XzU4Ij5BbHBoYU51bWVyaWM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlCisgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl80MV81MyI+QWxwaGFOdW1lcmljPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfOSI+QWxwaGFOdW1lcmljX0ZpZWxkPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4KKyAgICAgPGI+d2l0aDwvYj4gPGI+cmVjb3JkPC9iPgorICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzkiPk1pbmltdW1fRmllbGRfV2lkdGg8L0E+PC9GT05UPiA6IE5hdHVyYWwgOj0gMDsKKyAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl80Nl8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2FkYi5odG0jcmVmXzQ2XzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZGIuaHRtI3JlZl80N18zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1hbHBoYW51bWVyaWNfX2Fkcy5odG0jcmVmXzQ1XzkiPkFscGhhTnVtZXJpY19GaWVsZDwvQT4pOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9GaWVsZF9UeXBlKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtYWxwaGFudW1lcmljX19hZHMuaHRtI3JlZl80MV81MyI+QWxwaGFOdW1lcmljPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3YzM5MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bQpAQCAtMCwwICsxLDg3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGEuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uLkFkYSAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsgPGI+dXNlPC9iPiBBZGEuQ2hhcmFjdGVycy5IYW5kbGluZzsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80NF82NSI+QWRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDhfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDhfMjEiPlNldDwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81MF85Ij5UeXBlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTBfNDYiPk1peGVkX0Nhc2U8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDlfMjEiPkNhc2VfU2Vuc2l0aXZlPC9BPjwvRk9OVD4gOiBCb29sZWFuICA6PSBGYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzUwXzIxIj5NdXN0X0JlX1VuaXF1ZTwvQT48L0ZPTlQ+IDogQm9vbGVhbiAgOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyI+STwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTVfOSI+RW51bWVyYXRpb25fSW5mbzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPidMYXN0KSAtIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPidGaXJzdCkgKyAxKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyI+SjwvQT48L0ZPTlQ+IDogUG9zaXRpdmUgOj0gMTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU4XzEwIj5DYXNlX1NlbnNpdGl2ZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ5XzIxIj5DYXNlX1NlbnNpdGl2ZTwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTFfNyI+STwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTlfMTAiPk1hdGNoX011c3RfQmVfVW5pcXVlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNTBfMjEiPk11c3RfQmVfVW5pcXVlPC9BPjsKKworICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzExIj5FPC9BPjwvRk9OVD4gPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPic8Yj5SYW5nZTwvYj4gPGI+bG9vcDwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81MV83Ij5JPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81N18xMCI+TmFtZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTJfNyI+SjwvQT4pIDo9IDxiPm5ldzwvYj4gU3RyaW5nJyg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDJfOSI+VDwvQT4nSW1hZ2UgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81N18xMSI+RTwvQT4pKTsKKyAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIEltYWdlIGF0dHJpYnV0ZSBkZWZhdWx0cyB0byB1cHBlciBjYXNlLCBzbyB3ZSBoYXZlIHRvIGhhbmRsZTwvRU0+PC9GT05UPgorICAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBvbmx5IHRoZSBvdGhlciBvbmVzLi4uPC9FTT48L0ZPTlQ+CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ4XzIxIj5TZXQ8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzUwXzM0Ij5VcHBlcl9DYXNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU3XzEwIj5OYW1lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81Ml83Ij5KPC9BPikuPGI+YWxsPC9iPiA6PSBUb19Mb3dlciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU3XzEwIj5OYW1lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81Ml83Ij5KPC9BPikuPGI+YWxsPC9iPik7CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ4XzIxIj5TZXQ8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTBfNDYiPk1peGVkX0Nhc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTFfNyI+STwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTdfMTAiPk5hbWVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUyXzciPko8L0E+KSg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTFfNyI+STwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTdfMTAiPk5hbWVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUyXzciPko8L0E+KS48Yj5hbGw8L2I+J0ZpcnN0KSA6PQorICAgICAgICAgICAgICAgICBUb19VcHBlciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU3XzEwIj5OYW1lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81Ml83Ij5KPC9BPikoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU3XzEwIj5OYW1lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81Ml83Ij5KPC9BPikuPGI+YWxsPC9iPidGaXJzdCkpOworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl81Ml83Ij5KPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNTJfNyI+SjwvQT4gKyAxOworICAgICAgPGI+ZW5kPC9iPiA8Yj5sb29wPC9iPjsKKworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8xMyI+Q3JlYXRlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzUxXzciPkk8L0E+LCBUcnVlKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ4XzEzIj5DcmVhdGU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzUzXzEzIj5WYWx1ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNTNfMjAiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzVfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl81NF8yMCI+QnVmPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQyXzkiPlQ8L0E+J1ZhbHVlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjhfMTMiPkdldF9CdWZmZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNTNfMjAiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl81NF8yMCI+QnVmPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNTNfMTMiPlZhbHVlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzQzXzUzIj5FbnVtZXJhdGlvbjwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2Fkcy5odG0jcmVmXzQ0XzY1Ij5BZGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDJiNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuRW51bWVyYXRpb24uQWRhICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDRfNjUiPlQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gKCZsdDsmZ3Q7KTsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl80NF83MCI+QWRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZQorICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80NF82NSI+QWRhPC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNDZfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNDZfMjEiPlNldDwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81MF85Ij5UeXBlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTBfNDYiPk1peGVkX0Nhc2U8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNDdfMjEiPkNhc2VfU2Vuc2l0aXZlPC9BPjwvRk9OVD4gOiBCb29sZWFuICA6PSBGYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzQ4XzIxIj5NdXN0X0JlX1VuaXF1ZTwvQT48L0ZPTlQ+IDogQm9vbGVhbiAgOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbi1hZGFfX2FkYi5odG0jcmVmXzc0XzEzIj5WYWx1ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRiLmh0bSNyZWZfNzRfMjAiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZGIuaHRtI3JlZl83NV8yMCI+QnVmPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24tYWRhX19hZHMuaHRtI3JlZl80Ml85Ij5UPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVHJhbnNsYXRlIHRoZSBjb250ZW50IG9mIHRoZSBmaWVsZHMgYnVmZmVyIC0gaW5kaWNhdGVkIGJ5IHRoZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBidWZmZXIgbnVtYmVyIC0gaW50byBhbiBlbnVtZXJhdGlvbiB2YWx1ZS4gSWYgdGhlIGJ1ZmZlciBpcyBlbXB0eTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBvciB0aGUgY29udGVudCBpcyBpbnZhbGlkLCBhIENvbnN0cmFpbnRfRXJyb3IgaXMgcmFpc2VzLjwvRU0+PC9GT05UPgorCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNDNfNTMiPkVudW1lcmF0aW9uPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLWFkYV9fYWRzLmh0bSNyZWZfNDRfNjUiPkFkYTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhhYTNhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0KQEAgLTAsMCArMSwxMjUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb24uYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5FbnVtZXJhdGlvbiAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS43IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbjsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzQzXzUzIj5FbnVtZXJhdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjRfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8yMSI+SW5mbzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81NV85Ij5FbnVtZXJhdGlvbl9JbmZvPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjVfMjEiPkF1dG9fUmVsZWFzZV9OYW1lczwvQT48L0ZPTlQ+IDogQm9vbGVhbiA6PSBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82Ml85Ij5FbnVtZXJhdGlvbl9GaWVsZDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiBSZWxlYXNlX1N0cmluZyA8Yj5pczwvYj4KKyAgICAgICAgPGI+bmV3PC9iPiBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbiAoU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzQ3XzkiPlN0cmluZ19BY2Nlc3M8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyI+RTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83Ij5MPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gc2l6ZV90IDo9IDEgKyBzaXplX3QgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY0XzIxIj5JbmZvPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81NV8yNyI+QzwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5TPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80N185Ij5TdHJpbmdfQWNjZXNzPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTVfNyI+RTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfOTNfMTAiPkNhc2VfU2Vuc2l0aXZlPC9BPiAgICAgICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8yMSI+SW5mbzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNThfMTAiPkNhc2VfU2Vuc2l0aXZlPC9BPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzU1XzciPkU8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzk0XzEwIj5NYXRjaF9NdXN0X0JlX1VuaXF1ZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjRfMjEiPkluZm88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU5XzEwIj5NYXRjaF9NdXN0X0JlX1VuaXF1ZTwvQT47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81NV83Ij5FPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl85NV8xMCI+QXJyPC9BPiA6PSA8Yj5uZXc8L2I+IGNoYXJzX3B0cl9hcnJheSAoc2l6ZV90ICgxKSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81Nl83Ij5MPC9BPik7CisgICAgICA8Yj5mb3I8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMTEiPkk8L0E+PC9GT05UPiA8Yj5pbjwvYj4gMSAuLiBQb3NpdGl2ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNTZfNyI+TDwvQT4gLSAxKSA8Yj5sb29wPC9iPgorICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY0XzIxIj5JbmZvPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81N18xMCI+TmFtZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl82Ml8xMSI+STwvQT4pID0gPGI+bnVsbDwvYj4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81NV83Ij5FPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81NV83Ij5BcnI8L0E+IChzaXplX3QgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzYyXzExIj5JPC9BPikpIDo9IE5ld19TdHJpbmcgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY0XzIxIj5JbmZvPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81N18xMCI+TmFtZXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl82Ml8xMSI+STwvQT4pLjxiPmFsbDwvYj4pOworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY1XzIxIj5BdXRvX1JlbGVhc2VfTmFtZXM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81N183Ij5TPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8yMSI+SW5mbzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNTdfMTAiPk5hbWVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNjJfMTEiPkk8L0E+KTsKKyAgICAgICAgICAgIFJlbGVhc2VfU3RyaW5nICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81N183Ij5TPC9BPik7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81NV83Ij5FPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81NV83Ij5BcnI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl81Nl83Ij5MPC9BPikgOj0gTnVsbF9QdHI7CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzU1XzciPkU8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82NF8xMyI+Q3JlYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl83N18xNCI+UmVsZWFzZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl83N18yMyI+RW51bTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzciPkk8L0E+PC9GT05UPiA6IHNpemVfdCA6PSAwOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV83Ij5QPC9BPjwvRk9OVD4gOiBjaGFyc19wdHI7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmxvb3A8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83OV83Ij5QPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl83N18yMyI+RW51bTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfOTVfMTAiPkFycjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzc4XzciPkk8L0E+KTsKKyAgICAgICAgIDxiPmV4aXQ8L2I+IDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzc5XzciPlA8L0E+ID0gTnVsbF9QdHI7CisgICAgICAgICBGcmVlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl83OV83Ij5QPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl83N18yMyI+RW51bTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfOTVfMTAiPkFycjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzc4XzciPkk8L0E+KSA6PSBOdWxsX1B0cjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzc4XzciPkk8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzc4XzciPkk8L0E+ICsgMTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl83N18yMyI+RW51bTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfOTVfMTAiPkFycjwvQT4gOj0gPGI+bnVsbDwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzc3XzE0Ij5SZWxlYXNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84NF8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODRfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODVfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF83Ij5DX0VudW1fVHlwZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTRfNyI+Q19FbnVtX1R5cGU8L0E+LCAiVFlQRV9FTlVNIik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3XzE2Ij5TZXRfRmxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTdfMTYiPkY8L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84NF8zMCI+RmxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTdfMTYiPkNmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk0XzciPkNfRW51bV9UeXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTdfMTYiPkFyZzE8L0E+PC9GT05UPiA6IGNoYXJzX3B0cl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzk3XzE2Ij5BcmcyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTdfMTYiPkFyZzM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNF83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg1XzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzk1XzEwIj5BcnI8L0E+ID0gPGI+bnVsbDwvYj4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl8xMDRfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl85N18xNiI+U2V0X0ZsZF9UeXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTlfMzAiPkFyZzE8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg1XzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzk1XzEwIj5BcnI8L0E+LjxiPmFsbDwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl8xMDBfMzAiPkFyZzI8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84NV8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl85M18xMCI+Q2FzZV9TZW5zaXRpdmU8L0E+KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl8xMDFfMzAiPkFyZzM8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4gKEJvb2xlYW4nUG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODVfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfOTRfMTAiPk1hdGNoX011c3RfQmVfVW5pcXVlPC9BPikpKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl8xMDRfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzEwNF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUxXzE0Ij5XcmFwX0J1aWx0aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84NF8zMCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfODVfMzAiPlR5cDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0OV8xMyI+Q19DaG9pY2VfUm91dGVyPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzg0XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyMmJmZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtCkBAIC0wLDAgKzEsMTA0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLkVudW1lcmF0aW9uICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80M181MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNDZfNTgiPkVudW1lcmF0aW9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZQorICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80M181MyI+RW51bWVyYXRpb248L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N185Ij5TdHJpbmdfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gU3RyaW5nOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFR5cGVfU2V0IGlzIHVzZWQgYnkgdGhlIGNoaWxkIHBhY2thZ2UgQWRhPC9FTT48L0ZPTlQ+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzkiPlR5cGVfU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzIyIj5Mb3dlcl9DYXNlPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMzQiPlVwcGVyX0Nhc2U8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF80NiI+TWl4ZWRfQ2FzZTwvQT48L0ZPTlQ+KTsKKworICAgPGI+dHlwZTwvYj4gRW51bV9BcnJheSA8Yj5pczwvYj4gPGI+YXJyYXk8L2I+IChQb3NpdGl2ZSA8Yj5yYW5nZTwvYj4gJmx0OyZndDspCisgICAgIDxiPm9mPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl80N185Ij5TdHJpbmdfQWNjZXNzPC9BPjsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV85Ij5FbnVtZXJhdGlvbl9JbmZvPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU1XzkiPkM8L0E+PC9GT05UPiA6IFBvc2l0aXZlKSA8Yj5pczwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfMTAiPk5hbWVzPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiBFbnVtX0FycmF5ICgxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU1XzI3Ij5DPC9BPik7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzEwIj5DYXNlX1NlbnNpdGl2ZTwvQT48L0ZPTlQ+ICAgICAgIDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTAiPk1hdGNoX011c3RfQmVfVW5pcXVlPC9BPjwvRk9OVD4gOiBCb29sZWFuIDo9IEZhbHNlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4gPGI+d2l0aDwvYj4gPGI+cHJpdmF0ZTwvYj47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl80OF8xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzQ4XzIxIj5JbmZvPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl81NV85Ij5FbnVtZXJhdGlvbl9JbmZvPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfNDlfMjEiPkF1dG9fUmVsZWFzZV9OYW1lczwvQT48L0ZPTlQ+IDogQm9vbGVhbiA6PSBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82Ml85Ij5FbnVtZXJhdGlvbl9GaWVsZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE1ha2UgYW4gZmllbGR0eXBlIGZyb20gdGhlIGluZm8uIEVudW1lcmF0aW9ucyBhcmUgc3BlY2lhbCwgYmVjYXVzZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGV5IG5vcm1hbGx5IGRvbid0IGNvcHkgdGhlIGVudW0gdmFsdWVzIGludG8gYSBwcml2YXRlIHN0b3JlLCBzbzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB3ZSBoYXZlIHRvIGNhcmUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgaW5mbyB3ZSBwcm92aWRlLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgQXV0b19SZWxlYXNlX05hbWVzIGZsYWcgbWF5IGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSByZWxlYXNlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgc3RyaW5ncyBpbiB0aGUgTmFtZXMgYXJyYXkgb2YgdGhlIEVudW1lcmF0aW9uX0luZm8uPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBNYWtlX0VudW1lcmF0aW9uX1R5cGUgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfMzYiPkluZm88L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzU1XzkiPkVudW1lcmF0aW9uX0luZm88L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0XzM2Ij5BdXRvX1JlbGVhc2VfTmFtZXM8L0E+PC9GT05UPiA6IEJvb2xlYW4gOj0gRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRzLmh0bSNyZWZfNjJfOSI+RW51bWVyYXRpb25fRmllbGQ8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzY0XzEzIj5DcmVhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzc2XzE0Ij5SZWxlYXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2FkYi5odG0jcmVmXzc2XzIzIj5FbnVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl82Ml85Ij5FbnVtZXJhdGlvbl9GaWVsZDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCdXQgd2UgbWF5IHdhbnQgdG8gcmVsZWFzZSB0aGUgZmllbGQgdG8gcmVsZWFzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBieSBpdCBpbnRlcm5hbGx5LiBBZnRlciB0aGF0IHRoZSBFbnVtZXJhdGlvbiBmaWVsZCBpcyBubyBsb25nZXIgdXNhYmxlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBuZXh0IHR5cGUgZGVmaW50aW9ucyBhcmUgYWxsIG5jdXJzZXMgZXh0ZW5zaW9ucy4gVGhleSBhcmUgdHlwaWNhbGx5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG5vdCBhdmFpbGFibGUgaW4gb3RoZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9ucy48L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZGIuaHRtI3JlZl85MV8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTFfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1lbnVtZXJhdGlvbl9fYWRiLmh0bSNyZWZfOTJfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCis8Yj5wcml2YXRlPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OV85Ij5DUEFfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5ncy5jaGFyc19wdHJfYXJyYXk7CisKKyAgIDxiPnR5cGU8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzYyXzkiPkVudW1lcmF0aW9uX0ZpZWxkPC9BPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPiA8Yj53aXRoPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85M18xMCI+Q2FzZV9TZW5zaXRpdmU8L0E+PC9GT05UPiAgICAgICA6IEJvb2xlYW4gOj0gRmFsc2U7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0XzEwIj5NYXRjaF9NdXN0X0JlX1VuaXF1ZTwvQT48L0ZPTlQ+IDogQm9vbGVhbiA6PSBGYWxzZTsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfMTAiPkFycjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWVudW1lcmF0aW9uX19hZHMuaHRtI3JlZl84OV85Ij5DUEFfQWNjZXNzPC9BPiA6PSA8Yj5udWxsPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtZW51bWVyYXRpb25fX2Fkcy5odG0jcmVmXzQzXzUzIj5FbnVtZXJhdGlvbjwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmFlMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0KQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjkgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo1MDowNiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQxXzUzIj5JbnRGaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUxXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl81MV8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNDRfOSI+SW50ZWdlcl9GaWVsZDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfNyI+Q19JbnRlZ2VyX0ZpZWxkX1R5cGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzQ5XzciPkNfSW50ZWdlcl9GaWVsZF9UeXBlPC9BPiwgIlRZUEVfSU5URUdFUiIpOworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8xNiI+U2V0X0ZsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzUyXzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNTFfMzAiPkZsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzUyXzE2Ij5DZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl80OV83Ij5DX0ludGVnZXJfRmllbGRfVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzUyXzE2Ij5BcmcxPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81Ml8xNiI+QXJnMjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU3XzEyIj5DX0xvbmdfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTJfMTYiPkFyZzM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81N18xMiI+Q19Mb25nX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81OV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzUyXzE2Ij5TZXRfRmxkX1R5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81NF8zMCI+QXJnMTwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNDZfMTAiPlByZWNpc2lvbjwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTVfMzAiPkFyZzI8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81N18xMiI+Q19Mb25nX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQ3XzEwIj5Mb3dlcl9MaW1pdDwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTZfMzAiPkFyZzM8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81N18xMiI+Q19Mb25nX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQ4XzEwIj5VcHBlcl9MaW1pdDwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZGIuaHRtI3JlZl81OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNTlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCI+V3JhcF9CdWlsdGluPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNTFfMzAiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNTFfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0jcmVmXzQxXzUzIj5JbnRGaWVsZDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGI4YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2Fkcy5odG0KQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZC5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuSW50RmllbGQgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDFfNTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzQ0XzU4Ij5JbnRGaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNDFfNTMiPkludEZpZWxkPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfOSI+SW50ZWdlcl9GaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+IDxiPndpdGg8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEwIj5QcmVjaXNpb248L0E+PC9GT05UPiAgIDogTmF0dXJhbDsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTAiPkxvd2VyX0xpbWl0PC9BPjwvRk9OVD4gOiBJbnRlZ2VyOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMCI+VXBwZXJfTGltaXQ8L0E+PC9GT05UPiA6IEludGVnZXI7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRiLmh0bSNyZWZfNDZfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzQ2XzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaW50ZmllbGRfX2FkYi5odG0jcmVmXzQ3XzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWludGZpZWxkX19hZHMuaHRtI3JlZl80NF85Ij5JbnRlZ2VyX0ZpZWxkPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pbnRmaWVsZF9fYWRzLmh0bSNyZWZfNDFfNTMiPkludEZpZWxkPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4NDY3NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bQpAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS45IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6NDcgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzU4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSNyZWZfNDFfNTMiPklQVjRfQWRkcmVzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80N18xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQ3XzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80OF8zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQ1XzkiPkludGVybmV0X1Y0X0FkZHJlc3NfRmllbGQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzciPkNfSVBWNF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNDlfNyI+Q19JUFY0X0ZpZWxkX1R5cGU8L0E+LCAiVFlQRV9JUFY0Iik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzE2Ij5TZXRfRmxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzUyXzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQ3XzMwIj5GbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNTJfMTYiPkNmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtI3JlZl80OV83Ij5DX0lQVjRfRmllbGRfVHlwZTwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmxkX1R5cGUsICJzZXRfZmllbGRfdHlwZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNTdfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNTJfMTYiPlNldF9GbGRfVHlwZTwvQT47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2FkYi5odG0jcmVmXzU3XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNTdfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCI+V3JhcF9CdWlsdGluPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQ3XzMwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSNyZWZfNDhfMzAiPlR5cDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bSNyZWZfNDdfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80MV81MyI+SVBWNF9BZGRyZXNzPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiYWUxOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRzLmh0bQpAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzcy5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3MuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5JUFY0X0FkZHJlc3MgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxXzUzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNDRfNTgiPklQVjRfQWRkcmVzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUKKyAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQxXzUzIj5JUFY0X0FkZHJlc3M8L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV85Ij5JbnRlcm5ldF9WNF9BZGRyZXNzX0ZpZWxkPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4gPGI+d2l0aDwvYj4gPGI+bnVsbDwvYj4gPGI+cmVjb3JkPC9iPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNDZfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZGIuaHRtI3JlZl80Nl8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLWlwdjRfYWRkcmVzc19fYWRiLmh0bSNyZWZfNDdfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtaXB2NF9hZGRyZXNzX19hZHMuaHRtI3JlZl80NV85Ij5JbnRlcm5ldF9WNF9BZGRyZXNzX0ZpZWxkPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1pcHY0X2FkZHJlc3NfX2Fkcy5odG0jcmVmXzQxXzUzIj5JUFY0X0FkZHJlc3M8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNTYzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5OdW1lcmljICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo0OTo1NyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV81OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl80MV81MyI+TnVtZXJpYzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNTFfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNTFfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl80NF85Ij5OdW1lcmljX0ZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8xMiI+RG91YmxlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuZG91YmxlOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciPkNfTnVtZXJpY19GaWVsZF9UeXBlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzUyXzciPkNfTnVtZXJpY19GaWVsZF9UeXBlPC9BPiwgIlRZUEVfTlVNRVJJQyIpOworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xNiI+U2V0X0ZsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNTVfMTYiPkY8L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzMwIj5GbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzU1XzE2Ij5DZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzUyXzciPkNfTnVtZXJpY19GaWVsZF9UeXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81NV8xNiI+QXJnMTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81NV8xNiI+QXJnMjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81MF8xMiI+RG91YmxlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81NV8xNiI+QXJnMzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81MF8xMiI+RG91YmxlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GbGRfVHlwZSwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNjJfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzU1XzE2Ij5TZXRfRmxkX1R5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzU3XzMwIj5BcmcxPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUyXzMwIj5UeXA8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNDZfMTAiPlByZWNpc2lvbjwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81OF8zMCI+QXJnMjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81MF8xMiI+RG91YmxlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzQ3XzEwIj5Mb3dlcl9MaW1pdDwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81OV8zMCI+QXJnMzwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl81MF8xMiI+RG91YmxlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzQ4XzEwIj5VcHBlcl9MaW1pdDwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzYyXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2FkYi5odG0jcmVmXzYyXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTFfMTQiPldyYXBfQnVpbHRpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNTFfMzAiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzUxXzE0Ij5TZXRfRmllbGRfVHlwZTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWNfX2Fkcy5odG0jcmVmXzQxXzUzIj5OdW1lcmljPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjYxMDczCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bQpAQCAtMCwwICsxLDYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLW51bWVyaWMuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpYy5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLk51bWVyaWMgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDFfNTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNDVfNTgiPk51bWVyaWM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRzLmh0bSNyZWZfNDFfNTMiPk51bWVyaWM8L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF85Ij5OdW1lcmljX0ZpZWxkPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4gPGI+d2l0aDwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTAiPlByZWNpc2lvbjwvQT48L0ZPTlQ+ICAgOiBOYXR1cmFsOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18xMCI+TG93ZXJfTGltaXQ8L0E+PC9GT05UPiA6IEZsb2F0OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMCI+VXBwZXJfTGltaXQ8L0E+PC9GT05UPiA6IEZsb2F0OworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNDdfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtbnVtZXJpY19fYWRiLmh0bSNyZWZfNDdfMzAiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZGIuaHRtI3JlZl80OF8zMCI+VHlwPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl80NF85Ij5OdW1lcmljX0ZpZWxkPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoU2V0X0ZpZWxkX1R5cGUpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1udW1lcmljX19hZHMuaHRtI3JlZl80MV81MyI+TnVtZXJpYzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjY5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0KQEAgLTAsMCArMSw3NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuUmVnRXhwICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuOCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF81OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzQxXzUzIj5SZWdFeHA8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNTFfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl81MV8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl80Nl85Ij5SZWd1bGFyX0V4cHJlc3Npb25fRmllbGQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzEyIj5DaGFyX1B0cjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuY2hhcjsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83Ij5DX1JlZ2V4cF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNTFfNyI+Q19SZWdleHBfRmllbGRfVHlwZTwvQT4sICJUWVBFX1JFR0VYUCIpOworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8xNiI+U2V0X0Z0eXA8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzU0XzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzUxXzMwIj5GbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81NF8xNiI+Q2Z0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzUxXzciPkNfUmVnZXhwX0ZpZWxkX1R5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81NF8xNiI+QXJnMTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzQ5XzEyIj5DaGFyX1B0cjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRnR5cCwgInNldF9maWVsZF90eXBlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfNyI+VHh0PC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNDhfMTAiPlJlZ3VsYXJfRXhwcmVzc2lvbjwvQT4uPGI+YWxsPC9iPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF83Ij5MZW48L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl81Ml8zMCI+VHlwPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNDhfMTAiPlJlZ3VsYXJfRXhwcmVzc2lvbjwvQT4uPGI+YWxsPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzU5XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl82MF83Ij5MZW48L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl82MV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81NF8xNiI+U2V0X0Z0eXA8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNTZfMjYiPkFyZzE8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl81OV83Ij5UeHQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNTlfNyI+VHh0PC9BPidGaXJzdCknPGI+QWNjZXNzPC9iPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2FkYi5odG0jcmVmXzYxXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNjFfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCI+V3JhcF9CdWlsdGluPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzUxXzMwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNTJfMzAiPlR5cDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNTFfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl80MV81MyI+UmVnRXhwPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0Y2I4YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bQpAQCAtMCwwICsxLDYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cC5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHAuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuUmVnRXhwICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxXzUzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNDRfNTgiPlJlZ0V4cDwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy1yZWdleHBfX2Fkcy5odG0jcmVmXzQxXzUzIj5SZWdFeHA8L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF85Ij5TdHJpbmdfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gU3RyaW5nOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzkiPlJlZ3VsYXJfRXhwcmVzc2lvbl9GaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+IDxiPndpdGg8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzEwIj5SZWd1bGFyX0V4cHJlc3Npb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl80NF85Ij5TdHJpbmdfQWNjZXNzPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNDZfMTQiPlNldF9GaWVsZF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZGIuaHRtI3JlZl80Nl8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRiLmh0bSNyZWZfNDdfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtcmVnZXhwX19hZHMuaHRtI3JlZl80Nl85Ij5SZWd1bGFyX0V4cHJlc3Npb25fRmllbGQ8L0E+KTsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTZXRfRmllbGRfVHlwZSk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXJlZ2V4cF9fYWRzLmh0bSNyZWZfNDFfNTMiPlJlZ0V4cDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzBkZTNjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0KQEAgLTAsMCArMSwxMTYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2UuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyLkNob2ljZSAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xNSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA4LzA3LzI2IDE4OjQ4OjU4IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb247Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80NF81MyI+VXNlcjwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV82MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNDRfNTgiPkNob2ljZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+ZnVuY3Rpb248L2I+IFRvX0FyZ3VtZW50X0FjY2VzcyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24KKyAgICAgKFN5c3RlbS5BZGRyZXNzLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPbik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84MF8xMyI+R2VuZXJpY19OZXh0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzgwXzI3Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODFfMjciPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNDhfMTIiPkNfSW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogQm9vbGVhbjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+VWRmPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNTdfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzPC9BPiA6PQorICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl81N185Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3M8L0E+CisgICAgICAgIChUb19Bcmd1bWVudF9BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzgxXzI3Ij5Vc3I8L0E+KS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTJfNyI+VHlwPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzU1XzciPlJlc3VsdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNjBfMTMiPk5leHQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84MF8yNyI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNTZfNyI+VWRmPC9BPi48Yj5hbGw8L2I+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNDhfMTIiPkNfSW50PC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzU1XzciPlJlc3VsdDwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODBfMTMiPkdlbmVyaWNfTmV4dDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl84N18xMyI+R2VuZXJpY19QcmV2PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg3XzI3Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODhfMjciPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNDhfMTIiPkNfSW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogQm9vbGVhbjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjhfNyI+VWRmPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNTdfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2VfQWNjZXNzPC9BPiA6PQorICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl81N185Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZV9XaXRoX0Nob2ljZV9BY2Nlc3M8L0E+CisgICAgICAgIChUb19Bcmd1bWVudF9BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg4XzI3Ij5Vc3I8L0E+KS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTJfNyI+VHlwPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzY3XzciPlJlc3VsdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNjdfMTMiPlByZXZpb3VzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfODdfMjciPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzY4XzciPlVkZjwvQT4uPGI+YWxsPC9iPik7CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ4XzEyIj5DX0ludDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl82N183Ij5SZXN1bHQ8L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg3XzEzIj5HZW5lcmljX1ByZXY8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl83OF8xMyI+Q19HZW5lcmljX0Nob2ljZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfNyI+VDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0Ml80Ij5NX0dlbmVyaWNfQ2hvaWNlPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl84MV83Ij5UPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjJfMTMiPk5ld19GaWVsZHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzgxXzEzIj5HZW5lcmljX0ZpZWxkX0NoZWNrPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzg4XzEzIj5HZW5lcmljX0NoYXJfQ2hlY2s8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgxXzciPlQ8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgwXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjI3XzEzIj5TZXRfRmllbGR0eXBlX0FyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgxXzciPlQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMTMiPk1ha2VfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjdfMTMiPkNvcHlfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMTQiPkZyZWVfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl84MF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfODBfNyI+UmVzPC9BPik7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKworICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfODBfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMzRfMTMiPlNldF9GaWVsZHR5cGVfQ2hvaWNlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfODFfNyI+VDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzgwXzEzIj5HZW5lcmljX05leHQ8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg3XzEzIj5HZW5lcmljX1ByZXY8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzgwXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl84MF83Ij5SZXM8L0E+KTsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDJfNCI+TV9HZW5lcmljX0Nob2ljZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfODFfNyI+VDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDJfNCI+TV9HZW5lcmljX0Nob2ljZTwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDJfNCI+TV9HZW5lcmljX0Nob2ljZTwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzc4XzEzIj5DX0dlbmVyaWNfQ2hvaWNlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDRfNTMiPlVzZXI8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ0XzU4Ij5DaG9pY2U8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzOWFiNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtCkBAIC0wLDAgKzEsMTAwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZpZWxkX1R5cGVzLlVzZXIuQ2hvaWNlICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo0OToyMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80NF81MyI+VXNlcjwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF81OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNDVfNjMiPkNob2ljZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUKKyAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80NF81MyI+VXNlcjwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNDRfNTgiPkNob2ljZTwvQT4pOworCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzEyIj5DX0ludDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2U8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+IDxiPm5ldzwvYj4KKyAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80OF85Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZTwvQT4gPGI+d2l0aDwvYj4gPGI+bnVsbDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgbWVjaGFuaXNtIHdlIHVzZSB0byBjcmVhdGUgZmllbGQgdHlwZXMgaW48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQWRhOTUgdGhhdCBhbGxvdyB0aGUgcHJldi9uZXh0IG1lY2hhbmlzbS4gWW91IHNob3VsZCB5b3VyIG93biB0eXBlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGRlcml2ZSBmcm9tIHRoaXMgb25lIGFuZCBpbXBsZW1lbnQgdGhlIEZpZWxkX0NoZWNrLCBDaGFyYWN0ZXJfQ2hlY2s8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTmV4dCBhbmQgUHJldmlvdXMgZnVuY3Rpb25zIGZvciB5b3VyIG93biB0eXBlLjwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4KKyAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNTBfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2U8L0E+J0NsYXNzOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF8xMyI+TmV4dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzYwXzEzIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNjBfMTMiPlR5cDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRzLmh0bSNyZWZfNTBfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfV2l0aF9DaG9pY2U8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgICAgIDxiPmlzPC9iPiA8Yj5hYnN0cmFjdDwvYj47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIElmIFRydWUgaXMgcmV0dXJuZWQsIHRoZSBmdW5jdGlvbiBzdWNjZXNzZnVsbHkgZ2VuZXJhdGVkIGEgbmV4dDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB2YWx1ZSBpbnRvIHRoZSBmaWVsZHMgYnVmZmVyLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N18xMyI+UHJldmlvdXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZHMuaHRtI3JlZl82N18xMyI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzY3XzEzIj5UeXA8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzUwXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX1dpdGhfQ2hvaWNlPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICAgICA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJZiBUcnVlIGlzIHJldHVybmVkLCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBhIHByZXZpb3VzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHZhbHVlIGludG8gdGhlIGZpZWxkcyBidWZmZXIuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBQcml2YXRlIFBhcnQuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPnByaXZhdGU8L2I+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNzhfMTMiPkNfR2VuZXJpY19DaG9pY2U8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNTJfMTMiPkdlbmVyaWNfTmV4dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl81Ml8yNyI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzUzXzI3Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ4XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzgwXzEzIj5HZW5lcmljX05leHQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgZ2VuZXJpYyBuZXh0IENob2ljZV9GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIGNhbGwgdG8gdGhlIE5leHQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0eXBlLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyLWNob2ljZV9fYWRiLmh0bSNyZWZfNjRfMTMiPkdlbmVyaWNfUHJldjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXItY2hvaWNlX19hZGIuaHRtI3JlZl82NF8yNyI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2FkYi5odG0jcmVmXzY1XzI3Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ4XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzg3XzEzIj5HZW5lcmljX1ByZXY8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgZ2VuZXJpYyBwcmV2IENob2ljZV9GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIGNhbGwgdG8gdGhlIFByZXZpb3VzIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdHlwZS48L0VNPjwvRk9OVD4KKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDRfNTMiPlVzZXI8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci1jaG9pY2VfX2Fkcy5odG0jcmVmXzQ0XzU4Ij5DaG9pY2U8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NDMwN2MKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtCkBAIC0wLDAgKzEsMTM5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcy5Vc2VyICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE1IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6MjggQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzU4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ0XzUzIj5Vc2VyPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83MF8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83MF8zMCI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzcxXzMwIj5UeXA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ4XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNjFfMTYiPkFsbG9jYXRlX0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzYxXzMwIj5UPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ4XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlPC9BPidDbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPjsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTYiPlNldF9GbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzUzXzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83MF8zMCI+RmxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81M18xNiI+Q2Z0PC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83OV8xMyI+Q19HZW5lcmljX1R5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzUzXzE2Ij5BcmcxPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMTYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTBfMTYiPkFsbG9jYXRlX0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzUwXzMwIj5UPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ4XzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlPC9BPidDbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPgorICAgICAgPGI+aXM8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEwIj5QdHI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl82M185Ij5GaWVsZF9UeXBlX0FjY2VzczwvQT4KKyAgICAgICAgICAgICA6PSA8Yj5uZXc8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDhfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGU8L0E+J0NsYXNzJyg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzUwXzMwIj5UPC9BPik7CisgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTFfOSI+QXJndW1lbnQ8L0E+Jyg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPiA9Jmd0OyBTeXN0ZW0uTnVsbF9BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl82NF8xMCI+UHRyPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81MF8xNiI+QWxsb2NhdGVfQXJnPC9BPjsKKworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzU5XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81M18xNiI+U2V0X0ZsZF9UeXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81NV8zMCI+QXJnMTwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl81MF8xNiI+QWxsb2NhdGVfQXJnPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83MV8zMCI+VHlwPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNTlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl83MF8xNCI+U2V0X0ZpZWxkX1R5cGU8L0E+OworCisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+ZnVuY3Rpb248L2I+IFRvX0FyZ3VtZW50X0FjY2VzcyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24KKyAgICAgKFN5c3RlbS5BZGRyZXNzLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPbik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzgxXzEzIj5HZW5lcmljX0ZpZWxkX0NoZWNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODRfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODFfMzQiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84Ml8zNCI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N183Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4XzciPlVkZjwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNTNfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzPC9BPiA6PQorICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzUzXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzczwvQT4gKFRvX0FyZ3VtZW50X0FjY2VzcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84Ml8zNCI+VXNyPC9BPikuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzg3XzciPlJlc3VsdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl81Nl8xMyI+RmllbGRfQ2hlY2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzgxXzM0Ij5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzg4XzciPlVkZjwvQT4uPGI+YWxsPC9iPik7CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfODdfNyI+UmVzdWx0PC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzgxXzEzIj5HZW5lcmljX0ZpZWxkX0NoZWNrPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODhfMTMiPkdlbmVyaWNfQ2hhcl9DaGVjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzg4XzMzIj5DaDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Nl8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OV8zMyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF83Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5XzciPlVkZjwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNTNfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGVfQWNjZXNzPC9BPiA6PQorICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzUzXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzczwvQT4gKFRvX0FyZ3VtZW50X0FjY2VzcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OV8zMyI+VXNyPC9BPikuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzk4XzciPlJlc3VsdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl82M18xMyI+Q2hhcmFjdGVyX0NoZWNrPC9BPiAoQ2hhcmFjdGVyJ1ZhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OF8zMyI+Q2g8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl85OV83Ij5VZGY8L0E+LjxiPmFsbDwvYj4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzk4XzciPlJlc3VsdDwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OF8xMyI+R2VuZXJpY19DaGFyX0NoZWNrPC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzlfMTMiPkNfR2VuZXJpY19UeXBlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMF83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExXzciPlQ8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDFfNCI+TV9HZW5lcmljX1R5cGU8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfMTExXzciPlQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyMl8xMyI+TmV3X0ZpZWxkdHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODFfMTMiPkdlbmVyaWNfRmllbGRfQ2hlY2s8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfODhfMTMiPkdlbmVyaWNfQ2hhcl9DaGVjazwvQT4nPGI+QWNjZXNzPC9iPik7CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl8xMTFfNyI+VDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl8xMTBfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjdfMTMiPlNldF9GaWVsZHR5cGVfQXJnPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl8xMTFfNyI+VDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8xMyI+TWFrZV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18xMyI+Q29weV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3Ml8xNCI+RnJlZV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfMTEwXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzExMF83Ij5SZXM8L0E+KTsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDFfNCI+TV9HZW5lcmljX1R5cGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfMTExXzciPlQ8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQxXzQiPk1fR2VuZXJpY19UeXBlPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPik7CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0MV80Ij5NX0dlbmVyaWNfVHlwZTwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNzlfMTMiPkNfR2VuZXJpY19UeXBlPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDRfNTMiPlVzZXI8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTJmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtCkBAIC0wLDAgKzEsMTAxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXIuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlci5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMuVXNlciAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NDk6MzggQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNDVfNTgiPlVzZXI8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDRfNTMiPlVzZXI8L0E+KTsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTIiPkNfSW50PC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmludDsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF85Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hYnN0cmFjdDwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPiA8Yj53aXRoPC9iPiA8Yj5udWxsPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSByb290IG9mIHRoZSBtZWNoYW5pc20gd2UgdXNlIHRvIGNyZWF0ZSBmaWVsZCB0eXBlcyBpbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBZGE5NS4gWW91IHNob3VsZCB5b3VyIG93biB0eXBlIGRlcml2ZSBmcm9tIHRoaXMgb25lIGFuZCBpbXBsZW1lbnQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIEZpZWxkX0NoZWNrIGFuZCBDaGFyYWN0ZXJfQ2hlY2sgZnVuY3Rpb25zIGZvciB5b3VyIG93biB0eXBlLjwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzkiPlVzZXJfRGVmaW5lZF9GaWVsZF9UeXBlX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4KKyAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80OF85Ij5Vc2VyX0RlZmluZWRfRmllbGRfVHlwZTwvQT4nQ2xhc3M7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzEzIj5GaWVsZF9DaGVjazwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNTZfMTMiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzU2XzEzIj5UeXA8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDhfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgICAgIDxiPmlzPC9iPiA8Yj5hYnN0cmFjdDwvYj47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIElmIFRydWUgaXMgcmV0dXJuZWQsIHRoZSBmaWVsZCBpcyBjb25zaWRlcmVkIHZhbGlkLCBvdGhlcndpc2UgaXQgaXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW52YWxpZC48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTMiPkNoYXJhY3Rlcl9DaGVjazwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNjNfMTMiPkNoPC9BPjwvRk9OVD4gIDogQ2hhcmFjdGVyOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzYzXzEzIj5UeXA8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDhfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgICAgIDxiPmlzPC9iPiA8Yj5hYnN0cmFjdDwvYj47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIElmIFRydWUgaXMgcmV0dXJuZWQsIHRoZSBjaGFyYWN0ZXIgaXMgY29uc2lkZXJlZCBhcyB2YWxpZCBmb3IgdGhlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGZpZWxkLCBvdGhlcndpc2UgYXMgaW52YWxpZC48L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzQ3XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzQ3XzMwIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfNDhfMzAiPlR5cDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDhfOSI+VXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIHR5cGVzIGRlcml2ZWQgZnJvbSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm8gbmVlZCB0byByZWltcGxlbWVudCBpdCBmb3IgeW91ciBkZXJpdmVkIHR5cGUuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBQcml2YXRlIFBhcnQuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgVXNlZCBieSB0aGUgQ2hvaWNlIGNoaWxkIHBhY2thZ2UuPC9FTT48L0ZPTlQ+Cis8Yj5wcml2YXRlPC9iPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfMTA4XzEzIj5DX0dlbmVyaWNfVHlwZTwvQT48L0ZPTlQ+ICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfODRfMTMiPkdlbmVyaWNfRmllbGRfQ2hlY2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl84NF8zNCI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzg1XzM0Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84MV8xMyI+R2VuZXJpY19GaWVsZF9DaGVjazwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBnZW5lcmljIEZpZWxkX0NoZWNrX0Z1bmN0aW9uIGZvciB0aGUgbG93LWxldmVsIGZpZWxkdHlwZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICByZXByZXNlbnRpbmcgYWxsIHRoZSBVc2VyX0RlZmluZWRfRmllbGRfVHlwZSBkZXJpdmF0ZXMuIEl0IHJvdXRlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgY2FsbCB0byB0aGUgRmllbGRfQ2hlY2sgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0eXBlLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZGIuaHRtI3JlZl85NV8xMyI+R2VuZXJpY19DaGFyX0NoZWNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODhfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRiLmh0bSNyZWZfOTVfMzMiPkNoPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2FkYi5odG0jcmVmXzk2XzMzIj5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMtdXNlcl9fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy11c2VyX19hZHMuaHRtI3JlZl84OF8xMyI+R2VuZXJpY19DaGFyX0NoZWNrPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIGdlbmVyaWMgQ2hhcl9DaGVja19GdW5jdGlvbiBmb3IgdGhlIGxvdy1sZXZlbCBmaWVsZHR5cGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcmVwcmVzZW50aW5nIGFsbCB0aGUgVXNlcl9EZWZpbmVkX0ZpZWxkX1R5cGUgZGVyaXZhdGVzLiBJdCByb3V0ZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIGNhbGwgdG8gdGhlIENoYXJhY3Rlcl9DaGVjayBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHR5cGUuPC9FTT48L0ZPTlQ+CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDNfNDEiPkZpZWxkX1R5cGVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzLXVzZXJfX2Fkcy5odG0jcmVmXzQ0XzUzIj5Vc2VyPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjNjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bQpAQCAtMCwwICsxLDMwMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlcy5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5GaWVsZF9UeXBlcyAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjIwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6MzMgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOworPGI+d2l0aDwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkdHlwZS4zeDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNDYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj51c2U8L2I+IDxiPnR5cGU8L2I+IFN5c3RlbS5BZGRyZXNzOworCisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+ZnVuY3Rpb248L2I+IFRvX0FyZ3VtZW50X0FjY2VzcyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24KKyAgICAgKFN5c3RlbS5BZGRyZXNzLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPbik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzEzIj5HZXRfRmllbGR0eXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzU5XzEzIj5GPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X0ZpZWxkdHlwZSwgImZpZWxkX3R5cGUiKTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMTMiPkdldF9Bcmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNjJfMTMiPkY8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiBTeXN0ZW0uQWRkcmVzczsKKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfQXJnLCAiZmllbGRfYXJnIik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNzlfMTMiPkdldF9UeXBlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzc5XzIzIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNjNfOSI+RmllbGRfVHlwZV9BY2Nlc3M8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfNyI+TG93X0xldmVsPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNTlfMTMiPkdldF9GaWVsZHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl83OV8yMyI+RmxkPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0XzciPkFyZzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83M183Ij5Mb3dfTGV2ZWw8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPGI+bnVsbDwvYj47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzczXzciPkxvd19MZXZlbDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDNfNCI+TV9CdWlsdGluX1JvdXRlcjwvQT4gPGI+b3I8L2I+IDxiPmVsc2U8L2I+CisgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzczXzciPkxvd19MZXZlbDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDFfNCI+TV9HZW5lcmljX1R5cGU8L0E+IDxiPm9yPC9iPiA8Yj5lbHNlPC9iPgorICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83M183Ij5Mb3dfTGV2ZWw8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ0XzQiPk1fQ2hvaWNlX1JvdXRlcjwvQT4gPGI+b3I8L2I+IDxiPmVsc2U8L2I+CisgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzczXzciPkxvd19MZXZlbDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDJfNCI+TV9HZW5lcmljX0Nob2ljZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzc0XzciPkFyZzwvQT4gOj0gVG9fQXJndW1lbnRfQWNjZXNzICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl82Ml8xMyI+R2V0X0FyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzc5XzIzIj5GbGQ8L0E+KSk7CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNzRfNyI+QXJnPC9BPiA9IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzc0XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT47CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzc5XzEzIj5HZXRfVHlwZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMTMiPk1ha2VfQXJnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8yMyI+QXJnczwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gU3lzdGVtLkFkZHJlc3MKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBY3R1YWxseSBhcmdzIGlzIGEgZG91YmxlIGluZGlyZWN0ZWQgcG9pbnRlciB0byB0aGUgYXJndW1lbnRzPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG9mIGEgQyB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LiBJbiB0aGVvcnkgaXQgaXMgbm93IHF1aXRlPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGNvbXBsaWNhdGVkIHRvIHdyaXRlIHBvcnRhYmxlIHJvdXRpbmUgdGhhdCByZWFkcyB0aGUgYXJndW1lbnRzLDwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBiZWNhdXNlIG9uZSBoYXMgdG8ga25vdyB0aGUgZ3Jvd3RoIGRpcmVjdGlvbiBvZiB0aGUgc3RhY2sgYW5kPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBzaXplcyBvZiB0aGUgaW5kaXZpZHVhbCBhcmd1bWVudHMuPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZvcnR1bmF0ZWx5IHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IGFyZ3VtZW50ICgjMCksPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHdlIGtub3cgaXRzIHNpemUgYW5kIGZvciB0aGUgZmlyc3QgYXJnIHdlIGRvbid0IGNhcmUgYWJvdXQ8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW50byB3aGljaCBzdGFjayBkaXJlY3Rpb24gd2UgaGF2ZSB0byBwcm9jZWVkLiBXZSBzaW1wbHk8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcmVzb2x2ZSB0aGUgZG91YmxlIGluZGlyZWN0aW9uIGFuZCB0aGF0cyBpdC48L0VNPjwvRk9OVD4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzEyIj5WPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiBTeXN0ZW0uQWRkcmVzczsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiBUb19BY2Nlc3MgPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uIChTeXN0ZW0uQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMDZfMTIiPlY8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBUb19BY2Nlc3MgKFRvX0FjY2VzcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTYyXzIzIj5BcmdzPC9BPikuPGI+YWxsPC9iPikuPGI+YWxsPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTYyXzEzIj5NYWtlX0FyZzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTY3XzEzIj5Db3B5X0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTY3XzIzIj5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IFN5c3RlbS5BZGRyZXNzCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjdfMjMiPlVzcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18xMyI+Q29weV9Bcmc8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMTQiPkZyZWVfQXJnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMjQiPlVzcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN5c3RlbS5BZGRyZXNzKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IEZyZWVfVHlwZSA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVW5jaGVja2VkX0RlYWxsb2NhdGlvbgorICAgICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4nQ2xhc3MsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzYzXzkiPkZpZWxkX1R5cGVfQWNjZXNzPC9BPik7CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IEZyZWVhcmdzIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uCisgICAgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTFfOSI+QXJndW1lbnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2XzciPlRvX0JlX0ZyZWU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNl85Ij5Bcmd1bWVudF9BY2Nlc3M8L0E+IDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzI0Ij5Vc3I8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzciPkxvd19MZXZlbDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTI2XzciPlRvX0JlX0ZyZWU8L0E+IC89IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTI2XzciPlRvX0JlX0ZyZWU8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxM183Ij5Vc3I8L0E+IC89IFN5c3RlbS5OdWxsX0FkZHJlc3MgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzEyN183Ij5Mb3dfTGV2ZWw8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzEyNl83Ij5Ub19CZV9GcmVlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPjsKKyAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjdfNyI+TG93X0xldmVsPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMjZfMTAiPkZyZWVhcmc8L0E+IC89IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjdfNyI+TG93X0xldmVsPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjdfNyI+RnJlZWFyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzEyNl83Ij5Ub19CZV9GcmVlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPik7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzEyNl83Ij5Ub19CZV9GcmVlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTJfNyI+VHlwPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgRnJlZV9UeXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMjZfNyI+VG9fQmVfRnJlZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICBGcmVlYXJncyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTI2XzciPlRvX0JlX0ZyZWU8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMTQiPkZyZWVfQXJnPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUxXzE0Ij5XcmFwX0J1aWx0aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8yOCI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUyXzI4Ij5UeXA8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+J0NsYXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDVfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1M18yOCI+Q2Z0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDhfMTMiPkNfQnVpbHRpbl9Sb3V0ZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0N183Ij5Vc3JfQXJnPC9BPjwvRk9OVD4gICA6IDxiPmNvbnN0YW50PC9iPiBTeXN0ZW0uQWRkcmVzcyA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl82Ml8xMyI+R2V0X0FyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8yOCI+RmxkPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OF83Ij5Mb3dfTGV2ZWw8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl81OV8xMyI+R2V0X0ZpZWxkdHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8yOCI+RmxkPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OV83Ij5Bcmc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNl85Ij5Bcmd1bWVudF9BY2Nlc3M8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTBfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMTYiPlNldF9GbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5GPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUxXzI4Ij5GbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5DZjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNTNfMjgiPkNmdDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNTFfMTYiPkFyZzE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNl85Ij5Bcmd1bWVudF9BY2Nlc3M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9UeXBlLCAic2V0X2ZpZWxkX3R5cGUiKTsKKworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ4XzciPkxvd19MZXZlbDwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1M18yOCI+Q2Z0PC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDhfMTMiPkNfQnVpbHRpbl9Sb3V0ZXI8L0E+IDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUzXzI4Ij5DZnQ8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0OV8xMyI+Q19DaG9pY2VfUm91dGVyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ5XzciPkFyZzwvQT4gOj0gPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTFfOSI+QXJndW1lbnQ8L0E+Jyg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPiA9Jmd0OyBTeXN0ZW0uTnVsbF9BZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4gPSZndDsgPGI+bmV3PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl81Ml85Ij5GaWVsZF9UeXBlPC9BPidDbGFzcycoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUyXzI4Ij5UeXA8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzU5XzEzIj5HZXRfRmllbGR0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTUxXzI4Ij5GbGQ8L0E+KSk7CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ3XzciPlVzcl9Bcmc8L0E+IC89IFN5c3RlbS5OdWxsX0FkZHJlc3MgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDhfNyI+TG93X0xldmVsPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMjVfMTAiPkNvcHlhcmc8L0E+IC89IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDlfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDhfNyI+TG93X0xldmVsPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNDhfNyI+Q29weWFyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0N183Ij5Vc3JfQXJnPC9BPik7CisgICAgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ5XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEzXzciPlVzcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ3XzciPlVzcl9Bcmc8L0E+OworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUwXzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5TZXRfRmxkX1R5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNTNfMzAiPkFyZzE8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0OV83Ij5Bcmc8L0E+KTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNTBfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE1MF83Ij5SZXM8L0E+KTsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE1MV8xNCI+V3JhcF9CdWlsdGluPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzdfMTMiPkZpZWxkX0NoZWNrX1JvdXRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTc3XzMzIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODBfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3OF8zMyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgyXzciPkFyZzwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPiA6PSBUb19Bcmd1bWVudF9BY2Nlc3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3OF8zMyI+VXNyPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xODJfNyI+QXJnPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE4Ml83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+CisgICAgICAgICAgICAgICAgICAgICA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE4Ml83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+IC89IDxiPm51bGw8L2I+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xODJfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMjdfMTAiPkZjaGVjazwvQT4gLz0gPGI+bnVsbDwvYj4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTgyXzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTI3XzEwIj5GY2hlY2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzdfMzMiPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE4Ml83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxM183Ij5Vc3I8L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTc3XzEzIj5GaWVsZF9DaGVja19Sb3V0ZXI8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE4NV8xMyI+Q2hhcl9DaGVja19Sb3V0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTNfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE4NV8zMiI+Q2g8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xODZfMzIiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Nl83Ij5Bcmc8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE2XzkiPkFyZ3VtZW50X0FjY2VzczwvQT4gOj0gVG9fQXJndW1lbnRfQWNjZXNzICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xODZfMzIiPlVzcjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTk2XzciPkFyZzwvQT4gLz0gPGI+bnVsbDwvYj4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xOTZfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPgorICAgICAgICAgICAgICAgICAgICAgPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xOTZfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTJfNyI+VHlwPC9BPiAvPSA8Yj5udWxsPC9iPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTk2XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTI4XzEwIj5DY2hlY2s8L0E+IC89IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE5Nl83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEyOF8xMCI+Q2NoZWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg1XzMyIj5DaDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE5Nl83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxM183Ij5Vc3I8L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg1XzEzIj5DaGFyX0NoZWNrX1JvdXRlcjwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwN18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTkzXzEzIj5OZXh0X1JvdXRlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwN18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTkzXzI2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTk0XzI2Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTBfNyI+QXJnPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNl85Ij5Bcmd1bWVudF9BY2Nlc3M8L0E+IDo9IFRvX0FyZ3VtZW50X0FjY2VzcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTk0XzI2Ij5Vc3I8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIxMF83Ij5Bcmc8L0E+IC89IDxiPm51bGw8L2I+IDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjEwXzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4KKyAgICAgICAgICAgICAgICAgICAgIDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjEwXzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEyXzciPlR5cDwvQT4gLz0gPGI+bnVsbDwvYj4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIxMF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEyOV8xMCI+TmV4dDwvQT4gLz0gPGI+bnVsbDwvYj4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjEwXzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjE0XzciPkNmdDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTI5XzEwIj5OZXh0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTkzXzI2Ij5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMTBfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTNfNyI+VXNyPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiAxOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE5M18xMyI+TmV4dF9Sb3V0ZXI8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMV8xMyI+UHJldl9Sb3V0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMV8yNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMl8yNiI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI0XzciPkFyZzwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMzVfNDEiPlRvX0FyZ3VtZW50X0FjY2VzczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMl8yNiI+VXNyPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjRfNyI+QXJnPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIyNF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzNF80Ij5OdWxsX0ZpZWxkX1R5cGU8L0E+CisgICAgICAgICAgICAgICAgICAgICA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIyNF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxMl83Ij5UeXA8L0E+IC89IDxiPm51bGw8L2I+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjRfNyI+QXJnPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTRfNyI+Q2Z0PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMjlfMTYiPlByZXY8L0E+IC89IDxiPm51bGw8L2I+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIyNF83Ij5Bcmc8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIxNF83Ij5DZnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEyOV8xNiI+UHJldjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIwMV8yNiI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjI0XzciPkFyZzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjEzXzciPlVzcjwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gMTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMDFfMTMiPlByZXZfUm91dGVyPC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0OF8xMyI+Q19CdWlsdGluX1JvdXRlcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MF83Ij5UPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQzXzQiPk1fQnVpbHRpbl9Sb3V0ZXI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI0MF83Ij5UPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjJfMTMiPk5ld19GaWVsZHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzdfMTMiPkZpZWxkX0NoZWNrX1JvdXRlcjwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg1XzEzIj5DaGFyX0NoZWNrX1JvdXRlcjwvQT4nPGI+QWNjZXNzPC9iPik7CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjQwXzciPlQ8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIzOV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+U2V0X0ZpZWxkdHlwZV9Bcmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNDBfNyI+VDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8xMyI+TWFrZV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18xMyI+Q29weV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3Ml8xNCI+RnJlZV9Bcmc8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzIzOV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjM5XzciPlJlczwvQT4pOworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0M180Ij5NX0J1aWx0aW5fUm91dGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNDBfNyI+VDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDNfNCI+TV9CdWlsdGluX1JvdXRlcjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDNfNCI+TV9CdWlsdGluX1JvdXRlcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE0OF8xMyI+Q19CdWlsdGluX1JvdXRlcjwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDlfMTMiPkNfQ2hvaWNlX1JvdXRlcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjZfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2N183Ij5UPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ0XzQiPk1fQ2hvaWNlX1JvdXRlcjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY3XzciPlQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyMl8xMyI+TmV3X0ZpZWxkdHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3N18xMyI+RmllbGRfQ2hlY2tfUm91dGVyPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xODVfMTMiPkNoYXJfQ2hlY2tfUm91dGVyPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNjdfNyI+VDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzRfNCI+TnVsbF9GaWVsZF9UeXBlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY2XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjI3XzEzIj5TZXRfRmllbGR0eXBlX0FyZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2N183Ij5UPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTYyXzEzIj5NYWtlX0FyZzwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTY3XzEzIj5Db3B5X0FyZzwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzE0Ij5GcmVlX0FyZzwvQT4nPGI+QWNjZXNzPC9iPik7CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY2XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNjZfNyI+UmVzPC9BPik7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKworICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY2XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjM0XzEzIj5TZXRfRmllbGR0eXBlX0Nob2ljZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzI2N183Ij5UPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTkzXzEzIj5OZXh0X1JvdXRlcjwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjAxXzEzIj5QcmV2X1JvdXRlcjwvQT4nPGI+QWNjZXNzPC9iPik7CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY2XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yNjZfNyI+UmVzPC9BPik7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ0XzQiPk1fQ2hvaWNlX1JvdXRlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY3XzciPlQ8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ0XzQiPk1fQ2hvaWNlX1JvdXRlcjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDRfNCI+TV9DaG9pY2VfUm91dGVyPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTQ5XzEzIj5DX0Nob2ljZV9Sb3V0ZXI8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzIyMGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0KQEAgLTAsMCArMSwyNDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXMuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVHlwZXMgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xNCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDNfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzUwXzQ2Ij5GaWVsZF9UeXBlczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQzXzQxIj5GaWVsZF9UeXBlczwvQT4pOworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEyIj5DX0ludDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkdHlwZS4zeC5odG1sIj5mb3JtX2ZpZWxkdHlwZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+IDxiPnRhZ2dlZDwvYj4gPGI+bnVsbDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQWJzdHJhY3QgYmFzZSB0eXBlIGZvciBhbGwgZmllbGQgdHlwZXMuIEEgY29uY3JldGUgZmllbGQgdHlwZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpcyBhbiBleHRlbnNpb24gdGhhdCBhZGRzIHNvbWUgZGF0YSBlbGVtZW50cyBkZXNjcmliaW5nIGZvcm1hdHMgb3I8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYm91bmRhcnkgdmFsdWVzIGZvciB0aGUgdHlwZSBhbmQgdmFsaWRhdGlvbiByb3V0aW5lcy48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRm9yIHRoZSBidWlsdGluIGxvdy1sZXZlbCBmaWVsZHR5cGVzLCB0aGUgdmFsaWRhdGlvbiByb3V0aW5lcyBhcmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYWxyZWFkeSBkZWZpbmVkIGJ5IHRoZSBsb3ctbGV2ZWwgQyBsaWJyYXJ5LjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgYnVpbHRpbiB0eXBlcyBsaWtlIEFscGhhIG9yIEFscGhhTnVtZXJpYyBldGMuIGFyZSBkZWZpbmVkIGluPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGNoaWxkIHBhY2thZ2VzIG9mIHRoaXMgcGFja2FnZS4gWW91IG1heSB1c2Ugb25lIG9mIHRoZW0gYXMgZXhhbXBsZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBob3cgdG8gY3JlYXRlIHlvdSBvd24gY2hpbGQgcGFja2FnZXMgZm9yIGxvdy1sZXZlbCBmaWVsZCB0eXBlcyB0aGF0PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHlvdSBtYXkgaGF2ZSBhbHJlYWR5IHdyaXR0ZW4gaW4gQy48L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M185Ij5GaWVsZF9UeXBlX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNTJfOSI+RmllbGRfVHlwZTwvQT4nQ2xhc3M7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzE0Ij5TZXRfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl82Nl8xNCI+RmxkPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzY2XzE0Ij5GbGRfVHlwZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+KSA8Yj5pczwvYj4gPGI+YWJzdHJhY3Q8L2I+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkdHlwZS4zeC5odG1sIj5zZXRfZmllbGRfdHlwZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCdXQ6IHdlIGhpZGUgdGhlIHZhcmFyZyBtZWNoYW5pc20gb2YgdGhlIEMgaW50ZXJmYWNlLiBZb3UgYWx3YXlzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgaGF2ZSB0byBwYXNzIGEgc2luZ2xlIEZpZWxkX1R5cGUgcGFyYW1ldGVyLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwiPmZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl83MV8xMyI+R2V0X1R5cGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfNzFfMjMiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl82M185Ij5GaWVsZF9UeXBlX0FjY2VzczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sIj5maWVsZF90eXBlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZmllbGRfYXJnKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW4gQWRhOTUgd2UgY2FuIGNvbWJpbmUgdGhlc2UuIElmIHlvdSB0cnkgdG8gcmV0cmlldmUgdGhlIGZpZWxkIHR5cGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhhdCBpcyBub3QgZGVmaW5lZCBhcyBleHRlbnNpb24gb2YgdGhlIGFic3RyYWN0IHRhZ2dlZCB0eXBlIGFib3ZlLDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB5b3Ugd2lsbCByYWlzZSBhIEZvcm1fRXhjZXB0aW9uLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIG5vdCBpbmxpbmVkPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBQcml2YXRlIFBhcnQuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTW9zdCBvZiB0aGlzIGlzIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY2hpbGQgcGFja2FnZXMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPnByaXZhdGU8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyXzkiPk1ha2VhcmdfRnVuY3Rpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPgorICAgICA8Yj5mdW5jdGlvbjwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTNfMTYiPkFyZ3M8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IFN5c3RlbS5BZGRyZXNzOworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl85Ml85Ij5NYWtlYXJnX0Z1bmN0aW9uPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfOSI+Q29weWFyZ19GdW5jdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+CisgICAgIDxiPmZ1bmN0aW9uPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85N18xNiI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiBTeXN0ZW0uQWRkcmVzczsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfOTZfOSI+Q29weWFyZ19GdW5jdGlvbjwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMF85Ij5GcmVlYXJnX0Z1bmN0aW9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4KKyAgICAgPGI+cHJvY2VkdXJlPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDFfMTciPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpOworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDBfOSI+RnJlZWFyZ19GdW5jdGlvbjwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNF85Ij5GaWVsZF9DaGVja19GdW5jdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+CisgICAgIDxiPmZ1bmN0aW9uPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDVfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNV8yOSI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDRfOSI+RmllbGRfQ2hlY2tfRnVuY3Rpb248L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfOSI+Q2hhcl9DaGVja19GdW5jdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+CisgICAgIDxiPmZ1bmN0aW9uPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDlfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8yOCI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDhfOSI+Q2hhcl9DaGVja19GdW5jdGlvbjwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMl85Ij5DaG9pY2VfRnVuY3Rpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPgorICAgICA8Yj5mdW5jdGlvbjwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzXzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTNfMjkiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTEyXzkiPkNob2ljZV9GdW5jdGlvbjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgVGhpcyBtdXN0IGJlIGluIHN5bmMgd2l0aCB0aGUgRklFTERUWVBFIHN0cnVjdHVyZSBpbiBmb3JtLmg8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTlfOSI+TG93X0xldmVsX0ZpZWxkX1R5cGU8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxXzEwIj5TdGF0dXM8L0E+PC9GT05UPiA6ICAgICAgICAgICAgICA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5zaG9ydDsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIyXzEwIj5SZWZfQ291bnQ8L0E+PC9GT05UPiA6ICAgICAgICAgICA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5sb25nOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfMTAiPkxlZnQ8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfMTYiPlJpZ2h0PC9BPjwvRk9OVD4gOiAgICAgICAgIFN5c3RlbS5BZGRyZXNzOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjRfMTAiPk1ha2Vhcmc8L0E+PC9GT05UPiA6ICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzkyXzkiPk1ha2VhcmdfRnVuY3Rpb248L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjVfMTAiPkNvcHlhcmc8L0E+PC9GT05UPiA6ICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzk2XzkiPkNvcHlhcmdfRnVuY3Rpb248L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjZfMTAiPkZyZWVhcmc8L0E+PC9GT05UPiA6ICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEwMF85Ij5GcmVlYXJnX0Z1bmN0aW9uPC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzEwIj5GY2hlY2s8L0E+PC9GT05UPiA6ICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMDRfOSI+RmllbGRfQ2hlY2tfRnVuY3Rpb248L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjhfMTAiPkNjaGVjazwvQT48L0ZPTlQ+IDogICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEwOF85Ij5DaGFyX0NoZWNrX0Z1bmN0aW9uPC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5XzEwIj5OZXh0PC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5XzE2Ij5QcmV2PC9BPjwvRk9OVD4gOiAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMTJfOSI+Q2hvaWNlX0Z1bmN0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTE5XzkiPkxvd19MZXZlbF9GaWVsZF9UeXBlPC9BPik7CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzExOV85Ij5Mb3dfTGV2ZWxfRmllbGRfVHlwZTwvQT47CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzQiPk51bGxfRmllbGRfVHlwZTwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPGI+bnVsbDwvYj47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBUaGlzIGZvdXIgbG93LWxldmVsIGZpZWxkdHlwZXMgYXJlIHRoZSBvbmVzIGFzc29jaWF0ZWQgd2l0aDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IGZpZWxkdHlwZXMgaGFuZGxlZCBieSB0aGlzIGJpbmRpbmcuIEFueSBvdGhlciBsb3ctbGV2ZWwgZmllbGR0eXBlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgd2lsbCByZXN1bHQgaW4gYSBGb3JtX0V4Y2VwdGlvbiBpcyBmdW5jdGlvbiBHZXRfVHlwZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDFfNCI+TV9HZW5lcmljX1R5cGU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPGI+bnVsbDwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0Ml80Ij5NX0dlbmVyaWNfQ2hvaWNlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8Yj5udWxsPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzXzQiPk1fQnVpbHRpbl9Sb3V0ZXI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEzMl85Ij5DX0ZpZWxkX1R5cGU8L0E+IDo9IDxiPm51bGw8L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDRfNCI+TV9DaG9pY2VfUm91dGVyPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT4gOj0gPGI+bnVsbDwvYj47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVHdvIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aG9zZSBsb3ctbGV2ZWwgZmllbGR0eXBlcyBkZWZpbmVkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGluIHRoaXMgcGFja2FnZS48L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjM3XzEzIj5DX0J1aWx0aW5fUm91dGVyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMjY0XzEzIj5DX0Nob2ljZV9Sb3V0ZXI8L0E+PC9GT05UPiAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQzXzE0Ij5XcmFwX0J1aWx0aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0M18yOCI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Ml8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTQ0XzI4Ij5UeXA8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzUyXzkiPkZpZWxkX1R5cGU8L0E+J0NsYXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE0NV8yOCI+Q2Z0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNDhfMTMiPkNfQnVpbHRpbl9Sb3V0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBwcm9jZWR1cmUgaGFzIHRvIGJlIGNhbGxlZCBieSB0aGUgU2V0X0ZpZWxkX1R5cGUgaW1wbGVtZW50YXRpb248L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZm9yIGJ1aWx0aW4gbG93LWxldmVsIGZpZWxkdHlwZXMgdG8gcmVwbGFjZSBpdCBieSBhbiBBZGE5NTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBjb25mb3JtYW50IEZpZWxkX1R5cGUgb2JqZWN0LjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgcGFyYW1ldGVyIENmdCBtdXN0IGJlIENfQnVpbHRpbl9Sb3V0ZXIgZm9yIHJlZ3VsYXIgbG93LWxldmVsPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGZpZWxkdHlwZXMgKGxpa2UgVFlQX0FMUEhBIG9yIFRZUF9BTE5VTSkgYW5kIENfQ2hvaWNlX1JvdXRlciBmb3I8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgbG93LWxldmVsIGZpZWxkdHlwZXMgd2l0Y2ggY2hvaWNlIGZ1bmN0aW9ucyAobGlrZSBUWVBfRU5VTSkuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFueSBvdGhlciB2YWx1ZSB3aWxsIHJhaXNlIGEgRm9ybV9FeGNlcHRpb24uPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfOTVfMTMiPk1ha2VfQXJnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl85NV8yMyI+QXJnczwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gU3lzdGVtLkFkZHJlc3M7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2Ml8xMyI+TWFrZV9Bcmc8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgTWFrZWFyZ19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMTNfMTMiPkNvcHlfQXJnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xMTNfMjMiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gU3lzdGVtLkFkZHJlc3M7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE2N18xMyI+Q29weV9Bcmc8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyB0aGUgQ29weWFyZ19GdW5jdGlvbiBmb3IgdGhlIGludGVybmFsIGxvdy1sZXZlbCB0eXBlczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnRyb2R1Y2VkIGJ5IHRoaXMgYmluZGluZy48L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTE5XzE0Ij5GcmVlX0FyZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTE5XzI0Ij5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKTsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTcyXzE0Ij5GcmVlX0FyZzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBGcmVlYXJnX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludHJvZHVjZWQgYnkgdGhpcyBiaW5kaW5nLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2FkYi5odG0jcmVmXzE3OV8xMyI+RmllbGRfQ2hlY2tfUm91dGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xNzlfMzMiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRiLmh0bSNyZWZfMTgwXzMzIj5Vc3I8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzE3N18xMyI+RmllbGRfQ2hlY2tfUm91dGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIEZpZWxkX0NoZWNrX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHR5cGUuIEl0IHJvdXRlcyB0aGUgY2FsbCB0byB0aGUgY29ycmVzcG9uZGluZyBsb3ctbGV2ZWwgdmFsaWRhdGlvbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBmdW5jdGlvbi48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xOTNfMTMiPkNoYXJfQ2hlY2tfUm91dGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xOTNfMzIiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg2XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8xOTRfMzIiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTg1XzEzIj5DaGFyX0NoZWNrX1JvdXRlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBDaGFyX0NoZWNrX0Z1bmN0aW9uIGZvciB0aGUgaW50ZXJuYWwgbG93LWxldmVsIHR5cGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludHJvZHVjZWQgdG8gd3JhcCB0aGUgbG93LWxldmVsIHR5cGVzIGJ5IGEgRmllbGRfVHlwZSBkZXJpdmVkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHR5cGUuIEl0IHJvdXRlcyB0aGUgY2FsbCB0byB0aGUgY29ycmVzcG9uZGluZyBsb3ctbGV2ZWwgdmFsaWRhdGlvbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBmdW5jdGlvbi48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMDdfMTMiPk5leHRfUm91dGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMDdfMjYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMDhfMjYiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTkzXzEzIj5OZXh0X1JvdXRlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW50cm9kdWNlZCB0byB3cmFwIHRoZSBsb3ctbGV2ZWwgdHlwZXMgYnkgYSBGaWVsZF9UeXBlIGRlcml2ZWQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdHlwZS4gSXQgcm91dGVzIHRoZSBjYWxsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1sZXZlbCBuZXh0X2Nob2ljZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBmdW5jdGlvbi48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjFfMTMiPlByZXZfUm91dGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjFfMjYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZGIuaHRtI3JlZl8yMjJfMjYiPlVzcjwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfNDZfMTIiPkNfSW50PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjAxXzEzIj5QcmV2X1JvdXRlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBDaG9pY2VfRnVuY3Rpb24gZm9yIHRoZSBpbnRlcm5hbCBsb3ctbGV2ZWwgdHlwZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW50cm9kdWNlZCB0byB3cmFwIHRoZSBsb3ctbGV2ZWwgdHlwZXMgYnkgYSBGaWVsZF9UeXBlIGRlcml2ZWQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdHlwZS4gSXQgcm91dGVzIHRoZSBjYWxsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvdy1sZXZlbCBwcmV2X2Nob2ljZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBmdW5jdGlvbi48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHRoZSBBcmd1bWVudCBzdHJ1Y3R1cmUgbWFpbnRhaW5lZCBieSBhbGwgbG93LWxldmVsIGZpZWxkIHR5cGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludHJvZHVjZWQgYnkgdGhpcyBiaW5kaW5nLjwvRU0+PC9GT05UPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTFfOSI+QXJndW1lbnQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cmVjb3JkPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTJfNyI+VHlwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl82M185Ij5GaWVsZF9UeXBlX0FjY2VzczwvQT47ICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgRmllbGRfVHlwZSBjcmVhdGluZyB0aGlzIHJlY29yZDwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTNfNyI+VXNyPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzczsgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG9yaWdpbmFsIGFyZyBmb3IgYnVpbHRpbiBsb3ctbGV2ZWwgdHlwZXM8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0XzciPkNmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47ICAgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBvcmlnaW5hbCBsb3ctbGV2ZWwgdHlwZTwvRU0+PC9GT05UPgorICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTZfOSI+QXJndW1lbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMTFfOSI+QXJndW1lbnQ8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBTb21lIEltcG9ydHMgb2YgbGliZm9ybSByb3V0aW5lcyB0byBkZWFsIHdpdGggbG93LWxldmVsIGZpZWxkdHlwZXMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMl8xMyI+TmV3X0ZpZWxkdHlwZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMl8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjIyXzEzIj5GY2hlY2s8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEwNF85Ij5GaWVsZF9DaGVja19GdW5jdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyM18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjIyXzEzIj5DY2hlY2s8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEwOF85Ij5DaGFyX0NoZWNrX0Z1bmN0aW9uPC9BPikKKyAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMzJfOSI+Q19GaWVsZF9UeXBlPC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXdfRmllbGR0eXBlLCAibmV3X2ZpZWxkdHlwZSIpOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjdfMTMiPlNldF9GaWVsZHR5cGVfQXJnPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI3XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjdfMTMiPkNmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjhfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+TWFrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl85Ml85Ij5NYWtlYXJnX0Z1bmN0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNjJfMTMiPk1ha2VfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI5XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMjdfMTMiPkNvcDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfOTZfOSI+Q29weWFyZ19GdW5jdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTY3XzEzIj5Db3B5X0FyZzwvQT4nPGI+QWNjZXNzPC9iPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjI3XzEzIj5GcmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzEwMF85Ij5GcmVlYXJnX0Z1bmN0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xNzJfMTQiPkZyZWVfQXJnPC9BPic8Yj5BY2Nlc3M8L2I+KQorICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzQ2XzEyIj5DX0ludDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZpZWxkdHlwZV9BcmcsICJzZXRfZmllbGR0eXBlX2FyZyIpOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzRfMTMiPlNldF9GaWVsZHR5cGVfQ2hvaWNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM0XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8yMzRfMTMiPkNmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMTMyXzkiPkNfRmllbGRfVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzVfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdHlwZXNfX2Fkcy5odG0jcmVmXzIzNF8xMyI+TmV4dDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNV80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF90eXBlc19fYWRzLmh0bSNyZWZfMjM0XzEzIj5QcmV2PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl8xMTJfOSI+Q2hvaWNlX0Z1bmN0aW9uPC9BPikKKyAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80Nl8xMiI+Q19JbnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GaWVsZHR5cGVfQ2hvaWNlLCAic2V0X2ZpZWxkdHlwZV9jaG9pY2UiKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3R5cGVzX19hZHMuaHRtI3JlZl80M180MSI+RmllbGRfVHlwZXM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY3MmViCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtCkBAIC0wLDAgKzEsOTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfdXNlcnB0ci4zeDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfNDYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+RmllbGRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj51c2U8L2I+IDxiPnR5cGU8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmludDsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzI5Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81NF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzE2Ij5TZXRfRmllbGRfVXNlcnB0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTdfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81N18xNiI+VXNyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GaWVsZF9Vc2VycHRyLCAic2V0X2ZpZWxkX3VzZXJwdHIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU3XzE2Ij5TZXRfRmllbGRfVXNlcnB0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18yOSI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU0XzI5Ij5EYXRhPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82MV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMjgiPkZsZDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzJfMTYiPkZpZWxkX1VzZXJwdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Ml8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcyXzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX1VzZXJwdHIsICJmaWVsZF91c2VycHRyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcyXzE2Ij5GaWVsZF9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzI4Ij5GbGQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIj5HZXRfVXNlcl9EYXRhPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzI5Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjBfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjBfMjkiPkRhdGE8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8yOSI+RmxkPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8xNCI+R2V0X1VzZXJfRGF0YTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5GaWVsZF9Vc2VyX0RhdGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY4ODUxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtCkBAIC0wLDAgKzEsNzUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybXMuRmllbGRfVXNlcl9EYXRhICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE1IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+VXNlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5saW1pdGVkPC9iPiA8Yj5wcml2YXRlPC9iPjsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5Vc2VyX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80M185Ij5Vc2VyPC9BPjsKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80OF80NiI+RmllbGRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5GaWVsZF9Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sIj5mb3JtX2ZpZWxkX3VzZXJwdHIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81NF8xNCI+U2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfMjkiPkZsZDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzU1XzI5Ij5EYXRhPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sIj5zZXRfZmllbGRfdXNlcnB0cjwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83OF8xNCI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzhfMjkiPkZsZDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83OV8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZpZWxkX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83MF8xMyI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZpZWxkX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzBfMjgiPkZsZDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZmllbGRfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sIj5maWVsZF91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTYW1hIGFzIGZ1bmN0aW9uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5Gb3JtczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1maWVsZF91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5GaWVsZF9Vc2VyX0RhdGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiNzI4OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtCkBAIC0wLDAgKzEsOTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGEuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Gb3Jtcy5Gb3JtX1VzZXJfRGF0YSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX191c2VycHRyLjN4PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzQ2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+Rm9ybV9Vc2VyX0RhdGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMjkiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81NF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMTYiPlNldF9Gb3JtX1VzZXJwdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNThfMTYiPkZybTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNThfMTYiPkRhdGE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0Zvcm1fVXNlcnB0ciwgInNldF9mb3JtX3VzZXJwdHIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNThfMTYiPlNldF9Gb3JtX1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18yOSI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTRfMjkiPkRhdGE8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82Ml83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjJfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIj5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzI4Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18xNiI+Rm9ybV9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzczXzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGb3JtX1VzZXJwdHIsICJmb3JtX3VzZXJwdHIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83M18xNiI+Rm9ybV9Vc2VycHRyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMjgiPkZybTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMjkiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjBfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzYwXzI5Ij5EYXRhPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzI5Ij5Gcm08L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5Gb3JtX1VzZXJfRGF0YTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWIzMjIwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0KQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zLkZvcm1fVXNlcl9EYXRhICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE0IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5Vc2VyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmxpbWl0ZWQ8L2I+IDxiPnByaXZhdGU8L2I+OworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+VXNlcl9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80M185Ij5Vc2VyPC9BPjsKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzQ4XzQ2Ij5Gb3JtX1VzZXJfRGF0YTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5Gb3JtX1VzZXJfRGF0YTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwiPmZvcm1fdXNlcnB0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTVfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy1mb3JtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTVfMjkiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81Nl8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sIj5zZXRfZm9ybV91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXMtZm9ybV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83OV8xNCI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83OV8yOSI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl84MF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83MV8xMyI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83MV8yOCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fdXNlcnB0ci4zeC5odG1sIj5mb3JtX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLWZvcm1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+Rm9ybV9Vc2VyX0RhdGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmNjQ2NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtCkBAIC0wLDAgKzEsMTE2NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtcy5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkZvcm1zICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjI2IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDgvMDcvMjYgMTg6NTA6NDQgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uOworPGI+d2l0aDwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uOworCis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlBvaW50ZXJzOworCis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV80MCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworICAgPGI+dHlwZTwvYj4gQ19GaWVsZF9BcnJheSA8Yj5pczwvYj4gPGI+YXJyYXk8L2I+IChOYXR1cmFsIDxiPnJhbmdlPC9iPiAmbHQ7Jmd0OykgPGI+b2Y8L2I+IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgIDxiPnBhY2thZ2U8L2I+IEZfQXJyYXkgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuUG9pbnRlcnMgKE5hdHVyYWwsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiwgQ19GaWVsZF9BcnJheSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTlfNCI+TnVsbF9GaWVsZDwvQT4pOworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHN1YnR5cGUgY2hhcnNfcHRyIGlzIEludGVyZmFjZXMuQy5TdHJpbmdzLmNoYXJzX3B0cjs8L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IEZPU18yX0NJbnQgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBDSW50XzJfRk9TIDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gRnJtT1NfMl9DSW50IDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gQ0ludF8yX0ZybU9TIDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI3Nl8xNCI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI3Nl8yOCI+S2V5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzdfMjgiPk5hbWU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8xNiI+Rm9ybV9SZXF1ZXN0X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODRfMTYiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZvcm1fUmVxdWVzdF9OYW1lLCAiZm9ybV9yZXF1ZXN0X25hbWUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzExNl8xNCI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NF8xNiI+Rm9ybV9SZXF1ZXN0X05hbWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc2XzI4Ij5LZXk8L0E+KSksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI3N18yOCI+TmFtZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzZfMTQiPlJlcXVlc3RfTmFtZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzlfMTQiPlJlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yNzlfMjgiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyXzE2Ij5Gb3JtX1JlcXVlc3RfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyXzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85Ml8xNiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRm9ybV9SZXF1ZXN0X05hbWUsICJmb3JtX3JlcXVlc3RfbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTJfMTYiPkZvcm1fUmVxdWVzdF9OYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI3OV8yOCI+S2V5PC9BPikpKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjc5XzE0Ij5SZXF1ZXN0X05hbWU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX25ldy4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5M18xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTNfMjEiPkhlaWdodDwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk0XzIxIj5XaWR0aDwvQT48L0ZPTlQ+ICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk1XzIxIj5Ub3A8L0E+PC9GT05UPiAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk2XzIxIj5MZWZ0PC9BPjwvRk9OVD4gICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTdfMjEiPk9mZl9TY3JlZW48L0E+PC9GT05UPiAgIDogTmF0dXJhbCA6PSAwOworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExM18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk4XzIxIj5Nb3JlX0J1ZmZlcnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4nRmlyc3QpCisgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8xNiI+TmV3ZmllbGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNl8xNiI+SDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTE2XzE2Ij5XPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTZfMTYiPlQ8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTZfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNl8xNiI+TDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8zOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTE2XzE2Ij5PPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTZfMTYiPk08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXdmaWVsZCwgIm5ld19maWVsZCIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMThfNyI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNl8xNiI+TmV3ZmllbGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjkzXzIxIj5IZWlnaHQ8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5NF8yMSI+V2lkdGg8L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk1XzIxIj5Ub3A8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5Nl8yMSI+TGVmdDwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yOTdfMjEiPk9mZl9TY3JlZW48L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjk4XzIxIj5Nb3JlX0J1ZmZlcnM8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMThfNyI+RmxkPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMThfNyI+RmxkPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjkzXzEzIj5DcmVhdGU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzE1XzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzFfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMxNV8yMiI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM18xNiI+RnJlZV9GaWVsZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTMzXzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGcmVlX0ZpZWxkLCAiZnJlZV9maWVsZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNl83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTM2XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTMzXzE2Ij5GcmVlX0ZpZWxkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzE1XzIyIj5GbGQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMzZfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEzNl83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzE1XzIyIj5GbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMTVfMTQiPkRlbGV0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyMV8xMyI+RHVwbGljYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjFfMjQiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyMl8yNCI+VG9wPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjNfMjQiPkxlZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MV8xNiI+RHVwX0ZpZWxkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNTFfMTYiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE1MV8xNiI+VG9wPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNTFfMTYiPkxlZnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEdXBfRmllbGQsICJkdXBfZmllbGQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTZfNyI+RjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNTFfMTYiPkR1cF9GaWVsZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyMV8yNCI+RmxkPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjJfMjQiPlRvcDwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyM18yNCI+TGVmdDwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE1Nl83Ij5GPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNTZfNyI+RjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyMV8xMyI+RHVwbGljYXRlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzI4XzEzIj5MaW5rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjhfMTkiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjlfMTkiPlRvcDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzBfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMzMF8xOSI+TGVmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzE2Ij5MbmtfRmllbGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE3Ml8xNiI+RmxkPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3M18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTcyXzE2Ij5Ub3A8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE3Ml8xNiI+TGVmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIExua19GaWVsZCwgImxpbmtfZmllbGQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzdfNyI+RjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNzJfMTYiPkxua19GaWVsZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyOF8xOSI+RmxkPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMjlfMTkiPlRvcDwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMzMF8xOSI+TGVmdDwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE3N183Ij5GPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNzdfNyI+RjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyOF8xMyI+TGluazwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfanVzdC4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMzlfMTQiPlNldF9KdXN0aWZpY2F0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMzlfMzMiPkZsZDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNDBfMzMiPkp1c3Q8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82Ml85Ij5GaWVsZF9KdXN0aWZpY2F0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82Ml8zMyI+Tm9uZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Nl8xNiI+U2V0X0ZpZWxkX0p1c3Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE5Nl8xNiI+RmxkPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xOTZfMTYiPkp1c3Q8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GaWVsZF9KdXN0LCAic2V0X2ZpZWxkX2p1c3QiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDBfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9CisgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE5Nl8xNiI+U2V0X0ZpZWxkX0p1c3Q8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zMzlfMzMiPkZsZDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjJfOSI+RmllbGRfSnVzdGlmaWNhdGlvbjwvQT4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNDBfMzMiPkp1c3Q8L0E+KSkpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjAwXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMDBfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzM5XzE0Ij5TZXRfSnVzdGlmaWNhdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM0NV8xMyI+R2V0X0p1c3RpZmljYXRpb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTFfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM0NV8zMiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjJfOSI+RmllbGRfSnVzdGlmaWNhdGlvbjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEzXzE2Ij5GaWVsZF9KdXN0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMTNfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX0p1c3QsICJmaWVsZF9qdXN0Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjJfOSI+RmllbGRfSnVzdGlmaWNhdGlvbjwvQT4nVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMTNfMTYiPkZpZWxkX0p1c3Q8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNDVfMzIiPkZsZDwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzQ1XzEzIj5HZXRfSnVzdGlmaWNhdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfYnVmZmVyLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM1NF8xNCI+U2V0X0J1ZmZlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNTVfNyI+RmxkPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU2XzciPkJ1ZmZlcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4nRmlyc3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNTdfNyI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMF8xMiI+Q2hhcl9QdHI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmNoYXI7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzFfMTYiPlNldF9GbGRfQnVmZmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMxXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzFfMTYiPkZsZDwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzJfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIzMV8xNiI+QnVmbnVtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMzXzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzFfMTYiPlM8L0E+PC9GT05UPiAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjMwXzEyIj5DaGFyX1B0cjwvQT4pCisgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZsZF9CdWZmZXIsICJzZXRfZmllbGRfYnVmZmVyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM3XzciPlR4dDwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNTdfNyI+U3RyPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzhfNyI+TGVuPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzOV83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU3XzciPlN0cjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIzN183Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzhfNyI+TGVuPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzlfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzFfMTYiPlNldF9GbGRfQnVmZmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU1XzciPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNTZfNyI+QnVmZmVyPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIzN183Ij5UeHQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzdfNyI+VHh0PC9BPidGaXJzdCknPGI+QWNjZXNzPC9iPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjM5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMzlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzU0XzE0Ij5TZXRfQnVmZmVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM2Ml8xNCI+R2V0X0J1ZmZlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjNfNyI+RmxkPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY0XzciPkJ1ZmZlcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4nRmlyc3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjVfNyI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU1XzE2Ij5GaWVsZF9CdWZmZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI1NV8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU2XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNTVfMTYiPkI8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX0J1ZmZlciwgImZpZWxkX2J1ZmZlciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI1NV8xNiI+RmllbGRfQnVmZmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzYzXzciPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjRfNyI+QnVmZmVyPC9BPikpLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjVfNyI+U3RyPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM2Ml8xNCI+R2V0X0J1ZmZlcjwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzY4XzEzIj5HZXRfQnVmZmVyPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjYzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM2OV83Ij5GbGQ8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNzBfNyI+QnVmZmVyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPidGaXJzdCkgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY2XzE2Ij5GaWVsZF9CdWZmZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI2Nl8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNjZfMTYiPkI8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX0J1ZmZlciwgImZpZWxkX2J1ZmZlciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjY2XzE2Ij5GaWVsZF9CdWZmZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjlfNyI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM3MF83Ij5CdWZmZXI8L0E+KSkpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNjhfMTMiPkdldF9CdWZmZXI8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzc2XzE0Ij5TZXRfU3RhdHVzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNzZfMjYiPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzc3XzI2Ij5TdGF0dXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3OF8xNiI+U2V0X0ZsZF9TdGF0dXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzhfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI3OF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzlfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI3OF8xNiI+U3Q8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmxkX1N0YXR1cywgInNldF9maWVsZF9zdGF0dXMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODJfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI3OF8xNiI+U2V0X0ZsZF9TdGF0dXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNzZfMjYiPkZsZDwvQT4sIEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zNzdfMjYiPlN0YXR1czwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI4Ml83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzc2XzE0Ij5TZXRfU3RhdHVzPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzgyXzEzIj5DaGFuZ2VkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkxXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODJfMjIiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkzXzE2Ij5GaWVsZF9TdGF0dXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI5M18xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmllbGRfU3RhdHVzLCAiZmllbGRfc3RhdHVzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk2XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI5M18xNiI+RmllbGRfU3RhdHVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzgyXzIyIj5GbGQ8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI5Nl83Ij5SZXM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkN1cnNlc19GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4Ml8xMyI+Q2hhbmdlZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODdfMTQiPlNldF9NYXhpbXVtX1NpemU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDdfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM4N18zMiI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA4XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODhfMzIiPk1heDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IE5hdHVyYWwgOj0gMCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzEwXzE2Ij5TZXRfRmllbGRfTWF4PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzEwXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMTBfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTFfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMxMF8xNiI+TTwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfTWF4LCAic2V0X21heF9maWVsZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzEwXzE2Ij5TZXRfRmllbGRfTWF4PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzg3XzMyIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzg4XzMyIj5NYXg8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMTRfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMxNF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODdfMTQiPlNldF9NYXhpbXVtX1NpemU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX29wdHMuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzk3XzE0Ij5TZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyN18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzk3XzI3Ij5GbGQ8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyOF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzk4XzI3Ij5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzMF8xNiI+U2V0X0ZpZWxkX09wdHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzBfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMzMF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzFfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMzMF8xNiI+T3B0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfT3B0cywgInNldF9maWVsZF9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM0XzciPk9wdDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IEZPU18yX0NJbnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM5OF8yNyI+T3B0aW9uczwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzVfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMzNV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMzMF8xNiI+U2V0X0ZpZWxkX09wdHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zOTdfMjciPkZsZDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMzNF83Ij5PcHQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMzVfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMzNV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zOTdfMTQiPlNldF9PcHRpb25zPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwM18xNCI+U3dpdGNoX09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwM18zMCI+RmxkPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwNF8zMCI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0N18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDA1XzMwIj5PbjwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0OV8xNiI+RmllbGRfT3B0c19PbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0OV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzQ5XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUwXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNDlfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmllbGRfT3B0c19PbiwgImZpZWxkX29wdHNfb24iKTsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1Ml8xNiI+RmllbGRfT3B0c19PZmY8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTJfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1Ml8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTNfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM1Ml8xNiI+T3B0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9PcHRzX09mZiwgImZpZWxkX29wdHNfb2ZmIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU2XzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTdfNyI+T3B0PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gRk9TXzJfQ0ludCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDA0XzMwIj5PcHRpb25zPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MDVfMzAiPk9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzU2XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzQ5XzE2Ij5GaWVsZF9PcHRzX09uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDAzXzMwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNTdfNyI+T3B0PC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzU2XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzUyXzE2Ij5GaWVsZF9PcHRzX09mZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQwM18zMCI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzU3XzciPk9wdDwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzU2XzciPkVycjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNTZfNyI+RXJyPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDAzXzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTFfMTQiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTFfMjciPkZsZDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3Ml8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDEyXzI3Ij5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzRfMTYiPkZpZWxkX09wdHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM3NF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmllbGRfT3B0cywgImZpZWxkX29wdHMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzc0XzE2Ij5GaWVsZF9PcHRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDExXzI3Ij5GbGQ8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDEyXzI3Ij5PcHRpb25zPC9BPiA6PSBDSW50XzJfRk9TICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNzdfNyI+UmVzPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxMV8xNCI+R2V0X09wdGlvbnM8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTZfMTMiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTZfMjYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODdfNyI+Rm9zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDExXzE0Ij5HZXRfT3B0aW9uczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQxNl8yNiI+RmxkPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzg3XzciPkZvczwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zODdfNyI+Rm9zPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDE2XzEzIj5HZXRfT3B0aW9uczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fZmllbGRfYXR0cmlidXRlcy4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MjZfMTQiPlNldF9Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQyN183Ij5GbGQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDAxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQyOF83Ij5Gb3JlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MjlfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDRfMTYiPlNldF9GaWVsZF9Gb3JlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA0XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MDRfMTYiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwNV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDA0XzE2Ij5BdHRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfRm9yZSwgInNldF9maWVsZF9mb3JlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA4XzciPkNoPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDI5XzciPkNvbG9yPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQyOF83Ij5Gb3JlPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0KKyAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDA0XzE2Ij5TZXRfRmllbGRfRm9yZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQyN183Ij5GbGQ8L0E+LCBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQwOF83Ij5DaDwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MTFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQxMV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MjZfMTQiPlNldF9Gb3JlZ3JvdW5kPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzNF8xNCI+Rm9yZWdyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyMV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM0XzI2Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyMl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM1XzI2Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyNF8xNiI+RmllbGRfRm9yZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyNF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDI0XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9Gb3JlLCAiZmllbGRfZm9yZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MzVfMjYiPkZvcmU8L0E+IDo9IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDI0XzE2Ij5GaWVsZF9Gb3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM0XzI2Ij5GbGQ8L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM0XzE0Ij5Gb3JlZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM5XzE0Ij5Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MzlfMjYiPkZsZDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzMV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDQwXzI2Ij5Gb3JlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDFfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM0XzE2Ij5GaWVsZF9Gb3JlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM0XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MzRfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX0ZvcmUsICJmaWVsZF9mb3JlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0MF8yNiI+Rm9yZTwvQT4gIDo9IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDM0XzE2Ij5GaWVsZF9Gb3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM5XzI2Ij5GbGQ8L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0MV8yNiI+Q29sb3I8L0E+IDo9IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDM0XzE2Ij5GaWVsZF9Gb3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDM5XzI2Ij5GbGQ8L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQzOV8xNCI+Rm9yZWdyb3VuZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDZfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0N183Ij5GbGQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0OF83Ij5CYWNrPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDlfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDhfMTYiPlNldF9GaWVsZF9CYWNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ4XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NDhfMTYiPkZsZDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5BdHRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRmllbGRfQmFjaywgInNldF9maWVsZF9iYWNrIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUyXzciPkNoPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDQ5XzciPkNvbG9yPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0OF83Ij5CYWNrPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1NV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0KKyAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5TZXRfRmllbGRfQmFjazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ0N183Ij5GbGQ8L0E+LCBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ1Ml83Ij5DaDwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NTVfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ1NV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NDZfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1NF8xNCI+QmFja2dyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU0XzI2Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU1XzI2Ij5CYWNrPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2OF8xNiI+RmllbGRfQmFjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2OF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDY4XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGaWVsZF9CYWNrLCAiZmllbGRfYmFjayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NTVfMjYiPkJhY2s8L0E+IDo9IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDY4XzE2Ij5GaWVsZF9CYWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU0XzI2Ij5GbGQ8L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU0XzE0Ij5CYWNrZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU5XzE0Ij5CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NTlfMjYiPkZsZDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDYwXzI2Ij5CYWNrPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjFfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc4XzE2Ij5GaWVsZF9CYWNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc4XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NzhfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZpZWxkX0JhY2ssICJmaWVsZF9iYWNrIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ2MF8yNiI+QmFjazwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDc4XzE2Ij5GaWVsZF9CYWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU5XzI2Ij5GbGQ8L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ2MV8yNiI+Q29sb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDc4XzE2Ij5GaWVsZF9CYWNrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDU5XzI2Ij5GbGQ8L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ1OV8xNCI+QmFja2dyb3VuZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjZfMTQiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg3XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjZfMzMiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODhfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ2N18zMyI+UGFkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyIDo9IFNwYWNlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTBfMTYiPlNldF9GaWVsZF9QYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTBfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ5MF8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5MV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDkwXzE2Ij5DaDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GaWVsZF9QYWQsICJzZXRfZmllbGRfcGFkIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDk0XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80OTBfMTYiPlNldF9GaWVsZF9QYWQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NjZfMzMiPkZsZDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKENoYXJhY3RlcidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ2N18zMyI+UGFkPC9BPikpKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ5NF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDk0XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ2Nl8xNCI+U2V0X1BhZF9DaGFyYWN0ZXI8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDcyXzE0Ij5QYWRfQ2hhcmFjdGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NzJfMjkiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ3M18yOSI+UGFkPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IENoYXJhY3RlcikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA3XzE2Ij5GaWVsZF9QYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUwN18xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmllbGRfUGFkLCAiZmllbGRfcGFkIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ3M18yOSI+UGFkPC9BPiA6PSBDaGFyYWN0ZXInVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MDdfMTYiPkZpZWxkX1BhZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ3Ml8yOSI+RmxkPC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80NzJfMTQiPlBhZF9DaGFyYWN0ZXI8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2ZpZWxkX2luZm8uM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDgyXzE0Ij5JbmZvPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTE5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODJfMjAiPkZsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjBfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4M18yMCI+TGluZXM8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyMV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDg0XzIwIj5Db2x1bW5zPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4NV8yMCI+Rmlyc3RfUm93PC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODZfMjAiPkZpcnN0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODdfMjAiPk9mZl9TY3JlZW48L0E+PC9GT05UPiAgICAgICAgIDogPGI+b3V0PC9iPiBOYXR1cmFsOworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI1XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODhfMjAiPkFkZGl0aW9uYWxfQnVmZmVyczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI3XzEyIj5DX0ludF9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI4XzE2Ij5GbGRfSW5mbzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTI4XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTI4XzE2Ij5MPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjhfMTYiPkM8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiI+RnI8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfMzYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiI+RmM8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiI+T3M8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfNDQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyOF8xNiI+QWI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyN18xMiI+Q19JbnRfQWNjZXNzPC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZsZF9JbmZvLCAiZmllbGRfaW5mbyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzM183Ij5MPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTMzXzEwIj5DPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTMzXzEzIj5GcjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzM18xNyI+RmM8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzNfMjEiPk9zPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTMzXzI1Ij5BYjwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzNF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTI4XzE2Ij5GbGRfSW5mbzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4Ml8yMCI+RmxkPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzciPkw8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM18xMCI+QzwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzEzIj5GcjwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzE3Ij5GYzwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzIxIj5PczwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzI1Ij5BYjwvQT4nPGI+QWNjZXNzPC9iPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzRfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzNF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODNfMjAiPkxpbmVzPC9BPiAgICAgICAgICAgICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzNfNyI+TDwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDg0XzIwIj5Db2x1bW5zPC9BPiAgICAgICAgICAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzNfMTAiPkM8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4NV8yMCI+Rmlyc3RfUm93PC9BPiAgICAgICAgICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTMzXzEzIj5GcjwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDg2XzIwIj5GaXJzdF9Db2x1bW48L0E+ICAgICAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUzM18xNyI+RmM8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ4N18yMCI+T2ZmX1NjcmVlbjwvQT4gICAgICAgICA6PSBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzNfMjEiPk9zPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80ODhfMjAiPkFkZGl0aW9uYWxfQnVmZmVyczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MzNfMjUiPkFiPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDgyXzE0Ij5JbmZvPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5M18xNCI+RHluYW1pY19JbmZvPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OTNfMjgiPkZsZDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1NF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDk0XzI4Ij5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU1XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OTVfMjgiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1Nl8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDk2XzI4Ij5NYXg8L0E+PC9GT05UPiAgICAgOiA8Yj5vdXQ8L2I+IE5hdHVyYWwpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU4XzEyIj5DX0ludF9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU5XzE2Ij5EeW5fSW5mbzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU5XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTlfMzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1OV8xNiI+TDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV80MiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU5XzE2Ij5DPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU5XzQ1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NTlfMTYiPk08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1OF8xMiI+Q19JbnRfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEeW5fSW5mbywgImR5bmFtaWNfZmllbGRfaW5mbyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2Ml83Ij5MPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTYyXzEwIj5DPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTYyXzEzIj5NPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTYzXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NTlfMTYiPkR5bl9JbmZvPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDkzXzI4Ij5GbGQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NjJfNyI+TDwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTYyXzEwIj5DPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NjJfMTMiPk08L0E+JzxiPkFjY2VzczwvYj4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTYzXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NjNfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDk0XzI4Ij5MaW5lczwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU2Ml83Ij5MPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OTVfMjgiPkNvbHVtbnM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NjJfMTAiPkM8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ5Nl8yOCI+TWF4PC9BPiAgICAgOj0gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTYyXzEzIj5NPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDkzXzE0Ij5EeW5hbWljX0luZm88L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX3dpbi4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MDVfMTQiPlNldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUwNV8yNiI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUwNl8yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg1XzE2Ij5TZXRfRm9ybV9XaW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4NV8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4NV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9Gb3JtX1dpbiwgInNldF9mb3JtX3dpbiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTg1XzE2Ij5TZXRfRm9ybV9XaW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MDVfMjYiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUwNl8yNiI+V2luPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTg5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81ODlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTA1XzE0Ij5TZXRfV2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTExXzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTFfMjUiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDBfMTYiPkZvcm1fV2luPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjAwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MDBfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGb3JtX1dpbiwgImZvcm1fd2luIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjAzXzciPlc8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYwMF8xNiI+Rm9ybV9XaW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTFfMjUiPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYwM183Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTExXzEzIj5HZXRfV2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxNl8xNCI+U2V0X1N1Yl9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxNl8zMCI+RnJtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjExXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTdfMzAiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxM18xNiI+U2V0X0Zvcm1fU3ViPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MTNfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MTNfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRm9ybV9TdWIsICJzZXRfZm9ybV9zdWIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYxM18xNiI+U2V0X0Zvcm1fU3ViPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTE2XzMwIj5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTdfMzAiPldpbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYxN183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjE3XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxNl8xNCI+U2V0X1N1Yl9XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjJfMTMiPkdldF9TdWJfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjJfMjkiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjhfMTYiPkZvcm1fU3ViPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MjhfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGb3JtX1N1YiwgImZvcm1fc3ViIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjMxXzciPlc8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYyOF8xNiI+Rm9ybV9TdWI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjJfMjkiPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYzMV83Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTIyXzEzIj5HZXRfU3ViX1dpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjdfMTQiPlNjYWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM4XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjdfMjEiPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzlfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUyOF8yMSI+TGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQwXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjlfMjEiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQyXzEyIj5DX0ludF9BY2Nlc3M8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQzXzE2Ij5NX1NjYWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQzXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDNfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQzXzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDNfMTYiPllwPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQzXzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDNfMTYiPlhwPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDJfMTIiPkNfSW50X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTV9TY2FsZSwgInNjYWxlX2Zvcm0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDZfNyI+WDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0Nl8xMCI+WTwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0N183Ij5SZXM8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY0M18xNiI+TV9TY2FsZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUyN18yMSI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjQ2XzEwIj5ZPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDZfNyI+WDwvQT4nPGI+QWNjZXNzPC9iPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY0N183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTI4XzIxIj5MaW5lczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NDZfMTAiPlk8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUyOV8yMSI+Q29sdW1uczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY0Nl83Ij5YPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUyN18xNCI+U2NhbGU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBtZW51X2hvb2suM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQxXzE0Ij5TZXRfRmllbGRfSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYyXzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDFfMzUiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2M18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQyXzM1Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2NV8xNiI+U2V0X0ZpZWxkX0luaXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjVfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY2NV8xNiI+RnJtPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjZfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY2NV8xNiI+UHJvYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZpZWxkX0luaXQsICJzZXRfZmllbGRfaW5pdCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjY1XzE2Ij5TZXRfRmllbGRfSW5pdDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0MV8zNSI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQyXzM1Ij5Qcm9jPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjY5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NjlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQxXzE0Ij5TZXRfRmllbGRfSW5pdF9Ib29rPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0N18xNCI+U2V0X0ZpZWxkX1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3OF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQ3XzM1Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzlfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0OF8zNSI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODFfMTYiPlNldF9GaWVsZF9UZXJtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgxXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82ODFfMTYiPkZybTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgyXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82ODFfMTYiPlByb2M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9GaWVsZF9UZXJtLCAic2V0X2ZpZWxkX3Rlcm0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODVfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY4MV8xNiI+U2V0X0ZpZWxkX1Rlcm08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDdfMzUiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU0OF8zNSI+UHJvYzwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjg1XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82ODVfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTQ3XzE0Ij5TZXRfRmllbGRfVGVybV9Ib29rPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1M18xNCI+U2V0X0Zvcm1fSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk0XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTNfMzQiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk1XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTRfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk3XzE2Ij5TZXRfRm9ybV9Jbml0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk3XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82OTdfMTYiPkZybTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OThfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY5N18xNiI+UHJvYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0Zvcm1fSW5pdCwgInNldF9mb3JtX2luaXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY5N18xNiI+U2V0X0Zvcm1fSW5pdDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1M18zNCI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTU0XzM0Ij5Qcm9jPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzAxXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MDFfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTUzXzE0Ij5TZXRfRm9ybV9Jbml0X0hvb2s8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTU5XzE0Ij5TZXRfRm9ybV9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTBfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1OV8zNCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTFfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2MF8zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTNfMTYiPlNldF9Gb3JtX1Rlcm08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTNfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcxM18xNiI+RnJtPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxNF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzEzXzE2Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfRm9ybV9UZXJtLCAic2V0X2Zvcm1fdGVybSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxN183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzEzXzE2Ij5TZXRfRm9ybV9UZXJtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTU5XzM0Ij5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NjBfMzQiPlByb2M8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzcxN183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzE3XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1OV8xNCI+U2V0X0Zvcm1fVGVybV9Ib29rPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9maWVsZHMuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTg5XzE0Ij5SZWRlZmluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczMF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTg5XzI0Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzMxXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OTBfMjQiPkZsZHM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzRfOSI+RmllbGRfQXJyYXlfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzMzXzE2Ij5TZXRfRnJtX0ZpZWxkczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczM18zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzMzXzE2Ij5Gcm08L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzRfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzczM18xNiI+SXRlbXM8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9Gcm1fRmllbGRzLCAic2V0X2Zvcm1fZmllbGRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM3XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTkwXzI0Ij5GbGRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTkwXzI0Ij5GbGRzPC9BPidMYXN0KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OTBfMjQiPkZsZHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OTBfMjQiPkZsZHM8L0E+J0xhc3QpIC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MzdfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MzNfMTYiPlNldF9Gcm1fRmllbGRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTg5XzI0Ij5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OTBfMjQiPkZsZHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OTBfMjQiPkZsZHM8L0E+J0ZpcnN0KSdBZGRyZXNzKTsKKyAgICAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzM3XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MzdfNyI+UmVzPC9BPik7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81ODlfMTQiPlJlZGVmaW5lPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjAxXzEzIj5GaWVsZHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTJfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMV8yMSI+RnJtPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1M18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjAyXzIxIj5JbmRleDwvQT48L0ZPTlQ+IDogUG9zaXRpdmUpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnVzZTwvYj4gRl9BcnJheTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IENfRmllbGRzICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1N18yNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiBQb2ludGVyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENfRmllbGRzLCAiZm9ybV9maWVsZHMiKTsKKworICAgICAgUCA6IFBvaW50ZXIgOj0gQ19GaWVsZHMgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMV8yMSI+RnJtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiBQID0gPGI+bnVsbDwvYj4gPGI+b3I8L2I+IDxiPmVsc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMl8yMSI+SW5kZXg8L0E+ICZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjA3XzEzIj5GaWVsZF9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMV8yMSI+RnJtPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIFAgOj0gUCArIHB0cmRpZmZfdCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwMl8yMSI+SW5kZXg8L0E+KSAtIDEpOworICAgICAgICAgPGI+cmV0dXJuPC9iPiBQLjxiPmFsbDwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjAxXzEzIj5GaWVsZHM8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzcyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDdfMTMiPkZpZWxkX0NvdW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzcyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDdfMjYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gTmF0dXJhbAorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NzRfMTYiPkNvdW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzc0XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83NzRfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQ291bnQsICJmaWVsZF9jb3VudCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc3NF8xNiI+Q291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDdfMjYiPkZybTwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjA3XzEzIj5GaWVsZF9Db3VudDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzgyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTJfMTQiPk1vdmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYxMl8yMCI+RmxkPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzgzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTNfMjAiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzg0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTRfMjAiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Nl8xNiI+TW92ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Nl8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzg2XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODZfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc4Nl8xNiI+TDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Nl8zOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzg2XzE2Ij5DPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNb3ZlLCAibW92ZV9maWVsZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzg2XzE2Ij5Nb3ZlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjEyXzIwIj5GbGQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjEzXzIwIj5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTRfMjAiPkNvbHVtbjwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc4OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzg5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYxMl8xNCI+TW92ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fbmV3LjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjIzXzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDJfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18yMSI+RmllbGRzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzRfOSI+RmllbGRfQXJyYXlfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDRfMTYiPk5ld0Zvcm08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgwNF8xNiI+RmllbGRzPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXdGb3JtLCAibmV3X2Zvcm0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDdfNyI+TTwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18yMSI+RmllbGRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjIzXzIxIj5GaWVsZHM8L0E+J0xhc3QpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTlfNCI+TnVsbF9GaWVsZDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18yMSI+RmllbGRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjIzXzIxIj5GaWVsZHM8L0E+J0xhc3QpIC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MDdfNyI+TTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODA0XzE2Ij5OZXdGb3JtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjIzXzIxIj5GaWVsZHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MjNfMjEiPkZpZWxkczwvQT4nRmlyc3QpJ0FkZHJlc3MpOworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgwN183Ij5NPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwXzQiPk51bGxfRm9ybTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgwN183Ij5NPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MjNfMTMiPkNyZWF0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MzRfMTQiPkRlbGV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyM18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjM0XzIyIj5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjVfMTYiPkZyZWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjVfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgyNV8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGcmVlLCAiZnJlZV9mb3JtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI4XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MjVfMTYiPkZyZWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MzRfMjIiPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODI4XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MjhfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYzNF8yMiI+RnJtPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MF80Ij5OdWxsX0Zvcm08L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MzRfMTQiPkRlbGV0ZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fb3B0cy4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NDRfMTQiPlNldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NDRfMjciPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY0NV8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDVfMTYiPlNldF9Gb3JtX09wdHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDVfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg0NV8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ2XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NDVfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0Zvcm1fT3B0cywgInNldF9mb3JtX29wdHMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDlfNyI+T3B0PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gRnJtT1NfMl9DSW50ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NDVfMjciPk9wdGlvbnM8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODUwXzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NTBfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NDVfMTYiPlNldF9Gb3JtX09wdHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NDRfMjciPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg0OV83Ij5PcHQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODUwXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NTBfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjQ0XzE0Ij5TZXRfT3B0aW9uczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODYwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NTBfMTQiPlN3aXRjaF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODYwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NTBfMzAiPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1MV8zMCI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUyXzMwIj5PbjwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2NF8xNiI+Rm9ybV9PcHRzX09uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjRfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjRfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRm9ybV9PcHRzX09uLCAiZm9ybV9vcHRzX29uIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjdfMTYiPkZvcm1fT3B0c19PZmY8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjdfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2N18xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY4XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjdfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRm9ybV9PcHRzX09mZiwgImZvcm1fb3B0c19vZmYiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzFfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3Ml83Ij5PcHQ8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSBGcm1PU18yX0NJbnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1MV8zMCI+T3B0aW9uczwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUyXzMwIj5PbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg3MV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2NF8xNiI+Rm9ybV9PcHRzX09uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUwXzMwIj5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NzJfNyI+T3B0PC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODcxXzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODY3XzE2Ij5Gb3JtX09wdHNfT2ZmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjUwXzMwIj5Gcm08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NzJfNyI+T3B0PC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NzFfNyI+RXJyPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg3MV83Ij5FcnI8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NTBfMTQiPlN3aXRjaF9PcHRpb25zPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1OF8xNCI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODZfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1OF8yNyI+RnJtPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY1OV8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg5XzE2Ij5Gb3JtX09wdHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg4OV8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGb3JtX09wdHMsICJmb3JtX29wdHMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTJfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODg5XzE2Ij5Gb3JtX09wdHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NThfMjciPkZybTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NTlfMjciPk9wdGlvbnM8L0E+IDo9IENJbnRfMl9Gcm1PUyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODkyXzciPlJlczwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NThfMTQiPkdldF9PcHRpb25zPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjYzXzEzIj5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5OV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjYzXzI2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYwXzQiPk51bGxfRm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MDFfNyI+Rm9zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjU4XzE0Ij5HZXRfT3B0aW9uczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY2M18yNiI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTAxXzciPkZvczwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MDFfNyI+Rm9zPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjYzXzEzIj5HZXRfT3B0aW9uczwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fcG9zdC4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTEzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NzJfMTQiPlBvc3Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY3Ml8yMCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NzNfMjAiPlBvc3Q8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNl8xNiI+TV9Qb3N0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE2XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MTZfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTV9Qb3N0LCAicG9zdF9mb3JtIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MThfMTYiPk1fVW5wb3N0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MThfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTV9VbnBvc3QsICJ1bnBvc3RfZm9ybSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyMV83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY3M18yMCI+UG9zdDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkyMV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkxNl8xNiI+TV9Qb3N0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjcyXzIwIj5Gcm08L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MjFfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MThfMTYiPk1fVW5wb3N0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjcyXzIwIj5Gcm08L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkyMV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTIxXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY3Ml8xNCI+UG9zdDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IG1hbiBwYWdlIGZvcm1fY3Vyc29yLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4M18xNCI+UG9zaXRpb25fQ3Vyc29yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM5XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82ODNfMzEiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0MV8xNiI+UG9zX0Zvcm1fQ3Vyc29yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQxXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NDFfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUG9zX0Zvcm1fQ3Vyc29yLCAicG9zX2Zvcm1fY3Vyc29yIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ0XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NDFfMTYiPlBvc19Gb3JtX0N1cnNvcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4M18zMSI+RnJtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTQ0XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NDRfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjgzXzE0Ij5Qb3NpdGlvbl9DdXJzb3I8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2RhdGEuM3g8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTU3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTJfMTMiPkRhdGFfQWhlYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NTdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5Ml8yNSI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1OV8xNiI+QWhlYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NTlfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk1OV8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBBaGVhZCwgImRhdGFfYWhlYWQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NjJfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTU5XzE2Ij5BaGVhZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5Ml8yNSI+RnJtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85NjJfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTJfMTMiPkRhdGFfQWhlYWQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTczXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTdfMTMiPkRhdGFfQmVoaW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTczXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OTdfMjYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzVfMTYiPkJlaGluZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3NV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTc1XzE2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEJlaGluZCwgImRhdGFfYmVoaW5kIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTc4XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk3NV8xNiI+QmVoaW5kPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjk3XzI2Ij5Gcm08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk3OF83Ij5SZXM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkN1cnNlc19GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5N18xMyI+RGF0YV9CZWhpbmQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBtYW4gcGFnZSBmb3JtX2RyaXZlci4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcxMV8xMyI+RHJpdmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkzXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MTFfMjEiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTk0XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MTJfMjEiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjhfOSI+S2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcwNV85Ij5Ecml2ZXJfUmVzdWx0PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTZfMTYiPkZybV9Ecml2ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTZfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk5Nl8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTZfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk5Nl8xNiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBGcm1fRHJpdmVyLCAiZm9ybV9kcml2ZXIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTlfNyI+UjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTZfMTYiPkZybV9Ecml2ZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MTFfMjEiPkZybTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MTJfMjEiPktleTwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk5OV83Ij5SPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTlfNyI+UjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODhfNCI+RV9Vbmtub3duX0NvbW1hbmQ8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcwN18yNyI+VW5rbm93bl9SZXF1ZXN0PC9BPjsKKyAgICAgICAgIDxiPmVsc2lmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTlfNyI+UjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTNfNCI+RV9JbnZhbGlkX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MDhfMjciPkludmFsaWRfRmllbGQ8L0E+OworICAgICAgICAgPGI+ZWxzaWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk5OV83Ij5SPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Ml80Ij5FX1JlcXVlc3RfRGVuaWVkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MDZfMjciPlJlcXVlc3RfRGVuaWVkPC9BPjsKKyAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTlfNyI+UjwvQT4pOworICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MDVfMjciPkZvcm1fT2s8L0E+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MDVfMjciPkZvcm1fT2s8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcxMV8xMyI+RHJpdmVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9wYWdlLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjNfMTQiPlNldF9DdXJyZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyM18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIzXzI3Ij5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjRfMjciPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyNl8xNiI+U2V0X0N1cnJlbnRfRmxkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyNl8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTAyNl8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI2XzQ1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDI2XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfQ3VycmVudF9GbGQsICJzZXRfY3VycmVudF9maWVsZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjZfMTYiPlNldF9DdXJyZW50X0ZsZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyM18yNyI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzI0XzI3Ij5GbGQ8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIzXzE0Ij5TZXRfQ3VycmVudDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDM4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjlfMTMiPkN1cnJlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDM4XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjlfMjIiPkZybTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQwXzE2Ij5DdXJyZW50X0ZsZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDBfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNDBfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEN1cnJlbnRfRmxkLCAiY3VycmVudF9maWVsZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDNfNyI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNDBfMTYiPkN1cnJlbnRfRmxkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzI5XzIyIj5Gcm08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNDNfNyI+RmxkPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDQzXzciPkZsZDwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyOV8xMyI+Q3VycmVudDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzM0XzE0Ij5TZXRfUGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTNfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNF8yNCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNV8yNCI+UGFnZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyMF85Ij5QYWdlX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIwXzkiPlBhZ2VfTnVtYmVyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1Nl8xNiI+U2V0X0ZybV9QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1Nl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA1Nl8xNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDU2XzQyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDU2XzE2Ij5QZzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0ZybV9QYWdlLCAic2V0X2Zvcm1fcGFnZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTZfMTYiPlNldF9Gcm1fUGFnZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNF8yNCI+RnJtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNV8yNCI+UGFnZTwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTlfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzM0XzE0Ij5TZXRfUGFnZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDY4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDBfMTMiPlBhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDY4XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDBfMTkiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIwXzkiPlBhZ2VfTnVtYmVyPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDcwXzE2Ij5HZXRfUGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNzBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNzBfMTYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X1BhZ2UsICJmb3JtX3BhZ2UiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDczXzciPlA8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDcwXzE2Ij5HZXRfUGFnZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc0MF8xOSI+RnJtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDczXzciPlA8L0E+ICZsdDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI4Nl80Ij5Gb3JtX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjBfOSI+UGFnZV9OdW1iZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDczXzciPlA8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDBfMTMiPlBhZ2U8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDgyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDVfMTMiPkdldF9JbmRleDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODJfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc0NV8yNCI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gUG9zaXRpdmUKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4NF8xNiI+R2V0X0ZpZWxkaW5kZXg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDg0XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDg0XzE2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfRmllbGRpbmRleCwgImZpZWxkX2luZGV4Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4N183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDg0XzE2Ij5HZXRfRmllbGRpbmRleDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc0NV8yNCI+RmxkPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDg3XzciPlJlczwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yODZfNCI+Rm9ybV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IFBvc2l0aXZlIChOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDg3XzciPlJlczwvQT4pICsgUG9zaXRpdmUnRmlyc3QpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDVfMTMiPkdldF9JbmRleDwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgbWFuIHBhZ2UgZm9ybV9uZXdfcGFnZS4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzU3XzE0Ij5TZXRfTmV3X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTAyXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NTdfMjgiPkZsZDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTAzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NThfMjgiPk5ld19QYWdlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTA1XzE2Ij5TZXRfUGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMDVfMTYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDVfMzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMDVfMTYiPkZsZzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X1BhZ2UsICJzZXRfbmV3X3BhZ2UiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTA4XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTA1XzE2Ij5TZXRfUGFnZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc1N18yOCI+RmxkPC9BPiwgQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc1OF8yOCI+TmV3X1BhZ2U8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTA4XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTA4XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc1N18xNCI+U2V0X05ld19QYWdlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMTdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc2M18xMyI+SXNfTmV3X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTE3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NjNfMjYiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExOV8xNiI+SXNfTmV3PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExOV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTExOV8xNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXNfTmV3LCAibmV3X3BhZ2UiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTIyXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMTlfMTYiPklzX05ldzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc2M18yNiI+RmxkPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTIyXzciPlJlczwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+Q3Vyc2VzX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzYzXzEzIj5Jc19OZXdfUGFnZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTMxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzZfMTQiPkZyZWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTMxXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzZfMjAiPkZBPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzRfOSI+RmllbGRfQXJyYXlfQWNjZXNzPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMzJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzN18yMCI+RnJlZV9GaWVsZHM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IFJlbGVhc2UgPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb24KKyAgICAgICAgKEZpZWxkX0FycmF5LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzRfOSI+RmllbGRfQXJyYXlfQWNjZXNzPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzZfMjAiPkZBPC9BPiAvPSA8Yj5udWxsPC9iPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzN18yMCI+RnJlZV9GaWVsZHM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5mb3I8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzOF8xNCI+STwvQT48L0ZPTlQ+IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzZfMjAiPkZBPC9BPidGaXJzdCAuLiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzIwIj5GQTwvQT4nTGFzdCAtIDEpIDxiPmxvb3A8L2I+CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzIwIj5GQTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMzhfMTQiPkk8L0E+KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81OV80Ij5OdWxsX0ZpZWxkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzE1XzE0Ij5EZWxldGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzZfMjAiPkZBPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEzOF8xNCI+STwvQT4pKTsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5sb29wPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgUmVsZWFzZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM2XzIwIj5GQTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzZfMTQiPkZyZWU8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTAyXzEzIj5EZWZhdWx0X0ZpZWxkX09wdGlvbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80MTZfMTMiPkdldF9PcHRpb25zPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTlfNCI+TnVsbF9GaWVsZDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDJfMTMiPkRlZmF1bHRfRmllbGRfT3B0aW9uczwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyNV8xMyI+RGVmYXVsdF9Gb3JtX09wdGlvbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NjNfMTMiPkdldF9PcHRpb25zPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjBfNCI+TnVsbF9Gb3JtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyNV8xMyI+RGVmYXVsdF9Gb3JtX09wdGlvbnM8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5YTViMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtCkBAIC0wLDAgKzEsNzg2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuRm9ybSAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMjkgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBmb3JtIGJpbmRpbmcuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgbW9kdWxlIGlzIGdlbmVyYXRlZC4gUGxlYXNlIGRvbid0IGNoYW5nZSBpdCBtYW51YWxseSE8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUnVuIHRoZSBnZW5lcmF0b3IgaW5zdGVhZC48L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gU3lzdGVtOworPGI+d2l0aDwvYj4gQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUxXzQwIj5Gb3JtczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl80OV8zNSI+Rm9ybXM8L0E+KTsKKyAgIDxiPnByYWdtYTwvYj4gTGlua2VyX09wdGlvbnMgKCItbGZvcm13Iik7CisgICA8Yj5wcmFnbWE8L2I+IExpbmtlcl9PcHRpb25zICgiLWxuY3Vyc2VzdyIpOworCisgICBTcGFjZSA6IENoYXJhY3RlciA8Yj5yZW5hbWVzPC9iPiBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xLlNwYWNlOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzkiPkZpZWxkPC9BPjwvRk9OVD4gICAgICAgIDxiPmlzPC9iPiA8Yj5wcml2YXRlPC9iPjsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfOSI+Rm9ybTwvQT48L0ZPTlQ+ICAgICAgICAgPGI+aXM8L2I+IDxiPnByaXZhdGU8L2I+OworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzQiPk51bGxfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF80Ij5OdWxsX0Zvcm08L0E+PC9GT05UPiAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzkiPkZpZWxkX0p1c3RpZmljYXRpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMzMiPk5vbmU8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18zMyI+TGVmdDwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzMzIj5DZW50ZXI8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV8zMyI+UmlnaHQ8L0E+PC9GT05UPik7CisKKyAgIDxiPnByYWdtYTwvYj4gV2FybmluZ3MgKE9mZik7CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzBfMTAiPlZpc2libGU8L0E+PC9GT05UPiAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8xMCI+QWN0aXZlPC9BPjwvRk9OVD4gICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyXzEwIj5QdWJsaWM8L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzNfMTAiPkVkaXQ8L0E+PC9GT05UPiAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF8xMCI+V3JhcDwvQT48L0ZPTlQ+ICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1XzEwIj5CbGFuazwvQT48L0ZPTlQ+ICAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzZfMTAiPkF1dG9fU2tpcDwvQT48L0ZPTlQ+ICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N18xMCI+TnVsbF9PazwvQT48L0ZPTlQ+ICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzEwIj5QYXNzX09rPC9BPjwvRk9OVD4gICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzlfMTAiPlN0YXRpYzwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuOworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPik7CisKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT4gPGI+dXNlPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzBfMTAiPlZpc2libGU8L0E+ICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDAgLi4gIDA7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MV8xMCI+QWN0aXZlPC9BPiAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMSAuLiAgMTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyXzEwIj5QdWJsaWM8L0E+ICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAyIC4uICAyOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzNfMTAiPkVkaXQ8L0E+ICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDMgLi4gIDM7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NF8xMCI+V3JhcDwvQT4gICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNCAuLiAgNDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc1XzEwIj5CbGFuazwvQT4gICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA1IC4uICA1OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzZfMTAiPkF1dG9fU2tpcDwvQT4gICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDYgLi4gIDY7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83N18xMCI+TnVsbF9PazwvQT4gICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNyAuLiAgNzsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzc4XzEwIj5QYXNzX09rPC9BPiAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA4IC4uICA4OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzlfMTAiPlN0YXRpYzwvQT4gICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDkgLi4gIDk7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+J1NpemUgPGI+dXNlPC9iPiAzMjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS5Ebmw8L0VNPjwvRk9OVD4KKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT24pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNDlfMTMiPkRlZmF1bHRfRmllbGRfT3B0aW9uczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBpbml0aWFsIGRlZmF1bHRzIGZvciB0aGUgZmllbGQgb3B0aW9ucy48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDJfMTMiPkRlZmF1bHRfRmllbGRfT3B0aW9uczwvQT4pOworCisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV8xMCI+TkxfT3ZlcmxvYWQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMF8xMCI+QlNfT3ZlcmxvYWQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+KTsKKworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPiA8Yj51c2U8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDlfMTAiPk5MX092ZXJsb2FkPC9BPiA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDAgLi4gIDA7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMTBfMTAiPkJTX092ZXJsb2FkPC9BPiA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDEgLi4gIDE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+J1NpemUgPGI+dXNlPC9iPiAzMjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS5Ebmw8L0VNPjwvRk9OVD4KKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT24pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExNTVfMTMiPkRlZmF1bHRfRm9ybV9PcHRpb25zPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIGluaXRpYWwgZGVmYXVsdHMgZm9yIHRoZSBmb3JtIG9wdGlvbnMuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI1XzEzIj5EZWZhdWx0X0Zvcm1fT3B0aW9uczwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gTmF0dXJhbDsKKworICAgPGI+dHlwZTwvYj4gRmllbGRfQXJyYXkgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoUG9zaXRpdmUgPGI+cmFuZ2U8L2I+ICZsdDsmZ3Q7KSA8Yj5vZjwvYj4gPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBDb252ZW50aW9uIChDLCBGaWVsZF9BcnJheSk7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IEZpZWxkX0FycmF5OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTMxXzE0Ij5GcmVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTMxXzIwIj5GQTwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzdfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMzJfMjAiPkZyZWVfRmllbGRzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJlbGVhc2UgdGhlIG1lbW9yeSBmb3IgYW4gYWxsb2NhdGVkIGZpZWxkIGFycmF5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIElmIEZyZWVfRmllbGRzIGlzIFRydWUsIGNhbGwgRGVsZXRlKCkgZm9yIGFsbCB0aGUgZmllbGRzIGluPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBhcnJheS48L0VNPjwvRk9OVD4KKworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4XzkiPktleV9Db2RlPC9BPiA8Yj5yYW5nZTwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDEpIC4uICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1Nyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIHByZWZpeCBGXyBzdGFuZHMgZm9yICJGb3JtIFJlcXVlc3QiPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NV80Ij5GX05leHRfUGFnZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0Nl80Ij5GX1ByZXZpb3VzX1BhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0N180Ij5GX0ZpcnN0X1BhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OF80Ij5GX0xhc3RfUGFnZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQ7CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwXzQiPkZfTmV4dF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxXzQiPkZfUHJldmlvdXNfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzQiPkZfRmlyc3RfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzXzQiPkZfTGFzdF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgODsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0XzQiPkZfU29ydGVkX05leHRfRmllbGQ8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgOTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1XzQiPkZfU29ydGVkX1ByZXZpb3VzX0ZpZWxkPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTA7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Nl80Ij5GX1NvcnRlZF9GaXJzdF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDExOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTdfNCI+Rl9Tb3J0ZWRfTGFzdF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU4XzQiPkZfTGVmdF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OV80Ij5GX1JpZ2h0X0ZpZWxkPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjBfNCI+Rl9VcF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxXzQiPkZfRG93bl9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTY7CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYzXzQiPkZfTmV4dF9DaGFyPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NF80Ij5GX1ByZXZpb3VzX0NoYXI8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE4OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjVfNCI+Rl9OZXh0X0xpbmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxOTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2XzQiPkZfUHJldmlvdXNfTGluZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjA7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2N180Ij5GX05leHRfV29yZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDIxOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjhfNCI+Rl9QcmV2aW91c19Xb3JkPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5XzQiPkZfQmVnaW5fRmllbGQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MF80Ij5GX0VuZF9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDI0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzFfNCI+Rl9CZWdpbl9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzQiPkZfRW5kX0xpbmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjY7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3M180Ij5GX0xlZnRfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDI3OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzRfNCI+Rl9SaWdodF9DaGFyPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyODsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1XzQiPkZfVXBfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMjk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Nl80Ij5GX0Rvd25fQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDMwOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OF80Ij5GX05ld19MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDMxOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzlfNCI+Rl9JbnNlcnRfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwXzQiPkZfSW5zZXJ0X0xpbmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMzM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MV80Ij5GX0RlbGV0ZV9DaGFyPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDM0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODJfNCI+Rl9EZWxldGVfUHJldmlvdXM8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgzXzQiPkZfRGVsZXRlX0xpbmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMzY7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NF80Ij5GX0RlbGV0ZV9Xb3JkPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDM3OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODVfNCI+Rl9DbGVhcl9FT0w8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAzODsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg2XzQiPkZfQ2xlYXJfRU9GPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMzk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4N180Ij5GX0NsZWFyX0ZpZWxkPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODhfNCI+Rl9PdmVybGF5X01vZGU8L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0MTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg5XzQiPkZfSW5zZXJ0X01vZGU8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNDI7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVydGljYWwgU2Nyb2xsaW5nPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Ml80Ij5GX1Njcm9sbEZvcndhcmRfTGluZTwvQT48L0ZPTlQ+ICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTNfNCI+Rl9TY3JvbGxCYWNrd2FyZF9MaW5lPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0NDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzQiPkZfU2Nyb2xsRm9yd2FyZF9QYWdlPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNDU7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NV80Ij5GX1Njcm9sbEJhY2t3YXJkX1BhZ2U8L0E+PC9GT05UPiAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQ2OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfNCI+Rl9TY3JvbGxGb3J3YXJkX0hhbGZQYWdlPC9BPjwvRk9OVD4gICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA0NzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzQiPkZfU2Nyb2xsQmFja3dhcmRfSGFsZlBhZ2U8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNDg7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSG9yaXpvbnRhbCBTY3JvbGxpbmc8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwXzQiPkZfSFNjcm9sbEZvcndhcmRfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNDk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMV80Ij5GX0hTY3JvbGxCYWNrd2FyZF9DaGFyPC9BPjwvRk9OVD4gICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDUwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDJfNCI+Rl9IU2Nyb2xsRm9yd2FyZF9MaW5lPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1MTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAzXzQiPkZfSFNjcm9sbEJhY2t3YXJkX0xpbmU8L0E+PC9GT05UPiAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTI7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNF80Ij5GX0hTY3JvbGxGb3J3YXJkX0hhbGZMaW5lPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDUzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDVfNCI+Rl9IU2Nyb2xsQmFja3dhcmRfSGFsZkxpbmU8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1NDsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDdfNCI+Rl9WYWxpZGF0ZV9GaWVsZDwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1NTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA4XzQiPkZfTmV4dF9DaG9pY2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNTY7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOV80Ij5GX1ByZXZpb3VzX0Nob2ljZTwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDU3OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZvciB0aG9zZSB3aG8gbGlrZSB0aGUgb2xkICdDJyBzdHlsZSByZXF1ZXN0IG5hbWVzPC9FTT48L0ZPTlQ+CisgICBSRVFfTkVYVF9QQUdFICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQ1XzQiPkZfTmV4dF9QYWdlPC9BPjsKKyAgIFJFUV9QUkVWX1BBR0UgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDZfNCI+Rl9QcmV2aW91c19QYWdlPC9BPjsKKyAgIFJFUV9GSVJTVF9QQUdFICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDdfNCI+Rl9GaXJzdF9QYWdlPC9BPjsKKyAgIFJFUV9MQVNUX1BBR0UgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDhfNCI+Rl9MYXN0X1BhZ2U8L0E+OworCisgICBSRVFfTkVYVF9GSUVMRCAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTUwXzQiPkZfTmV4dF9GaWVsZDwvQT47CisgICBSRVFfUFJFVl9GSUVMRCAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTUxXzQiPkZfUHJldmlvdXNfRmllbGQ8L0E+OworICAgUkVRX0ZJUlNUX0ZJRUxEICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE1Ml80Ij5GX0ZpcnN0X0ZpZWxkPC9BPjsKKyAgIFJFUV9MQVNUX0ZJRUxEICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNTNfNCI+Rl9MYXN0X0ZpZWxkPC9BPjsKKyAgIFJFUV9TTkVYVF9GSUVMRCAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNTRfNCI+Rl9Tb3J0ZWRfTmV4dF9GaWVsZDwvQT47CisgICBSRVFfU1BSRVZfRklFTEQgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTU1XzQiPkZfU29ydGVkX1ByZXZpb3VzX0ZpZWxkPC9BPjsKKyAgIFJFUV9TRklSU1RfRklFTEQgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNTZfNCI+Rl9Tb3J0ZWRfRmlyc3RfRmllbGQ8L0E+OworICAgUkVRX1NMQVNUX0ZJRUxEICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE1N180Ij5GX1NvcnRlZF9MYXN0X0ZpZWxkPC9BPjsKKyAgIFJFUV9MRUZUX0ZJRUxEICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNThfNCI+Rl9MZWZ0X0ZpZWxkPC9BPjsKKyAgIFJFUV9SSUdIVF9GSUVMRCAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNTlfNCI+Rl9SaWdodF9GaWVsZDwvQT47CisgICBSRVFfVVBfRklFTEQgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTYwXzQiPkZfVXBfRmllbGQ8L0E+OworICAgUkVRX0RPV05fRklFTEQgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE2MV80Ij5GX0Rvd25fRmllbGQ8L0E+OworCisgICBSRVFfTkVYVF9DSEFSICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTYzXzQiPkZfTmV4dF9DaGFyPC9BPjsKKyAgIFJFUV9QUkVWX0NIQVIgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNjRfNCI+Rl9QcmV2aW91c19DaGFyPC9BPjsKKyAgIFJFUV9ORVhUX0xJTkUgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNjVfNCI+Rl9OZXh0X0xpbmU8L0E+OworICAgUkVRX1BSRVZfTElORSAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE2Nl80Ij5GX1ByZXZpb3VzX0xpbmU8L0E+OworICAgUkVRX05FWFRfV09SRCAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE2N180Ij5GX05leHRfV29yZDwvQT47CisgICBSRVFfUFJFVl9XT1JEICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTY4XzQiPkZfUHJldmlvdXNfV29yZDwvQT47CisgICBSRVFfQkVHX0ZJRUxEICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTY5XzQiPkZfQmVnaW5fRmllbGQ8L0E+OworICAgUkVRX0VORF9GSUVMRCAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3MF80Ij5GX0VuZF9GaWVsZDwvQT47CisgICBSRVFfQkVHX0xJTkUgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTcxXzQiPkZfQmVnaW5fTGluZTwvQT47CisgICBSRVFfRU5EX0xJTkUgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTcyXzQiPkZfRW5kX0xpbmU8L0E+OworICAgUkVRX0xFRlRfQ0hBUiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3M180Ij5GX0xlZnRfQ2hhcjwvQT47CisgICBSRVFfUklHSFRfQ0hBUiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTc0XzQiPkZfUmlnaHRfQ2hhcjwvQT47CisgICBSRVFfVVBfQ0hBUiAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTc1XzQiPkZfVXBfQ2hhcjwvQT47CisgICBSRVFfRE9XTl9DSEFSICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTc2XzQiPkZfRG93bl9DaGFyPC9BPjsKKworICAgUkVRX05FV19MSU5FICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE3OF80Ij5GX05ld19MaW5lPC9BPjsKKyAgIFJFUV9JTlNfQ0hBUiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNzlfNCI+Rl9JbnNlcnRfQ2hhcjwvQT47CisgICBSRVFfSU5TX0xJTkUgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTgwXzQiPkZfSW5zZXJ0X0xpbmU8L0E+OworICAgUkVRX0RFTF9DSEFSICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE4MV80Ij5GX0RlbGV0ZV9DaGFyPC9BPjsKKyAgIFJFUV9ERUxfUFJFViAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODJfNCI+Rl9EZWxldGVfUHJldmlvdXM8L0E+OworICAgUkVRX0RFTF9MSU5FICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE4M180Ij5GX0RlbGV0ZV9MaW5lPC9BPjsKKyAgIFJFUV9ERUxfV09SRCAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODRfNCI+Rl9EZWxldGVfV29yZDwvQT47CisgICBSRVFfQ0xSX0VPTCAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTg1XzQiPkZfQ2xlYXJfRU9MPC9BPjsKKyAgIFJFUV9DTFJfRU9GICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODZfNCI+Rl9DbGVhcl9FT0Y8L0E+OworICAgUkVRX0NMUl9GSUVMRCAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE4N180Ij5GX0NsZWFyX0ZpZWxkPC9BPjsKKyAgIFJFUV9PVkxfTU9ERSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xODhfNCI+Rl9PdmVybGF5X01vZGU8L0E+OworICAgUkVRX0lOU19NT0RFICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE4OV80Ij5GX0luc2VydF9Nb2RlPC9BPjsKKworICAgUkVRX1NDUl9GTElORSAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE5Ml80Ij5GX1Njcm9sbEZvcndhcmRfTGluZTwvQT47CisgICBSRVFfU0NSX0JMSU5FICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTkzXzQiPkZfU2Nyb2xsQmFja3dhcmRfTGluZTwvQT47CisgICBSRVFfU0NSX0ZQQUdFICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTk0XzQiPkZfU2Nyb2xsRm9yd2FyZF9QYWdlPC9BPjsKKyAgIFJFUV9TQ1JfQlBBR0UgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xOTVfNCI+Rl9TY3JvbGxCYWNrd2FyZF9QYWdlPC9BPjsKKyAgIFJFUV9TQ1JfRkhQQUdFICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xOTZfNCI+Rl9TY3JvbGxGb3J3YXJkX0hhbGZQYWdlPC9BPjsKKyAgIFJFUV9TQ1JfQkhQQUdFICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xOTdfNCI+Rl9TY3JvbGxCYWNrd2FyZF9IYWxmUGFnZTwvQT47CisKKyAgIFJFUV9TQ1JfRkNIQVIgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yMDBfNCI+Rl9IU2Nyb2xsRm9yd2FyZF9DaGFyPC9BPjsKKyAgIFJFUV9TQ1JfQkNIQVIgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yMDFfNCI+Rl9IU2Nyb2xsQmFja3dhcmRfQ2hhcjwvQT47CisgICBSRVFfU0NSX0hGTElORSAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjAyXzQiPkZfSFNjcm9sbEZvcndhcmRfTGluZTwvQT47CisgICBSRVFfU0NSX0hCTElORSAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjAzXzQiPkZfSFNjcm9sbEJhY2t3YXJkX0xpbmU8L0E+OworICAgUkVRX1NDUl9IRkhBTEYgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzIwNF80Ij5GX0hTY3JvbGxGb3J3YXJkX0hhbGZMaW5lPC9BPjsKKyAgIFJFUV9TQ1JfSEJIQUxGICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yMDVfNCI+Rl9IU2Nyb2xsQmFja3dhcmRfSGFsZkxpbmU8L0E+OworCisgICBSRVFfVkFMSURBVElPTiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTQyXzEyIj5Gb3JtX1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMjA3XzQiPkZfVmFsaWRhdGVfRmllbGQ8L0E+OworICAgUkVRX05FWFRfQ0hPSUNFICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzIwOF80Ij5GX05leHRfQ2hvaWNlPC9BPjsKKyAgIFJFUV9QUkVWX0NIT0lDRSAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xNDJfMTIiPkZvcm1fUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8yMDlfNCI+Rl9QcmV2aW91c19DaG9pY2U8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MV8xNCI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc2XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MV8yOCI+S2V5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzdfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgyXzMzIj5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkwXzEzIj5SZXF1ZXN0X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzlfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkwXzI3Ij5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzE0Ml8xMiI+Rm9ybV9SZXF1ZXN0X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFJlcXVlc3RfTmFtZSk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRXhjZXB0aW9ucyAgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg2XzQiPkZvcm1fRXhjZXB0aW9uPC9BPjwvRk9OVD4gOiA8Yj5leGNlcHRpb248L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+Zm9ybV9maWVsZF9uZXcuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwOF8xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkzXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDhfMjEiPkhlaWdodDwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5NF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA5XzIxIj5XaWR0aDwvQT48L0ZPTlQ+ICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5NV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEwXzIxIj5Ub3A8L0E+PC9GT05UPiAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5Nl8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTExXzIxIj5MZWZ0PC9BPjwvRk9OVD4gICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk3XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTJfMjEiPk9mZl9TY3JlZW48L0E+PC9GT05UPiAgIDogTmF0dXJhbCA6PSAwOworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5OF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTEzXzIxIj5Nb3JlX0J1ZmZlcnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4nRmlyc3QpCisgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5uZXdfZmllbGQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQW4gb3ZlcmxvYWRlZCBDcmVhdGUgaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiBOZXdfRmllbGQgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA0XzI0Ij5IZWlnaHQ8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDVfMjQiPldpZHRoPC9BPjwvRk9OVD4gICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA2XzI0Ij5Ub3A8L0E+PC9GT05UPiAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwN18yNCI+TGVmdDwvQT48L0ZPTlQ+ICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwOF8yNCI+T2ZmX1NjcmVlbjwvQT48L0ZPTlQ+ICAgOiBOYXR1cmFsIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA5XzI0Ij5Nb3JlX0J1ZmZlcnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4nRmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzI5M18xMyI+Q3JlYXRlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+bmV3X2ZpZWxkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoTmV3X0ZpZWxkKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzE1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMzFfMTQiPkRlbGV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTMxXzIyIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZyZWVfZmllbGQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUmVzZXQgRmxkIHRvIE51bGxfRmllbGQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQW4gb3ZlcmxvYWRlZCBEZWxldGUgaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTQ3XzEzIj5EdXBsaWNhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE0N18yNCI+RmxkPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTQ4XzI0Ij5Ub3A8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjNfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE0OV8yNCI+TGVmdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmR1cF9maWVsZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKER1cGxpY2F0ZSk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzI4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xNjhfMTMiPkxpbms8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjhfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE2OF8xOSI+RmxkPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjlfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE2OV8xOSI+VG9wPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzMF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTcwXzE5Ij5MZWZ0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9uZXcuM3guaHRtbCI+bGlua19maWVsZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMyOF8xMyI+TGluazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwiPmZvcm1fZmllbGRfanVzdC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE5M18xNCI+U2V0X0p1c3RpZmljYXRpb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzlfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE5M18zMyI+RmxkPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDBfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzE5NF8zMyI+SnVzdDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyXzkiPkZpZWxkX0p1c3RpZmljYXRpb248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyXzMzIj5Ob25lPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfanVzdC4zeC5odG1sIj5zZXRfZmllbGRfanVzdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzMzOV8xNCI+U2V0X0p1c3RpZmljYXRpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIxMV8xMyI+R2V0X0p1c3RpZmljYXRpb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDVfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIxMV8zMiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjJfOSI+RmllbGRfSnVzdGlmaWNhdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfanVzdC4zeC5odG1sIj5maWVsZF9qdXN0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzQ1XzEzIj5HZXRfSnVzdGlmaWNhdGlvbjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yMjVfMTQiPlNldF9CdWZmZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjI2XzciPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzIyN183Ij5CdWZmZXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjI4XzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPnNldF9maWVsZF9idWZmZXIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGlubGluZWQ8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNTBfMTQiPkdldF9CdWZmZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjUxXzciPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI1Ml83Ij5CdWZmZXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjUzXzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5maWVsZF9idWZmZXIoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzY4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8yNjJfMTMiPkdldF9CdWZmZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjYzXzciPkZsZDwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI2NF83Ij5CdWZmZXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMjlfOSI+QnVmZmVyX051bWJlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTI5XzkiPkJ1ZmZlcl9OdW1iZXI8L0E+J0ZpcnN0KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+ZmllbGRfYnVmZmVyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYnV0IGFzIGZ1bmN0aW9uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X0J1ZmZlcik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI3NV8xNCI+U2V0X1N0YXR1czwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjc1XzI2Ij5GbGQ8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI3Nl8yNiI+U3RhdHVzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+c2V0X2ZpZWxkX3N0YXR1cygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzM3Nl8xNCI+U2V0X1N0YXR1czwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzI5MV8xMyI+Q2hhbmdlZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4Ml8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMjkxXzIyIj5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5maWVsZF9zdGF0dXMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8zODJfMTMiPkNoYW5nZWQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzA3XzE0Ij5TZXRfTWF4aW11bV9TaXplPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg3XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zMDdfMzIiPkZsZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4OF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzA4XzMyIj5NYXg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBOYXR1cmFsIDo9IDApOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5zZXRfZmllbGRfbWF4KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMzg3XzE0Ij5TZXRfTWF4aW11bV9TaXplPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMyN18xNCI+U2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMyN18yNyI+RmxkPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOThfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzMyOF8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY4XzkiPkZpZWxkX09wdGlvbl9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPnNldF9maWVsZF9vcHRzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFuIG92ZXJsb2FkZWQgdmVyc2lvbiBpcyBkZWZpbmVkIGxhdGVyLiBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmU8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzQ1XzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwM18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzQ1XzMwIj5GbGQ8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwNF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMzQ2XzMwIj5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNDdfMzAiPk9uPC9BPjwvRk9OVD4gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5maWVsZF9vcHRzX29uKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZmllbGRfb3B0c19vZmYoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBbiBvdmVybG9hZGVkIHZlcnNpb24gaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM3MV8xNCI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM3MV8yNyI+RmxkPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDEyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zNzJfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjhfOSI+RmllbGRfT3B0aW9uX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+ZmllbGRfb3B0cygpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM4NF8xMyI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzM4NF8yNiI+RmxkPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTlfNCI+TnVsbF9GaWVsZDwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82OF85Ij5GaWVsZF9PcHRpb25fU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZpZWxkX29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQW4gb3ZlcmxvYWRlZCB2ZXJzaW9uIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8zOTlfMTQiPlNldF9Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQwMF83Ij5GbGQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQwMV83Ij5Gb3JlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MDJfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPnNldF9maWVsZF9mb3JlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDI2XzE0Ij5TZXRfRm9yZWdyb3VuZDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MjFfMTQiPkZvcmVncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQyMV8yNiI+RmxkPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQyMl8yNiI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZpZWxkX2ZvcmUoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDMwXzE0Ij5Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MzBfMjYiPkZsZDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDMxXzI2Ij5Gb3JlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80MzJfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5maWVsZF9mb3JlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoRm9yZWdyb3VuZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ0M18xNCI+U2V0X0JhY2tncm91bmQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDQ0XzciPkZsZDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDQ1XzciPkJhY2s8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ0Nl83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+c2V0X2ZpZWxkX2JhY2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTZXRfQmFja2dyb3VuZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ2NV8xNCI+QmFja2dyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDY1XzI2Ij5GbGQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDY2XzI2Ij5CYWNrPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+ZmllbGRfYmFjaygpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NzRfMTQiPkJhY2tncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ3NF8yNiI+RmxkPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDYwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80NzVfMjYiPkJhY2s8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzQ3Nl8yNiI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZpZWxkX2JhY2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChCYWNrZ3JvdW5kKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDg3XzE0Ij5TZXRfUGFkX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2Nl8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNDg3XzMzIj5GbGQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY3XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl80ODhfMzMiPlBhZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IENoYXJhY3RlciA6PSBTcGFjZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5zZXRfZmllbGRfcGFkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDY2XzE0Ij5TZXRfUGFkX0NoYXJhY3RlcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDcyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MDRfMTQiPlBhZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzJfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUwNF8yOSI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3M18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTA1XzI5Ij5QYWQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQ2hhcmFjdGVyKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZpZWxkX3BhZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzQ3Ml8xNCI+UGFkX0NoYXJhY3RlcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwiPmZvcm1fZmllbGRfaW5mby4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDgyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MTlfMTQiPkluZm88L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUxOV8yMCI+RmxkPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTIwXzIwIj5MaW5lczwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81MjFfMjAiPkNvbHVtbnM8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4NV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTIyXzIwIj5GaXJzdF9Sb3c8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODZfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyM18yMCI+Rmlyc3RfQ29sdW1uPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODdfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyNF8yMCI+T2ZmX1NjcmVlbjwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5vdXQ8L2I+IE5hdHVyYWw7CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODhfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzUyNV8yMCI+QWRkaXRpb25hbF9CdWZmZXJzPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEyOV85Ij5CdWZmZXJfTnVtYmVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGRfaW5mby4zeC5odG1sIj5maWVsZF9pbmZvKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDgyXzE0Ij5JbmZvPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU1M18xNCI+RHluYW1pY19JbmZvPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkzXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NTNfMjgiPkZsZDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5NF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU0XzI4Ij5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDk1XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81NTVfMjgiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5Nl8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTU2XzI4Ij5NYXg8L0E+PC9GT05UPiAgICAgOiA8Yj5vdXQ8L2I+IE5hdHVyYWwpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkX2luZm8uM3guaHRtbCI+ZHluYW1pY19maWVsZF9pbmZvKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDkzXzE0Ij5EeW5hbWljX0luZm88L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzU4Ml8xNCI+U2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwNV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTgyXzI2Ij5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwNl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTgzXzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+c2V0X2Zvcm1fd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTA1XzE0Ij5TZXRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNTk4XzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTExXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl81OThfMjUiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MTFfMTMiPkdldF9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjEwXzE0Ij5TZXRfU3ViX1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxNl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjEwXzMwIj5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYxMV8zMCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPnNldF9mb3JtX3N1YigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUxNl8xNCI+U2V0X1N1Yl9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MjZfMTMiPkdldF9TdWJfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIyXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82MjZfMjkiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV93aW4uM3guaHRtbCI+Zm9ybV9zdWIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjJfMTMiPkdldF9TdWJfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYzOF8xNCI+U2NhbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjdfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzYzOF8yMSI+RnJtPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjM5XzIxIj5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY0MF8yMSI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fd2luLjN4Lmh0bWwiPnNjYWxlX2Zvcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MjdfMTQiPlNjYWxlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPnByb2NlZHVyZTwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM3XzQ5Ij5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjYyXzE0Ij5TZXRfRmllbGRfSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQxXzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NjJfMzUiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0Ml8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjYzXzM1Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+c2V0X2ZpZWxkX2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDFfMTQiPlNldF9GaWVsZF9Jbml0X0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjc4XzE0Ij5TZXRfRmllbGRfVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ3XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl82NzhfMzUiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0OF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjc5XzM1Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+c2V0X2ZpZWxkX3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NDdfMTQiPlNldF9GaWVsZF9UZXJtX0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNjk0XzE0Ij5TZXRfRm9ybV9Jbml0X0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTNfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY5NF8zNCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTRfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzY5NV8zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPnNldF9mb3JtX2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NTNfMTQiPlNldF9Gb3JtX0luaXRfSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83MTBfMTQiPlNldF9Gb3JtX1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzEwXzM0Ij5Gcm08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2MF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzExXzM0Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+c2V0X2Zvcm1fdGVybSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU1OV8xNCI+U2V0X0Zvcm1fVGVybV9Ib29rPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2NV8xMyI+R2V0X0ZpZWxkX0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2NV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTY1XzEzIj5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+ZmllbGRfaW5pdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldF9GaWVsZF9Jbml0X0hvb2ssICJmaWVsZF9pbml0Iik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3MF8xMyI+R2V0X0ZpZWxkX1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3MF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTcwXzEzIj5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzUzN185Ij5Gb3JtX0hvb2tfRnVuY3Rpb248L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2hvb2suM3guaHRtbCI+ZmllbGRfdGVybSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldF9GaWVsZF9UZXJtX0hvb2ssICJmaWVsZF90ZXJtIik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3NV8xMyI+R2V0X0Zvcm1fSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81NzVfMTMiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTM3XzkiPkZvcm1fSG9va19GdW5jdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1faG9vay4zeC5odG1sIj5mb3JtX2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfRm9ybV9Jbml0X0hvb2ssICJmb3JtX2luaXQiKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgwXzEzIj5HZXRfRm9ybV9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODBfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU4MF8xMyI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81MzdfOSI+Rm9ybV9Ib29rX0Z1bmN0aW9uPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1fdGVybSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldF9Gb3JtX1Rlcm1fSG9vaywgImZvcm1fdGVybSIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzczMF8xNCI+UmVkZWZpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODlfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzczMF8yNCI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5MF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzMxXzI0Ij5GbGRzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPnNldF9mb3JtX2ZpZWxkcygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU4OV8xNCI+UmVkZWZpbmU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5NV8xNCI+U2V0X0ZpZWxkczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5NV8yNiI+RnJtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk2XzI2Ij5GbGRzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTM0XzkiPkZpZWxkX0FycmF5X0FjY2VzczwvQT4pIDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU4OV8xNCI+UmVkZWZpbmU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPnNldF9mb3JtX2ZpZWxkcygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgSW5saW5lIChTZXRfRmllbGRzKTs8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjAxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83NTJfMTMiPkZpZWxkczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwMV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfNzUyXzIxIj5Gcm08L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjAyXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83NTNfMjEiPkluZGV4PC9BPjwvRk9OVD4gOiBQb3NpdGl2ZSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MDFfMTMiPkZpZWxkczwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc3Ml8xMyI+RmllbGRfQ291bnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc3Ml8yNiI+RnJtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiBOYXR1cmFsOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPmZpZWxkX2NvdW50KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjA3XzEzIj5GaWVsZF9Db3VudDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83ODJfMTQiPk1vdmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzc4Ml8yMCI+RmxkPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83ODNfMjAiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE0XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl83ODRfMjAiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwiPm1vdmVfZmllbGQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MTJfMTQiPk1vdmU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3LjN4Lmh0bWwiPmZvcm1fbmV3LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80NSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyM18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODAyXzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjNfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzgwMl8yMSI+RmllbGRzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMzRfOSI+RmllbGRfQXJyYXlfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXcuM3guaHRtbCI+bmV3X2Zvcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChDcmVhdGUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gTmV3X0Zvcm0gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI4XzIzIj5GaWVsZHM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEzNF85Ij5GaWVsZF9BcnJheV9BY2Nlc3M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+CisgICAgIDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzYyM18xMyI+Q3JlYXRlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXcuM3guaHRtbCI+bmV3X2Zvcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcHJhZ21hIElubGluZSAoTmV3X0Zvcm0pOzwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84MjNfMTQiPkRlbGV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzNF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODIzXzIyIj5Gcm08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXcuM3guaHRtbCI+ZnJlZV9mb3JtKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJlc2V0IEZybSB0byBOdWxsX0Zvcm08L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChEZWxldGUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NDJfMTQiPlNldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NDJfMjciPkZybTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg0M18yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzEwN185Ij5Gb3JtX09wdGlvbl9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwiPnNldF9mb3JtX29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTZXRfT3B0aW9ucyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80OSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2MF8xNCI+U3dpdGNoX09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg2MF8zMCI+RnJtPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1MV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfODYxXzMwIj5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfMTA3XzkiPkZvcm1fT3B0aW9uX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjUyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84NjJfMzAiPk9uPC9BPjwvRk9OVD4gICAgICA6IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHNfb24oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBmb3JtX29wdHNfb2ZmKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChTd2l0Y2hfT3B0aW9ucyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg4Nl8xNCI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NThfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg4Nl8yNyI+RnJtPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzg4N18yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84OTlfMTMiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl84OTlfMjYiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjBfNCI+TnVsbF9Gb3JtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl8xMDdfOSI+Rm9ybV9PcHRpb25fU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdldF9PcHRpb25zKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fcG9zdC4zeC5odG1sIj5mb3JtX3Bvc3QuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTEzXzE0Ij5Qb3N0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjcyXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MTNfMjAiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTE0XzIwIj5Qb3N0PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9wb3N0LjN4Lmh0bWwiPnBvc3RfZm9ybSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHVucG9zdF9mb3JtKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82NzJfMTQiPlBvc3Q8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fY3Vyc29yLjN4Lmh0bWwiPmZvcm1fY3Vyc29yLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzkzOV8xNCI+UG9zaXRpb25fQ3Vyc29yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgzXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85MzlfMzEiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX2N1cnNvci4zeC5odG1sIj5wb3NfZm9ybV9jdXJzb3IoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82ODNfMTQiPlBvc2l0aW9uX0N1cnNvcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9kYXRhLjN4Lmh0bWwiPmZvcm1fZGF0YS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk1N18xMyI+RGF0YV9BaGVhZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5Ml8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTU3XzI1Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZGF0YS4zeC5odG1sIj5kYXRhX2FoZWFkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNjkyXzEzIj5EYXRhX0FoZWFkPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81NSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTczXzEzIj5EYXRhX0JlaGluZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfOTczXzI2Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZGF0YS4zeC5odG1sIj5kYXRhX2JlaGluZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzY5N18xMyI+RGF0YV9CZWhpbmQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fZHJpdmVyLjN4Lmh0bWwiPmZvcm1fZHJpdmVyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA1XzkiPkRyaXZlcl9SZXN1bHQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA1XzI3Ij5Gb3JtX09rPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA2XzI3Ij5SZXF1ZXN0X0RlbmllZDwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwN18yNyI+VW5rbm93bl9SZXF1ZXN0PC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA4XzI3Ij5JbnZhbGlkX0ZpZWxkPC9BPjwvRk9OVD4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzk5M18xMyI+RHJpdmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzExXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTNfMjEiPkZybTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzEyXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl85OTRfMjEiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjhfOSI+S2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcwNV85Ij5Ecml2ZXJfUmVzdWx0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9kcml2ZXIuM3guaHRtbCI+Zm9ybV9kcml2ZXIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRHJpdmVyIG5vdCBpbmxpbmVkPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+Zm9ybV9wYWdlLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIwXzkiPlBhZ2VfTnVtYmVyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gTmF0dXJhbDsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTAyM18xNCI+U2V0X0N1cnJlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMjNfMjciPkZybTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyNF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTAyNF8yNyI+RmxkPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPnNldF9jdXJyZW50X2ZpZWxkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzIzXzE0Ij5TZXRfQ3VycmVudDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMzhfMTMiPkN1cnJlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjlfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwMzhfMjIiPkZybTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwiPmN1cnJlbnRfZmllbGQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjlfMTMiPkN1cnJlbnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRiLmh0bSNyZWZfMTA1M18xNCI+U2V0X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTNfMjQiPkZybTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzVfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwNTRfMjQiPlBhZ2U8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83MjBfOSI+UGFnZV9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyMF85Ij5QYWdlX051bWJlcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+c2V0X2Zvcm1fcGFnZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzczNF8xNCI+U2V0X1BhZ2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDY4XzEzIj5QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQwXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDY4XzE5Ij5Gcm08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU3XzkiPkZvcm08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzcyMF85Ij5QYWdlX051bWJlcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2Zvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NDBfMTMiPlBhZ2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQ1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMDgyXzEzIj5HZXRfSW5kZXg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NDVfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzEwODJfMjQiPkZsZDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+KSA8Yj5yZXR1cm48L2I+IFBvc2l0aXZlOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX3BhZ2UuM3guaHRtbCI+ZmllbGRfaW5kZXgoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGUgdGhhdCBpbiB0aGlzIGJpbmRpbmcgd2Ugc3RhcnQgdGhlIG51bWJlcmluZyBvZiBmaWVsZHM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgd2l0aCAxLiBTbyB0aGlzIGlzIG51bWJlciBpcyBvbmUgbW9yZSB0aGFuIHlvdSBnZXQgZnJvbSB0aGUgbG93PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGxldmVsIGNhbGwuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzQ1XzEzIj5HZXRfSW5kZXg8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2Zvcm1fbmV3X3BhZ2UuM3guaHRtbCI+Zm9ybV9uZXdfcGFnZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzU3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTAyXzE0Ij5TZXRfTmV3X1BhZ2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTdfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMDJfMjgiPkZsZDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NThfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMDNfMjgiPk5ld19QYWdlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vZm9ybV9uZXdfcGFnZS4zeC5odG1sIj5zZXRfbmV3X3BhZ2UoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl83NTdfMTQiPlNldF9OZXdfUGFnZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2FkYi5odG0jcmVmXzExMTdfMTMiPklzX05ld19QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzYzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZGIuaHRtI3JlZl8xMTE3XzI2Ij5GbGQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtZm9ybXNfX2Fkcy5odG0jcmVmXzU2XzkiPkZpZWxkPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9mb3JtX25ld19wYWdlLjN4Lmh0bWwiPm5ld19wYWdlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNzYzXzEzIj5Jc19OZXdfUGFnZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vZm9ybV9yZXF1ZXN0bmFtZS4zeC5odG1sIj5mb3JtX3JlcXVlc3RuYW1lLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBJbXBsZW1lbnRlZDogZm9ybV9yZXF1ZXN0X25hbWUsIGZvcm1fcmVxdWVzdF9ieV9uYW1lPC9FTT48L0ZPTlQ+CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnByaXZhdGU8L2I+CisgICA8Yj50eXBlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81Nl85Ij5GaWVsZDwvQT4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTdfOSI+Rm9ybTwvQT4gIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKworICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTlfNCI+TnVsbF9GaWVsZDwvQT4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNTZfOSI+RmllbGQ8L0E+IDo9IDA7CisgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl82MF80Ij5OdWxsX0Zvcm08L0E+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWZvcm1zX19hZHMuaHRtI3JlZl81N185Ij5Gb3JtPC9BPiAgOj0gMDsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1mb3Jtc19fYWRzLmh0bSNyZWZfNDlfMzUiPkZvcm1zPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDNiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bQpAQCAtMCwwICsxLDgzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YSAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzQ2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80Nl80MSI+SXRlbV9Vc2VyX0RhdGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNThfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNThfMjkiPkl0bTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzkiPlVzZXJfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMTYiPlNldF9JdGVtX1VzZXJwdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTFfMTYiPkl0bTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTFfMTYiPkFkZHI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzkiPlVzZXJfQWNjZXNzPC9BPikgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0l0ZW1fVXNlcnB0ciwgInNldF9pdGVtX3VzZXJwdHIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTFfMTYiPlNldF9JdGVtX1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OF8yOSI+SXRtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMjkiPkRhdGE8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81NV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTVfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNThfMTQiPlNldF9Vc2VyX0RhdGE8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjlfMTMiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjlfMjgiPkl0bTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfOSI+VXNlcl9BY2Nlc3M8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzE2Ij5JdGVtX1VzZXJwdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjRfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfOSI+VXNlcl9BY2Nlc3M8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1fVXNlcnB0ciwgIml0ZW1fdXNlcnB0ciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY0XzE2Ij5JdGVtX1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82OV8yOCI+SXRtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY5XzEzIj5HZXRfVXNlcl9EYXRhPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xNCI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8yOSI+SXRtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NV8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjVfMjkiPkRhdGE8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY5XzEzIj5HZXRfVXNlcl9EYXRhPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMjkiPkl0bTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xNCI+R2V0X1VzZXJfRGF0YTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDZfNDEiPkl0ZW1fVXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YTA2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bQpAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5JdGVtX1VzZXJfRGF0YSAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTYgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80Nl80MSI+VXNlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5saW1pdGVkPC9iPiA8Yj5wcml2YXRlPC9iPjsKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDZfNDEiPlVzZXJfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcjwvQT47Cis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80NF80NiI+SXRlbV9Vc2VyX0RhdGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80Nl80MSI+SXRlbV9Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgYmluZGluZyB1c2VzIHRoZSBzYW1lIHVzZXIgcG9pbnRlciBmb3IgbWVudSBpdGVtczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBhcyB0aGUgbG93IGxldmVsIEMgaW1wbGVtZW50YXRpb24uIFNvIHlvdSBjYW4gc2FmZWx5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJlYWQgb3Igd3JpdGUgdGhlIHVzZXIgcG9pbnRlciBhbHNvIHdpdGggdGhlIEMgcm91dGluZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbCI+bWl0ZW1fdXNlcnB0ci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDhfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDhfMjkiPkl0bTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80OV8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX3VzZXJwdHIuM3guaHRtbCI+c2V0X2l0ZW1fdXNlcnB0cjwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OF8xNCI+U2V0X1VzZXJfRGF0YTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzBfMTQiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzBfMjkiPkl0bTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNzFfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1pdGVtX3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfOSI+VXNlcl9BY2Nlc3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdXNlcnB0ci4zeC5odG1sIj5pdGVtX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYyXzEzIj5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjlfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYyXzI4Ij5JdG08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtaXRlbV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdXNlcnB0ci4zeC5odG1sIj5pdGVtX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNhbWUgYXMgZnVuY3Rpb248L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChHZXRfVXNlcl9EYXRhKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLWl0ZW1fdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80Nl80MSI+SXRlbV9Vc2VyX0RhdGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkNmU5NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtCkBAIC0wLDAgKzEsODIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGEuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnVzLk1lbnVfVXNlcl9EYXRhICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzXzQ2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MSI+TWVudV9Vc2VyX0RhdGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMjkiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81NF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTYiPlNldF9NZW51X1VzZXJwdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTBfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTBfMTYiPkRhdGE8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfVXNlcnB0ciwgInNldF9tZW51X3VzZXJwdHIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTBfMTYiPlNldF9NZW51X1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18yOSI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTRfMjkiPkRhdGE8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81NF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMjgiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzE2Ij5NZW51X1VzZXJwdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjNfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfVXNlcnB0ciwgIm1lbnVfdXNlcnB0ciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYzXzE2Ij5NZW51X1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8yOCI+TWVuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIj5HZXRfVXNlcl9EYXRhPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8xNCI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8yOSI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82MF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjBfMjkiPkRhdGE8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIj5HZXRfVXNlcl9EYXRhPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMjkiPk1lbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8xNCI+R2V0X1VzZXJfRGF0YTwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPk1lbnVfVXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTMzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bQpAQCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5NZW51cy5NZW51X1VzZXJfRGF0YSAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTQgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworPGI+Z2VuZXJpYzwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDNfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPlVzZXI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bGltaXRlZDwvYj4gPGI+cHJpdmF0ZTwvYj47CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5Vc2VyX0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQzXzkiPlVzZXI8L0E+OworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNDNfNDYiPk1lbnVfVXNlcl9EYXRhPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDEiPk1lbnVfVXNlcl9EYXRhPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X3VzZXJwdHIuM3guaHRtbCI+bWVudV91c2VycHRyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80N18xNCI+U2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLW1lbnVfdXNlcl9kYXRhX19hZGIuaHRtI3JlZl80N18yOSI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzQ4XzI5Ij5EYXRhPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV91c2VycHRyLjN4Lmh0bWwiPnNldF9tZW51X3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy1tZW51X3VzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMTQiPlNldF9Vc2VyX0RhdGE8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY5XzE0Ij5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzY5XzI5Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcwXzI5Ij5EYXRhPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sIj5tZW51X3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYxXzEzIj5HZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2FkYi5odG0jcmVmXzYxXzI4Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0cjwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdldF9Vc2VyX0RhdGEpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OV8zNSI+TWVudXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXMtbWVudV91c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQxIj5NZW51X1VzZXJfRGF0YTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTYyMTBhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0KQEAgLTAsMCArMSwxMDI4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTWVudXMgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMjYgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo1MDo1OCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47CisKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOyA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DOworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5TdHJpbmdzOworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuUG9pbnRlcnM7CisKKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5XzM1Ij5NZW51czwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj50eXBlPC9iPiBDX0l0ZW1fQXJyYXkgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoTmF0dXJhbCA8Yj5yYW5nZTwvYj4gJmx0OyZndDspIDxiPm9mPC9iPiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgIDxiPnBhY2thZ2U8L2I+IElfQXJyYXkgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuUG9pbnRlcnMgKE5hdHVyYWwsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+LCBDX0l0ZW1fQXJyYXksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4pOworCisgICA8Yj51c2U8L2I+IDxiPnR5cGU8L2I+IFN5c3RlbS5CaXRfT3JkZXI7CisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5ncy5jaGFyc19wdHI7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBNT1NfMl9DSW50IDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gQ0ludF8yX01PUyA8Yj5pczwvYj4gPGI+bmV3PC9iPgorICAgICBBZGEuVW5jaGVja2VkX0NvbnZlcnNpb24gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IElPU18yX0NJbnQgPGI+aXM8L2I+IDxiPm5ldzwvYj4KKyAgICAgQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBDSW50XzJfSU9TIDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT4pOworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwNl8xNCI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwNl8yOCI+S2V5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDdfMjgiPk5hbWU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF8xNiI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwXzE2Ij5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFJlcXVlc3RfTmFtZSwgIm1lbnVfcmVxdWVzdF9uYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODBfMTYiPlJlcXVlc3RfTmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMDZfMjgiPktleTwvQT4pKSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTA3XzI4Ij5OYW1lPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwNl8xNCI+UmVxdWVzdF9OYW1lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwOV8xNCI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODZfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwOV8yOCI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OF8xNiI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODhfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg4XzE2Ij5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFJlcXVlc3RfTmFtZSwgIm1lbnVfcmVxdWVzdF9uYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OF8xNiI+UmVxdWVzdF9OYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEwOV8yOCI+S2V5PC9BPikpKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTA5XzE0Ij5SZXF1ZXN0X05hbWU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTkxXzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTkxXzIxIj5OYW1lPC9BPjwvRk9OVD4gICAgICAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xOTJfMjEiPkRlc2NyaXB0aW9uPC9BPjwvRk9OVD4gOiBTdHJpbmcgOj0gIiIpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85N18xMiI+Q2hhcl9QdHI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiA8Yj5hbGw8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmNoYXI7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF8xNiI+TmV3aXRlbTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OF8xNiI+TmFtZTwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OF8xNiI+RGVzYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTdfMTIiPkNoYXJfUHRyPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXdpdGVtLCAibmV3X2l0ZW0iKTsKKworICAgICAgPGI+dHlwZTwvYj4gTmFtZV9TdHJpbmcgPGI+aXM8L2I+IDxiPm5ldzwvYj4gY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xOTFfMjEiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMl8xMiI+TmFtZV9TdHJpbmdfUHRyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gTmFtZV9TdHJpbmc7CisgICAgICA8Yj5wcmFnbWE8L2I+IENvbnRyb2xsZWQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEwMl8xMiI+TmFtZV9TdHJpbmdfUHRyPC9BPik7CisKKyAgICAgIDxiPnR5cGU8L2I+IERlc2NfU3RyaW5nIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTkyXzIxIj5EZXNjcmlwdGlvbjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzEyIj5EZXNjX1N0cmluZ19QdHI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+YWNjZXNzPC9iPiBEZXNjX1N0cmluZzsKKyAgICAgIDxiPnByYWdtYTwvYj4gQ29udHJvbGxlZCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTA2XzEyIj5EZXNjX1N0cmluZ19QdHI8L0E+KTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDlfNyI+TmFtZV9TdHI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMDJfMTIiPk5hbWVfU3RyaW5nX1B0cjwvQT4gOj0gPGI+bmV3PC9iPiBOYW1lX1N0cmluZzsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwXzciPkRlc2NfU3RyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTA2XzEyIj5EZXNjX1N0cmluZ19QdHI8L0E+IDo9IDxiPm5ldzwvYj4gRGVzY19TdHJpbmc7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV83Ij5OYW1lX0xlbjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV8xNyI+RGVzY19MZW48L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyXzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE5MV8yMSI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEwOV83Ij5OYW1lX1N0cjwvQT4uPGI+YWxsPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTExXzciPk5hbWVfTGVuPC9BPik7CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xOTJfMjEiPkRlc2NyaXB0aW9uPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTEwXzciPkRlc2NfU3RyPC9BPi48Yj5hbGw8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMTFfMTciPkRlc2NfTGVuPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMTJfNyI+UmVzdWx0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OF8xNiI+TmV3aXRlbTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEwOV83Ij5OYW1lX1N0cjwvQT4uPGI+YWxsPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTA5XzciPk5hbWVfU3RyPC9BPi48Yj5hbGw8L2I+J0ZpcnN0KSc8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzExMF83Ij5EZXNjX1N0cjwvQT4uPGI+YWxsPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTEwXzciPkRlc2NfU3RyPC9BPi48Yj5hbGw8L2I+J0ZpcnN0KSc8Yj5BY2Nlc3M8L2I+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMTJfNyI+UmVzdWx0PC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODlfNCI+RXRpX1N5c3RlbV9FcnJvcjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTEyXzciPlJlc3VsdDwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE5MV8xMyI+Q3JlYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjAzXzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIwM18yMiI+SXRtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2XzE2Ij5EZXNjbmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTI2XzE2Ij5JdG08L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEZXNjbmFtZSwgIml0ZW1fZGVzY3JpcHRpb24iKTsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOF8xNiI+SXRlbW5hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEyOF8xNiI+SXRtPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNThfMTIiPmNoYXJzX3B0cjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXRlbW5hbWUsICJpdGVtX25hbWUiKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxXzE2Ij5GcmVlaXRlbTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTMxXzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZyZWVpdGVtLCAiZnJlZV9pdGVtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzVfNyI+UHRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTM1XzciPlB0cjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTI2XzE2Ij5EZXNjbmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIwM18yMiI+SXRtPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTM1XzciPlB0cjwvQT4gLz0gTnVsbF9QdHIgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3MuRnJlZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTM1XzciPlB0cjwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMzVfNyI+UHRyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMjhfMTYiPkl0ZW1uYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjAzXzIyIj5JdG08L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMzVfNyI+UHRyPC9BPiAvPSBOdWxsX1B0ciA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5ncy5GcmVlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMzVfNyI+UHRyPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzNF83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzMV8xNiI+RnJlZWl0ZW08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMDNfMjIiPkl0bTwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEzNF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTM0XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMDNfMjIiPkl0bTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjJfNCI+TnVsbF9JdGVtPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjAzXzE0Ij5EZWxldGU8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIxMl8xNCI+U2V0X1ZhbHVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMTJfMjUiPkl0bTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1M18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjEzXzI1Ij5WYWx1ZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1XzE2Ij5TZXRfSXRlbV9WYWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE1NV8xNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTZfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE1NV8xNiI+VmFsPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfSXRlbV9WYWwsICJzZXRfaXRlbV92YWx1ZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTU1XzE2Ij5TZXRfSXRlbV9WYWw8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMTJfMjUiPkl0bTwvQT4sIEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMTNfMjUiPlZhbHVlPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE1OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTU5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIxMl8xNCI+U2V0X1ZhbHVlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMThfMTMiPlZhbHVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMThfMjAiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjhfMTYiPkl0ZW1fVmFsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNjhfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXRlbV9WYWwsICJpdGVtX3ZhbHVlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNjhfMTYiPkl0ZW1fVmFsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjE4XzIwIj5JdG08L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMThfMTMiPlZhbHVlPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjI3XzEzIj5WaXNpYmxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc5XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMjdfMjIiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODFfMTYiPkl0ZW1fVmlzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xODFfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXRlbV9WaXMsICJpdGVtX3Zpc2libGUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE4MV8xNiI+SXRlbV9WaXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMjdfMjIiPkl0bTwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkN1cnNlc19GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIyN18xMyI+VmlzaWJsZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjM2XzE0Ij5TZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjM2XzI3Ij5JdG08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMzdfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzE2Ij5TZXRfSXRlbV9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTRfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTk0XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9JdGVtX09wdHMsICJzZXRfaXRlbV9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk4XzciPk9wdDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IElPU18yX0NJbnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIzN18yNyI+T3B0aW9uczwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTlfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5OV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5NF8xNiI+U2V0X0l0ZW1fT3B0czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIzNl8yNyI+SXRtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTk4XzciPk9wdDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTk5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIzNl8xNCI+U2V0X09wdGlvbnM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNDJfMTQiPlN3aXRjaF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNDJfMzAiPkl0bTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDhfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI0M18zMCI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjQ0XzMwIj5PbjwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMV8xNiI+SXRlbV9PcHRzX09uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjExXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTFfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTFfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXRlbV9PcHRzX09uLCAiaXRlbV9vcHRzX29uIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTRfMTYiPkl0ZW1fT3B0c19PZmY8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTRfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxNF8xNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE1XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTRfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXRlbV9PcHRzX09mZiwgIml0ZW1fb3B0c19vZmYiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMThfNyI+T3B0PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gSU9TXzJfQ0ludCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjQzXzMwIj5PcHRpb25zPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOV83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI0NF8zMCI+T248L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTlfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTFfMTYiPkl0ZW1fT3B0c19PbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI0Ml8zMCI+SXRtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjE4XzciPk9wdDwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxOV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIxNF8xNiI+SXRlbV9PcHRzX09mZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI0Ml8zMCI+SXRtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjE4XzciPk9wdDwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjE5XzciPkVycjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMTlfNyI+RXJyPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjQyXzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1MV8xNCI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1MV8yNyI+SXRtPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1Ml8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM0XzE2Ij5JdGVtX09wdHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIzNF8xNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJdGVtX09wdHMsICJpdGVtX29wdHMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjM0XzE2Ij5JdGVtX09wdHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTFfMjciPkl0bTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTJfMjciPk9wdGlvbnM8L0E+IDo9IENJbnRfMl9JT1MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIzN183Ij5SZXM8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjUxXzE0Ij5HZXRfT3B0aW9uczwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjU2XzEzIj5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0Ml8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjU2XzI2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDRfNyI+SW9zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjUxXzE0Ij5HZXRfT3B0aW9uczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI1Nl8yNiI+SXRtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjQ0XzciPklvczwvQT4pOworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNDRfNyI+SW9zPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjU2XzEzIj5HZXRfT3B0aW9uczwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjY1XzE0Ij5OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUwXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjVfMjAiPkl0bTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjY2XzIwIj5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUzXzE2Ij5JdGVtbmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1M18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjUzXzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1uYW1lLCAiaXRlbV9uYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjUzXzE2Ij5JdGVtbmFtZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2NV8yMCI+SXRtPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2Nl8yMCI+TmFtZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNjVfMTQiPk5hbWU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2OF8xNCI+TmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1OV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjY4XzIwIj5JdG08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjYxXzE2Ij5JdGVtbmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjYxXzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1uYW1lLCAiaXRlbV9uYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNjFfMTYiPkl0ZW1uYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjY4XzIwIj5JdG08L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI2OF8xNCI+TmFtZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3NF8xNCI+RGVzY3JpcHRpb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3NF8yNyI+SXRtPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3NV8yNyI+RGVzY3JpcHRpb248L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzBfMTYiPkRlc2NuYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjcwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNzBfMTYiPkl0bTwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4XzEyIj5jaGFyc19wdHI8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIERlc2NuYW1lLCAiaXRlbV9kZXNjcmlwdGlvbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI3MF8xNiI+RGVzY25hbWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzRfMjciPkl0bTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNzVfMjciPkRlc2NyaXB0aW9uPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3NF8xNCI+RGVzY3JpcHRpb248L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3OF8xNCI+RGVzY3JpcHRpb248L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3OF8yNyI+SXRtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3OF8xNiI+RGVzY25hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI3OF8xNiI+SXRtPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNThfMTIiPmNoYXJzX3B0cjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRGVzY25hbWUsICJpdGVtX2Rlc2NyaXB0aW9uIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNzhfMTYiPkRlc2NuYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjc4XzI3Ij5JdG08L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI3OF8xNCI+RGVzY3JpcHRpb248L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI4OF8xNCI+U2V0X0N1cnJlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI4OF8yNyI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yODlfMjciPkl0bTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODdfMTYiPlNldF9DdXJyX0l0ZW08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODdfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI4N18xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg4XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yODdfMTYiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X0N1cnJfSXRlbSwgInNldF9jdXJyZW50X2l0ZW0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI4N18xNiI+U2V0X0N1cnJfSXRlbTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI4OF8yNyI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjg5XzI3Ij5JdG08L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI5MV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjkxXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI4OF8xNCI+U2V0X0N1cnJlbnQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5NF8xMyI+Q3VycmVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5OF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjk0XzIyIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMF8xNiI+Q3Vycl9JdGVtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzAwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMDBfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQ3Vycl9JdGVtLCAiY3VycmVudF9pdGVtIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzAzXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMwMF8xNiI+Q3Vycl9JdGVtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjk0XzIyIj5NZW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMwM183Ij5SZXM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjJfNCI+TnVsbF9JdGVtPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzExNl80Ij5NZW51X0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzAzXzciPlJlczwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5NF8xMyI+Q3VycmVudDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5OV8xNCI+U2V0X1RvcF9Sb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5OV8yNyI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxMl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzAwXzI3Ij5MaW5lPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNF8xNiI+U2V0X1RvcHJvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzE0XzE2Ij5NZW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzE1XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMTRfMTYiPkxpbmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9Ub3Byb3csICJzZXRfdG9wX3JvdyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxOF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzE0XzE2Ij5TZXRfVG9wcm93PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjk5XzI3Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzAwXzI3Ij5MaW5lPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMxOF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzE4XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI5OV8xNCI+U2V0X1RvcF9Sb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwNV8xMyI+VG9wX1JvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyNV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzA1XzIyIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyN18xNiI+VG9wcm93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzI3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMjdfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgVG9wcm93LCAidG9wX3JvdyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzMF83Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMjdfMTYiPlRvcHJvdzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwNV8yMiI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMzBfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzExNl80Ij5NZW51X0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMzMF83Ij5SZXM8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzA1XzEzIj5Ub3BfUm93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMTBfMTMiPkdldF9JbmRleDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzOF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzEwXzI0Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IFBvc2l0aXZlCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0MF8xNiI+R2V0X0l0ZW1pbmRleDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0MF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzQwXzE2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldF9JdGVtaW5kZXgsICJpdGVtX2luZGV4Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQzXzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM0MF8xNiI+R2V0X0l0ZW1pbmRleDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMxMF8yNCI+SXRtPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNDNfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzExNl80Ij5NZW51X0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gUG9zaXRpdmUgKE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM0M183Ij5SZXM8L0E+KSArIFBvc2l0aXZlJ0ZpcnN0KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzEwXzEzIj5HZXRfSW5kZXg8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMyMl8xNCI+UG9zdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1MV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzIyXzIwIj5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMyM18yMCI+UG9zdDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU0XzE2Ij5NX1Bvc3Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1NF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNX1Bvc3QsICJwb3N0X21lbnUiKTsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1Nl8xNiI+TV9VbnBvc3Q8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1Nl8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNX1VucG9zdCwgInVucG9zdF9tZW51Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzU5XzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzIzXzIwIj5Qb3N0PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzU5XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzU0XzE2Ij5NX1Bvc3Q8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMjJfMjAiPk1lbjwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1OV83Ij5SZXM8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1Nl8xNiI+TV9VbnBvc3Q8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMjJfMjAiPk1lbjwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzU5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNTlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzIyXzE0Ij5Qb3N0PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzNfMTQiPlNldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzNfMjciPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzNF8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzRfMTYiPlNldF9NZW51X09wdHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzRfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3NF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc1XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNzRfMTYiPk9wdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfT3B0cywgInNldF9tZW51X29wdHMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzhfNyI+T3B0PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gTU9TXzJfQ0ludCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzM0XzI3Ij5PcHRpb25zPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3OV83Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzc5XzciPlJlczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzc0XzE2Ij5TZXRfTWVudV9PcHRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzMzXzI3Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zNzhfNyI+T3B0PC9BPik7CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3OV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzc5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMzM18xNCI+U2V0X09wdGlvbnM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzlfMTQiPlN3aXRjaF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzlfMzAiPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODhfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0MF8zMCI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4OV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzQxXzMwIj5PbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTFfMTYiPk1lbnVfT3B0c19PbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5MV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzkxXzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzkxXzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfT3B0c19PbiwgIm1lbnVfb3B0c19vbiIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk0XzE2Ij5NZW51X09wdHNfT2ZmPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk0XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zOTRfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5NV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk0XzE2Ij5PcHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfT3B0c19PZmYsICJtZW51X29wdHNfb2ZmIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk4XzciPk9wdDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IE1PU18yX0NJbnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0MF8zMCI+T3B0aW9uczwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTlfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNDFfMzAiPk9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk5XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzkxXzE2Ij5NZW51X09wdHNfT248L0E+ICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzM5XzMwIj5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zOThfNyI+T3B0PC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk5XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzk0XzE2Ij5NZW51X09wdHNfT2ZmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzM5XzMwIj5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zOThfNyI+T3B0PC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zOTlfNyI+RXJyPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM5OV83Ij5FcnI8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zMzlfMTQiPlN3aXRjaF9PcHRpb25zPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzQ3XzE0Ij5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzQ3XzI3Ij5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDEyXzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNDhfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxNF8xNiI+TWVudV9PcHRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDE0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MTRfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9PcHRzLCAibWVudV9vcHRzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDE3XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQxNF8xNiI+TWVudV9PcHRzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzQ3XzI3Ij5NZW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzQ4XzI3Ij5PcHRpb25zPC9BPiA6PSBDSW50XzJfTU9TICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MTdfNyI+UmVzPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0N18xNCI+R2V0X09wdGlvbnM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM1Ml8xMyI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM1Ml8yNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82M180Ij5OdWxsX01lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI0XzciPk1vczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM0N18xNCI+R2V0X09wdGlvbnM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNTJfMjYiPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQyNF83Ij5Nb3M8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDI0XzciPk1vczwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM1Ml8xMyI+R2V0X09wdGlvbnM8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2MV8xNCI+U2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzMF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzYxXzI2Ij5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzMV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzYyXzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzNfMTYiPlNldF9NZW51X1dpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzM18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDMzXzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzNF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDMzXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfV2luLCAic2V0X21lbnVfd2luIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM3XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MzNfMTYiPlNldF9NZW51X1dpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2MV8yNiI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzYyXzI2Ij5XaW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MzdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQzN183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjFfMTQiPlNldF9XaW5kb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2N18xMyI+R2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0NF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzY3XzI1Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ2XzE2Ij5NZW51X1dpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDQ2XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9XaW4sICJtZW51X3dpbiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OV83Ij5XPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NDZfMTYiPk1lbnVfV2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzY3XzI1Ij5NZW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NDlfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2N18xMyI+R2V0X1dpbmRvdzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3Ml8xNCI+U2V0X1N1Yl9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3Ml8zMCI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU1XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzNfMzAiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1N18xNiI+U2V0X01lbnVfU3ViPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU3XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NTdfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU4XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NTdfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfTWVudV9TdWIsICJzZXRfbWVudV9zdWIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ1N18xNiI+U2V0X01lbnVfU3ViPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzcyXzMwIj5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzNfMzAiPldpbjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ2MV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDYxXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3Ml8xNCI+U2V0X1N1Yl9XaW5kb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3OF8xMyI+R2V0X1N1Yl9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjhfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3OF8yOSI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3MF8xNiI+TWVudV9TdWI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ3MF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfU3ViLCAibWVudV9zdWIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzNfNyI+VzwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDcwXzE2Ij5NZW51X1N1YjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3OF8yOSI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDczXzciPlc8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNzhfMTMiPkdldF9TdWJfV2luZG93PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzgzXzE0Ij5TY2FsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3OF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzgzXzIxIj5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc5XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zODRfMjEiPkxpbmVzPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4MF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzg1XzIxIj5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4Ml8xMiI+Q19JbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4M18xNiI+TV9TY2FsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4M18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDgzXzE2Ij5NZW48L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4M18xNiI+WXA8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4M18xNiI+WHA8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4Ml8xMiI+Q19JbnRfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNX1NjYWxlLCAic2NhbGVfbWVudSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4N183Ij5YPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg3XzEwIj5ZPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg4XzciPlJlczwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDgzXzE2Ij5NX1NjYWxlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzgzXzIxIj5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80ODdfMTAiPlk8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4N183Ij5YPC9BPic8Yj5BY2Nlc3M8L2I+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4OF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDg4XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zODRfMjEiPkxpbmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ4N18xMCI+WTwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzg1XzIxIj5Db2x1bW5zPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDg3XzciPlg8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzgzXzE0Ij5TY2FsZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzk0XzE0Ij5Qb3NpdGlvbl9DdXJzb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTdfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM5NF8zMSI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDk5XzE2Ij5Qb3NfTWVudV9DdXJzb3I8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTlfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ5OV8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBQb3NfTWVudV9DdXJzb3IsICJwb3NfbWVudV9jdXJzb3IiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDJfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ5OV8xNiI+UG9zX01lbnVfQ3Vyc29yPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzk0XzMxIj5NZW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MDJfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUwMl83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zOTRfMTQiPlBvc2l0aW9uX0N1cnNvcjwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTEwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDNfMTQiPlNldF9NYXJrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTEwXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDNfMjQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwNF8yNCI+TWFyazwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTNfMTIiPkNoYXJfUHRyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5jaGFyOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTE0XzE2Ij5TZXRfTWFyazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxNF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTE0XzE2Ij5NZW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxNV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTE0XzE2Ij5NYXJrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MTNfMTIiPkNoYXJfUHRyPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfTWFyaywgInNldF9tZW51X21hcmsiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MThfNyI+VHh0PC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwNF8yNCI+TWFyazwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTE5XzciPkxlbjwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjBfNyI+UmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwNF8yNCI+TWFyazwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUxOF83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MTlfNyI+TGVuPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MjBfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MTRfMTYiPlNldF9NYXJrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDAzXzI0Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MThfNyI+VHh0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTE4XzciPlR4dDwvQT4nRmlyc3QpJzxiPkFjY2VzczwvYj4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUyMF83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTIwXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwM18xNCI+U2V0X01hcms8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDlfMTQiPk1hcms8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjlfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwOV8yMCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzMF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDEwXzIwIj5NYXJrPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTMyXzE2Ij5HZXRfTWVudV9NYXJrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTMyXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MzJfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNThfMTIiPmNoYXJzX3B0cjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0X01lbnVfTWFyaywgIm1lbnVfbWFyayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUzMl8xNiI+R2V0X01lbnVfTWFyazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQwOV8yMCI+TWVuPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQxMF8yMCI+TWFyazwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MDlfMTQiPk1hcms8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQxM18xNCI+TWFyazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzOF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDEzXzIwIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDBfMTYiPkdldF9NZW51X01hcms8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDBfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU0MF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfTWVudV9NYXJrLCAibWVudV9tYXJrIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NDBfMTYiPkdldF9NZW51X01hcms8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MTNfMjAiPk1lbjwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDEzXzE0Ij5NYXJrPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQyM18xNCI+U2V0X0ZvcmVncm91bmQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDI0XzciPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MjVfNyI+Rm9yZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDI2XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUyXzE2Ij5TZXRfTWVudV9Gb3JlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUyXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NTJfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTNfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU1Ml8xNiI+QXR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfRm9yZSwgInNldF9tZW51X2ZvcmUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTZfNyI+Q2g8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MjZfNyI+Q29sb3I8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDI1XzciPkZvcmU8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU5XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NTJfMTYiPlNldF9NZW51X0ZvcmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MjRfNyI+TWVuPC9BPiwgQXR0ckNoYXJfVG9fQ2h0eXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NTZfNyI+Q2g8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTU5XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NTlfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDIzXzE0Ij5TZXRfRm9yZWdyb3VuZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzMV8xNCI+Rm9yZWdyb3VuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDMxXzI2Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTY3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzJfMjYiPkZvcmU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTY5XzE2Ij5NZW51X0ZvcmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU2OV8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X0ZvcmUsICJtZW51X2ZvcmUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDMyXzI2Ij5Gb3JlPC9BPiA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU2OV8xNiI+TWVudV9Gb3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDMxXzI2Ij5NZW48L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDMxXzE0Ij5Gb3JlZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM2XzE0Ij5Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzZfMjYiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzdfMjYiPkZvcmU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzOF8yNiI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzlfMTYiPk1lbnVfRm9yZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3OV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTc5XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfRm9yZSwgIm1lbnVfZm9yZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzdfMjYiPkZvcmU8L0E+ICA6PSBDaHR5cGVfVG9fQXR0ckNoYXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU3OV8xNiI+TWVudV9Gb3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM2XzI2Ij5NZW48L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQzOF8yNiI+Q29sb3I8L0E+IDo9IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTc5XzE2Ij5NZW51X0ZvcmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80MzZfMjYiPk1lbjwvQT4pKS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDM2XzE0Ij5Gb3JlZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDQzXzE0Ij5TZXRfQmFja2dyb3VuZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NDRfNyI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ0NV83Ij5CYWNrPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NDZfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTFfMTYiPlNldF9NZW51X0JhY2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTFfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU5MV8xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5Ml8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTkxXzE2Ij5BdHRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfTWVudV9CYWNrLCAic2V0X21lbnVfYmFjayIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5NV83Ij5DaDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ0Nl83Ij5Db2xvcjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NDVfNyI+QmFjazwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OThfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU5MV8xNiI+U2V0X01lbnVfQmFjazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ0NF83Ij5NZW48L0E+LCBBdHRyQ2hhcl9Ub19DaHR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU5NV83Ij5DaDwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OThfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU5OF83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NDNfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDUxXzE0Ij5CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTFfMjYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1Ml8yNiI+QmFjazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDhfMTYiPk1lbnVfQmFjazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwOF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjA4XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfQmFjaywgIm1lbnVfYmFjayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTJfMjYiPkJhY2s8L0E+IDo9IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjA4XzE2Ij5NZW51X0JhY2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTFfMjYiPk1lbjwvQT4pKS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTFfMTQiPkJhY2tncm91bmQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTZfMTQiPkJhY2tncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1Nl8yNiI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1N18yNiI+QmFjazwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDU4XzI2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxOF8xNiI+TWVudV9CYWNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MThfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9CYWNrLCAibWVudV9iYWNrIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1N18yNiI+QmFjazwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+Q2h0eXBlX1RvX0F0dHJDaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjE4XzE2Ij5NZW51X0JhY2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTZfMjYiPk1lbjwvQT4pKS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDU4XzI2Ij5Db2xvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5DaHR5cGVfVG9fQXR0ckNoYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MThfMTYiPk1lbnVfQmFjazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ1Nl8yNiI+TWVuPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NTZfMTQiPkJhY2tncm91bmQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjNfMTQiPlNldF9HcmV5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI1XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjRfNyI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjZfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ2NV83Ij5HcmV5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjZfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjlfMTYiPlNldF9NZW51X0dyZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjlfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYyOV8xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzMF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjI5XzE2Ij5BdHRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfTWVudV9HcmV5LCAic2V0X21lbnVfZ3JleSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzM183Ij5DaDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ2Nl83Ij5Db2xvcjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NjVfNyI+R3JleTwvQT4pOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzN183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjI5XzE2Ij5TZXRfTWVudV9HcmV5PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDY0XzciPk1lbjwvQT4sIEF0dHJDaGFyX1RvX0NodHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjMzXzciPkNoPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYzN183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjM3XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ2M18xNCI+U2V0X0dyZXk8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80NzFfMTQiPkdyZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3MV8yMCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0NV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDcyXzIwIj5HcmV5PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0N18xNiI+TWVudV9HcmV5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NDdfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9HcmV5LCAibWVudV9ncmV5Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3Ml8yMCI+R3JleTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5DaHR5cGVfVG9fQXR0ckNoYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NDdfMTYiPk1lbnVfR3JleTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3MV8yMCI+TWVuPC9BPikpLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3MV8xNCI+R3JleTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3Nl8xNCI+R3JleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDc3XzciPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3OF83Ij5HcmV5PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTVfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3OV83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1N18xNiI+TWVudV9HcmV5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NTdfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9HcmV5LCAibWVudV9ncmV5Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3OF83Ij5HcmV5PC9BPiAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5DaHR5cGVfVG9fQXR0ckNoYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NTdfMTYiPk1lbnVfR3JleTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3N183Ij5NZW48L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3OV83Ij5Db2xvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5DaHR5cGVfVG9fQXR0ckNoYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NTdfMTYiPk1lbnVfR3JleTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3N183Ij5NZW48L0E+KSkuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ3Nl8xNCI+R3JleTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ4NF8xNCI+U2V0X1BhZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjRfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ4NF8zMyI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80ODVfMzMiPlBhZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IENoYXJhY3RlciA6PSBTcGFjZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY3XzE2Ij5TZXRfTWVudV9QYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY2N18xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjhfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY2N18xNiI+Q2g8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfTWVudV9QYWQsICJzZXRfbWVudV9wYWQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY2N18xNiI+U2V0X01lbnVfUGFkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDg0XzMzIj5NZW48L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKENoYXJhY3RlcidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ4NV8zMyI+UGFkPC9BPikpKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY3MV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjcxXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ4NF8xNCI+U2V0X1BhZF9DaGFyYWN0ZXI8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OTBfMTQiPlBhZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzlfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5MF8yOSI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjgwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OTFfMjkiPlBhZDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBDaGFyYWN0ZXIpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4Ml8xNiI+TWVudV9QYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY4Ml8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNZW51X1BhZCwgIm1lbnVfcGFkIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5MV8yOSI+UGFkPC9BPiA6PSBDaGFyYWN0ZXInVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82ODJfMTYiPk1lbnVfUGFkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDkwXzI5Ij5NZW48L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5MF8xNCI+UGFkX0NoYXJhY3RlcjwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAwXzE0Ij5TZXRfU3BhY2luZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4OF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAwXzI3Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4OV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAxXzI3Ij5EZXNjcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTBfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwMl8yNyI+Um93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAgIDo9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjkxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDNfMjciPkNvbDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiA6PSAwKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTNfMTYiPlNldF9TcGFjaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjkzXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTNfMTYiPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTNfMTYiPkQ8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTRfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY5M18xNiI+UjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5NF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjkzXzE2Ij5DPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfU3BhY2luZywgInNldF9tZW51X3NwYWNpbmciKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTdfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY5M18xNiI+U2V0X1NwYWNpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDBfMjciPk1lbjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDFfMjciPkRlc2NyPC9BPiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDJfMjciPlJvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTAzXzI3Ij5Db2w8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82OTdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY5N183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDBfMTQiPlNldF9TcGFjaW5nPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTA4XzE0Ij5TcGFjaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MDhfMjMiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDhfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwOV8yMyI+RGVzY3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwOV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTEwXzIzIj5Sb3c8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxMF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTExXzIzIj5Db2w8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxMl8xMiI+Q19JbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxM18xNiI+R2V0X1NwYWNpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTNfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxM18xNiI+TWVuPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxM18xNiI+RDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxNF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzEzXzE2Ij5SPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE0XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTNfMTYiPkM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxMl8xMiI+Q19JbnRfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfU3BhY2luZywgIm1lbnVfc3BhY2luZyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxN183Ij5EPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE3XzEwIj5SPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE3XzEzIj5DPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE4XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTNfMTYiPkdldF9TcGFjaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTA4XzIzIj5NZW48L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTdfNyI+RDwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzE3XzEwIj5SPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTdfMTMiPkM8L0E+JzxiPkFjY2VzczwvYj4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzE4XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MThfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTA5XzIzIj5EZXNjcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzE3XzciPkQ8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUxMF8yMyI+Um93PC9BPiAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MTdfMTAiPlI8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUxMV8yMyI+Q29sPC9BPiAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcxN18xMyI+QzwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwOF8xNCI+U3BhY2luZzwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzMyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjBfMTMiPlNldF9QYXR0ZXJuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzMyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjBfMjYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzMzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjFfMjYiPlRleHQ8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM1XzEyIj5DaGFyX1B0cjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuY2hhcjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczNl8xNiI+U2V0X1BhdHRlcm48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzZfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzczNl8xNiI+TWVuPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzdfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzczNl8xNiI+UGF0dGVybjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzM1XzEyIj5DaGFyX1B0cjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X1BhdHRlcm4sICJzZXRfbWVudV9wYXR0ZXJuIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQwXzciPlM8L0E+PC9GT05UPiAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjFfMjYiPlRleHQ8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0MV83Ij5MPC9BPjwvRk9OVD4gICA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQyXzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjFfMjYiPlRleHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NDBfNyI+UzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc0MV83Ij5MPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NDJfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MzZfMTYiPlNldF9QYXR0ZXJuPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTIwXzI2Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NDBfNyI+UzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc0MF83Ij5TPC9BPidGaXJzdCknPGI+QWNjZXNzPC9iPik7CisgICAgICA8Yj5jYXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NDJfNyI+UmVzPC9BPiA8Yj5pczwvYj4KKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84OV80Ij5FX05vX01hdGNoPC9BPiA9Jmd0OyA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+ICAgICAgID0mZ3Q7IDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgICAgIDxiPndoZW48L2I+IDxiPm90aGVyczwvYj4gPSZndDsKKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc0Ml83Ij5SZXM8L0E+KTsKKyAgICAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmNhc2U8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjBfMTMiPlNldF9QYXR0ZXJuPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTI3XzE0Ij5QYXR0ZXJuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzU1XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjdfMjMiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTZfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUyOF8yMyI+VGV4dDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1OF8xNiI+R2V0X1BhdHRlcm48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NThfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc1OF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81OF8xMiI+Y2hhcnNfcHRyPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRfUGF0dGVybiwgIm1lbnVfcGF0dGVybiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc1OF8xNiI+R2V0X1BhdHRlcm48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjdfMjMiPk1lbjwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MjhfMjMiPlRleHQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTI3XzE0Ij5QYXR0ZXJuPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzdfMTQiPlNldF9Gb3JtYXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUzN18yNiI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzhfMjYiPkxpbmVzPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUzOV8yNiI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjhfMTYiPlNldF9NZW51X0ZtdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzY4XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2OV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzY4XzE2Ij5MaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3MF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzY4XzE2Ij5Db2w8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9NZW51X0ZtdCwgInNldF9tZW51X2Zvcm1hdCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3M183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzY4XzE2Ij5TZXRfTWVudV9GbXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzdfMjYiPk1lbjwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTM4XzI2Ij5MaW5lczwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUzOV8yNiI+Q29sdW1uczwvQT4pKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NzNfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc3M183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81MzdfMTQiPlNldF9Gb3JtYXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzgyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NTFfMTQiPkZvcm1hdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Ml8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTUxXzIyIj5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1Ml8yMiI+TGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4NF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTUzXzIyIj5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4Nl8xMiI+Q19JbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4N18xNiI+TWVudV9GbXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc4N18xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc4N18xNiI+WTwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4OF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzg3XzE2Ij5YPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83ODZfMTIiPkNfSW50X0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9GbXQsICJtZW51X2Zvcm1hdCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5MV83Ij5MPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzkxXzEwIj5DPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzkyXzciPlJlczwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzg3XzE2Ij5NZW51X0ZtdDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1MV8yMiI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzkxXzciPkw8L0E+JzxiPkFjY2VzczwvYj4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc5MV8xMCI+QzwvQT4nPGI+QWNjZXNzPC9iPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83OTJfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc5Ml83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NTJfMjIiPkxpbmVzPC9BPiAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzkxXzciPkw8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1M18yMiI+Q29sdW1uczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc5MV8xMCI+QzwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1MV8xNCI+Rm9ybWF0PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODAyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjVfMTQiPlNldF9JdGVtX0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwMl8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTY1XzM0Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwM18zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTY2XzM0Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwNV8xNiI+U2V0X0l0ZW1fSW5pdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwNV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODA1XzE2Ij5NZW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA2XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MDVfMTYiPlByb2M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNldF9JdGVtX0luaXQsICJzZXRfaXRlbV9pbml0Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA5XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MDVfMTYiPlNldF9JdGVtX0luaXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjVfMzQiPk1lbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2Nl8zNCI+UHJvYzwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwOV83Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODA5XzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2NV8xNCI+U2V0X0l0ZW1fSW5pdF9Ib29rPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTcxXzE0Ij5TZXRfSXRlbV9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTZfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3MV8zNCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTdfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3Ml8zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTlfMTYiPlNldF9JdGVtX1Rlcm08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTlfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgxOV8xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyMF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODE5XzE2Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfSXRlbV9UZXJtLCAic2V0X2l0ZW1fdGVybSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyM183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODE5XzE2Ij5TZXRfSXRlbV9UZXJtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTcxXzM0Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzJfMzQiPlByb2M8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgyM183Ij5SZXM8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84MF80Ij5FX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODIzXzciPlJlczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3MV8xNCI+U2V0X0l0ZW1fVGVybV9Ib29rPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTc3XzE0Ij5TZXRfTWVudV9Jbml0X0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzBfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3N18zNCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzFfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3OF8zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzNfMTYiPlNldF9NZW51X0luaXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzNfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgzM18xNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzNF8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODMzXzE2Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfTWVudV9Jbml0LCAic2V0X21lbnVfaW5pdCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzN183Ij5SZXM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzhfMTIiPkV0aV9FcnJvcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODMzXzE2Ij5TZXRfTWVudV9Jbml0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTc3XzM0Ij5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzhfMzQiPlByb2M8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MzdfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgzN183Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NzdfMTQiPlNldF9NZW51X0luaXRfSG9vazwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4M18xNCI+U2V0X01lbnVfVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ0XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODNfMzQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ1XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODRfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ3XzE2Ij5TZXRfTWVudV9UZXJtPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ3XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NDdfMTYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDhfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg0N18xNiI+UHJvYzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X01lbnVfVGVybSwgInNldF9tZW51X3Rlcm0iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg0N18xNiI+U2V0X01lbnVfVGVybTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4M18zNCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTg0XzM0Ij5Qcm9jPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NTFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg1MV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODNfMTQiPlNldF9NZW51X1Rlcm1fSG9vazwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTg5XzEzIj5HZXRfSXRlbV9Jbml0X0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NThfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU4OV8zMyI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjBfMTYiPkl0ZW1fSW5pdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2MF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODYwXzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEl0ZW1fSW5pdCwgIml0ZW1faW5pdCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg2MF8xNiI+SXRlbV9Jbml0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTg5XzMzIj5NZW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTg5XzEzIj5HZXRfSXRlbV9Jbml0X0hvb2s8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU5NF8xMyI+R2V0X0l0ZW1fVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY2XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTRfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY4XzE2Ij5JdGVtX1Rlcm08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg2OF8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJdGVtX1Rlcm0sICJpdGVtX3Rlcm0iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NjhfMTYiPkl0ZW1fVGVybTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU5NF8zMyI+TWVuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU5NF8xMyI+R2V0X0l0ZW1fVGVybV9Ib29rPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODc0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTlfMTMiPkdldF9NZW51X0luaXRfSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3NF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTk5XzMzIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3Nl8xNiI+TWVudV9Jbml0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODc2XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NzZfMTYiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTWVudV9Jbml0LCAibWVudV9pbml0Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODc2XzE2Ij5NZW51X0luaXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTlfMzMiPk1lbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTlfMTMiPkdldF9NZW51X0luaXRfSG9vazwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjA0XzEzIj5HZXRfTWVudV9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODJfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYwNF8zMyI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODRfMTYiPk1lbnVfVGVybTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4NF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODg0XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1lbnVfVGVybSwgIm1lbnVfdGVybSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg4NF8xNiI+TWVudV9UZXJtPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjA0XzMzIj5NZW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjA0XzEzIj5HZXRfTWVudV9UZXJtX0hvb2s8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxM18xNCI+UmVkZWZpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxM18yNCI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxNF8yNCI+SXRlbXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNzhfOSI+SXRlbV9BcnJheV9BY2Nlc3M8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTNfMTYiPlNldF9JdGVtczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5M18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODkzXzE2Ij5NZW48L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODk0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTNfMTYiPkl0ZW1zPC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTZXRfSXRlbXMsICJzZXRfbWVudV9pdGVtcyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5N183Ij5SZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83OF8xMiI+RXRpX0Vycm9yPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cHJhZ21hPC9iPiBBc3NlcnQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxNF8yNCI+SXRlbXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTRfMjQiPkl0ZW1zPC9BPidMYXN0KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxNF8yNCI+SXRlbXM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTRfMjQiPkl0ZW1zPC9BPidMYXN0KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTE2XzQiPk1lbnVfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTdfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTNfMTYiPlNldF9JdGVtczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxM18yNCI+TWVuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjE0XzI0Ij5JdGVtczwvQT4uPGI+YWxsPC9iPidBZGRyZXNzKTsKKyAgICAgICAgIDxiPmlmPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODk3XzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTZfMTQiPkV0aV9FeGNlcHRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84OTdfNyI+UmVzPC9BPik7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MTNfMTQiPlJlZGVmaW5lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTEwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjlfMTMiPkl0ZW1fQ291bnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyOV8yNSI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiBOYXR1cmFsCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxMl8xNiI+Q291bnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTJfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkxMl8xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDb3VudCwgIml0ZW1fY291bnQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MTJfMTYiPkNvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjI5XzI1Ij5NZW48L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyOV8xMyI+SXRlbV9Db3VudDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxOF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjIzXzEzIj5JdGVtczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxOF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjIzXzIwIj5NZW48L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTlfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyNF8yMCI+SW5kZXg8L0E+PC9GT05UPiA6IFBvc2l0aXZlKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnVzZTwvYj4gSV9BcnJheTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IENfTWl0ZW1zICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyM18yNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiBQb2ludGVyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENfTWl0ZW1zLCAibWVudV9pdGVtcyIpOworCisgICAgICBQIDogUG9pbnRlciA6PSBDX01pdGVtcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjIzXzIwIj5NZW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IFAgPSA8Yj5udWxsPC9iPiA8Yj5vcjwvYj4gPGI+ZWxzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjI0XzIwIj5JbmRleDwvQT4gJmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjlfMTMiPkl0ZW1fQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjNfMjAiPk1lbjwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTE2XzQiPk1lbnVfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICBQIDo9IFAgKyBwdHJkaWZmX3QgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjRfMjAiPkluZGV4PC9BPikgLSAxKTsKKyAgICAgICAgIDxiPnJldHVybjwvYj4gUC48Yj5hbGw8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyM18xMyI+SXRlbXM8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MzhfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzN18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzIxIj5JdGVtczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzlfMTYiPk5ld21lbnU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkzOV8xNiI+SXRlbXM8L0E+PC9GT05UPiA6IFN5c3RlbS5BZGRyZXNzKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE5ld21lbnUsICJuZXdfbWVudSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0Ml83Ij5NPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5wcmFnbWE8L2I+IEFzc2VydCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzIxIj5JdGVtczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzOF8yMSI+SXRlbXM8L0E+J0xhc3QpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjJfNCI+TnVsbF9JdGVtPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjM4XzIxIj5JdGVtczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzOF8yMSI+SXRlbXM8L0E+J0xhc3QpIC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMTZfNCI+TWVudV9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk0Ml83Ij5NPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MzlfMTYiPk5ld21lbnU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MzhfMjEiPkl0ZW1zPC9BPi48Yj5hbGw8L2I+J0FkZHJlc3MpOworICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk0Ml83Ij5NPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzXzQiPk51bGxfTWVudTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMTZfNCI+TWVudV9FeGNlcHRpb248L0E+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk0Ml83Ij5NPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MzhfMTMiPkNyZWF0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY0NV8xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTU2XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NDVfMjIiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1OF8xNiI+RnJlZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1OF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTU4XzE2Ij5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZyZWUsICJmcmVlX21lbnUiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NjFfNyI+UmVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk1OF8xNiI+RnJlZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY0NV8yMiI+TWVuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NjFfNyI+UmVzPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODBfNCI+RV9PazwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl85Nl8xNCI+RXRpX0V4Y2VwdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk2MV83Ij5SZXM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjQ1XzIyIj5NZW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYzXzQiPk51bGxfTWVudTwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY0NV8xNCI+RGVsZXRlPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTcwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NjBfMTMiPkRyaXZlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3MF8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjYwXzIxIj5NZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3MV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjYxXzIxIj5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4XzkiPktleV9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NTRfOSI+RHJpdmVyX1Jlc3VsdDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTczXzE2Ij5Ecml2ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzNfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk3M18xNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk3M18xNiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEcml2ZXIsICJtZW51X2RyaXZlciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3N183Ij5SPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc4XzEyIj5FdGlfRXJyb3I8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk3M18xNiI+RHJpdmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjYwXzIxIj5NZW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjYxXzIxIj5LZXk8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzdfNyI+UjwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzgwXzQiPkVfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5jYXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzdfNyI+UjwvQT4gPGI+aXM8L2I+CisgICAgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfODhfNCI+RV9Vbmtub3duX0NvbW1hbmQ8L0E+ICA9Jmd0OyA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1Nl8yNyI+VW5rbm93bl9SZXF1ZXN0PC9BPjsKKyAgICAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl84OV80Ij5FX05vX01hdGNoPC9BPiAgICAgICAgID0mZ3Q7IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjU3XzI3Ij5Ob19NYXRjaDwvQT47CisgICAgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTJfNCI+RV9SZXF1ZXN0X0RlbmllZDwvQT4gfAorICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfOTBfNCI+RV9Ob3RfU2VsZWN0YWJsZTwvQT4gICA9Jmd0OyA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1NV8yNyI+UmVxdWVzdF9EZW5pZWQ8L0E+OworICAgICAgICAgICAgPGI+d2hlbjwvYj4gPGI+b3RoZXJzPC9iPiA9Jmd0OworICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzk2XzE0Ij5FdGlfRXhjZXB0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTc3XzciPlI8L0E+KTsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+Y2FzZTwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjU0XzI3Ij5NZW51X09rPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjYwXzEzIj5Ecml2ZXI8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xODBfMTQiPkZyZWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTJfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MF8yMCI+SUE8L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5M18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgxXzIwIj5GcmVlX0l0ZW1zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+cHJvY2VkdXJlPC9iPiBSZWxlYXNlIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uCisgICAgICAgIChJdGVtX0FycmF5LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNzhfOSI+SXRlbV9BcnJheV9BY2Nlc3M8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE4MF8yMCI+SUE8L0E+IC89IDxiPm51bGw8L2I+IDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgxXzIwIj5GcmVlX0l0ZW1zPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5OV8xNCI+STwvQT48L0ZPTlQ+IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xODBfMjAiPklBPC9BPidGaXJzdCAuLiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgwXzIwIj5JQTwvQT4nTGFzdCAtIDEpIDxiPmxvb3A8L2I+CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgwXzIwIj5JQTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk5OV8xNCI+STwvQT4pIC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYyXzQiPk51bGxfSXRlbTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzIwM18xNCI+RGVsZXRlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgwXzIwIj5JQTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk5OV8xNCI+STwvQT4pKTsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5sb29wPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgUmVsZWFzZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTgwXzIwIj5JQTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xODBfMTQiPkZyZWU8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwOV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTQ2XzEzIj5EZWZhdWx0X01lbnVfT3B0aW9uczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM1Ml8xMyI+R2V0X09wdGlvbnM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82M180Ij5OdWxsX01lbnU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTQ2XzEzIj5EZWZhdWx0X01lbnVfT3B0aW9uczwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMTVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE2OF8xMyI+RGVmYXVsdF9JdGVtX09wdGlvbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yNTZfMTMiPkdldF9PcHRpb25zPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjJfNCI+TnVsbF9JdGVtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE2OF8xMyI+RGVmYXVsdF9JdGVtX09wdGlvbnM8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzgwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bQpAQCAtMCwwICsxLDY4MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51cy5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1lbnUgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjI3IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDcvMDUvMDUgMjA6MjA6NTIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgbWVudSBiaW5kaW5nLjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQuIFBsZWFzZSBkb24ndCBjaGFuZ2UgaXQgbWFudWFsbHkhPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJ1biB0aGUgZ2VuZXJhdG9yIGluc3RlYWQuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IFN5c3RlbTsKKzxiPndpdGg8L2I+IEFkYS5DaGFyYWN0ZXJzLkxhdGluXzE7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MV80MCI+TWVudXM8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDlfMzUiPk1lbnVzPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IExpbmtlcl9PcHRpb25zICgiLWxtZW51dyIpOworICAgPGI+cHJhZ21hPC9iPiBMaW5rZXJfT3B0aW9ucyAoIi1sbmN1cnNlc3ciKTsKKworICAgU3BhY2UgOiBDaGFyYWN0ZXIgPGI+cmVuYW1lczwvYj4gQWRhLkNoYXJhY3RlcnMuTGF0aW5fMS5TcGFjZTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl85Ij5JdGVtPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnByaXZhdGU8L2I+OworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N185Ij5NZW51PC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnByaXZhdGU8L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEludGVyZmFjZSBjb25zdGFudHMgIC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzQiPk51bGxfSXRlbTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M180Ij5OdWxsX01lbnU8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjhfOSI+S2V5X0NvZGU8L0E+CisgICAgIDxiPnJhbmdlPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMSkgLi4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE3KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgcHJlZml4IE1fIHN0YW5kcyBmb3IgIk1lbnUgUmVxdWVzdCI8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjlfNCI+TV9MZWZ0X0l0ZW08L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzQiPk1fUmlnaHRfSXRlbTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAyOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV80Ij5NX1VwX0l0ZW08L0E+PC9GT05UPiAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzJfNCI+TV9Eb3duX0l0ZW08L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDQ7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzQiPk1fU2Nyb2xsVXBfTGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA1OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF80Ij5NX1Njcm9sbERvd25fTGluZTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgNjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzVfNCI+TV9TY3JvbGxEb3duX1BhZ2U8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzQiPk1fU2Nyb2xsVXBfUGFnZTwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyA4OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N180Ij5NX0ZpcnN0X0l0ZW08L0E+PC9GT05UPiAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgOTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzhfNCI+TV9MYXN0X0l0ZW08L0E+PC9GT05UPiAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDEwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV80Ij5NX05leHRfSXRlbTwvQT48L0ZPTlQ+ICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwXzQiPk1fUHJldmlvdXNfSXRlbTwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfNCI+TV9Ub2dnbGVfSXRlbTwvQT48L0ZPTlQ+ICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDEzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Ml80Ij5NX0NsZWFyX1BhdHRlcm48L0E+PC9GT05UPiAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTQ7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzXzQiPk1fQmFja19QYXR0ZXJuPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODRfNCI+TV9OZXh0X01hdGNoPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzIwN180Ij5LZXlfTWF4PC9BPiArIDE2OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NV80Ij5NX1ByZXZpb3VzX01hdGNoPC9BPjwvRk9OVD4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjA3XzQiPktleV9NYXg8L0E+ICsgMTc7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRm9yIHRob3NlIHdobyBsaWtlIHRoZSBvbGQgJ0MnIG5hbWVzIGZvciB0aGUgcmVxdWVzdCBjb2RlczwvRU0+PC9GT05UPgorICAgUkVRX0xFRlRfSVRFTSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY5XzQiPk1fTGVmdF9JdGVtPC9BPjsKKyAgIFJFUV9SSUdIVF9JVEVNICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl83MF80Ij5NX1JpZ2h0X0l0ZW08L0E+OworICAgUkVRX1VQX0lURU0gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzcxXzQiPk1fVXBfSXRlbTwvQT47CisgICBSRVFfRE9XTl9JVEVNICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNzJfNCI+TV9Eb3duX0l0ZW08L0E+OworICAgUkVRX1NDUl9VTElORSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzczXzQiPk1fU2Nyb2xsVXBfTGluZTwvQT47CisgICBSRVFfU0NSX0RMSU5FICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNzRfNCI+TV9TY3JvbGxEb3duX0xpbmU8L0E+OworICAgUkVRX1NDUl9EUEFHRSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzc1XzQiPk1fU2Nyb2xsRG93bl9QYWdlPC9BPjsKKyAgIFJFUV9TQ1JfVVBBR0UgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl83Nl80Ij5NX1Njcm9sbFVwX1BhZ2U8L0E+OworICAgUkVRX0ZJUlNUX0lURU0gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzc3XzQiPk1fRmlyc3RfSXRlbTwvQT47CisgICBSRVFfTEFTVF9JVEVNICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNzhfNCI+TV9MYXN0X0l0ZW08L0E+OworICAgUkVRX05FWFRfSVRFTSAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzc5XzQiPk1fTmV4dF9JdGVtPC9BPjsKKyAgIFJFUV9QUkVWX0lURU0gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl84MF80Ij5NX1ByZXZpb3VzX0l0ZW08L0E+OworICAgUkVRX1RPR0dMRV9JVEVNICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzgxXzQiPk1fVG9nZ2xlX0l0ZW08L0E+OworICAgUkVRX0NMRUFSX1BBVFRFUk4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzgyXzQiPk1fQ2xlYXJfUGF0dGVybjwvQT47CisgICBSRVFfQkFDS19QQVRURVJOICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfODNfNCI+TV9CYWNrX1BhdHRlcm48L0E+OworICAgUkVRX05FWFRfTUFUQ0ggICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzg0XzQiPk1fTmV4dF9NYXRjaDwvQT47CisgICBSRVFfUFJFVl9NQVRDSCAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5NZW51X1JlcXVlc3RfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfODVfNCI+TV9QcmV2aW91c19NYXRjaDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc3XzE0Ij5SZXF1ZXN0X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDZfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc3XzI4Ij5LZXk8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjVfMTIiPk1lbnVfUmVxdWVzdF9Db2RlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83OF8yOCI+TmFtZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworCisgICA8Yj5mdW5jdGlvbjwvYj4gIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84Nl8xMyI+UmVxdWVzdF9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84Nl8yNyI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82NV8xMiI+TWVudV9SZXF1ZXN0X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEV4Y2VwdGlvbnMgIC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzQiPk1lbnVfRXhjZXB0aW9uPC9BPjwvRk9OVD4gOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE1lbnUgb3B0aW9uczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyM18xMCI+T25lX1ZhbHVlZDwvQT48L0ZPTlQ+ICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNF8xMCI+U2hvd19EZXNjcmlwdGlvbnM8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNV8xMCI+Um93X01ham9yX09yZGVyPC9BPjwvRk9OVD4gICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNl8xMCI+SWdub3JlX0Nhc2U8L0E+PC9GT05UPiAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyN18xMCI+U2hvd19NYXRjaGVzPC9BPjwvRk9OVD4gICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOF8xMCI+Tm9uX0N5Y2xpYzwvQT48L0ZPTlQ+ICAgICAgICA6IEJvb2xlYW47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+KTsKKworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPiA8Yj51c2U8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjNfMTAiPk9uZV9WYWx1ZWQ8L0E+ICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDAgLi4gIDA7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjRfMTAiPlNob3dfRGVzY3JpcHRpb25zPC9BPiA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDEgLi4gIDE7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjVfMTAiPlJvd19NYWpvcl9PcmRlcjwvQT4gICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDIgLi4gIDI7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjZfMTAiPklnbm9yZV9DYXNlPC9BPiAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDMgLi4gIDM7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjdfMTAiPlNob3dfTWF0Y2hlczwvQT4gICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDQgLi4gIDQ7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjhfMTAiPk5vbl9DeWNsaWM8L0E+ICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDUgLi4gIDU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+J1NpemUgPGI+dXNlPC9iPiAzMjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gV2FybmluZ3MgKE9uKTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMDA5XzEzIj5EZWZhdWx0X01lbnVfT3B0aW9uczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEluaXRpYWwgZGVmYXVsdCBvcHRpb25zIGZvciBhIG1lbnUuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTQ2XzEzIj5EZWZhdWx0X01lbnVfT3B0aW9uczwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEl0ZW0gb3B0aW9uczwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NV8xMCI+U2VsZWN0YWJsZTwvQT48L0ZPTlQ+ICA6IEJvb2xlYW47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+KTsKKworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPiA8Yj51c2U8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTVfMTAiPlNlbGVjdGFibGU8L0E+ICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDAgLi4gIDA7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+J1NpemUgPGI+dXNlPC9iPiAzMjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gV2FybmluZ3MgKE9uKTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xMDE1XzEzIj5EZWZhdWx0X0l0ZW1fT3B0aW9uczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEluaXRpYWwgZGVmYXVsdCBvcHRpb25zIGZvciBhbiBpdGVtLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE2OF8xMyI+RGVmYXVsdF9JdGVtX09wdGlvbnM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEl0ZW0gQXJyYXk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPGI+dHlwZTwvYj4gSXRlbV9BcnJheSA8Yj5pczwvYj4gPGI+YXJyYXk8L2I+IChQb3NpdGl2ZSA8Yj5yYW5nZTwvYj4gJmx0OyZndDspIDxiPm9mPC9iPiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgSXRlbV9BcnJheSk7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gSXRlbV9BcnJheTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTkyXzE0Ij5GcmVlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85OTJfMjAiPklBPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE3OF85Ij5JdGVtX0FycmF5X0FjY2VzczwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODFfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk5M18yMCI+RnJlZV9JdGVtczwvQT48L0ZPTlQ+IDogQm9vbGVhbiA6PSBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJlbGVhc2UgdGhlIG1lbW9yeSBmb3IgYW4gYWxsb2NhdGVkIGl0ZW0gYXJyYXk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSWYgRnJlZV9JdGVtcyBpcyBUcnVlLCBjYWxsIERlbGV0ZSgpIGZvciBhbGwgdGhlIGl0ZW1zIGluPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBhcnJheS48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21pdGVtX25ldy4zeC5odG1sIj5taXRlbV9uZXcuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk0XzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTFfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk0XzIxIj5OYW1lPC9BPjwvRk9OVD4gICAgICAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Ml8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTVfMjEiPkRlc2NyaXB0aW9uPC9BPjwvRk9OVD4gOiBTdHJpbmcgOj0gIiIpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX25ldy4zeC5odG1sIj5uZXdfaXRlbSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgaW5saW5lZC48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gTmV3X0l0ZW0gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzIzIj5OYW1lPC9BPjwvRk9OVD4gICAgICAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk4XzIzIj5EZXNjcmlwdGlvbjwvQT48L0ZPTlQ+IDogU3RyaW5nIDo9ICIiKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+CisgICAgIDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE5MV8xMyI+Q3JlYXRlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmV3LjN4Lmh0bWwiPm5ld19pdGVtKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTI0XzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzEyNF8yMiI+SXRtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX25ldy4zeC5odG1sIj5mcmVlX2l0ZW0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUmVzZXRzIEl0bSB0byBOdWxsX0l0ZW08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21pdGVtX3ZhbHVlLjN4Lmh0bWwiPm1pdGVtX3ZhbHVlLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTUyXzE0Ij5TZXRfVmFsdWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE1Ml8yNSI+SXRtPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEzXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xNTNfMjUiPlZhbHVlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fdmFsdWUuM3guaHRtbCI+c2V0X2l0ZW1fdmFsdWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMTJfMTQiPlNldF9WYWx1ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTY2XzEzIj5WYWx1ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTY2XzIwIj5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX3ZhbHVlLjN4Lmh0bWwiPml0ZW1fdmFsdWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yMThfMTMiPlZhbHVlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9taXRlbV92aXNpYmxlLjN4Lmh0bWwiPm1pdGVtX3Zpc2libGUuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE3OV8xMyI+VmlzaWJsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyN18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMTc5XzIyIj5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX3Zpc2libGUuM3guaHRtbCI+aXRlbV92aXNpYmxlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMjI3XzEzIj5WaXNpYmxlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwiPm1pdGVtX29wdHMuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTFfMTQiPlNldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM2XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8xOTFfMjciPkl0bTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzE5Ml8yNyI+T3B0aW9uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sIj5zZXRfaXRlbV9vcHRzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFuIG92ZXJsb2FkZWQgU2V0X09wdGlvbnMgaXMgZGVmaW5lZCBsYXRlci4gUHJhZ21hIElubGluZSBhcHBlYXJzIHRoZXJlPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjA3XzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0Ml8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjA3XzMwIj5JdG08L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQzXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMDhfMzAiPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNTNfOSI+SXRlbV9PcHRpb25fU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzIwOV8zMCI+T248L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fb3B0cy4zeC5odG1sIj5pdGVtX29wdHNfb24oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBpdGVtX29wdHNfb2ZmKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQW4gb3ZlcmxvYWRlZCBTd2l0Y2hfT3B0aW9ucyBpcyBkZWZpbmVkIGxhdGVyLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQcmFnbWEgSW5saW5lIGFwcGVhcnMgdGhlcmU8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMzFfMTQiPkdldF9PcHRpb25zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMzFfMjciPkl0bTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUyXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yMzJfMjciPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTUzXzkiPkl0ZW1fT3B0aW9uX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwiPml0ZW1fb3B0cygpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI0Ml8xMyI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI0Ml8yNiI+SXRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82Ml80Ij5OdWxsX0l0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzE1M185Ij5JdGVtX09wdGlvbl9TZXQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwiPml0ZW1fb3B0cygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBbiBvdmVybG9hZGVkIEdldF9PcHRpb25zIGlzIGRlZmluZWQgbGF0ZXIuIFByYWdtYSBJbmxpbmUgYXBwZWFycyB0aGVyZTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sIj5taXRlbV9uYW1lLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI1MF8xNCI+TmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2NV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjUwXzIwIj5JdG08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjZfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI1MV8yMCI+TmFtZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9uYW1lLjN4Lmh0bWwiPml0ZW1fbmFtZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+ICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjU5XzEzIj5OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY4XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNTlfMTkiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9taXRlbV9uYW1lLjN4Lmh0bWwiPml0ZW1fbmFtZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbXBsZW1lbnRlZCBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKE5hbWUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNjdfMTQiPkRlc2NyaXB0aW9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNjdfMjciPkl0bTwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yNjhfMjciPkRlc2NyaXB0aW9uPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX25hbWUuM3guaHRtbCI+aXRlbV9kZXNjcmlwdGlvbigpOzwvQT48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+ICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjc2XzEzIj5EZXNjcmlwdGlvbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3OF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjc2XzI2Ij5JdG08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fbmFtZS4zeC5odG1sIj5pdGVtX2Rlc2NyaXB0aW9uKCk7PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbXBsZW1lbnRlZCBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKERlc2NyaXB0aW9uKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yODRfMTQiPlNldF9DdXJyZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yODRfMjciPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4OV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMjg1XzI3Ij5JdG08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+c2V0X2N1cnJlbnRfaXRlbSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzI4OF8xNCI+U2V0X0N1cnJlbnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8yOThfMTMiPkN1cnJlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzI5OF8yMiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWl0ZW1fY3VycmVudC4zeC5odG1sIj5jdXJyZW50X2l0ZW0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTRfMTMiPkN1cnJlbnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzExXzE0Ij5TZXRfVG9wX1JvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5OV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzExXzI3Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzAwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMTJfMjciPkxpbmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+c2V0X3RvcF9yb3coKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8yOTlfMTQiPlNldF9Ub3BfUm93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwNV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzI1XzEzIj5Ub3BfUm93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA1XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMjVfMjIiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+dG9wX3JvdygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMwNV8xMyI+VG9wX1JvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzMzOF8xMyI+R2V0X0luZGV4PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzEwXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zMzhfMjQiPkl0bTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4pIDxiPnJldHVybjwvYj4gUG9zaXRpdmU7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbCI+aXRlbV9pbmRleCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQbGVhc2Ugbm90ZSB0aGF0IGluIHRoaXMgYmluZGluZyB3ZSBzdGFydCB0aGUgbnVtYmVyaW5nIG9mIGl0ZW1zPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHdpdGggMS4gU28gdGhpcyBpcyBudW1iZXIgaXMgb25lIG1vcmUgdGhhbiB5b3UgZ2V0IGZyb20gdGhlIGxvdzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBsZXZlbCBjYWxsLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzMxMF8xMyI+R2V0X0luZGV4PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X3Bvc3QuM3guaHRtbCI+bWVudV9wb3N0LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1MV8xNCI+UG9zdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMl8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzUxXzIwIj5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM1Ml8yMCI+UG9zdDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfcG9zdC4zeC5odG1sIj5wb3N0X21lbnUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB1bnBvc3RfbWVudSgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzIyXzE0Ij5Qb3N0PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3MV8xNCI+U2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM3MV8yNyI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzNF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzcyXzI3Ij5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTIxXzkiPk1lbnVfT3B0aW9uX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X29wdHMuM3guaHRtbCI+c2V0X21lbnVfb3B0cygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9PcHRpb25zKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzg3XzE0Ij5Td2l0Y2hfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzOV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfMzg3XzMwIj5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQwXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl8zODhfMzAiPk9wdGlvbnM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xMjFfOSI+TWVudV9PcHRpb25fU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzM4OV8zMCI+T248L0E+PC9GT05UPiAgICAgIDogQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0c19vbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG1lbnVfb3B0c19vZmYoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFN3aXRjaF9PcHRpb25zKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDExXzE0Ij5HZXRfT3B0aW9uczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0N18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDExXzI3Ij5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0OF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDEyXzMyIj5PcHRpb25zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cygpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQyMl8xMyI+R2V0X09wdGlvbnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQyMl8yNiI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82M180Ij5OdWxsX01lbnU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzEyMV85Ij5NZW51X09wdGlvbl9TZXQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X09wdGlvbnMpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV93aW4uM3guaHRtbCI+bWVudV93aW4uM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDMwXzE0Ij5TZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MzBfMjYiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80MzFfMjYiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3dpbi4zeC5odG1sIj5zZXRfbWVudV93aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zNjFfMTQiPlNldF9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzY3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NDRfMTMiPkdldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ0NF8yNSI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM2N18xMyI+R2V0X1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NTRfMTQiPlNldF9TdWJfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NTRfMzAiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3M18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDU1XzMwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV93aW4uM3guaHRtbCI+c2V0X21lbnVfc3ViKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMzcyXzE0Ij5TZXRfU3ViX1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ2OF8xMyI+R2V0X1N1Yl9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzhfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ2OF8yOSI+TWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3dpbi4zeC5odG1sIj5tZW51X3N1YigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM3OF8xMyI+R2V0X1N1Yl9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDc4XzE0Ij5TY2FsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4M18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDc4XzIxIj5NZW48L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg0XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80NzlfMjEiPkxpbmVzPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4NV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNDgwXzIxIj5Db2x1bW5zPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV93aW4uM3guaHRtbCI+c2NhbGVfbWVudSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzM4M18xNCI+U2NhbGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL21lbnVfY3Vyc29yLjN4Lmh0bWwiPm1lbnVfY3Vyc29yLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzQ5N18xNCI+UG9zaXRpb25fQ3Vyc29yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk0XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl80OTdfMzEiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2N1cnNvci4zeC5odG1sIj5wb3NfbWVudV9jdXJzb3IoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8zOTRfMTQiPlBvc2l0aW9uX0N1cnNvcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9tYXJrLjN4Lmh0bWwiPm1lbnVfbWFyay4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDAzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MTBfMTQiPlNldF9NYXJrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDAzXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MTBfMjQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUxMV8yNCI+TWFyazwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfbWFyay4zeC5odG1sIj5zZXRfbWVudV9tYXJrKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDAzXzE0Ij5TZXRfTWFyazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDA5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MjlfMTQiPk1hcms8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDlfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzUyOV8yMCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxMF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTMwXzIwIj5NYXJrPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfbWFyay4zeC5odG1sIj5tZW51X21hcmsoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+ICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQxM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTM4XzEzIj5NYXJrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDEzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81MzhfMTkiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEltcGxlbWVudGVkIGFzIGZ1bmN0aW9uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoTWFyayk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU0N18xNCI+U2V0X0ZvcmVncm91bmQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTQ4XzciPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NDlfNyI+Rm9yZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTUwXzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5zZXRfbWVudV9mb3JlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDIzXzE0Ij5TZXRfRm9yZWdyb3VuZDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDMxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NjZfMTQiPkZvcmVncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU2Nl8yNiI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU2N18yNiI+Rm9yZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2ZvcmUoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTc1XzE0Ij5Gb3JlZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NzVfMjYiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81NzZfMjYiPkZvcmU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU3N18yNiI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfZm9yZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEZvcmVncm91bmQpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl81ODZfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4N183Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNTg4XzciPkJhY2s8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzU4OV83Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+c2V0X21lbnVfYmFjaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFNldF9CYWNrZ3JvdW5kKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjA1XzE0Ij5CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUxXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MDVfMjYiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYwNl8yNiI+QmFjazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYmFjaygpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM2IiMyfDwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MTRfMTQiPkJhY2tncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYxNF8yNiI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYxNV8yNiI+QmFjazwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjE2XzI2Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9iYWNrKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoQmFja2dyb3VuZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzYyNV8xNCI+U2V0X0dyZXk8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjI1XzI0Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjI2XzI0Ij5HcmV5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82MjdfMjQiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5zZXRfbWVudV9ncmV5KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNDYzXzE0Ij5TZXRfR3JleTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NDRfMTQiPkdyZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzFfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY0NF8yMCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3Ml8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjQ1XzIwIj5HcmV5PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9ncmV5KCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY1M18xNCI+R3JleTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NTNfMjAiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjU0XzIwIj5HcmV5PC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NzlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjU1XzIwIj5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9ncmV5KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR3JleSk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY2NF8xNCI+U2V0X1BhZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODRfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY2NF8zMyI+TWVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82NjVfMzMiPlBhZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IENoYXJhY3RlciA6PSBTcGFjZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5zZXRfbWVudV9wYWQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80ODRfMTQiPlNldF9QYWRfQ2hhcmFjdGVyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY3OV8xNCI+UGFkX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjc5XzI5Ij5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTFfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY4MF8yOSI+UGFkPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IENoYXJhY3Rlcik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X3BhZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzQ5MF8xNCI+UGFkX0NoYXJhY3RlcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwiPm1lbnVfc3BhY2luZy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTAwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82ODhfMTQiPlNldF9TcGFjaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTAwXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82ODhfMjciPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTAxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl82ODlfMjciPkRlc2NyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiA6PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwMl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNjkwXzI3Ij5Sb3c8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+ICAgOj0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzY5MV8yNyI+Q29sPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+IDo9IDApOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3NwYWNpbmcuM3guaHRtbCI+c2V0X21lbnVfc3BhY2luZygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwMF8xNCI+U2V0X1NwYWNpbmc8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzA3XzE0Ij5TcGFjaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA4XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83MDdfMjMiPk1lbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDlfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzcwOF8yMyI+RGVzY3I8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzA5XzIzIj5Sb3c8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzEwXzIzIj5Db2w8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9zcGFjaW5nLjN4Lmh0bWwiPm1lbnVfc3BhY2luZygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUwOF8xNCI+U3BhY2luZzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwiPm1lbnVfcGF0dGVybi4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzczMl8xMyI+U2V0X1BhdHRlcm48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzczMl8yNiI+TWVuPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzczM18yNiI+VGV4dDwvQT48L0ZPTlQ+IDogU3RyaW5nKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfcGF0dGVybi4zeC5odG1sIj5zZXRfbWVudV9wYXR0ZXJuKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJldHVybiBUUlVFIGlmIHRoZSBwYXR0ZXJuIG1hdGNoZXMsIEZBTFNFIG90aGVyd2lzZTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzUyMF8xMyI+U2V0X1BhdHRlcm48L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzU1XzE0Ij5QYXR0ZXJuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NTVfMjMiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjhfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc1Nl8yMyI+VGV4dDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTI3XzE0Ij5QYXR0ZXJuPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NjRfMTQiPlNldF9Gb3JtYXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc2NF8yNiI+TWVuPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83NjVfMjYiPkxpbmVzPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc2Nl8yNiI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGltcGxlbWVudGVkOiAwIGFyZ3VtZW50IGZvciBMaW5lcyBvciBDb2x1bW5zOzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpbnN0ZWFkIHVzZSBGb3JtYXQgdG8gZ2V0IHRoZSBjdXJyZW50IHNpemVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICBUaGUgIGRlZmF1bHQgIGZvcm1hdCAgaXMgIDE2ICByb3dzLCAgMSAgY29sdW1uLiAgICBDYWxsaW5nPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICBzZXRfbWVudV9mb3JtYXQgIHdpdGggYSBudWxsIG1lbnUgcG9pbnRlciB3aWxsIGNoYW5nZSB0aGlzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICBkZWZhdWx0LiAgQSB6ZXJvIHJvdyBvciBjb2x1bW4gYXJndW1lbnQgdG8gc2V0X21lbnVfZm9ybWF0PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICBpcyAgaW50ZXJwcmV0ZWQgIGFzICBhICByZXF1ZXN0ICBub3QgdG8gY2hhbmdlIHRoZSBjdXJyZW50PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICB2YWx1ZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9mb3JtYXQuM3guaHRtbCI+c2V0X21lbnVfZm9ybWF0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTM3XzE0Ij5TZXRfRm9ybWF0PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzc4Ml8xNCI+Rm9ybWF0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUxXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83ODJfMjIiPk1lbjwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1Ml8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfNzgzXzIyIj5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTUzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl83ODRfMjIiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU1MV8xNCI+Rm9ybWF0PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPnByb2NlZHVyZTwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTYxXzQ5Ij5NZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODAyXzE0Ij5TZXRfSXRlbV9Jbml0X0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjVfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwMl8zNCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjZfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgwM18zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPnNldF9pdGVtX2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjVfMTQiPlNldF9JdGVtX0luaXRfSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MTZfMTQiPlNldF9JdGVtX1Rlcm1fSG9vazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3MV8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODE2XzM0Ij5NZW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3Ml8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODE3XzM0Ij5Qcm9jPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2hvb2suM3guaHRtbCI+c2V0X2l0ZW1fdGVybSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3MV8xNCI+U2V0X0l0ZW1fVGVybV9Ib29rPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzgzMF8xNCI+U2V0X01lbnVfSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc3XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MzBfMzQiPk1lbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTc4XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84MzFfMzQiPlByb2M8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81NjFfOSI+TWVudV9Ib29rX0Z1bmN0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5zZXRfbWVudV9pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTc3XzE0Ij5TZXRfTWVudV9Jbml0X0hvb2s8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfODQ0XzE0Ij5TZXRfTWVudV9UZXJtX0hvb2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODNfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg0NF8zNCI+TWVuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODRfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg0NV8zNCI+UHJvYzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2MV85Ij5NZW51X0hvb2tfRnVuY3Rpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9ob29rLjN4Lmh0bWwiPnNldF9tZW51X3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODNfMTQiPlNldF9NZW51X1Rlcm1fSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg1OF8xMyI+R2V0X0l0ZW1fSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg5XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NThfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5pdGVtX2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81ODlfMTMiPkdldF9JdGVtX0luaXRfSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg2Nl8xMyI+R2V0X0l0ZW1fVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk0XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NjZfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5pdGVtX3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTRfMTMiPkdldF9JdGVtX1Rlcm1fSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg3NF8xMyI+R2V0X01lbnVfSW5pdF9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk5XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84NzRfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81OTlfMTMiPkdldF9NZW51X0luaXRfSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg4Ml8xMyI+R2V0X01lbnVfVGVybV9Ib29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA0XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl84ODJfMzMiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTYxXzkiPk1lbnVfSG9va19GdW5jdGlvbjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL21lbnVfaG9vay4zeC5odG1sIj5tZW51X3Rlcm0oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MDRfMTMiPkdldF9NZW51X1Rlcm1fSG9vazwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9pdGVtcy4zeC5odG1sIj5tZW51X2l0ZW1zLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81NiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg5MF8xNCI+UmVkZWZpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTNfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg5MF8yNCI+TWVuPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzg5MV8yNCI+SXRlbXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNzhfOSI+SXRlbV9BcnJheV9BY2Nlc3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9pdGVtcy4zeC5odG1sIj5zZXRfbWVudV9pdGVtcygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzYxM18xNCI+UmVkZWZpbmU8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxOF8xNCI+U2V0X0l0ZW1zPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE4XzI1Ij5NZW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTlfMjUiPkl0ZW1zPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPikgPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjEzXzE0Ij5SZWRlZmluZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByYWdtYSBJbmxpbmUgKFNldF9JdGVtcyk7PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyM18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTE4XzEzIj5JdGVtczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyM18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTE4XzIwIj5NZW48L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkxOV8yMCI+SW5kZXg8L0E+PC9GT05UPiA6IFBvc2l0aXZlKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU2XzkiPkl0ZW08L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MjNfMTMiPkl0ZW1zPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81OCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyOV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRiLmh0bSNyZWZfOTEwXzEzIj5JdGVtX0NvdW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MTBfMjUiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pIDxiPnJldHVybjwvYj4gTmF0dXJhbDsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9pdGVtcy4zeC5odG1sIj5pdGVtX2NvdW50KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjI5XzEzIj5JdGVtX0NvdW50PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9tZW51X25ldy4zeC5odG1sIj5tZW51X25ldy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzkzN18xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM4XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85MzdfMjEiPkl0ZW1zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl8xNzhfOSI+SXRlbV9BcnJheV9BY2Nlc3M8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzU3XzkiPk1lbnU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X25ldy4zeC5odG1sIj5uZXdfbWVudSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgaW5saW5lZDwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gTmV3X01lbnUgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQyXzIzIj5JdGVtczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfMTc4XzkiPkl0ZW1fQXJyYXlfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl82MzhfMTMiPkNyZWF0ZTwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk1Nl8xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjQ1XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NTZfMjIiPk1lbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9tZW51X25ldy4zeC5odG1sIj5mcmVlX21lbnUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUmVzZXQgTWVuIHRvIE51bGxfTWVudTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgaW5saW5lZDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vbWVudV9kcml2ZXIuM3guaHRtbCI+bWVudV9kcml2ZXIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTRfOSI+RHJpdmVyX1Jlc3VsdDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTRfMjciPk1lbnVfT2s8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTVfMjciPlJlcXVlc3RfRGVuaWVkPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU2XzI3Ij5Vbmtub3duX1JlcXVlc3Q8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTdfMjciPk5vX01hdGNoPC9BPjwvRk9OVD4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2FkYi5odG0jcmVmXzk3MF8xMyI+RHJpdmVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYwXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzBfMjEiPk1lbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTdfOSI+TWVudTwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYxXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZGIuaHRtI3JlZl85NzFfMjEiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjhfOSI+S2V5X0NvZGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbWVudXNfX2Fkcy5odG0jcmVmXzY1NF85Ij5Ecml2ZXJfUmVzdWx0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vbWVudV9kcml2ZXIuM3guaHRtbCI+bWVudV9kcml2ZXIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRHJpdmVyIGlzIG5vdCBpbmxpbmVkPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IEltcGxlbWVudGVkOiBtZW51X3JlcXVlc3RfbmFtZSwgbWVudV9yZXF1ZXN0X2J5X25hbWU8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5wcml2YXRlPC9iPgorICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNTZfOSI+SXRlbTwvQT4gICA8Yj5pczwvYj4gPGI+bmV3PC9iPiBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisgICA8Yj50eXBlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPiAgIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKworICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjJfNCI+TnVsbF9JdGVtPC9BPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81Nl85Ij5JdGVtPC9BPiA6PSAwOworICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tZW51c19fYWRzLmh0bSNyZWZfNjNfNCI+TnVsbF9NZW51PC9BPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl81N185Ij5NZW51PC9BPiA6PSAwOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1lbnVzX19hZHMuaHRtI3JlZl80OV8zNSI+TWVudXM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzYTE3OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtCkBAIC0wLDAgKzEsMjIzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5Nb3VzZSAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMjIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo1MToxMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsgPGI+dXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzQ4XzM1Ij5Nb3VzZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj51c2U8L2I+IDxiPnR5cGU8L2I+IFN5c3RlbS5CaXRfT3JkZXI7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85OF8xMyI+SGFzX01vdXNlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzE2Ij5Nb3VzZV9BdmFpbDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTW91c2VfQXZhaWwsICJfbmNfaGFzX21vdXNlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjdfMTMiPkhhc19LZXk8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDRfNCI+S2V5X01vdXNlPC9BPikgPGI+b3I8L2I+IDxiPmVsc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzUyXzE2Ij5Nb3VzZV9BdmFpbDwvQT4gLz0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOThfMTMiPkhhc19Nb3VzZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzNfMTMiPkdldF9Nb3VzZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMTIiPkV2ZW50X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+OworCisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl8xNiI+R2V0bW91c2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNjZfMTYiPkV2PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl82NF8xMiI+RXZlbnRfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBHZXRtb3VzZSwgImdldG1vdXNlIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjlfNyI+RXZlbnQ8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzY2XzE2Ij5HZXRtb3VzZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzY5XzciPkV2ZW50PC9BPic8Yj5BY2Nlc3M8L2I+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl82OV83Ij5FdmVudDwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzM18xMyI+R2V0X01vdXNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDFfMTQiPlJlZ2lzdGVyX1JlcG9ydGFibGVfRXZlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83N180MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAyXzciPkJ1dHRvbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OF80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAzXzciPlN0YXRlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTA0XzciPk1hc2s8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODFfNyI+QnV0dG9uX05yPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gTmF0dXJhbCA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82OF85Ij5Nb3VzZV9CdXR0b248L0E+J1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAyXzciPkJ1dHRvbjwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Ml83Ij5TdGF0ZV9OcjwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiBOYXR1cmFsIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDNfNyI+U3RhdGU8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwMl83Ij5CdXR0b248L0E+IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83N18xMiI+TW9kaWZpZXJfS2V5czwvQT4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDNfNyI+U3RhdGU8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzgwXzI2Ij5QcmVzc2VkPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAyXzciPkJ1dHRvbjwvQT4gPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc2XzEyIj5SZWFsX0J1dHRvbnM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDRfNyI+TWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTA0XzciPk1hc2s8L0E+IDxiPm9yPC9iPiAoKDIgKiogKDYgKiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl84MV83Ij5CdXR0b25fTnI8L0E+KSkgKiogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfODJfNyI+U3RhdGVfTnI8L0E+KTsKKyAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMDRfNyI+TWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTA0XzciPk1hc2s8L0E+IDxiPm9yPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMjE2XzQiPkJVVFRPTl9DVFJMPC9BPiAqKiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfODFfNyI+QnV0dG9uX05yPC9BPiAtIDQpKTsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEwMV8xNCI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTEwXzE0Ij5SZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50czwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzQyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMTFfNyI+QnV0dG9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Nl80MiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTEyXzciPlN0YXRlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IEJ1dHRvbl9TdGF0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfNDIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzExM183Ij5NYXNrPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmZvcjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDBfMTEiPlM8L0E+PC9GT05UPiA8Yj5pbjwvYj4gQnV0dG9uX1N0YXRlcyc8Yj5SYW5nZTwvYj4gPGI+bG9vcDwvYj4KKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMTJfNyI+U3RhdGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMDBfMTEiPlM8L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAxXzE0Ij5SZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTExXzciPkJ1dHRvbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEwMF8xMSI+UzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzExM183Ij5NYXNrPC9BPik7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzExMF8xNCI+UmVnaXN0ZXJfUmVwb3J0YWJsZV9FdmVudHM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyM18xMyI+U3RhcnRfTW91c2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyM18yNiI+TWFzazwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjZfNCI+QWxsX0V2ZW50czwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTBfMTYiPk1NYXNrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMTBfMTYiPk08L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMTBfMTYiPk88L0E+PC9GT05UPiA6IDxiPmFjY2VzczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTU1hc2ssICJtb3VzZW1hc2siKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzXzciPlI8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNF83Ij5PbGQ8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMTNfNyI+UjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTEwXzE2Ij5NTWFzazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyM18yNiI+TWFzazwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzExNF83Ij5PbGQ8L0E+JzxiPkFjY2VzczwvYj4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzExM183Ij5SPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY1XzQiPk5vX0V2ZW50czwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg3MF8xNCI+QmVlcDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTE0XzciPk9sZDwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyM18xMyI+U3RhcnRfTW91c2U8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjhfMTQiPkVuZF9Nb3VzZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyM18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTI4XzI1Ij5NYXNrPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjVfNCI+Tm9fRXZlbnRzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTI4XzI1Ij5NYXNrPC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NV80Ij5Ob19FdmVudHM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzBfMTQiPkJlZXA8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyOF8xNCI+RW5kX01vdXNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTM1XzE0Ij5EaXNwYXRjaF9FdmVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTM1XzMwIj5NYXNrPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyXzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzZfMzAiPkJ1dHRvbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82OF85Ij5Nb3VzZV9CdXR0b248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTM3XzMwIj5TdGF0ZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzlfOSI+QnV0dG9uX1N0YXRlPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8xNCI+RGlzcGF0Y2hfRXZlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzVfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNl8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzM18zMCI+U3RhdGU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT4pIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzhfNyI+TDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMl8zMCI+QnV0dG9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83NF8yNiI+QWx0PC9BPjsgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcHJlc2V0IHRvIG5vbiByZWFsIGJ1dHRvbjs8L0VNPjwvRk9OVD4KKyAgICAgIDxiPmlmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzMwIj5NYXNrPC9BPiA8Yj5hbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzIyMV80Ij5CVVRUT04xX0VWRU5UUzwvQT4pIC89IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMl8zMCI+QnV0dG9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82OF8yNiI+TGVmdDwvQT47CisgICAgICA8Yj5lbHNpZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT4gPGI+YW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8yMjJfNCI+QlVUVE9OMl9FVkVOVFM8L0E+KSAvPSAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjlfMjYiPk1pZGRsZTwvQT47CisgICAgICA8Yj5lbHNpZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8zMCI+TWFzazwvQT4gPGI+YW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8yMjNfNCI+QlVUVE9OM19FVkVOVFM8L0E+KSAvPSAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzBfMjYiPlJpZ2h0PC9BPjsKKyAgICAgIDxiPmVsc2lmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzMwIj5NYXNrPC9BPiA8Yj5hbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzIyNF80Ij5CVVRUT040X0VWRU5UUzwvQT4pIC89IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMl8zMCI+QnV0dG9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83MV8yNiI+QnV0dG9uNDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4gPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc2XzEyIj5SZWFsX0J1dHRvbnM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzhfNyI+TDwvQT4gOj0gMiAqKiAoNiAqIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY4XzkiPk1vdXNlX0J1dHRvbjwvQT4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4pKTsKKyAgICAgICAgIDxiPmZvcjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTJfMTQiPkk8L0E+PC9GT05UPiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzlfOSI+QnV0dG9uX1N0YXRlPC9BPic8Yj5SYW5nZTwvYj4gPGI+bG9vcDwvYj4KKyAgICAgICAgICAgIDxiPmlmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzMwIj5NYXNrPC9BPiA8Yj5hbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzOF83Ij5MPC9BPikgLz0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMzXzMwIj5TdGF0ZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTUyXzE0Ij5JPC9BPjsKKyAgICAgICAgICAgICAgIDxiPmV4aXQ8L2I+OworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzhfNyI+TDwvQT4gOj0gMiAqIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzOF83Ij5MPC9BPjsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMzXzMwIj5TdGF0ZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfODBfMjYiPlByZXNzZWQ8L0E+OworICAgICAgICAgPGI+aWY8L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzFfMzAiPk1hc2s8L0E+IDxiPmFuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMjE2XzQiPkJVVFRPTl9DVFJMPC9BPikgLz0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzcyXzI2Ij5Db250cm9sPC9BPjsKKyAgICAgICAgIDxiPmVsc2lmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzMwIj5NYXNrPC9BPiA8Yj5hbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzIxN180Ij5CVVRUT05fU0hJRlQ8L0E+KSAvPSAwIDxiPnRoZW48L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMzJfMzAiPkJ1dHRvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzNfMjYiPlNoaWZ0PC9BPjsKKyAgICAgICAgIDxiPmVsc2lmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzMwIj5NYXNrPC9BPiA8Yj5hbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzIxOF80Ij5CVVRUT05fQUxUPC9BPikgLz0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMyXzMwIj5CdXR0b248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc0XzI2Ij5BbHQ8L0E+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTMxXzE0Ij5EaXNwYXRjaF9FdmVudDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzN18xNCI+R2V0X0V2ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzdfMjUiPkV2ZW50PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Ml8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM4XzI1Ij5ZPC9BPjwvRk9OVD4gICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3M18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM5XzI1Ij5YPC9BPjwvRk9OVD4gICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc0XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDBfMjUiPkJ1dHRvbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82OF85Ij5Nb3VzZV9CdXR0b248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzVfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE0MV8yNSI+U3RhdGU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3XzciPk1hc2s8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM3XzI1Ij5FdmVudDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTc0XzEwIj5Cc3RhdGU8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzlfMjUiPlg8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEzN18yNSI+RXZlbnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE3Ml8xMCI+WDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTM4XzI1Ij5ZPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzdfMjUiPkV2ZW50PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNzJfMTMiPlk8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEzMV8xNCI+RGlzcGF0Y2hfRXZlbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xNzdfNyI+TWFzazwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE0MF8yNSI+QnV0dG9uPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTQxXzI1Ij5TdGF0ZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzdfMTQiPkdldF9FdmVudDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE0OV8xNCI+VW5nZXRfTW91c2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE0OV8yNyI+RXZlbnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Nl8xNiI+VW5nZXRtb3VzZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Nl8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTg2XzE2Ij5FdjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFVuZ2V0bW91c2UsICJ1bmdldG1vdXNlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xODZfMTYiPlVuZ2V0bW91c2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDlfMjciPkV2ZW50PC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTQ5XzE0Ij5VbmdldF9Nb3VzZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTU0XzEzIj5FbmNsb3NlZF9Jbl9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTRfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NF8zMyI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTVfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NV8zMyI+RXZlbnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTdfMTYiPldlbmNsb3NlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xOTdfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTdfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE5N18xNiI+WTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzUxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xOTdfMTYiPlg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2VuY2xvc2UsICJ3ZW5jbG9zZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTk3XzE2Ij5XZW5jbG9zZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NF8zMyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NV8zMyI+RXZlbnQ8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE3Ml8xMyI+WTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTU1XzMzIj5FdmVudDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTcyXzEwIj5YPC9BPikpCisgICAgICAgID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyN180Ij5DdXJzZXNfQm9vbF9GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE1NF8xMyI+RW5jbG9zZWRfSW5fV2luZG93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNjFfMTMiPk1vdXNlX0ludGVydmFsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNjFfMjkiPk1zZWM8L0E+PC9GT05UPiA6IE5hdHVyYWwgOj0gMjAwKSA8Yj5yZXR1cm48L2I+IE5hdHVyYWwKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjExXzE2Ij5Nb3VzZWludGVydmFsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjExXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8yMTFfMTYiPk1zZWM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1vdXNlaW50ZXJ2YWwsICJtb3VzZWludGVydmFsIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMjExXzE2Ij5Nb3VzZWludGVydmFsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE2MV8yOSI+TXNlYzwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE2MV8xMyI+TW91c2VfSW50ZXJ2YWw8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl80OF8zNSI+TW91c2U8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4YmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtCkBAIC0wLDAgKzEsMjM1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2UgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMjcgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBtb3VzZSBiaW5kaW5nLjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQuIFBsZWFzZSBkb24ndCBjaGFuZ2UgaXQgbWFudWFsbHkhPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJ1biB0aGUgZ2VuZXJhdG9yIGluc3RlYWQuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IFN5c3RlbTsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzQ2XzQwIj5Nb3VzZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl80OF8zNSI+TW91c2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQbGVhc2Ugbm90ZSwgdGhhdCBpbiBuY3Vyc2VzLTEuOS45ZSBkb2N1bWVudGF0aW9uIG1vdXNlIHN1cHBvcnQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaXMgc3RpbGwgbWFya2VkIGFzIGV4cGVyaW1lbnRhbC4gU28gYWxzbyB0aGlzIGJpbmRpbmcgd2lsbCBjaGFuZ2U8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaWYgdGhlIG5jdXJzZXMgbWV0aG9kcyBjaGFuZ2UuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgbW91c2VfdHJhZm8sIHdtb3VzZV90cmFmbyBhcmUgaW1wbGVtZW50ZWQgYXMgVHJhbnNmb3JtX0Nvb3JkaW5hdGVzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGluIHRoZSBwYXJlbnQgcGFja2FnZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgaW1wbGVtZW50ZWQ6PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJFUE9SVF9NT1VTRV9QT1NJVElPTiAoaS5lLiBhcyBhIHBhcmFtZXRlciB0byBSZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG9yIFN0YXJ0X01vdXNlKTwvRU0+PC9GT05UPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF85Ij5FdmVudF9NYXNrPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnByaXZhdGU8L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NV80Ij5Ob19FdmVudHM8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzQiPkFsbF9FdmVudHM8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPjsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OF85Ij5Nb3VzZV9CdXR0b248L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjhfMjYiPkxlZnQ8L0E+PC9GT05UPiwgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBha2E6IEJ1dHRvbiAxPC9FTT48L0ZPTlQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8yNiI+TWlkZGxlPC9BPjwvRk9OVD4sICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGFrYTogQnV0dG9uIDI8L0VNPjwvRk9OVD4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwXzI2Ij5SaWdodDwvQT48L0ZPTlQ+LCAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYWthOiBCdXR0b24gMzwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMjYiPkJ1dHRvbjQ8L0E+PC9GT05UPiwgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBha2E6IEJ1dHRvbiA0PC9FTT48L0ZPTlQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Ml8yNiI+Q29udHJvbDwvQT48L0ZPTlQ+LCAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvbnRyb2wgS2V5PC9FTT48L0ZPTlQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18yNiI+U2hpZnQ8L0E+PC9GT05UPiwgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFNoaWZ0IEtleTwvRU0+PC9GT05UPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzRfMjYiPkFsdDwvQT48L0ZPTlQ+KTsgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBBTFQgS2V5PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzZfMTIiPlJlYWxfQnV0dG9uczwvQT48L0ZPTlQ+ICA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPiA8Yj5yYW5nZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfMjYiPkxlZnQ8L0E+IC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzcxXzI2Ij5CdXR0b240PC9BPjsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzdfMTIiPk1vZGlmaWVyX0tleXM8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPiA8Yj5yYW5nZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzJfMjYiPkNvbnRyb2w8L0E+IC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc0XzI2Ij5BbHQ8L0E+OworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83OV8yNiI+UmVsZWFzZWQ8L0E+PC9GT05UPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwXzI2Ij5QcmVzc2VkPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MV8yNiI+Q2xpY2tlZDwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODJfMjYiPkRvdWJsZV9DbGlja2VkPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84M18yNiI+VHJpcGxlX0NsaWNrZWQ8L0E+PC9GT05UPik7CisKKyAgIDxiPnR5cGU8L2I+IEJ1dHRvbl9TdGF0ZXMgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNzlfOSI+QnV0dG9uX1N0YXRlPC9BPikgPGI+b2Y8L2I+IEJvb2xlYW47CisgICA8Yj5wcmFnbWE8L2I+IFBhY2sgKEJ1dHRvbl9TdGF0ZXMpOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg4XzQiPkFsbF9DbGlja3M8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiBCdXR0b25fU3RhdGVzIDo9ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl84MV8yNiI+Q2xpY2tlZDwvQT4gLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfODNfMjYiPlRyaXBsZV9DbGlja2VkPC9BPiA9Jmd0OyBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPm90aGVyczwvYj4gPSZndDsgRmFsc2UpOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF80Ij5BbGxfU3RhdGVzPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gQnV0dG9uX1N0YXRlcyA6PSAoPGI+b3RoZXJzPC9iPiA9Jmd0OyBUcnVlKTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5wcml2YXRlPC9iPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNTBfMTMiPkhhc19Nb3VzZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUmV0dXJuIHRydWUgaWYgYSBtb3VzZSBkZXZpY2UgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzc3XzE0Ij5SZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzc3XzQxIj5CdXR0b248L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82OF85Ij5Nb3VzZV9CdXR0b248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfNzhfNDEiPlN0YXRlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzc5XzkiPkJ1dHRvbl9TdGF0ZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl83OV80MSI+TWFzazwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFN0b3JlcyB0aGUgZXZlbnQgZGVzY3JpYmVkIGJ5IHRoZSBidXR0b24gYW5kIHRoZSBzdGF0ZSBpbiB0aGUgbWFzay48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmVmb3JlIHlvdSBjYWxsIHRoaXMgdGhlIGZpcnN0IHRpbWUsIHlvdSBzaG91bGQgaW5pdCB0aGUgbWFzazwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB3aXRoIHRoZSBFbXB0eV9NYXNrIGNvbnN0YW50PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTAxXzE0Ij5SZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50PC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzk1XzE0Ij5SZWdpc3Rlcl9SZXBvcnRhYmxlX0V2ZW50czwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl85NV80MiI+QnV0dG9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzk2XzQyIj5TdGF0ZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBCdXR0b25fU3RhdGVzOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfOTdfNDIiPk1hc2s8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBSZWdpc3RlciBhbGwgZXZlbnRzIGRlc2NyaWJlZCBieSB0aGUgQnV0dG9uIGFuZCB0aGUgU3RhdGUgYml0bWFwLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCZWZvcmUgeW91IGNhbGwgdGhpcyB0aGUgZmlyc3QgdGltZSwgeW91IHNob3VsZCBpbml0IHRoZSBtYXNrPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHdpdGggdGhlIEVtcHR5X01hc2sgY29uc3RhbnQ8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZXJlIGlzIG9uZSBkaWZmZXJlbmNlIHRvIG1vdXNtYXNrKCk6IHdlIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG9sZCBtYXNrLCB0aGF0IG1lYW5zIHRoZSBldmVudCBtYXNrIHZhbHVlIGJlZm9yZSB0aGlzIGNhbGwuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBJbXBsZW1lbnRlZDogVGhlIGxpYnJhcnkgdmVyc2lvbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICByZXR1cm5zIGEgTW91c2VfTWFzayB0aGF0IHRlbGxzIHdoaWNoIGV2ZW50cyBhcmUgcmVwb3J0ZWQuPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEwN18xMyI+U3RhcnRfTW91c2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEwN18yNiI+TWFzazwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjZfNCI+QWxsX0V2ZW50czwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19tb3VzZS4zeC5odG1sIj5tb3VzZW1hc2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMjNfMTMiPlN0YXJ0X01vdXNlPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzEyM18xNCI+RW5kX01vdXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xMjNfMjUiPk1hc2s8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NV80Ij5Ob19FdmVudHM8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGVybWluYXRlcyB0aGUgbW91c2UsIHJlc3RvcmVzIHRoZSBzcGVjaWZpZWQgZXZlbnQgbWFzazwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzEyOF8xNCI+RW5kX01vdXNlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl82Ml8xMyI+R2V0X01vdXNlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfbW91c2UuM3guaHRtbCI+Z2V0bW91c2UoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzNfMTMiPkdldF9Nb3VzZTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xNzFfMTQiPkdldF9FdmVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzN18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTcxXzI1Ij5FdmVudDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzhfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE3Ml8yNSI+WTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE3M18yNSI+WDwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTc0XzI1Ij5CdXR0b248L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjhfOSI+TW91c2VfQnV0dG9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQxXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xNzVfMjUiPlN0YXRlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl83OV85Ij5CdXR0b25fU3RhdGU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgISEhIFdhcm5pbmc6IFggYW5kIFkgYXJlIHNjcmVlbiBjb29yZGluYXRlcy4gRHVlIHRvIHJpcHBlZCBvZiBsaW5lcyB0aGV5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIG1heSBub3QgYmUgaWRlbnRpY2FsIHRvIHdpbmRvdyBjb29yZGluYXRlcy48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IEltcGxlbWVudGVkOiBHZXRfRXZlbnQgb25seSByZXBvcnRzIG9uZSBldmVudCwgdGhlIEMgbGlicmFyeTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB2ZXJzaW9uIHN1cHBvcnRzIG11bHRpcGxlIGV2ZW50cywgZS5nLiB7Y2xpY2stMSwgY2xpY2stM308L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xMzdfMTQiPkdldF9FdmVudDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE4NF8xNCI+VW5nZXRfTW91c2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2FkYi5odG0jcmVmXzE4NF8yNyI+RXZlbnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPnVuZ2V0bW91c2UoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNDlfMTQiPlVuZ2V0X01vdXNlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZGIuaHRtI3JlZl8xOTRfMTMiPkVuY2xvc2VkX0luX1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTk0XzMzIj5XaW48L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMTk1XzMzIj5FdmVudDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPndlbmNsb3NlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJ1dCA6IHVzZSBldmVudCBpbnN0ZWFkIG9mIHNjcmVlbiBjb29yZGluYXRlcy48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNTRfMTMiPkVuY2xvc2VkX0luX1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMjA5XzEzIj5Nb3VzZV9JbnRlcnZhbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRiLmh0bSNyZWZfMjA5XzI5Ij5Nc2VjPC9BPjwvRk9OVD4gOiBOYXR1cmFsIDo9IDIwMCkgPGI+cmV0dXJuPC9iPiBOYXR1cmFsOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwiPm1vdXNlaW50ZXJ2YWwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNjFfMTMiPk1vdXNlX0ludGVydmFsPC9BPik7CisKKzxiPnByaXZhdGU8L2I+CisgICA8Yj50eXBlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy51bnNpZ25lZF9sb25nOworCisgICA8Yj50eXBlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl85Ml85Ij5Nb3VzZV9FdmVudDwvQT4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MF8xMCI+SWQ8L0E+PC9GT05UPiAgICAgIDogSW50ZWdlciA8Yj5yYW5nZTwvYj4gSW50ZWdlciAoPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuc2hvcnQnRmlyc3QpIC4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyICg8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5zaG9ydCdMYXN0KTsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzEwIj5YPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzEzIj5ZPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyXzE2Ij5aPC9BPjwvRk9OVD4gOiBJbnRlZ2VyIDxiPnJhbmdlPC9iPiBJbnRlZ2VyICg8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQnRmlyc3QpIC4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyICg8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQnTGFzdCk7CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NF8xMCI+QnN0YXRlPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzkyXzkiPk1vdXNlX0V2ZW50PC9BPik7CisKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfOTJfOSI+TW91c2VfRXZlbnQ8L0E+IDxiPnVzZTwvYj4KKyAgICAgIDxiPnJlY29yZDwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE3MF8xMCI+SWQ8L0E+ICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAgMCAuLiAgMTU7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNzJfMTAiPlg8L0E+ICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMzIgLi4gIDYzOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfMTcyXzEzIj5ZPC9BPiAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDY0IC4uICA5NTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzE3Ml8xNiI+WjwvQT4gICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA5NiAuLiAxMjc7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8xNzRfMTAiPkJzdGF0ZTwvQT4gIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAxMjggLi4gMTU5OworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQbGVhc2Ugbm90ZTogdGhpcyByZXAuIGNsYXVzZSBpcyBnZW5lcmF0ZWQgYW5kIG1heSBiZTwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgZGlmZmVyZW50IG9uIHlvdXIgc3lzdGVtLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4OV80Ij5HZW5lcmF0aW9uX0JpdF9PcmRlcjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IFN5c3RlbS5CaXRfT3JkZXIgOj0gU3lzdGVtLkxvd19PcmRlcl9GaXJzdDsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBjb25zdGFudCBtYXkgYmUgZGlmZmVyZW50IG9uIHlvdXIgc3lzdGVtLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Ml80Ij5CVVRUT04xX1JFTEVBU0VEPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDAwMSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5M180Ij5CVVRUT04xX1BSRVNTRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDAwMiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NF80Ij5CVVRUT04xX0NMSUNLRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDAwNCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NV80Ij5CVVRUT04xX0RPVUJMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDAxMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Nl80Ij5CVVRUT04xX1RSSVBMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDAyMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5N180Ij5CVVRUT04xX1JFU0VSVkVEX0VWRU5UPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDA0MCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OF80Ij5CVVRUT04yX1JFTEVBU0VEPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDEwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OV80Ij5CVVRUT04yX1BSRVNTRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDIwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMF80Ij5CVVRUT04yX0NMSUNLRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDQwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMV80Ij5CVVRUT04yX0RPVUJMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMTAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMl80Ij5CVVRUT04yX1RSSVBMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMjAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwM180Ij5CVVRUT04yX1JFU0VSVkVEX0VWRU5UPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwNDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNF80Ij5CVVRUT04zX1JFTEVBU0VEPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAxMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNV80Ij5CVVRUT04zX1BSRVNTRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAyMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNl80Ij5CVVRUT04zX0NMSUNLRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDA0MDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwN180Ij5CVVRUT04zX0RPVUJMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDEwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOF80Ij5CVVRUT04zX1RSSVBMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDIwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwOV80Ij5CVVRUT04zX1JFU0VSVkVEX0VWRU5UPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDQwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMF80Ij5CVVRUT040X1JFTEVBU0VEPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMTAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMV80Ij5CVVRUT040X1BSRVNTRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMjAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMl80Ij5CVVRUT040X0NMSUNLRUQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwNDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxM180Ij5CVVRUT040X0RPVUJMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAxMDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNF80Ij5CVVRUT040X1RSSVBMRV9DTElDS0VEPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAyMDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNV80Ij5CVVRUT040X1JFU0VSVkVEX0VWRU5UPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDA0MDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNl80Ij5CVVRUT05fQ1RSTDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDEwMDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxN180Ij5CVVRUT05fU0hJRlQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDIwMDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOF80Ij5CVVRUT05fQUxUPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDQwMDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOV80Ij5SRVBPUlRfTU9VU0VfUE9TSVRJT048L0E+PC9GT05UPiAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMTAwMDAwMDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMF80Ij5BTExfTU9VU0VfRVZFTlRTPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDc3Nzc3Nzc3NyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMV80Ij5CVVRUT04xX0VWRU5UUzwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwMDA3NyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMl80Ij5CVVRUT04yX0VWRU5UUzwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDAwNzcwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyM180Ij5CVVRUT04zX0VWRU5UUzwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDAwMDc3MDAwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNF80Ij5CVVRUT040X0VWRU5UUzwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1tb3VzZV9fYWRzLmh0bSNyZWZfNjRfOSI+RXZlbnRfTWFzazwvQT4gOj0gOCMwMDA3NzAwMDAwMCM7CisKKyAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY1XzQiPk5vX0V2ZW50czwvQT4gIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzY0XzkiPkV2ZW50X01hc2s8L0E+IDo9IDA7CisgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82Nl80Ij5BbGxfRXZlbnRzPC9BPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl82NF85Ij5FdmVudF9NYXNrPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLW1vdXNlX19hZHMuaHRtI3JlZl8yMjBfNCI+QUxMX01PVVNFX0VWRU5UUzwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtbW91c2VfX2Fkcy5odG0jcmVmXzQ4XzM1Ij5Nb3VzZTwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2YTkyNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0KQEAgLTAsMCArMSw4NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuUGFuZWxzLlVzZXJfRGF0YSAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworPGI+dXNlPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT47Cis8Yj51c2U8L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ0XzM1Ij5QYW5lbHM8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ0XzM1Ij5QYW5lbHM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNDciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDIiPlVzZXJfRGF0YTwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj51c2U8L2I+IDxiPnR5cGU8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmludDsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTNfMjkiPlBhbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTRfMjkiPkRhdGE8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMTYiPlNldF9QYW5lbF9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTRfMTYiPlBhbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81NF8xNiI+QWRkcjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NF85Ij5Vc2VyX0FjY2VzczwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2V0X1BhbmVsX1VzZXJwdHIsICJzZXRfcGFuZWxfdXNlcnB0ciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81NF8xNiI+U2V0X1BhbmVsX1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzI5Ij5QYW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU0XzI5Ij5EYXRhPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzUzXzE0Ij5TZXRfVXNlcl9EYXRhPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNjRfMTMiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8yOCI+UGFuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzE2Ij5QYW5lbF9Vc2VycHRyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjVfMTYiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBQYW5lbF9Vc2VycHRyLCAicGFuZWxfdXNlcnB0ciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjVfMTYiPlBhbmVsX1VzZXJwdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzI4Ij5QYW48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X1VzZXJfRGF0YTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8xNCI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzU5XzI5Ij5QYW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Ml8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl82MF8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzYwXzI5Ij5EYXRhPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzY0XzEzIj5HZXRfVXNlcl9EYXRhPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81OV8yOSI+UGFuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNTlfMTQiPkdldF9Vc2VyX0RhdGE8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl80NV80MiI+VXNlcl9EYXRhPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmI4ZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bQpAQCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGEuYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMuVXNlcl9EYXRhICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE0IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDIiPlVzZXI8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bGltaXRlZDwvYj4gPGI+cHJpdmF0ZTwvYj47CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDIiPlVzZXJfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQzXzkiPlVzZXI8L0E+OworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80NF8zNSI+UGFuZWxzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzQyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzQ3XzQ3Ij5Vc2VyX0RhdGE8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHJlZWxhYm9yYXRlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ0XzM1Ij5QYW5lbHM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDVfNDIiPlVzZXJfRGF0YTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWwuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNTFfMTQiPlNldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81MV8yOSI+UGFuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl81Ml8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+c2V0X3BhbmVsX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZHMuaHRtI3JlZl81M18xNCI+U2V0X1VzZXJfRGF0YTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83MV8xNCI+R2V0X1VzZXJfRGF0YTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2FkYi5odG0jcmVmXzcxXzI5Ij5QYW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl83Ml8yOSI+RGF0YTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ0XzkiPlVzZXJfQWNjZXNzPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsX3VzZXJwdHI8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRiLmh0bSNyZWZfNjNfMTMiPkdldF9Vc2VyX0RhdGE8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMtdXNlcl9kYXRhX19hZGIuaHRtI3JlZl82M18yOCI+UGFuPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLXVzZXJfZGF0YV9fYWRzLmh0bSNyZWZfNDRfOSI+VXNlcl9BY2Nlc3M8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbF91c2VycHRyPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTYW1lIGFzIGZ1bmN0aW9uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoR2V0X1VzZXJfRGF0YSk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80NF8zNSI+UGFuZWxzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy11c2VyX2RhdGFfX2Fkcy5odG0jcmVmXzQ1XzQyIj5Vc2VyX0RhdGE8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjVhMWJiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtCkBAIC0wLDAgKzEsMTcxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHMuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHMgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBEYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80NF8zNSI+UGFuZWxzPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnVzZTwvYj4gPGI+dHlwZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzY3XzEzIj5DcmVhdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzY3XzIxIj5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8xNiI+TmV3cGFuZWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzUxXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXdwYW5lbCwgIm5ld19wYW5lbCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzciPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzU0XzciPlBhbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzUxXzE2Ij5OZXdwYW5lbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82N18yMSI+V2luPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzU0XzciPlBhbjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNTRfNCI+TnVsbF9QYW5lbDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNTRfNyI+UGFuPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzY3XzEzIj5DcmVhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl83N18xNCI+Qm90dG9tPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl83N18yMiI+UGFuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMTYiPkJvdHRvbXBhbmVsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl82NV8xNiI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEJvdHRvbXBhbmVsLCAiYm90dG9tX3BhbmVsIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNjVfMTYiPkJvdHRvbXBhbmVsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzc3XzIyIj5QYW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82MF80Ij5QYW5lbF9FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl83N18xNCI+Qm90dG9tPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODJfMTQiPlRvcDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODJfMTkiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1XzE2Ij5Ub3BwYW5lbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNzVfMTYiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBUb3BwYW5lbCwgInRvcF9wYW5lbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzc1XzE2Ij5Ub3BwYW5lbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl84Ml8xOSI+UGFuPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODJfMTQiPlRvcDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzg3XzE0Ij5TaG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl84N18yMCI+UGFuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODVfMTYiPlNob3dwYW5lbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfODVfMTYiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTaG93cGFuZWwsICJzaG93X3BhbmVsIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfODVfMTYiPlNob3dwYW5lbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl84N18yMCI+UGFuPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfODdfMTQiPlNob3c8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl85N18xNCI+SGlkZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfOTdfMjAiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzE2Ij5IaWRlcGFuZWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzk1XzE2Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSGlkZXBhbmVsLCAiaGlkZV9wYW5lbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzk1XzE2Ij5IaWRlcGFuZWw8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfOTdfMjAiPlBhbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzk3XzE0Ij5IaWRlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTAyXzEzIj5HZXRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTAyXzI1Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDVfMTYiPlBhbmVsX1dpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEwNV8xNiI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUGFuZWxfV2luLCAicGFuZWxfd2luZG93Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEwNV8xNiI+UGFuZWxfV2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzEwMl8yNSI+UGFuPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTA4XzciPldpbjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTA4XzciPldpbjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMDJfMTMiPkdldF9XaW5kb3c8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTExXzE0Ij5SZXBsYWNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTExXzIzIj5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTEyXzIzIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTlfMTYiPlJlcGxhY2VfUGFuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTE5XzE2Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjBfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMTlfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBSZXBsYWNlX1BhbiwgInJlcGxhY2VfcGFuZWwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMTlfMTYiPlJlcGxhY2VfUGFuPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExMV8yMyI+UGFuPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExMl8yMyI+V2luPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTExXzE0Ij5SZXBsYWNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExN18xNCI+TW92ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExN18yMCI+UGFuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExOF8yMCI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzBfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTlfMjAiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMl8xNiI+TW92ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMl8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEzMl8xNiI+UGFuPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMzJfMTYiPkxpbmU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEzMl8xNiI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNb3ZlLCAibW92ZV9wYW5lbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEzMl8xNiI+TW92ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTdfMjAiPlBhbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTE4XzIwIj5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTE5XzIwIj5Db2x1bW48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNjBfNCI+UGFuZWxfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTE3XzE0Ij5Nb3ZlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI0XzEzIj5Jc19IaWRkZW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDJfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMjRfMjQiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NF8xNiI+UGFuZWxfSGlkZGVuPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTQ0XzE2Ij5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUGFuZWxfSGlkZGVuLCAicGFuZWxfaGlkZGVuIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTQ0XzE2Ij5QYW5lbF9IaWRkZW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI0XzI0Ij5QYW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DdXJzZXNfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI0XzEzIj5Jc19IaWRkZW48L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTM5XzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMzlfMjIiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2XzE2Ij5EZWxfUGFuZWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTZfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xNTZfMTYiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEZWxfUGFuZWwsICJkZWxfcGFuZWwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xNTZfMTYiPkRlbF9QYW5lbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMzlfMjIiPlBhbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzYwXzQiPlBhbmVsX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMzlfMjIiPlBhbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzU0XzQiPk51bGxfUGFuZWw8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTM5XzE0Ij5EZWxldGU8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZTkzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0KQEAgLTAsMCArMSwxNTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVscy5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVscyAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjE5IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IFN5c3RlbTsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl80NV80MCI+UGFuZWxzPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80NF8zNSI+UGFuZWxzPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IExpbmtlcl9PcHRpb25zICgiLWxwYW5lbHciKTsKKyAgIDxiPnByYWdtYTwvYj4gTGlua2VyX09wdGlvbnMgKCItbG5jdXJzZXN3Iik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfOSI+UGFuZWw8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cHJpdmF0ZTwvYj47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW50ZXJmYWNlIGNvbnN0YW50cyAgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNCI+TnVsbF9QYW5lbDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEV4Y2VwdGlvbnMgICAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF80Ij5QYW5lbF9FeGNlcHRpb248L0E+PC9GT05UPiA6IDxiPmV4Y2VwdGlvbjwvYj47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNDlfMTMiPkNyZWF0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNDlfMjEiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5uZXdfcGFuZWwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChDcmVhdGUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiBOZXdfUGFuZWwgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzJfMjQiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl82N18xMyI+Q3JlYXRlPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+bmV3X3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByYWdtYSBJbmxpbmUgKE5ld19QYW5lbCk7PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNjNfMTQiPkJvdHRvbTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfNjNfMjIiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5ib3R0b21fcGFuZWwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNzdfMTQiPkJvdHRvbTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzczXzE0Ij5Ub3A8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Ml8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzczXzE5Ij5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+dG9wX3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzgyXzE0Ij5Ub3A8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl84M18xNCI+U2hvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfODNfMjAiPlBhbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5zaG93X3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzg3XzE0Ij5TaG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyXzE0Ij5VcGRhdGVfUGFuZWxzPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnVwZGF0ZV9wYW5lbHMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBVcGRhdGVfUGFuZWxzLCAidXBkYXRlX3BhbmVscyIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzkzXzE0Ij5IaWRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl85M18yMCI+UGFuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPmhpZGVfcGFuZWwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfOTdfMTQiPkhpZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMDNfMTMiPkdldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMDNfMjUiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbF93aW5kb3coKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTAyXzEzIj5HZXRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IFBhbmVsX1dpbmRvdyAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDdfMjciPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMDJfMTMiPkdldF9XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgSW5saW5lIChQYW5lbF9XaW5kb3cpOzwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTAiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTE2XzE0Ij5SZXBsYWNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTE2XzIzIj5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTE3XzIzIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cmVwbGFjZV9wYW5lbCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMTFfMTQiPlJlcGxhY2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEyOF8xNCI+TW92ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExN18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEyOF8yMCI+UGFuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzEyOV8yMCI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTlfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xMzBfMjAiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5tb3ZlX3BhbmVsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzExN18xNCI+TW92ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjRfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZGIuaHRtI3JlZl8xNDJfMTMiPklzX0hpZGRlbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzE0Ml8yNCI+UGFuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL3BhbmVsLjN4Lmh0bWwiPnBhbmVsX2hpZGRlbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMjRfMTMiPklzX0hpZGRlbjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfMTMiPkFib3ZlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfMTI5XzEzIj5QYW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vcGFuZWwuM3guaHRtbCI+cGFuZWxfYWJvdmUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBBYm92ZSwgInBhbmVsX2Fib3ZlIik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNF8xMyI+QmVsb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl8xMzRfMTMiPlBhbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDlfOSI+UGFuZWw8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5wYW5lbF9iZWxvdygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEJlbG93LCAicGFuZWxfYmVsb3ciKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2FkYi5odG0jcmVmXzE1NF8xNCI+RGVsZXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRiLmh0bSNyZWZfMTU0XzIyIj5QYW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcGFuZWxzX19hZHMuaHRtI3JlZl80OV85Ij5QYW5lbDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9wYW5lbC4zeC5odG1sIj5kZWxfcGFuZWwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChEZWxldGUpOworCis8Yj5wcml2YXRlPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiBTeXN0ZW0uU3RvcmFnZV9FbGVtZW50cy5JbnRlZ2VyX0FkZHJlc3M7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNTRfNCI+TnVsbF9QYW5lbDwvQT4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wYW5lbHNfX2Fkcy5odG0jcmVmXzQ5XzkiPlBhbmVsPC9BPiA6PSAwOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXBhbmVsc19fYWRzLmh0bSNyZWZfNDRfMzUiPlBhbmVsczwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWY5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0KQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW4uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlB1dFdpbiAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorCis8Yj53aXRoPC9iPiBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uQ19TdHJlYW1zOworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkNfU3RyZWFtczsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47IDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81MF8zNSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDVfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80M18zNSI+UHV0V2luPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnBhY2thZ2U8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTIiPklDUzwvQT48L0ZPTlQ+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DX1N0cmVhbXM7CisgICA8Yj5wYWNrYWdlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzEyIj5BQ1M8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uQ19TdHJlYW1zOworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDVfMTQiPlB1dF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ1XzI2Ij5XaW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80Nl8yNiI+RmlsZTwvQT48L0ZPTlQ+IDogQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkZpbGVfVHlwZSkgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18xNiI+cHV0d2luPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl81M18xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzM4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNTNfMTYiPmY8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl80N18xMiI+SUNTPC9BPi5GSUxFcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBwdXR3aW4sICJwdXR3aW4iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83Ij5SPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzUzXzE2Ij5wdXR3aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDVfMjYiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl80OF8xMiI+QUNTPC9BPi5DX1N0cmVhbSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ2XzI2Ij5GaWxlPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzU2XzciPlI8L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83MV80Ij5DdXJzZXNfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtI3JlZl80NV8xNCI+UHV0X1dpbmRvdzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDhfMTMiPkdldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ4XzI1Ij5GaWxlPC9BPjwvRk9OVD4gOiBBZGEuU3RyZWFtcy5TdHJlYW1fSU8uRmlsZV9UeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMTYiPmdldHdpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNjVfMTYiPmY8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl80N18xMiI+SUNTPC9BPi5GSUxFcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIGdldHdpbiwgImdldHdpbiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzciPlc8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl82NV8xNiI+Z2V0d2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzQ4XzEyIj5BQ1M8L0E+LkNfU3RyZWFtICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDhfMjUiPkZpbGU8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNjhfNyI+VzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNjhfNyI+VzwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQ4XzEzIj5HZXRfV2luZG93PC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2Fkcy5odG0jcmVmXzQzXzM1Ij5QdXRXaW48L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmY2MGU2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZHMuaHRtCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbi5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QdXRXaW4gICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjMgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKworPGI+d2l0aDwvYj4gQWRhLlN0cmVhbXMuU3RyZWFtX0lPOworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80M18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzQ1XzQwIj5QdXRXaW48L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNTFfMTQiPlB1dF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzUxXzI2Ij5XaW48L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtcHV0d2luX19hZGIuaHRtI3JlZl81Ml8yNiI+RmlsZTwvQT48L0ZPTlQ+IDogQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkZpbGVfVHlwZSk7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRiLmh0bSNyZWZfNjNfMTMiPkdldF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1wdXR3aW5fX2FkYi5odG0jcmVmXzYzXzI1Ij5GaWxlPC9BPjwvRk9OVD4gIDogQWRhLlN0cmVhbXMuU3RyZWFtX0lPLkZpbGVfVHlwZSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXB1dHdpbl9fYWRzLmh0bSNyZWZfNDNfMzUiPlB1dFdpbjwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiMjMwMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0KQEAgLTAsMCArMSwxNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcC5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1jYXAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNDJfMzUiPlRlcm1jYXA8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTlfMTMiPkdldF9FbnRyeTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzU5XzI0Ij5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV8xNiI+dGdldGVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzUxXzE2Ij5uYW1lPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzQ0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzUxXzE2Ij52YWw8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpCisgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRnZXRlbnQsICJ0Z2V0ZW50Iik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzciPk5hbWVUeHQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81OV8yNCI+TmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gIDogc2l6ZV90OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83Ij5pZ25vcmVkPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gY2hhcl9hcnJheSAoMCAuLiAwKSA6PSAoMCA9Jmd0OyBudWwpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5yZXN1bHQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81OV8yNCI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNTRfNyI+TmFtZVR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNTVfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzU3XzciPnJlc3VsdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl81MV8xNiI+dGdldGVudDwvQT4gKGNoYXJfYXJyYXkgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNTZfNyI+aWdub3JlZDwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzU0XzciPk5hbWVUeHQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzU3XzciPnJlc3VsdDwvQT4gPSAtMSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEJvb2xlYW4nVmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzU3XzciPnJlc3VsdDwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTlfMTMiPkdldF9FbnRyeTwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzYzXzEzIj5HZXRfRmxhZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzYzXzIzIj5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8xNiI+dGdldGZsYWc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl83MV8xNiI+aWQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgdGdldGZsYWcsICJ0Z2V0ZmxhZyIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M183Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82M18yMyI+TmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzRfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjNfMjMiPk5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzczXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNzRfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl83MV8xNiI+dGdldGZsYWc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzczXzciPlR4dDwvQT4pID0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82M18xMyI+R2V0X0ZsYWc8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjdfMTQiPkdldF9OdW1iZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82N18yNiI+TmFtZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY4XzI2Ij5WYWx1ZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY5XzI2Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQm9vbGVhbikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfMTYiPnRnZXRudW08L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl84OV8xNiI+aWQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgdGdldG51bSwgInRnZXRudW0iKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTFfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjdfMjYiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyXzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY3XzI2Ij5OYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl85MV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzkyXzciPkxlbmd0aDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82OF8yNiI+VmFsdWU8L0E+IDo9IEludGVnZXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfODlfMTYiPnRnZXRudW08L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzkxXzciPlR4dDwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY4XzI2Ij5WYWx1ZTwvQT4gPSAtMSA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl82OV8yNiI+UmVzdWx0PC9BPiA6PSBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzY5XzI2Ij5SZXN1bHQ8L0E+IDo9ICBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNjdfMTQiPkdldF9OdW1iZXI8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzczXzE0Ij5HZXRfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzczXzI2Ij5OYW1lPC9BPjwvRk9OVD4gICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83NF8yNiI+VmFsdWU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83NV8yNiI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IEJvb2xlYW4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF8xNiI+dGdldHN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDhfMTYiPmlkPC9BPjwvRk9OVD4gIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEwOF8xNiI+YnVmPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0Z2V0c3RyLCAidGdldHN0ciIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTFfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzNfMjYiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMl83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzXzciPlR4dDI8L0E+PC9GT05UPiAgIDogY2hhcnNfcHRyOworICAgICAgPGI+dHlwZTwvYj4gdCA8Yj5pczwvYj4gPGI+bmV3PC9iPiBjaGFyX2FycmF5ICgwIC4uIDEwMjQpOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGRvZXMgaXQgbmVlZCB0byBiZSAxMDI0PzwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTVfNyI+UmV0dXJuX0J1ZmZlcjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IHQgOj0gKDxiPm90aGVyczwvYj4gPSZndDsgbnVsKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83M18yNiI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTExXzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTEyXzciPkxlbmd0aDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMTNfNyI+VHh0MjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDhfMTYiPnRnZXRzdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzExMV83Ij5UeHQ8L0E+LCBjaGFyX2FycmF5ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzExNV83Ij5SZXR1cm5fQnVmZmVyPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTEzXzciPlR4dDI8L0E+ID0gTnVsbF9QdHIgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzVfMjYiPlJlc3VsdDwvQT4gOj0gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83NF8yNiI+VmFsdWU8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMTNfNyI+VHh0MjwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl83NV8yNiI+UmVzdWx0PC9BPiA6PSBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzNfMTQiPkdldF9TdHJpbmc8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzZfMTMiPkdldF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzZfMjUiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV8xNiI+dGdldHN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMjlfMTYiPklkPC9BPjwvRk9OVD4gIDogY2hhcl9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEyOV8xNiI+YnVmPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB0Z2V0c3RyLCAidGdldHN0ciIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzJfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNzZfMjUiPk5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM183Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzciPlR4dDI8L0E+PC9GT05UPiAgIDogY2hhcnNfcHRyOworICAgICAgPGI+dHlwZTwvYj4gdCA8Yj5pczwvYj4gPGI+bmV3PC9iPiBjaGFyX2FycmF5ICgwIC4uIDEwMjQpOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGRvZXMgaXQgbmVlZCB0byBiZSAxMDI0PzwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzZfNyI+UGhvbnlfVHh0PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gdCA6PSAoPGI+b3RoZXJzPC9iPiA9Jmd0OyBudWwpOworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzc2XzI1Ij5OYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMzJfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMzNfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEzNF83Ij5UeHQyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEyOV8xNiI+dGdldHN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTMyXzciPlR4dDwvQT4sIGNoYXJfYXJyYXkgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTM2XzciPlBob255X1R4dDwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEzNF83Ij5UeHQyPC9BPiA9IE51bGxfUHRyIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzc2XzEzIj5HZXRfU3RyaW5nPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzUzXzEzIj5UR290bzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81M18yMCI+Q2FwPC9BPjwvRk9OVD4gOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDlfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTRfMjAiPkNvbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81NV8yMCI+Um93PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiBUZXJtY2FwX1N0cmluZyA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MV8xNiI+dGdvdG88L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTUxXzE2Ij5jYXA8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTJfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTUxXzE2Ij5jb2w8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE1MV8xNiI+cm93PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgdGdvdG8pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTVfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTNfMjAiPkNhcDwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2XzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzUzXzIwIj5DYXA8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE1NV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE1Nl83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPnJldHVybjwvYj4gVGVybWNhcF9TdHJpbmcgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNTFfMTYiPnRnb3RvPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNTVfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTRfMjAiPkNvbDwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl81NV8yMCI+Um93PC9BPikpKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNTNfMTMiPlRHb3RvPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZHMuaHRtI3JlZl80Ml8zNSI+VGVybWNhcDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2MjFiNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0KQEAgLTAsMCArMSw4NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXAuYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRlcm1jYXAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4zIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzQ3XzQwIj5UZXJtY2FwPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRzLmh0bSNyZWZfNDJfMzUiPlRlcm1jYXA8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgY3Vyc190ZXJtY2FwLjN4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGltcGxlbWVudGVkOiAgdHB1dHMgKHNlZSBjdXJzX3Rlcm1pbmZvKTwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiBUZXJtY2FwX1N0cmluZyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBTdHJpbmc7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfMTQ4XzEzIj5UR290bzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE0OF8yMCI+Q2FwPC9BPjwvRk9OVD4gOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xNDlfMjAiPkNvbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzE1MF8yMCI+Um93PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiBUZXJtY2FwX1N0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB0Z290bygpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWNhcF9fYWRiLmh0bSNyZWZfNDlfMTMiPkdldF9FbnRyeTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzQ5XzI0Ij5OYW1lPC9BPjwvRk9OVD4gOiBTdHJpbmcpIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB0Z2V0ZW50KCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl82OV8xMyI+R2V0X0ZsYWc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl82OV8yMyI+TmFtZTwvQT48L0ZPTlQ+IDogU3RyaW5nKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdGdldGZsYWcoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl84NV8xNCI+R2V0X051bWJlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzg1XzI2Ij5OYW1lPC9BPjwvRk9OVD4gICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzg2XzI2Ij5WYWx1ZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzg3XzI2Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQm9vbGVhbik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdGdldG51bSgpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEwNF8xNCI+R2V0X1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEwNF8yNiI+TmFtZTwvQT48L0ZPTlQ+ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDVfMjYiPlZhbHVlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtY2FwX19hZGIuaHRtI3JlZl8xMDZfMjYiPlJlc3VsdDwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBCb29sZWFuKTsKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEyN18xMyI+R2V0X1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2FkYi5odG0jcmVmXzEyN18yNSI+TmFtZTwvQT48L0ZPTlQ+IDogU3RyaW5nKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGZvdW5kLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRnZXRzdHIoKTwvRU0+PC9GT05UPgorCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1jYXBfX2Fkcy5odG0jcmVmXzQyXzM1Ij5UZXJtY2FwPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTY3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bQpAQCAtMCwwICsxLDE2NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtaW5mbyAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjUgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OyA8Yj51c2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTBfMzUiPkF1eDwvQT47Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7IDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsKKzxiPndpdGg8L2I+IEFkYS5VbmNoZWNrZWRfQ29udmVyc2lvbjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXJtaW5mbzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTJfMTMiPklzX01pbnVzT25lX1BvaW50ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTJfMzQiPlA8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBjaGFyc19wdHIpIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUwXzEzIj5Jc19NaW51c09uZV9Qb2ludGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUwXzM0Ij5QPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gY2hhcnNfcHRyKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4gPGI+aXM8L2I+CisgICAgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzEyIj5XZWlyZF9BZGRyZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHMuSW50ZWdlcl9BZGRyZXNzOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83Ij5JbnZhbGlkX1BvaW50ZXI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl81M18xMiI+V2VpcmRfQWRkcmVzczwvQT4gOj0gLTE7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gVG9fV2VpcmQgPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlVuY2hlY2tlZF9Db252ZXJzaW9uCisgICAgICAgIChTb3VyY2UgPSZndDsgY2hhcnNfcHRyLCBUYXJnZXQgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTNfMTIiPldlaXJkX0FkZHJlc3M8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IFRvX1dlaXJkICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl81MF8zNCI+UDwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTRfNyI+SW52YWxpZF9Qb2ludGVyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTBfMTMiPklzX01pbnVzT25lX1BvaW50ZXI8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzUwXzEzIj5Jc19NaW51c09uZV9Qb2ludGVyPC9BPik7CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X0ZsYWc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N18yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjRfMjMiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzE2Ij50aWdldGZsYWc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNjlfMTYiPmlkPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRpZ2V0ZmxhZyk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxXzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82NF8yMyI+TmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzJfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzY0XzIzIj5OYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNzFfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNzJfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNjlfMTYiPnRpZ2V0ZmxhZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzcxXzciPlR4dDwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NF80Ij5DdXJzZXNfVHJ1ZTwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82NF8xMyI+R2V0X0ZsYWc8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzU3XzE0Ij5HZXRfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzU3XzI2Ij5OYW1lPC9BPjwvRk9OVD4gICA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81OF8yNiI+VmFsdWU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IFRlcm1pbmZvX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81OV8yNiI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IEJvb2xlYW4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzE2Ij50aWdldHN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl84N18xNiI+aWQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRpZ2V0c3RyLCAidGlnZXRzdHIiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzU3XzI2Ij5OYW1lPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTFfNyI+VHh0MjwvQT48L0ZPTlQ+IDogY2hhcnNfcHRyOworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81N18yNiI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzg5XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzkwXzciPkxlbmd0aDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfOTFfNyI+VHh0MjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfODdfMTYiPnRpZ2V0c3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfODlfNyI+VHh0PC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfOTFfNyI+VHh0MjwvQT4gPSBOdWxsX1B0ciA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNTlfMjYiPlJlc3VsdDwvQT4gOj0gRmFsc2U7CisgICAgICA8Yj5lbHNpZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNTBfMTMiPklzX01pbnVzT25lX1BvaW50ZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl85MV83Ij5UeHQyPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNThfMjYiPlZhbHVlPC9BPiAgOj0gVGVybWluZm9fU3RyaW5nICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzkxXzciPlR4dDI8L0E+KSk7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl81OV8yNiI+UmVzdWx0PC9BPiA6PSBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzU3XzE0Ij5HZXRfU3RyaW5nPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82MF8xMyI+SGFzX1N0cmluZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjBfMjUiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF8xNiI+dGlnZXRzdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEwOF8xNiI+aWQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRpZ2V0c3RyLCAidGlnZXRzdHIiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwXzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82MF8yNSI+TmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExXzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTJfNyI+VHh0MjwvQT48L0ZPTlQ+IDogY2hhcnNfcHRyOworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82MF8yNSI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzExMF83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMTFfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMTJfNyI+VHh0MjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTA4XzE2Ij50aWdldHN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzExMF83Ij5UeHQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMTJfNyI+VHh0MjwvQT4gPSBOdWxsX1B0ciA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2lmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl81MF8xMyI+SXNfTWludXNPbmVfUG9pbnRlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzExMl83Ij5UeHQyPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzYwXzEzIj5IYXNfU3RyaW5nPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82OF8xMyI+R2V0X051bWJlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNjhfMjUiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBJbnRlZ2VyIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzE2Ij50aWdldHN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyN18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTI3XzE2Ij5zPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRpZ2V0c3RyKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5XzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82OF8yNSI+TmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwXzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82OF8yNSI+TmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEyOV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMzBfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5yZXR1cm48L2I+IEludGVnZXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEyN18xNiI+dGlnZXRzdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMjlfNyI+VHh0PC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl82OF8xMyI+R2V0X051bWJlcjwvQT47CisKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc2XzE0Ij5QdXRfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83Nl8yNiI+U3RyPC9BPjwvRk9OVD4gICAgOiBUZXJtaW5mb19TdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc3XzI2Ij5hZmZjbnQ8L0E+PC9GT05UPiA6IE5hdHVyYWwgOj0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzhfMjYiPnB1dGM8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzFfOSI+cHV0Y3R5cGU8L0E+IDo9IDxiPm51bGw8L2I+KSA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MF8xNiI+dHB1dHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDBfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0MF8xNiI+c3RyPC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQxXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDBfMTYiPmFmZmNudDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDJfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0MF8xNiI+cHV0YzwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83MV85Ij5wdXRjdHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDNfMTYiPnB1dHA8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0M18xNiI+c3RyPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHRwdXRzKTsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBwdXRwKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ2XzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83Nl8yNiI+U3RyPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDdfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OF83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DIChTdHJpbmcgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc2XzI2Ij5TdHI8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQ2XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0N183Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83OF8yNiI+cHV0YzwvQT4gPSA8Yj5udWxsPC9iPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQ4XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQzXzE2Ij5wdXRwPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTQ2XzciPlR4dDwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0OF83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0MF8xNiI+dHB1dHM8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xNDZfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc3XzI2Ij5hZmZjbnQ8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNzhfMjYiPnB1dGM8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzE0OF83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzc2XzE0Ij5QdXRfU3RyaW5nPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRlcm1pbmZvPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWRkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bQpAQCAtMCwwICsxLDg3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXJtaW5mbyAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzQ4XzQwIj5UZXJtaW5mbzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl80NF8zNSI+VGVybWluZm88L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgY3Vyc190ZXJtaW5mby4zeDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbXBsZW1lbnRlZDogIHNldHVwdGVybSwgc2V0dGVybSwgc2V0X2N1cnRlcm0sIGRlbF9jdXJ0ZXJtLDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICByZXN0YXJ0dGVybSwgdHBhcm0sIHB1dHAsIHZpZHB1dHMsICB2aWRhdHRyLDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICBtdmN1cjwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiBUZXJtaW5mb19TdHJpbmcgPGI+aXM8L2I+IDxiPm5ldzwvYj4gU3RyaW5nOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfODNfMTQiPkdldF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfODNfMjYiPk5hbWU8L0E+PC9GT05UPiAgIDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzg0XzI2Ij5WYWx1ZTwvQT48L0ZPTlQ+ICA6IDxiPm91dDwvYj4gVGVybWluZm9fU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzg1XzI2Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQm9vbGVhbik7CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTA2XzEzIj5IYXNfU3RyaW5nPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEwNl8yNSI+TmFtZTwvQT48L0ZPTlQ+IDogU3RyaW5nKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdGlnZXRzdHIoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl82N18xMyI+R2V0X0ZsYWc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfNjdfMjMiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRpZ2V0ZmxhZygpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjhfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEyNl8xMyI+R2V0X051bWJlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMjZfMjUiPk5hbWU8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+cmV0dXJuPC9iPiBJbnRlZ2VyOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRpZ2V0bnVtKCk8L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV85Ij5wdXRjdHlwZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmZ1bmN0aW9uPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MV8zOCI+YzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5pbnQ7CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2Fkcy5odG0jcmVmXzcxXzkiPnB1dGN0eXBlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMzdfMTQiPlB1dF9TdHJpbmc8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRiLmh0bSNyZWZfMTM3XzI2Ij5TdHI8L0E+PC9GT05UPiAgICA6IFRlcm1pbmZvX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZGIuaHRtI3JlZl8xMzhfMjYiPmFmZmNudDwvQT48L0ZPTlQ+IDogTmF0dXJhbCA6PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGVybWluZm9fX2FkYi5odG0jcmVmXzEzOV8yNiI+cHV0YzwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRlcm1pbmZvX19hZHMuaHRtI3JlZl83MV85Ij5wdXRjdHlwZTwvQT4gOj0gPGI+bnVsbDwvYj4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHRwdXRzKCk8L0VNPjwvRk9OVD4KKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXJtaW5mb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRlcm1pbmZvPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOTFkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bQpAQCAtMCwwICsxLDEzNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4ICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEyIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzQ4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDhfMTQiPlB1dF9CdWY8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OV83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUxXzciPldpZHRoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTJfNyI+U2lnbmFsPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81M183Ij5ManVzdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciPkw8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83Ij5MZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyI+VzwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTFfNyI+V2lkdGg8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83Ij5MQzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTVfNyI+Q0M8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyI+WTwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyI+WDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworCisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzYxXzE3Ij5PdXRwdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNjFfMjUiPkZyb208L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNjFfMzEiPlRvPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4pOworCisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMTciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU5XzE3Ij5PdXRwdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTlfMjUiPkZyb208L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8zMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTlfMzEiPlRvPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4pCisgICAgICA8Yj5pczwvYj4KKyAgICAgIDxiPmJlZ2luPC9iPgorICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4gJmd0OyAwIDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTNfNyI+VzwvQT4gPSAwIDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81M183Ij5XPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+OworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPiAmZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUzXzciPlc8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIExSTSBBMTAuNiAoNykgc2F5cyB0aGlzPC9FTT48L0ZPTlQ+CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81M183Ij5XPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+OworICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgICAgICAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+ICZsdDs9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUzXzciPlc8L0E+KTsKKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjhfMTQiPkdldF9TaXplPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTRfNyI+TEM8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81NV83Ij5DQzwvQT4pOworICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+KSAmZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU1XzciPkNDPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUyXzciPlNpZ25hbDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEzNF80Ij5MYXlvdXRfRXJyb3I8L0E+OworICAgICAgICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj47CisgICAgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPiAmbHQ7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUzXzciPlc8L0E+IDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gPGI+bm90PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81M183Ij5ManVzdDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgICAgIDxiPmRlY2xhcmU8L2I+CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzIyIj5GaWxsZXI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiBTdHJpbmcgKDEgLi4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUzXzciPlc8L0E+IC0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPikpCisgICAgICAgICAgICAgICAgICAgICAgIDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7ICcgJyk7CisgICAgICAgICAgICAgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl84NF8yMiI+RmlsbGVyPC9BPik7CisgICAgICAgICAgICAgICAgICA8Yj5lbmQ8L2I+OworICAgICAgICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTZfNyI+WTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU3XzciPlg8L0E+KTsKKyAgICAgICAgICAgICAgIDxiPmlmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTdfNyI+WDwvQT4gKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+KSkgJmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81NV83Ij5DQzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMTQiPk5ld19MaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDlfNyI+V2luPC9BPik7CisgICAgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81OV8yNSI+RnJvbTwvQT4gLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTlfMzEiPlRvPC9BPikpOworICAgICAgICAgICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUyXzciPkxlbjwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81M183Ij5XPC9BPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUzXzciPkxqdXN0PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgICAgPGI+ZGVjbGFyZTwvYj4KKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTdfMjIiPkZpbGxlcjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IFN0cmluZyAoMSAuLiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTNfNyI+VzwvQT4gLSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81Ml83Ij5MZW48L0E+KSkKKyAgICAgICAgICAgICAgICAgICAgICAgOj0gKDxiPm90aGVyczwvYj4gPSZndDsgJyAnKTsKKyAgICAgICAgICAgICAgICAgIDxiPmJlZ2luPC9iPgorICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTVfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ5XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzk3XzIyIj5GaWxsZXI8L0E+KTsKKyAgICAgICAgICAgICAgICAgIDxiPmVuZDwvYj47CisgICAgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzU5XzE3Ij5PdXRwdXQ8L0E+OworCisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnByYWdtYTwvYj4gQXNzZXJ0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OV83Ij5XaW48L0E+IC89IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTNfNyI+TGp1c3Q8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiA6PSAxOworICAgICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV8xNCI+STwvQT48L0ZPTlQ+IDxiPmluPC9iPiAxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUwXzciPkJ1ZjwvQT4nTGVuZ3RoIDxiPmxvb3A8L2I+CisgICAgICAgICAgICA8Yj5leGl0PC9iPiA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPikgPSAnICc7CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiArIDE7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiAtIDE7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81OV8xNyI+T3V0cHV0PC9BPiAoMSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPiAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGlucHV0IGJ1ZmZlciBpcyBub3QgbGVmdCBqdXN0aWZpZWQ8L0VNPjwvRk9OVD4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUxXzciPkw8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUwXzciPkJ1ZjwvQT4nTGVuZ3RoOworICAgICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOV8xNCI+STwvQT48L0ZPTlQ+IDxiPmluPC9iPiAxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzUwXzciPkJ1ZjwvQT4nTGVuZ3RoIDxiPmxvb3A8L2I+CisgICAgICAgICAgICA8Yj5leGl0PC9iPiA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPikgPSAnICc7CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl81MV83Ij5MPC9BPiAtIDE7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmxvb3A8L2I+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTJfNyI+TGVuPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl81MF83Ij5CdWY8L0E+J0xlbmd0aCAtIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUxXzciPkw8L0E+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNTlfMTciPk91dHB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2FkYi5odG0jcmVmXzUxXzciPkw8L0E+ICsgMSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNTBfNyI+QnVmPC9BPidMZW5ndGgpOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ4XzE0Ij5QdXRfQnVmPC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2JlNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0KQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eC5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uQXV4ICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEzIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPnByaXZhdGU8L2I+IDxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzUxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl80Ml80OCI+QXV4PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByYWdtYSBQcmVlbGFib3JhdGUgKEF1eCk7PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBUZXh0X0lPIG91dHB1dCByb3V0aW5lcyBmb3IgbnVtZXJpYzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBhbmQgZW51bWVyYXRpb24gdHlwZXMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRiLmh0bSNyZWZfNDRfMTQiPlB1dF9CdWY8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl80NV83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyAgICAgICAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgb3V0cHV0IHdpbmRvdzwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl80Nl83Ij5CdWY8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBTdHJpbmc7ICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgdGV4dDwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl80N183Ij5XaWR0aDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT47ICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCBmaWVsZDwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl80OF83Ij5TaWduYWw8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWU7ICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElmIHRydWUsIHdlIHJhaXNlIExheW91dF9FcnJvcjwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZGIuaHRtI3JlZl80OV83Ij5ManVzdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKTsgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBCdWYgaXMgbGVmdCBqdXN0aWZpZWQ8L0VNPjwvRk9OVD4KKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmQzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2FkYi5odG0KQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkNvbXBsZXhfSU8gICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5GbG9hdF9JTzwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzXzQ4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNDZfNDMiPkNvbXBsZXhfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cGFja2FnZTwvYj4gRklPIDxiPmlzPC9iPiA8Yj5uZXc8L2I+CisgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5GbG9hdF9JTzwvQT4gKENvbXBsZXhfVHlwZXMuUmVhbCdCYXNlKTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTRfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NV83Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIEl0ZW0gOiA8Yj5pbjwvYj4gQ29tcGxleDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU3XzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzUwXzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81OF83Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MV80Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81OV83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81Ml80Ij5EZWZhdWx0X0V4cDwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NV83Ij5XaW48L0E+LCAnKCcpOworICAgICAgRklPLjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NV83Ij5XaW48L0E+LCBJdGVtLlJlLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTdfNyI+Rm9yZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81OF83Ij5BZnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+RXhwPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU1XzciPldpbjwvQT4sICcsJyk7CisgICAgICBGSU8uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU1XzciPldpbjwvQT4sIEl0ZW0uSW0sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81N183Ij5Gb3JlPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkFmdDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81OV83Ij5FeHA8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+V2luPC9BPiwgJyknKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU0XzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82MV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKEl0ZW0gOiA8Yj5pbjwvYj4gQ29tcGxleDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzYzXzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzUwXzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82NF83Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MV80Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82NV83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81Ml80Ij5EZWZhdWx0X0V4cDwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzU0XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPiwgSXRlbSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzYzXzciPkZvcmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNjRfNyI+QWZ0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzY1XzciPkV4cDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNjFfMTQiPlB1dDwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl80Nl80MyI+Q29tcGxleF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MGY1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0KQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW8uYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkNvbXBsZXhfSU8gICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5OdW1lcmljcy5HZW5lcmljX0NvbXBsZXhfVHlwZXM7CisKKzxiPmdlbmVyaWM8L2I+CisgICA8Yj53aXRoPC9iPiA8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRzLmh0bSNyZWZfNDZfNDMiPkNvbXBsZXhfVHlwZXM8L0E+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5OdW1lcmljcy5HZW5lcmljX0NvbXBsZXhfVHlwZXMgKCZsdDsmZ3Q7KTsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNDMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl80M180OCI+Q29tcGxleF9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj51c2U8L2I+IENvbXBsZXhfVHlwZXM7CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNCI+RGVmYXVsdF9Gb3JlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNCI+RGVmYXVsdF9BZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gUmVhbCc8Yj5EaWdpdHM8L2I+IC0gMTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNCI+RGVmYXVsdF9FeHA8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gMzsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tY29tcGxleF9pb19fYWRiLmh0bSNyZWZfNDhfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl80OV83Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81NF8xNCI+SXRlbTwvQT4gOiA8Yj5pbjwvYj4gQ29tcGxleDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2FkYi5odG0jcmVmXzUxXzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzUwXzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl81Ml83Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MV80Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl81M183Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81Ml80Ij5EZWZhdWx0X0V4cDwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl82M18xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl82MV8xNCI+SXRlbTwvQT4gOiA8Yj5pbjwvYj4gQ29tcGxleDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2FkYi5odG0jcmVmXzY1XzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWNvbXBsZXhfaW9fX2Fkcy5odG0jcmVmXzUwXzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl82Nl83Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81MV80Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZGIuaHRtI3JlZl82N183Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl81Ml80Ij5EZWZhdWx0X0V4cDwvQT4pOworCis8Yj5wcml2YXRlPC9iPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFB1dCk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1jb21wbGV4X2lvX19hZHMuaHRtI3JlZl80Nl80MyI+Q29tcGxleF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyY2RhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0KQEAgLTAsMCArMSw4MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkRlY2ltYWxfSU8gICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5UZXh0X0lPOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5EZWNpbWFsX0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnBhY2thZ2U8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTIiPkF1eDwvQT48L0ZPTlQ+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKyAgIDxiPnBhY2thZ2U8L2I+IERJTyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVGV4dF9JTy5EZWNpbWFsX0lPICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzUwXzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTFfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81M183Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTRfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzciPkJ1ZjwvQT48L0ZPTlQ+IDogU3RyaW5nICgxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPidMYXN0KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzUzXzciPkZvcmU8L0E+ICsgMSArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT4gJmd0OyAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTdfNyI+TGVuPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTdfNyI+TGVuPC9BPiArIDEgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgRElPLlB1dCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU0XzciPkFmdDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81NV83Ij5FeHA8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl80Nl8xMiI+QXV4PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OF8xNCI+UHV0X0J1ZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81MV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzU3XzciPkxlbjwvQT4sIEZhbHNlKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzUwXzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81N18xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81OV83Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNjBfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNjFfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KSA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzUwXzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+Rm9yZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl82MF83Ij5BZnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNjFfNyI+RXhwPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl81N18xNCI+UHV0PC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5EZWNpbWFsX0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjMWMyMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bQpAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pby5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW8uYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRGVjaW1hbF9JTyAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+Z2VuZXJpYzwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5OdW08L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+ZGVsdGE8L2I+ICZsdDsmZ3Q7IDxiPmRpZ2l0czwvYj4gJmx0OyZndDs7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzQzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNDRfNDgiPkRlY2ltYWxfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPidGb3JlOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N180Ij5EZWZhdWx0X0FmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPidBZnQ7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDA7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTBfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl81MV83Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl81Ml83Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTNfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNTRfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNjZfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZGIuaHRtI3JlZl82N183Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1kZWNpbWFsX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRiLmh0bSNyZWZfNjhfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZGVjaW1hbF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzY5XzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2FkYi5odG0jcmVmXzcwXzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPik7CisKKzxiPnByaXZhdGU8L2I+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUHV0KTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWRlY2ltYWxfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5EZWNpbWFsX0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTdiZDFlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bQpAQCAtMCwwICsxLDg2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRW51bWVyYXRpb25fSU8gICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVGV4dF9JTzsKKzxiPndpdGg8L2I+IEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOyA8Yj51c2U8L2I+IEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NV80OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80NF80MyI+RW51bWVyYXRpb25fSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cGFja2FnZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N18xMiI+QXV4PC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworICAgPGI+cGFja2FnZTwvYj4gRUlPIDxiPmlzPC9iPiA8Yj5uZXc8L2I+IEFkYS5UZXh0X0lPLkVudW1lcmF0aW9uX0lPICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQyXzkiPkVudW08L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81MV83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+RW51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTJfNyI+V2lkdGg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81M183Ij5TZXQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTNfOSI+VHlwZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9TZXR0aW5nPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83Ij5CdWY8L0E+PC9GT05UPiAgOiBTdHJpbmcgKDEgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+J0xhc3QpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183Ij5Uc2V0PC9BPjwvRk9OVD4gOiBBZGEuVGV4dF9JTy5UeXBlX1NldDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTNfNyI+U2V0PC9BPiAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzQ2Ij5NaXhlZF9DYXNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81N183Ij5Uc2V0PC9BPiA6PSBBZGEuVGV4dF9JTy5UeXBlX1NldCdWYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTNfOSI+VHlwZV9TZXQ8L0E+J1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81M183Ij5TZXQ8L0E+KSk7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81N183Ij5Uc2V0PC9BPiA6PSBBZGEuVGV4dF9JTy5Mb3dlcl9DYXNlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICBFSU8uUHV0ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTdfNyI+VHNldDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTNfNyI+U2V0PC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTNfNDYiPk1peGVkX0Nhc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPidGaXJzdCkgOj0gVG9fVXBwZXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81Nl83Ij5CdWY8L0E+J0ZpcnN0KSk7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNDdfMTIiPkF1eDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDhfMTQiPlB1dF9CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzUwXzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5XaWR0aDwvQT4sIFRydWUsIFRydWUpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTVfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTZfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQyXzkiPkVudW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU3XzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNThfNyI+U2V0PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzkiPlR5cGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfU2V0dGluZzwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTZfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNTdfNyI+V2lkdGg8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU4XzciPlNldDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzU1XzE0Ij5QdXQ8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5FbnVtZXJhdGlvbl9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NTQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2Fkcy5odG0KQEAgLTAsMCArMSw2OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW8uYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+Z2VuZXJpYzwvYj4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80NF80MyI+RW51bTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoJmx0OyZndDspOworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl80NV80OCI+RW51bWVyYXRpb25fSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gMDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNCI+RGVmYXVsdF9TZXR0aW5nPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzkiPlR5cGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUzXzQ2Ij5NaXhlZF9DYXNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzUwXzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZW51bWVyYXRpb25faW9fX2FkYi5odG0jcmVmXzUxXzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81Ml83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+RW51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNTNfNyI+V2lkdGg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl81NF83Ij5TZXQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTNfOSI+VHlwZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9TZXR0aW5nPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl83MV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl83Ml83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+RW51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRiLmh0bSNyZWZfNzNfNyI+V2lkdGg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZGIuaHRtI3JlZl83NF83Ij5TZXQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTNfOSI+VHlwZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1lbnVtZXJhdGlvbl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9TZXR0aW5nPC9BPik7CisKKzxiPnByaXZhdGU8L2I+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUHV0KTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWVudW1lcmF0aW9uX2lvX19hZHMuaHRtI3JlZl80NF80MyI+RW51bWVyYXRpb25fSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNzBiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTyAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5UZXh0X0lPOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80NF80MyI+Rml4ZWRfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cGFja2FnZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xMiI+QXV4PC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworICAgPGI+cGFja2FnZTwvYj4gRklYSU8gPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlRleHRfSU8uRml4ZWRfSU8gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81MV83Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzUzXzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU0XzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83Ij5CdWY8L0E+PC9GT05UPiA6IFN0cmluZyAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4nTGFzdCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciPkxlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTNfNyI+Rm9yZTwvQT4gKyAxICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81NV83Ij5FeHA8L0E+ICZndDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl81N183Ij5MZW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTdfNyI+TGVuPC9BPiArIDEgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIEZJWElPLlB1dCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl81Nl83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzUyXzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzU0XzciPkFmdDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzQ2XzEyIj5BdXg8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQ4XzE0Ij5QdXRfQnVmPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81MV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzU2XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTdfNyI+TGVuPC9BPiwgRmFsc2UpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzUwXzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTdfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNThfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNjBfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl82MV83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KSA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNThfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+Rm9yZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNjBfNyI+QWZ0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl82MV83Ij5FeHA8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl81N18xNCI+UHV0PC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80NF80MyI+Rml4ZWRfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNmM5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtCkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pby5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GaXhlZF9JTyAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPk51bTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5kZWx0YTwvYj4gJmx0OyZndDs7CisKKzxiPnBhY2thZ2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzQzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzQ0XzQ4Ij5GaXhlZF9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPidGb3JlOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N180Ij5EZWZhdWx0X0FmdDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4nQWZ0OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSAwOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTBfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl81Ml83Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl81M183Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2FkYi5odG0jcmVmXzU0XzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZHMuaHRtI3JlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNjZfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNjdfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNjhfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRiLmh0bSNyZWZfNjlfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZpeGVkX2lvX19hZGIuaHRtI3JlZl83MF83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1maXhlZF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KTsKKworPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChQdXQpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZml4ZWRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5GaXhlZF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliZjNlOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0KQEAgLTAsMCArMSw4MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkZsb2F0X0lPICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLlRleHRfSU87Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzQ4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5GbG9hdF9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wYWNrYWdlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEyIj5BdXg8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47CisgICA8Yj5wYWNrYWdlPC9iPiBGSU8gPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlRleHRfSU8uRmxvYXRfSU8gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81MV83Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81Ml83Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzUzXzciPkZvcmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X0ZvcmU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU0XzciPkFmdDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0FmdDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTVfNyI+RXhwPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ4XzQiPkRlZmF1bHRfRXhwPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83Ij5CdWY8L0E+PC9GT05UPiA6IFN0cmluZyAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4nTGFzdCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzciPkxlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTNfNyI+Rm9yZTwvQT4gKyAxICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81NV83Ij5FeHA8L0E+ICZndDsgMCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl81N183Ij5MZW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTdfNyI+TGVuPC9BPiArIDEgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIEZJTy5QdXQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTZfNyI+QnVmPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81Ml83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81NF83Ij5BZnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU1XzciPkV4cDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl80Nl8xMiI+QXV4PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OF8xNCI+UHV0X0J1ZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTFfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl81Nl83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzU3XzciPkxlbjwvQT4sIEZhbHNlKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl81MF8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU3XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTlfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNjBfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl82MV83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTBfMTQiPlB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzU5XzciPkZvcmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzYwXzciPkFmdDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNjFfNyI+RXhwPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNTdfMTQiPlB1dDwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkZsb2F0X0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjgyOTFhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bQpAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxIVE1MPjxIRUFEPjxUSVRMRT50ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW8uYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pby5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uRmxvYXRfSU8gICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5OdW08L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+ZGlnaXRzPC9iPiAmbHQ7Jmd0OzsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNDRfNDgiPkZsb2F0X0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+JzxiPkRpZ2l0czwvYj4gLSAxOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSAzOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTBfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl81Ml83Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9Gb3JlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl81M183Ij5BZnQ8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9BZnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2FkYi5odG0jcmVmXzU0XzciPkV4cDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZHMuaHRtI3JlZl80OF80Ij5EZWZhdWx0X0V4cDwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNjZfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNjdfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNjhfNyI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfRm9yZTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRiLmh0bSNyZWZfNjlfNyI+QWZ0PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQWZ0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWZsb2F0X2lvX19hZGIuaHRtI3JlZl83MF83Ij5FeHA8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1mbG9hdF9pb19fYWRzLmh0bSNyZWZfNDhfNCI+RGVmYXVsdF9FeHA8L0E+KTsKKworPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChQdXQpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tZmxvYXRfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5GbG9hdF9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzUwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0KQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU8gICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTAgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPndpdGg8L2I+IEFkYS5UZXh0X0lPOworPGI+d2l0aDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1hdXhfX2Fkcy5odG0jcmVmXzQyXzUxIj5BdXg8L0E+OworCis8Yj5wYWNrYWdlPC9iPiA8Yj5ib2R5PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80OCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ0XzQzIj5JbnRlZ2VyX0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnBhY2thZ2U8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfMTIiPkF1eDwvQT48L0ZPTlQ+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKyAgIDxiPnBhY2thZ2U8L2I+IElJTyA8Yj5pczwvYj4gPGI+bmV3PC9iPiBBZGEuVGV4dF9JTy5JbnRlZ2VyX0lPICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTBfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzUyXzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzUzXzciPkJhc2U8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0Jhc2U8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzciPkJ1ZjwvQT48L0ZPTlQ+IDogU3RyaW5nICgxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPidMYXN0KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgSUlPLlB1dCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzU1XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81MV83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzUzXzciPkJhc2U8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl80Nl8xMiI+QXV4PC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80OF8xNCI+UHV0X0J1ZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81MF83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSNyZWZfNTVfNyI+QnVmPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzUyXzciPldpZHRoPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTVfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl81Nl83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTdfNyI+V2lkdGg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfV2lkdGg8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNThfNyI+QmFzZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUxXzEyIj5OdW1iZXJfQmFzZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQmFzZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzU2XzciPkl0ZW08L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTdfNyI+V2lkdGg8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNThfNyI+QmFzZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNTVfMTQiPlB1dDwvQT47CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80NF80MyI+SW50ZWdlcl9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWZmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0KQEAgLTAsMCArMSw2OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW8uYWRzPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU8gICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTEgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxiPmdlbmVyaWM8L2I+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80NF80MyI+TnVtPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPnJhbmdlPC9iPiAmbHQ7Jmd0OzsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl80NF80OCI+SW50ZWdlcl9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzQiPkRlZmF1bHRfV2lkdGg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPidXaWR0aDsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDEwOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzUxXzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl81Ml83Ij5XaWR0aDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZGIuaHRtI3JlZl81M183Ij5CYXNlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzYxXzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRiLmh0bSNyZWZfNjJfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzYzXzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWludGVnZXJfaW9fX2FkYi5odG0jcmVmXzY0XzciPkJhc2U8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1pbnRlZ2VyX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0Jhc2U8L0E+KTsKKworPGI+cHJpdmF0ZTwvYj4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChQdXQpOworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8taW50ZWdlcl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPkludGVnZXJfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGMxNjEyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkYjwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZGIgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjEwIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj53aXRoPC9iPiBBZGEuVGV4dF9JTzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tYXV4X19hZHMuaHRtI3JlZl80Ml81MSI+QXV4PC9BPjsKKworPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfNDgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80NF80MyI+TW9kdWxhcl9JTzwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorCisgICA8Yj5wYWNrYWdlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzEyIj5BdXg8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDJfNTEiPkF1eDwvQT47CisgICA8Yj5wYWNrYWdlPC9iPiBNSU8gPGI+aXM8L2I+IDxiPm5ldzwvYj4gQWRhLlRleHRfSU8uTW9kdWxhcl9JTyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzUwXzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzUxXzciPkl0ZW08L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQyXzkiPk51bTwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5XaWR0aDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTBfMTIiPkZpZWxkPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81M183Ij5CYXNlPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDdfNCI+RGVmYXVsdF9CYXNlPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV83Ij5CdWY8L0E+PC9GT05UPiA6IFN0cmluZyAoMSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4nTGFzdCk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIE1JTy5QdXQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtI3JlZl81NV83Ij5CdWY8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81M183Ij5CYXNlPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNDZfMTIiPkF1eDwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLWF1eF9fYWRzLmh0bSNyZWZfNDhfMTQiPlB1dF9CdWY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTBfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzU1XzciPkJ1ZjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81Ml83Ij5XaWR0aDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDlfMTQiPlB1dDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU1XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNTZfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU3XzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkJhc2U8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0Jhc2U8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80OV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl81Nl83Ij5JdGVtPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU3XzciPldpZHRoPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU4XzciPkJhc2U8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzU1XzE0Ij5QdXQ8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPk1vZHVsYXJfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2U3ZDYxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtCkBAIC0wLDAgKzEsNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pby5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5Nb2R1bGFyX0lPICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjExIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Yj5nZW5lcmljPC9iPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml85IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDRfNDMiPk51bTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5tb2Q8L2I+ICZsdDsmZ3Q7OworCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80NF8zNSI+VGV4dF9JTzwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80MyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzQ0XzQ4Ij5Nb2R1bGFyX0lPPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDZfNCI+RGVmYXVsdF9XaWR0aDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+J1dpZHRoOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80N180Ij5EZWZhdWx0X0Jhc2U8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUxXzEyIj5OdW1iZXJfQmFzZTwvQT4gOj0gMTA7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzQ5XzE0Ij5QdXQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNTBfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNTFfNyI+SXRlbTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRzLmh0bSNyZWZfNDJfOSI+TnVtPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzUyXzciPldpZHRoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MF8xMiI+RmllbGQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80Nl80Ij5EZWZhdWx0X1dpZHRoPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2FkYi5odG0jcmVmXzUzXzciPkJhc2U8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81MV8xMiI+TnVtYmVyX0Jhc2U8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80N180Ij5EZWZhdWx0X0Jhc2U8L0E+KTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNjFfMTQiPlB1dDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZGIuaHRtI3JlZl82Ml83Ij5JdGVtPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80Ml85Ij5OdW08L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNjNfNyI+V2lkdGg8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUwXzEyIj5GaWVsZDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ2XzQiPkRlZmF1bHRfV2lkdGg8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8tbW9kdWxhcl9pb19fYWRiLmh0bSNyZWZfNjRfNyI+QmFzZTwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzUxXzEyIj5OdW1iZXJfQmFzZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLW1vZHVsYXJfaW9fX2Fkcy5odG0jcmVmXzQ3XzQiPkRlZmF1bHRfQmFzZTwvQT4pOworCis8Yj5wcml2YXRlPC9iPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFB1dCk7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby1tb2R1bGFyX2lvX19hZHMuaHRtI3JlZl80NF80MyI+TW9kdWxhcl9JTzwvQT47Cis8L1BSRT48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhZTc3MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0KQEAgLTAsMCArMSwzNDMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pby5hZGI8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkYiA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTggQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPGI+Ym9keTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDJfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NF80Ij5EZWZhdWx0X1dpbmRvdzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl81OV8xNCI+U2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzU5XzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfNDRfNCI+RGVmYXVsdF9XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTlfMjYiPldpbjwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNTlfMTQiPlNldF9XaW5kb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzQ0XzQiPkRlZmF1bHRfV2luZG93PC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzQ0XzQiPkRlZmF1bHRfV2luZG93PC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPik7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82NV8xNCI+Rmx1c2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82M18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82NV8yMSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQ1XzE0Ij5SZWZyZXNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82NV8yMSI+V2luPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjVfMTQiPkZsdXNoPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzY2XzE0Ij5GbHVzaDwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82NV8xNCI+Rmx1c2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjZfMTQiPkZsdXNoPC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gU3BlY2lmaWNhdGlvbiBvZiBsaW5lIGFuZCBwYWdlIGxlbmd0aHMgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZXJlIGFyZSBubyBzZXQgcm91dGluZXMgaW4gdGhpcyBwYWNrYWdlLiBJIGFzc3VtZSwgdGhhdCB5b3UgYWxsb2NhdGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdGhlIHdpbmRvdyB3aXRoIGFuIGFwcHJvcHJpYXRlIHNpemUuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEEgc2Nyb2xsLXdpbmRvdyBpcyBpbnRlcnByZXRlZCBhcyBhbiBwYWdlIHdpdGggdW5ib3VuZGVkIHBhZ2UgbGVuZ3RoLDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpLmUuIGl0IHJldHVybnMgdGhlIGNvbnZlbnRpb25hbCAwIGFzIHBhZ2UgbGVuZ3RoLjwvRU0+PC9GT05UPgorCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl83N18xMyI+TGluZV9MZW5ndGg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl83N18yNiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Nl83Ij5OX0xpbmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzciPk5fQ29sczwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNzdfMjYiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfODZfNyI+Tl9MaW5lczwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfODdfNyI+Tl9Db2xzPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGlmIE5hdHVyYWwgKE5fQ29scykgJmd0OyBOYXR1cmFsIChDb3VudCdMYXN0KSB0aGVuPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgIHJhaXNlIExheW91dF9FcnJvcjs8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZW5kIGlmOzwvRU0+PC9GT05UPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfODdfNyI+Tl9Db2xzPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNzdfMTMiPkxpbmVfTGVuZ3RoPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNzhfMTMiPkxpbmVfTGVuZ3RoPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNzdfMTMiPkxpbmVfTGVuZ3RoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzc4XzEzIj5MaW5lX0xlbmd0aDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MF8xMyI+UGFnZV9MZW5ndGg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODBfMjYiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0XzciPk5fTGluZXM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1XzciPk5fQ29sczwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyMl8xMyI+U2Nyb2xsaW5nX0FsbG93ZWQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgwXzI2Ij5XaW48L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiAwOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjhfMTQiPkdldF9TaXplPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MF8yNiI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMDRfNyI+Tl9MaW5lczwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTA1XzciPk5fQ29sczwvQT4pOworICAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBpZiBOYXR1cmFsIChOX0xpbmVzKSAmZ3Q7IE5hdHVyYWwgKENvdW50J0xhc3QpIHRoZW48L0VNPjwvRk9OVD4KKyAgICAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgcmFpc2UgTGF5b3V0X0Vycm9yOzwvRU0+PC9GT05UPgorICAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBlbmQgaWY7PC9FTT48L0ZPTlQ+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMDRfNyI+Tl9MaW5lczwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODBfMTMiPlBhZ2VfTGVuZ3RoPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgxXzEzIj5QYWdlX0xlbmd0aDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgwXzEzIj5QYWdlX0xlbmd0aDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MV8xMyI+UGFnZV9MZW5ndGg8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29sdW1uLCBMaW5lLCBhbmQgUGFnZSBDb250cm9sIC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzE0Ij5OZXdfTGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8yNCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfNDEiPlNwYWNpbmc8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4gOj0gMSkKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfNyI+UF9TaXplPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODBfMTMiPlBhZ2VfTGVuZ3RoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8yNCI+V2luPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8Yj5ub3Q8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfNDEiPlNwYWNpbmc8L0E+J1ZhbGlkIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworCisgICAgICA8Yj5mb3I8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1XzExIj5JPC9BPjwvRk9OVD4gPGI+aW48L2I+IDEgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl80MSI+U3BhY2luZzwvQT4gPGI+bG9vcDwvYj4KKyAgICAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzEyOV83Ij5QX1NpemU8L0E+ICZndDsgMCA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTAxXzEzIj5MaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8yNCI+V2luPC9BPikgJmd0Oz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMjlfNyI+UF9TaXplPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84OV8xNCI+TmV3X1BhZ2U8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzI0Ij5XaW48L0E+KTsKKyAgICAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjhfMTQiPkFkZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMjQiPldpbjwvQT4sIEFTQ0lJLkxGKTsKKyAgICAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5sb29wPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8xNCI+TmV3X0xpbmU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg3XzE0Ij5OZXdfTGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84N18yNCI+U3BhY2luZzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPiA6PSAxKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODZfMTQiPk5ld19MaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODdfMjQiPlNwYWNpbmc8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84N18xNCI+TmV3X0xpbmU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzE0Ij5OZXdfUGFnZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84OV8yNCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDgwXzE0Ij5DbGVhcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODlfMjQiPldpbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzE0Ij5OZXdfUGFnZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTBfMTQiPk5ld19QYWdlPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg5XzE0Ij5OZXdfUGFnZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNjJfMTMiPkdldF9XaW5kb3c8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85MF8xNCI+TmV3X1BhZ2U8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzE0Ij5TZXRfQ29sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzIzIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjJfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTJfNDEiPlRvPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NF83Ij5ZPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NV83Ij5YMTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2XzciPlgyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjdfNyI+TjwvQT48L0ZPTlQ+ICA6IE5hdHVyYWw7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8Yj5ub3Q8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTJfNDEiPlRvPC9BPidWYWxpZCA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NF8xNCI+R2V0X0N1cnNvcl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTJfMjMiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY0XzciPlk8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2NV83Ij5YMTwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjdfNyI+TjwvQT4gIDo9IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTJfNDEiPlRvPC9BPik7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY3XzciPk48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY3XzciPk48L0E+IC0gMTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTY2XzciPlgyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2N183Ij5OPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjVfNyI+WDE8L0E+ICZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjZfNyI+WDI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzE0Ij5OZXdfTGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTJfMjMiPldpbjwvQT4sIDEpOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjVfNyI+WDE8L0E+IDo9IDA7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2NV83Ij5YMTwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2Nl83Ij5YMjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPmRlY2xhcmU8L2I+CisgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Ml8xMyI+RmlsbGVyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gU3RyaW5nIChJbnRlZ2VyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2NV83Ij5YMTwvQT4pIC4uIChJbnRlZ2VyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2Nl83Ij5YMjwvQT4pIC0gMSkpCisgICAgICAgICAgICAgIDo9ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7ICcgJyk7CisgICAgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzIzIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE4Ml8xMyI+RmlsbGVyPC9BPik7CisgICAgICAgICA8Yj5lbmQ8L2I+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTJfMTQiPlNldF9Db2w8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkzXzE0Ij5TZXRfQ29sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkwXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkzXzIzIj5UbzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzkyXzE0Ij5TZXRfQ29sPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTNfMjMiPlRvPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTNfMTQiPlNldF9Db2w8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzE0Ij5TZXRfTGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Nl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85NV8yNCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTVfNDEiPlRvPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OF83Ij5ZMTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OV83Ij5ZMjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMF83Ij5YPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAxXzciPk48L0E+PC9GT05UPiAgOiBOYXR1cmFsOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPGI+bm90PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzQxIj5UbzwvQT4nVmFsaWQgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiBDb25zdHJhaW50X0Vycm9yOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDRfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzI0Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OF83Ij5ZMTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjAwXzciPlg8L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjAxXzciPk48L0E+ICA6PSBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzQxIj5UbzwvQT4pOyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIwMV83Ij5OPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIwMV83Ij5OPC9BPiAtIDE7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OV83Ij5ZMjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjAxXzciPk48L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OV83Ij5ZMjwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OF83Ij5ZMTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODlfMTQiPk5ld19QYWdlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85NV8yNCI+V2luPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5OF83Ij5ZMTwvQT4gOj0gMDsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTk4XzciPlkxPC9BPiAmbHQ7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTk5XzciPlkyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84Nl8xNCI+TmV3X0xpbmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk1XzI0Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTk5XzciPlkyPC9BPiAtIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTk4XzciPlkxPC9BPikpOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTVfMTQiPlNldF9MaW5lPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85Nl8xNCI+U2V0X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTlfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTZfMjQiPlRvPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTVfMTQiPlNldF9MaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTZfMjQiPlRvPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOTZfMTQiPlNldF9MaW5lPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk4XzEzIj5Db2w8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjVfMTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfOThfMTgiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI3XzciPlk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjhfNyI+WDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI5XzciPk48L0E+PC9GT05UPiA6IE5hdHVyYWw7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDRfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk4XzE4Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIyN183Ij5ZPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMjhfNyI+WDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMjlfNyI+TjwvQT4gOj0gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMjhfNyI+WDwvQT4pOyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIyOV83Ij5OPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIyOV83Ij5OPC9BPiArIDE7CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGlmIE4gJmd0OyBOYXR1cmFsIChDb3VudCdMYXN0KSB0aGVuPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgIHJhaXNlIExheW91dF9FcnJvcjs8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZW5kIGlmOzwvRU0+PC9GT05UPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjI5XzciPk48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85OF8xMyI+Q29sPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk5XzEzIj5Db2w8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl85OF8xMyI+Q29sPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzk5XzEzIj5Db2w8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTAxXzEzIj5MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ1XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMV8xOSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDdfNyI+WTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0OF83Ij5YPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDlfNyI+TjwvQT48L0ZPTlQ+IDogTmF0dXJhbDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NF8xNCI+R2V0X0N1cnNvcl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTAxXzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI0N183Ij5ZPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNDhfNyI+WDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNDlfNyI+TjwvQT4gOj0gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNDdfNyI+WTwvQT4pOyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI0OV83Ij5OPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI0OV83Ij5OPC9BPiArIDE7CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGlmIE4gJmd0OyBOYXR1cmFsIChDb3VudCdMYXN0KSB0aGVuPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgIHJhaXNlIExheW91dF9FcnJvcjs8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZW5kIGlmOzwvRU0+PC9GT05UPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjQ5XzciPk48L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDFfMTMiPkxpbmU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTAyXzEzIj5MaW5lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4KKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTAxXzEzIj5MaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwMl8xMyI+TGluZTwvQT47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENoYXJhY3RlcnMgT3V0cHV0IC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTQiPlB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2OV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTkiPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2OV8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjcxXzciPlBfU2l6ZTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzgwXzEzIj5QYWdlX0xlbmd0aDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE5Ij5XaW48L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjcyXzciPlk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzNfNyI+WDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc0XzciPkw8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc1XzciPkM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNzFfNyI+UF9TaXplPC9BPiAmZ3Q7IDAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDRfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8xOSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNzJfNyI+WTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjczXzciPlg8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjhfMTQiPkdldF9TaXplPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjc0XzciPkw8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI3NV83Ij5DPC9BPik7CisgICAgICAgICA8Yj5pZjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjcyXzciPlk8L0E+ICsgMSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI3NF83Ij5MPC9BPiA8Yj5hbmQ8L2I+IDxiPnRoZW48L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI3M183Ij5YPC9BPiArIDEpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNzVfNyI+QzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODlfMTQiPk5ld19QYWdlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTkiPldpbjwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyOF8xNCI+QWRkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMDhfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzM3Ij5JdGVtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA4XzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOV8xNCI+UHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg3XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOV8xOSI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IENoYXJhY3RlcikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEwOF8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA5XzE5Ij5JdGVtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTA5XzE0Ij5QdXQ8L0E+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBTdHJpbmdzLU91dHB1dCAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0Ij5QdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTdfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE5Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTdfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzM3Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5OV83Ij5QX1NpemU8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ3XzEyIj5Db3VudDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl84MF8xMyI+UGFnZV9MZW5ndGg8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xOSI+V2luPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMF83Ij5ZPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzAxXzciPlg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMl83Ij5MPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwM183Ij5DPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjk5XzciPlBfU2l6ZTwvQT4gJmd0OyAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTVfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzAwXzciPlk8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzMwMV83Ij5YPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE5Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzMwMl83Ij5MPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMDNfNyI+QzwvQT4pOworICAgICAgICAgPGI+aWY8L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzMwMF83Ij5ZPC9BPiArIDEpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMDJfNyI+TDwvQT4gPGI+YW5kPC9iPiA8Yj50aGVuPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMDFfNyI+WDwvQT4gKyAxICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTVfMzciPkl0ZW08L0E+J0xlbmd0aCkgJmd0Oz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMDNfNyI+QzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfODlfMTQiPk5ld19QYWdlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTVfMTkiPldpbjwvQT4pOworICAgICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1M18xNCI+QWRkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTVfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzM3Ij5JdGVtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzE1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNl8xNCI+UHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzE1XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNl8xOSI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExNV8xNCI+UHV0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl82Ml8xMyI+R2V0X1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE2XzE5Ij5JdGVtPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE2XzE0Ij5QdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzIxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExOF8xNCI+UHV0X0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMjJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMTlfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyM183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEyMF83Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE1XzE0Ij5QdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExOV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEyMF83Ij5JdGVtPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzg2XzE0Ij5OZXdfTGluZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfMTE5XzciPldpbjwvQT4sIDEpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExOF8xNCI+UHV0X0xpbmU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzMwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEyMl8xNCI+UHV0X0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMjNfNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzExOF8xNCI+UHV0X0xpbmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzYyXzEzIj5HZXRfV2luZG93PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl8xMjNfNyI+SXRlbTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzEyMl8xNCI+UHV0X0xpbmU8L0E+OworCis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ0XzM1Ij5UZXh0X0lPPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGU5MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bQpAQCAtMCwwICsxLDE0MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvLmFkczwvVElUTEU+PC9IRUFEPgorPEJPRFk+Cis8SFI+PERJViBBTElHTj0iY2VudGVyIj48SDE+IEZpbGUgOiB0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW8uYWRzIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8gICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS4xMyBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gQWRhLlRleHRfSU87Cis8Yj53aXRoPC9iPiBBZGEuSU9fRXhjZXB0aW9uczsKKworPGI+cGFja2FnZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfNDJfNDAiPlRleHRfSU88L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiBBZGEuVGV4dF9JTy5Db3VudDsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDdfMTIiPkNvdW50PC9BPjwvRk9OVD4gPGI+aXM8L2I+IEFkYS5UZXh0X0lPLkNvdW50OworICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+IDxiPnJhbmdlPC9iPiAxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPidMYXN0OworCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzEyIj5GaWVsZDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiBBZGEuVGV4dF9JTy5GaWVsZDsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTFfMTIiPk51bWJlcl9CYXNlPC9BPjwvRk9OVD4gPGI+aXM8L2I+IEludGVnZXIgPGI+cmFuZ2U8L2I+IDIgLi4gMTY7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfOSI+VHlwZV9TZXQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMjIiPkxvd2VyX0Nhc2U8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81M18zNCI+VXBwZXJfQ2FzZTwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzQ2Ij5NaXhlZF9DYXNlPC9BPjwvRk9OVD4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZvciBtb3N0IG9mIHRoZSByb3V0aW5lcyB5b3Ugd2lsbCBzZWUgYSB2ZXJzaW9uIHdpdGhvdXQgYSBXaW5kb3c8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdHlwZSBwYXJhbWV0ZXIuIFRoZXkgd2lsbCBvcGVyYXRlIG9uIGEgZGVmYXVsdCB3aW5kb3csIHdoaWNoIGNhbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBiZSBzZXQgYnkgdGhlIHVzZXIuIEl0IGlzIGluaXRpYWxseSBlcXVhbCB0byBTdGFuZGFyZF9XaW5kb3cuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl80Nl8xNCI+U2V0X1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzQ2XzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2V0IFdpbiBhcyB0aGUgZGVmYXVsdCB3aW5kb3c8L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfNTJfMTMiPkdldF9XaW5kb3c8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEdldCB0aGUgY3VycmVudCBkZWZhdWx0IHdpbmRvdzwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfNjNfMTQiPkZsdXNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfNjNfMjEiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pOworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzY5XzE0Ij5GbHVzaDwvQT48L0ZPTlQ+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBTcGVjaWZpY2F0aW9uIG9mIGxpbmUgYW5kIHBhZ2UgbGVuZ3RocyAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlcmUgYXJlIG5vIHNldCByb3V0aW5lcyBpbiB0aGlzIHBhY2thZ2UuIEkgYXNzdW1lLCB0aGF0IHlvdSBhbGxvY2F0ZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgd2luZG93IHdpdGggYW4gYXBwcm9wcmlhdGUgc2l6ZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQSBzY3JvbGwtd2luZG93IGlzIGludGVycHJldGVkIGFzIGFuIHBhZ2Ugd2l0aCB1bmJvdW5kZWQgcGFnZSBsZW5ndGgsPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGkuZS4gaXQgcmV0dXJucyB0aGUgY29udmVudGlvbmFsIDAgYXMgcGFnZSBsZW5ndGguPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzg0XzEzIj5MaW5lX0xlbmd0aDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzg0XzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPjsKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzk2XzEzIj5MaW5lX0xlbmd0aDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80N18xMiI+Q291bnQ8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMDJfMTMiPlBhZ2VfTGVuZ3RoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTAyXzI2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPjsKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzExOF8xMyI+UGFnZV9MZW5ndGg8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDdfMTIiPkNvdW50PC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvbHVtbiwgTGluZSwgYW5kIFBhZ2UgQ29udHJvbCAtLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzEyN18xNCI+TmV3X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84Nl8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xMjdfMjQiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODZfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTI3XzQxIj5TcGFjaW5nPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+IDo9IDEpOworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE0NF8xNCI+TmV3X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84N18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNDRfMjQiPlNwYWNpbmc8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4gOj0gMSk7CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNTBfMTQiPk5ld19QYWdlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODlfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTUwXzI0Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNTZfMTQiPk5ld19QYWdlPC9BPjwvRk9OVD47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjJfMTQiPlNldF9Db2w8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xNjJfMjMiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47ICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyXzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE2Ml80MSI+VG88L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4pOworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5MF8xNCI+U2V0X0NvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5MF8yMyI+VG88L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT4pOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMTk2XzE0Ij5TZXRfTGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk1XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzE5Nl8yNCI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8xOTZfNDEiPlRvPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZHMuaHRtI3JlZl80OF8xMiI+UG9zaXRpdmVfQ291bnQ8L0E+KTsKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yMTlfMTQiPlNldF9MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTZfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjE5XzI0Ij5UbzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIyNV8xMyI+Q29sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOThfMTgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjI1XzE4Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPjsKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzIzOV8xMyI+Q29sPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2Fkcy5odG0jcmVmXzQ4XzEyIj5Qb3NpdGl2ZV9Db3VudDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNDVfMTMiPkxpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDFfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMjQ1XzE5Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPjsKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMl8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yNTlfMTMiPkxpbmU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDhfMTIiPlBvc2l0aXZlX0NvdW50PC9BPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ2hhcmFjdGVycy1PdXRwdXQgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI2OV8xNCI+UHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI2OV8xOSI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI2OV8zNyI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IENoYXJhY3Rlcik7CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI4N18xNCI+UHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzI4N18xOSI+SXRlbTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IENoYXJhY3Rlcik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFN0cmluZ3MtT3V0cHV0IC0tPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yOTdfMTQiPlB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yOTdfMTkiPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNV8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8yOTdfMzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMTVfMTQiPlB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNl8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMTVfMTkiPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzMyMV8xNCI+UHV0X0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMjJfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRleHRfaW9fX2FkYi5odG0jcmVmXzMyM183Ij5JdGVtPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKTsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10ZXh0X2lvX19hZGIuaHRtI3JlZl8zMzBfMTQiPlB1dF9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRiLmh0bSNyZWZfMzMxXzciPkl0ZW08L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEV4Y2VwdGlvbnM8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfNCI+U3RhdHVzX0Vycm9yPC9BPjwvRk9OVD4gOiA8Yj5leGNlcHRpb248L2I+IDxiPnJlbmFtZXM8L2I+IEFkYS5JT19FeGNlcHRpb25zLlN0YXR1c19FcnJvcjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4XzQiPk1vZGVfRXJyb3I8L0E+PC9GT05UPiAgIDogPGI+ZXhjZXB0aW9uPC9iPiA8Yj5yZW5hbWVzPC9iPiBBZGEuSU9fRXhjZXB0aW9ucy5Nb2RlX0Vycm9yOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjlfNCI+TmFtZV9FcnJvcjwvQT48L0ZPTlQ+ICAgOiA8Yj5leGNlcHRpb248L2I+IDxiPnJlbmFtZXM8L2I+IEFkYS5JT19FeGNlcHRpb25zLk5hbWVfRXJyb3I7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMF80Ij5Vc2VfRXJyb3I8L0E+PC9GT05UPiAgICA6IDxiPmV4Y2VwdGlvbjwvYj4gPGI+cmVuYW1lczwvYj4gQWRhLklPX0V4Y2VwdGlvbnMuVXNlX0Vycm9yOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzFfNCI+RGV2aWNlX0Vycm9yPC9BPjwvRk9OVD4gOiA8Yj5leGNlcHRpb248L2I+IDxiPnJlbmFtZXM8L2I+IEFkYS5JT19FeGNlcHRpb25zLkRldmljZV9FcnJvcjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyXzQiPkVuZF9FcnJvcjwvQT48L0ZPTlQ+ICAgIDogPGI+ZXhjZXB0aW9uPC9iPiA8Yj5yZW5hbWVzPC9iPiBBZGEuSU9fRXhjZXB0aW9ucy5FbmRfRXJyb3I7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM180Ij5EYXRhX0Vycm9yPC9BPjwvRk9OVD4gICA6IDxiPmV4Y2VwdGlvbjwvYj4gPGI+cmVuYW1lczwvYj4gQWRhLklPX0V4Y2VwdGlvbnMuRGF0YV9FcnJvcjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzQiPkxheW91dF9FcnJvcjwvQT48L0ZPTlQ+IDogPGI+ZXhjZXB0aW9uPC9iPiA8Yj5yZW5hbWVzPC9iPiBBZGEuSU9fRXhjZXB0aW9ucy5MYXlvdXRfRXJyb3I7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdGV4dF9pb19fYWRzLmh0bSNyZWZfNDRfMzUiPlRleHRfSU88L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2FkYi5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwOWIzZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtCkBAIC0wLDAgKzEsNjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2UuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UcmFjZSAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAyMDAwLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIENvbnRyb2w6PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEBSZXZpc2lvbjogMS41IEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyXzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80Ml8zNSI+VHJhY2U8L0E+PC9GT05UPiA8Yj5pczwvYj4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl8xMDJfMTQiPlRyYWNlX09uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDRfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwMl8yNCI+eDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDZfOSI+VHJhY2VfQXR0cmlidXRlX1NldDwvQT4pIDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBVbnJlZmVyZW5jZWQgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwMl8yNCI+eDwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5udWxsPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfMTAyXzE0Ij5UcmFjZV9PbjwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfMTA2XzE0Ij5UcmFjZV9QdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfMTA2XzI1Ij5zdHI8L0E+PC9GT05UPiA6IFN0cmluZykgPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFVucmVmZXJlbmNlZCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfMTA2XzI1Ij5zdHI8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+bnVsbDwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwNl8xNCI+VHJhY2VfUHV0PC9BPjsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDJfMzUiPlRyYWNlPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYjI4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bQpAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZS5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vICZsdDthbGRvbWVsQGl4Lm5ldGNvbS5jb20mZ3Q7IDIwMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMSBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRiLmh0bSNyZWZfNDJfNDAiPlRyYWNlPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICA8Yj5wcmFnbWE8L2I+IFByZWVsYWJvcmF0ZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQyXzM1Ij5UcmFjZTwvQT4pOworCisgICA8Yj5wcmFnbWE8L2I+IFdhcm5pbmdzIChPZmYpOworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Nl85Ij5UcmFjZV9BdHRyaWJ1dGVfU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ4XzEwIj5UaW1lczwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8xMCI+VHB1dHM8L0E+PC9GT05UPiAgICAgICAgICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTBfMTAiPlVwZGF0ZTwvQT48L0ZPTlQ+ICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxXzEwIj5DdXJzb3JfTW92ZTwvQT48L0ZPTlQ+ICAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81Ml8xMCI+Q2hhcmFjdGVyX091dHB1dDwvQT48L0ZPTlQ+IDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTNfMTAiPkNhbGxzPC9BPjwvRk9OVD4gICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0XzEwIj5WaXJ0dWFsX1B1dHM8L0E+PC9GT05UPiAgICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV8xMCI+SW5wdXRfRXZlbnRzPC9BPjwvRk9OVD4gICAgIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTZfMTAiPlRUWV9TdGF0ZTwvQT48L0ZPTlQ+ICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU3XzEwIj5JbnRlcm5hbF9DYWxsczwvQT48L0ZPTlQ+ICAgOiBCb29sZWFuOworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OF8xMCI+Q2hhcmFjdGVyX0NhbGxzPC9BPjwvRk9OVD4gIDogQm9vbGVhbjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTlfMTAiPlRlcm1jYXBfVGVybUluZm88L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ2XzkiPlRyYWNlX0F0dHJpYnV0ZV9TZXQ8L0E+KTsKKworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80Nl85Ij5UcmFjZV9BdHRyaWJ1dGVfU2V0PC9BPiA8Yj51c2U8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80OF8xMCI+VGltZXM8L0E+ICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAwIC4uICAwOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDlfMTAiPlRwdXRzPC9BPiAgICAgICAgICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgMSAuLiAgMTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzUwXzEwIj5VcGRhdGU8L0E+ICAgICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDIgLi4gIDI7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81MV8xMCI+Q3Vyc29yX01vdmU8L0E+ICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAzIC4uICAzOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNTJfMTAiPkNoYXJhY3Rlcl9PdXRwdXQ8L0E+IDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNCAuLiAgNDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzUzXzEwIj5DYWxsczwvQT4gICAgICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDUgLi4gIDU7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81NF8xMCI+VmlydHVhbF9QdXRzPC9BPiAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA2IC4uICA2OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNTVfMTAiPklucHV0X0V2ZW50czwvQT4gICAgIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAgNyAuLiAgNzsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzU2XzEwIj5UVFlfU3RhdGU8L0E+ICAgICAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDggLi4gIDg7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81N18xMCI+SW50ZXJuYWxfQ2FsbHM8L0E+ICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA5IC4uICA5OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNThfMTAiPkNoYXJhY3Rlcl9DYWxsczwvQT4gIDxiPmF0PC9iPiAwIDxiPnJhbmdlPC9iPiAxMCAuLiAxMDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzU5XzEwIj5UZXJtY2FwX1Rlcm1JbmZvPC9BPiA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gMTEgLi4gMTE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ2XzkiPlRyYWNlX0F0dHJpYnV0ZV9TZXQ8L0E+J1NpemUgPGI+dXNlPC9iPiAzMjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS48L0VNPjwvRk9OVD4KKworICAgPGI+cHJhZ21hPC9iPiBXYXJuaW5ncyAoT24pOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0XzQiPlRyYWNlX0Rpc2FibGU8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDZfOSI+VHJhY2VfQXR0cmlidXRlX1NldDwvQT4gOj0gKDxiPm90aGVyczwvYj4gPSZndDsgRmFsc2UpOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2XzQiPlRyYWNlX09yZGluYXJ5PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDZfOSI+VHJhY2VfQXR0cmlidXRlX1NldDwvQT4gOj0KKyAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ4XzEwIj5UaW1lczwvQT4gICAgICAgICAgICA9Jmd0OyBUcnVlLAorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDlfMTAiPlRwdXRzPC9BPiAgICAgICAgICAgID0mZ3Q7IFRydWUsCisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl81MF8xMCI+VXBkYXRlPC9BPiAgICAgICAgICAgPSZndDsgVHJ1ZSwKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzUxXzEwIj5DdXJzb3JfTW92ZTwvQT4gICAgICA9Jmd0OyBUcnVlLAorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNTJfMTAiPkNoYXJhY3Rlcl9PdXRwdXQ8L0E+ID0mZ3Q7IFRydWUsCisgICAgICA8Yj5vdGhlcnM8L2I+ICAgICAgICAgICA9Jmd0OyBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzXzQiPlRyYWNlX01heGltdW08L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZHMuaHRtI3JlZl80Nl85Ij5UcmFjZV9BdHRyaWJ1dGVfU2V0PC9BPiA6PSAoPGI+b3RoZXJzPC9iPiA9Jmd0OyBUcnVlKTsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRiLmh0bSNyZWZfNDRfMTQiPlRyYWNlX09uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLXRyYWNlX19hZGIuaHRtI3JlZl80NF8yNCI+eDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDZfOSI+VHJhY2VfQXR0cmlidXRlX1NldDwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgZGVidWdnaW5nIGxpYnJhcnkgaGFzIHRyYWNlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2FkYi5odG0jcmVmXzUwXzE0Ij5UcmFjZV9QdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDZfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2FkYi5odG0jcmVmXzUwXzI1Ij5zdHI8L0E+PC9GT05UPiA6IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdHJhY2UuM3guaHRtbCI+X3RyYWNlZigpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOV80Ij5DdXJyZW50X1RyYWNlX1NldHRpbmc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzQ2XzkiPlRyYWNlX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtdHJhY2VfX2Fkcy5odG0jcmVmXzEwOV80Ij5DdXJyZW50X1RyYWNlX1NldHRpbmc8L0E+LCAiX25jX3RyYWNpbmciKTsKKworPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy10cmFjZV9fYWRzLmh0bSNyZWZfNDJfMzUiPlRyYWNlPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDEzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bQpAQCAtMCwwICsxLDI1NjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiPC9USVRMRT48L0hFQUQ+Cis8Qk9EWT4KKzxIUj48RElWIEFMSUdOPSJjZW50ZXIiPjxIMT4gRmlsZSA6IHRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMuYWRiIDwvSDE+PC9ESVY+PEhSPgorPFBSRT4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly93d3cuZ25hdC5jb20iPkdOQVQ8L0E+IG5jdXJzZXMgQmluZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjUgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwOC8wNy8yNiAxODo0NjozMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gU3lzdGVtOworCis8Yj53aXRoPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDlfMjgiPkN1cnNlczwvQT4uPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworPGI+d2l0aDwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkM7ICAgICAgICAgICAgICAgICAgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsKKzxiPndpdGg8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLlN0cmluZ3M7ICAgICAgICAgIDxiPnVzZTwvYj4gPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuU3RyaW5nczsKKzxiPndpdGg8L2I+IEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOyAgICAgICA8Yj51c2U8L2I+IEFkYS5DaGFyYWN0ZXJzLkhhbmRsaW5nOworPGI+d2l0aDwvYj4gQWRhLlN0cmluZ3MuRml4ZWQ7CisKKzxiPnBhY2thZ2U8L2I+IDxiPmJvZHk8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwXzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPjwvRk9OVD4gPGI+aXM8L2I+CisKKyAgIDxiPnVzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzUwXzM1Ij5BdXg8L0E+OworICAgPGI+dXNlPC9iPiA8Yj50eXBlPC9iPiBTeXN0ZW0uQml0X09yZGVyOworCisgICA8Yj5wYWNrYWdlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1XzEyIj5BU0Y8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiBBZGEuU3RyaW5ncy5GaXhlZDsKKworICAgPGI+dHlwZTwvYj4gY2h0eXBlX2FycmF5IDxiPmlzPC9iPiA8Yj5hcnJheTwvYj4gKHNpemVfdCA8Yj5yYW5nZTwvYj4gJmx0OyZndDspCisgICAgICA8Yj5vZjwvYj4gPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgY2h0eXBlX2FycmF5KTsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTZfMTMiPktleV9OYW1lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjJfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTZfMjMiPktleTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczXzEyIj5SZWFsX0tleV9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjRfMTYiPktleW5hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjRfMTYiPks8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBLZXluYW1lLCAia2V5bmFtZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3XzciPkNoPC9BPjwvRk9OVD4gOiBDaGFyYWN0ZXI7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjE2XzIzIj5LZXk8L0E+ICZsdDs9IENoYXJhY3RlcidQb3MgKENoYXJhY3RlcidMYXN0KSA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjdfNyI+Q2g8L0E+IDo9IENoYXJhY3RlcidWYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTZfMjMiPktleTwvQT4pOworICAgICAgICAgPGI+aWY8L2I+IElzX0NvbnRyb2wgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3XzciPkNoPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyN18xMyI+VW5fQ29udHJvbDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4nKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3XzciPkNoPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPikpOworICAgICAgICAgPGI+ZWxzaWY8L2I+IElzX0dyYXBoaWMgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3XzciPkNoPC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgICAgIDxiPmRlY2xhcmU8L2I+CisgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3XzE2Ij5TPC9BPjwvRk9OVD4gOiBTdHJpbmcgKDEgLi4gMSk7CisgICAgICAgICAgICA8Yj5iZWdpbjwvYj4KKyAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc3XzE2Ij5TPC9BPiAoMSkgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjdfNyI+Q2g8L0E+OworICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83N18xNiI+UzwvQT47CisgICAgICAgICAgICA8Yj5lbmQ8L2I+OworICAgICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgICAgIDxiPnJldHVybjwvYj4gIiI7CisgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjRfMTYiPktleW5hbWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxNl8yMyI+S2V5PC9BPikpKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjE2XzEzIj5LZXlfTmFtZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxMF8xNCI+S2V5X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxMF8yNCI+S2V5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTFfMjQiPk5hbWU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU1XzEyIj5BU0Y8L0E+Lk1vdmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTZfMTMiPktleV9OYW1lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxMF8yNCI+S2V5PC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MTFfMjQiPk5hbWU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYxMF8xNCI+S2V5X05hbWU8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ4Nl8xNCI+SW5pdF9TY3JlZW48L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDBfMTYiPkluaXRzY3I8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSW5pdHNjciwgImluaXRzY3IiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDNfNyI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAzXzciPlc8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMF8xNiI+SW5pdHNjcjwvQT47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAzXzciPlc8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ4Nl8xNCI+SW5pdF9TY3JlZW48L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OTVfMTQiPkVuZF9XaW5kb3dzPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzXzE2Ij5FbmR3aW48L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEVuZHdpbiwgImVuZHdpbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEzXzE2Ij5FbmR3aW48L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5NV8xNCI+RW5kX1dpbmRvd3M8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUwMl8xMyI+SXNfRW5kX1dpbmRvdzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjNfMTYiPklzZW5kd2luPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJc2VuZHdpbiwgImlzZW5kd2luIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjNfMTYiPklzZW5kd2luPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MDJfMTMiPklzX0VuZF9XaW5kb3c8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTExXzE0Ij5Nb3ZlX0N1cnNvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzM18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTExXzI3Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzRfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMl8yNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTNfMjciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzN18xNiI+V21vdmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzdfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzN18xNiI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzdfMTYiPkxpbmU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzlfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzN18xNiI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPgorICAgICAgICAgICAgICAgICAgICAgKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdtb3ZlLCAid21vdmUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzN18xNiI+V21vdmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMjciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTJfMjciPkxpbmU8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxM18yNyI+Q29sdW1uPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTIzXzE0Ij5BZGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyM18xOSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTI0XzE5Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfMTYiPldhZGRjaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5XPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTJfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MV8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdhZGRjaCwgIndhZGRjaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUxXzE2Ij5XYWRkY2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjNfMTkiPldpbjwvQT4sIEF0dHJDaGFyX1RvX0NodHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTI0XzE5Ij5DaDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjNfMTQiPkFkZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyOF8xNCI+QWRkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjhfMTkiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjFfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyOV8xOSI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyM18xNCI+QWRkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTI4XzE5Ij5XaW48L0E+LAorICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+Jyg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MjlfMTkiPkNoPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUyOF8xNCI+QWRkPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM0XzE0Ij5BZGQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM1XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM2XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM3XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MzhfNyI+Q2g8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2XzE2Ij5tdndhZGRjaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2XzE2Ij5XPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2XzE2Ij5ZPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzhfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3Nl8xNiI+WDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzZfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBtdndhZGRjaCwgIm12d2FkZGNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzZfMTYiPm12d2FkZGNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM1XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MzZfNyI+TGluZTwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MzdfNyI+Q29sdW1uPC9BPiksCisgICAgICAgICAgICAgICAgICAgQXR0ckNoYXJfVG9fQ2h0eXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MzhfNyI+Q2g8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM0XzE0Ij5BZGQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDJfMTQiPkFkZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDNfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDRfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDVfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU0Nl83Ij5DaDwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTM0XzE0Ij5BZGQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDNfNyI+V2luPC9BPiwKKyAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQ0XzciPkxpbmU8L0E+LAorICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NDVfNyI+Q29sdW1uPC9BPiwKKyAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPicoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTQ2XzciPkNoPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU0Ml8xNCI+QWRkPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTUxXzE0Ij5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NTJfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NTNfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA4XzE2Ij5XZWNob2NoYXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDhfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwOF8xNiI+VzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDhfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXZWNob2NoYXIsICJ3ZWNob2NoYXIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwOF8xNiI+V2VjaG9jaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTUyXzciPldpbjwvQT4sIEF0dHJDaGFyX1RvX0NodHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTUzXzciPkNoPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1MV8xNCI+QWRkX1dpdGhfSW1tZWRpYXRlX0VjaG88L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NTdfMTQiPkFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1OF83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1OV83Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTUxXzE0Ij5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobzwvQT4KKyAgICAgICAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU1OF83Ij5XaW48L0E+LAorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPicoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTU5XzciPkNoPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTU3XzE0Ij5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobzwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU2OV8xMyI+Q3JlYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI5XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NzBfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMwXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81NzFfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzFfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3Ml83Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMl8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTczXzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNF8xNiI+TmV3d2luPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzRfMTYiPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM1XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzRfMTYiPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM2XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzRfMTYiPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzRfMTYiPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXd3aW4sICJuZXd3aW4iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDBfNyI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQwXzciPlc8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNF8xNiI+TmV3d2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3MF83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTcxXzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3Ml83Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3M183Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQwXzciPlc8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MF83Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTY5XzEzIj5DcmVhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81ODhfMTQiPkRlbGV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1Ml8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTg4XzIyIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NF8xNiI+V2RlbHdpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjU0XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdkZWx3aW4sICJkZWx3aW4iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NF8xNiI+V2RlbHdpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4OF8yMiI+V2luPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4OF8yMiI+V2luPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4OF8xNCI+RGVsZXRlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OTRfMTMiPlN1Yl9XaW5kb3c8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk1XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OTZfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI2Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OTdfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjY3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5OF83Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk5XzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3MF8xNiI+U3Vid2luPC9BPjwvRk9OVD4KKyAgICAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjcxXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNzBfMTYiPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjcyXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNzBfMTYiPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI3M18xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjcwXzE2Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzRfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI3MF8xNiI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc1XzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNzBfMTYiPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTdWJ3aW4sICJzdWJ3aW4iKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNzhfNyI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjc4XzciPlc8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI3MF8xNiI+U3Vid2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk1XzciPldpbjwvQT4sCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5Nl83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk3XzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5OF83Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU5OV83Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+KSk7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjc4XzciPlc8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNThfNCI+TnVsbF9XaW5kb3c8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI3OF83Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk0XzEzIj5TdWJfV2luZG93PC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDRfMTMiPkRlcml2ZWRfV2luZG93PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwNV83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjA2XzciPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjA3XzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDhfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwOV83Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOThfMTYiPkRlcndpbjwvQT48L0ZPTlQ+CisgICAgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5OV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk4XzE2Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwMF8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk4XzE2Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMDFfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5OF8xNiI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzAyXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOThfMTYiPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwM18xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk4XzE2Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRGVyd2luLCAiZGVyd2luIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA2XzciPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMwNl83Ij5XPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOThfMTYiPkRlcndpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwNV83Ij5XaW48L0E+LAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDZfNyI+TnVtYmVyX09mX0xpbmVzPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwN183Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDhfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MDlfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMwNl83Ij5XPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMDZfNyI+VzwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwNF8xMyI+RGVyaXZlZF9XaW5kb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMTlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxNF8xMyI+RHVwbGljYXRlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzE5XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTRfMjQiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMV8xNiI+RHVwd2luPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzIxXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMjFfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIER1cHdpbiwgImR1cHdpbiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyNF83Ij5XPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMjFfMTYiPkR1cHdpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxNF8yNCI+V2luPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMjRfNyI+VzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzI0XzciPlc8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTRfMTMiPkR1cGxpY2F0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxOV8xNCI+TW92ZV9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxOV8yNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyMF8yNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM0XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjFfMjciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMzNl8xNiI+TXZ3aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzZfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMzNl8xNiI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzM3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMzZfMTYiPkxpbmU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zMzhfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMzNl8xNiI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBNdndpbiwgIm12d2luIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMzZfMTYiPk12d2luPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjE5XzI3Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjIwXzI3Ij5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjFfMjciPkNvbHVtbjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MTlfMTQiPk1vdmVfV2luZG93PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM0Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjI2XzE0Ij5Nb3ZlX0Rlcml2ZWRfV2luZG93PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzQ2XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjZfMzUiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDdfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyN18zNSI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNDhfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyOF8zNSI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUwXzE2Ij5NdmRlcndpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzUwXzE2Ij5XaW48L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM1MF8xNiI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1Ml8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzUwXzE2Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE12ZGVyd2luLCAibXZkZXJ3aW4iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM1MF8xNiI+TXZkZXJ3aW48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjZfMzUiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjdfMzUiPkxpbmU8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyOF8zNSI+Q29sdW1uPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYyNl8xNCI+TW92ZV9EZXJpdmVkX1dpbmRvdzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY0M18xNCI+U2V0X1N5bmNoX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY0M18zMCI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNjFfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY0NF8zMCI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gRmFsc2UpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM2M18xNiI+U3luY29rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzYzXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNjNfMTYiPldpbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzY0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNjNfMTYiPk1vZGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFN5bmNvaywgInN5bmNvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzYzXzE2Ij5TeW5jb2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NDNfMzAiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjQ0XzMwIj5Nb2RlPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NDNfMTQiPlNldF9TeW5jaF9Nb2RlPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1M18xNCI+QWRkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzcyXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTNfMTkiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzNfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1NF8xOSI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzRfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1NV8xOSI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc2XzE2Ij5XYWRkbnN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzc2XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNzdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM3Nl8xNiI+U3RyPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzc4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNzZfMTYiPkxlbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gLTEpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2FkZG5zdHIsICJ3YWRkbnN0ciIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4MV83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjU0XzE5Ij5TdHI8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM4Ml83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjU0XzE5Ij5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zODFfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzgyXzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM3Nl8xNiI+V2FkZG5zdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTNfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM4MV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjU1XzE5Ij5MZW48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjUzXzE0Ij5BZGQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzkwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjJfMTQiPkFkZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjJfMTkiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjYzXzE5Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzkzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2NF8xOSI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2NV8xOSI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjY2XzE5Ij5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjJfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2M18xOSI+TGluZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2NF8xOSI+Q29sdW1uPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NTNfMTQiPkFkZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY2Ml8xOSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjY1XzE5Ij5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjZfMTkiPkxlbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NjJfMTQiPkFkZDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDAyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzdfMTQiPkFkZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwM183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzdfMTkiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc4XzE5Ij5TdHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+QXR0cmlidXRlZF9TdHJpbmc8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc5XzE5Ij5MZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDdfMTYiPldhZGRjaG5zdHI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDdfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQwN18xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDhfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQwN18xNiI+U3RyPC9BPjwvRk9OVD4gOiBjaHR5cGVfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwOV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDA3XzE2Ij5MZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IC0xKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdhZGRjaG5zdHIsICJ3YWRkY2huc3RyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDEyXzciPlR4dDwvQT48L0ZPTlQ+IDogY2h0eXBlX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY3OF8xOSI+U3RyPC9BPidMZW5ndGgpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5mb3I8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDE0XzExIj5MZW5ndGg8L0E+PC9GT05UPiA8Yj5pbjwvYj4gMSAuLiBzaXplX3QgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY3OF8xOSI+U3RyPC9BPidMZW5ndGgpIDxiPmxvb3A8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MTJfNyI+VHh0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDE0XzExIj5MZW5ndGg8L0E+IC0gMSkgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc4XzE5Ij5TdHI8L0E+IChOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MTRfMTEiPkxlbmd0aDwvQT4pKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MTJfNyI+VHh0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjc4XzE5Ij5TdHI8L0E+J0xlbmd0aCkgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MDdfMTYiPldhZGRjaG5zdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzdfMTkiPldpbjwvQT4sCisgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MTJfNyI+VHh0PC9BPiwKKyAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzlfMTkiPkxlbjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzdfMTQiPkFkZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4Nl8xNCI+QWRkPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4Nl8xOSI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODdfMTkiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjg4XzE5Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjg5XzE5Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+QXR0cmlidXRlZF9TdHJpbmc8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjkwXzE5Ij5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODZfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4N18xOSI+TGluZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4OF8xOSI+Q29sdW1uPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NzdfMTQiPkFkZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4Nl8xOSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjg5XzE5Ij5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82OTBfMTkiPkxlbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82ODZfMTQiPkFkZDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDRfMTQiPkJvcmRlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDVfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA2XzciPkxlZnRfU2lkZV9TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDdfNyI+UmlnaHRfU2lkZV9TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwOF83Ij5Ub3BfU2lkZV9TeW1ib2w8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA5XzciPkJvdHRvbV9TaWRlX1N5bWJvbDwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MTBfNyI+VXBwZXJfTGVmdF9Db3JuZXJfU3ltYm9sPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcxMV83Ij5VcHBlcl9SaWdodF9Db3JuZXJfU3ltYm9sPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzEyXzciPkxvd2VyX0xlZnRfQ29ybmVyX1N5bWJvbDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MTNfNyI+TG93ZXJfUmlnaHRfQ29ybmVyX1N5bWJvbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ4XzE2Ij5XYm9yZGVyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDhfMTYiPlc8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDhfMTYiPkxTPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5SUzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTFfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0OF8xNiI+VFM8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDhfMTYiPkJTPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1M18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5VTEM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0OF8xNiI+VVJDPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU1XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDhfMTYiPkxMQzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1Nl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ4XzE2Ij5MUkM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdib3JkZXIsICJ3Ym9yZGVyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDhfMTYiPldib3JkZXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDVfNyI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA2XzciPkxlZnRfU2lkZV9TeW1ib2w8L0E+KSwKKyAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0NodHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA3XzciPlJpZ2h0X1NpZGVfU3ltYm9sPC9BPiksCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA4XzciPlRvcF9TaWRlX1N5bWJvbDwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwOV83Ij5Cb3R0b21fU2lkZV9TeW1ib2w8L0E+KSwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MTBfNyI+VXBwZXJfTGVmdF9Db3JuZXJfU3ltYm9sPC9BPiksCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzExXzciPlVwcGVyX1JpZ2h0X0Nvcm5lcl9TeW1ib2w8L0E+KSwKKyAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MTJfNyI+TG93ZXJfTGVmdF9Db3JuZXJfU3ltYm9sPC9BPiksCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzEzXzciPkxvd2VyX1JpZ2h0X0Nvcm5lcl9TeW1ib2w8L0E+KQorICAgICAgICAgICAgICAgICAgKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPgorICAgICAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzA0XzE0Ij5Cb3JkZXI8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjBfMTQiPkJveDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ3NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjFfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyMl83Ij5WZXJ0aWNhbF9TeW1ib2w8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyM183Ij5Ib3Jpem9udGFsX1N5bWJvbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MDRfMTQiPkJvcmRlcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyMV83Ij5XaW48L0E+LAorICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjJfNyI+VmVydGljYWxfU3ltYm9sPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzIyXzciPlZlcnRpY2FsX1N5bWJvbDwvQT4sCisgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyM183Ij5Ib3Jpem9udGFsX1N5bWJvbDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyM183Ij5Ib3Jpem9udGFsX1N5bWJvbDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjBfMTQiPkJveDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyOF8xNCI+SG9yaXpvbnRhbF9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyOV83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzMwXzciPkxpbmVfU2l6ZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gTmF0dXJhbDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczMV83Ij5MaW5lX1N5bWJvbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDkwXzE2Ij5XaGxpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OTBfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ5MF8xNiI+VzwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5MV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDkwXzE2Ij5DaDwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5Ml8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDkwXzE2Ij5MZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdobGluZSwgIndobGluZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDkwXzE2Ij5XaGxpbmU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjlfNyI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczMV83Ij5MaW5lX1N5bWJvbDwvQT4pLAorICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzMwXzciPkxpbmVfU2l6ZTwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MjhfMTQiPkhvcml6b250YWxfTGluZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczN18xNCI+VmVydGljYWxfTGluZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwM183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83MzhfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczOV83Ij5MaW5lX1NpemU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IE5hdHVyYWw7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NDBfNyI+TGluZV9TeW1ib2w8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUwN18xNiI+V3ZsaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTA3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDdfMTYiPlc8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDhfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUwN18xNiI+Q2g8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDlfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUwN18xNiI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXdmxpbmUsICJ3dmxpbmUiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUwN18xNiI+V3ZsaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzM4XzciPldpbjwvQT4sCisgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NDBfNyI+TGluZV9TeW1ib2w8L0E+KSwKKyAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczOV83Ij5MaW5lX1NpemU8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzM3XzE0Ij5WZXJ0aWNhbF9MaW5lPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIwXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NTFfMTMiPkdldF9LZXlzdHJva2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjBfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc1MV8yOCI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIzXzE2Ij5XZ2V0Y2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjNfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUyM18xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXZ2V0Y2gsICJ3Z2V0Y2giKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MjZfNyI+QzwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUyM18xNiI+V2dldGNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzUxXzI4Ij5XaW48L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUyNl83Ij5DPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OF80Ij5LZXlfTm9uZTwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUyNl83Ij5DPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzUxXzEzIj5HZXRfS2V5c3Ryb2tlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzYyXzE0Ij5VbmRvX0tleXN0cm9rZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzNV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzYyXzMwIj5LZXk8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzN18xNiI+VW5nZXRjaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzN18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTM3XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgVW5nZXRjaCwgInVuZ2V0Y2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUzN18xNiI+VW5nZXRjaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjJfMzAiPktleTwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjJfMTQiPlVuZG9fS2V5c3Ryb2tlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjdfMTMiPkhhc19LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDVfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2N18yMiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDdfMTYiPkhhc2tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU0N18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTQ3XzE2Ij5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEhhc2tleSwgImhhc19rZXkiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU0N18xNiI+SGFza2V5PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2N18yMiI+S2V5PC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkN1cnNlc19GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc2N18xMyI+SGFzX0tleTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc0XzEzIj5Jc19GdW5jdGlvbl9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NTdfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3NF8zMCI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1OV83Ij5MPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+ICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gKE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4XzQiPktleV9GMDwvQT4pICsKKyAgICAgICAgTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc4XzEyIj5GdW5jdGlvbl9LZXlfTnVtYmVyPC9BPidMYXN0KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc0XzMwIj5LZXk8L0E+ICZndDs9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4XzQiPktleV9GMDwvQT4pIDxiPmFuZDwvYj4gPGI+dGhlbjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3NF8zMCI+S2V5PC9BPiAmbHQ7PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81NTlfNyI+TDwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NzRfMTMiPklzX0Z1bmN0aW9uX0tleTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzgxXzEzIj5GdW5jdGlvbl9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NjlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4MV8yNyI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc4XzEyIj5GdW5jdGlvbl9LZXlfTnVtYmVyPC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NzRfMTMiPklzX0Z1bmN0aW9uX0tleTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4MV8yNyI+S2V5PC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc4XzEyIj5GdW5jdGlvbl9LZXlfTnVtYmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzgxXzI3Ij5LZXk8L0E+IC0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOThfNCI+S2V5X0YwPC9BPik7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzgxXzEzIj5GdW5jdGlvbl9LZXk8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4Nl8xMyI+RnVuY3Rpb25fS2V5X0NvZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODBfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4Nl8zMiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NzhfMTIiPkZ1bmN0aW9uX0tleV9OdW1iZXI8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzczXzEyIj5SZWFsX0tleV9Db2RlPC9BPgorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+IChOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OF80Ij5LZXlfRjA8L0E+KSArIE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4Nl8zMiI+S2V5PC9BPikpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODZfMTMiPkZ1bmN0aW9uX0tleV9Db2RlPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwMF8xNCI+U3RhbmRvdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODZfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwMF8yNCI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+ICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTg3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDFfMjQiPk9uPC9BPjwvRk9OVD4gIDogQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODlfMTYiPndzdGFuZG91dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4OV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTg5XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgd3N0YW5kb3V0LCAid3N0YW5kb3V0Iik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTFfMTYiPndzdGFuZGVuZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5MV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTkxXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgd3N0YW5kZW5kLCAid3N0YW5kZW5kIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk0XzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDFfMjQiPk9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTk0XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTg5XzE2Ij53c3RhbmRvdXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDBfMjQiPldpbjwvQT4pOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU5NF83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU5MV8xNiI+d3N0YW5kZW5kPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODAwXzI0Ij5XaW48L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU5NF83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwMF8xNCI+U3RhbmRvdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDZfMTQiPlN3aXRjaF9DaGFyYWN0ZXJfQXR0cmlidXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwN183Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDhfNyI+QXR0cjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDlfNyI+T248L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjExXzE2Ij5XYXR0cm9uPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjExXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTFfMTYiPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjEyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTFfMTYiPkNfQXR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzY0XzEyIj5DX0F0dHJUeXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXYXR0cm9uLCAid2F0dHJfb24iKTsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNF8xNiI+V2F0dHJvZmY8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYxNF8xNiI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MTRfMTYiPkNfQXR0cjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzY0XzEyIj5DX0F0dHJUeXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXYXR0cm9mZiwgIndhdHRyX29mZiIpOworICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbiBBZGEgd2UgdXNlIHRoZSBPbiBCb29sZWFuIHRvIGNvbnRyb2wgd2hldGhlciBvciBub3Qgd2Ugd2FudCB0bzwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBzd2l0Y2ggb24gb3Igb2ZmIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBzZXQuPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxOV83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjBfNyI+QUM8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDhfNyI+QXR0cjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODA5XzciPk9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjE5XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjExXzE2Ij5XYXR0cm9uPC9BPiAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwN183Ij5XaW48L0E+LCBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjIwXzciPkFDPC9BPikpOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYxOV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYxNF8xNiI+V2F0dHJvZmY8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MDdfNyI+V2luPC9BPiwgQXR0ckNoYXJfVG9fQXR0clR5cGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYyMF83Ij5BQzwvQT4pKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYxOV83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgwNl8xNCI+U3dpdGNoX0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MTdfMTQiPlNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MThfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgxOV83Ij5BdHRyPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MjBfNyI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzlfMTYiPldhdHRyc2V0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjM5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MzlfMTYiPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjM5XzE2Ij5DX0F0dHI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2F0dHJzZXQsICJ3YXR0cnNldCIpOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gPz8/IHdhdHRyX3NldDwvRU0+PC9GT05UPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjM5XzE2Ij5XYXR0cnNldDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgxOF83Ij5XaW48L0E+LAorICAgICAgICAgICAgICAgICAgIEF0dHJDaGFyX1RvX0F0dHJUeXBlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgQ2hhcmFjdGVyJ0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODIwXzciPkNvbG9yPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgxOV83Ij5BdHRyPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MTdfMTQiPlNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODI2XzEzIj5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1Ml8zOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODI3XzciPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY1NV8xNiI+V2F0dHJnZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY1NV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NTVfMTYiPkF0cjwvQT48L0ZPTlQ+IDogPGI+YWNjZXNzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjRfMTIiPkNfQXR0clR5cGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NTVfMTYiPkNvbDwvQT48L0ZPTlQ+IDogPGI+YWNjZXNzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjU4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NTVfMTYiPk9wdDwvQT48L0ZPTlQ+IDogU3lzdGVtLkFkZHJlc3MpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2F0dHJnZXQsICJ3YXR0cl9nZXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjFfNyI+QXR0cjwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzY0XzEyIj5DX0F0dHJUeXBlPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYyXzciPkNvbDwvQT48L0ZPTlQ+ICA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2M183Ij5SZXM8L0E+PC9GT05UPiAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjU1XzE2Ij5XYXR0cmdldDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgyN183Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NjFfNyI+QXR0cjwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjYyXzciPkNvbDwvQT4nPGI+QWNjZXNzPC9iPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLk51bGxfQWRkcmVzcyk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2NV83Ij5DaDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjYzXzciPlJlczwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzFfNCI+Q3Vyc2VzX09rPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjY1XzciPkNoPC9BPiA6PSBBdHRyVHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjYxXzciPkF0dHI8L0E+KTsKKyAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjY1XzciPkNoPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODI2XzEzIj5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3NV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODMyXzEzIj5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3NV8zOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODMzXzciPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc4XzE2Ij5XYXR0cmdldDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjc4XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3OF8xNiI+QXRyPC9BPjwvRk9OVD4gOiA8Yj5hY2Nlc3M8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODBfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3OF8xNiI+Q29sPC9BPjwvRk9OVD4gOiA8Yj5hY2Nlc3M8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3OF8xNiI+T3B0PC9BPjwvRk9OVD4gOiBTeXN0ZW0uQWRkcmVzcykgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXYXR0cmdldCwgIndhdHRyX2dldCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4NF83Ij5BdHRyPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjRfMTIiPkNfQXR0clR5cGU8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODVfNyI+Q29sPC9BPjwvRk9OVD4gIDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjg2XzciPlJlczwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82NzhfMTYiPldhdHRyZ2V0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODMzXzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY4NF83Ij5BdHRyPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82ODVfNyI+Q29sPC9BPic8Yj5BY2Nlc3M8L2I+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uTnVsbF9BZGRyZXNzKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjg4XzciPkNoPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82ODZfNyI+UmVzPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83MV80Ij5DdXJzZXNfT2s8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82ODhfNyI+Q2g8L0E+IDo9IEF0dHJUeXBlX1RvX0F0dHJDaGFyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82ODRfNyI+QXR0cjwvQT4pOworICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82ODhfNyI+Q2g8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODMyXzEzIj5HZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzOF8xNCI+U2V0X0NvbG9yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MzhfMjUiPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjk5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MzlfMjUiPlBhaXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwMV8xNiI+V3NldF9Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwMV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzAxXzE2Ij5XaW48L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzAyXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MDFfMTYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcwMV8xNiI+T3B0czwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82Ml8xMiI+Q19Wb2lkX1B0cjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV3NldF9Db2xvciwgIndjb2xvcl9zZXQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcwMV8xNiI+V3NldF9Db2xvcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzOF8yNSI+V2luPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzOV8yNSI+UGFpcjwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYyXzEyIj5DX1ZvaWRfUHRyPC9BPiAoU3lzdGVtLk51bGxfQWRkcmVzcykpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzgzOF8xNCI+U2V0X0NvbG9yPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ1XzE0Ij5DaGFuZ2VfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxNF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDZfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg0N183Ij5Db3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXIgOj0gLTE7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDhfNyI+QXR0cjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODQ5XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzE5XzE2Ij5XY2hnYXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTlfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcxOV8xNiI+V2luPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIwXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTlfMTYiPkNudDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcxOV8xNiI+QXR0cjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82NF8xMiI+Q19BdHRyVHlwZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIyXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTlfMTYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyM18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE5XzE2Ij5PcHRzPC9BPjwvRk9OVD4gIDogU3lzdGVtLkFkZHJlc3MgOj0gU3lzdGVtLk51bGxfQWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXY2hnYXQsICJ3Y2hnYXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjdfNyI+Q2g8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9CisgICAgICAgICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiA9Jmd0OyBDaGFyYWN0ZXInRmlyc3QsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDhfNyI+QXR0cjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE5XzE2Ij5XY2hnYXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDZfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg0N183Ij5Db3VudDwvQT4pLCBBdHRyQ2hhcl9Ub19BdHRyVHlwZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzI3XzciPkNoPC9BPiksCisgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg0OV83Ij5Db2xvcjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDVfMTQiPkNoYW5nZV9BdHRyaWJ1dGVzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU0XzE0Ij5DaGFuZ2VfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTVfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTZfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4nRmlyc3Q7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTdfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+J0ZpcnN0OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU4XzciPkNvdW50PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IEludGVnZXIgOj0gLTE7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTlfNyI+QXR0cjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzQyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg2MF83Ij5Db2xvcjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0KQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTVfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU2XzciPkxpbmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NTdfNyI+Q29sdW1uPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NDVfMTQiPkNoYW5nZV9BdHRyaWJ1dGVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODU1XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1OF83Ij5Db3VudDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1OV83Ij5BdHRyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODYwXzciPkNvbG9yPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg1NF8xNCI+Q2hhbmdlX0F0dHJpYnV0ZXM8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODcwXzE0Ij5CZWVwPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzUxXzE2Ij5CZWVwZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEJlZXBlciwgImJlZXAiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc1MV8xNiI+QmVlcGVyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzBfMTQiPkJlZXA8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84NzVfMTQiPkZsYXNoX1NjcmVlbjwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2MV8xNiI+Rmxhc2g8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEZsYXNoLCAiZmxhc2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc2MV8xNiI+Rmxhc2g8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg3NV8xNCI+Rmxhc2hfU2NyZWVuPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg4Nl8xNCI+U2V0X0NicmVha19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzY5XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84ODZfMzEiPlN3aXRjaE9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NzFfMTYiPkNicmVhazwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQ2JyZWFrLCAiY2JyZWFrIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NzNfMTYiPk5vQ2JyZWFrPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOb0NicmVhaywgIm5vY2JyZWFrIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzc2XzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84ODZfMzEiPlN3aXRjaE9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzc2XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzcxXzE2Ij5DYnJlYWs8L0E+OworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc3Nl83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc3M18xNiI+Tm9DYnJlYWs8L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzc2XzciPkVycjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODg2XzE0Ij5TZXRfQ2JyZWFrX01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzg4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OTJfMTQiPlNldF9SYXdfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4OF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODkyXzI4Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzkwXzE2Ij5SYXc8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFJhdywgInJhdyIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzkyXzE2Ij5Ob1JhdzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTm9SYXcsICJub3JhdyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc5NV83Ij5FcnI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODkyXzI4Ij5Td2l0Y2hPbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc5NV83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc5MF8xNiI+UmF3PC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83OTVfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83OTJfMTYiPk5vUmF3PC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc5NV83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg5Ml8xNCI+U2V0X1Jhd19Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODk4XzE0Ij5TZXRfRWNob19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODA3XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OThfMjkiPlN3aXRjaE9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDlfMTYiPkVjaG88L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEVjaG8sICJlY2hvIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTFfMTYiPk5vRWNobzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTm9FY2hvLCAibm9lY2hvIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE0XzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OThfMjkiPlN3aXRjaE9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODE0XzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODA5XzE2Ij5FY2hvPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MTRfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MTFfMTYiPk5vRWNobzwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MTRfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84OThfMTQiPlNldF9FY2hvX01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MDRfMTQiPlNldF9NZXRhX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjZfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkwNF8yOSI+V2luPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyN18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTA1XzI5Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI5XzE2Ij5NZXRhPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI5XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MjlfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODI5XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MjlfMTYiPk1vZGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE1ldGEsICJtZXRhIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MjlfMTYiPk1ldGE8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MDRfMjkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTA1XzI5Ij5Td2l0Y2hPbjwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTA0XzE0Ij5TZXRfTWV0YV9Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgzN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTEwXzE0Ij5TZXRfS2V5UGFkX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzdfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxMF8zMSI+V2luPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODM4XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTFfMzEiPlN3aXRjaE9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDBfMTYiPktleXBhZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0MF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODQwXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0MF8zNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODQwXzE2Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBLZXlwYWQsICJrZXlwYWQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg0MF8xNiI+S2V5cGFkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTEwXzMxIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxMV8zMSI+U3dpdGNoT248L0E+KSkpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxMF8xNCI+U2V0X0tleVBhZF9Nb2RlPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MTVfMTMiPkdldF9LZXlQYWRfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0OF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTE1XzMwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1MV8xNiI+SXNfS2V5cGFkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODUxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTFfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSXNfS2V5cGFkLCAiaXNfa2V5cGFkIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg1MV8xNiI+SXNfS2V5cGFkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTE1XzMwIj5XaW48L0E+KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkxNV8xMyI+R2V0X0tleVBhZF9Nb2RlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTIzXzE0Ij5IYWxmX0RlbGF5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU3XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjNfMjYiPkFtb3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkyMF85Ij5IYWxmX0RlbGF5X0Ftb3VudDwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg1OV8xNiI+SGFsZmRlbGF5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU5XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTlfMTYiPkFtb3VudDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSGFsZmRlbGF5LCAiaGFsZmRlbGF5Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTlfMTYiPkhhbGZkZWxheTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjNfMjYiPkFtb3VudDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjNfMTQiPkhhbGZfRGVsYXk8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODY3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjhfMTQiPlNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjlfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTMwXzciPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3MV8xNiI+SW50cmZsdXNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODcxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NzFfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzFfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg3MV8xNiI+TW9kZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgSW50cmZsdXNoLCAiaW50cmZsdXNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NzFfMTYiPkludHJmbHVzaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkyOV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzMF83Ij5Nb2RlPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjhfMTQiPlNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzNV8xNCI+U2V0X1F1ZXVlX0ludGVycnVwdF9Nb2RlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODgwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzNl83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTM3XzciPkZsdXNoPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODgzXzE3Ij5RaWZsdXNoPC9BPjwvRk9OVD47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUWlmbHVzaCwgInFpZmx1c2giKTsKKyAgICAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODVfMTciPk5vX1FpZmx1c2g8L0E+PC9GT05UPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOb19RaWZsdXNoLCAibm9xaWZsdXNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MzZfNyI+V2luPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzN183Ij5GbHVzaDwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg4M18xNyI+UWlmbHVzaDwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODg1XzE3Ij5Ob19RaWZsdXNoPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MzVfMTQiPlNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0M18xNCI+U2V0X05vRGVsYXlfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NDRfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ1XzciPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MDJfMTYiPk5vZGVsYXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MDJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkwMl8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkwMl8zOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTAyXzE2Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOb2RlbGF5LCAibm9kZWxheSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTAyXzE2Ij5Ob2RlbGF5PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ0XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ1XzciPk1vZGU8L0E+KSkpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0M18xNCI+U2V0X05vRGVsYXlfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1Ml8xNCI+U2V0X1RpbWVvdXRfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxMF8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTUyXzMyIj5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxMV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTUzXzMyIj5Nb2RlPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NDlfOSI+VGltZW91dF9Nb2RlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxMl8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTU0XzMyIj5BbW91bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBOYXR1cmFsKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE0XzE3Ij5XdGltZW91dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTE0XzE3Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE0XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTRfMTciPkFtb3VudDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFd0aW1lb3V0LCAid3RpbWVvdXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTdfNyI+VGltZTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmNhc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk1M18zMiI+TW9kZTwvQT4gPGI+aXM8L2I+CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NDlfMjYiPkJsb2NraW5nPC9BPiAgICAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTE3XzciPlRpbWU8L0E+IDo9IC0xOworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ5XzM2Ij5Ob25fQmxvY2tpbmc8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxN183Ij5UaW1lPC9BPiA6PSAwOworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ5XzUwIj5EZWxheWVkPC9BPiAgICAgID0mZ3Q7CisgICAgICAgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTU0XzMyIj5BbW91bnQ8L0E+ID0gMCA8Yj50aGVuPC9iPgorICAgICAgICAgICAgICAgPGI+cmFpc2U8L2I+IENvbnN0cmFpbnRfRXJyb3I7CisgICAgICAgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxN183Ij5UaW1lPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTU0XzMyIj5BbW91bnQ8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+Y2FzZTwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTRfMTciPld0aW1lb3V0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTUyXzMyIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTdfNyI+VGltZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NTJfMTQiPlNldF9UaW1lb3V0X01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTMxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NjRfMTQiPlNldF9Fc2NhcGVfVGltZXJfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NjVfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzM183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NjZfNyI+VGltZXJfT2ZmPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM1XzE2Ij5Ob3RpbWVvdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkzNV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzNV80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTM1XzE2Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOb3RpbWVvdXQsICJub3RpbWVvdXQiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkzNV8xNiI+Tm90aW1lb3V0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY1XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY2XzciPlRpbWVyX09mZjwvQT4pKSkKKyAgICAgICAgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY0XzE0Ij5TZXRfRXNjYXBlX1RpbWVyX01vZGU8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NzVfMTQiPlNldF9OTF9Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NzVfMjciPlN3aXRjaE9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDdfMTYiPk5MPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOTCwgIm5sIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDlfMTYiPk5vTkw8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE5vTkwsICJub25sIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTUyXzciPkVycjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85NzVfMjciPlN3aXRjaE9uPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTUyXzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTQ3XzE2Ij5OTDwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTUyXzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTQ5XzE2Ij5Ob05MPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk1Ml83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk3NV8xNCI+U2V0X05MX01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODFfMTQiPkNsZWFyX09uX05leHRfVXBkYXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4Ml83Ij5XaW48L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NjZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTgzXzciPkRvX0NsZWFyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NjhfMTYiPkNsZWFyX09rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NjhfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY4XzM4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NjhfMTYiPkZsYWc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENsZWFyX09rLCAiY2xlYXJvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTY4XzE2Ij5DbGVhcl9PazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4Ml83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4M183Ij5Eb19DbGVhcjwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTgxXzE0Ij5DbGVhcl9Pbl9OZXh0X1VwZGF0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NzZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4OF8xNCI+VXNlX0luc2VydF9EZWxldGVfTGluZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODlfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OTBfNyI+RG9fSWRsPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85ODBfMTYiPklETF9PazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4MF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTgwXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4MF8zNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTgwXzE2Ij5GbGFnPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJRExfT2ssICJpZGxvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTgwXzE2Ij5JRExfT2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODlfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OTBfNyI+RG9fSWRsPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85ODhfMTQiPlVzZV9JbnNlcnRfRGVsZXRlX0xpbmU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTg4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OTVfMTQiPlVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OTZfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85OTdfNyI+RG9fSWRjPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTkyXzE3Ij5JRENfT2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk5Ml8xNyI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTJfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk5Ml8xNyI+RmxhZzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4pOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIElEQ19PaywgImlkY29rIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk5Ml8xNyI+SURDX09rPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTk2XzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTk3XzciPkRvX0lkYzwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk5NV8xNCI+VXNlX0luc2VydF9EZWxldGVfQ2hhcmFjdGVyPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwMl8xNCI+TGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDAzXzciPldpbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwNF83Ij5Eb19MZWF2ZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwMl8xNiI+TGVhdmVfT2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDAyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDAyXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDJfMzgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMDJfMTYiPkZsYWc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIExlYXZlX09rLCAibGVhdmVvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAwMl8xNiI+TGVhdmVfT2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDAzXzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IChCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwNF83Ij5Eb19MZWF2ZTwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwMl8xNCI+TGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDEwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDA5XzE0Ij5JbW1lZGlhdGVfVXBkYXRlX01vZGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDExXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTBfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDEyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTFfNyI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gRmFsc2UpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDE0XzE3Ij5JbW1lZG9rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxNF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAxNF8xNyI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMTRfNDAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMTRfMTciPk1vZGU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KTsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJbW1lZG9rLCAiaW1tZWRvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDE0XzE3Ij5JbW1lZG9rPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAxMF83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTFfNyI+TW9kZTwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMDlfMTQiPkltbWVkaWF0ZV9VcGRhdGVfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDIwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE2XzE0Ij5BbGxvd19TY3JvbGxpbmc8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDIxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTdfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE4XzciPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI0XzE2Ij5TY3JvbGxvazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMjRfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDI0XzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDI0XzE2Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTY3JvbGxvaywgInNjcm9sbG9rIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDI0XzE2Ij5TY3JvbGxvazwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTdfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDE4XzciPk1vZGU8L0E+KSkpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTZfMTQiPkFsbG93X1Njcm9sbGluZzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMzJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjJfMTMiPlNjcm9sbGluZ19BbGxvd2VkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzMl8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyMl8zMiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzNV8xNiI+SXNfU2Nyb2xsX09rPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAzNV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAzNV8xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBJc19TY3JvbGxfT2ssICJpc19zY3JvbGxvayIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDM1XzE2Ij5Jc19TY3JvbGxfT2s8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDIyXzMyIj5XaW48L0E+KSAvPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjJfMTMiPlNjcm9sbGluZ19BbGxvd2VkPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjdfMTQiPlNldF9TY3JvbGxfUmVnaW9uPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDI4XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyOV83Ij5Ub3BfTGluZTwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQ0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMzBfNyI+Qm90dG9tX0xpbmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0Nl8xNiI+V3NldHNjcnJlZzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNDZfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDZfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0N18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA0Nl8xNiI+TGluPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0OF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA0Nl8xNiI+Q29sPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXc2V0c2NycmVnLCAid3NldHNjcnJlZyIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA0Nl8xNiI+V3NldHNjcnJlZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjhfNyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMjlfNyI+VG9wX0xpbmU8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMzBfNyI+Qm90dG9tX0xpbmU8L0E+KSkKKyAgICAgICAgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyN18xNCI+U2V0X1Njcm9sbF9SZWdpb248L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNDBfMTQiPlVwZGF0ZV9TY3JlZW48L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDU5XzE2Ij5Eb19VcGRhdGU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIERvX1VwZGF0ZSwgImRvdXBkYXRlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDU5XzE2Ij5Eb19VcGRhdGU8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNDBfMTQiPlVwZGF0ZV9TY3JlZW48L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA0NV8xNCI+UmVmcmVzaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNjdfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNDVfMjMiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDY5XzE2Ij5XcmVmcmVzaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNjlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNjlfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV3JlZnJlc2gsICJ3cmVmcmVzaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA2OV8xNiI+V3JlZnJlc2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQ1XzIzIj5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQ1XzE0Ij5SZWZyZXNoPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTJfMTQiPlJlZnJlc2hfV2l0aG91dF9VcGRhdGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDc4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTNfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODBfMTYiPldub3V0cmVmcmVzaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODBfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwODBfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV25vdXRyZWZyZXNoLCAid25vdXRyZWZyZXNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDgwXzE2Ij5Xbm91dHJlZnJlc2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDUzXzciPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTJfMTQiPlJlZnJlc2hfV2l0aG91dF9VcGRhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA1OV8xNCI+UmVkcmF3PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4OF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA1OV8yMiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOTBfMTYiPlJlZHJhd3dpbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOTBfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwOTBfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBSZWRyYXd3aW4sICJyZWRyYXd3aW4iKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwOTBfMTYiPlJlZHJhd3dpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTlfMjIiPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNTlfMTQiPlJlZHJhdzwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDk4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDYzXzE0Ij5SZWRyYXc8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDk5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNjNfMjIiPldpbjwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDY0XzIyIj5CZWdpbl9MaW5lPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2NV8yMiI+TGluZV9Db3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFBvc2l0aXZlKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTAzXzE2Ij5XcmVkcmF3bG48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTAzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTAzXzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwM180MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEwM18xNiI+Rmlyc3Q8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDNfNTYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMDNfMTYiPkNudDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV3JlZHJhd2xuLCAid3JlZHJhd2xuIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTAzXzE2Ij5XcmVkcmF3bG48L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDYzXzIyIj5XaW48L0E+LAorICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2NF8yMiI+QmVnaW5fTGluZTwvQT4pLAorICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA2NV8yMiI+TGluZV9Db3VudDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDYzXzE0Ij5SZWRyYXc8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA3NF8xNCI+RXJhc2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTE1XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDc0XzIxIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExN18xNiI+V2VyYXNlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTExN18xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXZXJhc2UsICJ3ZXJhc2UiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMTdfMTYiPldlcmFzZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNzRfMjEiPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwNzRfMTQiPkVyYXNlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODBfMTQiPkNsZWFyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyNV8yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA4MV83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyN18xNiI+V2NsZWFyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyN18yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTEyN18xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXY2xlYXIsICJ3Y2xlYXIiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMjdfMTYiPldjbGVhcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODFfNyI+V2luPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA4MF8xNCI+Q2xlYXI8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA4N18xNCI+Q2xlYXJfVG9fRW5kX09mX1NjcmVlbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMzVfMzgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODhfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMzdfMTYiPldjbGVhcmJvdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMzdfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMzdfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2NsZWFyYm90LCAid2NscnRvYm90Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTM3XzE2Ij5XY2xlYXJib3Q8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDg4XzciPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODdfMTQiPkNsZWFyX1RvX0VuZF9PZl9TY3JlZW48L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA5NF8xNCI+Q2xlYXJfVG9fRW5kX09mX0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTQ1XzM2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDk1XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTQ3XzE2Ij5XY2xlYXJlb2w8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTQ3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTQ3XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdjbGVhcmVvbCwgIndjbHJ0b2VvbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE0N18xNiI+V2NsZWFyZW9sPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA5NV83Ij5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDk0XzE0Ij5DbGVhcl9Ub19FbmRfT2ZfTGluZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEwOF8xNCI+U2V0X0JhY2tncm91bmQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTU2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMDlfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExMF83Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1OV8xNyI+V0JhY2tncm91bmQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTU5XzMwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTU5XzE3Ij5XPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTU5XzQ1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTU5XzE3Ij5DaDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KTsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXQmFja2dyb3VuZCwgIndia2dkc2V0Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNTlfMTciPldCYWNrZ3JvdW5kPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEwOV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExMF83Ij5DaDwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEwOF8xNCI+U2V0X0JhY2tncm91bmQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExNl8xNCI+Q2hhbmdlX0JhY2tncm91bmQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTY2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMTdfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExOF83Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTY5XzE2Ij5XQ2hhbmdlQmtnZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNjlfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNjlfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2OV80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE2OV8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdDaGFuZ2VCa2dkLCAid2JrZ2QiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNjlfMTYiPldDaGFuZ2VCa2dkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExN183Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTExOF83Ij5DaDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTE2XzE0Ij5DaGFuZ2VfQmFja2dyb3VuZDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNzdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMjVfMTMiPkdldF9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE3N18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEyNV8yOSI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODBfMTYiPldnZXRia2dkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE4MF8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdnZXRia2dkLCAiZ2V0YmtnZCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE4MF8xNiI+V2dldGJrZ2Q8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTI1XzI5Ij5XaW48L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMjVfMTMiPkdldF9CYWNrZ3JvdW5kPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTg2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUyXzE0Ij5DaGFuZ2VfTGluZXNfU3RhdHVzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4Nl8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1Ml8zNSI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODdfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTNfMzUiPlN0YXJ0PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTg4XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTU0XzM1Ij5Db3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFBvc2l0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4OV8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1NV8zNSI+U3RhdGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTkxXzE2Ij5XdG91Y2hsbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOTFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExOTFfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOTJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExOTFfMTYiPlN0YTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTkzXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTkxXzE2Ij5DbnQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE5MV8xNiI+Q2hnPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXdG91Y2hsbiwgInd0b3VjaGxuIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTkxXzE2Ij5XdG91Y2hsbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTJfMzUiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUzXzM1Ij5TdGFydDwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1NF8zNSI+Q291bnQ8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNTVfMzUiPlN0YXRlPC9BPikpKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUyXzE0Ij5DaGFuZ2VfTGluZXNfU3RhdHVzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDFfMTQiPlRvdWNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIwM18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0MV8yMSI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIwNV83Ij5ZPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIwNl83Ij5YPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDFfMjEiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMDVfNyI+WTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMDZfNyI+WDwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE1Ml8xNCI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDFfMjEiPldpbjwvQT4sIDAsIFBvc2l0aXZlICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjA1XzciPlk8L0E+KSwgVHJ1ZSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDFfMTQiPlRvdWNoPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMzZfMTQiPlVudG91Y2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjEyXzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTM2XzIzIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjE0XzciPlk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjE1XzciPlg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjhfMTQiPkdldF9TaXplPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEzNl8yMyI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIxNF83Ij5ZPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIxNV83Ij5YPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUyXzE0Ij5DaGFuZ2VfTGluZXNfU3RhdHVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTEzNl8yMyI+V2luPC9BPiwgMCwgUG9zaXRpdmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMTRfNyI+WTwvQT4pLCBGYWxzZSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMzZfMTQiPlVudG91Y2g8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIyMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0NV8xNCI+VG91Y2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjIxXzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQ1XzIxIj5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMjJfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNDZfMjEiPlN0YXJ0PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIyM18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0N18yMSI+Q291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBQb3NpdGl2ZSkKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUyXzE0Ij5DaGFuZ2VfTGluZXNfU3RhdHVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0NV8yMSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE0Nl8yMSI+U3RhcnQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQ3XzIxIj5Db3VudDwvQT4sIFRydWUpOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTQ1XzE0Ij5Ub3VjaDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMjlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjBfMTMiPklzX1RvdWNoZWQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjMwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjBfMjUiPldpbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjMxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjFfMjUiPkxpbmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzM18xNiI+V0xpbmVUb3VjaGVkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzM18zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzM18xNiI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjMzXzQyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjMzXzE2Ij5MPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXTGluZVRvdWNoZWQsICJpc19saW5ldG91Y2hlZCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIzM18xNiI+V0xpbmVUb3VjaGVkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE2MF8yNSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjFfMjUiPkxpbmU8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI3XzQiPkN1cnNlc19Cb29sX0ZhbHNlPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE2MF8xMyI+SXNfVG91Y2hlZDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNDNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjVfMTMiPklzX1RvdWNoZWQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQ0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjVfMjUiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQ2XzE2Ij5XV2luVG91Y2hlZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNDZfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNDZfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV1dpblRvdWNoZWQsICJpc193aW50b3VjaGVkIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjQ2XzE2Ij5XV2luVG91Y2hlZDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjVfMjUiPldpbjwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyN180Ij5DdXJzZXNfQm9vbF9GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNjVfMTMiPklzX1RvdWNoZWQ8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzRfMTQiPkNvcHk8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjU3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzVfNyI+U291cmNlX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc2XzciPkRlc3RpbmF0aW9uX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3N183Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc4XzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3OV83Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTgwXzciPkRlc3RpbmF0aW9uX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4MV83Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTgyXzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4M183Ij5Ob25fRGVzdHJ1Y3RpdmVfTW9kZTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjdfMTYiPkNvcHl3aW48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjY3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjY3XzE2Ij5TcmM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjhfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNjdfMTYiPkRzdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI2OV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+U3RyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+U2xjPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+RHRyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3Ml8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+RGxjPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3M18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+RGJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3NF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+RHJjPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3NV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+TmRtPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDb3B5d2luLCAiY29weXdpbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2N18xNiI+Q29weXdpbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzVfNyI+U291cmNlX1dpbmRvdzwvQT4sCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc2XzciPkRlc3RpbmF0aW9uX1dpbmRvdzwvQT4sCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3N183Ij5Tb3VyY2VfVG9wX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzhfNyI+U291cmNlX0xlZnRfQ29sdW1uPC9BPiksCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE3OV83Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPiksCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4MF83Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODFfNyI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODJfNyI+RGVzdGluYXRpb25fUmlnaHRfQ29sdW1uPC9BPiksCisgICAgICAgICAgICAgICAgICBCb29sZWFuJ1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4M183Ij5Ob25fRGVzdHJ1Y3RpdmVfTW9kZTwvQT4pCisgICAgICAgICAgICAgICAgKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTc0XzE0Ij5Db3B5PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODhfMTQiPk92ZXJ3cml0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4OF8yNSI+U291cmNlX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTg5XzI1Ij5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjk2XzE2Ij5PdmVyd3JpdGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjk2XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjk2XzE2Ij5TcmM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5Nl80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI5Nl8xNiI+RHN0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE92ZXJ3cml0ZSwgIm92ZXJ3cml0ZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI5Nl8xNiI+T3ZlcndyaXRlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE4OF8yNSI+U291cmNlX1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODlfMjUiPkRlc3RpbmF0aW9uX1dpbmRvdzwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODhfMTQiPk92ZXJ3cml0ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzA0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTk0XzE0Ij5PdmVybGF5PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTk0XzIzIj5Tb3VyY2VfV2luZG93PC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzA2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExOTVfMjMiPkRlc3RpbmF0aW9uX1dpbmRvdzwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDhfMTYiPk92ZXJsYXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzA4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzA4XzE2Ij5TcmM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwOF8zOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMwOF8xNiI+RHN0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE92ZXJsYXksICJvdmVybGF5Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzA4XzE2Ij5PdmVybGF5PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE5NF8yMyI+U291cmNlX1dpbmRvdzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExOTVfMjMiPkRlc3RpbmF0aW9uX1dpbmRvdzwvQT4pID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExOTRfMTQiPk92ZXJsYXk8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxN18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNF8xNCI+SW5zZXJ0X0RlbGV0ZV9MaW5lczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNV83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzE5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDZfNyI+TGluZXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyICAgICAgIDo9IDEpIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkZWZhdWx0IGlzIHRvIGluc2VydCBvbmUgbGluZSBhYm92ZTwvRU0+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzIxXzE2Ij5XaW5zZGVsbG48L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzIxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzIxXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OyA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMjFfMzkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMjFfMTYiPk48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdpbnNkZWxsbiwgIndpbnNkZWxsbiIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMyMV8xNiI+V2luc2RlbGxuPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNl83Ij5MaW5lczwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjA0XzE0Ij5JbnNlcnRfRGVsZXRlX0xpbmVzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMjlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMTJfMTQiPkRlbGV0ZV9MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyOV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIxMl8yNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIwNF8xNCI+SW5zZXJ0X0RlbGV0ZV9MaW5lczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMTJfMjciPldpbjwvQT4sIC0xKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIxMl8xNCI+RGVsZXRlX0xpbmU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMzNV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIxOF8xNCI+SW5zZXJ0X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzM1XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjE4XzI3Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgIDxiPmlzPC9iPgorICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjA0XzE0Ij5JbnNlcnRfRGVsZXRlX0xpbmVzPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIxOF8yNyI+V2luPC9BPiwgMSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMThfMTQiPkluc2VydF9MaW5lPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMjhfMTQiPkdldF9TaXplPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI5XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzMF83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzMV83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0N18xNiI+R2V0TWF4WTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNDdfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0TWF4WSwgImdldG1heHkiKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1MF8xNiI+R2V0TWF4WDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNTBfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNTBfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0TWF4WCwgImdldG1heHgiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzUzXzciPlk8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzQ3XzE2Ij5HZXRNYXhZPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOV83Ij5XaW48L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI0XzQiPk9mZnNldF9YWTwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzU1XzciPlg8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzUwXzE2Ij5HZXRNYXhYPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIyOV83Ij5XaW48L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI0XzQiPk9mZnNldF9YWTwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjMwXzciPk51bWJlcl9PZl9MaW5lczwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNTNfNyI+WTwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzMV83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNTVfNyI+WDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzYyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM2XzE0Ij5HZXRfV2luZG93X1Bvc2l0aW9uPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM3XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzY0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzhfNyI+VG9wX0xlZnRfTGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzlfNyI+VG9wX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNjdfMTYiPkdldEJlZ1k8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzY3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzY3XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldEJlZ1ksICJnZXRiZWd5Iik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNzBfMTYiPkdldEJlZ1g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzcwXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzcwXzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldEJlZ1gsICJnZXRiZWd4Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3M183Ij5ZPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzY3XzE2Ij5HZXRCZWdZPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzN183Ij5XaW48L0E+KSk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNzRfNyI+WDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM3MF8xNiI+R2V0QmVnWDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzdfNyI+V2luPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM4XzciPlRvcF9MZWZ0X0xpbmU8L0E+ICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNzNfNyI+WTwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTIzOV83Ij5Ub3BfTGVmdF9Db2x1bW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNzRfNyI+WDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjM2XzE0Ij5HZXRfV2luZG93X1Bvc2l0aW9uPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzODBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDRfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzgxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDVfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzgyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDZfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzgzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDdfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzODVfMTYiPkdldEN1clk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzg1XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzg1XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldEN1clksICJnZXRjdXJ5Iik7CisKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzODhfMTYiPkdldEN1clg8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzg4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzg4XzE2Ij5XPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEdldEN1clgsICJnZXRjdXJ4Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5MV83Ij5ZPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzg1XzE2Ij5HZXRDdXJZPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NV83Ij5XaW48L0E+KSk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOTJfNyI+WDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM4OF8xNiI+R2V0Q3VyWDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNDVfNyI+V2luPC9BPikpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ2XzciPkxpbmU8L0E+ICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzOTFfNyI+WTwvQT4pOworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0N183Ij5Db2x1bW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzOTJfNyI+WDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjQ0XzE0Ij5HZXRfQ3Vyc29yX1Bvc2l0aW9uPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTJfMTQiPkdldF9PcmlnaW5fUmVsYXRpdmVfVG9fUGFyZW50PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjUzXzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTRfNyI+VG9wX0xlZnRfTGluZTwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDAxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTVfNyI+VG9wX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MDJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1Nl83Ij5Jc19Ob3RfQV9TdWJ3aW5kb3c8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gQm9vbGVhbikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwNF8xNiI+R2V0UGFyWTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MDRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MDRfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0UGFyWSwgImdldHBhcnkiKTsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwN18xNiI+R2V0UGFyWDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MDdfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MDdfMTYiPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgR2V0UGFyWCwgImdldHBhcngiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDEwXzciPlk8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDA0XzE2Ij5HZXRQYXJZPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1M183Ij5XaW48L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQxMV83Ij5YPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQwN18xNiI+R2V0UGFyWDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTNfNyI+V2luPC9BPik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDEwXzciPlk8L0E+ID0gLTEgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTRfNyI+VG9wX0xlZnRfTGluZTwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPidMYXN0OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1NV83Ij5Ub3BfTGVmdF9Db2x1bW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4nTGFzdDsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTZfNyI+SXNfTm90X0FfU3Vid2luZG93PC9BPiA6PSBUcnVlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNTRfNyI+VG9wX0xlZnRfTGluZTwvQT4gICA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQxMF83Ij5ZPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjU1XzciPlRvcF9MZWZ0X0NvbHVtbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQxMV83Ij5YPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjU2XzciPklzX05vdF9BX1N1YndpbmRvdzwvQT4gOj0gRmFsc2U7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1Ml8xNCI+R2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQ8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyNF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI2N18xMyI+TmV3X1BhZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNjdfMjIiPkxpbmVzPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyNV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI2OF8yMiI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDI3XzE2Ij5OZXdwYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDI3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDI3XzE2Ij5MaW5lczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyN18zOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQyN18xNiI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOZXdwYWQsICJuZXdwYWQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDMwXzciPlc8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MzBfNyI+VzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQyN18xNiI+TmV3cGFkPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNjdfMjIiPkxpbmVzPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjY4XzIyIj5Db2x1bW5zPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MzBfNyI+VzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQzMF83Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI2N18xMyI+TmV3X1BhZDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MzlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzNfMTMiPlN1Yl9QYWQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzRfNyI+UGFkPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzVfNyI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI3Nl83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzdfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc4XzciPkZpcnN0X0NvbHVtbl9Qb3NpdGlvbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDZfMTYiPlN1YnBhZDwvQT48L0ZPTlQ+CisgICAgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDdfMTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDZfMTYiPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0OF8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0Nl8xNiI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0OV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0Nl8xNiI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ1MF8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0Nl8xNiI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ1MV8xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0Nl8xNiI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFN1YnBhZCwgInN1YnBhZCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NTRfNyI+VzwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ1NF83Ij5XPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDQ2XzE2Ij5TdWJwYWQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjc0XzciPlBhZDwvQT4sCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzVfNyI+TnVtYmVyX09mX0xpbmVzPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzZfNyI+TnVtYmVyX09mX0NvbHVtbnM8L0E+KSwKKyAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI3N183Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzhfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPikpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NTRfNyI+VzwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81OF80Ij5OdWxsX1dpbmRvdzwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ1NF83Ij5XPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI3M18xMyI+U3ViX1BhZDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDY3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjgzXzE0Ij5SZWZyZXNoPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ2OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg0XzciPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4NV83Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg2XzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4N183Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg4XzciPkRlc3RpbmF0aW9uX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4OV83Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjkwXzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzZfMTYiPlByZWZyZXNoPC9BPjwvRk9OVD4KKyAgICAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3N18xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ3Nl8xNiI+UGFkPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDc4XzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDc5XzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2Ij5Tb3VyY2VfTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDgwXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDgxXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDgyXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDgzXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDc2XzE2Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFByZWZyZXNoLCAicHJlZnJlc2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NzZfMTYiPlByZWZyZXNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI4NF83Ij5QYWQ8L0E+LAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg1XzciPlNvdXJjZV9Ub3BfUm93PC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODZfNyI+U291cmNlX0xlZnRfQ29sdW1uPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODdfNyI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjg4XzciPkRlc3RpbmF0aW9uX0xlZnRfQ29sdW1uPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyODlfNyI+RGVzdGluYXRpb25fQm90dG9tX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjkwXzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjgzXzE0Ij5SZWZyZXNoPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOTVfMTQiPlJlZnJlc2hfV2l0aG91dF9VcGRhdGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOTZfNyI+UGFkPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk3XzciPlNvdXJjZV9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOThfNyI+U291cmNlX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk5XzciPkRlc3RpbmF0aW9uX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTAyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDBfNyI+RGVzdGluYXRpb25fTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwM183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzAxXzciPkRlc3RpbmF0aW9uX0JvdHRvbV9Sb3c8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTA0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDJfNyI+RGVzdGluYXRpb25fUmlnaHRfQ29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwNl8xNiI+UG5vdXRyZWZyZXNoPC9BPjwvRk9OVD4KKyAgICAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwN18xMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+UGFkPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTA4XzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA2XzE2Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTA5XzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA2XzE2Ij5Tb3VyY2VfTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTEwXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA2XzE2Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTExXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA2XzE2Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTEyXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA2XzE2Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTEzXzEwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA2XzE2Ij5EZXN0aW5hdGlvbl9SaWdodF9Db2x1bW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFBub3V0cmVmcmVzaCwgInBub3V0cmVmcmVzaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwNl8xNiI+UG5vdXRyZWZyZXNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5Nl83Ij5QYWQ8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5N183Ij5Tb3VyY2VfVG9wX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI5OF83Ij5Tb3VyY2VfTGVmdF9Db2x1bW48L0E+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOTlfNyI+RGVzdGluYXRpb25fVG9wX1JvdzwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwMF83Ij5EZXN0aW5hdGlvbl9MZWZ0X0NvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwMV83Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPiksCisgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzAyXzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjk1XzE0Ij5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDdfMTQiPkFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzA4XzciPlBhZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwOV83Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTMxXzE2Ij5QZWNob2NoYXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTMxXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTMxXzE2Ij5QYWQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzMV80MSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUzMV8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFBlY2hvY2hhciwgInBlY2hvY2hhciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUzMV8xNiI+UGVjaG9jaGFyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwOF83Ij5QYWQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMwOV83Ij5DaDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzA3XzE0Ij5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTQwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzEyXzE0Ij5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NDFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMxM183Ij5QYWQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTQyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMTRfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMDdfMTQiPkFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0PC9BPgorICAgICAgICAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMxM183Ij5QYWQ8L0E+LAorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPicoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU2XzEwIj5DaDwvQT4gICAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMxNF83Ij5DaDwvQT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+J0ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+KSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMTJfMTQiPkFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTUyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzIyXzE0Ij5TY3JvbGw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTUyXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzIyXzIyIj5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1M18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMyM18yMiI+QW1vdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAxKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTU1XzE2Ij5Xc2NybDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NTVfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NTVfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTU1XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTU1XzE2Ij5OPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXc2NybCwgIndzY3JsIik7CisKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NTVfMTYiPldzY3JsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMyMl8yMiI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMjNfMjIiPkFtb3VudDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzIyXzE0Ij5TY3JvbGw8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMzNF8xNCI+RGVsZXRlX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NjVfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMzRfMzIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTY3XzE2Ij5XZGVsY2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTY3XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTY3XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgV2RlbGNoLCAid2RlbGNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTY3XzE2Ij5XZGVsY2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzM0XzMyIj5XaW48L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzM0XzE0Ij5EZWxldGVfQ2hhcmFjdGVyPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMzlfMTQiPkRlbGV0ZV9DaGFyYWN0ZXI8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTc2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNDBfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM0MV83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU3OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzQyXzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1ODBfMTYiPk12d2RlbGNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU4MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU4MF8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU4MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU4MF8xNiI+TGluPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1ODJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1ODBfMTYiPkNvbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTXZ3ZGVsY2gsICJtdndkZWxjaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU4MF8xNiI+TXZ3ZGVsY2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzQwXzciPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzQxXzciPkxpbmU8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNDJfNyI+Q29sdW1uPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMzlfMTQiPkRlbGV0ZV9DaGFyYWN0ZXI8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU5MF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM1Ml8xMyI+UGVlazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OTBfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNTJfMTkiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTkzXzE2Ij5XaW5jaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OTNfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1OTNfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXaW5jaCwgIndpbmNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gQ2h0eXBlX1RvX0F0dHJDaGFyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTkzXzE2Ij5XaW5jaDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNTJfMTkiPldpbjwvQT4pKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM1Ml8xMyI+UGVlazwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OTlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNThfMTMiPlBlZWs8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjAwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNTlfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzYwXzciPkxpbmU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MDJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM2MV83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjA0XzE2Ij5NdndpbmNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYwNF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwNF8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjA1XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjA0XzE2Ij5MaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjA2XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjA0XzE2Ij5Db2w8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE12d2luY2gsICJtdndpbmNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gQ2h0eXBlX1RvX0F0dHJDaGFyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjA0XzE2Ij5NdndpbmNoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM1OV83Ij5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM2MF83Ij5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzYxXzciPkNvbHVtbjwvQT4pKSk7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNThfMTMiPlBlZWs8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzFfMTQiPkluc2VydDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MTJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzFfMjIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjEzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzcyXzIyIj5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjE1XzE2Ij5XaW5zY2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjE1XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjE1XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxNV8zOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYxNV8xNiI+Q2g8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdpbnNjaCwgIndpbnNjaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYxNV8xNiI+V2luc2NoPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM3MV8yMiI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzJfMjIiPkNoPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzFfMTQiPkluc2VydDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc3XzE0Ij5JbnNlcnQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjI0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzdfMjIiPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjI1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzhfMjIiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjI2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzlfMjIiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM4MF8yMiI+Q2g8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyOV8xNiI+TXZ3aW5zY2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjI5XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI5XzE2Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjMwXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI5XzE2Ij5MaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYzMV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyOV8xNiI+Q29sPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MzJfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MjlfMTYiPkNoPC9BPjwvRk9OVD4gIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTXZ3aW5zY2gsICJtdndpbnNjaCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYyOV8xNiI+TXZ3aW5zY2g8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc3XzIyIj5XaW48L0E+LAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc4XzIyIj5MaW5lPC9BPiksCisgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzNzlfMjIiPkNvbHVtbjwvQT4pLAorICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzgwXzIyIj5DaDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzc3XzE0Ij5JbnNlcnQ8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzODlfMTQiPkluc2VydDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDNfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzODlfMjIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjQ0XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzkwXzIyIj5TdHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDVfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOTFfMjIiPkxlbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXIgOj0gLTEpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDdfMTYiPldpbnNuc3RyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY0N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0N18xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY0OF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0N18xNiI+U3RyPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY0OV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0N18xNiI+TGVuPC9BPjwvRk9OVD4gOiBJbnRlZ2VyIDo9IC0xKSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdpbnNuc3RyLCAid2luc25zdHIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjUyXzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzkwXzIyIj5TdHI8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NTNfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOTBfMjIiPlN0cjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NTJfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY1M183Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjQ3XzE2Ij5XaW5zbnN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzODlfMjIiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NTJfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM5MV8yMiI+TGVuPC9BPikgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM4OV8xNCI+SW5zZXJ0PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOThfMTQiPkluc2VydDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM5OF8yMiI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTM5OV8yMiI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQwMF8yMiI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDAxXzIyIj5TdHI8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQwMl8yMiI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2OF8xNiI+TXZ3aW5zbnN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjhfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NjhfMTYiPldpbjwvQT48L0ZPTlQ+ICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY2OV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2OF8xNiI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3MF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2OF8xNiI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3MV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2OF8xNiI+U3RyPC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjcyXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjY4XzE2Ij5MZW48L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIE12d2luc25zdHIsICJtdndpbnNuc3RyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3NV83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQwMV8yMiI+U3RyPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjc2XzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDAxXzIyIj5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjc1XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NzZfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY2OF8xNiI+TXZ3aW5zbnN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOThfMjIiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzk5XzIyIj5MaW5lPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDAwXzIyIj5Db2x1bW48L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY3NV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQwMl8yMiI+TGVuPC9BPikpCisgICAgICAgID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzOThfMTQiPkluc2VydDwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNF8xNCI+UGVlazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2ODVfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTRfMjAiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2ODZfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTVfMjAiPlN0cjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjg3XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE2XzIwIj5MZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4OV8xNiI+V2lubnN0cjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2ODlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2ODlfMTYiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5MF8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY4OV8xNiI+U3RyPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjkxXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjg5XzE2Ij5MZW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFdpbm5zdHIsICJ3aW5uc3RyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5NF83Ij5OPC9BPjwvRk9OVD4gICA6IEludGVnZXIgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNl8yMCI+TGVuPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY5NV83Ij5UeHQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNV8yMCI+U3RyPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjk2XzciPkNudDwvQT48L0ZPTlQ+IDogTmF0dXJhbDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2OTRfNyI+TjwvQT4gJmx0OyAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjk0XzciPk48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTVfMjAiPlN0cjwvQT4nTGVuZ3RoOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY5NF83Ij5OPC9BPiAmZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTVfMjAiPlN0cjwvQT4nTGVuZ3RoIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY5NV83Ij5UeHQ8L0E+ICgwKSA6PSA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5jaGFyJ0ZpcnN0OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2ODlfMTYiPldpbm5zdHI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE0XzIwIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjk1XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjk0XzciPk48L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgICAgIFRvX0FkYSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY5NV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE1XzIwIj5TdHI8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjk2XzciPkNudDwvQT4sIFRydWUpOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2OTZfNyI+Q250PC9BPiAmbHQ7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTVfMjAiPlN0cjwvQT4nTGVuZ3RoIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE1XzIwIj5TdHI8L0E+ICgoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNV8yMCI+U3RyPC9BPidGaXJzdCArIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2OTZfNyI+Q250PC9BPikgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQxNV8yMCI+U3RyPC9BPidMYXN0KSA6PSAoPGI+b3RoZXJzPC9iPiA9Jmd0OyAnICcpOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MTRfMTQiPlBlZWs8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyM18xNCI+UGVlazwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyM18yMCI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzE2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjRfMjAiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDI1XzIwIj5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDI2XzIwIj5TdHI8L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzE5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjdfMjAiPkxlbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDIzXzIwIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDI0XzIwIj5MaW5lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyNV8yMCI+Q29sdW1uPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDE0XzE0Ij5QZWVrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyM18yMCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyNl8yMCI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQyN18yMCI+TGVuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MjNfMTQiPlBlZWs8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MjZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzhfMTQiPlBlZWs8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzI3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzhfMjAiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkF0dHJpYnV0ZWRfU3RyaW5nPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQwXzIwIj5MZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgSW50ZWdlciA6PSAtMSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczMV8xNiI+V2luY2huc3RyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczMV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczMV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzFfMTYiPlN0cjwvQT48L0ZPTlQ+IDogY2h0eXBlX2FycmF5OyAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gb3V0PC9FTT48L0ZPTlQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczM18yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczMV8xNiI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXaW5jaG5zdHIsICJ3aW5jaG5zdHIiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzM2XzciPk48L0E+PC9GT05UPiAgIDogSW50ZWdlciA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQwXzIwIj5MZW48L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzM3XzciPlR4dDwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IGNodHlwZV9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+J0xlbmd0aCkKKyAgICAgICAgICA6PSAoMCA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+KTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczOV83Ij5DbnQ8L0E+PC9GT05UPiA6IE5hdHVyYWwgOj0gMDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzZfNyI+TjwvQT4gJmx0OyAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzM2XzciPk48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzlfMjAiPlN0cjwvQT4nTGVuZ3RoOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczNl83Ij5OPC9BPiAmZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzlfMjAiPlN0cjwvQT4nTGVuZ3RoIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzFfMTYiPldpbmNobnN0cjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzhfMjAiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzdfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MzZfNyI+TjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+Zm9yPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NTBfMTEiPlRvPC9BPjwvRk9OVD4gPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzlfMjAiPlN0cjwvQT4nPGI+UmFuZ2U8L2I+IDxiPmxvb3A8L2I+CisgICAgICAgICA8Yj5leGl0PC9iPiA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzM3XzciPlR4dDwvQT4gKHNpemVfdCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczOV83Ij5DbnQ8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOV8yMCI+U3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc1MF8xMSI+VG88L0E+KSA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzM3XzciPlR4dDwvQT4gKHNpemVfdCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczOV83Ij5DbnQ8L0E+KSk7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzM5XzciPkNudDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczOV83Ij5DbnQ8L0E+ICsgMTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+bG9vcDwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczOV83Ij5DbnQ8L0E+ICZsdDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQzOV8yMCI+U3RyPC9BPidMZW5ndGggPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzlfMjAiPlN0cjwvQT4gKCg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+J0ZpcnN0ICsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTczOV83Ij5DbnQ8L0E+KSAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM5XzIwIj5TdHI8L0E+J0xhc3QpIDo9CisgICAgICAgICAgICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiA9Jmd0OyAnICcsCisgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPikpOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0MzhfMTQiPlBlZWs8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0N18xNCI+UGVlazwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NjRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0N18yMCI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NDhfMjAiPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQ5XzIwIj5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDUwXzIwIj5TdHI8L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkF0dHJpYnV0ZWRfU3RyaW5nPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDUxXzIwIj5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKQorICAgPGI+aXM8L2I+CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzUxMV8xNCI+TW92ZV9DdXJzb3I8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQ3XzIwIj5XaW48L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDQ4XzIwIj5MaW5lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0OV8yMCI+Q29sdW1uPC9BPik7CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDM4XzE0Ij5QZWVrPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ0N18yMCI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ1MF8yMCI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ1MV8yMCI+TGVuPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NDdfMTQiPlBlZWs8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjNfMTQiPkdldDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NzVfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjNfMTkiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3Nl8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2NF8xOSI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3N18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2NV8xOSI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NzlfMTYiPldnZXRuc3RyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc3OV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc3OV8xNiI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc3OV8xNiI+U3RyPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4MV8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc3OV8xNiI+TGVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBXZ2V0bnN0ciwgIndnZXRuc3RyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4NF83Ij5OPC9BPjwvRk9OVD4gICA6IEludGVnZXIgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2NV8xOSI+TGVuPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4NV83Ij5UeHQ8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2NF8xOSI+U3RyPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzg2XzciPkNudDwvQT48L0ZPTlQ+IDogTmF0dXJhbDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3ODRfNyI+TjwvQT4gJmx0OyAwIDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzg0XzciPk48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT4nTGVuZ3RoOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4NF83Ij5OPC9BPiAmZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT4nTGVuZ3RoIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4NV83Ij5UeHQ8L0E+ICgwKSA6PSA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5jaGFyJ0ZpcnN0OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NzlfMTYiPldnZXRuc3RyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2M18xOSI+V2luPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4NV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4NF83Ij5OPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICBUb19BZGEgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3ODVfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2NF8xOSI+U3RyPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc4Nl83Ij5DbnQ8L0E+LCBUcnVlKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzg2XzciPkNudDwvQT4gJmx0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDY0XzE5Ij5TdHI8L0E+J0xlbmd0aCA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ2NF8xOSI+U3RyPC9BPiAoKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT4nRmlyc3QgKyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzg2XzciPkNudDwvQT4pIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjRfMTkiPlN0cjwvQT4nTGFzdCkgOj0gKDxiPm90aGVyczwvYj4gPSZndDsgJyAnKTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDYzXzE0Ij5HZXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ3NF8xNCI+R2V0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc0XzE5Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ3NV8xOSI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODA3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzZfMTkiPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODA4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzdfMTkiPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+b3V0PC9iPiBTdHJpbmc7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ3OF8xOSI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpCisgICA8Yj5pczwvYj4KKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTExXzE0Ij5Nb3ZlX0N1cnNvcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzRfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzVfMTkiPkxpbmU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc2XzE5Ij5Db2x1bW48L0E+KTsKKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NjNfMTQiPkdldDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzRfMTkiPldpbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzdfMTkiPlN0cjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NzhfMTkiPkxlbjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDc0XzE0Ij5HZXQ8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTlfMTQiPkluaXRfU29mdF9MYWJlbF9LZXlzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTAwXzciPkZvcm1hdDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTFfOSI+U29mdF9MYWJlbF9LZXlfRm9ybWF0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDkxXzM1Ij5UaHJlZV9Ud29fVGhyZWU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODE5XzE2Ij5TbGtfSW5pdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTlfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MTlfMTYiPkZtdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0luaXQsICJzbGtfaW5pdCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgxOV8xNiI+U2xrX0luaXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDkxXzkiPlNvZnRfTGFiZWxfS2V5X0Zvcm1hdDwvQT4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTAwXzciPkZvcm1hdDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk5XzE0Ij5Jbml0X1NvZnRfTGFiZWxfS2V5czwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODI3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTA1XzE0Ij5TZXRfU29mdF9MYWJlbF9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODI3XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTA1XzM0Ij5MYWJlbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTVfOSI+TGFiZWxfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgyOF8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwNl8zNCI+VGV4dDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MjlfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MDdfMzQiPkZtdDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5Nl85Ij5MYWJlbF9KdXN0aWZpY2F0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk2XzMzIj5MZWZ0PC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgzMV8xNiI+U2xrX1NldDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzFfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MzFfMTYiPkxhYmVsPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgzMl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgzMV8xNiI+VHh0PC9BPjwvRk9OVD4gICA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MzFfMTYiPkZtdDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfU2V0LCAic2xrX3NldCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzZfNyI+VHh0PC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MDZfMzQiPlRleHQ8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzdfNyI+TGVuPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MDZfMzQiPlRleHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODM2XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MzdfNyI+TGVuPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgzMV8xNiI+U2xrX1NldDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTA1XzM0Ij5MYWJlbDwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODM2XzciPlR4dDwvQT4sCisgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5Nl85Ij5MYWJlbF9KdXN0aWZpY2F0aW9uPC9BPidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MDdfMzQiPkZtdDwvQT4pKSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUwNV8xNCI+U2V0X1NvZnRfTGFiZWxfS2V5PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NDZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MTJfMTQiPlJlZnJlc2hfU29mdF9MYWJlbF9LZXlzPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg0OF8xNiI+U2xrX1JlZnJlc2g8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19SZWZyZXNoLCAic2xrX3JlZnJlc2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NDhfMTYiPlNsa19SZWZyZXNoPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTEyXzE0Ij5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5czwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODU2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTE3XzE0Ij5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5c19XaXRob3V0X1VwZGF0ZTwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NThfMTYiPlNsa19Ob3V0cmVmcmVzaDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX05vdXRyZWZyZXNoLCAic2xrX25vdXRyZWZyZXNoIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODU4XzE2Ij5TbGtfTm91dHJlZnJlc2g8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MTdfMTQiPlJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NjZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjJfMTQiPkdldF9Tb2Z0X0xhYmVsX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NjZfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjJfMzQiPkxhYmVsPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5NV85Ij5MYWJlbF9OdW1iZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODY3XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTIzXzM0Ij5UZXh0PC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NjlfMTYiPlNsa19MYWJlbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NjlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NjlfMTYiPkxhYmVsPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0xhYmVsLCAic2xrX2xhYmVsIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg2OV8xNiI+U2xrX0xhYmVsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjJfMzQiPkxhYmVsPC9BPikpLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTIzXzM0Ij5UZXh0PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjJfMTQiPkdldF9Tb2Z0X0xhYmVsX0tleTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NzVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjdfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NzVfMzMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjdfMzMiPkxhYmVsPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5NV85Ij5MYWJlbF9OdW1iZXI8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc3XzE2Ij5TbGtfTGFiZWw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc3XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODc3XzE2Ij5MYWJlbDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19MYWJlbCwgInNsa19sYWJlbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg3N18xNiI+U2xrX0xhYmVsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MjdfMzMiPkxhYmVsPC9BPikpKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUyN18xMyI+R2V0X1NvZnRfTGFiZWxfS2V5PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4ODNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MzNfMTQiPkNsZWFyX1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4ODVfMTYiPlNsa19DbGVhcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0NsZWFyLCAic2xrX2NsZWFyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODg1XzE2Ij5TbGtfQ2xlYXI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MzNfMTQiPkNsZWFyX1NvZnRfTGFiZWxfS2V5czwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODkzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTM4XzE0Ij5SZXN0b3JlX1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4OTVfMTYiPlNsa19SZXN0b3JlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfUmVzdG9yZSwgInNsa19yZXN0b3JlIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODk1XzE2Ij5TbGtfUmVzdG9yZTwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUzOF8xNCI+UmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkwM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0M18xNCI+VG91Y2hfU29mdF9MYWJlbF9LZXlzPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkwNV8xNiI+U2xrX1RvdWNoPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfVG91Y2gsICJzbGtfdG91Y2giKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MDVfMTYiPlNsa19Ub3VjaDwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0M18xNCI+VG91Y2hfU29mdF9MYWJlbF9LZXlzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDhfMTQiPlN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxNF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTQ5XzciPkF0dHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTE1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NTBfNyI+T248L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxN18xNiI+U2xrX0F0dHJvbjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTdfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MTdfMTYiPkNoPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfQXR0cm9uLCAic2xrX2F0dHJvbiIpOworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxOV8xNiI+U2xrX0F0dHJvZmY8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTE5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTE5XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0F0dHJvZmYsICJzbGtfYXR0cm9mZiIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MjJfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkyM183Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0OV83Ij5BdHRyPC9BPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1MF83Ij5PbjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MjJfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTE3XzE2Ij5TbGtfQXR0cm9uPC9BPiAgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTIzXzciPkNoPC9BPikpOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MjJfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTE5XzE2Ij5TbGtfQXR0cm9mZjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTIzXzciPkNoPC9BPikpOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkyMl83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NDhfMTQiPlN3aXRjaF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NTZfMTQiPlNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTU3XzciPkF0dHI8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkzOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTU4XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0MV8xNiI+U2xrX0F0dHJzZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTQxXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTQxXzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2xrX0F0dHJzZXQsICJzbGtfYXR0cnNldCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NDRfNyI+Q2g8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA9Jmd0OyBDaGFyYWN0ZXInRmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTU3XzciPkF0dHI8L0E+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU1XzEwIj5Db2xvcjwvQT4gPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1OF83Ij5Db2xvcjwvQT4pOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk0MV8xNiI+U2xrX0F0dHJzZXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzVfNCI+QXR0ckNoYXJfVG9fQ2h0eXBlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk0NF83Ij5DaDwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTU2XzE0Ij5TZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NTNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NjNfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NTVfMTYiPlNsa19BdHRyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfQXR0ciwgInNsa19hdHRyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk1OF83Ij5BdHRyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk1NV8xNiI+U2xrX0F0dHI8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IENodHlwZV9Ub19BdHRyQ2hhciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk1OF83Ij5BdHRyPC9BPikuPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzU0XzEwIj5BdHRyPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU2M18xMyI+R2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTY3XzEzIj5HZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NjVfMTYiPlNsa19BdHRyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNjNfMTIiPkNfQ2h0eXBlPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBTbGtfQXR0ciwgInNsa19hdHRyIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk2OF83Ij5BdHRyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk2NV8xNiI+U2xrX0F0dHI8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DaHR5cGVfVG9fQXR0ckNoYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTY4XzciPkF0dHI8L0E+KS48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU2N18xMyI+R2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU3Ml8xNCI+U2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3M180MCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU3Ml80MCI+UGFpcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3NV8xNiI+U2xrX0NvbG9yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk3NV8xNiI+Q29sb3I8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFNsa19Db2xvciwgInNsa19jb2xvciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk3NV8xNiI+U2xrX0NvbG9yPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU3Ml80MCI+UGFpcjwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTcyXzE0Ij5TZXRfU29mdF9MYWJlbF9LZXlfQ29sb3I8L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk4NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU4Nl8xNCI+RW5hYmxlX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5ODRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1ODZfMjYiPktleTwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5ODVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1ODdfMjYiPkVuYWJsZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSkKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk4N18xNiI+S2V5b2s8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTg3XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTg3XzE2Ij5LZXljb2RlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5ODhfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5ODdfMTYiPk9uX09mZjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEtleW9rLCAia2V5b2siKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5ODdfMTYiPktleW9rPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1ODZfMjYiPktleTwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPiAoQm9vbGVhbidQb3MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1ODdfMjYiPkVuYWJsZTwvQT4pKSkKKyAgICAgICAgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU4Nl8xNCI+RW5hYmxlX0tleTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk5N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5Nl8xNCI+RGVmaW5lX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OTdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1OTZfMjYiPkRlZmluaXRpb248L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTk4XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTk3XzI2Ij5LZXk8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDAwXzE2Ij5EZWZrZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDAwXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDAwXzE2Ij5EZWY8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwMV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAwMF8xNiI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBEZWZrZXksICJkZWZpbmVfa2V5Iik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwNF83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5Nl8yNiI+RGVmaW5pdGlvbjwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwNV83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5Nl8yNiI+RGVmaW5pdGlvbjwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMDRfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAwNV83Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDAwXzE2Ij5EZWZrZXk8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDA0XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTk3XzI2Ij5LZXk8L0E+KSkgPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU5Nl8xNCI+RGVmaW5lX0tleTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAxM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyMl8xNCI+VW5fQ29udHJvbDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMTNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjJfMjYiPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDE0XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjIzXzI2Ij5TdHI8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDE2XzE2Ij5VbmN0cmw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDE2XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDE2XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFVuY3RybCwgInVuY3RybCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTE2XzE0Ij5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMTZfMTYiPlVuY3RybDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5BdHRyQ2hhcl9Ub19DaHR5cGU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjIyXzI2Ij5DaDwvQT4pKSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyM18yNiI+U3RyPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjJfMTQiPlVuX0NvbnRyb2w8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDIyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjI3XzEzIj5Vbl9Db250cm9sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAyMl8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyN18yNSI+Q2g8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KSA8Yj5yZXR1cm48L2I+IFN0cmluZworICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDI0XzE2Ij5VbmN0cmw8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDI0XzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDI0XzE2Ij5DaDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzYzXzEyIj5DX0NodHlwZTwvQT4pIDxiPnJldHVybjwvYj4gY2hhcnNfcHRyOworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFVuY3RybCwgInVuY3RybCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAyNF8xNiI+VW5jdHJsPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkF0dHJDaGFyX1RvX0NodHlwZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MjdfMjUiPkNoPC9BPikpKTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYyN18xMyI+VW5fQ29udHJvbDwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDMwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjMzXzE0Ij5EZWxheV9PdXRwdXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDMwXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjMzXzI4Ij5Nc2VjczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IE5hdHVyYWwpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMzJfMTYiPkRlbGF5b3V0cHV0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAzMl8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAzMl8xNiI+TXNlY3M8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIERlbGF5b3V0cHV0LCAiZGVsYXlfb3V0cHV0Iik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDMyXzE2Ij5EZWxheW91dHB1dDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjMzXzI4Ij5Nc2VjczwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjMzXzE0Ij5EZWxheV9PdXRwdXQ8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjA0MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTYzOF8xNCI+Rmx1c2hfSW5wdXQ8L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDQyXzE2Ij5GbHVzaGlucDwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRmx1c2hpbnAsICJmbHVzaGlucCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA0Ml8xNiI+Rmx1c2hpbnA8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+ICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gZG9jdSBzYXlzIHRoYXQgbmV2ZXIgaGFwcGVucywgYnV0Li4uPC9FTT48L0ZPTlQ+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2MzhfMTQiPkZsdXNoX0lucHV0PC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNTBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NDdfMTMiPkJhdWRyYXRlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBOYXR1cmFsCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNTJfMTYiPkJhdWQ8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEJhdWQsICJiYXVkcmF0ZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNTJfMTYiPkJhdWQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY0N18xMyI+QmF1ZHJhdGU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDU4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjUyXzEzIj5FcmFzZV9DaGFyYWN0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IENoYXJhY3RlcgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDYwXzE2Ij5FcmFzZWNoYXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEVyYXNlY2hhciwgImVyYXNlY2hhciIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IENoYXJhY3RlcidWYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNjBfMTYiPkVyYXNlY2hhcjwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjUyXzEzIj5FcmFzZV9DaGFyYWN0ZXI8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDY2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjU3XzEzIj5LaWxsX0NoYXJhY3RlcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQ2hhcmFjdGVyCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNjhfMTYiPktpbGxjaGFyPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBLaWxsY2hhciwgImtpbGxjaGFyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gQ2hhcmFjdGVyJ1ZhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA2OF8xNiI+S2lsbGNoYXI8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY1N18xMyI+S2lsbF9DaGFyYWN0ZXI8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDc0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjYyXzEzIj5IYXNfSW5zZXJ0X0NoYXJhY3RlcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDc2XzE2Ij5IYXNfSWM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEhhc19JYywgImhhc19pYyIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA3Nl8xNiI+SGFzX0ljPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjYyXzEzIj5IYXNfSW5zZXJ0X0NoYXJhY3RlcjwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwODZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NjdfMTMiPkhhc19JbnNlcnRfTGluZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDg4XzE2Ij5IYXNfSWw8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEhhc19JbCwgImhhc19pbCIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA4OF8xNiI+SGFzX0lsPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjY3XzEzIj5IYXNfSW5zZXJ0X0xpbmU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDk4XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjcyXzEzIj5TdXBwb3J0ZWRfQXR0cmlidXRlczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTAwXzE2Ij5UZXJtYXR0cnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl82M18xMiI+Q19DaHR5cGU8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFRlcm1hdHRycywgInRlcm1hdHRycyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMDNfNyI+Q2g8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83NV80Ij5DaHR5cGVfVG9fQXR0ckNoYXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTAwXzE2Ij5UZXJtYXR0cnM8L0E+KTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTAzXzciPkNoPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjcyXzEzIj5TdXBwb3J0ZWRfQXR0cmlidXRlczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTA4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjc3XzE0Ij5Mb25nX05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTA4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjc3XzI1Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjExMF8xNiI+TG9uZ25hbWU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBMb25nbmFtZSwgImxvbmduYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjExMF8xNiI+TG9uZ25hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjc3XzI1Ij5OYW1lPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NzdfMTQiPkxvbmdfTmFtZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMTZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2ODFfMTMiPkxvbmdfTmFtZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gU3RyaW5nCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMThfMTYiPkxvbmduYW1lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgTG9uZ25hbWUsICJsb25nbmFtZSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMjFfMTMiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjExOF8xNiI+TG9uZ25hbWU8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY4MV8xMyI+TG9uZ19OYW1lPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMjRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2ODdfMTQiPlRlcm1pbmFsX05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTI0XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjg3XzI5Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEyNl8xNiI+VGVybW5hbWU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBUZXJtbmFtZSwgInRlcm1uYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl8xMTZfMTQiPkZpbGxfU3RyaW5nPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEyNl8xNiI+VGVybW5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjg3XzI5Ij5OYW1lPC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2ODdfMTQiPlRlcm1pbmFsX05hbWU8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTMyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjkxXzEzIj5UZXJtaW5hbF9OYW1lPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjEzNF8xNiI+VGVybW5hbWU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IGNoYXJzX3B0cjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBUZXJtbmFtZSwgInRlcm1uYW1lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzEyMV8xMyI+RmlsbF9TdHJpbmc8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTM0XzE2Ij5UZXJtbmFtZTwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjkxXzEzIj5UZXJtaW5hbF9OYW1lPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTQwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEyXzE0Ij5Jbml0X1BhaXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTQwXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEyXzI1Ij5QYWlyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzAxXzEyIj5SZWRlZmluYWJsZV9Db2xvcl9QYWlyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0MV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxM18yNSI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTQyXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzE0XzI1Ij5CYWNrPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNDRfMTYiPkluaXRwYWlyPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE0NF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE0NF8xNiI+UGFpcjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNDVfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNDRfMTYiPkZvcmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTQ2XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTQ0XzE2Ij5CYWNrPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEluaXRwYWlyLCAiaW5pdF9wYWlyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiBJbnRlZ2VyICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEyXzI1Ij5QYWlyPC9BPikgJmd0Oz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDI0XzEzIj5OdW1iZXJfT2ZfQ29sb3JfUGFpcnM8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gQ29uc3RyYWludF9FcnJvcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgICAgPGI+aWY8L2I+IEludGVnZXIgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTNfMjUiPkZvcmU8L0E+KSAmZ3Q7PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjFfMTMiPk51bWJlcl9PZl9Db2xvcnM8L0E+IDxiPm9yPC9iPiA8Yj5lbHNlPC9iPgorICAgICAgICAgSW50ZWdlciAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxNF8yNSI+QmFjazwvQT4pICZndDs9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQyMV8xMyI+TnVtYmVyX09mX0NvbG9yczwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiBDb25zdHJhaW50X0Vycm9yOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE0NF8xNiI+SW5pdHBhaXI8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEyXzI1Ij5QYWlyPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTNfMjUiPkZvcmU8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxNF8yNSI+QmFjazwvQT4pKQorICAgICAgICA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzEyXzE0Ij5Jbml0X1BhaXI8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE2Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxOV8xNCI+UGFpcl9Db250ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE2Ml8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxOV8yOCI+UGFpcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE2M18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcyMF8yOCI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE2NF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcyMV8yOCI+QmFjazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTY2XzEyIj5DX1Nob3J0X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjdfMTYiPlBhaXJjb250ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE2N18yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE2N18xNiI+UGFpcjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjhfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjdfMTYiPkZwPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjZfMTIiPkNfU2hvcnRfQWNjZXNzPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNjlfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjdfMTYiPkJwPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNjZfMTIiPkNfU2hvcnRfQWNjZXNzPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBQYWlyY29udGVudCwgInBhaXJfY29udGVudCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNzJfNyI+RjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxNzJfMTAiPkI8L0E+PC9GT05UPiA6IDxiPmFsaWFzZWQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTY3XzE2Ij5QYWlyY29udGVudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTlfMjgiPlBhaXI8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE3Ml83Ij5GPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTcyXzEwIj5CPC9BPic8Yj5BY2Nlc3M8L2I+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzIwXzI4Ij5Gb3JlPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE3Ml83Ij5GPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzIxXzI4Ij5CYWNrPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE3Ml8xMCI+QjwvQT4pOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MTlfMTQiPlBhaXJfQ29udGVudDwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxODJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MjZfMTMiPkhhc19Db2xvcnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE4NF8xNiI+SGFzY29sb3JzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBIYXNjb2xvcnMsICJoYXNfY29sb3JzIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTg0XzE2Ij5IYXNjb2xvcnM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyN180Ij5DdXJzZXNfQm9vbF9GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gRmFsc2U7CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBUcnVlOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MjZfMTMiPkhhc19Db2xvcnM8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE5NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczMV8xNCI+SW5pdF9Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOTRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzFfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMTk1XzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMyXzI2Ij5SZWQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjE5Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTczM18yNiI+R3JlZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOTdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzRfMjYiPkJsdWU8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOTlfMTYiPkluaXRjb2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxOTlfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTlfMTYiPkNvbDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMDBfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTlfMTYiPlJlZDwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMDFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTlfMTYiPkdyZWVuPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMDJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTlfMTYiPkJsdWU8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEluaXRjb2xvciwgImluaXRfY29sb3IiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTlfMTYiPkluaXRjb2xvcjwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzFfMjYiPkNvbG9yPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzJfMjYiPlJlZDwvQT4pLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMzXzI2Ij5HcmVlbjwvQT4pLAorICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzM0XzI2Ij5CbHVlPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3MzFfMTQiPkluaXRfQ29sb3I8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjExXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzM5XzEzIj5DYW5fQ2hhbmdlX0NvbG9yPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBCb29sZWFuCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMTNfMTYiPkNhbmNoYW5nZWNvbG9yPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTI2XzkiPkN1cnNlc19Cb29sPC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBDYW5jaGFuZ2Vjb2xvciwgImNhbl9jaGFuZ2VfY29sb3IiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMTNfMTYiPkNhbmNoYW5nZWNvbG9yPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IEZhbHNlOworICAgICAgPGI+ZWxzZTwvYj4KKyAgICAgICAgIDxiPnJldHVybjwvYj4gVHJ1ZTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzM5XzEzIj5DYW5fQ2hhbmdlX0NvbG9yPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMjNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NDRfMTQiPkNvbG9yX0NvbnRlbnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjIzXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ0XzI5Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMjRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NDVfMjkiPlJlZDwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIyNV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0Nl8yOSI+R3JlZW48L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjI2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ3XzI5Ij5CbHVlPC9BPjwvRk9OVD4gIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjI4XzEyIj5DX1Nob3J0X0FjY2VzczwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5hY2Nlc3M8L2I+IDxiPmFsbDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPjsKKworICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIzMF8xNiI+Q29sb3Jjb250ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIzMF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzMF8xNiI+Q29sb3I8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81Nl8xMiI+Q19TaG9ydDwvQT47IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjIzMF80NyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzMF8xNiI+UjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMzBfNTAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMzBfMTYiPkc8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjMwXzUzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjMwXzE2Ij5CPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjI4XzEyIj5DX1Nob3J0X0FjY2VzczwvQT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgQ29sb3Jjb250ZW50LCAiY29sb3JfY29udGVudCIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMzRfNyI+UjwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyMzRfMTAiPkc8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjM0XzEzIj5CPC9BPjwvRk9OVD4gOiA8Yj5hbGlhc2VkPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTZfMTIiPkNfU2hvcnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzMF8xNiI+Q29sb3Jjb250ZW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU2XzEyIj5DX1Nob3J0PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0NF8yOSI+Q29sb3I8L0E+KSwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIzNF83Ij5SPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjM0XzEwIj5HPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjM0XzEzIj5CPC9BPic8Yj5BY2Nlc3M8L2I+KSA9CisgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ1XzI5Ij5SZWQ8L0E+ICAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMzRfNyI+UjwvQT4pOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0Nl8yOSI+R3JlZW48L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjM0XzEwIj5HPC9BPik7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ3XzI5Ij5CbHVlPC9BPiAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMzRfMTMiPkI8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzQ0XzE0Ij5Db2xvcl9Db250ZW50PC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTlfMTQiPlNhdmVfQ3Vyc2VzX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjQ3XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU5XzMyIj5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1Nl85Ij5DdXJzZXNfTW9kZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNDlfMTYiPkRlZl9Qcm9nX01vZGU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIERlZl9Qcm9nX01vZGUsICJkZWZfcHJvZ19tb2RlIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjUxXzE2Ij5EZWZfU2hlbGxfTW9kZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgRGVmX1NoZWxsX01vZGUsICJkZWZfc2hlbGxfbW9kZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNTRfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+Y2FzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1OV8zMiI+TW9kZTwvQT4gPGI+aXM8L2I+CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU2XzI1Ij5DdXJzZXM8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNTRfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjQ5XzE2Ij5EZWZfUHJvZ19Nb2RlPC9BPjsKKyAgICAgICAgIDxiPndoZW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTZfMzMiPlNoZWxsPC9BPiAgPSZndDsgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI1NF83Ij5FcnI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNTFfMTYiPkRlZl9TaGVsbF9Nb2RlPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+Y2FzZTwvYj47CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI1NF83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTlfMTQiPlNhdmVfQ3Vyc2VzX01vZGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI2NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc2NV8xNCI+UmVzZXRfQ3Vyc2VzX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjY1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzY1XzMzIj5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1Nl85Ij5DdXJzZXNfTW9kZTwvQT4pCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNjdfMTYiPlJlc2V0X1Byb2dfTW9kZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUmVzZXRfUHJvZ19Nb2RlLCAicmVzZXRfcHJvZ19tb2RlIik7CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjY5XzE2Ij5SZXNldF9TaGVsbF9Nb2RlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBSZXNldF9TaGVsbF9Nb2RlLCAicmVzZXRfc2hlbGxfbW9kZSIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIyNzJfNyI+RXJyPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+Y2FzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc2NV8zMyI+TW9kZTwvQT4gPGI+aXM8L2I+CisgICAgICAgICA8Yj53aGVuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU2XzI1Ij5DdXJzZXM8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNzJfNyI+RXJyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjY3XzE2Ij5SZXNldF9Qcm9nX01vZGU8L0E+OworICAgICAgICAgPGI+d2hlbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1Nl8zMyI+U2hlbGw8L0E+ICA9Jmd0OyA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjcyXzciPkVycjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI2OV8xNiI+UmVzZXRfU2hlbGxfTW9kZTwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmNhc2U8L2I+OworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyNzJfNyI+RXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzY1XzE0Ij5SZXNldF9DdXJzZXNfTW9kZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjgzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzcxXzE0Ij5TYXZlX1Rlcm1pbmFsX1N0YXRlPC9BPjwvRk9OVD4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI4NV8xNiI+U2F2ZXR0eTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU2F2ZXR0eSwgInNhdmV0dHkiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyODVfMTYiPlNhdmV0dHk8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NzFfMTQiPlNhdmVfVGVybWluYWxfU3RhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjI5M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc3Nl8xNCI+UmVzZXRfVGVybWluYWxfU3RhdGU8L0E+PC9GT05UPgorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMjk1XzE2Ij5SZXNldHR5PC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBSZXNldHR5LCAicmVzZXR0eSIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI5NV8xNiI+UmVzZXR0eTwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc3Nl8xNCI+UmVzZXRfVGVybWluYWxfU3RhdGU8L0E+OworCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMwM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc4OV8xNCI+UmlwX09mZl9MaW5lczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMDNfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODlfMjkiPkxpbmVzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMDRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3OTBfMjkiPlByb2M8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc4MF85Ij5TdGRzY3JfSW5pdF9Qcm9jPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMwNl8xNiI+Umlwb2ZmbGluZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMDZfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMDZfMTYiPkxpbmVzPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMwN18yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMwNl8xNiI+UHJvYzwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODBfOSI+U3Rkc2NyX0luaXRfUHJvYzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgUmlwb2ZmbGluZSwgIl9uY19yaXBvZmZsaW5lIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzA2XzE2Ij5SaXBvZmZsaW5lPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODlfMjkiPkxpbmVzPC9BPiksIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3OTBfMjkiPlByb2M8L0E+KSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzg5XzE0Ij5SaXBfT2ZmX0xpbmVzPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMTVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDFfMTQiPlNldF9DdXJzb3JfVmlzaWJpbGl0eTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMTVfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDFfMzciPlZpc2liaWxpdHk8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3OThfOSI+Q3Vyc29yX1Zpc2liaWxpdHk8L0E+KQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzE3XzE2Ij5DdXJzX1NldDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMTdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMTdfMTYiPkN1cnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIEN1cnNfU2V0LCAiY3Vyc19zZXQiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzIwXzciPlJlczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMjBfNyI+UmVzPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzE3XzE2Ij5DdXJzX1NldDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3OThfOSI+Q3Vyc29yX1Zpc2liaWxpdHk8L0E+J1BvcyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwMV8zNyI+VmlzaWJpbGl0eTwvQT4pKTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzIwXzciPlJlczwvQT4gLz0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODAxXzM3Ij5WaXNpYmlsaXR5PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzk4XzkiPkN1cnNvcl9WaXNpYmlsaXR5PC9BPidWYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMjBfNyI+UmVzPC9BPik7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwMV8xNCI+U2V0X0N1cnNvcl9WaXNpYmlsaXR5PC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMjhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDZfMTQiPk5hcF9NaWxsaV9TZWNvbmRzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjMyOF8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwNl8zMyI+TXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBOYXR1cmFsKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzMwXzE2Ij5OYXBtczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMzBfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMzBfMTYiPk1zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBOYXBtcywgIm5hcG1zIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzMwXzE2Ij5OYXBtczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODA2XzMzIj5NczwvQT4pKSA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmFpc2U8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM4M180Ij5DdXJzZXNfRXhjZXB0aW9uPC9BPjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODA2XzE0Ij5OYXBfTWlsbGlfU2Vjb25kczwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzMzlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM0MV83Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0MV83Ij5SZXN1bHQ8L0E+LCAic3Rkc2NyIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM0MV83Ij5SZXN1bHQ8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNDdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ4MV8xMyI+Q3VycmVudF9XaW5kb3c8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzQ5XzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzQ5XzciPlJlc3VsdDwvQT4sICJjdXJzY3IiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzQ5XzciPlJlc3VsdDwvQT47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ4MV8xMyI+Q3VycmVudF9XaW5kb3c8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzU1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MTJfMTMiPkxpbmVzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT4KKyAgIDxiPmlzPC9iPgorICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzU3XzciPlJlc3VsdDwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM1N183Ij5SZXN1bHQ8L0E+LCAiTElORVMiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNTdfNyI+UmVzdWx0PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxMl8xMyI+TGluZXM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzYzXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MTVfMTMiPkNvbHVtbnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+CisgICA8Yj5pczwvYj4KKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM2NV83Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNjVfNyI+UmVzdWx0PC9BPiwgIkNPTFMiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM2NV83Ij5SZXN1bHQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDE1XzEzIj5Db2x1bW5zPC9BPjsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM3MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDE4XzEzIj5UYWJfU2l6ZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gTmF0dXJhbAorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNzNfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzczXzciPlJlc3VsdDwvQT4sICJUQUJTSVpFIik7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPnJldHVybjwvYj4gTmF0dXJhbCAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM3M183Ij5SZXN1bHQ8L0E+KTsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDE4XzEzIj5UYWJfU2l6ZTwvQT47CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzNzlfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQyMV8xMyI+TnVtYmVyX09mX0NvbG9yczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gTmF0dXJhbAorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzODFfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzgxXzciPlJlc3VsdDwvQT4sICJDT0xPUlMiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiBOYXR1cmFsICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzgxXzciPlJlc3VsdDwvQT4pOworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjFfMTMiPk51bWJlcl9PZl9Db2xvcnM8L0E+OworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMzg3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjRfMTMiPk51bWJlcl9PZl9Db2xvcl9QYWlyczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gTmF0dXJhbAorICAgPGI+aXM8L2I+CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzODlfNyI+UmVzdWx0PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzg5XzciPlJlc3VsdDwvQT4sICJDT0xPUl9QQUlSUyIpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5yZXR1cm48L2I+IE5hdHVyYWwgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzODlfNyI+UmVzdWx0PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQyNF8xMyI+TnVtYmVyX09mX0NvbG9yX1BhaXJzPC9BPjsKKworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzOTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTRfMTQiPlRyYW5zZm9ybV9Db29yZGluYXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzOTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxNV83Ij5XPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjM5OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE2XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIzOTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxN183Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxOF83Ij5EaXI8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODEzXzkiPlRyYW5zZm9ybV9EaXJlY3Rpb248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTNfMzMiPkZyb21fU2NyZWVuPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDAyXzEyIj5JbnRfQWNjZXNzPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4gPGI+YWxsPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDNfMTYiPlRyYW5zZm9ybTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDNfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDNfMTYiPlc8L0E+PC9GT05UPiAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQwNF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQwM18xNiI+WTwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDNfMTYiPlg8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDJfMTIiPkludF9BY2Nlc3M8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDVfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDNfMTYiPkRpcjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFRyYW5zZm9ybSwgIndtb3VzZV90cmFmbyIpOworCisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDhfNyI+WDwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTdfNyI+Q29sdW1uPC9BPik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MDlfNyI+WTwvQT48L0ZPTlQ+IDogPGI+YWxpYXNlZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTZfNyI+TGluZTwvQT4pOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDEwXzciPkQ8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDExXzciPlI8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxOF83Ij5EaXI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxM180NiI+VG9fU2NyZWVuPC9BPiA8Yj50aGVuPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQxMF83Ij5EPC9BPiA6PSAxOworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDExXzciPlI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDNfMTYiPlRyYW5zZm9ybTwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTVfNyI+VzwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MDlfNyI+WTwvQT4nPGI+QWNjZXNzPC9iPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQwOF83Ij5YPC9BPic8Yj5BY2Nlc3M8L2I+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDEwXzciPkQ8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDExXzciPlI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzc1XzQiPkN1cnNlc19GYWxzZTwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbHNlPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgxNl83Ij5MaW5lPC9BPiAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDA5XzciPlk8L0E+KTsKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTdfNyI+Q29sdW1uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDA4XzciPlg8L0E+KTsKKyAgICAgIDxiPmVuZDwvYj4gPGI+aWY8L2I+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODE0XzE0Ij5UcmFuc2Zvcm1fQ29vcmRpbmF0ZXM8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MjVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MzFfMTQiPlVzZV9EZWZhdWx0X0NvbG9yczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQyNl8xNiI+Q19Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENfVXNlX0RlZmF1bHRfQ29sb3JzLCAidXNlX2RlZmF1bHRfY29sb3JzIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MjhfNyI+RXJyPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQyNl8xNiI+Q19Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+OworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQyOF83Ij5FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MzFfMTQiPlVzZV9EZWZhdWx0X0NvbG9yczwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDM1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODM2XzE0Ij5Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDM1XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODM2XzM3Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yODVfNCI+RGVmYXVsdF9Db2xvcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MzZfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MzdfMzciPkJhY2s8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI4NV80Ij5EZWZhdWx0X0NvbG9yPC9BPikKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQzOF8xNiI+Q19Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDM4XzQxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDM4XzE2Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0MzlfNDEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MzhfMTYiPkJhY2s8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIENfQXNzdW1lX0RlZmF1bHRfQ29sb3JzLCAiYXNzdW1lX2RlZmF1bHRfY29sb3JzIik7CisKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ0Ml83Ij5FcnI8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDM4XzE2Ij5DX0Fzc3VtZV9EZWZhdWx0X0NvbG9yczwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODM2XzM3Ij5Gb3JlPC9BPiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MzdfMzciPkJhY2s8L0E+KSk7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDQyXzciPkVycjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgzNl8xNCI+QXNzdW1lX0RlZmF1bHRfQ29sb3JzPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NTBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NDZfMTMiPkN1cnNlc19WZXJzaW9uPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBTdHJpbmcKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ1Ml8xNiI+Y3Vyc2VzX3ZlcnNpb25DPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBjaGFyc19wdHI7CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgY3Vyc2VzX3ZlcnNpb25DLCAiY3Vyc2VzX3ZlcnNpb24iKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ1NF83Ij5SZXN1bHQ8L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiBjaGFyc19wdHIgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ1Ml8xNiI+Y3Vyc2VzX3ZlcnNpb25DPC9BPjsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfMTIxXzEzIj5GaWxsX1N0cmluZzwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NTRfNyI+UmVzdWx0PC9BPik7CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NDZfMTMiPkN1cnNlc19WZXJzaW9uPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODU5XzE0Ij5DdXJzZXNfRnJlZV9BbGw8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgICAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDYwXzE3Ij5jdXJzZXNfZnJlZWFsbDwvQT48L0ZPTlQ+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIGN1cnNlc19mcmVlYWxsLCAiX25jX2ZyZWVhbGwiKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBVc2UgdGhpcyBvbmx5IGZvciB0ZXN0aW5nOiB5b3UgY2Fubm90IHVzZSBjdXJzZXMgYWZ0ZXIgY2FsbGluZyBpdCw8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgc28gaXQgaGFzIHRvIGJlIHRoZSAibGFzdCIgdGhpbmcgZG9uZSBiZWZvcmUgZXhpdGluZyB0aGUgcHJvZ3JhbS48L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyB3aWxsIG5vdCByZWFsbHkgZnJlZSBBTEwgb2YgbWVtb3J5IHVzZWQgYnkgY3Vyc2VzLiAgVGhhdCBpczwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBiZWNhdXNlIGl0IGNhbm5vdCBmcmVlIHRoZSBtZW1vcnkgdXNlZCBmb3Igc3Rkb3V0J3Mgc2V0YnVmLiAgVGhlPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIF9uY19mcmVlX2FuZF9leGl0KCkgcHJvY2VkdXJlIGNhbiBkbyB0aGF0LCBidXQgaXQgY2FuIGJlIGludm9rZWQ8L0VNPjwvRk9OVD4KKyAgICAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgc2FmZWx5IG9ubHkgZnJvbSBDIC0gYW5kIGFnYWluLCB0aGF0IG9ubHkgYXMgdGhlICJsYXN0IiB0aGluZyBkb25lPC9FTT48L0ZPTlQ+CisgICAgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGJlZm9yZSBleGl0aW5nIHRoZSBwcm9ncmFtLjwvRU0+PC9GT05UPgorICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ2MF8xNyI+Y3Vyc2VzX2ZyZWVhbGw8L0E+OworICAgPGI+ZW5kPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODU5XzE0Ij5DdXJzZXNfRnJlZV9BbGw8L0E+OworPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ3M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1MV8xMyI+VXNlX0V4dGVuZGVkX05hbWVzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ3M18zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1MV8zMyI+RW5hYmxlPC9BPjwvRk9OVD4gOiBCb29sZWFuKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW4KKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ3NV8xNiI+dXNlX2V4dGVuZGVkX25hbWVzQzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0NzVfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NzVfMTYiPmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHVzZV9leHRlbmRlZF9uYW1lc0MsICJ1c2VfZXh0ZW5kZWRfbmFtZXMiKTsKKworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDc4XzciPlJlczwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+IDo9CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDc1XzE2Ij51c2VfZXh0ZW5kZWRfbmFtZXNDPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyNl85Ij5DdXJzZXNfQm9vbDwvQT4gKEJvb2xlYW4nUG9zICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODUxXzMzIj5FbmFibGU8L0E+KSkpOworICAgPGI+YmVnaW48L2I+CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ3OF83Ij5SZXM8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjdfNCI+Q3Vyc2VzX0Jvb2xfRmFsc2U8L0E+KSA8Yj50aGVuPC9iPgorICAgICAgICAgPGI+cmV0dXJuPC9iPiBGYWxzZTsKKyAgICAgIDxiPmVsc2U8L2I+CisgICAgICAgICA8Yj5yZXR1cm48L2I+IFRydWU7CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg1MV8xMyI+VXNlX0V4dGVuZGVkX05hbWVzPC9BPjsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDg4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODY3XzE0Ij5TY3JlZW5fRHVtcF9Ub19GaWxlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ4OF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg2N18zNSI+RmlsZW5hbWU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBTdHJpbmcpCisgICA8Yj5pczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0OTBfMTYiPnNjcl9kdW1wPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjQ5MF8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ5MF8xNiI+ZjwvQT48L0ZPTlQ+IDogY2hhcl9hcnJheSkgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCBzY3JfZHVtcCwgInNjcl9kdW1wIik7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI0OTJfNyI+VHh0PC9BPjwvRk9OVD4gICAgOiBjaGFyX2FycmF5ICgwIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NjdfMzUiPkZpbGVuYW1lPC9BPidMZW5ndGgpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNDkzXzciPkxlbmd0aDwvQT48L0ZPTlQ+IDogc2l6ZV90OworICAgPGI+YmVnaW48L2I+CisgICAgICBUb19DICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODY3XzM1Ij5GaWxlbmFtZTwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0OTJfNyI+VHh0PC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ5M183Ij5MZW5ndGg8L0E+KTsKKyAgICAgIDxiPmlmPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNzJfNCI+Q3Vyc2VzX0VycjwvQT4gPSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDkwXzE2Ij5zY3JfZHVtcDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0OTJfNyI+VHh0PC9BPikgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg2N18xNCI+U2NyZWVuX0R1bXBfVG9fRmlsZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTAxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODcxXzE0Ij5TY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTAxXzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODcxXzQwIj5GaWxlbmFtZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUwM18xNiI+c2NyX3Jlc3RvcmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTAzXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTAzXzE2Ij5mPC9BPjwvRk9OVD4gOiBjaGFyX2FycmF5KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIHNjcl9yZXN0b3JlLCAic2NyX3Jlc3RvcmUiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUwNV83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3MV80MCI+RmlsZW5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MDZfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzFfNDAiPkZpbGVuYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUwNV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTA2XzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MDNfMTYiPnNjcl9yZXN0b3JlPC9BPiAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUwNV83Ij5UeHQ8L0E+KSAgPGI+dGhlbjwvYj4KKyAgICAgICAgIDxiPnJhaXNlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zODNfNCI+Q3Vyc2VzX0V4Y2VwdGlvbjwvQT47CisgICAgICA8Yj5lbmQ8L2I+IDxiPmlmPC9iPjsKKyAgIDxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3MV8xNCI+U2NyZWVuX1Jlc3RvcmVfRnJvbV9GaWxlPC9BPjsKKworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzVfMTQiPlNjcmVlbl9Jbml0X0Zyb21fRmlsZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MTRfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzVfMzciPkZpbGVuYW1lPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nKQorICAgPGI+aXM8L2I+CisgICAgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTE2XzE2Ij5zY3JfaW5pdDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MTZfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MTZfMTYiPmY8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgc2NyX2luaXQsICJzY3JfaW5pdCIpOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTE4XzciPlR4dDwvQT48L0ZPTlQ+ICAgIDogY2hhcl9hcnJheSAoMCAuLiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc1XzM3Ij5GaWxlbmFtZTwvQT4nTGVuZ3RoKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUxOV83Ij5MZW5ndGg8L0E+PC9GT05UPiA6IHNpemVfdDsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgVG9fQyAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3NV8zNyI+RmlsZW5hbWU8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTE4XzciPlR4dDwvQT4sIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MTlfNyI+TGVuZ3RoPC9BPik7CisgICAgICA8Yj5pZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+ID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUxNl8xNiI+c2NyX2luaXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTE4XzciPlR4dDwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzVfMTQiPlNjcmVlbl9Jbml0X0Zyb21fRmlsZTwvQT47CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTI3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc5XzE0Ij5TY3JlZW5fU2V0X0ZpbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTI3XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODc5XzMxIj5GaWxlbmFtZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZykKKyAgIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUyOV8xNiI+c2NyX3NldDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MjlfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MjlfMTYiPmY8L0E+PC9GT05UPiA6IGNoYXJfYXJyYXkpIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT47CisgICAgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgc2NyX3NldCwgInNjcl9zZXQiKTsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjUzMV83Ij5UeHQ8L0E+PC9GT05UPiAgICA6IGNoYXJfYXJyYXkgKDAgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg3OV8zMSI+RmlsZW5hbWU8L0E+J0xlbmd0aCk7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1MzJfNyI+TGVuZ3RoPC9BPjwvRk9OVD4gOiBzaXplX3Q7CisgICA8Yj5iZWdpbjwvYj4KKyAgICAgIFRvX0MgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzlfMzEiPkZpbGVuYW1lPC9BPiwgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUzMV83Ij5UeHQ8L0E+LCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTMyXzciPkxlbmd0aDwvQT4pOworICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl83Ml80Ij5DdXJzZXNfRXJyPC9BPiA9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1MjlfMTYiPnNjcl9zZXQ8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTMxXzciPlR4dDwvQT4pIDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4NzlfMTQiPlNjcmVlbl9TZXRfRmlsZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU0MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkxMV8xNCI+UmVzaXplPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU0MF8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkxMV8yMiI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTQxXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTEyXzIyIj5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTQyXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTEzXzIyIj5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pIDxiPmlzPC9iPgorICAgICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjU0M18xNiI+d3Jlc2l6ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NDNfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDNfMTYiPndpbjwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI1NDRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDNfMTYiPmxpbmVzPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXMtYXV4X19hZHMuaHRtI3JlZl81NV8xMiI+Q19JbnQ8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yNTQ1XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTQzXzE2Ij5jb2x1bW5zPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzLWF1eF9fYWRzLmh0bSNyZWZfNTVfMTIiPkNfSW50PC9BPjsKKyAgICAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCB3cmVzaXplKTsKKyAgIDxiPmJlZ2luPC9iPgorICAgICAgPGI+aWY8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDNfMTYiPndyZXNpemU8L0E+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTExXzIyIj5XaW48L0E+LAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MTJfMjIiPk51bWJlcl9PZl9MaW5lczwvQT4pLAorICAgICAgICAgICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzU1XzEyIj5DX0ludDwvQT4gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MTNfMjIiPk51bWJlcl9PZl9Db2x1bW5zPC9BPikpID0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy1hdXhfX2Fkcy5odG0jcmVmXzcyXzQiPkN1cnNlc19FcnI8L0E+IDxiPnRoZW48L2I+CisgICAgICAgICA8Yj5yYWlzZTwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+OworICAgICAgPGI+ZW5kPC9iPiA8Yj5pZjwvYj47CisgICA8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MTFfMTQiPlJlc2l6ZTwvQT47Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYWRhL3Rlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMTE5NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtCkBAIC0wLDAgKzEsMTkzNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8SFRNTD48SEVBRD48VElUTEU+dGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLWN1cnNlcy5hZHMgPC9IMT48L0RJVj48SFI+Cis8UFJFPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5nbmF0LmNvbSI+R05BVDwvQT4gbmN1cnNlcyBCaW5kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2PC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFZlcnNpb24gQ29udHJvbDo8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQFJldmlzaW9uOiAxLjQxIEA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQERhdGU6IDIwMDcvMDUvMDUgMjA6MzM6NTIgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDA8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgY3Vyc2VzIGJpbmRpbmcuPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgbW9kdWxlIGlzIGdlbmVyYXRlZC4gUGxlYXNlIGRvbid0IGNoYW5nZSBpdCBtYW51YWxseSE8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUnVuIHRoZSBnZW5lcmF0b3IgaW5zdGVhZC48L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfDwvRU0+PC9GT05UPgorPGI+d2l0aDwvYj4gU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHM7Cis8Yj53aXRoPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQzsgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFdlIG5lZWQgdGhpcyBmb3Igc29tZSBhc3NlcnRpb25zLjwvRU0+PC9GT05UPgorCis8Yj5wYWNrYWdlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0jcmVmXzQyXzkiPlRlcm1pbmFsX0ludGVyZmFjZTwvQT4uPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80OV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTBfMzMiPkN1cnNlczwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgPGI+cHJhZ21hPC9iPiBQcmVlbGFib3JhdGUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPi48QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80OV8yOCI+Q3Vyc2VzPC9BPik7CisgICA8Yj5wcmFnbWE8L2I+IExpbmtlcl9PcHRpb25zICgiLWxuY3Vyc2VzdyIpOworCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUzXzQiPk5DX01ham9yX1ZlcnNpb248L0E+PC9GT05UPiA6IDxiPmNvbnN0YW50PC9iPiA6PSA1OyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE1ham9yIHZlcnNpb24gb2YgdGhlIGxpYnJhcnk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTRfNCI+TkNfTWlub3JfVmVyc2lvbjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDo9IDY7IDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTWlub3IgdmVyc2lvbiBvZiB0aGUgbGlicmFyeTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NV80Ij5OQ19WZXJzaW9uPC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gU3RyaW5nIDo9ICI1LjYiOyAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBWZXJzaW9uIG9mIGxpYnJhcnk8L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81N185Ij5XaW5kb3c8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cHJpdmF0ZTwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4XzQiPk51bGxfV2luZG93PC9BPjwvRk9OVD4gOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA8Yj5pczwvYj4gPGI+bmV3PC9iPiBOYXR1cmFsOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGxpbmUgY29vcmRpbmF0ZTwvRU0+PC9GT05UPgorICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiBOYXR1cmFsOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGNvbHVtbiBjb29yZGluYXRlPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+PC9GT05UPiAgIDxiPmlzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPiAgIDxiPnJhbmdlPC9iPiAxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+J0xhc3Q7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFR5cGUgdG8gY291bnQgbGluZXMuIFdlIGRvIG5vdCBhbGxvdyBudWxsIHdpbmRvd3MsIHNvIG11c3QgYmUgcG9zaXRpdmU8L0VNPjwvRk9OVD4KKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+IDxiPnJhbmdlPC9iPiAxIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4nTGFzdDsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVHlwZSB0byBjb3VudCBjb2x1bW5zLiBXZSBkbyBub3QgYWxsb3cgbnVsbCB3aW5kb3dzLCBzbyBtdXN0IGJlIHBvc2l0aXZlPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjhfOSI+S2V5X0NvZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bmV3PC9iPiBJbnRlZ2VyOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGF0IGlzIGFueXRoaW5nIGluY2x1ZGluZyByZWFsIGNoYXJhY3RlcnMsIHNwZWNpYWwga2V5cyBhbmQgbG9naWNhbDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICByZXF1ZXN0IGNvZGVzLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEZJWE1FOiBUaGUgIi0xIiBzaG91bGQgYmUgQ3Vyc2VzX0VycjwvRU0+PC9GT05UPgorICAgPGI+c3VidHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82OF85Ij5LZXlfQ29kZTwvQT4gPGI+cmFuZ2U8L2I+IC0xIC4uIDgjNzc3IzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBhcmUgdGhlIGNvZGVzIHRoYXQgcG90ZW50aWFsbHkgcmVwcmVzZW50IGEgcmVhbCBrZXlzdHJva2UuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBhbGwgY29kZXMgbWF5IGJlIHBvc3NpYmxlIG9uIGEgc3BlY2lmaWMgdGVybWluYWwuIFRvIGNoZWNrIHRoZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBhdmFpbGFiaWxpdHkgb2YgYSBzcGVjaWFsIGtleSwgdGhlIEhhc19LZXkgZnVuY3Rpb24gaXMgcHJvdmlkZWQuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+CisgICAgIDxiPnJhbmdlPC9iPiA4IzQwMCMgLi4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+J0xhc3Q7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFR5cGUgZm9yIGEgZnVuY3Rpb24tIG9yIHNwZWNpYWwga2V5IG51bWJlcjwvRU0+PC9GT05UPgorCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgyXzEyIj5Ob3JtYWxfS2V5X0NvZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+IDxiPnJhbmdlPC9iPgorICAgICBDaGFyYWN0ZXInUG9zIChDaGFyYWN0ZXInRmlyc3QpIC4uIENoYXJhY3RlcidQb3MgKENoYXJhY3RlcidMYXN0KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBhcmUgdGhlIGNvZGVzIGZvciByZWd1bGFyIChpbmNsLiBub24tZ3JhcGhpY2FsKSBjaGFyYWN0ZXJzLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIENvbnN0YW50cyBmb3IgZnVuY3Rpb24tIGFuZCBzcGVjaWFsIGtleXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OF80Ij5LZXlfTm9uZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OV80Ij5LZXlfQ29kZV9ZZXM8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MF80Ij5LZXlfTWluPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MV80Ij5LZXlfQnJlYWs8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Ml80Ij5LZXlfQ3Vyc29yX0Rvd248L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85M180Ij5LZXlfQ3Vyc29yX1VwPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NF80Ij5LZXlfQ3Vyc29yX0xlZnQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NV80Ij5LZXlfQ3Vyc29yX1JpZ2h0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85Nl80Ij5LZXlfSG9tZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85N180Ij5LZXlfQmFja3NwYWNlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MDcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OF80Ij5LZXlfRjA8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MTAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OV80Ij5LZXlfRjE8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MTEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDBfNCI+S2V5X0YyPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDEyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxXzQiPktleV9GMzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQxMyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMl80Ij5LZXlfRjQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MTQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDNfNCI+S2V5X0Y1PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDE1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0XzQiPktleV9GNjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQxNiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNV80Ij5LZXlfRjc8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MTcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDZfNCI+S2V5X0Y4PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDIwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA3XzQiPktleV9GOTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQyMSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOF80Ij5LZXlfRjEwPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MjIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDlfNCI+S2V5X0YxMTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDIzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwXzQiPktleV9GMTI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQyNCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMV80Ij5LZXlfRjEzPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MjUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTJfNCI+S2V5X0YxNDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDI2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzXzQiPktleV9GMTU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQyNyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNF80Ij5LZXlfRjE2PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MzAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTVfNCI+S2V5X0YxNzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDMxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2XzQiPktleV9GMTg8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQzMiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExN180Ij5LZXlfRjE5PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MzMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMThfNCI+S2V5X0YyMDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDM0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5XzQiPktleV9GMjE8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQzNSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMF80Ij5LZXlfRjIyPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM0MzYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjFfNCI+S2V5X0YyMzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNDM3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIyXzQiPktleV9GMjQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzQ0MCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyM180Ij5LZXlfRGVsZXRlX0xpbmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MTAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjRfNCI+S2V5X0luc2VydF9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTExIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1XzQiPktleV9EZWxldGVfQ2hhcjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUxMiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNl80Ij5LZXlfSW5zZXJ0X0NoYXI8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MTMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjdfNCI+S2V5X0V4aXRfSW5zZXJ0X01vZGU8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTE0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4XzQiPktleV9DbGVhcl9TY3JlZW48L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUxNSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOV80Ij5LZXlfQ2xlYXJfRW5kX09mX1NjcmVlbjwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MTYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzBfNCI+S2V5X0NsZWFyX0VuZF9PZl9MaW5lPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTE3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMxXzQiPktleV9TY3JvbGxfMV9Gb3J3YXJkPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUyMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMl80Ij5LZXlfU2Nyb2xsXzFfQmFja3dhcmQ8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MjEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzNfNCI+S2V5X05leHRfUGFnZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTIyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0XzQiPktleV9QcmV2aW91c19QYWdlPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUyMyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNV80Ij5LZXlfU2V0X1RhYjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MjQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzZfNCI+S2V5X0NsZWFyX1RhYjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTI1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3XzQiPktleV9DbGVhcl9BbGxfVGFiczwvQT48L0ZPTlQ+ICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUyNiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOF80Ij5LZXlfRW50ZXJfT3JfU2VuZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MjcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzlfNCI+S2V5X1NvZnRfUmVzZXQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTMwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQwXzQiPktleV9SZXNldDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUzMSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MV80Ij5LZXlfUHJpbnQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MzIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDJfNCI+S2V5X0JvdHRvbTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTMzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzXzQiPktleV9VcHBlcl9MZWZ0X09mX0tleXBhZDwvQT48L0ZPTlQ+ICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUzNCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NF80Ij5LZXlfVXBwZXJfUmlnaHRfT2ZfS2V5cGFkPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1MzUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDVfNCI+S2V5X0NlbnRlcl9PZl9LZXlwYWQ8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTM2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ2XzQiPktleV9Mb3dlcl9MZWZ0X09mX0tleXBhZDwvQT48L0ZPTlQ+ICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzUzNyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0N180Ij5LZXlfTG93ZXJfUmlnaHRfT2ZfS2V5cGFkPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NDAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDhfNCI+S2V5X0JhY2tfVGFiPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTQxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5XzQiPktleV9CZWdpbm5pbmc8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU0MiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MF80Ij5LZXlfQ2FuY2VsPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NDMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTFfNCI+S2V5X0Nsb3NlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTQ0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyXzQiPktleV9Db21tYW5kPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU0NSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1M180Ij5LZXlfQ29weTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NDYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTRfNCI+S2V5X0NyZWF0ZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTQ3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1XzQiPktleV9FbmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU1MCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1Nl80Ij5LZXlfRXhpdDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NTEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTdfNCI+S2V5X0ZpbmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTUyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU4XzQiPktleV9IZWxwPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU1MyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OV80Ij5LZXlfTWFyazwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NTQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjBfNCI+S2V5X01lc3NhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTU1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxXzQiPktleV9Nb3ZlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU1NiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2Ml80Ij5LZXlfTmV4dDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NTcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjNfNCI+S2V5X09wZW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTYwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY0XzQiPktleV9PcHRpb25zPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU2MSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NV80Ij5LZXlfUHJldmlvdXM8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NjIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjZfNCI+S2V5X1JlZG88L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTYzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY3XzQiPktleV9SZWZlcmVuY2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU2NCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OF80Ij5LZXlfUmVmcmVzaDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NjUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjlfNCI+S2V5X1JlcGxhY2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTY2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcwXzQiPktleV9SZXN0YXJ0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU2NyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MV80Ij5LZXlfUmVzdW1lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NzAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzJfNCI+S2V5X1NhdmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTcxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczXzQiPktleV9TaGlmdF9CZWdpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU3MiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NF80Ij5LZXlfU2hpZnRfQ2FuY2VsPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NzMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzVfNCI+S2V5X1NoaWZ0X0NvbW1hbmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTc0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2XzQiPktleV9TaGlmdF9Db3B5PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzU3NSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3N180Ij5LZXlfU2hpZnRfQ3JlYXRlPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM1NzYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzhfNCI+S2V5X1NoaWZ0X0RlbGV0ZV9DaGFyPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNTc3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc5XzQiPktleV9TaGlmdF9EZWxldGVfTGluZTwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYwMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MF80Ij5LZXlfU2VsZWN0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MDEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODFfNCI+S2V5X1NoaWZ0X0VuZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjAyIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgyXzQiPktleV9TaGlmdF9DbGVhcl9FbmRfT2ZfTGluZTwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYwMyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4M180Ij5LZXlfU2hpZnRfRXhpdDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MDQjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODRfNCI+S2V5X1NoaWZ0X0ZpbmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjA1IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1XzQiPktleV9TaGlmdF9IZWxwPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYwNiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4Nl80Ij5LZXlfU2hpZnRfSG9tZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MDcjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODdfNCI+S2V5X1NoaWZ0X0luc2VydF9DaGFyPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjEwIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg4XzQiPktleV9TaGlmdF9DdXJzb3JfTGVmdDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYxMSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4OV80Ij5LZXlfU2hpZnRfTWVzc2FnZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MTIjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTBfNCI+S2V5X1NoaWZ0X01vdmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjEzIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxXzQiPktleV9TaGlmdF9OZXh0X1BhZ2U8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYxNCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5Ml80Ij5LZXlfU2hpZnRfT3B0aW9uczwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MTUjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTNfNCI+S2V5X1NoaWZ0X1ByZXZpb3VzX1BhZ2U8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjE2IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk0XzQiPktleV9TaGlmdF9QcmludDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYxNyM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5NV80Ij5LZXlfU2hpZnRfUmVkbzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MjAjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTZfNCI+S2V5X1NoaWZ0X1JlcGxhY2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjIxIzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTk3XzQiPktleV9TaGlmdF9DdXJzb3JfUmlnaHQ8L0E+PC9GT05UPiAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYyMiM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5OF80Ij5LZXlfU2hpZnRfUmVzdW1lPC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MjMjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xOTlfNCI+S2V5X1NoaWZ0X1NhdmU8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjI0IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAwXzQiPktleV9TaGlmdF9TdXNwZW5kPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYyNSM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwMV80Ij5LZXlfU2hpZnRfVW5kbzwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MjYjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDJfNCI+S2V5X1N1c3BlbmQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjI3IzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjAzXzQiPktleV9VbmRvPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA6PSA4IzYzMCM7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIwNF80Ij5LZXlfTW91c2U8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gOj0gOCM2MzEjOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDVfNCI+S2V5X1Jlc2l6ZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDo9IDgjNjMyIzsKKworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yMDdfNCI+S2V5X01heDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+CisgICAgIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPidMYXN0OworCisgICA8Yj5zdWJ0eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzIxMF8xMiI+VXNlcl9LZXlfQ29kZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82OF85Ij5LZXlfQ29kZTwvQT4KKyAgICAgPGI+cmFuZ2U8L2I+ICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDdfNCI+S2V5X01heDwvQT4gKyAxMjkpIC4uIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY4XzkiPktleV9Db2RlPC9BPidMYXN0OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGlzIHJlc2VydmVkIGZvciB1c2VyIGRlZmluZWQga2V5IGNvZGVzLiBUaGUgcmFuZ2UgYmV0d2VlbiBLZXlfTWF4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGFuZCB0aGUgZmlyc3QgdXNlciBjb2RlIGlzIHJlc2VydmVkIGZvciBzdWJzeXN0ZW1zIGxpa2UgbWVudSBhbmQgZm9ybXMuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRm9yIHRob3NlIHdobyBsaWtlIHRvIHVzZSB0aGUgb3JpZ2luYWwga2V5IG5hbWVzIHdlIHByb2R1Y2UgdGhlbSB3ZXJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXkgbWF5IGRpZmZlciBpbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBsb3dlci91cHBlciBjYXNlLjwvRU0+PC9GT05UPgorICAgS0VZX0RPV04gICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85Ml80Ij5LZXlfQ3Vyc29yX0Rvd248L0E+OworICAgS0VZX1VQICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85M180Ij5LZXlfQ3Vyc29yX1VwPC9BPjsKKyAgIEtFWV9MRUZUICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTRfNCI+S2V5X0N1cnNvcl9MZWZ0PC9BPjsKKyAgIEtFWV9SSUdIVCAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTVfNCI+S2V5X0N1cnNvcl9SaWdodDwvQT47CisgICBLRVlfREwgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyM180Ij5LZXlfRGVsZXRlX0xpbmU8L0E+OworICAgS0VZX0lMICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjRfNCI+S2V5X0luc2VydF9MaW5lPC9BPjsKKyAgIEtFWV9EQyAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1XzQiPktleV9EZWxldGVfQ2hhcjwvQT47CisgICBLRVlfSUMgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNl80Ij5LZXlfSW5zZXJ0X0NoYXI8L0E+OworICAgS0VZX0VJQyAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjdfNCI+S2V5X0V4aXRfSW5zZXJ0X01vZGU8L0E+OworICAgS0VZX0NMRUFSICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjhfNCI+S2V5X0NsZWFyX1NjcmVlbjwvQT47CisgICBLRVlfRU9TICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyOV80Ij5LZXlfQ2xlYXJfRW5kX09mX1NjcmVlbjwvQT47CisgICBLRVlfRU9MICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzMF80Ij5LZXlfQ2xlYXJfRW5kX09mX0xpbmU8L0E+OworICAgS0VZX1NGICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzFfNCI+S2V5X1Njcm9sbF8xX0ZvcndhcmQ8L0E+OworICAgS0VZX1NSICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzJfNCI+S2V5X1Njcm9sbF8xX0JhY2t3YXJkPC9BPjsKKyAgIEtFWV9OUEFHRSAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMzXzQiPktleV9OZXh0X1BhZ2U8L0E+OworICAgS0VZX1BQQUdFICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzRfNCI+S2V5X1ByZXZpb3VzX1BhZ2U8L0E+OworICAgS0VZX1NUQUIgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzVfNCI+S2V5X1NldF9UYWI8L0E+OworICAgS0VZX0NUQUIgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzZfNCI+S2V5X0NsZWFyX1RhYjwvQT47CisgICBLRVlfQ0FUQUIgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEzN180Ij5LZXlfQ2xlYXJfQWxsX1RhYnM8L0E+OworICAgS0VZX0VOVEVSICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzhfNCI+S2V5X0VudGVyX09yX1NlbmQ8L0E+OworICAgS0VZX1NSRVNFVCAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMzlfNCI+S2V5X1NvZnRfUmVzZXQ8L0E+OworICAgS0VZX0xMICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDJfNCI+S2V5X0JvdHRvbTwvQT47CisgICBLRVlfQTEgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0M180Ij5LZXlfVXBwZXJfTGVmdF9PZl9LZXlwYWQ8L0E+OworICAgS0VZX0EzICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDRfNCI+S2V5X1VwcGVyX1JpZ2h0X09mX0tleXBhZDwvQT47CisgICBLRVlfQjIgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0NV80Ij5LZXlfQ2VudGVyX09mX0tleXBhZDwvQT47CisgICBLRVlfQzEgICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0Nl80Ij5LZXlfTG93ZXJfTGVmdF9PZl9LZXlwYWQ8L0E+OworICAgS0VZX0MzICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDdfNCI+S2V5X0xvd2VyX1JpZ2h0X09mX0tleXBhZDwvQT47CisgICBLRVlfQlRBQiAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OF80Ij5LZXlfQmFja19UYWI8L0E+OworICAgS0VZX0JFRyAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDlfNCI+S2V5X0JlZ2lubmluZzwvQT47CisgICBLRVlfU0JFRyAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3M180Ij5LZXlfU2hpZnRfQmVnaW48L0E+OworICAgS0VZX1NDQU5DRUwgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzRfNCI+S2V5X1NoaWZ0X0NhbmNlbDwvQT47CisgICBLRVlfU0NPTU1BTkQgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NV80Ij5LZXlfU2hpZnRfQ29tbWFuZDwvQT47CisgICBLRVlfU0NPUFkgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3Nl80Ij5LZXlfU2hpZnRfQ29weTwvQT47CisgICBLRVlfU0NSRUFURSAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3N180Ij5LZXlfU2hpZnRfQ3JlYXRlPC9BPjsKKyAgIEtFWV9TREMgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc4XzQiPktleV9TaGlmdF9EZWxldGVfQ2hhcjwvQT47CisgICBLRVlfU0RMICAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3OV80Ij5LZXlfU2hpZnRfRGVsZXRlX0xpbmU8L0E+OworICAgS0VZX1NFTkQgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODFfNCI+S2V5X1NoaWZ0X0VuZDwvQT47CisgICBLRVlfU0VPTCAgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4Ml80Ij5LZXlfU2hpZnRfQ2xlYXJfRW5kX09mX0xpbmU8L0E+OworICAgS0VZX1NFWElUICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODNfNCI+S2V5X1NoaWZ0X0V4aXQ8L0E+OworICAgS0VZX1NGSU5EICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODRfNCI+S2V5X1NoaWZ0X0ZpbmQ8L0E+OworICAgS0VZX1NIRUxQICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODVfNCI+S2V5X1NoaWZ0X0hlbHA8L0E+OworICAgS0VZX1NIT01FICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODZfNCI+S2V5X1NoaWZ0X0hvbWU8L0E+OworICAgS0VZX1NJQyAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODdfNCI+S2V5X1NoaWZ0X0luc2VydF9DaGFyPC9BPjsKKyAgIEtFWV9TTEVGVCAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTg4XzQiPktleV9TaGlmdF9DdXJzb3JfTGVmdDwvQT47CisgICBLRVlfU01FU1NBR0UgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4OV80Ij5LZXlfU2hpZnRfTWVzc2FnZTwvQT47CisgICBLRVlfU01PVkUgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MF80Ij5LZXlfU2hpZnRfTW92ZTwvQT47CisgICBLRVlfU05FWFQgICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MV80Ij5LZXlfU2hpZnRfTmV4dF9QYWdlPC9BPjsKKyAgIEtFWV9TT1BUSU9OUyAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkyXzQiPktleV9TaGlmdF9PcHRpb25zPC9BPjsKKyAgIEtFWV9TUFJFVklPVVMgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTkzXzQiPktleV9TaGlmdF9QcmV2aW91c19QYWdlPC9BPjsKKyAgIEtFWV9TUFJJTlQgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTk0XzQiPktleV9TaGlmdF9QcmludDwvQT47CisgICBLRVlfU1JFRE8gICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5NV80Ij5LZXlfU2hpZnRfUmVkbzwvQT47CisgICBLRVlfU1JFUExBQ0UgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5Nl80Ij5LZXlfU2hpZnRfUmVwbGFjZTwvQT47CisgICBLRVlfU1JJR0hUICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+IDxiPnJlbmFtZXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5N180Ij5LZXlfU2hpZnRfQ3Vyc29yX1JpZ2h0PC9BPjsKKyAgIEtFWV9TUlNVTUUgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTk4XzQiPktleV9TaGlmdF9SZXN1bWU8L0E+OworICAgS0VZX1NTQVZFICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xOTlfNCI+S2V5X1NoaWZ0X1NhdmU8L0E+OworICAgS0VZX1NTVVNQRU5EICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDBfNCI+S2V5X1NoaWZ0X1N1c3BlbmQ8L0E+OworICAgS0VZX1NVTkRPICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yMDFfNCI+S2V5X1NoaWZ0X1VuZG88L0E+OworCis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5yYW5nZTwvYj4gLTEgLi4gSW50ZWdlciAoPEEgSFJFRj0iaW50ZXJmYWNfX2Fkcy5odG0jcmVmXzM4XzkiPkludGVyZmFjZXM8L0E+LkMuc2hvcnQnTGFzdCk7CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+J1NpemUgPGI+dXNlPC9iPiA8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5zaG9ydCdTaXplOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAobiljdXJzZXMgdXNlcyBhIHNob3J0IGZvciB0aGUgY29sb3IgaW5kZXg8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIG1vZGVsIGlzLCB0aGF0IGEgQ29sb3JfTnVtYmVyIGlzIGFuIGluZGV4IGludG8gYW4gYXJyYXkgb2Y8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgKHBvdGVudGlhbGx5KSBkZWZpbmFibGUgY29sb3JzLiBTb21lIG9mIHRob3NlIGluZGljZXMgYXJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByZWRlZmluZWQgKHNlZSBiZWxvdyksIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCByZWFsbHkgZXhpc3QuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg1XzQiPkRlZmF1bHRfQ29sb3I8L0E+PC9GT05UPiAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSAtMTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg2XzQiPkJsYWNrPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSAwOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yODdfNCI+UmVkPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+IDo9IDE7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI4OF80Ij5HcmVlbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gMjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjg5XzQiPlllbGxvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSAzOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTBfNCI+Qmx1ZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+IDo9IDQ7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzI5MV80Ij5NYWdlbnRhPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT4gOj0gNTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjkyXzQiPkN5YW48L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSA2OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTNfNCI+V2hpdGU8L0E+PC9GT05UPiAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+IDo9IDc7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5yYW5nZTwvYj4gMCAuLiBJbnRlZ2VyICg8QSBIUkVGPSJpbnRlcmZhY19fYWRzLmh0bSNyZWZfMzhfOSI+SW50ZXJmYWNlczwvQT4uQy5zaG9ydCdMYXN0KTsKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT4nU2l6ZSA8Yj51c2U8L2I+IDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLnNob3J0J1NpemU7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFNvbWUgc3lzdGVtIG1heSBhbGxvdyB0byByZWRlZmluZSBhIGNvbG9yIGJ5IHNldHRpbmcgUkdCIHZhbHVlcy48L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiA8Yj5yYW5nZTwvYj4gMCAuLiAyNTU7CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidTaXplIDxiPnVzZTwvYj4gODsKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzAxXzEyIj5SZWRlZmluYWJsZV9Db2xvcl9QYWlyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA8Yj5yYW5nZTwvYj4gMSAuLiAyNTU7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIChuKWN1cnNlcyByZXNlcnZlcyAxIEJ5dGUgZm9yIHRoZSBjb2xvci1wYWlyIG51bWJlci4gQ29sb3IgUGFpciAwPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGlzIGZpeGVkIChCbGFjayAmYW1wOyBXaGl0ZSkuIEEgY29sb3IgcGFpciBpcyBzaW1wbHkgYSBjb21iaW5hdGlvbiBvZjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0d28gY29sb3JzIGRlc2NyaWJlZCBieSBDb2xvcl9OdW1iZXJzLCBvbmUgZm9yIHRoZSBmb3JlZ3JvdW5kIGFuZDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgb3RoZXIgZm9yIHRoZSBiYWNrZ3JvdW5kPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjwvRk9OVD4gPGI+aXM8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMwOV8xMCI+U3RhbmRfT3V0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxMF8xMCI+VW5kZXJfTGluZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxMV8xMCI+UmV2ZXJzZV9WaWRlbzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxMl8xMCI+Qmxpbms8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxM18xMCI+RGltX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNF8xMCI+Qm9sZF9DaGFyYWN0ZXI8L0E+PC9GT05UPiAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNV8xMCI+QWx0ZXJuYXRlX0NoYXJhY3Rlcl9TZXQ8L0E+PC9GT05UPiA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxNl8xMCI+SW52aXNpYmxlX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxN18xMCI+UHJvdGVjdGVkX0NoYXJhY3RlcjwvQT48L0ZPTlQ+ICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxOF8xMCI+SG9yaXpvbnRhbDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMxOV8xMCI+TGVmdDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMF8xMCI+TG93PC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMV8xMCI+UmlnaHQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyMl8xMCI+VG9wPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzMyM18xMCI+VmVydGljYWw8L0E+PC9GT05UPiAgICAgICAgICAgICAgICA6IEJvb2xlYW47CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5wcmFnbWE8L2I+IENvbnZlbnRpb24gKEMsIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4pOworCisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gPGI+dXNlPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA5XzEwIj5TdGFuZF9PdXQ8L0E+ICAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAwIC4uICAwOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzEwXzEwIj5VbmRlcl9MaW5lPC9BPiAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAxIC4uICAxOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzExXzEwIj5SZXZlcnNlX1ZpZGVvPC9BPiAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAyIC4uICAyOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzEyXzEwIj5CbGluazwvQT4gICAgICAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICAzIC4uICAzOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzEzXzEwIj5EaW1fQ2hhcmFjdGVyPC9BPiAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA0IC4uICA0OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzE0XzEwIj5Cb2xkX0NoYXJhY3RlcjwvQT4gICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA1IC4uICA1OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzE1XzEwIj5BbHRlcm5hdGVfQ2hhcmFjdGVyX1NldDwvQT4gPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA2IC4uICA2OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzE2XzEwIj5JbnZpc2libGVfQ2hhcmFjdGVyPC9BPiAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA3IC4uICA3OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzE3XzEwIj5Qcm90ZWN0ZWRfQ2hhcmFjdGVyPC9BPiAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA4IC4uICA4OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzE4XzEwIj5Ib3Jpem9udGFsPC9BPiAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+ICA5IC4uICA5OworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzE5XzEwIj5MZWZ0PC9BPiAgICAgICAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+IDEwIC4uIDEwOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzIwXzEwIj5Mb3c8L0E+ICAgICAgICAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+IDExIC4uIDExOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzIxXzEwIj5SaWdodDwvQT4gICAgICAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+IDEyIC4uIDEyOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzIyXzEwIj5Ub3A8L0E+ICAgICAgICAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+IDEzIC4uIDEzOworICAgICAgICAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzIzXzEwIj5WZXJ0aWNhbDwvQT4gICAgICAgICAgICAgICAgPGI+YXQ8L2I+IDAgPGI+cmFuZ2U8L2I+IDE0IC4uIDE0OworICAgICAgPGI+ZW5kPC9iPiA8Yj5yZWNvcmQ8L2I+OworICAgPGI+Zm9yPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+J1NpemUgPGI+dXNlPC9iPiAxNjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUGxlYXNlIG5vdGU6IHRoaXMgcmVwLiBjbGF1c2UgaXMgZ2VuZXJhdGVkIGFuZCBtYXkgYmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgICAgICAgIGRpZmZlcmVudCBvbiB5b3VyIHN5c3RlbS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgKG4pY3Vyc2VzIHVzZXMgYWxsIGJ1dCB0aGUgbG93ZXN0IDE2IEJpdHMgZm9yIEF0dHJpYnV0ZXMuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gKDxiPm90aGVyczwvYj4gPSZndDsgRmFsc2UpOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT48L0ZPTlQ+IDxiPmlzPC9iPgorICAgICAgPGI+cmVjb3JkPC9iPgorICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTRfMTAiPkF0dHI8L0E+PC9GT05UPiAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zNTVfMTAiPkNvbG9yPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT47CisgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM1Nl8xMCI+Q2g8L0E+PC9GT05UPiAgICA6IENoYXJhY3RlcjsKKyAgICAgIDxiPmVuZDwvYj4gPGI+cmVjb3JkPC9iPjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgaXMgdGhlIGNvdW50ZXJwYXJ0IGZvciB0aGUgY2h0eXBlIGluIEMuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZvcjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA8Yj51c2U8L2I+CisgICAgICA8Yj5yZWNvcmQ8L2I+CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTZfMTAiPkNoPC9BPiAgICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDAgLi4gIDc7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTVfMTAiPkNvbG9yPC9BPiA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gIDggLi4gMTU7CisgICAgICAgICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTRfMTAiPkF0dHI8L0E+ICA8Yj5hdDwvYj4gMCA8Yj5yYW5nZTwvYj4gMTYgLi4gMzE7CisgICAgICA8Yj5lbmQ8L2I+IDxiPnJlY29yZDwvYj47CisgICA8Yj5mb3I8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4nU2l6ZSA8Yj51c2U8L2I+IDMyOworICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBQbGVhc2Ugbm90ZTogdGhpcyByZXAuIGNsYXVzZSBpcyBnZW5lcmF0ZWQgYW5kIG1heSBiZTwvRU0+PC9GT05UPgorICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgZGlmZmVyZW50IG9uIHlvdXIgc3lzdGVtLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4KKyAgICAgOj0gKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Nl8xMCI+Q2g8L0E+ICAgID0mZ3Q7IENoYXJhY3RlcidGaXJzdCwKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NV8xMCI+Q29sb3I8L0E+ID0mZ3Q7IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCwKKyAgICAgICAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1NF8xMCI+QXR0cjwvQT4gID0mZ3Q7ICg8Yj5vdGhlcnM8L2I+ID0mZ3Q7IEZhbHNlKSk7ICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByZWVsYWJvcmF0YWJsZSBOb3JtYWxfVmlkZW88L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gQXR0cmlidXRlZF9TdHJpbmcgPGI+aXM8L2I+IDxiPmFycmF5PC9iPiAoUG9zaXRpdmUgPGI+cmFuZ2U8L2I+ICZsdDsmZ3Q7KSA8Yj5vZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxiPnByYWdtYTwvYj4gUGFjayAoQXR0cmlidXRlZF9TdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbiB0aGlzIGJpbmRpbmcgd2UgYWxsb3cgc3RyaW5ncyBvZiBhdHRyaWJ1dGVkIGNoYXJhY3RlcnMuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRXhjZXB0aW9ucyAgLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzgzXzQiPkN1cnNlc19FeGNlcHRpb248L0E+PC9GT05UPiAgICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zODRfNCI+V3JvbmdfQ3Vyc2VzX1ZlcnNpb248L0E+PC9GT05UPiA6IDxiPmV4Y2VwdGlvbjwvYj47CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhvc2UgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGJ5IHRoZSBFVEkgKEV4dGVuZGVkIFRlcm1pbmFsIEludGVyZmFjZSk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgc3VicGFja2V0cyBmb3IgTWVudSBhbmQgRm9ybXMgaGFuZGxpbmcuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzg5XzQiPkV0aV9TeXN0ZW1fRXJyb3I8L0E+PC9GT05UPiAgICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5MF80Ij5FdGlfQmFkX0FyZ3VtZW50PC9BPjwvRk9OVD4gICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTFfNCI+RXRpX1Bvc3RlZDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzkyXzQiPkV0aV9Db25uZWN0ZWQ8L0E+PC9GT05UPiAgICAgICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5M180Ij5FdGlfQmFkX1N0YXRlPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTRfNCI+RXRpX05vX1Jvb208L0E+PC9GT05UPiAgICAgICAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk1XzQiPkV0aV9Ob3RfUG9zdGVkPC9BPjwvRk9OVD4gICAgICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5Nl80Ij5FdGlfVW5rbm93bl9Db21tYW5kPC9BPjwvRk9OVD4gOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8zOTdfNCI+RXRpX05vX01hdGNoPC9BPjwvRk9OVD4gICAgICAgIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMzk4XzQiPkV0aV9Ob3RfU2VsZWN0YWJsZTwvQT48L0ZPTlQ+ICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzM5OV80Ij5FdGlfTm90X0Nvbm5lY3RlZDwvQT48L0ZPTlQ+ICAgOiA8Yj5leGNlcHRpb248L2I+OworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MDBfNCI+RXRpX1JlcXVlc3RfRGVuaWVkPC9BPjwvRk9OVD4gIDogPGI+ZXhjZXB0aW9uPC9iPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDAxXzQiPkV0aV9JbnZhbGlkX0ZpZWxkPC9BPjwvRk9OVD4gICA6IDxiPmV4Y2VwdGlvbjwvYj47CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQwMl80Ij5FdGlfQ3VycmVudDwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5leGNlcHRpb248L2I+OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgRXh0ZXJuYWwgQyB2YXJpYWJsZXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQ29uY2VwdHVhbGx5IGV2ZW4gaW4gQyB0aGlzIGFyZSBraW5kIG9mIGNvbnN0YW50cywgYnV0IHRoZXkgYXJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGluaXRpYWxpemVkIGFuZCBzb21ldGltZXMgY2hhbmdlZCBieSB0aGUgbGlicmFyeSByb3V0aW5lcyBhdCBydW50aW1lPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0ZXJtaW5hbC4gSSBiZWxpZXZlIHRoZSBiZXN0IHdheSB0byBtb2RlbDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGlzIGlzIHRvIHVzZSBmdW5jdGlvbnMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L0VNPjwvRk9OVD4KKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDEyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzU1XzEzIj5MaW5lczwvQT48L0ZPTlQ+ICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDEyXzEzIj5MaW5lczwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MTVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNjNfMTMiPkNvbHVtbnM8L0E+PC9GT05UPiAgICAgICAgICA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQxNV8xMyI+Q29sdW1uczwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNzFfMTMiPlRhYl9TaXplPC9BPjwvRk9OVD4gICAgICAgICA8Yj5yZXR1cm48L2I+IE5hdHVyYWw7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDE4XzEzIj5UYWJfU2l6ZTwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MjFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNzlfMTMiPk51bWJlcl9PZl9Db2xvcnM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IE5hdHVyYWw7CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDIxXzEzIj5OdW1iZXJfT2ZfQ29sb3JzPC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQyNF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM4N18xMyI+TnVtYmVyX09mX0NvbG9yX1BhaXJzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBOYXR1cmFsOworICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQyNF8xMyI+TnVtYmVyX09mX0NvbG9yX1BhaXJzPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IENfQUNTX01hcCA8Yj5pczwvYj4gPGI+YXJyYXk8L2I+IChDaGFyYWN0ZXInVmFsICgwKSAuLiBDaGFyYWN0ZXInVmFsICgxMjcpKQorICAgICAgICA8Yj5vZjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDI5XzQiPkFDU19NYXA8L0E+PC9GT05UPiA6IENfQUNTX01hcDsKKyAgIDxiPnByYWdtYTwvYj4gSW1wb3J0IChDLCA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80MjlfNCI+QUNTX01hcDwvQT4sICJhY3NfbWFwIik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBDb25zdGFudHMgZm9yIHNldmVyYWwgY2hhcmFjdGVycyBmcm9tIHRoZSBBbHRlcm5hdGUgQ2hhcmFjdGVyIFNldDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBZb3UgbXVzdCB1c2UgdGhlc2UgY29uc3RhbnRzIGFzIGluZGljZXMgaW50byB0aGUgQUNTX01hcCBhcnJheTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0byBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlZCBjaGFyYWN0ZXIgYXQgcnVudGltZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80MzdfNCI+QUNTX1VwcGVyX0xlZnRfQ29ybmVyPC9BPjwvRk9OVD4gICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdsJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDM4XzQiPkFDU19Mb3dlcl9MZWZ0X0Nvcm5lcjwvQT48L0ZPTlQ+ICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnbSc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQzOV80Ij5BQ1NfVXBwZXJfUmlnaHRfQ29ybmVyPC9BPjwvRk9OVD4gICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ2snOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDBfNCI+QUNTX0xvd2VyX1JpZ2h0X0Nvcm5lcjwvQT48L0ZPTlQ+ICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdqJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQxXzQiPkFDU19MZWZ0X1RlZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAndCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0Ml80Ij5BQ1NfUmlnaHRfVGVlPC9BPjwvRk9OVD4gICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3UnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDNfNCI+QUNTX0JvdHRvbV9UZWU8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICd2JzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ0XzQiPkFDU19Ub3BfVGVlPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAndyc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0NV80Ij5BQ1NfSG9yaXpvbnRhbF9MaW5lPC9BPjwvRk9OVD4gICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3EnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDZfNCI+QUNTX1ZlcnRpY2FsX0xpbmU8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICd4JzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDQ3XzQiPkFDU19QbHVzX1N5bWJvbDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnbic7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ0OF80Ij5BQ1NfU2Nhbl9MaW5lXzE8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ28nOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NDlfNCI+QUNTX1NjYW5fTGluZV85PC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdzJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUwXzQiPkFDU19EaWFtb25kPC9BPjwvRk9OVD4gICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSBDaGFyYWN0ZXInVmFsICg5Nik7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1MV80Ij5BQ1NfQ2hlY2tlcl9Cb2FyZDwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ2EnOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTJfNCI+QUNTX0RlZ3JlZTwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICdmJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDUzXzQiPkFDU19QbHVzX01pbnVzPC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnZyc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1NF80Ij5BQ1NfQnVsbGV0PC9BPjwvRk9OVD4gICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ34nOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NTVfNCI+QUNTX0xlZnRfQXJyb3c8L0E+PC9GT05UPiAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICcsJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU2XzQiPkFDU19SaWdodF9BcnJvdzwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnKyc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ1N180Ij5BQ1NfRG93bl9BcnJvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJy4nOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NThfNCI+QUNTX1VwX0Fycm93PC9BPjwvRk9OVD4gICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICctJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDU5XzQiPkFDU19Cb2FyZF9PZl9TcXVhcmVzPC9BPjwvRk9OVD4gICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnaCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2MF80Ij5BQ1NfTGFudGVybjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ2knOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjFfNCI+QUNTX1NvbGlkX0Jsb2NrPC9BPjwvRk9OVD4gICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICcwJzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDYyXzQiPkFDU19TY2FuX0xpbmVfMzwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAncCc7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2M180Ij5BQ1NfU2Nhbl9MaW5lXzc8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3InOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjRfNCI+QUNTX0xlc3NfT3JfRXF1YWw8L0E+PC9GT05UPiAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICd5JzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY1XzQiPkFDU19HcmVhdGVyX09yX0VxdWFsPC9BPjwvRk9OVD4gICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAneic7CisgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ2Nl80Ij5BQ1NfUEk8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBDaGFyYWN0ZXIgOj0gJ3snOworICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80NjdfNCI+QUNTX05vdF9FcXVhbDwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5jb25zdGFudDwvYj4gQ2hhcmFjdGVyIDo9ICd8JzsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDY4XzQiPkFDU19TdGVybGluZzwvQT48L0ZPTlQ+ICAgICAgICAgICAgIDogPGI+Y29uc3RhbnQ8L2I+IENoYXJhY3RlciA6PSAnfSc7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTm90IGltcGxlbWVudGVkOiBuZXd0ZXJtLCBzZXRfdGVybSwgZGVsc2NyZWVuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDc2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzM5XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIj5zdGRzY3I8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80ODFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzNDdfMTMiPkN1cnJlbnRfV2luZG93PC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc2NyPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ4MV8xMyI+Q3VycmVudF9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85OF8xNCI+SW5pdF9TY3JlZW48L0E+PC9GT05UPjsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDg5XzE0Ij5Jbml0X1dpbmRvd3M8L0E+PC9GT05UPiA8Yj5yZW5hbWVzPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODZfMTQiPkluaXRfU2NyZWVuPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmluaXRzY3IoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80ODZfMTQiPkluaXRfU2NyZWVuPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHByYWdtYSBJbmxpbmUgKEluaXRfV2luZG93cyk7PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzQ5NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTExXzE0Ij5FbmRfV2luZG93czwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luaXRzY3IuM3guaHRtbCI+ZW5kd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNDk3XzE0Ij5FbmRfU2NyZWVuPC9BPjwvRk9OVD4gPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDk1XzE0Ij5FbmRfV2luZG93czwvQT47CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDk1XzE0Ij5FbmRfV2luZG93czwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgSW5saW5lIChFbmRfU2NyZWVuKTs8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MDJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMV8xMyI+SXNfRW5kX1dpbmRvdzwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmlzZW5kd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTAyXzEzIj5Jc19FbmRfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdmUuM3guaHRtbCI+Y3Vyc19tb3ZlLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMzXzE0Ij5Nb3ZlX0N1cnNvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUxMV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMzXzI3Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MTJfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNF8yNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTEzXzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzVfMjciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX21vdmUuM3guaHRtbCI+d21vdmUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtb3ZlKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81MTFfMTQiPk1vdmVfQ3Vyc29yPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2guM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDhfMTQiPkFkZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyM18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ4XzE5Ij5XaW48L0E+PC9GT05UPiA6ICA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyNF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ5XzE5Ij5DaDwvQT48L0ZPTlQ+ICA6ICA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2guM3guaHRtbCI+d2FkZGNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYWRkY2goKTwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTI4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjBfMTQiPkFkZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwXzE5Ij5XaW48L0E+PC9GT05UPiA6ICA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzUyOV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYxXzE5Ij5DaDwvQT48L0ZPTlQ+ICA6ICA8Yj5pbjwvYj4gQ2hhcmFjdGVyKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQWRkIGEgc2luZ2xlIGNoYXJhY3RlciBhdCB0aGUgY3VycmVudCBsb2dpY2FsIGN1cnNvciBwb3NpdGlvbiB0bzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0aGUgd2luZG93LiBVc2UgdGhlIGN1cnJlbnQgd2luZG93cyBhdHRyaWJ1dGVzLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MF8xNCI+QWRkPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MV83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3Ml83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTM3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3M183Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81MzhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc0XzciPkNoPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2FkZGNoLjN4Lmh0bWwiPm12d2FkZGNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZhZGRjaCgpPC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4OV8xNCI+QWRkPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MF83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MV83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTQ1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5Ml83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NDZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkzXzciPkNoPC9BPjwvRk9OVD4gICAgIDogPGI+aW48L2I+IENoYXJhY3Rlcik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE1vdmUgdG8gdGhlIHBvc2l0aW9uIGFuZCBhZGQgYSBzaW5nbGUgY2hhcmFjdGVyIGludG8gdGhlIHdpbmRvdzwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGVyZSBhcmUgbW9yZSBBZGQgcm91dGluZXMsIHNvIHRoZSBJbmxpbmUgcHJhZ21hIGZvbGxvd3MgbGF0ZXI8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjA0XzE0Ij5BZGRfV2l0aF9JbW1lZGlhdGVfRWNobzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDVfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU1M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDZfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkY2guM3guaHRtbCI+d2VjaG9jaGFyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZWNob2NoYXIoKTwvRU0+PC9GT05UPgorCisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTdfMTQiPkFkZF9XaXRoX0ltbWVkaWF0ZV9FY2hvPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOF83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTU5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOV83Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBDaGFyYWN0ZXIpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBZGQgYSBjaGFyYWN0ZXIgYW5kIGRvIGFuIGltbWVkaWF0ZSByZWZyZXNoIG9mIHRoZSBzY3JlZW4uPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoQWRkX1dpdGhfSW1tZWRpYXRlX0VjaG8pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3cuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IEltcGxlbWVudGVkOiB3Y3Vyc3luY3VwPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU2OV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI5XzEzIj5DcmVhdGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81NzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI5XzIxIj5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTcxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMF8yMSI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTcyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMV8yMSI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTczXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMl8yMSI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBJbXBsZW1lbnRlZDogRGVmYXVsdCBOdW1iZXJfT2ZfTGluZXMsIE51bWJlcl9PZl9Db2x1bW5zPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHRoZSBDIHZlcnNpb24gbGV0cyB0aGVtIGJlIDAsIHNlZSB0aGUgbWFuIHBhZ2UuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPm5ld3dpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU2OV8xMyI+Q3JlYXRlPC9BPik7CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiBOZXdfV2luZG93CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4MF83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTgxXzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4Ml83Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODNfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4KKyAgICAgPGI+cmVuYW1lczwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTY5XzEzIj5DcmVhdGU8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBwcmFnbWEgSW5saW5lIChOZXdfV2luZG93KTs8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU4OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjUyXzE0Ij5EZWxldGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81ODhfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1Ml8yMiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+ZGVsd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJlc2V0IFdpbiB0byBOdWxsX1dpbmRvdzwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4OF8xNCI+RGVsZXRlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjYzXzEzIj5TdWJfV2luZG93PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI2NF83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjY1XzciPk51bWJlcl9PZl9MaW5lczwvQT48L0ZPTlQ+ICAgICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjNfMTIiPkxpbmVfQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl81OTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjY2XzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzU5OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNjdfNyI+Rmlyc3RfTGluZV9Qb3NpdGlvbjwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNTk5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI2OF83Ij5GaXJzdF9Db2x1bW5fUG9zaXRpb248L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+c3Vid2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTk0XzEzIj5TdWJfV2luZG93PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwNF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjkxXzEzIj5EZXJpdmVkX1dpbmRvdzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOTJfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5M183Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjA3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI5NF83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+ICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjk1XzciPkZpcnN0X0xpbmVfUG9zaXRpb248L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYwOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yOTZfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPmRlcndpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwNF8xMyI+RGVyaXZlZF9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjE0XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zMTlfMTMiPkR1cGxpY2F0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxNF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzE5XzI0Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+ZHVwd2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjE0XzEzIj5EdXBsaWNhdGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzMyXzE0Ij5Nb3ZlX1dpbmRvdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYxOV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzMyXzI3Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyMF8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzMzXzI3Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzMzNF8yNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPm12d2luKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjE5XzE0Ij5Nb3ZlX1dpbmRvdzwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjI2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNDZfMTQiPk1vdmVfRGVyaXZlZF9XaW5kb3c8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MjZfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM0Nl8zNSI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyN18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzQ3XzM1Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYyOF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzQ4XzM1Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+bXZkZXJ3aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MjZfMTQiPk1vdmVfRGVyaXZlZF9XaW5kb3c8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzM18xNCI+U3luY2hyb25pemVfVXB3YXJkczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzM18zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjMzXzE0Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+d3N5bmN1cCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbXBvcnQgKEMsIFN5bmNocm9uaXplX1Vwd2FyZHMsICJ3c3luY3VwIik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82MzhfMTQiPlN5bmNocm9uaXplX0Rvd253YXJkczwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzYzOF8zNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjM4XzE0Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCI+d3N5bmNkb3duKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU3luY2hyb25pemVfRG93bndhcmRzLCAid3N5bmNkb3duIik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM2MF8xNCI+U2V0X1N5bmNoX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NDNfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM2MF8zMCI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY0NF8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzYxXzMwIj5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfd2luZG93LjN4Lmh0bWwiPnN5bmNvaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY0M18xNCI+U2V0X1N5bmNoX01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM3Ml8xNCI+QWRkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjUzXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zNzJfMTkiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTRfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM3M18xOSI+U3RyPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NTVfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM3NF8xOSI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkc3RyLjN4Lmh0bWwiPndhZGRuc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogd2FkZHN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYWRkbnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYWRkc3RyKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzIyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzkwXzE0Ij5BZGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NjJfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzM5MV83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjYzXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zOTJfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2NF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzkzXzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY2NV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMzk0XzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjY2XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8zOTVfNyI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYWRkc3RyLjN4Lmh0bWwiPm12d2FkZG5zdHIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdndhZGRzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12YWRkbnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZhZGRzdHIoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQwMl8xNCI+QWRkPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjc3XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MDNfNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY3OF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDA0XzciPlN0cjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEF0dHJpYnV0ZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82NzlfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQwNV83Ij5MZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sIj53YWRkY2huc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogd2FkZGNoc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBhZGRjaG5zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGFkZGNoc3RyKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4Nl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDI1XzE0Ij5BZGQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82ODZfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQyNl83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNjg3XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MjdfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4OF8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDI4XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzY4OV8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDI5XzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IEF0dHJpYnV0ZWRfU3RyaW5nOworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl82OTBfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQzMF83Ij5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5tdndhZGRjaG5zdHIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdndhZGRjaHN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZhZGRjaG5zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12YWRkY2hzdHIoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEFkZCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlci4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE5vdCBpbXBsZW1lbnRlZDogbXZobGluZSwgIG12d2hsaW5lLCBtdnZsaW5lLCBtdnd2bGluZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IHVzZSBNb3ZlX0N1cnNvciB0aGVuIEhvcml6b250YWxfTGluZSBvciBWZXJ0aWNhbF9MaW5lPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQzN18xNCI+Qm9yZGVyPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQzOF83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80MzlfNyI+TGVmdF9TaWRlX1N5bWJvbDwvQT48L0ZPTlQ+ICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzA3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0MF83Ij5SaWdodF9TaWRlX1N5bWJvbDwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQxXzciPlRvcF9TaWRlX1N5bWJvbDwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcwOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDJfNyI+Qm90dG9tX1NpZGVfU3ltYm9sPC9BPjwvRk9OVD4gICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzEwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0M183Ij5VcHBlcl9MZWZ0X0Nvcm5lcl9TeW1ib2w8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MTFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDQ0XzciPlVwcGVyX1JpZ2h0X0Nvcm5lcl9TeW1ib2w8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcxMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80NDVfNyI+TG93ZXJfTGVmdF9Db3JuZXJfU3ltYm9sPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzcxXzQiPkRlZmF1bHRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzEzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ0Nl83Ij5Mb3dlcl9SaWdodF9Db3JuZXJfU3ltYm9sPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+CisgICAgICk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwiPndib3JkZXIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBib3JkZXIoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcwNF8xNCI+Qm9yZGVyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ3NF8xNCI+Qm94PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzIxXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzQ3NV83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjJfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDc2XzciPlZlcnRpY2FsX1N5bWJvbDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDc3XzciPkhvcml6b250YWxfU3ltYm9sPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19ib3JkZXIuM3guaHRtbCI+Ym94KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzIwXzE0Ij5Cb3g8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzI3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzcyOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDg1XzE0Ij5Ib3Jpem9udGFsX0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDg2XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl80ODdfNyI+TGluZV9TaXplPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiBOYXR1cmFsOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNDg4XzciPkxpbmVfU3ltYm9sPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNzFfNCI+RGVmYXVsdF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19ib3JkZXIuM3guaHRtbCI+d2hsaW5lKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaGxpbmUoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzcyOF8xNCI+SG9yaXpvbnRhbF9MaW5lPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8yOCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83MzdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUwMl8xNCI+VmVydGljYWxfTGluZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzczOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDNfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzM5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUwNF83Ij5MaW5lX1NpemU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IE5hdHVyYWw7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc0MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81MDVfNyI+TGluZV9TeW1ib2w8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM3MV80Ij5EZWZhdWx0X0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JvcmRlci4zeC5odG1sIj53dmxpbmUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB2bGluZSgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzM3XzE0Ij5WZXJ0aWNhbF9MaW5lPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2guM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGltcGxlbWVudGVkOiBtdmdldGNoLCBtdndnZXRjaDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMjkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUyMF8xMyI+R2V0X0tleXN0cm9rZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc1MV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTIwXzI4Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0Y2guM3guaHRtbCI+d2dldGNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZ2V0Y2goKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUga2V5Ym9hcmQgYW5kIGVjaG8gaXQgLSBpZiBlbmFibGVkIC0gdG8gdGhlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHdpbmRvdy48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSWYgZm9yIGFueSByZWFzb24gKGkuZS4gYSB0aW1lb3V0KSB3ZSBjb3VsZG4ndCBnZXQgYSBjaGFyYWN0ZXIgdGhlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJldHVybmVkIGtleWNvZGUgaXMgS2V5X05vbmUuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzUxXzEzIj5HZXRfS2V5c3Ryb2tlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUzNV8xNCI+VW5kb19LZXlzdHJva2U8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjJfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzUzNV8zMCI+S2V5PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzNfMTIiPlJlYWxfS2V5X0NvZGU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRjaC4zeC5odG1sIj51bmdldGNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzYyXzE0Ij5VbmRvX0tleXN0cm9rZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NjdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU0NV8xMyI+SGFzX0tleTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc2N18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTQ1XzIyIj5LZXk8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc4XzEyIj5TcGVjaWFsX0tleV9Db2RlPC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwiPmhhc19rZXkoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83NjdfMTMiPkhhc19LZXk8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgU29tZSBoZWxwZXIgZnVuY3Rpb25zPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc3NF8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTU3XzEzIj5Jc19GdW5jdGlvbl9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83NzRfMzAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU1N18zMCI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUmV0dXJuIFRydWUgaWYgdGhlIEtleSBpcyBhIGZ1bmN0aW9uIGtleSAoaS5lLiBvbmUgb2YgRjAgLi4gRjYzKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzc3NF8xMyI+SXNfRnVuY3Rpb25fS2V5PC9BPik7CisKKyAgIDxiPnN1YnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzc4XzEyIj5GdW5jdGlvbl9LZXlfTnVtYmVyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IEludGVnZXIgPGI+cmFuZ2U8L2I+IDAgLi4gNjM7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIChuKWN1cnNlcyBhbGxvd3MgZm9yIDY0IGZ1bmN0aW9uIGtleXMuPC9FTT48L0ZPTlQ+CisKKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzc4MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTY5XzEzIj5GdW5jdGlvbl9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl83ODFfMjciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU2OV8yNyI+S2V5PC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc4XzEyIj5GdW5jdGlvbl9LZXlfTnVtYmVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uIGtleS4gSWYgdGhlIGNvZGUgaXMgbm90IGE8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZnVuY3Rpb24ga2V5LCBhIENPTlNUUkFJTlRfRVJST1Igd2lsbCBiZSByYWlzZWQuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzgxXzEzIj5GdW5jdGlvbl9LZXk8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzg2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81ODBfMTMiPkZ1bmN0aW9uX0tleV9Db2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfNzg2XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl81ODBfMzIiPktleTwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzc4XzEyIj5GdW5jdGlvbl9LZXlfTnVtYmVyPC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFJldHVybiB0aGUga2V5IGNvZGUgZm9yIGEgZ2l2ZW4gZnVuY3Rpb24ta2V5IG51bWJlci48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83ODZfMTMiPkZ1bmN0aW9uX0tleV9Db2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTm90IGltcGxlbWVudGVkIGF0dHJfb2ZmLCAgd2F0dHJfb2ZmLDwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8ICBhdHRyX29uLCB3YXR0cl9vbiwgYXR0cl9zZXQsIHdhdHRyX3NldDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBBSVJfTlVNQkVSPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBBSVJfTlVNQkVSKGMpIGlzIHRoZSBzYW1lIGFzIGMuQ29sb3I8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTg2XzE0Ij5TdGFuZG91dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwMF8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNTg2XzI0Ij5XaW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gIDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDFfMjQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzU4N18yNCI+T248L0E+PC9GT05UPiAgOiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdzdGFuZG91dCgpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogd3N0YW5kZW5kKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzMzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjA2XzE0Ij5Td2l0Y2hfQ2hhcmFjdGVyX0F0dHJpYnV0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzgwN183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82MDdfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDhfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjA4XzciPkF0dHI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjA5XzciPk9uPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGlmIEZhbHNlIHdlIHN3aXRjaCBPZmYuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFN3aXRjaGVzIHRob3NlIEF0dHJpYnV0ZXMgc2V0IHRvIHRydWUgaW4gdGhlIGxpc3QuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj53YXR0cm9uKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogd2F0dHJvZmYoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGF0dHJvbigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYXR0cm9mZigpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYzNF8xNCI+U2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODE4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYzNV83Ij5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjM2XzciPkF0dHI8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODIwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzYzN183Ij5Db2xvcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4nRmlyc3QpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+d2F0dHJzZXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBhdHRyc2V0KCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl84MTdfMTQiPlNldF9DaGFyYWN0ZXJfQXR0cmlidXRlczwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY1Ml8xMyI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MjdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjUyXzM4Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+d2F0dHJfZ2V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogYXR0cl9nZXQoKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMzYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzJfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY3NV8xMyI+R2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNjc1XzM4Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj53YXR0cl9nZXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChHZXRfQ2hhcmFjdGVyX0F0dHJpYnV0ZSk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84MzhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzY5OF8xNCI+U2V0X0NvbG9yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODM4XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82OThfMjUiPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODM5XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82OTlfMjUiPlBhaXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTlfOSI+Q29sb3JfUGFpcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2F0dHIuM3guaHRtbCI+d2NvbG9yX3NldCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGNvbG9yX3NldCgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODM4XzE0Ij5TZXRfQ29sb3I8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzM4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzEzXzE0Ij5DaGFuZ2VfQXR0cmlidXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTRfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODQ3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzcxNV83Ij5Db3VudDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXIgOj0gLTE7CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg0OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83MTZfNyI+QXR0cjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1MF80Ij5Ob3JtYWxfVmlkZW88L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzE3XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj53Y2hnYXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBjaGdhdCgpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8zOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzczNl8xNCI+Q2hhbmdlX0F0dHJpYnV0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzM3XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTZfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzM4XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+J0ZpcnN0OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzM5XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPidGaXJzdDsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODU4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc0MF83Ij5Db3VudDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IC0xOworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzQxXzciPkF0dHI8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUwXzQiPk5vcm1hbF9WaWRlbzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg2MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NDJfNyI+Q29sb3I8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYXR0ci4zeC5odG1sIj5tdndjaGdhdCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12Y2hnYXQoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKENoYW5nZV9BdHRyaWJ1dGVzKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfYmVlcC4zeC5odG1sIj5jdXJzX2JlZXAuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg3MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfNzQ5XzE0Ij5CZWVwPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYmVlcC4zeC5odG1sIj5iZWVwKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfODcwXzE0Ij5CZWVwPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84NzVfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc1OV8xNCI+Rmxhc2hfU2NyZWVuPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYmVlcC4zeC5odG1sIj5mbGFzaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg3NV8xNCI+Rmxhc2hfU2NyZWVuPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTm90IGltcGxlbWVudGVkIDogdHlwZWFoZWFkPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84ODZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc2OV8xNCI+U2V0X0NicmVha19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODg2XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83NjlfMzEiPlN3aXRjaE9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+Y2JyZWFrKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbm9jYnJlYWsoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg4Nl8xNCI+U2V0X0NicmVha19Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzc4OF8xNCI+U2V0X1Jhd19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfODkyXzI4IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl83ODhfMjgiPlN3aXRjaE9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+cmF3KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbm9yYXcoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg5Ml8xNCI+U2V0X1Jhd19Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV80NCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl84OThfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgwN18xNCI+U2V0X0VjaG9fTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzg5OF8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODA3XzI5Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmVjaG8oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBub2VjaG8oKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzg5OF8xNCI+U2V0X0VjaG9fTW9kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTA0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MjZfMTQiPlNldF9NZXRhX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MDRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgyNl8yOSI+V2luPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkwNV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODI3XzI5Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPm1ldGEoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MDRfMTQiPlNldF9NZXRhX01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzQ2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxMF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODM3XzE0Ij5TZXRfS2V5UGFkX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MTBfMzEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzgzN18zMSI+V2luPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTExXzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84MzhfMzEiPlN3aXRjaE9uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+a2V5cGFkKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTEwXzE0Ij5TZXRfS2V5UGFkX01vZGU8L0E+KTsKKworICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTE1XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NDhfMTMiPkdldF9LZXlQYWRfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkxNV8zMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODQ4XzMwIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGlzIGhhcyBubyBwZW5kYW50IGluIEMuIFRoZXJlIHlvdSd2ZSB0byBsb29rIGludG8gdGhlIFdJTkRPV1M8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgc3RydWN0dXJlIHRvIGdldCB0aGUgdmFsdWUuIEJhZCBwcmFjdGljZSwgbm90IHJlcGVhdGVkIGluIEFkYS48L0VNPjwvRk9OVD4KKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MjBfOSI+SGFsZl9EZWxheV9BbW91bnQ8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+cmFuZ2U8L2I+IDEgLi4gMjU1OworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTIzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NTdfMTQiPkhhbGZfRGVsYXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MjNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg1N18yNiI+QW1vdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTIwXzkiPkhhbGZfRGVsYXlfQW1vdW50PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPmhhbGZkZWxheSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkyM18xNCI+SGFsZl9EZWxheTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTI4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NjdfMTQiPlNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkyOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NjhfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85MzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfODY5XzciPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIj5pbnRyZmx1c2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl85MjhfMTQiPlNldF9GbHVzaF9Pbl9JbnRlcnJ1cHRfTW9kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNDkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84NzlfMTQiPlNldF9RdWV1ZV9JbnRlcnJ1cHRfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzkzNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84ODBfNyI+V2luPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTM3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg4MV83Ij5GbHVzaDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPnFpZmx1c2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBub3FpZmx1c2goKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzkzNV8xNCI+U2V0X1F1ZXVlX0ludGVycnVwdF9Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzg5OF8xNCI+U2V0X05vRGVsYXlfTW9kZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0NF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl84OTlfNyI+V2luPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NDVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTAwXzciPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+bm9kZWxheSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk0M18xNCI+U2V0X05vRGVsYXlfTW9kZTwvQT4pOworCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0OV85Ij5UaW1lb3V0X01vZGU8L0E+PC9GT05UPiA8Yj5pczwvYj4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ5XzI2Ij5CbG9ja2luZzwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk0OV8zNiI+Tm9uX0Jsb2NraW5nPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTQ5XzUwIj5EZWxheWVkPC9BPjwvRk9OVD4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTUyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MTBfMTQiPlNldF9UaW1lb3V0X01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NTJfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxMF8zMiI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NTNfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxMV8zMiI+TW9kZTwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTQ5XzkiPlRpbWVvdXRfTW9kZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NTRfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkxMl8zMiI+QW1vdW50PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gTmF0dXJhbCk7IDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW4gTWlsbGlzZWNvbmRzPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwiPnd0aW1lb3V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogdGltZW91dCgpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEluc3RlYWQgb2Ygb3ZlcmxvYWRpbmcgdGhlIHNlbWFudGljIG9mIHRoZSBzaWduIG9mIGFtb3VudCwgd2U8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgaW50cm9kdWNlIHRoZSBUaW1lb3V0X01vZGUgcGFyYW1ldGVyLiBUaGlzIHNob3VsZCBpbXByb3ZlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHJlYWRhYmlsaXR5LiBGb3IgQmxvY2tpbmcgYW5kIE5vbl9CbG9ja2luZywgdGhlIEFtb3VudCBpcyBub3Q8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgZXZhbHVhdGVkLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBXZSBkb24ndCBpbmxpbmUgdGhpcyBwcm9jZWR1cmUuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV81MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85NjRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkzMV8xNCI+U2V0X0VzY2FwZV9UaW1lcl9Nb2RlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkzMl83Ij5XaW48L0E+PC9GT05UPiAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTY2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzkzM183Ij5UaW1lcl9PZmY8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbm9wdHMuM3guaHRtbCI+bm90aW1lb3V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTY0XzE0Ij5TZXRfRXNjYXBlX1RpbWVyX01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzUzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTQ1XzE0Ij5TZXRfTkxfTW9kZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk3NV8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTQ1XzI3Ij5Td2l0Y2hPbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5ubCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG5vbmwoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk3NV8xNCI+U2V0X05MX01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTY0XzE0Ij5DbGVhcl9Pbl9OZXh0X1VwZGF0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk4Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NjVfNyI+V2luPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTgzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk2Nl83Ij5Eb19DbGVhcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5jbGVhcm9rKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTgxXzE0Ij5DbGVhcl9Pbl9OZXh0X1VwZGF0ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTg4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85NzZfMTQiPlVzZV9JbnNlcnRfRGVsZXRlX0xpbmU8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85ODlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTc3XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl85OTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTc4XzciPkRvX0lkbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5pZGxvaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzk4OF8xNCI+VXNlX0luc2VydF9EZWxldGVfTGluZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfOTk1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85ODhfMTQiPlVzZV9JbnNlcnRfRGVsZXRlX0NoYXJhY3RlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85ODlfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzk5N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85OTBfNyI+RG9fSWRjPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmlkY29rKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfOTk1XzE0Ij5Vc2VfSW5zZXJ0X0RlbGV0ZV9DaGFyYWN0ZXI8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzk5OF8xNCI+TGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZTwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTk5XzciPldpbjwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMDRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAwMF83Ij5Eb19MZWF2ZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEJvb2xlYW4gOj0gVHJ1ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5sZWF2ZW9rKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAwMl8xNCI+TGVhdmVfQ3Vyc29yX0FmdGVyX1VwZGF0ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAwOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAxMF8xNCI+SW1tZWRpYXRlX1VwZGF0ZV9Nb2RlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDExXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAxMV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDEyXzciPk1vZGU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBCb29sZWFuIDo9IEZhbHNlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmltbWVkb2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDA5XzE0Ij5JbW1lZGlhdGVfVXBkYXRlX01vZGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzU5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMjBfMTQiPkFsbG93X1Njcm9sbGluZzwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAyMV83Ij5XaW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTAyMl83Ij5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBGYWxzZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj5zY3JvbGxvaygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwMTZfMTQiPkFsbG93X1Njcm9sbGluZzwvQT4pOworCisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDIyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDMyXzEzIj5TY3JvbGxpbmdfQWxsb3dlZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjJfMzIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwMzJfMzIiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pIDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlcmUgaXMgbm8gc3VjaCBmdW5jdGlvbiBpbiB0aGUgQyBpbnRlcmZhY2UuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTAyMl8xMyI+U2Nyb2xsaW5nX0FsbG93ZWQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzYwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDFfMTQiPlNldF9TY3JvbGxfUmVnaW9uPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTAyOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDQyXzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwMjlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA0M183Ij5Ub3BfTGluZTwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDMwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwNDRfNyI+Qm90dG9tX0xpbmU8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sIj53c2V0c2NycmVnKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogc2V0c2NycmVnKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDI3XzE0Ij5TZXRfU2Nyb2xsX1JlZ2lvbjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0MF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA1N18xNCI+VXBkYXRlX1NjcmVlbjwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbCI+ZG91cGRhdGUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMDQwXzE0Ij5VcGRhdGVfU2NyZWVuPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDQ1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDY3XzE0Ij5SZWZyZXNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA0NV8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA2N18yMyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbCI+d3JlZnJlc2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlcmUgaXMgYW4gb3ZlcmxvYWRlZCBSZWZyZXNoIGZvciBQYWRzLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGUgSW5saW5lIHByYWdtYSBhcHBlYXJzIHRoZXJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogcmVmcmVzaCgpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDUyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDc3XzE0Ij5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA1M183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMDc4XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPndub3V0cmVmcmVzaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBUaGVyZSBpcyBhbiBvdmVybG9hZGVkIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgZm9yIFBhZHMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSBJbmxpbmUgcHJhZ21hIGFwcGVhcnMgdGhlcmU8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzY0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwODhfMTQiPlJlZHJhdzwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNTlfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEwODhfMjIiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPnJlZHJhd3dpbigpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNjUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2M18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA5OF8xNCI+UmVkcmF3PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA2M18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTA5OV83Ij5XaW48L0E+PC9GT05UPiAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNjRfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMDBfNyI+QmVnaW5fTGluZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDY1XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTAxXzciPkxpbmVfQ291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBQb3NpdGl2ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfcmVmcmVzaC4zeC5odG1sIj53cmVkcmF3bG4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChSZWRyYXcpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82NiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDc0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTE1XzE0Ij5FcmFzZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwNzRfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMTVfMjEiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jbGVhci4zeC5odG1sIj53ZXJhc2UoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBlcmFzZSgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTA3NF8xNCI+RXJhc2U8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzY3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwODBfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExMjVfMTQiPkNsZWFyPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTI1XzIxIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfY2xlYXIuM3guaHRtbCI+d2NsZWFyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogY2xlYXIoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODBfMTQiPkNsZWFyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV82OCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMDg3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTM1XzE0Ij5DbGVhcl9Ub19FbmRfT2ZfU2NyZWVuPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA4OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTM1XzM4Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfY2xlYXIuM3guaHRtbCI+d2NscnRvYm90KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogY2xydG9ib3QoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwODdfMTQiPkNsZWFyX1RvX0VuZF9PZl9TY3JlZW48L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzY5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEwOTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNDVfMTQiPkNsZWFyX1RvX0VuZF9PZl9MaW5lPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTA5NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTQ1XzM2Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfY2xlYXIuM3guaHRtbCI+d2NscnRvZW9sKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogY2xydG9lb2woKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEwOTRfMTQiPkNsZWFyX1RvX0VuZF9PZl9MaW5lPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVE9ETzogd2UgY291bGQgaGF2ZSBTZXRfQmFja2dyb3VuZChXaW5kb3c7IENoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0KTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBiZWNhdXNlIGluIEMgaXQgaXMgY29tbW9uIHRvIHNlZSBia2dkc2V0KEFfQk9MRCkgb3I8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgYmtnZHNldChDT0xPUl9QQUlSKG4pKTwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMDhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNTVfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEwOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTU2XzciPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTEwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNTdfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfYmtnZC4zeC5odG1sIj53YmtnZHNldCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGJrZ2RzZXQoKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExMDhfMTQiPlNldF9CYWNrZ3JvdW5kPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTE2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTY1XzE0Ij5DaGFuZ2VfQmFja2dyb3VuZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE2Nl83Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTExOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTY3XzciPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JrZ2QuM3guaHRtbCI+d2JrZ2QoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBia2dkKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTE2XzE0Ij5DaGFuZ2VfQmFja2dyb3VuZDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gID8gd2JrZ2RnZXQgaXMgbm90IGxpc3RlZCBpbiBjdXJzX2JrZ2QsIGdldGJrZ2QgaXMgdGhwb3VnaC48L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExMjVfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExNzdfMTMiPkdldF9CYWNrZ3JvdW5kPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEyNV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE3N18yOSI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikKKyAgICAgPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2JrZ2QuM3guaHRtbCI+d2JrZ2RnZXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBia2dkZ2V0KCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTI1XzEzIj5HZXRfQmFja2dyb3VuZDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTM2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjEyXzE0Ij5VbnRvdWNoPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTEzNl8yMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIxMl8yMyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPnVudG91Y2h3aW4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTM2XzE0Ij5VbnRvdWNoPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83NCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTQxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjAzXzE0Ij5Ub3VjaDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNDFfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMDNfMjEiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190b3VjaC4zeC5odG1sIj50b3VjaHdpbigpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIyMV8xNCI+VG91Y2g8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTQ1XzIxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjIxXzIxIj5XaW48L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNDZfMjEiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMjJfMjEiPlN0YXJ0PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE0N18yMSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTIyM18yMSI+Q291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBQb3NpdGl2ZSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+dG91Y2hsaW5lKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoVG91Y2gpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfNzYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE4Nl8xNCI+Q2hhbmdlX0xpbmVzX1N0YXR1czwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTJfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExODZfMzUiPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTUzXzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMTg3XzM1Ij5TdGFydDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE1NF8zNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTE4OF8zNSI+Q291bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBQb3NpdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNTVfMzUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzExODlfMzUiPlN0YXRlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+d3RvdWNobG4oKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMTUyXzE0Ij5DaGFuZ2VfTGluZXNfU3RhdHVzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV83NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNjBfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyMjlfMTMiPklzX1RvdWNoZWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTYwXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjMwXzciPldpbjwvQT48L0ZPTlQ+ICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTYxXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjMxXzciPkxpbmU8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdG91Y2guM3guaHRtbCI+aXNfbGluZXRvdWNoZWQoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzc4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE2NV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI0M18xMyI+SXNfVG91Y2hlZDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNjVfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNDRfNyI+V2luPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPikgPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwiPmlzX3dpbnRvdWNoZWQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChJc19Ub3VjaGVkKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzc5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNzRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNTZfMTQiPkNvcHk8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMTc1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyNTdfNyI+U291cmNlX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE3Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjU4XzciPkRlc3RpbmF0aW9uX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI1OV83Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE3OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjYwXzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExNzlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2MV83Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjYyXzciPkRlc3RpbmF0aW9uX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2M183Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4Ml83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMjY0XzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI2NV83Ij5Ob25fRGVzdHJ1Y3RpdmVfTW9kZTwvQT48L0ZPTlQ+ICAgICA6IDxiPmluPC9iPiBCb29sZWFuIDo9IFRydWUpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbCI+Y29weXdpbigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExNzRfMTQiPkNvcHk8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzgwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyOTJfMTQiPk92ZXJ3cml0ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExODhfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEyOTNfNyI+U291cmNlX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE4OV8yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTI5NF83Ij5EZXN0aW5hdGlvbl9XaW5kb3c8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19vdmVybGF5LjN4Lmh0bWwiPm92ZXJ3cml0ZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzExODhfMTQiPk92ZXJ3cml0ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfODEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTE5NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMwNF8xNCI+T3ZlcmxheTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOTRfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMDVfNyI+U291cmNlX1dpbmRvdzwvQT48L0ZPTlQ+ICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzExOTVfMjMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMDZfNyI+RGVzdGluYXRpb25fV2luZG93PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sIj5vdmVybGF5KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTE5NF8xNCI+T3ZlcmxheTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjA0XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzE3XzE0Ij5JbnNlcnRfRGVsZXRlX0xpbmVzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIwNV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzE4XzciPldpbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjA2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMTlfNyI+TGluZXM8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IDEpOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGRlZmF1bHQgaXMgdG8gaW5zZXJ0IG9uZSBsaW5lIGFib3ZlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsZXRlbG4uM3guaHRtbCI+d2luc2RlbGxuKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5zZGVsbG4oKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMDRfMTQiPkluc2VydF9EZWxldGVfTGluZXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzgzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzMjlfMTQiPkRlbGV0ZV9MaW5lPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxMl8yNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMyOV8yNyI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPndkZWxldGVsbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGRlbGV0ZWxuKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjEyXzE0Ij5EZWxldGVfTGluZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfODQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIxOF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTMzNV8xNCI+SW5zZXJ0X0xpbmU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjE4XzI3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzM1XzI3Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsZXRlbG4uM3guaHRtbCI+d2luc2VydGxuKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5zZXJ0bG4oKTwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMThfMTQiPkluc2VydF9MaW5lPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldHl4LjN4Lmh0bWwiPmN1cnNfZ2V0eXguM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzg1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMjhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzNDJfMTQiPkdldF9TaXplPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIyOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzQzXzciPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM0NF83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM0NV83Ij5OdW1iZXJfT2ZfQ29sdW1uczwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82NV8xMiI+Q29sdW1uX0NvdW50PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZ2V0eXguM3guaHRtbCI+Z2V0bWF4eXgoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xMjI4XzE0Ij5HZXRfU2l6ZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfODYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM2Ml8xNCI+R2V0X1dpbmRvd19Qb3NpdGlvbjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyMzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM2M183Ij5XaW48L0E+PC9GT05UPiAgICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzY0XzciPlRvcF9MZWZ0X0xpbmU8L0E+PC9GT05UPiAgIDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTIzOV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xMzY1XzciPlRvcF9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5nZXRiZWd5eCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyMzZfMTQiPkdldF9XaW5kb3dfUG9zaXRpb248L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzg3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNDRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzODBfMTQiPkdldF9DdXJzb3JfUG9zaXRpb248L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQ1XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzODFfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQ2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzODJfNyI+TGluZTwvQT48L0ZPTlQ+ICAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjQ3XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzODNfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2dldHl4LjN4Lmh0bWwiPmdldHl4KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI0NF8xNCI+R2V0X0N1cnNvcl9Qb3NpdGlvbjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfODgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTM5OF8xNCI+R2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQ8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjUzXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzEzOTlfNyI+V2luPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNTRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQwMF83Ij5Ub3BfTGVmdF9MaW5lPC9BPjwvRk9OVD4gICAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQwMV83Ij5Ub3BfTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI1Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDAyXzciPklzX05vdF9BX1N1YndpbmRvdzwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBCb29sZWFuKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXR5eC4zeC5odG1sIj5nZXRwYXJ5eCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBJbnN0ZWFkIG9mIHBsYWNpbmcgLTEgaW4gdGhlIGNvb3JkaW5hdGVzIGFzIHJldHVybiwgd2UgdXNlIGEgYm9vbGVhbjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB0byByZXR1cm4gdGhlIGluZm8gdGhhdCB0aGUgd2luZG93IGhhcyBubyBwYXJlbnQuPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTI1Ml8xNCI+R2V0X09yaWdpbl9SZWxhdGl2ZV9Ub19QYXJlbnQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV84OSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MjRfMTMiPk5ld19QYWQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjY3XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDI0XzIyIj5MaW5lczwvQT48L0ZPTlQ+ICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82M18xMiI+TGluZV9Db3VudDwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNjhfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0MjVfMjIiPkNvbHVtbnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPm5ld3BhZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNjdfMTMiPk5ld19QYWQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzkwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3M18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQzOV8xMyI+U3ViX1BhZDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzRfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0MF83Ij5QYWQ8L0E+PC9GT05UPiAgICAgICAgICAgICAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0MV83Ij5OdW1iZXJfT2ZfTGluZXM8L0E+PC9GT05UPiAgICAgICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI3Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDQyXzciPk51bWJlcl9PZl9Db2x1bW5zPC9BPjwvRk9OVD4gICAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyNzdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ0M183Ij5GaXJzdF9MaW5lX1Bvc2l0aW9uPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjc4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NDRfNyI+Rmlyc3RfQ29sdW1uX1Bvc2l0aW9uPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+KSA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPnN1YnBhZCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzEyNzNfMTMiPlN1Yl9QYWQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzkxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyODNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NjdfMTQiPlJlZnJlc2g8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjg0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NjhfNyI+UGFkPC9BPjwvRk9OVD4gICAgICAgICAgICAgICAgICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4NV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDY5XzciPlNvdXJjZV9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjg2XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NzBfNyI+U291cmNlX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gICAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDcxXzciPkRlc3RpbmF0aW9uX1RvcF9Sb3c8L0E+PC9GT05UPiAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjg4XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NzJfNyI+RGVzdGluYXRpb25fTGVmdF9Db2x1bW48L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI4OV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDczXzciPkRlc3RpbmF0aW9uX0JvdHRvbV9Sb3c8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjkwXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE0NzRfNyI+RGVzdGluYXRpb25fUmlnaHRfQ29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfcGFkLjN4Lmh0bWwiPnByZWZyZXNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoUmVmcmVzaCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMjk1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDk3XzE0Ij5SZWZyZXNoX1dpdGhvdXRfVXBkYXRlPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5Nl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNDk4XzciPlBhZDwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTQ5OV83Ij5Tb3VyY2VfVG9wX1JvdzwvQT48L0ZPTlQ+ICAgICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTI5OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTAwXzciPlNvdXJjZV9MZWZ0X0NvbHVtbjwvQT48L0ZPTlQ+ICAgICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEyOTlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwMV83Ij5EZXN0aW5hdGlvbl9Ub3BfUm93PC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwMF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTAyXzciPkRlc3RpbmF0aW9uX0xlZnRfQ29sdW1uPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUwM183Ij5EZXN0aW5hdGlvbl9Cb3R0b21fUm93PC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwMl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTA0XzciPkRlc3RpbmF0aW9uX1JpZ2h0X0NvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3BhZC4zeC5odG1sIj5wbm91dHJlZnJlc2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChSZWZyZXNoX1dpdGhvdXRfVXBkYXRlKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzkzIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1MjdfMTQiPkFkZF9DaGFyYWN0ZXJfVG9fUGFkX0FuZF9FY2hvX0l0PC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMwOF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTI4XzciPlBhZDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMDlfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTUyOV83Ij5DaDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTJfOSI+QXR0cmlidXRlZF9DaGFyYWN0ZXI8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19wYWQuM3guaHRtbCI+cGVjaG9jaGFyKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzEyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTQwXzE0Ij5BZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdDwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMTNfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU0MV83Ij5QYWQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzE0XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NDJfNyI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gQ2hhcmFjdGVyKTsKKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChBZGRfQ2hhcmFjdGVyX1RvX1BhZF9BbmRfRWNob19JdCk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcm9sbC4zeC5odG1sIj5jdXJzX3Njcm9sbC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOTQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU1Ml8xNCI+U2Nyb2xsPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMyMl8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU1Ml8yMiI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiAgOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzIzXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTUzXzIyIj5BbW91bnQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiBJbnRlZ2VyIDo9IDEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Njcm9sbC4zeC5odG1sIj53c2NybCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHNjcm9sbCgpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogc2NybCgpPC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTMyMl8xNCI+U2Nyb2xsPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2guM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzk1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzMzRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NjVfMTQiPkRlbGV0ZV9DaGFyYWN0ZXI8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzM0XzMyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTY1XzMyIj5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsY2guM3guaHRtbCI+d2RlbGNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogZGVsY2goKTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOTYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTMzOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU3NV8xNCI+RGVsZXRlX0NoYXJhY3RlcjwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU3Nl83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM0MV83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNTc3XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzQyXzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1NzhfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZGVsY2guM3guaHRtbCI+bXZ3ZGVsY2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmRlbGNoKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChEZWxldGVfQ2hhcmFjdGVyKTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2guM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzk3IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM1Ml8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTU5MF8xMyI+UGVlazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNTJfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1OTBfMTkiPldpbjwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT4pCisgICAgIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBpbmNoKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbmNoLjN4Lmh0bWwiPndpbmNoKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV85OCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNThfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE1OTlfMTMiPlBlZWs8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzU5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MDBfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM2MF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjAxXzciPkxpbmU8L0E+PC9GT05UPiAgIDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNjFfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYwMl83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT4pIDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbmNoLjN4Lmh0bWwiPm12d2luY2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmluY2goKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBNb3JlIFBlZWsncyBmb2xsb3csIHByYWdtYSBJbmxpbmUgYXBwZWFycyBsYXRlci48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zY2guM3guaHRtbCI+Y3Vyc19pbnNjaC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfOTkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3MV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYxMl8xNCI+SW5zZXJ0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM3MV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTYxMl8yMiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzNzJfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MTNfMjIiPkNoPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzM1Ml85Ij5BdHRyaWJ1dGVkX0NoYXJhY3RlcjwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwiPndpbnNjaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGluc2NoKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjIzXzE0Ij5JbnNlcnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzc3XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI0XzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzc4XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI1XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzc5XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjI2XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzODBfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2MjdfNyI+Q2g8L0E+PC9GT05UPiAgICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zY2guM3guaHRtbCI+bXZ3aW5zY2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmluc2NoKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0M18xNCI+SW5zZXJ0PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM4OV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0M18yMiI+V2luPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzEzOTBfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NDRfMjIiPlN0cjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTM5MV8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY0NV8yMiI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zc3RyLjN4Lmh0bWwiPndpbnNuc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogd2luc3N0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5zbnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5zc3RyKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwMiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzk4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjYxXzE0Ij5JbnNlcnQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzk4XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjYyXzciPldpbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xMzk5XzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjYzXzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYwXzkiPkxpbmVfUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDAwXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjY0XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MDFfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2NjVfNyI+U3RyPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDAyXzIyIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjY2XzciPkxlbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+IEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luc3N0ci4zeC5odG1sIj5tdndpbnNuc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZ3aW5zc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmluc25zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12aW5zc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChJbnNlcnQpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQxNF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTY4NV8xNCI+UGVlazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MTRfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2ODVfMjAiPldpbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MTVfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE2ODZfMjAiPlN0cjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDE2XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNjg3XzIwIj5MZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zdHIuM3guaHRtbCI+d2lubnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHdpbnN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogaW5uc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBpbnN0cigpPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMDQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcxNF8xNCI+UGVlazwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0MjNfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MTVfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyNF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcxNl83Ij5MaW5lPC9BPjwvRk9OVD4gICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDI1XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzE3XzciPkNvbHVtbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MV85Ij5Db2x1bW5fUG9zaXRpb248L0E+OworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyNl8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcxOF83Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQyN18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcxOV83Ij5MZW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiAgSW50ZWdlciA6PSAtMSk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5zdHIuM3guaHRtbCI+bXZ3aW5uc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZ3aW5zdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12aW5uc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmluc3RyKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDM4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzI2XzE0Ij5QZWVrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQzOF8yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTcyN183Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDM5XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzI4XzciPlN0cjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDBfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3MjlfNyI+TGVuPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbCI+d2luY2huc3RyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogd2luY2hzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGluY2huc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBpbmNoc3RyKCk8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwNiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQ3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzYzXzE0Ij5QZWVrPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ0N18yMCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTc2NF83Ij5XaW48L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDQ4XzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzY1XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NDlfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NjZfNyI+Q29sdW1uPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDUwXzIwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzY3XzciPlN0cjwvQT48L0ZPTlQ+ICAgIDogPGI+b3V0PC9iPiBBdHRyaWJ1dGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NTFfMjAiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NjhfNyI+TGVuPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIEludGVnZXIgOj0gLTEpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbCI+bXZ3aW5jaG5zdHIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdndpbmNoc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmluY2huc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmluY2hzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBXZSBkb24ndCBpbmxpbmUgdGhlIFBlZWsgcHJvY2VkdXJlczwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbCI+Y3Vyc19nZXRzdHIuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDYzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzc1XzE0Ij5HZXQ8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDYzXzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xNzc1XzE5Ij5XaW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNTdfOSI+V2luZG93PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl80NzZfMTMiPlN0YW5kYXJkX1dpbmRvdzwvQT47CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NjRfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NzZfMTkiPlN0cjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NjVfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE3NzdfMTkiPkxlbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+ICBJbnRlZ2VyIDo9IC0xKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbCI+d2dldG5zdHIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiB3Z2V0c3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBnZXRuc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBnZXRzdHIoKTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBhY3R1YWxseSBnZXRzdHIgaXMgbm90IHN1cHBvcnRlZCBiZWNhdXNlIHRoYXQgcmVzdWx0cyBpbiBidWZmZXI8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgb3ZlcmZsb3dzLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTA4IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MDRfMTQiPkdldDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0NzRfMTkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MDVfNyI+V2luPC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU3XzkiPldpbmRvdzwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNDc2XzEzIj5TdGFuZGFyZF9XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDc1XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODA2XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl82MF85Ij5MaW5lX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3Nl8xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgwN183Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiAgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjFfOSI+Q29sdW1uX1Bvc2l0aW9uPC9BPjsKKyAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ3N18xOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgwOF83Ij5TdHI8L0E+PC9GT05UPiAgICA6IDxiPm91dDwvYj4gU3RyaW5nOworICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDc4XzE5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODA5XzciPkxlbjwvQT48L0ZPTlQ+ICAgIDogPGI+aW48L2I+ICBJbnRlZ2VyIDo9IC0xKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbCI+bXZ3Z2V0bnN0cigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IG12d2dldHN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogbXZnZXRuc3RyKCk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiBtdmdldHN0cigpPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEdldCBpcyBub3QgaW5saW5lZDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgSW1wbGVtZW50ZWQ6IHNsa19hdHRyX29uLCBzbGtfYXR0cl9vZmYsIHNsa19hdHRyX3NldDwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTFfOSI+U29mdF9MYWJlbF9LZXlfRm9ybWF0PC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTFfMzUiPlRocmVlX1R3b19UaHJlZTwvQT48L0ZPTlQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5Ml8zNSI+Rm91cl9Gb3VyPC9BPjwvRk9OVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDkzXzM1Ij5QQ19TdHlsZTwvQT48L0ZPTlQ+LCAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBuY3Vyc2VzIHNwZWNpZmljPC9FTT48L0ZPTlQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk0XzM1Ij5QQ19TdHlsZV9XaXRoX0luZGV4PC9BPjwvRk9OVD4pOyAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAiPC9FTT48L0ZPTlQ+CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTVfOSI+TGFiZWxfTnVtYmVyPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPm5ldzwvYj4gUG9zaXRpdmUgPGI+cmFuZ2U8L2I+IDEgLi4gMTI7CisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE0OTZfOSI+TGFiZWxfSnVzdGlmaWNhdGlvbjwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk2XzMzIj5MZWZ0PC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTQ5Nl8zOSI+Q2VudGVyZWQ8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk2XzQ5Ij5SaWdodDwvQT48L0ZPTlQ+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEwOSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNDk5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODE2XzE0Ij5Jbml0X1NvZnRfTGFiZWxfS2V5czwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MDBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgxN183Ij5Gb3JtYXQ8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDkxXzkiPlNvZnRfTGFiZWxfS2V5X0Zvcm1hdDwvQT4gOj0gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5MV8zNSI+VGhyZWVfVHdvX1RocmVlPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19pbml0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5OV8xNCI+SW5pdF9Tb2Z0X0xhYmVsX0tleXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTA1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODI3XzE0Ij5TZXRfU29mdF9MYWJlbF9LZXk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTA1XzM0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xODI3XzM0Ij5MYWJlbDwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE0OTVfOSI+TGFiZWxfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUwNl8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTgyOF8zNCI+VGV4dDwvQT48L0ZPTlQ+ICA6IDxiPmluPC9iPiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MDdfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4MjlfMzQiPkZtdDwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTQ5Nl85Ij5MYWJlbF9KdXN0aWZpY2F0aW9uPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk2XzMzIj5MZWZ0PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19zZXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcHJvY2VkdXJlPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMTEiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUxMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg0Nl8xNCI+UmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXM8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+c2xrX3JlZnJlc2goKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTEyXzE0Ij5SZWZyZXNoX1NvZnRfTGFiZWxfS2V5czwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTEyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MTdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NTZfMTQiPlJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19ub3V0cmVmcmVzaCgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MTdfMTQiPlJlZnJlc2hfU29mdF9MYWJlbF9LZXlzX1dpdGhvdXRfVXBkYXRlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMTMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyMl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg2Nl8xNCI+R2V0X1NvZnRfTGFiZWxfS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyMl8zNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg2Nl8zNCI+TGFiZWw8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk1XzkiPkxhYmVsX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MjNfMzQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4NjdfMzQiPlRleHQ8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19sYWJlbCgpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTE0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyN18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg3NV8xMyI+R2V0X1NvZnRfTGFiZWxfS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUyN18zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg3NV8zMyI+TGFiZWw8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNDk1XzkiPkxhYmVsX051bWJlcjwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfbGFiZWwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKEdldF9Tb2Z0X0xhYmVsX0tleSk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMTUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTUzM18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTg4M18xNCI+Q2xlYXJfU29mdF9MYWJlbF9LZXlzPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19jbGVhcigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1MzNfMTQiPkNsZWFyX1NvZnRfTGFiZWxfS2V5czwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTE2IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1MzhfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE4OTNfMTQiPlJlc3RvcmVfU29mdF9MYWJlbF9LZXlzPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19yZXN0b3JlKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTUzOF8xNCI+UmVzdG9yZV9Tb2Z0X0xhYmVsX0tleXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzExNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTQzXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTAzXzE0Ij5Ub3VjaF9Tb2Z0X0xhYmVsX0tleXM8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+c2xrX3RvdWNoKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU0M18xNCI+VG91Y2hfU29mdF9MYWJlbF9LZXlzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU0OF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkxM18xNCI+U3dpdGNoX1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+PC9GT05UPgorICAgICAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTQ5XzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MTRfNyI+QXR0cjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzMwN185Ij5DaGFyYWN0ZXJfQXR0cmlidXRlX1NldDwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NTBfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTkxNV83Ij5PbjwvQT48L0ZPTlQ+ICAgOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+c2xrX2F0dHJvbigpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IHNsa19hdHRyb2ZmKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTQ4XzE0Ij5Td2l0Y2hfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlczwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTE5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NTZfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5MzdfMTQiPlNldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4KKyAgICAgKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1N183IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTM4XzciPkF0dHI8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zNTBfNCI+Tm9ybWFsX1ZpZGVvPC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU1OF83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTM5XzciPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk5XzkiPkNvbG9yX1BhaXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPidGaXJzdCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19hdHRyc2V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTU1Nl8xNCI+U2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1NjNfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5NTNfMTMiPkdldF9Tb2Z0X0xhYmVsX0tleV9BdHRyaWJ1dGVzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDdfOSI+Q2hhcmFjdGVyX0F0dHJpYnV0ZV9TZXQ8L0E+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Nsay4zeC5odG1sIj5zbGtfYXR0cigpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTIxIiMyfDwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU2N18xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk2M18xMyI+R2V0X1NvZnRfTGFiZWxfS2V5X0F0dHJpYnV0ZXM8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19zbGsuM3guaHRtbCI+c2xrX2F0dHIoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lIChHZXRfU29mdF9MYWJlbF9LZXlfQXR0cmlidXRlcyk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU3Ml8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk3M18xNCI+U2V0X1NvZnRfTGFiZWxfS2V5X0NvbG9yPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU3Ml80MCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk3M180MCI+UGFpcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2xrLjN4Lmh0bWwiPnNsa19jb2xvcigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE1NzJfMTQiPlNldF9Tb2Z0X0xhYmVsX0tleV9Db2xvcjwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4va2V5Ym91bmQuM3guaHRtbCI+a2V5Ym91bmQuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IEltcGxlbWVudGVkOiBrZXlib3VuZDwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4va2V5b2suM3guaHRtbCI+a2V5b2suM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyMyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTg2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTg0XzE0Ij5FbmFibGVfS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU4Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk4NF8yNiI+S2V5PC9BPjwvRk9OVD4gICAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNzhfMTIiPlNwZWNpYWxfS2V5X0NvZGU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU4N18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk4NV8yNiI+RW5hYmxlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gQm9vbGVhbiA6PSBUcnVlKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4va2V5b2suM3guaHRtbCI+a2V5b2soKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTg2XzE0Ij5FbmFibGVfS2V5PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9kZWZpbmVfa2V5LjN4Lmh0bWwiPmRlZmluZV9rZXkuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyNCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNTk2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8xOTk3XzE0Ij5EZWZpbmVfS2V5PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTU5Nl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMTk5N18yNiI+RGVmaW5pdGlvbjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE1OTdfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzE5OThfMjYiPktleTwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83OF8xMiI+U3BlY2lhbF9LZXlfQ29kZTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9kZWZpbmVfa2V5LjN4Lmh0bWwiPmRlZmluZV9rZXkoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNTk2XzE0Ij5EZWZpbmVfS2V5PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBOb3QgaW1wbGVtZW50ZWQgOiBmaWx0ZXIsIHVzZV9lbnY8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBwdXR3aW4sIGdldHdpbiBhcmUgaW4gdGhlIGNoaWxkIHBhY2thZ2UgUHV0V2luPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjEwXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MF8xNCI+S2V5X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjEwXzI0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl85MF8yNCI+S2V5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYxMV8yNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfOTFfMjQiPk5hbWU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc191dGlsLjN4Lmh0bWwiPmtleW5hbWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIGV4dGVybmFsIG5hbWUgZm9yIGEgcmVhbCBrZXlzdHJva2UuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjE2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82Ml8xMyI+S2V5X05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjE2XzIzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl82Ml8yMyI+S2V5PC9BPjwvRk9OVD4gIDogPGI+aW48L2I+ICA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl83M18xMiI+UmVhbF9LZXlfQ29kZTwvQT4pIDxiPnJldHVybjwvYj4gU3RyaW5nOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+a2V5bmFtZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTYW1lIGFzIGZ1bmN0aW9uPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFdlIGRvbid0IGlubGluZSB0aGlzIHJvdXRpbmU8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEyNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjIyXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDEzXzE0Ij5Vbl9Db250cm9sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyMl8yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAxM18yNiI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MjNfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMTRfMjYiPlN0cjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiBTdHJpbmcpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+dW5jdHJsKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMjgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjI3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDIyXzEzIj5Vbl9Db250cm9sPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTYyN18yNSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjAyMl8yNSI+Q2g8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzUyXzkiPkF0dHJpYnV0ZWRfQ2hhcmFjdGVyPC9BPikgPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj51bmN0cmwoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFVuX0NvbnRyb2wpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTI5IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MzNfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMzBfMTQiPkRlbGF5X091dHB1dDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2MzNfMjgiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwMzBfMjgiPk1zZWNzPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gTmF0dXJhbCk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdXRpbC4zeC5odG1sIj5kZWxheV9vdXRwdXQoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjMzXzE0Ij5EZWxheV9PdXRwdXQ8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEzMCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjM4XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDQwXzE0Ij5GbHVzaF9JbnB1dDwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3V0aWwuM3guaHRtbCI+Zmx1c2hpbnAoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNjM4XzE0Ij5GbHVzaF9JbnB1dDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEzMSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NDdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwNTBfMTMiPkJhdWRyYXRlPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBOYXR1cmFsOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5iYXVkcmF0ZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NDdfMTMiPkJhdWRyYXRlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzIiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjUyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDU4XzEzIj5FcmFzZV9DaGFyYWN0ZXI8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IENoYXJhY3RlcjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+ZXJhc2VjaGFyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY1Ml8xMyI+RXJhc2VfQ2hhcmFjdGVyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjU3XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDY2XzEzIj5LaWxsX0NoYXJhY3RlcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQ2hhcmFjdGVyOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5raWxsY2hhcigpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE2NTdfMTMiPktpbGxfQ2hhcmFjdGVyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjYyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDc0XzEzIj5IYXNfSW5zZXJ0X0NoYXJhY3RlcjwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+aGFzX2ljKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY2Ml8xMyI+SGFzX0luc2VydF9DaGFyYWN0ZXI8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEzNSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2NjdfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIwODZfMTMiPkhhc19JbnNlcnRfTGluZTwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gQm9vbGVhbjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+aGFzX2lsKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY2N18xMyI+SGFzX0luc2VydF9MaW5lPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjcyXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMDk4XzEzIj5TdXBwb3J0ZWRfQXR0cmlidXRlczwvQT48L0ZPTlQ+IDxiPnJldHVybjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMzA3XzkiPkNoYXJhY3Rlcl9BdHRyaWJ1dGVfU2V0PC9BPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+dGVybWF0dHJzKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTY3Ml8xMyI+U3VwcG9ydGVkX0F0dHJpYnV0ZXM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzEzNyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjc3XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTA4XzE0Ij5Mb25nX05hbWU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjc3XzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTA4XzI1Ij5OYW1lPC9BPjwvRk9OVD4gOiA8Yj5vdXQ8L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmxvbmduYW1lKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNjgxXzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTE2XzEzIj5Mb25nX05hbWU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+bG9uZ25hbWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKExvbmdfTmFtZSk7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xMzkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTY4N18xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjEyNF8xNCI+VGVybWluYWxfTmFtZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2ODdfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMjRfMjkiPk5hbWU8L0E+PC9GT05UPiA6IDxiPm91dDwvYj4gU3RyaW5nKTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+dGVybW5hbWUoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE0MCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE2OTFfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxMzJfMTMiPlRlcm1pbmFsX05hbWU8L0E+PC9GT05UPiA8Yj5yZXR1cm48L2I+IFN0cmluZzsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+dGVybW5hbWUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgU2FtZSBhcyBmdW5jdGlvbjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKFRlcm1pbmFsX05hbWUpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQ09MT1JfUEFJUjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBDT0xPUl9QQUlSKG4pIGluIEMgaXMgdGhlIHNhbWUgYXM8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQXR0cmlidXRlZF9DaGFyYWN0ZXIoQ2ggPSZndDsgTnVsLCBDb2xvciA9Jmd0OyBuLCBBdHRyID0mZ3Q7IE5vcm1hbF9WaWRlbyk8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgSW4gQyB5b3Ugb2Z0ZW4gc2VlIHNvbWV0aGluZyBsaWtlIGMgPSBjIHwgQ09MT1JfUEFJUihuKTs8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGMuQ29sb3IgOj0gbjs8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE0MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzA3XzE0Ij5TdGFydF9Db2xvcjwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPnN0YXJ0X2NvbG9yKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IEltcG9ydCAoQywgU3RhcnRfQ29sb3IsICJzdGFydF9jb2xvciIpOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTQyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTJfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNDBfMTQiPkluaXRfUGFpcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTJfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNDBfMjUiPlBhaXI8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8zMDFfMTIiPlJlZGVmaW5hYmxlX0NvbG9yX1BhaXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzEzXzI1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTQxXzI1Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MTRfMjUiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxNDJfMjUiPkJhY2s8L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+aW5pdF9wYWlyKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxMl8xNCI+SW5pdF9QYWlyPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDMiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxOV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE2Ml8xNCI+UGFpcl9Db250ZW50PC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcxOV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE2Ml8yOCI+UGFpcjwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5OV85Ij5Db2xvcl9QYWlyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyMF8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE2M18yOCI+Rm9yZTwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTcyMV8yOCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE2NF8yOCI+QmFjazwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfY29sb3IuM3guaHRtbCI+cGFpcl9jb250ZW50KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTcxOV8xNCI+UGFpcl9Db250ZW50PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzI2XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTgyXzEzIj5IYXNfQ29sb3JzPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPmhhc19jb2xvcnMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzI2XzEzIj5IYXNfQ29sb3JzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDUiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczMV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE5NF8xNCI+SW5pdF9Db2xvcjwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzFfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTRfMjYiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjc4XzkiPkNvbG9yX051bWJlcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzMyXzI2IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMTk1XzI2Ij5SZWQ8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTczM18yNiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjE5Nl8yNiI+R3JlZW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3MzRfMjYiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIxOTdfMjYiPkJsdWU8L0E+PC9GT05UPiAgOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPmluaXRfY29sb3IoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzMxXzE0Ij5Jbml0X0NvbG9yPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDYiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5mdW5jdGlvbjwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzM5XzEzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjExXzEzIj5DYW5fQ2hhbmdlX0NvbG9yPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBCb29sZWFuOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwiPmNhbl9jaGFuZ2VfY29sb3IoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzM5XzEzIj5DYW5fQ2hhbmdlX0NvbG9yPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDciIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc0NF8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIyM18xNCI+Q29sb3JfQ29udGVudDwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NDRfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMjNfMjkiPkNvbG9yPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc0NV8yOSIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjIyNF8yOSI+UmVkPC9BPjwvRk9OVD4gICA6IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMjk1XzkiPlJHQl9WYWx1ZTwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzQ2XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjI1XzI5Ij5HcmVlbjwvQT48L0ZPTlQ+IDogPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yOTVfOSI+UkdCX1ZhbHVlPC9BPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NDdfMjkiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyMjZfMjkiPkJsdWU8L0E+PC9GT05UPiAgOiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI5NV85Ij5SR0JfVmFsdWU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19jb2xvci4zeC5odG1sIj5jb2xvcl9jb250ZW50KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc0NF8xNCI+Q29sb3JfQ29udGVudDwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBOb3QgaW1wbGVtZW50ZWQ6IGdldHN5eCwgc2V0c3l4PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1Nl85Ij5DdXJzZXNfTW9kZTwvQT48L0ZPTlQ+IDxiPmlzPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzU2XzI1Ij5DdXJzZXM8L0E+PC9GT05UPiwgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzU2XzMzIj5TaGVsbDwvQT48L0ZPTlQ+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE0OCIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzU5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjQ3XzE0Ij5TYXZlX0N1cnNlc19Nb2RlPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc1OV8zMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI0N18zMiI+TW9kZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NTZfOSI+Q3Vyc2VzX01vZGU8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+ZGVmX3Byb2dfbW9kZSgpPC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IGRlZl9zaGVsbF9tb2RlKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzU5XzE0Ij5TYXZlX0N1cnNlc19Nb2RlPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNDkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc2NV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjI2NV8xNCI+UmVzZXRfQ3Vyc2VzX01vZGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzY1XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjY1XzMzIj5Nb2RlPC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc1Nl85Ij5DdXJzZXNfTW9kZTwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5yZXNldF9wcm9nX21vZGUoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiByZXNldF9zaGVsbF9tb2RlKCk8L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzY1XzE0Ij5SZXNldF9DdXJzZXNfTW9kZTwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTUwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3NzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIyODNfMTQiPlNhdmVfVGVybWluYWxfU3RhdGU8L0E+PC9GT05UPjsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbCI+c2F2ZXR0eSgpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NzFfMTQiPlNhdmVfVGVybWluYWxfU3RhdGU8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzc2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMjkzXzE0Ij5SZXNldF9UZXJtaW5hbF9TdGF0ZTwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5yZXNldHR5KCk7PC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3NzZfMTQiPlJlc2V0X1Rlcm1pbmFsX1N0YXRlPC9BPik7CisKKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4MF85Ij5TdGRzY3JfSW5pdF9Qcm9jPC9BPjwvRk9OVD4gPGI+aXM8L2I+IDxiPmFjY2VzczwvYj4KKyAgICAgIDxiPmZ1bmN0aW9uPC9iPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzgxXzE3Ij5XaW48L0E+PC9GT05UPiAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+OworICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTc4Ml8xNyI+Q29sdW1uczwvQT48L0ZPTlQ+IDogPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjVfMTIiPkNvbHVtbl9Db3VudDwvQT4pIDxiPnJldHVybjwvYj4gSW50ZWdlcjsKKyAgIDxiPnByYWdtYTwvYj4gQ29udmVudGlvbiAoQywgPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTc4MF85Ij5TdGRzY3JfSW5pdF9Qcm9jPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE4uQi46IHRoZSByZXR1cm4gdmFsdWUgaXMgYWN0dWFsbHkgaWdub3JlZCwgYnV0IGl0IHNlZW1zIHRvIGJlPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgIGEgZ29vZCBwcmFjdGljZSB0byByZXR1cm4gMCBpZiB5b3UgdGhpbmsgYWxsIHdlbnQgZmluZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICBhbmQgLTEgb3RoZXJ3aXNlLjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTUyIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3ODlfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzMDNfMTQiPlJpcF9PZmZfTGluZXM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzg5XzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzAzXzI5Ij5MaW5lczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzkwXzI5IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzA0XzI5Ij5Qcm9jPC9BPjwvRk9OVD4gIDogPGI+aW48L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODBfOSI+U3Rkc2NyX0luaXRfUHJvYzwvQT4pOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5yaXBvZmZsaW5lKCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE4uQi46IHRvIGJlIG1vcmUgcHJlY2lzZSwgdGhpcyB1c2VzIGEgbmN1cnNlcyBzcGVjaWZpYyBlbmhhbmNlbWVudCBvZjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICByaXBvZmZsaW5lKCksIGluIHdoaWNoIHRoZSBMaW5lcyBhcmd1bWVudCBhYnNvbHV0ZSB2YWx1ZSBpcyB0aGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgICAgICAgbnVtYmVyIG9mIGxpbmVzIHRvIGJlIHJpcHBlZCBvZi4gVGhlIG9mZmljaWFsIHJpcG9mZmxpbmUoKSBvbmx5PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgIHVzZXMgdGhlIHNpZ24gb2YgTGluZXMgdG8gcmlwIG9mIGEgc2luZ2xlIGxpbmUgZnJvbSBib3R0b20gb3IgdG9wLjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE3ODlfMTQiPlJpcF9PZmZfTGluZXM8L0E+KTsKKworICAgPGI+dHlwZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xNzk4XzkiPkN1cnNvcl9WaXNpYmlsaXR5PC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OThfMzEiPkludmlzaWJsZTwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OThfNDIiPk5vcm1hbDwvQT48L0ZPTlQ+LCA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE3OThfNTAiPlZlcnlfVmlzaWJsZTwvQT48L0ZPTlQ+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODAxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzE1XzE0Ij5TZXRfQ3Vyc29yX1Zpc2liaWxpdHk8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODAxXzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzE1XzM3Ij5WaXNpYmlsaXR5PC9BPjwvRk9OVD4gOiA8Yj5pbjwvYj4gPGI+b3V0PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xNzk4XzkiPkN1cnNvcl9WaXNpYmlsaXR5PC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfc2V0KCk8L0E+PC9FTT48L0ZPTlQ+CisgICA8Yj5wcmFnbWE8L2I+IElubGluZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfMTgwMV8xNCI+U2V0X0N1cnNvcl9WaXNpYmlsaXR5PC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNTQiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgwNl8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjMyOF8xNCI+TmFwX01pbGxpX1NlY29uZHM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODA2XzMzIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzI4XzMzIj5NczwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IE5hdHVyYWwpOworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9jdXJzX2tlcm5lbC4zeC5odG1sIj5uYXBtcygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MDZfMTQiPk5hcF9NaWxsaV9TZWNvbmRzPC9BPik7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IFNvbWUgdXNlZnVsIGhlbHBlcnMuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxiPnR5cGU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxM185Ij5UcmFuc2Zvcm1fRGlyZWN0aW9uPC9BPjwvRk9OVD4gPGI+aXM8L2I+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTNfMzMiPkZyb21fU2NyZWVuPC9BPjwvRk9OVD4sIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxM180NiI+VG9fU2NyZWVuPC9BPjwvRk9OVD4pOworICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTRfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzIzOTZfMTQiPlRyYW5zZm9ybV9Db29yZGluYXRlczwvQT48L0ZPTlQ+CisgICAgICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTVfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM5N183Ij5XPC9BPjwvRk9OVD4gICAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTgxNl83IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yMzk4XzciPkxpbmU8L0E+PC9GT05UPiAgIDogPGI+aW48L2I+IDxiPm91dDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRzLmh0bSNyZWZfNjBfOSI+TGluZV9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MTdfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjM5OV83Ij5Db2x1bW48L0E+PC9GT05UPiA6IDxiPmluPC9iPiA8Yj5vdXQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYxXzkiPkNvbHVtbl9Qb3NpdGlvbjwvQT47CisgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MThfNyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQwMF83Ij5EaXI8L0E+PC9GT05UPiAgICA6IDxiPmluPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODEzXzkiPlRyYW5zZm9ybV9EaXJlY3Rpb248L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MTNfMzMiPkZyb21fU2NyZWVuPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoaXMgcHJvY2VkdXJlIHRyYW5zZm9ybXMgc2NyZWVuIGNvb3JkaW5hdGVzIGludG8gY29vcmRpbmF0ZXMgcmVsYXRpdmU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgdG8gdGhlIHdpbmRvdyBhbmQgdmljZSB2ZXJzYSwgZGVwZW5kaW5nIG9uIHRoZSBEaXIgcGFyYW1ldGVyLjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBTY3JlZW4gY29vcmRpbmF0ZXMgYXJlIHRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbnMgb24gdGhlIHBoeXNpY2FsIGRldmljZS48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQW4gQ3Vyc2VzX0V4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiBMaW5lIGFuZCBDb2x1bW4gYXJlIG5vdCBpbiB0aGU8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgV2luZG93IG9yIGlmIHlvdSBwYXNzIHRoZSBOdWxsX1dpbmRvdyBhcyBhcmd1bWVudC48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgV2UgZG9uJ3QgaW5saW5lIHRoaXMgcHJvY2VkdXJlPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9kZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5kZWZhdWx0X2NvbG9ycy4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTU1IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MjVfMTQiPlVzZV9EZWZhdWx0X0NvbG9yczwvQT48L0ZPTlQ+OworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBS0E6IDxBIEhSRUY9Ii4uL21hbi9kZWZhdWx0X2NvbG9ycy4zeC5odG1sIj51c2VfZGVmYXVsdF9jb2xvcnMoKTwvQT48L0VNPjwvRk9OVD4KKyAgIDxiPnByYWdtYTwvYj4gSW5saW5lICg8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8xODMxXzE0Ij5Vc2VfRGVmYXVsdF9Db2xvcnM8L0E+KTsKKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1NiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODM2XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDM1XzE0Ij5Bc3N1bWVfRGVmYXVsdF9Db2xvcnM8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODM2XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDM1XzM3Ij5Gb3JlPC9BPjwvRk9OVD4gOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yNzhfOSI+Q29sb3JfTnVtYmVyPC9BPiA6PSA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl8yODVfNCI+RGVmYXVsdF9Db2xvcjwvQT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4MzdfMzciIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0MzZfMzciPkJhY2s8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI3OF85Ij5Db2xvcl9OdW1iZXI8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzI4NV80Ij5EZWZhdWx0X0NvbG9yPC9BPik7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2RlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPmFzc3VtZV9kZWZhdWx0X2NvbG9ycygpPC9BPjwvRU0+PC9GT05UPgorICAgPGI+cHJhZ21hPC9iPiBJbmxpbmUgKDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE4MzZfMTQiPkFzc3VtZV9EZWZhdWx0X0NvbG9yczwvQT4pOworCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19leHRlbmQuM3guaHRtbCI+Y3Vyc19leHRlbmQuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE1NyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPmZ1bmN0aW9uPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NDZfMTMiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0NTBfMTMiPkN1cnNlc19WZXJzaW9uPC9BPjwvRk9OVD4gPGI+cmV0dXJuPC9iPiBTdHJpbmc7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZXh0ZW5kLjN4Lmh0bWwiPmN1cnNlc192ZXJzaW9uKCk8L0E+PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNTgiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFRoZSByZXR1cm52YWx1ZSBpcyB0aGUgcHJldmlvdXMgc2V0dGluZyBvZiB0aGUgZmxhZzwvRU0+PC9GT05UPgorICAgPGI+ZnVuY3Rpb248L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1MV8xMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ3M18xMyI+VXNlX0V4dGVuZGVkX05hbWVzPC9BPjwvRk9OVD4gKDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1MV8zMyIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ3M18zMyI+RW5hYmxlPC9BPjwvRk9OVD4gOiBCb29sZWFuKSA8Yj5yZXR1cm48L2I+IEJvb2xlYW47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfZXh0ZW5kLjN4Lmh0bWwiPnVzZV9leHRlbmRlZF9uYW1lcygpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlLjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgIzFBIE5BTUU9IkFGVV8xNTkiIzJ8PC9FTT48L0ZPTlQ+CisgICA8Yj5wcm9jZWR1cmU8L2I+IDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTg1OV8xNCIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjQ1OV8xNCI+Q3Vyc2VzX0ZyZWVfQWxsPC9BPjwvRk9OVD47CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfdHJhY2UuM3guaHRtbCI+X25jX2ZyZWVhbGwoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcC4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTYwIiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE4NjdfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI0ODhfMTQiPlNjcmVlbl9EdW1wX1RvX0ZpbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODY3XzM1IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNDg4XzM1Ij5GaWxlbmFtZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+c2NyX2R1bXAoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE2MSIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODcxXzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTAxXzE0Ij5TY3JlZW5fUmVzdG9yZV9Gcm9tX0ZpbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODcxXzQwIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTAxXzQwIj5GaWxlbmFtZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+c2NyX3Jlc3RvcmUoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE2MiIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc1XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTE0XzE0Ij5TY3JlZW5fSW5pdF9Gcm9tX0ZpbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc1XzM3IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTE0XzM3Ij5GaWxlbmFtZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+c2NyX2luaXQoKTwvQT48L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAjMUEgTkFNRT0iQUZVXzE2MyIjMnw8L0VNPjwvRk9OVD4KKyAgIDxiPnByb2NlZHVyZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc5XzE0IiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTI3XzE0Ij5TY3JlZW5fU2V0X0ZpbGU8L0E+PC9GT05UPiAoPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl8xODc5XzMxIiBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZGIuaHRtI3JlZl8yNTI3XzMxIj5GaWxlbmFtZTwvQT48L0ZPTlQ+IDogPGI+aW48L2I+IFN0cmluZyk7CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEFLQTogPEEgSFJFRj0iLi4vbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbCI+c2NyX3NldCgpPC9BPjwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfCBNYW4gcGFnZSA8QSBIUkVGPSIuLi9tYW4vY3Vyc19wcmludC4zeC5odG1sIj5jdXJzX3ByaW50LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbXBsZW1lbnRlZDogIG1jcHJpbnQ8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL2N1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3LjN4PC9BPjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIE5vdCBpbXBsZW1lbnRlZDogcHJpbnR3LCAgd3ByaW50dywgbXZwcmludHcsIG12d3ByaW50dywgdndwcmludHcsPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgdndfcHJpbnR3PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIFBsZWFzZSB1c2UgdGhlIEFkYSBzdHlsZSBUZXh0X0lPIGNoaWxkIHBhY2thZ2VzIGZvciBmb3JtYXR0ZWQ8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgcHJpbnRpbmcuIEl0IGRvZXNuJ3QgbWFrZSBhIGxvdCBvZiBzZW5zZSB0byBtYXAgdGhlIHByaW50ZiBzdHlsZTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBDIGZ1bmN0aW9ucyB0byBBZGEuPC9FTT48L0ZPTlQ+CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8IE1hbiBwYWdlIDxBIEhSRUY9Ii4uL21hbi9jdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncuM3g8L0E+PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgTm90IGltcGxlbWVudGVkOiBzY2Fudywgd3NjYW53LCBtdnNjYW53LCBtdndzY2FudywgdndzY2Fudywgdndfc2Nhbnc8L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL3Jlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBOb3QgSW1wbGVtZW50ZWQ6IHJlc2l6ZXRlcm08L0VNPjwvRk9OVD4KKworICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIHwgTWFuIHBhZ2UgPEEgSFJFRj0iLi4vbWFuL3dyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZS4zeDwvQT48L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTwvRU0+PC9GT05UPgorCisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICMxQSBOQU1FPSJBRlVfMTY0IiMyfDwvRU0+PC9GT05UPgorICAgPGI+cHJvY2VkdXJlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTFfMTQiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDBfMTQiPlJlc2l6ZTwvQT48L0ZPTlQ+ICg8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MTFfMjIiIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2FkYi5odG0jcmVmXzI1NDBfMjIiPldpbjwvQT48L0ZPTlQ+ICAgICAgICAgICAgICAgOiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ3Nl8xMyI+U3RhbmRhcmRfV2luZG93PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxMl8yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjU0MV8yMiI+TnVtYmVyX09mX0xpbmVzPC9BPjwvRk9OVD4gICA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzYzXzEyIj5MaW5lX0NvdW50PC9BPjsKKyAgICAgICAgICAgICAgICAgICAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkxM18yMiIgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlLWN1cnNlc19fYWRiLmh0bSNyZWZfMjU0Ml8yMiI+TnVtYmVyX09mX0NvbHVtbnM8L0E+PC9GT05UPiA6IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzY1XzEyIj5Db2x1bW5fQ291bnQ8L0E+KTsKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgQUtBOiA8QSBIUkVGPSIuLi9tYW4vd3Jlc2l6ZS4zeC5odG1sIj53cmVzaXplKCk8L0E+PC9FTT48L0ZPTlQ+CisKKzxiPnByaXZhdGU8L2I+CisgICA8Yj50eXBlPC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDxiPmlzPC9iPiA8Yj5uZXc8L2I+IFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzLkludGVnZXJfQWRkcmVzczsKKyAgIDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzU4XzQiPk51bGxfV2luZG93PC9BPiA6IDxiPmNvbnN0YW50PC9iPiA8QSBIUkVGPSJ0ZXJtaW5hbF9pbnRlcmZhY2UtY3Vyc2VzX19hZHMuaHRtI3JlZl81N185Ij5XaW5kb3c8L0E+IDo9IDA7CisKKyAgIDxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVGhlIG5leHQgY29uc3RhbnRzIGFyZSBnZW5lcmF0ZWQgYW5kIG1heSBiZSBkaWZmZXJlbnQgb24geW91cjwvRU0+PC9GT05UPgorICAgPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBhcmNoaXRlY3R1cmUuPC9FTT48L0ZPTlQ+CisgICA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS08L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkyM180Ij5TaXplb2ZfYm9vbDwvQT48L0ZPTlQ+ICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBOYXR1cmFsIDo9ICAxOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGJvb2w8L0VNPjwvRk9OVD4KKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkyNF80Ij5PZmZzZXRfWFk8L0E+PC9GT05UPiAgICAgICAgICA6IDxiPmNvbnN0YW50PC9iPiBOYXR1cmFsIDo9ICAxOyA8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIGludDwvRU0+PC9GT05UPgorCisgICA8Yj50eXBlPC9iPiA8Rk9OVCBDT0xPUj1yZWQ+PEEgTkFNRT0icmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+PC9GT05UPiA8Yj5pczwvYj4gPGI+bW9kPC9iPiAyICoqIDxBIEhSRUY9ImludGVyZmFjX19hZHMuaHRtI3JlZl8zOF85Ij5JbnRlcmZhY2VzPC9BPi5DLmNoYXInU2l6ZTsKKyAgIDxGT05UIENPTE9SPXJlZD48QSBOQU1FPSJyZWZfMTkyN180Ij5DdXJzZXNfQm9vbF9GYWxzZTwvQT48L0ZPTlQ+IDogPGI+Y29uc3RhbnQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzE5MjZfOSI+Q3Vyc2VzX0Jvb2w8L0E+IDo9IDA7CisKKzxiPmVuZDwvYj4gPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+LjxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZS1jdXJzZXNfX2Fkcy5odG0jcmVmXzQ5XzI4Ij5DdXJzZXM8L0E+OworPC9QUkU+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2FkYS90ZXJtaW5hbF9pbnRlcmZhY2VfX2Fkcy5odG0gYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2NkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hZGEvdGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+PEhFQUQ+PFRJVExFPnRlcm1pbmFsX2ludGVyZmFjZS5hZHM8L1RJVExFPjwvSEVBRD4KKzxCT0RZPgorPEhSPjxESVYgQUxJR049ImNlbnRlciI+PEgxPiBGaWxlIDogdGVybWluYWxfaW50ZXJmYWNlLmFkcyA8L0gxPjwvRElWPjxIUj4KKzxQUkU+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3LmduYXQuY29tIj5HTkFUPC9BPiBuY3Vyc2VzIEJpbmRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmFsX0ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTY8L0VNPjwvRk9OVD4KKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLSAgVmVyc2lvbiBDb250cm9sOjwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBAUmV2aXNpb246IDEuMTQgQDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBARGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiBAPC9FTT48L0ZPTlQ+Cis8Rk9OVCBDT0xPUj1ncmVlbj48RU0+LS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMDwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvRU0+PC9GT05UPgorPGI+cGFja2FnZTwvYj4gPEZPTlQgQ09MT1I9cmVkPjxBIE5BTUU9InJlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+PC9GT05UPiA8Yj5pczwvYj4KKyAgIDxiPnByYWdtYTwvYj4gUHVyZSAoPEEgSFJFRj0idGVybWluYWxfaW50ZXJmYWNlX19hZHMuaHRtI3JlZl80Ml85Ij5UZXJtaW5hbF9JbnRlcmZhY2U8L0E+KTsKKzxGT05UIENPTE9SPWdyZWVuPjxFTT4tLTwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tICBFdmVyeXRoaW5nIGlzIGluIHRoZSBjaGlsZCB1bml0czwvRU0+PC9GT05UPgorPEZPTlQgQ09MT1I9Z3JlZW4+PEVNPi0tPC9FTT48L0ZPTlQ+Cis8Yj5lbmQ8L2I+IDxBIEhSRUY9InRlcm1pbmFsX2ludGVyZmFjZV9fYWRzLmh0bSNyZWZfNDJfOSI+VGVybWluYWxfSW50ZXJmYWNlPC9BPjsKKzwvUFJFPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9hbm5vdW5jZS5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYW5ub3VuY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzRjNzAzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvYW5ub3VuY2UuaHRtbApAQCAtMCwwICsxLDU4OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAzLjAvL0VOIj4KKzwhLS0KKyAgJElkOiBhbm5vdW5jZS5odG1sLHYgMS41MiAyMDA4LzExLzAyIDAxOjA1OjA4IHRvbSBFeHAgJAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPkFubm91bmNpbmcgbmN1cnNlcyA1Ljc8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKworPEgxPkFubm91bmNpbmcgbmN1cnNlcyA1Ljc8L0gxPgorCitUaGUgbmN1cnNlcyAobmV3IGN1cnNlcykgbGlicmFyeSBpcyBhIGZyZWUgc29mdHdhcmUgZW11bGF0aW9uIG9mCitjdXJzZXMgaW4gU3lzdGVtIFYgUmVsZWFzZSA0LjAsIGFuZCBtb3JlLiAgSXQgdXNlcyB0ZXJtaW5mbyBmb3JtYXQsCitzdXBwb3J0cyBwYWRzIGFuZCBjb2xvcgorYW5kIG11bHRpcGxlIGhpZ2hsaWdodHMgYW5kIGZvcm1zIGNoYXJhY3RlcnMgYW5kIGZ1bmN0aW9uLWtleSBtYXBwaW5nLAorYW5kIGhhcyBhbGwgdGhlIG90aGVyIFNZU1YtY3Vyc2VzIGVuaGFuY2VtZW50cyBvdmVyIEJTRCBjdXJzZXMuPFA+CisKK0luIG1pZC1KdW5lIDE5OTUsIHRoZSBtYWludGFpbmVyIG9mIDQuNEJTRCBjdXJzZXMgZGVjbGFyZWQgdGhhdCBoZQorY29uc2lkZXJlZCA0LjRCU0QgY3Vyc2VzIG9ic29sZXRlLCBhbmQgZW5jb3VyYWdlZCB0aGUga2VlcGVycyBvZgorVW5peCByZWxlYXNlcyBzdWNoIGFzIEJTRC9PUywgRnJlZUJTRCBhbmQgTmV0QlNEIHRvIHN3aXRjaCBvdmVyIHRvCituY3Vyc2VzLjxQPgorCitUaGUgbmN1cnNlcyBjb2RlIHdhcyBkZXZlbG9wZWQgdW5kZXIgR05VL0xpbnV4LgorSXQgaGFzIGJlZW4gaW4gdXNlIGZvciBzb21lIHRpbWUgd2l0aCBPcGVuQlNEIGFzIHRoZSBzeXN0ZW0gY3Vyc2VzIGxpYnJhcnksCithbmQgb24gRnJlZUJTRCBhbmQgTmV0QlNEIGFzIGFuIGV4dGVybmFsIHBhY2thZ2UuCitJdCBzaG91bGQgcG9ydCBlYXNpbHkgdG8gYW55IEFOU0kvUE9TSVgtY29uZm9ybWluZyBVTklYLgorSXQgaGFzIGV2ZW4gYmVlbiBwb3J0ZWQgdG8gT1MvMiBXYXJwITxQPgorCitUaGUgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIHRoZSBsaWJyYXJ5IGFuZCBzdXBwb3J0IHV0aWxpdGllcywgaW5jbHVkaW5nIGEKK3Rlcm1pbmZvIGNvbXBpbGVyIHRpYygxKSwgYSBkZWNvbXBpbGVyIGluZm9jbXAoMSksIGNsZWFyKDEpLCB0cHV0KDEpLCB0c2V0KDEpLAorYW5kIGEgdGVybWNhcCBjb252ZXJzaW9uIHRvb2wgY2FwdG9pbmZvKDEpLiAgRnVsbCBtYW51YWwgcGFnZXMgYXJlIHByb3ZpZGVkIGZvcgordGhlIGxpYnJhcnkgYW5kIHRvb2xzLjxQPgorCitUaGUgbmN1cnNlcyBkaXN0cmlidXRpb24gaXMgYXZhaWxhYmxlIHZpYSBhbm9ueW1vdXMgRlRQIGF0Cit0aGUgR05VIGRpc3RyaWJ1dGlvbiBzaXRlCis8QSBIUkVGPSJmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbmN1cnNlcy8iPmZ0cDovL2Z0cC5nbnUub3JnL2dudS9uY3Vyc2VzLzwvQT4mbmJzcDsuCis8YnI+SXQgaXMgYWxzbyBhdmFpbGFibGUgYXQKKzxBIEhSRUY9ImZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvIj5mdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLzwvQT4mbmJzcDsuCisKKzxIMT5SZWxlYXNlIE5vdGVzPC9IMT4KKworVGhpcyByZWxlYXNlIGlzIGRlc2lnbmVkIHRvIGJlIHVwd2FyZCBjb21wYXRpYmxlIGZyb20gbmN1cnNlcyA1LjAgdGhyb3VnaCA1LjY7Cit2ZXJ5IGZldyBhcHBsaWNhdGlvbnMgd2lsbCByZXF1aXJlIHJlY29tcGlsYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCitUaGVzZSBhcmUgdGhlIGhpZ2hsaWdodHMgZnJvbSB0aGUgY2hhbmdlLWxvZyBzaW5jZSBuY3Vyc2VzIDUuNiByZWxlYXNlLgorPHA+CitJbnRlcmZhY2UgY2hhbmdlczoKKzx1bD4KKwk8bGk+Z2VuZXJhdGUgbGlua2FibGUgc3R1YnMgZm9yIHNvbWUgbWFjcm9zOgorCTxicj4KKwkgIGdldGF0dHJzCisKKzwvdWw+CitOZXcgZmVhdHVyZXMgYW5kIGltcHJvdmVtZW50czoKKzx1bD4KKyAgICAgICAgPGxpPmxpYnJhcnkKKwk8dWw+CisJCTxsaT5uZXcgZmxhdm9yIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkgcHJvdmlkZXMgcnVkaW1lbnRhcnkKKwkJICAgIHN1cHBvcnQgZm9yIFBPU0lYIHRocmVhZHMuICBTZXZlcmFsIGZ1bmN0aW9ucyBhcmUKKwkJICAgIHJlZW50cmFudCwgYnV0IG1vc3QgcmVxdWlyZSBlaXRoZXIgYSB3aW5kb3ctbGV2ZWwgb3IKKwkJICAgIHNjcmVlbi1sZXZlbCBtdXRleC48YnI+CisJCSAgICAoVGhpcyBpcyA8ZW0+QVBJPC9lbT4tY29tcGF0aWJsZSwKKwkJICAgICBidXQgbm90IDxlbT5BQkk8L2VtPi1jb21wYXRpYmxlIHdpdGggdGhlIG5vcm1hbCBsaWJyYXJ5KS4KKworCQk8bGk+YWRkIDxjb2RlPk5DVVJTRVNfT1BBUVVFPC9jb2RlPiBzeW1ib2wgdG8gY3Vyc2VzLmgsIHdpbGwKKwkJICAgIHVzZSB0byBtYWtlIHN0cnVjdHMgb3BhcXVlIGluIHNlbGVjdGVkIGNvbmZpZ3VyYXRpb25zLgorCisJCTxsaT5hZGQgPGNvZGU+TkNVUlNFU19FWFRfRlVOQ1M8L2NvZGU+IGFuZAorCQkgICAgPGNvZGU+TkNVUlNFU19FWFRfQ09MT1JTPC9jb2RlPiBzeW1ib2xzIHRvIGN1cnNlcy5oIHRvIG1ha2UKKwkJICAgIGl0IHNpbXBsZXIgdG8gdGVsbCBpZiB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25zIGFuZC9vciBjb2xvcnMKKwkJICAgIGFyZSBkZWNsYXJlZC4KKworCQk8bGk+YWRkIHdyZXNpemUoKSB0byBDKysgYmluZGluZyAKKworCQk8bGk+ZWxpbWluYXRlIGZpeGVkLWJ1ZmZlciB2c3ByaW50ZigpIGNhbGxzIGluIEMrKyBiaW5kaW5nLgorCisJCTxsaT5hZGQgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gQysrIGJpbmRpbmcgd2hpY2ggd3JhcCBDIGZ1bmN0aW9ucworCQkgICAgdGhhdCBwYXNzIGEgV0lORE9XKiBwYXJhbWV0ZXIuCisKKwkJPGxpPmFkYXB0IG1vdXNlLWhhbmRsaW5nIGNvZGUgZnJvbSBtZW51IGxpYnJhcnkgaW4gZm9ybS1saWJyYXJ5CisKKwkJPGxpPmltcHJvdmUgdHJhY2luZyBmb3IgZm9ybSBsaWJyYXJ5LCBzaG93aW5nIGNyZWF0ZWQgZm9ybXMsCisJCSAgICBmaWVsZHMsIGV0Yy4KKworCQk8bGk+bWFrZSAkTkNVUlNFU19OT19QQURESU5HIGZlYXR1cmUgd29yayBmb3IgdGVybWNhcCBpbnRlcmZhY2UgLgorCisJCTxsaT5hZGQgY2hlY2sgdG8gdHJhY2UtZmlsZSBvcGVuLCBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyBhCisJCSAgICBkaXJlY3RvcnksIGFkZCAiLmxvZyIgdG8gdGhlIG5hbWUgYW5kIHRyeSBhZ2Fpbi4KKworCQk8bGk+c2V2ZXJhbCBuZXcgbWFucGFnZXM6ICBjdXJzX2xlZ2FjeS4zeCwgY3Vyc19tZW1sZWFrcy4zeCwKKwkJICAgIGN1cnNfb3BhcXVlLjN4IGFuZCBjdXJzX3RocmVhZHMuM3gKKwk8L3VsPgorCisgICAgICAgIDxsaT5wcm9ncmFtczoKKwk8dWw+CisJCTxsaT5tb2RpZmllZCB0aHJlZSB0ZXN0LXByb2dyYW1zIHRvIGRlbW9uc3RyYXRlIHRoZSB0aHJlYWRpbmcKKwkJICAgIHN1cHBvcnQgaW4gdGhpcyB2ZXJzaW9uOiBkaXR0bywgcmFpbiwgd29ybS4KKworCQk8bGk+c2V2ZXJhbCBuZXcgdGVzdC1wcm9ncmFtczogZGVtb19wYW5lbHMsIGRvdHNfbXZjdXIsCisJCSAgICBpbmNoX3dpZGUsIGluY2hzLCBrZXlfbmFtZSwga2V5X25hbWVzLCBzYXZlc2NyZWVuLAorCQkgICAgc2F2ZXNjcmVlbi5zaCB0ZXN0X2FycmF5cywgdGVzdF9nZXRfd3N0ciwgdGVzdF9nZXRzdHIsCisJCSAgICB0ZXN0X2luc3RyLCB0ZXN0X2lud3N0ciBhbmQgdGVzdF9vcGFxdWUuCisKKwkJPGxpPmFkZCA8Y29kZT5hZGFjdXJzZXMtY29uZmlnPC9jb2RlPiB0byB0aGUgQWRhOTUgaW5zdGFsbC4KKworCQk8bGk+bW9kaWZ5IHRpYyA8Y29kZT4tZjwvY29kZT4gb3B0aW9uIHRvIGZvcm1hdCBzcGFjZXMgYXMKKwkJICAgIDxjb2RlPlxzPC9jb2RlPiB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBsb3N0IHdoZW4gdGhhdAorCQkgICAgaXMgcmVhZCBiYWNrIGluIHVuZm9ybWF0dGVkIHN0cmluZ3MuCisKKwkJPGxpPlRoZSA8Y29kZT50YWNrPC9jb2RlPiBwcm9ncmFtIGlzIG5vdyBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5CisJCSAgICBmcm9tIG5jdXJzZXMuCisJPC91bD4KKworCTxsaT50ZXJtaW5hbCBkYXRhYmFzZQorCTx1bD4KKwkgICAgPGxpPmFkZGVkIGVudHJpZXM6CisJCTx1bD4KKwkJPGxpPjxjb2RlPkV0ZXJtLTI1NmNvbG9yPC9jb2RlPiwKKwkJICAgIDxjb2RlPkV0ZXJtLTg4Y29sb3I8L2NvZGU+IGFuZAorCQkgICAgPGNvZGU+cnh2dC04OGNvbG9yPC9jb2RlPgorCQk8bGk+PGNvZGU+YXRlcm08L2NvZGU+CisJCTxsaT48Y29kZT5rb25zb2xlLTI1NmNvbG9yPC9jb2RlPgorCQk8bGk+PGNvZGU+bXJ4dnQ8L2NvZGU+CisJCTxsaT48Y29kZT5zY3JlZW4ubWx0ZXJtPC9jb2RlPgorCQk8bGk+PGNvZGU+c2NyZWVuLnJ4dnQ8L2NvZGU+CisJCTxsaT48Y29kZT50ZXJhdGVybTQuNTk8L2NvZGU+IGlzIG5vdyB0aGUgcHJpbWFyeSBwcmltYXJ5CisJCSAgICB0ZXJhdGVybSBlbnRyeSwgcmVuYW1lZCBvcmlnaW5hbCB0bworCQkgICAgPGNvZGU+dGVyYXRlcm0yLjM8L2NvZGU+CisJCTxsaT48Y29kZT45dGVybTwvY29kZT4gdGVybWluYWwKKwkJPGxpPk5ld2J1cnkgRGF0YSBlbnRyaWVzCisJCTwvdWw+CisJICAgIDxsaT51cGRhdGVkL2ltcHJvdmVkIGVudHJpZXM6CisJCTx1bD4KKwkgICAgICAgIDxsaT48Y29kZT5nbm9tZTwvY29kZT4gdG8gdmVyc2lvbiAyLjIyLjMKKwkJPGxpPjxjb2RlPmgxOTwvY29kZT4sIDxjb2RlPnoxMDA8L2NvZGU+CisJCTxsaT48Y29kZT5rb25zb2xlPC9jb2RlPiB0byB2ZXJzaW9uIDEuNi42CisJCTxsaT48Y29kZT5tbHRlcm08L2NvZGU+LCA8Y29kZT5tbHRlcm0rcGNma2V5czwvY29kZT4KKwkJPGxpPjxjb2RlPnh0ZXJtPC9jb2RlPiwgYW5kIGJ1aWxkaW5nLWJsb2NrcyBmb3IgZnVuY3Rpb24ta2V5cworCQkgICAgdG8gPGEgaHJlZj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3h0ZXJtL3h0ZXJtLmxvZy5odG1sI3h0ZXJtXzIzMCI+eHRlcm0gcGF0Y2ggIzIzMDwvYT4uCisJCTwvdWw+CisJPC91bD4KKzwvdWw+CitNYWpvciBidWcgZml4ZXM6Cis8dWw+CisJPGxpPmFkZCBsb2dpYyB0byB0aWMgZm9yIGNhbmNlbGxpbmcgc3RyaW5ncyBpbiB1c2VyLWRlZmluZWQKKwkgICAgY2FwYWJpbGl0aWVzCisJICAgICh0aGlzIGlzIDxlbT5uZWVkZWQ8L2VtPiBmb3IKKwkgICAgIGN1cnJlbnQgPGNvZGU+a29uc29sZTwvY29kZT4gdGVybWluZm8gZW50cnkpLgorCisJPGxpPm1vZGlmeSA8Y29kZT5tay0xc3QuYXdrPC9jb2RlPiBzbyB0aGUgZ2VuZXJhdGVkIG1ha2VmaWxlIHJ1bGVzIGZvcgorCSAgICBsaW5raW5nIG9yIGluc3RhbGxpbmcgc2hhcmVkIGxpYnJhcmllcyBkbyBub3QgZmlyc3QgcmVtb3ZlIHRoZQorCSAgICBsaWJyYXJ5LCBpbiBjYXNlIGl0IGlzIGluIHVzZSwgZS5nLiwgPGNvZGU+bGlibmN1cnNlcy5zbzwvY29kZT4gYnkKKwkgICAgPGNvZGU+L2Jpbi9zaDwvY29kZT4uCisKKwk8bGk+Y29ycmVjdCBjaGVjayBmb3Igbm90aW1lb3V0KCkgaW4gd2dldGNoKCkuCisKKwk8bGk+Zml4IGEgc2lnbi1leHRlbnNpb24gYnVnIGluIGluZm9jbXAncyByZXBhaXJfYWNzYygpIGZ1bmN0aW9uLgorCisJPGxpPmNoYW5nZSB3aW5uc3RyKCkgdG8gc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCisJPGxpPm1ha2UgQWRhOTUgZGVtb19wYW5lbHMoKSBleGFtcGxlIHdvcmsuCisKKwk8bGk+Zml4IGZvciBhZGRpbmcgYSBub24tc3BhY2luZyBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisKKwk8bGk+ZmlsbCBpbiBleHRlbmRlZC1jb2xvciBwYWlyIHRvIG1ha2UgY29sb3JzIHdvcmsKKwkgICAgZm9yIHdpZGUtY2hhcmFjdGVycyB1c2luZyBleHRlbmRlZC1jb2xvcnMuCisKKwk8bGk+aW1wcm92ZSByZWZyZXNoIG9mIHdpbmRvdyBvbiB0b3Agb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMsCisJICAgIHRha2luZyBpbnRvIGFjY291bnQgc3BsaXQgY2hhcmFjdGVycyBvbiBsZWZ0L3JpZ2h0IHdpbmRvdworCSAgICBib3VuZGFyaWVzLgorCisJPGxpPm1vZGlmeSA8Y29kZT53aW5fd2NobnN0cigpPC9jb2RlPiB0byBlbnN1cmUgdGhhdCBvbmx5IGEgYmFzZSBjZWxsCisJICAgIGlzIHJldHVybmVkIGZvciBlYWNoIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXIuCisKKwk8bGk+aW1wcm92ZSA8Y29kZT53YWRkY2goKTwvY29kZT4gYW5kIDxjb2RlPndpbnNjaCgpPC9jb2RlPiBoYW5kbGluZyBvZgorCSAgICBFSUxTRVEgZnJvbSA8Y29kZT5tYnJ0b3djKCk8L2NvZGU+IGJ5IHVzaW5nIDxjb2RlPnVuY3RybCgpPC9jb2RlPgorCSAgICB0byBkaXNwbGF5IGlsbGVnYWwgYnl0ZXMgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGFwcGVuZCBmdXJ0aGVyIGJ5dGVzCisJICAgIHRvIG1ha2UgdXAgYSB2YWxpZCBzZXF1ZW5jZS4KKworCTxsaT5yZXN0b3JlIDxjb2RlPmN1cnNfc2V0KCk8L2NvZGU+IHN0YXRlIGFmdGVyCisJICAgIDxjb2RlPmVuZHdpbigpPC9jb2RlPi88Y29kZT5yZWZyZXNoKCk8L2NvZGU+CisKKwk8bGk+bW9kaWZ5IDxjb2RlPmtleW5hbWUoKTwvY29kZT4gdG8gdXNlICJeWCIgZm9ybSBvbmx5IGlmCisJICAgIDxjb2RlPm1ldGEoKTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkLCBvciBpZiA8Y29kZT5rZXluYW1lKCk8L2NvZGU+CisJICAgIGlzIGNhbGxlZCB3aXRob3V0IGluaXRpYWxpemluZyBjdXJzZXMsIGUuZy4sIHZpYQorCSAgICA8Y29kZT5pbml0c2NyKCk8L2NvZGU+IG9yIDxjb2RlPm5ld3Rlcm0oKTwvY29kZT4uCisKKwk8bGk+bW9kaWZ5IDxjb2RlPnVuY3RybCgpPC9jb2RlPiB0byBjaGVjayBjb2RlcyBpbiAxMjgtMjU1IHJhbmdlIHZlcnN1cworCSAgICA8Y29kZT5pc3ByaW50KCk8L2NvZGU+LgorCSAgICBJZiB0aGV5IGFyZSBub3QgcHJpbnRhYmxlLCBhbmQgbG9jYWxlIHdhcyBzZXQsIHVzZSBhICJNLSIgb3IgIn4iCisJICAgIHNlcXVlbmNlLgorCisJPGxpPmltcHJvdmUgPGNvZGU+cmVzaXpldGVybSgpPC9jb2RlPiBieSBtb3ZpbmcgcmlwcGVkLW9mZiBsaW5lcywgYW5kCisJICAgIHJlcGFpbnRpbmcgdGhlIHNvZnQta2V5cy4KKworCTxsaT5tb2RpZnkgZm9ybSBsaWJyYXJ5IHRvIGFjY2VwdCBjb250cm9sIGNoYXJhY3RlcnMgc3VjaCBhcyBuZXdsaW5lCisJICAgIGluIHNldF9maWVsZF9idWZmZXIoKSwgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMuCisKKwk8bGk+dXNlIDxjb2RlPk5DVVJTRVNfTU9VU0VfTUFTSygpPC9jb2RlPiBpbiBkZWZpbml0aW9uIG9mCisJICAgIDxjb2RlPkJVVFRPTl9SRUxFQVNFKCk8L2NvZGU+LCBldGMuLCB0byBtYWtlIHRob3NlIHdvcmsgcHJvcGVybHkKKwkgICAgd2l0aCB0aGUgPGNvZGU+LS1lbmFibGUtZXh0LW1vdXNlPC9jb2RlPiBjb25maWd1cmF0aW9uCisKKwk8bGk+Y29ycmVjdCBzb21lIGZ1bmN0aW9ucyBpbiBBZGE5NSBiaW5kaW5nIHdoaWNoIHdlcmUgdXNpbmcgcmV0dXJuCisJICAgIHZhbHVlIGZyb20gQyB3aGVyZSBub25lIHdhcyByZXR1cm5lZC4KKworCTxsaT5yZXZpZXdlZC9maXhlZCBpc3N1ZXMgcmVwb3J0ZWQgYnkgQ292ZXJpdHkgYW5kIEtsb2N3b3JrIHRvb2xzLgorPC91bD4KKworUG9ydGFiaWxpdHk6Cis8dWw+CisgICAgICAgIDxsaT5jb25maWd1cmUgc2NyaXB0OgorICAgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGk+bmV3IG9wdGlvbnM6CisgICAgICAgICAgICA8ZGw+CisKKwkgICAgPGR0Pi0tZGlzYWJsZS1iaWctc3RyaW5ncworCSAgICA8ZGQ+Y29udHJvbCB3aGV0aGVyIHN0YXRpYyBzdHJpbmcgdGFibGVzIGFyZSBnZW5lcmF0ZWQgYXMgc2luZ2xlCisJICAgICAgICBsYXJnZSBzdHJpbmdzICh0byBpbXByb3ZlIHN0YXJ0dXAgcGVyZm9ybWFuY2UpLCBvciBhcyBhcnJheQorCQlvZiBpbmRpdmlkdWFsIHN0cmluZ3MuCisKKwkgICAgPGR0Pi0tZGlzYWJsZS1yZWxpbmsKKwkgICAgPGRkPmNvbnRyb2wgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIGFyZSByZWxpbmtlZCAoZHVyaW5nIGluc3RhbGwpCisJCXdoZW4gcnBhdGggaXMgZW5hYmxlZC4KKworCSAgICA8ZHQ+LS1kaXNhYmxlLXRpYy1kZXBlbmRzCisJICAgIDxkZD5tYWtlIGV4cGxpY2l0IHdoZXRoZXIgdGljIGxpYnJhcnkgZGVwZW5kcyBvbiBuY3Vyc2VzL25jdXJzZXN3CisJICAgICAgICBsaWJyYXJ5LgorCisJICAgIDxkdD4tLWVuYWJsZS1taXhlZC1jYXNlCisJICAgIDxkZD5vdmVycmlkZSB0aGUgY29uZmlndXJlIHNjcmlwdCdzIGNoZWNrIGlmIHRoZSBmaWxlc3lzdGVtCisJCXN1cHBvcnRzIG1peGVkLWNhc2UgZmlsZW5hbWVzLgorCSAgICAgICAgVGhpcyBhbGxvd3Mgb25lIHRvIGNvbnRyb2wgaG93IHRoZSB0ZXJtaW5hbCBkYXRhYmFzZQorCQltYXBzIHRvIHRoZSBmaWxlc3lzdGVtLgorCQlGb3IgZmlsZXN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBtaXhlZC1jYXNlLCB0aGUgbGlicmFyeQorCQl1c2VzIGdlbmVyYXRlIDItY2hhcmFjdGVyIChoZXhhZGVjaW1hbCkgY29kZXMgZm9yIHRoZQorCQlsb3dlci1sZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSB0ZXJtaW5mbyBkYXRhYmFzZQorCisJICAgIDxkdD4tLWVuYWJsZS1yZWVudHJhbnQKKwkgICAgPGRkPmJ1aWxkcyBhIGRpZmZlcmVudCBmbGF2b3Igb2YgdGhlIG5jdXJzZXMgbGlicmFyeSAobmN1cnNlc3QpCisJICAgICAgICB3aGljaCBpbXByb3ZlcyByZWVudHJhbnQgdXNlIG9mIHRoZQorCQlsaWJyYXJ5IGJ5IHJlZHVjaW5nIGdsb2JhbCBhbmQgc3RhdGljIHZhcmlhYmxlcworCSAgICAgICAgKHNlZSB0aGUgIi0td2l0aC1wdGhyZWFkIiBvcHRpb24gZm9yIHRoZSB0aHJlYWRlZCBzdXBwb3J0KS4KKworCSAgICA8ZHQ+LS1lbmFibGUtd2Vhay1zeW1ib2xzCisJICAgIDxkZD51c2Ugd2Vhay1zeW1ib2xzIGZvciBsaW5raW5nIHRvIHRoZSBQT1NJWCB0aHJlYWQgbGlicmFyeSwKKwkgICAgICAgIGFuZCB1c2UgdGhlIHNhbWUgc29uYW1lIGZvciB0aGUgbmN1cnNlcyBzaGFyZWQgbGlicmFyeQorCQlhcyB0aGUgbm9ybWFsIGxpYnJhcnkgKGNhdmVhdDogdGhlIEFCSSBpcyBmb3IgdGhlIHRocmVhZGVkCisJCWxpYnJhcnksIHdoaWNoIG1ha2VzIGdsb2JhbCBkYXRhIGFjY2Vzc2VkIHZpYSBmdW5jdGlvbnMpLgorCisJICAgIDxkdD4tLXdpdGgtcHRocmVhZAorCSAgICA8ZGQ+YnVpbGQgd2l0aCB0aGUgUE9TSVggdGhyZWFkIGxpYnJhcnkgKHRlc3RlZCB3aXRoIEFJWCwKKwkgICAgICAgIExpbnV4LCBGcmVlQlNELCBPcGVuQlNELCBIUFVYLCBJUklYNjQsIFNvbGFyaXMsIFRydTY0KS4KKworCSAgICA8ZHQ+LS13aXRoLXRpY2xpYgorCSAgICA8ZGQ+YnVpbGQvaW5zdGFsbCB0aGUgdGljLXN1cHBvcnQgZnVuY3Rpb25zIGluIGEgc2VwYXJhdGUgbGlicmFyeQorCisgICAgICAgICAgICA8L2RsPgorCisJICA8bGk+aW1wcm92ZWQgb3B0aW9uczoKKwkgICAgPGRsPgorCisJICAgIDxkdD4tLWVuYWJsZS1leHQtY29sb3JzCisJICAgIDxkZD5yZXF1aXJlcyB0aGUgd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbi4KKworCSAgICA8ZHQ+LS13aXRoLWNodHlwZQorCSAgICA8ZGQ+aWdub3JlIG9wdGlvbiB2YWx1ZSAidW5zaWduZWQiIGlzIGFsd2F5cyBhZGRlZCB0bworCQl0aGUgdHlwZSBpbiBjdXJzZXMuaDsgZG8gdGhlIHNhbWUgZm9yIC0td2l0aC1tbWFzay10LgorCisJICAgIDxkdD4tLXdpdGgtZG1hbGxvYworCSAgICA8ZGQ+YnVpbGQtZml4IGZvciByZWRlZmluaXRpb24gb2YgPGNvZGU+c3RybmR1cDwvY29kZT4uCisKKwkgICAgPGR0Pi0td2l0aC1oYXNoZWQtZGIKKwkgICAgPGRkPmFjY2VwdHMgYSBwYXJhbWV0ZXIgd2hpY2ggaXMgdGhlIGluc3RhbGwtcHJlZml4IG9mIGEgZ2l2ZW4KKwkgICAgICAgIEJlcmtlbGV5IERhdGFiYXNlLgorCisJICAgIDxkdD4tLXdpdGgtaGFzaGVkLWRiCisJICAgIDxkZD50aGUgJExJQlMgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIHRoZSBzZWFyY2ggZm9yIHRoZSBkYgorCQlsaWJyYXJ5LgorCisJICAgIDxkdD4tLXdpdGhvdXQtaGFzaGVkLWRiCisJICAgIDxkZD5hc3N1bWVkIHdoZW4gIi0tZGlzYWJsZS1kYXRhYmFzZSIgaXMgdXNlZC4KKworCSAgICA8L2RsPgorCisJPC91bD4KKworCTxsaT5vdGhlciBjb25maWd1cmUvYnVpbGQgaXNzdWVzOgorCSAgPHVsPgorCSAgPGxpPmJ1aWxkLWZpeGVzIGZvciBMeW54T1MKKwkgIDxsaT5tb2RpZnkgc2hhcmVkLWxpYnJhcnkgcnVsZXMgdG8gYWxsb3cgRnJlZUJTRCAzLnggdG8gdXNlIHJwYXRoLgorCSAgPGxpPmJ1aWxkLWZpeCBmb3IgRnJlZUJTRCAiY29udGVtcG9yYXJ5IiBUVFkgaW50ZXJmYWNlLgorCSAgPGxpPmJ1aWxkLWZpeGVzIGZvciBBSVggd2l0aCBsaWJ0b29sLgorCSAgPGxpPmJ1aWxkLWZpeGVzIGZvciBEYXJ3aW4gYW5kIGxpYnRvb2wuCisJICA8bGk+bW9kaWZ5IEJlT1Mtc3BlY2lmaWMgaWZkZWYncyB0byBidWlsZCBvbiBIYWlrdS4KKwkgIDxsaT5jb3JyZWN0ZWQgZ2NjIG9wdGlvbnMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcworCSAgICAgIGFuZCBJUklYNjQuCisJICA8bGk+Y2hhbmdlIHNoYXJlZC1saWJyYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIE9wZW5CU0QsIG1ha2UgcnBhdGggd29yay4KKwkgIDxsaT5idWlsZC1maXhlcyBmb3IgdXNpbmcgbGlidXRmOCwgZS5nLiwgb24gT3BlbkJTRCAzLjcKKwkgIDxsaT5hZGQgIi1lIiBvcHRpb24gaW4gbmN1cnNlcy9NYWtlZmlsZS5pbiB3aGVuIGdlbmVyYXRpbmcgc291cmNlLWZpbGVzCisJICAgICAgdG8gZm9yY2UgZWFybGllciBleGl0IGlmIHRoZSBidWlsZCBlbnZpcm9ubWVudCBmYWlscyB1bmV4cGVjdGVkbHkuCisJICA8bGk+YWRkIHN1cHBvcnQgZm9yIHNoYXJlZCBsaWJyYXJpZXMgZm9yIFFOWC4KKwkgIDxsaT5jaGFuZ2UgZGVsaW1pdGVyIGluIDxjb2RlPk1LbGliX2dlbi5zaDwvY29kZT4gZnJvbSAnJScgdG8gJ0AnLCB0bworCSAgICAgIGF2b2lkIHN1YnN0aXR1dGlvbiBieSBJQk0geGxjIHRvICcjJyBhcyBwYXJ0IG9mIGl0cyBleHRlbnNpb25zIHRvCisJICAgICAgZGlncmFwaHMuCisJPC91bD4KKworCTxsaT5saWJyYXJ5OgorCTx1bD4KKwk8bGk+cmV3cml0ZSB3cmFwcGVyIGZvciA8Y29kZT53Y3J0b21iKCk8L2NvZGU+LCBtYWtpbmcgaXQgd29yayBvbgorCSAgICBTb2xhcmlzLiAgVGhpcyBpcyB1c2VkIGluIHRoZSBmb3JtIGxpYnJhcnkgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGgKKwkgICAgb2YgdGhlIGJ1ZmZlciBuZWVkZWQgYnkgPGNvZGU+ZmllbGRfYnVmZmVyPC9jb2RlPi4KKwk8bGk+YWRkL3VzZSBjb25maWd1cmUgc2NyaXB0IG1hY3JvIENGX1NJR19BVE9NSUNfVCwgdXNlIHRoZSBjb3JyZXNwb25kaW5nCisJICAgIHR5cGUgZm9yIGRhdGEgbWFuaXB1bGF0ZWQgYnkgc2lnbmFsIGhhbmRsZXJzLgorCTxsaT5zZXQgbG9jYWxlIGluIG1pc2MvbmN1cnNlcy1jb25maWcuaW4gc2luY2UgaXQgdXNlcyBhIHJhbmdlCisJPGxpPmRpc2FibGUgR1BNIG1vdXNlIHN1cHBvcnQgd2hlbiAkVEVSTSBkb2VzIG5vdCBoYXBwZW4gdG8gY29udGFpbgorCSAgICAibGludXgiLCBzaW5jZSBHcG1fT3BlbigpIG5vIGxvbmdlciBsaW1pdHMgaXRzIGFzc2VydGlvbiB0byB0ZXJtaW5hbHMKKwkgICAgdGhhdCBpdCBtaWdodCBoYW5kbGUsIGUuZy4sIHdpdGhpbiAic2NyZWVuIiBpbiB4dGVybS4KKwk8bGk+cmVzZXQgbW91c2UgZmlsZS1kZXNjcmlwdG9yIHdoZW4gdW5sb2FkaW5nIEdQTSBsaWJyYXJ5LgorCTwvdWw+CisKKwk8bGk+dGVzdCBwcm9ncmFtczoKKwk8dWw+CisJPGxpPnVwZGF0ZSB0ZXN0IHByb2dyYW1zIHRvIGJ1aWxkL3dvcmsgd2l0aCB2YXJpb3VzIFVOSVggY3Vyc2VzIGZvcgorCSAgICBjb21wYXJpc29ucy4KKwk8L3VsPgorPC91bD4KKworPEgxPkZlYXR1cmVzIG9mIE5jdXJzZXM8L0gxPgorCitUaGUgbmN1cnNlcyBwYWNrYWdlIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBTVnI0IChTeXN0ZW0gViBSZWxlYXNlIDQpIGN1cnNlczoKKworPFVMPgorPExJPkFsbCAyNTcgb2YgdGhlIFNWcjQgY2FsbHMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIChhbmQgYXJlIGRvY3VtZW50ZWQpLgorPExJPkZ1bGwgc3VwcG9ydCBmb3IgU1ZyNCBjdXJzZXMgZmVhdHVyZXMgaW5jbHVkaW5nIGtleWJvYXJkIG1hcHBpbmcsIGNvbG9yLAorZm9ybXMtZHJhd2luZyB3aXRoIEFDUyBjaGFyYWN0ZXJzLCBhbmQgYXV0b21hdGljIHJlY29nbml0aW9uIG9mIGtleXBhZAorYW5kIGZ1bmN0aW9uIGtleXMuCis8TEk+QW4gZW11bGF0aW9uIG9mIHRoZSBTVnI0IHBhbmVscyBsaWJyYXJ5LCBzdXBwb3J0aW5nCithIHN0YWNrIG9mIHdpbmRvd3Mgd2l0aCBiYWNraW5nIHN0b3JlLCBpcyBpbmNsdWRlZC4KKzxMST5BbiBlbXVsYXRpb24gb2YgdGhlIFNWcjQgbWVudXMgbGlicmFyeSwgc3VwcG9ydGluZworYSB1bmlmb3JtIGJ1dCBmbGV4aWJsZSBpbnRlcmZhY2UgZm9yIG1lbnUgcHJvZ3JhbW1pbmcsIGlzIGluY2x1ZGVkLgorPExJPkFuIGVtdWxhdGlvbiBvZiB0aGUgU1ZyNCBmb3JtIGxpYnJhcnksIHN1cHBvcnRpbmcKK2RhdGEgY29sbGVjdGlvbiB0aHJvdWdoIG9uLXNjcmVlbiBmb3JtcywgaXMgaW5jbHVkZWQuCis8TEk+QmluYXJ5IHRlcm1pbmZvIGVudHJpZXMgZ2VuZXJhdGVkIGJ5IHRoZSBuY3Vyc2VzIHRpYygxKSBpbXBsZW1lbnRhdGlvbgorYXJlIGJpdC1mb3ItYml0LWNvbXBhdGlibGUgd2l0aCB0aGUgZW50cnkgZm9ybWF0IFNWcjQgY3Vyc2VzIHVzZXMuCis8TEk+VGhlIHV0aWxpdGllcyBoYXZlIG9wdGlvbnMgdG8gYWxsb3cgeW91IHRvIGZpbHRlciB0ZXJtaW5mbworZW50cmllcyBmb3IgdXNlIHdpdGggbGVzcyBjYXBhYmxlIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+LzxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4KK3ZlcnNpb25zIHN1Y2ggYXMgdGhlIEhQL1VYIGFuZCBBSVggcG9ydHMuPC9VTD4KKworVGhlIG5jdXJzZXMgcGFja2FnZSBhbHNvIGhhcyBtYW55IHVzZWZ1bCBleHRlbnNpb25zIG92ZXIgU1ZyNDoKKworPFVMPgorPExJPlRoZSBBUEkgaXMgOC1iaXQgY2xlYW4gYW5kIGJhc2UtbGV2ZWwgY29uZm9ybWFudCB3aXRoIHRoZSBYL09QRU4gY3Vyc2VzCitzcGVjaWZpY2F0aW9uLCBYU0kgY3Vyc2VzICh0aGF0IGlzLCBpdCBpbXBsZW1lbnRzIGFsbCBCQVNFIGxldmVsIGZlYXR1cmVzLAorYW5kIG1vc3QgRVhURU5ERUQgZmVhdHVyZXMpLgorSXQgaW5jbHVkZXMgbWFueSBmdW5jdGlvbiBjYWxscyBub3Qgc3VwcG9ydGVkIHVuZGVyIFNWcjQgY3Vyc2VzCisoYnV0IHBvcnRhYmlsaXR5IG9mIGFsbAorY2FsbHMgaXMgZG9jdW1lbnRlZCBzbyB5b3UgY2FuIHVzZSB0aGUgU1ZyNCBzdWJzZXQgb25seSkuCis8TEk+VW5saWtlIFNWcjMgY3Vyc2VzLCBuY3Vyc2VzIGNhbiB3cml0ZSB0byB0aGUgcmlnaHRtb3N0LWJvdHRvbW1vc3QgY29ybmVyCitvZiB0aGUgc2NyZWVuIGlmIHlvdXIgdGVybWluYWwgaGFzIGFuIGluc2VydC1jaGFyYWN0ZXIgY2FwYWJpbGl0eS4KKzxMST5BZGE5NSBhbmQgQysrIGJpbmRpbmdzLgorPExJPlN1cHBvcnQgZm9yIG1vdXNlIGV2ZW50IHJlcG9ydGluZyB3aXRoIFggV2luZG93IHh0ZXJtCithbmQgRnJlZUJTRCBhbmQgT1MvMiBjb25zb2xlIHdpbmRvd3MuCis8TEk+RXh0ZW5kZWQgbW91c2Ugc3VwcG9ydCB2aWEgQWxlc3NhbmRybyBSdWJpbmkncyBncG0gcGFja2FnZS4KKzxMST5UaGUgZnVuY3Rpb24gPENPREU+d3Jlc2l6ZSgpPC9DT0RFPiBhbGxvd3MgeW91IHRvIHJlc2l6ZSB3aW5kb3dzLCBwcmVzZXJ2aW5nCit0aGVpciBkYXRhLgorPExJPlRoZSBmdW5jdGlvbiA8Q09ERT51c2VfZGVmYXVsdF9jb2xvcnMoKTwvQ09ERT4gYWxsb3dzIHlvdSB0bwordXNlIHRoZSB0ZXJtaW5hbCdzIGRlZmF1bHQgY29sb3JzIGZvciB0aGUgZGVmYXVsdCBjb2xvciBwYWlyLAorYWNoaWV2aW5nIHRoZSBlZmZlY3Qgb2YgdHJhbnNwYXJlbnQgY29sb3JzLgorPExJPlRoZSBmdW5jdGlvbnMgPENPREU+a2V5b2soKTwvQ09ERT4KK2FuZCA8Q09ERT5kZWZpbmVfa2V5KCk8L0NPREU+IGFsbG93Cit5b3UgdG8gYmV0dGVyIGNvbnRyb2wgdGhlIHVzZSBvZiBmdW5jdGlvbiBrZXlzLAorZS5nLiwgZGlzYWJsaW5nIHRoZSBuY3Vyc2VzIEtFWV9NT1VTRSwKK29yIGJ5IGRlZmluaW5nIG1vcmUgdGhhbiBvbmUgY29udHJvbCBzZXF1ZW5jZSB0byBtYXAgdG8gYSBnaXZlbiBrZXkgY29kZS4KKzxMST5TdXBwb3J0IGZvciAyNTYtY29sb3IgdGVybWluYWxzLCBzdWNoIGFzIG1vZGVybiB4dGVybSwgd2hlbiBjb25maWd1cmVkCit1c2luZyB0aGUgPGNvZGU+LS1lbmFibGUtZXh0LWNvbG9yczwvY29kZT4gb3B0aW9uLgorPExJPlN1cHBvcnQgZm9yIDE2LWNvbG9yIHRlcm1pbmFscywgc3VjaCBhcyBhaXh0ZXJtIGFuZCBtb2Rlcm4geHRlcm0uCis8TEk+QmV0dGVyIGN1cnNvci1tb3ZlbWVudCBvcHRpbWl6YXRpb24uICBUaGUgcGFja2FnZSBub3cgZmVhdHVyZXMgYQorY3Vyc29yLWxvY2FsLW1vdmVtZW50IGNvbXB1dGF0aW9uIG1vcmUgZWZmaWNpZW50IHRoYW4gZWl0aGVyIEJTRCdzCitvciBTeXN0ZW0gVidzLgorPExJPlN1cGVyIGhhcmR3YXJlIHNjcm9sbGluZyBzdXBwb3J0LiAgVGhlIHNjcmVlbi11cGRhdGUgY29kZSBpbmNvcnBvcmF0ZXMKK2Egbm92ZWwsIHNpbXBsZSwgYW5kIGNoZWFwIGFsZ29yaXRobSB0aGF0IGVuYWJsZXMgaXQgdG8gbWFrZSBvcHRpbWFsCit1c2Ugb2YgaGFyZHdhcmUgc2Nyb2xsaW5nLCBsaW5lLWluc2VydGlvbiwgYW5kIGxpbmUtZGVsZXRpb24KK2ZvciBzY3JlZW4tbGluZSBtb3ZlbWVudHMuICBUaGlzIGFsZ29yaXRobSBpcyBtb3JlIHBvd2VyZnVsIHRoYW4KK3RoZSA0LjRCU0QgY3Vyc2VzIHF1aWNrY2goKSByb3V0aW5lLgorPExJPlJlYWwgc3VwcG9ydCBmb3IgdGVybWluYWxzIHdpdGggdGhlIG1hZ2ljLWNvb2tpZSBnbGl0Y2guICBUaGUKK3NjcmVlbi11cGRhdGUgY29kZSB3aWxsIHJlZnJhaW4gZnJvbSBkcmF3aW5nIGEgaGlnaGxpZ2h0IGlmIHRoZSBtYWdpYy0KK2Nvb2tpZSB1bmF0dHJpYnV0ZWQgc3BhY2VzIHJlcXVpcmVkIGp1c3QgYmVmb3JlIHRoZSBiZWdpbm5pbmcgYW5kCithZnRlciB0aGUgZW5kIHdvdWxkIHN0ZXAgb24gYSBub24tc3BhY2UgY2hhcmFjdGVyLiAgSXQgd2lsbAorYXV0b21hdGljYWxseSBzaGlmdCBoaWdobGlnaHQgYm91bmRhcmllcyB3aGVuIGRvaW5nIHNvIHdvdWxkIG1ha2UgaXQKK3Bvc3NpYmxlIHRvIGRyYXcgdGhlIGhpZ2hsaWdodCB3aXRob3V0IGNoYW5naW5nIHRoZSB2aXN1YWwgYXBwZWFyYW5jZQorb2YgdGhlIHNjcmVlbi4KKzxMST5JdCBpcyBwb3NzaWJsZSB0byBnZW5lcmF0ZSB0aGUgbGlicmFyeSB3aXRoIGEgbGlzdCBvZiBwcmUtbG9hZGVkCitmYWxsYmFjayBlbnRyaWVzIGxpbmtlZCB0byBpdCBzbyB0aGF0IGl0IGNhbiBzZXJ2ZSB0aG9zZSB0ZXJtaW5hbCB0eXBlcyBldmVuCit3aGVuIG5vIHRlcm1pbmZvIHRyZWUgb3IgdGVybWNhcCBmaWxlIGlzIGFjY2Vzc2libGUgKHRoaXMgbWF5IGJlIHVzZWZ1bAorZm9yIHN1cHBvcnQgb2Ygc2NyZWVuLW9yaWVudGVkIHByb2dyYW1zIHRoYXQgbXVzdCBydW4gaW4gc2luZ2xlLXVzZXIgbW9kZSkuCis8TEk+VGhlIHRpYygxKS9jYXB0b2luZm8gdXRpbGl0eSBwcm92aWRlZCB3aXRoIG5jdXJzZXMgaGFzIHRoZQorYWJpbGl0eSB0byB0cmFuc2xhdGUgbWFueSB0ZXJtY2FwcyBmcm9tIHRoZSBYRU5JWCwgSUJNIGFuZAorQVQmYW1wO1QgZXh0ZW5zaW9uIHNldHMuCis8TEk+QSBCU0QtbGlrZSB0c2V0KDEpIHV0aWxpdHkgaXMgcHJvdmlkZWQuCis8TEk+VGhlIG5jdXJzZXMgbGlicmFyeSBhbmQgdXRpbGl0aWVzIHdpbGwgYXV0b21hdGljYWxseSByZWFkIHRlcm1pbmZvCitlbnRyaWVzIGZyb20gJEhPTUUvLnRlcm1pbmZvIGlmIGl0IGV4aXN0cywgYW5kIGNvbXBpbGUgdG8gdGhhdCBkaXJlY3RvcnkKK2lmIGl0IGV4aXN0cyBhbmQgdGhlIHVzZXIgaGFzIG5vIHdyaXRlIGFjY2VzcyB0byB0aGUgc3lzdGVtIGRpcmVjdG9yeS4KK1RoaXMgZmVhdHVyZSBtYWtlcyBpdCBlYXNpZXIgZm9yIHVzZXJzIHRvIGhhdmUgcGVyc29uYWwgdGVybWluZm8gZW50cmllcword2l0aG91dCBnaXZpbmcgdXAgYWNjZXNzIHRvIHRoZSBzeXN0ZW0gdGVybWluZm8gZGlyZWN0b3J5LgorPExJPllvdSBtYXkgc3BlY2lmeSBhIHBhdGggb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBjb21waWxlZAorZGVzY3JpcHRpb25zIHdpdGggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRFUk1JTkZPX0RJUlMgKHRoaXMKK2dlbmVyYWxpemVzIHRoZSBmZWF0dXJlIHByb3ZpZGVkIGJ5IFRFUk1JTkZPIHVuZGVyIHN0b2NrIFN5c3RlbSBWLikKKzxMST5JbiB0ZXJtaW5mbyBzb3VyY2UgZmlsZXMsIHVzZSBjYXBhYmlsaXRpZXMgbWF5IHJlZmVyIG5vdCBqdXN0IHRvCitvdGhlciBlbnRyaWVzIGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlIChhcyBpbiBTeXN0ZW0gVikgYnV0IGFsc28gdG8KK2NvbXBpbGVkIGVudHJpZXMgaW4gZWl0aGVyIHRoZSBzeXN0ZW0gdGVybWluZm8gZGlyZWN0b3J5IG9yIHRoZSB1c2VyJ3MKKyRIT01FLy50ZXJtaW5mbyBkaXJlY3RvcnkuCis8TEk+QSBzY3JpcHQgKDxTVFJPTkc+Y2FwY29udmVydDwvU1RST05HPikgaXMgcHJvdmlkZWQgdG8gaGVscCBCU0QgdXNlcnMKK3RyYW5zaXRpb24gZnJvbSB0ZXJtY2FwIHRvIHRlcm1pbmZvLiAgSXQgZ2F0aGVycyB0aGUgaW5mb3JtYXRpb24gaW4gYQorVEVSTUNBUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQvb3IgYSB+Ly50ZXJtY2FwIGxvY2FsIGVudHJpZXMgZmlsZQorYW5kIGNvbnZlcnRzIGl0IHRvIGFuIGVxdWl2YWxlbnQgbG9jYWwgdGVybWluZm8gdHJlZSB1bmRlciAkSE9NRS8udGVybWluZm8uCis8TEk+QXV0b21hdGljIGZhbGxiYWNrIHRvIHRoZSAvZXRjL3Rlcm1jYXAgZmlsZSBjYW4gYmUgY29tcGlsZWQgaW4KK3doZW4gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkIGEgdGVybWluZm8gdHJlZS4gIFRoaXMgZmVhdHVyZSBpcyBuZWl0aGVyCitmYXN0IG5vciBjaGVhcCwgeW91IGRvbid0IHdhbnQgdG8gdXNlIGl0IHVubGVzcyB5b3UgaGF2ZSB0bywKK2J1dCBpdCdzIHRoZXJlLgorPExJPlRoZSB0YWJsZS1vZi1lbnRyaWVzIHV0aWxpdHkgPFNUUk9ORz50b2U8L1NUUk9ORz4gbWFrZXMgaXQgZWFzeSBmb3IgdXNlcnMgdG8KK3NlZSBleGFjdGx5IHdoYXQgdGVybWluYWwgdHlwZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLgorPExJPlRoZSBsaWJyYXJ5IG1lZXRzIHRoZSBYU0kgcmVxdWlyZW1lbnQgdGhhdCBldmVyeSBtYWNybyBlbnRyeQorcG9pbnQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gd2hpY2ggbWF5IGJlIGxpbmtlZCAoYW5kIHdpbGwgYmUKK3Byb3RvdHlwZS1jaGVja2VkKSBpZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpcyBkaXNhYmxlZCB3aXRoCis8Q09ERT4jdW5kZWY8L0NPREU+LgorPExJPkFuIEhUTUwgIkludHJvZHVjdGlvbiB0byBQcm9ncmFtbWluZyB3aXRoIE5DVVJTRVMiIGRvY3VtZW50IHByb3ZpZGVzCithIG5hcnJhdGl2ZSBpbnRyb2R1Y3Rpb24gdG8gdGhlIGN1cnNlcyBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCis8L1VMPgorCis8SDE+U3RhdGUgb2YgdGhlIFBhY2thZ2U8L0gxPgorCitOdW1lcm91cyBidWdzIHByZXNlbnQgaW4gZWFybGllciB2ZXJzaW9ucyBoYXZlIGJlZW4gZml4ZWQ7IHRoZQorbGlicmFyeSBpcyBmYXIgbW9yZSByZWxpYWJsZSB0aGFuIGl0IHVzZWQgdG8gYmUuICBCb3VuZHMgY2hlY2tpbmcgaW4gbWFueQorYGRhbmdlcm91cycgZW50cnkgcG9pbnRzIGhhcyBiZWVuIGltcHJvdmVkLiAgVGhlIGNvZGUgaXMgbm93IHR5cGUtc2FmZQorYWNjb3JkaW5nIHRvIGdjYyAtV2FsbC4gIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGNoZWNrZWQgZm9yIG1hbGxvYyBsZWFrcyBhbmQKK2FyZW5hIGNvcnJ1cHRpb24gYnkgdGhlIFB1cmlmeSBtZW1vcnktYWxsb2NhdGlvbiB0ZXN0ZXIuPFA+CisKK1RoZSBuY3Vyc2VzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIHdpdGggYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zCitpbmNsdWRpbmcgKHZlcnNpb25zIHN0YXJ0aW5nIHdpdGggdGhvc2Ugbm90ZWQpOgorPERMPgorPERUPiBjZGsKKzxERD4gQ3Vyc2VzIERldmVsb3BtZW50IEtpdAorPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2Nkay8iPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9jZGsvPC9BPgorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy52ZXh1cy5jYS9wcm9kdWN0cy9DREsvIj5odHRwOi8vd3d3LnZleHVzLmNhL3Byb2R1Y3RzL0NESy88L2E+Cis8RFQ+IGRlZAorPEREPiBkaXJlY3RvcnktZWRpdG9yCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGVkLyI+aHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RlZC88L0E+Cis8RFQ+IGRpYWxvZworPEREPiB0aGUgdW5kZXJseWluZyBhcHBsaWNhdGlvbiB1c2VkIGluIFNsYWNrd2FyZSdzIHNldHVwLCBhbmQgdGhlIGJhc2lzCitmb3Igc2ltaWxhciBhcHBsaWNhdGlvbnMgb24gR05VL0xpbnV4LgorPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RpYWxvZy8iPmh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWFsb2cvPC9BPgorPERUPiBseW54Cis8REQ+IHRoZSBjaGFyYWN0ZXItc2NyZWVuIFdXVyBicm93c2VyCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vbHlueC5pc2Mub3JnL3JlbGVhc2UvIj5odHRwOi8vbHlueC5pc2Mub3JnL3JlbGVhc2UvPC9BPgorPERUPiBNaWRuaWdodCBDb21tYW5kZXIKKzxERD4gZmlsZSBtYW5hZ2VyCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vd3d3LmliaWJsaW8ub3JnL21jLyI+aHR0cDovL3d3dy5pYmlibGlvLm9yZy9tYy88L0E+Cis8RFQ+IG11dHQKKzxERD4gbWFpbCB1dGlsaXR5Cis8YnI+Cis8QSBIUkVGPSJodHRwOi8vd3d3Lm11dHQub3JnLyI+aHR0cDovL3d3dy5tdXR0Lm9yZy88L0E+Cis8RFQ+IG5jZnRwCis8REQ+IGZpbGUtdHJhbnNmZXIgdXRpbGl0eQorPGJyPgorPEEgSFJFRj0iaHR0cDovL3d3dy5uY2Z0cC5jb20vIj5odHRwOi8vd3d3Lm5jZnRwLmNvbS88L0E+Cis8RFQ+IG52aQorPEREPiBOZXcgdmkgdmVyc2lvbnMgMS41MCBhcmUgYWJsZSB0byB1c2UgbmN1cnNlcyB2ZXJzaW9ucyAxLjkuNyBhbmQgbGF0ZXIuCis8YnI+Cis8QSBIUkVGPSJodHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvIj5odHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvPC9BPgorPGJyPgorPERUPiBwaW5mbworPEREPiBMeW54LWxpa2UgaW5mbyBicm93c2VyLgorPEEgSFJFRj0iaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9waW5mby8iPmh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvcGluZm8vPC9BPgorPERUPiB0aW4KKzxERD4gbmV3c3JlYWRlciwgc3VwcG9ydGluZyBjb2xvciwgTUlNRQorPEEgSFJFRj0iaHR0cDovL3d3dy50aW4ub3JnLyI+aHR0cDovL3d3dy50aW4ub3JnLzwvQT4KKzwvREw+CithcyB3ZWxsIGFzIHNvbWUgdGhhdCB1c2UgbmN1cnNlcyBmb3IgdGhlIHRlcm1pbmZvIHN1cHBvcnQgYWxvbmU6Cis8REw+Cis8RFQ+IG1pbmljb20KKzxERD4gdGVybWluYWwgZW11bGF0b3IKKzxicj4KKzxBIEhSRUY9Imh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9taW5pY29tLyI+CitodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvbWluaWNvbS88L0E+Cis8RFQ+IHZpbGUKKzxERD4gdmktbGlrZS1lbWFjcworPGJyPgorPEEgSFJFRj0iaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3ZpbGUvIj5odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvdmlsZS88L0E+Cis8L0RMPgorPFA+CisKK1RoZSBuY3Vyc2VzIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIHNlbGVjdGlvbiBvZiB0ZXN0IHByb2dyYW1zIChpbmNsdWRpbmcKK2EgZmV3IGdhbWVzKS4KKworPEgyPldobydzIFdobyBhbmQgV2hhdCdzIFdoYXQ8L0gyPgorCitaZXlkIEJlbi1IYWxpbQorc3RhcnRlZCBpdCBmcm9tIGEgcHJldmlvdXMgcGFja2FnZSBwY3Vyc2VzLCB3cml0dGVuIGJ5IFBhdmVsIEN1cnRpcy4KK0VyaWMgUy4gUmF5bW9uZAorY29udGludWVkIGRldmVsb3BtZW50LgorSiZ1dW1sO3JnZW4gUGZlaWZlciB3cm90ZSBtb3N0IG9mIHRoZSBmb3JtIGFuZCBtZW51IGxpYnJhcmllcy4KK09uZ29pbmcgd29yayBpcyBiZWluZyBkb25lIGJ5Cis8QSBIUkVGPSJtYWlsdG86ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0Ij5UaG9tYXMgRGlja2V5PC9BPi4KK1Rob21hcyBEaWNrZXkKK2FjdHMgYXMgdGhlIG1haW50YWluZXIgZm9yIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCit3aGljaCBob2xkcyB0aGUgY29weXJpZ2h0IG9uIG5jdXJzZXMuCitDb250YWN0IHRoZSBjdXJyZW50IG1haW50YWluZXJzIGF0Cis8QSBIUkVGPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+YnVnLW5jdXJzZXNAZ251Lm9yZzwvQT4uCis8UD4KKworVG8gam9pbiB0aGUgbmN1cnNlcyBtYWlsaW5nIGxpc3QsIHBsZWFzZSB3cml0ZSBlbWFpbCB0bworPENPREU+YnVnLW5jdXJzZXMtcmVxdWVzdEBnbnUub3JnPC9DT0RFPiBjb250YWluaW5nIHRoZSBsaW5lOgorPFBSRT4KKyAgICAgICAgICAgICBzdWJzY3JpYmUgJmx0O25hbWUmZ3Q7QCZsdDtob3N0LmRvbWFpbiZndDsKKzwvUFJFPgorCitUaGlzIGxpc3QgaXMgb3BlbiB0byBhbnlvbmUgaW50ZXJlc3RlZCBpbiBoZWxwaW5nIHdpdGggdGhlIGRldmVsb3BtZW50IGFuZAordGVzdGluZyBvZiB0aGlzIHBhY2thZ2UuPFA+CisKK0JldGEgdmVyc2lvbnMgb2YgbmN1cnNlcyBhbmQgcGF0Y2hlcyB0byB0aGUgY3VycmVudCByZWxlYXNlIGFyZSBtYWRlIGF2YWlsYWJsZSBhdAorPEEgSFJFRj0iZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy8iPmZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvPC9BPiZuYnNwOy4KKworPEgyPkZ1dHVyZSBQbGFuczwvSDI+Cis8VUw+Cis8TEk+RXh0ZW5kZWQtbGV2ZWwgWFBHNCBjb25mb3JtYW5jZSwgd2l0aCBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0LgorPExJPlBvcnRzIHRvIG1vcmUgc3lzdGVtcywgaW5jbHVkaW5nIERPUyBhbmQgV2luZG93cy4KKzwvVUw+CitXZSBuZWVkIHBlb3BsZSB0byBoZWxwIHdpdGggdGhlc2UgcHJvamVjdHMuICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gd29ya2luZworb24gdGhlbSwgcGxlYXNlIGpvaW4gdGhlIG5jdXJzZXMgbGlzdC4KKworPEgyPk90aGVyIFJlbGF0ZWQgUmVzb3VyY2VzPC9IMj4KKworVGhlIGRpc3RyaWJ1dGlvbiBwcm92aWRlcyBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIHRlcm1pbmZvLWZvcm1hdAordGVybWluYWwgZGVzY3JpcHRpb24gZmlsZSBvbmNlIG1haW50YWluZWQgYnkKKzxBIEhSRUY9Imh0dHA6Ly93d3cuY2F0Yi5vcmcvfmVzci90ZXJtaW5mby8iPkVyaWMgUmF5bW9uZDwvQT4mbmJzcDsuCitVbmxpa2UgdGhlIG9sZGVyIHZlcnNpb24sIHRoZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbyBkYXRhIGFyZSBwcm92aWRlZAoraW4gdGhlIHNhbWUgZmlsZSwgYW5kIHByb3ZpZGVzIHNldmVyYWwgdXNlci1kZWZpbmFibGUgZXh0ZW5zaW9ucworYmV5b25kIHRoZSBYL09wZW4gc3BlY2lmaWNhdGlvbi48UD4KKworWW91IGNhbiBmaW5kIGxvdHMgb2YgaW5mb3JtYXRpb24gb24gdGVybWluYWwtcmVsYXRlZCB0b3BpY3MKK25vdCBjb3ZlcmVkIGluIHRoZSB0ZXJtaW5mbyBmaWxlIGF0Cis8QSBIUkVGPSJodHRwOi8vd3d3LmNzLnV0ay5lZHUvfnNodWZvcmQvdGVybWluYWxfaW5kZXguaHRtbCI+UmljaGFyZCBTaHVmb3JkJ3MKK2FyY2hpdmU8L0E+Jm5ic3A7LgorPC9CT0RZPgorPC9IVE1MPgorPCEtLQorIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpodG1sCisjIGNhc2UtZm9sZC1zZWFyY2g6bmlsCisjIGZpbGwtY29sdW1uOjcwCisjIEVuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvaGFja2d1aWRlLmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9oYWNrZ3VpZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QxMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvaGFja2d1aWRlLmh0bWwKQEAgLTAsMCArMSw5MTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+Cis8IS0tCisgICRJZDogaGFja2d1aWRlLmh0bWwsdiAxLjI3IDIwMDUvMTIvMjQgMTU6Mzc6MTMgdG9tIEV4cCAkCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+QSBIYWNrZXIncyBHdWlkZSB0byBOY3Vyc2VzIEludGVybmFsczwvVElUTEU+Cis8bGluayByZXY9Im1hZGUiIGhyZWY9Im1haWx0bzpidWdzLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwhLS0KK1RoaXMgZG9jdW1lbnQgaXMgc2VsZi1jb250YWluZWQsICpleGNlcHQqIHRoYXQgdGhlcmUgaXMgb25lIHJlbGF0aXZlIGxpbmsgdG8KK3RoZSBuY3Vyc2VzLWludHJvLmh0bWwgZG9jdW1lbnQsIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3aXRoCit0aGlzIG9uZS4KKy0tPgorPC9IRUFEPgorPEJPRFk+CisKKzxIMT5BIEhhY2tlcidzIEd1aWRlIHRvIE5DVVJTRVM8L0gxPgorCis8SDE+Q29udGVudHM8L0gxPgorPFVMPgorPExJPjxBIEhSRUY9IiNhYnN0cmFjdCI+QWJzdHJhY3Q8L0E+Cis8TEk+PEEgSFJFRj0iI29iamVjdGl2ZSI+T2JqZWN0aXZlIG9mIHRoZSBQYWNrYWdlPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiN3aHlzdnI0Ij5XaHkgU3lzdGVtIFYgQ3Vyc2VzPzwvQT4KKzxMST48QSBIUkVGPSIjZXh0ZW5zaW9ucyI+SG93IHRvIERlc2lnbiBFeHRlbnNpb25zPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjcG9ydGFiaWxpdHkiPlBvcnRhYmlsaXR5IGFuZCBDb25maWd1cmF0aW9uPC9BPgorPExJPjxBIEhSRUY9IiNkb2N1bWVudGF0aW9uIj5Eb2N1bWVudGF0aW9uIENvbnZlbnRpb25zPC9BPgorPExJPjxBIEhSRUY9IiNidWd0cmFjayI+SG93IHRvIFJlcG9ydCBCdWdzPC9BPgorPExJPjxBIEhSRUY9IiNuY3Vyc2xpYiI+QSBUb3VyIG9mIHRoZSBOY3Vyc2VzIExpYnJhcnk8L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI2xvdmVydmlldyI+TGlicmFyeSBPdmVydmlldzwvQT4KKzxMST48QSBIUkVGPSIjZW5naW5lIj5UaGUgRW5naW5lIFJvb208L0E+Cis8TEk+PEEgSFJFRj0iI2lucHV0Ij5LZXlib2FyZCBJbnB1dDwvQT4KKzxMST48QSBIUkVGPSIjbW91c2UiPk1vdXNlIEV2ZW50czwvQT4KKzxMST48QSBIUkVGPSIjb3V0cHV0Ij5PdXRwdXQgYW5kIFNjcmVlbiBVcGRhdGluZzwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2Ztbm90ZSI+VGhlIEZvcm1zIGFuZCBNZW51IExpYnJhcmllczwvQT4KKzxMST48QSBIUkVGPSIjdGljIj5BIFRvdXIgb2YgdGhlIFRlcm1pbmZvIENvbXBpbGVyPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNub251c2UiPlRyYW5zbGF0aW9uIG9mIE5vbi08U1RST05HPnVzZTwvU1RST05HPiBDYXBhYmlsaXRpZXM8L0E+Cis8TEk+PEEgSFJFRj0iI3VzZXMiPlVzZSBDYXBhYmlsaXR5IFJlc29sdXRpb248L0E+Cis8TEk+PEEgSFJFRj0iI3RyYW5zbGF0aW9uIj5Tb3VyY2UtRm9ybSBUcmFuc2xhdGlvbjwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI3V0aWxzIj5PdGhlciBVdGlsaXRpZXM8L0E+Cis8TEk+PEEgSFJFRj0iI3N0eWxlIj5TdHlsZSBUaXBzIGZvciBEZXZlbG9wZXJzPC9BPgorPExJPjxBIEhSRUY9IiNwb3J0Ij5Qb3J0aW5nIEhpbnRzPC9BPgorPC9VTD4KKworPEgxPjxBIE5BTUU9ImFic3RyYWN0Ij5BYnN0cmFjdDwvQT48L0gxPgorCitUaGlzIGRvY3VtZW50IGlzIGEgaGFja2VyJ3MgdG91ciBvZiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgYW5kIHV0aWxpdGllcy4KK0l0IGRpc2N1c3NlcyBkZXNpZ24gcGhpbG9zb3BoeSwgaW1wbGVtZW50YXRpb24gbWV0aG9kcywgYW5kIHRoZQorY29udmVudGlvbnMgdXNlZCBmb3IgY29kaW5nIGFuZCBkb2N1bWVudGF0aW9uLiAgSXQgaXMgcmVjb21tZW5kZWQKK3JlYWRpbmcgZm9yIGFueW9uZSB3aG8gaXMgaW50ZXJlc3RlZCBpbiBwb3J0aW5nLCBleHRlbmRpbmcgb3IgaW1wcm92aW5nIHRoZQorcGFja2FnZS4KKworPEgxPjxBIE5BTUU9Im9iamVjdGl2ZSI+T2JqZWN0aXZlIG9mIHRoZSBQYWNrYWdlPC9BPjwvSDE+CisKK1RoZSBvYmplY3RpdmUgb2YgdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBwYWNrYWdlIGlzIHRvIHByb3ZpZGUgYSBmcmVlIHNvZnR3YXJlIEFQSSBmb3IKK2NoYXJhY3Rlci1jZWxsIHRlcm1pbmFscyBhbmQgdGVybWluYWwgZW11bGF0b3JzIHdpdGggdGhlIGZvbGxvd2luZworY2hhcmFjdGVyaXN0aWNzOgorCis8VUw+Cis8TEk+U291cmNlLWNvbXBhdGlibGUgd2l0aCBoaXN0b3JpY2FsIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgKGluY2x1ZGluZworICAgICB0aGUgb3JpZ2luYWwgQlNEIGN1cnNlcyBhbmQgU3lzdGVtIFYgY3Vyc2VzLgorPExJPkNvbmZvcm1hbnQgd2l0aCB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBpc3N1ZWQgYXMgcGFydCBvZiBYUEc0IGJ5CisgICAgIFgvT3Blbi4KKzxMST5IaWdoLXF1YWxpdHkgLS0gc3RhYmxlIGFuZCByZWxpYWJsZSBjb2RlLCB3aWRlIHBvcnRhYmlsaXR5LCBnb29kCisgICAgIHBhY2thZ2luZywgc3VwZXJpb3IgZG9jdW1lbnRhdGlvbi4KKzxMST5GZWF0dXJlZnVsIC0tIHNob3VsZCBlbGltaW5hdGUgYXMgbXVjaCBvZiB0aGUgZHJ1ZGdlcnkgb2YgQyBpbnRlcmZhY2UKKyAgICAgcHJvZ3JhbW1pbmcgYXMgcG9zc2libGUsIGZyZWVpbmcgcHJvZ3JhbW1lcnMgdG8gdGhpbmsgYXQgYSBoaWdoZXIKKyAgICAgbGV2ZWwgb2YgZGVzaWduLgorPC9VTD4KKworVGhlc2Ugb2JqZWN0aXZlcyBhcmUgaW4gcHJpb3JpdHkgb3JkZXIuICBTbywgZm9yIGV4YW1wbGUsIHNvdXJjZQorY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb24gbXVzdCB0cnVtcCBmZWF0dXJlZnVsbmVzcyAtLSB3ZSBjYW5ub3QKK2FkZCBmZWF0dXJlcyBpZiBpdCBtZWFucyBicmVha2luZyB0aGUgcG9ydGlvbiBvZiB0aGUgQVBJIGNvcnJlc3BvbmRpbmcKK3RvIGhpc3RvcmljYWwgY3Vyc2VzIHZlcnNpb25zLgorCis8SDI+PEEgTkFNRT0id2h5c3ZyNCI+V2h5IFN5c3RlbSBWIEN1cnNlcz88L0E+PC9IMj4KKworV2UgdXNlZCBTeXN0ZW0gViBjdXJzZXMgYXMgYSBtb2RlbCwgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGVpciBBUEksIGluCitvcmRlciB0byBmdWxmaWxsIHRoZSBmaXJzdCB0d28gb2JqZWN0aXZlcy4gPFA+CisKK1N5c3RlbSBWIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgY2FuIHN1cHBvcnQgQlNEIGN1cnNlcyBwcm9ncmFtcyB3aXRoCitqdXN0IGEgcmVjb21waWxhdGlvbiwgc28gYnkgY2FwdHVyaW5nIHRoZSBTeXN0ZW0gViBBUEkgd2UgYWxzbworY2FwdHVyZSBCU0Qncy4gPFA+CisKK01vcmUgaW1wb3J0YW50bHkgZm9yIHRoZSBmdXR1cmUsIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGlzc3VlZCBieSBYL09wZW4KK2lzIGV4cGxpY2l0bHkgYW5kIGNsb3NlbHkgbW9kZWxlZCBvbiBTeXN0ZW0gVi4gIFNvIGNvbmZvcm1hbmNlIHdpdGgKK1N5c3RlbSBWIHRvb2sgdXMgbW9zdCBvZiB0aGUgd2F5IHRvIGJhc2UtbGV2ZWwgWFNJIGNvbmZvcm1hbmNlLgorCis8SDI+PEEgTkFNRT0iZXh0ZW5zaW9ucyI+SG93IHRvIERlc2lnbiBFeHRlbnNpb25zPC9BPjwvSDI+CisKK1RoZSB0aGlyZCBvYmplY3RpdmUgKHN0YW5kYXJkcyBjb25mb3JtYW5jZSkgcmVxdWlyZXMgdGhhdCBpdCBiZSBlYXN5IHRvCitjb25kaXRpb24gc291cmNlIGNvZGUgdXNpbmcgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHNvIHRoYXQgdGhlIGFic2VuY2Ugb2Ygbm9uc3RhbmRhcmQKK2V4dGVuc2lvbnMgZG9lcyBub3QgYnJlYWsgdGhlIGNvZGUuIDxQPgorCitBY2NvcmRpbmdseSwgd2UgaGF2ZSBhIHBvbGljeSBvZiBhc3NvY2lhdGluZyB3aXRoIGVhY2ggbm9uc3RhbmRhcmQgZXh0ZW5zaW9uCithIGZlYXR1cmUgbWFjcm8sIHNvIHRoYXQgbmN1cnNlcyBjbGllbnQgY29kZSBjYW4gdXNlIHRoaXMgbWFjcm8gdG8gY29uZGl0aW9uCitpbiBvciBvdXQgdGhlIGNvZGUgdGhhdCByZXF1aXJlcyB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGV4dGVuc2lvbi4gPFA+CisKK0ZvciBleGFtcGxlLCB0aGVyZSBpcyBhIG1hY3JvIDxDT0RFPk5DVVJTRVNfTU9VU0VfVkVSU0lPTjwvQ09ERT4gd2hpY2ggWFNJIEN1cnNlcworZG9lcyBub3QgZGVmaW5lLCBidXQgd2hpY2ggaXMgZGVmaW5lZCBpbiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgaGVhZGVyLgorWW91IGNhbiB1c2UgdGhpcyB0byBjb25kaXRpb24gdGhlIGNhbGxzIHRvIHRoZSBtb3VzZSBBUEkgY2FsbHMuCisKKzxIMT48QSBOQU1FPSJwb3J0YWJpbGl0eSI+UG9ydGFiaWxpdHkgYW5kIENvbmZpZ3VyYXRpb248L0E+PC9IMT4KKworQ29kZSB3cml0dGVuIGZvciA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbWF5IGFzc3VtZSBhbiBBTlNJLXN0YW5kYXJkIEMgY29tcGlsZXIgYW5kCitQT1NJWC1jb21wYXRpYmxlIE9TIGludGVyZmFjZS4gIEl0IG1heSBhbHNvIGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgYQorU3lzdGVtLVYtY29tcGF0aWJsZSA8RU0+c2VsZWN0KDIpPC9FTT4gY2FsbC4gPFA+CisKK1dlIGVuY291cmFnZSAoYnV0IGRvIG5vdCByZXF1aXJlKSBkZXZlbG9wZXJzIHRvIG1ha2UgdGhlIGNvZGUgZnJpZW5kbHkKK3RvIGxlc3MtY2FwYWJsZSBVTklYIGVudmlyb25tZW50cyB3aGVyZXZlciBwb3NzaWJsZS4gPFA+CisKK1dlIGVuY291cmFnZSBkZXZlbG9wZXJzIHRvIHN1cHBvcnQgT1Mtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBhbmQgbWV0aG9kcworbm90IGF2YWlsYWJsZSB1bmRlciBQT1NJWC9BTlNJLCBwcm92aWRlZCBvbmx5IHRoYXQ6IAorCis8VUw+Cis8TEk+QWxsIHN1Y2ggY29kZSBpcyBwcm9wZXJseSBjb25kaXRpb25lZCBzbyB0aGUgYnVpbGQgcHJvY2VzcyBkb2VzIG5vdAorICAgICBhdHRlbXB0IHRvIGNvbXBpbGUgaXQgdW5kZXIgYSBwbGFpbiBBTlNJL1BPU0lYIGVudmlyb25tZW50LgorPExJPkFkZGluZyBzdWNoIGltcGxlbWVudGF0aW9uIG1ldGhvZHMgZG9lcyBub3QgaW50cm9kdWNlIGluY29tcGF0aWJpbGl0aWVzCisgICAgIGluIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gQVBJIGJldHdlZW4gcGxhdGZvcm1zLgorPC9VTD4KKworV2UgdXNlIEdOVSA8Q09ERT5hdXRvY29uZigxKTwvQ09ERT4gYXMgYSB0b29sIHRvIGRlYWwgd2l0aCBwb3J0YWJpbGl0eSBpc3N1ZXMuCitUaGUgcmlnaHQgd2F5IHRvIGxldmVyYWdlIGFuIE9TLXNwZWNpZmljIGZlYXR1cmUgaXMgdG8gbW9kaWZ5IHRoZSBhdXRvY29uZgorc3BlY2lmaWNhdGlvbiBmaWxlcyAoY29uZmlndXJlLmluIGFuZCBhY2xvY2FsLm00KSB0byBzZXQgdXAgYSBuZXcgZmVhdHVyZQorbWFjcm8sIHdoaWNoIHlvdSB0aGVuIHVzZSB0byBjb25kaXRpb24geW91ciBjb2RlLgorCis8SDE+PEEgTkFNRT0iZG9jdW1lbnRhdGlvbiI+RG9jdW1lbnRhdGlvbiBDb252ZW50aW9uczwvQT48L0gxPgorCitUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgRWFjaAoraGFzIGEgZGlmZmVyZW50IHByZWZlcnJlZCBmb3JtYXQ6CisKKzxVTD4KKzxMST5QYWNrYWdlLWludGVybmFsIGZpbGVzIChSRUFETUUsIElOU1RBTEwsIFRPLURPIGV0Yy4pCis8TEk+TWFudWFsIHBhZ2VzLgorPExJPkV2ZXJ5dGhpbmcgZWxzZSAoaS5lLiwgbmFycmF0aXZlIGRvY3VtZW50YXRpb24pLgorPC9VTD4KKworT3VyIGNvbnZlbnRpb25zIGFyZSBzaW1wbGU6Cis8T0w+Cis8TEk+PFNUUk9ORz5NYWludGFpbiBwYWNrYWdlLWludGVybmFsIGZpbGVzIGluIHBsYWluIHRleHQuPC9TVFJPTkc+CisgICAgIFRoZSBleHBlY3RlZCB2aWV3ZXIgZm9yIHRoZW0gPEVNPm1vcmUoMSk8L0VNPiBvciBhbiBlZGl0b3Igd2luZG93OyB0aGVyZSdzCisgICAgIG5vIHBvaW50IGluIGVsYWJvcmF0ZSBtYXJrLXVwLgorCis8TEk+PFNUUk9ORz5NYXJrIHVwIG1hbnVhbCBwYWdlcyBpbiB0aGUgbWFuIG1hY3Jvcy48L1NUUk9ORz4gIFRoZXNlIGhhdmUgdG8gYmUgdmlld2FibGUKKyAgICAgdGhyb3VnaCB0cmFkaXRpb25hbCA8RU0+bWFuKDEpPC9FTT4gcHJvZ3JhbXMuCisKKzxMST48U1RST05HPldyaXRlIGV2ZXJ5dGhpbmcgZWxzZSBpbiBIVE1MLjwvU1RST05HPgorPC9PTD4KKworV2hlbiBpbiBkb3VidCwgSFRNTGl6ZSBhIG1hc3RlciBhbmQgdXNlIDxFTT5seW54KDEpPC9FTT4gdG8gZ2VuZXJhdGUKK3BsYWluIEFTQ0lJIChhcyB3ZSBkbyBmb3IgdGhlIGFubm91bmNlbWVudCBkb2N1bWVudCkuIDxQPgorCitUaGUgcmVhc29uIGZvciBjaG9vc2luZyBIVE1MIGlzIHRoYXQgaXQncyAoYSkgd2VsbC1hZGFwdGVkIGZvciBvbi1saW5lCiticm93c2luZyB0aHJvdWdoIHZpZXdlcnMgdGhhdCBhcmUgZXZlcnl3aGVyZTsgKGIpIG1vcmUgZWFzaWx5IHJlYWRhYmxlCithcyBwbGFpbiB0ZXh0IHRoYW4gbW9zdCBvdGhlciBtYXJrLXVwcywgaWYgeW91IGRvbid0IGhhdmUgYSB2aWV3ZXI7IGFuZCAoYykKK2NhcnJpZXMgZW5vdWdoIGluZm9ybWF0aW9uIHRoYXQgeW91IGNhbiBnZW5lcmF0ZSBhIG5pY2UtbG9va2luZyBwcmludGVkCit2ZXJzaW9uIGZyb20gaXQuICBBbHNvLCBvZiBjb3Vyc2UsIGl0IG1ha2UgZXhwb3J0aW5nIHRoaW5ncyBsaWtlIHRoZQorYW5ub3VuY2VtZW50IGRvY3VtZW50IHRvIFdXVyBwcmV0dHkgdHJpdmlhbC4KKworPEgxPjxBIE5BTUU9ImJ1Z3RyYWNrIj5Ib3cgdG8gUmVwb3J0IEJ1Z3M8L0E+PC9IMT4KKworVGhlIDxBIE5BTUU9ImJ1Z3JlcG9ydCI+cmVwb3J0aW5nIGFkZHJlc3MgZm9yIGJ1Z3M8L0E+IGlzCis8QSBIUkVGPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+YnVnLW5jdXJzZXNAZ251Lm9yZzwvQT4uCitUaGlzIGlzIGEgbWFqb3Jkb21vIGxpc3Q7IHRvIGpvaW4sIHdyaXRlCit0byA8Q09ERT5idWctbmN1cnNlcy1yZXF1ZXN0QGdudS5vcmc8L0NPREU+IHdpdGggYSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIGxpbmU6Cis8UFJFPgorICAgICAgICAgICAgIHN1YnNjcmliZSAmbHQ7bmFtZSZndDtAJmx0O2hvc3QuZG9tYWluJmd0OworPC9QUkU+CisKK1RoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBjb2RlIGlzIG1haW50YWluZWQgYnkgYSBzbWFsbCBncm91cCBvZgordm9sdW50ZWVycy4gIFdoaWxlIHdlIHRyeSBvdXIgYmVzdCB0byBmaXggYnVncyBwcm9tcHRseSwgd2Ugc2ltcGx5Citkb24ndCBoYXZlIGEgbG90IG9mIGhvdXJzIHRvIHNwZW5kIG9uIGVsZW1lbnRhcnkgaGFuZC1ob2xkaW5nLiAgV2UgcmVseQorb24gaW50ZWxsaWdlbnQgY29vcGVyYXRpb24gZnJvbSBvdXIgdXNlcnMuICBJZiB5b3UgdGhpbmsgeW91IGhhdmUKK2ZvdW5kIGEgYnVnIGluIDxDT0RFPm5jdXJzZXM8L0NPREU+LCB0aGVyZSBhcmUgc29tZSBzdGVwcyB5b3UgY2FuIHRha2UKK2JlZm9yZSBjb250YWN0aW5nIHVzIHRoYXQgd2lsbCBoZWxwIGdldCB0aGUgYnVnIGZpeGVkIHF1aWNrbHkuIDxQPgorCitJbiBvcmRlciB0byB1c2Ugb3VyIGJ1Zy1maXhpbmcgdGltZSBlZmZpY2llbnRseSwgd2UgcHV0IHBlb3BsZSB3aG8KK3Nob3cgdXMgdGhleSd2ZSB0YWtlbiB0aGVzZSBzdGVwcyBhdCB0aGUgaGVhZCBvZiBvdXIgcXVldWUuICBUaGlzCittZWFucyB0aGF0IGlmIHlvdSBkb24ndCwgeW91J2xsIHByb2JhYmx5IGVuZCB1cCBhdCB0aGUgdGFpbCBlbmQgYW5kCitoYXZlIHRvIHdhaXQgYSB3aGlsZS4KKworPE9MPgorPExJPkRldmVsb3AgYSByZWNpcGUgdG8gcmVwcm9kdWNlIHRoZSBidWcuCis8cD4KK0J1Z3Mgd2UgY2FuIHJlcHJvZHVjZSBhcmUgbGlrZWx5IHRvIGJlIGZpeGVkIHZlcnkgcXVpY2tseSwgb2Z0ZW4KK3dpdGhpbiBkYXlzLiAgVGhlIG1vc3QgZWZmZWN0aXZlIHNpbmdsZSB0aGluZyB5b3UgY2FuIGRvIHRvIGdldCBhCitxdWljayBmaXggaXMgZGV2ZWxvcCBhIHdheSB3ZSBjYW4gZHVwbGljYXRlIHRoZSBiYWQgYmVoYXZpb3IgLS0KK2lkZWFsbHksIGJ5IGdpdmluZyB1cyBzb3VyY2UgZm9yIGEgc21hbGwsIHBvcnRhYmxlIHRlc3QgcHJvZ3JhbSB0aGF0CiticmVha3MgdGhlIGxpYnJhcnkuIChFdmVuIGJldHRlciBpcyBhIGtleXN0cm9rZSByZWNpcGUgdXNpbmcgb25lIG9mCit0aGUgdGVzdCBwcm9ncmFtcyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uKQorCis8TEk+VHJ5IHRvIHJlcHJvZHVjZSB0aGUgYnVnIG9uIGEgZGlmZmVyZW50IHRlcm1pbmFsIHR5cGUuIDxQPgorCitJbiBvdXIgZXhwZXJpZW5jZSwgbW9zdCBvZiB0aGUgYmVoYXZpb3JzIHBlb3BsZSByZXBvcnQgYXMgbGlicmFyeSBidWdzCithcmUgYWN0dWFsbHkgZHVlIHRvIHN1YnRsZSBwcm9ibGVtcyBpbiB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMuICBUaGlzIGlzCitlc3BlY2lhbGx5IGxpa2VseSB0byBiZSB0cnVlIGlmIHlvdSdyZSB1c2luZyBhIHRyYWRpdGlvbmFsCithc3luY2hyb25vdXMgdGVybWluYWwgb3IgUEMtYmFzZWQgdGVybWluYWwgZW11bGF0b3IsIHJhdGhlciB0aGFuIHh0ZXJtCitvciBhIFVOSVggY29uc29sZSBlbnRyeS4gPFA+CisKK0l0J3MgdGhlcmVmb3JlIGV4dHJlbWVseSBoZWxwZnVsIGlmIHlvdSBjYW4gdGVsbCB1cyB3aGV0aGVyIG9yIG5vdCB5b3VyCitwcm9ibGVtIHJlcHJvZHVjZXMgb24gb3RoZXIgdGVybWluYWwgdHlwZXMuICBVc3VhbGx5IHlvdSdsbCBoYXZlIGJvdGgKK2EgY29uc29sZSB0eXBlIGFuZCB4dGVybSBhdmFpbGFibGU7IHBsZWFzZSB0ZWxsIHVzIHdoZXRoZXIgb3Igbm90IHlvdXIKK2J1ZyByZXByb2R1Y2VzIG9uIGJvdGguIDxQPgorCitJZiB5b3UgaGF2ZSB4dGVybSBhdmFpbGFibGUsIGl0IGlzIGFsc28gZ29vZCB0byBjb2xsZWN0IHh0ZXJtIHJlcG9ydHMgZm9yCitkaWZmZXJlbnQgd2luZG93IHNpemVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaWYgeW91IG5vcm1hbGx5IHVzZSBhbgordW51c3VhbCB4dGVybSB3aW5kb3cgc2l6ZSAtLSBhIHN1cnByaXNpbmcgbnVtYmVyIG9mIHRoZSBidWdzIHdlJ3ZlIHNlZW4KK2FyZSBlaXRoZXIgdHJpZ2dlcmVkIG9yIG1hc2tlZCBieSB0aGVzZS4gCisKKzxMST5HZW5lcmF0ZSBhbmQgZXhhbWluZSBhIHRyYWNlIGZpbGUgZm9yIHRoZSBicm9rZW4gYmVoYXZpb3IuIDxQPgorCitSZWNvbXBpbGUgeW91ciBwcm9ncmFtIHdpdGggdGhlIGRlYnVnZ2luZyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyaWVzLgorSW5zZXJ0IGEgPENPREU+dHJhY2UoKTwvQ09ERT4gY2FsbCB3aXRoIHRoZSBhcmd1bWVudCBzZXQgdG8gPENPREU+VFJBQ0VfVVBEQVRFPC9DT0RFPi4KKyhTZWUgPEEgSFJFRj0ibmN1cnNlcy1pbnRyby5odG1sI2RlYnVnZ2luZyI+IldyaXRpbmcgUHJvZ3JhbXMgd2l0aAorTkNVUlNFUyI8L0E+IGZvciBkZXRhaWxzIG9uIHRyYWNlIGxldmVscy4pCitSZXByb2R1Y2UgeW91ciBidWcsIHRoZW4gbG9vayBhdCB0aGUgdHJhY2UgZmlsZSB0byBzZWUgd2hhdCB0aGUgbGlicmFyeQord2FzIGFjdHVhbGx5IGRvaW5nLiA8UD4KKworQW5vdGhlciBmcmVxdWVudCBjYXVzZSBvZiBhcHBhcmVudCBidWdzIGlzIGFwcGxpY2F0aW9uIGNvZGluZyBlcnJvcnMKK3RoYXQgY2F1c2UgdGhlIHdyb25nIHRoaW5ncyB0byBiZSBwdXQgb24gdGhlIHZpcnR1YWwgc2NyZWVuLiAgTG9va2luZworYXQgdGhlIHZpcnR1YWwtc2NyZWVuIGR1bXBzIGluIHRoZSB0cmFjZSBmaWxlIHdpbGwgdGVsbCB5b3UgaW1tZWRpYXRlbHkgaWYKK3RoaXMgaXMgaGFwcGVuaW5nLCBhbmQgc2F2ZSB5b3UgZnJvbSB0aGUgcG9zc2libGUgZW1iYXJyYXNzbWVudCBvZiBiZWluZwordG9sZCB0aGF0IHRoZSBidWcgaXMgaW4geW91ciBjb2RlIGFuZCBpcyB5b3VyIHByb2JsZW0gcmF0aGVyIHRoYW4gb3Vycy4gPFA+CisKK0lmIHRoZSB2aXJ0dWFsLXNjcmVlbiBkdW1wcyBsb29rIGNvcnJlY3QgYnV0IHRoZSBidWcgcGVyc2lzdHMsIGl0J3MKK3Bvc3NpYmxlIHRvIGNyYW5rIHVwIHRoZSB0cmFjZSBsZXZlbCB0byBnaXZlIG1vcmUgYW5kIG1vcmUgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBsaWJyYXJ5J3MgdXBkYXRlIGFjdGlvbnMgYW5kIHRoZSBjb250cm9sIHNlcXVlbmNlcyBpdCBpc3N1ZXMKK3RvIHBlcmZvcm0gdGhlbS4gIFRoZSB0ZXN0IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbnRhaW5zIGEKK3Rvb2wgZm9yIGRpZ2VzdGluZyB0aGVzZSBsb2dzIHRvIG1ha2UgdGhlbSBsZXNzIHRlZGlvdXMgdG8gd2FkZQordGhyb3VnaC4gPFA+CisKK09mdGVuIHlvdSdsbCBmaW5kIHRlcm1pbmZvIHByb2JsZW1zIGF0IHRoaXMgc3RhZ2UgYnkgbm90aWNpbmcgdGhhdCB0aGUKK2VzY2FwZSBzZXF1ZW5jZXMgcHV0IG91dCBmb3IgdmFyaW91cyBjYXBhYmlsaXRpZXMgYXJlIHdyb25nLiAgSWYgbm90LAoreW91J3JlIGxpa2VseSB0byBsZWFybiBlbm91Z2ggdG8gYmUgYWJsZSB0byBjaGFyYWN0ZXJpemUgYW55IGJ1ZyBpbgordGhlIHNjcmVlbi11cGRhdGUgbG9naWMgcXVpdGUgZXhhY3RseS4KKworPExJPlJlcG9ydCBkZXRhaWxzIGFuZCBzeW1wdG9tcywgbm90IGp1c3QgaW50ZXJwcmV0YXRpb25zLiA8UD4KKworSWYgeW91IGRvIHRoZSBwcmVjZWRpbmcgdHdvIHN0ZXBzLCBpdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHlvdSdsbCBkaXNjb3ZlcgordGhlIG5hdHVyZSBvZiB0aGUgcHJvYmxlbSB5b3Vyc2VsZiBhbmQgYmUgYWJsZSB0byBzZW5kIHVzIGEgZml4LiAgVGhpcword2lsbCBjcmVhdGUgaGFwcHkgZmVlbGluZ3MgYWxsIGFyb3VuZCBhbmQgZWFybiB5b3UgZ29vZCBrYXJtYSBmb3IgdGhlIGZpcnN0Cit0aW1lIHlvdSBydW4gaW50byBhIGJ1ZyB5b3UgcmVhbGx5IGNhbid0IGNoYXJhY3Rlcml6ZSBhbmQgZml4IHlvdXJzZWxmLiA8UD4KKworSWYgeW91J3JlIHN0aWxsIHN0dWNrLCBhdCBsZWFzdCB5b3UnbGwga25vdyB3aGF0IHRvIHRlbGwgdXMuICBSZW1lbWJlciwgd2UKK25lZWQgZGV0YWlscy4gIElmIHlvdSBndWVzcyBhYm91dCB3aGF0IGlzIHNhZmUgdG8gbGVhdmUgb3V0LCB5b3UgYXJlIHRvbworbGlrZWx5IHRvIGJlIHdyb25nLiA8UD4KKworSWYgeW91ciBidWcgcHJvZHVjZXMgYSBiYWQgdXBkYXRlLCBpbmNsdWRlIGEgdHJhY2UgZmlsZS4gIFRyeSB0byBtYWtlCit0aGUgdHJhY2UgYXQgdGhlIDxFTT5sZWFzdDwvRU0+IHZvbHVtaW5vdXMgbGV2ZWwgdGhhdCBwaW5zIGRvd24gdGhlCitidWcuICBMb2dzIHRoYXQgaGF2ZSBiZWVuIHRocm91Z2ggdHJhY2VtdW5jaCBhcmUgT0ssIGl0IGRvZXNuJ3QgdGhyb3cKK2F3YXkgYW55IGluZm9ybWF0aW9uIChhY3R1YWxseSB0aGV5J3JlIGJldHRlciB0aGFuIHVuLW11bmNoZWQgb25lcyBiZWNhdXNlCit0aGV5J3JlIGVhc2llciB0byByZWFkKS4gPFA+CisKK0lmIHlvdXIgYnVnIHByb2R1Y2VzIGEgY29yZS1kdW1wLCBwbGVhc2UgaW5jbHVkZSBhIHN5bWJvbGljIHN0YWNrIHRyYWNlCitnZW5lcmF0ZWQgYnkgZ2RiKDEpIG9yIHlvdXIgbG9jYWwgZXF1aXZhbGVudC4gPFA+CisKK1RlbGwgdXMgYWJvdXQgZXZlcnkgdGVybWluYWwgb24gd2hpY2ggeW91J3ZlIHJlcHJvZHVjZWQgdGhlIGJ1ZyAtLSBhbmQKK2V2ZXJ5IHRlcm1pbmFsIG9uIHdoaWNoIHlvdSBjYW4ndC4gIElkZWFsbHksIHNlbnQgdXMgdGVybWluZm8gc291cmNlcworZm9yIGFsbCBvZiB0aGVzZSAoeW91cnMgbWlnaHQgZGlmZmVyIGZyb20gb3VycykuIDxQPgorCitJbmNsdWRlIHlvdXIgbmN1cnNlcyB2ZXJzaW9uIGFuZCB5b3VyIE9TL21hY2hpbmUgdHlwZSwgb2YgY291cnNlISAgWW91IGNhbgorZmluZCB5b3VyIG5jdXJzZXMgdmVyc2lvbiBpbiB0aGUgPENPREU+Y3Vyc2VzLmg8L0NPREU+IGZpbGUuCis8L09MPgorCitJZiB5b3VyIHByb2JsZW0gc21lbGxzIGxpa2UgYSBsb2dpYyBlcnJvciBvciBpbiBjdXJzb3IgbW92ZW1lbnQgb3IKK3Njcm9sbGluZyBvciBhIGJhZCBjYXBhYmlsaXR5LCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgdGlueSB0ZXN0IGZyYW1lcworZm9yIHRoZSBsaWJyYXJ5IGFsZ29yaXRobXMgaW4gdGhlIHByb2dzIGRpcmVjdG9yeSB0aGF0IG1heSBoZWxwIHlvdQoraXNvbGF0ZSBpdC4gIFRoZXNlIGFyZSBub3QgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkLCBidXQgZG8gaGF2ZSB0aGVpcgorb3duIG1ha2UgcHJvZHVjdGlvbnMuICA8UD4KKworVGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGlzIDxDT0RFPm12Y3VyPC9DT0RFPiwgYSB0ZXN0IGZyYW1lIGZvciB0aGUKK2N1cnNvci1tb3ZlbWVudCBvcHRpbWl6YXRpb24gY29kZS4gIFdpdGggdGhpcyBwcm9ncmFtLCB5b3UgY2FuIHNlZQorZGlyZWN0bHkgd2hhdCBjb250cm9sIHNlcXVlbmNlcyB3aWxsIGJlIGVtaXR0ZWQgZm9yIGFueSBnaXZlbiBjdXJzb3IKK21vdmVtZW50IG9yIHNjcm9sbC9pbnNlcnQvZGVsZXRlIG9wZXJhdGlvbnMuICBJZiB5b3UgdGhpbmsgeW91J3ZlIGdvdAorYSBiYWQgY2FwYWJpbGl0eSBpZGVudGlmaWVkLCB5b3UgY2FuIGRpc2FibGUgaXQgYW5kIHRlc3QgYWdhaW4uIFRoZQorcHJvZ3JhbSBpcyBjb21tYW5kLWRyaXZlbiBhbmQgaGFzIG9uLWxpbmUgaGVscC4gPFA+CisKK0lmIHlvdSB0aGluayB0aGUgdmVydGljYWwtc2Nyb2xsIG9wdGltaXphdGlvbiBpcyBicm9rZW4sIG9yIGp1c3Qgd2FudCB0bwordW5kZXJzdGFuZCBob3cgaXQgd29ya3MgYmV0dGVyLCBidWlsZCA8Q09ERT5oYXNobWFwPC9DT0RFPiBhbmQgcmVhZCB0aGUKK2hlYWRlciBjb21tZW50cyBvZiA8Q09ERT5oYXJkc2Nyb2xsLmM8L0NPREU+IGFuZCA8Q09ERT5oYXNobWFwLmM8L0NPREU+OyB0aGVuIHRyeQoraXQgb3V0LiBZb3UgY2FuIGFsc28gdGVzdCB0aGUgaGFyZHdhcmUtc2Nyb2xsaW5nIG9wdGltaXphdGlvbiBzZXBhcmF0ZWx5Cit3aXRoIDxDT0RFPmhhcmRzY3JvbGw8L0NPREU+LiA8UD4KKworPEgxPjxBIE5BTUU9Im5jdXJzbGliIj5BIFRvdXIgb2YgdGhlIE5jdXJzZXMgTGlicmFyeTwvQT48L0gxPgorCis8SDI+PEEgTkFNRT0ibG92ZXJ2aWV3Ij5MaWJyYXJ5IE92ZXJ2aWV3PC9BPjwvSDI+CisKK01vc3Qgb2YgdGhlIGxpYnJhcnkgaXMgc3VwZXJzdHJ1Y3R1cmUgLS0gZmFpcmx5IHRyaXZpYWwgY29udmVuaWVuY2UKK2ludGVyZmFjZXMgdG8gYSBzbWFsbCBzZXQgb2YgYmFzaWMgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdXNlZAordG8gbWFuaXB1bGF0ZSB0aGUgdmlydHVhbCBzY3JlZW4gKGluIHBhcnRpY3VsYXIsIG5vbmUgb2YgdGhpcyBjb2RlCitkb2VzIGFueSBJL08gZXhjZXB0IHRocm91Z2ggY2FsbHMgdG8gbW9yZSBmdW5kYW1lbnRhbCBtb2R1bGVzCitkZXNjcmliZWQgYmVsb3cpLiAgVGhlIGZpbGVzCis8YmxvY2txdW90ZT4KKzxDT0RFPgorbGliX2FkZGNoLmMKK2xpYl9ia2dkLmMKK2xpYl9ib3guYworbGliX2NoZ2F0LmMKK2xpYl9jbGVhci5jCitsaWJfY2xlYXJvay5jCitsaWJfY2xyYm90LmMKK2xpYl9jbHJlb2wuYworbGliX2NvbG9yc2V0LmMKK2xpYl9kYXRhLmMKK2xpYl9kZWxjaC5jCitsaWJfZGVsd2luLmMKK2xpYl9lY2hvLmMKK2xpYl9lcmFzZS5jCitsaWJfZ2VuLmMKK2xpYl9nZXRzdHIuYworbGliX2hsaW5lLmMKK2xpYl9pbW1lZG9rLmMKK2xpYl9pbmNoc3RyLmMKK2xpYl9pbnNjaC5jCitsaWJfaW5zZGVsLmMKK2xpYl9pbnNzdHIuYworbGliX2luc3RyLmMKK2xpYl9pc2VuZHdpbi5jCitsaWJfa2V5bmFtZS5jCitsaWJfbGVhdmVvay5jCitsaWJfbW92ZS5jCitsaWJfbXZ3aW4uYworbGliX292ZXJsYXkuYworbGliX3BhZC5jCitsaWJfcHJpbnR3LmMKK2xpYl9yZWRyYXdsbi5jCitsaWJfc2NhbncuYworbGliX3NjcmVlbi5jCitsaWJfc2Nyb2xsLmMKK2xpYl9zY3JvbGxvay5jCitsaWJfc2NycmVnLmMKK2xpYl9zZXRfdGVybS5jCitsaWJfc2xrLmMKK2xpYl9zbGthdHJfc2V0LmMKK2xpYl9zbGthdHJvZi5jCitsaWJfc2xrYXRyb24uYworbGliX3Nsa2F0cnNldC5jCitsaWJfc2xrYXR0ci5jCitsaWJfc2xrY2xlYXIuYworbGliX3Nsa2NvbG9yLmMKK2xpYl9zbGtpbml0LmMKK2xpYl9zbGtsYWIuYworbGliX3Nsa3JlZnIuYworbGliX3Nsa3NldC5jCitsaWJfc2xrdG91Y2guYworbGliX3RvdWNoLmMKK2xpYl91bmN0cmwuYworbGliX3ZsaW5lLmMKK2xpYl93YXR0cm9mZi5jCitsaWJfd2F0dHJvbi5jCitsaWJfd2luZG93LmMKKzwvQ09ERT4KKzwvYmxvY2txdW90ZT4KK2FyZSBhbGwgaW4gdGhpcyBjYXRlZ29yeS4gIFRoZXkgYXJlIHZlcnkKK3VubGlrZWx5IHRvIG5lZWQgY2hhbmdlLCBiYXJyaW5nIGJ1Z3Mgb3Igc29tZSBmdW5kYW1lbnRhbAorcmVvcmdhbml6YXRpb24gaW4gdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLiA8UD4KKworVGhlc2UgZmlsZXMgYXJlIHVzZWQgb25seSBmb3IgZGVidWdnaW5nIHN1cHBvcnQ6Cis8YmxvY2txdW90ZT4KKzxjb2RlPgorbGliX3RyYWNlLmMKK2xpYl90cmFjZWF0ci5jCitsaWJfdHJhY2ViaXRzLmMKK2xpYl90cmFjZWNoci5jCitsaWJfdHJhY2VkbXAuYworbGliX3RyYWNlbXNlLmMKK3RyYWNlX2J1Zi5jCis8L2NvZGU+Cis8L2Jsb2NrcXVvdGU+CitJdCBpcyByYXRoZXIgdW5saWtlbHkgeW91IHdpbGwgZXZlciBuZWVkIHRvIGNoYW5nZSB0aGVzZSwgdW5sZXNzCit5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBuZXcgZGVidWcgdHJhY2UgbGV2ZWwgZm9yIHNvbWUgcmVhc29uLjxQPgorCitUaGVyZSBpcyBhbm90aGVyIGdyb3VwIG9mIGZpbGVzIHRoYXQgZG8gZGlyZWN0IEkvTyB2aWEgPEVNPnRwdXRzKCk8L0VNPiwKK2NvbXB1dGF0aW9ucyBvbiB0aGUgdGVybWluYWwgY2FwYWJpbGl0aWVzLCBvciBxdWVyaWVzIHRvIHRoZSBPUworZW52aXJvbm1lbnQsIGJ1dCBuZXZlcnRoZWxlc3MgaGF2ZSBvbmx5IGZhaXJseSBsb3cgY29tcGxleGl0eS4gIFRoZXNlCitpbmNsdWRlOgorPGJsb2NrcXVvdGU+Cis8Y29kZT4KK2xpYl9hY3MuYworbGliX2JlZXAuYworbGliX2NvbG9yLmMKK2xpYl9lbmR3aW4uYworbGliX2luaXRzY3IuYworbGliX2xvbmduYW1lLmMKK2xpYl9uZXd0ZXJtLmMKK2xpYl9vcHRpb25zLmMKK2xpYl90ZXJtY2FwLmMKK2xpYl90aS5jCitsaWJfdHBhcm0uYworbGliX3RwdXRzLmMKK2xpYl92aWRhdHRyLmMKK3JlYWRfZW50cnkuYy4KKzwvY29kZT4KKzwvYmxvY2txdW90ZT4KK1RoZXkgYXJlIGxpa2VseSB0byBuZWVkIHJldmlzaW9uIG9ubHkgaWYKK25jdXJzZXMgaXMgYmVpbmcgcG9ydGVkIHRvIGFuIGVudmlyb25tZW50IHdpdGhvdXQgYW4gdW5kZXJseWluZwordGVybWluZm8gY2FwYWJpbGl0eSByZXByZXNlbnRhdGlvbi4gPFA+CisKK1RoZXNlIGZpbGVzCitoYXZlIHNlcmlvdXMgaG9va3MgaW50bwordGhlIHR0eSBkcml2ZXIgYW5kIHNpZ25hbCBmYWNpbGl0aWVzOgorPGJsb2NrcXVvdGU+Cis8Y29kZT4KK2xpYl9rZXJuZWwuYworbGliX2JhdWRyYXRlLmMKK2xpYl9yYXcuYworbGliX3RzdHAuYworbGliX3R3YWl0LmMKKzwvY29kZT4KKzwvYmxvY2txdW90ZT4KK0lmIHlvdSBydW4gaW50byBwb3J0aW5nIHNuYWZ1cworbW92aW5nIHRoZSBwYWNrYWdlIHRvIGFub3RoZXIgVU5JWCwgdGhlIHByb2JsZW0gaXMgbGlrZWx5IHRvIGJlIGluIG9uZQorb2YgdGhlc2UgZmlsZXMuCitUaGUgZmlsZSA8Q09ERT5saWJfcHJpbnQuYzwvQ09ERT4gdXNlcyBzbGVlcCgyKSBhbmQgYWxzbworZmFsbHMgaW4gdGhpcyBjYXRlZ29yeS48UD4KKworQWxtb3N0IGFsbCBvZiB0aGUgcmVhbCB3b3JrIGlzIGRvbmUgaW4gdGhlIGZpbGVzCis8YmxvY2txdW90ZT4KKzxjb2RlPgoraGFyZHNjcm9sbC5jCitoYXNobWFwLmMKK2xpYl9hZGRjaC5jCitsaWJfZG91cGRhdGUuYworbGliX2dldGNoLmMKK2xpYl9tb3VzZS5jCitsaWJfbXZjdXIuYworbGliX3JlZnJlc2guYworbGliX3NldHVwLmMKK2xpYl92aWRhdHRyLmMKKzwvY29kZT4KKzwvYmxvY2txdW90ZT4KK01vc3Qgb2YgdGhlIGFsZ29yaXRobWljIGNvbXBsZXhpdHkgaW4gdGhlCitsaWJyYXJ5IGxpdmVzIGluIHRoZXNlIGZpbGVzLgorSWYgdGhlcmUgaXMgYSByZWFsIGJ1ZyBpbiA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gaXRzZWxmLCBpdCdzIHByb2JhYmx5IGhlcmUuCitXZSdsbCB0b3VyIHNvbWUgb2YgdGhlc2UgZmlsZXMgaW4gZGV0YWlsCitiZWxvdyAoc2VlIDxBIEhSRUY9IiNlbmdpbmUiPlRoZSBFbmdpbmUgUm9vbTwvQT4pLiA8UD4KKworRmluYWxseSwgdGhlcmUgaXMgYSBncm91cCBvZiBmaWxlcyB0aGF0IGlzIGFjdHVhbGx5IG1vc3Qgb2YgdGhlCit0ZXJtaW5mbyBjb21waWxlci4gIFRoZSByZWFzb24gdGhpcyBjb2RlIGxpdmVzIGluIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4KK2xpYnJhcnkgaXMgdG8gc3VwcG9ydCBmYWxsYmFjayB0byAvZXRjL3Rlcm1jYXAuICBUaGVzZSBmaWxlcyBpbmNsdWRlCis8YmxvY2txdW90ZT4KKzxjb2RlPgorYWxsb2NfZW50cnkuYworY2FwdG9pbmZvLmMKK2NvbXBfY2FwdGFiLmMKK2NvbXBfZXJyb3IuYworY29tcF9oYXNoLmMKK2NvbXBfcGFyc2UuYworY29tcF9zY2FuLmMKK3BhcnNlX2VudHJ5LmMKK3JlYWRfdGVybWNhcC5jCit3cml0ZV9lbnRyeS5jCis8L2NvZGU+Cis8L2Jsb2NrcXVvdGU+CitXZSdsbCBkaXNjdXNzIHRoZXNlIGluIHRoZSBjb21waWxlciB0b3VyLgorCis8SDI+PEEgTkFNRT0iZW5naW5lIj5UaGUgRW5naW5lIFJvb208L0E+PC9IMj4KKworPEgzPjxBIE5BTUU9ImlucHV0Ij5LZXlib2FyZCBJbnB1dDwvQT48L0gzPgorCitBbGwgPENPREU+bmN1cnNlczwvQ09ERT4gaW5wdXQgZnVubmVscyB0aHJvdWdoIHRoZSBmdW5jdGlvbgorPENPREU+d2dldGNoKCk8L0NPREU+LCBkZWZpbmVkIGluIDxDT0RFPmxpYl9nZXRjaC5jPC9DT0RFPi4gIFRoaXMgZnVuY3Rpb24gaXMKK3RyaWNreTsgaXQgaGFzIHRvIHBvbGwgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBldmVudHMgYW5kIGRvIGEgcnVubmluZworbWF0Y2ggb2YgaW5jb21pbmcgaW5wdXQgYWdhaW5zdCB0aGUgc2V0IG9mIGRlZmluZWQgc3BlY2lhbCBrZXlzLiA8UD4KKworVGhlIGNlbnRyYWwgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhpcyBtb2R1bGUgaXMgYSBGSUZPIHF1ZXVlLCB1c2VkIHRvCittYXRjaCBtdWx0aXBsZS1jaGFyYWN0ZXIgaW5wdXQgc2VxdWVuY2VzIGFnYWluc3Qgc3BlY2lhbC1rZXkKK2NhcGFiaWxpdGllczsgYWxzbyB0byBpbXBsZW1lbnQgcHVzaGJhY2sgdmlhIDxDT0RFPnVuZ2V0Y2goKTwvQ09ERT4uIDxQPgorCitUaGUgPENPREU+d2dldGNoKCk8L0NPREU+IGNvZGUgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGZ1bmN0aW9uIGtleQorc2VxdWVuY2VzIGFuZCB0aGUgc2FtZSBzZXF1ZW5jZXMgdHlwZWQgbWFudWFsbHkgYnkgZG9pbmcgYSB0aW1lZCB3YWl0CithZnRlciBlYWNoIGlucHV0IGNoYXJhY3RlciB0aGF0IGNvdWxkIGxlYWQgYSBmdW5jdGlvbiBrZXkgc2VxdWVuY2UuCitJZiB0aGUgZW50aXJlIHNlcXVlbmNlIHRha2VzIGxlc3MgdGhhbiAxIHNlY29uZCwgaXQgaXMgYXNzdW1lZCB0byBoYXZlCitiZWVuIGdlbmVyYXRlZCBieSBhIGZ1bmN0aW9uIGtleSBwcmVzcy4gPFA+CisKK0hhY2tlcnMgYnJ1aXNlZCBieSBwcmV2aW91cyBlbmNvdW50ZXJzIHdpdGggdmFyaWFudCA8Q09ERT5zZWxlY3QoMik8L0NPREU+CitjYWxscyBtYXkgZmluZCB0aGUgY29kZSBpbiA8Q09ERT5saWJfdHdhaXQuYzwvQ09ERT4gaW50ZXJlc3RpbmcuICBJdCBkZWFscword2l0aCB0aGUgcHJvYmxlbSB0aGF0IHNvbWUgQlNEIHNlbGVjdHMgZG9uJ3QgcmV0dXJuIGEgcmVsaWFibGUKK3RpbWUtbGVmdCB2YWx1ZS4gIFRoZSBmdW5jdGlvbiA8Q09ERT50aW1lZF93YWl0KCk8L0NPREU+IGVmZmVjdGl2ZWx5CitzaW11bGF0ZXMgYSBTeXN0ZW0gViBzZWxlY3QuCisKKzxIMz48QSBOQU1FPSJtb3VzZSI+TW91c2UgRXZlbnRzPC9BPjwvSDM+CisKK0lmIHRoZSBtb3VzZSBpbnRlcmZhY2UgaXMgYWN0aXZlLCA8Q09ERT53Z2V0Y2goKTwvQ09ERT4gcG9sbHMgZm9yIG1vdXNlCitldmVudHMgZWFjaCBjYWxsLCBiZWZvcmUgaXQgZ29lcyB0byB0aGUga2V5Ym9hcmQgZm9yIGlucHV0LiAgSXQgaXMKK3VwIHRvIDxDT0RFPmxpYl9tb3VzZS5jPC9DT0RFPiBob3cgdGhlIHBvbGxpbmcgaXMgYWNjb21wbGlzaGVkOyBpdCBtYXkgdmFyeQorZm9yIGRpZmZlcmVudCBkZXZpY2VzLiA8UD4KKworVW5kZXIgeHRlcm0sIGhvd2V2ZXIsIG1vdXNlIGV2ZW50IG5vdGlmaWNhdGlvbnMgY29tZSBpbiB2aWEgdGhlIGtleWJvYXJkCitpbnB1dCBzdHJlYW0uICBUaGV5IGFyZSByZWNvZ25pemVkIGJ5IGhhdmluZyB0aGUgPFNUUk9ORz5rbW91czwvU1RST05HPiBjYXBhYmlsaXR5CithcyBhIHByZWZpeC4gIFRoaXMgaXMga2luZCBvZiBrbHVnZXksIGJ1dCB0cnlpbmcgdG8gd2lyZSBpbiByZWNvZ25pdGlvbiBvZgorYSBtb3VzZSBrZXkgcHJlZml4IHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgZnVuY3Rpb24ta2V5IG1hY2hpbmVyeSB3b3VsZAorYmUganVzdCB0b28gcGFpbmZ1bCwgYW5kIHRoaXMgdHVybnMgb3V0IHRvIGltcGx5IGhhdmluZyB0aGUgcHJlZml4IHNvbWV3aGVyZQoraW4gdGhlIGZ1bmN0aW9uLWtleSBjYXBhYmlsaXRpZXMgYXQgdGVybWluYWwtdHlwZSBpbml0aWFsaXphdGlvbi4gPFA+CisKK1RoaXMga2x1Z2Ugb25seSB3b3JrcyBiZWNhdXNlIDxTVFJPTkc+a21vdXM8L1NUUk9ORz4gaXNuJ3QgYWN0dWFsbHkgdXNlZCBieSBhbnkKK2hpc3RvcmljIHRlcm1pbmFsIHR5cGUgb3IgY3Vyc2VzIGltcGxlbWVudGF0aW9uIHdlIGtub3cgb2YuICBCZXN0CitndWVzcyBpcyBpdCdzIGEgcmVsaWMgb2Ygc29tZSBmb3Jnb3R0ZW4gZXhwZXJpbWVudCBpbi1ob3VzZSBhdCBCZWxsCitMYWJzIHRoYXQgZGlkbid0IGxlYXZlIGFueSB0cmFjZXMgaW4gdGhlIHB1YmxpY2x5LWRpc3RyaWJ1dGVkIFN5c3RlbSBWCit0ZXJtaW5mbyBmaWxlcy4gIElmIFN5c3RlbSBWIG9yIFhQRzQgZXZlciBnZXRzIHNlcmlvdXMgYWJvdXQgdXNpbmcgaXQKK2FnYWluLCB0aGlzIGtsdWdlIG1heSBoYXZlIHRvIGNoYW5nZS4gPFA+CisKK0hlcmUgYXJlIHNvbWUgbW9yZSBkZXRhaWxzIGFib3V0IG1vdXNlIGV2ZW50IGhhbmRsaW5nOiA8UD4KKworVGhlIDxDT0RFPmxpYl9tb3VzZSgpPC9DT0RFPmNvZGUgaXMgbG9naWNhbGx5IHNwbGl0IGludG8gYSBsb3dlciBsZXZlbCB0aGF0CithY2NlcHRzIGV2ZW50IHJlcG9ydHMgaW4gYSBkZXZpY2UtZGVwZW5kZW50IGZvcm1hdCBhbmQgYW4gdXBwZXIgbGV2ZWwgdGhhdAorcGFyc2VzIG1vdXNlIGdlc3R1cmVzIGFuZCBmaWx0ZXJzIGV2ZW50cy4gIFRoZSBtZWRpYXRpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgYQorY2lyY3VsYXIgcXVldWUgb2YgZXZlbnQgc3RydWN0dXJlcy4gPFA+CisKK0Z1bmN0aW9uYWxseSwgdGhlIGxvd2VyIGxldmVsJ3Mgam9iIGlzIHRvIHBpY2sgdXAgcHJpbWl0aXZlIGV2ZW50cyBhbmQKK3B1dCB0aGVtIG9uIHRoZSBjaXJjdWxhciBxdWV1ZS4gIFRoaXMgY2FuIGhhcHBlbiBpbiBvbmUgb2YgdHdvIHdheXM6CitlaXRoZXIgKGEpIDxDT0RFPl9uY19tb3VzZV9ldmVudCgpPC9DT0RFPiBkZXRlY3RzIGEgc2VyaWVzIG9mIGluY29taW5nCittb3VzZSByZXBvcnRzIGFuZCBxdWV1ZXMgdGhlbSwgb3IgKGIpIGNvZGUgaW4gPENPREU+bGliX2dldGNoLmM8L0NPREU+IGRldGVjdHMgdGhlCis8U1RST05HPmttb3VzPC9TVFJPTkc+IHByZWZpeCBpbiB0aGUga2V5Ym9hcmQgaW5wdXQgc3RyZWFtIGFuZCBjYWxscyBfbmNfbW91c2VfaW5saW5lCit0byBxdWV1ZSB1cCBhIHNlcmllcyBvZiBhZGphY2VudCBtb3VzZSByZXBvcnRzLiA8UD4KKworSW4gZWl0aGVyIGNhc2UsIDxDT0RFPl9uY19tb3VzZV9wYXJzZSgpPC9DT0RFPiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZQorc2VyaWVzIGlzIGFjY2VwdGVkIHRvIHBhcnNlIHRoZSBkaWdlc3RlZCBtb3VzZSByZXBvcnRzIChsb3ctbGV2ZWwKK2V2ZW50cykgaW50byBhIGdlc3R1cmUgKGEgaGlnaC1sZXZlbCBvciBjb21wb3NpdGUgZXZlbnQpLgorCis8SDM+PEEgTkFNRT0ib3V0cHV0Ij5PdXRwdXQgYW5kIFNjcmVlbiBVcGRhdGluZzwvQT48L0gzPgorCitXaXRoIHRoZSBzaW5nbGUgZXhjZXB0aW9uIG9mIGNoYXJhY3RlciBlY2hvZXMgZHVyaW5nIGEgPENPREU+d2dldG5zdHIoKTwvQ09ERT4KK2NhbGwgKHdoaWNoIHNpbXVsYXRlcyBjb29rZWQtbW9kZSBsaW5lIGVkaXRpbmcgaW4gYW4gbmN1cnNlcyB3aW5kb3cpLAordGhlIGxpYnJhcnkgbm9ybWFsbHkgZG9lcyBhbGwgaXRzIG91dHB1dCBhdCByZWZyZXNoIHRpbWUuIDxQPgorCitUaGUgbWFpbiBqb2IgaXMgdG8gZ28gZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2NyZWVuIChhcyByZXByZXNlbnRlZAoraW4gdGhlIDxDT0RFPmN1cnNjcjwvQ09ERT4gd2luZG93IHN0cnVjdHVyZSkgdG8gdGhlIGRlc2lyZWQgbmV3IHN0YXRlIChhcworcmVwcmVzZW50ZWQgaW4gdGhlIDxDT0RFPm5ld3NjcjwvQ09ERT4gd2luZG93IHN0cnVjdHVyZSksIHdoaWxlIGRvaW5nIGFzCitsaXR0bGUgSS9PIGFzIHBvc3NpYmxlLiA8UD4KKworVGhlIGJyYWlucyBvZiB0aGlzIG9wZXJhdGlvbiBhcmUgdGhlIG1vZHVsZXMgPENPREU+aGFzaG1hcC5jPC9DT0RFPiwKKzxDT0RFPmhhcmRzY3JvbGwuYzwvQ09ERT4gYW5kIDxDT0RFPmxpYl9kb3VwZGF0ZS5jPC9DT0RFPjsgdGhlIGxhdHRlciB0d28gdXNlCis8Q09ERT5saWJfbXZjdXIuYzwvQ09ERT4uICBFc3NlbnRpYWxseSwgd2hhdCBoYXBwZW5zIGxvb2tzIGxpa2UgdGhpczogPFA+CisKK1RoZSA8Q09ERT5oYXNobWFwLmM8L0NPREU+IG1vZHVsZSB0cmllcyB0byBkZXRlY3QgdmVydGljYWwgbW90aW9uCitjaGFuZ2VzIGJldHdlZW4gdGhlIHJlYWwgYW5kIHZpcnR1YWwgc2NyZWVucy4gIFRoaXMgaW5mb3JtYXRpb24KK2lzIHJlcHJlc2VudGVkIGJ5IHRoZSBvbGRpbmRleCBtZW1iZXJzIGluIHRoZSBuZXdzY3Igc3RydWN0dXJlLgorVGhlc2UgYXJlIG1vZGlmaWVkIGJ5IHZlcnRpY2FsLW1vdGlvbiBhbmQgY2xlYXIgb3BlcmF0aW9ucywgYW5kIGJvdGggYXJlCityZS1pbml0aWFsaXplZCBhZnRlciBlYWNoIHVwZGF0ZS4gVG8gdGhpcyBjaGFuZ2Utam91cm5hbGxpbmcKK2luZm9ybWF0aW9uLCB0aGUgaGFzaG1hcCBjb2RlIGFkZHMgZGVkdWN0aW9ucyBtYWRlIHVzaW5nIGEgbW9kaWZpZWQgSGVja2VsCithbGdvcml0aG0gb24gaGFzaCB2YWx1ZXMgZ2VuZXJhdGVkIGZyb20gdGhlIGxpbmUgY29udGVudHMuIDxQPgorCitUaGUgPENPREU+aGFyZHNjcm9sbC5jPC9DT0RFPiBtb2R1bGUgY29tcHV0ZXMgYW4gb3B0aW11bSBzZXQgb2Ygc2Nyb2xsLAoraW5zZXJ0aW9uLCBhbmQgZGVsZXRpb24gb3BlcmF0aW9ucyB0byBtYWtlIHRoZSBpbmRpY2VzIG1hdGNoLiAgSXQgY2FsbHMKKzxDT0RFPl9uY19tdmN1cl9zY3JvbGxuKCk8L0NPREU+IGluIDxDT0RFPmxpYl9tdmN1ci5jPC9DT0RFPiB0byBkbyB0aG9zZSBtb3Rpb25zLiA8UD4KKworVGhlbiA8Q09ERT5saWJfZG91cGRhdGUuYzwvQ09ERT4gZ29lcyB0byB3b3JrLiAgSXRzIGpvYiBpcyB0byBkbyBsaW5lLWJ5LWxpbmUKK3RyYW5zZm9ybWF0aW9ucyBvZiA8Q09ERT5jdXJzY3I8L0NPREU+IGxpbmVzIHRvIDxDT0RFPm5ld3NjcjwvQ09ERT4gbGluZXMuICBJdHMgbWFpbgordG9vbCBpcyB0aGUgcm91dGluZSA8Q09ERT5tdmN1cigpPC9DT0RFPiBpbiA8Q09ERT5saWJfbXZjdXIuYzwvQ09ERT4uICBUaGlzIHJvdXRpbmUKK2RvZXMgY3Vyc29yLW1vdmVtZW50IG9wdGltaXphdGlvbiwgYXR0ZW1wdGluZyB0byBnZXQgZnJvbSBnaXZlbiBzY3JlZW4KK2xvY2F0aW9uIEEgdG8gZ2l2ZW4gbG9jYXRpb24gQiBpbiB0aGUgZmV3ZXN0IG91dHB1dCBjaGFyYWN0ZXJzIHBvc3NpYmxlLiA8UD4KKworSWYgeW91IHdhbnQgdG8gd29yayBvbiBzY3JlZW4gb3B0aW1pemF0aW9ucywgeW91IHNob3VsZCB1c2UgdGhlIGZhY3QKK3RoYXQgKGluIHRoZSB0cmFjZS1lbmFibGVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkpIGVuYWJsaW5nIHRoZQorPENPREU+VFJBQ0VfVElNRVM8L0NPREU+IHRyYWNlIGxldmVsIGNhdXNlcyBhIHJlcG9ydCB0byBiZSBlbWl0dGVkIGFmdGVyCitlYWNoIHNjcmVlbiB1cGRhdGUgZ2l2aW5nIHRoZSBlbGFwc2VkIHRpbWUgYW5kIGEgY291bnQgb2YgY2hhcmFjdGVycworZW1pdHRlZCBkdXJpbmcgdGhlIHVwZGF0ZS4gIFlvdSBjYW4gdXNlIHRoaXMgdG8gdGVsbCB3aGVuIGFuIHVwZGF0ZQorb3B0aW1pemF0aW9uIGltcHJvdmVzIGVmZmljaWVuY3kuIDxQPgorCitJbiB0aGUgdHJhY2UtZW5hYmxlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRpc2FibGUKK2FuZCByZS1lbmFibGUgdmFyaW91cyBvcHRpbWl6YXRpb25zIGF0IHJ1bnRpbWUgYnkgdHdlYWtpbmcgdGhlIHZhcmlhYmxlCis8Q09ERT5fbmNfb3B0aW1pemVfZW5hYmxlPC9DT0RFPi4gIFNlZSB0aGUgZmlsZSA8Q09ERT5pbmNsdWRlL2N1cnNlcy5oLmluPC9DT0RFPgorZm9yIG1hc2sgdmFsdWVzLCBuZWFyIHRoZSBlbmQuCisKKzxIMT48QSBOQU1FPSJmbW5vdGUiPlRoZSBGb3JtcyBhbmQgTWVudSBMaWJyYXJpZXM8L0E+PC9IMT4KKworVGhlIGZvcm1zIGFuZCBtZW51IGxpYnJhcmllcyBzaG91bGQgd29yayByZWxpYWJseSBpbiBhbnkgZW52aXJvbm1lbnQgeW91CitjYW4gcG9ydCBuY3Vyc2VzIHRvLiBUaGUgb25seSBwb3J0YWJpbGl0eSBpc3N1ZSBhbnl3aGVyZSBpbiB0aGVtIGlzIHdoYXQKK2ZsYXZvciBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHRoZSBidWlsdC1pbiBmb3JtIGZpZWxkIHR5cGUgVFlQRV9SRUdFWFAKK3dpbGwgcmVjb2duaXplLiA8UD4KKworVGhlIGNvbmZpZ3VyYXRpb24gY29kZSBwcmVmZXJzIHRoZSBQT1NJWCByZWdleCBmYWNpbGl0eSwgbW9kZWxlZCBvbgorU3lzdGVtIFYncywgYnV0IHdpbGwgc2V0dGxlIGZvciBCU0QgcmVnZXhwcyBpZiB0aGUgZm9ybWVyIGlzbid0IGF2YWlsYWJsZS4gPFA+CisKK0hpc3RvcmljYWwgbm90ZTogdGhlIHBhbmVscyBjb2RlIHdhcyB3cml0dGVuIHByaW1hcmlseSB0byBhc3Npc3QgaW4KK3BvcnRpbmcgdTM4Nm1vbiAyLjAgKGNvbXAuc291cmNlcy5taXNjIHYxNGkwMDEtNCkgdG8gc3lzdGVtcyBsYWNraW5nCitwYW5lbHMgc3VwcG9ydDsgdTM4Nm1vbiAyLjEwIGFuZCBiZXlvbmQgdXNlIGl0LiAgVGhpcyB2ZXJzaW9uIGhhcyBiZWVuCitzbGlnaHRseSBjbGVhbmVkIHVwIGZvciA8Q09ERT5uY3Vyc2VzPC9DT0RFPi4KKworPEgxPjxBIE5BTUU9InRpYyI+QSBUb3VyIG9mIHRoZSBUZXJtaW5mbyBDb21waWxlcjwvQT48L0gxPgorCitUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGltcGxlbWVudGF0aW9uIG9mIDxTVFJPTkc+dGljPC9TVFJPTkc+IGlzIHJhdGhlciBjb21wbGV4CitpbnRlcm5hbGx5OyBpdCBoYXMgdG8gZG8gYSB0cnlpbmcgY29tYmluYXRpb24gb2YgbWlzc2lvbnMuIFRoaXMgc3RhcnRzCit3aXRoIHRoZSBmYWN0IHRoYXQsIGluIGFkZGl0aW9uIHRvIGl0cyBub3JtYWwgZHV0eSBvZiBjb21waWxpbmcKK3Rlcm1pbmZvIHNvdXJjZXMgaW50byBsb2FkYWJsZSB0ZXJtaW5mbyBiaW5hcmllcywgaXQgaGFzIHRvIGJlIGFibGUgdG8KK2hhbmRsZSB0ZXJtY2FwIHN5bnRheCBhbmQgY29tcGlsZSB0aGF0IHRvbyBpbnRvIHRlcm1pbmZvIGVudHJpZXMuIDxQPgorCitUaGUgaW1wbGVtZW50YXRpb24gdGhlcmVmb3JlIHN0YXJ0cyB3aXRoIGEgdGFibGUtZHJpdmVuLCBkdWFsLW1vZGUKK2xleGljYWwgYW5hbHl6ZXIgKGluIDxDT0RFPmNvbXBfc2Nhbi5jPC9DT0RFPikuICBUaGUgbGV4ZXIgY2hvb3NlcyBpdHMKK21vZGUgKHRlcm1jYXAgb3IgdGVybWluZm8pIGJhc2VkIG9uIHRoZSBmaXJzdCBgLCcgb3IgYDonIGl0IGZpbmRzIGluCitlYWNoIGVudHJ5LiAgVGhlIGxleGVyIGRvZXMgYWxsIHRoZSB3b3JrIG9mIHJlY29nbml6aW5nIGNhcGFiaWxpdHkKK25hbWVzIGFuZCB2YWx1ZXM7IHRoZSBncmFtbWFyIGFib3ZlIGl0IGlzIHRyaXZpYWwsIGp1c3QgInBhcnNlIGVudHJpZXMKK3RpbGwgeW91IHJ1biBvdXQgb2YgZmlsZSIuCisKKzxIMj48QSBOQU1FPSJub251c2UiPlRyYW5zbGF0aW9uIG9mIE5vbi08U1RST05HPnVzZTwvU1RST05HPiBDYXBhYmlsaXRpZXM8L0E+PC9IMj4KKworVHJhbnNsYXRpb24gb2YgbW9zdCB0aGluZ3MgYmVzaWRlcyA8U1RST05HPnVzZTwvU1RST05HPiBjYXBhYmlsaXRpZXMgaXMgcHJldHR5CitzdHJhaWdodGZvcndhcmQuICBUaGUgbGV4aWNhbCBhbmFseXplcidzIHRva2VuaXplciBoYW5kcyBlYWNoIGNhcGFiaWxpdHkKK25hbWUgdG8gYSBoYXNoIGZ1bmN0aW9uLCB3aGljaCBkcml2ZXMgYSB0YWJsZSBsb29rdXAuICBUaGUgdGFibGUgZW50cnkKK3lpZWxkcyBhbiBpbmRleCB3aGljaCBpcyB1c2VkIHRvIGxvb2sgdXAgdGhlIHRva2VuIHR5cGUgaW4gYW5vdGhlciB0YWJsZSwKK2FuZCBjb250cm9scyBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdmFsdWUuIDxQPgorCitPbmUgcG9zc2libHkgaW50ZXJlc3RpbmcgYXNwZWN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgd2F5IHRoZQorY29tcGlsZXIgdGFibGVzIGFyZSBpbml0aWFsaXplZC4gIEFsbCB0aGUgdGFibGVzIGFyZSBnZW5lcmF0ZWQgYnkgdmFyaW91cworYXdrL3NlZC9zaCBzY3JpcHRzIGZyb20gYSBtYXN0ZXIgdGFibGUgPENPREU+aW5jbHVkZS9DYXBzPC9DT0RFPjsgdGhlc2UKK3NjcmlwdHMgYWN0dWFsbHkgd3JpdGUgQyBpbml0aWFsaXplcnMgd2hpY2ggYXJlIGxpbmtlZCB0byB0aGUgY29tcGlsZXIuCitGdXJ0aGVybW9yZSwgdGhlIGhhc2ggdGFibGUgaXMgZ2VuZXJhdGVkIGluIHRoZSBzYW1lIHdheSwgc28gaXQgZG9lc24ndAoraGF2ZSB0byBiZSBnZW5lcmF0ZWQgYXQgY29tcGlsZXIgc3RhcnR1cCB0aW1lIChhbm90aGVyIGJlbmVmaXQgb2YgdGhpcworb3JnYW5pemF0aW9uIGlzIHRoYXQgdGhlIGhhc2ggdGFibGUgY2FuIGJlIGluIHNoYXJlYWJsZSB0ZXh0IHNwYWNlKS4gPFA+CisKK1RodXMsIGFkZGluZyBhIG5ldyBjYXBhYmlsaXR5IGlzIHVzdWFsbHkgcHJldHR5IHRyaXZpYWwsIGp1c3QgYSBtYXR0ZXIKK29mIGFkZGluZyBvbmUgbGluZSB0byB0aGUgPENPREU+aW5jbHVkZS9DYXBzPC9DT0RFPiBmaWxlLiAgV2UnbGwgaGF2ZSBtb3JlCit0byBzYXkgYWJvdXQgdGhpcyBpbiB0aGUgc2VjdGlvbiBvbiA8QSBIUkVGPSIjdHJhbnNsYXRpb24iPlNvdXJjZS1Gb3JtCitUcmFuc2xhdGlvbjwvQT4uCisKKzxIMj48QSBOQU1FPSJ1c2VzIj5Vc2UgQ2FwYWJpbGl0eSBSZXNvbHV0aW9uPC9BPjwvSDI+CisKK1RoZSBiYWNrZ3JvdW5kIHByb2JsZW0gdGhhdCBtYWtlcyA8U1RST05HPnRpYzwvU1RST05HPiB0cmlja3kgaXNuJ3QgdGhlIGNhcGFiaWxpdHkKK3RyYW5zbGF0aW9uIGl0c2VsZiwgaXQncyB0aGUgcmVzb2x1dGlvbiBvZiA8U1RST05HPnVzZTwvU1RST05HPiBjYXBhYmlsaXRpZXMuICBPbGRlcgordmVyc2lvbnMgd291bGQgbm90IGhhbmRsZSBmb3J3YXJkIDxTVFJPTkc+dXNlPC9TVFJPTkc+IHJlZmVyZW5jZXMgZm9yIHRoaXMgcmVhc29uCisodGhhdCBpcywgYSB1c2luZyB0ZXJtaW5hbCBhbHdheXMgaGFkIHRvIGZvbGxvdyBpdHMgdXNlIHRhcmdldCBpbiB0aGUKK3NvdXJjZSBmaWxlKS4gIEJ5IGRvaW5nIHRoaXMsIHRoZXkgZ290IGF3YXkgd2l0aCBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbgordGFjdGljOyBjb21waWxlIGV2ZXJ5dGhpbmcgYXMgaXQgYmxvd3MgYnksIHRoZW4gcmVzb2x2ZSB1c2VzIGZyb20gY29tcGlsZWQKK2VudHJpZXMuIDxQPgorCitUaGlzIHdvbid0IGRvIGZvciA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4uICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoYXQgdGhlIHdob2xlCitjb21waWxhdGlvbiBwcm9jZXNzIGhhcyB0byBiZSBlbWJlZGRhYmxlIGluIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeQorc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIGJ5IHRoZSBzdGFydHVwIGNvZGUgdG8gdHJhbnNsYXRlIHRlcm1jYXAKK2VudHJpZXMgb24gdGhlIGZseS4gIFRoZSBlbWJlZGRlZCB2ZXJzaW9uIGNhbid0IGdvIHByb21pc2N1b3VzbHkgd3JpdGluZworZXZlcnl0aGluZyBpdCB0cmFuc2xhdGVzIG91dCB0byBkaXNrIC0tIGZvciBvbmUgdGhpbmcsIGl0IHdpbGwgdHlwaWNhbGx5CitiZSBydW5uaW5nIHdpdGggbm9uLXJvb3QgcGVybWlzc2lvbnMuIDxQPgorCitTbyBvdXIgPFNUUk9ORz50aWM8L1NUUk9ORz4gaXMgZGVzaWduZWQgdG8gcGFyc2UgYW4gZW50aXJlIHRlcm1pbmZvIGZpbGUgaW50byBhCitkb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgZW50cnkgc3RydWN0dXJlcyBpbi1jb3JlLCBhbmQgdGhlbiBkbworPFNUUk9ORz51c2U8L1NUUk9ORz4gcmVzb2x1dGlvbiBpbi1tZW1vcnkgYmVmb3JlIHdyaXRpbmcgZXZlcnl0aGluZyBvdXQuICBUaGlzCitkZXNpZ24gaGFzIG90aGVyIGFkdmFudGFnZXM6IGl0IG1ha2VzIGZvcndhcmQgYW5kIGJhY2sgdXNlLXJlZmVyZW5jZXMKK2VxdWFsbHkgZWFzeSAoc28gd2UgZ2V0IHRoZSBsYXR0ZXIgZm9yIGZyZWUpLCBhbmQgaXQgbWFrZXMgY2hlY2tpbmcgZm9yCituYW1lIGNvbGxpc2lvbnMgYmVmb3JlIHRoZXkncmUgd3JpdHRlbiBvdXQgZWFzeSB0byBkby4gPFA+CisKK0FuZCB0aGlzIGlzIGV4YWN0bHkgaG93IHRoZSBlbWJlZGRlZCB2ZXJzaW9uIHdvcmtzLiAgQnV0IHRoZSBzdGFuZC1hbG9uZQordXNlci1hY2Nlc3NpYmxlIHZlcnNpb24gb2YgPFNUUk9ORz50aWM8L1NUUk9ORz4gcGFydGx5IHJldmVydHMgdG8gdGhlIGhpc3RvcmljYWwKK3N0cmF0ZWd5OyBpdCB3cml0ZXMgdG8gZGlzayAobm90IGtlZXBpbmcgaW4gY29yZSkgYW55IGVudHJ5IHdpdGggbm8KKzxTVFJPTkc+dXNlPC9TVFJPTkc+IHJlZmVyZW5jZXMuIDxQPgorCitUaGlzIGlzIHN0cmljdGx5IGEgY29yZS1lY29ub215IGtsdWdlLCBpbXBsZW1lbnRlZCBiZWNhdXNlIHRoZQordGVybWluZm8gbWFzdGVyIGZpbGUgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgc29tZSBjb3JlLXBvb3Igc3lzdGVtcyBzd2FwCitsaWtlIGNyYXp5IHdoZW4geW91IGNvbXBpbGUgaXQgYWxsIGluIG1lbW9yeS4uLnRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIG9mCit0aGlzIHByb2Nlc3MgdGFraW5nIDxTVFJPTkc+dGhyZWUgaG91cnM8L1NUUk9ORz4sIHJhdGhlciB0aGFuIHRoZSB0d2VudHkgc2Vjb25kcworb3IgbGVzcyB0eXBpY2FsIG9uIHRoZSBhdXRob3IncyBkZXZlbG9wbWVudCBib3guIDxQPgorCitTby4gIFRoZSBleGVjdXRhYmxlIDxTVFJPTkc+dGljPC9TVFJPTkc+IHBhc3NlcyB0aGUgZW50cnktcGFyc2VyIGEgaG9vayB0aGF0Cis8RU0+aW1tZWRpYXRlbHk8L0VNPiB3cml0ZXMgb3V0IHRoZSByZWZlcmVuY2VkIGVudHJ5IGlmIGl0IGhhcyBubyB1c2UKK2NhcGFiaWxpdGllcy4gIFRoZSBjb21waWxlciBtYWluIGxvb3AgcmVmcmFpbnMgZnJvbSBhZGRpbmcgdGhlIGVudHJ5Cit0byB0aGUgaW4tY29yZSBsaXN0IHdoZW4gdGhpcyBob29rIGZpcmVzLiAgSWYgc29tZSBvdGhlciBlbnRyeSBsYXRlcgorbmVlZHMgdG8gcmVmZXJlbmNlIGFuIGVudHJ5IHRoYXQgZ290IHdyaXR0ZW4gaW1tZWRpYXRlbHksIHRoYXQncyBPSzsKK3RoZSByZXNvbHV0aW9uIGNvZGUgd2lsbCBmZXRjaCBpdCBvZmYgZGlzayB3aGVuIGl0IGNhbid0IGZpbmQgaXQgaW4KK2NvcmUuIDxQPgorCitOYW1lIGNvbGxpc2lvbnMgd2lsbCBzdGlsbCBiZSBkZXRlY3RlZCwganVzdCBub3QgYXMgY2xlYW5seS4gIFRoZQorPENPREU+d3JpdGVfZW50cnkoKTwvQ09ERT4gY29kZSBjb21wbGFpbnMgYmVmb3JlIG92ZXJ3cml0aW5nIGFuIGVudHJ5IHRoYXQKK3Bvc3RkYXRlcyB0aGUgdGltZSBvZiA8U1RST05HPnRpYzwvU1RST05HPidzIGZpcnN0IGNhbGwgdG8KKzxDT0RFPndyaXRlX2VudHJ5KCk8L0NPREU+LCBUaHVzIGl0IHdpbGwgY29tcGxhaW4gYWJvdXQgb3ZlcndyaXRpbmcKK2VudHJpZXMgbmV3bHkgbWFkZSBkdXJpbmcgdGhlIDxTVFJPTkc+dGljPC9TVFJPTkc+IHJ1biwgYnV0IG5vdCBhYm91dAorb3ZlcndyaXRpbmcgb25lcyB0aGF0IHByZWRhdGUgaXQuCisKKzxIMj48QSBOQU1FPSJ0cmFuc2xhdGlvbiI+U291cmNlLUZvcm0gVHJhbnNsYXRpb248L0E+PC9IMj4KKworQW5vdGhlciB1c2Ugb2YgPFNUUk9ORz50aWM8L1NUUk9ORz4gaXMgdG8gZG8gc291cmNlIHRyYW5zbGF0aW9uIGJldHdlZW4gdmFyaW91cyB0ZXJtY2FwCithbmQgdGVybWluZm8gZm9ybWF0cy4gIFRoZXJlIGFyZSBtb3JlIHZhcmlhbnRzIG91dCB0aGVyZSB0aGFuIHlvdSBtaWdodAordGhpbms7IHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYXJlIGRlc2NyaWJlZCBpbiB0aGUgPFNUUk9ORz5jYXB0b2luZm8oMSk8L1NUUk9ORz4KK21hbnVhbCBwYWdlLiA8UD4KKworVGhlIHRyYW5zbGF0aW9uIG91dHB1dCBjb2RlICg8Q09ERT5kdW1wX2VudHJ5KCk8L0NPREU+IGluCis8Q09ERT5uY3Vyc2VzL2R1bXBfZW50cnkuYzwvQ09ERT4pIGlzIHNoYXJlZCB3aXRoIHRoZSA8U1RST05HPmluZm9jbXAoMSk8L1NUUk9ORz4KK3V0aWxpdHkuICBJdCB0YWtlcyB0aGUgc2FtZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB1c2VkIHRvIGdlbmVyYXRlCit0aGUgYmluYXJ5IGZvcm0gYW5kIGR1bXBzIGl0IHRvIHN0YW5kYXJkIG91dHB1dCBpbiBhIHNwZWNpZmllZAorZm9ybWF0LiA8UD4KKworVGhlIDxDT0RFPmluY2x1ZGUvQ2FwczwvQ09ERT4gZmlsZSBoYXMgYSBoZWFkZXIgY29tbWVudCBkZXNjcmliaW5nIHdheXMgeW91CitjYW4gc3BlY2lmeSBzb3VyY2UgdHJhbnNsYXRpb25zIGZvciBub25zdGFuZGFyZCBjYXBhYmlsaXRpZXMganVzdCBieQorYWx0ZXJpbmcgdGhlIG1hc3RlciB0YWJsZS4gIEl0J3MgcG9zc2libGUgdG8gc2V0IHVwIGNhcGFiaWxpdHkgYWxpYXNpbmcKK29yIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHBsYWluIGlnbm9yZSBhIGdpdmVuIGNhcGFiaWxpdHkgd2l0aG91dCB3cml0aW5nCithbnkgQyBjb2RlIGF0IGFsbC4gPFA+CisKK0ZvciBjaXJjdW1zdGFuY2VzIHdoZXJlIHlvdSBuZWVkIHRvIGRvIGFsZ29yaXRobWljIHRyYW5zbGF0aW9uLCB0aGVyZQorYXJlIGZ1bmN0aW9ucyBpbiA8Q09ERT5wYXJzZV9lbnRyeS5jPC9DT0RFPiBjYWxsZWQgYWZ0ZXIgdGhlIHBhcnNlIG9mIGVhY2gKK2VudHJ5IHRoYXQgYXJlIHNwZWNpZmljYWxseSBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBzdWNoCit0cmFuc2xhdGlvbnMuICBUaGlzLCBmb3IgZXhhbXBsZSwgaXMgd2hlcmUgdGhlIEFJWCA8U1RST05HPmJveDE8L1NUUk9ORz4gY2FwYWJpbGl0eQorZ2V0IHRyYW5zbGF0ZWQgdG8gYW4gPFNUUk9ORz5hY3NjPC9TVFJPTkc+IHN0cmluZy4KKworPEgxPjxBIE5BTUU9InV0aWxzIj5PdGhlciBVdGlsaXRpZXM8L0E+PC9IMT4KKworVGhlIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiB1dGlsaXR5IGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgc2FtZQorZW50cnktZHVtcGluZyBjb2RlIHVzZWQgYnkgPFNUUk9ORz50aWM8L1NUUk9ORz4gZm9yIHNvdXJjZSB0cmFuc2xhdGlvbi4gIFBlcmhhcHMKK3RoZSBvbmUgaW50ZXJlc3RpbmcgYXNwZWN0IG9mIHRoZSBjb2RlIGlzIHRoZSB1c2Ugb2YgYSBwcmVkaWNhdGUKK2Z1bmN0aW9uIHBhc3NlZCBpbiB0byA8Q09ERT5kdW1wX2VudHJ5KCk8L0NPREU+IHRvIGNvbnRyb2wgd2hpY2gKK2NhcGFiaWxpdGllcyBhcmUgZHVtcGVkLiAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gaGFuZGxlIGJvdGgKK3RoZSBvcmRpbmFyeSBEZS1jb21waWxhdGlvbiBjYXNlIGFuZCBlbnRyeSBkaWZmZXJlbmNlIHJlcG9ydGluZy4gPFA+CisKK1RoZSA8U1RST05HPnRwdXQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4gdXRpbGl0aWVzIGp1c3QgZG8gYW4gZW50cnkgbG9hZAorZm9sbG93ZWQgYnkgYSA8Q09ERT50cHV0cygpPC9DT0RFPiBvZiBhIHNlbGVjdGVkIGNhcGFiaWxpdHkuCisKKzxIMT48QSBOQU1FPSJzdHlsZSI+U3R5bGUgVGlwcyBmb3IgRGV2ZWxvcGVyczwvQT48L0gxPgorCitTZWUgdGhlIFRPLURPIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24KK2ZvciBhZGRpdGlvbnMgdGhhdCB3b3VsZCBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsLiA8UD4KKworVGhlIHByZWZpeCA8Q09ERT5fbmNfPC9DT0RFPiBzaG91bGQgYmUgdXNlZCBvbiBsaWJyYXJ5IHB1YmxpYyBmdW5jdGlvbnMgdGhhdCBhcmUKK25vdCBwYXJ0IG9mIHRoZSBjdXJzZXMgQVBJIGluIG9yZGVyIHRvIHByZXZlbnQgcG9sbHV0aW9uIG9mIHRoZQorYXBwbGljYXRpb24gbmFtZXNwYWNlLgorCitJZiB5b3UgaGF2ZSB0byBhZGQgdG8gb3IgbW9kaWZ5IHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIGluIGN1cnNlcy5oLmluLAorcmVhZCBuY3Vyc2VzL01LbGliX2dlbi5zaCBmaXJzdCBzbyB5b3UgY2FuIGF2b2lkIGJyZWFraW5nIFhTSSBjb25mb3JtYW5jZS4KKworUGxlYXNlIGpvaW4gdGhlIG5jdXJzZXMgbWFpbGluZyBsaXN0LiAgU2VlIHRoZSBJTlNUQUxMIGZpbGUgaW4gdGhlCit0b3AgbGV2ZWwgb2YgdGhlIGRpc3RyaWJ1dGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgbGlzdC4gPFA+CisKK0xvb2sgZm9yIHRoZSBzdHJpbmcgPENPREU+RklYTUU8L0NPREU+IGluIHNvdXJjZSBmaWxlcyB0byB0YWcgbWlub3IgYnVncworYW5kIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IGNvdWxkIHVzZSBmaXhpbmcuIDxQPgorCitEb24ndCB0cnkgdG8gYXV0by1kZXRlY3QgT1MgZmVhdHVyZXMgaW4gdGhlIG1haW4gYm9keSBvZiB0aGUgQyBjb2RlLgorVGhhdCdzIHRoZSBqb2Igb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiA8UD4KKworVG8gaG9sZCBkb3duIGNvbXBsZXhpdHksIGRvIG1ha2UgeW91ciBjb2RlIGRhdGEtZHJpdmVuLiAgRXNwZWNpYWxseSwKK2lmIHlvdSBjYW4gZHJpdmUgbG9naWMgZnJvbSBhIHRhYmxlIGZpbHRlcmVkIG91dCBvZgorPENPREU+aW5jbHVkZS9DYXBzPC9DT0RFPiwgZG8gaXQuICBJZiB5b3UgZmluZCB5b3UgbmVlZCB0byBhdWdtZW50IHRoZQorZGF0YSBpbiB0aGF0IGZpbGUgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHByb3BlciB0YWJsZSwgdGhhdCdzIHN0aWxsCitwcmVmZXJhYmxlIHRvIGFkLWhvYyBjb2RlIC0tIHRoYXQncyB3aHkgdGhlIGZpZnRoIGZpZWxkIChmbGFncykgaXMKK3RoZXJlLiA8UD4KKworSGF2ZSBmdW4hCisKKzxIMT48QSBOQU1FPSJwb3J0Ij5Qb3J0aW5nIEhpbnRzPC9BPjwvSDE+CisKK1RoZSBmb2xsb3dpbmcgbm90ZXMgYXJlIGludGVuZGVkIHRvIGJlIGEgZmlyc3Qgc3RlcCB0b3dhcmRzIERPUyBhbmQgTWFjaW50b3NoCitwb3J0cyBvZiB0aGUgbmN1cnNlcyBsaWJyYXJpZXMuIDxQPgorCitUaGUgZm9sbG93aW5nIGxpYnJhcnkgbW9kdWxlcyBhcmUgYHB1cmUgY3Vyc2VzJzsgdGhleSBvcGVyYXRlIG9ubHkgb24KK3RoZSBjdXJzZXMgaW50ZXJuYWwgc3RydWN0dXJlcywgZG8gYWxsIG91dHB1dCB0aHJvdWdoIG90aGVyIGN1cnNlcworY2FsbHMgKG5vdCBpbmNsdWRpbmcgPENPREU+dHB1dHMoKTwvQ09ERT4gYW5kIDxDT0RFPnB1dHAoKTwvQ09ERT4pIGFuZCBkbyBub3QKK2NhbGwgYW55IG90aGVyIFVOSVggcm91dGluZXMgc3VjaCBhcyBzaWduYWwoMikgb3IgdGhlIHN0ZGlvIGxpYnJhcnkuCitUaHVzLCB0aGV5IHNob3VsZCBub3QgbmVlZCB0byBiZSBtb2RpZmllZCBmb3Igc2luZ2xlLXRlcm1pbmFsCitwb3J0cy4gCisKKzxibG9ja3F1b3RlPgorPGNvZGU+CitsaWJfYWRkY2guYworbGliX2FkZHN0ci5jCitsaWJfYmtnZC5jCitsaWJfYm94LmMKK2xpYl9jbGVhci5jCitsaWJfY2xyYm90LmMKK2xpYl9jbHJlb2wuYworbGliX2RlbGNoLmMKK2xpYl9kZWx3aW4uYworbGliX2VyYXNlLmMKK2xpYl9pbmNoc3RyLmMKK2xpYl9pbnNjaC5jCitsaWJfaW5zZGVsLmMKK2xpYl9pbnNzdHIuYworbGliX2tleW5hbWUuYworbGliX21vdmUuYworbGliX212d2luLmMKK2xpYl9uZXd3aW4uYworbGliX292ZXJsYXkuYworbGliX3BhZC5jCitsaWJfcHJpbnR3LmMKK2xpYl9yZWZyZXNoLmMKK2xpYl9zY2Fudy5jCitsaWJfc2Nyb2xsLmMKK2xpYl9zY3JyZWcuYworbGliX3NldF90ZXJtLmMKK2xpYl90b3VjaC5jCitsaWJfdHBhcm0uYworbGliX3RwdXRzLmMKK2xpYl91bmN0cmwuYworbGliX3dpbmRvdy5jCitwYW5lbC5jCis8L2NvZGU+Cis8L2Jsb2NrcXVvdGU+Cis8UD4KKworVGhpcyBtb2R1bGUgaXMgcHVyZSBjdXJzZXMsIGJ1dCBjYWxscyBvdXRzdHIoKToKKworPGJsb2NrcXVvdGU+Cis8Y29kZT4KK2xpYl9nZXRzdHIuYworPC9jb2RlPgorPC9ibG9ja3F1b3RlPgorPFA+CisKK1RoZXNlIG1vZHVsZXMgYXJlIHB1cmUgY3Vyc2VzLCBleGNlcHQgdGhhdCB0aGV5IHVzZSA8Q09ERT50cHV0cygpPC9DT0RFPgorYW5kIDxDT0RFPnB1dHAoKTwvQ09ERT46CisKKzxibG9ja3F1b3RlPgorPGNvZGU+CitsaWJfYmVlcC5jCitsaWJfY29sb3IuYworbGliX2VuZHdpbi5jCitsaWJfb3B0aW9ucy5jCitsaWJfc2xrLmMKK2xpYl92aWRhdHRyLmMKKzwvY29kZT4KKzwvYmxvY2txdW90ZT4KKzxQPgorCitUaGlzIG1vZHVsZXMgYXNzaXN0IGluIFBPU0lYIGVtdWxhdGlvbiBvbiBub24tUE9TSVggc3lzdGVtczoKKzxETD4KKzxEVD4gc2lnYWN0aW9uLmMKKzxERD4gc2lnbmFsIGNhbGxzCis8L0RMPgorCitUaGUgZm9sbG93aW5nIHNvdXJjZSBmaWxlcyB3aWxsIG5vdCBiZSBuZWVkZWQgZm9yIGEKK3NpbmdsZS10ZXJtaW5hbC10eXBlIHBvcnQuCisKKzxibG9ja3F1b3RlPgorPGNvZGU+CithbGxvY19lbnRyeS5jCitjYXB0b2luZm8uYworY2xlYXIuYworY29tcF9jYXB0YWIuYworY29tcF9lcnJvci5jCitjb21wX2hhc2guYworY29tcF9tYWluLmMKK2NvbXBfcGFyc2UuYworY29tcF9zY2FuLmMKK2R1bXBfZW50cnkuYworaW5mb2NtcC5jCitwYXJzZV9lbnRyeS5jCityZWFkX2VudHJ5LmMKK3RwdXQuYword3JpdGVfZW50cnkuYworPC9jb2RlPgorPC9ibG9ja3F1b3RlPgorPFA+CisKK1RoZSBmb2xsb3dpbmcgbW9kdWxlcyB3aWxsIHVzZSBvcGVuKCkvcmVhZCgpL3dyaXRlKCkvY2xvc2UoKS9sc2VlaygpIG9uIGZpbGVzLAorYnV0IG5vIG90aGVyIE9TIGNhbGxzLgorCis8REw+Cis8RFQ+bGliX3NjcmVlbi5jCis8REQ+dXNlZCB0byByZWFkL3dyaXRlIHNjcmVlbiBkdW1wcworPERUPmxpYl90cmFjZS5jCis8REQ+dXNlZCB0byB3cml0ZSB0cmFjZSBkYXRhIHRvIHRoZSBsb2dmaWxlCis8L0RMPgorCitNb2R1bGVzIHRoYXQgd291bGQgaGF2ZSB0byBiZSBtb2RpZmllZCBmb3IgYSBwb3J0IHN0YXJ0IGhlcmU6IDxQPgorCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGBwdXJlIGN1cnNlcycgYnV0IGNvbnRhaW4gYXNzdW1wdGlvbnMgaW5hcHByb3ByaWF0ZQorZm9yIGEgbWVtb3J5LW1hcHBlZCBwb3J0LgorCis8ZGw+Cis8ZHQ+bGliX2xvbmduYW1lLmM8ZGQ+YXNzdW1lcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGVybWluYWxzCis8ZHQ+bGliX2Fjcy5jPGRkPmFzc3VtZXMgYWNzX21hcCBhcyBhIGRvdWJsZSBpbmRpcmVjdGlvbgorPGR0PmxpYl9tdmN1ci5jPGRkPmFzc3VtZXMgY3Vyc29yIG1vdmVzIGhhdmUgdmFyaWFibGUgY29zdAorPGR0PmxpYl90ZXJtY2FwLmM8ZGQ+YXNzdW1lcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGVybWluYWxzCis8ZHQ+bGliX3RpLmM8ZGQ+YXNzdW1lcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGVybWluYWxzCis8L2RsPgorCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgdXNlIFVOSVgtc3BlY2lmaWMgY2FsbHM6CisKKzxkbD4KKzxkdD5saWJfZG91cGRhdGUuYzxkZD5pbnB1dCBjaGVja2luZworPGR0PmxpYl9nZXRjaC5jPGRkPnJlYWQoKQorPGR0PmxpYl9pbml0c2NyLmM8ZGQ+Z2V0ZW52KCkKKzxkdD5saWJfbmV3dGVybS5jCis8ZHQ+bGliX2JhdWRyYXRlLmMKKzxkdD5saWJfa2VybmVsLmM8ZGQ+dmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGFuZCBzeXN0ZW0gY2FsbHMKKzxkdD5saWJfcmF3LmM8ZGQ+dmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGNhbGxzCis8ZHQ+bGliX3NldHVwLmM8ZGQ+dmFyaW91cyB0dHktbWFuaXB1bGF0aW9uIGNhbGxzCis8ZHQ+bGliX3Jlc3RhcnQuYzxkZD52YXJpb3VzIHR0eS1tYW5pcHVsYXRpb24gY2FsbHMKKzxkdD5saWJfdHN0cC5jPGRkPnNpZ25hbC1tYW5pcHVsYXRpb24gY2FsbHMKKzxkdD5saWJfdHdhaXQuYzxkZD5nZXR0aW1lb2ZkYXkoKSwgc2VsZWN0KCkuCis8L2RsPgorCis8SFI+Cis8QUREUkVTUz5FcmljIFMuIFJheW1vbmQgJmx0O2VzckBzbmFyay50aHlyc3VzLmNvbSZndDs8L0FERFJFU1M+CisoTm90ZTogVGhpcyBpcyA8RU0+bm90PC9FTT4gdGhlIDxBIEhSRUY9IiNidWd0cmFjayI+YnVnIGFkZHJlc3M8L0E+ISkKKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL2luZGV4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMmE5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+Cis8IS0tCisgICRJZDogaW5kZXguaHRtbCx2IDEuMiAyMDA2LzA0LzIyIDIyOjI5OjEyIHRvbSBFeHAgJAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPldlbGNvbWUgdG8gbmN1cnNlczwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8L0hFQUQ+Cis8Qk9EWT4KKworPEgxPldlbGNvbWUgdG8gbmN1cnNlczwvSDE+CitGcm9tIHRoaXMgaW5kZXggcGFnZSB5b3UgaGF2ZSBhY2Nlc3MgdG8gdGhlc2UgZnVydGhlciBkb2N1bWVudHMKKzxVTD4KKzxMST5UaGUgPGEgaHJlZj0iYW5ub3VuY2UuaHRtbCI+QW5ub3VuY2VtZW50PC9hPiBvZiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIG5jdXJzZXMuPC9MST4KKzxMST5BbiA8YSBocmVmPSJuY3Vyc2VzLWludHJvLmh0bWwiPkludHJvZHVjdGlvbjwvYT4gaW50byAobiljdXJzZXMgcHJvZ3JhbW1pbmcuPC9MST4KKzxMST5BIDxhIGhyZWY9ImhhY2tndWlkZS5odG1sIj5oYWNrZXJzIGd1aWRlPC9hPiB0byBuY3Vyc2VzLjwvTEk+Cis8TEk+QSBkZXNjcmlwdGlvbiBvZiB0aGUgPGEgaHJlZj0iQWRhOTUuaHRtbCI+QWRhOTUgYmluZGluZzwvYT4gdG8gbmN1cnNlcy48L0xJPgorPC9VTD48UD4KK1dlIGFsc28gaGF2ZSBIVE1MIHZlcnNpb25zIG9mIGFsbCB0aGUgbmN1cnNlcyA8YSBocmVmPSJtYW4iPm1hbnBhZ2VzPC9hPi4KKzwvQk9EWT4KKzwvSFRNTD4KKzwhLS0KKyMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6aHRtbAorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyBmaWxsLWNvbHVtbjo3MAorIyBFbmQ6CistLT4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jYXB0b2luZm8uMW0uaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jYXB0b2luZm8uMW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWIzMTUwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2NhcHRvaW5mby4xbS5odG1sCkBAIC0wLDAgKzEsMjI2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjYXB0b2luZm8uMW0sdiAxLjIyIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y2FwdG9pbmZvIDFtPC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y2FwdG9pbmZvIDFtPC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjYXB0b2luZm8uMW0uaHRtbCI+Y2FwdG9pbmZvKDFtKTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImNhcHRvaW5mby4xbS5odG1sIj5jYXB0b2luZm8oMW0pPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2FwdG9pbmZvPC9TVFJPTkc+ICAtIGNvbnZlcnQgYSA8RU0+dGVybWNhcDwvRU0+IGRlc2NyaXB0aW9uIGludG8gYSA8RU0+dGVybWluZm88L0VNPgorICAgICAgIGRlc2NyaXB0aW9uCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5jYXB0b2luZm88L1NUUk9ORz4gWzxTVFJPTkc+LXY8L1NUUk9ORz48RU0+bjwvRU0+IDxFTT53aWR0aDwvRU0+XSAgWzxTVFJPTkc+LVY8L1NUUk9ORz5dIFs8U1RST05HPi0xPC9TVFJPTkc+XSBbPFNUUk9ORz4tdzwvU1RST05HPiA8RU0+d2lkdGg8L0VNPl0gPEVNPmZpbGU8L0VNPiAuIC4gLgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2FwdG9pbmZvPC9TVFJPTkc+IGxvb2tzIGluIDxFTT5maWxlPC9FTT4gIGZvciAgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+ICBkZXNjcmlwdGlvbnMuICAgRm9yCisgICAgICAgZWFjaCAgb25lICBmb3VuZCwgIGFuICBlcXVpdmFsZW50ICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGRlc2NyaXB0aW9uIGlzCisgICAgICAgd3JpdHRlbiB0byBzdGFuZGFyZCBvdXRwdXQuICBUZXJtY2FwIDxTVFJPTkc+dGM8L1NUUk9ORz4gIGNhcGFiaWxpdGllcyAgYXJlCisgICAgICAgdHJhbnNsYXRlZCBkaXJlY3RseSB0byB0ZXJtaW5mbyA8U1RST05HPnVzZTwvU1RST05HPiBjYXBhYmlsaXRpZXMuCisKKyAgICAgICBJZiBubyA8RU0+ZmlsZTwvRU0+IGlzIGdpdmVuLCB0aGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8U1RST05HPlRFUk1DQVA8L1NUUk9ORz4KKyAgICAgICBpcyB1c2VkIGZvciB0aGUgZmlsZW5hbWUgb3IgZW50cnkuICBJZiA8U1RST05HPlRFUk1DQVA8L1NUUk9ORz4gaXMgIGEgIGZ1bGwKKyAgICAgICBwYXRobmFtZSB0byBhIGZpbGUsIG9ubHkgdGhlIHRlcm1pbmFsIHdob3NlIG5hbWUgaXMgc3BlY2ktCisgICAgICAgZmllZCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+ICBpcyAgZXh0cmFjdGVkICBmcm9tCisgICAgICAgdGhhdCAgZmlsZS4gICBJZiAgdGhlICBlbnZpcm9ubWVudCB2YXJpYWJsZSA8U1RST05HPlRFUk1DQVA8L1NUUk9ORz4gaXMgbm90CisgICAgICAgc2V0LCB0aGVuIHRoZSBmaWxlIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mbzwvU1RST05HPiBpcyByZWFkLgorCisgICAgICAgPFNUUk9ORz4tdjwvU1RST05HPiAgIHByaW50IG91dCB0cmFjaW5nIGluZm9ybWF0aW9uIG9uICBzdGFuZGFyZCAgZXJyb3IgIGFzCisgICAgICAgICAgICB0aGUgcHJvZ3JhbSBydW5zLgorCisgICAgICAgPFNUUk9ORz4tVjwvU1RST05HPiAgIHByaW50ICBvdXQgdGhlIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gaW4gdXNlIG9uIHN0YW4tCisgICAgICAgICAgICBkYXJkIGVycm9yIGFuZCBleGl0LgorCisgICAgICAgPFNUUk9ORz4tMTwvU1RST05HPiAgIGNhdXNlIHRoZSBmaWVsZHMgdG8gcHJpbnQgb3V0IG9uZSB0byBhIGxpbmUuICAgT3RoZXItCisgICAgICAgICAgICB3aXNlLCB0aGUgZmllbGRzIHdpbGwgYmUgcHJpbnRlZCBzZXZlcmFsIHRvIGEgbGluZSB0bworICAgICAgICAgICAgYSBtYXhpbXVtIHdpZHRoIG9mIDYwIGNoYXJhY3RlcnMuCisKKyAgICAgICA8U1RST05HPi13PC9TVFJPTkc+ICAgY2hhbmdlIHRoZSBvdXRwdXQgdG8gPEVNPndpZHRoPC9FTT4gY2hhcmFjdGVycy4KKworCis8L1BSRT4KKzxIMj5GSUxFUzwvSDI+PFBSRT4KKyAgICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvIENvbXBpbGVkICAgICB0ZXJtaW5hbCAgICAgIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZS4KKworCis8L1BSRT4KKzxIMj5UUkFOU0xBVElPTlMgRlJPTSBOT05TVEFOREFSRCBDQVBBQklMSVRJRVM8L0gyPjxQUkU+CisgICAgICAgU29tZSAgb2Jzb2xldGUgbm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHdpbGwgYXV0b21hdGljYWxseQorICAgICAgIGJlIHRyYW5zbGF0ZWQgaW50byAgc3RhbmRhcmQgIChTVnI0L1hTSSAgQ3Vyc2VzKSAgdGVybWluZm8KKyAgICAgICBjYXBhYmlsaXRpZXMgIGJ5ICA8U1RST05HPmNhcHRvaW5mbzwvU1RST05HPi4gICBXaGVuZXZlciBvbmUgb2YgdGhlc2UgYXV0by0KKyAgICAgICBtYXRpYyB0cmFuc2xhdGlvbnMgaXMgZG9uZSwgIHRoZSAgcHJvZ3JhbSAgd2lsbCAgaXNzdWUgIGFuCisgICAgICAgbm90aWZpY2F0aW9uIHRvIHN0ZGVyciwgaW52aXRpbmcgdGhlIHVzZXIgdG8gY2hlY2sgdGhhdCBpdAorICAgICAgIGhhcyBub3QgbWlzdGFrZW5seSB0cmFuc2xhdGVkICBhICBjb21wbGV0ZWx5ICB1bmtub3duICBhbmQKKyAgICAgICByYW5kb20gY2FwYWJpbGl0eSBhbmQvb3Igc3ludGF4IGVycm9yLgorCisKKyAgICAgICBOb25zdGQgICBTdGQgICAgRnJvbSAgICAgICAgICAgVGVybWluZm8KKyAgICAgICAgbmFtZSAgICBuYW1lICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5CisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCTyAgICAgICBtciAgICAgQVQmYW1wO1QgICAgZW50ZXJfcmV2ZXJzZV9tb2RlCisgICAgICAgQ0kgICAgICAgdmkgICAgIEFUJmFtcDtUICAgIGN1cnNvcl9pbnZpc2libGUKKyAgICAgICBDViAgICAgICB2ZSAgICAgQVQmYW1wO1QgICAgY3Vyc29yX25vcm1hbAorICAgICAgIERTICAgICAgIG1oICAgICBBVCZhbXA7VCAgICBlbnRlcl9kaW1fbW9kZQorICAgICAgIEVFICAgICAgIG1lICAgICBBVCZhbXA7VCAgICBleGl0X2F0dHJpYnV0ZV9tb2RlCisgICAgICAgRkUgICAgICAgTEYgICAgIEFUJmFtcDtUICAgIGxhYmVsX29uCisgICAgICAgRkwgICAgICAgTE8gICAgIEFUJmFtcDtUICAgIGxhYmVsX29mZgorICAgICAgIFhTICAgICAgIG1rICAgICBBVCZhbXA7VCAgICBlbnRlcl9zZWN1cmVfbW9kZQorICAgICAgIEVOICAgICAgIEA3ICAgICBYRU5JWCAgIGtleV9lbmQKKyAgICAgICBHRSAgICAgICBhZSAgICAgWEVOSVggICBleGl0X2FsdF9jaGFyc2V0X21vZGUKKyAgICAgICBHUyAgICAgICBhcyAgICAgWEVOSVggICBlbnRlcl9hbHRfY2hhcnNldF9tb2RlCisgICAgICAgSE0gICAgICAga2ggICAgIFhFTklYICAga2V5X2hvbWUKKworICAgICAgIExEICAgICAgIGtMICAgICBYRU5JWCAgIGtleV9kbAorICAgICAgIFBEICAgICAgIGtOICAgICBYRU5JWCAgIGtleV9ucGFnZQorICAgICAgIFBOICAgICAgIHBvICAgICBYRU5JWCAgIHBydHJfb2ZmCisgICAgICAgUFMgICAgICAgcGYgICAgIFhFTklYICAgcHJ0cl9vbgorICAgICAgIFBVICAgICAgIGtQICAgICBYRU5JWCAgIGtleV9wcGFnZQorICAgICAgIFJUICAgICAgIEA4ICAgICBYRU5JWCAgIGtlbnQKKyAgICAgICBVUCAgICAgICBrdSAgICAgWEVOSVggICBrY3V1MQorICAgICAgIEtBICAgICAgIGs7ICAgICBUZWsgICAgIGtleV9mMTAKKyAgICAgICBLQiAgICAgICBGMSAgICAgVGVrICAgICBrZXlfZjExCisgICAgICAgS0MgICAgICAgRjIgICAgIFRlayAgICAga2V5X2YxMgorICAgICAgIEtEICAgICAgIEYzICAgICBUZWsgICAgIGtleV9mMTMKKyAgICAgICBLRSAgICAgICBGNCAgICAgVGVrICAgICBrZXlfZjE0CisgICAgICAgS0YgICAgICAgRjUgICAgIFRlayAgICAga2V5X2YxNQorICAgICAgIEJDICAgICAgIFNiICAgICBUZWsgICAgIHNldF9iYWNrZ3JvdW5kCisgICAgICAgRkMgICAgICAgU2YgICAgIFRlayAgICAgc2V0X2ZvcmVncm91bmQKKyAgICAgICBIUyAgICAgICBtaCAgICAgSXJpcyAgICBlbnRlcl9kaW1fbW9kZQorCisgICAgICAgWEVOSVggIHRlcm1jYXAgIGFsc28gdXNlZCB0byBoYXZlIGEgc2V0IG9mIGV4dGVuc2lvbiBjYXBhLQorICAgICAgIGJpbGl0aWVzIGZvciBmb3JtcyBkcmF3aW5nLCBkZXNpZ25lZCB0byB0YWtlIGFkdmFudGFnZSAgb2YKKyAgICAgICB0aGUgSUJNIFBDIGhpZ2gtaGFsZiBncmFwaGljcy4gIFRoZXkgd2VyZSBhcyBmb2xsb3dzOgorCisKKyAgICAgICBDYXAgICAgICAgICAgR3JhcGhpYworICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgRzIgICAgdXBwZXIgbGVmdAorICAgICAgIEczICAgIGxvd2VyIGxlZnQKKyAgICAgICBHMSAgICB1cHBlciByaWdodAorICAgICAgIEc0ICAgIGxvd2VyIHJpZ2h0CisgICAgICAgR1IgICAgcG9pbnRpbmcgcmlnaHQKKyAgICAgICBHTCAgICBwb2ludGluZyBsZWZ0CisgICAgICAgR1UgICAgcG9pbnRpbmcgdXAKKyAgICAgICBHRCAgICBwb2ludGluZyBkb3duCisgICAgICAgR0ggICAgaG9yaXpvbnRhbCBsaW5lCisgICAgICAgR1YgICAgdmVydGljYWwgbGluZQorICAgICAgIEdDICAgIGludGVyc2VjdGlvbgorICAgICAgIEc2ICAgIHVwcGVyIGxlZnQKKyAgICAgICBHNyAgICBsb3dlciBsZWZ0CisgICAgICAgRzUgICAgdXBwZXIgcmlnaHQKKyAgICAgICBHOCAgICBsb3dlciByaWdodAorICAgICAgIEdyICAgIHRlZSBwb2ludGluZyByaWdodAorICAgICAgIEdyICAgIHRlZSBwb2ludGluZyBsZWZ0CisgICAgICAgR3UgICAgdGVlIHBvaW50aW5nIHVwCisgICAgICAgR2QgICAgdGVlIHBvaW50aW5nIGRvd24KKyAgICAgICBHaCAgICBob3Jpem9udGFsIGxpbmUKKyAgICAgICBHdiAgICB2ZXJ0aWNhbCBsaW5lCisgICAgICAgR2MgICAgaW50ZXJzZWN0aW9uCisgICAgICAgR0cgICAgYWNzIG1hZ2ljIGNvb2tpZSBjb3VudAorCisgICAgICAgSWYgIHRoZSAgc2luZ2xlLWxpbmUgIGNhcGFiaWxpdGllcyBvY2N1ciBpbiBhbiBlbnRyeSwgdGhleQorICAgICAgIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb21wb3NlZCBpbnRvIGFuIDxFTT5hY3NjPC9FTT4gIHN0cmluZy4gICBUaGUKKyAgICAgICBkb3VibGUtbGluZSBjYXBhYmlsaXRpZXMgYW5kIDxTVFJPTkc+R0c8L1NUUk9ORz4gYXJlIGRpc2NhcmRlZCB3aXRoIGEgd2Fybi0KKyAgICAgICBpbmcgbWVzc2FnZS4KKworICAgICAgIElCTSdzIEFJWCBoYXMgYSB0ZXJtaW5mbyBmYWNpbGl0eSBkZXNjZW5kZWQgZnJvbSBTVnIxIHRlci0KKyAgICAgICBtaW5mbyBidXQgaW5jb21wYXRpYmxlIHdpdGggdGhlIFNWcjQgZm9ybWF0LiBUaGUgZm9sbG93aW5nCisgICAgICAgQUlYIGV4dGVuc2lvbnMgYXJlIGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZDoKKworICAgICAgICBJQk0gICAgWFNJCisgICAgICAgLS0tLS0tLS0tLS0tLQorICAgICAgIGtzZWwgICAga3NsdAorICAgICAgIGtidGFiICAga2NidAorICAgICAgIGZvbnQwICAgczBkcworICAgICAgIGZvbnQxICAgczFkcworICAgICAgIGZvbnQyICAgczJkcworICAgICAgIGZvbnQzICAgczNkcworCisgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgQUlYIDxFTT5ib3gxPC9FTT4gY2FwYWJpbGl0eSAgd2lsbCAgYmUgIGF1dG9tYXRpLQorICAgICAgIGNhbGx5IHRyYW5zbGF0ZWQgdG8gYW4gPEVNPmFjc2M8L0VNPiBzdHJpbmcuCisKKyAgICAgICBIZXdsZXR0LVBhY2thcmQncyAgdGVybWluZm8gIGxpYnJhcnkgc3VwcG9ydHMgdHdvIG5vbnN0YW4tCisgICAgICAgZGFyZCB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMgPEVNPm1lbWw8L0VNPiAgKG1lbW9yeSAgbG9jaykgIGFuZCAgPEVNPm1lbXU8L0VNPgorICAgICAgIChtZW1vcnkgIHVubG9jaykuICAgVGhlc2Ugd2lsbCBiZSBkaXNjYXJkZWQgd2l0aCBhIHdhcm5pbmcKKyAgICAgICBtZXNzYWdlLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoaXMgdXRpbGl0eSBpcyBhY3R1YWxseSBhIGxpbmsgdG8gPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4sIHJ1bm5pbmcgaW4gIDxFTT4tSTwvRU0+CisgICAgICAgbW9kZS4gIFlvdSBjYW4gdXNlIG90aGVyIDxTVFJPTkc+dGljPC9TVFJPTkc+IG9wdGlvbnMgc3VjaCBhcyA8U1RST05HPi1mPC9TVFJPTkc+IGFuZCAgPFNUUk9ORz4teDwvU1RST05HPi4KKworICAgICAgIFRoZSAgdHJhY2Ugb3B0aW9uIGlzIG5vdCBpZGVudGljYWwgdG8gU1ZyNCdzLiAgVW5kZXIgU1ZyNCwKKyAgICAgICBpbnN0ZWFkIG9mIGZvbGxvd2luZyB0aGUgPFNUUk9ORz4tdjwvU1RST05HPiB3aXRoICBhICB0cmFjZSAgbGV2ZWwgIG4sICB5b3UKKyAgICAgICByZXBlYXQgaXQgbiB0aW1lcy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImluZm9jbXAuMW0uaHRtbCI+aW5mb2NtcCgxbSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKworICAgICAgIFRoaXMgZGVzY3JpYmVzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB2ZXJzaW9uIDUuNiAocGF0Y2ggMjAwODEwMTEpLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBFcmljIFMuIFJheW1vbmQgJmx0O2VzckBzbmFyay50aHlyc3VzLmNvbSZndDsKKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImNhcHRvaW5mby4xbS5odG1sIj5jYXB0b2luZm8oMW0pPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY2xlYXIuMS5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2NsZWFyLjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjY2MWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2NsZWFyLjEuaHRtbApAQCAtMCwwICsxLDg0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGNsZWFyLjEsdiAxLjYgMjAwNi8xMi8yNCAxODowNzo1MyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jbGVhciAxPC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y2xlYXIgMTwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY2xlYXIuMS5odG1sIj5jbGVhcigxKTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjbGVhci4xLmh0bWwiPmNsZWFyKDEpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4gLSBjbGVhciB0aGUgdGVybWluYWwgc2NyZWVuCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5jbGVhcjwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4gY2xlYXJzIHlvdXIgc2NyZWVuIGlmIHRoaXMgaXMgcG9zc2libGUuICBJdCBsb29rcyBpbgorICAgICAgIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIHRoZW4gaW4gdGhlIDxTVFJPTkc+dGVyLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+bWluZm88L1NUUk9ORz4gZGF0YWJhc2UgdG8gZmlndXJlIG91dCBob3cgdG8gY2xlYXIgdGhlIHNjcmVlbi4KKworICAgICAgIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4gIGlnbm9yZXMgIGFueSAgY29tbWFuZC1saW5lICBwYXJhbWV0ZXJzICB0aGF0IG1heSBiZQorICAgICAgIHByZXNlbnQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0cHV0LjEuaHRtbCI+dHB1dCgxKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKworICAgICAgIFRoaXMgZGVzY3JpYmVzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB2ZXJzaW9uIDUuNiAocGF0Y2ggMjAwODEwMTEpLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjbGVhci4xLmh0bWwiPmNsZWFyKDEpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19hZGRfd2NoLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19hZGRfd2NoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3Yzg5NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZF93Y2guM3guaHRtbApAQCAtMCwwICsxLDE0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2FkZF93Y2guM3gsdiAxLjYgMjAwNi8xMi8yNCAxNToyMjoyMiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2FkZF93Y2ggM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2FkZF93Y2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2NoLjN4Lmh0bWwiPmN1cnNfYWRkX3djaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5hZGRfd2NoPC9TVFJPTkc+LCAgIDxTVFJPTkc+d2FkZF93Y2g8L1NUUk9ORz4sICA8U1RST05HPm12YWRkX3djaDwvU1RST05HPiwgIDxTVFJPTkc+bXZ3YWRkX3djaDwvU1RST05HPiwgIDxTVFJPTkc+ZWNob193Y2hhcjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPndlY2hvX3djaGFyPC9TVFJPTkc+IC0gYWRkIGEgY29tcGxleCBjaGFyYWN0ZXIgYW5kIHJlbmRpdGlvbiAgdG8gIGEKKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3csIHRoZW4gYWR2YW5jZSB0aGUgY3Vyc29yCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkX3djaCg8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRfd2NoKDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkX3djaCg8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiA8U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIDxTVFJPTkc+bXZ3YWRkX3djaCg8L1NUUk9ORz4gIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4gPFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZWNob193Y2hhcig8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndlY2hvX3djaGFyKDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+IDxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5hZGRfd2NoPC9TVFJPTkc+LCA8U1RST05HPndhZGRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12YWRkX3djaDwvU1RST05HPiwgYW5kIDxTVFJPTkc+bXZ3YWRkX3djaDwvU1RST05HPiBmdW5jdGlvbnMKKyAgICAgICBwdXQgdGhlIGNvbXBsZXggY2hhcmFjdGVyIDxFTT53Y2g8L0VNPiBpbnRvIHRoZSBnaXZlbiB3aW5kb3cgYXQgaXRzCisgICAgICAgY3VycmVudCBwb3NpdGlvbiwgd2hpY2ggaXMgdGhlbiBhZHZhbmNlZC4gIFRoZXNlIGZ1bmN0aW9ucworICAgICAgIHBlcmZvcm0gIHdyYXBwaW5nIGFuZCBzcGVjaWFsLWNoYXJhY3RlciBwcm9jZXNzaW5nIGFzIGZvbC0KKyAgICAgICBsb3dzOgorCisgICAgICAgLSAgICBJZiA8RU0+d2NoPC9FTT4gcmVmZXJzIHRvIGEgc3BhY2luZyBjaGFyYWN0ZXIsIHRoZW4gYW55IHByZXZpLQorICAgICAgICAgICAgb3VzICBjaGFyYWN0ZXIgIGF0ICB0aGF0ICBsb2NhdGlvbiBpcyByZW1vdmVkLiAgQSBuZXcKKyAgICAgICAgICAgIGNoYXJhY3RlciBzcGVjaWZpZWQgYnkgPEVNPndjaDwvRU0+IGlzIHBsYWNlZCBhdCB0aGF0IGxvY2F0aW9uCisgICAgICAgICAgICB3aXRoICByZW5kaXRpb24gIHNwZWNpZmllZCAgYnkgIDxFTT53Y2g8L0VNPi4gIFRoZSBjdXJzb3IgdGhlbgorICAgICAgICAgICAgYWR2YW5jZXMgdG8gdGhlIG5leHQgc3BhY2luZyBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbi4KKworICAgICAgIC0gICAgSWYgIDxFTT53Y2g8L0VNPiByZWZlcnMgdG8gYSBub24tc3BhY2luZyBjaGFyYWN0ZXIsIGFsbCBwcmV2aS0KKyAgICAgICAgICAgIG91cyBjaGFyYWN0ZXJzIGF0IHRoYXQgbG9jYXRpb24gYXJlICBwcmVzZXJ2ZWQuICAgVGhlCisgICAgICAgICAgICBub24tc3BhY2luZyAgY2hhcmFjdGVycyBvZiA8RU0+d2NoPC9FTT4gYXJlIGFkZGVkIHRvIHRoZSBzcGFjLQorICAgICAgICAgICAgaW5nIGNvbXBsZXggY2hhcmFjdGVyLCBhbmQgdGhlIHJlbmRpdGlvbiBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgIDxFTT53Y2g8L0VNPiBpcyBpZ25vcmVkLgorCisgICAgICAgLSAgICBJZiAgdGhlICBjaGFyYWN0ZXIgIHBhcnQgIG9mICA8RU0+d2NoPC9FTT4gIGlzIGEgdGFiLCBuZXdsaW5lLAorICAgICAgICAgICAgYmFja3NwYWNlIG9yIG90aGVyIGNvbnRyb2wgY2hhcmFjdGVyLCB0aGUgIHdpbmRvdyAgaXMKKyAgICAgICAgICAgIHVwZGF0ZWQgYW5kIHRoZSBjdXJzb3IgbW92ZXMgYXMgaWYgPFNUUk9ORz5hZGRjaDwvU1RST05HPiB3ZXJlIGNhbGxlZC4KKworICAgICAgIFRoZSA8U1RST05HPmVjaG9fd2NoYXI8L1NUUk9ORz4gZnVuY3Rpb24gaXMgZnVuY3Rpb25hbGx5ICBlcXVpdmFsZW50ICB0byAgYQorICAgICAgIGNhbGwgdG8gPFNUUk9ORz5hZGRfd2NoPC9TVFJPTkc+IGZvbGxvd2VkIGJ5IGEgY2FsbCB0byA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4uICBTaW1pbGFybHksCisgICAgICAgdGhlIDxTVFJPTkc+d2VjaG9fd2NoYXI8L1NUUk9ORz4gaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gIGEgIGNhbGwgIHRvCisgICAgICAgPFNUUk9ORz53YWRkX3djaDwvU1RST05HPiAgZm9sbG93ZWQgIGJ5ICBhIGNhbGwgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPi4gIFRoZSBrbm93bGVkZ2UKKyAgICAgICB0aGF0IG9ubHkgYSBzaW5nbGUgY2hhcmFjdGVyIGlzIGJlaW5nIG91dHB1dCBpcyB0YWtlbiBpbnRvCisgICAgICAgY29uc2lkZXJhdGlvbiBhbmQsIGZvciBub24tY29udHJvbCBjaGFyYWN0ZXJzLCBhIGNvbnNpZGVyLQorICAgICAgIGFibGUgcGVyZm9ybWFuY2UgZ2FpbiBtaWdodCBiZSBzZWVuIGJ5ICB1c2luZyAgdGhlICAqPFNUUk9ORz5lY2hvPC9TVFJPTkc+KgorICAgICAgIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZWlyIGVxdWl2YWxlbnRzLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24KKyAgICAgICBzdWNjZXNzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmFkZF93Y2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZhZGRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZF93Y2g8L1NUUk9ORz4sICBhbmQgIDxTVFJPTkc+ZWNob193Y2hhcjwvU1RST05HPgorICAgICAgIG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgQWxsICB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuLQorICAgICAgIGRhcmQsIElzc3VlIDQuICBUaGUgZGVmYXVsdHMgc3BlY2lmaWVkICBmb3IgIGZvcm1zLWRyYXdpbmcKKyAgICAgICBjaGFyYWN0ZXJzIGFwcGx5IGluIHRoZSBQT1NJWCBsb2NhbGUuCisKKyAgICAgICBYU0kgIGRvY3VtZW50cyAgY29uc3RhbnRzICBiZWdpbm5pbmcgIHdpdGggPFNUUk9ORz5XQUNTXzwvU1RST05HPiB3aGljaCBhcmUKKyAgICAgICB1c2VkIGZvciBsaW5lLWRyYXdpbmcuICBUaG9zZSAgYXJlICBub3QgIGN1cnJlbnRseSAgaW1wbGUtCisgICAgICAgbWVudGVkIGluIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJwdXR3Yy4zLmh0bWwiPnB1dHdjKDMpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2NoLjN4Lmh0bWwiPmN1cnNfYWRkX3djaCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZF93Y2hzdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZF93Y2hzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWQ5M2IxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYWRkX3djaHN0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTI3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYWRkX3djaHN0ci4zeCx2IDEuNiAyMDA1LzAxLzAyIDAxOjI4OjQ5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYWRkX3djaHN0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYWRkX3djaHN0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRfd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmFkZF93Y2hzdHI8L1NUUk9ORz4sICAgIDxTVFJPTkc+YWRkX3djaG5zdHI8L1NUUk9ORz4sICAgPFNUUk9ORz53YWRkX3djaHN0cjwvU1RST05HPiwgICA8U1RST05HPndhZGRfd2NobnN0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12YWRkX3djaHN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmFkZF93Y2huc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2FkZF93Y2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3YWRkX3djaG5zdHI8L1NUUk9ORz4KKyAgICAgICAtIGFkZCBhbiBhcnJheSBvZiBjb21wbGV4IGNoYXJhY3RlcnMgKGFuZCBhdHRyaWJ1dGVzKSB0byBhCisgICAgICAgY3Vyc2VzIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFkZF93Y2hzdHIoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFkZF93Y2huc3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRfd2Noc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4gPEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRfd2NobnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+IDxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkX3djaHN0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkX3djaG5zdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2FkZF93Y2hzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3YWRkX3djaG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgY29weSB0aGUgYXJyYXkgb2YgY29tcGxleCBjaGFyYWN0ZXJzIDxFTT53Y2hzdHI8L0VNPgorICAgICAgIGludG8gIHRoZSAgd2luZG93IGltYWdlIHN0cnVjdHVyZSBhdCBhbmQgYWZ0ZXIgdGhlIGN1cnJlbnQKKyAgICAgICBjdXJzb3IgcG9zaXRpb24uICBUaGUgZm91ciByb3V0aW5lcyB3aXRoICA8RU0+bjwvRU0+ICBhcyAgdGhlICBsYXN0CisgICAgICAgYXJndW1lbnQgIGNvcHkgIGF0ICBtb3N0IDxFTT5uPC9FTT4gZWxlbWVudHMsIGJ1dCBubyBtb3JlIHRoYW4gd2lsbAorICAgICAgIGZpdCBvbiB0aGUgbGluZS4gIElmIDxTVFJPTkc+bjwvU1RST05HPj08U1RST05HPi0xPC9TVFJPTkc+IHRoZW4gdGhlIHdob2xlIGFycmF5IGlzICBjb3BpZWQsCisgICAgICAgdG8gIHRoZSAgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdpbGwgZml0IG9uIHRoZQorICAgICAgIGxpbmUuCisKKyAgICAgICBUaGUgd2luZG93IGN1cnNvciBpcyA8RU0+bm90PC9FTT4gYWR2YW5jZWQuICAgVGhlc2UgIHJvdXRpbmVzICB3b3JrCisgICAgICAgZmFzdGVyIHRoYW4gPFNUUk9ORz53YWRkbnN0cjwvU1RST05HPi4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGV5IGRvIG5vdCBwZXItCisgICAgICAgZm9ybSBjaGVja2luZyAoc3VjaCBhcyBmb3IgdGhlIG5ld2xpbmUsIGJhY2tzcGFjZSwgb3IgY2FyLQorICAgICAgIHJpYWdlICByZXR1cm4gY2hhcmFjdGVycyksIHRoZXkgZG8gbm90IGFkdmFuY2UgdGhlIGN1cnJlbnQKKyAgICAgICBjdXJzb3IgcG9zaXRpb24sIHRoZXkgZG8gbm90IGV4cGFuZCBvdGhlciBjb250cm9sICBjaGFyYWMtCisgICAgICAgdGVycyAgdG8gIF4tZXNjYXBlcywgIGFuZCAgdGhleSAgdHJ1bmNhdGUgdGhlIHN0cmluZyBpZiBpdAorICAgICAgIGNyb3NzZXMgdGhlIHJpZ2h0IG1hcmdpbiwgcmF0aGVyIHRoYW4gd3JhcHBpbmcgIGl0ICBhcm91bmQKKyAgICAgICB0byB0aGUgbmV3IGxpbmUuCisKKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVuZCAgc3VjY2Vzc2Z1bGx5ICBvbiBlbmNvdW50ZXJpbmcgYSBudWxsCisgICAgICAgPEVNPmNjaGFyPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+dDwvRU0+LCBvciB3aGVuIHRoZXkgaGF2ZSBmaWxsZWQgdGhlIGN1cnJlbnQgbGluZS4gIElmICBhCisgICAgICAgY29tcGxleCAgY2hhcmFjdGVyIGNhbm5vdCBjb21wbGV0ZWx5IGZpdCBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgIGN1cnJlbnQgbGluZSwgdGhlIHJlbWFpbmluZyBjb2x1bW5zIGFyZSAgZmlsbGVkICB3aXRoICB0aGUKKyAgICAgICBiYWNrZ3JvdW5kIGNoYXJhY3RlciBhbmQgcmVuZGl0aW9uLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIEFsbCBmdW5jdGlvbnMgZXhjZXB0IDxTVFJPTkc+d2FkZF93Y2huc3RyPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiBvbgorICAgICAgIHN1Y2Nlc3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgQWxsIHRoZXNlIGVudHJ5IHBvaW50cyBhcmUgZGVzY3JpYmVkICBpbiAgdGhlICBYU0kgIEN1cnNlcworICAgICAgIHN0YW5kYXJkLCBJc3N1ZSA0LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19hZGRjaC4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYWRkY2guM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI1MzJjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYWRkY2guM3guaHRtbApAQCAtMCwwICsxLDIxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19hZGRjaC4zeCx2IDEuMjcgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2FkZGNoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19hZGRjaCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4sICA8U1RST05HPndhZGRjaDwvU1RST05HPiwgIDxTVFJPTkc+bXZhZGRjaDwvU1RST05HPiwgIDxTVFJPTkc+bXZ3YWRkY2g8L1NUUk9ORz4sIDxTVFJPTkc+ZWNob2NoYXI8L1NUUk9ORz4sIDxTVFJPTkc+d2VjaG9jaGFyPC9TVFJPTkc+IC0KKyAgICAgICBhZGQgYSBjaGFyYWN0ZXIgKHdpdGggYXR0cmlidXRlcykgdG8gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3csIHRoZW4KKyAgICAgICBhZHZhbmNlIHRoZSBjdXJzb3IKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hZGRjaChjb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRjaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZhZGRjaChpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndhZGRjaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmVjaG9jaGFyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2VjaG9jaGFyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPmFkZGNoPC9TVFJPTkc+LCAgPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZhZGRjaDwvU1RST05HPiBhbmQgPFNUUk9ORz5tdndhZGRjaDwvU1RST05HPiByb3V0aW5lcyBwdXQgdGhlCisgICAgICAgY2hhcmFjdGVyIDxFTT5jaDwvRU0+IGludG8gdGhlIGdpdmVuIHdpbmRvdyBhdCBpdHMgIGN1cnJlbnQgIHdpbmRvdworICAgICAgIHBvc2l0aW9uLCAgd2hpY2ggIGlzIHRoZW4gYWR2YW5jZWQuICBUaGV5IGFyZSBhbmFsb2dvdXMgdG8KKyAgICAgICA8U1RST05HPnB1dGNoYXI8L1NUUk9ORz4gaW4gPFNUUk9ORz48QSBIUkVGPSJzdGRpby4zLmh0bWwiPnN0ZGlvKDMpPC9BPjwvU1RST05HPi4gIElmIHRoZSBhZHZhbmNlIGlzIGF0IHRoZSByaWdodCAgbWFyLQorICAgICAgIGdpbiwgIHRoZSAgY3Vyc29yICBhdXRvbWF0aWNhbGx5IHdyYXBzIHRvIHRoZSBiZWdpbm5pbmcgb2YKKyAgICAgICB0aGUgbmV4dCBsaW5lLiAgQXQgdGhlIGJvdHRvbSAgb2YgIHRoZSAgY3VycmVudCAgc2Nyb2xsaW5nCisgICAgICAgcmVnaW9uLCAgaWYgIDxTVFJPTkc+c2Nyb2xsb2s8L1NUUk9ORz4gIGlzIGVuYWJsZWQsIHRoZSBzY3JvbGxpbmcgcmVnaW9uIGlzCisgICAgICAgc2Nyb2xsZWQgdXAgb25lIGxpbmUuCisKKyAgICAgICBJZiA8RU0+Y2g8L0VNPiBpcyBhIHRhYiwgbmV3bGluZSwgb3IgYmFja3NwYWNlLCB0aGUgY3Vyc29yIGlzIG1vdmVkCisgICAgICAgYXBwcm9wcmlhdGVseSB3aXRoaW4gdGhlIHdpbmRvdy4gIEJhY2tzcGFjZSBtb3ZlcyB0aGUgY3VyLQorICAgICAgIHNvciBvbmUgY2hhcmFjdGVyIGxlZnQ7IGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgIGEgIHdpbmRvdyAgaXQKKyAgICAgICBkb2VzICBub3RoaW5nLiAgIE5ld2xpbmUgIGRvZXMgIGEgPFNUUk9ORz5jbHJ0b2VvbDwvU1RST05HPiwgdGhlbiBtb3ZlcyB0aGUKKyAgICAgICBjdXJzb3IgdG8gIHRoZSAgd2luZG93ICBsZWZ0ICBtYXJnaW4gIG9uICB0aGUgIG5leHQgIGxpbmUsCisgICAgICAgc2Nyb2xsaW5nICB0aGUgIHdpbmRvdyBpZiBvbiB0aGUgbGFzdCBsaW5lLiAgVGFicyBhcmUgY29uLQorICAgICAgIHNpZGVyZWQgdG8gYmUgYXQgZXZlcnkgZWlnaHRoIGNvbHVtbi4gICBUaGUgIHRhYiAgaW50ZXJ2YWwKKyAgICAgICBtYXkgYmUgYWx0ZXJlZCBieSBzZXR0aW5nIHRoZSA8U1RST05HPlRBQlNJWkU8L1NUUk9ORz4gdmFyaWFibGUuCisKKyAgICAgICBJZiA8RU0+Y2g8L0VNPiBpcyBhbnkgY29udHJvbCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiB0YWIsIG5ld2xpbmUsIG9yCisgICAgICAgYmFja3NwYWNlLCBpdCBpcyBkcmF3biAgaW4gIDxTVFJPTkc+XjwvU1RST05HPjxFTT5YPC9FTT4gIG5vdGF0aW9uLiAgIENhbGxpbmcgIDxTVFJPTkc+d2luY2g8L1NUUk9ORz4KKyAgICAgICBhZnRlciBhZGRpbmcgYSBjb250cm9sIGNoYXJhY3RlciBkb2VzIG5vdCByZXR1cm4gdGhlIGNoYXItCisgICAgICAgYWN0ZXIgaXRzZWxmLCBidXQgaW5zdGVhZCByZXR1cm5zIHRoZSBeLXJlcHJlc2VudGF0aW9uICBvZgorICAgICAgIHRoZSBjb250cm9sIGNoYXJhY3Rlci4KKworICAgICAgIFZpZGVvIGF0dHJpYnV0ZXMgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBjaGFyYWN0ZXIgYXJndW1lbnQKKyAgICAgICBwYXNzZWQgdG8gPFNUUk9ORz5hZGRjaDwvU1RST05HPiBvciByZWxhdGVkIGZ1bmN0aW9ucyBieSBsb2dpY2FsLU9SaW5nIHRoZW0KKyAgICAgICBpbnRvICB0aGUgIGNoYXJhY3Rlci4gICAoVGh1cywgdGV4dCwgaW5jbHVkaW5nIGF0dHJpYnV0ZXMsCisgICAgICAgY2FuIGJlIGNvcGllZCBmcm9tIG9uZSBwbGFjZSB0byAgYW5vdGhlciAgdXNpbmcgIDxTVFJPTkc+aW5jaDwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5hZGRjaDwvU1RST05HPi4pICAgU2VlICB0aGUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4gcGFnZSBmb3IgdmFsdWVzIG9mIHByZWRlLQorICAgICAgIGZpbmVkIHZpZGVvIGF0dHJpYnV0ZSBjb25zdGFudHMgdGhhdCBjYW4gYmUgdXNlZnVsbHkgT1InZWQKKyAgICAgICBpbnRvIGNoYXJhY3RlcnMuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+ZWNob2NoYXI8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz53ZWNob2NoYXI8L1NUUk9ORz4gcm91dGluZXMgYXJlIGVxdWl2YWxlbnQgdG8gYQorICAgICAgIGNhbGwgdG8gPFNUUk9ORz5hZGRjaDwvU1RST05HPiBmb2xsb3dlZCBieSBhIGNhbGwgdG8gPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+LCBvciBhIGNhbGwgIHRvCisgICAgICAgPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4gZm9sbG93ZWQgYnkgYSBjYWxsIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4uICBUaGUga25vd2xlZGdlIHRoYXQKKyAgICAgICBvbmx5IGEgc2luZ2xlIGNoYXJhY3RlciBpcyBiZWluZyBvdXRwdXQgaXMgdXNlZCAgYW5kLCAgZm9yCisgICAgICAgbm9uLWNvbnRyb2wgIGNoYXJhY3RlcnMsICBhICBjb25zaWRlcmFibGUgcGVyZm9ybWFuY2UgZ2FpbgorICAgICAgIG1heSBiZSBzZWVuIGJ5ICB1c2luZyAgdGhlc2UgIHJvdXRpbmVzICBpbnN0ZWFkICBvZiAgdGhlaXIKKyAgICAgICBlcXVpdmFsZW50cy4KKworICAgPFNUUk9ORz5MaW5lPC9TVFJPTkc+IDxTVFJPTkc+R3JhcGhpY3M8L1NUUk9ORz4KKyAgICAgICBUaGUgIGZvbGxvd2luZyAgdmFyaWFibGVzICBtYXkgYmUgdXNlZCB0byBhZGQgbGluZSBkcmF3aW5nCisgICAgICAgY2hhcmFjdGVycyB0byB0aGUgc2NyZWVuIHdpdGggcm91dGluZXMgb2YgdGhlICA8U1RST05HPmFkZGNoPC9TVFJPTkc+ICBmYW0tCisgICAgICAgaWx5LiAgIFRoZSAgZGVmYXVsdCAgY2hhcmFjdGVyIGxpc3RlZCBiZWxvdyBpcyB1c2VkIGlmIHRoZQorICAgICAgIDxTVFJPTkc+YWNzYzwvU1RST05HPiAgY2FwYWJpbGl0eSAgZG9lcyAgbm90ICBkZWZpbmUgIGEgICB0ZXJtaW5hbC1zcGVjaWZpYworICAgICAgIHJlcGxhY2VtZW50ICBmb3IgIGl0LiAgIFRoZSAgbmFtZXMgIGFyZSAgdGFrZW4gIGZyb20gVlQxMDAKKyAgICAgICBub21lbmNsYXR1cmUuCisKKworICAgICAgIDxFTT5OYW1lPC9FTT4gICAgICAgICAgIDxFTT5EZWZhdWx0PC9FTT4gICA8RU0+RGVzY3JpcHRpb248L0VNPgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQUNTX0JMT0NLICAgICAgIyAgICAgICAgIHNvbGlkIHNxdWFyZSBibG9jaworICAgICAgIEFDU19CT0FSRCAgICAgICMgICAgICAgICBib2FyZCBvZiBzcXVhcmVzCisgICAgICAgQUNTX0JURUUgICAgICAgKyAgICAgICAgIGJvdHRvbSB0ZWUKKyAgICAgICBBQ1NfQlVMTEVUICAgICBvICAgICAgICAgYnVsbGV0CisgICAgICAgQUNTX0NLQk9BUkQgICAgOiAgICAgICAgIGNoZWNrZXIgYm9hcmQgKHN0aXBwbGUpCisgICAgICAgQUNTX0RBUlJPVyAgICAgdiAgICAgICAgIGFycm93IHBvaW50aW5nIGRvd24KKyAgICAgICBBQ1NfREVHUkVFICAgICAnICAgICAgICAgZGVncmVlIHN5bWJvbAorICAgICAgIEFDU19ESUFNT05EICAgICsgICAgICAgICBkaWFtb25kCisgICAgICAgQUNTX0dFUVVBTCAgICAgJmd0OyAgICAgICAgIGdyZWF0ZXItdGhhbi1vci1lcXVhbC10bworICAgICAgIEFDU19ITElORSAgICAgIC0gICAgICAgICBob3Jpem9udGFsIGxpbmUKKyAgICAgICBBQ1NfTEFOVEVSTiAgICAjICAgICAgICAgbGFudGVybiBzeW1ib2wKKyAgICAgICBBQ1NfTEFSUk9XICAgICAmbHQ7ICAgICAgICAgYXJyb3cgcG9pbnRpbmcgbGVmdAorICAgICAgIEFDU19MRVFVQUwgICAgICZsdDsgICAgICAgICBsZXNzLXRoYW4tb3ItZXF1YWwtdG8KKyAgICAgICBBQ1NfTExDT1JORVIgICArICAgICAgICAgbG93ZXIgbGVmdC1oYW5kIGNvcm5lcgorICAgICAgIEFDU19MUkNPUk5FUiAgICsgICAgICAgICBsb3dlciByaWdodC1oYW5kIGNvcm5lcgorICAgICAgIEFDU19MVEVFICAgICAgICsgICAgICAgICBsZWZ0IHRlZQorICAgICAgIEFDU19ORVFVQUwgICAgICEgICAgICAgICBub3QtZXF1YWwKKyAgICAgICBBQ1NfUEkgICAgICAgICAqICAgICAgICAgZ3JlZWsgcGkKKyAgICAgICBBQ1NfUExNSU5VUyAgICAjICAgICAgICAgcGx1cy9taW51cworICAgICAgIEFDU19QTFVTICAgICAgICsgICAgICAgICBwbHVzCisgICAgICAgQUNTX1JBUlJPVyAgICAgJmd0OyAgICAgICAgIGFycm93IHBvaW50aW5nIHJpZ2h0CisgICAgICAgQUNTX1JURUUgICAgICAgKyAgICAgICAgIHJpZ2h0IHRlZQorICAgICAgIEFDU19TMSAgICAgICAgIC0gICAgICAgICBzY2FuIGxpbmUgMQorICAgICAgIEFDU19TMyAgICAgICAgIC0gICAgICAgICBzY2FuIGxpbmUgMworICAgICAgIEFDU19TNyAgICAgICAgIC0gICAgICAgICBzY2FuIGxpbmUgNworICAgICAgIEFDU19TOSAgICAgICAgIF8gICAgICAgICBzY2FuIGxpbmUgOQorICAgICAgIEFDU19TVEVSTElORyAgIGYgICAgICAgICBwb3VuZC1zdGVybGluZyBzeW1ib2wKKyAgICAgICBBQ1NfVFRFRSAgICAgICArICAgICAgICAgdG9wIHRlZQorICAgICAgIEFDU19VQVJST1cgICAgIF4gICAgICAgICBhcnJvdyBwb2ludGluZyB1cAorICAgICAgIEFDU19VTENPUk5FUiAgICsgICAgICAgICB1cHBlciBsZWZ0LWhhbmQgY29ybmVyCisgICAgICAgQUNTX1VSQ09STkVSICAgKyAgICAgICAgIHVwcGVyIHJpZ2h0LWhhbmQgY29ybmVyCisgICAgICAgQUNTX1ZMSU5FICAgICAgfCAgICAgICAgIHZlcnRpY2FsIGxpbmUKKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24KKyAgICAgICBzdWNjZXNzICAodGhlICBTVnI0IG1hbnVhbHMgc3BlY2lmeSBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlCisgICAgICAgb3RoZXIgdGhhbiA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB1bmxlc3Mgb3RoZXItCisgICAgICAgd2lzZSBub3RlZCBpbiB0aGUgcHJlY2VkaW5nIHJvdXRpbmUgZGVzY3JpcHRpb25zLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgIHRoYXQgIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4sICA8U1RST05HPm12YWRkY2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3YWRkY2g8L1NUUk9ORz4sIGFuZCA8U1RST05HPmVjaG9jaGFyPC9TVFJPTkc+IG1heSBiZQorICAgICAgIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBBbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgIHN0YW4tCisgICAgICAgZGFyZCwgIElzc3VlICA0LiAgVGhlIGRlZmF1bHRzIHNwZWNpZmllZCBmb3IgZm9ybXMtZHJhd2luZworICAgICAgIGNoYXJhY3RlcnMgYXBwbHkgaW4gdGhlIFBPU0lYIGxvY2FsZS4KKworICAgICAgIFNvbWUgQUNTIHN5bWJvbHMgKEFDU19TMywgQUNTX1M3LCBBQ1NfTEVRVUFMLCAgQUNTX0dFUVVBTCwKKyAgICAgICBBQ1NfUEksICBBQ1NfTkVRVUFMLCAgQUNTX1NURVJMSU5HKSB3ZXJlIG5vdCBkb2N1bWVudGVkIGluCisgICAgICAgYW55IHB1YmxpY2x5IHJlbGVhc2VkIFN5c3RlbSBWLiAgIEhvd2V2ZXIsICBtYW55ICBwdWJsaWNseQorICAgICAgIGF2YWlsYWJsZSAgdGVybWluZm9zICBpbmNsdWRlICA8U1RST05HPmFjc2M8L1NUUk9ORz4gc3RyaW5ncyBpbiB3aGljaCB0aGVpcgorICAgICAgIGtleSBjaGFyYWN0ZXJzIChwcnl6e3x9KSBhcmUgZW1iZWRkZWQsIGFuZCAgYSAgc2Vjb25kLWhhbmQKKyAgICAgICBsaXN0ICBvZiAgdGhlaXIgIGNoYXJhY3RlciBkZXNjcmlwdGlvbnMgaGFzIGNvbWUgdG8gbGlnaHQuCisgICAgICAgVGhlICBBQ1MtcHJlZml4ZWQgIG5hbWVzICBmb3IgIHRoZW0gIHdlcmUgICBpbnZlbnRlZCAgIGZvcgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+VEFCU0laRTwvU1RST05HPiAgdmFyaWFibGUgIGlzIGltcGxlbWVudGVkIGluIHNvbWUgdmVyc2lvbnMgb2YKKyAgICAgICBjdXJzZXMsIGJ1dCBpcyBub3QgcGFydCBvZiBYL09wZW4gY3Vyc2VzLgorCisgICAgICAgSWYgPEVNPmNoPC9FTT4gaXMgYSBjYXJyaWFnZSByZXR1cm4sIHRoZSBjdXJzb3IgIGlzICBtb3ZlZCAgdG8gIHRoZQorICAgICAgIGJlZ2lubmluZyAgb2YgdGhlIGN1cnJlbnQgcm93IG9mIHRoZSB3aW5kb3cuICBUaGlzIGlzIHRydWUKKyAgICAgICBvZiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGJ1dCBpcyBub3QgZG9jdW1lbnRlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InB1dGMuMy5odG1sIj5wdXRjKDMpPC9BPjwvU1RST05HPi4KKworICAgICAgIENvbXBhcmFibGUgIGZ1bmN0aW9ucyAgaW4gIHRoZSAgd2lkZS1jaGFyYWN0ZXIgIChuY3Vyc2VzdykKKyAgICAgICBsaWJyYXJ5IGFyZSBkZXNjcmliZWQgaW4gPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2guM3guaHRtbCI+Y3Vyc19hZGRfd2NoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZGNoc3RyLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzQyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19hZGRjaHN0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTI5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYWRkY2hzdHIuM3gsdiAxLjEyIDIwMDYvMTIvMDIgMTc6MDI6NDUgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19hZGRjaHN0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYWRkY2hzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmFkZGNoc3RyPC9TVFJPTkc+LCA8U1RST05HPmFkZGNobnN0cjwvU1RST05HPiwgPFNUUk9ORz53YWRkY2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2FkZGNobnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmFkZGNoc3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZhZGRjaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3YWRkY2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3YWRkY2huc3RyPC9TVFJPTkc+IC0gYWRkIGEgc3RyaW5nIG9mCisgICAgICAgY2hhcmFjdGVycyAoYW5kIGF0dHJpYnV0ZXMpIHRvIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkY2hzdHIoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz4qY2hzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkY2huc3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2FkZGNoc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz4qY2hzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2FkZGNobnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZhZGRjaHN0cihpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz4qY2hzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZhZGRjaG5zdHIoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3YWRkY2hzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiAgPFNUUk9ORz54LDwvU1RST05HPiAgPFNUUk9ORz5jb25zdDwvU1RST05HPiAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPipjaHN0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIDxTVFJPTkc+bXZ3YWRkY2huc3RyKFdJTkRPVzwvU1RST05HPiAgPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+KmNoc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGNvcHkgPEVNPmNoc3RyPC9FTT4gaW50byB0aGUgd2luZG93IGltYWdlICBzdHJ1Y3R1cmUKKyAgICAgICBhdCAgYW5kICBhZnRlciB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uICBUaGUgZm91ciByb3UtCisgICAgICAgdGluZXMgd2l0aCA8RU0+bjwvRU0+IGFzIHRoZSBsYXN0IGFyZ3VtZW50IGNvcHkgYXQgbW9zdCA8RU0+bjwvRU0+IGVsZW1lbnRzLAorICAgICAgIGJ1dCAgbm8gIG1vcmUgdGhhbiB3aWxsIGZpdCBvbiB0aGUgbGluZS4gIElmIDxTVFJPTkc+bjwvU1RST05HPj08U1RST05HPi0xPC9TVFJPTkc+IHRoZW4gdGhlCisgICAgICAgd2hvbGUgc3RyaW5nIGlzIGNvcGllZCwgdG8gdGhlIG1heGltdW0gbnVtYmVyICBvZiAgY2hhcmFjLQorICAgICAgIHRlcnMgdGhhdCB3aWxsIGZpdCBvbiB0aGUgbGluZS4KKworICAgICAgIFRoZSB3aW5kb3cgY3Vyc29yIGlzIDxFTT5ub3Q8L0VNPiBhZHZhbmNlZCwgYW5kIHRoZXNlIHJvdXRpbmVzIHdvcmsKKyAgICAgICBmYXN0ZXIgdGhhbiA8U1RST05HPndhZGRuc3RyPC9TVFJPTkc+LiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZXkgZG8gbm90IHBlci0KKyAgICAgICBmb3JtICBhbnkgIGtpbmQgIG9mICBjaGVja2luZyAgKHN1Y2ggIGFzICBmb3IgdGhlIG5ld2xpbmUsCisgICAgICAgYmFja3NwYWNlLCBvciBjYXJyaWFnZSByZXR1cm4gY2hhcmFjdGVycyksIHRoZXkgZG8gbm90IGFkLQorICAgICAgIHZhbmNlIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiwgdGhleSBkbyBub3QgZXhwYW5kIG90aC0KKyAgICAgICBlciBjb250cm9sIGNoYXJhY3RlcnMgdG8gXi1lc2NhcGVzLCBhbmQgdGhleSB0cnVuY2F0ZSAgdGhlCisgICAgICAgc3RyaW5nICBpZiAgaXQgY3Jvc3NlcyB0aGUgcmlnaHQgbWFyZ2luLCByYXRoZXIgdGhhbiB3cmFwLQorICAgICAgIHBpbmcgaXQgYXJvdW5kIHRvIHRoZSBuZXcgbGluZS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IG9uCisgICAgICAgc3VjY2VzcyAgKHRoZSAgU1ZyNCBtYW51YWxzIHNwZWNpZnkgb25seSAiYW4gaW50ZWdlciB2YWx1ZQorICAgICAgIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzIG90aGVyLQorICAgICAgIHdpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKworICAgICAgIFgvT3BlbiAgZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgVGhpcyBpbXBsZS0KKyAgICAgICBtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgIG51bGwuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCByb3V0aW5lcyBleGNlcHQgPFNUUk9ORz53YWRkY2huc3RyPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIGVudHJ5ICBwb2ludHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuLQorICAgICAgIGRhcmQsIElzc3VlIDQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgQ29tcGFyYWJsZSBmdW5jdGlvbnMgaW4gdGhlIHdpZGUtY2hhcmFjdGVyIChuY3Vyc2VzdykgIGxpLQorICAgICAgIGJyYXJ5IGFyZSBkZXNjcmliZWQgaW4gPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRfd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZHN0ci4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYWRkc3RyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjOTNhMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZHN0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYWRkc3RyLjN4LHYgMS4xMyAyMDA1LzA1LzE1IDE2OjE3OjE0IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYWRkc3RyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19hZGRzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+YWRkc3RyPC9TVFJPTkc+LCA8U1RST05HPmFkZG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2FkZHN0cjwvU1RST05HPiwgPFNUUk9ORz53YWRkbnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmFkZHN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmFkZG5zdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdndhZGRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3YWRkbnN0cjwvU1RST05HPiAtIGFkZCBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRvIGEKKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cgYW5kIGFkdmFuY2UgY3Vyc29yCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkc3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hZGRuc3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YWRkbnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZhZGRzdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmFkZG5zdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2FkZHN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndhZGRuc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHIsPC9FTT4gPEVNPmludDwvRU0+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgd3JpdGUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIChudWxsLXRlcm1pbmF0LQorICAgICAgIGVkKSBjaGFyYWN0ZXIgc3RyaW5nIDxFTT5zdHI8L0VNPiBvbiB0aGUgZ2l2ZW4gd2luZG93LiAgSXQgaXMgc2ltaS0KKyAgICAgICBsYXIgIHRvICBjYWxsaW5nICA8U1RST05HPndhZGRjaDwvU1RST05HPiAgb25jZSAgZm9yICBlYWNoIGNoYXJhY3RlciBpbiB0aGUKKyAgICAgICBzdHJpbmcuICBUaGUgZm91ciByb3V0aW5lcyB3aXRoIDxFTT5uPC9FTT4gIGFzICB0aGUgIGxhc3QgIGFyZ3VtZW50CisgICAgICAgd3JpdGUgIGF0ICBtb3N0IDxFTT5uPC9FTT4gY2hhcmFjdGVycy4gIElmIDxFTT5uPC9FTT4gaXMgLTEsIHRoZW4gdGhlIGVudGlyZQorICAgICAgIHN0cmluZyB3aWxsIGJlIGFkZGVkLCB1cCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgIGNoYXJhYy0KKyAgICAgICB0ZXJzICB0aGF0ICB3aWxsICBmaXQgIG9uIHRoZSBsaW5lLCBvciB1bnRpbCBhIHRlcm1pbmF0aW5nCisgICAgICAgbnVsbCBpcyByZWFjaGVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiBvbgorICAgICAgIHN1Y2Nlc3MgICh0aGUgIFNWcjQgbWFudWFscyBzcGVjaWZ5IG9ubHkgImFuIGludGVnZXIgdmFsdWUKKyAgICAgICBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgVGhpcyAgaW1wbGUtCisgICAgICAgbWVudGF0aW9uICByZXR1cm5zICBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbAorICAgICAgIG9yIGlmIHRoZSBzdHJpbmcgcG9pbnRlciBpcyBudWxsIG9yIGlmICB0aGUgIGNvcnJlc3BvbmRpbmcKKyAgICAgICBjYWxscyB0byA8U1RST05HPndhZGRjaDwvU1RST05HPiByZXR1cm4gYW4gZXJyb3IuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSAgdGhhdCAgYWxsICBvZiAgdGhlc2UgIHJvdXRpbmVzICBleGNlcHQgIDxTVFJPTkc+d2FkZHN0cjwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz53YWRkbnN0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIEFsbCB0aGVzZSBlbnRyeSBwb2ludHMgYXJlIGRlc2NyaWJlZCAgaW4gIHRoZSAgWFNJICBDdXJzZXMKKyAgICAgICBzdGFuZGFyZCwgIElzc3VlICA0LiAgVGhlIFhTSSBlcnJvcnMgRUlMU0VRIGFuZCBFT1ZFUkZMT1csCisgICAgICAgYXNzb2NpYXRlZCB3aXRoIGV4dGVuZGVkLWxldmVsIGNvbmZvcm1hbmNlLCAgYXJlICBub3QgIHlldAorICAgICAgIGRldGVjdGVkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZHdzdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2FkZHdzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGJkNzI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYWRkd3N0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYWRkd3N0ci4zeCx2IDEuNyAyMDA2LzAyLzI1IDIwOjU5OjA4IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYWRkd3N0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYWRkd3N0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmFkZHdzdHI8L1NUUk9ORz4sIDxTVFJPTkc+YWRkbndzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2FkZHdzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2FkZG53c3RyPC9TVFJPTkc+LCA8U1RST05HPm12YWRkd3N0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12YWRkbndzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3YWRkd3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdndhZGRud3N0cjwvU1RST05HPiAtIGFkZCBhIHN0cmluZyBvZiB3aWRlCisgICAgICAgY2hhcmFjdGVycyB0byBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdyBhbmQgYWR2YW5jZSBjdXJzb3IKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hZGR3c3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YWRkbndzdHIoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGR3c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhZGRud3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12YWRkd3N0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmFkZG53c3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3YWRkd3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3YWRkbndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHdyaXRlIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSAobnVsbC10ZXJtaW5hdC0KKyAgICAgICBlZCkgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IGNoYXJhY3RlciBzdHJpbmcgPEVNPndzdHI8L0VNPiBvbiB0aGUgZ2l2ZW4gd2luZG93LiAgSXQKKyAgICAgICBpcyAgc2ltaWxhciAgdG8gY29uc3RydWN0aW5nIGEgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IGZvciBlYWNoIHdjaGFyX3QgaW4KKyAgICAgICB0aGUgIHN0cmluZywgIHRoZW4gIGNhbGxpbmcgIDxTVFJPTkc+d2FkZF93Y2g8L1NUUk9ORz4gIGZvciAgdGhlICByZXN1bHRpbmcKKyAgICAgICA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPEVNPm12PC9FTT4gcm91dGluZXMgcGVyZm9ybSBjdXJzb3IgbW92ZW1lbnQgb25jZSwgYmVmb3JlIHdyaXQtCisgICAgICAgaW5nIGFueSBjaGFyYWN0ZXJzLiAgVGhlcmVhZnRlciwgdGhlIGN1cnNvciBpcyBhZHZhbmNlZCBhcworICAgICAgIGEgc2lkZS1lZmZlY3Qgb2Ygd3JpdGluZyB0byB0aGUgd2luZG93LgorCisgICAgICAgVGhlICBmb3VyICByb3V0aW5lcyAgd2l0aCAgPEVNPm48L0VNPiBhcyB0aGUgbGFzdCBhcmd1bWVudCB3cml0ZSBhdAorICAgICAgIG1vc3QgPEVNPm48L0VNPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gY2hhcmFjdGVycy4gIElmIDxFTT5uPC9FTT4gaXMgLTEsICB0aGVuICB0aGUgIGVudGlyZQorICAgICAgIHN0cmluZyAgd2lsbCBiZSBhZGRlZCwgdXAgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhYy0KKyAgICAgICB0ZXJzIHRoYXQgd2lsbCBmaXQgb24gdGhlIGxpbmUsICBvciAgdW50aWwgIGEgIHRlcm1pbmF0aW5nCisgICAgICAgbnVsbCBpcyByZWFjaGVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24KKyAgICAgICBzdWNjZXNzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgb2YgdGhlc2Ugcm91dGluZXMgZXhjZXB0ICA8U1RST05HPndhZGRud3N0cjwvU1RST05HPiAgbWF5ICBiZQorICAgICAgIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBBbGwgIHRoZXNlICBlbnRyeSAgcG9pbnRzICBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzCisgICAgICAgc3RhbmRhcmQsIElzc3VlIDQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2F0dHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2F0dHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTdiMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYXR0ci4zeC5odG1sCkBAIC0wLDAgKzEsMjYzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2F0dHIuM3gsdiAxLjMxIDIwMDcvMDMvMTcgMjA6MzA6MzMgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19hdHRyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19hdHRyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+YXR0cm9mZjwvU1RST05HPiwgPFNUUk9ORz53YXR0cm9mZjwvU1RST05HPiwgPFNUUk9ORz5hdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+d2F0dHJvbjwvU1RST05HPiwgPFNUUk9ORz5hdHRyc2V0PC9TVFJPTkc+LCA8U1RST05HPndhdHRyc2V0PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+Y29sb3Jfc2V0PC9TVFJPTkc+LCA8U1RST05HPndjb2xvcl9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+c3RhbmRlbmQ8L1NUUk9ORz4sIDxTVFJPTkc+d3N0YW5kZW5kPC9TVFJPTkc+LCA8U1RST05HPnN0YW5kb3V0PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+d3N0YW5kb3V0PC9TVFJPTkc+LCA8U1RST05HPmF0dHJfZ2V0PC9TVFJPTkc+LCA8U1RST05HPndhdHRyX2dldDwvU1RST05HPiwgPFNUUk9ORz5hdHRyX29mZjwvU1RST05HPiwgPFNUUk9ORz53YXR0cl9vZmY8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5hdHRyX29uPC9TVFJPTkc+LCA8U1RST05HPndhdHRyX29uPC9TVFJPTkc+LCA8U1RST05HPmF0dHJfc2V0PC9TVFJPTkc+LCA8U1RST05HPndhdHRyX3NldDwvU1RST05HPiwgPFNUUk9ORz5jaGdhdDwvU1RST05HPiwgPFNUUk9ORz53Y2hnYXQ8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmNoZ2F0PC9TVFJPTkc+LCA8U1RST05HPm12d2NoZ2F0PC9TVFJPTkc+LCA8U1RST05HPlBBSVJfTlVNQkVSPC9TVFJPTkc+IC0gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gY2hhcmFjdGVyIGFuZAorICAgICAgIHdpbmRvdyBhdHRyaWJ1dGUgY29udHJvbCByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRyb2ZmKGludDwvU1RST05HPiA8U1RST05HPmF0dHJzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhdHRyb2ZmKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cm9uKGludDwvU1RST05HPiA8U1RST05HPmF0dHJzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhdHRyb24oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRyc2V0KGludDwvU1RST05HPiA8U1RST05HPmF0dHJzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndhdHRyc2V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y29sb3Jfc2V0KHNob3J0PC9TVFJPTkc+IDxTVFJPTkc+Y29sb3JfcGFpcl9udW1iZXIsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZCo8L1NUUk9ORz4gPFNUUk9ORz5vcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndjb2xvcl9zZXQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yX3BhaXJfbnVtYmVyLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+dm9pZCo8L1NUUk9ORz4gPFNUUk9ORz5vcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnN0YW5kZW5kKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3N0YW5kZW5kKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c3RhbmRvdXQodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53c3RhbmRvdXQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX2dldChhdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qYXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz4qcGFpciw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2F0dHJfZ2V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+KmF0dHJzLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+KnBhaXIsPC9TVFJPTkc+CisgICAgICAgICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmF0dHJfb2ZmKGF0dHJfdDwvU1RST05HPiA8U1RST05HPmF0dHJzLDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qb3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YXR0cl9vZmYoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cl9vbihhdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2F0dHJfb24oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXR0cl9zZXQoYXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5wYWlyLDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qb3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53YXR0cl9zZXQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPnBhaXIsPC9TVFJPTkc+ICA8U1RST05HPnZvaWQ8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPipvcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNoZ2F0KGludDwvU1RST05HPiA8U1RST05HPm4sPC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0ciw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Y2hnYXQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uLDwvU1RST05HPiA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8U1RST05HPmF0dHIsPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipvcHRzKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZjaGdhdChpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+biw8L1NUUk9ORz4gPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRyLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2xvciw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qb3B0cyk8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2NoZ2F0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4sPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRyLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+Y29sb3IsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Km9wdHMpPC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBtYW5pcHVsYXRlICB0aGUgY3VycmVudCBhdHRyaWJ1dGVzIG9mIHRoZQorICAgICAgIG5hbWVkIHdpbmRvdy4gIFRoZSBjdXJyZW50IGF0dHJpYnV0ZXMgb2YgYSB3aW5kb3cgYXBwbHkgdG8KKyAgICAgICBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSB3cml0dGVuIGludG8gdGhlIHdpbmRvdyB3aXRoIDxTVFJPTkc+d2FkZC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoPC9TVFJPTkc+LCA8U1RST05HPndhZGRzdHI8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d3ByaW50dzwvU1RST05HPi4gIEF0dHJpYnV0ZXMgYXJlIGEgcHJvcGVydHkgb2YgdGhlCisgICAgICAgY2hhcmFjdGVyLCAgIGFuZCAgbW92ZSAgd2l0aCAgdGhlICBjaGFyYWN0ZXIgIHRocm91Z2ggIGFueQorICAgICAgIHNjcm9sbGluZyBhbmQgaW5zZXJ0L2RlbGV0ZSBsaW5lL2NoYXJhY3RlciBvcGVyYXRpb25zLiAgVG8KKyAgICAgICB0aGUgIGV4dGVudCAgcG9zc2libGUsICB0aGV5ICBhcmUgZGlzcGxheWVkIGFzIGFwcHJvcHJpYXRlCisgICAgICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgZ3JhcGhpYyByZW5kaXRpb24gb2YgIGNoYXJhY3RlcnMgIHB1dAorICAgICAgIG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICBUaGUgIHJvdXRpbmUgIDxTVFJPTkc+YXR0cnNldDwvU1RST05HPiAgc2V0cyAgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBvZiB0aGUKKyAgICAgICBnaXZlbiB3aW5kb3cgdG8gPEVNPmF0dHJzPC9FTT4uICBUaGUgcm91dGluZSA8U1RST05HPmF0dHJvZmY8L1NUUk9ORz4gdHVybnMgb2ZmICB0aGUKKyAgICAgICBuYW1lZCAgYXR0cmlidXRlcyAgd2l0aG91dCB0dXJuaW5nIGFueSBvdGhlciBhdHRyaWJ1dGVzIG9uCisgICAgICAgb3Igb2ZmLiAgVGhlIHJvdXRpbmUgPFNUUk9ORz5hdHRyb248L1NUUk9ORz4gdHVybnMgb24gdGhlIG5hbWVkICBhdHRyaWJ1dGVzCisgICAgICAgd2l0aG91dCBhZmZlY3RpbmcgYW55IG90aGVycy4gIFRoZSByb3V0aW5lIDxTVFJPTkc+c3RhbmRvdXQ8L1NUUk9ORz4gaXMgdGhlCisgICAgICAgc2FtZSBhcyA8U1RST05HPmF0dHJvbihBX1NUQU5ET1VUKTwvU1RST05HPi4gIFRoZSByb3V0aW5lIDxTVFJPTkc+c3RhbmRlbmQ8L1NUUk9ORz4gIGlzICB0aGUKKyAgICAgICBzYW1lIGFzIDxTVFJPTkc+YXR0cnNldChBX05PUk1BTCk8L1NUUk9ORz4gb3IgPFNUUk9ORz5hdHRyc2V0KDApPC9TVFJPTkc+LCB0aGF0IGlzLCBpdCB0dXJucworICAgICAgIG9mZiBhbGwgYXR0cmlidXRlcy4KKworICAgICAgIFRoZSA8U1RST05HPmF0dHJzZXQ8L1NUUk9ORz4gYW5kIHJlbGF0ZWQgcm91dGluZXMgZG8gIG5vdCAgYWZmZWN0ICB0aGUgIGF0LQorICAgICAgIHRyaWJ1dGVzICB1c2VkICB3aGVuICBlcmFzaW5nIHBvcnRpb25zIG9mIHRoZSB3aW5kb3cuICBTZWUKKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPiBmb3IgZnVuY3Rpb25zIHdoaWNoICBtb2RpZnkgIHRoZSAgYXR0cmlidXRlcworICAgICAgIHVzZWQgZm9yIGVyYXNpbmcgYW5kIGNsZWFyaW5nLgorCisgICAgICAgVGhlICByb3V0aW5lIDxTVFJPTkc+Y29sb3Jfc2V0PC9TVFJPTkc+IHNldHMgdGhlIGN1cnJlbnQgY29sb3Igb2YgdGhlIGdpdmVuCisgICAgICAgd2luZG93IHRvIHRoZSBmb3JlZ3JvdW5kL2JhY2tncm91bmQgY29tYmluYXRpb24gIGRlc2NyaWJlZAorICAgICAgIGJ5ICB0aGUgIGNvbG9yX3BhaXJfbnVtYmVyLiBUaGUgcGFyYW1ldGVyIG9wdHMgaXMgcmVzZXJ2ZWQKKyAgICAgICBmb3IgZnV0dXJlIHVzZSwgYXBwbGljYXRpb25zIG11c3Qgc3VwcGx5IGEgbnVsbCBwb2ludGVyLgorCisgICAgICAgVGhlIHJvdXRpbmUgPFNUUk9ORz53YXR0cl9nZXQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgIGN1cnJlbnQgIGF0dHJpYnV0ZSAgYW5kCisgICAgICAgY29sb3IgcGFpciBmb3IgdGhlIGdpdmVuIHdpbmRvdzsgPFNUUk9ORz5hdHRyX2dldDwvU1RST05HPiByZXR1cm5zIHRoZSBjdXItCisgICAgICAgcmVudCBhdHRyaWJ1dGUgYW5kIGNvbG9yIHBhaXIgZm9yIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+LiAgIFRoZSAgcmVtYWluaW5nCisgICAgICAgPFNUUk9ORz5hdHRyXzwvU1RST05HPiogIGZ1bmN0aW9ucyAgb3BlcmF0ZSAgZXhhY3RseSBsaWtlIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgPFNUUk9ORz5hdHRyPC9TVFJPTkc+KiBmdW5jdGlvbnMsIGV4Y2VwdCB0aGF0IHRoZXkgdGFrZSBhcmd1bWVudHMgIG9mICB0eXBlCisgICAgICAgPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gcmF0aGVyIHRoYW4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgcm91dGluZSA8U1RST05HPmNoZ2F0PC9TVFJPTkc+IGNoYW5nZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBnaXZlbiBudW1iZXIKKyAgICAgICBvZiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IGN1cnNvciAgbG9jYXRpb24gIG9mCisgICAgICAgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4uICAgSXQgIGRvZXMgbm90IHVwZGF0ZSB0aGUgY3Vyc29yIGFuZCBkb2VzIG5vdCBwZXItCisgICAgICAgZm9ybSB3cmFwcGluZy4gIEEgY2hhcmFjdGVyIGNvdW50IG9mIC0xICBvciAgZ3JlYXRlciAgdGhhbgorICAgICAgIHRoZSAgcmVtYWluaW5nIHdpbmRvdyB3aWR0aCBtZWFucyB0byBjaGFuZ2UgYXR0cmlidXRlcyBhbGwKKyAgICAgICB0aGUgd2F5IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIFRoZSA8U1RST05HPndjaGdhdDwvU1RST05HPiAgZnVuYy0KKyAgICAgICB0aW9uIGdlbmVyYWxpemVzIHRoaXMgdG8gYW55IHdpbmRvdzsgdGhlIDxTVFJPTkc+bXZ3Y2hnYXQ8L1NUUk9ORz4gZnVuY3Rpb24KKyAgICAgICBkb2VzIGEgY3Vyc29yIG1vdmUgYmVmb3JlIGFjdGluZy4gIEluIHRoZXNlIGZ1bmN0aW9ucywgdGhlCisgICAgICAgY29sb3IgIGFyZ3VtZW50IGlzIGEgY29sb3ItcGFpciBpbmRleCAoYXMgaW4gdGhlIGZpcnN0IGFyLQorICAgICAgIGd1bWVudCBvZiA8RU0+aW5pdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPiwgc2VlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4pLiAgVGhlIDxTVFJPTkc+b3B0czwvU1RST05HPiAgYXJndS0KKyAgICAgICBtZW50IGlzIG5vdCBwcmVzZW50bHkgdXNlZCwgYnV0IGlzIHJlc2VydmVkIGZvciB0aGUgZnV0dXJlCisgICAgICAgKGxlYXZlIGl0IDxTVFJPTkc+TlVMTDwvU1RST05HPikuCisKKyAgIDxTVFJPTkc+QXR0cmlidXRlczwvU1RST05HPgorICAgICAgIFRoZSBmb2xsb3dpbmcgdmlkZW8gYXR0cmlidXRlcywgZGVmaW5lZCBpbiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4sIGNhbgorICAgICAgIGJlIHBhc3NlZCB0byB0aGUgcm91dGluZXMgPFNUUk9ORz5hdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+YXR0cm9mZjwvU1RST05HPiwgYW5kIDxTVFJPTkc+YXR0cnNldDwvU1RST05HPiwgb3IKKyAgICAgICBPUidkIHdpdGggdGhlIGNoYXJhY3RlcnMgcGFzc2VkIHRvIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4uCisKKworICAgICAgICA8U1RST05HPkFfTk9STUFMPC9TVFJPTkc+ICAgICAgICBOb3JtYWwgZGlzcGxheSAobm8gaGlnaGxpZ2h0KQorICAgICAgICA8U1RST05HPkFfU1RBTkRPVVQ8L1NUUk9ORz4gICAgICBCZXN0IGhpZ2hsaWdodGluZyBtb2RlIG9mIHRoZSB0ZXJtaW5hbC4KKyAgICAgICAgPFNUUk9ORz5BX1VOREVSTElORTwvU1RST05HPiAgICAgVW5kZXJsaW5pbmcKKyAgICAgICAgPFNUUk9ORz5BX1JFVkVSU0U8L1NUUk9ORz4gICAgICAgUmV2ZXJzZSB2aWRlbworICAgICAgICA8U1RST05HPkFfQkxJTks8L1NUUk9ORz4gICAgICAgICBCbGlua2luZworICAgICAgICA8U1RST05HPkFfRElNPC9TVFJPTkc+ICAgICAgICAgICBIYWxmIGJyaWdodAorICAgICAgICA8U1RST05HPkFfQk9MRDwvU1RST05HPiAgICAgICAgICBFeHRyYSBicmlnaHQgb3IgYm9sZAorICAgICAgICA8U1RST05HPkFfUFJPVEVDVDwvU1RST05HPiAgICAgICBQcm90ZWN0ZWQgbW9kZQorICAgICAgICA8U1RST05HPkFfSU5WSVM8L1NUUk9ORz4gICAgICAgICBJbnZpc2libGUgb3IgYmxhbmsgbW9kZQorICAgICAgICA8U1RST05HPkFfQUxUQ0hBUlNFVDwvU1RST05HPiAgICBBbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorICAgICAgICA8U1RST05HPkFfQ0hBUlRFWFQ8L1NUUk9ORz4gICAgICBCaXQtbWFzayB0byBleHRyYWN0IGEgY2hhcmFjdGVyCisgICAgICAgIDxTVFJPTkc+Q09MT1JfUEFJUig8L1NUUk9ORz48RU0+bjwvRU0+PFNUUk9ORz4pPC9TVFJPTkc+ICAgQ29sb3ItcGFpciBudW1iZXIgPEVNPm48L0VNPgorCisgICAgICAgVGhlIGZvbGxvd2luZyBtYWNybyBpcyB0aGUgcmV2ZXJzZSBvZiA8U1RST05HPkNPTE9SX1BBSVIoPC9TVFJPTkc+PEVNPm48L0VNPjxTVFJPTkc+KTwvU1RST05HPjoKKworICAgICAgIDxTVFJPTkc+UEFJUl9OVU1CRVIoPC9TVFJPTkc+PEVNPmF0dHJzPC9FTT4pIFJldHVybnMgdGhlIHBhaXIgbnVtYmVyIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPFNUUk9ORz5DT0xPUl9QQUlSKDwvU1RST05HPjxFTT5uPC9FTT48U1RST05HPik8L1NUUk9ORz4gYXR0cmlidXRlLgorCisgICAgICAgVGhlIHJldHVybiB2YWx1ZXMgb2YgbWFueSBvZiB0aGVzZSByb3V0aW5lcyBhcmUgbm90ICBtZWFuLQorICAgICAgIGluZ2Z1bCAodGhleSBhcmUgaW1wbGVtZW50ZWQgYXMgbWFjcm8tZXhwYW5kZWQgYXNzaWdubWVudHMKKyAgICAgICBhbmQgc2ltcGx5IHJldHVybiB0aGVpciBhcmd1bWVudCkuICBUaGUgU1ZyNCAgbWFudWFsICBwYWdlCisgICAgICAgY2xhaW1zIChmYWxzZWx5KSB0aGF0IHRoZXNlIHJvdXRpbmVzIGFsd2F5cyByZXR1cm4gPFNUUk9ORz4xPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgIHRoYXQgIDxTVFJPTkc+YXR0cm9mZjwvU1RST05HPiwgIDxTVFJPTkc+d2F0dHJvZmY8L1NUUk9ORz4sICA8U1RST05HPmF0dHJvbjwvU1RST05HPiwgPFNUUk9ORz53YXR0cm9uPC9TVFJPTkc+LCA8U1RST05HPmF0dHJzZXQ8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz53YXR0cnNldDwvU1RST05HPiwgPFNUUk9ORz5zdGFuZGVuZDwvU1RST05HPiBhbmQgPFNUUk9ORz5zdGFuZG91dDwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisgICAgICAgPFNUUk9ORz5DT0xPUl9QQUlSPC9TVFJPTkc+IHZhbHVlcyBjYW4gb25seSBiZSBPUidkIHdpdGggYXR0cmlidXRlcyBpZiAgdGhlCisgICAgICAgcGFpciAgbnVtYmVyICBpcyAgbGVzcyAgdGhhbiAyNTYuICBUaGUgYWx0ZXJuYXRlIGZ1bmN0aW9ucworICAgICAgIHN1Y2ggYXMgPFNUUk9ORz5jb2xvcl9zZXQ8L1NUUk9ORz4gY2FuIHBhc3MgYSBjb2xvciAgcGFpciAgdmFsdWUgIGRpcmVjdGx5LgorICAgICAgIEhvd2V2ZXIsICBuY3Vyc2VzICBBQkkgNCBhbmQgNSBzaW1wbHkgT1IgdGhpcyB2YWx1ZSB3aXRoaW4KKyAgICAgICB0aGUgYWx0ZXJuYXRlIGZ1bmN0aW9ucy4gIFlvdSBtdXN0IHVzZSBuY3Vyc2VzICBBQkkgIDYgIHRvCisgICAgICAgc3VwcG9ydCBtb3JlIHRoYW4gMjU2IGNvbG9yIHBhaXJzLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LiAgVGhlIHN0YW5kYXJkICBkZWZpbmVkICB0aGUgIGRlZGljYXRlZCAgdHlwZSAgZm9yCisgICAgICAgaGlnaGxpZ2h0cywgIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+LCAgd2hpY2ggaXMgbm90IGRlZmluZWQgaW4gU1ZyNCBjdXJzZXMuCisgICAgICAgVGhlIGZ1bmN0aW9ucyB0YWtpbmcgPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gYXJndW1lbnRzICBhcmUgIG5vdCAgc3VwcG9ydGVkCisgICAgICAgdW5kZXIgU1ZyNC4KKworICAgICAgIFRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIHN0YXRlcyB0aGF0IHdoZXRoZXIgdGhlIHRyYWRpdGlvbi0KKyAgICAgICBhbCBmdW5jdGlvbnMgIDxTVFJPTkc+YXR0cm9uPC9TVFJPTkc+LzxTVFJPTkc+YXR0cm9mZjwvU1RST05HPi88U1RST05HPmF0dHJzZXQ8L1NUUk9ORz4gIGNhbiAgbWFuaXB1bGF0ZSAgYXQtCisgICAgICAgdHJpYnV0ZXMgIG90aGVyICB0aGFuICA8U1RST05HPkFfQkxJTks8L1NUUk9ORz4sICA8U1RST05HPkFfQk9MRDwvU1RST05HPiwgPFNUUk9ORz5BX0RJTTwvU1RST05HPiwgPFNUUk9ORz5BX1JFVkVSU0U8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5BX1NUQU5ET1VUPC9TVFJPTkc+LCBvciA8U1RST05HPkFfVU5ERVJMSU5FPC9TVFJPTkc+IGlzICJ1bnNwZWNpZmllZCIuICAgVW5kZXIgIHRoaXMKKyAgICAgICBpbXBsZW1lbnRhdGlvbiAgYXMgIHdlbGwgIGFzICBTVnI0IGN1cnNlcywgdGhlc2UgZnVuY3Rpb25zCisgICAgICAgY29ycmVjdGx5IG1hbmlwdWxhdGUgYWxsIG90aGVyICBoaWdobGlnaHRzICAoc3BlY2lmaWNhbGx5LAorICAgICAgIDxTVFJPTkc+QV9BTFRDSEFSU0VUPC9TVFJPTkc+LCA8U1RST05HPkFfUFJPVEVDVDwvU1RST05HPiwgYW5kIDxTVFJPTkc+QV9JTlZJUzwvU1RST05HPikuCisKKyAgICAgICBYU0kgIEN1cnNlcyBhZGRlZCB0aGUgbmV3IGVudHJ5IHBvaW50cywgPFNUUk9ORz5hdHRyX2dldDwvU1RST05HPiwgPFNUUk9ORz5hdHRyX29uPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+YXR0cl9vZmY8L1NUUk9ORz4sIDxTVFJPTkc+YXR0cl9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+d2F0dHJfb248L1NUUk9ORz4sIDxTVFJPTkc+d2F0dHJfb2ZmPC9TVFJPTkc+LCAgPFNUUk9ORz53YXR0cl9nZXQ8L1NUUk9ORz4sICA8U1RST05HPndhdC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnRyX3NldDwvU1RST05HPi4gICBUaGVzZSAgYXJlIGludGVuZGVkIHRvIHdvcmsgd2l0aCBhIG5ldyBzZXJpZXMgb2YKKyAgICAgICBoaWdobGlnaHQgbWFjcm9zIHByZWZpeGVkIHdpdGggPFNUUk9ORz5XQV88L1NUUk9ORz4uCisKKyAgICAgICBPbGRlciB2ZXJzaW9ucyBvZiB0aGlzIGxpYnJhcnkgZGlkIG5vdCBmb3JjZSBhbiB1cGRhdGUgIG9mCisgICAgICAgdGhlICBzY3JlZW4gd2hlbiBjaGFuZ2luZyB0aGUgYXR0cmlidXRlcy4gIFVzZSA8U1RST05HPnRvdWNod2luPC9TVFJPTkc+IHRvCisgICAgICAgZm9yY2UgdGhlIHNjcmVlbiB0byBtYXRjaCB0aGUgdXBkYXRlZCBhdHRyaWJ1dGVzLgorCisKKyAgICAgICAgPFNUUk9ORz5XQV9OT1JNQUw8L1NUUk9ORz4gICAgICAgTm9ybWFsIGRpc3BsYXkgKG5vIGhpZ2hsaWdodCkKKyAgICAgICAgPFNUUk9ORz5XQV9TVEFORE9VVDwvU1RST05HPiAgICAgQmVzdCBoaWdobGlnaHRpbmcgbW9kZSBvZiB0aGUgdGVybWluYWwuCisgICAgICAgIDxTVFJPTkc+V0FfVU5ERVJMSU5FPC9TVFJPTkc+ICAgIFVuZGVybGluaW5nCisgICAgICAgIDxTVFJPTkc+V0FfUkVWRVJTRTwvU1RST05HPiAgICAgIFJldmVyc2UgdmlkZW8KKyAgICAgICAgPFNUUk9ORz5XQV9CTElOSzwvU1RST05HPiAgICAgICAgQmxpbmtpbmcKKyAgICAgICAgPFNUUk9ORz5XQV9ESU08L1NUUk9ORz4gICAgICAgICAgSGFsZiBicmlnaHQKKyAgICAgICAgPFNUUk9ORz5XQV9CT0xEPC9TVFJPTkc+ICAgICAgICAgRXh0cmEgYnJpZ2h0IG9yIGJvbGQKKyAgICAgICAgPFNUUk9ORz5XQV9BTFRDSEFSU0VUPC9TVFJPTkc+ICAgQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKworICAgICAgIFRoZSBYU0kgY3Vyc2VzIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGVhY2ggcGFpciBvZiBjb3JyZS0KKyAgICAgICBzcG9uZGluZyAgPFNUUk9ORz5BXzwvU1RST05HPiAgYW5kIDxTVFJPTkc+V0FfPC9TVFJPTkc+LXVzaW5nIGZ1bmN0aW9ucyBvcGVyYXRlcyBvbiB0aGUgc2FtZQorICAgICAgIGN1cnJlbnQtaGlnaGxpZ2h0IGluZm9ybWF0aW9uLgorCisgICAgICAgVGhlIFhTSSBzdGFuZGFyZCBleHRlbmRlZCBjb25mb3JtYW5jZSBsZXZlbCBhZGRzIG5ldyBoaWdoLQorICAgICAgIGxpZ2h0cyA8U1RST05HPkFfSE9SSVpPTlRBTDwvU1RST05HPiwgPFNUUk9ORz5BX0xFRlQ8L1NUUk9ORz4sIDxTVFJPTkc+QV9MT1c8L1NUUk9ORz4sIDxTVFJPTkc+QV9SSUdIVDwvU1RST05HPiwgPFNUUk9ORz5BX1RPUDwvU1RST05HPiwgPFNUUk9ORz5BX1ZFUi08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPlRJQ0FMPC9TVFJPTkc+IChhbmQgY29ycmVzcG9uZGluZyA8U1RST05HPldBXzwvU1RST05HPiBtYWNyb3MgZm9yIGVhY2gpICB3aGljaCAgdGhpcworICAgICAgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCBzdXBwb3J0LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgIHJvdXRpbmVzICByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5PSzwvU1RST05HPiBvbiBzdWNjZXNzLCBvciA8U1RST05HPkVSUjwvU1RST05HPiBvbgorICAgICAgIGZhaWx1cmUuCisKKyAgICAgICBYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLgorCisgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgcG9pbnRlcgorICAgICAgIGlzICBudWxsLiAgVGhlIDxTVFJPTkc+d2NvbG9yX3NldDwvU1RST05HPiBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZQorICAgICAgIGNvbG9yICBwYWlyICBwYXJhbWV0ZXIgIGlzICBvdXRzaWRlICB0aGUgICByYW5nZSAgIDAuLkNPTC0KKyAgICAgICBPUl9QQUlSUy0xLiAgIFRoaXMgIGltcGxlbWVudGF0aW9uICBhbHNvIHByb3ZpZGVzIDxTVFJPTkc+Z2V0YXR0cnM8L1NUUk9ORz4KKyAgICAgICBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGN1cnNlcy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+LCAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19iZWVwLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19iZWVwLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxYWNjMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2JlZXAuM3guaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2JlZXAuM3gsdiAxLjEwIDIwMDUvMDEvMDggMTc6NTU6NTEgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19iZWVwIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19iZWVwIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JlZXAuM3guaHRtbCI+Y3Vyc19iZWVwKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmVlcC4zeC5odG1sIj5jdXJzX2JlZXAoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+YmVlcDwvU1RST05HPiwgPFNUUk9ORz5mbGFzaDwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGJlbGwgYW5kIHNjcmVlbiBmbGFzaCByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZXAodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5mbGFzaCh2b2lkKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5iZWVwPC9TVFJPTkc+IGFuZCA8U1RST05HPmZsYXNoPC9TVFJPTkc+IHJvdXRpbmVzIGFyZSB1c2VkIHRvIGFsZXJ0IHRoZSB0ZXJtaW5hbAorICAgICAgIHVzZXIuICBUaGUgcm91dGluZSA8U1RST05HPmJlZXA8L1NUUk9ORz4gc291bmRzIGFuICBhdWRpYmxlICBhbGFybSAgb24gIHRoZQorICAgICAgIHRlcm1pbmFsLCAgaWYgIHBvc3NpYmxlOyAgb3RoZXJ3aXNlICBpdCBmbGFzaGVzIHRoZSBzY3JlZW4KKyAgICAgICAodmlzaWJsZSBiZWxsKS4gIFRoZSByb3V0aW5lIDxTVFJPTkc+Zmxhc2g8L1NUUk9ORz4gZmxhc2hlcyB0aGUgc2NyZWVuLCBhbmQKKyAgICAgICBpZiAgdGhhdCAgaXMgIG5vdCAgcG9zc2libGUsIHNvdW5kcyB0aGUgYWxlcnQuICBJZiBuZWl0aGVyCisgICAgICAgYWxlcnQgaXMgcG9zc2libGUsIG5vdGhpbmcgaGFwcGVucy4gIE5lYXJseSBhbGwgIHRlcm1pbmFscworICAgICAgIGhhdmUgIGFuICBhdWRpYmxlICBhbGVydCAoYmVsbCBvciBiZWVwKSwgYnV0IG9ubHkgc29tZSBjYW4KKyAgICAgICBmbGFzaCB0aGUgc2NyZWVuLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPiBpZiB0aGV5ICBzdWNjZWVkICBpbiAgYmVlcGluZyAgb3IKKyAgICAgICBmbGFzaGluZywgPFNUUk9ORz5FUlI8L1NUUk9ORz4gb3RoZXJ3aXNlLgorCisKKzwvUFJFPgorPEgyPkVYVEVOU0lPTlM8L0gyPjxQUkU+CisgICAgICAgU1ZyNCdzICBiZWVwICBhbmQgZmxhc2ggcm91dGluZXMgYWx3YXlzIHJldHVybmVkIDxTVFJPTkc+T0s8L1NUUk9ORz4sIHNvIGl0CisgICAgICAgd2FzIG5vdCBwb3NzaWJsZSB0byB0ZWxsIHdoZW4gdGhlIGJlZXAgb3IgZmxhc2ggZmFpbGVkLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSAgNC4gIExpa2UgU1ZyNCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhleSBhbHdheXMgcmV0dXJuCisgICAgICAgPFNUUk9ORz5PSzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmVlcC4zeC5odG1sIj5jdXJzX2JlZXAoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19ia2dkLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczZjkwZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2JrZ2QuM3guaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2JrZ2QuM3gsdiAxLjE5IDIwMDMvMTIvMjcgMTg6NTA6NDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19ia2dkIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19ia2dkIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+YmtnZHNldDwvU1RST05HPiwgIDxTVFJPTkc+d2JrZ2RzZXQ8L1NUUk9ORz4sICA8U1RST05HPmJrZ2Q8L1NUUk9ORz4sICA8U1RST05HPndia2dkPC9TVFJPTkc+LCA8U1RST05HPmdldGJrZ2Q8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cKKyAgICAgICBiYWNrZ3JvdW5kIG1hbmlwdWxhdGlvbiByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5ia2dkc2V0KGNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz53YmtnZHNldChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJrZ2QoY2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2JrZ2QoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5nZXRia2dkKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmJrZ2RzZXQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2JrZ2RzZXQ8L1NUUk9ORz4gIHJvdXRpbmVzICBtYW5pcHVsYXRlICB0aGUgIGJhY2stCisgICAgICAgZ3JvdW5kICBvZiAgdGhlICBuYW1lZCB3aW5kb3cuICBUaGUgd2luZG93IGJhY2tncm91bmQgaXMgYQorICAgICAgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IGNvbnNpc3Rpbmcgb2YgYW55IGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgIChpLmUuLAorICAgICAgIHJlbmRpdGlvbikgIGFuZCAgYSAgY2hhcmFjdGVyLiAgIFRoZSBhdHRyaWJ1dGUgcGFydCBvZiB0aGUKKyAgICAgICBiYWNrZ3JvdW5kIGlzIGNvbWJpbmVkIChPUidlZCkgd2l0aCBhbGwgbm9uLWJsYW5rICBjaGFyYWMtCisgICAgICAgdGVycyAgdGhhdCAgYXJlIHdyaXR0ZW4gaW50byB0aGUgd2luZG93IHdpdGggPFNUUk9ORz53YWRkY2g8L1NUUk9ORz4uICBCb3RoCisgICAgICAgdGhlIGNoYXJhY3RlciBhbmQgYXR0cmlidXRlIHBhcnRzIG9mICB0aGUgIGJhY2tncm91bmQgIGFyZQorICAgICAgIGNvbWJpbmVkICAgd2l0aCAgdGhlICBibGFuayAgY2hhcmFjdGVycy4gICBUaGUgIGJhY2tncm91bmQKKyAgICAgICBiZWNvbWVzIGEgcHJvcGVydHkgb2YgdGhlIGNoYXJhY3RlciAgYW5kICBtb3ZlcyAgd2l0aCAgdGhlCisgICAgICAgY2hhcmFjdGVyICAgdGhyb3VnaCAgIGFueSAgIHNjcm9sbGluZyAgIGFuZCAgaW5zZXJ0L2RlbGV0ZQorICAgICAgIGxpbmUvY2hhcmFjdGVyIG9wZXJhdGlvbnMuCisKKyAgICAgICBUbyB0aGUgZXh0ZW50ICBwb3NzaWJsZSAgb24gIGEgIHBhcnRpY3VsYXIgIHRlcm1pbmFsLCAgdGhlCisgICAgICAgYXR0cmlidXRlICBwYXJ0ICBvZiAgdGhlICBiYWNrZ3JvdW5kICBpcyAgZGlzcGxheWVkIGFzIHRoZQorICAgICAgIGdyYXBoaWMgcmVuZGl0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgcHV0IG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5ia2dkPC9TVFJPTkc+IGFuZCA8U1RST05HPndia2dkPC9TVFJPTkc+IGZ1bmN0aW9ucyBzZXQgdGhlICBiYWNrZ3JvdW5kICBwcm9wZXJ0eQorICAgICAgIG9mICB0aGUgIGN1cnJlbnQgIG9yICBzcGVjaWZpZWQgd2luZG93IGFuZCB0aGVuIGFwcGx5IHRoaXMKKyAgICAgICBzZXR0aW5nIHRvIGV2ZXJ5IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IHdpbmRvdzoKKworICAgICAgICAgICAgICBUaGUgcmVuZGl0aW9uIG9mIGV2ZXJ5IGNoYXJhY3RlciBvbiB0aGUgIHNjcmVlbiAgaXMKKyAgICAgICAgICAgICAgY2hhbmdlZCB0byB0aGUgbmV3IGJhY2tncm91bmQgcmVuZGl0aW9uLgorCisgICAgICAgICAgICAgIFdoZXJldmVyICB0aGUgIGZvcm1lciBiYWNrZ3JvdW5kIGNoYXJhY3RlciBhcHBlYXJzLAorICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIHRoZSBuZXcgYmFja2dyb3VuZCBjaGFyYWN0ZXIuCisKKyAgICAgICBUaGUgPFNUUk9ORz5nZXRia2dkPC9TVFJPTkc+IGZ1bmN0aW9uIHJldHVybnMgdGhlICBnaXZlbiAgd2luZG93J3MgIGN1cnJlbnQKKyAgICAgICBiYWNrZ3JvdW5kIGNoYXJhY3Rlci9hdHRyaWJ1dGUgcGFpci4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlICByb3V0aW5lcyAgPFNUUk9ORz5ia2dkPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz53YmtnZDwvU1RST05HPiByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5PSzwvU1RST05HPi4gIFRoZQorICAgICAgIFNWcjQuMCBtYW51YWwgc2F5cyAib3IgYSBub24tbmVnYXRpdmUgaW50ZWdlciAgaWYgIDxTVFJPTkc+aW1tZWRvazwvU1RST05HPgorICAgICAgIGlzIHNldCIsIGJ1dCB0aGlzIGFwcGVhcnMgdG8gYmUgYW4gZXJyb3IuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+YmtnZHNldDwvU1RST05HPiBhbmQgPFNUUk9ORz5ia2dkPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLAorICAgICAgIElzc3VlIDQuICBJdCBzcGVjaWZpZXMgdGhhdCA8U1RST05HPmJrZ2Q8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2JrZ2Q8L1NUUk9ORz4gcmV0dXJuICA8U1RST05HPkVSUjwvU1RST05HPiAgb24KKyAgICAgICBmYWlsdXJlLiAgYnV0IGdpdmVzIG5vIGZhaWx1cmUgY29uZGl0aW9ucy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPiwgICA8U1RST05HPmN1cnNfb3V0LTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPm9wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2JrZ3JuZC4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYmtncm5kLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3NjFiNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2JrZ3JuZC4zeC5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYmtncm5kLjN4LHYgMS4zIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19ia2dybmQgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2JrZ3JuZCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dybmQuM3guaHRtbCI+Y3Vyc19ia2dybmQoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ3JuZC4zeC5odG1sIj5jdXJzX2JrZ3JuZCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5ia2dybmQ8L1NUUk9ORz4sICA8U1RST05HPndia2dybmQ8L1NUUk9ORz4sICA8U1RST05HPmJrZ3JuZHNldDwvU1RST05HPiwgPFNUUk9ORz53Ymtncm5kc2V0PC9TVFJPTkc+LCA8U1RST05HPmdldGJrZ3JuZDwvU1RST05HPiwgPFNUUk9ORz53Z2V0LTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ymtncm5kPC9TVFJPTkc+IC0gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gIHdpbmRvdyAgY29tcGxleCAgYmFja2dyb3VuZCAgbWFuaXB1bGF0aW9uCisgICAgICAgcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ia2dybmQoPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndia2dybmQoPC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Ymtncm5kc2V0KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4gPFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPndia2dybmRzZXQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRia2dybmQoY2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Z2V0Ymtncm5kKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5ia2dybmRzZXQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2JrZ3JuZHNldDwvU1RST05HPiByb3V0aW5lcyBtYW5pcHVsYXRlIHRoZSBiYWNrLQorICAgICAgIGdyb3VuZCBvZiB0aGUgbmFtZWQgd2luZG93LiAgVGhlIHdpbmRvdyAgYmFja2dyb3VuZCAgaXMgIGEKKyAgICAgICA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gY29uc2lzdGluZyBvZiBhbnkgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyAoaS5lLiwKKyAgICAgICByZW5kaXRpb24pIGFuZCBhIGNvbXBsZXggY2hhcmFjdGVyLiAgVGhlIGF0dHJpYnV0ZSBwYXJ0IG9mCisgICAgICAgdGhlICBiYWNrZ3JvdW5kICBpcyAgY29tYmluZWQgIChPUidlZCkgIHdpdGggYWxsIG5vbi1ibGFuaworICAgICAgIGNoYXJhY3RlcnMgdGhhdCBhcmUgd3JpdHRlbiBpbnRvIHRoZSB3aW5kb3cgIHdpdGggIDxTVFJPTkc+d2FkZGNoPC9TVFJPTkc+LgorICAgICAgIEJvdGggIHRoZSAgY2hhcmFjdGVyIGFuZCBhdHRyaWJ1dGUgcGFydHMgb2YgdGhlIGJhY2tncm91bmQKKyAgICAgICBhcmUgY29tYmluZWQgd2l0aCB0aGUgYmxhbmsgIGNoYXJhY3RlcnMuICAgVGhlICBiYWNrZ3JvdW5kCisgICAgICAgYmVjb21lcyAgYSAgcHJvcGVydHkgIG9mICB0aGUgY2hhcmFjdGVyIGFuZCBtb3ZlcyB3aXRoIHRoZQorICAgICAgIGNoYXJhY3RlciAgdGhyb3VnaCAgIGFueSAgIHNjcm9sbGluZyAgIGFuZCAgIGluc2VydC9kZWxldGUKKyAgICAgICBsaW5lL2NoYXJhY3RlciBvcGVyYXRpb25zLgorCisgICAgICAgVG8gIHRoZSAgZXh0ZW50ICBwb3NzaWJsZSAgb24gIGEgIHBhcnRpY3VsYXIgdGVybWluYWwsIHRoZQorICAgICAgIGF0dHJpYnV0ZSBwYXJ0IG9mICB0aGUgIGJhY2tncm91bmQgIGlzICBkaXNwbGF5ZWQgIGFzICB0aGUKKyAgICAgICBncmFwaGljIHJlbmRpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIHB1dCBvbiB0aGUgc2NyZWVuLgorCisgICAgICAgVGhlICA8U1RST05HPmJrZ3JuZDwvU1RST05HPiBhbmQgPFNUUk9ORz53Ymtncm5kPC9TVFJPTkc+IGZ1bmN0aW9ucyBzZXQgdGhlIGJhY2tncm91bmQgcHJvcC0KKyAgICAgICBlcnR5IG9mIHRoZSBjdXJyZW50IG9yIHNwZWNpZmllZCAgd2luZG93ICBhbmQgIHRoZW4gIGFwcGx5CisgICAgICAgdGhpcyBzZXR0aW5nIHRvIGV2ZXJ5IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IHdpbmRvdzoKKworICAgICAgICAgICAgICBUaGUgIHJlbmRpdGlvbiAgb2YgZXZlcnkgY2hhcmFjdGVyIG9uIHRoZSBzY3JlZW4gaXMKKyAgICAgICAgICAgICAgY2hhbmdlZCB0byB0aGUgbmV3IGJhY2tncm91bmQgcmVuZGl0aW9uLgorCisgICAgICAgICAgICAgIFdoZXJldmVyIHRoZSBmb3JtZXIgYmFja2dyb3VuZCAgY2hhcmFjdGVyICBhcHBlYXJzLAorICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIHRoZSBuZXcgYmFja2dyb3VuZCBjaGFyYWN0ZXIuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+Z2V0Ymtncm5kPC9TVFJPTkc+IGZ1bmN0aW9uIHJldHVybnMgdGhlIGdpdmVuIHdpbmRvdydzIGN1cnJlbnQKKyAgICAgICBiYWNrZ3JvdW5kIGNoYXJhY3Rlci9hdHRyaWJ1dGUgcGFpciB2aWEgdGhlIDxTVFJPTkc+d2NoPC9TVFJPTkc+IHBvaW50ZXIuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+Ymtncm5kPC9TVFJPTkc+LCA8U1RST05HPmJrZ3JuZHNldDwvU1RST05HPiwgYW5kIDxTVFJPTkc+Z2V0Ymtncm5kPC9TVFJPTkc+IG1heSBiZSAgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPmJrZ3JuZHNldDwvU1RST05HPiAgYW5kICA8U1RST05HPndia2dybmRzZXQ8L1NUUk9ORz4gIHJvdXRpbmVzICBkbyBub3QgcmV0dXJuIGEKKyAgICAgICB2YWx1ZS4KKworICAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGUgb3RoZXIgZnVuY3Rpb25zIHJldHVybiA8U1RST05HPk9LPC9TVFJPTkc+LgorICAgICAgIE90aGVyd2lzZSwgIHRoZXkgIHJldHVybiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4uICAgQSAgbnVsbCB3aW5kb3cgcG9pbnRlciBpcworICAgICAgIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtncm5kLjN4Lmh0bWwiPmN1cnNfYmtncm5kKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19ib3JkZXIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg0ODI3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYm9yZGVyLjN4Lmh0bWwKQEAgLTAsMCArMSwxNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19ib3JkZXIuM3gsdiAxLjE5IDIwMDcvMDIvMjQgMTY6MTU6MzggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19ib3JkZXIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2JvcmRlciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5ib3JkZXI8L1NUUk9ORz4sIDxTVFJPTkc+d2JvcmRlcjwvU1RST05HPiwgPFNUUk9ORz5ib3g8L1NUUk9ORz4sIDxTVFJPTkc+aGxpbmU8L1NUUk9ORz4sIDxTVFJPTkc+d2hsaW5lPC9TVFJPTkc+LCA8U1RST05HPnZsaW5lPC9TVFJPTkc+LCA8U1RST05HPnd2bGluZTwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12aGxpbmU8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aGxpbmU8L1NUUk9ORz4sIDxTVFJPTkc+bXZ2bGluZTwvU1RST05HPiwgPFNUUk9ORz5tdnd2bGluZTwvU1RST05HPiAtIGNyZWF0ZSA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIGJvcmRlcnMsIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGxpbmVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJvcmRlcihjaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5scyw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5ycyw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz50cyw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5icyw8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPnRsLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPnRyLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmJsLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmJyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndib3JkZXIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5scyw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5ycyw8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPnRzLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmJzLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPnRsLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPnRyLDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+YmwsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+YnIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Ym94KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+dmVyY2gsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+aG9yY2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aGxpbmUoY2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aGxpbmUoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZsaW5lKGNodHlwZTwvU1RST05HPiA8U1RST05HPmNoLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3ZsaW5lKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmhsaW5lKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2hsaW5lKFdJTkRPVzwvU1RST05HPiA8U1RST05HPiosPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ2bGluZShpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdnd2bGluZShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5ib3JkZXI8L1NUUk9ORz4sIDxTVFJPTkc+d2JvcmRlcjwvU1RST05HPiBhbmQgPFNUUk9ORz5ib3g8L1NUUk9ORz4gcm91dGluZXMgZHJhdyBhIGJveCBhcm91bmQgdGhlCisgICAgICAgZWRnZXMgb2YgYSB3aW5kb3cuICBPdGhlciB0aGFuIHRoZSB3aW5kb3csICBlYWNoICBhcmd1bWVudAorICAgICAgIGlzIGEgY2hhcmFjdGVyIHdpdGggYXR0cmlidXRlczoKKworICAgICAgICAgICAgICA8RU0+bHM8L0VNPiAtIGxlZnQgc2lkZSwKKyAgICAgICAgICAgICAgPEVNPnJzPC9FTT4gLSByaWdodCBzaWRlLAorICAgICAgICAgICAgICA8RU0+dHM8L0VNPiAtIHRvcCBzaWRlLAorICAgICAgICAgICAgICA8RU0+YnM8L0VNPiAtIGJvdHRvbSBzaWRlLAorICAgICAgICAgICAgICA8RU0+dGw8L0VNPiAtIHRvcCBsZWZ0LWhhbmQgY29ybmVyLAorICAgICAgICAgICAgICA8RU0+dHI8L0VNPiAtIHRvcCByaWdodC1oYW5kIGNvcm5lciwKKyAgICAgICAgICAgICAgPEVNPmJsPC9FTT4gLSBib3R0b20gbGVmdC1oYW5kIGNvcm5lciwgYW5kCisgICAgICAgICAgICAgIDxFTT5icjwvRU0+IC0gYm90dG9tIHJpZ2h0LWhhbmQgY29ybmVyLgorCisgICAgICAgSWYgIGFueSBvZiB0aGVzZSBhcmd1bWVudHMgaXMgemVybywgdGhlbiB0aGUgY29ycmVzcG9uZGluZworICAgICAgIGRlZmF1bHQgdmFsdWVzIChkZWZpbmVkIGluIDxTVFJPTkc+Y3Vyc2VzLmg8L1NUUk9ORz4pIGFyZSB1c2VkIGluc3RlYWQ6CisKKyAgICAgICAgICAgICAgPFNUUk9ORz5BQ1NfVkxJTkU8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+QUNTX1ZMSU5FPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPkFDU19ITElORTwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5BQ1NfSExJTkU8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+QUNTX1VMQ09STkVSPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPkFDU19VUkNPUk5FUjwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5BQ1NfTExDT1JORVI8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+QUNTX0xSQ09STkVSPC9TVFJPTkc+LgorCisgICAgICAgPFNUUk9ORz5ib3goPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxFTT52ZXJjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxFTT5ob3JjaDwvRU0+PFNUUk9ORz4pPC9TVFJPTkc+IGlzIGEgc2hvcnRoYW5kICBmb3IgIHRoZSAgZm9sbG93aW5nCisgICAgICAgY2FsbDogIDxTVFJPTkc+d2JvcmRlcig8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gIDxFTT52ZXJjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+ICA8RU0+dmVyY2g8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8RU0+aG9yY2g8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8RU0+aG9yY2g8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPjAsPC9TVFJPTkc+IDxTVFJPTkc+MCw8L1NUUk9ORz4gPFNUUk9ORz4wLDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+MCk8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5obGluZTwvU1RST05HPiBhbmQgPFNUUk9ORz53aGxpbmU8L1NUUk9ORz4gZnVuY3Rpb25zIGRyYXcgYSBob3Jpem9udGFsIChsZWZ0ICB0bworICAgICAgIHJpZ2h0KSAgbGluZSB1c2luZyA8RU0+Y2g8L0VNPiBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaS0KKyAgICAgICB0aW9uIGluIHRoZSB3aW5kb3cuICBUaGUgY3VycmVudCBjdXJzb3IgIHBvc2l0aW9uICBpcyAgbm90CisgICAgICAgY2hhbmdlZC4gICBUaGUgIGxpbmUgIGlzICBhdCBtb3N0IDxFTT5uPC9FTT4gY2hhcmFjdGVycyBsb25nLCBvciBhcworICAgICAgIG1hbnkgYXMgZml0IGludG8gdGhlIHdpbmRvdy4KKworICAgICAgIFRoZSA8U1RST05HPnZsaW5lPC9TVFJPTkc+IGFuZCA8U1RST05HPnd2bGluZTwvU1RST05HPiBmdW5jdGlvbnMgZHJhdyAgYSAgdmVydGljYWwgICh0b3AgIHRvCisgICAgICAgYm90dG9tKSBsaW5lIHVzaW5nIDxFTT5jaDwvRU0+IHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpLQorICAgICAgIHRpb24gaW4gdGhlIHdpbmRvdy4gIFRoZSBjdXJyZW50IGN1cnNvciAgcG9zaXRpb24gIGlzICBub3QKKyAgICAgICBjaGFuZ2VkLiAgIFRoZSAgbGluZSAgaXMgIGF0IG1vc3QgPEVNPm48L0VNPiBjaGFyYWN0ZXJzIGxvbmcsIG9yIGFzCisgICAgICAgbWFueSBhcyBmaXQgaW50byB0aGUgd2luZG93LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyICA8U1RST05HPk9LPC9TVFJPTkc+LiAgIFRoZSAgU1ZyNC4wICBtYW51YWwKKyAgICAgICBzYXlzICAib3IgIGEgIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGlmIDxTVFJPTkc+aW1tZWRvazwvU1RST05HPiBpcyBzZXQiLCBidXQKKyAgICAgICB0aGlzIGFwcGVhcnMgdG8gYmUgYW4gZXJyb3IuCisKKyAgICAgICBYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgVGhpcyAgaW1wbGUtCisgICAgICAgbWVudGF0aW9uICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBib3JkZXJzIGdlbmVyYXRlZCBieSB0aGVzZSBmdW5jdGlvbnMgYXJlICA8RU0+aW5zaWRlPC9FTT4gIGJvci0KKyAgICAgICBkZXJzICh0aGlzIGlzIGFsc28gdHJ1ZSBvZiBTVnI0IGN1cnNlcywgdGhvdWdoIHRoZSBmYWN0IGlzCisgICAgICAgbm90IGRvY3VtZW50ZWQpLgorCisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+Ym9yZGVyPC9TVFJPTkc+IGFuZCA8U1RST05HPmJveDwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSAgNC4gICBUaGUgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgdGhleSByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gb24KKyAgICAgICBmYWlsdXJlLCBidXQgc3BlY2lmaWVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2JvcmRlcl9zZXQuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2JvcmRlcl9zZXQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTVlODEwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfYm9yZGVyX3NldC4zeC5odG1sCkBAIC0wLDAgKzEsMTc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfYm9yZGVyX3NldC4zeCx2IDEuNiAyMDA1LzA1LzE1IDE2OjE3OjM3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfYm9yZGVyX3NldCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfYm9yZGVyX3NldCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmJvcmRlcl9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+d2JvcmRlcl9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+Ym94X3NldDwvU1RST05HPiwgPFNUUk9ORz5obGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+d2hsaW5lX3NldDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12aGxpbmVfc2V0PC9TVFJPTkc+LCA8U1RST05HPm12d2hsaW5lX3NldDwvU1RST05HPiwgPFNUUk9ORz52bGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+d3ZsaW5lX3NldDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12dmxpbmVfc2V0PC9TVFJPTkc+LCA8U1RST05HPm12d3ZsaW5lX3NldDwvU1RST05HPiAtIGNyZWF0ZSA8U1RST05HPmN1cnNlczwvU1RST05HPiBib3JkZXJzIG9yIGxpbmVzCisgICAgICAgdXNpbmcgY29tcGxleCBjaGFyYWN0ZXJzIGFuZCByZW5kaXRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Ym9yZGVyX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+bHM8L0VNPiwgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnJzPC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnRzPC9FTT4sIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5iczwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT50bDwvRU0+LCA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+dHI8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+Ymw8L0VNPiwgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmJyPC9FTT4gPFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2JvcmRlcl9zZXQoPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luPC9TVFJPTkc+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5sczwvRU0+LCA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+cnM8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+dHM8L0VNPiwgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmJzPC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnRsPC9FTT4sIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT50cjwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5ibDwvRU0+LCA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+YnI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJveF9zZXQoPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luPC9TVFJPTkc+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT52ZXJjaDwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5ob3JjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aGxpbmVfc2V0KDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndobGluZV9zZXQoPC9TVFJPTkc+CisgICAgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aGxpbmVfc2V0KDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+LCA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aGxpbmVfc2V0KDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPiwKKyAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+LCA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZsaW5lX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53dmxpbmVfc2V0KDwvU1RST05HPgorICAgICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdnZsaW5lX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+LCA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+LAorICAgICAgICAgIDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d3ZsaW5lX3NldCg8L1NUUk9ORz4KKyAgICAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT4sCisgICAgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPiwgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPiwKKyAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT4sIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+Ym9yZGVyX3NldDwvU1RST05HPiBhbmQgPFNUUk9ORz53Ym9yZGVyX3NldDwvU1RST05HPiAgZnVuY3Rpb25zICBkcmF3ICBhICBib3JkZXIKKyAgICAgICBhcm91bmQgIHRoZSAgZWRnZXMgIG9mICB0aGUgIGN1cnJlbnQgIG9yIHNwZWNpZmllZCB3aW5kb3cuCisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnNvciBwb3NpdGlvbiwgYW5kICBkbworICAgICAgIG5vdCB3cmFwLgorCisgICAgICAgT3RoZXIgIHRoYW4gdGhlIHdpbmRvdywgZWFjaCBhcmd1bWVudCBpcyBhIGNvbXBsZXggY2hhcmFjLQorICAgICAgIHRlciB3aXRoIGF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgIDxFTT5sczwvRU0+IC0gbGVmdCBzaWRlLAorICAgICAgICAgICAgICA8RU0+cnM8L0VNPiAtIHJpZ2h0IHNpZGUsCisgICAgICAgICAgICAgIDxFTT50czwvRU0+IC0gdG9wIHNpZGUsCisgICAgICAgICAgICAgIDxFTT5iczwvRU0+IC0gYm90dG9tIHNpZGUsCisgICAgICAgICAgICAgIDxFTT50bDwvRU0+IC0gdG9wIGxlZnQtaGFuZCBjb3JuZXIsCisgICAgICAgICAgICAgIDxFTT50cjwvRU0+IC0gdG9wIHJpZ2h0LWhhbmQgY29ybmVyLAorICAgICAgICAgICAgICA8RU0+Ymw8L0VNPiAtIGJvdHRvbSBsZWZ0LWhhbmQgY29ybmVyLCBhbmQKKyAgICAgICAgICAgICAgPEVNPmJyPC9FTT4gLSBib3R0b20gcmlnaHQtaGFuZCBjb3JuZXIuCisKKyAgICAgICBJZiBhbnkgb2YgdGhlc2UgYXJndW1lbnRzIGlzIHplcm8sIHRoZW4gdGhlICBjb3JyZXNwb25kaW5nCisgICAgICAgZGVmYXVsdCB2YWx1ZXMgKGRlZmluZWQgaW4gPFNUUk9ORz5jdXJzZXMuaDwvU1RST05HPikgYXJlIHVzZWQgaW5zdGVhZDoKKyAgICAgICAgICAgICAgPFNUUk9ORz5XQUNTX1ZMSU5FPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPldBQ1NfVkxJTkU8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+V0FDU19ITElORTwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5XQUNTX0hMSU5FPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPldBQ1NfVUxDT1JORVI8L1NUUk9ORz4sCisgICAgICAgICAgICAgIDxTVFJPTkc+V0FDU19VUkNPUk5FUjwvU1RST05HPiwKKyAgICAgICAgICAgICAgPFNUUk9ORz5XQUNTX0xMQ09STkVSPC9TVFJPTkc+LCBhbmQKKyAgICAgICAgICAgICAgPFNUUk9ORz5XQUNTX0xSQ09STkVSPC9TVFJPTkc+LgorCisgICAgICAgPFNUUk9ORz5ib3hfc2V0KDwvU1RST05HPjxFTT53aW48L0VNPiwgPEVNPnZlcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPEVNPmhvcmNoPC9FTT48U1RST05HPik7PC9TVFJPTkc+IGlzIGEgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93LQorICAgICAgIGluZyBjYWxsOgorCisgICAgICAgPFNUUk9ORz53Ym9yZGVyX3NldCg8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPEVNPnZlcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPEVNPnZlcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4KKyAgICAgICAgICAgPEVNPmhvcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPEVNPmhvcmNoPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5OVUxMLDwvU1RST05HPiA8U1RST05HPk5VTEwsPC9TVFJPTkc+IDxTVFJPTkc+TlVMTCw8L1NUUk9ORz4gPFNUUk9ORz5OVUxMKTs8L1NUUk9ORz4KKworICAgICAgIFRoZSA8U1RST05HPipsaW5lX3NldDwvU1RST05HPiBmdW5jdGlvbnMgdXNlIDxFTT53Y2g8L0VNPiB0byBkcmF3IGEgbGluZSBzdGFydGluZyBhdAorICAgICAgIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgd2luZG93LiAgVGhlIGxpbmUgaXMgYXQKKyAgICAgICBtb3N0IDxFTT5uPC9FTT4gY2hhcmFjdGVycyBsb25nIG9yIGFzIG1hbnkgYXMgZml0IGludG8gdGhlICB3aW5kb3cuCisgICAgICAgVGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLgorCisgICAgICAgVGhlICA8U1RST05HPmhsaW5lX3NldDwvU1RST05HPiwgIDxTVFJPTkc+bXZobGluZV9zZXQ8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aGxpbmVfc2V0PC9TVFJPTkc+LCBhbmQgPFNUUk9ORz53aGxpbmVfc2V0PC9TVFJPTkc+CisgICAgICAgZnVuY3Rpb25zIGRyYXcgYSBsaW5lIHByb2NlZWRpbmcgdG93YXJkIHRoZSBsYXN0IGNvbHVtbiBvZgorICAgICAgIHRoZSBzYW1lIGxpbmUuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+dmxpbmVfc2V0PC9TVFJPTkc+LCAgPFNUUk9ORz5tdnZsaW5lX3NldDwvU1RST05HPiwgPFNUUk9ORz5tdnd2bGluZV9zZXQ8L1NUUk9ORz4sIGFuZCA8U1RST05HPnd2bGluZV9zZXQ8L1NUUk9ORz4KKyAgICAgICBmdW5jdGlvbnMgZHJhdyBhIGxpbmUgcHJvY2VlZGluZyB0b3dhcmQgdGhlIGxhc3QgIGxpbmUgIG9mCisgICAgICAgdGhlIHdpbmRvdy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5ib3JkZXJfc2V0PC9TVFJPTkc+LCA8U1RST05HPmhsaW5lX3NldDwvU1RST05HPiwgPFNUUk9ORz5tdmhsaW5lX3NldDwvU1RST05HPiwgPFNUUk9ORz5tdnZsaW5lX3NldDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12d2hsaW5lX3NldDwvU1RST05HPiwgPFNUUk9ORz5tdnd2bGluZV9zZXQ8L1NUUk9ORz4sIGFuZCA8U1RST05HPnZsaW5lX3NldDwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sICB0aGVzZSAgZnVuY3Rpb25zICByZXR1cm4gIDxTVFJPTkc+T0s8L1NUUk9ORz4uCisgICAgICAgT3RoZXJ3aXNlLCB0aGV5IHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPi4KKworICAgICAgIEZ1bmN0aW9ucyAgdXNpbmcgIGEgd2luZG93IHBhcmFtZXRlciByZXR1cm4gYW4gZXJyb3IgaWYgaXQKKyAgICAgICBpcyBudWxsLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19jbGVhci4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfY2xlYXIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmJiNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfY2xlYXIuM3guaHRtbApAQCAtMCwwICsxLDE0NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2NsZWFyLjN4LHYgMS4xMSAyMDA3LzEyLzI5IDE1OjU4OjM4IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfY2xlYXIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2NsZWFyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5lcmFzZTwvU1RST05HPiwgPFNUUk9ORz53ZXJhc2U8L1NUUk9ORz4sIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4sIDxTVFJPTkc+d2NsZWFyPC9TVFJPTkc+LCA8U1RST05HPmNscnRvYm90PC9TVFJPTkc+LCA8U1RST05HPndjbHJ0b2JvdDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPmNscnRvZW9sPC9TVFJPTkc+LCA8U1RST05HPndjbHJ0b2VvbDwvU1RST05HPiAtIGNsZWFyIGFsbCBvciBwYXJ0IG9mIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jPC9TVFJPTkc+IDxTVFJPTkc+aW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZXJhc2Uodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53ZXJhc2UoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jbGVhcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndjbGVhcihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNscnRvYm90KHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2NscnRvYm90KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y2xydG9lb2wodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Y2xydG9lb2woV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPmVyYXNlPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz53ZXJhc2U8L1NUUk9ORz4gcm91dGluZXMgY29weSBibGFua3MgdG8gZXZlcnkgcG9zaS0KKyAgICAgICB0aW9uIGluIHRoZSB3aW5kb3csIGNsZWFyaW5nIHRoZSBzY3JlZW4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5jbGVhcjwvU1RST05HPiBhbmQgPFNUUk9ORz53Y2xlYXI8L1NUUk9ORz4gcm91dGluZXMgYXJlIGxpa2UgPFNUUk9ORz5lcmFzZTwvU1RST05HPiAgYW5kICA8U1RST05HPndlcmFzZTwvU1RST05HPiwKKyAgICAgICBidXQgIHRoZXkgYWxzbyBjYWxsIDxTVFJPTkc+Y2xlYXJvazwvU1RST05HPiwgc28gdGhhdCB0aGUgc2NyZWVuIGlzIGNsZWFyZWQKKyAgICAgICBjb21wbGV0ZWx5IG9uIHRoZSBuZXh0IGNhbGwgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiAgZm9yICB0aGF0ICB3aW5kb3cKKyAgICAgICBhbmQgcmVwYWludGVkIGZyb20gc2NyYXRjaC4KKworICAgICAgIFRoZSAgPFNUUk9ORz5jbHJ0b2JvdDwvU1RST05HPiBhbmQgPFNUUk9ORz53Y2xydG9ib3Q8L1NUUk9ORz4gcm91dGluZXMgZXJhc2UgZnJvbSB0aGUgY3Vyc29yCisgICAgICAgdG8gdGhlIGVuZCBvZiBzY3JlZW4uICBUaGF0IGlzLCB0aGV5IGVyYXNlIGFsbCBsaW5lcyBiZWxvdworICAgICAgIHRoZSAgY3Vyc29yICBpbiB0aGUgd2luZG93LiAgQWxzbywgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUKKyAgICAgICByaWdodCBvZiB0aGUgY3Vyc29yLCBpbmNsdXNpdmUsIGlzIGVyYXNlZC4KKworICAgICAgIFRoZSA8U1RST05HPmNscnRvZW9sPC9TVFJPTkc+IGFuZCA8U1RST05HPndjbHJ0b2VvbDwvU1RST05HPiByb3V0aW5lcyBlcmFzZSB0aGUgY3VycmVudCBsaW5lCisgICAgICAgdG8gIHRoZSAgcmlnaHQgb2YgdGhlIGN1cnNvciwgaW5jbHVzaXZlLCB0byB0aGUgZW5kIG9mIHRoZQorICAgICAgIGN1cnJlbnQgbGluZS4KKworICAgICAgIEJsYW5rcyBjcmVhdGVkIGJ5IGVyYXN1cmUgaGF2ZSB0aGUgY3VycmVudCBiYWNrZ3JvdW5kIHJlbi0KKyAgICAgICBkaXRpb24gKGFzIHNldCBieSA8U1RST05HPndia2dkc2V0PC9TVFJPTkc+KSBtZXJnZWQgaW50byB0aGVtLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgIHJvdXRpbmVzICByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5PSzwvU1RST05HPiBvbiBzdWNjZXNzIGFuZCA8U1RST05HPkVSUjwvU1RST05HPiBvbgorICAgICAgIGZhaWx1cmUuICBUaGUgU1ZyNC4wIG1hbnVhbCBzYXlzICJvciBhIG5vbi1uZWdhdGl2ZSAgaW50ZS0KKyAgICAgICBnZXIgaWYgPFNUUk9ORz5pbW1lZG9rPC9TVFJPTkc+IGlzIHNldCIsIGJ1dCB0aGlzIGFwcGVhcnMgdG8gYmUgYW4gZXJyb3IuCisKKyAgICAgICBYL09wZW4gIGRlZmluZXMgIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiB0aGlzIGltcGxlbWVudGEtCisgICAgICAgdGlvbiwgZnVuY3Rpb25zIHVzaW5nIGEgd2luZG93IHBvaW50ZXIgcGFyYW1ldGVyIHJldHVybiBhbgorICAgICAgIGVycm9yIGlmIGl0IGlzIG51bGwuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+ZXJhc2U8L1NUUk9ORz4sIDxTVFJPTkc+d2VyYXNlPC9TVFJPTkc+LCA8U1RST05HPmNsZWFyPC9TVFJPTkc+LCA8U1RST05HPndjbGVhcjwvU1RST05HPiwgPFNUUk9ORz5jbHJ0b2JvdDwvU1RST05HPiwgYW5kIDxTVFJPTkc+Y2xyLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dG9lb2w8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgIDQuICAgVGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXkgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IG9uCisgICAgICAgZmFpbHVyZSwgYnV0IHNwZWNpZmllcyBubyBlcnJvciBjb25kaXRpb25zLgorCisgICAgICAgU29tZSBoaXN0b3JpYyBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGhhZCwgIGFzICBhbiAgdW5kb2N1LQorICAgICAgIG1lbnRlZCAgZmVhdHVyZSwgIHRoZSAgYWJpbGl0eSAgdG8gIGRvICB0aGUgIGVxdWl2YWxlbnQgb2YKKyAgICAgICA8U1RST05HPmNsZWFyb2soLi4uLDwvU1RST05HPiA8U1RST05HPjEpPC9TVFJPTkc+IGJ5IHNheWluZyA8U1RST05HPnRvdWNod2luKHN0ZHNjcik8L1NUUk9ORz4gIG9yICA8U1RST05HPmNsZWFyKHN0ZC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnNjcik8L1NUUk9ORz4uICBUaGlzIHdpbGwgbm90IHdvcmsgdW5kZXIgbmN1cnNlcy4KKworICAgICAgIFRoaXMgIGltcGxlbWVudGF0aW9uLCBhbmQgb3RoZXJzIHN1Y2ggYXMgU29sYXJpcywgc2V0cyB0aGUKKyAgICAgICBjdXJyZW50IHBvc2l0aW9uIHRvIDAsMCBhZnRlciAgZXJhc2luZyAgdmlhICA8U1RST05HPndlcmFzZSgpPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPndjbGVhcigpPC9TVFJPTkc+LiAgIFRoYXQgZmFjdCBpcyBub3QgZG9jdW1lbnRlZCBpbiBvdGhlciBpbXBsZW1lbi0KKyAgICAgICB0YXRpb25zLCBhbmQgbWF5IG5vdCBiZSB0cnVlIG9mIGltcGxlbWVudGF0aW9ucyB3aGljaCB3ZXJlCisgICAgICAgbm90IGRlcml2ZWQgZnJvbSBTVnI0IHNvdXJjZS4KKworICAgICAgIE5vdCAgb2J2aW91cyAgZnJvbSAgdGhlICBkZXNjcmlwdGlvbiwgbW9zdCBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICBjbGVhciB0aGUgc2NyZWVuIGFmdGVyIDxTVFJPTkc+d2NsZWFyPC9TVFJPTkc+IGV2ZW4gZm9yIGEgc3Vid2luZG93IG9yICBkZS0KKyAgICAgICByaXZlZCB3aW5kb3cuICBJZiB5b3UgZG8gbm90IHdhbnQgdG8gY2xlYXIgdGhlIHNjcmVlbiBkdXItCisgICAgICAgaW5nIHRoZSBuZXh0IDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4sIHVzZSA8U1RST05HPndlcmFzZTwvU1RST05HPiBpbnN0ZWFkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2NvbG9yLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19jb2xvci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDYwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19jb2xvci4zeC5odG1sCkBAIC0wLDAgKzEsMjgyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfY29sb3IuM3gsdiAxLjI4IDIwMDUvMTIvMTggMDA6MDA6MzcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19jb2xvciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfY29sb3IgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnN0YXJ0X2NvbG9yPC9TVFJPTkc+LCA8U1RST05HPmluaXRfcGFpcjwvU1RST05HPiwgPFNUUk9ORz5pbml0X2NvbG9yPC9TVFJPTkc+LCA8U1RST05HPmhhc19jb2xvcnM8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5jYW5fY2hhbmdlX2NvbG9yPC9TVFJPTkc+LCA8U1RST05HPmNvbG9yX2NvbnRlbnQ8L1NUUk9ORz4sIDxTVFJPTkc+cGFpcl9jb250ZW50PC9TVFJPTkc+LCA8U1RST05HPkNPTE9SX1BBSVI8L1NUUk9ORz4KKyAgICAgICAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGNvbG9yIG1hbmlwdWxhdGlvbiByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+IzwvU1RST05HPiA8U1RST05HPmluY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zdGFydF9jb2xvcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluaXRfcGFpcihzaG9ydDwvU1RST05HPiA8U1RST05HPnBhaXIsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5mLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+Yik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbml0X2NvbG9yKHNob3J0PC9TVFJPTkc+IDxTVFJPTkc+Y29sb3IsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz5yLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+Zyw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmhhc19jb2xvcnModm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+Y2FuX2NoYW5nZV9jb2xvcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiAgPFNUUk9ORz5jb2xvcl9jb250ZW50KHNob3J0PC9TVFJPTkc+ICA8U1RST05HPmNvbG9yLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+KnIsPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPFNUUk9ORz4qZyw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+KmIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cGFpcl9jb250ZW50KHNob3J0PC9TVFJPTkc+IDxTVFJPTkc+cGFpciw8L1NUUk9ORz4gPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPipmLDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+KmIpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgPFNUUk9ORz5PdmVydmlldzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHN1cHBvcnQgY29sb3IgYXR0cmlidXRlcyBvbiB0ZXJtaW5hbHMgd2l0aCB0aGF0IGNhLQorICAgICAgIHBhYmlsaXR5LiAgIFRvICB1c2UgIHRoZXNlICByb3V0aW5lcyAgPFNUUk9ORz5zdGFydF9jb2xvcjwvU1RST05HPiAgbXVzdCBiZQorICAgICAgIGNhbGxlZCwgdXN1YWxseSByaWdodCBhZnRlciA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4uICAgQ29sb3JzICBhcmUgIGFsd2F5cworICAgICAgIHVzZWQgIGluIHBhaXJzIChyZWZlcnJlZCB0byBhcyBjb2xvci1wYWlycykuICBBIGNvbG9yLXBhaXIKKyAgICAgICBjb25zaXN0cyBvZiBhIGZvcmVncm91bmQgIGNvbG9yICAoZm9yICBjaGFyYWN0ZXJzKSAgYW5kICBhCisgICAgICAgYmFja2dyb3VuZCBjb2xvciAoZm9yIHRoZSBibGFuayBmaWVsZCBvbiB3aGljaCB0aGUgY2hhcmFjLQorICAgICAgIHRlcnMgYXJlIGRpc3BsYXllZCkuICBBIHByb2dyYW1tZXIgIGluaXRpYWxpemVzICBhICBjb2xvci0KKyAgICAgICBwYWlyICB3aXRoICB0aGUgcm91dGluZSA8U1RST05HPmluaXRfcGFpcjwvU1RST05HPi4gIEFmdGVyIGl0IGhhcyBiZWVuIGluaS0KKyAgICAgICB0aWFsaXplZCwgPFNUUk9ORz5DT0xPUl9QQUlSPC9TVFJPTkc+KDxFTT5uPC9FTT4pLCBhIG1hY3JvICBkZWZpbmVkICBpbiAgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LAorICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgbmV3IHZpZGVvIGF0dHJpYnV0ZS4KKworICAgICAgIElmICBhICB0ZXJtaW5hbCAgaXMgY2FwYWJsZSBvZiByZWRlZmluaW5nIGNvbG9ycywgdGhlIHByby0KKyAgICAgICBncmFtbWVyIGNhbiB1c2UgdGhlIHJvdXRpbmUgPFNUUk9ORz5pbml0X2NvbG9yPC9TVFJPTkc+IHRvIGNoYW5nZSB0aGUgZGVmaS0KKyAgICAgICBuaXRpb24gICBvZiAgIGEgICBjb2xvci4gICAgVGhlICByb3V0aW5lcyAgPFNUUk9ORz5oYXNfY29sb3JzPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPmNhbl9jaGFuZ2VfY29sb3I8L1NUUk9ORz4gIHJldHVybiAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+ICBvciAgPFNUUk9ORz5GQUxTRTwvU1RST05HPiwgIGRlcGVuZGluZyAgIG9uCisgICAgICAgd2hldGhlciAgdGhlICB0ZXJtaW5hbCAgaGFzIGNvbG9yIGNhcGFiaWxpdGllcyBhbmQgd2hldGhlcgorICAgICAgIHRoZSBwcm9ncmFtbWVyIGNhbiBjaGFuZ2UgdGhlIGNvbG9ycy4gICBUaGUgIHJvdXRpbmUgIDxTVFJPTkc+Y29sLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+b3JfY29udGVudDwvU1RST05HPiAgYWxsb3dzICBhIHByb2dyYW1tZXIgdG8gZXh0cmFjdCB0aGUgYW1vdW50cyBvZgorICAgICAgIHJlZCwgZ3JlZW4sIGFuZCBibHVlIGNvbXBvbmVudHMgaW4gYW4gIGluaXRpYWxpemVkICBjb2xvci4KKyAgICAgICBUaGUgIHJvdXRpbmUgIDxTVFJPTkc+cGFpcl9jb250ZW50PC9TVFJPTkc+IGFsbG93cyBhIHByb2dyYW1tZXIgdG8gZmluZCBvdXQKKyAgICAgICBob3cgYSBnaXZlbiBjb2xvci1wYWlyIGlzIGN1cnJlbnRseSBkZWZpbmVkLgorCisgICA8U1RST05HPlJvdXRpbmU8L1NUUk9ORz4gPFNUUk9ORz5EZXNjcmlwdGlvbnM8L1NUUk9ORz4KKyAgICAgICBUaGUgPFNUUk9ORz5zdGFydF9jb2xvcjwvU1RST05HPiByb3V0aW5lIHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEl0IG11c3QgYmUKKyAgICAgICBjYWxsZWQgIGlmICB0aGUgcHJvZ3JhbW1lciB3YW50cyB0byB1c2UgY29sb3JzLCBhbmQgYmVmb3JlCisgICAgICAgYW55IG90aGVyIGNvbG9yIG1hbmlwdWxhdGlvbiByb3V0aW5lICBpcyAgY2FsbGVkLiAgIEl0ICBpcworICAgICAgIGdvb2QgIHByYWN0aWNlICB0byAgY2FsbCB0aGlzIHJvdXRpbmUgcmlnaHQgYWZ0ZXIgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+LgorICAgICAgIDxTVFJPTkc+c3RhcnRfY29sb3I8L1NUUk9ORz4gaW5pdGlhbGl6ZXMgZWlnaHQgYmFzaWMgIGNvbG9ycyAgKGJsYWNrLCAgcmVkLAorICAgICAgIGdyZWVuLCAgeWVsbG93LCAgYmx1ZSwgIG1hZ2VudGEsIGN5YW4sIGFuZCB3aGl0ZSksIGFuZCB0d28KKyAgICAgICBnbG9iYWwgdmFyaWFibGVzLCAgPFNUUk9ORz5DT0xPUlM8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5DT0xPUl9QQUlSUzwvU1RST05HPiAgKHJlc3BlY3RpdmVseQorICAgICAgIGRlZmluaW5nICB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29sb3JzIGFuZCBjb2xvci1wYWlycyB0aGUKKyAgICAgICB0ZXJtaW5hbCBjYW4gc3VwcG9ydCkuICBJdCBhbHNvIHJlc3RvcmVzIHRoZSBjb2xvcnMgb24gdGhlCisgICAgICAgdGVybWluYWwgdG8gdGhlIHZhbHVlcyB0aGV5IGhhZCB3aGVuIHRoZSB0ZXJtaW5hbCB3YXMganVzdAorICAgICAgIHR1cm5lZCBvbi4KKworICAgICAgIFRoZSA8U1RST05HPmluaXRfcGFpcjwvU1RST05HPiByb3V0aW5lIGNoYW5nZXMgdGhlIGRlZmluaXRpb24gb2YgIGEgIGNvbG9yLQorICAgICAgIHBhaXIuICAgSXQgdGFrZXMgdGhyZWUgYXJndW1lbnRzOiB0aGUgbnVtYmVyIG9mIHRoZSBjb2xvci0KKyAgICAgICBwYWlyIHRvIGJlIGNoYW5nZWQsIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIG51bWJlciwgIGFuZCAgdGhlCisgICAgICAgYmFja2dyb3VuZCBjb2xvciBudW1iZXIuICBGb3IgcG9ydGFibGUgYXBwbGljYXRpb25zOgorCisgICAgICAgLSAgICBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiA8U1RST05HPjE8L1NUUk9ORz4gYW5kCisgICAgICAgICAgICA8U1RST05HPkNPTE9SX1BBSVJTLTE8L1NUUk9ORz4uCisKKyAgICAgICAtICAgIFRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudHMgIG11c3QgIGJlCisgICAgICAgICAgICBiZXR3ZWVuICAwIGFuZCA8U1RST05HPkNPTE9SUzwvU1RST05HPi4gIENvbG9yIHBhaXIgMCBpcyBhc3N1bWVkIHRvIGJlCisgICAgICAgICAgICB3aGl0ZSBvbiBibGFjaywgYnV0IGlzIGFjdHVhbGx5IHdoYXRldmVyIHRoZSB0ZXJtaW5hbAorICAgICAgICAgICAgaW1wbGVtZW50cyBiZWZvcmUgY29sb3IgaXMgaW5pdGlhbGl6ZWQuICBJdCBjYW5ub3QgYmUKKyAgICAgICAgICAgIG1vZGlmaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKworICAgICAgIElmIHRoZSBjb2xvci1wYWlyIHdhcyBwcmV2aW91c2x5IGluaXRpYWxpemVkLCAgdGhlICBzY3JlZW4KKyAgICAgICBpcyAgcmVmcmVzaGVkICBhbmQgIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGF0IGNvbG9yLXBhaXIgYXJlCisgICAgICAgY2hhbmdlZCB0byB0aGUgbmV3IGRlZmluaXRpb24uCisKKyAgICAgICBBcyBhbiBleHRlbnNpb24sIG5jdXJzZXMgYWxsb3dzIHlvdSB0byBzZXQgIGNvbG9yICBwYWlyICAwCisgICAgICAgdmlhICB0aGUgIDxTVFJPTkc+YXNzdW1lX2RlZmF1bHRfY29sb3JzPC9TVFJPTkc+IHJvdXRpbmUsIG9yIHRvIHNwZWNpZnkgdGhlCisgICAgICAgdXNlIG9mIGRlZmF1bHQgY29sb3JzIChjb2xvciBudW1iZXIgPFNUUk9ORz4tMTwvU1RST05HPikgaWYgeW91ICBmaXJzdCAgaW4tCisgICAgICAgdm9rZSB0aGUgPFNUUk9ORz51c2VfZGVmYXVsdF9jb2xvcnM8L1NUUk9ORz4gcm91dGluZS4KKworICAgICAgIFRoZSAgPFNUUk9ORz5pbml0X2NvbG9yPC9TVFJPTkc+IHJvdXRpbmUgY2hhbmdlcyB0aGUgZGVmaW5pdGlvbiBvZiBhIGNvbG9yLgorICAgICAgIEl0IHRha2VzIGZvdXIgYXJndW1lbnRzOiB0aGUgbnVtYmVyIG9mICB0aGUgIGNvbG9yICB0byAgYmUKKyAgICAgICBjaGFuZ2VkICBmb2xsb3dlZCAgYnkgdGhyZWUgUkdCIHZhbHVlcyAoZm9yIHRoZSBhbW91bnRzIG9mCisgICAgICAgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cykuICBUaGUgdmFsdWUgb2YgdGhlICBmaXJzdAorICAgICAgIGFyZ3VtZW50ICBtdXN0ICBiZSBiZXR3ZWVuIDxTVFJPTkc+MDwvU1RST05HPiBhbmQgPFNUUk9ORz5DT0xPUlM8L1NUUk9ORz4uICAoU2VlIHRoZSBzZWN0aW9uCisgICAgICAgPFNUUk9ORz5Db2xvcnM8L1NUUk9ORz4gZm9yIHRoZSBkZWZhdWx0IGNvbG9yIGluZGV4LikgICBFYWNoICBvZiAgdGhlICBsYXN0CisgICAgICAgdGhyZWUgIGFyZ3VtZW50cyBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAwLiAgV2hlbgorICAgICAgIDxTVFJPTkc+aW5pdF9jb2xvcjwvU1RST05HPiBpcyB1c2VkLCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhhdCBjb2xvciAgb24gIHRoZQorICAgICAgIHNjcmVlbiBpbW1lZGlhdGVseSBjaGFuZ2UgdG8gdGhlIG5ldyBkZWZpbml0aW9uLgorCisgICAgICAgVGhlICA8U1RST05HPmhhc19jb2xvcnM8L1NUUk9ORz4gcm91dGluZSByZXF1aXJlcyBubyBhcmd1bWVudHMuICBJdCByZXR1cm5zCisgICAgICAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+IGlmIHRoZSB0ZXJtaW5hbCBjYW4gbWFuaXB1bGF0ZSBjb2xvcnM7IG90aGVyd2lzZSwgIGl0CisgICAgICAgcmV0dXJucyA8U1RST05HPkZBTFNFPC9TVFJPTkc+LiAgVGhpcyByb3V0aW5lIGZhY2lsaXRhdGVzIHdyaXRpbmcgdGVybWluYWwtCisgICAgICAgaW5kZXBlbmRlbnQgcHJvZ3JhbXMuICBGb3IgZXhhbXBsZSwgYSBwcm9ncmFtbWVyICBjYW4gIHVzZQorICAgICAgIGl0ICB0byBkZWNpZGUgd2hldGhlciB0byB1c2UgY29sb3Igb3Igc29tZSBvdGhlciB2aWRlbyBhdC0KKyAgICAgICB0cmlidXRlLgorCisgICAgICAgVGhlIDxTVFJPTkc+Y2FuX2NoYW5nZV9jb2xvcjwvU1RST05HPiByb3V0aW5lIHJlcXVpcmVzICBubyAgYXJndW1lbnRzLiAgIEl0CisgICAgICAgcmV0dXJucyAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+ICBpZiAgdGhlICB0ZXJtaW5hbCAgc3VwcG9ydHMgIGNvbG9ycyBhbmQgY2FuCisgICAgICAgY2hhbmdlIHRoZWlyIGRlZmluaXRpb25zOyBvdGhlciwgaXQgcmV0dXJucyAgPFNUUk9ORz5GQUxTRTwvU1RST05HPi4gICBUaGlzCisgICAgICAgcm91dGluZSBmYWNpbGl0YXRlcyB3cml0aW5nIHRlcm1pbmFsLWluZGVwZW5kZW50IHByb2dyYW1zLgorCisgICAgICAgVGhlIDxTVFJPTkc+Y29sb3JfY29udGVudDwvU1RST05HPiByb3V0aW5lIGdpdmVzIHByb2dyYW1tZXJzIGEgd2F5IHRvICBmaW5kCisgICAgICAgdGhlIGludGVuc2l0eSBvZiB0aGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgKFJHQikgY29tcG9uZW50cworICAgICAgIGluIGEgY29sb3IuICBJdCByZXF1aXJlcyBmb3VyIGFyZ3VtZW50czogdGhlIGNvbG9yIG51bWJlciwKKyAgICAgICBhbmQgIHRocmVlIGFkZHJlc3NlcyBvZiA8U1RST05HPnNob3J0PC9TVFJPTkc+cyBmb3Igc3RvcmluZyB0aGUgaW5mb3JtYXRpb24KKyAgICAgICBhYm91dCB0aGUgYW1vdW50cyBvZiByZWQsIGdyZWVuLCBhbmQgIGJsdWUgIGNvbXBvbmVudHMgIGluCisgICAgICAgdGhlICBnaXZlbiBjb2xvci4gIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZQorICAgICAgIGJldHdlZW4gMCBhbmQgPFNUUk9ORz5DT0xPUlM8L1NUUk9ORz4uICBUaGUgdmFsdWVzIHRoYXQgYXJlIHN0b3JlZCAgYXQgIHRoZQorICAgICAgIGFkZHJlc3NlcyAgcG9pbnRlZCAgdG8gYnkgdGhlIGxhc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBiZS0KKyAgICAgICB0d2VlbiAwIChubyBjb21wb25lbnQpIGFuZCAxMDAwIChtYXhpbXVtIGFtb3VudCBvZiAgY29tcG8tCisgICAgICAgbmVudCkuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+cGFpcl9jb250ZW50PC9TVFJPTkc+ICByb3V0aW5lICBhbGxvd3MgcHJvZ3JhbW1lcnMgdG8gZmluZCBvdXQKKyAgICAgICB3aGF0IGNvbG9ycyBhIGdpdmVuIGNvbG9yLXBhaXIgY29uc2lzdHMgb2YuICAgSXQgIHJlcXVpcmVzCisgICAgICAgdGhyZWUgIGFyZ3VtZW50czogdGhlIGNvbG9yLXBhaXIgbnVtYmVyLCBhbmQgdHdvIGFkZHJlc3NlcworICAgICAgIG9mIDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz5zIGZvciBzdG9yaW5nIHRoZSBmb3JlZ3JvdW5kICBhbmQgIHRoZSAgYmFja2dyb3VuZAorICAgICAgIGNvbG9yICBudW1iZXJzLiAgIFRoZSAgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUKKyAgICAgICBiZXR3ZWVuIDEgYW5kIDxTVFJPTkc+Q09MT1JfUEFJUlMtMTwvU1RST05HPi4gIFRoZSB2YWx1ZXMgdGhhdCAgYXJlICBzdG9yZWQKKyAgICAgICBhdCAgdGhlIGFkZHJlc3NlcyBwb2ludGVkIHRvIGJ5IHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZ3UtCisgICAgICAgbWVudHMgYXJlIGJldHdlZW4gMCBhbmQgPFNUUk9ORz5DT0xPUlM8L1NUUk9ORz4uCisKKyAgIDxTVFJPTkc+Q29sb3JzPC9TVFJPTkc+CisgICAgICAgSW4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+IHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBkZWZpbmVkLiAgVGhlc2UgYXJlCisgICAgICAgdGhlICBkZWZhdWx0IGNvbG9ycy4gIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGFsc28gYXNzdW1lcyB0aGF0IDxTVFJPTkc+Q09MT1JfQkxBQ0s8L1NUUk9ORz4KKyAgICAgICBpcyB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhbGwgdGVybWluYWxzLgorCisgICAgICAgICAgICAgPFNUUk9ORz5DT0xPUl9CTEFDSzwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfUkVEPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5DT0xPUl9HUkVFTjwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+Q09MT1JfWUVMTE9XPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5DT0xPUl9CTFVFPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5DT0xPUl9NQUdFTlRBPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5DT0xPUl9DWUFOPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5DT0xPUl9XSElURTwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgcm91dGluZXMgPFNUUk9ORz5jYW5fY2hhbmdlX2NvbG9yKCk8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5oYXNfY29sb3JzKCk8L1NUUk9ORz4gIHJldHVybgorICAgICAgIDxTVFJPTkc+VFJVRTwvU1RST05HPiBvciA8U1RST05HPkZBTFNFPC9TVFJPTkc+LgorCisgICAgICAgQWxsIG90aGVyIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kCisgICAgICAgYW4gPFNUUk9ORz5PSzwvU1RST05HPiAoU1ZyNCBzcGVjaWZpZXMgb25seSAiYW4gaW50ZWdlciAgdmFsdWUgIG90aGVyICB0aGFuCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFgvT3BlbiAgZGVmaW5lcyAgbm8gZXJyb3IgY29uZGl0aW9ucy4gIFRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAgICB3aWxsIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiBvbiBhdHRlbXB0cyB0byB1c2UgIGNvbG9yICB2YWx1ZXMgIG91dHNpZGUKKyAgICAgICB0aGUgcmFuZ2UgMCB0byBDT0xPUlMtMSAoZXhjZXB0IGZvciB0aGUgZGVmYXVsdCBjb2xvcnMgZXgtCisgICAgICAgdGVuc2lvbiksIG9yIHVzZSBjb2xvciBwYWlycyBvdXRzaWRlIHRoZSByYW5nZSAwICB0byAgQ09MLQorICAgICAgIE9SX1BBSVItMS4gIENvbG9yIHZhbHVlcyB1c2VkIGluIDxTVFJPTkc+aW5pdF9jb2xvcjwvU1RST05HPiBtdXN0IGJlIGluIHRoZQorICAgICAgIHJhbmdlIDAgdG8gMTAwMC4gIEFuIGVycm9yIGlzIHJldHVybmVkIGZyb20gYWxsICBmdW5jdGlvbnMKKyAgICAgICBpZiB0aGUgdGVybWluYWwgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiAgQW4gZXJyb3IgaXMgcmUtCisgICAgICAgdHVybmVkIGZyb20gIHNlY29uZGFyeSAgZnVuY3Rpb25zICBzdWNoICBhcyAgPFNUUk9ORz5pbml0X3BhaXI8L1NUUk9ORz4gIGlmCisgICAgICAgPFNUUk9ORz5zdGFydF9jb2xvcjwvU1RST05HPiB3YXMgbm90IGNhbGxlZC4KKworICAgICAgICAgICAgICA8U1RST05HPmluaXRfY29sb3I8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCBzdXAtCisgICAgICAgICAgICAgICAgICAgcG9ydCAgdGhpcyAgZmVhdHVyZSwgIGUuZy4sICBpZiAgdGhlICA8RU0+aW5pdGlhbC08L0VNPgorICAgICAgICAgICAgICAgICAgIDxFTT5pemU8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2xvcjwvRU0+IGNhcGFiaWxpdHkgaXMgYWJzZW50IGZyb20gdGhlIHRlcm1pLQorICAgICAgICAgICAgICAgICAgIG5hbCBkZXNjcmlwdGlvbi4KKworICAgICAgICAgICAgICA8U1RST05HPnN0YXJ0X2NvbG9yPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBJZiB0aGUgY29sb3IgdGFibGUgY2Fubm90ICBiZQorICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBJbiAgdGhlICA8RU0+bmN1cnNlczwvRU0+IGltcGxlbWVudGF0aW9uLCB0aGVyZSBpcyBhIHNlcGFyYXRlIGNvbG9yCisgICAgICAgYWN0aXZhdGlvbiBmbGFnLCBjb2xvciBwYWxldHRlLCBjb2xvciBwYWlycyB0YWJsZSwgYW5kIGFzLQorICAgICAgIHNvY2lhdGVkICBDT0xPUlMgIGFuZCAgQ09MT1JfUEFJUlMgY291bnRzIGZvciBlYWNoIHNjcmVlbjsKKyAgICAgICB0aGUgPFNUUk9ORz5zdGFydF9jb2xvcjwvU1RST05HPiBmdW5jdGlvbiBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgIHNjcmVlbi4KKyAgICAgICBUaGUgU1ZyNC9YU0kgaW50ZXJmYWNlIGlzIG5vdCByZWFsbHkgZGVzaWduZWQgd2l0aCB0aGlzIGluCisgICAgICAgbWluZCwgYW5kIGhpc3RvcmljYWwgIGltcGxlbWVudGF0aW9ucyAgbWF5ICB1c2UgIGEgIHNpbmdsZQorICAgICAgIHNoYXJlZCBjb2xvciBwYWxldHRlLgorCisgICAgICAgTm90ZSB0aGF0IHNldHRpbmcgYW4gaW1wbGljaXQgYmFja2dyb3VuZCBjb2xvciB2aWEgYSBjb2xvcgorICAgICAgIHBhaXIgYWZmZWN0cyBvbmx5IGNoYXJhY3RlciBjZWxscyB0aGF0IGEgIGNoYXJhY3RlciAgd3JpdGUKKyAgICAgICBvcGVyYXRpb24gIGV4cGxpY2l0bHkgIHRvdWNoZXMuICAgVG8gY2hhbmdlIHRoZSBiYWNrZ3JvdW5kCisgICAgICAgY29sb3IgdXNlZCB3aGVuIHBhcnRzIG9mIGEgd2luZG93IGFyZSBibGFua2VkICBieSAgZXJhc2luZworICAgICAgIG9yIHNjcm9sbGluZyBvcGVyYXRpb25zLCBzZWUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBTZXZlcmFsICBjYXZlYXRzICBhcHBseSAgb24gMzg2IGFuZCA0ODYgbWFjaGluZXMgd2l0aCBWR0EtCisgICAgICAgY29tcGF0aWJsZSBncmFwaGljczoKKworICAgICAgIC0gICAgQ09MT1JfWUVMTE9XIGlzIGFjdHVhbGx5IGJyb3duLiAgVG8gZ2V0ICB5ZWxsb3csICB1c2UKKyAgICAgICAgICAgIENPTE9SX1lFTExPVyBjb21iaW5lZCB3aXRoIHRoZSA8U1RST05HPkFfQk9MRDwvU1RST05HPiBhdHRyaWJ1dGUuCisKKyAgICAgICAtICAgIFRoZSAgQV9CTElOSyAgYXR0cmlidXRlICBzaG91bGQgIGluICB0aGVvcnkgY2F1c2UgdGhlCisgICAgICAgICAgICBiYWNrZ3JvdW5kIHRvIGdvIGJyaWdodC4gIFRoaXMgb2Z0ZW4gZmFpbHMgIHRvICB3b3JrLAorICAgICAgICAgICAgYW5kICBldmVuICBzb21lIGNhcmRzIGZvciB3aGljaCBpdCBtb3N0bHkgd29ya3MgKHN1Y2gKKyAgICAgICAgICAgIGFzIHRoZSBQYXJhZGlzZSBhbmQgY29tcGF0aWJsZXMpIGRvIHRoZSAgd3JvbmcgIHRoaW5nCisgICAgICAgICAgICB3aGVuIHlvdSB0cnkgdG8gc2V0IGEgYnJpZ2h0ICJ5ZWxsb3ciIGJhY2tncm91bmQgKHlvdQorICAgICAgICAgICAgZ2V0IGEgYmxpbmtpbmcgeWVsbG93IGZvcmVncm91bmQgaW5zdGVhZCkuCisKKyAgICAgICAtICAgIENvbG9yIFJHQiB2YWx1ZXMgYXJlIG5vdCBzZXR0YWJsZS4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIHNhdGlzZmllcyBYU0kgQ3Vyc2VzJ3MgIG1pbmltdW0gIG1heGktCisgICAgICAgbXVtcyBmb3IgPFNUUk9ORz5DT0xPUlM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Q09MT1JfUEFJUlM8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+aW5pdF9wYWlyPC9TVFJPTkc+ICByb3V0aW5lICBhY2NlcHRzICBuZWdhdGl2ZSB2YWx1ZXMgb2YgZm9yZS0KKyAgICAgICBncm91bmQgIGFuZCAgYmFja2dyb3VuZCAgY29sb3IgIHRvICBzdXBwb3J0ICB0aGUgICA8U1RST05HPnVzZV9kZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmZhdWx0X2NvbG9yczwvU1RST05HPiAgZXh0ZW5zaW9uLCBidXQgb25seSBpZiB0aGF0IHJvdXRpbmUgaGFzIGJlZW4KKyAgICAgICBmaXJzdCBpbnZva2VkLgorCisgICAgICAgVGhlIGFzc3VtcHRpb24gdGhhdCA8U1RST05HPkNPTE9SX0JMQUNLPC9TVFJPTkc+IGlzIHRoZSBkZWZhdWx0ICBiYWNrZ3JvdW5kCisgICAgICAgY29sb3IgIGZvciAgYWxsICB0ZXJtaW5hbHMgIGNhbiAgYmUgbW9kaWZpZWQgdXNpbmcgdGhlIDxTVFJPTkc+YXMtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zdW1lX2RlZmF1bHRfY29sb3JzPC9TVFJPTkc+IGV4dGVuc2lvbi4KKworICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHRoZSAgcG9pbnRlcnMsICBlLmcuLCAgZm9yICB0aGUKKyAgICAgICB2YWx1ZXMgIHJldHVybmVkICBieSAgPFNUUk9ORz5jb2xvcl9jb250ZW50PC9TVFJPTkc+ICBhbmQgPFNUUk9ORz5wYWlyX2NvbnRlbnQ8L1NUUk9ORz4sIGFuZAorICAgICAgIHdpbGwgdHJlYXQgdGhvc2UgYXMgb3B0aW9uYWwgcGFyYW1ldGVycyB3aGVuIG51bGwuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPmRlZmF1bHRfY29sLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+b3JzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZGVsY2guM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2NTYyYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2RlbGNoLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19kZWxjaC4zeCx2IDEuOCAyMDA2LzAyLzI1IDIxOjQyOjU3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfZGVsY2ggM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2RlbGNoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2goM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsY2guM3guaHRtbCI+Y3Vyc19kZWxjaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5kZWxjaDwvU1RST05HPiwgIDxTVFJPTkc+d2RlbGNoPC9TVFJPTkc+LCA8U1RST05HPm12ZGVsY2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3ZGVsY2g8L1NUUk9ORz4gLSBkZWxldGUgY2hhcmFjdGVyIHVuZGVyCisgICAgICAgdGhlIGN1cnNvciBpbiBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRlbGNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2RlbGNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZkZWxjaChpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3ZGVsY2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3I7ICBhbGwKKyAgICAgICBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIG9uIHRoZSBzYW1lIGxpbmUgYXJlCisgICAgICAgbW92ZWQgdG8gdGhlIGxlZnQgb25lIHBvc2l0aW9uIGFuZCB0aGUgbGFzdCAgY2hhcmFjdGVyICBvbgorICAgICAgIHRoZSBsaW5lIGlzIGZpbGxlZCB3aXRoIGEgYmxhbmsuICBUaGUgY3Vyc29yIHBvc2l0aW9uIGRvZXMKKyAgICAgICBub3QgY2hhbmdlIChhZnRlciBtb3ZpbmcgdG8gPEVNPnk8L0VNPiwgPEVNPng8L0VNPiwgIGlmICBzcGVjaWZpZWQpLiAgIChUaGlzCisgICAgICAgZG9lcyAgbm90ICBpbXBseSB1c2Ugb2YgdGhlIGhhcmR3YXJlIGRlbGV0ZSBjaGFyYWN0ZXIgZmVhLQorICAgICAgIHR1cmUuKQorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSBhbmQgYW4gPFNUUk9ORz5PSzwvU1RST05HPgorICAgICAgIChTVnI0ICBzcGVjaWZpZXMgIG9ubHkgICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKQorICAgICAgIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmRlbGNoPC9TVFJPTkc+LCA8U1RST05HPm12ZGVsY2g8L1NUUk9ORz4sIGFuZCA8U1RST05HPm12d2RlbGNoPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgIHN0YW5kYXJkLAorICAgICAgIElzc3VlICA0LiAgIFRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGV5IHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiBvbgorICAgICAgIGZhaWx1cmUsIGJ1dCBzcGVjaWZpZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxjaC4zeC5odG1sIj5jdXJzX2RlbGNoKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZGVsZXRlbG4uM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3M2NlNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2RlbGV0ZWxuLjN4Lmh0bWwKQEAgLTAsMCArMSwxMjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19kZWxldGVsbi4zeCx2IDEuMTEgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2RlbGV0ZWxuIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19kZWxldGVsbiAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPmN1cnNfZGVsZXRlbG4oM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+ZGVsZXRlbG48L1NUUk9ORz4sICA8U1RST05HPndkZWxldGVsbjwvU1RST05HPiwgIDxTVFJPTkc+aW5zZGVsbG48L1NUUk9ORz4sIDxTVFJPTkc+d2luc2RlbGxuPC9TVFJPTkc+LCA8U1RST05HPmluc2VydGxuPC9TVFJPTkc+LCA8U1RST05HPndpbi08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnNlcnRsbjwvU1RST05HPiAtIGRlbGV0ZSBhbmQgaW5zZXJ0IGxpbmVzIGluIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZGVsZXRlbG4odm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53ZGVsZXRlbG4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbnNkZWxsbihpbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbnNkZWxsbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5zZXJ0bG4odm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5zZXJ0bG4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+ZGVsZXRlbG48L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2RlbGV0ZWxuPC9TVFJPTkc+IHJvdXRpbmVzIGRlbGV0ZSB0aGUgbGluZSAgdW5kZXIKKyAgICAgICB0aGUgY3Vyc29yIGluIHRoZSB3aW5kb3c7IGFsbCBsaW5lcyBiZWxvdyB0aGUgY3VycmVudCBsaW5lCisgICAgICAgYXJlIG1vdmVkIHVwIG9uZSBsaW5lLiAgVGhlIGJvdHRvbSBsaW5lIG9mIHRoZSAgd2luZG93ICBpcworICAgICAgIGNsZWFyZWQuICBUaGUgY3Vyc29yIHBvc2l0aW9uIGRvZXMgbm90IGNoYW5nZS4KKworICAgICAgIFRoZSAgPFNUUk9ORz5pbnNkZWxsbjwvU1RST05HPiAgYW5kICA8U1RST05HPndpbnNkZWxsbjwvU1RST05HPiAgcm91dGluZXMsICBmb3IgIHBvc2l0aXZlIDxFTT5uPC9FTT4sCisgICAgICAgaW5zZXJ0IDxFTT5uPC9FTT4gbGluZXMgaW50byB0aGUgc3BlY2lmaWVkIHdpbmRvdyBhYm92ZSB0aGUgY3VycmVudAorICAgICAgIGxpbmUuICAgVGhlICA8RU0+bjwvRU0+ICBib3R0b20gIGxpbmVzICBhcmUgIGxvc3QuICBGb3IgbmVnYXRpdmUgPEVNPm48L0VNPiwKKyAgICAgICBkZWxldGUgPEVNPm48L0VNPiBsaW5lcyAoc3RhcnRpbmcgd2l0aCB0aGUgb25lIHVuZGVyICB0aGUgIGN1cnNvciksCisgICAgICAgYW5kICBtb3ZlICB0aGUgcmVtYWluaW5nIGxpbmVzIHVwLiAgVGhlIGJvdHRvbSA8RU0+bjwvRU0+IGxpbmVzIGFyZQorICAgICAgIGNsZWFyZWQuICBUaGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gcmVtYWlucyB0aGUgc2FtZS4KKworICAgICAgIFRoZSA8U1RST05HPmluc2VydGxuPC9TVFJPTkc+IGFuZCA8U1RST05HPndpbnNlcnRsbjwvU1RST05HPiByb3V0aW5lcyBpbnNlcnQgIGEgIGJsYW5rICBsaW5lCisgICAgICAgYWJvdmUgdGhlIGN1cnJlbnQgbGluZSBhbmQgdGhlIGJvdHRvbSBsaW5lIGlzIGxvc3QuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCBhbiA8U1RST05HPk9LPC9TVFJPTkc+CisgICAgICAgKFNWcjQgc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgIG90aGVyICB0aGFuICA8U1RST05HPkVSUjwvU1RST05HPiIpCisgICAgICAgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBYL09wZW4gIGRlZmluZXMgIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiB0aGlzIGltcGxlbWVudGEtCisgICAgICAgdGlvbiwgaWYgIHRoZSAgd2luZG93ICBwYXJhbWV0ZXIgIGlzICBudWxsLCAgYW4gIGVycm9yICBpcworICAgICAgIHJldHVybmVkLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LiAgVGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXkgcmV0dXJuICA8U1RST05HPkVSUjwvU1RST05HPiAgb24KKyAgICAgICBmYWlsdXJlLCBidXQgc3BlY2lmaWVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCBidXQgPFNUUk9ORz53aW5zZGVsbG48L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworICAgICAgIFRoZXNlICByb3V0aW5lcyAgZG8gIG5vdCByZXF1aXJlIGEgaGFyZHdhcmUgbGluZSBkZWxldGUgb3IKKyAgICAgICBpbnNlcnQgZmVhdHVyZSBpbiB0aGUgdGVybWluYWwuICBJbiBmYWN0LCAgdGhleSAgd2lsbCAgbm90CisgICAgICAgdXNlICBoYXJkd2FyZSAgbGluZSAgZGVsZXRlL2luc2VydCB1bmxlc3MgPFNUUk9ORz5pZGxvayguLi4sPC9TVFJPTkc+IDxTVFJPTkc+VFJVRSk8L1NUUk9ORz4KKyAgICAgICBoYXMgYmVlbiBzZXQgb24gdGhlIGN1cnJlbnQgd2luZG93LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPmN1cnNfZGVsZXRlbG4oM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19leHRlbmQuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2V4dGVuZC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzAwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19leHRlbmQuM3guaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTktb24KKyAgKiBASWQ6IGN1cnNfZXh0ZW5kLjN4LHYgMS4xNyAyMDA2LzEyLzI0IDE4OjAxOjQ4IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfZXh0ZW5kIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19leHRlbmQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfZXh0ZW5kLjN4Lmh0bWwiPmN1cnNfZXh0ZW5kKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19leHRlbmQuM3guaHRtbCI+Y3Vyc19leHRlbmQoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y3Vyc2VzX3ZlcnNpb248L1NUUk9ORz4sICA8U1RST05HPnVzZV9leHRlbmRlZF9uYW1lczwvU1RST05HPiAtIG1pc2NlbGxhbmVvdXMgY3Vyc2VzCisgICAgICAgZXh0ZW5zaW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4gPFNUUk9ORz5jdXJzZXNfdmVyc2lvbih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVzZV9leHRlbmRlZF9uYW1lcyhib29sPC9TVFJPTkc+IDxTVFJPTkc+ZW5hYmxlKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIGN1cnNlcyBsaWJyYXJ5IHdoaWNoCisgICAgICAgZG8gbm90IGZpdCBlYXNpbHkgaW50byBvdGhlciBjYXRlZ29yaWVzLgorCisgICAgICAgVXNlICA8RU0+Y3Vyc2VzPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+dmVyc2lvbigpPC9FTT4gdG8gZ2V0IHRoZSB2ZXJzaW9uIG51bWJlciwgaW5jbHVkaW5nCisgICAgICAgcGF0Y2ggbGV2ZWwgb2YgdGhlIGxpYnJhcnksIGUuZy4sIDxTVFJPTkc+NS4wLjE5OTkxMDIzPC9TVFJPTkc+CisKKyAgICAgICBUaGUgPEVNPnVzZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmV4dGVuZGVkPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+bmFtZXMoKTwvRU0+ICBmdW5jdGlvbiAgY29udHJvbHMgIHdoZXRoZXIgIHRoZQorICAgICAgIGNhbGxpbmcgIGFwcGxpY2F0aW9uICBpcyAgYWJsZSB0byB1c2UgdXNlci1kZWZpbmVkIG9yIG5vbi0KKyAgICAgICBzdGFuZGFyZCBuYW1lcyB3aGljaCBtYXkgYmUgIGNvbXBpbGVkICBpbnRvICB0aGUgIHRlcm1pbmZvCisgICAgICAgZGVzY3JpcHRpb24sIGkuZS4sIHZpYSB0aGUgdGVybWluZm8gb3IgdGVybWNhcCBpbnRlcmZhY2VzLgorICAgICAgIE5vcm1hbGx5IHRoZXNlIG5hbWVzIGFyZSAgYXZhaWxhYmxlICBmb3IgIHVzZSwgIHNpbmNlICB0aGUKKyAgICAgICBlc3NlbnRpYWwgIGRlY2lzaW9uICBpcyBtYWRlIGJ5IHVzaW5nIHRoZSA8U1RST05HPi14PC9TVFJPTkc+IG9wdGlvbiBvZiA8U1RST05HPnRpYzwvU1RST05HPgorICAgICAgIHRvIGNvbXBpbGUgZXh0ZW5kZWQgdGVybWluYWwgZGVmaW5pdGlvbnMuICBIb3dldmVyIHlvdSBjYW4KKyAgICAgICBkaXNhYmxlICB0aGlzICBmZWF0dXJlICB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyCisgICAgICAgaW1wbGVtZW50YXRpb25zIG9mIGN1cnNlcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gIG5jdXJzZXMuICAgVGhleSAgd2VyZSAgbm90CisgICAgICAgc3VwcG9ydGVkICBvbiAgVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgIGNvbi0KKyAgICAgICBkaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPiwgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPiwgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnQuM3guaHRtbCI+Y3Vyc19wcmludCgzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJkZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5kZWZhdWx0X2NvbG9ycygzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJkZWZpbmVfa2V5LjN4Lmh0bWwiPmRlZmluZV9rZXkoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+a2V5LTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5Ym91bmQuM3guaHRtbCI+Ym91bmQoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InJlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybSgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9IndyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBUaG9tYXMgRGlja2V5LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZXh0ZW5kLjN4Lmh0bWwiPmN1cnNfZXh0ZW5kKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0X3djaC4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0X3djaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTc3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19nZXRfd2NoLjN4Lmh0bWwKQEAgLTAsMCArMSwxNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19nZXRfd2NoLjN4LHYgMS42IDIwMDYvMDIvMjUgMjE6NDc6MDYgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19nZXRfd2NoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19nZXRfd2NoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93Y2guM3guaHRtbCI+Y3Vyc19nZXRfd2NoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Z2V0X3djaDwvU1RST05HPiwgIDxTVFJPTkc+d2dldF93Y2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12d2dldF93Y2g8L1NUUk9ORz4sIDxTVFJPTkc+dW5nZXRfd2NoPC9TVFJPTkc+IC0gZ2V0CisgICAgICAgKG9yIHB1c2ggYmFjaykgYSB3aWRlIGNoYXJhY3RlciBmcm9tIGN1cnNlcyB0ZXJtaW5hbCAga2V5LQorICAgICAgIGJvYXJkCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0X3djaCh3aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2dldF93Y2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndpbnRfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmdldF93Y2goaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndpbnRfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndnZXRfd2NoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2ludF90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVuZ2V0X3djaChjb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPEVNPndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmdldF93Y2g8L1NUUk9ORz4sIDxTVFJPTkc+d2dldF93Y2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRfd2NoPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5tdndnZXRfd2NoPC9TVFJPTkc+IGZ1bmN0aW9ucworICAgICAgIHJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgIHRlcm1pbmFsICBhc3NvY2lhdGVkICB3aXRoICB0aGUKKyAgICAgICBjdXJyZW50ICBvciAgc3BlY2lmaWVkICB3aW5kb3cuICAgSW4gIG5vLWRlbGF5IG1vZGUsIGlmIG5vCisgICAgICAgaW5wdXQgaXMgd2FpdGluZywgdGhlIHZhbHVlIDxTVFJPTkc+RVJSPC9TVFJPTkc+ICBpcyAgcmV0dXJuZWQuICAgSW4gIGRlbGF5CisgICAgICAgbW9kZSwgIHRoZSAgcHJvZ3JhbSAgd2FpdHMgIHVudGlsICB0aGUgIHN5c3RlbSBwYXNzZXMgdGV4dAorICAgICAgIHRocm91Z2ggdG8gdGhlICBwcm9ncmFtLiAgIERlcGVuZGluZyAgb24gIHRoZSAgc2V0dGluZyAgb2YKKyAgICAgICA8U1RST05HPmNicmVhazwvU1RST05HPiwgIHRoaXMgIGlzICBhZnRlciAgb25lICBjaGFyYWN0ZXIgKGNicmVhayBtb2RlKSwgb3IKKyAgICAgICBhZnRlciB0aGUgZmlyc3QgbmV3bGluZSAobm9jYnJlYWsgIG1vZGUpLiAgIEluICBoYWxmLWRlbGF5CisgICAgICAgbW9kZSwgIHRoZSAgcHJvZ3JhbSB3YWl0cyB1bnRpbCB0aGUgdXNlciB0eXBlcyBhIGNoYXJhY3RlcgorICAgICAgIG9yIHRoZSBzcGVjaWZpZWQgdGltZW91dCBpbnRlcnZhbCBoYXMgZWxhcHNlZC4KKworICAgICAgIFVubGVzcyA8U1RST05HPm5vZWNobzwvU1RST05HPiBoYXMgYmVlbiBzZXQsIHRoZXNlIHJvdXRpbmVzIGVjaG8gdGhlICBjaGFyLQorICAgICAgIGFjdGVyIGludG8gdGhlIGRlc2lnbmF0ZWQgd2luZG93LgorCisgICAgICAgSWYgIHRoZSB3aW5kb3cgaXMgbm90IGEgcGFkIGFuZCBoYXMgYmVlbiBtb3ZlZCBvciBtb2RpZmllZAorICAgICAgIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiwgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiB3aWxsICBiZSAgY2FsbGVkCisgICAgICAgYmVmb3JlIGFub3RoZXIgY2hhcmFjdGVyIGlzIHJlYWQuCisKKyAgICAgICBJZiAgPFNUUk9ORz5rZXlwYWQ8L1NUUk9ORz4gIGlzICBlbmFibGVkLCAgdGhlc2UgIGZ1bmN0aW9ucyAgcmVzcG9uZCB0byB0aGUKKyAgICAgICBwcmVzc2luZyBvZiBhIGZ1bmN0aW9uIGtleSBieSBzZXR0aW5nIHRoZSAgb2JqZWN0ICBwb2ludGVkCisgICAgICAgdG8gIGJ5ICA8RU0+d2NoPC9FTT4gIHRvICB0aGUgIGNvcnJlc3BvbmRpbmcgIDxTVFJPTkc+S0VZXzwvU1RST05HPiB2YWx1ZSBkZWZpbmVkIGluCisgICAgICAgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+IGFuZCByZXR1cm5pbmcgIDxTVFJPTkc+S0VZX0NPREVfWUVTPC9TVFJPTkc+LiAgIElmICBhICBjaGFyYWN0ZXIKKyAgICAgICAoc3VjaCBhcyBlc2NhcGUpIHRoYXQgY291bGQgYmUgdGhlIGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uCisgICAgICAga2V5IGlzIHJlY2VpdmVkLCBjdXJzZXMgc2V0cyBhIHRpbWVyLiAgSWYgdGhlIHJlbWFpbmRlciBvZgorICAgICAgIHRoZSAgc2VxdWVuY2UgIGRvZXMgIGFycml2ZSAgd2l0aGluICB0aGUgIGRlc2lnbmF0ZWQgdGltZSwKKyAgICAgICBjdXJzZXMgcGFzc2VzIHRocm91Z2ggIHRoZSAgY2hhcmFjdGVyOyAgb3RoZXJ3aXNlLCAgY3Vyc2VzCisgICAgICAgcmV0dXJucyAgdGhlICBmdW5jdGlvbiAga2V5ICB2YWx1ZS4gIEZvciB0aGlzIHJlYXNvbiwgbWFueQorICAgICAgIHRlcm1pbmFscyBleHBlcmllbmNlIGEgIGRlbGF5ICBiZXR3ZWVuICB0aGUgIHRpbWUgIGEgIHVzZXIKKyAgICAgICBwcmVzc2VzIHRoZSBlc2NhcGUga2V5IGFuZCB0aGUgdGltZSB0aGUgZXNjYXBlIGlzIHJldHVybmVkCisgICAgICAgdG8gdGhlIHByb2dyYW0uCisKKyAgICAgICBUaGUgPFNUUk9ORz51bmdldF93Y2g8L1NUUk9ORz4gZnVuY3Rpb24gcHVzaGVzIHRoZSB3aWRlIGNoYXJhY3RlciA8RU0+d2NoPC9FTT4gIGJhY2sKKyAgICAgICBvbnRvIHRoZSBoZWFkIG9mIHRoZSBpbnB1dCBxdWV1ZSwgc28gdGhlIHdpZGUgY2hhcmFjdGVyIGlzCisgICAgICAgcmV0dXJuZWQgYnkgdGhlIG5leHQgY2FsbCB0byA8U1RST05HPmdldF93Y2g8L1NUUk9ORz4uICBUaGUgcHVzaGJhY2sgb2Ygb25lCisgICAgICAgY2hhcmFjdGVyICBpcyAgZ3VhcmFudGVlZC4gIElmIHRoZSBwcm9ncmFtIGNhbGxzIDxTVFJPTkc+dW5nZXRfd2NoPC9TVFJPTkc+CisgICAgICAgdG9vIG1hbnkgdGltZXMgd2l0aG91dCBhbiBpbnRlcnZlbmluZyBjYWxsIHRvIDxTVFJPTkc+Z2V0X3djaDwvU1RST05HPiwgdGhlCisgICAgICAgb3BlcmF0aW9uIG1heSBmYWlsLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSAgaGVhZGVyICBmaWxlICA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4gIGF1dG9tYXRpY2FsbHkgIGluY2x1ZGVzIHRoZQorICAgICAgIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O3N0ZGlvLmgmZ3Q7PC9TVFJPTkc+LgorCisgICAgICAgQXBwbGljYXRpb25zIHNob3VsZCBub3QgZGVmaW5lIHRoZSBlc2NhcGUga2V5IGJ5IGl0c2VsZiBhcworICAgICAgIGEgc2luZ2xlLWNoYXJhY3RlciBmdW5jdGlvbi4KKworICAgICAgIFdoZW4gIHVzaW5nICA8U1RST05HPmdldF93Y2g8L1NUUk9ORz4sICA8U1RST05HPndnZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0X3djaDwvU1RST05HPiwgb3IgPFNUUk9ORz5tdndnZXRfd2NoPC9TVFJPTkc+LAorICAgICAgIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHVzZSA8U1RST05HPm5vY2JyZWFrPC9TVFJPTkc+IG1vZGUgYW5kIDxTVFJPTkc+ZWNobzwvU1RST05HPiBtb2RlIGF0CisgICAgICAgdGhlICBzYW1lICB0aW1lLiAgRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgdHR5IGRyaXZlcgorICAgICAgIHdoZW4gZWFjaCBjaGFyYWN0ZXIgaXMgIHR5cGVkLCAgdGhlICBwcm9ncmFtICBtYXkgIHByb2R1Y2UKKyAgICAgICB1bmRlc2lyYWJsZSByZXN1bHRzLgorCisgICAgICAgQWxsIGZ1bmN0aW9ucyBleGNlcHQgPFNUUk9ORz53Z2V0X3djaDwvU1RST05HPiBhbmQgPFNUUk9ORz51bmdldF93Y2g8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIFdoZW4gPFNUUk9ORz5nZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPndnZXRfd2NoPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0X3djaDwvU1RST05HPiwgIGFuZCAgPFNUUk9ORz5tdndnZXRfd2NoPC9TVFJPTkc+ICBmdW5jLQorICAgICAgIHRpb25zICBzdWNjZXNzZnVsbHkgcmVwb3J0IHRoZSBwcmVzc2luZyBvZiBhIGZ1bmN0aW9uIGtleSwKKyAgICAgICB0aGV5IHJldHVybiA8U1RST05HPktFWV9DT0RFX1lFUzwvU1RST05HPi4gIFdoZW4gdGhleSBzdWNjZXNzZnVsbHkgcmVwb3J0IGEKKyAgICAgICB3aWRlICBjaGFyYWN0ZXIsICB0aGV5ICByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPi4gIE90aGVyd2lzZSwgdGhleSByZXR1cm4KKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPi4KKworICAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCA8U1RST05HPnVuZ2V0X3djaDwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+T0s8L1NUUk9ORz4uICAgT3RoZXItCisgICAgICAgd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPiwgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193Y2guM3guaHRtbCI+Y3Vyc19pbnNfd2NoKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW92ZS4zeC5odG1sIj5jdXJzX21vdmUoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19nZXRfd3N0ci4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0X3dzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTljZWJlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0X3dzdHIuM3guaHRtbApAQCAtMCwwICsxLDE2MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2dldF93c3RyLjN4LHYgMS42IDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19nZXRfd3N0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZ2V0X3dzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3dzdHIuM3guaHRtbCI+Y3Vyc19nZXRfd3N0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd3N0ci4zeC5odG1sIj5jdXJzX2dldF93c3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldF93c3RyPC9TVFJPTkc+LCA8U1RST05HPmdldG5fd3N0cjwvU1RST05HPiwgPFNUUk9ORz53Z2V0X3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2dldG5fd3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdmdldF93c3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZnZXRuX3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3Z2V0X3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3Z2V0bl93c3RyPC9TVFJPTkc+IC0gZ2V0IGFuIGFycmF5IG9mCisgICAgICAgd2lkZSBjaGFyYWN0ZXJzIGZyb20gYSBjdXJzZXMgdGVybWluYWwga2V5Ym9hcmQKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRfd3N0cih3aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldG5fd3N0cih3aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2dldF93c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndnZXRuX3dzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndpbnRfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmdldF93c3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12Z2V0bl93c3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3Z2V0X3dzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53aW50X3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2dldG5fd3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndpbnRfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBlZmZlY3QgIG9mIDxTVFJPTkc+Z2V0X3dzdHI8L1NUUk9ORz4gaXMgYXMgdGhvdWdoIGEgc2VyaWVzIG9mIGNhbGxzIHRvCisgICAgICAgPFNUUk9ORz5nZXRfd2NoPC9TVFJPTkc+IHdlcmUgbWFkZSwgdW50aWwgYSBuZXdsaW5lLCBvdGhlciBlbmQtb2YtbGluZSwgIG9yCisgICAgICAgZW5kLW9mLWZpbGUgY29uZGl0aW9uIGlzIHByb2Nlc3NlZC4gIEFuIGVuZC1vZi1maWxlIGNvbmRpLQorICAgICAgIHRpb24gaXMgcmVwcmVzZW50ZWQgYnkgPFNUUk9ORz5XRU9GPC9TVFJPTkc+LCBhcyBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O3djaGFyLmgmZ3Q7PC9TVFJPTkc+LiAgVGhlCisgICAgICAgbmV3bGluZSAgYW5kIGVuZC1vZi1saW5lIGNvbmRpdGlvbnMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZQorICAgICAgIDxTVFJPTkc+XG48L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IHZhbHVlLiAgSW4gYWxsIGluc3RhbmNlcywgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICAgICAgaXMgIHRlcm1pbmF0ZWQgIGJ5IGEgbnVsbCA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4uICBUaGUgcm91dGluZSBwbGFjZXMgcmUtCisgICAgICAgc3VsdGluZyB2YWx1ZXMgaW4gdGhlIGFyZWEgcG9pbnRlZCB0byBieSA8RU0+d3N0cjwvRU0+LgorCisgICAgICAgVGhlIHVzZXIncyBlcmFzZSBhbmQga2lsbCBjaGFyYWN0ZXJzIGFyZSBpbnRlcnByZXRlZC4gICBJZgorICAgICAgIGtleXBhZCAgIG1vZGUgICBpcyAgIG9uICAgZm9yICB0aGUgIHdpbmRvdywgIDxTVFJPTkc+S0VZX0xFRlQ8L1NUUk9ORz4gIGFuZAorICAgICAgIDxTVFJPTkc+S0VZX0JBQ0tTUEFDRTwvU1RST05HPiBhcmUgYm90aCBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gdGhlIHVzZXIncworICAgICAgIGtpbGwgY2hhcmFjdGVyLgorCisgICAgICAgQ2hhcmFjdGVycyAgaW5wdXQgYXJlIGVjaG9lZCBvbmx5IGlmIDxTVFJPTkc+ZWNobzwvU1RST05HPiBpcyBjdXJyZW50bHkgb24uCisgICAgICAgSW4gdGhhdCBjYXNlLCBiYWNrc3BhY2UgaXMgZWNob2VkIGFzIGRlbGV0aW9uIG9mIHRoZSAgcHJlLQorICAgICAgIHZpb3VzIGNoYXJhY3RlciAodHlwaWNhbGx5IGEgbGVmdCBtb3Rpb24pLgorCisgICAgICAgVGhlICBlZmZlY3Qgb2YgPFNUUk9ORz53Z2V0X3dzdHI8L1NUUk9ORz4gaXMgYXMgdGhvdWdoIGEgc2VyaWVzIG9mIGNhbGxzIHRvCisgICAgICAgPFNUUk9ORz53Z2V0X3djaDwvU1RST05HPiB3ZXJlIG1hZGUuCisKKyAgICAgICBUaGUgZWZmZWN0IG9mIDxTVFJPTkc+bXZnZXRfd3N0cjwvU1RST05HPiBpcyBhcyB0aG91Z2ggYSBjYWxsIHRvICA8U1RST05HPm1vdmU8L1NUUk9ORz4gIGFuZAorICAgICAgIHRoZW4gYSBzZXJpZXMgb2YgY2FsbHMgdG8gPFNUUk9ORz5nZXRfd2NoPC9TVFJPTkc+IHdlcmUgbWFkZS4KKworICAgICAgIFRoZSBlZmZlY3Qgb2YgPFNUUk9ORz5tdndnZXRfd3N0cjwvU1RST05HPiBpcyBhcyB0aG91Z2ggYSBjYWxsIHRvIDxTVFJPTkc+d21vdmU8L1NUUk9ORz4gYW5kCisgICAgICAgdGhlbiBhIHNlcmllcyBvZiBjYWxscyB0byA8U1RST05HPndnZXRfd2NoPC9TVFJPTkc+IHdlcmUgbWFkZS4KKworICAgICAgIFRoZSA8U1RST05HPmdldG5fd3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdmdldG5fd3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdndnZXRuX3dzdHI8L1NUUk9ORz4sICBhbmQgIDxTVFJPTkc+d2dldG5fd3N0cjwvU1RST05HPgorICAgICAgIGZ1bmN0aW9ucyAgYXJlICBpZGVudGljYWwgIHRvICB0aGUgIDxTVFJPTkc+Z2V0X3dzdHI8L1NUUk9ORz4sICA8U1RST05HPm12Z2V0X3dzdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdndnZXRfd3N0cjwvU1RST05HPiwgYW5kIDxTVFJPTkc+d2dldF93c3RyPC9TVFJPTkc+IGZ1bmN0aW9ucywgcmVzcGVjdGl2ZWx5LCBleGNlcHQKKyAgICAgICB0aGF0ICB0aGUgPFNUUk9ORz4qbl8qPC9TVFJPTkc+IHZlcnNpb25zIHJlYWQgYXQgbW9zdCA8RU0+bjwvRU0+IGNoYXJhY3RlcnMsIGxldHRpbmcKKyAgICAgICB0aGUgYXBwbGljYXRpb24gcHJldmVudCBvdmVyZmxvdyBvZiB0aGUgaW5wdXQgYnVmZmVyLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFVzaW5nIDxTVFJPTkc+Z2V0X3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRfd3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdndnZXRfd3N0cjwvU1RST05HPiwgb3IgIDxTVFJPTkc+d2dldF93c3RyPC9TVFJPTkc+ICB0bworICAgICAgIHJlYWQgIGEgIGxpbmUgIHRoYXQgb3ZlcmZsb3dzIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDxTVFJPTkc+d3N0cjwvU1RST05HPgorICAgICAgIGNhdXNlcyAgdW5kZWZpbmVkICByZXN1bHRzLiAgICBUaGUgICB1c2UgICBvZiAgIDxTVFJPTkc+Z2V0bl93c3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZnZXRuX3dzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3Z2V0bl93c3RyPC9TVFJPTkc+LCBvciA8U1RST05HPndnZXRuX3dzdHI8L1NUUk9ORz4sIHJlc3BlY3RpdmVseSwgaXMKKyAgICAgICByZWNvbW1lbmRlZC4KKworICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgcmV0dXJuIDxTVFJPTkc+S0VZXzwvU1RST05HPiB2YWx1ZXMgYmVjYXVzZSB0aGVyZSBpcworICAgICAgIG5vICB3YXkgIHRvICBkaXN0aW5ndWlzaCBhIDxTVFJPTkc+S0VZXzwvU1RST05HPiB2YWx1ZSBmcm9tIGEgdmFsaWQgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+CisgICAgICAgdmFsdWUuCisKKyAgICAgICBBbGwgb2YgdGhlc2Ugcm91dGluZXMgZXhjZXB0IDxTVFJPTkc+d2dldG5fd3N0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPiB1cG9uICBzdWNjZXNzZnVsICBjb21wbGUtCisgICAgICAgdGlvbi4gIE90aGVyd2lzZSwgdGhleSByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4uCisKKyAgICAgICBGdW5jdGlvbnMgIHVzaW5nICBhIHdpbmRvdyBwYXJhbWV0ZXIgcmV0dXJuIGFuIGVycm9yIGlmIGl0CisgICAgICAgaXMgbnVsbC4KKworICAgICAgICAgICAgICA8U1RST05HPndnZXRuX3dzdHI8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmICB0aGUgIGFzc29jaWF0ZWQgIGNhbGwgIHRvCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz53Z2V0X3djaDwvU1RST05HPiBmYWlsZWQuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIFRoZSBTaW5nbGUgVW5peCBTcGVjaWZpLQorICAgICAgIGNhdGlvbiwgVmVyc2lvbiAyLiAgTm8gZXJyb3IgY29uZGl0aW9ucyBhcmUgZGVmaW5lZC4gIFRoaXMKKyAgICAgICBpbXBsZW1lbnRhdGlvbiAgcmV0dXJucyBFUlIgaWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsCisgICAgICAgb3IgaWYgdGhlIGxvd2VyLWxldmVsIDxTVFJPTkc+d2dldF93Y2g8L1NUUk9ORz4gY2FsbCByZXR1cm5zICBhbiAgRVJSLiAgIEluCisgICAgICAgdGhlICBsYXR0ZXIgIGNhc2UsICBhbiAgRVJSICByZXR1cm4gIHdpdGhvdXQgb3RoZXIgZGF0YSBpcworICAgICAgIHRyZWF0ZWQgYXMgYW4gZW5kLW9mLWZpbGUgY29uZGl0aW9uLCBhbmQgdGhlIHJldHVybmVkICBhci0KKyAgICAgICByYXkgY29udGFpbnMgYSA8U1RST05HPldFT0Y8L1NUUk9ORz4gZm9sbG93ZWQgYnkgYSBudWxsIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPi4KKworICAgICAgIFgvT3BlbiAgY3Vyc2VzICBkb2N1bWVudHMgdGhlc2UgZnVuY3Rpb25zIHRvIHBhc3MgYW4gYXJyYXkKKyAgICAgICBvZiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4sIGJ1dCBhbGwgb2YgdGhlIHZlbmRvcnMgIGltcGxlbWVudCAgdGhpcyAgdXNpbmcKKyAgICAgICA8U1RST05HPndpbnRfdDwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICBGdW5jdGlvbnM6ICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd2NoLjN4Lmh0bWwiPmN1cnNfZ2V0X3djaCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3dzdHIuM3guaHRtbCI+Y3Vyc19nZXRfd3N0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2dldGNjaGFyLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19nZXRjY2hhci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NWNlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19nZXRjY2hhci4zeC5odG1sCkBAIC0wLDAgKzEsMTU3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfZ2V0Y2NoYXIuM3gsdiAxLjExIDIwMDgvMDUvMTcgMTk6Mzc6MDUgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19nZXRjY2hhciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZ2V0Y2NoYXIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2NoYXIuM3guaHRtbCI+Y3Vyc19nZXRjY2hhcigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjY2hhci4zeC5odG1sIj5jdXJzX2dldGNjaGFyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldGNjaGFyPC9TVFJPTkc+LCAgPFNUUk9ORz5zZXRjY2hhcjwvU1RST05HPiAtIEdldCBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBhbmQgcmVuLQorICAgICAgIGRpdGlvbiBmcm9tIGEgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IG9yIHNldCBhIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiBmcm9tIGEgd2lkZS1jaGFyYWMtCisgICAgICAgdGVyIHN0cmluZworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldGNjaGFyKDwvU1RST05HPgorICAgICAgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjdmFsPC9FTT48U1RST05HPiw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPiw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5hdHRyczwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+CisgICAgICAgICAgICAgICA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5jb2xvcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPjxTVFJPTkc+LDwvU1RST05HPgorICAgICAgICAgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5vcHRzPC9FTT4gPFNUUk9ORz4pOzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zZXRjY2hhcig8L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2N2YWw8L0VNPjxTVFJPTkc+LDwvU1RST05HPgorICAgICAgICAgICAgICAgPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+CisgICAgICAgICAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxFTT5hdHRyczwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+CisgICAgICAgICAgICAgICA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxFTT5jb2xvcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPjxTVFJPTkc+LDwvU1RST05HPgorICAgICAgICAgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5vcHRzPC9FTT4gPFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5nZXRjY2hhcjwvU1RST05HPiAgZnVuY3Rpb24gIGdldHMgIGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGFuZAorICAgICAgIHJlbmRpdGlvbiBmcm9tIGEgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IGFyZ3VtZW50LiAgV2hlbiA8RU0+d2NoPC9FTT4gaXMgbm90IGEgbnVsbAorICAgICAgIHBvaW50ZXIsIHRoZSA8U1RST05HPmdldGNjaGFyPC9TVFJPTkc+IGZ1bmN0aW9uIGRvZXMgdGhlIGZvbGxvd2luZzoKKworICAgICAgIC0gICAgRXh0cmFjdHMgaW5mb3JtYXRpb24gZnJvbSBhIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiB2YWx1ZSA8RU0+d2N2YWw8L0VNPgorCisgICAgICAgLSAgICBTdG9yZXMgIHRoZSAgY2hhcmFjdGVyICBhdHRyaWJ1dGVzICBpbiAgdGhlICBsb2NhdGlvbgorICAgICAgICAgICAgcG9pbnRlZCB0byBieSA8RU0+YXR0cnM8L0VNPgorCisgICAgICAgLSAgICBTdG9yZXMgdGhlIGNvbG9yLXBhaXIgaW4gdGhlIGxvY2F0aW9uIHBvaW50ZWQgIHRvICBieQorICAgICAgICAgICAgPEVNPmNvbG9yPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+cGFpcjwvRU0+CisKKyAgICAgICAtICAgIFN0b3JlcyAgdGhlICB3aWRlLWNoYXJhY3RlciBzdHJpbmcsIGNoYXJhY3RlcnMgcmVmZXItCisgICAgICAgICAgICBlbmNlZCBieSA8RU0+d2N2YWw8L0VNPiwgaW50byB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8RU0+d2NoPC9FTT4uCisKKyAgICAgICBXaGVuIDxFTT53Y2g8L0VNPiBpcyBhIG51bGwgcG9pbnRlciwgdGhlIDxTVFJPTkc+Z2V0Y2NoYXI8L1NUUk9ORz4gZnVuY3Rpb24gZG9lcyB0aGUKKyAgICAgICBmb2xsb3dpbmc6CisKKyAgICAgICAtICAgIE9idGFpbnMgIHRoZSAgbnVtYmVyIG9mIHdpZGUgY2hhcmFjdGVycyBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICA8RU0+d2N2YWw8L0VNPgorCisgICAgICAgLSAgICBEb2VzIG5vdCBjaGFuZ2UgIHRoZSAgZGF0YSAgcmVmZXJlbmNlZCAgYnkgIDxFTT5hdHRyczwvRU0+ICBvcgorICAgICAgICAgICAgPEVNPmNvbG9yPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+cGFpcjwvRU0+CisKKyAgICAgICBUaGUgIDxTVFJPTkc+c2V0Y2NoYXI8L1NUUk9ORz4gZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8KKyAgICAgICBieSA8RU0+d2N2YWw8L0VNPiBieSB1c2luZzoKKworICAgICAgIC0gICAgVGhlIGNoYXJhY3RlciBhdHRyaWJ1dGVzIGluIDxFTT5hdHRyczwvRU0+CisKKyAgICAgICAtICAgIFRoZSBjb2xvciBwYWlyIGluIDxFTT5jb2xvcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnBhaXI8L0VNPgorCisgICAgICAgLSAgICBUaGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgIHRvICBieSAgPEVNPndjaDwvRU0+LiAgIFRoZQorICAgICAgICAgICAgc3RyaW5nICBtdXN0IGJlIEwnXDAnIHRlcm1pbmF0ZWQsIGNvbnRhaW4gYXQgbW9zdCBvbmUKKyAgICAgICAgICAgIHNwYWNpbmcgY2hhcmFjdGVyLCB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdC4KKworICAgICAgICAgICAgVXAgdG8gPFNUUk9ORz5DQ0hBUldfTUFYPC9TVFJPTkc+LTEgbm9uc3BhY2luZyBjaGFyYWN0ZXJzIG1heSAgZm9sbG93LgorICAgICAgICAgICAgQWRkaXRpb25hbCBub25zcGFjaW5nIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuCisKKyAgICAgICAgICAgIFRoZSAgc3RyaW5nICBtYXkgIGNvbnRhaW4gIGEgc2luZ2xlIGNvbnRyb2wgY2hhcmFjdGVyCisgICAgICAgICAgICBpbnN0ZWFkLiAgSW4gdGhhdCBjYXNlLCBubyBub25zcGFjaW5nIGNoYXJhY3RlcnMgIGFyZQorICAgICAgICAgICAgYWxsb3dlZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxFTT5vcHRzPC9FTT4gYXJndW1lbnQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICBDdXJyZW50bHksCisgICAgICAgYW4gYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIGEgbnVsbCBwb2ludGVyIGFzIDxFTT5vcHRzPC9FTT4uCisKKyAgICAgICBUaGUgPEVNPndjdmFsPC9FTT4gYXJndW1lbnQgbWF5IGJlIGEgdmFsdWUgZ2VuZXJhdGVkIGJ5IGEgIGNhbGwgIHRvCisgICAgICAgPFNUUk9ORz5zZXRjY2hhcjwvU1RST05HPiAgb3IgYnkgYSBmdW5jdGlvbiB0aGF0IGhhcyBhIDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiBvdXRwdXQgYXJndS0KKyAgICAgICBtZW50LiAgSWYgPEVNPndjdmFsPC9FTT4gaXMgY29uc3RydWN0ZWQgYnkgIGFueSAgb3RoZXIgIG1lYW5zLCAgdGhlCisgICAgICAgZWZmZWN0IGlzIHVuc3BlY2lmaWVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRVM8L0gyPjxQUkU+CisgICAgICAgV2hlbiA8RU0+d2NoPC9FTT4gaXMgYSBudWxsIHBvaW50ZXIsIDxTVFJPTkc+Z2V0Y2NoYXI8L1NUUk9ORz4gcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgICAgICAgd2lkZSBjaGFyYWN0ZXJzIHJlZmVyZW5jZWQgYnkgPEVNPndjdmFsPC9FTT4uCisKKyAgICAgICBXaGVuIDxFTT53Y2g8L0VNPiBpcyBub3QgYSBudWxsIHBvaW50ZXIsIDxTVFJPTkc+Z2V0Y2NoYXI8L1NUUk9ORz4gcmV0dXJucyAgPFNUUk9ORz5PSzwvU1RST05HPiAgdXBvbgorICAgICAgIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgYW5kIDxTVFJPTkc+RVJSPC9TVFJPTkc+IG90aGVyd2lzZS4KKworICAgICAgIFVwb24gIHN1Y2Nlc3NmdWwgIGNvbXBsZXRpb24sIDxTVFJPTkc+c2V0Y2NoYXI8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPk9LPC9TVFJPTkc+LiAgT3RoZXItCisgICAgICAgd2lzZSwgaXQgcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICBGdW5jdGlvbnM6ICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+LCAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9Indjd2lkdGguMy5odG1sIj53Y3dpZHRoKDMpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjY2hhci4zeC5odG1sIj5jdXJzX2dldGNjaGFyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0Y2guM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkZjY2MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2dldGNoLjN4Lmh0bWwKQEAgLTAsMCArMSwzMzggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfZ2V0Y2guM3gsdiAxLjMwIDIwMDYvMTIvMDIgMTc6MDI6NTMgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19nZXRjaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZ2V0Y2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldGNoPC9TVFJPTkc+LCA8U1RST05HPndnZXRjaDwvU1RST05HPiwgPFNUUk9ORz5tdmdldGNoPC9TVFJPTkc+LCA8U1RST05HPm12d2dldGNoPC9TVFJPTkc+LCA8U1RST05HPnVuZ2V0Y2g8L1NUUk9ORz4sIDxTVFJPTkc+aGFzX2tleTwvU1RST05HPiAtIGdldAorICAgICAgIChvciBwdXNoIGJhY2spIGNoYXJhY3RlcnMgZnJvbSA8U1RST05HPmN1cnNlczwvU1RST05HPiB0ZXJtaW5hbCBrZXlib2FyZAorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldGNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2dldGNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZnZXRjaChpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3Z2V0Y2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dW5nZXRjaChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5oYXNfa2V5KGludDwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5nZXRjaDwvU1RST05HPiwgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRjaDwvU1RST05HPiBhbmQgPFNUUk9ORz5tdndnZXRjaDwvU1RST05HPiwgcm91dGluZXMgIHJlYWQgIGEKKyAgICAgICBjaGFyYWN0ZXIgIGZyb20gdGhlIHdpbmRvdy4gIEluIG5vLWRlbGF5IG1vZGUsIGlmIG5vIGlucHV0CisgICAgICAgaXMgd2FpdGluZywgdGhlIHZhbHVlIDxTVFJPTkc+RVJSPC9TVFJPTkc+IGlzIHJldHVybmVkLiAgSW4gZGVsYXkgbW9kZSwgdGhlCisgICAgICAgcHJvZ3JhbSAgd2FpdHMgdW50aWwgdGhlIHN5c3RlbSBwYXNzZXMgdGV4dCB0aHJvdWdoIHRvIHRoZQorICAgICAgIHByb2dyYW0uICBEZXBlbmRpbmcgb24gdGhlIHNldHRpbmcgb2YgPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4sIHRoaXMgaXMgIGFmLQorICAgICAgIHRlciAgb25lICBjaGFyYWN0ZXIgKGNicmVhayBtb2RlKSwgb3IgYWZ0ZXIgdGhlIGZpcnN0IG5ldy0KKyAgICAgICBsaW5lIChub2NicmVhayBtb2RlKS4gIEluICBoYWxmLWRlbGF5ICBtb2RlLCAgdGhlICBwcm9ncmFtCisgICAgICAgd2FpdHMgIHVudGlsIGEgY2hhcmFjdGVyIGlzIHR5cGVkIG9yIHRoZSBzcGVjaWZpZWQgdGltZW91dAorICAgICAgIGhhcyBiZWVuIHJlYWNoZWQuCisKKyAgICAgICBVbmxlc3MgPFNUUk9ORz5ub2VjaG88L1NUUk9ORz4gaGFzIGJlZW4gc2V0LCB0aGVuIHRoZSBjaGFyYWN0ZXIgIHdpbGwgIGFsc28KKyAgICAgICBiZSBlY2hvZWQgaW50byB0aGUgZGVzaWduYXRlZCB3aW5kb3cgYWNjb3JkaW5nIHRvIHRoZSBmb2wtCisgICAgICAgbG93aW5nIHJ1bGVzOiBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBjdXJyZW50IGVyYXNlICBjaGFyLQorICAgICAgIGFjdGVyLCAgbGVmdCAgYXJyb3csIG9yIGJhY2tzcGFjZSwgdGhlIGN1cnNvciBpcyBtb3ZlZCBvbmUKKyAgICAgICBzcGFjZSB0byB0aGUgbGVmdCBhbmQgdGhhdCBzY3JlZW4gcG9zaXRpb24gaXMgZXJhc2VkIGFzIGlmCisgICAgICAgPFNUUk9ORz5kZWxjaDwvU1RST05HPiBoYWQgYmVlbiBjYWxsZWQuICBJZiB0aGUgY2hhcmFjdGVyIHZhbHVlIGlzIGFueSBvdGgtCisgICAgICAgZXIgPFNUUk9ORz5LRVlfPC9TVFJPTkc+IGRlZmluZSwgdGhlIHVzZXIgaXMgIGFsZXJ0ZWQgIHdpdGggIGEgIDxTVFJPTkc+YmVlcDwvU1RST05HPiAgY2FsbC4KKyAgICAgICBPdGhlcndpc2UgdGhlIGNoYXJhY3RlciBpcyBzaW1wbHkgb3V0cHV0IHRvIHRoZSBzY3JlZW4uCisKKyAgICAgICBJZiB0aGUgd2luZG93IGlzIG5vdCBhIHBhZCwgYW5kIGl0IGhhcyBiZWVuIG1vdmVkIG9yIG1vZGktCisgICAgICAgZmllZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvICA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+LCAgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiAgd2lsbCAgYmUKKyAgICAgICBjYWxsZWQgYmVmb3JlIGFub3RoZXIgY2hhcmFjdGVyIGlzIHJlYWQuCisKKyAgICAgICBJZiAgPFNUUk9ORz5rZXlwYWQ8L1NUUk9ORz4gaXMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+LCBhbmQgYSBmdW5jdGlvbiBrZXkgaXMgcHJlc3NlZCwgdGhlIHRvLQorICAgICAgIGtlbiBmb3IgdGhhdCBmdW5jdGlvbiBrZXkgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAgdGhlICByYXcKKyAgICAgICBjaGFyYWN0ZXJzLiAgIFBvc3NpYmxlIGZ1bmN0aW9uIGtleXMgYXJlIGRlZmluZWQgaW4gPFNUUk9ORz4mbHQ7Y3Vycy08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmVzLmgmZ3Q7PC9TVFJPTkc+IGFzIG1hY3JvcyB3aXRoIHZhbHVlcyBvdXRzaWRlICB0aGUgIHJhbmdlICBvZiAgOC1iaXQKKyAgICAgICBjaGFyYWN0ZXJzICB3aG9zZSAgbmFtZXMgYmVnaW4gd2l0aCA8U1RST05HPktFWV88L1NUUk9ORz4uIFRodXMsIGEgdmFyaWFibGUKKyAgICAgICBpbnRlbmRlZCB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiAga2V5ICBtdXN0CisgICAgICAgYmUgb2Ygc2hvcnQgc2l6ZSBvciBsYXJnZXIuCisKKyAgICAgICBXaGVuIGEgY2hhcmFjdGVyIHRoYXQgY291bGQgYmUgdGhlIGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uCisgICAgICAga2V5IGlzIHJlY2VpdmVkICh3aGljaCwgb24gbW9kZXJuIHRlcm1pbmFscywgbWVhbnMgYW4gIGVzLQorICAgICAgIGNhcGUgY2hhcmFjdGVyKSwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gc2V0cyBhIHRpbWVyLiAgSWYgdGhlIHJlbWFpbmRlciBvZgorICAgICAgIHRoZSBzZXF1ZW5jZSBkb2VzIG5vdCBjb21lIGluIHdpdGhpbiB0aGUgZGVzaWduYXRlZCAgdGltZSwKKyAgICAgICB0aGUgIGNoYXJhY3RlciAgaXMgcGFzc2VkIHRocm91Z2g7IG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uCisgICAgICAga2V5IHZhbHVlIGlzIHJldHVybmVkLiAgRm9yIHRoaXMgIHJlYXNvbiwgIG1hbnkgIHRlcm1pbmFscworICAgICAgIGV4cGVyaWVuY2UgYSBkZWxheSBiZXR3ZWVuIHRoZSB0aW1lIGEgdXNlciBwcmVzc2VzIHRoZSBlcy0KKyAgICAgICBjYXBlIGtleSBhbmQgdGhlIGVzY2FwZSBpcyByZXR1cm5lZCB0byB0aGUgcHJvZ3JhbS4KKworICAgICAgIFRoZSA8U1RST05HPnVuZ2V0Y2g8L1NUUk9ORz4gcm91dGluZSBwbGFjZXMgPEVNPmNoPC9FTT4gYmFjayBvbnRvIHRoZSBpbnB1dCBxdWV1ZSB0bworICAgICAgIGJlIHJldHVybmVkIGJ5IHRoZSBuZXh0IGNhbGwgdG8gPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4uICBUaGVyZSBpcyBqdXN0IG9uZQorICAgICAgIGlucHV0IHF1ZXVlIGZvciBhbGwgd2luZG93cy4KKworCisgICA8U1RST05HPkZ1bmN0aW9uPC9TVFJPTkc+IDxTVFJPTkc+S2V5czwvU1RST05HPgorICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24ga2V5cywgZGVmaW5lZCBpbiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4sICBtaWdodAorICAgICAgIGJlICByZXR1cm5lZCAgYnkgIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4gIGlmIDxTVFJPTkc+a2V5cGFkPC9TVFJPTkc+IGhhcyBiZWVuIGVuYWJsZWQuICBOb3RlCisgICAgICAgdGhhdCBub3QgYWxsIG9mIHRoZXNlIGFyZSAgbmVjZXNzYXJpbHkgIHN1cHBvcnRlZCAgb24gIGFueQorICAgICAgIHBhcnRpY3VsYXIgdGVybWluYWwuCisKKworICAgICAgICAgICAgPEVNPk5hbWU8L0VNPiAgICAgICAgICAgIDxFTT5LZXk8L0VNPiA8RU0+bmFtZTwvRU0+CisgICAgICAgICAgICBLRVlfQlJFQUsgICAgICAgQnJlYWsga2V5CisgICAgICAgICAgICBLRVlfRE9XTiAgICAgICAgVGhlIGZvdXIgYXJyb3cga2V5cyAuLi4KKyAgICAgICAgICAgIEtFWV9VUAorICAgICAgICAgICAgS0VZX0xFRlQKKyAgICAgICAgICAgIEtFWV9SSUdIVAorICAgICAgICAgICAgS0VZX0hPTUUgICAgICAgIEhvbWUga2V5ICh1cHdhcmQrbGVmdCBhcnJvdykKKyAgICAgICAgICAgIEtFWV9CQUNLU1BBQ0UgICBCYWNrc3BhY2UKKyAgICAgICAgICAgIEtFWV9GMCAgICAgICAgICBGdW5jdGlvbiBrZXlzOyBzcGFjZSBmb3IgNjQga2V5cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlc2VydmVkLgorICAgICAgICAgICAgS0VZX0YoPEVNPm48L0VNPikgICAgICAgIEZvciAwICZsdDs9IDxFTT5uPC9FTT4gJmx0Oz0gNjMKKyAgICAgICAgICAgIEtFWV9ETCAgICAgICAgICBEZWxldGUgbGluZQorICAgICAgICAgICAgS0VZX0lMICAgICAgICAgIEluc2VydCBsaW5lCisgICAgICAgICAgICBLRVlfREMgICAgICAgICAgRGVsZXRlIGNoYXJhY3RlcgorICAgICAgICAgICAgS0VZX0lDICAgICAgICAgIEluc2VydCBjaGFyIG9yIGVudGVyIGluc2VydCBtb2RlCisgICAgICAgICAgICBLRVlfRUlDICAgICAgICAgRXhpdCBpbnNlcnQgY2hhciBtb2RlCisgICAgICAgICAgICBLRVlfQ0xFQVIgICAgICAgQ2xlYXIgc2NyZWVuCisgICAgICAgICAgICBLRVlfRU9TICAgICAgICAgQ2xlYXIgdG8gZW5kIG9mIHNjcmVlbgorICAgICAgICAgICAgS0VZX0VPTCAgICAgICAgIENsZWFyIHRvIGVuZCBvZiBsaW5lCisgICAgICAgICAgICBLRVlfU0YgICAgICAgICAgU2Nyb2xsIDEgbGluZSBmb3J3YXJkCisgICAgICAgICAgICBLRVlfU1IgICAgICAgICAgU2Nyb2xsIDEgbGluZSBiYWNrd2FyZCAocmV2ZXJzZSkKKyAgICAgICAgICAgIEtFWV9OUEFHRSAgICAgICBOZXh0IHBhZ2UKKyAgICAgICAgICAgIEtFWV9QUEFHRSAgICAgICBQcmV2aW91cyBwYWdlCisgICAgICAgICAgICBLRVlfU1RBQiAgICAgICAgU2V0IHRhYgorICAgICAgICAgICAgS0VZX0NUQUIgICAgICAgIENsZWFyIHRhYgorICAgICAgICAgICAgS0VZX0NBVEFCICAgICAgIENsZWFyIGFsbCB0YWJzCisgICAgICAgICAgICBLRVlfRU5URVIgICAgICAgRW50ZXIgb3Igc2VuZAorICAgICAgICAgICAgS0VZX1NSRVNFVCAgICAgIFNvZnQgKHBhcnRpYWwpIHJlc2V0CisgICAgICAgICAgICBLRVlfUkVTRVQgICAgICAgUmVzZXQgb3IgaGFyZCByZXNldAorICAgICAgICAgICAgS0VZX1BSSU5UICAgICAgIFByaW50IG9yIGNvcHkKKyAgICAgICAgICAgIEtFWV9MTCAgICAgICAgICBIb21lIGRvd24gb3IgYm90dG9tIChsb3dlciBsZWZ0KQorICAgICAgICAgICAgS0VZX0ExICAgICAgICAgIFVwcGVyIGxlZnQgb2Yga2V5cGFkCisgICAgICAgICAgICBLRVlfQTMgICAgICAgICAgVXBwZXIgcmlnaHQgb2Yga2V5cGFkCisgICAgICAgICAgICBLRVlfQjIgICAgICAgICAgQ2VudGVyIG9mIGtleXBhZAorICAgICAgICAgICAgS0VZX0MxICAgICAgICAgIExvd2VyIGxlZnQgb2Yga2V5cGFkCisgICAgICAgICAgICBLRVlfQzMgICAgICAgICAgTG93ZXIgcmlnaHQgb2Yga2V5cGFkCisgICAgICAgICAgICBLRVlfQlRBQiAgICAgICAgQmFjayB0YWIga2V5CisgICAgICAgICAgICBLRVlfQkVHICAgICAgICAgQmVnKGlubmluZykga2V5CisgICAgICAgICAgICBLRVlfQ0FOQ0VMICAgICAgQ2FuY2VsIGtleQorICAgICAgICAgICAgS0VZX0NMT1NFICAgICAgIENsb3NlIGtleQorICAgICAgICAgICAgS0VZX0NPTU1BTkQgICAgIENtZCAoY29tbWFuZCkga2V5CisgICAgICAgICAgICBLRVlfQ09QWSAgICAgICAgQ29weSBrZXkKKyAgICAgICAgICAgIEtFWV9DUkVBVEUgICAgICBDcmVhdGUga2V5CisgICAgICAgICAgICBLRVlfRU5EICAgICAgICAgRW5kIGtleQorICAgICAgICAgICAgS0VZX0VYSVQgICAgICAgIEV4aXQga2V5CisgICAgICAgICAgICBLRVlfRklORCAgICAgICAgRmluZCBrZXkKKyAgICAgICAgICAgIEtFWV9IRUxQICAgICAgICBIZWxwIGtleQorICAgICAgICAgICAgS0VZX01BUksgICAgICAgIE1hcmsga2V5CisgICAgICAgICAgICBLRVlfTUVTU0FHRSAgICAgTWVzc2FnZSBrZXkKKyAgICAgICAgICAgIEtFWV9NT1VTRSAgICAgICBNb3VzZSBldmVudCByZWFkCisgICAgICAgICAgICBLRVlfTU9WRSAgICAgICAgTW92ZSBrZXkKKyAgICAgICAgICAgIEtFWV9ORVhUICAgICAgICBOZXh0IG9iamVjdCBrZXkKKyAgICAgICAgICAgIEtFWV9PUEVOICAgICAgICBPcGVuIGtleQorICAgICAgICAgICAgS0VZX09QVElPTlMgICAgIE9wdGlvbnMga2V5CisgICAgICAgICAgICBLRVlfUFJFVklPVVMgICAgUHJldmlvdXMgb2JqZWN0IGtleQorICAgICAgICAgICAgS0VZX1JFRE8gICAgICAgIFJlZG8ga2V5CisgICAgICAgICAgICBLRVlfUkVGRVJFTkNFICAgUmVmKGVyZW5jZSkga2V5CisgICAgICAgICAgICBLRVlfUkVGUkVTSCAgICAgUmVmcmVzaCBrZXkKKyAgICAgICAgICAgIEtFWV9SRVBMQUNFICAgICBSZXBsYWNlIGtleQorICAgICAgICAgICAgS0VZX1JFU0laRSAgICAgIFNjcmVlbiByZXNpemVkCisgICAgICAgICAgICBLRVlfUkVTVEFSVCAgICAgUmVzdGFydCBrZXkKKyAgICAgICAgICAgIEtFWV9SRVNVTUUgICAgICBSZXN1bWUga2V5CisKKyAgICAgICAgICAgIEtFWV9TQVZFICAgICAgICBTYXZlIGtleQorICAgICAgICAgICAgS0VZX1NCRUcgICAgICAgIFNoaWZ0ZWQgYmVnaW5uaW5nIGtleQorICAgICAgICAgICAgS0VZX1NDQU5DRUwgICAgIFNoaWZ0ZWQgY2FuY2VsIGtleQorICAgICAgICAgICAgS0VZX1NDT01NQU5EICAgIFNoaWZ0ZWQgY29tbWFuZCBrZXkKKyAgICAgICAgICAgIEtFWV9TQ09QWSAgICAgICBTaGlmdGVkIGNvcHkga2V5CisgICAgICAgICAgICBLRVlfU0NSRUFURSAgICAgU2hpZnRlZCBjcmVhdGUga2V5CisgICAgICAgICAgICBLRVlfU0RDICAgICAgICAgU2hpZnRlZCBkZWxldGUgY2hhciBrZXkKKyAgICAgICAgICAgIEtFWV9TREwgICAgICAgICBTaGlmdGVkIGRlbGV0ZSBsaW5lIGtleQorICAgICAgICAgICAgS0VZX1NFTEVDVCAgICAgIFNlbGVjdCBrZXkKKyAgICAgICAgICAgIEtFWV9TRU5EICAgICAgICBTaGlmdGVkIGVuZCBrZXkKKyAgICAgICAgICAgIEtFWV9TRU9MICAgICAgICBTaGlmdGVkIGNsZWFyIGxpbmUga2V5CisgICAgICAgICAgICBLRVlfU0VYSVQgICAgICAgU2hpZnRlZCBleGl0IGtleQorICAgICAgICAgICAgS0VZX1NGSU5EICAgICAgIFNoaWZ0ZWQgZmluZCBrZXkKKyAgICAgICAgICAgIEtFWV9TSEVMUCAgICAgICBTaGlmdGVkIGhlbHAga2V5CisgICAgICAgICAgICBLRVlfU0hPTUUgICAgICAgU2hpZnRlZCBob21lIGtleQorICAgICAgICAgICAgS0VZX1NJQyAgICAgICAgIFNoaWZ0ZWQgaW5wdXQga2V5CisgICAgICAgICAgICBLRVlfU0xFRlQgICAgICAgU2hpZnRlZCBsZWZ0IGFycm93IGtleQorICAgICAgICAgICAgS0VZX1NNRVNTQUdFICAgIFNoaWZ0ZWQgbWVzc2FnZSBrZXkKKyAgICAgICAgICAgIEtFWV9TTU9WRSAgICAgICBTaGlmdGVkIG1vdmUga2V5CisgICAgICAgICAgICBLRVlfU05FWFQgICAgICAgU2hpZnRlZCBuZXh0IGtleQorICAgICAgICAgICAgS0VZX1NPUFRJT05TICAgIFNoaWZ0ZWQgb3B0aW9ucyBrZXkKKyAgICAgICAgICAgIEtFWV9TUFJFVklPVVMgICBTaGlmdGVkIHByZXYga2V5CisgICAgICAgICAgICBLRVlfU1BSSU5UICAgICAgU2hpZnRlZCBwcmludCBrZXkKKyAgICAgICAgICAgIEtFWV9TUkVETyAgICAgICBTaGlmdGVkIHJlZG8ga2V5CisgICAgICAgICAgICBLRVlfU1JFUExBQ0UgICAgU2hpZnRlZCByZXBsYWNlIGtleQorICAgICAgICAgICAgS0VZX1NSSUdIVCAgICAgIFNoaWZ0ZWQgcmlnaHQgYXJyb3cKKyAgICAgICAgICAgIEtFWV9TUlNVTUUgICAgICBTaGlmdGVkIHJlc3VtZSBrZXkKKyAgICAgICAgICAgIEtFWV9TU0FWRSAgICAgICBTaGlmdGVkIHNhdmUga2V5CisgICAgICAgICAgICBLRVlfU1NVU1BFTkQgICAgU2hpZnRlZCBzdXNwZW5kIGtleQorICAgICAgICAgICAgS0VZX1NVTkRPICAgICAgIFNoaWZ0ZWQgdW5kbyBrZXkKKyAgICAgICAgICAgIEtFWV9TVVNQRU5EICAgICBTdXNwZW5kIGtleQorICAgICAgICAgICAgS0VZX1VORE8gICAgICAgIFVuZG8ga2V5CisKKyAgICAgICBLZXlwYWQgaXMgYXJyYW5nZWQgbGlrZSB0aGlzOgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0tKy0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgfCA8U1RST05HPkExPC9TVFJPTkc+ICB8ICA8U1RST05HPnVwPC9TVFJPTkc+ICB8ICA8U1RST05HPkEzPC9TVFJPTkc+ICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICB8PFNUUk9ORz5sZWZ0PC9TVFJPTkc+IHwgIDxTVFJPTkc+QjI8L1NUUk9ORz4gIHwgPFNUUk9ORz5yaWdodDwvU1RST05HPiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwgPFNUUk9ORz5DMTwvU1RST05HPiAgfCA8U1RST05HPmRvd248L1NUUk9ORz4gfCAgPFNUUk9ORz5DMzwvU1RST05HPiAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0tKy0tLS0tLS0rCisgICAgICAgVGhlIDxTVFJPTkc+aGFzX2tleTwvU1RST05HPiByb3V0aW5lIHRha2VzIGEga2V5IHZhbHVlIGZyb20gdGhlIGFib3ZlIGxpc3QsCisgICAgICAgYW5kIHJldHVybnMgVFJVRSBvciBGQUxTRSBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgY3VycmVudAorICAgICAgIHRlcm1pbmFsIHR5cGUgcmVjb2duaXplcyBhIGtleSB3aXRoIHRoYXQgdmFsdWUuICBOb3RlIHRoYXQKKyAgICAgICBhICBmZXcgIHZhbHVlcyAgZG8gIG5vdCAgY29ycmVzcG9uZCAgdG8gIGEgcmVhbCBrZXksIGUuZy4sCisgICAgICAgPFNUUk9ORz5LRVlfUkVTSVpFPC9TVFJPTkc+IGFuZCA8U1RST05HPktFWV9NT1VTRTwvU1RST05HPi4gIFNlZSA8U1RST05HPjxBIEhSRUY9InJlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybSgzeCk8L0E+PC9TVFJPTkc+IGZvciBtb3JlIGRlLQorICAgICAgIHRhaWxzICBhYm91dCAgPFNUUk9ORz5LRVlfUkVTSVpFPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPiBmb3IgYSBkaXNjdXMtCisgICAgICAgc2lvbiBvZiA8U1RST05HPktFWV9NT1VTRTwvU1RST05HPi4KKworCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gIGZhaWx1cmUgIGFuZCAgYW4KKyAgICAgICBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gKDxTVFJPTkc+T0s8L1NUUk9ORz4gaW4gdGhlIGNhc2Ugb2YgdW5nZXRjaCgpKQorICAgICAgIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+dW5nZXRjaDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gbW9yZSAgcm9vbSAgaW4KKyAgICAgICAgICAgICAgICAgICB0aGUgRklGTy4KKworICAgICAgICAgICAgICA8U1RST05HPndnZXRjaDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgIGFuICBlcnJvciAgaWYgIHRoZSAgd2luZG93IHBvaW50ZXIgaXMKKyAgICAgICAgICAgICAgICAgICBudWxsLCBvciBpZiBpdHMgdGltZW91dCBleHBpcmVzIHdpdGhvdXQgaGF2aW5nCisgICAgICAgICAgICAgICAgICAgYW55IGRhdGEuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVXNlIG9mIHRoZSBlc2NhcGUga2V5IGJ5IGEgcHJvZ3JhbW1lciBmb3IgYSBzaW5nbGUgY2hhcmFjLQorICAgICAgIHRlciBmdW5jdGlvbiBpcyBkaXNjb3VyYWdlZCwgYXMgaXQgd2lsbCBjYXVzZSBhICBkZWxheSAgb2YKKyAgICAgICB1cCB0byBvbmUgc2Vjb25kIHdoaWxlIHRoZSBrZXlwYWQgY29kZSBsb29rcyBmb3IgYSBmb2xsb3ctCisgICAgICAgaW5nIGZ1bmN0aW9uLWtleSBzZXF1ZW5jZS4KKworICAgICAgIE5vdGUgdGhhdCBzb21lIGtleXMgbWF5IGJlIHRoZSBzYW1lIGFzIGNvbW1vbmx5IHVzZWQgIGNvbi0KKyAgICAgICB0cm9sIGtleXMsIGUuZy4sIDxTVFJPTkc+S0VZX0VOVEVSPC9TVFJPTkc+IHZlcnN1cyBjb250cm9sL00sIDxTVFJPTkc+S0VZX0JBQ0tTUEFDRTwvU1RST05HPgorICAgICAgIHZlcnN1cyBjb250cm9sL0guICBTb21lIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgbWF5ICBkaWZmZXIKKyAgICAgICBhY2NvcmRpbmcgIHRvICB3aGV0aGVyICB0aGV5IHRyZWF0IHRoZXNlIGNvbnRyb2wga2V5cyBzcGUtCisgICAgICAgY2lhbGx5IChhbmQgaWdub3JlIHRoZSB0ZXJtaW5mbyksIG9yIHVzZSB0aGUgdGVybWluZm8gZGVmLQorICAgICAgIGluaXRpb25zLiAgIDxTVFJPTkc+TmN1cnNlczwvU1RST05HPiAgdXNlcyAgdGhlIHRlcm1pbmZvIGRlZmluaXRpb24uICBJZiBpdAorICAgICAgIHNheXMgIHRoYXQgIDxTVFJPTkc+S0VZX0VOVEVSPC9TVFJPTkc+ICBpcyAgY29udHJvbC9NLCAgPFNUUk9ORz5nZXRjaDwvU1RST05HPiAgd2lsbCAgcmV0dXJuCisgICAgICAgPFNUUk9ORz5LRVlfRU5URVI8L1NUUk9ORz4gd2hlbiB5b3UgcHJlc3MgY29udHJvbC9NLgorCisgICAgICAgV2hlbiAgdXNpbmcgIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4sIDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+LCA8U1RST05HPm12Z2V0Y2g8L1NUUk9ORz4sIG9yIDxTVFJPTkc+bXZ3Z2V0Y2g8L1NUUk9ORz4sIG5vY2JyZWFrCisgICAgICAgbW9kZSAoPFNUUk9ORz5ub2NicmVhazwvU1RST05HPikgYW5kIGVjaG8gbW9kZSAoPFNUUk9ORz5lY2hvPC9TVFJPTkc+KSBzaG91bGQgbm90IGJlIHVzZWQgYXQKKyAgICAgICB0aGUgIHNhbWUgIHRpbWUuICBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSB0dHkgZHJpdmVyCisgICAgICAgd2hlbiBlYWNoIGNoYXJhY3RlciBpcyB0eXBlZCwgdGhlIHByb2dyYW0gbWF5IHByb2R1Y2UgIHVuLQorICAgICAgIGRlc2lyYWJsZSByZXN1bHRzLgorCisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRjaDwvU1RST05HPiwgYW5kIDxTVFJPTkc+bXZ3Z2V0Y2g8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworICAgICAgIEhpc3RvcmljYWxseSwgdGhlIHNldCBvZiBrZXlwYWQgbWFjcm9zIHdhcyBsYXJnZWx5IGRlZmluZWQKKyAgICAgICBieSB0aGUgZXh0cmVtZWx5IGZ1bmN0aW9uLWtleS1yaWNoIGtleWJvYXJkICBvZiAgdGhlICBBVCZhbXA7VAorICAgICAgIDczMDAsICBha2EgIDNCMSwgIGFrYSBTYWZhcmkgNC4gIE1vZGVybiBwZXJzb25hbCBjb21wdXRlcnMKKyAgICAgICB1c3VhbGx5IGhhdmUgb25seSBhIHNtYWxsIHN1YnNldCBvZiB0aGVzZS4gICBJQk0gIFBDLXN0eWxlCisgICAgICAgY29uc29sZXMgICB0eXBpY2FsbHkgIHN1cHBvcnQgIGxpdHRsZSAgbW9yZSAgdGhhbiAgPFNUUk9ORz5LRVlfVVA8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5LRVlfRE9XTjwvU1RST05HPiwgICA8U1RST05HPktFWV9MRUZUPC9TVFJPTkc+LCAgIDxTVFJPTkc+S0VZX1JJR0hUPC9TVFJPTkc+LCAgIDxTVFJPTkc+S0VZX0hPTUU8L1NUUk9ORz4sICAgIDxTVFJPTkc+S0VZX0VORDwvU1RST05HPiwKKyAgICAgICA8U1RST05HPktFWV9OUEFHRTwvU1RST05HPiwgPFNUUk9ORz5LRVlfUFBBR0U8L1NUUk9ORz4sIGFuZCBmdW5jdGlvbiBrZXlzIDEgdGhyb3VnaCAxMi4gIFRoZQorICAgICAgIElucyBrZXkgaXMgdXN1YWxseSBtYXBwZWQgdG8gPFNUUk9ORz5LRVlfSUM8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICpnZXQqIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuLQorICAgICAgIGRhcmQsICBJc3N1ZSAgNC4gICBUaGV5ICByZWFkIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMgb25seS4KKyAgICAgICBUaGUgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgdGhleSByZXR1cm4gIDxTVFJPTkc+RVJSPC9TVFJPTkc+ICBvbiAgZmFpbHVyZSwKKyAgICAgICBidXQgc3BlY2lmaWVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCisKKyAgICAgICBUaGUgIGVjaG8gIGJlaGF2aW9yIG9mIHRoZXNlIGZ1bmN0aW9ucyBvbiBpbnB1dCBvZiA8U1RST05HPktFWV88L1NUUk9ORz4gb3IKKyAgICAgICBiYWNrc3BhY2UgY2hhcmFjdGVycyB3YXMgbm90IHNwZWNpZmllZCBpbiB0aGUgIFNWcjQgIGRvY3UtCisgICAgICAgbWVudGF0aW9uLiAgVGhpcyBkZXNjcmlwdGlvbiBpcyBhZG9wdGVkIGZyb20gdGhlIFhTSSBDdXJzLQorICAgICAgIGVzIHN0YW5kYXJkLgorCisgICAgICAgVGhlIGJlaGF2aW9yIG9mIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4gYW5kIGZyaWVuZHMgaW4gdGhlIHByZXNlbmNlIG9mICBoYW4tCisgICAgICAgZGxlZCAgc2lnbmFscyAgaXMgIHVuc3BlY2lmaWVkICBpbiB0aGUgU1ZyNCBhbmQgWFNJIEN1cnNlcworICAgICAgIGRvY3VtZW50YXRpb24uICBVbmRlciBoaXN0b3JpY2FsICBjdXJzZXMgIGltcGxlbWVudGF0aW9ucywKKyAgICAgICBpdCAgdmFyaWVkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgaW0tCisgICAgICAgcGxlbWVudGF0aW9uICBvZiAgaGFuZGxlZCAgc2lnbmFsICByZWNlaXB0ICBpbnRlcnJ1cHRzICAgYQorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0icmVhZC4yLmh0bWwiPnJlYWQoMik8L0E+PC9TVFJPTkc+ICBjYWxsIGluIHByb2dyZXNzIG9yIG5vdCwgYW5kIGFsc28gKGluIHNvbWUgaW1wbGUtCisgICAgICAgbWVudGF0aW9ucykgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYW4gaW5wdXQgdGltZW91dCBvciAgbm9uLQorICAgICAgIGJsb2NraW5nIG1vZGUgaGFzIGJlZW4gc2V0LgorCisgICAgICAgUHJvZ3JhbW1lcnMgY29uY2VybmVkIGFib3V0IHBvcnRhYmlsaXR5IHNob3VsZCBiZSBwcmVwYXJlZAorICAgICAgIGZvciBlaXRoZXIgb2YgdHdvIGNhc2VzOiAoYSkgc2lnbmFsIHJlY2VpcHQgZG9lcyAgbm90ICBpbi0KKyAgICAgICB0ZXJydXB0ICA8U1RST05HPmdldGNoPC9TVFJPTkc+OyAgKGIpICBzaWduYWwgIHJlY2VpcHQgaW50ZXJydXB0cyA8U1RST05HPmdldGNoPC9TVFJPTkc+IGFuZAorICAgICAgIGNhdXNlcyBpdCB0byByZXR1cm4gRVJSIHdpdGggPFNUUk9ORz5lcnJubzwvU1RST05HPiBzZXQgIHRvICA8U1RST05HPkVJTlRSPC9TVFJPTkc+LiAgIFVuZGVyCisgICAgICAgdGhlICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gIGltcGxlbWVudGF0aW9uLCBoYW5kbGVkIHNpZ25hbHMgbmV2ZXIgaW50ZXItCisgICAgICAgcnVwdCA8U1RST05HPmdldGNoPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+aGFzX2tleTwvU1RST05HPiBmdW5jdGlvbiBpcyB1bmlxdWUgdG8gPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+LiAgIFdlICByZWNvbW1lbmQKKyAgICAgICB0aGF0ICBhbnkgIGNvZGUgIHVzaW5nIGl0IGJlIGNvbmRpdGlvbmFsaXplZCBvbiB0aGUgPFNUUk9ORz5OQ1VSUy08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPkVTX1ZFUlNJT048L1NUUk9ORz4gZmVhdHVyZSBtYWNyby4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4sICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3ZlLjN4Lmh0bWwiPmN1cnNfbW92ZSgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPi4KKworICAgICAgIENvbXBhcmFibGUgIGZ1bmN0aW9ucyBpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgKG5jdXJzZXN3KSBsaS0KKyAgICAgICBicmFyeSBhcmUgZGVzY3JpYmVkIGluIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd2NoLjN4Lmh0bWwiPmN1cnNfZ2V0X3djaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2dldHN0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjlkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19nZXRzdHIuM3guaHRtbApAQCAtMCwwICsxLDE1MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2dldHN0ci4zeCx2IDEuMTUgMjAwNi8wMS8xMiAwMDozMDo1OCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2dldHN0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfZ2V0c3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldHN0cjwvU1RST05HPiwgPFNUUk9ORz5nZXRuc3RyPC9TVFJPTkc+LCA8U1RST05HPndnZXRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2dldG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZnZXRuc3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZ3Z2V0c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2dldG5zdHI8L1NUUk9ORz4gLSBhY2NlcHQgY2hhcmFjdGVyIHN0cmluZ3MgZnJvbQorICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHRlcm1pbmFsIGtleWJvYXJkCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0c3RyKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldG5zdHIoY2hhcjwvU1RST05HPiA8U1RST05HPipzdHIsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Z2V0c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2dldG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12Z2V0c3RyKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0cik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndnZXRzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZnZXRuc3RyKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2dldG5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPmdldHN0cjwvU1RST05HPiBpcyBlcXVpdmFsZW50IHRvIGEgc2VyaWVzIG9mIGNhbGxzIHRvCisgICAgICAgPFNUUk9ORz5nZXRjaDwvU1RST05HPiwgdW50aWwgYSBuZXdsaW5lIG9yIGNhcnJpYWdlIHJldHVybiBpcyByZWNlaXZlZCAodGhlCisgICAgICAgdGVybWluYXRpbmcgIGNoYXJhY3RlciAgaXMgIG5vdCAgaW5jbHVkZWQgIGluIHRoZSByZXR1cm5lZAorICAgICAgIHN0cmluZykuICBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIHBsYWNlZCBpbiB0aGUgYXJlYSBwb2ludC0KKyAgICAgICBlZCB0byBieSB0aGUgY2hhcmFjdGVyIHBvaW50ZXIgPEVNPnN0cjwvRU0+LgorCisgICAgICAgPFNUUk9ORz53Z2V0bnN0cjwvU1RST05HPiAgcmVhZHMgIGF0ICBtb3N0ICA8RU0+bjwvRU0+IGNoYXJhY3RlcnMsIHRodXMgcHJldmVudGluZyBhCisgICAgICAgcG9zc2libGUgb3ZlcmZsb3cgb2YgdGhlIGlucHV0IGJ1ZmZlci4gIEFueSBhdHRlbXB0IHRvIGVuLQorICAgICAgIHRlciBtb3JlIGNoYXJhY3RlcnMgKG90aGVyIHRoYW4gdGhlIHRlcm1pbmF0aW5nIG5ld2xpbmUgb3IKKyAgICAgICBjYXJyaWFnZSByZXR1cm4pIGNhdXNlcyBhIGJlZXAuICBGdW5jdGlvbiBrZXlzIGFsc28gIGNhdXNlCisgICAgICAgYSAgYmVlcCAgYW5kIGFyZSBpZ25vcmVkLiAgVGhlIDxTVFJPTkc+Z2V0bnN0cjwvU1RST05HPiBmdW5jdGlvbiByZWFkcyBmcm9tCisgICAgICAgdGhlIDxFTT5zdGRzY3I8L0VNPiBkZWZhdWx0IHdpbmRvdy4KKworICAgICAgIFRoZSB1c2VyJ3MgZXJhc2UgYW5kIGtpbGwgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQuICAgSWYKKyAgICAgICBrZXlwYWQgICBtb2RlICAgaXMgICBvbiAgIGZvciAgdGhlICB3aW5kb3csICA8U1RST05HPktFWV9MRUZUPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPktFWV9CQUNLU1BBQ0U8L1NUUk9ORz4gYXJlIGJvdGggY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIHRoZSB1c2VyJ3MKKyAgICAgICBraWxsIGNoYXJhY3Rlci4KKworICAgICAgIENoYXJhY3RlcnMgIGlucHV0IGFyZSBlY2hvZWQgb25seSBpZiA8U1RST05HPmVjaG88L1NUUk9ORz4gaXMgY3VycmVudGx5IG9uLgorICAgICAgIEluIHRoYXQgY2FzZSwgYmFja3NwYWNlIGlzIGVjaG9lZCBhcyBkZWxldGlvbiBvZiB0aGUgIHByZS0KKyAgICAgICB2aW91cyBjaGFyYWN0ZXIgKHR5cGljYWxseSBhIGxlZnQgbW90aW9uKS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIGFuIDxTVFJPTkc+T0s8L1NUUk9ORz4KKyAgICAgICAoU1ZyNCBzcGVjaWZpZXMgb25seSAiYW4gaW50ZWdlciB2YWx1ZSAgb3RoZXIgIHRoYW4gIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikKKyAgICAgICB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFgvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCisKKyAgICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIGFuIGVycm9yIGlmCisgICAgICAgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsICBvciAgaWYgIGl0cyAgdGltZW91dCAgZXhwaXJlcworICAgICAgIHdpdGhvdXQgaGF2aW5nIGFueSBkYXRhLgorCisgICAgICAgVGhpcyAgaW1wbGVtZW50YXRpb24gIHByb3ZpZGVzIGFuIGV4dGVuc2lvbiBhcyB3ZWxsLiAgSWYgYQorICAgICAgIFNJR1dJTkNIIGludGVycnVwdHMgdGhlIGZ1bmN0aW9uLCBpdCB3aWxsICByZXR1cm4gIDxTVFJPTkc+S0VZX1JFLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+U0laRTwvU1RST05HPiByYXRoZXIgdGhhbiA8U1RST05HPk9LPC9TVFJPTkc+IG9yIDxTVFJPTkc+RVJSPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmdldHN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmdldHN0cjwvU1RST05HPiwgYW5kIDxTVFJPTkc+bXZ3Z2V0c3RyPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLAorICAgICAgIElzc3VlIDQuICBUaGV5ICByZWFkICBzaW5nbGUtYnl0ZSAgY2hhcmFjdGVycyAgb25seS4gICBUaGUKKyAgICAgICBzdGFuZGFyZCAgZG9lcyAgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4gIFRoaXMgaW0tCisgICAgICAgcGxlbWVudGF0aW9uIHJldHVybnMgRVJSIGlmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgorICAgICAgIGlmIHRoZSBsb3dlci1sZXZlbCA8U1RST05HPndnZXRjaDwvU1RST05HPiBjYWxsIHJldHVybnMgYW4gRVJSLgorCisgICAgICAgU1ZyMyAgYW5kIGVhcmx5IFNWcjQgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBkaWQgbm90IHJlamVjdAorICAgICAgIGZ1bmN0aW9uIGtleXM7IHRoZSBTVnI0LjAgZG9jdW1lbnRhdGlvbiBjbGFpbWVkIHRoYXQgInNwZS0KKyAgICAgICBjaWFsICBrZXlzIiAgKHN1Y2ggIGFzICBmdW5jdGlvbiBrZXlzLCAiaG9tZSIga2V5LCAiY2xlYXIiCisgICAgICAga2V5LCA8RU0+ZXRjPC9FTT4uKSBhcmUgImludGVycHJldGVkIiwgd2l0aG91dCBnaXZpbmcgZGV0YWlscy4gICBJdAorICAgICAgIGxpZWQuICAgSW4gIGZhY3QsICB0aGUgIGBjaGFyYWN0ZXInICB2YWx1ZSBhcHBlbmRlZCB0byB0aGUKKyAgICAgICBzdHJpbmcgYnkgdGhvc2UgaW1wbGVtZW50YXRpb25zIHdhcyAgcHJlZGljdGFibGUgIGJ1dCAgbm90CisgICAgICAgdXNlZnVsICAoYmVpbmcsICBpbiAgZmFjdCwgdGhlIGxvdy1vcmRlciBlaWdodCBiaXRzIG9mIHRoZQorICAgICAgIGtleSdzIEtFWV8gdmFsdWUpLgorCisgICAgICAgVGhlIGZ1bmN0aW9ucyAgPFNUUk9ORz5nZXRuc3RyPC9TVFJPTkc+LCAgPFNUUk9ORz5tdmdldG5zdHI8L1NUUk9ORz4sICBhbmQgIDxTVFJPTkc+bXZ3Z2V0bnN0cjwvU1RST05HPiAgd2VyZQorICAgICAgIHByZXNlbnQgYnV0IG5vdCBkb2N1bWVudGVkIGluIFNWcjQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfZ2V0eXguM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2dldHl4LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiM2FlYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2dldHl4LjN4Lmh0bWwKQEAgLTAsMCArMSwxMzEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19nZXR5eC4zeCx2IDEuMTYgMjAwNy8wNS8xMiAxNjozNDo0OSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2dldHl4IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19nZXR5eCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHl4LjN4Lmh0bWwiPmN1cnNfZ2V0eXgoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Z2V0eXg8L1NUUk9ORz4sICA8U1RST05HPmdldHBhcnl4PC9TVFJPTkc+LCAgPFNUUk9ORz5nZXRiZWd5eDwvU1RST05HPiwgIDxTVFJPTkc+Z2V0bWF4eXg8L1NUUk9ORz4gLSBnZXQgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gY3Vyc29yCisgICAgICAgYW5kIHdpbmRvdyBjb29yZGluYXRlcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5nZXR5eChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Z2V0cGFyeXgoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPmdldGJlZ3l4KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRtYXh5eChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+Z2V0eXg8L1NUUk9ORz4gbWFjcm8gcGxhY2VzIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBvZiAgdGhlCisgICAgICAgZ2l2ZW4gd2luZG93IGluIHRoZSB0d28gaW50ZWdlciB2YXJpYWJsZXMgPEVNPnk8L0VNPiBhbmQgPEVNPng8L0VNPi4KKworICAgICAgIElmICA8RU0+d2luPC9FTT4gIGlzICBhICBzdWJ3aW5kb3csICB0aGUgIDxTVFJPTkc+Z2V0cGFyeXg8L1NUUk9ORz4gbWFjcm8gcGxhY2VzIHRoZQorICAgICAgIGJlZ2lubmluZyBjb29yZGluYXRlcyBvZiB0aGUgIHN1YndpbmRvdyAgcmVsYXRpdmUgIHRvICB0aGUKKyAgICAgICBwYXJlbnQgIHdpbmRvdyBpbnRvIHR3byBpbnRlZ2VyIHZhcmlhYmxlcyA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+LiAgT3RoZXItCisgICAgICAgd2lzZSwgPFNUUk9ORz4tMTwvU1RST05HPiBpcyBwbGFjZWQgaW50byA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+LgorCisgICAgICAgTGlrZSA8U1RST05HPmdldHl4PC9TVFJPTkc+LCB0aGUgPFNUUk9ORz5nZXRiZWd5eDwvU1RST05HPiBhbmQgIDxTVFJPTkc+Z2V0bWF4eXg8L1NUUk9ORz4gIG1hY3JvcyAgc3RvcmUgIHRoZQorICAgICAgIGN1cnJlbnQgIGJlZ2lubmluZyAgY29vcmRpbmF0ZXMgIGFuZCBzaXplIG9mIHRoZSBzcGVjaWZpZWQKKyAgICAgICB3aW5kb3cuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZXNlICBtYWNyb3MgIGFyZSAgdW5kZWZpbmVkICAoaS5lLiwKKyAgICAgICB0aGV5ICBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBhc3NpZ24tCisgICAgICAgbWVudCBzdGF0ZW1lbnRzKS4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBBbGwgb2YgdGhlc2UgaW50ZXJmYWNlcyBhcmUgbWFjcm9zLiAgQSAiPFNUUk9ORz4mYW1wOzwvU1RST05HPiIgaXMgIG5vdCAgbmVjZXMtCisgICAgICAgc2FyeSBiZWZvcmUgdGhlIHZhcmlhYmxlcyA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5nZXR5eDwvU1RST05HPiwgIDxTVFJPTkc+Z2V0cGFyeXg8L1NUUk9ORz4sICA8U1RST05HPmdldGJlZ3l4PC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+Z2V0bWF4eXg8L1NUUk9ORz4gbWFjcm9zIGFyZQorICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KKworICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgPFNUUk9ORz5nZXRiZWd4PC9TVFJPTkc+LCA8U1RST05HPmdldGItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5lZ3k8L1NUUk9ORz4sICA8U1RST05HPmdldGN1cng8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0Y3VyeTwvU1RST05HPiwgPFNUUk9ORz5nZXRtYXh4PC9TVFJPTkc+LCA8U1RST05HPmdldG1heHk8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0cGFyeDwvU1RST05HPiBhbmQgPFNUUk9ORz5nZXQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5wYXJ5PC9TVFJPTkc+IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgY3Vyc2VzLgorCisgICAgICAgQWx0aG91Z2ggWC9PcGVuIEN1cnNlcyBkb2VzIG5vdCBhZGRyZXNzIHRoaXMsIG1hbnkgIGltcGxlLQorICAgICAgIG1lbnRhdGlvbnMgIHByb3ZpZGUgIG1lbWJlcnMgIG9mIHRoZSBXSU5ET1cgc3RydWN0dXJlIGNvbi0KKyAgICAgICB0YWluaW5nIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZXNlICBtYWNyb3MuICAgRm9yICBiZXN0CisgICAgICAgcG9ydGFiaWxpdHksICBkbyAgbm90ICByZWx5ICBvbiAgdXNpbmcgdGhlIGRhdGEgaW4gV0lORE9XLAorICAgICAgIHNpbmNlIHNvbWUgaW1wbGVtZW50YXRpb25zICBtYWtlICBXSU5ET1cgIG9wYXF1ZSAgKGRvICBub3QKKyAgICAgICBhbGxvdyBkaXJlY3QgdXNlIG9mIGl0cyBtZW1iZXJzKS4KKworICAgICAgIEJlc2lkZXMgIHRoZSBwcm9ibGVtIG9mIG9wYXF1ZSBzdHJ1Y3R1cmVzLCB0aGUgZGF0YSBzdG9yZWQKKyAgICAgICBpbiBsaWtlLW5hbWVkIG1lbWJlcnMgbWF5IG5vdCBoYXZlIGxpa2UtdmFsdWVzIGluICBkaWZmZXItCisgICAgICAgZW50ICBpbXBsZW1lbnRhdGlvbnMuICAgRm9yICBleGFtcGxlLCB0aGUgV0lORE9XLl9tYXh4IGFuZAorICAgICAgIFdJTkRPVy5fbWF4eSAgdmFsdWVzICBpbiAgbmN1cnNlcyAgaGF2ZSAgKGF0ICBsZWFzdCAgc2luY2UKKyAgICAgICByZWxlYXNlIDEuOC4xKSBkaWZmZXJlZCBieSBvbmUgZnJvbSBzb21lIG90aGVyIGltcGxlbWVudGEtCisgICAgICAgdGlvbnMuICBUaGUgZGlmZmVyZW5jZSBpcyBoaWRkZW4gYnkgIG1lYW5zICBvZiAgdGhlICBtYWNybworICAgICAgIDxTVFJPTkc+Z2V0bWF4eXg8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfbGVnYWN5LjN4Lmh0bWwiPmN1cnNfbGVnYWN5KDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHl4LjN4Lmh0bWwiPmN1cnNfZ2V0eXgoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2guM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luX3djaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDA4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2guM3guaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2luX3djaC4zeCx2IDEuMiAyMDA2LzAyLzI1IDIxOjQyOjIyIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW5fd2NoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbl93Y2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5fd2NoPC9TVFJPTkc+LCAgPFNUUk9ORz5tdmluX3djaDwvU1RST05HPiwgIDxTVFJPTkc+bXZ3aW5fd2NoPC9TVFJPTkc+LCA8U1RST05HPndpbl93Y2g8L1NUUk9ORz4gLSBleHRyYWN0IGEgY29tcGxleAorICAgICAgIGNoYXJhY3RlciBhbmQgcmVuZGl0aW9uIGZyb20gYSB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbl93Y2goY2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2N2YWw8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5fd2NoKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y3ZhbDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5fd2NoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2N2YWw8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbl93Y2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjdmFsPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGV4dHJhY3QgdGhlIGNvbXBsZXggY2hhcmFjdGVyICBhbmQgIHJlbmRpLQorICAgICAgIHRpb24gIGZyb20gIHRoZSAgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbmFtZWQgd2luZG93IGludG8KKyAgICAgICB0aGUgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IG9iamVjdCByZWZlcmVuY2VkIGJ5IHdjdmFsLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBObyBlcnJvcnMgYXJlIGRlZmluZWQgaW4gdGhlIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZC4gICBUaGlzCisgICAgICAgaW1wbGVtZW50YXRpb24gIGNoZWNrcyAgZm9yICBudWxsIHBvaW50ZXJzLCByZXR1cm5zIEVSUiBpbgorICAgICAgIHRoYXQgY2FzZS4gIEFsc28sIHRoZSA8RU0+bXY8L0VNPiByb3V0aW5lcyBjaGVjayBmb3IgIGVycm9yICBtb3ZpbmcKKyAgICAgICB0aGUgIGN1cnNvciwgIHJldHVybmluZyAgRVJSIGluIHRoYXQgY2FzZS4gIE90aGVyd2lzZSB0aGV5CisgICAgICAgcmV0dXJuIE9LCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCBvZiB0aGVzZSByb3V0aW5lcyBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2hzdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luX3djaHN0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NzYyODYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbl93Y2hzdHIuM3guaHRtbApAQCAtMCwwICsxLDEyMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2luX3djaHN0ci4zeCx2IDEuNiAyMDA2LzEyLzAyIDE3OjAzOjA3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW5fd2Noc3RyIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbl93Y2hzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5fd2Noc3RyPC9TVFJPTkc+LCA8U1RST05HPmluX3djaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2luX3djaHN0cjwvU1RST05HPiwgPFNUUk9ORz53aW5fd2NobnN0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12aW5fd2Noc3RyPC9TVFJPTkc+LCA8U1RST05HPm12aW5fd2NobnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbl93Y2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW5fd2NobnN0cjwvU1RST05HPiAtCisgICAgICAgZ2V0IGFuIGFycmF5IG9mIGNvbXBsZXggY2hhcmFjdGVycyBhbmQgcmVuZGl0aW9ucyBmcm9tIGEKKyAgICAgICBjdXJzZXMgd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5fd2Noc3RyKGNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5fd2NobnN0cihjY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luX3djaHN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5fd2NobnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5fd2Noc3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53Y2hzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5fd2NobnN0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2Noc3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luX3djaHN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5fd2NobnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndjaHN0cjwvRU0+LCBpbnQgPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIGFuIGFycmF5IG9mIGNvbXBsZXggIGNoYXJhY3RlcnMgIGluCisgICAgICAgPEVNPndjaHN0cjwvRU0+LCAgc3RhcnRpbmcgIGF0ICB0aGUgIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZQorICAgICAgIG5hbWVkIHdpbmRvdy4gIEF0dHJpYnV0ZXMgKHJlbmRpdGlvbikgYXJlIHN0b3JlZCB3aXRoICB0aGUKKyAgICAgICBjaGFyYWN0ZXJzLgorCisgICAgICAgVGhlICA8U1RST05HPmluX3djaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbl93Y2huc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luX3djaG5zdHI8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d2luX3djaG4tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zdHI8L1NUUk9ORz4gZmlsbCB0aGUgYXJyYXkgd2l0aCBhdCBtb3N0IDxFTT5uPC9FTT4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IGVsZW1lbnRzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0IDxTVFJPTkc+d2luX3djaG5zdHI8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworICAgICAgIFJlYWRpbmcgYSBsaW5lIHRoYXQgb3ZlcmZsb3dzIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDxFTT53Y2gtPC9FTT4KKyAgICAgICA8RU0+c3RyPC9FTT4gIHdpdGggPFNUUk9ORz5pbl93Y2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbl93Y2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW5fd2Noc3RyPC9TVFJPTkc+IG9yIDxTVFJPTkc+d2luX3djaC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnN0cjwvU1RST05HPiAgY2F1c2VzICB1bmRlZmluZWQgIHJlc3VsdHMuICBUaGVyZWZvcmUsICB0aGUgIHVzZSAgb2YKKyAgICAgICA8U1RST05HPmluX3djaG5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbl93Y2huc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luX3djaG5zdHI8L1NUUk9ORz4sIG9yIDxTVFJPTkc+d2luX3djaG5zdHI8L1NUUk9ORz4gaXMKKyAgICAgICByZWNvbW1lbmRlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCAgdGhlc2UgIGZ1bmN0aW9ucyAgcmV0dXJuICA8U1RST05HPk9LPC9TVFJPTkc+LgorICAgICAgIE90aGVyd2lzZSwgdGhleSByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICBYU0kgIEN1cnNlcyBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuICBUaGlzIGltcGxlLQorICAgICAgIG1lbnRhdGlvbiBjaGVja3MgZm9yIG51bGwgcG9pbnRlcnMsIHJldHVybmluZyBFUlIgaW4gIHRoYXQKKyAgICAgICBjYXNlLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIEZ1bmN0aW9uczogIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+IDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbmNoLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbmNoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwMTgwNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luY2guM3guaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbmNoLjN4LHYgMS4xMyAyMDA2LzEyLzAyIDE2OjU4OjU1IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW5jaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5jaCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluY2g8L1NUUk9ORz4sICA8U1RST05HPndpbmNoPC9TVFJPTkc+LCAgPFNUUk9ORz5tdmluY2g8L1NUUk9ORz4sICA8U1RST05HPm12d2luY2g8L1NUUk9ORz4gIC0gIGdldCAgYSAgY2hhcmFjdGVyICBhbmQKKyAgICAgICBhdHRyaWJ1dGVzIGZyb20gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5pbmNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+d2luY2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5tdmluY2goaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPm12d2luY2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHJldHVybiB0aGUgY2hhcmFjdGVyLCBvZiAgdHlwZSAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4sICBhdAorICAgICAgIHRoZSAgIGN1cnJlbnQgIHBvc2l0aW9uICBpbiAgdGhlICBuYW1lZCAgd2luZG93LiAgIElmICBhbnkKKyAgICAgICBhdHRyaWJ1dGVzIGFyZSBzZXQgZm9yIHRoYXQgIHBvc2l0aW9uLCAgdGhlaXIgIHZhbHVlcyAgYXJlCisgICAgICAgT1InZWQgIGludG8gIHRoZSAgdmFsdWUgIHJldHVybmVkLiAgIENvbnN0YW50cyAgZGVmaW5lZCBpbgorICAgICAgIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiBjYW4gYmUgdXNlZCB3aXRoIHRoZSA8U1RST05HPiZhbXA7PC9TVFJPTkc+IChsb2dpY2FsICBBTkQpICBvcGVyYXRvcgorICAgICAgIHRvIGV4dHJhY3QgdGhlIGNoYXJhY3RlciBvciBhdHRyaWJ1dGVzIGFsb25lLgorCisgICA8U1RST05HPkF0dHJpYnV0ZXM8L1NUUk9ORz4KKyAgICAgICBUaGUgIGZvbGxvd2luZyAgYml0LW1hc2tzICBtYXkgIGJlICBBTkQtZWQgd2l0aCBjaGFyYWN0ZXJzCisgICAgICAgcmV0dXJuZWQgYnkgPFNUUk9ORz53aW5jaDwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+QV9DSEFSVEVYVDwvU1RST05HPiAgICAgQml0LW1hc2sgdG8gZXh0cmFjdCBjaGFyYWN0ZXIKKyAgICAgICA8U1RST05HPkFfQVRUUklCVVRFUzwvU1RST05HPiAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgYXR0cmlidXRlcworICAgICAgIDxTVFJPTkc+QV9DT0xPUjwvU1RST05HPiAgICAgICAgQml0LW1hc2sgdG8gZXh0cmFjdCBjb2xvci1wYWlyIGZpZWxkIGluZm9ybWF0aW9uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCBvZiB0aGVzZSByb3V0aW5lcyBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPi4KKworICAgICAgIENvbXBhcmFibGUgIGZ1bmN0aW9ucyAgaW4gIHRoZSAgd2lkZS1jaGFyYWN0ZXIgIChuY3Vyc2VzdykKKyAgICAgICBsaWJyYXJ5IGFyZSBkZXNjcmliZWQgaW4gPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaC4zeC5odG1sIj5jdXJzX2luX3djaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luY2hzdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjczY2MzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfaW5jaHN0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTI5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW5jaHN0ci4zeCx2IDEuMTIgMjAwNi8xMi8wMiAxNzowMDo1OCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luY2hzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2luY2hzdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbmNoc3RyPC9TVFJPTkc+LCA8U1RST05HPmluY2huc3RyPC9TVFJPTkc+LCA8U1RST05HPndpbmNoc3RyPC9TVFJPTkc+LCA8U1RST05HPndpbmNobnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmluY2hzdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdmluY2huc3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luY2hzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW5jaG5zdHI8L1NUUk9ORz4gLSBnZXQgYSBzdHJpbmcgb2YKKyAgICAgICBjaGFyYWN0ZXJzIChhbmQgYXR0cmlidXRlcykgZnJvbSBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluY2hzdHIoY2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluY2huc3RyKGNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbmNoc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbmNobnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5jaHN0cihpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5jaG5zdHIoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPipjaHN0ciw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luY2hzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+KmNoc3RyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiAgPFNUUk9ORz5tdndpbmNobnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz4qY2hzdHIsPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gYSBOVUxMLXRlcm1pbmF0ZWQgIGFycmF5ICBvZiAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4KKyAgICAgICBxdWFudGl0aWVzLCBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlCisgICAgICAgbmFtZWQgd2luZG93IGFuZCBlbmRpbmcgYXQgdGhlIHJpZ2h0IG1hcmdpbiBvZiB0aGUgd2luZG93LgorICAgICAgIFRoZSAgZm91ciAgZnVuY3Rpb25zIHdpdGggPEVNPm48L0VNPiBhcyB0aGUgbGFzdCBhcmd1bWVudCwgcmV0dXJuIGEKKyAgICAgICBsZWFkaW5nIHN1YnN0cmluZyBhdCBtb3N0IDxFTT5uPC9FTT4gY2hhcmFjdGVycyBsb25nIChleGNsdXNpdmUgIG9mCisgICAgICAgdGhlICB0cmFpbGluZyAoY2h0eXBlKTApLiAgQ29uc3RhbnRzIGRlZmluZWQgaW4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgY2FuIGJlIHVzZWQgd2l0aCB0aGUgPFNUUk9ORz4mYW1wOzwvU1RST05HPiAobG9naWNhbCBBTkQpIG9wZXJhdG9yICB0byAgZXh0cmFjdAorICAgICAgIHRoZSAgY2hhcmFjdGVyIG9yIHRoZSBhdHRyaWJ1dGUgYWxvbmUgZnJvbSBhbnkgcG9zaXRpb24gaW4KKyAgICAgICB0aGUgPEVNPmNoc3RyPC9FTT4gW3NlZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2goM3gpPC9BPjwvU1RST05HPl0uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiAgZmFpbHVyZSAgYW5kICBhbgorICAgICAgIGludGVnZXIgIHZhbHVlICBvdGhlciAgdGhhbiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbgorICAgICAgICh0aGUgbnVtYmVyIG9mICBjaGFyYWN0ZXJzICByZXRyaWV2ZWQsICBleGNsdXNpdmUgIG9mICB0aGUKKyAgICAgICB0cmFpbGluZyAwKS4KKworICAgICAgIE5vICBlcnJvciAgY29uZGl0aW9ucyBhcmUgZGVmaW5lZC4gIElmIHRoZSA8RU0+Y2hzdHI8L0VNPiBwYXJhbWV0ZXIKKyAgICAgICBpcyBudWxsLCBubyBkYXRhIGlzIHJldHVybmVkLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyAgemUtCisgICAgICAgcm8uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSAgdGhhdCAgYWxsICByb3V0aW5lcyAgZXhjZXB0IDxTVFJPTkc+d2luY2huc3RyPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisgICAgICAgU1ZyNCBkb2VzIG5vdCBkb2N1bWVudCB3aGV0aGVyIHRoZSByZXN1bHQgc3RyaW5nIGlzIDAtdGVyLQorICAgICAgIG1pbmF0ZWQ7IGl0IGRvZXMgbm90IGRvY3VtZW50IHdoZXRoZXIgYSBsZW5ndGggbGltaXQgYXJndS0KKyAgICAgICBtZW50IGluY2x1ZGVzIGFueSB0cmFpbGluZyAwOyBhbmQgaXQgZG9lcyBub3QgZG9jdW1lbnQgdGhlCisgICAgICAgbWVhbmluZyBvZiB0aGUgcmV0dXJuIHZhbHVlLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LiAgSXQgaXMgbm8gbW9yZSBzcGVjaWZpYyB0aGFuIHRoZSBTVnI0ICBkb2N1bWVudGEtCisgICAgICAgdGlvbiBvbiB0aGUgdHJhaWxpbmcgMC4gIEl0IGRvZXMgc3BlY2lmeSB0aGF0IHRoZSBzdWNjZXNzLQorICAgICAgIGZ1bCByZXR1cm4gb2YgdGhlIGZ1bmN0aW9ucyBpcyA8U1RST05HPk9LPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBDb21wYXJhYmxlIGZ1bmN0aW9ucyBpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgKG5jdXJzZXN3KSAgbGktCisgICAgICAgYnJhcnkgYXJlIGRlc2NyaWJlZCBpbiA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfaW5pdHNjci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZmQ1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbml0c2NyLjN4Lmh0bWwKQEAgLTAsMCArMSwxNjcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbml0c2NyLjN4LHYgMS4xNCAyMDA1LzA1LzE1IDE2OjE4OjAxIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW5pdHNjciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5pdHNjciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4sIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiwgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4sIDxTVFJPTkc+aXNlbmR3aW48L1NUUk9ORz4sIDxTVFJPTkc+c2V0X3Rlcm08L1NUUk9ORz4sIDxTVFJPTkc+ZGVsc2NyZWVuPC9TVFJPTkc+IC0KKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiBzY3JlZW4gaW5pdGlhbGl6YXRpb24gYW5kIG1hbmlwdWxhdGlvbiByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPippbml0c2NyKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZW5kd2luKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzZW5kd2luKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+U0NSRUVOPC9TVFJPTkc+IDxTVFJPTkc+Km5ld3Rlcm0oY2hhcjwvU1RST05HPiA8U1RST05HPip0eXBlLDwvU1RST05HPiA8U1RST05HPkZJTEU8L1NUUk9ORz4gPFNUUk9ORz4qb3V0ZmQsPC9TVFJPTkc+IDxTVFJPTkc+RklMRTwvU1RST05HPiA8U1RST05HPippbmZkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPlNDUkVFTjwvU1RST05HPiA8U1RST05HPipzZXRfdGVybShTQ1JFRU48L1NUUk9ORz4gPFNUUk9ORz4qbmV3KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5kZWxzY3JlZW4oU0NSRUVOKjwvU1RST05HPiA8U1RST05HPnNwKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gaXMgbm9ybWFsbHkgdGhlIGZpcnN0IDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHJvdXRpbmUgdG8gY2FsbCAgd2hlbgorICAgICAgIGluaXRpYWxpemluZyAgYSBwcm9ncmFtLiAgQSBmZXcgc3BlY2lhbCByb3V0aW5lcyBzb21ldGltZXMKKyAgICAgICBuZWVkIHRvIGJlIGNhbGxlZCBiZWZvcmUgaXQ7IHRoZXNlIGFyZSAgPFNUUk9ORz5zbGtfaW5pdDwvU1RST05HPiwgIDxTVFJPTkc+ZmlsdGVyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+cmlwb2ZmbGluZTwvU1RST05HPiwgIDxTVFJPTkc+dXNlX2VudjwvU1RST05HPi4gIEZvciBtdWx0aXBsZS10ZXJtaW5hbCBhcHBsaWNhdGlvbnMsCisgICAgICAgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+IG1heSBiZSBjYWxsZWQgYmVmb3JlIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPi4KKworICAgICAgIFRoZSBpbml0c2NyIGNvZGUgZGV0ZXJtaW5lcyB0aGUgdGVybWluYWwgdHlwZSBhbmQgaW5pdGlhbC0KKyAgICAgICBpemVzICBhbGwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gZGF0YSBzdHJ1Y3R1cmVzLiAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IGFsc28gY2F1c2VzIHRoZQorICAgICAgIGZpcnN0IGNhbGwgdG8gPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+IHRvIGNsZWFyIHRoZSBzY3JlZW4uICBJZiBlcnJvcnMgIG9jLQorICAgICAgIGN1ciwgIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiB3cml0ZXMgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB0byBzdGFuLQorICAgICAgIGRhcmQgZXJyb3IgYW5kIGV4aXRzOyBvdGhlcndpc2UsIGEgcG9pbnRlciBpcyByZXR1cm5lZCAgdG8KKyAgICAgICA8U1RST05HPnN0ZHNjcjwvU1RST05HPi4KKworICAgICAgIEEgIHByb2dyYW0gIHRoYXQgIG91dHB1dHMgdG8gbW9yZSB0aGFuIG9uZSB0ZXJtaW5hbCBzaG91bGQKKyAgICAgICB1c2UgdGhlIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiAgcm91dGluZSAgZm9yICBlYWNoICB0ZXJtaW5hbCAgaW5zdGVhZCAgb2YKKyAgICAgICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4uICBBIHByb2dyYW0gdGhhdCBuZWVkcyB0byBpbnNwZWN0IGNhcGFiaWxpdGllcywgc28KKyAgICAgICBpdCBjYW4gY29udGludWUgdG8gcnVuIGluIGEgbGluZS1vcmllbnRlZCBtb2RlIGlmIHRoZSB0ZXItCisgICAgICAgbWluYWwgY2Fubm90IHN1cHBvcnQgYSBzY3JlZW4tb3JpZW50ZWQgcHJvZ3JhbSwgd291bGQgYWxzbworICAgICAgIHVzZSA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4uICBUaGUgcm91dGluZSA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4gc2hvdWxkICBiZSAgY2FsbGVkICBvbmNlCisgICAgICAgZm9yIGVhY2ggdGVybWluYWwuICBJdCByZXR1cm5zIGEgdmFyaWFibGUgb2YgdHlwZSA8U1RST05HPlNDUkVFTjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4KKyAgICAgICB3aGljaCBzaG91bGQgYmUgc2F2ZWQgYXMgYSAgcmVmZXJlbmNlICB0byAgdGhhdCAgdGVybWluYWwuCisgICAgICAgVGhlICBhcmd1bWVudHMgIGFyZSB0aGUgPEVNPnR5cGU8L0VNPiBvZiB0aGUgdGVybWluYWwgdG8gYmUgdXNlZCBpbgorICAgICAgIHBsYWNlIG9mIDxTVFJPTkc+JFRFUk08L1NUUk9ORz4sIGEgZmlsZSBwb2ludGVyIGZvciBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLAorICAgICAgIGFuZCAgYW5vdGhlciAgZmlsZSBwb2ludGVyIGZvciBpbnB1dCBmcm9tIHRoZSB0ZXJtaW5hbCAoaWYKKyAgICAgICA8RU0+dHlwZTwvRU0+IGlzIDxTVFJPTkc+TlVMTDwvU1RST05HPiwgPFNUUk9ORz4kVEVSTTwvU1RST05HPiB3aWxsIGJlIHVzZWQpLiAgVGhlIHByb2dyYW0gbXVzdCAgYWxzbworICAgICAgIGNhbGwgIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+ICBmb3IgIGVhY2ggdGVybWluYWwgYmVpbmcgdXNlZCBiZWZvcmUgZXhpdGluZworICAgICAgIGZyb20gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4uICBJZiA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGZvciAgdGhlCisgICAgICAgc2FtZSAgdGVybWluYWwsIHRoZSBmaXJzdCB0ZXJtaW5hbCByZWZlcnJlZCB0byBtdXN0IGJlIHRoZQorICAgICAgIGxhc3Qgb25lIGZvciB3aGljaCA8U1RST05HPmVuZHdpbjwvU1RST05HPiBpcyBjYWxsZWQuCisKKyAgICAgICBBIHByb2dyYW0gc2hvdWxkIGFsd2F5cyBjYWxsIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+IGJlZm9yZSBleGl0aW5nIG9yICBlcy0KKyAgICAgICBjYXBpbmcgIGZyb20gIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+ICBtb2RlICB0ZW1wb3JhcmlseS4gIFRoaXMgcm91dGluZSByZS0KKyAgICAgICBzdG9yZXMgdHR5IG1vZGVzLCBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBsb3dlciAgbGVmdC1oYW5kCisgICAgICAgY29ybmVyICBvZiAgdGhlICBzY3JlZW4gIGFuZCAgcmVzZXRzIHRoZSB0ZXJtaW5hbCBpbnRvIHRoZQorICAgICAgIHByb3BlciBub24tdmlzdWFsIG1vZGUuICBDYWxsaW5nIDxTVFJPTkc+cmVmcmVzaDwvU1RST05HPiBvciA8U1RST05HPmRvdXBkYXRlPC9TVFJPTkc+IGFmdGVyCisgICAgICAgYSAgdGVtcG9yYXJ5ICBlc2NhcGUgIGNhdXNlcyAgdGhlIHByb2dyYW0gdG8gcmVzdW1lIHZpc3VhbAorICAgICAgIG1vZGUuCisKKyAgICAgICBUaGUgPFNUUk9ORz5pc2VuZHdpbjwvU1RST05HPiByb3V0aW5lICByZXR1cm5zICA8U1RST05HPlRSVUU8L1NUUk9ORz4gIGlmICA8U1RST05HPmVuZHdpbjwvU1RST05HPiAgaGFzICBiZWVuCisgICAgICAgY2FsbGVkIHdpdGhvdXQgYW55IHN1YnNlcXVlbnQgY2FsbHMgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiwgYW5kIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4KKyAgICAgICBvdGhlcndpc2UuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zZXRfdGVybTwvU1RST05HPiByb3V0aW5lIGlzIHVzZWQgdG8gc3dpdGNoICBiZXR3ZWVuICBkaWZmZXJlbnQKKyAgICAgICB0ZXJtaW5hbHMuICAgVGhlIHNjcmVlbiByZWZlcmVuY2UgPFNUUk9ORz5uZXc8L1NUUk9ORz4gYmVjb21lcyB0aGUgbmV3IGN1ci0KKyAgICAgICByZW50IHRlcm1pbmFsLiAgVGhlIHByZXZpb3VzIHRlcm1pbmFsIGlzIHJldHVybmVkICBieSAgdGhlCisgICAgICAgcm91dGluZS4gICBUaGlzICBpcyAgdGhlICBvbmx5ICByb3V0aW5lICB3aGljaCBtYW5pcHVsYXRlcworICAgICAgIDxTVFJPTkc+U0NSRUVOPC9TVFJPTkc+IHBvaW50ZXJzOyBhbGwgb3RoZXIgcm91dGluZXMgYWZmZWN0IG9ubHkgIHRoZSAgY3VyLQorICAgICAgIHJlbnQgdGVybWluYWwuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+ZGVsc2NyZWVuPC9TVFJPTkc+ICByb3V0aW5lICBmcmVlcyBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICA8U1RST05HPlNDUkVFTjwvU1RST05HPiBkYXRhIHN0cnVjdHVyZS4gIFRoZSA8U1RST05HPmVuZHdpbjwvU1RST05HPiAgcm91dGluZSAgZG9lcyAgbm90ICBkbworICAgICAgIHRoaXMsIHNvIDxTVFJPTkc+ZGVsc2NyZWVuPC9TVFJPTkc+IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gaWYgYSBwYXItCisgICAgICAgdGljdWxhciA8U1RST05HPlNDUkVFTjwvU1RST05HPiBpcyBubyBsb25nZXIgbmVlZGVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmVuZHdpbjwvU1RST05HPiByZXR1cm5zIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSAgYW5kICA8U1RST05HPk9LPC9TVFJPTkc+ICB1cG9uCisgICAgICAgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgYWx3YXlzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKyAgICAgICBYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gIHRoaXMgIGltcGxlbWVudGEtCisgICAgICAgdGlvbiAgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgd2FzIG5vdCBpbmktCisgICAgICAgdGlhbGl6ZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiBhbmQgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgIHN0YW5kYXJkLAorICAgICAgIElzc3VlIDQuICBJdCBzcGVjaWZpZXMgdGhhdCBwb3J0YWJsZSBhcHBsaWNhdGlvbnMgbXVzdCBub3QKKyAgICAgICBjYWxsIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiBtb3JlIHRoYW4gb25jZS4KKworICAgICAgIE9sZCB2ZXJzaW9ucyBvZiBjdXJzZXMsIGUuZy4sIEJTRCA0LjQsIG1heSBoYXZlIHJldHVybmVkIGEKKyAgICAgICBudWxsICBwb2ludGVyICBmcm9tICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gIHdoZW4gIGFuICBlcnJvciBpcyBkZXRlY3RlZCwKKyAgICAgICByYXRoZXIgdGhhbiBleGl0aW5nLiAgSXQgaXMgc2FmZSBidXQgIHJlZHVuZGFudCAgdG8gIGNoZWNrCisgICAgICAgdGhlIHJldHVybiB2YWx1ZSBvZiA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gaW4gWFNJIEN1cnNlcy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPiwgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2lub3B0cy4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfaW5vcHRzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlYzNlZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2lub3B0cy4zeC5odG1sCkBAIC0wLDAgKzEsMjYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW5vcHRzLjN4LHYgMS4xMyAyMDA1LzA1LzE1IDE2OjE4OjA3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW5vcHRzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbm9wdHMgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y2JyZWFrPC9TVFJPTkc+LCA8U1RST05HPm5vY2JyZWFrPC9TVFJPTkc+LCA8U1RST05HPmVjaG88L1NUUk9ORz4sIDxTVFJPTkc+bm9lY2hvPC9TVFJPTkc+LCA8U1RST05HPmhhbGZkZWxheTwvU1RST05HPiwgPFNUUk9ORz5pbnRyZmx1c2g8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5rZXlwYWQ8L1NUUk9ORz4sIDxTVFJPTkc+bWV0YTwvU1RST05HPiwgPFNUUk9ORz5ub2RlbGF5PC9TVFJPTkc+LCA8U1RST05HPm5vdGltZW91dDwvU1RST05HPiwgPFNUUk9ORz5yYXc8L1NUUk9ORz4sIDxTVFJPTkc+bm9yYXc8L1NUUk9ORz4sIDxTVFJPTkc+bm9xaWZsdXNoPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+cWlmbHVzaDwvU1RST05HPiwgPFNUUk9ORz50aW1lb3V0PC9TVFJPTkc+LCA8U1RST05HPnd0aW1lb3V0PC9TVFJPTkc+LCA8U1RST05HPnR5cGVhaGVhZDwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGlucHV0CisgICAgICAgb3B0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNicmVhayh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5vY2JyZWFrKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZWNobyh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5vZWNobyh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmhhbGZkZWxheShpbnQ8L1NUUk9ORz4gPFNUUk9ORz50ZW50aHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW50cmZsdXNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmtleXBhZChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5iZik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tZXRhKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5vZGVsYXkoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cmF3KHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bm9yYXcodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+bm9xaWZsdXNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPnFpZmx1c2godm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ub3RpbWVvdXQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPnRpbWVvdXQoaW50PC9TVFJPTkc+IDxTVFJPTkc+ZGVsYXkpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPnd0aW1lb3V0KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZGVsYXkpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dHlwZWFoZWFkKGludDwvU1RST05HPiA8U1RST05HPmZkKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBOb3JtYWxseSwgdGhlIHR0eSBkcml2ZXIgYnVmZmVycyB0eXBlZCBjaGFyYWN0ZXJzIHVudGlsICBhCisgICAgICAgbmV3bGluZSAgb3IgIGNhcnJpYWdlIHJldHVybiBpcyB0eXBlZC4gIFRoZSA8U1RST05HPmNicmVhazwvU1RST05HPiByb3V0aW5lCisgICAgICAgZGlzYWJsZXMgbGluZSBidWZmZXJpbmcgYW5kIGVyYXNlL2tpbGwgIGNoYXJhY3Rlci1wcm9jZXNzLQorICAgICAgIGluZyAgKGludGVycnVwdCAgYW5kIGZsb3cgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSB1bmFmZmVjdC0KKyAgICAgICBlZCksIG1ha2luZyAgY2hhcmFjdGVycyAgdHlwZWQgIGJ5ICB0aGUgIHVzZXIgIGltbWVkaWF0ZWx5CisgICAgICAgYXZhaWxhYmxlICB0byAgdGhlICBwcm9ncmFtLiAgVGhlIDxTVFJPTkc+bm9jYnJlYWs8L1NUUk9ORz4gcm91dGluZSByZXR1cm5zCisgICAgICAgdGhlIHRlcm1pbmFsIHRvIG5vcm1hbCAoY29va2VkKSBtb2RlLgorCisgICAgICAgSW5pdGlhbGx5IHRoZSB0ZXJtaW5hbCBtYXkgb3IgbWF5IG5vdCBiZSBpbiAgPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4gIG1vZGUsCisgICAgICAgYXMgdGhlIG1vZGUgaXMgaW5oZXJpdGVkOyB0aGVyZWZvcmUsIGEgcHJvZ3JhbSBzaG91bGQgY2FsbAorICAgICAgIDxTVFJPTkc+Y2JyZWFrPC9TVFJPTkc+IG9yIDxTVFJPTkc+bm9jYnJlYWs8L1NUUk9ORz4gZXhwbGljaXRseS4gIE1vc3QgaW50ZXJhY3RpdmUgIHByb2dyYW1zCisgICAgICAgdXNpbmcgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHNldCB0aGUgPFNUUk9ORz5jYnJlYWs8L1NUUk9ORz4gbW9kZS4gIE5vdGUgdGhhdCA8U1RST05HPmNicmVhazwvU1RST05HPiBvdmVyLQorICAgICAgIHJpZGVzIDxTVFJPTkc+cmF3PC9TVFJPTkc+LiAgW1NlZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+IGZvciBhICBkaXNjdXNzaW9uICBvZiAgaG93CisgICAgICAgdGhlc2Ugcm91dGluZXMgaW50ZXJhY3Qgd2l0aCA8U1RST05HPmVjaG88L1NUUk9ORz4gYW5kIDxTVFJPTkc+bm9lY2hvPC9TVFJPTkc+Ll0KKworICAgICAgIFRoZSAgPFNUUk9ORz5lY2hvPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+bm9lY2hvPC9TVFJPTkc+IHJvdXRpbmVzIGNvbnRyb2wgd2hldGhlciBjaGFyYWN0ZXJzCisgICAgICAgdHlwZWQgYnkgdGhlIHVzZXIgYXJlIGVjaG9lZCBieSA8U1RST05HPmdldGNoPC9TVFJPTkc+IGFzIHRoZXkgIGFyZSAgdHlwZWQuCisgICAgICAgRWNob2luZyBieSB0aGUgdHR5IGRyaXZlciBpcyBhbHdheXMgZGlzYWJsZWQsIGJ1dCBpbml0aWFsLQorICAgICAgIGx5IDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4gaXMgaW4gZWNobyBtb2RlLCBzbyBjaGFyYWN0ZXJzIHR5cGVkIGFyZSAgZWNob2VkLgorICAgICAgIEF1dGhvcnMgIG9mICBtb3N0ICBpbnRlcmFjdGl2ZSBwcm9ncmFtcyBwcmVmZXIgdG8gZG8gdGhlaXIKKyAgICAgICBvd24gZWNob2luZyBpbiBhIGNvbnRyb2xsZWQgYXJlYSBvZiB0aGUgc2NyZWVuLCBvciBub3QgIHRvCisgICAgICAgZWNobyAgYXQgIGFsbCwgIHNvIHRoZXkgZGlzYWJsZSBlY2hvaW5nIGJ5IGNhbGxpbmcgPFNUUk9ORz5ub2VjaG88L1NUUk9ORz4uCisgICAgICAgW1NlZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+IGZvciBhIGRpc2N1c3Npb24gb2YgaG93IHRoZXNlIHJvdXRpbmVzCisgICAgICAgaW50ZXJhY3Qgd2l0aCA8U1RST05HPmNicmVhazwvU1RST05HPiBhbmQgPFNUUk9ORz5ub2NicmVhazwvU1RST05HPi5dCisKKyAgICAgICBUaGUgIDxTVFJPTkc+aGFsZmRlbGF5PC9TVFJPTkc+ICByb3V0aW5lIGlzIHVzZWQgZm9yIGhhbGYtZGVsYXkgbW9kZSwgd2hpY2gKKyAgICAgICBpcyBzaW1pbGFyIHRvIDxTVFJPTkc+Y2JyZWFrPC9TVFJPTkc+IG1vZGUgaW4gdGhhdCBjaGFyYWN0ZXJzIHR5cGVkIGJ5ICB0aGUKKyAgICAgICB1c2VyICBhcmUgIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gIEhvd2V2ZXIsCisgICAgICAgYWZ0ZXIgYmxvY2tpbmcgZm9yIDxFTT50ZW50aHM8L0VNPiB0ZW50aHMgb2Ygc2Vjb25kcywgIEVSUiAgaXMgIHJlLQorICAgICAgIHR1cm5lZCAgaWYgIG5vdGhpbmcgIGhhcyAgYmVlbiB0eXBlZC4gIFRoZSB2YWx1ZSBvZiA8U1RST05HPnRlbnRoczwvU1RST05HPgorICAgICAgIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAyNTUuICBVc2UgPFNUUk9ORz5ub2NicmVhazwvU1RST05HPiB0byBsZWF2ZQorICAgICAgIGhhbGYtZGVsYXkgbW9kZS4KKworICAgICAgIElmICB0aGUgPFNUUk9ORz5pbnRyZmx1c2g8L1NUUk9ORz4gb3B0aW9uIGlzIGVuYWJsZWQsICg8RU0+YmY8L0VNPiBpcyA8U1RST05HPlRSVUU8L1NUUk9ORz4pLCB3aGVuIGFuCisgICAgICAgaW50ZXJydXB0IGtleSAgaXMgIHByZXNzZWQgIG9uICB0aGUgIGtleWJvYXJkICAoaW50ZXJydXB0LAorICAgICAgIGJyZWFrLCAgcXVpdCkgIGFsbCAgb3V0cHV0IGluIHRoZSB0dHkgZHJpdmVyIHF1ZXVlIHdpbGwgYmUKKyAgICAgICBmbHVzaGVkLCBnaXZpbmcgdGhlIGVmZmVjdCBvZiBmYXN0ZXIgcmVzcG9uc2UgdG8gIHRoZSAgaW4tCisgICAgICAgdGVycnVwdCwgYnV0IGNhdXNpbmcgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gdG8gaGF2ZSB0aGUgd3JvbmcgaWRlYSBvZiB3aGF0CisgICAgICAgaXMgb24gdGhlIHNjcmVlbi4gIERpc2FibGluZyAoPEVNPmJmPC9FTT4gIGlzICA8U1RST05HPkZBTFNFPC9TVFJPTkc+KSwgIHRoZSAgb3B0aW9uCisgICAgICAgcHJldmVudHMgIHRoZSBmbHVzaC4gIFRoZSBkZWZhdWx0IGZvciB0aGUgb3B0aW9uIGlzIGluaGVyLQorICAgICAgIGl0ZWQgZnJvbSB0aGUgdHR5IGRyaXZlciBzZXR0aW5ncy4gIFRoZSB3aW5kb3cgYXJndW1lbnQgaXMKKyAgICAgICBpZ25vcmVkLgorCisgICAgICAgVGhlICA8U1RST05HPmtleXBhZDwvU1RST05HPiBvcHRpb24gZW5hYmxlcyB0aGUga2V5cGFkIG9mIHRoZSB1c2VyJ3MgdGVybWktCisgICAgICAgbmFsLiAgSWYgZW5hYmxlZCAoPEVNPmJmPC9FTT4gaXMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+KSwgdGhlIHVzZXIgY2FuIHByZXNzIGEgIGZ1bmMtCisgICAgICAgdGlvbiAga2V5IChzdWNoIGFzIGFuIGFycm93IGtleSkgYW5kIDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+IHJldHVybnMgYSBzaW4tCisgICAgICAgZ2xlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24ga2V5LCBhcyAgaW4gIDxTVFJPTkc+S0VZX0xFRlQ8L1NUUk9ORz4uCisgICAgICAgSWYgIGRpc2FibGVkICg8RU0+YmY8L0VNPiBpcyA8U1RST05HPkZBTFNFPC9TVFJPTkc+KSwgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gZG9lcyBub3QgdHJlYXQgZnVuY3Rpb24KKyAgICAgICBrZXlzIHNwZWNpYWxseSBhbmQgdGhlIHByb2dyYW0gaGFzIHRvIGludGVycHJldCB0aGUgZXNjYXBlCisgICAgICAgc2VxdWVuY2VzICBpdHNlbGYuICAgSWYgIHRoZSBrZXlwYWQgaW4gdGhlIHRlcm1pbmFsIGNhbiBiZQorICAgICAgIHR1cm5lZCBvbiAobWFkZSB0byB0cmFuc21pdCkgYW5kIG9mZiAobWFkZSB0byB3b3JrICBsb2NhbC0KKyAgICAgICBseSksICB0dXJuaW5nIG9uIHRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgdGVybWluYWwga2V5cGFkIHRvCisgICAgICAgYmUgdHVybmVkIG9uIHdoZW4gPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4gaXMgY2FsbGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAga2V5cGFkIGlzIGZhbHNlLgorCisgICAgICAgSW5pdGlhbGx5LCB3aGV0aGVyIHRoZSB0ZXJtaW5hbCByZXR1cm5zIDcgb3IgOCBzaWduaWZpY2FudAorICAgICAgIGJpdHMgb24gaW5wdXQgZGVwZW5kcyBvbiB0aGUgY29udHJvbCBtb2RlIG9mIHRoZSB0dHkgZHJpdi0KKyAgICAgICBlciAgW3NlZSAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW8uNy5odG1sIj50ZXJtaW8oNyk8L0E+PC9TVFJPTkc+XS4gIFRvIGZvcmNlIDggYml0cyB0byBiZSByZXR1cm5lZCwgaW4tCisgICAgICAgdm9rZSA8U1RST05HPm1ldGE8L1NUUk9ORz4oPEVNPndpbjwvRU0+LCA8U1RST05HPlRSVUU8L1NUUk9ORz4pOyB0aGlzIGlzIGVxdWl2YWxlbnQsIHVuZGVyIFBPU0lYLCAgdG8KKyAgICAgICBzZXR0aW5nICB0aGUgQ1M4IGZsYWcgb24gdGhlIHRlcm1pbmFsLiAgVG8gZm9yY2UgNyBiaXRzIHRvCisgICAgICAgYmUgcmV0dXJuZWQsIGludm9rZSA8U1RST05HPm1ldGE8L1NUUk9ORz4oPEVNPndpbjwvRU0+LCA8U1RST05HPkZBTFNFPC9TVFJPTkc+KTsgdGhpcyBpcyAgZXF1aXZhbGVudCwKKyAgICAgICB1bmRlciBQT1NJWCwgdG8gc2V0dGluZyB0aGUgQ1M3IGZsYWcgb24gdGhlIHRlcm1pbmFsLiAgVGhlCisgICAgICAgd2luZG93IGFyZ3VtZW50LCA8RU0+d2luPC9FTT4sIGlzIGFsd2F5cyBpZ25vcmVkLiAgSWYgdGhlICB0ZXJtaW5mbworICAgICAgIGNhcGFiaWxpdGllcyAgPFNUUk9ORz5zbW08L1NUUk9ORz4gKG1ldGFfb24pIGFuZCA8U1RST05HPnJtbTwvU1RST05HPiAobWV0YV9vZmYpIGFyZSBkZWZpbmVkCisgICAgICAgZm9yIHRoZSAgdGVybWluYWwsICA8U1RST05HPnNtbTwvU1RST05HPiAgaXMgIHNlbnQgIHRvICB0aGUgIHRlcm1pbmFsICB3aGVuCisgICAgICAgPFNUUk9ORz5tZXRhPC9TVFJPTkc+KDxFTT53aW48L0VNPiwgIDxTVFJPTkc+VFJVRTwvU1RST05HPikgIGlzIGNhbGxlZCBhbmQgPFNUUk9ORz5ybW08L1NUUk9ORz4gaXMgc2VudCB3aGVuIDxTVFJPTkc+bWV0YTwvU1RST05HPig8RU0+d2luPC9FTT4sCisgICAgICAgPFNUUk9ORz5GQUxTRTwvU1RST05HPikgaXMgY2FsbGVkLgorCisgICAgICAgVGhlIDxTVFJPTkc+bm9kZWxheTwvU1RST05HPiBvcHRpb24gY2F1c2VzIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4gdG8gYmUgYSBub24tYmxvY2tpbmcgY2FsbC4KKyAgICAgICBJZiAgbm8gaW5wdXQgaXMgcmVhZHksIDxTVFJPTkc+Z2V0Y2g8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPi4gIElmIGRpc2FibGVkICg8RU0+YmY8L0VNPgorICAgICAgIGlzIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4pLCA8U1RST05HPmdldGNoPC9TVFJPTkc+IHdhaXRzIHVudGlsIGEga2V5IGlzIHByZXNzZWQuCisKKyAgICAgICBXaGlsZSBpbnRlcnByZXRpbmcgYW4gaW5wdXQgZXNjYXBlIHNlcXVlbmNlLCA8U1RST05HPndnZXRjaDwvU1RST05HPiBzZXRzIGEKKyAgICAgICB0aW1lciAgd2hpbGUgIHdhaXRpbmcgIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuICBJZiA8U1RST05HPm5vdGltZS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPm91dCg8L1NUUk9ORz48RU0+d2luPC9FTT4sIDxTVFJPTkc+VFJVRTwvU1RST05HPikgaXMgY2FsbGVkLCAgdGhlbiAgPFNUUk9ORz53Z2V0Y2g8L1NUUk9ORz4gIGRvZXMgIG5vdCAgc2V0ICBhCisgICAgICAgdGltZXIuICBUaGUgcHVycG9zZSBvZiB0aGUgdGltZW91dCBpcyB0byBkaWZmZXJlbnRpYXRlIGJlLQorICAgICAgIHR3ZWVuIHNlcXVlbmNlcyByZWNlaXZlZCBmcm9tIGEgIGZ1bmN0aW9uICBrZXkgIGFuZCAgdGhvc2UKKyAgICAgICB0eXBlZCBieSBhIHVzZXIuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+cmF3PC9TVFJPTkc+IGFuZCA8U1RST05HPm5vcmF3PC9TVFJPTkc+IHJvdXRpbmVzIHBsYWNlIHRoZSB0ZXJtaW5hbCBpbnRvIG9yIG91dAorICAgICAgIG9mIHJhdyBtb2RlLiAgUmF3IG1vZGUgaXMgc2ltaWxhciB0byA8U1RST05HPmNicmVhazwvU1RST05HPiBtb2RlLCBpbiAgdGhhdAorICAgICAgIGNoYXJhY3RlcnMgdHlwZWQgYXJlIGltbWVkaWF0ZWx5IHBhc3NlZCB0aHJvdWdoIHRvIHRoZSB1cy0KKyAgICAgICBlciBwcm9ncmFtLiAgVGhlIGRpZmZlcmVuY2VzIGFyZSB0aGF0IGluIHJhdyBtb2RlLCB0aGUgaW4tCisgICAgICAgdGVycnVwdCwgIHF1aXQsICBzdXNwZW5kLCAgYW5kIGZsb3cgY29udHJvbCBjaGFyYWN0ZXJzIGFyZQorICAgICAgIGFsbCBwYXNzZWQgdGhyb3VnaCB1bmludGVycHJldGVkLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgIGEKKyAgICAgICBzaWduYWwuICAgVGhlICBiZWhhdmlvciAgb2YgdGhlIEJSRUFLIGtleSBkZXBlbmRzIG9uIG90aGVyCisgICAgICAgYml0cyBpbiB0aGUgdHR5IGRyaXZlciB0aGF0IGFyZSBub3Qgc2V0IGJ5IDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+LgorCisgICAgICAgV2hlbiB0aGUgPFNUUk9ORz5ub3FpZmx1c2g8L1NUUk9ORz4gcm91dGluZSBpcyB1c2VkLCBub3JtYWwgZmx1c2ggb2YgIGlucHV0CisgICAgICAgYW5kICBvdXRwdXQgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgPFNUUk9ORz5JTlRSPC9TVFJPTkc+LCA8U1RST05HPlFVSVQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+U1VTUDwvU1RST05HPgorICAgICAgIGNoYXJhY3RlcnMgd2lsbCBub3QgYmUgZG9uZSBbc2VlIDxTVFJPTkc+PEEgSFJFRj0idGVybWlvLjcuaHRtbCI+dGVybWlvKDcpPC9BPjwvU1RST05HPl0uICBXaGVuIDxTVFJPTkc+cWlmbHVzaDwvU1RST05HPgorICAgICAgIGlzICBjYWxsZWQsICB0aGUgcXVldWVzIHdpbGwgYmUgZmx1c2hlZCB3aGVuIHRoZXNlIGNvbnRyb2wKKyAgICAgICBjaGFyYWN0ZXJzIGFyZSByZWFkLiAgWW91IG1heSB3YW50IHRvIGNhbGwgPFNUUk9ORz5ub3FpZmx1c2goKTwvU1RST05HPiAgaW4KKyAgICAgICBhICBzaWduYWwgaGFuZGxlciBpZiB5b3Ugd2FudCBvdXRwdXQgdG8gY29udGludWUgYXMgdGhvdWdoCisgICAgICAgdGhlIGludGVycnVwdCBoYWQgbm90IG9jY3VycmVkLCBhZnRlciB0aGUgaGFuZGxlciBleGl0cy4KKworICAgICAgIFRoZSA8U1RST05HPnRpbWVvdXQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+d3RpbWVvdXQ8L1NUUk9ORz4gcm91dGluZXMgIHNldCAgYmxvY2tpbmcgIG9yICBub24tCisgICAgICAgYmxvY2tpbmcgIHJlYWQgIGZvciBhIGdpdmVuIHdpbmRvdy4gIElmIDxFTT5kZWxheTwvRU0+IGlzIG5lZ2F0aXZlLAorICAgICAgIGJsb2NraW5nIHJlYWQgaXMgdXNlZCAoaS5lLiwgd2FpdHMgIGluZGVmaW5pdGVseSAgZm9yICBpbi0KKyAgICAgICBwdXQpLiAgIElmICA8RU0+ZGVsYXk8L0VNPiAgaXMgemVybywgdGhlbiBub24tYmxvY2tpbmcgcmVhZCBpcyB1c2VkCisgICAgICAgKGkuZS4sIHJlYWQgcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPiBpZiBubyBpbnB1dCBpcyB3YWl0aW5nKS4gIElmIDxFTT5kZWxheTwvRU0+CisgICAgICAgaXMgIHBvc2l0aXZlLCB0aGVuIHJlYWQgYmxvY2tzIGZvciA8RU0+ZGVsYXk8L0VNPiBtaWxsaXNlY29uZHMsIGFuZAorICAgICAgIHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4gaWYgdGhlcmUgaXMgc3RpbGwgbm8gaW5wdXQuICBIZW5jZSwgdGhlc2Ugcm91LQorICAgICAgIHRpbmVzICBwcm92aWRlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgPFNUUk9ORz5ub2RlbGF5PC9TVFJPTkc+LCBwbHVzIHRoZQorICAgICAgIGFkZGl0aW9uYWwgY2FwYWJpbGl0eSBvZiBiZWluZyBhYmxlIHRvIGJsb2NrIGZvciBvbmx5ICA8RU0+ZGUtPC9FTT4KKyAgICAgICA8RU0+bGF5PC9FTT4gbWlsbGlzZWNvbmRzICh3aGVyZSA8RU0+ZGVsYXk8L0VNPiBpcyBwb3NpdGl2ZSkuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgZG9lcyBgYGxpbmUtYnJlYWtvdXQgb3B0aW1pemF0aW9uJycgYnkKKyAgICAgICBsb29raW5nIGZvciAgdHlwZWFoZWFkICBwZXJpb2RpY2FsbHkgIHdoaWxlICB1cGRhdGluZyAgdGhlCisgICAgICAgc2NyZWVuLiAgIElmICBpbnB1dCBpcyBmb3VuZCwgYW5kIGl0IGlzIGNvbWluZyBmcm9tIGEgdHR5LAorICAgICAgIHRoZSBjdXJyZW50IHVwZGF0ZSBpcyBwb3N0cG9uZWQgdW50aWwgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+IG9yICA8U1RST05HPmRvdXBkYXRlPC9TVFJPTkc+CisgICAgICAgaXMgIGNhbGxlZCBhZ2Fpbi4gIFRoaXMgYWxsb3dzIGZhc3RlciByZXNwb25zZSB0byBjb21tYW5kcworICAgICAgIHR5cGVkIGluIGFkdmFuY2UuICBOb3JtYWxseSwgdGhlIGlucHV0IEZJTEUgcG9pbnRlciBwYXNzZWQKKyAgICAgICB0byAgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+LCAgb3IgIDxTVFJPTkc+c3RkaW48L1NUUk9ORz4gaW4gdGhlIGNhc2UgdGhhdCA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gd2FzIHVzZWQsCisgICAgICAgd2lsbCBiZSB1c2VkIHRvIGRvIHRoaXMgdHlwZWFoZWFkIGNoZWNraW5nLiAgVGhlIDxTVFJPTkc+dHlwZWFoZWFkPC9TVFJPTkc+CisgICAgICAgcm91dGluZSAgc3BlY2lmaWVzICB0aGF0ICB0aGUgIGZpbGUgZGVzY3JpcHRvciA8RU0+ZmQ8L0VNPiBpcyB0byBiZQorICAgICAgIHVzZWQgdG8gY2hlY2sgZm9yIHR5cGVhaGVhZCBpbnN0ZWFkLiAgSWYgPEVNPmZkPC9FTT4gaXMgLTEsIHRoZW4gbm8KKyAgICAgICB0eXBlYWhlYWQgY2hlY2tpbmcgaXMgZG9uZS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsICByb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWwtCisgICAgICAgdXJlIGFuZCBPSyAoU1ZyNCBzcGVjaWZpZXMgb25seSAiYW4gIGludGVnZXIgIHZhbHVlICBvdGhlcgorICAgICAgIHRoYW4gIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgIHVwb24gIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzIG90aGVyd2lzZQorICAgICAgIG5vdGVkIGluIHRoZSBwcmVjZWRpbmcgcm91dGluZSBkZXNjcmlwdGlvbnMuCisKKyAgICAgICBYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyAgaW0tCisgICAgICAgcGxlbWVudGF0aW9uLCAgZnVuY3Rpb25zICB3aXRoIGEgd2luZG93IHBhcmFtZXRlciB3aWxsIHJlLQorICAgICAgIHR1cm4gYW4gZXJyb3IgaWYgaXQgaXMgbnVsbC4gIEFueSBmdW5jdGlvbiB3aWxsICBhbHNvICByZS0KKyAgICAgICB0dXJuIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCB3YXMgbm90IGluaXRpYWxpemVkLiAgQWxzbywKKworICAgICAgICAgICAgICA8U1RST05HPmhhbGZkZWxheTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgIGFuICBlcnJvciBpZiBpdHMgcGFyYW1ldGVyIGlzIG91dHNpZGUKKyAgICAgICAgICAgICAgICAgICB0aGUgcmFuZ2UgMS4uMjU1LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzICBzdGFuZGFyZCwKKyAgICAgICBJc3N1ZSA0LgorCisgICAgICAgVGhlICBuY3Vyc2VzICBsaWJyYXJ5IG9iZXlzIHRoZSBYUEc0IHN0YW5kYXJkIGFuZCB0aGUgaGlzLQorICAgICAgIHRvcmljYWwgcHJhY3RpY2Ugb2YgdGhlIEFUJmFtcDtUICBjdXJzZXMgIGltcGxlbWVudGF0aW9ucywgIGluCisgICAgICAgdGhhdCAgdGhlICBlY2hvIGJpdCBpcyBjbGVhcmVkIHdoZW4gY3Vyc2VzIGluaXRpYWxpemVzIHRoZQorICAgICAgIHRlcm1pbmFsIHN0YXRlLiAgQlNEIGN1cnNlcyBkaWZmZXJlZCBmcm9tICB0aGlzICBzbGlnaHRseTsKKyAgICAgICBpdCBsZWZ0IHRoZSBlY2hvIGJpdCBvbiBhdCBpbml0aWFsaXphdGlvbiwgYnV0IHRoZSBCU0QgPFNUUk9ORz5yYXc8L1NUUk9ORz4KKyAgICAgICBjYWxsIHR1cm5lZCBpdCBvZmYgYXMgYSBzaWRlLWVmZmVjdC4gIEZvciBiZXN0ICBwb3J0YWJpbGktCisgICAgICAgdHksICBzZXQgIGVjaG8gb3Igbm9lY2hvIGV4cGxpY2l0bHkganVzdCBhZnRlciBpbml0aWFsaXphLQorICAgICAgIHRpb24sIGV2ZW4gaWYgeW91ciBwcm9ncmFtIHJlbWFpbnMgaW4gY29va2VkIG1vZGUuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+ZWNobzwvU1RST05HPiwgPFNUUk9ORz5ub2VjaG88L1NUUk9ORz4sIDxTVFJPTkc+aGFsZmRlbGF5PC9TVFJPTkc+LCA8U1RST05HPmludHJmbHVzaDwvU1RST05HPiwgPFNUUk9ORz5tZXRhPC9TVFJPTkc+LCAgPFNUUk9ORz5ub2RlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+bGF5PC9TVFJPTkc+LCAgPFNUUk9ORz5ub3RpbWVvdXQ8L1NUUk9ORz4sIDxTVFJPTkc+bm9xaWZsdXNoPC9TVFJPTkc+LCA8U1RST05HPnFpZmx1c2g8L1NUUk9ORz4sIDxTVFJPTkc+dGltZW91dDwvU1RST05HPiwgYW5kIDxTVFJPTkc+d3RpbWVvdXQ8L1NUUk9ORz4KKyAgICAgICBtYXkgYmUgbWFjcm9zLgorCisgICAgICAgVGhlIDxTVFJPTkc+bm9yYXc8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bm9jYnJlYWs8L1NUUk9ORz4gY2FsbHMgZm9sbG93IGhpc3RvcmljYWwgcHJhY3RpY2UgaW4KKyAgICAgICB0aGF0ICB0aGV5ICBhdHRlbXB0ICB0byAgcmVzdG9yZSB0byBub3JtYWwgKGBjb29rZWQnKSBtb2RlCisgICAgICAgZnJvbSByYXcgYW5kIGNicmVhayBtb2RlcyByZXNwZWN0aXZlbHkuICBNaXhpbmcgIHJhdy9ub3JhdworICAgICAgIGFuZCAgY2JyZWFrL25vY2JyZWFrICBjYWxscyAgbGVhZHMgIHRvICB0dHkgZHJpdmVyIGNvbnRyb2wKKyAgICAgICBzdGF0ZXMgdGhhdCBhcmUgaGFyZCB0byBwcmVkaWN0IG9yIHVuZGVyc3RhbmQ7IGl0ICBpcyAgbm90CisgICAgICAgcmVjb21tZW5kZWQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0Y2guM3guaHRtbCI+Y3Vyc19nZXRjaCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW8uNy5odG1sIj50ZXJtaW8oNyk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbnNfd2NoLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbnNfd2NoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2OWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luc193Y2guM3guaHRtbApAQCAtMCwwICsxLDEwMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2luc193Y2guM3gsdiAxLjMgMjAwNi8wMi8yNSAyMTo0MjoyMiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luc193Y2ggM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2luc193Y2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3djaC4zeC5odG1sIj5jdXJzX2luc193Y2goM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd2NoLjN4Lmh0bWwiPmN1cnNfaW5zX3djaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbnNfd2NoPC9TVFJPTkc+LCAgPFNUUk9ORz5tdmluc193Y2g8L1NUUk9ORz4sICA8U1RST05HPm12d2luc193Y2g8L1NUUk9ORz4sIDxTVFJPTkc+d2luc193Y2g8L1NUUk9ORz4gLSBpbnNlcnQgYSBjb20tCisgICAgICAgcGxleCBjaGFyYWN0ZXIgYW5kIHJlbmRpdGlvbiBpbnRvIGEgd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgI2luY2x1ZGUgJmx0O2N1cnNlcy5oJmd0OworCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbnNfd2NoKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5zX3djaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbiw8L0VNPiA8RU0+Y29uc3Q8L0VNPiA8RU0+Y2NoYXI8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT50PC9FTT4gPEVNPip3Y2g8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5zX3djaChpbnQ8L1NUUk9ORz4gPEVNPnksPC9FTT4gPEVNPmludDwvRU0+IDxFTT54LDwvRU0+IDxFTT5jb25zdDwvRU0+IDxFTT5jY2hhcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnQ8L0VNPiA8RU0+KndjaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5zX3djaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbiw8L0VNPiA8RU0+aW50PC9FTT4gPEVNPnksPC9FTT4gPEVNPmludDwvRU0+ICA8RU0+eCw8L0VNPiAgPEVNPmNvbnN0PC9FTT4gIDxFTT5jY2hhcjwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPnQ8L0VNPgorICAgICAgIDxFTT4qd2NoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMsIGluc2VydCB0aGUgY29tcGxleCBjaGFyYWN0ZXIgPEVNPndjaDwvRU0+IHdpdGggcmVuLQorICAgICAgIGRpdGlvbiBiZWZvcmUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLiAgQWxsIGNoYXJhYy0KKyAgICAgICB0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIGFyZSBtb3ZlZCBvbmUgc3BhY2UgdG8gdGhlCisgICAgICAgcmlnaHQsIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSByaWdodG1vc3QgY2hhcmFjdGVyICBvbgorICAgICAgIHRoZSAgbGluZSAgYmVpbmcgIGxvc3QuICAgVGhlIGluc2VydGlvbiBvcGVyYXRpb24gZG9lcyBub3QKKyAgICAgICBjaGFuZ2UgdGhlIGN1cnNvciBwb3NpdGlvbi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgSWYgc3VjY2Vzc2Z1bCwgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBPSy4gICBJZiAgbm90LCAgdGhleQorICAgICAgIHJldHVybiBFUlIuCisKKworPC9QUkU+Cis8SDI+RVJST1JTPC9IMj48UFJFPgorICAgICAgIE5vIGVycm9ycyBhcmUgZGVmaW5lZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193Y2guM3guaHRtbCI+Y3Vyc19pbnNfd2NoKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfaW5zX3dzdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luc193c3RyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4MTg3MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luc193c3RyLjN4Lmh0bWwKQEAgLTAsMCArMSwxMjUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbnNfd3N0ci4zeCx2IDEuNCAyMDA1LzA1LzE1IDE3OjAyOjU0IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfaW5zX3dzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2luc193c3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193c3RyLjN4Lmh0bWwiPmN1cnNfaW5zX3dzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbnNfd3N0cjwvU1RST05HPiwgPFNUUk9ORz5pbnNfbndzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2luc193c3RyPC9TVFJPTkc+LCA8U1RST05HPndpbnNfbndzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbnNfd3N0cjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPm12aW5zX253c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luc193c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2luc19ud3N0cjwvU1RST05HPiAtIGluc2VydCBhIHdpZGUtCisgICAgICAgY2hhcmFjdGVyIHN0cmluZyBpbnRvIGEgY3Vyc2VzIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluc193c3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cik7PC9FTT4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmluc19ud3N0cihjb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luc193c3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d2luPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbnNfbndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluc193c3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12aW5zX253c3RyKGludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5zX3dzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndzdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2luc19ud3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPndpbjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+d3N0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzIGluc2VydCBhIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiBjaGFyYWN0ZXIgc3RyaW5nIChhcyBtYW55CisgICAgICAgY2hhcmFjdGVycyBhcyB3aWxsIGZpdCBvbiB0aGUgbGluZSkgYmVmb3JlICB0aGUgIGNoYXJhY3RlcgorICAgICAgIHVuZGVyIHRoZSBjdXJzb3IuICBBbGwgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlIGN1ci0KKyAgICAgICBzb3IgYXJlIHNoaWZ0ZWQgcmlnaHQsIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSAgcmlnaHQtCisgICAgICAgbW9zdCAgY2hhcmFjdGVycyAgb24gIHRoZSBsaW5lIGJlaW5nIGxvc3QuICBObyB3cmFwcGluZyBpcworICAgICAgIHBlcmZvcm1lZC4gIFRoZSBjdXJzb3IgcG9zaXRpb24gIGRvZXMgIG5vdCAgY2hhbmdlICAoYWZ0ZXIKKyAgICAgICBtb3ZpbmcgIHRvICA8RU0+eTwvRU0+LCA8RU0+eDwvRU0+LCBpZiBzcGVjaWZpZWQpLiAgVGhlIGZvdXIgcm91dGluZXMgd2l0aCA8RU0+bjwvRU0+CisgICAgICAgYXMgdGhlIGxhc3QgYXJndW1lbnQgaW5zZXJ0IGEgbGVhZGluZyBzdWJzdHJpbmcgb2YgYXQgbW9zdAorICAgICAgIDxFTT5uPC9FTT4gIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiAgY2hhcmFjdGVycy4gICBJZiAgPEVNPm48L0VNPiBpcyBsZXNzIHRoYW4gMSwgdGhlIGVudGlyZQorICAgICAgIHN0cmluZyBpcyBpbnNlcnRlZC4KKworICAgICAgIElmIGEgY2hhcmFjdGVyIGluIDxFTT53c3RyPC9FTT4gaXMgYSB0YWIsIG5ld2xpbmUsIGNhcnJpYWdlICByZXR1cm4KKyAgICAgICBvciBiYWNrc3BhY2UsIHRoZSBjdXJzb3IgaXMgbW92ZWQgYXBwcm9wcmlhdGVseSB3aXRoaW4gdGhlCisgICAgICAgd2luZG93LiAgQSBuZXdsaW5lIGFsc28gZG9lcyAgYSAgPFNUUk9ORz5jbHJ0b2VvbDwvU1RST05HPiAgYmVmb3JlICBtb3ZpbmcuCisgICAgICAgVGFicyAgYXJlICBjb25zaWRlcmVkICB0byBiZSBhdCBldmVyeSBlaWdodGggY29sdW1uLiAgSWYgYQorICAgICAgIGNoYXJhY3RlciBpbiA8RU0+d3N0cjwvRU0+IGlzICBhbm90aGVyICBjb250cm9sICBjaGFyYWN0ZXIsICBpdCAgaXMKKyAgICAgICBkcmF3biAgaW4gdGhlIDxTVFJPTkc+XjwvU1RST05HPjxFTT5YPC9FTT4gbm90YXRpb24uICBDYWxsaW5nIDxTVFJPTkc+d2luX3djaDwvU1RST05HPiBhZnRlciBhZGRpbmcgYQorICAgICAgIGNvbnRyb2wgY2hhcmFjdGVyIChhbmQgbW92aW5nIHRvIGl0LCAgaWYgIG5lY2Vzc2FyeSkgIGRvZXMKKyAgICAgICBub3QgIHJldHVybiAgdGhlICBjb250cm9sIGNoYXJhY3RlciwgYnV0IGluc3RlYWQgcmV0dXJucyBhCisgICAgICAgY2hhcmFjdGVyIGluIHRoZSBeLXJlcHJlc2VudGF0aW9uIG9mIHRoZSAgY29udHJvbCAgY2hhcmFjLQorICAgICAgIHRlci4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgYWxsIGJ1dCB3aW5zX253c3RyIG1heSBiZSBtYWNyb3MuCisKKyAgICAgICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXMgYSBub25zcGFjaW5nIGNoYXItCisgICAgICAgYWN0ZXIsIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGZhaWwuICAgWFNJICBkb2VzICBub3QgIGRlZmluZQorICAgICAgIHdoYXQgIHdpbGwgaGFwcGVuIGlmIGEgbm9uc3BhY2luZyBjaGFyYWN0ZXIgZm9sbG93cyBhIGNvbi0KKyAgICAgICB0cm9sIGNoYXJhY3Rlci4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCAgdGhlc2UgIGZ1bmN0aW9ucyAgcmV0dXJuICBPSy4KKyAgICAgICBPdGhlcndpc2UsIHRoZXkgcmV0dXJuIEVSUi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyKDN4KTwvQT48L1NUUk9ORz4sICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3djaC4zeC5odG1sIj5jdXJzX2luc193Y2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd3N0ci4zeC5odG1sIj5jdXJzX2luc193c3RyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfaW5zY2guM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmZTBhYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luc2NoLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19pbnNjaC4zeCx2IDEuMTAgMjAwNi8xMi8wMiAxNzowMTo1MCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luc2NoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19pbnNjaCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc2NoLjN4Lmh0bWwiPmN1cnNfaW5zY2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5zY2g8L1NUUk9ORz4sICA8U1RST05HPndpbnNjaDwvU1RST05HPiwgIDxTVFJPTkc+bXZpbnNjaDwvU1RST05HPiwgIDxTVFJPTkc+bXZ3aW5zY2g8L1NUUk9ORz4gIC0gIGluc2VydCBhIGNoYXJhY3RlcgorICAgICAgIGJlZm9yZSBjdXJzb3IgaW4gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5pbnNjaChjaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53aW5zY2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmluc2NoKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndpbnNjaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgaW5zZXJ0IHRoZSBjaGFyYWN0ZXIgPEVNPmNoPC9FTT4gYmVmb3JlIHRoZSAgY2hhcmFjLQorICAgICAgIHRlciAgdW5kZXIgdGhlIGN1cnNvci4gIEFsbCBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUKKyAgICAgICBjdXJzb3IgYXJlIG1vdmVkIG9uZSBzcGFjZSB0byB0aGUgcmlnaHQsIHdpdGggIHRoZSAgcG9zc2ktCisgICAgICAgYmlsaXR5ICBvZiB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlciBvbiB0aGUgbGluZSBiZWluZyBsb3N0LgorICAgICAgIFRoZSBpbnNlcnRpb24gb3BlcmF0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgIGN1cnNvciAgcG9zaS0KKyAgICAgICB0aW9uLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgIHJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbC0KKyAgICAgICB1cmUgYW5kIE9LIChTVnI0IHNwZWNpZmllcyBvbmx5ICJhbiAgaW50ZWdlciAgdmFsdWUgIG90aGVyCisgICAgICAgdGhhbiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSAgdXBvbiAgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlCisgICAgICAgbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBkbyBub3QgbmVjZXNzYXJpbHkgaW1wbHkgdXNlIG9mIGEgIGhhcmR3YXJlCisgICAgICAgaW5zZXJ0IGNoYXJhY3RlciBmZWF0dXJlLgorCisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+aW5zY2g8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbnNjaDwvU1RST05HPiwgYW5kIDxTVFJPTkc+bXZ3aW5zY2g8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBDb21wYXJhYmxlICBmdW5jdGlvbnMgIGluICB0aGUgIHdpZGUtY2hhcmFjdGVyICAobmN1cnNlc3cpCisgICAgICAgbGlicmFyeSBhcmUgZGVzY3JpYmVkIGluIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd2NoLjN4Lmh0bWwiPmN1cnNfaW5zX3djaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc2NoLjN4Lmh0bWwiPmN1cnNfaW5zY2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbnNzdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luc3N0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNDM5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbnNzdHIuM3guaHRtbApAQCAtMCwwICsxLDEyNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX2luc3N0ci4zeCx2IDEuMTggMjAwNi8xMi8yNCAxNDo1OTozMCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2luc3N0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5zc3RyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluc3N0cjwvU1RST05HPiwgIDxTVFJPTkc+aW5zbnN0cjwvU1RST05HPiwgIDxTVFJPTkc+d2luc3N0cjwvU1RST05HPiwgPFNUUk9ORz53aW5zbnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmluc3N0cjwvU1RST05HPiwgPFNUUk9ORz5tdmluc25zdHI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5tdndpbnNzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW5zbnN0cjwvU1RST05HPiAtIGluc2VydCBzdHJpbmcgYmVmb3JlIGN1cnNvciAgaW4gIGEKKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5zc3RyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5zbnN0cihjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luc3N0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luc25zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbnNzdHIoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbnNuc3RyKGludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5zc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5zbnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzIGluc2VydCBhIGNoYXJhY3RlciBzdHJpbmcgKGFzIG1hbnkgY2hhcmFjLQorICAgICAgIHRlcnMgYXMgd2lsbCBmaXQgb24gdGhlIGxpbmUpIGJlZm9yZSB0aGUgIGNoYXJhY3RlciAgdW5kZXIKKyAgICAgICB0aGUgY3Vyc29yLiAgQWxsIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IgYXJlCisgICAgICAgc2hpZnRlZCByaWdodCB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgcmlnaHRtb3N0ICBjaGFyLQorICAgICAgIGFjdGVycyAgb24gIHRoZSBsaW5lIGJlaW5nIGxvc3QuICBUaGUgY3Vyc29yIHBvc2l0aW9uIGRvZXMKKyAgICAgICBub3QgY2hhbmdlIChhZnRlciBtb3ZpbmcgdG8gIDxFTT55PC9FTT4sICA8RU0+eDwvRU0+LCAgaWYgIHNwZWNpZmllZCkuICAgVGhlCisgICAgICAgZnVuY3Rpb25zICB3aXRoICA8RU0+bjwvRU0+ICBhcyAgdGhlIGxhc3QgYXJndW1lbnQgaW5zZXJ0IGEgbGVhZGluZworICAgICAgIHN1YnN0cmluZyBvZiBhdCBtb3N0IDxFTT5uPC9FTT4gIGNoYXJhY3RlcnMuICAgSWYgIDxFTT5uPC9FTT4mbHQ7PTAsICB0aGVuICB0aGUKKyAgICAgICBlbnRpcmUgc3RyaW5nIGlzIGluc2VydGVkLgorCisgICAgICAgU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIGFzIGluIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCAgcm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsLQorICAgICAgIHVyZSBhbmQgT0sgKFNWcjQgc3BlY2lmaWVzIG9ubHkgImFuICBpbnRlZ2VyICB2YWx1ZSAgb3RoZXIKKyAgICAgICB0aGFuICA8U1RST05HPkVSUjwvU1RST05HPiIpICB1cG9uICBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2UKKyAgICAgICBub3RlZCBpbiB0aGUgcHJlY2VkaW5nIHJvdXRpbmUgZGVzY3JpcHRpb25zLgorCisgICAgICAgWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4gIEluICB0aGlzICBpbXBsZW1lbnRhLQorICAgICAgIHRpb24sIGlmIHRoZSB3aW5kb3cgcGFyYW1ldGVyIGlzIG51bGwgb3IgdGhlIHN0ciBwYXJhbWV0ZXIKKyAgICAgICBpcyBudWxsLCBhbiBlcnJvciBpcyByZXR1cm5lZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgYWxsIGJ1dCA8U1RST05HPndpbnNuc3RyPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgIHN0YW5kYXJkLAorICAgICAgIElzc3VlIDQsIHdoaWNoIGFkZHMgY29uc3QgcXVhbGlmaWVycyB0byB0aGUgYXJndW1lbnRzLgorCisgICAgICAgVGhlICBTaW5nbGUgIFVuaXggIFNwZWNpZmljYXRpb24sICBWZXJzaW9uICAyICBzdGF0ZXMgdGhhdAorICAgICAgIDxTVFJPTkc+aW5zbnN0cjwvU1RST05HPiBhbmQgPFNUUk9ORz53aW5zbnN0cjwvU1RST05HPiBwZXJmb3JtIHdyYXBwaW5nLiAgVGhpcyAgaXMgIHByb2JhYmx5CisgICAgICAgYW4gZXJyb3IsIHNpbmNlIGl0IG1ha2VzIHRoaXMgZ3JvdXAgb2YgZnVuY3Rpb25zIGluY29uc2lzLQorICAgICAgIHRlbnQuICBBbHNvLCBubyBpbXBsZW1lbnRhdGlvbiBvZiAgY3Vyc2VzICBkb2N1bWVudHMgIHRoaXMKKyAgICAgICBpbmNvbnNpc3RlbmN5LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2luc3RyLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbnN0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YWUzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19pbnN0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW5zdHIuM3gsdiAxLjEzIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19pbnN0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfaW5zdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluc3RyPC9TVFJPTkc+LCAgPFNUUk9ORz5pbm5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2luc3RyPC9TVFJPTkc+LCA8U1RST05HPndpbm5zdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdmlubnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbi08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnN0cjwvU1RST05HPiwgPFNUUk9ORz5tdndpbm5zdHI8L1NUUk9ORz4gLSBnZXQgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBmcm9tIGEgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+CisgICAgICAgd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5zdHIoY2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aW5uc3RyKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2luc3RyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2lubnN0cihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbnN0cihpbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZpbm5zdHIoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZ3aW5zdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzdHIpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+ICA8U1RST05HPm12d2lubnN0cihXSU5ET1c8L1NUUk9ORz4gIDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+bik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuICBhICBzdHJpbmcgIG9mICBjaGFyYWN0ZXJzICBpbiAgPEVNPnN0cjwvRU0+LAorICAgICAgIGV4dHJhY3RlZCAgc3RhcnRpbmcgIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUKKyAgICAgICBuYW1lZCB3aW5kb3cuICBBdHRyaWJ1dGVzIGFyZSBzdHJpcHBlZCAgZnJvbSAgdGhlICBjaGFyYWMtCisgICAgICAgdGVycy4gICBUaGUgIGZvdXIgIGZ1bmN0aW9ucyAgd2l0aCAgPEVNPm48L0VNPiBhcyB0aGUgbGFzdCBhcmd1bWVudAorICAgICAgIHJldHVybiBhIGxlYWRpbmcgIHN1YnN0cmluZyAgYXQgIG1vc3QgIDxFTT5uPC9FTT4gIGNoYXJhY3RlcnMgIGxvbmcKKyAgICAgICAoZXhjbHVzaXZlIG9mIHRoZSB0cmFpbGluZyBOVUwpLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBBbGwgIG9mIHRoZSBmdW5jdGlvbnMgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSwgb3IgdGhlIG51bS0KKyAgICAgICBiZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSByZWFkIGludG8gdGhlIHN0cmluZy4KKworICAgICAgIFgvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiAgdGhpcyAgaW1wbGVtZW50YS0KKyAgICAgICB0aW9uLCBpZiB0aGUgd2luZG93IHBhcmFtZXRlciBpcyBudWxsIG9yIHRoZSBzdHIgcGFyYW1ldGVyCisgICAgICAgaXMgbnVsbCwgYSB6ZXJvIGlzIHJldHVybmVkLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0IDxTVFJPTkc+d2lubnN0cjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFNWcjQgZG9lcyBub3QgZG9jdW1lbnQgd2hldGhlciBhIGxlbmd0aCBsaW1pdCBpbmNsdWRlcyAgb3IKKyAgICAgICBleGNsdWRlcyB0aGUgdHJhaWxpbmcgTlVMLgorCisgICAgICAgVGhlICBuY3Vyc2VzIGxpYnJhcnkgZXh0ZW5kcyB0aGUgWFNJIGRlc2NyaXB0aW9uIGJ5IGFsbG93LQorICAgICAgIGluZyBhIG5lZ2F0aXZlIHZhbHVlIGZvciA8RU0+bjwvRU0+LiAgSW4gdGhpcyBjYXNlLCAgdGhlICBmdW5jdGlvbnMKKyAgICAgICByZXR1cm4gdGhlIHN0cmluZyBlbmRpbmcgYXQgdGhlIHJpZ2h0IG1hcmdpbi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2lud3N0ci4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfaW53c3RyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlMTNiMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX2lud3N0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTExIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfaW53c3RyLjN4LHYgMS41IDIwMDYvMDIvMjUgMjE6MjA6MjAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19pbndzdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX2lud3N0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbndzdHI8L1NUUk9ORz4sICA8U1RST05HPmlubndzdHI8L1NUUk9ORz4sICA8U1RST05HPndpbndzdHI8L1NUUk9ORz4sIDxTVFJPTkc+d2lubndzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbndzdHI8L1NUUk9ORz4sIDxTVFJPTkc+bXZpbm53c3RyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+bXZ3aW53c3RyPC9TVFJPTkc+LCA8U1RST05HPm12d2lubndzdHI8L1NUUk9ORz4gLSBnZXQgYSBzdHJpbmcgb2YgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IGNoYXJhY3RlcnMKKyAgICAgICBmcm9tIGEgY3Vyc2VzIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmlud3N0cih3Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmlubndzdHIod2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm48L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndpbndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d2lubndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmlud3N0cihpbnQ8L1NUUk9ORz4gPEVNPnk8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmlubndzdHIoaW50PC9TVFJPTkc+IDxFTT55PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPng8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndpbndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d2lubndzdHIoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT53aW48L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+eTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT54PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5zdHI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+bjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgcmV0dXJuICBhIHN0cmluZyBvZiA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4gY2hhcmFjdGVycyBpbgorICAgICAgIDxFTT53c3RyPC9FTT4sIGV4dHJhY3RlZCBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4KKyAgICAgICB0aGUgIG5hbWVkIHdpbmRvdy4gIEF0dHJpYnV0ZXMgYXJlIHN0cmlwcGVkIGZyb20gdGhlIGNoYXItCisgICAgICAgYWN0ZXJzLiAgVGhlIGZvdXIgZnVuY3Rpb25zIHdpdGggPEVNPm48L0VNPiBhcyAgdGhlICBsYXN0ICBhcmd1bWVudAorICAgICAgIHJldHVybiBhIGxlYWRpbmcgc3Vic3RyaW5nIGF0IG1vc3QgPEVNPm48L0VNPiBieXRlcyBsb25nIChleGNsdXNpdmUKKyAgICAgICBvZiB0aGUgdHJhaWxpbmcgTlVMKS4gIFRyYW5zZmVyIHN0b3BzIGF0IHRoZSAgZW5kICBvZiAgdGhlCisgICAgICAgY3VycmVudCAgbGluZSwgIG9yICB3aGVuICA8RU0+bjwvRU0+ICBieXRlcyBoYXZlIGJlZW4gc3RvcmVkIGF0IHRoZQorICAgICAgIGxvY2F0aW9uIHJlZmVyZW5jZWQgYnkgPEVNPndzdHI8L0VNPi4KKworICAgICAgIElmIHRoZSBzaXplIDxFTT5uPC9FTT4gaXMgbm90IGxhcmdlICBlbm91Z2ggIHRvICBzdG9yZSAgYSAgY29tcGxldGUKKyAgICAgICBjaGFyYWN0ZXIsIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdCA8U1RST05HPndpbm53c3RyPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBBbGwgcm91dGluZXMgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZS4gVXBvbiBzdWNjZXNzZnVsIGNvbS0KKyAgICAgICBwbGV0aW9uLCB0aGUgKjxTVFJPTkc+aW53c3RyPC9TVFJPTkc+IHJvdXRpbmVzIHJldHVybiA8U1RST05HPk9LPC9TVFJPTkc+LCBhbmQgdGhlICAqPFNUUk9ORz5pbm53c3RyPC9TVFJPTkc+CisgICAgICAgcm91dGluZXMgIHJldHVybiAgdGhlICBudW1iZXIgIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHRoZQorICAgICAgIHN0cmluZy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW53c3RyLjN4Lmh0bWwiPmN1cnNfaW53c3RyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19rZXJuZWwuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWY0MWQzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfa2VybmVsLjN4Lmh0bWwKQEAgLTAsMCArMSwyMDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfa2VybmVsLjN4LHYgMS4xNSAyMDA1LzA1LzE1IDE2OjE4OjEzIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfa2VybmVsIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19rZXJuZWwgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+ZGVmX3Byb2dfbW9kZTwvU1RST05HPiwgPFNUUk9ORz5kZWZfc2hlbGxfbW9kZTwvU1RST05HPiwgPFNUUk9ORz5yZXNldF9wcm9nX21vZGU8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5yZXNldF9zaGVsbF9tb2RlPC9TVFJPTkc+LCA8U1RST05HPnJlc2V0dHk8L1NUUk9ORz4sIDxTVFJPTkc+c2F2ZXR0eTwvU1RST05HPiwgPFNUUk9ORz5nZXRzeXg8L1NUUk9ORz4sIDxTVFJPTkc+c2V0c3l4PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+cmlwb2ZmbGluZTwvU1RST05HPiwgPFNUUk9ORz5jdXJzX3NldDwvU1RST05HPiwgPFNUUk9ORz5uYXBtczwvU1RST05HPiAtIGxvdy1sZXZlbCA8U1RST05HPmN1cnNlczwvU1RST05HPiByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRlZl9wcm9nX21vZGUodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kZWZfc2hlbGxfbW9kZSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJlc2V0X3Byb2dfbW9kZSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJlc2V0X3NoZWxsX21vZGUodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yZXNldHR5KHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2F2ZXR0eSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRzeXgoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5zZXRzeXgoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJpcG9mZmxpbmUoaW50PC9TVFJPTkc+IDxTVFJPTkc+bGluZSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4oKmluaXQpKFdJTkRPVzwvU1RST05HPiA8U1RST05HPiosPC9TVFJPTkc+IDxTVFJPTkc+aW50KSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jdXJzX3NldChpbnQ8L1NUUk9ORz4gPFNUUk9ORz52aXNpYmlsaXR5KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5hcG1zKGludDwvU1RST05HPiA8U1RST05HPm1zKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZvbGxvd2luZyAgcm91dGluZXMgIGdpdmUgbG93LWxldmVsIGFjY2VzcyB0byB2YXJpb3VzCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gY2FwYWJpbGl0aWVzLiAgVGhlc2VzIHJvdXRpbmVzIHR5cGljYWxseSAgYXJlICB1c2VkCisgICAgICAgaW5zaWRlIGxpYnJhcnkgcm91dGluZXMuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+ZGVmX3Byb2dfbW9kZTwvU1RST05HPiAgYW5kICA8U1RST05HPmRlZl9zaGVsbF9tb2RlPC9TVFJPTkc+ICByb3V0aW5lcyBzYXZlIHRoZQorICAgICAgIGN1cnJlbnQgdGVybWluYWwgbW9kZXMgYXMgdGhlICAicHJvZ3JhbSIgIChpbiAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4pICBvcgorICAgICAgICJzaGVsbCIgICAobm90ICBpbiAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4pICBzdGF0ZSAgZm9yICB1c2UgIGJ5ICB0aGUgIDxTVFJPTkc+cmUtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zZXRfcHJvZ19tb2RlPC9TVFJPTkc+IGFuZCA8U1RST05HPnJlc2V0X3NoZWxsX21vZGU8L1NUUk9ORz4gcm91dGluZXMuICBUaGlzIGlzIGRvbmUKKyAgICAgICBhdXRvbWF0aWNhbGx5IGJ5IDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPi4gIFRoZXJlIGlzIG9uZSBzdWNoIHNhdmUgYXJlYSBmb3IKKyAgICAgICBlYWNoIHNjcmVlbiBjb250ZXh0IGFsbG9jYXRlZCBieSA8U1RST05HPm5ld3Rlcm0oKTwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPnJlc2V0X3Byb2dfbW9kZTwvU1RST05HPiBhbmQgPFNUUk9ORz5yZXNldF9zaGVsbF9tb2RlPC9TVFJPTkc+IHJvdXRpbmVzICByZXN0b3JlCisgICAgICAgdGhlICB0ZXJtaW5hbCAgdG8gInByb2dyYW0iIChpbiA8U1RST05HPmN1cnNlczwvU1RST05HPikgb3IgInNoZWxsIiAob3V0IG9mCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4pIHN0YXRlLiAgVGhlc2UgYXJlICBkb25lICBhdXRvbWF0aWNhbGx5ICBieSAgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4KKyAgICAgICBhbmQsICBhZnRlciAgYW4gIDxTVFJPTkc+ZW5kd2luPC9TVFJPTkc+LCBieSA8U1RST05HPmRvdXBkYXRlPC9TVFJPTkc+LCBzbyB0aGV5IG5vcm1hbGx5IGFyZQorICAgICAgIG5vdCBjYWxsZWQuCisKKyAgICAgICBUaGUgPFNUUk9ORz5yZXNldHR5PC9TVFJPTkc+IGFuZCA8U1RST05HPnNhdmV0dHk8L1NUUk9ORz4gIHJvdXRpbmVzICBzYXZlICBhbmQgIHJlc3RvcmUgIHRoZQorICAgICAgIHN0YXRlICBvZiAgdGhlICB0ZXJtaW5hbCBtb2Rlcy4gIDxTVFJPTkc+c2F2ZXR0eTwvU1RST05HPiBzYXZlcyB0aGUgY3VycmVudAorICAgICAgIHN0YXRlIGluIGEgYnVmZmVyIGFuZCA8U1RST05HPnJlc2V0dHk8L1NUUk9ORz4gcmVzdG9yZXMgdGhlIHN0YXRlICB0byAgd2hhdAorICAgICAgIGl0IHdhcyBhdCB0aGUgbGFzdCBjYWxsIHRvIDxTVFJPTkc+c2F2ZXR0eTwvU1RST05HPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5nZXRzeXg8L1NUUk9ORz4gcm91dGluZSByZXR1cm5zIHRoZSBjdXJyZW50IGNvb3JkaW5hdGVzIG9mIHRoZQorICAgICAgIHZpcnR1YWwgc2NyZWVuIGN1cnNvciBpbiA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+LiAgSWYgPFNUUk9ORz5sZWF2ZW9rPC9TVFJPTkc+IGlzIGN1cnJlbnRseQorICAgICAgIDxTVFJPTkc+VFJVRTwvU1RST05HPiwgIHRoZW4gPFNUUk9ORz4tMTwvU1RST05HPiw8U1RST05HPi0xPC9TVFJPTkc+IGlzIHJldHVybmVkLiAgSWYgbGluZXMgaGF2ZSBiZWVuIHJlbW92ZWQKKyAgICAgICBmcm9tIHRoZSB0b3Agb2YgdGhlIHNjcmVlbiwgdXNpbmcgPFNUUk9ORz5yaXBvZmZsaW5lPC9TVFJPTkc+LCA8RU0+eTwvRU0+IGFuZCA8RU0+eDwvRU0+ICBpbi0KKyAgICAgICBjbHVkZSAgdGhlc2UgbGluZXM7IHRoZXJlZm9yZSwgPEVNPnk8L0VNPiBhbmQgPEVNPng8L0VNPiBzaG91bGQgYmUgdXNlZCBvbmx5CisgICAgICAgYXMgYXJndW1lbnRzIGZvciA8U1RST05HPnNldHN5eDwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPnNldHN5eDwvU1RST05HPiByb3V0aW5lIHNldHMgdGhlIHZpcnR1YWwgc2NyZWVuIGN1cnNvciB0byA8RU0+eTwvRU0+LCA8RU0+eDwvRU0+LgorICAgICAgIElmIDxFTT55PC9FTT4gYW5kIDxFTT54PC9FTT4gYXJlIGJvdGggPFNUUk9ORz4tMTwvU1RST05HPiwgdGhlbiA8U1RST05HPmxlYXZlb2s8L1NUUk9ORz4gaXMgc2V0LiAgVGhlIHR3byByb3UtCisgICAgICAgdGluZXMgPFNUUk9ORz5nZXRzeXg8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c2V0c3l4PC9TVFJPTkc+IGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5ICBhICBsaS0KKyAgICAgICBicmFyeSAgcm91dGluZSwgIHdoaWNoIG1hbmlwdWxhdGVzIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvd3MgYnV0IGRvZXMKKyAgICAgICBub3Qgd2FudCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgIHRoZSAgcHJvZ3JhbSdzCisgICAgICAgY3Vyc29yLiAgIFRoZSBsaWJyYXJ5IHJvdXRpbmUgd291bGQgY2FsbCA8U1RST05HPmdldHN5eDwvU1RST05HPiBhdCB0aGUgYmUtCisgICAgICAgZ2lubmluZywgZG8gaXRzIG1hbmlwdWxhdGlvbiBvZiAgaXRzICBvd24gIHdpbmRvd3MsICBkbyAgYQorICAgICAgIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+ICBvbiAgaXRzICB3aW5kb3dzLCBjYWxsIDxTVFJPTkc+c2V0c3l4PC9TVFJPTkc+LCBhbmQgdGhlbiBjYWxsCisgICAgICAgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPnJpcG9mZmxpbmU8L1NUUk9ORz4gcm91dGluZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHNhbWUgZmFjaWxpLQorICAgICAgIHR5ICB0aGF0ICA8U1RST05HPnNsa19pbml0PC9TVFJPTkc+ICBbc2VlICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz5dIHVzZXMgdG8gcmVkdWNlIHRoZQorICAgICAgIHNpemUgb2YgdGhlIHNjcmVlbi4gICA8U1RST05HPnJpcG9mZmxpbmU8L1NUUk9ORz4gIG11c3QgIGJlICBjYWxsZWQgIGJlZm9yZQorICAgICAgIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiBvciA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4gaXMgY2FsbGVkLiAgSWYgPEVNPmxpbmU8L0VNPiBpcyBwb3NpdGl2ZSwgYSBsaW5lCisgICAgICAgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0b3Agb2YgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz47IGlmIDxFTT5saW5lPC9FTT4gaXMgbmVnYXRpdmUsICBhCisgICAgICAgbGluZSBpcyByZW1vdmVkIGZyb20gdGhlIGJvdHRvbS4gIFdoZW4gdGhpcyBpcyBkb25lIGluc2lkZQorICAgICAgIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiwgdGhlIHJvdXRpbmUgPFNUUk9ORz5pbml0PC9TVFJPTkc+IChzdXBwbGllZCBieSB0aGUgdXNlcikgaXMgY2FsbGVkCisgICAgICAgd2l0aCAgdHdvIGFyZ3VtZW50czogYSB3aW5kb3cgcG9pbnRlciB0byB0aGUgb25lLWxpbmUgd2luLQorICAgICAgIGRvdyB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZCBhbmQgYW4gaW50ZWdlciB3aXRoIHRoZSBudW1iZXIKKyAgICAgICBvZiBjb2x1bW5zIGluIHRoZSB3aW5kb3cuICBJbnNpZGUgdGhpcyBpbml0aWFsaXphdGlvbiByb3UtCisgICAgICAgdGluZSwgdGhlIGludGVnZXIgdmFyaWFibGVzIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5DT0xTPC9TVFJPTkc+ICAoZGVmaW5lZCAgaW4KKyAgICAgICA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4pIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBhY2N1cmF0ZSBhbmQgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPgorICAgICAgIG9yIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4gbXVzdCBub3QgYmUgY2FsbGVkLiAgSXQgaXMgYWxsb3dhYmxlICB0byAgY2FsbAorICAgICAgIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+IGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KKworICAgICAgIDxTVFJPTkc+cmlwb2ZmbGluZTwvU1RST05HPiAgY2FuICBiZSBjYWxsZWQgdXAgdG8gZml2ZSB0aW1lcyBiZWZvcmUgY2FsbGluZworICAgICAgIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiBvciA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5jdXJzX3NldDwvU1RST05HPiByb3V0aW5lIHNldHMgdGhlIGN1cnNvciBzdGF0ZSBpcyBzZXQgIHRvICBpbi0KKyAgICAgICB2aXNpYmxlLCAgbm9ybWFsLCAgb3IgdmVyeSB2aXNpYmxlIGZvciA8U1RST05HPnZpc2liaWxpdHk8L1NUUk9ORz4gZXF1YWwgdG8KKyAgICAgICA8U1RST05HPjA8L1NUUk9ORz4sIDxTVFJPTkc+MTwvU1RST05HPiwgb3IgPFNUUk9ORz4yPC9TVFJPTkc+IHJlc3BlY3RpdmVseS4gIElmICB0aGUgIHRlcm1pbmFsICBzdXBwb3J0cyAgdGhlCisgICAgICAgPEVNPnZpc2liaWxpdHk8L0VNPiAgcmVxdWVzdGVkLCAgdGhlICBwcmV2aW91cyAgPEVNPmN1cnNvcjwvRU0+IHN0YXRlIGlzIHJlLQorICAgICAgIHR1cm5lZDsgb3RoZXJ3aXNlLCA8U1RST05HPkVSUjwvU1RST05HPiBpcyByZXR1cm5lZC4KKworICAgICAgIFRoZSA8U1RST05HPm5hcG1zPC9TVFJPTkc+IHJvdXRpbmUgaXMgdXNlZCB0byBzbGVlcCBmb3IgPEVNPm1zPC9FTT4gbWlsbGlzZWNvbmRzLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgZm9yIDxTVFJPTkc+Y3Vyc19zZXQ8L1NUUk9ORz4sIHRoZXNlIHJvdXRpbmVzIGFsd2F5cyByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+Y3Vyc19zZXQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgcHJldmlvdXMgY3Vyc29yIHN0YXRlLCBvciA8U1RST05HPkVSUjwvU1RST05HPiBpZiAgdGhlCisgICAgICAgcmVxdWVzdGVkIDxFTT52aXNpYmlsaXR5PC9FTT4gaXMgbm90IHN1cHBvcnRlZC4KKworICAgICAgIFgvT3BlbiAgZGVmaW5lcyAgbm8gZXJyb3IgY29uZGl0aW9ucy4gIEluIHRoaXMgaW1wbGVtZW50YS0KKyAgICAgICB0aW9uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5kZWZfcHJvZ19tb2RlPC9TVFJPTkc+LCA8U1RST05HPmRlZl9zaGVsbF9tb2RlPC9TVFJPTkc+LCA8U1RST05HPnJlc2V0X3Byb2dfbW9kZTwvU1RST05HPiwgPFNUUk9ORz5yZS08L1NUUk9ORz4KKyAgICAgICAgICAgICAgPFNUUk9ORz5zZXRfc2hlbGxfbW9kZTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybiBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgd2FzICBub3QgIGluaS0KKyAgICAgICAgICAgICAgICAgICB0aWFsaXplZCwgIG9yICBpZiAgdGhlICBJL08gY2FsbCB0byBvYnRhaW4gdGhlCisgICAgICAgICAgICAgICAgICAgdGVybWluYWwgc2V0dGluZ3MgZmFpbHMuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5yaXBvZmZsaW5lPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciAgaWYgIHRoZSAgbWF4aW11bSAgbnVtYmVyICBvZgorICAgICAgICAgICAgICAgICAgIHJpcHBlZC1vZmYgIGxpbmVzIGV4Y2VlZHMgdGhlIG1heGltdW0gKE5SSVBTID0KKyAgICAgICAgICAgICAgICAgICA1KS4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5nZXRzeXg8L1NUUk9ORz4gaXMgYSBtYWNybywgc28gPFNUUk9ORz4mYW1wOzwvU1RST05HPiBpcyBub3QgbmVjZXNzYXJ5ICBiZWZvcmUKKyAgICAgICB0aGUgdmFyaWFibGVzIDxFTT55PC9FTT4gYW5kIDxFTT54PC9FTT4uCisKKyAgICAgICBPbGRlciAgU1ZyNCAgbWFuICBwYWdlcyAgd2FybiAgdGhhdCAgdGhlICByZXR1cm4gIHZhbHVlIG9mCisgICAgICAgPFNUUk9ORz5jdXJzX3NldDwvU1RST05HPiAiaXMgY3VycmVudGx5ICBpbmNvcnJlY3QiLiAgIFRoaXMgIGltcGxlbWVudGF0aW9uCisgICAgICAgZ2V0cyAgaXQgIHJpZ2h0LCBidXQgaXQgbWF5IGJlIHVud2lzZSB0byBjb3VudCBvbiB0aGUgY29yLQorICAgICAgIHJlY3RuZXNzIG9mIHRoZSByZXR1cm4gdmFsdWUgYW55d2hlcmUgZWxzZS4KKworICAgICAgIEJvdGggbmN1cnNlcyBhbmQgU1ZyNCB3aWxsICBjYWxsICA8U1RST05HPmN1cnNfc2V0PC9TVFJPTkc+ICBpbiAgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4gIGlmCisgICAgICAgPFNUUk9ORz5jdXJzX3NldDwvU1RST05HPiAgaGFzICBiZWVuICBjYWxsZWQgIHRvIG1ha2UgdGhlIGN1cnNvciBvdGhlciB0aGFuCisgICAgICAgbm9ybWFsLCBpLmUuLCBlaXRoZXIgaW52aXNpYmxlIG9yIHZlcnkgdmlzaWJsZS4gIFRoZXJlICBpcworICAgICAgIG5vICB3YXkgIGZvciBuY3Vyc2VzIHRvIGRldGVybWluZSB0aGUgaW5pdGlhbCBjdXJzb3Igc3RhdGUKKyAgICAgICB0byByZXN0b3JlIHRoYXQuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9ucyA8U1RST05HPnNldHN5eDwvU1RST05HPiBhbmQgPFNUUk9ORz5nZXRzeXg8L1NUUk9ORz4gYXJlIG5vdCBkZXNjcmliZWQgIGluICB0aGUKKyAgICAgICBYU0kgIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIEFsbCBvdGhlciBmdW5jdGlvbnMgYXJlIGFzCisgICAgICAgZGVzY3JpYmVkIGluIFhTSSBDdXJzZXMuCisKKyAgICAgICBUaGUgU1ZyNCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyA8U1RST05HPnNldHN5eDwvU1RST05HPiBhbmQgPFNUUk9ORz5nZXRzeXg8L1NUUk9ORz4gYXMgaGF2LQorICAgICAgIGluZyAgcmV0dXJuICB0eXBlICBpbnQuICBUaGlzICBpcyAgbWlzbGVhZGluZywgYXMgdGhleSBhcmUKKyAgICAgICBtYWNyb3Mgd2l0aCBubyBkb2N1bWVudGVkIHNlbWFudGljcyBmb3IgdGhlIHJldHVybiAgdmFsdWUuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz5jdXJzX3JlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmZyZXNoKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfbGVnYWN5LjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19sZWdhY3kuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWRlNTkwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfbGVnYWN5LjN4Lmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19sZWdhY3kuM3gsdiAxLjEgMjAwNy8wNC8wNyAyMzo1NDoyOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX2xlZ2FjeSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfbGVnYWN5IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbGVnYWN5LjN4Lmh0bWwiPmN1cnNfbGVnYWN5KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmdldGJlZ3g8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0YmVneTwvU1RST05HPiwgPFNUUk9ORz5nZXRjdXJ4PC9TVFJPTkc+LCA8U1RST05HPmdldGN1cnk8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0bWF4eDwvU1RST05HPiwgPFNUUk9ORz5nZXRtYXh5PC9TVFJPTkc+LCA8U1RST05HPmdldC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnBhcng8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0cGFyeTwvU1RST05HPiAtIGdldCA8U1RST05HPmN1cnNlczwvU1RST05HPiBjdXJzb3IgYW5kIHdpbmRvdyBjb29yZGluYXRlcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldGJlZ3goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRiZWd5KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0Y3VyeChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldGN1cnkoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRtYXh4KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Z2V0bWF4eShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmdldHBhcngoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRwYXJ5KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmdldGJlZ3k8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Z2V0YmVneDwvU1RST05HPiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzYW1lIGRhdGEgIGFzCisgICAgICAgPFNUUk9ORz5nZXRiZWd5eDwvU1RST05HPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5nZXRjdXJ5PC9TVFJPTkc+IGFuZCA8U1RST05HPmdldGN1cng8L1NUUk9ORz4gZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZSBkYXRhIGFzCisgICAgICAgPFNUUk9ORz5nZXR5eDwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPmdldG1heHk8L1NUUk9ORz4gYW5kIDxTVFJPTkc+Z2V0bWF4eDwvU1RST05HPiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzYW1lIGRhdGEgIGFzCisgICAgICAgPFNUUk9ORz5nZXRtYXh5eDwvU1RST05HPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5nZXRwYXJ5PC9TVFJPTkc+IGFuZCA8U1RST05HPmdldHBhcng8L1NUUk9ORz4gZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZSBkYXRhIGFzCisgICAgICAgPFNUUk9ORz5nZXRwYXJ5eDwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhbiBpbnRlZ2VyLCBvciBFUlIgIGlmICB0aGUgIHdpbmRvdworICAgICAgIHBhcmFtZXRlciBpcyBudWxsLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIEFsbCAgb2YgIHRoZXNlIGludGVyZmFjZXMgYXJlIHByb3ZpZGVkIGFzIG1hY3JvcyBhbmQgZnVuYy0KKyAgICAgICB0aW9ucy4gIFRoZSBtYWNyb3MgYXJlIHN1cHByZXNzZWQgKGFuZCBvbmx5IHRoZSAgZnVuY3Rpb25zCisgICAgICAgcHJvdmlkZWQpICB3aGVuICA8U1RST05HPk5DVVJTRVNfT1BBUVVFPC9TVFJPTkc+ICBpcyBkZWZpbmVkLiAgVGhlIHN0YW5kYXJkCisgICAgICAgZm9ybXMgc3VjaCBhcyA8U1RST05HPmdldHl4PC9TVFJPTkc+IG11c3QgYmUgaW1wbGVtZW50ZWQgYXMgbWFjcm9zLCBhbmQgKGluCisgICAgICAgdGhpcyBpbXBsZW1lbnRhdGlvbikgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgdGhlIGZ1bmN0aW9ucworICAgICAgIGRlc2NyaWJlZCBoZXJlLCB0byBhdm9pZCByZWxpYW5jZSBvbiBpbnRlcm5hbCAgZGV0YWlscyAgb2YKKyAgICAgICB0aGUgV0lORE9XIHN0cnVjdHVyZS4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtCisgICAgICAgViBpbXBsZW1lbnRhdGlvbnMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX21vdXNlLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19tb3VzZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMDk0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19tb3VzZS4zeC5odG1sCkBAIC0wLDAgKzEsMzA4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX21vdXNlLjN4LHYgMS4zMCAyMDA2LzEyLzMwIDIzOjQzOjM0IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfbW91c2UgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX21vdXNlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5nZXRtb3VzZTwvU1RST05HPiwgPFNUUk9ORz51bmdldG1vdXNlPC9TVFJPTkc+LCA8U1RST05HPm1vdXNlbWFzazwvU1RST05HPiwgPFNUUk9ORz53ZW5jbG9zZTwvU1RST05HPiwgPFNUUk9ORz5tb3VzZV90cmFmbzwvU1RST05HPiwKKyAgICAgICA8U1RST05HPndtb3VzZV90cmFmbzwvU1RST05HPiwgPFNUUk9ORz5tb3VzZWludGVydmFsPC9TVFJPTkc+IC0gbW91c2UgaW50ZXJmYWNlIHRocm91Z2gKKyAgICAgICBjdXJzZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz50eXBlZGVmPC9TVFJPTkc+IDxTVFJPTkc+dW5zaWduZWQ8L1NUUk9ORz4gPFNUUk9ORz5sb25nPC9TVFJPTkc+IDxTVFJPTkc+bW1hc2tfdDs8L1NUUk9ORz4KKworICAgICAgIHR5cGVkZWYgc3RydWN0CisgICAgICAgeworICAgICAgICAgICBzaG9ydCBpZDsgICAgICAgICA8RU0+Lyo8L0VNPiA8RU0+SUQ8L0VNPiA8RU0+dG88L0VNPiA8RU0+ZGlzdGluZ3Vpc2g8L0VNPiA8RU0+bXVsdGlwbGU8L0VNPiA8RU0+ZGV2aWNlczwvRU0+IDxFTT4qLzwvRU0+CisgICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPno7PC9TVFJPTkc+ICAgICAgPEVNPi8qPC9FTT4gPEVNPmV2ZW50PC9FTT4gPEVNPmNvb3JkaW5hdGVzPC9FTT4gPEVNPiovPC9FTT4KKyAgICAgICAgICAgPFNUUk9ORz5tbWFza190PC9TVFJPTkc+IDxTVFJPTkc+YnN0YXRlOzwvU1RST05HPiAgIDxFTT4vKjwvRU0+IDxFTT5idXR0b248L0VNPiA8RU0+c3RhdGU8L0VNPiA8RU0+Yml0czwvRU0+IDxFTT4qLzwvRU0+CisgICAgICAgPFNUUk9ORz59PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5NRVZFTlQ7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5nZXRtb3VzZShNRVZFTlQ8L1NUUk9ORz4gPFNUUk9ORz4qZXZlbnQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dW5nZXRtb3VzZShNRVZFTlQ8L1NUUk9ORz4gPFNUUk9ORz4qZXZlbnQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+bW1hc2tfdDwvU1RST05HPiA8U1RST05HPm1vdXNlbWFzayhtbWFza190PC9TVFJPTkc+IDxTVFJPTkc+bmV3bWFzayw8L1NUUk9ORz4gPFNUUk9ORz5tbWFza190PC9TVFJPTkc+IDxTVFJPTkc+Km9sZG1hc2spOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPndlbmNsb3NlKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz55LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPngpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPm1vdXNlX3RyYWZvKGludCo8L1NUUk9ORz4gPFNUUk9ORz5wWSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQqPC9TVFJPTkc+IDxTVFJPTkc+cFgsPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPnRvX3NjcmVlbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+d21vdXNlX3RyYWZvKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XKjwvU1RST05HPiA8U1RST05HPndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQqPC9TVFJPTkc+IDxTVFJPTkc+cFksPC9TVFJPTkc+IDxTVFJPTkc+aW50KjwvU1RST05HPiA8U1RST05HPnBYLDwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+dG9fc2NyZWVuKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm1vdXNlaW50ZXJ2YWwoaW50PC9TVFJPTkc+IDxTVFJPTkc+ZXJ2YWwpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlICBmdW5jdGlvbnMgcHJvdmlkZSBhbiBpbnRlcmZhY2UgdG8gbW91c2UgZXZlbnRzIGZyb20KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LiAgTW91c2UgZXZlbnRzIGFyZSAgcmVwcmVzZW50ZWQgIGJ5ICA8U1RST05HPktFWV9NT1VTRTwvU1RST05HPgorICAgICAgIHBzZXVkby1rZXkgdmFsdWVzIGluIHRoZSA8U1RST05HPndnZXRjaDwvU1RST05HPiBpbnB1dCBzdHJlYW0uCisKKyAgICAgICBUbyAgbWFrZSBtb3VzZSBldmVudHMgdmlzaWJsZSwgdXNlIHRoZSA8U1RST05HPm1vdXNlbWFzazwvU1RST05HPiBmdW5jdGlvbi4KKyAgICAgICBUaGlzIHdpbGwgc2V0IHRoZSBtb3VzZSBldmVudHMgdG8gIGJlICByZXBvcnRlZC4gICBCeSAgZGUtCisgICAgICAgZmF1bHQsICBubyAgbW91c2UgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuICBUaGUgZnVuY3Rpb24gd2lsbAorICAgICAgIHJldHVybiBhIG1hc2sgdG8gaW5kaWNhdGUgd2hpY2ggIG9mICB0aGUgIHNwZWNpZmllZCAgbW91c2UKKyAgICAgICBldmVudHMgIGNhbiBiZSByZXBvcnRlZDsgb24gY29tcGxldGUgZmFpbHVyZSBpdCByZXR1cm5zIDAuCisgICAgICAgSWYgb2xkbWFzayBpcyBub24tTlVMTCwgdGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgIGluZGljYXRlZAorICAgICAgIGxvY2F0aW9uICB3aXRoICB0aGUgIHByZXZpb3VzICB2YWx1ZSBvZiB0aGUgZ2l2ZW4gd2luZG93J3MKKyAgICAgICBtb3VzZSBldmVudCBtYXNrLgorCisgICAgICAgQXMgYSBzaWRlIGVmZmVjdCwgc2V0dGluZyBhIHplcm8gbW91c2VtYXNrICBtYXkgIHR1cm4gIG9mZgorICAgICAgIHRoZSAgbW91c2UgcG9pbnRlcjsgc2V0dGluZyBhIG5vbnplcm8gbWFzayBtYXkgdHVybiBpdCBvbi4KKyAgICAgICBXaGV0aGVyIHRoaXMgaGFwcGVucyBpcyBkZXZpY2UtZGVwZW5kZW50LgorCisgICAgICAgSGVyZSBhcmUgdGhlIG1vdXNlIGV2ZW50IHR5cGUgbWFza3Mgd2hpY2ggbWF5IGJlIGRlZmluZWQ6CisKKworICAgICAgIDxFTT5OYW1lPC9FTT4gICAgICAgICAgICAgICAgICAgICA8RU0+RGVzY3JpcHRpb248L0VNPgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEJVVFRPTjFfUFJFU1NFRCAgICAgICAgICBtb3VzZSBidXR0b24gMSBkb3duCisgICAgICAgQlVUVE9OMV9SRUxFQVNFRCAgICAgICAgIG1vdXNlIGJ1dHRvbiAxIHVwCisgICAgICAgQlVUVE9OMV9DTElDS0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiAxIGNsaWNrZWQKKyAgICAgICBCVVRUT04xX0RPVUJMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDEgZG91YmxlIGNsaWNrZWQKKyAgICAgICBCVVRUT04xX1RSSVBMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDEgdHJpcGxlIGNsaWNrZWQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCVVRUT04yX1BSRVNTRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDIgZG93bgorICAgICAgIEJVVFRPTjJfUkVMRUFTRUQgICAgICAgICBtb3VzZSBidXR0b24gMiB1cAorICAgICAgIEJVVFRPTjJfQ0xJQ0tFRCAgICAgICAgICBtb3VzZSBidXR0b24gMiBjbGlja2VkCisgICAgICAgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAyIGRvdWJsZSBjbGlja2VkCisgICAgICAgQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAyIHRyaXBsZSBjbGlja2VkCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICBCVVRUT04zX1BSRVNTRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDMgZG93bgorICAgICAgIEJVVFRPTjNfUkVMRUFTRUQgICAgICAgICBtb3VzZSBidXR0b24gMyB1cAorICAgICAgIEJVVFRPTjNfQ0xJQ0tFRCAgICAgICAgICBtb3VzZSBidXR0b24gMyBjbGlja2VkCisgICAgICAgQlVUVE9OM19ET1VCTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAzIGRvdWJsZSBjbGlja2VkCisgICAgICAgQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCAgIG1vdXNlIGJ1dHRvbiAzIHRyaXBsZSBjbGlja2VkCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQlVUVE9ONF9QUkVTU0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiA0IGRvd24KKyAgICAgICBCVVRUT040X1JFTEVBU0VEICAgICAgICAgbW91c2UgYnV0dG9uIDQgdXAKKyAgICAgICBCVVRUT040X0NMSUNLRUQgICAgICAgICAgbW91c2UgYnV0dG9uIDQgY2xpY2tlZAorICAgICAgIEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gNCBkb3VibGUgY2xpY2tlZAorICAgICAgIEJVVFRPTjRfVFJJUExFX0NMSUNLRUQgICBtb3VzZSBidXR0b24gNCB0cmlwbGUgY2xpY2tlZAorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEJVVFRPTjVfUFJFU1NFRCAgICAgICAgICBtb3VzZSBidXR0b24gNSBkb3duCisgICAgICAgQlVUVE9ONV9SRUxFQVNFRCAgICAgICAgIG1vdXNlIGJ1dHRvbiA1IHVwCisgICAgICAgQlVUVE9ONV9DTElDS0VEICAgICAgICAgIG1vdXNlIGJ1dHRvbiA1IGNsaWNrZWQKKyAgICAgICBCVVRUT041X0RPVUJMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDUgZG91YmxlIGNsaWNrZWQKKyAgICAgICBCVVRUT041X1RSSVBMRV9DTElDS0VEICAgbW91c2UgYnV0dG9uIDUgdHJpcGxlIGNsaWNrZWQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBCVVRUT05fU0hJRlQgICAgICAgICAgICAgc2hpZnQgd2FzIGRvd24gZHVyaW5nIGJ1dHRvbiBzdGF0ZSBjaGFuZ2UKKyAgICAgICBCVVRUT05fQ1RSTCAgICAgICAgICAgICAgY29udHJvbCB3YXMgZG93biBkdXJpbmcgYnV0dG9uIHN0YXRlIGNoYW5nZQorICAgICAgIEJVVFRPTl9BTFQgICAgICAgICAgICAgICBhbHQgd2FzIGRvd24gZHVyaW5nIGJ1dHRvbiBzdGF0ZSBjaGFuZ2UKKyAgICAgICBBTExfTU9VU0VfRVZFTlRTICAgICAgICAgcmVwb3J0IGFsbCBidXR0b24gc3RhdGUgY2hhbmdlcworICAgICAgIFJFUE9SVF9NT1VTRV9QT1NJVElPTiAgICByZXBvcnQgbW91c2UgbW92ZW1lbnQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgIE9uY2UgYSBjbGFzcyBvZiBtb3VzZSBldmVudHMgaGF2ZSBiZWVuIG1hZGUgdmlzaWJsZSAgaW4gIGEKKyAgICAgICB3aW5kb3csIGNhbGxpbmcgdGhlIDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+IGZ1bmN0aW9uIG9uIHRoYXQgd2luZG93IG1heSByZS0KKyAgICAgICB0dXJuIDxTVFJPTkc+S0VZX01PVVNFPC9TVFJPTkc+IGFzIGFuIGluZGljYXRvciB0aGF0IGEgbW91c2UgZXZlbnQgaGFzIGJlZW4KKyAgICAgICBxdWV1ZWQuICAgVG8gcmVhZCB0aGUgZXZlbnQgZGF0YSBhbmQgcG9wIHRoZSBldmVudCBvZmYgdGhlCisgICAgICAgcXVldWUsIGNhbGwgPFNUUk9ORz5nZXRtb3VzZTwvU1RST05HPi4gIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gPFNUUk9ORz5PSzwvU1RST05HPiAgaWYgIGEKKyAgICAgICBtb3VzZSAgZXZlbnQgIGlzIGFjdHVhbGx5IHZpc2libGUgaW4gdGhlIGdpdmVuIHdpbmRvdywgPFNUUk9ORz5FUlI8L1NUUk9ORz4KKyAgICAgICBvdGhlcndpc2UuICBXaGVuIDxTVFJPTkc+Z2V0bW91c2U8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPk9LPC9TVFJPTkc+LCB0aGUgIGRhdGEgIGRlcG9zaXRlZAorICAgICAgIGFzICB5ICBhbmQgIHggIGluICB0aGUgZXZlbnQgc3RydWN0dXJlIGNvb3JkaW5hdGVzIHdpbGwgYmUKKyAgICAgICBzY3JlZW4tcmVsYXRpdmUgY2hhcmFjdGVyLWNlbGwgY29vcmRpbmF0ZXMuICBUaGUgIHJldHVybmVkCisgICAgICAgc3RhdGUgIG1hc2sgIHdpbGwgaGF2ZSBleGFjdGx5IG9uZSBiaXQgc2V0IHRvIGluZGljYXRlIHRoZQorICAgICAgIGV2ZW50IHR5cGUuCisKKyAgICAgICBUaGUgPFNUUk9ORz51bmdldG1vdXNlPC9TVFJPTkc+IGZ1bmN0aW9uIGJlaGF2ZXMgIGFuYWxvZ291c2x5ICB0byAgPFNUUk9ORz51bmdldGNoPC9TVFJPTkc+LgorICAgICAgIEl0ICBwdXNoZXMgYSA8U1RST05HPktFWV9NT1VTRTwvU1RST05HPiBldmVudCBvbnRvIHRoZSBpbnB1dCBxdWV1ZSwgYW5kIGFzLQorICAgICAgIHNvY2lhdGVzIHdpdGggdGhhdCBldmVudCB0aGUgZ2l2ZW4gc3RhdGUgZGF0YSBhbmQgIHNjcmVlbi0KKyAgICAgICByZWxhdGl2ZSBjaGFyYWN0ZXItY2VsbCBjb29yZGluYXRlcy4KKworICAgICAgIFRoZSAgPFNUUk9ORz53ZW5jbG9zZTwvU1RST05HPiAgZnVuY3Rpb24gIHRlc3RzICB3aGV0aGVyICBhICBnaXZlbiAgcGFpciBvZgorICAgICAgIHNjcmVlbi1yZWxhdGl2ZSBjaGFyYWN0ZXItY2VsbCBjb29yZGluYXRlcyBpcyBlbmNsb3NlZCAgYnkKKyAgICAgICBhICBnaXZlbiAgd2luZG93LCByZXR1cm5pbmcgVFJVRSBpZiBpdCBpcyBhbmQgRkFMU0Ugb3RoZXItCisgICAgICAgd2lzZS4gIEl0IGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgIHdoYXQgIHN1YnNldCAgb2YgIHRoZQorICAgICAgIHNjcmVlbiB3aW5kb3dzIGVuY2xvc2UgdGhlIGxvY2F0aW9uIG9mIGEgbW91c2UgZXZlbnQuCisKKyAgICAgICBUaGUgPFNUUk9ORz53bW91c2VfdHJhZm88L1NUUk9ORz4gZnVuY3Rpb24gdHJhbnNmb3JtcyBhIGdpdmVuIHBhaXIgb2YgY29vci0KKyAgICAgICBkaW5hdGVzIGZyb20gc3Rkc2NyLXJlbGF0aXZlICBjb29yZGluYXRlcyAgdG8gIGNvb3JkaW5hdGVzCisgICAgICAgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHdpbmRvdyBvciB2aWNlIHZlcnNhLiAgUGxlYXNlIHJlbWVtLQorICAgICAgIGJlciwgdGhhdCBzdGRzY3ItcmVsYXRpdmUgY29vcmRpbmF0ZXMgYXJlIG5vdCBhbHdheXMgaWRlbi0KKyAgICAgICB0aWNhbCAgdG8gd2luZG93LXJlbGF0aXZlIGNvb3JkaW5hdGVzIGR1ZSB0byB0aGUgbWVjaGFuaXNtCisgICAgICAgdG8gcmVzZXJ2ZSBsaW5lcyBvbiB0b3Agb3IgYm90dG9tIG9mIHRoZSBzY3JlZW4gZm9yICBvdGhlcgorICAgICAgIHB1cnBvc2VzIChzZWUgdGhlIDxTVFJPTkc+cmlwb2ZmbGluZSgpPC9TVFJPTkc+IGFuZCA8U1RST05HPnNsa19pbml0PC9TVFJPTkc+IGNhbGxzLCBmb3IgZXgtCisgICAgICAgYW1wbGUpLiAgSWYgdGhlIHBhcmFtZXRlciA8U1RST05HPnRvX3NjcmVlbjwvU1RST05HPiBpcyA8U1RST05HPlRSVUU8L1NUUk9ORz4sIHRoZSAgcG9pbnRlcnMKKyAgICAgICA8U1RST05HPnBZLDwvU1RST05HPiA8U1RST05HPnBYPC9TVFJPTkc+IG11c3QgcmVmZXJlbmNlIHRoZSBjb29yZGluYXRlcyBvZiBhIGxvY2F0aW9uIGluc2lkZQorICAgICAgIHRoZSB3aW5kb3cgPFNUUk9ORz53aW48L1NUUk9ORz4uICBUaGV5IGFyZSBjb252ZXJ0ZWQgdG8gd2luZG93LXJlbGF0aXZlIGNvLQorICAgICAgIG9yZGluYXRlcyAgYW5kIHJldHVybmVkIHRocm91Z2ggdGhlIHBvaW50ZXJzLiAgSWYgdGhlIGNvbi0KKyAgICAgICB2ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLCB0aGUgZnVuY3Rpb24gcmV0dXJucyA8U1RST05HPlRSVUU8L1NUUk9ORz4uICBJZiBvbmUKKyAgICAgICBvZiAgdGhlICBwYXJhbWV0ZXJzIHdhcyBOVUxMIG9yIHRoZSBsb2NhdGlvbiBpcyBub3QgaW5zaWRlCisgICAgICAgdGhlIHdpbmRvdywgPFNUUk9ORz5GQUxTRTwvU1RST05HPiBpcyByZXR1cm5lZC4gIElmIDxTVFJPTkc+dG9fc2NyZWVuPC9TVFJPTkc+IGlzIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4sIHRoZQorICAgICAgIHBvaW50ZXJzICA8U1RST05HPnBZLDwvU1RST05HPiAgPFNUUk9ORz5wWDwvU1RST05HPiAgbXVzdCAgcmVmZXJlbmNlIHdpbmRvdy1yZWxhdGl2ZSBjb29yZGktCisgICAgICAgbmF0ZXMuICBUaGV5IGFyZSBjb252ZXJ0ZWQgdG8gc3Rkc2NyLXJlbGF0aXZlICBjb29yZGluYXRlcworICAgICAgIGlmICB0aGUgIHdpbmRvdyA8U1RST05HPndpbjwvU1RST05HPiBlbmNsb3NlcyB0aGlzIHBvaW50LiAgSW4gdGhpcyBjYXNlIHRoZQorICAgICAgIGZ1bmN0aW9uIHJldHVybnMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+LiAgSWYgb25lIG9mIHRoZSBwYXJhbWV0ZXJzICBpcyAgTlVMTAorICAgICAgIG9yICB0aGUgcG9pbnQgaXMgbm90IGluc2lkZSB0aGUgd2luZG93LCA8U1RST05HPkZBTFNFPC9TVFJPTkc+IGlzIHJldHVybmVkLgorICAgICAgIFBsZWFzZSBub3RpY2UsIHRoYXQgdGhlIHJlZmVyZW5jZWQgIGNvb3JkaW5hdGVzICBhcmUgIG9ubHkKKyAgICAgICByZXBsYWNlZCAgYnkgIHRoZSBjb252ZXJ0ZWQgY29vcmRpbmF0ZXMgaWYgdGhlIHRyYW5zZm9ybWEtCisgICAgICAgdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKworICAgICAgIFRoZSA8U1RST05HPm1vdXNlX3RyYWZvPC9TVFJPTkc+IGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBzYW1lIHRyYW5zbGF0aW9uICBhcworICAgICAgIDxTVFJPTkc+d21vdXNlX3RyYWZvPC9TVFJPTkc+LCB1c2luZyBzdGRzY3IgZm9yIDxTVFJPTkc+d2luPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+bW91c2VpbnRlcnZhbDwvU1RST05HPiBmdW5jdGlvbiBzZXRzIHRoZSBtYXhpbXVtIHRpbWUgKGluIHRob3UtCisgICAgICAgc2FuZHMgb2YgYSBzZWNvbmQpIHRoYXQgY2FuIGVsYXBzZSBiZXR3ZWVuIHByZXNzICBhbmQgIHJlLQorICAgICAgIGxlYXNlICBldmVudHMgIGZvciAgdGhlbSB0byBiZSByZWNvZ25pemVkIGFzIGEgY2xpY2suICBVc2UKKyAgICAgICA8U1RST05HPm1vdXNlaW50ZXJ2YWwoMCk8L1NUUk9ORz4gdG8gZGlzYWJsZSBjbGljayByZXNvbHV0aW9uLiAgVGhpcyAgZnVuYy0KKyAgICAgICB0aW9uIHJldHVybnMgdGhlIHByZXZpb3VzIGludGVydmFsIHZhbHVlLiAgVXNlIDxTVFJPTkc+bW91c2VpbnRlci08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZhbCgtMSk8L1NUUk9ORz4gdG8gb2J0YWluIHRoZSBpbnRlcnZhbCB3aXRob3V0IGFsdGVyaW5nICBpdC4gICBUaGUKKyAgICAgICBkZWZhdWx0IGlzIG9uZSBzaXh0aCBvZiBhIHNlY29uZC4KKworICAgICAgIE5vdGUgIHRoYXQgIG1vdXNlICBldmVudHMgd2lsbCBiZSBpZ25vcmVkIHdoZW4gaW5wdXQgaXMgaW4KKyAgICAgICBjb29rZWQgbW9kZSwgYW5kIHdpbGwgY2F1c2UgYW4gZXJyb3IgYmVlcCB3aGVuIGNvb2tlZCBtb2RlCisgICAgICAgaXMgIGJlaW5nIHNpbXVsYXRlZCBpbiBhIHdpbmRvdyBieSBhIGZ1bmN0aW9uIHN1Y2ggYXMgPFNUUk9ORz5nZXQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zdHI8L1NUUk9ORz4gdGhhdCBleHBlY3RzIGEgbGluZWZlZWQgZm9yIGlucHV0LWxvb3AgdGVybWluYXRpb24uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Z2V0bW91c2U8L1NUUk9ORz4gYW5kIDxTVFJPTkc+dW5nZXRtb3VzZTwvU1RST05HPiByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiAgZmFpbC0KKyAgICAgICB1cmUgb3IgPFNUUk9ORz5PSzwvU1RST05HPiB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgICAgICAgICA8U1RST05HPmdldG1vdXNlPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvci4gIElmIG5vIG1vdXNlIGRyaXZlciB3YXMgaW5pLQorICAgICAgICAgICAgICAgICAgIHRpYWxpemVkLCBvciBpZiB0aGUgbWFzayBwYXJhbWV0ZXIgaXMgemVybywKKworICAgICAgICAgICAgICA8U1RST05HPnVuZ2V0bW91c2U8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBGSUZPIGlzIGZ1bGwuCisKKyAgICAgICA8U1RST05HPm1vdXNlbWFzazwvU1RST05HPiByZXR1cm5zIHRoZSBtYXNrIG9mIHJlcG9ydGFibGUgZXZlbnRzLgorCisgICAgICAgPFNUUk9ORz5tb3VzZWludGVydmFsPC9TVFJPTkc+IHJldHVybnMgdGhlIHByZXZpb3VzIGludGVydmFsIHZhbHVlLCAgdW5sZXNzCisgICAgICAgdGhlICB0ZXJtaW5hbCAgd2FzICBub3QgaW5pdGlhbGl6ZWQuICBJbiB0aGF0IGNhc2UsIGl0IHJlLQorICAgICAgIHR1cm5zIHRoZSBtYXhpbXVtIGludGVydmFsIHZhbHVlICgxNjYpLgorCisgICAgICAgPFNUUk9ORz53ZW5jbG9zZTwvU1RST05HPiBhbmQgPFNUUk9ORz53bW91c2VfdHJhZm88L1NUUk9ORz4gYXJlIGJvb2xlYW4gZnVuY3Rpb25zICByZXR1cm5pbmcKKyAgICAgICA8U1RST05HPlRSVUU8L1NUUk9ORz4gb3IgPFNUUk9ORz5GQUxTRTwvU1RST05HPiBkZXBlbmRpbmcgb24gdGhlaXIgdGVzdCByZXN1bHQuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIGNhbGxzICB3ZXJlICBkZXNpZ25lZCAgZm9yIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIGFuZCBhcmUgbm90CisgICAgICAgZm91bmQgaW4gU1ZyNCBjdXJzZXMsIDQuNEJTRCBjdXJzZXMsIG9yIGFueSBvdGhlciBwcmV2aW91cworICAgICAgIHZlcnNpb24gb2YgY3Vyc2VzLgorCisgICAgICAgVGhlIGZlYXR1cmUgbWFjcm8gPFNUUk9ORz5OQ1VSU0VTX01PVVNFX1ZFUlNJT048L1NUUk9ORz4gaXMgcHJvdmlkZWQgc28gdGhlCisgICAgICAgcHJlcHJvY2Vzc29yIGNhbiBiZSB1c2VkIHRvIHRlc3QgIHdoZXRoZXIgIHRoZXNlICBmZWF0dXJlcworICAgICAgIGFyZSAgcHJlc2VudC4gICBJZiAgdGhlIGludGVyZmFjZSBpcyBjaGFuZ2VkLCB0aGUgdmFsdWUgb2YKKyAgICAgICA8U1RST05HPk5DVVJTRVNfTU9VU0VfVkVSU0lPTjwvU1RST05HPiB3aWxsIGJlIGluY3JlbWVudGVkLiAgIFRoZXNlICB2YWx1ZXMKKyAgICAgICBmb3IgIDxTVFJPTkc+TkNVUlNFU19NT1VTRV9WRVJTSU9OPC9TVFJPTkc+IG1heSBiZSBzcGVjaWZpZWQgd2hlbiBjb25maWd1ci0KKyAgICAgICBpbmcgbmN1cnNlczoKKworICAgICAgICAgICAgICAxICBoYXMgZGVmaW5pdGlvbnMgZm9yIHJlc2VydmVkIGV2ZW50cy4gICBUaGUgIG1hc2sKKyAgICAgICAgICAgICAgICAgdXNlcyAyOCBiaXRzLgorCisgICAgICAgICAgICAgIDIgIGFkZHMgZGVmaW5pdGlvbnMgZm9yIGJ1dHRvbiA1LCByZW1vdmVzIHRoZSBkZWZpLQorICAgICAgICAgICAgICAgICBuaXRpb25zIGZvciByZXNlcnZlZCBldmVudHMuICBUaGUgbWFzayAgdXNlcyAgMjkKKyAgICAgICAgICAgICAgICAgYml0cy4KKworICAgICAgIFRoZSAgb3JkZXIgIG9mIHRoZSA8U1RST05HPk1FVkVOVDwvU1RST05HPiBzdHJ1Y3R1cmUgbWVtYmVycyBpcyBub3QgZ3VhcmFuLQorICAgICAgIHRlZWQuICBBZGRpdGlvbmFsIGZpZWxkcyBtYXkgYmUgYWRkZWQgdG8gdGhlIHN0cnVjdHVyZSAgaW4KKyAgICAgICB0aGUgZnV0dXJlLgorCisgICAgICAgVW5kZXIgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICB0aGVzZSBjYWxscyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgZWktCisgICAgICAgdGhlciB4dGVybSdzIGJ1aWx0LWluIG1vdXNlLXRyYWNraW5nIEFQSSBvciAgcGxhdGZvcm0tc3BlLQorICAgICAgIGNpZmljIGRyaXZlcnMgaW5jbHVkaW5nCisgICAgICAgICAgICAgIEFsZXNzYW5kcm8gUnViaW5pJ3MgZ3BtIHNlcnZlci4KKyAgICAgICAgICAgICAgRnJlZUJTRCBzeXNtb3VzZQorICAgICAgICAgICAgICBPUy8yIEVNWAorICAgICAgIElmICB5b3UgIGFyZSAgdXNpbmcgIGFuICB1bnN1cHBvcnRlZCAgY29uZmlndXJhdGlvbiwgbW91c2UKKyAgICAgICBldmVudHMgd2lsbCBub3QgYmUgdmlzaWJsZSB0byA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+IChhbmQgdGhlICA8U1RST05HPm1vdXNlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+bWFzazwvU1RST05HPiBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gPFNUUk9ORz4wPC9TVFJPTkc+KS4KKworICAgICAgIElmICB0aGUgIHRlcm1pbmZvIGVudHJ5IGNvbnRhaW5zIGEgPFNUUk9ORz5YTTwvU1RST05HPiBzdHJpbmcsIHRoaXMgaXMgdXNlZAorICAgICAgIGluIHRoZSB4dGVybSBtb3VzZSBkcml2ZXIgdG8gY29udHJvbCB0aGUgd2F5IHRoZSAgdGVybWluYWwKKyAgICAgICBpcyBpbml0aWFsaXplZCBmb3IgbW91c2Ugb3BlcmF0aW9uLiAgVGhlIGRlZmF1bHQsIGlmIDxTVFJPTkc+WE08L1NUUk9ORz4gaXMKKyAgICAgICBub3QgZm91bmQsIGNvcnJlc3BvbmRzIHRvIHByaXZhdGUgbW9kZSAxMDAwIG9mIHh0ZXJtOgorICAgICAgICAgICAgICBcRVs/MTAwMCU/JXAxJXsxfSU9JXRoJWVsJTsKKyAgICAgICBUaGUgeiBtZW1iZXIgaW4gdGhlIGV2ZW50IHN0cnVjdHVyZSBpcyBub3QgcHJlc2VudGx5IHVzZWQuCisgICAgICAgSXQgIGlzICBpbnRlbmRlZCAgZm9yIHVzZSB3aXRoIHRvdWNoIHNjcmVlbnMgKHdoaWNoIG1heSBiZQorICAgICAgIHByZXNzdXJlLXNlbnNpdGl2ZSkgICBvciAgIHdpdGggICAzRC1taWNlL3RyYWNrYmFsbHMvcG93ZXIKKyAgICAgICBnbG92ZXMuCisKKworPC9QUkU+Cis8SDI+QlVHUzwvSDI+PFBSRT4KKyAgICAgICBNb3VzZSAgZXZlbnRzIHVuZGVyIHh0ZXJtIHdpbGwgbm90IGluIGZhY3QgYmUgaWdub3JlZCBkdXItCisgICAgICAgaW5nIGNvb2tlZCBtb2RlLCBpZiB0aGV5IGhhdmUgYmVlbiBlbmFibGVkICBieSAgPFNUUk9ORz5tb3VzZW1hc2s8L1NUUk9ORz4uCisgICAgICAgSW5zdGVhZCwgIHRoZSAgeHRlcm0gIG1vdXNlIHJlcG9ydCBzZXF1ZW5jZSB3aWxsIGFwcGVhciBpbgorICAgICAgIHRoZSBzdHJpbmcgcmVhZC4KKworICAgICAgIE1vdXNlIGV2ZW50cyB1bmRlciB4dGVybSB3aWxsIG5vdCBiZSBkZXRlY3RlZCBjb3JyZWN0bHkgaW4KKyAgICAgICBhICB3aW5kb3cgIHdpdGggIGl0cyBrZXlwYWQgYml0IG9mZiwgc2luY2UgdGhleSBhcmUgaW50ZXItCisgICAgICAgcHJldGVkIGFzIGEgdmFyaWV0eSBvZiBmdW5jdGlvbiBrZXkuICAgWW91ciAgdGVybWluZm8gIGRlLQorICAgICAgIHNjcmlwdGlvbiAgc2hvdWxkICBoYXZlIDxTVFJPTkc+a21vdXM8L1NUUk9ORz4gc2V0IHRvICJcRVtNIiAodGhlIGJlZ2lubmluZworICAgICAgIG9mIHRoZSByZXNwb25zZSBmcm9tIHh0ZXJtIGZvciBtb3VzZSBjbGlja3MpLiAgT3RoZXIgIHZhbC0KKyAgICAgICB1ZXMgIGZvciAgPFNUUk9ORz5rbW91czwvU1RST05HPiAgYXJlIHBlcm1pdHRlZCwgYnV0IHVuZGVyIHRoZSBzYW1lIGFzc3VtcC0KKyAgICAgICB0aW9uLCBpLmUuLCBpdCBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXNwb25zZS4KKworICAgICAgIEJlY2F1c2UgdGhlcmUgYXJlICBubyAgc3RhbmRhcmQgIHRlcm1pbmFsICByZXNwb25zZXMgIHRoYXQKKyAgICAgICB3b3VsZCAgc2VydmUgdG8gaWRlbnRpZnkgdGVybWluYWxzIHdoaWNoIHN1cHBvcnQgdGhlIHh0ZXJtCisgICAgICAgbW91c2UgcHJvdG9jb2wsIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBhc3N1bWVzIHRoYXQgaWYgeW91ciAgJFRFUk0gIGVudmktCisgICAgICAgcm9ubWVudCAgdmFyaWFibGUgY29udGFpbnMgInh0ZXJtIiwgb3IgPFNUUk9ORz5rbW91czwvU1RST05HPiBpcyBkZWZpbmVkIGluCisgICAgICAgdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLCB0aGVuIHRoZSB0ZXJtaW5hbCBtYXkgc2VuZCBtb3VzZQorICAgICAgIGV2ZW50cy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19tb3ZlLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19tb3ZlLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjNTJiNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX21vdmUuM3guaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX21vdmUuM3gsdiAxLjEyIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19tb3ZlIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19tb3ZlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdmUuM3guaHRtbCI+Y3Vyc19tb3ZlKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW92ZS4zeC5odG1sIj5jdXJzX21vdmUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bW92ZTwvU1RST05HPiwgPFNUUk9ORz53bW92ZTwvU1RST05HPiAtIG1vdmUgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93IGN1cnNvcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm1vdmUoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndtb3ZlKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgbW92ZSB0aGUgY3Vyc29yIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2luZG93CisgICAgICAgdG8gbGluZSA8RU0+eTwvRU0+IGFuZCBjb2x1bW4gPEVNPng8L0VNPi4gIFRoaXMgcm91dGluZSBkb2VzICBub3QgIG1vdmUgIHRoZQorICAgICAgIHBoeXNpY2FsICBjdXJzb3IgIG9mIHRoZSB0ZXJtaW5hbCB1bnRpbCA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4gaXMgY2FsbGVkLgorICAgICAgIFRoZSBwb3NpdGlvbiBzcGVjaWZpZWQgaXMgcmVsYXRpdmUgdG8gdGhlIHVwcGVyICBsZWZ0LWhhbmQKKyAgICAgICBjb3JuZXIgb2YgdGhlIHdpbmRvdywgd2hpY2ggaXMgKDAsMCkuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIE9LIChTVnI0IHNwZWNpLQorICAgICAgIGZpZXMgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzLQorICAgICAgIGZ1bCBjb21wbGV0aW9uLgorCisgICAgICAgU3BlY2lmaWNhbGx5LCAgdGhleSAgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgcG9pbnRlcgorICAgICAgIGlzIG51bGwsIG9yIGlmIHRoZSBwb3NpdGlvbiBpcyBvdXRzaWRlIHRoZSB3aW5kb3cuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+bW92ZTwvU1RST05HPiBtYXkgYmUgYSBtYWNyby4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQsCisgICAgICAgSXNzdWUgNC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdmUuM3guaHRtbCI+Y3Vyc19tb3ZlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfb3BhcXVlLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19vcGFxdWUuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTBmMWFlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfb3BhcXVlLjN4Lmh0bWwKQEAgLTAsMCArMSwxNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc19vcGFxdWUuM3gsdiAxLjYgMjAwNy8wOS8wOCAxODo0OToxMyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX29wYXF1ZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfb3BhcXVlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmlzX2NsZWFyZWQ8L1NUUk9ORz4sIDxTVFJPTkc+aXNfaWRsb2s8L1NUUk9ORz4sIDxTVFJPTkc+aXNfaWRjb2s8L1NUUk9ORz4sIDxTVFJPTkc+aXNfaW1tZWRvazwvU1RST05HPiwgPFNUUk9ORz5pc19rZXlwYWQ8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5pc19sZWF2ZW9rPC9TVFJPTkc+LCA8U1RST05HPmlzX25vZGVsYXk8L1NUUk9ORz4sIDxTVFJPTkc+aXNfdGltZW91dDwvU1RST05HPiwgPFNUUk9ORz5pc19zY3JvbGxvazwvU1RST05HPiwgPFNUUk9ORz5pc19zeW5jb2s8L1NUUk9ORz4KKyAgICAgICAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvdyBwcm9wZXJ0aWVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX2NsZWFyZWQoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19pZGNvayhjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX2lkbG9rKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aXNfaW1tZWRvayhjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX2tleXBhZChjb25zdDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX2xlYXZlb2soY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19ub2RlbGF5KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aXNfbm90aW1lb3V0KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aXNfc2Nyb2xsb2soY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19zeW5jb2soY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4gPFNUUk9ORz53Z2V0cGFyZW50KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53Z2V0c2NycmVnKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4qdG9wLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPipib3R0b20pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoaXMgIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyB3aGljaCByZXR1cm4gcHJvcC0KKyAgICAgICBlcnRpZXMgc2V0IGluIHRoZSBXSU5ET1cgIHN0cnVjdHVyZSwgIGFsbG93aW5nICBpdCAgdG8gIGJlCisgICAgICAgYGBvcGFxdWUnJyBpZiB0aGUgc3ltYm9sIDxTVFJPTkc+TkNVUlNFU19PUEFRVUU8L1NUUk9ORz4gaXMgZGVmaW5lZDoKKworICAgICAgIDxTVFJPTkc+aXNfY2xlYXJlZDwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIDxTVFJPTkc+Y2xlYXJvazwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pc19pZGNvazwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIDxTVFJPTkc+aWRjb2s8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aXNfaWRsb2s8L1NUUk9ORz4KKyAgICAgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiA8U1RST05HPmlkbG9rPC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmlzX2ltbWVkb2s8L1NUUk9ORz4KKyAgICAgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiA8U1RST05HPmltbWVkb2s8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aXNfa2V5cGFkPC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gPFNUUk9ORz5rZXlwYWQ8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aXNfbGVhdmVvazwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIDxTVFJPTkc+bGVhdmVvazwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pc19ub2RlbGF5PC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gPFNUUk9ORz5ub2RlbGF5PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmlzX25vdGltZW91dDwvU1RST05HPgorICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIDxTVFJPTkc+bm90aW1lb3V0PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmlzX3Njcm9sbG9rPC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gPFNUUk9ORz5zY3JvbGxvazwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pc19zeW5jb2s8L1NUUk9ORz4KKyAgICAgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiA8U1RST05HPnN5bmNvazwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz53Z2V0cGFyZW50PC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zICB0aGUgcGFyZW50IFdJTkRPVyBwb2ludGVyIGZvciBzdWJ3aW5kb3dzLCBvcgorICAgICAgICAgICAgTlVMTCBmb3Igd2luZG93cyBoYXZpbmcgbm8gcGFyZW50LgorCisgICAgICAgPFNUUk9ORz53Z2V0c2NycmVnPC9TVFJPTkc+CisgICAgICAgICAgICByZXR1cm5zIHRoZSB0b3AgYW5kIGJvdHRvbSAgcm93cyAgZm9yICB0aGUgIHNjcm9sbGluZworICAgICAgICAgICAgbWFyZ2luIGFzIHNldCBpbiA8U1RST05HPndzZXRzY3JyZWc8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhbGwgcmV0dXJuIFRSVUUgb3IgRkFMU0UsIGV4Y2VwdCBhcyBub3RlZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBCb3RoIGEgbWFjcm8gYW5kIGEgZnVuY3Rpb24gYXJlIHByb3ZpZGVkIGZvciBlYWNoIG5hbWUuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvICBuY3Vyc2VzLiAgIFRoZXkgIHdlcmUgIG5vdAorICAgICAgIHN1cHBvcnRlZCAgb24gIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiAgbmN1cnNlcyAgZXgtCisgICAgICAgdGVuc2lvbnMgYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPmN1cnNfd2luLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+ZG93KDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX291dG9wdHMuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX291dG9wdHMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGQ0YTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfb3V0b3B0cy4zeC5odG1sCkBAIC0wLDAgKzEsMjMzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfb3V0b3B0cy4zeCx2IDEuMjEgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX291dG9wdHMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX291dG9wdHMgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5jbGVhcm9rPC9TVFJPTkc+LCA8U1RST05HPmlkbG9rPC9TVFJPTkc+LCA8U1RST05HPmlkY29rPC9TVFJPTkc+LCA8U1RST05HPmltbWVkb2s8L1NUUk9ORz4sIDxTVFJPTkc+bGVhdmVvazwvU1RST05HPiwgPFNUUk9ORz5zZXRzY3JyZWc8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz53c2V0c2NycmVnPC9TVFJPTkc+LCA8U1RST05HPnNjcm9sbG9rPC9TVFJPTkc+LCA8U1RST05HPm5sPC9TVFJPTkc+LCA8U1RST05HPm5vbmw8L1NUUk9ORz4gLSA8U1RST05HPmN1cnNlczwvU1RST05HPiBvdXRwdXQgb3B0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNsZWFyb2soV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+aWRsb2soV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPmlkY29rKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5pbW1lZG9rKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmJmKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmxlYXZlb2soV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2V0c2NycmVnKGludDwvU1RST05HPiA8U1RST05HPnRvcCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ib3QpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3NldHNjcnJlZyhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnRvcCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ib3QpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2Nyb2xsb2soV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+YmYpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bmwodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5ub25sKHZvaWQpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHNldCBvcHRpb25zIHRoYXQgY2hhbmdlIHRoZSBzdHlsZSBvZiBvdXRwdXQKKyAgICAgICB3aXRoaW4gIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+LiAgIEFsbCAgb3B0aW9ucyBhcmUgaW5pdGlhbGx5IDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4sIHVubGVzcworICAgICAgIG90aGVyd2lzZSBzdGF0ZWQuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHR1cm4gIHRoZXNlICBvcC0KKyAgICAgICB0aW9ucyBvZmYgYmVmb3JlIGNhbGxpbmcgPFNUUk9ORz5lbmR3aW48L1NUUk9ORz4uCisKKyAgICAgICBJZiAgPFNUUk9ORz5jbGVhcm9rPC9TVFJPTkc+IGlzIGNhbGxlZCB3aXRoIDxTVFJPTkc+VFJVRTwvU1RST05HPiBhcyBhcmd1bWVudCwgdGhlIG5leHQgY2FsbAorICAgICAgIHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gd2l0aCB0aGlzIHdpbmRvdyB3aWxsIGNsZWFyICB0aGUgIHNjcmVlbiAgY29tLQorICAgICAgIHBsZXRlbHkgIGFuZCAgcmVkcmF3IHRoZSBlbnRpcmUgc2NyZWVuIGZyb20gc2NyYXRjaC4gIFRoaXMKKyAgICAgICBpcyB1c2VmdWwgd2hlbiB0aGUgY29udGVudHMgb2YgdGhlIHNjcmVlbiAgYXJlICB1bmNlcnRhaW4sCisgICAgICAgb3IgIGluICBzb21lICBjYXNlcyBmb3IgYSBtb3JlIHBsZWFzaW5nIHZpc3VhbCBlZmZlY3QuICBJZgorICAgICAgIHRoZSA8RU0+d2luPC9FTT4gYXJndW1lbnQgdG8gPFNUUk9ORz5jbGVhcm9rPC9TVFJPTkc+IGlzIHRoZSBnbG9iYWwgdmFyaWFibGUgPFNUUk9ORz5jdXJzY3I8L1NUUk9ORz4sCisgICAgICAgdGhlICBuZXh0ICBjYWxsICB0byAgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiAgd2l0aCAgYW55IHdpbmRvdyBjYXVzZXMgdGhlCisgICAgICAgc2NyZWVuIHRvIGJlIGNsZWFyZWQgYW5kIHJlcGFpbnRlZCBmcm9tIHNjcmF0Y2guCisKKyAgICAgICBJZiA8U1RST05HPmlkbG9rPC9TVFJPTkc+IGlzIGNhbGxlZCB3aXRoIDxTVFJPTkc+VFJVRTwvU1RST05HPiBhcyAgc2Vjb25kICBhcmd1bWVudCwgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+CisgICAgICAgY29uc2lkZXJzIHVzaW5nIHRoZSBoYXJkd2FyZSBpbnNlcnQvZGVsZXRlIGxpbmUgZmVhdHVyZSBvZgorICAgICAgIHRlcm1pbmFscyBzbyBlcXVpcHBlZC4gIENhbGxpbmcgPFNUUk9ORz5pZGxvazwvU1RST05HPiB3aXRoIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4gYXMgc2Vjb25kCisgICAgICAgYXJndW1lbnQgIGRpc2FibGVzICB1c2UgIG9mICBsaW5lICBpbnNlcnRpb24gYW5kIGRlbGV0aW9uLgorICAgICAgIFRoaXMgb3B0aW9uIHNob3VsZCBiZSAgZW5hYmxlZCAgb25seSAgaWYgIHRoZSAgYXBwbGljYXRpb24KKyAgICAgICBuZWVkcyAgaW5zZXJ0L2RlbGV0ZSAgbGluZSwgZm9yIGV4YW1wbGUsIGZvciBhIHNjcmVlbiBlZGktCisgICAgICAgdG9yLiAgSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGluc2VydC9kZWxldGUgbGluZQorICAgICAgIHRlbmRzICB0byAgYmUgIHZpc3VhbGx5IGFubm95aW5nIHdoZW4gdXNlZCBpbiBhcHBsaWNhdGlvbnMKKyAgICAgICB3aGVyZSBpdCBpcyBub3QgcmVhbGx5IG5lZWRlZC4gIElmIGluc2VydC9kZWxldGUgbGluZSBjYW4tCisgICAgICAgbm90ICBiZSAgdXNlZCwgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHJlZHJhd3MgdGhlIGNoYW5nZWQgcG9ydGlvbnMgb2YgYWxsCisgICAgICAgbGluZXMuCisKKyAgICAgICBJZiA8U1RST05HPmlkY29rPC9TVFJPTkc+IGlzIGNhbGxlZCB3aXRoIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4gYXMgc2Vjb25kICBhcmd1bWVudCwgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+CisgICAgICAgbm8gbG9uZ2VyIGNvbnNpZGVycyB1c2luZyB0aGUgaGFyZHdhcmUgaW5zZXJ0L2RlbGV0ZSBjaGFyLQorICAgICAgIGFjdGVyIGZlYXR1cmUgb2YgdGVybWluYWxzIHNvIGVxdWlwcGVkLiAgVXNlIG9mICBjaGFyYWN0ZXIKKyAgICAgICBpbnNlcnQvZGVsZXRlICBpcyAgZW5hYmxlZCBieSBkZWZhdWx0LiAgQ2FsbGluZyA8U1RST05HPmlkY29rPC9TVFJPTkc+IHdpdGgKKyAgICAgICA8U1RST05HPlRSVUU8L1NUUk9ORz4gYXMgc2Vjb25kIGFyZ3VtZW50IHJlLWVuYWJsZXMgdXNlIG9mIGNoYXJhY3RlciBpbnNlci0KKyAgICAgICB0aW9uIGFuZCBkZWxldGlvbi4KKworICAgICAgIElmICA8U1RST05HPmltbWVkb2s8L1NUUk9ORz4gaXMgY2FsbGVkIHdpdGggPFNUUk9ORz5UUlVFPC9TVFJPTkc+IDxTVFJPTkc+YXM8L1NUUk9ORz4gPFNUUk9ORz5hcmd1bWVudDwvU1RST05HPiwgYW55IGNoYW5nZSBpbgorICAgICAgIHRoZSB3aW5kb3cgaW1hZ2UsIHN1Y2ggYXMgdGhlIG9uZXMgY2F1c2VkIGJ5IDxTVFJPTkc+d2FkZGNoLDwvU1RST05HPiA8U1RST05HPndjbHItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz50b2JvdCw8L1NUUk9ORz4gIDxTVFJPTkc+d3Njcmw8L1NUUk9ORz4sICBldGMuLCAgYXV0b21hdGljYWxseSAgY2F1c2UgYSBjYWxsIHRvIDxTVFJPTkc+d3JlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+ZnJlc2g8L1NUUk9ORz4uICBIb3dldmVyLCBpdCBtYXkgZGVncmFkZSBwZXJmb3JtYW5jZSAgY29uc2lkZXJhYmx5LAorICAgICAgIGR1ZSAgdG8gcmVwZWF0ZWQgY2FsbHMgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPi4gIEl0IGlzIGRpc2FibGVkIGJ5IGRlLQorICAgICAgIGZhdWx0LgorCisgICAgICAgTm9ybWFsbHksIHRoZSBoYXJkd2FyZSBjdXJzb3IgaXMgbGVmdCBhdCB0aGUgIGxvY2F0aW9uICBvZgorICAgICAgIHRoZSB3aW5kb3cgY3Vyc29yIGJlaW5nIHJlZnJlc2hlZC4gIFRoZSA8U1RST05HPmxlYXZlb2s8L1NUUk9ORz4gb3B0aW9uIGFsLQorICAgICAgIGxvd3MgdGhlIGN1cnNvciB0byBiZSBsZWZ0IHdoZXJldmVyIHRoZSB1cGRhdGUgaGFwcGVucyAgdG8KKyAgICAgICBsZWF2ZSAgaXQuICBJdCBpcyB1c2VmdWwgZm9yIGFwcGxpY2F0aW9ucyB3aGVyZSB0aGUgY3Vyc29yCisgICAgICAgaXMgbm90IHVzZWQsIHNpbmNlIGl0IHJlZHVjZXMgdGhlIG5lZWQgZm9yIGN1cnNvciBtb3Rpb25zLgorCisgICAgICAgVGhlICA8U1RST05HPnNldHNjcnJlZzwvU1RST05HPiAgYW5kIDxTVFJPTkc+d3NldHNjcnJlZzwvU1RST05HPiByb3V0aW5lcyBhbGxvdyB0aGUgYXBwbGljYS0KKyAgICAgICB0aW9uIHByb2dyYW1tZXIgdG8gc2V0IGEgc29mdHdhcmUgc2Nyb2xsaW5nICByZWdpb24gIGluICBhCisgICAgICAgd2luZG93LiAgIDxFTT50b3A8L0VNPiAgYW5kIDxFTT5ib3Q8L0VNPiBhcmUgdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgdG9wIGFuZAorICAgICAgIGJvdHRvbSBtYXJnaW4gb2YgdGhlIHNjcm9sbGluZyByZWdpb24uICAoTGluZSAwIGlzIHRoZSB0b3AKKyAgICAgICBsaW5lICBvZiB0aGUgd2luZG93LikgIElmIHRoaXMgb3B0aW9uIGFuZCA8U1RST05HPnNjcm9sbG9rPC9TVFJPTkc+IGFyZSBlbi0KKyAgICAgICBhYmxlZCwgYW4gYXR0ZW1wdCB0byBtb3ZlIG9mZiB0aGUgYm90dG9tIG1hcmdpbiBsaW5lIGNhdXMtCisgICAgICAgZXMgYWxsIGxpbmVzIGluIHRoZSBzY3JvbGxpbmcgcmVnaW9uIHRvIHNjcm9sbCBvbmUgbGluZSBpbgorICAgICAgIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZpcnN0IGxpbmUuICBPbmx5ICB0aGUgIHRleHQgIG9mICB0aGUKKyAgICAgICB3aW5kb3cgIGlzICBzY3JvbGxlZC4gICAoTm90ZSAgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvCisgICAgICAgd2l0aCB0aGUgdXNlIG9mIGEgcGh5c2ljYWwgc2Nyb2xsaW5nIHJlZ2lvbiBjYXBhYmlsaXR5ICBpbgorICAgICAgIHRoZSB0ZXJtaW5hbCwgbGlrZSB0aGF0IGluIHRoZSBWVDEwMC4gIElmIDxTVFJPTkc+aWRsb2s8L1NUUk9ORz4gaXMgZW5hYmxlZAorICAgICAgIGFuZCB0aGUgdGVybWluYWwgaGFzIGVpdGhlciAgYSAgc2Nyb2xsaW5nICByZWdpb24gIG9yICBpbi0KKyAgICAgICBzZXJ0L2RlbGV0ZSBsaW5lIGNhcGFiaWxpdHksIHRoZXkgd2lsbCBwcm9iYWJseSBiZSB1c2VkIGJ5CisgICAgICAgdGhlIG91dHB1dCByb3V0aW5lcy4pCisKKyAgICAgICBUaGUgPFNUUk9ORz5zY3JvbGxvazwvU1RST05HPiBvcHRpb24gY29udHJvbHMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlICBjdXJzb3IKKyAgICAgICBvZiAgYSAgd2luZG93ICBpcyAgbW92ZWQgIG9mZiAgdGhlICBlZGdlICBvZiB0aGUgd2luZG93IG9yCisgICAgICAgc2Nyb2xsaW5nIHJlZ2lvbiwgZWl0aGVyIGFzIGEgcmVzdWx0IG9mIGEgIG5ld2xpbmUgIGFjdGlvbgorICAgICAgIG9uICB0aGUgIGJvdHRvbSAgbGluZSwgb3IgdHlwaW5nIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUKKyAgICAgICBsYXN0IGxpbmUuICBJZiBkaXNhYmxlZCwgKDxFTT5iZjwvRU0+IGlzIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4pLCB0aGUgY3Vyc29yIGlzIGxlZnQKKyAgICAgICBvbiAgdGhlIGJvdHRvbSBsaW5lLiAgSWYgZW5hYmxlZCwgKDxFTT5iZjwvRU0+IGlzIDxTVFJPTkc+VFJVRTwvU1RST05HPiksIHRoZSB3aW5kb3cKKyAgICAgICBpcyBzY3JvbGxlZCB1cCBvbmUgbGluZSAoTm90ZSB0aGF0ICB0byAgZ2V0ICB0aGUgIHBoeXNpY2FsCisgICAgICAgc2Nyb2xsaW5nICBlZmZlY3Qgb24gdGhlIHRlcm1pbmFsLCBpdCBpcyBhbHNvIG5lY2Vzc2FyeSB0bworICAgICAgIGNhbGwgPFNUUk9ORz5pZGxvazwvU1RST05HPikuCisKKyAgICAgICBUaGUgPFNUUk9ORz5ubDwvU1RST05HPiBhbmQgPFNUUk9ORz5ub25sPC9TVFJPTkc+IHJvdXRpbmVzIGNvbnRyb2wgIHdoZXRoZXIgIHRoZSAgdW5kZXJseWluZworICAgICAgIGRpc3BsYXkgIGRldmljZSAgdHJhbnNsYXRlcyB0aGUgcmV0dXJuIGtleSBpbnRvIG5ld2xpbmUgb24KKyAgICAgICBpbnB1dCwgYW5kIHdoZXRoZXIgaXQgdHJhbnNsYXRlcyBuZXdsaW5lIGludG8gIHJldHVybiAgYW5kCisgICAgICAgbGluZS1mZWVkICBvbiBvdXRwdXQgKGluIGVpdGhlciBjYXNlLCB0aGUgY2FsbCA8U1RST05HPmFkZGNoKCdcbicpPC9TVFJPTkc+CisgICAgICAgZG9lcyB0aGUgZXF1aXZhbGVudCBvZiByZXR1cm4gYW5kIGxpbmUgZmVlZCBvbiB0aGUgdmlydHVhbAorICAgICAgIHNjcmVlbikuICAgSW5pdGlhbGx5LCB0aGVzZSB0cmFuc2xhdGlvbnMgZG8gb2NjdXIuICBJZiB5b3UKKyAgICAgICBkaXNhYmxlIHRoZW0gdXNpbmcgPFNUUk9ORz5ub25sPC9TVFJPTkc+LCA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aWxsIGJlIGFibGUgdG8gbWFrZSAgYmV0LQorICAgICAgIHRlciAgdXNlICBvZiB0aGUgbGluZS1mZWVkIGNhcGFiaWxpdHksIHJlc3VsdGluZyBpbiBmYXN0ZXIKKyAgICAgICBjdXJzb3IgbW90aW9uLiAgQWxzbywgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2lsbCB0aGVuIGJlIGFibGUgIHRvICBkZXRlY3QKKyAgICAgICB0aGUgcmV0dXJuIGtleS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9ucyA8U1RST05HPnNldHNjcnJlZzwvU1RST05HPiBhbmQgPFNUUk9ORz53c2V0c2NycmVnPC9TVFJPTkc+IHJldHVybiA8U1RST05HPk9LPC9TVFJPTkc+IHVwb24gc3VjLQorICAgICAgIGNlc3MgYW5kIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZS4gIEFsbCBvdGhlciByb3V0aW5lcyB0aGF0IHJldHVybgorICAgICAgIGFuIGludGVnZXIgYWx3YXlzIHJldHVybiA8U1RST05HPk9LPC9TVFJPTkc+LgorCisgICAgICAgWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KKworICAgICAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSB3aW5kb3cKKyAgICAgICBwb2ludGVyIHdpbGwgcmV0dXJuIGFuIGVycm9yICBpZiAgdGhlICB3aW5kb3cgIHBvaW50ZXIgIGlzCisgICAgICAgbnVsbC4KKworICAgICAgICAgICAgICA8U1RST05HPndjbHJ0b2VvbDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgIGFuICBlcnJvciAgaWYgIHRoZSBjdXJzb3IgcG9zaXRpb24gaXMKKyAgICAgICAgICAgICAgICAgICBhYm91dCB0byB3cmFwLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+d3NldHNjcnJlZzwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHNjcm9sbGluZyByZWdpb24gIGxpbS0KKyAgICAgICAgICAgICAgICAgICBpdHMgZXh0ZW5kIG91dHNpZGUgdGhlIHdpbmRvdy4KKworICAgICAgIFgvT3BlbiAgZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgVGhpcyBpbXBsZS0KKyAgICAgICBtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgIG51bGwuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLAorICAgICAgIElzc3VlIDQuCisKKyAgICAgICBUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBpcyBhbWJpZ3VvdXMgb24gIHRoZSAgcXVlc3Rpb24gIG9mCisgICAgICAgd2hldGhlciAgPFNUUk9ORz5yYXc8L1NUUk9ORz4oKSAgc2hvdWxkICBkaXNhYmxlIHRoZSBDUkxGIHRyYW5zbGF0aW9ucyBjb24tCisgICAgICAgdHJvbGxlZCBieSA8U1RST05HPm5sPC9TVFJPTkc+KCkgYW5kIDxTVFJPTkc+bm9ubDwvU1RST05HPigpLiAgQlNEIGN1cnNlcyBkaWQgdHVybiBvZmYgdGhlc2UKKyAgICAgICB0cmFuc2xhdGlvbnM7ICBBVCZhbXA7VCAgY3Vyc2VzIChhdCBsZWFzdCBhcyBsYXRlIGFzIFNWcjEpIGRpZAorICAgICAgIG5vdC4gIFdlIGNob29zZSB0byBkbyBzbywgb24gdGhlIHRoZW9yeSB0aGF0IGEgIHByb2dyYW1tZXIKKyAgICAgICByZXF1ZXN0aW5nICByYXcgIGlucHV0IHdhbnRzIGEgY2xlYW4gKGlkZWFsbHkgOC1iaXQgY2xlYW4pCisgICAgICAgY29ubmVjdGlvbiB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgbm90IGFsdGVyLgorCisgICAgICAgU29tZSBoaXN0b3JpYyBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGhhZCwgIGFzICBhbiAgdW5kb2N1LQorICAgICAgIG1lbnRlZCAgZmVhdHVyZSwgIHRoZSAgYWJpbGl0eSAgdG8gIGRvICB0aGUgIGVxdWl2YWxlbnQgb2YKKyAgICAgICA8U1RST05HPmNsZWFyb2soLi4uLDwvU1RST05HPiA8U1RST05HPjEpPC9TVFJPTkc+IGJ5IHNheWluZyA8U1RST05HPnRvdWNod2luKHN0ZHNjcik8L1NUUk9ORz4gIG9yICA8U1RST05HPmNsZWFyKHN0ZC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnNjcik8L1NUUk9ORz4uICBUaGlzIHdpbGwgbm90IHdvcmsgdW5kZXIgbmN1cnNlcy4KKworICAgICAgIEVhcmxpZXIgIFN5c3RlbSAgViAgY3Vyc2VzICBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWVkIHRoYXQKKyAgICAgICB3aXRoIDxTVFJPTkc+c2Nyb2xsb2s8L1NUUk9ORz4gZW5hYmxlZCwgYW55IHdpbmRvdyBtb2RpZmljYXRpb24gIHRyaWdnZXJpbmcKKyAgICAgICBhICBzY3JvbGwgYWxzbyBmb3JjZWQgYSBwaHlzaWNhbCByZWZyZXNoLiAgWFNJIEN1cnNlcyBkb2VzCisgICAgICAgbm90IHJlcXVpcmUgdGhpcywgYW5kIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBhdm9pZHMgZG9pbmcgaXQgIHRvICBwZXJmb3JtCisgICAgICAgYmV0dGVyIHZlcnRpY2FsLW1vdGlvbiBvcHRpbWl6YXRpb24gYXQgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiB0aW1lLgorCisgICAgICAgVGhlICBYU0kgIEN1cnNlcyBzdGFuZGFyZCBkb2VzIG5vdCBtZW50aW9uIHRoYXQgdGhlIGN1cnNvcgorICAgICAgIHNob3VsZCBiZSBtYWRlIGludmlzaWJsZSAgYXMgIGEgIHNpZGUtZWZmZWN0ICBvZiAgPFNUUk9ORz5sZWF2ZW9rPC9TVFJPTkc+LgorICAgICAgIFNWcjQgIGN1cnNlcyAgZG9jdW1lbnRhdGlvbiAgZG9lcyAgdGhpcywgYnV0IHRoZSBjb2RlIGRvZXMKKyAgICAgICBub3QuICBVc2UgPFNUUk9ORz5jdXJzX3NldDwvU1RST05HPiB0byBtYWtlIHRoZSBjdXJzb3IgaW52aXNpYmxlLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPmNsZWFyb2s8L1NUUk9ORz4sIDxTVFJPTkc+bGVhdmVvazwvU1RST05HPiwgPFNUUk9ORz5zY3JvbGxvazwvU1RST05HPiwgPFNUUk9ORz5pZGNvazwvU1RST05HPiwgPFNUUk9ORz5ubDwvU1RST05HPiwgPFNUUk9ORz5ub25sPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPnNldHNjcnJlZzwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisgICAgICAgVGhlIDxTVFJPTkc+aW1tZWRvazwvU1RST05HPiByb3V0aW5lIGlzIHVzZWZ1bCBmb3Igd2luZG93cyB0aGF0IGFyZSB1c2VkIGFzCisgICAgICAgdGVybWluYWwgZW11bGF0b3JzLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4sICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcm9sbC4zeC5odG1sIj5jdXJzX3Njcm9sbCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX292ZXJsYXkuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjcxODZjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfb3ZlcmxheS4zeC5odG1sCkBAIC0wLDAgKzEsMTIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfb3ZlcmxheS4zeCx2IDEuMTQgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX292ZXJsYXkgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX292ZXJsYXkgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdmVybGF5LjN4Lmh0bWwiPmN1cnNfb3ZlcmxheSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5vdmVybGF5PC9TVFJPTkc+LCA8U1RST05HPm92ZXJ3cml0ZTwvU1RST05HPiwgPFNUUk9ORz5jb3B5d2luPC9TVFJPTkc+IC0gb3ZlcmxheSBhbmQgbWFuaXB1bGF0ZQorICAgICAgIG92ZXJsYXBwZWQgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93cworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm92ZXJsYXkoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qc3Jjd2luLDwvU1RST05HPiA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPipkc3R3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+b3ZlcndyaXRlKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KnNyY3dpbiw8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qZHN0d2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNvcHl3aW4oY29uc3Q8L1NUUk9ORz4gIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+ICA8U1RST05HPipzcmN3aW4sPC9TVFJPTkc+ICA8U1RST05HPldJTkRPVzwvU1RST05HPiAgPFNUUk9ORz4qZHN0d2luLDwvU1RST05HPiAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnNtaW5yb3csPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbWluY29sLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRtaW5yb3csPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZG1pbmNvbCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kbWF4cm93LDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZG1heGNvbCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5vdmVybGF5KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+b3ZlcmxheTwvU1RST05HPiAgYW5kIDxTVFJPTkc+b3ZlcndyaXRlPC9TVFJPTkc+IHJvdXRpbmVzIG92ZXJsYXkgPEVNPnNyY3dpbjwvRU0+IG9uIHRvcAorICAgICAgIG9mIDxFTT5kc3R3aW48L0VNPi4gIDxFTT5zY3J3aW48L0VNPiBhbmQgPEVNPmRzdHdpbjwvRU0+IGFyZSBub3QgcmVxdWlyZWQgdG8gIGJlICB0aGUKKyAgICAgICBzYW1lICBzaXplOyAgb25seSAgdGV4dCAgd2hlcmUgIHRoZSB0d28gd2luZG93cyBvdmVybGFwIGlzCisgICAgICAgY29waWVkLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCA8U1RST05HPm92ZXJsYXk8L1NUUk9ORz4gaXMgbm9uLWRlc3RydWN0aXZlCisgICAgICAgKGJsYW5rcyAgYXJlIG5vdCBjb3BpZWQpIHdoZXJlYXMgPFNUUk9ORz5vdmVyd3JpdGU8L1NUUk9ORz4gaXMgZGVzdHJ1Y3RpdmUuCisKKyAgICAgICBUaGUgPFNUUk9ORz5jb3B5d2luPC9TVFJPTkc+IHJvdXRpbmUgcHJvdmlkZXMgYSBmaW5lciBncmFudWxhcml0eSAgb2YgIGNvbi0KKyAgICAgICB0cm9sIG92ZXIgdGhlIDxTVFJPTkc+b3ZlcmxheTwvU1RST05HPiBhbmQgPFNUUk9ORz5vdmVyd3JpdGU8L1NUUk9ORz4gcm91dGluZXMuICBMaWtlIGluIHRoZQorICAgICAgIDxTVFJPTkc+cHJlZnJlc2g8L1NUUk9ORz4gcm91dGluZSwgYSByZWN0YW5nbGUgaXMgc3BlY2lmaWVkIGluIHRoZSBkZXN0aW5hLQorICAgICAgIHRpb24gIHdpbmRvdywgICg8RU0+ZG1pbnJvdzwvRU0+LCAgPEVNPmRtaW5jb2w8L0VNPikgYW5kICg8RU0+ZG1heHJvdzwvRU0+LCA8RU0+ZG1heGNvbDwvRU0+KSwKKyAgICAgICBhbmQgdGhlIHVwcGVyLWxlZnQtY29ybmVyIGNvb3JkaW5hdGVzIG9mIHRoZSAgc291cmNlICB3aW4tCisgICAgICAgZG93LCAoPEVNPnNtaW5yb3c8L0VNPiwgPEVNPnNtaW5jb2w8L0VNPikuICBJZiB0aGUgYXJndW1lbnQgPEVNPm92ZXJsYXk8L0VNPiBpcyA8U1RST05HPnRydWU8L1NUUk9ORz4sCisgICAgICAgdGhlbiBjb3B5aW5nIGlzIG5vbi1kZXN0cnVjdGl2ZSwgYXMgaW4gPFNUUk9ORz5vdmVybGF5PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiAgdXBvbiAgZmFpbHVyZSwKKyAgICAgICBhbmQgIDxTVFJPTkc+T0s8L1NUUk9ORz4gIChTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4KKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisgICAgICAgWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4gIEluICB0aGlzICBpbXBsZW1lbnRhLQorICAgICAgIHRpb24sICA8U1RST05HPmNvcHl3aW48L1NUUk9ORz4sICA8U1RST05HPm92ZXJsYXk8L1NUUk9ORz4gIGFuZCA8U1RST05HPm92ZXJ3cml0ZTwvU1RST05HPiByZXR1cm4gYW4gZXJyb3IgaWYKKyAgICAgICBlaXRoZXIgb2YgdGhlIHdpbmRvdyBwb2ludGVycyBhcmUgbnVsbCwgb3IgaWYgc29tZSBwYXJ0IG9mCisgICAgICAgdGhlIHdpbmRvdyB3b3VsZCBiZSBwbGFjZWQgb2ZmLXNjcmVlbi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz5vdmVybGF5PC9TVFJPTkc+IGFuZCA8U1RST05HPm92ZXJ3cml0ZTwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMKKyAgICAgICAoYWRkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXJzKS4gIEl0IGZ1cnRoZXIgc3BlY2lmaWVzIHRoZWlyCisgICAgICAgYmVoYXZpb3IgaW4gdGhlIHByZXNlbmNlIG9mIGNoYXJhY3RlcnMgd2l0aCBtdWx0aWJ5dGUgcmVuLQorICAgICAgIGRpdGlvbnMgKG5vdCB5ZXQgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZCgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdmVybGF5LjN4Lmh0bWwiPmN1cnNfb3ZlcmxheSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3BhZC4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfcGFkLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5NzE4MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3BhZC4zeC5odG1sCkBAIC0wLDAgKzEsMTg0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfcGFkLjN4LHYgMS4xNCAyMDA1LzA1LzE1IDE2OjE4OjQzIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfcGFkIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19wYWQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bmV3cGFkPC9TVFJPTkc+LCA8U1RST05HPnN1YnBhZDwvU1RST05HPiwgPFNUUk9ORz5wcmVmcmVzaDwvU1RST05HPiwgPFNUUk9ORz5wbm91dHJlZnJlc2g8L1NUUk9ORz4sIDxTVFJPTkc+cGVjaG9jaGFyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+cGVjaG9fd2NoYXI8L1NUUk9ORz4gLSBjcmVhdGUgYW5kIGRpc3BsYXkgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gcGFkcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPipuZXdwYWQoaW50PC9TVFJPTkc+IDxTVFJPTkc+bmxpbmVzLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5jb2xzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPipzdWJwYWQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Km9yaWcsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bmxpbmVzLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5jb2xzLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmVnaW5feSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5iZWdpbl94KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnByZWZyZXNoKFdJTkRPVzwvU1RST05HPiA8U1RST05HPipwYWQsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cG1pbnJvdyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wbWluY29sLDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c21pbnJvdyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbWluY29sLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNtYXhyb3csPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c21heGNvbCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wbm91dHJlZnJlc2goV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KnBhZCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5wbWlucm93LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBtaW5jb2wsPC9TVFJPTkc+CisgICAgICAgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbWlucm93LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNtaW5jb2wsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c21heHJvdyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbWF4Y29sKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBlY2hvY2hhcihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qcGFkLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBlY2hvX3djaGFyKFdJTkRPVzwvU1RST05HPiA8U1RST05HPipwYWQsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KndjaCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+bmV3cGFkPC9TVFJPTkc+IHJvdXRpbmUgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSAgbmV3CisgICAgICAgcGFkIGRhdGEgc3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcywgPEVNPm5saW5lczwvRU0+LAorICAgICAgIGFuZCBjb2x1bW5zLCA8RU0+bmNvbHM8L0VNPi4gIEEgcGFkIGlzIGxpa2UgYSB3aW5kb3csICBleGNlcHQgIHRoYXQKKyAgICAgICBpdCBpcyBub3QgcmVzdHJpY3RlZCBieSB0aGUgc2NyZWVuIHNpemUsIGFuZCBpcyBub3QgbmVjZXMtCisgICAgICAgc2FyaWx5IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgcGFydCAgb2YgIHRoZSAgc2NyZWVuLgorICAgICAgIFBhZHMgY2FuIGJlIHVzZWQgd2hlbiBhIGxhcmdlIHdpbmRvdyBpcyBuZWVkZWQsIGFuZCBvbmx5IGEKKyAgICAgICBwYXJ0IG9mIHRoZSB3aW5kb3cgd2lsbCBiZSBvbiB0aGUgc2NyZWVuIGF0IG9uZSB0aW1lLiAgQXUtCisgICAgICAgdG9tYXRpYyByZWZyZXNoZXMgb2YgcGFkcyAoZS5nLiwgZnJvbSBzY3JvbGxpbmcgb3IgZWNob2luZworICAgICAgIG9mIGlucHV0KSBkbyBub3Qgb2NjdXIuICBJdCBpcyBub3QgbGVnYWwgdG8gY2FsbCAgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPgorICAgICAgIHdpdGggIGEgIDxFTT5wYWQ8L0VNPiAgYXMgIGFuICBhcmd1bWVudDsgIHRoZSAgcm91dGluZXMgPFNUUk9ORz5wcmVmcmVzaDwvU1RST05HPiBvcgorICAgICAgIDxTVFJPTkc+cG5vdXRyZWZyZXNoPC9TVFJPTkc+IHNob3VsZCBiZSBjYWxsZWQgaW5zdGVhZC4gICBOb3RlICB0aGF0ICB0aGVzZQorICAgICAgIHJvdXRpbmVzIHJlcXVpcmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIHNwZWNpZnkgdGhlIHBhcnQKKyAgICAgICBvZiB0aGUgcGFkIHRvIGJlIGRpc3BsYXllZCBhbmQgdGhlIGxvY2F0aW9uIG9uIHRoZSAgc2NyZWVuCisgICAgICAgdG8gYmUgdXNlZCBmb3IgdGhlIGRpc3BsYXkuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zdWJwYWQ8L1NUUk9ORz4gcm91dGluZSBjcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN1Yi0KKyAgICAgICB3aW5kb3cgd2l0aGluIGEgIHBhZCAgd2l0aCAgdGhlICBnaXZlbiAgbnVtYmVyICBvZiAgbGluZXMsCisgICAgICAgPEVNPm5saW5lczwvRU0+LCAgYW5kICBjb2x1bW5zLCAgPEVNPm5jb2xzPC9FTT4uICAgVW5saWtlIDxTVFJPTkc+c3Vid2luPC9TVFJPTkc+LCB3aGljaCB1c2VzCisgICAgICAgc2NyZWVuIGNvb3JkaW5hdGVzLCB0aGUgd2luZG93IGlzICBhdCAgcG9zaXRpb24gICg8RU0+YmVnaW48L0VNPl88RU0+eDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+CisgICAgICAgPEVNPmJlZ2luPC9FTT5fPEVNPnk8L0VNPikgIG9uIHRoZSBwYWQuICBUaGUgd2luZG93IGlzIG1hZGUgaW4gdGhlIG1pZGRsZSBvZgorICAgICAgIHRoZSB3aW5kb3cgPEVNPm9yaWc8L0VNPiwgc28gdGhhdCBjaGFuZ2VzIG1hZGUgdG8gb25lIHdpbmRvdyBhZmZlY3QKKyAgICAgICBib3RoIHdpbmRvd3MuICBEdXJpbmcgdGhlIHVzZSBvZiB0aGlzIHJvdXRpbmUsIGl0IHdpbGwgb2YtCisgICAgICAgdGVuIGJlIG5lY2Vzc2FyeSB0byBjYWxsIDxTVFJPTkc+dG91Y2h3aW48L1NUUk9ORz4gb3IgPFNUUk9ORz50b3VjaGxpbmU8L1NUUk9ORz4gb24gPEVNPm9yaWc8L0VNPiBiZS0KKyAgICAgICBmb3JlIGNhbGxpbmcgPFNUUk9ORz5wcmVmcmVzaDwvU1RST05HPi4KKworICAgICAgIFRoZSAgPFNUUk9ORz5wcmVmcmVzaDwvU1RST05HPiAgYW5kICA8U1RST05HPnBub3V0cmVmcmVzaDwvU1RST05HPiByb3V0aW5lcyBhcmUgYW5hbG9nb3VzIHRvCisgICAgICAgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiBhbmQgPFNUUk9ORz53bm91dHJlZnJlc2g8L1NUUk9ORz4gZXhjZXB0IHRoYXQgdGhleSByZWxhdGUgdG8gIHBhZHMKKyAgICAgICBpbnN0ZWFkICBvZiB3aW5kb3dzLiAgVGhlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgbmVlZGVkCisgICAgICAgdG8gaW5kaWNhdGUgd2hhdCBwYXJ0IG9mIHRoZSBwYWQgYW5kIHNjcmVlbiBhcmUgIGludm9sdmVkLgorICAgICAgIDxFTT5wbWlucm93PC9FTT4gIGFuZCA8RU0+cG1pbmNvbDwvRU0+IHNwZWNpZnkgdGhlIHVwcGVyIGxlZnQtaGFuZCBjb3JuZXIgb2YKKyAgICAgICB0aGUgcmVjdGFuZ2xlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcGFkLiAgPEVNPnNtaW5yb3c8L0VNPiwgIDxFTT5zbWluLTwvRU0+CisgICAgICAgPEVNPmNvbDwvRU0+LCA8RU0+c21heHJvdzwvRU0+LCBhbmQgPEVNPnNtYXhjb2w8L0VNPiBzcGVjaWZ5IHRoZSBlZGdlcyBvZiB0aGUgcmVjdGFuLQorICAgICAgIGdsZSB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4gIFRoZSAgbG93ZXIgIHJpZ2h0LWhhbmQKKyAgICAgICBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBhZCBpcyBjYWwtCisgICAgICAgY3VsYXRlZCBmcm9tIHRoZSBzY3JlZW4gY29vcmRpbmF0ZXMsIHNpbmNlIHRoZSAgcmVjdGFuZ2xlcworICAgICAgIG11c3QgIGJlICB0aGUgc2FtZSBzaXplLiAgQm90aCByZWN0YW5nbGVzIG11c3QgYmUgZW50aXJlbHkKKyAgICAgICBjb250YWluZWQgd2l0aGluIHRoZWlyICByZXNwZWN0aXZlICBzdHJ1Y3R1cmVzLiAgIE5lZ2F0aXZlCisgICAgICAgdmFsdWVzIG9mIDxFTT5wbWlucm93PC9FTT4sIDxFTT5wbWluY29sPC9FTT4sIDxFTT5zbWlucm93PC9FTT4sIG9yIDxFTT5zbWluY29sPC9FTT4gYXJlIHRyZWF0LQorICAgICAgIGVkIGFzIGlmIHRoZXkgd2VyZSB6ZXJvLgorCisgICAgICAgVGhlIDxTVFJPTkc+cGVjaG9jaGFyPC9TVFJPTkc+IHJvdXRpbmUgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gYSBjYWxsCisgICAgICAgdG8gIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4gIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4sIGEgY2FsbCB0byA8U1RST05HPndhZGRjaDwvU1RST05HPgorICAgICAgIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+LCBvciBhIGNhbGwgdG8gIDxTVFJPTkc+d2FkZGNoPC9TVFJPTkc+ICBmb2wtCisgICAgICAgbG93ZWQgIGJ5ICBhICBjYWxsIHRvIDxTVFJPTkc+cHJlZnJlc2g8L1NUUk9ORz4uICBUaGUga25vd2xlZGdlIHRoYXQgb25seSBhCisgICAgICAgc2luZ2xlIGNoYXJhY3RlciBpcyBiZWluZyBvdXRwdXQgaXMgdGFrZW4gaW50byAgY29uc2lkZXJhLQorICAgICAgIHRpb24gIGFuZCwgZm9yIG5vbi1jb250cm9sIGNoYXJhY3RlcnMsIGEgY29uc2lkZXJhYmxlIHBlci0KKyAgICAgICBmb3JtYW5jZSBnYWluIG1pZ2h0IGJlIHNlZW4gYnkgdXNpbmcgIHRoZXNlICByb3V0aW5lcyAgaW4tCisgICAgICAgc3RlYWQgb2YgdGhlaXIgZXF1aXZhbGVudHMuICBJbiB0aGUgY2FzZSBvZiA8U1RST05HPnBlY2hvY2hhcjwvU1RST05HPiwgdGhlCisgICAgICAgbGFzdCBsb2NhdGlvbiBvZiB0aGUgcGFkIG9uIHRoZSBzY3JlZW4gaXMgcmV1c2VkICBmb3IgIHRoZQorICAgICAgIGFyZ3VtZW50cyB0byA8U1RST05HPnByZWZyZXNoPC9TVFJPTkc+LgorCisgICAgICAgVGhlICA8U1RST05HPnBlY2hvX3djaGFyPC9TVFJPTkc+ICBmdW5jdGlvbiBpcyB0aGUgYW5hbG9nb3VzIHdpZGUtY2hhcmFjdGVyCisgICAgICAgZm9ybSBvZiA8U1RST05HPnBlY2hvY2hhcjwvU1RST05HPi4gIEl0IG91dHB1dHMgb25lIGNoYXJhY3RlciB0byBhIHBhZCAgYW5kCisgICAgICAgaW1tZWRpYXRlbHkgIHJlZnJlc2hlcyB0aGUgcGFkLiAgSXQgZG9lcyB0aGlzIGJ5IGEgY2FsbCB0bworICAgICAgIDxTVFJPTkc+d2FkZF93Y2g8L1NUUk9ORz4gZm9sbG93ZWQgYnkgYSBjYWxsIHRvIDxTVFJPTkc+cHJlZnJlc2g8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuICA8U1RST05HPkVSUjwvU1RST05HPiAgdXBvbiAgZmFpbHVyZQorICAgICAgIGFuZCAgPFNUUk9ORz5PSzwvU1RST05HPiAgKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbgorICAgICAgIDxTVFJPTkc+RVJSPC9TVFJPTkc+IikgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+ICBvbiAgZXJyb3IsICBhbmQKKyAgICAgICBzZXQgPFNUUk9ORz5lcnJubzwvU1RST05HPiB0byA8U1RST05HPkVOT01FTTwvU1RST05HPi4KKworICAgICAgIFgvT3BlbiAgZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyBpbS0KKyAgICAgICBwbGVtZW50YXRpb24KKworICAgICAgICAgICAgICA8U1RST05HPnByZWZyZXNoPC9TVFJPTkc+IGFuZCA8U1RST05HPnBub3V0cmVmcmVzaDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybiBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwKKyAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgd2luZG93IGlzIG5vdCByZWFsbHkgYSBwYWQgb3IgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgYXJlYSB0byByZWZyZXNoIGV4dGVuZHMgb2ZmLXNjcmVlbiBvciAgaWYgIHRoZQorICAgICAgICAgICAgICAgICAgIG1pbmltdW0gY29vcmRpbmF0ZXMgYXJlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aS0KKyAgICAgICAgICAgICAgICAgICBtdW0uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5wZWNob2NoYXI8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgaXMgbm90IHJlYWxseSBhCisgICAgICAgICAgICAgICAgICAgcGFkLCAgYW5kIHRoZSBhc3NvY2lhdGVkIGNhbGwgdG8gPFNUUk9ORz53ZWNob2NoYXI8L1NUUk9ORz4gcmUtCisgICAgICAgICAgICAgICAgICAgdHVybnMgYW4gZXJyb3IuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5wZWNob193Y2hhcjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHdpbmRvdyBpcyBub3QgcmVhbGx5IGEKKyAgICAgICAgICAgICAgICAgICBwYWQsICBhbmQgIHRoZSAgYXNzb2NpYXRlZCBjYWxsIHRvIDxTVFJPTkc+d2VjaG9fd2NoYXI8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPnBlY2hvY2hhcjwvU1RST05HPiBtYXkgYmUgYSBtYWNyby4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgIDQgIGRlc2NyaWJlcyAgdGhlc2UgIGZ1bmMtCisgICAgICAgdGlvbnMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz5jdXJzX2FkZC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y2goM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3ByaW50LjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19wcmludC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Zjc2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19wcmludC4zeC5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfcHJpbnQuM3gsdiAxLjggMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3ByaW50IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19wcmludCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludC4zeC5odG1sIj5jdXJzX3ByaW50KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50LjN4Lmh0bWwiPmN1cnNfcHJpbnQoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWNwcmludDwvU1RST05HPiAtIHNoaXAgYmluYXJ5IGRhdGEgdG8gcHJpbnRlcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm1jcHJpbnQoY2hhcjwvU1RST05HPiA8U1RST05HPipkYXRhLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmxlbik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhpcyAgZnVuY3Rpb24gIHVzZXMgdGhlIDxTVFJPTkc+bWM1cDwvU1RST05HPiBvciA8U1RST05HPm1jNDwvU1RST05HPiBhbmQgPFNUUk9ORz5tYzU8L1NUUk9ORz4gY2FwYWJpbGl0aWVzLAorICAgICAgIGlmIHRoZXkgYXJlIHByZXNlbnQsIHRvICBzaGlwICBnaXZlbiAgZGF0YSAgdG8gIGEgIHByaW50ZXIKKyAgICAgICBhdHRhY2hlZCB0byB0aGUgdGVybWluYWwuCisKKyAgICAgICBOb3RlICB0aGF0ICB0aGUgPFNUUk9ORz5tY3ByaW50PC9TVFJPTkc+IGNvZGUgaGFzIG5vIHdheSB0byBkbyBmbG93IGNvbnRyb2wKKyAgICAgICB3aXRoIHRoZSBwcmludGVyIG9yIHRvIGtub3cgaG93ICBtdWNoICBidWZmZXJpbmcgIGl0ICBoYXMuCisgICAgICAgWW91ciAgYXBwbGljYXRpb24gIGlzICByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aGUgcmF0ZSBvZgorICAgICAgIHdyaXRlcyB0byB0aGUgcHJpbnRlciBiZWxvdyBpdHMgY29udGludW91cyB0aHJvdWdocHV0IHJhdGUKKyAgICAgICAodHlwaWNhbGx5ICBhYm91dCAgaGFsZiAgb2YgaXRzIG5vbWluYWwgY3BzIHJhdGluZykuICBEb3QtCisgICAgICAgbWF0cml4IHByaW50ZXJzIGFuZCA2LXBhZ2UtcGVyLW1pbnV0ZSBsYXNlcnMgY2FuIHR5cGljYWxseQorICAgICAgIGhhbmRsZSAgODBjcHMsICBzbyBhIGdvb2QgY29uc2VydmF0aXZlIHJ1bGUgb2YgdGh1bWIgaXMgdG8KKyAgICAgICBzbGVlcCBmb3IgYSBzZWNvbmQgYWZ0ZXIgc2hpcHBpbmcgZWFjaCA4MC1jaGFyYWN0ZXIgIGxpbmUuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5tY3ByaW50PC9TVFJPTkc+ICBmdW5jdGlvbiAgcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPiBpZiB0aGUgd3JpdGUgb3BlcmF0aW9uCisgICAgICAgYWJvcnRlZCBmb3Igc29tZSByZWFzb24uICBJbiB0aGlzIGNhc2UsIGVycm5vIHdpbGwgY29udGFpbgorICAgICAgIGVpdGhlciAgYW4gIGVycm9yICBhc3NvY2lhdGVkICB3aXRoIDxTVFJPTkc+d3JpdGUoMik8L1NUUk9ORz4gb3Igb25lIG9mIHRoZQorICAgICAgIGZvbGxvd2luZzoKKworICAgICAgIEVOT0RFVgorICAgICAgICAgICAgQ2FwYWJpbGl0aWVzIGZvciBwcmludGVyIHJlZGlyZWN0aW9uIGRvIG5vdCBleGlzdC4KKworICAgICAgIEVOT01FTQorICAgICAgICAgICAgQ291bGRuJ3QgYWxsb2NhdGUgc3VmZmljaWVudCAgbWVtb3J5ICB0byAgYnVmZmVyICB0aGUKKyAgICAgICAgICAgIHByaW50ZXIgd3JpdGUuCisKKyAgICAgICBXaGVuIDxTVFJPTkc+bWNwcmludDwvU1RST05HPiBzdWNjZWVkcywgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKyAgICAgICBhY3R1YWxseSBzZW50IHRvIHRoZSBwcmludGVyLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPm1jcHJpbnQ8L1NUUk9ORz4gY2FsbCB3YXMgZGVzaWduZWQgZm9yIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIGFuZCBpcyAgbm90CisgICAgICAgZm91bmQgaW4gU1ZyNCBjdXJzZXMsIDQuNEJTRCBjdXJzZXMsIG9yIGFueSBvdGhlciBwcmV2aW91cworICAgICAgIHZlcnNpb24gb2YgY3Vyc2VzLgorCisKKzwvUFJFPgorPEgyPkJVR1M8L0gyPjxQUkU+CisgICAgICAgUGFkZGluZyBpbiB0aGUgPFNUUk9ORz5tYzVwPC9TVFJPTkc+LCA8U1RST05HPm1jNDwvU1RST05HPiBhbmQgPFNUUk9ORz5tYzU8L1NUUk9ORz4gY2FwYWJpbGl0aWVzIHdpbGwgbm90ICBiZQorICAgICAgIGludGVycHJldGVkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50LjN4Lmh0bWwiPmN1cnNfcHJpbnQoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19wcmludHcuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3ByaW50dy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODhkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19wcmludHcuM3guaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3ByaW50dy4zeCx2IDEuMTcgMjAwNi8xMi8yNCAxNjowNToxNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3ByaW50dyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfcHJpbnR3IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnByaW50dzwvU1RST05HPiwgPFNUUk9ORz53cHJpbnR3PC9TVFJPTkc+LCA8U1RST05HPm12cHJpbnR3PC9TVFJPTkc+LCA8U1RST05HPm12d3ByaW50dzwvU1RST05HPiwgPFNUUk9ORz52d3ByaW50dzwvU1RST05HPiwgPFNUUk9ORz52d19wcmludHc8L1NUUk9ORz4KKyAgICAgICAtIHByaW50IGZvcm1hdHRlZCBvdXRwdXQgaW4gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93cworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnByaW50dyhjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm10LDwvU1RST05HPiA8U1RST05HPi4uLik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53cHJpbnR3KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4gPFNUUk9ORz4uLi4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bXZwcmludHcoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+IDxTVFJPTkc+Li4uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12d3ByaW50dyhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gIDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPi4uLik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIDxTVFJPTkc+dndwcmludHcoV0lORE9XPC9TVFJPTkc+ICA8U1RST05HPip3aW4sPC9TVFJPTkc+ICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+IDxTVFJPTkc+dmFfbGlzdDwvU1RST05HPiA8U1RST05HPnZhci08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmdsaXN0KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZ3X3ByaW50dyhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+ICA8U1RST05HPnZhX2xpc3Q8L1NUUk9ORz4gIDxTVFJPTkc+dmFyLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Z2xpc3QpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5wcmludHc8L1NUUk9ORz4sICA8U1RST05HPndwcmludHc8L1NUUk9ORz4sIDxTVFJPTkc+bXZwcmludHc8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bXZ3cHJpbnR3PC9TVFJPTkc+IHJvdXRpbmVzIGFyZQorICAgICAgIGFuYWxvZ291cyB0byAgPFNUUk9ORz5wcmludGY8L1NUUk9ORz4gIFtzZWUgIDxTVFJPTkc+PEEgSFJFRj0icHJpbnRmLjMuaHRtbCI+cHJpbnRmKDMpPC9BPjwvU1RST05HPl0uICAgSW4gIGVmZmVjdCwgIHRoZQorICAgICAgIHN0cmluZyB0aGF0IHdvdWxkIGJlIG91dHB1dCBieSA8U1RST05HPnByaW50ZjwvU1RST05HPiBpcyBvdXRwdXQgaW5zdGVhZCBhcworICAgICAgIHRob3VnaCA8U1RST05HPndhZGRzdHI8L1NUUk9ORz4gd2VyZSB1c2VkIG9uIHRoZSBnaXZlbiB3aW5kb3cuCisKKyAgICAgICBUaGUgPFNUUk9ORz52d3ByaW50dzwvU1RST05HPiAgYW5kICA8U1RST05HPnd2X3ByaW50dzwvU1RST05HPiAgcm91dGluZXMgIGFyZSAgYW5hbG9nb3VzICB0bworICAgICAgIDxTVFJPTkc+dnByaW50ZjwvU1RST05HPiAgW3NlZSAgPFNUUk9ORz48QSBIUkVGPSJwcmludGYuMy5odG1sIj5wcmludGYoMyk8L0E+PC9TVFJPTkc+XSAgYW5kICBwZXJmb3JtICBhIDxTVFJPTkc+d3ByaW50dzwvU1RST05HPiB1c2luZyBhCisgICAgICAgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhICA8U1RST05HPnZhX2xpc3Q8L1NUUk9ORz4sCisgICAgICAgYSAgIHBvaW50ZXIgICB0byAgYSAgbGlzdCAgb2YgIGFyZ3VtZW50cywgIGFzICBkZWZpbmVkICBpbgorICAgICAgIDxTVFJPTkc+Jmx0O3N0ZGFyZy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gIDxTVFJPTkc+RVJSPC9TVFJPTkc+ICB1cG9uICBmYWlsdXJlCisgICAgICAgYW5kICA8U1RST05HPk9LPC9TVFJPTkc+ICAoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuCisgICAgICAgPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFgvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiAgdGhpcyAgaW1wbGVtZW50YS0KKyAgICAgICB0aW9uLCAgYW4gIGVycm9yICBtYXkgIGJlICByZXR1cm5lZCAgaWYgaXQgY2Fubm90IGFsbG9jYXRlCisgICAgICAgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciB1c2VkIHRvIGZvcm1hdCAgdGhlICByZXN1bHRzLgorICAgICAgIEl0IHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgWFNJICBDdXJzZXMgIHN0YW5kYXJkLCAgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuYy0KKyAgICAgICB0aW9ucy4gIFRoZSBmdW5jdGlvbiA8U1RST05HPnZ3cHJpbnR3PC9TVFJPTkc+IGlzIG1hcmtlZCBUTyAgQkUgIFdJVEhEUkFXTiwKKyAgICAgICBhbmQgIGlzICB0byAgYmUgcmVwbGFjZWQgYnkgYSBmdW5jdGlvbiA8U1RST05HPnZ3X3ByaW50dzwvU1RST05HPiB1c2luZyB0aGUKKyAgICAgICA8U1RST05HPiZsdDtzdGRhcmcuaCZndDs8L1NUUk9ORz4gaW50ZXJmYWNlLiAgVGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24sIFZlci0KKyAgICAgICBzaW9uICAyICBzdGF0ZXMgIHRoYXQgIDxTVFJPTkc+dndfcHJpbnR3PC9TVFJPTkc+ICBpcyBwcmVmZXJyZWQgdG8gPFNUUk9ORz52d3ByaW50dzwvU1RST05HPgorICAgICAgIHNpbmNlIHRoZSBsYXR0ZXIgIHJlcXVpcmVzICBpbmNsdWRpbmcgIDxTVFJPTkc+Jmx0O3ZhcmFyZ3MuaCZndDs8L1NUUk9ORz4sICB3aGljaAorICAgICAgIGNhbm5vdCAgYmUgIHVzZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyA8U1RST05HPiZsdDtzdGRhcmcuaCZndDs8L1NUUk9ORz4uICBUaGlzIGltLQorICAgICAgIHBsZW1lbnRhdGlvbiB1c2VzIDxTVFJPTkc+Jmx0O3N0ZGFyZy5oJmd0OzwvU1RST05HPiBmb3IgYm90aCwgYmVjYXVzZSB0aGF0IGhlYWRlcgorICAgICAgIGlzIGluY2x1ZGVkIGluIDxTVFJPTkc+Jmx0O2N1cnNlcy5oPC9TVFJPTkc+Jmd0Oy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0icHJpbnRmLjMuaHRtbCI+cHJpbnRmKDMpPC9BPjwvU1RST05HPiwgPFNUUk9ORz52cHJpbnRmKDMpPC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludHcuM3guaHRtbCI+Y3Vyc19wcmludHcoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19yZWZyZXNoLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2OWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3JlZnJlc2guM3guaHRtbApAQCAtMCwwICsxLDE3MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3JlZnJlc2guM3gsdiAxLjEyIDIwMDUvMDUvMTUgMTY6MTg6NDkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19yZWZyZXNoIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19yZWZyZXNoIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+ZG91cGRhdGU8L1NUUk9ORz4sIDxTVFJPTkc+cmVkcmF3d2luPC9TVFJPTkc+LCA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4sIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+LCA8U1RST05HPndyZWRyYXdsbjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+IC0gcmVmcmVzaCA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3dzIGFuZCBsaW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJlZnJlc2godm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53cmVmcmVzaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndub3V0cmVmcmVzaChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRvdXBkYXRlKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cmVkcmF3d2luKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3JlZHJhd2xuKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmVnX2xpbmUsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bnVtX2xpbmVzKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+IGFuZCA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+ICByb3V0aW5lcyAgKG9yICA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPikgIG11c3QgYmUgY2FsbGVkIHRvIGdldCBhY3R1YWwgb3V0cHV0IHRvIHRoZSB0ZXItCisgICAgICAgbWluYWwsIGFzIG90aGVyIHJvdXRpbmVzICBtZXJlbHkgIG1hbmlwdWxhdGUgIGRhdGEgIHN0cnVjLQorICAgICAgIHR1cmVzLiAgIFRoZSAgcm91dGluZSAgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiBjb3BpZXMgdGhlIG5hbWVkIHdpbmRvdyB0bworICAgICAgIHRoZSBwaHlzaWNhbCB0ZXJtaW5hbCBzY3JlZW4sIHRha2luZyBpbnRvIGFjY291bnQgd2hhdCAgaXMKKyAgICAgICBhbHJlYWR5IHRoZXJlIHRvIGRvIG9wdGltaXphdGlvbnMuICBUaGUgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+IHJvdXRpbmUgaXMKKyAgICAgICB0aGUgc2FtZSwgdXNpbmcgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4gIGFzICB0aGUgIGRlZmF1bHQgIHdpbmRvdy4gICBVbmxlc3MKKyAgICAgICA8U1RST05HPmxlYXZlb2s8L1NUUk9ORz4gIGhhcyBiZWVuIGVuYWJsZWQsIHRoZSBwaHlzaWNhbCBjdXJzb3Igb2YgdGhlIHRlci0KKyAgICAgICBtaW5hbCBpcyBsZWZ0IGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY3Vyc29yIGZvciB0aGF0ICB3aW4tCisgICAgICAgZG93LgorCisgICAgICAgVGhlICA8U1RST05HPndub3V0cmVmcmVzaDwvU1RST05HPiBhbmQgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiByb3V0aW5lcyBhbGxvdyBtdWx0aXBsZSB1cC0KKyAgICAgICBkYXRlcyB3aXRoIG1vcmUgZWZmaWNpZW5jeSB0aGFuIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gYWxvbmUuICBJbiAgYWRkaS0KKyAgICAgICB0aW9uICB0byAgYWxsIHRoZSB3aW5kb3cgc3RydWN0dXJlcywgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4ga2VlcHMgdHdvIGRhdGEKKyAgICAgICBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgdGVybWluYWwgIHNjcmVlbjogIGEgIHBoeXNpY2FsCisgICAgICAgc2NyZWVuLCAgZGVzY3JpYmluZyAgd2hhdCBpcyBhY3R1YWxseSBvbiB0aGUgc2NyZWVuLCBhbmQgYQorICAgICAgIHZpcnR1YWwgc2NyZWVuLCBkZXNjcmliaW5nIHdoYXQgdGhlICBwcm9ncmFtbWVyICB3YW50cyAgdG8KKyAgICAgICBoYXZlIG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICBUaGUgIHJvdXRpbmUgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiB3b3JrcyBieSBmaXJzdCBjYWxsaW5nIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+LAorICAgICAgIHdoaWNoIGNvcGllcyB0aGUgbmFtZWQgd2luZG93IHRvIHRoZSB2aXJ0dWFsICBzY3JlZW4sICBhbmQKKyAgICAgICB0aGVuICBjYWxsaW5nICA8U1RST05HPmRvdXBkYXRlPC9TVFJPTkc+LCB3aGljaCBjb21wYXJlcyB0aGUgdmlydHVhbCBzY3JlZW4KKyAgICAgICB0byB0aGUgcGh5c2ljYWwgc2NyZWVuIGFuZCBkb2VzIHRoZSBhY3R1YWwgdXBkYXRlLiAgSWYgdGhlCisgICAgICAgcHJvZ3JhbW1lciB3aXNoZXMgdG8gb3V0cHV0IHNldmVyYWwgd2luZG93cyBhdCBvbmNlLCBhIHNlLQorICAgICAgIHJpZXMgb2YgY2FsbHMgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiByZXN1bHRzIGluIGFsdGVybmF0aW5nIGNhbGxzICB0bworICAgICAgIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiwgY2F1c2luZyBzZXZlcmFsIGJ1cnN0cyBvZiBvdXQtCisgICAgICAgcHV0IHRvIHRoZSBzY3JlZW4uICBCeSBmaXJzdCBjYWxsaW5nIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+IGZvciBlYWNoCisgICAgICAgd2luZG93LCBpdCBpcyB0aGVuIHBvc3NpYmxlIHRvIGNhbGwgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiBvbmNlLCByZXN1bHQtCisgICAgICAgaW5nIGluIG9ubHkgb25lIGJ1cnN0IG9mIG91dHB1dCwgd2l0aCBmZXdlciB0b3RhbCAgY2hhcmFjLQorICAgICAgIHRlcnMgdHJhbnNtaXR0ZWQgYW5kIGxlc3MgQ1BVIHRpbWUgdXNlZC4gIElmIHRoZSA8RU0+d2luPC9FTT4gYXJndS0KKyAgICAgICBtZW50IHRvIDxTVFJPTkc+d3JlZnJlc2g8L1NUUk9ORz4gaXMgdGhlIGdsb2JhbCB2YXJpYWJsZSA8U1RST05HPmN1cnNjcjwvU1RST05HPiwgdGhlIHNjcmVlbgorICAgICAgIGlzIGltbWVkaWF0ZWx5IGNsZWFyZWQgYW5kIHJlcGFpbnRlZCBmcm9tIHNjcmF0Y2guCisKKyAgICAgICBUaGUgcGhyYXNlICJjb3BpZXMgdGhlIG5hbWVkIHdpbmRvdyB0byB0aGUgdmlydHVhbCBzY3JlZW4iCisgICAgICAgYWJvdmUgaXMgYW1iaWd1b3VzLiAgV2hhdCBhY3R1YWxseSAgaGFwcGVucyAgaXMgIHRoYXQgIGFsbAorICAgICAgIDxFTT50b3VjaGVkPC9FTT4gIChjaGFuZ2VkKSAgbGluZXMgIGluIHRoZSB3aW5kb3cgYXJlIGNvcGllZCB0byB0aGUKKyAgICAgICB2aXJ0dWFsIHNjcmVlbi4gIFRoaXMgYWZmZWN0cyBwcm9ncmFtcyB0aGF0ICB1c2UgIG92ZXJsYXAtCisgICAgICAgcGluZyAgd2luZG93czsgIGl0ICBtZWFucyB0aGF0IGlmIHR3byB3aW5kb3dzIG92ZXJsYXAsIHlvdQorICAgICAgIGNhbiByZWZyZXNoIHRoZW0gaW4gZWl0aGVyIG9yZGVyIGFuZCAgdGhlICBvdmVybGFwICByZWdpb24KKyAgICAgICB3aWxsIGJlIG1vZGlmaWVkIG9ubHkgd2hlbiBpdCBpcyBleHBsaWNpdGx5IGNoYW5nZWQuICAoQnV0CisgICAgICAgc2VlIHRoZSBzZWN0aW9uIG9uIDxTVFJPTkc+UE9SVEFCSUxJVFk8L1NUUk9ORz4gYmVsb3cgZm9yIGEgIHdhcm5pbmcgIGFib3V0CisgICAgICAgZXhwbG9pdGluZyB0aGlzIGJlaGF2aW9yLikKKworICAgICAgIFRoZSA8U1RST05HPndyZWRyYXdsbjwvU1RST05HPiByb3V0aW5lIGluZGljYXRlcyB0byA8U1RST05HPmN1cnNlczwvU1RST05HPiB0aGF0IHNvbWUgc2NyZWVuCisgICAgICAgbGluZXMgYXJlIGNvcnJ1cHRlZCBhbmQgc2hvdWxkIGJlIHRocm93biBhd2F5IGJlZm9yZSAgYW55LQorICAgICAgIHRoaW5nICBpcyAgd3JpdHRlbiAgb3ZlciAgdGhlbS4gICBJdCB0b3VjaGVzIHRoZSBpbmRpY2F0ZWQKKyAgICAgICBsaW5lcyAobWFya2luZyB0aGVtICBjaGFuZ2VkKS4gICBUaGUgIHJvdXRpbmUgIDxTVFJPTkc+cmVkcmF3d2luPC9TVFJPTkc+KCkKKyAgICAgICB0b3VjaGVzIHRoZSBlbnRpcmUgd2luZG93LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyAgdGhhdCAgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSwKKyAgICAgICBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiAoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSAgb3RoZXIgIHRoYW4KKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisgICAgICAgWC9PcGVuICBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuICBJbiB0aGlzIGltLQorICAgICAgIHBsZW1lbnRhdGlvbgorCisgICAgICAgICAgICAgIDxTVFJPTkc+d25vdXRyZWZyZXNoPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciAgaWYgIHRoZSAgd2luZG93ICBwb2ludGVyICBpcworICAgICAgICAgICAgICAgICAgIG51bGwsIG9yIGlmIHRoZSB3aW5kb3cgaXMgcmVhbGx5IGEgcGFkLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+d3JlZHJhd2xuPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyAgYW4gIGVycm9yICBpZiAgdGhlIGFzc29jaWF0ZWQgY2FsbCB0bworICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dG91Y2hsbjwvU1RST05HPiByZXR1cm5zIGFuIGVycm9yLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cmVkcmF3d2luPC9TVFJPTkc+IG1heSBiZSBtYWNyb3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlICA0ICBkZXNjcmliZXMgIHRoZXNlICBmdW5jLQorICAgICAgIHRpb25zLgorCisgICAgICAgV2hldGhlciAgPFNUUk9ORz53bm91dHJlZnJlc2goKTwvU1RST05HPiAgY29waWVzICB0byB0aGUgdmlydHVhbCBzY3JlZW4gdGhlCisgICAgICAgZW50aXJlIGNvbnRlbnRzIG9mIGEgd2luZG93IG9yIGp1c3QgaXRzICBjaGFuZ2VkICBwb3J0aW9ucworICAgICAgIGhhcyBuZXZlciBiZWVuIHdlbGwtZG9jdW1lbnRlZCBpbiBoaXN0b3JpYyBjdXJzZXMgdmVyc2lvbnMKKyAgICAgICAoaW5jbHVkaW5nIFNWcjQpLiAgSXQgbWlnaHQgYmUgdW53aXNlIHRvICByZWx5ICBvbiAgZWl0aGVyCisgICAgICAgYmVoYXZpb3IgIGluICBwcm9ncmFtcyAgdGhhdCAgbWlnaHQgaGF2ZSB0byBiZSBsaW5rZWQgd2l0aAorICAgICAgIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMuICBJbnN0ZWFkLCB5b3UgY2FuIGRvIGFuICBleC0KKyAgICAgICBwbGljaXQgIDxTVFJPTkc+dG91Y2h3aW4oKTwvU1RST05HPiBiZWZvcmUgdGhlIDxTVFJPTkc+d25vdXRyZWZyZXNoKCk8L1NUUk9ORz4gY2FsbCB0byBndWFyLQorICAgICAgIGFudGVlIGFuIGVudGlyZS1jb250ZW50cyBjb3B5IGFueXdoZXJlLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19zY2Fudy4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfc2NhbncuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjYxOGZmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfc2NhbncuM3guaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3NjYW53LjN4LHYgMS4xNCAyMDA2LzEyLzI0IDE2OjA1OjQ5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfc2NhbncgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3NjYW53IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NhbncuM3guaHRtbCI+Y3Vyc19zY2FudygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5zY2FudzwvU1RST05HPiwgPFNUUk9ORz53c2Nhbnc8L1NUUk9ORz4sIDxTVFJPTkc+bXZzY2FudzwvU1RST05HPiwgPFNUUk9ORz5tdndzY2FudzwvU1RST05HPiwgPFNUUk9ORz52d3NjYW53PC9TVFJPTkc+LCA8U1RST05HPnZ3X3NjYW53PC9TVFJPTkc+IC0gY29uLQorICAgICAgIHZlcnQgZm9ybWF0dGVkIGlucHV0IGZyb20gYSA8U1RST05HPmN1cnNlczwvU1RST05HPiB3aW5kb3cKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zY2FudyhjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4gPFNUUk9ORz4uLi4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+d3NjYW53KFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmbXQsPC9TVFJPTkc+IDxTVFJPTkc+Li4uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12c2NhbncoaW50PC9TVFJPTkc+IDxTVFJPTkc+eSw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz54LDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm10LDwvU1RST05HPiA8U1RST05HPi4uLik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndzY2FudyhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4gPFNUUk9ORz4uLi4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dndfc2NhbncoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZtdCw8L1NUUk9ORz4gPFNUUk9ORz52YV9saXN0PC9TVFJPTkc+IDxTVFJPTkc+dmFyZ2xpc3QpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dndzY2FudyhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZm10LDwvU1RST05HPiA8U1RST05HPnZhX2xpc3Q8L1NUUk9ORz4gPFNUUk9ORz52YXJnbGlzdCk7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+c2Nhbnc8L1NUUk9ORz4sIDxTVFJPTkc+d3NjYW53PC9TVFJPTkc+IGFuZCA8U1RST05HPm12c2Nhbnc8L1NUUk9ORz4gcm91dGluZXMgIGFyZSAgYW5hbG9nb3VzICB0bworICAgICAgIDxTVFJPTkc+c2NhbmY8L1NUUk9ORz4gIFtzZWUgPFNUUk9ORz48QSBIUkVGPSJzY2FuZi4zLmh0bWwiPnNjYW5mKDMpPC9BPjwvU1RST05HPl0uICBUaGUgZWZmZWN0IG9mIHRoZXNlIHJvdXRpbmVzIGlzIGFzCisgICAgICAgdGhvdWdoIDxTVFJPTkc+d2dldHN0cjwvU1RST05HPiB3ZXJlIGNhbGxlZCBvbiB0aGUgd2luZG93LCBhbmQgdGhlICByZXN1bHQtCisgICAgICAgaW5nIGxpbmUgdXNlZCBhcyBpbnB1dCBmb3IgPFNUUk9ORz48QSBIUkVGPSJzc2NhbmYuMy5odG1sIj5zc2NhbmYoMyk8L0E+PC9TVFJPTkc+LiAgRmllbGRzIHdoaWNoIGRvIG5vdAorICAgICAgIG1hcCB0byBhIHZhcmlhYmxlIGluIHRoZSA8RU0+Zm10PC9FTT4gZmllbGQgYXJlIGxvc3QuCisKKyAgICAgICBUaGUgPFNUUk9ORz52d3NjYW53PC9TVFJPTkc+IGFuZCA8U1RST05HPnZ3X3NjYW53PC9TVFJPTkc+IHJvdXRpbmVzIGFyZSBhbmFsb2dvdXMgdG8gPFNUUk9ORz52c2NhbmY8L1NUUk9ORz4uCisgICAgICAgVGhleSBwZXJmb3JtIGEgPFNUUk9ORz53c2Nhbnc8L1NUUk9ORz4gdXNpbmcgYSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LiAgVGhlCisgICAgICAgdGhpcmQgYXJndW1lbnQgaXMgYSA8RU0+dmE8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5saXN0PC9FTT4sIGEgcG9pbnRlciB0byBhIGxpc3Qgb2YgIGFyZ3UtCisgICAgICAgbWVudHMsIGFzIGRlZmluZWQgaW4gPFNUUk9ORz4mbHQ7c3RkYXJnLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnZ3c2Nhbnc8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVSUjwvU1RST05HPiBvbiBmYWlsdXJlIGFuZCBhbiBpbnRlZ2VyIGVxdWFsIHRvIHRoZQorICAgICAgIG51bWJlciBvZiBmaWVsZHMgc2Nhbm5lZCBvbiBzdWNjZXNzLgorCisgICAgICAgQXBwbGljYXRpb25zIG1heSB1c2UgdGhlICByZXR1cm4gIHZhbHVlICBmcm9tICB0aGUgIDxTVFJPTkc+c2Nhbnc8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz53c2Nhbnc8L1NUUk9ORz4sICA8U1RST05HPm12c2Nhbnc8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5tdndzY2FudzwvU1RST05HPiAgcm91dGluZXMgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAgIG51bWJlciBvZiBmaWVsZHMgd2hpY2ggd2VyZSBtYXBwZWQgaW4gdGhlIGNhbGwuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlICA0ICBkZXNjcmliZXMgIHRoZXNlICBmdW5jLQorICAgICAgIHRpb25zLiAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+dndzY2FudzwvU1RST05HPiBpcyBtYXJrZWQgVE8gQkUgV0lUSERSQVdOLAorICAgICAgIGFuZCBpcyB0byBiZSByZXBsYWNlZCBieSBhICBmdW5jdGlvbiAgPFNUUk9ORz52d19zY2FudzwvU1RST05HPiAgdXNpbmcgIHRoZQorICAgICAgIDxTVFJPTkc+Jmx0O3N0ZGFyZy5oJmd0OzwvU1RST05HPiBpbnRlcmZhY2UuICBUaGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbiwgVmVyLQorICAgICAgIHNpb24gMiBzdGF0ZXMgdGhhdCA8U1RST05HPnZ3X3NjYW53PC9TVFJPTkc+ICBpcyBwcmVmZXJyZWQgdG8gPFNUUk9ORz52d3NjYW53PC9TVFJPTkc+IHNpbmNlCisgICAgICAgdGhlIGxhdHRlciByZXF1aXJlcyBpbmNsdWRpbmcgPFNUUk9ORz4mbHQ7dmFyYXJncy5oJmd0OzwvU1RST05HPiwgd2hpY2ggY2Fubm90IGJlCisgICAgICAgdXNlZCBpbiB0aGUgc2FtZSBmaWxlIGFzIDxTVFJPTkc+Jmx0O3N0ZGFyZy5oJmd0OzwvU1RST05HPi4gIFRoaXMgIGltcGxlbWVudGF0aW9uCisgICAgICAgdXNlcyAgPFNUUk9ORz4mbHQ7c3RkYXJnLmgmZ3Q7PC9TVFJPTkc+IGZvciBib3RoLCBiZWNhdXNlIHRoYXQgaGVhZGVyIGlzIGluY2x1ZGVkCisgICAgICAgaW4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmg8L1NUUk9ORz4mZ3Q7LgorCisgICAgICAgQm90aCBYU0kgYW5kIFRoZSAgU2luZ2xlICBVbml4ICBTcGVjaWZpY2F0aW9uLCAgVmVyc2lvbiAgMgorICAgICAgIHN0YXRlICB0aGF0ICB0aGVzZSAgZnVuY3Rpb25zIHJldHVybiBFUlIgb3IgT0suICBTaW5jZSB0aGUKKyAgICAgICB1bmRlcmx5aW5nIDxTVFJPTkc+c2NhbmY8L1NUUk9ORz4gY2FuIHJldHVybiB0aGUgbnVtYmVyIG9mICBpdGVtcyAgc2Nhbm5lZCwKKyAgICAgICBhbmQgdGhlIFNWcjQgY29kZSB3YXMgZG9jdW1lbnRlZCB0byB1c2UgdGhpcyBmZWF0dXJlLCB0aGlzCisgICAgICAgaXMgcHJvYmFibHkgYW4gZWRpdGluZyBlcnJvciB3aGljaCB3YXMgaW50cm9kdWNlZCBpbiAgWFNJLAorICAgICAgIHJhdGhlciAgdGhhbiAgYmVpbmcgZG9uZSBpbnRlbnRpb25hbGx5LiAgUG9ydGFibGUgYXBwbGljYS0KKyAgICAgICB0aW9ucyBzaG91bGQgb25seSB0ZXN0IGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgIEVSUiwgIHNpbmNlCisgICAgICAgdGhlICBPSyB2YWx1ZSAoemVybykgaXMgbGlrZWx5IHRvIGJlIG1pc2xlYWRpbmcuICBPbmUgcG9zLQorICAgICAgIHNpYmxlIHdheSB0byBnZXQgdXNlZnVsIHJlc3VsdHMgd291bGQgYmUgIHRvICB1c2UgIGEgICIlbiIKKyAgICAgICBjb252ZXJzaW9uICBhdCB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRvIGVuc3VyZSB0aGF0CisgICAgICAgc29tZXRoaW5nIHdhcyBwcm9jZXNzZWQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludHcuM3guaHRtbCI+Y3Vyc19wcmludHcoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJzY2FuZi4zLmh0bWwiPnNjYW5mKDMpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19zY3JfZHVtcC4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ2MzIxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfc2NyX2R1bXAuM3guaHRtbApAQCAtMCwwICsxLDEzNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3Njcl9kdW1wLjN4LHYgMS43IDIwMDYvMTIvMjQgMTY6MDU6NDkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc19zY3JfZHVtcCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfc2NyX2R1bXAgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnNjcl9kdW1wPC9TVFJPTkc+LCA8U1RST05HPnNjcl9yZXN0b3JlPC9TVFJPTkc+LCA8U1RST05HPnNjcl9pbml0PC9TVFJPTkc+LCA8U1RST05HPnNjcl9zZXQ8L1NUUk9ORz4gLSByZWFkICh3cml0ZSkgYQorICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHNjcmVlbiBmcm9tICh0bykgYSBmaWxlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2NyX2R1bXAoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KmZpbGVuYW1lKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNjcl9yZXN0b3JlKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmaWxlbmFtZSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zY3JfaW5pdChjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZmlsZW5hbWUpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2NyX3NldChjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qZmlsZW5hbWUpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPnNjcl9kdW1wPC9TVFJPTkc+IHJvdXRpbmUgZHVtcHMgdGhlICBjdXJyZW50ICBjb250ZW50cyAgb2YgIHRoZQorICAgICAgIHZpcnR1YWwgc2NyZWVuIHRvIHRoZSBmaWxlIDxFTT5maWxlbmFtZTwvRU0+LgorCisgICAgICAgVGhlICA8U1RST05HPnNjcl9yZXN0b3JlPC9TVFJPTkc+ICByb3V0aW5lICBzZXRzICB0aGUgdmlydHVhbCBzY3JlZW4gdG8gdGhlCisgICAgICAgY29udGVudHMgb2YgPEVNPmZpbGVuYW1lPC9FTT4sIHdoaWNoIG11c3QgaGF2ZSBiZWVuICB3cml0dGVuICB1c2luZworICAgICAgIDxTVFJPTkc+c2NyX2R1bXA8L1NUUk9ORz4uICAgVGhlICBuZXh0IGNhbGwgdG8gPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiByZXN0b3JlcyB0aGUgc2NyZWVuCisgICAgICAgdG8gdGhlIHdheSBpdCBsb29rZWQgaW4gdGhlIGR1bXAgZmlsZS4KKworICAgICAgIFRoZSA8U1RST05HPnNjcl9pbml0PC9TVFJPTkc+IHJvdXRpbmUgcmVhZHMgaW4gdGhlIGNvbnRlbnRzIG9mIDxFTT5maWxlbmFtZTwvRU0+IGFuZAorICAgICAgIHVzZXMgIHRoZW0gIHRvIGluaXRpYWxpemUgdGhlIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGRhdGEgc3RydWN0dXJlcyBhYm91dAorICAgICAgIHdoYXQgdGhlIHRlcm1pbmFsIGN1cnJlbnRseSBoYXMgb24gaXRzIHNjcmVlbi4gIElmIHRoZSBkYS0KKyAgICAgICB0YSBpcyBkZXRlcm1pbmVkIHRvIGJlIHZhbGlkLCA8U1RST05HPmN1cnNlczwvU1RST05HPiBiYXNlcyBpdHMgbmV4dCB1cGRhdGUKKyAgICAgICBvZiB0aGUgc2NyZWVuIG9uIHRoaXMgaW5mb3JtYXRpb24gcmF0aGVyIHRoYW4gY2xlYXJpbmcgdGhlCisgICAgICAgc2NyZWVuICBhbmQgc3RhcnRpbmcgZnJvbSBzY3JhdGNoLiAgPFNUUk9ORz5zY3JfaW5pdDwvU1RST05HPiBpcyB1c2VkIGFmdGVyCisgICAgICAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+IG9yIGEgPFNUUk9ORz5zeXN0ZW08L1NUUk9ORz4gY2FsbCB0byBzaGFyZSB0aGUgc2NyZWVuIHdpdGggIGFub3RoZXIKKyAgICAgICBwcm9jZXNzICB3aGljaCAgaGFzIGRvbmUgYSA8U1RST05HPnNjcl9kdW1wPC9TVFJPTkc+IGFmdGVyIGl0cyA8U1RST05HPmVuZHdpbjwvU1RST05HPiBjYWxsLgorICAgICAgIFRoZSBkYXRhIGlzIGRlY2xhcmVkIGludmFsaWQgaWYgdGhlIHRlcm1pbmZvICBjYXBhYmlsaXRpZXMKKyAgICAgICA8U1RST05HPnJtY3VwPC9TVFJPTkc+IGFuZCA8U1RST05HPm5ycm1jPC9TVFJPTkc+IGV4aXN0OyBhbHNvIGlmIHRoZSB0ZXJtaW5hbCBoYXMgYmVlbiB3cml0LQorICAgICAgIHRlbiB0byBzaW5jZSB0aGUgcHJlY2VkaW5nIDxTVFJPTkc+c2NyX2R1bXA8L1NUUk9ORz4gY2FsbC4KKworICAgICAgIFRoZSA8U1RST05HPnNjcl9zZXQ8L1NUUk9ORz4gcm91dGluZSBpcyBhIGNvbWJpbmF0aW9uICBvZiAgPFNUUk9ORz5zY3JfcmVzdG9yZTwvU1RST05HPiAgYW5kCisgICAgICAgPFNUUk9ORz5zY3JfaW5pdDwvU1RST05HPi4gICBJdCAgdGVsbHMgIHRoZSBwcm9ncmFtIHRoYXQgdGhlIGluZm9ybWF0aW9uIGluCisgICAgICAgPEVNPmZpbGVuYW1lPC9FTT4gaXMgd2hhdCBpcyBjdXJyZW50bHkgb24gdGhlIHNjcmVlbiwgYW5kIGFsc28gd2hhdAorICAgICAgIHRoZSAgcHJvZ3JhbSAgd2FudHMgb24gdGhlIHNjcmVlbi4gIFRoaXMgY2FuIGJlIHRob3VnaHQgb2YKKyAgICAgICBhcyBhIHNjcmVlbiBpbmhlcml0YW5jZSBmdW5jdGlvbi4KKworICAgICAgIFRvIHJlYWQgKHdyaXRlKSBhIHdpbmRvdyBmcm9tICh0bykgYSBmaWxlLCB1c2UgdGhlICA8U1RST05HPmdldHdpbjwvU1RST05HPgorICAgICAgIGFuZCA8U1RST05HPnB1dHdpbjwvU1RST05HPiByb3V0aW5lcyBbc2VlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+XS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgQWxsICByb3V0aW5lcyAgcmV0dXJuICB0aGUgaW50ZWdlciA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4KKyAgICAgICB1cG9uIHN1Y2Nlc3MuCisKKyAgICAgICBYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gIHRoaXMgIGltcGxlbWVudGEtCisgICAgICAgdGlvbiwgIGVhY2ggIHdpbGwgIHJldHVybiAgYW4gIGVycm9yIGlmIHRoZSBmaWxlIGNhbm5vdCBiZQorICAgICAgIG9wZW5lZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBOb3RlICB0aGF0ICA8U1RST05HPnNjcl9pbml0PC9TVFJPTkc+LCAgPFNUUk9ORz5zY3Jfc2V0PC9TVFJPTkc+LCAgYW5kICA8U1RST05HPnNjcl9yZXN0b3JlPC9TVFJPTkc+ICBtYXkgIGJlCisgICAgICAgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgWFNJICBDdXJzZXMgIHN0YW5kYXJkLCBJc3N1ZSA0LCBkZXNjcmliZXMgdGhlc2UgZnVuYy0KKyAgICAgICB0aW9ucyAoYWRkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXJzKS4KKworICAgICAgIFRoZSBTVnI0IGRvY3MgbWVyZWx5IHNheSB1bmRlciA8U1RST05HPnNjcl9pbml0PC9TVFJPTkc+IHRoYXQgdGhlIGR1bXAgZGF0YQorICAgICAgIGlzICBhbHNvICBjb25zaWRlcmVkIGludmFsaWQgImlmIHRoZSB0aW1lLXN0YW1wIG9mIHRoZSB0dHkKKyAgICAgICBpcyBvbGQiIGJ1dCBkbyBub3QgZGVmaW5lICJvbGQiLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPiwgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ic3lzdGVtLjMuaHRtbCI+c3lzdGVtKDMpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19zY3JvbGwuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3Njcm9sbC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDE1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc19zY3JvbGwuM3guaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3Njcm9sbC4zeCx2IDEuMTMgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3Njcm9sbCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfc2Nyb2xsIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcm9sbC4zeC5odG1sIj5jdXJzX3Njcm9sbCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2Nyb2xsLjN4Lmh0bWwiPmN1cnNfc2Nyb2xsKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnNjcm9sbDwvU1RST05HPiwgPFNUUk9ORz5zY3JsPC9TVFJPTkc+LCA8U1RST05HPndzY3JsPC9TVFJPTkc+IC0gc2Nyb2xsIGEgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2Nyb2xsKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2NybChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndzY3JsKFdJTkRPVzwvU1RST05HPiA8U1RST05HPip3aW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPnNjcm9sbDwvU1RST05HPiAgcm91dGluZSBzY3JvbGxzIHRoZSB3aW5kb3cgdXAgb25lIGxpbmUuICBUaGlzCisgICAgICAgaW52b2x2ZXMgbW92aW5nIHRoZSBsaW5lcyBpbiB0aGUgIHdpbmRvdyAgZGF0YSAgc3RydWN0dXJlLgorICAgICAgIEFzICBhbiBvcHRpbWl6YXRpb24sIGlmIHRoZSBzY3JvbGxpbmcgcmVnaW9uIG9mIHRoZSB3aW5kb3cKKyAgICAgICBpcyB0aGUgZW50aXJlIHNjcmVlbiwgdGhlIHBoeXNpY2FsIHNjcmVlbiBtYXkgYmUgIHNjcm9sbGVkCisgICAgICAgYXQgdGhlIHNhbWUgdGltZS4KKworICAgICAgIEZvciAgcG9zaXRpdmUgIDxFTT5uPC9FTT4sICB0aGUgIDxTVFJPTkc+c2NybDwvU1RST05HPiBhbmQgPFNUUk9ORz53c2NybDwvU1RST05HPiByb3V0aW5lcyBzY3JvbGwgdGhlCisgICAgICAgd2luZG93IHVwIDxFTT5uPC9FTT4gbGluZXMgKGxpbmUgPEVNPmk8L0VNPis8RU0+bjwvRU0+IGJlY29tZXMgPEVNPmk8L0VNPik7ICBvdGhlcndpc2UgIHNjcm9sbAorICAgICAgIHRoZSAgd2luZG93ICBkb3duIDxFTT5uPC9FTT4gbGluZXMuICBUaGlzIGludm9sdmVzIG1vdmluZyB0aGUgbGluZXMKKyAgICAgICBpbiB0aGUgd2luZG93IGNoYXJhY3RlciBpbWFnZSBzdHJ1Y3R1cmUuICBUaGUgY3VycmVudCBjdXItCisgICAgICAgc29yIHBvc2l0aW9uIGlzIG5vdCBjaGFuZ2VkLgorCisgICAgICAgRm9yIHRoZXNlIGZ1bmN0aW9ucyB0byB3b3JrLCBzY3JvbGxpbmcgbXVzdCBiZSBlbmFibGVkIHZpYQorICAgICAgIDxTVFJPTkc+c2Nyb2xsb2s8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUsIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IChTVnI0ICBvbmx5CisgICAgICAgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3MtCisgICAgICAgZnVsIGNvbXBsZXRpb24uCisKKyAgICAgICBYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorCisgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgcG9pbnRlcgorICAgICAgIGlzICBudWxsLCAgb3IgIGlmICBzY3JvbGxpbmcgaXMgbm90IGVuYWJsZWQgaW4gdGhlIHdpbmRvdywKKyAgICAgICBlLmcuLCB3aXRoIDxTVFJPTkc+c2Nyb2xsb2s8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IDxTVFJPTkc+c2NybDwvU1RST05HPiBhbmQgPFNUUk9ORz5zY3JvbGw8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworICAgICAgIFRoZSBTVnI0IGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IHRoZSBvcHRpbWl6YXRpb24gb2YgcGh5cy0KKyAgICAgICBpY2FsbHkgIHNjcm9sbGluZyAgaW1tZWRpYXRlbHkgaWYgdGhlIHNjcm9sbCByZWdpb24gaXMgdGhlCisgICAgICAgZW50aXJlIHNjcmVlbiAiaXMiICBwZXJmb3JtZWQsICBub3QgICJtYXkgIGJlIiAgcGVyZm9ybWVkLgorICAgICAgIFRoaXMgIGltcGxlbWVudGF0aW9uICBkZWxpYmVyYXRlbHkgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQKKyAgICAgICB0aGlzIHdpbGwgb2NjdXIsIHRvIGxlYXZlIG9wZW4gdGhlIHBvc3NpYmlsaXR5IG9mICBzbWFydGVyCisgICAgICAgb3B0aW1pemF0aW9uICBvZiAgbXVsdGlwbGUgIHNjcm9sbCBhY3Rpb25zIG9uIHRoZSBuZXh0IHVwLQorICAgICAgIGRhdGUuCisKKyAgICAgICBOZWl0aGVyIHRoZSBTVnI0IG5vciB0aGUgWFNJIGRvY3VtZW50YXRpb24gc3BlY2lmeSB3aGV0aGVyCisgICAgICAgdGhlIGN1cnJlbnQgYXR0cmlidXRlIG9yIGN1cnJlbnQgY29sb3ItcGFpciBvZiBibGFua3MgZ2VuLQorICAgICAgIGVyYXRlZCBieSB0aGUgc2Nyb2xsIGZ1bmN0aW9uIGlzIHplcm9lZC4gIFVuZGVyICB0aGlzICBpbS0KKyAgICAgICBwbGVtZW50YXRpb24gaXQgaXMuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICBYU0kgIEN1cnNlcyAgc3RhbmRhcmQsICBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jLQorICAgICAgIHRpb25zLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcm9sbC4zeC5odG1sIj5jdXJzX3Njcm9sbCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3Nsay4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfc2xrLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2ZGNjNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3Nsay4zeC5odG1sCkBAIC0wLDAgKzEsMjE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfc2xrLjN4LHYgMS4xNiAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfc2xrIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc19zbGsgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+c2xrX2luaXQ8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX3NldDwvU1RST05HPiwgPFNUUk9ORz5zbGtfcmVmcmVzaDwvU1RST05HPiwgPFNUUk9ORz5zbGtfbm91dHJlZnJlc2g8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5zbGtfbGFiZWw8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2NsZWFyPC9TVFJPTkc+LCA8U1RST05HPnNsa19yZXN0b3JlPC9TVFJPTkc+LCA8U1RST05HPnNsa190b3VjaDwvU1RST05HPiwgPFNUUk9ORz5zbGtfYXR0cm9uPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+c2xrX2F0dHJzZXQ8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJvZmY8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJfb248L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJfc2V0PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+c2xrX2F0dHJfb2ZmPC9TVFJPTkc+LCA8U1RST05HPnNsa19hdHRyPC9TVFJPTkc+LCA8U1RST05HPnNsa19jb2xvcjwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHNvZnQgbGFiZWwKKyAgICAgICByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19pbml0KGludDwvU1RST05HPiA8U1RST05HPmZtdCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfc2V0KGludDwvU1RST05HPiA8U1RST05HPmxhYm51bSw8L1NUUk9ORz4gPFNUUk9ORz5jb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qbGFiZWwsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Zm10KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19yZWZyZXNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2xrX25vdXRyZWZyZXNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipzbGtfbGFiZWwoaW50PC9TVFJPTkc+IDxTVFJPTkc+bGFibnVtKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19jbGVhcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19yZXN0b3JlKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2xrX3RvdWNoKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2xrX2F0dHJvbihjb25zdDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmF0dHJzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19hdHRyb2ZmKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2xrX2F0dHJzZXQoY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zbGtfYXR0cl9vbihhdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRycyw8L1NUUk9ORz4gPFNUUk9ORz52b2lkKjwvU1RST05HPiA8U1RST05HPm9wdHMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2xrX2F0dHJfb2ZmKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+IDxTVFJPTkc+YXR0cnMsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4gPFNUUk9ORz5vcHRzKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19hdHRyX3NldChjb25zdDwvU1RST05HPiA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8U1RST05HPmF0dHJzLDwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz5zaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yX3BhaXJfbnVtYmVyLDwvU1RST05HPiA8U1RST05HPnZvaWQqPC9TVFJPTkc+IDxTVFJPTkc+b3B0cyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5zbGtfYXR0cih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnNsa19jb2xvcihzaG9ydDwvU1RST05HPiA8U1RST05HPmNvbG9yX3BhaXJfbnVtYmVyKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgc2xrKiBmdW5jdGlvbnMgbWFuaXB1bGF0ZSB0aGUgc2V0IG9mIHNvZnQgZnVuY3Rpb24ta2V5CisgICAgICAgbGFiZWxzIHRoYXQgZXhpc3Qgb24gbWFueSB0ZXJtaW5hbHMuICBGb3IgdGhvc2UgIHRlcm1pbmFscworICAgICAgIHRoYXQgZG8gbm90IGhhdmUgc29mdCBsYWJlbHMsIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHRha2VzIG92ZXIgdGhlIGJvdHRvbQorICAgICAgIGxpbmUgb2YgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4sIHJlZHVjaW5nIHRoZSBzaXplIG9mIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+IGFuZCB0aGUgIHZhcmktCisgICAgICAgYWJsZSAgPFNUUk9ORz5MSU5FUzwvU1RST05HPi4gIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHN0YW5kYXJkaXplcyBvbiBlaWdodCBsYWJlbHMgb2YgdXAgdG8KKyAgICAgICBlaWdodCBjaGFyYWN0ZXJzIGVhY2guIEluIGFkZGl0aW9uIHRvICB0aGlzLCAgdGhlICBuY3Vyc2VzCisgICAgICAgaW1wbGVtZW50YXRpb24gIHN1cHBvcnRzICBhIG1vZGUgd2hlcmUgaXQgc2ltdWxhdGVzIDEyIGxhLQorICAgICAgIGJlbHMgb2YgdXAgdG8gZml2ZSBjaGFyYWN0ZXJzIGVhY2guIFRoaXMgIGlzICBtb3N0ICBjb21tb24KKyAgICAgICBmb3IgIHRvZGF5cyAgUEMgIGxpa2UgIGVuZHVzZXIgIGRldmljZXMuICBQbGVhc2Ugbm90ZSB0aGF0CisgICAgICAgbmN1cnNlcyBzaW11bGF0ZXMgdGhpcyBtb2RlIGJ5IHRha2luZyBvdmVyIHVwIHRvIHR3byBsaW5lcworICAgICAgIGF0ICB0aGUgIGJvdHRvbSAgb2YgdGhlIHNjcmVlbiwgaXQgZG9lcyBub3QgdHJ5IHRvIHVzZSBhbnkKKyAgICAgICBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGlzIG1vZGUuCisKKyAgICAgICBUaGUgPFNUUk9ORz5zbGtfaW5pdDwvU1RST05HPiByb3V0aW5lIG11c3QgIGJlICBjYWxsZWQgIGJlZm9yZSAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+ICBvcgorICAgICAgIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiBpcyBjYWxsZWQuICBJZiA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gZXZlbnR1YWxseSB1c2VzIGEgbGluZSBmcm9tCisgICAgICAgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4gdG8gZW11bGF0ZSB0aGUgc29mdCBsYWJlbHMsIHRoZW4gPEVNPmZtdDwvRU0+IGRldGVybWluZXMgaG93CisgICAgICAgdGhlICBsYWJlbHMgIGFyZSBhcnJhbmdlZCBvbiB0aGUgc2NyZWVuLiAgU2V0dGluZyA8RU0+Zm10PC9FTT4gdG8gPFNUUk9ORz4wPC9TVFJPTkc+CisgICAgICAgaW5kaWNhdGVzIGEgMy0yLTMgYXJyYW5nZW1lbnQgb2YgdGhlIGxhYmVscywgPFNUUk9ORz4xPC9TVFJPTkc+IGluZGljYXRlcyBhCisgICAgICAgNC00IGFycmFuZ2VtZW50IGFuZCA8U1RST05HPjI8L1NUUk9ORz4gaW5kaWNhdGVzIHRoZSBQQyBsaWtlIDQtNC00IG1vZGUuIElmCisgICAgICAgPFNUUk9ORz5mbXQ8L1NUUk9ORz4gaXMgc2V0IHRvIDxTVFJPTkc+MzwvU1RST05HPiwgaXQgaXMgYWdhaW4gdGhlIFBDIGxpa2UgNC00LTQgIG1vZGUsICBidXQKKyAgICAgICBpbiAgYWRkaXRpb24gIGFuIGluZGV4IGxpbmUgaXMgZ2VuZXJhdGVkLCBoZWxwaW5nIHRoZSB1c2VyCisgICAgICAgdG8gaWRlbnRpZnkgdGhlIGtleSBudW1iZXJzIGVhc2lseS4KKworICAgICAgIFRoZSA8U1RST05HPnNsa19zZXQ8L1NUUk9ORz4gcm91dGluZSByZXF1aXJlcyA8RU0+bGFibnVtPC9FTT4gdG8gYmUgYSBsYWJlbCAgbnVtYmVyLAorICAgICAgIGZyb20gPFNUUk9ORz4xPC9TVFJPTkc+IHRvIDxTVFJPTkc+ODwvU1RST05HPiAocmVzcC4gPFNUUk9ORz4xMjwvU1RST05HPik7IDxFTT5sYWJlbDwvRU0+IG11c3QgYmUgdGhlIHN0cmluZyB0byBiZSBwdXQKKyAgICAgICBvbiB0aGUgbGFiZWwsIHVwICB0byAgZWlnaHQgIChyZXNwLiAgZml2ZSkgIGNoYXJhY3RlcnMgIGluCisgICAgICAgbGVuZ3RoLiAgIEEgIG51bGwgc3RyaW5nIG9yIGEgbnVsbCBwb2ludGVyIHNldHMgdXAgYSBibGFuaworICAgICAgIGxhYmVsLiA8RU0+Zm10PC9FTT4gaXMgZWl0aGVyIDxTVFJPTkc+MDwvU1RST05HPiwgPFNUUk9ORz4xPC9TVFJPTkc+LCBvciA8U1RST05HPjI8L1NUUk9ORz4sICBpbmRpY2F0aW5nICB3aGV0aGVyICB0aGUKKyAgICAgICBsYWJlbCAgaXMgIHRvIGJlIGxlZnQtanVzdGlmaWVkLCBjZW50ZXJlZCwgb3IgcmlnaHQtanVzdGktCisgICAgICAgZmllZCwgcmVzcGVjdGl2ZWx5LCB3aXRoaW4gdGhlIGxhYmVsLgorCisgICAgICAgVGhlIDxTVFJPTkc+c2xrX3JlZnJlc2g8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c2xrX25vdXRyZWZyZXNoPC9TVFJPTkc+IHJvdXRpbmVzIGNvcnJlc3BvbmQgdG8KKyAgICAgICB0aGUgPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPiBhbmQgPFNUUk9ORz53bm91dHJlZnJlc2g8L1NUUk9ORz4gcm91dGluZXMuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+c2xrX2xhYmVsPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyB0aGUgY3VycmVudCBsYWJlbCBmb3IgbGFiZWwKKyAgICAgICBudW1iZXIgPEVNPmxhYm51bTwvRU0+LCB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGJsYW5rcyAgc3RyaXBwZWQuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+c2xrX2NsZWFyPC9TVFJPTkc+ICByb3V0aW5lICBjbGVhcnMgIHRoZSAgc29mdCBsYWJlbHMgZnJvbSB0aGUKKyAgICAgICBzY3JlZW4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5zbGtfcmVzdG9yZTwvU1RST05HPiByb3V0aW5lIHJlc3RvcmVzIHRoZSBzb2Z0ICBsYWJlbHMgIHRvICB0aGUKKyAgICAgICBzY3JlZW4gYWZ0ZXIgYSA8U1RST05HPnNsa19jbGVhcjwvU1RST05HPiBoYXMgYmVlbiBwZXJmb3JtZWQuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+c2xrX3RvdWNoPC9TVFJPTkc+ICByb3V0aW5lICBmb3JjZXMgIGFsbCB0aGUgc29mdCBsYWJlbHMgdG8gYmUKKyAgICAgICBvdXRwdXQgdGhlIG5leHQgdGltZSBhIDxTVFJPTkc+c2xrX25vdXRyZWZyZXNoPC9TVFJPTkc+IGlzIHBlcmZvcm1lZC4KKworICAgICAgIFRoZSA8U1RST05HPnNsa19hdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJzZXQ8L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2F0dHJvZmY8L1NUUk9ORz4gYW5kIDxTVFJPTkc+c2xrX2F0dHI8L1NUUk9ORz4gcm91LQorICAgICAgIHRpbmVzIGNvcnJlc3BvbmQgdG8gPFNUUk9ORz5hdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+YXR0cnNldDwvU1RST05HPiwgPFNUUk9ORz5hdHRyb2ZmPC9TVFJPTkc+IGFuZCA8U1RST05HPmF0dHJfZ2V0PC9TVFJPTkc+LgorICAgICAgIFRoZXkgaGF2ZSBhbiBlZmZlY3Qgb25seSBpZiBzb2Z0IGxhYmVscyBhcmUgIHNpbXVsYXRlZCAgb24KKyAgICAgICB0aGUgIGJvdHRvbSBsaW5lIG9mIHRoZSBzY3JlZW4uICBUaGUgZGVmYXVsdCBoaWdobGlnaHQgZm9yCisgICAgICAgc29mdCBrZXlzIGlzIEFfU1RBTkRPVVQgKGFzIGluIFN5c3RlbSBWIGN1cnNlcywgd2hpY2ggZG9lcworICAgICAgIG5vdCBkb2N1bWVudCB0aGlzIGZhY3QpLgorCisgICAgICAgVGhlICA8U1RST05HPnNsa19jb2xvcjwvU1RST05HPiByb3V0aW5lIGNvcnJlc3BvbmRzIHRvIDxTVFJPTkc+Y29sb3Jfc2V0PC9TVFJPTkc+LiBJdCBoYXMgYW4KKyAgICAgICBlZmZlY3Qgb25seSBpZiBzb2Z0IGxhYmVscyBhcmUgIHNpbXVsYXRlZCAgb24gIHRoZSAgYm90dG9tCisgICAgICAgbGluZSBvZiB0aGUgc2NyZWVuLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCBPSyAoU1ZyNCBzcGVjaS0KKyAgICAgICBmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzcy0KKyAgICAgICBmdWwgY29tcGxldGlvbi4KKworICAgICAgIFgvT3BlbiAgZGVmaW5lcyAgbm8gZXJyb3IgY29uZGl0aW9ucy4gIEluIHRoaXMgaW1wbGVtZW50YS0KKyAgICAgICB0aW9uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfYXR0cjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgdGhlIGF0dHJpYnV0ZSB1c2VkIGZvciB0aGUgc29mdCAga2V5cy4KKworICAgICAgICAgICAgICA8U1RST05HPnNsa19hdHRyb2ZmPC9TVFJPTkc+LCA8U1RST05HPnNsa19hdHRyb248L1NUUk9ORz4sIDxTVFJPTkc+c2xrX2NsZWFyPC9TVFJPTkc+LAorICAgICAgICAgICAgICA8U1RST05HPnNsa19ub3V0cmVmcmVzaDwvU1RST05HPiwgPFNUUk9ORz5zbGtfcmVmcmVzaDwvU1RST05HPiwgPFNUUk9ORz5zbGtfdG91Y2g8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm4gIGFuICBlcnJvciBpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnQtCisgICAgICAgICAgICAgICAgICAga2V5cyB3ZXJlIG5vdCBpbml0aWFsaXplZC4KKworICAgICAgICAgICAgICA8U1RST05HPnNsa19hdHRyc2V0PC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgb3IgdGhlICBzb2Z0LQorICAgICAgICAgICAgICAgICAgIGtleXMgd2VyZSBub3QgaW5pdGlhbGl6ZWQuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfYXR0cl9zZXQ8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnQtCisgICAgICAgICAgICAgICAgICAga2V5cyB3ZXJlIG5vdCBpbml0aWFsaXplZCwgb3IgdGhlICBjb2xvciAgcGFpcgorICAgICAgICAgICAgICAgICAgIGlzIG91dHNpZGUgdGhlIHJhbmdlIDAuLkNPTE9SX1BBSVJTLTEsIG9yIG9wdHMKKyAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KKworICAgICAgICAgICAgICA8U1RST05HPnNsa19jb2xvcjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIG9yIHRoZSAgc29mdC0KKyAgICAgICAgICAgICAgICAgICBrZXlzICB3ZXJlICBub3QgaW5pdGlhbGl6ZWQsIG9yIHRoZSBjb2xvciBwYWlyCisgICAgICAgICAgICAgICAgICAgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMC4uQ09MT1JfUEFJUlMtMS4KKworICAgICAgICAgICAgICA8U1RST05HPnNsa19pbml0PC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgIGZvcm1hdCAgcGFyYW1ldGVyICBpcworICAgICAgICAgICAgICAgICAgIG91dHNpZGUgdGhlIHJhbmdlIDAuLjMuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zbGtfbGFiZWw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIDxTVFJPTkc+TlVMTDwvU1RST05HPiBvbiBlcnJvci4KKworICAgICAgICAgICAgICA8U1RST05HPnNsa19zZXQ8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnQtCisgICAgICAgICAgICAgICAgICAga2V5cyB3ZXJlIG5vdCBpbml0aWFsaXplZCwgb3IgdGhlICA8RU0+bGFibnVtPC9FTT4gIHBhLQorICAgICAgICAgICAgICAgICAgIHJhbWV0ZXIgIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIGxhYmVsIGNvdW50cywKKyAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgIGZvcm1hdCAgcGFyYW1ldGVyICBpcyAgb3V0c2lkZSAgdGhlCisgICAgICAgICAgICAgICAgICAgcmFuZ2UgMC4uMiwgb3IgaWYgbWVtb3J5IGZvciB0aGUgbGFiZWxzIGNhbm5vdAorICAgICAgICAgICAgICAgICAgIGJlIGFsbG9jYXRlZC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBNb3N0IGFwcGxpY2F0aW9ucyB3b3VsZCB1c2UgPFNUUk9ORz5zbGtfbm91dHJlZnJlc2g8L1NUUk9ORz4gYmVjYXVzZSBhIDxTVFJPTkc+d3JlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+ZnJlc2g8L1NUUk9ORz4gaXMgbGlrZWx5IHRvIGZvbGxvdyBzb29uLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSAgWFNJICBDdXJzZXMgIHN0YW5kYXJkLCBJc3N1ZSA0LCBkZXNjcmliZXMgdGhlc2UgZnVuYy0KKyAgICAgICB0aW9ucy4gIEl0IGNoYW5nZXMgdGhlIGFyZ3VtZW50IHR5cGUgb2YgdGhlICBhdHRyaWJ1dGUtbWEtCisgICAgICAgbmlwdWxhdGlvbiAgZnVuY3Rpb25zIDxTVFJPTkc+c2xrX2F0dHJvbjwvU1RST05HPiwgPFNUUk9ORz5zbGtfYXR0cm9mZjwvU1RST05HPiwgPFNUUk9ORz5zbGtfYXR0cnNldDwvU1RST05HPgorICAgICAgIHRvIGJlIDxTVFJPTkc+YXR0cl90PC9TVFJPTkc+LCBhbmQgYWRkcyA8U1RST05HPmNvbnN0PC9TVFJPTkc+IHF1YWxpZmllcnMuIFRoZSBmb3JtYXQgIGNvZGVzCisgICAgICAgPFNUUk9ORz4yPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz4zPC9TVFJPTkc+IGZvciA8U1RST05HPnNsa19pbml0KCk8L1NUUk9ORz4gYW5kIHRoZSBmdW5jdGlvbiA8U1RST05HPnNsa19hdHRyPC9TVFJPTkc+IGFyZSBzcGUtCisgICAgICAgY2lmaWMgdG8gbmN1cnNlcy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPiwgICA8U1RST05HPmN1cnNfcmUtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+ZnJlc2goM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190ZXJtYXR0cnMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWYzYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWF0dHJzLjN4Lmh0bWwKQEAgLTAsMCArMSwxNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc190ZXJtYXR0cnMuM3gsdiAxLjEwIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc190ZXJtYXR0cnMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3Rlcm1hdHRycyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5iYXVkcmF0ZTwvU1RST05HPiwgPFNUUk9ORz5lcmFzZWNoYXI8L1NUUk9ORz4sIDxTVFJPTkc+ZXJhc2V3Y2hhcjwvU1RST05HPiwgPFNUUk9ORz5oYXNfaWM8L1NUUk9ORz4sIDxTVFJPTkc+aGFzX2lsPC9TVFJPTkc+LCA8U1RST05HPmtpbGxjaGFyPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+a2lsbHdjaGFyPC9TVFJPTkc+LCA8U1RST05HPmxvbmduYW1lPC9TVFJPTkc+LCAgPFNUUk9ORz50ZXJtX2F0dHJzPC9TVFJPTkc+LCAgPFNUUk9ORz50ZXJtYXR0cnM8L1NUUk9ORz4sICA8U1RST05HPnRlcm1uYW1lPC9TVFJPTkc+ICAtCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gZW52aXJvbm1lbnQgcXVlcnkgcm91dGluZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5iYXVkcmF0ZSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz5lcmFzZWNoYXIodm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5lcmFzZXdjaGFyKHdjaGFyX3Q8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmNoPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ib29sPC9TVFJPTkc+IDxTVFJPTkc+aGFzX2ljKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmhhc19pbCh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz5raWxsY2hhcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmtpbGx3Y2hhcih3Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5jaDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipsb25nbmFtZSh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmF0dHJfdDwvU1RST05HPiA8U1RST05HPnRlcm1fYXR0cnModm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz50ZXJtYXR0cnModm9pZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnRlcm1uYW1lKHZvaWQpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5iYXVkcmF0ZTwvU1RST05HPiByb3V0aW5lIHJldHVybnMgdGhlIG91dHB1dCBzcGVlZCBvZiB0aGUgdGVyLQorICAgICAgIG1pbmFsLiAgVGhlIG51bWJlciByZXR1cm5lZCBpcyBpbiAgYml0cyAgcGVyICBzZWNvbmQsICBmb3IKKyAgICAgICBleGFtcGxlIDxTVFJPTkc+OTYwMDwvU1RST05HPiwgYW5kIGlzIGFuIGludGVnZXIuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+ZXJhc2VjaGFyPC9TVFJPTkc+ICByb3V0aW5lICByZXR1cm5zICB0aGUgdXNlcidzIGN1cnJlbnQgZXJhc2UKKyAgICAgICBjaGFyYWN0ZXIuCisKKyAgICAgICBUaGUgPFNUUk9ORz5lcmFzZXdjaGFyPC9TVFJPTkc+IHJvdXRpbmUgc3RvcmVzIHRoZSBjdXJyZW50IGVyYXNlICBjaGFyYWN0ZXIKKyAgICAgICBpbiAgdGhlICBsb2NhdGlvbiByZWZlcmVuY2VkIGJ5IDxFTT5jaDwvRU0+LiAgSWYgbm8gZXJhc2UgY2hhcmFjdGVyCisgICAgICAgaGFzIGJlZW4gZGVmaW5lZCwgdGhlIHJvdXRpbmUgZmFpbHMgYW5kIHRoZSBsb2NhdGlvbiAgcmVmLQorICAgICAgIGVyZW5jZWQgYnkgPEVNPmNoPC9FTT4gaXMgbm90IGNoYW5nZWQuCisKKyAgICAgICBUaGUgPFNUUk9ORz5oYXNfaWM8L1NUUk9ORz4gcm91dGluZSBpcyB0cnVlIGlmIHRoZSB0ZXJtaW5hbCBoYXMgaW5zZXJ0LSBhbmQKKyAgICAgICBkZWxldGUtIGNoYXJhY3RlciBjYXBhYmlsaXRpZXMuCisKKyAgICAgICBUaGUgPFNUUk9ORz5oYXNfaWw8L1NUUk9ORz4gcm91dGluZSBpcyB0cnVlIGlmIHRoZSB0ZXJtaW5hbCBoYXMgaW5zZXJ0LSBhbmQKKyAgICAgICBkZWxldGUtbGluZSAgY2FwYWJpbGl0aWVzLCAgb3IgIGNhbiAgc2ltdWxhdGUgIHRoZW0gIHVzaW5nCisgICAgICAgc2Nyb2xsaW5nIHJlZ2lvbnMuICBUaGlzIG1pZ2h0IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmICBpdAorICAgICAgIHdvdWxkICBiZSAgYXBwcm9wcmlhdGUgdG8gdHVybiBvbiBwaHlzaWNhbCBzY3JvbGxpbmcgdXNpbmcKKyAgICAgICA8U1RST05HPnNjcm9sbG9rPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+a2lsbGNoYXI8L1NUUk9ORz4gcm91dGluZSByZXR1cm5zIHRoZSB1c2VyJ3MgY3VycmVudCBsaW5lICBraWxsCisgICAgICAgY2hhcmFjdGVyLgorCisgICAgICAgVGhlIDxTVFJPTkc+a2lsbHdjaGFyPC9TVFJPTkc+IHJvdXRpbmUgc3RvcmVzIHRoZSBjdXJyZW50IGxpbmUta2lsbCBjaGFyYWMtCisgICAgICAgdGVyIGluIHRoZSBsb2NhdGlvbiByZWZlcmVuY2VkIGJ5ICA8RU0+Y2g8L0VNPi4gICBJZiAgbm8gIGxpbmUta2lsbAorICAgICAgIGNoYXJhY3RlciAgaGFzICBiZWVuICBkZWZpbmVkLCAgdGhlICByb3V0aW5lIGZhaWxzIGFuZCB0aGUKKyAgICAgICBsb2NhdGlvbiByZWZlcmVuY2VkIGJ5IDxFTT5jaDwvRU0+IGlzIG5vdCBjaGFuZ2VkLgorCisgICAgICAgVGhlIDxTVFJPTkc+bG9uZ25hbWU8L1NUUk9ORz4gcm91dGluZSByZXR1cm5zIGEgcG9pbnRlciB0byAgYSAgc3RhdGljICBhcmVhCisgICAgICAgY29udGFpbmluZyAgYSB2ZXJib3NlIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50IHRlcm1pbmFsLgorICAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHZlcmJvc2UgZGVzY3JpcHRpb24gaXMgMTI4IGNoYXJhYy0KKyAgICAgICB0ZXJzLiAgIEl0ICBpcyAgZGVmaW5lZCAgb25seSBhZnRlciB0aGUgY2FsbCB0byA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gb3IKKyAgICAgICA8U1RST05HPm5ld3Rlcm08L1NUUk9ORz4uICBUaGUgYXJlYSBpcyBvdmVyd3JpdHRlbiBieSBlYWNoIGNhbGwgdG8gIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPgorICAgICAgIGFuZCAgaXMgIG5vdCAgcmVzdG9yZWQgYnkgPFNUUk9ORz5zZXRfdGVybTwvU1RST05HPiwgc28gdGhlIHZhbHVlIHNob3VsZCBiZQorICAgICAgIHNhdmVkIGJldHdlZW4gY2FsbHMgdG8gPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+IGlmIDxTVFJPTkc+bG9uZ25hbWU8L1NUUk9ORz4gaXMgZ29pbmcgdG8gIGJlCisgICAgICAgdXNlZCB3aXRoIG11bHRpcGxlIHRlcm1pbmFscy4KKworICAgICAgIElmICBhICBnaXZlbiAgdGVybWluYWwgIGRvZXMgbm90IHN1cHBvcnQgYSB2aWRlbyBhdHRyaWJ1dGUKKyAgICAgICB0aGF0IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gaXMgdHJ5aW5nIHRvIHVzZSwgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+ICBtYXkKKyAgICAgICBzdWJzdGl0dXRlICBhICBkaWZmZXJlbnQgIHZpZGVvICBhdHRyaWJ1dGUgIGZvciAgaXQuICAgVGhlCisgICAgICAgPFNUUk9ORz50ZXJtYXR0cnM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+dGVybV9hdHRyczwvU1RST05HPiBmdW5jdGlvbnMgcmV0dXJuIGEgbG9naWNhbCA8U1RST05HPk9SPC9TVFJPTkc+ICBvZgorICAgICAgIGFsbCAgdmlkZW8gIGF0dHJpYnV0ZXMgIHN1cHBvcnRlZCBieSB0aGUgdGVybWluYWwgdXNpbmcgPEVNPkE8L0VNPjxTVFJPTkc+XzwvU1RST05HPgorICAgICAgIGFuZCA8RU0+V0E8L0VNPjxTVFJPTkc+XzwvU1RST05HPiBjb25zdGFudHMgcmVzcGVjdGl2ZWx5LiAgVGhpcyBpbmZvcm1hdGlvbiBpcyAgdXNlLQorICAgICAgIGZ1bCAgd2hlbiBhIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHByb2dyYW0gbmVlZHMgY29tcGxldGUgY29udHJvbCBvdmVyIHRoZQorICAgICAgIGFwcGVhcmFuY2Ugb2YgdGhlIHNjcmVlbi4KKworICAgICAgIFRoZSA8U1RST05HPnRlcm1uYW1lPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyB0aGUgIHRlcm1pbmFsICBuYW1lICB1c2VkICBieQorICAgICAgIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmxvbmduYW1lPC9TVFJPTkc+IGFuZCA8U1RST05HPnRlcm1uYW1lPC9TVFJPTkc+IHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKyAgICAgICBSb3V0aW5lcyAgdGhhdCAgcmV0dXJuICBhbiBpbnRlZ2VyIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUKKyAgICAgICBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiAoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSAgb3RoZXIgIHRoYW4KKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIE5vdGUgdGhhdCA8U1RST05HPnRlcm1hdHRyczwvU1RST05HPiBtYXkgYmUgYSBtYWNyby4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCwgIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmMtCisgICAgICAgdGlvbnMuICBJdCBjaGFuZ2VzIHRoZSByZXR1cm4gdHlwZSBvZiA8U1RST05HPnRlcm1hdHRyczwvU1RST05HPiB0byB0aGUgbmV3CisgICAgICAgdHlwZSAgPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4uICBNb3N0IHZlcnNpb25zIG9mIGN1cnNlcyB0cnVuY2F0ZSB0aGUgcmVzdWx0CisgICAgICAgcmV0dXJuZWQgYnkgPFNUUk9ORz50ZXJtbmFtZTwvU1RST05HPiB0byAxNCBjaGFyYWN0ZXJzLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190ZXJtY2FwLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190ZXJtY2FwLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0NTc3OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3Rlcm1jYXAuM3guaHRtbApAQCAtMCwwICsxLDE5MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3Rlcm1jYXAuM3gsdiAxLjIyIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc190ZXJtY2FwIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc190ZXJtY2FwIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWNhcC4zeC5odG1sIj5jdXJzX3Rlcm1jYXAoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dGdldGVudDwvU1RST05HPiwgPFNUUk9ORz50Z2V0ZmxhZzwvU1RST05HPiwgPFNUUk9ORz50Z2V0bnVtPC9TVFJPTkc+LCA8U1RST05HPnRnZXRzdHI8L1NUUk9ORz4sIDxTVFJPTkc+dGdvdG88L1NUUk9ORz4sIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4gLSBkaXJlY3QKKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiBpbnRlcmZhY2UgdG8gdGhlIHRlcm1pbmZvIGNhcGFiaWxpdHkgZGF0YWJhc2UKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7dGVybS5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5leHRlcm48L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+UEM7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5leHRlcm48L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPiA8U1RST05HPlVQOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+ZXh0ZXJuPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz4gPFNUUk9ORz5CQzs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmV4dGVybjwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxTVFJPTkc+b3NwZWVkOzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50Z2V0ZW50KGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qYnAsPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+Km5hbWUpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dGdldGZsYWcoY2hhcjwvU1RST05HPiA8U1RST05HPippZCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50Z2V0bnVtKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPip0Z2V0c3RyKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qaWQsPC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPioqYXJlYSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnRnb3RvKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipjYXAsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y29sLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJvdyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50cHV0cyhjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RyLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmFmZmNudCw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4oKnB1dGMpKGludCkpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGFyZSBpbmNsdWRlZCBhcyBhIGNvbnZlcnNpb24gYWlkICBmb3IgIHByby0KKyAgICAgICBncmFtcyAgdGhhdCB1c2UgdGhlIDxFTT50ZXJtY2FwPC9FTT4gbGlicmFyeS4gIFRoZWlyIHBhcmFtZXRlcnMgYXJlCisgICAgICAgdGhlIHNhbWUgYW5kIHRoZSByb3V0aW5lcyBhcmUgZW11bGF0ZWQgdXNpbmcgdGhlICA8RU0+dGVybWluZm88L0VNPgorICAgICAgIGRhdGFiYXNlLiAgIFRodXMsIHRoZXkgY2FuIG9ubHkgYmUgdXNlZCB0byBxdWVyeSB0aGUgY2FwYS0KKyAgICAgICBiaWxpdGllcyBvZiBlbnRyaWVzIGZvciB3aGljaCBhIHRlcm1pbmZvICBlbnRyeSAgaGFzICBiZWVuCisgICAgICAgY29tcGlsZWQuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+dGdldGVudDwvU1RST05HPiByb3V0aW5lIGxvYWRzIHRoZSBlbnRyeSBmb3IgPEVNPm5hbWU8L0VNPi4gIEl0IHJldHVybnMKKyAgICAgICAxIG9uIHN1Y2Nlc3MsIDAgaWYgdGhlcmUgaXMgbm8gc3VjaCBlbnRyeSwgYW5kIC0xICBpZiAgdGhlCisgICAgICAgdGVybWluZm8gIGRhdGFiYXNlICBjb3VsZCAgbm90ICBiZSAgZm91bmQuICAgVGhlIGVtdWxhdGlvbgorICAgICAgIGlnbm9yZXMgdGhlIGJ1ZmZlciBwb2ludGVyIDxFTT5icDwvRU0+LgorCisgICAgICAgVGhlIDxTVFJPTkc+dGdldGZsYWc8L1NUUk9ORz4gcm91dGluZSBnZXRzIHRoZSBib29sZWFuICBlbnRyeSAgZm9yICA8RU0+aWQ8L0VNPiwgIG9yCisgICAgICAgemVybyBpZiBpdCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAgICAgVGhlICA8U1RST05HPnRnZXRudW08L1NUUk9ORz4gIHJvdXRpbmUgZ2V0cyB0aGUgbnVtZXJpYyBlbnRyeSBmb3IgPEVNPmlkPC9FTT4sIG9yIC0xCisgICAgICAgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgIFRoZSA8U1RST05HPnRnZXRzdHI8L1NUUk9ORz4gcm91dGluZSByZXR1cm5zIHRoZSBzdHJpbmcgZW50cnkgIGZvciAgPEVNPmlkPC9FTT4sICBvcgorICAgICAgIHplcm8gIGlmICBpdCAgaXMgIG5vdCAgYXZhaWxhYmxlLiAgVXNlIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4gdG8gb3V0cHV0IHRoZQorICAgICAgIHJldHVybmVkIHN0cmluZy4gIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGNvcGllZCAgdG8KKyAgICAgICB0aGUgIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IDxFTT5hcmVhPC9FTT4sIGFuZCB0aGUgPEVNPmFyZWE8L0VNPiB2YWx1ZSB3aWxsIGJlCisgICAgICAgdXBkYXRlZCB0byBwb2ludCBwYXN0IHRoZSBudWxsIGVuZGluZyB0aGlzIHZhbHVlLgorCisgICAgICAgT25seSB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIDxTVFJPTkc+aWQ8L1NUUk9ORz4gcGFyYW1ldGVyIG9mIDxTVFJPTkc+dGdldC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmZsYWc8L1NUUk9ORz4sIDxTVFJPTkc+dGdldG51bTwvU1RST05HPiBhbmQgPFNUUk9ORz50Z2V0c3RyPC9TVFJPTkc+IGFyZSBjb21wYXJlZCBpbiBsb29rdXBzLgorCisgICAgICAgVGhlICA8U1RST05HPnRnb3RvPC9TVFJPTkc+ICByb3V0aW5lICBpbnN0YW50aWF0ZXMgIHRoZSBwYXJhbWV0ZXJzIGludG8gdGhlCisgICAgICAgZ2l2ZW4gY2FwYWJpbGl0eS4gIFRoZSBvdXRwdXQgZnJvbSB0aGlzIHJvdXRpbmUgaXMgIHRvICBiZQorICAgICAgIHBhc3NlZCB0byA8U1RST05HPnRwdXRzPC9TVFJPTkc+LgorCisgICAgICAgVGhlICA8U1RST05HPnRwdXRzPC9TVFJPTkc+ICByb3V0aW5lICBpcyBkZXNjcmliZWQgb24gdGhlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtYW51YWwgcGFnZS4gIEl0IGNhbiByZXRyaWV2ZSBjYXBhYmlsaXRpZXMgYnkgZWl0aGVyIHRlcm0tCisgICAgICAgY2FwIG9yIHRlcm1pbmZvIG5hbWUuCisKKyAgICAgICBUaGUgdmFyaWFibGVzIDxTVFJPTkc+UEM8L1NUUk9ORz4sIDxTVFJPTkc+VVA8L1NUUk9ORz4gYW5kIDxTVFJPTkc+QkM8L1NUUk9ORz4gYXJlIHNldCBieSA8U1RST05HPnRnZXRlbnQ8L1NUUk9ORz4gdG8gdGhlIHRlci0KKyAgICAgICBtaW5mbyAgIGVudHJ5J3MgICBkYXRhICAgZm9yICAgPFNUUk9ORz5wYWRfY2hhcjwvU1RST05HPiwgICA8U1RST05HPmN1cnNvcl91cDwvU1RST05HPiAgIGFuZAorICAgICAgIDxTVFJPTkc+YmFja3NwYWNlX2lmX25vdF9iczwvU1RST05HPiwgIHJlc3BlY3RpdmVseS4gICA8U1RST05HPlVQPC9TVFJPTkc+ICBpcyAgbm90ICB1c2VkIGJ5CisgICAgICAgbmN1cnNlcy4gIDxTVFJPTkc+UEM8L1NUUk9ORz4gaXMgdXNlZCBpbiB0aGUgPFNUUk9ORz50ZGVsYXlfb3V0cHV0PC9TVFJPTkc+IGZ1bmN0aW9uLiAgPFNUUk9ORz5CQzwvU1RST05HPiBpcworICAgICAgIHVzZWQgIGluICB0aGUgPFNUUk9ORz50Z290bzwvU1RST05HPiBlbXVsYXRpb24uICBUaGUgdmFyaWFibGUgPFNUUk9ORz5vc3BlZWQ8L1NUUk9ORz4gaXMgc2V0CisgICAgICAgYnkgbmN1cnNlcyBpbiBhICBzeXN0ZW0tc3BlY2lmaWMgIGNvZGluZyAgdG8gIHJlZmxlY3QgIHRoZQorICAgICAgIHRlcm1pbmFsIHNwZWVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgIHdoZXJlICBleHBsaWNpdGx5ICBub3RlZCwgIHJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuCisgICAgICAgaW50ZWdlciByZXR1cm4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+IChTVnI0ICBvbmx5ICBzcGVjaS0KKyAgICAgICBmaWVzICAiYW4gIGludGVnZXIgIHZhbHVlIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwKKyAgICAgICBjb21wbGV0aW9uLgorCisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIDxTVFJPTkc+TlVMTDwvU1RST05HPiBvbiBlcnJvci4KKworCis8L1BSRT4KKzxIMj5CVUdTPC9IMj48UFJFPgorICAgICAgIElmIHlvdSBjYWxsIDxTVFJPTkc+dGdldHN0cjwvU1RST05HPiB0byBmZXRjaCA8U1RST05HPmNhPC9TVFJPTkc+IG9yIGFueSBvdGhlciBwYXJhbWV0ZXJpemVkCisgICAgICAgc3RyaW5nLCAgYmUgIGF3YXJlICB0aGF0ICBpdCAgd2lsbCBiZSByZXR1cm5lZCBpbiB0ZXJtaW5mbworICAgICAgIG5vdGF0aW9uLCBub3QgdGhlIG9sZGVyIGFuZCAgbm90LXF1aXRlLWNvbXBhdGlibGUgIHRlcm1jYXAKKyAgICAgICBub3RhdGlvbi4gIFRoaXMgd2lsbCBub3QgY2F1c2UgcHJvYmxlbXMgaWYgYWxsIHlvdSBkbyB3aXRoCisgICAgICAgaXQgaXMgY2FsbCA8U1RST05HPnRnb3RvPC9TVFJPTkc+IG9yIDxTVFJPTkc+dHBhcm08L1NUUk9ORz4sICB3aGljaCAgYm90aCAgZXhwYW5kICB0ZXJtaW5mby0KKyAgICAgICBzdHlsZSAgc3RyaW5ncyAgYXMgdGVybWluZm8uICAoVGhlIDxTVFJPTkc+dGdvdG88L1NUUk9ORz4gZnVuY3Rpb24sIGlmIGNvbi0KKyAgICAgICBmaWd1cmVkIHRvIHN1cHBvcnQgdGVybWNhcCwgd2lsbCBjaGVjayBpZiAgdGhlICBzdHJpbmcgIGlzCisgICAgICAgaW5kZWVkICB0ZXJtaW5mby1zdHlsZSAgYnkgIGxvb2tpbmcgZm9yICIlcCIgcGFyYW1ldGVycyBvcgorICAgICAgICIkJmx0Oy4uJmd0OyIgZGVsYXlzLCBhbmQgaW52b2tlIGEgdGVybWNhcC1zdHlsZSBwYXJzZXIgIGlmICB0aGUKKyAgICAgICBzdHJpbmcgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHRlcm1pbmZvKS4KKworICAgICAgIEJlY2F1c2UgIHRlcm1pbmZvICBjb252ZW50aW9ucyBmb3IgcmVwcmVzZW50aW5nIHBhZGRpbmcgaW4KKyAgICAgICBzdHJpbmcgY2FwYWJpbGl0aWVzIGRpZmZlciAgZnJvbSAgdGVybWNhcCdzLCAgPFNUUk9ORz50cHV0cygiNTAiKTs8L1NUUk9ORz4KKyAgICAgICB3aWxsICBwdXQgIG91dCBhIGxpdGVyYWwgIjUwIiByYXRoZXIgdGhhbiBidXN5LXdhaXRpbmcgZm9yCisgICAgICAgNTAgbWlsbGlzZWNvbmRzLiAgQ29wZSB3aXRoIGl0LgorCisgICAgICAgTm90ZSB0aGF0IHRlcm1jYXAgaGFzIG5vdGhpbmcgYW5hbG9nb3VzIHRvIHRlcm1pbmZvJ3MgIDxTVFJPTkc+c2dyPC9TVFJPTkc+CisgICAgICAgc3RyaW5nLiAgIE9uZSBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgdGVybWNhcCBhcHBsaWNhLQorICAgICAgIHRpb25zIGFzc3VtZSBtZSAodGVybWluZm8gPFNUUk9ORz5zZ3IwPC9TVFJPTkc+KSBkb2VzIG5vdCByZXNldCB0aGUgIGFsdGVyLQorICAgICAgIG5hdGUgIGNoYXJhY3RlciAgc2V0LiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZm9yLCBhbmQKKyAgICAgICBtb2RpZmllcyB0aGUgZGF0YSBzaG93biB0byB0aGUgdGVybWNhcCBpbnRlcmZhY2UgdG8gYWNjb20tCisgICAgICAgbW9kYXRlIHRlcm1jYXAncyBsaW1pdGF0aW9uIGluIHRoaXMgcmVzcGVjdC4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCwgIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmMtCisgICAgICAgdGlvbnMuICBIb3dldmVyLCB0aGV5IGFyZSBtYXJrZWQgVE8gQkUgV0lUSERSQVdOICBhbmQgIG1heQorICAgICAgIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLgorCisgICAgICAgTmVpdGhlciAgdGhlICBYU0kgIEN1cnNlcyAgc3RhbmRhcmQgbm9yIHRoZSBTVnI0IG1hbiBwYWdlcworICAgICAgIGRvY3VtZW50ZWQgdGhlIHJldHVybiB2YWx1ZXMgb2YgPFNUUk9ORz50Z2V0ZW50PC9TVFJPTkc+IGNvcnJlY3RseSwgIHRob3VnaAorICAgICAgIGFsbCAgdGhyZWUgd2VyZSBpbiBmYWN0IHJldHVybmVkIGV2ZXIgc2luY2UgU1ZyMS4gIEluIHBhci0KKyAgICAgICB0aWN1bGFyLCBhbiBvbWlzc2lvbiBpbiB0aGUgWFNJIEN1cnNlcyAgZG9jdW1lbnRhdGlvbiAgaGFzCisgICAgICAgYmVlbiAgbWlzaW50ZXJwcmV0ZWQgIHRvICBtZWFuICB0aGF0IDxTVFJPTkc+dGdldGVudDwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+T0s8L1NUUk9ORz4gb3IKKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPi4gIEJlY2F1c2UgdGhlIHB1cnBvc2Ugb2YgdGhlc2UgZnVuY3Rpb25zIGlzIHRvIHByb3ZpZGUKKyAgICAgICBjb21wYXRpYmlsaXR5ICB3aXRoICB0aGUgPEVNPnRlcm1jYXA8L0VNPiBsaWJyYXJ5LCB0aGF0IGlzIGEgZGVmZWN0CisgICAgICAgaW4gWEN1cnNlcywgSXNzdWUgNCwgVmVyc2lvbiAyIHJhdGhlciB0aGFuIGluIG5jdXJzZXMuCisKKyAgICAgICBFeHRlcm5hbCB2YXJpYWJsZXMgYXJlIHByb3ZpZGVkICBmb3IgIHN1cHBvcnQgIG9mICBjZXJ0YWluCisgICAgICAgdGVybWNhcCAgYXBwbGljYXRpb25zLiAgSG93ZXZlciwgdGVybWNhcCBhcHBsaWNhdGlvbnMnIHVzZQorICAgICAgIG9mIHRob3NlIHZhcmlhYmxlcyBpcyBwb29ybHkgZG9jdW1lbnRlZCwgZS5nLiwgbm90IGRpc3Rpbi0KKyAgICAgICBndWlzaGluZyAgYmV0d2VlbiAgaW5wdXQgIGFuZCBvdXRwdXQuICBJbiBwYXJ0aWN1bGFyLCBzb21lCisgICAgICAgYXBwbGljYXRpb25zIGFyZSByZXBvcnRlZCB0byBkZWNsYXJlIGFuZC9vciBtb2RpZnkgPFNUUk9ORz5vc3BlZWQ8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InB1dGMuMy5odG1sIj5wdXRjKDMpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWNhcC4zeC5odG1sIj5jdXJzX3Rlcm1jYXAoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190ZXJtaW5mby4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWluZm8uM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODc3NDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdGVybWluZm8uM3guaHRtbApAQCAtMCwwICsxLDM1MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3Rlcm1pbmZvLjN4LHYgMS4zMCAyMDA4LzA4LzE2IDIwOjUzOjI3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfdGVybWluZm8gM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5jdXJzX3Rlcm1pbmZvIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5kZWxfY3VydGVybTwvU1RST05HPiwgPFNUUk9ORz5tdmN1cjwvU1RST05HPiwgPFNUUk9ORz5wdXRwPC9TVFJPTkc+LCA8U1RST05HPnJlc3RhcnR0ZXJtPC9TVFJPTkc+LCA8U1RST05HPnNldF9jdXJ0ZXJtPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+c2V0dGVybTwvU1RST05HPiwgPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4sIDxTVFJPTkc+dGlnZXRmbGFnPC9TVFJPTkc+LCA8U1RST05HPnRpZ2V0bnVtPC9TVFJPTkc+LCA8U1RST05HPnRpZ2V0c3RyPC9TVFJPTkc+LCA8U1RST05HPnRwYXJtPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4sIDxTVFJPTkc+dmlkX2F0dHI8L1NUUk9ORz4sIDxTVFJPTkc+dmlkX3B1dHM8L1NUUk9ORz4sIDxTVFJPTkc+dmlkYXR0cjwvU1RST05HPiwgPFNUUk9ORz52aWRwdXRzPC9TVFJPTkc+IC0gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4KKyAgICAgICBpbnRlcmZhY2VzIHRvIHRlcm1pbmZvIGRhdGFiYXNlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O3Rlcm0uaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2V0dXB0ZXJtKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnRlcm08L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8RU0+ZmlsZGVzPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmVycnJldDwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c2V0dGVybShjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT50ZXJtPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5URVJNSU5BTDwvU1RST05HPiA8U1RST05HPipzZXRfY3VydGVybShURVJNSU5BTDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+bnRlcm08L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRlbF9jdXJ0ZXJtKFRFUk1JTkFMPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5vdGVybTwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cmVzdGFydHRlcm0oY2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+dGVybTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5maWxkZXM8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+ZXJycmV0PC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnRwYXJtKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+Li4uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnRwdXRzKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPio8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPmFmZmNudDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCo8L1NUUk9ORz48RU0+cHV0YzwvRU0+PFNUUk9ORz4pKGludCkpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cHV0cChjb25zdDwvU1RST05HPiA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPnN0cjwvRU0+PFNUUk9ORz4pOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dmlkcHV0cyhjaHR5cGU8L1NUUk9ORz4gPEVNPmF0dHJzPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4oKjwvU1RST05HPjxFTT5wdXRjPC9FTT48U1RST05HPikoaW50KSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz52aWRhdHRyKGNodHlwZTwvU1RST05HPiA8RU0+YXR0cnM8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnZpZF9wdXRzKGF0dHJfdDwvU1RST05HPiA8RU0+YXR0cnM8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPnNob3J0PC9TVFJPTkc+IDxFTT5wYWlyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5vcHRzPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4oKjwvU1RST05HPjxFTT5wdXRjPC9FTT48U1RST05HPikoY2hhcikpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dmlkX2F0dHIoYXR0cl90PC9TVFJPTkc+IDxFTT5hdHRyczwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+c2hvcnQ8L1NUUk9ORz4gPEVNPnBhaXI8L0VNPjxTVFJPTkc+LDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPm9wdHM8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm12Y3VyKGludDwvU1RST05HPiA8RU0+b2xkcm93PC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPEVNPm9sZGNvbDwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxFTT5uZXdyb3c8L0VNPiwgaW50IDxFTT5uZXdjb2w8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnRpZ2V0ZmxhZyhjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5jYXBuYW1lPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50aWdldG51bShjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPjxFTT5jYXBuYW1lPC9FTT48U1RST05HPik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KnRpZ2V0c3RyKGNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+PEVNPmNhcG5hbWU8L0VNPjxTVFJPTkc+KTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBsb3ctbGV2ZWwgcm91dGluZXMgbXVzdCBiZSBjYWxsZWQgYnkgIHByb2dyYW1zICB0aGF0CisgICAgICAgaGF2ZSB0byBkZWFsIGRpcmVjdGx5IHdpdGggdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZGF0YWJhc2UgdG8gaGFuZGxlCisgICAgICAgY2VydGFpbiB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMsIHN1Y2ggYXMgIHByb2dyYW1taW5nICBmdW5jLQorICAgICAgIHRpb24gIGtleXMuICAgRm9yIGFsbCBvdGhlciBmdW5jdGlvbmFsaXR5LCA8U1RST05HPmN1cnNlczwvU1RST05HPiByb3V0aW5lcworICAgICAgIGFyZSBtb3JlIHN1aXRhYmxlIGFuZCB0aGVpciB1c2UgaXMgcmVjb21tZW5kZWQuCisKKyAgICAgICBJbml0aWFsbHksIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+IHNob3VsZCAgYmUgIGNhbGxlZC4gICBOb3RlICB0aGF0ICA8U1RST05HPnNlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dHVwdGVybTwvU1RST05HPiAgaXMgIGF1dG9tYXRpY2FsbHkgIGNhbGxlZCBieSA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPi4KKyAgICAgICBUaGlzICBkZWZpbmVzICB0aGUgIHNldCAgb2YgIHRlcm1pbmFsLWRlcGVuZGVudCAgdmFyaWFibGVzCisgICAgICAgW2xpc3RlZCBpbiA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+XS4gIFRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IHZhcmlhYmxlcyA8U1RST05HPmxpbmVzPC9TVFJPTkc+IGFuZAorICAgICAgIDxTVFJPTkc+Y29sdW1uczwvU1RST05HPiBhcmUgaW5pdGlhbGl6ZWQgYnkgPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4gYXMgZm9sbG93czoKKworICAgICAgICAgICAgICBJZiA8U1RST05HPnVzZV9lbnYoRkFMU0UpPC9TVFJPTkc+IGhhcyBiZWVuIGNhbGxlZCwgdmFsdWVzIGZvciA8U1RST05HPmxpbmVzPC9TVFJPTkc+CisgICAgICAgICAgICAgIGFuZCA8U1RST05HPmNvbHVtbnM8L1NUUk9ORz4gc3BlY2lmaWVkIGluIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gYXJlIHVzZWQuCisKKyAgICAgICAgICAgICAgT3RoZXJ3aXNlLCAgaWYgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgPFNUUk9ORz5MSU5FUzwvU1RST05HPiBhbmQKKyAgICAgICAgICAgICAgPFNUUk9ORz5DT0xVTU5TPC9TVFJPTkc+IGV4aXN0LCB0aGVpciB2YWx1ZXMgYXJlIHVzZWQuICBJZiB0aGVzZSBlbi0KKyAgICAgICAgICAgICAgdmlyb25tZW50IHZhcmlhYmxlcyBkbyBub3QgZXhpc3QgYW5kIHRoZSBwcm9ncmFtIGlzCisgICAgICAgICAgICAgIHJ1bm5pbmcgaW4gYSB3aW5kb3csIHRoZSAgY3VycmVudCAgd2luZG93ICBzaXplICBpcworICAgICAgICAgICAgICB1c2VkLiAgIE90aGVyd2lzZSwgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZG8KKyAgICAgICAgICAgICAgbm90IGV4aXN0LCB0aGUgdmFsdWVzIGZvciA8U1RST05HPmxpbmVzPC9TVFJPTkc+IGFuZCA8U1RST05HPmNvbHVtbnM8L1NUUk9ORz4gIHNwZWNpLQorICAgICAgICAgICAgICBmaWVkIGluIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGRhdGFiYXNlIGFyZSB1c2VkLgorCisgICAgICAgVGhlICBoZWFkZXIgIGZpbGVzICA8U1RST05HPmN1cnNlcy5oPC9TVFJPTkc+IGFuZCA8U1RST05HPnRlcm0uaDwvU1RST05HPiBzaG91bGQgYmUgaW5jbHVkZWQKKyAgICAgICAoaW4gdGhpcyBvcmRlcikgdG8gZ2V0IHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlc2UgIHN0cmluZ3MsCisgICAgICAgbnVtYmVycywgIGFuZCAgZmxhZ3MuICAgUGFyYW1ldGVyaXplZCAgc3RyaW5ncyAgc2hvdWxkICBiZQorICAgICAgIHBhc3NlZCB0aHJvdWdoIDxTVFJPTkc+dHBhcm08L1NUUk9ORz4gdG8gaW5zdGFudGlhdGUgIHRoZW0uICAgQWxsICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+CisgICAgICAgc3RyaW5ncyAgW2luY2x1ZGluZyB0aGUgb3V0cHV0IG9mIDxTVFJPTkc+dHBhcm08L1NUUk9ORz5dIHNob3VsZCBiZSBwcmludGVkCisgICAgICAgd2l0aCA8U1RST05HPnRwdXRzPC9TVFJPTkc+IG9yIDxTVFJPTkc+cHV0cDwvU1RST05HPi4gIENhbGwgdGhlIDxTVFJPTkc+cmVzZXRfc2hlbGxfbW9kZTwvU1RST05HPiB0byAgcmVzdG9yZQorICAgICAgIHRoZSAgdHR5IG1vZGVzIGJlZm9yZSBleGl0aW5nIFtzZWUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+XS4gIFByby0KKyAgICAgICBncmFtcyAgd2hpY2ggIHVzZSAgY3Vyc29yICBhZGRyZXNzaW5nICBzaG91bGQgIG91dHB1dCAgPFNUUk9ORz5lbi08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnRlcl9jYV9tb2RlPC9TVFJPTkc+ICB1cG9uICBzdGFydHVwICBhbmQgc2hvdWxkIG91dHB1dCA8U1RST05HPmV4aXRfY2FfbW9kZTwvU1RST05HPgorICAgICAgIGJlZm9yZSBleGl0aW5nLiAgUHJvZ3JhbXMgZGVzaXJpbmcgIHNoZWxsICBlc2NhcGVzICBzaG91bGQKKyAgICAgICBjYWxsCisKKyAgICAgICA8U1RST05HPnJlc2V0X3NoZWxsX21vZGU8L1NUUk9ORz4gIGFuZCBvdXRwdXQgPFNUUk9ORz5leGl0X2NhX21vZGU8L1NUUk9ORz4gYmVmb3JlIHRoZSBzaGVsbAorICAgICAgIGlzIGNhbGxlZCBhbmQgc2hvdWxkIG91dHB1dCAgPFNUUk9ORz5lbnRlcl9jYV9tb2RlPC9TVFJPTkc+ICBhbmQgIGNhbGwgIDxTVFJPTkc+cmUtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zZXRfcHJvZ19tb2RlPC9TVFJPTkc+IGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSBzaGVsbC4KKworICAgICAgIFRoZSA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiByb3V0aW5lIHJlYWRzIGluIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGRhdGFiYXNlLCBpbmktCisgICAgICAgdGlhbGl6aW5nIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IHN0cnVjdHVyZXMsIGJ1dCBkb2VzIG5vdCBzZXQgdXAgdGhlCisgICAgICAgb3V0cHV0IHZpcnR1YWxpemF0aW9uIHN0cnVjdHVyZXMgdXNlZCBieSA8U1RST05HPmN1cnNlczwvU1RST05HPi4gIFRoZSB0ZXItCisgICAgICAgbWluYWwgdHlwZSBpcyB0aGUgY2hhcmFjdGVyIHN0cmluZyA8RU0+dGVybTwvRU0+OyBpZiA8RU0+dGVybTwvRU0+IGlzICBudWxsLAorICAgICAgIHRoZSAgZW52aXJvbm1lbnQgIHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPiBpcyB1c2VkLiAgQWxsIG91dHB1dCBpcyB0bworICAgICAgIGZpbGUgZGVzY3JpcHRvciA8U1RST05HPmZpbGRlczwvU1RST05HPiB3aGljaCBpcyAgaW5pdGlhbGl6ZWQgIGZvciAgb3V0cHV0LgorICAgICAgIElmICA8RU0+ZXJycmV0PC9FTT4gIGlzICBub3QgbnVsbCwgdGhlbiA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+T0s8L1NUUk9ORz4gb3IgPFNUUk9ORz5FUlI8L1NUUk9ORz4KKyAgICAgICBhbmQgc3RvcmVzIGEgc3RhdHVzIHZhbHVlIGluIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgPEVNPmVyLTwvRU0+CisgICAgICAgPEVNPnJyZXQ8L0VNPi4gICBBICByZXR1cm4gdmFsdWUgb2YgPFNUUk9ORz5PSzwvU1RST05HPiBjb21iaW5lZCB3aXRoIHN0YXR1cyBvZiA8U1RST05HPjE8L1NUUk9ORz4gaW4KKyAgICAgICA8RU0+ZXJycmV0PC9FTT4gaXMgbm9ybWFsLiAgSWYgPFNUUk9ORz5FUlI8L1NUUk9ORz4gaXMgcmV0dXJuZWQsIGV4YW1pbmUgPEVNPmVycnJldDwvRU0+OgorCisgICAgICAgICAgICAgIDxTVFJPTkc+MTwvU1RST05HPiAgICBtZWFucyB0aGF0IHRoZSB0ZXJtaW5hbCBpcyBoYXJkY29weSwgY2Fubm90IGJlCisgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgY3Vyc2VzIGFwcGxpY2F0aW9ucy4KKworICAgICAgICAgICAgICA8U1RST05HPjA8L1NUUk9ORz4gICAgbWVhbnMgdGhhdCB0aGUgdGVybWluYWwgY291bGQgbm90IGJlIGZvdW5kLCBvcgorICAgICAgICAgICAgICAgICAgIHRoYXQgaXQgaXMgYSBnZW5lcmljIHR5cGUsIGhhdmluZyAgdG9vICBsaXR0bGUKKyAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmb3IgY3Vyc2VzIGFwcGxpY2F0aW9ucyB0byBydW4uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz4tMTwvU1RST05HPiAgIG1lYW5zICB0aGF0IHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGRhdGFiYXNlIGNvdWxkIG5vdCBiZQorICAgICAgICAgICAgICAgICAgIGZvdW5kLgorCisgICAgICAgSWYgPEVNPmVycnJldDwvRU0+IGlzIG51bGwsIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+IHByaW50cyBhbiBlcnJvciBtZXNzYWdlICB1cG9uCisgICAgICAgZmluZGluZyBhbiBlcnJvciBhbmQgZXhpdHMuICBUaHVzLCB0aGUgc2ltcGxlc3QgY2FsbCBpczoKKworICAgICAgICAgICAgIDxTVFJPTkc+c2V0dXB0ZXJtKChjaGFyPC9TVFJPTkc+IDxTVFJPTkc+KikwLDwvU1RST05HPiA8U1RST05HPjEsPC9TVFJPTkc+IDxTVFJPTkc+KGludDwvU1RST05HPiA8U1RST05HPiopMCk7PC9TVFJPTkc+LAorCisgICAgICAgd2hpY2ggIHVzZXMgIGFsbCB0aGUgZGVmYXVsdHMgYW5kIHNlbmRzIHRoZSBvdXRwdXQgdG8gPFNUUk9ORz5zdGQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5vdXQ8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5zZXR0ZXJtPC9TVFJPTkc+IHJvdXRpbmUgaXMgYmVpbmcgcmVwbGFjZWQgYnkgIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+LiAgIFRoZQorICAgICAgIGNhbGw6CisKKyAgICAgICAgICAgICA8U1RST05HPnNldHVwdGVybSg8L1NUUk9ORz48RU0+dGVybTwvRU0+PFNUUk9ORz4sPC9TVFJPTkc+IDxTVFJPTkc+MSw8L1NUUk9ORz4gPFNUUk9ORz4oaW50PC9TVFJPTkc+IDxTVFJPTkc+KikwKTwvU1RST05HPgorCisgICAgICAgcHJvdmlkZXMgIHRoZSAgc2FtZSAgZnVuY3Rpb25hbGl0eSAgYXMgPFNUUk9ORz5zZXR0ZXJtKDwvU1RST05HPjxFTT50ZXJtPC9FTT48U1RST05HPik8L1NUUk9ORz4uICBUaGUKKyAgICAgICA8U1RST05HPnNldHRlcm08L1NUUk9ORz4gcm91dGluZSBpcyBpbmNsdWRlZCBoZXJlICBmb3IgIEJTRCAgY29tcGF0aWJpbGl0eSwKKyAgICAgICBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciBuZXcgcHJvZ3JhbXMuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+c2V0X2N1cnRlcm08L1NUUk9ORz4gIHJvdXRpbmUgIHNldHMgIHRoZSAgdmFyaWFibGUgPFNUUk9ORz5jdXJfdGVybTwvU1RST05HPiB0bworICAgICAgIDxFTT5udGVybTwvRU0+LCBhbmQgbWFrZXMgYWxsIG9mIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGJvb2xlYW4sIG51bWVyaWMsIGFuZAorICAgICAgIHN0cmluZyAgdmFyaWFibGVzICB1c2UgIHRoZSB2YWx1ZXMgZnJvbSA8RU0+bnRlcm08L0VNPi4gIEl0IHJldHVybnMKKyAgICAgICB0aGUgb2xkIHZhbHVlIG9mIDxTVFJPTkc+Y3VyX3Rlcm08L1NUUk9ORz4uCisKKyAgICAgICBUaGUgPFNUUk9ORz5kZWxfY3VydGVybTwvU1RST05HPiByb3V0aW5lIGZyZWVzICB0aGUgIHNwYWNlICBwb2ludGVkICB0byAgYnkKKyAgICAgICA8RU0+b3Rlcm08L0VNPiBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHVzZS4gIElmIDxFTT5vdGVybTwvRU0+IGlzCisgICAgICAgdGhlIHNhbWUgYXMgPFNUUk9ORz5jdXJfdGVybTwvU1RST05HPiwgcmVmZXJlbmNlcyB0byBhbnkgIG9mICB0aGUgIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4KKyAgICAgICBib29sZWFuLCAgbnVtZXJpYywgYW5kIHN0cmluZyB2YXJpYWJsZXMgdGhlcmVhZnRlciBtYXkgcmUtCisgICAgICAgZmVyIHRvIGludmFsaWQgbWVtb3J5IGxvY2F0aW9ucyAgdW50aWwgIGFub3RoZXIgIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+CisgICAgICAgaGFzIGJlZW4gY2FsbGVkLgorCisgICAgICAgVGhlICA8U1RST05HPnJlc3RhcnR0ZXJtPC9TVFJPTkc+ICByb3V0aW5lICBpcyAgc2ltaWxhciAgdG8gIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4sIGV4Y2VwdCB0aGF0IGl0IGlzIGNhbGxlZCBhZnRlciAgcmVzdG9yaW5nICBtZW1vcnkKKyAgICAgICB0byAgYSAgcHJldmlvdXMgIHN0YXRlIChmb3IgZXhhbXBsZSwgd2hlbiByZWxvYWRpbmcgYSBnYW1lCisgICAgICAgc2F2ZWQgYXMgYSBjb3JlIGltYWdlIGR1bXApLiAgSXQgYXNzdW1lcyB0aGF0IHRoZSAgd2luZG93cworICAgICAgIGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBvcHRpb25zIGFyZSB0aGUgc2FtZSBhcyB3aGVuIG1lbS0KKyAgICAgICBvcnkgd2FzIHNhdmVkLCBidXQgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIGJhdWQgcmF0ZSBtYXkgIGJlCisgICAgICAgZGlmZmVyZW50LiAgIEFjY29yZGluZ2x5LCBpdCBzYXZlcyB2YXJpb3VzIHR0eSBzdGF0ZSBiaXRzLAorICAgICAgIGNhbGxzIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+LCBhbmQgdGhlbiByZXN0b3JlcyB0aGUgYml0cy4KKworICAgICAgIFRoZSA8U1RST05HPnRwYXJtPC9TVFJPTkc+IHJvdXRpbmUgaW5zdGFudGlhdGVzIHRoZSBzdHJpbmcgPEVNPnN0cjwvRU0+IHdpdGggcGFyYW1lLQorICAgICAgIHRlcnMgIDxFTT5waTwvRU0+LiAgQSBwb2ludGVyIGlzIHJldHVybmVkIHRvIHRoZSByZXN1bHQgb2YgPEVNPnN0cjwvRU0+IHdpdGgKKyAgICAgICB0aGUgcGFyYW1ldGVycyBhcHBsaWVkLgorCisgICAgICAgVGhlIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4gIHJvdXRpbmUgIGFwcGxpZXMgIHBhZGRpbmcgIGluZm9ybWF0aW9uICB0byAgdGhlCisgICAgICAgc3RyaW5nICA8RU0+c3RyPC9FTT4gIGFuZCAgb3V0cHV0cyAgaXQuICBUaGUgPEVNPnN0cjwvRU0+IG11c3QgYmUgYSB0ZXJtaW5mbworICAgICAgIHN0cmluZyB2YXJpYWJsZSBvciB0aGUgcmV0dXJuIHZhbHVlIGZyb20gIDxTVFJPTkc+dHBhcm08L1NUUk9ORz4sICA8U1RST05HPnRnZXRzdHI8L1NUUk9ORz4sCisgICAgICAgb3IgPFNUUk9ORz50Z290bzwvU1RST05HPi4gIDxFTT5hZmZjbnQ8L0VNPiBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGFmZmVjdGVkLCBvciAxIGlmCisgICAgICAgbm90IGFwcGxpY2FibGUuICA8RU0+cHV0YzwvRU0+IGlzIGEgPFNUUk9ORz5wdXRjaGFyPC9TVFJPTkc+LWxpa2Ugcm91dGluZSAgdG8gIHdoaWNoCisgICAgICAgdGhlIGNoYXJhY3RlcnMgYXJlIHBhc3NlZCwgb25lIGF0IGEgdGltZS4KKworICAgICAgIFRoZSAgPFNUUk9ORz5wdXRwPC9TVFJPTkc+IHJvdXRpbmUgY2FsbHMgPFNUUk9ORz50cHV0cyg8L1NUUk9ORz48RU0+c3RyPC9FTT48U1RST05HPiw8L1NUUk9ORz4gPFNUUk9ORz4xLDwvU1RST05HPiA8U1RST05HPnB1dGNoYXIpPC9TVFJPTkc+LiAgTm90ZSB0aGF0CisgICAgICAgdGhlIG91dHB1dCBvZiA8U1RST05HPnB1dHA8L1NUUk9ORz4gYWx3YXlzICBnb2VzICB0byAgPFNUUk9ORz5zdGRvdXQ8L1NUUk9ORz4sICBub3QgIHRvICB0aGUKKyAgICAgICA8RU0+ZmlsZGVzPC9FTT4gc3BlY2lmaWVkIGluIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+dmlkcHV0czwvU1RST05HPiByb3V0aW5lIGRpc3BsYXlzIHRoZSBzdHJpbmcgb24gdGhlIHRlcm1pbmFsIGluCisgICAgICAgdGhlIHZpZGVvIGF0dHJpYnV0ZSBtb2RlIDxFTT5hdHRyczwvRU0+LCB3aGljaCBpcyAgYW55ICBjb21iaW5hdGlvbgorICAgICAgIG9mICB0aGUgIGF0dHJpYnV0ZXMgIGxpc3RlZCBpbiA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uICBUaGUgY2hhcmFjdGVycworICAgICAgIGFyZSBwYXNzZWQgdG8gdGhlIDxTVFJPTkc+cHV0Y2hhcjwvU1RST05HPi1saWtlIHJvdXRpbmUgPEVNPnB1dGM8L0VNPi4KKworICAgICAgIFRoZSA8U1RST05HPnZpZGF0dHI8L1NUUk9ORz4gcm91dGluZSBpcyBsaWtlIHRoZSAgPFNUUk9ORz52aWRwdXRzPC9TVFJPTkc+ICByb3V0aW5lLCAgZXhjZXB0CisgICAgICAgdGhhdCBpdCBvdXRwdXRzIHRocm91Z2ggPFNUUk9ORz5wdXRjaGFyPC9TVFJPTkc+LgorCisgICAgICAgVGhlICA8U1RST05HPnZpZF9hdHRyPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz52aWRfcHV0czwvU1RST05HPiByb3V0aW5lcyBjb3JyZXNwb25kIHRvIHZpZGF0dHIKKyAgICAgICBhbmQgdmlkcHV0cywgcmVzcGVjdGl2ZWx5LiAgVGhleSB1c2UgYSAgc2V0ICBvZiAgYXJndW1lbnRzCisgICAgICAgZm9yICByZXByZXNlbnRpbmcgIHRoZSAgdmlkZW8gYXR0cmlidXRlcyBwbHVzIGNvbG9yLCBpLmUuLAorICAgICAgIG9uZSBvZiB0eXBlIGF0dHJfdCBmb3IgdGhlIGF0dHJpYnV0ZXMgYW5kIG9uZSBvZiBzaG9ydCBmb3IKKyAgICAgICB0aGUgY29sb3JfcGFpciBudW1iZXIuICBUaGUgPFNUUk9ORz52aWRfYXR0cjwvU1RST05HPiBhbmQgPFNUUk9ORz52aWRfcHV0czwvU1RST05HPiByb3V0aW5lcworICAgICAgIGFyZSBkZXNpZ25lZCB0byB1c2UgdGhlIGF0dHJpYnV0ZSBjb25zdGFudHMgd2l0aCAgdGhlICA8RU0+V0E8L0VNPjxTVFJPTkc+XzwvU1RST05HPgorICAgICAgIHByZWZpeC4gICBUaGUgIG9wdHMgIGFyZ3VtZW50ICBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KKyAgICAgICBDdXJyZW50bHksIGFwcGxpY2F0aW9ucyBtdXN0IHByb3ZpZGUgYSAgbnVsbCAgcG9pbnRlciAgZm9yCisgICAgICAgdGhhdCBhcmd1bWVudC4KKworICAgICAgIFRoZSAgPFNUUk9ORz5tdmN1cjwvU1RST05HPiAgcm91dGluZSAgcHJvdmlkZXMgbG93LWxldmVsIGN1cnNvciBtb3Rpb24uICBJdAorICAgICAgIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSAocmF0aGVyICB0aGFuICBhdCAgdGhlICBuZXh0ICByZS0KKyAgICAgICBmcmVzaCkuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+dGlnZXRmbGFnPC9TVFJPTkc+LCAgPFNUUk9ORz50aWdldG51bTwvU1RST05HPiBhbmQgPFNUUk9ORz50aWdldHN0cjwvU1RST05HPiByb3V0aW5lcyByZXR1cm4gdGhlCisgICAgICAgdmFsdWUgb2YgdGhlIGNhcGFiaWxpdHkgY29ycmVzcG9uZGluZyB0byB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiA8RU0+Y2FwLTwvRU0+CisgICAgICAgPEVNPm5hbWU8L0VNPiBwYXNzZWQgdG8gdGhlbSwgc3VjaCBhcyA8U1RST05HPnhlbmw8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIDxTVFJPTkc+dGlnZXRmbGFnPC9TVFJPTkc+ICByb3V0aW5lIHJldHVybnMgdGhlIHZhbHVlIDxTVFJPTkc+LTE8L1NUUk9ORz4gaWYgPEVNPmNhcG5hbWU8L0VNPiBpcworICAgICAgIG5vdCBhIGJvb2xlYW4gY2FwYWJpbGl0eSwgb3IgPFNUUk9ORz4wPC9TVFJPTkc+IGlmIGl0IGlzIGNhbmNlbGVkIG9yIGFic2VudAorICAgICAgIGZyb20gdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLgorCisgICAgICAgVGhlICA8U1RST05HPnRpZ2V0bnVtPC9TVFJPTkc+ICByb3V0aW5lICByZXR1cm5zIHRoZSB2YWx1ZSA8U1RST05HPi0yPC9TVFJPTkc+IGlmIDxFTT5jYXBuYW1lPC9FTT4gaXMKKyAgICAgICBub3QgYSBudW1lcmljIGNhcGFiaWxpdHksIG9yIDxTVFJPTkc+LTE8L1NUUk9ORz4gaWYgaXQgaXMgY2FuY2VsZWQgIG9yICBhYi0KKyAgICAgICBzZW50IGZyb20gdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLgorCisgICAgICAgVGhlICA8U1RST05HPnRpZ2V0c3RyPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyB0aGUgdmFsdWUgPFNUUk9ORz4oY2hhcjwvU1RST05HPiA8U1RST05HPiopLTE8L1NUUk9ORz4gaWYgPEVNPmNhcC08L0VNPgorICAgICAgIDxFTT5uYW1lPC9FTT4gaXMgbm90IGEgc3RyaW5nIGNhcGFiaWxpdHksIG9yIDxTVFJPTkc+MDwvU1RST05HPiBpZiBpdCBpcyBjYW5jZWxlZCBvcgorICAgICAgIGFic2VudCBmcm9tIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKworICAgICAgIFRoZSA8RU0+Y2FwbmFtZTwvRU0+IGZvciBlYWNoIGNhcGFiaWxpdHkgaXMgZ2l2ZW4gaW4gdGhlIHRhYmxlIGNvbC0KKyAgICAgICB1bW4gZW50aXRsZWQgPEVNPmNhcG5hbWU8L0VNPiBjb2RlIGluIHRoZSBjYXBhYmlsaXRpZXMgIHNlY3Rpb24gIG9mCisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPi4KKworICAgICAgICAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qYm9vbG5hbWVzW108L1NUUk9ORz4sIDxTVFJPTkc+KmJvb2xjb2Rlc1tdPC9TVFJPTkc+LCA8U1RST05HPipib29sZm5hbWVzW108L1NUUk9ORz4KKworICAgICAgICAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qbnVtbmFtZXNbXTwvU1RST05HPiwgPFNUUk9ORz4qbnVtY29kZXNbXTwvU1RST05HPiwgPFNUUk9ORz4qbnVtZm5hbWVzW108L1NUUk9ORz4KKworICAgICAgICAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qc3RybmFtZXNbXTwvU1RST05HPiwgPFNUUk9ORz4qc3RyY29kZXNbXTwvU1RST05HPiwgPFNUUk9ORz4qc3RyZm5hbWVzW108L1NUUk9ORz4KKworICAgICAgIFRoZXNlICBudWxsLXRlcm1pbmF0ZWQgIGFycmF5cyAgY29udGFpbiAgdGhlIDxFTT5jYXBuYW1lczwvRU0+LCB0aGUKKyAgICAgICA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gY29kZXMsIGFuZCB0aGUgZnVsbCBDIG5hbWVzLCBmb3IgZWFjaCBvZiB0aGUgIDxTVFJPTkc+dGVyLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+bWluZm88L1NUUk9ORz4gdmFyaWFibGVzLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyAgdGhhdCAgcmV0dXJuICBhbiBpbnRlZ2VyIHJldHVybiA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUKKyAgICAgICBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiAoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSAgb3RoZXIgIHRoYW4KKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPiIpICB1cG9uICBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQKKyAgICAgICBpbiB0aGUgcHJlY2VkaW5nIHJvdXRpbmUgZGVzY3JpcHRpb25zLgorCisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgYWx3YXlzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKyAgICAgICBYL09wZW4gIGRlZmluZXMgIG5vIGVycm9yIGNvbmRpdGlvbnMuICBJbiB0aGlzIGltcGxlbWVudGEtCisgICAgICAgdGlvbgorCisgICAgICAgICAgICAgIDxTVFJPTkc+ZGVsX2N1cnRlcm08L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIGl0cyB0ZXJtaW5hbCBwYXJhbWV0ZXIgIGlzCisgICAgICAgICAgICAgICAgICAgbnVsbC4KKworICAgICAgICAgICAgICA8U1RST05HPnB1dHA8L1NUUk9ORz4gY2FsbHMgPFNUUk9ORz50cHV0czwvU1RST05HPiwgcmV0dXJuaW5nIHRoZSBzYW1lIGVycm9yLWNvZGVzLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+cmVzdGFydHRlcm08L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBhc3NvY2lhdGVkIGNhbGwgdG8gPFNUUk9ORz5zZS08L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICA8U1RST05HPnR1cHRlcm08L1NUUk9ORz4gcmV0dXJucyBhbiBlcnJvci4KKworICAgICAgICAgICAgICA8U1RST05HPnNldHVwdGVybTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgaWYgaXQgY2Fubm90IGFsbG9jYXRlICBlbm91Z2gKKyAgICAgICAgICAgICAgICAgICBtZW1vcnksIG9yIGNyZWF0ZSB0aGUgaW5pdGlhbCB3aW5kb3dzIChzdGRzY3IsCisgICAgICAgICAgICAgICAgICAgY3Vyc2NyLCBuZXdzY3IpLiAgT3RoZXIgZXJyb3IgIGNvbmRpdGlvbnMgIGFyZQorICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ZWQgYWJvdmUuCisKKyAgICAgICAgICAgICAgPFNUUk9ORz50cHV0czwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgIGFuICBlcnJvciAgaWYgdGhlIHN0cmluZyBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICBudWxsLiAgSXQgZG9lcyBub3QgZGV0ZWN0IEkvTyAgZXJyb3JzOiAgWC9PcGVuCisgICAgICAgICAgICAgICAgICAgc3RhdGVzICB0aGF0IDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4gaWdub3JlcyB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgdGhlIG91dHB1dCBmdW5jdGlvbiA8RU0+cHV0YzwvRU0+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPnNldHVwdGVybTwvU1RST05HPiByb3V0aW5lIHNob3VsZCBiZSB1c2VkIGluIHBsYWNlIG9mICA8U1RST05HPnNldHRlcm08L1NUUk9ORz4uCisgICAgICAgSXQgIG1heSBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byB0ZXN0IGZvciB0ZXJtaW5hbCBjYXBhLQorICAgICAgIGJpbGl0aWVzIHdpdGhvdXQgY29tbWl0dGluZyB0byB0aGUgYWxsb2NhdGlvbiAgb2YgIHN0b3JhZ2UKKyAgICAgICBpbnZvbHZlZCBpbiA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4uCisKKyAgICAgICBOb3RlIHRoYXQgPFNUUk9ORz52aWRhdHRyPC9TVFJPTkc+IGFuZCA8U1RST05HPnZpZHB1dHM8L1NUUk9ORz4gbWF5IGJlIG1hY3Jvcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldHRlcm08L1NUUk9ORz4gaXMgbm90IGRlc2NyaWJlZCBieSBYL09wZW4gYW5kIG11c3QKKyAgICAgICBiZSBjb25zaWRlcmVkIG5vbi1wb3J0YWJsZS4gIEFsbCBvdGhlciAgZnVuY3Rpb25zICBhcmUgIGFzCisgICAgICAgZGVzY3JpYmVkIGJ5IFgvT3Blbi4KKworICAgICAgIDxTVFJPTkc+c2V0dXB0ZXJtPC9TVFJPTkc+ICBjb3BpZXMgIHRoZSB0ZXJtaW5hbCBuYW1lIHRvIHRoZSBhcnJheSA8U1RST05HPnR0eXR5cGU8L1NUUk9ORz4uCisgICAgICAgVGhpcyBpcyBub3QgcGFydCBvZiBYL09wZW4gQ3Vyc2VzLCBidXQgaXMgYXNzdW1lZCBieSAgc29tZQorICAgICAgIGFwcGxpY2F0aW9ucy4KKworICAgICAgIEluICBTeXN0ZW0gViBSZWxlYXNlIDQsIDxTVFJPTkc+c2V0X2N1cnRlcm08L1NUUk9ORz4gaGFzIGFuIDxTVFJPTkc+aW50PC9TVFJPTkc+IHJldHVybiB0eXBlCisgICAgICAgYW5kIHJldHVybnMgPFNUUk9ORz5PSzwvU1RST05HPiBvciA8U1RST05HPkVSUjwvU1RST05HPi4gIFdlIGhhdmUgY2hvc2VuICB0byAgaW1wbGVtZW50ICB0aGUKKyAgICAgICBYL09wZW4gQ3Vyc2VzIHNlbWFudGljcy4KKworICAgICAgIEluIFN5c3RlbSBWIFJlbGVhc2UgNCwgdGhlIHRoaXJkIGFyZ3VtZW50IG9mIDxTVFJPTkc+dHB1dHM8L1NUUk9ORz4gaGFzIHRoZQorICAgICAgIHR5cGUgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4oKnB1dGMpKGNoYXIpPC9TVFJPTkc+LgorCisgICAgICAgQXQgbGVhc3Qgb25lIGltcGxlbWVudGF0aW9uIG9mIFgvT3BlbiBDdXJzZXMgKFNvbGFyaXMpIHJlLQorICAgICAgIHR1cm5zICBhIHZhbHVlIG90aGVyIHRoYW4gT0svRVJSIGZyb20gPFNUUk9ORz50cHV0czwvU1RST05HPi4gIFRoYXQgcmV0dXJucworICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgYW5kIGRvZXMgbm8gZXJyb3ItY2hlY2tpbmcuCisKKyAgICAgICBYL09wZW4gQ3Vyc2VzIHByb3RvdHlwZXMgPFNUUk9ORz50cGFybTwvU1RST05HPiB3aXRoIGEgZml4ZWQgbnVtYmVyIG9mICBwYS0KKyAgICAgICByYW1ldGVycywgIHJhdGhlciB0aGFuIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4gIFRoaXMgaW0tCisgICAgICAgcGxlbWVudGF0aW9uIHVzZXMgYSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LiAgUG9ydGFibGUgIGFwLQorICAgICAgIHBsaWNhdGlvbnMgIHNob3VsZCAgcHJvdmlkZSA5IHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIGZvcm1hdDsKKyAgICAgICB6ZXJvZXMgYXJlIGZpbmUgZm9yIHRoaXMgcHVycG9zZS4KKworICAgICAgIFgvT3BlbiBub3RlcyB0aGF0IGFmdGVyIGNhbGxpbmcgPFNUUk9ORz5tdmN1cjwvU1RST05HPiwgIHRoZSAgY3Vyc2VzICBzdGF0ZQorICAgICAgIG1heSAgbm90ICBtYXRjaCB0aGUgYWN0dWFsIHRlcm1pbmFsIHN0YXRlLCBhbmQgdGhhdCBhbiBhcC0KKyAgICAgICBwbGljYXRpb24gc2hvdWxkIHRvdWNoIGFuZCByZWZyZXNoIHRoZSB3aW5kb3cgIGJlZm9yZSAgcmUtCisgICAgICAgc3VtaW5nIG5vcm1hbCBjdXJzZXMgY2FsbHMuICBCb3RoIG5jdXJzZXMgYW5kIFN5c3RlbSBWIFJlLQorICAgICAgIGxlYXNlIDQgY3Vyc2VzIGltcGxlbWVudCA8U1RST05HPm12Y3VyPC9TVFJPTkc+IHVzaW5nIHRoZSBTQ1JFRU4gZGF0YSBhbGxvLQorICAgICAgIGNhdGVkIGluIGVpdGhlciA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gb3IgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+LiAgU28gdGhvdWdoIGl0IGlzIGRvY3UtCisgICAgICAgbWVudGVkIGFzIGEgdGVybWluZm8gZnVuY3Rpb24sIDxTVFJPTkc+bXZjdXI8L1NUUk9ORz4gaXMgIHJlYWxseSAgYSAgY3Vyc2VzCisgICAgICAgZnVuY3Rpb24gd2hpY2ggaXMgbm90IHdlbGwgc3BlY2lmaWVkLgorCisgICAgICAgWC9PcGVuICBzdGF0ZXMgIHRoYXQgIHRoZSAgb2xkICBsb2NhdGlvbiBtdXN0IGJlIGdpdmVuIGZvcgorICAgICAgIDxTVFJPTkc+bXZjdXI8L1NUUk9ORz4uICBUaGlzIGltcGxlbWVudGF0aW9uIGFsbG93cyB0aGUgY2FsbGVyIHRvIHVzZSAgLTEncworICAgICAgIGZvciAgdGhlIG9sZCBvcmRpbmF0ZXMuICBJbiB0aGF0IGNhc2UsIHRoZSBvbGQgbG9jYXRpb24gaXMKKyAgICAgICB1bmtub3duLgorCisgICAgICAgRXh0ZW5kZWQgdGVybWluYWwgY2FwYWJpbGl0eSBuYW1lcywgZS5nLiwgIGFzICBkZWZpbmVkICBieQorICAgICAgIDxTVFJPTkc+dGljPC9TVFJPTkc+IDxTVFJPTkc+LXg8L1NUUk9ORz4sICBhcmUgIG5vdCAgc3RvcmVkICBpbiB0aGUgYXJyYXlzIGRlc2NyaWJlZCBpbiB0aGlzCisgICAgICAgc2VjdGlvbi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4sICA8U1RST05HPmN1cnNfdGVybS08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWNhcC4zeC5odG1sIj5jYXAoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJwdXRjLjMuaHRtbCI+cHV0YygzKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdGhyZWFkcy4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdGhyZWFkcy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMmYwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190aHJlYWRzLjN4Lmh0bWwKQEAgLTAsMCArMSw2MzEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc190aHJlYWRzLjN4LHYgMS4xMiAyMDA4LzA0LzEyIDE4OjIyOjUxIHRvbSBFeHAgQAorICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfdGhyZWFkcyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfdGhyZWFkcyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc190aHJlYWRzLjN4Lmh0bWwiPmN1cnNfdGhyZWFkcygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RocmVhZHMuM3guaHRtbCI+Y3Vyc190aHJlYWRzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnVzZV9zY3JlZW48L1NUUk9ORz4sIDxTVFJPTkc+dXNlX3dpbmRvdzwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHRocmVhZCBzdXBwb3J0CisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+dHlwZWRlZjwvU1RST05HPiAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz4oKk5DVVJTRVNfV0lORE9XX0NCKShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qLDwvU1RST05HPiA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz4qKTs8L1NUUk9ORz4gPFNUUk9ORz50eXBlLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+ZGVmPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+KCpOQ1VSU0VTX1NDUkVFTl9DQikoU0NSRUVOPC9TVFJPTkc+IDxTVFJPTkc+Kiw8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+Kik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zZXRfZXNjZGVsYXkoaW50PC9TVFJPTkc+IDxTVFJPTkc+c2l6ZSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zZXRfdGFic2l6ZShpbnQ8L1NUUk9ORz4gPFNUUk9ORz5zaXplKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVzZV9zY3JlZW4oU0NSRUVOPC9TVFJPTkc+IDxTVFJPTkc+KnNjciw8L1NUUk9ORz4gPFNUUk9ORz5OQ1VSU0VTX1dJTkRPV19DQjwvU1RST05HPiAgPFNUUk9ORz5mdW5jLDwvU1RST05HPiAgPFNUUk9ORz52b2lkPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz4qZGF0YSk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gIDxTVFJPTkc+dXNlX3dpbmRvdyhXSU5ET1c8L1NUUk9ORz4gIDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5OQ1VSU0VTX1NDUkVFTl9DQjwvU1RST05HPiA8U1RST05HPmZ1bmMsPC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+KmRhdGEpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcHJvdmlkZSAgcnVkaW1lbi0KKyAgICAgICB0YXJ5ICBzdXBwb3J0IGZvciBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICBUaGlzIG1ha2VzCisgICAgICAgYSBkaWZmZXJlbnQgc2V0IG9mIGxpYnJhcmllcywgZS5nLiwgPEVNPmxpYm5jdXJzZXN0PC9FTT4gc2luY2UgIHRoZQorICAgICAgIGJpbmFyeSBpbnRlcmZhY2VzIGFyZSBkaWZmZXJlbnQuCisKKyAgICAgICBSYXRoZXIgIHRoYW4gbW9kaWZ5IHRoZSBpbnRlcmZhY2VzIHRvIHBhc3MgYSB0aHJlYWQgc3BlY2ktCisgICAgICAgZmllciB0byBlYWNoIGZ1bmN0aW9uLCBpdCBhZGRzIGEgZmV3IGZ1bmN0aW9ucyAgd2hpY2ggIGNhbgorICAgICAgIGJlIHVzZWQgaW4gYW55IGNvbmZpZ3VyYXRpb24gd2hpY2ggaGlkZSB0aGUgbXV0ZXgncyBuZWVkZWQKKyAgICAgICB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdXNlIG9mICB0aGUgIGdsb2JhbCAgdmFyaWFibGVzICB3aGVuCisgICAgICAgY29uZmlndXJlZCBmb3IgdGhyZWFkaW5nLgorCisgICAgICAgSW4gIGFkZGl0aW9uICB0byAgZm9yY2luZyAgYWNjZXNzIHRvIG1lbWJlcnMgb2YgdGhlIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+CisgICAgICAgc3RydWN0dXJlIHRvIGJlIHZpYSBmdW5jdGlvbnMgIChzZWUgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPiksICBpdAorICAgICAgIG1ha2VzIGZ1bmN0aW9ucyBvZiB0aGUgY29tbW9uIGdsb2JhbCB2YXJpYWJsZXMsIGUuZy4sIENPTC0KKyAgICAgICBPUlMsIENPTE9SX1BBSVJTLCBDT0xTLCBFU0NERUxBWSwgTElORVMsICBUQUJTSVpFICBjdXJzY3IsCisgICAgICAgbmV3c2NyICBhbmQgIHR0eXR5cGUuICAgVGhvc2UgIHZhcmlhYmxlcyBhcmUgbWFpbnRhaW5lZCBhcworICAgICAgIHJlYWQtb25seSB2YWx1ZXMsIHN0b3JlZCBpbiB0aGUgPFNUUk9ORz5TQ1JFRU48L1NUUk9ORz4gc3RydWN0dXJlLgorCisgICAgICAgRXZlbiB0aGlzIGlzIG5vdCBlbm91Z2ggdG8gbWFrZSBhIHRocmVhZC1zYWZlICBhcHBsaWNhdGlvbgorICAgICAgIHVzaW5nICBjdXJzZXMuICAgQSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbiB3b3VsZCBiZSBleC0KKyAgICAgICBwZWN0ZWQgdG8gaGF2ZSB0aHJlYWRzIHVwZGF0aW5nIHNlcGFyYXRlICB3aW5kb3dzICAod2l0aGluCisgICAgICAgdGhlIHNhbWUgZGV2aWNlKSwgb3IgdXBkYXRpbmcgb24gc2VwYXJhdGUgc2NyZWVucyAob24gZGlmLQorICAgICAgIGZlcmVudCBkZXZpY2VzKS4gIEFsc28sIGEgZmV3IG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzICBhcmUKKyAgICAgICBjb25zaWRlcmVkICB3cml0YWJsZSAgYnkgc29tZSBhcHBsaWNhdGlvbnMuICBUaGUgZnVuY3Rpb25zCisgICAgICAgZGVzY3JpYmVkIGhlcmUgYWRkcmVzcyB0aGVzZSBzcGVjaWFsIHNpdHVhdGlvbnMuCisKKyAgICAgICBUaGUgRVNDREVMQVkgYW5kIFRBQlNJWkUgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbW9kaWZpZWQgIGJ5CisgICAgICAgc29tZSAgYXBwbGljYXRpb25zLiAgIFRvIG1vZGlmeSB0aGVtIGluIGFueSBjb25maWd1cmF0aW9uLAorICAgICAgIHVzZSB0aGUgIDxTVFJPTkc+c2V0X2VzY2RlbGF5PC9TVFJPTkc+ICBvciAgPFNUUk9ORz5zZXRfdGFic2l6ZTwvU1RST05HPiAgZnVuY3Rpb25zLiAgIE90aGVyCisgICAgICAgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90IG1vZGlmaWFibGUuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+dXNlX3dpbmRvdzwvU1RST05HPiAgYW5kICA8U1RST05HPnVzZV9zY3JlZW48L1NUUk9ORz4gIGZ1bmN0aW9ucyBwcm92aWRlIGNvYXJzZQorICAgICAgIGdyYW51bGFyaXR5IG11dGV4ZXMgZm9yIHRoZWlyIHJlc3BlY3RpdmUgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gYW5kIDxTVFJPTkc+U0NSRUVOPC9TVFJPTkc+CisgICAgICAgcGFyYW1ldGVycywgIGFuZCBjYWxsIGEgdXNlci1zdXBwbGllZCBmdW5jdGlvbiwgcGFzc2luZyBpdAorICAgICAgIGEgPEVNPmRhdGE8L0VNPiBwYXJhbWV0ZXIsIGFuZCByZXR1cm5pbmcgdGhlIHZhbHVlIGZyb20gIHRoZSAgdXNlci0KKyAgICAgICBzdXBwbGllZCBmdW5jdGlvbiB0byB0aGUgYXBwbGljYXRpb24uCisKKyAgIDxTVFJPTkc+VVNBR0U8L1NUUk9ORz4KKyAgICAgICBBbGwgIG9mICB0aGUgbmN1cnNlcyBsaWJyYXJ5IGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgbG8tCisgICAgICAgY2FsZSBpcyBub3QgYWx0ZXJlZCBkdXJpbmcgb3BlcmF0aW9uLiAgSW4gIGFkZGl0aW9uLCAgdGhleQorICAgICAgIHVzZSBkYXRhIHdoaWNoIGlzIG1haW50YWluZWQgd2l0aGluIGEgaGllcmFyY2h5IG9mIHNjb3Blcy4KKworICAgICAgICAgICAgICAtICBnbG9iYWwgZGF0YSwgZS5nLiwgdXNlZCBpbiB0aGUgbG93LWxldmVsIHRlcm1pbi0KKyAgICAgICAgICAgICAgICAgZm8gb3IgdGVybWNhcCBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgIC0gIHRlcm1pbmFsICBkYXRhLCAgZS5nLiwgYXNzb2NpYXRlZCB3aXRoIGEgY2FsbCB0bworICAgICAgICAgICAgICAgICA8RU0+c2V0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y3VydGVybTwvRU0+LiAgVGhlIHRlcm1pbmFsIGRhdGEgYXJlICBpbml0aWFsaXplZAorICAgICAgICAgICAgICAgICB3aGVuIHNjcmVlbnMgYXJlIGNyZWF0ZWQuCisKKyAgICAgICAgICAgICAgLSAgc2NyZWVuICBkYXRhLCAgZS5nLiwgIGFzc29jaWF0ZWQgIHdpdGggYSBjYWxsIHRvCisgICAgICAgICAgICAgICAgIDxFTT5uZXd0ZXJtPC9FTT4gb3IgPEVNPmluaXRzY3I8L0VNPi4KKworICAgICAgICAgICAgICAtICB3aW5kb3cgZGF0YSwgZS5nLiwgYXNzb2NpYXRlZCAgd2l0aCAgYSAgY2FsbCAgdG8KKyAgICAgICAgICAgICAgICAgPEVNPm5ld3dpbjwvRU0+ICBvciAgPEVNPnN1YndpbjwvRU0+LiAgV2luZG93cyBhcmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgIHNjcmVlbnMuICBQYWRzIGFyZSAgbm90ICBuZWNlc3NhcmlseSAgYXNzb2NpYXRlZAorICAgICAgICAgICAgICAgICB3aXRoIGEgcGFydGljdWxhciBzY3JlZW4uCisKKyAgICAgICAgICAgICAgICAgTW9zdCAgY3Vyc2VzIGFwcGxpY2F0aW9ucyBvcGVyYXRlIG9uIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgIHdpbmRvd3Mgd2l0aGluIGEgc2luZ2xlIHNjcmVlbi4KKworICAgICAgICAgICAgICAtICByZWVudHJhbnQsIGkuZS4sIGl0IHVzZXMgb25seSB0aGUgZGF0YSBwYXNzZWQgYXMKKyAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy4KKworICAgICAgIFRoaXMgdGFibGUgbGlzdHMgdGhlIHNjb3BlIG9mIGRhdGEgdXNlZCBmb3IgZWFjaCBzeW1ib2wgaW4KKyAgICAgICB0aGUgbmN1cnNlcyBsaWJyYXJ5ICB3aGVuICBpdCAgaXMgIGNvbmZpZ3VyZWQgIHRvICBzdXBwb3J0CisgICAgICAgdGhyZWFkaW5nOgorCisgICAgICBTeW1ib2wgICAgICAgICAgICAgICAgICBTY29wZQorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgQkMgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBDT0xPUlMgICAgICAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5KQorICAgICAgQ09MT1JfUEFJUiAgICAgICAgICAgICAgcmVlbnRyYW50CisgICAgICBDT0xPUl9QQUlSUyAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5KQorICAgICAgQ09MUyAgICAgICAgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIEVTQ0RFTEFZICAgICAgICAgICAgICAgIHNjcmVlbiAocmVhZG9ubHksIHNlZSA8RU0+c2V0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZXNjZGVsYXk8L0VNPikKKyAgICAgIExJTkVTICAgICAgICAgICAgICAgICAgIHNjcmVlbiAocmVhZG9ubHkpCisgICAgICBQQUlSX05VTUJFUiAgICAgICAgICAgICByZWVudHJhbnQKKyAgICAgIFBDICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgU1AgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBUQUJTSVpFICAgICAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5KQorICAgICAgVVAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBhY3NfbWFwICAgICAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5KQorICAgICAgYWRkX3djaCAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhZGRfd2NobnN0ciAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGFkZF93Y2hzdHIgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYWRkY2ggICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhZGRjaG5zdHIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGFkZGNoc3RyICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYWRkbnN0ciAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhZGRud3N0ciAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGFkZHN0ciAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYWRkd3N0ciAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhc3N1bWVfZGVmYXVsdF9jb2xvcnMgICBzY3JlZW4KKyAgICAgIGF0dHJfZ2V0ICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYXR0cl9vZmYgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhdHRyX29uICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGF0dHJfc2V0ICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYXR0cm9mZiAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBhdHRyb24gICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGF0dHJzZXQgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYmF1ZHJhdGUgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBiZWVwICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGJrZ2QgICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYmtnZHNldCAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBia2dybmQgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGJrZ3JuZHNldCAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYm9vbGNvZGVzICAgICAgICAgICAgICAgZ2xvYmFsIChyZWFkb25seSkKKyAgICAgIGJvb2xmbmFtZXMgICAgICAgICAgICAgIGdsb2JhbCAocmVhZG9ubHkpCisgICAgICBib29sbmFtZXMgICAgICAgICAgICAgICBnbG9iYWwgKHJlYWRvbmx5KQorICAgICAgYm9yZGVyICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBib3JkZXJfc2V0ICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGJveCAgICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgYm94X3NldCAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisKKyAgICAgIGNhbl9jaGFuZ2VfY29sb3IgICAgICAgIHRlcm1pbmFsCisgICAgICBjYnJlYWsgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGNoZ2F0ICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgY2xlYXIgICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBjbGVhcm9rICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGNscnRvYm90ICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgY2xydG9lb2wgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBjb2xvcl9jb250ZW50ICAgICAgICAgICBzY3JlZW4KKyAgICAgIGNvbG9yX3NldCAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgY29weXdpbiAgICAgICAgICAgICAgICAgd2luZG93IGxvY2tzKHNvdXJjZSwgdGFyZ2V0KQorICAgICAgY3VyX3Rlcm0gICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIGN1cnNfc2V0ICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgY3Vyc2NyICAgICAgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIGN1cnNlc192ZXJzaW9uICAgICAgICAgIGdsb2JhbCAocmVhZG9ubHkpCisgICAgICBkZWZfcHJvZ19tb2RlICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgZGVmX3NoZWxsX21vZGUgICAgICAgICAgdGVybWluYWwKKyAgICAgIGRlZmluZV9rZXkgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgZGVsX2N1cnRlcm0gICAgICAgICAgICAgc2NyZWVuCisgICAgICBkZWxheV9vdXRwdXQgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGRlbGNoICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgZGVsZXRlbG4gICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBkZWxzY3JlZW4gICAgICAgICAgICAgICBnbG9iYWwgbG9ja3Moc2NyZWVubGlzdCwgc2NyZWVuKQorICAgICAgZGVsd2luICAgICAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QpCisgICAgICBkZXJ3aW4gICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGRvdXBkYXRlICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgZHVwd2luICAgICAgICAgICAgICAgICAgc2NyZWVuIGxvY2tzKHdpbmRvdykKKyAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgZWNob193Y2hhciAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBlY2hvY2hhciAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGVuZHdpbiAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgZXJhc2UgICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBlcmFzZWNoYXIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGVyYXNld2NoYXIgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgZmlsdGVyICAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBmbGFzaCAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgZmx1c2hpbnAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBnZXRfd2NoICAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIGdldF93c3RyICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgZ2V0YXR0cnMgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRiZWd4ICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGdldGJlZ3kgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgZ2V0YmtnZCAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRia2dybmQgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGdldGNjaGFyICAgICAgICAgICAgICAgIHJlZW50cmFudAorICAgICAgZ2V0Y2ggICAgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBnZXRjdXJ4ICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGdldGN1cnkgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgZ2V0bWF4eCAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRtYXh5ICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGdldG1vdXNlICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgZ2V0bl93c3RyICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBnZXRuc3RyICAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIGdldHBhcnggICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgZ2V0cGFyeSAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBnZXRzdHIgICAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIGdldHdpbiAgICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgaGFsZmRlbGF5ICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBoYXNfY29sb3JzICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgaGFzX2ljICAgICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIGhhc19pbCAgICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBoYXNfa2V5ICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGhsaW5lICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaGxpbmVfc2V0ICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpZGNvayAgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlkbG9rICAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgaW1tZWRvayAgICAgICAgICAgICAgICAgd2luZG93CisKKyAgICAgIGluX3djaCAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5fd2NobnN0ciAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbl93Y2hzdHIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluY2ggICAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5jaG5zdHIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbmNoc3RyICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluaXRfY29sb3IgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgaW5pdF9wYWlyICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBpbml0c2NyICAgICAgICAgICAgICAgICBnbG9iYWwgbG9ja3Moc2NyZWVubGlzdCkKKyAgICAgIGlubnN0ciAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5ud3N0ciAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbnNfbndzdHIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluc193Y2ggICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5zX3dzdHIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbnNjaCAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluc2RlbGxuICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5zZXJ0bG4gICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbnNuc3RyICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIGluc3N0ciAgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgaW5zdHIgICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpbnRyZmx1c2ggICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgaW53c3RyICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBpc19jbGVhcmVkICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX2lkY29rICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgaXNfaWRsb2sgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBpc19pbW1lZG9rICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX2tleXBhZCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgaXNfbGVhdmVvayAgICAgICAgICAgICAgd2luZG93CisgICAgICBpc19saW5ldG91Y2hlZCAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX25vZGVsYXkgICAgICAgICAgICAgIHdpbmRvdworICAgICAgaXNfbm90aW1lb3V0ICAgICAgICAgICAgd2luZG93CisgICAgICBpc19zY3JvbGxvayAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGlzX3N5bmNvayAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgaXNfdGVybV9yZXNpemVkICAgICAgICAgdGVybWluYWwKKyAgICAgIGlzX3dpbnRvdWNoZWQgICAgICAgICAgIHdpbmRvdworICAgICAgaXNlbmR3aW4gICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBrZXlfZGVmaW5lZCAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGtleV9uYW1lICAgICAgICAgICAgICAgIGdsb2JhbCAoc3RhdGljIGRhdGEpCisgICAgICBrZXlib3VuZCAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGtleW5hbWUgICAgICAgICAgICAgICAgIGdsb2JhbCAoc3RhdGljIGRhdGEpCisgICAgICBrZXlvayAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIGtleXBhZCAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAga2lsbGNoYXIgICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIGtpbGx3Y2hhciAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBsZWF2ZW9rICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIGxvbmduYW1lICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbWNwcmludCAgICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIG1ldGEgICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbW91c2VfdHJhZm8gICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtb3VzZWludGVydmFsICAgICAgICAgICBzY3JlZW4KKyAgICAgIG1vdXNlbWFzayAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbW92ZSAgICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmFkZF93Y2ggICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12YWRkX3djaG5zdHIgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZhZGRfd2Noc3RyICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmFkZGNoICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12YWRkY2huc3RyICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZhZGRjaHN0ciAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmFkZG5zdHIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12YWRkbndzdHIgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZhZGRzdHIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmFkZHdzdHIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12Y2hnYXQgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZjdXIgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBtdmRlbGNoICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12ZGVyd2luICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorCisgICAgICBtdmdldF93Y2ggICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12Z2V0X3dzdHIgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZnZXRjaCAgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdmdldG5fd3N0ciAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12Z2V0bnN0ciAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZnZXRzdHIgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdmhsaW5lICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aGxpbmVfc2V0ICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbl93Y2ggICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluX3djaG5zdHIgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5fd2Noc3RyICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbmNoICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluY2huc3RyICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5jaHN0ciAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbm5zdHIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmlubndzdHIgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5zX253c3RyICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbnNfd2NoICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluc193c3RyICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5zY2ggICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbnNuc3RyICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdmluc3N0ciAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12aW5zdHIgICAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgbXZpbndzdHIgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdnByaW50dyAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12c2NhbncgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbXZ2bGluZSAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBtdnZsaW5lX3NldCAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIG12d2FkZF93Y2ggICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3YWRkX3djaG5zdHIgICAgICAgICAgd2luZG93CisgICAgICBtdndhZGRfd2Noc3RyICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2FkZGNoICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3YWRkY2huc3RyICAgICAgICAgICAgd2luZG93CisgICAgICBtdndhZGRjaHN0ciAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2FkZG5zdHIgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3YWRkbndzdHIgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndhZGRzdHIgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2FkZHdzdHIgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3Y2hnYXQgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndkZWxjaCAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2dldF93Y2ggICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZ3Z2V0X3dzdHIgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdndnZXRjaCAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12d2dldG5fd3N0ciAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgbXZ3Z2V0bnN0ciAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICBtdndnZXRzdHIgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIG12d2hsaW5lICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aGxpbmVfc2V0ICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbiAgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luX3djaCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5fd2NobnN0ciAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbl93Y2hzdHIgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luY2ggICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5jaG5zdHIgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbmNoc3RyICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2lubnN0ciAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5ud3N0ciAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbnNfbndzdHIgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luc193Y2ggICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5zX3dzdHIgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbnNjaCAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2luc25zdHIgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3aW5zc3RyICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdndpbnN0ciAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG12d2lud3N0ciAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbXZ3cHJpbnR3ICAgICAgICAgICAgICAgd2luZG93CisKKyAgICAgIG12d3NjYW53ICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbXZ3dmxpbmUgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBtdnd2bGluZV9zZXQgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG5hcG1zICAgICAgICAgICAgICAgICAgIHJlZW50cmFudAorICAgICAgbmV3cGFkICAgICAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHdpbmRvd2xpc3QpCisgICAgICBuZXdzY3IgICAgICAgICAgICAgICAgICBzY3JlZW4gKHJlYWRvbmx5KQorICAgICAgbmV3dGVybSAgICAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QpCisgICAgICBuZXd3aW4gICAgICAgICAgICAgICAgICBnbG9iYWwgbG9ja3Mod2luZG93bGlzdCkKKyAgICAgIG5sICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbm9jYnJlYWsgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBub2RlbGF5ICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIG5vZWNobyAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgbm9maWx0ZXIgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBub25sICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG5vcWlmbHVzaCAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBub3JhdyAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIG5vdGltZW91dCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgbnVtY29kZXMgICAgICAgICAgICAgICAgZ2xvYmFsIChyZWFkb25seSkKKyAgICAgIG51bWZuYW1lcyAgICAgICAgICAgICAgIGdsb2JhbCAocmVhZG9ubHkpCisgICAgICBudW1uYW1lcyAgICAgICAgICAgICAgICBnbG9iYWwgKHJlYWRvbmx5KQorICAgICAgb3NwZWVkICAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICBvdmVybGF5ICAgICAgICAgICAgICAgICB3aW5kb3cgbG9ja3Moc291cmNlLCB0YXJnZXQpCisgICAgICBvdmVyd3JpdGUgICAgICAgICAgICAgICB3aW5kb3cgbG9ja3Moc291cmNlLCB0YXJnZXQpCisgICAgICBwYWlyX2NvbnRlbnQgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHBlY2hvX3djaGFyICAgICAgICAgICAgIHNjcmVlbgorICAgICAgcGVjaG9jaGFyICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBwbm91dHJlZnJlc2ggICAgICAgICAgICBzY3JlZW4KKyAgICAgIHByZWZyZXNoICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgcHJpbnR3ICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBwdXRwICAgICAgICAgICAgICAgICAgICBnbG9iYWwKKyAgICAgIHB1dHdpbiAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgcWlmbHVzaCAgICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIHJhdyAgICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgcmVkcmF3d2luICAgICAgICAgICAgICAgd2luZG93CisgICAgICByZWZyZXNoICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHJlc2V0X3Byb2dfbW9kZSAgICAgICAgIHNjcmVlbgorICAgICAgcmVzZXRfc2hlbGxfbW9kZSAgICAgICAgc2NyZWVuCisgICAgICByZXNldHR5ICAgICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgcmVzaXplX3Rlcm0gICAgICAgICAgICAgc2NyZWVuIGxvY2tzKHdpbmRvd2xpc3QpCisgICAgICByZXNpemV0ZXJtICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHJlc3RhcnR0ZXJtICAgICAgICAgICAgIHNjcmVlbgorICAgICAgcmlwb2ZmbGluZSAgICAgICAgICAgICAgZ2xvYmFsIChzdGF0aWMgZGF0YSkKKyAgICAgIHNhdmV0dHkgICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICBzY2FudyAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNjcl9kdW1wICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2NyX2luaXQgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzY3JfcmVzdG9yZSAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNjcl9zZXQgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2NybCAgICAgICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBzY3JvbGwgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHNjcm9sbG9rICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgc2V0X2N1cnRlcm0gICAgICAgICAgICAgc2NyZWVuCisgICAgICBzZXRfZXNjZGVsYXkgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNldF90YWJzaXplICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2V0X3Rlcm0gICAgICAgICAgICAgICAgZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QsIHNjcmVlbikKKyAgICAgIHNldGNjaGFyICAgICAgICAgICAgICAgIHJlZW50cmFudAorICAgICAgc2V0c2NycmVnICAgICAgICAgICAgICAgd2luZG93IChzdGRzY3IpCisgICAgICBzZXR1cHRlcm0gICAgICAgICAgICAgICBnbG9iYWwKKyAgICAgIHNsa19hdHRyICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX2F0dHJfb2ZmICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfYXR0cl9vbiAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19hdHRyX3NldCAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX2F0dHJvZmYgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfYXR0cm9uICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19hdHRyc2V0ICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX2NsZWFyICAgICAgICAgICAgICAgc2NyZWVuCisKKyAgICAgIHNsa19jb2xvciAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX2luaXQgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfbGFiZWwgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19ub3V0cmVmcmVzaCAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX3JlZnJlc2ggICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfcmVzdG9yZSAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHNsa19zZXQgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgc2xrX3RvdWNoICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICBzbGtfd3NldCAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHN0YW5kZW5kICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgc3RhbmRvdXQgICAgICAgICAgICAgICAgd2luZG93CisgICAgICBzdGFydF9jb2xvciAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHN0ZHNjciAgICAgICAgICAgICAgICAgIHNjcmVlbiAocmVhZG9ubHkpCisgICAgICBzdHJjb2RlcyAgICAgICAgICAgICAgICBnbG9iYWwgKHJlYWRvbmx5KQorICAgICAgc3RyZm5hbWVzICAgICAgICAgICAgICAgZ2xvYmFsIChyZWFkb25seSkKKyAgICAgIHN0cm5hbWVzICAgICAgICAgICAgICAgIGdsb2JhbCAocmVhZG9ubHkpCisgICAgICBzdWJwYWQgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHN1YndpbiAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgc3luY29rICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB0ZXJtX2F0dHJzICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHRlcm1hdHRycyAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgdGVybW5hbWUgICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIHRnZXRlbnQgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgdGdldGZsYWcgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICB0Z2V0bnVtICAgICAgICAgICAgICAgICBnbG9iYWwKKyAgICAgIHRnZXRzdHIgICAgICAgICAgICAgICAgIGdsb2JhbAorICAgICAgdGdvdG8gICAgICAgICAgICAgICAgICAgZ2xvYmFsCisgICAgICB0aWdldGZsYWcgICAgICAgICAgICAgICB0ZXJtaW5hbAorICAgICAgdGlnZXRudW0gICAgICAgICAgICAgICAgdGVybWluYWwKKyAgICAgIHRpZ2V0c3RyICAgICAgICAgICAgICAgIHRlcm1pbmFsCisgICAgICB0aW1lb3V0ICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIHRvdWNobGluZSAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgdG91Y2h3aW4gICAgICAgICAgICAgICAgd2luZG93CisgICAgICB0cGFybSAgICAgICAgICAgICAgICAgICBnbG9iYWwgKHN0YXRpYyBkYXRhKQorICAgICAgdHB1dHMgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB0cmFjZSAgICAgICAgICAgICAgICAgICBnbG9iYWwgKHN0YXRpYyBkYXRhKQorICAgICAgdHR5dHlwZSAgICAgICAgICAgICAgICAgc2NyZWVuIChyZWFkb25seSkKKyAgICAgIHR5cGVhaGVhZCAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgdW5jdHJsICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB1bmdldF93Y2ggICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIHVuZ2V0Y2ggICAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgdW5nZXRtb3VzZSAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICB1bnRvdWNod2luICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHVzZV9kZWZhdWx0X2NvbG9ycyAgICAgIHNjcmVlbgorICAgICAgdXNlX2VudiAgICAgICAgICAgICAgICAgZ2xvYmFsIChzdGF0aWMgZGF0YSkKKyAgICAgIHVzZV9leHRlbmRlZF9uYW1lcyAgICAgIGdsb2JhbCAoc3RhdGljIGRhdGEpCisgICAgICB1c2VfbGVnYWN5X2NvZGluZyAgICAgICBzY3JlZW4KKyAgICAgIHVzZV9zY3JlZW4gICAgICAgICAgICAgIGdsb2JhbCBsb2NrcyhzY3JlZW5saXN0LCBzY3JlZW4pCisgICAgICB1c2Vfd2luZG93ICAgICAgICAgICAgICBnbG9iYWwgbG9ja3Mod2luZG93bGlzdCwgd2luZG93KQorICAgICAgdmlkX2F0dHIgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB2aWRfcHV0cyAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHZpZGF0dHIgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgdmlkcHV0cyAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB2bGluZSAgICAgICAgICAgICAgICAgICB3aW5kb3cgKHN0ZHNjcikKKyAgICAgIHZsaW5lX3NldCAgICAgICAgICAgICAgIHdpbmRvdyAoc3Rkc2NyKQorICAgICAgdndfcHJpbnR3ICAgICAgICAgICAgICAgd2luZG93CisgICAgICB2d19zY2FudyAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHZ3cHJpbnR3ICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgdndzY2FudyAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICB3YWRkX3djaCAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhZGRfd2NobnN0ciAgICAgICAgICAgIHdpbmRvdworICAgICAgd2FkZF93Y2hzdHIgICAgICAgICAgICAgd2luZG93CisgICAgICB3YWRkY2ggICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhZGRjaG5zdHIgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2FkZGNoc3RyICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YWRkbnN0ciAgICAgICAgICAgICAgICB3aW5kb3cKKworICAgICAgd2FkZG53c3RyICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YWRkc3RyICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhZGR3c3RyICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2F0dHJfZ2V0ICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YXR0cl9vZmYgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhdHRyX29uICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2F0dHJfc2V0ICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YXR0cm9mZiAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdhdHRyb24gICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2F0dHJzZXQgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3YmtnZCAgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdia2dkc2V0ICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2JrZ3JuZCAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Ymtncm5kc2V0ICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdib3JkZXIgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2JvcmRlcl9zZXQgICAgICAgICAgICAgd2luZG93CisgICAgICB3Y2hnYXQgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdjbGVhciAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2NscnRvYm90ICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Y2xydG9lb2wgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdjb2xvcl9zZXQgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2N1cnN5bmN1cCAgICAgICAgICAgICAgc2NyZWVuIChhZmZlY3RzIHdpbmRvdyBwbHVzIHBhcmVudHMpCisgICAgICB3ZGVsY2ggICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdkZWxldGVsbiAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2VjaG9fd2NoYXIgICAgICAgICAgICAgd2luZG93CisgICAgICB3ZWNob2NoYXIgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdlbmNsb3NlICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2VyYXNlICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Z2V0X3djaCAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIHdnZXRfd3N0ciAgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgd2dldGJrZ3JuZCAgICAgICAgICAgICAgd2luZG93CisgICAgICB3Z2V0Y2ggICAgICAgICAgICAgICAgICBzY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKKyAgICAgIHdnZXRuX3dzdHIgICAgICAgICAgICAgIHNjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorICAgICAgd2dldG5zdHIgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICB3Z2V0cGFyZW50ICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdnZXRzY3JyZWcgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2dldHN0ciAgICAgICAgICAgICAgICAgc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCisgICAgICB3aGxpbmUgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdobGluZV9zZXQgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luX3djaCAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5fd2NobnN0ciAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbl93Y2hzdHIgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luY2ggICAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5jaG5zdHIgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbmNoc3RyICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2lubnN0ciAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5ud3N0ciAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbnNfbndzdHIgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luc193Y2ggICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5zX3dzdHIgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbnNjaCAgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luc2RlbGxuICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5zZXJ0bG4gICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbnNuc3RyICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd2luc3N0ciAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3aW5zdHIgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdpbndzdHIgICAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd21vdXNlX3RyYWZvICAgICAgICAgICAgd2luZG93CisgICAgICB3bW92ZSAgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdub3V0cmVmcmVzaCAgICAgICAgICAgIHNjcmVlbgorICAgICAgd3ByaW50dyAgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3cmVkcmF3bG4gICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdyZWZyZXNoICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgd3Jlc2l6ZSAgICAgICAgICAgICAgICAgd2luZG93IGxvY2tzKHdpbmRvd2xpc3QpCisgICAgICB3c2NhbncgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgIHdzY3JsICAgICAgICAgICAgICAgICAgIHdpbmRvdworCisgICAgICB3c2V0c2NycmVnICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHdzdGFuZGVuZCAgICAgICAgICAgICAgIHdpbmRvdworICAgICAgd3N0YW5kb3V0ICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3c3luY2Rvd24gICAgICAgICAgICAgICBzY3JlZW4gKGFmZmVjdHMgd2luZG93IHBsdXMgcGFyZW50cykKKyAgICAgIHdzeW5jdXAgICAgICAgICAgICAgICAgIHNjcmVlbiAoYWZmZWN0cyB3aW5kb3cgcGx1cyBwYXJlbnRzKQorICAgICAgd3RpbWVvdXQgICAgICAgICAgICAgICAgd2luZG93CisgICAgICB3dG91Y2hsbiAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHd1bmN0cmwgICAgICAgICAgICAgICAgIGdsb2JhbCAoc3RhdGljIGRhdGEpCisgICAgICB3dmxpbmUgICAgICAgICAgICAgICAgICB3aW5kb3cKKyAgICAgIHd2bGluZV9zZXQgICAgICAgICAgICAgIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYWxsIHJldHVybiBUUlVFIG9yIEZBTFNFLCBleGNlcHQgYXMgbm90ZWQuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgQm90aCBhIG1hY3JvIGFuZCBhIGZ1bmN0aW9uIGFyZSBwcm92aWRlZCBmb3IgZWFjaCBuYW1lLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byAgbmN1cnNlcy4gICBUaGV5ICB3ZXJlICBub3QKKyAgICAgICBzdXBwb3J0ZWQgIG9uICBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gIG5jdXJzZXMgIGV4LQorICAgICAgIHRlbnNpb25zIGJlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190aHJlYWRzLjN4Lmh0bWwiPmN1cnNfdGhyZWFkcygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3RvdWNoLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190b3VjaC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYzBmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190b3VjaC4zeC5odG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfdG91Y2guM3gsdiAxLjExIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Y3Vyc190b3VjaCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfdG91Y2ggM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRvdWNod2luPC9TVFJPTkc+LCA8U1RST05HPnRvdWNobGluZTwvU1RST05HPiwgPFNUUk9ORz51bnRvdWNod2luPC9TVFJPTkc+LCA8U1RST05HPnd0b3VjaGxuPC9TVFJPTkc+LCA8U1RST05HPmlzX2xpbmV0b3VjaGVkPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+aXNfd2ludG91Y2hlZDwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHJlZnJlc2ggY29udHJvbCByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz50b3VjaHdpbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnRvdWNobGluZShXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnN0YXJ0LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNvdW50KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVudG91Y2h3aW4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz53dG91Y2hsbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+biw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jaGFuZ2VkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5pc19saW5ldG91Y2hlZChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmxpbmUpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX3dpbnRvdWNoZWQoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+dG91Y2h3aW48L1NUUk9ORz4gYW5kIDxTVFJPTkc+dG91Y2hsaW5lPC9TVFJPTkc+IHJvdXRpbmVzIHRocm93IGF3YXkgIGFsbCAgb3B0aS0KKyAgICAgICBtaXphdGlvbiAgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcGFydHMgb2YgdGhlIHdpbmRvdyBoYXZlCisgICAgICAgYmVlbiB0b3VjaGVkLCBieSBwcmV0ZW5kaW5nIHRoYXQgIHRoZSAgZW50aXJlICB3aW5kb3cgIGhhcworICAgICAgIGJlZW4gIGRyYXduICBvbi4gICBUaGlzICBpcyBzb21ldGltZXMgbmVjZXNzYXJ5IHdoZW4gdXNpbmcKKyAgICAgICBvdmVybGFwcGluZyB3aW5kb3dzLCBzaW5jZSBhIGNoYW5nZSB0byBvbmUgd2luZG93ICBhZmZlY3RzCisgICAgICAgdGhlIG90aGVyIHdpbmRvdywgYnV0IHRoZSByZWNvcmRzIG9mIHdoaWNoIGxpbmVzIGhhdmUgYmVlbgorICAgICAgIGNoYW5nZWQgaW4gdGhlIG90aGVyIHdpbmRvdyBkbyAgbm90ICByZWZsZWN0ICB0aGUgIGNoYW5nZS4KKyAgICAgICBUaGUgIHJvdXRpbmUgPFNUUk9ORz50b3VjaGxpbmU8L1NUUk9ORz4gb25seSBwcmV0ZW5kcyB0aGF0IDxFTT5jb3VudDwvRU0+IGxpbmVzIGhhdmUKKyAgICAgICBiZWVuIGNoYW5nZWQsIGJlZ2lubmluZyB3aXRoIGxpbmUgPEVNPnN0YXJ0PC9FTT4uCisKKyAgICAgICBUaGUgPFNUUk9ORz51bnRvdWNod2luPC9TVFJPTkc+IHJvdXRpbmUgbWFya3MgYWxsIGxpbmVzIGluICB0aGUgIHdpbmRvdyAgYXMKKyAgICAgICB1bmNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+d3RvdWNobG48L1NUUk9ORz4gcm91dGluZSBtYWtlcyA8RU0+bjwvRU0+IGxpbmVzIGluIHRoZSB3aW5kb3csIHN0YXJ0aW5nCisgICAgICAgYXQgbGluZSA8RU0+eTwvRU0+LCBsb29rIGFzIGlmIHRoZXkgaGF2ZSAoPEVNPmNoYW5nZWQ8L0VNPjxTVFJPTkc+PTE8L1NUUk9ORz4pICBvciAgaGF2ZSAgbm90CisgICAgICAgKDxFTT5jaGFuZ2VkPC9FTT48U1RST05HPj0wPC9TVFJPTkc+KSAgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gPFNUUk9ORz53cmVmcmVzaDwvU1RST05HPi4KKworICAgICAgIFRoZSA8U1RST05HPmlzX2xpbmV0b3VjaGVkPC9TVFJPTkc+IGFuZCA8U1RST05HPmlzX3dpbnRvdWNoZWQ8L1NUUk9ORz4gcm91dGluZXMgcmV0dXJuICA8U1RST05HPlRSVUU8L1NUUk9ORz4KKyAgICAgICBpZiAgdGhlICBzcGVjaWZpZWQgbGluZS93aW5kb3cgd2FzIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0CisgICAgICAgY2FsbCB0byA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+OyBvdGhlcndpc2UgdGhleSByZXR1cm4gPFNUUk9ORz5GQUxTRTwvU1RST05HPi4gICBJbiAgYWRkaS0KKyAgICAgICB0aW9uLCAgPFNUUk9ORz5pc19saW5ldG91Y2hlZDwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+RVJSPC9TVFJPTkc+IGlmIDxFTT5saW5lPC9FTT4gaXMgbm90IHZhbGlkIGZvcgorICAgICAgIHRoZSBnaXZlbiB3aW5kb3cuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEFsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiAgZmFpbHVyZSAgYW5kICBhbgorICAgICAgIGludGVnZXIgIHZhbHVlICBvdGhlciB0aGFuIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLAorICAgICAgIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyAgcm91dGluZSAgZGVzY3JpcC0KKyAgICAgICB0aW9ucy4KKworICAgICAgIFgvT3BlbiAgZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyBpbS0KKyAgICAgICBwbGVtZW50YXRpb24KKworICAgICAgICAgICAgICA8U1RST05HPmlzX2xpbmV0b3VjaGVkPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhbiBlcnJvciAgaWYgIHRoZSAgd2luZG93ICBwb2ludGVyICBpcworICAgICAgICAgICAgICAgICAgIG51bGwsICBvciAgaWYgIHRoZSAgbGluZSBudW1iZXIgaXMgb3V0c2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICB3aW5kb3cuICBOb3RlIHRoYXQgRVJSIGlzIGRpc3RpbmN0ICBmcm9tICBUUlVFCisgICAgICAgICAgICAgICAgICAgYW5kICBGQUxTRSwgd2hpY2ggYXJlIHRoZSBub3JtYWwgcmV0dXJuIHZhbHVlcworICAgICAgICAgICAgICAgICAgIG9mIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz53dG91Y2hsbjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gZXJyb3IgIGlmICB0aGUgIHdpbmRvdyAgcG9pbnRlciAgaXMKKyAgICAgICAgICAgICAgICAgICBudWxsLCAgb3IgIGlmICB0aGUgIGxpbmUgbnVtYmVyIGlzIG91dHNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgd2luZG93LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSAgNCAgZGVzY3JpYmVzICB0aGVzZSAgZnVuYy0KKyAgICAgICB0aW9ucy4KKworICAgICAgIFNvbWUgIGhpc3RvcmljICBjdXJzZXMgIGltcGxlbWVudGF0aW9ucyBoYWQsIGFzIGFuIHVuZG9jdS0KKyAgICAgICBtZW50ZWQgZmVhdHVyZSwgIHRoZSAgYWJpbGl0eSAgdG8gIGRvICB0aGUgIGVxdWl2YWxlbnQgIG9mCisgICAgICAgPFNUUk9ORz5jbGVhcm9rKC4uLiw8L1NUUk9ORz4gIDxTVFJPTkc+MSk8L1NUUk9ORz4gIGJ5IHNheWluZyA8U1RST05HPnRvdWNod2luKHN0ZHNjcik8L1NUUk9ORz4gb3IgPFNUUk9ORz5jbGVhcihzdGQtPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5zY3IpPC9TVFJPTkc+LiAgVGhpcyB3aWxsIG5vdCB3b3JrIHVuZGVyIG5jdXJzZXMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGFsbCByb3V0aW5lcyBleGNlcHQgPFNUUk9ORz53dG91Y2hsbjwvU1RST05HPiBtYXkgYmUgbWFjcm9zLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4uCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3RyYWNlLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190cmFjZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNGE4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc190cmFjZS4zeC5odG1sCkBAIC0wLDAgKzEsMTc1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGN1cnNfdHJhY2UuM3gsdiAxLjggMjAwNy8wMi8yNCAxNzozMzo0OSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3RyYWNlIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Y3Vyc190cmFjZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+X3RyYWNlZjwvU1RST05HPiwgPFNUUk9ORz5fdHJhY2VkdW1wPC9TVFJPTkc+LCA8U1RST05HPl90cmFjZWF0dHI8L1NUUk9ORz4sIDxTVFJPTkc+X3RyYWNlYXR0cjI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5fbmNfdHJhY2ViaXRzPC9TVFJPTkc+LCA8U1RST05HPl90cmFjZWNoYXI8L1NUUk9ORz4sIDxTVFJPTkc+X3RyYWNlY2h0eXBlPC9TVFJPTkc+LCA8U1RST05HPl90cmFjZWNodHlwZTI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5fdHJhY2Vtb3VzZTwvU1RST05HPiwgPFNUUk9ORz50cmFjZTwvU1RST05HPiAtIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGRlYnVnZ2luZyByb3V0aW5lcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5fdHJhY2VmKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipmb3JtYXQsPC9TVFJPTkc+IDxTVFJPTkc+Li4uKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5fdHJhY2VkdW1wKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipsYWJlbCw8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qX3RyYWNlYXR0cihhdHRyX3Q8L1NUUk9ORz4gPFNUUk9ORz5hdHRyKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qX3RyYWNlYXR0cjIoaW50PC9TVFJPTkc+IDxTVFJPTkc+YnVmZmVyLDwvU1RST05HPiA8U1RST05HPmNodHlwZTwvU1RST05HPiA8U1RST05HPmNoKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qX25jX3RyYWNlYml0cyh2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qX3RyYWNlY2hhcihpbnQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipfdHJhY2VjaHR5cGUoY2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Y2gpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipfdHJhY2VjaHR5cGUyKGludDwvU1RST05HPiA8U1RST05HPmJ1ZmZlciw8L1NUUk9ORz4gPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gPFNUUk9ORz5jaCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+Kl90cmFjZW1vdXNlKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+TUVWRU5UPC9TVFJPTkc+IDxTVFJPTkc+KmV2ZW50KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz50cmFjZShjb25zdDwvU1RST05HPiA8U1RST05HPnVuc2lnbmVkPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cGFyYW0pOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz50cmFjZTwvU1RST05HPiByb3V0aW5lcyBhcmUgdXNlZCBmb3IgZGVidWdnaW5nIHRoZSBuY3Vyc2VzIGxpLQorICAgICAgIGJyYXJpZXMsIGFzIHdlbGwgYXMgYXBwbGljYXRpb25zIHdoaWNoIHVzZSB0aGUgbmN1cnNlcyBsaS0KKyAgICAgICBicmFyaWVzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3JtYWxseSBhdmFpbGFibGUgb25seSB3aXRoCisgICAgICAgdGhlIGRlYnVnZ2luZyBsaWJyYXJ5IDxFTT5saWJuY3Vyc2VzPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Zy5hPC9FTT4sIGJ1dCBtYXkgYmUgIGNvbXBpbGVkCisgICAgICAgaW50byAgYW55ICBtb2RlbCAoc2hhcmVkLCBzdGF0aWMsIHByb2ZpbGUpIGJ5IGRlZmluaW5nIHRoZQorICAgICAgIHN5bWJvbCA8U1RST05HPlRSQUNFPC9TVFJPTkc+LgorCisgICAgICAgVGhlIHByaW5jaXBhbCBwYXJ0cyBvZiB0aGlzIGludGVyZmFjZSBhcmUgdGhlICA8U1RST05HPnRyYWNlPC9TVFJPTkc+ICByb3UtCisgICAgICAgdGluZSB3aGljaCBzZWxlY3RpdmVseSBlbmFibGVzIGRpZmZlcmVudCB0cmFjaW5nIGZlYXR1cmVzLAorICAgICAgIGFuZCB0aGUgPFNUUk9ORz5fdHJhY2VmPC9TVFJPTkc+IHJvdXRpbmUgd2hpY2ggd3JpdGVzIGZvcm1hdHRlZCBkYXRhIHRvIHRoZQorICAgICAgIDxFTT50cmFjZTwvRU0+IGZpbGUuCisKKyAgICAgICBDYWxsaW5nICA8U1RST05HPnRyYWNlPC9TVFJPTkc+ICB3aXRoICBhICBub256ZXJvICBwYXJhbWV0ZXIgb3BlbnMgdGhlIGZpbGUKKyAgICAgICA8U1RST05HPnRyYWNlPC9TVFJPTkc+IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3Igb3V0cHV0LiAgVGhlICBwYXJhbWV0ZXIKKyAgICAgICBpcyBmb3JtZWQgYnkgT1InaW5nIHZhbHVlcyBmcm9tIHRoZSBsaXN0IG9mIDxTVFJPTkc+VFJBQ0VfPC9TVFJPTkc+PEVNPnh4eDwvRU0+IGRlZi0KKyAgICAgICBpbml0aW9ucyBpbiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uICBUaGVzZSBpbmNsdWRlOgorCisgICAgICAgVFJBQ0VfRElTQUJMRQorICAgICAgICAgICAgdHVybiBvZmYgdHJhY2luZy4KKworICAgICAgIFRSQUNFX1RJTUVTCisgICAgICAgICAgICB0cmFjZSB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgb2YgdXBkYXRlcy4KKworICAgICAgIFRSQUNFX1RQVVRTCisgICAgICAgICAgICB0cmFjZSB0cHV0cyBjYWxscy4KKworICAgICAgIFRSQUNFX1VQREFURQorICAgICAgICAgICAgdHJhY2UgdXBkYXRlIGFjdGlvbnMsIG9sZCAmYW1wOyBuZXcgc2NyZWVucy4KKworICAgICAgIFRSQUNFX01PVkUKKyAgICAgICAgICAgIHRyYWNlIGN1cnNvciBtb3ZlbWVudCBhbmQgc2Nyb2xsaW5nLgorCisgICAgICAgVFJBQ0VfQ0hBUlBVVAorICAgICAgICAgICAgdHJhY2UgYWxsIGNoYXJhY3RlciBvdXRwdXRzLgorCisgICAgICAgVFJBQ0VfT1JESU5BUlkKKyAgICAgICAgICAgIHRyYWNlIGFsbCB1cGRhdGUgYWN0aW9ucy4gIFRoZSAgb2xkICBhbmQgIG5ldyAgc2NyZWVuCisgICAgICAgICAgICBjb250ZW50cyAgYXJlICB3cml0dGVuIHRvIHRoZSB0cmFjZSBmaWxlIGZvciBlYWNoIHJlLQorICAgICAgICAgICAgZnJlc2guCisKKyAgICAgICBUUkFDRV9DQUxMUworICAgICAgICAgICAgdHJhY2UgYWxsIGN1cnNlcyBjYWxscy4gIFRoZSBwYXJhbWV0ZXJzIGZvciBlYWNoIGNhbGwKKyAgICAgICAgICAgIGFyZSB0cmFjZWQsIGFzIHdlbGwgYXMgcmV0dXJuIHZhbHVlcy4KKworICAgICAgIFRSQUNFX1ZJUlRQVVQKKyAgICAgICAgICAgIHRyYWNlIHZpcnR1YWwgY2hhcmFjdGVyIHB1dHMsIGkuZS4sIGNhbGxzIHRvIDxTVFJPTkc+YWRkY2g8L1NUUk9ORz4uCisKKyAgICAgICBUUkFDRV9JRVZFTlQKKyAgICAgICAgICAgIHRyYWNlIGxvdy1sZXZlbCBpbnB1dCBwcm9jZXNzaW5nLCBpbmNsdWRpbmcgdGltZW91dHMuCisKKyAgICAgICBUUkFDRV9CSVRTCisgICAgICAgICAgICB0cmFjZSBzdGF0ZSBvZiBUVFkgY29udHJvbCBiaXRzLgorCisgICAgICAgVFJBQ0VfSUNBTExTCisgICAgICAgICAgICB0cmFjZSBpbnRlcm5hbC9uZXN0ZWQgY2FsbHMuCisKKyAgICAgICBUUkFDRV9DQ0FMTFMKKyAgICAgICAgICAgIHRyYWNlIHBlci1jaGFyYWN0ZXIgY2FsbHMuCisKKyAgICAgICBUUkFDRV9EQVRBQkFTRQorICAgICAgICAgICAgdHJhY2UgcmVhZC93cml0ZSBvZiB0ZXJtaW5mby90ZXJtY2FwIGRhdGEuCisKKyAgICAgICBUUkFDRV9BVFRSUworICAgICAgICAgICAgdHJhY2UgY2hhbmdlcyB0byB2aWRlbyBhdHRyaWJ1dGVzIGFuZCBjb2xvcnMuCisKKyAgICAgICBUUkFDRV9NQVhJTVVNCisgICAgICAgICAgICBtYXhpbXVtIHRyYWNlIGxldmVsLCAgZW5hYmxlcyAgYWxsICBvZiAgdGhlICBzZXBhcmF0ZQorICAgICAgICAgICAgdHJhY2UgZmVhdHVyZXMuCisKKyAgICAgICBTb21lICB0cmFjaW5nICBmZWF0dXJlcyBhcmUgZW5hYmxlZCB3aGVuZXZlciB0aGUgPFNUUk9ORz50cmFjZTwvU1RST05HPiBwYS0KKyAgICAgICByYW1ldGVyIGlzIG5vbnplcm8uICBTb21lIGZlYXR1cmVzIG92ZXJsYXAuICBUaGUgIHNwZWNpZmljCisgICAgICAgbmFtZXMgYXJlIHVzZWQgYXMgYSBndWlkZWxpbmUuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzICB3aGljaCAgcmV0dXJuIGEgdmFsdWUgYXJlIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMKKyAgICAgICBwYXJhbWV0ZXJzIHRvIHRoZSA8U1RST05HPl90cmFjZWY8L1NUUk9ORz4gcm91dGluZS4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBYU0kgIGludGVyZmFjZS4gICBTb21lCisgICAgICAgb3RoZXIgIGN1cnNlcyAgaW1wbGVtZW50YXRpb25zICBhcmUga25vd24gdG8gaGF2ZSBzaW1pbGFyLAorICAgICAgIHVuZG9jdW1lbnRlZCBmZWF0dXJlcywgYnV0IHRoZXkgYXJlICBub3QgIGNvbXBhdGlibGUgIHdpdGgKKyAgICAgICBuY3Vyc2VzLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdXRpbC4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2N1cnNfdXRpbC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MWEzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc191dGlsLjN4Lmh0bWwKQEAgLTAsMCArMSwyNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogY3Vyc191dGlsLjN4LHYgMS4yNiAyMDA4LzEwLzExIDIwOjMyOjU2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmN1cnNfdXRpbCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfdXRpbCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmRlbGF5X291dHB1dDwvU1RST05HPiwgPFNUUk9ORz5maWx0ZXI8L1NUUk9ORz4sIDxTVFJPTkc+Zmx1c2hpbnA8L1NUUk9ORz4sIDxTVFJPTkc+Z2V0d2luPC9TVFJPTkc+LCA8U1RST05HPmtleV9uYW1lPC9TVFJPTkc+LCA8U1RST05HPmtleW5hbWU8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz5ub2ZpbHRlcjwvU1RST05HPiwgPFNUUk9ORz5wdXR3aW48L1NUUk9ORz4sIDxTVFJPTkc+dW5jdHJsPC9TVFJPTkc+LCA8U1RST05HPnVzZV9lbnY8L1NUUk9ORz4sIDxTVFJPTkc+d3VuY3RybDwvU1RST05HPiAtIG1pc2NlbGxhbmVvdXMKKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiB1dGlsaXR5IHJvdXRpbmVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPip1bmN0cmwoY2h0eXBlPC9TVFJPTkc+IDxTVFJPTkc+Yyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz53Y2hhcl90PC9TVFJPTkc+IDxTVFJPTkc+Knd1bmN0cmwoY2NoYXJfdDwvU1RST05HPiA8U1RST05HPipjKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qa2V5bmFtZShpbnQ8L1NUUk9ORz4gPFNUUk9ORz5jKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNoYXI8L1NUUk9ORz4gPFNUUk9ORz4qa2V5X25hbWUod2NoYXJfdDwvU1RST05HPiA8U1RST05HPncpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPmZpbHRlcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz5ub2ZpbHRlcih2b2lkKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz51c2VfZW52KGJvb2w8L1NUUk9ORz4gPFNUUk9ORz5mKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnB1dHdpbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPkZJTEU8L1NUUk9ORz4gPFNUUk9ORz4qZmlsZXApOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KmdldHdpbihGSUxFPC9TVFJPTkc+IDxTVFJPTkc+KmZpbGVwKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmRlbGF5X291dHB1dChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5tcyk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5mbHVzaGlucCh2b2lkKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+dW5jdHJsPC9TVFJPTkc+ICByb3V0aW5lIHJldHVybnMgYSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGlzIGEKKyAgICAgICBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYXJhY3RlciA8RU0+YzwvRU0+LCBpZ25vcmluZyAgYXQtCisgICAgICAgdHJpYnV0ZXMuICAgQ29udHJvbCBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIDxTVFJPTkc+XjwvU1RST05HPjxFTT5YPC9FTT4gbm8tCisgICAgICAgdGF0aW9uLiAgUHJpbnRpbmcgY2hhcmFjdGVycyBhcmUgIGRpc3BsYXllZCAgYXMgIGlzLiAgIFRoZQorICAgICAgIGNvcnJlc3BvbmRpbmcgIDxTVFJPTkc+d3VuY3RybDwvU1RST05HPiAgcmV0dXJucyBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbgorICAgICAgIG9mIGEgd2lkZS1jaGFyYWN0ZXIuCisKKyAgICAgICBUaGUgPFNUUk9ORz5rZXluYW1lPC9TVFJPTkc+IHJvdXRpbmUgcmV0dXJucyBhIGNoYXJhY3RlciBzdHJpbmcgY29ycmVzcG9uZC0KKyAgICAgICBpbmcgdG8gdGhlIGtleSA8RU0+YzwvRU0+OgorCisgICAgICAgICAgLSAgUHJpbnRhYmxlICBjaGFyYWN0ZXJzICBhcmUgIGRpc3BsYXllZCBhcyB0aGVtc2VsdmVzLAorICAgICAgICAgICAgIGUuZy4sIGEgb25lLWNoYXJhY3RlciBzdHJpbmcgY29udGFpbmluZyB0aGUga2V5LgorCisgICAgICAgICAgLSAgQ29udHJvbCBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIDxTVFJPTkc+XjwvU1RST05HPjxFTT5YPC9FTT4gbm90YXRpb24uCisKKyAgICAgICAgICAtICBERUwgKGNoYXJhY3RlciAxMjcpIGlzIGRpc3BsYXllZCBhcyA8U1RST05HPl4/PC9TVFJPTkc+LgorCisgICAgICAgICAgLSAgVmFsdWVzICBhYm92ZSAxMjggYXJlIGVpdGhlciBtZXRhIGNoYXJhY3RlcnMgKGlmIHRoZQorICAgICAgICAgICAgIHNjcmVlbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQsIG9yIGlmIDxTVFJPTkc+bWV0YTwvU1RST05HPiBoYXMgYmVlbgorICAgICAgICAgICAgIGNhbGxlZCAgd2l0aCBhIFRSVUUgcGFyYW1ldGVyKSwgc2hvd24gaW4gdGhlIDxTVFJPTkc+TS08L1NUUk9ORz48RU0+WDwvRU0+IG5vLQorICAgICAgICAgICAgIHRhdGlvbiwgb3IgYXJlIGRpc3BsYXllZCBhcyB0aGVtc2VsdmVzLiAgSW4gdGhlIGxhdC0KKyAgICAgICAgICAgICB0ZXIgY2FzZSwgdGhlIHZhbHVlcyBtYXkgbm90IGJlIHByaW50YWJsZTsgdGhpcyBmb2wtCisgICAgICAgICAgICAgbG93cyB0aGUgWC9PcGVuIHNwZWNpZmljYXRpb24uCisKKyAgICAgICAgICAtICBWYWx1ZXMgYWJvdmUgMjU2IG1heSBiZSB0aGUgbmFtZXMgb2YgIHRoZSAgbmFtZXMgIG9mCisgICAgICAgICAgICAgZnVuY3Rpb24ga2V5cy4KKworICAgICAgICAgIC0gIE90aGVyd2lzZSAgKGlmICB0aGVyZSAgaXMgbm8gY29ycmVzcG9uZGluZyBuYW1lKSB0aGUKKyAgICAgICAgICAgICBmdW5jdGlvbiByZXR1cm5zIG51bGwsIHRvIGRlbm90ZSBhbiAgZXJyb3IuICAgWC9PcGVuCisgICAgICAgICAgICAgYWxzbyBsaXN0cyBhbiAiVU5LTk9XTiBLRVkiIHJldHVybiB2YWx1ZSwgd2hpY2ggc29tZQorICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyByZXR1cm4gcmF0aGVyIHRoYW4gbnVsbC4KKworICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIDxTVFJPTkc+a2V5X25hbWU8L1NUUk9ORz4gcmV0dXJucyBhIGNoYXJhY3RlciBzdHJpbmcgY29yLQorICAgICAgIHJlc3BvbmRpbmcgIHRvICB0aGUgd2lkZS1jaGFyYWN0ZXIgdmFsdWUgPEVNPnc8L0VNPi4gIFRoZSB0d28gZnVuYy0KKyAgICAgICB0aW9ucyBkbyBub3QgcmV0dXJuIHRoZSBzYW1lIHNldCBvZiAgc3RyaW5nczsgIHRoZSAgbGF0dGVyCisgICAgICAgcmV0dXJucyBudWxsIHdoZXJlIHRoZSBmb3JtZXIgd291bGQgZGlzcGxheSBhIG1ldGEgY2hhcmFjLQorICAgICAgIHRlci4KKworICAgICAgIFRoZSA8U1RST05HPmZpbHRlcjwvU1RST05HPiByb3V0aW5lLCBpZiB1c2VkLCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+CisgICAgICAgb3IgIDxTVFJPTkc+bmV3dGVybTwvU1RST05HPiAgYXJlIGNhbGxlZC4gIFRoZSBlZmZlY3QgaXMgdGhhdCwgZHVyaW5nIHRob3NlCisgICAgICAgY2FsbHMsIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gaXMgc2V0IHRvIDE7ICB0aGUgIGNhcGFiaWxpdGllcyAgPFNUUk9ORz5jbGVhcjwvU1RST05HPiwgIDxTVFJPTkc+Y3VwPC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+Y3VkPC9TVFJPTkc+LCAgPFNUUk9ORz5jdWQxPC9TVFJPTkc+LCAgPFNUUk9ORz5jdXUxPC9TVFJPTkc+LCAgPFNUUk9ORz5jdXU8L1NUUk9ORz4sICA8U1RST05HPnZwYTwvU1RST05HPiAgYXJlICBkaXNhYmxlZDsgYW5kIHRoZSA8U1RST05HPmhvbWU8L1NUUk9ORz4KKyAgICAgICBzdHJpbmcgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiA8U1RST05HPmNyPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+bm9maWx0ZXI8L1NUUk9ORz4gcm91dGluZSBjYW5jZWxzIHRoZSAgZWZmZWN0ICBvZiAgYSAgcHJlY2VkaW5nCisgICAgICAgPFNUUk9ORz5maWx0ZXI8L1NUUk9ORz4gIGNhbGwuICAgVGhhdCAgYWxsb3dzICB0aGUgIGNhbGxlciAgdG8gaW5pdGlhbGl6ZSBhCisgICAgICAgc2NyZWVuIG9uIGEgZGlmZmVyZW50IGRldmljZSwgdXNpbmcgYSBkaWZmZXJlbnQgIHZhbHVlICBvZgorICAgICAgIDxTVFJPTkc+JFRFUk08L1NUUk9ORz4uICAgVGhlICBsaW1pdGF0aW9uIGFyaXNlcyBiZWNhdXNlIHRoZSA8U1RST05HPmZpbHRlcjwvU1RST05HPiByb3V0aW5lCisgICAgICAgbW9kaWZpZXMgdGhlIGluLW1lbW9yeSBjb3B5IG9mIHRoZSB0ZXJtaW5hbCBpbmZvcm1hdGlvbi4KKworICAgICAgIFRoZSA8U1RST05HPnVzZV9lbnY8L1NUUk9ORz4gcm91dGluZSwgaWYgdXNlZCwgaXMgY2FsbGVkIGJlZm9yZSA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gIG9yCisgICAgICAgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+ICBhcmUgIGNhbGxlZC4gICBXaGVuIGNhbGxlZCB3aXRoIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4gYXMgYW4gYXJndS0KKyAgICAgICBtZW50LCB0aGUgdmFsdWVzIG9mIDxTVFJPTkc+bGluZXM8L1NUUk9ORz4gYW5kICA8U1RST05HPmNvbHVtbnM8L1NUUk9ORz4gIHNwZWNpZmllZCAgaW4gIHRoZQorICAgICAgIDxFTT50ZXJtaW5mbzwvRU0+ICBkYXRhYmFzZSB3aWxsIGJlIHVzZWQsIGV2ZW4gaWYgZW52aXJvbm1lbnQgdmFyaS0KKyAgICAgICBhYmxlcyA8U1RST05HPkxJTkVTPC9TVFJPTkc+IGFuZCA8U1RST05HPkNPTFVNTlM8L1NUUk9ORz4gKHVzZWQgYnkgZGVmYXVsdCkgYXJlIHNldCwgIG9yICBpZgorICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+ICBpcyAgcnVubmluZyBpbiBhIHdpbmRvdyAoaW4gd2hpY2ggY2FzZSBkZWZhdWx0IGJlLQorICAgICAgIGhhdmlvciB3b3VsZCBiZSB0byAgdXNlICB0aGUgIHdpbmRvdyAgc2l6ZSAgaWYgIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gIGFuZAorICAgICAgIDxTVFJPTkc+Q09MVU1OUzwvU1RST05HPiAgYXJlIG5vdCBzZXQpLiAgTm90ZSB0aGF0IHNldHRpbmcgPFNUUk9ORz5MSU5FUzwvU1RST05HPiBvciA8U1RST05HPkNPTFVNTlM8L1NUUk9ORz4KKyAgICAgICBvdmVycmlkZXMgdGhlIGNvcnJlc3BvbmRpbmcgc2l6ZSAgd2hpY2ggIG1heSAgYmUgIG9idGFpbmVkCisgICAgICAgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KKworICAgICAgIFRoZSAgPFNUUk9ORz5wdXR3aW48L1NUUk9ORz4gcm91dGluZSB3cml0ZXMgYWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHdpbmRvdworICAgICAgIDxFTT53aW48L0VNPiBpbnRvIHRoZSBmaWxlIHRvIHdoaWNoIDxFTT5maWxlcDwvRU0+IHBvaW50cy4gIFRoaXMgaW5mb3JtYXRpb24KKyAgICAgICBjYW4gYmUgbGF0ZXIgcmV0cmlldmVkIHVzaW5nIHRoZSA8U1RST05HPmdldHdpbjwvU1RST05HPiBmdW5jdGlvbi4KKworICAgICAgIFRoZSA8U1RST05HPmdldHdpbjwvU1RST05HPiByb3V0aW5lIHJlYWRzIHdpbmRvdyByZWxhdGVkIGRhdGEgc3RvcmVkIGluIHRoZQorICAgICAgIGZpbGUgYnkgPFNUUk9ORz5wdXR3aW48L1NUUk9ORz4uICBUaGUgcm91dGluZSB0aGVuIGNyZWF0ZXMgYW5kICBpbml0aWFsaXplcworICAgICAgIGEgbmV3IHdpbmRvdyB1c2luZyB0aGF0IGRhdGEuICBJdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKKyAgICAgICBuZXcgd2luZG93LgorCisgICAgICAgVGhlIDxTVFJPTkc+ZGVsYXlfb3V0cHV0PC9TVFJPTkc+IHJvdXRpbmUgaW5zZXJ0cyBhbiA8RU0+bXM8L0VNPiAgbWlsbGlzZWNvbmQgIHBhdXNlCisgICAgICAgaW4gIG91dHB1dC4gICBUaGlzICByb3V0aW5lIHNob3VsZCBub3QgYmUgdXNlZCBleHRlbnNpdmVseQorICAgICAgIGJlY2F1c2UgcGFkZGluZyBjaGFyYWN0ZXJzIGFyZSAgdXNlZCAgcmF0aGVyICB0aGFuICBhICBDUFUKKyAgICAgICBwYXVzZS4gICBJZiAgbm8gIHBhZGRpbmcgY2hhcmFjdGVyIGlzIHNwZWNpZmllZCwgdGhpcyB1c2VzCisgICAgICAgPFNUUk9ORz5uYXBtczwvU1RST05HPiB0byBwZXJmb3JtIHRoZSBkZWxheS4KKworICAgICAgIFRoZSA8U1RST05HPmZsdXNoaW5wPC9TVFJPTkc+IHJvdXRpbmUgdGhyb3dzIGF3YXkgYW55ICB0eXBlYWhlYWQgIHRoYXQgIGhhcworICAgICAgIGJlZW4gIHR5cGVkICBieSAgdGhlIHVzZXIgYW5kIGhhcyBub3QgeWV0IGJlZW4gcmVhZCBieSB0aGUKKyAgICAgICBwcm9ncmFtLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgZm9yIDxTVFJPTkc+Zmx1c2hpbnA8L1NUUk9ORz4sIHJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuICBpbnRlZ2VyICByZS0KKyAgICAgICB0dXJuICA8U1RST05HPkVSUjwvU1RST05HPiB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gKFNWcjQgc3BlY2lmaWVzIG9ubHkgImFuIGluLQorICAgICAgIHRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKyAgICAgICBYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLiAgSW4gdGhpcyAgaW0tCisgICAgICAgcGxlbWVudGF0aW9uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5mbHVzaGlucDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCB3YXMgbm90IGluaS0KKyAgICAgICAgICAgICAgICAgICB0aWFsaXplZC4KKworICAgICAgICAgICAgICA8U1RST05HPnB1dHdpbjwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIHJldHVybnMgYW4gIGVycm9yICBpZiAgdGhlICBhc3NvY2lhdGVkICA8U1RST05HPmZ3cml0ZTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIGNhbGxzIHJldHVybiBhbiBlcnJvci4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCwgIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmMtCisgICAgICAgdGlvbnMuICBJdCBzdGF0ZXMgdGhhdCA8U1RST05HPnVuY3RybDwvU1RST05HPiBhbmQgPFNUUk9ORz53dW5jdHJsPC9TVFJPTkc+ICB3aWxsICByZXR1cm4gIGEKKyAgICAgICBudWxsICBwb2ludGVyIGlmIHVuc3VjY2Vzc2Z1bCwgYnV0IGRvZXMgbm90IGRlZmluZSBhbnkgZXItCisgICAgICAgcm9yIGNvbmRpdGlvbnMuICBUaGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyBmb3IgdGhyZWUgY2FzLQorICAgICAgIGVzOgorCisgICAgICAgICAgICAgIC0gICAgdGhlICBwYXJhbWV0ZXIgaXMgYSA3LWJpdCBVUy1BU0NJSSBjb2RlLiAgVGhpcworICAgICAgICAgICAgICAgICAgIGlzIHRoZSBjYXNlIHRoYXQgWC9PcGVuIEN1cnNlcyBkb2N1bWVudGVkLgorCisgICAgICAgICAgICAgIC0gICAgdGhlIHBhcmFtZXRlciBpcyBpbiB0aGUgcmFuZ2UgMTI4LTE1OSwgaS5lLiwgYQorICAgICAgICAgICAgICAgICAgIEMxICBjb250cm9sICBjb2RlLiAgIElmICA8U1RST05HPnVzZV9sZWdhY3lfY29kaW5nPC9TVFJPTkc+IGhhcworICAgICAgICAgICAgICAgICAgIGJlZW4gY2FsbGVkIHdpdGggYSA8U1RST05HPjI8L1NUUk9ORz4gcGFyYW1ldGVyLCA8U1RST05HPnVuY3RybDwvU1RST05HPiByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgdGhlICBwYXJhbWV0ZXIsICBpLmUuLCAgYSBvbmUtY2hhcmFjdGVyIHN0cmluZworICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHBhcmFtZXRlciAgYXMgIHRoZSAgZmlyc3QgIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsICBpdCAgcmV0dXJucyAgYGB+QCcnLCBgYH5BJycsIGV0Yy4sCisgICAgICAgICAgICAgICAgICAgYW5hbG9nb3VzIHRvIGBgXkAnJywgYGBeQScnLCBDMCBjb250cm9scy4KKworICAgICAgICAgICAgICAgICAgIFgvT3BlbiBDdXJzZXMgZG9lcyBub3QgZG9jdW1lbnQgd2hldGhlciA8U1RST05HPnVuY3RybDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIGNhbiAgYmUgIGNhbGxlZCAgYmVmb3JlICBpbml0aWFsaXppbmcgIGN1cnNlcy4KKyAgICAgICAgICAgICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIHBlcm1pdHMgdGhhdCwgYW5kICByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgdGhlIGBgfkAnJywgZXRjLiwgdmFsdWVzIGluIHRoYXQgY2FzZS4KKworICAgICAgICAgICAgICAtICAgIHBhcmFtZXRlciAgdmFsdWVzICBvdXRzaWRlIHRoZSAwIHRvIDI1NSByYW5nZS4KKyAgICAgICAgICAgICAgICAgICA8U1RST05HPnVuY3RybDwvU1RST05HPiByZXR1cm5zIGEgbnVsbCBwb2ludGVyLgorCisgICAgICAgVGhlIFNWcjQgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgdGhlIGFjdGlvbiBvZiA8U1RST05HPmZpbHRlcjwvU1RST05HPiBvbmx5CisgICAgICAgaW4gIHRoZSAgdmFndWVzdCAgdGVybXMuICAgVGhlIGRlc2NyaXB0aW9uIGhlcmUgaXMgYWRhcHRlZAorICAgICAgIGZyb20gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgKHdoaWNoIGVycm9uZW91c2x5ICBmYWlscyAgdG8KKyAgICAgICBkZXNjcmliZSB0aGUgZGlzYWJsaW5nIG9mIDxTVFJPTkc+Y3V1PC9TVFJPTkc+KS4KKworICAgICAgIFRoZSAgc3RyaW5ncyByZXR1cm5lZCBieSA8U1RST05HPnVuY3RybDwvU1RST05HPiBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGFyZQorICAgICAgIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLCBzaG93aW5nIEMxIGNvbnRyb2xzICBmcm9tICB0aGUKKyAgICAgICB1cHBlci0xMjggIGNvZGVzIHdpdGggYSBgficgcHJlZml4IHJhdGhlciB0aGFuIGBeJy4gIE90aGVyCisgICAgICAgaW1wbGVtZW50YXRpb25zIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zLiAgRm9yICBleGFtcGxlLAorICAgICAgIHRoZXkgIG1heSAgc2hvdyAgYm90aCBzZXRzIG9mIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRoIGBeJywKKyAgICAgICBhbmQgc3RyaXAgdGhlIHBhcmFtZXRlciB0byA3IGJpdHMuICBPciB0aGV5IG1heSBpZ25vcmUgIEMxCisgICAgICAgY29udHJvbHMgIGFuZCAgdHJlYXQgIGFsbCBvZiB0aGUgdXBwZXItMTI4IGNvZGVzIGFzIHByaW50LQorICAgICAgIGFibGUuICBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgOCBiaXRzIGJ1dCBkb2VzIG5vdCBtb2RpZnkKKyAgICAgICB0aGUgc3RyaW5nIHRvIHJlZmxlY3QgbG9jYWxlLiAgVGhlIDxTVFJPTkc+dXNlX2xlZ2FjeV9jb2Rpbmc8L1NUUk9ORz4gZnVuYy0KKyAgICAgICB0aW9uIGFsbG93cyB0aGUgY2FsbGVyIHRvIGNoYW5nZSB0aGUgb3V0cHV0IG9mIDxTVFJPTkc+dW5jdHJsPC9TVFJPTkc+LgorCisgICAgICAgTGlrZXdpc2UsIHRoZSA8U1RST05HPm1ldGE8L1NUUk9ORz4gZnVuY3Rpb24gYWxsb3dzIHRoZSAgY2FsbGVyICB0byAgY2hhbmdlCisgICAgICAgdGhlICBvdXRwdXQgb2YgPFNUUk9ORz5rZXluYW1lPC9TVFJPTkc+LCBpLmUuLCBpdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlCisgICAgICAgdGhlIGBNLScgcHJlZml4IGZvciBgYG1ldGEnJyBrZXlzIChjb2RlcyBpbiB0aGUgcmFuZ2UgIDEyOAorICAgICAgIHRvIDI1NSkuICBCb3RoIDxTVFJPTkc+dXNlX2xlZ2FjeV9jb2Rpbmc8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bWV0YTwvU1RST05HPiBzdWNjZWVkIG9ubHkgYWYtCisgICAgICAgdGVyIGN1cnNlcyBpcyBpbml0aWFsaXplZC4gIFgvT3BlbiBDdXJzZXMgZG9lcyAgbm90ICBkb2N1LQorICAgICAgIG1lbnQgIHRoZSAgdHJlYXRtZW50ICBvZiAgY29kZXMgMTI4IHRvIDE1OS4gIFdoZW4gdHJlYXRpbmcKKyAgICAgICB0aGVtIGFzIGBgbWV0YScnIGtleXMgKG9yIGlmIDxTVFJPTkc+a2V5bmFtZTwvU1RST05HPiBpcyBjYWxsZWQgYmVmb3JlIGluaS0KKyAgICAgICB0aWFsaXppbmcgIGN1cnNlcyksICB0aGlzICBpbXBsZW1lbnRhdGlvbiAgcmV0dXJucyBzdHJpbmdzCisgICAgICAgYGBNLV5AJycsIGBgTS1eQScnLCBldGMuCisKKyAgICAgICBUaGUgPFNUUk9ORz5rZXluYW1lPC9TVFJPTkc+IGZ1bmN0aW9uIG1heSByZXR1cm4gdGhlIG5hbWVzIG9mICB1c2VyLWRlZmluZWQKKyAgICAgICBzdHJpbmcgIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgdGVybWluZm8gZW4tCisgICAgICAgdHJ5IHZpYSB0aGUgPFNUUk9ORz4teDwvU1RST05HPiBvcHRpb24gb2YgPFNUUk9ORz50aWM8L1NUUk9ORz4uICBUaGlzICBpbXBsZW1lbnRhdGlvbiAgYXV0by0KKyAgICAgICBtYXRpY2FsbHkgIGFzc2lnbnMgIGF0ICBydW4tdGltZSAga2V5Y29kZXMgdG8gdXNlci1kZWZpbmVkCisgICAgICAgc3RyaW5ncyB3aGljaCBiZWdpbiAgd2l0aCAgImsiLiAgIFRoZSAga2V5Y29kZXMgIHN0YXJ0ICBhdAorICAgICAgIEtFWV9NQVgsICBidXQgIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSB2YWx1ZSBmb3IKKyAgICAgICBkaWZmZXJlbnQgcnVucyBiZWNhdXNlIHVzZXItZGVmaW5lZCBjb2RlcyBhcmUgbWVyZ2VkICBmcm9tCisgICAgICAgYWxsICB0ZXJtaW5hbCAgZGVzY3JpcHRpb25zICB3aGljaCAgaGF2ZSBiZWVuIGxvYWRlZC4gIFRoZQorICAgICAgIDxTVFJPTkc+dXNlX2V4dGVuZGVkX25hbWVzPC9TVFJPTkc+IGZ1bmN0aW9uIGNvbnRyb2xzIHdoZXRoZXIgdGhpcyBkYXRhICBpcworICAgICAgIGxvYWRlZCAgd2hlbiAgdGhlICB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBpcyByZWFkIGJ5IHRoZSBsaS0KKyAgICAgICBicmFyeS4KKworICAgICAgIFRoZSA8U1RST05HPm5vZmlsdGVyPC9TVFJPTkc+IHJvdXRpbmUgaXMgc3BlY2lmaWMgdG8gbmN1cnNlcy4gIEl0ICB3YXMgIG5vdAorICAgICAgIHN1cHBvcnRlZCAgb24gIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiAgbmN1cnNlcyAgZXgtCisgICAgICAgdGVuc2lvbnMgYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibGVnYWN5X2NvZGluZy4zeC5odG1sIj5sZWdhY3lfY29kaW5nKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luaXRzY3IuM3guaHRtbCI+Y3Vyc19pbml0c2NyKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+Y3Vyc19rZXItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5uZWwoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJsZWdhY3lfY29kaW5nLjN4Lmh0bWwiPmxlZ2FjeV9jb2RpbmcoM3gpPC9BPjwvU1RST05HPi4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc193aW5kb3cuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9jdXJzX3dpbmRvdy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjIxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vY3Vyc193aW5kb3cuM3guaHRtbApAQCAtMCwwICsxLDIxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBjdXJzX3dpbmRvdy4zeCx2IDEuMTQgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5jdXJzX3dpbmRvdyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmN1cnNfd2luZG93IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm5ld3dpbjwvU1RST05HPiwgPFNUUk9ORz5kZWx3aW48L1NUUk9ORz4sIDxTVFJPTkc+bXZ3aW48L1NUUk9ORz4sIDxTVFJPTkc+c3Vid2luPC9TVFJPTkc+LCA8U1RST05HPmRlcndpbjwvU1RST05HPiwgPFNUUk9ORz5tdmRlcndpbjwvU1RST05HPiwgPFNUUk9ORz5kdXB3aW48L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz53c3luY3VwPC9TVFJPTkc+LCA8U1RST05HPnN5bmNvazwvU1RST05HPiwgPFNUUk9ORz53Y3Vyc3luY3VwPC9TVFJPTkc+LCA8U1RST05HPndzeW5jZG93bjwvU1RST05HPiAtIGNyZWF0ZSA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIHdpbmRvd3MKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qbmV3d2luKGludDwvU1RST05HPiA8U1RST05HPm5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uY29scyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5iZWdpbl95LDwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmVnaW5feCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kZWx3aW4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdndpbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+eCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qc3Vid2luKFdJTkRPVzwvU1RST05HPiA8U1RST05HPipvcmlnLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uY29scyw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZ2luX3ksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmVnaW5feCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qZGVyd2luKFdJTkRPVzwvU1RST05HPiA8U1RST05HPipvcmlnLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPm5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5uY29scyw8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJlZ2luX3ksPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YmVnaW5feCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5tdmRlcndpbihXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBhcl95LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBhcl94KTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPipkdXB3aW4oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+d3N5bmN1cChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnN5bmNvayhXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5iZik7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+d2N1cnN5bmN1cChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz53c3luY2Rvd24oV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbik7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgQ2FsbGluZyA8U1RST05HPm5ld3dpbjwvU1RST05HPiBjcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldyB3aW4tCisgICAgICAgZG93IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcyBhbmQgY29sdW1ucy4gIFRoZSB1cHBlcgorICAgICAgIGxlZnQtaGFuZCAgY29ybmVyIG9mIHRoZSB3aW5kb3cgaXMgYXQgbGluZSA8RU0+YmVnaW48L0VNPl88RU0+eTwvRU0+LCBjb2x1bW4KKyAgICAgICA8RU0+YmVnaW48L0VNPl88RU0+eDwvRU0+LiAgSWYgZWl0aGVyIDxFTT5ubGluZXM8L0VNPiBvciA8RU0+bmNvbHM8L0VNPiBpcyB6ZXJvLCB0aGV5ICBkZWZhdWx0CisgICAgICAgdG8gIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gPFNUUk9ORz4tPC9TVFJPTkc+IDxFTT5iZWdpbjwvRU0+XzxFTT55PC9FTT4gYW5kIDxTVFJPTkc+Q09MUzwvU1RST05HPiA8U1RST05HPi08L1NUUk9ORz4gPEVNPmJlZ2luPC9FTT5fPEVNPng8L0VNPi4gIEEgbmV3IGZ1bGwtc2NyZWVuCisgICAgICAgd2luZG93IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyA8U1RST05HPm5ld3dpbigwLDAsMCwwKTwvU1RST05HPi4KKworICAgICAgIENhbGxpbmcgPFNUUk9ORz5kZWx3aW48L1NUUk9ORz4gZGVsZXRlcyB0aGUgbmFtZWQgd2luZG93LCBmcmVlaW5nIGFsbCBtZW1vLQorICAgICAgIHJ5IGFzc29jaWF0ZWQgd2l0aCBpdCAoaXQgZG9lcyBub3QgYWN0dWFsbHkgZXJhc2UgdGhlIHdpbi0KKyAgICAgICBkb3cncyBzY3JlZW4gaW1hZ2UpLiAgU3Vid2luZG93cyBtdXN0ICBiZSAgZGVsZXRlZCAgYmVmb3JlCisgICAgICAgdGhlIG1haW4gd2luZG93IGNhbiBiZSBkZWxldGVkLgorCisgICAgICAgQ2FsbGluZyA8U1RST05HPm12d2luPC9TVFJPTkc+IG1vdmVzIHRoZSB3aW5kb3cgc28gdGhhdCB0aGUgdXBwZXIgbGVmdC1oYW5kCisgICAgICAgY29ybmVyIGlzIGF0IHBvc2l0aW9uICg8RU0+eDwvRU0+LCA8RU0+eTwvRU0+KS4gIElmIHRoZSBtb3ZlIHdvdWxkIGNhdXNlIHRoZQorICAgICAgIHdpbmRvdyB0byBiZSBvZmYgdGhlIHNjcmVlbiwgaXQgaXMgYW4gZXJyb3IgYW5kIHRoZSB3aW5kb3cKKyAgICAgICBpcyBub3QgbW92ZWQuICBNb3Zpbmcgc3Vid2luZG93cyBpcyBhbGxvd2VkLCBidXQgc2hvdWxkIGJlCisgICAgICAgYXZvaWRlZC4KKworICAgICAgIENhbGxpbmcgPFNUUk9ORz5zdWJ3aW48L1NUUk9ORz4gY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXcgd2luLQorICAgICAgIGRvdyB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMsIDxFTT5ubGluZXM8L0VNPiwgIGFuZCAgY29sdW1ucywKKyAgICAgICA8RU0+bmNvbHM8L0VNPi4gICBUaGUgIHdpbmRvdyAgaXMgYXQgcG9zaXRpb24gKDxFTT5iZWdpbjwvRU0+XzxFTT55PC9FTT4sIDxFTT5iZWdpbjwvRU0+XzxFTT54PC9FTT4pIG9uCisgICAgICAgdGhlIHNjcmVlbi4gIChUaGlzIHBvc2l0aW9uIGlzIHJlbGF0aXZlIHRvIHRoZSBzY3JlZW4sIGFuZAorICAgICAgIG5vdCB0byB0aGUgd2luZG93IDxFTT5vcmlnPC9FTT4uKSAgVGhlIHdpbmRvdyBpcyBtYWRlIGluIHRoZSBtaWRkbGUKKyAgICAgICBvZiB0aGUgd2luZG93IDxFTT5vcmlnPC9FTT4sIHNvIHRoYXQgY2hhbmdlcyAgbWFkZSAgdG8gIG9uZSAgd2luZG93CisgICAgICAgd2lsbCAgYWZmZWN0ICBib3RoICB3aW5kb3dzLiAgIFRoZSBzdWJ3aW5kb3cgc2hhcmVzIG1lbW9yeQorICAgICAgIHdpdGggdGhlIHdpbmRvdyA8RU0+b3JpZzwvRU0+LiAgV2hlbiB1c2luZyB0aGlzIHJvdXRpbmUsIGl0IGlzIG5lYy0KKyAgICAgICBlc3NhcnkgIHRvIGNhbGwgPFNUUk9ORz50b3VjaHdpbjwvU1RST05HPiBvciA8U1RST05HPnRvdWNobGluZTwvU1RST05HPiBvbiA8RU0+b3JpZzwvRU0+IGJlZm9yZSBjYWxsLQorICAgICAgIGluZyA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+IG9uIHRoZSBzdWJ3aW5kb3cuCisKKyAgICAgICBDYWxsaW5nIDxTVFJPTkc+ZGVyd2luPC9TVFJPTkc+IGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgPFNUUk9ORz5zdWJ3aW4sPC9TVFJPTkc+IGV4Y2VwdCAgdGhhdAorICAgICAgIDxFTT5iZWdpbjwvRU0+XzxFTT55PC9FTT4gYW5kIDxFTT5iZWdpbjwvRU0+XzxFTT54PC9FTT4gYXJlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW4gb2YgdGhlIHdpbi0KKyAgICAgICBkb3cgPEVNPm9yaWc8L0VNPiByYXRoZXIgdGhhbiB0aGUgc2NyZWVuLiAgVGhlcmUgaXMgIG5vICBkaWZmZXJlbmNlCisgICAgICAgYmV0d2VlbiB0aGUgc3Vid2luZG93cyBhbmQgdGhlIGRlcml2ZWQgd2luZG93cy4KKworICAgICAgIENhbGxpbmcgPFNUUk9ORz5tdmRlcndpbjwvU1RST05HPiBtb3ZlcyBhIGRlcml2ZWQgd2luZG93IChvciBzdWJ3aW5kb3cpIGluLQorICAgICAgIHNpZGUgaXRzIHBhcmVudCB3aW5kb3cuICBUaGUgc2NyZWVuLXJlbGF0aXZlIHBhcmFtZXRlcnMgb2YKKyAgICAgICB0aGUgIHdpbmRvdyBhcmUgbm90IGNoYW5nZWQuICBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBkaXMtCisgICAgICAgcGxheSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlICBwYXJlbnQgIHdpbmRvdyAgYXQgIHRoZSAgc2FtZQorICAgICAgIHBoeXNpY2FsIHBvc2l0aW9uIG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICBDYWxsaW5nICA8U1RST05HPmR1cHdpbjwvU1RST05HPiAgY3JlYXRlcyAgYW4gZXhhY3QgZHVwbGljYXRlIG9mIHRoZSB3aW5kb3cKKyAgICAgICA8RU0+d2luPC9FTT4uCisKKyAgICAgICBDYWxsaW5nIDxTVFJPTkc+d3N5bmN1cDwvU1RST05HPiB0b3VjaGVzIGFsbCBsb2NhdGlvbnMgaW4gYW5jZXN0b3JzIG9mICA8RU0+d2luPC9FTT4KKyAgICAgICB0aGF0ICBhcmUgY2hhbmdlZCBpbiA8RU0+d2luPC9FTT4uICBJZiA8U1RST05HPnN5bmNvazwvU1RST05HPiBpcyBjYWxsZWQgd2l0aCBzZWNvbmQKKyAgICAgICBhcmd1bWVudCA8U1RST05HPlRSVUU8L1NUUk9ORz4gdGhlbiA8U1RST05HPndzeW5jdXA8L1NUUk9ORz4gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2LQorICAgICAgIGVyIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSB3aW5kb3cuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+d3N5bmNkb3duPC9TVFJPTkc+ICByb3V0aW5lICB0b3VjaGVzIGVhY2ggbG9jYXRpb24gaW4gPEVNPndpbjwvRU0+IHRoYXQKKyAgICAgICBoYXMgYmVlbiB0b3VjaGVkIGluIGFueSBvZiAgaXRzICBhbmNlc3RvciAgd2luZG93cy4gICBUaGlzCisgICAgICAgcm91dGluZSAgaXMgIGNhbGxlZCBieSA8U1RST05HPndyZWZyZXNoPC9TVFJPTkc+LCBzbyBpdCBzaG91bGQgYWxtb3N0IG5ldmVyCisgICAgICAgYmUgbmVjZXNzYXJ5IHRvIGNhbGwgaXQgbWFudWFsbHkuCisKKyAgICAgICBUaGUgcm91dGluZSA8U1RST05HPndjdXJzeW5jdXA8L1NUUk9ORz4gdXBkYXRlcyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24KKyAgICAgICBvZiAgYWxsIHRoZSBhbmNlc3RvcnMgb2YgdGhlIHdpbmRvdyB0byByZWZsZWN0IHRoZSBjdXJyZW50CisgICAgICAgY3Vyc29yIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwLQorICAgICAgIG9uICBmYWlsdXJlICBhbmQgPFNUUk9ORz5PSzwvU1RST05HPiAoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZQorICAgICAgIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4iKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKyAgICAgICBYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLiAgSW4gIHRoaXMgIGltcGxlbWVudGEtCisgICAgICAgdGlvbgorCisgICAgICAgICAgICAgIDxTVFJPTkc+ZGVsd2luPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgcmV0dXJucyAgYW4gIGVycm9yICBpZiAgdGhlICB3aW5kb3cgcG9pbnRlciBpcworICAgICAgICAgICAgICAgICAgIG51bGwsIG9yIGlmIHRoZSB3aW5kb3cgaXMgdGhlIHBhcmVudCBvZiBhbm90aC0KKyAgICAgICAgICAgICAgICAgICBlciB3aW5kb3cuCisKKyAgICAgICAgICAgICAgICAgICBUaGlzICBpbXBsZW1lbnRhdGlvbiAgYWxzbyBtYWludGFpbnMgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgd2luZG93cywgYW5kIGNoZWNrcyB0aGF0IHRoZSBwb2ludGVyIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+ZGVsd2luPC9TVFJPTkc+ICBpcyAgb25lICB0aGF0IGl0IGNyZWF0ZWQsIHJldHVybmluZyBhbgorICAgICAgICAgICAgICAgICAgIGVycm9yIGlmIGl0IHdhcyBub3QuLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+bXZkZXJ3aW48L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yICBpZiAgdGhlICB3aW5kb3cgIHBvaW50ZXIgIGlzCisgICAgICAgICAgICAgICAgICAgbnVsbCwgIG9yICBpZiBzb21lIHBhcnQgb2YgdGhlIHdpbmRvdyB3b3VsZCBiZQorICAgICAgICAgICAgICAgICAgIHBsYWNlZCBvZmYtc2NyZWVuLgorCisgICAgICAgICAgICAgIDxTVFJPTkc+bXZ3aW48L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zIGFuIGVycm9yICBpZiAgdGhlICB3aW5kb3cgIHBvaW50ZXIgIGlzCisgICAgICAgICAgICAgICAgICAgbnVsbCwgIG9yIGlmIHRoZSB3aW5kb3cgaXMgcmVhbGx5IGEgcGFkLCBvciBpZgorICAgICAgICAgICAgICAgICAgIHNvbWUgcGFydCBvZiB0aGUgd2luZG93IHdvdWxkIGJlICBwbGFjZWQgIG9mZi0KKyAgICAgICAgICAgICAgICAgICBzY3JlZW4uCisKKyAgICAgICAgICAgICAgPFNUUk9ORz5zeW5jb2s8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICByZXR1cm5zICBhbiAgZXJyb3IgIGlmICB0aGUgIHdpbmRvdyBwb2ludGVyIGlzCisgICAgICAgICAgICAgICAgICAgbnVsbC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBJZiBtYW55IHNtYWxsIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIHdpbmRvdywgdGhlICA8U1RST05HPndzeW5jdXA8L1NUUk9ORz4KKyAgICAgICBvcHRpb24gY291bGQgZGVncmFkZSBwZXJmb3JtYW5jZS4KKworICAgICAgIE5vdGUgdGhhdCA8U1RST05HPnN5bmNvazwvU1RST05HPiBtYXkgYmUgYSBtYWNyby4KKworCis8L1BSRT4KKzxIMj5CVUdTPC9IMj48UFJFPgorICAgICAgIFRoZSAgc3Vid2luZG93ICBmdW5jdGlvbnMgKDxFTT5zdWJ3aW48L0VNPiwgPEVNPmRlcndpbjwvRU0+LCA8RU0+bXZkZXJ3aW48L0VNPiwgPFNUUk9ORz53c3luLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+Y3VwPC9TVFJPTkc+LCA8U1RST05HPndzeW5jZG93bjwvU1RST05HPiwgPFNUUk9ORz53Y3Vyc3luY3VwPC9TVFJPTkc+LCA8U1RST05HPnN5bmNvazwvU1RST05HPikgYXJlIGZsYWt5LCBpbmNvbXBsZXRlLQorICAgICAgIGx5IGltcGxlbWVudGVkLCBhbmQgbm90IHdlbGwgdGVzdGVkLgorCisgICAgICAgVGhlICBTeXN0ZW0gIFYgIGN1cnNlcyBkb2N1bWVudGF0aW9uIGlzIHZlcnkgdW5jbGVhciBhYm91dAorICAgICAgIHdoYXQgPFNUUk9ORz53c3luY3VwPC9TVFJPTkc+IGFuZCA8U1RST05HPndzeW5jZG93bjwvU1RST05HPiBhY3R1YWxseSBkby4gIEl0IHNlZW1zIHRvIGltcGx5CisgICAgICAgdGhhdCAgdGhleSAgYXJlIG9ubHkgc3VwcG9zZWQgdG8gdG91Y2ggZXhhY3RseSB0aG9zZSBsaW5lcworICAgICAgIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGFuY2VzdG9yIGNoYW5nZXMuICBUaGUgbGFuZ3VhZ2UgaGVyZSwKKyAgICAgICBhbmQgIHRoZSAgYmVoYXZpb3IgIG9mICB0aGUgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gaW1wbGVtZW50YXRpb24sIGlzIHBhdC0KKyAgICAgICB0ZXJuZWQgb24gdGhlIFhQRzQgY3Vyc2VzIHN0YW5kYXJkLiAgVGhlIHdlYWtlciBYUEc0ICBzcGVjCisgICAgICAgbWF5IHJlc3VsdCBpbiBzbG93ZXIgdXBkYXRlcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIFhTSSAgQ3Vyc2VzICBzdGFuZGFyZCwgIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmMtCisgICAgICAgdGlvbnMuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2RlZmF1bHRfY29sb3JzLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZGVmYXVsdF9jb2xvcnMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzllODAxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2RlZmF1bHRfY29sb3JzLjN4Lmh0bWwKQEAgLTAsMCArMSwxODAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk3LDE5OTksMjAwMCwyMDA1CisgICogQElkOiBkZWZhdWx0X2NvbG9ycy4zeCx2IDEuMjAgMjAwNi8xMi8yNCAxNTowMjo1MyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5kZWZhdWx0X2NvbG9ycyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmRlZmF1bHRfY29sb3JzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJkZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5kZWZhdWx0X2NvbG9ycygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImRlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPmRlZmF1bHRfY29sb3JzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnVzZV9kZWZhdWx0X2NvbG9yczwvU1RST05HPiwgPFNUUk9ORz5hc3N1bWVfZGVmYXVsdF9jb2xvcnM8L1NUUk9ORz4gLSB1c2UgdGVybWluYWwncworICAgICAgIGRlZmF1bHQgY29sb3JzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+dXNlX2RlZmF1bHRfY29sb3JzKHZvaWQpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+YXNzdW1lX2RlZmF1bHRfY29sb3JzKGludDwvU1RST05HPiA8U1RST05HPmZnLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmJnKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPEVNPnVzZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmRlZmF1bHQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2xvcnMoKTwvRU0+IGFuZCA8RU0+YXNzdW1lPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9ycygpPC9FTT4gZnVuYy0KKyAgICAgICB0aW9ucyBhcmUgZXh0ZW5zaW9ucyB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuICBUaGV5IGFyZSB1c2VkCisgICAgICAgd2l0aCB0ZXJtaW5hbHMgdGhhdCBzdXBwb3J0IElTTyA2NDI5IGNvbG9yLCBvciBlcXVpdmFsZW50LgorICAgICAgIFRoZXNlIHRlcm1pbmFscyBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gcmVzZXQgY29sb3IgdG8gYW4KKyAgICAgICB1bnNwZWNpZmllZCBkZWZhdWx0IHZhbHVlIChlLmcuLCB3aXRoIFNHUiAzOSBvciBTR1IgNDkpLgorCisgICAgICAgQXBwbGljYXRpb25zIHRoYXQgcGFpbnQgIGEgIGNvbG9yZWQgIGJhY2tncm91bmQgIG92ZXIgIHRoZQorICAgICAgIHdob2xlICBzY3JlZW4gIGRvIG5vdCB0YWtlIGFkdmFudGFnZSBvZiBTR1IgMzkgYW5kIFNHUiA0OS4KKyAgICAgICBTb21lIGFwcGxpY2F0aW9ucyBhcmUgZGVzaWduZWQgdG8gd29yayAgd2l0aCAgdGhlICBkZWZhdWx0CisgICAgICAgYmFja2dyb3VuZCwgIHVzaW5nICBjb2xvcnMgIG9ubHkgIGZvciAgdGV4dC4gIEZvciBleGFtcGxlLAorICAgICAgIHRoZXJlIGFyZSBzZXZlcmFsIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgPFNUUk9ORz5sczwvU1RST05HPiBwcm9ncmFtICB3aGljaAorICAgICAgIHVzZSAgY29sb3JzIHRvIGRlbm90ZSBkaWZmZXJlbnQgZmlsZSB0eXBlcyBvciBwZXJtaXNzaW9ucy4KKyAgICAgICBUaGVzZSAiY29sb3IgbHMiIHByb2dyYW1zIGRvIG5vdCAgbmVjZXNzYXJpbHkgIG1vZGlmeSAgdGhlCisgICAgICAgYmFja2dyb3VuZCAgY29sb3IsIHR5cGljYWxseSB1c2luZyBvbmx5IHRoZSA8RU0+c2V0YWY8L0VNPiB0ZXJtaW5mbworICAgICAgIGNhcGFiaWxpdHkgIHRvICBzZXQgIHRoZSAgZm9yZWdyb3VuZCAgY29sb3IuICAgRnVsbC1zY3JlZW4KKyAgICAgICBhcHBsaWNhdGlvbnMgIHRoYXQgIHVzZSBkZWZhdWx0IGNvbG9ycyBjYW4gYWNoaWV2ZSBzaW1pbGFyCisgICAgICAgdmlzdWFsIGVmZmVjdHMuCisKKyAgICAgICBUaGUgZmlyc3QgZnVuY3Rpb24sIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKCk8L0VNPiB0ZWxscyB0aGUgIGN1cnNlcworICAgICAgIGxpYnJhcnkgIHRvICBhc3NpZ24gdGVybWluYWwgZGVmYXVsdCBmb3JlZ3JvdW5kL2JhY2tncm91bmQKKyAgICAgICBjb2xvcnMgdG8gY29sb3IgbnVtYmVyICAtMS4gIFNvICBpbml0X3BhaXIoeCxDT0xPUl9SRUQsLTEpCisgICAgICAgd2lsbCAgaW5pdGlhbGl6ZSAgcGFpciAgeCBhcyByZWQgb24gZGVmYXVsdCBiYWNrZ3JvdW5kIGFuZAorICAgICAgIGluaXRfcGFpcih4LC0xLENPTE9SX0JMVUUpICB3aWxsICBpbml0aWFsaXplICBwYWlyICB4ICAgYXMKKyAgICAgICBkZWZhdWx0IGZvcmVncm91bmQgb24gYmx1ZS4KKworICAgICAgIFRoZSAgb3RoZXIsICA8RU0+YXNzdW1lPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbG9ycygpPC9FTT4gaXMgYSByZWZpbmVtZW50IHdoaWNoCisgICAgICAgdGVsbHMgd2hpY2ggY29sb3JzIHRvIHBhaW50IGZvciBjb2xvciBwYWlyIDAuICBUaGlzICBmdW5jLQorICAgICAgIHRpb24gIHJlY29nbml6ZXMgIGEgc3BlY2lhbCBjb2xvciBudW1iZXIgLTEsIHdoaWNoIGRlbm90ZXMKKyAgICAgICB0aGUgZGVmYXVsdCB0ZXJtaW5hbCBjb2xvci4KKworICAgICAgIFRoZSBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQ6CisgICAgICAgICAgICAgIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKCk7PC9FTT4KKyAgICAgICAgICAgICAgPEVNPmFzc3VtZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmRlZmF1bHQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2xvcnMoLTEsLTEpOzwvRU0+CisKKyAgICAgICBUaGVzZSBhcmUgbmN1cnNlcyBleHRlbnNpb25zLiAgRm9yIG90aGVyIGN1cnNlcyAgaW1wbGVtZW4tCisgICAgICAgdGF0aW9ucywgIGNvbG9yICBudW1iZXIgLTEgZG9lcyBub3QgbWVhbiBhbnl0aGluZywganVzdCBhcworICAgICAgIGZvciBuY3Vyc2VzIGJlZm9yZSBhIHN1Y2Nlc3NmdWwgY2FsbCAgb2YgIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sLTwvRU0+CisgICAgICAgPEVNPm9ycygpPC9FTT4gb3IgPEVNPmFzc3VtZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmRlZmF1bHQ8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2xvcnMoKTwvRU0+LgorCisgICAgICAgT3RoZXIgIGN1cnNlcyAgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBhbGxvdyBhbiBhcHBsaWNhdGlvbgorICAgICAgIHRvIG1vZGlmeSBjb2xvciBwYWlyIDAuICBUaGV5IGFzc3VtZSB0aGF0ICB0aGUgIGJhY2tncm91bmQKKyAgICAgICBpcyBDT0xPUl9CTEFDSywgYnV0IGRvIG5vdCBlbnN1cmUgdGhhdCB0aGUgY29sb3IgcGFpciAwIGlzCisgICAgICAgcGFpbnRlZCB0byBtYXRjaCB0aGUgYXNzdW1wdGlvbi4gIElmIHlvdXIgYXBwbGljYXRpb24gZG9lcworICAgICAgIG5vdCB1c2UgZWl0aGVyIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKCk8L0VNPiBvciA8RU0+YXNzdW1lPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+ZGVmYXVsdDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNvbC08L0VNPgorICAgICAgIDxFTT5vcnMoKTwvRU0+IG5jdXJzZXMgd2lsbCBwYWludCBhIHdoaXRlICBmb3JlZ3JvdW5kICAodGV4dCkgIHdpdGgKKyAgICAgICBibGFjayBiYWNrZ3JvdW5kIGZvciBjb2xvciBwYWlyIDAuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBmYWlsdXJlIGFuZCA8U1RST05HPk9LPC9TVFJPTkc+CisgICAgICAgb24gc3VjY2Vzcy4gIFRoZXkgd2lsbCBmYWlsIGlmIGVpdGhlciAgdGhlICB0ZXJtaW5hbCAgZG9lcworICAgICAgIG5vdCAgc3VwcG9ydCAgdGhlIDxFTT5vcmlnPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+cGFpcjwvRU0+IG9yIDxFTT5vcmlnPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzPC9FTT4gY2FwYWJpbGl0eS4gIElmCisgICAgICAgdGhlIDxFTT5pbml0aWFsaXplPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+cGFpcjwvRU0+IGNhcGFiaWxpdHkgaXMgZm91bmQsICB0aGlzICBjYXVzZXMgIGFuCisgICAgICAgZXJyb3IgYXMgd2VsbC4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBBc3NvY2lhdGVkICB3aXRoICB0aGlzICBleHRlbnNpb24sICB0aGUgPFNUUk9ORz5pbml0X3BhaXI8L1NUUk9ORz4gZnVuY3Rpb24KKyAgICAgICBhY2NlcHRzIG5lZ2F0aXZlIGFyZ3VtZW50cyB0byBzcGVjaWZ5ICBkZWZhdWx0ICBmb3JlZ3JvdW5kCisgICAgICAgb3IgYmFja2dyb3VuZCBjb2xvcnMuCisKKyAgICAgICBUaGUgIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKCk8L0VNPiAgZnVuY3Rpb24gIHdhcyAgYWRkZWQgdG8gc3VwcG9ydAorICAgICAgIDxFTT5kZWQ8L0VNPi4gIFRoaXMgaXMgYSBmdWxsLXNjcmVlbiBhcHBsaWNhdGlvbiB3aGljaCB1c2VzICBjdXJzZXMKKyAgICAgICB0byAgbWFuYWdlIG9ubHkgcGFydCBvZiB0aGUgc2NyZWVuLiAgVGhlIGJvdHRvbSBwb3J0aW9uIG9mCisgICAgICAgdGhlIHNjcmVlbiwgd2hpY2ggaXMgb2YgYWRqdXN0YWJsZSBzaXplLCBpcyBsZWZ0IHVuY29sb3JlZAorICAgICAgIHRvICBkaXNwbGF5IHRoZSByZXN1bHRzIGZyb20gc2hlbGwgY29tbWFuZHMuICBUaGUgdG9wIHBvci0KKyAgICAgICB0aW9uIG9mIHRoZSBzY3JlZW4gY29sb3JzIGZpbGVuYW1lcyB1c2luZyAgYSAgc2NoZW1lICBsaWtlCisgICAgICAgdGhlICAiY29sb3IgIGxzIiBwcm9ncmFtcy4gIEF0dGVtcHRpbmcgdG8gbWFuYWdlIHRoZSBiYWNrLQorICAgICAgIGdyb3VuZCBjb2xvciBvZiB0aGUgc2NyZWVuIGZvciB0aGlzIGFwcGxpY2F0aW9uIHdvdWxkIGdpdmUKKyAgICAgICB1bnNhdGlzZmFjdG9yeSAgcmVzdWx0cyAgZm9yICBhICB2YXJpZXR5IG9mIHJlYXNvbnMuICBUaGlzCisgICAgICAgZXh0ZW5zaW9uIHdhcyBkZXZpc2VkIGFmdGVyIG5vdGluZyB0aGF0IGNvbG9yICB4dGVybSAgKGFuZAorICAgICAgIHNpbWlsYXIgIHByb2dyYW1zKSAgcHJvdmlkZXMgYSBiYWNrZ3JvdW5kIGNvbG9yIHdoaWNoIGRvZXMKKyAgICAgICBub3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byAgYW55ICBvZiAgdGhlICBBTlNJICBjb2xvcnMuCisgICAgICAgV2hpbGUgIGEgc3BlY2lhbCB0ZXJtaW5mbyBlbnRyeSBjb3VsZCBiZSBjb25zdHJ1Y3RlZCB1c2luZworICAgICAgIG5pbmUgY29sb3JzLCB0aGVyZSB3YXMgbm8gbWVjaGFuaXNtIHByb3ZpZGVkIHdpdGhpbiBjdXJzZXMKKyAgICAgICB0byAgYWNjb3VudCBmb3IgdGhlIHJlbGF0ZWQgPEVNPm9yaWc8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5wYWlyPC9FTT4gYW5kIDxFTT5iYWNrPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3I8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5lcmFzZTwvRU0+CisgICAgICAgY2FwYWJpbGl0aWVzLgorCisgICAgICAgVGhlIDxFTT5hc3N1bWU8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5kZWZhdWx0PC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y29sb3JzKCk8L0VNPiBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gc29sdmUgIGEKKyAgICAgICBkaWZmZXJlbnQgIHByb2JsZW06ICBzdXBwb3J0ICBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHdvdWxkCisgICAgICAgdXNlICBlbnZpcm9ubWVudCAgdmFyaWFibGVzICBhbmQgIG90aGVyICBjb25maWd1cmF0aW9uICB0bworICAgICAgIGJ5cGFzcyAgY3Vyc2VzJyAgbm90aW9uICBvZiB0aGUgdGVybWluYWwncyBkZWZhdWx0IGNvbG9ycywKKyAgICAgICBzZXR0aW5nIHNwZWNpZmljIHZhbHVlcy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gIG5jdXJzZXMuICAgVGhleSAgd2VyZSAgbm90CisgICAgICAgc3VwcG9ydGVkICBvbiAgVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgIGNvbi0KKyAgICAgICBkaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJkZWQuMS5odG1sIj5kZWQoMSk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBUaG9tYXMgIERpY2tleSAgKGZyb20gIGFuIGFuYWx5c2lzIG9mIHRoZSByZXF1aXJlbWVudHMgZm9yCisgICAgICAgY29sb3IgeHRlcm0gZm9yIFhGcmVlODYgMy4xLjJDLCBGZWJydWFyeSAxOTk2KS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJkZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5kZWZhdWx0X2NvbG9ycygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9kZWZpbmVfa2V5LjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZGVmaW5lX2tleS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNmI1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZGVmaW5lX2tleS4zeC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NworICAqIEBJZDogZGVmaW5lX2tleS4zeCx2IDEuMTIgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5kZWZpbmVfa2V5IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+ZGVmaW5lX2tleSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJkZWZpbmVfa2V5LjN4Lmh0bWwiPmRlZmluZV9rZXkoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+ZGVmaW5lX2tleTwvU1RST05HPiAtIGRlZmluZSBhIGtleWNvZGUKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5kZWZpbmVfa2V5KGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipkZWZpbml0aW9uLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmtleWNvZGUpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4gIEl0IHBlcm1pdHMgYW4KKyAgICAgICBhcHBsaWNhdGlvbiB0byBkZWZpbmUga2V5Y29kZXMgIHdpdGggIHRoZWlyICBjb3JyZXNwb25kaW5nCisgICAgICAgY29udHJvbCAgc3RyaW5ncywgIHNvIHRoYXQgdGhlIG5jdXJzZXMgbGlicmFyeSB3aWxsIGludGVyLQorICAgICAgIHByZXQgdGhlbSBqdXN0IGFzIGl0IHdvdWxkIHRoZSAgcHJlZGVmaW5lZCAgY29kZXMgIGluICB0aGUKKyAgICAgICB0ZXJtaW5mbyBkYXRhYmFzZS4KKworICAgICAgIElmICB0aGUgIGdpdmVuIHN0cmluZyBpcyBudWxsLCBhbnkgZXhpc3RpbmcgZGVmaW5pdGlvbiBmb3IKKyAgICAgICB0aGUga2V5Y29kZSBpcyByZW1vdmVkLiAgU2ltaWxhcmx5LCBpZiB0aGUgIGdpdmVuICBrZXljb2RlCisgICAgICAgaXMgIG5lZ2F0aXZlICBvciAgemVybywgIGFueSBleGlzdGluZyBzdHJpbmcgZm9yIHRoZSBnaXZlbgorICAgICAgIGRlZmluaXRpb24gaXMgcmVtb3ZlZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGtleWNvZGUgIG11c3QgIGJlICBncmVhdGVyICB0aGFuICB6ZXJvLCAgZWxzZSAgRVJSICBpcworICAgICAgIHJldHVybmVkLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgYXJlICBzcGVjaWZpYyAgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3QKKyAgICAgICBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtICBWICBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgIGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uLQorICAgICAgIGRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleW9rLjN4Lmh0bWwiPmtleW9rKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ia2V5X2RlZmluZWQuM3guaHRtbCI+a2V5X2RlZmluZWQoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzIERpY2tleS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm0uM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxMzVmMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtLjN4Lmh0bWwKQEAgLTAsMCArMSwyNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm0uM3gsdiAxLjIyIDIwMDgvMTAvMTEgMjA6NDg6MTEgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm0gM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm08L1NUUk9ORz4gLSBjdXJzZXMgZXh0ZW5zaW9uIGZvciBwcm9ncmFtbWluZyBmb3JtcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5mb3JtPC9TVFJPTkc+IGxpYnJhcnkgcHJvdmlkZXMgdGVybWluYWwtaW5kZXBlbmRlbnQgZmFjaWxpdGllcworICAgICAgIGZvciBjb21wb3NpbmcgZm9ybSBzY3JlZW5zICBvbiAgY2hhcmFjdGVyLWNlbGwgIHRlcm1pbmFscy4KKyAgICAgICBUaGUgIGxpYnJhcnkgIGluY2x1ZGVzOiAgZmllbGQgIHJvdXRpbmVzLCB3aGljaCBjcmVhdGUgYW5kCisgICAgICAgbW9kaWZ5IGZvcm0gZmllbGRzOyBhbmQgZm9ybSByb3V0aW5lcywgd2hpY2ggZ3JvdXAgIGZpZWxkcworICAgICAgIGludG8gZm9ybXMsIGRpc3BsYXkgZm9ybXMgb24gdGhlIHNjcmVlbiwgYW5kIGhhbmRsZSBpbnRlci0KKyAgICAgICBhY3Rpb24gd2l0aCB0aGUgdXNlci4KKworICAgICAgIFRoZSA8U1RST05HPmZvcm08L1NUUk9ORz4gbGlicmFyeSB1c2VzIHRoZSA8U1RST05HPmN1cnNlczwvU1RST05HPiBsaWJyYXJpZXMuICAgVG8gIHVzZSAgdGhlCisgICAgICAgPFNUUk9ORz5mb3JtPC9TVFJPTkc+IGxpYnJhcnksIGxpbmsgd2l0aCB0aGUgb3B0aW9ucyA8U1RST05HPi1sZm9ybTwvU1RST05HPiA8U1RST05HPi1sY3Vyc2VzPC9TVFJPTkc+LgorCisgICAgICAgWW91ciBwcm9ncmFtIHNob3VsZCBzZXQgdXAgdGhlIGxvY2FsZSwgZS5nLiwKKworICAgICAgICAgICAgPFNUUk9ORz5zZXRsb2NhbGUoTENfQUxMLDwvU1RST05HPiA8U1RST05HPiIiKTs8L1NUUk9ORz4KKworICAgICAgIHNvIHRoYXQgaW5wdXQvb3V0cHV0IHByb2Nlc3Npbmcgd2lsbCB3b3JrLgorCisgICAgICAgQSAgY3Vyc2VzICBpbml0aWFsaXphdGlvbiAgcm91dGluZSBzdWNoIGFzIDxTVFJPTkc+aW5pdHNjcjwvU1RST05HPiBtdXN0IGJlCisgICAgICAgY2FsbGVkIGJlZm9yZSB1c2luZyBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLgorCisgICA8U1RST05HPkN1cnJlbnQ8L1NUUk9ORz4gPFNUUk9ORz5EZWZhdWx0PC9TVFJPTkc+IDxTVFJPTkc+VmFsdWVzPC9TVFJPTkc+IDxTVFJPTkc+Zm9yPC9TVFJPTkc+IDxTVFJPTkc+RmllbGQ8L1NUUk9ORz4gPFNUUk9ORz5BdHRyaWJ1dGVzPC9TVFJPTkc+CisgICAgICAgVGhlIDxTVFJPTkc+Zm9ybTwvU1RST05HPiBsaWJyYXJ5ICBtYWludGFpbnMgIGEgIGRlZmF1bHQgIHZhbHVlICBmb3IgIGZpZWxkCisgICAgICAgYXR0cmlidXRlcy4gICBZb3UgIGNhbiAgZ2V0IG9yIHNldCB0aGlzIGRlZmF1bHQgYnkgY2FsbGluZworICAgICAgIHRoZSBhcHByb3ByaWF0ZSA8U1RST05HPnNldF88L1NUUk9ORz4gb3IgIHJldHJpZXZhbCAgcm91dGluZSAgd2l0aCAgYSAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+CisgICAgICAgZmllbGQgcG9pbnRlci4gIENoYW5naW5nIHRoaXMgZGVmYXVsdCB3aXRoIGEgPFNUUk9ORz5zZXRfPC9TVFJPTkc+IGZ1bmN0aW9uCisgICAgICAgYWZmZWN0cyBmdXR1cmUgZmllbGQgY3JlYXRpb25zLCBidXQgZG9lcyAgbm90ICBjaGFuZ2UgIHRoZQorICAgICAgIHJlbmRlcmluZyBvZiBmaWVsZHMgYWxyZWFkeSBjcmVhdGVkLgorCisgICA8U1RST05HPlJvdXRpbmU8L1NUUk9ORz4gPFNUUk9ORz5OYW1lPC9TVFJPTkc+IDxTVFJPTkc+SW5kZXg8L1NUUk9ORz4KKyAgICAgICBUaGUgIGZvbGxvd2luZyAgdGFibGUgbGlzdHMgZWFjaCA8U1RST05HPmZvcm08L1NUUk9ORz4gcm91dGluZSBhbmQgdGhlIG5hbWUKKyAgICAgICBvZiB0aGUgbWFudWFsIHBhZ2Ugb24gd2hpY2ggaXQgaXMgZGVzY3JpYmVkLgorCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gUm91dGluZSBOYW1lICAgIE1hbnVhbCBQYWdlIE5hbWUKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgY3VycmVudF9maWVsZCAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGRhdGFfYWhlYWQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2RhdGEuM3guaHRtbCI+Zm9ybV9kYXRhKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBkYXRhX2JlaGluZCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kYXRhLjN4Lmh0bWwiPmZvcm1fZGF0YSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZHVwX2ZpZWxkICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBkeW5hbWljX2ZpZWxkX2luZm8gICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwiPmZvcm1fZmllbGRfaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfYXJnICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sIj5mb3JtX2ZpZWxkX3ZhbGlkYXRpb24oM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX2JhY2sgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9idWZmZXIgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX2NvdW50ICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX2ZvcmUgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9pbmRleCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfaW5mbyAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfaW5mby4zeC5odG1sIj5mb3JtX2ZpZWxkX2luZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX2luaXQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9qdXN0ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwiPmZvcm1fZmllbGRfanVzdCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfb3B0cyAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5mb3JtX2ZpZWxkX29wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX29wdHNfb2ZmICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmaWVsZF9vcHRzX29uICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfcGFkICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX3N0YXR1cyAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZmllbGRfdGVybSAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZpZWxkX3R5cGUgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCI+Zm9ybV9maWVsZF92YWxpZGF0aW9uKDN4KTwvQT48L1NUUk9ORz4KKworICAgICAgIGZpZWxkX3VzZXJwdHIgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV9maWVsZF91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX2RyaXZlciAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kcml2ZXIuM3guaHRtbCI+Zm9ybV9kcml2ZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fZmllbGRzICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1faW5pdCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX29wdHMgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9vcHRzLjN4Lmh0bWwiPmZvcm1fb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV9vcHRzX29mZiAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fb3B0c19vbiAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX3BhZ2UgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV9yZXF1ZXN0X2J5X25hbWUgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcmVxdWVzdG5hbWUuM3guaHRtbCI+Zm9ybV9yZXF1ZXN0bmFtZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV9yZXF1ZXN0X25hbWUgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcmVxdWVzdG5hbWUuM3guaHRtbCI+Zm9ybV9yZXF1ZXN0bmFtZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV9zdWIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmb3JtX3Rlcm0gICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZm9ybV91c2VycHRyICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fdXNlcnB0ci4zeC5odG1sIj5mb3JtX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZvcm1fd2luICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgZnJlZV9maWVsZCAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmcmVlX2ZpZWxkdHlwZSAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZyZWVfZm9ybSAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX25ldy4zeC5odG1sIj5mb3JtX25ldygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbGlua19maWVsZCAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBsaW5rX2ZpZWxkdHlwZSAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1vdmVfZmllbGQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG5ld19maWVsZCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbmV3X2ZpZWxkdHlwZSAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBuZXdfZm9ybSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXcuM3guaHRtbCI+Zm9ybV9uZXcoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG5ld19wYWdlICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX25ld19wYWdlLjN4Lmh0bWwiPmZvcm1fbmV3X3BhZ2UoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHBvc19mb3JtX2N1cnNvciAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2N1cnNvci4zeC5odG1sIj5mb3JtX2N1cnNvcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgcG9zdF9mb3JtICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcG9zdC4zeC5odG1sIj5mb3JtX3Bvc3QoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNjYWxlX2Zvcm0gICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2N1cnJlbnRfZmllbGQgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZF9iYWNrICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfYnVmZmVyICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZF9mb3JlICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfaW5pdCAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkX2p1c3QgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZF9vcHRzICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfcGFkICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkX3N0YXR1cyAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGRfdGVybSAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2ZpZWxkX3R5cGUgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sIj5mb3JtX2ZpZWxkX3ZhbGlkYXRpb24oM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZF91c2VycHRyICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV9maWVsZF91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZmllbGR0eXBlX2FyZyAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9maWVsZHR5cGVfY2hvaWNlICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkdHlwZS4zeC5odG1sIj5mb3JtX2ZpZWxkdHlwZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2Zvcm1fZmllbGRzICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2Zvcm1faW5pdCAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1faG9vay4zeC5odG1sIj5mb3JtX2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9mb3JtX29wdHMgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZm9ybV9wYWdlICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2Zvcm1fc3ViICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfZm9ybV90ZXJtICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2Zvcm1fdXNlcnB0ciAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fdXNlcnB0ci4zeC5odG1sIj5mb3JtX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9mb3JtX3dpbiAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3dpbi4zeC5odG1sIj5mb3JtX3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21heF9maWVsZCAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYnVmZmVyLjN4Lmh0bWwiPmZvcm1fZmllbGRfYnVmZmVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbmV3X3BhZ2UgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXdfcGFnZS4zeC5odG1sIj5mb3JtX25ld19wYWdlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICB1bnBvc3RfZm9ybSAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9wb3N0LjN4Lmh0bWwiPmZvcm1fcG9zdCgzeCk8L0E+PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gIG9uICBlcnJvciwgIGFuZAorICAgICAgIHNldCAgZXJybm8gIHRvICB0aGUgIGNvcnJlc3BvbmRpbmcgIGVycm9yLWNvZGUgcmV0dXJuZWQgYnkKKyAgICAgICBmdW5jdGlvbnMgcmV0dXJuaW5nIGFuIGludGVnZXIuICBSb3V0aW5lcyB0aGF0ICByZXR1cm4gIGFuCisgICAgICAgaW50ZWdlciByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX1NUQVRFPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hLQorICAgICAgICAgICAgdGlvbiBmdW5jdGlvbi4KKworICAgICAgIDxTVFJPTkc+RV9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisKKyAgICAgICA8U1RST05HPkVfSU5WQUxJRF9GSUVMRDwvU1RST05HPgorICAgICAgICAgICAgQ29udGVudHMgb2YgYSBmaWVsZCBhcmUgbm90IHZhbGlkLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGZpZWxkcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBmb3JtLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGhhcyBub3QgYmVlbiBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfTk9fUk9PTTwvU1RST05HPgorICAgICAgICAgICAgRm9ybSBpcyB0b28gbGFyZ2UgZm9yIGl0cyB3aW5kb3cuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBpcyBhbHJlYWR5IHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9SRVFVRVNUX0RFTklFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfVU5LTk9XTl9DT01NQU5EPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBkcml2ZXIgY29kZSBzYXcgYW4gdW5rbm93biByZXF1ZXN0IGNvZGUuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+IGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJmb3JtXyIgZm9yCisgICAgICAgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZXMgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+IGFuZCA8U1RST05HPiZsdDtldGkuaCZndDs8L1NUUk9ORz4uCisKKyAgICAgICBJbiAgeW91ciAgbGlicmFyeSAgbGlzdCwgIGxpYmZvcm0uYSBzaG91bGQgYmUgYmVmb3JlIGxpYm4tCisgICAgICAgY3Vyc2VzLmE7IHRoYXQgaXMsIHlvdSB3YW50IHRvIHNheSBgLWxmb3JtIC1sbmN1cnNlcycsIG5vdAorICAgICAgIHRoZSAgb3RoZXIgIHdheSAgYXJvdW5kICh3aGljaCB3b3VsZCBnaXZlIHlvdSBhIGxpbmsgZXJyb3IKKyAgICAgICB1c2luZyBtb3N0IGxpbmtlcnMpLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5jdXJzZXMKKyAgICAgICBieSBFcmljIFMuIFJheW1vbmQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2N1cnNvci4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fY3Vyc29yLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzNDcwMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2N1cnNvci4zeC5odG1sCkBAIC0wLDAgKzEsMTE4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2N1cnNvci4zeCx2IDEuNiAyMDA2LzExLzA0IDE4OjUwOjI0IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fY3Vyc29yIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9jdXJzb3IgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fY3Vyc29yLjN4Lmh0bWwiPmZvcm1fY3Vyc29yKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9jdXJzb3IuM3guaHRtbCI+Zm9ybV9jdXJzb3IoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9jdXJzb3I8L1NUUk9ORz4gLSBwb3NpdGlvbiBhIGZvcm0gd2luZG93IGN1cnNvcgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBwb3NfZm9ybV9jdXJzb3IoRk9STSAqZm9ybSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5wb3NfZm9ybV9jdXJzb3I8L1NUUk9ORz4gIHJlc3RvcmVzIHRoZSBjdXJzb3IgdG8gdGhlCisgICAgICAgcG9zaXRpb24gcmVxdWlyZWQgZm9yIHRoZSBmb3JtcyBkcml2ZXIgIHRvICBjb250aW51ZSAgcHJvLQorICAgICAgIGNlc3NpbmcgIHJlcXVlc3RzLiAgIFRoaXMgIGlzIHVzZWZ1bCBhZnRlciA8U1RST05HPmN1cnNlczwvU1RST05HPiByb3V0aW5lcworICAgICAgIGhhdmUgYmVlbiBjYWxsZWQgdG8gZG8gc2NyZWVuLXBhaW50aW5nIGluICByZXNwb25zZSAgdG8gIGEKKyAgICAgICBmb3JtIG9wZXJhdGlvbi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhpcyByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfTk9UX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gaGFzIG5vdCBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2N1cnNvci4zeC5odG1sIj5mb3JtX2N1cnNvcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2RhdGEuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2RhdGEuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjMyOTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZGF0YS4zeC5odG1sCkBAIC0wLDAgKzEsMTA0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2RhdGEuM3gsdiAxLjggMjAwNi8wMi8yNSAyMTozODoyNiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2RhdGEgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2RhdGEgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZGF0YS4zeC5odG1sIj5mb3JtX2RhdGEoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kYXRhLjN4Lmh0bWwiPmZvcm1fZGF0YSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2RhdGE8L1NUUk9ORz4gLSB0ZXN0IGZvciBvZmYtc2NyZWVuIGRhdGEgaW4gZ2l2ZW4gZm9ybXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBib29sIGRhdGFfYWhlYWQoY29uc3QgRk9STSAqZm9ybSk7CisgICAgICAgYm9vbCBkYXRhX2JlaGluZChjb25zdCBGT1JNICpmb3JtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+ZGF0YV9haGVhZDwvU1RST05HPiB0ZXN0cyB3aGV0aGVyIHRoZXJlIGlzIG9mZi1zY3JlZW4KKyAgICAgICBkYXRhIGFoZWFkIGluIHRoZSBnaXZlbiBmb3JtLiAgIEl0ICByZXR1cm5zICBUUlVFICAoMSkgIG9yCisgICAgICAgRkFMU0UgKDApLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZGF0YV9iZWhpbmQ8L1NUUk9ORz4gdGVzdHMgd2hldGhlciB0aGVyZSBpcyBvZmYtc2NyZWVuCisgICAgICAgZGF0YSBiZWhpbmQgaW4gdGhlIGdpdmVuIGZvcm0uICBJdCAgcmV0dXJucyAgVFJVRSAgKDEpICBvcgorICAgICAgIEZBTFNFICgwKS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2RhdGEuM3guaHRtbCI+Zm9ybV9kYXRhKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZHJpdmVyLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9kcml2ZXIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmViN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZHJpdmVyLjN4Lmh0bWwKQEAgLTAsMCArMSwzNzYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9kcml2ZXIuM3gsdiAxLjE2IDIwMDgvMDYvMjEgMjE6NTU6MzkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9kcml2ZXIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2RyaXZlciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9kcml2ZXIuM3guaHRtbCI+Zm9ybV9kcml2ZXIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2RyaXZlci4zeC5odG1sIj5mb3JtX2RyaXZlcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2RyaXZlcjwvU1RST05HPiAtIGNvbW1hbmQtcHJvY2Vzc2luZyBsb29wIG9mIHRoZSBmb3JtIHN5c3RlbQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBmb3JtX2RyaXZlcihGT1JNICpmb3JtLCBpbnQgYyk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgT25jZSBhIGZvcm0gaGFzIGJlZW4gcG9zdGVkIChkaXNwbGF5ZWQpLCB5b3Ugc2hvdWxkIGZ1bm5lbAorICAgICAgIGlucHV0IGV2ZW50cyB0byBpdCB0aHJvdWdoIDxTVFJPTkc+Zm9ybV9kcml2ZXI8L1NUUk9ORz4uICBUaGlzIHJvdXRpbmUgIGhhcworICAgICAgIHRocmVlIG1ham9yIGlucHV0IGNhc2VzOgorCisgICAgICAgLSAgVGhlICBpbnB1dCAgaXMgIGEgIGZvcm0gbmF2aWdhdGlvbiByZXF1ZXN0LiAgTmF2aWdhdGlvbgorICAgICAgICAgIHJlcXVlc3QgY29kZXMgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4sICB3aGljaAorICAgICAgICAgIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBrZXktIGFuZCBjaGFyYWN0ZXIgY29kZXMgcmV0dXJuZWQKKyAgICAgICAgICBieSA8U1RST05HPndnZXRjaDwvU1RST05HPi4KKworICAgICAgIC0gIFRoZSBpbnB1dCBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIuICBQcmludGFibGUgIGNoYXJhYy0KKyAgICAgICAgICB0ZXJzICAod2hpY2ggIG11c3QgIGJlICBwb3NpdGl2ZSwgIGxlc3MgIHRoYW4gIDI1NikgYXJlCisgICAgICAgICAgY2hlY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHByb2dyYW0ncyBsb2NhbGUgc2V0dGluZ3MuCisKKyAgICAgICAtICBUaGUgaW5wdXQgaXMgdGhlIEtFWV9NT1VTRSBzcGVjaWFsIGtleSBhc3NvY2lhdGVkICB3aXRoCisgICAgICAgICAgYW4gbW91c2UgZXZlbnQuCisKKyAgICAgICBUaGUgZm9ybSBkcml2ZXIgcmVxdWVzdHMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICBSRVFfTkVYVF9QQUdFCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBuZXh0IHBhZ2UuCisKKyAgICAgICBSRVFfUFJFVl9QQUdFCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBwYWdlLgorCisgICAgICAgUkVRX0ZJUlNUX1BBR0UKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIGZpcnN0IHBhZ2UuCisKKyAgICAgICBSRVFfTEFTVF9QQUdFCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBsYXN0IGZpZWxkLgorCisKKyAgICAgICBSRVFfTkVYVF9GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgbmV4dCBmaWVsZC4KKworICAgICAgIFJFUV9QUkVWX0ZJRUxECisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBmaWVsZC4KKworICAgICAgIFJFUV9GSVJTVF9GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgZmlyc3QgZmllbGQuCisKKyAgICAgICBSRVFfTEFTVF9GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgbGFzdCBmaWVsZC4KKworICAgICAgIFJFUV9TTkVYVF9GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgc29ydGVkIG5leHQgZmllbGQuCisKKyAgICAgICBSRVFfU1BSRVZfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIHNvcnRlZCBwcmV2aW91cyBmaWVsZC4KKworICAgICAgIFJFUV9TRklSU1RfRklFTEQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIHNvcnRlZCBmaXJzdCBmaWVsZC4KKworICAgICAgIFJFUV9TTEFTVF9GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgc29ydGVkIGxhc3QgZmllbGQuCisKKyAgICAgICBSRVFfTEVGVF9GSUVMRAorICAgICAgICAgICAgTW92ZSBsZWZ0IHRvIGEgZmllbGQuCisKKyAgICAgICBSRVFfUklHSFRfRklFTEQKKyAgICAgICAgICAgIE1vdmUgcmlnaHQgdG8gYSBmaWVsZC4KKworICAgICAgIFJFUV9VUF9GSUVMRAorICAgICAgICAgICAgTW92ZSB1cCB0byBhIGZpZWxkLgorCisgICAgICAgUkVRX0RPV05fRklFTEQKKyAgICAgICAgICAgIE1vdmUgZG93biB0byBhIGZpZWxkLgorCisKKyAgICAgICBSRVFfTkVYVF9DSEFSCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBuZXh0IGNoYXIuCisKKyAgICAgICBSRVFfUFJFVl9DSEFSCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBjaGFyLgorCisgICAgICAgUkVRX05FWFRfTElORQorICAgICAgICAgICAgTW92ZSB0byB0aGUgbmV4dCBsaW5lLgorCisgICAgICAgUkVRX1BSRVZfTElORQorICAgICAgICAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgbGluZS4KKworICAgICAgIFJFUV9ORVhUX1dPUkQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIG5leHQgd29yZC4KKworICAgICAgIFJFUV9QUkVWX1dPUkQKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIHByZXZpb3VzIHdvcmQuCisKKyAgICAgICBSRVFfQkVHX0ZJRUxECisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpZWxkLgorCisgICAgICAgUkVRX0VORF9GSUVMRAorICAgICAgICAgICAgTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBmaWVsZC4KKworICAgICAgIFJFUV9CRUdfTElORQorICAgICAgICAgICAgTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLgorCisgICAgICAgUkVRX0VORF9MSU5FCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKKyAgICAgICBSRVFfTEVGVF9DSEFSCisgICAgICAgICAgICBNb3ZlIGxlZnQgaW4gdGhlIGZpZWxkLgorCisgICAgICAgUkVRX1JJR0hUX0NIQVIKKyAgICAgICAgICAgIE1vdmUgcmlnaHQgaW4gdGhlIGZpZWxkLgorCisgICAgICAgUkVRX1VQX0NIQVIKKyAgICAgICAgICAgIE1vdmUgdXAgaW4gdGhlIGZpZWxkLgorCisgICAgICAgUkVRX0RPV05fQ0hBUgorICAgICAgICAgICAgTW92ZSBkb3duIGluIHRoZSBmaWVsZC4KKworCisgICAgICAgUkVRX05FV19MSU5FCisgICAgICAgICAgICBJbnNlcnQgb3Igb3ZlcmxheSBhIG5ldyBsaW5lLgorCisgICAgICAgUkVRX0lOU19DSEFSCisgICAgICAgICAgICBJbnNlcnQgYSBibGFuayBhdCB0aGUgY3Vyc29yLgorCisgICAgICAgUkVRX0lOU19MSU5FCisgICAgICAgICAgICBJbnNlcnQgYSBibGFuayBsaW5lIGF0IHRoZSBjdXJzb3IuCisKKyAgICAgICBSRVFfREVMX0NIQVIKKyAgICAgICAgICAgIERlbGV0ZSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnNvci4KKworICAgICAgIFJFUV9ERUxfUFJFVgorICAgICAgICAgICAgRGVsZXRlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGN1cnNvci4KKworICAgICAgIFJFUV9ERUxfTElORQorICAgICAgICAgICAgRGVsZXRlIGxpbmUgYXQgdGhlIGN1cnNvci4KKworICAgICAgIFJFUV9ERUxfV09SRAorICAgICAgICAgICAgRGVsZXRlIGJsYW5rLWRlbGltaXRlZCB3b3JkIGF0IHRoZSBjdXJzb3IuCisKKyAgICAgICBSRVFfQ0xSX0VPTAorICAgICAgICAgICAgQ2xlYXIgdG8gZW5kIG9mIGxpbmUgZnJvbSBjdXJzb3IuCisKKyAgICAgICBSRVFfQ0xSX0VPRgorICAgICAgICAgICAgQ2xlYXIgdG8gZW5kIG9mIGZpZWxkIGZyb20gY3Vyc29yLgorCisgICAgICAgUkVRX0NMUl9GSUVMRAorICAgICAgICAgICAgQ2xlYXIgdGhlIGVudGlyZSBmaWVsZC4KKworICAgICAgIFJFUV9PVkxfTU9ERQorICAgICAgICAgICAgRW50ZXIgb3ZlcmxheSBtb2RlLgorCisgICAgICAgUkVRX0lOU19NT0RFCisgICAgICAgICAgICBFbnRlciBpbnNlcnQgbW9kZS4KKworCisgICAgICAgUkVRX1NDUl9GTElORQorICAgICAgICAgICAgU2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGEgbGluZS4KKworICAgICAgIFJFUV9TQ1JfQkxJTkUKKyAgICAgICAgICAgIFNjcm9sbCB0aGUgZmllbGQgYmFja3dhcmQgYSBsaW5lLgorCisgICAgICAgUkVRX1NDUl9GUEFHRQorICAgICAgICAgICAgU2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGEgcGFnZS4KKworICAgICAgIFJFUV9TQ1JfQlBBR0UKKyAgICAgICAgICAgIFNjcm9sbCB0aGUgZmllbGQgYmFja3dhcmQgYSBwYWdlLgorCisgICAgICAgUkVRX1NDUl9GSFBBR0UKKyAgICAgICAgICAgIFNjcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBoYWxmIGEgcGFnZS4KKworICAgICAgIFJFUV9TQ1JfQkhQQUdFCisgICAgICAgICAgICBTY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGhhbGYgYSBwYWdlLgorCisKKyAgICAgICBSRVFfU0NSX0ZDSEFSCisgICAgICAgICAgICBTY3JvbGwgdGhlIGZpZWxkIGZvcndhcmQgYSBjaGFyYWN0ZXIuCisKKyAgICAgICBSRVFfU0NSX0JDSEFSCisgICAgICAgICAgICBTY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGEgY2hhcmFjdGVyLgorCisgICAgICAgUkVRX1NDUl9IRkxJTkUKKyAgICAgICAgICAgIEhvcml6b250YWwgc2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGEgbGluZS4KKworICAgICAgIFJFUV9TQ1JfSEJMSU5FCisgICAgICAgICAgICBIb3Jpem9udGFsIHNjcm9sbCB0aGUgZmllbGQgYmFja3dhcmQgYSBsaW5lLgorCisgICAgICAgUkVRX1NDUl9IRkhBTEYKKyAgICAgICAgICAgIEhvcml6b250YWwgc2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGhhbGYgYSBsaW5lLgorCisgICAgICAgUkVRX1NDUl9IQkhBTEYKKyAgICAgICAgICAgIEhvcml6b250YWwgc2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBoYWxmIGEgbGluZS4KKworCisgICAgICAgUkVRX1ZBTElEQVRJT04KKyAgICAgICAgICAgIFZhbGlkYXRlIGZpZWxkLgorCisgICAgICAgUkVRX05FWFRfQ0hPSUNFCisgICAgICAgICAgICBEaXNwbGF5IG5leHQgZmllbGQgY2hvaWNlLgorCisgICAgICAgUkVRX1BSRVZfQ0hPSUNFCisgICAgICAgICAgICBEaXNwbGF5IHByZXZpb3VzIGZpZWxkIGNob2ljZS4KKworICAgICAgIElmICB0aGUgIHNlY29uZCAgYXJndW1lbnQgIGlzICBhICBwcmludGFibGUgY2hhcmFjdGVyLCB0aGUKKyAgICAgICBkcml2ZXIgcGxhY2VzIGl0IGluIHRoZSBjdXJyZW50IHBvc2l0aW9uICBpbiAgdGhlICBjdXJyZW50CisgICAgICAgZmllbGQuICAgSWYgIGl0IGlzIG9uZSBvZiB0aGUgZm9ybXMgcmVxdWVzdHMgbGlzdGVkIGFib3ZlLAorICAgICAgIHRoYXQgcmVxdWVzdCBpcyBleGVjdXRlZC4KKworICAgPFNUUk9ORz5NT1VTRTwvU1RST05HPiA8U1RST05HPkhBTkRMSU5HPC9TVFJPTkc+CisgICAgICAgSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgS0VZX01PVVNFIHNwZWNpYWwgIGtleSwgIHRoZQorICAgICAgIGFzc29jaWF0ZWQgbW91c2UgZXZlbnQgaXMgdHJhbnNsYXRlZCBpbnRvIG9uZSBvZiB0aGUgYWJvdmUKKyAgICAgICBwcmUtZGVmaW5lZCByZXF1ZXN0cy4gIEN1cnJlbnRseSBvbmx5IGNsaWNrcyBpbiAgdGhlICB1c2VyCisgICAgICAgd2luZG93ICAoZS5nLiAgaW5zaWRlIHRoZSBmb3JtIGRpc3BsYXkgYXJlYSBvciB0aGUgZGVjb3JhLQorICAgICAgIHRpb24gd2luZG93KSBhcmUgaGFuZGxlZC4KKworICAgICAgIElmIHlvdSBjbGljayBhYm92ZSB0aGUgZGlzcGxheSByZWdpb24gb2YgdGhlIGZvcm06CisKKyAgICAgICAgICAgICAgYSBSRVFfUFJFVl9GSUVMRCBpcyBnZW5lcmF0ZWQgZm9yIGEgc2luZ2xlIGNsaWNrLAorCisgICAgICAgICAgICAgIGEgUkVRX1BSRVZfUEFHRSBpcyBnZW5lcmF0ZWQgZm9yIGEgZG91YmxlLWNsaWNrIGFuZAorCisgICAgICAgICAgICAgIGEgUkVRX0ZJUlNUX0ZJRUxEIGlzIGdlbmVyYXRlZCBmb3IgYSAgdHJpcGxlLWNsaWNrLgorCisgICAgICAgSWYgeW91IGNsaWNrIGJlbG93IHRoZSBkaXNwbGF5IHJlZ2lvbiBvZiB0aGUgZm9ybToKKworICAgICAgICAgICAgICBhIFJFUV9ORVhUX0ZJRUxEIGlzIGdlbmVyYXRlZCBmb3IgYSBzaW5nbGUgY2xpY2ssCisKKyAgICAgICAgICAgICAgYSBSRVFfTkVYVF9QQUdFIGlzIGdlbmVyYXRlZCBmb3IgYSBkb3VibGUtY2xpY2sgYW5kCisKKyAgICAgICAgICAgICAgYSBSRVFfTEFTVF9GSUVMRCBpcyBnZW5lcmF0ZWQgZm9yIGEgdHJpcGxlLWNsaWNrLgorCisgICAgICAgSWYgeW91IGNsaWNrIGF0IGFuIGZpZWxkIGluc2lkZSB0aGUgZGlzcGxheSAgYXJlYSAgb2YgIHRoZQorICAgICAgIGZvcm06CisKKyAgICAgICAgICAgICAgLSAgdGhlIGZvcm0gY3Vyc29yIGlzIHBvc2l0aW9uZWQgdG8gdGhhdCBmaWVsZC4KKworICAgICAgICAgICAgICAtICBJZiAgeW91IGRvdWJsZS1jbGljayBhIGZpZWxkLCB0aGUgZm9ybSBjdXJzb3IgaXMKKyAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCB0byB0aGF0IGZpZWxkICBhbmQgIDxTVFJPTkc+RV9VTktOT1dOX0NPTU1BTkQ8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgaXMgIHJldHVybmVkLiAgIFRoaXMgIHJldHVybiAgdmFsdWUgbWFrZXMgc2Vuc2UsCisgICAgICAgICAgICAgICAgIGJlY2F1c2UgYSBkb3VibGUgY2xpY2sgIHVzdWFsbHkgIG1lYW5zICB0aGF0ICBhbgorICAgICAgICAgICAgICAgICBmaWVsZC1zcGVjaWZpYyBhY3Rpb24gc2hvdWxkIGJlIHJldHVybmVkLiAgSXQgaXMKKyAgICAgICAgICAgICAgICAgZXhhY3RseSB0aGUgcHVycG9zZSBvZiB0aGlzIHJldHVybiB2YWx1ZSB0byBzaWctCisgICAgICAgICAgICAgICAgIG5hbCAgdGhhdCBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBjb21tYW5kIHNob3VsZAorICAgICAgICAgICAgICAgICBiZSBleGVjdXRlZC4KKworICAgICAgICAgICAgICAtICBJZiAgYSAgdHJhbnNsYXRpb24gIGludG8gIGEgIHJlcXVlc3QgIHdhcyAgZG9uZSwKKyAgICAgICAgICAgICAgICAgPFNUUk9ORz5mb3JtX2RyaXZlcjwvU1RST05HPiAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoaXMgcmVxdWVzdC4KKworICAgICAgIElmIHlvdSBjbGlja2VkIG91dHNpZGUgdGhlIHVzZXIgd2luZG93IG9yIHRoZSBtb3VzZSAgZXZlbnQKKyAgICAgICBjb3VsZCAgIG5vdCAgIGJlICAgdHJhbnNsYXRlZCAgIGludG8gIGEgIGZvcm0gIHJlcXVlc3QgIGFuCisgICAgICAgPFNUUk9ORz5FX1JFUVVFU1RfREVOSUVEPC9TVFJPTkc+IGlzIHJldHVybmVkLgorCisgICA8U1RST05HPkFQUExJQ0FUSU9OLURFRklORUQ8L1NUUk9ORz4gPFNUUk9ORz5DT01NQU5EUzwvU1RST05HPgorICAgICAgIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbmVpdGhlciBwcmludGFibGUgbm9yIG9uZSBvZiB0aGUKKyAgICAgICBhYm92ZSAgcHJlLWRlZmluZWQgZm9ybSByZXF1ZXN0cywgdGhlIGRyaXZlciBhc3N1bWVzIGl0IGlzCisgICAgICAgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMgY29tbWFuZCBhbmQgcmV0dXJucyA8U1RST05HPkVfVU5LTk9XTl9DT00tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5NQU5EPC9TVFJPTkc+LiAgQXBwbGljYXRpb24tZGVmaW5lZCBjb21tYW5kcyBzaG91bGQgYmUgZGVmaW5lZCByZWwtCisgICAgICAgYXRpdmUgdG8gPFNUUk9ORz5NQVhfQ09NTUFORDwvU1RST05HPiwgdGhlICBtYXhpbXVtICB2YWx1ZSAgb2YgIHRoZXNlICBwcmUtCisgICAgICAgZGVmaW5lZCByZXF1ZXN0cy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2RyaXZlcjwvU1RST05HPiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9TVEFURTwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYS0KKyAgICAgICAgICAgIHRpb24gZnVuY3Rpb24uCisKKyAgICAgICA8U1RST05HPkVfTk9UX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZvcm0gaGFzIG5vdCBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9JTlZBTElEX0ZJRUxEPC9TVFJPTkc+CisgICAgICAgICAgICBDb250ZW50cyBvZiBmaWVsZCBpcyBpbnZhbGlkLgorCisgICAgICAgPFNUUk9ORz5FX1JFUVVFU1RfREVOSUVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9VTktOT1dOX0NPTU1BTkQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGRyaXZlciBjb2RlIHNhdyBhbiB1bmtub3duIHJlcXVlc3QgY29kZS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0id2dldGNoLjN4Lmh0bWwiPndnZXRjaCgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGVzIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2RyaXZlci4zeC5odG1sIj5mb3JtX2RyaXZlcigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDMzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZC4zeC5odG1sCkBAIC0wLDAgKzEsMTQyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2ZpZWxkLjN4LHYgMS44IDIwMDYvMTEvMDQgMTg6MDE6MzggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9maWVsZCAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fZmllbGQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGQuM3guaHRtbCI+Zm9ybV9maWVsZCgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZC4zeC5odG1sIj5mb3JtX2ZpZWxkKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fZmllbGQ8L1NUUk9ORz4gLSBtYWtlIGFuZCBicmVhayBjb25uZWN0aW9ucyBiZXR3ZWVuIGZpZWxkcyBhbmQKKyAgICAgICBmb3JtcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZm9ybV9maWVsZHMoRk9STSAqZm9ybSwgRklFTEQgKipmaWVsZHMpOworICAgICAgIEZJRUxEICoqZm9ybV9maWVsZHMoY29uc3QgRk9STSAqZm9ybSk7CisgICAgICAgaW50IGZpZWxkX2NvdW50KGNvbnN0IEZPUk0gKmZvcm0pOworICAgICAgIGludCBtb3ZlX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IGZyb3csIGludCBmY29sKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfZm9ybV9maWVsZHM8L1NUUk9ORz4gIGNoYW5nZXMgIHRoZSAgZmllbGQgIHBvaW50ZXIKKyAgICAgICBhcnJheSAgb2YgdGhlIGdpdmVuIDxFTT5mb3JtPC9FTT4uICBUaGUgYXJyYXkgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5CisgICAgICAgYSA8U1RST05HPk5VTEw8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5mb3JtX2ZpZWxkczwvU1RST05HPiByZXR1cm5zIHRoZSBmaWVsZCAgYXJyYXkgIG9mICB0aGUKKyAgICAgICBnaXZlbiBmb3JtLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5maWVsZF9jb3VudDwvU1RST05HPiAgcmV0dXJucyB0aGUgY291bnQgb2YgZmllbGRzIGluCisgICAgICAgPEVNPmZvcm08L0VNPi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm1vdmVfZmllbGQ8L1NUUk9ORz4gbW92ZXMgdGhlIGdpdmVuIGZpZWxkICh3aGljaCAgbXVzdAorICAgICAgIGJlIGRpc2Nvbm5lY3RlZCkgdG8gYSBzcGVjaWZpZWQgbG9jYXRpb24gb24gdGhlIHNjcmVlbi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUVTPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+Zm9ybV9maWVsZHM8L1NUUk9ORz4gcmV0dXJucyBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZQorICAgICAgIDxTVFJPTkc+TlVMTDwvU1RST05HPikuICBJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5maWVsZF9jb3VudDwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+RVJSPC9TVFJPTkc+IGlmIHRoZSA8RU0+Zm9ybTwvRU0+IHBhcmFtZXRlcgorICAgICAgIGlzIDxTVFJPTkc+TlVMTDwvU1RST05HPi4KKworICAgICAgIFRoZSBmdW5jdGlvbnMgPFNUUk9ORz5zZXRfZm9ybV9maWVsZHM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bW92ZV9maWVsZDwvU1RST05HPiByZXR1cm4gb25lIG9mCisgICAgICAgdGhlIGZvbGxvd2luZyBjb2RlcyBvbiBlcnJvcjoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBpcyBhbHJlYWR5IHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBUaGUgICBTVnI0ICAgZm9ybXMgIGxpYnJhcnkgIGRvY3VtZW50YXRpb24gIHNwZWNpZmllcyAgdGhlCisgICAgICAgPFNUUk9ORz5maWVsZF9jb3VudDwvU1RST05HPiBlcnJvciB2YWx1ZSBhcyAtMSAod2hpY2ggaXMgdGhlIHZhbHVlIG9mIDxTVFJPTkc+RVJSPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkLjN4Lmh0bWwiPmZvcm1fZmllbGQoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkNzdkOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbApAQCAtMCwwICsxLDEzMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4LHYgMS4xMCAyMDA2LzExLzA0IDE4OjUxOjI2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fZmllbGRfYXR0cmlidXRlcyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fZmllbGRfYXR0cmlidXRlcyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4Lmh0bWwiPmZvcm1fZmllbGRfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3guaHRtbCI+Zm9ybV9maWVsZF9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fZmllbGRfYXR0cmlidXRlczwvU1RST05HPiAgLSAgY29sb3IgIGFuZCBhdHRyaWJ1dGUgY29udHJvbCBmb3IKKyAgICAgICBmb3JtIGZpZWxkcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZmllbGRfZm9yZShGSUVMRCAqZmllbGQsIGNodHlwZSBhdHRyKTsKKyAgICAgICBjaHR5cGUgZmllbGRfZm9yZShjb25zdCBGSUVMRCAqZmllbGQpOworICAgICAgIGludCBzZXRfZmllbGRfYmFjayhGSUVMRCAqZmllbGQsIGNodHlwZSBhdHRyKTsKKyAgICAgICBjaHR5cGUgZmllbGRfYmFjayhjb25zdCBGSUVMRCAqZmllbGQpOworICAgICAgIGludCBzZXRfZmllbGRfcGFkKEZJRUxEICpmaWVsZCwgaW50IHBhZCk7CisgICAgICAgaW50IGZpZWxkX3BhZChjb25zdCBGSUVMRCAqZmllbGQpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9maWVsZF9mb3JlPC9TVFJPTkc+IHNldHMgdGhlIGZvcmVncm91bmQgIGF0dHJpYnV0ZQorICAgICAgIG9mICA8RU0+ZmllbGQ8L0VNPi4gVGhpcyBpcyB0aGUgaGlnaGxpZ2h0IHVzZWQgdG8gZGlzcGxheSB0aGUgZmllbGQKKyAgICAgICBjb250ZW50cy4gIFRoZSBmdW5jdGlvbiA8U1RST05HPmZpZWxkX2ZvcmU8L1NUUk9ORz4gcmV0dXJucyB0aGUgIGZvcmVncm91bmQKKyAgICAgICBhdHRyaWJ1dGUuICBUaGUgZGVmYXVsdCBpcyA8U1RST05HPkFfU1RBTkRPVVQ8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2ZpZWxkX2JhY2s8L1NUUk9ORz4gc2V0cyB0aGUgYmFja2dyb3VuZCBhdHRyaWJ1dGUKKyAgICAgICBvZiA8RU0+Zm9ybTwvRU0+LiBUaGlzIGlzIHRoZSBoaWdobGlnaHQgdXNlZCB0byBkaXNwbGF5IHRoZSAgZXh0ZW50CisgICAgICAgZmllbGRzICBpbiAgdGhlIGZvcm0uICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5maWVsZF9iYWNrPC9TVFJPTkc+IHJldHVybnMgdGhlCisgICAgICAgYmFja2dyb3VuZCBhdHRyaWJ1dGUuICBUaGUgZGVmYXVsdCBpcyA8U1RST05HPkFfTk9STUFMPC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2ZpZWxkX3BhZDwvU1RST05HPiBzZXRzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBmaWxsCisgICAgICAgdGhlICBmaWVsZC4gICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPmZpZWxkX3BhZDwvU1RST05HPiAgcmV0dXJucyAgdGhlIGdpdmVuCisgICAgICAgZm9ybSdzIHBhZCBjaGFyYWN0ZXIuICBUaGUgZGVmYXVsdCBpcyBhIGJsYW5rLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4gYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IKKyAgICAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfYXR0cmlidXRlcy4zeC5odG1sIj5mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTk4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbApAQCAtMCwwICsxLDE1OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZF9idWZmZXIuM3gsdiAxLjE0IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9maWVsZF9idWZmZXIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkX2J1ZmZlciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2J1ZmZlci4zeC5odG1sIj5mb3JtX2ZpZWxkX2J1ZmZlcigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkX2J1ZmZlcjwvU1RST05HPiAtIGZpZWxkIGJ1ZmZlciBjb250cm9sCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50ICBzZXRfZmllbGRfYnVmZmVyKEZJRUxEICAqZmllbGQsICBpbnQgIGJ1ZiwgY29uc3QgY2hhcgorICAgICAgICp2YWx1ZSk7CisgICAgICAgY2hhciAqZmllbGRfYnVmZmVyKGNvbnN0IEZJRUxEICpmaWVsZCwgaW50IGJ1ZmZlcik7CisgICAgICAgaW50IHNldF9maWVsZF9zdGF0dXMoRklFTEQgKmZpZWxkLCBib29sIHN0YXR1cyk7CisgICAgICAgYm9vbCBmaWVsZF9zdGF0dXMoY29uc3QgRklFTEQgKmZpZWxkKTsKKyAgICAgICBpbnQgc2V0X21heF9maWVsZChGSUVMRCAqZmllbGQsIGludCBtYXgpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9maWVsZF9idWZmZXI8L1NUUk9ORz4gc2V0cyB0aGUgbnVtYmVyZWQgYnVmZmVyICBvZgorICAgICAgIHRoZSAgZ2l2ZW4gIGZpZWxkICB0byBjb250YWluIGEgZ2l2ZW4gc3RyaW5nLiAgQnVmZmVyIDAgaXMKKyAgICAgICB0aGUgZGlzcGxheWVkIHZhbHVlIG9mIHRoZSBmaWVsZDsgb3RoZXIgIG51bWJlcmVkICBidWZmZXJzCisgICAgICAgbWF5IGJlIGFsbG9jYXRlZCBieSBhcHBsaWNhdGlvbnMgdGhyb3VnaCB0aGUgPFNUUk9ORz5uYnVmPC9TVFJPTkc+IGFyZ3VtZW50CisgICAgICAgb2YgKHNlZSA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3KDN4KTwvQT48L1NUUk9ORz4pIGJ1dCBhcmUgbm90IG1hbmlwdWxhdGVkIGJ5IHRoZQorICAgICAgIGZvcm1zICBsaWJyYXJ5LiAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+ZmllbGRfYnVmZmVyPC9TVFJPTkc+ICByZXR1cm5zIHRoZQorICAgICAgIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlci4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcyAgYnVmZmVyICBoYXMKKyAgICAgICBhbHdheXMgIHRoZSAgbGVuZ3RoICBvZiB0aGUgYnVmZmVyLCB0aGF0IG1lYW5zIHRoYXQgaXQgbWF5CisgICAgICAgdHlwaWNhbGx5IGNvbnRhaW4gdHJhaWxpbmcgc3BhY2VzLiBJZiB5b3UgZW50ZXJlZCAgbGVhZGluZworICAgICAgIHNwYWNlcyAgdGhlICBidWZmZXIgbWF5IGFsc28gY29udGFpbiB0aGVtLiBJZiB5b3Ugd2FudCB0aGUKKyAgICAgICByYXcgZGF0YSwgeW91IG11c3Qgd3JpdGUgeW91ciBvd24gcm91dGluZSB0aGF0IGNvcGllcyAgdGhlCisgICAgICAgdmFsdWUgb3V0IG9mIHRoZSBidWZmZXIgYW5kIHJlbW92ZXMgdGhlIGxlYWRpbmcgYW5kIHRyYWlsLQorICAgICAgIGluZyBzcGFjZXMuIFBsZWFzZSBub3RlIGFsc28sIHRoYXQgIHN1YnNlcXVlbnQgIG9wZXJhdGlvbnMKKyAgICAgICBvbiAgdGhlICBmb3JtICB3aWxsICBwcm9iYWJseSAgY2hhbmdlICB0aGUgIGNvbnRlbnQgb2YgdGhlCisgICAgICAgYnVmZmVyLiBTbyBkbyBub3QgdXNlIGl0IGZvciAgbG9uZyAgdGVybSAgc3RvcmFnZSAgb2YgIHRoZQorICAgICAgIGVudGVyZWQgZm9ybSBkYXRhLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfZmllbGRfc3RhdHVzPC9TVFJPTkc+IHNldHMgdGhlIGFzc29jaWF0ZWQgc3RhdHVzCisgICAgICAgZmxhZyBvZiA8RU0+ZmllbGQ8L0VNPjsgPFNUUk9ORz5maWVsZF9zdGF0dXM8L1NUUk9ORz4gZ2V0cyB0aGUgY3VycmVudCAgdmFsdWUuICAgVGhlCisgICAgICAgc3RhdHVzICBmbGFnICBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlIHdoZW5ldmVyIHRoZSBmaWVsZAorICAgICAgIGNoYW5nZXMuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWF4X2ZpZWxkPC9TVFJPTkc+IHNldHMgdGhlICBtYXhpbXVtICBzaXplICBmb3IgIGEKKyAgICAgICBkeW5hbWljICBmaWVsZC4gICBBbiAgYXJndW1lbnQgIG9mIDAgdHVybnMgb2ZmIGFueSBtYXhpbXVtCisgICAgICAgc2l6ZSB0aHJlc2hvbGQgZm9yIHRoYXQgZmllbGQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmZpZWxkX2J1ZmZlcjwvU1RST05HPiBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24gZXJyb3IuICBJdCAgc2V0cworICAgICAgIGVycm5vIGFjY29yZGluZyB0byB0aGVpciBzdWNjZXNzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgVGhlIDxTVFJPTkc+ZmllbGRfc3RhdHVzPC9TVFJPTkc+IGZ1bmN0aW9uIHJldHVybnMgPFNUUk9ORz5UUlVFPC9TVFJPTkc+IG9yIDxTVFJPTkc+RkFMU0U8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgcmVtYWluaW5nIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvcgorICAgICAgIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUKKworICAgICAgIFdoZW4gIGNvbmZpZ3VyZWQgZm9yIHdpZGUtY2hhcmFjdGVycywgPFNUUk9ORz5maWVsZF9idWZmZXI8L1NUUk9ORz4gcmV0dXJucworICAgICAgIGEgcG9pbnRlciB0byB0ZW1wb3Jhcnkgc3RvcmFnZSAoYWxsb2NhdGVkIGFuZCBmcmVlZCBieSB0aGUKKyAgICAgICBsaWJyYXJ5KS4gICBUaGUgIGFwcGxpY2F0aW9uICBzaG91bGQgbm90IGF0dGVtcHQgdG8gbW9kaWZ5CisgICAgICAgdGhlICBkYXRhLiAgIEl0ICB3aWxsICBiZSAgZnJlZWQgIG9uICB0aGUgIG5leHQgIGNhbGwgICB0bworICAgICAgIDxTVFJPTkc+ZmllbGRfYnVmZmVyPC9TVFJPTkc+IHRvIHJldHVybiB0aGUgc2FtZSBidWZmZXIuICA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9idWZmZXIuM3guaHRtbCI+Zm9ybV9maWVsZF9idWZmZXIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4ZmMyOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2luZm8uM3guaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9maWVsZF9pbmZvLjN4LHYgMS4xMCAyMDA2LzExLzA0IDE3OjE0OjMxIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fZmllbGRfaW5mbyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fZmllbGRfaW5mbyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwiPmZvcm1fZmllbGRfaW5mbygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX2luZm8uM3guaHRtbCI+Zm9ybV9maWVsZF9pbmZvKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fZmllbGRfaW5mbzwvU1RST05HPiAtIHJldHJpZXZlIGZpZWxkIGNoYXJhY3RlcmlzdGljcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBmaWVsZF9pbmZvKGNvbnN0IEZJRUxEICpmaWVsZCwgaW50ICpyb3dzLCBpbnQgKmNvbHMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgKmZyb3csIGludCAqZmNvbCwgaW50ICpucm93LCBpbnQgKm5idWYpOworICAgICAgIGludCBkeW5hbWljX2ZpZWxkX2luZm8oY29uc3QgRklFTEQgKmZpZWxkLCBpbnQgKnJvd3MsICBpbnQKKyAgICAgICAqY29scywgaW50ICptYXgpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+ZmllbGRfaW5mbzwvU1RST05HPiAgcmV0dXJucyAgdGhlICBzaXplcyAgYW5kICBvdGhlcgorICAgICAgIGF0dHJpYnV0ZXMgcGFzc2VkIGluIHRvIHRoZSBmaWVsZCBhdCAgaXRzICBjcmVhdGlvbiAgdGltZS4KKyAgICAgICBUaGUgIGF0dHJpYnV0ZXMgYXJlOiBoZWlnaHQsIHdpZHRoLCByb3cgb2YgdXBwZXItbGVmdCBjb3ItCisgICAgICAgbmVyLCBjb2x1bW4gb2YgdXBwZXItbGVmdCBjb3JuZXIsIG51bWJlciBvZmYtc2NyZWVuICByb3dzLAorICAgICAgIGFuZCBudW1iZXIgb2Ygd29ya2luZyBidWZmZXJzLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZHluYW1pY19maWVsZF9pbmZvPC9TVFJPTkc+IHJldHVybnMgdGhlIGFjdHVhbCBzaXplIG9mCisgICAgICAgdGhlIGZpZWxkLCBhbmQgaXRzIG1heGltdW0gcG9zc2libGUgc2l6ZS4gICBJZiAgdGhlICBmaWVsZAorICAgICAgIGhhcyAgbm8gIHNpemUgIGxpbWl0LCAgdGhlIGxvY2F0aW9uIGFkZHJlc3NlZCBieSB0aGUgdGhpcmQKKyAgICAgICBhcmd1bWVudCB3aWxsIGJlIHNldCB0byAwLiAgQSBmaWVsZCBjYW4gYmUgbWFkZSBkeW5hbWljIGJ5CisgICAgICAgdHVybmluZyBvZmYgdGhlIDxTVFJPTkc+T19TVEFUSUM8L1NUUk9ORz4gb3B0aW9uIHdpdGggPFNUUk9ORz5maWVsZF9vcHRzX29mZjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+IGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJmb3JtXyIgZm9yCisgICAgICAgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisgICAgICAgQSAgbnVsbCAgKHplcm8gIHBvaW50ZXIpIGlzIGFjY2VwdGVkIGZvciBhbnkgb2YgdGhlIHJldHVybgorICAgICAgIHZhbHVlcywgdG8gaWdub3JlIHRoYXQgIHZhbHVlLiAgIE5vdCAgYWxsICBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICBhbGxvdyB0aGlzLCBlLmcuLCBTb2xhcmlzIDIuNyBkb2VzIG5vdC4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9pbmZvLjN4Lmh0bWwiPmZvcm1fZmllbGRfaW5mbygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX2p1c3QuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDcwMjBmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfanVzdC4zeC5odG1sCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2ZpZWxkX2p1c3QuM3gsdiAxLjkgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2ZpZWxkX2p1c3QgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkX2p1c3QgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfanVzdC4zeC5odG1sIj5mb3JtX2ZpZWxkX2p1c3QoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwiPmZvcm1fZmllbGRfanVzdCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkX2p1c3Q8L1NUUk9ORz4gLSByZXRyaWV2ZSBmaWVsZCBjaGFyYWN0ZXJpc3RpY3MKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2ZpZWxkX2p1c3QoRklFTEQgKmZpZWxkLCBpbnQganVzdGlmaWNhdGlvbik7CisgICAgICAgaW50IGZpZWxkX2p1c3QoY29uc3QgRklFTEQgKmZpZWxkKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgICBmdW5jdGlvbiAgIDxTVFJPTkc+c2V0X2ZpZWxkX2p1c3Q8L1NUUk9ORz4gICBzZXRzICB0aGUgIGp1c3RpZmljYXRpb24KKyAgICAgICBhdHRyaWJ1dGUgb2YgYSBmaWVsZDsgPFNUUk9ORz5maWVsZF9qdXN0PC9TVFJPTkc+IHJldHVybnMgYSBmaWVsZCdzICBqdXN0aS0KKyAgICAgICBmaWNhdGlvbiBhdHRyaWJ1dGUuICBUaGUgYXR0cmlidXRlIG1heSBiZSBvbmUgb2YgTk9fSlVTVEktCisgICAgICAgRklDQVRJT04sIEpVU1RJRllfUklHSFQsIEpVU1RJRllfTEVGVCwgb3IgIEpVU1RJRllfQ0VOVEVSLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+ZmllbGRfanVzdDwvU1RST05HPiByZXR1cm5zIG9uZSBvZjogTk9fSlVTVElGSUNBVElPTiwKKyAgICAgICBKVVNUSUZZX1JJR0hULCBKVVNUSUZZX0xFRlQsIG9yIEpVU1RJRllfQ0VOVEVSLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2ZpZWxkX2p1c3Q8L1NUUk9ORz4gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvcgorICAgICAgIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9qdXN0LjN4Lmh0bWwiPmZvcm1fZmllbGRfanVzdCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfbmV3LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwMjY5YQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX25ldy4zeC5odG1sCkBAIC0wLDAgKzEsMTUwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2ZpZWxkX25ldy4zeCx2IDEuMTYgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2ZpZWxkX25ldyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fZmllbGRfbmV3IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfbmV3LjN4Lmh0bWwiPmZvcm1fZmllbGRfbmV3KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fZmllbGRfbmV3PC9TVFJPTkc+IC0gY3JlYXRlIGFuZCBkZXN0cm95IGZvcm0gZmllbGRzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgRklFTEQgKm5ld19maWVsZChpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG9wcm93LCBpbnQgbGVmdGNvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzY3JlZW4sIGludCBuYnVmZmVycyk7CisgICAgICAgRklFTEQgKmR1cF9maWVsZChGSUVMRCAqZmllbGQsIGludCB0b3Byb3csIGludCBsZWZ0Y29sKTsKKyAgICAgICBGSUVMRCAqbGlua19maWVsZChGSUVMRCAqZmllbGQsIGludCB0b3Byb3csIGludCBsZWZ0Y29sKTsKKyAgICAgICBpbnQgZnJlZV9maWVsZChGSUVMRCAqZmllbGQpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gPFNUUk9ORz5uZXdfZmllbGQ8L1NUUk9ORz4gYWxsb2NhdGVzIGEgbmV3IGZpZWxkIGFuZCBpbml0aWFsLQorICAgICAgIGl6ZXMgaXQgZnJvbSB0aGUgcGFyYW1ldGVycyBnaXZlbjogaGVpZ2h0LCB3aWR0aCwgIHJvdyAgb2YKKyAgICAgICB1cHBlci1sZWZ0ICBjb3JuZXIsICBjb2x1bW4gIG9mICB1cHBlci1sZWZ0IGNvcm5lciwgbnVtYmVyCisgICAgICAgb2ZmLXNjcmVlbiByb3dzLCBhbmQgbnVtYmVyIG9mIGFkZGl0aW9uYWwgd29ya2luZyBidWZmZXJzLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5kdXBfZmllbGQ8L1NUUk9ORz4gZHVwbGljYXRlcyBhIGZpZWxkIGF0IGEgbmV3IGxvY2EtCisgICAgICAgdGlvbi4gIE1vc3QgYXR0cmlidXRlcyAoaW5jbHVkaW5nIGN1cnJlbnQgY29udGVudHMsICBzaXplLAorICAgICAgIHZhbGlkYXRpb24gIHR5cGUsIGJ1ZmZlciBjb3VudCwgZ3Jvd3RoIHRocmVzaG9sZCwganVzdGlmaS0KKyAgICAgICBjYXRpb24sIGZvcmVncm91bmQsIGJhY2tncm91bmQsICBwYWQgIGNoYXJhY3RlciwgIG9wdGlvbnMsCisgICAgICAgYW5kICB1c2VyIHBvaW50ZXIpIGFyZSBjb3BpZWQuICBGaWVsZCBzdGF0dXMgYW5kIHRoZSBmaWVsZAorICAgICAgIHBhZ2UgYml0IGFyZSBub3QgY29waWVkLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bGlua19maWVsZDwvU1RST05HPiBhY3RzIGxpa2UgPFNUUk9ORz5kdXBfZmllbGQ8L1NUUk9ORz4sIGJ1dCAgdGhlICBuZXcKKyAgICAgICBmaWVsZCAgc2hhcmVzICBidWZmZXJzIHdpdGggaXRzIHBhcmVudC4gIEF0dHJpYnV0ZSBkYXRhIGlzCisgICAgICAgc2VwYXJhdGUuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5mcmVlX2ZpZWxkPC9TVFJPTkc+ICBkZS1hbGxvY2F0ZXMgIHN0b3JhZ2UgIGFzc29jaWF0ZWQKKyAgICAgICB3aXRoIGEgZmllbGQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiwgPFNUUk9ORz5uZXdfZmllbGQ8L1NUUk9ORz4sIDxTVFJPTkc+ZHVwX2ZpZWxkPC9TVFJPTkc+LCA8U1RST05HPmxpbmtfZmllbGQ8L1NUUk9ORz4gcmV0dXJuIDxTVFJPTkc+TlVMTDwvU1RST05HPgorICAgICAgIG9uIGVycm9yLiAgVGhleSBzZXQgZXJybm8gYWNjb3JkaW5nIHRvIHRoZWlyIHN1Y2Nlc3M6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQsIGUuZy4sIG1hbGxvYyBmYWlsdXJlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZnJlZV9maWVsZDwvU1RST05HPiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgZmllbGQgaXMgY29ubmVjdGVkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBJdCBtYXkgYmUgdW53aXNlIHRvIGNvdW50IG9uIHRoZSBzZXQgb2YgYXR0cmlidXRlcyAgY29waWVkCisgICAgICAgYnkgIDxTVFJPTkc+ZHVwX2ZpZWxkPC9TVFJPTkc+ICBiZWluZyAgcG9ydGFibGU7IHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5CisgICAgICAgZG9jdW1lbnRzIGFyZSBub3QgdmVyeSBleHBsaWNpdCBhYm91dCB3aGF0IGdldHMgY29waWVkIGFuZAorICAgICAgIHdoYXQgZG9lcyBub3QuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX25ldy4zeC5odG1sIj5mb3JtX2ZpZWxkX25ldygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX29wdHMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWExMzIxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfb3B0cy4zeC5odG1sCkBAIC0wLDAgKzEsMTY2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2ZpZWxkX29wdHMuM3gsdiAxLjEzIDIwMDcvMDIvMjQgMTc6MzQ6MjcgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9maWVsZF9vcHRzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9maWVsZF9vcHRzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX29wdHMuM3guaHRtbCI+Zm9ybV9maWVsZF9vcHRzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfb3B0cy4zeC5odG1sIj5mb3JtX2ZpZWxkX29wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9maWVsZF9vcHRzPC9TVFJPTkc+IC0gc2V0IGFuZCBnZXQgZmllbGQgb3B0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZmllbGRfb3B0cyhGSUVMRCAqZmllbGQsIEZpZWxkX09wdGlvbnMgb3B0cyk7CisgICAgICAgaW50IGZpZWxkX29wdHNfb24oRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpOworICAgICAgIGludCBmaWVsZF9vcHRzX29mZihGSUVMRCAqZmllbGQsIEZpZWxkX09wdGlvbnMgb3B0cyk7CisgICAgICAgRmllbGRfT3B0aW9ucyBmaWVsZF9vcHRzKGNvbnN0IEZJRUxEICpmaWVsZCk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfZmllbGRfb3B0czwvU1RST05HPiAgc2V0cyAgYWxsIHRoZSBnaXZlbiBmaWVsZCdzCisgICAgICAgb3B0aW9uIGJpdHMgKGZpZWxkICBvcHRpb24gIGJpdHMgIG1heSAgYmUgIGxvZ2ljYWxseS1PUidlZAorICAgICAgIHRvZ2V0aGVyKS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZpZWxkX29wdHNfb248L1NUUk9ORz4gdHVybnMgb24gdGhlIGdpdmVuIG9wdGlvbiBiaXRzLAorICAgICAgIGFuZCBsZWF2ZXMgb3RoZXJzIGFsb25lLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZmllbGRfb3B0c19vZmY8L1NUUk9ORz4gdHVybnMgIG9mZiAgdGhlICBnaXZlbiAgb3B0aW9uCisgICAgICAgYml0cywgYW5kIGxlYXZlcyBvdGhlcnMgYWxvbmUuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5maWVsZF9vcHRzPC9TVFJPTkc+IHJldHVybnMgdGhlIGZpZWxkJ3MgY3VycmVudCBvcHRpb24KKyAgICAgICBiaXRzLgorCisgICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBkZWZpbmVkIChhbGwgYXJlIG9uIGJ5IGRlZmF1bHQpOgorCisgICAgICAgT19WSVNJQkxFCisgICAgICAgICAgICBUaGUgIGZpZWxkIGlzIGRpc3BsYXllZC4gIElmIHRoaXMgb3B0aW9uIGlzIG9mZiwgZGlzLQorICAgICAgICAgICAgcGxheSBvZiB0aGUgZmllbGQgaXMgc3VwcHJlc3NlZC4KKworICAgICAgIE9fQUNUSVZFCisgICAgICAgICAgICBUaGUgZmllbGQgaXMgIHZpc2l0ZWQgIGR1cmluZyAgcHJvY2Vzc2luZy4gICBJZiAgdGhpcworICAgICAgICAgICAgb3B0aW9uICBpcyAgb2ZmLCAgdGhlICBmaWVsZCB3aWxsIG5vdCBiZSByZWFjaGFibGUgYnkKKyAgICAgICAgICAgIG5hdmlnYXRpb24ga2V5cy4gIFBsZWFzZSAgbm90aWNlICB0aGF0ICBhbiAgaW52aXNpYmxlCisgICAgICAgICAgICBmaWVsZCBhcHBlYXJzIHRvIGJlIGluYWN0aXZlIGFsc28uCisKKyAgICAgICBPX1BVQkxJQworICAgICAgICAgICAgVGhlICBmaWVsZCBjb250ZW50cyBhcmUgZGlzcGxheWVkIGFzIGRhdGEgaXMgZW50ZXJlZC4KKworICAgICAgIE9fRURJVAorICAgICAgICAgICAgVGhlIGZpZWxkIGNhbiBiZSBlZGl0ZWQuCisKKyAgICAgICBPX1dSQVAKKyAgICAgICAgICAgIFdvcmRzIHRoYXQgZG8gbm90IGZpdCBvbiBhIGxpbmUgYXJlICB3cmFwcGVkICB0byAgdGhlCisgICAgICAgICAgICBuZXh0IGxpbmUuICBXb3JkcyBhcmUgYmxhbmstc2VwYXJhdGVkLgorCisgICAgICAgT19CTEFOSworICAgICAgICAgICAgVGhlICBmaWVsZCBpcyBjbGVhcmVkIHdoZW5ldmVyIGEgY2hhcmFjdGVyIGlzIGVudGVyZWQKKyAgICAgICAgICAgIGF0IHRoZSBmaXJzdCBwb3NpdGlvbi4KKworICAgICAgIE9fQVVUT1NLSVAKKyAgICAgICAgICAgIFNraXAgdG8gdGhlIG5leHQgZmllbGQgd2hlbiB0aGlzIG9uZSBmaWxscy4KKworICAgICAgIE9fTlVMTE9LCisgICAgICAgICAgICBBbGxvdyBhIGJsYW5rIGZpZWxkLgorCisgICAgICAgT19TVEFUSUMKKyAgICAgICAgICAgIEZpZWxkIGJ1ZmZlcnMgYXJlIGZpeGVkICB0byAgZmllbGQncyAgb3JpZ2luYWwgIHNpemUuCisgICAgICAgICAgICBUdXJuIHRoaXMgb3B0aW9uIG9mZiB0byBjcmVhdGUgYSBkeW5hbWljIGZpZWxkLgorCisgICAgICAgT19QQVNTT0sKKyAgICAgICAgICAgIFZhbGlkYXRlIGZpZWxkIG9ubHkgaWYgbW9kaWZpZWQgYnkgdXNlci4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgRXhjZXB0ICBmb3IgIDxTVFJPTkc+ZmllbGRfb3B0czwvU1RST05HPiwgIGVhY2ggIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlCisgICAgICAgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0NVUlJFTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmaWVsZCBpcyB0aGUgY3VycmVudCBmaWVsZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCisgICAgICAgPFNUUk9ORz5OT1RFUzwvU1RST05HPiAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUKKyAgICAgICAgICAgICAgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF9vcHRzLjN4Lmh0bWwiPmZvcm1fZmllbGRfb3B0cygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2E2YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX2ZpZWxkX3VzZXJwdHIuM3gsdiAxLjggMjAwNi8xMS8wNCAxODowNDozNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2ZpZWxkX3VzZXJwdHIgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkX3VzZXJwdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfdXNlcnB0ci4zeC5odG1sIj5mb3JtX2ZpZWxkX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZvcm1fZmllbGRfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkX3VzZXJwdHI8L1NUUk9ORz4gIC0gIGFzc29jaWF0ZSAgYXBwbGljYXRpb24gIGRhdGEgd2l0aCBhCisgICAgICAgZm9ybSBmaWVsZAorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZmllbGRfdXNlcnB0cihGSUVMRCAqZmllbGQsIHZvaWQqdXNlcnB0cik7CisgICAgICAgdm9pZCAqZmllbGRfdXNlcnB0cihjb25zdCBGSUVMRCAqZmllbGQpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEV2ZXJ5IGZvcm0gZmllbGQgaGFzIGEgZmllbGQgdGhhdCAgY2FuICBiZSAgdXNlZCAgdG8gIGhvbGQKKyAgICAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYyAgZGF0YSAgKHRoYXQgaXMsIHRoZSBmb3JtLWRyaXZlciBjb2RlCisgICAgICAgbGVhdmVzIGl0IGFsb25lKS4gIFRoZXNlIGZ1bmN0aW9ucyBnZXQgYW5kIHNldCB0aGF0IGZpZWxkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5maWVsZF91c2VycHRyPC9TVFJPTkc+IHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgYmUKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2ZpZWxkX3VzZXJwdHI8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVfT0s8L1NUUk9ORz4gKHN1Y2Nlc3MpLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBUaGUgdXNlciBwb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyLiAgV2UgY2hvc2Ugbm90IHRvIGxlYXZlCisgICAgICAgaXQgYXMgYSBjaGFyIHBvaW50ZXIgZm9yIFNWcjQgY29tcGF0aWJpbGl0eS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF91c2VycHRyLjN4Lmh0bWwiPmZvcm1fZmllbGRfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzI4MDMxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sCkBAIC0wLDAgKzEsMTk2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeCx2IDEuMTYgMjAwNi8xMi8yNCAxNjowODowOCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX2ZpZWxkX3ZhbGlkYXRpb24gM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX2ZpZWxkX3ZhbGlkYXRpb24gM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGRfdmFsaWRhdGlvbi4zeC5odG1sIj5mb3JtX2ZpZWxkX3ZhbGlkYXRpb24oM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4Lmh0bWwiPmZvcm1fZmllbGRfdmFsaWRhdGlvbigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX2ZpZWxkX3ZhbGlkYXRpb248L1NUUk9ORz4gLSBkYXRhIHR5cGUgdmFsaWRhdGlvbiBmb3IgZmllbGRzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgRklFTERUWVBFICp0eXBlLCAuLi4pOworICAgICAgIEZJRUxEVFlQRSAqZmllbGRfdHlwZShjb25zdCBGSUVMRCAqZmllbGQpOworICAgICAgIHZvaWQgKmZpZWxkX2FyZyhjb25zdCBGSUVMRCAqZmllbGQpOworCisgICAgICAgRklFTERUWVBFICpUWVBFX0FMTlVNOworICAgICAgIEZJRUxEVFlQRSAqVFlQRV9BTFBIQTsKKyAgICAgICBGSUVMRFRZUEUgKlRZUEVfRU5VTTsKKyAgICAgICBGSUVMRFRZUEUgKlRZUEVfSU5URUdFUjsKKyAgICAgICBGSUVMRFRZUEUgKlRZUEVfTlVNRVJJQzsKKyAgICAgICBGSUVMRFRZUEUgKlRZUEVfUkVHRVhQOworICAgICAgIEZJRUxEVFlQRSAqVFlQRV9JUFY0OworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2ZpZWxkX3R5cGU8L1NUUk9ORz4gIGRlY2xhcmVzICBhIGRhdGEgdHlwZSBmb3IgYQorICAgICAgIGdpdmVuIGZvcm0gZmllbGQuICBUaGlzIGlzIHRoZSB0eXBlIGNoZWNrZWQgYnkgIHZhbGlkYXRpb24KKyAgICAgICBmdW5jdGlvbnMuICBUaGUgcHJlZGVmaW5lZCB0eXBlcyBhcmUgYXMgZm9sbG93czoKKworICAgICAgIFRZUEVfQUxOVU0KKyAgICAgICAgICAgIEFscGhhbnVtZXJpYyAgZGF0YS4gIFJlcXVpcmVzIGEgdGhpcmQgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gYXJndW1lbnQsIGEKKyAgICAgICAgICAgIG1pbmltdW0gZmllbGQgd2lkdGguCisKKyAgICAgICBUWVBFX0FMUEhBCisgICAgICAgICAgICBDaGFyYWN0ZXIgZGF0YS4gIFJlcXVpcmVzIGEgIHRoaXJkICA8U1RST05HPmludDwvU1RST05HPiAgYXJndW1lbnQsICBhCisgICAgICAgICAgICBtaW5pbXVtIGZpZWxkIHdpZHRoLgorCisgICAgICAgVFlQRV9FTlVNCisgICAgICAgICAgICBBY2NlcHQgb25lIG9mIGEgc3BlY2lmaWVkIHNldCBvZiBzdHJpbmdzLiAgUmVxdWlyZXMgYQorICAgICAgICAgICAgdGhpcmQgPFNUUk9ORz4oY2hhcjwvU1RST05HPiA8U1RST05HPioqKTwvU1RST05HPiBhcmd1bWVudCBwb2ludGluZyB0byBhIHN0cmluZyBsaXN0OyBhCisgICAgICAgICAgICBmb3VydGggIDxTVFJPTkc+aW50PC9TVFJPTkc+IGZsYWcgYXJndW1lbnQgdG8gZW5hYmxlIGNhc2Utc2Vuc2l0aXZpdHk7CisgICAgICAgICAgICBhbmQgYSBmaWZ0aCA8U1RST05HPmludDwvU1RST05HPiBmbGFnIGFyZ3VtZW50ICBzcGVjaWZ5aW5nICB3aGV0aGVyICBhCisgICAgICAgICAgICBwYXJ0aWFsICBtYXRjaCAgbXVzdCBiZSBhIHVuaXF1ZSBvbmUgKGlmIHRoaXMgZmxhZyBpcworICAgICAgICAgICAgb2ZmLCBhIHByZWZpeCBtYXRjaGVzIHRoZSBmaXJzdCBvZiBhbnkgIHNldCAgb2YgIG1vcmUKKyAgICAgICAgICAgIHRoYW4gIG9uZSAgbGlzdCAgZWxlbWVudHMgIHdpdGggIHRoYXQgcHJlZml4KS4gUGxlYXNlCisgICAgICAgICAgICBub3RpY2UgdGhhdCB0aGUgc3RyaW5nIGxpc3QgaXMgIG5vdCAgY29waWVkLCAgb25seSAgYQorICAgICAgICAgICAgcmVmZXJlbmNlIHRvIGl0IGlzIHN0b3JlZCBpbiB0aGUgZmllbGQuIFNvIHlvdSBzaG91bGQKKyAgICAgICAgICAgIGF2b2lkIHVzaW5nIGEgbGlzdCB0aGF0IGxpdmVzIGluIGF1dG9tYXRpYyAgdmFyaWFibGVzCisgICAgICAgICAgICBvbiB0aGUgc3RhY2suCisKKyAgICAgICBUWVBFX0lOVEVHRVIKKyAgICAgICAgICAgIEludGVnZXIgIGRhdGEsICBwYXJzYWJsZSAgdG8gIGFuICBpbnRlZ2VyIGJ5IDxTVFJPTkc+YXRvaSgzKTwvU1RST05HPi4KKyAgICAgICAgICAgIFJlcXVpcmVzIGEgdGhpcmQgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gYXJndW1lbnQgY29udHJvbGxpbmcgdGhlICBwcmVjaS0KKyAgICAgICAgICAgIHNpb24sICBhICBmb3VydGggIDxTVFJPTkc+bG9uZzwvU1RST05HPiAgYXJndW1lbnQgY29uc3RyYWluaW5nIG1pbmltdW0KKyAgICAgICAgICAgIHZhbHVlLCBhbmQgYSBmaWZ0aCA8U1RST05HPmxvbmc8L1NUUk9ORz4gY29uc3RyYWluaW5nICBtYXhpbXVtICB2YWx1ZS4KKyAgICAgICAgICAgIElmICB0aGUgIG1heGltdW0gIHZhbHVlICBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICAgICAgICBtaW5pbXVtIHZhbHVlLCB0aGUgcmFuZ2UgaXMgc2ltcGx5IGlnbm9yZWQuIE9uIHJldHVybgorICAgICAgICAgICAgdGhlIGZpZWxkIGJ1ZmZlciBpcyBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSA8U1RST05HPnByaW50ZjwvU1RST05HPgorICAgICAgICAgICAgZm9ybWF0ICBzcGVjaWZpY2F0aW9uICAiLipsZCIsICB3aGVyZSAgdGhlICAgJyonICAgaXMKKyAgICAgICAgICAgIHJlcGxhY2VkICBieSAgdGhlIHByZWNpc2lvbiBhcmd1bWVudC4gIEZvciBkZXRhaWxzIG9mCisgICAgICAgICAgICB0aGUgcHJlY2lzaW9uIGhhbmRsaW5nIHNlZSA8U1RST05HPnByaW50ZidzPC9TVFJPTkc+IG1hbi1wYWdlLgorCisgICAgICAgVFlQRV9OVU1FUklDCisgICAgICAgICAgICBOdW1lcmljICBkYXRhICAobWF5ICBoYXZlICBhICAgZGVjaW1hbC1wb2ludCAgIHBhcnQpLgorICAgICAgICAgICAgUmVxdWlyZXMgIGEgdGhpcmQgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gYXJndW1lbnQgY29udHJvbGxpbmcgdGhlIHByZWNpLQorICAgICAgICAgICAgc2lvbiwgYSBmb3VydGggPFNUUk9ORz5kb3VibGU8L1NUUk9ORz4gYXJndW1lbnQgIGNvbnN0cmFpbmluZyAgbWluaW11bQorICAgICAgICAgICAgdmFsdWUsIGFuZCBhIGZpZnRoIDxTVFJPTkc+ZG91YmxlPC9TVFJPTkc+IGNvbnN0cmFpbmluZyBtYXhpbXVtIHZhbHVlLgorICAgICAgICAgICAgSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgbG9jYWxlcywgIHRoZSAgZGVjaW1hbCAgcG9pbnQKKyAgICAgICAgICAgIGNoYXJhY3RlciAgdG8gIGJlICB1c2VkICBtdXN0IGJlIHRoZSBvbmUgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICB5b3VyIGxvY2FsZS4gIElmIHRoZSBtYXhpbXVtIHZhbHVlIGlzICBsZXNzICB0aGFuICBvcgorICAgICAgICAgICAgZXF1YWwgIHRvICB0aGUgIG1pbmltdW0gIHZhbHVlLCAgdGhlICByYW5nZSBpcyBzaW1wbHkKKyAgICAgICAgICAgIGlnbm9yZWQuIE9uIHJldHVybiAgdGhlICBmaWVsZCAgYnVmZmVyICBpcyAgZm9ybWF0dGVkCisgICAgICAgICAgICBhY2NvcmRpbmcgIHRvICB0aGUgPFNUUk9ORz5wcmludGY8L1NUUk9ORz4gZm9ybWF0IHNwZWNpZmljYXRpb24gIi4qZiIsCisgICAgICAgICAgICB3aGVyZSB0aGUgJyonIGlzIHJlcGxhY2VkIGJ5IHRoZSBwcmVjaXNpb24gIGFyZ3VtZW50LgorICAgICAgICAgICAgRm9yICBkZXRhaWxzICBvZiAgdGhlIHByZWNpc2lvbiBoYW5kbGluZyBzZWUgPFNUUk9ORz5wcmludGYnczwvU1RST05HPgorICAgICAgICAgICAgbWFuLXBhZ2UuCisKKyAgICAgICBUWVBFX1JFR0VYUAorICAgICAgICAgICAgUmVndWxhciBleHByZXNzaW9uIGRhdGEuICBSZXF1aXJlcyBhIHJlZ3VsYXIgIGV4cHJlcy0KKyAgICAgICAgICAgIHNpb24gIDxTVFJPTkc+KGNoYXI8L1NUUk9ORz4gIDxTVFJPTkc+Kik8L1NUUk9ORz4gIHRoaXJkIGFyZ3VtZW50OyB0aGUgZGF0YSBpcyB2YWxpZCBpZgorICAgICAgICAgICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIGl0LiAgIFJlZ3VsYXIgIGV4cHJlcy0KKyAgICAgICAgICAgIHNpb25zICBhcmUgIGluICB0aGUgIGZvcm1hdCAgb2YgIDxTVFJPTkc+cmVnY29tcDwvU1RST05HPiBhbmQgPFNUUk9ORz5yZWdleGVjPC9TVFJPTkc+LgorICAgICAgICAgICAgUGxlYXNlIG5vdGljZSB0aGF0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbXVzdCAgbWF0Y2gKKyAgICAgICAgICAgIHRoZSAgd2hvbGUgIGZpZWxkLiAgSWYgIHlvdSBoYXZlIGZvciBleGFtcGxlIGFuIGVpZ2h0CisgICAgICAgICAgICBjaGFyYWN0ZXIgd2lkZSBmaWVsZCwgYSByZWd1bGFyIGV4cHJlc3Npb24gIl5bMC05XSokIgorICAgICAgICAgICAgYWx3YXlzICBtZWFucyAgdGhhdCAgeW91IGhhdmUgdG8gZmlsbCBhbGwgZWlnaHQgcG9zaS0KKyAgICAgICAgICAgIHRpb25zIHdpdGggZGlnaXRzLiBJZiB5b3Ugd2FudCB0byBhbGxvdyBmZXdlciBkaWdpdHMsCisgICAgICAgICAgICB5b3UgIG1heSAgdXNlICBmb3IgZXhhbXBsZSAiXlswLTldKiAqJCIgd2hpY2ggaXMgZ29vZAorICAgICAgICAgICAgZm9yIHRyYWlsaW5nIHNwYWNlcyAodXAgdG8gYW4gIGVtcHR5ICBmaWVsZCksICBvciAgIl4KKyAgICAgICAgICAgICpbMC05XSogICokIiAgd2hpY2ggIGlzIGdvb2QgZm9yIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgICAgICAgICAgICBzcGFjZXMgYXJvdW5kIHRoZSBkaWdpdHMuCisKKyAgICAgICBUWVBFX0lQVjQKKyAgICAgICAgICAgIEFuIEludGVybmV0IFByb3RvY29sIFZlcnNpb24gNCBhZGRyZXNzLiBUaGlzIHJlcXVpcmVzCisgICAgICAgICAgICBubyAgYWRkaXRpb25hbCBhcmd1bWVudC4gSXQgaXMgY2hlY2tlZCB3aGV0aGVyIG9yIG5vdAorICAgICAgICAgICAgdGhlIGJ1ZmZlciBoYXMgdGhlIGZvcm0gYS5iLmMuZCwgd2hlcmUgIGEsYixjICBhbmQgIGQKKyAgICAgICAgICAgIGFyZSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMjU1LiBUcmFpbGluZyBibGFua3MgaW4gdGhlCisgICAgICAgICAgICBidWZmZXIgYXJlIGlnbm9yZWQuIFRoZSBhZGRyZXNzIGl0c2VsZiBpcyAgbm90ICB2YWxpLQorICAgICAgICAgICAgZGF0ZWQuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBuY3Vyc2VzIGV4dGVuc2lvbi4KKyAgICAgICAgICAgIFRoaXMgZmllbGQgdHlwZSBtYXkgbm90IGJlIGF2YWlsYWJsZSBpbiBvdGhlciAgY3Vyc2VzCisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICBJdCAgaXMgIHBvc3NpYmxlICB0byAgc2V0ICB1cCBuZXcgcHJvZ3JhbW1lci1kZWZpbmVkIGZpZWxkCisgICAgICAgdHlwZXMuICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUoM3gpPC9BPjwvU1RST05HPiBtYW51YWwgcGFnZS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9ucyA8U1RST05HPmZpZWxkX3R5cGU8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5maWVsZF9hcmc8L1NUUk9ORz4gIHJldHVybiAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+ICBvbgorICAgICAgIGVycm9yLiBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfZmllbGRfdHlwZTwvU1RST05HPiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sLQorICAgICAgIGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3guaHRtbCI+Zm9ybV9maWVsZF92YWxpZGF0aW9uKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGR0eXBlLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9maWVsZHR5cGUuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGRhYjQxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fZmllbGR0eXBlLjN4Lmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fZmllbGR0eXBlLjN4LHYgMS4xNCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fZmllbGR0eXBlIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9maWVsZHR5cGUgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9maWVsZHR5cGUuM3guaHRtbCI+Zm9ybV9maWVsZHR5cGUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9maWVsZHR5cGU8L1NUUk9ORz4gLSBkZWZpbmUgdmFsaWRhdGlvbi1maWVsZCB0eXBlcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIEZJRUxEVFlQRSAqbmV3X2ZpZWxkdHlwZSgKKyAgICAgICAgICAgYm9vbCAoKiBjb25zdCBmaWVsZF9jaGVjaykoRklFTEQgKiwgY29uc3Qgdm9pZCAqKSwKKyAgICAgICAgICAgYm9vbCAoKiBjb25zdCBjaGFyX2NoZWNrKShpbnQsIGNvbnN0IHZvaWQgKikpOworICAgICAgIGludCBmcmVlX2ZpZWxkdHlwZShGSUVMRFRZUEUgKmZpZWxkdHlwZSk7CisgICAgICAgaW50IHNldF9maWVsZHR5cGVfYXJnKAorICAgICAgICAgICBGSUVMRFRZUEUgKmZpZWxkdHlwZSwKKyAgICAgICAgICAgdm9pZCAqKCogY29uc3QgbWFrZV9hcmcpKHZhX2xpc3QgKiksCisgICAgICAgICAgIHZvaWQgKigqIGNvbnN0IGNvcHlfYXJnKShjb25zdCB2b2lkICopLAorICAgICAgICAgICB2b2lkICAoKiBjb25zdCBmcmVlX2FyZykodm9pZCAqKSk7CisgICAgICAgaW50IHNldF9maWVsZHR5cGVfY2hvaWNlKAorICAgICAgICAgICBGSUVMRFRZUEUgKmZpZWxkdHlwZSwKKyAgICAgICAgICAgYm9vbCAoKiBjb25zdCBuZXh0X2Nob2ljZSkoRklFTEQgKiwgY29uc3Qgdm9pZCAqKSwKKyAgICAgICAgICAgYm9vbCAoKiBjb25zdCBwcmV2X2Nob2ljZSkoRklFTEQgKiwgY29uc3Qgdm9pZCAqKSk7CisgICAgICAgRklFTERUWVBFICpsaW5rX2ZpZWxkdHlwZShGSUVMRFRZUEUgKnR5cGUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICp0eXBlMik7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bmV3X2ZpZWxkdHlwZTwvU1RST05HPiBjcmVhdGVzIGEgbmV3IGZpZWxkIHR5cGUgdXNhYmxlCisgICAgICAgZm9yIGRhdGEgdmFsaWRhdGlvbi4gIFlvdSBzdXBwbHkgaXQgIHdpdGggIDxFTT5maWVsZDwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmNoZWNrPC9FTT4sICBhCisgICAgICAgcHJlZGljYXRlICB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2YgYW4gZW50ZXJlZCBkYXRhIHN0cmluZworICAgICAgIHdoZW5ldmVyIHRoZSB1c2VyIGF0dGVtcHRzIHRvIGxlYXZlIGEgZmllbGQuICAgVGhlICAoRklFTEQKKyAgICAgICAqKSAgYXJndW1lbnQgIGlzIHBhc3NlZCBpbiBzbyB0aGUgdmFsaWRhdGlvbiBwcmVkaWNhdGUgY2FuCisgICAgICAgc2VlIHRoZSBmaWVsZCdzIGJ1ZmZlciwgc2l6ZXMgYW5kICBvdGhlciAgYXR0cmlidXRlczsgIHRoZQorICAgICAgIHNlY29uZCAgYXJndW1lbnQgIGlzICBhbiAgYXJndW1lbnQtYmxvY2sgIHN0cnVjdHVyZSwgYWJvdXQKKyAgICAgICB3aGljaCBtb3JlIGJlbG93LgorCisgICAgICAgWW91IGFsc28gc3VwcGx5IDxTVFJPTkc+bmV3X2ZpZWxkdHlwZTwvU1RST05HPiB3aXRoIDxFTT5jaGFyPC9FTT48U1RST05HPl88L1NUUk9ORz48RU0+Y2hlY2s8L0VNPiwgYSAgZnVuY3Rpb24KKyAgICAgICB0byAgdmFsaWRhdGUgaW5wdXQgY2hhcmFjdGVycyBhcyB0aGV5IGFyZSBlbnRlcmVkOyBpdCB3aWxsCisgICAgICAgYmUgcGFzc2VkIHRoZSBjaGFyYWN0ZXIgdG8gYmUgY2hlY2tlZCBhbmQgYSBwb2ludGVyIHRvICBhbgorICAgICAgIGFyZ3VtZW50LWJsb2NrIHN0cnVjdHVyZS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gPFNUUk9ORz5mcmVlX2ZpZWxkdHlwZTwvU1RST05HPiBmcmVlcyB0aGUgc3BhY2UgYWxsb2NhdGVkIGZvcgorICAgICAgIGEgZ2l2ZW4gdmFsaWRhdGlvbiB0eXBlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2ZpZWxkdHlwZV9hcmc8L1NUUk9ORz4gYXNzb2NpYXRlcyAgdGhyZWUgIHN0b3JhZ2UtCisgICAgICAgbWFuYWdlbWVudCAgZnVuY3Rpb25zICB3aXRoICBhICBmaWVsZCAgdHlwZS4gIFRoZSA8RU0+bWFrZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmFyZzwvRU0+CisgICAgICAgZnVuY3Rpb24gaXMgYXV0b21hdGljYWxseSBhcHBsaWVkIHRvIHRoZSBsaXN0IG9mIGFyZ3VtZW50cworICAgICAgIHlvdSAgZ2l2ZSAgPFNUUk9ORz5zZXRfZmllbGRfdHlwZTwvU1RST05HPiAgd2hlbiAgYXR0YWNoaW5nIHZhbGlkYXRpb24gdG8gYQorICAgICAgIGZpZWxkOyBpdHMgam9iIGlzIHRvIGJ1bmRsZSB0aGVzZSBpbnRvIGFuIGFsbG9jYXRlZCAgYXJndS0KKyAgICAgICBtZW50LWJsb2NrICBvYmplY3Qgd2hpY2ggY2FuIGxhdGVyIGJlIHBhc3NlZCB0byB2YWxpZGF0aW9uCisgICAgICAgcHJlZGljYXRlZC4gIFRoZSBvdGhlciB0d28gaG9vayBhcmd1bWVudHMgc2hvdWxkIGNvcHkgIGFuZAorICAgICAgIGZyZWUgIGFyZ3VtZW50LWJsb2NrIHN0cnVjdHVyZXMuICBUaGV5IHdpbGwgYmUgdXNlZCBieSB0aGUKKyAgICAgICBmb3Jtcy1kcml2ZXIgY29kZS4gIFlvdSBtdXN0IHN1cHBseSB0aGUgPEVNPm1ha2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5hcmc8L0VNPiBmdW5jdGlvbiwKKyAgICAgICB0aGUgIG90aGVyIHR3byBhcmUgb3B0aW9uYWwsIHlvdSBtYXkgc3VwcGx5IE5VTEwgZm9yIHRoZW0uCisgICAgICAgSW4gdGhpcyBjYXNlIGl0IGlzIGFzc3VtZWQgdGhhdCA8RU0+bWFrZTwvRU0+PFNUUk9ORz5fPC9TVFJPTkc+PEVNPmFyZzwvRU0+IGRvZXMgbm90IGFsbG9jYXRlCisgICAgICAgbWVtb3J5ICBidXQgc2ltcGx5IGxvYWRzIHRoZSBhcmd1bWVudCBpbnRvIGEgc2luZ2xlIHNjYWxhcgorICAgICAgIHZhbHVlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bGlua19maWVsZHR5cGU8L1NUUk9ORz4gY3JlYXRlcyBhIG5ldyBmaWVsZCB0eXBlICBmcm9tCisgICAgICAgdGhlICB0d28gIGdpdmVuICB0eXBlcy4gICBUaGV5IGFyZSBjb25uZWN0ZWQgYnkgYW4gbG9naWNhbAorICAgICAgICdPUicuCisKKyAgICAgICBUaGUgICBmb3JtICAgIGRyaXZlciAgICByZXF1ZXN0cyAgICA8U1RST05HPlJFUV9ORVhUX0NIT0lDRTwvU1RST05HPiAgICBhbmQKKyAgICAgICA8U1RST05HPlJFUV9QUkVWX0NIT0lDRTwvU1RST05HPiBhc3N1bWUgdGhhdCB0aGUgcG9zc2libGUgdmFsdWVzIG9mIGEgZmllbGQKKyAgICAgICBmb3JtIGFuIG9yZGVyZWQgc2V0LCBhbmQgcHJvdmlkZSB0aGUgZm9ybXMgdXNlciB3aXRoIGEgd2F5CisgICAgICAgdG8gIG1vdmUgIHRocm91Z2ggdGhlIHNldC4gIFRoZSA8U1RST05HPnNldF9maWVsZHR5cGVfY2hvaWNlPC9TVFJPTkc+IGZ1bmMtCisgICAgICAgdGlvbiBhbGxvd3MgZm9ybXMgIHByb2dyYW1tZXJzICB0byAgZGVmaW5lICBzdWNjZXNzb3IgIGFuZAorICAgICAgIHByZWRlY2Vzc29yIGZ1bmN0aW9ucyBmb3IgdGhlIGZpZWxkIHR5cGUuICBUaGVzZSBmdW5jdGlvbnMKKyAgICAgICB0YWtlIHRoZSBmaWVsZCBwb2ludGVyIGFuZCBhbiBhcmd1bWVudC1ibG9jayBzdHJ1Y3R1cmUgIGFzCisgICAgICAgYXJndW1lbnRzLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIHBvaW50ZXItdmFsdWVkICByb3V0aW5lcyAgcmV0dXJuIE5VTEwgb24gZXJyb3IuICBUaGV5CisgICAgICAgc2V0IGVycm5vIGFjY29yZGluZyB0byB0aGVpciBzdWNjZXNzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKworICAgICAgIFRoZSAgaW50ZWdlci12YWx1ZWQgIHJvdXRpbmVzICByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICBjb2RlcyBvbiBlcnJvcjoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisKKyAgICAgICA8U1RST05HPkVfQ1VSUkVOVDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZpZWxkIGlzIHRoZSBjdXJyZW50IGZpZWxkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisgICAgICAgQWxsIG9mIHRoZSA8U1RST05HPihjaGFyPC9TVFJPTkc+IDxTVFJPTkc+Kik8L1NUUk9ORz4gYXJndW1lbnRzIG9mICB0aGVzZSAgZnVuY3Rpb25zICBzaG91bGQKKyAgICAgICBhY3R1YWxseSAgYmUgPFNUUk9ORz4odm9pZDwvU1RST05HPiA8U1RST05HPiopPC9TVFJPTkc+LiAgVGhlIHR5cGUgaGFzIGJlZW4gbGVmdCB1bmNvcnJlY3RlZAorICAgICAgIGZvciBzdHJpY3QgY29tcGF0aWJpbGl0eSB3aXRoIFN5c3RlbSBWLgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fZmllbGR0eXBlLjN4Lmh0bWwiPmZvcm1fZmllbGR0eXBlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1faG9vay4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1faG9vay4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGFhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9ob29rLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1faG9vay4zeCx2IDEuOSAyMDA3LzAyLzI0IDE3OjM0OjE4IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1faG9vayAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1faG9vayAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9ob29rLjN4Lmh0bWwiPmZvcm1faG9vaygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1faG9vazwvU1RST05HPiAtIHNldCBob29rcyBmb3IgYXV0b21hdGljIGludm9jYXRpb24gYnkgYXBwbGljYS0KKyAgICAgICB0aW9ucworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfZmllbGRfaW5pdChGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisgICAgICAgRm9ybV9Ib29rIGZpZWxkX2luaXQoY29uc3QgRk9STSAqZm9ybSk7CisgICAgICAgaW50IHNldF9maWVsZF90ZXJtKEZPUk0gKmZvcm0sIEZvcm1fSG9vayBmdW5jKTsKKyAgICAgICBGb3JtX0hvb2sgZmllbGRfdGVybShjb25zdCBGT1JNICpmb3JtKTsKKyAgICAgICBpbnQgc2V0X2Zvcm1faW5pdChGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisgICAgICAgRm9ybV9Ib29rIGZvcm1faW5pdChjb25zdCBGT1JNICpmb3JtKTsKKyAgICAgICBpbnQgc2V0X2Zvcm1fdGVybShGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisgICAgICAgRm9ybV9Ib29rIGZvcm1fdGVybShjb25zdCBGT1JNICpmb3JtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgbWFrZSBpdCBwb3NzaWJsZSB0byBzZXQgaG9vayBmdW5jdGlvbnMgIHRvCisgICAgICAgYmUgY2FsbGVkIGF0IHZhcmlvdXMgcG9pbnRzIGluIHRoZSBhdXRvbWF0aWMgcHJvY2Vzc2luZyBvZgorICAgICAgIGlucHV0IGV2ZW50IGNvZGVzIGJ5IDxTVFJPTkc+Zm9ybV9kcml2ZXI8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfZmllbGRfaW5pdDwvU1RST05HPiBzZXRzIGEgaG9vayB0byAgYmUgIGNhbGxlZCAgYXQKKyAgICAgICBmb3JtLXBvc3QgIHRpbWUgIGFuZCAgZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCBmaWVsZCBjaGFuZ2VzCisgICAgICAgKGFmdGVyIHRoZSBjaGFuZ2UpLiAgPFNUUk9ORz5maWVsZF9pbml0PC9TVFJPTkc+IHJldHVybnMgdGhlIGN1cnJlbnQgIGZpZWxkCisgICAgICAgaW5pdCBob29rLCBpZiBhbnkgKDxTVFJPTkc+TlVMTDwvU1RST05HPiBpZiB0aGVyZSBpcyBubyBzdWNoIGhvb2spLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfZmllbGRfdGVybTwvU1RST05HPiAgc2V0cyBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0CisgICAgICAgZm9ybS11bnBvc3QgdGltZSBhbmQgZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCBmaWVsZCAgY2hhbmdlcworICAgICAgIChiZWZvcmUgdGhlIGNoYW5nZSkuICA8U1RST05HPmZpZWxkX3Rlcm08L1NUUk9ORz4gcmV0dXJucyB0aGUgY3VycmVudCBmaWVsZAorICAgICAgIHRlcm0gaG9vaywgaWYgYW55ICg8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9mb3JtX2luaXQ8L1NUUk9ORz4gc2V0cyBhIGhvb2sgIHRvICBiZSAgY2FsbGVkICBhdAorICAgICAgIGZvcm0tcG9zdCAgdGltZSAgYW5kICBqdXN0ICBhZnRlciBhIHBhZ2UgY2hhbmdlIG9uY2UgaXQgaXMKKyAgICAgICBwb3N0ZWQuICA8U1RST05HPmZvcm1faW5pdDwvU1RST05HPiByZXR1cm5zIHRoZSBjdXJyZW50IGZvcm0gaW5pdCBob29rLCAgaWYKKyAgICAgICBhbnkgKDxTVFJPTkc+TlVMTDwvU1RST05HPiBpZiB0aGVyZSBpcyBubyBzdWNoIGhvb2spLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfZm9ybV90ZXJtPC9TVFJPTkc+ICBzZXRzICBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0CisgICAgICAgZm9ybS11bnBvc3QgdGltZSBhbmQganVzdCBiZWZvcmUgYSBwYWdlIGNoYW5nZSBvbmNlIGl0ICBpcworICAgICAgIHBvc3RlZC4gICA8U1RST05HPmZvcm1faW5pdDwvU1RST05HPiByZXR1cm5zIHRoZSBjdXJyZW50IGZvcm0gdGVybSBob29rLCBpZgorICAgICAgIGFueSAoPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlmIHRoZXJlIGlzIG5vIHN1Y2ggaG9vaykuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuICBPdGhlcgorICAgICAgIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX2hvb2suM3guaHRtbCI+Zm9ybV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fbmV3LjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9uZXcuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzEzMDEyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fbmV3LjN4Lmh0bWwKQEAgLTAsMCArMSwxMzIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fbmV3LjN4LHYgMS43IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9uZXcgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX25ldyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXcuM3guaHRtbCI+Zm9ybV9uZXcoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX25ldy4zeC5odG1sIj5mb3JtX25ldygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX25ldzwvU1RST05HPiAtIGNyZWF0ZSBhbmQgZGVzdHJveSBmb3JtcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPgorICAgICAgIEZPUk0gKm5ld19mb3JtKEZJRUxEICoqZmllbGRzKTsKKyAgICAgICBpbnQgZnJlZV9mb3JtKEZPUk0gKmZvcm0pOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+bmV3X2Zvcm08L1NUUk9ORz4gIGNyZWF0ZXMgYSBuZXcgZm9ybSBjb25uZWN0ZWQgdG8gYQorICAgICAgIHNwZWNpZmllZCBmaWVsZCBwb2ludGVyIGFycmF5ICh3aGljaCBtdXN0ICBiZSAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+LXRlcm1pLQorICAgICAgIG5hdGVkKS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+ZnJlZV9mb3JtPC9TVFJPTkc+ICBkaXNjb25uZWN0cyAgPEVNPmZvcm08L0VNPiBmcm9tIGl0cyBmaWVsZAorICAgICAgIGFycmF5IGFuZCBmcmVlcyB0aGUgc3RvcmFnZSBhbGxvY2F0ZWQgZm9yIHRoZSBmb3JtLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5uZXdfZm9ybTwvU1RST05HPiByZXR1cm5zICA8U1RST05HPk5VTEw8L1NUUk9ORz4gIG9uICBlcnJvci4gICBJdCAgc2V0cworICAgICAgIGVycm5vIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24ncyBzdWNjZXNzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGEgZm9ybS4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCwgZS5nLiwgbWFsbG9jIGZhaWx1cmUuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5mcmVlX2Zvcm08L1NUUk9ORz4gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX25ldy4zeC5odG1sIj5mb3JtX25ldygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX25ld19wYWdlLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9uZXdfcGFnZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjMzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9uZXdfcGFnZS4zeC5odG1sCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBmb3JtX25ld19wYWdlLjN4LHYgMS44IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9uZXdfcGFnZSAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fbmV3X3BhZ2UgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fbmV3X3BhZ2UuM3guaHRtbCI+Zm9ybV9uZXdfcGFnZSgzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9uZXdfcGFnZS4zeC5odG1sIj5mb3JtX25ld19wYWdlKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fbmV3X3BhZ2U8L1NUUk9ORz4gLSBmb3JtIHBhZ2luYXRpb24gZnVuY3Rpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9uZXdfcGFnZShGSUVMRCAqZmllbGQsIGJvb2wgbmV3X3BhZ2VfZmxhZyk7CisgICAgICAgYm9vbCBuZXdfcGFnZShjb25zdCBGSUVMRCAqZmllbGQpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X25ld19wYWdlPC9TVFJPTkc+ICBzZXRzIG9yIHJlc2V0cyBhIGZsYWcgbWFya2luZworICAgICAgIHRoZSBnaXZlbiBmaWVsZCBhcyB0aGUgYmVnaW5uaW5nIG9mICBhICBuZXcgIHBhZ2UgIG9uICBpdHMKKyAgICAgICBmb3JtLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5uZXdfcGFnZTwvU1RST05HPiAgaXMgIGEgIHByZWRpY2F0ZSB3aGljaCB0ZXN0cyBpZiBhCisgICAgICAgZ2l2ZW4gZmllbGQgbWFya3MgYSBwYWdlIGJlZ2lubmluZyBvbiBpdHMgZm9ybS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bmV3X3BhZ2U8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPlRSVUU8L1NUUk9ORz4gb3IgPFNUUk9ORz5GQUxTRTwvU1RST05HPi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9uZXdfcGFnZTwvU1RST05HPiByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZ2l2ZW4gZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBmb3JtLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvcgorICAgICAgIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX25ld19wYWdlLjN4Lmh0bWwiPmZvcm1fbmV3X3BhZ2UoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9vcHRzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM4NjlhNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX29wdHMuM3guaHRtbApAQCAtMCwwICsxLDEzNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9vcHRzLjN4LHYgMS45IDIwMDcvMDIvMjQgMTc6MzQ6MzYgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9vcHRzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9vcHRzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fb3B0cy4zeC5odG1sIj5mb3JtX29wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9vcHRzPC9TVFJPTkc+IC0gc2V0IGFuZCBnZXQgZm9ybSBvcHRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9mb3JtX29wdHMoRk9STSAqZm9ybSwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKyAgICAgICBpbnQgZm9ybV9vcHRzX29uKEZPUk0gKmZvcm0sIEZpZWxkX09wdGlvbnMgb3B0cyk7CisgICAgICAgaW50IGZvcm1fb3B0c19vZmYoRk9STSAqZm9ybSwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKyAgICAgICBGaWVsZF9PcHRpb25zIGZvcm1fb3B0cyhjb25zdCBGT1JNICpmb3JtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9mb3JtX29wdHM8L1NUUk9ORz4gIHNldHMgIGFsbCAgdGhlICBnaXZlbiBmb3JtJ3MKKyAgICAgICBvcHRpb24gYml0cyAgKGZvcm0gIG9wdGlvbiAgYml0cyAgbWF5ICBiZSAgbG9naWNhbGx5LU9SJ2VkCisgICAgICAgdG9nZXRoZXIpLgorCisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPmZvcm1fb3B0c19vbjwvU1RST05HPiB0dXJucyBvbiB0aGUgZ2l2ZW4gb3B0aW9uIGJpdHMsCisgICAgICAgYW5kIGxlYXZlcyBvdGhlcnMgYWxvbmUuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5mb3JtX29wdHNfb2ZmPC9TVFJPTkc+ICB0dXJucyAgb2ZmICB0aGUgIGdpdmVuICBvcHRpb24KKyAgICAgICBiaXRzLCBhbmQgbGVhdmVzIG90aGVycyBhbG9uZS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+Zm9ybV9vcHRzPC9TVFJPTkc+IHJldHVybnMgdGhlIGZvcm0ncyBjdXJyZW50IG9wdGlvbgorICAgICAgIGJpdHMuCisKKyAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGRlZmluZWQgKGFsbCBhcmUgb24gYnkgZGVmYXVsdCk6CisKKyAgICAgICBPX05MX09WRVJMT0FECisgICAgICAgICAgICBPdmVybG9hZCAgdGhlICA8U1RST05HPlJFUV9ORVdfTElORTwvU1RST05HPiAgZm9ybXMgIGRyaXZlciByZXF1ZXN0IHNvCisgICAgICAgICAgICB0aGF0IGNhbGxpbmcgaXQgYXQgdGhlIGVuZCBvZiBhICBmaWVsZCAgZ29lcyAgdG8gIHRoZQorICAgICAgICAgICAgbmV4dCBmaWVsZC4KKworICAgICAgIE9fQlNfT1ZFUkxPQUQKKyAgICAgICAgICAgIE92ZXJsb2FkICB0aGUgIDxTVFJPTkc+UkVRX0RFTF9QUkVWPC9TVFJPTkc+ICBmb3JtcyAgZHJpdmVyIHJlcXVlc3Qgc28KKyAgICAgICAgICAgIHRoYXQgY2FsbGluZyBpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQgIGdvZXMgIHRvCisgICAgICAgICAgICB0aGUgcHJldmlvdXMgZmllbGQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEV4Y2VwdCBmb3IgPFNUUk9ORz5mb3JtX29wdHM8L1NUUk9ORz4sIGVhY2ggcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sLQorICAgICAgIGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0iZm9ybS4zeC5odG1sIj5mb3JtKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX29wdHMuM3guaHRtbCI+Zm9ybV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fcGFnZS4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fcGFnZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzA3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9wYWdlLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fcGFnZS4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxODo1MjozMiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5mb3JtX3BhZ2UgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX3BhZ2UgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV9wYWdlLjN4Lmh0bWwiPmZvcm1fcGFnZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX3BhZ2U8L1NUUk9ORz4gLSBzZXQgYW5kIGdldCBmb3JtIHBhZ2UgbnVtYmVyCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9jdXJyZW50X2ZpZWxkKEZPUk0gKmZvcm0sIEZJRUxEICpmaWVsZCk7CisgICAgICAgRklFTEQgKmN1cnJlbnRfZmllbGQoY29uc3QgRk9STSAqKTsKKyAgICAgICBpbnQgc2V0X2Zvcm1fcGFnZShGT1JNICpmb3JtLCBpbnQgbik7CisgICAgICAgaW50IGZvcm1fcGFnZShjb25zdCBGT1JNICpmb3JtKTsKKyAgICAgICBpbnQgZmllbGRfaW5kZXgoY29uc3QgRklFTEQgKmZpZWxkKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9jdXJyZW50PC9TVFJPTkc+IDxTVFJPTkc+ZmllbGQ8L1NUUk9ORz4gc2V0cyB0aGUgY3VycmVudCBmaWVsZCBvZgorICAgICAgIHRoZSBnaXZlbiBmb3JtOyA8U1RST05HPmN1cnJlbnRfZmllbGQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgY3VycmVudCBmaWVsZCBvZgorICAgICAgIHRoZSBnaXZlbiBmb3JtLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfZm9ybV9wYWdlPC9TVFJPTkc+ICBzZXRzICB0aGUgZm9ybSdzIHBhZ2UgbnVtYmVyCisgICAgICAgKGdvZXMgdG8gcGFnZSA8RU0+bjwvRU0+IG9mIHRoZSBmb3JtKS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZvcm1fcGFnZTwvU1RST05HPiByZXR1cm5zICB0aGUgIGZvcm0ncyAgY3VycmVudCAgcGFnZQorICAgICAgIG51bWJlci4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmZpZWxkX2luZGV4PC9TVFJPTkc+IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaWVsZCBpbgorICAgICAgIHRoZSBmaWVsZCBhcnJheSBvZiB0aGUgZm9ybSBpdCBpcyBjb25uZWN0ZWQgdG8uIEl0IHJldHVybnMKKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPiAgaWYgIHRoZSAgYXJndW1lbnQgaXMgdGhlIG51bGwgcG9pbnRlciBvciB0aGUgZmllbGQgaXMKKyAgICAgICBub3QgY29ubmVjdGVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgZm9yIDxTVFJPTkc+Zm9ybV9wYWdlPC9TVFJPTkc+LCBlYWNoIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbC0KKyAgICAgICBsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX1NUQVRFPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hLQorICAgICAgICAgICAgdGlvbiBmdW5jdGlvbi4KKworICAgICAgIDxTVFJPTkc+RV9JTlZBTElEX0ZJRUxEPC9TVFJPTkc+CisgICAgICAgICAgICBDb250ZW50cyBvZiBhIGZpZWxkIGFyZSBub3QgdmFsaWQuCisKKyAgICAgICA8U1RST05HPkVfUkVRVUVTVF9ERU5JRUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGRyaXZlciBjb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcGFnZS4zeC5odG1sIj5mb3JtX3BhZ2UoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9wb3N0LjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9wb3N0LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyNWEwYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX3Bvc3QuM3guaHRtbApAQCAtMCwwICsxLDEzNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9wb3N0LjN4LHYgMS43IDIwMDYvMTEvMDQgMTg6NTM6MjAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+Zm9ybV9wb3N0IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV9wb3N0IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX3Bvc3QuM3guaHRtbCI+Zm9ybV9wb3N0KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcG9zdC4zeC5odG1sIj5mb3JtX3Bvc3QoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9wb3N0PC9TVFJPTkc+ICAtICB3cml0ZSBvciBlcmFzZSBmb3JtcyBmcm9tIGFzc29jaWF0ZWQgc3Vid2luLQorICAgICAgIGRvd3MKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgcG9zdF9mb3JtKEZPUk0gKmZvcm0pOworICAgICAgIGludCB1bnBvc3RfZm9ybShGT1JNICpmb3JtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5wb3N0X2Zvcm08L1NUUk9ORz4gZGlzcGxheXMgYSBmb3JtIHRvICBpdHMgIGFzc29jaWF0ZWQKKyAgICAgICBzdWJ3aW5kb3cuICAgVG8gdHJpZ2dlciBwaHlzaWNhbCBkaXNwbGF5IG9mIHRoZSBzdWJ3aW5kb3csCisgICAgICAgdXNlICA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4gIG9yICBzb21lICBlcXVpdmFsZW50ICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgcm91dGluZSAgICh0aGUKKyAgICAgICBpbXBsaWNpdCAgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiAgdHJpZ2dlcmVkICBieSAgYW4gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gaW5wdXQgcmVxdWVzdAorICAgICAgIHdpbGwgZG8pLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+dW5wb3N0X2Zvcm08L1NUUk9ORz4gZXJhc2VzIGZvcm0gZnJvbSAgaXRzICBhc3NvY2lhdGVkCisgICAgICAgc3Vid2luZG93LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX1NUQVRFPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hLQorICAgICAgICAgICAgdGlvbiBmdW5jdGlvbi4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBoYXMgbm90IGJlZW4gcG9zdGVkLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGZvcm0uCisKKyAgICAgICA8U1RST05HPkVfTk9fUk9PTTwvU1RST05HPgorICAgICAgICAgICAgRm9ybSBpcyB0b28gbGFyZ2UgZm9yIGl0cyB3aW5kb3cuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJmb3JtLjN4Lmh0bWwiPmZvcm0oM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcG9zdC4zeC5odG1sIj5mb3JtX3Bvc3QoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV9yZXF1ZXN0bmFtZS4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBjMmJkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3guaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV9yZXF1ZXN0bmFtZS4zeCx2IDEuNyAyMDA2LzExLzA0IDE3OjU3OjQ5IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fcmVxdWVzdG5hbWUgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5mb3JtX3JlcXVlc3RuYW1lIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJmb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwiPmZvcm1fcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fcmVxdWVzdG5hbWUuM3guaHRtbCI+Zm9ybV9yZXF1ZXN0bmFtZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5mb3JtX3JlcXVlc3RuYW1lPC9TVFJPTkc+IC0gaGFuZGxlIHByaW50YWJsZSBmb3JtIHJlcXVlc3QgbmFtZXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBjb25zdCBjaGFyICpmb3JtX3JlcXVlc3RfbmFtZShpbnQgcmVxdWVzdCk7CisgICAgICAgaW50IGZvcm1fcmVxdWVzdF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gPFNUUk9ORz5mb3JtX3JlcXVlc3RfbmFtZTwvU1RST05HPiByZXR1cm5zIHRoZSBwcmludGFibGUgbmFtZQorICAgICAgIG9mIGEgZm9ybSByZXF1ZXN0IGNvZGUuCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+Zm9ybV9yZXF1ZXN0X2J5X25hbWU8L1NUUk9ORz4gc2VhcmNoZXMgaW4gdGhlIG5hbWUtdGEtCisgICAgICAgYmxlICBmb3IgIGEgIHJlcXVlc3QgIHdpdGggIHRoZSBnaXZlbiBuYW1lIGFuZCByZXR1cm5zIGl0cworICAgICAgIHJlcXVlc3QgY29kZS4gT3RoZXJ3aXNlIEVfTk9fTUFUQ0ggaXMgcmV0dXJuZWQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV9yZXF1ZXN0X25hbWU8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IgYW5kIHNldHMgZXJybm8gIHRvCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPi4KKyAgICAgICA8U1RST05HPmZvcm1fcmVxdWVzdF9ieV9uYW1lPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5FX05PX01BVENIPC9TVFJPTkc+IG9uIGVycm9yLiAgSXQgZG9lcworICAgICAgIG5vdCBzZXQgZXJybm8uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgYXJlICBzcGVjaWZpYyAgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3QKKyAgICAgICBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtICBWICBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgSXQgIGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uLQorICAgICAgIGRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3JlcXVlc3RuYW1lLjN4Lmh0bWwiPmZvcm1fcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV91c2VycHRyLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhNTBmZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9mb3JtX3VzZXJwdHIuM3guaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogZm9ybV91c2VycHRyLjN4LHYgMS4xMSAyMDA2LzExLzA0IDE4OjQzOjI0IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fdXNlcnB0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmZvcm1fdXNlcnB0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0iZm9ybV91c2VycHRyLjN4Lmh0bWwiPmZvcm1fdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmZvcm1fdXNlcnB0cjwvU1RST05HPiAtIGFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggYSBmb3JtIGl0ZW0KKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2Zvcm0uaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2Zvcm1fdXNlcnB0cihGT1JNICpmb3JtLCB2b2lkICp1c2VycHRyKTsKKyAgICAgICB2b2lkKiBmb3JtX3VzZXJwdHIoY29uc3QgRk9STSAqZm9ybSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgRXZlcnkgZm9ybSBhbmQgZXZlcnkgZm9ybSBpdGVtIGhhcyBhICBmaWVsZCAgdGhhdCAgY2FuICBiZQorICAgICAgIHVzZWQgdG8gaG9sZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBkYXRhICh0aGF0IGlzLCB0aGUgZm9ybS0KKyAgICAgICBkcml2ZXIgY29kZSBsZWF2ZXMgaXQgYWxvbmUpLiAgVGhlc2UgZnVuY3Rpb25zIGdldCBhbmQgc2V0CisgICAgICAgdGhlIGZvcm0gdXNlciBwb2ludGVyIGZpZWxkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+Zm9ybV91c2VycHRyPC9TVFJPTkc+IHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgYmUKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X2Zvcm1fdXNlcnB0cjwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+RV9PSzwvU1RST05HPiAoc3VjY2VzcykuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworICAgICAgIFRoZSB1c2VyIHBvaW50ZXIgaXMgYSB2b2lkIHBvaW50ZXIuICBXZSBjaG9zZSBub3QgdG8gbGVhdmUKKyAgICAgICBpdCBhcyBhIGNoYXIgcG9pbnRlciBmb3IgU1ZyNCBjb21wYXRpYmlsaXR5LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJmb3JtX3VzZXJwdHIuM3guaHRtbCI+Zm9ybV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fd2luLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vZm9ybV93aW4uM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDIxM2RmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2Zvcm1fd2luLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGZvcm1fd2luLjN4LHYgMS4xMCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmZvcm1fd2luIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+Zm9ybV93aW4gM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImZvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZm9ybV93aW4uM3guaHRtbCI+Zm9ybV93aW4oM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Zm9ybV93aW48L1NUUk9ORz4gIC0gbWFrZSBhbmQgYnJlYWsgZm9ybSB3aW5kb3cgYW5kIHN1YndpbmRvdyBhc3NvLQorICAgICAgIGNpYXRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9mb3JtX3dpbihGT1JNICpmb3JtLCBXSU5ET1cgKndpbik7CisgICAgICAgV0lORE9XICpmb3JtX3dpbihjb25zdCBGT1JNICpmb3JtKTsKKyAgICAgICBpbnQgc2V0X2Zvcm1fc3ViKEZPUk0gKmZvcm0sIFdJTkRPVyAqc3ViKTsKKyAgICAgICBXSU5ET1cgKmZvcm1fc3ViKGNvbnN0IEZPUk0gKmZvcm0pOworICAgICAgIGludCBzY2FsZV9mb3JtKGNvbnN0IEZPUk0gKmZvcm0sIGludCAqcm93cywgaW50ICpjb2x1bW5zKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBFdmVyeSAgZm9ybSBoYXMgYW4gYXNzb2NpYXRlZCBwYWlyIG9mIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHdpbmRvd3MuICBUaGUKKyAgICAgICBmb3JtIHdpbmRvdyBkaXNwbGF5cyBhbnkgdGl0bGUgYW5kIGJvcmRlciBhc3NvY2lhdGVkICB3aXRoCisgICAgICAgdGhlICB3aW5kb3c7ICB0aGUgZm9ybSBzdWJ3aW5kb3cgZGlzcGxheXMgdGhlIGl0ZW1zIG9mIHRoZQorICAgICAgIGZvcm0gdGhhdCBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLgorCisgICAgICAgVGhlIGZpcnN0IGZvdXIgZnVuY3Rpb25zIGdldCBhbmQgc2V0IHRob3NlIHdpbmRvd3MuICBJdCBpcworICAgICAgIG5vdCBuZWNlc3NhcnkgdG8gc2V0IGVpdGhlciB3aW5kb3c7IGJ5IGRlZmF1bHQsIHRoZSBkcml2ZXIKKyAgICAgICBjb2RlIHVzZXMgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4gZm9yIGJvdGguCisKKyAgICAgICBJbiB0aGUgPFNUUk9ORz5zZXRfPC9TVFJPTkc+IGZ1bmN0aW9ucywgd2luZG93IGFyZ3VtZW50IG9mIDxTVFJPTkc+TlVMTDwvU1RST05HPiBpcyAgdHJlYXRlZAorICAgICAgIGFzICB0aG91Z2ggIGl0ICB3ZXJlICA8U1RST05HPnN0c2RjcjwvU1RST05HPi4gICBBIGZvcm0gYXJndW1lbnQgb2YgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlzCisgICAgICAgdHJlYXRlZCBhcyBhIHJlcXVlc3QgdG8gY2hhbmdlICB0aGUgIHN5c3RlbSAgZGVmYXVsdCAgZm9ybQorICAgICAgIHdpbmRvdyBvciBzdWJ3aW5kb3cuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+c2NhbGVfZm9ybTwvU1RST05HPiByZXR1cm5zIHRoZSBtaW5pbXVtIHNpemUgcmVxdWlyZWQKKyAgICAgICBmb3IgdGhlIHN1YndpbmRvdyBvZiA8RU0+Zm9ybTwvRU0+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLiAgIFJvdS0KKyAgICAgICB0aW5lcyAgdGhhdCAgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgICAgICAgZXJyb3IgY29kZXM6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGZvcm0uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9ImZvcm0uM3guaHRtbCI+Zm9ybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDtmb3JtLmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zICBsaWJyYXJ5LiAgIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImZvcm1fd2luLjN4Lmh0bWwiPmZvcm1fd2luKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2luZGV4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGIzYTZkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAzLjAvL0VOIj4KKzwhLS0KKyAgJElkOiBpbmRleC5odG1sLHYgMS4zIDIwMDYvMTIvMjQgMjM6MDU6MzUgdG9tIEV4cCAkCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIC0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5OQ1VSU0VTIC0gTWFudWFsIFBhZ2VzPC9USVRMRT4KKzxMSU5LIFJFVj1NQURFIEhSRUY9Im1haWx0bzpkaWNrZXlAaW52aXNpYmxlLWlzbGFuZC5uZXQiPgorPC9IRUFEPgorPEJPRFk+Cis8SFI+Cis8dWw+Cis8bGk+UHJvZ3JhbXM6Cis8dWw+Cis8bGk+PGEgaHJlZiA9ICJjYXB0b2luZm8uMW0uaHRtbCI+Y2FwdG9pbmZvIC0gY29udmVydCBhIHRlcm1jYXAgZGVzY3JpcHRpb24gaW50byBhIHRlcm1pbmZvIGRlc2NyaXB0aW9uPC9hPgorPGxpPjxhIGhyZWYgPSAiY2xlYXIuMS5odG1sIj5jbGVhciAtIGNsZWFyIHRoZSB0ZXJtaW5hbCBzY3JlZW48L2E+Cis8bGk+PGEgaHJlZiA9ICJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAgLSBjb21wYXJlIG9yIHByaW50IG91dCB0ZXJtaW5mbyBkZXNjcmlwdGlvbnM8L2E+Cis8bGk+PGEgaHJlZiA9ICJpbmZvdG9jYXAuMW0uaHRtbCI+aW5mb3RvY2FwIC0gY29udmVydCBhIHRlcm1pbmZvIGRlc2NyaXB0aW9uIGludG8gYSB0ZXJtY2FwIGRlc2NyaXB0aW9uPC9hPgorPGxpPjxhIGhyZWYgPSAidGljLjFtLmh0bWwiPnRpYyAtIHRoZSB0ZXJtaW5mbyBlbnRyeS1kZXNjcmlwdGlvbiBjb21waWxlcjwvYT4KKzxsaT48YSBocmVmID0gInRvZS4xbS5odG1sIj50b2UgLSB0YWJsZSBvZiAodGVybWluZm8pIGVudHJpZXM8L2E+Cis8bGk+PGEgaHJlZiA9ICJ0cHV0LjEuaHRtbCI+dHB1dCAtICBpbml0aWFsaXplICBhICB0ZXJtaW5hbCBvciBxdWVyeSB0ZXJtaW5mbyBkYXRhYmFzZTwvYT4KKzxsaT48YSBocmVmID0gInRzZXQuMS5odG1sIj50c2V0IC0gdGVybWluYWwgaW5pdGlhbGl6YXRpb248L2E+Cis8L3VsPgorPGxpPkxpYnJhcmllczoKKzx1bD4KKzxsaT48YSBocmVmID0gIm5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcyAtIENSVCBzY3JlZW4gaGFuZGxpbmcgYW5kIG9wdGltaXphdGlvbiBwYWNrYWdlPC9hPgorPGxpPjxhIGhyZWYgPSAicGFuZWwuM3guaHRtbCI+cGFuZWwtIHBhbmVsIHN0YWNrIGV4dGVuc2lvbiBmb3IgY3Vyc2VzPC9hPgorPGxpPjxhIGhyZWYgPSAiZm9ybS4zeC5odG1sIj5mb3JtIC0gY3Vyc2VzIGV4dGVuc2lvbiBmb3IgcHJvZ3JhbW1pbmcgZm9ybXM8L2E+Cis8bGk+PGEgaHJlZiA9ICJtZW51LjN4Lmh0bWwiPm1lbnUgLSBjdXJzZXMgZXh0ZW5zaW9uIGZvciBwcm9ncmFtbWluZyBtZW51czwvYT4KKzwvdWw+Cis8bGk+RmlsZSBmb3JtYXRzOgorPHVsPgorPGxpPjxhIGhyZWYgPSAidGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyAtIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YSBiYXNlPC9hPgorPGxpPjxhIGhyZWYgPSAidGVybS41Lmh0bWwiPnRlcm0gLSBmb3JtYXQgb2YgY29tcGlsZWQgdGVybSBmaWxlLjwvYT4KKzxsaT48YSBocmVmID0gInRlcm0uNy5odG1sIj50ZXJtIC0gY29udmVudGlvbnMgZm9yIG5hbWluZyB0ZXJtaW5hbCB0eXBlczwvYT4KKzwvdWw+Cis8L3VsPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2luZm9jbXAuMW0uaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9pbmZvY21wLjFtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2MzU1NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9pbmZvY21wLjFtLmh0bWwKQEAgLTAsMCArMSw0NDQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IGluZm9jbXAuMW0sdiAxLjQ0IDIwMDYvMTIvMjQgMTg6MTY6MzEgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+aW5mb2NtcCAxbTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPmluZm9jbXAgMW08L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImluZm9jbXAuMW0uaHRtbCI+aW5mb2NtcCgxbSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wKDFtKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gLSBjb21wYXJlIG9yIHByaW50IG91dCA8RU0+dGVybWluZm88L0VNPiBkZXNjcmlwdGlvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gWzxTVFJPTkc+LTFDRUZHSUxUVVZjZGVnaWxucHFydHV4PC9TVFJPTkc+XQorICAgICAgICAgICAgIFs8U1RST05HPi12PC9TVFJPTkc+IDxFTT5uPC9FTT5dIFs8U1RST05HPi1zPC9TVFJPTkc+IDxTVFJPTkc+ZDwvU1RST05HPnwgPFNUUk9ORz5pPC9TVFJPTkc+fCA8U1RST05HPmw8L1NUUk9ORz58IDxTVFJPTkc+YzwvU1RST05HPl0gWzxTVFJPTkc+LVI8L1NUUk9ORz4gPFNUUk9ORz5zdWJzZXQ8L1NUUk9ORz5dCisgICAgICAgICAgICAgWzxTVFJPTkc+LXc8L1NUUk9ORz4gPEVNPndpZHRoPC9FTT5dIFs8U1RST05HPi1BPC9TVFJPTkc+IDxFTT5kaXJlY3Rvcnk8L0VNPl0gWzxTVFJPTkc+LUI8L1NUUk9ORz4gPEVNPmRpcmVjdG9yeTwvRU0+XQorICAgICAgICAgICAgIFs8RU0+dGVybW5hbWU8L0VNPi4uLl0KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gIGNhbiAgYmUgIHVzZWQgIHRvIGNvbXBhcmUgYSBiaW5hcnkgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBlbnRyeQorICAgICAgIHdpdGggb3RoZXIgdGVybWluZm8gZW50cmllcywgcmV3cml0ZSBhICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICBkZXNjcmlwLQorICAgICAgIHRpb24gIHRvICB0YWtlICBhZHZhbnRhZ2UgIG9mICB0aGUgPFNUUk9ORz51c2U9PC9TVFJPTkc+IHRlcm1pbmZvIGZpZWxkLCBvcgorICAgICAgIHByaW50IG91dCBhIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gIGRlc2NyaXB0aW9uICBmcm9tICB0aGUgIGJpbmFyeSAgZmlsZQorICAgICAgICg8U1RST05HPnRlcm08L1NUUk9ORz4pIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLiAgSW4gYWxsIGNhc2VzLCB0aGUgYm9vbGVhbgorICAgICAgIGZpZWxkcyB3aWxsIGJlIHByaW50ZWQgIGZpcnN0LCAgZm9sbG93ZWQgIGJ5ICB0aGUgIG51bWVyaWMKKyAgICAgICBmaWVsZHMsIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmcgZmllbGRzLgorCisgICA8U1RST05HPkRlZmF1bHQ8L1NUUk9ORz4gPFNUUk9ORz5PcHRpb25zPC9TVFJPTkc+CisgICAgICAgSWYgIG5vIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBhbmQgemVybyBvciBvbmUgPEVNPnRlcm1uYW1lczwvRU0+IGFyZQorICAgICAgIHNwZWNpZmllZCwgdGhlIDxTVFJPTkc+LUk8L1NUUk9ORz4gb3B0aW9uIHdpbGwgYmUgYXNzdW1lZC4gICBJZiAgbW9yZSAgdGhhbgorICAgICAgIG9uZSAgPEVNPnRlcm1uYW1lPC9FTT4gaXMgc3BlY2lmaWVkLCB0aGUgPFNUUk9ORz4tZDwvU1RST05HPiBvcHRpb24gd2lsbCBiZSBhc3N1bWVkLgorCisgICA8U1RST05HPkNvbXBhcmlzb248L1NUUk9ORz4gPFNUUk9ORz5PcHRpb25zPC9TVFJPTkc+IDxTVFJPTkc+Wy1kXTwvU1RST05HPiA8U1RST05HPlstY108L1NUUk9ORz4gPFNUUk9ORz5bLW5dPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IGNvbXBhcmVzIHRoZSA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICBkZXNjcmlwdGlvbiAgb2YgIHRoZSAgZmlyc3QKKyAgICAgICB0ZXJtaW5hbCAgPEVNPnRlcm1uYW1lPC9FTT4gIHdpdGggZWFjaCBvZiB0aGUgZGVzY3JpcHRpb25zIGdpdmVuIGJ5CisgICAgICAgdGhlIGVudHJpZXMgZm9yIHRoZSAgb3RoZXIgIHRlcm1pbmFsJ3MgIDxFTT50ZXJtbmFtZXM8L0VNPi4gICBJZiAgYQorICAgICAgIGNhcGFiaWxpdHkgIGlzICBkZWZpbmVkIGZvciBvbmx5IG9uZSBvZiB0aGUgdGVybWluYWxzLCB0aGUKKyAgICAgICB2YWx1ZSByZXR1cm5lZCB3aWxsIGRlcGVuZCBvbiB0aGUgdHlwZSBvZiB0aGUgIGNhcGFiaWxpdHk6CisgICAgICAgPFNUUk9ORz5GPC9TVFJPTkc+ICBmb3IgIGJvb2xlYW4gIHZhcmlhYmxlcywgIDxTVFJPTkc+LTE8L1NUUk9ORz4gZm9yIGludGVnZXIgdmFyaWFibGVzLCBhbmQKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4gZm9yIHN0cmluZyB2YXJpYWJsZXMuCisKKyAgICAgICBUaGUgPFNUUk9ORz4tZDwvU1RST05HPiBvcHRpb24gcHJvZHVjZXMgYSBsaXN0IG9mIGVhY2ggY2FwYWJpbGl0eSAgdGhhdCAgaXMKKyAgICAgICBkaWZmZXJlbnQgIGJldHdlZW4gIHR3byBlbnRyaWVzLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHRvCisgICAgICAgc2hvdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBlbnRyaWVzLCBjcmVhdGVkICBieSAgZGlmLQorICAgICAgIGZlcmVudCBwZW9wbGUsIGZvciB0aGUgc2FtZSBvciBzaW1pbGFyIHRlcm1pbmFscy4KKworICAgICAgIFRoZSAgPFNUUk9ORz4tYzwvU1RST05HPiAgb3B0aW9uIHByb2R1Y2VzIGEgbGlzdCBvZiBlYWNoIGNhcGFiaWxpdHkgdGhhdCBpcworICAgICAgIGNvbW1vbiBiZXR3ZWVuIHR3byBlbnRyaWVzLiAgQ2FwYWJpbGl0aWVzIHRoYXQgYXJlIG5vdCBzZXQKKyAgICAgICBhcmUgIGlnbm9yZWQuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhcyBhIHF1aWNrIGNoZWNrIHRvCisgICAgICAgc2VlIGlmIHRoZSA8U1RST05HPi11PC9TVFJPTkc+IG9wdGlvbiBpcyB3b3J0aCB1c2luZy4KKworICAgICAgIFRoZSA8U1RST05HPi1uPC9TVFJPTkc+IG9wdGlvbiBwcm9kdWNlcyBhIGxpc3Qgb2YgZWFjaCBjYXBhYmlsaXR5ICB0aGF0ICBpcworICAgICAgIGluIG5laXRoZXIgZW50cnkuICBJZiBubyA8RU0+dGVybW5hbWVzPC9FTT4gYXJlIGdpdmVuLCB0aGUgZW52aXJvbi0KKyAgICAgICBtZW50IHZhcmlhYmxlIDxTVFJPTkc+VEVSTTwvU1RST05HPiB3aWxsIGJlIHVzZWQgZm9yIGJvdGggb2YgdGhlIDxFTT50ZXJtbmFtZXM8L0VNPi4KKyAgICAgICBUaGlzICBjYW4gIGJlIHVzZWQgYXMgYSBxdWljayBjaGVjayB0byBzZWUgaWYgYW55dGhpbmcgd2FzCisgICAgICAgbGVmdCBvdXQgb2YgYSBkZXNjcmlwdGlvbi4KKworICAgPFNUUk9ORz5Tb3VyY2U8L1NUUk9ORz4gPFNUUk9ORz5MaXN0aW5nPC9TVFJPTkc+IDxTVFJPTkc+T3B0aW9uczwvU1RST05HPiA8U1RST05HPlstSV08L1NUUk9ORz4gPFNUUk9ORz5bLUxdPC9TVFJPTkc+IDxTVFJPTkc+Wy1DXTwvU1RST05HPiA8U1RST05HPlstcl08L1NUUk9ORz4KKyAgICAgICBUaGUgPFNUUk9ORz4tSTwvU1RST05HPiwgPFNUUk9ORz4tTDwvU1RST05HPiwgYW5kIDxTVFJPTkc+LUM8L1NUUk9ORz4gb3B0aW9ucyB3aWxsIHByb2R1Y2UgYSAgc291cmNlICBsaXN0aW5nCisgICAgICAgZm9yIGVhY2ggdGVybWluYWwgbmFtZWQuCisKKyAgICAgIDxTVFJPTkc+LUk8L1NUUk9ORz4gICB1c2UgdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gbmFtZXMKKyAgICAgIDxTVFJPTkc+LUw8L1NUUk9ORz4gICB1c2UgdGhlIGxvbmcgQyB2YXJpYWJsZSBuYW1lIGxpc3RlZCBpbiAmbHQ7PFNUUk9ORz50ZXJtLmg8L1NUUk9ORz4mZ3Q7CisgICAgICA8U1RST05HPi1DPC9TVFJPTkc+ICAgdXNlIHRoZSA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gbmFtZXMKKyAgICAgIDxTVFJPTkc+LXI8L1NUUk9ORz4gICB3aGVuIHVzaW5nIDxTVFJPTkc+LUM8L1NUUk9ORz4sIHB1dCBvdXQgYWxsIGNhcGFiaWxpdGllcyBpbiA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gZm9ybQorCisgICAgICAgSWYgIG5vICA8RU0+dGVybW5hbWVzPC9FTT4gYXJlIGdpdmVuLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+CisgICAgICAgd2lsbCBiZSB1c2VkIGZvciB0aGUgdGVybWluYWwgbmFtZS4KKworICAgICAgIFRoZSBzb3VyY2UgcHJvZHVjZWQgYnkgdGhlIDxTVFJPTkc+LUM8L1NUUk9ORz4gb3B0aW9uIG1heSBiZSB1c2VkICBkaXJlY3RseQorICAgICAgIGFzICBhIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiBlbnRyeSwgYnV0IG5vdCBhbGwgcGFyYW1ldGVyaXplZCBzdHJpbmdzIGNhbgorICAgICAgIGJlIGNoYW5nZWQgdG8gdGhlIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiBmb3JtYXQuICA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gd2lsbCBhdHRlbXB0IHRvCisgICAgICAgY29udmVydCAgbW9zdCAgb2YgIHRoZSBwYXJhbWV0ZXJpemVkIGluZm9ybWF0aW9uLCBhbmQgYW55LQorICAgICAgIHRoaW5nIG5vdCBjb252ZXJ0ZWQgd2lsbCBiZSBwbGFpbmx5IG1hcmtlZCBpbiAgdGhlICBvdXRwdXQKKyAgICAgICBhbmQgY29tbWVudGVkIG91dC4gIFRoZXNlIHNob3VsZCBiZSBlZGl0ZWQgYnkgaGFuZC4KKworICAgICAgIEFsbCAgcGFkZGluZyAgaW5mb3JtYXRpb24gIGZvciAgc3RyaW5ncyAgd2lsbCBiZSBjb2xsZWN0ZWQKKyAgICAgICB0b2dldGhlciBhbmQgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlICBzdHJpbmcgIHdoZXJlCisgICAgICAgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+ICBleHBlY3RzICBpdC4gIE1hbmRhdG9yeSBwYWRkaW5nIChwYWRkaW5nIGluZm9ybWEtCisgICAgICAgdGlvbiB3aXRoIGEgdHJhaWxpbmcgJy8nKSB3aWxsIGJlY29tZSBvcHRpb25hbC4KKworICAgICAgIEFsbCA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gdmFyaWFibGVzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiwgYnV0CisgICAgICAgd2hpY2ggYXJlIGRlcml2YWJsZSBmcm9tIG90aGVyIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gdmFyaWFibGVzLCB3aWxsIGJlCisgICAgICAgb3V0cHV0LiAgTm90IGFsbCA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGNhcGFiaWxpdGllcyB3aWxsIGJlIHRyYW5zbGF0ZWQ7CisgICAgICAgb25seSAgdGhvc2UgdmFyaWFibGVzIHdoaWNoIHdlcmUgcGFydCBvZiA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gd2lsbCBub3ItCisgICAgICAgbWFsbHkgYmUgb3V0cHV0LiAgU3BlY2lmeWluZyB0aGUgPFNUUk9ORz4tcjwvU1RST05HPiBvcHRpb24gd2lsbCAgdGFrZSAgb2ZmCisgICAgICAgdGhpcyAgcmVzdHJpY3Rpb24sICBhbGxvd2luZyBhbGwgY2FwYWJpbGl0aWVzIHRvIGJlIG91dHB1dAorICAgICAgIGluIDxFTT50ZXJtY2FwPC9FTT4gZm9ybS4KKworICAgICAgIE5vdGUgdGhhdCBiZWNhdXNlIHBhZGRpbmcgaXMgY29sbGVjdGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKKyAgICAgICB0aGUgIGNhcGFiaWxpdHksICBub3QgYWxsIGNhcGFiaWxpdGllcyBhcmUgb3V0cHV0LiAgTWFuZGEtCisgICAgICAgdG9yeSBwYWRkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuICAgQmVjYXVzZSAgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+ICBzdHJpbmdzCisgICAgICAgYXJlICBub3QgYXMgZmxleGlibGUsIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gY29udmVydAorICAgICAgIGEgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBzdHJpbmcgY2FwYWJpbGl0eSBpbnRvICBhbiAgZXF1aXZhbGVudCAgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+CisgICAgICAgZm9ybWF0LiAgIEEgc3Vic2VxdWVudCBjb252ZXJzaW9uIG9mIHRoZSA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gZmlsZSBiYWNrCisgICAgICAgaW50byA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGZvcm1hdCB3aWxsIG5vdCAgbmVjZXNzYXJpbHkgIHJlcHJvZHVjZSAgdGhlCisgICAgICAgb3JpZ2luYWwgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBzb3VyY2UuCisKKyAgICAgICBTb21lICBjb21tb24gIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gIHBhcmFtZXRlciBzZXF1ZW5jZXMsIHRoZWlyIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPgorICAgICAgIGVxdWl2YWxlbnRzLCBhbmQgc29tZSB0ZXJtaW5hbCB0eXBlcyB3aGljaCAgY29tbW9ubHkgIGhhdmUKKyAgICAgICBzdWNoIHNlcXVlbmNlcywgYXJlOgorCisgICAgIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiAgIFJlcHJlc2VudGF0aXZlIFRlcm1pbmFscworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgPFNUUk9ORz4lcDElYzwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz4lLjwvU1RST05HPiAgICAgICAgYWRtCisgICAgIDxTVFJPTkc+JXAxJWQ8L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+JWQ8L1NUUk9ORz4gICAgICAgIGhwLCBBTlNJIHN0YW5kYXJkLCB2dDEwMAorICAgICA8U1RST05HPiVwMSUneCclKyVjPC9TVFJPTkc+ICAgICAgICAgICAgICAgICA8U1RST05HPiUreDwvU1RST05HPiAgICAgICBjb25jZXB0CisgICAgIDxTVFJPTkc+JWk8L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+JWk8L1NUUk9ORz5xICAgICAgIEFOU0kgc3RhbmRhcmQsIHZ0MTAwCisgICAgIDxTVFJPTkc+JXAxJT8lJ3gnJSZndDsldCVwMSUneSclKyU7PC9TVFJPTkc+ICAgIDxTVFJPTkc+JSZndDt4eTwvU1RST05HPiAgICAgIGNvbmNlcHQKKyAgICAgPFNUUk9ORz4lcDI8L1NUUk9ORz4gaXMgcHJpbnRlZCBiZWZvcmUgPFNUUk9ORz4lcDE8L1NUUk9ORz4gICA8U1RST05HPiVyPC9TVFJPTkc+ICAgICAgICBocAorCisgICA8U1RST05HPlVzZT08L1NUUk9ORz4gPFNUUk9ORz5PcHRpb248L1NUUk9ORz4gPFNUUk9ORz5bLXVdPC9TVFJPTkc+CisgICAgICAgVGhlICA8U1RST05HPi11PC9TVFJPTkc+ICBvcHRpb24gIHByb2R1Y2VzIGEgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBzb3VyY2UgZGVzY3JpcHRpb24gb2YKKyAgICAgICB0aGUgZmlyc3QgdGVybWluYWwgPEVNPnRlcm1uYW1lPC9FTT4gd2hpY2ggaXMgcmVsYXRpdmUgdG8gIHRoZSAgc3VtCisgICAgICAgb2YgIHRoZSAgZGVzY3JpcHRpb25zICBnaXZlbiAgYnkgdGhlIGVudHJpZXMgZm9yIHRoZSBvdGhlcgorICAgICAgIHRlcm1pbmFscyA8RU0+dGVybW5hbWVzPC9FTT4uICBJdCBkb2VzIHRoaXMgYnkgYW5hbHl6aW5nICB0aGUgIGRpZi0KKyAgICAgICBmZXJlbmNlcyAgIGJldHdlZW4gICB0aGUgIGZpcnN0ICA8RU0+dGVybW5hbWU8L0VNPiAgYW5kICB0aGUgIG90aGVyCisgICAgICAgPEVNPnRlcm1uYW1lczwvRU0+IGFuZCBwcm9kdWNpbmcgYSBkZXNjcmlwdGlvbiB3aXRoIDxTVFJPTkc+dXNlPTwvU1RST05HPiBmaWVsZHMgZm9yCisgICAgICAgdGhlICBvdGhlciAgdGVybWluYWxzLiAgIEluIHRoaXMgbWFubmVyLCBpdCBpcyBwb3NzaWJsZSB0bworICAgICAgIHJldHJvZml0ICBnZW5lcmljICB0ZXJtaW5mbyAgZW50cmllcyAgaW50byAgYSAgIHRlcm1pbmFsJ3MKKyAgICAgICBkZXNjcmlwdGlvbi4gIE9yLCBpZiB0d28gc2ltaWxhciB0ZXJtaW5hbHMgZXhpc3QsIGJ1dCB3ZXJlCisgICAgICAgY29kZWQgYXQgZGlmZmVyZW50IHRpbWVzIG9yIGJ5IGRpZmZlcmVudCAgcGVvcGxlICBzbyAgdGhhdAorICAgICAgIGVhY2ggZGVzY3JpcHRpb24gaXMgYSBmdWxsIGRlc2NyaXB0aW9uLCB1c2luZyA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gd2lsbAorICAgICAgIHNob3cgd2hhdCBjYW4gYmUgZG9uZSB0byBjaGFuZ2Ugb25lIGRlc2NyaXB0aW9uIHRvIGJlIHJlbC0KKyAgICAgICBhdGl2ZSB0byB0aGUgb3RoZXIuCisKKyAgICAgICBBIGNhcGFiaWxpdHkgd2lsbCBnZXQgcHJpbnRlZCB3aXRoIGFuIGF0LXNpZ24gKEApIGlmIGl0IG5vCisgICAgICAgbG9uZ2VyIGV4aXN0cyBpbiB0aGUgZmlyc3QgPEVNPnRlcm1uYW1lPC9FTT4sIGJ1dCBvbmUgb2YgdGhlICBvdGhlcgorICAgICAgIDxFTT50ZXJtbmFtZTwvRU0+ICBlbnRyaWVzIGNvbnRhaW5zIGEgdmFsdWUgZm9yIGl0LiAgQSBjYXBhYmlsaXR5J3MKKyAgICAgICB2YWx1ZSBnZXRzIHByaW50ZWQgaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCAgPEVNPnRlcm1uYW1lPC9FTT4gIGlzCisgICAgICAgbm90ICBmb3VuZCBpbiBhbnkgb2YgdGhlIG90aGVyIDxFTT50ZXJtbmFtZTwvRU0+IGVudHJpZXMsIG9yIGlmIHRoZQorICAgICAgIGZpcnN0IG9mIHRoZSBvdGhlciA8RU0+dGVybW5hbWU8L0VNPiBlbnRyaWVzIHRoYXQgaGFzIHRoaXMgY2FwYWJpbC0KKyAgICAgICBpdHkgIGdpdmVzICBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgdGhlIGNhcGFiaWxpdHkgdGhhbiB0aGF0CisgICAgICAgaW4gdGhlIGZpcnN0IDxFTT50ZXJtbmFtZTwvRU0+LgorCisgICAgICAgVGhlIG9yZGVyIG9mIHRoZSBvdGhlciA8RU0+dGVybW5hbWU8L0VNPiAgZW50cmllcyAgaXMgIHNpZ25pZmljYW50LgorICAgICAgIFNpbmNlICB0aGUgdGVybWluZm8gY29tcGlsZXIgPFNUUk9ORz50aWM8L1NUUk9ORz4gZG9lcyBhIGxlZnQtdG8tcmlnaHQgc2NhbgorICAgICAgIG9mIHRoZSBjYXBhYmlsaXRpZXMsIHNwZWNpZnlpbmcgdHdvIDxTVFJPTkc+dXNlPTwvU1RST05HPiBlbnRyaWVzIHRoYXQgY29uLQorICAgICAgIHRhaW4gZGlmZmVyaW5nIGVudHJpZXMgZm9yIHRoZSBzYW1lIGNhcGFiaWxpdGllcyB3aWxsIHByby0KKyAgICAgICBkdWNlIGRpZmZlcmVudCByZXN1bHRzIGRlcGVuZGluZyBvbiAgdGhlICBvcmRlciAgdGhhdCAgdGhlCisgICAgICAgZW50cmllcyAgYXJlICBnaXZlbiBpbi4gIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiB3aWxsIGZsYWcgYW55IHN1Y2ggaW5jb24tCisgICAgICAgc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSBvdGhlciA8RU0+dGVybW5hbWU8L0VNPiBlbnRyaWVzIGFzIHRoZXkgIGFyZQorICAgICAgIGZvdW5kLgorCisgICAgICAgQWx0ZXJuYXRpdmVseSwgIHNwZWNpZnlpbmcgYSBjYXBhYmlsaXR5IDxFTT5hZnRlcjwvRU0+IGEgPFNUUk9ORz51c2U9PC9TVFJPTkc+IGVudHJ5CisgICAgICAgdGhhdCBjb250YWlucyB0aGF0IGNhcGFiaWxpdHkgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHNwZWNpLQorICAgICAgIGZpY2F0aW9uICB0byAgYmUgIGlnbm9yZWQuICAgVXNpbmcgIDxTVFJPTkc+aW5mb2NtcDwvU1RST05HPiAgdG8gcmVjcmVhdGUgYQorICAgICAgIGRlc2NyaXB0aW9uIGNhbiBiZSBhIHVzZWZ1bCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBldmVyeS0KKyAgICAgICB0aGluZyAgd2FzICBzcGVjaWZpZWQgIGNvcnJlY3RseSAgaW4gIHRoZSAgb3JpZ2luYWwgc291cmNlCisgICAgICAgZGVzY3JpcHRpb24uCisKKyAgICAgICBBbm90aGVyIGVycm9yICB0aGF0ICBkb2VzICBub3QgIGNhdXNlICBpbmNvcnJlY3QgIGNvbXBpbGVkCisgICAgICAgZmlsZXMsICBidXQgd2lsbCBzbG93IGRvd24gdGhlIGNvbXBpbGF0aW9uIHRpbWUsIGlzIHNwZWNpLQorICAgICAgIGZ5aW5nIGV4dHJhIDxTVFJPTkc+dXNlPTwvU1RST05HPiBmaWVsZHMgIHRoYXQgIGFyZSAgc3VwZXJmbHVvdXMuICAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+CisgICAgICAgd2lsbCAgZmxhZyAgYW55ICBvdGhlciAgPEVNPnRlcm1uYW1lPC9FTT4gPEVNPnVzZT08L0VNPiBmaWVsZHMgdGhhdCB3ZXJlIG5vdAorICAgICAgIG5lZWRlZC4KKworICAgPFNUUk9ORz5DaGFuZ2luZzwvU1RST05HPiA8U1RST05HPkRhdGFiYXNlczwvU1RST05HPiA8U1RST05HPlstQTwvU1RST05HPiA8RU0+ZGlyZWN0b3J5PC9FTT5dIFstQiA8RU0+ZGlyZWN0b3J5PC9FTT5dCisgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxlZCA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICBkYXRhYmFzZSAgaXMgIHRha2VuCisgICAgICAgZnJvbSAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxTVFJPTkc+VEVSTUlORk88L1NUUk9ORz4gLiAgSWYgdGhlIHZhcmlhYmxlCisgICAgICAgaXMgbm90IGRlZmluZWQsIG9yIHRoZSB0ZXJtaW5hbCBpcyBub3QgZm91bmQgaW4gdGhhdCBsb2NhLQorICAgICAgIHRpb24sICB0aGUgIHN5c3RlbSAgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiAgZGF0YWJhc2UsIGluIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXItPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5taW5mbzwvU1RST05HPiwgd2lsbCBiZSB1c2VkLiAgVGhlIG9wdGlvbnMgPFNUUk9ORz4tQTwvU1RST05HPiBhbmQgPFNUUk9ORz4tQjwvU1RST05HPiBtYXkgYmUgdXNlZCB0bworICAgICAgIG92ZXJyaWRlICB0aGlzICBsb2NhdGlvbi4gIFRoZSA8U1RST05HPi1BPC9TVFJPTkc+IG9wdGlvbiB3aWxsIHNldCA8U1RST05HPlRFUk1JTkZPPC9TVFJPTkc+CisgICAgICAgZm9yIHRoZSBmaXJzdCA8RU0+dGVybW5hbWU8L0VNPiBhbmQgdGhlIDxTVFJPTkc+LUI8L1NUUk9ORz4gb3B0aW9uIHdpbGwgc2V0IDxTVFJPTkc+VEVSTUlORk88L1NUUk9ORz4KKyAgICAgICBmb3IgIHRoZSAgb3RoZXIgIDxFTT50ZXJtbmFtZXM8L0VNPi4gICBXaXRoIHRoaXMsIGl0IGlzIHBvc3NpYmxlIHRvCisgICAgICAgY29tcGFyZSBkZXNjcmlwdGlvbnMgZm9yIGEgdGVybWluYWwgIHdpdGggIHRoZSAgc2FtZSAgbmFtZQorICAgICAgIGxvY2F0ZWQgIGluICB0d28gIGRpZmZlcmVudCBkYXRhYmFzZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAgICAgICBjb21wYXJpbmcgZGVzY3JpcHRpb25zIGZvciB0aGUgc2FtZSAgdGVybWluYWwgIGNyZWF0ZWQgIGJ5CisgICAgICAgZGlmZmVyZW50IHBlb3BsZS4KKworICAgPFNUUk9ORz5PdGhlcjwvU1RST05HPiA8U1RST05HPk9wdGlvbnM8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPi0xPC9TVFJPTkc+ICAgY2F1c2VzICB0aGUgIGZpZWxkcyAgdG8gYmUgcHJpbnRlZCBvdXQgb25lIHRvIGEgbGluZS4KKyAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIGZpZWxkcyB3aWxsIGJlIHByaW50ZWQgIHNldmVyYWwgIHRvICBhCisgICAgICAgICAgICBsaW5lIHRvIGEgbWF4aW11bSB3aWR0aCBvZiA2MCBjaGFyYWN0ZXJzLgorCisgICAgICAgPFNUUk9ORz4tYTwvU1RST05HPiAgIHRlbGxzICA8U1RST05HPmluZm9jbXA8L1NUUk9ORz4gIHRvICByZXRhaW4gY29tbWVudGVkLW91dCBjYXBhYmlsaXRpZXMKKyAgICAgICAgICAgIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgdGhlbS4gIENhcGFiaWxpdGllcyAgYXJlICBjb20tCisgICAgICAgICAgICBtZW50ZWQgYnkgcHJlZml4aW5nIHRoZW0gd2l0aCBhIHBlcmlvZC4KKworICAgICAgIDxTVFJPTkc+LUU8L1NUUk9ORz4gICBEdW1wICB0aGUgIGNhcGFiaWxpdGllcyAgb2YgIHRoZSAgZ2l2ZW4gIHRlcm1pbmFsICBhcworICAgICAgICAgICAgdGFibGVzLCBuZWVkZWQgaW4gdGhlIEMgaW5pdGlhbGl6ZXIgIGZvciAgYSAgVEVSTVRZUEUKKyAgICAgICAgICAgIHN0cnVjdHVyZSAgKHRoZSAgdGVybWluYWwgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgaW4gdGhlCisgICAgICAgICAgICA8U1RST05HPiZsdDt0ZXJtLmgmZ3Q7PC9TVFJPTkc+KS4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgcHJlcGFyaW5nICB2ZXItCisgICAgICAgICAgICBzaW9ucyAgb2YgIHRoZSAgY3Vyc2VzICBsaWJyYXJ5IGhhcmR3aXJlZCBmb3IgYSBnaXZlbgorICAgICAgICAgICAgdGVybWluYWwgdHlwZS4gIFRoZSB0YWJsZXMgYXJlIGFsbCAgZGVjbGFyZWQgIHN0YXRpYywKKyAgICAgICAgICAgIGFuZCAgYXJlICBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgYW5kIHRoZSBuYW1lIG9mCisgICAgICAgICAgICB0aGUgY29ycmVzcG9uZGluZyB0ZXJtaW5hbCBlbnRyeS4KKworICAgICAgICAgICAgQmVmb3JlIG5jdXJzZXMgNS4wLCB0aGUgc3BsaXQgYmV0d2VlbiB0aGUgPFNUUk9ORz4tZTwvU1RST05HPiAgYW5kICA8U1RST05HPi1FPC9TVFJPTkc+CisgICAgICAgICAgICBvcHRpb25zICB3YXMgIG5vdCAgbmVlZGVkOyAgYnV0ICBzdXBwb3J0IGZvciBleHRlbmRlZAorICAgICAgICAgICAgbmFtZXMgcmVxdWlyZWQgbWFraW5nIHRoZSBhcnJheXMgb2YgdGVybWluYWwgY2FwYWJpbC0KKyAgICAgICAgICAgIGl0aWVzIHNlcGFyYXRlIGZyb20gdGhlIFRFUk1UWVBFIHN0cnVjdHVyZS4KKworICAgICAgIDxTVFJPTkc+LWU8L1NUUk9ORz4gICBEdW1wICB0aGUgIGNhcGFiaWxpdGllcyAgb2YgdGhlIGdpdmVuIHRlcm1pbmFsIGFzIGEgQworICAgICAgICAgICAgaW5pdGlhbGl6ZXIgZm9yIGEgVEVSTVRZUEUgIHN0cnVjdHVyZSAgKHRoZSAgdGVybWluYWwKKyAgICAgICAgICAgIGNhcGFiaWxpdHkgIHN0cnVjdHVyZSAgaW4gdGhlIDxTVFJPTkc+Jmx0O3Rlcm0uaCZndDs8L1NUUk9ORz4pLiAgVGhpcyBvcHRpb24KKyAgICAgICAgICAgIGlzICB1c2VmdWwgIGZvciAgcHJlcGFyaW5nICB2ZXJzaW9ucyAgb2YgIHRoZSAgY3Vyc2VzCisgICAgICAgICAgICBsaWJyYXJ5IGhhcmR3aXJlZCBmb3IgYSBnaXZlbiB0ZXJtaW5hbCB0eXBlLgorCisgICAgICAgPFNUUk9ORz4tRjwvU1RST05HPiAgIGNvbXBhcmUgIHRlcm1pbmZvICBmaWxlcy4gIFRoaXMgYXNzdW1lcyB0aGF0IHR3byBmb2wtCisgICAgICAgICAgICBsb3dpbmcgIGFyZ3VtZW50cyAgYXJlICBmaWxlbmFtZXMuICAgVGhlICBmaWxlcyAgIGFyZQorICAgICAgICAgICAgc2VhcmNoZWQgIGZvciAgcGFpcndpc2UgbWF0Y2hlcyBiZXR3ZWVuIGVudHJpZXMsIHdpdGgKKyAgICAgICAgICAgIHR3byBlbnRyaWVzIGNvbnNpZGVyZWQgdG8gbWF0Y2ggaWYgYW55IG9mIHRoZWlyIG5hbWVzCisgICAgICAgICAgICBkby4gICBUaGUgIHJlcG9ydCAgcHJpbnRlZCAgdG8gIHN0YW5kYXJkIG91dHB1dCBsaXN0cworICAgICAgICAgICAgZW50cmllcyB3aXRoICBubyAgbWF0Y2hlcyAgaW4gIHRoZSAgb3RoZXIgIGZpbGUsICBhbmQKKyAgICAgICAgICAgIGVudHJpZXMgIHdpdGggIG1vcmUgdGhhbiBvbmUgbWF0Y2guICBGb3IgZW50cmllcyB3aXRoCisgICAgICAgICAgICBleGFjdGx5IG9uZSBtYXRjaCBpdCBpbmNsdWRlcyAgYSAgZGlmZmVyZW5jZSAgcmVwb3J0LgorICAgICAgICAgICAgTm9ybWFsbHksICB0byAgcmVkdWNlICB0aGUgIHZvbHVtZSBvZiB0aGUgcmVwb3J0LCB1c2UKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgYXJlIG5vdCByZXNvbHZlZCBiZWZvcmUgbG9va2luZyAgZm9yICBkaWYtCisgICAgICAgICAgICBmZXJlbmNlcywgYnV0IHJlc29sdXRpb24gY2FuIGJlIGZvcmNlZCBieSBhbHNvIHNwZWNpLQorICAgICAgICAgICAgZnlpbmcgPFNUUk9ORz4tcjwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+LWY8L1NUUk9ORz4gICBEaXNwbGF5ICBjb21wbGV4ICB0ZXJtaW5mbyAgc3RyaW5ncyAgIHdoaWNoICAgY29udGFpbgorICAgICAgICAgICAgaWYvdGhlbi9lbHNlL2VuZGlmIGV4cHJlc3Npb25zIGluZGVudGVkIGZvciByZWFkYWJpbC0KKyAgICAgICAgICAgIGl0eS4KKworICAgICAgIDxTVFJPTkc+LUc8L1NUUk9ORz4gICBEaXNwbGF5IGNvbnN0YW50IGxpdGVyYWxzIGluIGRlY2ltYWwgZm9ybSByYXRoZXIgdGhhbgorICAgICAgICAgICAgdGhlaXIgY2hhcmFjdGVyIGVxdWl2YWxlbnRzLgorCisgICAgICAgPFNUUk9ORz4tZzwvU1RST05HPiAgIERpc3BsYXkgIGNvbnN0YW50ICBjaGFyYWN0ZXIgIGxpdGVyYWxzIGluIHF1b3RlZCBmb3JtCisgICAgICAgICAgICByYXRoZXIgdGhhbiB0aGVpciBkZWNpbWFsIGVxdWl2YWxlbnRzLgorCisgICAgICAgPFNUUk9ORz4taTwvU1RST05HPiAgIEFuYWx5emUgdGhlIGluaXRpYWxpemF0aW9uICg8U1RST05HPmlzMTwvU1RST05HPiwgPFNUUk9ORz5pczI8L1NUUk9ORz4sIDxTVFJPTkc+aXMzPC9TVFJPTkc+KSwgYW5kIHJlc2V0CisgICAgICAgICAgICAoPFNUUk9ORz5yczE8L1NUUk9ORz4sICA8U1RST05HPnJzMjwvU1RST05HPiwgIDxTVFJPTkc+cnMzPC9TVFJPTkc+KSwgIHN0cmluZ3MgIGluICB0aGUgZW50cnkuICBGb3IgZWFjaAorICAgICAgICAgICAgc3RyaW5nLCB0aGUgY29kZSB0cmllcyB0byBhbmFseXplIGl0IGludG8gYWN0aW9ucyAgaW4KKyAgICAgICAgICAgIHRlcm1zIG9mIHRoZSBvdGhlciBjYXBhYmlsaXRpZXMgaW4gdGhlIGVudHJ5LCBjZXJ0YWluCisgICAgICAgICAgICBYMy42NC9JU08gNjQyOS9FQ01BLTQ4IGNhcGFiaWxpdGllcywgYW5kIGNlcnRhaW4gIERFQworICAgICAgICAgICAgVlQtc2VyaWVzICBwcml2YXRlICBtb2RlcyAodGhlIHNldCBvZiByZWNvZ25pemVkIHNwZS0KKyAgICAgICAgICAgIGNpYWwgc2VxdWVuY2VzIGhhcyAgYmVlbiAgc2VsZWN0ZWQgIGZvciAgY29tcGxldGVuZXNzCisgICAgICAgICAgICBvdmVyICB0aGUgIGV4aXN0aW5nICB0ZXJtaW5mbyBkYXRhYmFzZSkuICBFYWNoIHJlcG9ydAorICAgICAgICAgICAgbGluZSBjb25zaXN0cyBvZiB0aGUgY2FwYWJpbGl0eSBuYW1lLCBmb2xsb3dlZCAgYnkgIGEKKyAgICAgICAgICAgIGNvbG9uIGFuZCBzcGFjZSwgZm9sbG93ZWQgYnkgYSBwcmludGFibGUgZXhwYW5zaW9uIG9mCisgICAgICAgICAgICB0aGUgY2FwYWJpbGl0eSBzdHJpbmcgd2l0aCBzZWN0aW9ucyAgbWF0Y2hpbmcgIHJlY29nLQorICAgICAgICAgICAgbml6ZWQgIGFjdGlvbnMgIHRyYW5zbGF0ZWQgaW50byB7fS1icmFja2V0ZWQgZGVzY3JpcC0KKyAgICAgICAgICAgIHRpb25zLiAgSGVyZSAgaXMgIGEgIGxpc3QgIG9mICB0aGUgIERFQy9BTlNJICBzcGVjaWFsCisgICAgICAgICAgICBzZXF1ZW5jZXMgcmVjb2duaXplZDogaS4KKworICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICBNZWFuaW5nCisgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgUklTICAgICAgICAgICBmdWxsIHJlc2V0CisgICAgICAgICAgICAgICAgICBTQyAgICAgICAgICAgIHNhdmUgY3Vyc29yCisgICAgICAgICAgICAgICAgICBSQyAgICAgICAgICAgIHJlc3RvcmUgY3Vyc29yCisgICAgICAgICAgICAgICAgICBMTCAgICAgICAgICAgIGhvbWUtZG93bgorICAgICAgICAgICAgICAgICAgUlNSICAgICAgICAgICByZXNldCBzY3JvbGwgcmVnaW9uCisgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgREVDU1RSICAgICAgICBzb2Z0IHJlc2V0IChWVDMyMCkKKyAgICAgICAgICAgICAgICAgIFM3QzFUICAgICAgICAgNy1iaXQgY29udHJvbHMgKFZUMjIwKQorICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIElTTyBERUMgRzAgICAgZW5hYmxlIERFQyBncmFwaGljcyBmb3IgRzAKKyAgICAgICAgICAgICAgICAgIElTTyBVSyBHMCAgICAgZW5hYmxlIFVLIGNoYXJzIGZvciBHMAorICAgICAgICAgICAgICAgICAgSVNPIFVTIEcwICAgICBlbmFibGUgVVMgY2hhcnMgZm9yIEcwCisgICAgICAgICAgICAgICAgICBJU08gREVDIEcxICAgIGVuYWJsZSBERUMgZ3JhcGhpY3MgZm9yIEcxCisgICAgICAgICAgICAgICAgICBJU08gVUsgRzEgICAgIGVuYWJsZSBVSyBjaGFycyBmb3IgRzEKKyAgICAgICAgICAgICAgICAgIElTTyBVUyBHMSAgICAgZW5hYmxlIFVTIGNoYXJzIGZvciBHMQorICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIERFQ1BBTSAgICAgICAgYXBwbGljYXRpb24ga2V5cGFkIG1vZGUKKyAgICAgICAgICAgICAgICAgIERFQ1BOTSAgICAgICAgbm9ybWFsIGtleXBhZCBtb2RlCisgICAgICAgICAgICAgICAgICBERUNBTlNJICAgICAgIGVudGVyIEFOU0kgbW9kZQorICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIEVDTUFbKy1dQU0gICAga2V5Ym9hcmQgYWN0aW9uIG1vZGUKKyAgICAgICAgICAgICAgICAgIEVDTUFbKy1dSVJNICAgaW5zZXJ0IHJlcGxhY2UgbW9kZQorICAgICAgICAgICAgICAgICAgRUNNQVsrLV1TUk0gICBzZW5kIHJlY2VpdmUgbW9kZQorICAgICAgICAgICAgICAgICAgRUNNQVsrLV1MTk0gICBsaW5lZmVlZCBtb2RlCisgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgREVDWystXUNLTSAgICBhcHBsaWNhdGlvbiBjdXJzb3Iga2V5cworICAgICAgICAgICAgICAgICAgREVDWystXUFOTSAgICBzZXQgVlQ1MiBtb2RlCisgICAgICAgICAgICAgICAgICBERUNbKy1dQ09MTSAgIDEzMi1jb2x1bW4gbW9kZQorCisgICAgICAgICAgICAgICAgICBERUNbKy1dU0NMTSAgIHNtb290aCBzY3JvbGwKKyAgICAgICAgICAgICAgICAgIERFQ1srLV1TQ05NICAgcmV2ZXJzZSB2aWRlbyBtb2RlCisgICAgICAgICAgICAgICAgICBERUNbKy1dT00gICAgIG9yaWdpbiBtb2RlCisgICAgICAgICAgICAgICAgICBERUNbKy1dQVdNICAgIHdyYXBhcm91bmQgbW9kZQorICAgICAgICAgICAgICAgICAgREVDWystXUFSTSAgICBhdXRvLXJlcGVhdCBtb2RlCisKKyAgICAgICAgICAgIEl0ICBhbHNvICByZWNvZ25pemVzICBhICBTR1IgIGFjdGlvbiBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICAgICBBTlNJL0lTTyA2NDI5L0VDTUEgU2V0IEdyYXBoaWNzIFJlbmRpdGlvbiwgIHdpdGggIHRoZQorICAgICAgICAgICAgdmFsdWVzICBOT1JNQUwsICBCT0xELCBVTkRFUkxJTkUsIEJMSU5LLCBhbmQgUkVWRVJTRS4KKyAgICAgICAgICAgIEFsbCBidXQgTk9STUFMIG1heSBiZSBwcmVmaXhlZCB3aXRoIGArJyAodHVybiBvbikgIG9yCisgICAgICAgICAgICBgLScgKHR1cm4gb2ZmKS4KKworICAgICAgIEFuIFNHUjAgZGVzaWduYXRlcyBhbiBlbXB0eSBoaWdobGlnaHQgc2VxdWVuY2UgKGVxdWl2YWxlbnQKKyAgICAgICB0byB7U0dSOk5PUk1BTH0pLgorCisgICAgICAgPFNUUk9ORz4tbDwvU1RST05HPiAgIFNldCBvdXRwdXQgZm9ybWF0IHRvIHRlcm1pbmZvLgorCisgICAgICAgPFNUUk9ORz4tcDwvU1RST05HPiAgIElnbm9yZSBwYWRkaW5nIHNwZWNpZmljYXRpb25zIHdoZW4gY29tcGFyaW5nIHN0cmluZ3MuCisKKyAgICAgICA8U1RST05HPi1xPC9TVFJPTkc+ICAgTWFrZSAgdGhlIGNvbXBhcmlzb24gbGlzdGluZyBzaG9ydGVyIGJ5IG9taXR0aW5nIHN1Yi0KKyAgICAgICAgICAgIGhlYWRpbmdzLCBhbmQgdXNpbmcgIi0iIGZvciBhYnNlbnQgY2FwYWJpbGl0aWVzLCAgIkAiCisgICAgICAgICAgICBmb3IgY2FuY2VsZWQgcmF0aGVyIHRoYW4gIk5VTEwiLgorCisgICAgICAgPFNUUk9ORz4tUjwvU1RST05HPjxFTT5zdWJzZXQ8L0VNPgorICAgICAgICAgICAgUmVzdHJpY3QgIG91dHB1dCAgdG8gIGEgZ2l2ZW4gc3Vic2V0LiAgVGhpcyBvcHRpb24gaXMKKyAgICAgICAgICAgIGZvciB1c2Ugd2l0aCBhcmNoYWljIHZlcnNpb25zIG9mIHRlcm1pbmZvIGxpa2UgIHRob3NlCisgICAgICAgICAgICBvbiAgU1ZyMSwgIFVsdHJpeCwgIG9yICBIUC9VWCB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZQorICAgICAgICAgICAgZnVsbCBzZXQgb2YgU1ZSNC9YU0kgQ3Vyc2VzICB0ZXJtaW5mbzsgIGFuZCAgdmFyaWFudHMKKyAgICAgICAgICAgIHN1Y2ggYXMgQUlYIHRoYXQgaGF2ZSB0aGVpciBvd24gZXh0ZW5zaW9ucyBpbmNvbXBhdGktCisgICAgICAgICAgICBibGUgd2l0aCBTVnI0L1hTSS4gIEF2YWlsYWJsZSAgdGVybWluZm8gIHN1YnNldHMgIGFyZQorICAgICAgICAgICAgIlNWcjEiLCAgIlVsdHJpeCIsICAiSFAiLCAgYW5kICJBSVgiOyBzZWUgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgZm9yIGRldGFpbHMuICBZb3UgY2FuIGFsc28gY2hvb3NlICB0aGUgIHN1YnNldCAgIkJTRCIKKyAgICAgICAgICAgIHdoaWNoICBzZWxlY3RzIG9ubHkgY2FwYWJpbGl0aWVzIHdpdGggdGVybWNhcCBlcXVpdmEtCisgICAgICAgICAgICBsZW50cyByZWNvZ25pemVkIGJ5IDQuNEJTRC4KKworICAgICAgIDxTVFJPTkc+LXM8L1NUUk9ORz4gPEVNPltkfGl8bHxjXTwvRU0+CisgICAgICAgICAgICBUaGUgPFNUUk9ORz4tczwvU1RST05HPiBvcHRpb24gIHNvcnRzICB0aGUgIGZpZWxkcyAgd2l0aGluICBlYWNoICB0eXBlCisgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGFyZ3VtZW50IGJlbG93OgorCisgICAgICAgICAgICA8U1RST05HPmQ8L1NUUk9ORz4gICAgbGVhdmUgIGZpZWxkcyAgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgc3RvcmVkCisgICAgICAgICAgICAgICAgIGluIHRoZSA8RU0+dGVybWluZm88L0VNPiBkYXRhYmFzZS4KKworICAgICAgICAgICAgPFNUUk9ORz5pPC9TVFJPTkc+ICAgIHNvcnQgYnkgPEVNPnRlcm1pbmZvPC9FTT4gbmFtZS4KKworICAgICAgICAgICAgPFNUUk9ORz5sPC9TVFJPTkc+ICAgIHNvcnQgYnkgdGhlIGxvbmcgQyB2YXJpYWJsZSBuYW1lLgorCisgICAgICAgICAgICA8U1RST05HPmM8L1NUUk9ORz4gICAgc29ydCBieSB0aGUgPEVNPnRlcm1jYXA8L0VNPiBuYW1lLgorCisgICAgICAgICAgICBJZiB0aGUgPFNUUk9ORz4tczwvU1RST05HPiBvcHRpb24gaXMgbm90IGdpdmVuLCB0aGUgZmllbGRzIHByaW50ZWQgb3V0CisgICAgICAgICAgICB3aWxsICBiZSAgc29ydGVkICBhbHBoYWJldGljYWxseSBieSB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBuYW1lCisgICAgICAgICAgICB3aXRoaW4gZWFjaCB0eXBlLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgdGhlIDxTVFJPTkc+LUM8L1NUUk9ORz4gb3IgdGhlCisgICAgICAgICAgICA8U1RST05HPi1MPC9TVFJPTkc+IG9wdGlvbnMsIHdoaWNoIGNhdXNlIHRoZSBzb3J0aW5nIHRvIGJlIGRvbmUgYnkgdGhlCisgICAgICAgICAgICA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gbmFtZSBvciB0aGUgbG9uZyAgQyAgdmFyaWFibGUgIG5hbWUsICByZXNwZWMtCisgICAgICAgICAgICB0aXZlbHkuCisKKyAgICAgICA8U1RST05HPi1UPC9TVFJPTkc+ICAgZWxpbWluYXRlcyAgc2l6ZS1yZXN0cmljdGlvbnMgIG9uIHRoZSBnZW5lcmF0ZWQgdGV4dC4KKyAgICAgICAgICAgIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMsIHNpbmNlCisgICAgICAgICAgICB0aGUgY29tcGlsZWQgZGVzY3JpcHRpb25zIGFyZSBsaW1pdGVkIChlLmcuLCAxMDIzIGZvcgorICAgICAgICAgICAgdGVybWNhcCwgNDA5NiBmb3IgdGVybWluZm8pLgorCisgICAgICAgPFNUUk9ORz4tdDwvU1RST05HPiAgIHRlbGxzICA8U1RST05HPnRpYzwvU1RST05HPiAgdG8gIGRpc2NhcmQgIGNvbW1lbnRlZC1vdXQgIGNhcGFiaWxpdGllcy4KKyAgICAgICAgICAgIE5vcm1hbGx5ICB3aGVuICB0cmFuc2xhdGluZyBmcm9tIHRlcm1pbmZvIHRvIHRlcm1jYXAsCisgICAgICAgICAgICB1bnRyYW5zbGF0YWJsZSBjYXBhYmlsaXRpZXMgYXJlIGNvbW1lbnRlZC1vdXQuCisKKyAgICAgICA8U1RST05HPi1VPC9TVFJPTkc+ICAgdGVsbHMgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IHRvICBub3QgIHBvc3QtcHJvY2VzcyAgdGhlICBkYXRhICBhZnRlcgorICAgICAgICAgICAgcGFyc2luZyAgdGhlICBzb3VyY2UgIGZpbGUuICAgVGhpcyBmZWF0dXJlIGhlbHBzIHdoZW4KKyAgICAgICAgICAgIGNvbXBhcmluZyB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mICB0d28gIHNvdXJjZSAgZmlsZXMsCisgICAgICAgICAgICBzaW5jZSAgaXQgIGV4Y2x1ZGVzIHRoZSBpbmZlcmVuY2VzIHRoYXQgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IG1ha2VzCisgICAgICAgICAgICB0byBmaWxsIGluIG1pc3NpbmcgZGF0YS4KKworICAgICAgIDxTVFJPTkc+LVY8L1NUUk9ORz4gICByZXBvcnRzIHRoZSB2ZXJzaW9uIG9mIG5jdXJzZXMgd2hpY2ggd2FzIHVzZWQgaW4gdGhpcworICAgICAgICAgICAgcHJvZ3JhbSwgYW5kIGV4aXRzLgorCisgICAgICAgPFNUUk9ORz4tdjwvU1RST05HPiA8RU0+bjwvRU0+IHByaW50cyAgb3V0ICB0cmFjaW5nIGluZm9ybWF0aW9uIG9uIHN0YW5kYXJkIGVycm9yIGFzCisgICAgICAgICAgICB0aGUgcHJvZ3JhbSBydW5zLiAgSGlnaGVyIHZhbHVlcyBvZiBuIGluZHVjZSAgZ3JlYXRlcgorICAgICAgICAgICAgdmVyYm9zaXR5LgorCisgICAgICAgPFNUUk9ORz4tdzwvU1RST05HPiA8RU0+d2lkdGg8L0VNPgorICAgICAgICAgICAgY2hhbmdlcyB0aGUgb3V0cHV0IHRvIDxFTT53aWR0aDwvRU0+IGNoYXJhY3RlcnMuCisKKyAgICAgICA8U1RST05HPi14PC9TVFJPTkc+ICAgcHJpbnQgICBpbmZvcm1hdGlvbiAgZm9yICB1c2VyLWRlZmluZWQgIGNhcGFiaWxpdGllcy4KKyAgICAgICAgICAgIFRoZXNlIGFyZSBleHRlbnNpb25zIHRvIHRoZSB0ZXJtaW5mbyByZXBlcnRvaXJlIHdoaWNoCisgICAgICAgICAgICBjYW4gYmUgbG9hZGVkIHVzaW5nIHRoZSA8U1RST05HPi14PC9TVFJPTkc+IG9wdGlvbiBvZiA8U1RST05HPnRpYzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5GSUxFUzwvSDI+PFBSRT4KKyAgICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvIENvbXBpbGVkICAgICAgdGVybWluYWwgICAgIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZS4KKworCis8L1BSRT4KKzxIMj5FWFRFTlNJT05TPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPi1FPC9TVFJPTkc+LCA8U1RST05HPi1GPC9TVFJPTkc+LCA8U1RST05HPi1HPC9TVFJPTkc+LCA8U1RST05HPi1SPC9TVFJPTkc+LCA8U1RST05HPi1UPC9TVFJPTkc+LCA8U1RST05HPi1WPC9TVFJPTkc+LCA8U1RST05HPi1hPC9TVFJPTkc+LCA8U1RST05HPi1lPC9TVFJPTkc+LCA8U1RST05HPi1mPC9TVFJPTkc+LCA8U1RST05HPi1nPC9TVFJPTkc+LCA8U1RST05HPi1pPC9TVFJPTkc+LCA8U1RST05HPi1sPC9TVFJPTkc+LCA8U1RST05HPi1wPC9TVFJPTkc+LCA8U1RST05HPi1xPC9TVFJPTkc+CisgICAgICAgYW5kIDxTVFJPTkc+LXQ8L1NUUk9ORz4gb3B0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBTVnI0IGN1cnNlcy4KKworICAgICAgIFRoZSA8U1RST05HPi1yPC9TVFJPTkc+IG9wdGlvbidzIG5vdGlvbiBvZiBgdGVybWNhcCcgY2FwYWJpbGl0aWVzIGlzIFN5c3RlbQorICAgICAgIFYgUmVsZWFzZSA0J3MuICBBY3R1YWwgQlNEIGN1cnNlcyAgdmVyc2lvbnMgIHdpbGwgIGhhdmUgIGEKKyAgICAgICBtb3JlICByZXN0cmljdGVkICBzZXQuICBUbyBzZWUgb25seSB0aGUgNC40QlNEIHNldCwgdXNlIDxTVFJPTkc+LXI8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPi1SQlNEPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkJVR1M8L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+LUY8L1NUUk9ORz4gb3B0aW9uIG9mIDxTVFJPTkc+PEEgSFJFRj0iaW5mb2NtcC4xbS5odG1sIj5pbmZvY21wKDFtKTwvQT48L1NUUk9ORz4gc2hvdWxkIGJlIGEgPFNUUk9ORz48QSBIUkVGPSJ0b2UuMW0uaHRtbCI+dG9lKDFtKTwvQT48L1NUUk9ORz4gbW9kZS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImNhcHRvaW5mby4xbS5odG1sIj5jYXB0b2luZm8oMW0pPC9BPjwvU1RST05HPiwgICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvdG9jYXAuMW0uaHRtbCI+aW5mb3RvY2FwKDFtKTwvQT48L1NUUk9ORz4sICAgICA8U1RST05HPjxBIEhSRUY9InRpYy4xbS5odG1sIj50aWMoMW0pPC9BPjwvU1RST05HPiwgICAgIDxTVFJPTkc+PEEgSFJFRj0idG9lLjFtLmh0bWwiPnRvZSgxbSk8L0E+PC9TVFJPTkc+LAorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPi4KKworICAgICAgIFRoaXMgZGVzY3JpYmVzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB2ZXJzaW9uIDUuNiAocGF0Y2ggMjAwODEwMTEpLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBFcmljIFMuIFJheW1vbmQgJmx0O2VzckBzbmFyay50aHlyc3VzLmNvbSZndDsgYW5kCisgICAgICAgVGhvbWFzIEUuIERpY2tleSAmbHQ7ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0Jmd0OworCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vaW5mb3RvY2FwLjFtLmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vaW5mb3RvY2FwLjFtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzNTlkOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9pbmZvdG9jYXAuMW0uaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogaW5mb3RvY2FwLjFtLHYgMS44IDIwMDYvMTIvMjQgMjA6MTM6NTYgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+aW5mb3RvY2FwIDFtPC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+aW5mb3RvY2FwIDFtPC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJpbmZvdG9jYXAuMW0uaHRtbCI+aW5mb3RvY2FwKDFtKTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImluZm90b2NhcC4xbS5odG1sIj5pbmZvdG9jYXAoMW0pPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5mb3RvY2FwPC9TVFJPTkc+ICAtIGNvbnZlcnQgYSA8RU0+dGVybWluZm88L0VNPiBkZXNjcmlwdGlvbiBpbnRvIGEgPEVNPnRlcm1jYXA8L0VNPgorICAgICAgIGRlc2NyaXB0aW9uCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pbmZvdG9jYXA8L1NUUk9ORz4gWzxTVFJPTkc+LXY8L1NUUk9ORz48RU0+bjwvRU0+IDxFTT53aWR0aDwvRU0+XSAgWzxTVFJPTkc+LVY8L1NUUk9ORz5dIFs8U1RST05HPi0xPC9TVFJPTkc+XSBbPFNUUk9ORz4tdzwvU1RST05HPiA8RU0+d2lkdGg8L0VNPl0gPEVNPmZpbGU8L0VNPiAuIC4gLgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+aW5mb3RvY2FwPC9TVFJPTkc+IGxvb2tzIGluIDxFTT5maWxlPC9FTT4gZm9yICA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+ICBkZXNjcmlwdGlvbnMuICAgRm9yCisgICAgICAgZWFjaCBvbmUgZm91bmQsIGFuIGVxdWl2YWxlbnQgPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IGRlc2NyaXB0aW9uIGlzIHdyaXQtCisgICAgICAgdGVuIHRvIHN0YW5kYXJkIG91dHB1dC4gICBUZXJtaW5mbyAgPFNUUk9ORz51c2U8L1NUUk9ORz4gIGNhcGFiaWxpdGllcyAgYXJlCisgICAgICAgdHJhbnNsYXRlZCBkaXJlY3RseSB0byB0ZXJtY2FwIDxTVFJPTkc+dGM8L1NUUk9ORz4gY2FwYWJpbGl0aWVzLgorCisgICAgICAgPFNUUk9ORz4tdjwvU1RST05HPiAgIHByaW50ICBvdXQgIHRyYWNpbmcgIGluZm9ybWF0aW9uIG9uIHN0YW5kYXJkIGVycm9yIGFzCisgICAgICAgICAgICB0aGUgcHJvZ3JhbSBydW5zLgorCisgICAgICAgPFNUUk9ORz4tVjwvU1RST05HPiAgIHByaW50IG91dCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBpbiB1c2Ugb24gIHN0YW4tCisgICAgICAgICAgICBkYXJkIGVycm9yIGFuZCBleGl0LgorCisgICAgICAgPFNUUk9ORz4tMTwvU1RST05HPiAgIGNhdXNlICB0aGUgZmllbGRzIHRvIHByaW50IG91dCBvbmUgdG8gYSBsaW5lLiAgT3RoZXItCisgICAgICAgICAgICB3aXNlLCB0aGUgZmllbGRzIHdpbGwgYmUgcHJpbnRlZCBzZXZlcmFsIHRvIGEgbGluZSB0bworICAgICAgICAgICAgYSBtYXhpbXVtIHdpZHRoIG9mIDYwIGNoYXJhY3RlcnMuCisKKyAgICAgICA8U1RST05HPi13PC9TVFJPTkc+ICAgY2hhbmdlIHRoZSBvdXRwdXQgdG8gPEVNPndpZHRoPC9FTT4gY2hhcmFjdGVycy4KKworCis8L1BSRT4KKzxIMj5GSUxFUzwvSDI+PFBSRT4KKyAgICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvIENvbXBpbGVkICAgICAgdGVybWluYWwgICAgIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZS4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGlzIHV0aWxpdHkgaXMgYWN0dWFsbHkgYSBsaW5rICB0byAgPEVNPnRpYzwvRU0+LCAgcnVubmluZyAgaW4gIDxFTT4tQzwvRU0+CisgICAgICAgbW9kZS4gIFlvdSBjYW4gdXNlIG90aGVyIDxFTT50aWM8L0VNPiBvcHRpb25zIHN1Y2ggYXMgPFNUUk9ORz4tZjwvU1RST05HPiBhbmQgIDxTVFJPTkc+LXg8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InRpYy4xbS5odG1sIj50aWMoMW0pPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPgorCisgICAgICAgVGhpcyBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvdG9jYXAuMW0uaHRtbCI+aW5mb3RvY2FwKDFtKTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2tleV9kZWZpbmVkLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4va2V5X2RlZmluZWQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjFkZWJlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2tleV9kZWZpbmVkLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAyMDAzCisgICogQElkOiBrZXlfZGVmaW5lZC4zeCx2IDEuNCAyMDA2LzAyLzI1IDIxOjUwOjAxIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmtleV9kZWZpbmVkIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+a2V5X2RlZmluZWQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImtleV9kZWZpbmVkLjN4Lmh0bWwiPmtleV9kZWZpbmVkKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5X2RlZmluZWQuM3guaHRtbCI+a2V5X2RlZmluZWQoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+a2V5X2RlZmluZWQ8L1NUUk9ORz4gLSBjaGVjayBpZiBhIGtleWNvZGUgaXMgZGVmaW5lZAorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmtleV9kZWZpbmVkKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+Y2hhcjwvU1RST05HPiA8U1RST05HPipkZWZpbml0aW9uKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuICBJdCBwZXJtaXRzIGFuCisgICAgICAgYXBwbGljYXRpb24gdG8gZGV0ZXJtaW5lIGlmIGEgc3RyaW5nIGlzIGN1cnJlbnRseSBib3VuZCB0bworICAgICAgIGFueSBrZXljb2RlLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBJZiAgdGhlICBzdHJpbmcgIGlzIGJvdW5kIHRvIGEga2V5Y29kZSwgaXRzIHZhbHVlIChncmVhdGVyCisgICAgICAgdGhhbiB6ZXJvKSBpcyByZXR1cm5lZC4gIElmIG5vIGtleWNvZGUgaXMgYm91bmQsICB6ZXJvICBpcworICAgICAgIHJldHVybmVkLiAgIElmICB0aGUgIHN0cmluZyAgY29uZmxpY3RzIHdpdGggbG9uZ2VyIHN0cmluZ3MKKyAgICAgICB3aGljaCBhcmUgYm91bmQgdG8ga2V5cywgLTEgaXMgcmV0dXJuZWQuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvICBuY3Vyc2VzLiAgIFRoZXkgIHdlcmUgIG5vdAorICAgICAgIHN1cHBvcnRlZCAgb24gIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiB0aGVtIGJlICBjb24tCisgICAgICAgZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+QVVUSE9SPC9IMj48UFJFPgorICAgICAgIFRob21hcyBEaWNrZXkuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5X2RlZmluZWQuM3guaHRtbCI+a2V5X2RlZmluZWQoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4va2V5Ym91bmQuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9rZXlib3VuZC4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MmQ5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4va2V5Ym91bmQuM3guaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTkKKyAgKiBASWQ6IGtleWJvdW5kLjN4LHYgMS42IDIwMDYvMDIvMjUgMjE6NDc6MDYgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+a2V5b2sgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5rZXlvayAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5rZXlib3VuZDwvU1RST05HPiAtIHJldHVybiBkZWZpbml0aW9uIG9mIGtleWNvZGUKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5jaGFyPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPiA8U1RST05HPmtleWJvdW5kKGludDwvU1RST05HPiA8U1RST05HPmtleWNvZGUsPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Y291bnQpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4gIEl0IHBlcm1pdHMgYW4KKyAgICAgICBhcHBsaWNhdGlvbiB0byBkZXRlcm1pbmUgdGhlIHN0cmluZyB3aGljaCAgaXMgIGRlZmluZWQgIGluCisgICAgICAgdGhlIHRlcm1pbmZvIGZvciBzcGVjaWZpYyBrZXljb2Rlcy4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlIDxFTT5rZXljb2RlPC9FTT4gcGFyYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8sIGVsc2UgTlVMTAorICAgICAgIGlzIHJldHVybmVkLiAgSWYgaXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGRlZmluZWQgIGtleSwKKyAgICAgICB0aGVuICBOVUxMICBpcyAgcmV0dXJuZWQuICAgVGhlIDxFTT5jb3VudDwvRU0+IHBhcmFtZXRlciBpcyB1c2VkIHRvCisgICAgICAgYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGl0ZXJhdGUgdGhyb3VnaCBtdWx0aXBsZSAgZGVmaW5pLQorICAgICAgIHRpb25zLCAgY291bnRpbmcgZnJvbSB6ZXJvLiAgV2hlbiBzdWNjZXNzZnVsLCB0aGUgZnVuY3Rpb24KKyAgICAgICByZXR1cm5zIGEgc3RyaW5nIHdoaWNoIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gIG5jdXJzZXMuICAgVGhleSAgd2VyZSAgbm90CisgICAgICAgc3VwcG9ydGVkICBvbiAgVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgIGNvbi0KKyAgICAgICBkaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJkZWZpbmVfa2V5LjN4Lmh0bWwiPmRlZmluZV9rZXkoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBUaG9tYXMgRGlja2V5LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleW9rLjN4Lmh0bWwiPmtleW9rKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2tleW9rLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4va2V5b2suM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTM4NjEwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL2tleW9rLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk3CisgICogQElkOiBrZXlvay4zeCx2IDEuOSAyMDA2LzAyLzI1IDIxOjQ3OjA2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPmtleW9rIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+a2V5b2sgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9ImtleW9rLjN4Lmh0bWwiPmtleW9rKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5b2suM3guaHRtbCI+a2V5b2soM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+a2V5b2s8L1NUUk9ORz4gLSBlbmFibGUgb3IgZGlzYWJsZSBhIGtleWNvZGUKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5rZXlvayhpbnQ8L1NUUk9ORz4gPFNUUk9ORz5rZXljb2RlLDwvU1RST05HPiA8U1RST05HPmJvb2w8L1NUUk9ORz4gPFNUUk9ORz5lbmFibGUpOzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4gIEl0IHBlcm1pdHMgYW4KKyAgICAgICBhcHBsaWNhdGlvbiB0byBkaXNhYmxlIHNwZWNpZmljIGtleWNvZGVzLCByYXRoZXIgdGhhbiAgdXNlCisgICAgICAgdGhlICA8RU0+a2V5cGFkPC9FTT4gIGZ1bmN0aW9uICB0byBkaXNhYmxlIGFsbCBrZXljb2Rlcy4gIEtleXMgdGhhdAorICAgICAgIGhhdmUgYmVlbiBkaXNhYmxlZCBjYW4gYmUgcmVlbmFibGVkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUga2V5Y29kZSAgbXVzdCAgYmUgIGdyZWF0ZXIgIHRoYW4gIHplcm8sICBlbHNlICBFUlIgIGlzCisgICAgICAgcmV0dXJuZWQuICAgSWYgIGl0ICBkb2VzICBub3QgY29ycmVzcG9uZCB0byBhIGRlZmluZWQga2V5LAorICAgICAgIHRoZW4gRVJSIGlzIHJldHVybmVkLiAgSWYgdGhlIDxFTT5lbmFibGU8L0VNPiAgcGFyYW1ldGVyICBpcyAgdHJ1ZSwKKyAgICAgICB0aGVuICB0aGUgIGtleSAgbXVzdCAgaGF2ZSAgYmVlbiBkaXNhYmxlZCwgYW5kIHZpY2UgdmVyc2EuCisgICAgICAgT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBPSy4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gIG5jdXJzZXMuICAgVGhleSAgd2VyZSAgbm90CisgICAgICAgc3VwcG9ydGVkICBvbiAgVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgIGNvbi0KKyAgICAgICBkaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJkZWZpbmVfa2V5LjN4Lmh0bWwiPmRlZmluZV9rZXkoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzIERpY2tleS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9sZWdhY3lfY29kaW5nLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbGVnYWN5X2NvZGluZy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOTdhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbGVnYWN5X2NvZGluZy4zeC5odG1sCkBAIC0wLDAgKzEsMTE4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyAgKiBASWQ6IGxlZ2FjeV9jb2RpbmcuM3gsdiAxLjMgMjAwNi8xMi8yNCAxNToxMjo1NSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5sZWdhY3lfY29kaW5nIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bGVnYWN5X2NvZGluZyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibGVnYWN5X2NvZGluZy4zeC5odG1sIj5sZWdhY3lfY29kaW5nKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJsZWdhY3lfY29kaW5nLjN4Lmh0bWwiPmxlZ2FjeV9jb2RpbmcoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dXNlX2xlZ2FjeV9jb2Rpbmc8L1NUUk9ORz4gLSB1c2UgdGVybWluYWwncyBkZWZhdWx0IGNvbG9ycworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnVzZV9sZWdhY3lfY29kaW5nKGludDwvU1RST05HPiA8U1RST05HPmxldmVsKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxFTT51c2U8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5sZWdhY3k8L0VNPjxTVFJPTkc+XzwvU1RST05HPjxFTT5jb2RpbmcoKTwvRU0+ICBmdW5jdGlvbiAgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZQorICAgICAgIGN1cnNlcyBsaWJyYXJ5LiAgSXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8gY2hhbmdlIHRoZSByZXN1bHQKKyAgICAgICBvZiAgPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4sIGFuZCBzdXBwcmVzcyByZWxhdGVkIGNoZWNrcyB3aXRoaW4gdGhlIGxpYnJhcnkKKyAgICAgICB0aGF0IHdvdWxkIG5vcm1hbGx5IGNhdXNlICBub25wcmludGluZyAgY2hhcmFjdGVycyAgdG8gIGJlCisgICAgICAgcmVuZGVyZWQgaW4gdmlzaWJsZSBmb3JtLiAgVGhpcyBhZmZlY3RzIG9ubHkgOC1iaXQgY2hhcmFjLQorICAgICAgIHRlcnMuCisKKyAgICAgICBUaGUgPEVNPmxldmVsPC9FTT4gcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSByZXN1bHQ6CisKKyAgICAgICAgICAgICAgMCAgICB0aGUgbGlicmFyeSBmdW5jdGlvbnMgbm9ybWFsbHksIHJlbmRlcmluZyBub24tCisgICAgICAgICAgICAgICAgICAgcHJpbnRpbmcgY2hhcmFjdGVycyBhcyBkZXNjcmliZWQgaW4gPFNUUk9ORz51bmN0cmw8L1NUUk9ORz4uCisKKyAgICAgICAgICAgICAgMSAgICB0aGUgIGxpYnJhcnkgaWdub3JlcyA8U1RST05HPmlzcHJpbnRmPC9TVFJPTkc+IGZvciBjb2RlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICByYW5nZSAxNjAtMjU1LgorCisgICAgICAgICAgICAgIDIgICAgdGhlIGxpYnJhcnkgaWdub3JlcyA8U1RST05HPmlzcHJpbnRmPC9TVFJPTkc+IGZvciBjb2RlcyBpbiAgdGhlCisgICAgICAgICAgICAgICAgICAgcmFuZ2UgMTI4LTI1NS4gIEl0IGFsc28gbW9kaWZpZXMgdGhlIG91dHB1dCBvZgorICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dW5jdHJsPC9TVFJPTkc+LCBzaG93aW5nIGNvZGVzIGluIHRoZSByYW5nZSAxMjgtMTU5ICBhcworICAgICAgICAgICAgICAgICAgIGlzLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBJZiAgdGhlICBzY3JlZW4gIGhhcyAgbm90ICBiZWVuICBpbml0aWFsaXplZCwgb3IgdGhlIDxFTT5sZXZlbDwvRU0+CisgICAgICAgcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgPFNUUk9ORz5FUlI8L1NUUk9ORz4uICBPdGgtCisgICAgICAgZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBwcmV2aW91cyBsZXZlbDogPFNUUk9ORz4wPC9TVFJPTkc+LCA8U1RST05HPjE8L1NUUk9ORz4gb3IgPFNUUk9ORz4yPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoaXMgcm91dGluZSBpcyBzcGVjaWZpYyB0byBuY3Vyc2VzLiAgSXQgd2FzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICBvbiBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuICBJdCBpcyByZWMtCisgICAgICAgb21tZW5kZWQgIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIG5jdXJzZXMgZXh0ZW5zaW9ucyBiZQorICAgICAgIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnVuY3RybDwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgVGhvbWFzIERpY2tleSAodG8gc3VwcG9ydCBseW54J3MgZm9udC1zd2l0Y2hpbmcgIGZlYXR1cmUpLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJsZWdhY3lfY29kaW5nLjN4Lmh0bWwiPmxlZ2FjeV9jb2RpbmcoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudS4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnUuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWI5MTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnUuM3guaHRtbApAQCAtMCwwICsxLDI0MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudS4zeCx2IDEuMTkgMjAwNi8xMS8wNCAxODozODoyOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudTwvU1RST05HPiAtIGN1cnNlcyBleHRlbnNpb24gZm9yIHByb2dyYW1taW5nIG1lbnVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPm1lbnU8L1NUUk9ORz4gbGlicmFyeSBwcm92aWRlcyB0ZXJtaW5hbC1pbmRlcGVuZGVudCBmYWNpbGl0aWVzCisgICAgICAgZm9yIGNvbXBvc2luZyBtZW51IHN5c3RlbXMgIG9uICBjaGFyYWN0ZXItY2VsbCAgdGVybWluYWxzLgorICAgICAgIFRoZSBsaWJyYXJ5IGluY2x1ZGVzOiBpdGVtIHJvdXRpbmVzLCB3aGljaCBjcmVhdGUgYW5kIG1vZC0KKyAgICAgICBpZnkgbWVudSBpdGVtczsgYW5kIG1lbnUgcm91dGluZXMsIHdoaWNoIGdyb3VwIGl0ZW1zICBpbnRvCisgICAgICAgbWVudXMsIGRpc3BsYXkgbWVudXMgb24gdGhlIHNjcmVlbiwgYW5kIGhhbmRsZSBpbnRlcmFjdGlvbgorICAgICAgIHdpdGggdGhlIHVzZXIuCisKKyAgICAgICBUaGUgPFNUUk9ORz5tZW51PC9TVFJPTkc+IGxpYnJhcnkgdXNlcyB0aGUgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gbGlicmFyaWVzLCBhbmQgIGEgIGN1cnNlcworICAgICAgIGluaXRpYWxpemF0aW9uICByb3V0aW5lICBzdWNoICBhcyAgPFNUUk9ORz5pbml0c2NyPC9TVFJPTkc+ICBtdXN0IGJlIGNhbGxlZAorICAgICAgIGJlZm9yZSB1c2luZyBhbnkgb2YgdGhlc2UgIGZ1bmN0aW9ucy4gICBUbyAgdXNlICB0aGUgIDxTVFJPTkc+bWVudTwvU1RST05HPgorICAgICAgIGxpYnJhcnksIGxpbmsgd2l0aCB0aGUgb3B0aW9ucyA8U1RST05HPi1sbWVudTwvU1RST05HPiA8U1RST05HPi1sY3Vyc2VzPC9TVFJPTkc+LgorCisgICA8U1RST05HPkN1cnJlbnQ8L1NUUk9ORz4gPFNUUk9ORz5EZWZhdWx0PC9TVFJPTkc+IDxTVFJPTkc+VmFsdWVzPC9TVFJPTkc+IDxTVFJPTkc+Zm9yPC9TVFJPTkc+IDxTVFJPTkc+SXRlbTwvU1RST05HPiA8U1RST05HPkF0dHJpYnV0ZXM8L1NUUk9ORz4KKyAgICAgICBUaGUgIDxTVFJPTkc+bWVudTwvU1RST05HPiAgbGlicmFyeSAgbWFpbnRhaW5zICBhICBkZWZhdWx0ICB2YWx1ZSAgZm9yIGl0ZW0KKyAgICAgICBhdHRyaWJ1dGVzLiAgWW91IGNhbiBnZXQgb3Igc2V0IHRoaXMgIGRlZmF1bHQgIGJ5ICBjYWxsaW5nCisgICAgICAgdGhlICBhcHByb3ByaWF0ZSAgPFNUUk9ORz5nZXRfPC9TVFJPTkc+ICBvciAgPFNUUk9ORz5zZXRfPC9TVFJPTkc+ICByb3V0aW5lIHdpdGggYSA8U1RST05HPk5VTEw8L1NUUk9ORz4gaXRlbQorICAgICAgIHBvaW50ZXIuICBDaGFuZ2luZyAgdGhpcyAgZGVmYXVsdCAgd2l0aCAgYSAgPFNUUk9ORz5zZXRfPC9TVFJPTkc+ICBmdW5jdGlvbgorICAgICAgIGFmZmVjdHMgIGZ1dHVyZSAgaXRlbSAgY3JlYXRpb25zLCAgYnV0IGRvZXMgbm90IGNoYW5nZSB0aGUKKyAgICAgICByZW5kZXJpbmcgb2YgaXRlbXMgYWxyZWFkeSBjcmVhdGVkLgorCisgICA8U1RST05HPlJvdXRpbmU8L1NUUk9ORz4gPFNUUk9ORz5OYW1lPC9TVFJPTkc+IDxTVFJPTkc+SW5kZXg8L1NUUk9ORz4KKyAgICAgICBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIGVhY2ggPFNUUk9ORz5tZW51PC9TVFJPTkc+IHJvdXRpbmUgYW5kICB0aGUgIG5hbWUKKyAgICAgICBvZiB0aGUgbWFudWFsIHBhZ2Ugb24gd2hpY2ggaXQgaXMgZGVzY3JpYmVkLgorCisgICAgICAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gUm91dGluZSBOYW1lICAgIE1hbnVhbCBQYWdlIE5hbWUKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIGN1cnJlbnRfaXRlbSAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGZyZWVfaXRlbSAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBmcmVlX21lbnUgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9uZXcuM3guaHRtbCI+bWVudV9uZXcoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGl0ZW1fY291bnQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGl0ZW1fZGVzY3JpcHRpb24gICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uYW1lLjN4Lmh0bWwiPm1pdGVtX25hbWUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGl0ZW1faW5kZXggICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQoM3gpPC9BPjwvU1RST05HPgorICAgICAgIGl0ZW1faW5pdCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX25hbWUgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmFtZS4zeC5odG1sIj5taXRlbV9uYW1lKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX29wdHMgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX29wdHNfb2ZmICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX29wdHNfb24gICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX3Rlcm0gICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV91c2VycHRyICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3VzZXJwdHIuM3guaHRtbCI+bWl0ZW1fdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgaXRlbV92YWx1ZSAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3ZhbHVlLjN4Lmh0bWwiPm1pdGVtX3ZhbHVlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBpdGVtX3Zpc2libGUgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdmlzaWJsZS4zeC5odG1sIj5taXRlbV92aXNpYmxlKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X2JhY2sgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9kcml2ZXIgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfZHJpdmVyLjN4Lmh0bWwiPm1lbnVfZHJpdmVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X2ZvcmUgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9mb3JtYXQgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfZm9ybWF0LjN4Lmh0bWwiPm1lbnVfZm9ybWF0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X2dyZXkgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9pbml0ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfaXRlbXMgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfbWFyayAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X29wdHMgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9vcHRzLjN4Lmh0bWwiPm1lbnVfb3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9vcHRzX29mZiAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfb3B0c19vbiAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X3BhZCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9wYXR0ZXJuICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcGF0dGVybi4zeC5odG1sIj5tZW51X3BhdHRlcm4oM3gpPC9BPjwvU1RST05HPgorCisgICAgICAgbWVudV9yZXF1ZXN0X2J5X25hbWUgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcmVxdWVzdG5hbWUuM3guaHRtbCI+bWVudV9yZXF1ZXN0bmFtZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9yZXF1ZXN0X25hbWUgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcmVxdWVzdG5hbWUuM3guaHRtbCI+bWVudV9yZXF1ZXN0bmFtZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV9zcGFjaW5nICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfc3BhY2luZy4zeC5odG1sIj5tZW51X3NwYWNpbmcoM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfc3ViICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgbWVudV90ZXJtICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIG1lbnVfdXNlcnB0ciAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3VzZXJwdHIuM3guaHRtbCI+bWVudV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBtZW51X3dpbiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIG5ld19pdGVtICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBuZXdfbWVudSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9uZXcuM3guaHRtbCI+bWVudV9uZXcoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHBvc19tZW51X2N1cnNvciAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2N1cnNvci4zeC5odG1sIj5tZW51X2N1cnNvcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgcG9zdF9tZW51ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcG9zdC4zeC5odG1sIj5tZW51X3Bvc3QoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNjYWxlX21lbnUgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2N1cnJlbnRfaXRlbSAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX2N1cnJlbnQuM3guaHRtbCI+bWl0ZW1fY3VycmVudCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X2l0ZW1faW5pdCAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9pdGVtX29wdHMgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9vcHRzLjN4Lmh0bWwiPm1pdGVtX29wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9pdGVtX3Rlcm0gICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfaXRlbV91c2VycHRyICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdXNlcnB0ci4zeC5odG1sIj5taXRlbV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfaXRlbV92YWx1ZSAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdmFsdWUuM3guaHRtbCI+bWl0ZW1fdmFsdWUoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X2JhY2sgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2F0dHJpYnV0ZXMuM3guaHRtbCI+bWVudV9hdHRyaWJ1dGVzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9mb3JlICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfZm9ybWF0ICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfZm9ybWF0LjN4Lmh0bWwiPm1lbnVfZm9ybWF0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9ncmV5ICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfaW5pdCAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X2l0ZW1zICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMoM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X21hcmsgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9vcHRzICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9wYWQgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfcGF0dGVybiAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcGF0dGVybi4zeC5odG1sIj5tZW51X3BhdHRlcm4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X3NwYWNpbmcgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3NwYWNpbmcuM3guaHRtbCI+bWVudV9zcGFjaW5nKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV9zdWIgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oM3gpPC9BPjwvU1RST05HPgorICAgICAgIHNldF9tZW51X3Rlcm0gICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2hvb2suM3guaHRtbCI+bWVudV9ob29rKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfbWVudV91c2VycHRyICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgc2V0X21lbnVfd2luICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfd2luLjN4Lmh0bWwiPm1lbnVfd2luKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICBzZXRfdG9wX3JvdyAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICB0b3Bfcm93ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICB1bnBvc3RfbWVudSAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9wb3N0LjN4Lmh0bWwiPm1lbnVfcG9zdCgzeCk8L0E+PC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzICB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gPFNUUk9ORz5OVUxMPC9TVFJPTkc+IG9uIGVycm9yLiAgUm91LQorICAgICAgIHRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIG9uZSBvZiAgdGhlICBmb2xsb3dpbmcKKyAgICAgICBlcnJvciBjb2RlczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfU1RBVEU8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmEtCisgICAgICAgICAgICB0aW9uIGZ1bmN0aW9uLgorCisgICAgICAgPFNUUk9ORz5FX05PX01BVENIPC9TVFJPTkc+CisgICAgICAgICAgICBDaGFyYWN0ZXIgZmFpbGVkIHRvIG1hdGNoLgorCisgICAgICAgPFNUUk9ORz5FX05PX1JPT008L1NUUk9ORz4KKyAgICAgICAgICAgIE1lbnUgaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisKKyAgICAgICA8U1RST05HPkVfTk9UX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgaGFzIG5vdCBiZWVuIHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfU0VMRUNUQUJMRTwvU1RST05HPgorICAgICAgICAgICAgVGhlIGRlc2lnbmF0ZWQgaXRlbSBjYW5ub3QgYmUgc2VsZWN0ZWQuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9SRVFVRVNUX0RFTklFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfVU5LTk9XTl9DT01NQU5EPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBkcml2ZXIgY29kZSBzYXcgYW4gdW5rbm93biByZXF1ZXN0IGNvZGUuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+IGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJtZW51XyIgZm9yCisgICAgICAgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZXMgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+IGFuZCA8U1RST05HPiZsdDtldGkuaCZndDs8L1NUUk9ORz4uCisKKyAgICAgICBJbiAgeW91ciAgbGlicmFyeSAgbGlzdCwgIGxpYm1lbnUuYSBzaG91bGQgYmUgYmVmb3JlIGxpYm4tCisgICAgICAgY3Vyc2VzLmE7IHRoYXQgaXMsIHlvdSB3YW50IHRvIHNheSBgLWxtZW51IC1sbmN1cnNlcycsIG5vdAorICAgICAgIHRoZSAgb3RoZXIgIHdheSAgYXJvdW5kICAod2hpY2ggd291bGQgdXN1YWxseSBnaXZlIGEgbGluay0KKyAgICAgICBlcnJvcikuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmN1cnNlcworICAgICAgIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfYXR0cmlidXRlcy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YzJjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfYXR0cmlidXRlcy4zeCx2IDEuMTAgMjAwOC8wOC8yMyAxODoyNDoyMyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X2F0dHJpYnV0ZXMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X2F0dHJpYnV0ZXMgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9hdHRyaWJ1dGVzLjN4Lmh0bWwiPm1lbnVfYXR0cmlidXRlcygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X2F0dHJpYnV0ZXM8L1NUUk9ORz4gLSBjb2xvciBhbmQgYXR0cmlidXRlIGNvbnRyb2wgZm9yIG1lbnVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X2ZvcmUoTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpOworICAgICAgIGNodHlwZSBtZW51X2ZvcmUoY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IHNldF9tZW51X2JhY2soTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpOworICAgICAgIGNodHlwZSBtZW51X2JhY2soY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IHNldF9tZW51X2dyZXkoTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpOworICAgICAgIGNodHlwZSBtZW51X2dyZXkoY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IHNldF9tZW51X3BhZChNRU5VICptZW51LCBpbnQgcGFkKTsKKyAgICAgICBpbnQgbWVudV9wYWQoY29uc3QgTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfbWVudV9mb3JlPC9TVFJPTkc+IHNldHMgdGhlIGZvcmVncm91bmQgYXR0cmlidXRlCisgICAgICAgb2YgPEVNPm1lbnU8L0VNPi4gVGhpcyBpcyB0aGUgIGhpZ2hsaWdodCAgdXNlZCAgZm9yICBzZWxlY3RlZCAgbWVudQorICAgICAgIGl0ZW1zLiAgIDxTVFJPTkc+bWVudV9mb3JlPC9TVFJPTkc+ICByZXR1cm5zIHRoZSBmb3JlZ3JvdW5kIGF0dHJpYnV0ZS4gIFRoZQorICAgICAgIGRlZmF1bHQgaXMgPFNUUk9ORz5BX1JFVkVSU0U8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9iYWNrPC9TVFJPTkc+IHNldHMgdGhlICBiYWNrZ3JvdW5kICBhdHRyaWJ1dGUKKyAgICAgICBvZiAgPEVNPm1lbnU8L0VNPi4gIFRoaXMgIGlzIHRoZSBoaWdobGlnaHQgdXNlZCBmb3Igc2VsZWN0YWJsZSAoYnV0CisgICAgICAgbm90ICBjdXJyZW50bHkgIHNlbGVjdGVkKSAgbWVudSAgIGl0ZW1zLiAgICBUaGUgICBmdW5jdGlvbgorICAgICAgIDxTVFJPTkc+bWVudV9iYWNrPC9TVFJPTkc+ICByZXR1cm5zICB0aGUgYmFja2dyb3VuZCBhdHRyaWJ1dGUuICBUaGUgZGVmYXVsdAorICAgICAgIGlzIDxTVFJPTkc+QV9OT1JNQUw8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9ncmV5PC9TVFJPTkc+ICBzZXRzICB0aGUgIGdyZXkgIGF0dHJpYnV0ZSAgb2YKKyAgICAgICA8RU0+bWVudTwvRU0+LiAgVGhpcyAgaXMgIHRoZSBoaWdobGlnaHQgdXNlZCBmb3IgdW4tc2VsZWN0YWJsZSBtZW51CisgICAgICAgaXRlbXMgaW4gbWVudXMgdGhhdCBwZXJtaXQgbW9yZSB0aGFuIG9uZSAgc2VsZWN0aW9uLiAgIFRoZQorICAgICAgIGZ1bmN0aW9uICAgPFNUUk9ORz5tZW51X2dyZXk8L1NUUk9ORz4gIHJldHVybnMgIHRoZSAgZ3JleSAgYXR0cmlidXRlLiAgIFRoZQorICAgICAgIGRlZmF1bHQgaXMgPFNUUk9ORz5BX1VOREVSTElORTwvU1RST05HPi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9tZW51X3BhZDwvU1RST05HPiBzZXRzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byAgZmlsbAorICAgICAgIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBwYXJ0cyBvZiBhIG1lbnUKKyAgICAgICBpdGVtLiAgPFNUUk9ORz5tZW51X3BhZDwvU1RST05HPiByZXR1cm5zIHRoZSBnaXZlbiAgbWVudSdzICBwYWQgIGNoYXJhY3Rlci4KKyAgICAgICBUaGUgZGVmYXVsdCBpcyBhIGJsYW5rLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4gYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gIm1lbnVfIiBmb3IKKyAgICAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViAgbWVudSAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfYXR0cmlidXRlcy4zeC5odG1sIj5tZW51X2F0dHJpYnV0ZXMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9jdXJzb3IuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X2N1cnNvci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNWRjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9jdXJzb3IuM3guaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9jdXJzb3IuM3gsdiAxLjYgMjAwNi8xMS8wNCAxNzoxMzo1NyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X2N1cnNvciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfY3Vyc29yIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X2N1cnNvci4zeC5odG1sIj5tZW51X2N1cnNvcigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfY3Vyc29yLjN4Lmh0bWwiPm1lbnVfY3Vyc29yKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfY3Vyc29yPC9TVFJPTkc+IC0gcG9zaXRpb24gYSBtZW51J3MgY3Vyc29yCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHBvc19tZW51X2N1cnNvcihjb25zdCBNRU5VICptZW51KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnBvc19tZW51X2N1cnNvcjwvU1RST05HPiAgcmVzdG9yZXMgdGhlIGN1cnNvciB0byB0aGUKKyAgICAgICBjdXJyZW50IHBvc2l0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudSdzIHNlbGVjdGVkIGl0ZW0uCisgICAgICAgVGhpcyAgaXMgIHVzZWZ1bCBhZnRlciA8U1RST05HPmN1cnNlczwvU1RST05HPiByb3V0aW5lcyBoYXZlIGJlZW4gY2FsbGVkIHRvCisgICAgICAgZG8gc2NyZWVuLXBhaW50aW5nIGluIHJlc3BvbnNlIHRvIGEgbWVudSBzZWxlY3QuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfTk9UX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgaGFzIG5vdCBiZWVuIHBvc3RlZC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9jdXJzb3IuM3guaHRtbCI+bWVudV9jdXJzb3IoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9kcml2ZXIuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X2RyaXZlci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTI2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9kcml2ZXIuM3guaHRtbApAQCAtMCwwICsxLDI1NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X2RyaXZlci4zeCx2IDEuMTUgMjAwOC8wNi8yMSAyMTo1NTozMCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X2RyaXZlciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfZHJpdmVyIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X2RyaXZlci4zeC5odG1sIj5tZW51X2RyaXZlcigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfZHJpdmVyLjN4Lmh0bWwiPm1lbnVfZHJpdmVyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfZHJpdmVyPC9TVFJPTkc+IC0gY29tbWFuZC1wcm9jZXNzaW5nIGxvb3Agb2YgdGhlIG1lbnUgc3lzdGVtCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IG1lbnVfZHJpdmVyKE1FTlUgKm1lbnUsIGludCBjKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBPbmNlIGEgbWVudSBoYXMgYmVlbiBwb3N0ZWQgKGRpc3BsYXllZCksIHlvdSBzaG91bGQgZnVubmVsCisgICAgICAgaW5wdXQgZXZlbnRzIHRvIGl0IHRocm91Z2ggPFNUUk9ORz5tZW51X2RyaXZlcjwvU1RST05HPi4gIFRoaXMgcm91dGluZSAgaGFzCisgICAgICAgdGhyZWUgbWFqb3IgaW5wdXQgY2FzZXM6CisKKyAgICAgICAtICBUaGUgIGlucHV0ICBpcyAgYSAgZm9ybSBuYXZpZ2F0aW9uIHJlcXVlc3QuICBOYXZpZ2F0aW9uCisgICAgICAgICAgcmVxdWVzdCBjb2RlcyBhcmUgY29uc3RhbnRzIGRlZmluZWQgaW4gPFNUUk9ORz4mbHQ7Zm9ybS5oJmd0OzwvU1RST05HPiwgIHdoaWNoCisgICAgICAgICAgYXJlIGRpc3RpbmN0IGZyb20gdGhlIGtleS0gYW5kIGNoYXJhY3RlciBjb2RlcyByZXR1cm5lZAorICAgICAgICAgIGJ5IDxTVFJPTkc+d2dldGNoPC9TVFJPTkc+LgorCisgICAgICAgLSAgVGhlIGlucHV0IGlzIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4gIFByaW50YWJsZSAgY2hhcmFjLQorICAgICAgICAgIHRlcnMgICh3aGljaCAgbXVzdCAgYmUgIHBvc2l0aXZlLCAgbGVzcyAgdGhhbiAgMjU2KSBhcmUKKyAgICAgICAgICBjaGVja2VkIGFjY29yZGluZyB0byB0aGUgcHJvZ3JhbSdzIGxvY2FsZSBzZXR0aW5ncy4KKworICAgICAgIC0gIFRoZSBpbnB1dCBpcyB0aGUgS0VZX01PVVNFIHNwZWNpYWwga2V5IGFzc29jaWF0ZWQgIHdpdGgKKyAgICAgICAgICBhbiBtb3VzZSBldmVudC4KKworICAgICAgIFRoZSBtZW51IGRyaXZlciByZXF1ZXN0cyBhcmUgYXMgZm9sbG93czoKKworICAgICAgIFJFUV9MRUZUX0lURU0KKyAgICAgICAgICAgIE1vdmUgbGVmdCB0byBhbiBpdGVtLgorCisgICAgICAgUkVRX1JJR0hUX0lURU0KKyAgICAgICAgICAgIE1vdmUgcmlnaHQgdG8gYW4gaXRlbS4KKworICAgICAgIFJFUV9VUF9JVEVNCisgICAgICAgICAgICBNb3ZlIHVwIHRvIGFuIGl0ZW0uCisKKyAgICAgICBSRVFfRE9XTl9JVEVNCisgICAgICAgICAgICBNb3ZlIGRvd24gdG8gYW4gaXRlbS4KKworICAgICAgIFJFUV9TQ1JfVUxJTkUKKyAgICAgICAgICAgIFNjcm9sbCB1cCBhIGxpbmUuCisKKyAgICAgICBSRVFfU0NSX0RMSU5FCisgICAgICAgICAgICBTY3JvbGwgZG93biBhIGxpbmUuCisKKyAgICAgICBSRVFfU0NSX0RQQUdFCisgICAgICAgICAgICBTY3JvbGwgZG93biBhIHBhZ2UuCisKKyAgICAgICBSRVFfU0NSX1VQQUdFCisgICAgICAgICAgICBTY3JvbGwgdXAgYSBwYWdlLgorCisgICAgICAgUkVRX0ZJUlNUX0lURU0KKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIGZpcnN0IGl0ZW0uCisKKyAgICAgICBSRVFfTEFTVF9JVEVNCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBsYXN0IGl0ZW0uCisKKyAgICAgICBSRVFfTkVYVF9JVEVNCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisKKyAgICAgICBSRVFfUFJFVl9JVEVNCisgICAgICAgICAgICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBpdGVtLgorCisgICAgICAgUkVRX1RPR0dMRV9JVEVNCisgICAgICAgICAgICBTZWxlY3QvZGVzZWxlY3QgYW4gaXRlbS4KKworICAgICAgIFJFUV9DTEVBUl9QQVRURVJOCisgICAgICAgICAgICBDbGVhciB0aGUgbWVudSBwYXR0ZXJuIGJ1ZmZlci4KKworICAgICAgIFJFUV9CQUNLX1BBVFRFUk4KKyAgICAgICAgICAgIERlbGV0ZSAgIHRoZSAgcHJldmlvdXMgIGNoYXJhY3RlciAgZnJvbSAgdGhlICBwYXR0ZXJuCisgICAgICAgICAgICBidWZmZXIuCisKKyAgICAgICBSRVFfTkVYVF9NQVRDSAorICAgICAgICAgICAgTW92ZSB0byB0aGUgbmV4dCBpdGVtIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIG1hdGNoLgorCisgICAgICAgUkVRX1BSRVZfTUFUQ0gKKyAgICAgICAgICAgIE1vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0gbWF0Y2hpbmcgdGhlIHBhdHRlcm4gbWF0Y2guCisKKyAgICAgICBJZiAgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIsIHRoZSBjb2RlCisgICAgICAgYXBwZW5kcyBpdCB0byB0aGUgcGF0dGVybiBidWZmZXIgYW5kIGF0dGVtcHRzIHRvICBtb3ZlICB0bworICAgICAgIHRoZSAgbmV4dCAgaXRlbSAgbWF0Y2hpbmcgdGhlIG5ldyBwYXR0ZXJuLiAgSWYgdGhlcmUgaXMgbm8KKyAgICAgICBzdWNoIG1hdGNoLCA8U1RST05HPm1lbnVfZHJpdmVyPC9TVFJPTkc+IHJldHVybnMgPFNUUk9ORz5FX05PX01BVENIPC9TVFJPTkc+IGFuZCBkZWxldGVzIHRoZQorICAgICAgIGFwcGVuZGVkIGNoYXJhY3RlciBmcm9tIHRoZSBidWZmZXIuCisKKyAgICAgICBJZiAgdGhlICBzZWNvbmQgIGFyZ3VtZW50ICBpcyBvbmUgb2YgdGhlIGFib3ZlIHByZS1kZWZpbmVkCisgICAgICAgcmVxdWVzdHMsIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbiBpcyBwZXJmb3JtZWQuCisKKyAgIDxTVFJPTkc+TU9VU0U8L1NUUk9ORz4gPFNUUk9ORz5IQU5ETElORzwvU1RST05HPgorICAgICAgIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIEtFWV9NT1VTRSBzcGVjaWFsICBrZXksICB0aGUKKyAgICAgICBhc3NvY2lhdGVkIG1vdXNlIGV2ZW50IGlzIHRyYW5zbGF0ZWQgaW50byBvbmUgb2YgdGhlIGFib3ZlCisgICAgICAgcHJlLWRlZmluZWQgcmVxdWVzdHMuICBDdXJyZW50bHkgb25seSBjbGlja3MgaW4gIHRoZSAgdXNlcgorICAgICAgIHdpbmRvdyAgKGUuZy4gIGluc2lkZSB0aGUgbWVudSBkaXNwbGF5IGFyZWEgb3IgdGhlIGRlY29yYS0KKyAgICAgICB0aW9uIHdpbmRvdykgYXJlIGhhbmRsZWQuCisKKyAgICAgICBJZiB5b3UgY2xpY2sgYWJvdmUgdGhlIGRpc3BsYXkgcmVnaW9uIG9mIHRoZSBtZW51OgorCisgICAgICAgICAgICAgIGEgUkVRX1NDUl9VTElORSBpcyBnZW5lcmF0ZWQgZm9yIGEgc2luZ2xlIGNsaWNrLAorCisgICAgICAgICAgICAgIGEgUkVRX1NDUl9VUEFHRSBpcyBnZW5lcmF0ZWQgZm9yIGEgZG91YmxlLWNsaWNrIGFuZAorCisgICAgICAgICAgICAgIGEgUkVRX0ZJUlNUX0lURU0gaXMgZ2VuZXJhdGVkIGZvciBhIHRyaXBsZS1jbGljay4KKworICAgICAgIElmIHlvdSBjbGljayBiZWxvdyB0aGUgZGlzcGxheSByZWdpb24gb2YgdGhlIG1lbnU6CisKKyAgICAgICAgICAgICAgYSBSRVFfU0NSX0RMSU5FIGlzIGdlbmVyYXRlZCBmb3IgYSBzaW5nbGUgY2xpY2ssCisKKyAgICAgICAgICAgICAgYSBSRVFfU0NSX0RQQUdFIGlzIGdlbmVyYXRlZCBmb3IgYSBkb3VibGUtY2xpY2sgYW5kCisKKyAgICAgICAgICAgICAgYSBSRVFfTEFTVF9JVEVNIGlzIGdlbmVyYXRlZCBmb3IgYSB0cmlwbGUtY2xpY2suCisKKyAgICAgICBJZiB5b3UgY2xpY2sgYXQgYW4gaXRlbSBpbnNpZGUgdGhlICBkaXNwbGF5ICBhcmVhICBvZiAgdGhlCisgICAgICAgbWVudToKKworICAgICAgICAgICAgICAtICB0aGUgbWVudSBjdXJzb3IgaXMgcG9zaXRpb25lZCB0byB0aGF0IGl0ZW0uCisKKyAgICAgICAgICAgICAgLSAgSWYgeW91IGRvdWJsZS1jbGljayBhbiBpdGVtIGEgUkVRX1RPR0dMRV9JVEVNIGlzCisgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCAgYW5kICA8U1RST05HPkVfVU5LTk9XTl9DT01NQU5EPC9TVFJPTkc+ICBpcyAgcmV0dXJuZWQuCisgICAgICAgICAgICAgICAgIFRoaXMgIHJldHVybiB2YWx1ZSBtYWtlcyBzZW5zZSwgYmVjYXVzZSBhIGRvdWJsZQorICAgICAgICAgICAgICAgICBjbGljayB1c3VhbGx5IG1lYW5zIHRoYXQgYW4gaXRlbS1zcGVjaWZpYyBhY3Rpb24KKyAgICAgICAgICAgICAgICAgc2hvdWxkICBiZSAgcmV0dXJuZWQuICBJdCBpcyBleGFjdGx5IHRoZSBwdXJwb3NlCisgICAgICAgICAgICAgICAgIG9mIHRoaXMgcmV0dXJuIHZhbHVlIHRvIHNpZ25hbCB0aGF0IGFuICBhcHBsaWNhLQorICAgICAgICAgICAgICAgICB0aW9uIHNwZWNpZmljIGNvbW1hbmQgc2hvdWxkIGJlIGV4ZWN1dGVkLgorCisgICAgICAgICAgICAgIC0gIElmICBhICB0cmFuc2xhdGlvbiAgaW50byAgYSAgcmVxdWVzdCAgd2FzICBkb25lLAorICAgICAgICAgICAgICAgICA8U1RST05HPm1lbnVfZHJpdmVyPC9TVFJPTkc+IHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGlzICByZXF1ZXN0LgorCisgICAgICAgSWYgIHlvdSBjbGlja2VkIG91dHNpZGUgdGhlIHVzZXIgd2luZG93IG9yIHRoZSBtb3VzZSBldmVudAorICAgICAgIGNvdWxkICBub3QgIGJlICB0cmFuc2xhdGVkICBpbnRvICAgYSAgIG1lbnUgICByZXF1ZXN0ICAgYW4KKyAgICAgICA8U1RST05HPkVfUkVRVUVTVF9ERU5JRUQ8L1NUUk9ORz4gaXMgcmV0dXJuZWQuCisKKyAgIDxTVFJPTkc+QVBQTElDQVRJT04tREVGSU5FRDwvU1RST05HPiA8U1RST05HPkNPTU1BTkRTPC9TVFJPTkc+CisgICAgICAgSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWl0aGVyIHByaW50YWJsZSBub3Igb25lIG9mIHRoZQorICAgICAgIGFib3ZlIHByZS1kZWZpbmVkIG1lbnUgcmVxdWVzdHMgb3IgIEtFWV9NT1VTRSwgIHRoZSAgZHJpdmUKKyAgICAgICBhc3N1bWVzICBpdCBpcyBhbiBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjb21tYW5kIGFuZCByZXR1cm5zCisgICAgICAgPFNUUk9ORz5FX1VOS05PV05fQ09NTUFORDwvU1RST05HPi4gIEFwcGxpY2F0aW9uLWRlZmluZWQgY29tbWFuZHMgc2hvdWxkIGJlCisgICAgICAgZGVmaW5lZCAgcmVsYXRpdmUgIHRvICA8U1RST05HPk1BWF9DT01NQU5EPC9TVFJPTkc+LCAgdGhlICBtYXhpbXVtIHZhbHVlIG9mCisgICAgICAgdGhlc2UgcHJlLWRlZmluZWQgcmVxdWVzdHMuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9kcml2ZXI8L1NUUk9ORz4gcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX1NUQVRFPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hLQorICAgICAgICAgICAgdGlvbiBmdW5jdGlvbi4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBoYXMgbm90IGJlZW4gcG9zdGVkLgorCisgICAgICAgPFNUUk9ORz5FX1VOS05PV05fQ09NTUFORDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgZHJpdmVyIGNvZGUgc2F3IGFuIHVua25vd24gcmVxdWVzdCBjb2RlLgorCisgICAgICAgPFNUUk9ORz5FX05PX01BVENIPC9TVFJPTkc+CisgICAgICAgICAgICBDaGFyYWN0ZXIgZmFpbGVkIHRvIG1hdGNoLgorCisgICAgICAgPFNUUk9ORz5FX1JFUVVFU1RfREVOSUVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9IndnZXRjaC4zeC5odG1sIj53Z2V0Y2goM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlcyA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLiBUaGUgIHN1cC0KKyAgICAgICBwb3J0IGZvciBtb3VzZSBldmVudHMgaXMgbmN1cnNlcyBzcGVjaWZpYy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfZHJpdmVyLjN4Lmh0bWwiPm1lbnVfZHJpdmVyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfZm9ybWF0LjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9mb3JtYXQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2I3M2M2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfZm9ybWF0LjN4Lmh0bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfZm9ybWF0LjN4LHYgMS4xMCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfZm9ybWF0IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9mb3JtYXQgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnVfZm9ybWF0LjN4Lmh0bWwiPm1lbnVfZm9ybWF0KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9mb3JtYXQuM3guaHRtbCI+bWVudV9mb3JtYXQoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9mb3JtYXQ8L1NUUk9ORz4gLSBzZXQgYW5kIGdldCBtZW51IHNpemVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X2Zvcm1hdChNRU5VICptZW51LCBpbnQgcm93cywgaW50IGNvbHMpOworICAgICAgIHZvaWQgbWVudV9mb3JtYXQoY29uc3QgTUVOVSAqbWVudSwgaW50ICpyb3dzLCBpbnQgKmNvbHMpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9tZW51X2Zvcm1hdDwvU1RST05HPiBzZXRzIHRoZSBtYXhpbXVtIGRpc3BsYXkgc2l6ZQorICAgICAgIG9mIHRoZSBnaXZlbiBtZW51LiAgSWYgdGhpcyBzaXplIGlzIHRvbyBzbWFsbCAgdG8gIGRpc3BsYXkKKyAgICAgICBhbGwgIG1lbnUgaXRlbXMsIHRoZSBtZW51IHdpbGwgYmUgbWFkZSBzY3JvbGxhYmxlLiBJZiB0aGlzCisgICAgICAgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgbWVudXMgc3Vid2luZG93IGFuZCB0aGUgIHN1YndpbmRvdworICAgICAgIGlzICB0b28gIHNtYWxsIHRvIGRpc3BsYXkgYWxsIG1lbnUgaXRlbXMsIDxTVFJPTkc+cG9zdF9tZW51KCk8L1NUUk9ORz4gd2lsbAorICAgICAgIGZhaWwuCisKKyAgICAgICBUaGUgIGRlZmF1bHQgIGZvcm1hdCAgaXMgIDE2ICByb3dzLCAgMSAgY29sdW1uLiAgICBDYWxsaW5nCisgICAgICAgPFNUUk9ORz5zZXRfbWVudV9mb3JtYXQ8L1NUUk9ORz4gIHdpdGggYSBudWxsIG1lbnUgcG9pbnRlciB3aWxsIGNoYW5nZSB0aGlzCisgICAgICAgZGVmYXVsdC4gIEEgemVybyByb3cgb3IgY29sdW1uIGFyZ3VtZW50IHRvIDxTVFJPTkc+c2V0X21lbnVfZm9ybWF0PC9TVFJPTkc+CisgICAgICAgaXMgIGludGVycHJldGVkICBhcyAgYSAgcmVxdWVzdCAgbm90IHRvIGNoYW5nZSB0aGUgY3VycmVudAorICAgICAgIHZhbHVlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9mb3JtYXQ8L1NUUk9ORz4gIHJldHVybnMgIHRoZSAgbWF4aW11bS1zaXplICBjb24tCisgICAgICAgc3RyYWludHMgIGZvciB0aGUgZ2l2ZW4gbWVudSBpbnRvIHRoZSBzdG9yYWdlIGFkZHJlc3NlZCBieQorICAgICAgIDxTVFJPTkc+cm93czwvU1RST05HPiBhbmQgPFNUUk9ORz5jb2xzPC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9OT1RfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViAgbWVudSAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2Zvcm1hdC4zeC5odG1sIj5tZW51X2Zvcm1hdCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X2hvb2suM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X2hvb2suM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWFkZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfaG9vay4zeC5odG1sCkBAIC0wLDAgKzEsMTM4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X2hvb2suM3gsdiAxLjkgMjAwNy8wMi8yNCAxNzozNDowOCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X2hvb2sgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X2hvb2sgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9ob29rLjN4Lmh0bWwiPm1lbnVfaG9vaygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X2hvb2s8L1NUUk9ORz4gLSBzZXQgaG9va3MgZm9yIGF1dG9tYXRpYyBpbnZvY2F0aW9uIGJ5IGFwcGxpY2EtCisgICAgICAgdGlvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X2l0ZW1faW5pdChNRU5VICptZW51LCBNZW51X0hvb2sgZnVuYyk7CisgICAgICAgTWVudV9Ib29rIGl0ZW1faW5pdChjb25zdCBNRU5VICptZW51KTsKKyAgICAgICBpbnQgc2V0X2l0ZW1fdGVybShNRU5VICptZW51LCBNZW51X0hvb2sgZnVuYyk7CisgICAgICAgTWVudV9Ib29rIGl0ZW1fdGVybShjb25zdCBNRU5VICptZW51KTsKKyAgICAgICBpbnQgc2V0X21lbnVfaW5pdChNRU5VICptZW51LCBNZW51X0hvb2sgZnVuYyk7CisgICAgICAgTWVudV9Ib29rIG1lbnVfaW5pdChjb25zdCBNRU5VICptZW51KTsKKyAgICAgICBpbnQgc2V0X21lbnVfdGVybShNRU5VICptZW51LCBNZW51X0hvb2sgZnVuYyk7CisgICAgICAgTWVudV9Ib29rIG1lbnVfdGVybShjb25zdCBNRU5VICptZW51KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgbWFrZSBpdCBwb3NzaWJsZSB0byBzZXQgaG9vayBmdW5jdGlvbnMgIHRvCisgICAgICAgYmUgY2FsbGVkIGF0IHZhcmlvdXMgcG9pbnRzIGluIHRoZSBhdXRvbWF0aWMgcHJvY2Vzc2luZyBvZgorICAgICAgIGlucHV0IGV2ZW50IGNvZGVzIGJ5IDxTVFJPTkc+bWVudV9kcml2ZXI8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfaXRlbV9pbml0PC9TVFJPTkc+IHNldHMgYSBob29rICB0byAgYmUgIGNhbGxlZCAgYXQKKyAgICAgICBtZW51LXBvc3QgIHRpbWUgIGFuZCAgZWFjaCAgdGltZSB0aGUgc2VsZWN0ZWQgaXRlbSBjaGFuZ2VzCisgICAgICAgKGFmdGVyIHRoZSBjaGFuZ2UpLiAgPFNUUk9ORz5pdGVtX2luaXQ8L1NUUk9ORz4gcmV0dXJucyAgdGhlICBjdXJyZW50ICBpdGVtCisgICAgICAgaW5pdCBob29rLCBpZiBhbnkgKDxTVFJPTkc+TlVMTDwvU1RST05HPiBpZiB0aGVyZSBpcyBubyBzdWNoIGhvb2spLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5zZXRfaXRlbV90ZXJtPC9TVFJPTkc+ICBzZXRzICBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0CisgICAgICAgbWVudS11bnBvc3QgdGltZSBhbmQgZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCAgaXRlbSAgY2hhbmdlcworICAgICAgIChiZWZvcmUgIHRoZSAgY2hhbmdlKS4gIDxTVFJPTkc+aXRlbV90ZXJtPC9TVFJPTkc+IHJldHVybnMgdGhlIGN1cnJlbnQgaXRlbQorICAgICAgIHRlcm0gaG9vaywgaWYgYW55ICg8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9tZW51X2luaXQ8L1NUUk9ORz4gc2V0cyBhIGhvb2sgIHRvICBiZSAgY2FsbGVkICBhdAorICAgICAgIG1lbnUtcG9zdCAgdGltZSAgYW5kICBqdXN0ICBhZnRlciAgdGhlIHRvcCByb3cgb24gdGhlIG1lbnUKKyAgICAgICBjaGFuZ2VzIG9uY2UgaXQgaXMgcG9zdGVkLiAgPFNUUk9ORz5tZW51X2luaXQ8L1NUUk9ORz4gcmV0dXJucyB0aGUgIGN1cnJlbnQKKyAgICAgICBtZW51IGluaXQgaG9vaywgaWYgYW55ICg8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X21lbnVfdGVybTwvU1RST05HPiAgc2V0cyAgYSBob29rIHRvIGJlIGNhbGxlZCBhdAorICAgICAgIG1lbnUtdW5wb3N0IHRpbWUgYW5kIGp1c3QgYmVmb3JlIHRoZSB0b3Agcm93IG9uICB0aGUgIG1lbnUKKyAgICAgICBjaGFuZ2VzICBvbmNlIGl0IGlzIHBvc3RlZC4gIDxTVFJPTkc+bWVudV90ZXJtPC9TVFJPTkc+IHJldHVybnMgdGhlIGN1cnJlbnQKKyAgICAgICBtZW51IHRlcm0gaG9vaywgaWYgYW55ICg8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm8gc3VjaCBob29rKS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIDxTVFJPTkc+TlVMTDwvU1RST05HPiBvbiBlcnJvci4gIE90aGVyCisgICAgICAgcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViAgbWVudSAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaG9vay4zeC5odG1sIj5tZW51X2hvb2soM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9pdGVtcy4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfaXRlbXMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDYwOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfaXRlbXMuM3guaHRtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9pdGVtcy4zeCx2IDEuNyAyMDA2LzExLzA0IDE4OjM1OjMxIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfaXRlbXMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X2l0ZW1zIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfaXRlbXMuM3guaHRtbCI+bWVudV9pdGVtcygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X2l0ZW1zPC9TVFJPTkc+ICAtIG1ha2UgYW5kIGJyZWFrIGNvbm5lY3Rpb25zIGJldHdlZW4gaXRlbXMgYW5kCisgICAgICAgbWVudXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X21lbnVfaXRlbXMoTUVOVSAqbWVudSwgSVRFTSAqKml0ZW1zKTsKKyAgICAgICBJVEVNICoqbWVudV9pdGVtcyhjb25zdCBNRU5VICptZW51KTsKKyAgICAgICBpbnQgaXRlbV9jb3VudChjb25zdCBNRU5VICptZW51KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5zZXRfbWVudV9pdGVtczwvU1RST05HPiBjaGFuZ2VzIHRoZSBpdGVtIHBvaW50ZXIgYXJyYXkKKyAgICAgICBvZiAgdGhlICBnaXZlbiAgPEVNPm1lbnU8L0VNPi4gICBUaGUgIGFycmF5IG11c3QgYmUgdGVybWluYXRlZCBieSBhCisgICAgICAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9pdGVtczwvU1RST05HPiByZXR1cm5zICB0aGUgIGl0ZW0gIGFycmF5ICBvZiAgdGhlCisgICAgICAgZ2l2ZW4gbWVudS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+aXRlbV9jb3VudDwvU1RST05HPiAgcmV0dXJucyAgdGhlICBjb3VudCBvZiBpdGVtcyBpbgorICAgICAgIDxFTT5tZW51PC9FTT4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5tZW51X2l0ZW1zPC9TVFJPTkc+IHJldHVybnMgYSBwb2ludGVyICAod2hpY2ggIG1heSAgYmUKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5pdGVtX2NvdW50PC9TVFJPTkc+ICByZXR1cm5zIDxTVFJPTkc+RVJSPC9TVFJPTkc+ICh0aGUgZ2VuZXJhbCA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIGVycm9yIHJldHVybiB2YWx1ZSkgaWYgaXRzIDxFTT5tZW51PC9FTT4gcGFyYW1ldGVyIGlzIDxTVFJPTkc+TlVMTDwvU1RST05HPi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9tZW51X2l0ZW1zPC9TVFJPTkc+IHJldHVybnMgb25lIG9mICB0aGUgIGZvbGxvd2luZworICAgICAgIGNvZGVzIG9uIGVycm9yOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisKKyAgICAgICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBUaGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBUaGUgIFNWcjQgIG1lbnUgIGxpYnJhcnkgICBkb2N1bWVudGF0aW9uICAgc3BlY2lmaWVzICAgdGhlCisgICAgICAgPFNUUk9ORz5pdGVtX2NvdW50PC9TVFJPTkc+ICBlcnJvciB2YWx1ZSBhcyAtMSAod2hpY2ggaXMgdGhlIHZhbHVlIG9mIDxTVFJPTkc+RVJSPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiAgZm9yICBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X2l0ZW1zLjN4Lmh0bWwiPm1lbnVfaXRlbXMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9tYXJrLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9tYXJrLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyOTk2MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X21hcmsuM3guaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9tYXJrLjN4LHYgMS45IDIwMDYvMTEvMDQgMTg6MzM6MTggdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9tYXJrIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9tYXJrIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X21hcmsuM3guaHRtbCI+bWVudV9tYXJrKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfbWFyay4zeC5odG1sIj5tZW51X21hcmsoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9tYXJrPC9TVFJPTkc+IC0gZ2V0IGFuZCBzZXQgdGhlIG1lbnUgbWFyayBzdHJpbmcKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X21lbnVfbWFyayhNRU5VICptZW51LCBjb25zdCBjaGFyICptYXJrKTsKKyAgICAgICBjb25zdCBjaGFyICptZW51X21hcmsoY29uc3QgTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgSW4gIG9yZGVyICB0byBtYWtlIG1lbnUgc2VsZWN0aW9ucyB2aXNpYmxlIG9uIG9sZGVyIHRlcm1pLQorICAgICAgIG5hbHMgd2l0aG91dCBoaWdobGlnaHRpbmcgb3IgY29sb3IgIGNhcGFiaWxpdHksICB0aGUgIG1lbnUKKyAgICAgICBsaWJyYXJ5ICBtYXJrcyAgc2VsZWN0ZWQgIGl0ZW1zICBpbiAgYSAgbWVudSB3aXRoIGEgcHJlZml4CisgICAgICAgc3RyaW5nLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X21lbnVfbWFyazwvU1RST05HPiBzZXRzIHRoZSBtYXJrICBzdHJpbmcgIGZvciAgdGhlCisgICAgICAgZ2l2ZW4gIG1lbnUuICAgQ2FsbGluZyA8U1RST05HPnNldF9tZW51X21hcms8L1NUUk9ORz4gd2l0aCBhIG51bGwgbWVudSBpdGVtCisgICAgICAgd2lsbCBhYm9saXNoIHRoZSBtYXJrICBzdHJpbmcuICAgTm90ZSAgdGhhdCAgY2hhbmdpbmcgIHRoZQorICAgICAgIGxlbmd0aCAgb2YgIHRoZSAgbWFyayAgc3RyaW5nIGZvciBhIG1lbnUgd2hpbGUgdGhlIG1lbnUgaXMKKyAgICAgICBwb3N0ZWQgaXMgbGlrZWx5IHRvIHByb2R1Y2UgdW5oZWxwZnVsIGJlaGF2aW9yLgorCisgICAgICAgVGhlIGRlZmF1bHQgc3RyaW5nIGlzICItIiAoYSBkYXNoKS4gQ2FsbGluZyAgPFNUUk9ORz5zZXRfbWVudV9tYXJrPC9TVFJPTkc+CisgICAgICAgd2l0aCBhIG5vbi08U1RST05HPk5VTEw8L1NUUk9ORz4gbWVudSBhcmd1bWVudCB3aWxsIGNoYW5nZSB0aGlzIGRlZmF1bHQuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9tYXJrPC9TVFJPTkc+IHJldHVybnMgdGhlIG1lbnUncyBtYXJrIHN0cmluZyAob3IKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4gaWYgdGhlcmUgaXMgbm9uZSkuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm1lbnVfbWFyazwvU1RST05HPiByZXR1cm5zIGEgIHBvaW50ZXIgICh3aGljaCAgbWF5ICBiZQorICAgICAgIDxTVFJPTkc+TlVMTDwvU1RST05HPikuICBJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X21lbnVfbWFyazwvU1RST05HPiBtYXkgcmV0dXJuIHRoZSBmb2xsb3dpbmcgZXJyb3IKKyAgICAgICBjb2RlczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViAgbWVudSAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfbWFyay4zeC5odG1sIj5tZW51X21hcmsoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9uZXcuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X25ldy4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmRkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9uZXcuM3guaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9uZXcuM3gsdiAxLjkgMjAwNi8xMS8wNCAxODozMTozNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X25ldyAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfbmV3IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X25ldy4zeC5odG1sIj5tZW51X25ldygzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfbmV3LjN4Lmh0bWwiPm1lbnVfbmV3KDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfbmV3PC9TVFJPTkc+IC0gY3JlYXRlIGFuZCBkZXN0cm95IG1lbnVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgTUVOVSAqbmV3X21lbnUoSVRFTSAqKml0ZW1zKTsKKyAgICAgICBpbnQgZnJlZV9tZW51KE1FTlUgKm1lbnUpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+bmV3X21lbnU8L1NUUk9ORz4gIGNyZWF0ZXMgYSBuZXcgbWVudSBjb25uZWN0ZWQgdG8gYQorICAgICAgIHNwZWNpZmllZCBpdGVtIHBvaW50ZXIgYXJyYXkgKHdoaWNoICBtdXN0ICBiZSAgPFNUUk9ORz5OVUxMPC9TVFJPTkc+LXRlcm1pLQorICAgICAgIG5hdGVkKS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+ZnJlZV9tZW51PC9TVFJPTkc+ICBkaXNjb25uZWN0cyAgPEVNPm1lbnU8L0VNPiAgZnJvbSBpdHMgaXRlbQorICAgICAgIGFycmF5IGFuZCBmcmVlcyB0aGUgc3RvcmFnZSBhbGxvY2F0ZWQgZm9yIHRoZSBtZW51LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5uZXdfbWVudTwvU1RST05HPiByZXR1cm5zICA8U1RST05HPk5VTEw8L1NUUk9ORz4gIG9uICBlcnJvci4gICBJdCAgc2V0cworICAgICAgIGVycm5vIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24ncyBmYWlsdXJlOgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQsIGUuZy4sIG1hbGxvYyBmYWlsdXJlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZnJlZV9tZW51PC9TVFJPTkc+IHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lICBkZXRlY3RlZCAgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X25ldy4zeC5odG1sIj5tZW51X25ldygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X29wdHMuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X29wdHMuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmI5NjcwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfb3B0cy4zeC5odG1sCkBAIC0wLDAgKzEsMTQ4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X29wdHMuM3gsdiAxLjEwIDIwMDcvMDIvMjQgMTc6MzM6NTkgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9vcHRzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9vcHRzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X29wdHMuM3guaHRtbCI+bWVudV9vcHRzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9vcHRzPC9TVFJPTkc+IC0gc2V0IGFuZCBnZXQgbWVudSBvcHRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9tZW51X29wdHMoTUVOVSAqbWVudSwgTWVudV9PcHRpb25zIG9wdHMpOworICAgICAgIGludCBtZW51X29wdHNfb24oTUVOVSAqbWVudSwgTWVudV9PcHRpb25zIG9wdHMpOworICAgICAgIGludCBtZW51X29wdHNfb2ZmKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKTsKKyAgICAgICBNZW51X09wdGlvbnMgbWVudV9vcHRzKGNvbnN0IE1FTlUgKm1lbnUpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X21lbnVfb3B0czwvU1RST05HPiAgc2V0cyAgYWxsICB0aGUgIGdpdmVuIG1lbnUncworICAgICAgIG9wdGlvbiBiaXRzICAobWVudSAgb3B0aW9uICBiaXRzICBtYXkgIGJlICBsb2dpY2FsbHktT1InZWQKKyAgICAgICB0b2dldGhlcikuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9vcHRzX29uPC9TVFJPTkc+IHR1cm5zIG9uIHRoZSBnaXZlbiBvcHRpb24gYml0cywKKyAgICAgICBhbmQgbGVhdmVzIG90aGVycyBhbG9uZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm1lbnVfb3B0c19vZmY8L1NUUk9ORz4gIHR1cm5zICBvZmYgIHRoZSAgZ2l2ZW4gIG9wdGlvbgorICAgICAgIGJpdHMsIGFuZCBsZWF2ZXMgb3RoZXJzIGFsb25lLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5tZW51X29wdHM8L1NUUk9ORz4gcmV0dXJucyB0aGUgbWVudSdzIGN1cnJlbnQgb3B0aW9uCisgICAgICAgYml0cy4KKworICAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZGVmaW5lZCAoYWxsIGFyZSBvbiBieSBkZWZhdWx0KToKKworICAgICAgIE9fT05FVkFMVUUKKyAgICAgICAgICAgIE9ubHkgb25lIGl0ZW0gY2FuIGJlIHNlbGVjdGVkIGZvciB0aGlzIG1lbnUuCisKKyAgICAgICBPX1NIT1dERVNDCisgICAgICAgICAgICBEaXNwbGF5ICB0aGUgIGl0ZW0gIGRlc2NyaXB0aW9ucyAgd2hlbiAgdGhlICBtZW51ICBpcworICAgICAgICAgICAgcG9zdGVkLgorCisgICAgICAgT19ST1dNQUpPUgorICAgICAgICAgICAgRGlzcGxheSB0aGUgbWVudSBpbiByb3ctbWFqb3Igb3JkZXIuCisKKyAgICAgICBPX0lHTk9SRUNBU0UKKyAgICAgICAgICAgIElnbm9yZSB0aGUgY2FzZSB3aGVuIHBhdHRlcm4tbWF0Y2hpbmcuCisKKyAgICAgICBPX1NIT1dNQVRDSAorICAgICAgICAgICAgTW92ZSB0aGUgY3Vyc29yIHRvIHdpdGhpbiB0aGUgaXRlbSAgbmFtZSAgd2hpbGUgIHBhdC0KKyAgICAgICAgICAgIHRlcm4tbWF0Y2hpbmcuCisKKyAgICAgICBPX05PTkNZQ0xJQworICAgICAgICAgICAgRG9uJ3QgICB3cmFwICAgYXJvdW5kICBuZXh0LWl0ZW0gIGFuZCAgcHJldmlvdXMtaXRlbSwKKyAgICAgICAgICAgIHJlcXVlc3RzIHRvIHRoZSBvdGhlciBlbmQgb2YgdGhlIG1lbnUuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEV4Y2VwdCBmb3IgPFNUUk9ORz5tZW51X29wdHM8L1NUUk9ORz4sIGVhY2ggcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sLQorICAgICAgIGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViAgbWVudSAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9wYXR0ZXJuLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0NWM1NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X3BhdHRlcm4uM3guaHRtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X3BhdHRlcm4uM3gsdiAxLjExIDIwMDgvMDYvMjEgMjE6NTg6MjAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9wYXR0ZXJuIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9wYXR0ZXJuIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X3BhdHRlcm4uM3guaHRtbCI+bWVudV9wYXR0ZXJuKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcGF0dGVybi4zeC5odG1sIj5tZW51X3BhdHRlcm4oM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9wYXR0ZXJuPC9TVFJPTkc+IC0gZ2V0IGFuZCBzZXQgYSBtZW51J3MgcGF0dGVybiBidWZmZXIKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X21lbnVfcGF0dGVybihNRU5VICptZW51LCBjb25zdCBjaGFyICpwYXR0ZXJuKTsKKyAgICAgICBjaGFyICptZW51X3BhdHRlcm4oY29uc3QgTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgRXZlcnkgIG1lbnUgIGhhcyAgYW4gIGFzc29jaWF0ZWQgcGF0dGVybiBtYXRjaCBidWZmZXIuICBBcworICAgICAgIGlucHV0IGV2ZW50cyB0aGF0IGFyZSBwcmludGFibGUgY2hhcmFjdGVycyBjb21lICBpbiwgIHRoZXkKKyAgICAgICBhcmUgIGFwcGVuZGVkIHRvIHRoaXMgbWF0Y2ggYnVmZmVyIGFuZCB0ZXN0ZWQgZm9yIGEgbWF0Y2gsCisgICAgICAgYXMgZGVzY3JpYmVkIGluIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9kcml2ZXIuM3guaHRtbCI+bWVudV9kcml2ZXIoM3gpPC9BPjwvU1RST05HPi4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9tZW51X3BhdHRlcm48L1NUUk9ORz4gc2V0cyB0aGUgcGF0dGVybiBidWZmZXIgIGZvcgorICAgICAgIHRoZSAgZ2l2ZW4gbWVudSBhbmQgdHJpZXMgdG8gZmluZCB0aGUgZmlyc3QgbWF0Y2hpbmcgaXRlbS4KKyAgICAgICBJZiBpdCBzdWNjZWVkcywgdGhhdCBpdGVtIGJlY29tZXMgIGN1cnJlbnQ7ICBpZiAgbm90LCAgdGhlCisgICAgICAgY3VycmVudCBpdGVtIGRvZXMgbm90IGNoYW5nZS4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+bWVudV9wYXR0ZXJuPC9TVFJPTkc+ICByZXR1cm5zIHRoZSBwYXR0ZXJuIGJ1ZmZlciBvZgorICAgICAgIHRoZSBnaXZlbiA8RU0+bWVudTwvRU0+LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5tZW51X3BhdHRlcm48L1NUUk9ORz4gcmV0dXJucyBhIHBvaW50ZXIsIHdoaWNoIGlzIDxTVFJPTkc+TlVMTDwvU1RST05HPgorICAgICAgIGlmIHRoZSA8RU0+bWVudTwvRU0+IHBhcmFtZXRlciBpcyA8U1RST05HPk5VTEw8L1NUUk9ORz4uICBPdGhlcndpc2UsIGl0IGlzIGEgcG9pbnRlcgorICAgICAgIHRvIGEgc3RyaW5nIHdoaWNoIGlzIGVtcHR5IGlmIG5vIHBhdHRlcm4gaGFzIGJlZW4gc2V0LiAgSXQKKyAgICAgICBkb2VzIG5vdCBzZXQgZXJybm8uCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9tZW51X3BhdHRlcm48L1NUUk9ORz4gIG1heSAgcmV0dXJuIHRoZSBmb2xsb3dpbmcKKyAgICAgICBlcnJvciBjb2RlczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfU1RBVEU8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmEtCisgICAgICAgICAgICB0aW9uIGZ1bmN0aW9uLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9DT05ORUNURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIE5vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gbWVudS4KKworICAgICAgIDxTVFJPTkc+RV9OT19NQVRDSDwvU1RST05HPgorICAgICAgICAgICAgQ2hhcmFjdGVyIGZhaWxlZCB0byBtYXRjaC4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcGF0dGVybi4zeC5odG1sIj5tZW51X3BhdHRlcm4oM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9wb3N0LjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV9wb3N0LjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwNTViZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X3Bvc3QuM3guaHRtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWVudV9wb3N0LjN4LHYgMS45IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV9wb3N0IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9wb3N0IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtZW51X3Bvc3QuM3guaHRtbCI+bWVudV9wb3N0KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcG9zdC4zeC5odG1sIj5tZW51X3Bvc3QoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9wb3N0PC9TVFJPTkc+ICAtICB3cml0ZSBvciBlcmFzZSBtZW51cyBmcm9tIGFzc29jaWF0ZWQgc3Vid2luLQorICAgICAgIGRvd3MKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgcG9zdF9tZW51KE1FTlUgKm1lbnUpOworICAgICAgIGludCB1bnBvc3RfbWVudShNRU5VICptZW51KTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5wb3N0X21lbnU8L1NUUk9ORz4gZGlzcGxheXMgYSBtZW51IHRvICBpdHMgIGFzc29jaWF0ZWQKKyAgICAgICBzdWJ3aW5kb3cuICAgVG8gdHJpZ2dlciBwaHlzaWNhbCBkaXNwbGF5IG9mIHRoZSBzdWJ3aW5kb3csCisgICAgICAgdXNlICA8U1RST05HPnJlZnJlc2g8L1NUUk9ORz4gIG9yICBzb21lICBlcXVpdmFsZW50ICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgcm91dGluZSAgICh0aGUKKyAgICAgICBpbXBsaWNpdCAgPFNUUk9ORz5kb3VwZGF0ZTwvU1RST05HPiAgdHJpZ2dlcmVkICBieSAgYW4gPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gaW5wdXQgcmVxdWVzdAorICAgICAgIHdpbGwgZG8pLiA8U1RST05HPnBvc3RfbWVudTwvU1RST05HPiByZXNldHMgdGhlICBzZWxlY3Rpb24gIHN0YXR1cyAgb2YgIGFsbAorICAgICAgIGl0ZW1zLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz51bnBvc3RfbWVudTwvU1RST05HPiBlcmFzZXMgbWVudSBmcm9tIGl0cyBhc3NvY2lhdGVkCisgICAgICAgc3Vid2luZG93LgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+CisgICAgICAgICAgICBSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciAgb3V0LW9mLXJhbmdlICBhcmd1LQorICAgICAgICAgICAgbWVudC4KKworICAgICAgIDxTVFJPTkc+RV9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9TVEFURTwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYS0KKyAgICAgICAgICAgIHRpb24gZnVuY3Rpb24uCisKKyAgICAgICA8U1RST05HPkVfTk9fUk9PTTwvU1RST05HPgorICAgICAgICAgICAgTWVudSBpcyB0b28gbGFyZ2UgZm9yIGl0cyB3aW5kb3cuIFlvdSBzaG91bGQgY29uc2lkZXIKKyAgICAgICAgICAgIHRvIHVzZSA8U1RST05HPnNldF9tZW51X2Zvcm1hdCgpPC9TVFJPTkc+IHRvIHNvbHZlIHRoZSBwcm9ibGVtLgorCisgICAgICAgPFNUUk9ORz5FX05PVF9QT1NURUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGhhcyBub3QgYmVlbiBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfTk9UX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3Bvc3QuM3guaHRtbCI+bWVudV9wb3N0KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfcmVxdWVzdG5hbWUuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhOWVlOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfcmVxdWVzdG5hbWUuM3gsdiAxLjcgMjAwNi8xMS8wNCAxNzo1NjowOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X3JlcXVlc3RuYW1lIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWVudV9yZXF1ZXN0bmFtZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV9yZXF1ZXN0bmFtZS4zeC5odG1sIj5tZW51X3JlcXVlc3RuYW1lKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3JlcXVlc3RuYW1lLjN4Lmh0bWwiPm1lbnVfcmVxdWVzdG5hbWUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWVudV9yZXF1ZXN0bmFtZTwvU1RST05HPiAtIGhhbmRsZSBwcmludGFibGUgbWVudSByZXF1ZXN0IG5hbWVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgY29uc3QgY2hhciAqbWVudV9yZXF1ZXN0X25hbWUoaW50IHJlcXVlc3QpOworICAgICAgIGludCBtZW51X3JlcXVlc3RfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9yZXF1ZXN0X25hbWU8L1NUUk9ORz4gcmV0dXJucyB0aGUgcHJpbnRhYmxlIG5hbWUKKyAgICAgICBvZiBhIG1lbnUgcmVxdWVzdCBjb2RlLgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPm1lbnVfcmVxdWVzdF9ieV9uYW1lPC9TVFJPTkc+IHNlYXJjaGVzIGluIHRoZSBuYW1lLXRhLQorICAgICAgIGJsZSAgZm9yICBhICByZXF1ZXN0ICB3aXRoICB0aGUgZ2l2ZW4gbmFtZSBhbmQgcmV0dXJucyBpdHMKKyAgICAgICByZXF1ZXN0IGNvZGUuICBPdGhlcndpc2UgRV9OT19NQVRDSCBpcyByZXR1cm5lZC4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X3JlcXVlc3RfbmFtZTwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+TlVMTDwvU1RST05HPiBvbiBlcnJvciBhbmQgc2V0cyBlcnJubyAgdG8KKyAgICAgICA8U1RST05HPkVfQkFEX0FSR1VNRU5UPC9TVFJPTkc+LgorICAgICAgIDxTVFJPTkc+bWVudV9yZXF1ZXN0X2J5X25hbWU8L1NUUk9ORz4gcmV0dXJucyA8U1RST05HPkVfTk9fTUFUQ0g8L1NUUk9ORz4gb24gZXJyb3IuICBJdCBkb2VzCisgICAgICAgbm90IHNldCBlcnJuby4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBhcmUgIHNwZWNpZmljICB0byBuY3Vyc2VzLiAgVGhleSB3ZXJlIG5vdAorICAgICAgIHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gIFYgIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCAgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSBjb24tCisgICAgICAgZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1lbnVfcmVxdWVzdG5hbWUuM3guaHRtbCI+bWVudV9yZXF1ZXN0bmFtZSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X3NwYWNpbmcuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9tZW51X3NwYWNpbmcuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZlOTVjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfc3BhY2luZy4zeC5odG1sCkBAIC0wLDAgKzEsMTI5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtZW51X3NwYWNpbmcuM3gsdiAxLjggMjAwNC8xMi8xMSAyMzozOTowNyB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5tZW51X3NwYWNpbmcgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X3NwYWNpbmcgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1lbnVfc3BhY2luZy4zeC5odG1sIj5tZW51X3NwYWNpbmcoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV9zcGFjaW5nLjN4Lmh0bWwiPm1lbnVfc3BhY2luZygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X3NwYWNpbmc8L1NUUk9ORz4gLSBDb250cm9sIHNwYWNpbmcgYmV0d2VlbiBtZW51IGl0ZW1zLgorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGludCBzZXRfbWVudV9zcGFjaW5nKE1FTlUgKm1lbnUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwY19kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BjX3Jvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwY19jb2x1bW5zKTsKKyAgICAgICBpbnQgbWVudV9zcGFjaW5nKGNvbnN0IE1FTlUgKm1lbnUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNwY19kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCogc3BjX3Jvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNwY19jb2x1bW5zKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9tZW51X3NwYWNpbmc8L1NUUk9ORz4gIHNldHMgdGhlIHNwYWNpbmcgaW5mb3JtYS0KKyAgICAgICB0aW9ucyBmb3IgdGhlIG1lbnUuICA8U1RST05HPnNwY19kZXNjcmlwdGlvbjwvU1RST05HPiBjb250cm9scyAgdGhlICBudW1iZXIKKyAgICAgICBvZiBzcGFjZXMgYmV0d2VlbiBhbiBpdGVtIG5hbWUgYW5kIGFuIGl0ZW0gZGVzY3JpcHRpb24uIEl0CisgICAgICAgbXVzdCBub3QgYmUgbGFyZ2VyIHRoYW4gPFNUUk9ORz5UQUJTSVpFPC9TVFJPTkc+LiBUaGUgbWVudSBzeXN0ZW0gIHB1dHMgIGluCisgICAgICAgdGhlICBtaWRkbGUgIG9mICB0aGlzICBzcGFjaW5nIGFyZWEgdGhlIHBhZCBjaGFyYWN0ZXIuIFRoZQorICAgICAgIHJlbWFpbmluZyBwYXJ0cyBhcmUgZmlsbGVkIHdpdGggc3BhY2VzLiAgPFNUUk9ORz5zcGNfcm93czwvU1RST05HPiBjb250cm9scworICAgICAgIHRoZSAgbnVtYmVyIG9mIHJvd3MgdGhhdCBhcmUgdXNlZCBmb3IgYW4gaXRlbS4gSXQgbXVzdCBub3QKKyAgICAgICBiZSBsYXJnZXIgdGhhbiAzLiBUaGUgbWVudSBzeXN0ZW0gaW5zZXJ0cyB0aGUgYmxhbmsgIGxpbmVzCisgICAgICAgYmV0d2VlbiAgaXRlbSByb3dzLCB0aGVzZSBsaW5lcyB3aWxsIGNvbnRhaW4gdGhlIHBhZCBjaGFyLQorICAgICAgIGFjdGVyIGluIHRoZSBhcHByb3ByaWF0ZSBwb3NpdGlvbnMuICA8U1RST05HPnNwY19jb2x1bW5zPC9TVFJPTkc+ICBjb250cm9scworICAgICAgIHRoZSBudW1iZXIgb2YgYmxhbmtzIGJldHdlZW4gY29sdW1ucyBvZiBpdGVtcy4gSXQgbXVzdCBub3QKKyAgICAgICBiZSBsYXJnZXIgdGhhbiBUQUJTSVpFLiAgQSB2YWx1ZSBvZiAwIGZvciBhbGwgdGhlICBzcGFjaW5nCisgICAgICAgdmFsdWVzICByZXNldHMgIHRoZW0gdG8gdGhlIGRlZmF1bHQsIHdoaWNoIGlzIDEgZm9yIGFsbCBvZgorICAgICAgIHRoZW0uCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+bWVudV9zcGFjaW5nPC9TVFJPTkc+IHBhc3NlcyBiYWNrIHRoZSBzcGFjaW5nIGluZm8gZm9yCisgICAgICAgdGhlIG1lbnUuIElmIGEgcG9pbnRlciBpcyBOVUxMLCB0aGlzIHNwZWNpZmljIGluZm8gaXMgc2ltLQorICAgICAgIHBseSBub3QgcmV0dXJuZWQuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEJvdGggcm91dGluZXMgcmV0dXJuIDxTVFJPTkc+RV9PSzwvU1RST05HPiBvbiBzdWNjZXNzLiA8U1RST05HPnNldF9tZW51X3NwYWNpbmc8L1NUUk9ORz4gbWF5CisgICAgICAgcmV0dXJuICA8U1RST05HPkVfUE9TVEVEPC9TVFJPTkc+ICBpZiB0aGUgbWVudSBpcyBwb3N0ZWQsIG9yIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICBpZiBvbmUgb2YgdGhlIHNwYWNpbmcgdmFsdWVzIGlzIG91dCBvZiByYW5nZS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBhcmUgIHNwZWNpZmljICB0byBuY3Vyc2VzLiAgVGhleSB3ZXJlIG5vdAorICAgICAgIHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gIFYgIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICBJdCAgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSBjb24tCisgICAgICAgZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3NwYWNpbmcuM3guaHRtbCI+bWVudV9zcGFjaW5nKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfdXNlcnB0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzQxY2QKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV91c2VycHRyLjN4Lmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfdXNlcnB0ci4zeCx2IDEuOCAyMDA2LzExLzA0IDE4OjIxOjAzIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1lbnVfdXNlcnB0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1lbnVfdXNlcnB0ciAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV91c2VycHRyLjN4Lmh0bWwiPm1lbnVfdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3VzZXJwdHIuM3guaHRtbCI+bWVudV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfdXNlcnB0cjwvU1RST05HPiAtIGFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggYSBtZW51IGl0ZW0KKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X21lbnVfdXNlcnB0cihNRU5VICptZW51LCB2b2lkICp1c2VycHRyKTsKKyAgICAgICB2b2lkICptZW51X3VzZXJwdHIoY29uc3QgTUVOVSAqbWVudSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgRXZlcnkgbWVudSBhbmQgZXZlcnkgbWVudSBpdGVtIGhhcyBhICBmaWVsZCAgdGhhdCAgY2FuICBiZQorICAgICAgIHVzZWQgdG8gaG9sZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBkYXRhICh0aGF0IGlzLCB0aGUgbWVudS0KKyAgICAgICBkcml2ZXIgY29kZSBsZWF2ZXMgaXQgYWxvbmUpLiAgVGhlc2UgZnVuY3Rpb25zIGdldCBhbmQgc2V0CisgICAgICAgdGhlIG1lbnUgdXNlciBwb2ludGVyIGZpZWxkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1lbnVfdXNlcnB0cjwvU1RST05HPiAgcmV0dXJucyAgYSAgcG9pbnRlciAod2hpY2ggbWF5IGJlIDxTVFJPTkc+TlVMTDwvU1RST05HPikuICBJdAorICAgICAgIGRvZXMgbm90IHNldCBlcnJuby4KKworICAgICAgIDxTVFJPTkc+c2V0X21lbnVfdXNlcnB0cjwvU1RST05HPiByZXR1cm5zIDxTVFJPTkc+RV9PSzwvU1RST05HPiAoc3VjY2VzcykuCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9Im1lbnUuM3guaHRtbCI+bWVudSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFRoZSBoZWFkZXIgZmlsZSA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlcgorICAgICAgIGZpbGUgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXNlICByb3V0aW5lcyAgZW11bGF0ZSAgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkKKyAgICAgICB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKworICAgICAgIFRoZSB1c2VyIHBvaW50ZXIgaXMgYSB2b2lkIHBvaW50ZXIuICBXZSBjaG9zZSBub3QgdG8gbGVhdmUKKyAgICAgICBpdCBhcyBhIGNoYXIgcG9pbnRlciBmb3IgU1ZyNCBjb21wYXRpYmlsaXR5LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3VzZXJwdHIuM3guaHRtbCI+bWVudV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfd2luLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWVudV93aW4uM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTUxMWJmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21lbnVfd2luLjN4Lmh0bWwKQEAgLTAsMCArMSwxMzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1lbnVfd2luLjN4LHYgMS44IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWVudV93aW4gM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5tZW51X3dpbiAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtZW51X3dpbi4zeC5odG1sIj5tZW51X3dpbigzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5tZW51X3dpbjwvU1RST05HPiAgLSBtYWtlIGFuZCBicmVhayBtZW51IHdpbmRvdyBhbmQgc3Vid2luZG93IGFzc28tCisgICAgICAgY2lhdGlvbnMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBpbnQgc2V0X21lbnVfd2luKE1FTlUgKm1lbnUsIFdJTkRPVyAqd2luKTsKKyAgICAgICBXSU5ET1cgKm1lbnVfd2luKGNvbnN0IE1FTlUgKm1lbnUpOworICAgICAgIGludCBzZXRfbWVudV9zdWIoTUVOVSAqbWVudSwgV0lORE9XICpzdWIpOworICAgICAgIFdJTkRPVyAqbWVudV9zdWIoY29uc3QgTUVOVSAqbWVudSk7CisgICAgICAgaW50IHNjYWxlX21lbnUoY29uc3QgTUVOVSAqbWVudSwgaW50ICpyb3dzLCBpbnQgKmNvbHVtbnMpOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEV2ZXJ5ICBtZW51IGhhcyBhbiBhc3NvY2lhdGVkIHBhaXIgb2YgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gd2luZG93cy4gIFRoZQorICAgICAgIG1lbnUgd2luZG93IGRpc3BsYXlzIGFueSB0aXRsZSBhbmQgYm9yZGVyIGFzc29jaWF0ZWQgIHdpdGgKKyAgICAgICB0aGUgIHdpbmRvdzsgIHRoZSBtZW51IHN1YndpbmRvdyBkaXNwbGF5cyB0aGUgaXRlbXMgb2YgdGhlCisgICAgICAgbWVudSB0aGF0IGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCisKKyAgICAgICBUaGUgZmlyc3QgZm91ciBmdW5jdGlvbnMgZ2V0IGFuZCBzZXQgdGhvc2Ugd2luZG93cy4gIEl0IGlzCisgICAgICAgbm90IG5lY2Vzc2FyeSB0byBzZXQgZWl0aGVyIHdpbmRvdzsgYnkgZGVmYXVsdCwgdGhlIGRyaXZlcgorICAgICAgIGNvZGUgdXNlcyA8U1RST05HPnN0ZHNjcjwvU1RST05HPiBmb3IgYm90aC4KKworICAgICAgIEluIHRoZSA8U1RST05HPnNldF88L1NUUk9ORz4gZnVuY3Rpb25zLCB3aW5kb3cgYXJndW1lbnQgb2YgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlzICB0cmVhdGVkCisgICAgICAgYXMgIHRob3VnaCAgaXQgIHdlcmUgIDxTVFJPTkc+c3RzZGNyPC9TVFJPTkc+LiAgIEEgbWVudSBhcmd1bWVudCBvZiA8U1RST05HPk5VTEw8L1NUUk9ORz4gaXMKKyAgICAgICB0cmVhdGVkIGFzIGEgcmVxdWVzdCB0byBjaGFuZ2UgIHRoZSAgc3lzdGVtICBkZWZhdWx0ICBtZW51CisgICAgICAgd2luZG93IG9yIHN1YndpbmRvdy4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gPFNUUk9ORz5zY2FsZV9tZW51PC9TVFJPTkc+IHJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSByZXF1aXJlZAorICAgICAgIGZvciB0aGUgc3Vid2luZG93IG9mIDxFTT5tZW51PC9FTT4uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuICAgUm91LQorICAgICAgIHRpbmVzICB0aGF0ICByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICBlcnJvciBjb2RlczoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yICBvdXQtb2YtcmFuZ2UgIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX1BPU1RFRDwvU1RST05HPgorICAgICAgICAgICAgVGhlIG1lbnUgaGFzIGFscmVhZHkgYmVlbiBwb3N0ZWQuCisKKyAgICAgICA8U1RST05HPkVfTk9UX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWVudV93aW4uM3guaHRtbCI+bWVudV93aW4oM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWl0ZW1fY3VycmVudC4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTI5NDczCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21pdGVtX2N1cnJlbnQuM3guaHRtbApAQCAtMCwwICsxLDE0NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWl0ZW1fY3VycmVudC4zeCx2IDEuMTEgMjAwNi8xMS8wNCAxODoxODoxOSB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5taXRlbV9jdXJyZW50IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWl0ZW1fY3VycmVudCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9jdXJyZW50LjN4Lmh0bWwiPm1pdGVtX2N1cnJlbnQoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWl0ZW1fY3VycmVudDwvU1RST05HPiAtIHNldCBhbmQgZ2V0IGN1cnJlbnRfbWVudV9pdGVtCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9jdXJyZW50X2l0ZW0oTUVOVSAqbWVudSwgY29uc3QgSVRFTSAqaXRlbSk7CisgICAgICAgSVRFTSAqY3VycmVudF9pdGVtKGNvbnN0IE1FTlUgKm1lbnUpOworICAgICAgIGludCBzZXRfdG9wX3JvdyhNRU5VICptZW51LCBpbnQgcm93KTsKKyAgICAgICBpbnQgdG9wX3Jvdyhjb25zdCBNRU5VICptZW51KTsKKyAgICAgICBpbnQgaXRlbV9pbmRleChjb25zdCBJVEVNICppdGVtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPnNldF9jdXJyZW50X2l0ZW08L1NUUk9ORz4gc2V0cyB0aGUgY3VycmVudCBpdGVtICh0aGUKKyAgICAgICBpdGVtIG9uICB3aGljaCAgdGhlICBtZW51ICBjdXJzb3IgIGlzICBwb3NpdGlvbmVkKS4gICA8U1RST05HPmN1ci08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnJlbnRfaXRlbTwvU1RST05HPiAgcmV0dXJucyAgYSAgcG9pbnRlciAgdG8gdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUKKyAgICAgICBnaXZlbiBtZW51LgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+c2V0X3RvcF9yb3c8L1NUUk9ORz4gc2V0cyB0aGUgdG9wIHJvdyBvZiB0aGUgIG1lbnUgIHRvCisgICAgICAgc2hvdyAgdGhlICBnaXZlbiAgcm93ICAodGhlIHRvcCByb3cgaXMgaW5pdGlhbGx5IDAsIGFuZCBpcworICAgICAgIHJlc2V0IHRvIHRoaXMgdmFsdWUgd2hlbmV2ZXIgdGhlIDxTVFJPTkc+T19ST1dNQUpPUjwvU1RST05HPiBvcHRpb24gaXMgdG9nLQorICAgICAgIGdsZWQpLiAgIFRoZSAgaXRlbSAgbGVmdG1vc3Qgb24gdGhlIGdpdmVuIHJvdyBiZWNvbWVzIGN1ci0KKyAgICAgICByZW50LiAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+dG9wX3JvdzwvU1RST05HPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlICB0b3AKKyAgICAgICBtZW51IHJvdyBiZWluZyBkaXNwbGF5ZWQuCisKKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5pdGVtX2luZGV4PC9TVFJPTkc+IHJldHVybnMgdGhlICh6ZXJvLW9yaWdpbikgaW5kZXggb2YKKyAgICAgICA8RU0+aXRlbTwvRU0+IGluIHRoZSBtZW51J3MgaXRlbSBwb2ludGVyIGxpc3QuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+Y3VycmVudF9pdGVtPC9TVFJPTkc+IHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgIGJlICA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgIEl0CisgICAgICAgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgPFNUUk9ORz50b3Bfcm93PC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+aXRlbV9pbmRleDwvU1RST05HPiAgcmV0dXJuICA8U1RST05HPkVSUjwvU1RST05HPiAgKHRoZSBnZW5lcmFsIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+CisgICAgICAgZXJyb3IgdmFsdWUpIGlmIHRoZWlyIDxFTT5tZW51PC9FTT4gcGFyYW1ldGVyIGlzIDxTVFJPTkc+TlVMTDwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+c2V0X2N1cnJlbnRfaXRlbTwvU1RST05HPiBhbmQgPFNUUk9ORz5zZXRfdG9wX3JvdzwvU1RST05HPiByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3ctCisgICAgICAgaW5nOgorCisgICAgICAgPFNUUk9ORz5FX09LPC9TVFJPTkc+IFRoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKworICAgICAgIDxTVFJPTkc+RV9CQURfQVJHVU1FTlQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJvdXRpbmUgIGRldGVjdGVkICBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3UtCisgICAgICAgICAgICBtZW50LgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9TVEFURTwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYS0KKyAgICAgICAgICAgIHRpb24gZnVuY3Rpb24uCisKKyAgICAgICA8U1RST05HPkVfTk9UX0NPTk5FQ1RFRDwvU1RST05HPgorICAgICAgICAgICAgTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKworICAgICAgIDxTVFJPTkc+RV9TWVNURU1fRVJST1I8L1NUUk9ORz4KKyAgICAgICAgICAgIFN5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIDxTVFJPTkc+ZXJybm88L1NUUk9ORz4pLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViAgbWVudSAgbGlicmFyeS4gICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBUaGUgIFNWcjQgbWVudSBsaWJyYXJ5IGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIHRoZSA8U1RST05HPnRvcF9yb3c8L1NUUk9ORz4KKyAgICAgICBhbmQgPFNUUk9ORz5pbmRleF9pdGVtPC9TVFJPTkc+IGVycm9yIHZhbHVlIGFzIC0xICh3aGljaCBpcyAgdGhlICB2YWx1ZSAgb2YKKyAgICAgICA8U1RST05HPkVSUjwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuICBQZmVpZmVyLiAgIE1hbnVhbCAgcGFnZXMgIGFuZCAgYWRhcHRhdGlvbiBmb3IgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fY3VycmVudC4zeC5odG1sIj5taXRlbV9jdXJyZW50KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21pdGVtX25hbWUuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV9uYW1lLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4OTVkMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV9uYW1lLjN4Lmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1pdGVtX25hbWUuM3gsdiAxLjYgMjAwNi8xMS8wNCAxNzo1Mzo0MCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5taXRlbV9uYW1lIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWl0ZW1fbmFtZSAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fbmFtZS4zeC5odG1sIj5taXRlbV9uYW1lKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uYW1lLjN4Lmh0bWwiPm1pdGVtX25hbWUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWl0ZW1fbmFtZTwvU1RST05HPiAtIGdldCBtZW51IGl0ZW0gbmFtZSBhbmQgZGVzY3JpcHRpb24gZmllbGRzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgY29uc3QgY2hhciAqaXRlbV9uYW1lKGNvbnN0IElURU0gKml0ZW0pOworICAgICAgIGNvbnN0IGNoYXIgKml0ZW1fZGVzY3JpcHRpb24oY29uc3QgSVRFTSAqaXRlbSk7CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICAgICAgVGhlICBmdW5jdGlvbiA8U1RST05HPml0ZW1fbmFtZTwvU1RST05HPiByZXR1cm5zIHRoZSBuYW1lIHBhcnQgb2YgdGhlIGdpdmVuCisgICAgICAgaXRlbS4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5pdGVtX2Rlc2NyaXB0aW9uPC9TVFJPTkc+IHJldHVybnMgdGhlIGRlc2NyaXB0aW9uIHBhcnQKKyAgICAgICBvZiB0aGUgZ2l2ZW4gaXRlbS4KKworCis8L1BSRT4KKzxIMj5SRVRVUk4gVkFMVUU8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgcmV0dXJuIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlIDxTVFJPTkc+TlVMTDwvU1RST05HPikuICBUaGV5CisgICAgICAgZG8gbm90IHNldCBlcnJuby4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX25hbWUuM3guaHRtbCI+bWl0ZW1fbmFtZSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV9uZXcuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV9uZXcuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY5YjEyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21pdGVtX25ldy4zeC5odG1sCkBAIC0wLDAgKzEsMTM0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtaXRlbV9uZXcuM3gsdiAxLjEwIDIwMDYvMTEvMDQgMTg6MTY6MzYgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWl0ZW1fbmV3IDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWl0ZW1fbmV3IDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3KDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX25ldy4zeC5odG1sIj5taXRlbV9uZXcoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWl0ZW1fbmV3PC9TVFJPTkc+IC0gY3JlYXRlIGFuZCBkZXN0cm95IG1lbnUgaXRlbXMKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4KKyAgICAgICBJVEVNICpuZXdfaXRlbShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbik7CisgICAgICAgaW50IGZyZWVfaXRlbShJVEVNICppdGVtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5uZXdfaXRlbTwvU1RST05HPiBhbGxvY2F0ZXMgYSBuZXcgaXRlbSBhbmQgaW5pdGlhbGl6ZXMKKyAgICAgICBpdCAgZnJvbSAgdGhlIDxTVFJPTkc+bmFtZTwvU1RST05HPiBhbmQgPFNUUk9ORz5kZXNjcmlwdGlvbjwvU1RST05HPiBwb2ludGVycy4gUGxlYXNlIG5vdGljZQorICAgICAgIHRoYXQgdGhlIGl0ZW0gc3RvcmVzIG9ubHkgdGhlIHBvaW50ZXJzICB0byAgdGhlICBuYW1lICBhbmQKKyAgICAgICBkZXNjcmlwdGlvbi4gVGhvc2UgcG9pbnRlcnMgbXVzdCBiZSB2YWxpZCBkdXJpbmcgdGhlIGxpZmUtCisgICAgICAgdGltZSBvZiB0aGUgaXRlbS4gU28geW91IHNob3VsZCBiZSB2ZXJ5IGNhcmVmdWwgd2l0aCBuYW1lcworICAgICAgIG9yIGRlc2NyaXB0aW9ucyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIG9mIHNvbWUgcm91dGluZXMuCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZnJlZV9pdGVtPC9TVFJPTkc+IGRlLWFsbG9jYXRlcyBhbiBpdGVtLiBQbGVhc2Ugbm90aWNlCisgICAgICAgdGhhdCBpdCAgaXMgIHRoZSAgcmVzcG9uc2liaWxpdHkgIG9mICB0aGUgIGFwcGxpY2F0aW9uICB0bworICAgICAgIHJlbGVhc2UgIHRoZSBtZW1vcnkgZm9yIHRoZSBuYW1lIG9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKKyAgICAgICBpdGVtLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgZnVuY3Rpb24gPFNUUk9ORz5uZXdfaXRlbTwvU1RST05HPiByZXR1cm5zICA8U1RST05HPk5VTEw8L1NUUk9ORz4gIG9uICBlcnJvci4gICBJdCAgc2V0cworICAgICAgIGVycm5vIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24ncyBmYWlsdXJlOgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSAgZGV0ZWN0ZWQgIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQsIGUuZy4sIG1hbGxvYyBmYWlsdXJlLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIDxTVFJPTkc+ZnJlZV9pdGVtPC9TVFJPTkc+IHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX0JBRF9BUkdVTUVOVDwvU1RST05HPgorICAgICAgICAgICAgUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3IgIG91dC1vZi1yYW5nZSAgYXJndS0KKyAgICAgICAgICAgIG1lbnQuCisKKyAgICAgICA8U1RST05HPkVfQ09OTkVDVEVEPC9TVFJPTkc+CisgICAgICAgICAgICBJdGVtIGlzIGNvbm5lY3RlZCB0byBhIG1lbnUuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9uZXcuM3guaHRtbCI+bWl0ZW1fbmV3KDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21pdGVtX29wdHMuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5OTMwYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV9vcHRzLjN4Lmh0bWwKQEAgLTAsMCArMSwxMjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqIHQKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IG1pdGVtX29wdHMuM3gsdiAxLjkgMjAwNy8wMi8yNCAxNzozMzozMiB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT5taXRlbV9vcHRzIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWl0ZW1fb3B0cyAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fb3B0cy4zeC5odG1sIj5taXRlbV9vcHRzKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV9vcHRzLjN4Lmh0bWwiPm1pdGVtX29wdHMoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWl0ZW1fb3B0czwvU1RST05HPiAtIHNldCBhbmQgZ2V0IG1lbnUgaXRlbSBvcHRpb25zCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9pdGVtX29wdHMoSVRFTSAqaXRlbSwgSXRlbV9PcHRpb25zIG9wdHMpOworICAgICAgIGludCBpdGVtX29wdHNfb24oSVRFTSAqaXRlbSwgSXRlbV9PcHRpb25zIG9wdHMpOworICAgICAgIGludCBpdGVtX29wdHNfb2ZmKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKTsKKyAgICAgICBJdGVtX09wdGlvbnMgaXRlbV9vcHRzKGNvbnN0IElURU0gKml0ZW0pOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZnVuY3Rpb24gIDxTVFJPTkc+c2V0X2l0ZW1fb3B0czwvU1RST05HPiAgc2V0cyAgYWxsICB0aGUgIGdpdmVuIGl0ZW0ncworICAgICAgIG9wdGlvbiBiaXRzICAobWVudSAgb3B0aW9uICBiaXRzICBtYXkgIGJlICBsb2dpY2FsbHktT1InZWQKKyAgICAgICB0b2dldGhlcikuCisKKyAgICAgICBUaGUgIGZ1bmN0aW9uIDxTVFJPTkc+aXRlbV9vcHRzX29uPC9TVFJPTkc+IHR1cm5zIG9uIHRoZSBnaXZlbiBvcHRpb24gYml0cywKKyAgICAgICBhbmQgbGVhdmVzIG90aGVycyBhbG9uZS4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPml0ZW1fb3B0c19vZmY8L1NUUk9ORz4gIHR1cm5zICBvZmYgIHRoZSAgZ2l2ZW4gIG9wdGlvbgorICAgICAgIGJpdHMsIGFuZCBsZWF2ZXMgb3RoZXJzIGFsb25lLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgPFNUUk9ORz5pdGVtX29wdHM8L1NUUk9ORz4gcmV0dXJucyB0aGUgaXRlbSdzIGN1cnJlbnQgb3B0aW9uCisgICAgICAgYml0cy4KKworICAgICAgIFRoZXJlIGlzIG9ubHkgb25lIGRlZmluZWQgb3B0aW9uIGJpdCAgbWFzaywgIDxTVFJPTkc+T19TRUxFQ1RBQkxFPC9TVFJPTkc+LgorICAgICAgIFdoZW4gdGhpcyBpcyBvbiwgdGhlIGl0ZW0gbWF5IGJlIHNlbGVjdGVkIGR1cmluZyBtZW51IHByby0KKyAgICAgICBjZXNzaW5nLiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gb24uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIEV4Y2VwdCBmb3IgPFNUUk9ORz5pdGVtX29wdHM8L1NUUk9ORz4sIGVhY2ggcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sLQorICAgICAgIGxvd2luZzoKKworICAgICAgIDxTVFJPTkc+RV9PSzwvU1RST05HPiBUaGUgcm91dGluZSBzdWNjZWVkZWQuCisKKyAgICAgICA8U1RST05HPkVfU1lTVEVNX0VSUk9SPC9TVFJPTkc+CisgICAgICAgICAgICBTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSA8U1RST05HPmVycm5vPC9TVFJPTkc+KS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgIG1lbnUgIGxpYnJhcnkuICAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiAgUGZlaWZlci4gICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gZm9yIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX29wdHMuM3guaHRtbCI+bWl0ZW1fb3B0cygzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV91c2VycHRyLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWl0ZW1fdXNlcnB0ci4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2M5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWl0ZW1fdXNlcnB0ci4zeC5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtaXRlbV91c2VycHRyLjN4LHYgMS45IDIwMDYvMTEvMDQgMTg6MjE6MDMgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+bWl0ZW1fdXNlcnB0ciAzeDwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPm1pdGVtX3VzZXJwdHIgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1pdGVtX3VzZXJwdHIuM3guaHRtbCI+bWl0ZW1fdXNlcnB0cigzeCk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdXNlcnB0ci4zeC5odG1sIj5taXRlbV91c2VycHRyKDN4KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPm1pdGVtX3VzZXJwdHI8L1NUUk9ORz4gIC0gIGFzc29jaWF0ZSAgYXBwbGljYXRpb24gIGRhdGEgd2l0aCBhIG1lbnUKKyAgICAgICBpdGVtCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9pdGVtX3VzZXJwdHIoSVRFTSAqaXRlbSwgdm9pZCAqdXNlcnB0cik7CisgICAgICAgdm9pZCAqaXRlbV91c2VycHRyKGNvbnN0IElURU0gKml0ZW0pOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEV2ZXJ5IG1lbnUgaXRlbSBoYXMgYSBmaWVsZCAgdGhhdCAgY2FuICBiZSAgdXNlZCAgdG8gIGhvbGQKKyAgICAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYyAgZGF0YSAgKHRoYXQgaXMsIHRoZSBtZW51LWRyaXZlciBjb2RlCisgICAgICAgbGVhdmVzIGl0IGFsb25lKS4gIFRoZXNlIGZ1bmN0aW9ucyBnZXQgYW5kIHNldCB0aGF0IGZpZWxkLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBUaGUgIGZ1bmN0aW9uICA8U1RST05HPml0ZW1fdXNlcnB0cjwvU1RST05HPiAgcmV0dXJucyAgYSAgcG9pbnRlciAocG9zc2libHkKKyAgICAgICA8U1RST05HPk5VTEw8L1NUUk9ORz4pLiAgSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorCisgICAgICAgVGhlIDxTVFJPTkc+c2V0X2l0ZW1fdXNlcnB0cjwvU1RST05HPiBhbHdheXMgcmV0dXJucyA8U1RST05HPkVfT0s8L1NUUk9ORz4gKHN1Y2Nlc3MpLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKyAgICAgICBUaGUgdXNlciBwb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyLiAgV2UgY2hvc2Ugbm90IHRvIGxlYXZlCisgICAgICAgaXQgYXMgYSBjaGFyIHBvaW50ZXIgZm9yIFNWcjQgY29tcGF0aWJpbGl0eS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIEp1ZXJnZW4gIFBmZWlmZXIuICAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uIGZvciBuZXcKKyAgICAgICBjdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJtaXRlbV91c2VycHRyLjN4Lmh0bWwiPm1pdGVtX3VzZXJwdHIoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWl0ZW1fdmFsdWUuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9taXRlbV92YWx1ZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NmM4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWl0ZW1fdmFsdWUuM3guaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBtaXRlbV92YWx1ZS4zeCx2IDEuOCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1pdGVtX3ZhbHVlIDN4PC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+bWl0ZW1fdmFsdWUgM3g8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9Im1pdGVtX3ZhbHVlLjN4Lmh0bWwiPm1pdGVtX3ZhbHVlKDN4KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdmFsdWUuM3guaHRtbCI+bWl0ZW1fdmFsdWUoM3gpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bWl0ZW1fdmFsdWU8L1NUUk9ORz4gLSBzZXQgYW5kIGdldCBtZW51IGl0ZW0gdmFsdWVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDttZW51LmgmZ3Q7PC9TVFJPTkc+CisgICAgICAgaW50IHNldF9pdGVtX3ZhbHVlKElURU0gKml0ZW0sIGJvb2wgdmFsdWUpOworICAgICAgIGJvb2wgaXRlbV92YWx1ZShjb25zdCBJVEVNICppdGVtKTsKKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBJZiAgeW91ICB0dXJuICBvZmYgIHRoZSBtZW51IG9wdGlvbiA8U1RST05HPk9fT05FVkFMVUU8L1NUUk9ORz4gKGUuZy4sIHdpdGgKKyAgICAgICA8U1RST05HPnNldF9tZW51X29wdHM8L1NUUk9ORz4gb3IgPFNUUk9ORz5tZW51X29wdHNfb2ZmPC9TVFJPTkc+OyAgc2VlICA8U1RST05HPjxBIEhSRUY9Im1lbnVfb3B0cy4zeC5odG1sIj5tZW51X29wdHMoM3gpPC9BPjwvU1RST05HPiksICB0aGUKKyAgICAgICBtZW51IGJlY29tZXMgbXVsdGktdmFsdWVkOyB0aGF0IGlzLCBtb3JlIHRoYW4gb25lIGl0ZW0gbWF5CisgICAgICAgc2ltdWx0YW5lb3VzbHkgYmUgc2VsZWN0ZWQuCisKKyAgICAgICBJbiBhIG11bHRpX3ZhbHVlZCBtZW51LCB5b3UgIGNhbiAgdXNlZCAgPFNUUk9ORz5zZXRfaXRlbV92YWx1ZTwvU1RST05HPiAgdG8KKyAgICAgICBzZWxlY3QgdGhlIGdpdmVuIG1lbnUgaXRlbSAoc2Vjb25kIGFyZ3VtZW50IDxTVFJPTkc+VFJVRTwvU1RST05HPikgb3IgZGVzZS0KKyAgICAgICBsZWN0IGl0IChzZWNvbmQgYXJndW1lbnQgPFNUUk9ORz5GQUxTRTwvU1RST05HPikuCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPnNldF9pdGVtX3ZhbHVlPC9TVFJPTkc+IHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICA8U1RST05HPkVfT0s8L1NUUk9ORz4gVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorCisgICAgICAgPFNUUk9ORz5FX1NZU1RFTV9FUlJPUjwvU1RST05HPgorICAgICAgICAgICAgU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgPFNUUk9ORz5lcnJubzwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPkVfUkVRVUVTVF9ERU5JRUQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFRoZSBtZW51IGRyaXZlciBjb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdC4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ibWVudS4zeC5odG1sIj5tZW51KDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciBmaWxlIDxTVFJPTkc+Jmx0O21lbnUuaCZndDs8L1NUUk9ORz4gYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyCisgICAgICAgZmlsZSA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlc2UgIHJvdXRpbmVzICBlbXVsYXRlICB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleQorICAgICAgIHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsICBwYWdlcyAgYW5kICBhZGFwdGF0aW9uICBmb3IgIG5ldworICAgICAgIGN1cnNlcyBieSBFcmljIFMuIFJheW1vbmQuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdmFsdWUuM3guaHRtbCI+bWl0ZW1fdmFsdWUoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vbWl0ZW1fdmlzaWJsZS4zeC5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21pdGVtX3Zpc2libGUuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNkMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL21pdGVtX3Zpc2libGUuM3guaHRtbApAQCAtMCwwICsxLDEwMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogbWl0ZW1fdmlzaWJsZS4zeCx2IDEuNSAxOTk4LzExLzI5IDAxOjEyOjU1IFJpY2suT2huZW11cyBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm1pdGVtX3Zpc2libGUgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5taXRlbV92aXNpYmxlIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJtaXRlbV92aXNpYmxlLjN4Lmh0bWwiPm1pdGVtX3Zpc2libGUoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pdGVtX3Zpc2libGUuM3guaHRtbCI+bWl0ZW1fdmlzaWJsZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5taXRlbV92aXNpYmxlPC9TVFJPTkc+IC0gY2hlY2sgdmlzaWJpbGl0eSBvZiBhIG1lbnUgaXRlbQorCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPgorICAgICAgIGJvb2wgaXRlbV92aXNpYmxlKGNvbnN0IElURU0gKml0ZW0pOworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIEEgIG1lbnUgIGl0ZW0gIGlzICB2aXNpYmxlICB3aGVuIGl0IGlzIGluIHRoZSBwb3J0aW9uIG9mIGEKKyAgICAgICBwb3N0ZWQgbWVudSB0aGF0IGlzIG1hcHBlZCBvbnRvIHRoZSBzY3JlZW4gKGlmIHRoZSBtZW51IGlzCisgICAgICAgc2Nyb2xsYWJsZSwgIGluICBwYXJ0aWN1bGFyLCAgdGhpcyBwb3J0aW9uIHdpbGwgYmUgc21hbGxlcgorICAgICAgIHRoYW4gdGhlIHdob2xlIG1lbnUpLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJtZW51LjN4Lmh0bWwiPm1lbnUoM3gpPC9BPjwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5OT1RFUzwvSDI+PFBSRT4KKyAgICAgICBUaGUgaGVhZGVyIGZpbGUgPFNUUk9ORz4mbHQ7bWVudS5oJmd0OzwvU1RST05HPiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIKKyAgICAgICBmaWxlIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBUaGVzZSAgcm91dGluZXMgIGVtdWxhdGUgIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5CisgICAgICAgd2VyZSBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgIHBhZ2VzICBhbmQgIGFkYXB0YXRpb24gIGZvciAgbmV3CisgICAgICAgY3Vyc2VzIGJ5IEVyaWMgUy4gUmF5bW9uZC4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibWl0ZW1fdmlzaWJsZS4zeC5odG1sIj5taXRlbV92aXNpYmxlKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL25jdXJzZXMuM3guaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9uY3Vyc2VzLjN4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxZGVlOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9uY3Vyc2VzLjN4Lmh0bWwKQEAgLTAsMCArMSwxMjMzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKiB0CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiBuY3Vyc2VzLjN4LHYgMS45MSAyMDA4LzEwLzExIDIwOjQzOjExIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPm5jdXJzZXMgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5uY3Vyc2VzIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPm5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+bmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IC0gQ1JUIHNjcmVlbiBoYW5kbGluZyBhbmQgb3B0aW1pemF0aW9uIHBhY2thZ2UKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBsaWJyYXJ5ICByb3V0aW5lcyAgZ2l2ZSB0aGUgdXNlciBhIHRlcm1pbmFsLQorICAgICAgIGluZGVwZW5kZW50IG1ldGhvZCBvZiB1cGRhdGluZyBjaGFyYWN0ZXIgc2NyZWVucyB3aXRoIHJlYS0KKyAgICAgICBzb25hYmxlICAgb3B0aW1pemF0aW9uLiAgICBUaGlzICBpbXBsZW1lbnRhdGlvbiAgaXMgIGBgbmV3CisgICAgICAgY3Vyc2VzJycgKG5jdXJzZXMpIGFuZCBpcyAgdGhlICBhcHByb3ZlZCAgcmVwbGFjZW1lbnQgIGZvcgorICAgICAgIDQuNEJTRCAgY2xhc3NpYyBjdXJzZXMsIHdoaWNoIGhhcyBiZWVuIGRpc2NvbnRpbnVlZC4gIFRoaXMKKyAgICAgICBkZXNjcmliZXMgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHZlcnNpb24gNS42IChwYXRjaCAyMDA4MTAxMSkuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgZW11bGF0ZXMgIHRoZSAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+ICBsaWJyYXJ5ICBvZgorICAgICAgIFN5c3RlbSAgViAgUmVsZWFzZSAgNCAgVU5JWCwgIGFuZCBYUEc0IChYL09wZW4gUG9ydGFiaWxpdHkKKyAgICAgICBHdWlkZSkgY3Vyc2VzIChhbHNvIGtub3duIGFzIFhTSSBjdXJzZXMpLiAgWFNJIHN0YW5kcyAgZm9yCisgICAgICAgWC9PcGVuICBTeXN0ZW0gIEludGVyZmFjZXMgRXh0ZW5zaW9uLiAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5CisgICAgICAgaXMgZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSAgaW4gIHNvdXJjZSAgZm9ybS4gICBEaWZmZXJlbmNlcworICAgICAgIGZyb20gIHRoZSAgU1ZyNCBjdXJzZXMgYXJlIHN1bW1hcml6ZWQgdW5kZXIgdGhlIDxTVFJPTkc+RVhURU5TSU9OUzwvU1RST05HPgorICAgICAgIGFuZCA8U1RST05HPlBPUlRBQklMSVRZPC9TVFJPTkc+IHNlY3Rpb25zIGJlbG93IGFuZCBkZXNjcmliZWQgaW4gZGV0YWlsICBpbgorICAgICAgIHRoZSAgcmVzcGVjdGl2ZSAgPFNUUk9ORz5FWFRFTlNJT05TPC9TVFJPTkc+LCA8U1RST05HPlBPUlRBQklMSVRZPC9TVFJPTkc+IGFuZCA8U1RST05HPkJVR1M8L1NUUk9ORz4gc2VjdGlvbnMKKyAgICAgICBvZiBpbmRpdmlkdWFsIG1hbiBwYWdlcy4KKworICAgICAgIFRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeSBhbHNvIHByb3ZpZGVzIG1hbnkgdXNlZnVsICBleHRlbnNpb25zLAorICAgICAgIGkuZS4sICBmZWF0dXJlcyAgd2hpY2ggIGNhbm5vdCAgYmUgaW1wbGVtZW50ZWQgYnkgYSBzaW1wbGUKKyAgICAgICBhZGQtb24gbGlicmFyeSBidXQgd2hpY2ggcmVxdWlyZSBhY2Nlc3MgdG8gIHRoZSAgaW50ZXJuYWxzCisgICAgICAgb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICBBICBwcm9ncmFtICB1c2luZyAgdGhlc2UgIHJvdXRpbmVzIG11c3QgYmUgbGlua2VkIHdpdGggdGhlCisgICAgICAgPFNUUk9ORz4tbG5jdXJzZXM8L1NUUk9ORz4gb3B0aW9uLCBvciAoaWYgaXQgaGFzIGJlZW4gZ2VuZXJhdGVkKSAgd2l0aCAgdGhlCisgICAgICAgZGVidWdnaW5nICBsaWJyYXJ5ICA8U1RST05HPi1sbmN1cnNlc19nPC9TVFJPTkc+LiAgIChZb3VyIHN5c3RlbSBpbnRlZ3JhdG9yCisgICAgICAgbWF5IGFsc28gaGF2ZSBpbnN0YWxsZWQgdGhlc2UgbGlicmFyaWVzICB1bmRlciAgdGhlICBuYW1lcworICAgICAgIDxTVFJPTkc+LWxjdXJzZXM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+LWxjdXJzZXNfZzwvU1RST05HPi4pICBUaGUgbmN1cnNlc19nIGxpYnJhcnkgZ2VuZXJhdGVzCisgICAgICAgdHJhY2UgbG9ncyAoaW4gYSBmaWxlIGNhbGxlZCAndHJhY2UnIGluIHRoZSBjdXJyZW50IGRpcmVjLQorICAgICAgIHRvcnkpICB0aGF0IGRlc2NyaWJlIGN1cnNlcyBhY3Rpb25zLiAgU2VlIGFsc28gdGhlIHNlY3Rpb24KKyAgICAgICBvbiA8U1RST05HPkFMVEVSTkFURTwvU1RST05HPiA8U1RST05HPkNPTkZJR1VSQVRJT05TPC9TVFJPTkc+LgorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBwYWNrYWdlIHN1cHBvcnRzOiBvdmVyYWxsIHNjcmVlbiwgIHdpbmRvdyAgYW5kCisgICAgICAgcGFkIG1hbmlwdWxhdGlvbjsgb3V0cHV0IHRvIHdpbmRvd3MgYW5kIHBhZHM7IHJlYWRpbmcgdGVyLQorICAgICAgIG1pbmFsIGlucHV0OyBjb250cm9sIG92ZXIgdGVybWluYWwgYW5kICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgaW5wdXQgIGFuZAorICAgICAgIG91dHB1dCAgb3B0aW9uczsgZW52aXJvbm1lbnQgcXVlcnkgcm91dGluZXM7IGNvbG9yIG1hbmlwdS0KKyAgICAgICBsYXRpb247IHVzZSBvZiBzb2Z0IGxhYmVsIGtleXM7IHRlcm1pbmZvIGNhcGFiaWxpdGllczsgYW5kCisgICAgICAgYWNjZXNzIHRvIGxvdy1sZXZlbCB0ZXJtaW5hbC1tYW5pcHVsYXRpb24gcm91dGluZXMuCisKKyAgICAgICBUaGUgIGxpYnJhcnkgdXNlcyB0aGUgbG9jYWxlIHdoaWNoIHRoZSBjYWxsaW5nIHByb2dyYW0gaGFzCisgICAgICAgaW5pdGlhbGl6ZWQuICBUaGF0IGlzIG5vcm1hbGx5IGRvbmUgd2l0aCA8U1RST05HPnNldGxvY2FsZTwvU1RST05HPjoKKworICAgICAgICAgICAgIDxTVFJPTkc+c2V0bG9jYWxlKExDX0FMTCw8L1NUUk9ORz4gPFNUUk9ORz4iIik7PC9TVFJPTkc+CisKKyAgICAgICBJZiB0aGUgbG9jYWxlIGlzIG5vdCBpbml0aWFsaXplZCwgdGhlIGxpYnJhcnkgYXNzdW1lcyB0aGF0CisgICAgICAgY2hhcmFjdGVycyAgYXJlICBwcmludGFibGUgIGFzIGluIElTTy04ODU5LTEsIHRvIHdvcmsgd2l0aAorICAgICAgIGNlcnRhaW4gbGVnYWN5IHByb2dyYW1zLiAgWW91IHNob3VsZCBpbml0aWFsaXplIHRoZSBsb2NhbGUKKyAgICAgICBhbmQgIG5vdCAgcmVseSBvbiBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSBsaWJyYXJ5IHdoZW4gdGhlCisgICAgICAgbG9jYWxlIGhhcyBub3QgYmVlbiBzZXR1cC4KKworICAgICAgIFRoZSBmdW5jdGlvbiA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gb3IgPFNUUk9ORz5uZXd0ZXJtPC9TVFJPTkc+IG11c3QgYmUgY2FsbGVkIHRvIGluaXRpYWwtCisgICAgICAgaXplIHRoZSBsaWJyYXJ5IGJlZm9yZSBhbnkgb2YgdGhlIG90aGVyIHJvdXRpbmVzIHRoYXQgZGVhbAorICAgICAgIHdpdGggd2luZG93cyBhbmQgc2NyZWVucyBhcmUgIHVzZWQuICAgVGhlICByb3V0aW5lICA8U1RST05HPmVuZHdpbjwvU1RST05HPgorICAgICAgIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBleGl0aW5nLgorCisgICAgICAgVG8gIGdldCAgY2hhcmFjdGVyLWF0LWEtdGltZSAgaW5wdXQgIHdpdGhvdXQgZWNob2luZyAobW9zdAorICAgICAgIGludGVyYWN0aXZlLCBzY3JlZW4gb3JpZW50ZWQgcHJvZ3JhbXMgd2FudCB0aGlzKSwgdGhlIGZvbC0KKyAgICAgICBsb3dpbmcgc2VxdWVuY2Ugc2hvdWxkIGJlIHVzZWQ6CisKKyAgICAgICAgICAgICA8U1RST05HPmluaXRzY3IoKTs8L1NUUk9ORz4gPFNUUk9ORz5jYnJlYWsoKTs8L1NUUk9ORz4gPFNUUk9ORz5ub2VjaG8oKTs8L1NUUk9ORz4KKworICAgICAgIE1vc3QgcHJvZ3JhbXMgd291bGQgYWRkaXRpb25hbGx5IHVzZSB0aGUgc2VxdWVuY2U6CisKKyAgICAgICAgICAgICA8U1RST05HPm5vbmwoKTs8L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPmludHJmbHVzaChzdGRzY3IsPC9TVFJPTkc+IDxTVFJPTkc+RkFMU0UpOzwvU1RST05HPgorICAgICAgICAgICAgIDxTVFJPTkc+a2V5cGFkKHN0ZHNjciw8L1NUUk9ORz4gPFNUUk9ORz5UUlVFKTs8L1NUUk9ORz4KKworICAgICAgIEJlZm9yZSAgYSA8U1RST05HPmN1cnNlczwvU1RST05HPiBwcm9ncmFtIGlzIHJ1biwgdGhlIHRhYiBzdG9wcyBvZiB0aGUgdGVyLQorICAgICAgIG1pbmFsIHNob3VsZCBiZSBzZXQgYW5kICBpdHMgIGluaXRpYWxpemF0aW9uICBzdHJpbmdzLCAgaWYKKyAgICAgICBkZWZpbmVkLCAgbXVzdCAgYmUgIG91dHB1dC4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgZXhlY3V0aW5nCisgICAgICAgdGhlIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPmluaXQ8L1NUUk9ORz4gY29tbWFuZCBhZnRlciB0aGUgc2hlbGwgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICA8U1RST05HPlRFUk08L1NUUk9ORz4gIGhhcyAgYmVlbiAgZXhwb3J0ZWQuICA8U1RST05HPnRzZXQoMSk8L1NUUk9ORz4gaXMgdXN1YWxseSByZXNwb25zaWJsZQorICAgICAgIGZvciBkb2luZyB0aGlzLiAgW1NlZSA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+IGZvciBmdXJ0aGVyIGRldGFpbHMuXQorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IHBlcm1pdHMgbWFuaXB1bGF0aW9uICBvZiAgZGF0YSAgc3RydWMtCisgICAgICAgdHVyZXMsICBjYWxsZWQgIDxFTT53aW5kb3dzPC9FTT4sICB3aGljaCAgY2FuIGJlIHRob3VnaHQgb2YgYXMgdHdvLQorICAgICAgIGRpbWVuc2lvbmFsIGFycmF5cyBvZiBjaGFyYWN0ZXJzIHJlcHJlc2VudGluZyBhbGwgb3IgIHBhcnQKKyAgICAgICBvZiBhIENSVCBzY3JlZW4uICBBIGRlZmF1bHQgd2luZG93IGNhbGxlZCA8U1RST05HPnN0ZHNjcjwvU1RST05HPiwgd2hpY2ggaXMKKyAgICAgICB0aGUgc2l6ZSBvZiB0aGUgdGVybWluYWwgc2NyZWVuLCBpcyBzdXBwbGllZC4gIE90aGVycyAgbWF5CisgICAgICAgYmUgY3JlYXRlZCB3aXRoIDxTVFJPTkc+bmV3d2luPC9TVFJPTkc+LgorCisgICAgICAgTm90ZSAgdGhhdCAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gIGRvZXMgIG5vdCAgaGFuZGxlIG92ZXJsYXBwaW5nIHdpbmRvd3MsCisgICAgICAgdGhhdCdzIGRvbmUgYnkgdGhlIDxTVFJPTkc+PEEgSFJFRj0icGFuZWwuM3guaHRtbCI+cGFuZWwoM3gpPC9BPjwvU1RST05HPiBsaWJyYXJ5LiAgVGhpcyBtZWFucyB0aGF0IHlvdQorICAgICAgIGNhbiBlaXRoZXIgdXNlIDxTVFJPTkc+c3Rkc2NyPC9TVFJPTkc+IG9yIGRpdmlkZSB0aGUgc2NyZWVuIGludG8gdGlsZWQgd2luLQorICAgICAgIGRvd3MgYW5kIG5vdCB1c2luZyA8U1RST05HPnN0ZHNjcjwvU1RST05HPiBhdCBhbGwuICAgTWl4aW5nICB0aGUgIHR3byAgd2lsbAorICAgICAgIHJlc3VsdCBpbiB1bnByZWRpY3RhYmxlLCBhbmQgdW5kZXNpcmVkLCBlZmZlY3RzLgorCisgICAgICAgV2luZG93cyBhcmUgcmVmZXJyZWQgdG8gYnkgdmFyaWFibGVzIGRlY2xhcmVkIGFzIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+KjwvU1RST05HPi4KKyAgICAgICBUaGVzZSAgZGF0YSAgc3RydWN0dXJlcyAgYXJlICBtYW5pcHVsYXRlZCAgd2l0aCAgIHJvdXRpbmVzCisgICAgICAgZGVzY3JpYmVkICBoZXJlIGFuZCBlbHNld2hlcmUgaW4gdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBtYW51YWwgcGFnZXMuCisgICAgICAgQW1vbmcgdGhvc2UsIHRoZSBtb3N0IGJhc2ljIHJvdXRpbmVzIGFyZSA8U1RST05HPm1vdmU8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5hZGRjaDwvU1RST05HPi4KKyAgICAgICBNb3JlICBnZW5lcmFsIHZlcnNpb25zIG9mIHRoZXNlIHJvdXRpbmVzIGFyZSBpbmNsdWRlZCB3aXRoCisgICAgICAgbmFtZXMgYmVnaW5uaW5nIHdpdGggPFNUUk9ORz53PC9TVFJPTkc+LCBhbGxvd2luZyB0aGUgIHVzZXIgIHRvICBzcGVjaWZ5ICBhCisgICAgICAgd2luZG93LiAgIFRoZSByb3V0aW5lcyBub3QgYmVnaW5uaW5nIHdpdGggPFNUUk9ORz53PC9TVFJPTkc+IGFmZmVjdCA8U1RST05HPnN0ZHNjcjwvU1RST05HPi4KKworICAgICAgIEFmdGVyIHVzaW5nIHJvdXRpbmVzIHRvIG1hbmlwdWxhdGUgYSAgd2luZG93LCAgPFNUUk9ORz5yZWZyZXNoPC9TVFJPTkc+ICBpcworICAgICAgIGNhbGxlZCwgIHRlbGxpbmcgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gdG8gbWFrZSB0aGUgdXNlcidzIENSVCBzY3JlZW4gbG9vaworICAgICAgIGxpa2UgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4uICBUaGUgY2hhcmFjdGVycyBpbiBhIHdpbmRvdyBhcmUgIGFjdHVhbGx5ICBvZgorICAgICAgIHR5cGUgIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+LCAoY2hhcmFjdGVyIGFuZCBhdHRyaWJ1dGUgZGF0YSkgc28gdGhhdCBvdGhlcgorICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFyYWN0ZXIgbWF5IGFsc28gIGJlICBzdG9yZWQgIHdpdGgKKyAgICAgICBlYWNoIGNoYXJhY3Rlci4KKworICAgICAgIFNwZWNpYWwgIHdpbmRvd3MgIGNhbGxlZCAgPEVNPnBhZHM8L0VNPiAgbWF5ICBhbHNvICBiZSBtYW5pcHVsYXRlZC4KKyAgICAgICBUaGVzZSBhcmUgd2luZG93cyB3aGljaCBhcmUgbm90IGNvbnN0cmFpbmVkIHRvIHRoZSBzaXplIG9mCisgICAgICAgdGhlICBzY3JlZW4gYW5kIHdob3NlIGNvbnRlbnRzIG5lZWQgbm90IGJlIGNvbXBsZXRlbHkgZGlzLQorICAgICAgIHBsYXllZC4gIFNlZSA8U1RST05HPjxBIEhSRUY9ImN1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkKDN4KTwvQT48L1NUUk9ORz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgICBJbiBhZGRpdGlvbiB0byBkcmF3aW5nIGNoYXJhY3RlcnMgIG9uICB0aGUgIHNjcmVlbiwgIHZpZGVvCisgICAgICAgYXR0cmlidXRlcyAgYW5kIGNvbG9ycyBtYXkgYmUgc3VwcG9ydGVkLCBjYXVzaW5nIHRoZSBjaGFyLQorICAgICAgIGFjdGVycyB0byBzaG93IHVwIGluIHN1Y2ggbW9kZXMgYXMgdW5kZXJsaW5lZCwgaW4gIHJldmVyc2UKKyAgICAgICB2aWRlbywgIG9yIGluIGNvbG9yIG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgc3VjaCBkaXNwbGF5CisgICAgICAgZW5oYW5jZW1lbnRzLiAgTGluZSBkcmF3aW5nIGNoYXJhY3RlcnMgbWF5IGJlIHNwZWNpZmllZCB0bworICAgICAgIGJlICBvdXRwdXQuICAgT24gIGlucHV0LCAgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gaXMgYWxzbyBhYmxlIHRvIHRyYW5zbGF0ZQorICAgICAgIGFycm93IGFuZCBmdW5jdGlvbiBrZXlzICB0aGF0ICB0cmFuc21pdCAgZXNjYXBlICBzZXF1ZW5jZXMKKyAgICAgICBpbnRvICBzaW5nbGUgIHZhbHVlcy4gICBUaGUgdmlkZW8gYXR0cmlidXRlcywgbGluZSBkcmF3aW5nCisgICAgICAgY2hhcmFjdGVycywgIGFuZCAgaW5wdXQgIHZhbHVlcyAgdXNlICBuYW1lcywgIGRlZmluZWQgICBpbgorICAgICAgIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPiwgc3VjaCBhcyA8U1RST05HPkFfUkVWRVJTRTwvU1RST05HPiwgPFNUUk9ORz5BQ1NfSExJTkU8L1NUUk9ORz4sIGFuZCA8U1RST05HPktFWV9MRUZUPC9TVFJPTkc+LgorCisgICAgICAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyA8U1RST05HPkxJTkVTPC9TVFJPTkc+IGFuZCA8U1RST05HPkNPTFVNTlM8L1NUUk9ORz4gYXJlIHNldCwgb3IKKyAgICAgICBpZiB0aGUgcHJvZ3JhbSBpcyBleGVjdXRpbmcgaW4gYSB3aW5kb3cgZW52aXJvbm1lbnQsICBsaW5lCisgICAgICAgYW5kICBjb2x1bW4gIGluZm9ybWF0aW9uICBpbiB0aGUgZW52aXJvbm1lbnQgd2lsbCBvdmVycmlkZQorICAgICAgIGluZm9ybWF0aW9uIHJlYWQgYnkgPEVNPnRlcm1pbmZvPC9FTT4uICBUaGlzIHdvdWxkIGFmZmVjdCBhIHByb2dyYW0KKyAgICAgICBydW5uaW5nICBpbiBhbiBBVCZhbXA7VCA2MzAgbGF5ZXIsIGZvciBleGFtcGxlLCB3aGVyZSB0aGUgc2l6ZQorICAgICAgIG9mIGEgc2NyZWVuIGlzIGNoYW5nZWFibGUgKHNlZSA8U1RST05HPkVOVklST05NRU5UPC9TVFJPTkc+KS4KKworICAgICAgIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8U1RST05HPlRFUk1JTkZPPC9TVFJPTkc+IGlzIGRlZmluZWQsIGFueSAgcHJvLQorICAgICAgIGdyYW0gIHVzaW5nICA8U1RST05HPmN1cnNlczwvU1RST05HPiBjaGVja3MgZm9yIGEgbG9jYWwgdGVybWluYWwgZGVmaW5pdGlvbgorICAgICAgIGJlZm9yZSBjaGVja2luZyBpbiB0aGUgc3RhbmRhcmQgcGxhY2UuICAgRm9yICBleGFtcGxlLCAgaWYKKyAgICAgICA8U1RST05HPlRFUk08L1NUUk9ORz4gaXMgc2V0IHRvIDxTVFJPTkc+YXR0NDQyNDwvU1RST05HPiwgdGhlbiB0aGUgY29tcGlsZWQgdGVybWluYWwgZGVmaW5pLQorICAgICAgIHRpb24gaXMgZm91bmQgaW4KKworICAgICAgICAgICAgIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mby9hL2F0dDQ0MjQ8L1NUUk9ORz4uCisKKyAgICAgICAoVGhlIDxTVFJPTkc+YTwvU1RST05HPiBpcyBjb3BpZWQgZnJvbSB0aGUgZmlyc3QgbGV0dGVyIG9mIDxTVFJPTkc+YXR0NDQyNDwvU1RST05HPiB0byBhdm9pZAorICAgICAgIGNyZWF0aW9uICBvZiAgaHVnZSAgZGlyZWN0b3JpZXMuKSAgSG93ZXZlciwgaWYgPFNUUk9ORz5URVJNSU5GTzwvU1RST05HPiBpcworICAgICAgIHNldCB0byA8U1RST05HPiRIT01FL215dGVybXM8L1NUUk9ORz4sIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGZpcnN0IGNoZWNrcworCisgICAgICAgICAgICAgPFNUUk9ORz4kSE9NRS9teXRlcm1zL2EvYXR0NDQyNDwvU1RST05HPiwKKworICAgICAgIGFuZCBpZiB0aGF0IGZhaWxzLCBpdCB0aGVuIGNoZWNrcworCisgICAgICAgICAgICAgPFNUUk9ORz4vdXNyL3NoYXJlL3Rlcm1pbmZvL2EvYXR0NDQyNDwvU1RST05HPi4KKworICAgICAgIFRoaXMgaXMgdXNlZnVsIGZvciBkZXZlbG9waW5nIGV4cGVyaW1lbnRhbCBkZWZpbml0aW9ucyAgb3IKKyAgICAgICB3aGVuIHdyaXRlIHBlcm1pc3Npb24gaW4gPFNUUk9ORz4vdXNyL3NoYXJlL3Rlcm1pbmZvPC9TVFJPTkc+IGlzIG5vdCBhdmFpbC0KKyAgICAgICBhYmxlLgorCisgICAgICAgVGhlIGludGVnZXIgIHZhcmlhYmxlcyAgPFNUUk9ORz5MSU5FUzwvU1RST05HPiAgYW5kICA8U1RST05HPkNPTFM8L1NUUk9ORz4gIGFyZSAgZGVmaW5lZCAgaW4KKyAgICAgICA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4gIGFuZCB3aWxsIGJlIGZpbGxlZCBpbiBieSA8U1RST05HPmluaXRzY3I8L1NUUk9ORz4gd2l0aCB0aGUgc2l6ZQorICAgICAgIG9mIHRoZSBzY3JlZW4uICBUaGUgY29uc3RhbnRzIDxTVFJPTkc+VFJVRTwvU1RST05HPiBhbmQgPFNUUk9ORz5GQUxTRTwvU1RST05HPiBoYXZlIHRoZSB2YWwtCisgICAgICAgdWVzIDxTVFJPTkc+MTwvU1RST05HPiBhbmQgPFNUUk9ORz4wPC9TVFJPTkc+LCByZXNwZWN0aXZlbHkuCisKKyAgICAgICBUaGUgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+ICByb3V0aW5lcyAgYWxzbyAgZGVmaW5lICB0aGUgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qPC9TVFJPTkc+IHZhcmlhYmxlCisgICAgICAgPFNUUk9ORz5jdXJzY3I8L1NUUk9ORz4gd2hpY2ggaXMgdXNlZCBmb3IgY2VydGFpbiBsb3ctbGV2ZWwgb3BlcmF0aW9ucyBsaWtlCisgICAgICAgY2xlYXJpbmcgIGFuZCAgcmVkcmF3aW5nIGEgc2NyZWVuIGNvbnRhaW5pbmcgZ2FyYmFnZS4gIFRoZQorICAgICAgIDxTVFJPTkc+Y3Vyc2NyPC9TVFJPTkc+IGNhbiBiZSB1c2VkIGluIG9ubHkgYSBmZXcgcm91dGluZXMuCisKKyAgIDxTVFJPTkc+Um91dGluZTwvU1RST05HPiA8U1RST05HPmFuZDwvU1RST05HPiA8U1RST05HPkFyZ3VtZW50PC9TVFJPTkc+IDxTVFJPTkc+TmFtZXM8L1NUUk9ORz4KKyAgICAgICBNYW55IDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHJvdXRpbmVzIGhhdmUgdHdvIG9yIG1vcmUgdmVyc2lvbnMuICBUaGUgIHJvdS0KKyAgICAgICB0aW5lcyBwcmVmaXhlZCB3aXRoIDxTVFJPTkc+dzwvU1RST05HPiByZXF1aXJlIGEgd2luZG93IGFyZ3VtZW50LiAgVGhlIHJvdS0KKyAgICAgICB0aW5lcyBwcmVmaXhlZCB3aXRoIDxTVFJPTkc+cDwvU1RST05HPiByZXF1aXJlIGEgcGFkIGFyZ3VtZW50LiAgVGhvc2Ugd2l0aC0KKyAgICAgICBvdXQgYSBwcmVmaXggZ2VuZXJhbGx5IHVzZSA8U1RST05HPnN0ZHNjcjwvU1RST05HPi4KKworICAgICAgIFRoZSByb3V0aW5lcyBwcmVmaXhlZCB3aXRoIDxTVFJPTkc+bXY8L1NUUk9ORz4gcmVxdWlyZSBhIDxFTT55PC9FTT4gYW5kIDxFTT54PC9FTT4gY29vcmRpbmF0ZQorICAgICAgIHRvIG1vdmUgdG8gYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi4gICBUaGUKKyAgICAgICA8U1RST05HPm12PC9TVFJPTkc+ICByb3V0aW5lcyAgaW1wbHkgIGEgY2FsbCB0byA8U1RST05HPm1vdmU8L1NUUk9ORz4gYmVmb3JlIHRoZSBjYWxsIHRvIHRoZQorICAgICAgIG90aGVyIHJvdXRpbmUuICBUaGUgY29vcmRpbmF0ZSA8RU0+eTwvRU0+IGFsd2F5cyByZWZlcnMgdG8gdGhlICByb3cKKyAgICAgICAob2YgIHRoZSAgd2luZG93KSwgYW5kIDxFTT54PC9FTT4gYWx3YXlzIHJlZmVycyB0byB0aGUgY29sdW1uLiAgVGhlCisgICAgICAgdXBwZXIgbGVmdC1oYW5kIGNvcm5lciBpcyBhbHdheXMgKDAsMCksIG5vdCAoMSwxKS4KKworICAgICAgIFRoZSByb3V0aW5lcyBwcmVmaXhlZCB3aXRoIDxTVFJPTkc+bXZ3PC9TVFJPTkc+IHRha2UgYm90aCBhIHdpbmRvdyBhcmd1bWVudAorICAgICAgIGFuZCAgPEVNPng8L0VNPiAgYW5kICA8RU0+eTwvRU0+IGNvb3JkaW5hdGVzLiAgVGhlIHdpbmRvdyBhcmd1bWVudCBpcyBhbHdheXMKKyAgICAgICBzcGVjaWZpZWQgYmVmb3JlIHRoZSBjb29yZGluYXRlcy4KKworICAgICAgIEluIGVhY2ggY2FzZSwgPEVNPndpbjwvRU0+IGlzIHRoZSB3aW5kb3cgYWZmZWN0ZWQsIGFuZCA8RU0+cGFkPC9FTT4gIGlzICB0aGUKKyAgICAgICBwYWQgYWZmZWN0ZWQ7IDxFTT53aW48L0VNPiBhbmQgPEVNPnBhZDwvRU0+IGFyZSBhbHdheXMgcG9pbnRlcnMgdG8gdHlwZSA8U1RST05HPldJTi08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPkRPVzwvU1RST05HPi4KKworICAgICAgIE9wdGlvbiBzZXR0aW5nIHJvdXRpbmVzIHJlcXVpcmUgYSBCb29sZWFuIGZsYWcgPEVNPmJmPC9FTT4gd2l0aCB0aGUKKyAgICAgICB2YWx1ZSAgPFNUUk9ORz5UUlVFPC9TVFJPTkc+ICBvciA8U1RST05HPkZBTFNFPC9TVFJPTkc+OyA8RU0+YmY8L0VNPiBpcyBhbHdheXMgb2YgdHlwZSA8U1RST05HPmJvb2w8L1NUUk9ORz4uICBNb3N0IG9mCisgICAgICAgdGhlIGRhdGEgdHlwZXMgdXNlZCBpbiB0aGUgbGlicmFyeSByb3V0aW5lcywgc3VjaCBhcyAgPFNUUk9ORz5XSU4tPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5ET1c8L1NUUk9ORz4sICA8U1RST05HPlNDUkVFTjwvU1RST05HPiwgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiwgYW5kIDxTVFJPTkc+Y2h0eXBlPC9TVFJPTkc+IGFyZSBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPi4KKyAgICAgICBUeXBlcyB1c2VkIGZvciB0aGUgdGVybWluZm8gcm91dGluZXMgc3VjaCBhcyA8U1RST05HPlRFUk1JTkFMPC9TVFJPTkc+ICBhcmUKKyAgICAgICBkZWZpbmVkIGluIDxTVFJPTkc+Jmx0O3Rlcm0uaCZndDs8L1NUUk9ORz4uCisKKyAgICAgICBUaGlzICBtYW51YWwgIHBhZ2UgZGVzY3JpYmVzIGZ1bmN0aW9ucyB3aGljaCBtYXkgYXBwZWFyIGluCisgICAgICAgYW55IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGxpYnJhcnkuICBUaGVyZSAgYXJlICB0d28gIGNvbW1vbgorICAgICAgIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBsaWJyYXJ5OgorCisgICAgICAgICAgICAgIG5jdXJzZXMKKyAgICAgICAgICAgICAgICAgICB0aGUgICJub3JtYWwiICBsaWJyYXJ5LCAgd2hpY2ggIGhhbmRsZXMgIDgtYml0CisgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycy4gIFRoZSBub3JtYWwgKDgtYml0KSBsaWJyYXJ5IHN0b3JlcworICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgIGNvbWJpbmVkIHdpdGggYXR0cmlidXRlcyBpbiA8U1RST05HPmNodHlwZTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIGRhdGEuCisKKyAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzIGFsb25lIChubyBjb3JyZXNwb25kaW5nICBjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgICAgbWF5ICBiZSAgc3RvcmVkICBpbiAgPFNUUk9ORz5jaHR5cGU8L1NUUk9ORz4gIG9yIHRoZSBlcXVpdmFsZW50CisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz5hdHRyX3Q8L1NUUk9ORz4gZGF0YS4gIEluICBlaXRoZXIgIGNhc2UsICB0aGUgIGRhdGEgIGlzCisgICAgICAgICAgICAgICAgICAgc3RvcmVkIGluIHNvbWV0aGluZyBsaWtlIGFuIGludGVnZXIuCisKKyAgICAgICAgICAgICAgICAgICBFYWNoICBjZWxsICAocm93ICBhbmQgIGNvbHVtbikgIGluIGEgPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gaXMKKyAgICAgICAgICAgICAgICAgICBzdG9yZWQgYXMgYSA8U1RST05HPmNodHlwZTwvU1RST05HPi4KKworICAgICAgICAgICAgICBuY3Vyc2VzdworICAgICAgICAgICAgICAgICAgIHRoZSBzby1jYWxsZWQgIndpZGUiICBsaWJyYXJ5LCAgd2hpY2ggIGhhbmRsZXMKKyAgICAgICAgICAgICAgICAgICBtdWx0aWJ5dGUgICBjaGFyYWN0ZXJzICAoU2VlICB0aGUgIHNlY3Rpb24gIG9uCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz5BTFRFUk5BVEU8L1NUUk9ORz4gPFNUUk9ORz5DT05GSUdVUkFUSU9OUzwvU1RST05HPikuICBUaGUgIndpZGUiIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyAgYWxsICBvZiAgdGhlIGNhbGxzIGZyb20gdGhlICJub3JtYWwiCisgICAgICAgICAgICAgICAgICAgbGlicmFyeS4gIEl0IGFkZHMgYWJvdXQgb25lIHRoaXJkICBtb3JlICBjYWxscworICAgICAgICAgICAgICAgICAgIHVzaW5nIGRhdGEgdHlwZXMgd2hpY2ggc3RvcmUgbXVsdGlieXRlIGNoYXJhYy0KKyAgICAgICAgICAgICAgICAgICB0ZXJzOgorCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz5jY2hhcl90PC9TVFJPTkc+CisgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byA8U1RST05HPmNodHlwZTwvU1RST05HPi4gIEhvd2V2ZXIgaXQgIGlzICBhCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsICBiZWNhdXNlICBtb3JlICBkYXRhIGlzIHN0b3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBjYW4gZml0IGludG8gYW4gaW50ZWdlci4gIFRoZSAgY2hhci0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGVycyBhcmUgbGFyZ2UgZW5vdWdoIHRvIHJlcXVpcmUgYSBmdWxsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyIHZhbHVlIC0gYW5kICB0aGVyZSAgbWF5ICBiZSAgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiAgb25lICBjaGFyYWN0ZXIgcGVyIGNlbGwuICBUaGUgdmlkZW8KKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgYW5kIGNvbG9yIGFyZSBzdG9yZWQgaW4gIHNlcGEtCisgICAgICAgICAgICAgICAgICAgICAgICByYXRlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlLgorCisgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIGNlbGwgKHJvdyBhbmQgY29sdW1uKSBpbiBhIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZWQgYXMgYSA8U1RST05HPmNjaGFyX3Q8L1NUUk9ORz4uCisKKyAgICAgICAgICAgICAgICAgICA8U1RST05HPndjaGFyX3Q8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlcyBhICJ3aWRlIiBjaGFyYWN0ZXIuICBMaWtlICA8U1RST05HPmNodHlwZTwvU1RST05HPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgbWF5IGJlIGFuIGludGVnZXIuCisKKyAgICAgICAgICAgICAgICAgICA8U1RST05HPndpbnRfdDwvU1RST05HPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVzICBhIDxTVFJPTkc+d2NoYXJfdDwvU1RST05HPiBvciA8U1RST05HPldFT0Y8L1NUUk9ORz4gLSBub3QgdGhlIHNhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICB0aG91Z2ggYm90aCBtYXkgaGF2ZSB0aGUgc2FtZSBzaXplLgorCisgICAgICAgICAgICAgICAgICAgVGhlICAid2lkZSIgIGxpYnJhcnkgIHByb3ZpZGVzICBuZXcgIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgIHdoaWNoICBhcmUgYW5hbG9nb3VzIHRvIGZ1bmN0aW9ucyBpbiB0aGUgIm5vci0KKyAgICAgICAgICAgICAgICAgICBtYWwiIGxpYnJhcnkuICBUaGVyZSBpcyAgYSAgbmFtaW5nICBjb252ZW50aW9uCisgICAgICAgICAgICAgICAgICAgd2hpY2ggIHJlbGF0ZXMgIG1hbnkgIG9mIHRoZSBub3JtYWwvd2lkZSB2YXJpLQorICAgICAgICAgICAgICAgICAgIGFudHM6IGEgIl93IiBpcyBpbnNlcnRlZCBpbnRvIHRoZSAgbmFtZS4gICBGb3IKKyAgICAgICAgICAgICAgICAgICBleGFtcGxlLCA8U1RST05HPndhZGRjaDwvU1RST05HPiBiZWNvbWVzIDxTVFJPTkc+d2FkZF93Y2g8L1NUUk9ORz4uCisKKworICAgPFNUUk9ORz5Sb3V0aW5lPC9TVFJPTkc+IDxTVFJPTkc+TmFtZTwvU1RST05HPiA8U1RST05HPkluZGV4PC9TVFJPTkc+CisgICAgICAgVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyBlYWNoIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IHJvdXRpbmUgYW5kIHRoZSBuYW1lCisgICAgICAgb2YgdGhlIG1hbnVhbCBwYWdlIG9uIHdoaWNoICBpdCAgaXMgIGRlc2NyaWJlZC4gICBSb3V0aW5lcworICAgICAgIGZsYWdnZWQgIHdpdGggIGAqJyAgYXJlIG5jdXJzZXMtc3BlY2lmaWMsIG5vdCBkZXNjcmliZWQgYnkKKyAgICAgICBYUEc0IG9yIHByZXNlbnQgaW4gU1ZyNC4KKworCisgICAgICAgICAgICAgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IFJvdXRpbmUgTmFtZSAgICAgTWFudWFsIFBhZ2UgTmFtZQorICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBDT0xPUl9QQUlSICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIFBBSVJfTlVNQkVSICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIF9uY190cmFjZWJpdHMgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190cmFjZS4zeC5odG1sIj5jdXJzX3RyYWNlKDN4KTwvQT48L1NUUk9ORz4qCisKKyAgICAgICAgICAgICAgX3RyYWNlYXR0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgX3RyYWNlYXR0cjIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgX3RyYWNlY2hhciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgX3RyYWNlY2h0eXBlICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgX3RyYWNlY2h0eXBlMiAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgX3RyYWNlZHVtcCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgX3RyYWNlZiAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgX3RyYWNlbW91c2UgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RyYWNlLjN4Lmh0bWwiPmN1cnNfdHJhY2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgYWRkX3djaCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2guM3guaHRtbCI+Y3Vyc19hZGRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYWRkX3djaG5zdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRfd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYWRkX3djaHN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRfd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYWRkY2ggICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhZGRjaG5zdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGFkZGNoc3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYWRkbnN0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGFkZG53c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGFkZHN0ciAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhZGR3c3RyICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkd3N0ci4zeC5odG1sIj5jdXJzX2FkZHdzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBhc3N1bWVfZGVmYXVsdF9jb2xvcnMgICA8U1RST05HPjxBIEhSRUY9ImRlZmF1bHRfY29sb3JzLjN4Lmh0bWwiPmRlZmF1bHRfY29sb3JzKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGF0dHJfZ2V0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGF0dHJfb2ZmICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGF0dHJfb24gICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGF0dHJfc2V0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGF0dHJvZmYgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGF0dHJvbiAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGF0dHJzZXQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGJhdWRyYXRlICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBiZWVwICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmVlcC4zeC5odG1sIj5jdXJzX2JlZXAoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBia2dkICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBia2dkc2V0ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtnZC4zeC5odG1sIj5jdXJzX2JrZ2QoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBia2dybmQgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtncm5kLjN4Lmh0bWwiPmN1cnNfYmtncm5kKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYmtncm5kc2V0ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ3JuZC4zeC5odG1sIj5jdXJzX2JrZ3JuZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGJvcmRlciAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBib3JkZXJfc2V0ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBib3ggICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgYm94X3NldCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY2FuX2NoYW5nZV9jb2xvciAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBjYnJlYWsgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY2hnYXQgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY2xlYXIgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBjbGVhcm9rICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBjbHJ0b2JvdCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGNscnRvZW9sICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY29sb3JfY29udGVudCAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBjb2xvcl9zZXQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBjb3B5d2luICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3ZlcmxheS4zeC5odG1sIj5jdXJzX292ZXJsYXkoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBjdXJzX3NldCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgY3Vyc2VzX3ZlcnNpb24gICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2V4dGVuZC4zeC5odG1sIj5jdXJzX2V4dGVuZCgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBkZWZfcHJvZ19tb2RlICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZGVmX3NoZWxsX21vZGUgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGRlZmluZV9rZXkgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGRlbF9jdXJ0ZXJtICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZGVsYXlfb3V0cHV0ICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZGVsY2ggICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBkZWxldGVsbiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGRlbHNjcmVlbiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGRlbHdpbiAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3coM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBkZXJ3aW4gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZG91cGRhdGUgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3JlZnJlc2guM3guaHRtbCI+Y3Vyc19yZWZyZXNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZHVwd2luICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGVjaG8gICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBlY2hvX3djaGFyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBlY2hvY2hhciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGVuZHdpbiAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGVyYXNlICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyKDN4KTwvQT48L1NUUk9ORz4KKworICAgICAgICAgICAgICBlcmFzZWNoYXIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZXJhc2V3Y2hhciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGZpbHRlciAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGZsYXNoICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19iZWVwLjN4Lmh0bWwiPmN1cnNfYmVlcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGZsdXNoaW5wICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldF93Y2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd2NoLjN4Lmh0bWwiPmN1cnNfZ2V0X3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldF93c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd3N0ci4zeC5odG1sIj5jdXJzX2dldF93c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0YXR0cnMgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0YmVneCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBnZXRiZWd5ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbGVnYWN5LjN4Lmh0bWwiPmN1cnNfbGVnYWN5KDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGdldGJlZ3l4ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0YmtnZCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ2QuM3guaHRtbCI+Y3Vyc19ia2dkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0Ymtncm5kICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ3JuZC4zeC5odG1sIj5jdXJzX2JrZ3JuZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldGNjaGFyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjY2hhci4zeC5odG1sIj5jdXJzX2dldGNjaGFyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0Y2ggICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXRjdXJ4ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbGVnYWN5LjN4Lmh0bWwiPmN1cnNfbGVnYWN5KDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGdldGN1cnkgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19sZWdhY3kuM3guaHRtbCI+Y3Vyc19sZWdhY3koM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgZ2V0bWF4eCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBnZXRtYXh5ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbGVnYWN5LjN4Lmh0bWwiPmN1cnNfbGVnYWN5KDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGdldG1heHl4ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0bW91c2UgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgZ2V0bl93c3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXRuc3RyICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0cGFyeCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2xlZ2FjeS4zeC5odG1sIj5jdXJzX2xlZ2FjeSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBnZXRwYXJ5ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbGVnYWN5LjN4Lmh0bWwiPmN1cnNfbGVnYWN5KDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGdldHBhcnl4ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXR5eC4zeC5odG1sIj5jdXJzX2dldHl4KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgZ2V0c3RyICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGdldHN5eCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXR3aW4gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBnZXR5eCAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0eXguM3guaHRtbCI+Y3Vyc19nZXR5eCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGhhbGZkZWxheSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBoYXNfY29sb3JzICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY29sb3IuM3guaHRtbCI+Y3Vyc19jb2xvcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGhhc19pYyAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBoYXNfaWwgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaGFzX2tleSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaGxpbmUgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGhsaW5lX3NldCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGlkY29rICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGlkbG9rICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGltbWVkb2sgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluX3djaCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbl93Y2huc3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5fd2Noc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluY2ggICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluY2huc3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluY2hzdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluaXRfY29sb3IgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5pdF9wYWlyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NvbG9yLjN4Lmh0bWwiPmN1cnNfY29sb3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbml0c2NyICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbm5zdHIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGlubndzdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnNfbndzdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluc193Y2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd2NoLjN4Lmh0bWwiPmN1cnNfaW5zX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluc193c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd3N0ci4zeC5odG1sIj5jdXJzX2luc193c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5zY2ggICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc2NoLjN4Lmh0bWwiPmN1cnNfaW5zY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnNkZWxsbiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsZXRlbG4uM3guaHRtbCI+Y3Vyc19kZWxldGVsbigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluc2VydGxuICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaW5zbnN0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGluc3N0ciAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbnN0ciAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGludHJmbHVzaCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpbndzdHIgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW53c3RyLjN4Lmh0bWwiPmN1cnNfaW53c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgaXNfY2xlYXJlZCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBpc19pZGNvayAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGlzX2lkbG9rICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPioKKworICAgICAgICAgICAgICBpc19pbW1lZG9rICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGlzX2tleXBhZCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaXNfbGVhdmVvayAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBpc19saW5ldG91Y2hlZCAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGlzX25vZGVsYXkgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaXNfbm90aW1lb3V0ICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBpc19zY3JvbGxvayAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3BhcXVlLjN4Lmh0bWwiPmN1cnNfb3BhcXVlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGlzX3N5bmNvayAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vcGFxdWUuM3guaHRtbCI+Y3Vyc19vcGFxdWUoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaXNfdGVybV9yZXNpemVkICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgaXNfd2ludG91Y2hlZCAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBpc2VuZHdpbiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBrZXlfZGVmaW5lZCAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImtleV9kZWZpbmVkLjN4Lmh0bWwiPmtleV9kZWZpbmVkKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIGtleV9uYW1lICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGtleWJvdW5kICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ia2V5Ym91bmQuM3guaHRtbCI+a2V5Ym91bmQoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAga2V5bmFtZSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAga2V5b2sgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICBrZXlwYWQgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAga2lsbGNoYXIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIGtpbGx3Y2hhciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBsZWF2ZW9rICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBsb25nbmFtZSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbWNwcmludCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50LjN4Lmh0bWwiPmN1cnNfcHJpbnQoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgbWV0YSAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG1vdXNlX3RyYWZvICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIG1vdXNlaW50ZXJ2YWwgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIG1vdXNlbWFzayAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIG1vdmUgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3ZlLjN4Lmh0bWwiPmN1cnNfbW92ZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12YWRkX3djaCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2NoLjN4Lmh0bWwiPmN1cnNfYWRkX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12YWRkX3djaG5zdHIgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12YWRkX3djaHN0ciAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12YWRkY2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZhZGRjaG5zdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZGNoc3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12YWRkbnN0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZG53c3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkd3N0ci4zeC5odG1sIj5jdXJzX2FkZHdzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmFkZHN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZhZGR3c3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZjaGdhdCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZjdXIgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmRlbGNoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsY2guM3guaHRtbCI+Y3Vyc19kZWxjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12ZGVyd2luICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3coM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmdldF93Y2ggICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmdldF93c3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3dzdHIuM3guaHRtbCI+Y3Vyc19nZXRfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12Z2V0Y2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZnZXRuX3dzdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmdldG5zdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZnZXRzdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aGxpbmUgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmhsaW5lX3NldCAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluX3djaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2NoLjN4Lmh0bWwiPmN1cnNfaW5fd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbl93Y2huc3RyICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5fd2Noc3RyICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluY2ggICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaC4zeC5odG1sIj5jdXJzX2luY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluY2huc3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluY2hzdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5jaHN0ci4zeC5odG1sIj5jdXJzX2luY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmlubnN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5ud3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluc19ud3N0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5zX3djaCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd2NoLjN4Lmh0bWwiPmN1cnNfaW5zX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5zX3dzdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd3N0ci4zeC5odG1sIj5jdXJzX2luc193c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbnNjaCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc2NoLjN4Lmh0bWwiPmN1cnNfaW5zY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdmluc25zdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbnNzdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12aW5zdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZpbndzdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgbXZwcmludHcgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12c2NhbncgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY2Fudy4zeC5odG1sIj5jdXJzX3NjYW53KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ2bGluZSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12dmxpbmVfc2V0ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2FkZF93Y2ggICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2NoLjN4Lmh0bWwiPmN1cnNfYWRkX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2FkZF93Y2huc3RyICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2FkZF93Y2hzdHIgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRfd2Noc3RyLjN4Lmh0bWwiPmN1cnNfYWRkX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2FkZGNoICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaC4zeC5odG1sIj5jdXJzX2FkZGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3YWRkY2huc3RyICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRjaHN0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2hzdHIuM3guaHRtbCI+Y3Vyc19hZGRjaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2FkZG5zdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRzdHIuM3guaHRtbCI+Y3Vyc19hZGRzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRud3N0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkd3N0ci4zeC5odG1sIj5jdXJzX2FkZHdzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndhZGRzdHIgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3YWRkd3N0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3Y2hnYXQgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2F0dHIuM3guaHRtbCI+Y3Vyc19hdHRyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3ZGVsY2ggICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGNoLjN4Lmh0bWwiPmN1cnNfZGVsY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndnZXRfd2NoICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3djaC4zeC5odG1sIj5jdXJzX2dldF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndnZXRfd3N0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0X3dzdHIuM3guaHRtbCI+Y3Vyc19nZXRfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2dldGNoICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3Z2V0bl93c3RyICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndnZXRuc3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3Z2V0c3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2hsaW5lICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndobGluZV9zZXQgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbiAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5fd2NoICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaC4zeC5odG1sIj5jdXJzX2luX3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luX3djaG5zdHIgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2hzdHIuM3guaHRtbCI+Y3Vyc19pbl93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbl93Y2hzdHIgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5jaCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2guM3guaHRtbCI+Y3Vyc19pbmNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5jaG5zdHIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5jaHN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luY2hzdHIuM3guaHRtbCI+Y3Vyc19pbmNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5uc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3RyLjN4Lmh0bWwiPmN1cnNfaW5zdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbm53c3RyICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW53c3RyLjN4Lmh0bWwiPmN1cnNfaW53c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5zX253c3RyICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193c3RyLjN4Lmh0bWwiPmN1cnNfaW5zX3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbnNfd2NoICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3djaC4zeC5odG1sIj5jdXJzX2luc193Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbnNfd3N0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zX3dzdHIuM3guaHRtbCI+Y3Vyc19pbnNfd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luc2NoICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNjaC4zeC5odG1sIj5jdXJzX2luc2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3aW5zbnN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2luc3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNzdHIuM3guaHRtbCI+Y3Vyc19pbnNzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndpbnN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zdHIuM3guaHRtbCI+Y3Vyc19pbnN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG12d2lud3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbndzdHIuM3guaHRtbCI+Y3Vyc19pbndzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdndwcmludHcgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3c2NhbncgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBtdnd2bGluZSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyLjN4Lmh0bWwiPmN1cnNfYm9yZGVyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbXZ3dmxpbmVfc2V0ICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlcl9zZXQuM3guaHRtbCI+Y3Vyc19ib3JkZXJfc2V0KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbmFwbXMgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5ld3BhZCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBuZXd0ZXJtICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5pdHNjci4zeC5odG1sIj5jdXJzX2luaXRzY3IoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBuZXd3aW4gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbmwgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbm9jYnJlYWsgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5vZGVsYXkgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBub2VjaG8gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbm9maWx0ZXIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIG5vbmwgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdXRvcHRzLjN4Lmh0bWwiPmN1cnNfb3V0b3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG5vcWlmbHVzaCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBub3JhdyAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgbm90aW1lb3V0ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG92ZXJsYXkgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdmVybGF5LjN4Lmh0bWwiPmN1cnNfb3ZlcmxheSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIG92ZXJ3cml0ZSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19vdmVybGF5LjN4Lmh0bWwiPmN1cnNfb3ZlcmxheSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHBhaXJfY29udGVudCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcGVjaG9jaGFyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHBub3V0cmVmcmVzaCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wYWQuM3guaHRtbCI+Y3Vyc19wYWQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBwcmVmcmVzaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcGFkLjN4Lmh0bWwiPmN1cnNfcGFkKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcHJpbnR3ICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50dy4zeC5odG1sIj5jdXJzX3ByaW50dygzeCk8L0E+PC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgcHV0cCAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBwdXR3aW4gICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdXRpbC4zeC5odG1sIj5jdXJzX3V0aWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBxaWZsdXNoICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmF3ICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHJlZHJhd3dpbiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHJlZnJlc2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHJlc2V0X3Byb2dfbW9kZSAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICByZXNldF9zaGVsbF9tb2RlICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfa2VybmVsLjN4Lmh0bWwiPmN1cnNfa2VybmVsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmVzZXR0eSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHJlc2l6ZXRlcm0gICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0icmVzaXpldGVybS4zeC5odG1sIj5yZXNpemV0ZXJtKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIHJlc3RhcnR0ZXJtICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmlwb2ZmbGluZSAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNhdmV0dHkgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19rZXJuZWwuM3guaHRtbCI+Y3Vyc19rZXJuZWwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzY2FudyAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NhbncuM3guaHRtbCI+Y3Vyc19zY2FudygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNjcl9kdW1wICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2NyX2luaXQgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcl9kdW1wLjN4Lmh0bWwiPmN1cnNfc2NyX2R1bXAoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzY3JfcmVzdG9yZSAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NyX2R1bXAuM3guaHRtbCI+Y3Vyc19zY3JfZHVtcCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNjcl9zZXQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JfZHVtcC4zeC5odG1sIj5jdXJzX3Njcl9kdW1wKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2NybCAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Njcm9sbC4zeC5odG1sIj5jdXJzX3Njcm9sbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNjcm9sbCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzY3JvbGxvayAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzZXRfY3VydGVybSAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNldF90ZXJtICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbml0c2NyLjN4Lmh0bWwiPmN1cnNfaW5pdHNjcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNldGNjaGFyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjY2hhci4zeC5odG1sIj5jdXJzX2dldGNjaGFyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2V0c2NycmVnICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX291dG9wdHMuM3guaHRtbCI+Y3Vyc19vdXRvcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2V0c3l4ICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2tlcm5lbC4zeC5odG1sIj5jdXJzX2tlcm5lbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNldHRlcm0gICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2V0dXB0ZXJtICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfYXR0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIHNsa19hdHRyX29mZiAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfYXR0cl9vbiAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX2F0dHJfc2V0ICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19hdHRyb2ZmICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfYXR0cm9uICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX2F0dHJzZXQgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19jbGVhciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfY29sb3IgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX2luaXQgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19sYWJlbCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfbm91dHJlZnJlc2ggICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX3JlZnJlc2ggICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHNsa19yZXN0b3JlICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzbGtfc2V0ICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2xrLjN4Lmh0bWwiPmN1cnNfc2xrKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc2xrX3RvdWNoICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Nsay4zeC5odG1sIj5jdXJzX3NsaygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHN0YW5kZW5kICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHN0YW5kb3V0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHN0YXJ0X2NvbG9yICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jb2xvci4zeC5odG1sIj5jdXJzX2NvbG9yKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgc3VicGFkICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3BhZC4zeC5odG1sIj5jdXJzX3BhZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHN1YndpbiAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3coM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICBzeW5jb2sgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGVybV9hdHRycyAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1hdHRycy4zeC5odG1sIj5jdXJzX3Rlcm1hdHRycygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRlcm1hdHRycyAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtYXR0cnMuM3guaHRtbCI+Y3Vyc190ZXJtYXR0cnMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB0ZXJtbmFtZSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWF0dHJzLjN4Lmh0bWwiPmN1cnNfdGVybWF0dHJzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGdldGVudCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGdldGZsYWcgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGdldG51bSAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGdldHN0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGdvdG8gICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGlnZXRmbGFnICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB0aWdldG51bSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRpZ2V0c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGltZW91dCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lub3B0cy4zeC5odG1sIj5jdXJzX2lub3B0cygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHRvdWNobGluZSAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190b3VjaC4zeC5odG1sIj5jdXJzX3RvdWNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdG91Y2h3aW4gICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3RvdWNoLjN4Lmh0bWwiPmN1cnNfdG91Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB0cGFybSAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgdHB1dHMgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1jYXAuM3guaHRtbCI+Y3Vyc190ZXJtY2FwKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdHB1dHMgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB0cmFjZSAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdHJhY2UuM3guaHRtbCI+Y3Vyc190cmFjZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICB0eXBlYWhlYWQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5vcHRzLjN4Lmh0bWwiPmN1cnNfaW5vcHRzKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdW5jdHJsICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdW5nZXRfd2NoICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93Y2guM3guaHRtbCI+Y3Vyc19nZXRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdW5nZXRjaCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldGNoLjN4Lmh0bWwiPmN1cnNfZ2V0Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB1bmdldG1vdXNlICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICB1bnRvdWNod2luICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHVzZV9kZWZhdWx0X2NvbG9ycyAgICAgIDxTVFJPTkc+PEEgSFJFRj0iZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMoM3gpPC9BPjwvU1RST05HPioKKyAgICAgICAgICAgICAgdXNlX2VudiAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3V0aWwuM3guaHRtbCI+Y3Vyc191dGlsKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdXNlX2V4dGVuZGVkX25hbWVzICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2V4dGVuZC4zeC5odG1sIj5jdXJzX2V4dGVuZCgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICB1c2VfbGVnYWN5X2NvZGluZyAgICAgICA8U1RST05HPjxBIEhSRUY9ImxlZ2FjeV9jb2RpbmcuM3guaHRtbCI+bGVnYWN5X2NvZGluZygzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICB2aWRfYXR0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHZpZF9wdXRzICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc190ZXJtaW5mby4zeC5odG1sIj5jdXJzX3Rlcm1pbmZvKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdmlkYXR0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB2aWRwdXRzICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdGVybWluZm8uM3guaHRtbCI+Y3Vyc190ZXJtaW5mbygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHZsaW5lICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB2bGluZV9zZXQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB2d19wcmludHcgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdndfc2NhbncgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB2d3ByaW50dyAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcHJpbnR3LjN4Lmh0bWwiPmN1cnNfcHJpbnR3KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgdndzY2FudyAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3NjYW53LjN4Lmh0bWwiPmN1cnNfc2NhbncoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YWRkX3djaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaC4zeC5odG1sIj5jdXJzX2FkZF93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YWRkX3djaG5zdHIgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YWRkX3djaHN0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkX3djaHN0ci4zeC5odG1sIj5jdXJzX2FkZF93Y2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YWRkY2ggICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkY2guM3guaHRtbCI+Y3Vyc19hZGRjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhZGRjaG5zdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGRjaHN0ci4zeC5odG1sIj5jdXJzX2FkZGNoc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZGNoc3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoc3RyLjN4Lmh0bWwiPmN1cnNfYWRkY2hzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3YWRkbnN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYWRkc3RyLjN4Lmh0bWwiPmN1cnNfYWRkc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZG53c3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHdzdHIuM3guaHRtbCI+Y3Vyc19hZGR3c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2FkZHN0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZHN0ci4zeC5odG1sIj5jdXJzX2FkZHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhZGR3c3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hZGR3c3RyLjN4Lmh0bWwiPmN1cnNfYWRkd3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhdHRyX2dldCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhdHRyX29mZiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhdHRyX29uICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhdHRyX3NldCAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhdHRyb2ZmICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhdHRyb24gICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdhdHRyc2V0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdia2dkICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdia2dkc2V0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dkLjN4Lmh0bWwiPmN1cnNfYmtnZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdia2dybmQgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ia2dybmQuM3guaHRtbCI+Y3Vyc19ia2dybmQoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Ymtncm5kc2V0ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYmtncm5kLjN4Lmh0bWwiPmN1cnNfYmtncm5kKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2JvcmRlciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdib3JkZXJfc2V0ICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdjaGdhdCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdjbGVhciAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19jbGVhci4zeC5odG1sIj5jdXJzX2NsZWFyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2NscnRvYm90ICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2NsZWFyLjN4Lmh0bWwiPmN1cnNfY2xlYXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Y2xydG9lb2wgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdjb2xvcl9zZXQgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19hdHRyLjN4Lmh0bWwiPmN1cnNfYXR0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdjdXJzeW5jdXAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc193aW5kb3cuM3guaHRtbCI+Y3Vyc193aW5kb3coM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3ZGVsY2ggICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZGVsY2guM3guaHRtbCI+Y3Vyc19kZWxjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdkZWxldGVsbiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2VjaG9fd2NoYXIgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZF93Y2guM3guaHRtbCI+Y3Vyc19hZGRfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2VjaG9jaGFyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2FkZGNoLjN4Lmh0bWwiPmN1cnNfYWRkY2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3ZW5jbG9zZSAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfbW91c2UuM3guaHRtbCI+Y3Vyc19tb3VzZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICB3ZXJhc2UgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfY2xlYXIuM3guaHRtbCI+Y3Vyc19jbGVhcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdnZXRfd2NoICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd2NoLjN4Lmh0bWwiPmN1cnNfZ2V0X3djaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdnZXRfd3N0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRfd3N0ci4zeC5odG1sIj5jdXJzX2dldF93c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2dldGJrZ3JuZCAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JrZ3JuZC4zeC5odG1sIj5jdXJzX2JrZ3JuZCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdnZXRjaCAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2dldG5fd3N0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldF93c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0X3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3Z2V0bnN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfZ2V0c3RyLjN4Lmh0bWwiPmN1cnNfZ2V0c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2dldHN0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2dldHN0ci4zeC5odG1sIj5jdXJzX2dldHN0cigzeCk8L0E+PC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgd2hsaW5lICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2JvcmRlci4zeC5odG1sIj5jdXJzX2JvcmRlcigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdobGluZV9zZXQgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXJfc2V0LjN4Lmh0bWwiPmN1cnNfYm9yZGVyX3NldCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbl93Y2ggICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbl93Y2guM3guaHRtbCI+Y3Vyc19pbl93Y2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5fd2NobnN0ciAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5fd2Noc3RyLjN4Lmh0bWwiPmN1cnNfaW5fd2Noc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luX3djaHN0ciAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luX3djaHN0ci4zeC5odG1sIj5jdXJzX2luX3djaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbmNoICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoLjN4Lmh0bWwiPmN1cnNfaW5jaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbmNobnN0ciAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbmNoc3RyICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbmNoc3RyLjN4Lmh0bWwiPmN1cnNfaW5jaHN0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbm5zdHIgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2lubndzdHIgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbnNfbndzdHIgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnNfd3N0ci4zeC5odG1sIj5jdXJzX2luc193c3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luc193Y2ggICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193Y2guM3guaHRtbCI+Y3Vyc19pbnNfd2NoKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luc193c3RyICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc193c3RyLjN4Lmh0bWwiPmN1cnNfaW5zX3dzdHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5zY2ggICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zY2guM3guaHRtbCI+Y3Vyc19pbnNjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbnNkZWxsbiAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19kZWxldGVsbi4zeC5odG1sIj5jdXJzX2RlbGV0ZWxuKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luc2VydGxuICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2RlbGV0ZWxuLjN4Lmh0bWwiPmN1cnNfZGVsZXRlbG4oM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3aW5zbnN0ciAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfaW5zc3RyLjN4Lmh0bWwiPmN1cnNfaW5zc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2luc3N0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2luc3N0ci4zeC5odG1sIj5jdXJzX2luc3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbnN0ciAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbnN0ci4zeC5odG1sIj5jdXJzX2luc3RyKDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd2lud3N0ciAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX2lud3N0ci4zeC5odG1sIj5jdXJzX2lud3N0cigzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdtb3VzZV90cmFmbyAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4qCisgICAgICAgICAgICAgIHdtb3ZlICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3ZlLjN4Lmh0bWwiPmN1cnNfbW92ZSgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdub3V0cmVmcmVzaCAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19yZWZyZXNoLjN4Lmh0bWwiPmN1cnNfcmVmcmVzaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdwcmludHcgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludHcuM3guaHRtbCI+Y3Vyc19wcmludHcoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3cmVkcmF3bG4gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3cmVmcmVzaCAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfcmVmcmVzaC4zeC5odG1sIj5jdXJzX3JlZnJlc2goM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3cmVzaXplICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9IndyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZSgzeCk8L0E+PC9TVFJPTkc+KgorICAgICAgICAgICAgICB3c2NhbncgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfc2NhbncuM3guaHRtbCI+Y3Vyc19zY2FudygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdzY3JsICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zY3JvbGwuM3guaHRtbCI+Y3Vyc19zY3JvbGwoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3c2V0c2NycmVnICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfb3V0b3B0cy4zeC5odG1sIj5jdXJzX291dG9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3c3RhbmRlbmQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3c3RhbmRvdXQgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYXR0ci4zeC5odG1sIj5jdXJzX2F0dHIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3c3luY2Rvd24gICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfd2luZG93LjN4Lmh0bWwiPmN1cnNfd2luZG93KDN4KTwvQT48L1NUUk9ORz4KKyAgICAgICAgICAgICAgd3N5bmN1cCAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3dpbmRvdy4zeC5odG1sIj5jdXJzX3dpbmRvdygzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHd0aW1lb3V0ICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19pbm9wdHMuM3guaHRtbCI+Y3Vyc19pbm9wdHMoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3dG91Y2hsbiAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfdG91Y2guM3guaHRtbCI+Y3Vyc190b3VjaCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHd1bmN0cmwgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc191dGlsLjN4Lmh0bWwiPmN1cnNfdXRpbCgzeCk8L0E+PC9TVFJPTkc+CisgICAgICAgICAgICAgIHd2bGluZSAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19ib3JkZXIuM3guaHRtbCI+Y3Vyc19ib3JkZXIoM3gpPC9BPjwvU1RST05HPgorICAgICAgICAgICAgICB3dmxpbmVfc2V0ICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9ImN1cnNfYm9yZGVyX3NldC4zeC5odG1sIj5jdXJzX2JvcmRlcl9zZXQoM3gpPC9BPjwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiAgPFNUUk9ORz5FUlI8L1NUUk9ORz4gIHVwb24gIGZhaWx1cmUKKyAgICAgICBhbmQgIGFuICBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gdXBvbiBzdWNjZXNzZnVsIGNvbS0KKyAgICAgICBwbGV0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkIGluICB0aGUgIHJvdXRpbmUgIGRlc2NyaXAtCisgICAgICAgdGlvbnMuCisKKyAgICAgICBBbGwgIG1hY3JvcyAgcmV0dXJuICB0aGUgIHZhbHVlICBvZiAgdGhlIDxTVFJPTkc+dzwvU1RST05HPiB2ZXJzaW9uLCBleGNlcHQKKyAgICAgICA8U1RST05HPnNldHNjcnJlZzwvU1RST05HPiwgPFNUUk9ORz53c2V0c2NycmVnPC9TVFJPTkc+LCA8U1RST05HPmdldHl4PC9TVFJPTkc+LCA8U1RST05HPmdldGJlZ3l4PC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5nZXRtYXh5eDwvU1RST05HPi4gIFRoZQorICAgICAgIHJldHVybiAgdmFsdWVzICBvZiA8U1RST05HPnNldHNjcnJlZzwvU1RST05HPiwgPFNUUk9ORz53c2V0c2NycmVnPC9TVFJPTkc+LCA8U1RST05HPmdldHl4PC9TVFJPTkc+LCA8U1RST05HPmdldGJlZ3l4PC9TVFJPTkc+LAorICAgICAgIGFuZCA8U1RST05HPmdldG1heHl4PC9TVFJPTkc+IGFyZSB1bmRlZmluZWQgKGkuZS4sIHRoZXNlIHNob3VsZCBub3QgYmUgdXNlZAorICAgICAgIGFzIHRoZSByaWdodC1oYW5kIHNpZGUgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnRzKS4KKworICAgICAgIFJvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiA8U1RST05HPk5VTEw8L1NUUk9ORz4gb24gZXJyb3IuCisKKworPC9QUkU+Cis8SDI+RU5WSVJPTk1FTlQ8L0gyPjxQUkU+CisgICAgICAgVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCBzeW1ib2xzIGFyZSB1c2VmdWwgZm9yIGN1c3RvbWl6LQorICAgICAgIGluZyB0aGUgcnVudGltZSBiZWhhdmlvciBvZiB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkuICBUaGUgbW9zdAorICAgICAgIGltcG9ydGFudCBvbmVzIGhhdmUgYmVlbiBhbHJlYWR5IGRpc2N1c3NlZCBpbiBkZXRhaWwuCisKKyAgICAgICBCQVVEUkFURQorICAgICAgICAgICAgVGhlICBkZWJ1Z2dpbmcgbGlicmFyeSBjaGVja3MgdGhpcyBlbnZpcm9ubWVudCBzeW1ib2wKKyAgICAgICAgICAgIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGhhcyByZWRpcmVjdGVkIG91dHB1dCB0byBhIGZpbGUuCisgICAgICAgICAgICBUaGUgIHN5bWJvbCdzIG51bWVyaWMgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIGJhdWRyYXRlLgorICAgICAgICAgICAgSWYgbm8gdmFsdWUgaXMgZm91bmQsIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB1c2VzIDk2MDAuICBUaGlzIGFsbG93cworICAgICAgICAgICAgdGVzdGVycyAgdG8gY29uc3RydWN0IHJlcGVhdGFibGUgdGVzdC1jYXNlcyB0aGF0IHRha2UKKyAgICAgICAgICAgIGludG8gYWNjb3VudCBjb3N0cyB0aGF0IGRlcGVuZCBvbiBiYXVkcmF0ZS4KKworICAgICAgIENDICAgV2hlbiBzZXQsIGNoYW5nZSBvY2N1cnJlbmNlcyBvZiB0aGUgY29tbWFuZF9jaGFyYWN0ZXIKKyAgICAgICAgICAgIChpLmUuLCAgdGhlICA8U1RST05HPmNtZGNoPC9TVFJPTkc+IGNhcGFiaWxpdHkpIG9mIHRoZSBsb2FkZWQgdGVybWluZm8KKyAgICAgICAgICAgIGVudHJpZXMgdG8gdGhlIHZhbHVlIG9mIHRoaXMgc3ltYm9sLiAgVmVyeSAgZmV3ICB0ZXItCisgICAgICAgICAgICBtaW5mbyBlbnRyaWVzIHByb3ZpZGUgdGhpcyBmZWF0dXJlLgorCisgICAgICAgQ09MVU1OUworICAgICAgICAgICAgU3BlY2lmeSAgdGhlICB3aWR0aCAgb2YgIHRoZSAgc2NyZWVuICBpbiAgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIEFwcGxpY2F0aW9ucyBydW5uaW5nIGluIGEgd2luZG93aW5nIGVudmlyb25tZW50ICB1c3UtCisgICAgICAgICAgICBhbGx5ICBhcmUgIGFibGUgIHRvIG9idGFpbiB0aGUgd2lkdGggb2YgdGhlIHdpbmRvdyBpbgorICAgICAgICAgICAgd2hpY2ggdGhleSBhcmUgZXhlY3V0aW5nLiAgIElmICBuZWl0aGVyICB0aGUgIDxTVFJPTkc+Q09MVU1OUzwvU1RST05HPgorICAgICAgICAgICAgdmFsdWUgIG5vciAgdGhlICB0ZXJtaW5hbCdzIHNjcmVlbiBzaXplIGlzIGF2YWlsYWJsZSwKKyAgICAgICAgICAgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB1c2VzIHRoZSBzaXplIHdoaWNoIG1heSBiZSBzcGVjaWZpZWQgIGluICB0aGUKKyAgICAgICAgICAgIHRlcm1pbmZvIGRhdGFiYXNlIChpLmUuLCB0aGUgPFNUUk9ORz5jb2xzPC9TVFJPTkc+IGNhcGFiaWxpdHkpLgorCisgICAgICAgICAgICBJdCAgaXMgIGltcG9ydGFudCB0aGF0IHlvdXIgYXBwbGljYXRpb24gdXNlIGEgY29ycmVjdAorICAgICAgICAgICAgc2l6ZSBmb3IgdGhlIHNjcmVlbi4gIFRoaXMgIGlzICBub3QgIGFsd2F5cyAgcG9zc2libGUKKyAgICAgICAgICAgIGJlY2F1c2UgIHlvdXIgIGFwcGxpY2F0aW9uICBtYXkgIGJlIHJ1bm5pbmcgb24gYSBob3N0CisgICAgICAgICAgICB3aGljaCBkb2VzIG5vdCBob25vciBOQVdTIChOZWdvdGlhdGlvbnMgQWJvdXQgIFdpbmRvdworICAgICAgICAgICAgU2l6ZSksICBvciAgYmVjYXVzZSAgeW91ICBhcmUgIHRlbXBvcmFyaWx5IHJ1bm5pbmcgYXMKKyAgICAgICAgICAgIGFub3RoZXIgdXNlci4gIEhvd2V2ZXIsIHNldHRpbmcgPFNUUk9ORz5DT0xVTU5TPC9TVFJPTkc+IGFuZC9vciAgPFNUUk9ORz5MSU5FUzwvU1RST05HPgorICAgICAgICAgICAgb3ZlcnJpZGVzICB0aGUgIGxpYnJhcnkncyAgdXNlICBvZiAgdGhlICBzY3JlZW4gIHNpemUKKyAgICAgICAgICAgIG9idGFpbmVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgICAgICAgICAgIEVpdGhlciA8U1RST05HPkNPTFVNTlM8L1NUUk9ORz4gb3IgIDxTVFJPTkc+TElORVM8L1NUUk9ORz4gIHN5bWJvbHMgIG1heSAgYmUgIHNwZWNpZmllZAorICAgICAgICAgICAgaW5kZXBlbmRlbnRseS4gICBUaGlzICBpcyBtYWlubHkgdXNlZnVsIHRvIGNpcmN1bXZlbnQKKyAgICAgICAgICAgIGxlZ2FjeSBtaXNmZWF0dXJlcyBvZiAgdGVybWluYWwgIGRlc2NyaXB0aW9ucywgIGUuZy4sCisgICAgICAgICAgICB4dGVybSB3aGljaCBjb21tb25seSBzcGVjaWZpZXMgYSA2NSBsaW5lIHNjcmVlbi4gIEZvcgorICAgICAgICAgICAgYmVzdCByZXN1bHRzLCA8U1RST05HPmxpbmVzPC9TVFJPTkc+IGFuZCA8U1RST05HPmNvbHM8L1NUUk9ORz4gc2hvdWxkIG5vdCBiZSAgc3BlY2lmaWVkCisgICAgICAgICAgICBpbiBhIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGZvciB0ZXJtaW5hbHMgd2hpY2ggYXJlIHJ1bgorICAgICAgICAgICAgYXMgZW11bGF0aW9ucy4KKworICAgICAgICAgICAgVXNlIHRoZSA8U1RST05HPnVzZV9lbnY8L1NUUk9ORz4gZnVuY3Rpb24gdG8gZGlzYWJsZSBhbGwgdXNlIG9mIGV4dGVyLQorICAgICAgICAgICAgbmFsIGVudmlyb25tZW50IChpbmNsdWRpbmcgc3lzdGVtIGNhbGxzKSB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgIHRoZSBzY3JlZW4gc2l6ZS4KKworICAgICAgIEVTQ0RFTEFZCisgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRvdGFsIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yICB3aGljaAorICAgICAgICAgICAgbmN1cnNlcyAgd2lsbCAgYXdhaXQgIGEgIGNoYXJhY3RlciAgc2VxdWVuY2UsIGUuZy4sIGEKKyAgICAgICAgICAgIGZ1bmN0aW9uIGtleS4gIFRoZSBkZWZhdWx0IHZhbHVlLCAxMDAwICBtaWxsaXNlY29uZHMsCisgICAgICAgICAgICBpcyBlbm91Z2ggZm9yIG1vc3QgdXNlcy4gIEhvd2V2ZXIsIGl0IGlzIG1hZGUgYSB2YXJpLQorICAgICAgICAgICAgYWJsZSB0byBhY2NvbW1vZGF0ZSB1bnVzdWFsIGFwcGxpY2F0aW9ucy4KKworICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIGluc3RhbmNlIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBjaGFuZ2UKKyAgICAgICAgICAgIHRoaXMgIHZhbHVlIGlzIHRvIHdvcmsgd2l0aCBzbG93IGhvc3RzLCBlLmcuLCBydW5uaW5nCisgICAgICAgICAgICBvbiBhIG5ldHdvcmsuICBJZiB0aGUgIGhvc3QgIGNhbm5vdCAgcmVhZCAgY2hhcmFjdGVycworICAgICAgICAgICAgcmFwaWRseSAgZW5vdWdoLCAgaXQgIHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgaWYKKyAgICAgICAgICAgIHRoZSB0ZXJtaW5hbCBkaWQgbm90IHNlbmQgY2hhcmFjdGVycyByYXBpZGx5ICBlbm91Z2guCisgICAgICAgICAgICBUaGUgbGlicmFyeSB3aWxsIHN0aWxsIHNlZSBhIHRpbWVvdXQuCisKKyAgICAgICAgICAgIE5vdGUgIHRoYXQgeHRlcm0gbW91c2UgZXZlbnRzIGFyZSBidWlsdCB1cCBmcm9tIGNoYXItCisgICAgICAgICAgICBhY3RlciBzZXF1ZW5jZXMgcmVjZWl2ZWQgZnJvbSAgdGhlICB4dGVybS4gICBJZiAgeW91cgorICAgICAgICAgICAgYXBwbGljYXRpb24gbWFrZXMgaGVhdnkgdXNlIG9mIG11bHRpcGxlLWNsaWNraW5nLCB5b3UKKyAgICAgICAgICAgIG1heSB3aXNoIHRvIGxlbmd0aGVuIHRoaXMgZGVmYXVsdCB2YWx1ZSAgYmVjYXVzZSAgdGhlCisgICAgICAgICAgICB0aW1lb3V0ICBhcHBsaWVzIHRvIHRoZSBjb21wb3NlZCBtdWx0aS1jbGljayBldmVudCBhcworICAgICAgICAgICAgd2VsbCBhcyB0aGUgaW5kaXZpZHVhbCBjbGlja3MuCisKKyAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhpcyAgaW1wbGUtCisgICAgICAgICAgICBtZW50YXRpb24gIHByb3ZpZGVzICBhICBnbG9iYWwgdmFyaWFibGUgd2l0aCB0aGUgc2FtZQorICAgICAgICAgICAgbmFtZS4gIFBvcnRhYmxlIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHJlbHkgdXBvbiB0aGUKKyAgICAgICAgICAgIHByZXNlbmNlICBvZiBFU0NERUxBWSBpbiBlaXRoZXIgZm9ybSwgYnV0IHNldHRpbmcgdGhlCisgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSByYXRoZXIgdGhhbiB0aGUgZ2xvYmFsICB2YXJpYWJsZQorICAgICAgICAgICAgZG9lcyAgbm90ICBjcmVhdGUgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgYW4gYXBwbGljYS0KKyAgICAgICAgICAgIHRpb24uCisKKyAgICAgICBIT01FIFRlbGxzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB3aGVyZSB5b3VyIGhvbWUgZGlyZWN0b3J5IGlzLiAgVGhhdCAgaXMKKyAgICAgICAgICAgIHdoZXJlICBpdCAgbWF5ICByZWFkICBhbmQgIHdyaXRlICBhdXhpbGlhcnkgIHRlcm1pbmFsCisgICAgICAgICAgICBkZXNjcmlwdGlvbnM6CisKKyAgICAgICAgICAgICRIT01FLy50ZXJtY2FwCisgICAgICAgICAgICAkSE9NRS8udGVybWluZm8KKworICAgICAgIExJTkVTCisgICAgICAgICAgICBMaWtlIENPTFVNTlMsIHNwZWNpZnkgdGhlIGhlaWdodCAgb2YgIHRoZSAgc2NyZWVuICBpbgorICAgICAgICAgICAgY2hhcmFjdGVycy4gICBTZWUgQ09MVU1OUyBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKworICAgICAgIE1PVVNFX0JVVFRPTlNfMTIzCisgICAgICAgICAgICBUaGlzIGFwcGxpZXMgb25seSB0byB0aGUgT1MvMiBFTVggcG9ydC4gIEl0IHNwZWNpZmllcworICAgICAgICAgICAgdGhlICBvcmRlciAgb2YgIGJ1dHRvbnMgb24gdGhlIG1vdXNlLiAgT1MvMiBudW1iZXJzIGEKKyAgICAgICAgICAgIDMtYnV0dG9uIG1vdXNlIGluY29uc2lzdGVudGx5IGZyb20gb3RoZXIgcGxhdGZvcm1zOgorCisgICAgICAgICAgICAxID0gbGVmdAorICAgICAgICAgICAgMiA9IHJpZ2h0CisgICAgICAgICAgICAzID0gbWlkZGxlLgorCisgICAgICAgICAgICBUaGlzIHN5bWJvbCBsZXRzIHlvdSBjdXN0b21pemUgdGhlIG1vdXNlLiAgVGhlIHN5bWJvbAorICAgICAgICAgICAgbXVzdCAgYmUgdGhyZWUgbnVtZXJpYyBkaWdpdHMgMS0zIGluIGFueSBvcmRlciwgZS5nLiwKKyAgICAgICAgICAgIDEyMyBvciAzMjEuICBJZiBpdCBpcyAgbm90ICBzcGVjaWZpZWQsICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gIHVzZXMKKyAgICAgICAgICAgIDEzMi4KKworICAgICAgIE5DVVJTRVNfQVNTVU1FRF9DT0xPUlMKKyAgICAgICAgICAgIE92ZXJyaWRlICB0aGUgIGNvbXBpbGVkLWluIGFzc3VtcHRpb24gdGhhdCB0aGUgdGVybWktCisgICAgICAgICAgICBuYWwncyAgZGVmYXVsdCAgIGNvbG9ycyAgIGFyZSAgIHdoaXRlLW9uLWJsYWNrICAgKHNlZQorICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJkZWZhdWx0X2NvbG9ycy4zeC5odG1sIj5kZWZhdWx0X2NvbG9ycygzeCk8L0E+PC9TVFJPTkc+KS4gICBZb3UgbWF5IHNldCB0aGUgZm9yZWdyb3VuZCBhbmQKKyAgICAgICAgICAgIGJhY2tncm91bmQgY29sb3IgdmFsdWVzIHdpdGggdGhpcyAgZW52aXJvbm1lbnQgIHZhcmktCisgICAgICAgICAgICBhYmxlICBieSAgcHJvdmluZyAgYSAyLWVsZW1lbnQgbGlzdDogZm9yZWdyb3VuZCxiYWNrLQorICAgICAgICAgICAgZ3JvdW5kLiAgRm9yIGV4YW1wbGUsIHRvIHRlbGwgbmN1cnNlcyB0byAgbm90ICBhc3N1bWUKKyAgICAgICAgICAgIGFueXRoaW5nICBhYm91dCAgdGhlIGNvbG9ycywgc2V0IHRoaXMgdG8gIi0xLC0xIi4gIFRvCisgICAgICAgICAgICBtYWtlIGl0IGdyZWVuLW9uLWJsYWNrLCBzZXQgaXQgdG8gIjIsMCIuICAgQW55ICBwb3NpLQorICAgICAgICAgICAgdGl2ZSB2YWx1ZSBmcm9tIHplcm8gdG8gdGhlIHRlcm1pbmZvIDxTVFJPTkc+bWF4X2NvbG9yczwvU1RST05HPiB2YWx1ZQorICAgICAgICAgICAgaXMgYWxsb3dlZC4KKworICAgICAgIE5DVVJTRVNfR1BNX1RFUk1TCisgICAgICAgICAgICBUaGlzIGFwcGxpZXMgb25seSB0byBuY3Vyc2VzIGNvbmZpZ3VyZWQgIHRvICB1c2UgIHRoZQorICAgICAgICAgICAgR1BNIGludGVyZmFjZS4KKworICAgICAgICAgICAgSWYgcHJlc2VudCwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGEgbGlzdCBvZiBvbmUKKyAgICAgICAgICAgIG9yIG1vcmUgdGVybWluYWwgbmFtZXMgYWdhaW5zdCB3aGljaCB0aGUgIFRFUk0gIGVudmktCisgICAgICAgICAgICByb25tZW50ICB2YXJpYWJsZSBpcyBtYXRjaGVkLiAgU2V0dGluZyBpdCB0byBhbiBlbXB0eQorICAgICAgICAgICAgdmFsdWUgZGlzYWJsZXMgdGhlIEdQTSBpbnRlcmZhY2U7IHVzaW5nIHRoZSAgYnVpbHQtaW4KKyAgICAgICAgICAgIHN1cHBvcnQgZm9yIHh0ZXJtLCBldGMuCisKKyAgICAgICAgICAgIElmICB0aGUgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGFic2VudCwgbmN1cnNlcyB3aWxsCisgICAgICAgICAgICBhdHRlbXB0IHRvIG9wZW4gR1BNIGlmIFRFUk0gY29udGFpbnMgImxpbnV4Ii4KKworICAgICAgIE5DVVJTRVNfTk9fSEFSRF9UQUJTCisgICAgICAgICAgICA8U1RST05HPk5jdXJzZXM8L1NUUk9ORz4gbWF5IHVzZSB0YWJzIGFzIHBhcnQgb2YgdGhlICBjdXJzb3IgIG1vdmVtZW50CisgICAgICAgICAgICBvcHRpbWl6YXRpb24uICAgSW4gIHNvbWUgIGNhc2VzLCB5b3VyIHRlcm1pbmFsIGRyaXZlcgorICAgICAgICAgICAgbWF5IG5vdCBoYW5kbGUgdGhlc2UgcHJvcGVybHkuICBTZXQgdGhpcyAgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRpc2FibGUgdGhlIGZlYXR1cmUuICBZb3UgY2FuIGFsc28gYWRqdXN0CisgICAgICAgICAgICB5b3VyIDxTVFJPTkc+c3R0eTwvU1RST05HPiBzZXR0aW5ncyB0byBhdm9pZCB0aGUgcHJvYmxlbS4KKworICAgICAgIE5DVVJTRVNfTk9fTUFHSUNfQ09PS0lFUworICAgICAgICAgICAgU29tZSAgdGVybWluYWxzICB1c2UgIGEgIG1hZ2ljLWNvb2tpZSAgZmVhdHVyZSAgd2hpY2gKKyAgICAgICAgICAgIHJlcXVpcmVzICBzcGVjaWFsICBoYW5kbGluZyAgdG8gbWFrZSBoaWdobGlnaHRpbmcgYW5kCisgICAgICAgICAgICBvdGhlciB2aWRlbyBhdHRyaWJ1dGVzICBkaXNwbGF5ICBwcm9wZXJseS4gICBZb3UgIGNhbgorICAgICAgICAgICAgc3VwcHJlc3MgIHRoZSAgaGlnaGxpZ2h0aW5nIGVudGlyZWx5IGZvciB0aGVzZSB0ZXJtaS0KKyAgICAgICAgICAgIG5hbHMgYnkgc2V0dGluZyB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAgICAgTkNVUlNFU19OT19QQURESU5HCisgICAgICAgICAgICBNb3N0IG9mIHRoZSB0ZXJtaW5hbCAgZGVzY3JpcHRpb25zICBpbiAgdGhlICB0ZXJtaW5mbworICAgICAgICAgICAgZGF0YWJhc2UgIGFyZSAgd3JpdHRlbiBmb3IgcmVhbCAiaGFyZHdhcmUiIHRlcm1pbmFscy4KKyAgICAgICAgICAgIE1hbnkgcGVvcGxlIHVzZSB0ZXJtaW5hbCBlbXVsYXRvcnMgIHdoaWNoICBydW4gIGluICBhCisgICAgICAgICAgICB3aW5kb3dpbmcgICAgZW52aXJvbm1lbnQgICAgYW5kICAgIHVzZSAgIGN1cnNlcy1iYXNlZAorICAgICAgICAgICAgYXBwbGljYXRpb25zLiAgVGVybWluYWwgZW11bGF0b3JzIGNhbiAgZHVwbGljYXRlICBhbGwKKyAgICAgICAgICAgIG9mICB0aGUgaW1wb3J0YW50IGFzcGVjdHMgb2YgYSBoYXJkd2FyZSB0ZXJtaW5hbCwgYnV0CisgICAgICAgICAgICB0aGV5IGRvIG5vdCBoYXZlIHRoZSAgc2FtZSAgbGltaXRhdGlvbnMuICAgVGhlICBjaGllZgorICAgICAgICAgICAgbGltaXRhdGlvbiBvZiBhIGhhcmR3YXJlIHRlcm1pbmFsIGZyb20gdGhlIHN0YW5kcG9pbnQKKyAgICAgICAgICAgIG9mIHlvdXIgYXBwbGljYXRpb24gaXMgdGhlICBtYW5hZ2VtZW50ICBvZiAgZGF0YWZsb3csCisgICAgICAgICAgICBpLmUuLCAgdGltaW5nLiAgIFVubGVzcyBhIGhhcmR3YXJlIHRlcm1pbmFsIGlzIGludGVyLQorICAgICAgICAgICAgZmFjZWQgaW50byBhIHRlcm1pbmFsIGNvbmNlbnRyYXRvciAod2hpY2ggIGRvZXMgIGZsb3cKKyAgICAgICAgICAgIGNvbnRyb2wpLCAgIGl0ICAob3IgIHlvdXIgIGFwcGxpY2F0aW9uKSAgbXVzdCAgbWFuYWdlCisgICAgICAgICAgICBkYXRhZmxvdywgcHJldmVudGluZyBvdmVycnVucy4gIFRoZSBjaGVhcGVzdCBzb2x1dGlvbgorICAgICAgICAgICAgKG5vICBoYXJkd2FyZSBjb3N0KSBpcyBmb3IgeW91ciBwcm9ncmFtIHRvIGRvIHRoaXMgYnkKKyAgICAgICAgICAgIHBhdXNpbmcgIGFmdGVyICBvcGVyYXRpb25zICB0aGF0ICB0aGUgIHRlcm1pbmFsICBkb2VzCisgICAgICAgICAgICBzbG93bHksIHN1Y2ggYXMgY2xlYXJpbmcgdGhlIGRpc3BsYXkuCisKKyAgICAgICAgICAgIEFzICBhICByZXN1bHQsICBtYW55IHRlcm1pbmFsIGRlc2NyaXB0aW9ucyAoaW5jbHVkaW5nCisgICAgICAgICAgICB0aGUgdnQxMDApIGhhdmUgZGVsYXkgdGltZXMgZW1iZWRkZWQuICBZb3UgIG1heSAgd2lzaAorICAgICAgICAgICAgdG8gIHVzZSAgdGhlc2UgIGRlc2NyaXB0aW9ucywgYnV0IG5vdCB3YW50IHRvIHBheSB0aGUKKyAgICAgICAgICAgIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisKKyAgICAgICAgICAgIFNldCB0aGUgTkNVUlNFU19OT19QQURESU5HIHN5bWJvbCB0byBkaXNhYmxlIGFsbCAgYnV0CisgICAgICAgICAgICBtYW5kYXRvcnkgIHBhZGRpbmcuICAgTWFuZGF0b3J5ICBwYWRkaW5nIGlzIHVzZWQgYXMgYQorICAgICAgICAgICAgcGFydCBvZiBzcGVjaWFsIGNvbnRyb2wgc2VxdWVuY2VzIHN1Y2ggYXMgPEVNPmZsYXNoPC9FTT4uCisKKyAgICAgICBOQ1VSU0VTX05PX1NFVEJVRgorICAgICAgICAgICAgTm9ybWFsbHkgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGVuYWJsZXMgYnVmZmVyZWQgb3V0cHV0IGR1cmluZyAgdGVyLQorICAgICAgICAgICAgbWluYWwgIGluaXRpYWxpemF0aW9uLiAgIFRoaXMgIGlzICBkb25lICAoYXMgIGluIFNWcjQKKyAgICAgICAgICAgIGN1cnNlcykgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICAgRm9yICB0ZXN0aW5nICBwdXItCisgICAgICAgICAgICBwb3NlcywgYm90aCBvZiA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gYW5kIGNlcnRhaW4gYXBwbGljYXRpb25zLCB0aGlzCisgICAgICAgICAgICBmZWF0dXJlICAgIGlzICAgIG1hZGUgICAgb3B0aW9uYWwuICAgICBTZXR0aW5nICAgIHRoZQorICAgICAgICAgICAgTkNVUlNFU19OT19TRVRCVUYgdmFyaWFibGUgZGlzYWJsZXMgb3V0cHV0IGJ1ZmZlcmluZywKKyAgICAgICAgICAgIGxlYXZpbmcgdGhlIG91dHB1dCAgaW4gIHRoZSAgb3JpZ2luYWwgICh1c3VhbGx5ICBsaW5lCisgICAgICAgICAgICBidWZmZXJlZCkgbW9kZS4KKworICAgICAgIE5DVVJTRVNfTk9fVVRGOF9BQ1MKKyAgICAgICAgICAgIER1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGNoZWNrcyBmb3IKKyAgICAgICAgICAgIHNwZWNpYWwgY2FzZXMgd2hlcmUgVlQxMDAgbGluZS1kcmF3aW5nIChhbmQgdGhlICBjb3ItCisgICAgICAgICAgICByZXNwb25kaW5nICAgYWx0ZXJuYXRlICBjaGFyYWN0ZXIgIHNldCAgY2FwYWJpbGl0aWVzKQorICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZSB0ZXJtaW5mbyBhcmUga25vd24gIHRvICBiZSAgbWlzc2luZy4KKyAgICAgICAgICAgIFNwZWNpZmljYWxseSwgIHdoZW4gIHJ1bm5pbmcgIGluICBhIFVURi04IGxvY2FsZSwgdGhlCisgICAgICAgICAgICBMaW51eCBjb25zb2xlIGVtdWxhdG9yIGFuZCAgdGhlICBHTlUgIHNjcmVlbiAgcHJvZ3JhbQorICAgICAgICAgICAgaWdub3JlICB0aGVzZS4gICBOY3Vyc2VzICBjaGVja3MgdGhlIFRFUk0gZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHZhcmlhYmxlIGZvciB0aGVzZS4gIEZvciAgb3RoZXIgIHNwZWNpYWwgIGNhc2VzLCAgeW91CisgICAgICAgICAgICBzaG91bGQgIHNldCAgdGhpcyAgZW52aXJvbm1lbnQgIHZhcmlhYmxlLiAgRG9pbmcgdGhpcworICAgICAgICAgICAgdGVsbHMgbmN1cnNlcyB0byB1c2UgVW5pY29kZSB2YWx1ZXMgd2hpY2ggIGNvcnJlc3BvbmQKKyAgICAgICAgICAgIHRvIHRoZSBWVDEwMCBsaW5lLWRyYXdpbmcgZ2x5cGhzLiAgVGhhdCB3b3JrcyBmb3IgdGhlCisgICAgICAgICAgICBzcGVjaWFsIGNhc2VzIGNpdGVkLCBhbmQgaXMgbGlrZWx5IHRvIHdvcmsgZm9yIHRlcm1pLQorICAgICAgICAgICAgbmFsIGVtdWxhdG9ycy4KKworICAgICAgICAgICAgV2hlbiAgc2V0dGluZyAgdGhpcyAgdmFyaWFibGUsIHlvdSBzaG91bGQgc2V0IGl0IHRvIGEKKyAgICAgICAgICAgIG5vbnplcm8gdmFsdWUuICBTZXR0aW5nIGl0IHRvIHplcm8gKG9yIHRvICBhICBub25udW0tCisgICAgICAgICAgICBiZXIpIGRpc2FibGVzIHRoZSBzcGVjaWFsIGNoZWNrIGZvciBMaW51eCBhbmQgc2NyZWVuLgorCisgICAgICAgTkNVUlNFU19UUkFDRQorICAgICAgICAgICAgRHVyaW5nIGluaXRpYWxpemF0aW9uLCB0aGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGRlYnVnZ2luZyAgbGlicmFyeQorICAgICAgICAgICAgY2hlY2tzICB0aGUgIE5DVVJTRVNfVFJBQ0Ugc3ltYm9sLiAgSWYgaXQgaXMgZGVmaW5lZCwKKyAgICAgICAgICAgIHRvIGEgbnVtZXJpYyB2YWx1ZSwgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGNhbGxzIHRoZSA8U1RST05HPnRyYWNlPC9TVFJPTkc+IGZ1bmN0aW9uLAorICAgICAgICAgICAgdXNpbmcgdGhhdCB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCisKKyAgICAgICAgICAgIFRoZSAgYXJndW1lbnQgIHZhbHVlcywgd2hpY2ggYXJlIGRlZmluZWQgaW4gPFNUUk9ORz5jdXJzZXMuaDwvU1RST05HPiwKKyAgICAgICAgICAgIHByb3ZpZGUgc2V2ZXJhbCB0eXBlcyBvZiBpbmZvcm1hdGlvbi4gICBXaGVuICBydW5uaW5nCisgICAgICAgICAgICB3aXRoICB0cmFjZXMgZW5hYmxlZCwgeW91ciBhcHBsaWNhdGlvbiB3aWxsIHdyaXRlIHRoZQorICAgICAgICAgICAgZmlsZSA8U1RST05HPnRyYWNlPC9TVFJPTkc+IHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgICAgIFRFUk0gRGVub3RlcyB5b3VyIHRlcm1pbmFsIHR5cGUuICBFYWNoICB0ZXJtaW5hbCAgdHlwZSAgaXMKKyAgICAgICAgICAgIGRpc3RpbmN0LCB0aG91Z2ggbWFueSBhcmUgc2ltaWxhci4KKworICAgICAgIFRFUk1DQVAKKyAgICAgICAgICAgIElmIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeSBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggPEVNPnRlcm0tPC9FTT4KKyAgICAgICAgICAgIDxFTT5jYXA8L0VNPiBzdXBwb3J0LCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gIHdpbGwgIGNoZWNrICBmb3IgIGEgIHRlcm1pbmFsJ3MKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uIGluIHRlcm1jYXAgZm9ybSBpZiBpdCBpcyBub3QgYXZhaWxhYmxlIGluCisgICAgICAgICAgICB0aGUgdGVybWluZm8gZGF0YWJhc2UuCisKKyAgICAgICAgICAgIFRoZSAgVEVSTUNBUCAgc3ltYm9sICBjb250YWlucyAgZWl0aGVyICAgYSAgIHRlcm1pbmFsCisgICAgICAgICAgICBkZXNjcmlwdGlvbiAgKHdpdGggIG5ld2xpbmVzIHN0cmlwcGVkIG91dCksIG9yIGEgZmlsZQorICAgICAgICAgICAgbmFtZSB0ZWxsaW5nIHdoZXJlIHRoZSAgaW5mb3JtYXRpb24gIGRlbm90ZWQgIGJ5ICB0aGUKKyAgICAgICAgICAgIFRFUk0gIHN5bWJvbCAgZXhpc3RzLiAgIEluICBlaXRoZXIgIGNhc2UsICBzZXR0aW5nIGl0CisgICAgICAgICAgICBkaXJlY3RzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB0byBpZ25vcmUgdGhlIHVzdWFsICBwbGFjZSAgZm9yICB0aGlzCisgICAgICAgICAgICBpbmZvcm1hdGlvbiwgZS5nLiwgL2V0Yy90ZXJtY2FwLgorCisgICAgICAgVEVSTUlORk8KKyAgICAgICAgICAgIE92ZXJyaWRlcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBzZWFyY2hlcyBmb3IKKyAgICAgICAgICAgIHlvdXIgdGVybWluYWwgZGVzY3JpcHRpb24uICBUaGlzIGlzIHRoZSBzaW1wbGVzdCwgYnV0CisgICAgICAgICAgICBub3QgIHRoZSAgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgVGhlIGNvbXBsZXRlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgaW4gb3JkZXIgZm9sbG93czoKKworICAgICAgICAgICAgLSAgdGhlIGxhc3QgZGlyZWN0b3J5IHRvIHdoaWNoIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB3cm90ZSwgaWYgYW55LAorICAgICAgICAgICAgICAgaXMgc2VhcmNoZWQgZmlyc3QKKworICAgICAgICAgICAgLSAgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFRFUk1JTkZPIHN5bWJvbAorCisgICAgICAgICAgICAtICAkSE9NRS8udGVybWluZm8KKworICAgICAgICAgICAgLSAgZGlyZWN0b3JpZXMgbGlzdGVkIGluIHRoZSBURVJNSU5GT19ESVJTIHN5bWJvbAorCisgICAgICAgICAgICAtICBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB3aG9zZSBuYW1lcyBhcmUgY29uZmlndXJlZAorICAgICAgICAgICAgICAgYW5kICBjb21waWxlZCAgaW50byAgdGhlICBuY3Vyc2VzICBsaWJyYXJ5LCAgZS5nLiwKKyAgICAgICAgICAgICAgIC91c3Ivc2hhcmUvdGVybWluZm8KKworICAgICAgIFRFUk1JTkZPX0RJUlMKKyAgICAgICAgICAgIFNwZWNpZmllcyAgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgdGVybWktCisgICAgICAgICAgICBuYWwgZGVzY3JpcHRpb25zLiAgVGhlIGxpc3QgaXMgIHNlcGFyYXRlZCAgYnkgIGNvbG9ucworICAgICAgICAgICAgKGkuZS4sICAiOiIpIG9uIFVuaXgsIHNlbWljb2xvbnMgb24gT1MvMiBFTVguICBBbGwgb2YKKyAgICAgICAgICAgIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgYXJlIGluIHRlcm1pbmZvIGZvcm0sIHdoaWNoCisgICAgICAgICAgICBtYWtlcyAgYSAgc3ViZGlyZWN0b3J5ICBuYW1lZCBmb3IgdGhlIGZpcnN0IGxldHRlciBvZgorICAgICAgICAgICAgdGhlIHRlcm1pbmFsIG5hbWVzIHRoZXJlaW4uCisKKyAgICAgICBURVJNUEFUSAorICAgICAgICAgICAgSWYgVEVSTUNBUCBkb2VzIG5vdCBob2xkIGEgIGZpbGUgIG5hbWUgIHRoZW4gIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPgorICAgICAgICAgICAgY2hlY2tzICB0aGUgVEVSTVBBVEggc3ltYm9sLiAgVGhpcyBpcyBhIGxpc3Qgb2YgZmlsZS0KKyAgICAgICAgICAgIG5hbWVzIHNlcGFyYXRlZCBieSBzcGFjZXMgb3IgY29sb25zICAoaS5lLiwgICI6IikgIG9uCisgICAgICAgICAgICBVbml4LCBzZW1pY29sb25zIG9uIE9TLzIgRU1YLiAgSWYgdGhlIFRFUk1QQVRIIHN5bWJvbAorICAgICAgICAgICAgaXMgbm90IHNldCwgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxvb2tzIGluIHRoZSBmaWxlcyAgL2V0Yy90ZXJtY2FwLAorICAgICAgICAgICAgL3Vzci9zaGFyZS9taXNjL3Rlcm1jYXAgIGFuZCAgJEhPTUUvLnRlcm1jYXAsIGluIHRoYXQKKyAgICAgICAgICAgIG9yZGVyLgorCisgICAgICAgVGhlIGxpYnJhcnkgbWF5IGJlIGNvbmZpZ3VyZWQgdG8gZGlzcmVnYXJkICB0aGUgIGZvbGxvd2luZworICAgICAgIHZhcmlhYmxlcyAgd2hlbiAgdGhlIGN1cnJlbnQgdXNlciBpcyB0aGUgc3VwZXJ1c2VyIChyb290KSwKKyAgICAgICBvciBpZiB0aGUgYXBwbGljYXRpb24gdXNlcyBzZXR1aWQgb3IgIHNldGdpZCAgcGVybWlzc2lvbnM6CisgICAgICAgJFRFUk1JTkZPLCAkVEVSTUlORk9fRElSUywgJFRFUk1QQVRILCBhcyB3ZWxsIGFzICRIT01FLgorCisKKzwvUFJFPgorPEgyPkFMVEVSTkFURSBDT05GSUdVUkFUSU9OUzwvSDI+PFBSRT4KKyAgICAgICBTZXZlcmFsICBkaWZmZXJlbnQgIGNvbmZpZ3VyYXRpb25zIGFyZSBwb3NzaWJsZSwgZGVwZW5kaW5nCisgICAgICAgb24gIHRoZSAgY29uZmlndXJlICBzY3JpcHQgIG9wdGlvbnMgIHVzZWQgIHdoZW4gICBidWlsZGluZworICAgICAgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPi4gICBUaGVyZSAgYXJlIGEgZmV3IG1haW4gb3B0aW9ucyB3aG9zZSBlZmZlY3RzIGFyZQorICAgICAgIHZpc2libGUgdG8gdGhlIGFwcGxpY2F0aW9ucyBkZXZlbG9wZXIgdXNpbmcgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+OgorCisgICAgICAgLS1kaXNhYmxlLW92ZXJ3cml0ZQorICAgICAgICAgICAgVGhlIHN0YW5kYXJkIGluY2x1ZGUgZm9yIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBpcyBhcyBub3RlZCBpbiAgPFNUUk9ORz5TWU4tPC9TVFJPTkc+CisgICAgICAgICAgICA8U1RST05HPk9QU0lTPC9TVFJPTkc+OgorCisgICAgICAgICAgICA8U1RST05HPiNpbmNsdWRlPC9TVFJPTkc+IDxTVFJPTkc+Jmx0O2N1cnNlcy5oJmd0OzwvU1RST05HPgorCisgICAgICAgICAgICBUaGlzICBvcHRpb24gaXMgdXNlZCB0byBhdm9pZCBmaWxlbmFtZSBjb25mbGljdHMgd2hlbgorICAgICAgICAgICAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGlzIG5vdCB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBvZiAgY3Vyc2VzICBvZgorICAgICAgICAgICAgdGhlICBjb21wdXRlci4gICBJZiAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBpcyAgaW5zdGFsbGVkIGRpc2FibGluZworICAgICAgICAgICAgb3ZlcndyaXRlLCBpdCBwdXRzIGl0cyAgaGVhZGVycyAgaW4gIGEgIHN1YmRpcmVjdG9yeSwKKyAgICAgICAgICAgIGUuZy4sCisKKyAgICAgICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7bmN1cnNlcy9jdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgICAgICAgSXQgIGFsc28gIG9taXRzIGEgc3ltYm9saWMgbGluayB3aGljaCB3b3VsZCBhbGxvdyB5b3UKKyAgICAgICAgICAgIHRvIHVzZSA8U1RST05HPi1sY3Vyc2VzPC9TVFJPTkc+IHRvIGJ1aWxkIGV4ZWN1dGFibGVzLgorCisgICAgICAgLS1lbmFibGUtd2lkZWMKKyAgICAgICAgICAgIFRoZSBjb25maWd1cmUgc2NyaXB0IHJlbmFtZXMgdGhlIGxpYnJhcnkgYW5kIChpZiAgdGhlCisgICAgICAgICAgICA8U1RST05HPi0tZGlzYWJsZS1vdmVyd3JpdGU8L1NUUk9ORz4gIG9wdGlvbiAgaXMgdXNlZCkgcHV0cyB0aGUgaGVhZGVyCisgICAgICAgICAgICBmaWxlcyAgaW4gIGEgIGRpZmZlcmVudCAgc3ViZGlyZWN0b3J5LiAgIEFsbCAgb2YgIHRoZQorICAgICAgICAgICAgbGlicmFyeSAgbmFtZXMgIGhhdmUgIGEgICJ3IiAgYXBwZW5kZWQgdG8gdGhlbSwgaS5lLiwKKyAgICAgICAgICAgIGluc3RlYWQgb2YKKworICAgICAgICAgICAgPFNUUk9ORz4tbG5jdXJzZXM8L1NUUk9ORz4KKworICAgICAgICAgICAgeW91IGxpbmsgd2l0aAorCisgICAgICAgICAgICA8U1RST05HPi1sbmN1cnNlc3c8L1NUUk9ORz4KKworICAgICAgICAgICAgWW91IG11c3QgYWxzbyBkZWZpbmUgPFNUUk9ORz5fWE9QRU5fU09VUkNFX0VYVEVOREVEPC9TVFJPTkc+IHdoZW4gY29tLQorICAgICAgICAgICAgcGlsaW5nICBmb3IgIHRoZSAgd2lkZS1jaGFyYWN0ZXIgIGxpYnJhcnkgIHRvIHVzZSB0aGUKKyAgICAgICAgICAgIGV4dGVuZGVkICh3aWRlLWNoYXJhY3RlcikgIGZ1bmN0aW9ucy4gICBUaGUgIDxTVFJPTkc+Y3Vyc2VzLmg8L1NUUk9ORz4KKyAgICAgICAgICAgIGZpbGUgICB3aGljaCAgaXMgIGluc3RhbGxlZCAgZm9yICB0aGUgIHdpZGUtY2hhcmFjdGVyCisgICAgICAgICAgICBsaWJyYXJ5IGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgIG5vcm1hbAorICAgICAgICAgICAgbGlicmFyeSdzIGhlYWRlci4gIE9ubHkgdGhlIHNpemUgb2YgdGhlIDxTVFJPTkc+V0lORE9XPC9TVFJPTkc+IHN0cnVjLQorICAgICAgICAgICAgdHVyZSBkaWZmZXJzLCBhbmQgdmVyeSBmZXcgYXBwbGljYXRpb25zIHJlcXVpcmUgIG1vcmUKKyAgICAgICAgICAgIHRoYW4gIGEgIHBvaW50ZXIgIHRvICA8U1RST05HPldJTkRPVzwvU1RST05HPnMuICAgSWYgIHRoZSAgaGVhZGVycyBhcmUKKyAgICAgICAgICAgIGluc3RhbGxlZCAgYWxsb3dpbmcgIG92ZXJ3cml0ZSwgIHRoZSAgIHdpZGUtY2hhcmFjdGVyCisgICAgICAgICAgICBsaWJyYXJ5J3MgIGhlYWRlcnMgc2hvdWxkIGJlIGluc3RhbGxlZCBsYXN0LCB0byBhbGxvdworICAgICAgICAgICAgYXBwbGljYXRpb25zIHRvIGJlIGJ1aWx0IHVzaW5nICBlaXRoZXIgIGxpYnJhcnkgIGZyb20KKyAgICAgICAgICAgIHRoZSBzYW1lIHNldCBvZiBoZWFkZXJzLgorCisgICAgICAgLS13aXRoLXNoYXJlZAorCisgICAgICAgLS13aXRoLW5vcm1hbAorCisgICAgICAgLS13aXRoLWRlYnVnCisKKyAgICAgICAtLXdpdGgtcHJvZmlsZQorICAgICAgICAgICAgVGhlICBzaGFyZWQgIGFuZCBub3JtYWwgKHN0YXRpYykgbGlicmFyeSBuYW1lcyBkaWZmZXIKKyAgICAgICAgICAgIGJ5IHRoZWlyICBzdWZmaXhlcywgIGUuZy4sICA8U1RST05HPmxpYm5jdXJzZXMuc288L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5saWJuLTwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz5jdXJzZXMuYTwvU1RST05HPi4gICBUaGUgIGRlYnVnICBhbmQgcHJvZmlsaW5nIGxpYnJhcmllcyBhZGQgYQorICAgICAgICAgICAgIl9nIiBhbmQgYSAiX3AiIHRvIHRoZSByb290IG5hbWVzIHJlc3BlY3RpdmVseSwgZS5nLiwKKyAgICAgICAgICAgIDxTVFJPTkc+bGlibmN1cnNlc19nLmE8L1NUUk9ORz4gYW5kIDxTVFJPTkc+bGlibmN1cnNlc19wLmE8L1NUUk9ORz4uCisKKyAgICAgICAtLXdpdGgtdHJhY2UKKyAgICAgICAgICAgIFRoZSAgPFNUUk9ORz50cmFjZTwvU1RST05HPiAgZnVuY3Rpb24gIG5vcm1hbGx5ICByZXNpZGVzICBpbiB0aGUgZGVidWcKKyAgICAgICAgICAgIGxpYnJhcnksIGJ1dCBpdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGNvbmZpZ3VyZSB0aGlzCisgICAgICAgICAgICBpbiAgdGhlICBzaGFyZWQgIGxpYnJhcnkuICAgQ29uZmlndXJlICBzY3JpcHRzIHNob3VsZAorICAgICAgICAgICAgY2hlY2sgZm9yIHRoZSBmdW5jdGlvbidzIGV4aXN0ZW5jZSByYXRoZXIgdGhhbiBhc3N1bS0KKyAgICAgICAgICAgIGluZyBpdCBpcyBhbHdheXMgaW4gdGhlIGRlYnVnIGxpYnJhcnkuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90YWJzZXQKKyAgICAgICAgICAgIGRpcmVjdG9yeSAgY29udGFpbmluZyAgaW5pdGlhbGl6YXRpb24gIGZpbGVzICBmb3IgdGhlCisgICAgICAgICAgICB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGFiYXNlIC91c3Ivc2hhcmUvdGVybWluZm8gdGVyLQorICAgICAgICAgICAgbWluYWwgY2FwYWJpbGl0eSBkYXRhYmFzZQorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4gIGFuZCAgcmVsYXRlZCAgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImN1cnNfIgorICAgICAgIGZvciBkZXRhaWxlZCByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKworCis8L1BSRT4KKzxIMj5FWFRFTlNJT05TPC9IMj48UFJFPgorICAgICAgIFRoZSAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBsaWJyYXJ5ICBjYW4gIGJlICBjb21waWxlZCAgd2l0aCAgYW4gIG9wdGlvbgorICAgICAgICg8U1RST05HPi1EVVNFX0dFVENBUDwvU1RST05HPikgdGhhdCBmYWxscyBiYWNrIHRvIHRoZSBvbGQtc3R5bGUgL2V0Yy90ZXJtLQorICAgICAgIGNhcCBmaWxlIGlmIHRoZSB0ZXJtaW5hbCBzZXR1cCBjb2RlIGNhbm5vdCBmaW5kIGEgdGVybWluZm8KKyAgICAgICBlbnRyeSAgY29ycmVzcG9uZGluZyAgdG8gPFNUUk9ORz5URVJNPC9TVFJPTkc+LiAgVXNlIG9mIHRoaXMgZmVhdHVyZSBpcyBub3QKKyAgICAgICByZWNvbW1lbmRlZCwgYXMgaXQgZXNzZW50aWFsbHkgaW5jbHVkZXMgYW4gZW50aXJlICB0ZXJtY2FwCisgICAgICAgY29tcGlsZXIgIGluIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gc3RhcnR1cCBjb2RlLCBhdCBzaWduaWZpY2FudCBjb3N0CisgICAgICAgaW4gY29yZSBhbmQgc3RhcnR1cCBjeWNsZXMuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBsaWJyYXJ5ICBpbmNsdWRlcyAgZmFjaWxpdGllcyAgZm9yICBjYXB0dXJpbmcKKyAgICAgICBtb3VzZSAgZXZlbnRzIG9uIGNlcnRhaW4gdGVybWluYWxzIChpbmNsdWRpbmcgeHRlcm0pLiAgU2VlCisgICAgICAgdGhlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19tb3VzZS4zeC5odG1sIj5jdXJzX21vdXNlKDN4KTwvQT48L1NUUk9ORz4gbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgaW5jbHVkZXMgZmFjaWxpdGllcyBmb3IgcmVzcG9uZGluZyAgdG8KKyAgICAgICB3aW5kb3cgIHJlc2l6aW5nICBldmVudHMsICBlLmcuLCB3aGVuIHJ1bm5pbmcgaW4gYW4geHRlcm0uCisgICAgICAgU2VlIHRoZSA8U1RST05HPjxBIEhSRUY9InJlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybSgzeCk8L0E+PC9TVFJPTkc+IGFuZCA8U1RST05HPjxBIEhSRUY9IndyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZSgzeCk8L0E+PC9TVFJPTkc+ICBtYW51YWwgIHBhZ2VzICBmb3IKKyAgICAgICBkZXRhaWxzLiAgIEluIGFkZGl0aW9uLCB0aGUgbGlicmFyeSBtYXkgYmUgY29uZmlndXJlZCB3aXRoCisgICAgICAgYSBTSUdXSU5DSCBoYW5kbGVyLgorCisgICAgICAgVGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBsaWJyYXJ5IGV4dGVuZHMgdGhlIGZpeGVkIHNldCBvZiBmdW5jdGlvbiAga2V5CisgICAgICAgY2FwYWJpbGl0aWVzICBvZiAgdGVybWluYWxzICBieSAgYWxsb3dpbmcgIHRoZSBhcHBsaWNhdGlvbgorICAgICAgIGRlc2lnbmVyIHRvIGRlZmluZSBhZGRpdGlvbmFsIGtleSAgc2VxdWVuY2VzICBhdCAgcnVudGltZS4KKyAgICAgICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0iZGVmaW5lX2tleS4zeC5odG1sIj5kZWZpbmVfa2V5KDN4KTwvQT48L1NUUk9ORz4gPFNUUk9ORz48QSBIUkVGPSJrZXlfZGVmaW5lZC4zeC5odG1sIj5rZXlfZGVmaW5lZCgzeCk8L0E+PC9TVFJPTkc+LCBhbmQgPFNUUk9ORz48QSBIUkVGPSJrZXlvay4zeC5odG1sIj5rZXlvaygzeCk8L0E+PC9TVFJPTkc+IG1hbi0KKyAgICAgICB1YWwgcGFnZXMgZm9yIGRldGFpbHMuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgY2FuIGV4cGxvaXQgdGhlIGNhcGFiaWxpdGllcyBvZiB0ZXJtaS0KKyAgICAgICBuYWxzICB3aGljaCAgaW1wbGVtZW50IHRoZSBJU08tNjQyOSBTR1IgMzkgYW5kIFNHUiA0OSBjb24tCisgICAgICAgdHJvbHMsIHdoaWNoIGFsbG93IGFuIGFwcGxpY2F0aW9uIHRvIHJlc2V0IHRoZSB0ZXJtaW5hbCB0bworICAgICAgIGl0cyAgb3JpZ2luYWwgIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzLiAgRnJvbSB0aGUKKyAgICAgICB1c2VycycgcGVyc3BlY3RpdmUsIHRoZSBhcHBsaWNhdGlvbiBpcyBhYmxlIHRvICBkcmF3ICBjb2wtCisgICAgICAgb3JlZCAgdGV4dCAgb24gIGEgIGJhY2tncm91bmQgIHdob3NlIGNvbG9yIGlzIHNldCBpbmRlcGVuLQorICAgICAgIGRlbnRseSwgcHJvdmlkaW5nIGJldHRlciAgY29udHJvbCAgb3ZlciAgY29sb3IgIGNvbnRyYXN0cy4KKyAgICAgICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0iZGVmYXVsdF9jb2xvcnMuM3guaHRtbCI+ZGVmYXVsdF9jb2xvcnMoM3gpPC9BPjwvU1RST05HPiBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKworICAgICAgIFRoZSAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBsaWJyYXJ5ICBpbmNsdWRlcyAgYSAgZnVuY3Rpb24gZm9yIGRpcmVjdGluZworICAgICAgIGFwcGxpY2F0aW9uIG91dHB1dCB0byBhIHByaW50ZXIgYXR0YWNoZWQgdG8gIHRoZSAgdGVybWluYWwKKyAgICAgICBkZXZpY2UuICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19wcmludC4zeC5odG1sIj5jdXJzX3ByaW50KDN4KTwvQT48L1NUUk9ORz4gbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gIGxpYnJhcnkgaXMgaW50ZW5kZWQgdG8gYmUgQkFTRS1sZXZlbCBjb25mb3ItCisgICAgICAgbWFudCB3aXRoIFhTSSBDdXJzZXMuICBUaGUgRVhURU5ERUQgWFNJIEN1cnNlcyBmdW5jdGlvbmFsLQorICAgICAgIGl0eSAoaW5jbHVkaW5nIGNvbG9yIHN1cHBvcnQpIGlzIHN1cHBvcnRlZC4KKworICAgICAgIEEgIHNtYWxsICBudW1iZXIgb2YgbG9jYWwgZGlmZmVyZW5jZXMgKHRoYXQgaXMsIGluZGl2aWR1YWwKKyAgICAgICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBYU0kgQ3Vyc2VzIGFuZCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gY2FsbHMpICBhcmUKKyAgICAgICBkZXNjcmliZWQgIGluICA8U1RST05HPlBPUlRBQklMSVRZPC9TVFJPTkc+ICBzZWN0aW9ucyAgb2YgIHRoZSAgbGlicmFyeSBtYW4KKyAgICAgICBwYWdlcy4KKworICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBjb250YWlucyBzZXZlcmFsIGV4dGVuc2lvbnM6CisKKyAgICAgICAgICAgIFRoZSByb3V0aW5lIDxTVFJPTkc+aGFzX2tleTwvU1RST05HPiBpcyBub3QgcGFydCBvZiBYUEc0LCAgbm9yICBpcyAgaXQKKyAgICAgICAgICAgIHByZXNlbnQgIGluIFNWcjQuICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19nZXRjaC4zeC5odG1sIj5jdXJzX2dldGNoKDN4KTwvQT48L1NUUk9ORz4gbWFudWFsIHBhZ2UKKyAgICAgICAgICAgIGZvciBkZXRhaWxzLgorCisgICAgICAgICAgICBUaGUgcm91dGluZSA8U1RST05HPnNsa19hdHRyPC9TVFJPTkc+IGlzIG5vdCBwYXJ0IG9mIFhQRzQsIG5vciAgaXMgIGl0CisgICAgICAgICAgICBwcmVzZW50ICBpbiAgU1ZyNC4gICBTZWUgdGhlIDxTVFJPTkc+PEEgSFJFRj0iY3Vyc19zbGsuM3guaHRtbCI+Y3Vyc19zbGsoM3gpPC9BPjwvU1RST05HPiBtYW51YWwgcGFnZQorICAgICAgICAgICAgZm9yIGRldGFpbHMuCisKKyAgICAgICAgICAgIFRoZSByb3V0aW5lcyA8U1RST05HPmdldG1vdXNlPC9TVFJPTkc+LCAgPFNUUk9ORz5tb3VzZW1hc2s8L1NUUk9ORz4sICA8U1RST05HPnVuZ2V0bW91c2U8L1NUUk9ORz4sICA8U1RST05HPm1vdS08L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+c2VpbnRlcnZhbDwvU1RST05HPiwgIGFuZCA8U1RST05HPndlbmNsb3NlPC9TVFJPTkc+IHJlbGF0aW5nIHRvIG1vdXNlIGludGVyZmFjLQorICAgICAgICAgICAgaW5nIGFyZSBub3QgcGFydCBvZiBYUEc0LCBub3IgIGFyZSAgdGhleSAgcHJlc2VudCAgaW4KKyAgICAgICAgICAgIFNWcjQuICAgIFNlZSAgIHRoZSAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX21vdXNlLjN4Lmh0bWwiPmN1cnNfbW91c2UoM3gpPC9BPjwvU1RST05HPiAgbWFudWFsICBwYWdlICBmb3IKKyAgICAgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAgICAgIFRoZSByb3V0aW5lIDxTVFJPTkc+bWNwcmludDwvU1RST05HPiB3YXMgbm90IHByZXNlbnQgaW4gIGFueSAgcHJldmlvdXMKKyAgICAgICAgICAgIGN1cnNlcyBpbXBsZW1lbnRhdGlvbi4gIFNlZSB0aGUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3ByaW50LjN4Lmh0bWwiPmN1cnNfcHJpbnQoM3gpPC9BPjwvU1RST05HPiBtYW51YWwKKyAgICAgICAgICAgIHBhZ2UgZm9yIGRldGFpbHMuCisKKyAgICAgICAgICAgIFRoZSByb3V0aW5lIDxTVFJPTkc+d3Jlc2l6ZTwvU1RST05HPiBpcyBub3QgcGFydCBvZiBYUEc0LCAgbm9yICBpcyAgaXQKKyAgICAgICAgICAgIHByZXNlbnQgaW4gU1ZyNC4gIFNlZSB0aGUgPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPiBtYW51YWwgcGFnZSBmb3IKKyAgICAgICAgICAgIGRldGFpbHMuCisKKyAgICAgICAgICAgIFRoZSBXSU5ET1cgc3RydWN0dXJlJ3MgaW50ZXJuYWwgZGV0YWlscyBjYW4gYmUgaGlkZGVuCisgICAgICAgICAgICBmcm9tICBhcHBsaWNhdGlvbiAgcHJvZ3JhbXMuICBTZWUgPFNUUk9ORz48QSBIUkVGPSJjdXJzX29wYXF1ZS4zeC5odG1sIj5jdXJzX29wYXF1ZSgzeCk8L0E+PC9TVFJPTkc+IGZvcgorICAgICAgICAgICAgdGhlIGRpc2N1c3Npb24gb2YgPFNUUk9ORz5pc19zY3JvbGxvazwvU1RST05HPiwgZXRjLgorCisgICAgICAgSW4gaGlzdG9yaWMgY3Vyc2VzIHZlcnNpb25zLCBkZWxheXMgZW1iZWRkZWQgaW4gdGhlICBjYXBhLQorICAgICAgIGJpbGl0aWVzIDxTVFJPTkc+Y3I8L1NUUk9ORz4sIDxTVFJPTkc+aW5kPC9TVFJPTkc+LCA8U1RST05HPmN1YjE8L1NUUk9ORz4sIDxTVFJPTkc+ZmY8L1NUUk9ORz4gYW5kIDxTVFJPTkc+dGFiPC9TVFJPTkc+IGFjdGl2YXRlZCBjb3JyZXNwb25kaW5nCisgICAgICAgZGVsYXkgYml0cyBpbiB0aGUgVU5JWCB0dHkgZHJpdmVyLiAgIEluICB0aGlzICBpbXBsZW1lbnRhLQorICAgICAgIHRpb24sICBhbGwgIHBhZGRpbmcgIGlzICBkb25lICBieSBzZW5kaW5nIE5VTCBieXRlcy4gIFRoaXMKKyAgICAgICBtZXRob2QgaXMgc2xpZ2h0bHkgbW9yZSBleHBlbnNpdmUsIGJ1dCBuYXJyb3dzIHRoZSAgaW50ZXItCisgICAgICAgZmFjZSAgdG8gIHRoZSAgVU5JWCBrZXJuZWwgc2lnbmlmaWNhbnRseSBhbmQgaW5jcmVhc2VzIHRoZQorICAgICAgIHBhY2thZ2UncyBwb3J0YWJpbGl0eSBjb3JyZXNwb25kaW5nbHkuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIGhlYWRlciAgZmlsZSAgPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+ICBhdXRvbWF0aWNhbGx5ICBpbmNsdWRlcyAgdGhlCisgICAgICAgaGVhZGVyIGZpbGVzIDxTVFJPTkc+Jmx0O3N0ZGlvLmgmZ3Q7PC9TVFJPTkc+IGFuZCA8U1RST05HPiZsdDt1bmN0cmwuaCZndDs8L1NUUk9ORz4uCisKKyAgICAgICBJZiAgc3RhbmRhcmQgIG91dHB1dCBmcm9tIGEgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IHByb2dyYW0gaXMgcmUtZGlyZWN0ZWQKKyAgICAgICB0byBzb21ldGhpbmcgd2hpY2ggaXMgbm90IGEgdHR5LCBzY3JlZW4gIHVwZGF0ZXMgIHdpbGwgIGJlCisgICAgICAgZGlyZWN0ZWQgdG8gc3RhbmRhcmQgZXJyb3IuICBUaGlzIHdhcyBhbiB1bmRvY3VtZW50ZWQgZmVhLQorICAgICAgIHR1cmUgb2YgQVQmYW1wO1QgU3lzdGVtIFYgUmVsZWFzZSAzIGN1cnNlcy4KKworCis8L1BSRT4KKzxIMj5BVVRIT1JTPC9IMj48UFJFPgorICAgICAgIFpleWQgTS4gQmVuLUhhbGltLCBFcmljICBTLiAgUmF5bW9uZCwgIFRob21hcyAgRS4gIERpY2tleS4KKyAgICAgICBCYXNlZCBvbiBwY3Vyc2VzIGJ5IFBhdmVsIEN1cnRpcy4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL3BhbmVsLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vcGFuZWwuM3guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWI1YTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL3BhbmVsLjN4Lmh0bWwKQEAgLTAsMCArMSwyNDEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogcGFuZWwuM3gsdiAxLjE0IDIwMDcvMDUvMTIgMjA6NDU6MjAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+cGFuZWwgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5wYW5lbCAzeDwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0icGFuZWwuM3guaHRtbCI+cGFuZWwoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJwYW5lbC4zeC5odG1sIj5wYW5lbCgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgcGFuZWwgLSBwYW5lbCBzdGFjayBleHRlbnNpb24gZm9yIGN1cnNlcworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7cGFuZWwuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+Y2M8L1NUUk9ORz4gPFNUUk9ORz5bZmxhZ3NdPC9TVFJPTkc+IDxTVFJPTkc+c291cmNlZmlsZXM8L1NUUk9ORz4gPFNUUk9ORz4tbHBhbmVsPC9TVFJPTkc+IDxTVFJPTkc+LWxuY3Vyc2VzPC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPlBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+Km5ld19wYW5lbChXSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+Ym90dG9tX3BhbmVsKFBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnRvcF9wYW5lbChQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zaG93X3BhbmVsKFBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnZvaWQ8L1NUUk9ORz4gPFNUUk9ORz51cGRhdGVfcGFuZWxzKCk7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5oaWRlX3BhbmVsKFBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPldJTkRPVzwvU1RST05HPiA8U1RST05HPipwYW5lbF93aW5kb3coY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5QQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5yZXBsYWNlX3BhbmVsKFBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbiw8L1NUUk9ORz4gPFNUUk9ORz5XSU5ET1c8L1NUUk9ORz4gPFNUUk9ORz4qd2luZG93KTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+bW92ZV9wYW5lbChQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4sPC9TVFJPTkc+IDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+c3RhcnR5LDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnN0YXJ0eCk8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnBhbmVsX2hpZGRlbihjb25zdDwvU1RST05HPiA8U1RST05HPlBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPlBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbmVsX2Fib3ZlKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuZWxfYmVsb3coY29uc3Q8L1NUUk9ORz4gPFNUUk9ORz5QQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4pPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5zZXRfcGFuZWxfdXNlcnB0cihQQU5FTDwvU1RST05HPiA8U1RST05HPipwYW4sPC9TVFJPTkc+IDxTVFJPTkc+Y29uc3Q8L1NUUk9ORz4gPFNUUk9ORz52b2lkPC9TVFJPTkc+IDxTVFJPTkc+KnB0cik8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+dm9pZDwvU1RST05HPiA8U1RST05HPipwYW5lbF91c2VycHRyKGNvbnN0PC9TVFJPTkc+IDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gPFNUUk9ORz4qcGFuKTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+ZGVsX3BhbmVsKFBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KnBhbik8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBQYW5lbHMgIGFyZSAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+ICB3aW5kb3dzIHdpdGggdGhlIGFkZGVkIGZlYXR1cmUgb2YKKyAgICAgICBkZXB0aC4gIFBhbmVsIGZ1bmN0aW9ucyBhbGxvdyB0aGUgdXNlIG9mICBzdGFja2VkICB3aW5kb3dzCisgICAgICAgYW5kICBlbnN1cmUgIHRoZSAgcHJvcGVyICBwb3J0aW9ucyAgb2YgZWFjaCB3aW5kb3cgYW5kIHRoZQorICAgICAgIGN1cnNlcyA8U1RST05HPnN0ZHNjcjwvU1RST05HPiB3aW5kb3cgYXJlIGhpZGRlbiBvciBkaXNwbGF5ZWQgIHdoZW4gIHBhbmVscworICAgICAgIGFyZSAgYWRkZWQsICBtb3ZlZCwgIG1vZGlmaWVkIG9yIHJlbW92ZWQuICBUaGUgc2V0IG9mIGN1ci0KKyAgICAgICByZW50bHkgdmlzaWJsZSBwYW5lbHMgaXMgdGhlIHN0YWNrIG9mIHBhbmVscy4gIFRoZSAgPFNUUk9ORz5zdGRzY3I8L1NUUk9ORz4KKyAgICAgICB3aW5kb3cgIGlzICBiZW5lYXRoIGFsbCBwYW5lbHMsIGFuZCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0CisgICAgICAgb2YgdGhlIHN0YWNrLgorCisgICAgICAgQSB3aW5kb3cgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IHBhbmVsLiAgVGhlICBwYW5lbCAgcm91LQorICAgICAgIHRpbmVzICBlbmFibGUgIHlvdSB0byBjcmVhdGUsIG1vdmUsIGhpZGUsIGFuZCBzaG93IHBhbmVscywKKyAgICAgICBhcyB3ZWxsIGFzIHBvc2l0aW9uIGEgcGFuZWwgYXQgYW55IGRlc2lyZWQgbG9jYXRpb24gaW4gdGhlCisgICAgICAgc3RhY2suCisKKyAgICAgICBQYW5lbCByb3V0aW5lcyBhcmUgYSBmdW5jdGlvbmFsIGxheWVyIGFkZGVkIHRvIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiwKKyAgICAgICBtYWtlIG9ubHkgaGlnaC1sZXZlbCBjdXJzZXMgY2FsbHMsIGFuZCB3b3JrIGFueXdoZXJlICB0ZXItCisgICAgICAgbWluZm8gY3Vyc2VzIGRvZXMuCisKKworPC9QUkU+Cis8SDI+RlVOQ1RJT05TPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+bmV3X3BhbmVsKHdpbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgYWxsb2NhdGVzICAgYSAgIDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gc3RydWN0dXJlLCBhc3NvY2lhdGVzIGl0IHdpdGgKKyAgICAgICAgICAgICAgPFNUUk9ORz53aW48L1NUUk9ORz4sIHBsYWNlcyB0aGUgcGFuZWwgIG9uICB0aGUgIHRvcCAgb2YgIHRoZSAgc3RhY2sKKyAgICAgICAgICAgICAgKGNhdXNlcyAgIGl0ICB0byAgIGJlICAgZGlzcGxheWVkICBhYm92ZSAgYW55IG90aGVyCisgICAgICAgICAgICAgIHBhbmVsKSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBwYW5lbC4KKworICAgICAgIDxTVFJPTkc+dXBkYXRlX3BhbmVscygpPC9TVFJPTkc+CisgICAgICAgICAgICAgIHJlZnJlc2hlcyB0aGUgdmlydHVhbCBzY3JlZW4gdG8gcmVmbGVjdCAgdGhlICByZWxhLQorICAgICAgICAgICAgICB0aW9ucyBiZXR3ZWVuIHRoZSBwYW5lbHMgaW4gdGhlIHN0YWNrLCBidXQgZG9lcyBub3QKKyAgICAgICAgICAgICAgY2FsbCBkb3VwZGF0ZSgpIHRvICByZWZyZXNoICB0aGUgIHBoeXNpY2FsICBzY3JlZW4uCisgICAgICAgICAgICAgIFVzZSB0aGlzIGZ1bmN0aW9uIGFuZCBub3Qgd3JlZnJlc2ggb3Igd25vdXRyZWZyZXNoLgorICAgICAgICAgICAgICB1cGRhdGVfcGFuZWxzKCkgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBiZWZvcmUKKyAgICAgICAgICAgICAgYSAgY2FsbCAgdG8gZG91cGRhdGUoKSwgYnV0IGRvdXBkYXRlKCkgaXMgdGhlIGZ1bmMtCisgICAgICAgICAgICAgIHRpb24gcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZSBwaHlzaWNhbCAgc2NyZWVuLgorCisgICAgICAgPFNUUk9ORz5kZWxfcGFuZWwocGFuKTwvU1RST05HPgorICAgICAgICAgICAgICByZW1vdmVzIHRoZSBnaXZlbiBwYW5lbCBmcm9tIHRoZSAgc3RhY2sgYW5kIGRlYWxsby0KKyAgICAgICAgICAgICAgY2F0ZXMgdGhlIDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gc3RydWN0dXJlIChidXQgbm90ICBpdHMgIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgd2luZG93KS4KKworICAgICAgIDxTVFJPTkc+aGlkZV9wYW5lbChwYW4pPC9TVFJPTkc+CisgICAgICAgICAgICAgIHJlbW92ZXMgIHRoZSAgZ2l2ZW4gIHBhbmVsIGZyb20gdGhlIHBhbmVsIHN0YWNrIGFuZAorICAgICAgICAgICAgICB0aHVzIGhpZGVzIGl0IGZyb20gdmlldy4gVGhlIDxTVFJPTkc+UEFORUw8L1NUUk9ORz4gc3RydWN0dXJlIGlzIG5vdAorICAgICAgICAgICAgICBsb3N0LCBtZXJlbHkgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjay4KKworICAgICAgIDxTVFJPTkc+cGFuZWxfaGlkZGVuKHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmV0dXJucyAgVFJVRSAgaWYgIHRoZSBwYW5lbCBpcyBpbiB0aGUgcGFuZWwgc3RhY2ssCisgICAgICAgICAgICAgIEZBTFNFIGlmIGl0ICBpcyAgbm90LiAgIElmICB0aGUgIHBhbmVsICBpcyAgYSAgbnVsbAorICAgICAgICAgICAgICBwb2ludGVyLCByZXR1cm4gRVJSLgorCisgICAgICAgPFNUUk9ORz5zaG93X3BhbmVsKHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgbWFrZXMgIGEgIGhpZGRlbiBwYW5lbCB2aXNpYmxlIGJ5IHBsYWNpbmcgaXQgb24gdG9wCisgICAgICAgICAgICAgIG9mIHRoZSBwYW5lbHMgaW4gdGhlIHBhbmVsIHN0YWNrLiBTZWUgQ09NUEFUSUJJTElUWQorICAgICAgICAgICAgICBiZWxvdy4KKworICAgICAgIDxTVFJPTkc+dG9wX3BhbmVsKHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcHV0cyAgdGhlICBnaXZlbiB2aXNpYmxlIHBhbmVsIG9uIHRvcCBvZiBhbGwgcGFuZWxzCisgICAgICAgICAgICAgIGluIHRoZSBzdGFjay4gIFNlZSBDT01QQVRJQklMSVRZIGJlbG93LgorCisgICAgICAgPFNUUk9ORz5ib3R0b21fcGFuZWwocGFuKTwvU1RST05HPgorICAgICAgICAgICAgICBwdXRzIHBhbmVsIGF0IHRoZSBib3R0b20gb2YgYWxsIHBhbmVscy4KKworICAgICAgIDxTVFJPTkc+bW92ZV9wYW5lbChwYW4sc3RhcnR5LHN0YXJ0eCk8L1NUUk9ORz4KKyAgICAgICAgICAgICAgbW92ZXMgdGhlIGdpdmVuIHBhbmVsIHdpbmRvdyBzbyB0aGF0IGl0cyB1cHBlci1sZWZ0CisgICAgICAgICAgICAgIGNvcm5lciAgaXMgIGF0ICA8U1RST05HPnN0YXJ0eTwvU1RST05HPiwgPFNUUk9ORz5zdGFydHg8L1NUUk9ORz4uICBJdCBkb2VzIG5vdCBjaGFuZ2UKKyAgICAgICAgICAgICAgdGhlIHBvc2l0aW9uIG9mIHRoZSBwYW5lbCBpbiB0aGUgc3RhY2suICBCZSBzdXJlIHRvCisgICAgICAgICAgICAgIHVzZSAgdGhpcyAgZnVuY3Rpb24sICBub3QgIDxTVFJPTkc+bXZ3aW4oKTwvU1RST05HPiwgdG8gbW92ZSBhIHBhbmVsCisgICAgICAgICAgICAgIHdpbmRvdy4KKworICAgICAgIDxTVFJPTkc+cmVwbGFjZV9wYW5lbChwYW4sd2luZG93KTwvU1RST05HPgorICAgICAgICAgICAgICByZXBsYWNlcyB0aGUgY3VycmVudCB3aW5kb3cgb2YgIHBhbmVsICB3aXRoICA8U1RST05HPndpbmRvdzwvU1RST05HPgorICAgICAgICAgICAgICAodXNlZnVsLCBmb3IgZXhhbXBsZSBpZiB5b3Ugd2FudCB0byByZXNpemUgYSBwYW5lbDsKKyAgICAgICAgICAgICAgaWYgeW91J3JlIHVzaW5nIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiwgeW91IGNhbiBjYWxsIDxTVFJPTkc+cmVwbGFjZV9wYW5lbDwvU1RST05HPgorICAgICAgICAgICAgICBvbiAgdGhlIG91dHB1dCBvZiA8U1RST05HPjxBIEhSRUY9IndyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZSgzeCk8L0E+PC9TVFJPTkc+KS4gIEl0IGRvZXMgbm90IGNoYW5nZQorICAgICAgICAgICAgICB0aGUgcG9zaXRpb24gb2YgdGhlIHBhbmVsIGluIHRoZSBzdGFjay4KKworICAgICAgIDxTVFJPTkc+cGFuZWxfYWJvdmUocGFuKTwvU1RST05HPgorICAgICAgICAgICAgICByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGFuZWwgYWJvdmUgcGFuLiAgIElmICB0aGUKKyAgICAgICAgICAgICAgcGFuZWwgIGFyZ3VtZW50IGlzIDxTVFJPTkc+KFBBTkVMPC9TVFJPTkc+IDxTVFJPTkc+KikwPC9TVFJPTkc+LCBpdCByZXR1cm5zIGEgcG9pbnRlcgorICAgICAgICAgICAgICB0byB0aGUgYm90dG9tIHBhbmVsIGluIHRoZSBzdGFjay4KKworICAgICAgIDxTVFJPTkc+cGFuZWxfYmVsb3cocGFuKTwvU1RST05HPgorICAgICAgICAgICAgICByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGFuZWwganVzdCBiZWxvdyBwYW4uICAgSWYKKyAgICAgICAgICAgICAgdGhlICBwYW5lbCAgYXJndW1lbnQgIGlzICA8U1RST05HPihQQU5FTDwvU1RST05HPiAgPFNUUk9ORz4qKTA8L1NUUk9ORz4sIGl0IHJldHVybnMgYQorICAgICAgICAgICAgICBwb2ludGVyIHRvIHRoZSB0b3AgcGFuZWwgaW4gdGhlIHN0YWNrLgorCisgICAgICAgPFNUUk9ORz5zZXRfcGFuZWxfdXNlcnB0cihwYW4scHRyKTwvU1RST05HPgorICAgICAgICAgICAgICBzZXRzIHRoZSBwYW5lbCdzIHVzZXIgcG9pbnRlci4KKworICAgICAgIDxTVFJPTkc+cGFuZWxfdXNlcnB0cihwYW4pPC9TVFJPTkc+CisgICAgICAgICAgICAgIHJldHVybnMgdGhlIHVzZXIgcG9pbnRlciBmb3IgYSBnaXZlbiBwYW5lbC4KKworICAgICAgIDxTVFJPTkc+cGFuZWxfd2luZG93KHBhbik8L1NUUk9ORz4KKyAgICAgICAgICAgICAgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHdpbmRvdyBvZiB0aGUgZ2l2ZW4gcGFuZWwuCisKKworPC9QUkU+Cis8SDI+RElBR05PU1RJQ1M8L0gyPjxQUkU+CisgICAgICAgRWFjaCAgcm91dGluZSAgdGhhdCAgcmV0dXJucyAgYSBwb2ludGVyIHJldHVybnMgPFNUUk9ORz5OVUxMPC9TVFJPTkc+IGlmIGFuCisgICAgICAgZXJyb3Igb2NjdXJzLiBFYWNoICByb3V0aW5lICB0aGF0ICByZXR1cm5zICBhbiAgaW50ICB2YWx1ZQorICAgICAgIHJldHVybnMgPFNUUk9ORz5PSzwvU1RST05HPiBpZiBpdCBleGVjdXRlcyBzdWNjZXNzZnVsbHkgYW5kIDxTVFJPTkc+RVJSPC9TVFJPTkc+IGlmIG5vdC4KKworCis8L1BSRT4KKzxIMj5DT01QQVRJQklMSVRZPC9IMj48UFJFPgorICAgICAgIFJlYXNvbmFibGUgIGNhcmUgIGhhcyBiZWVuIHRha2VuIHRvICBlbnN1cmUgIGNvbXBhdGliaWxpdHkKKyAgICAgICB3aXRoICB0aGUgIG5hdGl2ZSAgcGFuZWwgIGZhY2lsaXR5ICBpbnRyb2R1Y2VkICBpbiAgU1ZyMy4yCisgICAgICAgKGluc3BlY3Rpb24gICBvZiAgIHRoZSAgU1ZyNCAgbWFudWFsICBwYWdlcyAgc3VnZ2VzdHMgIHRoZQorICAgICAgIHByb2dyYW1taW5nICBpbnRlcmZhY2UgIGlzICB1bmNoYW5nZWQpLiAgIFRoZSAgPFNUUk9ORz5QQU5FTDwvU1RST05HPiAgZGF0YQorICAgICAgIHN0cnVjdHVyZXMgIGFyZSAgbWVyZWx5ICAgc2ltaWxhci4gVGhlICBwcm9ncmFtbWVyIGlzIGNhdS0KKyAgICAgICB0aW9uZWQgbm90IHRvIGRpcmVjdGx5IHVzZSA8U1RST05HPlBBTkVMPC9TVFJPTkc+IGZpZWxkcy4KKworICAgICAgIFRoZSBmdW5jdGlvbnMgPFNUUk9ORz5zaG93X3BhbmVsKCk8L1NUUk9ORz4gYW5kIDxTVFJPTkc+dG9wX3BhbmVsKCk8L1NUUk9ORz4gIGFyZSAgaWRlbnRpY2FsCisgICAgICAgaW4gIHRoaXMgIGltcGxlbWVudGF0aW9uLCAgYW5kIHdvcmsgZXF1YWxseSB3ZWxsIHdpdGggZGlzLQorICAgICAgIHBsYXllZCBvciBoaWRkZW4gcGFuZWxzLiAgSW4gdGhlIG5hdGl2ZSBTeXN0ZW0gViBpbXBsZW1lbi0KKyAgICAgICB0YXRpb24sIDxTVFJPTkc+c2hvd19wYW5lbCgpPC9TVFJPTkc+IGlzIGludGVuZGVkIGZvciBtYWtpbmcgYSBoaWRkZW4gcGFuZWwKKyAgICAgICB2aXNpYmxlIChhdCB0aGUgdG9wICBvZiAgdGhlICBzdGFjaykgIGFuZCAgPFNUUk9ORz50b3BfcGFuZWwoKTwvU1RST05HPiAgaXMKKyAgICAgICBpbnRlbmRlZCAgZm9yICBtYWtpbmcgYW4gYWxyZWFkeS12aXNpYmxlIHBhbmVsIG1vdmUgdG8gdGhlCisgICAgICAgdG9wIG9mIHRoZSBzdGFjay4gWW91IGFyZSBjYXV0aW9uZWQgIHRvICB1c2UgIHRoZSAgY29ycmVjdAorICAgICAgIGZ1bmN0aW9uICAgdG8gICBlbnN1cmUgIGNvbXBhdGliaWxpdHkgIHdpdGggIG5hdGl2ZSAgcGFuZWwKKyAgICAgICBsaWJyYXJpZXMuCisKKworPC9QUkU+Cis8SDI+Tk9URTwvSDI+PFBSRT4KKyAgICAgICBJbiB5b3VyIGxpYnJhcnkgbGlzdCwgbGlicGFuZWwuYSBzaG91bGQgIGJlICBiZWZvcmUgIGxpYm4tCisgICAgICAgY3Vyc2VzLmE7ICB0aGF0ICBpcywgIHlvdSB3YW50IHRvIHNheSBgLWxwYW5lbCAtbG5jdXJzZXMnLAorICAgICAgIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZCAod2hpY2ggd291bGQgdXN1YWxseSBnaXZlIGEgbGluay0KKyAgICAgICBlcnJvcikuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgcGFuZWwuaCBpbnRlcmZhY2UgZm9yIHRoZSBwYW5lbHMgbGlicmFyeQorCisgICAgICAgbGlicGFuZWwuYSB0aGUgcGFuZWxzIGxpYnJhcnkgaXRzZWxmCisKKworPC9QUkU+Cis8SDI+U0VFIEFMU088L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+CisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCis8L1BSRT4KKzxIMj5BVVRIT1I8L0gyPjxQUkU+CisgICAgICAgT3JpZ2luYWxseSAgIHdyaXR0ZW4gICBieSAgIFdhcnJlbiAgVHVja2VyICAmbHQ7d2h0QG40aGdmLm10LQorICAgICAgIHBhcmsuZ2EudXMmZ3Q7LCBwcmltYXJpbHkgdG8gYXNzaXN0ICBpbiAgcG9ydGluZyAgdTM4Nm1vbiAgdG8KKyAgICAgICBzeXN0ZW1zICB3aXRob3V0ICBhIG5hdGl2ZSBwYW5lbHMgbGlicmFyeS4gIFJlcGFja2FnZWQgZm9yCisgICAgICAgbmN1cnNlcyBieSBaZXlkIGJlbi1IYWxpbS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJwYW5lbC4zeC5odG1sIj5wYW5lbCgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi9yZXNpemV0ZXJtLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vcmVzaXpldGVybS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjA4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vcmVzaXpldGVybS4zeC5odG1sCkBAIC0wLDAgKzEsMTQxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni0yMDA1CisgICogQElkOiByZXNpemV0ZXJtLjN4LHYgMS4xMSAyMDA1LzA2LzI1IDIyOjE5OjQyIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPnJlc2l6ZXRlcm0gM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT5yZXNpemV0ZXJtIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJyZXNpemV0ZXJtLjN4Lmh0bWwiPnJlc2l6ZXRlcm0oM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InJlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz5pc190ZXJtX3Jlc2l6ZWQ8L1NUUk9ORz4sICA8U1RST05HPnJlc2l6ZV90ZXJtPC9TVFJPTkc+LCAgPFNUUk9ORz5yZXNpemV0ZXJtPC9TVFJPTkc+ICAtICBjaGFuZ2UgIHRoZQorICAgICAgIGN1cnNlcyB0ZXJtaW5hbCBzaXplCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4jaW5jbHVkZTwvU1RST05HPiA8U1RST05HPiZsdDtjdXJzZXMuaCZndDs8L1NUUk9ORz4KKworICAgICAgIDxTVFJPTkc+Ym9vbDwvU1RST05HPiA8U1RST05HPmlzX3Rlcm1fcmVzaXplZChpbnQ8L1NUUk9ORz4gPFNUUk9ORz5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2x1bW5zKTs8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPnJlc2l6ZV90ZXJtKGludDwvU1RST05HPiA8U1RST05HPmxpbmVzLDwvU1RST05HPiA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPmNvbHVtbnMpOzwvU1RST05HPgorICAgICAgIDxTVFJPTkc+aW50PC9TVFJPTkc+IDxTVFJPTkc+cmVzaXpldGVybShpbnQ8L1NUUk9ORz4gPFNUUk9ORz5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2x1bW5zKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuICAgSXQgIHByb3ZpZGVzCisgICAgICAgY2FsbGVycyAgd2l0aCAgYSBob29rIGludG8gdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBkYXRhIHRvIHJlc2l6ZSB3aW4tCisgICAgICAgZG93cywgcHJpbWFyaWx5IGZvciB1c2UgYnkgcHJvZ3JhbXMgcnVubmluZyBpbiBhbiBYIFdpbmRvdworICAgICAgIHRlcm1pbmFsICAoZS5nLiwgIHh0ZXJtKS4gIFRoZSBmdW5jdGlvbiA8U1RST05HPnJlc2l6ZXRlcm08L1NUUk9ORz4gcmVzaXplcworICAgICAgIHRoZSBzdGFuZGFyZCBhbmQgY3VycmVudCB3aW5kb3dzIHRvIHRoZSAgc3BlY2lmaWVkICBkaW1lbi0KKyAgICAgICBzaW9ucywgIGFuZCAgYWRqdXN0cyAgb3RoZXIgIGJvb2trZWVwaW5nICBkYXRhIHVzZWQgYnkgdGhlCisgICAgICAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcnkgdGhhdCByZWNvcmQgdGhlIHdpbmRvdyBkaW1lbnNpb25zLgorCisgICAgICAgTW9zdCAgb2YgIHRoZSAgd29yayAgaXMgIGRvbmUgIGJ5ICAgdGhlICAgaW5uZXIgICBmdW5jdGlvbgorICAgICAgIDxTVFJPTkc+cmVzaXplX3Rlcm08L1NUUk9ORz4uICBUaGUgb3V0ZXIgZnVuY3Rpb24gPFNUUk9ORz5yZXNpemV0ZXJtPC9TVFJPTkc+IGFkZHMgYm9va2tlZXAtCisgICAgICAgaW5nIGZvciB0aGUgU0lHV0lOQ0ggaGFuZGxlci4gIFdoZW4gcmVzaXppbmcgdGhlICB3aW5kb3dzLAorICAgICAgIDxTVFJPTkc+cmVzaXplX3Rlcm08L1NUUk9ORz4gIGJsYW5rLWZpbGxzIHRoZSBhcmVhcyB0aGF0IGFyZSBleHRlbmRlZC4gIFRoZQorICAgICAgIGNhbGxpbmcgYXBwbGljYXRpb24gc2hvdWxkIGZpbGwgaW4gdGhlc2UgYXJlYXMgd2l0aCBhcHByby0KKyAgICAgICBwcmlhdGUgIGRhdGEuICBUaGUgPFNUUk9ORz5yZXNpemVfdGVybTwvU1RST05HPiBmdW5jdGlvbiBhdHRlbXB0cyB0byByZXNpemUKKyAgICAgICBhbGwgd2luZG93cy4gIEhvd2V2ZXIsIGR1ZSB0byB0aGUgIGNhbGxpbmcgIGNvbnZlbnRpb24gIG9mCisgICAgICAgcGFkcywgIGl0ICBpcyAgbm90ICBwb3NzaWJsZSB0byByZXNpemUgdGhlc2Ugd2l0aG91dCBhZGRpLQorICAgICAgIHRpb25hbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbi4KKworICAgICAgIEEgc3VwcG9ydCBmdW5jdGlvbiA8U1RST05HPmlzX3Rlcm1fcmVzaXplZDwvU1RST05HPiAgaXMgIHByb3ZpZGVkICBzbyAgdGhhdAorICAgICAgIGFwcGxpY2F0aW9ucyAgY2FuICBjaGVjayBpZiB0aGUgPFNUUk9ORz5yZXNpemVfdGVybTwvU1RST05HPiBmdW5jdGlvbiB3b3VsZAorICAgICAgIG1vZGlmeSB0aGUgd2luZG93IHN0cnVjdHVyZXMuICBJdCByZXR1cm5zIFRSVUUgaWYgdGhlIHdpbi0KKyAgICAgICBkb3dzIHdvdWxkIGJlIG1vZGlmaWVkLCBhbmQgRkFMU0Ugb3RoZXJ3aXNlLgorCisKKzwvUFJFPgorPEgyPlJFVFVSTiBWQUxVRTwvSDI+PFBSRT4KKyAgICAgICBFeGNlcHQgIGFzICBub3RlcywgIHRoZXNlICBmdW5jdGlvbiByZXR1cm4gdGhlIGludGVnZXIgPFNUUk9ORz5FUlI8L1NUUk9ORz4KKyAgICAgICB1cG9uIGZhaWx1cmUgYW5kIDxTVFJPTkc+T0s8L1NUUk9ORz4gb24gc3VjY2Vzcy4gIFRoZXkgd2lsbCBmYWlsIGlmICBlaXRoZXIKKyAgICAgICBvZiB0aGUgZGltZW5zaW9ucyBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIG9yIGlmIGFuCisgICAgICAgZXJyb3Igb2NjdXJzIHdoaWxlIChyZSlhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlICB3aW5kb3dzLgorCisKKzwvUFJFPgorPEgyPk5PVEVTPC9IMj48UFJFPgorICAgICAgIFdoaWxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBzdXBwb3J0IGEKKyAgICAgICBzaWduYWwgaGFuZGxlciAoaS5lLiwgZm9yIFNJR1dJTkNIKSwgY2FyZSBzaG91bGQgYmUgIHRha2VuCisgICAgICAgdG8gIGF2b2lkIGludm9raW5nIHRoZW0gaW4gYSBjb250ZXh0IHdoZXJlIDxTVFJPTkc+bWFsbG9jPC9TVFJPTkc+IG9yIDxTVFJPTkc+cmVhbC08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmxvYzwvU1RST05HPiBtYXkgaGF2ZSBiZWVuIGludGVycnVwdGVkLCBzaW5jZSBpdCB1c2VzICB0aG9zZSAgZnVuYy0KKyAgICAgICB0aW9ucy4KKworICAgICAgIElmICBuY3Vyc2VzICBpcyBjb25maWd1cmVkIHRvIHN1cHBseSBpdHMgb3duIFNJR1dJTkNIIGhhbi0KKyAgICAgICBkbGVyLCB0aGUgPFNUUk9ORz5yZXNpemV0ZXJtPC9TVFJPTkc+IGZ1bmN0aW9uIHVuZ2V0Y2gncyBhIDxTVFJPTkc+S0VZX1JFU0laRTwvU1RST05HPiB3aGljaAorICAgICAgIHdpbGwgIGJlICByZWFkIG9uIHRoZSBuZXh0IGNhbGwgdG8gPFNUUk9ORz5nZXRjaDwvU1RST05HPi4gIFRoaXMgaXMgdXNlZCB0bworICAgICAgIGFsZXJ0IGFuIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHNjcmVlbiBzaXplIGhhcyBjaGFuZ2VkLCBhbmQKKyAgICAgICB0aGF0ICBpdCBzaG91bGQgcmVwYWludCBzcGVjaWFsIGZlYXR1cmVzIHN1Y2ggYXMgcGFkcyB0aGF0CisgICAgICAgY2Fubm90IGJlIGRvbmUgYXV0b21hdGljYWxseS4KKworICAgICAgIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgPFNUUk9ORz5MSU5FUzwvU1RST05HPiAgb3IgIDxTVFJPTkc+Q09MVU1OUzwvU1RST05HPiAgYXJlICBzZXQsCisgICAgICAgdGhpcyAgb3ZlcnJpZGVzICB0aGUgIGxpYnJhcnkncyAgdXNlICBvZiAgdGhlICB3aW5kb3cgc2l6ZQorICAgICAgIG9idGFpbmVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBUaHVzLCBldmVuIGlmIGEgIFNJRy0KKyAgICAgICBXSU5DSCAgaXMgcmVjZWl2ZWQsIG5vIHNjcmVlbiBzaXplIGNoYW5nZSBtYXkgYmUgcmVjb3JkZWQuCisgICAgICAgSW4gdGhhdCBjYXNlLCBubyA8U1RST05HPktFWV9SRVNJWkU8L1NUUk9ORz4gaXMgcXVldWVkIGZvciB0aGUgbmV4dCBjYWxsIHRvCisgICAgICAgPFNUUk9ORz5nZXRjaDwvU1RST05HPjsgYW4gPFNUUk9ORz5FUlI8L1NUUk9ORz4gd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkLgorCisKKzwvUFJFPgorPEgyPlNFRSBBTFNPPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0id3Jlc2l6ZS4zeC5odG1sIj53cmVzaXplKDN4KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+QVVUSE9SPC9IMj48UFJFPgorICAgICAgIFRob21hcyBEaWNrZXkgKGZyb20gYW4gZXF1aXZhbGVudCBmdW5jdGlvbiB3cml0dGVuIGluIDE5ODgKKyAgICAgICBmb3IgQlNEIGN1cnNlcykuCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InJlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybSgzeCk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi90ZXJtLjUuaHRtbCBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi90ZXJtLjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGZkYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL3Rlcm0uNS5odG1sCkBAIC0wLDAgKzEsMzA4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IHRlcm0uNSx2IDEuMTkgMjAwNi8xMi8yNCAxODoxMjozOCB0b20gRXhwIEAKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT50ZXJtIDU8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT50ZXJtIDU8L0gxPgorPEhSPgorPFBSRT4KKzwhLS0gTWFucGFnZSBjb252ZXJ0ZWQgYnkgbWFuMmh0bWwgMy4wLjEgLS0+Cis8U1RST05HPjxBIEhSRUY9InRlcm0uNS5odG1sIj50ZXJtKDUpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybS41Lmh0bWwiPnRlcm0oNSk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgdGVybSAtIGZvcm1hdCBvZiBjb21waWxlZCB0ZXJtIGZpbGUuCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50ZXJtPC9TVFJPTkc+CisKKworPC9QUkU+Cis8SDI+REVTQ1JJUFRJT048L0gyPjxQUkU+CisgICA8U1RST05HPlNUT1JBR0U8L1NUUk9ORz4gPFNUUk9ORz5MT0NBVElPTjwvU1RST05HPgorICAgICAgIENvbXBpbGVkIHRlcm1pbmZvIGRlc2NyaXB0aW9ucyBhcmUgcGxhY2VkIHVuZGVyIHRoZSBkaXJlYy0KKyAgICAgICB0b3J5IDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mbzwvU1RST05HPi4gICBUd28gIGNvbmZpZ3VyYXRpb25zICBhcmUgIHN1cC0KKyAgICAgICBwb3J0ZWQgKHdoZW4gYnVpbGRpbmcgdGhlIG5jdXJzZXMgbGlicmFyaWVzKToKKworICAgICAgIDxTVFJPTkc+ZGlyZWN0b3J5PC9TVFJPTkc+IDxTVFJPTkc+dHJlZTwvU1RST05HPgorICAgICAgICAgICAgQSAgdHdvLWxldmVsICBzY2hlbWUgaXMgdXNlZCB0byBhdm9pZCBhIGxpbmVhciBzZWFyY2gKKyAgICAgICAgICAgIG9mIGEgIGh1Z2UgIFVOSVggIHN5c3RlbSAgZGlyZWN0b3J5OiAgPFNUUk9ORz4vdXNyL3NoYXJlL3Rlci08L1NUUk9ORz4KKyAgICAgICAgICAgIDxTVFJPTkc+bWluZm8vYy9uYW1lPC9TVFJPTkc+ICB3aGVyZSA8RU0+bmFtZTwvRU0+IGlzIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCwKKyAgICAgICAgICAgIGFuZCA8RU0+YzwvRU0+IGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgPEVNPm5hbWU8L0VNPi4gIFRodXMsIDxFTT5hY3Q0PC9FTT4gY2FuCisgICAgICAgICAgICBiZSAgZm91bmQgIGluICB0aGUgIGZpbGUgIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mby9hL2FjdDQ8L1NUUk9ORz4uCisgICAgICAgICAgICBTeW5vbnltcyBmb3IgdGhlIHNhbWUgIHRlcm1pbmFsICBhcmUgIGltcGxlbWVudGVkICBieQorICAgICAgICAgICAgbXVsdGlwbGUgbGlua3MgdG8gdGhlIHNhbWUgY29tcGlsZWQgZmlsZS4KKworICAgICAgIDxTVFJPTkc+aGFzaGVkPC9TVFJPTkc+IDxTVFJPTkc+ZGF0YWJhc2U8L1NUUk9ORz4KKyAgICAgICAgICAgIFVzaW5nICBCZXJrZWxleSAgZGF0YWJhc2UsICB0d28gIHR5cGVzIG9mIHJlY29yZHMgYXJlCisgICAgICAgICAgICBzdG9yZWQ6IHRoZSB0ZXJtaW5mbyAgZGF0YSAgaW4gIHRoZSAgc2FtZSAgZm9ybWF0ICBhcworICAgICAgICAgICAgc3RvcmVkICBpbiAgYSBkaXJlY3RvcnkgdHJlZSB3aXRoIHRoZSB0ZXJtaW5mbydzIHByaS0KKyAgICAgICAgICAgIG1hcnkgbmFtZSBhcyAgYSAga2V5LCAgYW5kICByZWNvcmRzICBjb250YWluaW5nICBvbmx5CisgICAgICAgICAgICBhbGlhc2VzIHBvaW50aW5nIHRvIHRoZSBwcmltYXJ5IG5hbWUuCisKKyAgICAgICAgICAgIElmIGJ1aWx0IHRvIHdyaXRlIGhhc2hlZCBkYXRhYmFzZXMsIG5jdXJzZXMgY2FuIHN0aWxsCisgICAgICAgICAgICByZWFkIHRlcm1pbmZvICBkYXRhYmFzZXMgIG9yZ2FuaXplZCAgYXMgIGEgIGRpcmVjdG9yeQorICAgICAgICAgICAgdHJlZSwgIGJ1dCAgY2Fubm90ICB3cml0ZSAgZW50cmllcyBpbnRvIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIHRyZWUuICBJdCBjYW4gIHdyaXRlICAob3IgIHJld3JpdGUpICBlbnRyaWVzICBpbiAgdGhlCisgICAgICAgICAgICBoYXNoZWQgZGF0YWJhc2UuCisKKyAgICAgICAgICAgIG5jdXJzZXMgIGRpc3Rpbmd1aXNoZXMgIHRoZSB0d28gY2FzZXMgaW4gdGhlIFRFUk1JTkZPCisgICAgICAgICAgICBhbmQgVEVSTUlORk9fRElSUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBieSBhc3N1bWluZyAgYQorICAgICAgICAgICAgZGlyZWN0b3J5ICB0cmVlICBmb3IgIGVudHJpZXMgIHRoYXQgIGNvcnJlc3BvbmQgdG8gYW4KKyAgICAgICAgICAgIGV4aXN0aW5nIGRpcmVjdG9yeSwgYW5kIGhhc2hlZCBkYXRhYmFzZSBvdGhlcndpc2UuCisKKyAgIDxTVFJPTkc+U1RPUkFHRTwvU1RST05HPiA8U1RST05HPkZPUk1BVDwvU1RST05HPgorICAgICAgIFRoZSBmb3JtYXQgaGFzIGJlZW4gY2hvc2VuIHNvIHRoYXQgaXQgd2lsbCBiZSB0aGUgc2FtZSAgb24KKyAgICAgICBhbGwgIGhhcmR3YXJlLiAgIEFuICA4IG9yIG1vcmUgYml0IGJ5dGUgaXMgYXNzdW1lZCwgYnV0IG5vCisgICAgICAgYXNzdW1wdGlvbnMgYWJvdXQgYnl0ZSAgb3JkZXJpbmcgIG9yICBzaWduICBleHRlbnNpb24gIGFyZQorICAgICAgIG1hZGUuCisKKyAgICAgICBUaGUgIGNvbXBpbGVkICBmaWxlICBpcyAgY3JlYXRlZCB3aXRoIHRoZSA8U1RST05HPnRpYzwvU1RST05HPiBwcm9ncmFtLCBhbmQKKyAgICAgICByZWFkIGJ5IHRoZSByb3V0aW5lIDxFTT5zZXR1cHRlcm08L0VNPi4gIFRoZSBmaWxlIGlzICBkaXZpZGVkICBpbnRvCisgICAgICAgc2l4IHBhcnRzOiB0aGUgaGVhZGVyLCB0ZXJtaW5hbCBuYW1lcywgYm9vbGVhbiBmbGFncywgbnVtLQorICAgICAgIGJlcnMsIHN0cmluZ3MsIGFuZCBzdHJpbmcgdGFibGUuCisKKyAgICAgICBUaGUgaGVhZGVyIHNlY3Rpb24gYmVnaW5zIHRoZSBmaWxlLiAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zCisgICAgICAgc2l4ICBzaG9ydCAgaW50ZWdlcnMgaW4gdGhlIGZvcm1hdCBkZXNjcmliZWQgYmVsb3cuICBUaGVzZQorICAgICAgIGludGVnZXJzIGFyZQorCisgICAgICAgICAgICAoMSkgdGhlIG1hZ2ljIG51bWJlciAob2N0YWwgMDQzMik7CisKKyAgICAgICAgICAgICgyKSB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBuYW1lcyBzZWN0aW9uOworCisgICAgICAgICAgICAoMykgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYm9vbGVhbiBzZWN0aW9uOworCisgICAgICAgICAgICAoNCkgdGhlIG51bWJlciBvZiBzaG9ydCBpbnRlZ2VycyBpbiB0aGUgbnVtYmVycyAgc2VjLQorICAgICAgICAgICAgdGlvbjsKKworICAgICAgICAgICAgKDUpIHRoZSBudW1iZXIgb2Ygb2Zmc2V0cyAgKHNob3J0ICBpbnRlZ2VycykgIGluICB0aGUKKyAgICAgICAgICAgIHN0cmluZ3Mgc2VjdGlvbjsKKworICAgICAgICAgICAgKDYpIHRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIHN0cmluZyB0YWJsZS4KKworICAgICAgIFNob3J0IGludGVnZXJzIGFyZSBzdG9yZWQgaW4gdHdvIDgtYml0IGJ5dGVzLiAgIFRoZSAgZmlyc3QKKyAgICAgICBieXRlICBjb250YWlucyAgdGhlIGxlYXN0IHNpZ25pZmljYW50IDggYml0cyBvZiB0aGUgdmFsdWUsCisgICAgICAgYW5kIHRoZSBzZWNvbmQgYnl0ZSBjb250YWlucyB0aGUgbW9zdCBzaWduaWZpY2FudCA4ICBiaXRzLgorICAgICAgIChUaHVzLCAgdGhlICB2YWx1ZSAgcmVwcmVzZW50ZWQgaXMgMjU2KnNlY29uZCtmaXJzdC4pICBUaGUKKyAgICAgICB2YWx1ZSAtMSBpcyByZXByZXNlbnRlZCBieSB0aGUgdHdvIGJ5dGVzIDAzNzcsIDAzNzc7IG90aGVyCisgICAgICAgbmVnYXRpdmUgIHZhbHVlcyAgYXJlICBpbGxlZ2FsLiBUaGlzIHZhbHVlIGdlbmVyYWxseSBtZWFucworICAgICAgIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgY2FwYWJpbGl0eSAgaXMgIG1pc3NpbmcgIGZyb20gIHRoaXMKKyAgICAgICB0ZXJtaW5hbC4gICBOb3RlIHRoYXQgdGhpcyBmb3JtYXQgY29ycmVzcG9uZHMgdG8gdGhlIGhhcmQtCisgICAgICAgd2FyZSAgb2YgIHRoZSAgVkFYICBhbmQgIFBEUC0xMSAgKHRoYXQgIGlzLCAgbGl0dGxlLWVuZGlhbgorICAgICAgIG1hY2hpbmVzKS4gIE1hY2hpbmVzIHdoZXJlIHRoaXMgZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUKKyAgICAgICBoYXJkd2FyZSBtdXN0IHJlYWQgdGhlIGludGVnZXJzIGFzIHR3byBieXRlcyAgYW5kICBjb21wdXRlCisgICAgICAgdGhlIGxpdHRsZS1lbmRpYW4gdmFsdWUuCisKKyAgICAgICBUaGUgIHRlcm1pbmFsICBuYW1lcyAgc2VjdGlvbiBjb21lcyBuZXh0LiAgSXQgY29udGFpbnMgdGhlCisgICAgICAgZmlyc3QgbGluZSBvZiB0aGUgdGVybWluZm8gZGVzY3JpcHRpb24sIGxpc3RpbmcgdGhlICB2YXJpLQorICAgICAgIG91cyAgbmFtZXMgIGZvciB0aGUgdGVybWluYWwsIHNlcGFyYXRlZCBieSB0aGUgYHwnIGNoYXJhYy0KKyAgICAgICB0ZXIuICBUaGUgc2VjdGlvbiBpcyB0ZXJtaW5hdGVkIHdpdGggYW4gQVNDSUkgTlVMICBjaGFyYWMtCisgICAgICAgdGVyLgorCisgICAgICAgVGhlICBib29sZWFuIGZsYWdzIGhhdmUgb25lIGJ5dGUgZm9yIGVhY2ggZmxhZy4gIFRoaXMgYnl0ZQorICAgICAgIGlzIGVpdGhlciAwIG9yIDEgYXMgdGhlIGZsYWcgaXMgcHJlc2VudCAgb3IgIGFic2VudC4gICBUaGUKKyAgICAgICBjYXBhYmlsaXRpZXMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBmaWxlICZsdDt0ZXJtLmgmZ3Q7LgorCisgICAgICAgQmV0d2VlbiB0aGUgYm9vbGVhbiBzZWN0aW9uIGFuZCB0aGUgbnVtYmVyIHNlY3Rpb24sIGEgbnVsbAorICAgICAgIGJ5dGUgd2lsbCBiZSBpbnNlcnRlZCwgaWYgbmVjZXNzYXJ5LCB0byAgZW5zdXJlICB0aGF0ICB0aGUKKyAgICAgICBudW1iZXIgIHNlY3Rpb24gYmVnaW5zIG9uIGFuIGV2ZW4gYnl0ZSAodGhpcyBpcyBhIHJlbGljIG9mCisgICAgICAgdGhlICBQRFAtMTEncyAgd29yZC1hZGRyZXNzZWQgICBhcmNoaXRlY3R1cmUsICAgb3JpZ2luYWxseQorICAgICAgIGRlc2lnbmVkICBpbiAgdG8gIGF2b2lkICBJT1QgdHJhcHMgaW5kdWNlZCBieSBhZGRyZXNzaW5nIGEKKyAgICAgICB3b3JkIG9uIGFuIG9kZCBieXRlIGJvdW5kYXJ5KS4gICBBbGwgIHNob3J0ICBpbnRlZ2VycyAgYXJlCisgICAgICAgYWxpZ25lZCBvbiBhIHNob3J0IHdvcmQgYm91bmRhcnkuCisKKyAgICAgICBUaGUgbnVtYmVycyBzZWN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIGZsYWdzIHNlY3Rpb24uICBFYWNoCisgICAgICAgY2FwYWJpbGl0eSB0YWtlcyB1cCB0d28gYnl0ZXMsIGFuZCBpcyBzdG9yZWQgYXMgYSAgbGl0dGxlLQorICAgICAgIGVuZGlhbiBzaG9ydCBpbnRlZ2VyLiAgSWYgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGlzIC0xLCB0aGUKKyAgICAgICBjYXBhYmlsaXR5IGlzIHRha2VuIHRvIGJlIG1pc3NpbmcuCisKKyAgICAgICBUaGUgc3RyaW5ncyBzZWN0aW9uIGlzIGFsc28gc2ltaWxhci4gIEVhY2ggIGNhcGFiaWxpdHkgIGlzCisgICAgICAgc3RvcmVkICBhcyAgYSBzaG9ydCBpbnRlZ2VyLCBpbiB0aGUgZm9ybWF0IGFib3ZlLiAgQSB2YWx1ZQorICAgICAgIG9mIC0xIG1lYW5zIHRoZSBjYXBhYmlsaXR5ICBpcyAgbWlzc2luZy4gICBPdGhlcndpc2UsICB0aGUKKyAgICAgICB2YWx1ZSAgaXMgIHRha2VuICBhcyAgYW4gIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICAgc3RyaW5nIHRhYmxlLiAgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIF5YIG9yIFxjIG5vdGF0aW9uIGFyZQorICAgICAgIHN0b3JlZCAgaW4gdGhlaXIgaW50ZXJwcmV0ZWQgZm9ybSwgbm90IHRoZSBwcmludGluZyByZXByZS0KKyAgICAgICBzZW50YXRpb24uICBQYWRkaW5nIGluZm9ybWF0aW9uICQmbHQ7bm4mZ3Q7IGFuZCBwYXJhbWV0ZXIgaW5mb3ItCisgICAgICAgbWF0aW9uICV4IGFyZSBzdG9yZWQgaW50YWN0IGluIHVuaW50ZXJwcmV0ZWQgZm9ybS4KKworICAgICAgIFRoZSAgZmluYWwgIHNlY3Rpb24gIGlzIHRoZSBzdHJpbmcgdGFibGUuICBJdCBjb250YWlucyBhbGwKKyAgICAgICB0aGUgdmFsdWVzIG9mIHN0cmluZyBjYXBhYmlsaXRpZXMgcmVmZXJlbmNlZCBpbiB0aGUgc3RyaW5nCisgICAgICAgc2VjdGlvbi4gIEVhY2ggc3RyaW5nIGlzIG51bGwgdGVybWluYXRlZC4KKworICAgPFNUUk9ORz5FWFRFTkRFRDwvU1RST05HPiA8U1RST05HPlNUT1JBR0U8L1NUUk9ORz4gPFNUUk9ORz5GT1JNQVQ8L1NUUk9ORz4KKyAgICAgICBUaGUgIHByZXZpb3VzICBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgY29udmVudGlvbmFsIHRlcm1pbmZvCisgICAgICAgYmluYXJ5IGZvcm1hdC4gIFdpdGggc29tZSBtaW5vciB2YXJpYXRpb25zIG9mIHRoZSAgb2Zmc2V0cworICAgICAgIChzZWUgIFBPUlRBQklMSVRZKSwgIHRoZSBzYW1lIGJpbmFyeSBmb3JtYXQgaXMgdXNlZCBpbiBhbGwKKyAgICAgICBtb2Rlcm4gVU5JWCBzeXN0ZW1zLiAgRWFjaCBzeXN0ZW0gdXNlcyBhIHByZWRlZmluZWQgc2V0IG9mCisgICAgICAgYm9vbGVhbiwgbnVtYmVyIG9yIHN0cmluZyBjYXBhYmlsaXRpZXMuCisKKyAgICAgICBUaGUgIG5jdXJzZXMgIGxpYnJhcmllcyAgYW5kIGFwcGxpY2F0aW9ucyBzdXBwb3J0IGV4dGVuZGVkCisgICAgICAgdGVybWluZm8gYmluYXJ5IGZvcm1hdCwgYWxsb3dpbmcgdXNlcnMgdG8gZGVmaW5lIGNhcGFiaWxpLQorICAgICAgIHRpZXMgIHdoaWNoIGFyZSBsb2FkZWQgYXQgcnVudGltZS4gIFRoaXMgZXh0ZW5zaW9uIGlzIG1hZGUKKyAgICAgICBwb3NzaWJsZSBieSB1c2luZyB0aGUgZmFjdCB0aGF0IHRoZSBvdGhlciAgaW1wbGVtZW50YXRpb25zCisgICAgICAgc3RvcCAgcmVhZGluZyB0aGUgdGVybWluZm8gZGF0YSB3aGVuIHRoZXkgaGF2ZSByZWFjaGVkIHRoZQorICAgICAgIGVuZCBvZiB0aGUgc2l6ZSBnaXZlbiBpbiB0aGUgaGVhZGVyLiAgbmN1cnNlcyAgY2hlY2tzICB0aGUKKyAgICAgICBzaXplLCAgYW5kICBpZiBpdCBleGNlZWRzIHRoYXQgZHVlIHRvIHRoZSBwcmVkZWZpbmVkIGRhdGEsCisgICAgICAgY29udGludWVzIHRvIHBhcnNlIGFjY29yZGluZyB0byBpdHMgb3duIHNjaGVtZS4KKworICAgICAgIEZpcnN0LCBpdCByZWFkcyB0aGUgZXh0ZW5kZWQgaGVhZGVyICg1IHNob3J0IGludGVnZXJzKToKKworICAgICAgICAgICAgKDEpICBjb3VudCBvZiBleHRlbmRlZCBib29sZWFuIGNhcGFiaWxpdGllcworCisgICAgICAgICAgICAoMikgIGNvdW50IG9mIGV4dGVuZGVkIG51bWVyaWMgY2FwYWJpbGl0aWVzCisKKyAgICAgICAgICAgICgzKSAgY291bnQgb2YgZXh0ZW5kZWQgc3RyaW5nIGNhcGFiaWxpdGllcworCisgICAgICAgICAgICAoNCkgIHNpemUgb2YgdGhlIGV4dGVuZGVkIHN0cmluZyB0YWJsZSBpbiBieXRlcy4KKworICAgICAgICAgICAgKDUpICBsYXN0IG9mZnNldCBvZiAgdGhlICBleHRlbmRlZCAgc3RyaW5nICB0YWJsZSAgaW4KKyAgICAgICAgICAgICAgICAgYnl0ZXMuCisKKyAgICAgICBVc2luZyAgdGhlICBjb3VudHMgYW5kIHNpemVzLCBuY3Vyc2VzIGFsbG9jYXRlcyBhcnJheXMgYW5kCisgICAgICAgcmVhZHMgZGF0YSBmb3IgdGhlIGV4dGVuZGVkIGNhcGFiaWx0aWVzIGluIHRoZSBzYW1lICBvcmRlcgorICAgICAgIGFzIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24uCisKKyAgICAgICBUaGUgZXh0ZW5kZWQgc3RyaW5nIHRhYmxlIGNvbnRhaW5zIHZhbHVlcyBmb3Igc3RyaW5nIGNhcGEtCisgICAgICAgYmlsaXRpZXMuICBBZnRlciB0aGUgZW5kIG9mIHRoZXNlIHZhbHVlcywgaXQgY29udGFpbnMgIHRoZQorICAgICAgIG5hbWVzICBmb3IgIGVhY2ggIG9mICB0aGUgIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBpbiBvcmRlciwKKyAgICAgICBlLmcuLCBib29sZWFucywgdGhlbiBudW1iZXJzIGFuZCBmaW5hbGx5IHN0cmluZ3MuCisKKworPC9QUkU+Cis8SDI+UE9SVEFCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciA8RU0+c2V0dXB0ZXJtPC9FTT4gdG8gZXhwZWN0IGEgZGlmZmVyLQorICAgICAgIGVudCAgc2V0ICBvZiBjYXBhYmlsaXRpZXMgdGhhbiBhcmUgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUKKyAgICAgICBmaWxlLiAgRWl0aGVyIHRoZSBkYXRhYmFzZSBtYXkgIGhhdmUgIGJlZW4gIHVwZGF0ZWQgIHNpbmNlCisgICAgICAgPEVNPnNldHVwdGVybTwvRU0+IGhhcyBiZWVuIHJlY29tcGlsZWQgKHJlc3VsdGluZyBpbiBleHRyYSB1bnJlY29nLQorICAgICAgIG5pemVkIGVudHJpZXMgaW4gdGhlIGZpbGUpIG9yIHRoZSBwcm9ncmFtICBtYXkgIGhhdmUgIGJlZW4KKyAgICAgICByZWNvbXBpbGVkICBtb3JlICByZWNlbnRseSAgdGhhbiAgdGhlIGRhdGFiYXNlIHdhcyB1cGRhdGVkCisgICAgICAgKHJlc3VsdGluZyBpbiBtaXNzaW5nICBlbnRyaWVzKS4gICBUaGUgIHJvdXRpbmUgIDxFTT5zZXR1cHRlcm08L0VNPgorICAgICAgIG11c3QgIGJlIHByZXBhcmVkIGZvciBib3RoIHBvc3NpYmlsaXRpZXMgLSB0aGlzIGlzIHdoeSB0aGUKKyAgICAgICBudW1iZXJzIGFuZCBzaXplcyBhcmUgaW5jbHVkZWQuICAgQWxzbywgIG5ldyAgY2FwYWJpbGl0aWVzCisgICAgICAgbXVzdCAgYWx3YXlzICBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0cyBvZiBib29sZWFuLAorICAgICAgIG51bWJlciwgYW5kIHN0cmluZyBjYXBhYmlsaXRpZXMuCisKKyAgICAgICBEZXNwaXRlIHRoZSBjb25zaXN0ZW50IHVzZSBvZiAgbGl0dGxlLWVuZGlhbiAgZm9yICBudW1iZXJzCisgICAgICAgYW5kICB0aGUgIG90aGVyd2lzZSBzZWxmLWRlc2NyaWJpbmcgZm9ybWF0LCBpdCBpcyBub3Qgd2lzZQorICAgICAgIHRvIGNvdW50IG9uIHBvcnRhYmlsaXR5IG9mIGJpbmFyeSB0ZXJtaW5mbyBlbnRyaWVzIGJldHdlZW4KKyAgICAgICBjb21tZXJjaWFsICBVTklYICB2ZXJzaW9ucy4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlcmUgYXJlCisgICAgICAgYXQgbGVhc3QgdGhyZWUgdmVyc2lvbnMgb2YgdGVybWluZm8gKHVuZGVyIEhQLVVYLCBBSVgsIGFuZAorICAgICAgIE9TRi8xKSAgd2hpY2ggIGRpdmVyZ2VkIGZyb20gU3lzdGVtIFYgdGVybWluZm8gYWZ0ZXIgU1ZyMSwKKyAgICAgICBhbmQgaGF2ZSBhZGRlZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzIHRvIHRoZSBzdHJpbmcgIHRhYmxlCisgICAgICAgdGhhdCAgKGluIHRoZSBiaW5hcnkgZm9ybWF0KSBjb2xsaWRlIHdpdGggU3lzdGVtIFYgYW5kIFhTSQorICAgICAgIEN1cnNlcyBleHRlbnNpb25zLiAgU2VlIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4gZm9yICBkZXRhaWxlZCAgZGlzY3VzLQorICAgICAgIHNpb24gb2YgdGVybWluZm8gc291cmNlIGNvbXBhdGliaWxpdHkgaXNzdWVzLgorCisKKzwvUFJFPgorPEgyPkVYQU1QTEU8L0gyPjxQUkU+CisgICAgICAgQXMgIGFuICBleGFtcGxlLCBoZXJlIGlzIGEgaGV4IGR1bXAgb2YgdGhlIGRlc2NyaXB0aW9uIGZvcgorICAgICAgIHRoZSBMZWFyLVNpZWdsZXIgQURNLTMsIGEgIHBvcHVsYXIgIHRob3VnaCAgcmF0aGVyICBzdHVwaWQKKyAgICAgICBlYXJseSB0ZXJtaW5hbDoKKworICAgICAgIGFkbTNhfGxzaSBhZG0zYSwKKyAgICAgICAgICAgICAgIGFtLAorICAgICAgICAgICAgICAgY29scyM4MCwgbGluZXMjMjQsCisgICAgICAgICAgICAgICBiZWw9XkcsIGNsZWFyPSAzMiQmbHQ7MSZndDssIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorICAgICAgICAgICAgICAgY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKyAgICAgICAgICAgICAgIGhvbWU9Xl4sIGluZD1eSiwKKworICAgICAgIDAwMDAgIDFhIDAxIDEwIDAwIDAyIDAwIDAzIDAwICA4MiAwMCAzMSAwMCA2MSA2NCA2ZCAzMyAgLi4uLi4uLi4gLi4xLmFkbTMKKyAgICAgICAwMDEwICA2MSA3YyA2YyA3MyA2OSAyMCA2MSA2NCAgNmQgMzMgNjEgMDAgMDAgMDEgNTAgMDAgIGF8bHNpIGFkIG0zYS4uLlAuCisgICAgICAgMDAyMCAgZmYgZmYgMTggMDAgZmYgZmYgMDAgMDAgIDAyIDAwIGZmIGZmIGZmIGZmIDA0IDAwICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwMzAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAwYSAwMCAyNSAwMCAyNyAwMCBmZiBmZiAgLi4uLi4uLi4gLi4lLicuLi4KKyAgICAgICAwMDQwICAyOSAwMCBmZiBmZiBmZiBmZiAyYiAwMCAgZmYgZmYgMmQgMDAgZmYgZmYgZmYgZmYgICkuLi4uLisuIC4uLS4uLi4uCisgICAgICAgMDA1MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwNjAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMDcwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDA4MCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwOTAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMGEwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDBiMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwYzAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMGQwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDBlMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAwZjAgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgLi4uLi4uLi4gLi4uLi4uLi4KKyAgICAgICAwMTAwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCisgICAgICAgMDExMCAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAuLi4uLi4uLiAuLi4uLi4uLgorICAgICAgIDAxMjAgIGZmIGZmIGZmIGZmIGZmIGZmIDJmIDAwICAwNyAwMCAwZCAwMCAxYSAyNCAzYyAzMSAgLi4uLi4uLy4gLi4uLi4kJmx0OzEKKyAgICAgICAwMTMwICAzZSAwMCAxYiAzZCAyNSA3MCAzMSAyNSAgN2IgMzMgMzIgN2QgMjUgMmIgMjUgNjMgICZndDsuLj0lcDElIHszMn0lKyVjCisgICAgICAgMDE0MCAgMjUgNzAgMzIgMjUgN2IgMzMgMzIgN2QgIDI1IDJiIDI1IDYzIDAwIDBhIDAwIDFlICAlcDIlezMyfSAlKyVjLi4uLgorICAgICAgIDAxNTAgIDAwIDA4IDAwIDBjIDAwIDBiIDAwIDBhICAwMCAgICAgICAgICAgICAgICAgICAgICAgLi4uLi4uLi4gLgorCisKKworPC9QUkU+Cis8SDI+TElNSVRTPC9IMj48UFJFPgorICAgICAgIFNvbWUgIGxpbWl0YXRpb25zOiAgdG90YWwgIGNvbXBpbGVkICBlbnRyaWVzIGNhbm5vdCBleGNlZWQKKyAgICAgICA0MDk2IGJ5dGVzLiAgVGhlIG5hbWUgZmllbGQgY2Fubm90IGV4Y2VlZCAxMjggYnl0ZXMuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mby8qLyogIGNvbXBpbGVkIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YQorICAgICAgIGJhc2UKKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uCisKKworPC9QUkU+Cis8SDI+QVVUSE9SUzwvSDI+PFBSRT4KKyAgICAgICBUaG9tYXMgRS4gRGlja2V5CisgICAgICAgZXh0ZW5kZWQgdGVybWluZm8gZm9ybWF0IGZvciBuY3Vyc2VzIDUuMAorICAgICAgIGhhc2hlZCBkYXRhYmFzZSBzdXBwb3J0IGZvciBuY3Vyc2VzIDUuNgorCisgICAgICAgRXJpYyBTLiBSYXltb25kCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtLjUuaHRtbCI+dGVybSg1KTwvQT48L1NUUk9ORz4KKzwvUFJFPgorPEhSPgorPEFERFJFU1M+CitNYW4oMSkgb3V0cHV0IGNvbnZlcnRlZCB3aXRoCis8YSBocmVmPSJodHRwOi8vd3d3Lm9hYy51Y2kuZWR1L2luZGl2L2Vob29kL21hbjJodG1sLmh0bWwiPm1hbjJodG1sPC9hPgorPC9BRERSRVNTPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL3Rlcm0uNy5odG1sIGIvbmN1cnNlcy01LjcvZG9jL2h0bWwvbWFuL3Rlcm0uNy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZWE2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdGVybS43Lmh0bWwKQEAgLTAsMCArMSwyNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTiI+Cis8IS0tIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogdGVybS43LHYgMS4xOCAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPnRlcm0gNzwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPnRlcm0gNzwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0idGVybS43Lmh0bWwiPnRlcm0oNyk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtLjcuaHRtbCI+dGVybSg3KTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICB0ZXJtIC0gY29udmVudGlvbnMgZm9yIG5hbWluZyB0ZXJtaW5hbCB0eXBlcworCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFRoZSAgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+IHNob3VsZCBub3JtYWxseSBjb250YWluIHRoZQorICAgICAgIHR5cGUgbmFtZSBvZiB0aGUgdGVybWluYWwsIGNvbnNvbGUgb3IgZGlzcGxheS1kZXZpY2UgIHR5cGUKKyAgICAgICB5b3UgIGFyZSAgdXNpbmcuICAgVGhpcyAgaW5mb3JtYXRpb24gIGlzICBjcml0aWNhbCBmb3IgYWxsCisgICAgICAgc2NyZWVuLW9yaWVudGVkICBwcm9ncmFtcywgIGluY2x1ZGluZyAgeW91ciAgIGVkaXRvciAgIGFuZAorICAgICAgIG1haWxlci4KKworICAgICAgIEEgIGRlZmF1bHQgIDxTVFJPTkc+VEVSTTwvU1RST05HPiAgdmFsdWUgd2lsbCBiZSBzZXQgb24gYSBwZXItbGluZSBiYXNpcyBieQorICAgICAgIGVpdGhlciA8U1RST05HPi9ldGMvaW5pdHRhYjwvU1RST05HPiAoTGludXggYW5kICBTeXN0ZW0tVi1saWtlICBVTklYZXMpICBvcgorICAgICAgIDxTVFJPTkc+L2V0Yy90dHlzPC9TVFJPTkc+ICAoQlNEICBVTklYZXMpLiAgVGhpcyB3aWxsIG5lYXJseSBhbHdheXMgc3VmZmljZQorICAgICAgIGZvciB3b3Jrc3RhdGlvbiBhbmQgbWljcm9jb21wdXRlciBjb25zb2xlcy4KKworICAgICAgIElmIHlvdSB1c2UgYSBkaWFsdXAgbGluZSwgdGhlIHR5cGUgb2YgZGV2aWNlICBhdHRhY2hlZCAgdG8KKyAgICAgICBpdCAgbWF5IHZhcnkuICBPbGRlciBVTklYIHN5c3RlbXMgcHJlLXNldCBhIHZlcnkgZHVtYiB0ZXItCisgICAgICAgbWluYWwgdHlwZSBsaWtlIGBkdW1iJyBvciBgZGlhbHVwJyBvbiBkaWFsdXAgbGluZXMuICBOZXdlcgorICAgICAgIG9uZXMgbWF5IHByZS1zZXQgYHZ0MTAwJywgcmVmbGVjdGluZyB0aGUgcHJldmFsZW5jZSBvZiBERUMKKyAgICAgICBWVDEwMC1jb21wYXRpYmxlIHRlcm1pbmFscyAgYW5kICBwZXJzb25hbC1jb21wdXRlciAgZW11bGEtCisgICAgICAgdG9ycy4KKworICAgICAgIE1vZGVybiAgdGVsbmV0cyAgcGFzcyAgeW91ciA8U1RST05HPlRFUk08L1NUUk9ORz4gZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbQorICAgICAgIHRoZSBsb2NhbCBzaWRlIHRvIHRoZSByZW1vdGUgb25lLiAgVGhlcmUgY2FuICBiZSAgcHJvYmxlbXMKKyAgICAgICBpZiAgdGhlICByZW1vdGUgdGVybWluZm8gb3IgdGVybWNhcCBlbnRyeSBmb3IgeW91ciB0eXBlIGlzCisgICAgICAgbm90IGNvbXBhdGlibGUgd2l0aCB5b3VycywgYnV0IHRoaXMgc2l0dWF0aW9uIGlzIHJhcmUgIGFuZAorICAgICAgIGNhbiAgYWxtb3N0ICBhbHdheXMgIGJlICBhdm9pZGVkICBieSAgZXhwbGljaXRseSBleHBvcnRpbmcKKyAgICAgICBgdnQxMDAnIChhc3N1bWluZyB5b3UgYXJlIGluIGZhY3QgdXNpbmcgIGEgIFZUMTAwLXN1cGVyc2V0CisgICAgICAgY29uc29sZSwgdGVybWluYWwsIG9yIHRlcm1pbmFsIGVtdWxhdG9yLikKKworICAgICAgIEluIGFueSBjYXNlLCB5b3UgYXJlIGZyZWUgdG8gb3ZlcnJpZGUgdGhlIHN5c3RlbSA8U1RST05HPlRFUk08L1NUUk9ORz4gc2V0LQorICAgICAgIHRpbmcgdG8geW91ciB0YXN0ZSBpbiB5b3VyICBzaGVsbCAgcHJvZmlsZS4gICBUaGUgIDxTVFJPTkc+PEEgSFJFRj0idHNldC4xLmh0bWwiPnRzZXQoMSk8L0E+PC9TVFJPTkc+CisgICAgICAgdXRpbGl0eSAgbWF5ICBiZSAgb2YgIGFzc2lzdGFuY2U7IHlvdSBjYW4gZ2l2ZSBpdCBhIHNldCBvZgorICAgICAgIHJ1bGVzIGZvciBkZWR1Y2luZyBvciByZXF1ZXN0aW5nIGEgdGVybWluYWwgdHlwZSBiYXNlZCAgb24KKyAgICAgICB0aGUgdHR5IGRldmljZSBhbmQgYmF1ZCByYXRlLgorCisgICAgICAgU2V0dGluZyB5b3VyIG93biA8U1RST05HPlRFUk08L1NUUk9ORz4gdmFsdWUgbWF5IGFsc28gYmUgdXNlZnVsIGlmIHlvdSBoYXZlCisgICAgICAgY3JlYXRlZCBhIGN1c3RvbSAgZW50cnkgIGluY29ycG9yYXRpbmcgIG9wdGlvbnMgIChzdWNoICBhcworICAgICAgIHZpc3VhbCAgYmVsbCAgb3IgcmV2ZXJzZS12aWRlbykgd2hpY2ggeW91IHdpc2ggdG8gb3ZlcnJpZGUKKyAgICAgICB0aGUgc3lzdGVtIGRlZmF1bHQgdHlwZSBmb3IgeW91ciBsaW5lLgorCisgICAgICAgVGVybWluYWwgdHlwZSBkZXNjcmlwdGlvbnMgYXJlIHN0b3JlZCBhcyBmaWxlcyBvZiBjYXBhYmlsLQorICAgICAgIGl0eSBkYXRhIHVuZGVybmVhdGggL3Vzci9zaGFyZS90ZXJtaW5mby4gIFRvIGJyb3dzZSBhIGxpc3QKKyAgICAgICBvZiBhbGwgdGVybWluYWwgbmFtZXMgcmVjb2duaXplZCBieSB0aGUgc3lzdGVtLCBkbworCisgICAgICAgICAgICB0b2UgfCBtb3JlCisKKyAgICAgICBmcm9tIHlvdXIgc2hlbGwuICBUaGVzZSBjYXBhYmlsaXR5IGZpbGVzIGFyZSBpbiAgYSAgYmluYXJ5CisgICAgICAgZm9ybWF0IG9wdGltaXplZCBmb3IgcmV0cmlldmFsIHNwZWVkICh1bmxpa2UgdGhlIG9sZCB0ZXh0LQorICAgICAgIGJhc2VkIDxTVFJPTkc+dGVybWNhcDwvU1RST05HPiBmb3JtYXQgdGhleSByZXBsYWNlKTsgdG8gZXhhbWluZSAgYW4gIGVudHJ5LAorICAgICAgIHlvdSAgbXVzdCAgdXNlIHRoZSA8U1RST05HPjxBIEhSRUY9ImluZm9jbXAuMW0uaHRtbCI+aW5mb2NtcCgxbSk8L0E+PC9TVFJPTkc+IGNvbW1hbmQuICBJbnZva2UgaXQgYXMgZm9sLQorICAgICAgIGxvd3M6CisKKyAgICAgICAgICAgIGluZm9jbXAgPEVNPmVudHJ5LW5hbWU8L0VNPgorCisgICAgICAgd2hlcmUgPEVNPmVudHJ5LW5hbWU8L0VNPiBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSB5b3Ugd2lzaCB0byBleGFtLQorICAgICAgIGluZSAgKGFuZCB0aGUgbmFtZSBvZiBpdHMgY2FwYWJpbGl0eSBmaWxlIHRoZSBzdWJkaXJlY3RvcnkKKyAgICAgICBvZiAvdXNyL3NoYXJlL3Rlcm1pbmZvIG5hbWVkIGZvciBpdHMgZmlyc3QgbGV0dGVyKS4gICBUaGlzCisgICAgICAgY29tbWFuZCAgZHVtcHMgIGEgIGNhcGFiaWxpdHkgIGZpbGUgIGluICB0aGUgIHRleHQgIGZvcm1hdAorICAgICAgIGRlc2NyaWJlZCBieSA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+LgorCisgICAgICAgVGhlIGZpcnN0IGxpbmUgb2YgIGEgIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4gIGRlc2NyaXB0aW9uICBnaXZlcyAgdGhlCisgICAgICAgbmFtZXMgYnkgd2hpY2ggdGVybWluZm8ga25vd3MgYSB0ZXJtaW5hbCwgc2VwYXJhdGVkIGJ5IGB8JworICAgICAgIChwaXBlLWJhcikgY2hhcmFjdGVycyB3aXRoIHRoZSBsYXN0IG5hbWUgZmllbGQgIHRlcm1pbmF0ZWQKKyAgICAgICBieSAgYSAgY29tbWEuICAgVGhlIGZpcnN0IG5hbWUgZmllbGQgaXMgdGhlIHR5cGUncyA8RU0+cHJpbWFyeTwvRU0+CisgICAgICAgPEVNPm5hbWU8L0VNPiwgYW5kIGlzIHRoZSBvbmUgdG8gdXNlIHdoZW4gc2V0dGluZyA8U1RST05HPlRFUk08L1NUUk9ORz4uICAgVGhlICBsYXN0CisgICAgICAgbmFtZSAgZmllbGQgIChpZiAgZGlzdGluY3QgIGZyb20gIHRoZSBmaXJzdCkgaXMgYWN0dWFsbHkgYQorICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXJtaW5hbCB0eXBlIChpdCBtYXkgIGNvbnRhaW4gIGJsYW5rczsKKyAgICAgICB0aGUgb3RoZXJzIG11c3QgYmUgc2luZ2xlIHdvcmRzKS4gIE5hbWUgZmllbGRzIGJldHdlZW4gdGhlCisgICAgICAgZmlyc3QgYW5kIGxhc3QgKGlmIHByZXNlbnQpIGFyZSBhbGlhc2VzIGZvciB0aGUgIHRlcm1pbmFsLAorICAgICAgIHVzdWFsbHkgaGlzdG9yaWNhbCBuYW1lcyByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4KKworICAgICAgIFRoZXJlIGFyZSBzb21lIGNvbnZlbnRpb25zIGZvciBob3cgdG8gY2hvb3NlIHRlcm1pbmFsIHByaS0KKyAgICAgICBtYXJ5IG5hbWVzIHRoYXQgaGVscCBrZWVwICB0aGVtICBpbmZvcm1hdGl2ZSAgYW5kICB1bmlxdWUuCisgICAgICAgSGVyZSBpcyBhIHN0ZXAtYnktc3RlcCBndWlkZSB0byBuYW1pbmcgdGVybWluYWxzIHRoYXQgYWxzbworICAgICAgIGV4cGxhaW5zIGhvdyB0byBwYXJzZSB0aGVtOgorCisgICAgICAgRmlyc3QsIGNob29zZSBhIHJvb3QgbmFtZS4gIFRoZSByb290ICB3aWxsICBjb25zaXN0ICBvZiAgYQorICAgICAgIGxvd2VyLWNhc2UgIGxldHRlciBmb2xsb3dlZCBieSB1cCB0byBzZXZlbiBsb3dlci1jYXNlIGxldC0KKyAgICAgICB0ZXJzIG9yIGRpZ2l0cy4gIFlvdSBuZWVkIHRvIGF2b2lkIHVzaW5nIHB1bmN0dWF0aW9uIGNoYXItCisgICAgICAgYWN0ZXJzICBpbiAgcm9vdCAgbmFtZXMsICBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYW5kIGludGVyLQorICAgICAgIHByZXRlZCBhcyBmaWxlbmFtZXMgYW5kIHNoZWxsIG1ldGEtY2hhcmFjdGVycyAoc3VjaCBhcyAgISwKKyAgICAgICAkLCAgKiwgPywgZXRjLikgZW1iZWRkZWQgaW4gdGhlbSBtYXkgY2F1c2Ugb2RkIGFuZCB1bmhlbHAtCisgICAgICAgZnVsIGJlaGF2aW9yLiAgVGhlIHNsYXNoICgvKSwgb3IgYW55IG90aGVyIGNoYXJhY3RlciAgdGhhdAorICAgICAgIG1heSAgYmUgIGludGVycHJldGVkIGJ5IGFueW9uZSdzIGZpbGUgc3lzdGVtIChcLCAkLCBbLCBdKSwKKyAgICAgICBpcyBlc3BlY2lhbGx5IGRhbmdlcm91cyAodGVybWluZm8gaXMgcGxhdGZvcm0taW5kZXBlbmRlbnQsCisgICAgICAgYW5kICBjaG9vc2luZyAgbmFtZXMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMgY291bGQgc29tZWRheQorICAgICAgIG1ha2UgbGlmZSBkaWZmaWN1bHQgZm9yIHVzZXJzIG9mIGEgZnV0dXJlIHBvcnQpLiAgVGhlICBkb3QKKyAgICAgICAoLikgIGNoYXJhY3RlciAgaXMgIHJlbGF0aXZlbHkgc2FmZSBhcyBsb25nIGFzIHRoZXJlIGlzIGF0CisgICAgICAgbW9zdCBvbmUgcGVyIHJvb3QgbmFtZTsgc29tZSBoaXN0b3JpY2FsIHRlcm1pbmZvIG5hbWVzIHVzZQorICAgICAgIGl0LgorCisgICAgICAgVGhlICByb290ICBuYW1lIGZvciBhIHRlcm1pbmFsIG9yIHdvcmtzdGF0aW9uIGNvbnNvbGUgdHlwZQorICAgICAgIHNob3VsZCBhbG1vc3QgYWx3YXlzIGJlZ2luIHdpdGggYSB2ZW5kb3IgcHJlZml4ICAoc3VjaCAgYXMKKyAgICAgICA8U1RST05HPmhwPC9TVFJPTkc+ICBmb3IgSGV3bGV0dC1QYWNrYXJkLCA8U1RST05HPnd5PC9TVFJPTkc+IGZvciBXeXNlLCBvciA8U1RST05HPmF0dDwvU1RST05HPiBmb3IgQVQmYW1wO1QgdGVyLQorICAgICAgIG1pbmFscyksIG9yIGEgY29tbW9uIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGxpbmUgKDxTVFJPTkc+dnQ8L1NUUk9ORz4gZm9yIHRoZQorICAgICAgIFZUICBzZXJpZXMgb2YgdGVybWluYWxzIGZyb20gREVDLCBvciA8U1RST05HPnN1bjwvU1RST05HPiBmb3IgU3VuIE1pY3Jvc3lzLQorICAgICAgIHRlbXMgd29ya3N0YXRpb24gY29uc29sZXMsIG9yIDxTVFJPTkc+cmVnZW50PC9TVFJPTkc+IGZvciB0aGUgIEFERFMgIFJlZ2VudAorICAgICAgIHNlcmllcy4gICBZb3UgIGNhbiBsaXN0IHRoZSB0ZXJtaW5mbyB0cmVlIHRvIHNlZSB3aGF0IHByZS0KKyAgICAgICBmaXhlcyBhcmUgYWxyZWFkeSBpbiBjb21tb24gdXNlLiAgIFRoZSAgcm9vdCAgbmFtZSAgcHJlZml4CisgICAgICAgc2hvdWxkICBiZSAgZm9sbG93ZWQgIHdoZW4gIGFwcHJvcHJpYXRlIGJ5IGEgbW9kZWwgbnVtYmVyOworICAgICAgIHRodXMgPFNUUk9ORz52dDEwMDwvU1RST05HPiwgPFNUUk9ORz5ocDI2MjE8L1NUUk9ORz4sIDxTVFJPTkc+d3k1MDwvU1RST05HPi4KKworICAgICAgIFRoZSByb290IG5hbWUgZm9yIGEgUEMtVW5peCBjb25zb2xlIHR5cGUgc2hvdWxkIGJlIHRoZSAgT1MKKyAgICAgICBuYW1lLCAgaS5lLiAgPFNUUk9ORz5saW51eDwvU1RST05HPiwgPFNUUk9ORz5ic2RvczwvU1RST05HPiwgPFNUUk9ORz5mcmVlYnNkPC9TVFJPTkc+LCA8U1RST05HPm5ldGJzZDwvU1RST05HPi4gIEl0IHNob3VsZCA8RU0+bm90PC9FTT4KKyAgICAgICBiZSA8U1RST05HPmNvbnNvbGU8L1NUUk9ORz4gb3IgYW55IG90aGVyIGdlbmVyaWMgdGhhdCBtaWdodCBjYXVzZSBjb25mdXNpb24KKyAgICAgICBpbiAgYSAgbXVsdGktcGxhdGZvcm0gZW52aXJvbm1lbnQhICBJZiBhIG1vZGVsIG51bWJlciBmb2wtCisgICAgICAgbG93cywgaXQgc2hvdWxkIGluZGljYXRlIGVpdGhlciB0aGUgT1MgIHJlbGVhc2UgIGxldmVsICBvcgorICAgICAgIHRoZSBjb25zb2xlIGRyaXZlciByZWxlYXNlIGxldmVsLgorCisgICAgICAgVGhlICByb290ICBuYW1lICBmb3IgYSB0ZXJtaW5hbCBlbXVsYXRvciAoYXNzdW1pbmcgaXQgZG9lcworICAgICAgIG5vdCBmaXQgb25lIG9mIHRoZSBzdGFuZGFyZCBBTlNJIG9yIHZ0MTAwIHR5cGVzKSBzaG91bGQgYmUKKyAgICAgICB0aGUgcHJvZ3JhbSBuYW1lIG9yIGEgcmVhZGlseSByZWNvZ25pemFibGUgYWJicmV2aWF0aW9uIG9mCisgICAgICAgaXQgKGkuZS4gPFNUUk9ORz52ZXJzYXRlcm08L1NUUk9ORz4sIDxTVFJPTkc+Y3RybTwvU1RST05HPikuCisKKyAgICAgICBGb2xsb3dpbmcgdGhlIHJvb3QgbmFtZSwgeW91IG1heSBhZGQgYW55IHJlYXNvbmFibGUgbnVtYmVyCisgICAgICAgb2YgaHlwaGVuLXNlcGFyYXRlZCBmZWF0dXJlIHN1ZmZpeGVzLgorCisgICAgICAgMnAgICBIYXMgdHdvIHBhZ2VzIG9mIG1lbW9yeS4gIExpa2V3aXNlIDRwLCA4cCwgZXRjLgorCisgICAgICAgbWMgICBNYWdpYy1jb29raWUuICAgU29tZSAgdGVybWluYWxzIChub3RhYmx5IG9sZGVyIFd5c2VzKQorICAgICAgICAgICAgY2FuIG9ubHkgc3VwcG9ydCBvbmUgYXR0cmlidXRlICB3aXRob3V0ICBtYWdpYy1jb29raWUKKyAgICAgICAgICAgIGxvc3NhZ2UuICAgVGhlaXIgIGJhc2UgIGVudHJ5ICBpcyB1c3VhbGx5IHBhaXJlZCB3aXRoCisgICAgICAgICAgICBhbm90aGVyIHRoYXQgaGFzIHRoaXMgc3VmZml4IGFuZCB1c2VzICBtYWdpYyAgY29va2llcworICAgICAgICAgICAgdG8gc3VwcG9ydCBtdWx0aXBsZSBhdHRyaWJ1dGVzLgorCisgICAgICAgLWFtICBFbmFibGUgYXV0by1tYXJnaW4gKHJpZ2h0LW1hcmdpbiB3cmFwYXJvdW5kKS4KKworICAgICAgIC1tICAgTW9ubyBtb2RlIC0gc3VwcHJlc3MgY29sb3Igc3VwcG9ydC4KKworICAgICAgIC1uYSAgTm8gIGFycm93IGtleXMgLSB0ZXJtY2FwIGlnbm9yZXMgYXJyb3cga2V5cyB3aGljaCBhcmUKKyAgICAgICAgICAgIGFjdHVhbGx5IHRoZXJlIG9uIHRoZSB0ZXJtaW5hbCwgc28gdGhlIHVzZXIgIGNhbiAgdXNlCisgICAgICAgICAgICB0aGUgYXJyb3cga2V5cyBsb2NhbGx5LgorCisgICAgICAgLW5hbSBObyBhdXRvLW1hcmdpbiAtIHN1cHByZXNzIGFtIGNhcGFiaWxpdHkuCisKKyAgICAgICAtbmwgIE5vIGxhYmVscyAtIHN1cHByZXNzIHNvZnQgbGFiZWxzLgorCisgICAgICAgLW5zbCBObyBzdGF0dXMgbGluZSAtIHN1cHByZXNzIHN0YXR1cyBsaW5lLgorCisgICAgICAgLXBwICBIYXMgYSBwcmludGVyIHBvcnQgd2hpY2ggaXMgdXNlZC4KKworICAgICAgIC1ydiAgVGVybWluYWwgaW4gcmV2ZXJzZSB2aWRlbyBtb2RlIChibGFjayBvbiB3aGl0ZSkuCisKKyAgICAgICAtcyAgIEVuYWJsZSBzdGF0dXMgbGluZS4KKworICAgICAgIC12YiAgVXNlIHZpc2libGUgYmVsbCAoZmxhc2gpIHJhdGhlciB0aGFuIGJlZXAuCisKKyAgICAgICAtdyAgIFdpZGU7IHRlcm1pbmFsIGlzIGluIDEzMiBjb2x1bW4gbW9kZS4KKworICAgICAgIENvbnZlbnRpb25hbGx5LCAgIGlmICB5b3VyICB0ZXJtaW5hbCAgdHlwZSAgaXMgIGEgIHZhcmlhbnQKKyAgICAgICBpbnRlbmRlZCB0byBzcGVjaWZ5IGEgbGluZSBoZWlnaHQsIHRoYXQgc3VmZml4ICBzaG91bGQgIGdvCisgICAgICAgZmlyc3QuICBTbywgZm9yIGEgaHlwb3RoZXRpY2FsIEZ1QmFyQ28gbW9kZWwgMjMxNyB0ZXJtaW5hbAorICAgICAgIGluIDMwLWxpbmUgbW9kZSB3aXRoIHJldmVyc2UgdmlkZW8sICBiZXN0ICBmb3JtICB3b3VsZCAgYmUKKyAgICAgICA8U1RST05HPmZ1YmFyLTMwLXJ2PC9TVFJPTkc+IChyYXRoZXIgdGhhbiwgc2F5LCBgZnViYXItcnYtMzAnKS4KKworICAgICAgIFRlcm1pbmFsIHR5cGVzIHRoYXQgYXJlIHdyaXR0ZW4gbm90IGFzIHN0YW5kYWxvbmUgZW50cmllcywKKyAgICAgICBidXQgcmF0aGVyIGFzIGNvbXBvbmVudHMgdG8gYmUgcGx1Z2dlZCBpbnRvIG90aGVyICBlbnRyaWVzCisgICAgICAgdmlhICA8U1RST05HPnVzZTwvU1RST05HPiBjYXBhYmlsaXRpZXMsIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHVzaW5nIGVtYmVkZGVkCisgICAgICAgcGx1cyBzaWducyByYXRoZXIgdGhhbiBkYXNoZXMuCisKKyAgICAgICBDb21tYW5kcyB3aGljaCB1c2UgYSAgdGVybWluYWwgIHR5cGUgIHRvICBjb250cm9sICBkaXNwbGF5CisgICAgICAgb2Z0ZW4gIGFjY2VwdCAgYSAgLVQgIG9wdGlvbiAgdGhhdCBhY2NlcHRzIGEgdGVybWluYWwgbmFtZQorICAgICAgIGFyZ3VtZW50LiAgU3VjaCBwcm9ncmFtcyBzaG91bGQgIGZhbGwgIGJhY2sgIG9uICB0aGUgIDxTVFJPTkc+VEVSTTwvU1RST05HPgorICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gbm8gLVQgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworCis8L1BSRT4KKzxIMj5QT1JUQUJJTElUWTwvSDI+PFBSRT4KKyAgICAgICBGb3IgIG1heGltdW0gIGNvbXBhdGliaWxpdHkgIHdpdGggIG9sZGVyICBTeXN0ZW0gViBVTklYZXMsCisgICAgICAgbmFtZXMgYW5kIGFsaWFzZXMgc2hvdWxkIGJlIHVuaXF1ZSAgd2l0aGluICB0aGUgIGZpcnN0ICAxNAorICAgICAgIGNoYXJhY3RlcnMuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mby8/LyoKKyAgICAgICAgICAgIGNvbXBpbGVkIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YSBiYXNlCisKKyAgICAgICAvZXRjL2luaXR0YWIKKyAgICAgICAgICAgIHR0eSBsaW5lIGluaXRpYWxpemF0aW9uIChBVCZhbXA7VC1saWtlIFVOSVhlcykKKworICAgICAgIC9ldGMvdHR5cworICAgICAgICAgICAgdHR5IGxpbmUgaW5pdGlhbGl6YXRpb24gKEJTRC1saWtlIFVOSVhlcykKKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybS41Lmh0bWwiPnRlcm0oNSk8L0E+PC9TVFJPTkc+LgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idGVybS43Lmh0bWwiPnRlcm0oNyk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi90ZXJtaW5mby41Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdGVybWluZm8uNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyODRkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdGVybWluZm8uNS5odG1sCkBAIC0wLDAgKzEsMjM3NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqIERPIE5PVCBFRElUIFRISVMgRklMRSBCWSBIQU5EIQorICAqIEl0IGlzIGdlbmVyYXRlZCBmcm9tIHRlcm1pbmZvLmhlYWQsIENhcHMsIGFuZCB0ZXJtaW5mby50YWlsLgorICAqIE5vdGU6IHRoaXMgbXVzdCBiZSBydW4gdGhyb3VnaCB0YmwgYmVmb3JlIG5yb2ZmLgorICAqIFRoZSBtYWdpYyBjb29raWUgb24gdGhlIGZpcnN0IGxpbmUgdHJpZ2dlcnMgdGhpcyB1bmRlciBzb21lIG1hbiBwcm9ncmFtcy4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBASWQ6IHRlcm1pbmZvLmhlYWQsdiAxLjE2IDIwMDcvMDMvMDQgMDA6MDk6NDYgdG9tIEV4cCBACisgICogSGVhZCBvZiB0ZXJtaW5mbyBtYW4gcGFnZSBlbmRzIGhlcmUKKyAgKiBASWQ6IHRlcm1pbmZvLnRhaWwsdiAxLjQ5IDIwMDgvMDIvMTYgMjA6NTc6NDMgdG9tIEV4cCBACisgICogQmVnaW5uaW5nIG9mIHRlcm1pbmZvLnRhaWwgZmlsZQorICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG5jdXJzZXMuCisgICogU2VlICJ0ZXJtaW5mby5oZWFkIiBmb3IgY29weXJpZ2h0LgorICAqLmluIC0yCisgICouaW4gKzIKKyAgKi5pbiAtMgorICAqLmluICsyCisgICouVEgKKy0tPgorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT50ZXJtaW5mbyA1ICAgRmlsZSBGb3JtYXRzPC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+dGVybWluZm8gNSAgIEZpbGUgRm9ybWF0czwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgRmlsZSBGb3JtYXRzICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIHRlcm1pbmZvIC0gdGVybWluYWwgY2FwYWJpbGl0eSBkYXRhIGJhc2UKKworCis8L1BSRT4KKzxIMj5TWU5PUFNJUzwvSDI+PFBSRT4KKyAgICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvLyovKgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIDxFTT5UZXJtaW5mbzwvRU0+ICBpcyAgYSAgZGF0YSAgYmFzZSAgZGVzY3JpYmluZyB0ZXJtaW5hbHMsIHVzZWQgYnkKKyAgICAgICBzY3JlZW4tb3JpZW50ZWQgcHJvZ3JhbXMgIHN1Y2ggIGFzICA8U1RST05HPjxBIEhSRUY9Im52aS4xLmh0bWwiPm52aSgxKTwvQT48L1NUUk9ORz4sICA8U1RST05HPjxBIEhSRUY9InJvZ3VlLjEuaHRtbCI+cm9ndWUoMSk8L0E+PC9TVFJPTkc+ICBhbmQKKyAgICAgICBsaWJyYXJpZXMgIHN1Y2ggIGFzIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5jdXJzZXMoM3gpPC9BPjwvU1RST05HPi4gIDxFTT5UZXJtaW5mbzwvRU0+IGRlc2NyaWJlcyB0ZXJtaS0KKyAgICAgICBuYWxzIGJ5IGdpdmluZyBhIHNldCBvZiBjYXBhYmlsaXRpZXMgd2hpY2ggdGhleSAgaGF2ZSwgIGJ5CisgICAgICAgc3BlY2lmeWluZyBob3cgdG8gcGVyZm9ybSBzY3JlZW4gb3BlcmF0aW9ucywgYW5kIGJ5IHNwZWNpLQorICAgICAgIGZ5aW5nIHBhZGRpbmcgcmVxdWlyZW1lbnRzIGFuZCAgaW5pdGlhbGl6YXRpb24gIHNlcXVlbmNlcy4KKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworICAgICAgIEVudHJpZXMgaW4gPEVNPnRlcm1pbmZvPC9FTT4gY29uc2lzdCBvZiBhIHNlcXVlbmNlIG9mIGAsJyBzZXBhcmF0ZWQKKyAgICAgICBmaWVsZHMgKGVtYmVkZGVkIGNvbW1hcyBtYXkgYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoIG9yCisgICAgICAgbm90YXRlZCAgYXMgXDA1NCkuICBXaGl0ZSBzcGFjZSBhZnRlciB0aGUgYCwnIHNlcGFyYXRvciBpcworICAgICAgIGlnbm9yZWQuICBUaGUgZmlyc3QgZW50cnkgIGZvciAgZWFjaCAgdGVybWluYWwgIGdpdmVzICB0aGUKKyAgICAgICBuYW1lcyAgd2hpY2ggIGFyZSBrbm93biBmb3IgdGhlIHRlcm1pbmFsLCBzZXBhcmF0ZWQgYnkgYHwnCisgICAgICAgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCAgbmFtZSAgZ2l2ZW4gIGlzICB0aGUgIG1vc3QgIGNvbW1vbgorICAgICAgIGFiYnJldmlhdGlvbiAgZm9yIHRoZSB0ZXJtaW5hbCwgdGhlIGxhc3QgbmFtZSBnaXZlbiBzaG91bGQKKyAgICAgICBiZSBhIGxvbmcgbmFtZSBmdWxseSBpZGVudGlmeWluZyAgdGhlICB0ZXJtaW5hbCwgIGFuZCAgYWxsCisgICAgICAgb3RoZXJzICBhcmUgIHVuZGVyc3Rvb2QgYXMgc3lub255bXMgZm9yIHRoZSB0ZXJtaW5hbCBuYW1lLgorICAgICAgIEFsbCBuYW1lcyBidXQgdGhlIGxhc3Qgc2hvdWxkIGJlIGluIGxvd2VyIGNhc2UgYW5kIGNvbnRhaW4KKyAgICAgICBubyAgYmxhbmtzOyAgdGhlIGxhc3QgbmFtZSBtYXkgd2VsbCBjb250YWluIHVwcGVyIGNhc2UgYW5kCisgICAgICAgYmxhbmtzIGZvciByZWFkYWJpbGl0eS4KKworICAgICAgIExpbmVzIGJlZ2lubmluZyB3aXRoIGEgYCMnIGluIHRoZSBmaXJzdCBjb2x1bW4gYXJlIHRyZWF0ZWQKKyAgICAgICBhcyAgY29tbWVudHMuICBXaGlsZSBjb21tZW50IGxpbmVzIGFyZSBsZWdhbCBhdCBhbnkgcG9pbnQsCisgICAgICAgdGhlIG91dHB1dCBvZiA8U1RST05HPmNhcHRvaW5mbzwvU1RST05HPiBhbmQgPFNUUk9ORz5pbmZvdG9jYXA8L1NUUk9ORz4gIChhbGlhc2VzICBmb3IgIDxTVFJPTkc+dGljPC9TVFJPTkc+KQorICAgICAgIHdpbGwgbW92ZSBjb21tZW50cyBzbyB0aGV5IG9jY3VyIG9ubHkgYmV0d2VlbiBlbnRyaWVzLgorCisgICAgICAgTmV3bGluZXMgIGFuZCAgbGVhZGluZyAgdGFicyAgbWF5ICBiZSAgdXNlZCBmb3IgZm9ybWF0dGluZworICAgICAgIGVudHJpZXMgZm9yIHJlYWRhYmlsaXR5LiAgVGhlc2UgYXJlICByZW1vdmVkICBmcm9tICBwYXJzZWQKKyAgICAgICBlbnRyaWVzLiAgIFRoZSAgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IDxTVFJPTkc+LWY8L1NUUk9ORz4gb3B0aW9uIHJlbGllcyBvbiB0aGlzIHRvIGZvcm1hdAorICAgICAgIGlmLXRoZW4tZWxzZSBleHByZXNzaW9uczogdGhlIHJlc3VsdCBjYW4gYmUgcmVhZCBieSA8U1RST05HPnRpYzwvU1RST05HPi4KKworICAgICAgIFRlcm1pbmFsIG5hbWVzIChleGNlcHQgZm9yIHRoZSBsYXN0LCB2ZXJib3NlIGVudHJ5KSBzaG91bGQKKyAgICAgICBiZSBjaG9zZW4gdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9ucy4gIFRoZSBwYXJ0aWN1bGFyCisgICAgICAgcGllY2Ugb2YgaGFyZHdhcmUgbWFraW5nIHVwIHRoZSAgdGVybWluYWwgIHNob3VsZCAgaGF2ZSAgYQorICAgICAgIHJvb3QgIG5hbWUsIHRodXMgYGBocDI2MjEnJy4gIFRoaXMgbmFtZSBzaG91bGQgbm90IGNvbnRhaW4KKyAgICAgICBoeXBoZW5zLiAgTW9kZXMgdGhhdCB0aGUgaGFyZHdhcmUgY2FuIGJlIGluLCBvciB1c2VyIHByZWYtCisgICAgICAgZXJlbmNlcywgIHNob3VsZCAgYmUgaW5kaWNhdGVkIGJ5IGFwcGVuZGluZyBhIGh5cGhlbiBhbmQgYQorICAgICAgIG1vZGUgc3VmZml4LiAgVGh1cywgYSB2dDEwMCBpbiAxMzIgY29sdW1uICBtb2RlICB3b3VsZCAgYmUKKyAgICAgICB2dDEwMC13LiAgVGhlIGZvbGxvd2luZyBzdWZmaXhlcyBzaG91bGQgYmUgdXNlZCB3aGVyZSBwb3MtCisgICAgICAgc2libGU6CisKKworICAgICAgPFNUUk9ORz5TdWZmaXg8L1NUUk9ORz4gICAgICAgICAgICAgICAgICA8U1RST05HPk1lYW5pbmc8L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgPFNUUk9ORz5FeGFtcGxlPC9TVFJPTkc+CisgICAgICAtPEVNPm5uPC9FTT4gICAgICBOdW1iZXIgb2YgbGluZXMgb24gdGhlIHNjcmVlbiAgICAgICAgICAgIGFhYS02MAorICAgICAgLTxFTT5uPC9FTT5wICAgICAgTnVtYmVyIG9mIHBhZ2VzIG9mIG1lbW9yeSAgICAgICAgICAgICAgICBjMTAwLTRwCisgICAgICAtYW0gICAgICBXaXRoIGF1dG9tYXJnaW5zICh1c3VhbGx5IHRoZSBkZWZhdWx0KSAgIHZ0MTAwLWFtCisgICAgICAtbSAgICAgICBNb25vIG1vZGU7IHN1cHByZXNzIGNvbG9yICAgICAgICAgICAgICAgIGFuc2ktbQorICAgICAgLW1jICAgICAgTWFnaWMgY29va2llOyBzcGFjZXMgd2hlbiBoaWdobGlnaHRpbmcgICB3eTMwLW1jCisgICAgICAtbmEgICAgICBObyBhcnJvdyBrZXlzIChsZWF2ZSB0aGVtIGluIGxvY2FsKSAgICAgIGMxMDAtbmEKKyAgICAgIC1uYW0gICAgIFdpdGhvdXQgYXV0b21hdGljIG1hcmdpbnMgICAgICAgICAgICAgICAgdnQxMDAtbmFtCisgICAgICAtbmwgICAgICBObyBzdGF0dXMgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dDQ0MTUtbmwKKyAgICAgIC1ucyAgICAgIE5vIHN0YXR1cyBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgaHAyNjI2LW5zCisgICAgICAtcnYgICAgICBSZXZlcnNlIHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxMDAtcnYKKyAgICAgIC1zICAgICAgIEVuYWJsZSBzdGF0dXMgbGluZSAgICAgICAgICAgICAgICAgICAgICAgdnQxMDAtcworCisgICAgICAtdmIgICAgICBVc2UgdmlzaWJsZSBiZWxsIGluc3RlYWQgb2YgYmVlcCAgICAgICAgIHd5MzcwLXZiCisgICAgICAtdyAgICAgICBXaWRlIG1vZGUgKCZndDsgODAgY29sdW1ucywgdXN1YWxseSAxMzIpICAgIHZ0MTAwLXcKKworICAgICAgIEZvciBtb3JlIG9uIHRlcm1pbmFsIG5hbWluZyBjb252ZW50aW9ucywgc2VlICB0aGUgIDxTVFJPTkc+dGVybSg3KTwvU1RST05HPgorICAgICAgIG1hbnVhbCBwYWdlLgorCisgICA8U1RST05HPkNhcGFiaWxpdGllczwvU1RST05HPgorICAgICAgIFRoZSAgZm9sbG93aW5nICBpcyAgYSAgY29tcGxldGUgIHRhYmxlIG9mIHRoZSBjYXBhYmlsaXRpZXMKKyAgICAgICBpbmNsdWRlZCBpbiBhIHRlcm1pbmZvIGRlc2NyaXB0aW9uIGJsb2NrIGFuZCBhdmFpbGFibGUgIHRvCisgICAgICAgdGVybWluZm8tdXNpbmcgY29kZS4gIEluIGVhY2ggbGluZSBvZiB0aGUgdGFibGUsCisKKyAgICAgICBUaGUgIDxTVFJPTkc+dmFyaWFibGU8L1NUUk9ORz4gIGlzIHRoZSBuYW1lIGJ5IHdoaWNoIHRoZSBwcm9ncmFtbWVyIChhdCB0aGUKKyAgICAgICB0ZXJtaW5mbyBsZXZlbCkgYWNjZXNzZXMgdGhlIGNhcGFiaWxpdHkuCisKKyAgICAgICBUaGUgPFNUUk9ORz5jYXBuYW1lPC9TVFJPTkc+IGlzIHRoZSBzaG9ydCBuYW1lIHVzZWQgIGluICB0aGUgIHRleHQgIG9mICB0aGUKKyAgICAgICBkYXRhYmFzZSwgIGFuZCAgaXMgdXNlZCBieSBhIHBlcnNvbiB1cGRhdGluZyB0aGUgZGF0YWJhc2UuCisgICAgICAgV2hlbmV2ZXIgcG9zc2libGUsIGNhcG5hbWVzIGFyZSBjaG9zZW4gdG8gYmUgdGhlICBzYW1lICBhcworICAgICAgIG9yIHNpbWlsYXIgdG8gdGhlIEFOU0kgWDMuNjQtMTk3OSBzdGFuZGFyZCAobm93IHN1cGVyc2VkZWQKKyAgICAgICBieSBFQ01BLTQ4LCB3aGljaCB1c2VzIGlkZW50aWNhbCBvciB2ZXJ5ICBzaW1pbGFyICBuYW1lcykuCisgICAgICAgU2VtYW50aWNzIGFyZSBhbHNvIGludGVuZGVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSBzcGVjaWZpLQorICAgICAgIGNhdGlvbi4KKworICAgICAgIFRoZSB0ZXJtY2FwIGNvZGUgaXMgdGhlIG9sZCA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gY2FwYWJpbGl0eSBuYW1lICAoc29tZQorICAgICAgIGNhcGFiaWxpdGllcyBhcmUgbmV3LCBhbmQgaGF2ZSBuYW1lcyB3aGljaCB0ZXJtY2FwIGRpZCBub3QKKyAgICAgICBvcmlnaW5hdGUpLgorCisgICAgICAgQ2FwYWJpbGl0eSBuYW1lcyBoYXZlIG5vIGhhcmQgbGVuZ3RoIGxpbWl0LCBidXQgYW4gIGluZm9yLQorICAgICAgIG1hbCAgbGltaXQgIG9mICA1IGNoYXJhY3RlcnMgaGFzIGJlZW4gYWRvcHRlZCB0byBrZWVwIHRoZW0KKyAgICAgICBzaG9ydCBhbmQgdG8gYWxsb3cgdGhlIHRhYnMgaW4gdGhlICBzb3VyY2UgIGZpbGUgIDxTVFJPTkc+Q2FwczwvU1RST05HPiAgdG8KKyAgICAgICBsaW5lIHVwIG5pY2VseS4KKworICAgICAgIEZpbmFsbHksICB0aGUgIGRlc2NyaXB0aW9uICBmaWVsZCAgYXR0ZW1wdHMgIHRvIGNvbnZleSB0aGUKKyAgICAgICBzZW1hbnRpY3Mgb2YgdGhlIGNhcGFiaWxpdHkuICBZb3UgbWF5IGZpbmQgc29tZSAgY29kZXMgIGluCisgICAgICAgdGhlIGRlc2NyaXB0aW9uIGZpZWxkOgorCisgICAgICAgKFApICAgIGluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IGJlIHNwZWNpZmllZAorCisgICAgICAgI1sxLTldIGluICB0aGUgZGVzY3JpcHRpb24gZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmluZworICAgICAgICAgICAgICBpcyBwYXNzZWQgdGhyb3VnaCB0cGFybSB3aXRoIHBhcm1zIGFzIGdpdmVuICgjPEVNPmk8L0VNPikuCisKKyAgICAgICAoUCopICAgaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgdmFyeSAgaW4gIHByb3BvcnRpb24gIHRvCisgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgbGluZXMgYWZmZWN0ZWQKKworICAgICAgICgjPEVNPmk8L0VNPikgICBpbmRpY2F0ZXMgdGhlIDxFTT5pPC9FTT50aCBwYXJhbWV0ZXIuCisKKworICAgICAgIFRoZXNlIGFyZSB0aGUgYm9vbGVhbiBjYXBhYmlsaXRpZXM6CisKKworICAgICAgICAgICAgICAgPFNUUk9ORz5WYXJpYWJsZTwvU1RST05HPiAgICAgICAgICA8U1RST05HPkNhcC08L1NUUk9ORz4gIDxTVFJPTkc+VENhcDwvU1RST05HPiAgICAgIDxTVFJPTkc+RGVzY3JpcHRpb248L1NUUk9ORz4KKyAgICAgICAgICAgICAgIDxTVFJPTkc+Qm9vbGVhbnM8L1NUUk9ORz4gICAgICAgICAgPFNUUk9ORz5uYW1lPC9TVFJPTkc+ICA8U1RST05HPkNvZGU8L1NUUk9ORz4KKyAgICAgICBhdXRvX2xlZnRfbWFyZ2luICAgICAgICAgIGJ3ICAgIGJ3ICAgIGN1YjEgd3JhcHMgZnJvbSBjb2wtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bW4gMCB0byBsYXN0IGNvbHVtbgorICAgICAgIGF1dG9fcmlnaHRfbWFyZ2luICAgICAgICAgYW0gICAgYW0gICAgdGVybWluYWwgaGFzIGF1dG8tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRpYyBtYXJnaW5zCisgICAgICAgYmFja19jb2xvcl9lcmFzZSAgICAgICAgICBiY2UgICB1dCAgICBzY3JlZW4gZXJhc2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgY29sb3IKKyAgICAgICBjYW5fY2hhbmdlICAgICAgICAgICAgICAgIGNjYyAgIGNjICAgIHRlcm1pbmFsIGNhbiByZS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBleGlzdGluZyBjb2wtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnMKKyAgICAgICBjZW9sX3N0YW5kb3V0X2dsaXRjaCAgICAgIHhocCAgIHhzICAgIHN0YW5kb3V0IG5vdCBlcmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IG92ZXJ3cml0aW5nIChocCkKKyAgICAgICBjb2xfYWRkcl9nbGl0Y2ggICAgICAgICAgIHhocGEgIFlBICAgIG9ubHkgcG9zaXRpdmUgbW90aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaHBhL21ocGEgY2FwcworCisKKyAgICAgICBjcGlfY2hhbmdlc19yZXMgICAgICAgICAgIGNwaXggIFlGICAgIGNoYW5naW5nIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2ggY2hhbmdlcyByZXNvLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHV0aW9uCisgICAgICAgY3JfY2FuY2Vsc19taWNyb19tb2RlICAgICBjcnhtICBZQiAgICB1c2luZyBjciB0dXJucyBvZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3JvIG1vZGUKKyAgICAgICBkZXN0X3RhYnNfbWFnaWNfc21zbyAgICAgIHh0ICAgIHh0ICAgIHRhYnMgZGVzdHJ1Y3RpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpYyBzbyBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodDEwNjEpCisgICAgICAgZWF0X25ld2xpbmVfZ2xpdGNoICAgICAgICB4ZW5sICB4biAgICBuZXdsaW5lIGlnbm9yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIDgwIGNvbHMgKGNvbi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcHQpCisgICAgICAgZXJhc2Vfb3ZlcnN0cmlrZSAgICAgICAgICBlbyAgICBlbyAgICBjYW4gZXJhc2Ugb3Zlci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZXMgd2l0aCBhIGJsYW5rCisgICAgICAgZ2VuZXJpY190eXBlICAgICAgICAgICAgICBnbiAgICBnbiAgICBnZW5lcmljIGxpbmUgdHlwZQorICAgICAgIGhhcmRfY29weSAgICAgICAgICAgICAgICAgaGMgICAgaGMgICAgaGFyZGNvcHkgdGVybWluYWwKKyAgICAgICBoYXJkX2N1cnNvciAgICAgICAgICAgICAgIGNodHMgIEhDICAgIGN1cnNvciBpcyBoYXJkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUKKyAgICAgICBoYXNfbWV0YV9rZXkgICAgICAgICAgICAgIGttICAgIGttICAgIEhhcyBhIG1ldGEga2V5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiwgc2V0cyA4dGgtYml0KQorICAgICAgIGhhc19wcmludF93aGVlbCAgICAgICAgICAgZGFpc3kgWUMgICAgcHJpbnRlciBuZWVkcyBvcGVyYS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvciB0byBjaGFuZ2UgY2hhci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGVyIHNldAorICAgICAgIGhhc19zdGF0dXNfbGluZSAgICAgICAgICAgaHMgICAgaHMgICAgaGFzIGV4dHJhIHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZQorICAgICAgIGh1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbiAgaGxzICAgaGwgICAgdGVybWluYWwgdXNlcyBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITFMgY29sb3Igbm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUZWt0cm9uaXgpCisgICAgICAgaW5zZXJ0X251bGxfZ2xpdGNoICAgICAgICBpbiAgICBpbiAgICBpbnNlcnQgbW9kZSBkaXN0aW4tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlzaGVzIG51bGxzCisgICAgICAgbHBpX2NoYW5nZXNfcmVzICAgICAgICAgICBscGl4ICBZRyAgICBjaGFuZ2luZyBsaW5lIHBpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHJlc29sdXRpb24KKyAgICAgICBtZW1vcnlfYWJvdmUgICAgICAgICAgICAgIGRhICAgIGRhICAgIGRpc3BsYXkgbWF5IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRhaW5lZCBhYm92ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgIG1lbW9yeV9iZWxvdyAgICAgICAgICAgICAgZGIgICAgZGIgICAgZGlzcGxheSBtYXkgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVkIGJlbG93IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuCisgICAgICAgbW92ZV9pbnNlcnRfbW9kZSAgICAgICAgICBtaXIgICBtaSAgICBzYWZlIHRvIG1vdmUgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGluc2VydCBtb2RlCisgICAgICAgbW92ZV9zdGFuZG91dF9tb2RlICAgICAgICBtc2dyICBtcyAgICBzYWZlIHRvIG1vdmUgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHN0YW5kb3V0IG1vZGUKKyAgICAgICBuZWVkc194b25feG9mZiAgICAgICAgICAgIG54b24gIG54ICAgIHBhZGRpbmcgd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmssIHhvbi94b2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZAorICAgICAgIG5vX2VzY19jdGxjICAgICAgICAgICAgICAgeHNiICAgeGIgICAgYmVlaGl2ZSAoZjE9ZXNjYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjI9Y3RybCBDKQorICAgICAgIG5vX3BhZF9jaGFyICAgICAgICAgICAgICAgbnBjICAgTlAgICAgcGFkIGNoYXJhY3RlciBkb2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZXhpc3QKKyAgICAgICBub25fZGVzdF9zY3JvbGxfcmVnaW9uICAgIG5kc2NyIE5EICAgIHNjcm9sbGluZyByZWdpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1kZXN0cnVjdGl2ZQorICAgICAgIG5vbl9yZXZfcm1jdXAgICAgICAgICAgICAgbnJybWMgTlIgICAgc21jdXAgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2Ugcm1jdXAKKyAgICAgICBvdmVyX3N0cmlrZSAgICAgICAgICAgICAgIG9zICAgIG9zICAgIHRlcm1pbmFsIGNhbiBvdmVyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlCisgICAgICAgcHJ0cl9zaWxlbnQgICAgICAgICAgICAgICBtYzVpICA1aSAgICBwcmludGVyIHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIG9uIHNjcmVlbgorICAgICAgIHJvd19hZGRyX2dsaXRjaCAgICAgICAgICAgeHZwYSAgWUQgICAgb25seSBwb3NpdGl2ZSBtb3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2cGEvbXZwYSBjYXBzCisgICAgICAgc2VtaV9hdXRvX3JpZ2h0X21hcmdpbiAgICBzYW0gICBZRSAgICBwcmludGluZyBpbiBsYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gY2F1c2VzIGNyCisgICAgICAgc3RhdHVzX2xpbmVfZXNjX29rICAgICAgICBlc2xvayBlcyAgICBlc2NhcGUgY2FuIGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBzdGF0dXMgbGluZQorICAgICAgIHRpbGRlX2dsaXRjaCAgICAgICAgICAgICAgaHogICAgaHogICAgY2Fubm90IHByaW50IH4ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhemVsdGluZSkKKworCisgICAgICAgdHJhbnNwYXJlbnRfdW5kZXJsaW5lICAgICB1bCAgICB1bCAgICB1bmRlcmxpbmUgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyc3RyaWtlcworICAgICAgIHhvbl94b2ZmICAgICAgICAgICAgICAgICAgeG9uICAgeG8gICAgdGVybWluYWwgdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9uL3hvZmYgaGFuZHNoYWtpbmcKKworICAgICAgIFRoZXNlIGFyZSB0aGUgbnVtZXJpYyBjYXBhYmlsaXRpZXM6CisKKworICAgICAgICAgICAgPFNUUk9ORz5WYXJpYWJsZTwvU1RST05HPiAgICAgICAgIDxTVFJPTkc+Q2FwLTwvU1RST05HPiAgICAgPFNUUk9ORz5UQ2FwPC9TVFJPTkc+ICAgICAgIDxTVFJPTkc+RGVzY3JpcHRpb248L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPk51bWVyaWM8L1NUUk9ORz4gICAgICAgICA8U1RST05HPm5hbWU8L1NUUk9ORz4gICAgIDxTVFJPTkc+Q29kZTwvU1RST05HPgorICAgICAgIGNvbHVtbnMgICAgICAgICAgICAgICBjb2xzICAgICBjbyAgICAgbnVtYmVyIG9mIGNvbHVtbnMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbGluZQorICAgICAgIGluaXRfdGFicyAgICAgICAgICAgICBpdCAgICAgICBpdCAgICAgdGFicyBpbml0aWFsbHkgZXZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3BhY2VzCisgICAgICAgbGFiZWxfaGVpZ2h0ICAgICAgICAgIGxoICAgICAgIGxoICAgICByb3dzIGluIGVhY2ggbGFiZWwKKyAgICAgICBsYWJlbF93aWR0aCAgICAgICAgICAgbHcgICAgICAgbHcgICAgIGNvbHVtbnMgaW4gZWFjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwKKyAgICAgICBsaW5lcyAgICAgICAgICAgICAgICAgbGluZXMgICAgbGkgICAgIG51bWJlciBvZiBsaW5lcyBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuIG9yIHBhZ2UKKyAgICAgICBsaW5lc19vZl9tZW1vcnkgICAgICAgbG0gICAgICAgbG0gICAgIGxpbmVzIG9mIG1lbW9yeSBpZiAmZ3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLiAwIG1lYW5zIHZhcmllcworICAgICAgIG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggICB4bWMgICAgICBzZyAgICAgbnVtYmVyIG9mIGJsYW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGxlZnQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtc28gb3Igcm1zbworICAgICAgIG1heF9hdHRyaWJ1dGVzICAgICAgICBtYSAgICAgICBtYSAgICAgbWF4aW11bSBjb21iaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGhhbmRsZQorICAgICAgIG1heF9jb2xvcnMgICAgICAgICAgICBjb2xvcnMgICBDbyAgICAgbWF4aW11bSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyBvbiBzY3JlZW4KKyAgICAgICBtYXhfcGFpcnMgICAgICAgICAgICAgcGFpcnMgICAgcGEgICAgIG1heGltdW0gbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1wYWlycyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgIG1heGltdW1fd2luZG93cyAgICAgICB3bnVtICAgICBNVyAgICAgbWF4aW11bSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWFibGUgd2luZG93cworICAgICAgIG5vX2NvbG9yX3ZpZGVvICAgICAgICBuY3YgICAgICBOQyAgICAgdmlkZW8gYXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW5ub3QgYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBjb2xvcnMKKyAgICAgICBudW1fbGFiZWxzICAgICAgICAgICAgbmxhYiAgICAgTmwgICAgIG51bWJlciBvZiBsYWJlbHMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbgorICAgICAgIHBhZGRpbmdfYmF1ZF9yYXRlICAgICBwYiAgICAgICBwYiAgICAgbG93ZXN0IGJhdWQgcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgcGFkZGluZyBuZWVkZWQKKyAgICAgICB2aXJ0dWFsX3Rlcm1pbmFsICAgICAgdnQgICAgICAgdnQgICAgIHZpcnR1YWwgdGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAoQ0IvdW5peCkKKyAgICAgICB3aWR0aF9zdGF0dXNfbGluZSAgICAgd3NsICAgICAgd3MgICAgIG51bWJlciBvZiBjb2x1bW5zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgbGluZQorCisgICAgICAgVGhlIGZvbGxvd2luZyBudW1lcmljICBjYXBhYmlsaXRpZXMgIGFyZSAgcHJlc2VudCAgaW4gIHRoZQorICAgICAgIFNWcjQuMCAgdGVybSAgc3RydWN0dXJlLCBidXQgYXJlIG5vdCB5ZXQgZG9jdW1lbnRlZCBpbiB0aGUKKyAgICAgICBtYW4gcGFnZS4gIFRoZXkgY2FtZSBpbiB3aXRoIFNWcjQncyBwcmludGVyIHN1cHBvcnQuCisKKworICAgICAgICAgICAgIDxTVFJPTkc+VmFyaWFibGU8L1NUUk9ORz4gICAgICAgICA8U1RST05HPkNhcC08L1NUUk9ORz4gICAgPFNUUk9ORz5UQ2FwPC9TVFJPTkc+ICAgICAgIDxTVFJPTkc+RGVzY3JpcHRpb248L1NUUk9ORz4KKyAgICAgICAgICAgICA8U1RST05HPk51bWVyaWM8L1NUUk9ORz4gICAgICAgICAgPFNUUk9ORz5uYW1lPC9TVFJPTkc+ICAgIDxTVFJPTkc+Q29kZTwvU1RST05HPgorICAgICAgIGJpdF9pbWFnZV9lbnR3aW5pbmcgICAgYml0d2luICBZbyAgICAgbnVtYmVyIG9mIHBhc3NlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggYml0LWltYWdlIHJvdworICAgICAgIGJpdF9pbWFnZV90eXBlICAgICAgICAgYml0eXBlICBZcCAgICAgdHlwZSBvZiBiaXQtaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZQorICAgICAgIGJ1ZmZlcl9jYXBhY2l0eSAgICAgICAgYnVmc3ogICBZYSAgICAgbnVtYmVycyBvZiBieXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyZWQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGluZworICAgICAgIGJ1dHRvbnMgICAgICAgICAgICAgICAgYnRucyAgICBCVCAgICAgbnVtYmVyIG9mIGJ1dHRvbnMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlCisgICAgICAgZG90X2hvcnpfc3BhY2luZyAgICAgICBzcGluaCAgIFljICAgICBzcGFjaW5nIG9mIGRvdHMgaG9yLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXpvbnRhbGx5IGluIGRvdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBpbmNoCisKKyAgICAgICBkb3RfdmVydF9zcGFjaW5nICAgICAgIHNwaW52ICAgWWIgICAgIHNwYWNpbmcgb2YgcGlucyB2ZXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNhbGx5IGluIHBpbnMgcGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNoCisgICAgICAgbWF4X21pY3JvX2FkZHJlc3MgICAgICBtYWRkciAgIFlkICAgICBtYXhpbXVtIHZhbHVlIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb18uLi5fYWRkcmVzcworICAgICAgIG1heF9taWNyb19qdW1wICAgICAgICAgbWp1bXAgICBZZSAgICAgbWF4aW11bSB2YWx1ZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFybV8uLi5fbWljcm8KKyAgICAgICBtaWNyb19jb2xfc2l6ZSAgICAgICAgIG1jcyAgICAgWWYgICAgIGNoYXJhY3RlciBzdGVwIHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gaW4gbWljcm8gbW9kZQorICAgICAgIG1pY3JvX2xpbmVfc2l6ZSAgICAgICAgbWxzICAgICBZZyAgICAgbGluZSBzdGVwIHNpemUgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbWljcm8gbW9kZQorICAgICAgIG51bWJlcl9vZl9waW5zICAgICAgICAgbnBpbnMgICBZaCAgICAgbnVtYmVycyBvZiBwaW5zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludC1oZWFkCisgICAgICAgb3V0cHV0X3Jlc19jaGFyICAgICAgICBvcmMgICAgIFlpICAgICBob3Jpem9udGFsIHJlc29sdS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpb24gaW4gdW5pdHMgcGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lCisgICAgICAgb3V0cHV0X3Jlc19ob3J6X2luY2ggICBvcmhpICAgIFlrICAgICBob3Jpem9udGFsIHJlc29sdS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpb24gaW4gdW5pdHMgcGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNoCisgICAgICAgb3V0cHV0X3Jlc19saW5lICAgICAgICBvcmwgICAgIFlqICAgICB2ZXJ0aWNhbCByZXNvbHV0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1bml0cyBwZXIgbGluZQorICAgICAgIG91dHB1dF9yZXNfdmVydF9pbmNoICAgb3J2aSAgICBZbCAgICAgdmVydGljYWwgcmVzb2x1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdW5pdHMgcGVyIGluY2gKKyAgICAgICBwcmludF9yYXRlICAgICAgICAgICAgIGNwcyAgICAgWW0gICAgIHByaW50IHJhdGUgaW4gY2hhci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGVycyBwZXIgc2Vjb25kCisgICAgICAgd2lkZV9jaGFyX3NpemUgICAgICAgICB3aWRjcyAgIFluICAgICBjaGFyYWN0ZXIgc3RlcCBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGluIGRvdWJsZSB3aWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisKKyAgICAgICBUaGVzZSBhcmUgdGhlIHN0cmluZyBjYXBhYmlsaXRpZXM6CisKKworICAgICAgICAgICAgICAgPFNUUk9ORz5WYXJpYWJsZTwvU1RST05HPiAgICAgICAgICA8U1RST05HPkNhcC08L1NUUk9ORz4gICA8U1RST05HPlRDYXA8L1NUUk9ORz4gICAgIDxTVFJPTkc+RGVzY3JpcHRpb248L1NUUk9ORz4KKyAgICAgICAgICAgICAgICA8U1RST05HPlN0cmluZzwvU1RST05HPiAgICAgICAgICAgPFNUUk9ORz5uYW1lPC9TVFJPTkc+ICAgPFNUUk9ORz5Db2RlPC9TVFJPTkc+CisgICAgICAgYWNzX2NoYXJzICAgICAgICAgICAgICAgICBhY3NjICAgYWMgICBncmFwaGljcyBjaGFyc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlycywgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0MTAwCisgICAgICAgYmFja190YWIgICAgICAgICAgICAgICAgICBjYnQgICAgYnQgICBiYWNrIHRhYiAoUCkKKyAgICAgICBiZWxsICAgICAgICAgICAgICAgICAgICAgIGJlbCAgICBibCAgIGF1ZGlibGUgc2lnbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmVsbCkgKFApCisgICAgICAgY2FycmlhZ2VfcmV0dXJuICAgICAgICAgICBjciAgICAgY3IgICBjYXJyaWFnZSByZXR1cm4gKFAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFAqKQorICAgICAgIGNoYW5nZV9jaGFyX3BpdGNoICAgICAgICAgY3BpICAgIFpBICAgQ2hhbmdlIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBwZXIgaW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gIzEKKyAgICAgICBjaGFuZ2VfbGluZV9waXRjaCAgICAgICAgIGxwaSAgICBaQiAgIENoYW5nZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzIHBlciBpbmNoIHRvICMxCisgICAgICAgY2hhbmdlX3Jlc19ob3J6ICAgICAgICAgICBjaHIgICAgWkMgICBDaGFuZ2UgaG9yaXpvbnRhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiB0byAjMQorICAgICAgIGNoYW5nZV9yZXNfdmVydCAgICAgICAgICAgY3ZyICAgIFpEICAgQ2hhbmdlIHZlcnRpY2FsIHJlcy0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sdXRpb24gdG8gIzEKKyAgICAgICBjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiAgICAgIGNzciAgICBjcyAgIGNoYW5nZSByZWdpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgIzEgdG8gbGluZSAjMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApCisgICAgICAgY2hhcl9wYWRkaW5nICAgICAgICAgICAgICBybXAgICAgclAgICBsaWtlIGlwIGJ1dCB3aGVuIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQgbW9kZQorICAgICAgIGNsZWFyX2FsbF90YWJzICAgICAgICAgICAgdGJjICAgIGN0ICAgY2xlYXIgYWxsIHRhYiBzdG9wcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApCisgICAgICAgY2xlYXJfbWFyZ2lucyAgICAgICAgICAgICBtZ2MgICAgTUMgICBjbGVhciByaWdodCBhbmQgbGVmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdCBtYXJnaW5zCisgICAgICAgY2xlYXJfc2NyZWVuICAgICAgICAgICAgICBjbGVhciAgY2wgICBjbGVhciBzY3JlZW4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob21lIGN1cnNvciAoUCopCisgICAgICAgY2xyX2JvbCAgICAgICAgICAgICAgICAgICBlbDEgICAgY2IgICBDbGVhciB0byBiZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGxpbmUKKworCisgICAgICAgY2xyX2VvbCAgICAgICAgICAgICAgICAgICBlbCAgICAgY2UgICBjbGVhciB0byBlbmQgb2YgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApCisgICAgICAgY2xyX2VvcyAgICAgICAgICAgICAgICAgICBlZCAgICAgY2QgICBjbGVhciB0byBlbmQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbiAoUCopCisgICAgICAgY29sdW1uX2FkZHJlc3MgICAgICAgICAgICBocGEgICAgY2ggICBob3Jpem9udGFsIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSwgYWJzb2x1dGUgKFApCisgICAgICAgY29tbWFuZF9jaGFyYWN0ZXIgICAgICAgICBjbWRjaCAgQ0MgICB0ZXJtaW5hbCBzZXR0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kIGNoYXJhY3RlciBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlICE/CisgICAgICAgY3JlYXRlX3dpbmRvdyAgICAgICAgICAgICBjd2luICAgQ1cgICBkZWZpbmUgYSB3aW5kb3cgIzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gIzIsIzMgdG8gIzQsIzUKKyAgICAgICBjdXJzb3JfYWRkcmVzcyAgICAgICAgICAgIGN1cCAgICBjbSAgIG1vdmUgdG8gcm93ICMxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zICMyCisgICAgICAgY3Vyc29yX2Rvd24gICAgICAgICAgICAgICBjdWQxICAgZG8gICBkb3duIG9uZSBsaW5lCisgICAgICAgY3Vyc29yX2hvbWUgICAgICAgICAgICAgICBob21lICAgaG8gICBob21lIGN1cnNvciAoaWYgbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cCkKKyAgICAgICBjdXJzb3JfaW52aXNpYmxlICAgICAgICAgIGNpdmlzICB2aSAgIG1ha2UgY3Vyc29yIGludmlzaS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZQorICAgICAgIGN1cnNvcl9sZWZ0ICAgICAgICAgICAgICAgY3ViMSAgIGxlICAgbW92ZSBsZWZ0IG9uZSBzcGFjZQorICAgICAgIGN1cnNvcl9tZW1fYWRkcmVzcyAgICAgICAgbXJjdXAgIENNICAgbWVtb3J5IHJlbGF0aXZlIGN1ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvciBhZGRyZXNzaW5nLCBtb3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByb3cgIzEgY29sdW1ucyAjMgorICAgICAgIGN1cnNvcl9ub3JtYWwgICAgICAgICAgICAgY25vcm0gIHZlICAgbWFrZSBjdXJzb3IgYXBwZWFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwgKHVuZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdmlzL2N2dmlzKQorICAgICAgIGN1cnNvcl9yaWdodCAgICAgICAgICAgICAgY3VmMSAgIG5kICAgbm9uLWRlc3RydWN0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSAobW92ZSByaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHNwYWNlKQorICAgICAgIGN1cnNvcl90b19sbCAgICAgICAgICAgICAgbGwgICAgIGxsICAgbGFzdCBsaW5lLCBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIChpZiBubyBjdXApCisgICAgICAgY3Vyc29yX3VwICAgICAgICAgICAgICAgICBjdXUxICAgdXAgICB1cCBvbmUgbGluZQorICAgICAgIGN1cnNvcl92aXNpYmxlICAgICAgICAgICAgY3Z2aXMgIHZzICAgbWFrZSBjdXJzb3IgdmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZQorICAgICAgIGRlZmluZV9jaGFyICAgICAgICAgICAgICAgZGVmYyAgIFpFICAgRGVmaW5lIGEgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSwgIzIgZG90cyB3aWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVyICMzCisgICAgICAgZGVsZXRlX2NoYXJhY3RlciAgICAgICAgICBkY2gxICAgZGMgICBkZWxldGUgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUCopCisgICAgICAgZGVsZXRlX2xpbmUgICAgICAgICAgICAgICBkbDEgICAgZGwgICBkZWxldGUgbGluZSAoUCopCisgICAgICAgZGlhbF9waG9uZSAgICAgICAgICAgICAgICBkaWFsICAgREkgICBkaWFsIG51bWJlciAjMQorICAgICAgIGRpc19zdGF0dXNfbGluZSAgICAgICAgICAgZHNsICAgIGRzICAgZGlzYWJsZSBzdGF0dXMgbGluZQorICAgICAgIGRpc3BsYXlfY2xvY2sgICAgICAgICAgICAgZGNsayAgIERLICAgZGlzcGxheSBjbG9jaworICAgICAgIGRvd25faGFsZl9saW5lICAgICAgICAgICAgaGQgICAgIGhkICAgaGFsZiBhIGxpbmUgZG93bgorICAgICAgIGVuYV9hY3MgICAgICAgICAgICAgICAgICAgZW5hY3MgIGVBICAgZW5hYmxlIGFsdGVybmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBzZXQKKyAgICAgICBlbnRlcl9hbHRfY2hhcnNldF9tb2RlICAgIHNtYWNzICBhcyAgIHN0YXJ0IGFsdGVybmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNldCAoUCkKKyAgICAgICBlbnRlcl9hbV9tb2RlICAgICAgICAgICAgIHNtYW0gICBTQSAgIHR1cm4gb24gYXV0b21hdGljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5zCisgICAgICAgZW50ZXJfYmxpbmtfbW9kZSAgICAgICAgICBibGluayAgbWIgICB0dXJuIG9uIGJsaW5raW5nCisgICAgICAgZW50ZXJfYm9sZF9tb2RlICAgICAgICAgICBib2xkICAgbWQgICB0dXJuIG9uIGJvbGQgKGV4dHJhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlnaHQpIG1vZGUKKyAgICAgICBlbnRlcl9jYV9tb2RlICAgICAgICAgICAgIHNtY3VwICB0aSAgIHN0cmluZyB0byBzdGFydCBwcm8tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtcyB1c2luZyBjdXAKKyAgICAgICBlbnRlcl9kZWxldGVfbW9kZSAgICAgICAgIHNtZGMgICBkbSAgIGVudGVyIGRlbGV0ZSBtb2RlCisgICAgICAgZW50ZXJfZGltX21vZGUgICAgICAgICAgICBkaW0gICAgbWggICB0dXJuIG9uIGhhbGYtYnJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZW50ZXJfZG91Ymxld2lkZV9tb2RlICAgICBzd2lkbSAgWkYgICBFbnRlciBkb3VibGUtd2lkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGVudGVyX2RyYWZ0X3F1YWxpdHkgICAgICAgc2RyZnEgIFpHICAgRW50ZXIgZHJhZnQtcXVhbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGVudGVyX2luc2VydF9tb2RlICAgICAgICAgc21pciAgIGltICAgZW50ZXIgaW5zZXJ0IG1vZGUKKyAgICAgICBlbnRlcl9pdGFsaWNzX21vZGUgICAgICAgIHNpdG0gICBaSCAgIEVudGVyIGl0YWxpYyBtb2RlCisgICAgICAgZW50ZXJfbGVmdHdhcmRfbW9kZSAgICAgICBzbG0gICAgWkkgICBTdGFydCBsZWZ0d2FyZCBjYXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWFnZSBtb3Rpb24KKworICAgICAgIGVudGVyX21pY3JvX21vZGUgICAgICAgICAgc21pY20gIFpKICAgU3RhcnQgbWljcm8tbW90aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZW50ZXJfbmVhcl9sZXR0ZXJfcXVhbGl0eSBzbmxxICAgWksgICBFbnRlciBOTFEgbW9kZQorICAgICAgIGVudGVyX25vcm1hbF9xdWFsaXR5ICAgICAgc25ybXEgIFpMICAgRW50ZXIgbm9ybWFsLXF1YWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUKKyAgICAgICBlbnRlcl9wcm90ZWN0ZWRfbW9kZSAgICAgIHByb3QgICBtcCAgIHR1cm4gb24gcHJvdGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZW50ZXJfcmV2ZXJzZV9tb2RlICAgICAgICByZXYgICAgbXIgICB0dXJuIG9uIHJldmVyc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvIG1vZGUKKyAgICAgICBlbnRlcl9zZWN1cmVfbW9kZSAgICAgICAgIGludmlzICBtayAgIHR1cm4gb24gYmxhbmsgbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXJhY3RlcnMgaW52aXNpLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlKQorICAgICAgIGVudGVyX3NoYWRvd19tb2RlICAgICAgICAgc3NobSAgIFpNICAgRW50ZXIgc2hhZG93LXByaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZW50ZXJfc3RhbmRvdXRfbW9kZSAgICAgICBzbXNvICAgc28gICBiZWdpbiBzdGFuZG91dCBtb2RlCisgICAgICAgZW50ZXJfc3Vic2NyaXB0X21vZGUgICAgICBzc3VibSAgWk4gICBFbnRlciBzdWJzY3JpcHQgbW9kZQorICAgICAgIGVudGVyX3N1cGVyc2NyaXB0X21vZGUgICAgc3N1cG0gIFpPICAgRW50ZXIgc3VwZXJzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUKKyAgICAgICBlbnRlcl91bmRlcmxpbmVfbW9kZSAgICAgIHNtdWwgICB1cyAgIGJlZ2luIHVuZGVybGluZSBtb2RlCisgICAgICAgZW50ZXJfdXB3YXJkX21vZGUgICAgICAgICBzdW0gICAgWlAgICBTdGFydCB1cHdhcmQgY2FyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlhZ2UgbW90aW9uCisgICAgICAgZW50ZXJfeG9uX21vZGUgICAgICAgICAgICBzbXhvbiAgU1ggICB0dXJuIG9uIHhvbi94b2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2luZworICAgICAgIGVyYXNlX2NoYXJzICAgICAgICAgICAgICAgZWNoICAgIGVjICAgZXJhc2UgIzEgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApCisgICAgICAgZXhpdF9hbHRfY2hhcnNldF9tb2RlICAgICBybWFjcyAgYWUgICBlbmQgYWx0ZXJuYXRlIGNoYXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RlciBzZXQgKFApCisgICAgICAgZXhpdF9hbV9tb2RlICAgICAgICAgICAgICBybWFtICAgUkEgICB0dXJuIG9mZiBhdXRvbWF0aWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnMKKyAgICAgICBleGl0X2F0dHJpYnV0ZV9tb2RlICAgICAgIHNncjAgICBtZSAgIHR1cm4gb2ZmIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcworICAgICAgIGV4aXRfY2FfbW9kZSAgICAgICAgICAgICAgcm1jdXAgIHRlICAgc3RyaW5ncyB0byBlbmQgcHJvLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbXMgdXNpbmcgY3VwCisgICAgICAgZXhpdF9kZWxldGVfbW9kZSAgICAgICAgICBybWRjICAgZWQgICBlbmQgZGVsZXRlIG1vZGUKKyAgICAgICBleGl0X2RvdWJsZXdpZGVfbW9kZSAgICAgIHJ3aWRtICBaUSAgIEVuZCBkb3VibGUtd2lkZSBtb2RlCisgICAgICAgZXhpdF9pbnNlcnRfbW9kZSAgICAgICAgICBybWlyICAgZWkgICBleGl0IGluc2VydCBtb2RlCisgICAgICAgZXhpdF9pdGFsaWNzX21vZGUgICAgICAgICByaXRtICAgWlIgICBFbmQgaXRhbGljIG1vZGUKKyAgICAgICBleGl0X2xlZnR3YXJkX21vZGUgICAgICAgIHJsbSAgICBaUyAgIEVuZCBsZWZ0LW1vdGlvbiBtb2RlCisgICAgICAgZXhpdF9taWNyb19tb2RlICAgICAgICAgICBybWljbSAgWlQgICBFbmQgbWljcm8tbW90aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZXhpdF9zaGFkb3dfbW9kZSAgICAgICAgICByc2htICAgWlUgICBFbmQgc2hhZG93LXByaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZXhpdF9zdGFuZG91dF9tb2RlICAgICAgICBybXNvICAgc2UgICBleGl0IHN0YW5kb3V0IG1vZGUKKyAgICAgICBleGl0X3N1YnNjcmlwdF9tb2RlICAgICAgIHJzdWJtICBaViAgIEVuZCBzdWJzY3JpcHQgbW9kZQorICAgICAgIGV4aXRfc3VwZXJzY3JpcHRfbW9kZSAgICAgcnN1cG0gIFpXICAgRW5kIHN1cGVyc2NyaXB0IG1vZGUKKyAgICAgICBleGl0X3VuZGVybGluZV9tb2RlICAgICAgIHJtdWwgICB1ZSAgIGV4aXQgdW5kZXJsaW5lIG1vZGUKKyAgICAgICBleGl0X3Vwd2FyZF9tb2RlICAgICAgICAgIHJ1bSAgICBaWCAgIEVuZCByZXZlcnNlIGNoYXJhYy0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlciBtb3Rpb24KKyAgICAgICBleGl0X3hvbl9tb2RlICAgICAgICAgICAgIHJteG9uICBSWCAgIHR1cm4gb2ZmIHhvbi94b2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2luZworICAgICAgIGZpeGVkX3BhdXNlICAgICAgICAgICAgICAgcGF1c2UgIFBBICAgcGF1c2UgZm9yIDItMyBzZWMtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmRzCisgICAgICAgZmxhc2hfaG9vayAgICAgICAgICAgICAgICBob29rICAgZmggICBmbGFzaCBzd2l0Y2ggaG9vaworICAgICAgIGZsYXNoX3NjcmVlbiAgICAgICAgICAgICAgZmxhc2ggIHZiICAgdmlzaWJsZSBiZWxsIChtYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBtb3ZlIGN1cnNvcikKKyAgICAgICBmb3JtX2ZlZWQgICAgICAgICAgICAgICAgIGZmICAgICBmZiAgIGhhcmRjb3B5IHRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGVqZWN0IChQKikKKyAgICAgICBmcm9tX3N0YXR1c19saW5lICAgICAgICAgIGZzbCAgICBmcyAgIHJldHVybiBmcm9tIHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZQorICAgICAgIGdvdG9fd2luZG93ICAgICAgICAgICAgICAgd2luZ28gIFdHICAgZ28gdG8gd2luZG93ICMxCisgICAgICAgaGFuZ3VwICAgICAgICAgICAgICAgICAgICBodXAgICAgSFUgICBoYW5nLXVwIHBob25lCisgICAgICAgaW5pdF8xc3RyaW5nICAgICAgICAgICAgICBpczEgICAgaTEgICBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nCisgICAgICAgaW5pdF8yc3RyaW5nICAgICAgICAgICAgICBpczIgICAgaXMgICBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nCisKKyAgICAgICBpbml0XzNzdHJpbmcgICAgICAgICAgICAgIGlzMyAgICBpMyAgIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcKKyAgICAgICBpbml0X2ZpbGUgICAgICAgICAgICAgICAgIGlmICAgICBpZiAgIG5hbWUgb2YgaW5pdGlhbGl6YS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpb24gZmlsZQorICAgICAgIGluaXRfcHJvZyAgICAgICAgICAgICAgICAgaXByb2cgIGlQICAgcGF0aCBuYW1lIG9mIHByb2dyYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbml0aWFsaXphdGlvbgorICAgICAgIGluaXRpYWxpemVfY29sb3IgICAgICAgICAgaW5pdGMgIEljICAgaW5pdGlhbGl6ZSBjb2xvciAjMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gKCMyLCMzLCM0KQorICAgICAgIGluaXRpYWxpemVfcGFpciAgICAgICAgICAgaW5pdHAgIElwICAgSW5pdGlhbGl6ZSBjb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpciAjMSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9KCMyLCMzLCM0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPSgjNSwjNiwjNykKKyAgICAgICBpbnNlcnRfY2hhcmFjdGVyICAgICAgICAgIGljaDEgICBpYyAgIGluc2VydCBjaGFyYWN0ZXIgKFApCisgICAgICAgaW5zZXJ0X2xpbmUgICAgICAgICAgICAgICBpbDEgICAgYWwgICBpbnNlcnQgbGluZSAoUCopCisgICAgICAgaW5zZXJ0X3BhZGRpbmcgICAgICAgICAgICBpcCAgICAgaXAgICBpbnNlcnQgcGFkZGluZyBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgY2hhcmFjdGVyCisgICAgICAga2V5X2ExICAgICAgICAgICAgICAgICAgICBrYTEgICAgSzEgICB1cHBlciBsZWZ0IG9mIGtleXBhZAorICAgICAgIGtleV9hMyAgICAgICAgICAgICAgICAgICAga2EzICAgIEszICAgdXBwZXIgcmlnaHQgb2Yga2V5LQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkCisgICAgICAga2V5X2IyICAgICAgICAgICAgICAgICAgICBrYjIgICAgSzIgICBjZW50ZXIgb2Yga2V5cGFkCisgICAgICAga2V5X2JhY2tzcGFjZSAgICAgICAgICAgICBrYnMgICAga2IgICBiYWNrc3BhY2Uga2V5CisgICAgICAga2V5X2JlZyAgICAgICAgICAgICAgICAgICBrYmVnICAgQDEgICBiZWdpbiBrZXkKKyAgICAgICBrZXlfYnRhYiAgICAgICAgICAgICAgICAgIGtjYnQgICBrQiAgIGJhY2stdGFiIGtleQorICAgICAgIGtleV9jMSAgICAgICAgICAgICAgICAgICAga2MxICAgIEs0ICAgbG93ZXIgbGVmdCBvZiBrZXlwYWQKKyAgICAgICBrZXlfYzMgICAgICAgICAgICAgICAgICAgIGtjMyAgICBLNSAgIGxvd2VyIHJpZ2h0IG9mIGtleS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZAorICAgICAgIGtleV9jYW5jZWwgICAgICAgICAgICAgICAga2NhbiAgIEAyICAgY2FuY2VsIGtleQorICAgICAgIGtleV9jYXRhYiAgICAgICAgICAgICAgICAga3RiYyAgIGthICAgY2xlYXItYWxsLXRhYnMga2V5CisgICAgICAga2V5X2NsZWFyICAgICAgICAgICAgICAgICBrY2xyICAga0MgICBjbGVhci1zY3JlZW4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyYXNlIGtleQorICAgICAgIGtleV9jbG9zZSAgICAgICAgICAgICAgICAga2NsbyAgIEAzICAgY2xvc2Uga2V5CisgICAgICAga2V5X2NvbW1hbmQgICAgICAgICAgICAgICBrY21kICAgQDQgICBjb21tYW5kIGtleQorICAgICAgIGtleV9jb3B5ICAgICAgICAgICAgICAgICAga2NweSAgIEA1ICAgY29weSBrZXkKKyAgICAgICBrZXlfY3JlYXRlICAgICAgICAgICAgICAgIGtjcnQgICBANiAgIGNyZWF0ZSBrZXkKKyAgICAgICBrZXlfY3RhYiAgICAgICAgICAgICAgICAgIGtjdGFiICBrdCAgIGNsZWFyLXRhYiBrZXkKKyAgICAgICBrZXlfZGMgICAgICAgICAgICAgICAgICAgIGtkY2gxICBrRCAgIGRlbGV0ZS1jaGFyYWN0ZXIga2V5CisgICAgICAga2V5X2RsICAgICAgICAgICAgICAgICAgICBrZGwxICAga0wgICBkZWxldGUtbGluZSBrZXkKKyAgICAgICBrZXlfZG93biAgICAgICAgICAgICAgICAgIGtjdWQxICBrZCAgIGRvd24tYXJyb3cga2V5CisgICAgICAga2V5X2VpYyAgICAgICAgICAgICAgICAgICBrcm1pciAga00gICBzZW50IGJ5IHJtaXIgb3Igc21pcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gaW5zZXJ0IG1vZGUKKyAgICAgICBrZXlfZW5kICAgICAgICAgICAgICAgICAgIGtlbmQgICBANyAgIGVuZCBrZXkKKyAgICAgICBrZXlfZW50ZXIgICAgICAgICAgICAgICAgIGtlbnQgICBAOCAgIGVudGVyL3NlbmQga2V5CisgICAgICAga2V5X2VvbCAgICAgICAgICAgICAgICAgICBrZWwgICAga0UgICBjbGVhci10by1lbmQtb2YtbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5CisgICAgICAga2V5X2VvcyAgICAgICAgICAgICAgICAgICBrZWQgICAga1MgICBjbGVhci10by1lbmQtb2YtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW4ga2V5CisgICAgICAga2V5X2V4aXQgICAgICAgICAgICAgICAgICBrZXh0ICAgQDkgICBleGl0IGtleQorICAgICAgIGtleV9mMCAgICAgICAgICAgICAgICAgICAga2YwICAgIGswICAgRjAgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YxICAgICAgICAgICAgICAgICAgICBrZjEgICAgazEgICBGMSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjEwICAgICAgICAgICAgICAgICAgIGtmMTAgICBrOyAgIEYxMCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjExICAgICAgICAgICAgICAgICAgIGtmMTEgICBGMSAgIEYxMSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjEyICAgICAgICAgICAgICAgICAgIGtmMTIgICBGMiAgIEYxMiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjEzICAgICAgICAgICAgICAgICAgIGtmMTMgICBGMyAgIEYxMyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjE0ICAgICAgICAgICAgICAgICAgIGtmMTQgICBGNCAgIEYxNCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjE1ICAgICAgICAgICAgICAgICAgIGtmMTUgICBGNSAgIEYxNSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjE2ICAgICAgICAgICAgICAgICAgIGtmMTYgICBGNiAgIEYxNiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjE3ICAgICAgICAgICAgICAgICAgIGtmMTcgICBGNyAgIEYxNyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjE4ICAgICAgICAgICAgICAgICAgIGtmMTggICBGOCAgIEYxOCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjE5ICAgICAgICAgICAgICAgICAgIGtmMTkgICBGOSAgIEYxOSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjIgICAgICAgICAgICAgICAgICAgIGtmMiAgICBrMiAgIEYyIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjAgICAgICAgICAgICAgICAgICAga2YyMCAgIEZBICAgRjIwIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjEgICAgICAgICAgICAgICAgICAga2YyMSAgIEZCICAgRjIxIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjIgICAgICAgICAgICAgICAgICAga2YyMiAgIEZDICAgRjIyIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjMgICAgICAgICAgICAgICAgICAga2YyMyAgIEZEICAgRjIzIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mMjQgICAgICAgICAgICAgICAgICAga2YyNCAgIEZFICAgRjI0IGZ1bmN0aW9uIGtleQorCisgICAgICAga2V5X2YyNSAgICAgICAgICAgICAgICAgICBrZjI1ICAgRkYgICBGMjUgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YyNiAgICAgICAgICAgICAgICAgICBrZjI2ICAgRkcgICBGMjYgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YyNyAgICAgICAgICAgICAgICAgICBrZjI3ICAgRkggICBGMjcgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YyOCAgICAgICAgICAgICAgICAgICBrZjI4ICAgRkkgICBGMjggZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YyOSAgICAgICAgICAgICAgICAgICBrZjI5ICAgRkogICBGMjkgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2YzICAgICAgICAgICAgICAgICAgICBrZjMgICAgazMgICBGMyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjMwICAgICAgICAgICAgICAgICAgIGtmMzAgICBGSyAgIEYzMCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjMxICAgICAgICAgICAgICAgICAgIGtmMzEgICBGTCAgIEYzMSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjMyICAgICAgICAgICAgICAgICAgIGtmMzIgICBGTSAgIEYzMiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjMzICAgICAgICAgICAgICAgICAgIGtmMzMgICBGTiAgIEYzMyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjM0ICAgICAgICAgICAgICAgICAgIGtmMzQgICBGTyAgIEYzNCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjM1ICAgICAgICAgICAgICAgICAgIGtmMzUgICBGUCAgIEYzNSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjM2ICAgICAgICAgICAgICAgICAgIGtmMzYgICBGUSAgIEYzNiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjM3ICAgICAgICAgICAgICAgICAgIGtmMzcgICBGUiAgIEYzNyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjM4ICAgICAgICAgICAgICAgICAgIGtmMzggICBGUyAgIEYzOCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjM5ICAgICAgICAgICAgICAgICAgIGtmMzkgICBGVCAgIEYzOSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjQgICAgICAgICAgICAgICAgICAgIGtmNCAgICBrNCAgIEY0IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDAgICAgICAgICAgICAgICAgICAga2Y0MCAgIEZVICAgRjQwIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDEgICAgICAgICAgICAgICAgICAga2Y0MSAgIEZWICAgRjQxIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDIgICAgICAgICAgICAgICAgICAga2Y0MiAgIEZXICAgRjQyIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDMgICAgICAgICAgICAgICAgICAga2Y0MyAgIEZYICAgRjQzIGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDQgICAgICAgICAgICAgICAgICAga2Y0NCAgIEZZICAgRjQ0IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDUgICAgICAgICAgICAgICAgICAga2Y0NSAgIEZaICAgRjQ1IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDYgICAgICAgICAgICAgICAgICAga2Y0NiAgIEZhICAgRjQ2IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDcgICAgICAgICAgICAgICAgICAga2Y0NyAgIEZiICAgRjQ3IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDggICAgICAgICAgICAgICAgICAga2Y0OCAgIEZjICAgRjQ4IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNDkgICAgICAgICAgICAgICAgICAga2Y0OSAgIEZkICAgRjQ5IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mNSAgICAgICAgICAgICAgICAgICAga2Y1ICAgIGs1ICAgRjUgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1MCAgICAgICAgICAgICAgICAgICBrZjUwICAgRmUgICBGNTAgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1MSAgICAgICAgICAgICAgICAgICBrZjUxICAgRmYgICBGNTEgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1MiAgICAgICAgICAgICAgICAgICBrZjUyICAgRmcgICBGNTIgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1MyAgICAgICAgICAgICAgICAgICBrZjUzICAgRmggICBGNTMgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1NCAgICAgICAgICAgICAgICAgICBrZjU0ICAgRmkgICBGNTQgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1NSAgICAgICAgICAgICAgICAgICBrZjU1ICAgRmogICBGNTUgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1NiAgICAgICAgICAgICAgICAgICBrZjU2ICAgRmsgICBGNTYgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1NyAgICAgICAgICAgICAgICAgICBrZjU3ICAgRmwgICBGNTcgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1OCAgICAgICAgICAgICAgICAgICBrZjU4ICAgRm0gICBGNTggZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y1OSAgICAgICAgICAgICAgICAgICBrZjU5ICAgRm4gICBGNTkgZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y2ICAgICAgICAgICAgICAgICAgICBrZjYgICAgazYgICBGNiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjYwICAgICAgICAgICAgICAgICAgIGtmNjAgICBGbyAgIEY2MCBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjYxICAgICAgICAgICAgICAgICAgIGtmNjEgICBGcCAgIEY2MSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjYyICAgICAgICAgICAgICAgICAgIGtmNjIgICBGcSAgIEY2MiBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjYzICAgICAgICAgICAgICAgICAgIGtmNjMgICBGciAgIEY2MyBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZjcgICAgICAgICAgICAgICAgICAgIGtmNyAgICBrNyAgIEY3IGZ1bmN0aW9uIGtleQorICAgICAgIGtleV9mOCAgICAgICAgICAgICAgICAgICAga2Y4ICAgIGs4ICAgRjggZnVuY3Rpb24ga2V5CisgICAgICAga2V5X2Y5ICAgICAgICAgICAgICAgICAgICBrZjkgICAgazkgICBGOSBmdW5jdGlvbiBrZXkKKyAgICAgICBrZXlfZmluZCAgICAgICAgICAgICAgICAgIGtmbmQgICBAMCAgIGZpbmQga2V5CisgICAgICAga2V5X2hlbHAgICAgICAgICAgICAgICAgICBraGxwICAgJTEgICBoZWxwIGtleQorICAgICAgIGtleV9ob21lICAgICAgICAgICAgICAgICAga2hvbWUgIGtoICAgaG9tZSBrZXkKKyAgICAgICBrZXlfaWMgICAgICAgICAgICAgICAgICAgIGtpY2gxICBrSSAgIGluc2VydC1jaGFyYWN0ZXIga2V5CisgICAgICAga2V5X2lsICAgICAgICAgICAgICAgICAgICBraWwxICAga0EgICBpbnNlcnQtbGluZSBrZXkKKyAgICAgICBrZXlfbGVmdCAgICAgICAgICAgICAgICAgIGtjdWIxICBrbCAgIGxlZnQtYXJyb3cga2V5CisgICAgICAga2V5X2xsICAgICAgICAgICAgICAgICAgICBrbGwgICAga0ggICBsb3dlci1sZWZ0IGtleSAoaG9tZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bikKKyAgICAgICBrZXlfbWFyayAgICAgICAgICAgICAgICAgIGttcmsgICAlMiAgIG1hcmsga2V5CisgICAgICAga2V5X21lc3NhZ2UgICAgICAgICAgICAgICBrbXNnICAgJTMgICBtZXNzYWdlIGtleQorICAgICAgIGtleV9tb3ZlICAgICAgICAgICAgICAgICAga21vdiAgICU0ICAgbW92ZSBrZXkKKyAgICAgICBrZXlfbmV4dCAgICAgICAgICAgICAgICAgIGtueHQgICAlNSAgIG5leHQga2V5CisgICAgICAga2V5X25wYWdlICAgICAgICAgICAgICAgICBrbnAgICAga04gICBuZXh0LXBhZ2Uga2V5CisgICAgICAga2V5X29wZW4gICAgICAgICAgICAgICAgICBrb3BuICAgJTYgICBvcGVuIGtleQorICAgICAgIGtleV9vcHRpb25zICAgICAgICAgICAgICAga29wdCAgICU3ICAgb3B0aW9ucyBrZXkKKyAgICAgICBrZXlfcHBhZ2UgICAgICAgICAgICAgICAgIGtwcCAgICBrUCAgIHByZXZpb3VzLXBhZ2Uga2V5CisgICAgICAga2V5X3ByZXZpb3VzICAgICAgICAgICAgICBrcHJ2ICAgJTggICBwcmV2aW91cyBrZXkKKyAgICAgICBrZXlfcHJpbnQgICAgICAgICAgICAgICAgIGtwcnQgICAlOSAgIHByaW50IGtleQorICAgICAgIGtleV9yZWRvICAgICAgICAgICAgICAgICAga3JkbyAgICUwICAgcmVkbyBrZXkKKworICAgICAgIGtleV9yZWZlcmVuY2UgICAgICAgICAgICAga3JlZiAgICZhbXA7MSAgIHJlZmVyZW5jZSBrZXkKKyAgICAgICBrZXlfcmVmcmVzaCAgICAgICAgICAgICAgIGtyZnIgICAmYW1wOzIgICByZWZyZXNoIGtleQorICAgICAgIGtleV9yZXBsYWNlICAgICAgICAgICAgICAga3JwbCAgICZhbXA7MyAgIHJlcGxhY2Uga2V5CisgICAgICAga2V5X3Jlc3RhcnQgICAgICAgICAgICAgICBrcnN0ICAgJmFtcDs0ICAgcmVzdGFydCBrZXkKKyAgICAgICBrZXlfcmVzdW1lICAgICAgICAgICAgICAgIGtyZXMgICAmYW1wOzUgICByZXN1bWUga2V5CisgICAgICAga2V5X3JpZ2h0ICAgICAgICAgICAgICAgICBrY3VmMSAga3IgICByaWdodC1hcnJvdyBrZXkKKyAgICAgICBrZXlfc2F2ZSAgICAgICAgICAgICAgICAgIGtzYXYgICAmYW1wOzYgICBzYXZlIGtleQorICAgICAgIGtleV9zYmVnICAgICAgICAgICAgICAgICAga0JFRyAgICZhbXA7OSAgIHNoaWZ0ZWQgYmVnaW4ga2V5CisgICAgICAga2V5X3NjYW5jZWwgICAgICAgICAgICAgICBrQ0FOICAgJmFtcDswICAgc2hpZnRlZCBjYW5jZWwga2V5CisgICAgICAga2V5X3Njb21tYW5kICAgICAgICAgICAgICBrQ01EICAgKjEgICBzaGlmdGVkIGNvbW1hbmQga2V5CisgICAgICAga2V5X3Njb3B5ICAgICAgICAgICAgICAgICBrQ1BZICAgKjIgICBzaGlmdGVkIGNvcHkga2V5CisgICAgICAga2V5X3NjcmVhdGUgICAgICAgICAgICAgICBrQ1JUICAgKjMgICBzaGlmdGVkIGNyZWF0ZSBrZXkKKyAgICAgICBrZXlfc2RjICAgICAgICAgICAgICAgICAgIGtEQyAgICAqNCAgIHNoaWZ0ZWQgZGVsZXRlLWNoYXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RlciBrZXkKKyAgICAgICBrZXlfc2RsICAgICAgICAgICAgICAgICAgIGtETCAgICAqNSAgIHNoaWZ0ZWQgZGVsZXRlLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleQorICAgICAgIGtleV9zZWxlY3QgICAgICAgICAgICAgICAga3NsdCAgICo2ICAgc2VsZWN0IGtleQorICAgICAgIGtleV9zZW5kICAgICAgICAgICAgICAgICAga0VORCAgICo3ICAgc2hpZnRlZCBlbmQga2V5CisgICAgICAga2V5X3Nlb2wgICAgICAgICAgICAgICAgICBrRU9MICAgKjggICBzaGlmdGVkIGNsZWFyLXRvLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLW9mLWxpbmUga2V5CisgICAgICAga2V5X3NleGl0ICAgICAgICAgICAgICAgICBrRVhUICAgKjkgICBzaGlmdGVkIGV4aXQga2V5CisgICAgICAga2V5X3NmICAgICAgICAgICAgICAgICAgICBraW5kICAga0YgICBzY3JvbGwtZm9yd2FyZCBrZXkKKyAgICAgICBrZXlfc2ZpbmQgICAgICAgICAgICAgICAgIGtGTkQgICAqMCAgIHNoaWZ0ZWQgZmluZCBrZXkKKyAgICAgICBrZXlfc2hlbHAgICAgICAgICAgICAgICAgIGtITFAgICAjMSAgIHNoaWZ0ZWQgaGVscCBrZXkKKyAgICAgICBrZXlfc2hvbWUgICAgICAgICAgICAgICAgIGtIT00gICAjMiAgIHNoaWZ0ZWQgaG9tZSBrZXkKKyAgICAgICBrZXlfc2ljICAgICAgICAgICAgICAgICAgIGtJQyAgICAjMyAgIHNoaWZ0ZWQgaW5zZXJ0LWNoYXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RlciBrZXkKKyAgICAgICBrZXlfc2xlZnQgICAgICAgICAgICAgICAgIGtMRlQgICAjNCAgIHNoaWZ0ZWQgbGVmdC1hcnJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5CisgICAgICAga2V5X3NtZXNzYWdlICAgICAgICAgICAgICBrTVNHICAgJWEgICBzaGlmdGVkIG1lc3NhZ2Uga2V5CisgICAgICAga2V5X3Ntb3ZlICAgICAgICAgICAgICAgICBrTU9WICAgJWIgICBzaGlmdGVkIG1vdmUga2V5CisgICAgICAga2V5X3NuZXh0ICAgICAgICAgICAgICAgICBrTlhUICAgJWMgICBzaGlmdGVkIG5leHQga2V5CisgICAgICAga2V5X3NvcHRpb25zICAgICAgICAgICAgICBrT1BUICAgJWQgICBzaGlmdGVkIG9wdGlvbnMga2V5CisgICAgICAga2V5X3NwcmV2aW91cyAgICAgICAgICAgICBrUFJWICAgJWUgICBzaGlmdGVkIHByZXZpb3VzIGtleQorICAgICAgIGtleV9zcHJpbnQgICAgICAgICAgICAgICAga1BSVCAgICVmICAgc2hpZnRlZCBwcmludCBrZXkKKyAgICAgICBrZXlfc3IgICAgICAgICAgICAgICAgICAgIGtyaSAgICBrUiAgIHNjcm9sbC1iYWNrd2FyZCBrZXkKKyAgICAgICBrZXlfc3JlZG8gICAgICAgICAgICAgICAgIGtSRE8gICAlZyAgIHNoaWZ0ZWQgcmVkbyBrZXkKKyAgICAgICBrZXlfc3JlcGxhY2UgICAgICAgICAgICAgIGtSUEwgICAlaCAgIHNoaWZ0ZWQgcmVwbGFjZSBrZXkKKyAgICAgICBrZXlfc3JpZ2h0ICAgICAgICAgICAgICAgIGtSSVQgICAlaSAgIHNoaWZ0ZWQgcmlnaHQtYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleQorICAgICAgIGtleV9zcnN1bWUgICAgICAgICAgICAgICAga1JFUyAgICVqICAgc2hpZnRlZCByZXN1bWUga2V5CisgICAgICAga2V5X3NzYXZlICAgICAgICAgICAgICAgICBrU0FWICAgITEgICBzaGlmdGVkIHNhdmUga2V5CisgICAgICAga2V5X3NzdXNwZW5kICAgICAgICAgICAgICBrU1BEICAgITIgICBzaGlmdGVkIHN1c3BlbmQga2V5CisgICAgICAga2V5X3N0YWIgICAgICAgICAgICAgICAgICBraHRzICAga1QgICBzZXQtdGFiIGtleQorICAgICAgIGtleV9zdW5kbyAgICAgICAgICAgICAgICAga1VORCAgICEzICAgc2hpZnRlZCB1bmRvIGtleQorICAgICAgIGtleV9zdXNwZW5kICAgICAgICAgICAgICAga3NwZCAgICZhbXA7NyAgIHN1c3BlbmQga2V5CisgICAgICAga2V5X3VuZG8gICAgICAgICAgICAgICAgICBrdW5kICAgJmFtcDs4ICAgdW5kbyBrZXkKKyAgICAgICBrZXlfdXAgICAgICAgICAgICAgICAgICAgIGtjdXUxICBrdSAgIHVwLWFycm93IGtleQorICAgICAgIGtleXBhZF9sb2NhbCAgICAgICAgICAgICAgcm1reCAgIGtlICAgbGVhdmUgJ2tleS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvYXJkX3RyYW5zbWl0JyBtb2RlCisgICAgICAga2V5cGFkX3htaXQgICAgICAgICAgICAgICBzbWt4ICAga3MgICBlbnRlciAna2V5LQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmRfdHJhbnNtaXQnIG1vZGUKKyAgICAgICBsYWJfZjAgICAgICAgICAgICAgICAgICAgIGxmMCAgICBsMCAgIGxhYmVsIG9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgZjAgaWYgbm90IGYwCisgICAgICAgbGFiX2YxICAgICAgICAgICAgICAgICAgICBsZjEgICAgbDEgICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGYxIGlmIG5vdCBmMQorICAgICAgIGxhYl9mMTAgICAgICAgICAgICAgICAgICAgbGYxMCAgIGxhICAgbGFiZWwgb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBmMTAgaWYgbm90IGYxMAorICAgICAgIGxhYl9mMiAgICAgICAgICAgICAgICAgICAgbGYyICAgIGwyICAgbGFiZWwgb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBmMiBpZiBub3QgZjIKKyAgICAgICBsYWJfZjMgICAgICAgICAgICAgICAgICAgIGxmMyAgICBsMyAgIGxhYmVsIG9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgZjMgaWYgbm90IGYzCisgICAgICAgbGFiX2Y0ICAgICAgICAgICAgICAgICAgICBsZjQgICAgbDQgICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGY0IGlmIG5vdCBmNAorCisKKyAgICAgICBsYWJfZjUgICAgICAgICAgICAgICAgICAgIGxmNSAgICBsNSAgIGxhYmVsIG9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgZjUgaWYgbm90IGY1CisgICAgICAgbGFiX2Y2ICAgICAgICAgICAgICAgICAgICBsZjYgICAgbDYgICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGY2IGlmIG5vdCBmNgorICAgICAgIGxhYl9mNyAgICAgICAgICAgICAgICAgICAgbGY3ICAgIGw3ICAgbGFiZWwgb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBmNyBpZiBub3QgZjcKKyAgICAgICBsYWJfZjggICAgICAgICAgICAgICAgICAgIGxmOCAgICBsOCAgIGxhYmVsIG9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgZjggaWYgbm90IGY4CisgICAgICAgbGFiX2Y5ICAgICAgICAgICAgICAgICAgICBsZjkgICAgbDkgICBsYWJlbCBvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5IGY5IGlmIG5vdCBmOQorICAgICAgIGxhYmVsX2Zvcm1hdCAgICAgICAgICAgICAgZmxuICAgIExmICAgbGFiZWwgZm9ybWF0CisgICAgICAgbGFiZWxfb2ZmICAgICAgICAgICAgICAgICBybWxuICAgTEYgICB0dXJuIG9mZiBzb2Z0IGxhYmVscworICAgICAgIGxhYmVsX29uICAgICAgICAgICAgICAgICAgc21sbiAgIExPICAgdHVybiBvbiBzb2Z0IGxhYmVscworICAgICAgIG1ldGFfb2ZmICAgICAgICAgICAgICAgICAgcm1tICAgIG1vICAgdHVybiBvZmYgbWV0YSBtb2RlCisgICAgICAgbWV0YV9vbiAgICAgICAgICAgICAgICAgICBzbW0gICAgbW0gICB0dXJuIG9uIG1ldGEgbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDh0aC1iaXQgb24pCisgICAgICAgbWljcm9fY29sdW1uX2FkZHJlc3MgICAgICBtaHBhICAgWlkgICBMaWtlIGNvbHVtbl9hZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBtaWNybyBtb2RlCisgICAgICAgbWljcm9fZG93biAgICAgICAgICAgICAgICBtY3VkMSAgWlogICBMaWtlIGN1cnNvcl9kb3duIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNybyBtb2RlCisgICAgICAgbWljcm9fbGVmdCAgICAgICAgICAgICAgICBtY3ViMSAgWmEgICBMaWtlIGN1cnNvcl9sZWZ0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNybyBtb2RlCisgICAgICAgbWljcm9fcmlnaHQgICAgICAgICAgICAgICBtY3VmMSAgWmIgICBMaWtlIGN1cnNvcl9yaWdodCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm8gbW9kZQorICAgICAgIG1pY3JvX3Jvd19hZGRyZXNzICAgICAgICAgbXZwYSAgIFpjICAgTGlrZSByb3dfYWRkcmVzcyAjMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbWljcm8gbW9kZQorICAgICAgIG1pY3JvX3VwICAgICAgICAgICAgICAgICAgbWN1dTEgIFpkICAgTGlrZSBjdXJzb3JfdXAgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3JvIG1vZGUKKyAgICAgICBuZXdsaW5lICAgICAgICAgICAgICAgICAgIG5lbCAgICBudyAgIG5ld2xpbmUgKGJlaGF2ZSBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciBmb2xsb3dlZCBieSBsZikKKyAgICAgICBvcmRlcl9vZl9waW5zICAgICAgICAgICAgIHBvcmRlciBaZSAgIE1hdGNoIHNvZnR3YXJlIGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByaW50LWhlYWQgcGlucworICAgICAgIG9yaWdfY29sb3JzICAgICAgICAgICAgICAgb2MgICAgIG9jICAgU2V0IGFsbCBjb2xvciBwYWlycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG9yaWdpbmFsIG9uZXMKKyAgICAgICBvcmlnX3BhaXIgICAgICAgICAgICAgICAgIG9wICAgICBvcCAgIFNldCBkZWZhdWx0IHBhaXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyBvcmlnaW5hbCB2YWx1ZQorICAgICAgIHBhZF9jaGFyICAgICAgICAgICAgICAgICAgcGFkICAgIHBjICAgcGFkZGluZyBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5zdGVhZCBvZiBudWxsKQorICAgICAgIHBhcm1fZGNoICAgICAgICAgICAgICAgICAgZGNoICAgIERDICAgZGVsZXRlICMxIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKikKKyAgICAgICBwYXJtX2RlbGV0ZV9saW5lICAgICAgICAgIGRsICAgICBETCAgIGRlbGV0ZSAjMSBsaW5lcyAoUCopCisgICAgICAgcGFybV9kb3duX2N1cnNvciAgICAgICAgICBjdWQgICAgRE8gICBkb3duICMxIGxpbmVzIChQKikKKyAgICAgICBwYXJtX2Rvd25fbWljcm8gICAgICAgICAgIG1jdWQgICBaZiAgIExpa2UgcGFybV9kb3duX2N1ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvciBpbiBtaWNybyBtb2RlCisgICAgICAgcGFybV9pY2ggICAgICAgICAgICAgICAgICBpY2ggICAgSUMgICBpbnNlcnQgIzEgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFAqKQorICAgICAgIHBhcm1faW5kZXggICAgICAgICAgICAgICAgaW5kbiAgIFNGICAgc2Nyb2xsIGZvcndhcmQgIzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzIChQKQorICAgICAgIHBhcm1faW5zZXJ0X2xpbmUgICAgICAgICAgaWwgICAgIEFMICAgaW5zZXJ0ICMxIGxpbmVzIChQKikKKyAgICAgICBwYXJtX2xlZnRfY3Vyc29yICAgICAgICAgIGN1YiAgICBMRSAgIG1vdmUgIzEgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGxlZnQgKFApCisgICAgICAgcGFybV9sZWZ0X21pY3JvICAgICAgICAgICBtY3ViICAgWmcgICBMaWtlIHBhcm1fbGVmdF9jdXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3IgaW4gbWljcm8gbW9kZQorICAgICAgIHBhcm1fcmlnaHRfY3Vyc29yICAgICAgICAgY3VmICAgIFJJICAgbW92ZSAjMSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgcmlnaHQgKFAqKQorICAgICAgIHBhcm1fcmlnaHRfbWljcm8gICAgICAgICAgbWN1ZiAgIFpoICAgTGlrZSBwYXJtX3JpZ2h0X2N1ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvciBpbiBtaWNybyBtb2RlCisgICAgICAgcGFybV9yaW5kZXggICAgICAgICAgICAgICByaW4gICAgU1IgICBzY3JvbGwgYmFjayAjMSBsaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApCisgICAgICAgcGFybV91cF9jdXJzb3IgICAgICAgICAgICBjdXUgICAgVVAgICB1cCAjMSBsaW5lcyAoUCopCisgICAgICAgcGFybV91cF9taWNybyAgICAgICAgICAgICBtY3V1ICAgWmkgICBMaWtlIHBhcm1fdXBfY3Vyc29yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBtaWNybyBtb2RlCisgICAgICAgcGtleV9rZXkgICAgICAgICAgICAgICAgICBwZmtleSAgcGsgICBwcm9ncmFtIGZ1bmN0aW9uIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgdG8gdHlwZSBzdHJpbmcgIzIKKworCisgICAgICAgcGtleV9sb2NhbCAgICAgICAgICAgICAgICBwZmxvYyAgcGwgICBwcm9ncmFtIGZ1bmN0aW9uIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgdG8gZXhlY3V0ZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMyCisgICAgICAgcGtleV94bWl0ICAgICAgICAgICAgICAgICBwZnggICAgcHggICBwcm9ncmFtIGZ1bmN0aW9uIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgdG8gdHJhbnNtaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAjMgorICAgICAgIHBsYWJfbm9ybSAgICAgICAgICAgICAgICAgcGxuICAgIHBuICAgcHJvZ3JhbSBsYWJlbCAjMSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdyBzdHJpbmcgIzIKKyAgICAgICBwcmludF9zY3JlZW4gICAgICAgICAgICAgIG1jMCAgICBwcyAgIHByaW50IGNvbnRlbnRzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW4KKyAgICAgICBwcnRyX25vbiAgICAgICAgICAgICAgICAgIG1jNXAgICBwTyAgIHR1cm4gb24gcHJpbnRlciBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGJ5dGVzCisgICAgICAgcHJ0cl9vZmYgICAgICAgICAgICAgICAgICBtYzQgICAgcGYgICB0dXJuIG9mZiBwcmludGVyCisgICAgICAgcHJ0cl9vbiAgICAgICAgICAgICAgICAgICBtYzUgICAgcG8gICB0dXJuIG9uIHByaW50ZXIKKyAgICAgICBwdWxzZSAgICAgICAgICAgICAgICAgICAgIHB1bHNlICBQVSAgIHNlbGVjdCBwdWxzZSBkaWFsaW5nCisgICAgICAgcXVpY2tfZGlhbCAgICAgICAgICAgICAgICBxZGlhbCAgUUQgICBkaWFsIG51bWJlciAjMSB3aXRoLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IGNoZWNraW5nCisgICAgICAgcmVtb3ZlX2Nsb2NrICAgICAgICAgICAgICBybWNsayAgUkMgICByZW1vdmUgY2xvY2sKKyAgICAgICByZXBlYXRfY2hhciAgICAgICAgICAgICAgIHJlcCAgICBycCAgIHJlcGVhdCBjaGFyICMxICMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyAoUCopCisgICAgICAgcmVxX2Zvcl9pbnB1dCAgICAgICAgICAgICByZmkgICAgUkYgICBzZW5kIG5leHQgaW5wdXQgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvciBwdHlzKQorICAgICAgIHJlc2V0XzFzdHJpbmcgICAgICAgICAgICAgcnMxICAgIHIxICAgcmVzZXQgc3RyaW5nCisgICAgICAgcmVzZXRfMnN0cmluZyAgICAgICAgICAgICByczIgICAgcjIgICByZXNldCBzdHJpbmcKKyAgICAgICByZXNldF8zc3RyaW5nICAgICAgICAgICAgIHJzMyAgICByMyAgIHJlc2V0IHN0cmluZworICAgICAgIHJlc2V0X2ZpbGUgICAgICAgICAgICAgICAgcmYgICAgIHJmICAgbmFtZSBvZiByZXNldCBmaWxlCisgICAgICAgcmVzdG9yZV9jdXJzb3IgICAgICAgICAgICByYyAgICAgcmMgICByZXN0b3JlIGN1cnNvciB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gb2YgbGFzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9jdXJzb3IKKyAgICAgICByb3dfYWRkcmVzcyAgICAgICAgICAgICAgIHZwYSAgICBjdiAgIHZlcnRpY2FsIHBvc2l0aW9uICMxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZSAoUCkKKyAgICAgICBzYXZlX2N1cnNvciAgICAgICAgICAgICAgIHNjICAgICBzYyAgIHNhdmUgY3VycmVudCBjdXJzb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIChQKQorICAgICAgIHNjcm9sbF9mb3J3YXJkICAgICAgICAgICAgaW5kICAgIHNmICAgc2Nyb2xsIHRleHQgdXAgKFApCisgICAgICAgc2Nyb2xsX3JldmVyc2UgICAgICAgICAgICByaSAgICAgc3IgICBzY3JvbGwgdGV4dCBkb3duIChQKQorICAgICAgIHNlbGVjdF9jaGFyX3NldCAgICAgICAgICAgc2NzICAgIFpqICAgU2VsZWN0IGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCAjMQorICAgICAgIHNldF9hdHRyaWJ1dGVzICAgICAgICAgICAgc2dyICAgIHNhICAgZGVmaW5lIHZpZGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICMxLSM5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEc5KQorICAgICAgIHNldF9iYWNrZ3JvdW5kICAgICAgICAgICAgc2V0YiAgIFNiICAgU2V0IGJhY2tncm91bmQgY29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxCisgICAgICAgc2V0X2JvdHRvbV9tYXJnaW4gICAgICAgICBzbWdiICAgWmsgICBTZXQgYm90dG9tIG1hcmdpbiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBsaW5lCisgICAgICAgc2V0X2JvdHRvbV9tYXJnaW5fcGFybSAgICBzbWdicCAgWmwgICBTZXQgYm90dG9tIG1hcmdpbiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAjMSBvciAoaWYgc21ndHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBnaXZlbikgIzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzIGZyb20gYm90dG9tCisgICAgICAgc2V0X2Nsb2NrICAgICAgICAgICAgICAgICBzY2xrICAgU0MgICBzZXQgY2xvY2ssICMxIGhycyAjMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlucyAjMyBzZWNzCisgICAgICAgc2V0X2NvbG9yX3BhaXIgICAgICAgICAgICBzY3AgICAgc3AgICBTZXQgY3VycmVudCBjb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpciB0byAjMQorICAgICAgIHNldF9mb3JlZ3JvdW5kICAgICAgICAgICAgc2V0ZiAgIFNmICAgU2V0IGZvcmVncm91bmQgY29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxCisgICAgICAgc2V0X2xlZnRfbWFyZ2luICAgICAgICAgICBzbWdsICAgTUwgICBzZXQgbGVmdCBzb2Z0IG1hcmdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgY3VycmVudCBjb2x1bW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgc21nbC4gKE1MIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQlNEIHRlcm1jYXApLgorICAgICAgIHNldF9sZWZ0X21hcmdpbl9wYXJtICAgICAgc21nbHAgIFptICAgU2V0IGxlZnQgKHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luIGF0IGNvbHVtbiAjMQorICAgICAgIHNldF9yaWdodF9tYXJnaW4gICAgICAgICAgc21nciAgIE1SICAgc2V0IHJpZ2h0IHNvZnQgbWFyLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2luIGF0IGN1cnJlbnQgY29sLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW1uCisgICAgICAgc2V0X3JpZ2h0X21hcmdpbl9wYXJtICAgICBzbWdycCAgWm4gICBTZXQgcmlnaHQgbWFyZ2luIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gIzEKKworICAgICAgIHNldF90YWIgICAgICAgICAgICAgICAgICAgaHRzICAgIHN0ICAgc2V0IGEgdGFiIGluIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csIGN1cnJlbnQgY29sdW1ucworICAgICAgIHNldF90b3BfbWFyZ2luICAgICAgICAgICAgc21ndCAgIFpvICAgU2V0IHRvcCBtYXJnaW4gYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgbGluZQorICAgICAgIHNldF90b3BfbWFyZ2luX3Bhcm0gICAgICAgc21ndHAgIFpwICAgU2V0IHRvcCAoYm90dG9tKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luIGF0IHJvdyAjMQorICAgICAgIHNldF93aW5kb3cgICAgICAgICAgICAgICAgd2luZCAgIHdpICAgY3VycmVudCB3aW5kb3cgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzICMxLSMyIGNvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMzLSM0CisgICAgICAgc3RhcnRfYml0X2ltYWdlICAgICAgICAgICBzYmltICAgWnEgICBTdGFydCBwcmludGluZyBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIGdyYXBoaWNzCisgICAgICAgc3RhcnRfY2hhcl9zZXRfZGVmICAgICAgICBzY3NkICAgWnIgICBTdGFydCBjaGFyYWN0ZXIgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uICMxLCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMiBjaGFyYWN0ZXJzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0CisgICAgICAgc3RvcF9iaXRfaW1hZ2UgICAgICAgICAgICByYmltICAgWnMgICBTdG9wIHByaW50aW5nIGJpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgZ3JhcGhpY3MKKyAgICAgICBzdG9wX2NoYXJfc2V0X2RlZiAgICAgICAgIHJjc2QgICBadCAgIEVuZCBkZWZpbml0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgc2V0ICMxCisgICAgICAgc3Vic2NyaXB0X2NoYXJhY3RlcnMgICAgICBzdWJjcyAgWnUgICBMaXN0IG9mIHN1YnNjcmlwdC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFibGUgY2hhcmFjdGVycworICAgICAgIHN1cGVyc2NyaXB0X2NoYXJhY3RlcnMgICAgc3VwY3MgIFp2ICAgTGlzdCBvZiBzdXBlcnNjcmlwdC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFibGUgY2hhcmFjdGVycworICAgICAgIHRhYiAgICAgICAgICAgICAgICAgICAgICAgaHQgICAgIHRhICAgdGFiIHRvIG5leHQgOC1zcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgdGFiIHN0b3AKKyAgICAgICB0aGVzZV9jYXVzZV9jciAgICAgICAgICAgIGRvY3IgICBadyAgIFByaW50aW5nIGFueSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2VzIENSCisgICAgICAgdG9fc3RhdHVzX2xpbmUgICAgICAgICAgICB0c2wgICAgdHMgICBtb3ZlIHRvIHN0YXR1cyBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICMxCisgICAgICAgdG9uZSAgICAgICAgICAgICAgICAgICAgICB0b25lICAgVE8gICBzZWxlY3QgdG91Y2ggdG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbGluZworICAgICAgIHVuZGVybGluZV9jaGFyICAgICAgICAgICAgdWMgICAgIHVjICAgdW5kZXJsaW5lIGNoYXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlIHBhc3QgaXQKKyAgICAgICB1cF9oYWxmX2xpbmUgICAgICAgICAgICAgIGh1ICAgICBodSAgIGhhbGYgYSBsaW5lIHVwCisgICAgICAgdXNlcjAgICAgICAgICAgICAgICAgICAgICB1MCAgICAgdTAgICBVc2VyIHN0cmluZyAjMAorICAgICAgIHVzZXIxICAgICAgICAgICAgICAgICAgICAgdTEgICAgIHUxICAgVXNlciBzdHJpbmcgIzEKKyAgICAgICB1c2VyMiAgICAgICAgICAgICAgICAgICAgIHUyICAgICB1MiAgIFVzZXIgc3RyaW5nICMyCisgICAgICAgdXNlcjMgICAgICAgICAgICAgICAgICAgICB1MyAgICAgdTMgICBVc2VyIHN0cmluZyAjMworICAgICAgIHVzZXI0ICAgICAgICAgICAgICAgICAgICAgdTQgICAgIHU0ICAgVXNlciBzdHJpbmcgIzQKKyAgICAgICB1c2VyNSAgICAgICAgICAgICAgICAgICAgIHU1ICAgICB1NSAgIFVzZXIgc3RyaW5nICM1CisgICAgICAgdXNlcjYgICAgICAgICAgICAgICAgICAgICB1NiAgICAgdTYgICBVc2VyIHN0cmluZyAjNgorICAgICAgIHVzZXI3ICAgICAgICAgICAgICAgICAgICAgdTcgICAgIHU3ICAgVXNlciBzdHJpbmcgIzcKKyAgICAgICB1c2VyOCAgICAgICAgICAgICAgICAgICAgIHU4ICAgICB1OCAgIFVzZXIgc3RyaW5nICM4CisgICAgICAgdXNlcjkgICAgICAgICAgICAgICAgICAgICB1OSAgICAgdTkgICBVc2VyIHN0cmluZyAjOQorICAgICAgIHdhaXRfdG9uZSAgICAgICAgICAgICAgICAgd2FpdCAgIFdBICAgd2FpdCBmb3IgZGlhbC10b25lCisgICAgICAgeG9mZl9jaGFyYWN0ZXIgICAgICAgICAgICB4b2ZmYyAgWEYgICBYT0ZGIGNoYXJhY3RlcgorICAgICAgIHhvbl9jaGFyYWN0ZXIgICAgICAgICAgICAgeG9uYyAgIFhOICAgWE9OIGNoYXJhY3RlcgorICAgICAgIHplcm9fbW90aW9uICAgICAgICAgICAgICAgemVyb20gIFp4ICAgTm8gbW90aW9uIGZvciBzdWJzZS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZW50IGNoYXJhY3RlcgorCisgICAgICAgVGhlICBmb2xsb3dpbmcgIHN0cmluZyAgY2FwYWJpbGl0aWVzICBhcmUgIHByZXNlbnQgIGluIHRoZQorICAgICAgIFNWcjQuMCB0ZXJtIHN0cnVjdHVyZSwgYnV0IHdlcmUgb3JpZ2luYWxseSBub3QgIGRvY3VtZW50ZWQKKyAgICAgICBpbiB0aGUgbWFuIHBhZ2UuCisKKworICAgICAgICAgICAgICAgPFNUUk9ORz5WYXJpYWJsZTwvU1RST05HPiAgICAgICAgICA8U1RST05HPkNhcC08L1NUUk9ORz4gICAgIDxTVFJPTkc+VENhcDwvU1RST05HPiAgICA8U1RST05HPkRlc2NyaXB0aW9uPC9TVFJPTkc+CisgICAgICAgICAgICAgICAgPFNUUk9ORz5TdHJpbmc8L1NUUk9ORz4gICAgICAgICAgIDxTVFJPTkc+bmFtZTwvU1RST05HPiAgICAgPFNUUk9ORz5Db2RlPC9TVFJPTkc+CisgICAgICAgYWx0X3NjYW5jb2RlX2VzYyAgICAgICAgICBzY2VzYSAgICBTOCAgIEFsdGVybmF0ZSBlc2NhcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNjYW5jb2RlIGVtdS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aW9uCisgICAgICAgYml0X2ltYWdlX2NhcnJpYWdlX3JldHVybiBiaWNyICAgICBZdiAgIE1vdmUgdG8gYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNhbWUgcm93CisgICAgICAgYml0X2ltYWdlX25ld2xpbmUgICAgICAgICBiaW5lbCAgICBaeiAgIE1vdmUgdG8gbmV4dCByb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGJpdCBpbWFnZQorCisgICAgICAgYml0X2ltYWdlX3JlcGVhdCAgICAgICAgICBiaXJlcCAgICBYeSAgIFJlcGVhdCBiaXQgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCAjMSAjMiB0aW1lcworICAgICAgIGNoYXJfc2V0X25hbWVzICAgICAgICAgICAgY3NubSAgICAgWnkgICBQcm9kdWNlICMxJ3RoIGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBsaXN0IG9mIGNoYXItCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGVyIHNldCBuYW1lcworICAgICAgIGNvZGVfc2V0X2luaXQgICAgICAgICAgICAgY3NpbiAgICAgY2kgICBJbml0IHNlcXVlbmNlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBjb2Rlc2V0cworICAgICAgIGNvbG9yX25hbWVzICAgICAgICAgICAgICAgY29sb3JubSAgWXcgICBHaXZlIG5hbWUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yICMxCisgICAgICAgZGVmaW5lX2JpdF9pbWFnZV9yZWdpb24gICBkZWZiaSAgICBZeCAgIERlZmluZSByZWN0YW4tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1YWxhciBiaXQgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uCisgICAgICAgZGV2aWNlX3R5cGUgICAgICAgICAgICAgICBkZXZ0ICAgICBkdiAgIEluZGljYXRlIGxhbi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VhZ2UvY29kZXNldCBzdXAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQKKyAgICAgICBkaXNwbGF5X3BjX2NoYXIgICAgICAgICAgIGRpc3BjICAgIFMxICAgRGlzcGxheSBQQyBjaGFyYWMtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlciAjMQorICAgICAgIGVuZF9iaXRfaW1hZ2VfcmVnaW9uICAgICAgZW5kYmkgICAgWXkgICBFbmQgYSBiaXQtaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uCisgICAgICAgZW50ZXJfcGNfY2hhcnNldF9tb2RlICAgICBzbXBjaCAgICBTMiAgIEVudGVyIFBDIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IG1vZGUKKyAgICAgICBlbnRlcl9zY2FuY29kZV9tb2RlICAgICAgIHNtc2MgICAgIFM0ICAgRW50ZXIgUEMgc2NhbmNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZQorICAgICAgIGV4aXRfcGNfY2hhcnNldF9tb2RlICAgICAgcm1wY2ggICAgUzMgICBFeGl0IFBDIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IG1vZGUKKyAgICAgICBleGl0X3NjYW5jb2RlX21vZGUgICAgICAgIHJtc2MgICAgIFM1ICAgRXhpdCBQQyBzY2FuY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgZ2V0X21vdXNlICAgICAgICAgICAgICAgICBnZXRtICAgICBHbSAgIEN1cnNlcyBzaG91bGQgZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciAjMSBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRlZC4KKyAgICAgICBrZXlfbW91c2UgICAgICAgICAgICAgICAgIGttb3VzICAgIEttICAgTW91c2UgZXZlbnQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jY3VycmVkCisgICAgICAgbW91c2VfaW5mbyAgICAgICAgICAgICAgICBtaW5mbyAgICBNaSAgIE1vdXNlIHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbgorICAgICAgIHBjX3Rlcm1fb3B0aW9ucyAgICAgICAgICAgcGN0cm0gICAgUzYgICBQQyB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zCisgICAgICAgcGtleV9wbGFiICAgICAgICAgICAgICAgICBwZnhsICAgICB4bCAgIFByb2dyYW0gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ICMxIHRvIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICMyIGFuZCBzaG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAjMworICAgICAgIHJlcV9tb3VzZV9wb3MgICAgICAgICAgICAgcmVxbXAgICAgUlEgICBSZXF1ZXN0IG1vdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uCisgICAgICAgc2NhbmNvZGVfZXNjYXBlICAgICAgICAgICBzY2VzYyAgICBTNyAgIEVzY2FwZSBmb3Igc2Nhbi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSBlbXVsYXRpb24KKyAgICAgICBzZXQwX2Rlc19zZXEgICAgICAgICAgICAgIHMwZHMgICAgIHMwICAgU2hpZnQgdG8gY29kZXNldCAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFVUMgc2V0IDAsIEFTQ0lJKQorICAgICAgIHNldDFfZGVzX3NlcSAgICAgICAgICAgICAgczFkcyAgICAgczEgICBTaGlmdCB0byBjb2Rlc2V0IDEKKyAgICAgICBzZXQyX2Rlc19zZXEgICAgICAgICAgICAgIHMyZHMgICAgIHMyICAgU2hpZnQgdG8gY29kZXNldCAyCisgICAgICAgc2V0M19kZXNfc2VxICAgICAgICAgICAgICBzM2RzICAgICBzMyAgIFNoaWZ0IHRvIGNvZGVzZXQgMworICAgICAgIHNldF9hX2JhY2tncm91bmQgICAgICAgICAgc2V0YWIgICAgQUIgICBTZXQgYmFja2dyb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciB0byAjMSwgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5TSSBlc2NhcGUKKyAgICAgICBzZXRfYV9mb3JlZ3JvdW5kICAgICAgICAgIHNldGFmICAgIEFGICAgU2V0IGZvcmVncm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgdG8gIzEsIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOU0kgZXNjYXBlCisgICAgICAgc2V0X2NvbG9yX2JhbmQgICAgICAgICAgICBzZXRjb2xvciBZeiAgIENoYW5nZSB0byByaWJib24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgIzEKKyAgICAgICBzZXRfbHJfbWFyZ2luICAgICAgICAgICAgIHNtZ2xyICAgIE1MICAgU2V0IGJvdGggbGVmdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgbWFyZ2lucyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSwgIzIuICAoTUwgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGluIEJTRCB0ZXJtLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXApLgorICAgICAgIHNldF9wYWdlX2xlbmd0aCAgICAgICAgICAgc2xpbmVzICAgWVogICBTZXQgcGFnZSBsZW5ndGggdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgbGluZXMKKworICAgICAgIHNldF90Yl9tYXJnaW4gICAgICAgICAgICAgc21ndGIgICAgTVQgICBTZXRzIGJvdGggdG9wIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gbWFyZ2lucyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSwgIzIKKworICAgICAgICBUaGUgWFNJIEN1cnNlcyAgc3RhbmRhcmQgIGFkZGVkICB0aGVzZS4gICBUaGV5ICBhcmUgIHNvbWUKKyAgICAgICAgcG9zdC00LjEgIHZlcnNpb25zICBvZiBTeXN0ZW0gViBjdXJzZXMsIGUuZy4sIFNvbGFyaXMgMi41CisgICAgICAgIGFuZCBJUklYIDYueC4gIFRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdGVybWNhcCAgbmFtZXMgIGZvciAgdGhlbSAgYXJlCisgICAgICAgIGludmVudGVkOyBhY2NvcmRpbmcgdG8gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIHRoZXkgaGF2ZQorICAgICAgICBubyB0ZXJtY2FwIG5hbWVzLiAgSWYgeW91ciBjb21waWxlZCB0ZXJtaW5mbyBlbnRyaWVzICB1c2UKKyAgICAgICAgdGhlc2UsICB0aGV5ICBtYXkgIG5vdCBiZSBiaW5hcnktY29tcGF0aWJsZSB3aXRoIFN5c3RlbSBWCisgICAgICAgIHRlcm1pbmZvIGVudHJpZXMgYWZ0ZXIgU1ZyNC4xOyBiZXdhcmUhCisKKworICAgICAgICAgICAgICAgIDxTVFJPTkc+VmFyaWFibGU8L1NUUk9ORz4gICAgICAgICA8U1RST05HPkNhcC08L1NUUk9ORz4gICA8U1RST05HPlRDYXA8L1NUUk9ORz4gICAgIDxTVFJPTkc+RGVzY3JpcHRpb248L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgPFNUUk9ORz5TdHJpbmc8L1NUUk9ORz4gICAgICAgICAgPFNUUk9ORz5uYW1lPC9TVFJPTkc+ICAgPFNUUk9ORz5Db2RlPC9TVFJPTkc+CisgICAgICAgIGVudGVyX2hvcml6b250YWxfaGxfbW9kZSBlaGhsbSAgWGggICBFbnRlciBob3Jpem9udGFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQgbW9kZQorICAgICAgICBlbnRlcl9sZWZ0X2hsX21vZGUgICAgICAgZWxobG0gIFhsICAgRW50ZXIgbGVmdCBoaWdobGlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUKKyAgICAgICAgZW50ZXJfbG93X2hsX21vZGUgICAgICAgIGVsb2hsbSBYbyAgIEVudGVyIGxvdyBoaWdobGlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUKKyAgICAgICAgZW50ZXJfcmlnaHRfaGxfbW9kZSAgICAgIGVyaGxtICBYciAgIEVudGVyIHJpZ2h0IGhpZ2gtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodCBtb2RlCisgICAgICAgIGVudGVyX3RvcF9obF9tb2RlICAgICAgICBldGhsbSAgWHQgICBFbnRlciB0b3AgaGlnaGxpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlCisgICAgICAgIGVudGVyX3ZlcnRpY2FsX2hsX21vZGUgICBldmhsbSAgWHYgICBFbnRlciB2ZXJ0aWNhbCBoaWdoLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQgbW9kZQorICAgICAgICBzZXRfYV9hdHRyaWJ1dGVzICAgICAgICAgc2dyMSAgIHNBICAgRGVmaW5lIHNlY29uZCBzZXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxLSM2CisgICAgICAgIHNldF9wZ2xlbl9pbmNoICAgICAgICAgICBzbGVuZ3Roc0wgICBZSSBTZXQgcGFnZSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvICMxIGh1bmRyZWR0aCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gaW5jaAorCisgICA8U1RST05HPkE8L1NUUk9ORz4gPFNUUk9ORz5TYW1wbGU8L1NUUk9ORz4gPFNUUk9ORz5FbnRyeTwvU1RST05HPgorICAgICAgIFRoZSBmb2xsb3dpbmcgZW50cnksIGRlc2NyaWJpbmcgYW4gQU5TSS1zdGFuZGFyZCB0ZXJtaW5hbCwKKyAgICAgICBpcyAgcmVwcmVzZW50YXRpdmUgIG9mICB3aGF0IGEgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBlbnRyeSBmb3IgYSBtb2Rlcm4KKyAgICAgICB0ZXJtaW5hbCB0eXBpY2FsbHkgbG9va3MgbGlrZS4KKworICAgICBhbnNpfGFuc2kvcGMtdGVybSBjb21wYXRpYmxlIHdpdGggY29sb3IsCisgICAgICAgICAgICAgbWM1aSwKKyAgICAgICAgICAgICBjb2xvcnMjOCwgbmN2IzMsIHBhaXJzIzY0LAorICAgICAgICAgICAgIGN1Yj1cRVslcDElZEQsIGN1ZD1cRVslcDElZEIsIGN1Zj1cRVslcDElZEMsCisgICAgICAgICAgICAgY3V1PVxFWyVwMSVkQSwgZGNoPVxFWyVwMSVkUCwgZGw9XEVbJXAxJWRNLAorICAgICAgICAgICAgIGVjaD1cRVslcDElZFgsIGVsMT1cRVsxSywgaHBhPVxFWyVwMSVkRywgaHQ9XEVbSSwKKyAgICAgICAgICAgICBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGluZG49XEVbJXAxJWRTLCAuaW5kbj1cRVslcDElZFQsCisgICAgICAgICAgICAga2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisgICAgICAgICAgICAga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFW00sIGtmMTA9XEVbViwKKyAgICAgICAgICAgICBrZjExPVxFW1csIGtmMTI9XEVbWCwga2YyPVxFW04sIGtmMz1cRVtPLCBrZjQ9XEVbUCwKKyAgICAgICAgICAgICBrZjU9XEVbUSwga2Y2PVxFW1IsIGtmNz1cRVtTLCBrZjg9XEVbVCwga2Y5PVxFW1UsCisgICAgICAgICAgICAga2ljaDE9XEVbTCwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIG5lbD1cclxFW1MsCisgICAgICAgICAgICAgb3A9XEVbMzc7NDBtLCByZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsCisgICAgICAgICAgICAgcmluPVxFWyVwMSVkVCwgczBkcz1cRShCLCBzMWRzPVxFKUIsIHMyZHM9XEUqQiwKKyAgICAgICAgICAgICBzM2RzPVxFK0IsIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisgICAgICAgICAgICAgc2V0Yj1cRVs0JT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorICAgICAgICAgICAgIHNldGY9XEVbMyU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKyAgICAgICAgICAgICBzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA4JXQ7MTElOyU/JXA5JXQ7MTIlO20sCisgICAgICAgICAgICAgc2dyMD1cRVswOzEwbSwgdGJjPVxFWzJnLCB1Nj1cRVslZDslZFIsIHU3PVxFWzZuLAorICAgICAgICAgICAgIHU4PVxFWz8lWzswMTIzNDU2Nzg5XWMsIHU5PVxFW2MsIHZwYT1cRVslcDElZGQsCisKKyAgICAgICBFbnRyaWVzIG1heSBjb250aW51ZSBvbnRvIG11bHRpcGxlIGxpbmVzIGJ5IHBsYWNpbmcgIHdoaXRlCisgICAgICAgc3BhY2UgIGF0ICB0aGUgIGJlZ2lubmluZyAgb2YgIGVhY2ggbGluZSBleGNlcHQgdGhlIGZpcnN0LgorICAgICAgIENvbW1lbnRzIG1heSBiZSBpbmNsdWRlZCBvbiBsaW5lcyAgYmVnaW5uaW5nICB3aXRoICBgYCMnJy4KKyAgICAgICBDYXBhYmlsaXRpZXMgaW4gPEVNPnRlcm1pbmZvPC9FTT4gYXJlIG9mIHRocmVlIHR5cGVzOiBCb29sZWFuIGNhcGEtCisgICAgICAgYmlsaXRpZXMgd2hpY2ggaW5kaWNhdGUgdGhhdCB0aGUgdGVybWluYWwgaGFzIHNvbWUgcGFydGljLQorICAgICAgIHVsYXIgIGZlYXR1cmUsIG51bWVyaWMgY2FwYWJpbGl0aWVzIGdpdmluZyB0aGUgc2l6ZSBvZiB0aGUKKyAgICAgICB0ZXJtaW5hbCBvciB0aGUgc2l6ZSAgb2YgIHBhcnRpY3VsYXIgIGRlbGF5cywgIGFuZCAgc3RyaW5nCisgICAgICAgY2FwYWJpbGl0aWVzLCAgd2hpY2ggIGdpdmUgYSBzZXF1ZW5jZSB3aGljaCBjYW4gYmUgdXNlZCB0bworICAgICAgIHBlcmZvcm0gcGFydGljdWxhciB0ZXJtaW5hbCBvcGVyYXRpb25zLgorCisKKyAgIDxTVFJPTkc+VHlwZXM8L1NUUk9ORz4gPFNUUk9ORz5vZjwvU1RST05HPiA8U1RST05HPkNhcGFiaWxpdGllczwvU1RST05HPgorICAgICAgIEFsbCBjYXBhYmlsaXRpZXMgaGF2ZSBuYW1lcy4gIEZvciBpbnN0YW5jZSwgdGhlIGZhY3QgIHRoYXQKKyAgICAgICBBTlNJLXN0YW5kYXJkICB0ZXJtaW5hbHMgIGhhdmUgPEVNPmF1dG9tYXRpYzwvRU0+IDxFTT5tYXJnaW5zPC9FTT4gKGkuZS4sIGFuCisgICAgICAgYXV0b21hdGljIHJldHVybiBhbmQgbGluZS1mZWVkIHdoZW4gdGhlIGVuZCBvZiBhICBsaW5lICBpcworICAgICAgIHJlYWNoZWQpICBpcyAgaW5kaWNhdGVkICBieSAgdGhlIGNhcGFiaWxpdHkgPFNUUk9ORz5hbTwvU1RST05HPi4gIEhlbmNlIHRoZQorICAgICAgIGRlc2NyaXB0aW9uIG9mIGFuc2kgaW5jbHVkZXMgPFNUUk9ORz5hbTwvU1RST05HPi4gIE51bWVyaWMgY2FwYWJpbGl0aWVzIGFyZQorICAgICAgIGZvbGxvd2VkICBieSAgdGhlIGNoYXJhY3RlciBgIycgYW5kIHRoZW4gYSBwb3NpdGl2ZSB2YWx1ZS4KKyAgICAgICBUaHVzIDxTVFJPTkc+Y29sczwvU1RST05HPiwgd2hpY2ggaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgIHRlci0KKyAgICAgICBtaW5hbCAgaGFzLCAgZ2l2ZXMgIHRoZSAgdmFsdWUgIGA4MCcgZm9yIGFuc2kuICBWYWx1ZXMgZm9yCisgICAgICAgbnVtZXJpYyBjYXBhYmlsaXRpZXMgbWF5IGJlIHNwZWNpZmllZCBpbiBkZWNpbWFsLCBvY3RhbCBvcgorICAgICAgIGhleGFkZWNpbWFsLCAgdXNpbmcgdGhlIEMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgY29udmVudGlvbnMKKyAgICAgICAoZS5nLiwgMjU1LCAwMzc3IGFuZCAweGZmIG9yIDB4RkYpLgorCisgICAgICAgRmluYWxseSwgc3RyaW5nIHZhbHVlZCBjYXBhYmlsaXRpZXMsIHN1Y2ggYXMgPFNUUk9ORz5lbDwvU1RST05HPiAoY2xlYXIgIHRvCisgICAgICAgZW5kIG9mIGxpbmUgc2VxdWVuY2UpIGFyZSBnaXZlbiBieSB0aGUgdHdvLWNoYXJhY3RlciBjb2RlLAorICAgICAgIGFuIGA9JywgYW5kIHRoZW4gYSBzdHJpbmcgZW5kaW5nICBhdCAgdGhlICBuZXh0ICBmb2xsb3dpbmcKKyAgICAgICBgLCcuCisKKyAgICAgICBBICBudW1iZXIgIG9mICBlc2NhcGUgc2VxdWVuY2VzIGFyZSBwcm92aWRlZCBpbiB0aGUgc3RyaW5nCisgICAgICAgdmFsdWVkIGNhcGFiaWxpdGllcyBmb3IgZWFzeSBlbmNvZGluZyBvZiBjaGFyYWN0ZXJzIHRoZXJlLgorICAgICAgIEJvdGggIDxTVFJPTkc+XEU8L1NUUk9ORz4gIGFuZCAgPFNUUk9ORz5cZTwvU1RST05HPiBtYXAgdG8gYW4gRVNDQVBFIGNoYXJhY3RlciwgPFNUUk9ORz5eeDwvU1RST05HPiBtYXBzIHRvIGEKKyAgICAgICBjb250cm9sLXggZm9yIGFueSBhcHByb3ByaWF0ZSB4LCBhbmQgdGhlIHNlcXVlbmNlcyAgPFNUUk9ORz5cbjwvU1RST05HPiAgPFNUUk9ORz5cbDwvU1RST05HPgorICAgICAgIDxTVFJPTkc+XHI8L1NUUk9ORz4gIDxTVFJPTkc+XHQ8L1NUUk9ORz4gIDxTVFJPTkc+XGI8L1NUUk9ORz4gIDxTVFJPTkc+XGY8L1NUUk9ORz4gIDxTVFJPTkc+XHM8L1NUUk9ORz4gZ2l2ZSBhIG5ld2xpbmUsIGxpbmUtZmVlZCwgcmV0dXJuLCB0YWIsCisgICAgICAgYmFja3NwYWNlLCBmb3JtLWZlZWQsIGFuZCBzcGFjZS4gIE90aGVyIGVzY2FwZXMgaW5jbHVkZSA8U1RST05HPlxePC9TVFJPTkc+CisgICAgICAgZm9yICA8U1RST05HPl48L1NUUk9ORz4sIDxTVFJPTkc+XFw8L1NUUk9ORz4gZm9yIDxTVFJPTkc+XDwvU1RST05HPiwgPFNUUk9ORz5cPC9TVFJPTkc+LCBmb3IgY29tbWEsIDxTVFJPTkc+XDo8L1NUUk9ORz4gZm9yIDxTVFJPTkc+OjwvU1RST05HPiwgYW5kIDxTVFJPTkc+XDA8L1NUUk9ORz4gZm9yIG51bGwuCisgICAgICAgKDxTVFJPTkc+XDA8L1NUUk9ORz4gd2lsbCBwcm9kdWNlIFwyMDAsIHdoaWNoIGRvZXMgbm90IHRlcm1pbmF0ZSAgYSAgc3RyaW5nCisgICAgICAgYnV0IGJlaGF2ZXMgYXMgYSBudWxsIGNoYXJhY3RlciBvbiBtb3N0IHRlcm1pbmFscywgcHJvdmlkLQorICAgICAgIGluZyBDUzcgaXMgc3BlY2lmaWVkLiAgU2VlIDxTVFJPTkc+PEEgSFJFRj0ic3R0eS4xLmh0bWwiPnN0dHkoMSk8L0E+PC9TVFJPTkc+LikgIEZpbmFsbHksICBjaGFyYWN0ZXJzCisgICAgICAgbWF5IGJlIGdpdmVuIGFzIHRocmVlIG9jdGFsIGRpZ2l0cyBhZnRlciBhIDxTVFJPTkc+XDwvU1RST05HPi4KKworICAgICAgIEEgIGRlbGF5ICBpbiAgbWlsbGlzZWNvbmRzIG1heSBhcHBlYXIgYW55d2hlcmUgaW4gYSBzdHJpbmcKKyAgICAgICBjYXBhYmlsaXR5LCBlbmNsb3NlZCBpbiAkJmx0Oy4uJmd0OyBicmFja2V0cywgYXMgaW4gIDxTVFJPTkc+ZWw8L1NUUk9ORz49XEVLJCZsdDs1Jmd0OywKKyAgICAgICBhbmQgIHBhZGRpbmcgIGNoYXJhY3RlcnMgIGFyZSBzdXBwbGllZCBieSA8RU0+dHB1dHM8L0VNPiB0byBwcm92aWRlCisgICAgICAgdGhpcyBkZWxheS4gIFRoZSBkZWxheSBtdXN0IGJlIGEgbnVtYmVyIHdpdGggYXQgIG1vc3QgIG9uZQorICAgICAgIGRlY2ltYWwgcGxhY2Ugb2YgcHJlY2lzaW9uOyBpdCBtYXkgYmUgZm9sbG93ZWQgYnkgc3VmZml4ZXMKKyAgICAgICBgKicgb3IgJy8nIG9yIGJvdGguICBBICBgKicgIGluZGljYXRlcyAgdGhhdCAgdGhlICBwYWRkaW5nCisgICAgICAgcmVxdWlyZWQgIGlzICBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBsaW5lcyBhZmZlY3RlZAorICAgICAgIGJ5IHRoZSAgb3BlcmF0aW9uLCAgYW5kICB0aGUgIGFtb3VudCAgZ2l2ZW4gIGlzICB0aGUgIHBlci0KKyAgICAgICBhZmZlY3RlZC11bml0ICBwYWRkaW5nICByZXF1aXJlZC4gICAoSW4gdGhlIGNhc2Ugb2YgaW5zZXJ0CisgICAgICAgY2hhcmFjdGVyLCAgdGhlICBmYWN0b3IgIGlzICBzdGlsbCAgdGhlICBudW1iZXIgIG9mICA8RU0+bGluZXM8L0VNPgorICAgICAgIGFmZmVjdGVkLikgICBOb3JtYWxseSwgIHBhZGRpbmcgIGlzIGFkdmlzb3J5IGlmIHRoZSBkZXZpY2UKKyAgICAgICBoYXMgdGhlIDxTVFJPTkc+eG9uPC9TVFJPTkc+IGNhcGFiaWxpdHk7IGl0IGlzIHVzZWQgIGZvciAgY29zdCAgY29tcHV0YXRpb24KKyAgICAgICBidXQgIGRvZXMgbm90IHRyaWdnZXIgZGVsYXlzLiAgQSBgLycgc3VmZml4IGluZGljYXRlcyB0aGF0CisgICAgICAgdGhlIHBhZGRpbmcgaXMgbWFuZGF0b3J5IGFuZCBmb3JjZXMgYSBkZWxheSBvZiAgdGhlICBnaXZlbgorICAgICAgIG51bWJlciAgb2YgIG1pbGxpc2Vjb25kcyAgZXZlbiBvbiBkZXZpY2VzIGZvciB3aGljaCA8U1RST05HPnhvbjwvU1RST05HPiBpcworICAgICAgIHByZXNlbnQgdG8gaW5kaWNhdGUgZmxvdyBjb250cm9sLgorCisgICAgICAgU29tZXRpbWVzIGluZGl2aWR1YWwgY2FwYWJpbGl0aWVzIG11c3QgYmUgIGNvbW1lbnRlZCAgb3V0LgorICAgICAgIFRvICBkbyB0aGlzLCBwdXQgYSBwZXJpb2QgYmVmb3JlIHRoZSBjYXBhYmlsaXR5IG5hbWUuICBGb3IKKyAgICAgICBleGFtcGxlLCBzZWUgdGhlIHNlY29uZCA8U1RST05HPmluZDwvU1RST05HPiBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KKworCisgICA8U1RST05HPkZldGNoaW5nPC9TVFJPTkc+IDxTVFJPTkc+Q29tcGlsZWQ8L1NUUk9ORz4gPFNUUk9ORz5EZXNjcmlwdGlvbnM8L1NUUk9ORz4KKyAgICAgICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVEVSTUlORk8gaXMgc2V0LCBpdCBpcyAgaW50ZXItCisgICAgICAgcHJldGVkICBhcyB0aGUgcGF0aG5hbWUgb2YgYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY29tLQorICAgICAgIHBpbGVkIGRlc2NyaXB0aW9uIHlvdSBhcmUgd29ya2luZyBvbi4gIE9ubHkgdGhhdCBkaXJlY3RvcnkKKyAgICAgICBpcyBzZWFyY2hlZC4KKworICAgICAgIElmICBURVJNSU5GTyAgaXMgIG5vdCBzZXQsIHRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiBvZiB0aGUgdGVyLQorICAgICAgIG1pbmZvIHJlYWRlciBjb2RlICB3aWxsICBpbnN0ZWFkICBsb29rICBpbiAgdGhlICBkaXJlY3RvcnkKKyAgICAgICA8U1RST05HPiRIT01FLy50ZXJtaW5mbzwvU1RST05HPiAgZm9yICBhIGNvbXBpbGVkIGRlc2NyaXB0aW9uLiAgSWYgaXQgZmFpbHMKKyAgICAgICB0byBmaW5kIG9uZSAgdGhlcmUsICBhbmQgIHRoZSAgZW52aXJvbm1lbnQgIHZhcmlhYmxlICBURVItCisgICAgICAgTUlORk9fRElSUyAgaXMgc2V0LCBpdCB3aWxsIGludGVycHJldCB0aGUgY29udGVudHMgb2YgdGhhdAorICAgICAgIHZhcmlhYmxlIGFzIGEgbGlzdCBvZiBjb2xvbi0gc2VwYXJhdGVkIGRpcmVjdG9yaWVzICB0byAgYmUKKyAgICAgICBzZWFyY2hlZCAgKGFuICBlbXB0eSAgZW50cnkgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kIHRvCisgICAgICAgc2VhcmNoIDxFTT4vdXNyL3NoYXJlL3Rlcm1pbmZvPC9FTT4pLiAgSWYgbm8gZGVzY3JpcHRpb24gIGlzICBmb3VuZAorICAgICAgIGluICBhbnkgb2YgdGhlIFRFUk1JTkZPX0RJUlMgZGlyZWN0b3JpZXMsIHRoZSBmZXRjaCBmYWlscy4KKworICAgICAgIElmIG5laXRoZXIgVEVSTUlORk8gbm9yIFRFUk1JTkZPX0RJUlMgIGlzICBzZXQsICB0aGUgIGxhc3QKKyAgICAgICBwbGFjZSAgIHRyaWVkICB3aWxsICBiZSAgdGhlICBzeXN0ZW0gIHRlcm1pbmZvICBkaXJlY3RvcnksCisgICAgICAgPEVNPi91c3Ivc2hhcmUvdGVybWluZm88L0VNPi4KKworICAgICAgIChOZWl0aGVyIHRoZSAgPFNUUk9ORz4kSE9NRS8udGVybWluZm88L1NUUk9ORz4gIGxvb2t1cHMgIG5vciAgVEVSTUlORk9fRElSUworICAgICAgIGV4dGVuc2lvbnMgICBhcmUgIHN1cHBvcnRlZCAgdW5kZXIgIHN0b2NrICBTeXN0ZW0gIFYgIHRlci0KKyAgICAgICBtaW5mby9jdXJzZXMuKQorCisKKyAgIDxTVFJPTkc+UHJlcGFyaW5nPC9TVFJPTkc+IDxTVFJPTkc+RGVzY3JpcHRpb25zPC9TVFJPTkc+CisgICAgICAgV2Ugbm93IG91dGxpbmUgaG93IHRvIHByZXBhcmUgZGVzY3JpcHRpb25zICBvZiAgdGVybWluYWxzLgorICAgICAgIFRoZSAgbW9zdCAgZWZmZWN0aXZlIHdheSB0byBwcmVwYXJlIGEgdGVybWluYWwgZGVzY3JpcHRpb24KKyAgICAgICBpcyBieSBpbWl0YXRpbmcgdGhlIGRlc2NyaXB0aW9uIG9mIGEgc2ltaWxhciAgdGVybWluYWwgIGluCisgICAgICAgPEVNPnRlcm1pbmZvPC9FTT4gIGFuZCAgdG8gIGJ1aWxkIHVwIGEgZGVzY3JpcHRpb24gZ3JhZHVhbGx5LCB1c2luZworICAgICAgIHBhcnRpYWwgZGVzY3JpcHRpb25zIHdpdGggPEVNPnZpPC9FTT4gb3Igc29tZSBvdGhlciBzY3JlZW4tb3JpZW50ZWQKKyAgICAgICBwcm9ncmFtICB0byAgY2hlY2sgdGhhdCB0aGV5IGFyZSBjb3JyZWN0LiAgQmUgYXdhcmUgdGhhdCBhCisgICAgICAgdmVyeSB1bnVzdWFsIHRlcm1pbmFsIG1heSBleHBvc2UgZGVmaWNpZW5jaWVzIGluIHRoZSBhYmlsLQorICAgICAgIGl0eSAgb2YgIHRoZSAgPEVNPnRlcm1pbmZvPC9FTT4gIGZpbGUgdG8gZGVzY3JpYmUgaXQgb3IgYnVncyBpbiB0aGUKKyAgICAgICBzY3JlZW4taGFuZGxpbmcgY29kZSBvZiB0aGUgdGVzdCBwcm9ncmFtLgorCisgICAgICAgVG8gZ2V0IHRoZSBwYWRkaW5nIGZvciBpbnNlcnQgbGluZSByaWdodCAoaWYgdGhlICB0ZXJtaW5hbAorICAgICAgIG1hbnVmYWN0dXJlciBkaWQgbm90IGRvY3VtZW50IGl0KSBhIHNldmVyZSB0ZXN0IGlzIHRvIGVkaXQKKyAgICAgICBhIGxhcmdlIGZpbGUgYXQgOTYwMCBiYXVkLCBkZWxldGUgMTYgb3Igc28gbGluZXMgZnJvbSAgdGhlCisgICAgICAgbWlkZGxlICBvZiAgdGhlIHNjcmVlbiwgdGhlbiBoaXQgdGhlIGB1JyBrZXkgc2V2ZXJhbCB0aW1lcworICAgICAgIHF1aWNrbHkuICBJZiB0aGUgdGVybWluYWwgbWVzc2VzIHVwLCBtb3JlIHBhZGRpbmcgaXMgIHVzdS0KKyAgICAgICBhbGx5ICBuZWVkZWQuICBBIHNpbWlsYXIgdGVzdCBjYW4gYmUgdXNlZCBmb3IgaW5zZXJ0IGNoYXItCisgICAgICAgYWN0ZXIuCisKKworICAgPFNUUk9ORz5CYXNpYzwvU1RST05HPiA8U1RST05HPkNhcGFiaWxpdGllczwvU1RST05HPgorICAgICAgIFRoZSBudW1iZXIgb2YgY29sdW1ucyBvbiBlYWNoIGxpbmUgIGZvciAgdGhlICB0ZXJtaW5hbCAgaXMKKyAgICAgICBnaXZlbiAgYnkgdGhlIDxTVFJPTkc+Y29sczwvU1RST05HPiBudW1lcmljIGNhcGFiaWxpdHkuICBJZiB0aGUgdGVybWluYWwgaXMKKyAgICAgICBhIENSVCwgdGhlbiB0aGUgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBzY3JlZW4gaXMgZ2l2ZW4gIGJ5CisgICAgICAgdGhlIDxTVFJPTkc+bGluZXM8L1NUUk9ORz4gY2FwYWJpbGl0eS4gIElmIHRoZSB0ZXJtaW5hbCB3cmFwcyBhcm91bmQgdG8gdGhlCisgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgd2hlbiBpdCByZWFjaGVzIHRoZSByaWdodCAgbWFyLQorICAgICAgIGdpbiwgdGhlbiBpdCBzaG91bGQgaGF2ZSB0aGUgPFNUUk9ORz5hbTwvU1RST05HPiBjYXBhYmlsaXR5LiAgSWYgdGhlIHRlcm1pLQorICAgICAgIG5hbCBjYW4gY2xlYXIgaXRzIHNjcmVlbiwgbGVhdmluZyB0aGUgY3Vyc29yIGluICB0aGUgIGhvbWUKKyAgICAgICBwb3NpdGlvbiwgIHRoZW4gdGhpcyBpcyBnaXZlbiBieSB0aGUgPFNUUk9ORz5jbGVhcjwvU1RST05HPiBzdHJpbmcgY2FwYWJpbC0KKyAgICAgICBpdHkuICBJZiB0aGUgdGVybWluYWwgb3ZlcnN0cmlrZXMgKHJhdGhlciB0aGFuIGNsZWFyaW5nICBhCisgICAgICAgcG9zaXRpb24gIHdoZW4gIGEgY2hhcmFjdGVyIGlzIHN0cnVjayBvdmVyKSB0aGVuIGl0IHNob3VsZAorICAgICAgIGhhdmUgdGhlIDxTVFJPTkc+b3M8L1NUUk9ORz4gY2FwYWJpbGl0eS4gIElmIHRoZSAgdGVybWluYWwgIGlzICBhICBwcmludGluZworICAgICAgIHRlcm1pbmFsLCAgd2l0aCBubyBzb2Z0IGNvcHkgdW5pdCwgZ2l2ZSBpdCBib3RoIDxTVFJPTkc+aGM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+b3M8L1NUUk9ORz4uCisgICAgICAgKDxTVFJPTkc+b3M8L1NUUk9ORz4gYXBwbGllcyB0byBzdG9yYWdlIHNjb3BlIHRlcm1pbmFscywgc3VjaCBhcyAgVEVLVFJPTklYCisgICAgICAgNDAxMCAgc2VyaWVzLCBhcyB3ZWxsIGFzIGhhcmQgY29weSBhbmQgQVBMIHRlcm1pbmFscy4pICBJZgorICAgICAgIHRoZXJlIGlzIGEgY29kZSB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGUKKyAgICAgICBjdXJyZW50IHJvdywgZ2l2ZSB0aGlzIGFzIDxTVFJPTkc+Y3I8L1NUUk9ORz4uICAoTm9ybWFsbHkgdGhpcyB3aWxsIGJlIGNhci0KKyAgICAgICByaWFnZSByZXR1cm4sIGNvbnRyb2wgTS4pICBJZiB0aGVyZSBpcyBhIGNvZGUgIHRvICBwcm9kdWNlCisgICAgICAgYW4gYXVkaWJsZSBzaWduYWwgKGJlbGwsIGJlZXAsIGV0YykgZ2l2ZSB0aGlzIGFzIDxTVFJPTkc+YmVsPC9TVFJPTkc+LgorCisgICAgICAgSWYgIHRoZXJlIGlzIGEgY29kZSB0byBtb3ZlIHRoZSBjdXJzb3Igb25lIHBvc2l0aW9uIHRvIHRoZQorICAgICAgIGxlZnQgKHN1Y2ggYXMgYmFja3NwYWNlKSB0aGF0IGNhcGFiaWxpdHkgc2hvdWxkICBiZSAgZ2l2ZW4KKyAgICAgICBhcyAgPFNUUk9ORz5jdWIxPC9TVFJPTkc+LiAgIFNpbWlsYXJseSwgY29kZXMgdG8gbW92ZSB0byB0aGUgcmlnaHQsIHVwLCBhbmQKKyAgICAgICBkb3duIHNob3VsZCBiZSBnaXZlbiBhcyA8U1RST05HPmN1ZjE8L1NUUk9ORz4sIDxTVFJPTkc+Y3V1MTwvU1RST05HPiwgYW5kIDxTVFJPTkc+Y3VkMTwvU1RST05HPi4gIFRoZXNlIGxvY2FsCisgICAgICAgY3Vyc29yICBtb3Rpb25zICBzaG91bGQgbm90IGFsdGVyIHRoZSB0ZXh0IHRoZXkgcGFzcyBvdmVyLAorICAgICAgIGZvciBleGFtcGxlLCB5b3Ugd291bGQgbm90IG5vcm1hbGx5IHVzZSAgYDxTVFJPTkc+Y3VmMTwvU1RST05HPj0gJyAgYmVjYXVzZQorICAgICAgIHRoZSBzcGFjZSB3b3VsZCBlcmFzZSB0aGUgY2hhcmFjdGVyIG1vdmVkIG92ZXIuCisKKyAgICAgICBBICB2ZXJ5ICBpbXBvcnRhbnQgIHBvaW50ICBoZXJlICBpcyAgdGhhdCB0aGUgbG9jYWwgY3Vyc29yCisgICAgICAgbW90aW9ucyBlbmNvZGVkIGluIDxFTT50ZXJtaW5mbzwvRU0+IGFyZSB1bmRlZmluZWQgYXQgdGhlIGxlZnQgIGFuZAorICAgICAgIHRvcCAgZWRnZXMgIG9mICBhICBDUlQgIHRlcm1pbmFsLiAgIFByb2dyYW1zICBzaG91bGQgbmV2ZXIKKyAgICAgICBhdHRlbXB0IHRvIGJhY2tzcGFjZSBhcm91bmQgdGhlIGxlZnQgZWRnZSwgIHVubGVzcyAgPFNUUk9ORz5idzwvU1RST05HPiAgaXMKKyAgICAgICBnaXZlbiwgYW5kIG5ldmVyIGF0dGVtcHQgdG8gZ28gdXAgbG9jYWxseSBvZmYgdGhlIHRvcC4gIEluCisgICAgICAgb3JkZXIgdG8gc2Nyb2xsIHRleHQgdXAsIGEgcHJvZ3JhbSB3aWxsIGdvIHRvICB0aGUgIGJvdHRvbQorICAgICAgIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4gYW5kIHNlbmQgdGhlIDxTVFJPTkc+aW5kPC9TVFJPTkc+IChpbmRleCkgc3RyaW5nLgorCisgICAgICAgVG8gc2Nyb2xsIHRleHQgZG93biwgYSBwcm9ncmFtIGdvZXMgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lcgorICAgICAgIG9mICB0aGUgIHNjcmVlbiAgYW5kICBzZW5kcyB0aGUgPFNUUk9ORz5yaTwvU1RST05HPiAocmV2ZXJzZSBpbmRleCkgc3RyaW5nLgorICAgICAgIFRoZSBzdHJpbmdzIDxTVFJPTkc+aW5kPC9TVFJPTkc+IGFuZCA8U1RST05HPnJpPC9TVFJPTkc+IGFyZSB1bmRlZmluZWQgIHdoZW4gIG5vdCAgb24gIHRoZWlyCisgICAgICAgcmVzcGVjdGl2ZSBjb3JuZXJzIG9mIHRoZSBzY3JlZW4uCisKKyAgICAgICBQYXJhbWV0ZXJpemVkIHZlcnNpb25zIG9mIHRoZSBzY3JvbGxpbmcgc2VxdWVuY2VzIGFyZSA8U1RST05HPmluZG48L1NUUk9ORz4KKyAgICAgICBhbmQgPFNUUk9ORz5yaW48L1NUUk9ORz4gd2hpY2ggaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgPFNUUk9ORz5pbmQ8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cmk8L1NUUk9ORz4gZXhjZXB0CisgICAgICAgdGhhdCAgdGhleSB0YWtlIG9uZSBwYXJhbWV0ZXIsIGFuZCBzY3JvbGwgdGhhdCBtYW55IGxpbmVzLgorICAgICAgIFRoZXkgYXJlIGFsc28gdW5kZWZpbmVkIGV4Y2VwdCBhdCB0aGUgYXBwcm9wcmlhdGUgZWRnZSAgb2YKKyAgICAgICB0aGUgc2NyZWVuLgorCisgICAgICAgVGhlICA8U1RST05HPmFtPC9TVFJPTkc+ICBjYXBhYmlsaXR5IHRlbGxzIHdoZXRoZXIgdGhlIGN1cnNvciBzdGlja3MgYXQgdGhlCisgICAgICAgcmlnaHQgZWRnZSBvZiB0aGUgc2NyZWVuIHdoZW4gdGV4dCAgaXMgIG91dHB1dCwgIGJ1dCAgdGhpcworICAgICAgIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGEgPFNUUk9ORz5jdWYxPC9TVFJPTkc+IGZyb20gdGhlIGxhc3QgY29sdW1uLgorICAgICAgIFRoZSBvbmx5IGxvY2FsIG1vdGlvbiB3aGljaCBpcyBkZWZpbmVkIGZyb20gdGhlIGxlZnQgIGVkZ2UKKyAgICAgICBpcyAgaWYgIDxTVFJPTkc+Ync8L1NUUk9ORz4gIGlzICBnaXZlbiwgdGhlbiBhIDxTVFJPTkc+Y3ViMTwvU1RST05HPiBmcm9tIHRoZSBsZWZ0IGVkZ2Ugd2lsbAorICAgICAgIG1vdmUgdG8gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHByZXZpb3VzIHJvdy4gIElmIDxTVFJPTkc+Ync8L1NUUk9ORz4gaXMgIG5vdAorICAgICAgIGdpdmVuLCAgdGhlIGVmZmVjdCBpcyB1bmRlZmluZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJhdy0KKyAgICAgICBpbmcgYSBib3ggYXJvdW5kIHRoZSBlZGdlIG9mIHRoZSBzY3JlZW4sIGZvciBleGFtcGxlLiAgIElmCisgICAgICAgdGhlICB0ZXJtaW5hbCBoYXMgc3dpdGNoIHNlbGVjdGFibGUgYXV0b21hdGljIG1hcmdpbnMsIHRoZQorICAgICAgIDxFTT50ZXJtaW5mbzwvRU0+IGZpbGUgdXN1YWxseSBhc3N1bWVzIHRoYXQgdGhpcyBpcyBvbjsgIGkuZS4sICA8U1RST05HPmFtPC9TVFJPTkc+LgorICAgICAgIElmICB0aGUgIHRlcm1pbmFsICBoYXMgIGEgY29tbWFuZCB3aGljaCBtb3ZlcyB0byB0aGUgZmlyc3QKKyAgICAgICBjb2x1bW4gb2YgdGhlIG5leHQgbGluZSwgdGhhdCBjb21tYW5kIGNhbiBiZSBnaXZlbiBhcyAgPFNUUk9ORz5uZWw8L1NUUk9ORz4KKyAgICAgICAobmV3bGluZSkuICAgSXQgIGRvZXMgbm90IG1hdHRlciBpZiB0aGUgY29tbWFuZCBjbGVhcnMgdGhlCisgICAgICAgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGxpbmUsIHNvIGlmIHRoZSB0ZXJtaW5hbCAgaGFzICBubworICAgICAgIDxTVFJPTkc+Y3I8L1NUUk9ORz4gIGFuZCA8U1RST05HPmxmPC9TVFJPTkc+IGl0IG1heSBzdGlsbCBiZSBwb3NzaWJsZSB0byBjcmFmdCBhIHdvcmtpbmcgPFNUUk9ORz5uZWw8L1NUUk9ORz4KKyAgICAgICBvdXQgb2Ygb25lIG9yIGJvdGggb2YgdGhlbS4KKworICAgICAgIFRoZXNlICBjYXBhYmlsaXRpZXMgIHN1ZmZpY2UgIHRvICBkZXNjcmliZSAgaGFyZC1jb3B5ICBhbmQKKyAgICAgICAiZ2xhc3MtdHR5IiAgdGVybWluYWxzLiAgIFRodXMgIHRoZSAgbW9kZWwgIDMzIHRlbGV0eXBlIGlzCisgICAgICAgZGVzY3JpYmVkIGFzCisKKyAgICAgICAzM3x0dHkzM3x0dHl8bW9kZWwgMzMgdGVsZXR5cGUsCisgICAgICAgICAgICBiZWw9XkcsIGNvbHMjNzIsIGNyPV5NLCBjdWQxPV5KLCBoYywgaW5kPV5KLCBvcywKKworICAgICAgIHdoaWxlIHRoZSBMZWFyIFNpZWdsZXIgQURNLTMgaXMgZGVzY3JpYmVkIGFzCisKKyAgICAgICBhZG0zfDN8bHNpIGFkbTMsCisgICAgICAgICAgICBhbSwgYmVsPV5HLCBjbGVhcj1eWiwgY29scyM4MCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisgICAgICAgICAgICBpbmQ9XkosIGxpbmVzIzI0LAorCisKKyAgIDxTVFJPTkc+UGFyYW1ldGVyaXplZDwvU1RST05HPiA8U1RST05HPlN0cmluZ3M8L1NUUk9ORz4KKyAgICAgICBDdXJzb3IgYWRkcmVzc2luZyBhbmQgb3RoZXIgc3RyaW5ncyAgcmVxdWlyaW5nICBwYXJhbWV0ZXJzCisgICAgICAgaW4gIHRoZSAgdGVybWluYWwgIGFyZSBkZXNjcmliZWQgYnkgYSBwYXJhbWV0ZXJpemVkIHN0cmluZworICAgICAgIGNhcGFiaWxpdHksIHdpdGggPFNUUk9ORz48QSBIUkVGPSJwcmludGYuMy5odG1sIj5wcmludGYoMyk8L0E+PC9TVFJPTkc+IGxpa2UgZXNjYXBlcyAgPFNUUk9ORz4leDwvU1RST05HPiAgaW4gIGl0LiAgIEZvcgorICAgICAgIGV4YW1wbGUsICB0byAgYWRkcmVzcyAgdGhlICBjdXJzb3IsICB0aGUgPFNUUk9ORz5jdXA8L1NUUk9ORz4gY2FwYWJpbGl0eSBpcworICAgICAgIGdpdmVuLCB1c2luZyB0d28gcGFyYW1ldGVyczogdGhlIHJvdyBhbmQgY29sdW1uIHRvIGFkZHJlc3MKKyAgICAgICB0by4gIChSb3dzIGFuZCBjb2x1bW5zIGFyZSBudW1iZXJlZCBmcm9tIHplcm8gYW5kIHJlZmVyIHRvCisgICAgICAgdGhlIHBoeXNpY2FsIHNjcmVlbiB2aXNpYmxlIHRvIHRoZSB1c2VyLCBub3QgdG8gYW55IHVuc2VlbgorICAgICAgIG1lbW9yeS4pICAgSWYgIHRoZSAgdGVybWluYWwgIGhhcyAgbWVtb3J5ICByZWxhdGl2ZSBjdXJzb3IKKyAgICAgICBhZGRyZXNzaW5nLCB0aGF0IGNhbiBiZSBpbmRpY2F0ZWQgYnkgPFNUUk9ORz5tcmN1cDwvU1RST05HPi4KKworICAgICAgIFRoZSBwYXJhbWV0ZXIgbWVjaGFuaXNtIHVzZXMgYSBzdGFjayBhbmQgc3BlY2lhbCAgPFNUUk9ORz4lPC9TVFJPTkc+ICBjb2RlcworICAgICAgIHRvICBtYW5pcHVsYXRlICBpdC4gIFR5cGljYWxseSBhIHNlcXVlbmNlIHdpbGwgcHVzaCBvbmUgb2YKKyAgICAgICB0aGUgcGFyYW1ldGVycyBvbnRvIHRoZSBzdGFjayBhbmQgdGhlbiBwcmludCAgaXQgIGluICBzb21lCisgICAgICAgZm9ybWF0LiAgIFByaW50ICAoZS5nLiwgICIlZCIpICBpcyAgYSBzcGVjaWFsIGNhc2UuICBPdGhlcgorICAgICAgIG9wZXJhdGlvbnMsIGluY2x1ZGluZyAiJXQiICBwb3AgIHRoZWlyICBvcGVyYW5kICBmcm9tICB0aGUKKyAgICAgICBzdGFjay4gIEl0IGlzIG5vdGVkIHRoYXQgbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgYXJlIG9mdGVuCisgICAgICAgbmVjZXNzYXJ5LCBlLmcuLCBpbiB0aGUgPFNUUk9ORz5zZ3I8L1NUUk9ORz4gc3RyaW5nLgorCisgICAgICAgVGhlIDxTVFJPTkc+JTwvU1RST05HPiBlbmNvZGluZ3MgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCisKKyAgICAgICAlJSAgIG91dHB1dHMgYCUnCisKKyAgICAgICAlPEVNPltbPC9FTT46PEVNPl1mbGFnc11bd2lkdGhbLnByZWNpc2lvbl1dWzwvRU0+ZG94WHM8RU0+XTwvRU0+CisgICAgICAgICAgICBhcyBpbiA8U1RST05HPnByaW50ZjwvU1RST05HPiwgZmxhZ3MgYXJlIFstKyNdIGFuZCBzcGFjZS4gIFVzZSAgYSAgYDonCisgICAgICAgICAgICB0byAgYWxsb3cgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGEgYC0nIGZsYWcsIGF2b2lkLQorICAgICAgICAgICAgaW5nIGludGVycHJldGluZyAiJS0iIGFzIGFuIG9wZXJhdG9yLgorCisgICAgICAgJWMgICBwcmludCBwb3AoKSBsaWtlICVjIGluIDxTVFJPTkc+cHJpbnRmPC9TVFJPTkc+CisKKyAgICAgICAlcyAgIHByaW50IHBvcCgpIGxpa2UgJXMgaW4gPFNUUk9ORz5wcmludGY8L1NUUk9ORz4KKworICAgICAgICVwWzEtOV0KKyAgICAgICAgICAgIHB1c2ggPEVNPmk8L0VNPid0aCBwYXJhbWV0ZXIKKworICAgICAgICVQW2Etel0KKyAgICAgICAgICAgIHNldCBkeW5hbWljIHZhcmlhYmxlIFthLXpdIHRvIHBvcCgpCisKKyAgICAgICAlZ1thLXpdCisgICAgICAgICAgICBnZXQgZHluYW1pYyB2YXJpYWJsZSBbYS16XSBhbmQgcHVzaCBpdAorCisgICAgICAgJVBbQS1aXQorICAgICAgICAgICAgc2V0IHN0YXRpYyB2YXJpYWJsZSBbYS16XSB0byBwb3AoKQorCisgICAgICAgJWdbQS1aXQorICAgICAgICAgICAgZ2V0IHN0YXRpYyB2YXJpYWJsZSBbYS16XSBhbmQgcHVzaCBpdAorCisgICAgICAgICAgICBUaGUgdGVybXMgICJzdGF0aWMiICBhbmQgICJkeW5hbWljIiAgYXJlICBtaXNsZWFkaW5nLgorICAgICAgICAgICAgSGlzdG9yaWNhbGx5LCAgdGhlc2UgYXJlIHNpbXBseSB0d28gZGlmZmVyZW50IHNldHMgb2YKKyAgICAgICAgICAgIHZhcmlhYmxlcywgd2hvc2UgdmFsdWVzIGFyZSBub3QgcmVzZXQgIGJldHdlZW4gIGNhbGxzCisgICAgICAgICAgICB0byAgPFNUUk9ORz50cGFybTwvU1RST05HPi4gICBIb3dldmVyLCAgdGhhdCBmYWN0IGlzIG5vdCBkb2N1bWVudGVkIGluCisgICAgICAgICAgICBvdGhlciBpbXBsZW1lbnRhdGlvbnMuICBSZWx5aW5nIG9uIGl0IHdpbGwgIGFkdmVyc2VseQorICAgICAgICAgICAgaW1wYWN0IHBvcnRhYmlsaXR5IHRvIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICUnPEVNPmM8L0VNPicgY2hhciBjb25zdGFudCA8RU0+YzwvRU0+CisKKyAgICAgICAlezxFTT5ubjwvRU0+fQorICAgICAgICAgICAgaW50ZWdlciBjb25zdGFudCA8RU0+bm48L0VNPgorCisgICAgICAgJWwgICBwdXNoIHN0cmxlbihwb3ApCisKKyAgICAgICAlKyAlLSAlKiAlLyAlbQorICAgICAgICAgICAgYXJpdGhtZXRpYyAoJW0gaXMgbW9kKTogcHVzaChwb3AoKSBvcCBwb3AoKSkKKworICAgICAgICUmYW1wOyAlfCAlXgorICAgICAgICAgICAgYml0IG9wZXJhdGlvbnMgKEFORCwgT1IgYW5kIGV4Y2x1c2l2ZS1PUik6IHB1c2gocG9wKCkKKyAgICAgICAgICAgIG9wIHBvcCgpKQorCisgICAgICAgJT0gJSZndDsgJSZsdDsKKyAgICAgICAgICAgIGxvZ2ljYWwgb3BlcmF0aW9uczogcHVzaChwb3AoKSBvcCBwb3AoKSkKKworICAgICAgICVBLCAlTworICAgICAgICAgICAgbG9naWNhbCBBTkQgYW5kIE9SIG9wZXJhdGlvbnMgKGZvciBjb25kaXRpb25hbHMpCisKKyAgICAgICAlISAlfgorICAgICAgICAgICAgdW5hcnkgIG9wZXJhdGlvbnMgIChsb2dpY2FsICBhbmQgICBiaXQgICBjb21wbGVtZW50KToKKyAgICAgICAgICAgIHB1c2gob3AgcG9wKCkpCisKKyAgICAgICAlaSAgIGFkZCAxIHRvIGZpcnN0IHR3byBwYXJhbWV0ZXJzIChmb3IgQU5TSSB0ZXJtaW5hbHMpCisKKyAgICAgICAlPyA8RU0+ZXhwcjwvRU0+ICV0IDxFTT50aGVucGFydDwvRU0+ICVlIDxFTT5lbHNlcGFydDwvRU0+ICU7CisgICAgICAgICAgICBUaGlzICBmb3JtcyAgYW4gIGlmLXRoZW4tZWxzZS4gICBUaGUgICVlICA8RU0+ZWxzZXBhcnQ8L0VNPiBpcworICAgICAgICAgICAgb3B0aW9uYWwuICBVc3VhbGx5IHRoZSAlPyA8RU0+ZXhwcjwvRU0+IHBhcnQgIHB1c2hlcyAgYSAgdmFsdWUKKyAgICAgICAgICAgIG9udG8gIHRoZSBzdGFjaywgYW5kICV0IHBvcHMgaXQgZnJvbSB0aGUgc3RhY2ssIHRlc3QtCisgICAgICAgICAgICBpbmcgaWYgaXQgaXMgbm9uemVybyAodHJ1ZSkuICBJZiBpdCBpcyB6ZXJvICAoZmFsc2UpLAorICAgICAgICAgICAgY29udHJvbCBwYXNzZXMgdG8gdGhlICVlIChlbHNlKSBwYXJ0LgorCisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBmb3JtIGVsc2UtaWYncyBhIGxhIEFsZ29sIDY4OgorICAgICAgICAgICAgJT8gYzEgJXQgYjEgJWUgYzIgJXQgYjIgJWUgYzMgJXQgYjMgJWUgYzQgJXQgYjQgJWUgJTsKKworICAgICAgICAgICAgd2hlcmUgY2kgYXJlIGNvbmRpdGlvbnMsIGJpIGFyZSBib2RpZXMuCisKKyAgICAgICAgICAgIFVzZSB0aGUgPFNUUk9ORz4tZjwvU1RST05HPiBvcHRpb24gb2YgPFNUUk9ORz50aWM8L1NUUk9ORz4gb3IgPFNUUk9ORz5pbmZvY21wPC9TVFJPTkc+IHRvIHNlZSB0aGUgc3RydWMtCisgICAgICAgICAgICB0dXJlICBvZiAgaWYtdGhlLWVsc2Uncy4gIFNvbWUgc3RyaW5ncywgZS5nLiwgPFNUUk9ORz5zZ3I8L1NUUk9ORz4gY2FuCisgICAgICAgICAgICBiZSB2ZXJ5IGNvbXBsaWNhdGVkIHdoZW4gd3JpdHRlbiBvbiBvbmUgbGluZS4gIFRoZSA8U1RST05HPi1mPC9TVFJPTkc+CisgICAgICAgICAgICBvcHRpb24gIHNwbGl0cyAgdGhlICBzdHJpbmcgaW50byBsaW5lcyB3aXRoIHRoZSBwYXJ0cworICAgICAgICAgICAgaW5kZW50ZWQuCisKKyAgICAgICBCaW5hcnkgb3BlcmF0aW9ucyBhcmUgaW4gcG9zdGZpeCBmb3JtIHdpdGggdGhlIG9wZXJhbmRzIGluCisgICAgICAgdGhlICB1c3VhbCAgb3JkZXIuICAgVGhhdCAgaXMsICB0byAgZ2V0ICB4LTUgb25lIHdvdWxkIHVzZQorICAgICAgICIlZ3glezV9JS0iLiAgJVAgYW5kICVnIHZhcmlhYmxlcyAgYXJlICBwZXJzaXN0ZW50ICBhY3Jvc3MKKyAgICAgICBlc2NhcGUtc3RyaW5nIGV2YWx1YXRpb25zLgorCisgICAgICAgQ29uc2lkZXIgdGhlIEhQMjY0NSwgd2hpY2gsIHRvIGdldCB0byByb3cgMyBhbmQgY29sdW1uIDEyLAorICAgICAgIG5lZWRzIHRvIGJlIHNlbnQgXEUmYW1wO2ExMmMwM1kgIHBhZGRlZCAgZm9yICA2ICBtaWxsaXNlY29uZHMuCisgICAgICAgTm90ZSAgdGhhdCAgdGhlICBvcmRlciBvZiB0aGUgcm93cyBhbmQgY29sdW1ucyBpcyBpbnZlcnRlZAorICAgICAgIGhlcmUsIGFuZCB0aGF0IHRoZSByb3cgYW5kIGNvbHVtbiBhcmUgcHJpbnRlZCBhcyB0d28gIGRpZy0KKyAgICAgICBpdHMuICBUaHVzIGl0cyA8U1RST05HPmN1cDwvU1RST05HPiBjYXBhYmlsaXR5IGlzICJjdXA9NlxFJmFtcDslcDIlMmRjJXAxJTJkWSIuCisKKyAgICAgICBUaGUgTWljcm90ZXJtIEFDVC1JViBuZWVkcyB0aGUgY3VycmVudCByb3cgYW5kIGNvbHVtbiBzZW50CisgICAgICAgcHJlY2VkZWQgIGJ5ICBhIDxTVFJPTkc+XlQ8L1NUUk9ORz4sIHdpdGggdGhlIHJvdyBhbmQgY29sdW1uIHNpbXBseSBlbmNvZGVkCisgICAgICAgaW4gYmluYXJ5LCAiY3VwPV5UJXAxJWMlcDIlYyIuICBUZXJtaW5hbHMgd2hpY2ggIHVzZSAgIiVjIgorICAgICAgIG5lZWQgIHRvICBiZSAgYWJsZSAgdG8gYmFja3NwYWNlIHRoZSBjdXJzb3IgKDxTVFJPTkc+Y3ViMTwvU1RST05HPiksIGFuZCB0bworICAgICAgIG1vdmUgdGhlIGN1cnNvciB1cCBvbmUgbGluZSBvbiB0aGUgc2NyZWVuICg8U1RST05HPmN1dTE8L1NUUk9ORz4pLiAgVGhpcyBpcworICAgICAgIG5lY2Vzc2FyeSAgYmVjYXVzZSBpdCBpcyBub3QgYWx3YXlzIHNhZmUgdG8gdHJhbnNtaXQgPFNUUk9ORz5cbjwvU1RST05HPiA8U1RST05HPl5EPC9TVFJPTkc+CisgICAgICAgYW5kIDxTVFJPTkc+XHI8L1NUUk9ORz4sIGFzIHRoZSBzeXN0ZW0gbWF5IGNoYW5nZSBvciAgZGlzY2FyZCAgdGhlbS4gICAoVGhlCisgICAgICAgbGlicmFyeSAgcm91dGluZXMgIGRlYWxpbmcgIHdpdGggdGVybWluZm8gc2V0IHR0eSBtb2RlcyBzbworICAgICAgIHRoYXQgdGFicyBhcmUgbmV2ZXIgZXhwYW5kZWQsIHNvIFx0IGlzIHNhZmUgdG8gc2VuZC4gIFRoaXMKKyAgICAgICB0dXJucyBvdXQgdG8gYmUgZXNzZW50aWFsIGZvciB0aGUgQW5uIEFyYm9yIDQwODAuKQorCisgICAgICAgQSBmaW5hbCBleGFtcGxlIGlzIHRoZSBMU0kgQURNLTNhLCB3aGljaCB1c2VzIHJvdyBhbmQgY29sLQorICAgICAgIHVtbiAgb2Zmc2V0ICBieSAgYSAgYmxhbmsgIGNoYXJhY3RlciwgIHRodXMgICJjdXA9XEU9JXAxJScKKyAgICAgICAnJSslYyVwMiUnICAnJSslYyIuICAgQWZ0ZXIgc2VuZGluZyBgXEU9JywgdGhpcyBwdXNoZXMgdGhlCisgICAgICAgZmlyc3QgcGFyYW1ldGVyLCBwdXNoZXMgdGhlIEFTQ0lJIHZhbHVlIGZvciBhIHNwYWNlICAoMzIpLAorICAgICAgIGFkZHMgIHRoZW0gIChwdXNoaW5nICB0aGUgc3VtIG9uIHRoZSBzdGFjayBpbiBwbGFjZSBvZiB0aGUKKyAgICAgICB0d28gcHJldmlvdXMgdmFsdWVzKSBhbmQgb3V0cHV0cyB0aGF0IHZhbHVlIGFzICBhICBjaGFyYWMtCisgICAgICAgdGVyLiAgIFRoZW4gIHRoZSAgc2FtZSAgaXMgIGRvbmUgZm9yIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorICAgICAgIE1vcmUgY29tcGxleCBhcml0aG1ldGljIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBzdGFjay4KKworCisgICA8U1RST05HPkN1cnNvcjwvU1RST05HPiA8U1RST05HPk1vdGlvbnM8L1NUUk9ORz4KKyAgICAgICBJZiB0aGUgdGVybWluYWwgaGFzIGEgZmFzdCB3YXkgdG8gaG9tZSB0aGUgY3Vyc29yICh0byB2ZXJ5CisgICAgICAgdXBwZXIgIGxlZnQgIGNvcm5lciAgb2YgIHNjcmVlbikgdGhlbiB0aGlzIGNhbiBiZSBnaXZlbiBhcworICAgICAgIDxTVFJPTkc+aG9tZTwvU1RST05HPjsgc2ltaWxhcmx5IGEgZmFzdCB3YXkgb2YgZ2V0dGluZyB0byB0aGUgIGxvd2VyICBsZWZ0LQorICAgICAgIGhhbmQgIGNvcm5lciBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5sbDwvU1RST05HPjsgdGhpcyBtYXkgaW52b2x2ZSBnb2luZyB1cAorICAgICAgIHdpdGggPFNUUk9ORz5jdXUxPC9TVFJPTkc+IGZyb20gdGhlIGhvbWUgcG9zaXRpb24sICBidXQgIGEgIHByb2dyYW0gIHNob3VsZAorICAgICAgIG5ldmVyICBkbyB0aGlzIGl0c2VsZiAodW5sZXNzIDxTVFJPTkc+bGw8L1NUUk9ORz4gZG9lcykgYmVjYXVzZSBpdCBjYW4gbWFrZQorICAgICAgIG5vIGFzc3VtcHRpb24gYWJvdXQgdGhlIGVmZmVjdCBvZiBtb3ZpbmcgdXAgZnJvbSB0aGUgIGhvbWUKKyAgICAgICBwb3NpdGlvbi4gICBOb3RlICB0aGF0ICB0aGUgIGhvbWUgIHBvc2l0aW9uIGlzIHRoZSBzYW1lIGFzCisgICAgICAgYWRkcmVzc2luZyB0byAoMCwwKTogdG8gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuLAorICAgICAgIG5vdCAgb2YgIG1lbW9yeS4gICAoVGh1cywgdGhlIFxFSCBzZXF1ZW5jZSBvbiBIUCB0ZXJtaW5hbHMKKyAgICAgICBjYW5ub3QgYmUgdXNlZCBmb3IgPFNUUk9ORz5ob21lPC9TVFJPTkc+LikKKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCBoYXMgcm93IG9yIGNvbHVtbiBhYnNvbHV0ZSBjdXJzb3IgYWRkcmVzcy0KKyAgICAgICBpbmcsICB0aGVzZSAgY2FuIGJlIGdpdmVuIGFzIHNpbmdsZSBwYXJhbWV0ZXIgY2FwYWJpbGl0aWVzCisgICAgICAgPFNUUk9ORz5ocGE8L1NUUk9ORz4gKGhvcml6b250YWwgcG9zaXRpb24gYWJzb2x1dGUpIGFuZCA8U1RST05HPnZwYTwvU1RST05HPiAodmVydGljYWwgcG9zaS0KKyAgICAgICB0aW9uIGFic29sdXRlKS4gIFNvbWV0aW1lcyB0aGVzZSBhcmUgc2hvcnRlciB0aGFuIHRoZSBtb3JlCisgICAgICAgZ2VuZXJhbCB0d28gcGFyYW1ldGVyIHNlcXVlbmNlIChhcyB3aXRoICB0aGUgIGhwMjY0NSkgIGFuZAorICAgICAgIGNhbiAgIGJlICAgdXNlZCAgaW4gIHByZWZlcmVuY2UgIHRvICA8U1RST05HPmN1cDwvU1RST05HPi4gICBJZiAgdGhlcmUgIGFyZQorICAgICAgIHBhcmFtZXRlcml6ZWQgbG9jYWwgbW90aW9ucyAoZS5nLiwgbW92ZSA8RU0+bjwvRU0+ICBzcGFjZXMgIHRvICB0aGUKKyAgICAgICByaWdodCkgdGhlc2UgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+Y3VkPC9TVFJPTkc+LCA8U1RST05HPmN1YjwvU1RST05HPiwgPFNUUk9ORz5jdWY8L1NUUk9ORz4sIGFuZCA8U1RST05HPmN1dTwvU1RST05HPiB3aXRoIGEKKyAgICAgICBzaW5nbGUgcGFyYW1ldGVyICBpbmRpY2F0aW5nICBob3cgIG1hbnkgIHNwYWNlcyAgdG8gIG1vdmUuCisgICAgICAgVGhlc2UgIGFyZSAgcHJpbWFyaWx5IHVzZWZ1bCBpZiB0aGUgdGVybWluYWwgZG9lcyBub3QgaGF2ZQorICAgICAgIDxTVFJPTkc+Y3VwPC9TVFJPTkc+LCBzdWNoIGFzIHRoZSBURUtUUk9OSVggNDAyNS4KKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCBuZWVkcyB0byBiZSBpbiBhIHNwZWNpYWwgbW9kZSB3aGVuIHJ1bm5pbmcKKyAgICAgICBhIHByb2dyYW0gdGhhdCB1c2VzIHRoZXNlIGNhcGFiaWxpdGllcywgdGhlIGNvZGVzIHRvIGVudGVyCisgICAgICAgYW5kIGV4aXQgdGhpcyBtb2RlIGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPnNtY3VwPC9TVFJPTkc+IGFuZCA8U1RST05HPnJtY3VwPC9TVFJPTkc+LiAgIFRoaXMKKyAgICAgICBhcmlzZXMsICBmb3IgZXhhbXBsZSwgZnJvbSB0ZXJtaW5hbHMgbGlrZSB0aGUgQ29uY2VwdCB3aXRoCisgICAgICAgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIG1lbW9yeS4gIElmIHRoZSAgdGVybWluYWwgIGhhcyAgb25seQorICAgICAgIG1lbW9yeSAgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcgYW5kIG5vdCBzY3JlZW4gcmVsYXRpdmUKKyAgICAgICBjdXJzb3IgYWRkcmVzc2luZywgYSBvbmUgc2NyZWVuLXNpemVkIHdpbmRvdyBtdXN0IGJlIGZpeGVkCisgICAgICAgaW50byAgdGhlIHRlcm1pbmFsIGZvciBjdXJzb3IgYWRkcmVzc2luZyB0byB3b3JrIHByb3Blcmx5LgorICAgICAgIFRoaXMgaXMgYWxzbyB1c2VkIGZvciB0aGUgVEVLVFJPTklYIDQwMjUsIHdoZXJlIDxTVFJPTkc+c21jdXA8L1NUUk9ORz4gc2V0cworICAgICAgIHRoZSAgY29tbWFuZCBjaGFyYWN0ZXIgdG8gYmUgdGhlIG9uZSB1c2VkIGJ5IHRlcm1pbmZvLiAgSWYKKyAgICAgICB0aGUgPFNUUk9ORz5zbWN1cDwvU1RST05HPiBzZXF1ZW5jZSB3aWxsIG5vdCByZXN0b3JlIHRoZSAgc2NyZWVuICBhZnRlciAgYW4KKyAgICAgICA8U1RST05HPnJtY3VwPC9TVFJPTkc+IHNlcXVlbmNlIGlzIG91dHB1dCAodG8gdGhlIHN0YXRlIHByaW9yIHRvIG91dHB1dHRpbmcKKyAgICAgICA8U1RST05HPnJtY3VwPC9TVFJPTkc+KSwgc3BlY2lmeSA8U1RST05HPm5ycm1jPC9TVFJPTkc+LgorCisKKyAgIDxTVFJPTkc+QXJlYTwvU1RST05HPiA8U1RST05HPkNsZWFyczwvU1RST05HPgorICAgICAgIElmIHRoZSB0ZXJtaW5hbCBjYW4gY2xlYXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUKKyAgICAgICBlbmQgIG9mICB0aGUgIGxpbmUsICBsZWF2aW5nICB0aGUgY3Vyc29yIHdoZXJlIGl0IGlzLCB0aGlzCisgICAgICAgc2hvdWxkIGJlIGdpdmVuIGFzIDxTVFJPTkc+ZWw8L1NUUk9ORz4uICBJZiB0aGUgdGVybWluYWwgY2FuIGNsZWFyIGZyb20gdGhlCisgICAgICAgYmVnaW5uaW5nICBvZiAgdGhlIGxpbmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW5jbHVzaXZlLAorICAgICAgIGxlYXZpbmcgdGhlIGN1cnNvciB3aGVyZSBpdCBpcywgdGhpcyBzaG91bGQgIGJlICBnaXZlbiAgYXMKKyAgICAgICA8U1RST05HPmVsMTwvU1RST05HPi4gICBJZiB0aGUgdGVybWluYWwgY2FuIGNsZWFyIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgICAgICB0byB0aGUgZW5kIG9mIHRoZSBkaXNwbGF5LCB0aGVuIHRoaXMgc2hvdWxkICBiZSAgZ2l2ZW4gIGFzCisgICAgICAgPFNUUk9ORz5lZDwvU1RST05HPi4gICA8U1RST05HPkVkPC9TVFJPTkc+ICBpcyBvbmx5IGRlZmluZWQgZnJvbSB0aGUgZmlyc3QgY29sdW1uIG9mIGEgbGluZS4KKyAgICAgICAoVGh1cywgaXQgY2FuIGJlIHNpbXVsYXRlZCBieSBhIHJlcXVlc3QgdG8gZGVsZXRlIGEgIGxhcmdlCisgICAgICAgbnVtYmVyIG9mIGxpbmVzLCBpZiBhIHRydWUgPFNUUk9ORz5lZDwvU1RST05HPiBpcyBub3QgYXZhaWxhYmxlLikKKworCisgICA8U1RST05HPkluc2VydC9kZWxldGU8L1NUUk9ORz4gPFNUUk9ORz5saW5lPC9TVFJPTkc+IDxTVFJPTkc+YW5kPC9TVFJPTkc+IDxTVFJPTkc+dmVydGljYWw8L1NUUk9ORz4gPFNUUk9ORz5tb3Rpb25zPC9TVFJPTkc+CisgICAgICAgSWYgIHRoZSB0ZXJtaW5hbCBjYW4gb3BlbiBhIG5ldyBibGFuayBsaW5lIGJlZm9yZSB0aGUgbGluZQorICAgICAgIHdoZXJlIHRoZSBjdXJzb3IgaXMsIHRoaXMgc2hvdWxkIGJlIGdpdmVuIGFzIDxTVFJPTkc+aWwxPC9TVFJPTkc+OyB0aGlzICBpcworICAgICAgIGRvbmUgIG9ubHkgIGZyb20gdGhlIGZpcnN0IHBvc2l0aW9uIG9mIGEgbGluZS4gIFRoZSBjdXJzb3IKKyAgICAgICBtdXN0IHRoZW4gYXBwZWFyIG9uIHRoZSBuZXdseSBibGFuayBsaW5lLiAgSWYgdGhlIHRlcm1pbmFsCisgICAgICAgY2FuICBkZWxldGUgIHRoZSAgbGluZSAgd2hpY2ggIHRoZSBjdXJzb3IgaXMgb24sIHRoZW4gdGhpcworICAgICAgIHNob3VsZCBiZSBnaXZlbiBhcyA8U1RST05HPmRsMTwvU1RST05HPjsgdGhpcyBpcyBkb25lIG9ubHkgZnJvbSAgdGhlICBmaXJzdAorICAgICAgIHBvc2l0aW9uICBvbiAgdGhlIGxpbmUgdG8gYmUgZGVsZXRlZC4gIFZlcnNpb25zIG9mIDxTVFJPTkc+aWwxPC9TVFJPTkc+IGFuZAorICAgICAgIDxTVFJPTkc+ZGwxPC9TVFJPTkc+IHdoaWNoIHRha2UgYSBzaW5nbGUgcGFyYW1ldGVyICBhbmQgIGluc2VydCAgb3IgIGRlbGV0ZQorICAgICAgIHRoYXQgbWFueSBsaW5lcyBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5pbDwvU1RST05HPiBhbmQgPFNUUk9ORz5kbDwvU1RST05HPi4KKworICAgICAgIElmICB0aGUgdGVybWluYWwgaGFzIGEgc2V0dGFibGUgc2Nyb2xsaW5nIHJlZ2lvbiAobGlrZSB0aGUKKyAgICAgICB2dDEwMCkgdGhlIGNvbW1hbmQgdG8gc2V0IHRoaXMgY2FuIGJlIGRlc2NyaWJlZCAgd2l0aCAgdGhlCisgICAgICAgPFNUUk9ORz5jc3I8L1NUUk9ORz4gIGNhcGFiaWxpdHksICB3aGljaCAgdGFrZXMgdHdvIHBhcmFtZXRlcnM6IHRoZSB0b3AgYW5kCisgICAgICAgYm90dG9tIGxpbmVzIG9mIHRoZSBzY3JvbGxpbmcgcmVnaW9uLiAgVGhlIGN1cnNvciBwb3NpdGlvbgorICAgICAgIGlzLCBhbGFzLCB1bmRlZmluZWQgYWZ0ZXIgdXNpbmcgdGhpcyBjb21tYW5kLgorCisgICAgICAgSXQgIGlzIHBvc3NpYmxlIHRvIGdldCB0aGUgZWZmZWN0IG9mIGluc2VydCBvciBkZWxldGUgbGluZQorICAgICAgIHVzaW5nIDxTVFJPTkc+Y3NyPC9TVFJPTkc+IG9uIGEgcHJvcGVybHkgY2hvc2VuIHJlZ2lvbjsgdGhlIDxTVFJPTkc+c2M8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cmM8L1NUUk9ORz4gKHNhdmUKKyAgICAgICBhbmQgIHJlc3RvcmUgIGN1cnNvcikgIGNvbW1hbmRzIG1heSBiZSB1c2VmdWwgZm9yIGVuc3VyaW5nCisgICAgICAgdGhhdCB5b3VyIHN5bnRoZXNpemVkIGluc2VydC9kZWxldGUgc3RyaW5nIGRvZXMgIG5vdCAgbW92ZQorICAgICAgIHRoZSAgY3Vyc29yLiAgKE5vdGUgdGhhdCB0aGUgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPm5jdXJzZXMoM3gpPC9BPjwvU1RST05HPiBsaWJyYXJ5IGRvZXMgdGhpcworICAgICAgIHN5bnRoZXNpcyAgYXV0b21hdGljYWxseSwgIHNvICAgeW91ICAgbmVlZCAgIG5vdCAgIGNvbXBvc2UKKyAgICAgICBpbnNlcnQvZGVsZXRlIHN0cmluZ3MgZm9yIGFuIGVudHJ5IHdpdGggPFNUUk9ORz5jc3I8L1NUUk9ORz4pLgorCisgICAgICAgWWV0IGFub3RoZXIgd2F5IHRvIGNvbnN0cnVjdCBpbnNlcnQgYW5kIGRlbGV0ZSBtaWdodCBiZSB0bworICAgICAgIHVzZSBhIGNvbWJpbmF0aW9uIG9mIGluZGV4IHdpdGggIHRoZSAgbWVtb3J5LWxvY2sgIGZlYXR1cmUKKyAgICAgICBmb3VuZCAgb24gc29tZSB0ZXJtaW5hbHMgKGxpa2UgdGhlIEhQLTcwMC85MCBzZXJpZXMsIHdoaWNoCisgICAgICAgaG93ZXZlciBhbHNvIGhhcyBpbnNlcnQvZGVsZXRlKS4KKworICAgICAgIEluc2VydGluZyBsaW5lcyBhdCB0aGUgdG9wIG9yIGJvdHRvbSAgb2YgIHRoZSAgc2NyZWVuICBjYW4KKyAgICAgICBhbHNvICBiZSAgZG9uZSB1c2luZyA8U1RST05HPnJpPC9TVFJPTkc+IG9yIDxTVFJPTkc+aW5kPC9TVFJPTkc+IG9uIG1hbnkgdGVybWluYWxzIHdpdGhvdXQgYQorICAgICAgIHRydWUgaW5zZXJ0L2RlbGV0ZSBsaW5lLCBhbmQgaXMgb2Z0ZW4gZmFzdGVyIGV2ZW4gb24gIHRlci0KKyAgICAgICBtaW5hbHMgd2l0aCB0aG9zZSBmZWF0dXJlcy4KKworICAgICAgIFRoZSAgYm9vbGVhbiAgPFNUUk9ORz5ub25fZGVzdF9zY3JvbGxfcmVnaW9uPC9TVFJPTkc+IHNob3VsZCBiZSBzZXQgaWYgZWFjaAorICAgICAgIHNjcm9sbGluZyB3aW5kb3cgaXMgZWZmZWN0aXZlbHkgYSB2aWV3IHBvcnQgb24gIGEgIHNjcmVlbi0KKyAgICAgICBzaXplZCAgY2FudmFzLiAgIFRvICB0ZXN0ICBmb3IgIHRoaXMgIGNhcGFiaWxpdHksIGNyZWF0ZSBhCisgICAgICAgc2Nyb2xsaW5nIHJlZ2lvbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4sIHdyaXRlICBzb21lLQorICAgICAgIHRoaW5nICB0byAgdGhlICBib3R0b20gbGluZSwgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSB0b3Agb2YKKyAgICAgICB0aGUgcmVnaW9uLCBhbmQgZG8gPFNUUk9ORz5yaTwvU1RST05HPiBmb2xsb3dlZCBieSA8U1RST05HPmRsMTwvU1RST05HPiBvciA8U1RST05HPmluZDwvU1RST05HPi4gIElmIHRoZSBkYXRhCisgICAgICAgc2Nyb2xsZWQgIG9mZiAgdGhlICBib3R0b20gIG9mICB0aGUgIHJlZ2lvbiAgYnkgdGhlIDxTVFJPTkc+cmk8L1NUUk9ORz4gcmUtCisgICAgICAgYXBwZWFycywgdGhlbiBzY3JvbGxpbmcgaXMgbm9uLWRlc3RydWN0aXZlLiAgU3lzdGVtIFYgIGFuZAorICAgICAgIFhTSSAgQ3Vyc2VzICBleHBlY3QgdGhhdCA8U1RST05HPmluZDwvU1RST05HPiwgPFNUUk9ORz5yaTwvU1RST05HPiwgPFNUUk9ORz5pbmRuPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5yaW48L1NUUk9ORz4gd2lsbCBzaW11LQorICAgICAgIGxhdGUgZGVzdHJ1Y3RpdmUgc2Nyb2xsaW5nOyB0aGVpciAgZG9jdW1lbnRhdGlvbiAgY2F1dGlvbnMKKyAgICAgICB5b3UgIG5vdCAgdG8gIGRlZmluZSA8U1RST05HPmNzcjwvU1RST05HPiB1bmxlc3MgdGhpcyBpcyB0cnVlLiAgVGhpcyA8U1RST05HPmN1cnNlczwvU1RST05HPgorICAgICAgIGltcGxlbWVudGF0aW9uIGlzIG1vcmUgbGliZXJhbCBhbmQgd2lsbCBkbyBleHBsaWNpdCBlcmFzZXMKKyAgICAgICBhZnRlciBzY3JvbGxpbmcgaWYgPFNUUk9ORz5uZHN0cjwvU1RST05HPiBpcyBkZWZpbmVkLgorCisgICAgICAgSWYgdGhlIHRlcm1pbmFsIGhhcyB0aGUgYWJpbGl0eSB0byBkZWZpbmUgYSB3aW5kb3cgYXMgcGFydAorICAgICAgIG9mIG1lbW9yeSwgd2hpY2ggYWxsIGNvbW1hbmRzIGFmZmVjdCwgaXQgc2hvdWxkICBiZSAgZ2l2ZW4KKyAgICAgICBhcyB0aGUgcGFyYW1ldGVyaXplZCBzdHJpbmcgPFNUUk9ORz53aW5kPC9TVFJPTkc+LiAgVGhlIGZvdXIgcGFyYW1ldGVycyBhcmUKKyAgICAgICB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBsaW5lcyBpbiBtZW1vcnkgYW5kICB0aGUgIHN0YXJ0aW5nCisgICAgICAgYW5kIGVuZGluZyBjb2x1bW5zIGluIG1lbW9yeSwgaW4gdGhhdCBvcmRlci4KKworICAgICAgIElmICB0aGUgdGVybWluYWwgY2FuIHJldGFpbiBkaXNwbGF5IG1lbW9yeSBhYm92ZSwgdGhlbiB0aGUKKyAgICAgICA8U1RST05HPmRhPC9TVFJPTkc+IGNhcGFiaWxpdHkgc2hvdWxkIGJlIGdpdmVuOyBpZiBkaXNwbGF5ICBtZW1vcnkgIGNhbiAgYmUKKyAgICAgICByZXRhaW5lZCAgYmVsb3csICB0aGVuIDxTVFJPTkc+ZGI8L1NUUk9ORz4gc2hvdWxkIGJlIGdpdmVuLiAgVGhlc2UgaW5kaWNhdGUKKyAgICAgICB0aGF0IGRlbGV0aW5nIGEgbGluZSAgb3IgIHNjcm9sbGluZyAgbWF5ICBicmluZyAgbm9uLWJsYW5rCisgICAgICAgbGluZXMgIHVwICBmcm9tICBiZWxvdyAgb3IgdGhhdCBzY3JvbGxpbmcgYmFjayB3aXRoIDxTVFJPTkc+cmk8L1NUUk9ORz4gbWF5CisgICAgICAgYnJpbmcgZG93biBub24tYmxhbmsgbGluZXMuCisKKworICAgPFNUUk9ORz5JbnNlcnQvRGVsZXRlPC9TVFJPTkc+IDxTVFJPTkc+Q2hhcmFjdGVyPC9TVFJPTkc+CisgICAgICAgVGhlcmUgYXJlIHR3byBiYXNpYyBraW5kcyBvZiAgaW50ZWxsaWdlbnQgIHRlcm1pbmFscyAgd2l0aAorICAgICAgIHJlc3BlY3QgIHRvIGluc2VydC9kZWxldGUgY2hhcmFjdGVyIHdoaWNoIGNhbiBiZSBkZXNjcmliZWQKKyAgICAgICB1c2luZyA8RU0+dGVybWluZm8uPC9FTT4gIFRoZSBtb3N0IGNvbW1vbiAgaW5zZXJ0L2RlbGV0ZSAgY2hhcmFjdGVyCisgICAgICAgb3BlcmF0aW9ucyAgYWZmZWN0IG9ubHkgdGhlIGNoYXJhY3RlcnMgb24gdGhlIGN1cnJlbnQgbGluZQorICAgICAgIGFuZCBzaGlmdCBjaGFyYWN0ZXJzIG9mZiB0aGUgIGVuZCAgb2YgIHRoZSAgbGluZSAgcmlnaWRseS4KKyAgICAgICBPdGhlciAgdGVybWluYWxzLCAgc3VjaCAgYXMgdGhlIENvbmNlcHQgMTAwIGFuZCB0aGUgUGVya2luCisgICAgICAgRWxtZXIgT3dsLCBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiAgdHlwZWQgIGFuZCAgdW50eXBlZAorICAgICAgIGJsYW5rcyAgb24gIHRoZSAgc2NyZWVuLCBzaGlmdGluZyB1cG9uIGFuIGluc2VydCBvciBkZWxldGUKKyAgICAgICBvbmx5IHRvIGFuIHVudHlwZWQgYmxhbmsgb24gdGhlICBzY3JlZW4gIHdoaWNoICBpcyAgZWl0aGVyCisgICAgICAgZWxpbWluYXRlZCwgIG9yICBleHBhbmRlZCAgdG8gdHdvIHVudHlwZWQgYmxhbmtzLiAgWW91IGNhbgorICAgICAgIGRldGVybWluZSB0aGUga2luZCBvZiB0ZXJtaW5hbCB5b3UgaGF2ZSAgYnkgIGNsZWFyaW5nICB0aGUKKyAgICAgICBzY3JlZW4gIGFuZCAgdGhlbiB0eXBpbmcgdGV4dCBzZXBhcmF0ZWQgYnkgY3Vyc29yIG1vdGlvbnMuCisgICAgICAgVHlwZSAiYWJjICAgIGRlZiIgdXNpbmcgbG9jYWwgY3Vyc29yIG1vdGlvbnMgKG5vdCAgc3BhY2VzKQorICAgICAgIGJldHdlZW4gdGhlICJhYmMiIGFuZCB0aGUgImRlZiIuICBUaGVuIHBvc2l0aW9uIHRoZSBjdXJzb3IKKyAgICAgICBiZWZvcmUgdGhlICJhYmMiIGFuZCBwdXQgdGhlIHRlcm1pbmFsIGluIGluc2VydCBtb2RlLiAgIElmCisgICAgICAgdHlwaW5nICBjaGFyYWN0ZXJzICBjYXVzZXMgIHRoZSAgcmVzdCBvZiB0aGUgbGluZSB0byBzaGlmdAorICAgICAgIHJpZ2lkbHkgYW5kIGNoYXJhY3RlcnMgdG8gZmFsbCBvZmYgdGhlIGVuZCwgdGhlbiB5b3VyIHRlci0KKyAgICAgICBtaW5hbCAgZG9lcyAgbm90ICBkaXN0aW5ndWlzaCAgYmV0d2VlbiAgYmxhbmtzIGFuZCB1bnR5cGVkCisgICAgICAgcG9zaXRpb25zLiAgSWYgdGhlICJhYmMiIHNoaWZ0cyBvdmVyIHRvICB0aGUgICJkZWYiICB3aGljaAorICAgICAgIHRoZW4gIG1vdmUgdG9nZXRoZXIgYXJvdW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSBhbmQKKyAgICAgICBvbnRvIHRoZSBuZXh0IGFzIHlvdSBpbnNlcnQsIHlvdSBoYXZlIHRoZSBzZWNvbmQgIHR5cGUgIG9mCisgICAgICAgdGVybWluYWwsICBhbmQgc2hvdWxkIGdpdmUgdGhlIGNhcGFiaWxpdHkgPFNUUk9ORz5pbjwvU1RST05HPiwgd2hpY2ggc3RhbmRzCisgICAgICAgZm9yICJpbnNlcnQgbnVsbCIuICBXaGlsZSB0aGVzZSBhcmUgdHdvIGxvZ2ljYWxseSBzZXBhcmF0ZQorICAgICAgIGF0dHJpYnV0ZXMgIChvbmUgIGxpbmUgIHZlcnN1cyBtdWx0aS1saW5lIGluc2VydCBtb2RlLCBhbmQKKyAgICAgICBzcGVjaWFsIHRyZWF0bWVudCBvZiB1bnR5cGVkIHNwYWNlcykgd2UgaGF2ZSBzZWVuIG5vICB0ZXItCisgICAgICAgbWluYWxzIHdob3NlIGluc2VydCBtb2RlIGNhbm5vdCBiZSBkZXNjcmliZWQgd2l0aCB0aGUgc2luLQorICAgICAgIGdsZSBhdHRyaWJ1dGUuCisKKyAgICAgICBUZXJtaW5mbyBjYW4gZGVzY3JpYmUgYm90aCB0ZXJtaW5hbHMgd2hpY2ggaGF2ZSBhbiAgaW5zZXJ0CisgICAgICAgbW9kZSwgYW5kIHRlcm1pbmFscyB3aGljaCBzZW5kIGEgc2ltcGxlIHNlcXVlbmNlIHRvIG9wZW4gYQorICAgICAgIGJsYW5rIHBvc2l0aW9uIG9uIHRoZSBjdXJyZW50ICBsaW5lLiAgIEdpdmUgIGFzICA8U1RST05HPnNtaXI8L1NUUk9ORz4gIHRoZQorICAgICAgIHNlcXVlbmNlICB0byAgZ2V0ICBpbnRvICBpbnNlcnQgIG1vZGUuICAgR2l2ZSAgYXMgPFNUUk9ORz5ybWlyPC9TVFJPTkc+IHRoZQorICAgICAgIHNlcXVlbmNlIHRvIGxlYXZlIGluc2VydCAgbW9kZS4gICBOb3cgIGdpdmUgIGFzICA8U1RST05HPmljaDE8L1NUUk9ORz4gIGFueQorICAgICAgIHNlcXVlbmNlICBuZWVkZWQgIHRvICBiZSAgc2VudCAganVzdCAgYmVmb3JlICBzZW5kaW5nICB0aGUKKyAgICAgICBjaGFyYWN0ZXIgdG8gYmUgaW5zZXJ0ZWQuICAgTW9zdCAgdGVybWluYWxzICB3aXRoICBhICB0cnVlCisgICAgICAgaW5zZXJ0ICBtb2RlICB3aWxsICBub3QgIGdpdmUgPFNUUk9ORz5pY2gxPC9TVFJPTkc+OyB0ZXJtaW5hbHMgd2hpY2ggc2VuZCBhCisgICAgICAgc2VxdWVuY2UgdG8gb3BlbiBhIHNjcmVlbiBwb3NpdGlvbiBzaG91bGQgZ2l2ZSBpdCBoZXJlLgorCisgICAgICAgSWYgeW91ciB0ZXJtaW5hbCBoYXMgYm90aCwgaW5zZXJ0IG1vZGUgaXMgdXN1YWxseSAgcHJlZmVyLQorICAgICAgIGFibGUgIHRvICA8U1RST05HPmljaDE8L1NUUk9ORz4uICAgVGVjaG5pY2FsbHksICB5b3UgIHNob3VsZCAgbm90IGdpdmUgYm90aAorICAgICAgIHVubGVzcyB0aGUgdGVybWluYWwgYWN0dWFsbHkgcmVxdWlyZXMgYm90aCB0byBiZSAgdXNlZCAgaW4KKyAgICAgICBjb21iaW5hdGlvbi4gICBBY2NvcmRpbmdseSwgIHNvbWUgIG5vbi1jdXJzZXMgYXBwbGljYXRpb25zCisgICAgICAgZ2V0IGNvbmZ1c2VkIGlmIGJvdGggYXJlIHByZXNlbnQ7IHRoZSBzeW1wdG9tICBpcyAgZG91YmxlZAorICAgICAgIGNoYXJhY3RlcnMgaW4gYW4gdXBkYXRlIHVzaW5nIGluc2VydC4gIFRoaXMgcmVxdWlyZW1lbnQgaXMKKyAgICAgICBub3cgcmFyZTsgbW9zdCA8U1RST05HPmljaDwvU1RST05HPiBzZXF1ZW5jZXMgZG8gbm90IHJlcXVpcmUgcHJldmlvdXMgc21pciwKKyAgICAgICBhbmQgbW9zdCBzbWlyIGluc2VydCBtb2RlcyBkbyBub3QgcmVxdWlyZSA8U1RST05HPmljaDE8L1NUUk9ORz4gYmVmb3JlIGVhY2gKKyAgICAgICBjaGFyYWN0ZXIuICBUaGVyZWZvcmUsIHRoZSAgbmV3ICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgYWN0dWFsbHkgIGFzc3VtZXMKKyAgICAgICB0aGlzICBpcyB0aGUgY2FzZSBhbmQgdXNlcyBlaXRoZXIgPFNUUk9ORz5ybWlyPC9TVFJPTkc+LzxTVFJPTkc+c21pcjwvU1RST05HPiBvciA8U1RST05HPmljaDwvU1RST05HPi88U1RST05HPmljaDE8L1NUUk9ORz4gYXMKKyAgICAgICBhcHByb3ByaWF0ZSAoYnV0IG5vdCBib3RoKS4gIElmIHlvdSBoYXZlIHRvIHdyaXRlIGFuIGVudHJ5CisgICAgICAgdG8gIGJlICB1c2VkIHVuZGVyIG5ldyBjdXJzZXMgZm9yIGEgdGVybWluYWwgb2xkIGVub3VnaCB0bworICAgICAgIG5lZWQgYm90aCwgaW5jbHVkZSB0aGUgPFNUUk9ORz5ybWlyPC9TVFJPTkc+LzxTVFJPTkc+c21pcjwvU1RST05HPiBzZXF1ZW5jZXMgaW4gPFNUUk9ORz5pY2gxPC9TVFJPTkc+LgorCisgICAgICAgSWYgcG9zdCBpbnNlcnQgcGFkZGluZyBpcyBuZWVkZWQsIGdpdmUgdGhpcyBhcyBhIG51bWJlciBvZgorICAgICAgIG1pbGxpc2Vjb25kcyAgaW4gPFNUUk9ORz5pcDwvU1RST05HPiAoYSBzdHJpbmcgb3B0aW9uKS4gIEFueSBvdGhlciBzZXF1ZW5jZQorICAgICAgIHdoaWNoIG1heSBuZWVkIHRvIGJlIHNlbnQgYWZ0ZXIgIGFuICBpbnNlcnQgIG9mICBhICBzaW5nbGUKKyAgICAgICBjaGFyYWN0ZXIgbWF5IGFsc28gYmUgZ2l2ZW4gaW4gPFNUUk9ORz5pcDwvU1RST05HPi4gIElmIHlvdXIgdGVybWluYWwgbmVlZHMKKyAgICAgICBib3RoIHRvIGJlIHBsYWNlZCBpbnRvIGFuIGBpbnNlcnQgbW9kZScgYW5kIGEgc3BlY2lhbCBjb2RlCisgICAgICAgdG8gIHByZWNlZGUgIGVhY2ggIGluc2VydGVkIGNoYXJhY3RlciwgdGhlbiBib3RoIDxTVFJPTkc+c21pcjwvU1RST05HPi88U1RST05HPnJtaXI8L1NUUk9ORz4KKyAgICAgICBhbmQgPFNUUk9ORz5pY2gxPC9TVFJPTkc+IGNhbiBiZSBnaXZlbiwgYW5kIGJvdGggd2lsbCAgYmUgIHVzZWQuICAgVGhlICA8U1RST05HPmljaDwvU1RST05HPgorICAgICAgIGNhcGFiaWxpdHksIHdpdGggb25lIHBhcmFtZXRlciwgPEVNPm48L0VNPiwgd2lsbCByZXBlYXQgdGhlIGVmZmVjdHMKKyAgICAgICBvZiA8U1RST05HPmljaDE8L1NUUk9ORz4gPEVNPm48L0VNPiB0aW1lcy4KKworICAgICAgIElmIHBhZGRpbmcgaXMgbmVjZXNzYXJ5IGJldHdlZW4gY2hhcmFjdGVycyB0eXBlZCB3aGlsZSBub3QKKyAgICAgICBpbiAgaW5zZXJ0ICBtb2RlLCAgZ2l2ZSAgdGhpcyAgYXMgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzCisgICAgICAgcGFkZGluZyBpbiA8U1RST05HPnJtcDwvU1RST05HPi4KKworICAgICAgIEl0IGlzIG9jY2FzaW9uYWxseSAgbmVjZXNzYXJ5ICB0byAgbW92ZSAgYXJvdW5kICB3aGlsZSAgaW4KKyAgICAgICBpbnNlcnQgIG1vZGUgIHRvIGRlbGV0ZSBjaGFyYWN0ZXJzIG9uIHRoZSBzYW1lIGxpbmUgKGUuZy4sCisgICAgICAgaWYgdGhlcmUgaXMgYSB0YWIgYWZ0ZXIgdGhlIGluc2VydGlvbiBwb3NpdGlvbikuICBJZiAgeW91cgorICAgICAgIHRlcm1pbmFsICBhbGxvd3MgIG1vdGlvbiB3aGlsZSBpbiBpbnNlcnQgbW9kZSB5b3UgY2FuIGdpdmUKKyAgICAgICB0aGUgY2FwYWJpbGl0eSA8U1RST05HPm1pcjwvU1RST05HPiB0byBzcGVlZCB1cCAgaW5zZXJ0aW5nICBpbiAgdGhpcyAgY2FzZS4KKyAgICAgICBPbWl0dGluZyAgPFNUUk9ORz5taXI8L1NUUk9ORz4gIHdpbGwgIGFmZmVjdCAgb25seSAgc3BlZWQuICAgU29tZSB0ZXJtaW5hbHMKKyAgICAgICAobm90YWJseSBEYXRhbWVkaWEncykgbXVzdCBub3QgaGF2ZSA8U1RST05HPm1pcjwvU1RST05HPiBiZWNhdXNlIG9mIHRoZSB3YXkKKyAgICAgICB0aGVpciBpbnNlcnQgbW9kZSB3b3Jrcy4KKworICAgICAgIEZpbmFsbHksICB5b3UgIGNhbiBzcGVjaWZ5IDxTVFJPTkc+ZGNoMTwvU1RST05HPiB0byBkZWxldGUgYSBzaW5nbGUgY2hhcmFjLQorICAgICAgIHRlciwgPFNUUk9ORz5kY2g8L1NUUk9ORz4gd2l0aCBvbmUgcGFyYW1ldGVyLCA8RU0+bjwvRU0+LCB0byAgZGVsZXRlICA8RU0+bjwvRU0+ICA8RU0+Y2hhcmFjdGVycyw8L0VNPgorICAgICAgIGFuZCAgZGVsZXRlIG1vZGUgYnkgZ2l2aW5nIDxTVFJPTkc+c21kYzwvU1RST05HPiBhbmQgPFNUUk9ORz5ybWRjPC9TVFJPTkc+IHRvIGVudGVyIGFuZCBleGl0CisgICAgICAgZGVsZXRlIG1vZGUgKGFueSBtb2RlIHRoZSB0ZXJtaW5hbCBuZWVkcyB0byBiZSAgcGxhY2VkICBpbgorICAgICAgIGZvciA8U1RST05HPmRjaDE8L1NUUk9ORz4gdG8gd29yaykuCisKKyAgICAgICBBICBjb21tYW5kIHRvIGVyYXNlIDxFTT5uPC9FTT4gY2hhcmFjdGVycyAoZXF1aXZhbGVudCB0byBvdXRwdXR0aW5nCisgICAgICAgPEVNPm48L0VNPiBibGFua3Mgd2l0aG91dCBtb3ZpbmcgdGhlIGN1cnNvcikgY2FuIGJlICBnaXZlbiAgYXMgIDxTVFJPTkc+ZWNoPC9TVFJPTkc+CisgICAgICAgd2l0aCBvbmUgcGFyYW1ldGVyLgorCisKKyAgIDxTVFJPTkc+SGlnaGxpZ2h0aW5nLDwvU1RST05HPiA8U1RST05HPlVuZGVybGluaW5nLDwvU1RST05HPiA8U1RST05HPmFuZDwvU1RST05HPiA8U1RST05HPlZpc2libGU8L1NUUk9ORz4gPFNUUk9ORz5CZWxsczwvU1RST05HPgorICAgICAgIElmICB5b3VyICB0ZXJtaW5hbCAgaGFzICBvbmUgIG9yICBtb3JlICBraW5kcyAgb2YgIGRpc3BsYXkKKyAgICAgICBhdHRyaWJ1dGVzLCB0aGVzZSBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBudW1iZXIgIG9mICBkaWYtCisgICAgICAgZmVyZW50IHdheXMuICBZb3Ugc2hvdWxkIGNob29zZSBvbmUgZGlzcGxheSBmb3JtIGFzIDxFTT5zdGFuZC08L0VNPgorICAgICAgIDxFTT5vdXQ8L0VNPiA8RU0+bW9kZTwvRU0+LCByZXByZXNlbnRpbmcgYSBnb29kLCBoaWdoIGNvbnRyYXN0LCBlYXN5LW9uLXRoZS0KKyAgICAgICBleWVzLCAgZm9ybWF0ICBmb3IgIGhpZ2hsaWdodGluZyAgZXJyb3IgbWVzc2FnZXMgYW5kIG90aGVyCisgICAgICAgYXR0ZW50aW9uIGdldHRlcnMuICAoSWYgeW91IGhhdmUgYSBjaG9pY2UsICByZXZlcnNlICB2aWRlbworICAgICAgIHBsdXMgIGhhbGYtYnJpZ2h0ICBpcyAgZ29vZCwgb3IgcmV2ZXJzZSB2aWRlbyBhbG9uZS4pICBUaGUKKyAgICAgICBzZXF1ZW5jZXMgdG8gZW50ZXIgYW5kIGV4aXQgc3RhbmRvdXQgIG1vZGUgIGFyZSAgZ2l2ZW4gIGFzCisgICAgICAgPFNUUk9ORz5zbXNvPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+cm1zbzwvU1RST05HPiwgcmVzcGVjdGl2ZWx5LiAgSWYgdGhlIGNvZGUgdG8gY2hhbmdlIGludG8KKyAgICAgICBvciBvdXQgb2Ygc3RhbmRvdXQgbW9kZSAgbGVhdmVzICBvbmUgIG9yICBldmVuICB0d28gIGJsYW5rCisgICAgICAgc3BhY2VzICBvbiB0aGUgc2NyZWVuLCBhcyB0aGUgVFZJIDkxMiBhbmQgVGVsZXJheSAxMDYxIGRvLAorICAgICAgIHRoZW4gPFNUUk9ORz54bWM8L1NUUk9ORz4gc2hvdWxkIGJlIGdpdmVuIHRvIHRlbGwgaG93IG1hbnkgc3BhY2VzIGFyZSBsZWZ0LgorCisgICAgICAgQ29kZXMgIHRvICBiZWdpbiAgdW5kZXJsaW5pbmcgIGFuZCAgZW5kIHVuZGVybGluaW5nIGNhbiBiZQorICAgICAgIGdpdmVuIGFzIDxTVFJPTkc+c211bDwvU1RST05HPiBhbmQgPFNUUk9ORz5ybXVsPC9TVFJPTkc+IHJlc3BlY3RpdmVseS4gIElmIHRoZSB0ZXJtaW5hbCAgaGFzCisgICAgICAgYSAgY29kZSAgdG8gIHVuZGVybGluZSAgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGFuZCBtb3ZlIHRoZQorICAgICAgIGN1cnNvciBvbmUgc3BhY2UgdG8gdGhlIHJpZ2h0LCBzdWNoIGFzIHRoZSBNaWNyb3Rlcm0gTWltZSwKKyAgICAgICB0aGlzIGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPnVjPC9TVFJPTkc+LgorCisgICAgICAgT3RoZXIgIGNhcGFiaWxpdGllcyAgdG8gIGVudGVyICB2YXJpb3VzIGhpZ2hsaWdodGluZyBtb2RlcworICAgICAgIGluY2x1ZGUgPFNUUk9ORz5ibGluazwvU1RST05HPiAoYmxpbmtpbmcpIDxTVFJPTkc+Ym9sZDwvU1RST05HPiAoYm9sZCBvciBleHRyYSAgYnJpZ2h0KSAgPFNUUk9ORz5kaW08L1NUUk9ORz4KKyAgICAgICAoZGltICBvciAgaGFsZi1icmlnaHQpICA8U1RST05HPmludmlzPC9TVFJPTkc+IChibGFua2luZyBvciBpbnZpc2libGUgdGV4dCkKKyAgICAgICA8U1RST05HPnByb3Q8L1NUUk9ORz4gKHByb3RlY3RlZCkgPFNUUk9ORz5yZXY8L1NUUk9ORz4gKHJldmVyc2UgdmlkZW8pIDxTVFJPTkc+c2dyMDwvU1RST05HPiAgKHR1cm4gIG9mZiAgPEVNPmFsbDwvRU0+CisgICAgICAgYXR0cmlidXRlICBtb2RlcykgIDxTVFJPTkc+c21hY3M8L1NUUk9ORz4gIChlbnRlciAgYWx0ZXJuYXRlICBjaGFyYWN0ZXIgc2V0CisgICAgICAgbW9kZSkgYW5kICA8U1RST05HPnJtYWNzPC9TVFJPTkc+ICAoZXhpdCAgYWx0ZXJuYXRlICBjaGFyYWN0ZXIgIHNldCAgbW9kZSkuCisgICAgICAgVHVybmluZyAgb24gIGFueSBvZiB0aGVzZSBtb2RlcyBzaW5nbHkgbWF5IG9yIG1heSBub3QgdHVybgorICAgICAgIG9mZiBvdGhlciBtb2Rlcy4KKworICAgICAgIElmIHRoZXJlIGlzIGEgc2VxdWVuY2UgdG8gc2V0ICBhcmJpdHJhcnkgIGNvbWJpbmF0aW9ucyAgb2YKKyAgICAgICBtb2RlcywgIHRoaXMgc2hvdWxkIGJlIGdpdmVuIGFzIDxTVFJPTkc+c2dyPC9TVFJPTkc+IChzZXQgYXR0cmlidXRlcyksIHRhay0KKyAgICAgICBpbmcgOSBwYXJhbWV0ZXJzLiAgRWFjaCBwYXJhbWV0ZXIgaXMgZWl0aGVyIDAgb3IgIG5vbnplcm8sCisgICAgICAgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG9uIG9yIG9mZi4gIFRoZSA5IHBhcmFtLQorICAgICAgIGV0ZXJzIGFyZSwgaW4gb3JkZXI6IHN0YW5kb3V0LCB1bmRlcmxpbmUsIHJldmVyc2UsICBibGluaywKKyAgICAgICBkaW0sICBib2xkLCAgYmxhbmssIHByb3RlY3QsIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0LiAgTm90CisgICAgICAgYWxsIG1vZGVzIG5lZWQgYmUgc3VwcG9ydGVkIGJ5IDxTVFJPTkc+c2dyPC9TVFJPTkc+LCBvbmx5IHRob3NlICBmb3IgIHdoaWNoCisgICAgICAgY29ycmVzcG9uZGluZyBzZXBhcmF0ZSBhdHRyaWJ1dGUgY29tbWFuZHMgZXhpc3QuCisKKyAgICAgICBGb3IgZXhhbXBsZSwgdGhlIERFQyB2dDIyMCBzdXBwb3J0cyBtb3N0IG9mIHRoZSBtb2RlczoKKworCisgICAgICAgICAgIDxTVFJPTkc+dHBhcm08L1NUUk9ORz4gPFNUUk9ORz5wYXJhbWV0ZXI8L1NUUk9ORz4gICA8U1RST05HPmF0dHJpYnV0ZTwvU1RST05HPiAgICA8U1RST05HPmVzY2FwZTwvU1RST05HPiA8U1RST05HPnNlcXVlbmNlPC9TVFJPTkc+CisKKyAgICAgICAgICAgbm9uZSAgICAgICAgICAgICAgbm9uZSAgICAgICAgIFxFWzBtCisgICAgICAgICAgIHAxICAgICAgICAgICAgICAgIHN0YW5kb3V0ICAgICBcRVswOzE7N20KKyAgICAgICAgICAgcDIgICAgICAgICAgICAgICAgdW5kZXJsaW5lICAgIFxFWzA7NG0KKyAgICAgICAgICAgcDMgICAgICAgICAgICAgICAgcmV2ZXJzZSAgICAgIFxFWzA7N20KKyAgICAgICAgICAgcDQgICAgICAgICAgICAgICAgYmxpbmsgICAgICAgIFxFWzA7NW0KKyAgICAgICAgICAgcDUgICAgICAgICAgICAgICAgZGltICAgICAgICAgIG5vdCBhdmFpbGFibGUKKyAgICAgICAgICAgcDYgICAgICAgICAgICAgICAgYm9sZCAgICAgICAgIFxFWzA7MW0KKyAgICAgICAgICAgcDcgICAgICAgICAgICAgICAgaW52aXMgICAgICAgIFxFWzA7OG0KKyAgICAgICAgICAgcDggICAgICAgICAgICAgICAgcHJvdGVjdCAgICAgIG5vdCB1c2VkCisgICAgICAgICAgIHA5ICAgICAgICAgICAgICAgIGFsdGNoYXJzZXQgICBeTyAob2ZmKSBeTiAob24pCisKKyAgICAgICBXZSAgYmVnaW4gZWFjaCBlc2NhcGUgc2VxdWVuY2UgYnkgdHVybmluZyBvZmYgYW55IGV4aXN0aW5nCisgICAgICAgbW9kZXMsIHNpbmNlIHRoZXJlIGlzIG5vIHF1aWNrIHdheSAgdG8gIGRldGVybWluZSAgd2hldGhlcgorICAgICAgIHRoZXkgYXJlIGFjdGl2ZS4gIFN0YW5kb3V0IGlzIHNldCB1cCB0byBiZSB0aGUgY29tYmluYXRpb24KKyAgICAgICBvZiByZXZlcnNlIGFuZCBib2xkLiAgVGhlIHZ0MjIwICB0ZXJtaW5hbCAgaGFzICBhICBwcm90ZWN0CisgICAgICAgbW9kZSwgIHRob3VnaCAgaXQgIGlzICBub3QgY29tbW9ubHkgdXNlZCBpbiBzZ3IgYmVjYXVzZSBpdAorICAgICAgIHByb3RlY3RzIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiAgZnJvbSAgdGhlICBob3N0J3MgIGVyYS0KKyAgICAgICBzdXJlcy4gICBUaGUgIGFsdGNoYXJzZXQgbW9kZSBhbHNvIGlzIGRpZmZlcmVudCBpbiB0aGF0IGl0CisgICAgICAgaXMgZWl0aGVyIF5PIG9yIF5OLCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcyBvZmYgb3IgIG9uLgorICAgICAgIElmICBhbGwgIG1vZGVzICBhcmUgIHR1cm5lZCAgb24sIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UgaXMKKyAgICAgICBcRVswOzE7NDs1Ozc7OG1eTi4KKworICAgICAgIFNvbWUgc2VxdWVuY2VzIGFyZSBjb21tb24gdG8gZGlmZmVyZW50IG1vZGVzLiAgIEZvciAgZXhhbS0KKyAgICAgICBwbGUsICA7NyAgaXMgb3V0cHV0IHdoZW4gZWl0aGVyIHAxIG9yIHAzIGlzIHRydWUsIHRoYXQgaXMsCisgICAgICAgaWYgZWl0aGVyIHN0YW5kb3V0IG9yIHJldmVyc2UgbW9kZXMgYXJlIHR1cm5lZCBvbi4KKworICAgICAgIFdyaXRpbmcgb3V0IHRoZSBhYm92ZSBzZXF1ZW5jZXMsIGFsb25nIHdpdGggIHRoZWlyICBkZXBlbi0KKyAgICAgICBkZW5jaWVzIHlpZWxkcworCisKKyAgICAgICAgIDxTVFJPTkc+c2VxdWVuY2U8L1NUUk9ORz4gICAgPFNUUk9ORz53aGVuPC9TVFJPTkc+IDxTVFJPTkc+dG88L1NUUk9ORz4gPFNUUk9ORz5vdXRwdXQ8L1NUUk9ORz4gICAgIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gPFNUUk9ORz50cmFuc2xhdGlvbjwvU1RST05HPgorCisgICAgICAgICBcRVswICAgICAgIGFsd2F5cyAgICAgICAgICAgICAgXEVbMAorICAgICAgICAgOzEgICAgICAgICBpZiBwMSBvciBwNiAgICAgICAgICU/JXAxJXA2JXwldDsxJTsKKyAgICAgICAgIDs0ICAgICAgICAgaWYgcDIgICAgICAgICAgICAgICAlPyVwMiV8JXQ7NCU7CisgICAgICAgICA7NSAgICAgICAgIGlmIHA0ICAgICAgICAgICAgICAgJT8lcDQlfCV0OzUlOworCisgICAgICAgICA7NyAgICAgICAgIGlmIHAxIG9yIHAzICAgICAgICAgJT8lcDElcDMlfCV0OzclOworICAgICAgICAgOzggICAgICAgICBpZiBwNyAgICAgICAgICAgICAgICU/JXA3JXwldDs4JTsKKyAgICAgICAgIG0gICAgICAgICAgYWx3YXlzICAgICAgICAgICAgICBtCisgICAgICAgICBeTiBvciBeTyAgIGlmIHA5IF5OLCBlbHNlIF5PICAgJT8lcDkldF5OJWVeTyU7CisKKyAgICAgICBQdXR0aW5nIHRoaXMgYWxsIHRvZ2V0aGVyIGludG8gdGhlIHNnciBzZXF1ZW5jZSBnaXZlczoKKworICAgICAgICAgICBzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTsKKyAgICAgICAgICAgICAgICU/JXA0JXQ7NSU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKworICAgICAgIFJlbWVtYmVyICB0aGF0ICBpZiAgeW91IHNwZWNpZnkgc2dyLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkKKyAgICAgICBzZ3IwLiAgQWxzbywgc29tZSBpbXBsZW1lbnRhdGlvbnMgcmVseSBvbiBzZ3IgYmVpbmcgIGdpdmVuCisgICAgICAgaWYgIHNncjAgIGlzLCBOb3QgYWxsIHRlcm1pbmZvIGVudHJpZXMgbmVjZXNzYXJpbHkgaGF2ZSBhbgorICAgICAgIHNnciBzdHJpbmcsIGhvd2V2ZXIuICBNYW55IHRlcm1pbmZvICBlbnRyaWVzICBhcmUgIGRlcml2ZWQKKyAgICAgICBmcm9tICB0ZXJtY2FwICBlbnRyaWVzIHdoaWNoIGhhdmUgbm8gc2dyIHN0cmluZy4gIFRoZSBvbmx5CisgICAgICAgZHJhd2JhY2sgdG8gYWRkaW5nIGFuIHNnciAgc3RyaW5nICBpcyAgdGhhdCAgdGVybWNhcCAgYWxzbworICAgICAgIGFzc3VtZXMgIHRoYXQgIHNncjAgIGRvZXMgbm90IGV4aXQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKyAgICAgICBtb2RlLgorCisgICAgICAgVGVybWluYWxzIHdpdGggdGhlIGBgbWFnaWMgY29va2llJycgZ2xpdGNoICAoPFNUUk9ORz54bWM8L1NUUk9ORz4pICBkZXBvc2l0CisgICAgICAgc3BlY2lhbCAgIGBgY29va2llcycnICAgd2hlbiAgIHRoZXkgIHJlY2VpdmUgIG1vZGUtc2V0dGluZworICAgICAgIHNlcXVlbmNlcywgd2hpY2ggYWZmZWN0IHRoZSBkaXNwbGF5IGFsZ29yaXRobSByYXRoZXIgIHRoYW4KKyAgICAgICBoYXZpbmcgIGV4dHJhICBiaXRzICBmb3IgIGVhY2ggY2hhcmFjdGVyLiAgU29tZSB0ZXJtaW5hbHMsCisgICAgICAgc3VjaCBhcyB0aGUgSFAgMjYyMSwgIGF1dG9tYXRpY2FsbHkgIGxlYXZlICBzdGFuZG91dCAgbW9kZQorICAgICAgIHdoZW4gIHRoZXkgIG1vdmUgdG8gYSBuZXcgbGluZSBvciB0aGUgY3Vyc29yIGlzIGFkZHJlc3NlZC4KKyAgICAgICBQcm9ncmFtcyB1c2luZyBzdGFuZG91dCBtb2RlICBzaG91bGQgIGV4aXQgIHN0YW5kb3V0ICBtb2RlCisgICAgICAgYmVmb3JlICBtb3ZpbmcgdGhlIGN1cnNvciBvciBzZW5kaW5nIGEgbmV3bGluZSwgdW5sZXNzIHRoZQorICAgICAgIDxTVFJPTkc+bXNncjwvU1RST05HPiBjYXBhYmlsaXR5LCBhc3NlcnRpbmcgdGhhdCBpdCAgaXMgIHNhZmUgIHRvICBtb3ZlICBpbgorICAgICAgIHN0YW5kb3V0IG1vZGUsIGlzIHByZXNlbnQuCisKKyAgICAgICBJZiAgdGhlIHRlcm1pbmFsIGhhcyBhIHdheSBvZiBmbGFzaGluZyB0aGUgc2NyZWVuIHRvIGluZGktCisgICAgICAgY2F0ZSBhbiBlcnJvciBxdWlldGx5IChhIGJlbGwgcmVwbGFjZW1lbnQpIHRoZW4gIHRoaXMgIGNhbgorICAgICAgIGJlIGdpdmVuIGFzIDxTVFJPTkc+Zmxhc2g8L1NUUk9ORz47IGl0IG11c3Qgbm90IG1vdmUgdGhlIGN1cnNvci4KKworICAgICAgIElmICB0aGUgIGN1cnNvciAgbmVlZHMgdG8gYmUgbWFkZSBtb3JlIHZpc2libGUgdGhhbiBub3JtYWwKKyAgICAgICB3aGVuIGl0IGlzIG5vdCBvbiB0aGUgYm90dG9tIGxpbmUgKHRvIG1ha2UsIGZvciBleGFtcGxlLCBhCisgICAgICAgbm9uLWJsaW5raW5nICB1bmRlcmxpbmUgIGludG8gIGFuICBlYXNpZXIgdG8gZmluZCBibG9jayBvcgorICAgICAgIGJsaW5raW5nIHVuZGVybGluZSkgZ2l2ZSB0aGlzIHNlcXVlbmNlIGFzIDxTVFJPTkc+Y3Z2aXM8L1NUUk9ORz4uICBJZiB0aGVyZQorICAgICAgIGlzICBhICB3YXkgIHRvICBtYWtlIHRoZSBjdXJzb3IgY29tcGxldGVseSBpbnZpc2libGUsIGdpdmUKKyAgICAgICB0aGF0IGFzIDxTVFJPTkc+Y2l2aXM8L1NUUk9ORz4uICBUaGUgY2FwYWJpbGl0eSA8U1RST05HPmNub3JtPC9TVFJPTkc+IHNob3VsZCBiZSBnaXZlbiB3aGljaAorICAgICAgIHVuZG9lcyB0aGUgZWZmZWN0cyBvZiBib3RoIG9mIHRoZXNlIG1vZGVzLgorCisgICAgICAgSWYgeW91ciB0ZXJtaW5hbCBjb3JyZWN0bHkgZ2VuZXJhdGVzIHVuZGVybGluZWQgY2hhcmFjdGVycworICAgICAgICh3aXRoIG5vIHNwZWNpYWwgY29kZXMgbmVlZGVkKSBldmVuICB0aG91Z2ggIGl0ICBkb2VzICBub3QKKyAgICAgICBvdmVyc3RyaWtlLCAgdGhlbiB5b3Ugc2hvdWxkIGdpdmUgdGhlIGNhcGFiaWxpdHkgPFNUUk9ORz51bDwvU1RST05HPi4gIElmIGEKKyAgICAgICBjaGFyYWN0ZXIgb3ZlcnN0cmlraW5nIGFub3RoZXIgbGVhdmVzIGJvdGggIGNoYXJhY3RlcnMgIG9uCisgICAgICAgdGhlIHNjcmVlbiwgc3BlY2lmeSB0aGUgY2FwYWJpbGl0eSA8U1RST05HPm9zPC9TVFJPTkc+LiAgSWYgb3ZlcnN0cmlrZXMgYXJlCisgICAgICAgZXJhc2FibGUgd2l0aCBhIGJsYW5rLCB0aGVuIHRoaXMgc2hvdWxkICBiZSAgaW5kaWNhdGVkICBieQorICAgICAgIGdpdmluZyA8U1RST05HPmVvPC9TVFJPTkc+LgorCisKKyAgIDxTVFJPTkc+S2V5cGFkPC9TVFJPTkc+IDxTVFJPTkc+YW5kPC9TVFJPTkc+IDxTVFJPTkc+RnVuY3Rpb248L1NUUk9ORz4gPFNUUk9ORz5LZXlzPC9TVFJPTkc+CisgICAgICAgSWYgdGhlIHRlcm1pbmFsIGhhcyBhIGtleXBhZCB0aGF0IHRyYW5zbWl0cyBjb2RlcyB3aGVuIHRoZQorICAgICAgIGtleXMgYXJlIHByZXNzZWQsIHRoaXMgaW5mb3JtYXRpb24gIGNhbiAgYmUgIGdpdmVuLiAgIE5vdGUKKyAgICAgICB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUgdGVybWluYWxzIHdoZXJlIHRoZSBrZXktCisgICAgICAgcGFkIG9ubHkgd29ya3MgaW4gbG9jYWwgKHRoaXMgYXBwbGllcywgZm9yIGV4YW1wbGUsIHRvIHRoZQorICAgICAgIHVuc2hpZnRlZCAgSFAgIDI2MjEgIGtleXMpLiAgIElmICB0aGUga2V5cGFkIGNhbiBiZSBzZXQgdG8KKyAgICAgICB0cmFuc21pdCBvciBub3QgdHJhbnNtaXQsIGdpdmUgdGhlc2UgIGNvZGVzICBhcyAgPFNUUk9ORz5zbWt4PC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPnJta3g8L1NUUk9ORz4uICBPdGhlcndpc2UgdGhlIGtleXBhZCBpcyBhc3N1bWVkIHRvIGFsd2F5cyB0cmFuc21pdC4KKyAgICAgICBUaGUgY29kZXMgc2VudCBieSB0aGUgbGVmdCBhcnJvdywgcmlnaHQgYXJyb3csICB1cCAgYXJyb3csCisgICAgICAgZG93biAgYXJyb3csICBhbmQgIGhvbWUga2V5cyBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5rY3ViMSw8L1NUUk9ORz4gPFNUUk9ORz5rY3VmMSw8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmtjdXUxLDwvU1RST05HPiA8U1RST05HPmtjdWQxLDwvU1RST05HPiBhbmQgPFNUUk9ORz5raG9tZTwvU1RST05HPiByZXNwZWN0aXZlbHkuICBJZiB0aGVyZSBhcmUgIGZ1bmMtCisgICAgICAgdGlvbiAga2V5cyAgc3VjaCAgYXMgZjAsIGYxLCAuLi4sIGYxMCwgdGhlIGNvZGVzIHRoZXkgc2VuZAorICAgICAgIGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPmtmMCw8L1NUUk9ORz4gPFNUUk9ORz5rZjEsPC9TVFJPTkc+IDxTVFJPTkc+Li4uLDwvU1RST05HPiA8U1RST05HPmtmMTA8L1NUUk9ORz4uICBJZiB0aGVzZSAga2V5cyAgaGF2ZQorICAgICAgIGxhYmVscyAgb3RoZXIgIHRoYW4gdGhlIGRlZmF1bHQgZjAgdGhyb3VnaCBmMTAsIHRoZSBsYWJlbHMKKyAgICAgICBjYW4gIGJlICBnaXZlbiAgYXMgIDxTVFJPTkc+bGYwLDwvU1RST05HPiAgPFNUUk9ORz5sZjEsPC9TVFJPTkc+ICA8U1RST05HPi4uLiw8L1NUUk9ORz4gIDxTVFJPTkc+bGYxMDwvU1RST05HPi4gICAgVGhlICAgY29kZXMKKyAgICAgICB0cmFuc21pdHRlZCAgYnkgIGNlcnRhaW4gIG90aGVyIHNwZWNpYWwga2V5cyBjYW4gYmUgZ2l2ZW46CisgICAgICAgPFNUUk9ORz5rbGw8L1NUUk9ORz4gKGhvbWUgZG93biksIDxTVFJPTkc+a2JzPC9TVFJPTkc+IChiYWNrc3BhY2UpLCA8U1RST05HPmt0YmM8L1NUUk9ORz4gKGNsZWFyICBhbGwgIHRhYnMpLAorICAgICAgIDxTVFJPTkc+a2N0YWI8L1NUUk9ORz4gIChjbGVhciAgdGhlICB0YWIgIHN0b3AgaW4gdGhpcyBjb2x1bW4pLCA8U1RST05HPmtjbHI8L1NUUk9ORz4gKGNsZWFyCisgICAgICAgc2NyZWVuIG9yICBlcmFzZSAga2V5KSwgIDxTVFJPTkc+a2RjaDE8L1NUUk9ORz4gIChkZWxldGUgIGNoYXJhY3RlciksICA8U1RST05HPmtkbDE8L1NUUk9ORz4KKyAgICAgICAoZGVsZXRlIGxpbmUpLCA8U1RST05HPmtybWlyPC9TVFJPTkc+IChleGl0IGluc2VydCBtb2RlKSwgPFNUUk9ORz5rZWw8L1NUUk9ORz4gKGNsZWFyIHRvIGVuZAorICAgICAgIG9mIGxpbmUpLCA8U1RST05HPmtlZDwvU1RST05HPiAoY2xlYXIgdG8gIGVuZCAgb2YgIHNjcmVlbiksICA8U1RST05HPmtpY2gxPC9TVFJPTkc+ICAoaW5zZXJ0CisgICAgICAgY2hhcmFjdGVyICBvciAgZW50ZXIgaW5zZXJ0IG1vZGUpLCA8U1RST05HPmtpbDE8L1NUUk9ORz4gKGluc2VydCBsaW5lKSwgPFNUUk9ORz5rbnA8L1NUUk9ORz4KKyAgICAgICAobmV4dCAgcGFnZSksICA8U1RST05HPmtwcDwvU1RST05HPiAgKHByZXZpb3VzICBwYWdlKSwgIDxTVFJPTkc+a2luZDwvU1RST05HPiAgKHNjcm9sbCAgZm9yLQorICAgICAgIHdhcmQvZG93biksIDxTVFJPTkc+a3JpPC9TVFJPTkc+IChzY3JvbGwgYmFja3dhcmQvdXApLCA8U1RST05HPmtodHM8L1NUUk9ORz4gKHNldCBhIHRhYiBzdG9wCisgICAgICAgaW4gdGhpcyBjb2x1bW4pLiAgSW4gYWRkaXRpb24sIGlmIHRoZSBrZXlwYWQgaGFzIGEgMyBieSAgMworICAgICAgIGFycmF5ICBvZiAga2V5cyAgaW5jbHVkaW5nICB0aGUgZm91ciBhcnJvdyBrZXlzLCB0aGUgb3RoZXIKKyAgICAgICBmaXZlIGtleXMgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+a2ExPC9TVFJPTkc+LCA8U1RST05HPmthMzwvU1RST05HPiwgIDxTVFJPTkc+a2IyPC9TVFJPTkc+LCAgPFNUUk9ORz5rYzE8L1NUUk9ORz4sICBhbmQgIDxTVFJPTkc+a2MzPC9TVFJPTkc+LgorICAgICAgIFRoZXNlICBrZXlzIGFyZSB1c2VmdWwgd2hlbiB0aGUgZWZmZWN0cyBvZiBhIDMgYnkgMyBkaXJlYy0KKyAgICAgICB0aW9uYWwgcGFkIGFyZSBuZWVkZWQuCisKKyAgICAgICBTdHJpbmdzIHRvIHByb2dyYW0gZnVuY3Rpb24ga2V5cyBjYW4gYmUgIGdpdmVuICBhcyAgPFNUUk9ORz5wZmtleTwvU1RST05HPiwKKyAgICAgICA8U1RST05HPnBmbG9jPC9TVFJPTkc+LCAgYW5kIDxTVFJPTkc+cGZ4PC9TVFJPTkc+LiAgQSBzdHJpbmcgdG8gcHJvZ3JhbSBzY3JlZW4gbGFiZWxzIHNob3VsZAorICAgICAgIGJlIHNwZWNpZmllZCBhcyA8U1RST05HPnBsbjwvU1RST05HPi4gIEVhY2ggIG9mICB0aGVzZSAgc3RyaW5ncyAgdGFrZXMgIHR3bworICAgICAgIHBhcmFtZXRlcnM6ICB0aGUgZnVuY3Rpb24ga2V5IG51bWJlciB0byBwcm9ncmFtIChmcm9tIDAgdG8KKyAgICAgICAxMCkgYW5kIHRoZSBzdHJpbmcgdG8gcHJvZ3JhbSBpdCB3aXRoLiAgRnVuY3Rpb24ga2V5ICBudW0tCisgICAgICAgYmVycyAgb3V0ICBvZiAgdGhpcyAgcmFuZ2UgbWF5IHByb2dyYW0gdW5kZWZpbmVkIGtleXMgaW4gYQorICAgICAgIHRlcm1pbmFsIGRlcGVuZGVudCBtYW5uZXIuICAgVGhlICBkaWZmZXJlbmNlICBiZXR3ZWVuICB0aGUKKyAgICAgICBjYXBhYmlsaXRpZXMgIGlzICB0aGF0IDxTVFJPTkc+cGZrZXk8L1NUUk9ORz4gY2F1c2VzIHByZXNzaW5nIHRoZSBnaXZlbiBrZXkKKyAgICAgICB0byBiZSB0aGUgc2FtZSBhcyB0aGUgdXNlciB0eXBpbmcgdGhlIGdpdmVuIHN0cmluZzsgIDxTVFJPTkc+cGZsb2M8L1NUUk9ORz4KKyAgICAgICBjYXVzZXMgdGhlIHN0cmluZyB0byBiZSBleGVjdXRlZCBieSB0aGUgdGVybWluYWwgaW4gbG9jYWw7CisgICAgICAgYW5kIDxTVFJPTkc+cGZ4PC9TVFJPTkc+IGNhdXNlcyB0aGUgc3RyaW5nIHRvIGJlIHRyYW5zbWl0dGVkICB0byAgdGhlICBjb20tCisgICAgICAgcHV0ZXIuCisKKyAgICAgICBUaGUgY2FwYWJpbGl0aWVzIDxTVFJPTkc+bmxhYjwvU1RST05HPiwgPFNUUk9ORz5sdzwvU1RST05HPiBhbmQgPFNUUk9ORz5saDwvU1RST05HPiBkZWZpbmUgdGhlIG51bWJlciBvZiBwcm8tCisgICAgICAgZ3JhbW1hYmxlIHNjcmVlbiBsYWJlbHMgYW5kIHRoZWlyIHdpZHRoICBhbmQgIGhlaWdodC4gICBJZgorICAgICAgIHRoZXJlICBhcmUgIGNvbW1hbmRzICB0byAgdHVybiB0aGUgbGFiZWxzIG9uIGFuZCBvZmYsIGdpdmUKKyAgICAgICB0aGVtIGluIDxTVFJPTkc+c21sbjwvU1RST05HPiBhbmQgPFNUUk9ORz5ybWxuPC9TVFJPTkc+LiAgPFNUUk9ORz5zbWxuPC9TVFJPTkc+IGlzIG5vcm1hbGx5IG91dHB1dCBhZnRlciAgb25lCisgICAgICAgb3IgbW9yZSBwbG4gc2VxdWVuY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFuZ2UgYmVjb21lcworICAgICAgIHZpc2libGUuCisKKworICAgPFNUUk9ORz5UYWJzPC9TVFJPTkc+IDxTVFJPTkc+YW5kPC9TVFJPTkc+IDxTVFJPTkc+SW5pdGlhbGl6YXRpb248L1NUUk9ORz4KKyAgICAgICBJZiB0aGUgdGVybWluYWwgaGFzIGhhcmR3YXJlIHRhYnMsIHRoZSBjb21tYW5kIHRvICBhZHZhbmNlCisgICAgICAgdG8gIHRoZSAgbmV4dCB0YWIgc3RvcCBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5odDwvU1RST05HPiAodXN1YWxseSBjb250cm9sCisgICAgICAgSSkuICBBIGBgYmFjay10YWInJyBjb21tYW5kIHdoaWNoIG1vdmVzICBsZWZ0d2FyZCAgdG8gIHRoZQorICAgICAgIHByZWNlZGluZyB0YWIgc3RvcCBjYW4gYmUgZ2l2ZW4gYXMgPFNUUk9ORz5jYnQ8L1NUUk9ORz4uICBCeSBjb252ZW50aW9uLCBpZgorICAgICAgIHRoZSB0ZWxldHlwZSBtb2RlcyBpbmRpY2F0ZSB0aGF0IHRhYnMgYXJlICBiZWluZyAgZXhwYW5kZWQKKyAgICAgICBieSAgdGhlICBjb21wdXRlciAgcmF0aGVyIHRoYW4gYmVpbmcgc2VudCB0byB0aGUgdGVybWluYWwsCisgICAgICAgcHJvZ3JhbXMgc2hvdWxkIG5vdCAgdXNlICA8U1RST05HPmh0PC9TVFJPTkc+ICBvciAgPFNUUk9ORz5jYnQ8L1NUUk9ORz4gIGV2ZW4gIGlmICB0aGV5ICBhcmUKKyAgICAgICBwcmVzZW50LCAgc2luY2UgIHRoZSB1c2VyIG1heSBub3QgaGF2ZSB0aGUgdGFiIHN0b3BzIHByb3AtCisgICAgICAgZXJseSBzZXQuICBJZiB0aGUgdGVybWluYWwgaGFzICBoYXJkd2FyZSAgdGFicyAgd2hpY2ggIGFyZQorICAgICAgIGluaXRpYWxseSAgc2V0IGV2ZXJ5IDxFTT5uPC9FTT4gc3BhY2VzIHdoZW4gdGhlIHRlcm1pbmFsIGlzIHBvd2VyZWQKKyAgICAgICB1cCwgdGhlIG51bWVyaWMgcGFyYW1ldGVyIDxTVFJPTkc+aXQ8L1NUUk9ORz4gaXMgZ2l2ZW4sIHNob3dpbmcgdGhlICBudW1iZXIKKyAgICAgICBvZiAgc3BhY2VzICB0aGUgdGFicyBhcmUgc2V0IHRvLiAgVGhpcyBpcyBub3JtYWxseSB1c2VkIGJ5CisgICAgICAgdGhlIDxFTT50c2V0PC9FTT4gY29tbWFuZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byBzZXQgdGhlIG1vZGUgIGZvcgorICAgICAgIGhhcmR3YXJlICB0YWIgZXhwYW5zaW9uLCBhbmQgd2hldGhlciB0byBzZXQgdGhlIHRhYiBzdG9wcy4KKyAgICAgICBJZiB0aGUgdGVybWluYWwgaGFzIHRhYiBzdG9wcyB0aGF0IGNhbiBiZSAgc2F2ZWQgIGluICBub24tCisgICAgICAgdm9sYXRpbGUgIG1lbW9yeSwgdGhlIHRlcm1pbmZvIGRlc2NyaXB0aW9uIGNhbiBhc3N1bWUgdGhhdAorICAgICAgIHRoZXkgYXJlIHByb3Blcmx5IHNldC4KKworICAgICAgIE90aGVyIGNhcGFiaWxpdGllcyBpbmNsdWRlIDxTVFJPTkc+aXMxPC9TVFJPTkc+LCA8U1RST05HPmlzMjwvU1RST05HPiwgYW5kIDxTVFJPTkc+aXMzPC9TVFJPTkc+LCAgaW5pdGlhbGl6YS0KKyAgICAgICB0aW9uICBzdHJpbmdzICBmb3IgdGhlIHRlcm1pbmFsLCA8U1RST05HPmlwcm9nPC9TVFJPTkc+LCB0aGUgcGF0aCBuYW1lIG9mIGEKKyAgICAgICBwcm9ncmFtIHRvIGJlIHJ1biB0byBpbml0aWFsaXplIHRoZSB0ZXJtaW5hbCwgYW5kIDxTVFJPTkc+aWY8L1NUUk9ORz4sICB0aGUKKyAgICAgICBuYW1lICBvZiAgYSAgZmlsZSAgY29udGFpbmluZyBsb25nIGluaXRpYWxpemF0aW9uIHN0cmluZ3MuCisgICAgICAgVGhlc2Ugc3RyaW5ncyBhcmUgZXhwZWN0ZWQgdG8gc2V0IHRoZSB0ZXJtaW5hbCBpbnRvICBtb2RlcworICAgICAgIGNvbnNpc3RlbnQgIHdpdGggIHRoZSAgcmVzdCAgb2YgIHRoZSB0ZXJtaW5mbyBkZXNjcmlwdGlvbi4KKyAgICAgICBUaGV5IGFyZSBub3JtYWxseSBzZW50IHRvIHRoZSB0ZXJtaW5hbCwgYnkgdGhlIDxFTT5pbml0PC9FTT4gb3B0aW9uCisgICAgICAgb2YgIHRoZSAgPEVNPnRwdXQ8L0VNPiAgcHJvZ3JhbSwgIGVhY2ggdGltZSB0aGUgdXNlciBsb2dzIGluLiAgVGhleQorICAgICAgIHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorCisgICAgICAgICAgICAgIHJ1biB0aGUgcHJvZ3JhbQorICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz5pcHJvZzwvU1RST05HPgorCisgICAgICAgICAgICAgIG91dHB1dCA8U1RST05HPmlzMTwvU1RST05HPiA8U1RST05HPmlzMjwvU1RST05HPgorCisgICAgICAgICAgICAgIHNldCB0aGUgbWFyZ2lucyB1c2luZworICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz5tZ2M8L1NUUk9ORz4sIDxTVFJPTkc+c21nbDwvU1RST05HPiBhbmQgPFNUUk9ORz5zbWdyPC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgc2V0IHRhYnMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dGJjPC9TVFJPTkc+IGFuZCA8U1RST05HPmh0czwvU1RST05HPgorCisgICAgICAgICAgICAgIHByaW50IHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICA8U1RST05HPmlmPC9TVFJPTkc+CisKKyAgICAgICAgICAgICAgYW5kIGZpbmFsbHkKKyAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA8U1RST05HPmlzMzwvU1RST05HPi4KKworICAgICAgIE1vc3QgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSB3aXRoICA8U1RST05HPmlzMjwvU1RST05HPi4gICBTcGVjaWFsICB0ZXJtaW5hbAorICAgICAgIG1vZGVzIGNhbiBiZSBzZXQgdXAgd2l0aG91dCBkdXBsaWNhdGluZyBzdHJpbmdzIGJ5IHB1dHRpbmcKKyAgICAgICB0aGUgY29tbW9uIHNlcXVlbmNlcyBpbiA8U1RST05HPmlzMjwvU1RST05HPiBhbmQgc3BlY2lhbCBjYXNlcyBpbiAgPFNUUk9ORz5pczE8L1NUUk9ORz4gIGFuZAorICAgICAgIDxTVFJPTkc+aXMzPC9TVFJPTkc+LgorCisgICAgICAgQSBzZXQgb2Ygc2VxdWVuY2VzIHRoYXQgZG9lcyBhIGhhcmRlciByZXNldCBmcm9tIGEgdG90YWxseQorICAgICAgIHVua25vd24gc3RhdGUgY2FuIGJlIGdpdmVuIGFzIDxTVFJPTkc+cnMxPC9TVFJPTkc+LCA8U1RST05HPnJzMjwvU1RST05HPiwgPFNUUk9ORz5yZjwvU1RST05HPiBhbmQgPFNUUk9ORz5yczM8L1NUUk9ORz4sIGFuYWxvLQorICAgICAgIGdvdXMgIHRvICA8U1RST05HPmlzMTwvU1RST05HPiAgPFNUUk9ORz4sPC9TVFJPTkc+ICA8U1RST05HPmlzMjwvU1RST05HPiAgPFNUUk9ORz4sPC9TVFJPTkc+ICA8U1RST05HPmlmPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz5pczM8L1NUUk9ORz4gcmVzcGVjdGl2ZWx5LiAgVGhlc2UKKyAgICAgICBzdHJpbmdzIGFyZSBvdXRwdXQgYnkgdGhlIDxFTT5yZXNldDwvRU0+ICBwcm9ncmFtLCAgd2hpY2ggIGlzICB1c2VkCisgICAgICAgd2hlbiAgdGhlIHRlcm1pbmFsIGdldHMgaW50byBhIHdlZGdlZCBzdGF0ZS4gIENvbW1hbmRzIGFyZQorICAgICAgIG5vcm1hbGx5IHBsYWNlZCBpbiA8U1RST05HPnJzMTwvU1RST05HPiwgPFNUUk9ORz5yczI8L1NUUk9ORz4gPFNUUk9ORz5yczM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cmY8L1NUUk9ORz4gb25seSBpZiAgdGhleSAgcHJvLQorICAgICAgIGR1Y2UgIGFubm95aW5nIGVmZmVjdHMgb24gdGhlIHNjcmVlbiBhbmQgYXJlIG5vdCBuZWNlc3NhcnkKKyAgICAgICB3aGVuIGxvZ2dpbmcgaW4uICBGb3IgZXhhbXBsZSwgIHRoZSAgY29tbWFuZCAgdG8gIHNldCAgdGhlCisgICAgICAgdnQxMDAgIGludG8gIDgwLWNvbHVtbiBtb2RlIHdvdWxkIG5vcm1hbGx5IGJlIHBhcnQgb2YgPFNUUk9ORz5pczI8L1NUUk9ORz4sCisgICAgICAgYnV0IGl0IGNhdXNlcyBhbiBhbm5veWluZyBnbGl0Y2ggb2YgdGhlIHNjcmVlbiBhbmQgaXMgIG5vdAorICAgICAgIG5vcm1hbGx5ICBuZWVkZWQgIHNpbmNlIHRoZSB0ZXJtaW5hbCBpcyB1c3VhbGx5IGFscmVhZHkgaW4KKyAgICAgICA4MCBjb2x1bW4gbW9kZS4KKworICAgICAgIFRoZSA8RU0+cmVzZXQ8L0VNPiBwcm9ncmFtIHdyaXRlcyBzdHJpbmdzIGluY2x1ZGluZyA8U1RST05HPmlwcm9nPC9TVFJPTkc+LCBldGMuLCBpbgorICAgICAgIHRoZSAgc2FtZSAgb3JkZXIgIGFzICB0aGUgIDxFTT5pbml0PC9FTT4gIHByb2dyYW0sIHVzaW5nIDxTVFJPTkc+cnMxPC9TVFJPTkc+LCBldGMuLAorICAgICAgIGluc3RlYWQgb2YgPFNUUk9ORz5pczE8L1NUUk9ORz4sIGV0Yy4gIElmIGFueSBvZiA8U1RST05HPnJzMTwvU1RST05HPiwgPFNUUk9ORz5yczI8L1NUUk9ORz4sIDxTVFJPTkc+cnMzPC9TVFJPTkc+LCBvciA8U1RST05HPnJmPC9TVFJPTkc+IHJlc2V0CisgICAgICAgY2FwYWJpbGl0eSAgc3RyaW5ncyAgYXJlICBtaXNzaW5nLCB0aGUgPEVNPnJlc2V0PC9FTT4gcHJvZ3JhbSBmYWxscworICAgICAgIGJhY2sgIHVwb24gIHRoZSAgY29ycmVzcG9uZGluZyAgaW5pdGlhbGl6YXRpb24gIGNhcGFiaWxpdHkKKyAgICAgICBzdHJpbmcuCisKKyAgICAgICBJZiB0aGVyZSBhcmUgY29tbWFuZHMgdG8gc2V0IGFuZCBjbGVhciB0YWIgc3RvcHMsIHRoZXkgY2FuCisgICAgICAgYmUgZ2l2ZW4gYXMgPFNUUk9ORz50YmM8L1NUUk9ORz4gKGNsZWFyIGFsbCB0YWIgc3RvcHMpIGFuZCA8U1RST05HPmh0czwvU1RST05HPiAoc2V0ICBhICB0YWIKKyAgICAgICBzdG9wICBpbiB0aGUgY3VycmVudCBjb2x1bW4gb2YgZXZlcnkgcm93KS4gIElmIGEgbW9yZSBjb20tCisgICAgICAgcGxleCBzZXF1ZW5jZSBpcyBuZWVkZWQgIHRvICBzZXQgIHRoZSAgdGFicyAgdGhhbiAgY2FuICBiZQorICAgICAgIGRlc2NyaWJlZCAgYnkgIHRoaXMsICB0aGUgc2VxdWVuY2UgY2FuIGJlIHBsYWNlZCBpbiA8U1RST05HPmlzMjwvU1RST05HPiBvcgorICAgICAgIDxTVFJPTkc+aWY8L1NUUk9ORz4uCisKKyAgIDxTVFJPTkc+RGVsYXlzPC9TVFJPTkc+IDxTVFJPTkc+YW5kPC9TVFJPTkc+IDxTVFJPTkc+UGFkZGluZzwvU1RST05HPgorICAgICAgIE1hbnkgb2xkZXIgYW5kIHNsb3dlciAgdGVybWluYWxzICBkbyAgbm90ICBzdXBwb3J0ICBlaXRoZXIKKyAgICAgICBYT04vWE9GRiBvciBEVFIgaGFuZHNoYWtpbmcsIGluY2x1ZGluZyBoYXJkIGNvcHkgdGVybWluYWxzCisgICAgICAgYW5kIHNvbWUgdmVyeSBhcmNoYWljIENSVHMgKGluY2x1ZGluZywgIGZvciAgZXhhbXBsZSwgIERFQworICAgICAgIFZUMTAwcykuICAgVGhlc2UgbWF5IHJlcXVpcmUgcGFkZGluZyBjaGFyYWN0ZXJzIGFmdGVyIGNlci0KKyAgICAgICB0YWluIGN1cnNvciBtb3Rpb25zIGFuZCBzY3JlZW4gY2hhbmdlcy4KKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCB1c2VzIHhvbi94b2ZmIGhhbmRzaGFraW5nIGZvciBmbG93IGNvbnRyb2wKKyAgICAgICAodGhhdCAgaXMsIGl0IGF1dG9tYXRpY2FsbHkgZW1pdHMgXlMgYmFjayB0byB0aGUgaG9zdCB3aGVuCisgICAgICAgaXRzIGlucHV0IGJ1ZmZlcnMgYXJlIGNsb3NlIHRvIGZ1bGwpLCBzZXQgPFNUUk9ORz54b248L1NUUk9ORz4uICBUaGlzIGNhcGEtCisgICAgICAgYmlsaXR5ICBzdXBwcmVzc2VzICB0aGUgZW1pc3Npb24gb2YgcGFkZGluZy4gIFlvdSBjYW4gYWxzbworICAgICAgIHNldCBpdCBmb3IgbWVtb3J5LW1hcHBlZCBjb25zb2xlIGRldmljZXMgZWZmZWN0aXZlbHkgIHRoYXQKKyAgICAgICBkbyAgbm90ICBoYXZlICBhICBzcGVlZCBsaW1pdC4gIFBhZGRpbmcgaW5mb3JtYXRpb24gc2hvdWxkCisgICAgICAgc3RpbGwgYmUgaW5jbHVkZWQgc28gdGhhdCByb3V0aW5lcyBjYW4gbWFrZSAgYmV0dGVyICBkZWNpLQorICAgICAgIHNpb25zIGFib3V0IHJlbGF0aXZlIGNvc3RzLCBidXQgYWN0dWFsIHBhZCBjaGFyYWN0ZXJzIHdpbGwKKyAgICAgICBub3QgYmUgdHJhbnNtaXR0ZWQuCisKKyAgICAgICBJZiA8U1RST05HPnBiPC9TVFJPTkc+IChwYWRkaW5nIGJhdWQgcmF0ZSkgaXMgZ2l2ZW4sIHBhZGRpbmcgaXMgIHN1cHByZXNzZWQKKyAgICAgICBhdCAgYmF1ZCByYXRlcyBiZWxvdyB0aGUgdmFsdWUgb2YgPFNUUk9ORz5wYjwvU1RST05HPi4gIElmIHRoZSBlbnRyeSBoYXMgbm8KKyAgICAgICBwYWRkaW5nIGJhdWQgcmF0ZSwgdGhlbiB3aGV0aGVyIHBhZGRpbmcgaXMgZW1pdHRlZCBvciAgbm90CisgICAgICAgaXMgY29tcGxldGVseSBjb250cm9sbGVkIGJ5IDxTVFJPTkc+eG9uPC9TVFJPTkc+LgorCisgICAgICAgSWYgIHRoZSB0ZXJtaW5hbCByZXF1aXJlcyBvdGhlciB0aGFuIGEgbnVsbCAoemVybykgY2hhcmFjLQorICAgICAgIHRlciBhcyBhIHBhZCwgdGhlbiB0aGlzIGNhbiBiZSBnaXZlbiAgYXMgIDxTVFJPTkc+cGFkPC9TVFJPTkc+LiAgIE9ubHkgIHRoZQorICAgICAgIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgPFNUUk9ORz5wYWQ8L1NUUk9ORz4gc3RyaW5nIGlzIHVzZWQuCisKKworICAgPFNUUk9ORz5TdGF0dXM8L1NUUk9ORz4gPFNUUk9ORz5MaW5lczwvU1RST05HPgorICAgICAgIFNvbWUgIHRlcm1pbmFscyAgaGF2ZSAgYW4gZXh0cmEgYHN0YXR1cyBsaW5lJyB3aGljaCBpcyBub3QKKyAgICAgICBub3JtYWxseSB1c2VkIGJ5IHNvZnR3YXJlIChhbmQgdGh1cyAgbm90ICBjb3VudGVkICBpbiAgdGhlCisgICAgICAgdGVybWluYWwncyA8U1RST05HPmxpbmVzPC9TVFJPTkc+IGNhcGFiaWxpdHkpLgorCisgICAgICAgVGhlICBzaW1wbGVzdCAgY2FzZSAgaXMgIGEgIHN0YXR1cyAgbGluZSAgd2hpY2ggaXMgY3Vyc29yLQorICAgICAgIGFkZHJlc3NhYmxlIGJ1dCBub3QgcGFydCBvZiB0aGUgbWFpbiBzY3JvbGxpbmcgIHJlZ2lvbiAgb24KKyAgICAgICB0aGUgIHNjcmVlbjsgIHRoZSAgSGVhdGhraXQgIEgxOSBoYXMgYSBzdGF0dXMgbGluZSBvZiB0aGlzCisgICAgICAga2luZCwgYXMgd291bGQgYSAyNC1saW5lIFZUMTAwIHdpdGggIGEgIDIzLWxpbmUgIHNjcm9sbGluZworICAgICAgIHJlZ2lvbiAgc2V0IHVwIG9uIGluaXRpYWxpemF0aW9uLiAgVGhpcyBzaXR1YXRpb24gaXMgaW5kaS0KKyAgICAgICBjYXRlZCBieSB0aGUgPFNUUk9ORz5oczwvU1RST05HPiBjYXBhYmlsaXR5LgorCisgICAgICAgU29tZSB0ZXJtaW5hbHMgd2l0aCBzdGF0dXMgbGluZXMgbmVlZCBzcGVjaWFsIHNlcXVlbmNlcyB0bworICAgICAgIGFjY2VzcyAgdGhlICBzdGF0dXMgIGxpbmUuICAgVGhlc2UgIG1heSAgYmUgZXhwcmVzc2VkIGFzIGEKKyAgICAgICBzdHJpbmcgd2l0aCBzaW5nbGUgcGFyYW1ldGVyIDxTVFJPTkc+dHNsPC9TVFJPTkc+IHdoaWNoIHRha2VzIHRoZSBjdXJzb3IgdG8KKyAgICAgICBhICBnaXZlbiB6ZXJvLW9yaWdpbiBjb2x1bW4gb24gdGhlIHN0YXR1cyBsaW5lLiAgVGhlIGNhcGEtCisgICAgICAgYmlsaXR5IDxTVFJPTkc+ZnNsPC9TVFJPTkc+IG11c3QgcmV0dXJuIHRvIHRoZSBtYWluLXNjcmVlbiBjdXJzb3IgcG9zaXRpb25zCisgICAgICAgYmVmb3JlICB0aGUgIGxhc3QgIDxTVFJPTkc+dHNsPC9TVFJPTkc+LiAgIFlvdSBtYXkgbmVlZCB0byBlbWJlZCB0aGUgc3RyaW5nCisgICAgICAgdmFsdWVzIG9mIDxTVFJPTkc+c2M8L1NUUk9ORz4gKHNhdmUgY3Vyc29yKSBhbmQgPFNUUk9ORz5yYzwvU1RST05HPiAocmVzdG9yZSBjdXJzb3IpIGluICA8U1RST05HPnRzbDwvU1RST05HPgorICAgICAgIGFuZCA8U1RST05HPmZzbDwvU1RST05HPiB0byBhY2NvbXBsaXNoIHRoaXMuCisKKyAgICAgICBUaGUgIHN0YXR1cyAgbGluZSBpcyBub3JtYWxseSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lIHdpZHRoCisgICAgICAgYXMgdGhlIHdpZHRoIG9mIHRoZSB0ZXJtaW5hbC4gIElmIHRoaXMgaXMgdW50cnVlLCB5b3UgIGNhbgorICAgICAgIHNwZWNpZnkgaXQgd2l0aCB0aGUgbnVtZXJpYyBjYXBhYmlsaXR5IDxTVFJPTkc+d3NsPC9TVFJPTkc+LgorCisgICAgICAgQSAgY29tbWFuZCB0byBlcmFzZSBvciBibGFuayB0aGUgc3RhdHVzIGxpbmUgbWF5IGJlIHNwZWNpLQorICAgICAgIGZpZWQgYXMgPFNUUk9ORz5kc2w8L1NUUk9ORz4uCisKKyAgICAgICBUaGUgIGJvb2xlYW4gIGNhcGFiaWxpdHkgIDxTVFJPTkc+ZXNsb2s8L1NUUk9ORz4gIHNwZWNpZmllcyAgIHRoYXQgICBlc2NhcGUKKyAgICAgICBzZXF1ZW5jZXMsIHRhYnMsIGV0Yy4sIHdvcmsgb3JkaW5hcmlseSBpbiB0aGUgc3RhdHVzIGxpbmUuCisKKyAgICAgICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCB1c2UgYW55ICBvZiAgdGhlc2UKKyAgICAgICBjYXBhYmlsaXRpZXMuICAgVGhleSBhcmUgZG9jdW1lbnRlZCBoZXJlIGluIGNhc2UgdGhleSBldmVyCisgICAgICAgYmVjb21lIGltcG9ydGFudC4KKworCisgICA8U1RST05HPkxpbmU8L1NUUk9ORz4gPFNUUk9ORz5HcmFwaGljczwvU1RST05HPgorICAgICAgIE1hbnkgdGVybWluYWxzIGhhdmUgYWx0ZXJuYXRlIGNoYXJhY3RlciAgc2V0cyAgdXNlZnVsICBmb3IKKyAgICAgICBmb3Jtcy1kcmF3aW5nLiAgIFRlcm1pbmZvICBhbmQgPFNUUk9ORz5jdXJzZXM8L1NUUk9ORz4gYnVpbGQgaW4gc3VwcG9ydCBmb3IKKyAgICAgICB0aGUgZHJhd2luZyBjaGFyYWN0ZXJzIHN1cHBvcnRlZCBieSB0aGUgVlQxMDAsICB3aXRoICBzb21lCisgICAgICAgY2hhcmFjdGVycyAgZnJvbSAgdGhlICBBVCZhbXA7VCAgNDQxMHYxIGFkZGVkLiAgVGhpcyBhbHRlcm5hdGUKKyAgICAgICBjaGFyYWN0ZXIgc2V0IG1heSBiZSBzcGVjaWZpZWQgYnkgdGhlIDxTVFJPTkc+YWNzYzwvU1RST05HPiBjYXBhYmlsaXR5LgorCisKKyAgICAgICAgICAgICAgICA8U1RST05HPkdseXBoPC9TVFJPTkc+ICAgICAgICAgICAgIDxTVFJPTkc+QUNTPC9TVFJPTkc+ICAgICAgICAgICAgPFNUUk9ORz5Bc2NpaTwvU1RST05HPiAgICAgIDxTVFJPTkc+VlQxMDA8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgPFNUUk9ORz5OYW1lPC9TVFJPTkc+ICAgICAgICAgICAgIDxTVFJPTkc+TmFtZTwvU1RST05HPiAgICAgICAgICAgPFNUUk9ORz5EZWZhdWx0PC9TVFJPTkc+ICAgIDxTVFJPTkc+TmFtZTwvU1RST05HPgorICAgICAgIFVLIHBvdW5kIHNpZ24gICAgICAgICAgICAgIEFDU19TVEVSTElORyAgIGYgICAgICAgICAgfQorICAgICAgIGFycm93IHBvaW50aW5nIGRvd24gICAgICAgIEFDU19EQVJST1cgICAgIHYgICAgICAgICAgLgorICAgICAgIGFycm93IHBvaW50aW5nIGxlZnQgICAgICAgIEFDU19MQVJST1cgICAgICZsdDsgICAgICAgICAgLAorICAgICAgIGFycm93IHBvaW50aW5nIHJpZ2h0ICAgICAgIEFDU19SQVJST1cgICAgICZndDsgICAgICAgICAgKworICAgICAgIGFycm93IHBvaW50aW5nIHVwICAgICAgICAgIEFDU19VQVJST1cgICAgIF4gICAgICAgICAgLQorICAgICAgIGJvYXJkIG9mIHNxdWFyZXMgICAgICAgICAgIEFDU19CT0FSRCAgICAgICMgICAgICAgICAgaAorICAgICAgIGJ1bGxldCAgICAgICAgICAgICAgICAgICAgIEFDU19CVUxMRVQgICAgIG8gICAgICAgICAgfgorICAgICAgIGNoZWNrZXIgYm9hcmQgKHN0aXBwbGUpICAgIEFDU19DS0JPQVJEICAgIDogICAgICAgICAgYQorICAgICAgIGRlZ3JlZSBzeW1ib2wgICAgICAgICAgICAgIEFDU19ERUdSRUUgICAgIFwgICAgICAgICAgZgorICAgICAgIGRpYW1vbmQgICAgICAgICAgICAgICAgICAgIEFDU19ESUFNT05EICAgICsgICAgICAgICAgYAorICAgICAgIGdyZWF0ZXItdGhhbi1vci1lcXVhbC10byAgIEFDU19HRVFVQUwgICAgICZndDsgICAgICAgICAgegorICAgICAgIGdyZWVrIHBpICAgICAgICAgICAgICAgICAgIEFDU19QSSAgICAgICAgICogICAgICAgICAgeworICAgICAgIGhvcml6b250YWwgbGluZSAgICAgICAgICAgIEFDU19ITElORSAgICAgIC0gICAgICAgICAgcQorICAgICAgIGxhbnRlcm4gc3ltYm9sICAgICAgICAgICAgIEFDU19MQU5URVJOICAgICMgICAgICAgICAgaQorICAgICAgIGxhcmdlIHBsdXMgb3IgY3Jvc3NvdmVyICAgIEFDU19QTFVTICAgICAgICsgICAgICAgICAgbgorICAgICAgIGxlc3MtdGhhbi1vci1lcXVhbC10byAgICAgIEFDU19MRVFVQUwgICAgICZsdDsgICAgICAgICAgeQorCisgICAgICAgbG93ZXIgbGVmdCBjb3JuZXIgICAgICAgICAgQUNTX0xMQ09STkVSICAgKyAgICAgICAgICBtCisgICAgICAgbG93ZXIgcmlnaHQgY29ybmVyICAgICAgICAgQUNTX0xSQ09STkVSICAgKyAgICAgICAgICBqCisgICAgICAgbm90LWVxdWFsICAgICAgICAgICAgICAgICAgQUNTX05FUVVBTCAgICAgISAgICAgICAgICB8CisgICAgICAgcGx1cy9taW51cyAgICAgICAgICAgICAgICAgQUNTX1BMTUlOVVMgICAgIyAgICAgICAgICBnCisgICAgICAgc2NhbiBsaW5lIDEgICAgICAgICAgICAgICAgQUNTX1MxICAgICAgICAgfiAgICAgICAgICBvCisgICAgICAgc2NhbiBsaW5lIDMgICAgICAgICAgICAgICAgQUNTX1MzICAgICAgICAgLSAgICAgICAgICBwCisgICAgICAgc2NhbiBsaW5lIDcgICAgICAgICAgICAgICAgQUNTX1M3ICAgICAgICAgLSAgICAgICAgICByCisgICAgICAgc2NhbiBsaW5lIDkgICAgICAgICAgICAgICAgQUNTX1M5ICAgICAgICAgXyAgICAgICAgICBzCisgICAgICAgc29saWQgc3F1YXJlIGJsb2NrICAgICAgICAgQUNTX0JMT0NLICAgICAgIyAgICAgICAgICAwCisgICAgICAgdGVlIHBvaW50aW5nIGRvd24gICAgICAgICAgQUNTX1RURUUgICAgICAgKyAgICAgICAgICB3CisgICAgICAgdGVlIHBvaW50aW5nIGxlZnQgICAgICAgICAgQUNTX1JURUUgICAgICAgKyAgICAgICAgICB1CisgICAgICAgdGVlIHBvaW50aW5nIHJpZ2h0ICAgICAgICAgQUNTX0xURUUgICAgICAgKyAgICAgICAgICB0CisgICAgICAgdGVlIHBvaW50aW5nIHVwICAgICAgICAgICAgQUNTX0JURUUgICAgICAgKyAgICAgICAgICB2CisgICAgICAgdXBwZXIgbGVmdCBjb3JuZXIgICAgICAgICAgQUNTX1VMQ09STkVSICAgKyAgICAgICAgICBsCisgICAgICAgdXBwZXIgcmlnaHQgY29ybmVyICAgICAgICAgQUNTX1VSQ09STkVSICAgKyAgICAgICAgICBrCisgICAgICAgdmVydGljYWwgbGluZSAgICAgICAgICAgICAgQUNTX1ZMSU5FICAgICAgfCAgICAgICAgICB4CisKKyAgICAgICBUaGUgYmVzdCB3YXkgdG8gZGVmaW5lIGEgbmV3IGRldmljZSdzIGdyYXBoaWNzIHNldCAgaXMgIHRvCisgICAgICAgYWRkICBhICBjb2x1bW4gIHRvIGEgY29weSBvZiB0aGlzIHRhYmxlIGZvciB5b3VyIHRlcm1pbmFsLAorICAgICAgIGdpdmluZyAgdGhlICBjaGFyYWN0ZXIgICB3aGljaCAgICh3aGVuICAgZW1pdHRlZCAgIGJldHdlZW4KKyAgICAgICA8U1RST05HPnNtYWNzPC9TVFJPTkc+LzxTVFJPTkc+cm1hY3M8L1NUUk9ORz4gIHN3aXRjaGVzKSB3aWxsIGJlIHJlbmRlcmVkIGFzIHRoZSBjb3JyZXNwb25kLQorICAgICAgIGluZyBncmFwaGljLiAgVGhlbiByZWFkIG9mZiB0aGUgVlQxMDAveW91ciB0ZXJtaW5hbCAgY2hhci0KKyAgICAgICBhY3RlciAgcGFpcnMgIHJpZ2h0ICB0byBsZWZ0IGluIHNlcXVlbmNlOyB0aGVzZSBiZWNvbWUgdGhlCisgICAgICAgQUNTQyBzdHJpbmcuCisKKworICAgPFNUUk9ORz5Db2xvcjwvU1RST05HPiA8U1RST05HPkhhbmRsaW5nPC9TVFJPTkc+CisgICAgICAgTW9zdCBjb2xvciB0ZXJtaW5hbHMgYXJlIGVpdGhlciBgVGVrdHJvbml4LWxpa2UnICBvciAgYEhQLQorICAgICAgIGxpa2UnLiAgIFRla3Ryb25peC1saWtlIHRlcm1pbmFscyBoYXZlIGEgcHJlZGVmaW5lZCBzZXQgb2YKKyAgICAgICBOIGNvbG9ycyAod2hlcmUgTiB1c3VhbGx5IDgpLCBhbmQgY2FuICBzZXQgIGNoYXJhY3Rlci1jZWxsCisgICAgICAgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjaGFyYWN0ZXJzIGluZGVwZW5kZW50bHksIG1peGluZworICAgICAgIHRoZW0gaW50byBOICogTiBjb2xvci1wYWlycy4gIE9uICBIUC1saWtlICB0ZXJtaW5hbHMsICB0aGUKKyAgICAgICB1c2UgbXVzdCBzZXQgZWFjaCBjb2xvciBwYWlyIHVwIHNlcGFyYXRlbHkgKGZvcmVncm91bmQgYW5kCisgICAgICAgYmFja2dyb3VuZCBhcmUgIG5vdCAgaW5kZXBlbmRlbnRseSAgc2V0dGFibGUpLiAgIFVwICB0byAgTQorICAgICAgIGNvbG9yLXBhaXJzICBtYXkgIGJlICBzZXQgIHVwICBmcm9tICAyKk0gZGlmZmVyZW50IGNvbG9ycy4KKyAgICAgICBBTlNJLWNvbXBhdGlibGUgdGVybWluYWxzIGFyZSBUZWt0cm9uaXgtbGlrZS4KKworICAgICAgIFNvbWUgYmFzaWMgY29sb3IgY2FwYWJpbGl0aWVzIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgY29sb3IKKyAgICAgICBtZXRob2QuICBUaGUgbnVtZXJpYyBjYXBhYmlsaXRpZXMgPFNUUk9ORz5jb2xvcnM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+cGFpcnM8L1NUUk9ORz4gc3BlY2lmeQorICAgICAgIHRoZSBtYXhpbXVtIG51bWJlcnMgb2YgY29sb3JzIGFuZCBjb2xvci1wYWlycyB0aGF0IGNhbiAgYmUKKyAgICAgICBkaXNwbGF5ZWQgIHNpbXVsdGFuZW91c2x5LiAgIFRoZSA8U1RST05HPm9wPC9TVFJPTkc+IChvcmlnaW5hbCBwYWlyKSBzdHJpbmcKKyAgICAgICByZXNldHMgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgdG8gIHRoZWlyICBkZWZhdWx0CisgICAgICAgdmFsdWVzICBmb3IgdGhlIHRlcm1pbmFsLiAgVGhlIDxTVFJPTkc+b2M8L1NUUk9ORz4gc3RyaW5nIHJlc2V0cyBhbGwgY29sb3JzCisgICAgICAgb3IgY29sb3ItcGFpcnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMgZm9yICB0aGUgIHRlcm1pbmFsLgorICAgICAgIFNvbWUgIHRlcm1pbmFscyAgKGluY2x1ZGluZyAgbWFueSAgUEMgIHRlcm1pbmFsIGVtdWxhdG9ycykKKyAgICAgICBlcmFzZSBzY3JlZW4gIGFyZWFzICB3aXRoICB0aGUgIGN1cnJlbnQgIGJhY2tncm91bmQgIGNvbG9yCisgICAgICAgcmF0aGVyICB0aGFuIHRoZSBwb3dlci11cCBkZWZhdWx0IGJhY2tncm91bmQ7IHRoZXNlIHNob3VsZAorICAgICAgIGhhdmUgdGhlIGJvb2xlYW4gY2FwYWJpbGl0eSA8U1RST05HPmJjZTwvU1RST05HPi4KKworICAgICAgIFRvIGNoYW5nZSB0aGUgY3VycmVudCBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3Igb24gIGEKKyAgICAgICBUZWt0cm9uaXgtdHlwZSAgdGVybWluYWwsICB1c2UgPFNUUk9ORz5zZXRhZjwvU1RST05HPiAoc2V0IEFOU0kgZm9yZWdyb3VuZCkKKyAgICAgICBhbmQgPFNUUk9ORz5zZXRhYjwvU1RST05HPiAoc2V0IEFOU0kgYmFja2dyb3VuZCkgb3IgPFNUUk9ORz5zZXRmPC9TVFJPTkc+ICAoc2V0ICBmb3JlZ3JvdW5kKQorICAgICAgIGFuZCAgPFNUUk9ORz5zZXRiPC9TVFJPTkc+IChzZXQgYmFja2dyb3VuZCkuICBUaGVzZSB0YWtlIG9uZSBwYXJhbWV0ZXIsIHRoZQorICAgICAgIGNvbG9yICBudW1iZXIuICAgVGhlICBTVnI0ICBkb2N1bWVudGF0aW9uICBkZXNjcmliZXMgIG9ubHkKKyAgICAgICA8U1RST05HPnNldGFmPC9TVFJPTkc+LzxTVFJPTkc+c2V0YWI8L1NUUk9ORz47ICB0aGUgIFhQRzQgIGRyYWZ0ICBzYXlzIHRoYXQgIklmIHRoZSB0ZXJtaW5hbAorICAgICAgIHN1cHBvcnRzIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0byBzZXQgYmFja2dyb3VuZCBhbmQgZm9yZS0KKyAgICAgICBncm91bmQsICB0aGV5ICBzaG91bGQgYmUgY29kZWQgYXMgPFNUUk9ORz5zZXRhZjwvU1RST05HPiBhbmQgPFNUUk9ORz5zZXRhYjwvU1RST05HPiwgcmVzcGVjLQorICAgICAgIHRpdmVseS4gIElmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBvdGhlciAgZXNjYXBlICBzZXF1ZW5jZXMKKyAgICAgICB0byAgc2V0IGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQsIHRoZXkgc2hvdWxkIGJlIGNvZGVkIGFzCisgICAgICAgPFNUUk9ORz5zZXRmPC9TVFJPTkc+IGFuZCA8U1RST05HPnNldGI8L1NUUk9ORz4sIHJlc3BlY3RpdmVseS4gIFRoZSA8RU0+dmlkcHV0cygpPC9FTT4gIGZ1bmN0aW9uICBhbmQKKyAgICAgICB0aGUgIHJlZnJlc2ggIGZ1bmN0aW9ucyAgdXNlICA8U1RST05HPnNldGFmPC9TVFJPTkc+ICBhbmQgPFNUUk9ORz5zZXRhYjwvU1RST05HPiBpZiB0aGV5IGFyZQorICAgICAgIGRlZmluZWQuIgorCisgICAgICAgVGhlIDxTVFJPTkc+c2V0YWY8L1NUUk9ORz4vPFNUUk9ORz5zZXRhYjwvU1RST05HPiBhbmQgPFNUUk9ORz5zZXRmPC9TVFJPTkc+LzxTVFJPTkc+c2V0YjwvU1RST05HPiBjYXBhYmlsaXRpZXMgdGFrZSAgYSAgc2luZ2xlCisgICAgICAgbnVtZXJpYyBhcmd1bWVudCBlYWNoLiAgQXJndW1lbnQgdmFsdWVzIDAtNyBvZiA8U1RST05HPnNldGFmPC9TVFJPTkc+LzxTVFJPTkc+c2V0YWI8L1NUUk9ORz4KKyAgICAgICBhcmUgcG9ydGFibHkgZGVmaW5lZCBhcyBmb2xsb3dzICh0aGUgbWlkZGxlIGNvbHVtbiBpcyAgdGhlCisgICAgICAgc3ltYm9saWMgI2RlZmluZSBhdmFpbGFibGUgaW4gdGhlIGhlYWRlciBmb3IgdGhlIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IG9yCisgICAgICAgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IGxpYnJhcmllcykuICBUaGUgdGVybWluYWwgaGFyZHdhcmUgaXMgZnJlZSB0byAgbWFwCisgICAgICAgdGhlc2UgIGFzICBpdCAgbGlrZXMsICBidXQgIHRoZSBSR0IgdmFsdWVzIGluZGljYXRlIG5vcm1hbAorICAgICAgIGxvY2F0aW9ucyBpbiBjb2xvciBzcGFjZS4KKworCisgICAgICAgICAgICAgPFNUUk9ORz5Db2xvcjwvU1RST05HPiAgICAgICA8U1RST05HPiNkZWZpbmU8L1NUUk9ORz4gICAgICAgPFNUUk9ORz5WYWx1ZTwvU1RST05HPiAgICAgICA8U1RST05HPlJHQjwvU1RST05HPgorICAgICAgICAgICAgIGJsYWNrICAgICA8U1RST05HPkNPTE9SX0JMQUNLPC9TVFJPTkc+ICAgICAgIDAgICAgIDAsIDAsIDAKKyAgICAgICAgICAgICByZWQgICAgICAgPFNUUk9ORz5DT0xPUl9SRUQ8L1NUUk9ORz4gICAgICAgICAxICAgICBtYXgsMCwwCisgICAgICAgICAgICAgZ3JlZW4gICAgIDxTVFJPTkc+Q09MT1JfR1JFRU48L1NUUk9ORz4gICAgICAgMiAgICAgMCxtYXgsMAorICAgICAgICAgICAgIHllbGxvdyAgICA8U1RST05HPkNPTE9SX1lFTExPVzwvU1RST05HPiAgICAgIDMgICAgIG1heCxtYXgsMAorICAgICAgICAgICAgIGJsdWUgICAgICA8U1RST05HPkNPTE9SX0JMVUU8L1NUUk9ORz4gICAgICAgIDQgICAgIDAsMCxtYXgKKyAgICAgICAgICAgICBtYWdlbnRhICAgPFNUUk9ORz5DT0xPUl9NQUdFTlRBPC9TVFJPTkc+ICAgICA1ICAgICBtYXgsMCxtYXgKKyAgICAgICAgICAgICBjeWFuICAgICAgPFNUUk9ORz5DT0xPUl9DWUFOPC9TVFJPTkc+ICAgICAgICA2ICAgICAwLG1heCxtYXgKKyAgICAgICAgICAgICB3aGl0ZSAgICAgPFNUUk9ORz5DT0xPUl9XSElURTwvU1RST05HPiAgICAgICA3ICAgICBtYXgsbWF4LG1heAorCisgICAgICAgVGhlIGFyZ3VtZW50IHZhbHVlcyBvZiA8U1RST05HPnNldGY8L1NUUk9ORz4vPFNUUk9ORz5zZXRiPC9TVFJPTkc+ICBoaXN0b3JpY2FsbHkgIGNvcnJlc3BvbmQKKyAgICAgICB0byBhIGRpZmZlcmVudCBtYXBwaW5nLCBpLmUuLAorCisgICAgICAgICAgICAgPFNUUk9ORz5Db2xvcjwvU1RST05HPiAgICAgICA8U1RST05HPiNkZWZpbmU8L1NUUk9ORz4gICAgICAgPFNUUk9ORz5WYWx1ZTwvU1RST05HPiAgICAgICA8U1RST05HPlJHQjwvU1RST05HPgorICAgICAgICAgICAgIGJsYWNrICAgICA8U1RST05HPkNPTE9SX0JMQUNLPC9TVFJPTkc+ICAgICAgIDAgICAgIDAsIDAsIDAKKyAgICAgICAgICAgICBibHVlICAgICAgPFNUUk9ORz5DT0xPUl9CTFVFPC9TVFJPTkc+ICAgICAgICAxICAgICAwLDAsbWF4CisgICAgICAgICAgICAgZ3JlZW4gICAgIDxTVFJPTkc+Q09MT1JfR1JFRU48L1NUUk9ORz4gICAgICAgMiAgICAgMCxtYXgsMAorICAgICAgICAgICAgIGN5YW4gICAgICA8U1RST05HPkNPTE9SX0NZQU48L1NUUk9ORz4gICAgICAgIDMgICAgIDAsbWF4LG1heAorICAgICAgICAgICAgIHJlZCAgICAgICA8U1RST05HPkNPTE9SX1JFRDwvU1RST05HPiAgICAgICAgIDQgICAgIG1heCwwLDAKKyAgICAgICAgICAgICBtYWdlbnRhICAgPFNUUk9ORz5DT0xPUl9NQUdFTlRBPC9TVFJPTkc+ICAgICA1ICAgICBtYXgsMCxtYXgKKyAgICAgICAgICAgICB5ZWxsb3cgICAgPFNUUk9ORz5DT0xPUl9ZRUxMT1c8L1NUUk9ORz4gICAgICA2ICAgICBtYXgsbWF4LDAKKyAgICAgICAgICAgICB3aGl0ZSAgICAgPFNUUk9ORz5DT0xPUl9XSElURTwvU1RST05HPiAgICAgICA3ICAgICBtYXgsbWF4LG1heAorICAgICAgIEl0IGlzIGltcG9ydGFudCB0byBub3QgY29uZnVzZSB0aGUgdHdvIHNldHMgb2YgY29sb3IgY2FwYS0KKyAgICAgICBiaWxpdGllczsgb3RoZXJ3aXNlIHJlZC9ibHVlIHdpbGwgYmUgaW50ZXJjaGFuZ2VkICBvbiAgdGhlCisgICAgICAgZGlzcGxheS4KKworICAgICAgIE9uICBhbiAgSFAtbGlrZSB0ZXJtaW5hbCwgdXNlIDxTVFJPTkc+c2NwPC9TVFJPTkc+IHdpdGggYSBjb2xvci1wYWlyIG51bWJlcgorICAgICAgIHBhcmFtZXRlciB0byBzZXQgd2hpY2ggY29sb3IgcGFpciBpcyBjdXJyZW50LgorCisgICAgICAgT24gYSBUZWt0cm9uaXgtbGlrZSB0ZXJtaW5hbCwgdGhlIGNhcGFiaWxpdHkgIDxTVFJPTkc+Y2NjPC9TVFJPTkc+ICBtYXkgIGJlCisgICAgICAgcHJlc2VudCAgdG8gIGluZGljYXRlIHRoYXQgY29sb3JzIGNhbiBiZSBtb2RpZmllZC4gIElmIHNvLAorICAgICAgIHRoZSA8U1RST05HPmluaXRjPC9TVFJPTkc+IGNhcGFiaWxpdHkgd2lsbCB0YWtlIGEgY29sb3IgbnVtYmVyICgwIHRvIDxTVFJPTkc+Y29sb3JzPC9TVFJPTkc+CisgICAgICAgLSAgMSlhbmQgIHRocmVlICBtb3JlIHBhcmFtZXRlcnMgd2hpY2ggZGVzY3JpYmUgdGhlIGNvbG9yLgorICAgICAgIFRoZXNlIHRocmVlIHBhcmFtZXRlcnMgZGVmYXVsdCB0byBiZWluZyBpbnRlcnByZXRlZCBhcyBSR0IKKyAgICAgICAoUmVkLCAgR3JlZW4sIEJsdWUpIHZhbHVlcy4gIElmIHRoZSBib29sZWFuIGNhcGFiaWxpdHkgPFNUUk9ORz5obHM8L1NUUk9ORz4KKyAgICAgICBpcyBwcmVzZW50LCB0aGV5IGFyZSBpbnN0ZWFkIGFzIEhMUyAoSHVlLCBMaWdodG5lc3MsIFNhdHUtCisgICAgICAgcmF0aW9uKSBpbmRpY2VzLiAgVGhlIHJhbmdlcyBhcmUgdGVybWluYWwtZGVwZW5kZW50LgorCisgICAgICAgT24gIGFuICBIUC1saWtlICB0ZXJtaW5hbCwgPFNUUk9ORz5pbml0cDwvU1RST05HPiBtYXkgZ2l2ZSBhIGNhcGFiaWxpdHkgZm9yCisgICAgICAgY2hhbmdpbmcgYSBjb2xvci1wYWlyIHZhbHVlLiAgSXQgd2lsbCB0YWtlICBzZXZlbiAgcGFyYW1lLQorICAgICAgIHRlcnM7ICBhICBjb2xvci1wYWlyICBudW1iZXIgKDAgdG8gPFNUUk9ORz5tYXhfcGFpcnM8L1NUUk9ORz4gLSAxKSwgYW5kIHR3bworICAgICAgIHRyaXBsZXMgZGVzY3JpYmluZyBmaXJzdCBiYWNrZ3JvdW5kICBhbmQgIHRoZW4gIGZvcmVncm91bmQKKyAgICAgICBjb2xvcnMuICAgVGhlc2UgIHBhcmFtZXRlcnMgIG11c3QgYmUgKFJlZCwgR3JlZW4sIEJsdWUpIG9yCisgICAgICAgKEh1ZSwgTGlnaHRuZXNzLCBTYXR1cmF0aW9uKSBkZXBlbmRpbmcgb24gPFNUUk9ORz5obHM8L1NUUk9ORz4uCisKKyAgICAgICBPbiBzb21lIGNvbG9yIHRlcm1pbmFscywgY29sb3JzIGNvbGxpZGUgIHdpdGggIGhpZ2hsaWdodHMuCisgICAgICAgWW91IGNhbiByZWdpc3RlciB0aGVzZSBjb2xsaXNpb25zIHdpdGggdGhlIDxTVFJPTkc+bmN2PC9TVFJPTkc+IGNhcGFiaWxpdHkuCisgICAgICAgVGhpcyBpcyBhIGJpdC1tYXNrIG9mIGF0dHJpYnV0ZXMgbm90IHRvIGJlIHVzZWQgd2hlbiAgY29sLQorICAgICAgIG9ycyAgYXJlICBlbmFibGVkLiAgVGhlIGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlIGF0dHJpYnV0ZXMKKyAgICAgICB1bmRlcnN0b29kIGJ5IDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+IGlzIGFzIGZvbGxvd3M6CisKKworICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+QXR0cmlidXRlPC9TVFJPTkc+ICAgICAgPFNUUk9ORz5CaXQ8L1NUUk9ORz4gICA8U1RST05HPkRlY2ltYWw8L1NUUk9ORz4KKyAgICAgICAgICAgICAgICAgICAgICBBX1NUQU5ET1VUICAgICAwICAgICAxCisgICAgICAgICAgICAgICAgICAgICAgQV9VTkRFUkxJTkUgICAgMSAgICAgMgorICAgICAgICAgICAgICAgICAgICAgIEFfUkVWRVJTRSAgICAgIDIgICAgIDQKKyAgICAgICAgICAgICAgICAgICAgICBBX0JMSU5LICAgICAgICAzICAgICA4CisgICAgICAgICAgICAgICAgICAgICAgQV9ESU0gICAgICAgICAgNCAgICAgMTYKKyAgICAgICAgICAgICAgICAgICAgICBBX0JPTEQgICAgICAgICA1ICAgICAzMgorICAgICAgICAgICAgICAgICAgICAgIEFfSU5WSVMgICAgICAgIDYgICAgIDY0CisgICAgICAgICAgICAgICAgICAgICAgQV9QUk9URUNUICAgICAgNyAgICAgMTI4CisgICAgICAgICAgICAgICAgICAgICAgQV9BTFRDSEFSU0VUICAgOCAgICAgMjU2CisKKyAgICAgICBGb3IgZXhhbXBsZSwgIG9uICBtYW55ICBJQk0gIFBDICBjb25zb2xlcywgIHRoZSAgdW5kZXJsaW5lCisgICAgICAgYXR0cmlidXRlICBjb2xsaWRlcyAgd2l0aCB0aGUgZm9yZWdyb3VuZCBjb2xvciBibHVlIGFuZCBpcworICAgICAgIG5vdCBhdmFpbGFibGUgaW4gY29sb3IgbW9kZS4gIFRoZXNlICBzaG91bGQgIGhhdmUgIGFuICA8U1RST05HPm5jdjwvU1RST05HPgorICAgICAgIGNhcGFiaWxpdHkgb2YgMi4KKworICAgICAgIFNWcjQgIGN1cnNlcyAgZG9lcyBub3RoaW5nIHdpdGggPFNUUk9ORz5uY3Y8L1NUUk9ORz4sIG5jdXJzZXMgcmVjb2duaXplcyBpdAorICAgICAgIGFuZCBvcHRpbWl6ZXMgdGhlIG91dHB1dCBpbiBmYXZvciBvZiBjb2xvcnMuCisKKworICAgPFNUUk9ORz5NaXNjZWxsYW5lb3VzPC9TVFJPTkc+CisgICAgICAgSWYgdGhlIHRlcm1pbmFsIHJlcXVpcmVzIG90aGVyIHRoYW4gYSBudWxsICh6ZXJvKSAgY2hhcmFjLQorICAgICAgIHRlciAgYXMgIGEgIHBhZCwgIHRoZW4gdGhpcyBjYW4gYmUgZ2l2ZW4gYXMgcGFkLiAgT25seSB0aGUKKyAgICAgICBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHBhZCBzdHJpbmcgaXMgdXNlZC4gIElmIHRoZSAgdGVybWktCisgICAgICAgbmFsIGRvZXMgbm90IGhhdmUgYSBwYWQgY2hhcmFjdGVyLCBzcGVjaWZ5IG5wYy4gIE5vdGUgdGhhdAorICAgICAgIG5jdXJzZXMgaW1wbGVtZW50cyAgdGhlICB0ZXJtY2FwLWNvbXBhdGlibGUgIDxTVFJPTkc+UEM8L1NUUk9ORz4gIHZhcmlhYmxlOworICAgICAgIHRob3VnaCAgdGhlICBhcHBsaWNhdGlvbiAgbWF5ICBzZXQgdGhpcyB2YWx1ZSB0byBzb21ldGhpbmcKKyAgICAgICBvdGhlciB0aGFuIGEgbnVsbCwgbmN1cnNlcyB3aWxsIHRlc3QgIDxTVFJPTkc+bnBjPC9TVFJPTkc+ICBmaXJzdCAgYW5kICB1c2UKKyAgICAgICBuYXBtcyBpZiB0aGUgdGVybWluYWwgaGFzIG5vIHBhZCBjaGFyYWN0ZXIuCisKKyAgICAgICBJZiAgdGhlIHRlcm1pbmFsIGNhbiBtb3ZlIHVwIG9yIGRvd24gaGFsZiBhIGxpbmUsIHRoaXMgY2FuCisgICAgICAgYmUgaW5kaWNhdGVkIHdpdGggPFNUUk9ORz5odTwvU1RST05HPiAgKGhhbGYtbGluZSAgdXApICBhbmQgIDxTVFJPTkc+aGQ8L1NUUk9ORz4gIChoYWxmLWxpbmUKKyAgICAgICBkb3duKS4gIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3Igc3VwZXJzY3JpcHRzIGFuZCBzdWItCisgICAgICAgc2NyaXB0cyBvbiBoYXJkLWNvcHkgdGVybWluYWxzLiAgSWYgYSAgaGFyZC1jb3B5ICB0ZXJtaW5hbAorICAgICAgIGNhbiAgZWplY3QgIHRvICB0aGUgbmV4dCBwYWdlIChmb3JtIGZlZWQpLCBnaXZlIHRoaXMgYXMgPFNUUk9ORz5mZjwvU1RST05HPgorICAgICAgICh1c3VhbGx5IGNvbnRyb2wgTCkuCisKKyAgICAgICBJZiB0aGVyZSBpcyBhIGNvbW1hbmQgdG8gcmVwZWF0IGEgZ2l2ZW4gY2hhcmFjdGVyIGEgIGdpdmVuCisgICAgICAgbnVtYmVyICBvZiB0aW1lcyAodG8gc2F2ZSB0aW1lIHRyYW5zbWl0dGluZyBhIGxhcmdlIG51bWJlcgorICAgICAgIG9mIGlkZW50aWNhbCBjaGFyYWN0ZXJzKSB0aGlzIGNhbiBiZSAgaW5kaWNhdGVkICB3aXRoICB0aGUKKyAgICAgICBwYXJhbWV0ZXJpemVkICBzdHJpbmcgIDxTVFJPTkc+cmVwPC9TVFJPTkc+LiAgIFRoZSAgZmlyc3QgIHBhcmFtZXRlciBpcyB0aGUKKyAgICAgICBjaGFyYWN0ZXIgdG8gYmUgcmVwZWF0ZWQgYW5kIHRoZSBzZWNvbmQgaXMgdGhlICBudW1iZXIgIG9mCisgICAgICAgdGltZXMgIHRvIHJlcGVhdCBpdC4gIFRodXMsIHRwYXJtKHJlcGVhdF9jaGFyLCAneCcsIDEwKSBpcworICAgICAgIHRoZSBzYW1lIGFzIGB4eHh4eHh4eHh4Jy4KKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCBoYXMgYSBzZXR0YWJsZSBjb21tYW5kIGNoYXJhY3Rlciwgc3VjaCAgYXMKKyAgICAgICB0aGUgIFRFS1RST05JWCAgNDAyNSwgdGhpcyBjYW4gYmUgaW5kaWNhdGVkIHdpdGggPFNUUk9ORz5jbWRjaDwvU1RST05HPi4gIEEKKyAgICAgICBwcm90b3R5cGUgY29tbWFuZCBjaGFyYWN0ZXIgaXMgY2hvc2VuIHdoaWNoIGlzIHVzZWQgaW4gYWxsCisgICAgICAgY2FwYWJpbGl0aWVzLiAgIFRoaXMgY2hhcmFjdGVyIGlzIGdpdmVuIGluIHRoZSA8U1RST05HPmNtZGNoPC9TVFJPTkc+IGNhcGEtCisgICAgICAgYmlsaXR5IHRvIGlkZW50aWZ5IGl0LiAgVGhlIGZvbGxvd2luZyBjb252ZW50aW9uICBpcyAgc3VwLQorICAgICAgIHBvcnRlZCAgb24gIHNvbWUgIFVOSVggIHN5c3RlbXM6ICBUaGUgZW52aXJvbm1lbnQgaXMgdG8gYmUKKyAgICAgICBzZWFyY2hlZCBmb3IgYSA8U1RST05HPkNDPC9TVFJPTkc+IHZhcmlhYmxlLCBhbmQgaWYgZm91bmQsIGFsbCAgb2NjdXJyZW5jZXMKKyAgICAgICBvZiB0aGUgcHJvdG90eXBlIGNoYXJhY3RlciBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgY2hhcmFjdGVyCisgICAgICAgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAgICAgVGVybWluYWwgZGVzY3JpcHRpb25zIHRoYXQgZG8gIG5vdCAgcmVwcmVzZW50ICBhICBzcGVjaWZpYworICAgICAgIGtpbmQgb2Yga25vd24gdGVybWluYWwsIHN1Y2ggYXMgPEVNPnN3aXRjaDwvRU0+LCA8RU0+ZGlhbHVwPC9FTT4sIDxFTT5wYXRjaDwvRU0+LCBhbmQKKyAgICAgICA8RU0+bmV0d29yazwvRU0+LCBzaG91bGQgaW5jbHVkZSB0aGUgIDxTVFJPTkc+Z248L1NUUk9ORz4gIChnZW5lcmljKSAgY2FwYWJpbGl0eSAgc28KKyAgICAgICB0aGF0ICBwcm9ncmFtcyAgY2FuICBjb21wbGFpbiB0aGF0IHRoZXkgZG8gbm90IGtub3cgaG93IHRvCisgICAgICAgdGFsayB0byB0aGUgdGVybWluYWwuICAoVGhpcyBjYXBhYmlsaXR5IGRvZXMgbm90IGFwcGx5ICB0bworICAgICAgIDxFTT52aXJ0dWFsPC9FTT4gICB0ZXJtaW5hbCAgIGRlc2NyaXB0aW9ucyAgZm9yICB3aGljaCAgdGhlICBlc2NhcGUKKyAgICAgICBzZXF1ZW5jZXMgYXJlIGtub3duLikKKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCBoYXMgYSBgYG1ldGEga2V5Jycgd2hpY2ggYWN0cyBhcyAgYSAgc2hpZnQKKyAgICAgICBrZXksICBzZXR0aW5nICB0aGUgIDh0aCAgYml0IG9mIGFueSBjaGFyYWN0ZXIgdHJhbnNtaXR0ZWQsCisgICAgICAgdGhpcyBmYWN0IGNhbiBiZSBpbmRpY2F0ZWQgd2l0aCA8U1RST05HPmttPC9TVFJPTkc+LiAgIE90aGVyd2lzZSwgIHNvZnR3YXJlCisgICAgICAgd2lsbCBhc3N1bWUgdGhhdCB0aGUgOHRoIGJpdCBpcyBwYXJpdHkgYW5kIGl0IHdpbGwgdXN1YWxseQorICAgICAgIGJlIGNsZWFyZWQuICBJZiBzdHJpbmdzIGV4aXN0IHRvIHR1cm4gdGhpcyAgYGBtZXRhICBtb2RlJycKKyAgICAgICBvbiBhbmQgb2ZmLCB0aGV5IGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPnNtbTwvU1RST05HPiBhbmQgPFNUUk9ORz5ybW08L1NUUk9ORz4uCisKKyAgICAgICBJZiAgdGhlIHRlcm1pbmFsIGhhcyBtb3JlIGxpbmVzIG9mIG1lbW9yeSB0aGFuIHdpbGwgZml0IG9uCisgICAgICAgdGhlIHNjcmVlbiBhdCBvbmNlLCB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIG1lbW9yeSAgY2FuICBiZQorICAgICAgIGluZGljYXRlZCAgd2l0aCAgPFNUUk9ORz5sbTwvU1RST05HPi4gICBBICB2YWx1ZSBvZiA8U1RST05HPmxtPC9TVFJPTkc+IzAgaW5kaWNhdGVzIHRoYXQgdGhlCisgICAgICAgbnVtYmVyIG9mIGxpbmVzIGlzIG5vdCBmaXhlZCwgYnV0IHRoYXQgdGhlcmUgaXMgc3RpbGwgbW9yZQorICAgICAgIG1lbW9yeSB0aGFuIGZpdHMgb24gdGhlIHNjcmVlbi4KKworICAgICAgIElmIHRoZSB0ZXJtaW5hbCBpcyBvbmUgb2YgdGhvc2Ugc3VwcG9ydGVkIGJ5IHRoZSBVTklYIHZpci0KKyAgICAgICB0dWFsIHRlcm1pbmFsIHByb3RvY29sLCB0aGUgdGVybWluYWwgbnVtYmVyIGNhbiAgYmUgIGdpdmVuCisgICAgICAgYXMgPFNUUk9ORz52dDwvU1RST05HPi4KKworICAgICAgIE1lZGlhIGNvcHkgc3RyaW5ncyB3aGljaCBjb250cm9sIGFuIGF1eGlsaWFyeSBwcmludGVyIGNvbi0KKyAgICAgICBuZWN0ZWQgdG8gdGhlIHRlcm1pbmFsIGNhbiBiZSBnaXZlbiBhcyA8U1RST05HPm1jMDwvU1RST05HPjogcHJpbnQgdGhlIGNvbi0KKyAgICAgICB0ZW50cyAgb2YgIHRoZSBzY3JlZW4sIDxTVFJPTkc+bWM0PC9TVFJPTkc+OiB0dXJuIG9mZiB0aGUgcHJpbnRlciwgYW5kIDxTVFJPTkc+bWM1PC9TVFJPTkc+OgorICAgICAgIHR1cm4gb24gdGhlIHByaW50ZXIuICBXaGVuIHRoZSBwcmludGVyICBpcyAgb24sICBhbGwgIHRleHQKKyAgICAgICBzZW50ICB0byAgdGhlIHRlcm1pbmFsIHdpbGwgYmUgc2VudCB0byB0aGUgcHJpbnRlci4gIEl0IGlzCisgICAgICAgdW5kZWZpbmVkIHdoZXRoZXIgdGhlIHRleHQgaXMgYWxzbyBkaXNwbGF5ZWQgb24gdGhlIHRlcm1pLQorICAgICAgIG5hbCBzY3JlZW4gd2hlbiB0aGUgcHJpbnRlciBpcyBvbi4gIEEgdmFyaWF0aW9uIDxTVFJPTkc+bWM1cDwvU1RST05HPiB0YWtlcworICAgICAgIG9uZSBwYXJhbWV0ZXIsIGFuZCBsZWF2ZXMgdGhlIHByaW50ZXIgb24gZm9yIGFzIG1hbnkgY2hhci0KKyAgICAgICBhY3RlcnMgIGFzICB0aGUgIHZhbHVlICBvZiAgdGhlICBwYXJhbWV0ZXIsIHRoZW4gdHVybnMgdGhlCisgICAgICAgcHJpbnRlciBvZmYuICBUaGUgcGFyYW1ldGVyIHNob3VsZCBub3QgIGV4Y2VlZCAgMjU1LiAgIEFsbAorICAgICAgIHRleHQsICBpbmNsdWRpbmcgIDxTVFJPTkc+bWM0PC9TVFJPTkc+LCAgaXMgIHRyYW5zcGFyZW50bHkgIHBhc3NlZCAgdG8gIHRoZQorICAgICAgIHByaW50ZXIgd2hpbGUgYW4gPFNUUk9ORz5tYzVwPC9TVFJPTkc+IGlzIGluIGVmZmVjdC4KKworCisgICA8U1RST05HPkdsaXRjaGVzPC9TVFJPTkc+IDxTVFJPTkc+YW5kPC9TVFJPTkc+IDxTVFJPTkc+QnJhaW5kYW1hZ2U8L1NUUk9ORz4KKyAgICAgICBIYXplbHRpbmUgdGVybWluYWxzLCB3aGljaCBkbyBub3QgYWxsb3cgYH4nIGNoYXJhY3RlcnMgIHRvCisgICAgICAgYmUgZGlzcGxheWVkIHNob3VsZCBpbmRpY2F0ZSA8U1RST05HPmh6PC9TVFJPTkc+LgorCisgICAgICAgVGVybWluYWxzIHdoaWNoIGlnbm9yZSBhIGxpbmUtZmVlZCBpbW1lZGlhdGVseSBhZnRlciBhbiA8U1RST05HPmFtPC9TVFJPTkc+CisgICAgICAgd3JhcCwgc3VjaCBhcyB0aGUgQ29uY2VwdCBhbmQgdnQxMDAsIHNob3VsZCBpbmRpY2F0ZSA8U1RST05HPnhlbmw8L1NUUk9ORz4uCisKKyAgICAgICBJZiAgPFNUUk9ORz5lbDwvU1RST05HPiAgaXMgIHJlcXVpcmVkICB0byAgZ2V0ICByaWQgb2Ygc3RhbmRvdXQgKGluc3RlYWQgb2YKKyAgICAgICBtZXJlbHkgd3JpdGluZyBub3JtYWwgdGV4dCBvbiB0b3Agb2YgaXQpLCAgPFNUUk9ORz54aHA8L1NUUk9ORz4gIHNob3VsZCAgYmUKKyAgICAgICBnaXZlbi4KKworICAgICAgIFRlbGVyYXkgIHRlcm1pbmFscywgIHdoZXJlICB0YWJzIHR1cm4gYWxsIGNoYXJhY3RlcnMgbW92ZWQKKyAgICAgICBvdmVyIHRvIGJsYW5rcywgc2hvdWxkICBpbmRpY2F0ZSAgPFNUUk9ORz54dDwvU1RST05HPiAgKGRlc3RydWN0aXZlICB0YWJzKS4KKyAgICAgICBOb3RlOiAgICB0aGUgICAgdmFyaWFibGUgICAgaW5kaWNhdGluZyAgICB0aGlzICAgIGlzICAgbm93CisgICAgICAgYGRlc3RfdGFic19tYWdpY19zbXNvJzsgaW4gb2xkZXIgIHZlcnNpb25zLCAgaXQgIHdhcyAgdGVsLQorICAgICAgIGVyYXlfZ2xpdGNoLiAgVGhpcyBnbGl0Y2ggaXMgYWxzbyB0YWtlbiB0byBtZWFuIHRoYXQgaXQgaXMKKyAgICAgICBub3QgcG9zc2libGUgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBvbiB0b3AgIG9mICBhICBgYG1hZ2ljCisgICAgICAgY29va2llJycsIHRoYXQgdG8gZXJhc2Ugc3RhbmRvdXQgbW9kZSBpdCBpcyBpbnN0ZWFkIG5lY2VzLQorICAgICAgIHNhcnkgdG8gdXNlIGRlbGV0ZSBhbmQgaW5zZXJ0IGxpbmUuICBUaGUgbmN1cnNlcyBpbXBsZW1lbi0KKyAgICAgICB0YXRpb24gaWdub3JlcyB0aGlzIGdsaXRjaC4KKworICAgICAgIFRoZSAgQmVlaGl2ZSBTdXBlcmJlZSwgd2hpY2ggaXMgdW5hYmxlIHRvIGNvcnJlY3RseSB0cmFucy0KKyAgICAgICBtaXQgdGhlIGVzY2FwZSBvciBjb250cm9sIEMgY2hhcmFjdGVycywgaGFzIDxTVFJPTkc+eHNiPC9TVFJPTkc+LCAgaW5kaWNhdC0KKyAgICAgICBpbmcgIHRoYXQgdGhlIGYxIGtleSBpcyB1c2VkIGZvciBlc2NhcGUgYW5kIGYyIGZvciBjb250cm9sCisgICAgICAgQy4gIChPbmx5IGNlcnRhaW4gU3VwZXJiZWVzIGhhdmUgdGhpcyAgcHJvYmxlbSwgIGRlcGVuZGluZworICAgICAgIG9uICB0aGUgIFJPTS4pICBOb3RlIHRoYXQgaW4gb2xkZXIgdGVybWluZm8gdmVyc2lvbnMsIHRoaXMKKyAgICAgICBjYXBhYmlsaXR5ICB3YXMgIGNhbGxlZCAgYGJlZWhpdmVfZ2xpdGNoJzsgICBpdCAgIGlzICAgbm93CisgICAgICAgYG5vX2VzY19jdGxfYycuCisKKyAgICAgICBPdGhlciAgc3BlY2lmaWMgIHRlcm1pbmFsICBwcm9ibGVtcyAgbWF5ICBiZSAgY29ycmVjdGVkIGJ5CisgICAgICAgYWRkaW5nIG1vcmUgY2FwYWJpbGl0aWVzIG9mIHRoZSBmb3JtIDxTVFJPTkc+eDwvU1RST05HPjxFTT54PC9FTT4uCisKKworICAgPFNUUk9ORz5TaW1pbGFyPC9TVFJPTkc+IDxTVFJPTkc+VGVybWluYWxzPC9TVFJPTkc+CisgICAgICAgSWYgdGhlcmUgYXJlIHR3byB2ZXJ5IHNpbWlsYXIgdGVybWluYWxzLCBvbmUgKHRoZSB2YXJpYW50KQorICAgICAgIGNhbiAgYmUgIGRlZmluZWQgIGFzICBiZWluZyBqdXN0IGxpa2UgdGhlIG90aGVyICh0aGUgYmFzZSkKKyAgICAgICB3aXRoIGNlcnRhaW4gZXhjZXB0aW9ucy4gIEluIHRoZSBkZWZpbml0aW9uIG9mICB0aGUgIHZhcmktCisgICAgICAgYW50LCAgdGhlIHN0cmluZyBjYXBhYmlsaXR5IDxTVFJPTkc+dXNlPC9TVFJPTkc+IGNhbiBiZSBnaXZlbiB3aXRoIHRoZSBuYW1lCisgICAgICAgb2YgdGhlIGJhc2UgdGVybWluYWwuICBUaGUgY2FwYWJpbGl0aWVzIGdpdmVuICBiZWZvcmUgIDxTVFJPTkc+dXNlPC9TVFJPTkc+CisgICAgICAgb3ZlcnJpZGUgIHRob3NlICBpbiAgdGhlIGJhc2UgdHlwZSBuYW1lZCBieSA8U1RST05HPnVzZTwvU1RST05HPi4gIElmIHRoZXJlCisgICAgICAgYXJlIG11bHRpcGxlIDxTVFJPTkc+dXNlPC9TVFJPTkc+IGNhcGFiaWxpdGllcywgdGhleSBhcmUgbWVyZ2VkIGluICByZXZlcnNlCisgICAgICAgb3JkZXIuICAgVGhhdCBpcywgdGhlIHJpZ2h0bW9zdCA8U1RST05HPnVzZTwvU1RST05HPiByZWZlcmVuY2UgaXMgcHJvY2Vzc2VkCisgICAgICAgZmlyc3QsIHRoZW4gdGhlIG9uZSB0byBpdHMgbGVmdCwgYW5kIHNvIGZvcnRoLiAgIENhcGFiaWxpLQorICAgICAgIHRpZXMgIGdpdmVuIGV4cGxpY2l0bHkgaW4gdGhlIGVudHJ5IG92ZXJyaWRlIHRob3NlIGJyb3VnaHQKKyAgICAgICBpbiBieSA8U1RST05HPnVzZTwvU1RST05HPiByZWZlcmVuY2VzLgorCisgICAgICAgQSBjYXBhYmlsaXR5IGNhbiBiZSBjYW5jZWxlZCBieSBwbGFjaW5nIDxTVFJPTkc+eHhAPC9TVFJPTkc+IHRvIHRoZSBsZWZ0IG9mCisgICAgICAgdGhlICB1c2UgIHJlZmVyZW5jZSB0aGF0IGltcG9ydHMgaXQsIHdoZXJlIDxFTT54eDwvRU0+IGlzIHRoZSBjYXBhLQorICAgICAgIGJpbGl0eS4gIEZvciBleGFtcGxlLCB0aGUgZW50cnkKKworICAgICAgICAgICAgICAgICAgIDI2MjEtbmwsIHNta3hALCBybWt4QCwgdXNlPTI2MjEsCisKKyAgICAgICBkZWZpbmVzIGEgMjYyMS1ubCB0aGF0IGRvZXMgbm90ICBoYXZlICB0aGUgIDxTVFJPTkc+c21reDwvU1RST05HPiAgb3IgIDxTVFJPTkc+cm1reDwvU1RST05HPgorICAgICAgIGNhcGFiaWxpdGllcywgIGFuZCBoZW5jZSBkb2VzIG5vdCB0dXJuIG9uIHRoZSBmdW5jdGlvbiBrZXkKKyAgICAgICBsYWJlbHMgd2hlbiBpbiB2aXN1YWwgbW9kZS4gIFRoaXMgaXMgdXNlZnVsIGZvciAgZGlmZmVyZW50CisgICAgICAgbW9kZXMgZm9yIGEgdGVybWluYWwsIG9yIGZvciBkaWZmZXJlbnQgdXNlciBwcmVmZXJlbmNlcy4KKworCisgICA8U1RST05HPlBpdGZhbGxzPC9TVFJPTkc+IDxTVFJPTkc+b2Y8L1NUUk9ORz4gPFNUUk9ORz5Mb25nPC9TVFJPTkc+IDxTVFJPTkc+RW50cmllczwvU1RST05HPgorICAgICAgIExvbmcgIHRlcm1pbmZvICBlbnRyaWVzICBhcmUgIHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbTsgdG8KKyAgICAgICBkYXRlLCBubyBlbnRyeSBoYXMgZXZlbiAgYXBwcm9hY2hlZCAgdGVybWluZm8ncyAgNDA5Ni1ieXRlCisgICAgICAgc3RyaW5nLXRhYmxlIG1heGltdW0uICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVybWNhcCB0cmFuc2xhLQorICAgICAgIHRpb25zIGFyZSBtdWNoIG1vcmUgc3RyaWN0bHkgbGltaXRlZCAodG8gMTAyMyBieXRlcyksIHRodXMKKyAgICAgICB0ZXJtY2FwICB0cmFuc2xhdGlvbnMgIG9mICBsb25nIHRlcm1pbmZvIGVudHJpZXMgY2FuIGNhdXNlCisgICAgICAgcHJvYmxlbXMuCisKKyAgICAgICBUaGUgbWFuIHBhZ2VzIGZvciA0LjNCU0QgYW5kIG9sZGVyIHZlcnNpb25zICBvZiAgPFNUUk9ORz50Z2V0ZW50KCk8L1NUUk9ORz4KKyAgICAgICBpbnN0cnVjdCAgdGhlICB1c2VyIHRvIGFsbG9jYXRlIGEgMTAyNC1ieXRlIGJ1ZmZlciBmb3IgdGhlCisgICAgICAgdGVybWNhcCBlbnRyeS4gIFRoZSAgZW50cnkgIGdldHMgIG51bGwtdGVybWluYXRlZCAgYnkgIHRoZQorICAgICAgIHRlcm1jYXAgbGlicmFyeSwgc28gdGhhdCBtYWtlcyB0aGUgbWF4aW11bSBzYWZlIGxlbmd0aCBmb3IKKyAgICAgICBhIHRlcm1jYXAgZW50cnkgMWstMSAoMTAyMykgYnl0ZXMuICBEZXBlbmRpbmcgb24gd2hhdCAgdGhlCisgICAgICAgYXBwbGljYXRpb24gIGFuZCAgdGhlIHRlcm1jYXAgbGlicmFyeSBiZWluZyB1c2VkIGRvZXMsIGFuZAorICAgICAgIHdoZXJlIGluIHRoZSB0ZXJtY2FwIGZpbGUgdGhlIHRlcm1pbmFsIHR5cGUgdGhhdCA8U1RST05HPnRnZXRlbnQoKTwvU1RST05HPgorICAgICAgIGlzIHNlYXJjaGluZyBmb3IgaXMsIHNldmVyYWwgYmFkIHRoaW5ncyBjYW4gaGFwcGVuLgorCisgICAgICAgU29tZSAgdGVybWNhcCBsaWJyYXJpZXMgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2Ugb3IgZXhpdCBpZgorICAgICAgIHRoZXkgZmluZCBhbiBlbnRyeSB0aGF0J3MgbG9uZ2VyIHRoYW4gMTAyMyAgYnl0ZXM7ICBvdGhlcnMKKyAgICAgICBkbyAgbm90OyAgb3RoZXJzIHRydW5jYXRlIHRoZSBlbnRyaWVzIHRvIDEwMjMgYnl0ZXMuICBTb21lCisgICAgICAgYXBwbGljYXRpb24gcHJvZ3JhbXMgYWxsb2NhdGUgbW9yZSB0aGFuIHRoZSByZWNvbW1lbmRlZCAxSworICAgICAgIGZvciB0aGUgdGVybWNhcCBlbnRyeTsgb3RoZXJzIGRvIG5vdC4KKworICAgICAgIEVhY2ggdGVybWNhcCBlbnRyeSBoYXMgdHdvIGltcG9ydGFudCBzaXplcyBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICBpdDogYmVmb3JlICJ0YyIgZXhwYW5zaW9uLCBhbmQgYWZ0ZXIgInRjIiBleHBhbnNpb24uICAidGMiCisgICAgICAgaXMgIHRoZSAgY2FwYWJpbGl0eSB0aGF0IHRhY2tzIG9uIGFub3RoZXIgdGVybWNhcCBlbnRyeSB0bworICAgICAgIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgb25lLCB0byBhZGQgIG9uICBpdHMgIGNhcGFiaWxpdGllcy4KKyAgICAgICBJZiAgYSB0ZXJtY2FwIGVudHJ5IGRvZXMgbm90IHVzZSB0aGUgInRjIiBjYXBhYmlsaXR5LCB0aGVuCisgICAgICAgb2YgY291cnNlIHRoZSB0d28gbGVuZ3RocyBhcmUgdGhlIHNhbWUuCisKKyAgICAgICBUaGUgImJlZm9yZSB0YyBleHBhbnNpb24iIGxlbmd0aCAgaXMgIHRoZSAgbW9zdCAgaW1wb3J0YW50CisgICAgICAgb25lLCAgYmVjYXVzZSBpdCBhZmZlY3RzIG1vcmUgdGhhbiBqdXN0IHVzZXJzIG9mIHRoYXQgcGFyLQorICAgICAgIHRpY3VsYXIgdGVybWluYWwuICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgdGhlIGVudHJ5ICBhcyAgaXQKKyAgICAgICBleGlzdHMgaW4gL2V0Yy90ZXJtY2FwLCBtaW51cyB0aGUgYmFja3NsYXNoLW5ld2xpbmUgcGFpcnMsCisgICAgICAgd2hpY2ggPFNUUk9ORz50Z2V0ZW50KCk8L1NUUk9ORz4gc3RyaXBzIG91dCB3aGlsZSByZWFkaW5nIGl0LiAgU29tZSB0ZXJtY2FwCisgICAgICAgbGlicmFyaWVzICBzdHJpcCAgb2ZmICB0aGUgZmluYWwgbmV3bGluZSwgdG9vIChHTlUgdGVybWNhcAorICAgICAgIGRvZXMgbm90KS4gIE5vdyBzdXBwb3NlOgorCisgICAgICAgKiAgICBhIHRlcm1jYXAgZW50cnkgYmVmb3JlIGV4cGFuc2lvbiBpcyAgbW9yZSAgdGhhbiAgMTAyMworICAgICAgICAgICAgYnl0ZXMgbG9uZywKKworICAgICAgICogICAgYW5kIHRoZSBhcHBsaWNhdGlvbiBoYXMgb25seSBhbGxvY2F0ZWQgYSAxayBidWZmZXIsCisKKyAgICAgICAqICAgIGFuZCAgdGhlICB0ZXJtY2FwIGxpYnJhcnkgKGxpa2UgdGhlIG9uZSBpbiBCU0QvT1MgMS4xCisgICAgICAgICAgICBhbmQgR05VKSByZWFkcyB0aGUgd2hvbGUgZW50cnkgaW50byAgdGhlICBidWZmZXIsICBubworICAgICAgICAgICAgbWF0dGVyICB3aGF0IGl0cyBsZW5ndGgsIHRvIHNlZSBpZiBpdCBpcyB0aGUgZW50cnkgaXQKKyAgICAgICAgICAgIHdhbnRzLAorCisgICAgICAgKiAgICBhbmQgPFNUUk9ORz50Z2V0ZW50KCk8L1NUUk9ORz4gaXMgc2VhcmNoaW5nIGZvciBhIHRlcm1pbmFsICB0eXBlICB0aGF0CisgICAgICAgICAgICBlaXRoZXIgaXMgdGhlIGxvbmcgZW50cnksIGFwcGVhcnMgaW4gdGhlIHRlcm1jYXAgZmlsZQorICAgICAgICAgICAgYWZ0ZXIgdGhlIGxvbmcgZW50cnksIG9yIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgIGZpbGUKKyAgICAgICAgICAgIGF0ICBhbGwgIChzbyAgdGhhdCAgPFNUUk9ORz50Z2V0ZW50KCk8L1NUUk9ORz4gaGFzIHRvIHNlYXJjaCB0aGUgd2hvbGUKKyAgICAgICAgICAgIHRlcm1jYXAgZmlsZSkuCisKKyAgICAgICBUaGVuIDxTVFJPTkc+dGdldGVudCgpPC9TVFJPTkc+IHdpbGwgb3ZlcndyaXRlIG1lbW9yeSwgcGVyaGFwcyAgaXRzICBzdGFjaywKKyAgICAgICBhbmQgIHByb2JhYmx5IGNvcmUgZHVtcCB0aGUgcHJvZ3JhbS4gIFByb2dyYW1zIGxpa2UgdGVsbmV0CisgICAgICAgYXJlIHBhcnRpY3VsYXJseSB2dWxuZXJhYmxlOyAgbW9kZXJuICB0ZWxuZXRzICBwYXNzICBhbG9uZworICAgICAgIHZhbHVlcyAgbGlrZSB0aGUgdGVybWluYWwgdHlwZSBhdXRvbWF0aWNhbGx5LiAgVGhlIHJlc3VsdHMKKyAgICAgICBhcmUgYWxtb3N0IGFzIHVuZGVzaXJhYmxlIHdpdGggIGEgIHRlcm1jYXAgIGxpYnJhcnksICBsaWtlCisgICAgICAgU3VuT1MgIDQuMS4zICBhbmQgVWx0cml4IDQuNCwgdGhhdCBwcmludHMgd2FybmluZyBtZXNzYWdlcworICAgICAgIHdoZW4gaXQgcmVhZHMgYW4gb3Zlcmx5IGxvbmcgdGVybWNhcCBlbnRyeS4gIElmIGEgIHRlcm1jYXAKKyAgICAgICBsaWJyYXJ5ICB0cnVuY2F0ZXMgIGxvbmcgIGVudHJpZXMsICBsaWtlICBPU0YvMSAzLjAsIGl0IGlzCisgICAgICAgaW1tdW5lIHRvIGR5aW5nIGhlcmUgYnV0IHdpbGwgcmV0dXJuICBpbmNvcnJlY3QgIGRhdGEgIGZvcgorICAgICAgIHRoZSB0ZXJtaW5hbC4KKworICAgICAgIFRoZSAiYWZ0ZXIgdGMgZXhwYW5zaW9uIiBsZW5ndGggd2lsbCBoYXZlIGEgc2ltaWxhciBlZmZlY3QKKyAgICAgICB0byB0aGUgYWJvdmUsIGJ1dCBvbmx5IGZvciBwZW9wbGUgd2hvIGFjdHVhbGx5IHNldCBURVJNIHRvCisgICAgICAgdGhhdCAgdGVybWluYWwgdHlwZSwgc2luY2UgPFNUUk9ORz50Z2V0ZW50KCk8L1NUUk9ORz4gb25seSBkb2VzICJ0YyIgZXhwYW4tCisgICAgICAgc2lvbiBvbmNlIGl0IGlzIGZvdW5kIHRoZSB0ZXJtaW5hbCAgdHlwZSAgaXQgIHdhcyAgbG9va2luZworICAgICAgIGZvciwgbm90IHdoaWxlIHNlYXJjaGluZy4KKworICAgICAgIEluIHN1bW1hcnksIGEgdGVybWNhcCBlbnRyeSB0aGF0IGlzIGxvbmdlciB0aGFuIDEwMjMgYnl0ZXMKKyAgICAgICBjYW4gY2F1c2UsIG9uIHZhcmlvdXMgY29tYmluYXRpb25zICBvZiAgdGVybWNhcCAgbGlicmFyaWVzCisgICAgICAgYW5kICBhcHBsaWNhdGlvbnMsICBhICBjb3JlICBkdW1wLCAgd2FybmluZ3MsIG9yIGluY29ycmVjdAorICAgICAgIG9wZXJhdGlvbi4gIElmIGl0IGlzIHRvbyBsb25nIGV2ZW4gYmVmb3JlICJ0YyIgIGV4cGFuc2lvbiwKKyAgICAgICBpdCB3aWxsIGhhdmUgdGhpcyBlZmZlY3QgZXZlbiBmb3IgdXNlcnMgb2Ygc29tZSBvdGhlciB0ZXItCisgICAgICAgbWluYWwgdHlwZXMgYW5kIHVzZXJzIHdob3NlIFRFUk0gdmFyaWFibGUgZG9lcyBub3QgaGF2ZSAgYQorICAgICAgIHRlcm1jYXAgZW50cnkuCisKKyAgICAgICBXaGVuIGluIC1DICh0cmFuc2xhdGUgdG8gdGVybWNhcCkgbW9kZSwgdGhlIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiBpbXBsZS0KKyAgICAgICBtZW50YXRpb24gb2YgPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4gaXNzdWVzIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiB0aGUgcHJlLQorICAgICAgIHRjICBsZW5ndGggIG9mICBhIHRlcm1jYXAgdHJhbnNsYXRpb24gaXMgdG9vIGxvbmcuICBUaGUgLWMKKyAgICAgICAoY2hlY2spIG9wdGlvbiBhbHNvIGNoZWNrcyByZXNvbHZlZCAoYWZ0ZXIgIHRjICBleHBhbnNpb24pCisgICAgICAgbGVuZ3Rocy4KKworICAgPFNUUk9ORz5CaW5hcnk8L1NUUk9ORz4gPFNUUk9ORz5Db21wYXRpYmlsaXR5PC9TVFJPTkc+CisgICAgICAgSXQgIGlzIG5vdCB3aXNlIHRvIGNvdW50IG9uIHBvcnRhYmlsaXR5IG9mIGJpbmFyeSB0ZXJtaW5mbworICAgICAgIGVudHJpZXMgYmV0d2VlbiBjb21tZXJjaWFsIFVOSVggdmVyc2lvbnMuICBUaGUgcHJvYmxlbSAgaXMKKyAgICAgICB0aGF0ICB0aGVyZSAgYXJlICBhdCBsZWFzdCB0d28gdmVyc2lvbnMgb2YgdGVybWluZm8gKHVuZGVyCisgICAgICAgSFAtVVggYW5kIEFJWCkgd2hpY2ggZGl2ZXJnZWQgZnJvbSBTeXN0ZW0gViB0ZXJtaW5mbyBhZnRlcgorICAgICAgIFNWcjEsICBhbmQgaGF2ZSBhZGRlZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzIHRvIHRoZSBzdHJpbmcKKyAgICAgICB0YWJsZSB0aGF0IChpbiB0aGUgYmluYXJ5IGZvcm1hdCkgY29sbGlkZSAgd2l0aCAgU3lzdGVtICBWCisgICAgICAgYW5kIFhTSSBDdXJzZXMgZXh0ZW5zaW9ucy4KKworCis8L1BSRT4KKzxIMj5FWFRFTlNJT05TPC9IMj48UFJFPgorICAgICAgIFNvbWUgIFNWcjQgIDxTVFJPTkc+Y3Vyc2VzPC9TVFJPTkc+ICBpbXBsZW1lbnRhdGlvbnMsICBhbmQgIGFsbCBwcmV2aW91cyB0bworICAgICAgIFNWcjQsIGRvIG5vdCBpbnRlcnByZXQgdGhlICVBIGFuZCAlTyBvcGVyYXRvcnMgaW4gIHBhcmFtZS0KKyAgICAgICB0ZXIgc3RyaW5ncy4KKworICAgICAgIFNWcjQvWFBHNCAgZG8gIG5vdCAgc3BlY2lmeSB3aGV0aGVyIDxTVFJPTkc+bXNncjwvU1RST05HPiBsaWNlbnNlcyBtb3ZlbWVudAorICAgICAgIHdoaWxlIGluIGFuIGFsdGVybmF0ZS1jaGFyYWN0ZXItc2V0IG1vZGUgKHN1Y2ggbW9kZXMgIG1heSwKKyAgICAgICBhbW9uZyAgb3RoZXIgIHRoaW5ncywgIG1hcCBDUiBhbmQgTkwgdG8gY2hhcmFjdGVycyB0aGF0IGRvCisgICAgICAgbm90IHRyaWdnZXIgbG9jYWwgbW90aW9ucykuICAgVGhlICA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gIGltcGxlbWVudGF0aW9uCisgICAgICAgaWdub3JlcyAgPFNUUk9ORz5tc2dyPC9TVFJPTkc+ICBpbiA8U1RST05HPkFMVENIQVJTRVQ8L1NUUk9ORz4gbW9kZS4gIFRoaXMgcmFpc2VzIHRoZSBwb3NzaS0KKyAgICAgICBiaWxpdHkgdGhhdCBhbiBYUEc0ICBpbXBsZW1lbnRhdGlvbiAgbWFraW5nICB0aGUgIG9wcG9zaXRlCisgICAgICAgaW50ZXJwcmV0YXRpb24gIG1heSBuZWVkIHRlcm1pbmZvIGVudHJpZXMgbWFkZSBmb3IgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+CisgICAgICAgdG8gaGF2ZSA8U1RST05HPm1zZ3I8L1NUUk9ORz4gdHVybmVkIG9mZi4KKworICAgICAgIFRoZSA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gbGlicmFyeSBoYW5kbGVzIGluc2VydC1jaGFyYWN0ZXIgIGFuZCAgaW5zZXJ0LQorICAgICAgIGNoYXJhY3RlciBtb2RlcyBpbiBhIHNsaWdodGx5IG5vbi1zdGFuZGFyZCB3YXkgdG8gZ2V0IGJldC0KKyAgICAgICB0ZXIgdXBkYXRlIGVmZmljaWVuY3kuICBTZWUgIHRoZSAgPFNUUk9ORz5JbnNlcnQvRGVsZXRlPC9TVFJPTkc+ICA8U1RST05HPkNoYXJhY3RlcjwvU1RST05HPgorICAgICAgIHN1YnNlY3Rpb24gYWJvdmUuCisKKyAgICAgICBUaGUgICBwYXJhbWV0ZXIgICBzdWJzdGl0dXRpb25zICBmb3IgIDxTVFJPTkc+c2V0X2Nsb2NrPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+ZGlzLTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+cGxheV9jbG9jazwvU1RST05HPiBhcmUgbm90IGRvY3VtZW50ZWQgaW4gU1ZyNCBvciAgdGhlICBYU0kgIEN1cnNlcworICAgICAgIHN0YW5kYXJkLiAgVGhleSBhcmUgZGVkdWNlZCBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgICAgICBBVCZhbXA7VCA1MDUgdGVybWluYWwuCisKKyAgICAgICBCZSBjYXJlZnVsIGFzc2lnbmluZyB0aGUgPFNUUk9ORz5rbW91czwvU1RST05HPiAgY2FwYWJpbGl0eS4gICBUaGUgIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPgorICAgICAgIHdhbnRzICB0byAgaW50ZXJwcmV0IGl0IGFzIDxTVFJPTkc+S0VZX01PVVNFPC9TVFJPTkc+LCBmb3IgdXNlIGJ5IHRlcm1pbmFscworICAgICAgIGFuZCBlbXVsYXRvcnMgbGlrZSB4dGVybSB0aGF0ICBjYW4gIHJldHVybiAgbW91c2UtdHJhY2tpbmcKKyAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUga2V5Ym9hcmQtaW5wdXQgc3RyZWFtLgorCisgICAgICAgRGlmZmVyZW50ICBjb21tZXJjaWFsIHBvcnRzIG9mIHRlcm1pbmZvIGFuZCBjdXJzZXMgc3VwcG9ydAorICAgICAgIGRpZmZlcmVudCBzdWJzZXRzIG9mIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGFuZCAoaW4gIHNvbWUKKyAgICAgICBjYXNlcykgZGlmZmVyZW50IGV4dGVuc2lvbiBzZXRzLiAgSGVyZSBpcyBhIHN1bW1hcnksIGFjY3UtCisgICAgICAgcmF0ZSBhcyBvZiBPY3RvYmVyIDE5OTU6CisKKyAgICAgICA8U1RST05HPlNWUjQsPC9TVFJPTkc+IDxTVFJPTkc+U29sYXJpcyw8L1NUUk9ORz4gPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+IC0tIFRoZXNlIHN1cHBvcnQgYWxsIFNWcjQgY2FwYWJpbGktCisgICAgICAgdGllcy4KKworICAgICAgIDxTVFJPTkc+U0dJPC9TVFJPTkc+ICAtLSAgU3VwcG9ydHMgIHRoZSAgU1ZyNCAgc2V0LCAgYWRkcyAgb25lIHVuZG9jdW1lbnRlZAorICAgICAgIGV4dGVuZGVkIHN0cmluZyBjYXBhYmlsaXR5ICg8U1RST05HPnNldF9wZ2xlbjwvU1RST05HPikuCisKKyAgICAgICA8U1RST05HPlNWcjEsPC9TVFJPTkc+IDxTVFJPTkc+VWx0cml4PC9TVFJPTkc+IC0tIFRoZXNlIHN1cHBvcnQgYSByZXN0cmljdGVkIHN1YnNldCBvZiAgdGVyLQorICAgICAgIG1pbmZvICBjYXBhYmlsaXRpZXMuICAgVGhlIGJvb2xlYW5zIGVuZCB3aXRoIDxTVFJPTkc+eG9uX3hvZmY8L1NUUk9ORz47IHRoZQorICAgICAgIG51bWVyaWNzIHdpdGggIDxTVFJPTkc+d2lkdGhfc3RhdHVzX2xpbmU8L1NUUk9ORz47ICBhbmQgIHRoZSAgc3RyaW5ncyAgd2l0aAorICAgICAgIDxTVFJPTkc+cHJ0cl9ub248L1NUUk9ORz4uCisKKyAgICAgICA8U1RST05HPkhQL1VYPC9TVFJPTkc+ICAtLSAgU3VwcG9ydHMgIHRoZSAgU1ZyMSAgc3Vic2V0LCAgcGx1cyB0aGUgU1ZyWzIzNF0KKyAgICAgICBudW1lcmljcyA8U1RST05HPm51bV9sYWJlbHM8L1NUUk9ORz4sIDxTVFJPTkc+bGFiZWxfaGVpZ2h0PC9TVFJPTkc+LCA8U1RST05HPmxhYmVsX3dpZHRoPC9TVFJPTkc+LCBwbHVzIGZ1bmMtCisgICAgICAgdGlvbiAga2V5cyAgMTEgIHRocm91Z2ggIDYzLCBwbHVzIDxTVFJPTkc+cGxhYl9ub3JtPC9TVFJPTkc+LCA8U1RST05HPmxhYmVsX29uPC9TVFJPTkc+LCBhbmQKKyAgICAgICA8U1RST05HPmxhYmVsX29mZjwvU1RST05HPiwgcGx1cyBzb21lIGluY29tcGF0aWJsZSBleHRlbnNpb25zIGluIHRoZSBzdHJpbmcKKyAgICAgICB0YWJsZS4KKworICAgICAgIDxTVFJPTkc+QUlYPC9TVFJPTkc+ICAtLSAgU3VwcG9ydHMgIHRoZSAgU1ZyMSBzdWJzZXQsIHBsdXMgZnVuY3Rpb24ga2V5cyAxMQorICAgICAgIHRocm91Z2ggNjMsIHBsdXMgYSBudW1iZXIgIG9mICBpbmNvbXBhdGlibGUgIHN0cmluZyAgdGFibGUKKyAgICAgICBleHRlbnNpb25zLgorCisgICAgICAgPFNUUk9ORz5PU0Y8L1NUUk9ORz4gIC0tIFN1cHBvcnRzIGJvdGggdGhlIFNWcjQgc2V0IGFuZCB0aGUgQUlYIGV4dGVuc2lvbnMuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL3Vzci9zaGFyZS90ZXJtaW5mby8/LyogIGZpbGVzICAgICBjb250YWluaW5nICAgICB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnMKKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9InRpYy4xbS5odG1sIj50aWMoMW0pPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJuY3Vyc2VzLjN4Lmh0bWwiPmN1cnNlcygzeCk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InByaW50Zi4zLmh0bWwiPnByaW50ZigzKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybS41Lmh0bWwiPnRlcm0oNSk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUlM8L0gyPjxQUkU+CisgICAgICAgWmV5ZCAgTS4gIEJlbi1IYWxpbSwgIEVyaWMgIFMuICBSYXltb25kLCBUaG9tYXMgRS4gRGlja2V5LgorICAgICAgIEJhc2VkIG9uIHBjdXJzZXMgYnkgUGF2ZWwgQ3VydGlzLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdGljLjFtLmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdGljLjFtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxMDNhZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi90aWMuMW0uaHRtbApAQCAtMCwwICsxLDMyNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiB0aWMuMW0sdiAxLjQ0IDIwMDYvMTIvMjQgMTc6NTk6MTEgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+dGljIDFtPC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+dGljIDFtPC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJ0aWMuMW0uaHRtbCI+dGljKDFtKTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRpYy4xbS5odG1sIj50aWMoMW0pPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dGljPC9TVFJPTkc+IC0gdGhlIDxFTT50ZXJtaW5mbzwvRU0+IGVudHJ5LWRlc2NyaXB0aW9uIGNvbXBpbGVyCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50aWM8L1NUUk9ORz4gIFs8U1RST05HPi0xQ0dJTE5UVVZhY2ZncnN0eDwvU1RST05HPl0gIFs8U1RST05HPi1lPC9TVFJPTkc+IDxFTT5uYW1lczwvRU0+XSBbPFNUUk9ORz4tbzwvU1RST05HPiA8RU0+ZGlyPC9FTT5dIFs8U1RST05HPi1SPC9TVFJPTkc+IDxFTT5zdWJzZXQ8L0VNPl0KKyAgICAgICBbPFNUUk9ORz4tdjwvU1RST05HPls8RU0+bjwvRU0+XV0gWzxTVFJPTkc+LXc8L1NUUk9ORz5bPEVNPm48L0VNPl1dIDxFTT5maWxlPC9FTT4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgY29tbWFuZCA8U1RST05HPnRpYzwvU1RST05HPiB0cmFuc2xhdGVzIGEgIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gIGZpbGUgIGZyb20gIHNvdXJjZQorICAgICAgIGZvcm1hdCAgaW50byBjb21waWxlZCBmb3JtYXQuICBUaGUgY29tcGlsZWQgZm9ybWF0IGlzIG5lYy0KKyAgICAgICBlc3NhcnkgZm9yIHVzZSB3aXRoIHRoZSBsaWJyYXJ5IHJvdXRpbmVzIGluIDxTVFJPTkc+PEEgSFJFRj0ibmN1cnNlcy4zeC5odG1sIj5uY3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBUaGUgcmVzdWx0cyBhcmUgbm9ybWFsbHkgcGxhY2VkICBpbiAgdGhlICBzeXN0ZW0gIHRlcm1pbmZvCisgICAgICAgZGlyZWN0b3J5ICA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm88L1NUUk9ORz4uICAgVGhlcmUgIGFyZSAgdHdvICB3YXlzIHRvCisgICAgICAgY2hhbmdlIHRoaXMgYmVoYXZpb3IuCisKKyAgICAgICBGaXJzdCwgeW91IG1heSBvdmVycmlkZSB0aGUgc3lzdGVtIGRlZmF1bHQgYnkgc2V0dGluZyAgdGhlCisgICAgICAgdmFyaWFibGUgIDxTVFJPTkc+VEVSTUlORk88L1NUUk9ORz4gIGluICB5b3VyICBzaGVsbCBlbnZpcm9ubWVudCB0byBhIHZhbGlkCisgICAgICAgKGV4aXN0aW5nKSBkaXJlY3RvcnkgbmFtZS4KKworICAgICAgIFNlY29uZGx5LCBpZiA8U1RST05HPnRpYzwvU1RST05HPiBjYW5ub3QgZ2V0IGFjY2VzcyB0byAgPEVNPi91c3Ivc2hhcmUvdGVybWluZm88L0VNPgorICAgICAgIG9yICB5b3VyICBURVJNSU5GTyAgZGlyZWN0b3J5LCAgaXQgbG9va3MgZm9yIHRoZSBkaXJlY3RvcnkKKyAgICAgICA8RU0+JEhPTUUvLnRlcm1pbmZvPC9FTT47IGlmIHRoYXQgZGlyZWN0b3J5IGV4aXN0cywgIHRoZSAgZW50cnkgIGlzCisgICAgICAgcGxhY2VkIHRoZXJlLgorCisgICAgICAgTGlicmFyaWVzIHRoYXQgcmVhZCB0ZXJtaW5mbyBlbnRyaWVzIGFyZSBleHBlY3RlZCB0byBjaGVjaworICAgICAgIGZvciBhIFRFUk1JTkZPIGRpcmVjdG9yeSBmaXJzdCwgbG9vayBhdCA8RU0+JEhPTUUvLnRlcm1pbmZvPC9FTT4gaWYKKyAgICAgICBURVJNSU5GTyAgaXMgIG5vdCBzZXQsIGFuZCBmaW5hbGx5IGxvb2sgaW4gPEVNPi91c3Ivc2hhcmUvdGVyLTwvRU0+CisgICAgICAgPEVNPm1pbmZvPC9FTT4uCisKKyAgICAgICA8U1RST05HPi0xPC9TVFJPTkc+ICAgICByZXN0cmljdHMgdGhlIG91dHB1dCB0byBhIHNpbmdsZSBjb2x1bW4KKworICAgICAgIDxTVFJPTkc+LWE8L1NUUk9ORz4gICAgIHRlbGxzICA8U1RST05HPnRpYzwvU1RST05HPiAgdG8gIHJldGFpbiAgY29tbWVudGVkLW91dCAgY2FwYWJpbGl0aWVzCisgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgdGhlbS4gIENhcGFiaWxpdGllcyBhcmUgY29tLQorICAgICAgICAgICAgICBtZW50ZWQgYnkgcHJlZml4aW5nIHRoZW0gd2l0aCBhIHBlcmlvZC4gIFRoaXMgIHNldHMKKyAgICAgICAgICAgICAgdGhlICA8U1RST05HPi14PC9TVFJPTkc+IG9wdGlvbiwgYmVjYXVzZSBpdCB0cmVhdHMgdGhlIGNvbW1lbnRlZC1vdXQKKyAgICAgICAgICAgICAgZW50cmllcyBhcyB1c2VyLWRlZmluZWQgbmFtZXMuICBJZiAgdGhlICBzb3VyY2UgIGlzCisgICAgICAgICAgICAgIHRlcm1jYXAsICBhY2NlcHQgIHRoZSAyLWNoYXJhY3RlciBuYW1lcyByZXF1aXJlZCBieQorICAgICAgICAgICAgICB2ZXJzaW9uIDYuICBPdGhlcndpc2UgdGhlc2UgYXJlIGlnbm9yZWQuCisKKyAgICAgICA8U1RST05HPi1DPC9TVFJPTkc+ICAgICBGb3JjZSBzb3VyY2UgdHJhbnNsYXRpb24gdG8gdGVybWNhcCBmb3JtYXQuICAgTm90ZToKKyAgICAgICAgICAgICAgdGhpcyAgZGlmZmVycyAgZnJvbSB0aGUgPFNUUk9ORz4tQzwvU1RST05HPiBvcHRpb24gb2YgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiBpbgorICAgICAgICAgICAgICB0aGF0IGl0IGRvZXMgbm90IG1lcmVseSB0cmFuc2xhdGUgY2FwYWJpbGl0eSBuYW1lcywKKyAgICAgICAgICAgICAgYnV0ICBhbHNvICB0cmFuc2xhdGVzICB0ZXJtaW5mbyAgc3RyaW5ncyB0byB0ZXJtY2FwCisgICAgICAgICAgICAgIGZvcm1hdC4gIENhcGFiaWxpdGllcyB0aGF0IGFyZSBub3QgdHJhbnNsYXRhYmxlIGFyZQorICAgICAgICAgICAgICBsZWZ0ICBpbiAgdGhlICBlbnRyeSB1bmRlciB0aGVpciB0ZXJtaW5mbyBuYW1lcyBidXQKKyAgICAgICAgICAgICAgY29tbWVudGVkIG91dCB3aXRoIHR3byBwcmVjZWRpbmcgZG90cy4KKworICAgICAgIDxTVFJPTkc+LWM8L1NUUk9ORz4gICAgIHRlbGxzIDxTVFJPTkc+dGljPC9TVFJPTkc+IHRvIG9ubHkgY2hlY2sgPEVNPmZpbGU8L0VNPiBmb3IgZXJyb3JzLCAgaW5jbHVkaW5nCisgICAgICAgICAgICAgIHN5bnRheCAgcHJvYmxlbXMgYW5kIGJhZCB1c2UgbGlua3MuICBJZiB5b3Ugc3BlY2lmeQorICAgICAgICAgICAgICA8U1RST05HPi1DPC9TVFJPTkc+ICg8U1RST05HPi1JPC9TVFJPTkc+KSB3aXRoIHRoaXMgb3B0aW9uLCB0aGUgY29kZSB3aWxsIHByaW50IHdhcm4tCisgICAgICAgICAgICAgIGluZ3MgYWJvdXQgZW50cmllcyB3aGljaCwgYWZ0ZXIgdXNlIHJlc29sdXRpb24sIGFyZQorICAgICAgICAgICAgICBtb3JlIHRoYW4gMTAyMyAoNDA5NikgYnl0ZXMgbG9uZy4gIER1ZSB0byAgYSAgZml4ZWQKKyAgICAgICAgICAgICAgYnVmZmVyICBsZW5ndGggIGluICBvbGRlciAgdGVybWNhcCBsaWJyYXJpZXMgKGFuZCBhCisgICAgICAgICAgICAgIGRvY3VtZW50ZWQgbGltaXQgaW4gdGVybWluZm8pLCAgdGhlc2UgIGVudHJpZXMgIG1heQorICAgICAgICAgICAgICBjYXVzZSBjb3JlIGR1bXBzLgorCisgICAgICAgPFNUUk9ORz4tZTwvU1RST05HPiA8RU0+bmFtZXM8L0VNPgorICAgICAgICAgICAgICBMaW1pdCAgd3JpdGVzICBhbmQgIHRyYW5zbGF0aW9ucyAgdG8gIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGVybWluYWxzLiAgSWYgYW55IG5hbWUgIG9yCisgICAgICAgICAgICAgIGFsaWFzIG9mIGEgdGVybWluYWwgbWF0Y2hlcyBvbmUgb2YgdGhlIG5hbWVzIGluIHRoZQorICAgICAgICAgICAgICBsaXN0LCB0aGUgZW50cnkgd2lsbCBiZSB3cml0dGVuICBvciAgdHJhbnNsYXRlZCAgYXMKKyAgICAgICAgICAgICAgbm9ybWFsLiAgIE90aGVyd2lzZSBubyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yCisgICAgICAgICAgICAgIGl0LiAgVGhlIG9wdGlvbiB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIGZpbGUgY29uLQorICAgICAgICAgICAgICB0YWluaW5nICB0aGUgIGxpc3QgIGlmICBpdCAgY29udGFpbnMgYSAnLycuICAoTm90ZToKKyAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIGhvdyB0aWMgd2FzIGNvbXBpbGVkLCB0aGlzIG9wdGlvbiAgbWF5CisgICAgICAgICAgICAgIHJlcXVpcmUgPFNUUk9ORz4tSTwvU1RST05HPiBvciA8U1RST05HPi1DPC9TVFJPTkc+LikKKworICAgICAgIDxTVFJPTkc+LWY8L1NUUk9ORz4gICAgIERpc3BsYXkgIGNvbXBsZXggIHRlcm1pbmZvICBzdHJpbmdzICB3aGljaCAgY29udGFpbgorICAgICAgICAgICAgICBpZi90aGVuL2Vsc2UvZW5kaWYgZXhwcmVzc2lvbnMgaW5kZW50ZWQgIGZvciAgcmVhZC0KKyAgICAgICAgICAgICAgYWJpbGl0eS4KKworICAgICAgIDxTVFJPTkc+LUc8L1NUUk9ORz4gICAgIERpc3BsYXkgIGNvbnN0YW50ICBsaXRlcmFscyAgaW4gZGVjaW1hbCBmb3JtIHJhdGhlcgorICAgICAgICAgICAgICB0aGFuIHRoZWlyIGNoYXJhY3RlciBlcXVpdmFsZW50cy4KKworICAgICAgIDxTVFJPTkc+LWc8L1NUUk9ORz4gICAgIERpc3BsYXkgY29uc3RhbnQgY2hhcmFjdGVyIGxpdGVyYWxzIGluIHF1b3RlZCAgZm9ybQorICAgICAgICAgICAgICByYXRoZXIgdGhhbiB0aGVpciBkZWNpbWFsIGVxdWl2YWxlbnRzLgorCisgICAgICAgPFNUUk9ORz4tSTwvU1RST05HPiAgICAgRm9yY2Ugc291cmNlIHRyYW5zbGF0aW9uIHRvIHRlcm1pbmZvIGZvcm1hdC4KKworICAgICAgIDxTVFJPTkc+LUw8L1NUUk9ORz4gICAgIEZvcmNlICBzb3VyY2UgIHRyYW5zbGF0aW9uIHRvIHRlcm1pbmZvIGZvcm1hdCB1c2luZworICAgICAgICAgICAgICB0aGUgbG9uZyBDIHZhcmlhYmxlIG5hbWVzIGxpc3RlZCBpbiAmbHQ7PFNUUk9ORz50ZXJtLmg8L1NUUk9ORz4mZ3Q7CisKKyAgICAgICA8U1RST05HPi1OPC9TVFJPTkc+ICAgICBEaXNhYmxlIHNtYXJ0IGRlZmF1bHRzLiAgTm9ybWFsbHksIHdoZW4gdHJhbnNsYXRpbmcKKyAgICAgICAgICAgICAgZnJvbSB0ZXJtY2FwIHRvIHRlcm1pbmZvLCB0aGUgY29tcGlsZXIgbWFrZXMgYSBudW0tCisgICAgICAgICAgICAgIGJlciBvZiBhc3N1bXB0aW9ucyBhYm91dCAgdGhlICBkZWZhdWx0cyAgb2YgIHN0cmluZworICAgICAgICAgICAgICBjYXBhYmlsaXRpZXMgIDxTVFJPTkc+cmVzZXQxX3N0cmluZzwvU1RST05HPiwgIDxTVFJPTkc+Y2FycmlhZ2VfcmV0dXJuPC9TVFJPTkc+LCA8U1RST05HPmN1ci08L1NUUk9ORz4KKyAgICAgICAgICAgICAgPFNUUk9ORz5zb3JfbGVmdDwvU1RST05HPiwgPFNUUk9ORz5jdXJzb3JfZG93bjwvU1RST05HPiwgIDxTVFJPTkc+c2Nyb2xsX2ZvcndhcmQ8L1NUUk9ORz4sICA8U1RST05HPnRhYjwvU1RST05HPiwgIDxTVFJPTkc+bmV3LTwvU1RST05HPgorICAgICAgICAgICAgICA8U1RST05HPmxpbmU8L1NUUk9ORz4sICA8U1RST05HPmtleV9iYWNrc3BhY2U8L1NUUk9ORz4sICA8U1RST05HPmtleV9sZWZ0PC9TVFJPTkc+LCBhbmQgPFNUUk9ORz5rZXlfZG93bjwvU1RST05HPiwgdGhlbgorICAgICAgICAgICAgICBhdHRlbXB0cyB0byB1c2Ugb2Jzb2xldGUgIHRlcm1jYXAgIGNhcGFiaWxpdGllcyAgdG8KKyAgICAgICAgICAgICAgZGVkdWNlIGNvcnJlY3QgdmFsdWVzLiAgSXQgYWxzbyBub3JtYWxseSBzdXBwcmVzc2VzCisgICAgICAgICAgICAgIG91dHB1dCBvZiBvYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcyBzdWNoIGFzIDxTVFJPTkc+YnM8L1NUUk9ORz4uCisgICAgICAgICAgICAgIFRoaXMgIG9wdGlvbiBmb3JjZXMgYSBtb3JlIGxpdGVyYWwgdHJhbnNsYXRpb24gdGhhdAorICAgICAgICAgICAgICBhbHNvIHByZXNlcnZlcyB0aGUgb2Jzb2xldGUgY2FwYWJpbGl0aWVzLgorCisgICAgICAgPFNUUk9ORz4tbzwvU1RST05HPjxFTT5kaXI8L0VNPiAgV3JpdGUgY29tcGlsZWQgZW50cmllcyB0byBnaXZlbiAgZGlyZWN0b3J5LiAgIE92ZXItCisgICAgICAgICAgICAgIHJpZGVzIHRoZSBURVJNSU5GTyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgIDxTVFJPTkc+LVI8L1NUUk9ORz48RU0+c3Vic2V0PC9FTT4KKyAgICAgICAgICAgICAgUmVzdHJpY3QgIG91dHB1dCB0byBhIGdpdmVuIHN1YnNldC4gIFRoaXMgb3B0aW9uIGlzCisgICAgICAgICAgICAgIGZvciB1c2Ugd2l0aCAgYXJjaGFpYyAgdmVyc2lvbnMgIG9mICB0ZXJtaW5mbyAgbGlrZQorICAgICAgICAgICAgICB0aG9zZSBvbiBTVnIxLCBVbHRyaXgsIG9yIEhQL1VYIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAgICAgICAgICAgICAgdGhlIGZ1bGwgc2V0IG9mIFNWUjQvWFNJIEN1cnNlcyB0ZXJtaW5mbzsgYW5kICBvdXQtCisgICAgICAgICAgICAgIHJpZ2h0IGJyb2tlbiBwb3J0cyBsaWtlIEFJWCAzLnggdGhhdCBoYXZlIHRoZWlyIG93bgorICAgICAgICAgICAgICBleHRlbnNpb25zIGluY29tcGF0aWJsZSB3aXRoICBTVnI0L1hTSS4gICBBdmFpbGFibGUKKyAgICAgICAgICAgICAgc3Vic2V0cyAgYXJlICAiU1ZyMSIsICAiVWx0cml4IiwgICJIUCIsICAiQlNEIiAgYW5kCisgICAgICAgICAgICAgICJBSVgiOyBzZWUgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPiBmb3IgZGV0YWlscy4KKworICAgICAgIDxTVFJPTkc+LXI8L1NUUk9ORz4gICAgIEZvcmNlIGVudHJ5IHJlc29sdXRpb24gKHNvIHRoZXJlIGFyZSAgbm8gIHJlbWFpbmluZworICAgICAgICAgICAgICB0YyAgY2FwYWJpbGl0aWVzKSAgZXZlbiAgd2hlbiAgZG9pbmcgdHJhbnNsYXRpb24gdG8KKyAgICAgICAgICAgICAgdGVybWNhcCBmb3JtYXQuICBUaGlzIG1heSAgYmUgIG5lZWRlZCAgaWYgIHlvdSAgYXJlCisgICAgICAgICAgICAgIHByZXBhcmluZyAgYSAgdGVybWNhcCAgZmlsZSAgZm9yICBhIHRlcm1jYXAgbGlicmFyeQorICAgICAgICAgICAgICAoc3VjaCBhcyBHTlUgdGVybWNhcCB0aHJvdWdoICB2ZXJzaW9uICAxLjMgIG9yICBCU0QKKyAgICAgICAgICAgICAgdGVybWNhcCB0aHJvdWdoIDQuM0JTRCkgdGhhdCBkb2VzIG5vdCBoYW5kbGUgbXVsdGktCisgICAgICAgICAgICAgIHBsZSB0YyBjYXBhYmlsaXRpZXMgcGVyIGVudHJ5LgorCisgICAgICAgPFNUUk9ORz4tczwvU1RST05HPiAgICAgU3VtbWFyaXplIHRoZSBjb21waWxlIGJ5IHNob3dpbmcgdGhlIGRpcmVjdG9yeSBpbnRvCisgICAgICAgICAgICAgIHdoaWNoICBlbnRyaWVzICBhcmUgIHdyaXR0ZW4sICBhbmQgIHRoZSAgbnVtYmVyICBvZgorICAgICAgICAgICAgICBlbnRyaWVzIHdoaWNoIGFyZSBjb21waWxlZC4KKworICAgICAgIDxTVFJPTkc+LVQ8L1NUUk9ORz4gICAgIGVsaW1pbmF0ZXMgc2l6ZS1yZXN0cmljdGlvbnMgb24gdGhlIGdlbmVyYXRlZCB0ZXh0LgorICAgICAgICAgICAgICBUaGlzICBpcyAgbWFpbmx5ICB1c2VmdWwgIGZvciB0ZXN0aW5nIGFuZCBhbmFseXNpcywKKyAgICAgICAgICAgICAgc2luY2UgdGhlIGNvbXBpbGVkIGRlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCAgKGUuZy4sCisgICAgICAgICAgICAgIDEwMjMgZm9yIHRlcm1jYXAsIDQwOTYgZm9yIHRlcm1pbmZvKS4KKworICAgICAgIDxTVFJPTkc+LXQ8L1NUUk9ORz4gICAgIHRlbGxzICA8U1RST05HPnRpYzwvU1RST05HPiAgdG8gIGRpc2NhcmQgY29tbWVudGVkLW91dCBjYXBhYmlsaXRpZXMuCisgICAgICAgICAgICAgIE5vcm1hbGx5IHdoZW4gdHJhbnNsYXRpbmcgZnJvbSB0ZXJtaW5mbyB0byB0ZXJtY2FwLAorICAgICAgICAgICAgICB1bnRyYW5zbGF0YWJsZSBjYXBhYmlsaXRpZXMgYXJlIGNvbW1lbnRlZC1vdXQuCisKKyAgICAgICA8U1RST05HPi1VPC9TVFJPTkc+ICAgdGVsbHMgIDxTVFJPTkc+dGljPC9TVFJPTkc+IHRvIG5vdCBwb3N0LXByb2Nlc3MgdGhlIGRhdGEgYWZ0ZXIgcGFyc2luZworICAgICAgICAgICAgdGhlIHNvdXJjZSBmaWxlLiAgTm9ybWFsbHksIGl0IGluZmVycyBkYXRhICB3aGljaCAgaXMKKyAgICAgICAgICAgIGNvbW1vbmx5ICBtaXNzaW5nIGluIG9sZGVyIHRlcm1pbmZvIGRhdGEsIG9yIGluIHRlcm0tCisgICAgICAgICAgICBjYXBzLgorCisgICAgICAgPFNUUk9ORz4tVjwvU1RST05HPiAgIHJlcG9ydHMgdGhlIHZlcnNpb24gb2YgbmN1cnNlcyB3aGljaCB3YXMgdXNlZCBpbiB0aGlzCisgICAgICAgICAgICBwcm9ncmFtLCBhbmQgZXhpdHMuCisKKyAgICAgICA8U1RST05HPi12PC9TVFJPTkc+PEVNPm48L0VNPiAgc3BlY2lmaWVzICB0aGF0ICAodmVyYm9zZSkgb3V0cHV0IGJlIHdyaXR0ZW4gdG8gc3Rhbi0KKyAgICAgICAgICAgIGRhcmQgZXJyb3IgdHJhY2UgaW5mb3JtYXRpb24gc2hvd2luZyA8U1RST05HPnRpYzwvU1RST05HPidzICBwcm9ncmVzcy4KKyAgICAgICAgICAgIFRoZSAgb3B0aW9uYWwgIHBhcmFtZXRlciAgPEVNPm48L0VNPiBpcyBhIG51bWJlciBmcm9tIDEgdG8gMTAsCisgICAgICAgICAgICBpbmNsdXNpdmUsIGluZGljYXRpbmcgdGhlIGRlc2lyZWQgbGV2ZWwgb2YgZGV0YWlsICBvZgorICAgICAgICAgICAgaW5mb3JtYXRpb24uICAgSWYgIDxFTT5uPC9FTT4gaXMgb21pdHRlZCwgdGhlIGRlZmF1bHQgbGV2ZWwgaXMKKyAgICAgICAgICAgIDEuICBJZiA8RU0+bjwvRU0+IGlzIHNwZWNpZmllZCBhbmQgZ3JlYXRlciB0aGFuIDEsICB0aGUgIGxldmVsCisgICAgICAgICAgICBvZiBkZXRhaWwgaXMgaW5jcmVhc2VkLgorCisgICAgICAgPFNUUk9ORz4tdzwvU1RST05HPjxFTT5uPC9FTT4gIHNwZWNpZmllcyAgdGhlIHdpZHRoIG9mIHRoZSBvdXRwdXQuICBUaGUgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICBvcHRpb25hbC4gIElmIGl0IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIDYwLgorCisgICAgICAgPFNUUk9ORz4teDwvU1RST05HPiAgIFRyZWF0IHVua25vd24gY2FwYWJpbGl0aWVzIGFzIHVzZXItZGVmaW5lZC4gIFRoYXQgaXMsCisgICAgICAgICAgICBpZiAgeW91ICBzdXBwbHkgIGEgY2FwYWJpbGl0eSBuYW1lIHdoaWNoIDxTVFJPTkc+dGljPC9TVFJPTkc+IGRvZXMgbm90CisgICAgICAgICAgICByZWNvZ25pemUsIGl0IHdpbGwgaW5mZXIgaXRzIHR5cGUgKGJvb2xlYW4sIG51bWJlciBvcgorICAgICAgICAgICAgc3RyaW5nKSAgZnJvbSAgdGhlICBzeW50YXggYW5kIG1ha2UgYW4gZXh0ZW5kZWQgdGFibGUKKyAgICAgICAgICAgIGVudHJ5ICBmb3IgIHRoYXQuICAgVXNlci1kZWZpbmVkICBjYXBhYmlsaXR5ICBzdHJpbmdzCisgICAgICAgICAgICB3aG9zZSAgbmFtZSBiZWdpbnMgd2l0aCBgYGsnJyBhcmUgdHJlYXRlZCBhcyBmdW5jdGlvbgorICAgICAgICAgICAga2V5cy4KKworICAgICAgIDxFTT5maWxlPC9FTT4gY29udGFpbnMgb25lIG9yIG1vcmUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiAgdGVybWluYWwgIGRlc2NyaXB0aW9ucworICAgICAgICAgICAgaW4gc291cmNlIGZvcm1hdCBbc2VlIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz5dLiAgRWFjaCBkZXNjcmlwdGlvbgorICAgICAgICAgICAgaW4gdGhlIGZpbGUgZGVzY3JpYmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSAgcGFydGljdS0KKyAgICAgICAgICAgIGxhciB0ZXJtaW5hbC4KKworICAgICAgIFRoZSBkZWJ1ZyBmbGFnIGxldmVscyBhcmUgYXMgZm9sbG93czoKKworICAgICAgIDEgICAgICBOYW1lcyBvZiBmaWxlcyBjcmVhdGVkIGFuZCBsaW5rZWQKKworICAgICAgIDIgICAgICBJbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBgYHVzZScnIGZhY2lsaXR5CisKKyAgICAgICAzICAgICAgU3RhdGlzdGljcyBmcm9tIHRoZSBoYXNoaW5nIGFsZ29yaXRobQorCisgICAgICAgNSAgICAgIFN0cmluZy10YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnMKKworICAgICAgIDcgICAgICBFbnRyaWVzIGludG8gdGhlIHN0cmluZy10YWJsZQorCisgICAgICAgOCAgICAgIExpc3Qgb2YgdG9rZW5zIGVuY291bnRlcmVkIGJ5IHNjYW5uZXIKKworICAgICAgIDkgICAgICBBbGwgdmFsdWVzIGNvbXB1dGVkIGluIGNvbnN0cnVjdGlvbiBvZiB0aGUgaGFzaCB0YS0KKyAgICAgICAgICAgICAgYmxlCisKKyAgICAgICBJZiB0aGUgZGVidWcgbGV2ZWwgPEVNPm48L0VNPiBpcyBub3QgZ2l2ZW4sIGl0IGlzIHRha2VuIHRvIGJlICBvbmUuCisKKyAgICAgICBBbGwgYnV0IG9uZSBvZiB0aGUgY2FwYWJpbGl0aWVzIHJlY29nbml6ZWQgYnkgPFNUUk9ORz50aWM8L1NUUk9ORz4gYXJlIGRvYy0KKyAgICAgICB1bWVudGVkIGluIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uICBUaGUgZXhjZXB0aW9uIGlzIHRoZSA8U1RST05HPnVzZTwvU1RST05HPiBjYXBhYmlsLQorICAgICAgIGl0eS4KKworICAgICAgIFdoZW4gIGEgIDxTVFJPTkc+dXNlPC9TVFJPTkc+PTxFTT5lbnRyeTwvRU0+LTxFTT5uYW1lPC9FTT4gIGZpZWxkIGlzIGRpc2NvdmVyZWQgaW4gYSB0ZXJtaW5hbAorICAgICAgIGVudHJ5IGN1cnJlbnRseSBiZWluZyBjb21waWxlZCwgPFNUUk9ORz50aWM8L1NUUk9ORz4gcmVhZHMgIGluICB0aGUgIGJpbmFyeQorICAgICAgIGZyb20gIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mbzwvU1RST05HPiB0byBjb21wbGV0ZSB0aGUgZW50cnkuICAoRW50cmllcworICAgICAgIGNyZWF0ZWQgZnJvbSA8RU0+ZmlsZTwvRU0+IHdpbGwgYmUgdXNlZCBmaXJzdC4gIElmIHRoZSAgZW52aXJvbm1lbnQKKyAgICAgICB2YXJpYWJsZSAgPFNUUk9ORz5URVJNSU5GTzwvU1RST05HPiAgaXMgIHNldCwgIHRoYXQgIGRpcmVjdG9yeSAgaXMgc2VhcmNoZWQKKyAgICAgICBpbnN0ZWFkIG9mIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mbzwvU1RST05HPi4pICA8U1RST05HPnRpYzwvU1RST05HPiBkdXBsaWNhdGVzIHRoZSBjYXBhLQorICAgICAgIGJpbGl0aWVzICBpbiAgPEVNPmVudHJ5PC9FTT4tPEVNPm5hbWU8L0VNPiAgZm9yICB0aGUgY3VycmVudCBlbnRyeSwgd2l0aCB0aGUKKyAgICAgICBleGNlcHRpb24gIG9mICB0aG9zZSAgY2FwYWJpbGl0aWVzICB0aGF0ICBleHBsaWNpdGx5ICAgYXJlCisgICAgICAgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBlbnRyeS4KKworICAgICAgIFdoZW4gICAgYW4gICBlbnRyeSwgICBlLmcuLCAgIDxTVFJPTkc+ZW50cnlfbmFtZV8xPC9TVFJPTkc+LCAgIGNvbnRhaW5zICAgYQorICAgICAgIDxTVFJPTkc+dXNlPTwvU1RST05HPjxFTT5lbnRyeTwvRU0+XzxFTT5uYW1lPC9FTT5fPEVNPjI8L0VNPiAgZmllbGQsICBhbnkgIGNhbmNlbGVkICBjYXBhYmlsaXRpZXMgICBpbgorICAgICAgIDxFTT5lbnRyeTwvRU0+XzxFTT5uYW1lPC9FTT5fPEVNPjI8L0VNPiAgbXVzdCBhbHNvIGFwcGVhciBpbiA8U1RST05HPmVudHJ5X25hbWVfMTwvU1RST05HPiBiZWZvcmUgPFNUUk9ORz51c2U9PC9TVFJPTkc+CisgICAgICAgZm9yIHRoZXNlIGNhcGFiaWxpdGllcyB0byBiZSBjYW5jZWxlZCBpbiA8U1RST05HPmVudHJ5X25hbWVfMTwvU1RST05HPi4KKworICAgICAgIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8U1RST05HPlRFUk1JTkZPPC9TVFJPTkc+IGlzIHNldCwgdGhlICBjb21waWxlZAorICAgICAgIHJlc3VsdHMgYXJlIHBsYWNlZCB0aGVyZSBpbnN0ZWFkIG9mIDxTVFJPTkc+L3Vzci9zaGFyZS90ZXJtaW5mbzwvU1RST05HPi4KKworICAgICAgIFRvdGFsIGNvbXBpbGVkIGVudHJpZXMgY2Fubm90IGV4Y2VlZCA0MDk2IGJ5dGVzLiAgVGhlIG5hbWUKKyAgICAgICBmaWVsZCBjYW5ub3QgZXhjZWVkIDUxMiBieXRlcy4gIFRlcm1pbmFsICBuYW1lcyAgZXhjZWVkaW5nCisgICAgICAgdGhlICBtYXhpbXVtICBhbGlhcyAgbGVuZ3RoICgzMiBjaGFyYWN0ZXJzIG9uIHN5c3RlbXMgd2l0aAorICAgICAgIGxvbmcgZmlsZW5hbWVzLCAxNCBjaGFyYWN0ZXJzIG90aGVyd2lzZSkgd2lsbCBiZSB0cnVuY2F0ZWQKKyAgICAgICB0byAgdGhlIG1heGltdW0gYWxpYXMgbGVuZ3RoIGFuZCBhIHdhcm5pbmcgbWVzc2FnZSB3aWxsIGJlCisgICAgICAgcHJpbnRlZC4KKworCis8L1BSRT4KKzxIMj5DT01QQVRJQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZXJlIGlzIHNvbWUgZXZpZGVuY2UgdGhhdCBoaXN0b3JpYyAgPFNUUk9ORz50aWM8L1NUUk9ORz4gIGltcGxlbWVudGF0aW9ucworICAgICAgIHRyZWF0ZWQgIGRlc2NyaXB0aW9uICBmaWVsZHMgd2l0aCBubyB3aGl0ZXNwYWNlIGluIHRoZW0gYXMKKyAgICAgICBhZGRpdGlvbmFsIGFsaWFzZXMgb3Igc2hvcnQgbmFtZXMuICBUaGlzIDxTVFJPTkc+dGljPC9TVFJPTkc+IGRvZXMgIG5vdCAgZG8KKyAgICAgICB0aGF0LCAgYnV0ICBpdCAgZG9lcyAgd2FybiAgd2hlbiBkZXNjcmlwdGlvbiBmaWVsZHMgbWF5IGJlCisgICAgICAgdHJlYXRlZCB0aGF0IHdheSBhbmQgY2hlY2sgdGhlbSBmb3IgZGFuZ2Vyb3VzICBjaGFyYWN0ZXJzLgorCisKKzwvUFJFPgorPEgyPkVYVEVOU0lPTlM8L0gyPjxQUkU+CisgICAgICAgVW5saWtlIHRoZSBzdG9jayBTVnI0IDxTVFJPTkc+dGljPC9TVFJPTkc+IGNvbW1hbmQsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuCisgICAgICAgYWN0dWFsbHkgY29tcGlsZSB0ZXJtY2FwIHNvdXJjZXMuICAgSW4gIGZhY3QsICBlbnRyaWVzICBpbgorICAgICAgIHRlcm1pbmZvICBhbmQgIHRlcm1jYXAgIHN5bnRheCAgY2FuICBiZSAgbWl4ZWQgaW4gYSBzaW5nbGUKKyAgICAgICBzb3VyY2UgZmlsZS4gIFNlZSA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+ICBmb3IgIHRoZSAgbGlzdCAgb2YgIHRlcm1jYXAKKyAgICAgICBuYW1lcyB0YWtlbiB0byBiZSBlcXVpdmFsZW50IHRvIHRlcm1pbmZvIG5hbWVzLgorCisgICAgICAgVGhlICBTVnI0ICBtYW51YWwgIHBhZ2VzICBhcmUgIG5vdCBjbGVhciBvbiB0aGUgcmVzb2x1dGlvbgorICAgICAgIHJ1bGVzIGZvciA8U1RST05HPnVzZTwvU1RST05HPiBjYXBhYmlsaXRpZXMuICBUaGlzICBpbXBsZW1lbnRhdGlvbiAgb2YgIDxTVFJPTkc+dGljPC9TVFJPTkc+CisgICAgICAgd2lsbCBmaW5kIDxTVFJPTkc+dXNlPC9TVFJPTkc+IHRhcmdldHMgYW55d2hlcmUgaW4gdGhlIHNvdXJjZSBmaWxlLCBvciBhbnktCisgICAgICAgd2hlcmUgaW4gdGhlIGZpbGUgdHJlZSByb290ZWQgYXQgPFNUUk9ORz5URVJNSU5GTzwvU1RST05HPiAoaWYgPFNUUk9ORz5URVJNSU5GTzwvU1RST05HPiAgaXMKKyAgICAgICBkZWZpbmVkKSwgIG9yICBpbiB0aGUgdXNlcidzIDxFTT4kSE9NRS8udGVybWluZm88L0VNPiBkaXJlY3RvcnkgKGlmCisgICAgICAgaXQgZXhpc3RzKSwgb3IgKGZpbmFsbHkpIGFueXdoZXJlICBpbiAgdGhlICBzeXN0ZW0ncyAgZmlsZQorICAgICAgIHRyZWUgb2YgY29tcGlsZWQgZW50cmllcy4KKworICAgICAgIFRoZSAgZXJyb3IgIG1lc3NhZ2VzIGZyb20gdGhpcyA8U1RST05HPnRpYzwvU1RST05HPiBoYXZlIHRoZSBzYW1lIGZvcm1hdCBhcworICAgICAgIEdOVSBDIGVycm9yIG1lc3NhZ2VzLCBhbmQgY2FuIGJlICBwYXJzZWQgIGJ5ICBHTlUgIEVtYWNzJ3MKKyAgICAgICBjb21waWxlIGZhY2lsaXR5LgorCisgICAgICAgVGhlICA8U1RST05HPi1DPC9TVFJPTkc+LCAgPFNUUk9ORz4tRzwvU1RST05HPiwgIDxTVFJPTkc+LUk8L1NUUk9ORz4sIDxTVFJPTkc+LU48L1NUUk9ORz4sIDxTVFJPTkc+LVI8L1NUUk9ORz4sIDxTVFJPTkc+LVQ8L1NUUk9ORz4sIDxTVFJPTkc+LVY8L1NUUk9ORz4sIDxTVFJPTkc+LWE8L1NUUk9ORz4sIDxTVFJPTkc+LWU8L1NUUk9ORz4sIDxTVFJPTkc+LWY8L1NUUk9ORz4sIDxTVFJPTkc+LWc8L1NUUk9ORz4sIDxTVFJPTkc+LW88L1NUUk9ORz4sIDxTVFJPTkc+LXI8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz4tczwvU1RST05HPiwgPFNUUk9ORz4tdDwvU1RST05HPiBhbmQgPFNUUk9ORz4teDwvU1RST05HPiBvcHRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHVuZGVyICBTVnI0LiAgIFRoZQorICAgICAgIFNWcjQgPFNUUk9ORz4tYzwvU1RST05HPiBtb2RlIGRvZXMgbm90IHJlcG9ydCBiYWQgdXNlIGxpbmtzLgorCisgICAgICAgU3lzdGVtICBWIGRvZXMgbm90IGNvbXBpbGUgZW50cmllcyB0byBvciByZWFkIGVudHJpZXMgZnJvbQorICAgICAgIHlvdXIgPEVNPiRIT01FLy50ZXJtaW5mbzwvRU0+IGRpcmVjdG9yeSB1bmxlc3MgVEVSTUlORk8gaXMgIGV4cGxpYy0KKyAgICAgICBpdGx5IHNldCB0byBpdC4KKworCis8L1BSRT4KKzxIMj5GSUxFUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm8vPy8qPC9TVFJPTkc+CisgICAgICAgICAgICBDb21waWxlZCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBkYXRhYmFzZS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImluZm9jbXAuMW0uaHRtbCI+aW5mb2NtcCgxbSk8L0E+PC9TVFJPTkc+LCAgICA8U1RST05HPjxBIEhSRUY9ImNhcHRvaW5mby4xbS5odG1sIj5jYXB0b2luZm8oMW0pPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9ImluZm90b2NhcC4xbS5odG1sIj5pbmZvdG9jYXAoMW0pPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9InRvZS4xbS5odG1sIj50b2UoMW0pPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRpYy4xbS5odG1sIj50aWMoMW0pPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdG9lLjFtLmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdG9lLjFtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0MzcyZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi90b2UuMW0uaHRtbApAQCAtMCwwICsxLDEyNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiB0b2UuMW0sdiAxLjIxIDIwMDgvMDEvMDUgMjA6NTc6MTYgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+dG9lIDFtPC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+dG9lIDFtPC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJ0b2UuMW0uaHRtbCI+dG9lKDFtKTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRvZS4xbS5odG1sIj50b2UoMW0pPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dG9lPC9TVFJPTkc+IC0gdGFibGUgb2YgKHRlcm1pbmZvKSBlbnRyaWVzCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50b2U8L1NUUk9ORz4gWzxTVFJPTkc+LXY8L1NUUk9ORz5bPEVNPm48L0VNPl1dIFs8U1RST05HPi1haHVVVjwvU1RST05HPl0gPEVNPmZpbGUuLi48L0VNPgorCisKKzwvUFJFPgorPEgyPkRFU0NSSVBUSU9OPC9IMj48UFJFPgorICAgICAgIFdpdGggbm8gb3B0aW9ucywgPFNUUk9ORz50b2U8L1NUUk9ORz4gbGlzdHMgYWxsIGF2YWlsYWJsZSB0ZXJtaW5hbCB0eXBlcyBieQorICAgICAgIHByaW1hcnkgbmFtZSB3aXRoIGRlc2NyaXB0aW9ucy4gICBGaWxlICBhcmd1bWVudHMgIHNwZWNpZnkKKyAgICAgICB0aGUgIGRpcmVjdG9yaWVzICB0byAgYmUgc2Nhbm5lZDsgaWYgbm8gc3VjaCBhcmd1bWVudHMgYXJlCisgICAgICAgZ2l2ZW4sIHlvdXIgZGVmYXVsdCB0ZXJtaW5mbyBkaXJlY3RvcnkgaXMgc2Nhbm5lZC4gIElmIHlvdQorICAgICAgIGFsc28gIHNwZWNpZnkgIHRoZSAgPFNUUk9ORz4taDwvU1RST05HPiAgb3B0aW9uLCBhIGRpcmVjdG9yeSBoZWFkZXIgd2lsbCBiZQorICAgICAgIGlzc3VlZCBhcyBlYWNoIGRpcmVjdG9yeSBpcyBlbnRlcmVkLgorCisgICAgICAgVGhlcmUgYXJlIG90aGVyIG9wdGlvbnMgaW50ZW5kZWQgZm9yIHVzZSBieSB0ZXJtaW5mbyAgZmlsZQorICAgICAgIG1haW50YWluZXJzOgorCisgICAgICAgPFNUUk9ORz4tYTwvU1RST05HPiAgICAgcmVwb3J0ICBvbiAgYWxsICBvZiAgdGhlICB0ZXJtaW5hbCAgZGF0YWJhc2VzIHdoaWNoCisgICAgICAgICAgICAgIG5jdXJzZXMgd291bGQgc2VhcmNoLCByYXRoZXIgdGhhbiAgb25seSAgdGhlICBmaXJzdAorICAgICAgICAgICAgICBvbmUgdGhhdCBpdCBmaW5kcy4KKworICAgICAgIDxTVFJPTkc+LXU8L1NUUk9ORz4gPEVNPmZpbGU8L0VNPgorICAgICAgICAgICAgICBzYXlzICB0byAgd3JpdGUgIGEgIHJlcG9ydCAgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwKKyAgICAgICAgICAgICAgbGlzdGluZyBkZXBlbmRlbmNpZXMgaW4gdGhlIGdpdmVuICB0ZXJtaW5mby90ZXJtY2FwCisgICAgICAgICAgICAgIHNvdXJjZSAgZmlsZS4gIFRoZSByZXBvcnQgY29uZGVuc2VzIHRoZSBgdXNlJyByZWxhLQorICAgICAgICAgICAgICB0aW9uOiBlYWNoIGxpbmUgY29uc2lzdHMgb2YgdGhlIHByaW1hcnkgbmFtZSAgb2YgIGEKKyAgICAgICAgICAgICAgdGVybWluYWwgIHRoYXQgIGhhcyB1c2UgY2FwYWJpbGl0aWVzLCBmb2xsb3dlZCBieSBhCisgICAgICAgICAgICAgIGNvbG9uLCBmb2xsb3dlZCBieSB0aGUgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgcHJpbWFyeQorICAgICAgICAgICAgICBuYW1lcyAgb2YgIGFsbCAgdGVybWluYWxzICB3aGljaCBvY2N1ciBpbiB0aG9zZSB1c2UKKyAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzLCBmb2xsb3dlZCBieSBhIG5ld2xpbmUKKworICAgICAgIDxTVFJPTkc+LVU8L1NUUk9ORz4gPEVNPmZpbGU8L0VNPgorICAgICAgICAgICAgICBzYXlzIHRvIHdyaXRlIGEgIHJlcG9ydCAgdG8gIHRoZSAgc3RhbmRhcmQgIG91dHB1dCwKKyAgICAgICAgICAgICAgbGlzdGluZyAgcmV2ZXJzZSAgZGVwZW5kZW5jaWVzICBpbiAgdGhlICBnaXZlbiB0ZXItCisgICAgICAgICAgICAgIG1pbmZvL3Rlcm1jYXAgc291cmNlIGZpbGUuICBUaGUgcmVwb3J0IHJldmVyc2VzIHRoZQorICAgICAgICAgICAgICBgdXNlJyAgcmVsYXRpb246ICBlYWNoIGxpbmUgY29uc2lzdHMgb2YgdGhlIHByaW1hcnkKKyAgICAgICAgICAgICAgbmFtZSBvZiBhIHRlcm1pbmFsIHRoYXQgb2NjdXJzIGluIHVzZSBjYXBhYmlsaXRpZXMsCisgICAgICAgICAgICAgIGZvbGxvd2VkICBieSAgYSAgY29sb24sIGZvbGxvd2VkIGJ5IHRoZSB3aGl0ZXNwYWNlLQorICAgICAgICAgICAgICBzZXBhcmF0ZWQgcHJpbWFyeSAgbmFtZXMgIG9mICBhbGwgIHRlcm1pbmFscyAgd2hpY2gKKyAgICAgICAgICAgICAgZGVwZW5kIG9uIGl0LCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCisKKyAgICAgICA8U1RST05HPi12PC9TVFJPTkc+PEVNPm48L0VNPiAgICBzcGVjaWZpZXMgdGhhdCAodmVyYm9zZSkgb3V0cHV0IGJlIHdyaXR0ZW4gdG8gc3Rhbi0KKyAgICAgICAgICAgICAgZGFyZCBlcnJvciwgc2hvd2luZyA8U1RST05HPnRvZTwvU1RST05HPidzIHByb2dyZXNzLiAgIFRoZSAgb3B0aW9uYWwKKyAgICAgICAgICAgICAgcGFyYW1ldGVyICA8RU0+bjwvRU0+ICBpcyBhIG51bWJlciBmcm9tIDEgdG8gMTAsIGludGVycHJldGVkCisgICAgICAgICAgICAgIGFzIGZvciA8U1RST05HPjxBIEhSRUY9InRpYy4xbS5odG1sIj50aWMoMW0pPC9BPjwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+LVY8L1NUUk9ORz4gICAgIHJlcG9ydHMgdGhlIHZlcnNpb24gb2YgbmN1cnNlcyB3aGljaCAgd2FzICB1c2VkICBpbgorICAgICAgICAgICAgICB0aGlzIHByb2dyYW0sIGFuZCBleGl0cy4KKworCis8L1BSRT4KKzxIMj5GSUxFUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPi91c3Ivc2hhcmUvdGVybWluZm8vPy8qPC9TVFJPTkc+CisgICAgICAgICAgICBDb21waWxlZCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBkYXRhYmFzZS4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9InRpYy4xbS5odG1sIj50aWMoMW0pPC9BPjwvU1RST05HPiwgICAgPFNUUk9ORz48QSBIUkVGPSJpbmZvY21wLjFtLmh0bWwiPmluZm9jbXAoMW0pPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9ImNhcHRvaW5mby4xbS5odG1sIj5jYXB0b2luZm8oMW0pPC9BPjwvU1RST05HPiwgICA8U1RST05HPjxBIEhSRUY9ImluZm90b2NhcC4xbS5odG1sIj5pbmZvdG9jYXAoMW0pPC9BPjwvU1RST05HPiwKKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im5jdXJzZXMuM3guaHRtbCI+Y3Vyc2VzKDN4KTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRvZS4xbS5odG1sIj50b2UoMW0pPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdHB1dC4xLmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdHB1dC4xLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzMWFhNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi90cHV0LjEuaHRtbApAQCAtMCwwICsxLDM0MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICogdAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBJZDogdHB1dC4xLHYgMS4yNyAyMDA2LzEyLzI0IDE4OjExOjMxIHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPnRwdXQgMTwvVElUTEU+Cis8bGluayByZXY9bWFkZSBocmVmPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzwvSEVBRD4KKzxCT0RZPgorPEgxPnRwdXQgMTwvSDE+Cis8SFI+Cis8UFJFPgorPCEtLSBNYW5wYWdlIGNvbnZlcnRlZCBieSBtYW4yaHRtbCAzLjAuMSAtLT4KKzxTVFJPTkc+PEEgSFJFRj0idHB1dC4xLmh0bWwiPnRwdXQoMSk8L0E+PC9TVFJPTkc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0cHV0LjEuaHRtbCI+dHB1dCgxKTwvQT48L1NUUk9ORz4KKworCisKKworPC9QUkU+Cis8SDI+TkFNRTwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4sICA8U1RST05HPnJlc2V0PC9TVFJPTkc+ICAtICBpbml0aWFsaXplICBhICB0ZXJtaW5hbCBvciBxdWVyeSB0ZXJtaW5mbworICAgICAgIGRhdGFiYXNlCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IFs8U1RST05HPi1UPC9TVFJPTkc+PEVNPnR5cGU8L0VNPl0gPEVNPmNhcG5hbWU8L0VNPiBbPEVNPnBhcm1zPC9FTT4gLi4uIF0KKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gWzxTVFJPTkc+LVQ8L1NUUk9ORz48RU0+dHlwZTwvRU0+XSA8U1RST05HPmluaXQ8L1NUUk9ORz4KKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gWzxTVFJPTkc+LVQ8L1NUUk9ORz48RU0+dHlwZTwvRU0+XSA8U1RST05HPnJlc2V0PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IFs8U1RST05HPi1UPC9TVFJPTkc+PEVNPnR5cGU8L0VNPl0gPFNUUk9ORz5sb25nbmFtZTwvU1RST05HPgorICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPi1TPC9TVFJPTkc+ICA8U1RST05HPiZsdDsmbHQ7PC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+LVY8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz50cHV0PC9TVFJPTkc+IHV0aWxpdHkgdXNlcyB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZSAgdG8gIG1ha2UgIHRoZQorICAgICAgIHZhbHVlcyAgb2YgdGVybWluYWwtZGVwZW5kZW50IGNhcGFiaWxpdGllcyBhbmQgaW5mb3JtYXRpb24KKyAgICAgICBhdmFpbGFibGUgdG8gdGhlIHNoZWxsIChzZWUgPFNUUk9ORz48QSBIUkVGPSJzaC4xLmh0bWwiPnNoKDEpPC9BPjwvU1RST05HPiksIHRvIGluaXRpYWxpemUgb3IgcmVzZXQKKyAgICAgICB0aGUgIHRlcm1pbmFsLCAgb3IgIHJldHVybiAgdGhlIGxvbmcgbmFtZSBvZiB0aGUgcmVxdWVzdGVkCisgICAgICAgdGVybWluYWwgdHlwZS4gIFRoZSByZXN1bHQgZGVwZW5kcyB1cG9uICB0aGUgIGNhcGFiaWxpdHkncworICAgICAgIHR5cGU6CisKKyAgICAgICAgICAgICAgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IHdyaXRlcyB0aGUgc3RyaW5nIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgTm8gdHJhaWxpbmcgbmV3bGluZSBpcyBzdXBwbGllZC4KKworICAgICAgICAgICAgICBpbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IHdyaXRlcyB0aGUgZGVjaW1hbCB2YWx1ZSB0byB0aGUgIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgICAgb3V0cHV0LCB3aXRoIGEgdHJhaWxpbmcgbmV3bGluZS4KKworICAgICAgICAgICAgICBib29sZWFuCisgICAgICAgICAgICAgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+ICBzaW1wbHkgc2V0cyB0aGUgZXhpdCBjb2RlICg8U1RST05HPjA8L1NUUk9ORz4gZm9yIFRSVUUgaWYKKyAgICAgICAgICAgICAgICAgICB0aGUgdGVybWluYWwgaGFzIHRoZSBjYXBhYmlsaXR5LCA8U1RST05HPjE8L1NUUk9ORz4gIGZvciAgRkFMU0UKKyAgICAgICAgICAgICAgICAgICBpZiAgaXQgIGRvZXMgIG5vdCksICBhbmQgd3JpdGVzIG5vdGhpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgb3V0cHV0LgorCisgICAgICAgQmVmb3JlIHVzaW5nIGEgdmFsdWUgcmV0dXJuZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dCwgIHRoZQorICAgICAgIGFwcGxpY2F0aW9uICBzaG91bGQgIHRlc3QgIHRoZSAgZXhpdCAgY29kZSAgKGUuZy4sIDxTVFJPTkc+JD88L1NUUk9ORz4sIHNlZQorICAgICAgIDxTVFJPTkc+PEEgSFJFRj0ic2guMS5odG1sIj5zaCgxKTwvQT48L1NUUk9ORz4pIHRvIGJlIHN1cmUgaXQgaXMgPFNUUk9ORz4wPC9TVFJPTkc+LiAgKFNlZSB0aGUgPFNUUk9ORz5FWElUPC9TVFJPTkc+IDxTVFJPTkc+Q09ERVM8L1NUUk9ORz4gYW5kICA8U1RST05HPkRJQUctPC9TVFJPTkc+CisgICAgICAgPFNUUk9ORz5OT1NUSUNTPC9TVFJPTkc+ICBzZWN0aW9ucy4pICAgRm9yICBhIGNvbXBsZXRlIGxpc3Qgb2YgY2FwYWJpbGl0aWVzCisgICAgICAgYW5kIHRoZSA8RU0+Y2FwbmFtZTwvRU0+IGFzc29jaWF0ZWQgd2l0aCBlYWNoLCBzZWUgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+LVQ8L1NUUk9ORz48RU0+dHlwZTwvRU0+IGluZGljYXRlcyB0aGUgIDxFTT50eXBlPC9FTT4gIG9mICB0ZXJtaW5hbC4gICBOb3JtYWxseSAgdGhpcworICAgICAgICAgICAgICBvcHRpb24gaXMgdW5uZWNlc3NhcnksIGJlY2F1c2UgdGhlIGRlZmF1bHQgaXMgdGFrZW4KKyAgICAgICAgICAgICAgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+LiAgSWYgPFNUUk9ORz4tVDwvU1RST05HPiBpcyBzcGVjLQorICAgICAgICAgICAgICBpZmllZCwgIHRoZW4gIHRoZSBzaGVsbCB2YXJpYWJsZXMgPFNUUk9ORz5MSU5FUzwvU1RST05HPiBhbmQgPFNUUk9ORz5DT0xVTU5TPC9TVFJPTkc+CisgICAgICAgICAgICAgIHdpbGwgYmUgaWdub3JlZCxhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gIHdpbGwgIG5vdAorICAgICAgICAgICAgICBiZSBxdWVyaWVkIGZvciB0aGUgYWN0dWFsIHNjcmVlbiBzaXplLgorCisgICAgICAgPEVNPmNhcG5hbWU8L0VNPgorICAgICAgICAgICAgICBpbmRpY2F0ZXMgICB0aGUgICBjYXBhYmlsaXR5ICAgZnJvbSAgIHRoZSAgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPgorICAgICAgICAgICAgICBkYXRhYmFzZS4gIFdoZW4gPFNUUk9ORz50ZXJtY2FwPC9TVFJPTkc+IHN1cHBvcnQgaXMgY29tcGlsZWQgaW4sIHRoZQorICAgICAgICAgICAgICA8U1RST05HPnRlcm1jYXA8L1NUUk9ORz4gbmFtZSBmb3IgdGhlIGNhcGFiaWxpdHkgaXMgYWxzbyBhY2NlcHRlZC4KKworICAgICAgIDxFTT5wYXJtczwvRU0+ICBJZiAgdGhlICBjYXBhYmlsaXR5ICBpcyBhIHN0cmluZyB0aGF0IHRha2VzIHBhcmFtZS0KKyAgICAgICAgICAgICAgdGVycywgdGhlIGFyZ3VtZW50cyA8RU0+cGFybXM8L0VNPiB3aWxsIGJlIGluc3RhbnRpYXRlZCBpbnRvCisgICAgICAgICAgICAgIHRoZSBzdHJpbmcuCisKKyAgICAgICAgICAgICAgTW9zdCAgcGFyYW1ldGVycyAgYXJlIG51bWJlcnMuICBPbmx5IGEgZmV3IHRlcm1pbmZvCisgICAgICAgICAgICAgIGNhcGFiaWxpdGllcyByZXF1aXJlIHN0cmluZyBwYXJhbWV0ZXJzOyA8U1RST05HPnRwdXQ8L1NUUk9ORz4gdXNlcyBhCisgICAgICAgICAgICAgIHRhYmxlIHRvIGRlY2lkZSB3aGljaCB0byBwYXNzIGFzIHN0cmluZ3MuICBOb3JtYWxseQorICAgICAgICAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gdXNlcyA8U1RST05HPnRwYXJtPC9TVFJPTkc+ICgzeCkgdG8gcGVyZm9ybSAgdGhlICBzdWJzdGl0dXRpb24uCisgICAgICAgICAgICAgIElmIG5vIHBhcmFtZXRlcnMgYXJlIGdpdmVuIGZvciB0aGUgY2FwYWJpbGl0eSwgPFNUUk9ORz50cHV0PC9TVFJPTkc+CisgICAgICAgICAgICAgIHdyaXRlcyAgIHRoZSAgIHN0cmluZyAgIHdpdGhvdXQgICBwZXJmb3JtaW5nICAgIHRoZQorICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uCisKKyAgICAgICA8U1RST05HPi1TPC9TVFJPTkc+ICAgICBhbGxvd3MgIG1vcmUgIHRoYW4gb25lIGNhcGFiaWxpdHkgcGVyIGludm9jYXRpb24gb2YKKyAgICAgICAgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+LiAgVGhlIGNhcGFiaWxpdGllcyBtdXN0IGJlIHBhc3NlZCB0byA8U1RST05HPnRwdXQ8L1NUUk9ORz4gZnJvbQorICAgICAgICAgICAgICB0aGUgc3RhbmRhcmQgaW5wdXQgaW5zdGVhZCBvZiBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgICAgKHNlZSBleGFtcGxlKS4gIE9ubHkgb25lICA8RU0+Y2FwbmFtZTwvRU0+ICBpcyAgYWxsb3dlZCAgcGVyCisgICAgICAgICAgICAgIGxpbmUuICAgVGhlICA8U1RST05HPi1TPC9TVFJPTkc+IG9wdGlvbiBjaGFuZ2VzIHRoZSBtZWFuaW5nIG9mIHRoZSA8U1RST05HPjA8L1NUUk9ORz4KKyAgICAgICAgICAgICAgYW5kIDxTVFJPTkc+MTwvU1RST05HPiBib29sZWFuIGFuZCBzdHJpbmcgZXhpdCBjb2RlcyAoc2VlICB0aGUgIEVYSVQKKyAgICAgICAgICAgICAgQ09ERVMgc2VjdGlvbikuCisKKyAgICAgICAgICAgICAgQWdhaW4sIDxTVFJPTkc+dHB1dDwvU1RST05HPiB1c2VzIGEgdGFibGUgYW5kIHRoZSBwcmVzZW5jZSBvZiBwYXJhbS0KKyAgICAgICAgICAgICAgZXRlcnMgaW4gaXRzIGlucHV0IHRvIGRlY2lkZSB3aGV0aGVyIHRvICB1c2UgIDxTVFJPTkc+dHBhcm08L1NUUk9ORz4KKyAgICAgICAgICAgICAgKDN4KSwgYW5kIGhvdyB0byBpbnRlcnByZXQgdGhlIHBhcmFtZXRlcnMuCisKKyAgICAgICA8U1RST05HPi1WPC9TVFJPTkc+ICAgICByZXBvcnRzICB0aGUgIHZlcnNpb24gIG9mIG5jdXJzZXMgd2hpY2ggd2FzIHVzZWQgaW4KKyAgICAgICAgICAgICAgdGhpcyBwcm9ncmFtLCBhbmQgZXhpdHMuCisKKyAgICAgICA8U1RST05HPmluaXQ8L1NUUk9ORz4gICBJZiB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZSBpcyBwcmVzZW50ICBhbmQgIGFuICBlbnRyeQorICAgICAgICAgICAgICBmb3IgdGhlIHVzZXIncyB0ZXJtaW5hbCBleGlzdHMgKHNlZSA8U1RST05HPi1UPC9TVFJPTkc+PEVNPnR5cGU8L0VNPiwgYWJvdmUpLAorICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHdpbGwgb2NjdXI6CisKKyAgICAgICAgICAgICAgKDEpICAgIGlmIHByZXNlbnQsICB0aGUgIHRlcm1pbmFsJ3MgIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzICB3aWxsICBiZSAgb3V0cHV0IGFzIGRldGFpbGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPiBzZWN0aW9uIG9uIDxFTT5UYWJzPC9FTT4gPEVNPmFuZDwvRU0+ICA8RU0+SW5pdGlhbGl6YS08L0VNPgorICAgICAgICAgICAgICAgICAgICAgPEVNPnRpb248L0VNPiwKKworICAgICAgICAgICAgICAoMikgICAgYW55ICBkZWxheXMgKGUuZy4sIG5ld2xpbmUpIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIGVudHJ5IHdpbGwgYmUgc2V0IGluIHRoZSB0dHkgZHJpdmVyLAorCisgICAgICAgICAgICAgICgzKSAgICB0YWJzIGV4cGFuc2lvbiB3aWxsICBiZSAgdHVybmVkICBvbiAgb3IgIG9mZgorICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgIGFuZAorCisgICAgICAgICAgICAgICg0KSAgICBpZiB0YWJzIGFyZSBub3QgZXhwYW5kZWQsIHN0YW5kYXJkIHRhYnMgd2lsbAorICAgICAgICAgICAgICAgICAgICAgYmUgc2V0IChldmVyeSA4IHNwYWNlcykuCisKKyAgICAgICAgICAgICAgSWYgYW4gZW50cnkgZG9lcyBub3QgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gbmVlZGVkCisgICAgICAgICAgICAgIGZvciBhbnkgb2YgdGhlIGZvdXIgYWJvdmUgYWN0aXZpdGllcywgdGhhdCBhY3Rpdml0eQorICAgICAgICAgICAgICB3aWxsIHNpbGVudGx5IGJlIHNraXBwZWQuCisKKyAgICAgICA8U1RST05HPnJlc2V0PC9TVFJPTkc+ICBJbnN0ZWFkICBvZiBwdXR0aW5nIG91dCBpbml0aWFsaXphdGlvbiBzdHJpbmdzLCB0aGUKKyAgICAgICAgICAgICAgdGVybWluYWwncyByZXNldCBzdHJpbmdzIHdpbGwgYmUgb3V0cHV0IGlmICBwcmVzZW50CisgICAgICAgICAgICAgICg8U1RST05HPnJzMTwvU1RST05HPiwgIDxTVFJPTkc+cnMyPC9TVFJPTkc+LCA8U1RST05HPnJzMzwvU1RST05HPiwgPFNUUk9ORz5yZjwvU1RST05HPikuICBJZiB0aGUgcmVzZXQgc3RyaW5ncyBhcmUgbm90CisgICAgICAgICAgICAgIHByZXNlbnQsIGJ1dCBpbml0aWFsaXphdGlvbiBzdHJpbmdzIGFyZSwgIHRoZSAgaW5pLQorICAgICAgICAgICAgICB0aWFsaXphdGlvbiAgc3RyaW5ncyAgd2lsbCAgYmUgIG91dHB1dC4gIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAgPFNUUk9ORz5yZXNldDwvU1RST05HPiBhY3RzIGlkZW50aWNhbGx5IHRvIDxTVFJPTkc+aW5pdDwvU1RST05HPi4KKworICAgICAgIDxTVFJPTkc+bG9uZ25hbWU8L1NUUk9ORz4KKyAgICAgICAgICAgICAgSWYgdGhlIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gZGF0YWJhc2UgaXMgcHJlc2VudCAgYW5kICBhbiAgZW50cnkKKyAgICAgICAgICAgICAgZm9yICB0aGUgdXNlcidzIHRlcm1pbmFsIGV4aXN0cyAoc2VlIDxTVFJPTkc+LVQ8L1NUUk9ORz48RU0+dHlwZTwvRU0+IGFib3ZlKSwKKyAgICAgICAgICAgICAgdGhlbiB0aGUgbG9uZyBuYW1lIG9mIHRoZSB0ZXJtaW5hbCB3aWxsIGJlIHB1dCBvdXQuCisgICAgICAgICAgICAgIFRoZSBsb25nIG5hbWUgaXMgdGhlIGxhc3QgbmFtZSBpbiB0aGUgZmlyc3QgbGluZSBvZgorICAgICAgICAgICAgICB0aGUgdGVybWluYWwncyBkZXNjcmlwdGlvbiBpbiB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZQorICAgICAgICAgICAgICBbc2VlIDxTVFJPTkc+PEEgSFJFRj0idGVybS41Lmh0bWwiPnRlcm0oNSk8L0E+PC9TVFJPTkc+XS4KKworICAgICAgIElmICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gIGlzICBpbnZva2VkICBieSBhIGxpbmsgbmFtZWQgPFNUUk9ORz5yZXNldDwvU1RST05HPiwgdGhpcyBoYXMgdGhlCisgICAgICAgc2FtZSBlZmZlY3QgYXMgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4uICBTZWUgPFNUUk9ORz50c2V0PC9TVFJPTkc+IGZvciBjb21wYXJpc29uLCB3aGljaAorICAgICAgIGhhcyBzaW1pbGFyIGJlaGF2aW9yLgorCisKKzwvUFJFPgorPEgyPkVYQU1QTEVTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPmluaXQ8L1NUUk9ORz4KKyAgICAgICAgICAgIEluaXRpYWxpemUgdGhlIHRlcm1pbmFsIGFjY29yZGluZyB0byB0aGUgdHlwZSBvZiB0ZXItCisgICAgICAgICAgICBtaW5hbCBpbiB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSA8U1RST05HPlRFUk08L1NUUk9ORz4uICBUaGlzICBjb20tCisgICAgICAgICAgICBtYW5kICBzaG91bGQgYmUgaW5jbHVkZWQgaW4gZXZlcnlvbmUncyAucHJvZmlsZSBhZnRlcgorICAgICAgICAgICAgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+IGhhcyBiZWVuIGV4cG9ydGVkLCBhcworICAgICAgICAgICAgaWxsdXN0cmF0ZWQgb24gdGhlIDxTVFJPTkc+PEEgSFJFRj0icHJvZmlsZS41Lmh0bWwiPnByb2ZpbGUoNSk8L0E+PC9TVFJPTkc+IG1hbnVhbCBwYWdlLgorCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+LVQ1NjIwPC9TVFJPTkc+IDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4KKyAgICAgICAgICAgIFJlc2V0ICBhbiAgQVQmYW1wO1QgNTYyMCB0ZXJtaW5hbCwgb3ZlcnJpZGluZyB0aGUgdHlwZSBvZgorICAgICAgICAgICAgdGVybWluYWwgaW4gdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+LgorCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+Y3VwPC9TVFJPTkc+IDxTVFJPTkc+MDwvU1RST05HPiA8U1RST05HPjA8L1NUUk9ORz4KKyAgICAgICAgICAgIFNlbmQgdGhlIHNlcXVlbmNlIHRvIG1vdmUgdGhlIGN1cnNvciB0byByb3cgPFNUUk9ORz4wPC9TVFJPTkc+LCBjb2x1bW4KKyAgICAgICAgICAgIDxTVFJPTkc+MDwvU1RST05HPiAodGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JlZW4sIHVzdWFsbHkga25vd24KKyAgICAgICAgICAgIGFzIHRoZSAiaG9tZSIgY3Vyc29yIHBvc2l0aW9uKS4KKworICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPmNsZWFyPC9TVFJPTkc+CisgICAgICAgICAgICBFY2hvIHRoZSBjbGVhci1zY3JlZW4gc2VxdWVuY2UgZm9yIHRoZSBjdXJyZW50IHRlcm1pLQorICAgICAgICAgICAgbmFsLgorCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+Y29sczwvU1RST05HPgorICAgICAgICAgICAgUHJpbnQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciB0aGUgY3VycmVudCB0ZXJtaW5hbC4KKworICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPi1UNDUwPC9TVFJPTkc+IDxTVFJPTkc+Y29sczwvU1RST05HPgorICAgICAgICAgICAgUHJpbnQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciB0aGUgNDUwIHRlcm1pbmFsLgorCisgICAgICAgPFNUUk9ORz5ib2xkPWB0cHV0PC9TVFJPTkc+IDxTVFJPTkc+c21zb2A8L1NUUk9ORz4gPFNUUk9ORz5vZmZib2xkPWB0cHV0PC9TVFJPTkc+IDxTVFJPTkc+cm1zb2A8L1NUUk9ORz4KKyAgICAgICAgICAgIFNldCB0aGUgc2hlbGwgdmFyaWFibGVzIDxTVFJPTkc+Ym9sZDwvU1RST05HPiwgdG8gYmVnaW4gc3RhbmQtb3V0IG1vZGUKKyAgICAgICAgICAgIHNlcXVlbmNlLCBhbmQgPFNUUk9ORz5vZmZib2xkPC9TVFJPTkc+LCB0byBlbmQgc3RhbmRvdXQgbW9kZSBzZXF1ZW5jZSwKKyAgICAgICAgICAgIGZvciB0aGUgY3VycmVudCB0ZXJtaW5hbC4gIFRoaXMgbWlnaHQgYmUgZm9sbG93ZWQgIGJ5CisgICAgICAgICAgICBhICBwcm9tcHQ6ICA8U1RST05HPmVjaG88L1NUUk9ORz4gIDxTVFJPTkc+IiR7Ym9sZH1QbGVhc2U8L1NUUk9ORz4gIDxTVFJPTkc+dHlwZTwvU1RST05HPiAgPFNUUk9ORz5pbjwvU1RST05HPiA8U1RST05HPnlvdXI8L1NUUk9ORz4gPFNUUk9ORz5uYW1lOjwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz4ke29mZmJvbGR9XGMiPC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz5oYzwvU1RST05HPgorICAgICAgICAgICAgU2V0IGV4aXQgY29kZSB0byBpbmRpY2F0ZSBpZiB0aGUgY3VycmVudCB0ZXJtaW5hbCAgaXMKKyAgICAgICAgICAgIGEgaGFyZCBjb3B5IHRlcm1pbmFsLgorCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+Y3VwPC9TVFJPTkc+IDxTVFJPTkc+MjM8L1NUUk9ORz4gPFNUUk9ORz40PC9TVFJPTkc+CisgICAgICAgICAgICBTZW5kICB0aGUgc2VxdWVuY2UgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIHJvdyAyMywgY29sLQorICAgICAgICAgICAgdW1uIDQuCisKKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gPFNUUk9ORz5jdXA8L1NUUk9ORz4KKyAgICAgICAgICAgIFNlbmQgdGhlIHRlcm1pbmZvIHN0cmluZyBmb3IgY3Vyc29yLW1vdmVtZW50LCB3aXRoIG5vCisgICAgICAgICAgICBwYXJhbWV0ZXJzIHN1YnN0aXR1dGVkLgorCisgICAgICAgPFNUUk9ORz50cHV0PC9TVFJPTkc+IDxTVFJPTkc+bG9uZ25hbWU8L1NUUk9ORz4KKyAgICAgICAgICAgIFByaW50ICB0aGUgIGxvbmcgIG5hbWUgZnJvbSB0aGUgPFNUUk9ORz50ZXJtaW5mbzwvU1RST05HPiBkYXRhYmFzZSBmb3IKKyAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRlcm1pbmFsIHNwZWNpZmllZCBpbiAgdGhlICBlbnZpcm9ubWVudGFsCisgICAgICAgICAgICB2YXJpYWJsZSA8U1RST05HPlRFUk08L1NUUk9ORz4uCisKKyAgICAgICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPi1TPC9TVFJPTkc+IDxTVFJPTkc+Jmx0OyZsdDshPC9TVFJPTkc+CisgICAgICAgICAgICA8U1RST05HPiZndDs8L1NUUk9ORz4gPFNUUk9ORz5jbGVhcjwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz4mZ3Q7PC9TVFJPTkc+IDxTVFJPTkc+Y3VwPC9TVFJPTkc+IDxTVFJPTkc+MTA8L1NUUk9ORz4gPFNUUk9ORz4xMDwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz4mZ3Q7PC9TVFJPTkc+IDxTVFJPTkc+Ym9sZDwvU1RST05HPgorICAgICAgICAgICAgPFNUUk9ORz4mZ3Q7PC9TVFJPTkc+IDxTVFJPTkc+ITwvU1RST05HPgorCisgICAgICAgICAgICBUaGlzICBleGFtcGxlIHNob3dzIDxTVFJPTkc+dHB1dDwvU1RST05HPiBwcm9jZXNzaW5nIHNldmVyYWwgY2FwYWJpbGktCisgICAgICAgICAgICB0aWVzIGluIG9uZSBpbnZvY2F0aW9uLiAgSXQgY2xlYXJzIHRoZSBzY3JlZW4sICBtb3ZlcworICAgICAgICAgICAgdGhlICBjdXJzb3IgIHRvICBwb3NpdGlvbiAgMTAsICAxMCAgYW5kIHR1cm5zIG9uIGJvbGQKKyAgICAgICAgICAgIChleHRyYSBicmlnaHQpIG1vZGUuICBUaGUgbGlzdCBpcyAgdGVybWluYXRlZCAgYnkgIGFuCisgICAgICAgICAgICBleGNsYW1hdGlvbiBtYXJrICg8U1RST05HPiE8L1NUUk9ORz4pIG9uIGEgbGluZSBieSBpdHNlbGYuCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz4vdXNyL3NoYXJlL3Rlcm1pbmZvPC9TVFJPTkc+CisgICAgICAgICAgICAgIGNvbXBpbGVkIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGRhdGFiYXNlCisKKyAgICAgICA8U1RST05HPi91c3Ivc2hhcmUvdGFic2V0Lyo8L1NUUk9ORz4KKyAgICAgICAgICAgICAgdGFiIHNldHRpbmdzIGZvciBzb21lIHRlcm1pbmFscywgaW4gYSBmb3JtYXQgYXBwcm8tCisgICAgICAgICAgICAgIHByaWF0ZSAgdG8gIGJlICBvdXRwdXQgIHRvICB0aGUgIHRlcm1pbmFsICAgKGVzY2FwZQorICAgICAgICAgICAgICBzZXF1ZW5jZXMgIHRoYXQgIHNldCAgbWFyZ2lucyAgYW5kICB0YWJzKTsgZm9yIG1vcmUKKyAgICAgICAgICAgICAgaW5mb3JtYXRpb24sIHNlZSB0aGUgIlRhYnMgYW5kIEluaXRpYWxpemF0aW9uIiBzZWMtCisgICAgICAgICAgICAgIHRpb24gb2YgPFNUUk9ORz48QSBIUkVGPSJ0ZXJtaW5mby41Lmh0bWwiPnRlcm1pbmZvKDUpPC9BPjwvU1RST05HPgorCisKKzwvUFJFPgorPEgyPkVYSVQgQ09ERVM8L0gyPjxQUkU+CisgICAgICAgSWYgdGhlIDxTVFJPTkc+LVM8L1NUUk9ORz4gb3B0aW9uIGlzIHVzZWQsIDxTVFJPTkc+dHB1dDwvU1RST05HPiBjaGVja3MgZm9yIGVycm9ycyBmcm9tIGVhY2gKKyAgICAgICBsaW5lLCBhbmQgaWYgYW55IGVycm9ycyBhcmUgZm91bmQsIHdpbGwgc2V0IHRoZSBleGl0ICBjb2RlCisgICAgICAgdG8gIDQgIHBsdXMgdGhlIG51bWJlciBvZiBsaW5lcyB3aXRoIGVycm9ycy4gIElmIG5vIGVycm9ycworICAgICAgIGFyZSBmb3VuZCwgdGhlIGV4aXQgY29kZSBpcyA8U1RST05HPjA8L1NUUk9ORz4uICAgTm8gIGluZGljYXRpb24gIG9mICB3aGljaAorICAgICAgIGxpbmUgZmFpbGVkIGNhbiBiZSBnaXZlbiBzbyBleGl0IGNvZGUgPFNUUk9ORz4xPC9TVFJPTkc+IHdpbGwgbmV2ZXIgYXBwZWFyLgorICAgICAgIEV4aXQgY29kZXMgPFNUUk9ORz4yPC9TVFJPTkc+LCA8U1RST05HPjM8L1NUUk9ORz4sIGFuZCA8U1RST05HPjQ8L1NUUk9ORz4gcmV0YWluIHRoZWlyIHVzdWFsICBpbnRlcnByZXRhdGlvbi4KKyAgICAgICBJZiB0aGUgPFNUUk9ORz4tUzwvU1RST05HPiBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSBleGl0IGNvZGUgZGVwZW5kcyBvbiB0aGUKKyAgICAgICB0eXBlIG9mIDxFTT5jYXBuYW1lPC9FTT46CisKKyAgICAgICAgICAgIDxFTT5ib29sZWFuPC9FTT4KKyAgICAgICAgICAgICAgICAgICBhIHZhbHVlIG9mIDxTVFJPTkc+MDwvU1RST05HPiBpcyBzZXQgZm9yIFRSVUUgYW5kIDxTVFJPTkc+MTwvU1RST05HPiBmb3IgIEZBTFNFLgorCisgICAgICAgICAgICA8RU0+c3RyaW5nPC9FTT4gYSAgdmFsdWUgb2YgPFNUUk9ORz4wPC9TVFJPTkc+IGlzIHNldCBpZiB0aGUgPEVNPmNhcG5hbWU8L0VNPiBpcyBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdGVybWluYWwgPEVNPnR5cGU8L0VNPiAodGhlIHZhbHVlICBvZiAgPEVNPmNhcG5hbWU8L0VNPgorICAgICAgICAgICAgICAgICAgIGlzICByZXR1cm5lZCBvbiBzdGFuZGFyZCBvdXRwdXQpOyBhIHZhbHVlIG9mIDxTVFJPTkc+MTwvU1RST05HPgorICAgICAgICAgICAgICAgICAgIGlzIHNldCBpZiA8RU0+Y2FwbmFtZTwvRU0+IGlzIG5vdCBkZWZpbmVkIGZvciB0aGlzIHRlci0KKyAgICAgICAgICAgICAgICAgICBtaW5hbCAgPEVNPnR5cGU8L0VNPiAgKG5vdGhpbmcgIGlzICB3cml0dGVuIHRvIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgICAgb3V0cHV0KS4KKworICAgICAgICAgICAgPEVNPmludGVnZXI8L0VNPgorICAgICAgICAgICAgICAgICAgIGEgdmFsdWUgb2YgPFNUUk9ORz4wPC9TVFJPTkc+IGlzIGFsd2F5cyAgc2V0LCAgd2hldGhlciAgb3IgIG5vdAorICAgICAgICAgICAgICAgICAgIDxFTT5jYXBuYW1lPC9FTT4gaXMgZGVmaW5lZCBmb3IgdGhpcyB0ZXJtaW5hbCA8RU0+dHlwZTwvRU0+LiAgVG8KKyAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgaWYgPEVNPmNhcG5hbWU8L0VNPiBpcyBkZWZpbmVkIGZvciB0aGlzICB0ZXItCisgICAgICAgICAgICAgICAgICAgbWluYWwgPEVNPnR5cGU8L0VNPiwgdGhlIHVzZXIgbXVzdCB0ZXN0IHRoZSB2YWx1ZSB3cml0LQorICAgICAgICAgICAgICAgICAgIHRlbiB0byBzdGFuZGFyZCBvdXRwdXQuICBBIHZhbHVlIG9mICA8U1RST05HPi0xPC9TVFJPTkc+ICBtZWFucworICAgICAgICAgICAgICAgICAgIHRoYXQgIDxFTT5jYXBuYW1lPC9FTT4gaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgdGVybWluYWwKKyAgICAgICAgICAgICAgICAgICA8RU0+dHlwZTwvRU0+LgorCisgICAgICAgICAgICA8RU0+b3RoZXI8L0VNPiAgPFNUUk9ORz5yZXNldDwvU1RST05HPiBvciA8U1RST05HPmluaXQ8L1NUUk9ORz4gbWF5IGZhaWwgdG8gZmluZCAgdGhlaXIgIHJlc3BlYy0KKyAgICAgICAgICAgICAgICAgICB0aXZlICBmaWxlcy4gICBJbiAgdGhhdCBjYXNlLCB0aGUgZXhpdCBjb2RlIGlzCisgICAgICAgICAgICAgICAgICAgc2V0IHRvIDQgKyA8U1RST05HPmVycm5vPC9TVFJPTkc+LgorCisgICAgICAgQW55IG90aGVyIGV4aXQgY29kZSBpbmRpY2F0ZXMgYW4gZXJyb3I7IHNlZSAgdGhlICBESUFHTk9TLQorICAgICAgIFRJQ1Mgc2VjdGlvbi4KKworCis8L1BSRT4KKzxIMj5ESUFHTk9TVElDUzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPnRwdXQ8L1NUUk9ORz4gcHJpbnRzIHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZXMgYW5kIHNldHMgdGhlIGNvci0KKyAgICAgICByZXNwb25kaW5nIGV4aXQgY29kZXMuCisKKworICAgICAgIGV4aXQgY29kZSAgIGVycm9yIG1lc3NhZ2UKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICA8U1RST05HPjA8L1NUUk9ORz4gICAgICAgICAgICg8RU0+Y2FwbmFtZTwvRU0+IGlzIGEgbnVtZXJpYyB2YXJpYWJsZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgIGluCisgICAgICAgICAgICAgICAgICAgdGhlICA8U1RST05HPjxBIEhSRUY9InRlcm1pbmZvLjUuaHRtbCI+dGVybWluZm8oNSk8L0E+PC9TVFJPTkc+ICBkYXRhYmFzZSAgZm9yIHRoaXMgdGVybWluYWwgdHlwZSwgZS5nLgorICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPi1UNDUwPC9TVFJPTkc+IDxTVFJPTkc+bGluZXM8L1NUUk9ORz4gYW5kIDxTVFJPTkc+dHB1dDwvU1RST05HPiA8U1RST05HPi1UMjYyMTwvU1RST05HPiA8U1RST05HPnhtYzwvU1RST05HPikKKyAgICAgICA8U1RST05HPjE8L1NUUk9ORz4gICAgICAgICAgIG5vIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCwgc2VlIHRoZSA8U1RST05HPkVYSVQ8L1NUUk9ORz4gPFNUUk9ORz5DT0RFUzwvU1RST05HPiBzZWN0aW9uLgorICAgICAgIDxTVFJPTkc+MjwvU1RST05HPiAgICAgICAgICAgdXNhZ2UgZXJyb3IKKyAgICAgICA8U1RST05HPjM8L1NUUk9ORz4gICAgICAgICAgIHVua25vd24gdGVybWluYWwgPEVNPnR5cGU8L0VNPiBvciBubyA8U1RST05HPnRlcm1pbmZvPC9TVFJPTkc+IGRhdGFiYXNlCisgICAgICAgPFNUUk9ORz40PC9TVFJPTkc+ICAgICAgICAgICB1bmtub3duIDxTVFJPTkc+dGVybWluZm88L1NUUk9ORz4gY2FwYWJpbGl0eSA8RU0+Y2FwbmFtZTwvRU0+CisgICAgICAgPFNUUk9ORz4mZ3Q7NDwvU1RST05HPiAgICAgICAgICBlcnJvciBvY2N1cnJlZCBpbiAtUworICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKzwvUFJFPgorPEgyPlBPUlRBQklMSVRZPC9IMj48UFJFPgorICAgICAgIFRoZSA8U1RST05HPmxvbmduYW1lPC9TVFJPTkc+IGFuZCA8U1RST05HPi1TPC9TVFJPTkc+IG9wdGlvbnMsIGFuZCAgdGhlICBwYXJhbWV0ZXItc3Vic3RpdHUtCisgICAgICAgdGlvbiAgZmVhdHVyZXMgIHVzZWQgaW4gdGhlIDxTVFJPTkc+Y3VwPC9TVFJPTkc+IGV4YW1wbGUsIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgaW4gQlNEIGN1cnNlcyBvciBpbiBBVCZhbXA7VC9VU0wgY3Vyc2VzIGJlZm9yZSBTVnI0LgorCisgICAgICAgWC9PcGVuIGRvY3VtZW50cyBvbmx5IHRoZSBvcGVyYW5kcyAgZm9yICA8U1RST05HPmNsZWFyPC9TVFJPTkc+LCAgPFNUUk9ORz5pbml0PC9TVFJPTkc+ICBhbmQKKyAgICAgICA8U1RST05HPnJlc2V0PC9TVFJPTkc+LiAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIDxTVFJPTkc+Y2xlYXI8L1NUUk9ORz4gaXMgcGFydCBvZiB0aGUgPEVNPmNhcC08L0VNPgorICAgICAgIDxFTT5uYW1lPC9FTT4gc3VwcG9ydC4gIE90aGVyIGltcGxlbWVudGF0aW9ucyBvZiA8U1RST05HPnRwdXQ8L1NUUk9ORz4gb24gU1ZyNC1iYXNlZAorICAgICAgIHN5c3RlbXMgc3VjaCBhcyBTb2xhcmlzLCBJUklYNjQgYW5kIEhQVVggYXMgd2VsbCBhcyBvdGhlcnMKKyAgICAgICBzdWNoICBhcyAgQUlYICBhbmQgIFRydTY0ICBwcm92aWRlICBzdXBwb3J0ICBmb3IgICA8RU0+Y2FwbmFtZTwvRU0+CisgICAgICAgb3BlcmFuZHMuICBBIGZldyBwbGF0Zm9ybXMgc3VjaCBhcyBGcmVlQlNEIGFuZCBOZXRCU0QgcmVjLQorICAgICAgIG9nbml6ZSB0ZXJtY2FwIG5hbWVzIHJhdGhlciB0aGFuIHRlcm1pbmZvIGNhcGFiaWxpdHkgbmFtZXMKKyAgICAgICBpbiB0aGVpciByZXNwZWN0aXZlIDxTVFJPTkc+dHB1dDwvU1RST05HPiBjb21tYW5kcy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImNsZWFyLjEuaHRtbCI+Y2xlYXIoMSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InN0dHkuMS5odG1sIj5zdHR5KDEpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJ0YWJzLjEuaHRtbCI+dGFicygxKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0idGVybWluZm8uNS5odG1sIj50ZXJtaW5mbyg1KTwvQT48L1NUUk9ORz4uCisKKyAgICAgICBUaGlzIGRlc2NyaWJlcyA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4gdmVyc2lvbiA1LjYgKHBhdGNoIDIwMDgxMDExKS4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRwdXQuMS5odG1sIj50cHV0KDEpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdHNldC4xLmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vdHNldC4xLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxZmQwYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi90c2V0LjEuaHRtbApAQCAtMCwwICsxLDMzMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIj4KKzwhLS0gCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQElkOiB0c2V0LjEsdiAxLjE5IDIwMDYvMTIvMjQgMTU6MDA6MzAgdG9tIEV4cCBACistLT4KKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+dHNldCAxPC9USVRMRT4KKzxsaW5rIHJldj1tYWRlIGhyZWY9Im1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+Cis8SDE+dHNldCAxPC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJ0c2V0LjEuaHRtbCI+dHNldCgxKTwvQT48L1NUUk9ORz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9InRzZXQuMS5odG1sIj50c2V0KDEpPC9BPjwvU1RST05HPgorCisKKworCis8L1BSRT4KKzxIMj5OQU1FPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+dHNldDwvU1RST05HPiwgPFNUUk9ORz5yZXNldDwvU1RST05HPiAtIHRlcm1pbmFsIGluaXRpYWxpemF0aW9uCisKKworPC9QUkU+Cis8SDI+U1lOT1BTSVM8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz50c2V0PC9TVFJPTkc+ICBbPFNUUk9ORz4tSVFWY3Fyc3c8L1NUUk9ORz5dIFs8U1RST05HPi08L1NUUk9ORz5dIFs8U1RST05HPi1lPC9TVFJPTkc+IDxFTT5jaDwvRU0+XSBbPFNUUk9ORz4taTwvU1RST05HPiA8RU0+Y2g8L0VNPl0gWzxTVFJPTkc+LWs8L1NUUk9ORz4gPEVNPmNoPC9FTT5dIFs8U1RST05HPi1tPC9TVFJPTkc+IDxFTT5tYXBwaW5nPC9FTT5dCisgICAgICAgWzxFTT50ZXJtaW5hbDwvRU0+XQorICAgICAgIDxTVFJPTkc+cmVzZXQ8L1NUUk9ORz4gWzxTVFJPTkc+LUlRVmNxcnN3PC9TVFJPTkc+XSBbPFNUUk9ORz4tPC9TVFJPTkc+XSBbPFNUUk9ORz4tZTwvU1RST05HPiA8RU0+Y2g8L0VNPl0gWzxTVFJPTkc+LWk8L1NUUk9ORz4gPEVNPmNoPC9FTT5dIFs8U1RST05HPi1rPC9TVFJPTkc+IDxFTT5jaDwvRU0+XSBbPFNUUk9ORz4tbTwvU1RST05HPiA8RU0+bWFwcGluZzwvRU0+XQorICAgICAgIFs8RU0+dGVybWluYWw8L0VNPl0KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPlRzZXQ8L1NUUk9ORz4gIGluaXRpYWxpemVzICB0ZXJtaW5hbHMuICAgPFNUUk9ORz5Uc2V0PC9TVFJPTkc+ICBmaXJzdCBkZXRlcm1pbmVzIHRoZQorICAgICAgIHR5cGUgb2YgdGVybWluYWwgdGhhdCB5b3UgYXJlIHVzaW5nLiAgIFRoaXMgIGRldGVybWluYXRpb24KKyAgICAgICBpcyBkb25lIGFzIGZvbGxvd3MsIHVzaW5nIHRoZSBmaXJzdCB0ZXJtaW5hbCB0eXBlIGZvdW5kLgorCisgICAgICAgMS4gVGhlIDxTVFJPTkc+dGVybWluYWw8L1NUUk9ORz4gYXJndW1lbnQgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgICAgICAyLiBUaGUgdmFsdWUgb2YgdGhlIDxTVFJPTkc+VEVSTTwvU1RST05HPiBlbnZpcm9ubWVudGFsIHZhcmlhYmxlLgorCisgICAgICAgMy4gIChCU0QgIHN5c3RlbXMgb25seS4pIFRoZSB0ZXJtaW5hbCB0eXBlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgZGV2aWNlIGluICB0aGUgIDxFTT4vZXRjL3R0eXM8L0VNPiAgZmlsZS4KKyAgICAgICAoT24gTGludXggYW5kIFN5c3RlbS1WLWxpa2UgVU5JWGVzLCA8RU0+Z2V0dHk8L0VNPiBkb2VzIHRoaXMgam9iIGJ5CisgICAgICAgc2V0dGluZyA8U1RST05HPlRFUk08L1NUUk9ORz4gIGFjY29yZGluZyAgdG8gIHRoZSAgdHlwZSAgcGFzc2VkICB0byAgaXQgIGJ5CisgICAgICAgPEVNPi9ldGMvaW5pdHRhYjwvRU0+LikKKworICAgICAgIDQuIFRoZSBkZWZhdWx0IHRlcm1pbmFsIHR5cGUsIGBgdW5rbm93bicnLgorCisgICAgICAgSWYgIHRoZSAgdGVybWluYWwgIHR5cGUgIHdhcyBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLQorICAgICAgIGxpbmUsIHRoZSA8U1RST05HPi1tPC9TVFJPTkc+IG9wdGlvbiBtYXBwaW5ncyBhcmUgIHRoZW4gIGFwcGxpZWQgIChzZWUgIHRoZQorICAgICAgIHNlY3Rpb24gIDxTVFJPTkc+VEVSTUlOQUw8L1NUUk9ORz4gIDxTVFJPTkc+VFlQRTwvU1RST05HPiAgPFNUUk9ORz5NQVBQSU5HPC9TVFJPTkc+ICBmb3IgIG1vcmUgIGluZm9ybWF0aW9uKS4KKyAgICAgICBUaGVuLCBpZiB0aGUgdGVybWluYWwgdHlwZSBiZWdpbnMgIHdpdGggIGEgIHF1ZXN0aW9uICBtYXJrCisgICAgICAgKGBgPycnKSwgdGhlIHVzZXIgaXMgcHJvbXB0ZWQgZm9yIGNvbmZpcm1hdGlvbiBvZiB0aGUgdGVyLQorICAgICAgIG1pbmFsIHR5cGUuICBBbiBlbXB0eSAgcmVzcG9uc2UgIGNvbmZpcm1zICB0aGUgIHR5cGUsICBvciwKKyAgICAgICBhbm90aGVyICB0eXBlICBjYW4gYmUgZW50ZXJlZCB0byBzcGVjaWZ5IGEgbmV3IHR5cGUuICBPbmNlCisgICAgICAgdGhlIHRlcm1pbmFsIHR5cGUgaGFzIGJlZW4gZGV0ZXJtaW5lZCwgdGhlIHRlcm1pbmZvICBlbnRyeQorICAgICAgIGZvciAgdGhlICB0ZXJtaW5hbCAgaXMgcmV0cmlldmVkLiAgSWYgbm8gdGVybWluZm8gZW50cnkgaXMKKyAgICAgICBmb3VuZCBmb3IgdGhlIHR5cGUsIHRoZSB1c2VyIGlzIHByb21wdGVkIGZvciBhbm90aGVyICB0ZXItCisgICAgICAgbWluYWwgdHlwZS4KKworICAgICAgIE9uY2UgIHRoZSAgdGVybWluZm8gIGVudHJ5ICBpcyByZXRyaWV2ZWQsIHRoZSB3aW5kb3cgc2l6ZSwKKyAgICAgICBiYWNrc3BhY2UsIGludGVycnVwdCBhbmQgbGluZSBraWxsIGNoYXJhY3RlcnMgKGFtb25nICBtYW55CisgICAgICAgb3RoZXIgdGhpbmdzKSBhcmUgc2V0IGFuZCB0aGUgdGVybWluYWwgYW5kIHRhYiBpbml0aWFsaXphLQorICAgICAgIHRpb24gc3RyaW5ncyAgYXJlICBzZW50ICB0byAgdGhlICBzdGFuZGFyZCAgZXJyb3IgIG91dHB1dC4KKyAgICAgICBGaW5hbGx5LCAgaWYgdGhlIGVyYXNlLCBpbnRlcnJ1cHQgYW5kIGxpbmUga2lsbCBjaGFyYWN0ZXJzCisgICAgICAgaGF2ZSBjaGFuZ2VkLCBvciBhcmUgbm90ICBzZXQgIHRvICB0aGVpciAgZGVmYXVsdCAgdmFsdWVzLAorICAgICAgIHRoZWlyICB2YWx1ZXMgIGFyZSBkaXNwbGF5ZWQgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dC4KKyAgICAgICBVc2UgdGhlIDxTVFJPTkc+LWM8L1NUUk9ORz4gb3IgPFNUUk9ORz4tdzwvU1RST05HPiBvcHRpb24gdG8gc2VsZWN0IG9ubHkgdGhlICB3aW5kb3cgIHNpemluZworICAgICAgIHZlcnN1cyAgdGhlICBvdGhlciAgaW5pdGlhbGl6YXRpb24uICAgSWYgbmVpdGhlciBvcHRpb24gaXMKKyAgICAgICBnaXZlbiwgYm90aCBhcmUgYXNzdW1lZC4KKworICAgICAgIFdoZW4gaW52b2tlZCBhcyA8U1RST05HPnJlc2V0PC9TVFJPTkc+LCA8U1RST05HPnRzZXQ8L1NUUk9ORz4gc2V0cyBjb29rZWQgIGFuZCAgZWNobyAgbW9kZXMsCisgICAgICAgdHVybnMgIG9mZiBjYnJlYWsgYW5kIHJhdyBtb2RlcywgdHVybnMgb24gbmV3bGluZSB0cmFuc2xhLQorICAgICAgIHRpb24gYW5kIHJlc2V0cyBhbnkgIHVuc2V0ICBzcGVjaWFsICBjaGFyYWN0ZXJzICB0byAgdGhlaXIKKyAgICAgICBkZWZhdWx0ICB2YWx1ZXMgIGJlZm9yZSAgZG9pbmcgdGhlIHRlcm1pbmFsIGluaXRpYWxpemF0aW9uCisgICAgICAgZGVzY3JpYmVkIGFib3ZlLiAgVGhpcyBpcyAgdXNlZnVsICBhZnRlciAgYSAgcHJvZ3JhbSAgZGllcworICAgICAgIGxlYXZpbmcgIGEgIHRlcm1pbmFsICBpbiBhbiBhYm5vcm1hbCBzdGF0ZS4gIE5vdGUsIHlvdSBtYXkKKyAgICAgICBoYXZlIHRvIHR5cGUKKworICAgICAgICAgICA8U1RST05HPiZsdDtMRiZndDtyZXNldCZsdDtMRiZndDs8L1NUUk9ORz4KKworICAgICAgICh0aGUgbGluZS1mZWVkIGNoYXJhY3RlciBpcyBub3JtYWxseSBjb250cm9sLUopIHRvIGdldCB0aGUKKyAgICAgICB0ZXJtaW5hbCB0byB3b3JrLCBhcyBjYXJyaWFnZS1yZXR1cm4gbWF5IG5vIGxvbmdlciB3b3JrIGluCisgICAgICAgdGhlIGFibm9ybWFsIHN0YXRlLiAgQWxzbywgdGhlICB0ZXJtaW5hbCAgd2lsbCAgb2Z0ZW4gIG5vdAorICAgICAgIGVjaG8gdGhlIGNvbW1hbmQuCisKKyAgICAgICBUaGUgb3B0aW9ucyBhcmUgYXMgZm9sbG93czoKKworICAgICAgIDxTVFJPTkc+LWM8L1NUUk9ORz4gICBTZXQgIGNvbnRyb2wgIGNoYXJhY3RlcnMgYW5kIG1vZGVzLiAgPFNUUk9ORz4tZTwvU1RST05HPiBTZXQgdGhlIGVyYXNlCisgICAgICAgICAgICBjaGFyYWN0ZXIgdG8gPEVNPmNoPC9FTT4uCisKKyAgICAgICA8U1RST05HPi1JPC9TVFJPTkc+ICAgRG8gIG5vdCAgc2VuZCAgdGhlICB0ZXJtaW5hbCAgb3IgIHRhYiAgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgIHN0cmluZ3MgdG8gdGhlIHRlcm1pbmFsLgorCisgICAgICAgPFNUUk9ORz4taTwvU1RST05HPiAgIFNldCB0aGUgaW50ZXJydXB0IGNoYXJhY3RlciB0byA8RU0+Y2g8L0VNPi4KKworICAgICAgIDxTVFJPTkc+LWs8L1NUUk9ORz4gICBTZXQgdGhlIGxpbmUga2lsbCBjaGFyYWN0ZXIgdG8gPEVNPmNoPC9FTT4uCisKKyAgICAgICA8U1RST05HPi1tPC9TVFJPTkc+ICAgU3BlY2lmeSAgYSAgbWFwcGluZyAgZnJvbSAgYSBwb3J0IHR5cGUgdG8gYSB0ZXJtaW5hbC4KKyAgICAgICAgICAgIFNlZSB0aGUgc2VjdGlvbiA8U1RST05HPlRFUk1JTkFMPC9TVFJPTkc+IDxTVFJPTkc+VFlQRTwvU1RST05HPiA8U1RST05HPk1BUFBJTkc8L1NUUk9ORz4gZm9yIG1vcmUgaW5mb3ItCisgICAgICAgICAgICBtYXRpb24uCisKKyAgICAgICA8U1RST05HPi1RPC9TVFJPTkc+ICAgRG8gIG5vdCAgZGlzcGxheSAgYW55IHZhbHVlcyBmb3IgdGhlIGVyYXNlLCBpbnRlcnJ1cHQKKyAgICAgICAgICAgIGFuZCBsaW5lIGtpbGwgY2hhcmFjdGVycy4gIE5vcm1hbGx5IDxTVFJPTkc+dHNldDwvU1RST05HPiBkaXNwbGF5cyB0aGUKKyAgICAgICAgICAgIHZhbHVlcyAgZm9yICBjb250cm9sIGNoYXJhY3RlcnMgd2hpY2ggZGlmZmVyIGZyb20gdGhlCisgICAgICAgICAgICBzeXN0ZW0ncyBkZWZhdWx0IHZhbHVlcy4KKworICAgICAgIDxTVFJPTkc+LXE8L1NUUk9ORz4gICBUaGUgdGVybWluYWwgdHlwZSBpcyBkaXNwbGF5ZWQgdG8gdGhlICBzdGFuZGFyZCAgb3V0LQorICAgICAgICAgICAgcHV0LCAgYW5kIHRoZSB0ZXJtaW5hbCBpcyBub3QgaW5pdGlhbGl6ZWQgaW4gYW55IHdheS4KKyAgICAgICAgICAgIFRoZSBvcHRpb24gYC0nIGJ5IGl0c2VsZiBpcyBlcXVpdmFsZW50IGJ1dCBhcmNoYWljLgorCisgICAgICAgPFNUUk9ORz4tcjwvU1RST05HPiAgIFByaW50IHRoZSB0ZXJtaW5hbCB0eXBlIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQuCisKKyAgICAgICA8U1RST05HPi1zPC9TVFJPTkc+ICAgUHJpbnQgIHRoZSAgc2VxdWVuY2UgIG9mIHNoZWxsIGNvbW1hbmRzIHRvIGluaXRpYWxpemUKKyAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8U1RST05HPlRFUk08L1NUUk9ORz4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKyAgICAgICAgICAgIFNlZSAgdGhlIHNlY3Rpb24gPFNUUk9ORz5TRVRUSU5HPC9TVFJPTkc+IDxTVFJPTkc+VEhFPC9TVFJPTkc+IDxTVFJPTkc+RU5WSVJPTk1FTlQ8L1NUUk9ORz4gZm9yIGRldGFpbHMuCisKKyAgICAgICA8U1RST05HPi1WPC9TVFJPTkc+ICAgcmVwb3J0cyB0aGUgdmVyc2lvbiBvZiBuY3Vyc2VzIHdoaWNoIHdhcyB1c2VkIGluIHRoaXMKKyAgICAgICAgICAgIHByb2dyYW0sIGFuZCBleGl0cy4KKworICAgICAgIDxTVFJPTkc+LXc8L1NUUk9ORz4gICBSZXNpemUgIHRoZSAgd2luZG93ICB0byAgbWF0Y2ggIHRoZSAgc2l6ZSBkZWR1Y2VkIHZpYQorICAgICAgICAgICAgPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4uICAgTm9ybWFsbHkgIHRoaXMgIGhhcyAgbm8gIGVmZmVjdCwgIHVubGVzcworICAgICAgICAgICAgPFNUUk9ORz5zZXR1cHRlcm08L1NUUk9ORz4gaXMgbm90IGFibGUgdG8gZGV0ZWN0IHRoZSB3aW5kb3cgc2l6ZS4KKworICAgICAgIFRoZSBhcmd1bWVudHMgZm9yIHRoZSA8U1RST05HPi1lPC9TVFJPTkc+LCA8U1RST05HPi1pPC9TVFJPTkc+LCBhbmQgPFNUUk9ORz4tazwvU1RST05HPiBvcHRpb25zIG1heSBlaXRoZXIgYmUKKyAgICAgICBlbnRlcmVkIGFzIGFjdHVhbCBjaGFyYWN0ZXJzIG9yIGJ5IHVzaW5nIHRoZSAgYGhhdCcgIG5vdGEtCisgICAgICAgdGlvbiwgaS5lLiBjb250cm9sLWggbWF5IGJlIHNwZWNpZmllZCBhcyBgYF5IJycgb3IgYGBeaCcnLgorCisKKzwvUFJFPgorPEgyPlNFVFRJTkcgVEhFIEVOVklST05NRU5UPC9IMj48UFJFPgorICAgICAgIEl0IGlzIG9mdGVuIGRlc2lyYWJsZSAgdG8gIGVudGVyICB0aGUgIHRlcm1pbmFsICB0eXBlICBhbmQKKyAgICAgICBpbmZvcm1hdGlvbiAgYWJvdXQgIHRoZSAgdGVybWluYWwncyAgY2FwYWJpbGl0aWVzIGludG8gdGhlCisgICAgICAgc2hlbGwncyBlbnZpcm9ubWVudC4gIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgPFNUUk9ORz4tczwvU1RST05HPiBvcHRpb24uCisKKyAgICAgICBXaGVuIHRoZSA8U1RST05HPi1zPC9TVFJPTkc+IG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kcyB0byBlbnRlciB0aGUKKyAgICAgICBpbmZvcm1hdGlvbiAgaW50byAgdGhlICBzaGVsbCdzIGVudmlyb25tZW50IGFyZSB3cml0dGVuIHRvCisgICAgICAgdGhlIHN0YW5kYXJkIG91dHB1dC4gIElmIHRoZSA8U1RST05HPlNIRUxMPC9TVFJPTkc+IGVudmlyb25tZW50YWwgIHZhcmlhYmxlCisgICAgICAgZW5kcyBpbiBgYGNzaCcnLCB0aGUgY29tbWFuZHMgYXJlIGZvciA8U1RST05HPmNzaDwvU1RST05HPiwgb3RoZXJ3aXNlLCB0aGV5CisgICAgICAgYXJlIGZvciA8U1RST05HPnNoPC9TVFJPTkc+LiAgTm90ZSwgdGhlIDxTVFJPTkc+Y3NoPC9TVFJPTkc+ICBjb21tYW5kcyAgc2V0ICBhbmQgIHVuc2V0ICB0aGUKKyAgICAgICBzaGVsbCAgdmFyaWFibGUgIDxTVFJPTkc+bm9nbG9iPC9TVFJPTkc+LCAgbGVhdmluZyBpdCB1bnNldC4gIFRoZSBmb2xsb3dpbmcKKyAgICAgICBsaW5lIGluIHRoZSA8U1RST05HPi5sb2dpbjwvU1RST05HPiBvciA8U1RST05HPi5wcm9maWxlPC9TVFJPTkc+IGZpbGVzIHdpbGwgIGluaXRpYWxpemUgIHRoZQorICAgICAgIGVudmlyb25tZW50IGNvcnJlY3RseToKKworICAgICAgICAgICBldmFsIGB0c2V0IC1zIG9wdGlvbnMgLi4uIGAKKworCis8L1BSRT4KKzxIMj5URVJNSU5BTCBUWVBFIE1BUFBJTkc8L0gyPjxQUkU+CisgICAgICAgV2hlbiB0aGUgdGVybWluYWwgaXMgbm90IGhhcmR3aXJlZCBpbnRvIHRoZSBzeXN0ZW0gKG9yIHRoZQorICAgICAgIGN1cnJlbnQgc3lzdGVtIGluZm9ybWF0aW9uIGlzIGluY29ycmVjdCkgdGhlIHRlcm1pbmFsIHR5cGUKKyAgICAgICBkZXJpdmVkICBmcm9tIHRoZSA8RU0+L2V0Yy90dHlzPC9FTT4gZmlsZSBvciB0aGUgPFNUUk9ORz5URVJNPC9TVFJPTkc+IGVudmlyb25tZW50YWwKKyAgICAgICB2YXJpYWJsZSBpcyBvZnRlbiBzb21ldGhpbmcgZ2VuZXJpYyBsaWtlIDxTVFJPTkc+bmV0d29yazwvU1RST05HPiwgIDxTVFJPTkc+ZGlhbHVwPC9TVFJPTkc+LAorICAgICAgIG9yICA8U1RST05HPnVua25vd248L1NUUk9ORz4uICAgV2hlbiA8U1RST05HPnRzZXQ8L1NUUk9ORz4gaXMgdXNlZCBpbiBhIHN0YXJ0dXAgc2NyaXB0IGl0IGlzCisgICAgICAgb2Z0ZW4gZGVzaXJhYmxlIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlICB0eXBlICBvZgorICAgICAgIHRlcm1pbmFsIHVzZWQgb24gc3VjaCBwb3J0cy4KKworICAgICAgIFRoZSAgcHVycG9zZSAgb2YgIHRoZSA8U1RST05HPi1tPC9TVFJPTkc+IG9wdGlvbiBpcyB0byBtYXAgZnJvbSBzb21lIHNldCBvZgorICAgICAgIGNvbmRpdGlvbnMgdG8gYSB0ZXJtaW5hbCB0eXBlLCB0aGF0IGlzLCB0byB0ZWxsIDxTVFJPTkc+dHNldDwvU1RST05HPiAgYGBJZgorICAgICAgIEknbSAgb24gdGhpcyBwb3J0IGF0IGEgcGFydGljdWxhciBzcGVlZCwgZ3Vlc3MgdGhhdCBJJ20gb24KKyAgICAgICB0aGF0IGtpbmQgb2YgdGVybWluYWwnJy4KKworICAgICAgIFRoZSBhcmd1bWVudCB0byB0aGUgPFNUUk9ORz4tbTwvU1RST05HPiBvcHRpb24gY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgcG9ydAorICAgICAgIHR5cGUsIGFuIG9wdGlvbmFsIG9wZXJhdG9yLCBhbiBvcHRpb25hbCBiYXVkIHJhdGUgc3BlY2lmaS0KKyAgICAgICBjYXRpb24sIGFuIG9wdGlvbmFsIGNvbG9uIChgYDonJykgY2hhcmFjdGVyIGFuZCBhIHRlcm1pbmFsCisgICAgICAgdHlwZS4gICBUaGUgcG9ydCB0eXBlIGlzIGEgc3RyaW5nIChkZWxpbWl0ZWQgYnkgZWl0aGVyIHRoZQorICAgICAgIG9wZXJhdG9yIG9yIHRoZSBjb2xvbiBjaGFyYWN0ZXIpLiAgVGhlIG9wZXJhdG9yIG1heSBiZSBhbnkKKyAgICAgICBjb21iaW5hdGlvbiBvZiBgYCZndDsnJywgYGAmbHQ7JycsIGBgQCcnLCBhbmQgYGAhJyc7IGBgJmd0OycnIG1lYW5zCisgICAgICAgZ3JlYXRlciB0aGFuLCBgYCZsdDsnJyBtZWFucyBsZXNzIHRoYW4sIGBgQCcnIG1lYW5zIGVxdWFsICB0bworICAgICAgIGFuZCBgYCEnJyBpbnZlcnRzIHRoZSBzZW5zZSBvZiB0aGUgdGVzdC4gIFRoZSBiYXVkIHJhdGUgaXMKKyAgICAgICBzcGVjaWZpZWQgYXMgYSBudW1iZXIgYW5kIGlzIGNvbXBhcmVkIHdpdGggIHRoZSAgc3BlZWQgIG9mCisgICAgICAgdGhlICBzdGFuZGFyZCAgZXJyb3IgIG91dHB1dCAgKHdoaWNoIHNob3VsZCBiZSB0aGUgY29udHJvbAorICAgICAgIHRlcm1pbmFsKS4gIFRoZSB0ZXJtaW5hbCB0eXBlIGlzIGEgc3RyaW5nLgorCisgICAgICAgSWYgdGhlIHRlcm1pbmFsIHR5cGUgaXMgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorICAgICAgIHRoZSAgPFNUUk9ORz4tbTwvU1RST05HPiBtYXBwaW5ncyBhcmUgYXBwbGllZCB0byB0aGUgdGVybWluYWwgdHlwZS4gIElmIHRoZQorICAgICAgIHBvcnQgdHlwZSBhbmQgYmF1ZCByYXRlIG1hdGNoIHRoZSAgbWFwcGluZywgIHRoZSAgdGVybWluYWwKKyAgICAgICB0eXBlICBzcGVjaWZpZWQgIGluIHRoZSBtYXBwaW5nIHJlcGxhY2VzIHRoZSBjdXJyZW50IHR5cGUuCisgICAgICAgSWYgbW9yZSB0aGFuIG9uZSBtYXBwaW5nIGlzIHNwZWNpZmllZCwgdGhlIGZpcnN0ICBhcHBsaWNhLQorICAgICAgIGJsZSBtYXBwaW5nIGlzIHVzZWQuCisKKyAgICAgICBGb3IgICAgZXhhbXBsZSwgICAgY29uc2lkZXIgICAgdGhlICAgIGZvbGxvd2luZyAgIG1hcHBpbmc6CisgICAgICAgPFNUUk9ORz5kaWFsdXAmZ3Q7OTYwMDp2dDEwMDwvU1RST05HPi4gIFRoZSBwb3J0IHR5cGUgaXMgZGlhbHVwICwgdGhlIG9wZXJhdG9yCisgICAgICAgaXMgICZndDssIHRoZSBiYXVkIHJhdGUgc3BlY2lmaWNhdGlvbiBpcyA5NjAwLCBhbmQgdGhlIHRlcm1pLQorICAgICAgIG5hbCB0eXBlIGlzIHZ0MTAwLiAgVGhlIHJlc3VsdCBvZiB0aGlzIG1hcHBpbmcgaXMgdG8gc3BlYy0KKyAgICAgICBpZnkgdGhhdCBpZiB0aGUgdGVybWluYWwgdHlwZSBpcyA8U1RST05HPmRpYWx1cDwvU1RST05HPiwgYW5kIHRoZSBiYXVkIHJhdGUKKyAgICAgICBpcyBncmVhdGVyIHRoYW4gOTYwMCBiYXVkLCBhIHRlcm1pbmFsIHR5cGUgb2YgIDxTVFJPTkc+dnQxMDA8L1NUUk9ORz4gIHdpbGwKKyAgICAgICBiZSB1c2VkLgorCisgICAgICAgSWYgbm8gYmF1ZCByYXRlIGlzIHNwZWNpZmllZCwgdGhlIHRlcm1pbmFsIHR5cGUgd2lsbCBtYXRjaAorICAgICAgIGFueSBiYXVkIHJhdGUuICBJZiBubyBwb3J0IHR5cGUgaXMgc3BlY2lmaWVkLCB0aGUgdGVybWluYWwKKyAgICAgICB0eXBlICAgd2lsbCAgIG1hdGNoICAgYW55ICBwb3J0ICB0eXBlLiAgIEZvciAgZXhhbXBsZSwgIDxTVFJPTkc+LW08L1NUUk9ORz4KKyAgICAgICA8U1RST05HPmRpYWx1cDp2dDEwMDwvU1RST05HPiAgPFNUUk9ORz4tbTwvU1RST05HPiAgPFNUUk9ORz46P3h0ZXJtPC9TVFJPTkc+ICB3aWxsICBjYXVzZSAgYW55ICBkaWFsdXAgIHBvcnQsCisgICAgICAgcmVnYXJkbGVzcyBvZiBiYXVkIHJhdGUsIHRvIG1hdGNoIHRoZSB0ZXJtaW5hbCB0eXBlIHZ0MTAwLAorICAgICAgIGFuZCBhbnkgbm9uLWRpYWx1cCBwb3J0IHR5cGUgdG8gbWF0Y2ggIHRoZSAgdGVybWluYWwgIHR5cGUKKyAgICAgICA/eHRlcm0uICAgTm90ZSwgIGJlY2F1c2Ugb2YgdGhlIGxlYWRpbmcgcXVlc3Rpb24gbWFyaywgdGhlCisgICAgICAgdXNlciB3aWxsIGJlIHF1ZXJpZWQgb24gYSBkZWZhdWx0IHBvcnQgYXMgdG8gd2hldGhlciAgdGhleQorICAgICAgIGFyZSBhY3R1YWxseSB1c2luZyBhbiB4dGVybSB0ZXJtaW5hbC4KKworICAgICAgIE5vICB3aGl0ZXNwYWNlICBjaGFyYWN0ZXJzICBhcmUgcGVybWl0dGVkIGluIHRoZSA8U1RST05HPi1tPC9TVFJPTkc+IG9wdGlvbgorICAgICAgIGFyZ3VtZW50LiAgQWxzbywgdG8gYXZvaWQgcHJvYmxlbXMgIHdpdGggIG1ldGEtY2hhcmFjdGVycywKKyAgICAgICBpdCAgaXMgIHN1Z2dlc3RlZCAgdGhhdCAgdGhlICBlbnRpcmUgPFNUUk9ORz4tbTwvU1RST05HPiBvcHRpb24gYXJndW1lbnQgYmUKKyAgICAgICBwbGFjZWQgd2l0aGluIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgdGhhdCA8U1RST05HPmNzaDwvU1RST05HPiAgdXNlcnMKKyAgICAgICBpbnNlcnQgIGEgIGJhY2tzbGFzaCBjaGFyYWN0ZXIgKGBgXCcnKSBiZWZvcmUgYW55IGV4Y2xhbWEtCisgICAgICAgdGlvbiBtYXJrcyAoYGAhJycpLgorCisKKzwvUFJFPgorPEgyPkhJU1RPUlk8L0gyPjxQUkU+CisgICAgICAgVGhlIDxTVFJPTkc+dHNldDwvU1RST05HPiBjb21tYW5kIGFwcGVhcmVkIGluIEJTRCAzLjAuICBUaGUgPFNUUk9ORz5uY3Vyc2VzPC9TVFJPTkc+ICBpbXBsZS0KKyAgICAgICBtZW50YXRpb24gIHdhcyBsaWdodGx5IGFkYXB0ZWQgZnJvbSB0aGUgNC40QlNEIHNvdXJjZXMgZm9yCisgICAgICAgYSB0ZXJtaW5mbyBlbnZpcm9ubWVudCBieSBFcmljIFMuIFJheW1vbmQgJmx0O2VzckBzbmFyay50aHlyLQorICAgICAgIHN1cy5jb20mZ3Q7LgorCisKKzwvUFJFPgorPEgyPkNPTVBBVElCSUxJVFk8L0gyPjxQUkU+CisgICAgICAgVGhlICA8U1RST05HPnRzZXQ8L1NUUk9ORz4gIHV0aWxpdHkgaGFzIGJlZW4gcHJvdmlkZWQgZm9yIGJhY2t3YXJkLWNvbXBhdGktCisgICAgICAgYmlsaXR5IHdpdGggQlNEIGVudmlyb25tZW50cyAodW5kZXIgIG1vc3QgIG1vZGVybiAgVU5JWGVzLAorICAgICAgIDxTVFJPTkc+L2V0Yy9pbml0dGFiPC9TVFJPTkc+ICBhbmQgIDxTVFJPTkc+PEEgSFJFRj0iZ2V0dHkuMS5odG1sIj5nZXR0eSgxKTwvQT48L1NUUk9ORz4gY2FuIHNldCA8U1RST05HPlRFUk08L1NUUk9ORz4gYXBwcm9wcmlhdGVseSBmb3IKKyAgICAgICBlYWNoIGRpYWwtdXAgbGluZTsgdGhpcyAgb2J2aWF0ZXMgIHdoYXQgIHdhcyAgPFNUUk9ORz50c2V0PC9TVFJPTkc+J3MgIG1vc3QKKyAgICAgICBpbXBvcnRhbnQgIHVzZSkuICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBiZWhhdmVzIGxpa2UgNC40QlNECisgICAgICAgdHNldCwgd2l0aCBhIGZldyBleGNlcHRpb25zIHNwZWNpZmllZCBoZXJlLgorCisgICAgICAgVGhlIDxTVFJPTkc+LVM8L1NUUk9ORz4gb3B0aW9uIG9mIEJTRCB0c2V0IG5vIGxvbmdlciB3b3JrczsgIGl0ICBwcmludHMgIGFuCisgICAgICAgZXJyb3IgbWVzc2FnZSB0byBzdGRlcnIgYW5kIGRpZXMuICBUaGUgPFNUUk9ORz4tczwvU1RST05HPiBvcHRpb24gb25seSBzZXRzCisgICAgICAgPFNUUk9ORz5URVJNPC9TVFJPTkc+LCBub3QgPFNUUk9ORz5URVJNQ0FQPC9TVFJPTkc+LiAgQm90aCB0aGVzZSAgY2hhbmdlcyAgYXJlICBiZWNhdXNlICB0aGUKKyAgICAgICA8U1RST05HPlRFUk1DQVA8L1NUUk9ORz4gIHZhcmlhYmxlICBpcyAgbm8gbG9uZ2VyIHN1cHBvcnRlZCB1bmRlciB0ZXJtaW5mby0KKyAgICAgICBiYXNlZCA8U1RST05HPm5jdXJzZXM8L1NUUk9ORz4sIHdoaWNoIG1ha2VzIDxTVFJPTkc+dHNldDwvU1RST05HPiA8U1RST05HPi1TPC9TVFJPTkc+IHVzZWxlc3MgKHdlIG1hZGUgaXQgZGllCisgICAgICAgbm9pc2lseSByYXRoZXIgdGhhbiBzaWxlbnRseSBpbmR1Y2UgbG9zc2FnZSkuCisKKyAgICAgICBUaGVyZSAgd2FzICBhbiAgdW5kb2N1bWVudGVkICA0LjRCU0QgZmVhdHVyZSB0aGF0IGludm9raW5nCisgICAgICAgdHNldCB2aWEgYSBsaW5rIG5hbWVkIGBUU0VUYCAob3IgdmlhIGFueSBvdGhlciBuYW1lIGJlZ2luLQorICAgICAgIG5pbmcgIHdpdGggIGFuICB1cHBlci1jYXNlIGxldHRlcikgc2V0IHRoZSB0ZXJtaW5hbCB0byB1c2UKKyAgICAgICB1cHBlci1jYXNlIG9ubHkuICBUaGlzIGZlYXR1cmUgaGFzIGJlZW4gb21pdHRlZC4KKworICAgICAgIFRoZSA8U1RST05HPi1BPC9TVFJPTkc+LCA8U1RST05HPi1FPC9TVFJPTkc+LCA8U1RST05HPi1oPC9TVFJPTkc+LCA8U1RST05HPi11PC9TVFJPTkc+IGFuZCA8U1RST05HPi12PC9TVFJPTkc+IG9wdGlvbnMgd2VyZSAgZGVsZXRlZCAgZnJvbSAgdGhlCisgICAgICAgPFNUUk9ORz50c2V0PC9TVFJPTkc+ICB1dGlsaXR5ICBpbiA0LjRCU0QuICBOb25lIG9mIHRoZW0gd2VyZSBkb2N1bWVudGVkIGluCisgICAgICAgNC4zQlNEIGFuZCBhbGwgYXJlIG9mIGxpbWl0ZWQgdXRpbGl0eSBhdCAgYmVzdC4gICBUaGUgIDxTVFJPTkc+LWE8L1NUUk9ORz4sCisgICAgICAgPFNUUk9ORz4tZDwvU1RST05HPiwgYW5kIDxTVFJPTkc+LXA8L1NUUk9ORz4gb3B0aW9ucyBhcmUgc2ltaWxhcmx5IG5vdCBkb2N1bWVudGVkIG9yIHVzZWZ1bCwKKyAgICAgICBidXQgd2VyZSByZXRhaW5lZCBhcyB0aGV5IGFwcGVhciB0byBiZSBpbiB3aWRlc3ByZWFkICB1c2UuCisgICAgICAgSXQgIGlzICBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IGFueSB1c2FnZSBvZiB0aGVzZSB0aHJlZQorICAgICAgIG9wdGlvbnMgYmUgY2hhbmdlZCB0byB1c2UgdGhlIDxTVFJPTkc+LW08L1NUUk9ORz4gb3B0aW9uIGluc3RlYWQuICAgVGhlICAtbgorICAgICAgIG9wdGlvbiAgcmVtYWlucywgYnV0IGhhcyBubyBlZmZlY3QuICBUaGUgPFNUUk9ORz4tYWRucDwvU1RST05HPiBvcHRpb25zIGFyZQorICAgICAgIHRoZXJlZm9yZSBvbWl0dGVkIGZyb20gdGhlIHVzYWdlIHN1bW1hcnkgYWJvdmUuCisKKyAgICAgICBJdCBpcyBzdGlsbCBwZXJtaXNzaWJsZSB0byBzcGVjaWZ5ICB0aGUgIDxTVFJPTkc+LWU8L1NUUk9ORz4sICA8U1RST05HPi1pPC9TVFJPTkc+LCAgYW5kICA8U1RST05HPi1rPC9TVFJPTkc+CisgICAgICAgb3B0aW9ucyAgd2l0aG91dCBhcmd1bWVudHMsIGFsdGhvdWdoIGl0IGlzIHN0cm9uZ2x5IHJlY29tLQorICAgICAgIG1lbmRlZCB0aGF0IHN1Y2ggdXNhZ2UgYmUgZml4ZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5ICB0aGUKKyAgICAgICBjaGFyYWN0ZXIuCisKKyAgICAgICBBcyAgb2YgIDQuNEJTRCwgIGV4ZWN1dGluZyA8U1RST05HPnRzZXQ8L1NUUk9ORz4gYXMgPFNUUk9ORz5yZXNldDwvU1RST05HPiBubyBsb25nZXIgaW1wbGllcworICAgICAgIHRoZSA8U1RST05HPi1RPC9TVFJPTkc+IG9wdGlvbi4gIEFsc28sIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSAtIG9wdGlvbgorICAgICAgIGFuZCB0aGUgPEVNPnRlcm1pbmFsPC9FTT4gYXJndW1lbnQgaW4gc29tZSBoaXN0b3JpYyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICBvZiA8U1RST05HPnRzZXQ8L1NUUk9ORz4gaGFzIGJlZW4gcmVtb3ZlZC4KKworCis8L1BSRT4KKzxIMj5FTlZJUk9OTUVOVDwvSDI+PFBSRT4KKyAgICAgICBUaGUgPFNUUk9ORz50c2V0PC9TVFJPTkc+IGNvbW1hbmQgdXNlcyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisKKyAgICAgICBTSEVMTAorICAgICAgICAgICAgdGVsbHMgPFNUUk9ORz50c2V0PC9TVFJPTkc+IHdoZXRoZXIgdG8gaW5pdGlhbGl6ZSA8U1RST05HPlRFUk08L1NUUk9ORz4gdXNpbmcgPFNUUk9ORz5zaDwvU1RST05HPiBvciA8U1RST05HPmNzaDwvU1RST05HPgorICAgICAgICAgICAgc3ludGF4LgorCisgICAgICAgVEVSTSBEZW5vdGVzICB5b3VyICB0ZXJtaW5hbCAgdHlwZS4gIEVhY2ggdGVybWluYWwgdHlwZSBpcworICAgICAgICAgICAgZGlzdGluY3QsIHRob3VnaCBtYW55IGFyZSBzaW1pbGFyLgorCisgICAgICAgVEVSTUNBUAorICAgICAgICAgICAgbWF5IGRlbm90ZSB0aGUgbG9jYXRpb24gb2YgYSB0ZXJtY2FwIGRhdGFiYXNlLiAgSWYgaXQKKyAgICAgICAgICAgIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRobmFtZSwgZS5nLiwgYmVnaW5zIHdpdGggYSBgLycsCisgICAgICAgICAgICA8U1RST05HPnRzZXQ8L1NUUk9ORz4gcmVtb3ZlcyB0aGUgdmFyaWFibGUgZnJvbSB0aGUgZW52aXJvbm1lbnQgYmVmb3JlCisgICAgICAgICAgICBsb29raW5nIGZvciB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uCisKKworPC9QUkU+Cis8SDI+RklMRVM8L0gyPjxQUkU+CisgICAgICAgL2V0Yy90dHlzCisgICAgICAgICAgICBzeXN0ZW0gIHBvcnQgIG5hbWUgIHRvIHRlcm1pbmFsIHR5cGUgbWFwcGluZyBkYXRhYmFzZQorICAgICAgICAgICAgKEJTRCB2ZXJzaW9ucyBvbmx5KS4KKworICAgICAgIC91c3Ivc2hhcmUvdGVybWluZm8KKyAgICAgICAgICAgIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YWJhc2UKKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9ImNzaC4xLmh0bWwiPmNzaCgxKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ic2guMS5odG1sIj5zaCgxKTwvQT48L1NUUk9ORz4sIDxTVFJPTkc+PEEgSFJFRj0ic3R0eS4xLmh0bWwiPnN0dHkoMSk8L0E+PC9TVFJPTkc+LCAgPFNUUk9ORz48QSBIUkVGPSJjdXJzX3Rlcm1pbmZvLjN4Lmh0bWwiPmN1cnNfdGVybWluZm8oM3gpPC9BPjwvU1RST05HPiwgIDxTVFJPTkc+PEEgSFJFRj0idHR5LjQuaHRtbCI+dHR5KDQpPC9BPjwvU1RST05HPiwgIHRlci0KKyAgICAgICA8U1RST05HPjxBIEhSRUY9Im1pbmZvLjUuaHRtbCI+bWluZm8oNSk8L0E+PC9TVFJPTkc+LCA8U1RST05HPjxBIEhSRUY9InR0eXMuNS5odG1sIj50dHlzKDUpPC9BPjwvU1RST05HPiwgPFNUUk9ORz48QSBIUkVGPSJlbnZpcm9uLjcuaHRtbCI+ZW52aXJvbig3KTwvQT48L1NUUk9ORz4KKworICAgICAgIFRoaXMgZGVzY3JpYmVzIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPiB2ZXJzaW9uIDUuNiAocGF0Y2ggMjAwODEwMTEpLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTVFJPTkc+PEEgSFJFRj0idHNldC4xLmh0bWwiPnRzZXQoMSk8L0E+PC9TVFJPTkc+Cis8L1BSRT4KKzxIUj4KKzxBRERSRVNTPgorTWFuKDEpIG91dHB1dCBjb252ZXJ0ZWQgd2l0aAorPGEgaHJlZj0iaHR0cDovL3d3dy5vYWMudWNpLmVkdS9pbmRpdi9laG9vZC9tYW4yaHRtbC5odG1sIj5tYW4yaHRtbDwvYT4KKzwvQUREUkVTUz4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9odG1sL21hbi93cmVzaXplLjN4Lmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vd3Jlc2l6ZS4zeC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNGVkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9tYW4vd3Jlc2l6ZS4zeC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPgorPCEtLSAKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NgorICAqIEBJZDogd3Jlc2l6ZS4zeCx2IDEuOSAyMDA2LzAyLzI1IDIxOjQ3OjA2IHRvbSBFeHAgQAorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPndyZXNpemUgM3g8L1RJVExFPgorPGxpbmsgcmV2PW1hZGUgaHJlZj0ibWFpbHRvOmJ1Zy1uY3Vyc2VzQGdudS5vcmciPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8L0hFQUQ+Cis8Qk9EWT4KKzxIMT53cmVzaXplIDN4PC9IMT4KKzxIUj4KKzxQUkU+Cis8IS0tIE1hbnBhZ2UgY29udmVydGVkIGJ5IG1hbjJodG1sIDMuMC4xIC0tPgorPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U1RST05HPjxBIEhSRUY9IndyZXNpemUuM3guaHRtbCI+d3Jlc2l6ZSgzeCk8L0E+PC9TVFJPTkc+CisKKworCisKKzwvUFJFPgorPEgyPk5BTUU8L0gyPjxQUkU+CisgICAgICAgPFNUUk9ORz53cmVzaXplPC9TVFJPTkc+IC0gcmVzaXplIGEgY3Vyc2VzIHdpbmRvdworCisKKzwvUFJFPgorPEgyPlNZTk9QU0lTPC9IMj48UFJFPgorICAgICAgIDxTVFJPTkc+I2luY2x1ZGU8L1NUUk9ORz4gPFNUUk9ORz4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9TVFJPTkc+CisKKyAgICAgICA8U1RST05HPmludDwvU1RST05HPiA8U1RST05HPndyZXNpemUoV0lORE9XPC9TVFJPTkc+IDxTVFJPTkc+Kndpbiw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5saW5lcyw8L1NUUk9ORz4gPFNUUk9ORz5pbnQ8L1NUUk9ORz4gPFNUUk9ORz5jb2x1bW5zKTs8L1NUUk9ORz4KKworCis8L1BSRT4KKzxIMj5ERVNDUklQVElPTjwvSDI+PFBSRT4KKyAgICAgICBUaGUgIDxTVFJPTkc+d3Jlc2l6ZTwvU1RST05HPiAgZnVuY3Rpb24gIHJlYWxsb2NhdGVzIHN0b3JhZ2UgZm9yIGFuIDxTVFJPTkc+bmN1cnNlczwvU1RST05HPgorICAgICAgIHdpbmRvdyB0byBhZGp1c3QgaXRzIGRpbWVuc2lvbnMgdG8gdGhlICBzcGVjaWZpZWQgIHZhbHVlcy4KKyAgICAgICBJZiBlaXRoZXIgZGltZW5zaW9uIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlcywgdGhlCisgICAgICAgd2luZG93J3MgZGF0YSBpcyBmaWxsZWQgd2l0aCBibGFua3MgdGhhdCBoYXZlIHRoZSAgY3VycmVudAorICAgICAgIGJhY2tncm91bmQgIHJlbmRpdGlvbiAgKGFzICBzZXQgIGJ5IDxTVFJPTkc+d2JrZ25kc2V0PC9TVFJPTkc+KSBtZXJnZWQgaW50bworICAgICAgIHRoZW0uCisKKworPC9QUkU+Cis8SDI+UkVUVVJOIFZBTFVFPC9IMj48UFJFPgorICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlZ2VyIDxTVFJPTkc+RVJSPC9TVFJPTkc+IHVwb24gZmFpbHVyZSAgYW5kICA8U1RST05HPk9LPC9TVFJPTkc+CisgICAgICAgb24gc3VjY2Vzcy4gIEl0IHdpbGwgZmFpbCBpZiBlaXRoZXIgb2YgdGhlIGRpbWVuc2lvbnMgbGVzcworICAgICAgIHRoYW4gb3IgZXF1YWwgIHRvICB6ZXJvLCAgb3IgIGlmICBhbiAgZXJyb3IgIG9jY3VycyAgd2hpbGUKKyAgICAgICAocmUpYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSB3aW5kb3cuCisKKworPC9QUkU+Cis8SDI+Tk9URVM8L0gyPjxQUkU+CisgICAgICAgVGhlIG9ubHkgcmVzdHJpY3Rpb24gcGxhY2VkIG9uIHRoZSBkaW1lbnNpb25zIGlzIHRoYXQgdGhleQorICAgICAgIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiAgVGhlIGRpbWVuc2lvbnMgYXJlIG5vdCBjb21wYXJlZCAgdG8KKyAgICAgICA8U1RST05HPmN1cnNlczwvU1RST05HPiAgIHNjcmVlbiAgIGRpbWVuc2lvbnMgIHRvICBzaW1wbGlmeSAgdGhlICBsb2dpYyAgb2YKKyAgICAgICA8U1RST05HPnJlc2l6ZXRlcm08L1NUUk9ORz4uICBUaGUgY2FsbGVyICBtdXN0ICBlbnN1cmUgIHRoYXQgIHRoZSAgd2luZG93J3MKKyAgICAgICBkaW1lbnNpb25zIGZpdCB3aXRoaW4gdGhlIGFjdHVhbCBzY3JlZW4gZGltZW5zaW9ucy4KKworCis8L1BSRT4KKzxIMj5TRUUgQUxTTzwvSDI+PFBSRT4KKyAgICAgICA8U1RST05HPjxBIEhSRUY9InJlc2l6ZXRlcm0uM3guaHRtbCI+cmVzaXpldGVybSgzeCk8L0E+PC9TVFJPTkc+LgorCisKKzwvUFJFPgorPEgyPkFVVEhPUjwvSDI+PFBSRT4KKyAgICAgICBUaG9tYXMgRGlja2V5IChmcm9tIGFuIGVxdWl2YWxlbnQgZnVuY3Rpb24gd3JpdHRlbiBpbiAxOTg4CisgICAgICAgZm9yIEJTRCBjdXJzZXMpLgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNUUk9ORz48QSBIUkVGPSJ3cmVzaXplLjN4Lmh0bWwiPndyZXNpemUoM3gpPC9BPjwvU1RST05HPgorPC9QUkU+Cis8SFI+Cis8QUREUkVTUz4KK01hbigxKSBvdXRwdXQgY29udmVydGVkIHdpdGgKKzxhIGhyZWY9Imh0dHA6Ly93d3cub2FjLnVjaS5lZHUvaW5kaXYvZWhvb2QvbWFuMmh0bWwuaHRtbCI+bWFuMmh0bWw8L2E+Cis8L0FERFJFU1M+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9uY3Vyc2VzLWludHJvLmh0bWwgYi9uY3Vyc2VzLTUuNy9kb2MvaHRtbC9uY3Vyc2VzLWludHJvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxZTdhYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2RvYy9odG1sL25jdXJzZXMtaW50cm8uaHRtbApAQCAtMCwwICsxLDI3MjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwgMy4wLy9FTiI+Cis8IS0tCisgICRJZDogbmN1cnNlcy1pbnRyby5odG1sLHYgMS40MyAyMDA3LzAzLzAzIDE5OjMxOjUwIHRvbSBFeHAgJAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0+Cis8SFRNTD4KKzxIRUFEPgorPFRJVExFPldyaXRpbmcgUHJvZ3JhbXMgd2l0aCBOQ1VSU0VTPC9USVRMRT4KKzxsaW5rIHJldj0ibWFkZSIgaHJlZj0ibWFpbHRvOmJ1Z3MtbmN1cnNlc0BnbnUub3JnIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPC9IRUFEPgorPEJPRFk+CisKKzxIMT5Xcml0aW5nIFByb2dyYW1zIHdpdGggTkNVUlNFUzwvSDE+CisKKzxCTE9DS1FVT1RFPgorYnkgRXJpYyBTLiBSYXltb25kIGFuZCBaZXlkIE0uIEJlbi1IYWxpbTxCUj4KK3VwZGF0ZXMgc2luY2UgcmVsZWFzZSAxLjkuOWUgYnkgVGhvbWFzIERpY2tleQorPC9CTE9DS1FVT1RFPgorCis8SDE+Q29udGVudHM8L0gxPgorPFVMPgorPExJPjxBIEhSRUY9IiNpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjaGlzdG9yeSI+QSBCcmllZiBIaXN0b3J5IG9mIEN1cnNlczwvQT4KKzxMST48QSBIUkVGPSIjc2NvcGUiPlNjb3BlIG9mIFRoaXMgRG9jdW1lbnQ8L0E+Cis8TEk+PEEgSFJFRj0iI3Rlcm1pbm9sb2d5Ij5UZXJtaW5vbG9neTwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2N1cnNlcyI+VGhlIEN1cnNlcyBMaWJyYXJ5PC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNvdmVydmlldyI+QW4gT3ZlcnZpZXcgb2YgQ3Vyc2VzPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNjb21waWxpbmciPkNvbXBpbGluZyBQcm9ncmFtcyB1c2luZyBDdXJzZXM8L0E+Cis8TEk+PEEgSFJFRj0iI3VwZGF0aW5nIj5VcGRhdGluZyB0aGUgU2NyZWVuPC9BPgorPExJPjxBIEhSRUY9IiNzdGRzY3IiPlN0YW5kYXJkIFdpbmRvd3MgYW5kIEZ1bmN0aW9uIE5hbWluZyBDb252ZW50aW9uczwvQT4KKzxMST48QSBIUkVGPSIjdmFyaWFibGVzIj5WYXJpYWJsZXM8L0E+Cis8L1VMPgorPExJPjxBIEhSRUY9IiN1c2luZyI+VXNpbmcgdGhlIExpYnJhcnk8L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI3N0YXJ0aW5nIj5TdGFydGluZyB1cDwvQT4KKzxMST48QSBIUkVGPSIjb3V0cHV0Ij5PdXRwdXQ8L0E+Cis8TEk+PEEgSFJFRj0iI2lucHV0Ij5JbnB1dDwvQT4KKzxMST48QSBIUkVGPSIjZm9ybXNjaGFycyI+VXNpbmcgRm9ybXMgQ2hhcmFjdGVyczwvQT4KKzxMST48QSBIUkVGPSIjYXR0cmlidXRlcyI+Q2hhcmFjdGVyIEF0dHJpYnV0ZXMgYW5kIENvbG9yPC9BPgorPExJPjxBIEhSRUY9IiNtb3VzZSI+TW91c2UgSW50ZXJmYWNpbmc8L0E+Cis8TEk+PEEgSFJFRj0iI2ZpbmlzaGluZyI+RmluaXNoaW5nIFVwPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjZnVuY3Rpb25zIj5GdW5jdGlvbiBEZXNjcmlwdGlvbnM8L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI2luaXQiPkluaXRpYWxpemF0aW9uIGFuZCBXcmFwdXA8L0E+Cis8TEk+PEEgSFJFRj0iI2ZsdXNoIj5DYXVzaW5nIE91dHB1dCB0byB0aGUgVGVybWluYWw8L0E+Cis8TEk+PEEgSFJFRj0iI2xvd2xldmVsIj5Mb3ctTGV2ZWwgQ2FwYWJpbGl0eSBBY2Nlc3M8L0E+Cis8TEk+PEEgSFJFRj0iI2RlYnVnZ2luZyI+RGVidWdnaW5nPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjaGludHMiPkhpbnRzLCBUaXBzLCBhbmQgVHJpY2tzPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNjYXV0aW9uIj5Tb21lIE5vdGVzIG9mIENhdXRpb248L0E+Cis8TEk+PEEgSFJFRj0iI2xlYXZpbmciPlRlbXBvcmFyaWx5IExlYXZpbmcgbmN1cnNlcyBNb2RlPC9BPgorPExJPjxBIEhSRUY9IiN4dGVybSI+VXNpbmcgPENPREU+bmN1cnNlczwvQ09ERT4gdW5kZXIgPENPREU+eHRlcm08L0NPREU+PC9BPgorPExJPjxBIEhSRUY9IiNzY3JlZW5zIj5IYW5kbGluZyBNdWx0aXBsZSBUZXJtaW5hbCBTY3JlZW5zPC9BPgorPExJPjxBIEhSRUY9IiN0ZXN0aW5nIj5UZXN0aW5nIGZvciBUZXJtaW5hbCBDYXBhYmlsaXRpZXM8L0E+Cis8TEk+PEEgSFJFRj0iI3R1bmluZyI+VHVuaW5nIGZvciBTcGVlZDwvQT4KKzxMST48QSBIUkVGPSIjc3BlY2lhbCI+U3BlY2lhbCBGZWF0dXJlcyBvZiA8Q09ERT5uY3Vyc2VzPC9DT0RFPjwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI2NvbXBhdCI+Q29tcGF0aWJpbGl0eSB3aXRoIE9sZGVyIFZlcnNpb25zPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNyZWZidWciPlJlZnJlc2ggb2YgT3ZlcmxhcHBpbmcgV2luZG93czwvQT4KKzxMST48QSBIUkVGPSIjYmFja2J1ZyI+QmFja2dyb3VuZCBFcmFzZTwvQT4KKzwvVUw+Cis8TEk+PEEgSFJFRj0iI3hzaWZ1bmNzIj5YU0kgQ3Vyc2VzIENvbmZvcm1hbmNlPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjcGFuZWxzIj5UaGUgUGFuZWxzIExpYnJhcnk8L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI3Bjb21waWxlIj5Db21waWxpbmcgV2l0aCB0aGUgUGFuZWxzIExpYnJhcnk8L0E+Cis8TEk+PEEgSFJFRj0iI3BvdmVydmlldyI+T3ZlcnZpZXcgb2YgUGFuZWxzPC9BPgorPExJPjxBIEhSRUY9IiNwc3Rkc2NyIj5QYW5lbHMsIElucHV0LCBhbmQgdGhlIFN0YW5kYXJkIFNjcmVlbjwvQT4KKzxMST48QSBIUkVGPSIjaGlkaW5nIj5IaWRpbmcgUGFuZWxzPC9BPgorPExJPjxBIEhSRUY9IiNwbWlzYyI+TWlzY2VsbGFuZW91cyBPdGhlciBGYWNpbGl0aWVzPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjbWVudSI+VGhlIE1lbnUgTGlicmFyeTwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjbWNvbXBpbGUiPkNvbXBpbGluZyB3aXRoIHRoZSBtZW51IExpYnJhcnk8L0E+Cis8TEk+PEEgSFJFRj0iI21vdmVydmlldyI+T3ZlcnZpZXcgb2YgTWVudXM8L0E+Cis8TEk+PEEgSFJFRj0iI21zZWxlY3QiPlNlbGVjdGluZyBpdGVtczwvQT4KKzxMST48QSBIUkVGPSIjbWRpc3BsYXkiPk1lbnUgRGlzcGxheTwvQT4KKzxMST48QSBIUkVGPSIjbXdpbmRvd3MiPk1lbnUgV2luZG93czwvQT4KKzxMST48QSBIUkVGPSIjbWlucHV0Ij5Qcm9jZXNzaW5nIE1lbnUgSW5wdXQ8L0E+Cis8TEk+PEEgSFJFRj0iI21taXNjIj5NaXNjZWxsYW5lb3VzIE90aGVyIEZlYXR1cmVzPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjZm9ybSI+VGhlIEZvcm1zIExpYnJhcnk8L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI2Zjb21waWxlIj5Db21waWxpbmcgd2l0aCB0aGUgZm9ybXMgTGlicmFyeTwvQT4KKzxMST48QSBIUkVGPSIjZm92ZXJ2aWV3Ij5PdmVydmlldyBvZiBGb3JtczwvQT4KKzxMST48QSBIUkVGPSIjZmNyZWF0ZSI+Q3JlYXRpbmcgYW5kIEZyZWVpbmcgRmllbGRzIGFuZCBGb3JtczwvQT4KKzxMST48QSBIUkVGPSIjZmF0dHJpYnV0ZXMiPkZldGNoaW5nIGFuZCBDaGFuZ2luZyBGaWVsZCBBdHRyaWJ1dGVzPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNmc2l6ZXMiPkZldGNoaW5nIFNpemUgYW5kIExvY2F0aW9uIERhdGE8L0E+Cis8TEk+PEEgSFJFRj0iI2Zsb2NhdGlvbiI+Q2hhbmdpbmcgdGhlIEZpZWxkIExvY2F0aW9uPC9BPgorPExJPjxBIEhSRUY9IiNmanVzdCI+VGhlIEp1c3RpZmljYXRpb24gQXR0cmlidXRlPC9BPgorPExJPjxBIEhSRUY9IiNmZGlzcGF0dHMiPkZpZWxkIERpc3BsYXkgQXR0cmlidXRlczwvQT4KKzxMST48QSBIUkVGPSIjZm9wdGlvbnMiPkZpZWxkIE9wdGlvbiBCaXRzPC9BPgorPExJPjxBIEhSRUY9IiNmc3RhdHVzIj5GaWVsZCBTdGF0dXM8L0E+Cis8TEk+PEEgSFJFRj0iI2Z1c2VyIj5GaWVsZCBVc2VyIFBvaW50ZXI8L0E+Cis8L1VMPgorPExJPjxBIEhSRUY9IiNmZHluYW1pYyI+VmFyaWFibGUtU2l6ZWQgRmllbGRzPC9BPgorPExJPjxBIEhSRUY9IiNmdmFsaWRhdGlvbiI+RmllbGQgVmFsaWRhdGlvbjwvQT4KKzxVTD4KKzxMST48QSBIUkVGPSIjZnR5cGVfYWxwaGEiPlRZUEVfQUxQSEE8L0E+Cis8TEk+PEEgSFJFRj0iI2Z0eXBlX2FsbnVtIj5UWVBFX0FMTlVNPC9BPgorPExJPjxBIEhSRUY9IiNmdHlwZV9lbnVtIj5UWVBFX0VOVU08L0E+Cis8TEk+PEEgSFJFRj0iI2Z0eXBlX2ludGVnZXIiPlRZUEVfSU5URUdFUjwvQT4KKzxMST48QSBIUkVGPSIjZnR5cGVfbnVtZXJpYyI+VFlQRV9OVU1FUklDPC9BPgorPExJPjxBIEhSRUY9IiNmdHlwZV9yZWdleHAiPlRZUEVfUkVHRVhQPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjZmJ1ZmZlciI+RGlyZWN0IEZpZWxkIEJ1ZmZlciBNYW5pcHVsYXRpb248L0E+Cis8TEk+PEEgSFJFRj0iI2Zvcm1hdHRycyI+QXR0cmlidXRlcyBvZiBGb3JtczwvQT4KKzxMST48QSBIUkVGPSIjZmRpc3BsYXkiPkNvbnRyb2wgb2YgRm9ybSBEaXNwbGF5PC9BPgorPExJPjxBIEhSRUY9IiNmZHJpdmVyIj5JbnB1dCBQcm9jZXNzaW5nIGluIHRoZSBGb3JtcyBEcml2ZXI8L0E+Cis8VUw+Cis8TEk+PEEgSFJFRj0iI2ZwYWdlIj5QYWdlIE5hdmlnYXRpb24gUmVxdWVzdHM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZmaWVsZCI+SW50ZXItRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0czwvQT4KKzxMST48QSBIUkVGPSIjZmlmaWVsZCI+SW50cmEtRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0czwvQT4KKzxMST48QSBIUkVGPSIjZnNjcm9sbCI+U2Nyb2xsaW5nIFJlcXVlc3RzPC9BPgorPExJPjxBIEhSRUY9IiNmZWRpdCI+RmllbGQgRWRpdGluZyBSZXF1ZXN0czwvQT4KKzxMST48QSBIUkVGPSIjZm9yZGVyIj5PcmRlciBSZXF1ZXN0czwvQT4KKzxMST48QSBIUkVGPSIjZmFwcGNtZHMiPkFwcGxpY2F0aW9uIENvbW1hbmRzPC9BPgorPC9VTD4KKzxMST48QSBIUkVGPSIjZmhvb2tzIj5GaWVsZCBDaGFuZ2UgSG9va3M8L0E+Cis8TEk+PEEgSFJFRj0iI2Zmb2N1cyI+RmllbGQgQ2hhbmdlIENvbW1hbmRzPC9BPgorPExJPjxBIEhSRUY9IiNmcm1vcHRpb25zIj5Gb3JtIE9wdGlvbnM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZjdXN0b20iPkN1c3RvbSBWYWxpZGF0aW9uIFR5cGVzPC9BPgorPFVMPgorPExJPjxBIEhSRUY9IiNmbGlua3R5cGVzIj5VbmlvbiBUeXBlczwvQT4KKzxMST48QSBIUkVGPSIjZm5ld3R5cGVzIj5OZXcgRmllbGQgVHlwZXM8L0E+Cis8TEk+PEEgSFJFRj0iI2ZjaGVja2FyZ3MiPlZhbGlkYXRpb24gRnVuY3Rpb24gQXJndW1lbnRzPC9BPgorPExJPjxBIEhSRUY9IiNmY3VzdG9yZGVyIj5PcmRlciBGdW5jdGlvbnMgRm9yIEN1c3RvbSBUeXBlczwvQT4KKzxMST48QSBIUkVGPSIjZmN1c3Rwcm9icyI+QXZvaWRpbmcgUHJvYmxlbXM8L0E+Cis8L1VMPgorPC9VTD4KKzwvVUw+CisKKzxIUj4KKzxIMT48QSBOQU1FPSJpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvQT48L0gxPgorCitUaGlzIGRvY3VtZW50IGlzIGFuIGludHJvZHVjdGlvbiB0byBwcm9ncmFtbWluZyB3aXRoIDxDT0RFPmN1cnNlczwvQ09ERT4uIEl0IGlzCitub3QgYW4gZXhoYXVzdGl2ZSByZWZlcmVuY2UgZm9yIHRoZSBjdXJzZXMgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlCisoQVBJKTsgdGhhdCByb2xlIGlzIGZpbGxlZCBieSB0aGUgPENPREU+Y3Vyc2VzPC9DT0RFPiBtYW51YWwgcGFnZXMuICBSYXRoZXIsIGl0CitpcyBpbnRlbmRlZCB0byBoZWxwIEMgcHJvZ3JhbW1lcnMgZWFzZSBpbnRvIHVzaW5nIHRoZSBwYWNrYWdlLiA8UD4KKworVGhpcyBkb2N1bWVudCBpcyBhaW1lZCBhdCBDIGFwcGxpY2F0aW9ucyBwcm9ncmFtbWVycyBub3QgeWV0IHNwZWNpZmljYWxseQorZmFtaWxpYXIgd2l0aCBuY3Vyc2VzLiAgSWYgeW91IGFyZSBhbHJlYWR5IGFuIGV4cGVyaWVuY2VkIDxDT0RFPmN1cnNlczwvQ09ERT4KK3Byb2dyYW1tZXIsIHlvdSBzaG91bGQgbmV2ZXJ0aGVsZXNzIHJlYWQgdGhlIHNlY3Rpb25zIG9uCis8QSBIUkVGPSIjbW91c2UiPk1vdXNlIEludGVyZmFjaW5nPC9BPiwgPEEgSFJFRj0iI2RlYnVnZ2luZyI+RGVidWdnaW5nPC9BPiwKKzxBIEhSRUY9IiNjb21wYXQiPkNvbXBhdGliaWxpdHkgd2l0aCBPbGRlciBWZXJzaW9uczwvQT4sCithbmQgPEEgSFJFRj0iI2hpbnRzIj5IaW50cywgVGlwcywgYW5kIFRyaWNrczwvQT4uICBUaGVzZSB3aWxsIGJyaW5nIHlvdSB1cAordG8gc3BlZWQgb24gdGhlIHNwZWNpYWwgZmVhdHVyZXMgYW5kIHF1aXJrcyBvZiB0aGUgPENPREU+bmN1cnNlczwvQ09ERT4KK2ltcGxlbWVudGF0aW9uLiAgSWYgeW91IGFyZSBub3Qgc28gZXhwZXJpZW5jZWQsIGtlZXAgcmVhZGluZy4gPFA+CisKK1RoZSA8Q09ERT5jdXJzZXM8L0NPREU+IHBhY2thZ2UgaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnkgZm9yCit0ZXJtaW5hbC1pbmRlcGVuZGVudCBzY3JlZW4tcGFpbnRpbmcgYW5kIGlucHV0LWV2ZW50IGhhbmRsaW5nIHdoaWNoCitwcmVzZW50cyBhIGhpZ2ggbGV2ZWwgc2NyZWVuIG1vZGVsIHRvIHRoZSBwcm9ncmFtbWVyLCBoaWRpbmcgZGlmZmVyZW5jZXMKK2JldHdlZW4gdGVybWluYWwgdHlwZXMgYW5kIGRvaW5nIGF1dG9tYXRpYyBvcHRpbWl6YXRpb24gb2Ygb3V0cHV0IHRvIGNoYW5nZQorb25lIHNjcmVlbiBmdWxsIG9mIHRleHQgaW50byBhbm90aGVyLiAgPENPREU+Q3Vyc2VzPC9DT0RFPiB1c2VzIHRlcm1pbmZvLCB3aGljaAoraXMgYSBkYXRhYmFzZSBmb3JtYXQgdGhhdCBjYW4gZGVzY3JpYmUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aG91c2FuZHMgb2YKK2RpZmZlcmVudCB0ZXJtaW5hbHMuIDxQPgorCitUaGUgPENPREU+Y3Vyc2VzPC9DT0RFPiBBUEkgbWF5IHNlZW0gc29tZXRoaW5nIG9mIGFuIGFyY2hhaXNtIG9uIFVOSVggZGVza3RvcHMKK2luY3JlYXNpbmdseSBkb21pbmF0ZWQgYnkgWCwgTW90aWYsIGFuZCBUY2wvVGsuICBOZXZlcnRoZWxlc3MsIFVOSVggc3RpbGwKK3N1cHBvcnRzIHR0eSBsaW5lcyBhbmQgWCBzdXBwb3J0cyA8RU0+eHRlcm0oMSk8L0VNPjsgdGhlIDxDT0RFPmN1cnNlczwvQ09ERT4KK0FQSSBoYXMgdGhlIGFkdmFudGFnZSBvZiAoYSkgYmFjay1wb3J0YWJpbGl0eSB0byBjaGFyYWN0ZXItY2VsbCB0ZXJtaW5hbHMsCithbmQgKGIpIHNpbXBsaWNpdHkuICBGb3IgYW4gYXBwbGljYXRpb24gdGhhdCBkb2VzIG5vdCByZXF1aXJlIGJpdC1tYXBwZWQKK2dyYXBoaWNzIGFuZCBtdWx0aXBsZSBmb250cywgYW4gaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIHVzaW5nIDxDT0RFPmN1cnNlczwvQ09ERT4KK3dpbGwgdHlwaWNhbGx5IGJlIGEgZ3JlYXQgZGVhbCBzaW1wbGVyIGFuZCBsZXNzIGV4cGVuc2l2ZSB0aGFuIG9uZSB1c2luZyBhbgorWCB0b29sa2l0LgorCis8SDI+PEEgTkFNRT0iaGlzdG9yeSI+QSBCcmllZiBIaXN0b3J5IG9mIEN1cnNlczwvQT48L0gyPgorCitIaXN0b3JpY2FsbHksIHRoZSBmaXJzdCBhbmNlc3RvciBvZiA8Q09ERT5jdXJzZXM8L0NPREU+IHdhcyB0aGUgcm91dGluZXMgd3JpdHRlbiB0bworcHJvdmlkZSBzY3JlZW4taGFuZGxpbmcgZm9yIHRoZSBnYW1lIDxDT0RFPnJvZ3VlPC9DT0RFPjsgdGhlc2UgdXNlZCB0aGUKK2FscmVhZHktZXhpc3RpbmcgPENPREU+dGVybWNhcDwvQ09ERT4gZGF0YWJhc2UgZmFjaWxpdHkgZm9yIGRlc2NyaWJpbmcgdGVybWluYWwKK2NhcGFiaWxpdGllcy4gIFRoZXNlIHJvdXRpbmVzIHdlcmUgYWJzdHJhY3RlZCBpbnRvIGEgZG9jdW1lbnRlZCBsaWJyYXJ5IGFuZAorZmlyc3QgcmVsZWFzZWQgd2l0aCB0aGUgZWFybHkgQlNEIFVOSVggdmVyc2lvbnMuIDxQPgorCitTeXN0ZW0gSUlJIFVOSVggZnJvbSBCZWxsIExhYnMgZmVhdHVyZWQgYSByZXdyaXR0ZW4gYW5kIG11Y2gtaW1wcm92ZWQKKzxDT0RFPmN1cnNlczwvQ09ERT4gbGlicmFyeS4gIEl0IGludHJvZHVjZWQgdGhlIHRlcm1pbmZvIGZvcm1hdC4gIFRlcm1pbmZvIGlzIGJhc2VkCitvbiBCZXJrZWxleSdzIHRlcm1jYXAgZGF0YWJhc2UsIGJ1dCBjb250YWlucyBhIG51bWJlciBvZiBpbXByb3ZlbWVudHMgYW5kCitleHRlbnNpb25zLiBQYXJhbWV0ZXJpemVkIGNhcGFiaWxpdGllcyBzdHJpbmdzIHdlcmUgaW50cm9kdWNlZCwgbWFraW5nIGl0Citwb3NzaWJsZSB0byBkZXNjcmliZSBtdWx0aXBsZSB2aWRlbyBhdHRyaWJ1dGVzLCBhbmQgY29sb3JzIGFuZCB0byBoYW5kbGUgZmFyCittb3JlIHVudXN1YWwgdGVybWluYWxzIHRoYW4gcG9zc2libGUgd2l0aCB0ZXJtY2FwLiAgSW4gdGhlIGxhdGVyIEFUJmFtcDtUCitTeXN0ZW0gViByZWxlYXNlcywgPENPREU+Y3Vyc2VzPC9DT0RFPiBldm9sdmVkIHRvIHVzZSBtb3JlIGZhY2lsaXRpZXMgYW5kIG9mZmVyCittb3JlIGNhcGFiaWxpdGllcywgZ29pbmcgZmFyIGJleW9uZCBCU0QgY3Vyc2VzIGluIHBvd2VyIGFuZCBmbGV4aWJpbGl0eS4KKworPEgyPjxBIE5BTUU9InNjb3BlIj5TY29wZSBvZiBUaGlzIERvY3VtZW50PC9BPjwvSDI+CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIDxDT0RFPm5jdXJzZXM8L0NPREU+LCBhIGZyZWUgaW1wbGVtZW50YXRpb24gb2YKK3RoZSBTeXN0ZW0gViA8Q09ERT5jdXJzZXM8L0NPREU+IEFQSSB3aXRoIHNvbWUgY2xlYXJseSBtYXJrZWQgZXh0ZW5zaW9ucy4KK0l0IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgU3lzdGVtIFYgY3Vyc2VzIGZlYXR1cmVzOgorPFVMPgorPExJPlN1cHBvcnQgZm9yIG11bHRpcGxlIHNjcmVlbiBoaWdobGlnaHRzIChCU0QgY3Vyc2VzIGNvdWxkIG9ubHkKK2hhbmRsZSBvbmUgYHN0YW5kb3V0JyBoaWdobGlnaHQsIHVzdWFsbHkgcmV2ZXJzZS12aWRlbykuCis8TEk+U3VwcG9ydCBmb3IgbGluZS0gYW5kIGJveC1kcmF3aW5nIHVzaW5nIGZvcm1zIGNoYXJhY3RlcnMuCis8TEk+UmVjb2duaXRpb24gb2YgZnVuY3Rpb24ga2V5cyBvbiBpbnB1dC4KKzxMST5Db2xvciBzdXBwb3J0LgorPExJPlN1cHBvcnQgZm9yIHBhZHMgKHdpbmRvd3Mgb2YgbGFyZ2VyIHRoYW4gc2NyZWVuIHNpemUgb24gd2hpY2ggdGhlCitzY3JlZW4gb3IgYSBzdWJ3aW5kb3cgZGVmaW5lcyBhIHZpZXdwb3J0KS4KKzwvVUw+CisKK0Fsc28sIHRoaXMgcGFja2FnZSBtYWtlcyB1c2Ugb2YgdGhlIGluc2VydCBhbmQgZGVsZXRlIGxpbmUgYW5kIGNoYXJhY3RlcgorZmVhdHVyZXMgb2YgdGVybWluYWxzIHNvIGVxdWlwcGVkLCBhbmQgZGV0ZXJtaW5lcyBob3cgdG8gb3B0aW1hbGx5IHVzZSB0aGVzZQorZmVhdHVyZXMgd2l0aCBubyBoZWxwIGZyb20gdGhlIHByb2dyYW1tZXIuICBJdCBhbGxvd3MgYXJiaXRyYXJ5IGNvbWJpbmF0aW9ucyBvZgordmlkZW8gYXR0cmlidXRlcyB0byBiZSBkaXNwbGF5ZWQsIGV2ZW4gb24gdGVybWluYWxzIHRoYXQgbGVhdmUgYGBtYWdpYworY29va2llcycnIG9uIHRoZSBzY3JlZW4gdG8gbWFyayBjaGFuZ2VzIGluIGF0dHJpYnV0ZXMuIDxQPgorCitUaGUgPENPREU+bmN1cnNlczwvQ09ERT4gcGFja2FnZSBjYW4gYWxzbyBjYXB0dXJlIGFuZCB1c2UgZXZlbnQgcmVwb3J0cyBmcm9tIGEKK21vdXNlIGluIHNvbWUgZW52aXJvbm1lbnRzIChub3RhYmx5LCB4dGVybSB1bmRlciB0aGUgWCB3aW5kb3cgc3lzdGVtKS4gIFRoaXMKK2RvY3VtZW50IGluY2x1ZGVzIHRpcHMgZm9yIHVzaW5nIHRoZSBtb3VzZS4gPFA+CisKK1RoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBwYWNrYWdlIHdhcyBvcmlnaW5hdGVkIGJ5IFBhdmVsIEN1cnRpcy4gIFRoZSBvcmlnaW5hbAorbWFpbnRhaW5lciBvZiB0aGlzIHBhY2thZ2UgaXMKKzxBIEhSRUY9Im1haWx0bzp6bWJlbmhhbEBuZXRjb20uY29tIj5aZXlkIEJlbi1IYWxpbTwvQT4KKyZsdDt6bWJlbmhhbEBuZXRjb20uY29tJmd0Oy4KKzxBIEhSRUY9Im1haWx0bzplc3JAc25hcmsudGh5cnN1cy5jb20iPkVyaWMgUy4gUmF5bW9uZDwvQT4KKyZsdDtlc3JAc25hcmsudGh5cnN1cy5jb20mZ3Q7Cit3cm90ZSBtYW55IG9mIHRoZSBuZXcgZmVhdHVyZXMgaW4gdmVyc2lvbnMgYWZ0ZXIgMS44LjEKK2FuZCB3cm90ZSBtb3N0IG9mIHRoaXMgaW50cm9kdWN0aW9uLgorSiZ1dW1sO3JnZW4gUGZlaWZlcgord3JvdGUgYWxsIG9mIHRoZSBtZW51IGFuZCBmb3JtcyBjb2RlIGFzIHdlbGwgYXMgdGhlCis8QSBIUkVGPSJodHRwOi8vd3d3LmFkYWhvbWUuY29tIj5BZGE5NTwvQT4gYmluZGluZy4KK09uZ29pbmcgd29yayBpcyBiZWluZyBkb25lIGJ5Cis8QSBIUkVGPSJtYWlsdG86ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0Ij5UaG9tYXMgRGlja2V5PC9BPiAobWFpbnRhaW5lcikuCitDb250YWN0IHRoZSBjdXJyZW50IG1haW50YWluZXJzIGF0Cis8QSBIUkVGPSJtYWlsdG86YnVnLW5jdXJzZXNAZ251Lm9yZyI+YnVnLW5jdXJzZXNAZ251Lm9yZzwvQT4uCis8UD4KKworVGhpcyBkb2N1bWVudCBhbHNvIGRlc2NyaWJlcyB0aGUgPEEgSFJFRj0iI3BhbmVscyI+cGFuZWxzPC9BPiBleHRlbnNpb24gbGlicmFyeSwKK3NpbWlsYXJseSBtb2RlbGVkIG9uIHRoZSBTVnI0IHBhbmVscyBmYWNpbGl0eS4gIFRoaXMgbGlicmFyeSBhbGxvd3MgeW91IHRvCithc3NvY2lhdGUgYmFja2luZyBzdG9yZSB3aXRoIGVhY2ggb2YgYSBzdGFjayBvciBkZWNrIG9mIG92ZXJsYXBwaW5nIHdpbmRvd3MsCithbmQgcHJvdmlkZXMgb3BlcmF0aW9ucyBmb3IgbW92aW5nIHdpbmRvd3MgYXJvdW5kIGluIHRoZSBzdGFjayB0aGF0IGNoYW5nZQordGhlaXIgdmlzaWJpbGl0eSBpbiB0aGUgbmF0dXJhbCB3YXkgKGhhbmRsaW5nIHdpbmRvdyBvdmVybGFwcykuIDxQPgorCitGaW5hbGx5LCB0aGlzIGRvY3VtZW50IGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIDxBIEhSRUY9IiNtZW51Ij5tZW51czwvQT4gYW5kIDxBCitIUkVGPSIjZm9ybSI+Zm9ybXM8L0E+IGV4dGVuc2lvbiBsaWJyYXJpZXMsIGFsc28gY2xvbmVkIGZyb20gU3lzdGVtIFYsCit3aGljaCBzdXBwb3J0IGVhc3kgY29uc3RydWN0aW9uIGFuZCBzZXF1ZW5jZXMgb2YgbWVudXMgYW5kIGZpbGwtaW4KK2Zvcm1zLgorCisKKzxIMj48QSBOQU1FPSJ0ZXJtaW5vbG9neSI+VGVybWlub2xvZ3k8L0E+PC9IMj4KKworSW4gdGhpcyBkb2N1bWVudCwgdGhlIGZvbGxvd2luZyB0ZXJtaW5vbG9neSBpcyB1c2VkIHdpdGggcmVhc29uYWJsZQorY29uc2lzdGVuY3k6CisKKzxETD4KKzxEVD4gd2luZG93Cis8REQ+CitBIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzdWItcmVjdGFuZ2xlIG9mIHRoZSBzY3JlZW4gKHBvc3NpYmx5IHRoZQorZW50aXJlIHNjcmVlbikuICBZb3UgY2FuIHdyaXRlIHRvIGEgd2luZG93IGFzIHRob3VnaCBpdCB3ZXJlIGEgbWluaWF0dXJlCitzY3JlZW4sIHNjcm9sbGluZyBpbmRlcGVuZGVudGx5IG9mIG90aGVyIHdpbmRvd3Mgb24gdGhlIHBoeXNpY2FsIHNjcmVlbi4KKzxEVD4gc2NyZWVucworPEREPgorQSBzdWJzZXQgb2Ygd2luZG93cyB3aGljaCBhcmUgYXMgbGFyZ2UgYXMgdGhlIHRlcm1pbmFsIHNjcmVlbiwgaS5lLiwgdGhleSBzdGFydAorYXQgdGhlIHVwcGVyIGxlZnQgaGFuZCBjb3JuZXIgYW5kIGVuY29tcGFzcyB0aGUgbG93ZXIgcmlnaHQgaGFuZCBjb3JuZXIuICBPbmUKK29mIHRoZXNlLCA8Q09ERT5zdGRzY3I8L0NPREU+LCBpcyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIGZvciB0aGUgcHJvZ3JhbW1lci4KKzxEVD4gdGVybWluYWwgc2NyZWVuCis8REQ+CitUaGUgcGFja2FnZSdzIGlkZWEgb2Ygd2hhdCB0aGUgdGVybWluYWwgZGlzcGxheSBjdXJyZW50bHkgbG9va3MgbGlrZSwgaS5lLiwKK3doYXQgdGhlIHVzZXIgc2VlcyBub3cuICBUaGlzIGlzIGEgc3BlY2lhbCBzY3JlZW4uCis8L0RMPgorCis8SDE+PEEgTkFNRT0iY3Vyc2VzIj5UaGUgQ3Vyc2VzIExpYnJhcnk8L0E+PC9IMT4KKworPEgyPjxBIE5BTUU9Im92ZXJ2aWV3Ij5BbiBPdmVydmlldyBvZiBDdXJzZXM8L0E+PC9IMj4KKworPEgzPjxBIE5BTUU9ImNvbXBpbGluZyI+Q29tcGlsaW5nIFByb2dyYW1zIHVzaW5nIEN1cnNlczwvQT48L0gzPgorCitJbiBvcmRlciB0byB1c2UgdGhlIGxpYnJhcnksIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIGNlcnRhaW4gdHlwZXMgYW5kCit2YXJpYWJsZXMgZGVmaW5lZC4gIFRoZXJlZm9yZSwgdGhlIHByb2dyYW1tZXIgbXVzdCBoYXZlIGEgbGluZToKKworPFBSRT4KKwkgICNpbmNsdWRlICZsdDtjdXJzZXMuaCZndDsKKzwvUFJFPgorCithdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHNvdXJjZS4gIFRoZSBzY3JlZW4gcGFja2FnZSB1c2VzIHRoZSBTdGFuZGFyZCBJL08KK2xpYnJhcnksIHNvIDxDT0RFPiZsdDtjdXJzZXMuaCZndDs8L0NPREU+IGluY2x1ZGVzCis8Q09ERT4mbHQ7c3RkaW8uaCZndDs8L0NPREU+LiA8Q09ERT4mbHQ7Y3Vyc2VzLmgmZ3Q7PC9DT0RFPiBhbHNvIGluY2x1ZGVzCis8Q09ERT4mbHQ7dGVybWlvcy5oJmd0OzwvQ09ERT4sIDxDT0RFPiZsdDt0ZXJtaW8uaCZndDs8L0NPREU+LCBvcgorPENPREU+Jmx0O3NndHR5LmgmZ3Q7PC9DT0RFPiBkZXBlbmRpbmcgb24geW91ciBzeXN0ZW0uICBJdCBpcyByZWR1bmRhbnQgKGJ1dAoraGFybWxlc3MpIGZvciB0aGUgcHJvZ3JhbW1lciB0byBkbyB0aGVzZSBpbmNsdWRlcywgdG9vLiBJbiBsaW5raW5nIHdpdGgKKzxDT0RFPmN1cnNlczwvQ09ERT4geW91IG5lZWQgdG8gaGF2ZSA8Q09ERT4tbG5jdXJzZXM8L0NPREU+IGluIHlvdXIgTERGTEFHUyBvciBvbiB0aGUKK2NvbW1hbmQgbGluZS4gIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGFueSBvdGhlciBsaWJyYXJpZXMuCisKKzxIMz48QSBOQU1FPSJ1cGRhdGluZyI+VXBkYXRpbmcgdGhlIFNjcmVlbjwvQT48L0gzPgorCitJbiBvcmRlciB0byB1cGRhdGUgdGhlIHNjcmVlbiBvcHRpbWFsbHksIGl0IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIHJvdXRpbmVzIHRvCitrbm93IHdoYXQgdGhlIHNjcmVlbiBjdXJyZW50bHkgbG9va3MgbGlrZSBhbmQgd2hhdCB0aGUgcHJvZ3JhbW1lciB3YW50cyBpdCB0bworbG9vayBsaWtlIG5leHQuIEZvciB0aGlzIHB1cnBvc2UsIGEgZGF0YSB0eXBlIChzdHJ1Y3R1cmUpIG5hbWVkIFdJTkRPVyBpcworZGVmaW5lZCB3aGljaCBkZXNjcmliZXMgYSB3aW5kb3cgaW1hZ2UgdG8gdGhlIHJvdXRpbmVzLCBpbmNsdWRpbmcgaXRzIHN0YXJ0aW5nCitwb3NpdGlvbiBvbiB0aGUgc2NyZWVuICh0aGUgKHksIHgpIGNvb3JkaW5hdGVzIG9mIHRoZSB1cHBlciBsZWZ0IGhhbmQgY29ybmVyKQorYW5kIGl0cyBzaXplLiAgT25lIG9mIHRoZXNlIChjYWxsZWQgPENPREU+Y3Vyc2NyPC9DT0RFPiwgZm9yIGN1cnJlbnQgc2NyZWVuKSBpcyBhCitzY3JlZW4gaW1hZ2Ugb2Ygd2hhdCB0aGUgdGVybWluYWwgY3VycmVudGx5IGxvb2tzIGxpa2UuICBBbm90aGVyIHNjcmVlbiAoY2FsbGVkCis8Q09ERT5zdGRzY3I8L0NPREU+LCBmb3Igc3RhbmRhcmQgc2NyZWVuKSBpcyBwcm92aWRlZCBieSBkZWZhdWx0IHRvIG1ha2UgY2hhbmdlcworb24uIDxQPgorCitBIHdpbmRvdyBpcyBhIHB1cmVseSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gSXQgaXMgdXNlZCB0byBidWlsZCBhbmQgc3RvcmUgYQorcG90ZW50aWFsIGltYWdlIG9mIGEgcG9ydGlvbiBvZiB0aGUgdGVybWluYWwuICBJdCBkb2Vzbid0IGJlYXIgYW55IG5lY2Vzc2FyeQorcmVsYXRpb24gdG8gd2hhdCBpcyByZWFsbHkgb24gdGhlIHRlcm1pbmFsIHNjcmVlbjsgaXQncyBtb3JlIGxpa2UgYQorc2NyYXRjaHBhZCBvciB3cml0ZSBidWZmZXIuIDxQPgorCitUbyBtYWtlIHRoZSBzZWN0aW9uIG9mIHBoeXNpY2FsIHNjcmVlbiBjb3JyZXNwb25kaW5nIHRvIGEgd2luZG93IHJlZmxlY3QgdGhlCitjb250ZW50cyBvZiB0aGUgd2luZG93IHN0cnVjdHVyZSwgdGhlIHJvdXRpbmUgPENPREU+cmVmcmVzaCgpPC9DT0RFPiAob3IKKzxDT0RFPndyZWZyZXNoKCk8L0NPREU+IGlmIHRoZSB3aW5kb3cgaXMgbm90IDxDT0RFPnN0ZHNjcjwvQ09ERT4pIGlzIGNhbGxlZC4gPFA+CisKK0EgZ2l2ZW4gcGh5c2ljYWwgc2NyZWVuIHNlY3Rpb24gbWF5IGJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgYW55IG51bWJlciBvZgorb3ZlcmxhcHBpbmcgd2luZG93cy4gIEFsc28sIGNoYW5nZXMgY2FuIGJlIG1hZGUgdG8gd2luZG93cyBpbiBhbnkgb3JkZXIsCit3aXRob3V0IHJlZ2FyZCB0byBtb3Rpb24gZWZmaWNpZW5jeS4gIFRoZW4sIGF0IHdpbGwsIHRoZSBwcm9ncmFtbWVyIGNhbgorZWZmZWN0aXZlbHkgc2F5IGBgbWFrZSBpdCBsb29rIGxpa2UgdGhpcywnJyBhbmQgbGV0IHRoZSBwYWNrYWdlIGltcGxlbWVudGF0aW9uCitkZXRlcm1pbmUgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byByZXBhaW50IHRoZSBzY3JlZW4uCisKKzxIMz48QSBOQU1FPSJzdGRzY3IiPlN0YW5kYXJkIFdpbmRvd3MgYW5kIEZ1bmN0aW9uIE5hbWluZyBDb252ZW50aW9uczwvQT48L0gzPgorCitBcyBoaW50ZWQgYWJvdmUsIHRoZSByb3V0aW5lcyBjYW4gdXNlIHNldmVyYWwgd2luZG93cywgYnV0IHR3byBhcmUKK2F1dG9tYXRpY2FsbHkgZ2l2ZW46IDxDT0RFPmN1cnNjcjwvQ09ERT4sIHdoaWNoIGtub3dzIHdoYXQgdGhlIHRlcm1pbmFsIGxvb2tzIGxpa2UsCithbmQgPENPREU+c3Rkc2NyPC9DT0RFPiwgd2hpY2ggaXMgd2hhdCB0aGUgcHJvZ3JhbW1lciB3YW50cyB0aGUgdGVybWluYWwgdG8gbG9vaworbGlrZSBuZXh0LiAgVGhlIHVzZXIgc2hvdWxkIG5ldmVyIGFjdHVhbGx5IGFjY2VzcyA8Q09ERT5jdXJzY3I8L0NPREU+IGRpcmVjdGx5LgorQ2hhbmdlcyBzaG91bGQgYmUgbWFkZSB0byB0aHJvdWdoIHRoZSBBUEksIGFuZCB0aGVuIHRoZSByb3V0aW5lCis8Q09ERT5yZWZyZXNoKCk8L0NPREU+IChvciA8Q09ERT53cmVmcmVzaCgpPC9DT0RFPikgY2FsbGVkLiA8UD4KKworTWFueSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgdG8gdXNlIDxDT0RFPnN0ZHNjcjwvQ09ERT4gYXMgYSBkZWZhdWx0IHNjcmVlbi4gIEZvcgorZXhhbXBsZSwgdG8gYWRkIGEgY2hhcmFjdGVyIHRvIDxDT0RFPnN0ZHNjcjwvQ09ERT4sIG9uZSBjYWxscyA8Q09ERT5hZGRjaCgpPC9DT0RFPiB3aXRoCit0aGUgZGVzaXJlZCBjaGFyYWN0ZXIgYXMgYXJndW1lbnQuICBUbyB3cml0ZSB0byBhIGRpZmZlcmVudCB3aW5kb3cuIHVzZSB0aGUKK3JvdXRpbmUgPENPREU+d2FkZGNoKCk8L0NPREU+IChmb3IgYHcnaW5kb3ctc3BlY2lmaWMgYWRkY2goKSkgaXMgcHJvdmlkZWQuICBUaGlzCitjb252ZW50aW9uIG9mIHByZXBlbmRpbmcgZnVuY3Rpb24gbmFtZXMgd2l0aCBhIGB3JyB3aGVuIHRoZXkgYXJlIHRvIGJlCithcHBsaWVkIHRvIHNwZWNpZmljIHdpbmRvd3MgaXMgY29uc2lzdGVudC4gIFRoZSBvbmx5IHJvdXRpbmVzIHdoaWNoIGRvIG5vdAorZm9sbG93IGl0IGFyZSB0aG9zZSBmb3Igd2hpY2ggYSB3aW5kb3cgbXVzdCBhbHdheXMgYmUgc3BlY2lmaWVkLiA8UD4KKworSW4gb3JkZXIgdG8gbW92ZSB0aGUgY3VycmVudCAoeSwgeCkgY29vcmRpbmF0ZXMgZnJvbSBvbmUgcG9pbnQgdG8gYW5vdGhlciwgdGhlCityb3V0aW5lcyA8Q09ERT5tb3ZlKCk8L0NPREU+IGFuZCA8Q09ERT53bW92ZSgpPC9DT0RFPiBhcmUgcHJvdmlkZWQuICBIb3dldmVyLCBpdCBpcworb2Z0ZW4gZGVzaXJhYmxlIHRvIGZpcnN0IG1vdmUgYW5kIHRoZW4gcGVyZm9ybSBzb21lIEkvTyBvcGVyYXRpb24uICBJbiBvcmRlciB0bworYXZvaWQgY2x1bXNpbmVzcywgbW9zdCBJL08gcm91dGluZXMgY2FuIGJlIHByZWNlZGVkIGJ5IHRoZSBwcmVmaXggJ212JyBhbmQKK3RoZSBkZXNpcmVkICh5LCB4KSBjb29yZGluYXRlcyBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uICBGb3IKK2V4YW1wbGUsIHRoZSBjYWxscworCis8UFJFPgorCSAgbW92ZSh5LCB4KTsKKwkgIGFkZGNoKGNoKTsKKzwvUFJFPgorCitjYW4gYmUgcmVwbGFjZWQgYnkKKworPFBSRT4KKwkgIG12YWRkY2goeSwgeCwgY2gpOworPC9QUkU+CisKK2FuZAorCis8UFJFPgorCSAgd21vdmUod2luLCB5LCB4KTsKKwkgIHdhZGRjaCh3aW4sIGNoKTsKKzwvUFJFPgorCitjYW4gYmUgcmVwbGFjZWQgYnkKKworPFBSRT4KKwkgIG12d2FkZGNoKHdpbiwgeSwgeCwgY2gpOworPC9QUkU+CisKK05vdGUgdGhhdCB0aGUgd2luZG93IGRlc2NyaXB0aW9uIHBvaW50ZXIgKHdpbikgY29tZXMgYmVmb3JlIHRoZSBhZGRlZCAoeSwgeCkKK2Nvb3JkaW5hdGVzLiAgSWYgYSBmdW5jdGlvbiByZXF1aXJlcyBhIHdpbmRvdyBwb2ludGVyLCBpdCBpcyBhbHdheXMgdGhlIGZpcnN0CitwYXJhbWV0ZXIgcGFzc2VkLgorCis8SDM+PEEgTkFNRT0idmFyaWFibGVzIj5WYXJpYWJsZXM8L0E+PC9IMz4KKworVGhlIDxDT0RFPmN1cnNlczwvQ09ERT4gbGlicmFyeSBzZXRzIHNvbWUgdmFyaWFibGVzIGRlc2NyaWJpbmcgdGhlIHRlcm1pbmFsCitjYXBhYmlsaXRpZXMuCisKKzxQUkU+CisgICAgICB0eXBlICAgbmFtZSAgICAgIGRlc2NyaXB0aW9uCisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIGludCAgICBMSU5FUyAgICAgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSB0ZXJtaW5hbAorICAgICAgaW50ICAgIENPTFMgICAgICBudW1iZXIgb2YgY29sdW1ucyBvbiB0aGUgdGVybWluYWwKKzwvUFJFPgorCitUaGUgPENPREU+Y3Vyc2VzLmg8L0NPREU+IGFsc28gaW50cm9kdWNlcyBzb21lIDxDT0RFPiNkZWZpbmU8L0NPREU+IGNvbnN0YW50cyBhbmQgdHlwZXMKK29mIGdlbmVyYWwgdXNlZnVsbmVzczoKKworPERMPgorPERUPiA8Q09ERT5ib29sPC9DT0RFPgorPEREPiBib29sZWFuIHR5cGUsIGFjdHVhbGx5IGEgYGNoYXInIChlLmcuLCA8Q09ERT5ib29sIGRvbmVpdDs8L0NPREU+KQorPERUPiA8Q09ERT5UUlVFPC9DT0RFPgorPEREPiBib29sZWFuIGB0cnVlJyBmbGFnICgxKS4KKzxEVD4gPENPREU+RkFMU0U8L0NPREU+Cis8REQ+IGJvb2xlYW4gYGZhbHNlJyBmbGFnICgwKS4KKzxEVD4gPENPREU+RVJSPC9DT0RFPgorPEREPiBlcnJvciBmbGFnIHJldHVybmVkIGJ5IHJvdXRpbmVzIG9uIGEgZmFpbHVyZSAoLTEpLgorPERUPiA8Q09ERT5PSzwvQ09ERT4KKzxERD4gZXJyb3IgZmxhZyByZXR1cm5lZCBieSByb3V0aW5lcyB3aGVuIHRoaW5ncyBnbyByaWdodC4KKzwvREw+CisKKzxIMj48QSBOQU1FPSJ1c2luZyI+VXNpbmcgdGhlIExpYnJhcnk8L0E+PC9IMj4KKworTm93IHdlIGRlc2NyaWJlIGhvdyB0byBhY3R1YWxseSB1c2UgdGhlIHNjcmVlbiBwYWNrYWdlLiAgSW4gaXQsIHdlIGFzc3VtZSBhbGwKK3VwZGF0aW5nLCByZWFkaW5nLCBldGMuIGlzIGFwcGxpZWQgdG8gPENPREU+c3Rkc2NyPC9DT0RFPi4gIFRoZXNlIGluc3RydWN0aW9ucyB3aWxsCit3b3JrIG9uIGFueSB3aW5kb3csIHByb3ZpZGluZyB5b3UgY2hhbmdlIHRoZSBmdW5jdGlvbiBuYW1lcyBhbmQgcGFyYW1ldGVycyBhcworbWVudGlvbmVkIGFib3ZlLiA8UD4KKworSGVyZSBpcyBhIHNhbXBsZSBwcm9ncmFtIHRvIG1vdGl2YXRlIHRoZSBkaXNjdXNzaW9uOgorCis8UFJFPgorI2luY2x1ZGUgJmx0O2N1cnNlcy5oJmd0OworI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OworCitzdGF0aWMgdm9pZCBmaW5pc2goaW50IHNpZyk7CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBudW0gPSAwOworCisgICAgLyogaW5pdGlhbGl6ZSB5b3VyIG5vbi1jdXJzZXMgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUgKi8KKworICAgICh2b2lkKSBzaWduYWwoU0lHSU5ULCBmaW5pc2gpOyAgICAgIC8qIGFycmFuZ2UgaW50ZXJydXB0cyB0byB0ZXJtaW5hdGUgKi8KKworICAgICh2b2lkKSBpbml0c2NyKCk7ICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgY3Vyc2VzIGxpYnJhcnkgKi8KKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsgIC8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIG5vbmwoKTsgICAgICAgICAvKiB0ZWxsIGN1cnNlcyBub3QgdG8gZG8gTkwtJmd0O0NSL05MIG9uIG91dHB1dCAqLworICAgICh2b2lkKSBjYnJlYWsoKTsgICAgICAgLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBlY2hvKCk7ICAgICAgICAgLyogZWNobyBpbnB1dCAtIGluIGNvbG9yICovCisKKyAgICBpZiAoaGFzX2NvbG9ycygpKQorICAgIHsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBTaW1wbGUgY29sb3IgYXNzaWdubWVudCwgb2Z0ZW4gYWxsIHdlIG5lZWQuICBDb2xvciBwYWlyIDAgY2Fubm90CisJICogYmUgcmVkZWZpbmVkLiAgVGhpcyBleGFtcGxlIHVzZXMgdGhlIHNhbWUgdmFsdWUgZm9yIHRoZSBjb2xvcgorCSAqIHBhaXIgYXMgZm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yLCB0aG91Z2ggb2YgY291cnNlIHRoYXQgaXMgbm90CisJICogbmVjZXNzYXJ5OgorICAgICAgICAgKi8KKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgICAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDIsIENPTE9SX0dSRUVOLCAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDMsIENPTE9SX1lFTExPVywgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDQsIENPTE9SX0JMVUUsICAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDUsIENPTE9SX0NZQU4sICAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDYsIENPTE9SX01BR0VOVEEsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDcsIENPTE9SX1dISVRFLCAgIENPTE9SX0JMQUNLKTsKKyAgICB9CisKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgICAgaW50IGMgPSBnZXRjaCgpOyAgICAgLyogcmVmcmVzaCwgYWNjZXB0IHNpbmdsZSBrZXlzdHJva2Ugb2YgaW5wdXQgKi8KKwlhdHRyc2V0KENPTE9SX1BBSVIobnVtICUgOCkpOworCW51bSsrOworCisgICAgICAgIC8qIHByb2Nlc3MgdGhlIGNvbW1hbmQga2V5c3Ryb2tlICovCisgICAgfQorCisgICAgZmluaXNoKDApOyAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgKi8KK30KKworc3RhdGljIHZvaWQgZmluaXNoKGludCBzaWcpCit7CisgICAgZW5kd2luKCk7CisKKyAgICAvKiBkbyB5b3VyIG5vbi1jdXJzZXMgd3JhcHVwIGhlcmUgKi8KKworICAgIGV4aXQoMCk7Cit9Cis8L1BSRT4KKworPEgzPjxBIE5BTUU9InN0YXJ0aW5nIj5TdGFydGluZyB1cDwvQT48L0gzPgorCitJbiBvcmRlciB0byB1c2UgdGhlIHNjcmVlbiBwYWNrYWdlLCB0aGUgcm91dGluZXMgbXVzdCBrbm93IGFib3V0IHRlcm1pbmFsCitjaGFyYWN0ZXJpc3RpY3MsIGFuZCB0aGUgc3BhY2UgZm9yIDxDT0RFPmN1cnNjcjwvQ09ERT4gYW5kIDxDT0RFPnN0ZHNjcjwvQ09ERT4gbXVzdCBiZQorYWxsb2NhdGVkLiAgVGhlc2UgZnVuY3Rpb24gPENPREU+aW5pdHNjcigpPC9DT0RFPiBkb2VzIGJvdGggdGhlc2UgdGhpbmdzLiBTaW5jZSBpdAorbXVzdCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHdpbmRvd3MsIGl0IGNhbiBvdmVyZmxvdyBtZW1vcnkgd2hlbiBhdHRlbXB0aW5nIHRvCitkbyBzby4gT24gdGhlIHJhcmUgb2NjYXNpb25zIHRoaXMgaGFwcGVucywgPENPREU+aW5pdHNjcigpPC9DT0RFPiB3aWxsIHRlcm1pbmF0ZQordGhlIHByb2dyYW0gd2l0aCBhbiBlcnJvciBtZXNzYWdlLiAgPENPREU+aW5pdHNjcigpPC9DT0RFPiBtdXN0IGFsd2F5cyBiZSBjYWxsZWQKK2JlZm9yZSBhbnkgb2YgdGhlIHJvdXRpbmVzIHdoaWNoIGFmZmVjdCB3aW5kb3dzIGFyZSB1c2VkLiAgSWYgaXQgaXMgbm90LCB0aGUKK3Byb2dyYW0gd2lsbCBjb3JlIGR1bXAgYXMgc29vbiBhcyBlaXRoZXIgPENPREU+Y3Vyc2NyPC9DT0RFPiBvciA8Q09ERT5zdGRzY3I8L0NPREU+IGFyZQorcmVmZXJlbmNlZC4gIEhvd2V2ZXIsIGl0IGlzIHVzdWFsbHkgYmVzdCB0byB3YWl0IHRvIGNhbGwgaXQgdW50aWwgYWZ0ZXIgeW91IGFyZQorc3VyZSB5b3Ugd2lsbCBuZWVkIGl0LCBsaWtlIGFmdGVyIGNoZWNraW5nIGZvciBzdGFydHVwIGVycm9ycy4gIFRlcm1pbmFsIHN0YXR1cworY2hhbmdpbmcgcm91dGluZXMgbGlrZSA8Q09ERT5ubCgpPC9DT0RFPiBhbmQgPENPREU+Y2JyZWFrKCk8L0NPREU+IHNob3VsZCBiZSBjYWxsZWQKK2FmdGVyIDxDT0RFPmluaXRzY3IoKTwvQ09ERT4uIDxQPgorCitPbmNlIHRoZSBzY3JlZW4gd2luZG93cyBoYXZlIGJlZW4gYWxsb2NhdGVkLCB5b3UgY2FuIHNldCB0aGVtIHVwIGZvcgoreW91ciBwcm9ncmFtLiAgSWYgeW91IHdhbnQgdG8sIHNheSwgYWxsb3cgYSBzY3JlZW4gdG8gc2Nyb2xsLCB1c2UKKzxDT0RFPnNjcm9sbG9rKCk8L0NPREU+LiAgSWYgeW91IHdhbnQgdGhlIGN1cnNvciB0byBiZSBsZWZ0IGluIHBsYWNlIGFmdGVyCit0aGUgbGFzdCBjaGFuZ2UsIHVzZSA8Q09ERT5sZWF2ZW9rKCk8L0NPREU+LiAgSWYgdGhpcyBpc24ndCBkb25lLAorPENPREU+cmVmcmVzaCgpPC9DT0RFPiB3aWxsIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgd2luZG93J3MgY3VycmVudCAoeSwgeCkKK2Nvb3JkaW5hdGVzIGFmdGVyIHVwZGF0aW5nIGl0LiA8UD4KKworWW91IGNhbiBjcmVhdGUgbmV3IHdpbmRvd3Mgb2YgeW91ciBvd24gdXNpbmcgdGhlIGZ1bmN0aW9ucyA8Q09ERT5uZXd3aW4oKTwvQ09ERT4sCis8Q09ERT5kZXJ3aW4oKTwvQ09ERT4sIGFuZCA8Q09ERT5zdWJ3aW4oKTwvQ09ERT4uICBUaGUgcm91dGluZSA8Q09ERT5kZWx3aW4oKTwvQ09ERT4gd2lsbAorYWxsb3cgeW91IHRvIGdldCByaWQgb2Ygb2xkIHdpbmRvd3MuICBBbGwgdGhlIG9wdGlvbnMgZGVzY3JpYmVkIGFib3ZlIGNhbiBiZQorYXBwbGllZCB0byBhbnkgd2luZG93LgorCis8SDM+PEEgTkFNRT0ib3V0cHV0Ij5PdXRwdXQ8L0E+PC9IMz4KKworTm93IHRoYXQgd2UgaGF2ZSBzZXQgdGhpbmdzIHVwLCB3ZSB3aWxsIHdhbnQgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSB0ZXJtaW5hbC4KK1RoZSBiYXNpYyBmdW5jdGlvbnMgdXNlZCB0byBjaGFuZ2Ugd2hhdCB3aWxsIGdvIG9uIGEgd2luZG93IGFyZQorPENPREU+YWRkY2goKTwvQ09ERT4gYW5kIDxDT0RFPm1vdmUoKTwvQ09ERT4uICA8Q09ERT5hZGRjaCgpPC9DT0RFPiBhZGRzIGEgY2hhcmFjdGVyIGF0IHRoZQorY3VycmVudCAoeSwgeCkgY29vcmRpbmF0ZXMuICA8Q09ERT5tb3ZlKCk8L0NPREU+IGNoYW5nZXMgdGhlIGN1cnJlbnQgKHksIHgpCitjb29yZGluYXRlcyB0byB3aGF0ZXZlciB5b3Ugd2FudCB0aGVtIHRvIGJlLiAgSXQgcmV0dXJucyA8Q09ERT5FUlI8L0NPREU+IGlmIHlvdQordHJ5IHRvIG1vdmUgb2ZmIHRoZSB3aW5kb3cuICBBcyBtZW50aW9uZWQgYWJvdmUsIHlvdSBjYW4gY29tYmluZSB0aGUgdHdvIGludG8KKzxDT0RFPm12YWRkY2goKTwvQ09ERT4gdG8gZG8gYm90aCB0aGluZ3MgYXQgb25jZS4gPFA+CisKK1RoZSBvdGhlciBvdXRwdXQgZnVuY3Rpb25zLCBzdWNoIGFzIDxDT0RFPmFkZHN0cigpPC9DT0RFPiBhbmQgPENPREU+cHJpbnR3KCk8L0NPREU+LAorYWxsIGNhbGwgPENPREU+YWRkY2goKTwvQ09ERT4gdG8gYWRkIGNoYXJhY3RlcnMgdG8gdGhlIHdpbmRvdy4gPFA+CisKK0FmdGVyIHlvdSBoYXZlIHB1dCBvbiB0aGUgd2luZG93IHdoYXQgeW91IHdhbnQgdGhlcmUsIHdoZW4geW91IHdhbnQgdGhlIHBvcnRpb24KK29mIHRoZSB0ZXJtaW5hbCBjb3ZlcmVkIGJ5IHRoZSB3aW5kb3cgdG8gYmUgbWFkZSB0byBsb29rIGxpa2UgaXQsIHlvdSBtdXN0IGNhbGwKKzxDT0RFPnJlZnJlc2goKTwvQ09ERT4uICBJbiBvcmRlciB0byBvcHRpbWl6ZSBmaW5kaW5nIGNoYW5nZXMsIDxDT0RFPnJlZnJlc2goKTwvQ09ERT4KK2Fzc3VtZXMgdGhhdCBhbnkgcGFydCBvZiB0aGUgd2luZG93IG5vdCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0Cis8Q09ERT5yZWZyZXNoKCk8L0NPREU+IG9mIHRoYXQgd2luZG93IGhhcyBub3QgYmVlbiBjaGFuZ2VkIG9uIHRoZSB0ZXJtaW5hbCwgaS5lLiwKK3RoYXQgeW91IGhhdmUgbm90IHJlZnJlc2hlZCBhIHBvcnRpb24gb2YgdGhlIHRlcm1pbmFsIHdpdGggYW4gb3ZlcmxhcHBpbmcKK3dpbmRvdy4gIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB0aGUgcm91dGluZSA8Q09ERT50b3VjaHdpbigpPC9DT0RFPiBpcyBwcm92aWRlZAordG8gbWFrZSBpdCBsb29rIGxpa2UgdGhlIGVudGlyZSB3aW5kb3cgaGFzIGJlZW4gY2hhbmdlZCwgdGh1cyBtYWtpbmcKKzxDT0RFPnJlZnJlc2goKTwvQ09ERT4gY2hlY2sgdGhlIHdob2xlIHN1YnNlY3Rpb24gb2YgdGhlIHRlcm1pbmFsIGZvciBjaGFuZ2VzLiA8UD4KKworSWYgeW91IGNhbGwgPENPREU+d3JlZnJlc2goKTwvQ09ERT4gd2l0aCA8Q09ERT5jdXJzY3I8L0NPREU+IGFzIGl0cyBhcmd1bWVudCwgaXQgd2lsbAorbWFrZSB0aGUgc2NyZWVuIGxvb2sgbGlrZSA8Q09ERT5jdXJzY3I8L0NPREU+IHRoaW5rcyBpdCBsb29rcyBsaWtlLiAgVGhpcyBpcyB1c2VmdWwKK2ZvciBpbXBsZW1lbnRpbmcgYSBjb21tYW5kIHdoaWNoIHdvdWxkIHJlZHJhdyB0aGUgc2NyZWVuIGluIGNhc2UgaXQgZ2V0IG1lc3NlZAordXAuCisKKzxIMz48QSBOQU1FPSJpbnB1dCI+SW5wdXQ8L0E+PC9IMz4KKworVGhlIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb24gdG8gPENPREU+YWRkY2goKTwvQ09ERT4gaXMgPENPREU+Z2V0Y2goKTwvQ09ERT4gd2hpY2gsIGlmCitlY2hvIGlzIHNldCwgd2lsbCBjYWxsIDxDT0RFPmFkZGNoKCk8L0NPREU+IHRvIGVjaG8gdGhlIGNoYXJhY3Rlci4gIFNpbmNlIHRoZQorc2NyZWVuIHBhY2thZ2UgbmVlZHMgdG8ga25vdyB3aGF0IGlzIG9uIHRoZSB0ZXJtaW5hbCBhdCBhbGwgdGltZXMsIGlmCitjaGFyYWN0ZXJzIGFyZSB0byBiZSBlY2hvZWQsIHRoZSB0dHkgbXVzdCBiZSBpbiByYXcgb3IgY2JyZWFrIG1vZGUuICBTaW5jZQoraW5pdGlhbGx5IHRoZSB0ZXJtaW5hbCBoYXMgZWNob2luZyBlbmFibGVkIGFuZCBpcyBpbiBvcmRpbmFyeSBgYGNvb2tlZCcnIG1vZGUsCitvbmUgb3IgdGhlIG90aGVyIGhhcyB0byBjaGFuZ2VkIGJlZm9yZSBjYWxsaW5nIDxDT0RFPmdldGNoKCk8L0NPREU+OyBvdGhlcndpc2UsCit0aGUgcHJvZ3JhbSdzIG91dHB1dCB3aWxsIGJlIHVucHJlZGljdGFibGUuIDxQPgorCitXaGVuIHlvdSBuZWVkIHRvIGFjY2VwdCBsaW5lLW9yaWVudGVkIGlucHV0IGluIGEgd2luZG93LCB0aGUgZnVuY3Rpb25zCis8Q09ERT53Z2V0c3RyKCk8L0NPREU+IGFuZCBmcmllbmRzIGFyZSBhdmFpbGFibGUuICBUaGVyZSBpcyBldmVuIGEgPENPREU+d3NjYW53KCk8L0NPREU+CitmdW5jdGlvbiB0aGF0IGNhbiBkbyA8Q09ERT5zY2FuZigpPC9DT0RFPigzKS1zdHlsZSBtdWx0aS1maWVsZCBwYXJzaW5nIG9uIHdpbmRvdworaW5wdXQuICBUaGVzZSBwc2V1ZG8tbGluZS1vcmllbnRlZCBmdW5jdGlvbnMgdHVybiBvbiBlY2hvaW5nIHdoaWxlIHRoZXkKK2V4ZWN1dGUuIDxQPgorCitUaGUgZXhhbXBsZSBjb2RlIGFib3ZlIHVzZXMgdGhlIGNhbGwgPENPREU+a2V5cGFkKHN0ZHNjciwgVFJVRSk8L0NPREU+IHRvIGVuYWJsZQorc3VwcG9ydCBmb3IgZnVuY3Rpb24ta2V5IG1hcHBpbmcuICBXaXRoIHRoaXMgZmVhdHVyZSwgdGhlIDxDT0RFPmdldGNoKCk8L0NPREU+IGNvZGUKK3dhdGNoZXMgdGhlIGlucHV0IHN0cmVhbSBmb3IgY2hhcmFjdGVyIHNlcXVlbmNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gYXJyb3cgYW5kCitmdW5jdGlvbiBrZXlzLiAgVGhlc2Ugc2VxdWVuY2VzIGFyZSByZXR1cm5lZCBhcyBwc2V1ZG8tY2hhcmFjdGVyIHZhbHVlcy4gIFRoZQorPENPREU+I2RlZmluZTwvQ09ERT4gdmFsdWVzIHJldHVybmVkIGFyZSBsaXN0ZWQgaW4gdGhlIDxDT0RFPmN1cnNlcy5oPC9DT0RFPiBUaGUKK21hcHBpbmcgZnJvbSBzZXF1ZW5jZXMgdG8gPENPREU+I2RlZmluZTwvQ09ERT4gdmFsdWVzIGlzIGRldGVybWluZWQgYnkKKzxDT0RFPmtleV88L0NPREU+IGNhcGFiaWxpdGllcyBpbiB0aGUgdGVybWluYWwncyB0ZXJtaW5mbyBlbnRyeS4KKworPEgzPjxBIE5BTUU9ImZvcm1zY2hhcnMiPlVzaW5nIEZvcm1zIENoYXJhY3RlcnM8L0E+PC9IMz4KKworVGhlIDxDT0RFPmFkZGNoKCk8L0NPREU+IGZ1bmN0aW9uIChhbmQgc29tZSBvdGhlcnMsIGluY2x1ZGluZyA8Q09ERT5ib3goKTwvQ09ERT4gYW5kCis8Q09ERT5ib3JkZXIoKTwvQ09ERT4pIGNhbiBhY2NlcHQgc29tZSBwc2V1ZG8tY2hhcmFjdGVyIGFyZ3VtZW50cyB3aGljaCBhcmUgc3BlY2lhbGx5CitkZWZpbmVkIGJ5IDxDT0RFPm5jdXJzZXM8L0NPREU+LiAgVGhlc2UgYXJlIDxDT0RFPiNkZWZpbmU8L0NPREU+IHZhbHVlcyBzZXQgdXAgaW4KK3RoZSA8Q09ERT5jdXJzZXMuaDwvQ09ERT4gaGVhZGVyOyBzZWUgdGhlcmUgZm9yIGEgY29tcGxldGUgbGlzdCAobG9vayBmb3IKK3RoZSBwcmVmaXggPENPREU+QUNTXzwvQ09ERT4pLiA8UD4KKworVGhlIG1vc3QgdXNlZnVsIG9mIHRoZSBBQ1MgZGVmaW5lcyBhcmUgdGhlIGZvcm1zLWRyYXdpbmcgY2hhcmFjdGVycy4gIFlvdSBjYW4KK3VzZSB0aGVzZSB0byBkcmF3IGJveGVzIGFuZCBzaW1wbGUgZ3JhcGhzIG9uIHRoZSBzY3JlZW4uICBJZiB0aGUgdGVybWluYWwKK2RvZXMgbm90IGhhdmUgc3VjaCBjaGFyYWN0ZXJzLCA8Q09ERT5jdXJzZXMuaDwvQ09ERT4gd2lsbCBtYXAgdGhlbSB0byBhCityZWNvZ25pemFibGUgKHRob3VnaCB1Z2x5KSBzZXQgb2YgQVNDSUkgZGVmYXVsdHMuCisKKzxIMz48QSBOQU1FPSJhdHRyaWJ1dGVzIj5DaGFyYWN0ZXIgQXR0cmlidXRlcyBhbmQgQ29sb3I8L0E+PC9IMz4KKworVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IHBhY2thZ2Ugc3VwcG9ydHMgc2NyZWVuIGhpZ2hsaWdodHMgaW5jbHVkaW5nIHN0YW5kb3V0LAorcmV2ZXJzZS12aWRlbywgdW5kZXJsaW5lLCBhbmQgYmxpbmsuICBJdCBhbHNvIHN1cHBvcnRzIGNvbG9yLCB3aGljaCBpcyB0cmVhdGVkCithcyBhbm90aGVyIGtpbmQgb2YgaGlnaGxpZ2h0LiA8UD4KKworSGlnaGxpZ2h0cyBhcmUgZW5jb2RlZCwgaW50ZXJuYWxseSwgYXMgaGlnaCBiaXRzIG9mIHRoZSBwc2V1ZG8tY2hhcmFjdGVyIHR5cGUKKyg8Q09ERT5jaHR5cGU8L0NPREU+KSB0aGF0IDxDT0RFPmN1cnNlcy5oPC9DT0RFPiB1c2VzIHRvIHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgYQorc2NyZWVuIGNlbGwuICBTZWUgdGhlIDxDT0RFPmN1cnNlcy5oPC9DT0RFPiBoZWFkZXIgZmlsZSBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mCitoaWdobGlnaHQgbWFzayB2YWx1ZXMgKGxvb2sgZm9yIHRoZSBwcmVmaXggPENPREU+QV88L0NPREU+KS48UD4KKworVGhlcmUgYXJlIHR3byB3YXlzIHRvIG1ha2UgaGlnaGxpZ2h0cy4gIE9uZSBpcyB0byBsb2dpY2FsLW9yIHRoZSB2YWx1ZSBvZiB0aGUKK2hpZ2hsaWdodHMgeW91IHdhbnQgaW50byB0aGUgY2hhcmFjdGVyIGFyZ3VtZW50IG9mIGFuIDxDT0RFPmFkZGNoKCk8L0NPREU+IGNhbGwsCitvciBhbnkgb3RoZXIgb3V0cHV0IGNhbGwgdGhhdCB0YWtlcyBhIDxDT0RFPmNodHlwZTwvQ09ERT4gYXJndW1lbnQuIDxQPgorCitUaGUgb3RoZXIgaXMgdG8gc2V0IHRoZSBjdXJyZW50LWhpZ2hsaWdodCB2YWx1ZS4gIFRoaXMgaXMgbG9naWNhbC1vcidlZCB3aXRoCithbnkgaGlnaGxpZ2h0IHlvdSBzcGVjaWZ5IHRoZSBmaXJzdCB3YXkuICBZb3UgZG8gdGhpcyB3aXRoIHRoZSBmdW5jdGlvbnMKKzxDT0RFPmF0dHJvbigpPC9DT0RFPiwgPENPREU+YXR0cm9mZigpPC9DT0RFPiwgYW5kIDxDT0RFPmF0dHJzZXQoKTwvQ09ERT47IHNlZSB0aGUgbWFudWFsCitwYWdlcyBmb3IgZGV0YWlscy4KKworQ29sb3IgaXMgYSBzcGVjaWFsIGtpbmQgb2YgaGlnaGxpZ2h0LiAgVGhlIHBhY2thZ2UgYWN0dWFsbHkgdGhpbmtzIGluIHRlcm1zCitvZiBjb2xvciBwYWlycywgY29tYmluYXRpb25zIG9mIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzLiAgVGhlIHNhbXBsZQorY29kZSBhYm92ZSBzZXRzIHVwIGVpZ2h0IGNvbG9yIHBhaXJzLCBhbGwgb2YgdGhlIGd1YXJhbnRlZWQtYXZhaWxhYmxlIGNvbG9ycworb24gYmxhY2suICBOb3RlIHRoYXQgZWFjaCBjb2xvciBwYWlyIGlzLCBpbiBlZmZlY3QsIGdpdmVuIHRoZSBuYW1lIG9mIGl0cworZm9yZWdyb3VuZCBjb2xvci4gIEFueSBvdGhlciByYW5nZSBvZiBlaWdodCBub24tY29uZmxpY3RpbmcgdmFsdWVzIGNvdWxkCitoYXZlIGJlZW4gdXNlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnRzIG9mIHRoZSA8Q09ERT5pbml0X3BhaXIoKTwvQ09ERT4gdmFsdWVzLiA8UD4KKworT25jZSB5b3UndmUgZG9uZSBhbiA8Q09ERT5pbml0X3BhaXIoKTwvQ09ERT4gdGhhdCBjcmVhdGVzIGNvbG9yLXBhaXIgTiwgeW91IGNhbgordXNlIDxDT0RFPkNPTE9SX1BBSVIoTik8L0NPREU+IGFzIGEgaGlnaGxpZ2h0IHRoYXQgaW52b2tlcyB0aGF0IHBhcnRpY3VsYXIKK2NvbG9yIGNvbWJpbmF0aW9uLiAgTm90ZSB0aGF0IDxDT0RFPkNPTE9SX1BBSVIoTik8L0NPREU+LCBmb3IgY29uc3RhbnQgTiwKK2lzIGl0c2VsZiBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBhbmQgY2FuIGJlIHVzZWQgaW4gaW5pdGlhbGl6ZXJzLgorCis8SDM+PEEgTkFNRT0ibW91c2UiPk1vdXNlIEludGVyZmFjaW5nPC9BPjwvSDM+CisKK1RoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgYSBtb3VzZSBpbnRlcmZhY2UuCis8IS0tIFRoZSAnbm90ZScgdGFnIGlzIG5vdCBwb3J0YWJsZSBlbm91Z2ggLS0+Cis8YmxvY2txdW90ZT4KKzxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gdGhpcyBmYWNpbGl0eSBpcyBzcGVjaWZpYyB0byA8Q09ERT5uY3Vyc2VzPC9DT0RFPiwgaXQgaXMgbm90IHBhcnQgb2YgZWl0aGVyCit0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgbm9yIG9mIFN5c3RlbSBWIFJlbGVhc2UgNCwgbm9yIEJTRCBjdXJzZXMuCitTeXN0ZW0gViBSZWxlYXNlIDQgY3Vyc2VzIGNvbnRhaW5zIGNvZGUgd2l0aCBzaW1pbGFyIGludGVyZmFjZSBkZWZpbml0aW9ucywKK2hvd2V2ZXIgaXQgaXMgbm90IGRvY3VtZW50ZWQuICBPdGhlciB0aGFuIGJ5IGRpc2Fzc2VtYmxpbmcgdGhlIGxpYnJhcnksIHdlCitoYXZlIG5vIHdheSB0byBkZXRlcm1pbmUgZXhhY3RseSBob3cgdGhhdCBtb3VzZSBjb2RlIHdvcmtzLgorVGh1cywgd2UgcmVjb21tZW5kIHRoYXQgeW91IHdyYXAgbW91c2UtcmVsYXRlZCBjb2RlIGluIGFuICNpZmRlZiB1c2luZyB0aGUKK2ZlYXR1cmUgbWFjcm8gTkNVUlNFU19NT1VTRV9WRVJTSU9OIHNvIGl0IHdpbGwgbm90IGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQKK29uIG5vbi1uY3Vyc2VzIHN5c3RlbXMuCis8L2Jsb2NrcXVvdGU+CisKK1ByZXNlbnRseSwgbW91c2UgZXZlbnQgcmVwb3J0aW5nIHdvcmtzIGluIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnRzOgorPHVsPgorPGxpPnh0ZXJtIGFuZCBzaW1pbGFyIHByb2dyYW1zIHN1Y2ggYXMgcnh2dC4KKzxsaT5MaW51eCBjb25zb2xlLCB3aGVuIGNvbmZpZ3VyZWQgd2l0aCA8Q09ERT5ncG08L0NPREU+KDEpLCBBbGVzc2FuZHJvCitSdWJpbmkncyBtb3VzZSBzZXJ2ZXIuCis8bGk+RnJlZUJTRCBzeXNtb3VzZSAoY29uc29sZSkKKzxsaT5PUy8yIEVNWAorPC91bD4KKzxQPgorVGhlIG1vdXNlIGludGVyZmFjZSBpcyB2ZXJ5IHNpbXBsZS4gIFRvIGFjdGl2YXRlIGl0LCB5b3UgdXNlIHRoZSBmdW5jdGlvbgorPENPREU+bW91c2VtYXNrKCk8L0NPREU+LCBwYXNzaW5nIGl0IGFzIGZpcnN0IGFyZ3VtZW50IGEgYml0LW1hc2sgdGhhdCBzcGVjaWZpZXMKK3doYXQga2luZHMgb2YgZXZlbnRzIHlvdSB3YW50IHlvdXIgcHJvZ3JhbSB0byBiZSBhYmxlIHRvIHNlZS4gIEl0IHdpbGwKK3JldHVybiB0aGUgYml0LW1hc2sgb2YgZXZlbnRzIHRoYXQgYWN0dWFsbHkgYmVjb21lIHZpc2libGUsIHdoaWNoIG1heSBkaWZmZXIKK2Zyb20gdGhlIGFyZ3VtZW50IGlmIHRoZSBtb3VzZSBkZXZpY2UgaXMgbm90IGNhcGFibGUgb2YgcmVwb3J0aW5nIHNvbWUgb2YKK3RoZSBldmVudCB0eXBlcyB5b3Ugc3BlY2lmeS4gPFA+CisKK09uY2UgdGhlIG1vdXNlIGlzIGFjdGl2ZSwgeW91ciBhcHBsaWNhdGlvbidzIGNvbW1hbmQgbG9vcCBzaG91bGQgd2F0Y2gKK2ZvciBhIHJldHVybiB2YWx1ZSBvZiA8Q09ERT5LRVlfTU9VU0U8L0NPREU+IGZyb20gPENPREU+d2dldGNoKCk8L0NPREU+LiAgV2hlbgoreW91IHNlZSB0aGlzLCBhIG1vdXNlIGV2ZW50IHJlcG9ydCBoYXMgYmVlbiBxdWV1ZWQuICBUbyBwaWNrIGl0IG9mZgordGhlIHF1ZXVlLCB1c2UgdGhlIGZ1bmN0aW9uIDxDT0RFPmdldG1vdXNlKCk8L0NPREU+ICh5b3UgbXVzdCBkbyB0aGlzIGJlZm9yZQordGhlIG5leHQgPENPREU+d2dldGNoKCk8L0NPREU+LCBvdGhlcndpc2UgYW5vdGhlciBtb3VzZSBldmVudCBtaWdodCBjb21lCitpbiBhbmQgbWFrZSB0aGUgZmlyc3Qgb25lIGluYWNjZXNzaWJsZSkuIDxQPgorCitFYWNoIGNhbGwgdG8gPENPREU+Z2V0bW91c2UoKTwvQ09ERT4gZmlsbHMgYSBzdHJ1Y3R1cmUgKHRoZSBhZGRyZXNzIG9mIHdoaWNoIHlvdSdsbAorcGFzcyBpdCkgd2l0aCBtb3VzZSBldmVudCBkYXRhLiAgVGhlIGV2ZW50IGRhdGEgaW5jbHVkZXMgemVyby1vcmlnaW4sCitzY3JlZW4tcmVsYXRpdmUgY2hhcmFjdGVyLWNlbGwgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXIuICBJdCBhbHNvCitpbmNsdWRlcyBhbiBldmVudCBtYXNrLiAgQml0cyBpbiB0aGlzIG1hc2sgd2lsbCBiZSBzZXQsIGNvcnJlc3BvbmRpbmcKK3RvIHRoZSBldmVudCB0eXBlIGJlaW5nIHJlcG9ydGVkLiA8UD4KKworVGhlIG1vdXNlIHN0cnVjdHVyZSBjb250YWlucyB0d28gYWRkaXRpb25hbCBmaWVsZHMgd2hpY2ggbWF5IGJlCitzaWduaWZpY2FudCBpbiB0aGUgZnV0dXJlIGFzIG5jdXJzZXMgaW50ZXJmYWNlcyB0byBuZXcga2luZHMgb2YKK3BvaW50aW5nIGRldmljZS4gIEluIGFkZGl0aW9uIHRvIHggYW5kIHkgY29vcmRpbmF0ZXMsIHRoZXJlIGlzIGEgc2xvdAorZm9yIGEgeiBjb29yZGluYXRlOyB0aGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aXRoIHRvdWNoLXNjcmVlbnMgdGhhdCBjYW4KK3JldHVybiBhIHByZXNzdXJlIG9yIGR1cmF0aW9uIHBhcmFtZXRlci4gIFRoZXJlIGlzIGFsc28gYSBkZXZpY2UgSUQKK2ZpZWxkLCB3aGljaCBjb3VsZCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGlwbGUgcG9pbnRpbmcKK2RldmljZXMuIDxQPgorCitUaGUgY2xhc3Mgb2YgdmlzaWJsZSBldmVudHMgbWF5IGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgdmlhIDxDT0RFPm1vdXNlbWFzaygpPC9DT0RFPi4KK0V2ZW50cyB0aGF0IGNhbiBiZSByZXBvcnRlZCBpbmNsdWRlIHByZXNzZXMsIHJlbGVhc2VzLCBzaW5nbGUtLCBkb3VibGUtIGFuZAordHJpcGxlLWNsaWNrcyAoeW91IGNhbiBzZXQgdGhlIG1heGltdW0gYnV0dG9uLWRvd24gdGltZSBmb3IgY2xpY2tzKS4gIElmCit5b3UgZG9uJ3QgbWFrZSBjbGlja3MgdmlzaWJsZSwgdGhleSB3aWxsIGJlIHJlcG9ydGVkIGFzIHByZXNzLXJlbGVhc2UKK3BhaXJzLiAgSW4gc29tZSBlbnZpcm9ubWVudHMsIHRoZSBldmVudCBtYXNrIG1heSBpbmNsdWRlIGJpdHMgcmVwb3J0aW5nCit0aGUgc3RhdGUgb2Ygc2hpZnQsIGFsdCwgYW5kIGN0cmwga2V5cyBvbiB0aGUga2V5Ym9hcmQgZHVyaW5nIHRoZSBldmVudC4gPFA+CisKK0EgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBhIG1vdXNlIGV2ZW50IGZlbGwgd2l0aGluIGEgZ2l2ZW4gd2luZG93IGlzCithbHNvIHN1cHBsaWVkLiAgWW91IGNhbiB1c2UgdGhpcyB0byBzZWUgd2hldGhlciBhIGdpdmVuIHdpbmRvdyBzaG91bGQKK2NvbnNpZGVyIGEgbW91c2UgZXZlbnQgcmVsZXZhbnQgdG8gaXQuIDxQPgorCitCZWNhdXNlIG1vdXNlIGV2ZW50IHJlcG9ydGluZyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaW4gYWxsCitlbnZpcm9ubWVudHMsIGl0IHdvdWxkIGJlIHVud2lzZSB0byBidWlsZCA8Q09ERT5uY3Vyc2VzPC9DT0RFPgorYXBwbGljYXRpb25zIHRoYXQgPEVNPnJlcXVpcmU8L0VNPiB0aGUgdXNlIG9mIGEgbW91c2UuICBSYXRoZXIsIHlvdSBzaG91bGQKK3VzZSB0aGUgbW91c2UgYXMgYSBzaG9ydGN1dCBmb3IgcG9pbnQtYW5kLXNob290IGNvbW1hbmRzIHlvdXIgYXBwbGljYXRpb24KK3dvdWxkIG5vcm1hbGx5IGFjY2VwdCBmcm9tIHRoZSBrZXlib2FyZC4gIFR3byBvZiB0aGUgdGVzdCBnYW1lcyBpbiB0aGUKKzxDT0RFPm5jdXJzZXM8L0NPREU+IGRpc3RyaWJ1dGlvbiAoPENPREU+YnM8L0NPREU+IGFuZCA8Q09ERT5rbmlnaHQ8L0NPREU+KSBjb250YWluCitjb2RlIHRoYXQgaWxsdXN0cmF0ZXMgaG93IHRoaXMgY2FuIGJlIGRvbmUuIDxQPgorCitTZWUgdGhlIG1hbnVhbCBwYWdlIDxDT0RFPmN1cnNfbW91c2UoM1gpPC9DT0RFPiBmb3IgZnVsbCBkZXRhaWxzIG9mIHRoZQorbW91c2UtaW50ZXJmYWNlIGZ1bmN0aW9ucy4KKworPEgzPjxBIE5BTUU9ImZpbmlzaGluZyI+RmluaXNoaW5nIFVwPC9BPjwvSDM+CisKK0luIG9yZGVyIHRvIGNsZWFuIHVwIGFmdGVyIHRoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiByb3V0aW5lcywgdGhlIHJvdXRpbmUKKzxDT0RFPmVuZHdpbigpPC9DT0RFPiBpcyBwcm92aWRlZC4gIEl0IHJlc3RvcmVzIHR0eSBtb2RlcyB0byB3aGF0IHRoZXkgd2VyZSB3aGVuCis8Q09ERT5pbml0c2NyKCk8L0NPREU+IHdhcyBmaXJzdCBjYWxsZWQsIGFuZCBtb3ZlcyB0aGUgY3Vyc29yIGRvd24gdG8gdGhlCitsb3dlci1sZWZ0IGNvcm5lci4gIFRodXMsIGFueXRpbWUgYWZ0ZXIgdGhlIGNhbGwgdG8gaW5pdHNjciwgPENPREU+ZW5kd2luKCk8L0NPREU+CitzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBleGl0aW5nLgorCis8SDI+PEEgTkFNRT0iZnVuY3Rpb25zIj5GdW5jdGlvbiBEZXNjcmlwdGlvbnM8L0E+PC9IMj4KKworV2UgZGVzY3JpYmUgdGhlIGRldGFpbGVkIGJlaGF2aW9yIG9mIHNvbWUgaW1wb3J0YW50IGN1cnNlcyBmdW5jdGlvbnMgaGVyZSwgYXMgYQorc3VwcGxlbWVudCB0byB0aGUgbWFudWFsIHBhZ2UgZGVzY3JpcHRpb25zLgorCis8SDM+PEEgTkFNRT0iaW5pdCI+SW5pdGlhbGl6YXRpb24gYW5kIFdyYXB1cDwvQT48L0gzPgorCis8REw+Cis8RFQ+IDxDT0RFPmluaXRzY3IoKTwvQ09ERT4KKzxERD4gVGhlIGZpcnN0IGZ1bmN0aW9uIGNhbGxlZCBzaG91bGQgYWxtb3N0IGFsd2F5cyBiZSA8Q09ERT5pbml0c2NyKCk8L0NPREU+LgorVGhpcyB3aWxsIGRldGVybWluZSB0aGUgdGVybWluYWwgdHlwZSBhbmQKK2luaXRpYWxpemUgY3Vyc2VzIGRhdGEgc3RydWN0dXJlcy4gPENPREU+aW5pdHNjcigpPC9DT0RFPiBhbHNvIGFycmFuZ2VzIHRoYXQKK3RoZSBmaXJzdCBjYWxsIHRvIDxDT0RFPnJlZnJlc2goKTwvQ09ERT4gd2lsbCBjbGVhciB0aGUgc2NyZWVuLiAgSWYgYW4gZXJyb3IKK29jY3VycyBhIG1lc3NhZ2UgaXMgd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJvciBhbmQgdGhlIHByb2dyYW0KK2V4aXRzLiBPdGhlcndpc2UgaXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gc3Rkc2NyLiAgQSBmZXcgZnVuY3Rpb25zIG1heSBiZQorY2FsbGVkIGJlZm9yZSBpbml0c2NyICg8Q09ERT5zbGtfaW5pdCgpPC9DT0RFPiwgPENPREU+ZmlsdGVyKCk8L0NPREU+LAorPENPREU+cmlwb2ZmbGluZSgpPC9DT0RFPiwgPENPREU+dXNlX2VudigpPC9DT0RFPiwgYW5kLCBpZiB5b3UgYXJlIHVzaW5nIG11bHRpcGxlCit0ZXJtaW5hbHMsIDxDT0RFPm5ld3Rlcm0oKTwvQ09ERT4uKQorPERUPiA8Q09ERT5lbmR3aW4oKTwvQ09ERT4KKzxERD4gWW91ciBwcm9ncmFtIHNob3VsZCBhbHdheXMgY2FsbCA8Q09ERT5lbmR3aW4oKTwvQ09ERT4gYmVmb3JlIGV4aXRpbmcgb3IKK3NoZWxsaW5nIG91dCBvZiB0aGUgcHJvZ3JhbS4gVGhpcyBmdW5jdGlvbiB3aWxsIHJlc3RvcmUgdHR5IG1vZGVzLAorbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyZWVuLCByZXNldCB0aGUKK3Rlcm1pbmFsIGludG8gdGhlIHByb3BlciBub24tdmlzdWFsIG1vZGUuICBDYWxsaW5nIDxDT0RFPnJlZnJlc2goKTwvQ09ERT4KK29yIDxDT0RFPmRvdXBkYXRlKCk8L0NPREU+IGFmdGVyIGEgdGVtcG9yYXJ5IGVzY2FwZSBmcm9tIHRoZSBwcm9ncmFtIHdpbGwKK3Jlc3RvcmUgdGhlIG5jdXJzZXMgc2NyZWVuIGZyb20gYmVmb3JlIHRoZSBlc2NhcGUuCis8RFQ+IDxDT0RFPm5ld3Rlcm0odHlwZSwgb2ZwLCBpZnApPC9DT0RFPgorPEREPiBBIHByb2dyYW0gd2hpY2ggb3V0cHV0cyB0byBtb3JlIHRoYW4gb25lIHRlcm1pbmFsIHNob3VsZCB1c2UKKzxDT0RFPm5ld3Rlcm0oKTwvQ09ERT4gaW5zdGVhZCBvZiA8Q09ERT5pbml0c2NyKCk8L0NPREU+LiAgPENPREU+bmV3dGVybSgpPC9DT0RFPiBzaG91bGQKK2JlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRlcm1pbmFsLiAgSXQgcmV0dXJucyBhIHZhcmlhYmxlIG9mIHR5cGUKKzxDT0RFPlNDUkVFTiAqPC9DT0RFPiB3aGljaCBzaG91bGQgYmUgc2F2ZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhhdAordGVybWluYWwuCisoTk9URTogYSBTQ1JFRU4gdmFyaWFibGUgaXMgbm90IGEgPGVtPnNjcmVlbjwvZW0+IGluIHRoZSBzZW5zZSB3ZQorYXJlIGRlc2NyaWJpbmcgaW4gdGhpcyBpbnRyb2R1Y3Rpb24sIGJ1dCBhIGNvbGxlY3Rpb24gb2YgCitwYXJhbWV0ZXJzIHVzZWQgdG8gYXNzaXN0IGluIG9wdGltaXppbmcgdGhlIGRpc3BsYXkuKQorVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHR5cGUgb2YgdGhlIHRlcm1pbmFsIChhIHN0cmluZykgYW5kCis8Q09ERT5GSUxFPC9DT0RFPiBwb2ludGVycyBmb3IgdGhlIG91dHB1dCBhbmQgaW5wdXQgb2YgdGhlIHRlcm1pbmFsLiAgSWYKK3R5cGUgaXMgTlVMTCB0aGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8Q09ERT4kVEVSTTwvQ09ERT4gaXMgdXNlZC4KKzxDT0RFPmVuZHdpbigpPC9DT0RFPiBzaG91bGQgY2FsbGVkIG9uY2UgYXQgd3JhcHVwIHRpbWUgZm9yIGVhY2ggdGVybWluYWwKK29wZW5lZCB1c2luZyB0aGlzIGZ1bmN0aW9uLgorPERUPiA8Q09ERT5zZXRfdGVybShuZXcpPC9DT0RFPgorPEREPiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IHRlcm1pbmFsIHByZXZpb3VzbHkKK29wZW5lZCBieSA8Q09ERT5uZXd0ZXJtKCk8L0NPREU+LiAgVGhlIHNjcmVlbiByZWZlcmVuY2UgZm9yIHRoZSBuZXcgdGVybWluYWwKK2lzIHBhc3NlZCBhcyB0aGUgcGFyYW1ldGVyLiAgVGhlIHByZXZpb3VzIHRlcm1pbmFsIGlzIHJldHVybmVkIGJ5IHRoZQorZnVuY3Rpb24uICBBbGwgb3RoZXIgY2FsbHMgYWZmZWN0IG9ubHkgdGhlIGN1cnJlbnQgdGVybWluYWwuCis8RFQ+IDxDT0RFPmRlbHNjcmVlbihzcCk8L0NPREU+Cis8REQ+IFRoZSBpbnZlcnNlIG9mIDxDT0RFPm5ld3Rlcm0oKTwvQ09ERT47IGRlYWxsb2NhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMKK2Fzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIDxDT0RFPlNDUkVFTjwvQ09ERT4gcmVmZXJlbmNlLgorPC9ETD4KKworPEgzPjxBIE5BTUU9ImZsdXNoIj5DYXVzaW5nIE91dHB1dCB0byB0aGUgVGVybWluYWw8L0E+PC9IMz4KKworPERMPgorPERUPiA8Q09ERT5yZWZyZXNoKCk8L0NPREU+IGFuZCA8Q09ERT53cmVmcmVzaCh3aW4pPC9DT0RFPgorPEREPiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBiZSBjYWxsZWQgdG8gYWN0dWFsbHkgZ2V0IGFueSBvdXRwdXQgb24KK3RoZSAgdGVybWluYWwsICBhcyAgb3RoZXIgIHJvdXRpbmVzICBtZXJlbHkgIG1hbmlwdWxhdGUgZGF0YQorc3RydWN0dXJlcy4gIDxDT0RFPndyZWZyZXNoKCk8L0NPREU+IGNvcGllcyB0aGUgbmFtZWQgd2luZG93ICB0byB0aGUgcGh5c2ljYWwKK3Rlcm1pbmFsIHNjcmVlbiwgIHRha2luZyAgaW50byBhY2NvdW50ICB3aGF0IGlzIGFscmVhZHkKK3RoZXJlIGluICBvcmRlciB0byAgZG8gb3B0aW1pemF0aW9ucy4gIDxDT0RFPnJlZnJlc2goKTwvQ09ERT4gZG9lcyBhCityZWZyZXNoIG9mIDxDT0RFPnN0ZHNjcjwvQ09ERT4uICAgVW5sZXNzIDxDT0RFPmxlYXZlb2soKTwvQ09ERT4gaGFzIGJlZW4KK2VuYWJsZWQsIHRoZSBwaHlzaWNhbCBjdXJzb3Igb2YgdGhlIHRlcm1pbmFsIGlzIGxlZnQgYXQgIHRoZQorbG9jYXRpb24gb2YgdGhlIHdpbmRvdydzIGN1cnNvci4KKzxEVD4gPENPREU+ZG91cGRhdGUoKTwvQ09ERT4gYW5kIDxDT0RFPndub3V0cmVmcmVzaCh3aW4pPC9DT0RFPgorPEREPiBUaGVzZSB0d28gZnVuY3Rpb25zIGFsbG93IG11bHRpcGxlIHVwZGF0ZXMgd2l0aCBtb3JlIGVmZmljaWVuY3kKK3RoYW4gd3JlZnJlc2guICBUbyB1c2UgdGhlbSwgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IGN1cnNlcword29ya3MuICBJbiBhZGRpdGlvbiB0byBhbGwgdGhlIHdpbmRvdyBzdHJ1Y3R1cmVzLCBjdXJzZXMga2VlcHMgdHdvCitkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSB0ZXJtaW5hbCBzY3JlZW46IGEgcGh5c2ljYWwgc2NyZWVuLAorZGVzY3JpYmluZyB3aGF0IGlzIGFjdHVhbGx5IG9uIHRoZSBzY3JlZW4sIGFuZCBhIHZpcnR1YWwgc2NyZWVuLAorZGVzY3JpYmluZyB3aGF0IHRoZSBwcm9ncmFtbWVyIHdhbnRzIHRvIGhhdmUgb24gdGhlIHNjcmVlbi4gIHdyZWZyZXNoCit3b3JrcyBieSBmaXJzdCBjb3B5aW5nIHRoZSBuYW1lZCB3aW5kb3cgdG8gdGhlIHZpcnR1YWwgc2NyZWVuCisoPENPREU+d25vdXRyZWZyZXNoKCk8L0NPREU+KSwgYW5kIHRoZW4gY2FsbGluZyB0aGUgcm91dGluZSB0byB1cGRhdGUgdGhlCitzY3JlZW4gKDxDT0RFPmRvdXBkYXRlKCk8L0NPREU+KS4gIElmIHRoZSBwcm9ncmFtbWVyIHdpc2hlcyB0byBvdXRwdXQKK3NldmVyYWwgd2luZG93cyBhdCBvbmNlLCBhIHNlcmllcyBvZiBjYWxscyB0byA8Q09ERT53cmVmcmVzaDwvQ09ERT4gd2lsbCByZXN1bHQKK2luIGFsdGVybmF0aW5nIGNhbGxzIHRvIDxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiBhbmQgPENPREU+ZG91cGRhdGUoKTwvQ09ERT4sCitjYXVzaW5nIHNldmVyYWwgYnVyc3RzIG9mIG91dHB1dCB0byB0aGUgc2NyZWVuLiAgQnkgY2FsbGluZworPENPREU+d25vdXRyZWZyZXNoKCk8L0NPREU+IGZvciBlYWNoIHdpbmRvdywgaXQgaXMgdGhlbiBwb3NzaWJsZSB0byBjYWxsCis8Q09ERT5kb3VwZGF0ZSgpPC9DT0RFPiBvbmNlLCByZXN1bHRpbmcgaW4gb25seSBvbmUgYnVyc3Qgb2Ygb3V0cHV0LCB3aXRoCitmZXdlciB0b3RhbCBjaGFyYWN0ZXJzIHRyYW5zbWl0dGVkICh0aGlzIGFsc28gYXZvaWRzIGEgdmlzdWFsbHkgYW5ub3lpbmcKK2ZsaWNrZXIgYXQgZWFjaCB1cGRhdGUpLgorPC9ETD4KKworPEgzPjxBIE5BTUU9Imxvd2xldmVsIj5Mb3ctTGV2ZWwgQ2FwYWJpbGl0eSBBY2Nlc3M8L0E+PC9IMz4KKworPERMPgorPERUPiA8Q09ERT5zZXR1cHRlcm0odGVybSwgZmlsZW51bSwgZXJycmV0KTwvQ09ERT4KKzxERD4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBpbml0aWFsaXplIGEgdGVybWluYWwncyBkZXNjcmlwdGlvbiwgd2l0aG91dCBzZXR0aW5nCit1cCB0aGUgY3Vyc2VzIHNjcmVlbiBzdHJ1Y3R1cmVzIG9yIGNoYW5naW5nIHRoZSB0dHktZHJpdmVyIG1vZGUgYml0cy4KKzxDT0RFPnRlcm08L0NPREU+IGlzIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwKK2JlaW5nIHVzZWQuICA8Q09ERT5maWxlbnVtPC9DT0RFPiBpcyB0aGUgVU5JWCBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHRlcm1pbmFsIHRvCitiZSB1c2VkIGZvciBvdXRwdXQuICA8Q09ERT5lcnJyZXQ8L0NPREU+IGlzIGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyLCBpbiB3aGljaCBhCitzdWNjZXNzIG9yIGZhaWx1cmUgaW5kaWNhdGlvbiBpcyByZXR1cm5lZC4gIFRoZSB2YWx1ZXMgcmV0dXJuZWQgY2FuIGJlIDEgKGFsbAoraXMgd2VsbCksIDAgKG5vIHN1Y2ggdGVybWluYWwpLCBvciAtMSAoc29tZSBwcm9ibGVtIGxvY2F0aW5nIHRoZSB0ZXJtaW5mbworZGF0YWJhc2UpLiA8UD4KKworVGhlIHZhbHVlIG9mIDxDT0RFPnRlcm08L0NPREU+IGNhbiBiZSBnaXZlbiBhcyBOVUxMLCB3aGljaCB3aWxsIGNhdXNlIHRoZSB2YWx1ZSBvZgorPENPREU+VEVSTTwvQ09ERT4gaW4gdGhlIGVudmlyb25tZW50IHRvIGJlIHVzZWQuICBUaGUgPENPREU+ZXJycmV0PC9DT0RFPiBwb2ludGVyIGNhbgorYWxzbyBiZSBnaXZlbiBhcyBOVUxMLCBtZWFuaW5nIG5vIGVycm9yIGNvZGUgaXMgd2FudGVkLiAgSWYgPENPREU+ZXJycmV0PC9DT0RFPiBpcworZGVmYXVsdGVkLCBhbmQgc29tZXRoaW5nIGdvZXMgd3JvbmcsIDxDT0RFPnNldHVwdGVybSgpPC9DT0RFPiB3aWxsIHByaW50IGFuCithcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGFuZCBleGl0LCByYXRoZXIgdGhhbiByZXR1cm5pbmcuICBUaHVzLCBhIHNpbXBsZQorcHJvZ3JhbSBjYW4gY2FsbCBzZXR1cHRlcm0oMCwgMSwgMCkgYW5kIG5vdCB3b3JyeSBhYm91dCBpbml0aWFsaXphdGlvbgorZXJyb3JzLiA8UD4KKworQWZ0ZXIgdGhlIGNhbGwgdG8gPENPREU+c2V0dXB0ZXJtKCk8L0NPREU+LCB0aGUgZ2xvYmFsIHZhcmlhYmxlIDxDT0RFPmN1cl90ZXJtPC9DT0RFPiBpcworc2V0IHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBvZiB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMuIEJ5IGNhbGxpbmcKKzxDT0RFPnNldHVwdGVybSgpPC9DT0RFPiBmb3IgZWFjaCB0ZXJtaW5hbCwgYW5kIHNhdmluZyBhbmQgcmVzdG9yaW5nCis8Q09ERT5jdXJfdGVybTwvQ09ERT4sIGl0IGlzIHBvc3NpYmxlIGZvciBhIHByb2dyYW0gdG8gdXNlIHR3byBvciBtb3JlIHRlcm1pbmFscyBhdAorb25jZS4gIDxDT0RFPlNldHVwdGVybSgpPC9DT0RFPiBhbHNvIHN0b3JlcyB0aGUgbmFtZXMgc2VjdGlvbiBvZiB0aGUgdGVybWluYWwKK2Rlc2NyaXB0aW9uIGluIHRoZSBnbG9iYWwgY2hhcmFjdGVyIGFycmF5IDxDT0RFPnR0eXR5cGVbXTwvQ09ERT4uICBTdWJzZXF1ZW50IGNhbGxzCit0byA8Q09ERT5zZXR1cHRlcm0oKTwvQ09ERT4gd2lsbCBvdmVyd3JpdGUgdGhpcyBhcnJheSwgc28geW91J2xsIGhhdmUgdG8gc2F2ZSBpdAoreW91cnNlbGYgaWYgbmVlZCBiZS4KKzwvREw+CisKKzxIMz48QSBOQU1FPSJkZWJ1Z2dpbmciPkRlYnVnZ2luZzwvQT48L0gzPgorCis8IS0tIFRoZSAnbm90ZScgdGFnIGlzIG5vdCBwb3J0YWJsZSBlbm91Z2ggLS0+Cis8YmxvY2txdW90ZT4KKzxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgY3Vyc2VzIEFQSSEKKzwvYmxvY2txdW90ZT4KKworPERMPgorPERUPiA8Q09ERT50cmFjZSgpPC9DT0RFPgorPEREPgorVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBleHBsaWNpdGx5IHNldCBhIHRyYWNlIGxldmVsLiAgSWYgdGhlCit0cmFjZSBsZXZlbCBpcyBub256ZXJvLCBleGVjdXRpb24gb2YgeW91ciBwcm9ncmFtIHdpbGwgZ2VuZXJhdGUgYSBmaWxlCitjYWxsZWQgYHRyYWNlJyBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBjb250YWluaW5nIGEgcmVwb3J0IG9uCit0aGUgbGlicmFyeSdzIGFjdGlvbnMuICBIaWdoZXIgdHJhY2UgbGV2ZWxzIGVuYWJsZSBtb3JlIGRldGFpbGVkIChhbmQKK3ZlcmJvc2UpIHJlcG9ydGluZyAtLSBzZWUgY29tbWVudHMgYXR0YWNoZWQgdG8gPENPREU+VFJBQ0VfPC9DT0RFPiBkZWZpbmVzCitpbiB0aGUgPENPREU+Y3Vyc2VzLmg8L0NPREU+IGZpbGUgZm9yIGRldGFpbHMuICAoSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQKK2EgdHJhY2UgbGV2ZWwgYnkgYXNzaWduaW5nIGEgdHJhY2UgbGV2ZWwgdmFsdWUgdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCis8Q09ERT5OQ1VSU0VTX1RSQUNFPC9DT0RFPikuCis8RFQ+IDxDT0RFPl90cmFjZWYoKTwvQ09ERT4KKzxERD4KK1RoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gb3V0cHV0IHlvdXIgb3duIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIEl0IGlzIG9ubHkKK2F2YWlsYWJsZSBvbmx5IGlmIHlvdSBsaW5rIHdpdGggLWxuY3Vyc2VzX2cuICBJdCBjYW4gYmUgdXNlZCB0aGUgc2FtZSB3YXkgYXMKKzxDT0RFPnByaW50ZigpPC9DT0RFPiwgb25seSBpdCBvdXRwdXRzIGEgbmV3bGluZSBhZnRlciB0aGUgZW5kIG9mIGFyZ3VtZW50cy4KK1RoZSBvdXRwdXQgZ29lcyB0byBhIGZpbGUgY2FsbGVkIDxDT0RFPnRyYWNlPC9DT0RFPiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCis8L0RMPgorCitUcmFjZSBsb2dzIGNhbiBiZSBkaWZmaWN1bHQgdG8gaW50ZXJwcmV0IGR1ZSB0byB0aGUgc2hlZXIgdm9sdW1lIG9mCitkYXRhIGR1bXBlZCBpbiB0aGVtLiAgVGhlcmUgaXMgYSBzY3JpcHQgY2FsbGVkIDxTVFJPTkc+dHJhY2VtdW5jaDwvU1RST05HPgoraW5jbHVkZWQgd2l0aCB0aGUgPENPREU+bmN1cnNlczwvQ09ERT4gZGlzdHJpYnV0aW9uIHRoYXQgY2FuIGFsbGV2aWF0ZQordGhpcyBwcm9ibGVtIHNvbWV3aGF0OyBpdCBjb21wYWN0cyBsb25nIHNlcXVlbmNlcyBvZiBzaW1pbGFyIG9wZXJhdGlvbnMgaW50bworbW9yZSBzdWNjaW5jdCBzaW5nbGUtbGluZSBwc2V1ZG8tb3BlcmF0aW9ucy4gVGhlc2UgcHNldWRvLW9wcyBjYW4gYmUKK2Rpc3Rpbmd1aXNoZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBuYW1lZCBpbiBjYXBpdGFsIGxldHRlcnMuCisKKzxIMj48QSBOQU1FPSJoaW50cyI+SGludHMsIFRpcHMsIGFuZCBUcmlja3M8L0E+PC9IMj4KKworVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IG1hbnVhbCBwYWdlcyBhcmUgYSBjb21wbGV0ZSByZWZlcmVuY2UgZm9yIHRoaXMgbGlicmFyeS4KK0luIHRoZSByZW1haW5kZXIgb2YgdGhpcyBkb2N1bWVudCwgd2UgZGlzY3VzcyB2YXJpb3VzIHVzZWZ1bCBtZXRob2RzIHRoYXQKK21heSBub3QgYmUgb2J2aW91cyBmcm9tIHRoZSBtYW51YWwgcGFnZSBkZXNjcmlwdGlvbnMuCisKKzxIMz48QSBOQU1FPSJjYXV0aW9uIj5Tb21lIE5vdGVzIG9mIENhdXRpb248L0E+PC9IMz4KKworSWYgeW91IGZpbmQgeW91cnNlbGYgdGhpbmtpbmcgeW91IG5lZWQgdG8gdXNlIDxDT0RFPm5vcmF3KCk8L0NPREU+IG9yCis8Q09ERT5ub2NicmVhaygpPC9DT0RFPiwgdGhpbmsgYWdhaW4gYW5kIG1vdmUgY2FyZWZ1bGx5LiAgSXQncyBwcm9iYWJseQorYmV0dGVyIGRlc2lnbiB0byB1c2UgPENPREU+Z2V0c3RyKCk8L0NPREU+IG9yIG9uZSBvZiBpdHMgcmVsYXRpdmVzIHRvCitzaW11bGF0ZSBjb29rZWQgbW9kZS4gIFRoZSA8Q09ERT5ub3JhdygpPC9DT0RFPiBhbmQgPENPREU+bm9jYnJlYWsoKTwvQ09ERT4KK2Z1bmN0aW9ucyB0cnkgdG8gcmVzdG9yZSBjb29rZWQgbW9kZSwgYnV0IHRoZXkgbWF5IGVuZCB1cCBjbG9iYmVyaW5nCitzb21lIGNvbnRyb2wgYml0cyBzZXQgYmVmb3JlIHlvdSBzdGFydGVkIHlvdXIgYXBwbGljYXRpb24uICBBbHNvLCB0aGV5CitoYXZlIGFsd2F5cyBiZWVuIHBvb3JseSBkb2N1bWVudGVkLCBhbmQgYXJlIGxpa2VseSB0byBodXJ0IHlvdXIKK2FwcGxpY2F0aW9uJ3MgdXNhYmlsaXR5IHdpdGggb3RoZXIgY3Vyc2VzIGxpYnJhcmllcy4gPFA+CisKK0JlYXIgaW4gbWluZCB0aGF0IDxDT0RFPnJlZnJlc2goKTwvQ09ERT4gaXMgYSBzeW5vbnltIGZvciA8Q09ERT53cmVmcmVzaChzdGRzY3IpPC9DT0RFPi4KK0Rvbid0IHRyeSB0byBtaXggdXNlIG9mIDxDT0RFPnN0ZHNjcjwvQ09ERT4gd2l0aCB1c2Ugb2Ygd2luZG93cyBkZWNsYXJlZAorYnkgPENPREU+bmV3d2luKCk8L0NPREU+OyBhIDxDT0RFPnJlZnJlc2goKTwvQ09ERT4gY2FsbCB3aWxsIGJsb3cgdGhlbSBvZmYgdGhlCitzY3JlZW4uICBUaGUgcmlnaHQgd2F5IHRvIGhhbmRsZSB0aGlzIGlzIHRvIHVzZSA8Q09ERT5zdWJ3aW4oKTwvQ09ERT4sIG9yCitub3QgdG91Y2ggPENPREU+c3Rkc2NyPC9DT0RFPiBhdCBhbGwgYW5kIHRpbGUgeW91ciBzY3JlZW4gd2l0aCBkZWNsYXJlZAord2luZG93cyB3aGljaCB5b3UgdGhlbiA8Q09ERT53bm91dHJlZnJlc2goKTwvQ09ERT4gc29tZXdoZXJlIGluIHlvdXIgcHJvZ3JhbQorZXZlbnQgbG9vcCwgd2l0aCBhIHNpbmdsZSA8Q09ERT5kb3VwZGF0ZSgpPC9DT0RFPiBjYWxsIHRvIHRyaWdnZXIgYWN0dWFsCityZXBhaW50aW5nLiA8UD4KKworWW91IGFyZSBtdWNoIGxlc3MgbGlrZWx5IHRvIHJ1biBpbnRvIHByb2JsZW1zIGlmIHlvdSBkZXNpZ24geW91ciBzY3JlZW4KK2xheW91dHMgdG8gdXNlIHRpbGVkIHJhdGhlciB0aGFuIG92ZXJsYXBwaW5nIHdpbmRvd3MuICBIaXN0b3JpY2FsbHksCitjdXJzZXMgc3VwcG9ydCBmb3Igb3ZlcmxhcHBpbmcgd2luZG93cyBoYXMgYmVlbiB3ZWFrLCBmcmFnaWxlLCBhbmQgcG9vcmx5Citkb2N1bWVudGVkLiAgVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IGxpYnJhcnkgaXMgbm90IHlldCBhbiBleGNlcHRpb24gdG8gdGhpcworcnVsZS4gPFA+CisKK1RoZXJlIGlzIGEgcGFuZWxzIGxpYnJhcnkgaW5jbHVkZWQgaW4gdGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+CitkaXN0cmlidXRpb24gdGhhdCBkb2VzIGEgcHJldHR5IGdvb2Qgam9iIG9mIHN0cmVuZ3RoZW5pbmcgdGhlCitvdmVybGFwcGluZy13aW5kb3dzIGZhY2lsaXRpZXMuIDxQPgorCitUcnkgdG8gYXZvaWQgdXNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZXMgTElORVMgYW5kIENPTFMuICBVc2UKKzxDT0RFPmdldG1heHl4KCk8L0NPREU+IG9uIHRoZSA8Q09ERT5zdGRzY3I8L0NPREU+IGNvbnRleHQgaW5zdGVhZC4gIFJlYXNvbjoKK3lvdXIgY29kZSBtYXkgYmUgcG9ydGVkIHRvIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aXRoIHdpbmRvdyByZXNpemVzLAoraW4gd2hpY2ggY2FzZSBzZXZlcmFsIHNjcmVlbnMgY291bGQgYmUgb3BlbiB3aXRoIGRpZmZlcmVudCBzaXplcy4KKworPEgzPjxBIE5BTUU9ImxlYXZpbmciPlRlbXBvcmFyaWx5IExlYXZpbmcgTkNVUlNFUyBNb2RlPC9BPjwvSDM+CisKK1NvbWV0aW1lcyB5b3Ugd2lsbCB3YW50IHRvIHdyaXRlIGEgcHJvZ3JhbSB0aGF0IHNwZW5kcyBtb3N0IG9mIGl0cyB0aW1lIGluCitzY3JlZW4gbW9kZSwgYnV0IG9jY2FzaW9uYWxseSByZXR1cm5zIHRvIG9yZGluYXJ5IGBjb29rZWQnIG1vZGUuICBBIGNvbW1vbgorcmVhc29uIGZvciB0aGlzIGlzIHRvIHN1cHBvcnQgc2hlbGwtb3V0LiAgVGhpcyBiZWhhdmlvciBpcyBzaW1wbGUgdG8gYXJyYW5nZQoraW4gPENPREU+bmN1cnNlczwvQ09ERT4uIDxQPgorCitUbyBsZWF2ZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBtb2RlLCBjYWxsIDxDT0RFPmVuZHdpbigpPC9DT0RFPiBhcyB5b3Ugd291bGQgaWYgeW91Cit3ZXJlIGludGVuZGluZyB0byB0ZXJtaW5hdGUgdGhlIHByb2dyYW0uICBUaGlzIHdpbGwgdGFrZSB0aGUgc2NyZWVuIGJhY2sgdG8KK2Nvb2tlZCBtb2RlOyB5b3UgY2FuIGRvIHlvdXIgc2hlbGwtb3V0LiAgV2hlbiB5b3Ugd2FudCB0byByZXR1cm4gdG8KKzxDT0RFPm5jdXJzZXM8L0NPREU+IG1vZGUsIHNpbXBseSBjYWxsIDxDT0RFPnJlZnJlc2goKTwvQ09ERT4gb3IgPENPREU+ZG91cGRhdGUoKTwvQ09ERT4uCitUaGlzIHdpbGwgcmVwYWludCB0aGUgc2NyZWVuLiA8UD4KKworVGhlcmUgaXMgYSBib29sZWFuIGZ1bmN0aW9uLCA8Q09ERT5pc2VuZHdpbigpPC9DT0RFPiwgd2hpY2ggY29kZSBjYW4gdXNlIHRvCit0ZXN0IHdoZXRoZXIgPENPREU+bmN1cnNlczwvQ09ERT4gc2NyZWVuIG1vZGUgaXMgYWN0aXZlLiAgSXQgcmV0dXJucyA8Q09ERT5UUlVFPC9DT0RFPgoraW4gdGhlIGludGVydmFsIGJldHdlZW4gYW4gPENPREU+ZW5kd2luKCk8L0NPREU+IGNhbGwgYW5kIHRoZSBmb2xsb3dpbmcKKzxDT0RFPnJlZnJlc2goKTwvQ09ERT4sIDxDT0RFPkZBTFNFPC9DT0RFPiBvdGhlcndpc2UuICA8UD4KKworSGVyZSBpcyBzb21lIHNhbXBsZSBjb2RlIGZvciBzaGVsbG91dDoKKworPFBSRT4KKyAgICBhZGRzdHIoIlNoZWxsaW5nIG91dC4uLiIpOworICAgIGRlZl9wcm9nX21vZGUoKTsgICAgICAgICAgIC8qIHNhdmUgY3VycmVudCB0dHkgbW9kZXMgKi8KKyAgICBlbmR3aW4oKTsgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIG9yaWdpbmFsIHR0eSBtb2RlcyAqLworICAgIHN5c3RlbSgic2giKTsgICAgICAgICAgICAgIC8qIHJ1biBzaGVsbCAqLworICAgIGFkZHN0cigicmV0dXJuZWQuXG4iKTsgICAgIC8qIHByZXBhcmUgcmV0dXJuIG1lc3NhZ2UgKi8KKyAgICByZWZyZXNoKCk7ICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIHNhdmUgbW9kZXMsIHJlcGFpbnQgc2NyZWVuICovCis8L1BSRT4KKworPEgzPjxBIE5BTUU9Inh0ZXJtIj5Vc2luZyBOQ1VSU0VTIHVuZGVyIFhURVJNPC9BPjwvSDM+CisKK0EgcmVzaXplIG9wZXJhdGlvbiBpbiBYIHNlbmRzIDxDT0RFPlNJR1dJTkNIPC9DT0RFPiB0byB0aGUgYXBwbGljYXRpb24gcnVubmluZwordW5kZXIgeHRlcm0uCisKK1RoZSBlYXNpZXN0IHdheSB0byBoYW5kbGUgPENPREU+U0lHV0lOQ0g8L0NPREU+CitpcyB0byBkbyBhbiA8Q09ERT5lbmR3aW48L0NPREU+LAorZm9sbG93ZWQgYnkgYW4gPENPREU+cmVmcmVzaDwvQ09ERT4gYW5kIGEgc2NyZWVuIHJlcGFpbnQgeW91IGNvZGUKK3lvdXJzZWxmLgorVGhlIDxDT0RFPnJlZnJlc2g8L0NPREU+IHdpbGwgcGljayB1cCB0aGUgbmV3IHNjcmVlbiBzaXplIGZyb20gdGhlCit4dGVybSdzIGVudmlyb25tZW50LiA8UD4KKworVGhhdCBpcyB0aGUgc3RhbmRhcmQgd2F5LCBvZiBjb3Vyc2UgKGl0IGV2ZW4gd29ya3Mgd2l0aCBzb21lIHZlbmRvcidzIGN1cnNlcworaW1wbGVtZW50YXRpb25zKS4KK0l0cyBkcmF3YmFjayBpcyB0aGF0IGl0IGNsZWFycyB0aGUgc2NyZWVuIHRvIHJlaW5pdGlhbGl6ZSB0aGUgZGlzcGxheSwgYW5kIGRvZXMKK25vdCByZXNpemUgc3Vid2luZG93cyB3aGljaCBtdXN0IGJlIHNocnVuay4KKzxDT0RFPk5jdXJzZXM8L0NPREU+IHByb3ZpZGVzIGFuIGV4dGVuc2lvbiB3aGljaCB3b3JrcyBiZXR0ZXIsIHRoZQorPENPREU+cmVzaXpldGVybTwvQ09ERT4gZnVuY3Rpb24uICBUaGF0IGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBhbGwgd2luZG93cworYXJlIGxpbWl0ZWQgdG8gdGhlIG5ldyBzY3JlZW4gZGltZW5zaW9ucywgYW5kIHBhZHMgPENPREU+c3Rkc2NyPC9DT0RFPgord2l0aCBibGFua3MgaWYgdGhlIHNjcmVlbiBpcyBsYXJnZXIuIDxQPgorCitUaGUgPENPREU+bmN1cnNlczwvQ09ERT4gbGlicmFyeSBwcm92aWRlcyBhIFNJR1dJTkNIIHNpZ25hbCBoYW5kbGVyLAord2hpY2ggcHVzaGVzIGEgPENPREU+S0VZX1JFU0laRTwvQ09ERT4gdmlhIHRoZSB3Z2V0Y2goKSBjYWxscy4KK1doZW4gPENPREU+bmN1cnNlczwvQ09ERT4gcmV0dXJucyB0aGF0IGNvZGUsCitpdCBjYWxscyA8Y29kZT5yZXNpemV0ZXJtPC9DT0RFPgordG8gdXBkYXRlIHRoZSBzaXplIG9mIHRoZSBzdGFuZGFyZCBzY3JlZW4ncyB3aW5kb3csIHJlcGFpbnRpbmcgdGhhdAorKGZpbGxpbmcgd2l0aCBibGFua3Mgb3IgdHJ1bmNhdGluZyBhcyBuZWVkZWQpLgorSXQgYWxzbyByZXNpemVzIG90aGVyIHdpbmRvd3MsCitidXQgaXRzIGVmZmVjdCBtYXkgYmUgbGVzcyBzYXRpc2ZhY3RvcnkgYmVjYXVzZSBpdCBjYW5ub3QKK2tub3cgaG93IHlvdSB3YW50IHRoZSBzY3JlZW4gcmUtcGFpbnRlZC4KK1lvdSB3aWxsIHVzdWFsbHkgaGF2ZSB0byB3cml0ZSBzcGVjaWFsLXB1cnBvc2UgY29kZSB0byBoYW5kbGUKKzxDT0RFPktFWV9SRVNJWkU8L0NPREU+IHlvdXJzZWxmLgorCis8SDM+PEEgTkFNRT0ic2NyZWVucyI+SGFuZGxpbmcgTXVsdGlwbGUgVGVybWluYWwgU2NyZWVuczwvQT48L0gzPgorCitUaGUgPENPREU+aW5pdHNjcigpPC9DT0RFPiBmdW5jdGlvbiBhY3R1YWxseSBjYWxscyBhIGZ1bmN0aW9uIG5hbWVkCis8Q09ERT5uZXd0ZXJtKCk8L0NPREU+IHRvIGRvIG1vc3Qgb2YgaXRzIHdvcmsuICBJZiB5b3UgYXJlIHdyaXRpbmcgYSBwcm9ncmFtIHRoYXQKK29wZW5zIG11bHRpcGxlIHRlcm1pbmFscywgdXNlIDxDT0RFPm5ld3Rlcm0oKTwvQ09ERT4gZGlyZWN0bHkuIDxQPgorCitGb3IgZWFjaCBjYWxsLCB5b3Ugd2lsbCBoYXZlIHRvIHNwZWNpZnkgYSB0ZXJtaW5hbCB0eXBlIGFuZCBhIHBhaXIgb2YgZmlsZQorcG9pbnRlcnM7IGVhY2ggY2FsbCB3aWxsIHJldHVybiBhIHNjcmVlbiByZWZlcmVuY2UsIGFuZCA8Q09ERT5zdGRzY3I8L0NPREU+IHdpbGwgYmUKK3NldCB0byB0aGUgbGFzdCBvbmUgYWxsb2NhdGVkLiAgWW91IHdpbGwgc3dpdGNoIGJldHdlZW4gc2NyZWVucyB3aXRoIHRoZQorPENPREU+c2V0X3Rlcm08L0NPREU+IGNhbGwuICBOb3RlIHRoYXQgeW91IHdpbGwgYWxzbyBoYXZlIHRvIGNhbGwKKzxDT0RFPmRlZl9zaGVsbF9tb2RlPC9DT0RFPiBhbmQgPENPREU+ZGVmX3Byb2dfbW9kZTwvQ09ERT4gb24gZWFjaCB0dHkgeW91cnNlbGYuCisKKzxIMz48QSBOQU1FPSJ0ZXN0aW5nIj5UZXN0aW5nIGZvciBUZXJtaW5hbCBDYXBhYmlsaXRpZXM8L0E+PC9IMz4KKworU29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byB3cml0ZSBwcm9ncmFtcyB0aGF0IHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZiB2YXJpb3VzCitjYXBhYmlsaXRpZXMgYmVmb3JlIGRlY2lkaW5nIHdoZXRoZXIgdG8gZ28gaW50byA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBtb2RlLiAgQW4gZWFzeQord2F5IHRvIGRvIHRoaXMgaXMgdG8gY2FsbCA8Q09ERT5zZXR1cHRlcm0oKTwvQ09ERT4sIHRoZW4gdXNlIHRoZSBmdW5jdGlvbnMKKzxDT0RFPnRpZ2V0ZmxhZygpPC9DT0RFPiwgPENPREU+dGlnZXRudW0oKTwvQ09ERT4sIGFuZCA8Q09ERT50aWdldHN0cigpPC9DT0RFPiB0byBkbyB5b3VyCit0ZXN0aW5nLiA8UD4KKworQSBwYXJ0aWN1bGFybHkgdXNlZnVsIGNhc2Ugb2YgdGhpcyBvZnRlbiBjb21lcyB1cCB3aGVuIHlvdSB3YW50IHRvCit0ZXN0IHdoZXRoZXIgYSBnaXZlbiB0ZXJtaW5hbCB0eXBlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGBzbWFydCcKKyhjdXJzb3ItYWRkcmVzc2FibGUpIG9yIGBzdHVwaWQnLiAgVGhlIHJpZ2h0IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gc2VlCitpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIDxDT0RFPnRpZ2V0c3RyKCJjdXAiKTwvQ09ERT4gaXMgbm9uLU5VTEwuICBBbHRlcm5hdGl2ZWx5LAoreW91IGNhbiBpbmNsdWRlIHRoZSA8Q09ERT50ZXJtLmg8L0NPREU+IGZpbGUgYW5kIHRlc3QgdGhlIHZhbHVlIG9mIHRoZQorbWFjcm8gPENPREU+Y3Vyc29yX2FkZHJlc3M8L0NPREU+LgorCis8SDM+PEEgTkFNRT0idHVuaW5nIj5UdW5pbmcgZm9yIFNwZWVkPC9BPjwvSDM+CisKK1VzZSB0aGUgPENPREU+YWRkY2hzdHIoKTwvQ09ERT4gZmFtaWx5IG9mIGZ1bmN0aW9ucyBmb3IgZmFzdAorc2NyZWVuLXBhaW50aW5nIG9mIHRleHQgd2hlbiB5b3Uga25vdyB0aGUgdGV4dCBkb2Vzbid0IGNvbnRhaW4gYW55Citjb250cm9sIGNoYXJhY3RlcnMuICBUcnkgdG8gbWFrZSBhdHRyaWJ1dGUgY2hhbmdlcyBpbmZyZXF1ZW50IG9uIHlvdXIKK3NjcmVlbnMuICBEb24ndCB1c2UgdGhlIDxDT0RFPmltbWVkb2soKTwvQ09ERT4gb3B0aW9uIQorCis8SDM+PEEgTkFNRT0ic3BlY2lhbCI+U3BlY2lhbCBGZWF0dXJlcyBvZiBOQ1VSU0VTPC9BPjwvSDM+CisKK1RoZSA8Q09ERT53cmVzaXplKCk8L0NPREU+IGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gcmVzaXplIGEgd2luZG93IGluIHBsYWNlLgorVGhlIGFzc29jaWF0ZWQgPENPREU+cmVzaXpldGVybSgpPC9DT0RFPiBmdW5jdGlvbiBzaW1wbGlmaWVzIHRoZSBjb25zdHJ1Y3Rpb24KK29mIDxhIEhSRUY9IiN4dGVybSI+U0lHV0lOQ0g8L2E+IGhhbmRsZXJzLCBmb3IgcmVzaXppbmcgYWxsIHdpbmRvd3MuICA8UD4KKworVGhlIDxDT0RFPmRlZmluZV9rZXkoKTwvQ09ERT4gZnVuY3Rpb24gYWxsb3dzIHlvdQordG8gZGVmaW5lIGF0IHJ1bnRpbWUgZnVuY3Rpb24ta2V5IGNvbnRyb2wgc2VxdWVuY2VzIHdoaWNoIGFyZSBub3QgaW4gdGhlCit0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KK1RoZSA8Q09ERT5rZXlvaygpPC9DT0RFPiBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHRlbXBvcmFyaWx5CitlbmFibGUgb3IgZGlzYWJsZSBpbnRlcnByZXRhdGlvbiBvZiBhbnkgZnVuY3Rpb24ta2V5IGNvbnRyb2wgc2VxdWVuY2UuIDxQPgorCitUaGUgPENPREU+dXNlX2RlZmF1bHRfY29sb3JzKCk8L0NPREU+IGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gY29uc3RydWN0CithcHBsaWNhdGlvbnMgd2hpY2ggY2FuIHVzZSB0aGUgdGVybWluYWwncyBkZWZhdWx0IGZvcmVncm91bmQgYW5kCitiYWNrZ3JvdW5kIGNvbG9ycyBhcyBhbiBhZGRpdGlvbmFsICJkZWZhdWx0IiBjb2xvci4KK1NldmVyYWwgdGVybWluYWwgZW11bGF0b3JzIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCB3aGljaCBpcyBiYXNlZCBvbiBJU08gNjQyOS4gPFA+CisKK05jdXJzZXMgc3VwcG9ydHMgdXAgMTYgY29sb3JzLCB1bmxpa2UgU1ZyNCBjdXJzZXMgd2hpY2ggZGVmaW5lcyBvbmx5IDguCitXaGlsZSBtb3N0IHRlcm1pbmFscyB3aGljaCBwcm92aWRlIGNvbG9yIGFsbG93IG9ubHkgOCBjb2xvcnMsIGFib3V0CithIHF1YXJ0ZXIgKGluY2x1ZGluZyBYRnJlZTg2IHh0ZXJtKSBzdXBwb3J0IDE2IGNvbG9ycy4KKworPEgyPjxBIE5BTUU9ImNvbXBhdCI+Q29tcGF0aWJpbGl0eSB3aXRoIE9sZGVyIFZlcnNpb25zPC9BPjwvSDI+CisKK0Rlc3BpdGUgb3VyIGJlc3QgZWZmb3J0cywgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiA8Q09ERT5uY3Vyc2VzPC9DT0RFPgorYW5kIHRoZSAodW5kb2N1bWVudGVkISkgYmVoYXZpb3Igb2Ygb2xkZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9ucy4gIFRoZXNlIGFyaXNlCitmcm9tIGFtYmlndWl0aWVzIG9yIG9taXNzaW9ucyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgQVBJLgorCis8SDM+PEEgTkFNRT0icmVmYnVnIj5SZWZyZXNoIG9mIE92ZXJsYXBwaW5nIFdpbmRvd3M8L0E+PC9IMz4KKworSWYgeW91IGRlZmluZSB0d28gd2luZG93cyBBIGFuZCBCIHRoYXQgb3ZlcmxhcCwgYW5kIHRoZW4gYWx0ZXJuYXRlbHkgc2NyaWJibGUKK29uIGFuZCByZWZyZXNoIHRoZW0sIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIG92ZXJsYXBwaW5nIHJlZ2lvbiB1bmRlciBoaXN0b3JpYworPENPREU+Y3Vyc2VzPC9DT0RFPiB2ZXJzaW9ucyB3ZXJlIG9mdGVuIG5vdCBkb2N1bWVudGVkIHByZWNpc2VseS4gPFA+CisKK1RvIHVuZGVyc3RhbmQgd2h5IHRoaXMgaXMgYSBwcm9ibGVtLCByZW1lbWJlciB0aGF0IHNjcmVlbiB1cGRhdGVzIGFyZQorY2FsY3VsYXRlZCBiZXR3ZWVuIHR3byByZXByZXNlbnRhdGlvbnMgb2YgdGhlIDxFTT5lbnRpcmU8L0VNPiBkaXNwbGF5LiBUaGUKK2RvY3VtZW50YXRpb24gc2F5cyB0aGF0IHdoZW4geW91IHJlZnJlc2ggYSB3aW5kb3csIGl0IGlzIGZpcnN0IGNvcGllZCB0byB0aGUKK3ZpcnR1YWwgc2NyZWVuLCBhbmQgdGhlbiBjaGFuZ2VzIGFyZSBjYWxjdWxhdGVkIHRvIHVwZGF0ZSB0aGUgcGh5c2ljYWwgc2NyZWVuCisoYW5kIGFwcGxpZWQgdG8gdGhlIHRlcm1pbmFsKS4gIEJ1dCAiY29waWVkIHRvIiBpcyBub3QgdmVyeSBzcGVjaWZpYywgYW5kCitzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGNvcHlpbmcgd29ya3MgY2FuIHByb2R1Y2UgZGlmZmVyZW50IGJlaGF2aW9ycyBpbiB0aGUKK2Nhc2Ugd2hlcmUgdHdvIG92ZXJsYXBwaW5nIHdpbmRvd3MgYXJlIGVhY2ggYmVpbmcgcmVmcmVzaGVkIGF0IHVucHJlZGljdGFibGUKK2ludGVydmFscy4gPFA+CisKK1doYXQgaGFwcGVucyB0byB0aGUgb3ZlcmxhcHBpbmcgcmVnaW9uIGRlcGVuZHMgb24gd2hhdCA8Q09ERT53bm91dHJlZnJlc2goKTwvQ09ERT4KK2RvZXMgd2l0aCBpdHMgYXJndW1lbnQgLS0gd2hhdCBwb3J0aW9ucyBvZiB0aGUgYXJndW1lbnQgd2luZG93IGl0IGNvcGllcyB0byB0aGUKK3ZpcnR1YWwgc2NyZWVuLiAgU29tZSBpbXBsZW1lbnRhdGlvbnMgZG8gImNoYW5nZSBjb3B5IiwgY29weWluZyBkb3duIG9ubHkKK2xvY2F0aW9ucyBpbiB0aGUgd2luZG93IHRoYXQgaGF2ZSBjaGFuZ2VkIChvciBiZWVuIG1hcmtlZCBjaGFuZ2VkIHdpdGgKKzxDT0RFPnd0b3VjaGxuKCk8L0NPREU+IGFuZCBmcmllbmRzKS4gIFNvbWUgaW1wbGVtZW50YXRpb25zIGRvICAiZW50aXJlIGNvcHkiLAorY29weWluZyA8RU0+YWxsPC9FTT4gd2luZG93IGxvY2F0aW9ucyB0byB0aGUgdmlydHVhbCBzY3JlZW4gd2hldGhlciBvciBub3QKK3RoZXkgaGF2ZSBjaGFuZ2VkLiA8UD4KKworVGhlIDxDT0RFPm5jdXJzZXM8L0NPREU+IGxpYnJhcnkgaXRzZWxmIGhhcyBub3QgYWx3YXlzIGJlZW4gY29uc2lzdGVudCBvbiB0aGlzCitzY29yZS4gIER1ZSB0byBhIGJ1ZywgdmVyc2lvbnMgMS44LjcgdG8gMS45LjhhIGRpZCBlbnRpcmUgY29weS4gIFZlcnNpb25zCisxLjguNiBhbmQgb2xkZXIsIGFuZCB2ZXJzaW9ucyAxLjkuOSBhbmQgbmV3ZXIsIGRvIGNoYW5nZSBjb3B5LiA8UD4KKworRm9yIG1vc3QgY29tbWVyY2lhbCBjdXJzZXMgaW1wbGVtZW50YXRpb25zLCBpdCBpcyBub3QgZG9jdW1lbnRlZCBhbmQgbm90IGtub3duCitmb3Igc3VyZSAoYXQgbGVhc3Qgbm90IHRvIHRoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBtYWludGFpbmVycykgd2hldGhlciB0aGV5IGRvCitjaGFuZ2UgY29weSBvciBlbnRpcmUgY29weS4gIFdlIGtub3cgdGhhdCBTeXN0ZW0gViByZWxlYXNlIDMgY3Vyc2VzIGhhcyBsb2dpYworaW4gaXQgdGhhdCBsb29rcyBsaWtlIGFuIGF0dGVtcHQgdG8gZG8gY2hhbmdlIGNvcHksIGJ1dCB0aGUgc3Vycm91bmRpbmcgbG9naWMKK2FuZCBkYXRhIHJlcHJlc2VudGF0aW9ucyBhcmUgc3VmZmljaWVudGx5IGNvbXBsZXgsIGFuZCBvdXIga25vd2xlZGdlCitzdWZmaWNpZW50bHkgaW5kaXJlY3QsIHRoYXQgaXQncyBoYXJkIHRvIGtub3cgd2hldGhlciB0aGlzIGlzIHJlbGlhYmxlLgorCitJdCBpcyBub3QgY2xlYXIgd2hhdCB0aGUgU1ZyNCBkb2N1bWVudGF0aW9uIGFuZCBYU0kgc3RhbmRhcmQgaW50ZW5kLiAgVGhlIFhTSQorQ3Vyc2VzIHN0YW5kYXJkIGJhcmVseSBtZW50aW9ucyB3bm91dHJlZnJlc2goKTsgdGhlIFNWcjQgZG9jdW1lbnRzIHNlZW0gdG8gYmUKK2Rlc2NyaWJpbmcgZW50aXJlLWNvcHksIGJ1dCBpdCBpcyBwb3NzaWJsZSB3aXRoIHNvbWUgZWZmb3J0IGFuZCBzdHJhaW5pbmcgdG8KK3JlYWQgdGhlbSB0aGUgb3RoZXIgd2F5LiA8UD4KKworSXQgbWlnaHQgdGhlcmVmb3JlIGJlIHVud2lzZSB0byByZWx5IG9uIGVpdGhlciBiZWhhdmlvciBpbiBwcm9ncmFtcyB0aGF0IG1pZ2h0CitoYXZlIHRvIGJlIGxpbmtlZCB3aXRoIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMuICBJbnN0ZWFkLCB5b3UgY2FuIGRvIGFuCitleHBsaWNpdCA8Q09ERT50b3VjaHdpbigpPC9DT0RFPiBiZWZvcmUgdGhlIDxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiBjYWxsIHRvCitndWFyYW50ZWUgYW4gZW50aXJlLWNvbnRlbnRzIGNvcHkgYW55d2hlcmUuIDxQPgorCitUaGUgcmVhbGx5IGNsZWFuIHdheSB0byBoYW5kbGUgdGhpcyBpcyB0byB1c2UgdGhlIHBhbmVscyBsaWJyYXJ5LiAgSWYsCit3aGVuIHlvdSB3YW50IGEgc2NyZWVuIHVwZGF0ZSwgeW91IGRvIDxDT0RFPnVwZGF0ZV9wYW5lbHMoKTwvQ09ERT4sIGl0IHdpbGwKK2RvIGFsbCB0aGUgbmVjZXNzYXJ5IDxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiBjYWxscyBmb3Igd2hhdGV2ZXIgcGFuZWwKK3N0YWNraW5nIG9yZGVyIHlvdSBoYXZlIGRlZmluZWQuICBUaGVuIHlvdSBjYW4gZG8gb25lIDxDT0RFPmRvdXBkYXRlKCk8L0NPREU+CithbmQgdGhlcmUgd2lsbCBiZSBhIDxFTT5zaW5nbGU8L0VNPiBidXJzdCBvZiBwaHlzaWNhbCBJL08gdGhhdCB3aWxsIGRvCithbGwgeW91ciB1cGRhdGVzLgorCis8SDM+PEEgTkFNRT0iYmFja2J1ZyI+QmFja2dyb3VuZCBFcmFzZTwvQT48L0gzPgorCitJZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIGEgdmVyeSBvbGQgdmVyc2lvbnMgb2YgPENPREU+bmN1cnNlczwvQ09ERT4gKDEuOC43IG9yCitvbGRlcikgeW91IG1heSBiZSBzdXJwcmlzZWQgYnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBlcmFzZSBmdW5jdGlvbnMuICBJbiBvbGRlcgordmVyc2lvbnMsIGVyYXNlZCBhcmVhcyBvZiBhIHdpbmRvdyB3ZXJlIGZpbGxlZCB3aXRoIGEgYmxhbmsgbW9kaWZpZWQgYnkgdGhlCit3aW5kb3cncyBjdXJyZW50IGF0dHJpYnV0ZSAoYXMgc2V0IGJ5IDxTVFJPTkc+d2F0dHJzZXQoKTwvU1RST05HPiwgPFNUUk9ORz53YXR0cm9uKCk8L1NUUk9ORz4sCis8U1RST05HPndhdHRyb2ZmKCk8L1NUUk9ORz4gYW5kIGZyaWVuZHMpLiA8UD4KKworSW4gbmV3ZXIgdmVyc2lvbnMsIHRoaXMgaXMgbm90IHNvLiAgSW5zdGVhZCwgdGhlIGF0dHJpYnV0ZSBvZiBlcmFzZWQgYmxhbmtzCitpcyBub3JtYWwgdW5sZXNzIGFuZCB1bnRpbCBpdCBpcyBtb2RpZmllZCBieSB0aGUgZnVuY3Rpb25zIDxDT0RFPmJrZ2RzZXQoKTwvQ09ERT4KK29yIDxDT0RFPndia2dkc2V0KCk8L0NPREU+LiA8UD4KKworVGhpcyBjaGFuZ2UgaW4gYmVoYXZpb3IgY29uZm9ybXMgPENPREU+bmN1cnNlczwvQ09ERT4gdG8gU3lzdGVtIFYgUmVsZWFzZSA0IGFuZAordGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQuCisKKzxIMj48QSBOQU1FPSJ4c2lmdW5jcyI+WFNJIEN1cnNlcyBDb25mb3JtYW5jZTwvQT48L0gyPgorCitUaGUgPENPREU+bmN1cnNlczwvQ09ERT4gbGlicmFyeSBpcyBpbnRlbmRlZCB0byBiZSBiYXNlLWxldmVsIGNvbmZvcm1hbnQgd2l0aCB0aGUKK1hTSSBDdXJzZXMgc3RhbmRhcmQgZnJvbSBYL09wZW4uICBNYW55IGV4dGVuZGVkLWxldmVsIGZlYXR1cmVzIChpbiBmYWN0LCBhbG1vc3QKK2FsbCBmZWF0dXJlcyBub3QgZGlyZWN0bHkgY29uY2VybmVkIHdpdGggd2lkZSBjaGFyYWN0ZXJzIGFuZAoraW50ZXJuYXRpb25hbGl6YXRpb24pIGFyZSBhbHNvIHN1cHBvcnRlZC4gPFA+CisKK09uZSBlZmZlY3Qgb2YgWFNJIGNvbmZvcm1hbmNlIGlzIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IgZGVzY3JpYmVkIHVuZGVyCis8QSBIUkVGPSIjYmFja2J1ZyI+IkJhY2tncm91bmQgRXJhc2UgLS0gQ29tcGF0aWJpbGl0eSB3aXRoIE9sZCBWZXJzaW9ucyI8L0E+LiA8UD4KKworQWxzbywgPENPREU+bmN1cnNlczwvQ09ERT4gbWVldHMgdGhlIFhTSSByZXF1aXJlbWVudCB0aGF0IGV2ZXJ5IG1hY3JvCitlbnRyeSBwb2ludCBoYXZlIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiB3aGljaCBtYXkgYmUgbGlua2VkIChhbmQKK3dpbGwgYmUgcHJvdG90eXBlLWNoZWNrZWQpIGlmIHRoZSBtYWNybyBkZWZpbml0aW9uIGlzIGRpc2FibGVkIHdpdGgKKzxDT0RFPiN1bmRlZjwvQ09ERT4uCisKKzxIMT48QSBOQU1FPSJwYW5lbHMiPlRoZSBQYW5lbHMgTGlicmFyeTwvQT48L0gxPgorCitUaGUgPENPREU+bmN1cnNlczwvQ09ERT4gbGlicmFyeSBieSBpdHNlbGYgcHJvdmlkZXMgZ29vZCBzdXBwb3J0IGZvciBzY3JlZW4KK2Rpc3BsYXlzIGluIHdoaWNoIHRoZSB3aW5kb3dzIGFyZSB0aWxlZCAobm9uLW92ZXJsYXBwaW5nKS4gIEluIHRoZSBtb3JlCitnZW5lcmFsIGNhc2UgdGhhdCB3aW5kb3dzIG1heSBvdmVybGFwLCB5b3UgaGF2ZSB0byB1c2UgYSBzZXJpZXMgb2YKKzxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiBjYWxscyBmb2xsb3dlZCBieSBhIDxDT0RFPmRvdXBkYXRlKCk8L0NPREU+LCBhbmQgYmUKK2NhcmVmdWwgYWJvdXQgdGhlIG9yZGVyIHlvdSBkbyB0aGUgd2luZG93IHJlZnJlc2hlcyBpbi4gIEl0IGhhcyB0byBiZQorYm90dG9tLXVwd2FyZHMsIG90aGVyd2lzZSBwYXJ0cyBvZiB3aW5kb3dzIHRoYXQgc2hvdWxkIGJlIG9ic2N1cmVkIHdpbGwKK3Nob3cgdGhyb3VnaC4gPFA+CisKK1doZW4geW91ciBpbnRlcmZhY2UgZGVzaWduIGlzIHN1Y2ggdGhhdCB3aW5kb3dzIG1heSBkaXZlIGRlZXBlciBpbnRvIHRoZQordmlzaWJpbGl0eSBzdGFjayBvciBwb3AgdG8gdGhlIHRvcCBhdCBydW50aW1lLCB0aGUgcmVzdWx0aW5nIGJvb2sta2VlcGluZworY2FuIGJlIHRlZGlvdXMgYW5kIGRpZmZpY3VsdCB0byBnZXQgcmlnaHQuICBIZW5jZSB0aGUgcGFuZWxzIGxpYnJhcnkuIDxQPgorCitUaGUgPENPREU+cGFuZWw8L0NPREU+IGxpYnJhcnkgZmlyc3QgYXBwZWFyZWQgaW4gQVQmYW1wO1QgU3lzdGVtIFYuICBUaGUKK3ZlcnNpb24gZG9jdW1lbnRlZCBoZXJlIGlzIHRoZSA8Q09ERT5wYW5lbDwvQ09ERT4gY29kZSBkaXN0cmlidXRlZAord2l0aCA8Q09ERT5uY3Vyc2VzPC9DT0RFPi4KKworPEgyPjxBIE5BTUU9InBjb21waWxlIj5Db21waWxpbmcgV2l0aCB0aGUgUGFuZWxzIExpYnJhcnk8L0E+PC9IMj4KKworWW91ciBwYW5lbHMtdXNpbmcgbW9kdWxlcyBtdXN0IGltcG9ydCB0aGUgcGFuZWxzIGxpYnJhcnkgZGVjbGFyYXRpb25zIHdpdGgKKworPFBSRT4KKwkgICNpbmNsdWRlICZsdDtwYW5lbC5oJmd0OworPC9QUkU+CisKK2FuZCBtdXN0IGJlIGxpbmtlZCBleHBsaWNpdGx5IHdpdGggdGhlIHBhbmVscyBsaWJyYXJ5IHVzaW5nIGFuCis8Q09ERT4tbHBhbmVsPC9DT0RFPiBhcmd1bWVudC4gIE5vdGUgdGhhdCB0aGV5IG11c3QgYWxzbyBsaW5rIHRoZQorPENPREU+bmN1cnNlczwvQ09ERT4gbGlicmFyeSB3aXRoIDxDT0RFPi1sbmN1cnNlczwvQ09ERT4uICBNYW55IGxpbmtlcnMKK2FyZSB0d28tcGFzcyBhbmQgd2lsbCBhY2NlcHQgZWl0aGVyIG9yZGVyLCBidXQgaXQgaXMgc3RpbGwgZ29vZCBwcmFjdGljZQordG8gcHV0IDxDT0RFPi1scGFuZWw8L0NPREU+IGZpcnN0IGFuZCA8Q09ERT4tbG5jdXJzZXM8L0NPREU+IHNlY29uZC4KKworPEgyPjxBIE5BTUU9InBvdmVydmlldyI+T3ZlcnZpZXcgb2YgUGFuZWxzPC9BPjwvSDI+CisKK0EgcGFuZWwgb2JqZWN0IGlzIGEgd2luZG93IHRoYXQgaXMgaW1wbGljaXRseSB0cmVhdGVkIGFzIHBhcnQgb2YgYQorPERGTj5kZWNrPC9ERk4+IGluY2x1ZGluZyBhbGwgb3RoZXIgcGFuZWwgb2JqZWN0cy4gIFRoZSBkZWNrIGhhcyBhbiBpbXBsaWNpdAorYm90dG9tLXRvLXRvcCB2aXNpYmlsaXR5IG9yZGVyLiAgVGhlIHBhbmVscyBsaWJyYXJ5IGluY2x1ZGVzIGFuIHVwZGF0ZQorZnVuY3Rpb24gKGFuYWxvZ291cyB0byA8Q09ERT5yZWZyZXNoKCk8L0NPREU+KSB0aGF0IGRpc3BsYXlzIGFsbCBwYW5lbHMgaW4gdGhlCitkZWNrIGluIHRoZSBwcm9wZXIgb3JkZXIgdG8gcmVzb2x2ZSBvdmVybGFwcy4gIFRoZSBzdGFuZGFyZCB3aW5kb3csCis8Q09ERT5zdGRzY3I8L0NPREU+LCBpcyBjb25zaWRlcmVkIGJlbG93IGFsbCBwYW5lbHMuIDxQPgorCitEZXRhaWxzIG9uIHRoZSBwYW5lbHMgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIG1hbiBwYWdlcy4gIFdlJ2xsIGp1c3QKK2hpdCB0aGUgaGlnaGxpZ2h0cyBoZXJlLiA8UD4KKworWW91IGNyZWF0ZSBhIHBhbmVsIGZyb20gYSB3aW5kb3cgYnkgY2FsbGluZyA8Q09ERT5uZXdfcGFuZWwoKTwvQ09ERT4gb24gYQord2luZG93IHBvaW50ZXIuICBJdCB0aGVuIGJlY29tZXMgdGhlIHRvcCBvZiB0aGUgZGVjay4gIFRoZSBwYW5lbCdzIHdpbmRvdworaXMgYXZhaWxhYmxlIGFzIHRoZSB2YWx1ZSBvZiA8Q09ERT5wYW5lbF93aW5kb3coKTwvQ09ERT4gY2FsbGVkIHdpdGggdGhlCitwYW5lbCBwb2ludGVyIGFzIGFyZ3VtZW50LjxQPgorCitZb3UgY2FuIGRlbGV0ZSBhIHBhbmVsIChyZW1vdmluZyBpdCBmcm9tIHRoZSBkZWNrKSB3aXRoIDxDT0RFPmRlbF9wYW5lbDwvQ09ERT4uCitUaGlzIHdpbGwgbm90IGRlYWxsb2NhdGUgdGhlIGFzc29jaWF0ZWQgd2luZG93OyB5b3UgaGF2ZSB0byBkbyB0aGF0IHlvdXJzZWxmLgorCitZb3UgY2FuIHJlcGxhY2UgYSBwYW5lbCdzIHdpbmRvdyB3aXRoIGEgZGlmZmVyZW50IHdpbmRvdyBieSBjYWxsaW5nCis8Q09ERT5yZXBsYWNlX3dpbmRvdzwvQ09ERT4uICBUaGUgbmV3IHdpbmRvdyBtYXkgYmUgb2YgZGlmZmVyZW50IHNpemU7Cit0aGUgcGFuZWwgY29kZSB3aWxsIHJlLWNvbXB1dGUgYWxsIG92ZXJsYXBzLiAgVGhpcyBvcGVyYXRpb24gZG9lc24ndAorY2hhbmdlIHRoZSBwYW5lbCdzIHBvc2l0aW9uIGluIHRoZSBkZWNrLiA8UD4KKworVG8gbW92ZSBhIHBhbmVsJ3Mgd2luZG93LCB1c2UgPENPREU+bW92ZV9wYW5lbCgpPC9DT0RFPi4gIFRoZQorPENPREU+bXZ3aW4oKTwvQ09ERT4gZnVuY3Rpb24gb24gdGhlIHBhbmVsJ3Mgd2luZG93IGlzbid0IHN1ZmZpY2llbnQgYmVjYXVzZSBpdAorZG9lc24ndCB1cGRhdGUgdGhlIHBhbmVscyBsaWJyYXJ5J3MgcmVwcmVzZW50YXRpb24gb2Ygd2hlcmUgdGhlIHdpbmRvd3MgYXJlLgorVGhpcyBvcGVyYXRpb24gbGVhdmVzIHRoZSBwYW5lbCdzIGRlcHRoLCBjb250ZW50cywgYW5kIHNpemUgdW5jaGFuZ2VkLiA8UD4KKworVHdvIGZ1bmN0aW9ucyAoPENPREU+dG9wX3BhbmVsKCk8L0NPREU+LCA8Q09ERT5ib3R0b21fcGFuZWwoKTwvQ09ERT4pIGFyZQorcHJvdmlkZWQgZm9yIHJlYXJyYW5naW5nIHRoZSBkZWNrLiAgVGhlIGZpcnN0IHBvcHMgaXRzIGFyZ3VtZW50IHdpbmRvdyB0byB0aGUKK3RvcCBvZiB0aGUgZGVjazsgdGhlIHNlY29uZCBzZW5kcyBpdCB0byB0aGUgYm90dG9tLiAgRWl0aGVyIG9wZXJhdGlvbiBsZWF2ZXMKK3RoZSBwYW5lbCdzIHNjcmVlbiBsb2NhdGlvbiwgY29udGVudHMsIGFuZCBzaXplIHVuY2hhbmdlZC4gPFA+CisKK1RoZSBmdW5jdGlvbiA8Q09ERT51cGRhdGVfcGFuZWxzKCk8L0NPREU+IGRvZXMgYWxsIHRoZQorPENPREU+d25vdXRyZWZyZXNoKCk8L0NPREU+IGNhbGxzIG5lZWRlZCB0byBwcmVwYXJlIGZvcgorPENPREU+ZG91cGRhdGUoKTwvQ09ERT4gKHdoaWNoIHlvdSBtdXN0IGNhbGwgeW91cnNlbGYsIGFmdGVyd2FyZHMpLiA8UD4KKworVHlwaWNhbGx5LCB5b3Ugd2lsbCB3YW50IHRvIGNhbGwgPENPREU+dXBkYXRlX3BhbmVscygpPC9DT0RFPiBhbmQKKzxDT0RFPmRvdXBkYXRlKCk8L0NPREU+IGp1c3QgYmVmb3JlIGFjY2VwdGluZyBjb21tYW5kIGlucHV0LCBvbmNlIGluIGVhY2ggY3ljbGUKK29mIGludGVyYWN0aW9uIHdpdGggdGhlIHVzZXIuICBJZiB5b3UgY2FsbCA8Q09ERT51cGRhdGVfcGFuZWxzKCk8L0NPREU+IGFmdGVyCitlYWNoIGFuZCBldmVyeSBwYW5lbCB3cml0ZSwgeW91J2xsIGdlbmVyYXRlIGEgbG90IG9mIHVubmVjZXNzYXJ5IHJlZnJlc2gKK2FjdGl2aXR5IGFuZCBzY3JlZW4gZmxpY2tlci4KKworPEgyPjxBIE5BTUU9InBzdGRzY3IiPlBhbmVscywgSW5wdXQsIGFuZCB0aGUgU3RhbmRhcmQgU2NyZWVuPC9BPjwvSDI+CisKK1lvdSBzaG91bGRuJ3QgbWl4IDxDT0RFPndub3V0cmVmcmVzaCgpPC9DT0RFPiBvciA8Q09ERT53cmVmcmVzaCgpPC9DT0RFPgorb3BlcmF0aW9ucyB3aXRoIHBhbmVscyBjb2RlOyB0aGlzIHdpbGwgd29yayBvbmx5IGlmIHRoZSBhcmd1bWVudCB3aW5kb3cKK2lzIGVpdGhlciBpbiB0aGUgdG9wIHBhbmVsIG9yIHVub2JzY3VyZWQgYnkgYW55IG90aGVyIHBhbmVscy4gPFA+CisKK1RoZSA8Q09ERT5zdHNkY3I8L0NPREU+IHdpbmRvdyBpcyBhIHNwZWNpYWwgY2FzZS4gIEl0IGlzIGNvbnNpZGVyZWQgYmVsb3cgYWxsCitwYW5lbHMuICBCZWNhdXNlIGNoYW5nZXMgdG8gcGFuZWxzIG1heSBvYnNjdXJlIHBhcnRzIG9mIDxDT0RFPnN0ZHNjcjwvQ09ERT4sCit0aG91Z2gsIHlvdSBzaG91bGQgY2FsbCA8Q09ERT51cGRhdGVfcGFuZWxzKCk8L0NPREU+IGJlZm9yZQorPENPREU+ZG91cGRhdGUoKTwvQ09ERT4gZXZlbiB3aGVuIHlvdSBvbmx5IGNoYW5nZSA8Q09ERT5zdGRzY3I8L0NPREU+LiA8UD4KKworTm90ZSB0aGF0IDxDT0RFPndnZXRjaDwvQ09ERT4gYXV0b21hdGljYWxseSBjYWxscyA8Q09ERT53cmVmcmVzaDwvQ09ERT4uCitUaGVyZWZvcmUsIGJlZm9yZSByZXF1ZXN0aW5nIGlucHV0IGZyb20gYSBwYW5lbCB3aW5kb3csIHlvdSBuZWVkIHRvIGJlIHN1cmUKK3RoYXQgdGhlIHBhbmVsIGlzIHRvdGFsbHkgdW5vYnNjdXJlZC4gPFA+CisKK1RoZXJlIGlzIHByZXNlbnRseSBubyB3YXkgdG8gZGlzcGxheSBjaGFuZ2VzIHRvIG9uZSBvYnNjdXJlZCBwYW5lbCB3aXRob3V0CityZXBhaW50aW5nIGFsbCBwYW5lbHMuCisKKzxIMj48QSBOQU1FPSJoaWRpbmciPkhpZGluZyBQYW5lbHM8L0E+PC9IMj4KKworSXQncyBwb3NzaWJsZSB0byByZW1vdmUgYSBwYW5lbCBmcm9tIHRoZSBkZWNrIHRlbXBvcmFyaWx5OyB1c2UKKzxDT0RFPmhpZGVfcGFuZWw8L0NPREU+IGZvciB0aGlzLiAgVXNlIDxDT0RFPnNob3dfcGFuZWwoKTwvQ09ERT4gdG8gcmVuZGVyIGl0Cit2aXNpYmxlIGFnYWluLiAgVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiA8Q09ERT5wYW5lbF9oaWRkZW48L0NPREU+Cit0ZXN0cyB3aGV0aGVyIG9yIG5vdCBhIHBhbmVsIGlzIGhpZGRlbi4gPFA+CisKK1RoZSA8Q09ERT5wYW5lbF91cGRhdGU8L0NPREU+IGNvZGUgaWdub3JlcyBoaWRkZW4gcGFuZWxzLiAgWW91IGNhbm5vdCBkbworPENPREU+dG9wX3BhbmVsKCk8L0NPREU+IG9yIDxDT0RFPmJvdHRvbV9wYW5lbDwvQ09ERT4gb24gYSBoaWRkZW4gcGFuZWwoKS4KK090aGVyIHBhbmVscyBvcGVyYXRpb25zIGFyZSBhcHBsaWNhYmxlLgorCis8SDI+PEEgTkFNRT0icG1pc2MiPk1pc2NlbGxhbmVvdXMgT3RoZXIgRmFjaWxpdGllczwvQT48L0gyPgorCitJdCdzIHBvc3NpYmxlIHRvIG5hdmlnYXRlIHRoZSBkZWNrIHVzaW5nIHRoZSBmdW5jdGlvbnMKKzxDT0RFPnBhbmVsX2Fib3ZlKCk8L0NPREU+IGFuZCA8Q09ERT5wYW5lbF9iZWxvdzwvQ09ERT4uICBIYW5kZWQgYSBwYW5lbAorcG9pbnRlciwgdGhleSByZXR1cm4gdGhlIHBhbmVsIGFib3ZlIG9yIGJlbG93IHRoYXQgcGFuZWwuICBIYW5kZWQKKzxDT0RFPk5VTEw8L0NPREU+LCB0aGV5IHJldHVybiB0aGUgYm90dG9tLW1vc3Qgb3IgdG9wLW1vc3QgcGFuZWwuIDxQPgorCitFdmVyeSBwYW5lbCBoYXMgYW4gYXNzb2NpYXRlZCB1c2VyIHBvaW50ZXIsIG5vdCB1c2VkIGJ5IHRoZSBwYW5lbCBjb2RlLCB0bword2hpY2ggeW91IGNhbiBhdHRhY2ggYXBwbGljYXRpb24gZGF0YS4gIFNlZSB0aGUgbWFuIHBhZ2UgZG9jdW1lbnRhdGlvbgorb2YgPENPREU+c2V0X3BhbmVsX3VzZXJwdHIoKTwvQ09ERT4gYW5kIDxDT0RFPnBhbmVsX3VzZXJwdHI8L0NPREU+IGZvcgorZGV0YWlscy4KKworPEgxPjxBIE5BTUU9Im1lbnUiPlRoZSBNZW51IExpYnJhcnk8L0E+PC9IMT4KKworQSBtZW51IGlzIGEgc2NyZWVuIGRpc3BsYXkgdGhhdCBhc3Npc3RzIHRoZSB1c2VyIHRvIGNob29zZSBzb21lIHN1YnNldAorb2YgYSBnaXZlbiBzZXQgb2YgaXRlbXMuICBUaGUgPENPREU+bWVudTwvQ09ERT4gbGlicmFyeSBpcyBhIGN1cnNlcworZXh0ZW5zaW9uIHRoYXQgc3VwcG9ydHMgZWFzeSBwcm9ncmFtbWluZyBvZiBtZW51IGhpZXJhcmNoaWVzIHdpdGggYQordW5pZm9ybSBidXQgZmxleGlibGUgaW50ZXJmYWNlLiA8UD4KKworVGhlIDxDT0RFPm1lbnU8L0NPREU+IGxpYnJhcnkgZmlyc3QgYXBwZWFyZWQgaW4gQVQmYW1wO1QgU3lzdGVtIFYuICBUaGUKK3ZlcnNpb24gZG9jdW1lbnRlZCBoZXJlIGlzIHRoZSA8Q09ERT5tZW51PC9DT0RFPiBjb2RlIGRpc3RyaWJ1dGVkCit3aXRoIDxDT0RFPm5jdXJzZXM8L0NPREU+LgorCis8SDI+PEEgTkFNRT0ibWNvbXBpbGUiPkNvbXBpbGluZyBXaXRoIHRoZSBtZW51IExpYnJhcnk8L0E+PC9IMj4KKworWW91ciBtZW51LXVzaW5nIG1vZHVsZXMgbXVzdCBpbXBvcnQgdGhlIG1lbnUgbGlicmFyeSBkZWNsYXJhdGlvbnMgd2l0aAorCis8UFJFPgorCSAgI2luY2x1ZGUgJmx0O21lbnUuaCZndDsKKzwvUFJFPgorCithbmQgbXVzdCBiZSBsaW5rZWQgZXhwbGljaXRseSB3aXRoIHRoZSBtZW51cyBsaWJyYXJ5IHVzaW5nIGFuCis8Q09ERT4tbG1lbnU8L0NPREU+IGFyZ3VtZW50LiAgTm90ZSB0aGF0IHRoZXkgbXVzdCBhbHNvIGxpbmsgdGhlCis8Q09ERT5uY3Vyc2VzPC9DT0RFPiBsaWJyYXJ5IHdpdGggPENPREU+LWxuY3Vyc2VzPC9DT0RFPi4gIE1hbnkgbGlua2VycworYXJlIHR3by1wYXNzIGFuZCB3aWxsIGFjY2VwdCBlaXRoZXIgb3JkZXIsIGJ1dCBpdCBpcyBzdGlsbCBnb29kIHByYWN0aWNlCit0byBwdXQgPENPREU+LWxtZW51PC9DT0RFPiBmaXJzdCBhbmQgPENPREU+LWxuY3Vyc2VzPC9DT0RFPiBzZWNvbmQuCisKKzxIMj48QSBOQU1FPSJtb3ZlcnZpZXciPk92ZXJ2aWV3IG9mIE1lbnVzPC9BPjwvSDI+CisKK1RoZSBtZW51cyBjcmVhdGVkIGJ5IHRoaXMgbGlicmFyeSBjb25zaXN0IG9mIGNvbGxlY3Rpb25zIG9mCis8REZOPml0ZW1zPC9ERk4+IGluY2x1ZGluZyBhIG5hbWUgc3RyaW5nIHBhcnQgYW5kIGEgZGVzY3JpcHRpb24gc3RyaW5nCitwYXJ0LiAgVG8gbWFrZSBtZW51cywgeW91IGNyZWF0ZSBncm91cHMgb2YgdGhlc2UgaXRlbXMgYW5kIGNvbm5lY3QKK3RoZW0gd2l0aCBtZW51IGZyYW1lIG9iamVjdHMuIDxQPgorCitUaGUgbWVudSBjYW4gdGhlbiBieSA8REZOPnBvc3RlZDwvREZOPiwgdGhhdCBpcyB3cml0dGVuIHRvIGFuCithc3NvY2lhdGVkIHdpbmRvdy4gIEFjdHVhbGx5LCBlYWNoIG1lbnUgaGFzIHR3byBhc3NvY2lhdGVkIHdpbmRvd3M7IGEKK2NvbnRhaW5pbmcgd2luZG93IGluIHdoaWNoIHRoZSBwcm9ncmFtbWVyIGNhbiBzY3JpYmJsZSB0aXRsZXMgb3IKK2JvcmRlcnMsIGFuZCBhIHN1YndpbmRvdyBpbiB3aGljaCB0aGUgbWVudSBpdGVtcyBwcm9wZXIgYXJlIGRpc3BsYXllZC4KK0lmIHRoaXMgc3Vid2luZG93IGlzIHRvbyBzbWFsbCB0byBkaXNwbGF5IGFsbCB0aGUgaXRlbXMsIGl0IHdpbGwgYmUgYQorc2Nyb2xsYWJsZSB2aWV3cG9ydCBvbiB0aGUgY29sbGVjdGlvbiBvZiBpdGVtcy4gPFA+CisKK0EgbWVudSBtYXkgYWxzbyBiZSA8REZOPnVucG9zdGVkPC9ERk4+ICh0aGF0IGlzLCB1bmRpc3BsYXllZCksIGFuZCBmaW5hbGx5CitmcmVlZCB0byBtYWtlIHRoZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgaXRzIGl0ZW1zIGF2YWlsYWJsZSBmb3IKK3JlLXVzZS4gPFA+CisKK1RoZSBnZW5lcmFsIGZsb3cgb2YgY29udHJvbCBvZiBhIG1lbnUgcHJvZ3JhbSBsb29rcyBsaWtlIHRoaXM6CisKKzxPTD4KKzxMST5Jbml0aWFsaXplIDxDT0RFPmN1cnNlczwvQ09ERT4uCis8TEk+Q3JlYXRlIHRoZSBtZW51IGl0ZW1zLCB1c2luZyA8Q09ERT5uZXdfaXRlbSgpPC9DT0RFPi4KKzxMST5DcmVhdGUgdGhlIG1lbnUgdXNpbmcgPENPREU+bmV3X21lbnUoKTwvQ09ERT4uCis8TEk+UG9zdCB0aGUgbWVudSB1c2luZyA8Q09ERT5wb3N0X21lbnUoKTwvQ09ERT4uCis8TEk+UmVmcmVzaCB0aGUgc2NyZWVuLgorPExJPlByb2Nlc3MgdXNlciByZXF1ZXN0cyB2aWEgYW4gaW5wdXQgbG9vcC4KKzxMST5VbnBvc3QgdGhlIG1lbnUgdXNpbmcgPENPREU+dW5wb3N0X21lbnUoKTwvQ09ERT4uCis8TEk+RnJlZSB0aGUgbWVudSwgdXNpbmcgPENPREU+ZnJlZV9tZW51KCk8L0NPREU+LgorPExJPkZyZWUgdGhlIGl0ZW1zIHVzaW5nIDxDT0RFPmZyZWVfaXRlbSgpPC9DT0RFPi4KKzxMST5UZXJtaW5hdGUgPENPREU+Y3Vyc2VzPC9DT0RFPi4KKzwvT0w+CisKKzxIMj48QSBOQU1FPSJtc2VsZWN0Ij5TZWxlY3RpbmcgaXRlbXM8L0E+PC9IMj4KKworTWVudXMgbWF5IGJlIG11bHRpLXZhbHVlZCBvciAodGhlIGRlZmF1bHQpIHNpbmdsZS12YWx1ZWQgKHNlZSB0aGUgbWFudWFsCitwYWdlIDxDT0RFPm1lbnVfb3B0cygzeCk8L0NPREU+IHRvIHNlZSBob3cgdG8gY2hhbmdlIHRoZSBkZWZhdWx0KS4KK0JvdGggdHlwZXMgYWx3YXlzIGhhdmUgYSA8REZOPmN1cnJlbnQgaXRlbTwvREZOPi4gPFA+CisKK0Zyb20gYSBzaW5nbGUtdmFsdWVkIG1lbnUgeW91IGNhbiByZWFkIHRoZSBzZWxlY3RlZCB2YWx1ZSBzaW1wbHkgYnkgbG9va2luZworYXQgdGhlIGN1cnJlbnQgaXRlbS4gIEZyb20gYSBtdWx0aS12YWx1ZWQgbWVudSwgeW91IGdldCB0aGUgc2VsZWN0ZWQgc2V0CitieSBsb29waW5nIHRocm91Z2ggdGhlIGl0ZW1zIGFwcGx5aW5nIHRoZSA8Q09ERT5pdGVtX3ZhbHVlKCk8L0NPREU+CitwcmVkaWNhdGUgZnVuY3Rpb24uICBZb3VyIG1lbnUtcHJvY2Vzc2luZyBjb2RlIGNhbiB1c2UgdGhlIGZ1bmN0aW9uCis8Q09ERT5zZXRfaXRlbV92YWx1ZSgpPC9DT0RFPiB0byBmbGFnIHRoZSBpdGVtcyBpbiB0aGUgc2VsZWN0IHNldC4gPFA+CisKK01lbnUgaXRlbXMgY2FuIGJlIG1hZGUgdW5zZWxlY3RhYmxlIHVzaW5nIDxDT0RFPnNldF9pdGVtX29wdHMoKTwvQ09ERT4KK29yIDxDT0RFPml0ZW1fb3B0c19vZmYoKTwvQ09ERT4gd2l0aCB0aGUgPENPREU+T19TRUxFQ1RBQkxFPC9DT0RFPgorYXJndW1lbnQuICBUaGlzIGlzIHRoZSBvbmx5IG9wdGlvbiBzbyBmYXIgZGVmaW5lZCBmb3IgbWVudXMsIGJ1dCBpdAoraXMgZ29vZCBwcmFjdGljZSB0byBjb2RlIGFzIHRob3VnaCBvdGhlciBvcHRpb24gYml0cyBtaWdodCBiZSBvbi4KKworPEgyPjxBIE5BTUU9Im1kaXNwbGF5Ij5NZW51IERpc3BsYXk8L0E+PC9IMj4KKworVGhlIG1lbnUgbGlicmFyeSBjYWxjdWxhdGVzIGEgbWluaW11bSBkaXNwbGF5IHNpemUgZm9yIHlvdXIgd2luZG93LCBiYXNlZAorb24gdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisKKzxVTD4KKzxMST5UaGUgbnVtYmVyIGFuZCBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgbWVudSBpdGVtcworPExJPldoZXRoZXIgdGhlIE9fUk9XTUFKT1Igb3B0aW9uIGlzIGVuYWJsZWQKKzxMST5XaGV0aGVyIGRpc3BsYXkgb2YgZGVzY3JpcHRpb25zIGlzIGVuYWJsZWQKKzxMST5XaGF0ZXZlciBtZW51IGZvcm1hdCBtYXkgaGF2ZSBiZWVuIHNldCBieSB0aGUgcHJvZ3JhbW1lcgorPExJPlRoZSBsZW5ndGggb2YgdGhlIG1lbnUgbWFyayBzdHJpbmcgdXNlZCBmb3IgaGlnaGxpZ2h0aW5nIHNlbGVjdGVkIGl0ZW1zCis8L1VMPgorCitUaGUgZnVuY3Rpb24gPENPREU+c2V0X21lbnVfZm9ybWF0KCk8L0NPREU+IGFsbG93cyB5b3UgdG8gc2V0IHRoZQorbWF4aW11bSBzaXplIG9mIHRoZSB2aWV3cG9ydCBvciA8REZOPm1lbnUgcGFnZTwvREZOPiB0aGF0IHdpbGwgYmUgdXNlZAordG8gZGlzcGxheSBtZW51IGl0ZW1zLiAgWW91IGNhbiByZXRyaWV2ZSBhbnkgZm9ybWF0IGFzc29jaWF0ZWQgd2l0aCBhCittZW51IHdpdGggPENPREU+bWVudV9mb3JtYXQoKTwvQ09ERT4uIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyByb3dzPTE2LAorY29sdW1ucz0xLiA8UD4KKworVGhlIGFjdHVhbCBtZW51IHBhZ2UgbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgZm9ybWF0IHNpemUuICBUaGlzIGRlcGVuZHMKK29uIHRoZSBpdGVtIG51bWJlciBhbmQgc2l6ZSBhbmQgd2hldGhlciBPX1JPV01BSk9SIGlzIG9uLiAgVGhpcyBvcHRpb24KKyhvbiBieSBkZWZhdWx0KSBjYXVzZXMgbWVudSBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBgcmFzdGVyLXNjYW4nCitwYXR0ZXJuLCBzbyB0aGF0IGlmIG1vcmUgdGhhbiBvbmUgaXRlbSB3aWxsIGZpdCBob3Jpem9udGFsbHkgdGhlIGZpcnN0Citjb3VwbGUgb2YgaXRlbXMgYXJlIHNpZGUtYnktc2lkZSBpbiB0aGUgdG9wIHJvdy4gIFRoZSBhbHRlcm5hdGl2ZSBpcworY29sdW1uLW1ham9yIGRpc3BsYXksIHdoaWNoIHRyaWVzIHRvIHB1dCB0aGUgZmlyc3Qgc2V2ZXJhbCBpdGVtcyBpbgordGhlIGZpcnN0IGNvbHVtbi4gPFA+CisKK0FzIG1lbnRpb25lZCBhYm92ZSwgYSBtZW51IGZvcm1hdCBub3QgbGFyZ2UgZW5vdWdoIHRvIGFsbG93IGFsbCBpdGVtcyB0byBmaXQKK29uLXNjcmVlbiB3aWxsIHJlc3VsdCBpbiBhIG1lbnUgZGlzcGxheSB0aGF0IGlzIHZlcnRpY2FsbHkgc2Nyb2xsYWJsZS4gPFA+CitZb3UgY2FuIHNjcm9sbCBpdCB3aXRoIHJlcXVlc3RzIHRvIHRoZSBtZW51IGRyaXZlciwgd2hpY2ggd2lsbCBiZSBkZXNjcmliZWQKK2luIHRoZSBzZWN0aW9uIG9uIDxBIEhSRUY9IiNtaW5wdXQiPm1lbnUgaW5wdXQgaGFuZGxpbmc8L0E+LiA8UD4KKworRWFjaCBtZW51IGhhcyBhIDxERk4+bWFyayBzdHJpbmc8L0RGTj4gdXNlZCB0byB2aXN1YWxseSB0YWcgc2VsZWN0ZWQgaXRlbXM7CitzZWUgdGhlIDxDT0RFPm1lbnVfbWFyaygzeCk8L0NPREU+IG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLiAgVGhlIG1hcmsKK3N0cmluZyBsZW5ndGggYWxzbyBpbmZsdWVuY2VzIHRoZSBtZW51IHBhZ2Ugc2l6ZS4gPFA+CisKK1RoZSBmdW5jdGlvbiA8Q09ERT5zY2FsZV9tZW51KCk8L0NPREU+IHJldHVybnMgdGhlIG1pbmltdW0gZGlzcGxheSBzaXplCit0aGF0IHRoZSBtZW51IGNvZGUgY29tcHV0ZXMgZnJvbSBhbGwgdGhlc2UgZmFjdG9ycy4KKworVGhlcmUgYXJlIG90aGVyIG1lbnUgZGlzcGxheSBhdHRyaWJ1dGVzIGluY2x1ZGluZyBhIHNlbGVjdCBhdHRyaWJ1dGUsCithbiBhdHRyaWJ1dGUgZm9yIHNlbGVjdGFibGUgaXRlbXMsIGFuIGF0dHJpYnV0ZSBmb3IgdW5zZWxlY3RhYmxlIGl0ZW1zLAorYW5kIGEgcGFkIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGl0ZW0gbmFtZSB0ZXh0IGZyb20gZGVzY3JpcHRpb24KK3RleHQuICBUaGVzZSBoYXZlIHJlYXNvbmFibGUgZGVmYXVsdHMgd2hpY2ggdGhlIGxpYnJhcnkgYWxsb3dzIHlvdSB0bworY2hhbmdlIChzZWUgdGhlIDxDT0RFPm1lbnVfYXR0cmlicygzeCk8L0NPREU+IG1hbnVhbCBwYWdlLgorCis8SDI+PEEgTkFNRT0ibXdpbmRvd3MiPk1lbnUgV2luZG93czwvQT48L0gyPgorCitFYWNoIG1lbnUgaGFzLCBhcyBtZW50aW9uZWQgcHJldmlvdXNseSwgYSBwYWlyIG9mIGFzc29jaWF0ZWQgd2luZG93cy4KK0JvdGggdGhlc2Ugd2luZG93cyBhcmUgcGFpbnRlZCB3aGVuIHRoZSBtZW51IGlzIHBvc3RlZCBhbmQgZXJhc2VkIHdoZW4KK3RoZSBtZW51IGlzIHVucG9zdGVkLiA8UD4KKworVGhlIG91dGVyIG9yIGZyYW1lIHdpbmRvdyBpcyBub3Qgb3RoZXJ3aXNlIHRvdWNoZWQgYnkgdGhlIG1lbnUKK3JvdXRpbmVzLiAgSXQgZXhpc3RzIHNvIHRoZSBwcm9ncmFtbWVyIGNhbiBhc3NvY2lhdGUgYSB0aXRsZSwgYQorYm9yZGVyLCBvciBwZXJoYXBzIGhlbHAgdGV4dCB3aXRoIHRoZSBtZW51IGFuZCBoYXZlIGl0IHByb3Blcmx5CityZWZyZXNoZWQgb3IgZXJhc2VkIGF0IHBvc3QvdW5wb3N0IHRpbWUuICBUaGUgaW5uZXIgd2luZG93IG9yCis8REZOPnN1YndpbmRvdzwvREZOPiBpcyB3aGVyZSB0aGUgY3VycmVudCBtZW51IHBhZ2UgaXMgZGlzcGxheWVkLiA8UD4KKworQnkgZGVmYXVsdCwgYm90aCB3aW5kb3dzIGFyZSA8Q09ERT5zdGRzY3I8L0NPREU+LiAgWW91IGNhbiBzZXQgdGhlbSB3aXRoIHRoZQorZnVuY3Rpb25zIGluIDxDT0RFPm1lbnVfd2luKDN4KTwvQ09ERT4uIDxQPgorCitXaGVuIHlvdSBjYWxsIDxDT0RFPnBvc3RfbWVudSgpPC9DT0RFPiwgeW91IHdyaXRlIHRoZSBtZW51IHRvIGl0cworc3Vid2luZG93LiAgV2hlbiB5b3UgY2FsbCA8Q09ERT51bnBvc3RfbWVudSgpPC9DT0RFPiwgeW91IGVyYXNlIHRoZQorc3Vid2luZG93LCBIb3dldmVyLCBuZWl0aGVyIG9mIHRoZXNlIGFjdHVhbGx5IG1vZGlmaWVzIHRoZSBzY3JlZW4uICBUbworZG8gdGhhdCwgY2FsbCA8Q09ERT53cmVmcmVzaCgpPC9DT0RFPiBvciBzb21lIGVxdWl2YWxlbnQuCisKKzxIMj48QSBOQU1FPSJtaW5wdXQiPlByb2Nlc3NpbmcgTWVudSBJbnB1dDwvQT48L0gyPgorCitUaGUgbWFpbiBsb29wIG9mIHlvdXIgbWVudS1wcm9jZXNzaW5nIGNvZGUgc2hvdWxkIGNhbGwKKzxDT0RFPm1lbnVfZHJpdmVyKCk8L0NPREU+IHJlcGVhdGVkbHkuIFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGlzIHJvdXRpbmUKK2lzIGEgbWVudSBwb2ludGVyOyB0aGUgc2Vjb25kIGlzIGEgbWVudSBjb21tYW5kIGNvZGUuICBZb3Ugc2hvdWxkIHdyaXRlIGFuCitpbnB1dC1mZXRjaGluZyByb3V0aW5lIHRoYXQgbWFwcyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1lbnUgY29tbWFuZCBjb2RlcywgYW5kCitwYXNzIGl0cyBvdXRwdXQgdG8gPENPREU+bWVudV9kcml2ZXIoKTwvQ09ERT4uICBUaGUgbWVudSBjb21tYW5kIGNvZGVzIGFyZQorZnVsbHkgZG9jdW1lbnRlZCBpbiA8Q09ERT5tZW51X2RyaXZlcigzeCk8L0NPREU+LiA8UD4KKworVGhlIHNpbXBsZXN0IGdyb3VwIG9mIGNvbW1hbmQgY29kZXMgaXMgPENPREU+UkVRX05FWFRfSVRFTTwvQ09ERT4sCis8Q09ERT5SRVFfUFJFVl9JVEVNPC9DT0RFPiwgPENPREU+UkVRX0ZJUlNUX0lURU08L0NPREU+LAorPENPREU+UkVRX0xBU1RfSVRFTTwvQ09ERT4sIDxDT0RFPlJFUV9VUF9JVEVNPC9DT0RFPiwKKzxDT0RFPlJFUV9ET1dOX0lURU08L0NPREU+LCA8Q09ERT5SRVFfTEVGVF9JVEVNPC9DT0RFPiwKKzxDT0RFPlJFUV9SSUdIVF9JVEVNPC9DT0RFPi4gIFRoZXNlIGNoYW5nZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkCitpdGVtLiAgVGhlc2UgcmVxdWVzdHMgbWF5IGNhdXNlIHNjcm9sbGluZyBvZiB0aGUgbWVudSBwYWdlIGlmIGl0IG9ubHkKK3BhcnRpYWxseSBkaXNwbGF5ZWQuIDxQPgorCitUaGVyZSBhcmUgZXhwbGljaXQgcmVxdWVzdHMgZm9yIHNjcm9sbGluZyB3aGljaCBhbHNvIGNoYW5nZSB0aGUKK2N1cnJlbnQgaXRlbSAoYmVjYXVzZSB0aGUgc2VsZWN0IGxvY2F0aW9uIGRvZXMgbm90IGNoYW5nZSwgYnV0IHRoZQoraXRlbSB0aGVyZSBkb2VzKS4gIFRoZXNlIGFyZSA8Q09ERT5SRVFfU0NSX0RMSU5FPC9DT0RFPiwKKzxDT0RFPlJFUV9TQ1JfVUxJTkU8L0NPREU+LCA8Q09ERT5SRVFfU0NSX0RQQUdFPC9DT0RFPiwgYW5kCis8Q09ERT5SRVFfU0NSX1VQQUdFPC9DT0RFPi4gPFA+CisKK1RoZSA8Q09ERT5SRVFfVE9HR0xFX0lURU08L0NPREU+IHNlbGVjdHMgb3IgZGVzZWxlY3RzIHRoZSBjdXJyZW50IGl0ZW0uCitJdCBpcyBmb3IgdXNlIGluIG11bHRpLXZhbHVlZCBtZW51czsgaWYgeW91IHVzZSBpdCB3aXRoIDxDT0RFPk9fT05FVkFMVUU8L0NPREU+CitvbiwgeW91J2xsIGdldCBhbiBlcnJvciByZXR1cm4gKDxDT0RFPkVfUkVRVUVTVF9ERU5JRUQ8L0NPREU+KS4gPFA+CisKK0VhY2ggbWVudSBoYXMgYW4gYXNzb2NpYXRlZCBwYXR0ZXJuIGJ1ZmZlci4gIFRoZQorPENPREU+bWVudV9kcml2ZXIoKTwvQ09ERT4gbG9naWMgdHJpZXMgdG8gYWNjdW11bGF0ZSBwcmludGFibGUgQVNDSUkKK2NoYXJhY3RlcnMgcGFzc2VkIGluIGluIHRoYXQgYnVmZmVyOyB3aGVuIGl0IG1hdGNoZXMgYSBwcmVmaXggb2YgYW4KK2l0ZW0gbmFtZSwgdGhhdCBpdGVtIChvciB0aGUgbmV4dCBtYXRjaGluZyBpdGVtKSBpcyBzZWxlY3RlZC4gIElmCithcHBlbmRpbmcgYSBjaGFyYWN0ZXIgeWllbGRzIG5vIG5ldyBtYXRjaCwgdGhhdCBjaGFyYWN0ZXIgaXMgZGVsZXRlZAorZnJvbSB0aGUgcGF0dGVybiBidWZmZXIsIGFuZCA8Q09ERT5tZW51X2RyaXZlcigpPC9DT0RFPiByZXR1cm5zCis8Q09ERT5FX05PX01BVENIPC9DT0RFPi4gPFA+CisKK1NvbWUgcmVxdWVzdHMgY2hhbmdlIHRoZSBwYXR0ZXJuIGJ1ZmZlciBkaXJlY3RseToKKzxDT0RFPlJFUV9DTEVBUl9QQVRURVJOPC9DT0RFPiwgPENPREU+UkVRX0JBQ0tfUEFUVEVSTjwvQ09ERT4sCis8Q09ERT5SRVFfTkVYVF9NQVRDSDwvQ09ERT4sIDxDT0RFPlJFUV9QUkVWX01BVENIPC9DT0RFPi4gIFRoZSBsYXR0ZXIKK3R3byBhcmUgdXNlZnVsIHdoZW4gcGF0dGVybiBidWZmZXIgaW5wdXQgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIGl0ZW0KK2luIGEgbXVsdGktdmFsdWVkIG1lbnUuIDxQPgorCitFYWNoIHN1Y2Nlc3NmdWwgc2Nyb2xsIG9yIGl0ZW0gbmF2aWdhdGlvbiByZXF1ZXN0IGNsZWFycyB0aGUgcGF0dGVybgorYnVmZmVyLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIHBhdHRlcm4gYnVmZmVyIGV4cGxpY2l0bHkKK3dpdGggPENPREU+c2V0X21lbnVfcGF0dGVybigpPC9DT0RFPi4gPFA+CisKK0ZpbmFsbHksIG1lbnUgZHJpdmVyIHJlcXVlc3RzIGFib3ZlIHRoZSBjb25zdGFudCA8Q09ERT5NQVhfQ09NTUFORDwvQ09ERT4KK2FyZSBjb25zaWRlcmVkIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNvbW1hbmRzLiAgVGhlIDxDT0RFPm1lbnVfZHJpdmVyKCk8L0NPREU+Citjb2RlIGlnbm9yZXMgdGhlbSBhbmQgcmV0dXJucyA8Q09ERT5FX1VOS05PV05fQ09NTUFORDwvQ09ERT4uCisKKzxIMj48QSBOQU1FPSJtbWlzYyI+TWlzY2VsbGFuZW91cyBPdGhlciBGZWF0dXJlczwvQT48L0gyPgorCitWYXJpb3VzIG1lbnUgb3B0aW9ucyBjYW4gYWZmZWN0IHRoZSBwcm9jZXNzaW5nIGFuZCB2aXN1YWwgYXBwZWFyYW5jZQorYW5kIGlucHV0IHByb2Nlc3Npbmcgb2YgbWVudXMuICBTZWUgPENPREU+bWVudV9vcHRzKDN4KSBmb3IKK2RldGFpbHMuPC9DT0RFPiA8UD4KKworSXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSBhcHBsaWNhdGlvbiBjb2RlOyB0aGlzCitpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24gbmF2aWdhdGlvbiByZXF1ZXN0cy4gIEl0IGlzCithbHNvIHBvc3NpYmxlIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB0b3Agcm93IG9mIHRoZSBtZW51IGRpc3BsYXkuICBTZWUKKzxDT0RFPm1pdGVtX2N1cnJlbnQoM3gpPC9DT0RFPi4KKworSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBjaGFuZ2UgdGhlIG1lbnUgc3Vid2luZG93IGN1cnNvciBmb3IKK2FueSByZWFzb24sIDxDT0RFPnBvc19tZW51X2N1cnNvcigpPC9DT0RFPiB3aWxsIHJlc3RvcmUgaXQgdG8gdGhlCitjb3JyZWN0IGxvY2F0aW9uIGZvciBjb250aW51aW5nIG1lbnUgZHJpdmVyIHByb2Nlc3NpbmcuIDxQPgorCitJdCBpcyBwb3NzaWJsZSB0byBzZXQgaG9va3MgdG8gYmUgY2FsbGVkIGF0IG1lbnUgaW5pdGlhbGl6YXRpb24gYW5kCit3cmFwdXAgdGltZSwgYW5kIHdoZW5ldmVyIHRoZSBzZWxlY3RlZCBpdGVtIGNoYW5nZXMuICBTZWUKKzxDT0RFPm1lbnVfaG9vaygzeCk8L0NPREU+LiA8UD4KKworRWFjaCBpdGVtLCBhbmQgZWFjaCBtZW51LCBoYXMgYW4gYXNzb2NpYXRlZCB1c2VyIHBvaW50ZXIgb24gd2hpY2ggeW91CitjYW4gaGFuZyBhcHBsaWNhdGlvbiBkYXRhLiAgU2VlIDxDT0RFPm1pdGVtX3VzZXJwdHIoM3gpPC9DT0RFPiBhbmQKKzxDT0RFPm1lbnVfdXNlcnB0cigzeCk8L0NPREU+LgorCis8SDE+PEEgTkFNRT0iZm9ybSI+VGhlIEZvcm1zIExpYnJhcnk8L0E+PC9IMT4KKworVGhlIDxDT0RFPmZvcm08L0NPREU+IGxpYnJhcnkgaXMgYSBjdXJzZXMgZXh0ZW5zaW9uIHRoYXQgc3VwcG9ydHMgZWFzeQorcHJvZ3JhbW1pbmcgb2Ygb24tc2NyZWVuIGZvcm1zIGZvciBkYXRhIGVudHJ5IGFuZCBwcm9ncmFtIGNvbnRyb2wuIDxQPgorCitUaGUgPENPREU+Zm9ybTwvQ09ERT4gbGlicmFyeSBmaXJzdCBhcHBlYXJlZCBpbiBBVCZhbXA7VCBTeXN0ZW0gVi4gIFRoZQordmVyc2lvbiBkb2N1bWVudGVkIGhlcmUgaXMgdGhlIDxDT0RFPmZvcm08L0NPREU+IGNvZGUgZGlzdHJpYnV0ZWQKK3dpdGggPENPREU+bmN1cnNlczwvQ09ERT4uCisKKzxIMj48QSBOQU1FPSJmY29tcGlsZSI+Q29tcGlsaW5nIFdpdGggdGhlIGZvcm0gTGlicmFyeTwvQT48L0gyPgorCitZb3VyIGZvcm0tdXNpbmcgbW9kdWxlcyBtdXN0IGltcG9ydCB0aGUgZm9ybSBsaWJyYXJ5IGRlY2xhcmF0aW9ucyB3aXRoCisKKzxQUkU+CisJICAjaW5jbHVkZSAmbHQ7Zm9ybS5oJmd0OworPC9QUkU+CisKK2FuZCBtdXN0IGJlIGxpbmtlZCBleHBsaWNpdGx5IHdpdGggdGhlIGZvcm1zIGxpYnJhcnkgdXNpbmcgYW4KKzxDT0RFPi1sZm9ybTwvQ09ERT4gYXJndW1lbnQuICBOb3RlIHRoYXQgdGhleSBtdXN0IGFsc28gbGluayB0aGUKKzxDT0RFPm5jdXJzZXM8L0NPREU+IGxpYnJhcnkgd2l0aCA8Q09ERT4tbG5jdXJzZXM8L0NPREU+LiAgTWFueSBsaW5rZXJzCithcmUgdHdvLXBhc3MgYW5kIHdpbGwgYWNjZXB0IGVpdGhlciBvcmRlciwgYnV0IGl0IGlzIHN0aWxsIGdvb2QgcHJhY3RpY2UKK3RvIHB1dCA8Q09ERT4tbGZvcm08L0NPREU+IGZpcnN0IGFuZCA8Q09ERT4tbG5jdXJzZXM8L0NPREU+IHNlY29uZC4KKworPEgyPjxBIE5BTUU9ImZvdmVydmlldyI+T3ZlcnZpZXcgb2YgRm9ybXM8L0E+PC9IMj4KKworQSBmb3JtIGlzIGEgY29sbGVjdGlvbiBvZiBmaWVsZHM7IGVhY2ggZmllbGQgbWF5IGJlIGVpdGhlciBhIGxhYmVsCisoZXhwbGFuYXRvcnkgdGV4dCkgb3IgYSBkYXRhLWVudHJ5IGxvY2F0aW9uLiAgTG9uZyBmb3JtcyBtYXkgYmUKK3NlZ21lbnRlZCBpbnRvIHBhZ2VzOyBlYWNoIGVudHJ5IHRvIGEgbmV3IHBhZ2UgY2xlYXJzIHRoZSBzY3JlZW4uIDxQPgorVG8gbWFrZSBmb3JtcywgeW91IGNyZWF0ZSBncm91cHMgb2YgZmllbGRzIGFuZCBjb25uZWN0IHRoZW0gd2l0aCBmb3JtCitmcmFtZSBvYmplY3RzOyB0aGUgZm9ybSBsaWJyYXJ5IG1ha2VzIHRoaXMgcmVsYXRpdmVseSBzaW1wbGUuIDxQPgorCitPbmNlIGRlZmluZWQsIGEgZm9ybSBjYW4gYmUgPERGTj5wb3N0ZWQ8L0RGTj4sIHRoYXQgaXMgd3JpdHRlbiB0byBhbgorYXNzb2NpYXRlZCB3aW5kb3cuICBBY3R1YWxseSwgZWFjaCBmb3JtIGhhcyB0d28gYXNzb2NpYXRlZCB3aW5kb3dzOyBhCitjb250YWluaW5nIHdpbmRvdyBpbiB3aGljaCB0aGUgcHJvZ3JhbW1lciBjYW4gc2NyaWJibGUgdGl0bGVzIG9yCitib3JkZXJzLCBhbmQgYSBzdWJ3aW5kb3cgaW4gd2hpY2ggdGhlIGZvcm0gZmllbGRzIHByb3BlciBhcmUgZGlzcGxheWVkLiA8UD4KKworQXMgdGhlIGZvcm0gdXNlciBmaWxscyBvdXQgdGhlIHBvc3RlZCBmb3JtLCBuYXZpZ2F0aW9uIGFuZCBlZGl0aW5nCitrZXlzIHN1cHBvcnQgbW92ZW1lbnQgYmV0d2VlbiBmaWVsZHMsIGVkaXRpbmcga2V5cyBzdXBwb3J0IG1vZGlmeWluZworZmllbGQsIGFuZCBwbGFpbiB0ZXh0IGFkZHMgdG8gb3IgY2hhbmdlcyBkYXRhIGluIGEgY3VycmVudCBmaWVsZC4gIFRoZQorZm9ybSBsaWJyYXJ5IGFsbG93cyB5b3UgKHRoZSBmb3JtcyBkZXNpZ25lcikgdG8gYmluZCBlYWNoIG5hdmlnYXRpb24KK2FuZCBlZGl0aW5nIGtleSB0byBhbnkga2V5c3Ryb2tlIGFjY2VwdGVkIGJ5IDxDT0RFPmN1cnNlczwvQ09ERT4KKworRmllbGRzIG1heSBoYXZlIHZhbGlkYXRpb24gY29uZGl0aW9ucyBvbiB0aGVtLCBzbyB0aGF0IHRoZXkgY2hlY2sgaW5wdXQKK2RhdGEgZm9yIHR5cGUgYW5kIHZhbHVlLiAgVGhlIGZvcm0gbGlicmFyeSBzdXBwbGllcyBhIHJpY2ggc2V0IG9mCitwcmUtZGVmaW5lZCBmaWVsZCB0eXBlcywgYW5kIG1ha2VzIGl0IHJlbGF0aXZlbHkgZWFzeSB0byBkZWZpbmUgbmV3IG9uZXMuIDxQPgorCitPbmNlIGl0cyB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQgKG9yIGFib3J0ZWQpLCBhIGZvcm0gbWF5IGJlCis8REZOPnVucG9zdGVkPC9ERk4+ICh0aGF0IGlzLCB1bmRpc3BsYXllZCksIGFuZCBmaW5hbGx5IGZyZWVkIHRvIG1ha2UKK3RoZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgaXRzIGl0ZW1zIGF2YWlsYWJsZSBmb3IgcmUtdXNlLiA8UD4KKworVGhlIGdlbmVyYWwgZmxvdyBvZiBjb250cm9sIG9mIGEgZm9ybSBwcm9ncmFtIGxvb2tzIGxpa2UgdGhpczoKKworPE9MPgorPExJPkluaXRpYWxpemUgPENPREU+Y3Vyc2VzPC9DT0RFPi4KKzxMST5DcmVhdGUgdGhlIGZvcm0gZmllbGRzLCB1c2luZyA8Q09ERT5uZXdfZmllbGQoKTwvQ09ERT4uCis8TEk+Q3JlYXRlIHRoZSBmb3JtIHVzaW5nIDxDT0RFPm5ld19mb3JtKCk8L0NPREU+LgorPExJPlBvc3QgdGhlIGZvcm0gdXNpbmcgPENPREU+cG9zdF9mb3JtKCk8L0NPREU+LgorPExJPlJlZnJlc2ggdGhlIHNjcmVlbi4KKzxMST5Qcm9jZXNzIHVzZXIgcmVxdWVzdHMgdmlhIGFuIGlucHV0IGxvb3AuCis8TEk+VW5wb3N0IHRoZSBmb3JtIHVzaW5nIDxDT0RFPnVucG9zdF9mb3JtKCk8L0NPREU+LgorPExJPkZyZWUgdGhlIGZvcm0sIHVzaW5nIDxDT0RFPmZyZWVfZm9ybSgpPC9DT0RFPi4KKzxMST5GcmVlIHRoZSBmaWVsZHMgdXNpbmcgPENPREU+ZnJlZV9maWVsZCgpPC9DT0RFPi4KKzxMST5UZXJtaW5hdGUgPENPREU+Y3Vyc2VzPC9DT0RFPi4KKzwvT0w+CisKK05vdGUgdGhhdCB0aGlzIGxvb2tzIG11Y2ggbGlrZSBhIG1lbnUgcHJvZ3JhbTsgdGhlIGZvcm0gbGlicmFyeSBoYW5kbGVzCit0YXNrcyB3aGljaCBhcmUgaW4gbWFueSB3YXlzIHNpbWlsYXIsIGFuZCBpdHMgaW50ZXJmYWNlIHdhcyBvYnZpb3VzbHkKK2Rlc2lnbmVkIHRvIHJlc2VtYmxlIHRoYXQgb2YgdGhlIDxBIEhSRUY9IiNtZW51Ij5tZW51IGxpYnJhcnk8L0E+Cit3aGVyZXZlciBwb3NzaWJsZS4gPFA+CisKK0luIGZvcm1zIHByb2dyYW1zLCBob3dldmVyLCB0aGUgYHByb2Nlc3MgdXNlciByZXF1ZXN0cycgaXMgc29tZXdoYXQgbW9yZQorY29tcGxpY2F0ZWQgdGhhbiBmb3IgbWVudXMuICBCZXNpZGVzIG1lbnUtbGlrZSBuYXZpZ2F0aW9uIG9wZXJhdGlvbnMsCit0aGUgbWVudSBkcml2ZXIgbG9vcCBoYXMgdG8gc3VwcG9ydCBmaWVsZCBlZGl0aW5nIGFuZCBkYXRhIHZhbGlkYXRpb24uCisKKzxIMj48QSBOQU1FPSJmY3JlYXRlIj5DcmVhdGluZyBhbmQgRnJlZWluZyBGaWVsZHMgYW5kIEZvcm1zPC9BPjwvSDI+CisKK1RoZSBiYXNpYyBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZmllbGRzIGlzIDxDT0RFPm5ld19maWVsZCgpPC9DT0RFPjoKKworPFBSRT4KK0ZJRUxEICpuZXdfZmllbGQoaW50IGhlaWdodCwgaW50IHdpZHRoLCAgIC8qIG5ldyBmaWVsZCBzaXplICovCisgICAgICAgICAgICAgICAgIGludCB0b3AsIGludCBsZWZ0LCAgICAgICAvKiB1cHBlciBsZWZ0IGNvcm5lciAqLworICAgICAgICAgICAgICAgICBpbnQgb2Zmc2NyZWVuLCAgICAgICAgICAgLyogbnVtYmVyIG9mIG9mZnNjcmVlbiByb3dzICovCisgICAgICAgICAgICAgICAgIGludCBuYnVmKTsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygd29ya2luZyBidWZmZXJzICovCis8L1BSRT4KKworTWVudSBpdGVtcyBhbHdheXMgb2NjdXB5IGEgc2luZ2xlIHJvdywgYnV0IGZvcm1zIGZpZWxkcyBtYXkgaGF2ZQorbXVsdGlwbGUgcm93cy4gIFNvIDxDT0RFPm5ld19maWVsZCgpPC9DT0RFPiByZXF1aXJlcyB5b3UgdG8gc3BlY2lmeSBhCit3aWR0aCBhbmQgaGVpZ2h0ICh0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cywgd2hpY2ggbWlzdCBib3RoIGJlIGdyZWF0ZXIKK3RoYW4gemVybykuIDxQPgorCitZb3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWVsZCdzIHVwcGVyIGxlZnQgY29ybmVyIG9uCit0aGUgc2NyZWVuICh0aGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudHMsIHdoaWNoIG11c3QgYmUgemVybyBvcgorZ3JlYXRlcikuIE5vdGUgdGhhdCB0aGVzZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGZvcm0KK3N1YndpbmRvdywgd2hpY2ggd2lsbCBjb2luY2lkZSB3aXRoIDxDT0RFPnN0ZHNjcjwvQ09ERT4gYnkgZGVmYXVsdCBidXQKK25lZWQgbm90IGJlIDxDT0RFPnN0ZHNjcjwvQ09ERT4gaWYgeW91J3ZlIGRvbmUgYW4gZXhwbGljaXQKKzxDT0RFPnNldF9mb3JtX3dpbigpPC9DT0RFPiBjYWxsLiA8UD4KKworVGhlIGZpZnRoIGFyZ3VtZW50IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIG51bWJlciBvZiBvZmYtc2NyZWVuIHJvd3MuICBJZgordGhpcyBpcyB6ZXJvLCB0aGUgZW50aXJlIGZpZWxkIHdpbGwgYWx3YXlzIGJlIGRpc3BsYXllZC4gIElmIGl0IGlzCitub256ZXJvLCB0aGUgZm9ybSB3aWxsIGJlIHNjcm9sbGFibGUsIHdpdGggb25seSBvbmUgc2NyZWVuLWZ1bGwgKGluaXRpYWxseQordGhlIHRvcCBwYXJ0KSBkaXNwbGF5ZWQgYXQgYW55IGdpdmVuIHRpbWUuICBJZiB5b3UgbWFrZSBhIGZpZWxkIGR5bmFtaWMKK2FuZCBncm93IGl0IHNvIGl0IHdpbGwgbm8gbG9uZ2VyIGZpdCBvbiB0aGUgc2NyZWVuLCB0aGUgZm9ybSB3aWxsIGJlY29tZQorc2Nyb2xsYWJsZSBldmVuIGlmIHRoZSA8Q09ERT5vZmZzY3JlZW48L0NPREU+IGFyZ3VtZW50IHdhcyBpbml0aWFsbHkgemVyby4gPFA+CisKK1RoZSBmb3JtcyBsaWJyYXJ5IGFsbG9jYXRlcyBvbmUgd29ya2luZyBidWZmZXIgcGVyIGZpZWxkOyB0aGUgc2l6ZSBvZgorZWFjaCBidWZmZXIgaXMgPENPREU+KChoZWlnaHQgKyBvZmZzY3JlZW4pKndpZHRoICsgMTwvQ09ERT4sIG9uZSBjaGFyYWN0ZXIKK2ZvciBlYWNoIHBvc2l0aW9uIGluIHRoZSBmaWVsZCBwbHVzIGEgTlVMIHRlcm1pbmF0b3IuICBUaGUgc2l4dGgKK2FyZ3VtZW50IGlzIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBkYXRhIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgZm9yIHRoZQorZmllbGQ7IHlvdXIgYXBwbGljYXRpb24gY2FuIHVzZSB0aGVtIGZvciBpdHMgb3duIHB1cnBvc2VzLgorCis8UFJFPgorRklFTEQgKmR1cF9maWVsZChGSUVMRCAqZmllbGQsICAgICAgICAgICAgLyogZmllbGQgdG8gY29weSAqLworICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCk7ICAgICAgLyogbG9jYXRpb24gb2YgbmV3IGNvcHkgKi8KKzwvUFJFPgorCitUaGUgZnVuY3Rpb24gPENPREU+ZHVwX2ZpZWxkKCk8L0NPREU+IGR1cGxpY2F0ZXMgYW4gZXhpc3RpbmcgZmllbGQgYXQgYQorbmV3IGxvY2F0aW9uLiAgU2l6ZSBhbmQgYnVmZmVyaW5nIGluZm9ybWF0aW9uIGFyZSBjb3BpZWQ7IHNvbWUKK2F0dHJpYnV0ZSBmbGFncyBhbmQgc3RhdHVzIGJpdHMgYXJlIG5vdCAoc2VlIHRoZQorPENPREU+Zm9ybV9maWVsZF9uZXcoM1gpPC9DT0RFPiBmb3IgZGV0YWlscykuCisKKzxQUkU+CitGSUVMRCAqbGlua19maWVsZChGSUVMRCAqZmllbGQsICAgICAgICAgICAvKiBmaWVsZCB0byBjb3B5ICovCisgICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCk7ICAgICAvKiBsb2NhdGlvbiBvZiBuZXcgY29weSAqLworPC9QUkU+CisKK1RoZSBmdW5jdGlvbiA8Q09ERT5saW5rX2ZpZWxkKCk8L0NPREU+IGFsc28gZHVwbGljYXRlcyBhbiBleGlzdGluZyBmaWVsZAorYXQgYSBuZXcgbG9jYXRpb24uICBUaGUgZGlmZmVyZW5jZSBmcm9tIDxDT0RFPmR1cF9maWVsZCgpPC9DT0RFPiBpcyB0aGF0CitpdCBhcnJhbmdlcyBmb3IgdGhlIG5ldyBmaWVsZCdzIGJ1ZmZlciB0byBiZSBzaGFyZWQgd2l0aCB0aGUgb2xkIG9uZS4gPFA+CisKK0Jlc2lkZXMgdGhlIG9idmlvdXMgdXNlIGluIG1ha2luZyBhIGZpZWxkIGVkaXRhYmxlIGZyb20gdHdvIGRpZmZlcmVudAorZm9ybSBwYWdlcywgbGlua2VkIGZpZWxkcyBnaXZlIHlvdSBhIHdheSB0byBoYWNrIGluIGR5bmFtaWMgbGFiZWxzLiAgSWYKK3lvdSBkZWNsYXJlIHNldmVyYWwgZmllbGRzIGxpbmtlZCB0byBhbiBvcmlnaW5hbCwgYW5kIHRoZW4gbWFrZSB0aGVtCitpbmFjdGl2ZSwgY2hhbmdlcyBmcm9tIHRoZSBvcmlnaW5hbCB3aWxsIHN0aWxsIGJlIHByb3BhZ2F0ZWQgdG8gdGhlCitsaW5rZWQgZmllbGRzLiA8UD4KKworQXMgd2l0aCBkdXBsaWNhdGVkIGZpZWxkcywgbGlua2VkIGZpZWxkcyBoYXZlIGF0dHJpYnV0ZSBiaXRzIHNlcGFyYXRlCitmcm9tIHRoZSBvcmlnaW5hbC4gPFA+CisKK0FzIHlvdSBtaWdodCBndWVzcywgYWxsIHRoZXNlIGZpZWxkLWFsbG9jYXRpb25zIHJldHVybiA8Q09ERT5OVUxMPC9DT0RFPiBpZgordGhlIGZpZWxkIGFsbG9jYXRpb24gaXMgbm90IHBvc3NpYmxlIGR1ZSB0byBhbiBvdXQtb2YtbWVtb3J5IGVycm9yIG9yCitvdXQtb2YtYm91bmRzIGFyZ3VtZW50cy4gPFA+CisKK1RvIGNvbm5lY3QgZmllbGRzIHRvIGEgZm9ybSwgdXNlCisKKzxQUkU+CitGT1JNICpuZXdfZm9ybShGSUVMRCAqKmZpZWxkcyk7Cis8L1BSRT4KKworVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRvIHNlZSBhIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBmaWVsZCBwb2ludGVycy4KK1NhaWQgZmllbGRzIGFyZSBjb25uZWN0ZWQgdG8gYSBuZXdseS1hbGxvY2F0ZWQgZm9ybSBvYmplY3Q7IGl0cyBhZGRyZXNzCitpcyByZXR1cm5lZCAob3IgZWxzZSBOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzKS4gICA8UD4KKworTm90ZSB0aGF0IDxDT0RFPm5ld19maWVsZCgpPC9DT0RFPiBkb2VzIDxFTT5ub3Q8L0VNPiBjb3B5IHRoZSBwb2ludGVyIGFycmF5CitpbnRvIHByaXZhdGUgc3RvcmFnZTsgaWYgeW91IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIHBvaW50ZXIgYXJyYXkKK2R1cmluZyBmb3JtcyBwcm9jZXNzaW5nLCBhbGwgbWFubmVyIG9mIGJpemFycmUgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gIEFsc28KK25vdGUgdGhhdCBhbnkgZ2l2ZW4gZmllbGQgbWF5IG9ubHkgYmUgY29ubmVjdGVkIHRvIG9uZSBmb3JtLiA8UD4KKworVGhlIGZ1bmN0aW9ucyA8Q09ERT5mcmVlX2ZpZWxkKCk8L0NPREU+IGFuZCA8Q09ERT5mcmVlX2Zvcm08L0NPREU+IGFyZSBhdmFpbGFibGUKK3RvIGZyZWUgZmllbGQgYW5kIGZvcm0gb2JqZWN0cy4gIEl0IGlzIGFuIGVycm9yIHRvIGF0dGVtcHQgdG8gZnJlZSBhIGZpZWxkCitjb25uZWN0ZWQgdG8gYSBmb3JtLCBidXQgbm90IHZpY2UtdmVyc2E7IHRodXMsIHlvdSB3aWxsIGdlbmVyYWxseSBmcmVlCit5b3VyIGZvcm0gb2JqZWN0cyBmaXJzdC4KKworPEgyPjxBIE5BTUU9ImZhdHRyaWJ1dGVzIj5GZXRjaGluZyBhbmQgQ2hhbmdpbmcgRmllbGQgQXR0cmlidXRlczwvQT48L0gyPgorCitFYWNoIGZvcm0gZmllbGQgaGFzIGEgbnVtYmVyIG9mIGxvY2F0aW9uIGFuZCBzaXplIGF0dHJpYnV0ZXMKK2Fzc29jaWF0ZWQgd2l0aCBpdC4gVGhlcmUgYXJlIG90aGVyIGZpZWxkIGF0dHJpYnV0ZXMgdXNlZCB0byBjb250cm9sCitkaXNwbGF5IGFuZCBlZGl0aW5nIG9mIHRoZSBmaWVsZC4gIFNvbWUgKGZvciBleGFtcGxlLCB0aGUgPENPREU+T19TVEFUSUM8L0NPREU+IGJpdCkKK2ludm9sdmUgc3VmZmljaWVudCBjb21wbGljYXRpb25zIHRvIGJlIGNvdmVyZWQgaW4gc2VjdGlvbnMgb2YgdGhlaXIgb3duCitsYXRlciBvbi4gIFdlIGNvdmVyIHRoZSBmdW5jdGlvbnMgdXNlZCB0byBnZXQgYW5kIHNldCBzZXZlcmFsIGJhc2ljCithdHRyaWJ1dGVzIGhlcmUuIDxQPgorCitXaGVuIGEgZmllbGQgaXMgY3JlYXRlZCwgdGhlIGF0dHJpYnV0ZXMgbm90IHNwZWNpZmllZCBieSB0aGUKKzxDT0RFPm5ld19maWVsZDwvQ09ERT4gZnVuY3Rpb24gYXJlIGNvcGllZCBmcm9tIGFuIGludmlzaWJsZSBzeXN0ZW0KK2RlZmF1bHQgZmllbGQuICBJbiBhdHRyaWJ1dGUtc2V0dGluZyBhbmQgLWZldGNoaW5nIGZ1bmN0aW9ucywgdGhlCithcmd1bWVudCBOVUxMIGlzIHRha2VuIHRvIG1lYW4gdGhpcyBmaWVsZC4gIENoYW5nZXMgdG8gaXQgcGVyc2lzdAorYXMgZGVmYXVsdHMgdW50aWwgeW91ciBmb3JtcyBhcHBsaWNhdGlvbiB0ZXJtaW5hdGVzLgorCis8SDM+PEEgTkFNRT0iZnNpemVzIj5GZXRjaGluZyBTaXplIGFuZCBMb2NhdGlvbiBEYXRhPC9BPjwvSDM+CisKK1lvdSBjYW4gcmV0cmlldmUgZmllbGQgc2l6ZXMgYW5kIGxvY2F0aW9ucyB0aHJvdWdoOgorCis8UFJFPgoraW50IGZpZWxkX2luZm8oRklFTEQgKmZpZWxkLCAgICAgICAgICAgICAgLyogZmllbGQgZnJvbSB3aGljaCB0byBmZXRjaCAqLworICAgICAgICAgICAgICAgaW50ICpoZWlnaHQsICppbnQgd2lkdGgsICAgLyogZmllbGQgc2l6ZSAqLworICAgICAgICAgICAgICAgaW50ICp0b3AsIGludCAqbGVmdCwgICAgICAgLyogdXBwZXIgbGVmdCBjb3JuZXIgKi8KKyAgICAgICAgICAgICAgIGludCAqb2Zmc2NyZWVuLCAgICAgICAgICAgIC8qIG51bWJlciBvZiBvZmZzY3JlZW4gcm93cyAqLworICAgICAgICAgICAgICAgaW50ICpuYnVmKTsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHdvcmtpbmcgYnVmZmVycyAqLworPC9QUkU+CisKK1RoaXMgZnVuY3Rpb24gaXMgYSBzb3J0IG9mIGludmVyc2Ugb2YgPENPREU+bmV3X2ZpZWxkKCk8L0NPREU+OyBpbnN0ZWFkIG9mCitzZXR0aW5nIHNpemUgYW5kIGxvY2F0aW9uIGF0dHJpYnV0ZXMgb2YgYSBuZXcgZmllbGQsIGl0IGZldGNoZXMgdGhlbQorZnJvbSBhbiBleGlzdGluZyBvbmUuCisKKzxIMz48QSBOQU1FPSJmbG9jYXRpb24iPkNoYW5naW5nIHRoZSBGaWVsZCBMb2NhdGlvbjwvQT48L0gzPgorCitJdCBpcyBwb3NzaWJsZSB0byBtb3ZlIGEgZmllbGQncyBsb2NhdGlvbiBvbiB0aGUgc2NyZWVuOgorCis8UFJFPgoraW50IG1vdmVfZmllbGQoRklFTEQgKmZpZWxkLCAgICAgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgIGludCB0b3AsIGludCBsZWZ0KTsgICAgICAgIC8qIG5ldyB1cHBlci1sZWZ0IGNvcm5lciAqLworPC9QUkU+CisKK1lvdSBjYW4sIG9mIGNvdXJzZS4gcXVlcnkgdGhlIGN1cnJlbnQgbG9jYXRpb24gdGhyb3VnaCA8Q09ERT5maWVsZF9pbmZvKCk8L0NPREU+LgorCis8SDM+PEEgTkFNRT0iZmp1c3QiPlRoZSBKdXN0aWZpY2F0aW9uIEF0dHJpYnV0ZTwvQT48L0gzPgorCitPbmUtbGluZSBmaWVsZHMgbWF5IGJlIHVuanVzdGlmaWVkLCBqdXN0aWZpZWQgcmlnaHQsIGp1c3RpZmllZCBsZWZ0LAorb3IgY2VudGVyZWQuICBIZXJlIGlzIGhvdyB5b3UgbWFuaXB1bGF0ZSB0aGlzIGF0dHJpYnV0ZToKKworPFBSRT4KK2ludCBzZXRfZmllbGRfanVzdChGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IGp1c3Rtb2RlKTsgICAgICAgICAvKiBtb2RlIHRvIHNldCAqLworCitpbnQgZmllbGRfanVzdChGSUVMRCAqZmllbGQpOyAgICAgICAgICAgICAvKiBmZXRjaCBtb2RlIG9mIGZpZWxkICovCis8L1BSRT4KKworVGhlIG1vZGUgdmFsdWVzIGFjY2VwdGVkIGFuZCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9ucyBhcmUKK3ByZXByb2Nlc3NvciBtYWNyb3MgPENPREU+Tk9fSlVTVElGSUNBVElPTjwvQ09ERT4sIDxDT0RFPkpVU1RJRllfUklHSFQ8L0NPREU+LAorPENPREU+SlVTVElGWV9MRUZUPC9DT0RFPiwgb3IgPENPREU+SlVTVElGWV9DRU5URVI8L0NPREU+LgorCis8SDM+PEEgTkFNRT0iZmRpc3BhdHRzIj5GaWVsZCBEaXNwbGF5IEF0dHJpYnV0ZXM8L0E+PC9IMz4KKworRm9yIGVhY2ggZmllbGQsIHlvdSBjYW4gc2V0IGEgZm9yZWdyb3VuZCBhdHRyaWJ1dGUgZm9yIGVudGVyZWQKK2NoYXJhY3RlcnMsIGEgYmFja2dyb3VuZCBhdHRyaWJ1dGUgZm9yIHRoZSBlbnRpcmUgZmllbGQsIGFuZCBhIHBhZAorY2hhcmFjdGVyIGZvciB0aGUgdW5maWxsZWQgcG9ydGlvbiBvZiB0aGUgZmllbGQuICBZb3UgY2FuIGFsc28KK2NvbnRyb2wgcGFnaW5hdGlvbiBvZiB0aGUgZm9ybS4gPFA+CisKK1RoaXMgZ3JvdXAgb2YgZm91ciBmaWVsZCBhdHRyaWJ1dGVzIGNvbnRyb2xzIHRoZSB2aXN1YWwgYXBwZWFyYW5jZQorb2YgdGhlIGZpZWxkIG9uIHRoZSBzY3JlZW4sIHdpdGhvdXQgYWZmZWN0aW5nIGluIGFueSB3YXkgdGhlIGRhdGEKK2luIHRoZSBmaWVsZCBidWZmZXIuCisKKzxQUkU+CitpbnQgc2V0X2ZpZWxkX2ZvcmUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGNodHlwZSBhdHRyKTsgICAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLworCitjaHR5cGUgZmllbGRfZm9yZShGSUVMRCAqZmllbGQpOyAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworCitpbnQgc2V0X2ZpZWxkX2JhY2soRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGNodHlwZSBhdHRyKTsgICAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLworCitjaHR5cGUgZmllbGRfYmFjayhGSUVMRCAqZmllbGQpOyAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworCitpbnQgc2V0X2ZpZWxkX3BhZChGSUVMRCAqZmllbGQsICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBpbnQgcGFkKTsgICAgICAgICAgICAgICAgLyogcGFkIGNoYXJhY3RlciB0byBzZXQgKi8KKworY2h0eXBlIGZpZWxkX3BhZChGSUVMRCAqZmllbGQpOworCitpbnQgc2V0X25ld19wYWdlKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBpbnQgZmxhZyk7ICAgICAgICAgICAgICAgLyogVFJVRSB0byBmb3JjZSBuZXcgcGFnZSAqLworCitjaHR5cGUgbmV3X3BhZ2UoRklFTEQgKmZpZWxkKTsgICAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworPC9QUkU+CisKK1RoZSBhdHRyaWJ1dGVzIHNldCBhbmQgcmV0dXJuZWQgYnkgdGhlIGZpcnN0IGZvdXIgZnVuY3Rpb25zIGFyZSBub3JtYWwKKzxDT0RFPmN1cnNlcygzeCk8L0NPREU+IGRpc3BsYXkgYXR0cmlidXRlIHZhbHVlcyAoPENPREU+QV9TVEFORE9VVDwvQ09ERT4sCis8Q09ERT5BX0JPTEQ8L0NPREU+LCA8Q09ERT5BX1JFVkVSU0U8L0NPREU+IGV0YykuCisKK1RoZSBwYWdlIGJpdCBvZiBhIGZpZWxkIGNvbnRyb2xzIHdoZXRoZXIgaXQgaXMgZGlzcGxheWVkIGF0IHRoZSBzdGFydCBvZgorYSBuZXcgZm9ybSBzY3JlZW4uCisKKzxIMz48QSBOQU1FPSJmb3B0aW9ucyI+RmllbGQgT3B0aW9uIEJpdHM8L0E+PC9IMz4KKworVGhlcmUgaXMgYWxzbyBhIGxhcmdlIGNvbGxlY3Rpb24gb2YgZmllbGQgb3B0aW9uIGJpdHMgeW91IGNhbiBzZXQgdG8gY29udHJvbAordmFyaW91cyBhc3BlY3RzIG9mIGZvcm1zIHByb2Nlc3NpbmcuICBZb3UgY2FuIG1hbmlwdWxhdGUgdGhlbSB3aXRoIHRoZXNlCitmdW5jdGlvbnM6CisKKzxQUkU+CitpbnQgc2V0X2ZpZWxkX29wdHMoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgLyogYXR0cmlidXRlIHRvIHNldCAqLworCitpbnQgZmllbGRfb3B0c19vbihGSUVMRCAqZmllbGQsICAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAgLyogYXR0cmlidXRlcyB0byB0dXJuIG9uICovCisKK2ludCBmaWVsZF9vcHRzX29mZihGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAvKiBhdHRyaWJ1dGVzIHRvIHR1cm4gb2ZmICovCisKK2ludCBmaWVsZF9vcHRzKEZJRUxEICpmaWVsZCk7ICAgICAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCis8L1BSRT4KKworQnkgZGVmYXVsdCwgYWxsIG9wdGlvbnMgYXJlIG9uLiAgSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBvcHRpb24gYml0czoKKzxETD4KKzxEVD4gT19WSVNJQkxFCis8REQ+IENvbnRyb2xzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIHZpc2libGUgb24gdGhlIHNjcmVlbi4gIENhbiBiZSB1c2VkCitkdXJpbmcgZm9ybSBwcm9jZXNzaW5nIHRvIGhpZGUgb3IgcG9wIHVwIGZpZWxkcyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlCitvZiBwYXJlbnQgZmllbGRzLgorPERUPiBPX0FDVElWRQorPEREPiBDb250cm9scyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBhY3RpdmUgZHVyaW5nIGZvcm1zIHByb2Nlc3NpbmcgKGkuZS4KK3Zpc2l0ZWQgYnkgZm9ybSBuYXZpZ2F0aW9uIGtleXMpLiAgQ2FuIGJlIHVzZWQgdG8gbWFrZSBsYWJlbHMgb3IgZGVyaXZlZAorZmllbGRzIHdpdGggYnVmZmVyIHZhbHVlcyBhbHRlcmFibGUgYnkgdGhlIGZvcm1zIGFwcGxpY2F0aW9uLCBub3QgdGhlIHVzZXIuCis8RFQ+IE9fUFVCTElDCis8REQ+IENvbnRyb2xzIHdoZXRoZXIgZGF0YSBpcyBkaXNwbGF5ZWQgZHVyaW5nIGZpZWxkIGVudHJ5LiAgSWYgdGhpcyBvcHRpb24gaXMKK3R1cm5lZCBvZmYgb24gYSBmaWVsZCwgdGhlIGxpYnJhcnkgd2lsbCBhY2NlcHQgYW5kIGVkaXQgZGF0YSBpbiB0aGF0IGZpZWxkLAorYnV0IGl0IHdpbGwgbm90IGJlIGRpc3BsYXllZCBhbmQgdGhlIHZpc2libGUgZmllbGQgY3Vyc29yIHdpbGwgbm90IG1vdmUuCitZb3UgY2FuIHR1cm4gb2ZmIHRoZSBPX1BVQkxJQyBiaXQgdG8gZGVmaW5lIHBhc3N3b3JkIGZpZWxkcy4KKzxEVD4gT19FRElUCis8REQ+IENvbnRyb2xzIHdoZXRoZXIgdGhlIGZpZWxkJ3MgZGF0YSBjYW4gYmUgbW9kaWZpZWQuICBXaGVuIHRoaXMgb3B0aW9uIGlzCitvZmYsIGFsbCBlZGl0aW5nIHJlcXVlc3RzIGV4Y2VwdCA8Q09ERT5SRVFfUFJFVl9DSE9JQ0U8L0NPREU+IGFuZAorPENPREU+UkVRX05FWFRfQ0hPSUNFPC9DT0RFPiB3aWxsIGZhaWwuICBTdWNoIHJlYWQtb25seSBmaWVsZHMgbWF5IGJlIHVzZWZ1bCBmb3IKK2hlbHAgbWVzc2FnZXMuCis8RFQ+IE9fV1JBUAorPEREPiBDb250cm9scyB3b3JkLXdyYXBwaW5nIGluIG11bHRpLWxpbmUgZmllbGRzLiAgTm9ybWFsbHksIHdoZW4gYW55CitjaGFyYWN0ZXIgb2YgYSAoYmxhbmstc2VwYXJhdGVkKSB3b3JkIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLCB0aGUKK2VudGlyZSB3b3JkIGlzIHdyYXBwZWQgdG8gdGhlIG5leHQgbGluZSAoYXNzdW1pbmcgdGhlcmUgaXMgb25lKS4gIFdoZW4gdGhpcworb3B0aW9uIGlzIG9mZiwgdGhlIHdvcmQgd2lsbCBiZSBzcGxpdCBhY3Jvc3MgdGhlIGxpbmUgYnJlYWsuCis8RFQ+IE9fQkxBTksKKzxERD4gQ29udHJvbHMgZmllbGQgYmxhbmtpbmcuICBXaGVuIHRoaXMgb3B0aW9uIGlzIG9uLCBlbnRlcmluZyBhIGNoYXJhY3RlciBhdAordGhlIGZpcnN0IGZpZWxkIHBvc2l0aW9uIGVyYXNlcyB0aGUgZW50aXJlIGZpZWxkIChleGNlcHQgZm9yIHRoZSBqdXN0LWVudGVyZWQKK2NoYXJhY3RlcikuCis8RFQ+IE9fQVVUT1NLSVAKKzxERD4gQ29udHJvbHMgYXV0b21hdGljIHNraXAgdG8gbmV4dCBmaWVsZCB3aGVuIHRoaXMgb25lIGZpbGxzLiAgTm9ybWFsbHksCit3aGVuIHRoZSBmb3JtcyB1c2VyIHRyaWVzIHRvIHR5cGUgbW9yZSBkYXRhIGludG8gYSBmaWVsZCB0aGFuIHdpbGwgZml0LAordGhlIGVkaXRpbmcgbG9jYXRpb24ganVtcHMgdG8gbmV4dCBmaWVsZC4gIFdoZW4gdGhpcyBvcHRpb24gaXMgb2ZmLCB0aGUKK3VzZXIncyBjdXJzb3Igd2lsbCBoYW5nIGF0IHRoZSBlbmQgb2YgdGhlIGZpZWxkLiAgVGhpcyBvcHRpb24gaXMgaWdub3JlZAoraW4gZHluYW1pYyBmaWVsZHMgdGhhdCBoYXZlIG5vdCByZWFjaGVkIHRoZWlyIHNpemUgbGltaXQuCis8RFQ+IE9fTlVMTE9LCis8REQ+IENvbnRyb2xzIHdoZXRoZXIgPEEgSFJFRj0iI2Z2YWxpZGF0aW9uIj52YWxpZGF0aW9uPC9BPiBpcyBhcHBsaWVkIHRvCitibGFuayBmaWVsZHMuICBOb3JtYWxseSwgaXQgaXMgbm90OyB0aGUgdXNlciBjYW4gbGVhdmUgYSBmaWVsZCBibGFuaword2l0aG91dCBpbnZva2luZyB0aGUgdXN1YWwgdmFsaWRhdGlvbiBjaGVjayBvbiBleGl0LiAgSWYgdGhpcyBvcHRpb24gaXMKK29mZiBvbiBhIGZpZWxkLCBleGl0IGZyb20gaXQgd2lsbCBpbnZva2UgYSB2YWxpZGF0aW9uIGNoZWNrLgorPERUPiBPX1BBU1NPSworPEREPiBDb250cm9scyB3aGV0aGVyIHZhbGlkYXRpb24gb2NjdXJzIG9uIGV2ZXJ5IGV4aXQsIG9yIG9ubHkgYWZ0ZXIKK3RoZSBmaWVsZCBpcyBtb2RpZmllZC4gIE5vcm1hbGx5IHRoZSBsYXR0ZXIgaXMgdHJ1ZS4gIFNldHRpbmcgT19QQVNTT0sKK21heSBiZSB1c2VmdWwgaWYgeW91ciBmaWVsZCdzIHZhbGlkYXRpb24gZnVuY3Rpb24gbWF5IGNoYW5nZSBkdXJpbmcKK2Zvcm1zIHByb2Nlc3NpbmcuCis8RFQ+IE9fU1RBVElDCis8REQ+IENvbnRyb2xzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGZpeGVkIHRvIGl0cyBpbml0aWFsIGRpbWVuc2lvbnMuICBJZiB5b3UKK3R1cm4gdGhpcyBvZmYsIHRoZSBmaWVsZCBiZWNvbWVzIDxBIEhSRUY9IiNmZHluYW1pYyI+ZHluYW1pYzwvQT4gYW5kIHdpbGwKK3N0cmV0Y2ggdG8gZml0IGVudGVyZWQgZGF0YS4KKzwvREw+CisKK0EgZmllbGQncyBvcHRpb25zIGNhbm5vdCBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBmaWVsZCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCitIb3dldmVyLCBvcHRpb25zIG1heSBiZSBjaGFuZ2VkIG9uIHBvc3RlZCBmaWVsZHMgdGhhdCBhcmUgbm90IGN1cnJlbnQuIDxQPgorCitUaGUgb3B0aW9uIHZhbHVlcyBhcmUgYml0LW1hc2tzIGFuZCBjYW4gYmUgY29tcG9zZWQgd2l0aCBsb2dpY2FsLW9yIGluCit0aGUgb2J2aW91cyB3YXkuCisKKzxIMj48QSBOQU1FPSJmc3RhdHVzIj5GaWVsZCBTdGF0dXM8L0E+PC9IMj4KKworRXZlcnkgZmllbGQgaGFzIGEgc3RhdHVzIGZsYWcsIHdoaWNoIGlzIHNldCB0byBGQUxTRSB3aGVuIHRoZSBmaWVsZCBpcworY3JlYXRlZCBhbmQgVFJVRSB3aGVuIHRoZSB2YWx1ZSBpbiBmaWVsZCBidWZmZXIgMCBjaGFuZ2VzLiAgVGhpcyBmbGFnIGNhbgorYmUgcXVlcmllZCBhbmQgc2V0IGRpcmVjdGx5OgorCis8UFJFPgoraW50IHNldF9maWVsZF9zdGF0dXMoRklFTEQgKmZpZWxkLCAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cyk7ICAgICAgICAgLyogbW9kZSB0byBzZXQgKi8KKworaW50IGZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQpOyAgICAgICAgIC8qIGZldGNoIG1vZGUgb2YgZmllbGQgKi8KKzwvUFJFPgorCitTZXR0aW5nIHRoaXMgZmxhZyB1bmRlciBwcm9ncmFtIGNvbnRyb2wgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgdXNlIHRoZSBzYW1lCitmb3JtIHJlcGVhdGVkbHksIGxvb2tpbmcgZm9yIG1vZGlmaWVkIGZpZWxkcyBlYWNoIHRpbWUuIDxQPgorCitDYWxsaW5nIDxDT0RFPmZpZWxkX3N0YXR1cygpPC9DT0RFPiBvbiBhIGZpZWxkIG5vdCBjdXJyZW50bHkgc2VsZWN0ZWQKK2ZvciBpbnB1dCB3aWxsIHJldHVybiBhIGNvcnJlY3QgdmFsdWUuICBDYWxsaW5nIDxDT0RFPmZpZWxkX3N0YXR1cygpPC9DT0RFPiBvbiBhCitmaWVsZCB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgaW5wdXQgbWF5IG5vdCBuZWNlc3NhcmlseSBnaXZlIGEKK2NvcnJlY3QgZmllbGQgc3RhdHVzIHZhbHVlLCBiZWNhdXNlIGVudGVyZWQgZGF0YSBpc24ndCBuZWNlc3NhcmlseSBjb3BpZWQgdG8KK2J1ZmZlciB6ZXJvIGJlZm9yZSB0aGUgZXhpdCB2YWxpZGF0aW9uIGNoZWNrLgorCitUbyBndWFyYW50ZWUgdGhhdCB0aGUgcmV0dXJuZWQgc3RhdHVzIHZhbHVlIHJlZmxlY3RzIHJlYWxpdHksIGNhbGwKKzxDT0RFPmZpZWxkX3N0YXR1cygpPC9DT0RFPiBlaXRoZXIgKDEpIGluIHRoZSBmaWVsZCdzIGV4aXQgdmFsaWRhdGlvbiBjaGVjaworcm91dGluZSwgKDIpIGZyb20gdGhlIGZpZWxkJ3Mgb3IgZm9ybSdzIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmF0aW9uCitob29rcywgb3IgKDMpIGp1c3QgYWZ0ZXIgYSA8Q09ERT5SRVFfVkFMSURBVElPTjwvQ09ERT4gcmVxdWVzdCBoYXMgYmVlbgorcHJvY2Vzc2VkIGJ5IHRoZSBmb3JtcyBkcml2ZXIuCisKKzxIMj48QSBOQU1FPSJmdXNlciI+RmllbGQgVXNlciBQb2ludGVyPC9BPjwvSDI+CisKK0VhY2ggZmllbGQgc3RydWN0dXJlIGNvbnRhaW5zIG9uZSBjaGFyYWN0ZXIgcG9pbnRlciBzbG90IHRoYXQgaXMgbm90IHVzZWQKK2J5IHRoZSBmb3JtcyBsaWJyYXJ5LiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMgdG8gc3RvcmUKK3ByaXZhdGUgcGVyLWZpZWxkIGRhdGEuICBZb3UgY2FuIG1hbmlwdWxhdGUgaXQgd2l0aDoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfdXNlcnB0cihGSUVMRCAqZmllbGQsICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqdXNlcnB0cik7ICAgICAgICAvKiBtb2RlIHRvIHNldCAqLworCitjaGFyICpmaWVsZF91c2VycHRyKEZJRUxEICpmaWVsZCk7ICAgICAgICAvKiBmZXRjaCBtb2RlIG9mIGZpZWxkICovCis8L1BSRT4KKworKFByb3Blcmx5LCB0aGlzIHVzZXIgcG9pbnRlciBmaWVsZCBvdWdodCB0byBoYXZlIDxDT0RFPih2b2lkICopPC9DT0RFPiB0eXBlLgorVGhlIDxDT0RFPihjaGFyICopPC9DT0RFPiB0eXBlIGlzIHJldGFpbmVkIGZvciBTeXN0ZW0gViBjb21wYXRpYmlsaXR5LikgPFA+CisKK0l0IGlzIHZhbGlkIHRvIHNldCB0aGUgdXNlciBwb2ludGVyIG9mIHRoZSBkZWZhdWx0IGZpZWxkICh3aXRoIGEKKzxDT0RFPnNldF9maWVsZF91c2VycHRyKCk8L0NPREU+IGNhbGwgcGFzc2VkIGEgTlVMTCBmaWVsZCBwb2ludGVyLikKK1doZW4gYSBuZXcgZmllbGQgaXMgY3JlYXRlZCwgdGhlIGRlZmF1bHQtZmllbGQgdXNlciBwb2ludGVyIGlzIGNvcGllZAordG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGZpZWxkJ3MgdXNlciBwb2ludGVyLgorCis8SDI+PEEgTkFNRT0iZmR5bmFtaWMiPlZhcmlhYmxlLVNpemVkIEZpZWxkczwvQT48L0gyPgorCitOb3JtYWxseSwgYSBmaWVsZCBpcyBmaXhlZCBhdCB0aGUgc2l6ZSBzcGVjaWZpZWQgZm9yIGl0IGF0IGNyZWF0aW9uCit0aW1lLiAgSWYsIGhvd2V2ZXIsIHlvdSB0dXJuIG9mZiBpdHMgT19TVEFUSUMgYml0LCBpdCBiZWNvbWVzCis8REZOPmR5bmFtaWM8L0RGTj4gYW5kIHdpbGwgYXV0b21hdGljYWxseSByZXNpemUgaXRzZWxmIHRvIGFjY29tbW9kYXRlCitkYXRhIGFzIGl0IGlzIGVudGVyZWQuICBJZiB0aGUgZmllbGQgaGFzIGV4dHJhIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIGl0LAordGhleSB3aWxsIGdyb3cgcmlnaHQgYWxvbmcgd2l0aCB0aGUgbWFpbiBpbnB1dCBidWZmZXIuICA8UD4KKworQSBvbmUtbGluZSBkeW5hbWljIGZpZWxkIHdpbGwgaGF2ZSBhIGZpeGVkIGhlaWdodCAoMSkgYnV0IHZhcmlhYmxlCit3aWR0aCwgc2Nyb2xsaW5nIGhvcml6b250YWxseSB0byBkaXNwbGF5IGRhdGEgd2l0aGluIHRoZSBmaWVsZCBhcmVhIGFzCitvcmlnaW5hbGx5IGRpbWVuc2lvbmVkIGFuZCBsb2NhdGVkLiAgQSBtdWx0aS1saW5lIGR5bmFtaWMgZmllbGQgd2lsbAoraGF2ZSBhIGZpeGVkIHdpZHRoLCBidXQgdmFyaWFibGUgaGVpZ2h0IChudW1iZXIgb2Ygcm93cyksIHNjcm9sbGluZwordmVydGljYWxseSB0byBkaXNwbGF5IGRhdGEgd2l0aGluIHRoZSBmaWVsZCBhcmVhIGFzIG9yaWdpbmFsbHkKK2RpbWVuc2lvbmVkIGFuZCBsb2NhdGVkLiA8UD4KKworTm9ybWFsbHksIGEgZHluYW1pYyBmaWVsZCBpcyBhbGxvd2VkIHRvIGdyb3cgd2l0aG91dCBsaW1pdC4gIEJ1dCBpdCBpcworcG9zc2libGUgdG8gc2V0IGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBzaXplIG9mIGEgZHluYW1pYyBmaWVsZC4gIFlvdSBkbworaXQgd2l0aCB0aGlzIGZ1bmN0aW9uOgorCis8UFJFPgoraW50IHNldF9tYXhfZmllbGQoRklFTEQgKmZpZWxkLCAgICAgLyogZmllbGQgdG8gYWx0ZXIgKG1heSBub3QgYmUgTlVMTCkgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3NpemUpOyAgIC8qIHVwcGVyIGxpbWl0IG9uIGZpZWxkIHNpemUgKi8KKzwvUFJFPgorCitJZiB0aGUgZmllbGQgaXMgb25lLWxpbmUsIDxDT0RFPm1heF9zaXplPC9DT0RFPiBpcyB0YWtlbiB0byBiZSBhIGNvbHVtbiBzaXplCitsaW1pdDsgaWYgaXQgaXMgbXVsdGktbGluZSwgaXQgaXMgdGFrZW4gdG8gYmUgYSBsaW5lIHNpemUgbGltaXQuICBUbyBkaXNhYmxlCithbnkgbGltaXQsIHVzZSBhbiBhcmd1bWVudCBvZiB6ZXJvLiAgVGhlIGdyb3d0aCBsaW1pdCBjYW4gYmUgY2hhbmdlZCB3aGV0aGVyCitvciBub3QgdGhlIE9fU1RBVElDIGJpdCBpcyBvbiwgYnV0IGhhcyBubyBlZmZlY3QgdW50aWwgaXQgaXMuIDxQPgorCitUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgb2YgYSBmaWVsZCBjaGFuZ2Ugd2hlbiBpdCBiZWNvbWVzIGR5bmFtaWM6CisKKzxVTD4KKzxMST5JZiB0aGVyZSBpcyBubyBncm93dGggbGltaXQsIHRoZXJlIGlzIG5vIGZpbmFsIHBvc2l0aW9uIG9mIHRoZSBmaWVsZDsKK3RoZXJlZm9yZSA8Q09ERT5PX0FVVE9TS0lQPC9DT0RFPiBhbmQgPENPREU+T19OTF9PVkVSTE9BRDwvQ09ERT4gYXJlIGlnbm9yZWQuCis8TEk+RmllbGQganVzdGlmaWNhdGlvbiB3aWxsIGJlIGlnbm9yZWQgKHRob3VnaCB3aGF0ZXZlciBqdXN0aWZpY2F0aW9uIGlzCitzZXQgdXAgd2lsbCBiZSByZXRhaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW4gYmUgcXVlcmllZCkuCis8TEk+VGhlIDxDT0RFPmR1cF9maWVsZCgpPC9DT0RFPiBhbmQgPENPREU+bGlua19maWVsZCgpPC9DT0RFPiBjYWxscyBjb3B5CitkeW5hbWljLWJ1ZmZlciBzaXplcy4gIElmIHRoZSA8Q09ERT5PX1NUQVRJQzwvQ09ERT4gb3B0aW9uIGlzIHNldCBvbiBvbmUgb2YgYQorY29sbGVjdGlvbiBvZiBsaW5rcywgYnVmZmVyIHJlc2l6aW5nIHdpbGwgb2NjdXIgb25seSB3aGVuIHRoZSBmaWVsZCBpcworZWRpdGVkIHRocm91Z2ggdGhhdCBsaW5rLgorPExJPlRoZSBjYWxsIDxDT0RFPmZpZWxkX2luZm8oKTwvQ09ERT4gd2lsbCByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgc3RhdGljIHNpemUgb2YKK3RoZSBmaWVsZDsgdXNlIDxDT0RFPmR5bmFtaWNfZmllbGRfaW5mbygpPC9DT0RFPiB0byBnZXQgdGhlIGFjdHVhbCBkeW5hbWljIHNpemUuCis8L1VMPgorCis8SDI+PEEgTkFNRT0iZnZhbGlkYXRpb24iPkZpZWxkIFZhbGlkYXRpb248L0E+PC9IMj4KKworQnkgZGVmYXVsdCwgYSBmaWVsZCB3aWxsIGFjY2VwdCBhbnkgZGF0YSB0aGF0IHdpbGwgZml0IGluIGl0cyBpbnB1dCBidWZmZXIuCitIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBhdHRhY2ggYSB2YWxpZGF0aW9uIHR5cGUgdG8gYSBmaWVsZC4gIElmIHlvdSBkbwordGhpcywgYW55IGF0dGVtcHQgdG8gbGVhdmUgdGhlIGZpZWxkIHdoaWxlIGl0IGNvbnRhaW5zIGRhdGEgdGhhdCBkb2Vzbid0CittYXRjaCB0aGUgdmFsaWRhdGlvbiB0eXBlIHdpbGwgZmFpbC4gIFNvbWUgdmFsaWRhdGlvbiB0eXBlcyBhbHNvIGhhdmUgYQorY2hhcmFjdGVyLXZhbGlkaXR5IGNoZWNrIGZvciBlYWNoIHRpbWUgYSBjaGFyYWN0ZXIgaXMgZW50ZXJlZCBpbiB0aGUgZmllbGQuIDxQPgorCitBIGZpZWxkJ3MgdmFsaWRhdGlvbiBjaGVjayAoaWYgYW55KSBpcyBub3QgY2FsbGVkIHdoZW4KKzxDT0RFPnNldF9maWVsZF9idWZmZXIoKTwvQ09ERT4gbW9kaWZpZXMgdGhlIGlucHV0IGJ1ZmZlciwgbm9yIHdoZW4gdGhhdCBidWZmZXIKK2lzIGNoYW5nZWQgdGhyb3VnaCBhIGxpbmtlZCBmaWVsZC4gPFA+CisKK1RoZSA8Q09ERT5mb3JtPC9DT0RFPiBsaWJyYXJ5IHByb3ZpZGVzIGEgcmljaCBzZXQgb2YgcHJlLWRlZmluZWQgdmFsaWRhdGlvbgordHlwZXMsIGFuZCBnaXZlcyB5b3UgdGhlIGNhcGFiaWxpdHkgdG8gZGVmaW5lIGN1c3RvbSBvbmVzIG9mIHlvdXIgb3duLiAgWW91CitjYW4gZXhhbWluZSBhbmQgY2hhbmdlIGZpZWxkIHZhbGlkYXRpb24gYXR0cmlidXRlcyB3aXRoIHRoZSBmb2xsb3dpbmcKK2Z1bmN0aW9uczoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICpmdHlwZSwgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIC4uLik7ICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBhcmd1bWVudHMqLworCitGSUVMRFRZUEUgKmZpZWxkX3R5cGUoRklFTEQgKmZpZWxkKTsgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworPC9QUkU+CisKK1RoZSB2YWxpZGF0aW9uIHR5cGUgb2YgYSBmaWVsZCBpcyBjb25zaWRlcmVkIGFuIGF0dHJpYnV0ZSBvZiB0aGUgZmllbGQuICBBcword2l0aCBvdGhlciBmaWVsZCBhdHRyaWJ1dGVzLCBBbHNvLCBkb2luZyA8Q09ERT5zZXRfZmllbGRfdHlwZSgpPC9DT0RFPiB3aXRoIGEKKzxDT0RFPk5VTEw8L0NPREU+IGZpZWxkIGRlZmF1bHQgd2lsbCBjaGFuZ2UgdGhlIHN5c3RlbSBkZWZhdWx0IGZvciB2YWxpZGF0aW9uIG9mCituZXdseS1jcmVhdGVkIGZpZWxkcy4gPFA+CisKK0hlcmUgYXJlIHRoZSBwcmUtZGVmaW5lZCB2YWxpZGF0aW9uIHR5cGVzOgorCis8SDM+PEEgTkFNRT0iZnR5cGVfYWxwaGEiPlRZUEVfQUxQSEE8L0E+PC9IMz4KKworVGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgYWxwaGFiZXRpYyBkYXRhOyBubyBibGFua3MsIG5vIGRpZ2l0cywgbm8gc3BlY2lhbAorY2hhcmFjdGVycyAodGhpcyBpcyBjaGVja2VkIGF0IGNoYXJhY3Rlci1lbnRyeSB0aW1lKS4gIEl0IGlzIHNldCB1cCB3aXRoOgorCis8UFJFPgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0FMUEhBLCAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoKTsgICAgICAgICAgICAvKiBtYXhpbXVtIHdpZHRoIG9mIGZpZWxkICovCis8L1BSRT4KKworVGhlIDxDT0RFPndpZHRoPC9DT0RFPiBhcmd1bWVudCBzZXRzIGEgbWluaW11bSB3aWR0aCBvZiBkYXRhLiAgVHlwaWNhbGx5Cit5b3UnbGwgd2FudCB0byBzZXQgdGhpcyB0byB0aGUgZmllbGQgd2lkdGg7IGlmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZQorZmllbGQgd2lkdGgsIHRoZSB2YWxpZGF0aW9uIGNoZWNrIHdpbGwgYWx3YXlzIGZhaWwuICBBIG1pbmltdW0gd2lkdGgKK29mIHplcm8gbWFrZXMgZmllbGQgY29tcGxldGlvbiBvcHRpb25hbC4KKworPEgzPjxBIE5BTUU9ImZ0eXBlX2FsbnVtIj5UWVBFX0FMTlVNPC9BPjwvSDM+CisKK1RoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGFscGhhYmV0aWMgZGF0YSBhbmQgZGlnaXRzOyBubyBibGFua3MsIG5vIHNwZWNpYWwKK2NoYXJhY3RlcnMgKHRoaXMgaXMgY2hlY2tlZCBhdCBjaGFyYWN0ZXItZW50cnkgdGltZSkuICBJdCBpcyBzZXQgdXAgd2l0aDoKKworPFBSRT4KK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9BTE5VTSwgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7ICAgICAgICAgICAgLyogbWF4aW11bSB3aWR0aCBvZiBmaWVsZCAqLworPC9QUkU+CisKK1RoZSA8Q09ERT53aWR0aDwvQ09ERT4gYXJndW1lbnQgc2V0cyBhIG1pbmltdW0gd2lkdGggb2YgZGF0YS4gIEFzIHdpdGgKK1RZUEVfQUxQSEEsIHR5cGljYWxseSB5b3UnbGwgd2FudCB0byBzZXQgdGhpcyB0byB0aGUgZmllbGQgd2lkdGg7IGlmIGl0J3MKK2dyZWF0ZXIgdGhhbiB0aGUgZmllbGQgd2lkdGgsIHRoZSB2YWxpZGF0aW9uIGNoZWNrIHdpbGwgYWx3YXlzIGZhaWwuICBBCittaW5pbXVtIHdpZHRoIG9mIHplcm8gbWFrZXMgZmllbGQgY29tcGxldGlvbiBvcHRpb25hbC4KKworPEgzPjxBIE5BTUU9ImZ0eXBlX2VudW0iPlRZUEVfRU5VTTwvQT48L0gzPgorCitUaGlzIHR5cGUgYWxsb3dzIHlvdSB0byByZXN0cmljdCBhIGZpZWxkJ3MgdmFsdWVzIHRvIGJlIGFtb25nIGEgc3BlY2lmaWVkCitzZXQgb2Ygc3RyaW5nIHZhbHVlcyAoZm9yIGV4YW1wbGUsIHRoZSB0d28tbGV0dGVyIHBvc3RhbCBjb2RlcyBmb3IgVS5TLgorc3RhdGVzKS4gIEl0IGlzIHNldCB1cCB3aXRoOgorCis8UFJFPgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0VOVU0sICAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnZhbHVlbGlzdDsgICAgICAvKiBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyAqLworICAgICAgICAgICAgICAgICAgIGludCBjaGVja2Nhc2U7ICAgICAgICAgLyogY2FzZS1zZW5zaXRpdmU/ICovCisgICAgICAgICAgICAgICAgICAgaW50IGNoZWNrdW5pcXVlKTsgICAgICAvKiBtdXN0IHNwZWNpZnkgdW5pcXVlbHk/ICovCis8L1BSRT4KKworVGhlIDxDT0RFPnZhbHVlbGlzdDwvQ09ERT4gcGFyYW1ldGVyIG11c3QgcG9pbnQgYXQgYSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZgordmFsaWQgc3RyaW5ncy4gIFRoZSA8Q09ERT5jaGVja2Nhc2U8L0NPREU+IGFyZ3VtZW50LCBpZiB0cnVlLCBtYWtlcyBjb21wYXJpc29uCit3aXRoIHRoZSBzdHJpbmcgY2FzZS1zZW5zaXRpdmUuIDxQPgorCitXaGVuIHRoZSB1c2VyIGV4aXRzIGEgVFlQRV9FTlVNIGZpZWxkLCB0aGUgdmFsaWRhdGlvbiBwcm9jZWR1cmUgdHJpZXMgdG8KK2NvbXBsZXRlIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgdG8gYSB2YWxpZCBlbnRyeS4gIElmIGEgY29tcGxldGUgY2hvaWNlIHN0cmluZworaGFzIGJlZW4gZW50ZXJlZCwgaXQgaXMgb2YgY291cnNlIHZhbGlkLiAgQnV0IGl0IGlzIGFsc28gcG9zc2libGUgdG8gZW50ZXIgYQorcHJlZml4IG9mIGEgdmFsaWQgc3RyaW5nIGFuZCBoYXZlIGl0IGNvbXBsZXRlZCBmb3IgeW91LiA8UD4KKworQnkgZGVmYXVsdCwgaWYgeW91IGVudGVyIHN1Y2ggYSBwcmVmaXggYW5kIGl0IG1hdGNoZXMgbW9yZSB0aGFuIG9uZSB2YWx1ZQoraW4gdGhlIHN0cmluZyBsaXN0LCB0aGUgcHJlZml4IHdpbGwgYmUgY29tcGxldGVkIHRvIHRoZSBmaXJzdCBtYXRjaGluZwordmFsdWUuICBCdXQgdGhlIDxDT0RFPmNoZWNrdW5pcXVlPC9DT0RFPiBhcmd1bWVudCwgaWYgdHJ1ZSwgcmVxdWlyZXMgcHJlZml4CittYXRjaGVzIHRvIGJlIHVuaXF1ZSBpbiBvcmRlciB0byBiZSB2YWxpZC4gPFA+CisKK1RoZSA8Q09ERT5SRVFfTkVYVF9DSE9JQ0U8L0NPREU+IGFuZCA8Q09ERT5SRVFfUFJFVl9DSE9JQ0U8L0NPREU+IGlucHV0IHJlcXVlc3RzCitjYW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIHRoZXNlIGZpZWxkcy4KKworPEgzPjxBIE5BTUU9ImZ0eXBlX2ludGVnZXIiPlRZUEVfSU5URUdFUjwvQT48L0gzPgorCitUaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBhbiBpbnRlZ2VyLiAgSXQgaXMgc2V0IHVwIGFzIGZvbGxvd3M6CisKKzxQUkU+CitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfSU5URUdFUiwgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZywgICAgICAgICAgIC8qICMgcGxhY2VzIHRvIHplcm8tcGFkIHRvICovCisgICAgICAgICAgICAgICAgICAgaW50IHZtaW4sIGludCB2bWF4KTsgICAvKiB2YWxpZCByYW5nZSAqLworPC9QUkU+CisKK1ZhbGlkIGNoYXJhY3RlcnMgY29uc2lzdCBvZiBhbiBvcHRpb25hbCBsZWFkaW5nIG1pbnVzIGFuZCBkaWdpdHMuCitUaGUgcmFuZ2UgY2hlY2sgaXMgcGVyZm9ybWVkIG9uIGV4aXQuICBJZiB0aGUgcmFuZ2UgbWF4aW11bSBpcyBsZXNzCit0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5pbXVtLCB0aGUgcmFuZ2UgaXMgaWdub3JlZC4gPFA+CisKK0lmIHRoZSB2YWx1ZSBwYXNzZXMgaXRzIHJhbmdlIGNoZWNrLCBpdCBpcyBwYWRkZWQgd2l0aCBhcyBtYW55IGxlYWRpbmcKK3plcm8gZGlnaXRzIGFzIG5lY2Vzc2FyeSB0byBtZWV0IHRoZSBwYWRkaW5nIGFyZ3VtZW50LiA8UD4KKworQSA8Q09ERT5UWVBFX0lOVEVHRVI8L0NPREU+IHZhbHVlIGJ1ZmZlciBjYW4gY29udmVuaWVudGx5IGJlIGludGVycHJldGVkCit3aXRoIHRoZSBDIGxpYnJhcnkgZnVuY3Rpb24gPENPREU+YXRvaSgzKTwvQ09ERT4uCisKKzxIMz48QSBOQU1FPSJmdHlwZV9udW1lcmljIj5UWVBFX05VTUVSSUM8L0E+PC9IMz4KKworVGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgYSBkZWNpbWFsIG51bWJlci4gIEl0IGlzIHNldCB1cCBhcyBmb2xsb3dzOgorCis8UFJFPgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9OVU1FUklDLCAgICAgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZywgICAgICAgICAgICAgICAvKiAjIHBsYWNlcyBvZiBwcmVjaXNpb24gKi8KKyAgICAgICAgICAgICAgICAgICBkb3VibGUgdm1pbiwgZG91YmxlIHZtYXgpOyAvKiB2YWxpZCByYW5nZSAqLworPC9QUkU+CisKK1ZhbGlkIGNoYXJhY3RlcnMgY29uc2lzdCBvZiBhbiBvcHRpb25hbCBsZWFkaW5nIG1pbnVzIGFuZCBkaWdpdHMuIHBvc3NpYmx5CitpbmNsdWRpbmcgYSBkZWNpbWFsIHBvaW50LiBJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyBsb2NhbGUncywgdGhlIGRlY2ltYWwgcG9pbnQKK2NoYXJhY3RlciB1c2VkIG11c3QgYmUgdGhlIG9uZSBkZWZpbmVkIGJ5IHlvdXIgbG9jYWxlLiBUaGUgcmFuZ2UgY2hlY2sgaXMKK3BlcmZvcm1lZCBvbiBleGl0LiBJZiB0aGUgcmFuZ2UgbWF4aW11bSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbmltdW0sCit0aGUgcmFuZ2UgaXMgaWdub3JlZC4gPFA+CisKK0lmIHRoZSB2YWx1ZSBwYXNzZXMgaXRzIHJhbmdlIGNoZWNrLCBpdCBpcyBwYWRkZWQgd2l0aCBhcyBtYW55IHRyYWlsaW5nCit6ZXJvIGRpZ2l0cyBhcyBuZWNlc3NhcnkgdG8gbWVldCB0aGUgcGFkZGluZyBhcmd1bWVudC4gPFA+CisKK0EgPENPREU+VFlQRV9OVU1FUklDPC9DT0RFPiB2YWx1ZSBidWZmZXIgY2FuIGNvbnZlbmllbnRseSBiZSBpbnRlcnByZXRlZAord2l0aCB0aGUgQyBsaWJyYXJ5IGZ1bmN0aW9uIDxDT0RFPmF0b2YoMyk8L0NPREU+LgorCis8SDM+PEEgTkFNRT0iZnR5cGVfcmVnZXhwIj5UWVBFX1JFR0VYUDwvQT48L0gzPgorCitUaGlzIGZpZWxkIHR5cGUgYWNjZXB0cyBkYXRhIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLiAgSXQgaXMgc2V0IHVwCithcyBmb2xsb3dzOgorCis8UFJFPgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX1JFR0VYUCwgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqcmVnZXhwKTsgICAgICAgICAvKiBleHByZXNzaW9uIHRvIG1hdGNoICovCis8L1BSRT4KKworVGhlIHN5bnRheCBmb3IgcmVndWxhciBleHByZXNzaW9ucyBpcyB0aGF0IG9mIDxDT0RFPnJlZ2NvbXAoMyk8L0NPREU+LgorVGhlIGNoZWNrIGZvciByZWd1bGFyLWV4cHJlc3Npb24gbWF0Y2ggaXMgcGVyZm9ybWVkIG9uIGV4aXQuCisKKzxIMj48QSBOQU1FPSJmYnVmZmVyIj5EaXJlY3QgRmllbGQgQnVmZmVyIE1hbmlwdWxhdGlvbjwvQT48L0gyPgorCitUaGUgY2hpZWYgYXR0cmlidXRlIG9mIGEgZmllbGQgaXMgaXRzIGJ1ZmZlciBjb250ZW50cy4gIFdoZW4gYSBmb3JtIGhhcworYmVlbiBjb21wbGV0ZWQsIHlvdXIgYXBwbGljYXRpb24gdXN1YWxseSBuZWVkcyB0byBrbm93IHRoZSBzdGF0ZSBvZiBlYWNoCitmaWVsZCBidWZmZXIuICBZb3UgY2FuIGZpbmQgdGhpcyBvdXQgd2l0aDoKKworPFBSRT4KK2NoYXIgKmZpZWxkX2J1ZmZlcihGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCisgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmluZGV4KTsgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVyIHRvIHF1ZXJ5ICovCis8L1BSRT4KKworTm9ybWFsbHksIHRoZSBzdGF0ZSBvZiB0aGUgemVyby1udW1iZXJlZCBidWZmZXIgZm9yIGVhY2ggZmllbGQgaXMgc2V0IGJ5Cit0aGUgdXNlcidzIGVkaXRpbmcgYWN0aW9ucyBvbiB0aGF0IGZpZWxkLiAgSXQncyBzb21ldGltZXMgdXNlZnVsIHRvIGJlIGFibGUKK3RvIHNldCB0aGUgdmFsdWUgb2YgdGhlIHplcm8tbnVtYmVyZWQgKG9yIHNvbWUgb3RoZXIpIGJ1ZmZlciBmcm9tIHlvdXIKK2FwcGxpY2F0aW9uOgorCis8UFJFPgoraW50IHNldF9maWVsZF9idWZmZXIoRklFTEQgKmZpZWxkLCAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgYnVmaW5kZXgsICAgICAgICAgIC8qIG51bWJlciBvZiBidWZmZXIgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSk7ICAgICAgICAgIC8qIHN0cmluZyB2YWx1ZSB0byBzZXQgKi8KKzwvUFJFPgorCitJZiB0aGUgZmllbGQgaXMgbm90IGxhcmdlIGVub3VnaCBhbmQgY2Fubm90IGJlIHJlc2l6ZWQgdG8gYSBzdWZmaWNpZW50bHkKK2xhcmdlIHNpemUgdG8gY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlLCB0aGUgdmFsdWUgd2lsbCBiZSB0cnVuY2F0ZWQKK3RvIGZpdC4gPFA+CisKK0NhbGxpbmcgPENPREU+ZmllbGRfYnVmZmVyKCk8L0NPREU+IHdpdGggYSBudWxsIGZpZWxkIHBvaW50ZXIgd2lsbCByYWlzZSBhbgorZXJyb3IuICBDYWxsaW5nIDxDT0RFPmZpZWxkX2J1ZmZlcigpPC9DT0RFPiBvbiBhIGZpZWxkIG5vdCBjdXJyZW50bHkgc2VsZWN0ZWQKK2ZvciBpbnB1dCB3aWxsIHJldHVybiBhIGNvcnJlY3QgdmFsdWUuICBDYWxsaW5nIDxDT0RFPmZpZWxkX2J1ZmZlcigpPC9DT0RFPiBvbiBhCitmaWVsZCB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgaW5wdXQgbWF5IG5vdCBuZWNlc3NhcmlseSBnaXZlIGEKK2NvcnJlY3QgZmllbGQgYnVmZmVyIHZhbHVlLCBiZWNhdXNlIGVudGVyZWQgZGF0YSBpc24ndCBuZWNlc3NhcmlseSBjb3BpZWQgdG8KK2J1ZmZlciB6ZXJvIGJlZm9yZSB0aGUgZXhpdCB2YWxpZGF0aW9uIGNoZWNrLgorCitUbyBndWFyYW50ZWUgdGhhdCB0aGUgcmV0dXJuZWQgYnVmZmVyIHZhbHVlIHJlZmxlY3RzIG9uLXNjcmVlbiByZWFsaXR5LAorY2FsbCA8Q09ERT5maWVsZF9idWZmZXIoKTwvQ09ERT4gZWl0aGVyICgxKSBpbiB0aGUgZmllbGQncyBleGl0IHZhbGlkYXRpb24KK2NoZWNrIHJvdXRpbmUsICgyKSBmcm9tIHRoZSBmaWVsZCdzIG9yIGZvcm0ncyBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbgoraG9va3MsIG9yICgzKSBqdXN0IGFmdGVyIGEgPENPREU+UkVRX1ZBTElEQVRJT048L0NPREU+IHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkCitieSB0aGUgZm9ybXMgZHJpdmVyLgorCis8SDI+PEEgTkFNRT0iZm9ybWF0dHJzIj5BdHRyaWJ1dGVzIG9mIEZvcm1zPC9BPjwvSDI+CisKK0FzIHdpdGggZmllbGQgYXR0cmlidXRlcywgZm9ybSBhdHRyaWJ1dGVzIGluaGVyaXQgYSBkZWZhdWx0IGZyb20gYQorc3lzdGVtIGRlZmF1bHQgZm9ybSBzdHJ1Y3R1cmUuICBUaGVzZSBkZWZhdWx0cyBjYW4gYmUgcXVlcmllZCBvciBzZXQgYnkKK29mIHRoZXNlIGZ1bmN0aW9ucyB1c2luZyBhIGZvcm0tcG9pbnRlciBhcmd1bWVudCBvZiA8Q09ERT5OVUxMPC9DT0RFPi4gPFA+CisKK1RoZSBwcmluY2lwYWwgYXR0cmlidXRlIG9mIGEgZm9ybSBpcyBpdHMgZmllbGQgbGlzdC4gIFlvdSBjYW4gcXVlcnkKK2FuZCBjaGFuZ2UgdGhpcyBsaXN0IHdpdGg6CisKKzxQUkU+CitpbnQgc2V0X2Zvcm1fZmllbGRzKEZPUk0gKmZvcm0sICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgIEZJRUxEICoqZmllbGRzKTsgICAgICAvKiBmaWVsZHMgdG8gY29ubmVjdCAqLworCitjaGFyICpmb3JtX2ZpZWxkcyhGT1JNICpmb3JtKTsgICAgICAgICAgICAvKiBmZXRjaCBmaWVsZHMgb2YgZm9ybSAqLworCitpbnQgZmllbGRfY291bnQoRk9STSAqZm9ybSk7ICAgICAgICAgICAgICAvKiBjb3VudCBjb25uZWN0IGZpZWxkcyAqLworPC9QUkU+CisKK1RoZSBzZWNvbmQgYXJndW1lbnQgb2YgPENPREU+c2V0X2Zvcm1fZmllbGRzKCk8L0NPREU+IG1heSBiZSBhCitOVUxMLXRlcm1pbmF0ZWQgZmllbGQgcG9pbnRlciBhcnJheSBsaWtlIHRoZSBvbmUgcmVxdWlyZWQgYnkKKzxDT0RFPm5ld19mb3JtKCk8L0NPREU+LiBJbiB0aGF0IGNhc2UsIHRoZSBvbGQgZmllbGRzIG9mIHRoZSBmb3JtIGFyZQorZGlzY29ubmVjdGVkIGJ1dCBub3QgZnJlZWQgKGFuZCBlbGlnaWJsZSB0byBiZSBjb25uZWN0ZWQgdG8gb3RoZXIKK2Zvcm1zKSwgdGhlbiB0aGUgbmV3IGZpZWxkcyBhcmUgY29ubmVjdGVkLiA8UD4KKworSXQgbWF5IGFsc28gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIGZpZWxkcyBhcmUgZGlzY29ubmVjdGVkCisoYW5kIG5vdCBmcmVlZCkgYnV0IG5vIG5ldyBvbmVzIGFyZSBjb25uZWN0ZWQuIDxQPgorCitUaGUgPENPREU+ZmllbGRfY291bnQoKTwvQ09ERT4gZnVuY3Rpb24gc2ltcGx5IGNvdW50cyB0aGUgbnVtYmVyIG9mIGZpZWxkcworY29ubmVjdGVkIHRvIGEgZ2l2ZW4gZnJvbS4gIEl0IHJldHVybnMgLTEgaWYgdGhlIGZvcm0tcG9pbnRlciBhcmd1bWVudAoraXMgTlVMTC4KKworPEgyPjxBIE5BTUU9ImZkaXNwbGF5Ij5Db250cm9sIG9mIEZvcm0gRGlzcGxheTwvQT48L0gyPgorCitJbiB0aGUgb3ZlcnZpZXcgc2VjdGlvbiwgeW91IHNhdyB0aGF0IHRvIGRpc3BsYXkgYSBmb3JtIHlvdSBub3JtYWxseQorc3RhcnQgYnkgZGVmaW5pbmcgaXRzIHNpemUgKGFuZCBmaWVsZHMpLCBwb3N0aW5nIGl0LCBhbmQgcmVmcmVzaGluZwordGhlIHNjcmVlbi4gIFRoZXJlIGlzIGFuIGhpZGRlbiBzdGVwIGJlZm9yZSBwb3N0aW5nLCB3aGljaCBpcyB0aGUKK2Fzc29jaWF0aW9uIG9mIHRoZSBmb3JtIHdpdGggYSBmcmFtZSB3aW5kb3cgKGFjdHVhbGx5LCBhIHBhaXIgb2YKK3dpbmRvd3MpIHdpdGhpbiB3aGljaCBpdCB3aWxsIGJlIGRpc3BsYXllZC4gIEJ5IGRlZmF1bHQsIHRoZSBmb3JtcworbGlicmFyeSBhc3NvY2lhdGVzIGV2ZXJ5IGZvcm0gd2l0aCB0aGUgZnVsbC1zY3JlZW4gd2luZG93Cis8Q09ERT5zdGRzY3I8L0NPREU+LiA8UD4KKworQnkgbWFraW5nIHRoaXMgc3RlcCBleHBsaWNpdCwgeW91IGNhbiBhc3NvY2lhdGUgYSBmb3JtIHdpdGggYSBkZWNsYXJlZAorZnJhbWUgd2luZG93IG9uIHlvdXIgc2NyZWVuIGRpc3BsYXkuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8KK2FkYXB0IHRoZSBmb3JtIGRpc3BsYXkgdG8gZGlmZmVyZW50IHNjcmVlbiBzaXplcywgZHluYW1pY2FsbHkgdGlsZQorZm9ybXMgb24gdGhlIHNjcmVlbiwgb3IgdXNlIGEgZm9ybSBhcyBwYXJ0IG9mIGFuIGludGVyZmFjZSBsYXlvdXQKK21hbmFnZWQgYnkgPEEgSFJFRj0iI3BhbmVscyI+cGFuZWxzPC9BPi4gPFA+CisKK1RoZSB0d28gd2luZG93cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBmb3JtIGhhdmUgdGhlIHNhbWUgZnVuY3Rpb25zIGFzCit0aGVpciBhbmFsb2d1ZXMgaW4gdGhlIDxBIEhSRUY9IiNtZW51Ij5tZW51IGxpYnJhcnk8L0E+LiAgQm90aCB0aGVzZQord2luZG93cyBhcmUgcGFpbnRlZCB3aGVuIHRoZSBmb3JtIGlzIHBvc3RlZCBhbmQgZXJhc2VkIHdoZW4gdGhlIGZvcm0KK2lzIHVucG9zdGVkLiA8UD4KKworVGhlIG91dGVyIG9yIGZyYW1lIHdpbmRvdyBpcyBub3Qgb3RoZXJ3aXNlIHRvdWNoZWQgYnkgdGhlIGZvcm0KK3JvdXRpbmVzLiAgSXQgZXhpc3RzIHNvIHRoZSBwcm9ncmFtbWVyIGNhbiBhc3NvY2lhdGUgYSB0aXRsZSwgYQorYm9yZGVyLCBvciBwZXJoYXBzIGhlbHAgdGV4dCB3aXRoIHRoZSBmb3JtIGFuZCBoYXZlIGl0IHByb3Blcmx5CityZWZyZXNoZWQgb3IgZXJhc2VkIGF0IHBvc3QvdW5wb3N0IHRpbWUuIFRoZSBpbm5lciB3aW5kb3cgb3Igc3Vid2luZG93CitpcyB3aGVyZSB0aGUgY3VycmVudCBmb3JtIHBhZ2UgaXMgYWN0dWFsbHkgZGlzcGxheWVkLiA8UD4KKworSW4gb3JkZXIgdG8gZGVjbGFyZSB5b3VyIG93biBmcmFtZSB3aW5kb3cgZm9yIGEgZm9ybSwgeW91J2xsIG5lZWQgdG8KK2tub3cgdGhlIHNpemUgb2YgdGhlIGZvcm0ncyBib3VuZGluZyByZWN0YW5nbGUuICBZb3UgY2FuIGdldCB0aGlzCitpbmZvcm1hdGlvbiB3aXRoOgorCis8UFJFPgoraW50IHNjYWxlX2Zvcm0oRk9STSAqZm9ybSwgICAgICAgICAgICAgICAgLyogZm9ybSB0byBxdWVyeSAqLworICAgICAgICAgICAgICAgaW50ICpyb3dzLCAgICAgICAgICAgICAgICAgLyogZm9ybSByb3dzICovCisgICAgICAgICAgICAgICBpbnQgKmNvbHMpOyAgICAgICAgICAgICAgICAvKiBmb3JtIGNvbHMgKi8KKzwvUFJFPgorCitUaGUgZm9ybSBkaW1lbnNpb25zIGFyZSBwYXNzZWQgYmFjayBpbiB0aGUgbG9jYXRpb25zIHBvaW50ZWQgdG8gYnkKK3RoZSBhcmd1bWVudHMuICBPbmNlIHlvdSBoYXZlIHRoaXMgaW5mb3JtYXRpb24sIHlvdSBjYW4gdXNlIGl0IHRvCitkZWNsYXJlIG9mIHdpbmRvd3MsIHRoZW4gdXNlIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnM6CisKKzxQUkU+CitpbnQgc2V0X2Zvcm1fd2luKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgIFdJTkRPVyAqd2luKTsgICAgICAgICAgICAvKiBmcmFtZSB3aW5kb3cgdG8gY29ubmVjdCAqLworCitXSU5ET1cgKmZvcm1fd2luKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAvKiBmZXRjaCBmcmFtZSB3aW5kb3cgb2YgZm9ybSAqLworCitpbnQgc2V0X2Zvcm1fc3ViKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgIFdJTkRPVyAqd2luKTsgICAgICAgICAgICAvKiBmb3JtIHN1YndpbmRvdyB0byBjb25uZWN0ICovCisKK1dJTkRPVyAqZm9ybV9zdWIoRk9STSAqZm9ybSk7ICAgICAgICAgICAgIC8qIGZldGNoIGZvcm0gc3Vid2luZG93IG9mIGZvcm0gKi8KKzwvUFJFPgorCitOb3RlIHRoYXQgY3Vyc2VzIG9wZXJhdGlvbnMsIGluY2x1ZGluZyA8Q09ERT5yZWZyZXNoKCk8L0NPREU+LCBvbiB0aGUgZm9ybSwKK3Nob3VsZCBiZSBkb25lIG9uIHRoZSBmcmFtZSB3aW5kb3csIG5vdCB0aGUgZm9ybSBzdWJ3aW5kb3cuIDxQPgorCitJdCBpcyBwb3NzaWJsZSB0byBjaGVjayBmcm9tIHlvdXIgYXBwbGljYXRpb24gd2hldGhlciBhbGwgb2YgYQorc2Nyb2xsYWJsZSBmaWVsZCBpcyBhY3R1YWxseSBkaXNwbGF5ZWQgd2l0aGluIHRoZSBtZW51IHN1YndpbmRvdy4gIFVzZQordGhlc2UgZnVuY3Rpb25zOgorCis8UFJFPgoraW50IGRhdGFfYWhlYWQoRk9STSAqZm9ybSk7ICAgICAgICAgICAgICAgLyogZm9ybSB0byBiZSBxdWVyaWVkICovCisKK2ludCBkYXRhX2JlaGluZChGT1JNICpmb3JtKTsgICAgICAgICAgICAgIC8qIGZvcm0gdG8gYmUgcXVlcmllZCAqLworPC9QUkU+CisKK1RoZSBmdW5jdGlvbiA8Q09ERT5kYXRhX2FoZWFkKCk8L0NPREU+IHJldHVybnMgVFJVRSBpZiAoYSkgdGhlIGN1cnJlbnQKK2ZpZWxkIGlzIG9uZS1saW5lIGFuZCBoYXMgdW5kaXNwbGF5ZWQgZGF0YSBvZmYgdG8gdGhlIHJpZ2h0LCAoYikgdGhlIGN1cnJlbnQKK2ZpZWxkIGlzIG11bHRpLWxpbmUgYW5kIHRoZXJlIGlzIGRhdGEgb2ZmLXNjcmVlbiBiZWxvdyBpdC4gPFA+CisKK1RoZSBmdW5jdGlvbiA8Q09ERT5kYXRhX2JlaGluZCgpPC9DT0RFPiByZXR1cm5zIFRSVUUgaWYgdGhlIGZpcnN0ICh1cHBlcgorbGVmdCBoYW5kKSBjaGFyYWN0ZXIgcG9zaXRpb24gaXMgb2ZmLXNjcmVlbiAobm90IGJlaW5nIGRpc3BsYXllZCkuIDxQPgorCitGaW5hbGx5LCB0aGVyZSBpcyBhIGZ1bmN0aW9uIHRvIHJlc3RvcmUgdGhlIGZvcm0gd2luZG93J3MgY3Vyc29yIHRvIHRoZQordmFsdWUgZXhwZWN0ZWQgYnkgdGhlIGZvcm1zIGRyaXZlcjoKKworPFBSRT4KK2ludCBwb3NfZm9ybV9jdXJzb3IoRk9STSAqKSAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gYmUgcXVlcmllZCAqLworPC9QUkU+CisKK0lmIHlvdXIgYXBwbGljYXRpb24gY2hhbmdlcyB0aGUgZm9ybSB3aW5kb3cgY3Vyc29yLCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlCitoYW5kaW5nIGNvbnRyb2wgYmFjayB0byB0aGUgZm9ybXMgZHJpdmVyIGluIG9yZGVyIHRvIHJlLXN5bmNocm9uaXplIGl0LgorCis8SDI+PEEgTkFNRT0iZmRyaXZlciI+SW5wdXQgUHJvY2Vzc2luZyBpbiB0aGUgRm9ybXMgRHJpdmVyPC9BPjwvSDI+CisKK1RoZSBmdW5jdGlvbiA8Q09ERT5mb3JtX2RyaXZlcigpPC9DT0RFPiBoYW5kbGVzIHZpcnR1YWxpemVkIGlucHV0IHJlcXVlc3RzCitmb3IgZm9ybSBuYXZpZ2F0aW9uLCBlZGl0aW5nLCBhbmQgdmFsaWRhdGlvbiByZXF1ZXN0cywganVzdCBhcworPENPREU+bWVudV9kcml2ZXI8L0NPREU+IGRvZXMgZm9yIG1lbnVzIChzZWUgdGhlIHNlY3Rpb24gb24gPEEKK0hSRUY9IiNtaW5wdXQiPm1lbnUgaW5wdXQgaGFuZGxpbmc8L0E+KS4KKworPFBSRT4KK2ludCBmb3JtX2RyaXZlcihGT1JNICpmb3JtLCAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcGFzcyBpbnB1dCB0byAqLworICAgICAgICAgICAgICAgIGludCByZXF1ZXN0KTsgICAgICAgICAgICAgLyogZm9ybSByZXF1ZXN0IGNvZGUgKi8KKzwvUFJFPgorCitZb3VyIGlucHV0IHZpcnR1YWxpemF0aW9uIGZ1bmN0aW9uIG5lZWRzIHRvIHRha2UgaW5wdXQgYW5kIHRoZW4gY29udmVydCBpdAordG8gZWl0aGVyIGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIgKHdoaWNoIGlzIHRyZWF0ZWQgYXMgZGF0YSB0byBiZQorZW50ZXJlZCBpbiB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGZpZWxkKSwgb3IgYSBmb3JtcyBwcm9jZXNzaW5nIHJlcXVlc3QuIDxQPgorCitUaGUgZm9ybXMgZHJpdmVyIHByb3ZpZGVzIGhvb2tzICh0aHJvdWdoIGlucHV0LXZhbGlkYXRpb24gYW5kCitmaWVsZC10ZXJtaW5hdGlvbiBmdW5jdGlvbnMpIHdpdGggd2hpY2ggeW91ciBhcHBsaWNhdGlvbiBjb2RlIGNhbiBjaGVjawordGhhdCB0aGUgaW5wdXQgdGFrZW4gYnkgdGhlIGRyaXZlciBtYXRjaGVkIHdoYXQgd2FzIGV4cGVjdGVkLgorCis8SDM+PEEgTkFNRT0iZnBhZ2UiPlBhZ2UgTmF2aWdhdGlvbiBSZXF1ZXN0czwvQT48L0gzPgorCitUaGVzZSByZXF1ZXN0cyBjYXVzZSBwYWdlLWxldmVsIG1vdmVzIHRocm91Z2ggdGhlIGZvcm0sCit0cmlnZ2VyaW5nIGRpc3BsYXkgb2YgYSBuZXcgZm9ybSBzY3JlZW4uCisKKzxETD4KKzxEVD4gPENPREU+UkVRX05FWFRfUEFHRTwvQ09ERT4KKzxERD4gTW92ZSB0byB0aGUgbmV4dCBmb3JtIHBhZ2UuCis8RFQ+IDxDT0RFPlJFUV9QUkVWX1BBR0U8L0NPREU+Cis8REQ+IE1vdmUgdG8gdGhlIHByZXZpb3VzIGZvcm0gcGFnZS4KKzxEVD4gPENPREU+UkVRX0ZJUlNUX1BBR0U8L0NPREU+Cis8REQ+IE1vdmUgdG8gdGhlIGZpcnN0IGZvcm0gcGFnZS4KKzxEVD4gPENPREU+UkVRX0xBU1RfUEFHRTwvQ09ERT4KKzxERD4gTW92ZSB0byB0aGUgbGFzdCBmb3JtIHBhZ2UuCis8L0RMPgorCitUaGVzZSByZXF1ZXN0cyB0cmVhdCB0aGUgbGlzdCBhcyBjeWNsaWM7IHRoYXQgaXMsIDxDT0RFPlJFUV9ORVhUX1BBR0U8L0NPREU+Citmcm9tIHRoZSBsYXN0IHBhZ2UgZ29lcyB0byB0aGUgZmlyc3QsIGFuZCA8Q09ERT5SRVFfUFJFVl9QQUdFPC9DT0RFPiBmcm9tCit0aGUgZmlyc3QgcGFnZSBnb2VzIHRvIHRoZSBsYXN0LgorCis8SDM+PEEgTkFNRT0iZmZpZWxkIj5JbnRlci1GaWVsZCBOYXZpZ2F0aW9uIFJlcXVlc3RzPC9BPjwvSDM+CisKK1RoZXNlIHJlcXVlc3RzIGhhbmRsZSBuYXZpZ2F0aW9uIGJldHdlZW4gZmllbGRzIG9uIHRoZSBzYW1lIHBhZ2UuCisKKzxETD4KKzxEVD4gPENPREU+UkVRX05FWFRfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gbmV4dCBmaWVsZC4KKzxEVD4gPENPREU+UkVRX1BSRVZfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gcHJldmlvdXMgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9GSVJTVF9GSUVMRDwvQ09ERT4KKzxERD4gTW92ZSB0byB0aGUgZmlyc3QgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9MQVNUX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIHRoZSBsYXN0IGZpZWxkLgorPERUPiA8Q09ERT5SRVFfU05FWFRfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gc29ydGVkIG5leHQgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9TUFJFVl9GSUVMRDwvQ09ERT4KKzxERD4gTW92ZSB0byBzb3J0ZWQgcHJldmlvdXMgZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9TRklSU1RfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gdGhlIHNvcnRlZCBmaXJzdCBmaWVsZC4KKzxEVD4gPENPREU+UkVRX1NMQVNUX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIHRoZSBzb3J0ZWQgbGFzdCBmaWVsZC4KKzxEVD4gPENPREU+UkVRX0xFRlRfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgbGVmdCB0byBmaWVsZC4KKzxEVD4gPENPREU+UkVRX1JJR0hUX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHJpZ2h0IHRvIGZpZWxkLgorPERUPiA8Q09ERT5SRVFfVVBfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdXAgdG8gZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9ET1dOX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIGRvd24gdG8gZmllbGQuCis8L0RMPgorCitUaGVzZSByZXF1ZXN0cyB0cmVhdCB0aGUgbGlzdCBvZiBmaWVsZHMgb24gYSBwYWdlIGFzIGN5Y2xpYzsgdGhhdCBpcywKKzxDT0RFPlJFUV9ORVhUX0ZJRUxEPC9DT0RFPiBmcm9tIHRoZSBsYXN0IGZpZWxkIGdvZXMgdG8gdGhlIGZpcnN0LCBhbmQKKzxDT0RFPlJFUV9QUkVWX0ZJRUxEPC9DT0RFPiBmcm9tIHRoZSBmaXJzdCBmaWVsZCBnb2VzIHRvIHRoZSBsYXN0LiBUaGUKK29yZGVyIG9mIHRoZSBmaWVsZHMgZm9yIHRoZXNlIChhbmQgdGhlIDxDT0RFPlJFUV9GSVJTVF9GSUVMRDwvQ09ERT4gYW5kCis8Q09ERT5SRVFfTEFTVF9GSUVMRDwvQ09ERT4gcmVxdWVzdHMpIGlzIHNpbXBseSB0aGUgb3JkZXIgb2YgdGhlIGZpZWxkCitwb2ludGVycyBpbiB0aGUgZm9ybSBhcnJheSAoYXMgc2V0IHVwIGJ5IDxDT0RFPm5ld19mb3JtKCk8L0NPREU+IG9yCis8Q09ERT5zZXRfZm9ybV9maWVsZHMoKTwvQ09ERT4gPFA+CisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gdHJhdmVyc2UgdGhlIGZpZWxkcyBhcyBpZiB0aGV5IGhhZCBiZWVuIHNvcnRlZCBpbgorc2NyZWVuLXBvc2l0aW9uIG9yZGVyLCBzbyB0aGUgc2VxdWVuY2UgZ29lcyBsZWZ0LXRvLXJpZ2h0IGFuZCB0b3AtdG8tYm90dG9tLgorVG8gZG8gdGhpcywgdXNlIHRoZSBzZWNvbmQgZ3JvdXAgb2YgZm91ciBzb3J0ZWQtbW92ZW1lbnQgcmVxdWVzdHMuICA8UD4KKworRmluYWxseSwgaXQgaXMgcG9zc2libGUgdG8gbW92ZSBiZXR3ZWVuIGZpZWxkcyB1c2luZyB2aXN1YWwgZGlyZWN0aW9ucyB1cCwKK2Rvd24sIHJpZ2h0LCBhbmQgbGVmdC4gIFRvIGFjY29tcGxpc2ggdGhpcywgdXNlIHRoZSB0aGlyZCBncm91cCBvZiBmb3VyCityZXF1ZXN0cy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIHBvc2l0aW9uIG9mIGEgZm9ybSBmb3IgcHVycG9zZXMgb2YgdGhlc2UKK3JlcXVlc3RzIGlzIGl0cyB1cHBlci1sZWZ0IGNvcm5lci4gPFA+CisKK0ZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEgbXVsdGktbGluZSBmaWVsZCBCLCBhbmQgdHdvCitzaW5nbGUtbGluZSBmaWVsZHMgQSBhbmQgQyBvbiB0aGUgc2FtZSBsaW5lIHdpdGggQiwgd2l0aCBBIHRvIHRoZSBsZWZ0CitvZiBCIGFuZCBDIHRvIHRoZSByaWdodCBvZiBCLiAgQSA8Q09ERT5SRVFfTU9WRV9SSUdIVDwvQ09ERT4gZnJvbSBBIHdpbGwKK2dvIHRvIEIgb25seSBpZiBBLCBCLCBhbmQgQyA8RU0+YWxsPC9FTT4gc2hhcmUgdGhlIHNhbWUgZmlyc3QgbGluZTsKK290aGVyd2lzZSBpdCB3aWxsIHNraXAgb3ZlciBCIHRvIEMuCisKKzxIMz48QSBOQU1FPSJmaWZpZWxkIj5JbnRyYS1GaWVsZCBOYXZpZ2F0aW9uIFJlcXVlc3RzPC9BPjwvSDM+CisKK1RoZXNlIHJlcXVlc3RzIGRyaXZlIG1vdmVtZW50IG9mIHRoZSBlZGl0IGN1cnNvciB3aXRoaW4gdGhlIGN1cnJlbnRseQorc2VsZWN0ZWQgZmllbGQuCisKKzxETD4KKzxEVD4gPENPREU+UkVRX05FWFRfQ0hBUjwvQ09ERT4KKzxERD4gTW92ZSB0byBuZXh0IGNoYXJhY3Rlci4KKzxEVD4gPENPREU+UkVRX1BSRVZfQ0hBUjwvQ09ERT4KKzxERD4gTW92ZSB0byBwcmV2aW91cyBjaGFyYWN0ZXIuCis8RFQ+IDxDT0RFPlJFUV9ORVhUX0xJTkU8L0NPREU+Cis8REQ+IE1vdmUgdG8gbmV4dCBsaW5lLgorPERUPiA8Q09ERT5SRVFfUFJFVl9MSU5FPC9DT0RFPgorPEREPiBNb3ZlIHRvIHByZXZpb3VzIGxpbmUuCis8RFQ+IDxDT0RFPlJFUV9ORVhUX1dPUkQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gbmV4dCB3b3JkLgorPERUPiA8Q09ERT5SRVFfUFJFVl9XT1JEPC9DT0RFPgorPEREPiBNb3ZlIHRvIHByZXZpb3VzIHdvcmQuCis8RFQ+IDxDT0RFPlJFUV9CRUdfRklFTEQ8L0NPREU+Cis8REQ+IE1vdmUgdG8gYmVnaW5uaW5nIG9mIGZpZWxkLgorPERUPiA8Q09ERT5SRVFfRU5EX0ZJRUxEPC9DT0RFPgorPEREPiBNb3ZlIHRvIGVuZCBvZiBmaWVsZC4KKzxEVD4gPENPREU+UkVRX0JFR19MSU5FPC9DT0RFPgorPEREPiBNb3ZlIHRvIGJlZ2lubmluZyBvZiBsaW5lLgorPERUPiA8Q09ERT5SRVFfRU5EX0xJTkU8L0NPREU+Cis8REQ+IE1vdmUgdG8gZW5kIG9mIGxpbmUuCis8RFQ+IDxDT0RFPlJFUV9MRUZUX0NIQVI8L0NPREU+Cis8REQ+IE1vdmUgbGVmdCBpbiBmaWVsZC4KKzxEVD4gPENPREU+UkVRX1JJR0hUX0NIQVI8L0NPREU+Cis8REQ+IE1vdmUgcmlnaHQgaW4gZmllbGQuCis8RFQ+IDxDT0RFPlJFUV9VUF9DSEFSPC9DT0RFPgorPEREPiBNb3ZlIHVwIGluIGZpZWxkLgorPERUPiA8Q09ERT5SRVFfRE9XTl9DSEFSPC9DT0RFPgorPEREPiBNb3ZlIGRvd24gaW4gZmllbGQuCis8L0RMPgorCitFYWNoIDxFTT53b3JkPC9FTT4gaXMgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIGFuZCBuZXh0IGNoYXJhY3RlcnMKK2J5IHdoaXRlc3BhY2UuICBUaGUgY29tbWFuZHMgdG8gbW92ZSB0byBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsaW5lIG9yIGZpZWxkCitsb29rIGZvciB0aGUgZmlyc3Qgb3IgbGFzdCBub24tcGFkIGNoYXJhY3RlciBpbiB0aGVpciByYW5nZXMuCisKKzxIMz48QSBOQU1FPSJmc2Nyb2xsIj5TY3JvbGxpbmcgUmVxdWVzdHM8L0E+PC9IMz4KKworRmllbGRzIHRoYXQgYXJlIGR5bmFtaWMgYW5kIGhhdmUgZ3Jvd24gYW5kIGZpZWxkcyBleHBsaWNpdGx5IGNyZWF0ZWQKK3dpdGggb2Zmc2NyZWVuIHJvd3MgYXJlIHNjcm9sbGFibGUuICBPbmUtbGluZSBmaWVsZHMgc2Nyb2xsIGhvcml6b250YWxseTsKK211bHRpLWxpbmUgZmllbGRzIHNjcm9sbCB2ZXJ0aWNhbGx5LiAgTW9zdCBzY3JvbGxpbmcgaXMgdHJpZ2dlcmVkIGJ5CitlZGl0aW5nIGFuZCBpbnRyYS1maWVsZCBtb3ZlbWVudCAodGhlIGxpYnJhcnkgc2Nyb2xscyB0aGUgZmllbGQgdG8ga2VlcCB0aGUKK2N1cnNvciB2aXNpYmxlKS4gIEl0IGlzIHBvc3NpYmxlIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCBzY3JvbGxpbmcgd2l0aCB0aGUKK2ZvbGxvd2luZyByZXF1ZXN0czoKKworPERMPgorPERUPiA8Q09ERT5SRVFfU0NSX0ZMSU5FPC9DT0RFPgorPEREPiBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGEgbGluZS4KKzxEVD4gPENPREU+UkVRX1NDUl9CTElORTwvQ09ERT4KKzxERD4gU2Nyb2xsIHZlcnRpY2FsbHkgYmFja3dhcmQgYSBsaW5lLgorPERUPiA8Q09ERT5SRVFfU0NSX0ZQQUdFPC9DT0RFPgorPEREPiBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGEgcGFnZS4KKzxEVD4gPENPREU+UkVRX1NDUl9CUEFHRTwvQ09ERT4KKzxERD4gU2Nyb2xsIHZlcnRpY2FsbHkgYmFja3dhcmQgYSBwYWdlLgorPERUPiA8Q09ERT5SRVFfU0NSX0ZIUEFHRTwvQ09ERT4KKzxERD4gU2Nyb2xsIHZlcnRpY2FsbHkgZm9yd2FyZCBoYWxmIGEgcGFnZS4KKzxEVD4gPENPREU+UkVRX1NDUl9CSFBBR0U8L0NPREU+Cis8REQ+IFNjcm9sbCB2ZXJ0aWNhbGx5IGJhY2t3YXJkIGhhbGYgYSBwYWdlLgorPERUPiA8Q09ERT5SRVFfU0NSX0ZDSEFSPC9DT0RFPgorPEREPiBTY3JvbGwgaG9yaXpvbnRhbGx5IGZvcndhcmQgYSBjaGFyYWN0ZXIuCis8RFQ+IDxDT0RFPlJFUV9TQ1JfQkNIQVI8L0NPREU+Cis8REQ+IFNjcm9sbCBob3Jpem9udGFsbHkgYmFja3dhcmQgYSBjaGFyYWN0ZXIuCis8RFQ+IDxDT0RFPlJFUV9TQ1JfSEZMSU5FPC9DT0RFPgorPEREPiBTY3JvbGwgaG9yaXpvbnRhbGx5IG9uZSBmaWVsZCB3aWR0aCBmb3J3YXJkLgorPERUPiA8Q09ERT5SRVFfU0NSX0hCTElORTwvQ09ERT4KKzxERD4gU2Nyb2xsIGhvcml6b250YWxseSBvbmUgZmllbGQgd2lkdGggYmFja3dhcmQuCis8RFQ+IDxDT0RFPlJFUV9TQ1JfSEZIQUxGPC9DT0RFPgorPEREPiBTY3JvbGwgaG9yaXpvbnRhbGx5IG9uZSBoYWxmIGZpZWxkIHdpZHRoIGZvcndhcmQuCis8RFQ+IDxDT0RFPlJFUV9TQ1JfSEJIQUxGPC9DT0RFPgorPEREPiBTY3JvbGwgaG9yaXpvbnRhbGx5IG9uZSBoYWxmIGZpZWxkIHdpZHRoIGJhY2t3YXJkLgorPC9ETD4KKworRm9yIHNjcm9sbGluZyBwdXJwb3NlcywgYSA8RU0+cGFnZTwvRU0+IG9mIGEgZmllbGQgaXMgdGhlIGhlaWdodAorb2YgaXRzIHZpc2libGUgcGFydC4KKworPEgzPjxBIE5BTUU9ImZlZGl0Ij5FZGl0aW5nIFJlcXVlc3RzPC9BPjwvSDM+CisKK1doZW4geW91IHBhc3MgdGhlIGZvcm1zIGRyaXZlciBhbiBBU0NJSSBjaGFyYWN0ZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYQorcmVxdWVzdCB0byBhZGQgdGhlIGNoYXJhY3RlciB0byB0aGUgZmllbGQncyBkYXRhIGJ1ZmZlci4gIFdoZXRoZXIgdGhpcworaXMgYW4gaW5zZXJ0aW9uIG9yIGEgcmVwbGFjZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQncyBlZGl0IG1vZGUKKyhpbnNlcnRpb24gaXMgdGhlIGRlZmF1bHQuIDxQPgorCitUaGUgZm9sbG93aW5nIHJlcXVlc3RzIHN1cHBvcnQgZWRpdGluZyB0aGUgZmllbGQgYW5kIGNoYW5naW5nIHRoZSBlZGl0Cittb2RlOgorCis8REw+Cis8RFQ+IDxDT0RFPlJFUV9JTlNfTU9ERTwvQ09ERT4KKzxERD4gU2V0IGluc2VydGlvbiBtb2RlLgorPERUPiA8Q09ERT5SRVFfT1ZMX01PREU8L0NPREU+Cis8REQ+IFNldCBvdmVybGF5IG1vZGUuCis8RFQ+IDxDT0RFPlJFUV9ORVdfTElORTwvQ09ERT4KKzxERD4gTmV3IGxpbmUgcmVxdWVzdCAoc2VlIGJlbG93IGZvciBleHBsYW5hdGlvbikuCis8RFQ+IDxDT0RFPlJFUV9JTlNfQ0hBUjwvQ09ERT4KKzxERD4gSW5zZXJ0IHNwYWNlIGF0IGNoYXJhY3RlciBsb2NhdGlvbi4KKzxEVD4gPENPREU+UkVRX0lOU19MSU5FPC9DT0RFPgorPEREPiBJbnNlcnQgYmxhbmsgbGluZSBhdCBjaGFyYWN0ZXIgbG9jYXRpb24uCis8RFQ+IDxDT0RFPlJFUV9ERUxfQ0hBUjwvQ09ERT4KKzxERD4gRGVsZXRlIGNoYXJhY3RlciBhdCBjdXJzb3IuCis8RFQ+IDxDT0RFPlJFUV9ERUxfUFJFVjwvQ09ERT4KKzxERD4gRGVsZXRlIHByZXZpb3VzIHdvcmQgYXQgY3Vyc29yLgorPERUPiA8Q09ERT5SRVFfREVMX0xJTkU8L0NPREU+Cis8REQ+IERlbGV0ZSBsaW5lIGF0IGN1cnNvci4KKzxEVD4gPENPREU+UkVRX0RFTF9XT1JEPC9DT0RFPgorPEREPiBEZWxldGUgd29yZCBhdCBjdXJzb3IuCis8RFQ+IDxDT0RFPlJFUV9DTFJfRU9MPC9DT0RFPgorPEREPiBDbGVhciB0byBlbmQgb2YgbGluZS4KKzxEVD4gPENPREU+UkVRX0NMUl9FT0Y8L0NPREU+Cis8REQ+IENsZWFyIHRvIGVuZCBvZiBmaWVsZC4KKzxEVD4gPENPREU+UkVRX0NMRUFSX0ZJRUxEPC9DT0RFPgorPEREPiBDbGVhciBlbnRpcmUgZmllbGQuCis8L0RMPgorCitUaGUgYmVoYXZpb3Igb2YgdGhlIDxDT0RFPlJFUV9ORVdfTElORTwvQ09ERT4gYW5kIDxDT0RFPlJFUV9ERUxfUFJFVjwvQ09ERT4gcmVxdWVzdHMKK2lzIGNvbXBsaWNhdGVkIGFuZCBwYXJ0bHkgY29udHJvbGxlZCBieSBhIHBhaXIgb2YgZm9ybXMgb3B0aW9ucy4KK1RoZSBzcGVjaWFsIGNhc2VzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YKK2EgZmllbGQsIG9yIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGZpZWxkLiA8UD4KKworRmlyc3QsIHdlIGNvbnNpZGVyIDxDT0RFPlJFUV9ORVdfTElORTwvQ09ERT46IDxQPgorCitUaGUgbm9ybWFsIGJlaGF2aW9yIG9mIDxDT0RFPlJFUV9ORVdfTElORTwvQ09ERT4gaW4gaW5zZXJ0IG1vZGUgaXMgdG8gYnJlYWsgdGhlCitjdXJyZW50IGxpbmUgYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBlZGl0IGN1cnNvciwgaW5zZXJ0aW5nIHRoZSBwb3J0aW9uIG9mCit0aGUgY3VycmVudCBsaW5lIGFmdGVyIHRoZSBjdXJzb3IgYXMgYSBuZXcgbGluZSBmb2xsb3dpbmcgdGhlIGN1cnJlbnQKK2FuZCBtb3ZpbmcgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgbmV3IGxpbmUgKHlvdSBtYXkgdGhpbmsKK29mIHRoaXMgYXMgaW5zZXJ0aW5nIGEgbmV3bGluZSBpbiB0aGUgZmllbGQgYnVmZmVyKS4gPFA+CisKK1RoZSBub3JtYWwgYmVoYXZpb3Igb2YgPENPREU+UkVRX05FV19MSU5FPC9DT0RFPiBpbiBvdmVybGF5IG1vZGUgaXMgdG8gY2xlYXIgdGhlCitjdXJyZW50IGxpbmUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGVkaXQgY3Vyc29yIHRvIGVuZCBvZiBsaW5lLgorVGhlIGN1cnNvciBpcyB0aGVuIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZS4gPFA+CisKK0hvd2V2ZXIsIDxDT0RFPlJFUV9ORVdfTElORTwvQ09ERT4gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkLCBvciBvbiB0aGUKK2xhc3QgbGluZSBvZiBhIGZpZWxkLCBpbnN0ZWFkIGRvZXMgYSA8Q09ERT5SRVFfTkVYVF9GSUVMRDwvQ09ERT4uCis8Q09ERT5PX05MX09WRVJMT0FEPC9DT0RFPiBvcHRpb24gaXMgb2ZmLCB0aGlzIHNwZWNpYWwgYWN0aW9uIGlzCitkaXNhYmxlZC4gPFA+CisKK05vdywgbGV0IHVzIGNvbnNpZGVyIDxDT0RFPlJFUV9ERUxfUFJFVjwvQ09ERT46IDxQPgorCitUaGUgbm9ybWFsIGJlaGF2aW9yIG9mIDxDT0RFPlJFUV9ERUxfUFJFVjwvQ09ERT4gaXMgdG8gZGVsZXRlIHRoZSBwcmV2aW91cworY2hhcmFjdGVyLiAgSWYgaW5zZXJ0IG1vZGUgaXMgb24sIGFuZCB0aGUgY3Vyc29yIGlzIGF0IHRoZSBzdGFydCBvZiBhCitsaW5lLCBhbmQgdGhlIHRleHQgb24gdGhhdCBsaW5lIHdpbGwgZml0IG9uIHRoZSBwcmV2aW91cyBvbmUsIGl0CitpbnN0ZWFkIGFwcGVuZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlIHByZXZpb3VzIG9uZQorYW5kIGRlbGV0ZXMgdGhlIGN1cnJlbnQgbGluZSAoeW91IG1heSB0aGluayBvZiB0aGlzIGFzIGRlbGV0aW5nIGEKK25ld2xpbmUgZnJvbSB0aGUgZmllbGQgYnVmZmVyKS4gPFA+CisKK0hvd2V2ZXIsIDxDT0RFPlJFUV9ERUxfUFJFVjwvQ09ERT4gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkIGlzIGluc3RlYWQKK3RyZWF0ZWQgYXMgYSA8Q09ERT5SRVFfUFJFVl9GSUVMRDwvQ09ERT4uIDxQPiBJZiB0aGUKKzxDT0RFPk9fQlNfT1ZFUkxPQUQ8L0NPREU+IG9wdGlvbiBpcyBvZmYsIHRoaXMgc3BlY2lhbCBhY3Rpb24gaXMKK2Rpc2FibGVkIGFuZCB0aGUgZm9ybXMgZHJpdmVyIGp1c3QgcmV0dXJucyA8Q09ERT5FX1JFUVVFU1RfREVOSUVEPC9DT0RFPi4gPFA+CisKK1NlZSA8QSBIUkVGPSIjZnJtb3B0aW9ucyI+Rm9ybSBPcHRpb25zPC9BPiBmb3IgZGlzY3Vzc2lvbiBvZiBob3cgdG8gc2V0CithbmQgY2xlYXIgdGhlIG92ZXJsb2FkIG9wdGlvbnMuCisKKzxIMz48QSBOQU1FPSJmb3JkZXIiPk9yZGVyIFJlcXVlc3RzPC9BPjwvSDM+CisKK0lmIHRoZSB0eXBlIG9mIHlvdXIgZmllbGQgaXMgb3JkZXJlZCwgYW5kIGhhcyBhc3NvY2lhdGVkIGZ1bmN0aW9ucworZm9yIGdldHRpbmcgdGhlIG5leHQgYW5kIHByZXZpb3VzIHZhbHVlcyBvZiB0aGUgdHlwZSBmcm9tIGEgZ2l2ZW4gdmFsdWUsCit0aGVyZSBhcmUgcmVxdWVzdHMgdGhhdCBjYW4gZmV0Y2ggdGhhdCB2YWx1ZSBpbnRvIHRoZSBmaWVsZCBidWZmZXI6CisKKzxETD4KKzxEVD4gPENPREU+UkVRX05FWFRfQ0hPSUNFPC9DT0RFPgorPEREPiBQbGFjZSB0aGUgc3VjY2Vzc29yIHZhbHVlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoZSBidWZmZXIuCis8RFQ+IDxDT0RFPlJFUV9QUkVWX0NIT0lDRTwvQ09ERT4KKzxERD4gUGxhY2UgdGhlIHByZWRlY2Vzc29yIHZhbHVlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoZSBidWZmZXIuCis8L0RMPgorCitPZiB0aGUgYnVpbHQtaW4gZmllbGQgdHlwZXMsIG9ubHkgPENPREU+VFlQRV9FTlVNPC9DT0RFPiBoYXMgYnVpbHQtaW4gc3VjY2Vzc29yCithbmQgcHJlZGVjZXNzb3IgZnVuY3Rpb25zLiAgV2hlbiB5b3UgZGVmaW5lIGEgZmllbGQgdHlwZSBvZiB5b3VyIG93bgorKHNlZSA8QSBIUkVGPSIjZmN1c3RvbSI+Q3VzdG9tIFZhbGlkYXRpb24gVHlwZXM8L0E+KSwgeW91IGNhbiBhc3NvY2lhdGUKK291ciBvd24gb3JkZXJpbmcgZnVuY3Rpb25zLgorCis8SDM+PEEgTkFNRT0iZmFwcGNtZHMiPkFwcGxpY2F0aW9uIENvbW1hbmRzPC9BPjwvSDM+CisKK0Zvcm0gcmVxdWVzdHMgYXJlIHJlcHJlc2VudGVkIGFzIGludGVnZXJzIGFib3ZlIHRoZSA8Q09ERT5jdXJzZXM8L0NPREU+IHZhbHVlCitncmVhdGVyIHRoYW4gPENPREU+S0VZX01BWDwvQ09ERT4gYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgY29uc3RhbnQKKzxDT0RFPk1BWF9DT01NQU5EPC9DT0RFPi4gIElmIHlvdXIgaW5wdXQtdmlydHVhbGl6YXRpb24gcm91dGluZSByZXR1cm5zIGEKK3ZhbHVlIGFib3ZlIDxDT0RFPk1BWF9DT01NQU5EPC9DT0RFPiwgdGhlIGZvcm1zIGRyaXZlciB3aWxsIGlnbm9yZSBpdC4KKworPEgyPjxBIE5BTUU9ImZob29rcyI+RmllbGQgQ2hhbmdlIEhvb2tzPC9BPjwvSDI+CisKK0l0IGlzIHBvc3NpYmxlIHRvIHNldCBmdW5jdGlvbiBob29rcyB0byBiZSBleGVjdXRlZCB3aGVuZXZlciB0aGUKK2N1cnJlbnQgZmllbGQgb3IgZm9ybSBjaGFuZ2VzLiAgSGVyZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHN1cHBvcnQgdGhpczoKKworPFBSRT4KK3R5cGVkZWYgdm9pZAkoKkhPT0spKCk7ICAgICAgIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQgKi8KKworaW50IHNldF9mb3JtX2luaXQoRk9STSAqZm9ybSwgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgSE9PSyBob29rKTsgICAgLyogaW5pdGlhbGl6YXRpb24gaG9vayAqLworCitIT09LIGZvcm1faW5pdChGT1JNICpmb3JtKTsgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKK2ludCBzZXRfZm9ybV90ZXJtKEZPUk0gKmZvcm0sICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIEhPT0sgaG9vayk7ICAgIC8qIHRlcm1pbmF0aW9uIGhvb2sgKi8KKworSE9PSyBmb3JtX3Rlcm0oRk9STSAqZm9ybSk7ICAgICAgLyogZm9ybSB0byBxdWVyeSAqLworCitpbnQgc2V0X2ZpZWxkX2luaXQoRk9STSAqZm9ybSwgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBIT09LIGhvb2spOyAgICAvKiBpbml0aWFsaXphdGlvbiBob29rICovCisKK0hPT0sgZmllbGRfaW5pdChGT1JNICpmb3JtKTsgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKworaW50IHNldF9maWVsZF90ZXJtKEZPUk0gKmZvcm0sICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgSE9PSyBob29rKTsgICAgLyogdGVybWluYXRpb24gaG9vayAqLworCitIT09LIGZpZWxkX3Rlcm0oRk9STSAqZm9ybSk7ICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCis8L1BSRT4KKworVGhlc2UgZnVuY3Rpb25zIGFsbG93IHlvdSB0byBlaXRoZXIgc2V0IG9yIHF1ZXJ5IGZvdXIgZGlmZmVyZW50IGhvb2tzLgorSW4gZWFjaCBvZiB0aGUgc2V0IGZ1bmN0aW9ucywgdGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgYmUgdGhlCithZGRyZXNzIG9mIGEgaG9vayBmdW5jdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucyBkaWZmZXIgb25seSBpbiB0aGUgdGltaW5nCitvZiB0aGUgaG9vayBjYWxsLgorCis8REw+Cis8RFQ+IGZvcm1faW5pdAorPEREPiBUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gdGhlIGZvcm0gaXMgcG9zdGVkOyBhbHNvLCBqdXN0IGFmdGVyCitlYWNoIHBhZ2UgY2hhbmdlIG9wZXJhdGlvbi4KKzxEVD4gZmllbGRfaW5pdAorPEREPiBUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gdGhlIGZvcm0gaXMgcG9zdGVkOyBhbHNvLCBqdXN0IGFmdGVyCitlYWNoIGZpZWxkIGNoYW5nZQorPERUPiBmaWVsZF90ZXJtCis8REQ+IFRoaXMgaG9vayBpcyBjYWxsZWQganVzdCBhZnRlciBmaWVsZCB2YWxpZGF0aW9uOyB0aGF0IGlzLCBqdXN0IGJlZm9yZQordGhlIGZpZWxkIGlzIGFsdGVyZWQuICBJdCBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHVucG9zdGVkLgorPERUPiBmb3JtX3Rlcm0KKzxERD4gVGhpcyBob29rIGlzIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHVucG9zdGVkOyBhbHNvLCBqdXN0IGJlZm9yZQorZWFjaCBwYWdlIGNoYW5nZSBvcGVyYXRpb24uCis8L0RMPgorCitDYWxscyB0byB0aGVzZSBob29rcyBtYXkgYmUgdHJpZ2dlcmVkCis8T0w+Cis8TEk+V2hlbiB1c2VyIGVkaXRpbmcgcmVxdWVzdHMgYXJlIHByb2Nlc3NlZCBieSB0aGUgZm9ybXMgZHJpdmVyCis8TEk+V2hlbiB0aGUgY3VycmVudCBwYWdlIGlzIGNoYW5nZWQgYnkgPENPREU+c2V0X2N1cnJlbnRfZmllbGQoKTwvQ09ERT4gY2FsbAorPExJPldoZW4gdGhlIGN1cnJlbnQgZmllbGQgaXMgY2hhbmdlZCBieSBhIDxDT0RFPnNldF9mb3JtX3BhZ2UoKTwvQ09ERT4gY2FsbAorPC9PTD4KKworU2VlIDxBIE5BTUU9ImZmb2N1cyI+RmllbGQgQ2hhbmdlIENvbW1hbmRzPC9BPiBmb3IgZGlzY3Vzc2lvbiBvZiB0aGUgbGF0dGVyCit0d28gY2FzZXMuIDxQPgorCitZb3UgY2FuIHNldCBhIGRlZmF1bHQgaG9vayBmb3IgYWxsIGZpZWxkcyBieSBwYXNzaW5nIG9uZSBvZiB0aGUgc2V0IGZ1bmN0aW9ucworYSBOVUxMIGZpcnN0IGFyZ3VtZW50LiA8UD4KKworWW91IGNhbiBkaXNhYmxlIGFueSBvZiB0aGVzZSBob29rcyBieSAocmUpc2V0dGluZyB0aGVtIHRvIE5VTEwsIHRoZSBkZWZhdWx0Cit2YWx1ZS4KKworPEgyPjxBIEhSRUY9IiNmZm9jdXMiPkZpZWxkIENoYW5nZSBDb21tYW5kczwvQT48L0gyPgorCitOb3JtYWxseSwgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBmb3JtIHdpbGwgYmUgZHJpdmVuIGJ5IHRoZSB1c2VyJ3MKK2lucHV0IHJlcXVlc3RzLiAgQnV0IHNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBtb3ZlIHRoZQorZm9jdXMgZm9yIGVkaXRpbmcgYW5kIHZpZXdpbmcgdW5kZXIgY29udHJvbCBvZiB5b3VyIGFwcGxpY2F0aW9uLCBvcgorYXNrIHdoaWNoIGZpZWxkIGl0IGN1cnJlbnRseSBpcyBpbi4gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhlbHAgeW91CithY2NvbXBsaXNoIHRoaXM6CisKKzxQUkU+CitpbnQgc2V0X2N1cnJlbnRfZmllbGQoRk9STSAqZm9ybSwgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKmZpZWxkKTsgICAgICAvKiBmaWVsZCB0byBzaGlmdCB0byAqLworCitGSUVMRCAqY3VycmVudF9maWVsZChGT1JNICpmb3JtKTsgICAgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKK2ludCBmaWVsZF9pbmRleChGT1JNICpmb3JtLCAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKyAgICAgICAgICAgICAgICBGSUVMRCAqZmllbGQpOyAgICAgICAgICAgIC8qIGZpZWxkIHRvIGdldCBpbmRleCBvZiAqLworPC9QUkU+CisKK1RoZSBmdW5jdGlvbiA8Q09ERT5maWVsZF9pbmRleCgpPC9DT0RFPiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gZmllbGQKK2luIHRoZSBnaXZlbiBmb3JtJ3MgZmllbGQgYXJyYXkgKHRoZSBhcnJheSBwYXNzZWQgdG8gPENPREU+bmV3X2Zvcm0oKTwvQ09ERT4gb3IKKzxDT0RFPnNldF9mb3JtX2ZpZWxkcygpPC9DT0RFPikuIDxQPgorCitUaGUgaW5pdGlhbCBjdXJyZW50IGZpZWxkIG9mIGEgZm9ybSBpcyB0aGUgZmlyc3QgYWN0aXZlIGZpZWxkIG9uIHRoZQorZmlyc3QgcGFnZS4gVGhlIGZ1bmN0aW9uIDxDT0RFPnNldF9mb3JtX2ZpZWxkcygpPC9DT0RFPiByZXNldHMgdGhpcy48UD4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBtb3ZlIGFyb3VuZCBieSBwYWdlcy4KKworPFBSRT4KK2ludCBzZXRfZm9ybV9wYWdlKEZPUk0gKmZvcm0sICAgICAgICAgICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBwYWdlKTsgICAgICAgICAgICAgIC8qIHBhZ2UgdG8gZ28gdG8gKDAtb3JpZ2luKSAqLworCitpbnQgZm9ybV9wYWdlKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAgICAvKiByZXR1cm4gZm9ybSdzIGN1cnJlbnQgcGFnZSAqLworPC9QUkU+CisKK1RoZSBpbml0aWFsIHBhZ2Ugb2YgYSBuZXdseS1jcmVhdGVkIGZvcm0gaXMgMC4gIFRoZSBmdW5jdGlvbgorPENPREU+c2V0X2Zvcm1fZmllbGRzKCk8L0NPREU+IHJlc2V0cyB0aGlzLgorCis8SDI+PEEgTkFNRT0iZnJtb3B0aW9ucyI+Rm9ybSBPcHRpb25zPC9BPjwvSDI+CisKK0xpa2UgZmllbGRzLCBmb3JtcyBtYXkgaGF2ZSBjb250cm9sIG9wdGlvbiBiaXRzLiAgVGhleSBjYW4gYmUgY2hhbmdlZAorb3IgcXVlcmllZCB3aXRoIHRoZXNlIGZ1bmN0aW9uczoKKworPFBSRT4KK2ludCBzZXRfZm9ybV9vcHRzKEZPUk0gKmZvcm0sICAgICAgICAgICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZSB0byBzZXQgKi8KKworaW50IGZvcm1fb3B0c19vbihGT1JNICpmb3JtLCAgICAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgICAgLyogYXR0cmlidXRlcyB0byB0dXJuIG9uICovCisKK2ludCBmb3JtX29wdHNfb2ZmKEZPUk0gKmZvcm0sICAgICAgICAgICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvZmYgKi8KKworaW50IGZvcm1fb3B0cyhGT1JNICpmb3JtKTsgICAgICAgICAgICAgICAgLyogZm9ybSB0byBxdWVyeSAqLworPC9QUkU+CisKK0J5IGRlZmF1bHQsIGFsbCBvcHRpb25zIGFyZSBvbi4gIEhlcmUgYXJlIHRoZSBhdmFpbGFibGUgb3B0aW9uIGJpdHM6CisKKzxETD4KKzxEVD4gT19OTF9PVkVSTE9BRAorPEREPiBFbmFibGUgb3ZlcmxvYWRpbmcgb2YgPENPREU+UkVRX05FV19MSU5FPC9DT0RFPiBhcyBkZXNjcmliZWQgaW4gPEEKK2hyZWY9IiNmZWRpdCI+RWRpdGluZyBSZXF1ZXN0czwvQT4uICBUaGUgdmFsdWUgb2YgdGhpcyBvcHRpb24gaXMKK2lnbm9yZWQgb24gZHluYW1pYyBmaWVsZHMgdGhhdCBoYXZlIG5vdCByZWFjaGVkIHRoZWlyIHNpemUgbGltaXQ7Cit0aGVzZSBoYXZlIG5vIGxhc3QgbGluZSwgc28gdGhlIGNpcmN1bXN0YW5jZXMgZm9yIHRyaWdnZXJpbmcgYQorPENPREU+UkVRX05FWFRfRklFTEQ8L0NPREU+IG5ldmVyIGFyaXNlLgorPERUPiBPX0JTX09WRVJMT0FECis8REQ+IEVuYWJsZSBvdmVybG9hZGluZyBvZiA8Q09ERT5SRVFfREVMX1BSRVY8L0NPREU+IGFzIGRlc2NyaWJlZCBpbgorPEEgaHJlZj0iI2ZlZGl0Ij5FZGl0aW5nIFJlcXVlc3RzPC9BPi4KKzwvREw+CisKK1RoZSBvcHRpb24gdmFsdWVzIGFyZSBiaXQtbWFza3MgYW5kIGNhbiBiZSBjb21wb3NlZCB3aXRoIGxvZ2ljYWwtb3IgaW4KK3RoZSBvYnZpb3VzIHdheS4KKworPEgyPjxBIE5BTUU9ImZjdXN0b20iPkN1c3RvbSBWYWxpZGF0aW9uIFR5cGVzPC9BPjwvSDI+CisKK1RoZSA8Q09ERT5mb3JtPC9DT0RFPiBsaWJyYXJ5IGdpdmVzIHlvdSB0aGUgY2FwYWJpbGl0eSB0byBkZWZpbmUgY3VzdG9tCit2YWxpZGF0aW9uIHR5cGVzIG9mIHlvdXIgb3duLiAgRnVydGhlciwgdGhlIG9wdGlvbmFsIGFkZGl0aW9uYWwgYXJndW1lbnRzCitvZiA8Q09ERT5zZXRfZmllbGRfdHlwZTwvQ09ERT4gZWZmZWN0aXZlbHkgYWxsb3cgeW91IHRvIHBhcmFtZXRlcml6ZSB2YWxpZGF0aW9uCit0eXBlcy4gIE1vc3Qgb2YgdGhlIGNvbXBsaWNhdGlvbnMgaW4gdGhlIHZhbGlkYXRpb24tdHlwZSBpbnRlcmZhY2UgaGF2ZSB0bworZG8gd2l0aCB0aGUgaGFuZGxpbmcgb2YgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIHdpdGhpbiBjdXN0b20gdmFsaWRhdGlvbgorZnVuY3Rpb25zLgorCis8SDM+PEEgTkFNRT0iZmxpbmt0eXBlcyI+VW5pb24gVHlwZXM8L0E+PC9IMz4KKworVGhlIHNpbXBsZXN0IHdheSB0byBjcmVhdGUgYSBjdXN0b20gZGF0YSB0eXBlIGlzIHRvIGNvbXBvc2UgaXQgZnJvbSB0d28KK3ByZWV4aXN0aW5nIG9uZXM6CisKKzxQUkU+CitGSUVMRCAqbGlua19maWVsZHR5cGUoRklFTERUWVBFICp0eXBlMSwKKyAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKnR5cGUyKTsKKzwvUFJFPgorCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBmaWVsZCB0eXBlIHRoYXQgd2lsbCBhY2NlcHQgYW55IG9mIHRoZSB2YWx1ZXMKK2xlZ2FsIGZvciBlaXRoZXIgb2YgaXRzIGFyZ3VtZW50IGZpZWxkIHR5cGVzICh3aGljaCBtYXkgYmUgZWl0aGVyCitwcmVkZWZpbmVkIG9yIHByb2dyYW1tZXItZGVmaW5lZCkuCisKK0lmIGEgPENPREU+c2V0X2ZpZWxkX3R5cGUoKTwvQ09ERT4gY2FsbCBsYXRlciByZXF1aXJlcyBhcmd1bWVudHMsIHRoZSBuZXcKK2NvbXBvc2l0ZSB0eXBlIGV4cGVjdHMgYWxsIGFyZ3VtZW50cyBmb3IgdGhlIGZpcnN0IHR5cGUsIHRoYW4gYWxsIGFyZ3VtZW50cworZm9yIHRoZSBzZWNvbmQuICBPcmRlciBmdW5jdGlvbnMgKHNlZSA8QSBIUkVGPSIjZm9yZGVyIj5PcmRlciBSZXF1ZXN0czwvQT4pCithc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudCB0eXBlcyB3aWxsIHdvcmsgb24gdGhlIGNvbXBvc2l0ZTsgd2hhdCBpdCBkb2VzCitpcyBjaGVjayB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZpcnN0IHR5cGUsIHRoZW4gZm9yIHRoZSBzZWNvbmQsIHRvCitmaWd1cmUgd2hhdCB0eXBlIHRoZSBidWZmZXIgY29udGVudHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMuCisKKzxIMz48QSBOQU1FPSJmbmV3dHlwZXMiPk5ldyBGaWVsZCBUeXBlczwvQT48L0gzPgorCitUbyBjcmVhdGUgYSBmaWVsZCB0eXBlIGZyb20gc2NyYXRjaCwgeW91IG5lZWQgdG8gc3BlY2lmeSBvbmUgb3IgYm90aCBvZiB0aGUKK2ZvbGxvd2luZyB0aGluZ3M6CisKKzxVTD4KKzxMST5BIGNoYXJhY3Rlci12YWxpZGF0aW9uIGZ1bmN0aW9uLCB0byBjaGVjayBlYWNoIGNoYXJhY3RlciBhcyBpdCBpcyBlbnRlcmVkLgorPExJPkEgZmllbGQtdmFsaWRhdGlvbiBmdW5jdGlvbiB0byBiZSBhcHBsaWVkIG9uIGV4aXQgZnJvbSB0aGUgZmllbGQuCis8L1VMPgorCitIZXJlJ3MgaG93IHlvdSBkbyB0aGF0OgorPFBSRT4KK3R5cGVkZWYgaW50CSgqSE9PSykoKTsgICAgICAgLyogcG9pbnRlciB0byBmdW5jdGlvbiByZXR1cm5pbmcgaW50ICovCisKK0ZJRUxEVFlQRSAqbmV3X2ZpZWxkdHlwZShIT09LIGZfdmFsaWRhdGUsIC8qIGZpZWxkIHZhbGlkYXRvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgIEhPT0sgY192YWxpZGF0ZSkgLyogY2hhcmFjdGVyIHZhbGlkYXRvciAqLworCisKK2ludCBmcmVlX2ZpZWxkdHlwZShGSUVMRFRZUEUgKmZ0eXBlKTsgICAgIC8qIHR5cGUgdG8gZnJlZSAqLworPC9QUkU+CisKK0F0IGxlYXN0IG9uZSBvZiB0aGUgYXJndW1lbnRzIG9mIDxDT0RFPm5ld19maWVsZHR5cGUoKTwvQ09ERT4gbXVzdCBiZQorbm9uLU5VTEwuICBUaGUgZm9ybXMgZHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIHRoZSBuZXcgdHlwZSdzCit2YWxpZGF0aW9uIGZ1bmN0aW9ucyBhdCBhcHByb3ByaWF0ZSBwb2ludHMgaW4gcHJvY2Vzc2luZyBhIGZpZWxkIG9mCit0aGUgbmV3IHR5cGUuIDxQPgorCitUaGUgZnVuY3Rpb24gPENPREU+ZnJlZV9maWVsZHR5cGUoKTwvQ09ERT4gZGVhbGxvY2F0ZXMgdGhlIGFyZ3VtZW50CitmaWVsZHR5cGUsIGZyZWVpbmcgYWxsIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0LiA8UD4KKworTm9ybWFsbHksIGEgZmllbGQgdmFsaWRhdG9yIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCitsZWF2ZSB0aGUgZmllbGQuICBJdHMgZmlyc3QgYXJndW1lbnQgaXMgYSBmaWVsZCBwb2ludGVyLCBmcm9tIHdoaWNoIGl0CitjYW4gZ2V0IHRvIGZpZWxkIGJ1ZmZlciAwIGFuZCB0ZXN0IGl0LiAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgVFJVRSwKK3RoZSBvcGVyYXRpb24gc3VjY2VlZHM7IGlmIGl0IHJldHVybnMgRkFMU0UsIHRoZSBlZGl0IGN1cnNvciBzdGF5cyBpbgordGhlIGZpZWxkLiA8UD4KKworQSBjaGFyYWN0ZXIgdmFsaWRhdG9yIGdldHMgdGhlIGNoYXJhY3RlciBwYXNzZWQgaW4gYXMgYSBmaXJzdCBhcmd1bWVudC4KK0l0IHRvbyBzaG91bGQgcmV0dXJuIFRSVUUgaWYgdGhlIGNoYXJhY3RlciBpcyB2YWxpZCwgRkFMU0Ugb3RoZXJ3aXNlLgorCis8SDM+PEEgTkFNRT0iZmNoZWNrYXJncyI+VmFsaWRhdGlvbiBGdW5jdGlvbiBBcmd1bWVudHM8L0E+PC9IMz4KKworWW91ciBmaWVsZC0gYW5kIGNoYXJhY3Rlci0gdmFsaWRhdGlvbiBmdW5jdGlvbnMgd2lsbCBiZSBwYXNzZWQgYQorc2Vjb25kIGFyZ3VtZW50IGFzIHdlbGwuICBUaGlzIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgYWRkcmVzcyBvZiBhCitzdHJ1Y3R1cmUgKHdoaWNoIHdlJ2xsIGNhbGwgYSA8RU0+cGlsZTwvRU0+KSBidWlsdCBmcm9tIGFueSBvZiB0aGUKK2ZpZWxkLXR5cGUtc3BlY2lmaWMgYXJndW1lbnRzIHBhc3NlZCB0byA8Q09ERT5zZXRfZmllbGRfdHlwZSgpPC9DT0RFPi4gIElmCitubyBzdWNoIGFyZ3VtZW50cyBhcmUgZGVmaW5lZCBmb3IgdGhlIGZpZWxkIHR5cGUsIHRoaXMgcGlsZSBwb2ludGVyCithcmd1bWVudCB3aWxsIGJlIE5VTEwuIDxQPgorCitJbiBvcmRlciB0byBhcnJhbmdlIGZvciBzdWNoIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8geW91ciB2YWxpZGF0aW9uCitmdW5jdGlvbnMsIHlvdSBtdXN0IGFzc29jaWF0ZSBhIHNtYWxsIHNldCBvZiBzdG9yYWdlLW1hbmFnZW1lbnQgZnVuY3Rpb25zCit3aXRoIHRoZSB0eXBlLiAgVGhlIGZvcm1zIGRyaXZlciB3aWxsIHVzZSB0aGVzZSB0byBzeW50aGVzaXplIGEgcGlsZQorZnJvbSB0aGUgdHJhaWxpbmcgYXJndW1lbnRzIG9mIGVhY2ggPENPREU+c2V0X2ZpZWxkX3R5cGUoKTwvQ09ERT4gYXJndW1lbnQsIGFuZAorYSBwb2ludGVyIHRvIHRoZSBwaWxlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gPFA+CisKK0hlcmUgaXMgaG93IHlvdSBtYWtlIHRoZSBhc3NvY2lhdGlvbjoKKworPFBSRT4KK3R5cGVkZWYgY2hhcgkqKCpQVFJIT09LKSgpOyAgICAvKiBwb2ludGVyIHRvIGZ1bmN0aW9uIHJldHVybmluZyAoY2hhciAqKSAqLwordHlwZWRlZiB2b2lkCSgqVk9JREhPT0spKCk7ICAgIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQgKi8KKworaW50IHNldF9maWVsZHR5cGVfYXJnKEZJRUxEVFlQRSAqdHlwZSwgICAgLyogdHlwZSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgICAgIFBUUkhPT0sgbWFrZV9zdHIsICAgLyogbWFrZSBzdHJ1Y3R1cmUgZnJvbSBhcmdzICovCisgICAgICAgICAgICAgICAgICAgICAgUFRSSE9PSyBjb3B5X3N0ciwgICAvKiBtYWtlIGNvcHkgb2Ygc3RydWN0dXJlICovCisgICAgICAgICAgICAgICAgICAgICAgVk9JREhPT0sgZnJlZV9zdHIpOyAvKiBmcmVlIHN0cnVjdHVyZSBzdG9yYWdlICovCis8L1BSRT4KKworSGVyZSBpcyBob3cgdGhlIHN0b3JhZ2UtbWFuYWdlbWVudCBob29rcyBhcmUgdXNlZDoKKworPERMPgorPERUPiA8Q09ERT5tYWtlX3N0cjwvQ09ERT4KKzxERD4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgPENPREU+c2V0X2ZpZWxkX3R5cGUoKTwvQ09ERT4uICBJdCBnZXRzIG9uZQorYXJndW1lbnQsIGEgPENPREU+dmFfbGlzdDwvQ09ERT4gb2YgdGhlIHR5cGUtc3BlY2lmaWMgYXJndW1lbnRzIHBhc3NlZCB0bworPENPREU+c2V0X2ZpZWxkX3R5cGUoKTwvQ09ERT4uICBJdCBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBwaWxlIHBvaW50ZXIgdG8gYSBkYXRhCitzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgdGhvc2UgYXJndW1lbnRzLgorPERUPiA8Q09ERT5jb3B5X3N0cjwvQ09ERT4KKzxERD4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZm9ybSBsaWJyYXJ5IGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlIG5ldworZmllbGQgaW5zdGFuY2VzLiAgSXQgaXMgZXhwZWN0ZWQgdG8gdGFrZSBhIHBpbGUgcG9pbnRlciwgY29weSB0aGUgcGlsZQordG8gYWxsb2NhdGVkIHN0b3JhZ2UsIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHBpbGUgY29weS4KKzxEVD4gPENPREU+ZnJlZV9zdHI8L0NPREU+Cis8REQ+IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGZpZWxkLSBhbmQgdHlwZS1kZWFsbG9jYXRpb24gcm91dGluZXMgaW4gdGhlCitsaWJyYXJ5LiAgSXQgdGFrZXMgYSBwaWxlIHBvaW50ZXIgYXJndW1lbnQsIGFuZCBpcyBleHBlY3RlZCB0byBmcmVlIHRoZQorc3RvcmFnZSBvZiB0aGF0IHBpbGUuCis8L0RMPgorCitUaGUgPENPREU+bWFrZV9zdHI8L0NPREU+IGFuZCA8Q09ERT5jb3B5X3N0cjwvQ09ERT4gZnVuY3Rpb25zIG1heSByZXR1cm4gTlVMTCB0bworc2lnbmFsIGFsbG9jYXRpb24gZmFpbHVyZS4gIFRoZSBsaWJyYXJ5IHJvdXRpbmVzIHdpbGwgdGhhdCBjYWxsIHRoZW0gd2lsbAorcmV0dXJuIGVycm9yIGluZGljYXRpb24gd2hlbiB0aGlzIGhhcHBlbnMuICBUaHVzLCB5b3VyIHZhbGlkYXRpb24gZnVuY3Rpb25zCitzaG91bGQgbmV2ZXIgc2VlIGEgTlVMTCBmaWxlIHBvaW50ZXIgYW5kIG5lZWQgbm90IGNoZWNrIHNwZWNpYWxseSBmb3IgaXQuCisKKzxIMz48QSBOQU1FPSJmY3VzdG9yZGVyIj5PcmRlciBGdW5jdGlvbnMgRm9yIEN1c3RvbSBUeXBlczwvQT48L0gzPgorCitTb21lIGN1c3RvbSBmaWVsZCB0eXBlcyBhcmUgc2ltcGx5IG9yZGVyZWQgaW4gdGhlIHNhbWUgd2VsbC1kZWZpbmVkIHdheQordGhhdCA8Q09ERT5UWVBFX0VOVU08L0NPREU+IGlzLiAgRm9yIHN1Y2ggdHlwZXMsIGl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZQorc3VjY2Vzc29yIGFuZCBwcmVkZWNlc3NvciBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgPENPREU+UkVRX05FWFRfQ0hPSUNFPC9DT0RFPgorYW5kIDxDT0RFPlJFUV9QUkVWX0NIT0lDRTwvQ09ERT4gcmVxdWVzdHMuIEhlcmUncyBob3c6CisKKzxQUkU+Cit0eXBlZGVmIGludAkoKklOVEhPT0spKCk7ICAgICAvKiBwb2ludGVyIHRvIGZ1bmN0aW9uIHJldHVybmluZyBpbnQgKi8KKworaW50IHNldF9maWVsZHR5cGVfYXJnKEZJRUxEVFlQRSAqdHlwZSwgICAgLyogdHlwZSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgICAgIElOVEhPT0sgc3VjYywgICAgICAgLyogZ2V0IHN1Y2Nlc3NvciB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICAgIElOVEhPT0sgcHJlZCk7ICAgICAgLyogZ2V0IHByZWRlY2Vzc29yIHZhbHVlICovCis8L1BSRT4KKworVGhlIHN1Y2Nlc3NvciBhbmQgcHJlZGVjZXNzb3IgYXJndW1lbnRzIHdpbGwgZWFjaCBiZSBwYXNzZWQgdHdvIGFyZ3VtZW50czsKK2EgZmllbGQgcG9pbnRlciwgYW5kIGEgcGlsZSBwb2ludGVyIChhcyBmb3IgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb25zKS4gIFRoZXkKK2FyZSBleHBlY3RlZCB0byB1c2UgdGhlIGZ1bmN0aW9uIDxDT0RFPmZpZWxkX2J1ZmZlcigpPC9DT0RFPiB0byByZWFkIHRoZQorY3VycmVudCB2YWx1ZSwgYW5kIDxDT0RFPnNldF9maWVsZF9idWZmZXIoKTwvQ09ERT4gb24gYnVmZmVyIDAgdG8gc2V0IHRoZSBuZXh0CitvciBwcmV2aW91cyB2YWx1ZS4gIEVpdGhlciBob29rIG1heSByZXR1cm4gVFJVRSB0byBpbmRpY2F0ZSBzdWNjZXNzIChhCitsZWdhbCBuZXh0IG9yIHByZXZpb3VzIHZhbHVlIHdhcyBzZXQpIG9yIEZBTFNFIHRvIGluZGljYXRlIGZhaWx1cmUuCisKKzxIMz48QSBOQU1FPSJmY3VzdHByb2JzIj5Bdm9pZGluZyBQcm9ibGVtczwvQT48L0gzPgorCitUaGUgaW50ZXJmYWNlIGZvciBkZWZpbmluZyBjdXN0b20gdHlwZXMgaXMgY29tcGxpY2F0ZWQgYW5kIHRyaWNreS4KK1JhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgY3VzdG9tIHR5cGUgZW50aXJlbHkgZnJvbSBzY3JhdGNoLAoreW91IHNob3VsZCBzdGFydCBieSBzdHVkeWluZyB0aGUgbGlicmFyeSBzb3VyY2UgY29kZSBmb3Igd2hpY2hldmVyIG9mCit0aGUgcHJlLWRlZmluZWQgdHlwZXMgc2VlbXMgdG8gYmUgY2xvc2VzdCB0byB3aGF0IHlvdSB3YW50LiA8UD4KKworVXNlIHRoYXQgY29kZSBhcyBhIG1vZGVsLCBhbmQgZXZvbHZlIGl0IHRvd2FyZHMgd2hhdCB5b3UgcmVhbGx5IHdhbnQuCitZb3Ugd2lsbCBhdm9pZCBtYW55IHByb2JsZW1zIGFuZCBhbm5veWFuY2VzIHRoYXQgd2F5LiAgVGhlIGNvZGUKK2luIHRoZSA8Q09ERT5uY3Vyc2VzPC9DT0RFPiBsaWJyYXJ5IGhhcyBiZWVuIHNwZWNpZmljYWxseSBleGVtcHRlZCBmcm9tCit0aGUgcGFja2FnZSBjb3B5cmlnaHQgdG8gc3VwcG9ydCB0aGlzLiA8UD4KKworSWYgeW91ciBjdXN0b20gdHlwZSBkZWZpbmVzIG9yZGVyIGZ1bmN0aW9ucywgaGF2ZSBkbyBzb21ldGhpbmcgaW50dWl0aXZlCit3aXRoIGEgYmxhbmsgZmllbGQuICBBIHVzZWZ1bCBjb252ZW50aW9uIGlzIHRvIG1ha2UgdGhlIHN1Y2Nlc3NvciBvZiBhCitibGFuayBmaWVsZCB0aGUgdHlwZXMgbWluaW11bSB2YWx1ZSwgYW5kIGl0cyBwcmVkZWNlc3NvciB0aGUgbWF4aW11bS4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2RvYy9uY3Vyc2VzLWludHJvLmRvYyBiL25jdXJzZXMtNS43L2RvYy9uY3Vyc2VzLWludHJvLmRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTE3OWQxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZG9jL25jdXJzZXMtaW50cm8uZG9jCkBAIC0wLDAgKzEsMjUwMSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRpbmcgUHJvZ3JhbXMgd2l0aCBOQ1VSU0VTCisKKyAgICAgYnkgRXJpYyBTLiBSYXltb25kIGFuZCBaZXlkIE0uIEJlbi1IYWxpbQorICAgICB1cGRhdGVzIHNpbmNlIHJlbGVhc2UgMS45LjllIGJ5IFRob21hcyBEaWNrZXkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50cworCisgICAgICogSW50cm9kdWN0aW9uCisgICAgICAgICAgKyBBIEJyaWVmIEhpc3Rvcnkgb2YgQ3Vyc2VzCisgICAgICAgICAgKyBTY29wZSBvZiBUaGlzIERvY3VtZW50CisgICAgICAgICAgKyBUZXJtaW5vbG9neQorICAgICAqIFRoZSBDdXJzZXMgTGlicmFyeQorICAgICAgICAgICsgQW4gT3ZlcnZpZXcgb2YgQ3Vyc2VzCisgICAgICAgICAgICAgICBvIENvbXBpbGluZyBQcm9ncmFtcyB1c2luZyBDdXJzZXMKKyAgICAgICAgICAgICAgIG8gVXBkYXRpbmcgdGhlIFNjcmVlbgorICAgICAgICAgICAgICAgbyBTdGFuZGFyZCBXaW5kb3dzIGFuZCBGdW5jdGlvbiBOYW1pbmcgQ29udmVudGlvbnMKKyAgICAgICAgICAgICAgIG8gVmFyaWFibGVzCisgICAgICAgICAgKyBVc2luZyB0aGUgTGlicmFyeQorICAgICAgICAgICAgICAgbyBTdGFydGluZyB1cAorICAgICAgICAgICAgICAgbyBPdXRwdXQKKyAgICAgICAgICAgICAgIG8gSW5wdXQKKyAgICAgICAgICAgICAgIG8gVXNpbmcgRm9ybXMgQ2hhcmFjdGVycworICAgICAgICAgICAgICAgbyBDaGFyYWN0ZXIgQXR0cmlidXRlcyBhbmQgQ29sb3IKKyAgICAgICAgICAgICAgIG8gTW91c2UgSW50ZXJmYWNpbmcKKyAgICAgICAgICAgICAgIG8gRmluaXNoaW5nIFVwCisgICAgICAgICAgKyBGdW5jdGlvbiBEZXNjcmlwdGlvbnMKKyAgICAgICAgICAgICAgIG8gSW5pdGlhbGl6YXRpb24gYW5kIFdyYXB1cAorICAgICAgICAgICAgICAgbyBDYXVzaW5nIE91dHB1dCB0byB0aGUgVGVybWluYWwKKyAgICAgICAgICAgICAgIG8gTG93LUxldmVsIENhcGFiaWxpdHkgQWNjZXNzCisgICAgICAgICAgICAgICBvIERlYnVnZ2luZworICAgICAgICAgICsgSGludHMsIFRpcHMsIGFuZCBUcmlja3MKKyAgICAgICAgICAgICAgIG8gU29tZSBOb3RlcyBvZiBDYXV0aW9uCisgICAgICAgICAgICAgICBvIFRlbXBvcmFyaWx5IExlYXZpbmcgbmN1cnNlcyBNb2RlCisgICAgICAgICAgICAgICBvIFVzaW5nIG5jdXJzZXMgdW5kZXIgeHRlcm0KKyAgICAgICAgICAgICAgIG8gSGFuZGxpbmcgTXVsdGlwbGUgVGVybWluYWwgU2NyZWVucworICAgICAgICAgICAgICAgbyBUZXN0aW5nIGZvciBUZXJtaW5hbCBDYXBhYmlsaXRpZXMKKyAgICAgICAgICAgICAgIG8gVHVuaW5nIGZvciBTcGVlZAorICAgICAgICAgICAgICAgbyBTcGVjaWFsIEZlYXR1cmVzIG9mIG5jdXJzZXMKKyAgICAgICAgICArIENvbXBhdGliaWxpdHkgd2l0aCBPbGRlciBWZXJzaW9ucworICAgICAgICAgICAgICAgbyBSZWZyZXNoIG9mIE92ZXJsYXBwaW5nIFdpbmRvd3MKKyAgICAgICAgICAgICAgIG8gQmFja2dyb3VuZCBFcmFzZQorICAgICAgICAgICsgWFNJIEN1cnNlcyBDb25mb3JtYW5jZQorICAgICAqIFRoZSBQYW5lbHMgTGlicmFyeQorICAgICAgICAgICsgQ29tcGlsaW5nIFdpdGggdGhlIFBhbmVscyBMaWJyYXJ5CisgICAgICAgICAgKyBPdmVydmlldyBvZiBQYW5lbHMKKyAgICAgICAgICArIFBhbmVscywgSW5wdXQsIGFuZCB0aGUgU3RhbmRhcmQgU2NyZWVuCisgICAgICAgICAgKyBIaWRpbmcgUGFuZWxzCisgICAgICAgICAgKyBNaXNjZWxsYW5lb3VzIE90aGVyIEZhY2lsaXRpZXMKKyAgICAgKiBUaGUgTWVudSBMaWJyYXJ5CisgICAgICAgICAgKyBDb21waWxpbmcgd2l0aCB0aGUgbWVudSBMaWJyYXJ5CisgICAgICAgICAgKyBPdmVydmlldyBvZiBNZW51cworICAgICAgICAgICsgU2VsZWN0aW5nIGl0ZW1zCisgICAgICAgICAgKyBNZW51IERpc3BsYXkKKyAgICAgICAgICArIE1lbnUgV2luZG93cworICAgICAgICAgICsgUHJvY2Vzc2luZyBNZW51IElucHV0CisgICAgICAgICAgKyBNaXNjZWxsYW5lb3VzIE90aGVyIEZlYXR1cmVzCisgICAgICogVGhlIEZvcm1zIExpYnJhcnkKKyAgICAgICAgICArIENvbXBpbGluZyB3aXRoIHRoZSBmb3JtcyBMaWJyYXJ5CisgICAgICAgICAgKyBPdmVydmlldyBvZiBGb3JtcworICAgICAgICAgICsgQ3JlYXRpbmcgYW5kIEZyZWVpbmcgRmllbGRzIGFuZCBGb3JtcworICAgICAgICAgICsgRmV0Y2hpbmcgYW5kIENoYW5naW5nIEZpZWxkIEF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgIG8gRmV0Y2hpbmcgU2l6ZSBhbmQgTG9jYXRpb24gRGF0YQorICAgICAgICAgICAgICAgbyBDaGFuZ2luZyB0aGUgRmllbGQgTG9jYXRpb24KKyAgICAgICAgICAgICAgIG8gVGhlIEp1c3RpZmljYXRpb24gQXR0cmlidXRlCisgICAgICAgICAgICAgICBvIEZpZWxkIERpc3BsYXkgQXR0cmlidXRlcworICAgICAgICAgICAgICAgbyBGaWVsZCBPcHRpb24gQml0cworICAgICAgICAgICAgICAgbyBGaWVsZCBTdGF0dXMKKyAgICAgICAgICAgICAgIG8gRmllbGQgVXNlciBQb2ludGVyCisgICAgICAgICAgKyBWYXJpYWJsZS1TaXplZCBGaWVsZHMKKyAgICAgICAgICArIEZpZWxkIFZhbGlkYXRpb24KKyAgICAgICAgICAgICAgIG8gVFlQRV9BTFBIQQorICAgICAgICAgICAgICAgbyBUWVBFX0FMTlVNCisgICAgICAgICAgICAgICBvIFRZUEVfRU5VTQorICAgICAgICAgICAgICAgbyBUWVBFX0lOVEVHRVIKKyAgICAgICAgICAgICAgIG8gVFlQRV9OVU1FUklDCisgICAgICAgICAgICAgICBvIFRZUEVfUkVHRVhQCisgICAgICAgICAgKyBEaXJlY3QgRmllbGQgQnVmZmVyIE1hbmlwdWxhdGlvbgorICAgICAgICAgICsgQXR0cmlidXRlcyBvZiBGb3JtcworICAgICAgICAgICsgQ29udHJvbCBvZiBGb3JtIERpc3BsYXkKKyAgICAgICAgICArIElucHV0IFByb2Nlc3NpbmcgaW4gdGhlIEZvcm1zIERyaXZlcgorICAgICAgICAgICAgICAgbyBQYWdlIE5hdmlnYXRpb24gUmVxdWVzdHMKKyAgICAgICAgICAgICAgIG8gSW50ZXItRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0cworICAgICAgICAgICAgICAgbyBJbnRyYS1GaWVsZCBOYXZpZ2F0aW9uIFJlcXVlc3RzCisgICAgICAgICAgICAgICBvIFNjcm9sbGluZyBSZXF1ZXN0cworICAgICAgICAgICAgICAgbyBGaWVsZCBFZGl0aW5nIFJlcXVlc3RzCisgICAgICAgICAgICAgICBvIE9yZGVyIFJlcXVlc3RzCisgICAgICAgICAgICAgICBvIEFwcGxpY2F0aW9uIENvbW1hbmRzCisgICAgICAgICAgKyBGaWVsZCBDaGFuZ2UgSG9va3MKKyAgICAgICAgICArIEZpZWxkIENoYW5nZSBDb21tYW5kcworICAgICAgICAgICsgRm9ybSBPcHRpb25zCisgICAgICAgICAgKyBDdXN0b20gVmFsaWRhdGlvbiBUeXBlcworICAgICAgICAgICAgICAgbyBVbmlvbiBUeXBlcworICAgICAgICAgICAgICAgbyBOZXcgRmllbGQgVHlwZXMKKyAgICAgICAgICAgICAgIG8gVmFsaWRhdGlvbiBGdW5jdGlvbiBBcmd1bWVudHMKKyAgICAgICAgICAgICAgIG8gT3JkZXIgRnVuY3Rpb25zIEZvciBDdXN0b20gVHlwZXMKKyAgICAgICAgICAgICAgIG8gQXZvaWRpbmcgUHJvYmxlbXMKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50cm9kdWN0aW9uCisKKyAgIFRoaXMgZG9jdW1lbnQgaXMgYW4gaW50cm9kdWN0aW9uIHRvIHByb2dyYW1taW5nIHdpdGggY3Vyc2VzLiBJdCBpcyBub3QKKyAgIGFuICAgZXhoYXVzdGl2ZSAgcmVmZXJlbmNlICBmb3IgIHRoZSAgY3Vyc2VzICBBcHBsaWNhdGlvbiAgUHJvZ3JhbW1pbmcKKyAgIEludGVyZmFjZSAgKEFQSSk7ICB0aGF0ICByb2xlICBpcyAgZmlsbGVkICBieSB0aGUgY3Vyc2VzIG1hbnVhbCBwYWdlcy4KKyAgIFJhdGhlciwgIGl0ICBpcyAgaW50ZW5kZWQgIHRvICBoZWxwICBDIHByb2dyYW1tZXJzIGVhc2UgaW50byB1c2luZyB0aGUKKyAgIHBhY2thZ2UuCisKKyAgIFRoaXMgICBkb2N1bWVudCAgaXMgIGFpbWVkICBhdCAgQyAgYXBwbGljYXRpb25zICBwcm9ncmFtbWVycyAgbm90ICB5ZXQKKyAgIHNwZWNpZmljYWxseSAgZmFtaWxpYXIgd2l0aCBuY3Vyc2VzLiBJZiB5b3UgYXJlIGFscmVhZHkgYW4gZXhwZXJpZW5jZWQKKyAgIGN1cnNlcyAgcHJvZ3JhbW1lciwgeW91IHNob3VsZCBuZXZlcnRoZWxlc3MgcmVhZCB0aGUgc2VjdGlvbnMgb24gTW91c2UKKyAgIEludGVyZmFjaW5nLCAgRGVidWdnaW5nLCBDb21wYXRpYmlsaXR5IHdpdGggT2xkZXIgVmVyc2lvbnMsIGFuZCBIaW50cywKKyAgIFRpcHMsICBhbmQgIFRyaWNrcy4gIFRoZXNlICB3aWxsICBicmluZyB5b3UgdXAgdG8gc3BlZWQgb24gdGhlIHNwZWNpYWwKKyAgIGZlYXR1cmVzICBhbmQgIHF1aXJrcyBvZiB0aGUgbmN1cnNlcyBpbXBsZW1lbnRhdGlvbi4gSWYgeW91IGFyZSBub3Qgc28KKyAgIGV4cGVyaWVuY2VkLCBrZWVwIHJlYWRpbmcuCisKKyAgIFRoZSAgY3Vyc2VzICBwYWNrYWdlICBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSBmb3IgdGVybWluYWwtaW5kZXBlbmRlbnQKKyAgIHNjcmVlbi1wYWludGluZyAgYW5kICBpbnB1dC1ldmVudCBoYW5kbGluZyB3aGljaCBwcmVzZW50cyBhIGhpZ2ggbGV2ZWwKKyAgIHNjcmVlbiAgbW9kZWwgIHRvICB0aGUgcHJvZ3JhbW1lciwgaGlkaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gdGVybWluYWwKKyAgIHR5cGVzICBhbmQgZG9pbmcgYXV0b21hdGljIG9wdGltaXphdGlvbiBvZiBvdXRwdXQgdG8gY2hhbmdlIG9uZSBzY3JlZW4KKyAgIGZ1bGwgIG9mICB0ZXh0IGludG8gYW5vdGhlci4gQ3Vyc2VzIHVzZXMgdGVybWluZm8sIHdoaWNoIGlzIGEgZGF0YWJhc2UKKyAgIGZvcm1hdCAgdGhhdCAgY2FuICBkZXNjcmliZSB0aGUgY2FwYWJpbGl0aWVzIG9mIHRob3VzYW5kcyBvZiBkaWZmZXJlbnQKKyAgIHRlcm1pbmFscy4KKworICAgVGhlICBjdXJzZXMgIEFQSSAgbWF5ICBzZWVtICBzb21ldGhpbmcgb2YgYW4gYXJjaGFpc20gb24gVU5JWCBkZXNrdG9wcworICAgaW5jcmVhc2luZ2x5ICBkb21pbmF0ZWQgIGJ5ICBYLCAgTW90aWYsIGFuZCBUY2wvVGsuIE5ldmVydGhlbGVzcywgVU5JWAorICAgc3RpbGwgIHN1cHBvcnRzICB0dHkgbGluZXMgYW5kIFggc3VwcG9ydHMgeHRlcm0oMSk7IHRoZSBjdXJzZXMgQVBJIGhhcworICAgdGhlIGFkdmFudGFnZSBvZiAoYSkgYmFjay1wb3J0YWJpbGl0eSB0byBjaGFyYWN0ZXItY2VsbCB0ZXJtaW5hbHMsIGFuZAorICAgKGIpICBzaW1wbGljaXR5LiAgRm9yICBhbiBhcHBsaWNhdGlvbiB0aGF0IGRvZXMgbm90IHJlcXVpcmUgYml0LW1hcHBlZAorICAgZ3JhcGhpY3MgIGFuZCBtdWx0aXBsZSBmb250cywgYW4gaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIHVzaW5nIGN1cnNlcworICAgd2lsbCAgdHlwaWNhbGx5ICBiZSAgYSAgZ3JlYXQgZGVhbCBzaW1wbGVyIGFuZCBsZXNzIGV4cGVuc2l2ZSB0aGFuIG9uZQorICAgdXNpbmcgYW4gWCB0b29sa2l0LgorCitBIEJyaWVmIEhpc3Rvcnkgb2YgQ3Vyc2VzCisKKyAgIEhpc3RvcmljYWxseSwgdGhlIGZpcnN0IGFuY2VzdG9yIG9mIGN1cnNlcyB3YXMgdGhlIHJvdXRpbmVzIHdyaXR0ZW4gdG8KKyAgIHByb3ZpZGUgICBzY3JlZW4taGFuZGxpbmcgICBmb3IgICB0aGUgICBnYW1lICByb2d1ZTsgIHRoZXNlICB1c2VkICB0aGUKKyAgIGFscmVhZHktZXhpc3RpbmcgIHRlcm1jYXAgIGRhdGFiYXNlICBmYWNpbGl0eSAgZm9yIGRlc2NyaWJpbmcgdGVybWluYWwKKyAgIGNhcGFiaWxpdGllcy4gVGhlc2Ugcm91dGluZXMgd2VyZSBhYnN0cmFjdGVkIGludG8gYSBkb2N1bWVudGVkIGxpYnJhcnkKKyAgIGFuZCBmaXJzdCByZWxlYXNlZCB3aXRoIHRoZSBlYXJseSBCU0QgVU5JWCB2ZXJzaW9ucy4KKworICAgU3lzdGVtICBJSUkgVU5JWCBmcm9tIEJlbGwgTGFicyBmZWF0dXJlZCBhIHJld3JpdHRlbiBhbmQgbXVjaC1pbXByb3ZlZAorICAgY3Vyc2VzICBsaWJyYXJ5LiAgSXQgaW50cm9kdWNlZCB0aGUgdGVybWluZm8gZm9ybWF0LiBUZXJtaW5mbyBpcyBiYXNlZAorICAgb24gIEJlcmtlbGV5J3MgdGVybWNhcCBkYXRhYmFzZSwgYnV0IGNvbnRhaW5zIGEgbnVtYmVyIG9mIGltcHJvdmVtZW50cworICAgYW5kICBleHRlbnNpb25zLiAgUGFyYW1ldGVyaXplZCAgY2FwYWJpbGl0aWVzIHN0cmluZ3Mgd2VyZSBpbnRyb2R1Y2VkLAorICAgbWFraW5nICBpdCAgcG9zc2libGUgdG8gZGVzY3JpYmUgbXVsdGlwbGUgdmlkZW8gYXR0cmlidXRlcywgYW5kIGNvbG9ycworICAgYW5kICB0byAgaGFuZGxlIGZhciBtb3JlIHVudXN1YWwgdGVybWluYWxzIHRoYW4gcG9zc2libGUgd2l0aCB0ZXJtY2FwLgorICAgSW4gIHRoZSAgbGF0ZXIgIEFUJlQgIFN5c3RlbSAgViAgcmVsZWFzZXMsICBjdXJzZXMgZXZvbHZlZCB0byB1c2UgbW9yZQorICAgZmFjaWxpdGllcyBhbmQgb2ZmZXIgbW9yZSBjYXBhYmlsaXRpZXMsIGdvaW5nIGZhciBiZXlvbmQgQlNEIGN1cnNlcyBpbgorICAgcG93ZXIgYW5kIGZsZXhpYmlsaXR5LgorCitTY29wZSBvZiBUaGlzIERvY3VtZW50CisKKyAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIG5jdXJzZXMsIGEgZnJlZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3lzdGVtIFYKKyAgIGN1cnNlcyAgQVBJICB3aXRoICBzb21lICBjbGVhcmx5ICBtYXJrZWQgIGV4dGVuc2lvbnMuICBJdCBpbmNsdWRlcyB0aGUKKyAgIGZvbGxvd2luZyBTeXN0ZW0gViBjdXJzZXMgZmVhdHVyZXM6CisgICAgICogU3VwcG9ydCAgZm9yICBtdWx0aXBsZSAgc2NyZWVuICBoaWdobGlnaHRzICAoQlNEIGN1cnNlcyBjb3VsZCBvbmx5CisgICAgICAgaGFuZGxlIG9uZSBgc3RhbmRvdXQnIGhpZ2hsaWdodCwgdXN1YWxseSByZXZlcnNlLXZpZGVvKS4KKyAgICAgKiBTdXBwb3J0IGZvciBsaW5lLSBhbmQgYm94LWRyYXdpbmcgdXNpbmcgZm9ybXMgY2hhcmFjdGVycy4KKyAgICAgKiBSZWNvZ25pdGlvbiBvZiBmdW5jdGlvbiBrZXlzIG9uIGlucHV0LgorICAgICAqIENvbG9yIHN1cHBvcnQuCisgICAgICogU3VwcG9ydCAgZm9yIHBhZHMgKHdpbmRvd3Mgb2YgbGFyZ2VyIHRoYW4gc2NyZWVuIHNpemUgb24gd2hpY2ggdGhlCisgICAgICAgc2NyZWVuIG9yIGEgc3Vid2luZG93IGRlZmluZXMgYSB2aWV3cG9ydCkuCisKKyAgIEFsc28sICB0aGlzICBwYWNrYWdlICBtYWtlcyAgdXNlICBvZiAgdGhlICBpbnNlcnQgIGFuZCBkZWxldGUgbGluZSBhbmQKKyAgIGNoYXJhY3RlciAgZmVhdHVyZXMgIG9mICB0ZXJtaW5hbHMgIHNvIGVxdWlwcGVkLCBhbmQgZGV0ZXJtaW5lcyBob3cgdG8KKyAgIG9wdGltYWxseSAgdXNlICB0aGVzZSAgZmVhdHVyZXMgIHdpdGggIG5vIGhlbHAgZnJvbSB0aGUgcHJvZ3JhbW1lci4gSXQKKyAgIGFsbG93cyAgYXJiaXRyYXJ5ICBjb21iaW5hdGlvbnMgIG9mICB2aWRlbyBhdHRyaWJ1dGVzIHRvIGJlIGRpc3BsYXllZCwKKyAgIGV2ZW4gIG9uICB0ZXJtaW5hbHMgdGhhdCBsZWF2ZSBgYG1hZ2ljIGNvb2tpZXMnJyBvbiB0aGUgc2NyZWVuIHRvIG1hcmsKKyAgIGNoYW5nZXMgaW4gYXR0cmlidXRlcy4KKworICAgVGhlICBuY3Vyc2VzICBwYWNrYWdlICBjYW4gIGFsc28gIGNhcHR1cmUgYW5kIHVzZSBldmVudCByZXBvcnRzIGZyb20gYQorICAgbW91c2UgaW4gc29tZSBlbnZpcm9ubWVudHMgKG5vdGFibHksIHh0ZXJtIHVuZGVyIHRoZSBYIHdpbmRvdyBzeXN0ZW0pLgorICAgVGhpcyBkb2N1bWVudCBpbmNsdWRlcyB0aXBzIGZvciB1c2luZyB0aGUgbW91c2UuCisKKyAgIFRoZSAgbmN1cnNlcyAgcGFja2FnZSAgd2FzICBvcmlnaW5hdGVkICBieSAgUGF2ZWwgQ3VydGlzLiBUaGUgb3JpZ2luYWwKKyAgIG1haW50YWluZXIgIG9mICB0aGlzICBwYWNrYWdlIGlzIFpleWQgQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPi4KKyAgIEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiB3cm90ZSBtYW55IG9mIHRoZSBuZXcgZmVhdHVyZXMKKyAgIGluICB2ZXJzaW9ucyAgYWZ0ZXIgMS44LjEgYW5kIHdyb3RlIG1vc3Qgb2YgdGhpcyBpbnRyb2R1Y3Rpb24uIEp1ZXJnZW4KKyAgIFBmZWlmZXIgIHdyb3RlICBhbGwgIG9mICB0aGUgIG1lbnUgYW5kIGZvcm1zIGNvZGUgYXMgd2VsbCBhcyB0aGUgQWRhOTUKKyAgIGJpbmRpbmcuICBPbmdvaW5nICB3b3JrICBpcyAgYmVpbmcgZG9uZSBieSBUaG9tYXMgRGlja2V5IChtYWludGFpbmVyKS4KKyAgIENvbnRhY3QgdGhlIGN1cnJlbnQgbWFpbnRhaW5lcnMgYXQgYnVnLW5jdXJzZXNAZ251Lm9yZy4KKworICAgVGhpcyAgZG9jdW1lbnQgIGFsc28gZGVzY3JpYmVzIHRoZSBwYW5lbHMgZXh0ZW5zaW9uIGxpYnJhcnksIHNpbWlsYXJseQorICAgbW9kZWxlZCAgb24gIHRoZSAgU1ZyNCAgcGFuZWxzICBmYWNpbGl0eS4gIFRoaXMgIGxpYnJhcnkgYWxsb3dzIHlvdSB0bworICAgYXNzb2NpYXRlICBiYWNraW5nICBzdG9yZSAgd2l0aCBlYWNoIG9mIGEgc3RhY2sgb3IgZGVjayBvZiBvdmVybGFwcGluZworICAgd2luZG93cywgIGFuZCAgcHJvdmlkZXMgIG9wZXJhdGlvbnMgIGZvciAgbW92aW5nIHdpbmRvd3MgYXJvdW5kIGluIHRoZQorICAgc3RhY2sgdGhhdCBjaGFuZ2UgdGhlaXIgdmlzaWJpbGl0eSBpbiB0aGUgbmF0dXJhbCB3YXkgKGhhbmRsaW5nIHdpbmRvdworICAgb3ZlcmxhcHMpLgorCisgICBGaW5hbGx5LCAgdGhpcyAgZG9jdW1lbnQgIGRlc2NyaWJlcyAgaW4gIGRldGFpbCAgdGhlICBtZW51cyAgYW5kIGZvcm1zCisgICBleHRlbnNpb24gIGxpYnJhcmllcywgIGFsc28gIGNsb25lZCAgZnJvbSBTeXN0ZW0gViwgd2hpY2ggc3VwcG9ydCBlYXN5CisgICBjb25zdHJ1Y3Rpb24gYW5kIHNlcXVlbmNlcyBvZiBtZW51cyBhbmQgZmlsbC1pbiBmb3Jtcy4KKworVGVybWlub2xvZ3kKKworICAgSW4gIHRoaXMgIGRvY3VtZW50LCAgdGhlIGZvbGxvd2luZyB0ZXJtaW5vbG9neSBpcyB1c2VkIHdpdGggcmVhc29uYWJsZQorICAgY29uc2lzdGVuY3k6CisKKyAgIHdpbmRvdworICAgICAgICAgIEEgIGRhdGEgIHN0cnVjdHVyZSAgZGVzY3JpYmluZyAgYSAgc3ViLXJlY3RhbmdsZSAgb2YgdGhlIHNjcmVlbgorICAgICAgICAgIChwb3NzaWJseSAgdGhlICBlbnRpcmUgIHNjcmVlbikuICBZb3UgIGNhbiB3cml0ZSB0byBhIHdpbmRvdyBhcworICAgICAgICAgIHRob3VnaCAgaXQgIHdlcmUgYSBtaW5pYXR1cmUgc2NyZWVuLCBzY3JvbGxpbmcgaW5kZXBlbmRlbnRseSBvZgorICAgICAgICAgIG90aGVyIHdpbmRvd3Mgb24gdGhlIHBoeXNpY2FsIHNjcmVlbi4KKworICAgc2NyZWVucworICAgICAgICAgIEEgIHN1YnNldCBvZiB3aW5kb3dzIHdoaWNoIGFyZSBhcyBsYXJnZSBhcyB0aGUgdGVybWluYWwgc2NyZWVuLAorICAgICAgICAgIGkuZS4sICB0aGV5ICBzdGFydCAgYXQgdGhlIHVwcGVyIGxlZnQgaGFuZCBjb3JuZXIgYW5kIGVuY29tcGFzcworICAgICAgICAgIHRoZSAgIGxvd2VyICByaWdodCAgaGFuZCAgY29ybmVyLiAgT25lICBvZiAgdGhlc2UsICBzdGRzY3IsICBpcworICAgICAgICAgIGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgZm9yIHRoZSBwcm9ncmFtbWVyLgorCisgICB0ZXJtaW5hbCBzY3JlZW4KKyAgICAgICAgICBUaGUgcGFja2FnZSdzIGlkZWEgb2Ygd2hhdCB0aGUgdGVybWluYWwgZGlzcGxheSBjdXJyZW50bHkgbG9va3MKKyAgICAgICAgICBsaWtlLCBpLmUuLCB3aGF0IHRoZSB1c2VyIHNlZXMgbm93LiBUaGlzIGlzIGEgc3BlY2lhbCBzY3JlZW4uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBDdXJzZXMgTGlicmFyeQorCitBbiBPdmVydmlldyBvZiBDdXJzZXMKKworICBDb21waWxpbmcgUHJvZ3JhbXMgdXNpbmcgQ3Vyc2VzCisKKyAgIEluIG9yZGVyIHRvIHVzZSB0aGUgbGlicmFyeSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgY2VydGFpbiB0eXBlcyBhbmQKKyAgIHZhcmlhYmxlcyBkZWZpbmVkLiBUaGVyZWZvcmUsIHRoZSBwcm9ncmFtbWVyIG11c3QgaGF2ZSBhIGxpbmU6CisgICAgICAgICAgI2luY2x1ZGUgPGN1cnNlcy5oPgorCisgICBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHNvdXJjZS4gVGhlIHNjcmVlbiBwYWNrYWdlIHVzZXMgdGhlIFN0YW5kYXJkCisgICBJL08gICBsaWJyYXJ5LCAgc28gIDxjdXJzZXMuaD4gIGluY2x1ZGVzICA8c3RkaW8uaD4uICA8Y3Vyc2VzLmg+ICBhbHNvCisgICBpbmNsdWRlcyAgPHRlcm1pb3MuaD4sICA8dGVybWlvLmg+LCAgb3IgIDxzZ3R0eS5oPiAgZGVwZW5kaW5nICBvbiB5b3VyCisgICBzeXN0ZW0uICBJdCBpcyByZWR1bmRhbnQgKGJ1dCBoYXJtbGVzcykgZm9yIHRoZSBwcm9ncmFtbWVyIHRvIGRvIHRoZXNlCisgICBpbmNsdWRlcywgIHRvby4gIEluICBsaW5raW5nIHdpdGggY3Vyc2VzIHlvdSBuZWVkIHRvIGhhdmUgLWxuY3Vyc2VzIGluCisgICB5b3VyICBMREZMQUdTICBvciAgb24gdGhlIGNvbW1hbmQgbGluZS4gVGhlcmUgaXMgbm8gbmVlZCBmb3IgYW55IG90aGVyCisgICBsaWJyYXJpZXMuCisKKyAgVXBkYXRpbmcgdGhlIFNjcmVlbgorCisgICBJbiAgb3JkZXIgIHRvICB1cGRhdGUgIHRoZSAgc2NyZWVuICBvcHRpbWFsbHksIGl0IGlzIG5lY2Vzc2FyeSBmb3IgdGhlCisgICByb3V0aW5lcyAgdG8gIGtub3cgIHdoYXQgIHRoZSBzY3JlZW4gY3VycmVudGx5IGxvb2tzIGxpa2UgYW5kIHdoYXQgdGhlCisgICBwcm9ncmFtbWVyICB3YW50cyAgaXQgdG8gbG9vayBsaWtlIG5leHQuIEZvciB0aGlzIHB1cnBvc2UsIGEgZGF0YSB0eXBlCisgICAoc3RydWN0dXJlKSAgbmFtZWQgV0lORE9XIGlzIGRlZmluZWQgd2hpY2ggZGVzY3JpYmVzIGEgd2luZG93IGltYWdlIHRvCisgICB0aGUgIHJvdXRpbmVzLCAgaW5jbHVkaW5nIGl0cyBzdGFydGluZyBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuICh0aGUgKHksCisgICB4KSAgY29vcmRpbmF0ZXMgIG9mICB0aGUgIHVwcGVyIGxlZnQgaGFuZCBjb3JuZXIpIGFuZCBpdHMgc2l6ZS4gT25lIG9mCisgICB0aGVzZSAgKGNhbGxlZCAgY3Vyc2NyLCAgZm9yIGN1cnJlbnQgc2NyZWVuKSBpcyBhIHNjcmVlbiBpbWFnZSBvZiB3aGF0CisgICB0aGUgIHRlcm1pbmFsIGN1cnJlbnRseSBsb29rcyBsaWtlLiBBbm90aGVyIHNjcmVlbiAoY2FsbGVkIHN0ZHNjciwgZm9yCisgICBzdGFuZGFyZCBzY3JlZW4pIGlzIHByb3ZpZGVkIGJ5IGRlZmF1bHQgdG8gbWFrZSBjaGFuZ2VzIG9uLgorCisgICBBICB3aW5kb3cgaXMgYSBwdXJlbHkgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uIEl0IGlzIHVzZWQgdG8gYnVpbGQgYW5kCisgICBzdG9yZSAgYSBwb3RlbnRpYWwgaW1hZ2Ugb2YgYSBwb3J0aW9uIG9mIHRoZSB0ZXJtaW5hbC4gSXQgZG9lc24ndCBiZWFyCisgICBhbnkgIG5lY2Vzc2FyeSByZWxhdGlvbiB0byB3aGF0IGlzIHJlYWxseSBvbiB0aGUgdGVybWluYWwgc2NyZWVuOyBpdCdzCisgICBtb3JlIGxpa2UgYSBzY3JhdGNocGFkIG9yIHdyaXRlIGJ1ZmZlci4KKworICAgVG8gIG1ha2UgIHRoZSAgc2VjdGlvbiAgb2YgIHBoeXNpY2FsICBzY3JlZW4gY29ycmVzcG9uZGluZyB0byBhIHdpbmRvdworICAgcmVmbGVjdCAgdGhlICBjb250ZW50cyAgb2YgdGhlIHdpbmRvdyBzdHJ1Y3R1cmUsIHRoZSByb3V0aW5lIHJlZnJlc2goKQorICAgKG9yIHdyZWZyZXNoKCkgaWYgdGhlIHdpbmRvdyBpcyBub3Qgc3Rkc2NyKSBpcyBjYWxsZWQuCisKKyAgIEEgIGdpdmVuIHBoeXNpY2FsIHNjcmVlbiBzZWN0aW9uIG1heSBiZSB3aXRoaW4gdGhlIHNjb3BlIG9mIGFueSBudW1iZXIKKyAgIG9mICBvdmVybGFwcGluZyAgd2luZG93cy4gIEFsc28sIGNoYW5nZXMgY2FuIGJlIG1hZGUgdG8gd2luZG93cyBpbiBhbnkKKyAgIG9yZGVyLCAgd2l0aG91dCAgcmVnYXJkICB0byAgbW90aW9uICBlZmZpY2llbmN5LiAgVGhlbiwgIGF0ICB3aWxsLCB0aGUKKyAgIHByb2dyYW1tZXIgY2FuIGVmZmVjdGl2ZWx5IHNheSBgYG1ha2UgaXQgbG9vayBsaWtlIHRoaXMsJycgYW5kIGxldCB0aGUKKyAgIHBhY2thZ2UgaW1wbGVtZW50YXRpb24gZGV0ZXJtaW5lIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcmVwYWludCB0aGUKKyAgIHNjcmVlbi4KKworICBTdGFuZGFyZCBXaW5kb3dzIGFuZCBGdW5jdGlvbiBOYW1pbmcgQ29udmVudGlvbnMKKworICAgQXMgIGhpbnRlZCAgYWJvdmUsICB0aGUgIHJvdXRpbmVzIGNhbiB1c2Ugc2V2ZXJhbCB3aW5kb3dzLCBidXQgdHdvIGFyZQorICAgYXV0b21hdGljYWxseSBnaXZlbjogY3Vyc2NyLCB3aGljaCBrbm93cyB3aGF0IHRoZSB0ZXJtaW5hbCBsb29rcyBsaWtlLAorICAgYW5kICBzdGRzY3IsICB3aGljaCAgaXMgd2hhdCB0aGUgcHJvZ3JhbW1lciB3YW50cyB0aGUgdGVybWluYWwgdG8gbG9vaworICAgbGlrZSAgbmV4dC4gIFRoZSAgdXNlciAgc2hvdWxkICBuZXZlciBhY3R1YWxseSBhY2Nlc3MgY3Vyc2NyIGRpcmVjdGx5LgorICAgQ2hhbmdlcyAgc2hvdWxkICBiZSAgbWFkZSAgdG8gIHRocm91Z2ggIHRoZSAgQVBJLCBhbmQgdGhlbiB0aGUgcm91dGluZQorICAgcmVmcmVzaCgpIChvciB3cmVmcmVzaCgpKSBjYWxsZWQuCisKKyAgIE1hbnkgIGZ1bmN0aW9ucyAgYXJlICBkZWZpbmVkICB0byAgdXNlIHN0ZHNjciBhcyBhIGRlZmF1bHQgc2NyZWVuLiBGb3IKKyAgIGV4YW1wbGUsICB0byAgYWRkICBhICBjaGFyYWN0ZXIgIHRvIHN0ZHNjciwgb25lIGNhbGxzIGFkZGNoKCkgd2l0aCB0aGUKKyAgIGRlc2lyZWQgY2hhcmFjdGVyIGFzIGFyZ3VtZW50LiBUbyB3cml0ZSB0byBhIGRpZmZlcmVudCB3aW5kb3cuIHVzZSB0aGUKKyAgIHJvdXRpbmUgIHdhZGRjaCgpICAoZm9yICBgdydpbmRvdy1zcGVjaWZpYyAgYWRkY2goKSkgaXMgcHJvdmlkZWQuIFRoaXMKKyAgIGNvbnZlbnRpb24gb2YgcHJlcGVuZGluZyBmdW5jdGlvbiBuYW1lcyB3aXRoIGEgYHcnIHdoZW4gdGhleSBhcmUgdG8gYmUKKyAgIGFwcGxpZWQgIHRvIHNwZWNpZmljIHdpbmRvd3MgaXMgY29uc2lzdGVudC4gVGhlIG9ubHkgcm91dGluZXMgd2hpY2ggZG8KKyAgIG5vdCBmb2xsb3cgaXQgYXJlIHRob3NlIGZvciB3aGljaCBhIHdpbmRvdyBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQuCisKKyAgIEluICBvcmRlciAgdG8gIG1vdmUgIHRoZSAgY3VycmVudCAoeSwgeCkgY29vcmRpbmF0ZXMgZnJvbSBvbmUgcG9pbnQgdG8KKyAgIGFub3RoZXIsICB0aGUgcm91dGluZXMgbW92ZSgpIGFuZCB3bW92ZSgpIGFyZSBwcm92aWRlZC4gSG93ZXZlciwgaXQgaXMKKyAgIG9mdGVuICBkZXNpcmFibGUgdG8gZmlyc3QgbW92ZSBhbmQgdGhlbiBwZXJmb3JtIHNvbWUgSS9PIG9wZXJhdGlvbi4gSW4KKyAgIG9yZGVyICB0byAgYXZvaWQgIGNsdW1zaW5lc3MsIG1vc3QgSS9PIHJvdXRpbmVzIGNhbiBiZSBwcmVjZWRlZCBieSB0aGUKKyAgIHByZWZpeCAgJ212JyAgYW5kICB0aGUgIGRlc2lyZWQgICh5LCAgeCkgIGNvb3JkaW5hdGVzIHByZXBlbmRlZCB0byB0aGUKKyAgIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uIEZvciBleGFtcGxlLCB0aGUgY2FsbHMKKyAgICAgICAgICBtb3ZlKHksIHgpOworICAgICAgICAgIGFkZGNoKGNoKTsKKworICAgY2FuIGJlIHJlcGxhY2VkIGJ5CisgICAgICAgICAgbXZhZGRjaCh5LCB4LCBjaCk7CisKKyAgIGFuZAorICAgICAgICAgIHdtb3ZlKHdpbiwgeSwgeCk7CisgICAgICAgICAgd2FkZGNoKHdpbiwgY2gpOworCisgICBjYW4gYmUgcmVwbGFjZWQgYnkKKyAgICAgICAgICBtdndhZGRjaCh3aW4sIHksIHgsIGNoKTsKKworICAgTm90ZSAgdGhhdCB0aGUgd2luZG93IGRlc2NyaXB0aW9uIHBvaW50ZXIgKHdpbikgY29tZXMgYmVmb3JlIHRoZSBhZGRlZAorICAgKHksICB4KSAgY29vcmRpbmF0ZXMuICBJZiAgYSBmdW5jdGlvbiByZXF1aXJlcyBhIHdpbmRvdyBwb2ludGVyLCBpdCBpcworICAgYWx3YXlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgcGFzc2VkLgorCisgIFZhcmlhYmxlcworCisgICBUaGUgIGN1cnNlcyAgbGlicmFyeSAgc2V0cyAgc29tZSAgdmFyaWFibGVzICBkZXNjcmliaW5nICB0aGUgIHRlcm1pbmFsCisgICBjYXBhYmlsaXRpZXMuCisgICAgICB0eXBlICAgbmFtZSAgICAgIGRlc2NyaXB0aW9uCisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIGludCAgICBMSU5FUyAgICAgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSB0ZXJtaW5hbAorICAgICAgaW50ICAgIENPTFMgICAgICBudW1iZXIgb2YgY29sdW1ucyBvbiB0aGUgdGVybWluYWwKKworICAgVGhlICBjdXJzZXMuaCAgYWxzbyAgaW50cm9kdWNlcyAgc29tZSAgI2RlZmluZSAgY29uc3RhbnRzIGFuZCB0eXBlcyBvZgorICAgZ2VuZXJhbCB1c2VmdWxuZXNzOgorCisgICBib29sCisgICAgICAgICAgYm9vbGVhbiB0eXBlLCBhY3R1YWxseSBhIGBjaGFyJyAoZS5nLiwgYm9vbCBkb25laXQ7KQorCisgICBUUlVFCisgICAgICAgICAgYm9vbGVhbiBgdHJ1ZScgZmxhZyAoMSkuCisKKyAgIEZBTFNFCisgICAgICAgICAgYm9vbGVhbiBgZmFsc2UnIGZsYWcgKDApLgorCisgICBFUlIKKyAgICAgICAgICBlcnJvciBmbGFnIHJldHVybmVkIGJ5IHJvdXRpbmVzIG9uIGEgZmFpbHVyZSAoLTEpLgorCisgICBPSworICAgICAgICAgIGVycm9yIGZsYWcgcmV0dXJuZWQgYnkgcm91dGluZXMgd2hlbiB0aGluZ3MgZ28gcmlnaHQuCisKK1VzaW5nIHRoZSBMaWJyYXJ5CisKKyAgIE5vdyAgd2UgIGRlc2NyaWJlICBob3cgIHRvICBhY3R1YWxseSB1c2UgdGhlIHNjcmVlbiBwYWNrYWdlLiBJbiBpdCwgd2UKKyAgIGFzc3VtZSAgYWxsICB1cGRhdGluZywgIHJlYWRpbmcsICBldGMuICBpcyAgYXBwbGllZCAgdG8gIHN0ZHNjci4gVGhlc2UKKyAgIGluc3RydWN0aW9ucyAgd2lsbCAgd29yayAgb24gIGFueSAgd2luZG93LCAgcHJvdmlkaW5nICB5b3UgIGNoYW5nZSB0aGUKKyAgIGZ1bmN0aW9uIG5hbWVzIGFuZCBwYXJhbWV0ZXJzIGFzIG1lbnRpb25lZCBhYm92ZS4KKworICAgSGVyZSBpcyBhIHNhbXBsZSBwcm9ncmFtIHRvIG1vdGl2YXRlIHRoZSBkaXNjdXNzaW9uOgorI2luY2x1ZGUgPGN1cnNlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitzdGF0aWMgdm9pZCBmaW5pc2goaW50IHNpZyk7CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBudW0gPSAwOworCisgICAgLyogaW5pdGlhbGl6ZSB5b3VyIG5vbi1jdXJzZXMgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUgKi8KKworICAgICh2b2lkKSBzaWduYWwoU0lHSU5ULCBmaW5pc2gpOyAgICAgIC8qIGFycmFuZ2UgaW50ZXJydXB0cyB0byB0ZXJtaW5hdGUgKi8KKworICAgICh2b2lkKSBpbml0c2NyKCk7ICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgY3Vyc2VzIGxpYnJhcnkgKi8KKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsgIC8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIG5vbmwoKTsgICAgICAgICAvKiB0ZWxsIGN1cnNlcyBub3QgdG8gZG8gTkwtPkNSL05MIG9uIG91dHB1dCAqLworICAgICh2b2lkKSBjYnJlYWsoKTsgICAgICAgLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBlY2hvKCk7ICAgICAgICAgLyogZWNobyBpbnB1dCAtIGluIGNvbG9yICovCisKKyAgICBpZiAoaGFzX2NvbG9ycygpKQorICAgIHsKKyAgICAgICAgc3RhcnRfY29sb3IoKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBTaW1wbGUgY29sb3IgYXNzaWdubWVudCwgb2Z0ZW4gYWxsIHdlIG5lZWQuICBDb2xvciBwYWlyIDAgY2Fubm90CisgICAgICAgICAqIGJlIHJlZGVmaW5lZC4gIFRoaXMgZXhhbXBsZSB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgY29sb3IKKyAgICAgICAgICogcGFpciBhcyBmb3IgdGhlIGZvcmVncm91bmQgY29sb3IsIHRob3VnaCBvZiBjb3Vyc2UgdGhhdCBpcyBub3QKKyAgICAgICAgICogbmVjZXNzYXJ5OgorICAgICAgICAgKi8KKyAgICAgICAgaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgICAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDIsIENPTE9SX0dSRUVOLCAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDMsIENPTE9SX1lFTExPVywgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDQsIENPTE9SX0JMVUUsICAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDUsIENPTE9SX0NZQU4sICAgIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDYsIENPTE9SX01BR0VOVEEsIENPTE9SX0JMQUNLKTsKKyAgICAgICAgaW5pdF9wYWlyKDcsIENPTE9SX1dISVRFLCAgIENPTE9SX0JMQUNLKTsKKyAgICB9CisKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgICAgaW50IGMgPSBnZXRjaCgpOyAgICAgLyogcmVmcmVzaCwgYWNjZXB0IHNpbmdsZSBrZXlzdHJva2Ugb2YgaW5wdXQgKi8KKyAgICAgICAgYXR0cnNldChDT0xPUl9QQUlSKG51bSAlIDgpKTsKKyAgICAgICAgbnVtKys7CisKKyAgICAgICAgLyogcHJvY2VzcyB0aGUgY29tbWFuZCBrZXlzdHJva2UgKi8KKyAgICB9CisKKyAgICBmaW5pc2goMCk7ICAgICAgICAgICAgICAgLyogd2UncmUgZG9uZSAqLworfQorCitzdGF0aWMgdm9pZCBmaW5pc2goaW50IHNpZykKK3sKKyAgICBlbmR3aW4oKTsKKworICAgIC8qIGRvIHlvdXIgbm9uLWN1cnNlcyB3cmFwdXAgaGVyZSAqLworCisgICAgZXhpdCgwKTsKK30KKworICBTdGFydGluZyB1cAorCisgICBJbiAgb3JkZXIgIHRvICB1c2UgIHRoZSAgc2NyZWVuICBwYWNrYWdlLCB0aGUgcm91dGluZXMgbXVzdCBrbm93IGFib3V0CisgICB0ZXJtaW5hbCAgY2hhcmFjdGVyaXN0aWNzLCBhbmQgdGhlIHNwYWNlIGZvciBjdXJzY3IgYW5kIHN0ZHNjciBtdXN0IGJlCisgICBhbGxvY2F0ZWQuICBUaGVzZSAgZnVuY3Rpb24gaW5pdHNjcigpIGRvZXMgYm90aCB0aGVzZSB0aGluZ3MuIFNpbmNlIGl0CisgICBtdXN0ICBhbGxvY2F0ZSAgc3BhY2UgIGZvciAgdGhlICB3aW5kb3dzLCAgaXQgY2FuIG92ZXJmbG93IG1lbW9yeSB3aGVuCisgICBhdHRlbXB0aW5nICB0byAgZG8gIHNvLiAgT24gdGhlIHJhcmUgb2NjYXNpb25zIHRoaXMgaGFwcGVucywgaW5pdHNjcigpCisgICB3aWxsICB0ZXJtaW5hdGUgIHRoZSAgcHJvZ3JhbSAgd2l0aCAgYW4gIGVycm9yIG1lc3NhZ2UuIGluaXRzY3IoKSBtdXN0CisgICBhbHdheXMgIGJlICBjYWxsZWQgYmVmb3JlIGFueSBvZiB0aGUgcm91dGluZXMgd2hpY2ggYWZmZWN0IHdpbmRvd3MgYXJlCisgICB1c2VkLiAgSWYgIGl0ICBpcyAgbm90LCAgdGhlICBwcm9ncmFtIHdpbGwgY29yZSBkdW1wIGFzIHNvb24gYXMgZWl0aGVyCisgICBjdXJzY3IgIG9yICBzdGRzY3IgYXJlIHJlZmVyZW5jZWQuIEhvd2V2ZXIsIGl0IGlzIHVzdWFsbHkgYmVzdCB0byB3YWl0CisgICB0byAgY2FsbCAgaXQgIHVudGlsICBhZnRlciAgeW91ICBhcmUgc3VyZSB5b3Ugd2lsbCBuZWVkIGl0LCBsaWtlIGFmdGVyCisgICBjaGVja2luZyAgZm9yICBzdGFydHVwICBlcnJvcnMuIFRlcm1pbmFsIHN0YXR1cyBjaGFuZ2luZyByb3V0aW5lcyBsaWtlCisgICBubCgpIGFuZCBjYnJlYWsoKSBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGluaXRzY3IoKS4KKworICAgT25jZSAgdGhlICBzY3JlZW4gd2luZG93cyBoYXZlIGJlZW4gYWxsb2NhdGVkLCB5b3UgY2FuIHNldCB0aGVtIHVwIGZvcgorICAgeW91ciAgcHJvZ3JhbS4gIElmICB5b3UgIHdhbnQgIHRvLCAgc2F5LCBhbGxvdyBhIHNjcmVlbiB0byBzY3JvbGwsIHVzZQorICAgc2Nyb2xsb2soKS4gIElmIHlvdSB3YW50IHRoZSBjdXJzb3IgdG8gYmUgbGVmdCBpbiBwbGFjZSBhZnRlciB0aGUgbGFzdAorICAgY2hhbmdlLCAgdXNlICBsZWF2ZW9rKCkuICBJZiAgdGhpcyBpc24ndCBkb25lLCByZWZyZXNoKCkgd2lsbCBtb3ZlIHRoZQorICAgY3Vyc29yIHRvIHRoZSB3aW5kb3cncyBjdXJyZW50ICh5LCB4KSBjb29yZGluYXRlcyBhZnRlciB1cGRhdGluZyBpdC4KKworICAgWW91ICBjYW4gIGNyZWF0ZSBuZXcgd2luZG93cyBvZiB5b3VyIG93biB1c2luZyB0aGUgZnVuY3Rpb25zIG5ld3dpbigpLAorICAgZGVyd2luKCksIGFuZCBzdWJ3aW4oKS4gVGhlIHJvdXRpbmUgZGVsd2luKCkgd2lsbCBhbGxvdyB5b3UgdG8gZ2V0IHJpZAorICAgb2YgIG9sZCB3aW5kb3dzLiBBbGwgdGhlIG9wdGlvbnMgZGVzY3JpYmVkIGFib3ZlIGNhbiBiZSBhcHBsaWVkIHRvIGFueQorICAgd2luZG93LgorCisgIE91dHB1dAorCisgICBOb3cgIHRoYXQgIHdlICBoYXZlIHNldCB0aGluZ3MgdXAsIHdlIHdpbGwgd2FudCB0byBhY3R1YWxseSB1cGRhdGUgdGhlCisgICB0ZXJtaW5hbC4gIFRoZSBiYXNpYyBmdW5jdGlvbnMgdXNlZCB0byBjaGFuZ2Ugd2hhdCB3aWxsIGdvIG9uIGEgd2luZG93CisgICBhcmUgYWRkY2goKSBhbmQgbW92ZSgpLiBhZGRjaCgpIGFkZHMgYSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnJlbnQgKHksIHgpCisgICBjb29yZGluYXRlcy4gbW92ZSgpIGNoYW5nZXMgdGhlIGN1cnJlbnQgKHksIHgpIGNvb3JkaW5hdGVzIHRvIHdoYXRldmVyCisgICB5b3Ugd2FudCB0aGVtIHRvIGJlLiBJdCByZXR1cm5zIEVSUiBpZiB5b3UgdHJ5IHRvIG1vdmUgb2ZmIHRoZSB3aW5kb3cuCisgICBBcyAgbWVudGlvbmVkIGFib3ZlLCB5b3UgY2FuIGNvbWJpbmUgdGhlIHR3byBpbnRvIG12YWRkY2goKSB0byBkbyBib3RoCisgICB0aGluZ3MgYXQgb25jZS4KKworICAgVGhlICBvdGhlciAgb3V0cHV0ICBmdW5jdGlvbnMsIHN1Y2ggYXMgYWRkc3RyKCkgYW5kIHByaW50dygpLCBhbGwgY2FsbAorICAgYWRkY2goKSB0byBhZGQgY2hhcmFjdGVycyB0byB0aGUgd2luZG93LgorCisgICBBZnRlciAgeW91ICBoYXZlICBwdXQgb24gdGhlIHdpbmRvdyB3aGF0IHlvdSB3YW50IHRoZXJlLCB3aGVuIHlvdSB3YW50CisgICB0aGUgIHBvcnRpb24gIG9mIHRoZSB0ZXJtaW5hbCBjb3ZlcmVkIGJ5IHRoZSB3aW5kb3cgdG8gYmUgbWFkZSB0byBsb29rCisgICBsaWtlICBpdCwgIHlvdSAgbXVzdCAgY2FsbCAgcmVmcmVzaCgpLiAgSW4gIG9yZGVyICB0byBvcHRpbWl6ZSBmaW5kaW5nCisgICBjaGFuZ2VzLCAgcmVmcmVzaCgpICBhc3N1bWVzICB0aGF0ICBhbnkgcGFydCBvZiB0aGUgd2luZG93IG5vdCBjaGFuZ2VkCisgICBzaW5jZSAgdGhlICBsYXN0ICByZWZyZXNoKCkgb2YgdGhhdCB3aW5kb3cgaGFzIG5vdCBiZWVuIGNoYW5nZWQgb24gdGhlCisgICB0ZXJtaW5hbCwgIGkuZS4sIHRoYXQgeW91IGhhdmUgbm90IHJlZnJlc2hlZCBhIHBvcnRpb24gb2YgdGhlIHRlcm1pbmFsCisgICB3aXRoICBhbiAgb3ZlcmxhcHBpbmcgIHdpbmRvdy4gIElmICB0aGlzICBpcyBub3QgdGhlIGNhc2UsIHRoZSByb3V0aW5lCisgICB0b3VjaHdpbigpIGlzIHByb3ZpZGVkIHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBlbnRpcmUgd2luZG93IGhhcyBiZWVuCisgICBjaGFuZ2VkLCAgdGh1cyAgbWFraW5nICByZWZyZXNoKCkgIGNoZWNrICB0aGUgIHdob2xlIHN1YnNlY3Rpb24gb2YgdGhlCisgICB0ZXJtaW5hbCBmb3IgY2hhbmdlcy4KKworICAgSWYgIHlvdSAgY2FsbCB3cmVmcmVzaCgpIHdpdGggY3Vyc2NyIGFzIGl0cyBhcmd1bWVudCwgaXQgd2lsbCBtYWtlIHRoZQorICAgc2NyZWVuICBsb29rICBsaWtlICBjdXJzY3IgIHRoaW5rcyAgaXQgIGxvb2tzIGxpa2UuIFRoaXMgaXMgdXNlZnVsIGZvcgorICAgaW1wbGVtZW50aW5nICBhICBjb21tYW5kICB3aGljaCB3b3VsZCByZWRyYXcgdGhlIHNjcmVlbiBpbiBjYXNlIGl0IGdldAorICAgbWVzc2VkIHVwLgorCisgIElucHV0CisKKyAgIFRoZSAgY29tcGxlbWVudGFyeSAgZnVuY3Rpb24gIHRvICBhZGRjaCgpIGlzIGdldGNoKCkgd2hpY2gsIGlmIGVjaG8gaXMKKyAgIHNldCwgd2lsbCBjYWxsIGFkZGNoKCkgdG8gZWNobyB0aGUgY2hhcmFjdGVyLiBTaW5jZSB0aGUgc2NyZWVuIHBhY2thZ2UKKyAgIG5lZWRzICB0byBrbm93IHdoYXQgaXMgb24gdGhlIHRlcm1pbmFsIGF0IGFsbCB0aW1lcywgaWYgY2hhcmFjdGVycyBhcmUKKyAgIHRvICBiZSAgZWNob2VkLCB0aGUgdHR5IG11c3QgYmUgaW4gcmF3IG9yIGNicmVhayBtb2RlLiBTaW5jZSBpbml0aWFsbHkKKyAgIHRoZSAgdGVybWluYWwgIGhhcyBlY2hvaW5nIGVuYWJsZWQgYW5kIGlzIGluIG9yZGluYXJ5IGBgY29va2VkJycgbW9kZSwKKyAgIG9uZSBvciB0aGUgb3RoZXIgaGFzIHRvIGNoYW5nZWQgYmVmb3JlIGNhbGxpbmcgZ2V0Y2goKTsgb3RoZXJ3aXNlLCB0aGUKKyAgIHByb2dyYW0ncyBvdXRwdXQgd2lsbCBiZSB1bnByZWRpY3RhYmxlLgorCisgICBXaGVuIHlvdSBuZWVkIHRvIGFjY2VwdCBsaW5lLW9yaWVudGVkIGlucHV0IGluIGEgd2luZG93LCB0aGUgZnVuY3Rpb25zCisgICB3Z2V0c3RyKCkgYW5kIGZyaWVuZHMgYXJlIGF2YWlsYWJsZS4gVGhlcmUgaXMgZXZlbiBhIHdzY2FudygpIGZ1bmN0aW9uCisgICB0aGF0ICBjYW4gIGRvICBzY2FuZigpKDMpLXN0eWxlICBtdWx0aS1maWVsZCAgcGFyc2luZyBvbiB3aW5kb3cgaW5wdXQuCisgICBUaGVzZSAgcHNldWRvLWxpbmUtb3JpZW50ZWQgIGZ1bmN0aW9ucyAgdHVybiAgb24gIGVjaG9pbmcgIHdoaWxlICB0aGV5CisgICBleGVjdXRlLgorCisgICBUaGUgIGV4YW1wbGUgIGNvZGUgIGFib3ZlIHVzZXMgdGhlIGNhbGwga2V5cGFkKHN0ZHNjciwgVFJVRSkgdG8gZW5hYmxlCisgICBzdXBwb3J0ICBmb3IgZnVuY3Rpb24ta2V5IG1hcHBpbmcuIFdpdGggdGhpcyBmZWF0dXJlLCB0aGUgZ2V0Y2goKSBjb2RlCisgICB3YXRjaGVzICB0aGUgIGlucHV0ICBzdHJlYW0gZm9yIGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvCisgICBhcnJvdyAgIGFuZCAgIGZ1bmN0aW9uICAga2V5cy4gICBUaGVzZSAgIHNlcXVlbmNlcyAgIGFyZSAgcmV0dXJuZWQgIGFzCisgICBwc2V1ZG8tY2hhcmFjdGVyIHZhbHVlcy4gVGhlICNkZWZpbmUgdmFsdWVzIHJldHVybmVkIGFyZSBsaXN0ZWQgaW4gdGhlCisgICBjdXJzZXMuaCBUaGUgbWFwcGluZyBmcm9tIHNlcXVlbmNlcyB0byAjZGVmaW5lIHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5CisgICBrZXlfIGNhcGFiaWxpdGllcyBpbiB0aGUgdGVybWluYWwncyB0ZXJtaW5mbyBlbnRyeS4KKworICBVc2luZyBGb3JtcyBDaGFyYWN0ZXJzCisKKyAgIFRoZSAgYWRkY2goKSAgZnVuY3Rpb24gKGFuZCBzb21lIG90aGVycywgaW5jbHVkaW5nIGJveCgpIGFuZCBib3JkZXIoKSkKKyAgIGNhbiBhY2NlcHQgc29tZSBwc2V1ZG8tY2hhcmFjdGVyIGFyZ3VtZW50cyB3aGljaCBhcmUgc3BlY2lhbGx5IGRlZmluZWQKKyAgIGJ5ICBuY3Vyc2VzLiAgVGhlc2UgIGFyZSAjZGVmaW5lIHZhbHVlcyBzZXQgdXAgaW4gdGhlIGN1cnNlcy5oIGhlYWRlcjsKKyAgIHNlZSB0aGVyZSBmb3IgYSBjb21wbGV0ZSBsaXN0IChsb29rIGZvciB0aGUgcHJlZml4IEFDU18pLgorCisgICBUaGUgIG1vc3QgIHVzZWZ1bCBvZiB0aGUgQUNTIGRlZmluZXMgYXJlIHRoZSBmb3Jtcy1kcmF3aW5nIGNoYXJhY3RlcnMuCisgICBZb3UgIGNhbiAgdXNlICB0aGVzZSB0byBkcmF3IGJveGVzIGFuZCBzaW1wbGUgZ3JhcGhzIG9uIHRoZSBzY3JlZW4uIElmCisgICB0aGUgIHRlcm1pbmFsIGRvZXMgbm90IGhhdmUgc3VjaCBjaGFyYWN0ZXJzLCBjdXJzZXMuaCB3aWxsIG1hcCB0aGVtIHRvCisgICBhIHJlY29nbml6YWJsZSAodGhvdWdoIHVnbHkpIHNldCBvZiBBU0NJSSBkZWZhdWx0cy4KKworICBDaGFyYWN0ZXIgQXR0cmlidXRlcyBhbmQgQ29sb3IKKworICAgVGhlICBuY3Vyc2VzICBwYWNrYWdlICBzdXBwb3J0cyAgc2NyZWVuIGhpZ2hsaWdodHMgaW5jbHVkaW5nIHN0YW5kb3V0LAorICAgcmV2ZXJzZS12aWRlbywgIHVuZGVybGluZSwgYW5kIGJsaW5rLiBJdCBhbHNvIHN1cHBvcnRzIGNvbG9yLCB3aGljaCBpcworICAgdHJlYXRlZCBhcyBhbm90aGVyIGtpbmQgb2YgaGlnaGxpZ2h0LgorCisgICBIaWdobGlnaHRzICAgYXJlICAgZW5jb2RlZCwgICBpbnRlcm5hbGx5LCAgIGFzICAgaGlnaCAgIGJpdHMgICBvZiAgdGhlCisgICBwc2V1ZG8tY2hhcmFjdGVyICB0eXBlICAoY2h0eXBlKSAgdGhhdCAgY3Vyc2VzLmggdXNlcyB0byByZXByZXNlbnQgdGhlCisgICBjb250ZW50cyBvZiBhIHNjcmVlbiBjZWxsLiBTZWUgdGhlIGN1cnNlcy5oIGhlYWRlciBmaWxlIGZvciBhIGNvbXBsZXRlCisgICBsaXN0IG9mIGhpZ2hsaWdodCBtYXNrIHZhbHVlcyAobG9vayBmb3IgdGhlIHByZWZpeCBBXykuCisKKyAgIFRoZXJlICBhcmUgdHdvIHdheXMgdG8gbWFrZSBoaWdobGlnaHRzLiBPbmUgaXMgdG8gbG9naWNhbC1vciB0aGUgdmFsdWUKKyAgIG9mICB0aGUgIGhpZ2hsaWdodHMgeW91IHdhbnQgaW50byB0aGUgY2hhcmFjdGVyIGFyZ3VtZW50IG9mIGFuIGFkZGNoKCkKKyAgIGNhbGwsIG9yIGFueSBvdGhlciBvdXRwdXQgY2FsbCB0aGF0IHRha2VzIGEgY2h0eXBlIGFyZ3VtZW50LgorCisgICBUaGUgb3RoZXIgaXMgdG8gc2V0IHRoZSBjdXJyZW50LWhpZ2hsaWdodCB2YWx1ZS4gVGhpcyBpcyBsb2dpY2FsLW9yJ2VkCisgICB3aXRoICBhbnkgIGhpZ2hsaWdodCAgeW91ICBzcGVjaWZ5IHRoZSBmaXJzdCB3YXkuIFlvdSBkbyB0aGlzIHdpdGggdGhlCisgICBmdW5jdGlvbnMgYXR0cm9uKCksIGF0dHJvZmYoKSwgYW5kIGF0dHJzZXQoKTsgc2VlIHRoZSBtYW51YWwgcGFnZXMgZm9yCisgICBkZXRhaWxzLiAgQ29sb3IgIGlzICBhIHNwZWNpYWwga2luZCBvZiBoaWdobGlnaHQuIFRoZSBwYWNrYWdlIGFjdHVhbGx5CisgICB0aGlua3MgIGluICB0ZXJtcyAgb2YgIGNvbG9yICBwYWlycywgIGNvbWJpbmF0aW9ucyAgb2YgIGZvcmVncm91bmQgYW5kCisgICBiYWNrZ3JvdW5kICBjb2xvcnMuICBUaGUgIHNhbXBsZSBjb2RlIGFib3ZlIHNldHMgdXAgZWlnaHQgY29sb3IgcGFpcnMsCisgICBhbGwgIG9mIHRoZSBndWFyYW50ZWVkLWF2YWlsYWJsZSBjb2xvcnMgb24gYmxhY2suIE5vdGUgdGhhdCBlYWNoIGNvbG9yCisgICBwYWlyICBpcywgaW4gZWZmZWN0LCBnaXZlbiB0aGUgbmFtZSBvZiBpdHMgZm9yZWdyb3VuZCBjb2xvci4gQW55IG90aGVyCisgICByYW5nZSAgb2YgIGVpZ2h0ICBub24tY29uZmxpY3RpbmcgIHZhbHVlcyAgY291bGQgaGF2ZSBiZWVuIHVzZWQgYXMgdGhlCisgICBmaXJzdCBhcmd1bWVudHMgb2YgdGhlIGluaXRfcGFpcigpIHZhbHVlcy4KKworICAgT25jZSB5b3UndmUgZG9uZSBhbiBpbml0X3BhaXIoKSB0aGF0IGNyZWF0ZXMgY29sb3ItcGFpciBOLCB5b3UgY2FuIHVzZQorICAgQ09MT1JfUEFJUihOKSAgYXMgIGEgIGhpZ2hsaWdodCAgdGhhdCAgaW52b2tlcyAgdGhhdCAgcGFydGljdWxhciBjb2xvcgorICAgY29tYmluYXRpb24uICBOb3RlICB0aGF0ICBDT0xPUl9QQUlSKE4pLCAgZm9yICBjb25zdGFudCBOLCBpcyBpdHNlbGYgYQorICAgY29tcGlsZS10aW1lIGNvbnN0YW50IGFuZCBjYW4gYmUgdXNlZCBpbiBpbml0aWFsaXplcnMuCisKKyAgTW91c2UgSW50ZXJmYWNpbmcKKworICAgVGhlIG5jdXJzZXMgbGlicmFyeSBhbHNvIHByb3ZpZGVzIGEgbW91c2UgaW50ZXJmYWNlLgorCisgICAgIE5PVEU6ICB0aGlzICBmYWNpbGl0eSAgaXMgIHNwZWNpZmljICB0byAgbmN1cnNlcywgaXQgaXMgbm90IHBhcnQgb2YKKyAgICAgZWl0aGVyICB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgbm9yIG9mIFN5c3RlbSBWIFJlbGVhc2UgNCwgbm9yIEJTRAorICAgICBjdXJzZXMuICBTeXN0ZW0gIFYgIFJlbGVhc2UgIDQgIGN1cnNlcyAgY29udGFpbnMgIGNvZGUgd2l0aCBzaW1pbGFyCisgICAgIGludGVyZmFjZSAgZGVmaW5pdGlvbnMsIGhvd2V2ZXIgaXQgaXMgbm90IGRvY3VtZW50ZWQuIE90aGVyIHRoYW4gYnkKKyAgICAgZGlzYXNzZW1ibGluZyAgdGhlIGxpYnJhcnksIHdlIGhhdmUgbm8gd2F5IHRvIGRldGVybWluZSBleGFjdGx5IGhvdworICAgICB0aGF0ICAgbW91c2UgICBjb2RlICAgd29ya3MuICBUaHVzLCAgd2UgIHJlY29tbWVuZCAgdGhhdCAgeW91ICB3cmFwCisgICAgIG1vdXNlLXJlbGF0ZWQgICBjb2RlICAgaW4gICBhbiAgICNpZmRlZiAgdXNpbmcgIHRoZSAgZmVhdHVyZSAgbWFjcm8KKyAgICAgTkNVUlNFU19NT1VTRV9WRVJTSU9OICBzbyAgaXQgIHdpbGwgIG5vdCAgYmUgY29tcGlsZWQgYW5kIGxpbmtlZCBvbgorICAgICBub24tbmN1cnNlcyBzeXN0ZW1zLgorCisgICBQcmVzZW50bHksIG1vdXNlIGV2ZW50IHJlcG9ydGluZyB3b3JrcyBpbiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50czoKKyAgICAgKiB4dGVybSBhbmQgc2ltaWxhciBwcm9ncmFtcyBzdWNoIGFzIHJ4dnQuCisgICAgICogTGludXggIGNvbnNvbGUsICB3aGVuICBjb25maWd1cmVkIHdpdGggZ3BtKDEpLCBBbGVzc2FuZHJvIFJ1YmluaSdzCisgICAgICAgbW91c2Ugc2VydmVyLgorICAgICAqIEZyZWVCU0Qgc3lzbW91c2UgKGNvbnNvbGUpCisgICAgICogT1MvMiBFTVgKKworICAgVGhlICBtb3VzZSAgaW50ZXJmYWNlICBpcyAgdmVyeSAgc2ltcGxlLiAgVG8gIGFjdGl2YXRlIGl0LCB5b3UgdXNlIHRoZQorICAgZnVuY3Rpb24gIG1vdXNlbWFzaygpLCAgcGFzc2luZyAgaXQgIGFzIGZpcnN0IGFyZ3VtZW50IGEgYml0LW1hc2sgdGhhdAorICAgc3BlY2lmaWVzICB3aGF0ICBraW5kcyAgb2YgIGV2ZW50cyB5b3Ugd2FudCB5b3VyIHByb2dyYW0gdG8gYmUgYWJsZSB0bworICAgc2VlLiAgSXQgIHdpbGwgIHJldHVybiAgdGhlICBiaXQtbWFzayAgb2YgIGV2ZW50cyB0aGF0IGFjdHVhbGx5IGJlY29tZQorICAgdmlzaWJsZSwgd2hpY2ggbWF5IGRpZmZlciBmcm9tIHRoZSBhcmd1bWVudCBpZiB0aGUgbW91c2UgZGV2aWNlIGlzIG5vdAorICAgY2FwYWJsZSBvZiByZXBvcnRpbmcgc29tZSBvZiB0aGUgZXZlbnQgdHlwZXMgeW91IHNwZWNpZnkuCisKKyAgIE9uY2UgdGhlIG1vdXNlIGlzIGFjdGl2ZSwgeW91ciBhcHBsaWNhdGlvbidzIGNvbW1hbmQgbG9vcCBzaG91bGQgd2F0Y2gKKyAgIGZvciAgYSAgcmV0dXJuICB2YWx1ZSBvZiBLRVlfTU9VU0UgZnJvbSB3Z2V0Y2goKS4gV2hlbiB5b3Ugc2VlIHRoaXMsIGEKKyAgIG1vdXNlICBldmVudCByZXBvcnQgaGFzIGJlZW4gcXVldWVkLiBUbyBwaWNrIGl0IG9mZiB0aGUgcXVldWUsIHVzZSB0aGUKKyAgIGZ1bmN0aW9uICBnZXRtb3VzZSgpICAoeW91ICBtdXN0ICBkbyAgdGhpcyAgYmVmb3JlICB0aGUgbmV4dCB3Z2V0Y2goKSwKKyAgIG90aGVyd2lzZSAgYW5vdGhlciAgbW91c2UgIGV2ZW50ICBtaWdodCBjb21lIGluIGFuZCBtYWtlIHRoZSBmaXJzdCBvbmUKKyAgIGluYWNjZXNzaWJsZSkuCisKKyAgIEVhY2ggY2FsbCB0byBnZXRtb3VzZSgpIGZpbGxzIGEgc3RydWN0dXJlICh0aGUgYWRkcmVzcyBvZiB3aGljaCB5b3UnbGwKKyAgIHBhc3MgIGl0KSAgd2l0aCBtb3VzZSBldmVudCBkYXRhLiBUaGUgZXZlbnQgZGF0YSBpbmNsdWRlcyB6ZXJvLW9yaWdpbiwKKyAgIHNjcmVlbi1yZWxhdGl2ZSAgY2hhcmFjdGVyLWNlbGwgIGNvb3JkaW5hdGVzICBvZiB0aGUgbW91c2UgcG9pbnRlci4gSXQKKyAgIGFsc28gIGluY2x1ZGVzICBhbiAgZXZlbnQgIG1hc2suICBCaXRzICBpbiAgdGhpcyAgbWFzayAgd2lsbCAgYmUgIHNldCwKKyAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV2ZW50IHR5cGUgYmVpbmcgcmVwb3J0ZWQuCisKKyAgIFRoZSAgbW91c2UgIHN0cnVjdHVyZSAgY29udGFpbnMgIHR3byAgYWRkaXRpb25hbCAgZmllbGRzICB3aGljaCBtYXkgYmUKKyAgIHNpZ25pZmljYW50ICBpbiAgdGhlICBmdXR1cmUgIGFzICBuY3Vyc2VzICBpbnRlcmZhY2VzICB0byBuZXcga2luZHMgb2YKKyAgIHBvaW50aW5nICBkZXZpY2UuICBJbiBhZGRpdGlvbiB0byB4IGFuZCB5IGNvb3JkaW5hdGVzLCB0aGVyZSBpcyBhIHNsb3QKKyAgIGZvciAgYSAgeiBjb29yZGluYXRlOyB0aGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aXRoIHRvdWNoLXNjcmVlbnMgdGhhdCBjYW4KKyAgIHJldHVybiAgYSAgcHJlc3N1cmUgIG9yICBkdXJhdGlvbiBwYXJhbWV0ZXIuIFRoZXJlIGlzIGFsc28gYSBkZXZpY2UgSUQKKyAgIGZpZWxkLCAgd2hpY2ggIGNvdWxkICBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGlwbGUgcG9pbnRpbmcKKyAgIGRldmljZXMuCisKKyAgIFRoZSAgIGNsYXNzICBvZiAgdmlzaWJsZSAgZXZlbnRzICBtYXkgIGJlICBjaGFuZ2VkICBhdCAgYW55ICB0aW1lICB2aWEKKyAgIG1vdXNlbWFzaygpLiAgRXZlbnRzICB0aGF0ICBjYW4gYmUgcmVwb3J0ZWQgaW5jbHVkZSBwcmVzc2VzLCByZWxlYXNlcywKKyAgIHNpbmdsZS0sICAgZG91YmxlLSAgIGFuZCAgIHRyaXBsZS1jbGlja3MgICh5b3UgIGNhbiAgc2V0ICB0aGUgIG1heGltdW0KKyAgIGJ1dHRvbi1kb3duICB0aW1lICBmb3IgY2xpY2tzKS4gSWYgeW91IGRvbid0IG1ha2UgY2xpY2tzIHZpc2libGUsIHRoZXkKKyAgIHdpbGwgIGJlICByZXBvcnRlZCAgYXMgIHByZXNzLXJlbGVhc2UgcGFpcnMuIEluIHNvbWUgZW52aXJvbm1lbnRzLCB0aGUKKyAgIGV2ZW50ICBtYXNrICBtYXkgIGluY2x1ZGUgIGJpdHMgcmVwb3J0aW5nIHRoZSBzdGF0ZSBvZiBzaGlmdCwgYWx0LCBhbmQKKyAgIGN0cmwga2V5cyBvbiB0aGUga2V5Ym9hcmQgZHVyaW5nIHRoZSBldmVudC4KKworICAgQSAgZnVuY3Rpb24gIHRvIGNoZWNrIHdoZXRoZXIgYSBtb3VzZSBldmVudCBmZWxsIHdpdGhpbiBhIGdpdmVuIHdpbmRvdworICAgaXMgIGFsc28gIHN1cHBsaWVkLiAgWW91ICBjYW4gIHVzZSAgdGhpcyB0byBzZWUgd2hldGhlciBhIGdpdmVuIHdpbmRvdworICAgc2hvdWxkIGNvbnNpZGVyIGEgbW91c2UgZXZlbnQgcmVsZXZhbnQgdG8gaXQuCisKKyAgIEJlY2F1c2UgICBtb3VzZSAgIGV2ZW50ICAgcmVwb3J0aW5nICB3aWxsICBub3QgIGJlICBhdmFpbGFibGUgIGluICBhbGwKKyAgIGVudmlyb25tZW50cywgIGl0ICB3b3VsZCAgYmUgdW53aXNlIHRvIGJ1aWxkIG5jdXJzZXMgYXBwbGljYXRpb25zIHRoYXQKKyAgIHJlcXVpcmUgIHRoZSAgdXNlICBvZiAgYSAgbW91c2UuIFJhdGhlciwgeW91IHNob3VsZCB1c2UgdGhlIG1vdXNlIGFzIGEKKyAgIHNob3J0Y3V0ICBmb3IgcG9pbnQtYW5kLXNob290IGNvbW1hbmRzIHlvdXIgYXBwbGljYXRpb24gd291bGQgbm9ybWFsbHkKKyAgIGFjY2VwdCAgZnJvbSAgdGhlICBrZXlib2FyZC4gIFR3byAgb2YgIHRoZSAgdGVzdCAgZ2FtZXMgaW4gdGhlIG5jdXJzZXMKKyAgIGRpc3RyaWJ1dGlvbiAgKGJzICBhbmQgIGtuaWdodCkgY29udGFpbiBjb2RlIHRoYXQgaWxsdXN0cmF0ZXMgaG93IHRoaXMKKyAgIGNhbiBiZSBkb25lLgorCisgICBTZWUgICB0aGUgICBtYW51YWwgICBwYWdlICBjdXJzX21vdXNlKDNYKSAgZm9yICBmdWxsICBkZXRhaWxzICBvZiAgdGhlCisgICBtb3VzZS1pbnRlcmZhY2UgZnVuY3Rpb25zLgorCisgIEZpbmlzaGluZyBVcAorCisgICBJbiAgb3JkZXIgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhlIG5jdXJzZXMgcm91dGluZXMsIHRoZSByb3V0aW5lIGVuZHdpbigpCisgICBpcyAgcHJvdmlkZWQuICBJdCAgcmVzdG9yZXMgdHR5IG1vZGVzIHRvIHdoYXQgdGhleSB3ZXJlIHdoZW4gaW5pdHNjcigpCisgICB3YXMgIGZpcnN0IGNhbGxlZCwgYW5kIG1vdmVzIHRoZSBjdXJzb3IgZG93biB0byB0aGUgbG93ZXItbGVmdCBjb3JuZXIuCisgICBUaHVzLCAgYW55dGltZSAgYWZ0ZXIgIHRoZSAgY2FsbCB0byBpbml0c2NyLCBlbmR3aW4oKSBzaG91bGQgYmUgY2FsbGVkCisgICBiZWZvcmUgZXhpdGluZy4KKworRnVuY3Rpb24gRGVzY3JpcHRpb25zCisKKyAgIFdlICBkZXNjcmliZSAgdGhlIGRldGFpbGVkIGJlaGF2aW9yIG9mIHNvbWUgaW1wb3J0YW50IGN1cnNlcyBmdW5jdGlvbnMKKyAgIGhlcmUsIGFzIGEgc3VwcGxlbWVudCB0byB0aGUgbWFudWFsIHBhZ2UgZGVzY3JpcHRpb25zLgorCisgIEluaXRpYWxpemF0aW9uIGFuZCBXcmFwdXAKKworICAgaW5pdHNjcigpCisgICAgICAgICAgVGhlICBmaXJzdCAgZnVuY3Rpb24gIGNhbGxlZCBzaG91bGQgYWxtb3N0IGFsd2F5cyBiZSBpbml0c2NyKCkuCisgICAgICAgICAgVGhpcyAgd2lsbCAgZGV0ZXJtaW5lICB0aGUgIHRlcm1pbmFsIHR5cGUgYW5kIGluaXRpYWxpemUgY3Vyc2VzCisgICAgICAgICAgZGF0YSBzdHJ1Y3R1cmVzLiBpbml0c2NyKCkgYWxzbyBhcnJhbmdlcyB0aGF0IHRoZSBmaXJzdCBjYWxsIHRvCisgICAgICAgICAgcmVmcmVzaCgpICB3aWxsICBjbGVhciB0aGUgc2NyZWVuLiBJZiBhbiBlcnJvciBvY2N1cnMgYSBtZXNzYWdlCisgICAgICAgICAgaXMgIHdyaXR0ZW4gIHRvIHN0YW5kYXJkIGVycm9yIGFuZCB0aGUgcHJvZ3JhbSBleGl0cy4gT3RoZXJ3aXNlCisgICAgICAgICAgaXQgIHJldHVybnMgIGEgcG9pbnRlciB0byBzdGRzY3IuIEEgZmV3IGZ1bmN0aW9ucyBtYXkgYmUgY2FsbGVkCisgICAgICAgICAgYmVmb3JlICBpbml0c2NyIChzbGtfaW5pdCgpLCBmaWx0ZXIoKSwgcmlwb2ZmbGluZSgpLCB1c2VfZW52KCksCisgICAgICAgICAgYW5kLCBpZiB5b3UgYXJlIHVzaW5nIG11bHRpcGxlIHRlcm1pbmFscywgbmV3dGVybSgpLikKKworICAgZW5kd2luKCkKKyAgICAgICAgICBZb3VyICBwcm9ncmFtICBzaG91bGQgIGFsd2F5cyAgY2FsbCAgZW5kd2luKCkgYmVmb3JlIGV4aXRpbmcgb3IKKyAgICAgICAgICBzaGVsbGluZyAgb3V0ICBvZiAgdGhlICBwcm9ncmFtLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzdG9yZSB0dHkKKyAgICAgICAgICBtb2RlcywgIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgbG93ZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiwKKyAgICAgICAgICByZXNldCAgdGhlICB0ZXJtaW5hbCAgaW50byAgdGhlIHByb3BlciBub24tdmlzdWFsIG1vZGUuIENhbGxpbmcKKyAgICAgICAgICByZWZyZXNoKCkgIG9yICBkb3VwZGF0ZSgpICBhZnRlciAgYSAgdGVtcG9yYXJ5ICBlc2NhcGUgZnJvbSB0aGUKKyAgICAgICAgICBwcm9ncmFtIHdpbGwgcmVzdG9yZSB0aGUgbmN1cnNlcyBzY3JlZW4gZnJvbSBiZWZvcmUgdGhlIGVzY2FwZS4KKworICAgbmV3dGVybSh0eXBlLCBvZnAsIGlmcCkKKyAgICAgICAgICBBICBwcm9ncmFtICB3aGljaCAgb3V0cHV0cyB0byBtb3JlIHRoYW4gb25lIHRlcm1pbmFsIHNob3VsZCB1c2UKKyAgICAgICAgICBuZXd0ZXJtKCkgaW5zdGVhZCBvZiBpbml0c2NyKCkuIG5ld3Rlcm0oKSBzaG91bGQgYmUgY2FsbGVkIG9uY2UKKyAgICAgICAgICBmb3IgZWFjaCB0ZXJtaW5hbC4gSXQgcmV0dXJucyBhIHZhcmlhYmxlIG9mIHR5cGUgU0NSRUVOICogd2hpY2gKKyAgICAgICAgICBzaG91bGQgIGJlICBzYXZlZCAgYXMgIGEgIHJlZmVyZW5jZSAgdG8gdGhhdCB0ZXJtaW5hbC4gKE5PVEU6IGEKKyAgICAgICAgICBTQ1JFRU4gIHZhcmlhYmxlIGlzIG5vdCBhIHNjcmVlbiBpbiB0aGUgc2Vuc2Ugd2UgYXJlIGRlc2NyaWJpbmcKKyAgICAgICAgICBpbiAgdGhpcyAgaW50cm9kdWN0aW9uLCAgYnV0IGEgY29sbGVjdGlvbiBvZiBwYXJhbWV0ZXJzIHVzZWQgdG8KKyAgICAgICAgICBhc3Npc3QgIGluICBvcHRpbWl6aW5nIHRoZSBkaXNwbGF5LikgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHR5cGUKKyAgICAgICAgICBvZiB0aGUgdGVybWluYWwgKGEgc3RyaW5nKSBhbmQgRklMRSBwb2ludGVycyBmb3IgdGhlIG91dHB1dCBhbmQKKyAgICAgICAgICBpbnB1dCAgb2YgIHRoZSAgdGVybWluYWwuICBJZiB0eXBlIGlzIE5VTEwgdGhlbiB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICB2YXJpYWJsZSAgJFRFUk0gIGlzIHVzZWQuIGVuZHdpbigpIHNob3VsZCBjYWxsZWQgb25jZSBhdCB3cmFwdXAKKyAgICAgICAgICB0aW1lIGZvciBlYWNoIHRlcm1pbmFsIG9wZW5lZCB1c2luZyB0aGlzIGZ1bmN0aW9uLgorCisgICBzZXRfdGVybShuZXcpCisgICAgICAgICAgVGhpcyAgZnVuY3Rpb24gIGlzICB1c2VkICB0byAgc3dpdGNoICB0byAgYSAgZGlmZmVyZW50IHRlcm1pbmFsCisgICAgICAgICAgcHJldmlvdXNseSAgb3BlbmVkICBieSAgbmV3dGVybSgpLiBUaGUgc2NyZWVuIHJlZmVyZW5jZSBmb3IgdGhlCisgICAgICAgICAgbmV3ICB0ZXJtaW5hbCBpcyBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlci4gVGhlIHByZXZpb3VzIHRlcm1pbmFsCisgICAgICAgICAgaXMgIHJldHVybmVkICBieSAgdGhlIGZ1bmN0aW9uLiBBbGwgb3RoZXIgY2FsbHMgYWZmZWN0IG9ubHkgdGhlCisgICAgICAgICAgY3VycmVudCB0ZXJtaW5hbC4KKworICAgZGVsc2NyZWVuKHNwKQorICAgICAgICAgIFRoZSAgaW52ZXJzZSAgb2YgIG5ld3Rlcm0oKTsgIGRlYWxsb2NhdGVzICB0aGUgIGRhdGEgc3RydWN0dXJlcworICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIFNDUkVFTiByZWZlcmVuY2UuCisKKyAgQ2F1c2luZyBPdXRwdXQgdG8gdGhlIFRlcm1pbmFsCisKKyAgIHJlZnJlc2goKSBhbmQgd3JlZnJlc2god2luKQorICAgICAgICAgIFRoZXNlICBmdW5jdGlvbnMgIG11c3QgIGJlIGNhbGxlZCB0byBhY3R1YWxseSBnZXQgYW55IG91dHB1dCBvbgorICAgICAgICAgIHRoZSAgIHRlcm1pbmFsLCAgIGFzICBvdGhlciAgcm91dGluZXMgIG1lcmVseSAgbWFuaXB1bGF0ZSAgZGF0YQorICAgICAgICAgIHN0cnVjdHVyZXMuICB3cmVmcmVzaCgpIGNvcGllcyB0aGUgbmFtZWQgd2luZG93IHRvIHRoZSBwaHlzaWNhbAorICAgICAgICAgIHRlcm1pbmFsICBzY3JlZW4sICB0YWtpbmcgaW50byBhY2NvdW50IHdoYXQgaXMgYWxyZWFkeSB0aGVyZSBpbgorICAgICAgICAgIG9yZGVyICB0byBkbyBvcHRpbWl6YXRpb25zLiByZWZyZXNoKCkgZG9lcyBhIHJlZnJlc2ggb2Ygc3Rkc2NyLgorICAgICAgICAgIFVubGVzcyAgbGVhdmVvaygpICBoYXMgYmVlbiBlbmFibGVkLCB0aGUgcGh5c2ljYWwgY3Vyc29yIG9mIHRoZQorICAgICAgICAgIHRlcm1pbmFsIGlzIGxlZnQgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSB3aW5kb3cncyBjdXJzb3IuCisKKyAgIGRvdXBkYXRlKCkgYW5kIHdub3V0cmVmcmVzaCh3aW4pCisgICAgICAgICAgVGhlc2UgdHdvIGZ1bmN0aW9ucyBhbGxvdyBtdWx0aXBsZSB1cGRhdGVzIHdpdGggbW9yZSBlZmZpY2llbmN5CisgICAgICAgICAgdGhhbiAgd3JlZnJlc2guICBUbyB1c2UgdGhlbSwgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93CisgICAgICAgICAgY3Vyc2VzICB3b3Jrcy4gSW4gYWRkaXRpb24gdG8gYWxsIHRoZSB3aW5kb3cgc3RydWN0dXJlcywgY3Vyc2VzCisgICAgICAgICAga2VlcHMgIHR3byAgZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgdGVybWluYWwgc2NyZWVuOiBhCisgICAgICAgICAgcGh5c2ljYWwgc2NyZWVuLCBkZXNjcmliaW5nIHdoYXQgaXMgYWN0dWFsbHkgb24gdGhlIHNjcmVlbiwgYW5kCisgICAgICAgICAgYSAgdmlydHVhbCBzY3JlZW4sIGRlc2NyaWJpbmcgd2hhdCB0aGUgcHJvZ3JhbW1lciB3YW50cyB0byBoYXZlCisgICAgICAgICAgb24gdGhlIHNjcmVlbi4gd3JlZnJlc2ggd29ya3MgYnkgZmlyc3QgY29weWluZyB0aGUgbmFtZWQgd2luZG93CisgICAgICAgICAgdG8gIHRoZSAgdmlydHVhbCAgc2NyZWVuICh3bm91dHJlZnJlc2goKSksIGFuZCB0aGVuIGNhbGxpbmcgdGhlCisgICAgICAgICAgcm91dGluZSAgdG8gIHVwZGF0ZSAgdGhlIHNjcmVlbiAoZG91cGRhdGUoKSkuIElmIHRoZSBwcm9ncmFtbWVyCisgICAgICAgICAgd2lzaGVzICB0byBvdXRwdXQgc2V2ZXJhbCB3aW5kb3dzIGF0IG9uY2UsIGEgc2VyaWVzIG9mIGNhbGxzIHRvCisgICAgICAgICAgd3JlZnJlc2ggd2lsbCByZXN1bHQgaW4gYWx0ZXJuYXRpbmcgY2FsbHMgdG8gd25vdXRyZWZyZXNoKCkgYW5kCisgICAgICAgICAgZG91cGRhdGUoKSwgIGNhdXNpbmcgc2V2ZXJhbCBidXJzdHMgb2Ygb3V0cHV0IHRvIHRoZSBzY3JlZW4uIEJ5CisgICAgICAgICAgY2FsbGluZyAgd25vdXRyZWZyZXNoKCkgZm9yIGVhY2ggd2luZG93LCBpdCBpcyB0aGVuIHBvc3NpYmxlIHRvCisgICAgICAgICAgY2FsbCAgZG91cGRhdGUoKSAgb25jZSwgIHJlc3VsdGluZyBpbiBvbmx5IG9uZSBidXJzdCBvZiBvdXRwdXQsCisgICAgICAgICAgd2l0aCAgZmV3ZXIgIHRvdGFsICBjaGFyYWN0ZXJzICB0cmFuc21pdHRlZCAodGhpcyBhbHNvIGF2b2lkcyBhCisgICAgICAgICAgdmlzdWFsbHkgYW5ub3lpbmcgZmxpY2tlciBhdCBlYWNoIHVwZGF0ZSkuCisKKyAgTG93LUxldmVsIENhcGFiaWxpdHkgQWNjZXNzCisKKyAgIHNldHVwdGVybSh0ZXJtLCBmaWxlbnVtLCBlcnJyZXQpCisgICAgICAgICAgVGhpcyAgcm91dGluZSBpcyBjYWxsZWQgdG8gaW5pdGlhbGl6ZSBhIHRlcm1pbmFsJ3MgZGVzY3JpcHRpb24sCisgICAgICAgICAgd2l0aG91dCBzZXR0aW5nIHVwIHRoZSBjdXJzZXMgc2NyZWVuIHN0cnVjdHVyZXMgb3IgY2hhbmdpbmcgdGhlCisgICAgICAgICAgdHR5LWRyaXZlciBtb2RlIGJpdHMuIHRlcm0gaXMgdGhlIGNoYXJhY3RlciBzdHJpbmcgcmVwcmVzZW50aW5nCisgICAgICAgICAgdGhlICBuYW1lICBvZiB0aGUgdGVybWluYWwgYmVpbmcgdXNlZC4gZmlsZW51bSBpcyB0aGUgVU5JWCBmaWxlCisgICAgICAgICAgZGVzY3JpcHRvciAgb2YgIHRoZSB0ZXJtaW5hbCB0byBiZSB1c2VkIGZvciBvdXRwdXQuIGVycnJldCBpcyBhCisgICAgICAgICAgcG9pbnRlciB0byBhbiBpbnRlZ2VyLCBpbiB3aGljaCBhIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpbmRpY2F0aW9uCisgICAgICAgICAgaXMgIHJldHVybmVkLiBUaGUgdmFsdWVzIHJldHVybmVkIGNhbiBiZSAxIChhbGwgaXMgd2VsbCksIDAgKG5vCisgICAgICAgICAgc3VjaCAgdGVybWluYWwpLCAgb3IgIC0xICAoc29tZSAgcHJvYmxlbSAgbG9jYXRpbmcgdGhlIHRlcm1pbmZvCisgICAgICAgICAgZGF0YWJhc2UpLgorCisgICAgICAgICAgVGhlICB2YWx1ZSAgb2YgIHRlcm0gY2FuIGJlIGdpdmVuIGFzIE5VTEwsIHdoaWNoIHdpbGwgY2F1c2UgdGhlCisgICAgICAgICAgdmFsdWUgb2YgVEVSTSBpbiB0aGUgZW52aXJvbm1lbnQgdG8gYmUgdXNlZC4gVGhlIGVycnJldCBwb2ludGVyCisgICAgICAgICAgY2FuICBhbHNvIGJlIGdpdmVuIGFzIE5VTEwsIG1lYW5pbmcgbm8gZXJyb3IgY29kZSBpcyB3YW50ZWQuIElmCisgICAgICAgICAgZXJycmV0IGlzIGRlZmF1bHRlZCwgYW5kIHNvbWV0aGluZyBnb2VzIHdyb25nLCBzZXR1cHRlcm0oKSB3aWxsCisgICAgICAgICAgcHJpbnQgIGFuICBhcHByb3ByaWF0ZSAgZXJyb3IgIG1lc3NhZ2UgIGFuZCAgZXhpdCwgIHJhdGhlciB0aGFuCisgICAgICAgICAgcmV0dXJuaW5nLiAgVGh1cywgIGEgc2ltcGxlIHByb2dyYW0gY2FuIGNhbGwgc2V0dXB0ZXJtKDAsIDEsIDApCisgICAgICAgICAgYW5kIG5vdCB3b3JyeSBhYm91dCBpbml0aWFsaXphdGlvbiBlcnJvcnMuCisKKyAgICAgICAgICBBZnRlciAgdGhlIGNhbGwgdG8gc2V0dXB0ZXJtKCksIHRoZSBnbG9iYWwgdmFyaWFibGUgY3VyX3Rlcm0gaXMKKyAgICAgICAgICBzZXQgdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIHRlcm1pbmFsIGNhcGFiaWxpdGllcy4KKyAgICAgICAgICBCeSAgY2FsbGluZyAgc2V0dXB0ZXJtKCkgIGZvciAgZWFjaCAgdGVybWluYWwsICBhbmQgIHNhdmluZyBhbmQKKyAgICAgICAgICByZXN0b3JpbmcgIGN1cl90ZXJtLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBwcm9ncmFtIHRvIHVzZSB0d28gb3IKKyAgICAgICAgICBtb3JlICB0ZXJtaW5hbHMgIGF0ICBvbmNlLiAgU2V0dXB0ZXJtKCkgIGFsc28gIHN0b3JlcyB0aGUgbmFtZXMKKyAgICAgICAgICBzZWN0aW9uICBvZiAgdGhlICB0ZXJtaW5hbCAgZGVzY3JpcHRpb24gaW4gdGhlIGdsb2JhbCBjaGFyYWN0ZXIKKyAgICAgICAgICBhcnJheSB0dHl0eXBlW10uIFN1YnNlcXVlbnQgY2FsbHMgdG8gc2V0dXB0ZXJtKCkgd2lsbCBvdmVyd3JpdGUKKyAgICAgICAgICB0aGlzIGFycmF5LCBzbyB5b3UnbGwgaGF2ZSB0byBzYXZlIGl0IHlvdXJzZWxmIGlmIG5lZWQgYmUuCisKKyAgRGVidWdnaW5nCisKKyAgICAgTk9URTogVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgY3Vyc2VzIEFQSSEKKworICAgdHJhY2UoKQorICAgICAgICAgIFRoaXMgIGZ1bmN0aW9uICBjYW4gYmUgdXNlZCB0byBleHBsaWNpdGx5IHNldCBhIHRyYWNlIGxldmVsLiBJZgorICAgICAgICAgIHRoZSAgdHJhY2UgIGxldmVsICBpcyAgbm9uemVybywgIGV4ZWN1dGlvbiBvZiB5b3VyIHByb2dyYW0gd2lsbAorICAgICAgICAgIGdlbmVyYXRlIGEgZmlsZSBjYWxsZWQgYHRyYWNlJyBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICAgICAgIGNvbnRhaW5pbmcgIGEgIHJlcG9ydCAgb24gIHRoZSAgbGlicmFyeSdzIGFjdGlvbnMuIEhpZ2hlciB0cmFjZQorICAgICAgICAgIGxldmVscyAgZW5hYmxlICBtb3JlICBkZXRhaWxlZCAgKGFuZCAgdmVyYm9zZSkgcmVwb3J0aW5nIC0tIHNlZQorICAgICAgICAgIGNvbW1lbnRzICBhdHRhY2hlZCAgdG8gIFRSQUNFXyBkZWZpbmVzIGluIHRoZSBjdXJzZXMuaCBmaWxlIGZvcgorICAgICAgICAgIGRldGFpbHMuIChJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCBhIHRyYWNlIGxldmVsIGJ5IGFzc2lnbmluZworICAgICAgICAgIGEgdHJhY2UgbGV2ZWwgdmFsdWUgdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE5DVVJTRVNfVFJBQ0UpLgorCisgICBfdHJhY2VmKCkKKyAgICAgICAgICBUaGlzICBmdW5jdGlvbiAgY2FuICBiZSAgdXNlZCAgdG8gIG91dHB1dCAgeW91ciAgb3duICBkZWJ1Z2dpbmcKKyAgICAgICAgICBpbmZvcm1hdGlvbi4gIEl0ICBpcyAgb25seSAgYXZhaWxhYmxlICBvbmx5ICBpZiAgeW91ICBsaW5rIHdpdGgKKyAgICAgICAgICAtbG5jdXJzZXNfZy4gIEl0ICBjYW4gYmUgdXNlZCB0aGUgc2FtZSB3YXkgYXMgcHJpbnRmKCksIG9ubHkgaXQKKyAgICAgICAgICBvdXRwdXRzICBhICBuZXdsaW5lIGFmdGVyIHRoZSBlbmQgb2YgYXJndW1lbnRzLiBUaGUgb3V0cHV0IGdvZXMKKyAgICAgICAgICB0byBhIGZpbGUgY2FsbGVkIHRyYWNlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgVHJhY2UgIGxvZ3MgIGNhbiAgYmUgZGlmZmljdWx0IHRvIGludGVycHJldCBkdWUgdG8gdGhlIHNoZWVyIHZvbHVtZSBvZgorICAgZGF0YSBkdW1wZWQgaW4gdGhlbS4gVGhlcmUgaXMgYSBzY3JpcHQgY2FsbGVkIHRyYWNlbXVuY2ggaW5jbHVkZWQgd2l0aAorICAgdGhlICBuY3Vyc2VzIGRpc3RyaWJ1dGlvbiB0aGF0IGNhbiBhbGxldmlhdGUgdGhpcyBwcm9ibGVtIHNvbWV3aGF0OyBpdAorICAgY29tcGFjdHMgIGxvbmcgIHNlcXVlbmNlcyAgb2YgIHNpbWlsYXIgIG9wZXJhdGlvbnMgIGludG8gbW9yZSBzdWNjaW5jdAorICAgc2luZ2xlLWxpbmUgIHBzZXVkby1vcGVyYXRpb25zLiAgVGhlc2UgcHNldWRvLW9wcyBjYW4gYmUgZGlzdGluZ3Vpc2hlZAorICAgYnkgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBuYW1lZCBpbiBjYXBpdGFsIGxldHRlcnMuCisKK0hpbnRzLCBUaXBzLCBhbmQgVHJpY2tzCisKKyAgIFRoZSBuY3Vyc2VzIG1hbnVhbCBwYWdlcyBhcmUgYSBjb21wbGV0ZSByZWZlcmVuY2UgZm9yIHRoaXMgbGlicmFyeS4gSW4KKyAgIHRoZSByZW1haW5kZXIgb2YgdGhpcyBkb2N1bWVudCwgd2UgZGlzY3VzcyB2YXJpb3VzIHVzZWZ1bCBtZXRob2RzIHRoYXQKKyAgIG1heSBub3QgYmUgb2J2aW91cyBmcm9tIHRoZSBtYW51YWwgcGFnZSBkZXNjcmlwdGlvbnMuCisKKyAgU29tZSBOb3RlcyBvZiBDYXV0aW9uCisKKyAgIElmICB5b3UgIGZpbmQgeW91cnNlbGYgdGhpbmtpbmcgeW91IG5lZWQgdG8gdXNlIG5vcmF3KCkgb3Igbm9jYnJlYWsoKSwKKyAgIHRoaW5rICBhZ2FpbiAgYW5kICBtb3ZlICBjYXJlZnVsbHkuIEl0J3MgcHJvYmFibHkgYmV0dGVyIGRlc2lnbiB0byB1c2UKKyAgIGdldHN0cigpICBvciBvbmUgb2YgaXRzIHJlbGF0aXZlcyB0byBzaW11bGF0ZSBjb29rZWQgbW9kZS4gVGhlIG5vcmF3KCkKKyAgIGFuZCAgbm9jYnJlYWsoKSBmdW5jdGlvbnMgdHJ5IHRvIHJlc3RvcmUgY29va2VkIG1vZGUsIGJ1dCB0aGV5IG1heSBlbmQKKyAgIHVwICAgY2xvYmJlcmluZyAgIHNvbWUgIGNvbnRyb2wgIGJpdHMgIHNldCAgYmVmb3JlICB5b3UgIHN0YXJ0ZWQgIHlvdXIKKyAgIGFwcGxpY2F0aW9uLiAgQWxzbywgIHRoZXkgIGhhdmUgYWx3YXlzIGJlZW4gcG9vcmx5IGRvY3VtZW50ZWQsIGFuZCBhcmUKKyAgIGxpa2VseSAgIHRvICBodXJ0ICB5b3VyICBhcHBsaWNhdGlvbidzICB1c2FiaWxpdHkgIHdpdGggIG90aGVyICBjdXJzZXMKKyAgIGxpYnJhcmllcy4KKworICAgQmVhciAgaW4gIG1pbmQgdGhhdCByZWZyZXNoKCkgaXMgYSBzeW5vbnltIGZvciB3cmVmcmVzaChzdGRzY3IpLiBEb24ndAorICAgdHJ5ICB0byAgbWl4IHVzZSBvZiBzdGRzY3Igd2l0aCB1c2Ugb2Ygd2luZG93cyBkZWNsYXJlZCBieSBuZXd3aW4oKTsgYQorICAgcmVmcmVzaCgpICBjYWxsIHdpbGwgYmxvdyB0aGVtIG9mZiB0aGUgc2NyZWVuLiBUaGUgcmlnaHQgd2F5IHRvIGhhbmRsZQorICAgdGhpcyAgaXMgIHRvICB1c2UgIHN1YndpbigpLCAgb3Igbm90IHRvdWNoIHN0ZHNjciBhdCBhbGwgYW5kIHRpbGUgeW91cgorICAgc2NyZWVuICB3aXRoICBkZWNsYXJlZCB3aW5kb3dzIHdoaWNoIHlvdSB0aGVuIHdub3V0cmVmcmVzaCgpIHNvbWV3aGVyZQorICAgaW4gIHlvdXIgIHByb2dyYW0gZXZlbnQgbG9vcCwgd2l0aCBhIHNpbmdsZSBkb3VwZGF0ZSgpIGNhbGwgdG8gdHJpZ2dlcgorICAgYWN0dWFsIHJlcGFpbnRpbmcuCisKKyAgIFlvdSAgYXJlICBtdWNoICBsZXNzICBsaWtlbHkgIHRvICBydW4gaW50byBwcm9ibGVtcyBpZiB5b3UgZGVzaWduIHlvdXIKKyAgIHNjcmVlbiAgIGxheW91dHMgICB0byAgdXNlICB0aWxlZCAgcmF0aGVyICB0aGFuICBvdmVybGFwcGluZyAgd2luZG93cy4KKyAgIEhpc3RvcmljYWxseSwgIGN1cnNlcyAgc3VwcG9ydCAgZm9yIG92ZXJsYXBwaW5nIHdpbmRvd3MgaGFzIGJlZW4gd2VhaywKKyAgIGZyYWdpbGUsICBhbmQgIHBvb3JseSAgZG9jdW1lbnRlZC4gIFRoZSAgbmN1cnNlcyBsaWJyYXJ5IGlzIG5vdCB5ZXQgYW4KKyAgIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUuCisKKyAgIFRoZXJlICBpcyAgYSAgcGFuZWxzIGxpYnJhcnkgaW5jbHVkZWQgaW4gdGhlIG5jdXJzZXMgZGlzdHJpYnV0aW9uIHRoYXQKKyAgIGRvZXMgIGEgIHByZXR0eSAgZ29vZCAgam9iICBvZiAgc3RyZW5ndGhlbmluZyAgdGhlIG92ZXJsYXBwaW5nLXdpbmRvd3MKKyAgIGZhY2lsaXRpZXMuCisKKyAgIFRyeSB0byBhdm9pZCB1c2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBMSU5FUyBhbmQgQ09MUy4gVXNlIGdldG1heHl4KCkKKyAgIG9uICB0aGUgc3Rkc2NyIGNvbnRleHQgaW5zdGVhZC4gUmVhc29uOiB5b3VyIGNvZGUgbWF5IGJlIHBvcnRlZCB0byBydW4KKyAgIGluICBhbiAgZW52aXJvbm1lbnQgd2l0aCB3aW5kb3cgcmVzaXplcywgaW4gd2hpY2ggY2FzZSBzZXZlcmFsIHNjcmVlbnMKKyAgIGNvdWxkIGJlIG9wZW4gd2l0aCBkaWZmZXJlbnQgc2l6ZXMuCisKKyAgVGVtcG9yYXJpbHkgTGVhdmluZyBOQ1VSU0VTIE1vZGUKKworICAgU29tZXRpbWVzICB5b3UgIHdpbGwgIHdhbnQgIHRvIHdyaXRlIGEgcHJvZ3JhbSB0aGF0IHNwZW5kcyBtb3N0IG9mIGl0cworICAgdGltZSAgaW4gIHNjcmVlbiAgbW9kZSwgIGJ1dCBvY2Nhc2lvbmFsbHkgcmV0dXJucyB0byBvcmRpbmFyeSBgY29va2VkJworICAgbW9kZS4gIEEgY29tbW9uIHJlYXNvbiBmb3IgdGhpcyBpcyB0byBzdXBwb3J0IHNoZWxsLW91dC4gVGhpcyBiZWhhdmlvcgorICAgaXMgc2ltcGxlIHRvIGFycmFuZ2UgaW4gbmN1cnNlcy4KKworICAgVG8gIGxlYXZlICBuY3Vyc2VzICBtb2RlLCAgY2FsbCAgZW5kd2luKCkgIGFzICB5b3UgIHdvdWxkICBpZiB5b3Ugd2VyZQorICAgaW50ZW5kaW5nICB0byB0ZXJtaW5hdGUgdGhlIHByb2dyYW0uIFRoaXMgd2lsbCB0YWtlIHRoZSBzY3JlZW4gYmFjayB0bworICAgY29va2VkICBtb2RlOyAgeW91ICBjYW4gIGRvIHlvdXIgc2hlbGwtb3V0LiBXaGVuIHlvdSB3YW50IHRvIHJldHVybiB0bworICAgbmN1cnNlcyAgbW9kZSwgIHNpbXBseSBjYWxsIHJlZnJlc2goKSBvciBkb3VwZGF0ZSgpLiBUaGlzIHdpbGwgcmVwYWludAorICAgdGhlIHNjcmVlbi4KKworICAgVGhlcmUgIGlzICBhICBib29sZWFuIGZ1bmN0aW9uLCBpc2VuZHdpbigpLCB3aGljaCBjb2RlIGNhbiB1c2UgdG8gdGVzdAorICAgd2hldGhlciBuY3Vyc2VzIHNjcmVlbiBtb2RlIGlzIGFjdGl2ZS4gSXQgcmV0dXJucyBUUlVFIGluIHRoZSBpbnRlcnZhbAorICAgYmV0d2VlbiBhbiBlbmR3aW4oKSBjYWxsIGFuZCB0aGUgZm9sbG93aW5nIHJlZnJlc2goKSwgRkFMU0Ugb3RoZXJ3aXNlLgorCisgICBIZXJlIGlzIHNvbWUgc2FtcGxlIGNvZGUgZm9yIHNoZWxsb3V0OgorICAgIGFkZHN0cigiU2hlbGxpbmcgb3V0Li4uIik7CisgICAgZGVmX3Byb2dfbW9kZSgpOyAgICAgICAgICAgLyogc2F2ZSBjdXJyZW50IHR0eSBtb2RlcyAqLworICAgIGVuZHdpbigpOyAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgb3JpZ2luYWwgdHR5IG1vZGVzICovCisgICAgc3lzdGVtKCJzaCIpOyAgICAgICAgICAgICAgLyogcnVuIHNoZWxsICovCisgICAgYWRkc3RyKCJyZXR1cm5lZC5cbiIpOyAgICAgLyogcHJlcGFyZSByZXR1cm4gbWVzc2FnZSAqLworICAgIHJlZnJlc2goKTsgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgc2F2ZSBtb2RlcywgcmVwYWludCBzY3JlZW4gKi8KKworICBVc2luZyBOQ1VSU0VTIHVuZGVyIFhURVJNCisKKyAgIEEgIHJlc2l6ZSAgb3BlcmF0aW9uICBpbiAgWCAgc2VuZHMgU0lHV0lOQ0ggdG8gdGhlIGFwcGxpY2F0aW9uIHJ1bm5pbmcKKyAgIHVuZGVyICB4dGVybS4gIFRoZSAgZWFzaWVzdCB3YXkgdG8gaGFuZGxlIFNJR1dJTkNIIGlzIHRvIGRvIGFuIGVuZHdpbiwKKyAgIGZvbGxvd2VkICBieSAgYW4gIHJlZnJlc2ggIGFuZCBhIHNjcmVlbiByZXBhaW50IHlvdSBjb2RlIHlvdXJzZWxmLiBUaGUKKyAgIHJlZnJlc2ggd2lsbCBwaWNrIHVwIHRoZSBuZXcgc2NyZWVuIHNpemUgZnJvbSB0aGUgeHRlcm0ncyBlbnZpcm9ubWVudC4KKworICAgVGhhdCAgaXMgdGhlIHN0YW5kYXJkIHdheSwgb2YgY291cnNlIChpdCBldmVuIHdvcmtzIHdpdGggc29tZSB2ZW5kb3IncworICAgY3Vyc2VzICBpbXBsZW1lbnRhdGlvbnMpLiBJdHMgZHJhd2JhY2sgaXMgdGhhdCBpdCBjbGVhcnMgdGhlIHNjcmVlbiB0bworICAgcmVpbml0aWFsaXplIHRoZSBkaXNwbGF5LCBhbmQgZG9lcyBub3QgcmVzaXplIHN1YndpbmRvd3Mgd2hpY2ggbXVzdCBiZQorICAgc2hydW5rLiAgIE5jdXJzZXMgIHByb3ZpZGVzICBhbiAgZXh0ZW5zaW9uICB3aGljaCAgd29ya3MgIGJldHRlciwgIHRoZQorICAgcmVzaXpldGVybSAgZnVuY3Rpb24uICBUaGF0ICBmdW5jdGlvbiAgZW5zdXJlcyAgdGhhdCAgYWxsICB3aW5kb3dzIGFyZQorICAgbGltaXRlZCAgdG8gIHRoZSBuZXcgc2NyZWVuIGRpbWVuc2lvbnMsIGFuZCBwYWRzIHN0ZHNjciB3aXRoIGJsYW5rcyBpZgorICAgdGhlIHNjcmVlbiBpcyBsYXJnZXIuCisKKyAgIFRoZSBuY3Vyc2VzIGxpYnJhcnkgcHJvdmlkZXMgYSBTSUdXSU5DSCBzaWduYWwgaGFuZGxlciwgd2hpY2ggcHVzaGVzIGEKKyAgIEtFWV9SRVNJWkUgIHZpYSB0aGUgd2dldGNoKCkgY2FsbHMuIFdoZW4gbmN1cnNlcyByZXR1cm5zIHRoYXQgY29kZSwgaXQKKyAgIGNhbGxzICByZXNpemV0ZXJtICB0byB1cGRhdGUgdGhlIHNpemUgb2YgdGhlIHN0YW5kYXJkIHNjcmVlbidzIHdpbmRvdywKKyAgIHJlcGFpbnRpbmcgdGhhdCAoZmlsbGluZyB3aXRoIGJsYW5rcyBvciB0cnVuY2F0aW5nIGFzIG5lZWRlZCkuIEl0IGFsc28KKyAgIHJlc2l6ZXMgb3RoZXIgd2luZG93cywgYnV0IGl0cyBlZmZlY3QgbWF5IGJlIGxlc3Mgc2F0aXNmYWN0b3J5IGJlY2F1c2UKKyAgIGl0ICBjYW5ub3QgIGtub3cgIGhvdyB5b3Ugd2FudCB0aGUgc2NyZWVuIHJlLXBhaW50ZWQuIFlvdSB3aWxsIHVzdWFsbHkKKyAgIGhhdmUgdG8gd3JpdGUgc3BlY2lhbC1wdXJwb3NlIGNvZGUgdG8gaGFuZGxlIEtFWV9SRVNJWkUgeW91cnNlbGYuCisKKyAgSGFuZGxpbmcgTXVsdGlwbGUgVGVybWluYWwgU2NyZWVucworCisgICBUaGUgaW5pdHNjcigpIGZ1bmN0aW9uIGFjdHVhbGx5IGNhbGxzIGEgZnVuY3Rpb24gbmFtZWQgbmV3dGVybSgpIHRvIGRvCisgICBtb3N0ICBvZiAgaXRzICB3b3JrLiAgSWYgeW91IGFyZSB3cml0aW5nIGEgcHJvZ3JhbSB0aGF0IG9wZW5zIG11bHRpcGxlCisgICB0ZXJtaW5hbHMsIHVzZSBuZXd0ZXJtKCkgZGlyZWN0bHkuCisKKyAgIEZvciAgZWFjaCBjYWxsLCB5b3Ugd2lsbCBoYXZlIHRvIHNwZWNpZnkgYSB0ZXJtaW5hbCB0eXBlIGFuZCBhIHBhaXIgb2YKKyAgIGZpbGUgIHBvaW50ZXJzOyAgZWFjaCAgY2FsbCB3aWxsIHJldHVybiBhIHNjcmVlbiByZWZlcmVuY2UsIGFuZCBzdGRzY3IKKyAgIHdpbGwgYmUgc2V0IHRvIHRoZSBsYXN0IG9uZSBhbGxvY2F0ZWQuIFlvdSB3aWxsIHN3aXRjaCBiZXR3ZWVuIHNjcmVlbnMKKyAgIHdpdGggIHRoZSAgc2V0X3Rlcm0gIGNhbGwuICBOb3RlICB0aGF0ICB5b3UgIHdpbGwgIGFsc28gIGhhdmUgIHRvIGNhbGwKKyAgIGRlZl9zaGVsbF9tb2RlIGFuZCBkZWZfcHJvZ19tb2RlIG9uIGVhY2ggdHR5IHlvdXJzZWxmLgorCisgIFRlc3RpbmcgZm9yIFRlcm1pbmFsIENhcGFiaWxpdGllcworCisgICBTb21ldGltZXMgeW91IG1heSB3YW50IHRvIHdyaXRlIHByb2dyYW1zIHRoYXQgdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mCisgICB2YXJpb3VzICBjYXBhYmlsaXRpZXMgYmVmb3JlIGRlY2lkaW5nIHdoZXRoZXIgdG8gZ28gaW50byBuY3Vyc2VzIG1vZGUuCisgICBBbiAgZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB0byBjYWxsIHNldHVwdGVybSgpLCB0aGVuIHVzZSB0aGUgZnVuY3Rpb25zCisgICB0aWdldGZsYWcoKSwgdGlnZXRudW0oKSwgYW5kIHRpZ2V0c3RyKCkgdG8gZG8geW91ciB0ZXN0aW5nLgorCisgICBBICBwYXJ0aWN1bGFybHkgIHVzZWZ1bCAgY2FzZSAgb2YgdGhpcyBvZnRlbiBjb21lcyB1cCB3aGVuIHlvdSB3YW50IHRvCisgICB0ZXN0ICB3aGV0aGVyICBhICBnaXZlbiAgdGVybWluYWwgIHR5cGUgIHNob3VsZCAgYmUgdHJlYXRlZCBhcyBgc21hcnQnCisgICAoY3Vyc29yLWFkZHJlc3NhYmxlKSBvciBgc3R1cGlkJy4gVGhlIHJpZ2h0IHdheSB0byB0ZXN0IHRoaXMgaXMgdG8gc2VlCisgICBpZiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRpZ2V0c3RyKCJjdXAiKSBpcyBub24tTlVMTC4gQWx0ZXJuYXRpdmVseSwgeW91CisgICBjYW4gIGluY2x1ZGUgIHRoZSAgdGVybS5oICBmaWxlICBhbmQgIHRlc3QgIHRoZSAgdmFsdWUgIG9mICB0aGUgIG1hY3JvCisgICBjdXJzb3JfYWRkcmVzcy4KKworICBUdW5pbmcgZm9yIFNwZWVkCisKKyAgIFVzZSAgdGhlICBhZGRjaHN0cigpICBmYW1pbHkgIG9mIGZ1bmN0aW9ucyBmb3IgZmFzdCBzY3JlZW4tcGFpbnRpbmcgb2YKKyAgIHRleHQgIHdoZW4gIHlvdSAga25vdyB0aGUgdGV4dCBkb2Vzbid0IGNvbnRhaW4gYW55IGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgIFRyeSAgdG8gIG1ha2UgIGF0dHJpYnV0ZSBjaGFuZ2VzIGluZnJlcXVlbnQgb24geW91ciBzY3JlZW5zLiBEb24ndCB1c2UKKyAgIHRoZSBpbW1lZG9rKCkgb3B0aW9uIQorCisgIFNwZWNpYWwgRmVhdHVyZXMgb2YgTkNVUlNFUworCisgICBUaGUgIHdyZXNpemUoKSAgZnVuY3Rpb24gIGFsbG93cyAgeW91IHRvIHJlc2l6ZSBhIHdpbmRvdyBpbiBwbGFjZS4gVGhlCisgICBhc3NvY2lhdGVkICAgcmVzaXpldGVybSgpICBmdW5jdGlvbiAgc2ltcGxpZmllcyAgdGhlICBjb25zdHJ1Y3Rpb24gIG9mCisgICBTSUdXSU5DSCBoYW5kbGVycywgZm9yIHJlc2l6aW5nIGFsbCB3aW5kb3dzLgorCisgICBUaGUgZGVmaW5lX2tleSgpIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gZGVmaW5lIGF0IHJ1bnRpbWUgZnVuY3Rpb24ta2V5CisgICBjb250cm9sICBzZXF1ZW5jZXMgIHdoaWNoICBhcmUgIG5vdCAgaW4gIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4gVGhlCisgICBrZXlvaygpICAgZnVuY3Rpb24gICBhbGxvd3MgIHlvdSAgdG8gIHRlbXBvcmFyaWx5ICBlbmFibGUgIG9yICBkaXNhYmxlCisgICBpbnRlcnByZXRhdGlvbiBvZiBhbnkgZnVuY3Rpb24ta2V5IGNvbnRyb2wgc2VxdWVuY2UuCisKKyAgIFRoZSB1c2VfZGVmYXVsdF9jb2xvcnMoKSBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIGNvbnN0cnVjdCBhcHBsaWNhdGlvbnMKKyAgIHdoaWNoICBjYW4gdXNlIHRoZSB0ZXJtaW5hbCdzIGRlZmF1bHQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMKKyAgIGFzICBhbiAgYWRkaXRpb25hbCAiZGVmYXVsdCIgY29sb3IuIFNldmVyYWwgdGVybWluYWwgZW11bGF0b3JzIHN1cHBvcnQKKyAgIHRoaXMgZmVhdHVyZSwgd2hpY2ggaXMgYmFzZWQgb24gSVNPIDY0MjkuCisKKyAgIE5jdXJzZXMgIHN1cHBvcnRzICB1cCAxNiBjb2xvcnMsIHVubGlrZSBTVnI0IGN1cnNlcyB3aGljaCBkZWZpbmVzIG9ubHkKKyAgIDguIFdoaWxlIG1vc3QgdGVybWluYWxzIHdoaWNoIHByb3ZpZGUgY29sb3IgYWxsb3cgb25seSA4IGNvbG9ycywgYWJvdXQKKyAgIGEgcXVhcnRlciAoaW5jbHVkaW5nIFhGcmVlODYgeHRlcm0pIHN1cHBvcnQgMTYgY29sb3JzLgorCitDb21wYXRpYmlsaXR5IHdpdGggT2xkZXIgVmVyc2lvbnMKKworICAgRGVzcGl0ZSAgb3VyICBiZXN0IGVmZm9ydHMsIHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gbmN1cnNlcworICAgYW5kICB0aGUgICh1bmRvY3VtZW50ZWQhKSAgYmVoYXZpb3IgIG9mICBvbGRlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLgorICAgVGhlc2UgIGFyaXNlIGZyb20gYW1iaWd1aXRpZXMgb3Igb21pc3Npb25zIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQorICAgQVBJLgorCisgIFJlZnJlc2ggb2YgT3ZlcmxhcHBpbmcgV2luZG93cworCisgICBJZiAgeW91ICBkZWZpbmUgdHdvIHdpbmRvd3MgQSBhbmQgQiB0aGF0IG92ZXJsYXAsIGFuZCB0aGVuIGFsdGVybmF0ZWx5CisgICBzY3JpYmJsZSAgb24gIGFuZCAgcmVmcmVzaCAgdGhlbSwgIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIG92ZXJsYXBwaW5nCisgICByZWdpb24gIHVuZGVyICBoaXN0b3JpYyAgY3Vyc2VzICB2ZXJzaW9ucyAgd2VyZSAgb2Z0ZW4gIG5vdCBkb2N1bWVudGVkCisgICBwcmVjaXNlbHkuCisKKyAgIFRvICB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGEgcHJvYmxlbSwgcmVtZW1iZXIgdGhhdCBzY3JlZW4gdXBkYXRlcyBhcmUKKyAgIGNhbGN1bGF0ZWQgIGJldHdlZW4gIHR3byAgcmVwcmVzZW50YXRpb25zICBvZiAgdGhlIGVudGlyZSBkaXNwbGF5LiBUaGUKKyAgIGRvY3VtZW50YXRpb24gIHNheXMgdGhhdCB3aGVuIHlvdSByZWZyZXNoIGEgd2luZG93LCBpdCBpcyBmaXJzdCBjb3BpZWQKKyAgIHRvICB0aGUgIHZpcnR1YWwgc2NyZWVuLCBhbmQgdGhlbiBjaGFuZ2VzIGFyZSBjYWxjdWxhdGVkIHRvIHVwZGF0ZSB0aGUKKyAgIHBoeXNpY2FsICBzY3JlZW4gKGFuZCBhcHBsaWVkIHRvIHRoZSB0ZXJtaW5hbCkuIEJ1dCAiY29waWVkIHRvIiBpcyBub3QKKyAgIHZlcnkgc3BlY2lmaWMsIGFuZCBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IGNvcHlpbmcgd29ya3MgY2FuIHByb2R1Y2UKKyAgIGRpZmZlcmVudCBiZWhhdmlvcnMgaW4gdGhlIGNhc2Ugd2hlcmUgdHdvIG92ZXJsYXBwaW5nIHdpbmRvd3MgYXJlIGVhY2gKKyAgIGJlaW5nIHJlZnJlc2hlZCBhdCB1bnByZWRpY3RhYmxlIGludGVydmFscy4KKworICAgV2hhdCAgaGFwcGVucyB0byB0aGUgb3ZlcmxhcHBpbmcgcmVnaW9uIGRlcGVuZHMgb24gd2hhdCB3bm91dHJlZnJlc2goKQorICAgZG9lcyAgd2l0aCAgaXRzICBhcmd1bWVudCAgLS0gIHdoYXQgcG9ydGlvbnMgb2YgdGhlIGFyZ3VtZW50IHdpbmRvdyBpdAorICAgY29waWVzICB0byAgdGhlIHZpcnR1YWwgc2NyZWVuLiBTb21lIGltcGxlbWVudGF0aW9ucyBkbyAiY2hhbmdlIGNvcHkiLAorICAgY29weWluZyAgZG93biAgb25seSBsb2NhdGlvbnMgaW4gdGhlIHdpbmRvdyB0aGF0IGhhdmUgY2hhbmdlZCAob3IgYmVlbgorICAgbWFya2VkICBjaGFuZ2VkICB3aXRoIHd0b3VjaGxuKCkgYW5kIGZyaWVuZHMpLiBTb21lIGltcGxlbWVudGF0aW9ucyBkbworICAgImVudGlyZSAgY29weSIsICBjb3B5aW5nICBhbGwgIHdpbmRvdyAgbG9jYXRpb25zIHRvIHRoZSB2aXJ0dWFsIHNjcmVlbgorICAgd2hldGhlciBvciBub3QgdGhleSBoYXZlIGNoYW5nZWQuCisKKyAgIFRoZSAgbmN1cnNlcyAgbGlicmFyeSAgaXRzZWxmICBoYXMgIG5vdCBhbHdheXMgYmVlbiBjb25zaXN0ZW50IG9uIHRoaXMKKyAgIHNjb3JlLiAgRHVlICB0byAgYSAgYnVnLCAgdmVyc2lvbnMgIDEuOC43ICB0byAgMS45LjhhIGRpZCBlbnRpcmUgY29weS4KKyAgIFZlcnNpb25zICAxLjguNiAgYW5kICBvbGRlciwgIGFuZCAgdmVyc2lvbnMgMS45LjkgYW5kIG5ld2VyLCBkbyBjaGFuZ2UKKyAgIGNvcHkuCisKKyAgIEZvciAgbW9zdCAgY29tbWVyY2lhbCBjdXJzZXMgaW1wbGVtZW50YXRpb25zLCBpdCBpcyBub3QgZG9jdW1lbnRlZCBhbmQKKyAgIG5vdCAga25vd24gIGZvciBzdXJlIChhdCBsZWFzdCBub3QgdG8gdGhlIG5jdXJzZXMgbWFpbnRhaW5lcnMpIHdoZXRoZXIKKyAgIHRoZXkgIGRvICBjaGFuZ2UgIGNvcHkgb3IgZW50aXJlIGNvcHkuIFdlIGtub3cgdGhhdCBTeXN0ZW0gViByZWxlYXNlIDMKKyAgIGN1cnNlcyAgaGFzICBsb2dpYyBpbiBpdCB0aGF0IGxvb2tzIGxpa2UgYW4gYXR0ZW1wdCB0byBkbyBjaGFuZ2UgY29weSwKKyAgIGJ1dCAgdGhlICBzdXJyb3VuZGluZyAgbG9naWMgYW5kIGRhdGEgcmVwcmVzZW50YXRpb25zIGFyZSBzdWZmaWNpZW50bHkKKyAgIGNvbXBsZXgsICBhbmQgIG91ciAga25vd2xlZGdlIHN1ZmZpY2llbnRseSBpbmRpcmVjdCwgdGhhdCBpdCdzIGhhcmQgdG8KKyAgIGtub3cgIHdoZXRoZXIgIHRoaXMgIGlzICByZWxpYWJsZS4gIEl0ICBpcyAgbm90ICBjbGVhciAgd2hhdCAgdGhlIFNWcjQKKyAgIGRvY3VtZW50YXRpb24gIGFuZCBYU0kgc3RhbmRhcmQgaW50ZW5kLiBUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBiYXJlbHkKKyAgIG1lbnRpb25zICB3bm91dHJlZnJlc2goKTsgIHRoZSAgU1ZyNCAgZG9jdW1lbnRzICBzZWVtIHRvIGJlIGRlc2NyaWJpbmcKKyAgIGVudGlyZS1jb3B5LCBidXQgaXQgaXMgcG9zc2libGUgd2l0aCBzb21lIGVmZm9ydCBhbmQgc3RyYWluaW5nIHRvIHJlYWQKKyAgIHRoZW0gdGhlIG90aGVyIHdheS4KKworICAgSXQgIG1pZ2h0ICB0aGVyZWZvcmUgIGJlIHVud2lzZSB0byByZWx5IG9uIGVpdGhlciBiZWhhdmlvciBpbiBwcm9ncmFtcworICAgdGhhdCAgbWlnaHQgIGhhdmUgIHRvICBiZSAgbGlua2VkICB3aXRoICBvdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zLgorICAgSW5zdGVhZCwgIHlvdSAgY2FuIGRvIGFuIGV4cGxpY2l0IHRvdWNod2luKCkgYmVmb3JlIHRoZSB3bm91dHJlZnJlc2goKQorICAgY2FsbCB0byBndWFyYW50ZWUgYW4gZW50aXJlLWNvbnRlbnRzIGNvcHkgYW55d2hlcmUuCisKKyAgIFRoZSAgcmVhbGx5IGNsZWFuIHdheSB0byBoYW5kbGUgdGhpcyBpcyB0byB1c2UgdGhlIHBhbmVscyBsaWJyYXJ5LiBJZiwKKyAgIHdoZW4gIHlvdSB3YW50IGEgc2NyZWVuIHVwZGF0ZSwgeW91IGRvIHVwZGF0ZV9wYW5lbHMoKSwgaXQgd2lsbCBkbyBhbGwKKyAgIHRoZSAgbmVjZXNzYXJ5ICB3bm91dHJlZnJlc2goKSBjYWxscyBmb3Igd2hhdGV2ZXIgcGFuZWwgc3RhY2tpbmcgb3JkZXIKKyAgIHlvdSAgaGF2ZSAgZGVmaW5lZC4gVGhlbiB5b3UgY2FuIGRvIG9uZSBkb3VwZGF0ZSgpIGFuZCB0aGVyZSB3aWxsIGJlIGEKKyAgIHNpbmdsZSBidXJzdCBvZiBwaHlzaWNhbCBJL08gdGhhdCB3aWxsIGRvIGFsbCB5b3VyIHVwZGF0ZXMuCisKKyAgQmFja2dyb3VuZCBFcmFzZQorCisgICBJZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIGEgdmVyeSBvbGQgdmVyc2lvbnMgb2YgbmN1cnNlcyAoMS44Ljcgb3Igb2xkZXIpCisgICB5b3UgIG1heSBiZSBzdXJwcmlzZWQgYnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBlcmFzZSBmdW5jdGlvbnMuIEluIG9sZGVyCisgICB2ZXJzaW9ucywgIGVyYXNlZCAgYXJlYXMgb2YgYSB3aW5kb3cgd2VyZSBmaWxsZWQgd2l0aCBhIGJsYW5rIG1vZGlmaWVkCisgICBieSAgdGhlICB3aW5kb3cncyAgY3VycmVudCBhdHRyaWJ1dGUgKGFzIHNldCBieSB3YXR0cnNldCgpLCB3YXR0cm9uKCksCisgICB3YXR0cm9mZigpIGFuZCBmcmllbmRzKS4KKworICAgSW4gIG5ld2VyICB2ZXJzaW9ucywgIHRoaXMgaXMgbm90IHNvLiBJbnN0ZWFkLCB0aGUgYXR0cmlidXRlIG9mIGVyYXNlZAorICAgYmxhbmtzICBpcyAgbm9ybWFsICB1bmxlc3MgIGFuZCAgdW50aWwgaXQgaXMgbW9kaWZpZWQgYnkgdGhlIGZ1bmN0aW9ucworICAgYmtnZHNldCgpIG9yIHdia2dkc2V0KCkuCisKKyAgIFRoaXMgY2hhbmdlIGluIGJlaGF2aW9yIGNvbmZvcm1zIG5jdXJzZXMgdG8gU3lzdGVtIFYgUmVsZWFzZSA0IGFuZCB0aGUKKyAgIFhTSSBDdXJzZXMgc3RhbmRhcmQuCisKK1hTSSBDdXJzZXMgQ29uZm9ybWFuY2UKKworICAgVGhlICBuY3Vyc2VzICBsaWJyYXJ5IGlzIGludGVuZGVkIHRvIGJlIGJhc2UtbGV2ZWwgY29uZm9ybWFudCB3aXRoIHRoZQorICAgWFNJICBDdXJzZXMgIHN0YW5kYXJkICBmcm9tICBYL09wZW4uICBNYW55IGV4dGVuZGVkLWxldmVsIGZlYXR1cmVzIChpbgorICAgZmFjdCwgIGFsbW9zdCBhbGwgZmVhdHVyZXMgbm90IGRpcmVjdGx5IGNvbmNlcm5lZCB3aXRoIHdpZGUgY2hhcmFjdGVycworICAgYW5kIGludGVybmF0aW9uYWxpemF0aW9uKSBhcmUgYWxzbyBzdXBwb3J0ZWQuCisKKyAgIE9uZSAgZWZmZWN0ICBvZiAgWFNJICBjb25mb3JtYW5jZSAgaXMgdGhlIGNoYW5nZSBpbiBiZWhhdmlvciBkZXNjcmliZWQKKyAgIHVuZGVyICJCYWNrZ3JvdW5kIEVyYXNlIC0tIENvbXBhdGliaWxpdHkgd2l0aCBPbGQgVmVyc2lvbnMiLgorCisgICBBbHNvLCAgbmN1cnNlcyAgbWVldHMgdGhlIFhTSSByZXF1aXJlbWVudCB0aGF0IGV2ZXJ5IG1hY3JvIGVudHJ5IHBvaW50CisgICBoYXZlICBhICBjb3JyZXNwb25kaW5nICBmdW5jdGlvbiAgd2hpY2ggIG1heSAgYmUgIGxpbmtlZCAgKGFuZCB3aWxsIGJlCisgICBwcm90b3R5cGUtY2hlY2tlZCkgaWYgdGhlIG1hY3JvIGRlZmluaXRpb24gaXMgZGlzYWJsZWQgd2l0aCAjdW5kZWYuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQYW5lbHMgTGlicmFyeQorCisgICBUaGUgIG5jdXJzZXMgIGxpYnJhcnkgIGJ5ICBpdHNlbGYgIHByb3ZpZGVzICBnb29kICBzdXBwb3J0ICBmb3Igc2NyZWVuCisgICBkaXNwbGF5cyBpbiB3aGljaCB0aGUgd2luZG93cyBhcmUgdGlsZWQgKG5vbi1vdmVybGFwcGluZykuIEluIHRoZSBtb3JlCisgICBnZW5lcmFsICBjYXNlICB0aGF0ICB3aW5kb3dzICBtYXkgb3ZlcmxhcCwgeW91IGhhdmUgdG8gdXNlIGEgc2VyaWVzIG9mCisgICB3bm91dHJlZnJlc2goKSAgY2FsbHMgIGZvbGxvd2VkICBieSBhIGRvdXBkYXRlKCksIGFuZCBiZSBjYXJlZnVsIGFib3V0CisgICB0aGUgb3JkZXIgeW91IGRvIHRoZSB3aW5kb3cgcmVmcmVzaGVzIGluLiBJdCBoYXMgdG8gYmUgYm90dG9tLXVwd2FyZHMsCisgICBvdGhlcndpc2UgcGFydHMgb2Ygd2luZG93cyB0aGF0IHNob3VsZCBiZSBvYnNjdXJlZCB3aWxsIHNob3cgdGhyb3VnaC4KKworICAgV2hlbiAgeW91ciAgaW50ZXJmYWNlIGRlc2lnbiBpcyBzdWNoIHRoYXQgd2luZG93cyBtYXkgZGl2ZSBkZWVwZXIgaW50bworICAgdGhlICB2aXNpYmlsaXR5ICBzdGFjayAgb3IgIHBvcCAgdG8gIHRoZSB0b3AgYXQgcnVudGltZSwgdGhlIHJlc3VsdGluZworICAgYm9vay1rZWVwaW5nICBjYW4gIGJlICB0ZWRpb3VzICBhbmQgIGRpZmZpY3VsdCB0byBnZXQgcmlnaHQuIEhlbmNlIHRoZQorICAgcGFuZWxzIGxpYnJhcnkuCisKKyAgIFRoZSAgcGFuZWwgIGxpYnJhcnkgIGZpcnN0ICBhcHBlYXJlZCAgaW4gIEFUJlQgIFN5c3RlbSAgVi4gVGhlIHZlcnNpb24KKyAgIGRvY3VtZW50ZWQgaGVyZSBpcyB0aGUgcGFuZWwgY29kZSBkaXN0cmlidXRlZCB3aXRoIG5jdXJzZXMuCisKK0NvbXBpbGluZyBXaXRoIHRoZSBQYW5lbHMgTGlicmFyeQorCisgICBZb3VyICBwYW5lbHMtdXNpbmcgbW9kdWxlcyBtdXN0IGltcG9ydCB0aGUgcGFuZWxzIGxpYnJhcnkgZGVjbGFyYXRpb25zCisgICB3aXRoCisgICAgICAgICAgI2luY2x1ZGUgPHBhbmVsLmg+CisKKyAgIGFuZCBtdXN0IGJlIGxpbmtlZCBleHBsaWNpdGx5IHdpdGggdGhlIHBhbmVscyBsaWJyYXJ5IHVzaW5nIGFuIC1scGFuZWwKKyAgIGFyZ3VtZW50LiAgTm90ZSAgdGhhdCAgdGhleSAgbXVzdCAgYWxzbyAgbGluayB0aGUgbmN1cnNlcyBsaWJyYXJ5IHdpdGgKKyAgIC1sbmN1cnNlcy4gTWFueSBsaW5rZXJzIGFyZSB0d28tcGFzcyBhbmQgd2lsbCBhY2NlcHQgZWl0aGVyIG9yZGVyLCBidXQKKyAgIGl0IGlzIHN0aWxsIGdvb2QgcHJhY3RpY2UgdG8gcHV0IC1scGFuZWwgZmlyc3QgYW5kIC1sbmN1cnNlcyBzZWNvbmQuCisKK092ZXJ2aWV3IG9mIFBhbmVscworCisgICBBICBwYW5lbCAgb2JqZWN0ICBpcyAgYSB3aW5kb3cgdGhhdCBpcyBpbXBsaWNpdGx5IHRyZWF0ZWQgYXMgcGFydCBvZiBhCisgICBkZWNrICBpbmNsdWRpbmcgIGFsbCAgb3RoZXIgIHBhbmVsICBvYmplY3RzLiAgVGhlIGRlY2sgaGFzIGFuIGltcGxpY2l0CisgICBib3R0b20tdG8tdG9wICB2aXNpYmlsaXR5IG9yZGVyLiBUaGUgcGFuZWxzIGxpYnJhcnkgaW5jbHVkZXMgYW4gdXBkYXRlCisgICBmdW5jdGlvbiAoYW5hbG9nb3VzIHRvIHJlZnJlc2goKSkgdGhhdCBkaXNwbGF5cyBhbGwgcGFuZWxzIGluIHRoZSBkZWNrCisgICBpbiAgdGhlIHByb3BlciBvcmRlciB0byByZXNvbHZlIG92ZXJsYXBzLiBUaGUgc3RhbmRhcmQgd2luZG93LCBzdGRzY3IsCisgICBpcyBjb25zaWRlcmVkIGJlbG93IGFsbCBwYW5lbHMuCisKKyAgIERldGFpbHMgIG9uIHRoZSBwYW5lbHMgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIG1hbiBwYWdlcy4gV2UnbGwKKyAgIGp1c3QgaGl0IHRoZSBoaWdobGlnaHRzIGhlcmUuCisKKyAgIFlvdSAgY3JlYXRlICBhICBwYW5lbCBmcm9tIGEgd2luZG93IGJ5IGNhbGxpbmcgbmV3X3BhbmVsKCkgb24gYSB3aW5kb3cKKyAgIHBvaW50ZXIuICBJdCAgdGhlbiAgYmVjb21lcyB0aGUgdG9wIG9mIHRoZSBkZWNrLiBUaGUgcGFuZWwncyB3aW5kb3cgaXMKKyAgIGF2YWlsYWJsZSBhcyB0aGUgdmFsdWUgb2YgcGFuZWxfd2luZG93KCkgY2FsbGVkIHdpdGggdGhlIHBhbmVsIHBvaW50ZXIKKyAgIGFzIGFyZ3VtZW50LgorCisgICBZb3UgIGNhbiAgZGVsZXRlICBhICBwYW5lbCAocmVtb3ZpbmcgaXQgZnJvbSB0aGUgZGVjaykgd2l0aCBkZWxfcGFuZWwuCisgICBUaGlzICB3aWxsICBub3QgIGRlYWxsb2NhdGUgdGhlIGFzc29jaWF0ZWQgd2luZG93OyB5b3UgaGF2ZSB0byBkbyB0aGF0CisgICB5b3Vyc2VsZi4gIFlvdSBjYW4gcmVwbGFjZSBhIHBhbmVsJ3Mgd2luZG93IHdpdGggYSBkaWZmZXJlbnQgd2luZG93IGJ5CisgICBjYWxsaW5nICByZXBsYWNlX3dpbmRvdy4gIFRoZSBuZXcgd2luZG93IG1heSBiZSBvZiBkaWZmZXJlbnQgc2l6ZTsgdGhlCisgICBwYW5lbCBjb2RlIHdpbGwgcmUtY29tcHV0ZSBhbGwgb3ZlcmxhcHMuIFRoaXMgb3BlcmF0aW9uIGRvZXNuJ3QgY2hhbmdlCisgICB0aGUgcGFuZWwncyBwb3NpdGlvbiBpbiB0aGUgZGVjay4KKworICAgVG8gIG1vdmUgIGEgIHBhbmVsJ3Mgd2luZG93LCB1c2UgbW92ZV9wYW5lbCgpLiBUaGUgbXZ3aW4oKSBmdW5jdGlvbiBvbgorICAgdGhlICBwYW5lbCdzICB3aW5kb3cgIGlzbid0ICBzdWZmaWNpZW50ICBiZWNhdXNlIGl0IGRvZXNuJ3QgdXBkYXRlIHRoZQorICAgcGFuZWxzICBsaWJyYXJ5J3MgIHJlcHJlc2VudGF0aW9uICBvZiAgd2hlcmUgIHRoZSAgd2luZG93cyAgYXJlLiAgVGhpcworICAgb3BlcmF0aW9uIGxlYXZlcyB0aGUgcGFuZWwncyBkZXB0aCwgY29udGVudHMsIGFuZCBzaXplIHVuY2hhbmdlZC4KKworICAgVHdvICAgZnVuY3Rpb25zICAgKHRvcF9wYW5lbCgpLCAgIGJvdHRvbV9wYW5lbCgpKSAgIGFyZSAgcHJvdmlkZWQgIGZvcgorICAgcmVhcnJhbmdpbmcgdGhlIGRlY2suIFRoZSBmaXJzdCBwb3BzIGl0cyBhcmd1bWVudCB3aW5kb3cgdG8gdGhlIHRvcCBvZgorICAgdGhlICBkZWNrOyAgdGhlIHNlY29uZCBzZW5kcyBpdCB0byB0aGUgYm90dG9tLiBFaXRoZXIgb3BlcmF0aW9uIGxlYXZlcworICAgdGhlIHBhbmVsJ3Mgc2NyZWVuIGxvY2F0aW9uLCBjb250ZW50cywgYW5kIHNpemUgdW5jaGFuZ2VkLgorCisgICBUaGUgIGZ1bmN0aW9uIHVwZGF0ZV9wYW5lbHMoKSBkb2VzIGFsbCB0aGUgd25vdXRyZWZyZXNoKCkgY2FsbHMgbmVlZGVkCisgICB0byBwcmVwYXJlIGZvciBkb3VwZGF0ZSgpICh3aGljaCB5b3UgbXVzdCBjYWxsIHlvdXJzZWxmLCBhZnRlcndhcmRzKS4KKworICAgVHlwaWNhbGx5LCAgeW91ICB3aWxsIHdhbnQgdG8gY2FsbCB1cGRhdGVfcGFuZWxzKCkgYW5kIGRvdXBkYXRlKCkganVzdAorICAgYmVmb3JlIGFjY2VwdGluZyBjb21tYW5kIGlucHV0LCBvbmNlIGluIGVhY2ggY3ljbGUgb2YgaW50ZXJhY3Rpb24gd2l0aAorICAgdGhlICB1c2VyLiAgSWYgIHlvdSAgY2FsbCAgdXBkYXRlX3BhbmVscygpICBhZnRlciBlYWNoIGFuZCBldmVyeSBwYW5lbAorICAgd3JpdGUsICB5b3UnbGwgIGdlbmVyYXRlICBhICBsb3QgIG9mICB1bm5lY2Vzc2FyeSByZWZyZXNoIGFjdGl2aXR5IGFuZAorICAgc2NyZWVuIGZsaWNrZXIuCisKK1BhbmVscywgSW5wdXQsIGFuZCB0aGUgU3RhbmRhcmQgU2NyZWVuCisKKyAgIFlvdSAgc2hvdWxkbid0IG1peCB3bm91dHJlZnJlc2goKSBvciB3cmVmcmVzaCgpIG9wZXJhdGlvbnMgd2l0aCBwYW5lbHMKKyAgIGNvZGU7ICB0aGlzIHdpbGwgd29yayBvbmx5IGlmIHRoZSBhcmd1bWVudCB3aW5kb3cgaXMgZWl0aGVyIGluIHRoZSB0b3AKKyAgIHBhbmVsIG9yIHVub2JzY3VyZWQgYnkgYW55IG90aGVyIHBhbmVscy4KKworICAgVGhlICBzdHNkY3IgIHdpbmRvdyAgaXMgIGEgIHNwZWNpYWwgIGNhc2UuICBJdCBpcyBjb25zaWRlcmVkIGJlbG93IGFsbAorICAgcGFuZWxzLiBCZWNhdXNlIGNoYW5nZXMgdG8gcGFuZWxzIG1heSBvYnNjdXJlIHBhcnRzIG9mIHN0ZHNjciwgdGhvdWdoLAorICAgeW91ICBzaG91bGQgIGNhbGwgdXBkYXRlX3BhbmVscygpIGJlZm9yZSBkb3VwZGF0ZSgpIGV2ZW4gd2hlbiB5b3Ugb25seQorICAgY2hhbmdlIHN0ZHNjci4KKworICAgTm90ZSAgdGhhdCAgd2dldGNoICBhdXRvbWF0aWNhbGx5ICBjYWxscyAgd3JlZnJlc2guICBUaGVyZWZvcmUsIGJlZm9yZQorICAgcmVxdWVzdGluZyAgaW5wdXQgIGZyb20gIGEgIHBhbmVsIHdpbmRvdywgeW91IG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZQorICAgcGFuZWwgaXMgdG90YWxseSB1bm9ic2N1cmVkLgorCisgICBUaGVyZSAgaXMgIHByZXNlbnRseSAgbm8gIHdheSB0byBkaXNwbGF5IGNoYW5nZXMgdG8gb25lIG9ic2N1cmVkIHBhbmVsCisgICB3aXRob3V0IHJlcGFpbnRpbmcgYWxsIHBhbmVscy4KKworSGlkaW5nIFBhbmVscworCisgICBJdCdzICBwb3NzaWJsZSAgdG8gIHJlbW92ZSAgYSAgcGFuZWwgIGZyb20gIHRoZSAgZGVjayB0ZW1wb3JhcmlseTsgdXNlCisgICBoaWRlX3BhbmVsICBmb3IgdGhpcy4gVXNlIHNob3dfcGFuZWwoKSB0byByZW5kZXIgaXQgdmlzaWJsZSBhZ2Fpbi4gVGhlCisgICBwcmVkaWNhdGUgIGZ1bmN0aW9uICBwYW5lbF9oaWRkZW4gIHRlc3RzICB3aGV0aGVyICBvciAgbm90ICBhIHBhbmVsIGlzCisgICBoaWRkZW4uCisKKyAgIFRoZSBwYW5lbF91cGRhdGUgY29kZSBpZ25vcmVzIGhpZGRlbiBwYW5lbHMuIFlvdSBjYW5ub3QgZG8gdG9wX3BhbmVsKCkKKyAgIG9yICBib3R0b21fcGFuZWwgIG9uICBhICBoaWRkZW4gIHBhbmVsKCkuICBPdGhlciBwYW5lbHMgb3BlcmF0aW9ucyBhcmUKKyAgIGFwcGxpY2FibGUuCisKK01pc2NlbGxhbmVvdXMgT3RoZXIgRmFjaWxpdGllcworCisgICBJdCdzICBwb3NzaWJsZSAgdG8gbmF2aWdhdGUgdGhlIGRlY2sgdXNpbmcgdGhlIGZ1bmN0aW9ucyBwYW5lbF9hYm92ZSgpCisgICBhbmQgIHBhbmVsX2JlbG93LiAgSGFuZGVkIGEgcGFuZWwgcG9pbnRlciwgdGhleSByZXR1cm4gdGhlIHBhbmVsIGFib3ZlCisgICBvciAgYmVsb3cgIHRoYXQgIHBhbmVsLiAgSGFuZGVkICBOVUxMLCAgdGhleSByZXR1cm4gdGhlIGJvdHRvbS1tb3N0IG9yCisgICB0b3AtbW9zdCBwYW5lbC4KKworICAgRXZlcnkgIHBhbmVsICBoYXMgIGFuICBhc3NvY2lhdGVkICB1c2VyIHBvaW50ZXIsIG5vdCB1c2VkIGJ5IHRoZSBwYW5lbAorICAgY29kZSwgIHRvICB3aGljaCAgeW91ICBjYW4gIGF0dGFjaCAgYXBwbGljYXRpb24gZGF0YS4gU2VlIHRoZSBtYW4gcGFnZQorICAgZG9jdW1lbnRhdGlvbiBvZiBzZXRfcGFuZWxfdXNlcnB0cigpIGFuZCBwYW5lbF91c2VycHRyIGZvciBkZXRhaWxzLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE1lbnUgTGlicmFyeQorCisgICBBIG1lbnUgaXMgYSBzY3JlZW4gZGlzcGxheSB0aGF0IGFzc2lzdHMgdGhlIHVzZXIgdG8gY2hvb3NlIHNvbWUgc3Vic2V0CisgICBvZiAgYSAgZ2l2ZW4gc2V0IG9mIGl0ZW1zLiBUaGUgbWVudSBsaWJyYXJ5IGlzIGEgY3Vyc2VzIGV4dGVuc2lvbiB0aGF0CisgICBzdXBwb3J0cyAgZWFzeSAgcHJvZ3JhbW1pbmcgIG9mICBtZW51ICBoaWVyYXJjaGllcyAgd2l0aCBhIHVuaWZvcm0gYnV0CisgICBmbGV4aWJsZSBpbnRlcmZhY2UuCisKKyAgIFRoZSAgbWVudSAgbGlicmFyeSAgZmlyc3QgIGFwcGVhcmVkICBpbiAgQVQmVCAgU3lzdGVtICBWLiAgVGhlIHZlcnNpb24KKyAgIGRvY3VtZW50ZWQgaGVyZSBpcyB0aGUgbWVudSBjb2RlIGRpc3RyaWJ1dGVkIHdpdGggbmN1cnNlcy4KKworQ29tcGlsaW5nIFdpdGggdGhlIG1lbnUgTGlicmFyeQorCisgICBZb3VyIG1lbnUtdXNpbmcgbW9kdWxlcyBtdXN0IGltcG9ydCB0aGUgbWVudSBsaWJyYXJ5IGRlY2xhcmF0aW9ucyB3aXRoCisgICAgICAgICAgI2luY2x1ZGUgPG1lbnUuaD4KKworICAgYW5kICBtdXN0ICBiZSBsaW5rZWQgZXhwbGljaXRseSB3aXRoIHRoZSBtZW51cyBsaWJyYXJ5IHVzaW5nIGFuIC1sbWVudQorICAgYXJndW1lbnQuICBOb3RlICB0aGF0ICB0aGV5ICBtdXN0ICBhbHNvICBsaW5rIHRoZSBuY3Vyc2VzIGxpYnJhcnkgd2l0aAorICAgLWxuY3Vyc2VzLiBNYW55IGxpbmtlcnMgYXJlIHR3by1wYXNzIGFuZCB3aWxsIGFjY2VwdCBlaXRoZXIgb3JkZXIsIGJ1dAorICAgaXQgaXMgc3RpbGwgZ29vZCBwcmFjdGljZSB0byBwdXQgLWxtZW51IGZpcnN0IGFuZCAtbG5jdXJzZXMgc2Vjb25kLgorCitPdmVydmlldyBvZiBNZW51cworCisgICBUaGUgIG1lbnVzICBjcmVhdGVkICBieSAgdGhpcyAgbGlicmFyeSBjb25zaXN0IG9mIGNvbGxlY3Rpb25zIG9mIGl0ZW1zCisgICBpbmNsdWRpbmcgIGEgIG5hbWUgIHN0cmluZyBwYXJ0IGFuZCBhIGRlc2NyaXB0aW9uIHN0cmluZyBwYXJ0LiBUbyBtYWtlCisgICBtZW51cywgIHlvdSAgY3JlYXRlICBncm91cHMgIG9mIHRoZXNlIGl0ZW1zIGFuZCBjb25uZWN0IHRoZW0gd2l0aCBtZW51CisgICBmcmFtZSBvYmplY3RzLgorCisgICBUaGUgIG1lbnUgY2FuIHRoZW4gYnkgcG9zdGVkLCB0aGF0IGlzIHdyaXR0ZW4gdG8gYW4gYXNzb2NpYXRlZCB3aW5kb3cuCisgICBBY3R1YWxseSwgZWFjaCBtZW51IGhhcyB0d28gYXNzb2NpYXRlZCB3aW5kb3dzOyBhIGNvbnRhaW5pbmcgd2luZG93IGluCisgICB3aGljaCAgdGhlICBwcm9ncmFtbWVyIGNhbiBzY3JpYmJsZSB0aXRsZXMgb3IgYm9yZGVycywgYW5kIGEgc3Vid2luZG93CisgICBpbiB3aGljaCB0aGUgbWVudSBpdGVtcyBwcm9wZXIgYXJlIGRpc3BsYXllZC4gSWYgdGhpcyBzdWJ3aW5kb3cgaXMgdG9vCisgICBzbWFsbCAgdG8gIGRpc3BsYXkgIGFsbCB0aGUgaXRlbXMsIGl0IHdpbGwgYmUgYSBzY3JvbGxhYmxlIHZpZXdwb3J0IG9uCisgICB0aGUgY29sbGVjdGlvbiBvZiBpdGVtcy4KKworICAgQSAgbWVudSBtYXkgYWxzbyBiZSB1bnBvc3RlZCAodGhhdCBpcywgdW5kaXNwbGF5ZWQpLCBhbmQgZmluYWxseSBmcmVlZAorICAgdG8gIG1ha2UgIHRoZSAgc3RvcmFnZSAgYXNzb2NpYXRlZCB3aXRoIGl0IGFuZCBpdHMgaXRlbXMgYXZhaWxhYmxlIGZvcgorICAgcmUtdXNlLgorCisgICBUaGUgZ2VuZXJhbCBmbG93IG9mIGNvbnRyb2wgb2YgYSBtZW51IHByb2dyYW0gbG9va3MgbGlrZSB0aGlzOgorICAgIDEuIEluaXRpYWxpemUgY3Vyc2VzLgorICAgIDIuIENyZWF0ZSB0aGUgbWVudSBpdGVtcywgdXNpbmcgbmV3X2l0ZW0oKS4KKyAgICAzLiBDcmVhdGUgdGhlIG1lbnUgdXNpbmcgbmV3X21lbnUoKS4KKyAgICA0LiBQb3N0IHRoZSBtZW51IHVzaW5nIHBvc3RfbWVudSgpLgorICAgIDUuIFJlZnJlc2ggdGhlIHNjcmVlbi4KKyAgICA2LiBQcm9jZXNzIHVzZXIgcmVxdWVzdHMgdmlhIGFuIGlucHV0IGxvb3AuCisgICAgNy4gVW5wb3N0IHRoZSBtZW51IHVzaW5nIHVucG9zdF9tZW51KCkuCisgICAgOC4gRnJlZSB0aGUgbWVudSwgdXNpbmcgZnJlZV9tZW51KCkuCisgICAgOS4gRnJlZSB0aGUgaXRlbXMgdXNpbmcgZnJlZV9pdGVtKCkuCisgICAxMC4gVGVybWluYXRlIGN1cnNlcy4KKworU2VsZWN0aW5nIGl0ZW1zCisKKyAgIE1lbnVzICBtYXkgIGJlICBtdWx0aS12YWx1ZWQgIG9yICAodGhlIGRlZmF1bHQpIHNpbmdsZS12YWx1ZWQgKHNlZSB0aGUKKyAgIG1hbnVhbCAgcGFnZSAgbWVudV9vcHRzKDN4KSAgdG8gIHNlZSAgaG93IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCkuIEJvdGgKKyAgIHR5cGVzIGFsd2F5cyBoYXZlIGEgY3VycmVudCBpdGVtLgorCisgICBGcm9tICBhICBzaW5nbGUtdmFsdWVkICBtZW51IHlvdSBjYW4gcmVhZCB0aGUgc2VsZWN0ZWQgdmFsdWUgc2ltcGx5IGJ5CisgICBsb29raW5nICBhdCAgdGhlICBjdXJyZW50ICBpdGVtLiBGcm9tIGEgbXVsdGktdmFsdWVkIG1lbnUsIHlvdSBnZXQgdGhlCisgICBzZWxlY3RlZCAgc2V0ICBieSAgbG9vcGluZyB0aHJvdWdoIHRoZSBpdGVtcyBhcHBseWluZyB0aGUgaXRlbV92YWx1ZSgpCisgICBwcmVkaWNhdGUgIGZ1bmN0aW9uLiAgWW91ciAgbWVudS1wcm9jZXNzaW5nICBjb2RlIGNhbiB1c2UgdGhlIGZ1bmN0aW9uCisgICBzZXRfaXRlbV92YWx1ZSgpIHRvIGZsYWcgdGhlIGl0ZW1zIGluIHRoZSBzZWxlY3Qgc2V0LgorCisgICBNZW51ICAgaXRlbXMgICBjYW4gIGJlICBtYWRlICB1bnNlbGVjdGFibGUgIHVzaW5nICBzZXRfaXRlbV9vcHRzKCkgIG9yCisgICBpdGVtX29wdHNfb2ZmKCkgIHdpdGggIHRoZSAgT19TRUxFQ1RBQkxFICBhcmd1bWVudC4gIFRoaXMgIGlzIHRoZSBvbmx5CisgICBvcHRpb24gIHNvICBmYXIgIGRlZmluZWQgZm9yIG1lbnVzLCBidXQgaXQgaXMgZ29vZCBwcmFjdGljZSB0byBjb2RlIGFzCisgICB0aG91Z2ggb3RoZXIgb3B0aW9uIGJpdHMgbWlnaHQgYmUgb24uCisKK01lbnUgRGlzcGxheQorCisgICBUaGUgIG1lbnUgIGxpYnJhcnkgIGNhbGN1bGF0ZXMgYSBtaW5pbXVtIGRpc3BsYXkgc2l6ZSBmb3IgeW91ciB3aW5kb3csCisgICBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyAgICAgKiBUaGUgbnVtYmVyIGFuZCBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgbWVudSBpdGVtcworICAgICAqIFdoZXRoZXIgdGhlIE9fUk9XTUFKT1Igb3B0aW9uIGlzIGVuYWJsZWQKKyAgICAgKiBXaGV0aGVyIGRpc3BsYXkgb2YgZGVzY3JpcHRpb25zIGlzIGVuYWJsZWQKKyAgICAgKiBXaGF0ZXZlciBtZW51IGZvcm1hdCBtYXkgaGF2ZSBiZWVuIHNldCBieSB0aGUgcHJvZ3JhbW1lcgorICAgICAqIFRoZSAgbGVuZ3RoIG9mIHRoZSBtZW51IG1hcmsgc3RyaW5nIHVzZWQgZm9yIGhpZ2hsaWdodGluZyBzZWxlY3RlZAorICAgICAgIGl0ZW1zCisKKyAgIFRoZSAgZnVuY3Rpb24gIHNldF9tZW51X2Zvcm1hdCgpIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBtYXhpbXVtIHNpemUgb2YKKyAgIHRoZSB2aWV3cG9ydCBvciBtZW51IHBhZ2UgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSBtZW51IGl0ZW1zLiBZb3UKKyAgIGNhbiByZXRyaWV2ZSBhbnkgZm9ybWF0IGFzc29jaWF0ZWQgd2l0aCBhIG1lbnUgd2l0aCBtZW51X2Zvcm1hdCgpLiBUaGUKKyAgIGRlZmF1bHQgZm9ybWF0IGlzIHJvd3M9MTYsIGNvbHVtbnM9MS4KKworICAgVGhlIGFjdHVhbCBtZW51IHBhZ2UgbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgZm9ybWF0IHNpemUuIFRoaXMgZGVwZW5kcworICAgb24gIHRoZSBpdGVtIG51bWJlciBhbmQgc2l6ZSBhbmQgd2hldGhlciBPX1JPV01BSk9SIGlzIG9uLiBUaGlzIG9wdGlvbgorICAgKG9uICBieSAgZGVmYXVsdCkgY2F1c2VzIG1lbnUgaXRlbXMgdG8gYmUgZGlzcGxheWVkIGluIGEgYHJhc3Rlci1zY2FuJworICAgcGF0dGVybiwgc28gdGhhdCBpZiBtb3JlIHRoYW4gb25lIGl0ZW0gd2lsbCBmaXQgaG9yaXpvbnRhbGx5IHRoZSBmaXJzdAorICAgY291cGxlICBvZiAgaXRlbXMgIGFyZSBzaWRlLWJ5LXNpZGUgaW4gdGhlIHRvcCByb3cuIFRoZSBhbHRlcm5hdGl2ZSBpcworICAgY29sdW1uLW1ham9yICBkaXNwbGF5LCAgd2hpY2ggIHRyaWVzIHRvIHB1dCB0aGUgZmlyc3Qgc2V2ZXJhbCBpdGVtcyBpbgorICAgdGhlIGZpcnN0IGNvbHVtbi4KKworICAgQXMgIG1lbnRpb25lZCBhYm92ZSwgYSBtZW51IGZvcm1hdCBub3QgbGFyZ2UgZW5vdWdoIHRvIGFsbG93IGFsbCBpdGVtcworICAgdG8gIGZpdCAgb24tc2NyZWVuICB3aWxsICByZXN1bHQgIGluIGEgbWVudSBkaXNwbGF5IHRoYXQgaXMgdmVydGljYWxseQorICAgc2Nyb2xsYWJsZS4KKworICAgWW91ICBjYW4gIHNjcm9sbCAgaXQgIHdpdGggIHJlcXVlc3RzIHRvIHRoZSBtZW51IGRyaXZlciwgd2hpY2ggd2lsbCBiZQorICAgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIG9uIG1lbnUgaW5wdXQgaGFuZGxpbmcuCisKKyAgIEVhY2ggIG1lbnUgIGhhcyBhIG1hcmsgc3RyaW5nIHVzZWQgdG8gdmlzdWFsbHkgdGFnIHNlbGVjdGVkIGl0ZW1zOyBzZWUKKyAgIHRoZSBtZW51X21hcmsoM3gpIG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLiBUaGUgbWFyayBzdHJpbmcgbGVuZ3RoIGFsc28KKyAgIGluZmx1ZW5jZXMgdGhlIG1lbnUgcGFnZSBzaXplLgorCisgICBUaGUgIGZ1bmN0aW9uICBzY2FsZV9tZW51KCkgIHJldHVybnMgdGhlIG1pbmltdW0gZGlzcGxheSBzaXplIHRoYXQgdGhlCisgICBtZW51ICBjb2RlICBjb21wdXRlcyAgZnJvbSAgYWxsICB0aGVzZSAgZmFjdG9ycy4gIFRoZXJlIGFyZSBvdGhlciBtZW51CisgICBkaXNwbGF5ICBhdHRyaWJ1dGVzICBpbmNsdWRpbmcgIGEgIHNlbGVjdCAgYXR0cmlidXRlLCBhbiBhdHRyaWJ1dGUgZm9yCisgICBzZWxlY3RhYmxlICBpdGVtcywgIGFuICBhdHRyaWJ1dGUgIGZvciAgdW5zZWxlY3RhYmxlICBpdGVtcywgYW5kIGEgcGFkCisgICBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBpdGVtIG5hbWUgdGV4dCBmcm9tIGRlc2NyaXB0aW9uIHRleHQuIFRoZXNlCisgICBoYXZlICByZWFzb25hYmxlICBkZWZhdWx0cyB3aGljaCB0aGUgbGlicmFyeSBhbGxvd3MgeW91IHRvIGNoYW5nZSAoc2VlCisgICB0aGUgbWVudV9hdHRyaWJzKDN4KSBtYW51YWwgcGFnZS4KKworTWVudSBXaW5kb3dzCisKKyAgIEVhY2ggIG1lbnUgaGFzLCBhcyBtZW50aW9uZWQgcHJldmlvdXNseSwgYSBwYWlyIG9mIGFzc29jaWF0ZWQgd2luZG93cy4KKyAgIEJvdGggdGhlc2Ugd2luZG93cyBhcmUgcGFpbnRlZCB3aGVuIHRoZSBtZW51IGlzIHBvc3RlZCBhbmQgZXJhc2VkIHdoZW4KKyAgIHRoZSBtZW51IGlzIHVucG9zdGVkLgorCisgICBUaGUgIG91dGVyICBvciAgZnJhbWUgIHdpbmRvdyAgaXMgIG5vdCAgb3RoZXJ3aXNlICB0b3VjaGVkIGJ5IHRoZSBtZW51CisgICByb3V0aW5lcy4gSXQgZXhpc3RzIHNvIHRoZSBwcm9ncmFtbWVyIGNhbiBhc3NvY2lhdGUgYSB0aXRsZSwgYSBib3JkZXIsCisgICBvciAgcGVyaGFwcyAgaGVscCB0ZXh0IHdpdGggdGhlIG1lbnUgYW5kIGhhdmUgaXQgcHJvcGVybHkgcmVmcmVzaGVkIG9yCisgICBlcmFzZWQgYXQgcG9zdC91bnBvc3QgdGltZS4gVGhlIGlubmVyIHdpbmRvdyBvciBzdWJ3aW5kb3cgaXMgd2hlcmUgdGhlCisgICBjdXJyZW50IG1lbnUgcGFnZSBpcyBkaXNwbGF5ZWQuCisKKyAgIEJ5ICBkZWZhdWx0LCAgYm90aCAgd2luZG93cyAgYXJlICBzdGRzY3IuICBZb3UgIGNhbiAgc2V0IHRoZW0gd2l0aCB0aGUKKyAgIGZ1bmN0aW9ucyBpbiBtZW51X3dpbigzeCkuCisKKyAgIFdoZW4gIHlvdSAgY2FsbCBwb3N0X21lbnUoKSwgeW91IHdyaXRlIHRoZSBtZW51IHRvIGl0cyBzdWJ3aW5kb3cuIFdoZW4KKyAgIHlvdSAgY2FsbCAgdW5wb3N0X21lbnUoKSwgeW91IGVyYXNlIHRoZSBzdWJ3aW5kb3csIEhvd2V2ZXIsIG5laXRoZXIgb2YKKyAgIHRoZXNlICBhY3R1YWxseSAgbW9kaWZpZXMgIHRoZSAgc2NyZWVuLiBUbyBkbyB0aGF0LCBjYWxsIHdyZWZyZXNoKCkgb3IKKyAgIHNvbWUgZXF1aXZhbGVudC4KKworUHJvY2Vzc2luZyBNZW51IElucHV0CisKKyAgIFRoZSAgbWFpbiAgbG9vcCBvZiB5b3VyIG1lbnUtcHJvY2Vzc2luZyBjb2RlIHNob3VsZCBjYWxsIG1lbnVfZHJpdmVyKCkKKyAgIHJlcGVhdGVkbHkuICBUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhpcyByb3V0aW5lIGlzIGEgbWVudSBwb2ludGVyOyB0aGUKKyAgIHNlY29uZCAgaXMgIGEgIG1lbnUgIGNvbW1hbmQgIGNvZGUuIFlvdSBzaG91bGQgd3JpdGUgYW4gaW5wdXQtZmV0Y2hpbmcKKyAgIHJvdXRpbmUgdGhhdCBtYXBzIGlucHV0IGNoYXJhY3RlcnMgdG8gbWVudSBjb21tYW5kIGNvZGVzLCBhbmQgcGFzcyBpdHMKKyAgIG91dHB1dCAgdG8gIG1lbnVfZHJpdmVyKCkuIFRoZSBtZW51IGNvbW1hbmQgY29kZXMgYXJlIGZ1bGx5IGRvY3VtZW50ZWQKKyAgIGluIG1lbnVfZHJpdmVyKDN4KS4KKworICAgVGhlICBzaW1wbGVzdCAgZ3JvdXAgb2YgY29tbWFuZCBjb2RlcyBpcyBSRVFfTkVYVF9JVEVNLCBSRVFfUFJFVl9JVEVNLAorICAgUkVRX0ZJUlNUX0lURU0sICAgICBSRVFfTEFTVF9JVEVNLCAgICAgUkVRX1VQX0lURU0sICAgICBSRVFfRE9XTl9JVEVNLAorICAgUkVRX0xFRlRfSVRFTSwgIFJFUV9SSUdIVF9JVEVNLiAgVGhlc2UgIGNoYW5nZSAgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorICAgaXRlbS4gIFRoZXNlICByZXF1ZXN0cyBtYXkgY2F1c2Ugc2Nyb2xsaW5nIG9mIHRoZSBtZW51IHBhZ2UgaWYgaXQgb25seQorICAgcGFydGlhbGx5IGRpc3BsYXllZC4KKworICAgVGhlcmUgIGFyZSAgZXhwbGljaXQgIHJlcXVlc3RzICBmb3IgIHNjcm9sbGluZyAgd2hpY2ggIGFsc28gY2hhbmdlIHRoZQorICAgY3VycmVudCAgaXRlbSAgKGJlY2F1c2UgIHRoZSAgc2VsZWN0IGxvY2F0aW9uIGRvZXMgbm90IGNoYW5nZSwgYnV0IHRoZQorICAgaXRlbSAgICB0aGVyZSAgIGRvZXMpLiAgIFRoZXNlICAgYXJlICAgUkVRX1NDUl9ETElORSwgICBSRVFfU0NSX1VMSU5FLAorICAgUkVRX1NDUl9EUEFHRSwgYW5kIFJFUV9TQ1JfVVBBR0UuCisKKyAgIFRoZSAgUkVRX1RPR0dMRV9JVEVNICBzZWxlY3RzIG9yIGRlc2VsZWN0cyB0aGUgY3VycmVudCBpdGVtLiBJdCBpcyBmb3IKKyAgIHVzZSAgaW4gIG11bHRpLXZhbHVlZCAgbWVudXM7IGlmIHlvdSB1c2UgaXQgd2l0aCBPX09ORVZBTFVFIG9uLCB5b3UnbGwKKyAgIGdldCBhbiBlcnJvciByZXR1cm4gKEVfUkVRVUVTVF9ERU5JRUQpLgorCisgICBFYWNoICBtZW51ICBoYXMgIGFuIGFzc29jaWF0ZWQgcGF0dGVybiBidWZmZXIuIFRoZSBtZW51X2RyaXZlcigpIGxvZ2ljCisgICB0cmllcyAgdG8gIGFjY3VtdWxhdGUgIHByaW50YWJsZSAgQVNDSUkgIGNoYXJhY3RlcnMgIHBhc3NlZCBpbiBpbiB0aGF0CisgICBidWZmZXI7ICB3aGVuICBpdCAgbWF0Y2hlcyBhIHByZWZpeCBvZiBhbiBpdGVtIG5hbWUsIHRoYXQgaXRlbSAob3IgdGhlCisgICBuZXh0ICBtYXRjaGluZyAgaXRlbSkgIGlzIHNlbGVjdGVkLiBJZiBhcHBlbmRpbmcgYSBjaGFyYWN0ZXIgeWllbGRzIG5vCisgICBuZXcgIG1hdGNoLCAgdGhhdCAgY2hhcmFjdGVyICBpcyAgZGVsZXRlZCBmcm9tIHRoZSBwYXR0ZXJuIGJ1ZmZlciwgYW5kCisgICBtZW51X2RyaXZlcigpIHJldHVybnMgRV9OT19NQVRDSC4KKworICAgU29tZSAgcmVxdWVzdHMgIGNoYW5nZSB0aGUgcGF0dGVybiBidWZmZXIgZGlyZWN0bHk6IFJFUV9DTEVBUl9QQVRURVJOLAorICAgUkVRX0JBQ0tfUEFUVEVSTiwgIFJFUV9ORVhUX01BVENILCAgUkVRX1BSRVZfTUFUQ0guIFRoZSBsYXR0ZXIgdHdvIGFyZQorICAgdXNlZnVsICB3aGVuICBwYXR0ZXJuICBidWZmZXIgIGlucHV0ICBtYXRjaGVzICBtb3JlIHRoYW4gb25lIGl0ZW0gaW4gYQorICAgbXVsdGktdmFsdWVkIG1lbnUuCisKKyAgIEVhY2ggIHN1Y2Nlc3NmdWwgIHNjcm9sbCBvciBpdGVtIG5hdmlnYXRpb24gcmVxdWVzdCBjbGVhcnMgdGhlIHBhdHRlcm4KKyAgIGJ1ZmZlci4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSBwYXR0ZXJuIGJ1ZmZlciBleHBsaWNpdGx5IHdpdGgKKyAgIHNldF9tZW51X3BhdHRlcm4oKS4KKworICAgRmluYWxseSwgIG1lbnUgIGRyaXZlciAgcmVxdWVzdHMgIGFib3ZlICB0aGUgIGNvbnN0YW50IE1BWF9DT01NQU5EIGFyZQorICAgY29uc2lkZXJlZCAgIGFwcGxpY2F0aW9uLXNwZWNpZmljICBjb21tYW5kcy4gIFRoZSAgbWVudV9kcml2ZXIoKSAgY29kZQorICAgaWdub3JlcyB0aGVtIGFuZCByZXR1cm5zIEVfVU5LTk9XTl9DT01NQU5ELgorCitNaXNjZWxsYW5lb3VzIE90aGVyIEZlYXR1cmVzCisKKyAgIFZhcmlvdXMgIG1lbnUgIG9wdGlvbnMgY2FuIGFmZmVjdCB0aGUgcHJvY2Vzc2luZyBhbmQgdmlzdWFsIGFwcGVhcmFuY2UKKyAgIGFuZCBpbnB1dCBwcm9jZXNzaW5nIG9mIG1lbnVzLiBTZWUgbWVudV9vcHRzKDN4KSBmb3IgZGV0YWlscy4KKworICAgSXQgIGlzIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgY3VycmVudCBpdGVtIGZyb20gYXBwbGljYXRpb24gY29kZTsgdGhpcworICAgaXMgIHVzZWZ1bCAgaWYgIHlvdSAgd2FudCB0byB3cml0ZSB5b3VyIG93biBuYXZpZ2F0aW9uIHJlcXVlc3RzLiBJdCBpcworICAgYWxzbyAgcG9zc2libGUgIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB0b3Agcm93IG9mIHRoZSBtZW51IGRpc3BsYXkuIFNlZQorICAgbWl0ZW1fY3VycmVudCgzeCkuICBJZiAgeW91ciAgYXBwbGljYXRpb24gIG5lZWRzICB0byAgY2hhbmdlICB0aGUgbWVudQorICAgc3Vid2luZG93ICBjdXJzb3IgZm9yIGFueSByZWFzb24sIHBvc19tZW51X2N1cnNvcigpIHdpbGwgcmVzdG9yZSBpdCB0bworICAgdGhlIGNvcnJlY3QgbG9jYXRpb24gZm9yIGNvbnRpbnVpbmcgbWVudSBkcml2ZXIgcHJvY2Vzc2luZy4KKworICAgSXQgIGlzICBwb3NzaWJsZSAgdG8gc2V0IGhvb2tzIHRvIGJlIGNhbGxlZCBhdCBtZW51IGluaXRpYWxpemF0aW9uIGFuZAorICAgd3JhcHVwICAgdGltZSwgICBhbmQgICB3aGVuZXZlciAgIHRoZSAgIHNlbGVjdGVkICAgaXRlbSAgY2hhbmdlcy4gIFNlZQorICAgbWVudV9ob29rKDN4KS4KKworICAgRWFjaCAgaXRlbSwgYW5kIGVhY2ggbWVudSwgaGFzIGFuIGFzc29jaWF0ZWQgdXNlciBwb2ludGVyIG9uIHdoaWNoIHlvdQorICAgY2FuIGhhbmcgYXBwbGljYXRpb24gZGF0YS4gU2VlIG1pdGVtX3VzZXJwdHIoM3gpIGFuZCBtZW51X3VzZXJwdHIoM3gpLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEZvcm1zIExpYnJhcnkKKworICAgVGhlICBmb3JtIGxpYnJhcnkgaXMgYSBjdXJzZXMgZXh0ZW5zaW9uIHRoYXQgc3VwcG9ydHMgZWFzeSBwcm9ncmFtbWluZworICAgb2Ygb24tc2NyZWVuIGZvcm1zIGZvciBkYXRhIGVudHJ5IGFuZCBwcm9ncmFtIGNvbnRyb2wuCisKKyAgIFRoZSAgZm9ybSAgbGlicmFyeSAgZmlyc3QgIGFwcGVhcmVkICBpbiAgQVQmVCAgU3lzdGVtICBWLiAgVGhlIHZlcnNpb24KKyAgIGRvY3VtZW50ZWQgaGVyZSBpcyB0aGUgZm9ybSBjb2RlIGRpc3RyaWJ1dGVkIHdpdGggbmN1cnNlcy4KKworQ29tcGlsaW5nIFdpdGggdGhlIGZvcm0gTGlicmFyeQorCisgICBZb3VyIGZvcm0tdXNpbmcgbW9kdWxlcyBtdXN0IGltcG9ydCB0aGUgZm9ybSBsaWJyYXJ5IGRlY2xhcmF0aW9ucyB3aXRoCisgICAgICAgICAgI2luY2x1ZGUgPGZvcm0uaD4KKworICAgYW5kICBtdXN0ICBiZSBsaW5rZWQgZXhwbGljaXRseSB3aXRoIHRoZSBmb3JtcyBsaWJyYXJ5IHVzaW5nIGFuIC1sZm9ybQorICAgYXJndW1lbnQuICBOb3RlICB0aGF0ICB0aGV5ICBtdXN0ICBhbHNvICBsaW5rIHRoZSBuY3Vyc2VzIGxpYnJhcnkgd2l0aAorICAgLWxuY3Vyc2VzLiBNYW55IGxpbmtlcnMgYXJlIHR3by1wYXNzIGFuZCB3aWxsIGFjY2VwdCBlaXRoZXIgb3JkZXIsIGJ1dAorICAgaXQgaXMgc3RpbGwgZ29vZCBwcmFjdGljZSB0byBwdXQgLWxmb3JtIGZpcnN0IGFuZCAtbG5jdXJzZXMgc2Vjb25kLgorCitPdmVydmlldyBvZiBGb3JtcworCisgICBBICBmb3JtICBpcyAgYSAgY29sbGVjdGlvbiBvZiBmaWVsZHM7IGVhY2ggZmllbGQgbWF5IGJlIGVpdGhlciBhIGxhYmVsCisgICAoZXhwbGFuYXRvcnkgIHRleHQpICBvciAgYSAgZGF0YS1lbnRyeSAgbG9jYXRpb24uICBMb25nICBmb3JtcyAgbWF5IGJlCisgICBzZWdtZW50ZWQgaW50byBwYWdlczsgZWFjaCBlbnRyeSB0byBhIG5ldyBwYWdlIGNsZWFycyB0aGUgc2NyZWVuLgorCisgICBUbyAgbWFrZSBmb3JtcywgeW91IGNyZWF0ZSBncm91cHMgb2YgZmllbGRzIGFuZCBjb25uZWN0IHRoZW0gd2l0aCBmb3JtCisgICBmcmFtZSBvYmplY3RzOyB0aGUgZm9ybSBsaWJyYXJ5IG1ha2VzIHRoaXMgcmVsYXRpdmVseSBzaW1wbGUuCisKKyAgIE9uY2UgIGRlZmluZWQsICBhIGZvcm0gY2FuIGJlIHBvc3RlZCwgdGhhdCBpcyB3cml0dGVuIHRvIGFuIGFzc29jaWF0ZWQKKyAgIHdpbmRvdy4gIEFjdHVhbGx5LCAgZWFjaCBmb3JtIGhhcyB0d28gYXNzb2NpYXRlZCB3aW5kb3dzOyBhIGNvbnRhaW5pbmcKKyAgIHdpbmRvdyAgaW4gIHdoaWNoIHRoZSBwcm9ncmFtbWVyIGNhbiBzY3JpYmJsZSB0aXRsZXMgb3IgYm9yZGVycywgYW5kIGEKKyAgIHN1YndpbmRvdyBpbiB3aGljaCB0aGUgZm9ybSBmaWVsZHMgcHJvcGVyIGFyZSBkaXNwbGF5ZWQuCisKKyAgIEFzICB0aGUgIGZvcm0gIHVzZXIgIGZpbGxzIG91dCB0aGUgcG9zdGVkIGZvcm0sIG5hdmlnYXRpb24gYW5kIGVkaXRpbmcKKyAgIGtleXMgIHN1cHBvcnQgIG1vdmVtZW50IGJldHdlZW4gZmllbGRzLCBlZGl0aW5nIGtleXMgc3VwcG9ydCBtb2RpZnlpbmcKKyAgIGZpZWxkLCAgYW5kIHBsYWluIHRleHQgYWRkcyB0byBvciBjaGFuZ2VzIGRhdGEgaW4gYSBjdXJyZW50IGZpZWxkLiBUaGUKKyAgIGZvcm0gIGxpYnJhcnkgIGFsbG93cyB5b3UgKHRoZSBmb3JtcyBkZXNpZ25lcikgdG8gYmluZCBlYWNoIG5hdmlnYXRpb24KKyAgIGFuZCAgZWRpdGluZyAga2V5ICB0byBhbnkga2V5c3Ryb2tlIGFjY2VwdGVkIGJ5IGN1cnNlcyBGaWVsZHMgbWF5IGhhdmUKKyAgIHZhbGlkYXRpb24gIGNvbmRpdGlvbnMgb24gdGhlbSwgc28gdGhhdCB0aGV5IGNoZWNrIGlucHV0IGRhdGEgZm9yIHR5cGUKKyAgIGFuZCAgdmFsdWUuICBUaGUgZm9ybSBsaWJyYXJ5IHN1cHBsaWVzIGEgcmljaCBzZXQgb2YgcHJlLWRlZmluZWQgZmllbGQKKyAgIHR5cGVzLCBhbmQgbWFrZXMgaXQgcmVsYXRpdmVseSBlYXN5IHRvIGRlZmluZSBuZXcgb25lcy4KKworICAgT25jZSBpdHMgdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIChvciBhYm9ydGVkKSwgYSBmb3JtIG1heSBiZSB1bnBvc3RlZAorICAgKHRoYXQgIGlzLCAgdW5kaXNwbGF5ZWQpLCAgYW5kICBmaW5hbGx5ICBmcmVlZCAgdG8gIG1ha2UgIHRoZSAgc3RvcmFnZQorICAgYXNzb2NpYXRlZCB3aXRoIGl0IGFuZCBpdHMgaXRlbXMgYXZhaWxhYmxlIGZvciByZS11c2UuCisKKyAgIFRoZSBnZW5lcmFsIGZsb3cgb2YgY29udHJvbCBvZiBhIGZvcm0gcHJvZ3JhbSBsb29rcyBsaWtlIHRoaXM6CisgICAgMS4gSW5pdGlhbGl6ZSBjdXJzZXMuCisgICAgMi4gQ3JlYXRlIHRoZSBmb3JtIGZpZWxkcywgdXNpbmcgbmV3X2ZpZWxkKCkuCisgICAgMy4gQ3JlYXRlIHRoZSBmb3JtIHVzaW5nIG5ld19mb3JtKCkuCisgICAgNC4gUG9zdCB0aGUgZm9ybSB1c2luZyBwb3N0X2Zvcm0oKS4KKyAgICA1LiBSZWZyZXNoIHRoZSBzY3JlZW4uCisgICAgNi4gUHJvY2VzcyB1c2VyIHJlcXVlc3RzIHZpYSBhbiBpbnB1dCBsb29wLgorICAgIDcuIFVucG9zdCB0aGUgZm9ybSB1c2luZyB1bnBvc3RfZm9ybSgpLgorICAgIDguIEZyZWUgdGhlIGZvcm0sIHVzaW5nIGZyZWVfZm9ybSgpLgorICAgIDkuIEZyZWUgdGhlIGZpZWxkcyB1c2luZyBmcmVlX2ZpZWxkKCkuCisgICAxMC4gVGVybWluYXRlIGN1cnNlcy4KKworICAgTm90ZSAgdGhhdCAgdGhpcyAgbG9va3MgIG11Y2ggIGxpa2UgIGEgIG1lbnUgcHJvZ3JhbTsgdGhlIGZvcm0gbGlicmFyeQorICAgaGFuZGxlcyAgdGFza3MgIHdoaWNoICBhcmUgaW4gbWFueSB3YXlzIHNpbWlsYXIsIGFuZCBpdHMgaW50ZXJmYWNlIHdhcworICAgb2J2aW91c2x5ICBkZXNpZ25lZCAgdG8gIHJlc2VtYmxlICB0aGF0ICBvZiAgdGhlIG1lbnUgbGlicmFyeSB3aGVyZXZlcgorICAgcG9zc2libGUuCisKKyAgIEluICBmb3JtcyAgcHJvZ3JhbXMsICBob3dldmVyLCB0aGUgYHByb2Nlc3MgdXNlciByZXF1ZXN0cycgaXMgc29tZXdoYXQKKyAgIG1vcmUgICBjb21wbGljYXRlZCAgIHRoYW4gIGZvciAgbWVudXMuICBCZXNpZGVzICBtZW51LWxpa2UgIG5hdmlnYXRpb24KKyAgIG9wZXJhdGlvbnMsIHRoZSBtZW51IGRyaXZlciBsb29wIGhhcyB0byBzdXBwb3J0IGZpZWxkIGVkaXRpbmcgYW5kIGRhdGEKKyAgIHZhbGlkYXRpb24uCisKK0NyZWF0aW5nIGFuZCBGcmVlaW5nIEZpZWxkcyBhbmQgRm9ybXMKKworICAgVGhlIGJhc2ljIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBmaWVsZHMgaXMgbmV3X2ZpZWxkKCk6CitGSUVMRCAqbmV3X2ZpZWxkKGludCBoZWlnaHQsIGludCB3aWR0aCwgICAvKiBuZXcgZmllbGQgc2l6ZSAqLworICAgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCwgICAgICAgLyogdXBwZXIgbGVmdCBjb3JuZXIgKi8KKyAgICAgICAgICAgICAgICAgaW50IG9mZnNjcmVlbiwgICAgICAgICAgIC8qIG51bWJlciBvZiBvZmZzY3JlZW4gcm93cyAqLworICAgICAgICAgICAgICAgICBpbnQgbmJ1Zik7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHdvcmtpbmcgYnVmZmVycyAqLworCisgICBNZW51ICBpdGVtcyAgYWx3YXlzICBvY2N1cHkgIGEgIHNpbmdsZSAgcm93LCBidXQgZm9ybXMgZmllbGRzIG1heSBoYXZlCisgICBtdWx0aXBsZSAgcm93cy4gIFNvICBuZXdfZmllbGQoKSAgcmVxdWlyZXMgIHlvdSB0byBzcGVjaWZ5IGEgd2lkdGggYW5kCisgICBoZWlnaHQgICh0aGUgIGZpcnN0ICB0d28gIGFyZ3VtZW50cywgIHdoaWNoICBtaXN0IGJvdGggYmUgZ3JlYXRlciB0aGFuCisgICB6ZXJvKS4KKworICAgWW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmllbGQncyB1cHBlciBsZWZ0IGNvcm5lciBvbgorICAgdGhlICBzY3JlZW4gICh0aGUgIHRoaXJkICBhbmQgIGZvdXJ0aCBhcmd1bWVudHMsIHdoaWNoIG11c3QgYmUgemVybyBvcgorICAgZ3JlYXRlcikuICBOb3RlICB0aGF0ICB0aGVzZSAgY29vcmRpbmF0ZXMgIGFyZSAgcmVsYXRpdmUgIHRvICB0aGUgZm9ybQorICAgc3Vid2luZG93LCAgd2hpY2ggd2lsbCBjb2luY2lkZSB3aXRoIHN0ZHNjciBieSBkZWZhdWx0IGJ1dCBuZWVkIG5vdCBiZQorICAgc3Rkc2NyIGlmIHlvdSd2ZSBkb25lIGFuIGV4cGxpY2l0IHNldF9mb3JtX3dpbigpIGNhbGwuCisKKyAgIFRoZSAgZmlmdGggYXJndW1lbnQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIG9mZi1zY3JlZW4gcm93cy4KKyAgIElmICB0aGlzICBpcyB6ZXJvLCB0aGUgZW50aXJlIGZpZWxkIHdpbGwgYWx3YXlzIGJlIGRpc3BsYXllZC4gSWYgaXQgaXMKKyAgIG5vbnplcm8sICB0aGUgIGZvcm0gIHdpbGwgIGJlICBzY3JvbGxhYmxlLCAgd2l0aCAgb25seSBvbmUgc2NyZWVuLWZ1bGwKKyAgIChpbml0aWFsbHkgIHRoZSAgdG9wICBwYXJ0KSBkaXNwbGF5ZWQgYXQgYW55IGdpdmVuIHRpbWUuIElmIHlvdSBtYWtlIGEKKyAgIGZpZWxkICBkeW5hbWljIGFuZCBncm93IGl0IHNvIGl0IHdpbGwgbm8gbG9uZ2VyIGZpdCBvbiB0aGUgc2NyZWVuLCB0aGUKKyAgIGZvcm0gIHdpbGwgIGJlY29tZSAgc2Nyb2xsYWJsZSAgZXZlbiAgaWYgIHRoZSAgb2Zmc2NyZWVuICBhcmd1bWVudCB3YXMKKyAgIGluaXRpYWxseSB6ZXJvLgorCisgICBUaGUgIGZvcm1zIGxpYnJhcnkgYWxsb2NhdGVzIG9uZSB3b3JraW5nIGJ1ZmZlciBwZXIgZmllbGQ7IHRoZSBzaXplIG9mCisgICBlYWNoIGJ1ZmZlciBpcyAoKGhlaWdodCArIG9mZnNjcmVlbikqd2lkdGggKyAxLCBvbmUgY2hhcmFjdGVyIGZvciBlYWNoCisgICBwb3NpdGlvbiBpbiB0aGUgZmllbGQgcGx1cyBhIE5VTCB0ZXJtaW5hdG9yLiBUaGUgc2l4dGggYXJndW1lbnQgaXMgdGhlCisgICBudW1iZXIgIG9mICBhZGRpdGlvbmFsICBkYXRhICBidWZmZXJzICB0byBhbGxvY2F0ZSBmb3IgdGhlIGZpZWxkOyB5b3VyCisgICBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZW0gZm9yIGl0cyBvd24gcHVycG9zZXMuCitGSUVMRCAqZHVwX2ZpZWxkKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAvKiBmaWVsZCB0byBjb3B5ICovCisgICAgICAgICAgICAgICAgIGludCB0b3AsIGludCBsZWZ0KTsgICAgICAvKiBsb2NhdGlvbiBvZiBuZXcgY29weSAqLworCisgICBUaGUgIGZ1bmN0aW9uICBkdXBfZmllbGQoKSAgZHVwbGljYXRlcyAgYW4gIGV4aXN0aW5nICBmaWVsZCAgYXQgIGEgbmV3CisgICBsb2NhdGlvbi4gIFNpemUgIGFuZCAgYnVmZmVyaW5nIGluZm9ybWF0aW9uIGFyZSBjb3BpZWQ7IHNvbWUgYXR0cmlidXRlCisgICBmbGFncyAgYW5kICBzdGF0dXMgIGJpdHMgIGFyZSAgbm90ICAoc2VlICB0aGUgIGZvcm1fZmllbGRfbmV3KDNYKSAgZm9yCisgICBkZXRhaWxzKS4KK0ZJRUxEICpsaW5rX2ZpZWxkKEZJRUxEICpmaWVsZCwgICAgICAgICAgIC8qIGZpZWxkIHRvIGNvcHkgKi8KKyAgICAgICAgICAgICAgICAgIGludCB0b3AsIGludCBsZWZ0KTsgICAgIC8qIGxvY2F0aW9uIG9mIG5ldyBjb3B5ICovCisKKyAgIFRoZSAgZnVuY3Rpb24gIGxpbmtfZmllbGQoKSBhbHNvIGR1cGxpY2F0ZXMgYW4gZXhpc3RpbmcgZmllbGQgYXQgYSBuZXcKKyAgIGxvY2F0aW9uLiAgVGhlIGRpZmZlcmVuY2UgZnJvbSBkdXBfZmllbGQoKSBpcyB0aGF0IGl0IGFycmFuZ2VzIGZvciB0aGUKKyAgIG5ldyBmaWVsZCdzIGJ1ZmZlciB0byBiZSBzaGFyZWQgd2l0aCB0aGUgb2xkIG9uZS4KKworICAgQmVzaWRlcyAgdGhlIG9idmlvdXMgdXNlIGluIG1ha2luZyBhIGZpZWxkIGVkaXRhYmxlIGZyb20gdHdvIGRpZmZlcmVudAorICAgZm9ybSBwYWdlcywgbGlua2VkIGZpZWxkcyBnaXZlIHlvdSBhIHdheSB0byBoYWNrIGluIGR5bmFtaWMgbGFiZWxzLiBJZgorICAgeW91ICBkZWNsYXJlICBzZXZlcmFsIGZpZWxkcyBsaW5rZWQgdG8gYW4gb3JpZ2luYWwsIGFuZCB0aGVuIG1ha2UgdGhlbQorICAgaW5hY3RpdmUsICBjaGFuZ2VzICBmcm9tICB0aGUgb3JpZ2luYWwgd2lsbCBzdGlsbCBiZSBwcm9wYWdhdGVkIHRvIHRoZQorICAgbGlua2VkIGZpZWxkcy4KKworICAgQXMgIHdpdGggZHVwbGljYXRlZCBmaWVsZHMsIGxpbmtlZCBmaWVsZHMgaGF2ZSBhdHRyaWJ1dGUgYml0cyBzZXBhcmF0ZQorICAgZnJvbSB0aGUgb3JpZ2luYWwuCisKKyAgIEFzICB5b3UgIG1pZ2h0ICBndWVzcywgIGFsbCB0aGVzZSBmaWVsZC1hbGxvY2F0aW9ucyByZXR1cm4gTlVMTCBpZiB0aGUKKyAgIGZpZWxkICBhbGxvY2F0aW9uICBpcyAgbm90ICBwb3NzaWJsZSAgZHVlIHRvIGFuIG91dC1vZi1tZW1vcnkgZXJyb3Igb3IKKyAgIG91dC1vZi1ib3VuZHMgYXJndW1lbnRzLgorCisgICBUbyBjb25uZWN0IGZpZWxkcyB0byBhIGZvcm0sIHVzZQorRk9STSAqbmV3X2Zvcm0oRklFTEQgKipmaWVsZHMpOworCisgICBUaGlzICBmdW5jdGlvbiAgZXhwZWN0cyAgdG8gIHNlZSAgYSAgTlVMTC10ZXJtaW5hdGVkICBhcnJheSAgb2YgIGZpZWxkCisgICBwb2ludGVycy4gIFNhaWQgZmllbGRzIGFyZSBjb25uZWN0ZWQgdG8gYSBuZXdseS1hbGxvY2F0ZWQgZm9ybSBvYmplY3Q7CisgICBpdHMgYWRkcmVzcyBpcyByZXR1cm5lZCAob3IgZWxzZSBOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzKS4KKworICAgTm90ZSAgdGhhdCAgbmV3X2ZpZWxkKCkgIGRvZXMgIG5vdCBjb3B5IHRoZSBwb2ludGVyIGFycmF5IGludG8gcHJpdmF0ZQorICAgc3RvcmFnZTsgIGlmIHlvdSBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBwb2ludGVyIGFycmF5IGR1cmluZyBmb3JtcworICAgcHJvY2Vzc2luZywgIGFsbCBtYW5uZXIgb2YgYml6YXJyZSB0aGluZ3MgbWlnaHQgaGFwcGVuLiBBbHNvIG5vdGUgdGhhdAorICAgYW55IGdpdmVuIGZpZWxkIG1heSBvbmx5IGJlIGNvbm5lY3RlZCB0byBvbmUgZm9ybS4KKworICAgVGhlICBmdW5jdGlvbnMgIGZyZWVfZmllbGQoKSBhbmQgZnJlZV9mb3JtIGFyZSBhdmFpbGFibGUgdG8gZnJlZSBmaWVsZAorICAgYW5kICBmb3JtIG9iamVjdHMuIEl0IGlzIGFuIGVycm9yIHRvIGF0dGVtcHQgdG8gZnJlZSBhIGZpZWxkIGNvbm5lY3RlZAorICAgdG8gYSBmb3JtLCBidXQgbm90IHZpY2UtdmVyc2E7IHRodXMsIHlvdSB3aWxsIGdlbmVyYWxseSBmcmVlIHlvdXIgZm9ybQorICAgb2JqZWN0cyBmaXJzdC4KKworRmV0Y2hpbmcgYW5kIENoYW5naW5nIEZpZWxkIEF0dHJpYnV0ZXMKKworICAgRWFjaCAgZm9ybSAgZmllbGQgIGhhcyAgYSAgbnVtYmVyICBvZiAgbG9jYXRpb24gIGFuZCAgc2l6ZSAgYXR0cmlidXRlcworICAgYXNzb2NpYXRlZCAgd2l0aCAgaXQuIFRoZXJlIGFyZSBvdGhlciBmaWVsZCBhdHRyaWJ1dGVzIHVzZWQgdG8gY29udHJvbAorICAgZGlzcGxheSBhbmQgZWRpdGluZyBvZiB0aGUgZmllbGQuIFNvbWUgKGZvciBleGFtcGxlLCB0aGUgT19TVEFUSUMgYml0KQorICAgaW52b2x2ZSAgc3VmZmljaWVudCAgY29tcGxpY2F0aW9ucyAgdG8gYmUgY292ZXJlZCBpbiBzZWN0aW9ucyBvZiB0aGVpcgorICAgb3duIGxhdGVyIG9uLiBXZSBjb3ZlciB0aGUgZnVuY3Rpb25zIHVzZWQgdG8gZ2V0IGFuZCBzZXQgc2V2ZXJhbCBiYXNpYworICAgYXR0cmlidXRlcyBoZXJlLgorCisgICBXaGVuIGEgZmllbGQgaXMgY3JlYXRlZCwgdGhlIGF0dHJpYnV0ZXMgbm90IHNwZWNpZmllZCBieSB0aGUgbmV3X2ZpZWxkCisgICBmdW5jdGlvbiAgYXJlICBjb3BpZWQgIGZyb20gIGFuICBpbnZpc2libGUgIHN5c3RlbSAgZGVmYXVsdCAgZmllbGQuIEluCisgICBhdHRyaWJ1dGUtc2V0dGluZyAgYW5kIC1mZXRjaGluZyBmdW5jdGlvbnMsIHRoZSBhcmd1bWVudCBOVUxMIGlzIHRha2VuCisgICB0byBtZWFuIHRoaXMgZmllbGQuIENoYW5nZXMgdG8gaXQgcGVyc2lzdCBhcyBkZWZhdWx0cyB1bnRpbCB5b3VyIGZvcm1zCisgICBhcHBsaWNhdGlvbiB0ZXJtaW5hdGVzLgorCisgIEZldGNoaW5nIFNpemUgYW5kIExvY2F0aW9uIERhdGEKKworICAgWW91IGNhbiByZXRyaWV2ZSBmaWVsZCBzaXplcyBhbmQgbG9jYXRpb25zIHRocm91Z2g6CitpbnQgZmllbGRfaW5mbyhGSUVMRCAqZmllbGQsICAgICAgICAgICAgICAvKiBmaWVsZCBmcm9tIHdoaWNoIHRvIGZldGNoICovCisgICAgICAgICAgICAgICBpbnQgKmhlaWdodCwgKmludCB3aWR0aCwgICAvKiBmaWVsZCBzaXplICovCisgICAgICAgICAgICAgICBpbnQgKnRvcCwgaW50ICpsZWZ0LCAgICAgICAvKiB1cHBlciBsZWZ0IGNvcm5lciAqLworICAgICAgICAgICAgICAgaW50ICpvZmZzY3JlZW4sICAgICAgICAgICAgLyogbnVtYmVyIG9mIG9mZnNjcmVlbiByb3dzICovCisgICAgICAgICAgICAgICBpbnQgKm5idWYpOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygd29ya2luZyBidWZmZXJzICovCisKKyAgIFRoaXMgIGZ1bmN0aW9uIGlzIGEgc29ydCBvZiBpbnZlcnNlIG9mIG5ld19maWVsZCgpOyBpbnN0ZWFkIG9mIHNldHRpbmcKKyAgIHNpemUgIGFuZCAgbG9jYXRpb24gYXR0cmlidXRlcyBvZiBhIG5ldyBmaWVsZCwgaXQgZmV0Y2hlcyB0aGVtIGZyb20gYW4KKyAgIGV4aXN0aW5nIG9uZS4KKworICBDaGFuZ2luZyB0aGUgRmllbGQgTG9jYXRpb24KKworICAgSXQgaXMgcG9zc2libGUgdG8gbW92ZSBhIGZpZWxkJ3MgbG9jYXRpb24gb24gdGhlIHNjcmVlbjoKK2ludCBtb3ZlX2ZpZWxkKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICBpbnQgdG9wLCBpbnQgbGVmdCk7ICAgICAgICAvKiBuZXcgdXBwZXItbGVmdCBjb3JuZXIgKi8KKworICAgWW91IGNhbiwgb2YgY291cnNlLiBxdWVyeSB0aGUgY3VycmVudCBsb2NhdGlvbiB0aHJvdWdoIGZpZWxkX2luZm8oKS4KKworICBUaGUgSnVzdGlmaWNhdGlvbiBBdHRyaWJ1dGUKKworICAgT25lLWxpbmUgIGZpZWxkcyAgbWF5IGJlIHVuanVzdGlmaWVkLCBqdXN0aWZpZWQgcmlnaHQsIGp1c3RpZmllZCBsZWZ0LAorICAgb3IgY2VudGVyZWQuIEhlcmUgaXMgaG93IHlvdSBtYW5pcHVsYXRlIHRoaXMgYXR0cmlidXRlOgoraW50IHNldF9maWVsZF9qdXN0KEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQganVzdG1vZGUpOyAgICAgICAgIC8qIG1vZGUgdG8gc2V0ICovCisKK2ludCBmaWVsZF9qdXN0KEZJRUxEICpmaWVsZCk7ICAgICAgICAgICAgIC8qIGZldGNoIG1vZGUgb2YgZmllbGQgKi8KKworICAgVGhlICAgbW9kZSAgIHZhbHVlcyAgYWNjZXB0ZWQgIGFuZCAgcmV0dXJuZWQgIGJ5ICB0aGlzICBmdW5jdGlvbnMgIGFyZQorICAgcHJlcHJvY2Vzc29yICBtYWNyb3MgTk9fSlVTVElGSUNBVElPTiwgSlVTVElGWV9SSUdIVCwgSlVTVElGWV9MRUZULCBvcgorICAgSlVTVElGWV9DRU5URVIuCisKKyAgRmllbGQgRGlzcGxheSBBdHRyaWJ1dGVzCisKKyAgIEZvciAgZWFjaCAgZmllbGQsICB5b3UgIGNhbiAgc2V0ICBhICBmb3JlZ3JvdW5kICBhdHRyaWJ1dGUgZm9yIGVudGVyZWQKKyAgIGNoYXJhY3RlcnMsICBhICBiYWNrZ3JvdW5kICBhdHRyaWJ1dGUgIGZvciB0aGUgZW50aXJlIGZpZWxkLCBhbmQgYSBwYWQKKyAgIGNoYXJhY3RlciAgZm9yIHRoZSB1bmZpbGxlZCBwb3J0aW9uIG9mIHRoZSBmaWVsZC4gWW91IGNhbiBhbHNvIGNvbnRyb2wKKyAgIHBhZ2luYXRpb24gb2YgdGhlIGZvcm0uCisKKyAgIFRoaXMgIGdyb3VwIG9mIGZvdXIgZmllbGQgYXR0cmlidXRlcyBjb250cm9scyB0aGUgdmlzdWFsIGFwcGVhcmFuY2Ugb2YKKyAgIHRoZSAgZmllbGQgb24gdGhlIHNjcmVlbiwgd2l0aG91dCBhZmZlY3RpbmcgaW4gYW55IHdheSB0aGUgZGF0YSBpbiB0aGUKKyAgIGZpZWxkIGJ1ZmZlci4KK2ludCBzZXRfZmllbGRfZm9yZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2h0eXBlIGF0dHIpOyAgICAgICAgICAvKiBhdHRyaWJ1dGUgdG8gc2V0ICovCisKK2NodHlwZSBmaWVsZF9mb3JlKEZJRUxEICpmaWVsZCk7ICAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCisKK2ludCBzZXRfZmllbGRfYmFjayhGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgY2h0eXBlIGF0dHIpOyAgICAgICAgICAvKiBhdHRyaWJ1dGUgdG8gc2V0ICovCisKK2NodHlwZSBmaWVsZF9iYWNrKEZJRUxEICpmaWVsZCk7ICAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCisKK2ludCBzZXRfZmllbGRfcGFkKEZJRUxEICpmaWVsZCwgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgIGludCBwYWQpOyAgICAgICAgICAgICAgICAvKiBwYWQgY2hhcmFjdGVyIHRvIHNldCAqLworCitjaHR5cGUgZmllbGRfcGFkKEZJRUxEICpmaWVsZCk7CisKK2ludCBzZXRfbmV3X3BhZ2UoRklFTEQgKmZpZWxkLCAgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgIGludCBmbGFnKTsgICAgICAgICAgICAgICAvKiBUUlVFIHRvIGZvcmNlIG5ldyBwYWdlICovCisKK2NodHlwZSBuZXdfcGFnZShGSUVMRCAqZmllbGQpOyAgICAgICAgICAgIC8qIGZpZWxkIHRvIHF1ZXJ5ICovCisKKyAgIFRoZSBhdHRyaWJ1dGVzIHNldCBhbmQgcmV0dXJuZWQgYnkgdGhlIGZpcnN0IGZvdXIgZnVuY3Rpb25zIGFyZSBub3JtYWwKKyAgIGN1cnNlcygzeCkgIGRpc3BsYXkgIGF0dHJpYnV0ZSAgdmFsdWVzICAoQV9TVEFORE9VVCwgQV9CT0xELCBBX1JFVkVSU0UKKyAgIGV0YykuICBUaGUgcGFnZSBiaXQgb2YgYSBmaWVsZCBjb250cm9scyB3aGV0aGVyIGl0IGlzIGRpc3BsYXllZCBhdCB0aGUKKyAgIHN0YXJ0IG9mIGEgbmV3IGZvcm0gc2NyZWVuLgorCisgIEZpZWxkIE9wdGlvbiBCaXRzCisKKyAgIFRoZXJlICBpcyAgYWxzbyBhIGxhcmdlIGNvbGxlY3Rpb24gb2YgZmllbGQgb3B0aW9uIGJpdHMgeW91IGNhbiBzZXQgdG8KKyAgIGNvbnRyb2wgIHZhcmlvdXMgIGFzcGVjdHMgb2YgZm9ybXMgcHJvY2Vzc2luZy4gWW91IGNhbiBtYW5pcHVsYXRlIHRoZW0KKyAgIHdpdGggdGhlc2UgZnVuY3Rpb25zOgoraW50IHNldF9maWVsZF9vcHRzKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZSB0byBzZXQgKi8KKworaW50IGZpZWxkX29wdHNfb24oRklFTEQgKmZpZWxkLCAgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvbiAqLworCitpbnQgZmllbGRfb3B0c19vZmYoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIGludCBhdHRyKTsgICAgICAgICAgICAgLyogYXR0cmlidXRlcyB0byB0dXJuIG9mZiAqLworCitpbnQgZmllbGRfb3B0cyhGSUVMRCAqZmllbGQpOyAgICAgICAgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworCisgICBCeSBkZWZhdWx0LCBhbGwgb3B0aW9ucyBhcmUgb24uIEhlcmUgYXJlIHRoZSBhdmFpbGFibGUgb3B0aW9uIGJpdHM6CisKKyAgIE9fVklTSUJMRQorICAgICAgICAgIENvbnRyb2xzICB3aGV0aGVyICB0aGUgIGZpZWxkICBpcyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4uIENhbiBiZQorICAgICAgICAgIHVzZWQgIGR1cmluZyBmb3JtIHByb2Nlc3NpbmcgdG8gaGlkZSBvciBwb3AgdXAgZmllbGRzIGRlcGVuZGluZworICAgICAgICAgIG9uIHRoZSB2YWx1ZSBvZiBwYXJlbnQgZmllbGRzLgorCisgICBPX0FDVElWRQorICAgICAgICAgIENvbnRyb2xzICB3aGV0aGVyICB0aGUgIGZpZWxkIGlzIGFjdGl2ZSBkdXJpbmcgZm9ybXMgcHJvY2Vzc2luZworICAgICAgICAgIChpLmUuICB2aXNpdGVkICBieSAgZm9ybSAgbmF2aWdhdGlvbiBrZXlzKS4gQ2FuIGJlIHVzZWQgdG8gbWFrZQorICAgICAgICAgIGxhYmVscyAgb3IgIGRlcml2ZWQgIGZpZWxkcyB3aXRoIGJ1ZmZlciB2YWx1ZXMgYWx0ZXJhYmxlIGJ5IHRoZQorICAgICAgICAgIGZvcm1zIGFwcGxpY2F0aW9uLCBub3QgdGhlIHVzZXIuCisKKyAgIE9fUFVCTElDCisgICAgICAgICAgQ29udHJvbHMgIHdoZXRoZXIgZGF0YSBpcyBkaXNwbGF5ZWQgZHVyaW5nIGZpZWxkIGVudHJ5LiBJZiB0aGlzCisgICAgICAgICAgb3B0aW9uICBpcyAgdHVybmVkICBvZmYgb24gYSBmaWVsZCwgdGhlIGxpYnJhcnkgd2lsbCBhY2NlcHQgYW5kCisgICAgICAgICAgZWRpdCAgZGF0YSAgaW4gdGhhdCBmaWVsZCwgYnV0IGl0IHdpbGwgbm90IGJlIGRpc3BsYXllZCBhbmQgdGhlCisgICAgICAgICAgdmlzaWJsZSAgZmllbGQgIGN1cnNvciAgd2lsbCAgbm90ICBtb3ZlLiAgWW91ICBjYW4gdHVybiBvZmYgdGhlCisgICAgICAgICAgT19QVUJMSUMgYml0IHRvIGRlZmluZSBwYXNzd29yZCBmaWVsZHMuCisKKyAgIE9fRURJVAorICAgICAgICAgIENvbnRyb2xzICB3aGV0aGVyICB0aGUgIGZpZWxkJ3MgZGF0YSBjYW4gYmUgbW9kaWZpZWQuIFdoZW4gdGhpcworICAgICAgICAgIG9wdGlvbiAgaXMgb2ZmLCBhbGwgZWRpdGluZyByZXF1ZXN0cyBleGNlcHQgUkVRX1BSRVZfQ0hPSUNFIGFuZAorICAgICAgICAgIFJFUV9ORVhUX0NIT0lDRSAgd2lsbCBmYWlsLiBTdWNoIHJlYWQtb25seSBmaWVsZHMgbWF5IGJlIHVzZWZ1bAorICAgICAgICAgIGZvciBoZWxwIG1lc3NhZ2VzLgorCisgICBPX1dSQVAKKyAgICAgICAgICBDb250cm9scyB3b3JkLXdyYXBwaW5nIGluIG11bHRpLWxpbmUgZmllbGRzLiBOb3JtYWxseSwgd2hlbiBhbnkKKyAgICAgICAgICBjaGFyYWN0ZXIgIG9mICBhICAoYmxhbmstc2VwYXJhdGVkKSB3b3JkIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICBjdXJyZW50ICBsaW5lLCAgdGhlICBlbnRpcmUgIHdvcmQgIGlzICB3cmFwcGVkIHRvIHRoZSBuZXh0IGxpbmUKKyAgICAgICAgICAoYXNzdW1pbmcgdGhlcmUgaXMgb25lKS4gV2hlbiB0aGlzIG9wdGlvbiBpcyBvZmYsIHRoZSB3b3JkIHdpbGwKKyAgICAgICAgICBiZSBzcGxpdCBhY3Jvc3MgdGhlIGxpbmUgYnJlYWsuCisKKyAgIE9fQkxBTksKKyAgICAgICAgICBDb250cm9scyAgZmllbGQgIGJsYW5raW5nLiAgV2hlbiAgdGhpcyBvcHRpb24gaXMgb24sIGVudGVyaW5nIGEKKyAgICAgICAgICBjaGFyYWN0ZXIgIGF0ICB0aGUgZmlyc3QgZmllbGQgcG9zaXRpb24gZXJhc2VzIHRoZSBlbnRpcmUgZmllbGQKKyAgICAgICAgICAoZXhjZXB0IGZvciB0aGUganVzdC1lbnRlcmVkIGNoYXJhY3RlcikuCisKKyAgIE9fQVVUT1NLSVAKKyAgICAgICAgICBDb250cm9scyAgYXV0b21hdGljICBza2lwICB0byAgbmV4dCAgZmllbGQgd2hlbiB0aGlzIG9uZSBmaWxscy4KKyAgICAgICAgICBOb3JtYWxseSwgIHdoZW4gIHRoZSAgZm9ybXMgdXNlciB0cmllcyB0byB0eXBlIG1vcmUgZGF0YSBpbnRvIGEKKyAgICAgICAgICBmaWVsZCAgdGhhbiB3aWxsIGZpdCwgdGhlIGVkaXRpbmcgbG9jYXRpb24ganVtcHMgdG8gbmV4dCBmaWVsZC4KKyAgICAgICAgICBXaGVuIHRoaXMgb3B0aW9uIGlzIG9mZiwgdGhlIHVzZXIncyBjdXJzb3Igd2lsbCBoYW5nIGF0IHRoZSBlbmQKKyAgICAgICAgICBvZiAgdGhlICBmaWVsZC4gIFRoaXMgIG9wdGlvbiBpcyBpZ25vcmVkIGluIGR5bmFtaWMgZmllbGRzIHRoYXQKKyAgICAgICAgICBoYXZlIG5vdCByZWFjaGVkIHRoZWlyIHNpemUgbGltaXQuCisKKyAgIE9fTlVMTE9LCisgICAgICAgICAgQ29udHJvbHMgICB3aGV0aGVyICB2YWxpZGF0aW9uICBpcyAgYXBwbGllZCAgdG8gIGJsYW5rICBmaWVsZHMuCisgICAgICAgICAgTm9ybWFsbHksICBpdCAgaXMgbm90OyB0aGUgdXNlciBjYW4gbGVhdmUgYSBmaWVsZCBibGFuayB3aXRob3V0CisgICAgICAgICAgaW52b2tpbmcgIHRoZSB1c3VhbCB2YWxpZGF0aW9uIGNoZWNrIG9uIGV4aXQuIElmIHRoaXMgb3B0aW9uIGlzCisgICAgICAgICAgb2ZmIG9uIGEgZmllbGQsIGV4aXQgZnJvbSBpdCB3aWxsIGludm9rZSBhIHZhbGlkYXRpb24gY2hlY2suCisKKyAgIE9fUEFTU09LCisgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB2YWxpZGF0aW9uIG9jY3VycyBvbiBldmVyeSBleGl0LCBvciBvbmx5IGFmdGVyCisgICAgICAgICAgdGhlICBmaWVsZCAgaXMgIG1vZGlmaWVkLiAgTm9ybWFsbHkgdGhlIGxhdHRlciBpcyB0cnVlLiBTZXR0aW5nCisgICAgICAgICAgT19QQVNTT0sgIG1heSBiZSB1c2VmdWwgaWYgeW91ciBmaWVsZCdzIHZhbGlkYXRpb24gZnVuY3Rpb24gbWF5CisgICAgICAgICAgY2hhbmdlIGR1cmluZyBmb3JtcyBwcm9jZXNzaW5nLgorCisgICBPX1NUQVRJQworICAgICAgICAgIENvbnRyb2xzICB3aGV0aGVyIHRoZSBmaWVsZCBpcyBmaXhlZCB0byBpdHMgaW5pdGlhbCBkaW1lbnNpb25zLgorICAgICAgICAgIElmICB5b3UgIHR1cm4gIHRoaXMgIG9mZiwgIHRoZSAgZmllbGQgIGJlY29tZXMgZHluYW1pYyBhbmQgd2lsbAorICAgICAgICAgIHN0cmV0Y2ggdG8gZml0IGVudGVyZWQgZGF0YS4KKworICAgQSAgZmllbGQncyAgb3B0aW9ucyAgY2Fubm90ICBiZSAgY2hhbmdlZCAgd2hpbGUgdGhlIGZpZWxkIGlzIGN1cnJlbnRseQorICAgc2VsZWN0ZWQuICBIb3dldmVyLCAgb3B0aW9ucyAgbWF5IGJlIGNoYW5nZWQgb24gcG9zdGVkIGZpZWxkcyB0aGF0IGFyZQorICAgbm90IGN1cnJlbnQuCisKKyAgIFRoZSBvcHRpb24gdmFsdWVzIGFyZSBiaXQtbWFza3MgYW5kIGNhbiBiZSBjb21wb3NlZCB3aXRoIGxvZ2ljYWwtb3IgaW4KKyAgIHRoZSBvYnZpb3VzIHdheS4KKworRmllbGQgU3RhdHVzCisKKyAgIEV2ZXJ5IGZpZWxkIGhhcyBhIHN0YXR1cyBmbGFnLCB3aGljaCBpcyBzZXQgdG8gRkFMU0Ugd2hlbiB0aGUgZmllbGQgaXMKKyAgIGNyZWF0ZWQgIGFuZCAgVFJVRSB3aGVuIHRoZSB2YWx1ZSBpbiBmaWVsZCBidWZmZXIgMCBjaGFuZ2VzLiBUaGlzIGZsYWcKKyAgIGNhbiBiZSBxdWVyaWVkIGFuZCBzZXQgZGlyZWN0bHk6CitpbnQgc2V0X2ZpZWxkX3N0YXR1cyhGSUVMRCAqZmllbGQsICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzKTsgICAgICAgICAvKiBtb2RlIHRvIHNldCAqLworCitpbnQgZmllbGRfc3RhdHVzKEZJRUxEICpmaWVsZCk7ICAgICAgICAgLyogZmV0Y2ggbW9kZSBvZiBmaWVsZCAqLworCisgICBTZXR0aW5nICB0aGlzICBmbGFnIHVuZGVyIHByb2dyYW0gY29udHJvbCBjYW4gYmUgdXNlZnVsIGlmIHlvdSB1c2UgdGhlCisgICBzYW1lIGZvcm0gcmVwZWF0ZWRseSwgbG9va2luZyBmb3IgbW9kaWZpZWQgZmllbGRzIGVhY2ggdGltZS4KKworICAgQ2FsbGluZyAgZmllbGRfc3RhdHVzKCkgIG9uICBhICBmaWVsZCBub3QgY3VycmVudGx5IHNlbGVjdGVkIGZvciBpbnB1dAorICAgd2lsbCByZXR1cm4gYSBjb3JyZWN0IHZhbHVlLiBDYWxsaW5nIGZpZWxkX3N0YXR1cygpIG9uIGEgZmllbGQgdGhhdCBpcworICAgY3VycmVudGx5ICBzZWxlY3RlZCBmb3IgaW5wdXQgbWF5IG5vdCBuZWNlc3NhcmlseSBnaXZlIGEgY29ycmVjdCBmaWVsZAorICAgc3RhdHVzICB2YWx1ZSwgYmVjYXVzZSBlbnRlcmVkIGRhdGEgaXNuJ3QgbmVjZXNzYXJpbHkgY29waWVkIHRvIGJ1ZmZlcgorICAgemVybyAgYmVmb3JlIHRoZSBleGl0IHZhbGlkYXRpb24gY2hlY2suIFRvIGd1YXJhbnRlZSB0aGF0IHRoZSByZXR1cm5lZAorICAgc3RhdHVzICB2YWx1ZSAgcmVmbGVjdHMgcmVhbGl0eSwgY2FsbCBmaWVsZF9zdGF0dXMoKSBlaXRoZXIgKDEpIGluIHRoZQorICAgZmllbGQncyAgZXhpdCB2YWxpZGF0aW9uIGNoZWNrIHJvdXRpbmUsICgyKSBmcm9tIHRoZSBmaWVsZCdzIG9yIGZvcm0ncworICAgaW5pdGlhbGl6YXRpb24gICBvciAgIHRlcm1pbmF0aW9uICAgaG9va3MsICAgb3IgICAoMykgICBqdXN0ICBhZnRlciAgYQorICAgUkVRX1ZBTElEQVRJT04gcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGZvcm1zIGRyaXZlci4KKworRmllbGQgVXNlciBQb2ludGVyCisKKyAgIEVhY2ggIGZpZWxkICBzdHJ1Y3R1cmUgY29udGFpbnMgb25lIGNoYXJhY3RlciBwb2ludGVyIHNsb3QgdGhhdCBpcyBub3QKKyAgIHVzZWQgIGJ5ICB0aGUgZm9ybXMgbGlicmFyeS4gSXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMKKyAgIHRvIHN0b3JlIHByaXZhdGUgcGVyLWZpZWxkIGRhdGEuIFlvdSBjYW4gbWFuaXB1bGF0ZSBpdCB3aXRoOgoraW50IHNldF9maWVsZF91c2VycHRyKEZJRUxEICpmaWVsZCwgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBjaGFyICp1c2VycHRyKTsgICAgICAgIC8qIG1vZGUgdG8gc2V0ICovCisKK2NoYXIgKmZpZWxkX3VzZXJwdHIoRklFTEQgKmZpZWxkKTsgICAgICAgIC8qIGZldGNoIG1vZGUgb2YgZmllbGQgKi8KKworICAgKFByb3Blcmx5LCAgdGhpcyAgdXNlciAgcG9pbnRlciBmaWVsZCBvdWdodCB0byBoYXZlICh2b2lkICopIHR5cGUuIFRoZQorICAgKGNoYXIgKikgdHlwZSBpcyByZXRhaW5lZCBmb3IgU3lzdGVtIFYgY29tcGF0aWJpbGl0eS4pCisKKyAgIEl0ICBpcyAgdmFsaWQgIHRvICBzZXQgIHRoZSAgdXNlciBwb2ludGVyIG9mIHRoZSBkZWZhdWx0IGZpZWxkICh3aXRoIGEKKyAgIHNldF9maWVsZF91c2VycHRyKCkgIGNhbGwgIHBhc3NlZCAgYSAgTlVMTCAgZmllbGQgcG9pbnRlci4pIFdoZW4gYSBuZXcKKyAgIGZpZWxkICBpcyAgY3JlYXRlZCwgIHRoZSAgZGVmYXVsdC1maWVsZCAgdXNlciAgcG9pbnRlciAgaXMgIGNvcGllZCAgdG8KKyAgIGluaXRpYWxpemUgdGhlIG5ldyBmaWVsZCdzIHVzZXIgcG9pbnRlci4KKworVmFyaWFibGUtU2l6ZWQgRmllbGRzCisKKyAgIE5vcm1hbGx5LCAgYSAgZmllbGQgIGlzIGZpeGVkIGF0IHRoZSBzaXplIHNwZWNpZmllZCBmb3IgaXQgYXQgY3JlYXRpb24KKyAgIHRpbWUuICBJZiwgIGhvd2V2ZXIsIHlvdSB0dXJuIG9mZiBpdHMgT19TVEFUSUMgYml0LCBpdCBiZWNvbWVzIGR5bmFtaWMKKyAgIGFuZCAgd2lsbCAgYXV0b21hdGljYWxseSAgcmVzaXplICBpdHNlbGYgIHRvIGFjY29tbW9kYXRlIGRhdGEgYXMgaXQgaXMKKyAgIGVudGVyZWQuICBJZiB0aGUgZmllbGQgaGFzIGV4dHJhIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGV5IHdpbGwKKyAgIGdyb3cgcmlnaHQgYWxvbmcgd2l0aCB0aGUgbWFpbiBpbnB1dCBidWZmZXIuCisKKyAgIEEgIG9uZS1saW5lICBkeW5hbWljICBmaWVsZCAgd2lsbCBoYXZlIGEgZml4ZWQgaGVpZ2h0ICgxKSBidXQgdmFyaWFibGUKKyAgIHdpZHRoLCBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5IHRvIGRpc3BsYXkgZGF0YSB3aXRoaW4gdGhlIGZpZWxkIGFyZWEgYXMKKyAgIG9yaWdpbmFsbHkgIGRpbWVuc2lvbmVkICBhbmQgIGxvY2F0ZWQuIEEgbXVsdGktbGluZSBkeW5hbWljIGZpZWxkIHdpbGwKKyAgIGhhdmUgIGEgIGZpeGVkICB3aWR0aCwgYnV0IHZhcmlhYmxlIGhlaWdodCAobnVtYmVyIG9mIHJvd3MpLCBzY3JvbGxpbmcKKyAgIHZlcnRpY2FsbHkgIHRvICBkaXNwbGF5ICBkYXRhICB3aXRoaW4gIHRoZSAgZmllbGQgIGFyZWEgIGFzIG9yaWdpbmFsbHkKKyAgIGRpbWVuc2lvbmVkIGFuZCBsb2NhdGVkLgorCisgICBOb3JtYWxseSwgIGEgZHluYW1pYyBmaWVsZCBpcyBhbGxvd2VkIHRvIGdyb3cgd2l0aG91dCBsaW1pdC4gQnV0IGl0IGlzCisgICBwb3NzaWJsZSAgdG8gc2V0IGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBzaXplIG9mIGEgZHluYW1pYyBmaWVsZC4gWW91IGRvCisgICBpdCB3aXRoIHRoaXMgZnVuY3Rpb246CitpbnQgc2V0X21heF9maWVsZChGSUVMRCAqZmllbGQsICAgICAvKiBmaWVsZCB0byBhbHRlciAobWF5IG5vdCBiZSBOVUxMKSAqLworICAgICAgICAgICAgICAgICAgIGludCBtYXhfc2l6ZSk7ICAgLyogdXBwZXIgbGltaXQgb24gZmllbGQgc2l6ZSAqLworCisgICBJZiB0aGUgZmllbGQgaXMgb25lLWxpbmUsIG1heF9zaXplIGlzIHRha2VuIHRvIGJlIGEgY29sdW1uIHNpemUgbGltaXQ7CisgICBpZiAgaXQgIGlzIG11bHRpLWxpbmUsIGl0IGlzIHRha2VuIHRvIGJlIGEgbGluZSBzaXplIGxpbWl0LiBUbyBkaXNhYmxlCisgICBhbnkgIGxpbWl0LCAgdXNlICBhbiBhcmd1bWVudCBvZiB6ZXJvLiBUaGUgZ3Jvd3RoIGxpbWl0IGNhbiBiZSBjaGFuZ2VkCisgICB3aGV0aGVyIG9yIG5vdCB0aGUgT19TVEFUSUMgYml0IGlzIG9uLCBidXQgaGFzIG5vIGVmZmVjdCB1bnRpbCBpdCBpcy4KKworICAgVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9mIGEgZmllbGQgY2hhbmdlIHdoZW4gaXQgYmVjb21lcyBkeW5hbWljOgorICAgICAqIElmICB0aGVyZSAgaXMgIG5vICBncm93dGggbGltaXQsIHRoZXJlIGlzIG5vIGZpbmFsIHBvc2l0aW9uIG9mIHRoZQorICAgICAgIGZpZWxkOyB0aGVyZWZvcmUgT19BVVRPU0tJUCBhbmQgT19OTF9PVkVSTE9BRCBhcmUgaWdub3JlZC4KKyAgICAgKiBGaWVsZCBqdXN0aWZpY2F0aW9uIHdpbGwgYmUgaWdub3JlZCAodGhvdWdoIHdoYXRldmVyIGp1c3RpZmljYXRpb24KKyAgICAgICBpcyBzZXQgdXAgd2lsbCBiZSByZXRhaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW4gYmUgcXVlcmllZCkuCisgICAgICogVGhlICBkdXBfZmllbGQoKSBhbmQgbGlua19maWVsZCgpIGNhbGxzIGNvcHkgZHluYW1pYy1idWZmZXIgc2l6ZXMuCisgICAgICAgSWYgIHRoZSAgT19TVEFUSUMgIG9wdGlvbiAgaXMgc2V0IG9uIG9uZSBvZiBhIGNvbGxlY3Rpb24gb2YgbGlua3MsCisgICAgICAgYnVmZmVyICByZXNpemluZyAgd2lsbCBvY2N1ciBvbmx5IHdoZW4gdGhlIGZpZWxkIGlzIGVkaXRlZCB0aHJvdWdoCisgICAgICAgdGhhdCBsaW5rLgorICAgICAqIFRoZSAgY2FsbCAgZmllbGRfaW5mbygpICB3aWxsIHJldHJpZXZlIHRoZSBvcmlnaW5hbCBzdGF0aWMgc2l6ZSBvZgorICAgICAgIHRoZSAgZmllbGQ7ICB1c2UgIGR5bmFtaWNfZmllbGRfaW5mbygpICB0byAgZ2V0IHRoZSBhY3R1YWwgZHluYW1pYworICAgICAgIHNpemUuCisKK0ZpZWxkIFZhbGlkYXRpb24KKworICAgQnkgIGRlZmF1bHQsICBhICBmaWVsZCB3aWxsIGFjY2VwdCBhbnkgZGF0YSB0aGF0IHdpbGwgZml0IGluIGl0cyBpbnB1dAorICAgYnVmZmVyLiAgSG93ZXZlciwgIGl0ICBpcyAgcG9zc2libGUgIHRvICBhdHRhY2ggYSB2YWxpZGF0aW9uIHR5cGUgdG8gYQorICAgZmllbGQuICBJZiAgeW91ICBkbyAgdGhpcywgIGFueSAgYXR0ZW1wdCAgdG8gIGxlYXZlIHRoZSBmaWVsZCB3aGlsZSBpdAorICAgY29udGFpbnMgIGRhdGEgIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgdmFsaWRhdGlvbiB0eXBlIHdpbGwgZmFpbC4gU29tZQorICAgdmFsaWRhdGlvbiAgdHlwZXMgYWxzbyBoYXZlIGEgY2hhcmFjdGVyLXZhbGlkaXR5IGNoZWNrIGZvciBlYWNoIHRpbWUgYQorICAgY2hhcmFjdGVyIGlzIGVudGVyZWQgaW4gdGhlIGZpZWxkLgorCisgICBBICAgZmllbGQncyAgIHZhbGlkYXRpb24gICBjaGVjayAgIChpZiAgIGFueSkgICBpcyAgIG5vdCAgY2FsbGVkICB3aGVuCisgICBzZXRfZmllbGRfYnVmZmVyKCkgIG1vZGlmaWVzIHRoZSBpbnB1dCBidWZmZXIsIG5vciB3aGVuIHRoYXQgYnVmZmVyIGlzCisgICBjaGFuZ2VkIHRocm91Z2ggYSBsaW5rZWQgZmllbGQuCisKKyAgIFRoZSAgZm9ybSBsaWJyYXJ5IHByb3ZpZGVzIGEgcmljaCBzZXQgb2YgcHJlLWRlZmluZWQgdmFsaWRhdGlvbiB0eXBlcywKKyAgIGFuZCAgZ2l2ZXMgIHlvdSAgdGhlIGNhcGFiaWxpdHkgdG8gZGVmaW5lIGN1c3RvbSBvbmVzIG9mIHlvdXIgb3duLiBZb3UKKyAgIGNhbiAgZXhhbWluZSBhbmQgY2hhbmdlIGZpZWxkIHZhbGlkYXRpb24gYXR0cmlidXRlcyB3aXRoIHRoZSBmb2xsb3dpbmcKKyAgIGZ1bmN0aW9uczoKK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICpmdHlwZSwgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIC4uLik7ICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBhcmd1bWVudHMqLworCitGSUVMRFRZUEUgKmZpZWxkX3R5cGUoRklFTEQgKmZpZWxkKTsgICAgICAvKiBmaWVsZCB0byBxdWVyeSAqLworCisgICBUaGUgIHZhbGlkYXRpb24gIHR5cGUgIG9mICBhICBmaWVsZCAgaXMgY29uc2lkZXJlZCBhbiBhdHRyaWJ1dGUgb2YgdGhlCisgICBmaWVsZC4gIEFzICB3aXRoICBvdGhlciBmaWVsZCBhdHRyaWJ1dGVzLCBBbHNvLCBkb2luZyBzZXRfZmllbGRfdHlwZSgpCisgICB3aXRoICBhICBOVUxMICBmaWVsZCAgZGVmYXVsdCAgd2lsbCAgY2hhbmdlICB0aGUgIHN5c3RlbSAgZGVmYXVsdCAgZm9yCisgICB2YWxpZGF0aW9uIG9mIG5ld2x5LWNyZWF0ZWQgZmllbGRzLgorCisgICBIZXJlIGFyZSB0aGUgcHJlLWRlZmluZWQgdmFsaWRhdGlvbiB0eXBlczoKKworICBUWVBFX0FMUEhBCisKKyAgIFRoaXMgIGZpZWxkICB0eXBlICBhY2NlcHRzICBhbHBoYWJldGljICBkYXRhOyBubyBibGFua3MsIG5vIGRpZ2l0cywgbm8KKyAgIHNwZWNpYWwgIGNoYXJhY3RlcnMgICh0aGlzICBpcyBjaGVja2VkIGF0IGNoYXJhY3Rlci1lbnRyeSB0aW1lKS4gSXQgaXMKKyAgIHNldCB1cCB3aXRoOgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0FMUEhBLCAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoKTsgICAgICAgICAgICAvKiBtYXhpbXVtIHdpZHRoIG9mIGZpZWxkICovCisKKyAgIFRoZSB3aWR0aCBhcmd1bWVudCBzZXRzIGEgbWluaW11bSB3aWR0aCBvZiBkYXRhLiBUeXBpY2FsbHkgeW91J2xsIHdhbnQKKyAgIHRvICBzZXQgdGhpcyB0byB0aGUgZmllbGQgd2lkdGg7IGlmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZSBmaWVsZCB3aWR0aCwKKyAgIHRoZSAgdmFsaWRhdGlvbiAgY2hlY2sgd2lsbCBhbHdheXMgZmFpbC4gQSBtaW5pbXVtIHdpZHRoIG9mIHplcm8gbWFrZXMKKyAgIGZpZWxkIGNvbXBsZXRpb24gb3B0aW9uYWwuCisKKyAgVFlQRV9BTE5VTQorCisgICBUaGlzICBmaWVsZCAgdHlwZSAgYWNjZXB0cyAgYWxwaGFiZXRpYyAgZGF0YSBhbmQgZGlnaXRzOyBubyBibGFua3MsIG5vCisgICBzcGVjaWFsICBjaGFyYWN0ZXJzICAodGhpcyAgaXMgY2hlY2tlZCBhdCBjaGFyYWN0ZXItZW50cnkgdGltZSkuIEl0IGlzCisgICBzZXQgdXAgd2l0aDoKK2ludCBzZXRfZmllbGRfdHlwZShGSUVMRCAqZmllbGQsICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9BTE5VTSwgICAgICAgICAgICAvKiB0eXBlIHRvIGFzc29jaWF0ZSAqLworICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCk7ICAgICAgICAgICAgLyogbWF4aW11bSB3aWR0aCBvZiBmaWVsZCAqLworCisgICBUaGUgIHdpZHRoICBhcmd1bWVudCBzZXRzIGEgbWluaW11bSB3aWR0aCBvZiBkYXRhLiBBcyB3aXRoIFRZUEVfQUxQSEEsCisgICB0eXBpY2FsbHkgIHlvdSdsbCB3YW50IHRvIHNldCB0aGlzIHRvIHRoZSBmaWVsZCB3aWR0aDsgaWYgaXQncyBncmVhdGVyCisgICB0aGFuIHRoZSBmaWVsZCB3aWR0aCwgdGhlIHZhbGlkYXRpb24gY2hlY2sgd2lsbCBhbHdheXMgZmFpbC4gQSBtaW5pbXVtCisgICB3aWR0aCBvZiB6ZXJvIG1ha2VzIGZpZWxkIGNvbXBsZXRpb24gb3B0aW9uYWwuCisKKyAgVFlQRV9FTlVNCisKKyAgIFRoaXMgIHR5cGUgIGFsbG93cyAgeW91ICB0byAgcmVzdHJpY3QgIGEgIGZpZWxkJ3MgdmFsdWVzIHRvIGJlIGFtb25nIGEKKyAgIHNwZWNpZmllZCAgc2V0ICBvZiAgc3RyaW5nICB2YWx1ZXMgKGZvciBleGFtcGxlLCB0aGUgdHdvLWxldHRlciBwb3N0YWwKKyAgIGNvZGVzIGZvciBVLlMuIHN0YXRlcykuIEl0IGlzIHNldCB1cCB3aXRoOgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBUWVBFX0VOVU0sICAgICAgICAgICAgIC8qIHR5cGUgdG8gYXNzb2NpYXRlICovCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnZhbHVlbGlzdDsgICAgICAvKiBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyAqLworICAgICAgICAgICAgICAgICAgIGludCBjaGVja2Nhc2U7ICAgICAgICAgLyogY2FzZS1zZW5zaXRpdmU/ICovCisgICAgICAgICAgICAgICAgICAgaW50IGNoZWNrdW5pcXVlKTsgICAgICAvKiBtdXN0IHNwZWNpZnkgdW5pcXVlbHk/ICovCisKKyAgIFRoZSAgdmFsdWVsaXN0IHBhcmFtZXRlciBtdXN0IHBvaW50IGF0IGEgTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YgdmFsaWQKKyAgIHN0cmluZ3MuICBUaGUgIGNoZWNrY2FzZSAgYXJndW1lbnQsIGlmIHRydWUsIG1ha2VzIGNvbXBhcmlzb24gd2l0aCB0aGUKKyAgIHN0cmluZyBjYXNlLXNlbnNpdGl2ZS4KKworICAgV2hlbiAgdGhlIHVzZXIgZXhpdHMgYSBUWVBFX0VOVU0gZmllbGQsIHRoZSB2YWxpZGF0aW9uIHByb2NlZHVyZSB0cmllcworICAgdG8gIGNvbXBsZXRlICB0aGUgIGRhdGEgIGluIHRoZSBidWZmZXIgdG8gYSB2YWxpZCBlbnRyeS4gSWYgYSBjb21wbGV0ZQorICAgY2hvaWNlICBzdHJpbmcgaGFzIGJlZW4gZW50ZXJlZCwgaXQgaXMgb2YgY291cnNlIHZhbGlkLiBCdXQgaXQgaXMgYWxzbworICAgcG9zc2libGUgdG8gZW50ZXIgYSBwcmVmaXggb2YgYSB2YWxpZCBzdHJpbmcgYW5kIGhhdmUgaXQgY29tcGxldGVkIGZvcgorICAgeW91LgorCisgICBCeSAgZGVmYXVsdCwgIGlmICB5b3UgZW50ZXIgc3VjaCBhIHByZWZpeCBhbmQgaXQgbWF0Y2hlcyBtb3JlIHRoYW4gb25lCisgICB2YWx1ZSAgaW4gIHRoZSAgc3RyaW5nIGxpc3QsIHRoZSBwcmVmaXggd2lsbCBiZSBjb21wbGV0ZWQgdG8gdGhlIGZpcnN0CisgICBtYXRjaGluZyB2YWx1ZS4gQnV0IHRoZSBjaGVja3VuaXF1ZSBhcmd1bWVudCwgaWYgdHJ1ZSwgcmVxdWlyZXMgcHJlZml4CisgICBtYXRjaGVzIHRvIGJlIHVuaXF1ZSBpbiBvcmRlciB0byBiZSB2YWxpZC4KKworICAgVGhlICAgUkVRX05FWFRfQ0hPSUNFICAgYW5kICBSRVFfUFJFVl9DSE9JQ0UgIGlucHV0ICByZXF1ZXN0cyAgY2FuICBiZQorICAgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIHRoZXNlIGZpZWxkcy4KKworICBUWVBFX0lOVEVHRVIKKworICAgVGhpcyBmaWVsZCB0eXBlIGFjY2VwdHMgYW4gaW50ZWdlci4gSXQgaXMgc2V0IHVwIGFzIGZvbGxvd3M6CitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfSU5URUdFUiwgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZywgICAgICAgICAgIC8qICMgcGxhY2VzIHRvIHplcm8tcGFkIHRvICovCisgICAgICAgICAgICAgICAgICAgaW50IHZtaW4sIGludCB2bWF4KTsgICAvKiB2YWxpZCByYW5nZSAqLworCisgICBWYWxpZCAgY2hhcmFjdGVycyBjb25zaXN0IG9mIGFuIG9wdGlvbmFsIGxlYWRpbmcgbWludXMgYW5kIGRpZ2l0cy4gVGhlCisgICByYW5nZSBjaGVjayBpcyBwZXJmb3JtZWQgb24gZXhpdC4gSWYgdGhlIHJhbmdlIG1heGltdW0gaXMgbGVzcyB0aGFuIG9yCisgICBlcXVhbCB0byB0aGUgbWluaW11bSwgdGhlIHJhbmdlIGlzIGlnbm9yZWQuCisKKyAgIElmIHRoZSB2YWx1ZSBwYXNzZXMgaXRzIHJhbmdlIGNoZWNrLCBpdCBpcyBwYWRkZWQgd2l0aCBhcyBtYW55IGxlYWRpbmcKKyAgIHplcm8gZGlnaXRzIGFzIG5lY2Vzc2FyeSB0byBtZWV0IHRoZSBwYWRkaW5nIGFyZ3VtZW50LgorCisgICBBIFRZUEVfSU5URUdFUiB2YWx1ZSBidWZmZXIgY2FuIGNvbnZlbmllbnRseSBiZSBpbnRlcnByZXRlZCB3aXRoIHRoZSBDCisgICBsaWJyYXJ5IGZ1bmN0aW9uIGF0b2koMykuCisKKyAgVFlQRV9OVU1FUklDCisKKyAgIFRoaXMgZmllbGQgdHlwZSBhY2NlcHRzIGEgZGVjaW1hbCBudW1iZXIuIEl0IGlzIHNldCB1cCBhcyBmb2xsb3dzOgoraW50IHNldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgICAgICAgICAgICAgIC8qIGZpZWxkIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgVFlQRV9OVU1FUklDLCAgICAgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgcGFkZGluZywgICAgICAgICAgICAgICAvKiAjIHBsYWNlcyBvZiBwcmVjaXNpb24gKi8KKyAgICAgICAgICAgICAgICAgICBkb3VibGUgdm1pbiwgZG91YmxlIHZtYXgpOyAvKiB2YWxpZCByYW5nZSAqLworCisgICBWYWxpZCAgY2hhcmFjdGVycyAgY29uc2lzdCAgb2YgIGFuICBvcHRpb25hbCBsZWFkaW5nIG1pbnVzIGFuZCBkaWdpdHMuCisgICBwb3NzaWJseSAgaW5jbHVkaW5nIGEgZGVjaW1hbCBwb2ludC4gSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgbG9jYWxlJ3MsCisgICB0aGUgIGRlY2ltYWwgIHBvaW50ICBjaGFyYWN0ZXIgIHVzZWQgIG11c3QgIGJlIHRoZSBvbmUgZGVmaW5lZCBieSB5b3VyCisgICBsb2NhbGUuICBUaGUgcmFuZ2UgY2hlY2sgaXMgcGVyZm9ybWVkIG9uIGV4aXQuIElmIHRoZSByYW5nZSBtYXhpbXVtIGlzCisgICBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbmltdW0sIHRoZSByYW5nZSBpcyBpZ25vcmVkLgorCisgICBJZiAgdGhlICB2YWx1ZSAgcGFzc2VzICBpdHMgIHJhbmdlICBjaGVjaywgIGl0ICBpcyBwYWRkZWQgd2l0aCBhcyBtYW55CisgICB0cmFpbGluZyB6ZXJvIGRpZ2l0cyBhcyBuZWNlc3NhcnkgdG8gbWVldCB0aGUgcGFkZGluZyBhcmd1bWVudC4KKworICAgQSBUWVBFX05VTUVSSUMgdmFsdWUgYnVmZmVyIGNhbiBjb252ZW5pZW50bHkgYmUgaW50ZXJwcmV0ZWQgd2l0aCB0aGUgQworICAgbGlicmFyeSBmdW5jdGlvbiBhdG9mKDMpLgorCisgIFRZUEVfUkVHRVhQCisKKyAgIFRoaXMgIGZpZWxkIHR5cGUgYWNjZXB0cyBkYXRhIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLiBJdCBpcyBzZXQKKyAgIHVwIGFzIGZvbGxvd3M6CitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCAgICAgICAgICAvKiBmaWVsZCB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgIFRZUEVfUkVHRVhQLCAgICAgICAgICAgLyogdHlwZSB0byBhc3NvY2lhdGUgKi8KKyAgICAgICAgICAgICAgICAgICBjaGFyICpyZWdleHApOyAgICAgICAgIC8qIGV4cHJlc3Npb24gdG8gbWF0Y2ggKi8KKworICAgVGhlICBzeW50YXggIGZvciAgcmVndWxhciBleHByZXNzaW9ucyBpcyB0aGF0IG9mIHJlZ2NvbXAoMykuIFRoZSBjaGVjaworICAgZm9yIHJlZ3VsYXItZXhwcmVzc2lvbiBtYXRjaCBpcyBwZXJmb3JtZWQgb24gZXhpdC4KKworRGlyZWN0IEZpZWxkIEJ1ZmZlciBNYW5pcHVsYXRpb24KKworICAgVGhlIGNoaWVmIGF0dHJpYnV0ZSBvZiBhIGZpZWxkIGlzIGl0cyBidWZmZXIgY29udGVudHMuIFdoZW4gYSBmb3JtIGhhcworICAgYmVlbiAgY29tcGxldGVkLCAgeW91ciAgYXBwbGljYXRpb24gdXN1YWxseSBuZWVkcyB0byBrbm93IHRoZSBzdGF0ZSBvZgorICAgZWFjaCBmaWVsZCBidWZmZXIuIFlvdSBjYW4gZmluZCB0aGlzIG91dCB3aXRoOgorY2hhciAqZmllbGRfYnVmZmVyKEZJRUxEICpmaWVsZCwgICAgICAgICAgLyogZmllbGQgdG8gcXVlcnkgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgYnVmaW5kZXgpOyAgICAgICAgIC8qIG51bWJlciBvZiBidWZmZXIgdG8gcXVlcnkgKi8KKworICAgTm9ybWFsbHksICB0aGUgc3RhdGUgb2YgdGhlIHplcm8tbnVtYmVyZWQgYnVmZmVyIGZvciBlYWNoIGZpZWxkIGlzIHNldAorICAgYnkgIHRoZSB1c2VyJ3MgZWRpdGluZyBhY3Rpb25zIG9uIHRoYXQgZmllbGQuIEl0J3Mgc29tZXRpbWVzIHVzZWZ1bCB0bworICAgYmUgIGFibGUgIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIHplcm8tbnVtYmVyZWQgKG9yIHNvbWUgb3RoZXIpIGJ1ZmZlcgorICAgZnJvbSB5b3VyIGFwcGxpY2F0aW9uOgoraW50IHNldF9maWVsZF9idWZmZXIoRklFTEQgKmZpZWxkLCAgICAgICAgLyogZmllbGQgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBpbnQgYnVmaW5kZXgsICAgICAgICAgIC8qIG51bWJlciBvZiBidWZmZXIgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSk7ICAgICAgICAgIC8qIHN0cmluZyB2YWx1ZSB0byBzZXQgKi8KKworICAgSWYgIHRoZSAgZmllbGQgIGlzICBub3QgIGxhcmdlICBlbm91Z2ggIGFuZCAgY2Fubm90ICBiZSAgcmVzaXplZCAgdG8gYQorICAgc3VmZmljaWVudGx5IGxhcmdlIHNpemUgdG8gY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlLCB0aGUgdmFsdWUgd2lsbAorICAgYmUgdHJ1bmNhdGVkIHRvIGZpdC4KKworICAgQ2FsbGluZyAgZmllbGRfYnVmZmVyKCkgd2l0aCBhIG51bGwgZmllbGQgcG9pbnRlciB3aWxsIHJhaXNlIGFuIGVycm9yLgorICAgQ2FsbGluZyAgZmllbGRfYnVmZmVyKCkgIG9uICBhICBmaWVsZCBub3QgY3VycmVudGx5IHNlbGVjdGVkIGZvciBpbnB1dAorICAgd2lsbCByZXR1cm4gYSBjb3JyZWN0IHZhbHVlLiBDYWxsaW5nIGZpZWxkX2J1ZmZlcigpIG9uIGEgZmllbGQgdGhhdCBpcworICAgY3VycmVudGx5ICBzZWxlY3RlZCBmb3IgaW5wdXQgbWF5IG5vdCBuZWNlc3NhcmlseSBnaXZlIGEgY29ycmVjdCBmaWVsZAorICAgYnVmZmVyICB2YWx1ZSwgYmVjYXVzZSBlbnRlcmVkIGRhdGEgaXNuJ3QgbmVjZXNzYXJpbHkgY29waWVkIHRvIGJ1ZmZlcgorICAgemVybyAgYmVmb3JlIHRoZSBleGl0IHZhbGlkYXRpb24gY2hlY2suIFRvIGd1YXJhbnRlZSB0aGF0IHRoZSByZXR1cm5lZAorICAgYnVmZmVyICB2YWx1ZSAgcmVmbGVjdHMgIG9uLXNjcmVlbiByZWFsaXR5LCBjYWxsIGZpZWxkX2J1ZmZlcigpIGVpdGhlcgorICAgKDEpIGluIHRoZSBmaWVsZCdzIGV4aXQgdmFsaWRhdGlvbiBjaGVjayByb3V0aW5lLCAoMikgZnJvbSB0aGUgZmllbGQncworICAgb3IgIGZvcm0ncyAgaW5pdGlhbGl6YXRpb24gIG9yICB0ZXJtaW5hdGlvbiBob29rcywgb3IgKDMpIGp1c3QgYWZ0ZXIgYQorICAgUkVRX1ZBTElEQVRJT04gcmVxdWVzdCBoYXMgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGZvcm1zIGRyaXZlci4KKworQXR0cmlidXRlcyBvZiBGb3JtcworCisgICBBcyAgd2l0aCAgZmllbGQgIGF0dHJpYnV0ZXMsICBmb3JtIGF0dHJpYnV0ZXMgaW5oZXJpdCBhIGRlZmF1bHQgZnJvbSBhCisgICBzeXN0ZW0gZGVmYXVsdCBmb3JtIHN0cnVjdHVyZS4gVGhlc2UgZGVmYXVsdHMgY2FuIGJlIHF1ZXJpZWQgb3Igc2V0IGJ5CisgICBvZiB0aGVzZSBmdW5jdGlvbnMgdXNpbmcgYSBmb3JtLXBvaW50ZXIgYXJndW1lbnQgb2YgTlVMTC4KKworICAgVGhlIHByaW5jaXBhbCBhdHRyaWJ1dGUgb2YgYSBmb3JtIGlzIGl0cyBmaWVsZCBsaXN0LiBZb3UgY2FuIHF1ZXJ5IGFuZAorICAgY2hhbmdlIHRoaXMgbGlzdCB3aXRoOgoraW50IHNldF9mb3JtX2ZpZWxkcyhGT1JNICpmb3JtLCAgICAgICAgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgICBGSUVMRCAqKmZpZWxkcyk7ICAgICAgLyogZmllbGRzIHRvIGNvbm5lY3QgKi8KKworY2hhciAqZm9ybV9maWVsZHMoRk9STSAqZm9ybSk7ICAgICAgICAgICAgLyogZmV0Y2ggZmllbGRzIG9mIGZvcm0gKi8KKworaW50IGZpZWxkX2NvdW50KEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAgLyogY291bnQgY29ubmVjdCBmaWVsZHMgKi8KKworICAgVGhlICBzZWNvbmQgIGFyZ3VtZW50ICBvZiAgc2V0X2Zvcm1fZmllbGRzKCkgIG1heSBiZSBhIE5VTEwtdGVybWluYXRlZAorICAgZmllbGQgcG9pbnRlciBhcnJheSBsaWtlIHRoZSBvbmUgcmVxdWlyZWQgYnkgbmV3X2Zvcm0oKS4gSW4gdGhhdCBjYXNlLAorICAgdGhlICBvbGQgIGZpZWxkcyAgb2YgIHRoZSAgZm9ybSAgYXJlICBkaXNjb25uZWN0ZWQgIGJ1dCBub3QgZnJlZWQgKGFuZAorICAgZWxpZ2libGUgIHRvICBiZSAgY29ubmVjdGVkICB0byAgb3RoZXIgZm9ybXMpLCB0aGVuIHRoZSBuZXcgZmllbGRzIGFyZQorICAgY29ubmVjdGVkLgorCisgICBJdCAgbWF5ICBhbHNvICBiZSAgbnVsbCwgaW4gd2hpY2ggY2FzZSB0aGUgb2xkIGZpZWxkcyBhcmUgZGlzY29ubmVjdGVkCisgICAoYW5kIG5vdCBmcmVlZCkgYnV0IG5vIG5ldyBvbmVzIGFyZSBjb25uZWN0ZWQuCisKKyAgIFRoZSAgIGZpZWxkX2NvdW50KCkgIGZ1bmN0aW9uICBzaW1wbHkgIGNvdW50cyAgdGhlICBudW1iZXIgIG9mICBmaWVsZHMKKyAgIGNvbm5lY3RlZCAgdG8gYSBnaXZlbiBmcm9tLiBJdCByZXR1cm5zIC0xIGlmIHRoZSBmb3JtLXBvaW50ZXIgYXJndW1lbnQKKyAgIGlzIE5VTEwuCisKK0NvbnRyb2wgb2YgRm9ybSBEaXNwbGF5CisKKyAgIEluICB0aGUgIG92ZXJ2aWV3IHNlY3Rpb24sIHlvdSBzYXcgdGhhdCB0byBkaXNwbGF5IGEgZm9ybSB5b3Ugbm9ybWFsbHkKKyAgIHN0YXJ0ICBieSAgZGVmaW5pbmcgIGl0cyBzaXplIChhbmQgZmllbGRzKSwgcG9zdGluZyBpdCwgYW5kIHJlZnJlc2hpbmcKKyAgIHRoZSAgc2NyZWVuLiAgVGhlcmUgIGlzICBhbiAgaGlkZGVuICBzdGVwIGJlZm9yZSBwb3N0aW5nLCB3aGljaCBpcyB0aGUKKyAgIGFzc29jaWF0aW9uICBvZiAgdGhlICBmb3JtICB3aXRoICBhICBmcmFtZSB3aW5kb3cgKGFjdHVhbGx5LCBhIHBhaXIgb2YKKyAgIHdpbmRvd3MpICB3aXRoaW4gIHdoaWNoICBpdCAgd2lsbCAgYmUgZGlzcGxheWVkLiBCeSBkZWZhdWx0LCB0aGUgZm9ybXMKKyAgIGxpYnJhcnkgYXNzb2NpYXRlcyBldmVyeSBmb3JtIHdpdGggdGhlIGZ1bGwtc2NyZWVuIHdpbmRvdyBzdGRzY3IuCisKKyAgIEJ5IG1ha2luZyB0aGlzIHN0ZXAgZXhwbGljaXQsIHlvdSBjYW4gYXNzb2NpYXRlIGEgZm9ybSB3aXRoIGEgZGVjbGFyZWQKKyAgIGZyYW1lIHdpbmRvdyBvbiB5b3VyIHNjcmVlbiBkaXNwbGF5LiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8KKyAgIGFkYXB0ICB0aGUgIGZvcm0gIGRpc3BsYXkgIHRvIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMsIGR5bmFtaWNhbGx5IHRpbGUKKyAgIGZvcm1zICBvbiAgdGhlICBzY3JlZW4sICBvciAgdXNlIGEgZm9ybSBhcyBwYXJ0IG9mIGFuIGludGVyZmFjZSBsYXlvdXQKKyAgIG1hbmFnZWQgYnkgcGFuZWxzLgorCisgICBUaGUgIHR3byAgd2luZG93cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBmb3JtIGhhdmUgdGhlIHNhbWUgZnVuY3Rpb25zIGFzCisgICB0aGVpciAgYW5hbG9ndWVzICBpbiAgdGhlIG1lbnUgbGlicmFyeS4gQm90aCB0aGVzZSB3aW5kb3dzIGFyZSBwYWludGVkCisgICB3aGVuIHRoZSBmb3JtIGlzIHBvc3RlZCBhbmQgZXJhc2VkIHdoZW4gdGhlIGZvcm0gaXMgdW5wb3N0ZWQuCisKKyAgIFRoZSAgb3V0ZXIgIG9yICBmcmFtZSAgd2luZG93ICBpcyAgbm90ICBvdGhlcndpc2UgIHRvdWNoZWQgYnkgdGhlIGZvcm0KKyAgIHJvdXRpbmVzLiBJdCBleGlzdHMgc28gdGhlIHByb2dyYW1tZXIgY2FuIGFzc29jaWF0ZSBhIHRpdGxlLCBhIGJvcmRlciwKKyAgIG9yICBwZXJoYXBzICBoZWxwIHRleHQgd2l0aCB0aGUgZm9ybSBhbmQgaGF2ZSBpdCBwcm9wZXJseSByZWZyZXNoZWQgb3IKKyAgIGVyYXNlZCBhdCBwb3N0L3VucG9zdCB0aW1lLiBUaGUgaW5uZXIgd2luZG93IG9yIHN1YndpbmRvdyBpcyB3aGVyZSB0aGUKKyAgIGN1cnJlbnQgZm9ybSBwYWdlIGlzIGFjdHVhbGx5IGRpc3BsYXllZC4KKworICAgSW4gIG9yZGVyICB0byBkZWNsYXJlIHlvdXIgb3duIGZyYW1lIHdpbmRvdyBmb3IgYSBmb3JtLCB5b3UnbGwgbmVlZCB0bworICAga25vdyAgdGhlICBzaXplICBvZiAgdGhlICBmb3JtJ3MgIGJvdW5kaW5nIHJlY3RhbmdsZS4gWW91IGNhbiBnZXQgdGhpcworICAgaW5mb3JtYXRpb24gd2l0aDoKK2ludCBzY2FsZV9mb3JtKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKyAgICAgICAgICAgICAgIGludCAqcm93cywgICAgICAgICAgICAgICAgIC8qIGZvcm0gcm93cyAqLworICAgICAgICAgICAgICAgaW50ICpjb2xzKTsgICAgICAgICAgICAgICAgLyogZm9ybSBjb2xzICovCisKKyAgIFRoZSBmb3JtIGRpbWVuc2lvbnMgYXJlIHBhc3NlZCBiYWNrIGluIHRoZSBsb2NhdGlvbnMgcG9pbnRlZCB0byBieSB0aGUKKyAgIGFyZ3VtZW50cy4gIE9uY2UgIHlvdSBoYXZlIHRoaXMgaW5mb3JtYXRpb24sIHlvdSBjYW4gdXNlIGl0IHRvIGRlY2xhcmUKKyAgIG9mIHdpbmRvd3MsIHRoZW4gdXNlIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnM6CitpbnQgc2V0X2Zvcm1fd2luKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgIFdJTkRPVyAqd2luKTsgICAgICAgICAgICAvKiBmcmFtZSB3aW5kb3cgdG8gY29ubmVjdCAqLworCitXSU5ET1cgKmZvcm1fd2luKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAvKiBmZXRjaCBmcmFtZSB3aW5kb3cgb2YgZm9ybSAqLworCitpbnQgc2V0X2Zvcm1fc3ViKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgIFdJTkRPVyAqd2luKTsgICAgICAgICAgICAvKiBmb3JtIHN1YndpbmRvdyB0byBjb25uZWN0ICovCisKK1dJTkRPVyAqZm9ybV9zdWIoRk9STSAqZm9ybSk7ICAgICAgICAgICAgIC8qIGZldGNoIGZvcm0gc3Vid2luZG93IG9mIGZvcm0gKi8KKworICAgTm90ZSAgdGhhdCBjdXJzZXMgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHJlZnJlc2goKSwgb24gdGhlIGZvcm0sIHNob3VsZAorICAgYmUgZG9uZSBvbiB0aGUgZnJhbWUgd2luZG93LCBub3QgdGhlIGZvcm0gc3Vid2luZG93LgorCisgICBJdCAgaXMgIHBvc3NpYmxlICB0byAgY2hlY2sgIGZyb20gIHlvdXIgIGFwcGxpY2F0aW9uICB3aGV0aGVyIGFsbCBvZiBhCisgICBzY3JvbGxhYmxlICBmaWVsZCBpcyBhY3R1YWxseSBkaXNwbGF5ZWQgd2l0aGluIHRoZSBtZW51IHN1YndpbmRvdy4gVXNlCisgICB0aGVzZSBmdW5jdGlvbnM6CitpbnQgZGF0YV9haGVhZChGT1JNICpmb3JtKTsgICAgICAgICAgICAgICAvKiBmb3JtIHRvIGJlIHF1ZXJpZWQgKi8KKworaW50IGRhdGFfYmVoaW5kKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAgLyogZm9ybSB0byBiZSBxdWVyaWVkICovCisKKyAgIFRoZSAgZnVuY3Rpb24gIGRhdGFfYWhlYWQoKSAgcmV0dXJucyAgVFJVRSBpZiAoYSkgdGhlIGN1cnJlbnQgZmllbGQgaXMKKyAgIG9uZS1saW5lICBhbmQgIGhhcyAgdW5kaXNwbGF5ZWQgZGF0YSBvZmYgdG8gdGhlIHJpZ2h0LCAoYikgdGhlIGN1cnJlbnQKKyAgIGZpZWxkIGlzIG11bHRpLWxpbmUgYW5kIHRoZXJlIGlzIGRhdGEgb2ZmLXNjcmVlbiBiZWxvdyBpdC4KKworICAgVGhlIGZ1bmN0aW9uIGRhdGFfYmVoaW5kKCkgcmV0dXJucyBUUlVFIGlmIHRoZSBmaXJzdCAodXBwZXIgbGVmdCBoYW5kKQorICAgY2hhcmFjdGVyIHBvc2l0aW9uIGlzIG9mZi1zY3JlZW4gKG5vdCBiZWluZyBkaXNwbGF5ZWQpLgorCisgICBGaW5hbGx5LCAgdGhlcmUgIGlzICBhIGZ1bmN0aW9uIHRvIHJlc3RvcmUgdGhlIGZvcm0gd2luZG93J3MgY3Vyc29yIHRvCisgICB0aGUgdmFsdWUgZXhwZWN0ZWQgYnkgdGhlIGZvcm1zIGRyaXZlcjoKK2ludCBwb3NfZm9ybV9jdXJzb3IoRk9STSAqKSAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gYmUgcXVlcmllZCAqLworCisgICBJZiB5b3VyIGFwcGxpY2F0aW9uIGNoYW5nZXMgdGhlIGZvcm0gd2luZG93IGN1cnNvciwgY2FsbCB0aGlzIGZ1bmN0aW9uCisgICBiZWZvcmUgICBoYW5kaW5nICBjb250cm9sICBiYWNrICB0byAgdGhlICBmb3JtcyAgZHJpdmVyICBpbiAgb3JkZXIgIHRvCisgICByZS1zeW5jaHJvbml6ZSBpdC4KKworSW5wdXQgUHJvY2Vzc2luZyBpbiB0aGUgRm9ybXMgRHJpdmVyCisKKyAgIFRoZSBmdW5jdGlvbiBmb3JtX2RyaXZlcigpIGhhbmRsZXMgdmlydHVhbGl6ZWQgaW5wdXQgcmVxdWVzdHMgZm9yIGZvcm0KKyAgIG5hdmlnYXRpb24sIGVkaXRpbmcsIGFuZCB2YWxpZGF0aW9uIHJlcXVlc3RzLCBqdXN0IGFzIG1lbnVfZHJpdmVyIGRvZXMKKyAgIGZvciBtZW51cyAoc2VlIHRoZSBzZWN0aW9uIG9uIG1lbnUgaW5wdXQgaGFuZGxpbmcpLgoraW50IGZvcm1fZHJpdmVyKEZPUk0gKmZvcm0sICAgICAgICAgICAgICAgLyogZm9ybSB0byBwYXNzIGlucHV0IHRvICovCisgICAgICAgICAgICAgICAgaW50IHJlcXVlc3QpOyAgICAgICAgICAgICAvKiBmb3JtIHJlcXVlc3QgY29kZSAqLworCisgICBZb3VyICBpbnB1dCAgdmlydHVhbGl6YXRpb24gIGZ1bmN0aW9uICBuZWVkcyAgdG8gIHRha2UgIGlucHV0IGFuZCB0aGVuCisgICBjb252ZXJ0ICBpdCAgdG8gIGVpdGhlciBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyICh3aGljaCBpcyB0cmVhdGVkIGFzCisgICBkYXRhICB0byAgYmUgIGVudGVyZWQgIGluICB0aGUgIGN1cnJlbnRseS1zZWxlY3RlZCAgZmllbGQpLCBvciBhIGZvcm1zCisgICBwcm9jZXNzaW5nIHJlcXVlc3QuCisKKyAgIFRoZSAgIGZvcm1zICAgZHJpdmVyICBwcm92aWRlcyAgaG9va3MgICh0aHJvdWdoICBpbnB1dC12YWxpZGF0aW9uICBhbmQKKyAgIGZpZWxkLXRlcm1pbmF0aW9uICBmdW5jdGlvbnMpICB3aXRoICB3aGljaCAgeW91ciAgYXBwbGljYXRpb24gY29kZSBjYW4KKyAgIGNoZWNrIHRoYXQgdGhlIGlucHV0IHRha2VuIGJ5IHRoZSBkcml2ZXIgbWF0Y2hlZCB3aGF0IHdhcyBleHBlY3RlZC4KKworICBQYWdlIE5hdmlnYXRpb24gUmVxdWVzdHMKKworICAgVGhlc2UgIHJlcXVlc3RzICBjYXVzZSAgcGFnZS1sZXZlbCAgbW92ZXMgdGhyb3VnaCB0aGUgZm9ybSwgdHJpZ2dlcmluZworICAgZGlzcGxheSBvZiBhIG5ldyBmb3JtIHNjcmVlbi4KKworICAgUkVRX05FWFRfUEFHRQorICAgICAgICAgIE1vdmUgdG8gdGhlIG5leHQgZm9ybSBwYWdlLgorCisgICBSRVFfUFJFVl9QQUdFCisgICAgICAgICAgTW92ZSB0byB0aGUgcHJldmlvdXMgZm9ybSBwYWdlLgorCisgICBSRVFfRklSU1RfUEFHRQorICAgICAgICAgIE1vdmUgdG8gdGhlIGZpcnN0IGZvcm0gcGFnZS4KKworICAgUkVRX0xBU1RfUEFHRQorICAgICAgICAgIE1vdmUgdG8gdGhlIGxhc3QgZm9ybSBwYWdlLgorCisgICBUaGVzZSAgcmVxdWVzdHMgIHRyZWF0IHRoZSBsaXN0IGFzIGN5Y2xpYzsgdGhhdCBpcywgUkVRX05FWFRfUEFHRSBmcm9tCisgICB0aGUgbGFzdCBwYWdlIGdvZXMgdG8gdGhlIGZpcnN0LCBhbmQgUkVRX1BSRVZfUEFHRSBmcm9tIHRoZSBmaXJzdCBwYWdlCisgICBnb2VzIHRvIHRoZSBsYXN0LgorCisgIEludGVyLUZpZWxkIE5hdmlnYXRpb24gUmVxdWVzdHMKKworICAgVGhlc2UgcmVxdWVzdHMgaGFuZGxlIG5hdmlnYXRpb24gYmV0d2VlbiBmaWVsZHMgb24gdGhlIHNhbWUgcGFnZS4KKworICAgUkVRX05FWFRfRklFTEQKKyAgICAgICAgICBNb3ZlIHRvIG5leHQgZmllbGQuCisKKyAgIFJFUV9QUkVWX0ZJRUxECisgICAgICAgICAgTW92ZSB0byBwcmV2aW91cyBmaWVsZC4KKworICAgUkVRX0ZJUlNUX0ZJRUxECisgICAgICAgICAgTW92ZSB0byB0aGUgZmlyc3QgZmllbGQuCisKKyAgIFJFUV9MQVNUX0ZJRUxECisgICAgICAgICAgTW92ZSB0byB0aGUgbGFzdCBmaWVsZC4KKworICAgUkVRX1NORVhUX0ZJRUxECisgICAgICAgICAgTW92ZSB0byBzb3J0ZWQgbmV4dCBmaWVsZC4KKworICAgUkVRX1NQUkVWX0ZJRUxECisgICAgICAgICAgTW92ZSB0byBzb3J0ZWQgcHJldmlvdXMgZmllbGQuCisKKyAgIFJFUV9TRklSU1RfRklFTEQKKyAgICAgICAgICBNb3ZlIHRvIHRoZSBzb3J0ZWQgZmlyc3QgZmllbGQuCisKKyAgIFJFUV9TTEFTVF9GSUVMRAorICAgICAgICAgIE1vdmUgdG8gdGhlIHNvcnRlZCBsYXN0IGZpZWxkLgorCisgICBSRVFfTEVGVF9GSUVMRAorICAgICAgICAgIE1vdmUgbGVmdCB0byBmaWVsZC4KKworICAgUkVRX1JJR0hUX0ZJRUxECisgICAgICAgICAgTW92ZSByaWdodCB0byBmaWVsZC4KKworICAgUkVRX1VQX0ZJRUxECisgICAgICAgICAgTW92ZSB1cCB0byBmaWVsZC4KKworICAgUkVRX0RPV05fRklFTEQKKyAgICAgICAgICBNb3ZlIGRvd24gdG8gZmllbGQuCisKKyAgIFRoZXNlICByZXF1ZXN0cyB0cmVhdCB0aGUgbGlzdCBvZiBmaWVsZHMgb24gYSBwYWdlIGFzIGN5Y2xpYzsgdGhhdCBpcywKKyAgIFJFUV9ORVhUX0ZJRUxEICAgZnJvbSAgIHRoZSAgIGxhc3QgICBmaWVsZCAgZ29lcyAgdG8gIHRoZSAgZmlyc3QsICBhbmQKKyAgIFJFUV9QUkVWX0ZJRUxEIGZyb20gdGhlIGZpcnN0IGZpZWxkIGdvZXMgdG8gdGhlIGxhc3QuIFRoZSBvcmRlciBvZiB0aGUKKyAgIGZpZWxkcyBmb3IgdGhlc2UgKGFuZCB0aGUgUkVRX0ZJUlNUX0ZJRUxEIGFuZCBSRVFfTEFTVF9GSUVMRCByZXF1ZXN0cykKKyAgIGlzIHNpbXBseSB0aGUgb3JkZXIgb2YgdGhlIGZpZWxkIHBvaW50ZXJzIGluIHRoZSBmb3JtIGFycmF5IChhcyBzZXQgdXAKKyAgIGJ5IG5ld19mb3JtKCkgb3Igc2V0X2Zvcm1fZmllbGRzKCkKKworICAgSXQgIGlzIGFsc28gcG9zc2libGUgdG8gdHJhdmVyc2UgdGhlIGZpZWxkcyBhcyBpZiB0aGV5IGhhZCBiZWVuIHNvcnRlZAorICAgaW4gIHNjcmVlbi1wb3NpdGlvbiAgb3JkZXIsICBzbyAgdGhlICBzZXF1ZW5jZSAgZ29lcyBsZWZ0LXRvLXJpZ2h0IGFuZAorICAgdG9wLXRvLWJvdHRvbS4gICBUbyAgIGRvICAgdGhpcywgICB1c2UgICB0aGUgICBzZWNvbmQgIGdyb3VwICBvZiAgZm91cgorICAgc29ydGVkLW1vdmVtZW50IHJlcXVlc3RzLgorCisgICBGaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBtb3ZlIGJldHdlZW4gZmllbGRzIHVzaW5nIHZpc3VhbCBkaXJlY3Rpb25zCisgICB1cCwgIGRvd24sIHJpZ2h0LCBhbmQgbGVmdC4gVG8gYWNjb21wbGlzaCB0aGlzLCB1c2UgdGhlIHRoaXJkIGdyb3VwIG9mCisgICBmb3VyIHJlcXVlc3RzLiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBwb3NpdGlvbiBvZiBhIGZvcm0gZm9yIHB1cnBvc2VzCisgICBvZiB0aGVzZSByZXF1ZXN0cyBpcyBpdHMgdXBwZXItbGVmdCBjb3JuZXIuCisKKyAgIEZvciAgIGV4YW1wbGUsICBzdXBwb3NlICB5b3UgIGhhdmUgIGEgIG11bHRpLWxpbmUgIGZpZWxkICBCLCAgYW5kICB0d28KKyAgIHNpbmdsZS1saW5lIGZpZWxkcyBBIGFuZCBDIG9uIHRoZSBzYW1lIGxpbmUgd2l0aCBCLCB3aXRoIEEgdG8gdGhlIGxlZnQKKyAgIG9mICBCICBhbmQgIEMgIHRvIHRoZSByaWdodCBvZiBCLiBBIFJFUV9NT1ZFX1JJR0hUIGZyb20gQSB3aWxsIGdvIHRvIEIKKyAgIG9ubHkgIGlmICBBLCBCLCBhbmQgQyBhbGwgc2hhcmUgdGhlIHNhbWUgZmlyc3QgbGluZTsgb3RoZXJ3aXNlIGl0IHdpbGwKKyAgIHNraXAgb3ZlciBCIHRvIEMuCisKKyAgSW50cmEtRmllbGQgTmF2aWdhdGlvbiBSZXF1ZXN0cworCisgICBUaGVzZSAgcmVxdWVzdHMgZHJpdmUgbW92ZW1lbnQgb2YgdGhlIGVkaXQgY3Vyc29yIHdpdGhpbiB0aGUgY3VycmVudGx5CisgICBzZWxlY3RlZCBmaWVsZC4KKworICAgUkVRX05FWFRfQ0hBUgorICAgICAgICAgIE1vdmUgdG8gbmV4dCBjaGFyYWN0ZXIuCisKKyAgIFJFUV9QUkVWX0NIQVIKKyAgICAgICAgICBNb3ZlIHRvIHByZXZpb3VzIGNoYXJhY3Rlci4KKworICAgUkVRX05FWFRfTElORQorICAgICAgICAgIE1vdmUgdG8gbmV4dCBsaW5lLgorCisgICBSRVFfUFJFVl9MSU5FCisgICAgICAgICAgTW92ZSB0byBwcmV2aW91cyBsaW5lLgorCisgICBSRVFfTkVYVF9XT1JECisgICAgICAgICAgTW92ZSB0byBuZXh0IHdvcmQuCisKKyAgIFJFUV9QUkVWX1dPUkQKKyAgICAgICAgICBNb3ZlIHRvIHByZXZpb3VzIHdvcmQuCisKKyAgIFJFUV9CRUdfRklFTEQKKyAgICAgICAgICBNb3ZlIHRvIGJlZ2lubmluZyBvZiBmaWVsZC4KKworICAgUkVRX0VORF9GSUVMRAorICAgICAgICAgIE1vdmUgdG8gZW5kIG9mIGZpZWxkLgorCisgICBSRVFfQkVHX0xJTkUKKyAgICAgICAgICBNb3ZlIHRvIGJlZ2lubmluZyBvZiBsaW5lLgorCisgICBSRVFfRU5EX0xJTkUKKyAgICAgICAgICBNb3ZlIHRvIGVuZCBvZiBsaW5lLgorCisgICBSRVFfTEVGVF9DSEFSCisgICAgICAgICAgTW92ZSBsZWZ0IGluIGZpZWxkLgorCisgICBSRVFfUklHSFRfQ0hBUgorICAgICAgICAgIE1vdmUgcmlnaHQgaW4gZmllbGQuCisKKyAgIFJFUV9VUF9DSEFSCisgICAgICAgICAgTW92ZSB1cCBpbiBmaWVsZC4KKworICAgUkVRX0RPV05fQ0hBUgorICAgICAgICAgIE1vdmUgZG93biBpbiBmaWVsZC4KKworICAgRWFjaCAgd29yZCAgaXMgIHNlcGFyYXRlZCAgZnJvbSAgdGhlICBwcmV2aW91cyAgYW5kIG5leHQgY2hhcmFjdGVycyBieQorICAgd2hpdGVzcGFjZS4gVGhlIGNvbW1hbmRzIHRvIG1vdmUgdG8gYmVnaW5uaW5nIGFuZCBlbmQgb2YgbGluZSBvciBmaWVsZAorICAgbG9vayBmb3IgdGhlIGZpcnN0IG9yIGxhc3Qgbm9uLXBhZCBjaGFyYWN0ZXIgaW4gdGhlaXIgcmFuZ2VzLgorCisgIFNjcm9sbGluZyBSZXF1ZXN0cworCisgICBGaWVsZHMgIHRoYXQgIGFyZSBkeW5hbWljIGFuZCBoYXZlIGdyb3duIGFuZCBmaWVsZHMgZXhwbGljaXRseSBjcmVhdGVkCisgICB3aXRoICAgb2Zmc2NyZWVuICAgcm93cyAgIGFyZSAgIHNjcm9sbGFibGUuICAgT25lLWxpbmUgIGZpZWxkcyAgc2Nyb2xsCisgICBob3Jpem9udGFsbHk7ICBtdWx0aS1saW5lICBmaWVsZHMgc2Nyb2xsIHZlcnRpY2FsbHkuIE1vc3Qgc2Nyb2xsaW5nIGlzCisgICB0cmlnZ2VyZWQgYnkgZWRpdGluZyBhbmQgaW50cmEtZmllbGQgbW92ZW1lbnQgKHRoZSBsaWJyYXJ5IHNjcm9sbHMgdGhlCisgICBmaWVsZCAgdG8gIGtlZXAgIHRoZSAgY3Vyc29yICB2aXNpYmxlKS4gIEl0ICBpcyBwb3NzaWJsZSB0byBleHBsaWNpdGx5CisgICByZXF1ZXN0IHNjcm9sbGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgcmVxdWVzdHM6CisKKyAgIFJFUV9TQ1JfRkxJTkUKKyAgICAgICAgICBTY3JvbGwgdmVydGljYWxseSBmb3J3YXJkIGEgbGluZS4KKworICAgUkVRX1NDUl9CTElORQorICAgICAgICAgIFNjcm9sbCB2ZXJ0aWNhbGx5IGJhY2t3YXJkIGEgbGluZS4KKworICAgUkVRX1NDUl9GUEFHRQorICAgICAgICAgIFNjcm9sbCB2ZXJ0aWNhbGx5IGZvcndhcmQgYSBwYWdlLgorCisgICBSRVFfU0NSX0JQQUdFCisgICAgICAgICAgU2Nyb2xsIHZlcnRpY2FsbHkgYmFja3dhcmQgYSBwYWdlLgorCisgICBSRVFfU0NSX0ZIUEFHRQorICAgICAgICAgIFNjcm9sbCB2ZXJ0aWNhbGx5IGZvcndhcmQgaGFsZiBhIHBhZ2UuCisKKyAgIFJFUV9TQ1JfQkhQQUdFCisgICAgICAgICAgU2Nyb2xsIHZlcnRpY2FsbHkgYmFja3dhcmQgaGFsZiBhIHBhZ2UuCisKKyAgIFJFUV9TQ1JfRkNIQVIKKyAgICAgICAgICBTY3JvbGwgaG9yaXpvbnRhbGx5IGZvcndhcmQgYSBjaGFyYWN0ZXIuCisKKyAgIFJFUV9TQ1JfQkNIQVIKKyAgICAgICAgICBTY3JvbGwgaG9yaXpvbnRhbGx5IGJhY2t3YXJkIGEgY2hhcmFjdGVyLgorCisgICBSRVFfU0NSX0hGTElORQorICAgICAgICAgIFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGZpZWxkIHdpZHRoIGZvcndhcmQuCisKKyAgIFJFUV9TQ1JfSEJMSU5FCisgICAgICAgICAgU2Nyb2xsIGhvcml6b250YWxseSBvbmUgZmllbGQgd2lkdGggYmFja3dhcmQuCisKKyAgIFJFUV9TQ1JfSEZIQUxGCisgICAgICAgICAgU2Nyb2xsIGhvcml6b250YWxseSBvbmUgaGFsZiBmaWVsZCB3aWR0aCBmb3J3YXJkLgorCisgICBSRVFfU0NSX0hCSEFMRgorICAgICAgICAgIFNjcm9sbCBob3Jpem9udGFsbHkgb25lIGhhbGYgZmllbGQgd2lkdGggYmFja3dhcmQuCisKKyAgIEZvciBzY3JvbGxpbmcgcHVycG9zZXMsIGEgcGFnZSBvZiBhIGZpZWxkIGlzIHRoZSBoZWlnaHQgb2YgaXRzIHZpc2libGUKKyAgIHBhcnQuCisKKyAgRWRpdGluZyBSZXF1ZXN0cworCisgICBXaGVuICB5b3UgcGFzcyB0aGUgZm9ybXMgZHJpdmVyIGFuIEFTQ0lJIGNoYXJhY3RlciwgaXQgaXMgdHJlYXRlZCBhcyBhCisgICByZXF1ZXN0ICB0byBhZGQgdGhlIGNoYXJhY3RlciB0byB0aGUgZmllbGQncyBkYXRhIGJ1ZmZlci4gV2hldGhlciB0aGlzCisgICBpcyAgYW4gIGluc2VydGlvbiAgb3IgIGEgIHJlcGxhY2VtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkJ3MgZWRpdCBtb2RlCisgICAoaW5zZXJ0aW9uIGlzIHRoZSBkZWZhdWx0LgorCisgICBUaGUgZm9sbG93aW5nIHJlcXVlc3RzIHN1cHBvcnQgZWRpdGluZyB0aGUgZmllbGQgYW5kIGNoYW5naW5nIHRoZSBlZGl0CisgICBtb2RlOgorCisgICBSRVFfSU5TX01PREUKKyAgICAgICAgICBTZXQgaW5zZXJ0aW9uIG1vZGUuCisKKyAgIFJFUV9PVkxfTU9ERQorICAgICAgICAgIFNldCBvdmVybGF5IG1vZGUuCisKKyAgIFJFUV9ORVdfTElORQorICAgICAgICAgIE5ldyBsaW5lIHJlcXVlc3QgKHNlZSBiZWxvdyBmb3IgZXhwbGFuYXRpb24pLgorCisgICBSRVFfSU5TX0NIQVIKKyAgICAgICAgICBJbnNlcnQgc3BhY2UgYXQgY2hhcmFjdGVyIGxvY2F0aW9uLgorCisgICBSRVFfSU5TX0xJTkUKKyAgICAgICAgICBJbnNlcnQgYmxhbmsgbGluZSBhdCBjaGFyYWN0ZXIgbG9jYXRpb24uCisKKyAgIFJFUV9ERUxfQ0hBUgorICAgICAgICAgIERlbGV0ZSBjaGFyYWN0ZXIgYXQgY3Vyc29yLgorCisgICBSRVFfREVMX1BSRVYKKyAgICAgICAgICBEZWxldGUgcHJldmlvdXMgd29yZCBhdCBjdXJzb3IuCisKKyAgIFJFUV9ERUxfTElORQorICAgICAgICAgIERlbGV0ZSBsaW5lIGF0IGN1cnNvci4KKworICAgUkVRX0RFTF9XT1JECisgICAgICAgICAgRGVsZXRlIHdvcmQgYXQgY3Vyc29yLgorCisgICBSRVFfQ0xSX0VPTAorICAgICAgICAgIENsZWFyIHRvIGVuZCBvZiBsaW5lLgorCisgICBSRVFfQ0xSX0VPRgorICAgICAgICAgIENsZWFyIHRvIGVuZCBvZiBmaWVsZC4KKworICAgUkVRX0NMRUFSX0ZJRUxECisgICAgICAgICAgQ2xlYXIgZW50aXJlIGZpZWxkLgorCisgICBUaGUgICBiZWhhdmlvciAgb2YgIHRoZSAgUkVRX05FV19MSU5FICBhbmQgIFJFUV9ERUxfUFJFViAgcmVxdWVzdHMgIGlzCisgICBjb21wbGljYXRlZCAgYW5kICBwYXJ0bHkgIGNvbnRyb2xsZWQgIGJ5ICBhIHBhaXIgb2YgZm9ybXMgb3B0aW9ucy4gVGhlCisgICBzcGVjaWFsICBjYXNlcyAgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjdXJzb3IgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhCisgICBmaWVsZCwgb3Igb24gdGhlIGxhc3QgbGluZSBvZiB0aGUgZmllbGQuCisKKyAgIEZpcnN0LCB3ZSBjb25zaWRlciBSRVFfTkVXX0xJTkU6CisKKyAgIFRoZSAgbm9ybWFsICBiZWhhdmlvciAgb2YgIFJFUV9ORVdfTElORSBpbiBpbnNlcnQgbW9kZSBpcyB0byBicmVhayB0aGUKKyAgIGN1cnJlbnQgbGluZSBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIGVkaXQgY3Vyc29yLCBpbnNlcnRpbmcgdGhlIHBvcnRpb24KKyAgIG9mICB0aGUgIGN1cnJlbnQgIGxpbmUgIGFmdGVyICB0aGUgIGN1cnNvciBhcyBhIG5ldyBsaW5lIGZvbGxvd2luZyB0aGUKKyAgIGN1cnJlbnQgIGFuZCAgbW92aW5nIHRoZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGF0IG5ldyBsaW5lICh5b3UKKyAgIG1heSB0aGluayBvZiB0aGlzIGFzIGluc2VydGluZyBhIG5ld2xpbmUgaW4gdGhlIGZpZWxkIGJ1ZmZlcikuCisKKyAgIFRoZSAgbm9ybWFsICBiZWhhdmlvciAgb2YgUkVRX05FV19MSU5FIGluIG92ZXJsYXkgbW9kZSBpcyB0byBjbGVhciB0aGUKKyAgIGN1cnJlbnQgIGxpbmUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGVkaXQgY3Vyc29yIHRvIGVuZCBvZiBsaW5lLiBUaGUKKyAgIGN1cnNvciBpcyB0aGVuIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZS4KKworICAgSG93ZXZlciwgUkVRX05FV19MSU5FIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCwgb3Igb24gdGhlIGxhc3QgbGluZQorICAgb2YgIGEgIGZpZWxkLCAgaW5zdGVhZCAgZG9lcyBhIFJFUV9ORVhUX0ZJRUxELiBPX05MX09WRVJMT0FEIG9wdGlvbiBpcworICAgb2ZmLCB0aGlzIHNwZWNpYWwgYWN0aW9uIGlzIGRpc2FibGVkLgorCisgICBOb3csIGxldCB1cyBjb25zaWRlciBSRVFfREVMX1BSRVY6CisKKyAgIFRoZSAgbm9ybWFsICBiZWhhdmlvciAgb2YgIFJFUV9ERUxfUFJFViAgaXMgIHRvICBkZWxldGUgIHRoZSAgcHJldmlvdXMKKyAgIGNoYXJhY3Rlci4gIElmICBpbnNlcnQgbW9kZSBpcyBvbiwgYW5kIHRoZSBjdXJzb3IgaXMgYXQgdGhlIHN0YXJ0IG9mIGEKKyAgIGxpbmUsICBhbmQgIHRoZSAgdGV4dCAgb24gIHRoYXQgIGxpbmUgd2lsbCBmaXQgb24gdGhlIHByZXZpb3VzIG9uZSwgaXQKKyAgIGluc3RlYWQgIGFwcGVuZHMgIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBsaW5lIHRvIHRoZSBwcmV2aW91cyBvbmUKKyAgIGFuZCAgZGVsZXRlcyAgdGhlICBjdXJyZW50ICBsaW5lICAoeW91IG1heSB0aGluayBvZiB0aGlzIGFzIGRlbGV0aW5nIGEKKyAgIG5ld2xpbmUgZnJvbSB0aGUgZmllbGQgYnVmZmVyKS4KKworICAgSG93ZXZlciwgIFJFUV9ERUxfUFJFViAgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkIGlzIGluc3RlYWQgdHJlYXRlZAorICAgYXMgYSBSRVFfUFJFVl9GSUVMRC4KKworICAgSWYgIHRoZSAgT19CU19PVkVSTE9BRCAgb3B0aW9uIGlzIG9mZiwgdGhpcyBzcGVjaWFsIGFjdGlvbiBpcyBkaXNhYmxlZAorICAgYW5kIHRoZSBmb3JtcyBkcml2ZXIganVzdCByZXR1cm5zIEVfUkVRVUVTVF9ERU5JRUQuCisKKyAgIFNlZSAgRm9ybSAgT3B0aW9ucyBmb3IgZGlzY3Vzc2lvbiBvZiBob3cgdG8gc2V0IGFuZCBjbGVhciB0aGUgb3ZlcmxvYWQKKyAgIG9wdGlvbnMuCisKKyAgT3JkZXIgUmVxdWVzdHMKKworICAgSWYgdGhlIHR5cGUgb2YgeW91ciBmaWVsZCBpcyBvcmRlcmVkLCBhbmQgaGFzIGFzc29jaWF0ZWQgZnVuY3Rpb25zIGZvcgorICAgZ2V0dGluZyAgdGhlICBuZXh0IGFuZCBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlIHR5cGUgZnJvbSBhIGdpdmVuIHZhbHVlLAorICAgdGhlcmUgYXJlIHJlcXVlc3RzIHRoYXQgY2FuIGZldGNoIHRoYXQgdmFsdWUgaW50byB0aGUgZmllbGQgYnVmZmVyOgorCisgICBSRVFfTkVYVF9DSE9JQ0UKKyAgICAgICAgICBQbGFjZSB0aGUgc3VjY2Vzc29yIHZhbHVlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoZSBidWZmZXIuCisKKyAgIFJFUV9QUkVWX0NIT0lDRQorICAgICAgICAgIFBsYWNlIHRoZSBwcmVkZWNlc3NvciB2YWx1ZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgYnVmZmVyLgorCisgICBPZiB0aGUgYnVpbHQtaW4gZmllbGQgdHlwZXMsIG9ubHkgVFlQRV9FTlVNIGhhcyBidWlsdC1pbiBzdWNjZXNzb3IgYW5kCisgICBwcmVkZWNlc3NvciAgZnVuY3Rpb25zLiAgV2hlbiB5b3UgZGVmaW5lIGEgZmllbGQgdHlwZSBvZiB5b3VyIG93biAoc2VlCisgICBDdXN0b20gICBWYWxpZGF0aW9uICAgVHlwZXMpLCAgeW91ICBjYW4gIGFzc29jaWF0ZSAgb3VyICBvd24gIG9yZGVyaW5nCisgICBmdW5jdGlvbnMuCisKKyAgQXBwbGljYXRpb24gQ29tbWFuZHMKKworICAgRm9ybSAgcmVxdWVzdHMgIGFyZSAgcmVwcmVzZW50ZWQgIGFzICBpbnRlZ2VycyAgYWJvdmUgdGhlIGN1cnNlcyB2YWx1ZQorICAgZ3JlYXRlciAgIHRoYW4gIEtFWV9NQVggIGFuZCAgbGVzcyAgdGhhbiAgb3IgIGVxdWFsICB0byAgdGhlICBjb25zdGFudAorICAgTUFYX0NPTU1BTkQuICBJZiAgeW91ciAgaW5wdXQtdmlydHVhbGl6YXRpb24gIHJvdXRpbmUgIHJldHVybnMgYSB2YWx1ZQorICAgYWJvdmUgTUFYX0NPTU1BTkQsIHRoZSBmb3JtcyBkcml2ZXIgd2lsbCBpZ25vcmUgaXQuCisKK0ZpZWxkIENoYW5nZSBIb29rcworCisgICBJdCAgaXMgIHBvc3NpYmxlICB0byAgc2V0ICBmdW5jdGlvbiAgaG9va3MgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlCisgICBjdXJyZW50ICBmaWVsZCAgb3IgIGZvcm0gIGNoYW5nZXMuIEhlcmUgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBzdXBwb3J0CisgICB0aGlzOgordHlwZWRlZiB2b2lkICAgICgqSE9PSykoKTsgICAgICAgLyogcG9pbnRlciB0byBmdW5jdGlvbiByZXR1cm5pbmcgdm9pZCAqLworCitpbnQgc2V0X2Zvcm1faW5pdChGT1JNICpmb3JtLCAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBIT09LIGhvb2spOyAgICAvKiBpbml0aWFsaXphdGlvbiBob29rICovCisKK0hPT0sgZm9ybV9pbml0KEZPUk0gKmZvcm0pOyAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKworaW50IHNldF9mb3JtX3Rlcm0oRk9STSAqZm9ybSwgICAgLyogZm9ybSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgSE9PSyBob29rKTsgICAgLyogdGVybWluYXRpb24gaG9vayAqLworCitIT09LIGZvcm1fdGVybShGT1JNICpmb3JtKTsgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKK2ludCBzZXRfZmllbGRfaW5pdChGT1JNICpmb3JtLCAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIEhPT0sgaG9vayk7ICAgIC8qIGluaXRpYWxpemF0aW9uIGhvb2sgKi8KKworSE9PSyBmaWVsZF9pbml0KEZPUk0gKmZvcm0pOyAgICAgLyogZm9ybSB0byBxdWVyeSAqLworCitpbnQgc2V0X2ZpZWxkX3Rlcm0oRk9STSAqZm9ybSwgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBIT09LIGhvb2spOyAgICAvKiB0ZXJtaW5hdGlvbiBob29rICovCisKK0hPT0sgZmllbGRfdGVybShGT1JNICpmb3JtKTsgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKworICAgVGhlc2UgZnVuY3Rpb25zIGFsbG93IHlvdSB0byBlaXRoZXIgc2V0IG9yIHF1ZXJ5IGZvdXIgZGlmZmVyZW50IGhvb2tzLgorICAgSW4gIGVhY2ggIG9mICB0aGUgIHNldCAgZnVuY3Rpb25zLCAgdGhlICBzZWNvbmQgYXJndW1lbnQgc2hvdWxkIGJlIHRoZQorICAgYWRkcmVzcyAgb2YgYSBob29rIGZ1bmN0aW9uLiBUaGVzZSBmdW5jdGlvbnMgZGlmZmVyIG9ubHkgaW4gdGhlIHRpbWluZworICAgb2YgdGhlIGhvb2sgY2FsbC4KKworICAgZm9ybV9pbml0CisgICAgICAgICAgVGhpcyAgaG9vayAgaXMgY2FsbGVkIHdoZW4gdGhlIGZvcm0gaXMgcG9zdGVkOyBhbHNvLCBqdXN0IGFmdGVyCisgICAgICAgICAgZWFjaCBwYWdlIGNoYW5nZSBvcGVyYXRpb24uCisKKyAgIGZpZWxkX2luaXQKKyAgICAgICAgICBUaGlzICBob29rICBpcyBjYWxsZWQgd2hlbiB0aGUgZm9ybSBpcyBwb3N0ZWQ7IGFsc28sIGp1c3QgYWZ0ZXIKKyAgICAgICAgICBlYWNoIGZpZWxkIGNoYW5nZQorCisgICBmaWVsZF90ZXJtCisgICAgICAgICAgVGhpcyAgaG9vayBpcyBjYWxsZWQganVzdCBhZnRlciBmaWVsZCB2YWxpZGF0aW9uOyB0aGF0IGlzLCBqdXN0CisgICAgICAgICAgYmVmb3JlIHRoZSBmaWVsZCBpcyBhbHRlcmVkLiBJdCBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzCisgICAgICAgICAgdW5wb3N0ZWQuCisKKyAgIGZvcm1fdGVybQorICAgICAgICAgIFRoaXMgIGhvb2sgIGlzICBjYWxsZWQgIHdoZW4gIHRoZSAgZm9ybSBpcyB1bnBvc3RlZDsgYWxzbywganVzdAorICAgICAgICAgIGJlZm9yZSBlYWNoIHBhZ2UgY2hhbmdlIG9wZXJhdGlvbi4KKworICAgQ2FsbHMgdG8gdGhlc2UgaG9va3MgbWF5IGJlIHRyaWdnZXJlZAorICAgIDEuIFdoZW4gdXNlciBlZGl0aW5nIHJlcXVlc3RzIGFyZSBwcm9jZXNzZWQgYnkgdGhlIGZvcm1zIGRyaXZlcgorICAgIDIuIFdoZW4gdGhlIGN1cnJlbnQgcGFnZSBpcyBjaGFuZ2VkIGJ5IHNldF9jdXJyZW50X2ZpZWxkKCkgY2FsbAorICAgIDMuIFdoZW4gdGhlIGN1cnJlbnQgZmllbGQgaXMgY2hhbmdlZCBieSBhIHNldF9mb3JtX3BhZ2UoKSBjYWxsCisKKyAgIFNlZSBGaWVsZCBDaGFuZ2UgQ29tbWFuZHMgZm9yIGRpc2N1c3Npb24gb2YgdGhlIGxhdHRlciB0d28gY2FzZXMuCisKKyAgIFlvdSAgY2FuICBzZXQgIGEgZGVmYXVsdCBob29rIGZvciBhbGwgZmllbGRzIGJ5IHBhc3Npbmcgb25lIG9mIHRoZSBzZXQKKyAgIGZ1bmN0aW9ucyBhIE5VTEwgZmlyc3QgYXJndW1lbnQuCisKKyAgIFlvdSAgY2FuICBkaXNhYmxlICBhbnkgb2YgdGhlc2UgaG9va3MgYnkgKHJlKXNldHRpbmcgdGhlbSB0byBOVUxMLCB0aGUKKyAgIGRlZmF1bHQgdmFsdWUuCisKK0ZpZWxkIENoYW5nZSBDb21tYW5kcworCisgICBOb3JtYWxseSwgIG5hdmlnYXRpb24gIHRocm91Z2ggIHRoZSAgZm9ybSB3aWxsIGJlIGRyaXZlbiBieSB0aGUgdXNlcidzCisgICBpbnB1dCAgcmVxdWVzdHMuICBCdXQgIHNvbWV0aW1lcyAgaXQgIGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIG1vdmUgdGhlCisgICBmb2N1cyAgZm9yICBlZGl0aW5nICBhbmQgdmlld2luZyB1bmRlciBjb250cm9sIG9mIHlvdXIgYXBwbGljYXRpb24sIG9yCisgICBhc2sgIHdoaWNoICBmaWVsZCBpdCBjdXJyZW50bHkgaXMgaW4uIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhlbHAgeW91CisgICBhY2NvbXBsaXNoIHRoaXM6CitpbnQgc2V0X2N1cnJlbnRfZmllbGQoRk9STSAqZm9ybSwgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKmZpZWxkKTsgICAgICAvKiBmaWVsZCB0byBzaGlmdCB0byAqLworCitGSUVMRCAqY3VycmVudF9maWVsZChGT1JNICpmb3JtKTsgICAgICAgICAvKiBmb3JtIHRvIHF1ZXJ5ICovCisKK2ludCBmaWVsZF9pbmRleChGT1JNICpmb3JtLCAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKyAgICAgICAgICAgICAgICBGSUVMRCAqZmllbGQpOyAgICAgICAgICAgIC8qIGZpZWxkIHRvIGdldCBpbmRleCBvZiAqLworCisgICBUaGUgZnVuY3Rpb24gZmllbGRfaW5kZXgoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gZmllbGQgaW4gdGhlCisgICBnaXZlbiAgIGZvcm0ncyAgIGZpZWxkICBhcnJheSAgKHRoZSAgYXJyYXkgIHBhc3NlZCAgdG8gIG5ld19mb3JtKCkgIG9yCisgICBzZXRfZm9ybV9maWVsZHMoKSkuCisKKyAgIFRoZSAgaW5pdGlhbCAgY3VycmVudCBmaWVsZCBvZiBhIGZvcm0gaXMgdGhlIGZpcnN0IGFjdGl2ZSBmaWVsZCBvbiB0aGUKKyAgIGZpcnN0IHBhZ2UuIFRoZSBmdW5jdGlvbiBzZXRfZm9ybV9maWVsZHMoKSByZXNldHMgdGhpcy4KKworICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBtb3ZlIGFyb3VuZCBieSBwYWdlcy4KK2ludCBzZXRfZm9ybV9wYWdlKEZPUk0gKmZvcm0sICAgICAgICAgICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgIGludCBwYWdlKTsgICAgICAgICAgICAgIC8qIHBhZ2UgdG8gZ28gdG8gKDAtb3JpZ2luKSAqLworCitpbnQgZm9ybV9wYWdlKEZPUk0gKmZvcm0pOyAgICAgICAgICAgICAgICAvKiByZXR1cm4gZm9ybSdzIGN1cnJlbnQgcGFnZSAqLworCisgICBUaGUgICBpbml0aWFsICBwYWdlICBvZiAgYSAgbmV3bHktY3JlYXRlZCAgZm9ybSAgaXMgIDAuICBUaGUgIGZ1bmN0aW9uCisgICBzZXRfZm9ybV9maWVsZHMoKSByZXNldHMgdGhpcy4KKworRm9ybSBPcHRpb25zCisKKyAgIExpa2UgIGZpZWxkcywgIGZvcm1zIG1heSBoYXZlIGNvbnRyb2wgb3B0aW9uIGJpdHMuIFRoZXkgY2FuIGJlIGNoYW5nZWQKKyAgIG9yIHF1ZXJpZWQgd2l0aCB0aGVzZSBmdW5jdGlvbnM6CitpbnQgc2V0X2Zvcm1fb3B0cyhGT1JNICpmb3JtLCAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgICAvKiBhdHRyaWJ1dGUgdG8gc2V0ICovCisKK2ludCBmb3JtX29wdHNfb24oRk9STSAqZm9ybSwgICAgICAgICAgICAgIC8qIGZvcm0gdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgaW50IGF0dHIpOyAgICAgICAgICAgICAgIC8qIGF0dHJpYnV0ZXMgdG8gdHVybiBvbiAqLworCitpbnQgZm9ybV9vcHRzX29mZihGT1JNICpmb3JtLCAgICAgICAgICAgICAvKiBmb3JtIHRvIGFsdGVyICovCisgICAgICAgICAgICAgICAgICBpbnQgYXR0cik7ICAgICAgICAgICAgICAvKiBhdHRyaWJ1dGVzIHRvIHR1cm4gb2ZmICovCisKK2ludCBmb3JtX29wdHMoRk9STSAqZm9ybSk7ICAgICAgICAgICAgICAgIC8qIGZvcm0gdG8gcXVlcnkgKi8KKworICAgQnkgZGVmYXVsdCwgYWxsIG9wdGlvbnMgYXJlIG9uLiBIZXJlIGFyZSB0aGUgYXZhaWxhYmxlIG9wdGlvbiBiaXRzOgorCisgICBPX05MX09WRVJMT0FECisgICAgICAgICAgRW5hYmxlICBvdmVybG9hZGluZyAgb2YgIFJFUV9ORVdfTElORSAgYXMgIGRlc2NyaWJlZCBpbiBFZGl0aW5nCisgICAgICAgICAgUmVxdWVzdHMuIFRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkIG9uIGR5bmFtaWMgZmllbGRzCisgICAgICAgICAgdGhhdCAgaGF2ZSAgbm90ICByZWFjaGVkICB0aGVpciAgc2l6ZSBsaW1pdDsgdGhlc2UgaGF2ZSBubyBsYXN0CisgICAgICAgICAgbGluZSwgIHNvICB0aGUgIGNpcmN1bXN0YW5jZXMgIGZvciAgdHJpZ2dlcmluZyBhIFJFUV9ORVhUX0ZJRUxECisgICAgICAgICAgbmV2ZXIgYXJpc2UuCisKKyAgIE9fQlNfT1ZFUkxPQUQKKyAgICAgICAgICBFbmFibGUgIG92ZXJsb2FkaW5nICBvZiAgUkVRX0RFTF9QUkVWICBhcyAgZGVzY3JpYmVkIGluIEVkaXRpbmcKKyAgICAgICAgICBSZXF1ZXN0cy4KKworICAgVGhlIG9wdGlvbiB2YWx1ZXMgYXJlIGJpdC1tYXNrcyBhbmQgY2FuIGJlIGNvbXBvc2VkIHdpdGggbG9naWNhbC1vciBpbgorICAgdGhlIG9idmlvdXMgd2F5LgorCitDdXN0b20gVmFsaWRhdGlvbiBUeXBlcworCisgICBUaGUgIGZvcm0gbGlicmFyeSBnaXZlcyB5b3UgdGhlIGNhcGFiaWxpdHkgdG8gZGVmaW5lIGN1c3RvbSB2YWxpZGF0aW9uCisgICB0eXBlcyAgb2YgIHlvdXIgIG93bi4gIEZ1cnRoZXIsICB0aGUgIG9wdGlvbmFsIGFkZGl0aW9uYWwgYXJndW1lbnRzIG9mCisgICBzZXRfZmllbGRfdHlwZSBlZmZlY3RpdmVseSBhbGxvdyB5b3UgdG8gcGFyYW1ldGVyaXplIHZhbGlkYXRpb24gdHlwZXMuCisgICBNb3N0ICBvZiB0aGUgY29tcGxpY2F0aW9ucyBpbiB0aGUgdmFsaWRhdGlvbi10eXBlIGludGVyZmFjZSBoYXZlIHRvIGRvCisgICB3aXRoIHRoZSBoYW5kbGluZyBvZiB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgd2l0aGluIGN1c3RvbSB2YWxpZGF0aW9uCisgICBmdW5jdGlvbnMuCisKKyAgVW5pb24gVHlwZXMKKworICAgVGhlICBzaW1wbGVzdCAgd2F5ICB0byBjcmVhdGUgYSBjdXN0b20gZGF0YSB0eXBlIGlzIHRvIGNvbXBvc2UgaXQgZnJvbQorICAgdHdvIHByZWV4aXN0aW5nIG9uZXM6CitGSUVMRCAqbGlua19maWVsZHR5cGUoRklFTERUWVBFICp0eXBlMSwKKyAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKnR5cGUyKTsKKworICAgVGhpcyAgZnVuY3Rpb24gY3JlYXRlcyBhIGZpZWxkIHR5cGUgdGhhdCB3aWxsIGFjY2VwdCBhbnkgb2YgdGhlIHZhbHVlcworICAgbGVnYWwgIGZvciAgZWl0aGVyICBvZiAgaXRzICBhcmd1bWVudCBmaWVsZCB0eXBlcyAod2hpY2ggbWF5IGJlIGVpdGhlcgorICAgcHJlZGVmaW5lZCAgb3IgIHByb2dyYW1tZXItZGVmaW5lZCkuICBJZiBhIHNldF9maWVsZF90eXBlKCkgY2FsbCBsYXRlcgorICAgcmVxdWlyZXMgIGFyZ3VtZW50cywgIHRoZSBuZXcgY29tcG9zaXRlIHR5cGUgZXhwZWN0cyBhbGwgYXJndW1lbnRzIGZvcgorICAgdGhlICBmaXJzdCAgdHlwZSwgIHRoYW4gIGFsbCBhcmd1bWVudHMgZm9yIHRoZSBzZWNvbmQuIE9yZGVyIGZ1bmN0aW9ucworICAgKHNlZSAgT3JkZXIgUmVxdWVzdHMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50IHR5cGVzIHdpbGwgd29yayBvbgorICAgdGhlICBjb21wb3NpdGU7ICB3aGF0IGl0IGRvZXMgaXMgY2hlY2sgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHRoZQorICAgZmlyc3QgIHR5cGUsICB0aGVuICBmb3IgIHRoZSAgc2Vjb25kLCAgdG8gIGZpZ3VyZSB3aGF0IHR5cGUgdGhlIGJ1ZmZlcgorICAgY29udGVudHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMuCisKKyAgTmV3IEZpZWxkIFR5cGVzCisKKyAgIFRvICBjcmVhdGUgIGEgZmllbGQgdHlwZSBmcm9tIHNjcmF0Y2gsIHlvdSBuZWVkIHRvIHNwZWNpZnkgb25lIG9yIGJvdGgKKyAgIG9mIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorICAgICAqIEEgIGNoYXJhY3Rlci12YWxpZGF0aW9uIGZ1bmN0aW9uLCB0byBjaGVjayBlYWNoIGNoYXJhY3RlciBhcyBpdCBpcworICAgICAgIGVudGVyZWQuCisgICAgICogQSBmaWVsZC12YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIGJlIGFwcGxpZWQgb24gZXhpdCBmcm9tIHRoZSBmaWVsZC4KKworICAgSGVyZSdzIGhvdyB5b3UgZG8gdGhhdDoKK3R5cGVkZWYgaW50ICAgICAoKkhPT0spKCk7ICAgICAgIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIGludCAqLworCitGSUVMRFRZUEUgKm5ld19maWVsZHR5cGUoSE9PSyBmX3ZhbGlkYXRlLCAvKiBmaWVsZCB2YWxpZGF0b3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBIT09LIGNfdmFsaWRhdGUpIC8qIGNoYXJhY3RlciB2YWxpZGF0b3IgKi8KKworCitpbnQgZnJlZV9maWVsZHR5cGUoRklFTERUWVBFICpmdHlwZSk7ICAgICAvKiB0eXBlIHRvIGZyZWUgKi8KKworICAgQXQgbGVhc3Qgb25lIG9mIHRoZSBhcmd1bWVudHMgb2YgbmV3X2ZpZWxkdHlwZSgpIG11c3QgYmUgbm9uLU5VTEwuIFRoZQorICAgZm9ybXMgIGRyaXZlciAgd2lsbCAgYXV0b21hdGljYWxseSAgY2FsbCAgdGhlICBuZXcgIHR5cGUncyAgdmFsaWRhdGlvbgorICAgZnVuY3Rpb25zIGF0IGFwcHJvcHJpYXRlIHBvaW50cyBpbiBwcm9jZXNzaW5nIGEgZmllbGQgb2YgdGhlIG5ldyB0eXBlLgorCisgICBUaGUgIGZ1bmN0aW9uICBmcmVlX2ZpZWxkdHlwZSgpICBkZWFsbG9jYXRlcyAgdGhlICBhcmd1bWVudCBmaWVsZHR5cGUsCisgICBmcmVlaW5nIGFsbCBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC4KKworICAgTm9ybWFsbHksICBhIGZpZWxkIHZhbGlkYXRvciBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0byBsZWF2ZQorICAgdGhlICBmaWVsZC4gIEl0cyAgZmlyc3QgYXJndW1lbnQgaXMgYSBmaWVsZCBwb2ludGVyLCBmcm9tIHdoaWNoIGl0IGNhbgorICAgZ2V0ICB0byAgZmllbGQgYnVmZmVyIDAgYW5kIHRlc3QgaXQuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIFRSVUUsIHRoZQorICAgb3BlcmF0aW9uICBzdWNjZWVkczsgaWYgaXQgcmV0dXJucyBGQUxTRSwgdGhlIGVkaXQgY3Vyc29yIHN0YXlzIGluIHRoZQorICAgZmllbGQuCisKKyAgIEEgIGNoYXJhY3RlciAgdmFsaWRhdG9yICBnZXRzICB0aGUgIGNoYXJhY3RlciAgcGFzc2VkICBpbiAgYXMgIGEgZmlyc3QKKyAgIGFyZ3VtZW50LiAgSXQgIHRvbyBzaG91bGQgcmV0dXJuIFRSVUUgaWYgdGhlIGNoYXJhY3RlciBpcyB2YWxpZCwgRkFMU0UKKyAgIG90aGVyd2lzZS4KKworICBWYWxpZGF0aW9uIEZ1bmN0aW9uIEFyZ3VtZW50cworCisgICBZb3VyICBmaWVsZC0gIGFuZCAgY2hhcmFjdGVyLSAgdmFsaWRhdGlvbiAgZnVuY3Rpb25zICB3aWxsIGJlIHBhc3NlZCBhCisgICBzZWNvbmQgIGFyZ3VtZW50ICBhcyAgd2VsbC4gIFRoaXMgIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgYWRkcmVzcyBvZiBhCisgICBzdHJ1Y3R1cmUgICAod2hpY2ggICB3ZSdsbCAgIGNhbGwgIGEgIHBpbGUpICBidWlsdCAgZnJvbSAgYW55ICBvZiAgdGhlCisgICBmaWVsZC10eXBlLXNwZWNpZmljICBhcmd1bWVudHMgIHBhc3NlZCB0byBzZXRfZmllbGRfdHlwZSgpLiBJZiBubyBzdWNoCisgICBhcmd1bWVudHMgIGFyZSAgZGVmaW5lZCBmb3IgdGhlIGZpZWxkIHR5cGUsIHRoaXMgcGlsZSBwb2ludGVyIGFyZ3VtZW50CisgICB3aWxsIGJlIE5VTEwuCisKKyAgIEluIG9yZGVyIHRvIGFycmFuZ2UgZm9yIHN1Y2ggYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB5b3VyIHZhbGlkYXRpb24KKyAgIGZ1bmN0aW9ucywgIHlvdSAgbXVzdCAgYXNzb2NpYXRlICBhICBzbWFsbCAgc2V0ICBvZiBzdG9yYWdlLW1hbmFnZW1lbnQKKyAgIGZ1bmN0aW9ucyB3aXRoIHRoZSB0eXBlLiBUaGUgZm9ybXMgZHJpdmVyIHdpbGwgdXNlIHRoZXNlIHRvIHN5bnRoZXNpemUKKyAgIGEgIHBpbGUgZnJvbSB0aGUgdHJhaWxpbmcgYXJndW1lbnRzIG9mIGVhY2ggc2V0X2ZpZWxkX3R5cGUoKSBhcmd1bWVudCwKKyAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHBpbGUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHZhbGlkYXRpb24gZnVuY3Rpb25zLgorCisgICBIZXJlIGlzIGhvdyB5b3UgbWFrZSB0aGUgYXNzb2NpYXRpb246Cit0eXBlZGVmIGNoYXIgICAgKigqUFRSSE9PSykoKTsgICAgLyogcG9pbnRlciB0byBmdW5jdGlvbiByZXR1cm5pbmcgKGNoYXIgKikgKi8KK3R5cGVkZWYgdm9pZCAgICAoKlZPSURIT09LKSgpOyAgICAvKiBwb2ludGVyIHRvIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkICovCisKK2ludCBzZXRfZmllbGR0eXBlX2FyZyhGSUVMRFRZUEUgKnR5cGUsICAgIC8qIHR5cGUgdG8gYWx0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBQVFJIT09LIG1ha2Vfc3RyLCAgIC8qIG1ha2Ugc3RydWN0dXJlIGZyb20gYXJncyAqLworICAgICAgICAgICAgICAgICAgICAgIFBUUkhPT0sgY29weV9zdHIsICAgLyogbWFrZSBjb3B5IG9mIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgICAgICAgICAgIFZPSURIT09LIGZyZWVfc3RyKTsgLyogZnJlZSBzdHJ1Y3R1cmUgc3RvcmFnZSAqLworCisgICBIZXJlIGlzIGhvdyB0aGUgc3RvcmFnZS1tYW5hZ2VtZW50IGhvb2tzIGFyZSB1c2VkOgorCisgICBtYWtlX3N0cgorICAgICAgICAgIFRoaXMgIGZ1bmN0aW9uICBpcyAgY2FsbGVkICBieSAgc2V0X2ZpZWxkX3R5cGUoKS4gIEl0ICBnZXRzIG9uZQorICAgICAgICAgIGFyZ3VtZW50LCAgYSAgdmFfbGlzdCAgb2YgdGhlIHR5cGUtc3BlY2lmaWMgYXJndW1lbnRzIHBhc3NlZCB0bworICAgICAgICAgIHNldF9maWVsZF90eXBlKCkuICBJdCBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBwaWxlIHBvaW50ZXIgdG8gYQorICAgICAgICAgIGRhdGEgc3RydWN0dXJlIHRoYXQgZW5jYXBzdWxhdGVzIHRob3NlIGFyZ3VtZW50cy4KKworICAgY29weV9zdHIKKyAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBmb3JtIGxpYnJhcnkgZnVuY3Rpb25zIHRoYXQgYWxsb2NhdGUKKyAgICAgICAgICBuZXcgIGZpZWxkICBpbnN0YW5jZXMuICBJdCAgaXMgZXhwZWN0ZWQgdG8gdGFrZSBhIHBpbGUgcG9pbnRlciwKKyAgICAgICAgICBjb3B5ICB0aGUgIHBpbGUgdG8gYWxsb2NhdGVkIHN0b3JhZ2UsIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YKKyAgICAgICAgICB0aGUgcGlsZSBjb3B5LgorCisgICBmcmVlX3N0cgorICAgICAgICAgIFRoaXMgICBmdW5jdGlvbiAgaXMgIGNhbGxlZCAgYnkgIGZpZWxkLSAgYW5kICB0eXBlLWRlYWxsb2NhdGlvbgorICAgICAgICAgIHJvdXRpbmVzICBpbiB0aGUgbGlicmFyeS4gSXQgdGFrZXMgYSBwaWxlIHBvaW50ZXIgYXJndW1lbnQsIGFuZAorICAgICAgICAgIGlzIGV4cGVjdGVkIHRvIGZyZWUgdGhlIHN0b3JhZ2Ugb2YgdGhhdCBwaWxlLgorCisgICBUaGUgIG1ha2Vfc3RyICBhbmQgIGNvcHlfc3RyICBmdW5jdGlvbnMgIG1heSAgcmV0dXJuICBOVUxMICB0byAgc2lnbmFsCisgICBhbGxvY2F0aW9uICBmYWlsdXJlLiAgVGhlICBsaWJyYXJ5ICByb3V0aW5lcyAgd2lsbCB0aGF0IGNhbGwgdGhlbSB3aWxsCisgICByZXR1cm4gIGVycm9yICBpbmRpY2F0aW9uICB3aGVuICB0aGlzICBoYXBwZW5zLiAgVGh1cywgeW91ciB2YWxpZGF0aW9uCisgICBmdW5jdGlvbnMgIHNob3VsZCAgbmV2ZXIgIHNlZSAgYSAgTlVMTCBmaWxlIHBvaW50ZXIgYW5kIG5lZWQgbm90IGNoZWNrCisgICBzcGVjaWFsbHkgZm9yIGl0LgorCisgIE9yZGVyIEZ1bmN0aW9ucyBGb3IgQ3VzdG9tIFR5cGVzCisKKyAgIFNvbWUgIGN1c3RvbSAgZmllbGQgIHR5cGVzIGFyZSBzaW1wbHkgb3JkZXJlZCBpbiB0aGUgc2FtZSB3ZWxsLWRlZmluZWQKKyAgIHdheSAgdGhhdCAgVFlQRV9FTlVNICBpcy4gIEZvciAgc3VjaCAgdHlwZXMsICBpdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUKKyAgIHN1Y2Nlc3NvciBhbmQgcHJlZGVjZXNzb3IgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIFJFUV9ORVhUX0NIT0lDRSBhbmQKKyAgIFJFUV9QUkVWX0NIT0lDRSByZXF1ZXN0cy4gSGVyZSdzIGhvdzoKK3R5cGVkZWYgaW50ICAgICAoKklOVEhPT0spKCk7ICAgICAvKiBwb2ludGVyIHRvIGZ1bmN0aW9uIHJldHVybmluZyBpbnQgKi8KKworaW50IHNldF9maWVsZHR5cGVfYXJnKEZJRUxEVFlQRSAqdHlwZSwgICAgLyogdHlwZSB0byBhbHRlciAqLworICAgICAgICAgICAgICAgICAgICAgIElOVEhPT0sgc3VjYywgICAgICAgLyogZ2V0IHN1Y2Nlc3NvciB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICAgIElOVEhPT0sgcHJlZCk7ICAgICAgLyogZ2V0IHByZWRlY2Vzc29yIHZhbHVlICovCisKKyAgIFRoZSAgc3VjY2Vzc29yICBhbmQgIHByZWRlY2Vzc29yICBhcmd1bWVudHMgIHdpbGwgIGVhY2ggIGJlIHBhc3NlZCB0d28KKyAgIGFyZ3VtZW50czsgIGEgZmllbGQgcG9pbnRlciwgYW5kIGEgcGlsZSBwb2ludGVyIChhcyBmb3IgdGhlIHZhbGlkYXRpb24KKyAgIGZ1bmN0aW9ucykuICBUaGV5ICBhcmUgIGV4cGVjdGVkIHRvIHVzZSB0aGUgZnVuY3Rpb24gZmllbGRfYnVmZmVyKCkgdG8KKyAgIHJlYWQgIHRoZSBjdXJyZW50IHZhbHVlLCBhbmQgc2V0X2ZpZWxkX2J1ZmZlcigpIG9uIGJ1ZmZlciAwIHRvIHNldCB0aGUKKyAgIG5leHQgIG9yICBwcmV2aW91cyAgdmFsdWUuICBFaXRoZXIgIGhvb2sgIG1heSAgcmV0dXJuIFRSVUUgdG8gaW5kaWNhdGUKKyAgIHN1Y2Nlc3MgIChhIGxlZ2FsIG5leHQgb3IgcHJldmlvdXMgdmFsdWUgd2FzIHNldCkgb3IgRkFMU0UgdG8gaW5kaWNhdGUKKyAgIGZhaWx1cmUuCisKKyAgQXZvaWRpbmcgUHJvYmxlbXMKKworICAgVGhlICBpbnRlcmZhY2UgIGZvciAgZGVmaW5pbmcgIGN1c3RvbSB0eXBlcyBpcyBjb21wbGljYXRlZCBhbmQgdHJpY2t5LgorICAgUmF0aGVyICB0aGFuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgY3VzdG9tIHR5cGUgZW50aXJlbHkgZnJvbSBzY3JhdGNoLAorICAgeW91ICBzaG91bGQgc3RhcnQgYnkgc3R1ZHlpbmcgdGhlIGxpYnJhcnkgc291cmNlIGNvZGUgZm9yIHdoaWNoZXZlciBvZgorICAgdGhlIHByZS1kZWZpbmVkIHR5cGVzIHNlZW1zIHRvIGJlIGNsb3Nlc3QgdG8gd2hhdCB5b3Ugd2FudC4KKworICAgVXNlICB0aGF0IGNvZGUgYXMgYSBtb2RlbCwgYW5kIGV2b2x2ZSBpdCB0b3dhcmRzIHdoYXQgeW91IHJlYWxseSB3YW50LgorICAgWW91ICB3aWxsIGF2b2lkIG1hbnkgcHJvYmxlbXMgYW5kIGFubm95YW5jZXMgdGhhdCB3YXkuIFRoZSBjb2RlIGluIHRoZQorICAgbmN1cnNlcyAgbGlicmFyeSAgaGFzICBiZWVuICBzcGVjaWZpY2FsbHkgIGV4ZW1wdGVkICBmcm9tICB0aGUgcGFja2FnZQorICAgY29weXJpZ2h0IHRvIHN1cHBvcnQgdGhpcy4KKworICAgSWYgIHlvdXIgIGN1c3RvbSAgdHlwZSAgZGVmaW5lcyAgb3JkZXIgIGZ1bmN0aW9ucywgIGhhdmUgIGRvIHNvbWV0aGluZworICAgaW50dWl0aXZlICB3aXRoICBhICBibGFuayAgZmllbGQuICBBICB1c2VmdWwgY29udmVudGlvbiBpcyB0byBtYWtlIHRoZQorICAgc3VjY2Vzc29yICAgb2YgIGEgIGJsYW5rICBmaWVsZCAgdGhlICB0eXBlcyAgbWluaW11bSAgdmFsdWUsICBhbmQgIGl0cworICAgcHJlZGVjZXNzb3IgdGhlIG1heGltdW0uCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL01ha2VmaWxlLmluIGIvbmN1cnNlcy01LjcvZm9ybS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmYzMWUxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE2NSBAQAorIyAkSWQ6IE1ha2VmaWxlLmluLHYgMS40NyAyMDA3LzA0LzI4IDE0OjU2OjExIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni1vbgorIworIyBNYWtlZmlsZSBmb3IgZm9ybSBzb3VyY2UgY29kZS4KKyMKKyMgVGhpcyBtYWtlcyB0aGUgZm9sbG93aW5nOgorIwlsaWJyYXJpZXMgKG5vcm1hbC9kZWJ1Zy9wcm9maWxlL3NoYXJlZCkKKyMKKyMgVGhlIHZhcmlhYmxlICdzcmNkaXInIHJlZmVycyB0byB0aGUgc291cmNlLWRpc3RyaWJ1dGlvbiwgYW5kIGNhbiBiZSBzZXQgd2l0aAorIyB0aGUgY29uZmlndXJlIHNjcmlwdCBieSAiLS1zcmNkaXI9RElSIi4KKyMKKyMgVGhlIHJ1bGVzIGFyZSBvcmdhbml6ZWQgdG8gcHJvZHVjZSB0aGUgbGlicmFyaWVzIGZvciB0aGUgY29uZmlndXJlZCBtb2RlbHMsCisKKyMgdHVybiBvZmYgX2FsbF8gc3VmZml4IHJ1bGVzOyB3ZSdsbCBnZW5lcmF0ZSBvdXIgb3duCisuU1VGRklYRVM6CisKK1NIRUxMCQk9IC9iaW4vc2gKK1RISVMJCT0gTWFrZWZpbGUKKworeAkJPSBARVhFRVhUQAorbwkJPSAuQE9CSkVYVEAKKworTU9ERUwJCT0gQERGVF9MV1JfTU9ERUxACitERVNURElSCQk9IEBERVNURElSQAorc3JjZGlyCQk9IEBzcmNkaXJACitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAorYmluZGlyCQk9IEBiaW5kaXJACitsaWJkaXIJCT0gQGxpYmRpckAKK2luY2x1ZGVkaXIJPSBAaW5jbHVkZWRpckAKKworTElCVE9PTAkJPSBATElCVE9PTEAKK0xJQlRPT0xfQ0xFQU4JPSBATElCX0NMRUFOQAorTElCVE9PTF9DT01QSUxFCT0gQExJQl9DT01QSUxFQAorTElCVE9PTF9MSU5LCT0gQExJQl9MSU5LQAorTElCVE9PTF9JTlNUQUxMCT0gQExJQl9JTlNUQUxMQAorTElCVE9PTF9VTklOU1RBTEwgPSBATElCX1VOSU5TVEFMTEAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfTElCCT0gQElOU1RBTExAIEBJTlNUQUxMX0xJQkAKK0lOU1RBTExfUFJPRwk9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBUgkJPSBAQVJACitBUl9PUFRTCQk9IEBBUl9PUFRTQAorQVdLCQk9IEBBV0tACitMRAkJPSBATERACitMTl9TCQk9IEBMTl9TQAorCitDQwkJPSBAQ0NACitDUFAJCT0gQENQUEAKK0NGTEFHUwkJPSBAQ0ZMQUdTQAorCitDUFBGTEFHUwk9IC1JQHRvcF9zcmNkaXJAL25jdXJzZXMgLURIQVZFX0NPTkZJR19IIEBDUFBGTEFHU0AKKworQ0NGTEFHUwkJPSAkKENQUEZMQUdTKSAkKENGTEFHUykKKworQ0ZMQUdTX0xJQlRPT0wJPSAkKENDRkxBR1MpCitDRkxBR1NfTk9STUFMCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX0RFQlVHCT0gJChDQ0ZMQUdTKSBAQ0NfR19PUFRAIC1EVFJBQ0UKK0NGTEFHU19QUk9GSUxFCT0gJChDQ0ZMQUdTKSAtcGcKK0NGTEFHU19TSEFSRUQJPSAkKENDRkxBR1MpIEBDQ19TSEFSRURfT1BUU0AKKworQ0ZMQUdTX0RFRkFVTFQJPSAkKENGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK0xJTksJCT0gJChMSUJUT09MX0xJTkspCitMREZMQUdTCQk9IEBMREZMQUdTQCBATERfTU9ERUxAIEBMSUJTQAorCitTSExJQl9ESVJTCT0gLUwuLi9saWIKK1NITElCX0xJU1QJPSAkKFNITElCX0RJUlMpIC1sbmN1cnNlc0BMSUJfU1VGRklYQCBAU0hMSUJfTElTVEAKKworTUtfU0hBUkVEX0xJQgk9IEBNS19TSEFSRURfTElCQAorCitOQ1VSU0VTX01BSk9SCT0gQE5DVVJTRVNfTUFKT1JACitOQ1VSU0VTX01JTk9SCT0gQE5DVVJTRVNfTUlOT1JACitSRUxfVkVSU0lPTgk9IEBjZl9jdl9yZWxfdmVyc2lvbkAKK0FCSV9WRVJTSU9OCT0gQGNmX2N2X2FiaV92ZXJzaW9uQAorCitSQU5MSUIJCT0gQExJQl9QUkVQQAorCitMSUJSQVJJRVMJPSBATElCU19UT19NQUtFQAorCitMSU5UCQk9IEBMSU5UQAorTElOVF9PUFRTCT0gQExJTlRfT1BUU0AKK0xJTlRfTElCUwk9IC1sZm9ybSAtbG5jdXJzZXMgQExJQlNACisKK0FVVE9fU1JDCT0gXAorCQkuLi9pbmNsdWRlL2Zvcm0uaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWxsIFwKK2xpYnMgXAoraW5zdGFsbCA6OgkkKEFVVE9fU1JDKSAkKExJQlJBUklFUykKKworc291cmNlcyA6CSQoQVVUT19TUkMpCisKKyQoREVTVERJUikkKGJpbmRpcikgXAorJChERVNURElSKSQobGliZGlyKSA6CisJc2ggJChzcmNkaXIpLy4uL21rZGlycy5zaCAkQAorCisjIG1ha2UgY29waWVzIHRvIHNpbXBsaWZ5IGluY2x1ZGUtcGF0aHMgd2hpbGUgc3RpbGwga2VlcGluZyBmb3JtJ3MgaW5jbHVkZQorIyBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgorLi4vaW5jbHVkZS9mb3JtLmggOiAkKHNyY2RpcikvZm9ybS5oCisJLXJtIC1mICRACisJY3AgJChzcmNkaXIpL2Zvcm0uaCAkQAorCitGT1JNX1BSSVZfSCA9IFwKKwkkKHNyY2RpcikvZm9ybS5wcml2LmggXAorCSQoc3JjZGlyKS9mb3JtLmggXAorCS4uL2luY2x1ZGUvbWZfY29tbW9uLmggXAorCS4uL2luY2x1ZGUvY3Vyc2VzLmggXAorCS4uL2luY2x1ZGUvZXRpLmgKKwordGFnczoKKwljdGFncyAqLltjaF0KKworQE1BS0VfVVBQRVJfVEFHU0BUQUdTOgorQE1BS0VfVVBQRVJfVEFHU0AJZXRhZ3MgKi5bY2hdCisKK21vc3RseWNsZWFuIDo6CisJLXJtIC1mIGNvcmUgdGFncyBUQUdTICp+ICouYmFrICouaSAqLmxuICouYXRhYyB0cmFjZQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCS1ybSAtZiAkKEFVVE9fU1JDKQorCitkaXN0Y2xlYW4gOjogY2xlYW4KKwktcm0gLWYgTWFrZWZpbGUKKworcmVhbGNsZWFuIDo6IGRpc3RjbGVhbgorCisuLi9pbmNsdWRlL21mX2NvbW1vbi5oIFwKKy4uL2luY2x1ZGUvZXRpLmggOgorCWNkIC4uL21lbnUgJiYgJChNQUtFKSAkQAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSByZW1haW5kZXIgb2YgdGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGR1cmluZyBjb25maWd1cmF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL1JFQUQuTUUgYi9uY3Vyc2VzLTUuNy9mb3JtL1JFQUQuTUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4NmJmNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vUkVBRC5NRQpAQCAtMCwwICsxLDQyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFJFQUQuTUUsdiAwLjcgMjAwNi8wNC8yMiAyMzoxMzowNSB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIGNsb25lIG9mIHRoZSBmb3JtIGxpYnJhcnkgdGhhdCBpcyBhdmFpbGFibGUgd2l0aCB0eXBpY2FsCitTeXN0ZW0gViBjdXJzZXMgaW1wbGVtZW50YXRpb25zIChFVEkpLgorCitJdCBpcyBtb2RlbGxlZCBhZnRlciB0aGUgZG9jdW1lbnRhdGlvbiB0aGF0IGNvbWVzIGZvciB0aGlzIGxpYnJhcnkgd2l0aAorYSAzODYgYmFzZWQgU1ZSNCBpbXBsZW1lbnRhdGlvbiAoRVNJWCkuICAKKworVGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHdhcyBhbmQgaXMgYW4gRUxGIGJhc2VkIExpbnV4IHN5c3RlbS4KKworRm9yIHRoaW5ncyB0aGF0IHN0aWxsIG5lZWQgZG9pbmcsIHNlZSB0aGUgVE8tRE8gZmlsZSBpbiB0aGUgdG9wLWxldmVsIAorZGlyZWN0b3J5LgorCitKdWVyZ2VuIFBmZWlmZXIKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZl90cmFjZS5jIGIvbmN1cnNlcy01LjcvZm9ybS9mX3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiNGNjZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZl90cmFjZS5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZfdHJhY2UuYyx2IDEuMSAyMDA0LzEyLzI1IDIzOjI4OjQ5IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKEZJRUxEICoqKQorX25jX3JldHJhY2VfZmllbGRfcHRyKEZJRUxEICoqY29kZSkKK3sKKyAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgcmV0dXJuIGNvZGU7Cit9CisKK05DVVJTRVNfRVhQT1JUKEZJRUxEICopCitfbmNfcmV0cmFjZV9maWVsZChGSUVMRCAqY29kZSkKK3sKKyAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgcmV0dXJuIGNvZGU7Cit9CisKK05DVVJTRVNfRVhQT1JUKEZJRUxEVFlQRSAqKQorX25jX3JldHJhY2VfZmllbGRfdHlwZShGSUVMRFRZUEUgKmNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChGT1JNICopCitfbmNfcmV0cmFjZV9mb3JtKEZPUk0gKmNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChGb3JtX0hvb2spCitfbmNfcmV0cmFjZV9mb3JtX2hvb2soRm9ybV9Ib29rIGNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mbGRfYXJnLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9hcmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzlhMTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfYXJnLmMKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX2FyZy5jLHYgMS4xMSAyMDA0LzEyLzI1IDIyOjIwOjE4IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9maWVsZHR5cGVfYXJnKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKnR5cCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqICgqIGNvbnN0IG1ha2VfYXJnKSh2YV9saXN0ICopLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogKCogY29uc3QgY29weV9hcmcpKGNvbnN0IHZvaWQgKiksCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAoKiBjb25zdCBmcmVlX2FyZykodm9pZCAqKSApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb25uZWN0cyB0byB0aGUgdHlwZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBuZWNlc3NhcnkKK3wgICAgICAgICAgICAgICAgICAgIGZvciBhIHNldF9maWVsZF90eXBlIGNhbGwuIFRoZSB2YXJpb3VzIGZ1bmN0aW9uIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcmU6Cit8ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2FyZyA6IGFsbG9jYXRlcyBhIHN0cnVjdHVyZSBmb3IgdGhlIGZpZWxkCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHBhcmFtZXRlcnMuCit8ICAgICAgICAgICAgICAgICAgICAgICBjb3B5X2FyZyA6IGR1cGxpY2F0ZSB0aGUgc3RydWN0dXJlIGNyZWF0ZWQgYnkKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9hcmcKK3wgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfYXJnIDogUmVsZWFzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBtYWtlX2FyZworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBjb3B5X2FyZworfAorfCAgICAgICAgICAgICAgICAgICAgQXQgbGVhc3QgbWFrZV9hcmcgbXVzdCBiZSBub24tTlVMTC4KK3wgICAgICAgICAgICAgICAgICAgIFlvdSBtYXkgcGFzcyBOVUxMIGZvciBjb3B5X2FyZyBhbmQgZnJlZV9hcmcgaWYgeW91cgorfCAgICAgICAgICAgICAgICAgICAgbWFrZV9hcmcgZnVuY3Rpb24gZG9lc24ndCBhbGxvY2F0ZSBtZW1vcnkgYW5kIHlvdXIKK3wgICAgICAgICAgICAgICAgICAgIGFyZyBmaXRzIGludG8gdGhlIHN0b3JhZ2UgZm9yIGEgKHZvaWQqKS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIGFyZ3VtZW50CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2ZpZWxkdHlwZV9hcmcoRklFTERUWVBFICp0eXAsCisJCSAgdm9pZCAqKCpjb25zdCBtYWtlX2FyZykodmFfbGlzdCAqKSwKKwkJICB2b2lkICooKmNvbnN0IGNvcHlfYXJnKShjb25zdCB2b2lkICopLAorCQkgIHZvaWQgKCpjb25zdCBmcmVlX2FyZykgKHZvaWQgKikpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfZmllbGR0eXBlX2FyZyglcCwlcCwlcCwlcCkiKSwKKyAgICAgdHlwLCBtYWtlX2FyZywgY29weV9hcmcsIGZyZWVfYXJnKSk7CisKKyAgaWYgKHR5cCAhPSAwICYmIG1ha2VfYXJnICE9ICh2b2lkICopMCkKKyAgICB7CisgICAgICB0eXAtPnN0YXR1cyB8PSBfSEFTX0FSR1M7CisgICAgICB0eXAtPm1ha2VhcmcgPSBtYWtlX2FyZzsKKyAgICAgIHR5cC0+Y29weWFyZyA9IGNvcHlfYXJnOworICAgICAgdHlwLT5mcmVlYXJnID0gZnJlZV9hcmc7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKmZpZWxkX2FyZyhjb25zdCBGSUVMRCAqZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBwb2ludGVyIHRvIHRoZSBmaWVsZHMgYXJndW1lbnQgc3RydWN0dXJlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBzdHJ1Y3R1cmUgb3IgTlVMTCBpZiBub25lIGlzIGRlZmluZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCAqKQorZmllbGRfYXJnKGNvbnN0IEZJRUxEICpmaWVsZCkKK3sKKyAgVCgoVF9DQUxMRUQoImZpZWxkX2FyZyglcCkiKSwgZmllbGQpKTsKKyAgcmV0dXJuVm9pZFB0cihOb3JtYWxpemVfRmllbGQoZmllbGQpLT5hcmcpOworfQorCisvKiBmbGRfYXJnLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9hdHRyLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljMDgzOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2F0dHIuYwpAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX2F0dHIuYyx2IDEuMTAgMjAwNC8xMi8xMSAyMTozMzoxNSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRmllbGQtQXR0cmlidXRlIG1hbmlwdWxhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAiVGVtcGxhdGUiIG1hY3JvIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gc2V0IGEgZmllbGRzIGF0dHJpYnV0ZSAqLworI2RlZmluZSBHRU5fRklFTERfQVRUUl9TRVRfRkNUKCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgaW50IE5DVVJTRVNfQVBJIHNldF9maWVsZF8gIyMgbmFtZSAoRklFTEQgKiBmaWVsZCwgY2h0eXBlIGF0dHIpXAore1wKKyAgIGludCByZXMgPSBFX0JBRF9BUkdVTUVOVDtcCisgICBUKChUX0NBTExFRCgic2V0X2ZpZWxkXyIgI25hbWUgIiglcCwlcykiKSwgZmllbGQsIF90cmFjZWF0dHIoYXR0cikpKTtcCisgICBpZiAoIGF0dHI9PUFfTk9STUFMIHx8ICgoYXR0ciAmIEFfQVRUUklCVVRFUyk9PWF0dHIpIClcCisgICAgIHtcCisgICAgICAgTm9ybWFsaXplX0ZpZWxkKCBmaWVsZCApO1wKKyAgICAgICBpZiAoZmllbGQgIT0gMCkgXAorCSB7IFwKKwkgaWYgKChmaWVsZCAtPiBuYW1lKSAhPSBhdHRyKVwKKwkgICB7XAorCSAgICAgZmllbGQgLT4gbmFtZSA9IGF0dHI7XAorCSAgICAgcmVzID0gX25jX1N5bmNocm9uaXplX0F0dHJpYnV0ZXMoIGZpZWxkICk7XAorCSAgIH1cCisJIGVsc2VcCisJICAge1wKKwkgICAgIHJlcyA9IEVfT0s7XAorCSAgIH1cCisJIH1cCisgICAgIH1cCisgICBSRVRVUk4ocmVzKTtcCit9CisKKy8qICJUZW1wbGF0ZSIgbWFjcm8gdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBnZXQgYSBmaWVsZHMgYXR0cmlidXRlICovCisjZGVmaW5lIEdFTl9GSUVMRF9BVFRSX0dFVF9GQ1QoIG5hbWUgKSBcCitOQ1VSU0VTX0lNUEVYUCBjaHR5cGUgTkNVUlNFU19BUEkgZmllbGRfICMjIG5hbWUgKGNvbnN0IEZJRUxEICogZmllbGQpXAore1wKKyAgIFQoKFRfQ0FMTEVEKCJmaWVsZF8iICNuYW1lICIoJXApIiksIGZpZWxkKSk7XAorICAgcmV0dXJuQXR0ciggQV9BVFRSSUJVVEVTICYgKE5vcm1hbGl6ZV9GaWVsZCggZmllbGQgKSAtPiBuYW1lKSApO1wKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX2ZvcmUoRklFTEQgKmZpZWxkLCBjaHR5cGUgYXR0cikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldHMgdGhlIGZvcmVncm91bmQgb2YgdGhlIGZpZWxkIHVzZWQgdG8gZGlzcGxheSB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkIGNvbnRlbnRzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgLSBpbnZhbGlkIGF0dHJpYnV0ZXMKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fRklFTERfQVRUUl9TRVRfRkNUKGZvcmUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgY2h0eXBlIGZpZWxkX2ZvcmUoY29uc3QgRklFTEQgKikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGZpZWxkcyBmb3JlZ3JvdW5kIGF0dHJpYnV0ZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIGZvcmVncm91bmQgYXR0cmlidXRlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0ZJRUxEX0FUVFJfR0VUX0ZDVChmb3JlKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfYmFjayhGSUVMRCAqZmllbGQsIGNodHlwZSBhdHRyKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0cyB0aGUgYmFja2dyb3VuZCBvZiB0aGUgZmllbGQgdXNlZCB0byBkaXNwbGF5IHRoZQorfCAgICAgICAgICAgICAgICAgICAgZmllbGRzIGV4dGVuZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgIC0gaW52YWxpZCBhdHRyaWJ1dGVzCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0ZJRUxEX0FUVFJfU0VUX0ZDVChiYWNrKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGNodHlwZSBmaWVsZF9iYWNrKGNvbnN0Cit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSBmaWVsZHMgYmFja2dyb3VuZCBhdHRyaWJ1dGUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBiYWNrZ3JvdW5kIGF0dHJpYnV0ZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9GSUVMRF9BVFRSX0dFVF9GQ1QoYmFjaykKKworLyogZmxkX2F0dHIuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX2N1cnJlbnQuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2N1cnJlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzNhOTBhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfY3VycmVudC5jCkBAIC0wLDAgKzEsMTM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfY3VycmVudC5jLHYgMS4xMSAyMDA0LzEyLzI1IDIyOjQwOjEzIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9jdXJyZW50X2ZpZWxkKEZPUk0gICogZm9ybSxGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBjdXJyZW50IGZpZWxkIG9mIHRoZSBmb3JtIHRvIHRoZSBzcGVjaWZpZWQgb25lLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgZm9ybSBvciBmaWVsZCBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIGZpZWxkIG5vdCBzZWxlY3RhYmxlCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9TVEFURSAgICAgICAtIGNhbGxlZCBmcm9tIGEgaG9vayByb3V0aW5lCit8ICAgICAgICAgICAgICAgICAgICBFX0lOVkFMSURfRklFTEQgICAtIGN1cnJlbnQgZmllbGQgY2FuJ3QgYmUgbGVmdAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfY3VycmVudF9maWVsZChGT1JNICpmb3JtLCBGSUVMRCAqZmllbGQpCit7CisgIGludCBlcnIgPSBFX09LOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfY3VycmVudF9maWVsZCglcCwlcCkiKSwgZm9ybSwgZmllbGQpKTsKKyAgaWYgKGZvcm0gPT0gMCB8fCBmaWVsZCA9PSAwKQorICAgIHsKKyAgICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgICAgfQorICBlbHNlIGlmICgoZm9ybSAhPSBmaWVsZC0+Zm9ybSkgfHwgRmllbGRfSXNfTm90X1NlbGVjdGFibGUoZmllbGQpKQorICAgIHsKKyAgICAgIFJFVFVSTihFX1JFUVVFU1RfREVOSUVEKTsKKyAgICB9CisgIGVsc2UgaWYgKChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSA9PSAwKQorICAgIHsKKyAgICAgIGZvcm0tPmN1cnJlbnQgPSBmaWVsZDsKKyAgICAgIGZvcm0tPmN1cnBhZ2UgPSBmaWVsZC0+cGFnZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoKGZvcm0tPnN0YXR1cyAmIF9JTl9EUklWRVIpICE9IDApCisJeworCSAgZXJyID0gRV9CQURfU1RBVEU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChmb3JtLT5jdXJyZW50ICE9IGZpZWxkKQorCSAgICB7CisJICAgICAgaWYgKCFfbmNfSW50ZXJuYWxfVmFsaWRhdGlvbihmb3JtKSkKKwkJeworCQkgIGVyciA9IEVfSU5WQUxJRF9GSUVMRDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIENhbGxfSG9vayhmb3JtLCBmaWVsZHRlcm0pOworCQkgIGlmIChmaWVsZC0+cGFnZSAhPSBmb3JtLT5jdXJwYWdlKQorCQkgICAgeworCQkgICAgICBDYWxsX0hvb2soZm9ybSwgZm9ybXRlcm0pOworCQkgICAgICBlcnIgPSBfbmNfU2V0X0Zvcm1fUGFnZShmb3JtLCAoaW50KWZpZWxkLT5wYWdlLCBmaWVsZCk7CisJCSAgICAgIENhbGxfSG9vayhmb3JtLCBmb3JtaW5pdCk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBlcnIgPSBfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwgZmllbGQpOworCQkgICAgfQorCQkgIENhbGxfSG9vayhmb3JtLCBmaWVsZGluaXQpOworCQkgICh2b2lkKV9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoZm9ybSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIFJFVFVSTihlcnIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIEZJRUxEICpjdXJyZW50X2ZpZWxkKGNvbnN0IEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBjdXJyZW50IGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgY3VycmVudCBmaWVsZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQorY3VycmVudF9maWVsZChjb25zdCBGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiY3VycmVudF9maWVsZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5GaWVsZChOb3JtYWxpemVfRm9ybShmb3JtKS0+Y3VycmVudCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZpZWxkX2luZGV4KGNvbnN0IEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaWVsZCBpbiB0aGUgZmllbGQtYXJyYXkgb2YKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgPj0gMCAgIDogZmllbGQgaW5kZXgKK3wgICAgICAgICAgICAgICAgICAgIC0xICAgICA6IGZpZWxkcG9pbnRlciBpbnZhbGlkIG9yIGZpZWxkIG5vdCBjb25uZWN0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmaWVsZF9pbmRleChjb25zdCBGSUVMRCAqZmllbGQpCit7CisgIFQoKFRfQ0FMTEVEKCJmaWVsZF9pbmRleCglcCkiKSwgZmllbGQpKTsKKyAgcmV0dXJuQ29kZSgoZmllbGQgIT0gMCAmJiBmaWVsZC0+Zm9ybSAhPSAwKSA/IChpbnQpZmllbGQtPmluZGV4IDogLTEpOworfQorCisvKiBmbGRfY3VycmVudC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mbGRfZGVmLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9kZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTU5YmE2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfZGVmLmMKQEAgLTAsMCArMSwzOTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9kZWYuYyx2IDEuMzYgMjAwNy8xMC8xMyAxOToyOTo1OCB0b20gRXhwICQiKQorCisvKiB0aGlzIGNhbid0IGJlIHJlYWRvbmx5ICovCitzdGF0aWMgRklFTEQgZGVmYXVsdF9maWVsZCA9Cit7CisgIDAsCQkJCS8qIHN0YXR1cyAgKi8KKyAgMCwJCQkJLyogcm93cyAgICAqLworICAwLAkJCQkvKiBjb2xzICAgICovCisgIDAsCQkJCS8qIGZyb3cgICAgKi8KKyAgMCwJCQkJLyogZmNvbCAgICAqLworICAwLAkJCQkvKiBkcm93cyAgICovCisgIDAsCQkJCS8qIGRjb2xzICAgKi8KKyAgMCwJCQkJLyogbWF4Z3JvdyAqLworICAwLAkJCQkvKiBucm93ICAgICovCisgIDAsCQkJCS8qIG5idWYgICAgKi8KKyAgTk9fSlVTVElGSUNBVElPTiwJCS8qIGp1c3QgICAgKi8KKyAgMCwJCQkJLyogcGFnZSAgICAqLworICAwLAkJCQkvKiBpbmRleCAgICovCisgIChpbnQpJyAnLAkJCS8qIHBhZCAgICAgKi8KKyAgQV9OT1JNQUwsCQkJLyogZm9yZSAgICAqLworICBBX05PUk1BTCwJCQkvKiBiYWNrICAgICovCisgIEFMTF9GSUVMRF9PUFRTLAkJLyogb3B0cyAgICAqLworICAoRklFTEQgKikwLAkJCS8qIHNuZXh0ICAgKi8KKyAgKEZJRUxEICopMCwJCQkvKiBzcHJldiAgICovCisgIChGSUVMRCAqKTAsCQkJLyogbGluayAgICAqLworICAoRk9STSAqKTAsCQkJLyogZm9ybSAgICAqLworICAoRklFTERUWVBFICopMCwJCS8qIHR5cGUgICAgKi8KKyAgKGNoYXIgKikwLAkJCS8qIGFyZyAgICAgKi8KKyAgKEZJRUxEX0NFTEwgKikwLAkJLyogYnVmICAgICAqLworICAoY2hhciAqKTAJCQkvKiB1c3JwdHIgICovCisgIE5DVVJTRVNfRklFTERfRVhURU5TSU9OCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTEQgKikKK19uY19EZWZhdWx0X0ZpZWxkID0gJmRlZmF1bHRfZmllbGQ7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgVHlwZUFyZ3VtZW50ICpfbmNfTWFrZV9Bcmd1bWVudCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGSUVMRFRZUEUgKnR5cCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICphcCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVyciApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDcmVhdGUgYW4gYXJndW1lbnQgc3RydWN0dXJlIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUuCit8ICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHR5cGUtZGVwZW5kZW50IGFyZ3VtZW50IGxpc3QgdG8gY29uc3RydWN0Cit8ICAgICAgICAgICAgICAgICAgICBpdC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlLiBNYXliZSBOVUxMLgorfCAgICAgICAgICAgICAgICAgICAgSW4gY2FzZSBvZiBhbiBlcnJvciBpbiAqZXJyIGFuIGVycm9yIGNvdW50ZXIgaXMgaW5jcmVhc2VkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKFR5cGVBcmd1bWVudCAqKQorX25jX01ha2VfQXJndW1lbnQoY29uc3QgRklFTERUWVBFICp0eXAsIHZhX2xpc3QgKmFwLCBpbnQgKmVycikKK3sKKyAgVHlwZUFyZ3VtZW50ICpyZXMgPSAoVHlwZUFyZ3VtZW50ICopMDsKKyAgVHlwZUFyZ3VtZW50ICpwOworCisgIGlmICh0eXAgIT0gMCAmJiAodHlwLT5zdGF0dXMgJiBfSEFTX0FSR1MpICE9IDApCisgICAgeworICAgICAgYXNzZXJ0KGVyciAhPSAwICYmIGFwICE9ICh2YV9saXN0ICopMCk7CisgICAgICBpZiAoKHR5cC0+c3RhdHVzICYgX0xJTktFRF9UWVBFKSAhPSAwKQorCXsKKwkgIHAgPSB0eXBlTWFsbG9jKFR5cGVBcmd1bWVudCwgMSk7CisKKwkgIGlmIChwICE9IDApCisJICAgIHsKKwkgICAgICBwLT5sZWZ0ID0gX25jX01ha2VfQXJndW1lbnQodHlwLT5sZWZ0LCBhcCwgZXJyKTsKKwkgICAgICBwLT5yaWdodCA9IF9uY19NYWtlX0FyZ3VtZW50KHR5cC0+cmlnaHQsIGFwLCBlcnIpOworCSAgICAgIHJldHVybiBwOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqZXJyICs9IDE7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgYXNzZXJ0KHR5cC0+bWFrZWFyZyAhPSAodm9pZCAqKTApOworCSAgaWYgKCEocmVzID0gKFR5cGVBcmd1bWVudCAqKXR5cC0+bWFrZWFyZyhhcCkpKQorCSAgICB7CisJICAgICAgKmVyciArPSAxOworCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIHJlczsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBUeXBlQXJndW1lbnQgKl9uY19Db3B5X0FyZ3VtZW50KGNvbnN0IEZJRUxEVFlQRSAqdHlwLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUeXBlQXJndW1lbnQgKmFyZ3AsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyICkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENyZWF0ZSBhIGNvcHkgb2YgYW4gYXJndW1lbnQgc3RydWN0dXJlIGZvciB0aGUgc3BlY2lmaWVkCit8ICAgICAgICAgICAgICAgICAgICB0eXBlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUuIE1heWJlIE5VTEwuCit8ICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIGFuIGVycm9yIGluICplcnIgYW4gZXJyb3IgY291bnRlciBpcyBpbmNyZWFzZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoVHlwZUFyZ3VtZW50ICopCitfbmNfQ29weV9Bcmd1bWVudChjb25zdCBGSUVMRFRZUEUgKnR5cCwgY29uc3QgVHlwZUFyZ3VtZW50ICphcmdwLCBpbnQgKmVycikKK3sKKyAgVHlwZUFyZ3VtZW50ICpyZXMgPSAoVHlwZUFyZ3VtZW50ICopMDsKKyAgVHlwZUFyZ3VtZW50ICpwOworCisgIGlmICh0eXAgIT0gMCAmJiAodHlwLT5zdGF0dXMgJiBfSEFTX0FSR1MpICE9IDApCisgICAgeworICAgICAgYXNzZXJ0KGVyciAhPSAwICYmIGFyZ3AgIT0gMCk7CisgICAgICBpZiAoKHR5cC0+c3RhdHVzICYgX0xJTktFRF9UWVBFKSAhPSAwKQorCXsKKwkgIHAgPSB0eXBlTWFsbG9jKFR5cGVBcmd1bWVudCwgMSk7CisKKwkgIGlmIChwICE9IDApCisJICAgIHsKKwkgICAgICBwLT5sZWZ0ID0gX25jX0NvcHlfQXJndW1lbnQodHlwLCBhcmdwLT5sZWZ0LCBlcnIpOworCSAgICAgIHAtPnJpZ2h0ID0gX25jX0NvcHlfQXJndW1lbnQodHlwLCBhcmdwLT5yaWdodCwgZXJyKTsKKwkgICAgICByZXR1cm4gcDsKKwkgICAgfQorCSAgKmVyciArPSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAodHlwLT5jb3B5YXJnICE9ICh2b2lkICopMCkKKwkgICAgeworCSAgICAgIGlmICghKHJlcyA9IChUeXBlQXJndW1lbnQgKikodHlwLT5jb3B5YXJnKChjb25zdCB2b2lkICopYXJncCkpKSkKKwkJeworCQkgICplcnIgKz0gMTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZXMgPSAoVHlwZUFyZ3VtZW50ICopYXJncDsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCBfbmNfRnJlZV9Bcmd1bWVudChjb25zdCBGSUVMRFRZUEUgKnR5cCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUFyZ3VtZW50ICogYXJncCApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZWxlYXNlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGFyZ3VtZW50IHN0cnVjdHVyZQorfCAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBmaWVsZHR5cGUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19GcmVlX0FyZ3VtZW50KGNvbnN0IEZJRUxEVFlQRSAqdHlwLCBUeXBlQXJndW1lbnQgKmFyZ3ApCit7CisgIGlmICh0eXAgIT0gMCAmJiAodHlwLT5zdGF0dXMgJiBfSEFTX0FSR1MpICE9IDApCisgICAgeworICAgICAgaWYgKCh0eXAtPnN0YXR1cyAmIF9MSU5LRURfVFlQRSkgIT0gMCkKKwl7CisJICBhc3NlcnQoYXJncCAhPSAwKTsKKwkgIF9uY19GcmVlX0FyZ3VtZW50KHR5cC0+bGVmdCwgYXJncC0+bGVmdCk7CisJICBfbmNfRnJlZV9Bcmd1bWVudCh0eXAtPnJpZ2h0LCBhcmdwLT5yaWdodCk7CisJICBmcmVlKGFyZ3ApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAodHlwLT5mcmVlYXJnICE9ICh2b2lkICopMCkKKwkgICAgeworCSAgICAgIHR5cC0+ZnJlZWFyZygodm9pZCAqKWFyZ3ApOworCSAgICB9CisJfQorICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBib29sIF9uY19Db3B5X1R5cGUoIEZJRUxEICpkc3QsIEZJRUxEIGNvbnN0ICpzcmMgKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ29weSBhcmd1bWVudCBzdHJ1Y3R1cmUgb2YgZmllbGQgc3JjIHRvIGZpZWxkIGRzdAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgICAgICAtIGNvcHkgd29ya2VkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgICAgIC0gZXJyb3Igb2NjdXJyZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX0NvcHlfVHlwZShGSUVMRCAqZHN0LCBGSUVMRCBjb25zdCAqc3JjKQoreworICBpbnQgZXJyID0gMDsKKworICBhc3NlcnQoZHN0ICE9IDAgJiYgc3JjICE9IDApOworCisgIGRzdC0+dHlwZSA9IHNyYy0+dHlwZTsKKyAgZHN0LT5hcmcgPSAodm9pZCAqKV9uY19Db3B5X0FyZ3VtZW50KHNyYy0+dHlwZSwgKFR5cGVBcmd1bWVudCAqKShzcmMtPmFyZyksICZlcnIpOworCisgIGlmIChlcnIgIT0gMCkKKyAgICB7CisgICAgICBfbmNfRnJlZV9Bcmd1bWVudChkc3QtPnR5cGUsIChUeXBlQXJndW1lbnQgKikoZHN0LT5hcmcpKTsKKyAgICAgIGRzdC0+dHlwZSA9IChGSUVMRFRZUEUgKikwOworICAgICAgZHN0LT5hcmcgPSAodm9pZCAqKTA7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGRzdC0+dHlwZSAhPSAwKQorCXsKKwkgIGRzdC0+dHlwZS0+cmVmKys7CisJfQorICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX0ZyZWVfVHlwZSggRklFTEQgKmZpZWxkICkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJlbGVhc2UgQXJndW1lbnQgc3RydWN0dXJlIGZvciB0aGlzIGZpZWxkCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19GcmVlX1R5cGUoRklFTEQgKmZpZWxkKQoreworICBhc3NlcnQoZmllbGQgIT0gMCk7CisgIGlmIChmaWVsZC0+dHlwZSAhPSAwKQorICAgIHsKKyAgICAgIGZpZWxkLT50eXBlLT5yZWYtLTsKKyAgICB9CisgIF9uY19GcmVlX0FyZ3VtZW50KGZpZWxkLT50eXBlLCAoVHlwZUFyZ3VtZW50ICopKGZpZWxkLT5hcmcpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRCAqbmV3X2ZpZWxkKCBpbnQgcm93cywgaW50IGNvbHMsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvdywgaW50IGZjb2wsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnJvdywgaW50IG5idWYgKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ3JlYXRlIGEgbmV3IGZpZWxkIHdpdGggdGhpcyBtYW55ICdyb3dzJyBhbmQgJ2NvbHMnLAorfCAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgYXQgJ2Zyb3cvZmNvbCcgaW4gdGhlIHN1YndpbmRvdyBvZiB0aGUgZm9ybS4KK3wgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlICducm93JyBvZmYtc2NyZWVuIHJvd3MgYW5kICduYnVmJyBhZGRpdGlvbmFsCit8ICAgICAgICAgICAgICAgICAgICBidWZmZXJzLiBJZiBhbiBlcnJvciBvY2N1cnMsIGVycm5vIGlzIHNldCB0bworfAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIGFyZ3VtZW50Cit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAtIHN5c3RlbSBlcnJvcgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgbmV3IGZpZWxkIG9yIE5VTEwgaWYgZmFpbHVyZS4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQorbmV3X2ZpZWxkKGludCByb3dzLCBpbnQgY29scywgaW50IGZyb3csIGludCBmY29sLCBpbnQgbnJvdywgaW50IG5idWYpCit7CisgIHN0YXRpYyBjb25zdCBGSUVMRF9DRUxMIGJsYW5rID0gQkxBTks7CisgIHN0YXRpYyBjb25zdCBGSUVMRF9DRUxMIHplcm9zID0gWkVST1M7CisKKyAgRklFTEQgKk5ld19GaWVsZCA9IChGSUVMRCAqKTA7CisgIGludCBlcnIgPSBFX0JBRF9BUkdVTUVOVDsKKworICBUKChUX0NBTExFRCgibmV3X2ZpZWxkKCVkLCVkLCVkLCVkLCVkLCVkKSIpLCByb3dzLCBjb2xzLCBmcm93LCBmY29sLCBucm93LCBuYnVmKSk7CisgIGlmIChyb3dzID4gMCAmJgorICAgICAgY29scyA+IDAgJiYKKyAgICAgIGZyb3cgPj0gMCAmJgorICAgICAgZmNvbCA+PSAwICYmCisgICAgICBucm93ID49IDAgJiYKKyAgICAgIG5idWYgPj0gMCAmJgorICAgICAgKChlcnIgPSBFX1NZU1RFTV9FUlJPUikgIT0gMCkgJiYJLyogdHJpY2s6IHRoaXMgcmVzZXRzIHRoZSBkZWZhdWx0IGVycm9yICovCisgICAgICAoTmV3X0ZpZWxkID0gdHlwZU1hbGxvYyhGSUVMRCwgMSkpICE9IDApCisgICAgeworICAgICAgVCgoVF9DUkVBVEUoImZpZWxkICVwIiksIE5ld19GaWVsZCkpOworICAgICAgKk5ld19GaWVsZCA9IGRlZmF1bHRfZmllbGQ7CisgICAgICBOZXdfRmllbGQtPnJvd3MgPSByb3dzOworICAgICAgTmV3X0ZpZWxkLT5jb2xzID0gY29sczsKKyAgICAgIE5ld19GaWVsZC0+ZHJvd3MgPSByb3dzICsgbnJvdzsKKyAgICAgIE5ld19GaWVsZC0+ZGNvbHMgPSBjb2xzOworICAgICAgTmV3X0ZpZWxkLT5mcm93ID0gZnJvdzsKKyAgICAgIE5ld19GaWVsZC0+ZmNvbCA9IGZjb2w7CisgICAgICBOZXdfRmllbGQtPm5yb3cgPSBucm93OworICAgICAgTmV3X0ZpZWxkLT5uYnVmID0gbmJ1ZjsKKyAgICAgIE5ld19GaWVsZC0+bGluayA9IE5ld19GaWVsZDsKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgICBOZXdfRmllbGQtPndvcmtpbmcgPSBuZXdwYWQoMSwgQnVmZmVyX0xlbmd0aChOZXdfRmllbGQpICsgMSk7CisgICAgICBOZXdfRmllbGQtPmV4cGFuZGVkID0gdHlwZUNhbGxvYyhjaGFyICosIDEgKyAodW5zaWduZWQpbmJ1Zik7CisjZW5kaWYKKworICAgICAgaWYgKF9uY19Db3B5X1R5cGUoTmV3X0ZpZWxkLCAmZGVmYXVsdF9maWVsZCkpCisJeworCSAgc2l6ZV90IGxlbjsKKworCSAgbGVuID0gVG90YWxfQnVmZmVyX1NpemUoTmV3X0ZpZWxkKTsKKwkgIGlmICgoTmV3X0ZpZWxkLT5idWYgPSAoRklFTERfQ0VMTCAqKW1hbGxvYyhsZW4pKSkKKwkgICAgeworCSAgICAgIC8qIFByZWZpbGwgYnVmZmVycyB3aXRoIGJsYW5rcyBhbmQgaW5zZXJ0IHRlcm1pbmF0aW5nIHplcm9lcworCSAgICAgICAgIGJldHdlZW4gYnVmZmVycyAqLworCSAgICAgIGludCBpLCBqOworCSAgICAgIGludCBjZWxscyA9IEJ1ZmZlcl9MZW5ndGgoTmV3X0ZpZWxkKTsKKworCSAgICAgIGZvciAoaSA9IDA7IGkgPD0gTmV3X0ZpZWxkLT5uYnVmOyBpKyspCisJCXsKKwkJICBGSUVMRF9DRUxMICpidWZmZXIgPSAmKE5ld19GaWVsZC0+YnVmWyhjZWxscyArIDEpICogaV0pOworCisJCSAgZm9yIChqID0gMDsgaiA8IGNlbGxzOyArK2opCisJCSAgICB7CisJCSAgICAgIGJ1ZmZlcltqXSA9IGJsYW5rOworCQkgICAgfQorCQkgIGJ1ZmZlcltqXSA9IHplcm9zOworCQl9CisJICAgICAgcmV0dXJuRmllbGQoTmV3X0ZpZWxkKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKE5ld19GaWVsZCkKKyAgICBmcmVlX2ZpZWxkKE5ld19GaWVsZCk7CisKKyAgU0VUX0VSUk9SKGVycik7CisgIHJldHVybkZpZWxkKChGSUVMRCAqKTApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmcmVlX2ZpZWxkKCBGSUVMRCAqZmllbGQgKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRnJlZXMgdGhlIHN0b3JhZ2UgYWxsb2NhdGVkIGZvciB0aGUgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBmaWVsZCBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgICAtIGZpZWxkIGlzIGNvbm5lY3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZyZWVfZmllbGQoRklFTEQgKmZpZWxkKQoreworICBUKChUX0NBTExFRCgiZnJlZV9maWVsZCglcCkiKSwgZmllbGQpKTsKKyAgaWYgKCFmaWVsZCkKKyAgICB7CisgICAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICAgIH0KKyAgZWxzZSBpZiAoZmllbGQtPmZvcm0gIT0gMCkKKyAgICB7CisgICAgICBSRVRVUk4oRV9DT05ORUNURUQpOworICAgIH0KKyAgZWxzZSBpZiAoZmllbGQgPT0gZmllbGQtPmxpbmspCisgICAgeworICAgICAgaWYgKGZpZWxkLT5idWYgIT0gMCkKKwlmcmVlKGZpZWxkLT5idWYpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIEZJRUxEICpmOworCisgICAgICBmb3IgKGYgPSBmaWVsZDsgZi0+bGluayAhPSBmaWVsZDsgZiA9IGYtPmxpbmspCisJeworCX0KKyAgICAgIGYtPmxpbmsgPSBmaWVsZC0+bGluazsKKyAgICB9CisgIF9uY19GcmVlX1R5cGUoZmllbGQpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgIGlmIChmaWVsZC0+ZXhwYW5kZWQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgbjsKKworICAgICAgZm9yIChuID0gMDsgbiA8PSBmaWVsZC0+bmJ1ZjsgKytuKQorCXsKKwkgIEZyZWVJZk5lZWRlZChmaWVsZC0+ZXhwYW5kZWRbbl0pOworCX0KKyAgICAgIGZyZWUoZmllbGQtPmV4cGFuZGVkKTsKKyAgICAgICh2b2lkKWRlbHdpbihmaWVsZC0+d29ya2luZyk7CisgICAgfQorI2VuZGlmCisgIGZyZWUoZmllbGQpOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIGZsZF9kZWYuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX2R1cC5jIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfZHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjMzhhMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2R1cC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfZHVwLmMsdiAxLjEyIDIwMDcvMTAvMTMgMTk6MzA6MjEgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRCAqZHVwX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IGZyb3csIGludCBmY29sKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRHVwbGljYXRlcyB0aGUgZmllbGQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4gQWxsCit8ICAgICAgICAgICAgICAgICAgICBmaWVsZCBhdHRyaWJ1dGVzIGFuZCB0aGUgYnVmZmVycyBhcmUgY29waWVkLgorfCAgICAgICAgICAgICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzLCBlcnJubyBpcyBzZXQgdG8KK3wKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBhcmd1bWVudAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgLSBzeXN0ZW0gZXJyb3IKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIG5ldyBmaWVsZCBvciBOVUxMIGlmIGZhaWx1cmUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQorZHVwX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IGZyb3csIGludCBmY29sKQoreworICBGSUVMRCAqTmV3X0ZpZWxkID0gKEZJRUxEICopMDsKKyAgaW50IGVyciA9IEVfQkFEX0FSR1VNRU5UOworCisgIFQoKFRfQ0FMTEVEKCJkdXBfZmllbGQoJXAsJWQsJWQpIiksIGZpZWxkLCBmcm93LCBmY29sKSk7CisgIGlmIChmaWVsZCAmJiAoZnJvdyA+PSAwKSAmJiAoZmNvbCA+PSAwKSAmJgorICAgICAgKChlcnIgPSBFX1NZU1RFTV9FUlJPUikgIT0gMCkgJiYJLyogdHJpY2sgOiB0aGlzIHJlc2V0cyB0aGUgZGVmYXVsdCBlcnJvciAqLworICAgICAgKE5ld19GaWVsZCA9IHR5cGVNYWxsb2MoRklFTEQsIDEpKSkKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgiZmllbGQgJXAiKSwgTmV3X0ZpZWxkKSk7CisgICAgICAqTmV3X0ZpZWxkID0gKl9uY19EZWZhdWx0X0ZpZWxkOworICAgICAgTmV3X0ZpZWxkLT5mcm93ID0gZnJvdzsKKyAgICAgIE5ld19GaWVsZC0+ZmNvbCA9IGZjb2w7CisgICAgICBOZXdfRmllbGQtPmxpbmsgPSBOZXdfRmllbGQ7CisgICAgICBOZXdfRmllbGQtPnJvd3MgPSBmaWVsZC0+cm93czsKKyAgICAgIE5ld19GaWVsZC0+Y29scyA9IGZpZWxkLT5jb2xzOworICAgICAgTmV3X0ZpZWxkLT5ucm93ID0gZmllbGQtPm5yb3c7CisgICAgICBOZXdfRmllbGQtPmRyb3dzID0gZmllbGQtPmRyb3dzOworICAgICAgTmV3X0ZpZWxkLT5kY29scyA9IGZpZWxkLT5kY29sczsKKyAgICAgIE5ld19GaWVsZC0+bWF4Z3JvdyA9IGZpZWxkLT5tYXhncm93OworICAgICAgTmV3X0ZpZWxkLT5uYnVmID0gZmllbGQtPm5idWY7CisgICAgICBOZXdfRmllbGQtPmp1c3QgPSBmaWVsZC0+anVzdDsKKyAgICAgIE5ld19GaWVsZC0+Zm9yZSA9IGZpZWxkLT5mb3JlOworICAgICAgTmV3X0ZpZWxkLT5iYWNrID0gZmllbGQtPmJhY2s7CisgICAgICBOZXdfRmllbGQtPnBhZCA9IGZpZWxkLT5wYWQ7CisgICAgICBOZXdfRmllbGQtPm9wdHMgPSBmaWVsZC0+b3B0czsKKyAgICAgIE5ld19GaWVsZC0+dXNycHRyID0gZmllbGQtPnVzcnB0cjsKKworICAgICAgaWYgKF9uY19Db3B5X1R5cGUoTmV3X0ZpZWxkLCBmaWVsZCkpCisJeworCSAgc2l6ZV90IGksIGxlbjsKKworCSAgbGVuID0gVG90YWxfQnVmZmVyX1NpemUoTmV3X0ZpZWxkKTsKKwkgIGlmICgoTmV3X0ZpZWxkLT5idWYgPSAoRklFTERfQ0VMTCAqKW1hbGxvYyhsZW4pKSkKKwkgICAgeworCSAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwkJTmV3X0ZpZWxkLT5idWZbaV0gPSBmaWVsZC0+YnVmW2ldOworCSAgICAgIHJldHVybkZpZWxkKE5ld19GaWVsZCk7CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmIChOZXdfRmllbGQpCisgICAgZnJlZV9maWVsZChOZXdfRmllbGQpOworCisgIFNFVF9FUlJPUihlcnIpOworICByZXR1cm5GaWVsZCgoRklFTEQgKikwKTsKK30KKworLyogZmxkX2R1cC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mbGRfZnRjaG9pY2UuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2Z0Y2hvaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzN2Y5NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2Z0Y2hvaWNlLmMKQEAgLTAsMCArMSw2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX2Z0Y2hvaWNlLmMsdiAxLjkgMjAwNC8xMi8xMSAyMTo0NDo1NyB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9maWVsZHR5cGVfY2hvaWNlKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICp0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICgqIGNvbnN0IG5leHRfY2hvaWNlKShGSUVMRCAqLGNvbnN0IHZvaWQgKiksCit8ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICgqIGNvbnN0IHByZXZfY2hvaWNlKShGSUVMRCAqLGNvbnN0IHZvaWQgKikpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEZWZpbmUgaW1wbGVtZW50YXRpb24gb2YgZW51bWVyYXRpb24gcmVxdWVzdHMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBhcmd1bWVudHMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZmllbGR0eXBlX2Nob2ljZShGSUVMRFRZUEUgKnR5cCwKKwkJICAgICBib29sICgqY29uc3QgbmV4dF9jaG9pY2UpIChGSUVMRCAqLCBjb25zdCB2b2lkICopLAorCQkgICAgIGJvb2wgKCpjb25zdCBwcmV2X2Nob2ljZSkgKEZJRUxEICosIGNvbnN0IHZvaWQgKikpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfZmllbGR0eXBlX2Nob2ljZSglcCwlcCwlcCkiKSwgdHlwLCBuZXh0X2Nob2ljZSwgcHJldl9jaG9pY2UpKTsKKworICBpZiAoIXR5cCB8fCAhbmV4dF9jaG9pY2UgfHwgIXByZXZfY2hvaWNlKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgdHlwLT5zdGF0dXMgfD0gX0hBU19DSE9JQ0U7CisgIHR5cC0+bmV4dCA9IG5leHRfY2hvaWNlOworICB0eXAtPnByZXYgPSBwcmV2X2Nob2ljZTsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBmbGRfZnRjaG9pY2UuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX2Z0bGluay5jIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfZnRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkMjIxOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2Z0bGluay5jCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9mdGxpbmsuYyx2IDEuMTMgMjAwNy8xMC8xMyAxOTozMDozNSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgRklFTERUWVBFICpsaW5rX2ZpZWxkdHlwZSgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqdHlwZTEsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKnR5cGUyKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ3JlYXRlIGEgbmV3IGZpZWxkdHlwZSBidWlsdCBmcm9tIHRoZSB0d28gZ2l2ZW4gdHlwZXMuCit8ICAgICAgICAgICAgICAgICAgICBUaGV5IGFyZSBjb25uZWN0ZWQgYnkgYW4gbG9naWNhbCAnT1InLgorfCAgICAgICAgICAgICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzLCBlcnJubyBpcyBzZXQgdG8gICAgICAgICAgICAgICAgICAgIAorfCAgICAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBhcmd1bWVudHMKK3wgICAgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAtIHN5c3RlbSBlcnJvciAobm8gbWVtb3J5KQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRmllbGR0eXBlIHBvaW50ZXIgb3IgTlVMTCBpZiBlcnJvciBvY2N1cnJlZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGSUVMRFRZUEUgKikKK2xpbmtfZmllbGR0eXBlKEZJRUxEVFlQRSAqdHlwZTEsIEZJRUxEVFlQRSAqdHlwZTIpCit7CisgIEZJRUxEVFlQRSAqbmZ0eXAgPSAoRklFTERUWVBFICopMDsKKworICBUKChUX0NBTExFRCgibGlua19maWVsZHR5cGUoJXAsJXApIiksIHR5cGUxLCB0eXBlMikpOworICBpZiAodHlwZTEgJiYgdHlwZTIpCisgICAgeworICAgICAgbmZ0eXAgPSB0eXBlTWFsbG9jKEZJRUxEVFlQRSwgMSk7CisKKyAgICAgIGlmIChuZnR5cCkKKwl7CisJICBUKChUX0NSRUFURSgiZmllbGR0eXBlICVwIiksIG5mdHlwKSk7CisJICAqbmZ0eXAgPSAqX25jX0RlZmF1bHRfRmllbGRUeXBlOworCSAgbmZ0eXAtPnN0YXR1cyB8PSBfTElOS0VEX1RZUEU7CisJICBpZiAoKHR5cGUxLT5zdGF0dXMgJiBfSEFTX0FSR1MpIHx8ICh0eXBlMi0+c3RhdHVzICYgX0hBU19BUkdTKSkKKwkgICAgbmZ0eXAtPnN0YXR1cyB8PSBfSEFTX0FSR1M7CisJICBpZiAoKHR5cGUxLT5zdGF0dXMgJiBfSEFTX0NIT0lDRSkgfHwgKHR5cGUyLT5zdGF0dXMgJiBfSEFTX0NIT0lDRSkpCisJICAgIG5mdHlwLT5zdGF0dXMgfD0gX0hBU19DSE9JQ0U7CisJICBuZnR5cC0+bGVmdCA9IHR5cGUxOworCSAgbmZ0eXAtPnJpZ2h0ID0gdHlwZTI7CisJICB0eXBlMS0+cmVmKys7CisJICB0eXBlMi0+cmVmKys7CisJfQorICAgICAgZWxzZQorCXsKKwkgIFNFVF9FUlJPUihFX1NZU1RFTV9FUlJPUik7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFNFVF9FUlJPUihFX0JBRF9BUkdVTUVOVCk7CisgICAgfQorICByZXR1cm5GaWVsZFR5cGUobmZ0eXApOworfQorCisvKiBmbGRfZnRsaW5rLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9pbmZvLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0MTk4YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2luZm8uYwpAQCAtMCwwICsxLDEwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX2luZm8uYyx2IDEuMTAgMjAwNC8xMi8xMSAyMjoyNDo1NyB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZpZWxkX2luZm8oY29uc3QgRklFTEQgKmZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyb3dzLCBpbnQgKmNvbHMsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmZyb3csIGludCAqZmNvbCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnJvdywgaW50ICpuYnVmKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgaW5mb3MgYWJvdXQgdGhlIGZpZWxkcyBjcmVhdGlvbiBwYXJhbWV0ZXJzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgZmllbGQgcG9pbnRlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZpZWxkX2luZm8oY29uc3QgRklFTEQgKmZpZWxkLAorCSAgIGludCAqcm93cywgaW50ICpjb2xzLAorCSAgIGludCAqZnJvdywgaW50ICpmY29sLAorCSAgIGludCAqbnJvdywgaW50ICpuYnVmKQoreworICBUKChUX0NBTExFRCgiZmllbGRfaW5mbyglcCwlcCwlcCwlcCwlcCwlcCwlcCkiKSwKKyAgICAgZmllbGQsCisgICAgIHJvd3MsIGNvbHMsCisgICAgIGZyb3csIGZjb2wsCisgICAgIG5yb3csIG5idWYpKTsKKworICBpZiAoIWZpZWxkKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKHJvd3MpCisgICAgKnJvd3MgPSBmaWVsZC0+cm93czsKKyAgaWYgKGNvbHMpCisgICAgKmNvbHMgPSBmaWVsZC0+Y29sczsKKyAgaWYgKGZyb3cpCisgICAgKmZyb3cgPSBmaWVsZC0+ZnJvdzsKKyAgaWYgKGZjb2wpCisgICAgKmZjb2wgPSBmaWVsZC0+ZmNvbDsKKyAgaWYgKG5yb3cpCisgICAgKm5yb3cgPSBmaWVsZC0+bnJvdzsKKyAgaWYgKG5idWYpCisgICAgKm5idWYgPSBmaWVsZC0+bmJ1ZjsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGR5bmFtaWNfZmllbGRfaW5mbyhjb25zdCBGSUVMRCAqZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZHJvd3MsIGludCAqZGNvbHMsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF4Z3JvdykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGluZm9ybWF0aW9ucyBhYm91dCBhIGR5bmFtaWMgZmllbGRzIGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMgcGFyYW1ldGVycy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIGFyZ3VtZW50CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZHluYW1pY19maWVsZF9pbmZvKGNvbnN0IEZJRUxEICpmaWVsZCwgaW50ICpkcm93cywgaW50ICpkY29scywgaW50ICptYXhncm93KQoreworICBUKChUX0NBTExFRCgiZHluYW1pY19maWVsZF9pbmZvKCVwLCVwLCVwLCVwKSIpLCBmaWVsZCwgZHJvd3MsIGRjb2xzLCBtYXhncm93KSk7CisKKyAgaWYgKCFmaWVsZCkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChkcm93cykKKyAgICAqZHJvd3MgPSBmaWVsZC0+ZHJvd3M7CisgIGlmIChkY29scykKKyAgICAqZGNvbHMgPSBmaWVsZC0+ZGNvbHM7CisgIGlmIChtYXhncm93KQorICAgICptYXhncm93ID0gZmllbGQtPm1heGdyb3c7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBmbGRfaW5mby5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mbGRfanVzdC5jIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfanVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjFmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9qdXN0LmMKQEAgLTAsMCArMSw4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX2p1c3QuYyx2IDEuMTEgMjAwNC8xMi8xMSAyMjo1NTo0OCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9maWVsZF9qdXN0KEZJRUxEICpmaWVsZCwgaW50IGp1c3QpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIGZpZWxkcyB0eXBlIG9mIGp1c3RpZmljYXRpb24uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBvbmUgb2YgdGhlIGFyZ3VtZW50cyB3YXMgaW5jb3JyZWN0Cit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZmllbGRfanVzdChGSUVMRCAqZmllbGQsIGludCBqdXN0KQoreworICBpbnQgcmVzID0gRV9CQURfQVJHVU1FTlQ7CisKKyAgVCgoVF9DQUxMRUQoInNldF9maWVsZF9qdXN0KCVwLCVkKSIpLCBmaWVsZCwganVzdCkpOworCisgIGlmICgoanVzdCA9PSBOT19KVVNUSUZJQ0FUSU9OKSB8fAorICAgICAgKGp1c3QgPT0gSlVTVElGWV9MRUZUKSB8fAorICAgICAgKGp1c3QgPT0gSlVTVElGWV9DRU5URVIpIHx8CisgICAgICAoanVzdCA9PSBKVVNUSUZZX1JJR0hUKSkKKyAgICB7CisgICAgICBOb3JtYWxpemVfRmllbGQoZmllbGQpOworICAgICAgaWYgKGZpZWxkLT5qdXN0ICE9IGp1c3QpCisJeworCSAgZmllbGQtPmp1c3QgPSBqdXN0OworCSAgcmVzID0gX25jX1N5bmNocm9uaXplX0F0dHJpYnV0ZXMoZmllbGQpOworCX0KKyAgICAgIGVsc2UKKwlyZXMgPSBFX09LOworICAgIH0KKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZmllbGRfanVzdCggY29uc3QgRklFTEQgKmZpZWxkICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIHRoZSBmaWVsZHMgdHlwZSBvZiBqdXN0aWZpY2F0aW9uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUganVzdGlmaWNhdGlvbiB0eXBlLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZpZWxkX2p1c3QoY29uc3QgRklFTEQgKmZpZWxkKQoreworICBUKChUX0NBTExFRCgiZmllbGRfanVzdCglcCkiKSwgZmllbGQpKTsKKyAgcmV0dXJuQ29kZShOb3JtYWxpemVfRmllbGQoZmllbGQpLT5qdXN0KTsKK30KKworLyogZmxkX2p1c3QuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX2xpbmsuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX2xpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWFjN2RiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfbGluay5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9saW5rLmMsdiAxLjExIDIwMDcvMTAvMTMgMTk6MzA6NDMgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIEZJRUxEICpsaW5rX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IGZyb3csIGludCBmY29sKSAgCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBEdXBsaWNhdGVzIHRoZSBmaWVsZCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiBUaGUKK3wgICAgICAgICAgICAgICAgICAgIG5ldyBmaWVsZCBzaGFyZXMgaXRzIGJ1ZmZlcnMgd2l0aCB0aGUgb3JpZ2luYWwgb25lLAorfCAgICAgICAgICAgICAgICAgICAgdGhlIGF0dHJpYnV0ZXMgYXJlIGluZGVwZW5kZW50LgorfCAgICAgICAgICAgICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzLCBlcnJubyBpcyBzZXQgdG8KK3wgICAgICAgICAgICAgICAgICAgIAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgLSBpbnZhbGlkIGFyZ3VtZW50Cit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAtIHN5c3RlbSBlcnJvcgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgbmV3IGZpZWxkIG9yIE5VTEwgaWYgZmFpbHVyZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKEZJRUxEICopCitsaW5rX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IGZyb3csIGludCBmY29sKQoreworICBGSUVMRCAqTmV3X0ZpZWxkID0gKEZJRUxEICopMDsKKyAgaW50IGVyciA9IEVfQkFEX0FSR1VNRU5UOworCisgIFQoKFRfQ0FMTEVEKCJsaW5rX2ZpZWxkKCVwLCVkLCVkKSIpLCBmaWVsZCwgZnJvdywgZmNvbCkpOworICBpZiAoZmllbGQgJiYgKGZyb3cgPj0gMCkgJiYgKGZjb2wgPj0gMCkgJiYKKyAgICAgICgoZXJyID0gRV9TWVNURU1fRVJST1IpICE9IDApICYmCS8qIHRyaWNrOiB0aGlzIHJlc2V0cyB0aGUgZGVmYXVsdCBlcnJvciAqLworICAgICAgKE5ld19GaWVsZCA9IHR5cGVNYWxsb2MoRklFTEQsIDEpKSkKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgiZmllbGQgJXAiKSwgTmV3X0ZpZWxkKSk7CisgICAgICAqTmV3X0ZpZWxkID0gKl9uY19EZWZhdWx0X0ZpZWxkOworICAgICAgTmV3X0ZpZWxkLT5mcm93ID0gZnJvdzsKKyAgICAgIE5ld19GaWVsZC0+ZmNvbCA9IGZjb2w7CisKKyAgICAgIE5ld19GaWVsZC0+bGluayA9IGZpZWxkLT5saW5rOworICAgICAgZmllbGQtPmxpbmsgPSBOZXdfRmllbGQ7CisKKyAgICAgIE5ld19GaWVsZC0+YnVmID0gZmllbGQtPmJ1ZjsKKyAgICAgIE5ld19GaWVsZC0+cm93cyA9IGZpZWxkLT5yb3dzOworICAgICAgTmV3X0ZpZWxkLT5jb2xzID0gZmllbGQtPmNvbHM7CisgICAgICBOZXdfRmllbGQtPm5yb3cgPSBmaWVsZC0+bnJvdzsKKyAgICAgIE5ld19GaWVsZC0+bmJ1ZiA9IGZpZWxkLT5uYnVmOworICAgICAgTmV3X0ZpZWxkLT5kcm93cyA9IGZpZWxkLT5kcm93czsKKyAgICAgIE5ld19GaWVsZC0+ZGNvbHMgPSBmaWVsZC0+ZGNvbHM7CisgICAgICBOZXdfRmllbGQtPm1heGdyb3cgPSBmaWVsZC0+bWF4Z3JvdzsKKyAgICAgIE5ld19GaWVsZC0+anVzdCA9IGZpZWxkLT5qdXN0OworICAgICAgTmV3X0ZpZWxkLT5mb3JlID0gZmllbGQtPmZvcmU7CisgICAgICBOZXdfRmllbGQtPmJhY2sgPSBmaWVsZC0+YmFjazsKKyAgICAgIE5ld19GaWVsZC0+cGFkID0gZmllbGQtPnBhZDsKKyAgICAgIE5ld19GaWVsZC0+b3B0cyA9IGZpZWxkLT5vcHRzOworICAgICAgTmV3X0ZpZWxkLT51c3JwdHIgPSBmaWVsZC0+dXNycHRyOworCisgICAgICBpZiAoX25jX0NvcHlfVHlwZShOZXdfRmllbGQsIGZpZWxkKSkKKwlyZXR1cm5GaWVsZChOZXdfRmllbGQpOworICAgIH0KKworICBpZiAoTmV3X0ZpZWxkKQorICAgIGZyZWVfZmllbGQoTmV3X0ZpZWxkKTsKKworICBTRVRfRVJST1IoZXJyKTsKKyAgcmV0dXJuRmllbGQoKEZJRUxEICopMCk7Cit9CisKKy8qIGZsZF9saW5rLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9tYXguYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX21heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTM1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9tYXguYwpAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfbWF4LmMsdiAxLjkgMjAwNC8xMi8xMSAyMTo1MTo1NCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tYXhfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgbWF4Z3JvdykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgbWF4aW11bSBncm93dGggZm9yIGEgZHluYW1pYyBmaWVsZC4gSWYgbWF4Z3Jvdz0wCit8ICAgICAgICAgICAgICAgICAgICB0aGUgZmllbGQgbWF5IGdyb3cgdG8gYW55IHBvc3NpYmxlIHNpemUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBhcmd1bWVudAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9tYXhfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgbWF4Z3JvdykKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9tYXhfZmllbGQoJXAsJWQpIiksIGZpZWxkLCBtYXhncm93KSk7CisKKyAgaWYgKCFmaWVsZCB8fCAobWF4Z3JvdyA8IDApKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgIGVsc2UKKyAgICB7CisgICAgICBib29sIHNpbmdsZV9saW5lX2ZpZWxkID0gU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpOworCisgICAgICBpZiAobWF4Z3JvdyA+IDApCisJeworCSAgaWYgKChzaW5nbGVfbGluZV9maWVsZCAmJiAobWF4Z3JvdyA8IGZpZWxkLT5kY29scykpIHx8CisJICAgICAgKCFzaW5nbGVfbGluZV9maWVsZCAmJiAobWF4Z3JvdyA8IGZpZWxkLT5kcm93cykpKQorCSAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCX0KKyAgICAgIGZpZWxkLT5tYXhncm93ID0gbWF4Z3JvdzsKKyAgICAgIGZpZWxkLT5zdGF0dXMgJj0gfl9NQVlfR1JPVzsKKyAgICAgIGlmICghKGZpZWxkLT5vcHRzICYgT19TVEFUSUMpKQorCXsKKwkgIGlmICgobWF4Z3JvdyA9PSAwKSB8fAorCSAgICAgIChzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRjb2xzIDwgbWF4Z3JvdykpIHx8CisJICAgICAgKCFzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRyb3dzIDwgbWF4Z3JvdykpKQorCSAgICBmaWVsZC0+c3RhdHVzIHw9IF9NQVlfR1JPVzsKKwl9CisgICAgfQorICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIGZsZF9tYXguYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX21vdmUuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX21vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWNlYWFlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfbW92ZS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9tb3ZlLmMsdiAxLjkgMjAwNC8xMi8xMSAyMTo1Mjo0NCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IG1vdmVfZmllbGQoRklFTEQgKmZpZWxkLGludCBmcm93LCBpbnQgZmNvbCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmVzIHRoZSBkaXNjb25uZWN0ZWQgZmllbGQgdG8gdGhlIG5ldyBsb2NhdGlvbiBpbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGZvcm1zIHN1YndpbmRvdy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgYXJndW1lbnQgcGFzc2VkCit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgICAgLSBmaWVsZCBpcyBjb25uZWN0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCittb3ZlX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IGZyb3csIGludCBmY29sKQoreworICBUKChUX0NBTExFRCgibW92ZV9maWVsZCglcCwlZCwlZCkiKSwgZmllbGQsIGZyb3csIGZjb2wpKTsKKworICBpZiAoIWZpZWxkIHx8IChmcm93IDwgMCkgfHwgKGZjb2wgPCAwKSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChmaWVsZC0+Zm9ybSkKKyAgICBSRVRVUk4oRV9DT05ORUNURUQpOworCisgIGZpZWxkLT5mcm93ID0gZnJvdzsKKyAgZmllbGQtPmZjb2wgPSBmY29sOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIGZsZF9tb3ZlLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9uZXdmdHlwLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9uZXdmdHlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5ODRiMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX25ld2Z0eXAuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX25ld2Z0eXAuYyx2IDEuMTUgMjAwNy8xMC8xMyAxOTozMDo1NSB0b20gRXhwICQiKQorCitzdGF0aWMgRklFTERUWVBFIGNvbnN0IGRlZmF1bHRfZmllbGR0eXBlID0KK3sKKyAgMCwJCQkJLyogc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwTCwJCQkJLyogcmVmZXJlbmNlIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAoRklFTERUWVBFICopMCwJCS8qIHBvaW50ZXIgdG8gbGVmdCAgb3BlcmFuZCAgICAgICAgICAgICAgICAgICAgKi8KKyAgKEZJRUxEVFlQRSAqKTAsCQkvKiBwb2ludGVyIHRvIHJpZ2h0IG9wZXJhbmQgICAgICAgICAgICAgICAgICAgICovCisgIE5VTEwsCQkJCS8qIG1ha2VhcmcgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgTlVMTCwJCQkJLyogY29weWFyZyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBOVUxMLAkJCQkvKiBmcmVlYXJnIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIE5VTEwsCQkJCS8qIGZpZWxkIHZhbGlkYXRpb24gZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgKi8KKyAgTlVMTCwJCQkJLyogQ2hhcmFjdGVyIGNoZWNrIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAqLworICBOVUxMLAkJCQkvKiBlbnVtZXJhdGUgbmV4dCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICovCisgIE5VTEwJCQkJLyogZW51bWVyYXRlIHByZXZpb3VzIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAqLworfTsKKworTkNVUlNFU19FWFBPUlRfVkFSKGNvbnN0IEZJRUxEVFlQRSAqKQorX25jX0RlZmF1bHRfRmllbGRUeXBlID0gJmRlZmF1bHRfZmllbGR0eXBlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIEZJRUxEVFlQRSAqbmV3X2ZpZWxkdHlwZSgKK3wgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKCogY29uc3QgZmllbGRfY2hlY2spKEZJRUxEICosY29uc3Qgdm9pZCAqKSwKK3wgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKCogY29uc3QgY2hhcl9jaGVjaykgKGludCwgY29uc3Qgdm9pZCAqKSApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDcmVhdGUgYSBuZXcgZmllbGR0eXBlLiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lciBtdXN0Cit8ICAgICAgICAgICAgICAgICAgICB3cml0ZSBhIGZpZWxkX2NoZWNrIGFuZCBhIGNoYXJfY2hlY2sgZnVuY3Rpb24gYW5kIGdpdmUKK3wgICAgICAgICAgICAgICAgICAgIHRoZW0gYXMgaW5wdXQgdG8gdGhpcyBjYWxsLgorfCAgICAgICAgICAgICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzLCBlcnJubyBpcyBzZXQgdG8KK3wgICAgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgYXJndW1lbnRzCit8ICAgICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgLSBzeXN0ZW0gZXJyb3IgKG5vIG1lbW9yeSkKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEZpZWxkdHlwZSBwb2ludGVyIG9yIE5VTEwgaWYgZXJyb3Igb2NjdXJyZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGSUVMRFRZUEUgKikKK25ld19maWVsZHR5cGUoYm9vbCAoKmNvbnN0IGZpZWxkX2NoZWNrKSAoRklFTEQgKiwgY29uc3Qgdm9pZCAqKSwKKwkgICAgICBib29sICgqY29uc3QgY2hhcl9jaGVjaykgKGludCwgY29uc3Qgdm9pZCAqKSkKK3sKKyAgRklFTERUWVBFICpuZnR5cCA9IChGSUVMRFRZUEUgKikwOworCisgIFQoKFRfQ0FMTEVEKCJuZXdfZmllbGR0eXBlKCVwLCVwKSIpLCBmaWVsZF9jaGVjaywgY2hhcl9jaGVjaykpOworICBpZiAoKGZpZWxkX2NoZWNrKSB8fCAoY2hhcl9jaGVjaykpCisgICAgeworICAgICAgbmZ0eXAgPSB0eXBlTWFsbG9jKEZJRUxEVFlQRSwgMSk7CisKKyAgICAgIGlmIChuZnR5cCkKKwl7CisJICBUKChUX0NSRUFURSgiZmllbGR0eXBlICVwIiksIG5mdHlwKSk7CisJICAqbmZ0eXAgPSBkZWZhdWx0X2ZpZWxkdHlwZTsKKwkgIG5mdHlwLT5mY2hlY2sgPSBmaWVsZF9jaGVjazsKKwkgIG5mdHlwLT5jY2hlY2sgPSBjaGFyX2NoZWNrOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBTRVRfRVJST1IoRV9TWVNURU1fRVJST1IpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBTRVRfRVJST1IoRV9CQURfQVJHVU1FTlQpOworICAgIH0KKyAgcmV0dXJuRmllbGRUeXBlKG5mdHlwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZnJlZV9maWVsZHR5cGUoRklFTERUWVBFICp0eXApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmllbGR0eXBlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgIC0gdGhlcmUgYXJlIGZpZWxkcyByZWZlcmVuY2luZyB0aGUgdHlwZQorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBmaWVsZHR5cGUgcG9pbnRlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZyZWVfZmllbGR0eXBlKEZJRUxEVFlQRSAqdHlwKQoreworICBUKChUX0NBTExFRCgiZnJlZV9maWVsZHR5cGUoJXApIiksIHR5cCkpOworCisgIGlmICghdHlwKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKHR5cC0+cmVmICE9IDApCisgICAgUkVUVVJOKEVfQ09OTkVDVEVEKTsKKworICBpZiAodHlwLT5zdGF0dXMgJiBfUkVTSURFTlQpCisgICAgUkVUVVJOKEVfQ09OTkVDVEVEKTsKKworICBpZiAodHlwLT5zdGF0dXMgJiBfTElOS0VEX1RZUEUpCisgICAgeworICAgICAgaWYgKHR5cC0+bGVmdCkKKwl0eXAtPmxlZnQtPnJlZi0tOworICAgICAgaWYgKHR5cC0+cmlnaHQpCisJdHlwLT5yaWdodC0+cmVmLS07CisgICAgfQorICBmcmVlKHR5cCk7CisgIFJFVFVSTihFX09LKTsKK30KKworLyogZmxkX25ld2Z0eXAuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX29wdHMuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX29wdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg4MWFjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfb3B0cy5jCkBAIC0wLDAgKzEsMTM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfb3B0cy5jLHYgMS4xMSAyMDA0LzEyLzExIDIxOjU1OjQ2IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBGaWVsZC1PcHRpb25zIG1hbmlwdWxhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX29wdHMoRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBUdXJucyBvbiB0aGUgbmFtZWQgb3B0aW9ucyBmb3IgdGhpcyBmaWVsZCBhbmQgdHVybnMKK3wgICAgICAgICAgICAgICAgICAgIG9mZiBhbGwgdGhlIHJlbWFpbmluZyBvcHRpb25zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9DVVJSRU5UICAgICAgIC0gdGhlIGZpZWxkIGlzIHRoZSBjdXJyZW50IGZpZWxkCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG9wdGlvbnMKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9maWVsZF9vcHRzKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKQoreworICBpbnQgcmVzID0gRV9CQURfQVJHVU1FTlQ7CisKKyAgVCgoVF9DQUxMRUQoInNldF9maWVsZF9vcHRzKCVwLCVkKSIpLCBmaWVsZCwgb3B0cykpOworCisgIG9wdHMgJj0gQUxMX0ZJRUxEX09QVFM7CisgIGlmICghKG9wdHMgJiB+QUxMX0ZJRUxEX09QVFMpKQorICAgIHJlcyA9IF9uY19TeW5jaHJvbml6ZV9PcHRpb25zKE5vcm1hbGl6ZV9GaWVsZChmaWVsZCksIG9wdHMpOworICBSRVRVUk4ocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIEZpZWxkX09wdGlvbnMgZmllbGRfb3B0cyhjb25zdCBGSUVMRCAqZmllbGQpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSB0aGUgZmllbGRzIG9wdGlvbnMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgb3B0aW9ucy4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChGaWVsZF9PcHRpb25zKQorZmllbGRfb3B0cyhjb25zdCBGSUVMRCAqZmllbGQpCit7CisgIFQoKFRfQ0FMTEVEKCJmaWVsZF9vcHRzKCVwKSIpLCBmaWVsZCkpOworCisgIHJldHVybkNvZGUoQUxMX0ZJRUxEX09QVFMgJiBOb3JtYWxpemVfRmllbGQoZmllbGQpLT5vcHRzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmaWVsZF9vcHRzX29uKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVHVybnMgb24gdGhlIG5hbWVkIG9wdGlvbnMgZm9yIHRoaXMgZmllbGQgYW5kIGFsbCB0aGUgCit8ICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgb3B0aW9ucyBhcmUgdW5jaGFuZ2VkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9DVVJSRU5UICAgICAgIC0gdGhlIGZpZWxkIGlzIHRoZSBjdXJyZW50IGZpZWxkCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG9wdGlvbnMKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZpZWxkX29wdHNfb24oRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpCit7CisgIGludCByZXMgPSBFX0JBRF9BUkdVTUVOVDsKKworICBUKChUX0NBTExFRCgiZmllbGRfb3B0c19vbiglcCwlZCkiKSwgZmllbGQsIG9wdHMpKTsKKworICBvcHRzICY9IEFMTF9GSUVMRF9PUFRTOworICBpZiAoIShvcHRzICYgfkFMTF9GSUVMRF9PUFRTKSkKKyAgICB7CisgICAgICBOb3JtYWxpemVfRmllbGQoZmllbGQpOworICAgICAgcmVzID0gX25jX1N5bmNocm9uaXplX09wdGlvbnMoZmllbGQsIGZpZWxkLT5vcHRzIHwgb3B0cyk7CisgICAgfQorICBSRVRVUk4ocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmaWVsZF9vcHRzX29mZihGSUVMRCAqZmllbGQsIEZpZWxkX09wdGlvbnMgb3B0cykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFR1cm5zIG9mZiB0aGUgbmFtZWQgb3B0aW9ucyBmb3IgdGhpcyBmaWVsZCBhbmQgYWxsIHRoZSAKK3wgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBvcHRpb25zIGFyZSB1bmNoYW5nZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0NVUlJFTlQgICAgICAgLSB0aGUgZmllbGQgaXMgdGhlIGN1cnJlbnQgZmllbGQKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgb3B0aW9ucworfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZmllbGRfb3B0c19vZmYoRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpCit7CisgIGludCByZXMgPSBFX0JBRF9BUkdVTUVOVDsKKworICBUKChUX0NBTExFRCgiZmllbGRfb3B0c19vZmYoJXAsJWQpIiksIGZpZWxkLCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfRklFTERfT1BUUzsKKyAgaWYgKCEob3B0cyAmIH5BTExfRklFTERfT1BUUykpCisgICAgeworICAgICAgTm9ybWFsaXplX0ZpZWxkKGZpZWxkKTsKKyAgICAgIHJlcyA9IF9uY19TeW5jaHJvbml6ZV9PcHRpb25zKGZpZWxkLCBmaWVsZC0+b3B0cyAmIH5vcHRzKTsKKyAgICB9CisgIFJFVFVSTihyZXMpOworfQorCisvKiBmbGRfb3B0cy5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mbGRfcGFkLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF9wYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Q4YWQxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfcGFkLmMKQEAgLTAsMCArMSw4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZmxkX3BhZC5jLHYgMS45IDIwMDQvMTIvMTEgMjE6NTY6NDkgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfcGFkKEZJRUxEICpmaWVsZCwgaW50IGNoKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBwYWQgY2hhcmFjdGVyIHVzZWQgdG8gZmlsbCB0aGUgZmllbGQuIFRoaXMgbXVzdAorfCAgICAgICAgICAgICAgICAgICAgYmUgYSBwcmludGFibGUgY2hhcmFjdGVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgZmllbGQgcG9pbnRlciBvciBwYWQgY2hhcmFjdGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9maWVsZF9wYWQoRklFTEQgKmZpZWxkLCBpbnQgY2gpCit7CisgIGludCByZXMgPSBFX0JBRF9BUkdVTUVOVDsKKworICBUKChUX0NBTExFRCgic2V0X2ZpZWxkX3BhZCglcCwlZCkiKSwgZmllbGQsIGNoKSk7CisKKyAgTm9ybWFsaXplX0ZpZWxkKGZpZWxkKTsKKyAgaWYgKGlzcHJpbnQoVUNoYXIoY2gpKSkKKyAgICB7CisgICAgICBpZiAoZmllbGQtPnBhZCAhPSBjaCkKKwl7CisJICBmaWVsZC0+cGFkID0gY2g7CisJICByZXMgPSBfbmNfU3luY2hyb25pemVfQXR0cmlidXRlcyhmaWVsZCk7CisJfQorICAgICAgZWxzZQorCXJlcyA9IEVfT0s7CisgICAgfQorICBSRVRVUk4ocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmaWVsZF9wYWQoY29uc3QgRklFTEQgKmZpZWxkKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgdGhlIGZpZWxkcyBwYWQgY2hhcmFjdGVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIHBhZCBjaGFyYWN0ZXIuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZmllbGRfcGFkKGNvbnN0IEZJRUxEICpmaWVsZCkKK3sKKyAgVCgoVF9DQUxMRUQoImZpZWxkX3BhZCglcCkiKSwgZmllbGQpKTsKKworICByZXR1cm5Db2RlKE5vcm1hbGl6ZV9GaWVsZChmaWVsZCktPnBhZCk7Cit9CisKKy8qIGZsZF9wYWQuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX3BhZ2UuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX3BhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWFmNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfcGFnZS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9wYWdlLmMsdiAxLjkgMjAwNC8xMi8xMSAyMTo1ODoxOSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9uZXdfcGFnZShGSUVMRCAqZmllbGQsIGJvb2wgbmV3X3BhZ2VfZmxhZykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1hcmtzIHRoZSBmaWVsZCBhcyB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IHBhZ2Ugb2YgCit8ICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQ09OTkVDVEVEICAtIGZpZWxkIGlzIGNvbm5lY3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9uZXdfcGFnZShGSUVMRCAqZmllbGQsIGJvb2wgbmV3X3BhZ2VfZmxhZykKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9uZXdfcGFnZSglcCwlZCkiKSwgZmllbGQsIG5ld19wYWdlX2ZsYWcpKTsKKworICBOb3JtYWxpemVfRmllbGQoZmllbGQpOworICBpZiAoZmllbGQtPmZvcm0pCisgICAgUkVUVVJOKEVfQ09OTkVDVEVEKTsKKworICBpZiAobmV3X3BhZ2VfZmxhZykKKyAgICBmaWVsZC0+c3RhdHVzIHw9IF9ORVdQQUdFOworICBlbHNlCisgICAgZmllbGQtPnN0YXR1cyAmPSB+X05FV1BBR0U7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBuZXdfcGFnZShjb25zdCBGSUVMRCAqZmllbGQpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSB0aGUgaW5mbyB3aGV0aGVyIG9yIG5vdCB0aGUgZmllbGQgc3RhcnRzIGEKK3wgICAgICAgICAgICAgICAgICAgIG5ldyBwYWdlIG9uIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBmaWVsZCBzdGFydHMgYSBuZXcgcGFnZQorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBmaWVsZCBkb2Vzbid0IHN0YXJ0IGEgbmV3IHBhZ2UKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChib29sKQorbmV3X3BhZ2UoY29uc3QgRklFTEQgKmZpZWxkKQoreworICBUKChUX0NBTExFRCgibmV3X3BhZ2UoJXApIiksIGZpZWxkKSk7CisKKyAgcmV0dXJuQm9vbCgoTm9ybWFsaXplX0ZpZWxkKGZpZWxkKS0+c3RhdHVzICYgX05FV1BBR0UpID8gVFJVRSA6IEZBTFNFKTsKK30KKworLyogZmxkX3BhZ2UuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX3N0YXQuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX3N0YXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODViNGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfc3RhdC5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF9zdGF0LmMsdiAxLjExIDIwMDQvMTIvMTEgMjI6Mjg6MDAgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfc3RhdHVzKEZJRUxEICpmaWVsZCwgYm9vbCBzdGF0dXMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgb3IgY2xlYXIgdGhlICdjaGFuZ2VkJyBpbmRpY2F0aW9uIGZsYWcgZm9yIHRoYXQKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkcyBwcmltYXJ5IGJ1ZmZlci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZmllbGRfc3RhdHVzKEZJRUxEICpmaWVsZCwgYm9vbCBzdGF0dXMpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfZmllbGRfc3RhdHVzKCVwLCVkKSIpLCBmaWVsZCwgc3RhdHVzKSk7CisKKyAgTm9ybWFsaXplX0ZpZWxkKGZpZWxkKTsKKworICBpZiAoc3RhdHVzKQorICAgIGZpZWxkLT5zdGF0dXMgfD0gX0NIQU5HRUQ7CisgIGVsc2UKKyAgICBmaWVsZC0+c3RhdHVzICY9IH5fQ0hBTkdFRDsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBib29sIGZpZWxkX3N0YXR1cyhjb25zdCBGSUVMRCAqZmllbGQpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgdGhlICdjaGFuZ2VkJyBpbmRpY2F0aW9uIGZsYWcKK3wgICAgICAgICAgICAgICAgICAgIGZvciB0aGF0IGZpZWxkcyBwcmltYXJ5IGJ1ZmZlci4gCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGJ1ZmZlciBoYXMgYmVlbiBjaGFuZ2VkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGJ1ZmZlciBoYXMgbm90IGJlZW4gY2hhbmdlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitmaWVsZF9zdGF0dXMoY29uc3QgRklFTEQgKmZpZWxkKQoreworICBUKChUX0NBTExFRCgiZmllbGRfc3RhdHVzKCVwKSIpLCBmaWVsZCkpOworCisgIHJldHVybkJvb2woKE5vcm1hbGl6ZV9GaWVsZChmaWVsZCktPnN0YXR1cyAmIF9DSEFOR0VEKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qIGZsZF9zdGF0LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF90eXBlLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZsZF90eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhM2ZiZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX3R5cGUuYwpAQCAtMCwwICsxLDk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmbGRfdHlwZS5jLHYgMS4xNSAyMDA0LzEyLzI1IDIyOjI0OjEwIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCBGSUVMRFRZUEUgKnR5cGUsLi4uKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQXNzb2NpYXRlIHRoZSBzcGVjaWZpZWQgZmllbGR0eXBlIHdpdGggdGhlIGZpZWxkLgorfCAgICAgICAgICAgICAgICAgICAgQ2VydGFpbiBmaWVsZCB0eXBlcyB0YWtlIGFkZGl0aW9uYWwgYXJndW1lbnRzLiBMb29rCit8ICAgICAgICAgICAgICAgICAgICBhdCB0aGUgc3BlYyBvZiB0aGUgZmllbGQgdHlwZXMgIQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9maWVsZF90eXBlKEZJRUxEICpmaWVsZCwgRklFTERUWVBFICp0eXBlLC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgaW50IHJlcyA9IEVfU1lTVEVNX0VSUk9SOworICBpbnQgZXJyID0gMDsKKworICBUKChUX0NBTExFRCgic2V0X2ZpZWxkX3R5cGUoJXAsJXApIiksIGZpZWxkLCB0eXBlKSk7CisKKyAgdmFfc3RhcnQoYXAsIHR5cGUpOworCisgIE5vcm1hbGl6ZV9GaWVsZChmaWVsZCk7CisgIF9uY19GcmVlX1R5cGUoZmllbGQpOworCisgIGZpZWxkLT50eXBlID0gdHlwZTsKKyAgZmllbGQtPmFyZyA9ICh2b2lkICopX25jX01ha2VfQXJndW1lbnQoZmllbGQtPnR5cGUsICZhcCwgJmVycik7CisKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBfbmNfRnJlZV9Bcmd1bWVudChmaWVsZC0+dHlwZSwgKFR5cGVBcmd1bWVudCAqKShmaWVsZC0+YXJnKSk7CisgICAgICBmaWVsZC0+dHlwZSA9IChGSUVMRFRZUEUgKikwOworICAgICAgZmllbGQtPmFyZyA9ICh2b2lkICopMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZXMgPSBFX09LOworICAgICAgaWYgKGZpZWxkLT50eXBlKQorCWZpZWxkLT50eXBlLT5yZWYrKzsKKyAgICB9CisKKyAgdmFfZW5kKGFwKTsKKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRFRZUEUgKmZpZWxkX3R5cGUoY29uc3QgRklFTEQgKmZpZWxkKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgdGhlIGFzc29jaWF0ZWQgZmllbGR0eXBlIGZvciB0aGlzIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBmaWVsZHR5cGUgb2YgTlVMTCBpZiBub25lIGlzIGRlZmluZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTERUWVBFICopCitmaWVsZF90eXBlKGNvbnN0IEZJRUxEICpmaWVsZCkKK3sKKyAgVCgoVF9DQUxMRUQoImZpZWxkX3R5cGUoJXApIiksIGZpZWxkKSk7CisgIHJldHVybkZpZWxkVHlwZShOb3JtYWxpemVfRmllbGQoZmllbGQpLT50eXBlKTsKK30KKworLyogZmxkX3R5cGUuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZmxkX3VzZXIuYyBiL25jdXJzZXMtNS43L2Zvcm0vZmxkX3VzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjM2MjJjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mbGRfdXNlci5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZsZF91c2VyLmMsdiAxLjE1IDIwMDQvMTIvMjUgMjI6MjQ6NTAgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfdXNlcnB0cihGSUVMRCAqZmllbGQsIHZvaWQgKnVzcnB0cikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgcG9pbnRlciB0aGF0IGlzIHJlc2VydmVkIGluIGFueSBmaWVsZCB0byBzdG9yZQorfCAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gcmVsZXZhbnQgaW5mb3JtYXRpb25zCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgLSBvbiBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2ZpZWxkX3VzZXJwdHIoRklFTEQgKmZpZWxkLCB2b2lkICp1c3JwdHIpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfZmllbGRfdXNlcnB0ciglcCwlcCkiKSwgZmllbGQsIHVzcnB0cikpOworCisgIE5vcm1hbGl6ZV9GaWVsZChmaWVsZCktPnVzcnB0ciA9IHVzcnB0cjsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCAqZmllbGRfdXNlcnB0cihjb25zdCBGSUVMRCAqZmllbGQpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIHBvaW50ZXIgdGhhdCBpcyByZXNlcnZlZCBpbiBhbnkgZmllbGQgdG8KK3wgICAgICAgICAgICAgICAgICAgIHN0b3JlIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFZhbHVlIG9mIHBvaW50ZXIuIElmIG5vIHN1Y2ggcG9pbnRlciBoYXMgYmVlbiBzZXQsCit8ICAgICAgICAgICAgICAgICAgICBOVUxMIGlzIHJldHVybmVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCAqKQorZmllbGRfdXNlcnB0cihjb25zdCBGSUVMRCAqZmllbGQpCit7CisgIFQoKFRfQ0FMTEVEKCJmaWVsZF91c2VycHRyKCVwKSIpLCBmaWVsZCkpOworICByZXR1cm5Wb2lkUHRyKE5vcm1hbGl6ZV9GaWVsZChmaWVsZCktPnVzcnB0cik7Cit9CisKKy8qIGZsZF91c2VyLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2Zvcm0uaCBiL25jdXJzZXMtNS43L2Zvcm0vZm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NjkxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2Zvcm0uaApAQCAtMCwwICsxLDQwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiBmb3JtLmgsdiAwLjIwIDIwMDQvMTIvMDQgMjI6MjI6MTAgdG9tIEV4cCAkICovCisKKyNpZm5kZWYgRk9STV9ICisjZGVmaW5lIEZPUk1fSAorCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjaW5jbHVkZSA8ZXRpLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIEZPUk1fUFJJVl9ICit0eXBlZGVmIHZvaWQgKkZJRUxEX0NFTEw7CisjZW5kaWYKKworI2lmbmRlZiBOQ1VSU0VTX0ZJRUxEX0lOVEVSTkFMUworI2RlZmluZSBOQ1VSU0VTX0ZJRUxEX0lOVEVSTkFMUyAvKiBub3RoaW5nICovCisjZW5kaWYKKwordHlwZWRlZiBpbnQgRm9ybV9PcHRpb25zOwordHlwZWRlZiBpbnQgRmllbGRfT3B0aW9uczsKKworCS8qKioqKioqKioqCisJKiAgX1BBR0UgICoKKwkqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHNob3J0IHBtaW47CQkvKiBpbmRleCBvZiBmaXJzdCBmaWVsZCBvbiBwYWdlCQkJKi8KKyAgc2hvcnQgcG1heDsJCS8qIGluZGV4IG9mIGxhc3QgZmllbGQgb24gcGFnZQkJCSovCisgIHNob3J0IHNtaW47CQkvKiBpbmRleCBvZiB0b3AgbGVmdG1vc3QgZmllbGQgb24gcGFnZQkJKi8KKyAgc2hvcnQgc21heDsJCS8qIGluZGV4IG9mIGJvdHRvbSByaWdodG1vc3QgZmllbGQgb24gcGFnZQkqLworfSBfUEFHRTsKKworCS8qKioqKioqKioqCisJKiAgRklFTEQgICoKKwkqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCBmaWVsZG5vZGUgeworICB1bnNpZ25lZCBzaG9ydAlzdGF0dXM7CQkvKiBmbGFncwkJCSovCisgIHNob3J0CQkJcm93czsJCS8qIHNpemUgaW4gcm93cwkJCSovCisgIHNob3J0CQkJY29sczsJCS8qIHNpemUgaW4gY29scwkJCSovCisgIHNob3J0CQkJZnJvdzsJCS8qIGZpcnN0IHJvdwkJCSovCisgIHNob3J0CQkJZmNvbDsJCS8qIGZpcnN0IGNvbAkJCSovCisgIGludAkJCWRyb3dzOwkJLyogZHluYW1pYyByb3dzCQkJKi8KKyAgaW50CQkJZGNvbHM7CQkvKiBkeW5hbWljIGNvbHMJCQkqLworICBpbnQJCQltYXhncm93OwkvKiBtYXhpbXVtIGZpZWxkIGdyb3d0aAkJKi8KKyAgaW50CQkJbnJvdzsJCS8qIG9mZi1zY3JlZW4gcm93cwkJKi8KKyAgc2hvcnQJCQluYnVmOwkJLyogYWRkaXRpb25hbCBidWZmZXJzCQkqLworICBzaG9ydAkJCWp1c3Q7CQkvKiBqdXN0aWZpY2F0aW9uCQkqLworICBzaG9ydAkJCXBhZ2U7CQkvKiBwYWdlIG9uIGZvcm0JCQkqLworICBzaG9ydAkJCWluZGV4OwkJLyogaW50byBmb3JtIC0+IGZpZWxkCQkqLworICBpbnQJCQlwYWQ7CQkvKiBwYWQgY2hhcmFjdGVyCQkqLworICBjaHR5cGUJCWZvcmU7CQkvKiBmb3JlZ3JvdW5kIGF0dHJpYnV0ZQkJKi8KKyAgY2h0eXBlCQliYWNrOwkJLyogYmFja2dyb3VuZCBhdHRyaWJ1dGUJCSovCisgIEZpZWxkX09wdGlvbnMJCW9wdHM7CQkvKiBvcHRpb25zCQkJKi8KKyAgc3RydWN0IGZpZWxkbm9kZSAqCXNuZXh0OwkJLyogc29ydGVkIG9yZGVyIHBvaW50ZXIJCSovCisgIHN0cnVjdCBmaWVsZG5vZGUgKglzcHJldjsJCS8qIHNvcnRlZCBvcmRlciBwb2ludGVyCQkqLworICBzdHJ1Y3QgZmllbGRub2RlICoJbGluazsJCS8qIGxpbmtlZCBmaWVsZCBjaGFpbgkJKi8KKyAgc3RydWN0IGZvcm1ub2RlICoJZm9ybTsJCS8qIGNvbnRhaW5pbmcgZm9ybQkJKi8KKyAgc3RydWN0IHR5cGVub2RlICoJdHlwZTsJCS8qIGZpZWxkIHR5cGUJCQkqLworICB2b2lkICoJCWFyZzsJCS8qIGFyZ3VtZW50IGZvciB0eXBlCQkqLworICBGSUVMRF9DRUxMICoJCWJ1ZjsJCS8qIGZpZWxkIGJ1ZmZlcnMJCSovCisgIHZvaWQgKgkJdXNycHRyOwkJLyogdXNlciBwb2ludGVyCQkJKi8KKyAgLyoKKyAgICogVGhlIHdpZGUtY2hhcmFjdGVyIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgZXh0cmEgaW5mb3JtYXRpb24uICBCZWNhdXNlCisgICAqIHRoZXJlIGFyZSBleGlzdGluZyBhcHBsaWNhdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBtZW1iZXJzIG9mIEZJRUxECisgICAqIGRpcmVjdGx5LCB3ZSBjYW5ub3QgbWFrZSB0aGUgc3RydWN0IG9wYXF1ZS4gIE9mZnNldHMgb2YgbWVtYmVycyB1cCB0bworICAgKiB0aGlzIHBvaW50IGFyZSB0aGUgc2FtZSBpbiB0aGUgbmFycm93LSBhbmQgd2lkZS1jaGFyYWN0ZXIgY29uZmlndXJhdGlvbi4KKyAgICogQnV0IG5vdGUgdGhhdCB0aGUgdHlwZSBvZiBidWYgZGVwZW5kcyBvbiB0aGUgY29uZmlndXJhdGlvbiwgYW5kIGlzIG1hZGUKKyAgICogb3BhcXVlIGZvciB0aGF0IHJlYXNvbi4KKyAgICovCisgIE5DVVJTRVNfRklFTERfSU5URVJOQUxTCit9IEZJRUxEOworCisJLyoqKioqKioqKioqKioqCisJKiAgRklFTERUWVBFICAqCisJKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHR5cGVub2RlIHsKKyAgdW5zaWduZWQgc2hvcnQJc3RhdHVzOwkJCS8qIGZsYWdzCQkqLworICBsb25nCQkJcmVmOwkJCS8qIHJlZmVyZW5jZSBjb3VudAkqLworICBzdHJ1Y3QgdHlwZW5vZGUgKglsZWZ0OwkJCS8qIHB0ciB0byBvcGVyYW5kIGZvciB8ICovCisgIHN0cnVjdCB0eXBlbm9kZSAqCXJpZ2h0OwkJCS8qIHB0ciB0byBvcGVyYW5kIGZvciB8ICovCisKKyAgdm9pZCogKCptYWtlYXJnKSh2YV9saXN0ICopOwkJCS8qIG1ha2UgZmllbGR0eXBlIGFyZwkqLworICB2b2lkKiAoKmNvcHlhcmcpKGNvbnN0IHZvaWQgKik7CQkvKiBjb3B5IGZpZWxkdHlwZSBhcmcJKi8KKyAgdm9pZAkoKmZyZWVhcmcpKHZvaWQgKik7CQkJLyogZnJlZSBmaWVsZHR5cGUgYXJnCSovCisKKyAgYm9vbAkoKmZjaGVjaykoRklFTEQgKixjb25zdCB2b2lkICopOwkvKiBmaWVsZCB2YWxpZGF0aW9uCSovCisgIGJvb2wJKCpjY2hlY2spKGludCxjb25zdCB2b2lkICopOwkJLyogY2hhcmFjdGVyIHZhbGlkYXRpb24gKi8KKworICBib29sCSgqbmV4dCkoRklFTEQgKixjb25zdCB2b2lkICopOwkJLyogZW51bWVyYXRlIG5leHQgdmFsdWUgKi8KKyAgYm9vbAkoKnByZXYpKEZJRUxEICosY29uc3Qgdm9pZCAqKTsJCS8qIGVudW1lcmF0ZSBwcmV2IHZhbHVlICovCisKK30gRklFTERUWVBFOworCisJLyoqKioqKioqKgorCSogIEZPUk0gICoKKwkqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IGZvcm1ub2RlIHsKKyAgdW5zaWduZWQgc2hvcnQJc3RhdHVzOwkJLyogZmxhZ3MJCQkqLworICBzaG9ydAkJCXJvd3M7CQkvKiBzaXplIGluIHJvd3MJCQkqLworICBzaG9ydAkJCWNvbHM7CQkvKiBzaXplIGluIGNvbHMJCQkqLworICBpbnQJCQljdXJyb3c7CQkvKiBjdXJyZW50IHJvdyBpbiBmaWVsZCB3aW5kb3cJKi8KKyAgaW50CQkJY3VyY29sOwkJLyogY3VycmVudCBjb2wgaW4gZmllbGQgd2luZG93CSovCisgIGludAkJCXRvcHJvdzsJCS8qIGluIHNjcm9sbGFibGUgZmllbGQgd2luZG93CSovCisgIGludAkJCWJlZ2luY29sOwkvKiBpbiBob3Jpei4gc2Nyb2xsYWJsZSBmaWVsZAkqLworICBzaG9ydAkJCW1heGZpZWxkOwkvKiBudW1iZXIgb2YgZmllbGRzCQkqLworICBzaG9ydAkJCW1heHBhZ2U7CS8qIG51bWJlciBvZiBwYWdlcwkJKi8KKyAgc2hvcnQJCQljdXJwYWdlOwkvKiBpbmRleCBpbnRvIHBhZ2UJCSovCisgIEZvcm1fT3B0aW9ucwkJb3B0czsJCS8qIG9wdGlvbnMJCQkqLworICBXSU5ET1cgKgkJd2luOwkJLyogd2luZG93CQkJKi8KKyAgV0lORE9XICoJCXN1YjsJCS8qIHN1YndpbmRvdwkJCSovCisgIFdJTkRPVyAqCQl3OwkJLyogd2luZG93IGZvciBjdXJyZW50IGZpZWxkCSovCisgIEZJRUxEICoqCQlmaWVsZDsJCS8qIGZpZWxkIFttYXhmaWVsZF0JCSovCisgIEZJRUxEICoJCWN1cnJlbnQ7CS8qIGN1cnJlbnQgZmllbGQJCSovCisgIF9QQUdFICoJCXBhZ2U7CQkvKiBwYWdlIFttYXhwYWdlXQkJKi8KKyAgdm9pZCAqCQl1c3JwdHI7CQkvKiB1c2VyIHBvaW50ZXIJCQkqLworCisgIHZvaWQJCQkoKmZvcm1pbml0KShzdHJ1Y3QgZm9ybW5vZGUgKik7CisgIHZvaWQJCQkoKmZvcm10ZXJtKShzdHJ1Y3QgZm9ybW5vZGUgKik7CisgIHZvaWQJCQkoKmZpZWxkaW5pdCkoc3RydWN0IGZvcm1ub2RlICopOworICB2b2lkCQkJKCpmaWVsZHRlcm0pKHN0cnVjdCBmb3Jtbm9kZSAqKTsKKworfSBGT1JNOworCit0eXBlZGVmIHZvaWQgKCpGb3JtX0hvb2spKEZPUk0gKik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJKiAgbWlzY2VsbGFuZW91cyAjZGVmaW5lcyAgKgorCSoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogZmllbGQganVzdGlmaWNhdGlvbiAqLworI2RlZmluZSBOT19KVVNUSUZJQ0FUSU9OCSgwKQorI2RlZmluZSBKVVNUSUZZX0xFRlQJCSgxKQorI2RlZmluZSBKVVNUSUZZX0NFTlRFUgkJKDIpCisjZGVmaW5lIEpVU1RJRllfUklHSFQJCSgzKQorCisvKiBmaWVsZCBvcHRpb25zICovCisjZGVmaW5lIE9fVklTSUJMRQkJKDB4MDAwMVUpCisjZGVmaW5lIE9fQUNUSVZFCQkoMHgwMDAyVSkKKyNkZWZpbmUgT19QVUJMSUMJCSgweDAwMDRVKQorI2RlZmluZSBPX0VESVQJCQkoMHgwMDA4VSkKKyNkZWZpbmUgT19XUkFQCQkJKDB4MDAxMFUpCisjZGVmaW5lIE9fQkxBTksJCQkoMHgwMDIwVSkKKyNkZWZpbmUgT19BVVRPU0tJUAkJKDB4MDA0MFUpCisjZGVmaW5lIE9fTlVMTE9LCQkoMHgwMDgwVSkKKyNkZWZpbmUgT19QQVNTT0sJCSgweDAxMDBVKQorI2RlZmluZSBPX1NUQVRJQwkJKDB4MDIwMFUpCisKKy8qIGZvcm0gb3B0aW9ucyAqLworI2RlZmluZSBPX05MX09WRVJMT0FECQkoMHgwMDAxVSkKKyNkZWZpbmUgT19CU19PVkVSTE9BRAkJKDB4MDAwMlUpCisKKy8qIGZvcm0gZHJpdmVyIGNvbW1hbmRzICovCisjZGVmaW5lIFJFUV9ORVhUX1BBR0UJIChLRVlfTUFYICsgMSkJLyogbW92ZSB0byBuZXh0IHBhZ2UJCSovCisjZGVmaW5lIFJFUV9QUkVWX1BBR0UJIChLRVlfTUFYICsgMikJLyogbW92ZSB0byBwcmV2aW91cyBwYWdlCSovCisjZGVmaW5lIFJFUV9GSVJTVF9QQUdFCSAoS0VZX01BWCArIDMpCS8qIG1vdmUgdG8gZmlyc3QgcGFnZQkJKi8KKyNkZWZpbmUgUkVRX0xBU1RfUEFHRQkgKEtFWV9NQVggKyA0KQkvKiBtb3ZlIHRvIGxhc3QgcGFnZQkJKi8KKworI2RlZmluZSBSRVFfTkVYVF9GSUVMRAkgKEtFWV9NQVggKyA1KQkvKiBtb3ZlIHRvIG5leHQgZmllbGQJCSovCisjZGVmaW5lIFJFUV9QUkVWX0ZJRUxECSAoS0VZX01BWCArIDYpCS8qIG1vdmUgdG8gcHJldmlvdXMgZmllbGQJKi8KKyNkZWZpbmUgUkVRX0ZJUlNUX0ZJRUxECSAoS0VZX01BWCArIDcpCS8qIG1vdmUgdG8gZmlyc3QgZmllbGQJCSovCisjZGVmaW5lIFJFUV9MQVNUX0ZJRUxECSAoS0VZX01BWCArIDgpCS8qIG1vdmUgdG8gbGFzdCBmaWVsZAkJKi8KKyNkZWZpbmUgUkVRX1NORVhUX0ZJRUxECSAoS0VZX01BWCArIDkpCS8qIG1vdmUgdG8gc29ydGVkIG5leHQgZmllbGQJKi8KKyNkZWZpbmUgUkVRX1NQUkVWX0ZJRUxECSAoS0VZX01BWCArIDEwKQkvKiBtb3ZlIHRvIHNvcnRlZCBwcmV2IGZpZWxkCSovCisjZGVmaW5lIFJFUV9TRklSU1RfRklFTEQgKEtFWV9NQVggKyAxMSkJLyogbW92ZSB0byBzb3J0ZWQgZmlyc3QgZmllbGQJKi8KKyNkZWZpbmUgUkVRX1NMQVNUX0ZJRUxECSAoS0VZX01BWCArIDEyKQkvKiBtb3ZlIHRvIHNvcnRlZCBsYXN0IGZpZWxkCSovCisjZGVmaW5lIFJFUV9MRUZUX0ZJRUxECSAoS0VZX01BWCArIDEzKQkvKiBtb3ZlIHRvIGxlZnQgdG8gZmllbGQJKi8KKyNkZWZpbmUgUkVRX1JJR0hUX0ZJRUxECSAoS0VZX01BWCArIDE0KQkvKiBtb3ZlIHRvIHJpZ2h0IHRvIGZpZWxkCSovCisjZGVmaW5lIFJFUV9VUF9GSUVMRAkgKEtFWV9NQVggKyAxNSkJLyogbW92ZSB0byB1cCB0byBmaWVsZAkJKi8KKyNkZWZpbmUgUkVRX0RPV05fRklFTEQJIChLRVlfTUFYICsgMTYpCS8qIG1vdmUgdG8gZG93biB0byBmaWVsZAkqLworCisjZGVmaW5lIFJFUV9ORVhUX0NIQVIJIChLRVlfTUFYICsgMTcpCS8qIG1vdmUgdG8gbmV4dCBjaGFyIGluIGZpZWxkCSovCisjZGVmaW5lIFJFUV9QUkVWX0NIQVIJIChLRVlfTUFYICsgMTgpCS8qIG1vdmUgdG8gcHJldiBjaGFyIGluIGZpZWxkCSovCisjZGVmaW5lIFJFUV9ORVhUX0xJTkUJIChLRVlfTUFYICsgMTkpCS8qIG1vdmUgdG8gbmV4dCBsaW5lIGluIGZpZWxkCSovCisjZGVmaW5lIFJFUV9QUkVWX0xJTkUJIChLRVlfTUFYICsgMjApCS8qIG1vdmUgdG8gcHJldiBsaW5lIGluIGZpZWxkCSovCisjZGVmaW5lIFJFUV9ORVhUX1dPUkQJIChLRVlfTUFYICsgMjEpCS8qIG1vdmUgdG8gbmV4dCB3b3JkIGluIGZpZWxkCSovCisjZGVmaW5lIFJFUV9QUkVWX1dPUkQJIChLRVlfTUFYICsgMjIpCS8qIG1vdmUgdG8gcHJldiB3b3JkIGluIGZpZWxkCSovCisjZGVmaW5lIFJFUV9CRUdfRklFTEQJIChLRVlfTUFYICsgMjMpCS8qIG1vdmUgdG8gZmlyc3QgY2hhciBpbiBmaWVsZAkqLworI2RlZmluZSBSRVFfRU5EX0ZJRUxECSAoS0VZX01BWCArIDI0KQkvKiBtb3ZlIGFmdGVyIGxhc3QgY2hhciBpbiBmbGQJKi8KKyNkZWZpbmUgUkVRX0JFR19MSU5FCSAoS0VZX01BWCArIDI1KQkvKiBtb3ZlIHRvIGJlZ2lubmluZyBvZiBsaW5lCSovCisjZGVmaW5lIFJFUV9FTkRfTElORQkgKEtFWV9NQVggKyAyNikJLyogbW92ZSBhZnRlciBsYXN0IGNoYXIgaW4gbGluZQkqLworI2RlZmluZSBSRVFfTEVGVF9DSEFSCSAoS0VZX01BWCArIDI3KQkvKiBtb3ZlIGxlZnQgaW4gZmllbGQJCSovCisjZGVmaW5lIFJFUV9SSUdIVF9DSEFSCSAoS0VZX01BWCArIDI4KQkvKiBtb3ZlIHJpZ2h0IGluIGZpZWxkCQkqLworI2RlZmluZSBSRVFfVVBfQ0hBUgkgKEtFWV9NQVggKyAyOSkJLyogbW92ZSB1cCBpbiBmaWVsZAkJKi8KKyNkZWZpbmUgUkVRX0RPV05fQ0hBUgkgKEtFWV9NQVggKyAzMCkJLyogbW92ZSBkb3duIGluIGZpZWxkCQkqLworCisjZGVmaW5lIFJFUV9ORVdfTElORQkgKEtFWV9NQVggKyAzMSkJLyogaW5zZXJ0L292ZXJsYXkgbmV3IGxpbmUJKi8KKyNkZWZpbmUgUkVRX0lOU19DSEFSCSAoS0VZX01BWCArIDMyKQkvKiBpbnNlcnQgYmxhbmsgY2hhciBhdCBjdXJzb3IJKi8KKyNkZWZpbmUgUkVRX0lOU19MSU5FCSAoS0VZX01BWCArIDMzKQkvKiBpbnNlcnQgYmxhbmsgbGluZSBhdCBjdXJzb3IJKi8KKyNkZWZpbmUgUkVRX0RFTF9DSEFSCSAoS0VZX01BWCArIDM0KQkvKiBkZWxldGUgY2hhciBhdCBjdXJzb3IJKi8KKyNkZWZpbmUgUkVRX0RFTF9QUkVWCSAoS0VZX01BWCArIDM1KQkvKiBkZWxldGUgY2hhciBiZWZvcmUgY3Vyc29yCSovCisjZGVmaW5lIFJFUV9ERUxfTElORQkgKEtFWV9NQVggKyAzNikJLyogZGVsZXRlIGxpbmUgYXQgY3Vyc29yCSovCisjZGVmaW5lIFJFUV9ERUxfV09SRAkgKEtFWV9NQVggKyAzNykJLyogZGVsZXRlIHdvcmQgYXQgY3Vyc29yCSovCisjZGVmaW5lIFJFUV9DTFJfRU9MCSAoS0VZX01BWCArIDM4KQkvKiBjbGVhciB0byBlbmQgb2YgbGluZQkJKi8KKyNkZWZpbmUgUkVRX0NMUl9FT0YJIChLRVlfTUFYICsgMzkpCS8qIGNsZWFyIHRvIGVuZCBvZiBmaWVsZAkqLworI2RlZmluZSBSRVFfQ0xSX0ZJRUxECSAoS0VZX01BWCArIDQwKQkvKiBjbGVhciBlbnRpcmUgZmllbGQJCSovCisjZGVmaW5lIFJFUV9PVkxfTU9ERQkgKEtFWV9NQVggKyA0MSkJLyogYmVnaW4gb3ZlcmxheSBtb2RlCQkqLworI2RlZmluZSBSRVFfSU5TX01PREUJIChLRVlfTUFYICsgNDIpCS8qIGJlZ2luIGluc2VydCBtb2RlCQkqLworI2RlZmluZSBSRVFfU0NSX0ZMSU5FCSAoS0VZX01BWCArIDQzKQkvKiBzY3JvbGwgZmllbGQgZm9yd2FyZCBhIGxpbmUJKi8KKyNkZWZpbmUgUkVRX1NDUl9CTElORQkgKEtFWV9NQVggKyA0NCkJLyogc2Nyb2xsIGZpZWxkIGJhY2t3YXJkIGEgbGluZQkqLworI2RlZmluZSBSRVFfU0NSX0ZQQUdFCSAoS0VZX01BWCArIDQ1KQkvKiBzY3JvbGwgZmllbGQgZm9yd2FyZCBhIHBhZ2UJKi8KKyNkZWZpbmUgUkVRX1NDUl9CUEFHRQkgKEtFWV9NQVggKyA0NikJLyogc2Nyb2xsIGZpZWxkIGJhY2t3YXJkIGEgcGFnZQkqLworI2RlZmluZSBSRVFfU0NSX0ZIUEFHRQkgKEtFWV9NQVggKyA0NykgLyogc2Nyb2xsIGZpZWxkIGZvcndhcmQJIGhhbGYgcGFnZSAqLworI2RlZmluZSBSRVFfU0NSX0JIUEFHRQkgKEtFWV9NQVggKyA0OCkgLyogc2Nyb2xsIGZpZWxkIGJhY2t3YXJkIGhhbGYgcGFnZSAqLworI2RlZmluZSBSRVFfU0NSX0ZDSEFSCSAoS0VZX01BWCArIDQ5KSAvKiBob3Jpem9udGFsIHNjcm9sbCBjaGFyCSovCisjZGVmaW5lIFJFUV9TQ1JfQkNIQVIJIChLRVlfTUFYICsgNTApIC8qIGhvcml6b250YWwgc2Nyb2xsIGNoYXIJKi8KKyNkZWZpbmUgUkVRX1NDUl9IRkxJTkUJIChLRVlfTUFYICsgNTEpIC8qIGhvcml6b250YWwgc2Nyb2xsIGxpbmUJKi8KKyNkZWZpbmUgUkVRX1NDUl9IQkxJTkUJIChLRVlfTUFYICsgNTIpIC8qIGhvcml6b250YWwgc2Nyb2xsIGxpbmUJKi8KKyNkZWZpbmUgUkVRX1NDUl9IRkhBTEYJIChLRVlfTUFYICsgNTMpIC8qIGhvcml6b250YWwgc2Nyb2xsIGhhbGYgbGluZQkqLworI2RlZmluZSBSRVFfU0NSX0hCSEFMRgkgKEtFWV9NQVggKyA1NCkgLyogaG9yaXpvbnRhbCBzY3JvbGwgaGFsZiBsaW5lCSovCisKKyNkZWZpbmUgUkVRX1ZBTElEQVRJT04JIChLRVlfTUFYICsgNTUpCS8qIHZhbGlkYXRlIGZpZWxkCQkqLworI2RlZmluZSBSRVFfTkVYVF9DSE9JQ0UJIChLRVlfTUFYICsgNTYpCS8qIGRpc3BsYXkgbmV4dCBmaWVsZCBjaG9pY2UJKi8KKyNkZWZpbmUgUkVRX1BSRVZfQ0hPSUNFCSAoS0VZX01BWCArIDU3KQkvKiBkaXNwbGF5IHByZXYgZmllbGQgY2hvaWNlCSovCisKKyNkZWZpbmUgTUlOX0ZPUk1fQ09NTUFORCAoS0VZX01BWCArIDEpCS8qIHVzZWQgYnkgZm9ybV9kcml2ZXIJCSovCisjZGVmaW5lIE1BWF9GT1JNX0NPTU1BTkQgKEtFWV9NQVggKyA1NykJLyogdXNlZCBieSBmb3JtX2RyaXZlcgkJKi8KKworI2lmIGRlZmluZWQoTUFYX0NPTU1BTkQpCisjICBpZiAoTUFYX0ZPUk1fQ09NTUFORCA+IE1BWF9DT01NQU5EKQorIyAgICBlcnJvciBTb21ldGhpbmcgaXMgd3JvbmcgLS0gTUFYX0ZPUk1fQ09NTUFORCBpcyBncmVhdGVyIHRoYW4gTUFYX0NPTU1BTkQKKyMgIGVsaWYgKE1BWF9DT01NQU5EICE9IChLRVlfTUFYICsgMTI4KSkKKyMgICAgZXJyb3IgU29tZXRoaW5nIGlzIHdyb25nIC0tIE1BWF9DT01NQU5EIGlzIGFscmVhZHkgaW5jb25zaXN0ZW50bHkgZGVmaW5lZC4KKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIE1BWF9DT01NQU5EIChLRVlfTUFYICsgMTI4KQorI2VuZGlmCisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKgorCSogIHN0YW5kYXJkIGZpZWxkIHR5cGVzICAqCisJKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFICopIFRZUEVfQUxQSEE7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEVFlQRSAqKSBUWVBFX0FMTlVNOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUgKikgVFlQRV9FTlVNOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUgKikgVFlQRV9JTlRFR0VSOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUgKikgVFlQRV9OVU1FUklDOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUgKikgVFlQRV9SRUdFWFA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJKiAgYnVpbHQtaW4gYWRkaXRpb25hbCBmaWVsZCB0eXBlcyAgKgorCSogIFRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIFNWcjQgICAgICoKKwkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEVFlQRSAqKSBUWVBFX0lQVjQ7ICAgICAgLyogSW50ZXJuZXQgSVAgVmVyc2lvbiA0IGFkZHJlc3MgKi8KKworCS8qKioqKioqKioqKioqKioqKioqKioqKgorCSogICBEZWZhdWx0IG9iamVjdHMgICAgKgorCSoqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihGT1JNICopCV9uY19EZWZhdWx0X0Zvcm07CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEICopCV9uY19EZWZhdWx0X0ZpZWxkOworCisKKwkvKioqKioqKioqKioqKioqKioqKioqKioKKwkqICBGSUVMRFRZUEUgcm91dGluZXMgICoKKwkqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRFRZUEUgKikgbmV3X2ZpZWxkdHlwZSAoCisJCSAgICBib29sICgqIGNvbnN0IGZpZWxkX2NoZWNrKShGSUVMRCAqLGNvbnN0IHZvaWQgKiksCisJCSAgICBib29sICgqIGNvbnN0IGNoYXJfY2hlY2spKGludCxjb25zdCB2b2lkICopKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRFRZUEUgKikgbGlua19maWVsZHR5cGUoCisJCSAgICBGSUVMRFRZUEUgKiwgRklFTERUWVBFICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmcmVlX2ZpZWxkdHlwZSAoRklFTERUWVBFICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2ZpZWxkdHlwZV9hcmcgKEZJRUxEVFlQRSAqLAorCQkgICAgdm9pZCAqICgqIGNvbnN0IG1ha2VfYXJnKSh2YV9saXN0ICopLAorCQkgICAgdm9pZCAqICgqIGNvbnN0IGNvcHlfYXJnKShjb25zdCB2b2lkICopLAorCQkgICAgdm9pZCAoKiBjb25zdCBmcmVlX2FyZykodm9pZCAqKSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQkgc2V0X2ZpZWxkdHlwZV9jaG9pY2UgKEZJRUxEVFlQRSAqLAorCQkgICAgYm9vbCAoKiBjb25zdCBuZXh0X2Nob2ljZSkoRklFTEQgKixjb25zdCB2b2lkICopLAorCSAgICAgIAkgICAgYm9vbCAoKiBjb25zdCBwcmV2X2Nob2ljZSkoRklFTEQgKixjb25zdCB2b2lkICopKTsKKworCS8qKioqKioqKioqKioqKioqKioqCisJKiAgRklFTEQgcm91dGluZXMgICoKKwkqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZJRUxEICopCW5ld19maWVsZCAoaW50LGludCxpbnQsaW50LGludCxpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZJRUxEICopCWR1cF9maWVsZCAoRklFTEQgKixpbnQsaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKQlsaW5rX2ZpZWxkIChGSUVMRCAqLGludCxpbnQpOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmcmVlX2ZpZWxkIChGSUVMRCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZpZWxkX2luZm8gKGNvbnN0IEZJRUxEICosaW50ICosaW50ICosaW50ICosaW50ICosaW50ICosaW50ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZHluYW1pY19maWVsZF9pbmZvIChjb25zdCBGSUVMRCAqLGludCAqLGludCAqLGludCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tYXhfZmllbGQgKCBGSUVMRCAqLGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQltb3ZlX2ZpZWxkIChGSUVMRCAqLGludCxpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2ZpZWxkX3R5cGUgKEZJRUxEICosRklFTERUWVBFICosLi4uKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9uZXdfcGFnZSAoRklFTEQgKixib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF9qdXN0IChGSUVMRCAqLGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmaWVsZF9qdXN0IChjb25zdCBGSUVMRCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF9mb3JlIChGSUVMRCAqLGNodHlwZSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfYmFjayAoRklFTEQgKixjaHR5cGUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2ZpZWxkX3BhZCAoRklFTEQgKixpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZmllbGRfcGFkIChjb25zdCBGSUVMRCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF9idWZmZXIgKEZJRUxEICosaW50LGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfc3RhdHVzIChGSUVMRCAqLGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2ZpZWxkX3VzZXJwdHIgKEZJRUxEICosIHZvaWQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZmllbGRfb3B0cyAoRklFTEQgKixGaWVsZF9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZpZWxkX29wdHNfb24gKEZJRUxEICosRmllbGRfT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmaWVsZF9vcHRzX29mZiAoRklFTEQgKixGaWVsZF9PcHRpb25zKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkJZmllbGRfZm9yZSAoY29uc3QgRklFTEQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2h0eXBlKQlmaWVsZF9iYWNrIChjb25zdCBGSUVMRCAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpCW5ld19wYWdlIChjb25zdCBGSUVMRCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKQlmaWVsZF9zdGF0dXMgKGNvbnN0IEZJRUxEICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCAqKQlmaWVsZF9hcmcgKGNvbnN0IEZJRUxEICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCAqKQlmaWVsZF91c2VycHRyIChjb25zdCBGSUVMRCAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZJRUxEVFlQRSAqKQlmaWVsZF90eXBlIChjb25zdCBGSUVMRCAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikJZmllbGRfYnVmZmVyIChjb25zdCBGSUVMRCAqLGludCk7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGaWVsZF9PcHRpb25zKQlmaWVsZF9vcHRzIChjb25zdCBGSUVMRCAqKTsKKworCS8qKioqKioqKioqKioqKioqKioKKwkqICBGT1JNIHJvdXRpbmVzICAqCisJKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRk9STSAqKQluZXdfZm9ybSAoRklFTEQgKiopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRklFTEQgKiopCWZvcm1fZmllbGRzIChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZJRUxEICopCWN1cnJlbnRfZmllbGQgKGNvbnN0IEZPUk0gKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikJZm9ybV93aW4gKGNvbnN0IEZPUk0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopCWZvcm1fc3ViIChjb25zdCBGT1JNICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRm9ybV9Ib29rKQlmb3JtX2luaXQgKGNvbnN0IEZPUk0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRm9ybV9Ib29rKQlmb3JtX3Rlcm0gKGNvbnN0IEZPUk0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRm9ybV9Ib29rKQlmaWVsZF9pbml0IChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZvcm1fSG9vaykJZmllbGRfdGVybSAoY29uc3QgRk9STSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZnJlZV9mb3JtIChGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1fZmllbGRzIChGT1JNICosRklFTEQgKiopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZmllbGRfY291bnQgKGNvbnN0IEZPUk0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZm9ybV93aW4gKEZPUk0gKixXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZm9ybV9zdWIgKEZPUk0gKixXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfY3VycmVudF9maWVsZCAoRk9STSAqLEZJRUxEICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZmllbGRfaW5kZXggKGNvbnN0IEZJRUxEICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1fcGFnZSAoRk9STSAqLGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmb3JtX3BhZ2UgKGNvbnN0IEZPUk0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzY2FsZV9mb3JtIChjb25zdCBGT1JNICosaW50ICosaW50ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1faW5pdCAoRk9STSAqLEZvcm1fSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZm9ybV90ZXJtIChGT1JNICosRm9ybV9Ib29rKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF9pbml0IChGT1JNICosRm9ybV9Ib29rKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9maWVsZF90ZXJtIChGT1JNICosRm9ybV9Ib29rKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXBvc3RfZm9ybSAoRk9STSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXVucG9zdF9mb3JtIChGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJcG9zX2Zvcm1fY3Vyc29yIChGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJZm9ybV9kcml2ZXIgKEZPUk0gKixpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X2Zvcm1fdXNlcnB0ciAoRk9STSAqLHZvaWQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfZm9ybV9vcHRzIChGT1JNICosRm9ybV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZvcm1fb3B0c19vbiAoRk9STSAqLEZvcm1fT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmb3JtX29wdHNfb2ZmIChGT1JNICosRm9ybV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWZvcm1fcmVxdWVzdF9ieV9uYW1lIChjb25zdCBjaGFyICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQlmb3JtX3JlcXVlc3RfbmFtZSAoaW50KTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQgKikJZm9ybV91c2VycHRyIChjb25zdCBGT1JNICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoRm9ybV9PcHRpb25zKQlmb3JtX29wdHMgKGNvbnN0IEZPUk0gKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKQlkYXRhX2FoZWFkIChjb25zdCBGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpCWRhdGFfYmVoaW5kIChjb25zdCBGT1JNICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgfQorI2VuZGlmCisKKyNlbmRpZgkvKiBGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZm9ybS5wcml2LmggYi9uY3Vyc2VzLTUuNy9mb3JtL2Zvcm0ucHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTYyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2Zvcm0ucHJpdi5oCkBAIC0wLDAgKzEsMjUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IGZvcm0ucHJpdi5oLHYgMC4yNyAyMDA4LzA5LzA4IDIwOjI5OjA1IHRvbSBFeHAgJCAqLworCisjaWZuZGVmIEZPUk1fUFJJVl9ICisjZGVmaW5lIEZPUk1fUFJJVl9IIDEKKworI2luY2x1ZGUgImN1cnNlcy5wcml2LmgiCisjaW5jbHVkZSAibWZfY29tbW9uLmgiCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2lmIEhBVkVfV0NUWVBFX0gKKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKyNlbmRpZgorCisjaWZuZGVmIE1CX0xFTl9NQVgKKyNkZWZpbmUgTUJfTEVOX01BWCA4IC8qIHNob3VsZCBiZSA+PSBNQl9DVVJfTUFYLCBidXQgdGhhdCBtYXkgYmUgYSBmdW5jdGlvbiAqLworI2VuZGlmCisKKyNkZWZpbmUgRklFTERfQ0VMTCBOQ1VSU0VTX0NIX1QKKworI2RlZmluZSBOQ1VSU0VTX0ZJRUxEX0lOVEVSTkFMUyBjaGFyKiogZXhwYW5kZWQ7IFdJTkRPVyAqd29ya2luZzsKKyNkZWZpbmUgTkNVUlNFU19GSUVMRF9FWFRFTlNJT04gLCAoY2hhciAqKikwLCAoV0lORE9XICopMAorCisjZWxzZQorCisjZGVmaW5lIEZJRUxEX0NFTEwgY2hhcgorCisjZGVmaW5lIE5DVVJTRVNfRklFTERfRVhURU5TSU9OIC8qIG5vdGhpbmcgKi8KKworI2VuZGlmCisKKyNpbmNsdWRlICJmb3JtLmgiCisKKy8qIGZvcm0gIHN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgX09WTE1PREUgICAgICAgICAoMHgwNFUpIC8qIEZvcm0gaXMgaW4gb3ZlcmxheSBtb2RlICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9XSU5ET1dfTU9ESUZJRUQgKDB4MTBVKSAvKiBDdXJyZW50IGZpZWxkIHdpbmRvdyBoYXMgYmVlbiBtb2RpZmllZCAqLworI2RlZmluZSBfRkNIRUNLX1JFUVVJUkVEICgweDIwVSkgLyogQ3VycmVudCBmaWVsZCBuZWVkcyB2YWxpZGF0aW9uICAgICAgICAgKi8KKworLyogZmllbGQgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBfQ0hBTkdFRCAgICAgICAgICgweDAxVSkgLyogRmllbGQgaGFzIGJlZW4gY2hhbmdlZCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX05FV1RPUCAgICAgICAgICAoMHgwMlUpIC8qIFZlcnRpY2FsIHNjcm9sbGluZyBvY2N1cnJlZCAgICAgICAgICAgICovCisjZGVmaW5lIF9ORVdQQUdFICAgICAgICAgKDB4MDRVKSAvKiBmaWVsZCBiZWdpbnMgbmV3IHBhZ2Ugb2YgZm9ybSAgICAgICAgICAqLworI2RlZmluZSBfTUFZX0dST1cgICAgICAgICgweDA4VSkgLyogZHluYW1pYyBmaWVsZCBtYXkgc3RpbGwgZ3JvdyAgICAgICAgICAgKi8KKworLyogZmllbGR0eXBlIHN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgX0xJTktFRF9UWVBFICAgICAoMHgwMVUpIC8qIFR5cGUgaXMgYSBsaW5rZWQgdHlwZSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9IQVNfQVJHUyAgICAgICAgKDB4MDJVKSAvKiBUeXBlIGhhcyBhcmd1bWVudHMgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfSEFTX0NIT0lDRSAgICAgICgweDA0VSkgLyogVHlwZSBoYXMgY2hvaWNlIG1ldGhvZHMgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1JFU0lERU5UICAgICAgICAoMHgwOFUpIC8qIFR5cGUgaXMgYnVpbHQtaW4gICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFRoaXMgYXJlIHRoZSBmaWVsZCBvcHRpb25zIHJlcXVpcmVkIHRvIGJlIGEgc2VsZWN0YWJsZSBmaWVsZCBpbiBmaWVsZAorICAgbmF2aWdhdGlvbiByZXF1ZXN0cyAqLworI2RlZmluZSBPX1NFTEVDVEFCTEUgKE9fQUNUSVZFIHwgT19WSVNJQkxFKQorCisvKiBJZiBmb3JtIGlzIE5VTEwgcmVwbGFjZSBmb3JtIGFyZ3VtZW50IGJ5IGRlZmF1bHQtZm9ybSAqLworI2RlZmluZSBOb3JtYWxpemVfRm9ybShmb3JtKSBcCisgICgoZm9ybSkgPSAoZm9ybSAhPSAwKSA/IChmb3JtKSA6IF9uY19EZWZhdWx0X0Zvcm0pCisKKy8qIElmIGZpZWxkIGlzIE5VTEwgcmVwbGFjZSBmaWVsZCBhcmd1bWVudCBieSBkZWZhdWx0LWZpZWxkICovCisjZGVmaW5lIE5vcm1hbGl6ZV9GaWVsZChmaWVsZCkgXAorICAoKGZpZWxkKSA9IChmaWVsZCAhPSAwKSA/IChmaWVsZCkgOiBfbmNfRGVmYXVsdF9GaWVsZCkKKworLyogUmV0cmlldmUgZm9ybXMgd2luZG93ICovCisjZGVmaW5lIEdldF9Gb3JtX1dpbmRvdyhmb3JtKSBcCisgICgoZm9ybSktPnN1Yj8oZm9ybSktPnN1YjooKGZvcm0pLT53aW4/KGZvcm0pLT53aW46c3Rkc2NyKSkKKworLyogQ2FsY3VsYXRlIHRoZSBzaXplIGZvciBhIHNpbmdsZSBidWZmZXIgZm9yIHRoaXMgZmllbGQgKi8KKyNkZWZpbmUgQnVmZmVyX0xlbmd0aChmaWVsZCkgKChmaWVsZCktPmRyb3dzICogKGZpZWxkKS0+ZGNvbHMpCisKKy8qIENhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgYnVmZmVycyBmb3IgdGhpcyBmaWVsZCAqLworI2RlZmluZSBUb3RhbF9CdWZmZXJfU2l6ZShmaWVsZCkgXAorICAgKCAoQnVmZmVyX0xlbmd0aChmaWVsZCkgKyAxKSAqICgxKyhmaWVsZCktPm5idWYpICogc2l6ZW9mKEZJRUxEX0NFTEwpICkKKworLyogTG9naWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgZmllbGQgaXMgc2luZ2xlIGxpbmVkICovCisjZGVmaW5lIFNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKSBcCisgICAoKChmaWVsZCktPnJvd3MgKyAoZmllbGQpLT5ucm93KSA9PSAxKQorCisvKiBMb2dpYyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSBmaWVsZCBpcyBzZWxlY3RhYmxlICovCisjZGVmaW5lIEZpZWxkX0lzX1NlbGVjdGFibGUoZikgICAgICgoKHVuc2lnbmVkKSgoZiktPm9wdHMpICYgT19TRUxFQ1RBQkxFKT09T19TRUxFQ1RBQkxFKQorI2RlZmluZSBGaWVsZF9Jc19Ob3RfU2VsZWN0YWJsZShmKSAoKCh1bnNpZ25lZCkoKGYpLT5vcHRzKSAmIE9fU0VMRUNUQUJMRSkhPU9fU0VMRUNUQUJMRSkKKwordHlwZWRlZiBzdHJ1Y3QgdHlwZWFyZworICB7CisgICAgc3RydWN0IHR5cGVhcmcgKmxlZnQ7CisgICAgc3RydWN0IHR5cGVhcmcgKnJpZ2h0OworICB9CitUeXBlQXJndW1lbnQ7CisKKy8qIFRoaXMgaXMgYSBkdW1teSByZXF1ZXN0IGNvZGUgKG5vcm1hbGx5IGludmFsaWQpIHRvIGJlIHVzZWQgaW50ZXJuYWxseQorICAgd2l0aCB0aGUgZm9ybV9kcml2ZXIoKSByb3V0aW5lIHRvIHBvc2l0aW9uIHRvIHRoZSBmaXJzdCBhY3RpdmUgZmllbGQKKyAgIG9uIHRoZSBmb3JtCisqLworI2RlZmluZSBGSVJTVF9BQ1RJVkVfTUFHSUMgKC0yOTEwNTYpCisKKyNkZWZpbmUgQUxMX0ZPUk1fT1BUUyAgKCAgICAgICAgICAgICAgICBcCisJCQlPX05MX09WRVJMT0FEICB8XAorCQkJT19CU19PVkVSTE9BRCAgICkKKworI2RlZmluZSBBTExfRklFTERfT1BUUyAoRmllbGRfT3B0aW9ucykoIFwKKwkJCU9fVklTSUJMRSB8XAorCQkJT19BQ1RJVkUgIHxcCisJCQlPX1BVQkxJQyAgfFwKKwkJCU9fRURJVCAgICB8XAorCQkJT19XUkFQICAgIHxcCisJCQlPX0JMQU5LICAgfFwKKwkJCU9fQVVUT1NLSVB8XAorCQkJT19OVUxMT0sgIHxcCisJCQlPX1BBU1NPSyAgfFwKKwkJCU9fU1RBVElDICAgKQorCisjZGVmaW5lIENfQkxBTksgJyAnCisjZGVmaW5lIGlzX2JsYW5rKGMpICgoYyk9PUNfQkxBTkspCisKKyNkZWZpbmUgQ19aRVJPUyAnXDAnCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoY29uc3QgRklFTERUWVBFICopIF9uY19EZWZhdWx0X0ZpZWxkVHlwZTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFR5cGVBcmd1bWVudCAqKSBfbmNfTWFrZV9Bcmd1bWVudCAoY29uc3QgRklFTERUWVBFKiwgdmFfbGlzdCosIGludCopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFR5cGVBcmd1bWVudCAqKSBfbmNfQ29weV9Bcmd1bWVudCAoY29uc3QgRklFTERUWVBFKiwgY29uc3QgVHlwZUFyZ3VtZW50KiwgaW50Kik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX0ZyZWVfQXJndW1lbnQgKGNvbnN0IEZJRUxEVFlQRSosIFR5cGVBcmd1bWVudCopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19Db3B5X1R5cGUgKEZJRUxEKiwgRklFTEQgY29uc3QgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX0ZyZWVfVHlwZSAoRklFTEQgKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzIChGSUVMRCopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX1N5bmNocm9uaXplX09wdGlvbnMgKEZJRUxEKiwgRmllbGRfT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfU2V0X0Zvcm1fUGFnZSAoRk9STSosIGludCwgRklFTEQqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQgKEZPUk0qKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRCAqKSBfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkIChGT1JNKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX0ludGVybmFsX1ZhbGlkYXRpb24gKEZPUk0qKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19TZXRfQ3VycmVudF9GaWVsZCAoRk9STSosIEZJRUxEKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IgKEZPUk0qKTsKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitleHRlcm4gTkNVUlNFU19FWFBPUlQod2NoYXJfdCAqKSBfbmNfV2lkZW5fU3RyaW5nKGNoYXIgKiwgaW50ICopOworI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorCisjZGVmaW5lIHJldHVybkZpZWxkKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGZpZWxkKQorI2RlZmluZSByZXR1cm5GaWVsZFB0cihjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxmaWVsZF9wdHIpCisjZGVmaW5lIHJldHVybkZvcm0oY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsZm9ybSkKKyNkZWZpbmUgcmV0dXJuRmllbGRUeXBlKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGZpZWxkX3R5cGUpCisjZGVmaW5lIHJldHVybkZvcm1Ib29rKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGZvcm1faG9vaykKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZJRUxEICoqKQkgICAgX25jX3JldHJhY2VfZmllbGRfcHRyIChGSUVMRCAqKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoRklFTEQgKikJICAgIF9uY19yZXRyYWNlX2ZpZWxkIChGSUVMRCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGSUVMRFRZUEUgKikgIF9uY19yZXRyYWNlX2ZpZWxkX3R5cGUgKEZJRUxEVFlQRSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChGT1JNICopICBfbmNfcmV0cmFjZV9mb3JtIChGT1JNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKEZvcm1fSG9vaykgIF9uY19yZXRyYWNlX2Zvcm1faG9vayAoRm9ybV9Ib29rKTsKKworI2Vsc2UgLyogIVRSQUNFICovCisKKyNkZWZpbmUgcmV0dXJuRmllbGRQdHIoY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuRmllbGRUeXBlKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkZpZWxkKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkZvcm0oY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuRm9ybUhvb2soY29kZSkJcmV0dXJuIGNvZGUKKworI2VuZGlmIC8qIFRSQUNFLyFUUkFDRSAqLworCisvKgorICogVXNlIENoZWNrX0NUWVBFX0ZpZWxkKCkgdG8gc2ltcGxpZnkgRklFTERUWVBFJ3MgdGhhdCB1c2Ugb25seSB0aGUgY2NoZWNrKCkKKyAqIGZ1bmN0aW9uLgorICovCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNkZWZpbmUgQ2hlY2tfQ1RZUEVfRmllbGQocmVzdWx0LCBidWZmZXIsIHdpZHRoLCBjY2hlY2spIFwKKyAgd2hpbGUgKCpidWZmZXIgJiYgKmJ1ZmZlciA9PSAnICcpIFwKKyAgICBidWZmZXIrKzsgXAorICBpZiAoKmJ1ZmZlcikgXAorICAgIHsgXAorICAgICAgYm9vbCBibGFuayA9IEZBTFNFOyBcCisgICAgICBpbnQgbGVuOyBcCisgICAgICBpbnQgbjsgXAorICAgICAgd2NoYXJfdCAqbGlzdCA9IF9uY19XaWRlbl9TdHJpbmcoKGNoYXIgKilidWZmZXIsICZsZW4pOyBcCisgICAgICBpZiAobGlzdCAhPSAwKSBcCisJeyBcCisJICByZXN1bHQgPSBUUlVFOyBcCisJICBmb3IgKG4gPSAwOyBuIDwgbGVuOyArK24pIFwKKwkgICAgeyBcCisJICAgICAgaWYgKGJsYW5rKSBcCisJCXsgXAorCQkgIGlmIChsaXN0W25dICE9ICcgJykgXAorCQkgICAgeyBcCisJCSAgICAgIHJlc3VsdCA9IEZBTFNFOyBcCisJCSAgICAgIGJyZWFrOyBcCisJCSAgICB9IFwKKwkJfSBcCisJICAgICAgZWxzZSBpZiAobGlzdFtuXSA9PSAnICcpIFwKKwkJeyBcCisJCSAgYmxhbmsgPSBUUlVFOyBcCisJCSAgcmVzdWx0ID0gKG4gKyAxID49IHdpZHRoKTsgXAorCQl9IFwKKwkgICAgICBlbHNlIGlmICghY2NoZWNrKGxpc3Rbbl0sIE5VTEwpKSBcCisJCXsgXAorCQkgIHJlc3VsdCA9IEZBTFNFOyBcCisJCSAgYnJlYWs7IFwKKwkJfSBcCisJICAgIH0gXAorCSAgZnJlZShsaXN0KTsgXAorCX0gXAorICAgIH0KKyNlbHNlCisjZGVmaW5lIENoZWNrX0NUWVBFX0ZpZWxkKHJlc3VsdCwgYnVmZmVyLCB3aWR0aCwgY2NoZWNrKSBcCisgIHdoaWxlICgqYnVmZmVyICYmICpidWZmZXIgPT0gJyAnKSBcCisgICAgYnVmZmVyKys7IFwKKyAgaWYgKCpidWZmZXIpIFwKKyAgICB7IFwKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnMgPSBidWZmZXI7IFwKKyAgICAgIGludCBsID0gLTE7IFwKKyAgICAgIHdoaWxlICgqYnVmZmVyICYmIGNjaGVjaygqYnVmZmVyLCBOVUxMKSkgXAorCWJ1ZmZlcisrOyBcCisgICAgICBsID0gKGludCkoYnVmZmVyIC0gcyk7IFwKKyAgICAgIHdoaWxlICgqYnVmZmVyICYmICpidWZmZXIgPT0gJyAnKSBcCisJYnVmZmVyKys7IFwKKyAgICAgIHJlc3VsdCA9ICgoKmJ1ZmZlciB8fCAobCA8IHdpZHRoKSkgPyBGQUxTRSA6IFRSVUUpOyBcCisgICAgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBGT1JNX1BSSVZfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fY3Vyc29yLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZybV9jdXJzb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGRhYmFiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fY3Vyc29yLmMKQEAgLTAsMCArMSw3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX2N1cnNvci5jLHYgMS45IDIwMDQvMTIvMTEgMjI6MDE6MDMgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBwb3NfZm9ybV9jdXJzb3IoRk9STSAqIGZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlcyB0aGUgZm9ybSB3aW5kb3cgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbiByZXF1aXJlZAorfCAgICAgICAgICAgICAgICAgICAgYnkgdGhlIGZvcm0gZHJpdmVyIHRvIHJlc3VtZSBmb3JtIHByb2Nlc3NpbmcuIFRoaXMgbWF5Cit8ICAgICAgICAgICAgICAgICAgICBiZSBuZWVkZWQgYWZ0ZXIgdGhlIGFwcGxpY2F0aW9uIGNhbGxzIGEgY3Vyc2VzIGxpYnJhcnkKK3wgICAgICAgICAgICAgICAgICAgIEkvTyByb3V0aW5lIHRoYXQgbW9kaWZpZXMgdGhlIGN1cnNvciBwb3NpdGlvbi4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAgICAgICAgIC0gU3lzdGVtIGVycm9yLgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgICAgICAgICAtIEludmFsaWQgZm9ybSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9QT1NURUQgICAgICAgICAgICAgIC0gRm9ybSBpcyBub3QgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorcG9zX2Zvcm1fY3Vyc29yKEZPUk0gKmZvcm0pCit7CisgIGludCByZXM7CisKKyAgVCgoVF9DQUxMRUQoInBvc19mb3JtX2N1cnNvciglcCkiKSwgZm9ybSkpOworCisgIGlmICghZm9ybSkKKyAgICByZXMgPSBFX0JBRF9BUkdVTUVOVDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGlmICghKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpKQorCXJlcyA9IEVfTk9UX1BPU1RFRDsKKyAgICAgIGVsc2UKKwlyZXMgPSBfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IoZm9ybSk7CisgICAgfQorICBSRVRVUk4ocmVzKTsKK30KKworLyogZnJtX2N1cnNvci5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fZGF0YS5jIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4N2ExNzkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZybV9kYXRhLmMKQEAgLTAsMCArMSwxOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9kYXRhLmMsdiAxLjE0IDIwMDUvMTEvMjYgMTU6MzQ6MDEgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGJvb2wgZGF0YV9iZWhpbmQoY29uc3QgRk9STSAqZm9ybSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIGZvciBvZmYtc2NyZWVuIGRhdGEgYmVoaW5kLiBUaGlzIGlzIG5lYXJseSB0cml2aWFsCit8ICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCBpcyBmaXhlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAtIHRoZXJlIGFyZSBvZmYtc2NyZWVuIGRhdGEgYmVoaW5kCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgLSB0aGVyZSBhcmUgbm8gb2ZmLXNjcmVlbiBkYXRhIGJlaGluZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitkYXRhX2JlaGluZChjb25zdCBGT1JNICpmb3JtKQoreworICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgIFQoKFRfQ0FMTEVEKCJkYXRhX2JlaGluZCglcCkiKSwgZm9ybSkpOworCisgIGlmIChmb3JtICYmIChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSAmJiBmb3JtLT5jdXJyZW50KQorICAgIHsKKyAgICAgIEZJRUxEICpmaWVsZDsKKworICAgICAgZmllbGQgPSBmb3JtLT5jdXJyZW50OworICAgICAgaWYgKCFTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkpCisJeworCSAgcmVzdWx0ID0gKGZvcm0tPnRvcHJvdyA9PSAwKSA/IEZBTFNFIDogVFJVRTsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVzdWx0ID0gKGZvcm0tPmJlZ2luY29sID09IDApID8gRkFMU0UgOiBUUlVFOworCX0KKyAgICB9CisgIHJldHVybkJvb2wocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBjaGFyICogT25seV9QYWRkaW5nKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkRPVyAqdywKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWQpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBUZXN0IGlmICdsZW5ndGgnIGNlbGxzIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uCit8ICAgICAgICAgICAgICAgICAgICBjb250YWluIGEgcGFkZGluZyBjaGFyYWN0ZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICB0cnVlIGlmIG9ubHkgcGFkZGluZyBjZWxscyBhcmUgZm91bmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgYm9vbAorT25seV9QYWRkaW5nKFdJTkRPVyAqdywgaW50IGxlbiwgaW50IHBhZCkKK3sKKyAgYm9vbCByZXN1bHQgPSBUUlVFOworICBpbnQgeSwgeCwgajsKKyAgRklFTERfQ0VMTCBjZWxsOworCisgIGdldHl4KHcsIHksIHgpOworICBmb3IgKGogPSAwOyBqIDwgbGVuOyArK2opCisgICAgeworICAgICAgaWYgKHdtb3ZlKHcsIHksIHggKyBqKSAhPSBFUlIpCisJeworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJICBpZiAod2luX3djaCh3LCAmY2VsbCkgIT0gRVJSKQorCSAgICB7CisJICAgICAgaWYgKChjaHR5cGUpQ2hhck9mKGNlbGwpICE9IENoQ2hhck9mKHBhZCkKKwkJICB8fCBjZWxsLmNoYXJzWzFdICE9IDApCisJCXsKKwkJICByZXN1bHQgPSBGQUxTRTsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisjZWxzZQorCSAgY2VsbCA9IHdpbmNoKHcpOworCSAgaWYgKENoQ2hhck9mKGNlbGwpICE9IENoQ2hhck9mKHBhZCkpCisJICAgIHsKKwkgICAgICByZXN1bHQgPSBGQUxTRTsKKwkgICAgICBicmVhazsKKwkgICAgfQorI2VuZGlmCisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIGlmIGFuIGVycm9yLCByZXR1cm4gdHJ1ZTogbm8gbm9uLXBhZGRpbmcgdGV4dCBmb3VuZCAqLworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgLyogbm8gbmVlZCB0byByZXNldCB0aGUgY3Vyc29yIHBvc2l0aW9uOyBjYWxsZXIgZG9lcyB0aGlzICovCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBib29sIGRhdGFfYWhlYWQoY29uc3QgRk9STSAqZm9ybSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIGZvciBvZmYtc2NyZWVuIGRhdGEgYWhlYWQuIFRoaXMgaXMgbW9yZSBkaWZmaWN1bHQKK3wgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgYSBkeW5hbWljIGZpZWxkIGhhcyBhIHZhcmlhYmxlIGVuZC4gCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgLSB0aGVyZSBhcmUgb2ZmLXNjcmVlbiBkYXRhIGFoZWFkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgLSB0aGVyZSBhcmUgbm8gb2ZmLXNjcmVlbiBkYXRhIGFoZWFkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2RhdGFfYWhlYWQoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICBUKChUX0NBTExFRCgiZGF0YV9haGVhZCglcCkiKSwgZm9ybSkpOworCisgIGlmIChmb3JtICYmIChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSAmJiBmb3JtLT5jdXJyZW50KQorICAgIHsKKyAgICAgIEZJRUxEICpmaWVsZDsKKyAgICAgIGJvb2wgY3Vyc29yX21vdmVkID0gRkFMU0U7CisgICAgICBpbnQgcG9zOworCisgICAgICBmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgICAgICBhc3NlcnQoZm9ybS0+dyk7CisKKyAgICAgIGlmIChTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkpCisJeworCSAgaW50IGNoZWNrX2xlbjsKKworCSAgcG9zID0gZm9ybS0+YmVnaW5jb2wgKyBmaWVsZC0+Y29sczsKKwkgIHdoaWxlIChwb3MgPCBmaWVsZC0+ZGNvbHMpCisJICAgIHsKKwkgICAgICBjaGVja19sZW4gPSBmaWVsZC0+ZGNvbHMgLSBwb3M7CisJICAgICAgaWYgKGNoZWNrX2xlbiA+PSBmaWVsZC0+Y29scykKKwkJY2hlY2tfbGVuID0gZmllbGQtPmNvbHM7CisJICAgICAgY3Vyc29yX21vdmVkID0gVFJVRTsKKwkgICAgICB3bW92ZShmb3JtLT53LCAwLCBwb3MpOworCSAgICAgIGlmIChPbmx5X1BhZGRpbmcoZm9ybS0+dywgY2hlY2tfbGVuLCBmaWVsZC0+cGFkKSkKKwkJcG9zICs9IGZpZWxkLT5jb2xzOworCSAgICAgIGVsc2UKKwkJeworCQkgIHJlc3VsdCA9IFRSVUU7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBwb3MgPSBmb3JtLT50b3Byb3cgKyBmaWVsZC0+cm93czsKKwkgIHdoaWxlIChwb3MgPCBmaWVsZC0+ZHJvd3MpCisJICAgIHsKKwkgICAgICBjdXJzb3JfbW92ZWQgPSBUUlVFOworCSAgICAgIHdtb3ZlKGZvcm0tPncsIHBvcywgMCk7CisJICAgICAgcG9zKys7CisJICAgICAgaWYgKCFPbmx5X1BhZGRpbmcoZm9ybS0+dywgZmllbGQtPmNvbHMsIGZpZWxkLT5wYWQpKQorCQl7CisJCSAgcmVzdWx0ID0gVFJVRTsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisJfQorCisgICAgICBpZiAoY3Vyc29yX21vdmVkKQorCXdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgICB9CisgIHJldHVybkJvb2wocmVzdWx0KTsKK30KKworLyogZnJtX2RhdGEuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZnJtX2RlZi5jIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fZGVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4OTc1MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX2RlZi5jCkBAIC0wLDAgKzEsNDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmcm1fZGVmLmMsdiAxLjIzIDIwMDgvMDgvMDQgMDA6MDc6NTUgdG9tIEV4cCAkIikKKworLyogdGhpcyBjYW4ndCBiZSByZWFkb25seSAqLworc3RhdGljIEZPUk0gZGVmYXVsdF9mb3JtID0KK3sKKyAgMCwJCQkJLyogc3RhdHVzICAgICAqLworICAwLAkJCQkvKiByb3dzICAgICAgICovCisgIDAsCQkJCS8qIGNvbHMgICAgICAgKi8KKyAgMCwJCQkJLyogY3Vycm93ICAgICAqLworICAwLAkJCQkvKiBjdXJjb2wgICAgICovCisgIDAsCQkJCS8qIHRvcHJvdyAgICAgKi8KKyAgMCwJCQkJLyogYmVnaW5jb2wgICAqLworICAtMSwJCQkJLyogbWF4ZmllbGQgICAqLworICAtMSwJCQkJLyogbWF4cGFnZSAgICAqLworICAtMSwJCQkJLyogY3VycGFnZSAgICAqLworICBBTExfRk9STV9PUFRTLAkJLyogb3B0cyAgICAgICAqLworICAoV0lORE9XICopMCwJCQkvKiB3aW4gICAgICAgICovCisgIChXSU5ET1cgKikwLAkJCS8qIHN1YiAgICAgICAgKi8KKyAgKFdJTkRPVyAqKTAsCQkJLyogdyAgICAgICAgICAqLworICAoRklFTEQgKiopMCwJCQkvKiBmaWVsZCAgICAgICovCisgIChGSUVMRCAqKTAsCQkJLyogY3VycmVudCAgICAqLworICAoX1BBR0UgKikgMCwJCQkvKiBwYWdlICAgICAgICovCisgIChjaGFyICopMCwJCQkvKiB1c3JwdHIgICAgICovCisgIE5VTEwsCQkJCS8qIGZvcm1pbml0ICAgKi8KKyAgTlVMTCwJCQkJLyogZm9ybXRlcm0gICAqLworICBOVUxMLAkJCQkvKiBmaWVsZGluaXQgICovCisgIE5VTEwJCQkJLyogZmllbGR0ZXJtICAqLworfTsKKworTkNVUlNFU19FWFBPUlRfVkFSKEZPUk0gKikgX25jX0RlZmF1bHRfRm9ybSA9ICZkZWZhdWx0X2Zvcm07CisMCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIEZJRUxEICpJbnNlcnRfRmllbGRfQnlfUG9zaXRpb24oCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICpuZXdfZmllbGQsIAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqaGVhZCApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBJbnNlcnQgbmV3X2ZpZWxkIGludG8gc29ydGVkIGZpZWxkbGlzdCB3aXRoIGhlYWQgImhlYWQiCit8ICAgICAgICAgICAgICAgICAgICBhbmQgcmV0dXJuIG5ldyBoZWFkIG9mIHNvcnRlZCBmaWVsZGxpc3QuIFNvcnRpbmcKK3wgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlhIGlzIChyb3csY29sdW1uKS4gVGhpcyBpcyBhIGNpcmN1bGFyIGxpc3QuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBOZXcgaGVhZCBvZiBzb3J0ZWQgZmllbGRsaXN0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIEZJRUxEICoKK0luc2VydF9GaWVsZF9CeV9Qb3NpdGlvbihGSUVMRCAqbmV3ZmllbGQsIEZJRUxEICpoZWFkKQoreworICBGSUVMRCAqY3VycmVudCwgKm5ld2hlYWQ7CisKKyAgYXNzZXJ0KG5ld2ZpZWxkKTsKKworICBpZiAoIWhlYWQpCisgICAgewkJCQkvKiBlbXB0eSBsaXN0IGlzIHRyaXZpYWwgKi8KKyAgICAgIG5ld2hlYWQgPSBuZXdmaWVsZC0+c25leHQgPSBuZXdmaWVsZC0+c3ByZXYgPSBuZXdmaWVsZDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXdoZWFkID0gY3VycmVudCA9IGhlYWQ7CisgICAgICB3aGlsZSAoKGN1cnJlbnQtPmZyb3cgPCBuZXdmaWVsZC0+ZnJvdykgfHwKKwkgICAgICgoY3VycmVudC0+ZnJvdyA9PSBuZXdmaWVsZC0+ZnJvdykgJiYKKwkgICAgICAoY3VycmVudC0+ZmNvbCA8IG5ld2ZpZWxkLT5mY29sKSkpCisJeworCSAgY3VycmVudCA9IGN1cnJlbnQtPnNuZXh0OworCSAgaWYgKGN1cnJlbnQgPT0gaGVhZCkKKwkgICAgewkJCS8qIFdlIGN5Y2xlZCB0aHJvdWdoLiBSZXNldCBoZWFkIHRvIGluZGljYXRlIHRoYXQgKi8KKwkgICAgICBoZWFkID0gKEZJRUxEICopMDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIC8qIHdlIGxlYXZlIHRoZSBsb29wIHdpdGggY3VycmVudCBwb2ludGluZyB0byB0aGUgZmllbGQgYWZ0ZXIgbmV3ZmllbGQgKi8KKyAgICAgIG5ld2ZpZWxkLT5zbmV4dCA9IGN1cnJlbnQ7CisgICAgICBuZXdmaWVsZC0+c3ByZXYgPSBjdXJyZW50LT5zcHJldjsKKyAgICAgIG5ld2ZpZWxkLT5zbmV4dC0+c3ByZXYgPSBuZXdmaWVsZDsKKyAgICAgIG5ld2ZpZWxkLT5zcHJldi0+c25leHQgPSBuZXdmaWVsZDsKKyAgICAgIGlmIChjdXJyZW50ID09IGhlYWQpCisJbmV3aGVhZCA9IG5ld2ZpZWxkOworICAgIH0KKyAgcmV0dXJuIChuZXdoZWFkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIERpc2Nvbm5lY3RfRmllbGRzKEZPUk0gKmZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBCcmVhayBhc3NvY2lhdGlvbiBiZXR3ZWVuIGZvcm0gYW5kIGFycmF5IG9mIGZpZWxkcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorRGlzY29ubmVjdF9GaWVsZHMoRk9STSAqZm9ybSkKK3sKKyAgaWYgKGZvcm0tPmZpZWxkKQorICAgIHsKKyAgICAgIEZJRUxEICoqZmllbGRzOworCisgICAgICBmb3IgKGZpZWxkcyA9IGZvcm0tPmZpZWxkOyAqZmllbGRzOyBmaWVsZHMrKykKKwl7CisJICBpZiAoZm9ybSA9PSAoKmZpZWxkcyktPmZvcm0pCisJICAgICgqZmllbGRzKS0+Zm9ybSA9IChGT1JNICopMDsKKwl9CisKKyAgICAgIGZvcm0tPnJvd3MgPSBmb3JtLT5jb2xzID0gMDsKKyAgICAgIGZvcm0tPm1heGZpZWxkID0gZm9ybS0+bWF4cGFnZSA9IC0xOworICAgICAgZm9ybS0+ZmllbGQgPSAoRklFTEQgKiopMDsKKyAgICAgIGlmIChmb3JtLT5wYWdlKQorCWZyZWUoZm9ybS0+cGFnZSk7CisgICAgICBmb3JtLT5wYWdlID0gKF9QQUdFICopIDA7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBDb25uZWN0X0ZpZWxkcyhGT1JNICpmb3JtLCBGSUVMRCAqKmZpZWxkcykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCBhc3NvY2lhdGlvbiBiZXR3ZWVuIGZvcm0gYW5kIGFycmF5IG9mIGZpZWxkcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIG5vIGVycm9yCit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgICAgLSBhIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBJbnZhbGlkIGZvcm0gcG9pbnRlciBvciBmaWVsZCBhcnJheQorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gbm90IGVub3VnaCBtZW1vcnkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitDb25uZWN0X0ZpZWxkcyhGT1JNICpmb3JtLCBGSUVMRCAqKmZpZWxkcykKK3sKKyAgaW50IGZpZWxkX2NudCwgajsKKyAgaW50IHBhZ2VfbnI7CisgIGludCBtYXhpbXVtX3Jvd19pbl9maWVsZCwgbWF4aW11bV9jb2xfaW5fZmllbGQ7CisgIF9QQUdFICpwZzsKKworICBUKChUX0NBTExFRCgiQ29ubmVjdF9GaWVsZHMoJXAsJXApIiksIGZvcm0sIGZpZWxkcykpOworCisgIGFzc2VydChmb3JtKTsKKworICBmb3JtLT5maWVsZCA9IGZpZWxkczsKKyAgZm9ybS0+bWF4ZmllbGQgPSAwOworICBmb3JtLT5tYXhwYWdlID0gMDsKKworICBpZiAoIWZpZWxkcykKKyAgICBSRVRVUk4oRV9PSyk7CisKKyAgcGFnZV9uciA9IDA7CisgIC8qIHN0b3JlIGZvcm1wb2ludGVyIGluIGZpZWxkcyBhbmQgY291bnQgcGFnZXMgKi8KKyAgZm9yIChmaWVsZF9jbnQgPSAwOyBmaWVsZHNbZmllbGRfY250XTsgZmllbGRfY250KyspCisgICAgeworICAgICAgaWYgKGZpZWxkc1tmaWVsZF9jbnRdLT5mb3JtKQorCVJFVFVSTihFX0NPTk5FQ1RFRCk7CisgICAgICBpZiAoZmllbGRfY250ID09IDAgfHwKKwkgIChmaWVsZHNbZmllbGRfY250XS0+c3RhdHVzICYgX05FV1BBR0UpKQorCXBhZ2VfbnIrKzsKKyAgICAgIGZpZWxkc1tmaWVsZF9jbnRdLT5mb3JtID0gZm9ybTsKKyAgICB9CisgIGlmIChmaWVsZF9jbnQgPT0gMCB8fCAoc2hvcnQpZmllbGRfY250IDwgMCkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIC8qIGFsbG9jYXRlIHBhZ2Ugc3RydWN0dXJlcyAqLworICBpZiAoKHBnID0gdHlwZU1hbGxvYyhfUEFHRSwgcGFnZV9ucikpICE9IChfUEFHRSAqKSAwKQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJfUEFHRSAlcCIpLCBwZykpOworICAgICAgZm9ybS0+cGFnZSA9IHBnOworICAgIH0KKyAgZWxzZQorICAgIFJFVFVSTihFX1NZU1RFTV9FUlJPUik7CisKKyAgLyogQ3ljbGUgdGhyb3VnaCBmaWVsZHMgYW5kIGNhbGN1bGF0ZSBwYWdlIGJvdW5kYXJpZXMgYXMgd2VsbCBhcworICAgICBzaXplIG9mIHRoZSBmb3JtICovCisgIGZvciAoaiA9IDA7IGogPCBmaWVsZF9jbnQ7IGorKykKKyAgICB7CisgICAgICBpZiAoaiA9PSAwKQorCXBnLT5wbWluID0gajsKKyAgICAgIGVsc2UKKwl7CisJICBpZiAoZmllbGRzW2pdLT5zdGF0dXMgJiBfTkVXUEFHRSkKKwkgICAgeworCSAgICAgIHBnLT5wbWF4ID0gaiAtIDE7CisJICAgICAgcGcrKzsKKwkgICAgICBwZy0+cG1pbiA9IGo7CisJICAgIH0KKwl9CisKKyAgICAgIG1heGltdW1fcm93X2luX2ZpZWxkID0gZmllbGRzW2pdLT5mcm93ICsgZmllbGRzW2pdLT5yb3dzOworICAgICAgbWF4aW11bV9jb2xfaW5fZmllbGQgPSBmaWVsZHNbal0tPmZjb2wgKyBmaWVsZHNbal0tPmNvbHM7CisKKyAgICAgIGlmIChmb3JtLT5yb3dzIDwgbWF4aW11bV9yb3dfaW5fZmllbGQpCisJZm9ybS0+cm93cyA9IG1heGltdW1fcm93X2luX2ZpZWxkOworICAgICAgaWYgKGZvcm0tPmNvbHMgPCBtYXhpbXVtX2NvbF9pbl9maWVsZCkKKwlmb3JtLT5jb2xzID0gbWF4aW11bV9jb2xfaW5fZmllbGQ7CisgICAgfQorCisgIHBnLT5wbWF4ID0gZmllbGRfY250IC0gMTsKKyAgZm9ybS0+bWF4ZmllbGQgPSBmaWVsZF9jbnQ7CisgIGZvcm0tPm1heHBhZ2UgPSBwYWdlX25yOworCisgIC8qIFNvcnQgZmllbGRzIG9uIGZvcm0gcGFnZXMgKi8KKyAgZm9yIChwYWdlX25yID0gMDsgcGFnZV9uciA8IGZvcm0tPm1heHBhZ2U7IHBhZ2VfbnIrKykKKyAgICB7CisgICAgICBGSUVMRCAqZmxkID0gKEZJRUxEICopMDsKKworICAgICAgZm9yIChqID0gZm9ybS0+cGFnZVtwYWdlX25yXS5wbWluOyBqIDw9IGZvcm0tPnBhZ2VbcGFnZV9ucl0ucG1heDsgaisrKQorCXsKKwkgIGZpZWxkc1tqXS0+aW5kZXggPSBqOworCSAgZmllbGRzW2pdLT5wYWdlID0gcGFnZV9ucjsKKwkgIGZsZCA9IEluc2VydF9GaWVsZF9CeV9Qb3NpdGlvbihmaWVsZHNbal0sIGZsZCk7CisJfQorICAgICAgaWYgKGZsZCkKKwl7CisJICBmb3JtLT5wYWdlW3BhZ2VfbnJdLnNtaW4gPSBmbGQtPmluZGV4OworCSAgZm9ybS0+cGFnZVtwYWdlX25yXS5zbWF4ID0gZmxkLT5zcHJldi0+aW5kZXg7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGZvcm0tPnBhZ2VbcGFnZV9ucl0uc21pbiA9IDA7CisJICBmb3JtLT5wYWdlW3BhZ2VfbnJdLnNtYXggPSAwOworCX0KKyAgICB9CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgQXNzb2NpYXRlX0ZpZWxkcyhGT1JNICpmb3JtLCBGSUVMRCAqKmZpZWxkcykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCBhc3NvY2lhdGlvbiBiZXR3ZWVuIGZvcm0gYW5kIGFycmF5IG9mIGZpZWxkcy4gCit8ICAgICAgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgZmllbGRzLCBwb3NpdGlvbiB0byBmaXJzdCBhY3RpdmUgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBJbnZhbGlkIGZvcm0gcG9pbnRlciBvciBmaWVsZCBhcnJheQorfCAgICAgICAgICAgICAgICAgICAgRV9DT05ORUNURUQgICAgIC0gYSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gbm90IGVub3VnaCBtZW1vcnkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgaW50CitBc3NvY2lhdGVfRmllbGRzKEZPUk0gKmZvcm0sIEZJRUxEICoqZmllbGRzKQoreworICBpbnQgcmVzID0gQ29ubmVjdF9GaWVsZHMoZm9ybSwgZmllbGRzKTsKKworICBpZiAocmVzID09IEVfT0spCisgICAgeworICAgICAgaWYgKGZvcm0tPm1heHBhZ2UgPiAwKQorCXsKKwkgIGZvcm0tPmN1cnBhZ2UgPSAwOworCSAgZm9ybV9kcml2ZXIoZm9ybSwgRklSU1RfQUNUSVZFX01BR0lDKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgZm9ybS0+Y3VycGFnZSA9IC0xOworCSAgZm9ybS0+Y3VycmVudCA9IChGSUVMRCAqKTA7CisJfQorICAgIH0KKyAgcmV0dXJuIChyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgRk9STSAqbmV3X2Zvcm0oIEZJRUxEICoqZmllbGRzICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENyZWF0ZSBuZXcgZm9ybSB3aXRoIGdpdmVuIGFycmF5IG9mIGZpZWxkcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gZm9ybS4gTlVMTCBpZiBlcnJvciBvY2N1cnJlZC4KKyEgICAgICAgICAgICAgICAgICAgIFNldCBlcnJubzoKK3wgICAgICAgICAgICAgICAgICAgIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIEludmFsaWQgZm9ybSBwb2ludGVyIG9yIGZpZWxkIGFycmF5Cit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgICAgLSBhIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgLSBub3QgZW5vdWdoIG1lbW9yeQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKEZPUk0gKikKK25ld19mb3JtKEZJRUxEICoqZmllbGRzKQoreworICBpbnQgZXJyID0gRV9TWVNURU1fRVJST1I7CisKKyAgRk9STSAqZm9ybSA9IHR5cGVNYWxsb2MoRk9STSwgMSk7CisKKyAgVCgoVF9DQUxMRUQoIm5ld19mb3JtKCVwKSIpLCBmaWVsZHMpKTsKKyAgaWYgKGZvcm0pCisgICAgeworICAgICAgVCgoVF9DUkVBVEUoImZvcm0gJXAiKSwgZm9ybSkpOworICAgICAgKmZvcm0gPSAqX25jX0RlZmF1bHRfRm9ybTsKKyAgICAgIGlmICgoZXJyID0gQXNzb2NpYXRlX0ZpZWxkcyhmb3JtLCBmaWVsZHMpKSAhPSBFX09LKQorCXsKKwkgIGZyZWVfZm9ybShmb3JtKTsKKwkgIGZvcm0gPSAoRk9STSAqKTA7CisJfQorICAgIH0KKworICBpZiAoIWZvcm0pCisgICAgU0VUX0VSUk9SKGVycik7CisKKyAgcmV0dXJuRm9ybShmb3JtKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmcmVlX2Zvcm0oIEZPUk0gKmZvcm0gKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmVsZWFzZSBpbnRlcm5hbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIG5vIGVycm9yCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgZm9ybSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAtIGZvcm0gaXMgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZnJlZV9mb3JtKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJmcmVlX2Zvcm0oJXApIiksIGZvcm0pKTsKKworICBpZiAoIWZvcm0pCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkKKyAgICBSRVRVUk4oRV9QT1NURUQpOworCisgIERpc2Nvbm5lY3RfRmllbGRzKGZvcm0pOworICBpZiAoZm9ybS0+cGFnZSkKKyAgICBmcmVlKGZvcm0tPnBhZ2UpOworICBmcmVlKGZvcm0pOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZm9ybV9maWVsZHMoIEZPUk0gKmZvcm0sIEZJRUxEICoqZmllbGRzICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCBhIG5ldyBhc3NvY2lhdGlvbiBvZiBhbiBhcnJheSBvZiBmaWVsZHMgdG8gYSBmb3JtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBubyBlcnJvcgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gSW52YWxpZCBmb3JtIHBvaW50ZXIgb3IgZmllbGQgYXJyYXkKK3wgICAgICAgICAgICAgICAgICAgIEVfQ09OTkVDVEVEICAgICAtIGEgZmllbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgICAtIGZvcm0gaXMgcG9zdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgLSBub3QgZW5vdWdoIG1lbW9yeQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9mb3JtX2ZpZWxkcyhGT1JNICpmb3JtLCBGSUVMRCAqKmZpZWxkcykKK3sKKyAgRklFTEQgKipvbGQ7CisgIGludCByZXM7CisKKyAgVCgoVF9DQUxMRUQoInNldF9mb3JtX2ZpZWxkcyglcCwlcCkiKSwgZm9ybSwgZmllbGRzKSk7CisKKyAgaWYgKCFmb3JtKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpCisgICAgUkVUVVJOKEVfUE9TVEVEKTsKKworICBvbGQgPSBmb3JtLT5maWVsZDsKKyAgRGlzY29ubmVjdF9GaWVsZHMoZm9ybSk7CisKKyAgaWYgKChyZXMgPSBBc3NvY2lhdGVfRmllbGRzKGZvcm0sIGZpZWxkcykpICE9IEVfT0spCisgICAgQ29ubmVjdF9GaWVsZHMoZm9ybSwgb2xkKTsKKworICBSRVRVUk4ocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIEZJRUxEICoqZm9ybV9maWVsZHMoIGNvbnN0IEZPUk0gKmZvcm0gKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgYXJyYXkgb2YgZmllbGRzCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGZpZWxkIGFycmF5CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTEQgKiopCitmb3JtX2ZpZWxkcyhjb25zdCBGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiZm9ybV9maWVsZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5GaWVsZFB0cihOb3JtYWxpemVfRm9ybShmb3JtKS0+ZmllbGQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZpZWxkX2NvdW50KCBjb25zdCBGT1JNICpmb3JtICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIG51bWJlciBvZiBmaWVsZHMKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE51bWJlciBvZiBmaWVsZHMsIC0xIGlmIG5vbmUgYXJlIGRlZmluZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmaWVsZF9jb3VudChjb25zdCBGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiZmllbGRfY291bnQoJXApIiksIGZvcm0pKTsKKworICByZXR1cm5Db2RlKE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT5tYXhmaWVsZCk7Cit9CisKKy8qIGZybV9kZWYuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZnJtX2RyaXZlci5jIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzMjNlZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX2RyaXZlci5jCkBAIC0wLDAgKzEsNDU3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX2RyaXZlci5jLHYgMS44OCAyMDA4LzEwLzE4IDE2OjI1OjAwIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIGlzIHRoZSBjb3JlIG1vZHVsZSBvZiB0aGUgZm9ybSBsaWJyYXJ5LiBJdCBjb250YWlucyB0aGUgbWFqb3JpdHkKKyAgb2YgdGhlIGRyaXZlciByb3V0aW5lcyBhcyB3ZWxsIGFzIHRoZSBmb3JtX2RyaXZlciBmdW5jdGlvbi4KKworICBFc3NlbnRpYWxseSB0aGlzIG1vZHVsZSBpcyBuZWFybHkgdGhlIHdob2xlIGxpYnJhcnkuIFRoaXMgaXMgYmVjYXVzZQorICBhbGwgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIHNvbWUgb3RoZXJzIGluIHRoZSBtb2R1bGUsCisgIHNvIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHNwbGl0IHRoZW0gaW50byBzZXBhcmF0ZSBmaWxlcyBiZWNhdXNlIHRoZXkKKyAgd2lsbCBhbHdheXMgYmUgbGlua2VkIHRvZ2V0aGVyLiBUaGUgb25seSBhY2NlcHRhYmxlIGNvbmNlcm4gaXMgdHVybmFyb3VuZAorICB0aW1lIGZvciB0aGlzIG1vZHVsZSwgYnV0IG5vdyB3ZSBoYXZlIGFsbCBQZW50aXVtcyBvciBSSVNDcywgc28gd2hhdCEKKworICBUaGUgZHJpdmVyIHJvdXRpbmVzIGFyZSBncm91cGVkIGludG8gbmluZSBnZW5lcmljIGNhdGVnb3JpZXM6CisKKyAgIGEpICAgUGFnZSBOYXZpZ2F0aW9uICAgICAgICAgICAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IFBOXyApCisgICAgICAgIFRoZSBjdXJyZW50IHBhZ2Ugb2YgdGhlIGZvcm0gaXMgbGVmdCBhbmQgc29tZSBuZXcgcGFnZSBpcworICAgICAgICBlbnRlcmVkLgorICAgYikgICBJbnRlci1GaWVsZCBOYXZpZ2F0aW9uICAgICAoIGFsbCBmdW5jdGlvbnMgcHJlZml4ZWQgYnkgRk5fICkKKyAgICAgICAgVGhlIGN1cnJlbnQgZmllbGQgb2YgdGhlIGZvcm0gaXMgbGVmdCBhbmQgc29tZSBuZXcgZmllbGQgaXMKKyAgICAgICAgZW50ZXJlZC4KKyAgIGMpICAgSW50cmEtRmllbGQgTmF2aWdhdGlvbiAgICAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IElGTl8gKQorICAgICAgICBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBmaWVsZCBpcyBjaGFuZ2VkLgorICAgZCkgICBWZXJ0aWNhbCBTY3JvbGxpbmcgICAgICAgICAoIGFsbCBmdW5jdGlvbnMgcHJlZml4ZWQgYnkgVlNDXyApCisgICAgICAgIEVzc2VudGlhbGx5IHRoaXMgaXMgYSBzcGVjaWFsaXphdGlvbiBvZiBJbnRyYS1GaWVsZCBuYXZpZ2F0aW9uLgorICAgICAgICBJdCBoYXMgdG8gY2hlY2sgZm9yIGEgbXVsdGktbGluZSBmaWVsZC4KKyAgIGUpICAgSG9yaXpvbnRhbCBTY3JvbGxpbmcgICAgICAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IEhTQ18gKQorICAgICAgICBFc3NlbnRpYWxseSB0aGlzIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgSW50cmEtRmllbGQgbmF2aWdhdGlvbi4KKyAgICAgICAgSXQgaGFzIHRvIGNoZWNrIGZvciBhIHNpbmdsZS1saW5lIGZpZWxkLgorICAgZikgICBGaWVsZCBFZGl0aW5nICAgICAgICAgICAgICAoIGFsbCBmdW5jdGlvbnMgcHJlZml4ZWQgYnkgRkVfICkKKyAgICAgICAgVGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgZmllbGQgaXMgY2hhbmdlZAorICAgZykgICBFZGl0IE1vZGUgcmVxdWVzdHMgICAgICAgICAoIGFsbCBmdW5jdGlvbnMgcHJlZml4ZWQgYnkgRU1fICkKKyAgICAgICAgU3dpdGNoaW5nIGJldHdlZW4gaW5zZXJ0IGFuZCBvdmVybGF5IG1vZGUKKyAgIGgpICAgRmllbGQtVmFsaWRhdGlvbiByZXF1ZXN0cyAgKCBhbGwgZnVuY3Rpb25zIHByZWZpeGVkIGJ5IEZWXyApCisgICAgICAgIFBlcmZvcm0gdmVyaWZpY2F0aW9ucyBvZiB0aGUgZmllbGQuCisgICBpKSAgIENob2ljZSByZXF1ZXN0cyAgICAgICAgICAgICggYWxsIGZ1bmN0aW9ucyBwcmVmaXhlZCBieSBDUl8gKQorICAgICAgICBSZXF1ZXN0cyB0byBlbnVtZXJhdGUgcG9zc2libGUgZmllbGQgdmFsdWVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNvbWUgcmVtYXJrcyBvbiB0aGUgcGxhY2VtZW50cyBvZiBhc3NlcnQoKSBtYWNyb3MgOgorICBJIHVzZSB0aGVtIG9ubHkgb24gInN0cmF0ZWdpYyIgcGxhY2VzLCBpLmUuIHRvcCBsZXZlbCBlbnRyaWVzIHdoZXJlCisgIEkgd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGluZ3MgYXJlIHNldCBjb3JyZWN0bHkuIFRocm91Z2hvdXQgc3Vib3JkaW5hdGUKKyAgcm91dGluZXMgSSBvbWl0IHRoZW0gbW9zdGx5LgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCitTb21lIG9wdGlvbnMgdGhhdCBtYXkgZWZmZWN0IGNvbXBhdGliaWxpdHkgaW4gYmVoYXZpb3IgdG8gU1ZyNCBmb3JtcywKK2J1dCB0aGV5IGFyZSBoZXJlIHRvIGFsbG93IGEgbW9yZSBpbnR1aXRpdmUgYW5kIHVzZXIgZnJpZW5kbHkgYmVoYXZpb3Igb2YKK291ciBmb3JtIGltcGxlbWVudGF0aW9uLiBUaGlzIGRvZXNuJ3QgYWZmZWN0IHRoZSBBUEksIHNvIHdlIGZlZWwgaXQgaXMKK3VuY3JpdGljYWwuCisKK1RoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIHRyaWVzIHRvIHN0YXkgdmVyeSBjbG9zZSB3aXRoIHRoZSBiZWhhdmlvcgorb2YgdGhlIG9yaWdpbmFsIFNWcjQgaW1wbGVtZW50YXRpb24sIGFsdGhvdWdoIGluIHNvbWUgYXJlYXMgaXQgaXMgcXVpdGUKK2NsZWFyIHRoYXQgdGhpcyBpc24ndCB0aGUgbW9zdCBhcHByb3ByaWF0ZSB3YXkuIEFzIGZhciBhcyBwb3NzaWJsZSB0aGlzCitzb3VyY2VzIHdpbGwgYWxsb3cgeW91IHRvIGJ1aWxkIGEgZm9ybXMgbGliIHRoYXQgYmVoYXZlcyBxdWl0ZSBzaW1pbGFyCit0byBTVnI0LCBidXQgbm93IGFuZCBpbiB0aGUgZnV0dXJlIHdlIHdpbGwgZ2l2ZSB5b3UgYmV0dGVyIG9wdGlvbnMuCitQZXJoYXBzIGF0IHNvbWUgdGltZSB3ZSB3aWxsIG1ha2UgdGhpcyBjb25maWd1cmFibGUgYXQgcnVudGltZS4KKyovCisKKy8qIEltcGxlbWVudCBhIG1vcmUgdXNlci1mcmllbmRseSBwcmV2aW91cy9uZXh0IHdvcmQgYmVoYXZpb3IgKi8KKyNkZWZpbmUgRlJJRU5ETFlfUFJFVl9ORVhUX1dPUkQgKDEpCisvKiBGaXggdGhlIHdyb25nIGJlaGF2aW9yIGZvciBmb3JtcyB3aXRoIGFsbCBmaWVsZHMgaW5hY3RpdmUgKi8KKyNkZWZpbmUgRklYX0ZPUk1fSU5BQ1RJVkVfQlVHICgxKQorLyogQWxsb3cgZHluYW1pYyBmaWVsZCBncm93dGggYWxzbyB3aGVuIG5hdmlnYXRpbmcgcGFzdCB0aGUgZW5kICovCisjZGVmaW5lIEdST1dfSUZfTkFWSUdBVEUgKDEpCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2RlZmluZSBteUFERE5TVFIodywgcywgbikgd2FkZF93Y2huc3RyKHcsIHMsIG4pCisjZGVmaW5lIG15SU5TTlNUUih3LCBzLCBuKSB3aW5zX3djaG5zdHIodywgcywgbikKKyNkZWZpbmUgbXlJTk5TVFIodywgcywgbikgIGZpeF93Y2huc3RyKHcsIHMsIG4pCisjZGVmaW5lIG15V0NXSURUSCh3LCB5LCB4KSBjZWxsX3dpZHRoKHcsIHksIHgpCisjZWxzZQorI2RlZmluZSBteUFERE5TVFIodywgcywgbikgd2FkZG5zdHIodywgcywgbikKKyNkZWZpbmUgbXlJTlNOU1RSKHcsIHMsIG4pIHdpbnNuc3RyKHcsIHMsIG4pCisjZGVmaW5lIG15SU5OU1RSKHcsIHMsIG4pICB3aW5uc3RyKHcsIHMsIG4pCisjZGVmaW5lIG15V0NXSURUSCh3LCB5LCB4KSAxCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZvcndhcmQgcmVmZXJlbmNlcyB0byBzb21lIGludGVybmFsbHkgdXNlZCBzdGF0aWMgZnVuY3Rpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgSW50ZXJfRmllbGRfTmF2aWdhdGlvbihpbnQgKCpjb25zdCBmY3QpIChGT1JNICopLCBGT1JNICpmb3JtKTsKK3N0YXRpYyBpbnQgRk5fTmV4dF9GaWVsZChGT1JNICpmb3JtKTsKK3N0YXRpYyBpbnQgRk5fUHJldmlvdXNfRmllbGQoRk9STSAqZm9ybSk7CitzdGF0aWMgaW50IEZFX05ld19MaW5lKEZPUk0gKik7CitzdGF0aWMgaW50IEZFX0RlbGV0ZV9QcmV2aW91cyhGT1JNICopOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTWFjcm8gRGVmaW5pdGlvbnMuCisKKyAgU29tZSBSZW1hcmtzIG9uIHRoYXQ6IEkgdXNlIHRoZSBjb252ZW50aW9uIHRvIHVzZSBVUFBFUkNBU0UgZm9yIGNvbnN0YW50cworICBkZWZpbmVkIGJ5IE1hY3Jvcy4gSWYgSSBwcm92aWRlIGEgbWFjcm8gYXMgYSBraW5kIG9mIGlubGluZSByb3V0aW5lIHRvCisgIHByb3ZpZGUgc29tZSBsb2dpYywgSSB1c2UgbXkgVXBwZXJfTG93ZXIgY2FzZSBzdHlsZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIGEgc2luZ2xlIHJvdyBpbiBhIGZpZWxkIGJ1ZmZlciAqLworI2RlZmluZSBQb3NpdGlvbl9PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLHJvdykgKChyb3cpKihmaWVsZCktPmRjb2xzKQorCisvKiBDYWxjdWxhdGUgc3RhcnQgYWRkcmVzcyBmb3IgdGhlIGZpZWxkcyBidWZmZXIjIE4gKi8KKyNkZWZpbmUgQWRkcmVzc19PZl9OdGhfQnVmZmVyKGZpZWxkLE4pIFwKKyAgKChmaWVsZCktPmJ1ZiArIChOKSooMStCdWZmZXJfTGVuZ3RoKGZpZWxkKSkpCisKKy8qIENhbGN1bGF0ZSB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcm93IGluIHRoZSBmaWVsZHMgc3BlY2lmaWVkIGJ1ZmZlciMgTiAqLworI2RlZmluZSBBZGRyZXNzX09mX1Jvd19Jbl9OdGhfQnVmZmVyKGZpZWxkLE4scm93KSBcCisgIChBZGRyZXNzX09mX050aF9CdWZmZXIoZmllbGQsTikgKyBQb3NpdGlvbl9PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLHJvdykpCisKKy8qIENhbGN1bGF0ZSB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcm93IGluIHRoZSBmaWVsZHMgcHJpbWFyeSBidWZmZXIgKi8KKyNkZWZpbmUgQWRkcmVzc19PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLHJvdykgXAorICBBZGRyZXNzX09mX1Jvd19Jbl9OdGhfQnVmZmVyKGZpZWxkLDAscm93KQorCisvKiBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJvdyBpbiB0aGUgZm9ybXMgY3VycmVudCBmaWVsZAorICAgYnVmZmVyIyBOICovCisjZGVmaW5lIEFkZHJlc3NfT2ZfQ3VycmVudF9Sb3dfSW5fTnRoX0J1ZmZlcihmb3JtLE4pIFwKKyAgIEFkZHJlc3NfT2ZfUm93X0luX050aF9CdWZmZXIoKGZvcm0pLT5jdXJyZW50LE4sKGZvcm0pLT5jdXJyb3cpCisKKy8qIENhbGN1bGF0ZSB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcm93IGluIHRoZSBmb3JtcyBjdXJyZW50IGZpZWxkCisgICBwcmltYXJ5IGJ1ZmZlciAqLworI2RlZmluZSBBZGRyZXNzX09mX0N1cnJlbnRfUm93X0luX0J1ZmZlcihmb3JtKSBcCisgICBBZGRyZXNzX09mX0N1cnJlbnRfUm93X0luX050aF9CdWZmZXIoZm9ybSwwKQorCisvKiBDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnNvciBpbiB0aGUgZm9ybXMgY3VycmVudCBmaWVsZAorICAgcHJpbWFyeSBidWZmZXIgKi8KKyNkZWZpbmUgQWRkcmVzc19PZl9DdXJyZW50X1Bvc2l0aW9uX0luX050aF9CdWZmZXIoZm9ybSxOKSBcCisgICAoQWRkcmVzc19PZl9DdXJyZW50X1Jvd19Jbl9OdGhfQnVmZmVyKGZvcm0sTikgKyAoZm9ybSktPmN1cmNvbCkKKworLyogQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJzb3IgaW4gdGhlIGZvcm1zIGN1cnJlbnQgZmllbGQKKyAgIGJ1ZmZlciMgTiAqLworI2RlZmluZSBBZGRyZXNzX09mX0N1cnJlbnRfUG9zaXRpb25fSW5fQnVmZmVyKGZvcm0pIFwKKyAgQWRkcmVzc19PZl9DdXJyZW50X1Bvc2l0aW9uX0luX050aF9CdWZmZXIoZm9ybSwwKQorCisvKiBMb2dpYyB0byBkZWNpZGUgd2hldGhlciBvciBub3QgYSBmaWVsZCBpcyBhY3R1YWxseSBhIGZpZWxkIHdpdGgKKyAgIHZlcnRpY2FsIG9yIGhvcml6b250YWwgc2Nyb2xsaW5nICovCisjZGVmaW5lIElzX1Njcm9sbF9GaWVsZChmaWVsZCkgICAgICAgICAgXAorICAgKCgoZmllbGQpLT5kcm93cyA+IChmaWVsZCktPnJvd3MpIHx8IFwKKyAgICAoKGZpZWxkKS0+ZGNvbHMgPiAoZmllbGQpLT5jb2xzKSkKKworLyogTG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IGEgZmllbGQgbmVlZHMgdG8gaGF2ZSBhbiBpbmRpdmlkdWFsIHdpbmRvdworICAgaW5zdGVhZCBvZiBhIGRlcml2ZWQgd2luZG93IGJlY2F1c2UgaXQgY29udGFpbnMgaW52aXNpYmxlIHBhcnRzLgorICAgVGhpcyBpcyB0cnVlIGZvciBub24tcHVibGljIGZpZWxkcyBhbmQgZm9yIHNjcm9sbGFibGUgZmllbGRzLiAqLworI2RlZmluZSBIYXNfSW52aXNpYmxlX1BhcnRzKGZpZWxkKSAgICAgXAorICAoISgoZmllbGQpLT5vcHRzICYgT19QVUJMSUMpICAgICAgfHwgXAorICAgSXNfU2Nyb2xsX0ZpZWxkKGZpZWxkKSkKKworLyogTG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IGEgZmllbGQgbmVlZHMganVzdGlmaWNhdGlvbiAqLworI2RlZmluZSBKdXN0aWZpY2F0aW9uX0FsbG93ZWQoZmllbGQpICAgICAgICBcCisgICAoKChmaWVsZCktPmp1c3QgIT0gTk9fSlVTVElGSUNBVElPTikgICYmIFwKKyAgICAoU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpKSAgICAgICAgICAgJiYgXAorICAgICgoKGZpZWxkKS0+ZGNvbHMgPT0gKGZpZWxkKS0+Y29scykgICAmJiBcCisgICAgKChmaWVsZCktPm9wdHMgJiBPX1NUQVRJQykpICAgICAgICAgICAgICkKKworLyogTG9naWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgZHluYW1pYyBmaWVsZCBtYXkgc3RpbGwgZ3JvdyAqLworI2RlZmluZSBHcm93YWJsZShmaWVsZCkgKChmaWVsZCktPnN0YXR1cyAmIF9NQVlfR1JPVykKKworLyogTWFjcm8gdG8gc2V0IHRoZSBhdHRyaWJ1dGVzIGZvciBhIGZpZWxkcyB3aW5kb3cgKi8KKyNkZWZpbmUgU2V0X0ZpZWxkX1dpbmRvd19BdHRyaWJ1dGVzKGZpZWxkLHdpbikgXAorKCAgd2JrZ2RzZXQoKHdpbiksKGNodHlwZSkoKGZpZWxkKS0+cGFkIHwgKGZpZWxkKS0+YmFjaykpLCBcCisgICB3YXR0cnNldCgod2luKSwoZmllbGQpLT5mb3JlKSApCisKKy8qIExvZ2ljIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCBhIGZpZWxkIHJlYWxseSBhcHBlYXJzIG9uIHRoZSBmb3JtICovCisjZGVmaW5lIEZpZWxkX1JlYWxseV9BcHBlYXJzKGZpZWxkKSAgICAgICAgIFwKKyAgKChmaWVsZC0+Zm9ybSkgICAgICAgICAgICAgICAgICAgICAgICAgICYmXAorICAgKGZpZWxkLT5mb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSAgICAgICAgJiZcCisgICAoZmllbGQtPm9wdHMgJiBPX1ZJU0lCTEUpICAgICAgICAgICAgICAmJlwKKyAgIChmaWVsZC0+cGFnZSA9PSBmaWVsZC0+Zm9ybS0+Y3VycGFnZSkpCisKKy8qIExvZ2ljIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgb24gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZQorICAgY3VycmVudCBmaWVsZCAqLworI2RlZmluZSBGaXJzdF9Qb3NpdGlvbl9Jbl9DdXJyZW50X0ZpZWxkKGZvcm0pIFwKKyAgKCgoZm9ybSktPmN1cnJvdz09MCkgJiYgKChmb3JtKS0+Y3VyY29sPT0wKSkKKworI2RlZmluZSBNaW5pbXVtKGEsYikgKCgoYSk8PShiKSkgPyAoYSkgOiAoYikpCisjZGVmaW5lIE1heGltdW0oYSxiKSAoKChhKT49KGIpKSA/IChhKSA6IChiKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVzZWZ1bCBjb25zdGFudHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIEZJRUxEX0NFTEwgbXlCTEFOSyA9IEJMQU5LOworc3RhdGljIEZJRUxEX0NFTEwgbXlaRVJPUzsKKworI2lmZGVmIFRSQUNFCitzdGF0aWMgdm9pZAorY2hlY2tfcG9zKEZPUk0gKmZvcm0sIGludCBsaW5lbm8pCit7CisgIGludCB5LCB4OworCisgIGlmIChmb3JtICYmIGZvcm0tPncpCisgICAgeworICAgICAgZ2V0eXgoZm9ybS0+dywgeSwgeCk7CisgICAgICBpZiAoeSAhPSBmb3JtLT5jdXJyb3cgfHwgeCAhPSBmb3JtLT5jdXJjb2wpCisJeworCSAgVCgoIkNIRUNLUE9TICVzQCVkIGhhdmUgcG9zaXRpb24gJWQsJWQgdnMgd2FudCAlZCwlZCIsCisJICAgICBfX0ZJTEVfXywgbGluZW5vLAorCSAgICAgeSwgeCwKKwkgICAgIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKSk7CisJfQorICAgIH0KK30KKyNkZWZpbmUgQ0hFQ0tQT1MoZm9ybSkgY2hlY2tfcG9zKGZvcm0sIF9fTElORV9fKQorI2Vsc2UKKyNkZWZpbmUgQ0hFQ0tQT1MoZm9ybSkJCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV2lkZS1jaGFyYWN0ZXIgc3BlY2lhbCBmdW5jdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisvKiBsaWtlIHdpbnNuc3RyICovCitzdGF0aWMgaW50Cit3aW5zX3djaG5zdHIoV0lORE9XICp3LCBjY2hhcl90ICpzLCBpbnQgbikKK3sKKyAgaW50IGNvZGUgPSBFUlI7CisgIGludCB5LCB4OworCisgIHdoaWxlIChuLS0gPiAwKQorICAgIHsKKyAgICAgIGdldHl4KHcsIHksIHgpOworICAgICAgaWYgKChjb2RlID0gd2luc193Y2godywgcysrKSkgIT0gT0spCisJYnJlYWs7CisgICAgICBpZiAoKGNvZGUgPSB3bW92ZSh3LCB5LCB4ICsgMSkpICE9IE9LKQorCWJyZWFrOworICAgIH0KKyAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIHdpbl93Y2huc3RyIGlzIGluY29uc2lzdGVudCB3aXRoIHdpbm5zdHIsIHNpbmNlIGl0IHJldHVybnMgT0sgcmF0aGVyIHRoYW4KKyAqIHRoZSBudW1iZXIgb2YgaXRlbXMgdHJhbnNmZXJyZWQuCisgKi8KK3N0YXRpYyBpbnQKK2ZpeF93Y2huc3RyKFdJTkRPVyAqdywgY2NoYXJfdCAqcywgaW50IG4pCit7CisgIGludCB4OworCisgIHdpbl93Y2huc3RyKHcsIHMsIG4pOworICAvKgorICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZXh0cmFjdCB0aGUgdGV4dCBvbmx5IGZyb20gdGhlIHdpbmRvdy4KKyAgICogU3RyaXAgYXR0cmlidXRlcyBhbmQgY29sb3IgZnJvbSB0aGUgc3RyaW5nIHNvIHRoZXkgd2lsbCBub3QgYmUgYWRkZWQKKyAgICogYmFjayB3aGVuIGNvcHlpbmcgdGhlIHN0cmluZyB0byB0aGUgd2luZG93LgorICAgKi8KKyAgZm9yICh4ID0gMDsgeCA8IG47ICsreCkKKyAgICB7CisgICAgICBSZW1BdHRyKHNbeF0sIEFfQVRUUklCVVRFUyk7CisgICAgICBTZXRQYWlyKHNbeF0sIDApOworICAgIH0KKyAgcmV0dXJuIG47Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBjb2x1bW4gb2YgdGhlIGJhc2Ugb2YgdGhlIGdpdmVuIGNlbGwuCisgKi8KK3N0YXRpYyBpbnQKK2NlbGxfYmFzZShXSU5ET1cgKndpbiwgaW50IHksIGludCB4KQoreworICBpbnQgcmVzdWx0ID0geDsKKworICB3aGlsZSAoTEVHQUxZWCh3aW4sIHksIHgpKQorICAgIHsKKyAgICAgIGNjaGFyX3QgKmRhdGEgPSAmKHdpbi0+X2xpbmVbeV0udGV4dFt4XSk7CisKKyAgICAgIGlmIChpc1dpZGVjQmFzZShDSERFUkVGKGRhdGEpKSB8fCAhaXNXaWRlY0V4dChDSERFUkVGKGRhdGEpKSkKKwl7CisJICByZXN1bHQgPSB4OworCSAgYnJlYWs7CisJfQorICAgICAgLS14OworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIG5lZWRlZCBmb3IgdGhlIGdpdmVuIGNlbGwgaW4gYSB3aW5kb3cuCisgKi8KK3N0YXRpYyBpbnQKK2NlbGxfd2lkdGgoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkKK3sKKyAgaW50IHJlc3VsdCA9IDE7CisKKyAgaWYgKExFR0FMWVgod2luLCB5LCB4KSkKKyAgICB7CisgICAgICBjY2hhcl90ICpkYXRhID0gJih3aW4tPl9saW5lW3ldLnRleHRbeF0pOworCisgICAgICBpZiAoaXNXaWRlY0V4dChDSERFUkVGKGRhdGEpKSkKKwl7CisJICAvKiByZWN1ciwgcHJvdmlkaW5nIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KKwkgIHJlc3VsdCA9IGNlbGxfd2lkdGgod2luLCB5LCB4IC0gMSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlc3VsdCA9IHdjd2lkdGgoQ2hhck9mKENIREVSRUYoZGF0YSkpKTsKKwl9CisgICAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVGhlcmUgaXMgbm8gd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb24gc3VjaCBhcyB3ZGVsX3djaCgpLCBzbyB3ZSBtdXN0IGZpbmQKKyAqIGFsbCBvZiB0aGUgY2VsbHMgdGhhdCBjb21wcmlzZSBhIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXIgYW5kIGRlbGV0ZSB0aGVtCisgKiBvbmUtYnktb25lLgorICovCitzdGF0aWMgdm9pZAorZGVsZXRlX2NoYXIoRk9STSAqZm9ybSkKK3sKKyAgaW50IGNlbGxzID0gY2VsbF93aWR0aChmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisKKyAgZm9ybS0+Y3VyY29sID0gY2VsbF9iYXNlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICB3aGlsZSAoY2VsbHMtLSA+IDApCisgICAgeworICAgICAgd2RlbGNoKGZvcm0tPncpOworICAgIH0KK30KKyNkZWZpbmUgRGVsZXRlQ2hhcihmb3JtKSBkZWxldGVfY2hhcihmb3JtKQorI2Vsc2UKKyNkZWZpbmUgRGVsZXRlQ2hhcihmb3JtKSBcCisJICB3bW92ZSgoZm9ybSktPncsIChmb3JtKS0+Y3Vycm93LCAoZm9ybSktPmN1cmNvbCksIFwKKwkgIHdkZWxjaCgoZm9ybSktPncpCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgY2hhciAqR2V0X1N0YXJ0X09mX0RhdGEoY2hhciAqIGJ1ZiwgaW50IGJsZW4pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gcG9pbnRlciB0byBmaXJzdCBub24tYmxhbmsgcG9zaXRpb24gaW4gYnVmZmVyLgorfCAgICAgICAgICAgICAgICAgICAgSWYgYnVmZmVyIGlzIGVtcHR5IHJldHVybiBwb2ludGVyIHRvIGJ1ZmZlciBpdHNlbGYuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGZpcnN0IG5vbi1ibGFuayBwb3NpdGlvbiBpbiBidWZmZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTERfQ0VMTCAqCitHZXRfU3RhcnRfT2ZfRGF0YShGSUVMRF9DRUxMICpidWYsIGludCBibGVuKQoreworICBGSUVMRF9DRUxMICpwID0gYnVmOworICBGSUVMRF9DRUxMICplbmQgPSAmYnVmW2JsZW5dOworCisgIGFzc2VydChidWYgJiYgYmxlbiA+PSAwKTsKKyAgd2hpbGUgKChwIDwgZW5kKSAmJiBJU0JMQU5LKCpwKSkKKyAgICBwKys7CisgIHJldHVybiAoKHAgPT0gZW5kKSA/IGJ1ZiA6IHApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBjaGFyICpBZnRlcl9FbmRfT2ZfRGF0YShjaGFyICogYnVmLCBpbnQgYmxlbikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiBwb2ludGVyIGFmdGVyIGxhc3Qgbm9uLWJsYW5rIHBvc2l0aW9uIGluIGJ1ZmZlci4KK3wgICAgICAgICAgICAgICAgICAgIElmIGJ1ZmZlciBpcyBlbXB0eSwgcmV0dXJuIHBvaW50ZXIgdG8gYnVmZmVyIGl0c2VsZi4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gcG9zaXRpb24gYWZ0ZXIgbGFzdCBub24tYmxhbmsgcG9zaXRpb24gaW4KK3wgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTERfQ0VMTCAqCitBZnRlcl9FbmRfT2ZfRGF0YShGSUVMRF9DRUxMICpidWYsIGludCBibGVuKQoreworICBGSUVMRF9DRUxMICpwID0gJmJ1ZltibGVuXTsKKworICBhc3NlcnQoYnVmICYmIGJsZW4gPj0gMCk7CisgIHdoaWxlICgocCA+IGJ1ZikgJiYgSVNCTEFOSyhwWy0xXSkpCisgICAgcC0tOworICByZXR1cm4gKHApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBjaGFyICpHZXRfRmlyc3RfV2hpdGVzcGFjZV9DaGFyYWN0ZXIoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBidWYsIGludCAgIGJsZW4pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQb3NpdGlvbiB0byB0aGUgZmlyc3Qgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGZpcnN0IHdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIGJ1ZmZlci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTERfQ0VMTCAqCitHZXRfRmlyc3RfV2hpdGVzcGFjZV9DaGFyYWN0ZXIoRklFTERfQ0VMTCAqYnVmLCBpbnQgYmxlbikKK3sKKyAgRklFTERfQ0VMTCAqcCA9IGJ1ZjsKKyAgRklFTERfQ0VMTCAqZW5kID0gJnBbYmxlbl07CisKKyAgYXNzZXJ0KGJ1ZiAmJiBibGVuID49IDApOworICB3aGlsZSAoKHAgPCBlbmQpICYmICFJU0JMQU5LKCpwKSkKKyAgICBwKys7CisgIHJldHVybiAoKHAgPT0gZW5kKSA/IGJ1ZiA6IHApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBjaGFyICpBZnRlcl9MYXN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYnVmLCBpbnQgYmxlbikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3Qgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIHBvc2l0aW9uIGFmdGVyIGxhc3Qgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4KK3wgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTERfQ0VMTCAqCitBZnRlcl9MYXN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKEZJRUxEX0NFTEwgKmJ1ZiwgaW50IGJsZW4pCit7CisgIEZJRUxEX0NFTEwgKnAgPSAmYnVmW2JsZW5dOworCisgIGFzc2VydChidWYgJiYgYmxlbiA+PSAwKTsKKyAgd2hpbGUgKChwID4gYnVmKSAmJiAhSVNCTEFOSyhwWy0xXSkpCisgICAgcC0tOworICByZXR1cm4gKHApOworfQorCisvKiBTZXQgdGhpcyB0byAxIHRvIHVzZSB0aGUgZGl2X3QgdmVyc2lvbi4gVGhpcyBpcyBhIGdvb2QgaWRlYSBpZiB5b3VyCisgICBjb21waWxlciBoYXMgYW4gaW50cmluc2ljIGRpdigpIHN1cHBvcnQuIFVuZm9ydHVuYXRlbHkgR05VLUMgaGFzIGl0CisgICBub3QgeWV0LgorICAgTi5CLjogVGhpcyBvbmx5IHdvcmtzIGlmIGZvcm0tPmN1cmNvbCBmb2xsb3dzIGltbWVkaWF0ZWx5IGZvcm0tPmN1cnJvdworICAgICAgICAgYW5kIGJvdGggYXJlIG9mIHR5cGUgaW50LgorKi8KKyNkZWZpbmUgVVNFX0RJVl9UICgwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIEFkanVzdF9DdXJzb3JfUG9zaXRpb24oCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STSAqIGZvcm0sIGNvbnN0IGNoYXIgKiBwb3MpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgY3VycmVudCByb3cgYW5kIGNvbHVtbiBvZiB0aGUgZm9ybSB0byB2YWx1ZXMKK3wgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJ1ZmZlciBwb3NpdGlvbi4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgdm9pZAorQWRqdXN0X0N1cnNvcl9Qb3NpdGlvbihGT1JNICpmb3JtLCBjb25zdCBGSUVMRF9DRUxMICpwb3MpCit7CisgIEZJRUxEICpmaWVsZDsKKyAgaW50IGlkeDsKKworICBmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGFzc2VydChwb3MgPj0gZmllbGQtPmJ1ZiAmJiBmaWVsZC0+ZGNvbHMgPiAwKTsKKyAgaWR4ID0gKGludCkocG9zIC0gZmllbGQtPmJ1Zik7CisjaWYgVVNFX0RJVl9UCisgICooKGRpdl90ICopICYgKGZvcm0tPmN1cnJvdykpID0gZGl2KGlkeCwgZmllbGQtPmRjb2xzKTsKKyNlbHNlCisgIGZvcm0tPmN1cnJvdyA9IGlkeCAvIGZpZWxkLT5kY29sczsKKyAgZm9ybS0+Y3VyY29sID0gaWR4IC0gZmllbGQtPmNvbHMgKiBmb3JtLT5jdXJyb3c7CisjZW5kaWYKKyAgaWYgKGZpZWxkLT5kcm93cyA8IGZvcm0tPmN1cnJvdykKKyAgICBmb3JtLT5jdXJyb3cgPSAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIEJ1ZmZlcl9Ub19XaW5kb3coCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGSUVMRCAgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkRPVyAqIHdpbikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgdGhlIGJ1ZmZlciB0byB0aGUgd2luZG93LiBJZiBpdCBpcyBhIG11bHRpLWxpbmUKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkLCB0aGUgYnVmZmVyIGlzIHNwbGl0IHRvIHRoZSBsaW5lcyBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHdpbmRvdyB3aXRob3V0IGFueSBlZGl0aW5nLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitCdWZmZXJfVG9fV2luZG93KGNvbnN0IEZJRUxEICpmaWVsZCwgV0lORE9XICp3aW4pCit7CisgIGludCB3aWR0aCwgaGVpZ2h0OworICBpbnQgeSwgeDsKKyAgaW50IGxlbjsKKyAgaW50IHJvdzsKKyAgRklFTERfQ0VMTCAqcEJ1ZmZlcjsKKworICBhc3NlcnQod2luICYmIGZpZWxkKTsKKworICBnZXR5eCh3aW4sIHksIHgpOworICB3aWR0aCA9IGdldG1heHgod2luKTsKKyAgaGVpZ2h0ID0gZ2V0bWF4eSh3aW4pOworCisgIGZvciAocm93ID0gMCwgcEJ1ZmZlciA9IGZpZWxkLT5idWY7CisgICAgICAgcm93IDwgaGVpZ2h0OworICAgICAgIHJvdysrLCBwQnVmZmVyICs9IHdpZHRoKQorICAgIHsKKyAgICAgIGlmICgobGVuID0gKGludCkoQWZ0ZXJfRW5kX09mX0RhdGEocEJ1ZmZlciwgd2lkdGgpIC0gcEJ1ZmZlcikpID4gMCkKKwl7CisJICB3bW92ZSh3aW4sIHJvdywgMCk7CisJICBteUFERE5TVFIod2luLCBwQnVmZmVyLCBsZW4pOworCX0KKyAgICB9CisgIHdtb3ZlKHdpbiwgeSwgeCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgV2luZG93X1RvX0J1ZmZlcigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1cgKiB3aW4sCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb3B5IHRoZSBjb250ZW50IG9mIHRoZSB3aW5kb3cgaW50byB0aGUgYnVmZmVyLgorfCAgICAgICAgICAgICAgICAgICAgVGhlIG11bHRpcGxlIGxpbmVzIG9mIGEgd2luZG93IGFyZSBzaW1wbHkKK3wgICAgICAgICAgICAgICAgICAgIGNvbmNhdGVuYXRlZCBpbnRvIHRoZSBidWZmZXIuIFBhZCBjaGFyYWN0ZXJzIGluCit8ICAgICAgICAgICAgICAgICAgICB0aGUgd2luZG93IHdpbGwgYmUgcmVwbGFjZWQgYnkgYmxhbmtzIGluIHRoZSBidWZmZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK1dpbmRvd19Ub19CdWZmZXIoV0lORE9XICp3aW4sIEZJRUxEICpmaWVsZCkKK3sKKyAgaW50IHBhZDsKKyAgaW50IGxlbiA9IDA7CisgIEZJRUxEX0NFTEwgKnA7CisgIGludCByb3csIGhlaWdodDsKKworICBhc3NlcnQod2luICYmIGZpZWxkICYmIGZpZWxkLT5idWYpOworCisgIHBhZCA9IGZpZWxkLT5wYWQ7CisgIHAgPSBmaWVsZC0+YnVmOworICBoZWlnaHQgPSBnZXRtYXh5KHdpbik7CisKKyAgZm9yIChyb3cgPSAwOyAocm93IDwgaGVpZ2h0KSAmJiAocm93IDwgZmllbGQtPmRyb3dzKTsgcm93KyspCisgICAgeworICAgICAgd21vdmUod2luLCByb3csIDApOworICAgICAgbGVuICs9IG15SU5OU1RSKHdpbiwgcCArIGxlbiwgZmllbGQtPmRjb2xzKTsKKyAgICB9CisgIHBbbGVuXSA9IG15WkVST1M7CisKKyAgLyogcmVwbGFjZSB2aXN1YWwgcGFkZGluZyBjaGFyYWN0ZXIgYnkgYmxhbmtzIGluIGJ1ZmZlciAqLworICBpZiAocGFkICE9IENfQkxBTkspCisgICAgeworICAgICAgaW50IGk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgcCsrKQorCXsKKwkgIGlmICgodW5zaWduZWQgbG9uZylDaGFyT2YoKnApID09IENoQ2hhck9mKHBhZCkKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSAgICAgICYmIHAtPmNoYXJzWzFdID09IDAKKyNlbmRpZgorCSAgICApCisJICAgICpwID0gbXlCTEFOSzsKKwl9CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIFN5bmNocm9uaXplX0J1ZmZlcihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIElmIHRoZXJlIHdhcyBhIGNoYW5nZSwgY29weSB0aGUgY29udGVudCBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHdpbmRvdyBpbnRvIHRoZSBidWZmZXIsIHNvIHRoZSBidWZmZXIgaXMgc3luY2hyb25pemVkCit8ICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSB3aW5kb3dzIGNvbnRlbnQuIFdlIGhhdmUgdG8gaW5kaWNhdGUgdGhhdCB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBuZWVkcyB2YWxpZGF0aW9uIGR1ZSB0byB0aGUgY2hhbmdlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfSU5MSU5FIHN0YXRpYyB2b2lkCitTeW5jaHJvbml6ZV9CdWZmZXIoRk9STSAqZm9ybSkKK3sKKyAgaWYgKGZvcm0tPnN0YXR1cyAmIF9XSU5ET1dfTU9ESUZJRUQpCisgICAgeworICAgICAgZm9ybS0+c3RhdHVzICY9IH5fV0lORE9XX01PRElGSUVEOworICAgICAgZm9ybS0+c3RhdHVzIHw9IF9GQ0hFQ0tfUkVRVUlSRUQ7CisgICAgICBXaW5kb3dfVG9fQnVmZmVyKGZvcm0tPncsIGZvcm0tPmN1cnJlbnQpOworICAgICAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBGaWVsZF9Hcm93biggRklFTEQgKmZpZWxkLCBpbnQgYW1vdW50KQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGdyb3dhYmxlIGR5bmFtaWMgZmllbGRzCit8ICAgICAgICAgICAgICAgICAgICBvbmx5LiBJdCBoYXMgdG8gaW5jcmVhc2UgdGhlIGJ1ZmZlcnMgYW5kIHRvIGFsbG9jYXRlCit8ICAgICAgICAgICAgICAgICAgICBhIG5ldyB3aW5kb3cgZm9yIHRoaXMgZmllbGQuCit8ICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2lkZSBlZmZlY3QgdG8gc2V0IGEgbmV3Cit8ICAgICAgICAgICAgICAgICAgICBmaWVsZC1idWZmZXIgcG9pbnRlciwgdGhlIGRjb2xzIGFuZCBkcm93cyB2YWx1ZXMKK3wgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgYSBuZXcgY3VycmVudCBXaW5kb3cgZm9yIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAgIC0gZmllbGQgc3VjY2Vzc2Z1bGx5IGluY3JlYXNlZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgICAgLSB0aGVyZSB3YXMgc29tZSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitGaWVsZF9Hcm93bihGSUVMRCAqZmllbGQsIGludCBhbW91bnQpCit7CisgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgaWYgKGZpZWxkICYmIEdyb3dhYmxlKGZpZWxkKSkKKyAgICB7CisgICAgICBib29sIHNpbmdsZV9saW5lX2ZpZWxkID0gU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpOworICAgICAgaW50IG9sZF9idWZsZW4gPSBCdWZmZXJfTGVuZ3RoKGZpZWxkKTsKKyAgICAgIGludCBuZXdfYnVmbGVuOworICAgICAgaW50IG9sZF9kY29scyA9IGZpZWxkLT5kY29sczsKKyAgICAgIGludCBvbGRfZHJvd3MgPSBmaWVsZC0+ZHJvd3M7CisgICAgICBGSUVMRF9DRUxMICpvbGRidWYgPSBmaWVsZC0+YnVmOworICAgICAgRklFTERfQ0VMTCAqbmV3YnVmOworCisgICAgICBpbnQgZ3Jvd3RoOworICAgICAgRk9STSAqZm9ybSA9IGZpZWxkLT5mb3JtOworICAgICAgYm9vbCBuZWVkX3Zpc3VhbF91cGRhdGUgPSAoKGZvcm0gIT0gKEZPUk0gKikwKSAmJgorCQkJCSAoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkgJiYKKwkJCQkgKGZvcm0tPmN1cnJlbnQgPT0gZmllbGQpKTsKKworICAgICAgaWYgKG5lZWRfdmlzdWFsX3VwZGF0ZSkKKwlTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisKKyAgICAgIGlmIChzaW5nbGVfbGluZV9maWVsZCkKKwl7CisJICBncm93dGggPSBmaWVsZC0+Y29scyAqIGFtb3VudDsKKwkgIGlmIChmaWVsZC0+bWF4Z3JvdykKKwkgICAgZ3Jvd3RoID0gTWluaW11bShmaWVsZC0+bWF4Z3JvdyAtIGZpZWxkLT5kY29scywgZ3Jvd3RoKTsKKwkgIGZpZWxkLT5kY29scyArPSBncm93dGg7CisJICBpZiAoZmllbGQtPmRjb2xzID09IGZpZWxkLT5tYXhncm93KQorCSAgICBmaWVsZC0+c3RhdHVzICY9IH5fTUFZX0dST1c7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGdyb3d0aCA9IChmaWVsZC0+cm93cyArIGZpZWxkLT5ucm93KSAqIGFtb3VudDsKKwkgIGlmIChmaWVsZC0+bWF4Z3JvdykKKwkgICAgZ3Jvd3RoID0gTWluaW11bShmaWVsZC0+bWF4Z3JvdyAtIGZpZWxkLT5kcm93cywgZ3Jvd3RoKTsKKwkgIGZpZWxkLT5kcm93cyArPSBncm93dGg7CisJICBpZiAoZmllbGQtPmRyb3dzID09IGZpZWxkLT5tYXhncm93KQorCSAgICBmaWVsZC0+c3RhdHVzICY9IH5fTUFZX0dST1c7CisJfQorICAgICAgLyogZHJvd3MsIGRjb2xzIGNoYW5nZWQsIHNvIHdlIGdldCByZWFsbHkgdGhlIG5ldyBidWZmZXIgbGVuZ3RoICovCisgICAgICBuZXdfYnVmbGVuID0gQnVmZmVyX0xlbmd0aChmaWVsZCk7CisgICAgICBuZXdidWYgPSAoRklFTERfQ0VMTCAqKW1hbGxvYyhUb3RhbF9CdWZmZXJfU2l6ZShmaWVsZCkpOworICAgICAgaWYgKCFuZXdidWYpCisJeworCSAgLyogcmVzdG9yZSB0byBwcmV2aW91cyBzdGF0ZSAqLworCSAgZmllbGQtPmRjb2xzID0gb2xkX2Rjb2xzOworCSAgZmllbGQtPmRyb3dzID0gb2xkX2Ryb3dzOworCSAgaWYgKChzaW5nbGVfbGluZV9maWVsZCAmJiAoZmllbGQtPmRjb2xzICE9IGZpZWxkLT5tYXhncm93KSkgfHwKKwkgICAgICAoIXNpbmdsZV9saW5lX2ZpZWxkICYmIChmaWVsZC0+ZHJvd3MgIT0gZmllbGQtPm1heGdyb3cpKSkKKwkgICAgZmllbGQtPnN0YXR1cyB8PSBfTUFZX0dST1c7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIENvcHkgYWxsIHRoZSBidWZmZXJzLiAgVGhpcyBpcyB0aGUgcmVhc29uIHdoeSB3ZSBjYW4ndCBqdXN0IHVzZQorCSAgICogcmVhbGxvYygpLgorCSAgICovCisJICBpbnQgaSwgajsKKwkgIEZJRUxEX0NFTEwgKm9sZF9icDsKKwkgIEZJRUxEX0NFTEwgKm5ld19icDsKKworCSAgcmVzdWx0ID0gVFJVRTsJLyogYWxsb3cgc2hhcmluZyBvZiByZWNvdmVyeSBvbiBmYWlsdXJlICovCisKKwkgIFQoKFRfQ1JFQVRFKCJmaWVsZGNlbGwgJXAiKSwgbmV3YnVmKSk7CisJICBmaWVsZC0+YnVmID0gbmV3YnVmOworCSAgZm9yIChpID0gMDsgaSA8PSBmaWVsZC0+bmJ1ZjsgaSsrKQorCSAgICB7CisJICAgICAgbmV3X2JwID0gQWRkcmVzc19PZl9OdGhfQnVmZmVyKGZpZWxkLCBpKTsKKwkgICAgICBvbGRfYnAgPSBvbGRidWYgKyBpICogKDEgKyBvbGRfYnVmbGVuKTsKKwkgICAgICBmb3IgKGogPSAwOyBqIDwgb2xkX2J1ZmxlbjsgKytqKQorCQluZXdfYnBbal0gPSBvbGRfYnBbal07CisJICAgICAgd2hpbGUgKGogPCBuZXdfYnVmbGVuKQorCQluZXdfYnBbaisrXSA9IG15QkxBTks7CisJICAgICAgbmV3X2JwW25ld19idWZsZW5dID0gbXlaRVJPUzsKKwkgICAgfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQgJiYgTkNVUlNFU19FWFRfRlVOQ1MKKwkgIGlmICh3cmVzaXplKGZpZWxkLT53b3JraW5nLCAxLCBCdWZmZXJfTGVuZ3RoKGZpZWxkKSArIDEpID09IEVSUikKKwkgICAgcmVzdWx0ID0gRkFMU0U7CisjZW5kaWYKKworCSAgaWYgKG5lZWRfdmlzdWFsX3VwZGF0ZSAmJiByZXN1bHQpCisJICAgIHsKKwkgICAgICBXSU5ET1cgKm5ld193aW5kb3cgPSBuZXdwYWQoZmllbGQtPmRyb3dzLCBmaWVsZC0+ZGNvbHMpOworCisJICAgICAgaWYgKG5ld193aW5kb3cgIT0gMCkKKwkJeworCQkgIGFzc2VydChmb3JtICE9IChGT1JNICopMCk7CisJCSAgaWYgKGZvcm0tPncpCisJCSAgICBkZWx3aW4oZm9ybS0+dyk7CisJCSAgZm9ybS0+dyA9IG5ld193aW5kb3c7CisJCSAgU2V0X0ZpZWxkX1dpbmRvd19BdHRyaWJ1dGVzKGZpZWxkLCBmb3JtLT53KTsKKwkJICB3ZXJhc2UoZm9ybS0+dyk7CisJCSAgQnVmZmVyX1RvX1dpbmRvdyhmaWVsZCwgZm9ybS0+dyk7CisJCSAgdW50b3VjaHdpbihmb3JtLT53KTsKKwkJICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisJCX0KKwkgICAgICBlbHNlCisJCXJlc3VsdCA9IEZBTFNFOworCSAgICB9CisKKwkgIGlmIChyZXN1bHQpCisJICAgIHsKKwkgICAgICBmcmVlKG9sZGJ1Zik7CisJICAgICAgLyogcmVmbGVjdCBjaGFuZ2VzIGluIGxpbmtlZCBmaWVsZHMgKi8KKwkgICAgICBpZiAoZmllbGQgIT0gZmllbGQtPmxpbmspCisJCXsKKwkJICBGSUVMRCAqbGlua2VkX2ZpZWxkOworCisJCSAgZm9yIChsaW5rZWRfZmllbGQgPSBmaWVsZC0+bGluazsKKwkJICAgICAgIGxpbmtlZF9maWVsZCAhPSBmaWVsZDsKKwkJICAgICAgIGxpbmtlZF9maWVsZCA9IGxpbmtlZF9maWVsZC0+bGluaykKKwkJICAgIHsKKwkJICAgICAgbGlua2VkX2ZpZWxkLT5idWYgPSBmaWVsZC0+YnVmOworCQkgICAgICBsaW5rZWRfZmllbGQtPmRyb3dzID0gZmllbGQtPmRyb3dzOworCQkgICAgICBsaW5rZWRfZmllbGQtPmRjb2xzID0gZmllbGQtPmRjb2xzOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIHJlc3RvcmUgb2xkIHN0YXRlICovCisJICAgICAgZmllbGQtPmRjb2xzID0gb2xkX2Rjb2xzOworCSAgICAgIGZpZWxkLT5kcm93cyA9IG9sZF9kcm93czsKKwkgICAgICBmaWVsZC0+YnVmID0gb2xkYnVmOworCSAgICAgIGlmICgoc2luZ2xlX2xpbmVfZmllbGQgJiYKKwkJICAgKGZpZWxkLT5kY29scyAhPSBmaWVsZC0+bWF4Z3JvdykpIHx8CisJCSAgKCFzaW5nbGVfbGluZV9maWVsZCAmJgorCQkgICAoZmllbGQtPmRyb3dzICE9IGZpZWxkLT5tYXhncm93KSkpCisJCWZpZWxkLT5zdGF0dXMgfD0gX01BWV9HUk9XOworCSAgICAgIGZyZWUobmV3YnVmKTsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiAocmVzdWx0KTsKK30KKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgRmllbGRfZW5jbG9zZXMoRklFTEQgKmZpZWxkLCBpbnQgcnksIGludCByeCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIGlmIHRoZSBnaXZlbiBjb29yZGluYXRlcyBsaWUgd2l0aGluIHRoZSBnaXZlbiBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBpbnZhbGlkIGZvcm0gcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLSBmb3JtIGhhcyBubyBjdXJyZW50IGZpZWxkIG9yCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLXdpbmRvdworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZpZWxkX2VuY2xvc2VzKEZJRUxEICpmaWVsZCwgaW50IHJ5LCBpbnQgcngpCit7CisgIFQoKFRfQ0FMTEVEKCJGaWVsZF9lbmNsb3NlcyglcCkiKSwgZmllbGQpKTsKKyAgaWYgKGZpZWxkICE9IDAKKyAgICAgICYmIGZpZWxkLT5mcm93IDw9IHJ5CisgICAgICAmJiAoZmllbGQtPmZyb3cgKyBmaWVsZC0+cm93cykgPiByeQorICAgICAgJiYgZmllbGQtPmZjb2wgPD0gcngKKyAgICAgICYmIChmaWVsZC0+ZmNvbCArIGZpZWxkLT5jb2xzKSA+IHJ4KQorICAgIHsKKyAgICAgIFJFVFVSTihFX09LKTsKKyAgICB9CisgIFJFVFVSTihFX0lOVkFMSURfRklFTEQpOworfQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IF9uY19Qb3NpdGlvbl9Gb3JtX0N1cnNvcihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhlIHdpbmRvdyBmb3IgdGhlIGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkIHRvIGJlIGluIHN5bmMuIHdpdGggdGhlIGN1cnJvdyBhbmQgY3VyY29sCit8ICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBmb3JtIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gZm9ybSBoYXMgbm8gY3VycmVudCBmaWVsZCBvcgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC13aW5kb3cKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkOworICBXSU5ET1cgKmZvcm13aW47CisKKyAgaWYgKCFmb3JtKQorICAgIHJldHVybiAoRV9CQURfQVJHVU1FTlQpOworCisgIGlmICghZm9ybS0+dyB8fCAhZm9ybS0+Y3VycmVudCkKKyAgICByZXR1cm4gKEVfU1lTVEVNX0VSUk9SKTsKKworICBmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGZvcm13aW4gPSBHZXRfRm9ybV9XaW5kb3coZm9ybSk7CisKKyAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICBpZiAoSGFzX0ludmlzaWJsZV9QYXJ0cyhmaWVsZCkpCisgICAgeworICAgICAgLyogaW4gdGhpcyBjYXNlIGZpZWxkd2luIGlzbid0IGRlcml2ZWQgZnJvbSBmb3Jtd2luLCBzbyB3ZSBoYXZlCisgICAgICAgICB0byBtb3ZlIHRoZSBjdXJzb3IgaW4gZm9ybXdpbiBieSBoYW5kLi4uICovCisgICAgICB3bW92ZShmb3Jtd2luLAorCSAgICBmaWVsZC0+ZnJvdyArIGZvcm0tPmN1cnJvdyAtIGZvcm0tPnRvcHJvdywKKwkgICAgZmllbGQtPmZjb2wgKyBmb3JtLT5jdXJjb2wgLSBmb3JtLT5iZWdpbmNvbCk7CisgICAgICB3Y3Vyc3luY3VwKGZvcm13aW4pOworICAgIH0KKyAgZWxzZQorICAgIHdjdXJzeW5jdXAoZm9ybS0+dyk7CisgIHJldHVybiAoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQcm9wYWdhdGUgdGhlIGNoYW5nZXMgaW4gdGhlIGZpZWxkcyB3aW5kb3cgdG8gdGhlCit8ICAgICAgICAgICAgICAgICAgICB3aW5kb3cgb2YgdGhlIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBmb3JtIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gZ2VuZXJhbCBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgV0lORE9XICpmb3Jtd2luOworICBGSUVMRCAqZmllbGQ7CisKKyAgVCgoVF9DQUxMRUQoIl9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoJXApIiksIGZvcm0pKTsKKworICBpZiAoIWZvcm0pCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoIWZvcm0tPncgfHwgIWZvcm0tPmN1cnJlbnQpCisgICAgUkVUVVJOKEVfU1lTVEVNX0VSUk9SKTsKKworICBmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGZvcm13aW4gPSBHZXRfRm9ybV9XaW5kb3coZm9ybSk7CisKKyAgaWYgKGZpZWxkLT5vcHRzICYgT19QVUJMSUMpCisgICAgeworICAgICAgaWYgKElzX1Njcm9sbF9GaWVsZChmaWVsZCkpCisJeworCSAgLyogQWdhaW4sIGluIHRoaXMgY2FzZSB0aGUgZmllbGR3aW4gaXNuJ3QgZGVyaXZlZCBmcm9tIGZvcm13aW4sCisJICAgICBzbyB3ZSBoYXZlIHRvIHBlcmZvcm0gYSBjb3B5IG9wZXJhdGlvbi4gKi8KKwkgIGlmIChTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkpCisJICAgIHsKKwkgICAgICAvKiBob3Jpem9udGFsIHNjcm9sbGluZyAqLworCSAgICAgIGlmIChmb3JtLT5jdXJjb2wgPCBmb3JtLT5iZWdpbmNvbCkKKwkJZm9ybS0+YmVnaW5jb2wgPSBmb3JtLT5jdXJjb2w7CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKGZvcm0tPmN1cmNvbCA+PSAoZm9ybS0+YmVnaW5jb2wgKyBmaWVsZC0+Y29scykpCisJCSAgICBmb3JtLT5iZWdpbmNvbCA9IGZvcm0tPmN1cmNvbCAtIGZpZWxkLT5jb2xzICsgMTsKKwkJfQorCSAgICAgIGNvcHl3aW4oZm9ybS0+dywKKwkJICAgICAgZm9ybXdpbiwKKwkJICAgICAgMCwKKwkJICAgICAgZm9ybS0+YmVnaW5jb2wsCisJCSAgICAgIGZpZWxkLT5mcm93LAorCQkgICAgICBmaWVsZC0+ZmNvbCwKKwkJICAgICAgZmllbGQtPmZyb3csCisJCSAgICAgIGZpZWxkLT5jb2xzICsgZmllbGQtPmZjb2wgLSAxLAorCQkgICAgICAwKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogQSBtdWx0aS1saW5lLCBpLmUuIHZlcnRpY2FsIHNjcm9sbGluZyBmaWVsZCAqLworCSAgICAgIGludCByb3dfYWZ0ZXJfYm90dG9tLCBmaXJzdF9tb2RpZmllZF9yb3csIGZpcnN0X3VubW9kaWZpZWRfcm93OworCisJICAgICAgaWYgKGZpZWxkLT5kcm93cyA+IGZpZWxkLT5yb3dzKQorCQl7CisJCSAgcm93X2FmdGVyX2JvdHRvbSA9IGZvcm0tPnRvcHJvdyArIGZpZWxkLT5yb3dzOworCQkgIGlmIChmb3JtLT5jdXJyb3cgPCBmb3JtLT50b3Byb3cpCisJCSAgICB7CisJCSAgICAgIGZvcm0tPnRvcHJvdyA9IGZvcm0tPmN1cnJvdzsKKwkJICAgICAgZmllbGQtPnN0YXR1cyB8PSBfTkVXVE9QOworCQkgICAgfQorCQkgIGlmIChmb3JtLT5jdXJyb3cgPj0gcm93X2FmdGVyX2JvdHRvbSkKKwkJICAgIHsKKwkJICAgICAgZm9ybS0+dG9wcm93ID0gZm9ybS0+Y3Vycm93IC0gZmllbGQtPnJvd3MgKyAxOworCQkgICAgICBmaWVsZC0+c3RhdHVzIHw9IF9ORVdUT1A7CisJCSAgICB9CisJCSAgaWYgKGZpZWxkLT5zdGF0dXMgJiBfTkVXVE9QKQorCQkgICAgeworCQkgICAgICAvKiBtZWFucyB3ZSBoYXZlIHRvIGNvcHkgd2hvbGUgcmFuZ2UgKi8KKwkJICAgICAgZmlyc3RfbW9kaWZpZWRfcm93ID0gZm9ybS0+dG9wcm93OworCQkgICAgICBmaXJzdF91bm1vZGlmaWVkX3JvdyA9IGZpcnN0X21vZGlmaWVkX3JvdyArIGZpZWxkLT5yb3dzOworCQkgICAgICBmaWVsZC0+c3RhdHVzICY9IH5fTkVXVE9QOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogd2UgdHJ5IHRvIG9wdGltaXplIDogZmluZGluZyB0aGUgcmFuZ2Ugb2YgdG91Y2hlZAorCQkgICAgICAgICBsaW5lcyAqLworCQkgICAgICBmaXJzdF9tb2RpZmllZF9yb3cgPSBmb3JtLT50b3Byb3c7CisJCSAgICAgIHdoaWxlIChmaXJzdF9tb2RpZmllZF9yb3cgPCByb3dfYWZ0ZXJfYm90dG9tKQorCQkJeworCQkJICBpZiAoaXNfbGluZXRvdWNoZWQoZm9ybS0+dywgZmlyc3RfbW9kaWZpZWRfcm93KSkKKwkJCSAgICBicmVhazsKKwkJCSAgZmlyc3RfbW9kaWZpZWRfcm93Kys7CisJCQl9CisJCSAgICAgIGZpcnN0X3VubW9kaWZpZWRfcm93ID0gZmlyc3RfbW9kaWZpZWRfcm93OworCQkgICAgICB3aGlsZSAoZmlyc3RfdW5tb2RpZmllZF9yb3cgPCByb3dfYWZ0ZXJfYm90dG9tKQorCQkJeworCQkJICBpZiAoIWlzX2xpbmV0b3VjaGVkKGZvcm0tPncsIGZpcnN0X3VubW9kaWZpZWRfcm93KSkKKwkJCSAgICBicmVhazsKKwkJCSAgZmlyc3RfdW5tb2RpZmllZF9yb3crKzsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGZpcnN0X21vZGlmaWVkX3JvdyA9IGZvcm0tPnRvcHJvdzsKKwkJICBmaXJzdF91bm1vZGlmaWVkX3JvdyA9IGZpcnN0X21vZGlmaWVkX3JvdyArIGZpZWxkLT5yb3dzOworCQl9CisJICAgICAgaWYgKGZpcnN0X3VubW9kaWZpZWRfcm93ICE9IGZpcnN0X21vZGlmaWVkX3JvdykKKwkJY29weXdpbihmb3JtLT53LAorCQkJZm9ybXdpbiwKKwkJCWZpcnN0X21vZGlmaWVkX3JvdywKKwkJCTAsCisJCQlmaWVsZC0+ZnJvdyArIGZpcnN0X21vZGlmaWVkX3JvdyAtIGZvcm0tPnRvcHJvdywKKwkJCWZpZWxkLT5mY29sLAorCQkJZmllbGQtPmZyb3cgKyBmaXJzdF91bm1vZGlmaWVkX3JvdyAtIGZvcm0tPnRvcHJvdyAtIDEsCisJCQlmaWVsZC0+Y29scyArIGZpZWxkLT5mY29sIC0gMSwKKwkJCTApOworCSAgICB9CisJICB3c3luY3VwKGZvcm13aW4pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBpZiB0aGUgZmllbGQtd2luZG93IGlzIHNpbXBseSBhIGRlcml2ZWQgd2luZG93LCBpLmUuIGNvbnRhaW5zIG5vCisJICAgKiBpbnZpc2libGUgcGFydHMsIHRoZSB3aG9sZSB0aGluZyBpcyB0cml2aWFsCisJICAgKi8KKwkgIHdzeW5jdXAoZm9ybS0+dyk7CisJfQorICAgIH0KKyAgdW50b3VjaHdpbihmb3JtLT53KTsKKyAgcmV0dXJuQ29kZShfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IoZm9ybSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIFBlcmZvcm1fSnVzdGlmaWNhdGlvbigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkRPVyAqIHdpbikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE91dHB1dCBmaWVsZCB3aXRoIHJlcXVlc3RlZCBqdXN0aWZpY2F0aW9uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK1BlcmZvcm1fSnVzdGlmaWNhdGlvbihGSUVMRCAqZmllbGQsIFdJTkRPVyAqd2luKQoreworICBGSUVMRF9DRUxMICpicDsKKyAgaW50IGxlbjsKKyAgaW50IGNvbCA9IDA7CisKKyAgYnAgPSBHZXRfU3RhcnRfT2ZfRGF0YShmaWVsZC0+YnVmLCBCdWZmZXJfTGVuZ3RoKGZpZWxkKSk7CisgIGxlbiA9IChpbnQpKEFmdGVyX0VuZF9PZl9EYXRhKGZpZWxkLT5idWYsIEJ1ZmZlcl9MZW5ndGgoZmllbGQpKSAtIGJwKTsKKworICBpZiAobGVuID4gMCkKKyAgICB7CisgICAgICBhc3NlcnQod2luICYmIChmaWVsZC0+ZHJvd3MgPT0gMSkgJiYgKGZpZWxkLT5kY29scyA9PSBmaWVsZC0+Y29scykpOworCisgICAgICBzd2l0Y2ggKGZpZWxkLT5qdXN0KQorCXsKKwljYXNlIEpVU1RJRllfTEVGVDoKKwkgIGJyZWFrOworCWNhc2UgSlVTVElGWV9DRU5URVI6CisJICBjb2wgPSAoZmllbGQtPmNvbHMgLSBsZW4pIC8gMjsKKwkgIGJyZWFrOworCWNhc2UgSlVTVElGWV9SSUdIVDoKKwkgIGNvbCA9IGZpZWxkLT5jb2xzIC0gbGVuOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKworICAgICAgd21vdmUod2luLCAwLCBjb2wpOworICAgICAgbXlBREROU1RSKHdpbiwgYnAsIGxlbik7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIFVuZG9fSnVzdGlmaWNhdGlvbigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkRPVyAqIHdpbikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIERpc3BsYXkgZmllbGQgd2l0aG91dCBhbnkganVzdGlmaWNhdGlvbiwgaS5lLgorfCAgICAgICAgICAgICAgICAgICAgbGVmdCBqdXN0aWZpZWQKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorVW5kb19KdXN0aWZpY2F0aW9uKEZJRUxEICpmaWVsZCwgV0lORE9XICp3aW4pCit7CisgIEZJRUxEX0NFTEwgKmJwOworICBpbnQgbGVuOworCisgIGJwID0gR2V0X1N0YXJ0X09mX0RhdGEoZmllbGQtPmJ1ZiwgQnVmZmVyX0xlbmd0aChmaWVsZCkpOworICBsZW4gPSAoaW50KShBZnRlcl9FbmRfT2ZfRGF0YShmaWVsZC0+YnVmLCBCdWZmZXJfTGVuZ3RoKGZpZWxkKSkgLSBicCk7CisKKyAgaWYgKGxlbiA+IDApCisgICAgeworICAgICAgYXNzZXJ0KHdpbik7CisgICAgICB3bW92ZSh3aW4sIDAsIDApOworICAgICAgbXlBREROU1RSKHdpbiwgYnAsIGxlbik7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX0NoYXIoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqIHR5cCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQXJndW1lbnQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQZXJmb3JtIGEgc2luZ2xlIGNoYXJhY3RlciBjaGVjayBmb3IgY2hhcmFjdGVyIGNoCit8ICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGZpZWxkdHlwZSBpbnN0YW5jZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAgICAgICAgICAgLSBDaGFyYWN0ZXIgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAgICAgICAgICAgLSBDaGFyYWN0ZXIgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19DaGFyKEZJRUxEVFlQRSAqdHlwLCBpbnQgY2gsIFR5cGVBcmd1bWVudCAqYXJncCkKK3sKKyAgaWYgKHR5cCkKKyAgICB7CisgICAgICBpZiAodHlwLT5zdGF0dXMgJiBfTElOS0VEX1RZUEUpCisJeworCSAgYXNzZXJ0KGFyZ3ApOworCSAgcmV0dXJuICgKKwkJICAgQ2hlY2tfQ2hhcih0eXAtPmxlZnQsIGNoLCBhcmdwLT5sZWZ0KSB8fAorCQkgICBDaGVja19DaGFyKHR5cC0+cmlnaHQsIGNoLCBhcmdwLT5yaWdodCkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAodHlwLT5jY2hlY2spCisJICAgIHJldHVybiB0eXAtPmNjaGVjayhjaCwgKHZvaWQgKilhcmdwKTsKKwl9CisgICAgfQorICByZXR1cm4gKCFpc2NudHJsKFVDaGFyKGNoKSkgPyBUUlVFIDogRkFMU0UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRGlzcGxheV9Pcl9FcmFzZV9GaWVsZCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiRXJhc2VGbGFnKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ3JlYXRlIGEgc3Vid2luZG93IGZvciB0aGUgZmllbGQgYW5kIGRpc3BsYXkgdGhlCit8ICAgICAgICAgICAgICAgICAgICBidWZmZXIgY29udGVudHMgKGFwcGx5IGp1c3RpZmljYXRpb24gaWYgcmVxdWlyZWQpCit8ICAgICAgICAgICAgICAgICAgICBvciBzaW1wbHkgZXJhc2UgdGhlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAtIHNvbWUgZXJyb3IgKHR5cGljYWwgbm8gbWVtb3J5KQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0Rpc3BsYXlfT3JfRXJhc2VfRmllbGQoRklFTEQgKmZpZWxkLCBib29sIGJFcmFzZUZsYWcpCit7CisgIFdJTkRPVyAqd2luOworICBXSU5ET1cgKmZ3aW47CisKKyAgaWYgKCFmaWVsZCkKKyAgICByZXR1cm4gRV9TWVNURU1fRVJST1I7CisKKyAgZndpbiA9IEdldF9Gb3JtX1dpbmRvdyhmaWVsZC0+Zm9ybSk7CisgIHdpbiA9IGRlcndpbihmd2luLAorCSAgICAgICBmaWVsZC0+cm93cywgZmllbGQtPmNvbHMsIGZpZWxkLT5mcm93LCBmaWVsZC0+ZmNvbCk7CisKKyAgaWYgKCF3aW4pCisgICAgcmV0dXJuIEVfU1lTVEVNX0VSUk9SOworICBlbHNlCisgICAgeworICAgICAgaWYgKGZpZWxkLT5vcHRzICYgT19WSVNJQkxFKQorCVNldF9GaWVsZF9XaW5kb3dfQXR0cmlidXRlcyhmaWVsZCwgd2luKTsKKyAgICAgIGVsc2UKKwl3YXR0cnNldCh3aW4sIFdJTkRPV19BVFRSUyhmd2luKSk7CisgICAgICB3ZXJhc2Uod2luKTsKKyAgICB9CisKKyAgaWYgKCFiRXJhc2VGbGFnKQorICAgIHsKKyAgICAgIGlmIChmaWVsZC0+b3B0cyAmIE9fUFVCTElDKQorCXsKKwkgIGlmIChKdXN0aWZpY2F0aW9uX0FsbG93ZWQoZmllbGQpKQorCSAgICBQZXJmb3JtX0p1c3RpZmljYXRpb24oZmllbGQsIHdpbik7CisJICBlbHNlCisJICAgIEJ1ZmZlcl9Ub19XaW5kb3coZmllbGQsIHdpbik7CisJfQorICAgICAgZmllbGQtPnN0YXR1cyAmPSB+X05FV1RPUDsKKyAgICB9CisgIHdzeW5jdXAod2luKTsKKyAgZGVsd2luKHdpbik7CisgIHJldHVybiBFX09LOworfQorCisvKiBNYWNyb3MgdG8gcHJlc2V0IHRoZSBiRXJhc2VGbGFnICovCisjZGVmaW5lIERpc3BsYXlfRmllbGQoZmllbGQpIERpc3BsYXlfT3JfRXJhc2VfRmllbGQoZmllbGQsRkFMU0UpCisjZGVmaW5lIEVyYXNlX0ZpZWxkKGZpZWxkKSAgIERpc3BsYXlfT3JfRXJhc2VfRmllbGQoZmllbGQsVFJVRSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFN5bmNocm9uaXplX0ZpZWxkKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTeW5jaHJvbml6ZSB0aGUgd2luZG93cyBjb250ZW50IHdpdGggdGhlIHZhbHVlIGluCit8ICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgICAgLSBpbnZhbGlkIGZpZWxkIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgICAgLSBzb21lIHNldmVyZSBiYXNpYyBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1N5bmNocm9uaXplX0ZpZWxkKEZJRUxEICpmaWVsZCkKK3sKKyAgRk9STSAqZm9ybTsKKyAgaW50IHJlcyA9IEVfT0s7CisKKyAgaWYgKCFmaWVsZCkKKyAgICByZXR1cm4gKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoKChmb3JtID0gZmllbGQtPmZvcm0pICE9IChGT1JNICopMCkKKyAgICAgICYmIEZpZWxkX1JlYWxseV9BcHBlYXJzKGZpZWxkKSkKKyAgICB7CisgICAgICBpZiAoZmllbGQgPT0gZm9ybS0+Y3VycmVudCkKKwl7CisJICBmb3JtLT5jdXJyb3cgPSBmb3JtLT5jdXJjb2wgPSBmb3JtLT50b3Byb3cgPSBmb3JtLT5iZWdpbmNvbCA9IDA7CisJICB3ZXJhc2UoZm9ybS0+dyk7CisKKwkgIGlmICgoZmllbGQtPm9wdHMgJiBPX1BVQkxJQykgJiYgSnVzdGlmaWNhdGlvbl9BbGxvd2VkKGZpZWxkKSkKKwkgICAgVW5kb19KdXN0aWZpY2F0aW9uKGZpZWxkLCBmb3JtLT53KTsKKwkgIGVsc2UKKwkgICAgQnVmZmVyX1RvX1dpbmRvdyhmaWVsZCwgZm9ybS0+dyk7CisKKwkgIGZpZWxkLT5zdGF0dXMgfD0gX05FV1RPUDsKKwkgIHJlcyA9IF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoZm9ybSk7CisJfQorICAgICAgZWxzZQorCXJlcyA9IERpc3BsYXlfRmllbGQoZmllbGQpOworICAgIH0KKyAgZmllbGQtPnN0YXR1cyB8PSBfQ0hBTkdFRDsKKyAgcmV0dXJuIChyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgU3luY2hyb25pemVfTGlua2VkX0ZpZWxkcyhGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUHJvcGFnYXRlIHRoZSBTeW5jaHJvbml6ZV9GaWVsZCBmdW5jdGlvbiB0byBhbGwgbGlua2VkCit8ICAgICAgICAgICAgICAgICAgICBmaWVsZHMuIFRoZSBmaXJzdCBlcnJvciB0aGF0IG9jY3VycyBpbiB0aGUgc2VxdWVuY2UKK3wgICAgICAgICAgICAgICAgICAgIG9mIHVwZGF0ZXMgaXMgdGhlIHJldHVybiB2YWx1ZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAgIC0gaW52YWxpZCBmaWVsZCBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAgIC0gc29tZSBzZXZlcmUgYmFzaWMgZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitTeW5jaHJvbml6ZV9MaW5rZWRfRmllbGRzKEZJRUxEICpmaWVsZCkKK3sKKyAgRklFTEQgKmxpbmtlZF9maWVsZDsKKyAgaW50IHJlcyA9IEVfT0s7CisgIGludCBzeW5jcmVzOworCisgIGlmICghZmllbGQpCisgICAgcmV0dXJuIChFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKCFmaWVsZC0+bGluaykKKyAgICByZXR1cm4gKEVfU1lTVEVNX0VSUk9SKTsKKworICBmb3IgKGxpbmtlZF9maWVsZCA9IGZpZWxkLT5saW5rOworICAgICAgIGxpbmtlZF9maWVsZCAhPSBmaWVsZDsKKyAgICAgICBsaW5rZWRfZmllbGQgPSBsaW5rZWRfZmllbGQtPmxpbmspCisgICAgeworICAgICAgaWYgKCgoc3luY3JlcyA9IFN5bmNocm9uaXplX0ZpZWxkKGxpbmtlZF9maWVsZCkpICE9IEVfT0spICYmCisJICAocmVzID09IEVfT0spKQorCXJlcyA9IHN5bmNyZXM7CisgICAgfQorICByZXR1cm4gKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IF9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBJZiBhIGZpZWxkcyB2aXN1YWwgYXR0cmlidXRlcyBoYXZlIGNoYW5nZWQsIHRoaXMKK3wgICAgICAgICAgICAgICAgICAgIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHByb3BhZ2F0ZSB0aG9zZSBjaGFuZ2VzIHRvIHRoZQorfCAgICAgICAgICAgICAgICAgICAgc2NyZWVuLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgLSBpbnZhbGlkIGZpZWxkIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgLSBzb21lIHNldmVyZSBiYXNpYyBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzKEZJRUxEICpmaWVsZCkKK3sKKyAgRk9STSAqZm9ybTsKKyAgaW50IHJlcyA9IEVfT0s7CisgIFdJTkRPVyAqZm9ybXdpbjsKKworICBUKChUX0NBTExFRCgiX25jX1N5bmNocm9uaXplX0F0dHJpYnV0ZXMoJXApIiksIGZpZWxkKSk7CisKKyAgaWYgKCFmaWVsZCkKKyAgICByZXR1cm5Db2RlKEVfQkFEX0FSR1VNRU5UKTsKKworICBDSEVDS1BPUyhmaWVsZC0+Zm9ybSk7CisgIGlmICgoKGZvcm0gPSBmaWVsZC0+Zm9ybSkgIT0gKEZPUk0gKikwKQorICAgICAgJiYgRmllbGRfUmVhbGx5X0FwcGVhcnMoZmllbGQpKQorICAgIHsKKyAgICAgIGlmIChmb3JtLT5jdXJyZW50ID09IGZpZWxkKQorCXsKKwkgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKwkgIFNldF9GaWVsZF9XaW5kb3dfQXR0cmlidXRlcyhmaWVsZCwgZm9ybS0+dyk7CisJICB3ZXJhc2UoZm9ybS0+dyk7CisJICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisKKwkgIGlmIChmaWVsZC0+b3B0cyAmIE9fUFVCTElDKQorCSAgICB7CisJICAgICAgaWYgKEp1c3RpZmljYXRpb25fQWxsb3dlZChmaWVsZCkpCisJCVVuZG9fSnVzdGlmaWNhdGlvbihmaWVsZCwgZm9ybS0+dyk7CisJICAgICAgZWxzZQorCQlCdWZmZXJfVG9fV2luZG93KGZpZWxkLCBmb3JtLT53KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZm9ybXdpbiA9IEdldF9Gb3JtX1dpbmRvdyhmb3JtKTsKKwkgICAgICBjb3B5d2luKGZvcm0tPncsIGZvcm13aW4sCisJCSAgICAgIDAsIDAsCisJCSAgICAgIGZpZWxkLT5mcm93LCBmaWVsZC0+ZmNvbCwKKwkJICAgICAgZmllbGQtPnJvd3MgLSAxLCBmaWVsZC0+Y29scyAtIDEsIDApOworCSAgICAgIHdzeW5jdXAoZm9ybXdpbik7CisJICAgICAgQnVmZmVyX1RvX1dpbmRvdyhmaWVsZCwgZm9ybS0+dyk7CisJICAgICAgZmllbGQtPnN0YXR1cyB8PSBfTkVXVE9QOwkJLyogZmFrZSByZWZyZXNoIHRvIHBhaW50IGFsbCAqLworCSAgICAgIF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoZm9ybSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgcmVzID0gRGlzcGxheV9GaWVsZChmaWVsZCk7CisJfQorICAgIH0KKyAgQ0hFQ0tQT1MoZm9ybSk7CisgIHJldHVybkNvZGUocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgX25jX1N5bmNocm9uaXplX09wdGlvbnMoRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZF9PcHRpb25zIG5ld29wdHMpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBJZiBhIGZpZWxkcyBvcHRpb25zIGhhdmUgY2hhbmdlZCwgdGhpcyByb3V0aW5lIGlzCit8ICAgICAgICAgICAgICAgICAgICBjYWxsZWQgdG8gcHJvcGFnYXRlIHRoZXNlIGNoYW5nZXMgdG8gdGhlIHNjcmVlbiBhbmQKK3wgICAgICAgICAgICAgICAgICAgIHRvIHJlYWxseSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAgIC0gaW52YWxpZCBmaWVsZCBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBFX0NVUlJFTlQgICAgICAgICAgIC0gZmllbGQgaXMgdGhlIGN1cnJlbnQgb25lCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAgIC0gc29tZSBzZXZlcmUgYmFzaWMgZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfU3luY2hyb25pemVfT3B0aW9ucyhGSUVMRCAqZmllbGQsIEZpZWxkX09wdGlvbnMgbmV3b3B0cykKK3sKKyAgRmllbGRfT3B0aW9ucyBvbGRvcHRzOworICBGaWVsZF9PcHRpb25zIGNoYW5nZWRfb3B0czsKKyAgRk9STSAqZm9ybTsKKyAgaW50IHJlcyA9IEVfT0s7CisKKyAgVCgoVF9DQUxMRUQoIl9uY19TeW5jaHJvbml6ZV9PcHRpb25zKCVwLCUjeCkiKSwgZmllbGQsIG5ld29wdHMpKTsKKworICBpZiAoIWZpZWxkKQorICAgIHJldHVybkNvZGUoRV9CQURfQVJHVU1FTlQpOworCisgIG9sZG9wdHMgPSBmaWVsZC0+b3B0czsKKyAgY2hhbmdlZF9vcHRzID0gb2xkb3B0cyBeIG5ld29wdHM7CisgIGZpZWxkLT5vcHRzID0gbmV3b3B0czsKKyAgZm9ybSA9IGZpZWxkLT5mb3JtOworCisgIGlmIChmb3JtKQorICAgIHsKKyAgICAgIGlmIChmb3JtLT5jdXJyZW50ID09IGZpZWxkKQorCXsKKwkgIGZpZWxkLT5vcHRzID0gb2xkb3B0czsKKwkgIHJldHVybkNvZGUoRV9DVVJSRU5UKTsKKwl9CisKKyAgICAgIGlmIChmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKQorCXsKKwkgIGlmICgoZm9ybS0+Y3VycGFnZSA9PSBmaWVsZC0+cGFnZSkpCisJICAgIHsKKwkgICAgICBpZiAoY2hhbmdlZF9vcHRzICYgT19WSVNJQkxFKQorCQl7CisJCSAgaWYgKG5ld29wdHMgJiBPX1ZJU0lCTEUpCisJCSAgICByZXMgPSBEaXNwbGF5X0ZpZWxkKGZpZWxkKTsKKwkJICBlbHNlCisJCSAgICByZXMgPSBFcmFzZV9GaWVsZChmaWVsZCk7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAoKGNoYW5nZWRfb3B0cyAmIE9fUFVCTElDKSAmJgorCQkgICAgICAobmV3b3B0cyAmIE9fVklTSUJMRSkpCisJCSAgICByZXMgPSBEaXNwbGF5X0ZpZWxkKGZpZWxkKTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICBpZiAoY2hhbmdlZF9vcHRzICYgT19TVEFUSUMpCisgICAgeworICAgICAgYm9vbCBzaW5nbGVfbGluZV9maWVsZCA9IFNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKTsKKyAgICAgIGludCByZXMyID0gRV9PSzsKKworICAgICAgaWYgKG5ld29wdHMgJiBPX1NUQVRJQykKKwl7CisJICAvKiB0aGUgZmllbGQgYmVjb21lcyBub3cgc3RhdGljICovCisJICBmaWVsZC0+c3RhdHVzICY9IH5fTUFZX0dST1c7CisJICAvKiBpZiBhY3R1YWxseSB3ZSBoYXZlIG5vIGhpZGRlbiBjb2x1bW5zLCBqdXN0aWZpY2F0aW9uIG1heQorCSAgICAgb2NjdXIgYWdhaW4gKi8KKwkgIGlmIChzaW5nbGVfbGluZV9maWVsZCAmJgorCSAgICAgIChmaWVsZC0+Y29scyA9PSBmaWVsZC0+ZGNvbHMpICYmCisJICAgICAgKGZpZWxkLT5qdXN0ICE9IE5PX0pVU1RJRklDQVRJT04pICYmCisJICAgICAgRmllbGRfUmVhbGx5X0FwcGVhcnMoZmllbGQpKQorCSAgICB7CisJICAgICAgcmVzMiA9IERpc3BsYXlfRmllbGQoZmllbGQpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIGZpZWxkIGlzIG5vIGxvbmdlciBzdGF0aWMgKi8KKwkgIGlmICgoZmllbGQtPm1heGdyb3cgPT0gMCkgfHwKKwkgICAgICAoc2luZ2xlX2xpbmVfZmllbGQgJiYgKGZpZWxkLT5kY29scyA8IGZpZWxkLT5tYXhncm93KSkgfHwKKwkgICAgICAoIXNpbmdsZV9saW5lX2ZpZWxkICYmIChmaWVsZC0+ZHJvd3MgPCBmaWVsZC0+bWF4Z3JvdykpKQorCSAgICB7CisJICAgICAgZmllbGQtPnN0YXR1cyB8PSBfTUFZX0dST1c7CisJICAgICAgLyogYSBmaWVsZCB3aXRoIGp1c3RpZmljYXRpb24gbm93IGNoYW5nZXMgaXRzIGJlaGF2aW9yLAorCSAgICAgICAgIHNvIHdlIG11c3QgcmVkaXNwbGF5IGl0ICovCisJICAgICAgaWYgKHNpbmdsZV9saW5lX2ZpZWxkICYmCisJCSAgKGZpZWxkLT5qdXN0ICE9IE5PX0pVU1RJRklDQVRJT04pICYmCisJCSAgRmllbGRfUmVhbGx5X0FwcGVhcnMoZmllbGQpKQorCQl7CisJCSAgcmVzMiA9IERpc3BsYXlfRmllbGQoZmllbGQpOworCQl9CisJICAgIH0KKwl9CisgICAgICBpZiAocmVzMiAhPSBFX09LKQorCXJlcyA9IHJlczI7CisgICAgfQorCisgIHJldHVybkNvZGUocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgX25jX1NldF9DdXJyZW50X0ZpZWxkKEZPUk0gICogZm9ybSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBuZXdmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1ha2UgdGhlIG5ld2ZpZWxkIHRoZSBuZXcgY3VycmVudCBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBpbnZhbGlkIGZvcm0gb3IgZmllbGQgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLSBzb21lIHNldmVyZSBiYXNpYyBlcnJvcgorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAgLSBubyBmaWVsZHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgZm9ybQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19TZXRfQ3VycmVudF9GaWVsZChGT1JNICpmb3JtLCBGSUVMRCAqbmV3ZmllbGQpCit7CisgIEZJRUxEICpmaWVsZDsKKyAgV0lORE9XICpuZXdfd2luZG93OworCisgIFQoKFRfQ0FMTEVEKCJfbmNfU2V0X0N1cnJlbnRfRmllbGQoJXAsJXApIiksIGZvcm0sIG5ld2ZpZWxkKSk7CisKKyAgaWYgKCFmb3JtIHx8ICFuZXdmaWVsZCB8fCAhZm9ybS0+Y3VycmVudCB8fCAobmV3ZmllbGQtPmZvcm0gIT0gZm9ybSkpCisgICAgcmV0dXJuQ29kZShFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKChmb3JtLT5zdGF0dXMgJiBfSU5fRFJJVkVSKSkKKyAgICByZXR1cm5Db2RlKEVfQkFEX1NUQVRFKTsKKworICBpZiAoIShmb3JtLT5maWVsZCkpCisgICAgcmV0dXJuQ29kZShFX05PVF9DT05ORUNURUQpOworCisgIGZpZWxkID0gZm9ybS0+Y3VycmVudDsKKworICBpZiAoKGZpZWxkICE9IG5ld2ZpZWxkKSB8fAorICAgICAgIShmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSkKKyAgICB7CisgICAgICBpZiAoKGZvcm0tPncpICYmCisJICAoZmllbGQtPm9wdHMgJiBPX1ZJU0lCTEUpICYmCisJICAoZmllbGQtPmZvcm0tPmN1cnBhZ2UgPT0gZmllbGQtPnBhZ2UpKQorCXsKKwkgIF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoZm9ybSk7CisJICBpZiAoZmllbGQtPm9wdHMgJiBPX1BVQkxJQykKKwkgICAgeworCSAgICAgIGlmIChmaWVsZC0+ZHJvd3MgPiBmaWVsZC0+cm93cykKKwkJeworCQkgIGlmIChmb3JtLT50b3Byb3cgPT0gMCkKKwkJICAgIGZpZWxkLT5zdGF0dXMgJj0gfl9ORVdUT1A7CisJCSAgZWxzZQorCQkgICAgZmllbGQtPnN0YXR1cyB8PSBfTkVXVE9QOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKEp1c3RpZmljYXRpb25fQWxsb3dlZChmaWVsZCkpCisJCSAgICB7CisJCSAgICAgIFdpbmRvd19Ub19CdWZmZXIoZm9ybS0+dywgZmllbGQpOworCQkgICAgICB3ZXJhc2UoZm9ybS0+dyk7CisJCSAgICAgIFBlcmZvcm1fSnVzdGlmaWNhdGlvbihmaWVsZCwgZm9ybS0+dyk7CisJCSAgICAgIHdzeW5jdXAoZm9ybS0+dyk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgZGVsd2luKGZvcm0tPncpOworCSAgZm9ybS0+dyA9IChXSU5ET1cgKikwOworCX0KKworICAgICAgZmllbGQgPSBuZXdmaWVsZDsKKworICAgICAgaWYgKEhhc19JbnZpc2libGVfUGFydHMoZmllbGQpKQorCW5ld193aW5kb3cgPSBuZXdwYWQoZmllbGQtPmRyb3dzLCBmaWVsZC0+ZGNvbHMpOworICAgICAgZWxzZQorCW5ld193aW5kb3cgPSBkZXJ3aW4oR2V0X0Zvcm1fV2luZG93KGZvcm0pLAorCQkJICAgIGZpZWxkLT5yb3dzLCBmaWVsZC0+Y29scywgZmllbGQtPmZyb3csIGZpZWxkLT5mY29sKTsKKworICAgICAgaWYgKCFuZXdfd2luZG93KQorCXJldHVybkNvZGUoRV9TWVNURU1fRVJST1IpOworCisgICAgICBmb3JtLT5jdXJyZW50ID0gZmllbGQ7CisKKyAgICAgIGlmIChmb3JtLT53KQorCWRlbHdpbihmb3JtLT53KTsKKyAgICAgIGZvcm0tPncgPSBuZXdfd2luZG93OworCisgICAgICBmb3JtLT5zdGF0dXMgJj0gfl9XSU5ET1dfTU9ESUZJRUQ7CisgICAgICBTZXRfRmllbGRfV2luZG93X0F0dHJpYnV0ZXMoZmllbGQsIGZvcm0tPncpOworCisgICAgICBpZiAoSGFzX0ludmlzaWJsZV9QYXJ0cyhmaWVsZCkpCisJeworCSAgd2VyYXNlKGZvcm0tPncpOworCSAgQnVmZmVyX1RvX1dpbmRvdyhmaWVsZCwgZm9ybS0+dyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChKdXN0aWZpY2F0aW9uX0FsbG93ZWQoZmllbGQpKQorCSAgICB7CisJICAgICAgd2VyYXNlKGZvcm0tPncpOworCSAgICAgIFVuZG9fSnVzdGlmaWNhdGlvbihmaWVsZCwgZm9ybS0+dyk7CisJICAgICAgd3N5bmN1cChmb3JtLT53KTsKKwkgICAgfQorCX0KKworICAgICAgdW50b3VjaHdpbihmb3JtLT53KTsKKyAgICB9CisKKyAgZm9ybS0+Y3Vycm93ID0gZm9ybS0+Y3VyY29sID0gZm9ybS0+dG9wcm93ID0gZm9ybS0+YmVnaW5jb2wgPSAwOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSW50cmEtRmllbGQgTmF2aWdhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fTmV4dF9DaGFyYWN0ZXIoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgZmllbGQuIEluIGEgbXVsdGktbGluZQorfCAgICAgICAgICAgICAgICAgICAgZmllbGQgdGhpcyB3cmFwcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBhdCB0aGUgcmlnaHRtb3N0IHBvc2l0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX05leHRfQ2hhcmFjdGVyKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIGludCBzdGVwID0gbXlXQ1dJRFRIKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKworICBUKChUX0NBTExFRCgiSUZOX05leHRfQ2hhcmFjdGVyKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoZm9ybS0+Y3VyY29sICs9IHN0ZXApID09IGZpZWxkLT5kY29scykKKyAgICB7CisgICAgICBpZiAoKCsrKGZvcm0tPmN1cnJvdykpID09IGZpZWxkLT5kcm93cykKKwl7CisjaWYgR1JPV19JRl9OQVZJR0FURQorCSAgaWYgKCFTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkgJiYgRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCSAgICB7CisJICAgICAgZm9ybS0+Y3VyY29sID0gMDsKKwkgICAgICByZXR1cm5Db2RlKEVfT0spOworCSAgICB9CisjZW5kaWYKKwkgIGZvcm0tPmN1cnJvdy0tOworI2lmIEdST1dfSUZfTkFWSUdBVEUKKwkgIGlmIChTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkgJiYgRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCSAgICByZXR1cm5Db2RlKEVfT0spOworI2VuZGlmCisJICBmb3JtLT5jdXJjb2wgLT0gc3RlcDsKKwkgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisJfQorICAgICAgZm9ybS0+Y3VyY29sID0gMDsKKyAgICB9CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fUHJldmlvdXNfQ2hhcmFjdGVyKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGluIHRoZSBmaWVsZC4gSW4gYQorfCAgICAgICAgICAgICAgICAgICAgbXVsdGktbGluZSBmaWVsZCB0aGlzIHdyYXBzIGFuZCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorfCAgICAgICAgICAgICAgICAgICAgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgIC0gYXQgdGhlIGxlZnRtb3N0IHBvc2l0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX1ByZXZpb3VzX0NoYXJhY3RlcihGT1JNICpmb3JtKQoreworICBpbnQgYW1vdW50ID0gbXlXQ1dJRFRIKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sIC0gMSk7CisgIGludCBvbGRjb2wgPSBmb3JtLT5jdXJjb2w7CisKKyAgVCgoVF9DQUxMRUQoIklGTl9QcmV2aW91c19DaGFyYWN0ZXIoJXApIiksIGZvcm0pKTsKKyAgaWYgKChmb3JtLT5jdXJjb2wgLT0gYW1vdW50KSA8IDApCisgICAgeworICAgICAgaWYgKCgtLShmb3JtLT5jdXJyb3cpKSA8IDApCisJeworCSAgZm9ybS0+Y3Vycm93Kys7CisJICBmb3JtLT5jdXJjb2wgPSBvbGRjb2w7CisJICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworCX0KKyAgICAgIGZvcm0tPmN1cmNvbCA9IGZvcm0tPmN1cnJlbnQtPmRjb2xzIC0gMTsKKyAgICB9CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fTmV4dF9MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGZpZWxkCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIGF0IHRoZSBsYXN0IGxpbmUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fTmV4dF9MaW5lKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisKKyAgVCgoVF9DQUxMRUQoIklGTl9OZXh0X0xpbmUoJXApIiksIGZvcm0pKTsKKyAgaWYgKCgrKyhmb3JtLT5jdXJyb3cpKSA9PSBmaWVsZC0+ZHJvd3MpCisgICAgeworI2lmIEdST1dfSUZfTkFWSUdBVEUKKyAgICAgIGlmICghU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpICYmIEZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwlyZXR1cm5Db2RlKEVfT0spOworI2VuZGlmCisgICAgICBmb3JtLT5jdXJyb3ctLTsKKyAgICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgICAgfQorICBmb3JtLT5jdXJjb2wgPSAwOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX1ByZXZpb3VzX0xpbmUoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHByZXZpb3VzIGxpbmUgaW4gdGhlIGZpZWxkCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIGF0IHRoZSBmaXJzdCBsaW5lCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSUZOX1ByZXZpb3VzX0xpbmUoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIklGTl9QcmV2aW91c19MaW5lKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoLS0oZm9ybS0+Y3Vycm93KSkgPCAwKQorICAgIHsKKyAgICAgIGZvcm0tPmN1cnJvdysrOworICAgICAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKyAgICB9CisgIGZvcm0tPmN1cmNvbCA9IDA7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fTmV4dF9Xb3JkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHdvcmQgaW4gdGhlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgLSB0aGVyZSBpcyBubyBuZXh0IHdvcmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fTmV4dF9Xb3JkKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIEZJRUxEX0NFTEwgKmJwID0gQWRkcmVzc19PZl9DdXJyZW50X1Bvc2l0aW9uX0luX0J1ZmZlcihmb3JtKTsKKyAgRklFTERfQ0VMTCAqczsKKyAgRklFTERfQ0VMTCAqdDsKKworICBUKChUX0NBTExFRCgiSUZOX05leHRfV29yZCglcCkiKSwgZm9ybSkpOworCisgIC8qIFdlIHJlYWxseSBuZWVkIGFjY2VzcyB0byB0aGUgZGF0YSwgc28gd2UgaGF2ZSB0byBzeW5jaHJvbml6ZSAqLworICBTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisKKyAgLyogR28gdG8gdGhlIGZpcnN0IHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24gKGluY2x1ZGluZworICAgICBjdXJyZW50IHBvc2l0aW9uKS4gVGhpcyBpcyB0aGVuIHRoZSBzdGFydGluZyBwb2ludCB0byBsb29rIGZvciB0aGUKKyAgICAgbmV4dCBub24tYmxhbmsgZGF0YSAqLworICBzID0gR2V0X0ZpcnN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKGJwLCBCdWZmZXJfTGVuZ3RoKGZpZWxkKSAtCisJCQkJICAgICAoaW50KShicCAtIGZpZWxkLT5idWYpKTsKKworICAvKiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB3b3JkICovCisgIHQgPSBHZXRfU3RhcnRfT2ZfRGF0YShzLCBCdWZmZXJfTGVuZ3RoKGZpZWxkKSAtCisJCQkoaW50KShzIC0gZmllbGQtPmJ1ZikpOworI2lmICFGUklFTkRMWV9QUkVWX05FWFRfV09SRAorICBpZiAocyA9PSB0KQorICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIEFkanVzdF9DdXJzb3JfUG9zaXRpb24oZm9ybSwgdCk7CisgICAgICByZXR1cm5Db2RlKEVfT0spOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IElGTl9QcmV2aW91c19Xb3JkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91cyB3b3JkIGluIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEIC0gdGhlcmUgaXMgbm8gcHJldmlvdXMgd29yZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0lGTl9QcmV2aW91c19Xb3JkKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIEZJRUxEX0NFTEwgKmJwID0gQWRkcmVzc19PZl9DdXJyZW50X1Bvc2l0aW9uX0luX0J1ZmZlcihmb3JtKTsKKyAgRklFTERfQ0VMTCAqczsKKyAgRklFTERfQ0VMTCAqdDsKKyAgYm9vbCBhZ2FpbiA9IEZBTFNFOworCisgIFQoKFRfQ0FMTEVEKCJJRk5fUHJldmlvdXNfV29yZCglcCkiKSwgZm9ybSkpOworCisgIC8qIFdlIHJlYWxseSBuZWVkIGFjY2VzcyB0byB0aGUgZGF0YSwgc28gd2UgaGF2ZSB0byBzeW5jaHJvbml6ZSAqLworICBTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisKKyAgcyA9IEFmdGVyX0VuZF9PZl9EYXRhKGZpZWxkLT5idWYsIChpbnQpKGJwIC0gZmllbGQtPmJ1ZikpOworICAvKiBzIHBvaW50cyBub3cgcmlnaHQgYWZ0ZXIgdGhlIGxhc3Qgbm9uLWJsYW5rIGluIHRoZSBidWZmZXIgYmVmb3JlIGJwLgorICAgICBJZiBicCB3YXMgaW4gYSB3b3JkLCBzIGVxdWFscyBicC4gSW4gdGhpcyBjYXNlIHdlIG11c3QgZmluZCB0aGUgbGFzdAorICAgICB3aGl0ZXNwYWNlIGluIHRoZSBidWZmZXIgYmVmb3JlIGJwIGFuZCByZXBlYXQgdGhlIGdhbWUgdG8gcmVhbGx5IGZpbmQKKyAgICAgdGhlIHByZXZpb3VzIHdvcmQhICovCisgIGlmIChzID09IGJwKQorICAgIGFnYWluID0gVFJVRTsKKworICAvKiBBbmQgbmV4dCBjYWxsIG5vdyBnb2VzIGJhY2t3YXJkIHRvIGxvb2sgZm9yIHRoZSBsYXN0IHdoaXRlc3BhY2UKKyAgICAgYmVmb3JlIHRoYXQsIHBvaW50aW5nIHJpZ2h0IGFmdGVyIHRoaXMsIHNvIGl0IHBvaW50cyB0byB0aGUgYmVnaW4KKyAgICAgb2YgdGhlIHByZXZpb3VzIHdvcmQuCisgICAqLworICB0ID0gQWZ0ZXJfTGFzdF9XaGl0ZXNwYWNlX0NoYXJhY3RlcihmaWVsZC0+YnVmLCAoaW50KShzIC0gZmllbGQtPmJ1ZikpOworI2lmICFGUklFTkRMWV9QUkVWX05FWFRfV09SRAorICBpZiAocyA9PSB0KQorICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisjZW5kaWYKKyAgaWYgKGFnYWluKQorICAgIHsKKyAgICAgIC8qIGFuZCBkbyBpdCBhZ2FpbiwgcmVwbGFjaW5nIGJwIGJ5IHQgKi8KKyAgICAgIHMgPSBBZnRlcl9FbmRfT2ZfRGF0YShmaWVsZC0+YnVmLCAoaW50KSh0IC0gZmllbGQtPmJ1ZikpOworICAgICAgdCA9IEFmdGVyX0xhc3RfV2hpdGVzcGFjZV9DaGFyYWN0ZXIoZmllbGQtPmJ1ZiwgKGludCkocyAtIGZpZWxkLT5idWYpKTsKKyNpZiAhRlJJRU5ETFlfUFJFVl9ORVhUX1dPUkQKKyAgICAgIGlmIChzID09IHQpCisJcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKyNlbmRpZgorICAgIH0KKyAgQWRqdXN0X0N1cnNvcl9Qb3NpdGlvbihmb3JtLCB0KTsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IElGTl9CZWdpbm5pbmdfT2ZfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQbGFjZSB0aGUgY3Vyc29yIGF0IHRoZSBmaXJzdCBub24tcGFkIGNoYXJhY3RlciBpbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fQmVnaW5uaW5nX09mX0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisKKyAgVCgoVF9DQUxMRUQoIklGTl9CZWdpbm5pbmdfT2ZfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICBBZGp1c3RfQ3Vyc29yX1Bvc2l0aW9uKGZvcm0sCisJCQkgR2V0X1N0YXJ0X09mX0RhdGEoZmllbGQtPmJ1ZiwgQnVmZmVyX0xlbmd0aChmaWVsZCkpKTsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IElGTl9FbmRfT2ZfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQbGFjZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSBsYXN0IG5vbi1wYWQgY2hhcmFjdGVyIGluCit8ICAgICAgICAgICAgICAgICAgICB0aGUgZmllbGQuIElmIHRoZSBmaWVsZCBvY2N1cGllcyB0aGUgbGFzdCBwb3NpdGlvbiBpbgorfCAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciwgdGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkIG9uIHRoZSBsYXN0Cit8ICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fRW5kX09mX0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIEZJRUxEX0NFTEwgKnBvczsKKworICBUKChUX0NBTExFRCgiSUZOX0VuZF9PZl9GaWVsZCglcCkiKSwgZm9ybSkpOworICBTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisgIHBvcyA9IEFmdGVyX0VuZF9PZl9EYXRhKGZpZWxkLT5idWYsIEJ1ZmZlcl9MZW5ndGgoZmllbGQpKTsKKyAgaWYgKHBvcyA9PSAoZmllbGQtPmJ1ZiArIEJ1ZmZlcl9MZW5ndGgoZmllbGQpKSkKKyAgICBwb3MtLTsKKyAgQWRqdXN0X0N1cnNvcl9Qb3NpdGlvbihmb3JtLCBwb3MpOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX0JlZ2lubmluZ19PZl9MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUGxhY2UgdGhlIGN1cnNvciBvbiB0aGUgZmlyc3Qgbm9uLXBhZCBjaGFyYWN0ZXIgaW4KK3wgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0lGTl9CZWdpbm5pbmdfT2ZfTGluZShGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworCisgIFQoKFRfQ0FMTEVEKCJJRk5fQmVnaW5uaW5nX09mX0xpbmUoJXApIiksIGZvcm0pKTsKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICBBZGp1c3RfQ3Vyc29yX1Bvc2l0aW9uKGZvcm0sCisJCQkgR2V0X1N0YXJ0X09mX0RhdGEoQWRkcmVzc19PZl9DdXJyZW50X1Jvd19Jbl9CdWZmZXIoZm9ybSksCisJCQkJCSAgIGZpZWxkLT5kY29scykpOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX0VuZF9PZl9MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgbGFzdCBub24tcGFkIGNoYXJhY3RlciBpbiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgbGluZSBvZiB0aGUgZmllbGQuIElmIHRoZSBmaWVsZCBvY2N1cGllcyB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGxhc3QgY29sdW1uIGluIHRoZSBsaW5lLCB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQgb24gdGhlCit8ICAgICAgICAgICAgICAgICAgICBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0lGTl9FbmRfT2ZfTGluZShGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpwb3M7CisgIEZJRUxEX0NFTEwgKmJwOworCisgIFQoKFRfQ0FMTEVEKCJJRk5fRW5kX09mX0xpbmUoJXApIiksIGZvcm0pKTsKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICBicCA9IEFkZHJlc3NfT2ZfQ3VycmVudF9Sb3dfSW5fQnVmZmVyKGZvcm0pOworICBwb3MgPSBBZnRlcl9FbmRfT2ZfRGF0YShicCwgZmllbGQtPmRjb2xzKTsKKyAgaWYgKHBvcyA9PSAoYnAgKyBmaWVsZC0+ZGNvbHMpKQorICAgIHBvcy0tOworICBBZGp1c3RfQ3Vyc29yX1Bvc2l0aW9uKGZvcm0sIHBvcyk7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fTGVmdF9DaGFyYWN0ZXIoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIG9uZSBjaGFyYWN0ZXIgdG8gdGhlIGxlZnQgaW4gdGhlIGN1cnJlbnQgbGluZS4KK3wgICAgICAgICAgICAgICAgICAgIFRoaXMgZG9lc24ndCBjeWNsZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEIC0gYWxyZWFkeSBpbiBmaXJzdCBjb2x1bW4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fTGVmdF9DaGFyYWN0ZXIoRk9STSAqZm9ybSkKK3sKKyAgaW50IGFtb3VudCA9IG15V0NXSURUSChmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCAtIDEpOworICBpbnQgb2xkY29sID0gZm9ybS0+Y3VyY29sOworCisgIFQoKFRfQ0FMTEVEKCJJRk5fTGVmdF9DaGFyYWN0ZXIoJXApIiksIGZvcm0pKTsKKyAgaWYgKChmb3JtLT5jdXJjb2wgLT0gYW1vdW50KSA8IDApCisgICAgeworICAgICAgZm9ybS0+Y3VyY29sID0gb2xkY29sOworICAgICAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKyAgICB9CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fUmlnaHRfQ2hhcmFjdGVyKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSBvbmUgY2hhcmFjdGVyIHRvIHRoZSByaWdodCBpbiB0aGUgY3VycmVudCBsaW5lLgorfCAgICAgICAgICAgICAgICAgICAgVGhpcyBkb2Vzbid0IGN5Y2xlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIGFscmVhZHkgaW4gbGFzdCBjb2x1bW4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fUmlnaHRfQ2hhcmFjdGVyKEZPUk0gKmZvcm0pCit7CisgIGludCBhbW91bnQgPSBteVdDV0lEVEgoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICBpbnQgb2xkY29sID0gZm9ybS0+Y3VyY29sOworCisgIFQoKFRfQ0FMTEVEKCJJRk5fUmlnaHRfQ2hhcmFjdGVyKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoZm9ybS0+Y3VyY29sICs9IGFtb3VudCkgPj0gZm9ybS0+Y3VycmVudC0+ZGNvbHMpCisgICAgeworI2lmIEdST1dfSUZfTkFWSUdBVEUKKyAgICAgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisKKyAgICAgIGlmIChTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkgJiYgRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCXJldHVybkNvZGUoRV9PSyk7CisjZW5kaWYKKyAgICAgIGZvcm0tPmN1cmNvbCA9IG9sZGNvbDsKKyAgICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgICAgfQorICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSUZOX1VwX0NoYXJhY3RlcihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgb25lIGxpbmUgdXAuIFRoaXMgZG9lc24ndCBjeWNsZSB0aHJvdWdoIHRoZSBsaW5lcworfCAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIGFscmVhZHkgaW4gbGFzdCBjb2x1bW4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fVXBfQ2hhcmFjdGVyKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJJRk5fVXBfQ2hhcmFjdGVyKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoLS0oZm9ybS0+Y3Vycm93KSkgPCAwKQorICAgIHsKKyAgICAgIGZvcm0tPmN1cnJvdysrOworICAgICAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKyAgICB9CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJRk5fRG93bl9DaGFyYWN0ZXIoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIG9uZSBsaW5lIGRvd24uIFRoaXMgZG9lc24ndCBjeWNsZSB0aHJvdWdoIHRoZQorfCAgICAgICAgICAgICAgICAgICAgbGluZXMgb2YgdGhlIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIGFscmVhZHkgaW4gbGFzdCBjb2x1bW4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitJRk5fRG93bl9DaGFyYWN0ZXIoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKworICBUKChUX0NBTExFRCgiSUZOX0Rvd25fQ2hhcmFjdGVyKCVwKSIpLCBmb3JtKSk7CisgIGlmICgoKysoZm9ybS0+Y3Vycm93KSkgPT0gZmllbGQtPmRyb3dzKQorICAgIHsKKyNpZiBHUk9XX0lGX05BVklHQVRFCisgICAgICBpZiAoIVNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKSAmJiBGaWVsZF9Hcm93bihmaWVsZCwgMSkpCisJcmV0dXJuQ29kZShFX09LKTsKKyNlbmRpZgorICAgICAgLS0oZm9ybS0+Y3Vycm93KTsKKyAgICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisgICAgfQorICByZXR1cm5Db2RlKEVfT0spOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVORCBvZiBJbnRyYS1GaWVsZCBOYXZpZ2F0aW9uIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFZlcnRpY2FsIHNjcm9sbGluZyBoZWxwZXIgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgVlNDX0dlbmVyaWMoRk9STSAqZm9ybSwgaW50IG5saW5lcykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBtdWx0aS1saW5lIGZpZWxkIGZvcndhcmQgKG5saW5lcz4wKSBvcgorfCAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQgKG5saW5lczwwKSB0aGlzIG1hbnkgbGluZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gY2FuJ3Qgc2Nyb2xsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorVlNDX0dlbmVyaWMoRk9STSAqZm9ybSwgaW50IG5saW5lcykKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgaW50IHJlcyA9IEVfUkVRVUVTVF9ERU5JRUQ7CisgIGludCByb3dzX3RvX2dvID0gKG5saW5lcyA+IDAgPyBubGluZXMgOiAtbmxpbmVzKTsKKworICBpZiAobmxpbmVzID4gMCkKKyAgICB7CisgICAgICBpZiAoKHJvd3NfdG9fZ28gKyBmb3JtLT50b3Byb3cpID4gKGZpZWxkLT5kcm93cyAtIGZpZWxkLT5yb3dzKSkKKwlyb3dzX3RvX2dvID0gKGZpZWxkLT5kcm93cyAtIGZpZWxkLT5yb3dzIC0gZm9ybS0+dG9wcm93KTsKKworICAgICAgaWYgKHJvd3NfdG9fZ28gPiAwKQorCXsKKwkgIGZvcm0tPmN1cnJvdyArPSByb3dzX3RvX2dvOworCSAgZm9ybS0+dG9wcm93ICs9IHJvd3NfdG9fZ287CisJICByZXMgPSBFX09LOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocm93c190b19nbyA+IGZvcm0tPnRvcHJvdykKKwlyb3dzX3RvX2dvID0gZm9ybS0+dG9wcm93OworCisgICAgICBpZiAocm93c190b19nbyA+IDApCisJeworCSAgZm9ybS0+Y3Vycm93IC09IHJvd3NfdG9fZ287CisJICBmb3JtLT50b3Byb3cgLT0gcm93c190b19nbzsKKwkgIHJlcyA9IEVfT0s7CisJfQorICAgIH0KKyAgcmV0dXJuIChyZXMpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVuZCBvZiBWZXJ0aWNhbCBzY3JvbGxpbmcgaGVscGVyIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFZlcnRpY2FsIHNjcm9sbGluZyByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBWZXJ0aWNhbF9TY3JvbGxpbmcoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKiBjb25zdCBmY3QpIChGT1JNICopLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFBlcmZvcm1zIHRoZSBnZW5lcmljIHZlcnRpY2FsIHNjcm9sbGluZyByb3V0aW5lcy4KK3wgICAgICAgICAgICAgICAgICAgIFRoaXMgaGFzIHRvIGNoZWNrIGZvciBhIG11bHRpLWxpbmUgZmllbGQgYW5kIHRvIHNldAorfCAgICAgICAgICAgICAgICAgICAgdGhlIF9ORVdUT1AgZmxhZyBpZiBzY3JvbGxpbmcgcmVhbGx5IG9jY3VycmVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUHJvcGFnYXRlZCBlcnJvciBjb2RlIGZyb20gbG93LWxldmVsIGRyaXZlciBjYWxscworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1ZlcnRpY2FsX1Njcm9sbGluZyhpbnQgKCpjb25zdCBmY3QpIChGT1JNICopLCBGT1JNICpmb3JtKQoreworICBpbnQgcmVzID0gRV9SRVFVRVNUX0RFTklFRDsKKworICBpZiAoIVNpbmdsZV9MaW5lX0ZpZWxkKGZvcm0tPmN1cnJlbnQpKQorICAgIHsKKyAgICAgIHJlcyA9IGZjdChmb3JtKTsKKyAgICAgIGlmIChyZXMgPT0gRV9PSykKKwlmb3JtLT5jdXJyZW50LT5zdGF0dXMgfD0gX05FV1RPUDsKKyAgICB9CisgIHJldHVybiAocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFZTQ19TY3JvbGxfTGluZV9Gb3J3YXJkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIG11bHRpLWxpbmUgZmllbGQgZm9yd2FyZCBhIGxpbmUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgIC0gbm8gZGF0YSBhaGVhZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1ZTQ19TY3JvbGxfTGluZV9Gb3J3YXJkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJWU0NfU2Nyb2xsX0xpbmVfRm9yd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKFZTQ19HZW5lcmljKGZvcm0sIDEpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFZTQ19TY3JvbGxfTGluZV9CYWNrd2FyZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBtdWx0aS1saW5lIGZpZWxkIGJhY2t3YXJkIGEgbGluZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBubyBkYXRhIGJlaGluZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1ZTQ19TY3JvbGxfTGluZV9CYWNrd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiVlNDX1Njcm9sbF9MaW5lX0JhY2t3YXJkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoVlNDX0dlbmVyaWMoZm9ybSwgLTEpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFZTQ19TY3JvbGxfUGFnZV9Gb3J3YXJkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIGEgbXVsdGktbGluZSBmaWVsZCBmb3J3YXJkIGEgcGFnZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIG5vIGRhdGEgYWhlYWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitWU0NfU2Nyb2xsX1BhZ2VfRm9yd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiVlNDX1Njcm9sbF9QYWdlX0ZvcndhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShWU0NfR2VuZXJpYyhmb3JtLCBmb3JtLT5jdXJyZW50LT5yb3dzKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBWU0NfU2Nyb2xsX0hhbGZfUGFnZV9Gb3J3YXJkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIGEgbXVsdGktbGluZSBmaWVsZCBmb3J3YXJkIGhhbGYgYSBwYWdlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gbm8gZGF0YSBhaGVhZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1ZTQ19TY3JvbGxfSGFsZl9QYWdlX0ZvcndhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlZTQ19TY3JvbGxfSGFsZl9QYWdlX0ZvcndhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShWU0NfR2VuZXJpYyhmb3JtLCAoZm9ybS0+Y3VycmVudC0+cm93cyArIDEpIC8gMikpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgVlNDX1Njcm9sbF9QYWdlX0JhY2t3YXJkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIGEgbXVsdGktbGluZSBmaWVsZCBiYWNrd2FyZCBhIHBhZ2UKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSBubyBkYXRhIGJlaGluZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1ZTQ19TY3JvbGxfUGFnZV9CYWNrd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiVlNDX1Njcm9sbF9QYWdlX0JhY2t3YXJkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoVlNDX0dlbmVyaWMoZm9ybSwgLShmb3JtLT5jdXJyZW50LT5yb3dzKSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgVlNDX1Njcm9sbF9IYWxmX1BhZ2VfQmFja3dhcmQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTY3JvbGwgYSBtdWx0aS1saW5lIGZpZWxkIGJhY2t3YXJkIGhhbGYgYSBwYWdlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gbm8gZGF0YSBiZWhpbmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitWU0NfU2Nyb2xsX0hhbGZfUGFnZV9CYWNrd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiVlNDX1Njcm9sbF9IYWxmX1BhZ2VfQmFja3dhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShWU0NfR2VuZXJpYyhmb3JtLCAtKChmb3JtLT5jdXJyZW50LT5yb3dzICsgMSkgLyAyKSkpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVuZCBvZiBWZXJ0aWNhbCBzY3JvbGxpbmcgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSG9yaXpvbnRhbCBzY3JvbGxpbmcgaGVscGVyIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEhTQ19HZW5lcmljKEZPUk0gKmZvcm0sIGludCBuY29sdW1ucykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBzaW5nbGUtbGluZSBmaWVsZCBmb3J3YXJkIChuY29sdW1ucz4wKSBvcgorfCAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQgKG5jb2x1bW5zPDApIHRoaXMgbWFueSBjb2x1bW5zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIGNhbid0IHNjcm9sbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0hTQ19HZW5lcmljKEZPUk0gKmZvcm0sIGludCBuY29sdW1ucykKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgaW50IHJlcyA9IEVfUkVRVUVTVF9ERU5JRUQ7CisgIGludCBjb2xzX3RvX2dvID0gKG5jb2x1bW5zID4gMCA/IG5jb2x1bW5zIDogLW5jb2x1bW5zKTsKKworICBpZiAobmNvbHVtbnMgPiAwKQorICAgIHsKKyAgICAgIGlmICgoY29sc190b19nbyArIGZvcm0tPmJlZ2luY29sKSA+IChmaWVsZC0+ZGNvbHMgLSBmaWVsZC0+Y29scykpCisJY29sc190b19nbyA9IGZpZWxkLT5kY29scyAtIGZpZWxkLT5jb2xzIC0gZm9ybS0+YmVnaW5jb2w7CisKKyAgICAgIGlmIChjb2xzX3RvX2dvID4gMCkKKwl7CisJICBmb3JtLT5jdXJjb2wgKz0gY29sc190b19nbzsKKwkgIGZvcm0tPmJlZ2luY29sICs9IGNvbHNfdG9fZ287CisJICByZXMgPSBFX09LOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoY29sc190b19nbyA+IGZvcm0tPmJlZ2luY29sKQorCWNvbHNfdG9fZ28gPSBmb3JtLT5iZWdpbmNvbDsKKworICAgICAgaWYgKGNvbHNfdG9fZ28gPiAwKQorCXsKKwkgIGZvcm0tPmN1cmNvbCAtPSBjb2xzX3RvX2dvOworCSAgZm9ybS0+YmVnaW5jb2wgLT0gY29sc190b19nbzsKKwkgIHJlcyA9IEVfT0s7CisJfQorICAgIH0KKyAgcmV0dXJuIChyZXMpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVuZCBvZiBIb3Jpem9udGFsIHNjcm9sbGluZyBoZWxwZXIgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSG9yaXpvbnRhbCBzY3JvbGxpbmcgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgSG9yaXpvbnRhbF9TY3JvbGxpbmcoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqIGNvbnN0IGZjdCkgKEZPUk0gKiksCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBQZXJmb3JtcyB0aGUgZ2VuZXJpYyBob3Jpem9udGFsIHNjcm9sbGluZyByb3V0aW5lcy4KK3wgICAgICAgICAgICAgICAgICAgIFRoaXMgaGFzIHRvIGNoZWNrIGZvciBhIHNpbmdsZS1saW5lIGZpZWxkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUHJvcGFnYXRlZCBlcnJvciBjb2RlIGZyb20gbG93LWxldmVsIGRyaXZlciBjYWxscworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0hvcml6b250YWxfU2Nyb2xsaW5nKGludCAoKmNvbnN0IGZjdCkgKEZPUk0gKiksIEZPUk0gKmZvcm0pCit7CisgIGlmIChTaW5nbGVfTGluZV9GaWVsZChmb3JtLT5jdXJyZW50KSkKKyAgICByZXR1cm4gZmN0KGZvcm0pOworICBlbHNlCisgICAgcmV0dXJuIChFX1JFUVVFU1RfREVOSUVEKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEhTQ19TY3JvbGxfQ2hhcl9Gb3J3YXJkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIHNpbmdsZS1saW5lIGZpZWxkIGZvcndhcmQgYSBjaGFyYWN0ZXIKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAgIC0gbm8gZGF0YSBhaGVhZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0hTQ19TY3JvbGxfQ2hhcl9Gb3J3YXJkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJIU0NfU2Nyb2xsX0NoYXJfRm9yd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKEhTQ19HZW5lcmljKGZvcm0sIDEpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEhTQ19TY3JvbGxfQ2hhcl9CYWNrd2FyZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNjcm9sbCBzaW5nbGUtbGluZSBmaWVsZCBiYWNrd2FyZCBhIGNoYXJhY3RlcgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBubyBkYXRhIGJlaGluZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0hTQ19TY3JvbGxfQ2hhcl9CYWNrd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiSFNDX1Njcm9sbF9DaGFyX0JhY2t3YXJkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoSFNDX0dlbmVyaWMoZm9ybSwgLTEpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEhTQ19Ib3Jpem9udGFsX0xpbmVfRm9yd2FyZChGT1JNKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIHNpbmdsZS1saW5lIGZpZWxkIGZvcndhcmQgYSBsaW5lCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIG5vIGRhdGEgYWhlYWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitIU0NfSG9yaXpvbnRhbF9MaW5lX0ZvcndhcmQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkhTQ19Ib3Jpem9udGFsX0xpbmVfRm9yd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKEhTQ19HZW5lcmljKGZvcm0sIGZvcm0tPmN1cnJlbnQtPmNvbHMpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEhTQ19Ib3Jpem9udGFsX0hhbGZfTGluZV9Gb3J3YXJkKEZPUk0qIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTY3JvbGwgc2luZ2xlLWxpbmUgZmllbGQgZm9yd2FyZCBoYWxmIGEgbGluZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgIC0gbm8gZGF0YSBhaGVhZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0hTQ19Ib3Jpem9udGFsX0hhbGZfTGluZV9Gb3J3YXJkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJIU0NfSG9yaXpvbnRhbF9IYWxmX0xpbmVfRm9yd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKEhTQ19HZW5lcmljKGZvcm0sIChmb3JtLT5jdXJyZW50LT5jb2xzICsgMSkgLyAyKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBIU0NfSG9yaXpvbnRhbF9MaW5lX0JhY2t3YXJkKEZPUk0qIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTY3JvbGwgc2luZ2xlLWxpbmUgZmllbGQgYmFja3dhcmQgYSBsaW5lCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIG5vIGRhdGEgYmVoaW5kCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSFNDX0hvcml6b250YWxfTGluZV9CYWNrd2FyZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiSFNDX0hvcml6b250YWxfTGluZV9CYWNrd2FyZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKEhTQ19HZW5lcmljKGZvcm0sIC0oZm9ybS0+Y3VycmVudC0+Y29scykpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEhTQ19Ib3Jpem9udGFsX0hhbGZfTGluZV9CYWNrd2FyZChGT1JNKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2Nyb2xsIHNpbmdsZS1saW5lIGZpZWxkIGJhY2t3YXJkIGhhbGYgYSBsaW5lCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgICAtIG5vIGRhdGEgYmVoaW5kCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSFNDX0hvcml6b250YWxfSGFsZl9MaW5lX0JhY2t3YXJkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJIU0NfSG9yaXpvbnRhbF9IYWxmX0xpbmVfQmFja3dhcmQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShIU0NfR2VuZXJpYyhmb3JtLCAtKChmb3JtLT5jdXJyZW50LT5jb2xzICsgMSkgLyAyKSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRW5kIG9mIEhvcml6b250YWwgc2Nyb2xsaW5nIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEhlbHBlciByb3V0aW5lcyBmb3IgRmllbGQgRWRpdGluZworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgSXNfVGhlcmVfUm9vbV9Gb3JfQV9MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgd2hldGhlciBvciBub3QgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gdGhlCit8ICAgICAgICAgICAgICAgICAgICBidWZmZXIgdG8gZW50ZXIgYSB3aG9sZSBsaW5lLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgIC0gdGhlcmUgaXMgZW5vdWdoIHNwYWNlCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgLSB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIGJvb2wKK0lzX1RoZXJlX1Jvb21fRm9yX0FfTGluZShGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpiZWdpbl9vZl9sYXN0X2xpbmUsICpzOworCisgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgYmVnaW5fb2ZfbGFzdF9saW5lID0gQWRkcmVzc19PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLCAoZmllbGQtPmRyb3dzIC0gMSkpOworICBzID0gQWZ0ZXJfRW5kX09mX0RhdGEoYmVnaW5fb2ZfbGFzdF9saW5lLCBmaWVsZC0+ZGNvbHMpOworICByZXR1cm4gKChzID09IGJlZ2luX29mX2xhc3RfbGluZSkgPyBUUlVFIDogRkFMU0UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIElzX1RoZXJlX1Jvb21fRm9yX0FfQ2hhcl9Jbl9MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHJvb20gZm9yIGEgbmV3IGNoYXJhY3RlcgorfCAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnJlbnQgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAgLSB0aGVyZSBpcyByb29tCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgIC0gdGhlcmUgaXMgbm90IGVub3VnaCByb29tIChsaW5lIGZ1bGwpCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIGJvb2wKK0lzX1RoZXJlX1Jvb21fRm9yX0FfQ2hhcl9Jbl9MaW5lKEZPUk0gKmZvcm0pCit7CisgIGludCBsYXN0X2NoYXJfaW5fbGluZTsKKworICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cnJlbnQtPmRjb2xzIC0gMSk7CisgIGxhc3RfY2hhcl9pbl9saW5lID0gKGludCkod2luY2goZm9ybS0+dykgJiBBX0NIQVJURVhUKTsKKyAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICByZXR1cm4gKCgobGFzdF9jaGFyX2luX2xpbmUgPT0gZm9ybS0+Y3VycmVudC0+cGFkKSB8fAorCSAgIGlzX2JsYW5rKGxhc3RfY2hhcl9pbl9saW5lKSkgPyBUUlVFIDogRkFMU0UpOworfQorCisjZGVmaW5lIFRoZXJlX0lzX05vX1Jvb21fRm9yX0FfQ2hhcl9Jbl9MaW5lKGYpIFwKKyAgIUlzX1RoZXJlX1Jvb21fRm9yX0FfQ2hhcl9Jbl9MaW5lKGYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJbnNlcnRfU3RyaW5nKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUk0gKiBmb3JtLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3csCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdHh0LAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbGVuICkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEluc2VydCB0aGUgJ2xlbicgY2hhcmFjdGVycyBiZWdpbm5pbmcgYXQgcG9pbnRlciAndHh0JworfCAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgJ3Jvdycgb2YgdGhlICdmb3JtJy4gVGhlIGluc2VydGlvbiBvY2N1cnMKK3wgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJvdywgYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlCit8ICAgICAgICAgICAgICAgICAgICBtb3ZlZCB0byB0aGUgcmlnaHQuIEFmdGVyIHRoZSB0ZXh0IGEgcGFkIGNoYXJhY3RlciB3aWxsCit8ICAgICAgICAgICAgICAgICAgICBiZSBpbnNlcnRlZCB0byBzZXBhcmF0ZSB0aGUgdGV4dCBmcm9tIHRoZSByZXN0LiBJZgorfCAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IHRoZSBpbnNlcnRpb24gbW92ZXMgY2hhcmFjdGVycyBvbiB0aGUgbmV4dAorfCAgICAgICAgICAgICAgICAgICAgbGluZSB0byBtYWtlIHBsYWNlIGZvciB0aGUgcmVxdWVzdGVkIGluc2VydGlvbiBzdHJpbmcuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0KK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorSW5zZXJ0X1N0cmluZyhGT1JNICpmb3JtLCBpbnQgcm93LCBGSUVMRF9DRUxMICp0eHQsIGludCBsZW4pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIEZJRUxEX0NFTEwgKmJwID0gQWRkcmVzc19PZl9Sb3dfSW5fQnVmZmVyKGZpZWxkLCByb3cpOworICBpbnQgZGF0YWxlbiA9IChpbnQpKEFmdGVyX0VuZF9PZl9EYXRhKGJwLCBmaWVsZC0+ZGNvbHMpIC0gYnApOworICBpbnQgZnJlZWxlbiA9IGZpZWxkLT5kY29scyAtIGRhdGFsZW47CisgIGludCByZXF1aXJlZGxlbiA9IGxlbiArIDE7CisgIEZJRUxEX0NFTEwgKnNwbGl0OworICBpbnQgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKworICBpZiAoZnJlZWxlbiA+PSByZXF1aXJlZGxlbikKKyAgICB7CisgICAgICB3bW92ZShmb3JtLT53LCByb3csIDApOworICAgICAgbXlJTlNOU1RSKGZvcm0tPncsIHR4dCwgbGVuKTsKKyAgICAgIHdtb3ZlKGZvcm0tPncsIHJvdywgbGVuKTsKKyAgICAgIG15SU5TTlNUUihmb3JtLT53LCAmbXlCTEFOSywgMSk7CisgICAgICByZXR1cm4gRV9PSzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiB3ZSBoYXZlIHRvIG1vdmUgY2hhcmFjdGVycyBvbiB0aGUgbmV4dCBsaW5lLiBJZiB3ZSBhcmUgb24gdGhlCisgICAgICAgICBsYXN0IGxpbmUgdGhpcyBtYXkgd29yaywgaWYgdGhlIGZpZWxkIGlzIGdyb3dhYmxlICovCisgICAgICBpZiAoKHJvdyA9PSAoZmllbGQtPmRyb3dzIC0gMSkpICYmIEdyb3dhYmxlKGZpZWxkKSkKKwl7CisJICBpZiAoIUZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgcmV0dXJuIChFX1NZU1RFTV9FUlJPUik7CisJICAvKiAhISFTaWRlLUVmZmVjdCA6IG1pZ2h0IGJlIGNoYW5nZWQgZHVlIHRvIGdyb3d0aCEhISAqLworCSAgYnAgPSBBZGRyZXNzX09mX1Jvd19Jbl9CdWZmZXIoZmllbGQsIHJvdyk7CisJfQorCisgICAgICBpZiAocm93IDwgKGZpZWxkLT5kcm93cyAtIDEpKQorCXsKKwkgIHNwbGl0ID0KKwkgICAgQWZ0ZXJfTGFzdF9XaGl0ZXNwYWNlX0NoYXJhY3RlcihicCwKKwkJCQkJICAgIChpbnQpKEdldF9TdGFydF9PZl9EYXRhKGJwCisJCQkJCQkJCSAgICArIGZpZWxkLT5kY29scworCQkJCQkJCQkgICAgLSByZXF1aXJlZGxlbiwKKwkJCQkJCQkJICAgIHJlcXVpcmVkbGVuKQorCQkJCQkJICAtIGJwKSk7CisJICAvKiBzcGxpdCBwb2ludHMgbm93IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHBvcnRpb24gb2YgdGhlCisJICAgICBsaW5lIHRoYXQgbXVzdCBiZSBtb3ZlZCB0byB0aGUgbmV4dCBsaW5lICovCisJICBkYXRhbGVuID0gKGludCkoc3BsaXQgLSBicCk7CS8qICsgZnJlZWxlbiBoYXMgdG8gc3RheSBvbiB0aGlzIGxpbmUgICAqLworCSAgZnJlZWxlbiA9IGZpZWxkLT5kY29scyAtIChkYXRhbGVuICsgZnJlZWxlbik7CQkvKiBmb3IgdGhlIG5leHQgbGluZSAqLworCisJICBpZiAoKHJlc3VsdCA9IEluc2VydF9TdHJpbmcoZm9ybSwgcm93ICsgMSwgc3BsaXQsIGZyZWVsZW4pKSA9PSBFX09LKQorCSAgICB7CisJICAgICAgd21vdmUoZm9ybS0+dywgcm93LCBkYXRhbGVuKTsKKwkgICAgICB3Y2xydG9lb2woZm9ybS0+dyk7CisJICAgICAgd21vdmUoZm9ybS0+dywgcm93LCAwKTsKKwkgICAgICBteUlOU05TVFIoZm9ybS0+dywgdHh0LCBsZW4pOworCSAgICAgIHdtb3ZlKGZvcm0tPncsIHJvdywgbGVuKTsKKwkgICAgICBteUlOU05TVFIoZm9ybS0+dywgJm15QkxBTkssIDEpOworCSAgICAgIHJldHVybiBFX09LOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIChyZXN1bHQpOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFdyYXBwaW5nX05vdF9OZWNlc3NhcnlfT3JfV3JhcHBpbmdfT2soCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBJZiBhIGNoYXJhY3RlciBoYXMgYmVlbiBlbnRlcmVkIGludG8gYSBmaWVsZCwgaXQgbWF5Cit8ICAgICAgICAgICAgICAgICAgICBiZSB0aGF0IHdyYXBwaW5nIGhhcyB0byBvY2N1ci4gVGhpcyByb3V0aW5lIGNoZWNrcworfCAgICAgICAgICAgICAgICAgICAgd2hldGhlciBvciBub3Qgd3JhcHBpbmcgaXMgcmVxdWlyZWQgYW5kIGlmIHNvLCBwZXJmb3JtcworfCAgICAgICAgICAgICAgICAgICAgdGhlIHdyYXBwaW5nLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBubyB3cmFwcGluZyByZXF1aXJlZCBvciB3cmFwcGluZworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgc3VjY2Vzc2Z1bAorfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLQorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLSBzb21lIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1dyYXBwaW5nX05vdF9OZWNlc3NhcnlfT3JfV3JhcHBpbmdfT2soRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgaW50IHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisgIGJvb2wgTGFzdF9Sb3cgPSAoKGZpZWxkLT5kcm93cyAtIDEpID09IGZvcm0tPmN1cnJvdyk7CisKKyAgaWYgKChmaWVsZC0+b3B0cyAmIE9fV1JBUCkgJiYJLyogd3JhcHBpbmcgd2FudGVkICAgICAqLworICAgICAgKCFTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkpICYmCS8qIG11c3QgYmUgbXVsdGktbGluZSAgKi8KKyAgICAgIChUaGVyZV9Jc19Ob19Sb29tX0Zvcl9BX0NoYXJfSW5fTGluZShmb3JtKSkgJiYJLyogbGluZSBpcyBmdWxsICAgICAgICAqLworICAgICAgKCFMYXN0X1JvdyB8fCBHcm93YWJsZShmaWVsZCkpKQkvKiB0aGVyZSBhcmUgbW9yZSBsaW5lcyAqLworICAgIHsKKyAgICAgIEZJRUxEX0NFTEwgKmJwOworICAgICAgRklFTERfQ0VMTCAqc3BsaXQ7CisgICAgICBpbnQgY2hhcnNfdG9fYmVfd3JhcHBlZDsKKyAgICAgIGludCBjaGFyc190b19yZW1haW5fb25fbGluZTsKKworICAgICAgaWYgKExhc3RfUm93KQorCXsKKwkgIC8qIHRoZSBhYm92ZSBsb2dpYyBhbHJlYWR5IGVuc3VyZXMsIHRoYXQgaW4gdGhpcyBjYXNlIHRoZSBmaWVsZAorCSAgICAgaXMgZ3Jvd2FibGUgKi8KKwkgIGlmICghRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCSAgICByZXR1cm4gRV9TWVNURU1fRVJST1I7CisJfQorICAgICAgYnAgPSBBZGRyZXNzX09mX0N1cnJlbnRfUm93X0luX0J1ZmZlcihmb3JtKTsKKyAgICAgIFdpbmRvd19Ub19CdWZmZXIoZm9ybS0+dywgZmllbGQpOworICAgICAgc3BsaXQgPSBBZnRlcl9MYXN0X1doaXRlc3BhY2VfQ2hhcmFjdGVyKGJwLCBmaWVsZC0+ZGNvbHMpOworICAgICAgLyogc3BsaXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlcXVlbmNlIHRvIGJlIGJyb3VnaHQKKyAgICAgICAgIG9uIHRoZSBuZXh0IGxpbmUgKi8KKyAgICAgIGNoYXJzX3RvX3JlbWFpbl9vbl9saW5lID0gKGludCkoc3BsaXQgLSBicCk7CisgICAgICBjaGFyc190b19iZV93cmFwcGVkID0gZmllbGQtPmRjb2xzIC0gY2hhcnNfdG9fcmVtYWluX29uX2xpbmU7CisgICAgICBpZiAoY2hhcnNfdG9fcmVtYWluX29uX2xpbmUgPiAwKQorCXsKKwkgIGlmICgocmVzdWx0ID0gSW5zZXJ0X1N0cmluZyhmb3JtLCBmb3JtLT5jdXJyb3cgKyAxLCBzcGxpdCwKKwkJCQkgICAgICBjaGFyc190b19iZV93cmFwcGVkKSkgPT0gRV9PSykKKwkgICAgeworCSAgICAgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgY2hhcnNfdG9fcmVtYWluX29uX2xpbmUpOworCSAgICAgIHdjbHJ0b2VvbChmb3JtLT53KTsKKwkgICAgICBpZiAoZm9ybS0+Y3VyY29sID49IGNoYXJzX3RvX3JlbWFpbl9vbl9saW5lKQorCQl7CisJCSAgZm9ybS0+Y3Vycm93Kys7CisJCSAgZm9ybS0+Y3VyY29sIC09IGNoYXJzX3RvX3JlbWFpbl9vbl9saW5lOworCQl9CisJICAgICAgcmV0dXJuIEVfT0s7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJcmV0dXJuIEVfT0s7CisgICAgICBpZiAocmVzdWx0ICE9IEVfT0spCisJeworCSAgRGVsZXRlQ2hhcihmb3JtKTsKKwkgIFdpbmRvd19Ub19CdWZmZXIoZm9ybS0+dywgZmllbGQpOworCSAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwl9CisgICAgfQorICBlbHNlCisgICAgcmVzdWx0ID0gRV9PSzsJCS8qIHdyYXBwaW5nIHdhcyBub3QgbmVjZXNzYXJ5ICovCisgIHJldHVybiAocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZpZWxkIEVkaXRpbmcgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRmllbGRfRWRpdGluZygKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCogY29uc3QgZmN0KSAoRk9STSAqKSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdlbmVyaWMgcm91dGluZSBmb3IgZmllbGQgZWRpdGluZyByZXF1ZXN0cy4gVGhlIGRyaXZlcgorfCAgICAgICAgICAgICAgICAgICAgcm91dGluZXMgYXJlIG9ubHkgY2FsbGVkIGZvciBlZGl0YWJsZSBmaWVsZHMsIHRoZQorfCAgICAgICAgICAgICAgICAgICAgX1dJTkRPV19NT0RJRklFRCBmbGFnIGlzIHNldCBpZiBlZGl0aW5nIG9jY3VycmVkLgorfCAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzb21ld2hhdCBzcGVjaWFsIGR1ZSB0byB0aGUgb3ZlcmxvYWQgc2VtYW50aWNzCit8ICAgICAgICAgICAgICAgICAgICBvZiB0aGUgTkVXX0xJTkUgYW5kIERFTF9QUkVWIHJlcXVlc3RzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRXJyb3IgY29kZSBmcm9tIGxvdyBsZXZlbCBkcml2ZXJzLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZpZWxkX0VkaXRpbmcoaW50ICgqY29uc3QgZmN0KSAoRk9STSAqKSwgRk9STSAqZm9ybSkKK3sKKyAgaW50IHJlcyA9IEVfUkVRVUVTVF9ERU5JRUQ7CisKKyAgLyogV2UgaGF2ZSB0byBkZWFsIGhlcmUgd2l0aCB0aGUgc3BlY2lmaWMgY2FzZSBvZiB0aGUgb3ZlcmxvYWRlZAorICAgICBiZWhhdmlvciBvZiBOZXdfTGluZSBhbmQgRGVsZXRlX1ByZXZpb3VzIHJlcXVlc3RzLgorICAgICBUaGV5IG1heSBlbmQgdXAgaW4gbmF2aWdhdGlvbmFsIHJlcXVlc3RzIGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QKKyAgICAgY2hhcmFjdGVyIGluIGEgZmllbGQuIEJ1dCBuYXZpZ2F0aW9uIGlzIGFsc28gYWxsb3dlZCBvbiBub24tCisgICAgIGVkaXRhYmxlIGZpZWxkcy4KKyAgICovCisgIGlmICgoZmN0ID09IEZFX0RlbGV0ZV9QcmV2aW91cykgJiYKKyAgICAgIChmb3JtLT5vcHRzICYgT19CU19PVkVSTE9BRCkgJiYKKyAgICAgIEZpcnN0X1Bvc2l0aW9uX0luX0N1cnJlbnRfRmllbGQoZm9ybSkpCisgICAgeworICAgICAgcmVzID0gSW50ZXJfRmllbGRfTmF2aWdhdGlvbihGTl9QcmV2aW91c19GaWVsZCwgZm9ybSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGZjdCA9PSBGRV9OZXdfTGluZSkKKwl7CisJICBpZiAoKGZvcm0tPm9wdHMgJiBPX05MX09WRVJMT0FEKSAmJgorCSAgICAgIEZpcnN0X1Bvc2l0aW9uX0luX0N1cnJlbnRfRmllbGQoZm9ybSkpCisJICAgIHsKKwkgICAgICByZXMgPSBJbnRlcl9GaWVsZF9OYXZpZ2F0aW9uKEZOX05leHRfRmllbGQsIGZvcm0pOworCSAgICB9CisJICBlbHNlCisJICAgIC8qIEZFX05ld19MaW5lIGRlYWxzIGl0c2VsZiB3aXRoIHRoZSBfV0lORE9XX01PRElGSUVEIGZsYWcgKi8KKwkgICAgcmVzID0gZmN0KGZvcm0pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGcm9tIG5vdyBvbiwgZXZlcnl0aGluZyBtdXN0IGJlIGVkaXRhYmxlICovCisJICBpZiAoZm9ybS0+Y3VycmVudC0+b3B0cyAmIE9fRURJVCkKKwkgICAgeworCSAgICAgIHJlcyA9IGZjdChmb3JtKTsKKwkgICAgICBpZiAocmVzID09IEVfT0spCisJCWZvcm0tPnN0YXR1cyB8PSBfV0lORE9XX01PRElGSUVEOworCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIHJlczsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZFX05ld19MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUGVyZm9ybSBhIG5ldyBsaW5lIHJlcXVlc3QuIFRoaXMgaXMgcmF0aGVyIGNvbXBsZXgKK3wgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHRvIG90aGVyIHJvdXRpbmVzIGluIHRoaXMgY29kZSBkdWUgdG8gdGhlCit8ICAgICAgICAgICAgICAgICAgICByYXRoZXIgZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQgZGVzY3JpcHRpb24gaW4gdGhlCit8ICAgICAgICAgICAgICAgICAgICBtYW51YWxzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgIC0gbmV3IGxpbmUgbm90IGFsbG93ZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZFX05ld19MaW5lKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisgIEZJRUxEX0NFTEwgKmJwLCAqdDsKKyAgYm9vbCBMYXN0X1JvdyA9ICgoZmllbGQtPmRyb3dzIC0gMSkgPT0gZm9ybS0+Y3Vycm93KTsKKworICBUKChUX0NBTExFRCgiRkVfTmV3X0xpbmUoJXApIiksIGZvcm0pKTsKKyAgaWYgKGZvcm0tPnN0YXR1cyAmIF9PVkxNT0RFKQorICAgIHsKKyAgICAgIGlmIChMYXN0X1JvdyAmJgorCSAgKCEoR3Jvd2FibGUoZmllbGQpICYmICFTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkpKSkKKwl7CisJICBpZiAoIShmb3JtLT5vcHRzICYgT19OTF9PVkVSTE9BRCkpCisJICAgIHJldHVybkNvZGUoRV9SRVFVRVNUX0RFTklFRCk7CisJICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisJICB3Y2xydG9lb2woZm9ybS0+dyk7CisJICAvKiB3ZSBoYXZlIHRvIHNldCB0aGlzIGhlcmUsIGFsdGhvdWdoIGl0IGlzIGFsc28KKwkgICAgIGhhbmRsZWQgaW4gdGhlIGdlbmVyaWMgcm91dGluZS4gVGhlIHJlYXNvbiBpcywKKwkgICAgIHRoYXQgRk5fTmV4dF9GaWVsZCBtYXkgZmFpbCwgYnV0IHRoZSBmb3JtIGlzCisJICAgICBkZWZpbml0aXZlbHkgY2hhbmdlZCAqLworCSAgZm9ybS0+c3RhdHVzIHw9IF9XSU5ET1dfTU9ESUZJRUQ7CisJICByZXR1cm5Db2RlKEludGVyX0ZpZWxkX05hdmlnYXRpb24oRk5fTmV4dF9GaWVsZCwgZm9ybSkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoTGFzdF9Sb3cgJiYgIUZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgeworCSAgICAgIC8qIE4uQi46IGR1ZSB0byB0aGUgbG9naWMgaW4gdGhlICdpZicsIExhc3RSb3c9PVRSVUUKKwkgICAgICAgICBtZWFucyBoZXJlIHRoYXQgdGhlIGZpZWxkIGlzIGdyb3dhYmxlIGFuZCBub3QKKwkgICAgICAgICBhIHNpbmdsZS1saW5lIGZpZWxkICovCisJICAgICAgcmV0dXJuQ29kZShFX1NZU1RFTV9FUlJPUik7CisJICAgIH0KKwkgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKwkgIHdjbHJ0b2VvbChmb3JtLT53KTsKKwkgIGZvcm0tPmN1cnJvdysrOworCSAgZm9ybS0+Y3VyY29sID0gMDsKKwkgIGZvcm0tPnN0YXR1cyB8PSBfV0lORE9XX01PRElGSUVEOworCSAgcmV0dXJuQ29kZShFX09LKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogSW5zZXJ0IE1vZGUgKi8KKyAgICAgIGlmIChMYXN0X1JvdyAmJgorCSAgIShHcm93YWJsZShmaWVsZCkgJiYgIVNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKSkpCisJeworCSAgaWYgKCEoZm9ybS0+b3B0cyAmIE9fTkxfT1ZFUkxPQUQpKQorCSAgICByZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworCSAgcmV0dXJuQ29kZShJbnRlcl9GaWVsZF9OYXZpZ2F0aW9uKEZOX05leHRfRmllbGQsIGZvcm0pKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgYm9vbCBNYXlfRG9fSXQgPSAhTGFzdF9Sb3cgJiYgSXNfVGhlcmVfUm9vbV9Gb3JfQV9MaW5lKGZvcm0pOworCisJICBpZiAoIShNYXlfRG9fSXQgfHwgR3Jvd2FibGUoZmllbGQpKSkKKwkgICAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKwkgIGlmICghTWF5X0RvX0l0ICYmICFGaWVsZF9Hcm93bihmaWVsZCwgMSkpCisJICAgIHJldHVybkNvZGUoRV9TWVNURU1fRVJST1IpOworCisJICBicCA9IEFkZHJlc3NfT2ZfQ3VycmVudF9Qb3NpdGlvbl9Jbl9CdWZmZXIoZm9ybSk7CisJICB0ID0gQWZ0ZXJfRW5kX09mX0RhdGEoYnAsIGZpZWxkLT5kY29scyAtIGZvcm0tPmN1cmNvbCk7CisJICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisJICB3Y2xydG9lb2woZm9ybS0+dyk7CisJICBmb3JtLT5jdXJyb3crKzsKKwkgIGZvcm0tPmN1cmNvbCA9IDA7CisJICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisJICB3aW5zZXJ0bG4oZm9ybS0+dyk7CisJICBteUFERE5TVFIoZm9ybS0+dywgYnAsIChpbnQpKHQgLSBicCkpOworCSAgZm9ybS0+c3RhdHVzIHw9IF9XSU5ET1dfTU9ESUZJRUQ7CisJICByZXR1cm5Db2RlKEVfT0spOworCX0KKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGRV9JbnNlcnRfQ2hhcmFjdGVyKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgSW5zZXJ0IGJsYW5rIGNoYXJhY3RlciBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVECisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfSW5zZXJ0X0NoYXJhY3RlcihGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBpbnQgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKworICBUKChUX0NBTExFRCgiRkVfSW5zZXJ0X0NoYXJhY3RlciglcCkiKSwgZm9ybSkpOworICBpZiAoQ2hlY2tfQ2hhcihmaWVsZC0+dHlwZSwgKGludClDX0JMQU5LLCAoVHlwZUFyZ3VtZW50ICopKGZpZWxkLT5hcmcpKSkKKyAgICB7CisgICAgICBib29sIFRoZXJlX0lzX1Jvb20gPSBJc19UaGVyZV9Sb29tX0Zvcl9BX0NoYXJfSW5fTGluZShmb3JtKTsKKworICAgICAgaWYgKFRoZXJlX0lzX1Jvb20gfHwKKwkgICgoU2luZ2xlX0xpbmVfRmllbGQoZmllbGQpICYmIEdyb3dhYmxlKGZpZWxkKSkpKQorCXsKKwkgIGlmICghVGhlcmVfSXNfUm9vbSAmJiAhRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCSAgICByZXN1bHQgPSBFX1NZU1RFTV9FUlJPUjsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHdpbnNjaChmb3JtLT53LCAoY2h0eXBlKUNfQkxBTkspOworCSAgICAgIHJlc3VsdCA9IFdyYXBwaW5nX05vdF9OZWNlc3NhcnlfT3JfV3JhcHBpbmdfT2soZm9ybSk7CisJICAgIH0KKwl9CisgICAgfQorICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGRV9JbnNlcnRfTGluZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEluc2VydCBhIGJsYW5rIGxpbmUgYXQgdGhlIGN1cnNvciBwb3NpdGlvbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgIC0gbGluZSBjYW4gbm90IGJlIGluc2VydGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfSW5zZXJ0X0xpbmUoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgaW50IHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisKKyAgVCgoVF9DQUxMRUQoIkZFX0luc2VydF9MaW5lKCVwKSIpLCBmb3JtKSk7CisgIGlmIChDaGVja19DaGFyKGZpZWxkLT50eXBlLCAoaW50KUNfQkxBTkssIChUeXBlQXJndW1lbnQgKikoZmllbGQtPmFyZykpKQorICAgIHsKKyAgICAgIGJvb2wgTWF5YmVfRG9uZSA9IChmb3JtLT5jdXJyb3cgIT0gKGZpZWxkLT5kcm93cyAtIDEpKSAmJgorICAgICAgSXNfVGhlcmVfUm9vbV9Gb3JfQV9MaW5lKGZvcm0pOworCisgICAgICBpZiAoIVNpbmdsZV9MaW5lX0ZpZWxkKGZpZWxkKSAmJgorCSAgKE1heWJlX0RvbmUgfHwgR3Jvd2FibGUoZmllbGQpKSkKKwl7CisJICBpZiAoIU1heWJlX0RvbmUgJiYgIUZpZWxkX0dyb3duKGZpZWxkLCAxKSkKKwkgICAgcmVzdWx0ID0gRV9TWVNURU1fRVJST1I7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBmb3JtLT5jdXJjb2wgPSAwOworCSAgICAgIHdpbnNlcnRsbihmb3JtLT53KTsKKwkgICAgICByZXN1bHQgPSBFX09LOworCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfRGVsZXRlX0NoYXJhY3RlcihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIERlbGV0ZSBjaGFyYWN0ZXIgYXQgdGhlIGN1cnNvciBwb3NpdGlvbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGRV9EZWxldGVfQ2hhcmFjdGVyKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGRV9EZWxldGVfQ2hhcmFjdGVyKCVwKSIpLCBmb3JtKSk7CisgIERlbGV0ZUNoYXIoZm9ybSk7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGRV9EZWxldGVfUHJldmlvdXMoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEZWxldGUgY2hhcmFjdGVyIGJlZm9yZSBjdXJzb3IuIEFnYWluIHRoaXMgaXMgYSByYXRoZXIKK3wgICAgICAgICAgICAgICAgICAgIGRpZmZpY3VsdCBwaWVjZSBjb21wYXJlZCB0byBvdGhlcnMgZHVlIHRvIHRoZSBvdmVybG9hZGluZworfCAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNzIG9mIGJhY2tzcGFjZS4KK3wgICAgICAgICAgICAgICAgICAgIE4uQi46IFRoZSBjYXNlIG9mIG92ZXJsb2FkZWQgQlMgb24gZmlyc3QgZmllbGQgcG9zaXRpb24KK3wgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFscmVhZHkgaGFuZGxlZCBpbiB0aGUgZ2VuZXJpYyByb3V0aW5lLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAgLSBDaGFyYWN0ZXIgY2FuJ3QgYmUgZGVsZXRlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZFX0RlbGV0ZV9QcmV2aW91cyhGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworCisgIFQoKFRfQ0FMTEVEKCJGRV9EZWxldGVfUHJldmlvdXMoJXApIiksIGZvcm0pKTsKKyAgaWYgKEZpcnN0X1Bvc2l0aW9uX0luX0N1cnJlbnRfRmllbGQoZm9ybSkpCisgICAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKworICBpZiAoKC0tKGZvcm0tPmN1cmNvbCkpIDwgMCkKKyAgICB7CisgICAgICBGSUVMRF9DRUxMICp0aGlzX2xpbmUsICpwcmV2X2xpbmUsICpwcmV2X2VuZCwgKnRoaXNfZW5kOworICAgICAgaW50IHRoaXNfcm93ID0gZm9ybS0+Y3Vycm93OworCisgICAgICBmb3JtLT5jdXJjb2wrKzsKKyAgICAgIGlmIChmb3JtLT5zdGF0dXMgJiBfT1ZMTU9ERSkKKwlyZXR1cm5Db2RlKEVfUkVRVUVTVF9ERU5JRUQpOworCisgICAgICBwcmV2X2xpbmUgPSBBZGRyZXNzX09mX1Jvd19Jbl9CdWZmZXIoZmllbGQsIChmb3JtLT5jdXJyb3cgLSAxKSk7CisgICAgICB0aGlzX2xpbmUgPSBBZGRyZXNzX09mX1Jvd19Jbl9CdWZmZXIoZmllbGQsIChmb3JtLT5jdXJyb3cpKTsKKyAgICAgIFN5bmNocm9uaXplX0J1ZmZlcihmb3JtKTsKKyAgICAgIHByZXZfZW5kID0gQWZ0ZXJfRW5kX09mX0RhdGEocHJldl9saW5lLCBmaWVsZC0+ZGNvbHMpOworICAgICAgdGhpc19lbmQgPSBBZnRlcl9FbmRfT2ZfRGF0YSh0aGlzX2xpbmUsIGZpZWxkLT5kY29scyk7CisgICAgICBpZiAoKGludCkodGhpc19lbmQgLSB0aGlzX2xpbmUpID4KKwkgIChmaWVsZC0+Y29scyAtIChpbnQpKHByZXZfZW5kIC0gcHJldl9saW5lKSkpCisJcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsKKyAgICAgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgICAgIHdkZWxldGVsbihmb3JtLT53KTsKKyAgICAgIEFkanVzdF9DdXJzb3JfUG9zaXRpb24oZm9ybSwgcHJldl9lbmQpOworICAgICAgLyoKKyAgICAgICAqIElmIHdlIGRpZCBub3QgcmVhbGx5IG1vdmUgdG8gdGhlIHByZXZpb3VzIGxpbmUsIGhlbHAgdGhlIHVzZXIgYQorICAgICAgICogbGl0dGxlLiAgSXQgaXMgaG93ZXZlciBhIGxpdHRsZSBpbmNvbnNpc3RlbnQuICBOb3JtYWxseSwgd2hlbgorICAgICAgICogYmFja3NwYWNpbmcgYXJvdW5kIHRoZSBwb2ludCB3aGVyZSB0ZXh0IHdyYXBzIHRvIGEgbmV3IGxpbmUgaW4gYQorICAgICAgICogbXVsdGktbGluZSBmb3JtLCB3ZSBhYnNvcmIgb25lIGtleXN0cm9rZSBmb3IgdGhlIHdyYXBwaW5nIHBvaW50LiAgVGhhdAorICAgICAgICogaXMgY29uc2lzdGVudCB3aXRoIFNWcjQgZm9ybXMuICBIb3dldmVyLCBTVnI0IGRvZXMgbm90IGFsbG93IHR5cGluZworICAgICAgICogaW50byB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIGZpZWxkLCBhbmQgcmVxdWlyZXMgdGhlIHVzZXIgdG8gZW50ZXIgYQorICAgICAgICogbmV3bGluZSB0byBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUuICBUaGVyZWZvcmUgaXQgY2FuIGNvbnNpc3RlbnRseSBlYXQKKyAgICAgICAqIHRoYXQga2V5c3Ryb2tlLiAgU2luY2UgbmN1cnNlcyBhbGxvd3MgdGhlIGxhc3QgY29sdW1uLCBpdCB3cmFwcworICAgICAgICogYXV0b21hdGljYWxseSAoZ2l2ZW4gdGhlIHByb3BlciBvcHRpb25zKS4gIEJ1dCB3ZSBjYW5ub3QgZWF0IHRoZQorICAgICAgICoga2V5c3Ryb2tlIHRvIGJhY2sgb3ZlciB0aGUgd3JhcHBpbmcgcG9pbnQsIHNpbmNlIHRoYXQgd291bGQgcHV0IHRoZQorICAgICAgICogY3Vyc29yIHBhc3QgdGhlIGVuZCBvZiB0aGUgZm9ybSBmaWVsZC4gIEluIHRoaXMgY2FzZSwganVzdCBkZWxldGUgdGhlCisgICAgICAgKiBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgZmllbGQuCisgICAgICAgKi8KKyAgICAgIGlmIChmb3JtLT5jdXJyb3cgPT0gdGhpc19yb3cgJiYgdGhpc19yb3cgPiAwKQorCXsKKwkgIGZvcm0tPmN1cnJvdyAtPSAxOworCSAgZm9ybS0+Y3VyY29sID0gZmllbGQtPmRjb2xzIC0gMTsKKwkgIERlbGV0ZUNoYXIoZm9ybSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHdtb3ZlKGZvcm0tPncsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKwkgIG15QURETlNUUihmb3JtLT53LCB0aGlzX2xpbmUsIChpbnQpKHRoaXNfZW5kIC0gdGhpc19saW5lKSk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIERlbGV0ZUNoYXIoZm9ybSk7CisgICAgfQorICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfRGVsZXRlX0xpbmUoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEZWxldGUgbGluZSBhdCBjdXJzb3IgcG9zaXRpb24uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGRV9EZWxldGVfTGluZShGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRkVfRGVsZXRlX0xpbmUoJXApIiksIGZvcm0pKTsKKyAgZm9ybS0+Y3VyY29sID0gMDsKKyAgd2RlbGV0ZWxuKGZvcm0tPncpOworICByZXR1cm5Db2RlKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRkVfRGVsZXRlX1dvcmQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEZWxldGUgd29yZCBhdCBjdXJzb3IgcG9zaXRpb24KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgICAtIGZhaWx1cmUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGRV9EZWxldGVfV29yZChGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworICBGSUVMRF9DRUxMICpicCA9IEFkZHJlc3NfT2ZfQ3VycmVudF9Sb3dfSW5fQnVmZmVyKGZvcm0pOworICBGSUVMRF9DRUxMICplcCA9IGJwICsgZmllbGQtPmRjb2xzOworICBGSUVMRF9DRUxMICpjcCA9IGJwICsgZm9ybS0+Y3VyY29sOworICBGSUVMRF9DRUxMICpzOworCisgIFQoKFRfQ0FMTEVEKCJGRV9EZWxldGVfV29yZCglcCkiKSwgZm9ybSkpOworICBTeW5jaHJvbml6ZV9CdWZmZXIoZm9ybSk7CisgIGlmIChJU0JMQU5LKCpjcCkpCisgICAgcmV0dXJuQ29kZShFX1JFUVVFU1RfREVOSUVEKTsJLyogbm90IGluIHdvcmQgKi8KKworICAvKiBtb3ZlIGN1cnNvciB0byBiZWdpbiBvZiB3b3JkIGFuZCBlcmFzZSB0byBlbmQgb2Ygc2NyZWVuLWxpbmUgKi8KKyAgQWRqdXN0X0N1cnNvcl9Qb3NpdGlvbihmb3JtLAorCQkJIEFmdGVyX0xhc3RfV2hpdGVzcGFjZV9DaGFyYWN0ZXIoYnAsIGZvcm0tPmN1cmNvbCkpOworICB3bW92ZShmb3JtLT53LCBmb3JtLT5jdXJyb3csIGZvcm0tPmN1cmNvbCk7CisgIHdjbHJ0b2VvbChmb3JtLT53KTsKKworICAvKiBza2lwIG92ZXIgd29yZCBpbiBidWZmZXIgKi8KKyAgcyA9IEdldF9GaXJzdF9XaGl0ZXNwYWNlX0NoYXJhY3RlcihjcCwgKGludCkoZXAgLSBjcCkpOworICAvKiB0byBiZWdpbiBvZiBuZXh0IHdvcmQgICAgKi8KKyAgcyA9IEdldF9TdGFydF9PZl9EYXRhKHMsIChpbnQpKGVwIC0gcykpOworICBpZiAoKHMgIT0gY3ApICYmICFJU0JMQU5LKCpzKSkKKyAgICB7CisgICAgICAvKiBjb3B5IHJlbWFpbmluZyBsaW5lIHRvIHdpbmRvdyAqLworICAgICAgbXlBREROU1RSKGZvcm0tPncsIHMsIChpbnQpKHMgLSBBZnRlcl9FbmRfT2ZfRGF0YShzLCAoaW50KShlcCAtIHMpKSkpOworICAgIH0KKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZFX0NsZWFyX1RvX0VuZF9PZl9MaW5lKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2xlYXIgdG8gZW5kIG9mIGN1cnJlbnQgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGRV9DbGVhcl9Ub19FbmRfT2ZfTGluZShGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRkVfQ2xlYXJfVG9fRW5kX09mX0xpbmUoJXApIiksIGZvcm0pKTsKKyAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICB3Y2xydG9lb2woZm9ybS0+dyk7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGRV9DbGVhcl9Ub19FbmRfT2ZfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDbGVhciB0byBlbmQgb2YgZmllbGQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRkVfQ2xlYXJfVG9fRW5kX09mX0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGRV9DbGVhcl9Ub19FbmRfT2ZfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgd21vdmUoZm9ybS0+dywgZm9ybS0+Y3Vycm93LCBmb3JtLT5jdXJjb2wpOworICB3Y2xydG9ib3QoZm9ybS0+dyk7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGRV9DbGVhcl9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENsZWFyIGVudGlyZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGRV9DbGVhcl9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRkVfQ2xlYXJfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgZm9ybS0+Y3Vycm93ID0gZm9ybS0+Y3VyY29sID0gMDsKKyAgd2VyYXNlKGZvcm0tPncpOworICByZXR1cm5Db2RlKEVfT0spOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVORCBvZiBGaWVsZCBFZGl0aW5nIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVkaXQgTW9kZSByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBFTV9PdmVybGF5X01vZGUoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTd2l0Y2ggdG8gb3ZlcmxheSBtb2RlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0VNX092ZXJsYXlfTW9kZShGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRU1fT3ZlcmxheV9Nb2RlKCVwKSIpLCBmb3JtKSk7CisgIGZvcm0tPnN0YXR1cyB8PSBfT1ZMTU9ERTsKKyAgcmV0dXJuQ29kZShFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEVNX0luc2VydF9Nb2RlKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3dpdGNoIHRvIGluc2VydCBtb2RlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRU1fSW5zZXJ0X01vZGUoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkVNX0luc2VydF9Nb2RlKCVwKSIpLCBmb3JtKSk7CisgIGZvcm0tPnN0YXR1cyAmPSB+X09WTE1PREU7CisgIHJldHVybkNvZGUoRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFTkQgb2YgRWRpdCBNb2RlIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEhlbHBlciByb3V0aW5lcyBmb3IgQ2hvaWNlIFJlcXVlc3RzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBOZXh0X0Nob2ljZSgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqIHR5cCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlQXJndW1lbnQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIG5leHQgZmllbGQgY2hvaWNlLiBGb3IgbGlua2VkIHR5cGVzIHRoaXMgaXMKK3wgICAgICAgICAgICAgICAgICAgIGRvbmUgcmVjdXJzaXZlbHkuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgIC0gbmV4dCBjaG9pY2Ugc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgICAtIGNvdWxkbid0IHJldHJpZXZlIG5leHQgY2hvaWNlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK05leHRfQ2hvaWNlKEZJRUxEVFlQRSAqdHlwLCBGSUVMRCAqZmllbGQsIFR5cGVBcmd1bWVudCAqYXJncCkKK3sKKyAgaWYgKCF0eXAgfHwgISh0eXAtPnN0YXR1cyAmIF9IQVNfQ0hPSUNFKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKHR5cC0+c3RhdHVzICYgX0xJTktFRF9UWVBFKQorICAgIHsKKyAgICAgIGFzc2VydChhcmdwKTsKKyAgICAgIHJldHVybiAoCisJICAgICAgIE5leHRfQ2hvaWNlKHR5cC0+bGVmdCwgZmllbGQsIGFyZ3AtPmxlZnQpIHx8CisJICAgICAgIE5leHRfQ2hvaWNlKHR5cC0+cmlnaHQsIGZpZWxkLCBhcmdwLT5yaWdodCkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFzc2VydCh0eXAtPm5leHQpOworICAgICAgcmV0dXJuIHR5cC0+bmV4dChmaWVsZCwgKHZvaWQgKilhcmdwKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgUHJldmlvdXNfQ2hvaWNlKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEVFlQRSAqIHR5cCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqIGZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVBcmd1bWVudCAqYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgcHJldmlvdXMgZmllbGQgY2hvaWNlLiBGb3IgbGlua2VkIHR5cGVzIHRoaXMKK3wgICAgICAgICAgICAgICAgICAgIGlzIGRvbmUgcmVjdXJzaXZlbHkuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAgIC0gcHJldmlvdXMgY2hvaWNlIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAgLSBjb3VsZG4ndCByZXRyaWV2ZSBwcmV2aW91cyBjaG9pY2UKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorUHJldmlvdXNfQ2hvaWNlKEZJRUxEVFlQRSAqdHlwLCBGSUVMRCAqZmllbGQsIFR5cGVBcmd1bWVudCAqYXJncCkKK3sKKyAgaWYgKCF0eXAgfHwgISh0eXAtPnN0YXR1cyAmIF9IQVNfQ0hPSUNFKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKHR5cC0+c3RhdHVzICYgX0xJTktFRF9UWVBFKQorICAgIHsKKyAgICAgIGFzc2VydChhcmdwKTsKKyAgICAgIHJldHVybiAoCisJICAgICAgIFByZXZpb3VzX0Nob2ljZSh0eXAtPmxlZnQsIGZpZWxkLCBhcmdwLT5sZWZ0KSB8fAorCSAgICAgICBQcmV2aW91c19DaG9pY2UodHlwLT5yaWdodCwgZmllbGQsIGFyZ3AtPnJpZ2h0KSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYXNzZXJ0KHR5cC0+cHJldik7CisgICAgICByZXR1cm4gdHlwLT5wcmV2KGZpZWxkLCAodm9pZCAqKWFyZ3ApOworICAgIH0KK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFbmQgb2YgSGVscGVyIHJvdXRpbmVzIGZvciBDaG9pY2UgUmVxdWVzdHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUm91dGluZXMgZm9yIENob2ljZSBSZXF1ZXN0cworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBDUl9OZXh0X0Nob2ljZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgbmV4dCBmaWVsZCBjaG9pY2UuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gbmV4dCBjaG9pY2UgY291bGRuJ3QgYmUgcmV0cmlldmVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorQ1JfTmV4dF9DaG9pY2UoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKworICBUKChUX0NBTExFRCgiQ1JfTmV4dF9DaG9pY2UoJXApIiksIGZvcm0pKTsKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICByZXR1cm5Db2RlKChOZXh0X0Nob2ljZShmaWVsZC0+dHlwZSwgZmllbGQsIChUeXBlQXJndW1lbnQgKikoZmllbGQtPmFyZykpKQorCSAgICAgPyBFX09LCisJICAgICA6IEVfUkVRVUVTVF9ERU5JRUQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgQ1JfUHJldmlvdXNfQ2hvaWNlKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBwcmV2aW91cyBmaWVsZCBjaG9pY2UuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gcHJldi4gY2hvaWNlIGNvdWxkbid0IGJlIHJldHJpZXZlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0NSX1ByZXZpb3VzX0Nob2ljZShGT1JNICpmb3JtKQoreworICBGSUVMRCAqZmllbGQgPSBmb3JtLT5jdXJyZW50OworCisgIFQoKFRfQ0FMTEVEKCJDUl9QcmV2aW91c19DaG9pY2UoJXApIiksIGZvcm0pKTsKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICByZXR1cm5Db2RlKChQcmV2aW91c19DaG9pY2UoZmllbGQtPnR5cGUsIGZpZWxkLCAoVHlwZUFyZ3VtZW50ICopKGZpZWxkLT5hcmcpKSkKKwkgICAgID8gRV9PSworCSAgICAgOiBFX1JFUVVFU1RfREVOSUVEKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFbmQgb2YgUm91dGluZXMgZm9yIENob2ljZSBSZXF1ZXN0cworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIZWxwZXIgcm91dGluZXMgZm9yIEZpZWxkIFZhbGlkYXRpb25zLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfRmllbGQoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRFRZUEUgKiB0eXAsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUVMRCAqIGZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUFyZ3VtZW50ICogYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIHRoZSBmaWVsZCBhY2NvcmRpbmcgdG8gaXRzIGZpZWxkdHlwZSBhbmQgaXRzCit8ICAgICAgICAgICAgICAgICAgICBhY3R1YWwgYXJndW1lbnRzLiBGb3IgbGlua2VkIGZpZWxkdHlwZXMgdGhpcyBpcyBkb25lCit8ICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVseS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAgICAgLSBmaWVsZCBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgICAgICAtIGZpZWxkIGlzIGludmFsaWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX0ZpZWxkKEZJRUxEVFlQRSAqdHlwLCBGSUVMRCAqZmllbGQsIFR5cGVBcmd1bWVudCAqYXJncCkKK3sKKyAgaWYgKHR5cCkKKyAgICB7CisgICAgICBpZiAoZmllbGQtPm9wdHMgJiBPX05VTExPSykKKwl7CisJICBGSUVMRF9DRUxMICpicCA9IGZpZWxkLT5idWY7CisKKwkgIGFzc2VydChicCk7CisJICB3aGlsZSAoSVNCTEFOSygqYnApKQorCSAgICB7CisJICAgICAgYnArKzsKKwkgICAgfQorCSAgaWYgKENoYXJPZigqYnApID09IDApCisJICAgIHJldHVybiBUUlVFOworCX0KKworICAgICAgaWYgKHR5cC0+c3RhdHVzICYgX0xJTktFRF9UWVBFKQorCXsKKwkgIGFzc2VydChhcmdwKTsKKwkgIHJldHVybiAoCisJCSAgIENoZWNrX0ZpZWxkKHR5cC0+bGVmdCwgZmllbGQsIGFyZ3AtPmxlZnQpIHx8CisJCSAgIENoZWNrX0ZpZWxkKHR5cC0+cmlnaHQsIGZpZWxkLCBhcmdwLT5yaWdodCkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAodHlwLT5mY2hlY2spCisJICAgIHJldHVybiB0eXAtPmZjaGVjayhmaWVsZCwgKHZvaWQgKilhcmdwKTsKKwl9CisgICAgfQorICByZXR1cm4gVFJVRTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBib29sIF9uY19JbnRlcm5hbF9WYWxpZGF0aW9uKEZPUk0gKiBmb3JtICkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFZhbGlkYXRlIHRoZSBjdXJyZW50IGZpZWxkIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBmaWVsZCBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBmaWVsZCBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19JbnRlcm5hbF9WYWxpZGF0aW9uKEZPUk0gKmZvcm0pCit7CisgIEZJRUxEICpmaWVsZDsKKworICBmaWVsZCA9IGZvcm0tPmN1cnJlbnQ7CisKKyAgU3luY2hyb25pemVfQnVmZmVyKGZvcm0pOworICBpZiAoKGZvcm0tPnN0YXR1cyAmIF9GQ0hFQ0tfUkVRVUlSRUQpIHx8CisgICAgICAoIShmaWVsZC0+b3B0cyAmIE9fUEFTU09LKSkpCisgICAgeworICAgICAgaWYgKCFDaGVja19GaWVsZChmaWVsZC0+dHlwZSwgZmllbGQsIChUeXBlQXJndW1lbnQgKikoZmllbGQtPmFyZykpKQorCXJldHVybiBGQUxTRTsKKyAgICAgIGZvcm0tPnN0YXR1cyAmPSB+X0ZDSEVDS19SRVFVSVJFRDsKKyAgICAgIGZpZWxkLT5zdGF0dXMgfD0gX0NIQU5HRUQ7CisgICAgICBTeW5jaHJvbml6ZV9MaW5rZWRfRmllbGRzKGZpZWxkKTsKKyAgICB9CisgIHJldHVybiBUUlVFOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVuZCBvZiBIZWxwZXIgcm91dGluZXMgZm9yIEZpZWxkIFZhbGlkYXRpb25zLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSb3V0aW5lcyBmb3IgRmllbGQgVmFsaWRhdGlvbi4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRlZfVmFsaWRhdGlvbihGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFZhbGlkYXRlIHRoZSBjdXJyZW50IGZpZWxkIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIGZpZWxkIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBFX0lOVkFMSURfRklFTEQgIC0gZmllbGQgbm90IHZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRlZfVmFsaWRhdGlvbihGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRlZfVmFsaWRhdGlvbiglcCkiKSwgZm9ybSkpOworICBpZiAoX25jX0ludGVybmFsX1ZhbGlkYXRpb24oZm9ybSkpCisgICAgcmV0dXJuQ29kZShFX09LKTsKKyAgZWxzZQorICAgIHJldHVybkNvZGUoRV9JTlZBTElEX0ZJRUxEKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFbmQgb2Ygcm91dGluZXMgZm9yIEZpZWxkIFZhbGlkYXRpb24uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEhlbHBlciByb3V0aW5lcyBmb3IgSW50ZXItRmllbGQgTmF2aWdhdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIEZJRUxEICpOZXh0X0ZpZWxkX09uX1BhZ2UoRklFTEQgKiBmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgbmV4dCBmaWVsZCBhZnRlciB0aGUgZ2l2ZW4gZmllbGQgb24gdGhlIGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIHBhZ2UuIFRoZSBvcmRlciBvZiBmaWVsZHMgaXMgdGhlIG9uZSBkZWZpbmVkIGJ5IHRoZQorfCAgICAgICAgICAgICAgICAgICAgZmllbGRzIGFycmF5LiBPbmx5IHZpc2libGUgYW5kIGFjdGl2ZSBmaWVsZHMgYXJlCit8ICAgICAgICAgICAgICAgICAgICBjb3VudGVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgbmV4dCBmaWVsZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTEQgKgorTmV4dF9GaWVsZF9Pbl9QYWdlKEZJRUxEICpmaWVsZCkKK3sKKyAgRk9STSAqZm9ybSA9IGZpZWxkLT5mb3JtOworICBGSUVMRCAqKmZpZWxkX29uX3BhZ2UgPSAmZm9ybS0+ZmllbGRbZmllbGQtPmluZGV4XTsKKyAgRklFTEQgKipmaXJzdF9vbl9wYWdlID0gJmZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1pbl07CisgIEZJRUxEICoqbGFzdF9vbl9wYWdlID0gJmZvcm0tPmZpZWxkW2Zvcm0tPnBhZ2VbZm9ybS0+Y3VycGFnZV0ucG1heF07CisKKyAgZG8KKyAgICB7CisgICAgICBmaWVsZF9vbl9wYWdlID0KKwkoZmllbGRfb25fcGFnZSA9PSBsYXN0X29uX3BhZ2UpID8gZmlyc3Rfb25fcGFnZSA6IGZpZWxkX29uX3BhZ2UgKyAxOworICAgICAgaWYgKEZpZWxkX0lzX1NlbGVjdGFibGUoKmZpZWxkX29uX3BhZ2UpKQorCWJyZWFrOworICAgIH0KKyAgd2hpbGUgKGZpZWxkICE9ICgqZmllbGRfb25fcGFnZSkpOworICByZXR1cm4gKCpmaWVsZF9vbl9wYWdlKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBGSUVMRCogX25jX0ZpcnN0X0FjdGl2ZV9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgZmlyc3QgYWN0aXZlIGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2UsCit8ICAgICAgICAgICAgICAgICAgICBpZiB0aGVyZSBhcmUgc3VjaC4gSWYgdGhlcmUgYXJlIG5vbmUsIGdldCB0aGUgZmlyc3QKK3wgICAgICAgICAgICAgICAgICAgIHZpc2libGUgZmllbGQgb24gdGhlIHBhZ2UuIElmIHRoZXJlIGFyZSBhbHNvIG5vbmUsCit8ICAgICAgICAgICAgICAgICAgICB3ZSByZXR1cm4gdGhlIGZpcnN0IGZpZWxkIG9uIHBhZ2UgYW5kIGhvcGUgdGhlIGJlc3QuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGNhbGN1bGF0ZWQgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoRklFTEQgKikKK19uY19GaXJzdF9BY3RpdmVfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgRklFTEQgKipsYXN0X29uX3BhZ2UgPSAmZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWF4XTsKKyAgRklFTEQgKnByb3Bvc2VkID0gTmV4dF9GaWVsZF9Pbl9QYWdlKCpsYXN0X29uX3BhZ2UpOworCisgIGlmIChwcm9wb3NlZCA9PSAqbGFzdF9vbl9wYWdlKQorICAgIHsKKyAgICAgIC8qIHRoZXJlIG1pZ2h0IGJlIHRoZSBzcGVjaWFsIHNpdHVhdGlvbiwgd2hlcmUgdGhlcmUgaXMgbm8KKyAgICAgICAgIGFjdGl2ZSBhbmQgdmlzaWJsZSBmaWVsZCBvbiB0aGUgY3VycmVudCBwYWdlLiBXZSB0aGVuIHNlbGVjdAorICAgICAgICAgdGhlIGZpcnN0IHZpc2libGUgZmllbGQgb24gdGhpcyByZWFkb25seSBwYWdlCisgICAgICAgKi8KKyAgICAgIGlmIChGaWVsZF9Jc19Ob3RfU2VsZWN0YWJsZShwcm9wb3NlZCkpCisJeworCSAgRklFTEQgKipmaWVsZCA9ICZmb3JtLT5maWVsZFtwcm9wb3NlZC0+aW5kZXhdOworCSAgRklFTEQgKipmaXJzdCA9ICZmb3JtLT5maWVsZFtmb3JtLT5wYWdlW2Zvcm0tPmN1cnBhZ2VdLnBtaW5dOworCisJICBkbworCSAgICB7CisJICAgICAgZmllbGQgPSAoZmllbGQgPT0gbGFzdF9vbl9wYWdlKSA/IGZpcnN0IDogZmllbGQgKyAxOworCSAgICAgIGlmICgoKCpmaWVsZCktPm9wdHMgJiBPX1ZJU0lCTEUpKQorCQlicmVhazsKKwkgICAgfQorCSAgd2hpbGUgKHByb3Bvc2VkICE9ICgqZmllbGQpKTsKKworCSAgcHJvcG9zZWQgPSAqZmllbGQ7CisKKwkgIGlmICgocHJvcG9zZWQgPT0gKmxhc3Rfb25fcGFnZSkgJiYgIShwcm9wb3NlZC0+b3B0cyAmIE9fVklTSUJMRSkpCisJICAgIHsKKwkgICAgICAvKiBUaGlzIG1lYW5zLCB0aGVyZSBpcyBhbHNvIG5vIHZpc2libGUgZmllbGQgb24gdGhlIHBhZ2UuCisJICAgICAgICAgU28gd2UgcHJvcG9zZSB0aGUgZmlyc3Qgb25lIGFuZCBob3BlIHRoZSB2ZXJ5IGJlc3QuLi4KKwkgICAgICAgICBTb21lIHZlcnkgY2xldmVyIHVzZXIgaGFzIGRlc2lnbmVkIGEgcmVhZG9ubHkgYW5kIGludmlzaWJsZQorCSAgICAgICAgIHBhZ2Ugb24gdGhpcyBmb3JtLgorCSAgICAgICAqLworCSAgICAgIHByb3Bvc2VkID0gKmZpcnN0OworCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIChwcm9wb3NlZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIEZJRUxEICpQcmV2aW91c19GaWVsZF9Pbl9QYWdlKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIHByZXZpb3VzIGZpZWxkIGJlZm9yZSB0aGUgZ2l2ZW4gZmllbGQgb24gdGhlCit8ICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHBhZ2UuIFRoZSBvcmRlciBvZiBmaWVsZHMgaXMgdGhlIG9uZSBkZWZpbmVkIGJ5Cit8ICAgICAgICAgICAgICAgICAgICB0aGUgZmllbGRzIGFycmF5LiBPbmx5IHZpc2libGUgYW5kIGFjdGl2ZSBmaWVsZHMgYXJlCit8ICAgICAgICAgICAgICAgICAgICBjb3VudGVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgcHJldmlvdXMgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19JTkxJTkUgc3RhdGljIEZJRUxEICoKK1ByZXZpb3VzX0ZpZWxkX09uX1BhZ2UoRklFTEQgKmZpZWxkKQoreworICBGT1JNICpmb3JtID0gZmllbGQtPmZvcm07CisgIEZJRUxEICoqZmllbGRfb25fcGFnZSA9ICZmb3JtLT5maWVsZFtmaWVsZC0+aW5kZXhdOworICBGSUVMRCAqKmZpcnN0X29uX3BhZ2UgPSAmZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWluXTsKKyAgRklFTEQgKipsYXN0X29uX3BhZ2UgPSAmZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWF4XTsKKworICBkbworICAgIHsKKyAgICAgIGZpZWxkX29uX3BhZ2UgPQorCShmaWVsZF9vbl9wYWdlID09IGZpcnN0X29uX3BhZ2UpID8gbGFzdF9vbl9wYWdlIDogZmllbGRfb25fcGFnZSAtIDE7CisgICAgICBpZiAoRmllbGRfSXNfU2VsZWN0YWJsZSgqZmllbGRfb25fcGFnZSkpCisJYnJlYWs7CisgICAgfQorICB3aGlsZSAoZmllbGQgIT0gKCpmaWVsZF9vbl9wYWdlKSk7CisKKyAgcmV0dXJuICgqZmllbGRfb25fcGFnZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIEZJRUxEICpTb3J0ZWRfTmV4dF9GaWVsZChGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBuZXh0IGZpZWxkIGFmdGVyIHRoZSBnaXZlbiBmaWVsZCBvbiB0aGUgY3VycmVudAorfCAgICAgICAgICAgICAgICAgICAgcGFnZS4gVGhlIG9yZGVyIG9mIGZpZWxkcyBpcyB0aGUgb25lIGRlZmluZWQgYnkgdGhlCit8ICAgICAgICAgICAgICAgICAgICAocm93LGNvbHVtbikgZ2VvbWV0cnksIHJvd3MgYXJlIG1ham9yLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgbmV4dCBmaWVsZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTEQgKgorU29ydGVkX05leHRfRmllbGQoRklFTEQgKmZpZWxkKQoreworICBGSUVMRCAqZmllbGRfb25fcGFnZSA9IGZpZWxkOworCisgIGRvCisgICAgeworICAgICAgZmllbGRfb25fcGFnZSA9IGZpZWxkX29uX3BhZ2UtPnNuZXh0OworICAgICAgaWYgKEZpZWxkX0lzX1NlbGVjdGFibGUoZmllbGRfb25fcGFnZSkpCisJYnJlYWs7CisgICAgfQorICB3aGlsZSAoZmllbGRfb25fcGFnZSAhPSBmaWVsZCk7CisKKyAgcmV0dXJuIChmaWVsZF9vbl9wYWdlKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgRklFTEQgKlNvcnRlZF9QcmV2aW91c19GaWVsZChGSUVMRCAqIGZpZWxkKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBwcmV2aW91cyBmaWVsZCBiZWZvcmUgdGhlIGdpdmVuIGZpZWxkIG9uIHRoZQorfCAgICAgICAgICAgICAgICAgICAgY3VycmVudCBwYWdlLiBUaGUgb3JkZXIgb2YgZmllbGRzIGlzIHRoZSBvbmUgZGVmaW5lZAorfCAgICAgICAgICAgICAgICAgICAgYnkgdGhlIChyb3csY29sdW1uKSBnZW9tZXRyeSwgcm93cyBhcmUgbWFqb3IuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIHRoZSBwcmV2aW91cyBmaWVsZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTEQgKgorU29ydGVkX1ByZXZpb3VzX0ZpZWxkKEZJRUxEICpmaWVsZCkKK3sKKyAgRklFTEQgKmZpZWxkX29uX3BhZ2UgPSBmaWVsZDsKKworICBkbworICAgIHsKKyAgICAgIGZpZWxkX29uX3BhZ2UgPSBmaWVsZF9vbl9wYWdlLT5zcHJldjsKKyAgICAgIGlmIChGaWVsZF9Jc19TZWxlY3RhYmxlKGZpZWxkX29uX3BhZ2UpKQorCWJyZWFrOworICAgIH0KKyAgd2hpbGUgKGZpZWxkX29uX3BhZ2UgIT0gZmllbGQpOworCisgIHJldHVybiAoZmllbGRfb25fcGFnZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIEZJRUxEICpMZWZ0X05laWdoYm9yX0ZpZWxkKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIGxlZnQgbmVpZ2hib3Igb2YgdGhlIGZpZWxkIG9uIHRoZSBzYW1lIGxpbmUKK3wgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc2FtZSBwYWdlLiBDeWNsZXMgdGhyb3VnaCB0aGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gbGVmdCBuZWlnaGJvciBmaWVsZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTEQgKgorTGVmdF9OZWlnaGJvcl9GaWVsZChGSUVMRCAqZmllbGQpCit7CisgIEZJRUxEICpmaWVsZF9vbl9wYWdlID0gZmllbGQ7CisKKyAgLyogRm9yIGEgZmllbGQgdGhhdCBoYXMgcmVhbGx5IGEgbGVmdCBuZWlnaGJvciwgdGhlIHdoaWxlIGNsYXVzZQorICAgICBpbW1lZGlhdGVseSBmYWlscyBhbmQgdGhlIGxvb3AgaXMgbGVmdCwgcG9zaXRpb25lZCBhdCB0aGUgcmlnaHQKKyAgICAgbmVpZ2hib3IuIE90aGVyd2lzZSB3ZSBjeWNsZSBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgc29ydGVkIGZpZWxkIGxpc3QKKyAgICAgdW50aWwgd2UgZW50ZXIgdGhlIHNhbWUgbGluZSAoZnJvbSB0aGUgcmlnaHQgZW5kKS4KKyAgICovCisgIGRvCisgICAgeworICAgICAgZmllbGRfb25fcGFnZSA9IFNvcnRlZF9QcmV2aW91c19GaWVsZChmaWVsZF9vbl9wYWdlKTsKKyAgICB9CisgIHdoaWxlIChmaWVsZF9vbl9wYWdlLT5mcm93ICE9IGZpZWxkLT5mcm93KTsKKworICByZXR1cm4gKGZpZWxkX29uX3BhZ2UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqUmlnaHRfTmVpZ2hib3JfRmllbGQoRklFTEQgKiBmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgcmlnaHQgbmVpZ2hib3Igb2YgdGhlIGZpZWxkIG9uIHRoZSBzYW1lIGxpbmUKK3wgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc2FtZSBwYWdlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byByaWdodCBuZWlnaGJvciBmaWVsZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgRklFTEQgKgorUmlnaHRfTmVpZ2hib3JfRmllbGQoRklFTEQgKmZpZWxkKQoreworICBGSUVMRCAqZmllbGRfb25fcGFnZSA9IGZpZWxkOworCisgIC8qIFNlZSB0aGUgY29tbWVudHMgb24gTGVmdF9OZWlnaGJvcl9GaWVsZCB0byB1bmRlcnN0YW5kIGhvdyBpdCB3b3JrcyAqLworICBkbworICAgIHsKKyAgICAgIGZpZWxkX29uX3BhZ2UgPSBTb3J0ZWRfTmV4dF9GaWVsZChmaWVsZF9vbl9wYWdlKTsKKyAgICB9CisgIHdoaWxlIChmaWVsZF9vbl9wYWdlLT5mcm93ICE9IGZpZWxkLT5mcm93KTsKKworICByZXR1cm4gKGZpZWxkX29uX3BhZ2UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBGSUVMRCAqVXBwZXJfTmVpZ2hib3JfRmllbGQoRklFTEQgKiBmaWVsZCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEJlY2F1c2Ugb2YgdGhlIHJvdy1tYWpvciBuYXR1cmUgb2Ygc29ydGluZyB0aGUgZmllbGRzLAorfCAgICAgICAgICAgICAgICAgICAgaXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gZGVmaW5lIHdoYXRzIHRoZSB1cHBlciBuZWlnaGJvcgorfCAgICAgICAgICAgICAgICAgICAgZmllbGQgcmVhbGx5IG1lYW5zLiBXZSBkZWZpbmUgdGhhdCBpdCBtdXN0IGJlIG9uIGEKK3wgICAgICAgICAgICAgICAgICAgICdwcmV2aW91cycgbGluZSAoY3ljbGljIG9yZGVyISkgYW5kIGlzIHRoZSByaWdodG1vc3QKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkIGxheWluZyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBnaXZlbiBmaWVsZC4gSWYKK3wgICAgICAgICAgICAgICAgICAgIHRoaXMgc2V0IGlzIGVtcHR5LCB3ZSB0YWtlIHRoZSBmaXJzdCBmaWVsZCBvbiB0aGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gdGhlIHVwcGVyIG5laWdoYm9yIGZpZWxkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBGSUVMRCAqCitVcHBlcl9OZWlnaGJvcl9GaWVsZChGSUVMRCAqZmllbGQpCit7CisgIEZJRUxEICpmaWVsZF9vbl9wYWdlID0gZmllbGQ7CisgIGludCBmcm93ID0gZmllbGQtPmZyb3c7CisgIGludCBmY29sID0gZmllbGQtPmZjb2w7CisKKyAgLyogV2FsayBiYWNrIHRvIHRoZSAncHJldmlvdXMnIGxpbmUuIFRoZSBzZWNvbmQgdGVybSBpbiB0aGUgd2hpbGUgY2xhdXNlCisgICAgIGp1c3QgZ3VhcmFudGVlcyB0aGF0IHdlIHN0b3AgaWYgd2UgY3ljbGVkIHRocm91Z2ggdGhlIGxpbmUgYmVjYXVzZQorICAgICB0aGVyZSBtaWdodCBiZSBubyAncHJldmlvdXMnIGxpbmUgaWYgdGhlIHBhZ2UgaGFzIGp1c3Qgb25lIGxpbmUuCisgICAqLworICBkbworICAgIHsKKyAgICAgIGZpZWxkX29uX3BhZ2UgPSBTb3J0ZWRfUHJldmlvdXNfRmllbGQoZmllbGRfb25fcGFnZSk7CisgICAgfQorICB3aGlsZSAoZmllbGRfb25fcGFnZS0+ZnJvdyA9PSBmcm93ICYmIGZpZWxkX29uX3BhZ2UtPmZjb2wgIT0gZmNvbCk7CisKKyAgaWYgKGZpZWxkX29uX3BhZ2UtPmZyb3cgIT0gZnJvdykKKyAgICB7CisgICAgICAvKiBXZSByZWFsbHkgZm91bmQgYSAncHJldmlvdXMnIGxpbmUuIFdlIGFyZSBwb3NpdGlvbmVkIGF0IHRoZQorICAgICAgICAgcmlnaHRtb3N0IGZpZWxkIG9uIHRoaXMgbGluZSAqLworICAgICAgZnJvdyA9IGZpZWxkX29uX3BhZ2UtPmZyb3c7CisKKyAgICAgIC8qIFdlIHdhbGsgdG8gdGhlIGxlZnQgYXMgbG9uZyBhcyB3ZSBhcmUgcmVhbGx5IHJpZ2h0IG9mIHRoZQorICAgICAgICAgZmllbGQuICovCisgICAgICB3aGlsZSAoZmllbGRfb25fcGFnZS0+ZnJvdyA9PSBmcm93ICYmIGZpZWxkX29uX3BhZ2UtPmZjb2wgPiBmY29sKQorCWZpZWxkX29uX3BhZ2UgPSBTb3J0ZWRfUHJldmlvdXNfRmllbGQoZmllbGRfb25fcGFnZSk7CisKKyAgICAgIC8qIElmIHdlIHdyYXBwZWQsIGp1c3QgZ28gdG8gdGhlIHJpZ2h0IHdoaWNoIGlzIHRoZSBmaXJzdCBmaWVsZCBvbgorICAgICAgICAgdGhlIHJvdyAqLworICAgICAgaWYgKGZpZWxkX29uX3BhZ2UtPmZyb3cgIT0gZnJvdykKKwlmaWVsZF9vbl9wYWdlID0gU29ydGVkX05leHRfRmllbGQoZmllbGRfb25fcGFnZSk7CisgICAgfQorCisgIHJldHVybiAoZmllbGRfb25fcGFnZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIEZJRUxEICpEb3duX05laWdoYm9yX0ZpZWxkKEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBCZWNhdXNlIG9mIHRoZSByb3ctbWFqb3IgbmF0dXJlIG9mIHNvcnRpbmcgdGhlIGZpZWxkcywKK3wgICAgICAgICAgICAgICAgICAgIGl0cyBtb3JlIGRpZmZpY3VsdCB0byBkZWZpbmUgd2hhdHMgdGhlIGRvd24gbmVpZ2hib3IKK3wgICAgICAgICAgICAgICAgICAgIGZpZWxkIHJlYWxseSBtZWFucy4gV2UgZGVmaW5lIHRoYXQgaXQgbXVzdCBiZSBvbiBhCit8ICAgICAgICAgICAgICAgICAgICAnbmV4dCcgbGluZSAoY3ljbGljIG9yZGVyISkgYW5kIGlzIHRoZSBsZWZ0bW9zdAorfCAgICAgICAgICAgICAgICAgICAgZmllbGQgbGF5aW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBnaXZlbiBmaWVsZC4gSWYKK3wgICAgICAgICAgICAgICAgICAgIHRoaXMgc2V0IGlzIGVtcHR5LCB3ZSB0YWtlIHRoZSBsYXN0IGZpZWxkIG9uIHRoZSBsaW5lLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byB0aGUgdXBwZXIgbmVpZ2hib3IgZmllbGQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIEZJRUxEICoKK0Rvd25fTmVpZ2hib3JfRmllbGQoRklFTEQgKmZpZWxkKQoreworICBGSUVMRCAqZmllbGRfb25fcGFnZSA9IGZpZWxkOworICBpbnQgZnJvdyA9IGZpZWxkLT5mcm93OworICBpbnQgZmNvbCA9IGZpZWxkLT5mY29sOworCisgIC8qIFdhbGsgZm9yd2FyZCB0byB0aGUgJ25leHQnIGxpbmUuIFRoZSBzZWNvbmQgdGVybSBpbiB0aGUgd2hpbGUgY2xhdXNlCisgICAgIGp1c3QgZ3VhcmFudGVlcyB0aGF0IHdlIHN0b3AgaWYgd2UgY3ljbGVkIHRocm91Z2ggdGhlIGxpbmUgYmVjYXVzZQorICAgICB0aGVyZSBtaWdodCBiZSBubyAnbmV4dCcgbGluZSBpZiB0aGUgcGFnZSBoYXMganVzdCBvbmUgbGluZS4KKyAgICovCisgIGRvCisgICAgeworICAgICAgZmllbGRfb25fcGFnZSA9IFNvcnRlZF9OZXh0X0ZpZWxkKGZpZWxkX29uX3BhZ2UpOworICAgIH0KKyAgd2hpbGUgKGZpZWxkX29uX3BhZ2UtPmZyb3cgPT0gZnJvdyAmJiBmaWVsZF9vbl9wYWdlLT5mY29sICE9IGZjb2wpOworCisgIGlmIChmaWVsZF9vbl9wYWdlLT5mcm93ICE9IGZyb3cpCisgICAgeworICAgICAgLyogV2UgcmVhbGx5IGZvdW5kIGEgJ25leHQnIGxpbmUuIFdlIGFyZSBwb3NpdGlvbmVkIGF0IHRoZSByaWdodG1vc3QKKyAgICAgICAgIGZpZWxkIG9uIHRoaXMgbGluZSAqLworICAgICAgZnJvdyA9IGZpZWxkX29uX3BhZ2UtPmZyb3c7CisKKyAgICAgIC8qIFdlIHdhbGsgdG8gdGhlIHJpZ2h0IGFzIGxvbmcgYXMgd2UgYXJlIHJlYWxseSBsZWZ0IG9mIHRoZQorICAgICAgICAgZmllbGQuICovCisgICAgICB3aGlsZSAoZmllbGRfb25fcGFnZS0+ZnJvdyA9PSBmcm93ICYmIGZpZWxkX29uX3BhZ2UtPmZjb2wgPCBmY29sKQorCWZpZWxkX29uX3BhZ2UgPSBTb3J0ZWRfTmV4dF9GaWVsZChmaWVsZF9vbl9wYWdlKTsKKworICAgICAgLyogSWYgd2Ugd3JhcHBlZCwganVzdCBnbyB0byB0aGUgbGVmdCB3aGljaCBpcyB0aGUgbGFzdCBmaWVsZCBvbgorICAgICAgICAgdGhlIHJvdyAqLworICAgICAgaWYgKGZpZWxkX29uX3BhZ2UtPmZyb3cgIT0gZnJvdykKKwlmaWVsZF9vbl9wYWdlID0gU29ydGVkX1ByZXZpb3VzX0ZpZWxkKGZpZWxkX29uX3BhZ2UpOworICAgIH0KKworICByZXR1cm4gKGZpZWxkX29uX3BhZ2UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSW50ZXItRmllbGQgTmF2aWdhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBJbnRlcl9GaWVsZF9OYXZpZ2F0aW9uKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCogY29uc3QgZmN0KSAoRk9STSAqKSwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZW5lcmljIGJlaGF2aW9yIGZvciBjaGFuZ2luZyB0aGUgY3VycmVudCBmaWVsZCwgdGhlCit8ICAgICAgICAgICAgICAgICAgICBmaWVsZCBpcyBsZWZ0IGFuZCBhIG5ldyBmaWVsZCBpcyBlbnRlcmVkLiBTbyB0aGUgZmllbGQKK3wgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgdmFsaWRhdGVkIGFuZCB0aGUgZmllbGQgaW5pdC90ZXJtIGhvb2tzIG11c3QKK3wgICAgICAgICAgICAgICAgICAgIGJlIGNhbGxlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0lOVkFMSURfRklFTEQgICAgIC0gZmllbGQgaXMgaW52YWxpZAorfCAgICAgICAgICAgICAgICAgICAgc29tZSBvdGhlciAgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ludGVyX0ZpZWxkX05hdmlnYXRpb24oaW50ICgqY29uc3QgZmN0KSAoRk9STSAqKSwgRk9STSAqZm9ybSkKK3sKKyAgaW50IHJlczsKKworICBpZiAoIV9uY19JbnRlcm5hbF9WYWxpZGF0aW9uKGZvcm0pKQorICAgIHJlcyA9IEVfSU5WQUxJRF9GSUVMRDsKKyAgZWxzZQorICAgIHsKKyAgICAgIENhbGxfSG9vayhmb3JtLCBmaWVsZHRlcm0pOworICAgICAgcmVzID0gZmN0KGZvcm0pOworICAgICAgQ2FsbF9Ib29rKGZvcm0sIGZpZWxkaW5pdCk7CisgICAgfQorICByZXR1cm4gcmVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRk5fTmV4dF9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIG5leHQgZmllbGQgb24gdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUgZm9ybQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZOX05leHRfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX05leHRfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBOZXh0X0ZpZWxkX09uX1BhZ2UoZm9ybS0+Y3VycmVudCkpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX1ByZXZpb3VzX0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgcHJldmlvdXMgZmllbGQgb24gdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9QcmV2aW91c19GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fUHJldmlvdXNfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBQcmV2aW91c19GaWVsZF9Pbl9QYWdlKGZvcm0tPmN1cnJlbnQpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9GaXJzdF9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIGZpcnN0IGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2Ugb2YgdGhlIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9GaXJzdF9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fRmlyc3RfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBOZXh0X0ZpZWxkX09uX1BhZ2UoZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWF4XSkpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX0xhc3RfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBsYXN0IGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2Ugb2YgdGhlIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9MYXN0X0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGTl9MYXN0X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoCisJICAgICAgX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgIFByZXZpb3VzX0ZpZWxkX09uX1BhZ2UoZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWluXSkpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX1NvcnRlZF9OZXh0X0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgc29ydGVkIG5leHQgZmllbGQgb24gdGhlIGN1cnJlbnQgcGFnZQorfCAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9Tb3J0ZWRfTmV4dF9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fU29ydGVkX05leHRfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBTb3J0ZWRfTmV4dF9GaWVsZChmb3JtLT5jdXJyZW50KSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgRk5fU29ydGVkX1ByZXZpb3VzX0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgc29ydGVkIHByZXZpb3VzIGZpZWxkIG9uIHRoZSBjdXJyZW50IHBhZ2UKK3wgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRk5fU29ydGVkX1ByZXZpb3VzX0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGTl9Tb3J0ZWRfUHJldmlvdXNfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBTb3J0ZWRfUHJldmlvdXNfRmllbGQoZm9ybS0+Y3VycmVudCkpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX1NvcnRlZF9GaXJzdF9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIHNvcnRlZCBmaXJzdCBmaWVsZCBvbiB0aGUgY3VycmVudCBwYWdlCit8ICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZm9ybS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZOX1NvcnRlZF9GaXJzdF9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fU29ydGVkX0ZpcnN0X0ZpZWxkKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoX25jX1NldF9DdXJyZW50X0ZpZWxkKGZvcm0sCisJCQkJICAgU29ydGVkX05leHRfRmllbGQoZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5zbWF4XSkpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX1NvcnRlZF9MYXN0X0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgc29ydGVkIGxhc3QgZmllbGQgb24gdGhlIGN1cnJlbnQgcGFnZQorfCAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitGTl9Tb3J0ZWRfTGFzdF9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fU29ydGVkX0xhc3RfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBTb3J0ZWRfUHJldmlvdXNfRmllbGQoZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5zbWluXSkpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IEZOX0xlZnRfRmllbGQoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIGZpZWxkIG9uIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IGZpZWxkIG9uIHRoZQorfCAgICAgICAgICAgICAgICAgICAgc2FtZSBsaW5lIGFuZCB0aGUgc2FtZSBwYWdlLiBDeWNsZXMgdGhyb3VnaCB0aGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZOX0xlZnRfRmllbGQoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIkZOX0xlZnRfRmllbGQoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwKKwkJCQkgICBMZWZ0X05laWdoYm9yX0ZpZWxkKGZvcm0tPmN1cnJlbnQpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9SaWdodF9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgZmllbGQgb24gdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50IGZpZWxkIG9uIHRoZQorfCAgICAgICAgICAgICAgICAgICAgc2FtZSBsaW5lIGFuZCB0aGUgc2FtZSBwYWdlLiBDeWNsZXMgdGhyb3VnaCB0aGUgbGluZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZOX1JpZ2h0X0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGTl9SaWdodF9GaWVsZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKF9uY19TZXRfQ3VycmVudF9GaWVsZChmb3JtLAorCQkJCSAgIFJpZ2h0X05laWdoYm9yX0ZpZWxkKGZvcm0tPmN1cnJlbnQpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9VcF9GaWVsZChGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgdXBwZXIgbmVpZ2hib3Igb2YgdGhlIGN1cnJlbnQgZmllbGQuIFRoaXMKK3wgICAgICAgICAgICAgICAgICAgIGN5Y2xlcyB0aHJvdWdoIHRoZSBwYWdlLiBTZWUgdGhlIGNvbW1lbnRzIG9mIHRoZQorfCAgICAgICAgICAgICAgICAgICAgVXBwZXJfTmVpZ2hib3JfRmllbGQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBob3cKK3wgICAgICAgICAgICAgICAgICAgICd1cHBlcicgaXMgZGVmaW5lZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0ZOX1VwX0ZpZWxkKEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJGTl9VcF9GaWVsZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKF9uY19TZXRfQ3VycmVudF9GaWVsZChmb3JtLAorCQkJCSAgIFVwcGVyX05laWdoYm9yX0ZpZWxkKGZvcm0tPmN1cnJlbnQpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBGTl9Eb3duX0ZpZWxkKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgR2V0IHRoZSBkb3duIG5laWdoYm9yIG9mIHRoZSBjdXJyZW50IGZpZWxkLiBUaGlzCit8ICAgICAgICAgICAgICAgICAgICBjeWNsZXMgdGhyb3VnaCB0aGUgcGFnZS4gU2VlIHRoZSBjb21tZW50cyBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIERvd25fTmVpZ2hib3JfRmllbGQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBob3cKK3wgICAgICAgICAgICAgICAgICAgICdkb3duJyBpcyBkZWZpbmVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRk5fRG93bl9GaWVsZChGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiRk5fRG93bl9GaWVsZCglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKF9uY19TZXRfQ3VycmVudF9GaWVsZChmb3JtLAorCQkJCSAgIERvd25fTmVpZ2hib3JfRmllbGQoZm9ybS0+Y3VycmVudCkpKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFTkQgb2YgRmllbGQgTmF2aWdhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIZWxwZXIgcm91dGluZXMgZm9yIFBhZ2UgTmF2aWdhdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IF9uY19TZXRfRm9ybV9QYWdlKEZPUk0gKiBmb3JtLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWdlLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNYWtlIHRoZSBnaXZlbiBwYWdlIG51bWJlciB0aGUgY3VycmVudCBwYWdlIGFuZCBtYWtlCit8ICAgICAgICAgICAgICAgICAgICB0aGUgZ2l2ZW4gZmllbGQgdGhlIGN1cnJlbnQgZmllbGQgb24gdGhlIHBhZ2UuIElmCit8ICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGZpZWxkIE5VTEwgaXMgZ2l2ZW4sIG1ha2UgdGhlIGZpcnN0IGZpZWxkIG9uCit8ICAgICAgICAgICAgICAgICAgICB0aGUgcGFnZSB0aGUgY3VycmVudCBmaWVsZC4gVGhlIHJvdXRpbmUgYWN0cyBvbmx5Cit8ICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIHBhZ2UgaXMgbm90IHRoZSBjdXJyZW50IHBhZ2UuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgICAtIGludmFsaWQgZmllbGQgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgICAtIHNvbWUgc2V2ZXJlIGJhc2ljIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX1NldF9Gb3JtX1BhZ2UoRk9STSAqZm9ybSwgaW50IHBhZ2UsIEZJRUxEICpmaWVsZCkKK3sKKyAgaW50IHJlcyA9IEVfT0s7CisKKyAgaWYgKChmb3JtLT5jdXJwYWdlICE9IHBhZ2UpKQorICAgIHsKKyAgICAgIEZJRUxEICpsYXN0X2ZpZWxkLCAqZmllbGRfb25fcGFnZTsKKworICAgICAgd2VyYXNlKEdldF9Gb3JtX1dpbmRvdyhmb3JtKSk7CisgICAgICBmb3JtLT5jdXJwYWdlID0gcGFnZTsKKyAgICAgIGxhc3RfZmllbGQgPSBmaWVsZF9vbl9wYWdlID0gZm9ybS0+ZmllbGRbZm9ybS0+cGFnZVtwYWdlXS5zbWluXTsKKyAgICAgIGRvCisJeworCSAgaWYgKGZpZWxkX29uX3BhZ2UtPm9wdHMgJiBPX1ZJU0lCTEUpCisJICAgIGlmICgocmVzID0gRGlzcGxheV9GaWVsZChmaWVsZF9vbl9wYWdlKSkgIT0gRV9PSykKKwkgICAgICByZXR1cm4gKHJlcyk7CisJICBmaWVsZF9vbl9wYWdlID0gZmllbGRfb25fcGFnZS0+c25leHQ7CisJfQorICAgICAgd2hpbGUgKGZpZWxkX29uX3BhZ2UgIT0gbGFzdF9maWVsZCk7CisKKyAgICAgIGlmIChmaWVsZCkKKwlyZXMgPSBfbmNfU2V0X0N1cnJlbnRfRmllbGQoZm9ybSwgZmllbGQpOworICAgICAgZWxzZQorCS8qIE4uQi46IHdlIGRvbid0IGVuY2Fwc3VsYXRlIHRoaXMgYnkgSW50ZXJfRmllbGRfTmF2aWdhdGlvbigpLAorCSAgIGJlY2F1c2UgdGhpcyBpcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGEgcGFnZSBuYXZpZ2F0aW9uCisJICAgY29udGV4dCB0aGF0IGNvbnRhaW5zIGZpZWxkIG5hdmlnYXRpb24KKwkgKi8KKwlyZXMgPSBGTl9GaXJzdF9GaWVsZChmb3JtKTsKKyAgICB9CisgIHJldHVybiAocmVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IE5leHRfUGFnZV9OdW1iZXIoY29uc3QgRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDYWxjdWxhdGUgdGhlIHBhZ2UgbnVtYmVyIGZvbGxvd2luZyB0aGUgY3VycmVudCBwYWdlCit8ICAgICAgICAgICAgICAgICAgICBudW1iZXIuIFRoaXMgY3ljbGVzIGlmIHRoZSBoaWdoZXN0IHBhZ2UgbnVtYmVyIGlzCit8ICAgICAgICAgICAgICAgICAgICByZWFjaGVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIG5leHQgcGFnZSBudW1iZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgaW50CitOZXh0X1BhZ2VfTnVtYmVyKGNvbnN0IEZPUk0gKmZvcm0pCit7CisgIHJldHVybiAoZm9ybS0+Y3VycGFnZSArIDEpICUgZm9ybS0+bWF4cGFnZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFByZXZpb3VzX1BhZ2VfTnVtYmVyKGNvbnN0IEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2FsY3VsYXRlIHRoZSBwYWdlIG51bWJlciBiZWZvcmUgdGhlIGN1cnJlbnQgcGFnZQorfCAgICAgICAgICAgICAgICAgICAgbnVtYmVyLiBUaGlzIGN5Y2xlcyBpZiB0aGUgZmlyc3QgcGFnZSBudW1iZXIgaXMKK3wgICAgICAgICAgICAgICAgICAgIHJlYWNoZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgcHJldmlvdXMgcGFnZSBudW1iZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgaW50CitQcmV2aW91c19QYWdlX051bWJlcihjb25zdCBGT1JNICpmb3JtKQoreworICByZXR1cm4gKGZvcm0tPmN1cnBhZ2UgIT0gMCA/IGZvcm0tPmN1cnBhZ2UgLSAxIDogZm9ybS0+bWF4cGFnZSAtIDEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUGFnZSBOYXZpZ2F0aW9uIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFBhZ2VfTmF2aWdhdGlvbigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKiBjb25zdCBmY3QpIChGT1JNICopLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBHZW5lcmljIGJlaGF2aW9yIGZvciBjaGFuZ2luZyBhIHBhZ2UuIFRoaXMgbWVhbnMKK3wgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGZpZWxkIGlzIGxlZnQgYW5kIGEgbmV3IGZpZWxkIGlzIGVudGVyZWQuCit8ICAgICAgICAgICAgICAgICAgICBTbyB0aGUgZmllbGQgbXVzdCBiZSB2YWxpZGF0ZWQgYW5kIHRoZSBmaWVsZCBpbml0L3Rlcm0KK3wgICAgICAgICAgICAgICAgICAgIGhvb2tzIG11c3QgYmUgY2FsbGVkLiBCZWNhdXNlIGFsc28gdGhlIHBhZ2UgaXMgY2hhbmdlZCwKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtcyBpbml0L3Rlcm0gaG9va3MgbXVzdCBiZSBjYWxsZWQgYWxzby4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0lOVkFMSURfRklFTEQgICAgIC0gZmllbGQgaXMgaW52YWxpZAorfCAgICAgICAgICAgICAgICAgICAgc29tZSBvdGhlciAgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1BhZ2VfTmF2aWdhdGlvbihpbnQgKCpjb25zdCBmY3QpIChGT1JNICopLCBGT1JNICpmb3JtKQoreworICBpbnQgcmVzOworCisgIGlmICghX25jX0ludGVybmFsX1ZhbGlkYXRpb24oZm9ybSkpCisgICAgcmVzID0gRV9JTlZBTElEX0ZJRUxEOworICBlbHNlCisgICAgeworICAgICAgQ2FsbF9Ib29rKGZvcm0sIGZpZWxkdGVybSk7CisgICAgICBDYWxsX0hvb2soZm9ybSwgZm9ybXRlcm0pOworICAgICAgcmVzID0gZmN0KGZvcm0pOworICAgICAgQ2FsbF9Ib29rKGZvcm0sIGZvcm1pbml0KTsKKyAgICAgIENhbGxfSG9vayhmb3JtLCBmaWVsZGluaXQpOworICAgIH0KKyAgcmV0dXJuIHJlczsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFBOX05leHRfUGFnZShGT1JNICogZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1vdmUgdG8gdGhlIG5leHQgcGFnZSBvZiB0aGUgZm9ybQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitQTl9OZXh0X1BhZ2UoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlBOX05leHRfUGFnZSglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKF9uY19TZXRfRm9ybV9QYWdlKGZvcm0sIE5leHRfUGFnZV9OdW1iZXIoZm9ybSksIChGSUVMRCAqKTApKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgaW50IFBOX1ByZXZpb3VzX1BhZ2UoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBmb3JtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgICE9IEVfT0sgICAgICAgICAgIC0gZXJyb3IgZnJvbSBzdWJvcmRpbmF0ZSBjYWxsCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorUE5fUHJldmlvdXNfUGFnZShGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiUE5fUHJldmlvdXNfUGFnZSglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKF9uY19TZXRfRm9ybV9QYWdlKGZvcm0sIFByZXZpb3VzX1BhZ2VfTnVtYmVyKGZvcm0pLCAoRklFTEQgKikwKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBQTl9GaXJzdF9QYWdlKEZPUk0gKiBmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgTW92ZSB0byB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgZm9ybQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICAhPSBFX09LICAgICAgICAgICAtIGVycm9yIGZyb20gc3Vib3JkaW5hdGUgY2FsbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK1BOX0ZpcnN0X1BhZ2UoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlBOX0ZpcnN0X1BhZ2UoJXApIiksIGZvcm0pKTsKKyAgcmV0dXJuQ29kZShfbmNfU2V0X0Zvcm1fUGFnZShmb3JtLCAwLCAoRklFTEQgKikwKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBQTl9MYXN0X1BhZ2UoRk9STSAqIGZvcm0pCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBNb3ZlIHRvIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIGZvcm0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgIT0gRV9PSyAgICAgICAgICAgLSBlcnJvciBmcm9tIHN1Ym9yZGluYXRlIGNhbGwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitQTl9MYXN0X1BhZ2UoRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoIlBOX0xhc3RfUGFnZSglcCkiKSwgZm9ybSkpOworICByZXR1cm5Db2RlKF9uY19TZXRfRm9ybV9QYWdlKGZvcm0sIGZvcm0tPm1heHBhZ2UgLSAxLCAoRklFTEQgKikwKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFTkQgb2YgRmllbGQgTmF2aWdhdGlvbiByb3V0aW5lcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIZWxwZXIgcm91dGluZXMgZm9yIHRoZSBjb3JlIGZvcm0gZHJpdmVyLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGludCBEYXRhX0VudHJ5KEZPUk0gKiBmb3JtLGludCBjKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgRW50ZXIgY2hhcmFjdGVyIGMgaW50byBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgZmllbGQgb2YgdGhlIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUkVRVUVTVF9ERU5JRUQgIC0gZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0Cit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorRGF0YV9FbnRyeShGT1JNICpmb3JtLCBpbnQgYykKK3sKKyAgRklFTEQgKmZpZWxkID0gZm9ybS0+Y3VycmVudDsKKyAgaW50IHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisKKyAgVCgoVF9DQUxMRUQoIkRhdGFfRW50cnkoJXAsJXMpIiksIGZvcm0sIF90cmFjZWNodHlwZSgoY2h0eXBlKWMpKSk7CisgIGlmICgoZmllbGQtPm9wdHMgJiBPX0VESVQpCisjaWYgRklYX0ZPUk1fSU5BQ1RJVkVfQlVHCisgICAgICAmJiAoZmllbGQtPm9wdHMgJiBPX0FDVElWRSkKKyNlbmRpZgorICAgICkKKyAgICB7CisgICAgICBpZiAoKGZpZWxkLT5vcHRzICYgT19CTEFOSykgJiYKKwkgIEZpcnN0X1Bvc2l0aW9uX0luX0N1cnJlbnRfRmllbGQoZm9ybSkgJiYKKwkgICEoZm9ybS0+c3RhdHVzICYgX0ZDSEVDS19SRVFVSVJFRCkgJiYKKwkgICEoZm9ybS0+c3RhdHVzICYgX1dJTkRPV19NT0RJRklFRCkpCisJd2VyYXNlKGZvcm0tPncpOworCisgICAgICBpZiAoZm9ybS0+c3RhdHVzICYgX09WTE1PREUpCisJeworCSAgd2FkZGNoKGZvcm0tPncsIChjaHR5cGUpYyk7CisJfQorICAgICAgZWxzZQorCS8qIG5vIF9PVkxNT0RFICovCisJeworCSAgYm9vbCBUaGVyZV9Jc19Sb29tID0gSXNfVGhlcmVfUm9vbV9Gb3JfQV9DaGFyX0luX0xpbmUoZm9ybSk7CisKKwkgIGlmICghKFRoZXJlX0lzX1Jvb20gfHwKKwkJKChTaW5nbGVfTGluZV9GaWVsZChmaWVsZCkgJiYgR3Jvd2FibGUoZmllbGQpKSkpKQorCSAgICBSRVRVUk4oRV9SRVFVRVNUX0RFTklFRCk7CisKKwkgIGlmICghVGhlcmVfSXNfUm9vbSAmJiAhRmllbGRfR3Jvd24oZmllbGQsIDEpKQorCSAgICBSRVRVUk4oRV9TWVNURU1fRVJST1IpOworCisJICB3aW5zY2goZm9ybS0+dywgKGNodHlwZSljKTsKKwl9CisKKyAgICAgIGlmICgocmVzdWx0ID0gV3JhcHBpbmdfTm90X05lY2Vzc2FyeV9Pcl9XcmFwcGluZ19Payhmb3JtKSkgPT0gRV9PSykKKwl7CisJICBib29sIEVuZF9PZl9GaWVsZCA9ICgoKGZpZWxkLT5kcm93cyAtIDEpID09IGZvcm0tPmN1cnJvdykgJiYKKwkJCSAgICAgICAoKGZpZWxkLT5kY29scyAtIDEpID09IGZvcm0tPmN1cmNvbCkpOworCisJICBmb3JtLT5zdGF0dXMgfD0gX1dJTkRPV19NT0RJRklFRDsKKwkgIGlmIChFbmRfT2ZfRmllbGQgJiYgIUdyb3dhYmxlKGZpZWxkKSAmJiAoZmllbGQtPm9wdHMgJiBPX0FVVE9TS0lQKSkKKwkgICAgcmVzdWx0ID0gSW50ZXJfRmllbGRfTmF2aWdhdGlvbihGTl9OZXh0X0ZpZWxkLCBmb3JtKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChFbmRfT2ZfRmllbGQgJiYgR3Jvd2FibGUoZmllbGQpICYmICFGaWVsZF9Hcm93bihmaWVsZCwgMSkpCisJCXJlc3VsdCA9IEVfU1lTVEVNX0VSUk9SOworCSAgICAgIGVsc2UKKwkJeworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJCSAgLyoKKwkJICAgKiBXZSBoYXZlIGp1c3QgYWRkZWQgYSBieXRlIHRvIHRoZSBmb3JtIGZpZWxkLiAgSXQgbWF5IGhhdmUKKwkJICAgKiBiZWVuIHBhcnQgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgSWYgaXQgd2FzLCB0aGUKKwkJICAgKiBhZGRjaF91c2VkIGZpZWxkIGlzIG5vbnplcm8gYW5kIHdlIHNob3VsZCBub3QgdHJ5IHRvIG1vdmUKKwkJICAgKiB0byBhIG5ldyBjb2x1bW4uCisJCSAgICovCisJCSAgaWYgKFdJTkRPV19FWFQoZm9ybS0+dywgYWRkY2hfdXNlZCkgPT0gMCkKKwkJICAgIElGTl9OZXh0X0NoYXJhY3Rlcihmb3JtKTsKKyNlbHNlCisJCSAgSUZOX05leHRfQ2hhcmFjdGVyKGZvcm0pOworI2VuZGlmCisJCSAgcmVzdWx0ID0gRV9PSzsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgUkVUVVJOKHJlc3VsdCk7Cit9CisKKy8qIFN0cnVjdHVyZSB0byBkZXNjcmliZSB0aGUgYmluZGluZyBvZiBhIHJlcXVlc3QgY29kZSB0byBhIGZ1bmN0aW9uLgorICAgVGhlIG1lbWJlciBrZXljb2RlIGNvZGVzIHRoZSByZXF1ZXN0IHZhbHVlIGFzIHdlbGwgYXMgdGhlIGdlbmVyaWMKKyAgIHJvdXRpbmUgdG8gdXNlIGZvciB0aGUgcmVxdWVzdC4gVGhlIGNvZGUgZm9yIHRoZSBnZW5lcmljIHJvdXRpbmUKKyAgIGlzIGNvZGVkIGluIHRoZSB1cHBlciAxNiBCaXRzIHdoaWxlIHRoZSByZXF1ZXN0IGNvZGUgaXMgY29kZWQgaW4KKyAgIHRoZSBsb3dlciAxNiBiaXRzLgorCisgICBJbiB0ZXJtcyBvZiBDKysgeW91IG1pZ2h0IHRoaW5rIG9mIGEgcmVxdWVzdCBhcyBhIGNsYXNzIHdpdGggYQorICAgdmlydHVhbCBtZXRob2QgInBlcmZvcm0iLiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIHJlcXVlc3QgYXJlCisgICBkZXJpdmVkIGZyb20gdGhpcyBiYXNlIGNsYXNzIGFuZCBvdmVybG9hZCAob3Igbm90KSB0aGUgYmFzZSBjbGFzcworICAgaW1wbGVtZW50YXRpb24gb2YgcGVyZm9ybS4KKyovCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQga2V5Y29kZTsJCQkvKiBtdXN0IGJlIGF0IGxlYXN0IDMyIGJpdDogaGk6bW9kZSwgbG86IGtleSAqLworICBpbnQgKCpjbWQpIChGT1JNICopOwkJLyogbG93IGxldmVsIGRyaXZlciByb3V0aW5lIGZvciB0aGlzIGtleSAgICAgKi8KK30KK0JpbmRpbmdfSW5mbzsKKworLyogWW91IG1heSBzZWUgdGhpcyBpcyB0aGUgY2xhc3MtaWQgb2YgdGhlIHJlcXVlc3QgdHlwZSBjbGFzcyAqLworI2RlZmluZSBJRF9QTiAgICAoMHgwMDAwMDAwMCkJLyogUGFnZSBuYXZpZ2F0aW9uICAgICAgICAgICAqLworI2RlZmluZSBJRF9GTiAgICAoMHgwMDAxMDAwMCkJLyogSW50ZXItRmllbGQgbmF2aWdhdGlvbiAgICAqLworI2RlZmluZSBJRF9JRk4gICAoMHgwMDAyMDAwMCkJLyogSW50cmEtRmllbGQgbmF2aWdhdGlvbiAgICAqLworI2RlZmluZSBJRF9WU0MgICAoMHgwMDAzMDAwMCkJLyogVmVydGljYWwgU2Nyb2xsaW5nICAgICAgICAqLworI2RlZmluZSBJRF9IU0MgICAoMHgwMDA0MDAwMCkJLyogSG9yaXpvbnRhbCBTY3JvbGxpbmcgICAgICAqLworI2RlZmluZSBJRF9GRSAgICAoMHgwMDA1MDAwMCkJLyogRmllbGQgRWRpdGluZyAgICAgICAgICAgICAqLworI2RlZmluZSBJRF9FTSAgICAoMHgwMDA2MDAwMCkJLyogRWRpdCBNb2RlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJRF9GViAgICAoMHgwMDA3MDAwMCkJLyogRmllbGQgVmFsaWRhdGlvbiAgICAgICAgICAqLworI2RlZmluZSBJRF9DSCAgICAoMHgwMDA4MDAwMCkJLyogQ2hvaWNlICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJRF9NYXNrICAoMHhmZmZmMDAwMCkKKyNkZWZpbmUgS2V5X01hc2sgKDB4MDAwMGZmZmYpCisjZGVmaW5lIElEX1NoZnQgICgxNikKKworLyogVGhpcyBhcnJheSBob2xkcyBhbGwgdGhlIEJpbmRpbmcgSW5mb3MgKi8KKy8qICpJTkRFTlQtT0ZGKiAqLworc3RhdGljIGNvbnN0IEJpbmRpbmdfSW5mbyBiaW5kaW5nc1tNQVhfRk9STV9DT01NQU5EIC0gTUlOX0ZPUk1fQ09NTUFORCArIDFdID0KK3sKKyAgeyBSRVFfTkVYVF9QQUdFICAgIHxJRF9QTiAgLFBOX05leHRfUGFnZX0sCisgIHsgUkVRX1BSRVZfUEFHRSAgICB8SURfUE4gICxQTl9QcmV2aW91c19QYWdlfSwKKyAgeyBSRVFfRklSU1RfUEFHRSAgIHxJRF9QTiAgLFBOX0ZpcnN0X1BhZ2V9LAorICB7IFJFUV9MQVNUX1BBR0UgICAgfElEX1BOICAsUE5fTGFzdF9QYWdlfSwKKworICB7IFJFUV9ORVhUX0ZJRUxEICAgfElEX0ZOICAsRk5fTmV4dF9GaWVsZH0sCisgIHsgUkVRX1BSRVZfRklFTEQgICB8SURfRk4gICxGTl9QcmV2aW91c19GaWVsZH0sCisgIHsgUkVRX0ZJUlNUX0ZJRUxEICB8SURfRk4gICxGTl9GaXJzdF9GaWVsZH0sCisgIHsgUkVRX0xBU1RfRklFTEQgICB8SURfRk4gICxGTl9MYXN0X0ZpZWxkfSwKKyAgeyBSRVFfU05FWFRfRklFTEQgIHxJRF9GTiAgLEZOX1NvcnRlZF9OZXh0X0ZpZWxkfSwKKyAgeyBSRVFfU1BSRVZfRklFTEQgIHxJRF9GTiAgLEZOX1NvcnRlZF9QcmV2aW91c19GaWVsZH0sCisgIHsgUkVRX1NGSVJTVF9GSUVMRCB8SURfRk4gICxGTl9Tb3J0ZWRfRmlyc3RfRmllbGR9LAorICB7IFJFUV9TTEFTVF9GSUVMRCAgfElEX0ZOICAsRk5fU29ydGVkX0xhc3RfRmllbGR9LAorICB7IFJFUV9MRUZUX0ZJRUxEICAgfElEX0ZOICAsRk5fTGVmdF9GaWVsZH0sCisgIHsgUkVRX1JJR0hUX0ZJRUxEICB8SURfRk4gICxGTl9SaWdodF9GaWVsZH0sCisgIHsgUkVRX1VQX0ZJRUxEICAgICB8SURfRk4gICxGTl9VcF9GaWVsZH0sCisgIHsgUkVRX0RPV05fRklFTEQgICB8SURfRk4gICxGTl9Eb3duX0ZpZWxkfSwKKworICB7IFJFUV9ORVhUX0NIQVIgICAgfElEX0lGTiAsSUZOX05leHRfQ2hhcmFjdGVyfSwKKyAgeyBSRVFfUFJFVl9DSEFSICAgIHxJRF9JRk4gLElGTl9QcmV2aW91c19DaGFyYWN0ZXJ9LAorICB7IFJFUV9ORVhUX0xJTkUgICAgfElEX0lGTiAsSUZOX05leHRfTGluZX0sCisgIHsgUkVRX1BSRVZfTElORSAgICB8SURfSUZOICxJRk5fUHJldmlvdXNfTGluZX0sCisgIHsgUkVRX05FWFRfV09SRCAgICB8SURfSUZOICxJRk5fTmV4dF9Xb3JkfSwKKyAgeyBSRVFfUFJFVl9XT1JEICAgIHxJRF9JRk4gLElGTl9QcmV2aW91c19Xb3JkfSwKKyAgeyBSRVFfQkVHX0ZJRUxEICAgIHxJRF9JRk4gLElGTl9CZWdpbm5pbmdfT2ZfRmllbGR9LAorICB7IFJFUV9FTkRfRklFTEQgICAgfElEX0lGTiAsSUZOX0VuZF9PZl9GaWVsZH0sCisgIHsgUkVRX0JFR19MSU5FICAgICB8SURfSUZOICxJRk5fQmVnaW5uaW5nX09mX0xpbmV9LAorICB7IFJFUV9FTkRfTElORSAgICAgfElEX0lGTiAsSUZOX0VuZF9PZl9MaW5lfSwKKyAgeyBSRVFfTEVGVF9DSEFSICAgIHxJRF9JRk4gLElGTl9MZWZ0X0NoYXJhY3Rlcn0sCisgIHsgUkVRX1JJR0hUX0NIQVIgICB8SURfSUZOICxJRk5fUmlnaHRfQ2hhcmFjdGVyfSwKKyAgeyBSRVFfVVBfQ0hBUiAgICAgIHxJRF9JRk4gLElGTl9VcF9DaGFyYWN0ZXJ9LAorICB7IFJFUV9ET1dOX0NIQVIgICAgfElEX0lGTiAsSUZOX0Rvd25fQ2hhcmFjdGVyfSwKKworICB7IFJFUV9ORVdfTElORSAgICAgfElEX0ZFICAsRkVfTmV3X0xpbmV9LAorICB7IFJFUV9JTlNfQ0hBUiAgICAgfElEX0ZFICAsRkVfSW5zZXJ0X0NoYXJhY3Rlcn0sCisgIHsgUkVRX0lOU19MSU5FICAgICB8SURfRkUgICxGRV9JbnNlcnRfTGluZX0sCisgIHsgUkVRX0RFTF9DSEFSICAgICB8SURfRkUgICxGRV9EZWxldGVfQ2hhcmFjdGVyfSwKKyAgeyBSRVFfREVMX1BSRVYgICAgIHxJRF9GRSAgLEZFX0RlbGV0ZV9QcmV2aW91c30sCisgIHsgUkVRX0RFTF9MSU5FICAgICB8SURfRkUgICxGRV9EZWxldGVfTGluZX0sCisgIHsgUkVRX0RFTF9XT1JEICAgICB8SURfRkUgICxGRV9EZWxldGVfV29yZH0sCisgIHsgUkVRX0NMUl9FT0wgICAgICB8SURfRkUgICxGRV9DbGVhcl9Ub19FbmRfT2ZfTGluZX0sCisgIHsgUkVRX0NMUl9FT0YgICAgICB8SURfRkUgICxGRV9DbGVhcl9Ub19FbmRfT2ZfRmllbGR9LAorICB7IFJFUV9DTFJfRklFTEQgICAgfElEX0ZFICAsRkVfQ2xlYXJfRmllbGR9LAorCisgIHsgUkVRX09WTF9NT0RFICAgICB8SURfRU0gICxFTV9PdmVybGF5X01vZGV9LAorICB7IFJFUV9JTlNfTU9ERSAgICAgfElEX0VNICAsRU1fSW5zZXJ0X01vZGV9LAorCisgIHsgUkVRX1NDUl9GTElORSAgICB8SURfVlNDICxWU0NfU2Nyb2xsX0xpbmVfRm9yd2FyZH0sCisgIHsgUkVRX1NDUl9CTElORSAgICB8SURfVlNDICxWU0NfU2Nyb2xsX0xpbmVfQmFja3dhcmR9LAorICB7IFJFUV9TQ1JfRlBBR0UgICAgfElEX1ZTQyAsVlNDX1Njcm9sbF9QYWdlX0ZvcndhcmR9LAorICB7IFJFUV9TQ1JfQlBBR0UgICAgfElEX1ZTQyAsVlNDX1Njcm9sbF9QYWdlX0JhY2t3YXJkfSwKKyAgeyBSRVFfU0NSX0ZIUEFHRSAgIHxJRF9WU0MgLFZTQ19TY3JvbGxfSGFsZl9QYWdlX0ZvcndhcmR9LAorICB7IFJFUV9TQ1JfQkhQQUdFICAgfElEX1ZTQyAsVlNDX1Njcm9sbF9IYWxmX1BhZ2VfQmFja3dhcmR9LAorCisgIHsgUkVRX1NDUl9GQ0hBUiAgICB8SURfSFNDICxIU0NfU2Nyb2xsX0NoYXJfRm9yd2FyZH0sCisgIHsgUkVRX1NDUl9CQ0hBUiAgICB8SURfSFNDICxIU0NfU2Nyb2xsX0NoYXJfQmFja3dhcmR9LAorICB7IFJFUV9TQ1JfSEZMSU5FICAgfElEX0hTQyAsSFNDX0hvcml6b250YWxfTGluZV9Gb3J3YXJkfSwKKyAgeyBSRVFfU0NSX0hCTElORSAgIHxJRF9IU0MgLEhTQ19Ib3Jpem9udGFsX0xpbmVfQmFja3dhcmR9LAorICB7IFJFUV9TQ1JfSEZIQUxGICAgfElEX0hTQyAsSFNDX0hvcml6b250YWxfSGFsZl9MaW5lX0ZvcndhcmR9LAorICB7IFJFUV9TQ1JfSEJIQUxGICAgfElEX0hTQyAsSFNDX0hvcml6b250YWxfSGFsZl9MaW5lX0JhY2t3YXJkfSwKKworICB7IFJFUV9WQUxJREFUSU9OICAgfElEX0ZWICAsRlZfVmFsaWRhdGlvbn0sCisKKyAgeyBSRVFfTkVYVF9DSE9JQ0UgIHxJRF9DSCAgLENSX05leHRfQ2hvaWNlfSwKKyAgeyBSRVFfUFJFVl9DSE9JQ0UgIHxJRF9DSCAgLENSX1ByZXZpb3VzX0Nob2ljZX0KK307CisvKiAqSU5ERU5ULU9OKiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBmb3JtX2RyaXZlcihGT1JNICogZm9ybSxpbnQgIGMpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBUaGlzIGlzIHRoZSB3b3JraG9yc2Ugb2YgdGhlIGZvcm1zIHN5c3RlbS4gSXQgY2hlY2tzCit8ICAgICAgICAgICAgICAgICAgICB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2hhcmFjdGVyIGMgaXMgYSByZXF1ZXN0IG9yCit8ICAgICAgICAgICAgICAgICAgICBkYXRhLiBJZiBpdCBpcyBhIHJlcXVlc3QsIHRoZSBmb3JtIGRyaXZlciBleGVjdXRlcworfCAgICAgICAgICAgICAgICAgICAgdGhlIHJlcXVlc3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4gSWYgaXQgaXMgZGF0YQorfCAgICAgICAgICAgICAgICAgICAgKHByaW50YWJsZSBjaGFyYWN0ZXIpLCBpdCBlbnRlcnMgdGhlIGRhdGEgaW50byB0aGUKK3wgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgZmllbGQuIElmIGl0IGlzIG5vdAorfCAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplZCwgdGhlIGZvcm0gZHJpdmVyIGFzc3VtZXMgaXQgaXMgYW4gYXBwbGljYXRpb24KK3wgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY29tbWFuZCBhbmQgcmV0dXJucyBFX1VOS05PV05fQ09NTUFORC4KK3wgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uIGRlZmluZWQgY29tbWFuZCBzaG91bGQgYmUgZGVmaW5lZCByZWxhdGl2ZQorfCAgICAgICAgICAgICAgICAgICAgdG8gTUFYX0ZPUk1fQ09NTUFORCwgdGhlIG1heGltdW0gdmFsdWUgb2YgYSByZXF1ZXN0LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAtIHN5c3RlbSBlcnJvcgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBhbiBhcmd1bWVudCBpcyBpbmNvcnJlY3QKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX1BPU1RFRCAgICAgIC0gZm9ybSBpcyBub3QgcG9zdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX0lOVkFMSURfRklFTEQgICAtIGZpZWxkIGNvbnRlbnRzIGFyZSBpbnZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9TVEFURSAgICAgICAtIGNhbGxlZCBmcm9tIGluc2lkZSBhIGhvb2sgcm91dGluZQorfCAgICAgICAgICAgICAgICAgICAgRV9SRVFVRVNUX0RFTklFRCAgLSByZXF1ZXN0IGZhaWxlZAorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAgLSBubyBmaWVsZHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgZm9ybQorfCAgICAgICAgICAgICAgICAgICAgRV9VTktOT1dOX0NPTU1BTkQgLSBjb21tYW5kIG5vdCBrbm93bgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2Zvcm1fZHJpdmVyKEZPUk0gKmZvcm0sIGludCBjKQoreworICBjb25zdCBCaW5kaW5nX0luZm8gKkJJID0gKEJpbmRpbmdfSW5mbyAqKSAwOworICBpbnQgcmVzID0gRV9VTktOT1dOX0NPTU1BTkQ7CisKKyAgVCgoVF9DQUxMRUQoImZvcm1fZHJpdmVyKCVwLCVkKSIpLCBmb3JtLCBjKSk7CisKKyAgaWYgKCFmb3JtKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKCEoZm9ybS0+ZmllbGQpKQorICAgIFJFVFVSTihFX05PVF9DT05ORUNURUQpOworCisgIGFzc2VydChmb3JtLT5wYWdlKTsKKworICBpZiAoYyA9PSBGSVJTVF9BQ1RJVkVfTUFHSUMpCisgICAgeworICAgICAgZm9ybS0+Y3VycmVudCA9IF9uY19GaXJzdF9BY3RpdmVfRmllbGQoZm9ybSk7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorCisgIGFzc2VydChmb3JtLT5jdXJyZW50ICYmCisJIGZvcm0tPmN1cnJlbnQtPmJ1ZiAmJgorCSAoZm9ybS0+Y3VycmVudC0+Zm9ybSA9PSBmb3JtKQorICAgICk7CisKKyAgaWYgKGZvcm0tPnN0YXR1cyAmIF9JTl9EUklWRVIpCisgICAgUkVUVVJOKEVfQkFEX1NUQVRFKTsKKworICBpZiAoIShmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSkKKyAgICBSRVRVUk4oRV9OT1RfUE9TVEVEKTsKKworICBpZiAoKGMgPj0gTUlOX0ZPUk1fQ09NTUFORCAmJiBjIDw9IE1BWF9GT1JNX0NPTU1BTkQpICYmCisgICAgICAoKGJpbmRpbmdzW2MgLSBNSU5fRk9STV9DT01NQU5EXS5rZXljb2RlICYgS2V5X01hc2spID09IGMpKQorICAgIEJJID0gJihiaW5kaW5nc1tjIC0gTUlOX0ZPUk1fQ09NTUFORF0pOworCisgIGlmIChCSSkKKyAgICB7CisgICAgICB0eXBlZGVmIGludCAoKkdlbmVyaWNfTWV0aG9kKSAoaW50ICgqY29uc3QpIChGT1JNICopLCBGT1JNICopOworICAgICAgc3RhdGljIGNvbnN0IEdlbmVyaWNfTWV0aG9kIEdlbmVyaWNfTWV0aG9kc1tdID0KKyAgICAgIHsKKwlQYWdlX05hdmlnYXRpb24sCS8qIG92ZXJsb2FkZWQgdG8gY2FsbCBmaWVsZCZmb3JtIGhvb2tzICovCisJSW50ZXJfRmllbGRfTmF2aWdhdGlvbiwJLyogb3ZlcmxvYWRlZCB0byBjYWxsIGZpZWxkIGhvb2tzICAgICAgKi8KKwlOVUxMLAkJCS8qIEludHJhLUZpZWxkIGlzIGdlbmVyaWMgICAgICAgICAgICAgICovCisJVmVydGljYWxfU2Nyb2xsaW5nLAkvKiBPdmVybG9hZGVkIHRvIGNoZWNrIG11bHRpLWxpbmUgICAgICAqLworCUhvcml6b250YWxfU2Nyb2xsaW5nLAkvKiBPdmVybG9hZGVkIHRvIGNoZWNrIHNpbmdsZS1saW5lICAgICAqLworCUZpZWxkX0VkaXRpbmcsCQkvKiBPdmVybG9hZGVkIHRvIG1hcmsgbW9kaWZpY2F0aW9uICAgICAqLworCU5VTEwsCQkJLyogRWRpdCBNb2RlIGlzIGdlbmVyaWMgICAgICAgICAgICAgICAgKi8KKwlOVUxMLAkJCS8qIEZpZWxkIFZhbGlkYXRpb24gaXMgZ2VuZXJpYyAgICAgICAgICovCisJTlVMTAkJCS8qIENob2ljZSBSZXF1ZXN0IGlzIGdlbmVyaWMgICAgICAgICAgICovCisgICAgICB9OworICAgICAgc2l6ZV90IG5NZXRob2RzID0gKHNpemVvZihHZW5lcmljX01ldGhvZHMpIC8gc2l6ZW9mKEdlbmVyaWNfTWV0aG9kc1swXSkpOworICAgICAgc2l6ZV90IG1ldGhvZCA9IChCSS0+a2V5Y29kZSA+PiBJRF9TaGZ0KSAmIDB4ZmZmZjsJLyogc2VlIElEX01hc2sgKi8KKworICAgICAgaWYgKChtZXRob2QgPj0gbk1ldGhvZHMpIHx8ICEoQkktPmNtZCkpCisJcmVzID0gRV9TWVNURU1fRVJST1I7CisgICAgICBlbHNlCisJeworCSAgR2VuZXJpY19NZXRob2QgZmN0ID0gR2VuZXJpY19NZXRob2RzW21ldGhvZF07CisKKwkgIGlmIChmY3QpCisJICAgIHJlcyA9IGZjdChCSS0+Y21kLCBmb3JtKTsKKwkgIGVsc2UKKwkgICAgcmVzID0gKEJJLT5jbWQpIChmb3JtKTsKKwl9CisgICAgfQorI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICBlbHNlIGlmIChLRVlfTU9VU0UgPT0gYykKKyAgICB7CisgICAgICBNRVZFTlQgZXZlbnQ7CisgICAgICBXSU5ET1cgKndpbiA9IGZvcm0tPndpbiA/IGZvcm0tPndpbiA6IHN0ZHNjcjsKKyAgICAgIFdJTkRPVyAqc3ViID0gZm9ybS0+c3ViID8gZm9ybS0+c3ViIDogd2luOworCisgICAgICBnZXRtb3VzZSgmZXZlbnQpOworICAgICAgaWYgKChldmVudC5ic3RhdGUgJiAoQlVUVE9OMV9DTElDS0VEIHwKKwkJCSAgIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQgfAorCQkJICAgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCkpCisJICAmJiB3ZW5jbG9zZSh3aW4sIGV2ZW50LnksIGV2ZW50LngpKQorCXsJCQkvKiB3ZSByZWFjdCBvbmx5IGlmIHRoZSBjbGljayB3YXMgaW4gdGhlIHVzZXJ3aW4sIHRoYXQgbWVhbnMKKwkJCQkgKiBpbnNpZGUgdGhlIGZvcm0gZGlzcGxheSBhcmVhIG9yIGF0IHRoZSBkZWNvcmF0aW9uIHdpbmRvdy4KKwkJCQkgKi8KKwkgIGludCByeSA9IGV2ZW50LnksIHJ4ID0gZXZlbnQueDsJLyogc2NyZWVuIGNvb3JkaW5hdGVzICovCisKKwkgIHJlcyA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJICBpZiAobW91c2VfdHJhZm8oJnJ5LCAmcngsIEZBTFNFKSkKKwkgICAgewkJCS8qIHJ4LCByeSBhcmUgbm93ICJjdXJzZXMiIGNvb3JkaW5hdGVzICovCisJICAgICAgaWYgKHJ5IDwgc3ViLT5fYmVneSkKKwkJewkJLyogd2UgY2xpY2tlZCBhYm92ZSB0aGUgZGlzcGxheSByZWdpb247IHRoaXMgaXMKKwkJCQkgKiBpbnRlcnByZXRlZCBhcyAic2Nyb2xsIHVwIiByZXF1ZXN0CisJCQkJICovCisJCSAgaWYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfQ0xJQ0tFRCkKKwkJICAgIHJlcyA9IGZvcm1fZHJpdmVyKGZvcm0sIFJFUV9QUkVWX0ZJRUxEKTsKKwkJICBlbHNlIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX0RPVUJMRV9DTElDS0VEKQorCQkgICAgcmVzID0gZm9ybV9kcml2ZXIoZm9ybSwgUkVRX1BSRVZfUEFHRSk7CisJCSAgZWxzZSBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCkKKwkJICAgIHJlcyA9IGZvcm1fZHJpdmVyKGZvcm0sIFJFUV9GSVJTVF9GSUVMRCk7CisJCX0KKwkgICAgICBlbHNlIGlmIChyeSA+IHN1Yi0+X2JlZ3kgKyBzdWItPl9tYXh5KQorCQl7CQkvKiB3ZSBjbGlja2VkIGJlbG93IHRoZSBkaXNwbGF5IHJlZ2lvbjsgdGhpcyBpcworCQkJCSAqIGludGVycHJldGVkIGFzICJzY3JvbGwgZG93biIgcmVxdWVzdAorCQkJCSAqLworCQkgIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX0NMSUNLRUQpCisJCSAgICByZXMgPSBmb3JtX2RyaXZlcihmb3JtLCBSRVFfTkVYVF9GSUVMRCk7CisJCSAgZWxzZSBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCkKKwkJICAgIHJlcyA9IGZvcm1fZHJpdmVyKGZvcm0sIFJFUV9ORVhUX1BBR0UpOworCQkgIGVsc2UgaWYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpCisJCSAgICByZXMgPSBmb3JtX2RyaXZlcihmb3JtLCBSRVFfTEFTVF9GSUVMRCk7CisJCX0KKwkgICAgICBlbHNlIGlmICh3ZW5jbG9zZShzdWIsIGV2ZW50LnksIGV2ZW50LngpKQorCQl7CQkvKiBJbnNpZGUgdGhlIGFyZWEgd2UgdHJ5IHRvIGZpbmQgdGhlIGhpdCBpdGVtICovCisJCSAgaW50IGk7CisKKwkJICByeSA9IGV2ZW50Lnk7CisJCSAgcnggPSBldmVudC54OworCQkgIGlmICh3bW91c2VfdHJhZm8oc3ViLCAmcnksICZyeCwgRkFMU0UpKQorCQkgICAgeworCQkgICAgICBpbnQgbWluX2ZpZWxkID0gZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWluOworCQkgICAgICBpbnQgbWF4X2ZpZWxkID0gZm9ybS0+cGFnZVtmb3JtLT5jdXJwYWdlXS5wbWF4OworCisJCSAgICAgIGZvciAoaSA9IG1pbl9maWVsZDsgaSA8PSBtYXhfZmllbGQ7ICsraSkKKwkJCXsKKwkJCSAgRklFTEQgKmZpZWxkID0gZm9ybS0+ZmllbGRbaV07CisKKwkJCSAgaWYgKEZpZWxkX0lzX1NlbGVjdGFibGUoZmllbGQpCisJCQkgICAgICAmJiBGaWVsZF9lbmNsb3NlcyhmaWVsZCwgcnksIHJ4KSA9PSBFX09LKQorCQkJICAgIHsKKwkJCSAgICAgIHJlcyA9IF9uY19TZXRfQ3VycmVudF9GaWVsZChmb3JtLCBmaWVsZCk7CisJCQkgICAgICBpZiAocmVzID09IEVfT0spCisJCQkJcmVzID0gX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yKGZvcm0pOworCQkJICAgICAgaWYgKHJlcyA9PSBFX09LCisJCQkJICAmJiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCkpCisJCQkJcmVzID0gRV9VTktOT1dOX0NPTU1BTkQ7CisJCQkgICAgICBicmVhazsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwlyZXMgPSBFX1JFUVVFU1RfREVOSUVEOworICAgIH0KKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKyAgZWxzZSBpZiAoIShjICYgKH4oaW50KU1BWF9SRUdVTEFSX0NIQVJBQ1RFUikpKQorICAgIHsKKyAgICAgIC8qCisgICAgICAgKiBJZiB3ZSdyZSB1c2luZyA4LWJpdCBjaGFyYWN0ZXJzLCBpc2NudHJsK2lzcHJpbnQgY292ZXIgdGhlIHdob2xlIHNldC4KKyAgICAgICAqIEJ1dCB3aXRoIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCB0aGVyZSBpcyBhIHRoaXJkIHBvc3NpYmlsaXR5LCBpLmUuLAorICAgICAgICogcGFydHMgb2YgY2hhcmFjdGVycyB0aGF0IGJ1aWxkIHVwIGludG8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgd2hpY2ggYXJlCisgICAgICAgKiBub3QgY29uc2lkZXJlZCBwcmludGFibGUuCisgICAgICAgKgorICAgICAgICogRklYTUU6IHRoZSB3aWRlLWNoYXJhY3RlciBicmFuY2ggc2hvdWxkIGFsc28gdXNlIENoZWNrX0NoYXIoKS4KKyAgICAgICAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgICBpZiAoIWlzY250cmwoVUNoYXIoYykpKQorI2Vsc2UKKyAgICAgIGlmIChpc3ByaW50KFVDaGFyKGMpKSAmJgorCSAgQ2hlY2tfQ2hhcihmb3JtLT5jdXJyZW50LT50eXBlLCBjLAorCQkgICAgIChUeXBlQXJndW1lbnQgKikoZm9ybS0+Y3VycmVudC0+YXJnKSkpCisjZW5kaWYKKwlyZXMgPSBEYXRhX0VudHJ5KGZvcm0sIGMpOworICAgIH0KKyAgX25jX1JlZnJlc2hfQ3VycmVudF9GaWVsZChmb3JtKTsKKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBGaWVsZC1CdWZmZXIgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgorICBUaGUgZWZmZWN0cyBvZiBzZXR0aW5nIGEgYnVmZmVyIGFyZSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGNvcmUgb2YgdGhlIGZvcm0KKyAgZHJpdmVyIGxvZ2ljLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpbiB0aGUgY2FzZSBvZiBncm93YWJsZSBmaWVsZHMuCisgIFNvIEkgZG9uJ3Qgc2VwYXJhdGUgdGhpcyBpbnRvIGEgc2VwYXJhdGUgbW9kdWxlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9maWVsZF9idWZmZXIoRklFTEQgKmZpZWxkLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlciwgY2hhciAqdmFsdWUpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIGdpdmVuIGJ1ZmZlciBvZiB0aGUgZmllbGQgdG8gdGhlIGdpdmVuIHZhbHVlLgorfCAgICAgICAgICAgICAgICAgICAgQnVmZmVyIDAgc3RvcmVzIHRoZSBkaXNwbGF5ZWQgY29udGVudCBvZiB0aGUgZmllbGQuCit8ICAgICAgICAgICAgICAgICAgICBGb3IgZHluYW1pYyBmaWVsZHMgdGhpcyBtYXkgZ3JvdyB0aGUgZmllbGRidWZmZXJzIGlmCit8ICAgICAgICAgICAgICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBleGNlZWRzIHRoZSBjdXJyZW50IGJ1ZmZlcgorfCAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLiBGb3IgYnVmZmVyIDAgb25seSBwcmludGFibGUgdmFsdWVzIGFyZSBhbGxvd2VkLgorfCAgICAgICAgICAgICAgICAgICAgRm9yIHN0YXRpYyBmaWVsZHMsIHRoZSB2YWx1ZSBuZWVkcyBub3QgdG8gYmUgemVybyB0ZXItCit8ICAgICAgICAgICAgICAgICAgICBtaW5hdGVkLiBJdCBpcyBjb3BpZWQgdXAgdG8gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBhcmd1bWVudAorfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgIC0gc3lzdGVtIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2ZpZWxkX2J1ZmZlcihGSUVMRCAqZmllbGQsIGludCBidWZmZXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBGSUVMRF9DRUxMICpwOworICBpbnQgcmVzID0gRV9PSzsKKyAgdW5zaWduZWQgaW50IGk7CisgIHVuc2lnbmVkIGludCBsZW47CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICBGSUVMRF9DRUxMICp3aWRldmFsdWUgPSAwOworI2VuZGlmCisKKyAgVCgoVF9DQUxMRUQoInNldF9maWVsZF9idWZmZXIoJXAsJWQsJXMpIiksIGZpZWxkLCBidWZmZXIsIF9uY192aXNidWYodmFsdWUpKSk7CisKKyAgaWYgKCFmaWVsZCB8fCAhdmFsdWUgfHwgKChidWZmZXIgPCAwKSB8fCAoYnVmZmVyID4gZmllbGQtPm5idWYpKSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGxlbiA9IEJ1ZmZlcl9MZW5ndGgoZmllbGQpOworCisgIGlmIChHcm93YWJsZShmaWVsZCkpCisgICAgeworICAgICAgLyogZm9yIGEgZ3Jvd2FibGUgZmllbGQgd2UgbXVzdCBhc3N1bWUgemVybyB0ZXJtaW5hdGVkIHN0cmluZ3MsIGJlY2F1c2UKKyAgICAgICAgIHNvbWVob3cgd2UgaGF2ZSB0byBkZXRlY3QgdGhlIGxlbmd0aCBvZiB3aGF0IHNob3VsZCBiZSBjb3BpZWQuCisgICAgICAgKi8KKyAgICAgIHVuc2lnbmVkIGludCB2bGVuID0gc3RybGVuKHZhbHVlKTsKKworICAgICAgaWYgKHZsZW4gPiBsZW4pCisJeworCSAgaWYgKCFGaWVsZF9Hcm93bihmaWVsZCwKKwkJCSAgIChpbnQpKDEgKyAodmxlbiAtIGxlbikgLyAoKGZpZWxkLT5yb3dzICsgZmllbGQtPm5yb3cpCisJCQkJCQkgICAgICogZmllbGQtPmNvbHMpKSkpCisJICAgIFJFVFVSTihFX1NZU1RFTV9FUlJPUik7CisKKwkgIGxlbiA9IHZsZW47CisJfQorICAgIH0KKworICBwID0gQWRkcmVzc19PZl9OdGhfQnVmZmVyKGZpZWxkLCBidWZmZXIpOworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgLyoKKyAgICogVXNlIGFkZHN0cidzIGxvZ2ljIGZvciBjb252ZXJ0aW5nIGEgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGNjaGFyX3Qncy4KKyAgICogVGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIHdheSwgYnV0IHRoaXMgaGFuZGxlcyBub25zcGFjaW5nIGNoYXJhY3RlcnMKKyAgICogYW5kIG90aGVyIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZSByZWFsbHkgZG8gbm90IHdhbnQgdG8gaGFuZGxlIGhlcmUuCisgICAqLworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisgIGlmICh3cmVzaXplKGZpZWxkLT53b3JraW5nLCBmaWVsZC0+ZHJvd3MsIGZpZWxkLT5kY29scykgPT0gRVJSKQorI2VuZGlmCisgICAgeworICAgICAgZGVsd2luKGZpZWxkLT53b3JraW5nKTsKKyAgICAgIGZpZWxkLT53b3JraW5nID0gbmV3cGFkKGZpZWxkLT5kcm93cywgZmllbGQtPmRjb2xzKTsKKyAgICB9CisgIHdjbGVhcihmaWVsZC0+d29ya2luZyk7CisgIG12d2FkZHN0cihmaWVsZC0+d29ya2luZywgMCwgMCwgdmFsdWUpOworCisgIGlmICgod2lkZXZhbHVlID0gdHlwZUNhbGxvYyhGSUVMRF9DRUxMLCBsZW4gKyAxKSkgPT0gMCkKKyAgICB7CisgICAgICBSRVRVUk4oRV9TWVNURU1fRVJST1IpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCAodW5zaWduZWQpZmllbGQtPmRyb3dzOyArK2kpCisJeworCSAgbXZ3aW5fd2NobnN0cihmaWVsZC0+d29ya2luZywgaSwgMCwKKwkJCXdpZGV2YWx1ZSArIChpICogZmllbGQtPmRjb2xzKSwKKwkJCWZpZWxkLT5kY29scyk7CisJfQorICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorCXsKKwkgIGlmIChDaGFyRXEobXlaRVJPUywgd2lkZXZhbHVlW2ldKSkKKwkgICAgeworCSAgICAgIHdoaWxlIChpIDwgbGVuKQorCQlwW2krK10gPSBteUJMQU5LOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBwW2ldID0gd2lkZXZhbHVlW2ldOworCX0KKyAgICAgIGZyZWUod2lkZXZhbHVlKTsKKyAgICB9CisjZWxzZQorICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAgeworICAgICAgaWYgKHZhbHVlW2ldID09ICdcMCcpCisJeworCSAgd2hpbGUgKGkgPCBsZW4pCisJICAgIHBbaSsrXSA9IG15QkxBTks7CisJICBicmVhazsKKwl9CisgICAgICBwW2ldID0gdmFsdWVbaV07CisgICAgfQorI2VuZGlmCisKKyAgaWYgKGJ1ZmZlciA9PSAwKQorICAgIHsKKyAgICAgIGludCBzeW5jcmVzOworCisgICAgICBpZiAoKChzeW5jcmVzID0gU3luY2hyb25pemVfRmllbGQoZmllbGQpKSAhPSBFX09LKSAmJgorCSAgKHJlcyA9PSBFX09LKSkKKwlyZXMgPSBzeW5jcmVzOworICAgICAgaWYgKCgoc3luY3JlcyA9IFN5bmNocm9uaXplX0xpbmtlZF9GaWVsZHMoZmllbGQpKSAhPSBFX09LKSAmJgorCSAgKHJlcyA9PSBFX09LKSkKKwlyZXMgPSBzeW5jcmVzOworICAgIH0KKyAgUkVUVVJOKHJlcyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgY2hhciAqZmllbGRfYnVmZmVyKGNvbnN0IEZJRUxEICpmaWVsZCxpbnQgYnVmZmVyKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBidWZmZXIgZm9yIHRoZSBmaWVsZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYnVmZmVyIG9yIE5VTEwgaWYgYXJndW1lbnRzIHdlcmUgaW52YWxpZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitmaWVsZF9idWZmZXIoY29uc3QgRklFTEQgKmZpZWxkLCBpbnQgYnVmZmVyKQoreworICBjaGFyICpyZXN1bHQgPSAwOworCisgIFQoKFRfQ0FMTEVEKCJmaWVsZF9idWZmZXIoJXAsJWQpIiksIGZpZWxkLCBidWZmZXIpKTsKKworICBpZiAoZmllbGQgJiYgKGJ1ZmZlciA+PSAwKSAmJiAoYnVmZmVyIDw9IGZpZWxkLT5uYnVmKSkKKyAgICB7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICAgIEZJRUxEX0NFTEwgKmRhdGEgPSBBZGRyZXNzX09mX050aF9CdWZmZXIoZmllbGQsIGJ1ZmZlcik7CisgICAgICB1bnNpZ25lZCBuZWVkID0gMDsKKyAgICAgIGludCBzaXplID0gQnVmZmVyX0xlbmd0aChmaWVsZCk7CisgICAgICBpbnQgbjsKKworICAgICAgLyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIHN0b3JlIHRoZSBleHBhbmRlZCBzdHJpbmcgKi8KKyAgICAgIGZvciAobiA9IDA7IG4gPCBzaXplOyArK24pCisJeworCSAgaWYgKCFpc1dpZGVjRXh0KGRhdGFbbl0pKQorCSAgICB7CisJICAgICAgbWJzdGF0ZV90IHN0YXRlOworCSAgICAgIHNpemVfdCBuZXh0OworCisJICAgICAgaW5pdF9tYihzdGF0ZSk7CisJICAgICAgbmV4dCA9IF9uY193Y3J0b21iKDAsIGRhdGFbbl0uY2hhcnNbMF0sICZzdGF0ZSk7CisJICAgICAgaWYgKCFpc0VJTFNFUShuZXh0KSkKKwkJbmVlZCArPSBuZXh0OworCSAgICB9CisJfQorCisgICAgICAvKiBhbGxvY2F0ZSBhIHBsYWNlIHRvIHN0b3JlIHRoZSBleHBhbmRlZCBzdHJpbmcgKi8KKyAgICAgIGlmIChmaWVsZC0+ZXhwYW5kZWRbYnVmZmVyXSAhPSAwKQorCWZyZWUoZmllbGQtPmV4cGFuZGVkW2J1ZmZlcl0pOworICAgICAgZmllbGQtPmV4cGFuZGVkW2J1ZmZlcl0gPSB0eXBlTWFsbG9jKGNoYXIsIG5lZWQgKyAxKTsKKworICAgICAgLyogZXhwYW5kIHRoZSBtdWx0aWJ5dGUgZGF0YSAqLworICAgICAgaWYgKChyZXN1bHQgPSBmaWVsZC0+ZXhwYW5kZWRbYnVmZmVyXSkgIT0gMCkKKwl7CisJICB3Y2xlYXIoZmllbGQtPndvcmtpbmcpOworCSAgbXZ3YWRkX3djaG5zdHIoZmllbGQtPndvcmtpbmcsIDAsIDAsIGRhdGEsIHNpemUpOworCSAgbXZ3aW5uc3RyKGZpZWxkLT53b3JraW5nLCAwLCAwLCByZXN1bHQsIChpbnQpbmVlZCk7CisJfQorI2Vsc2UKKyAgICAgIHJlc3VsdCA9IEFkZHJlc3NfT2ZfTnRoX0J1ZmZlcihmaWVsZCwgYnVmZmVyKTsKKyNlbmRpZgorICAgIH0KKyAgcmV0dXJuUHRyKHJlc3VsdCk7Cit9CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCisvKiBGSVhNRTogc2VlIGxpYl9nZXRfd2NoLmMgKi8KKyNpZiBIQVZFX01CVE9XQyAmJiBIQVZFX01CTEVOCisjZGVmaW5lIHJlc2V0X21ieXRlcyhzdGF0ZSkgbWJsZW4oTlVMTCwgMCksIG1idG93YyhOVUxMLCBOVUxMLCAwKQorI2RlZmluZSBjb3VudF9tYnl0ZXMoYnVmZmVyLGxlbmd0aCxzdGF0ZSkgbWJsZW4oYnVmZmVyLGxlbmd0aCkKKyNkZWZpbmUgdHJhbnNfbWJ5dGVzKHdjaCxidWZmZXIsbGVuZ3RoLHN0YXRlKSBcCisJKGludCkgbWJ0b3djKCZ3Y2gsIGJ1ZmZlciwgbGVuZ3RoKQorI2VsaWYgSEFWRV9NQlJUT1dDICYmIEhBVkVfTUJSTEVOCisjZGVmaW5lIE5FRURfU1RBVEUKKyNkZWZpbmUgcmVzZXRfbWJ5dGVzKHN0YXRlKSBpbml0X21iKHN0YXRlKQorI2RlZmluZSBjb3VudF9tYnl0ZXMoYnVmZmVyLGxlbmd0aCxzdGF0ZSkgbWJybGVuKGJ1ZmZlcixsZW5ndGgsJnN0YXRlKQorI2RlZmluZSB0cmFuc19tYnl0ZXMod2NoLGJ1ZmZlcixsZW5ndGgsc3RhdGUpIFwKKwkoaW50KSBtYnJ0b3djKCZ3Y2gsIGJ1ZmZlciwgbGVuZ3RoLCAmc3RhdGUpCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8IENvbnZlcnQgYSBtdWx0aWJ5dGUgc3RyaW5nIHRvIGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nLiAgVGhlIHJlc3VsdCBtdXN0IGJlCit8IGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQod2NoYXJfdCAqKQorX25jX1dpZGVuX1N0cmluZyhjaGFyICpzb3VyY2UsIGludCAqbGVuZ3RocCkKK3sKKyAgd2NoYXJfdCAqcmVzdWx0ID0gMDsKKyAgd2NoYXJfdCB3Y2g7CisgIHNpemVfdCBnaXZlbiA9IHN0cmxlbihzb3VyY2UpOworICBzaXplX3QgdHJpZXM7CisgIGludCBwYXNzOworICBpbnQgc3RhdHVzOworCisjaWZkZWYgTkVFRF9TVEFURQorICBtYnN0YXRlX3Qgc3RhdGU7CisjZW5kaWYKKworICBmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgKytwYXNzKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIG5lZWQgPSAwOworICAgICAgc2l6ZV90IHBhc3NlZCA9IDA7CisKKyAgICAgIHdoaWxlIChwYXNzZWQgPCBnaXZlbikKKwl7CisJICBib29sIGZvdW5kID0gRkFMU0U7CisKKwkgIGZvciAodHJpZXMgPSAxLCBzdGF0dXMgPSAwOyB0cmllcyA8PSAoZ2l2ZW4gLSBwYXNzZWQpOyArK3RyaWVzKQorCSAgICB7CisJICAgICAgaW50IHNhdmUgPSBzb3VyY2VbcGFzc2VkICsgdHJpZXNdOworCisJICAgICAgc291cmNlW3Bhc3NlZCArIHRyaWVzXSA9IDA7CisJICAgICAgcmVzZXRfbWJ5dGVzKHN0YXRlKTsKKwkgICAgICBzdGF0dXMgPSB0cmFuc19tYnl0ZXMod2NoLCBzb3VyY2UgKyBwYXNzZWQsIHRyaWVzLCBzdGF0ZSk7CisJICAgICAgc291cmNlW3Bhc3NlZCArIHRyaWVzXSA9IHNhdmU7CisKKwkgICAgICBpZiAoc3RhdHVzID4gMCkKKwkJeworCQkgIGZvdW5kID0gVFJVRTsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisJICBpZiAoZm91bmQpCisJICAgIHsKKwkgICAgICBpZiAocGFzcykKKwkJeworCQkgIHJlc3VsdFtuZWVkXSA9IHdjaDsKKwkJfQorCSAgICAgIHBhc3NlZCArPSBzdGF0dXM7CisJICAgICAgKytuZWVkOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAocGFzcykKKwkJeworCQkgIHJlc3VsdFtuZWVkXSA9IHNvdXJjZVtwYXNzZWRdOworCQl9CisJICAgICAgKytuZWVkOworCSAgICAgICsrcGFzc2VkOworCSAgICB9CisJfQorCisgICAgICBpZiAoIXBhc3MpCisJeworCSAgaWYgKCFuZWVkKQorCSAgICBicmVhazsKKwkgIHJlc3VsdCA9IHR5cGVDYWxsb2Mod2NoYXJfdCwgbmVlZCk7CisKKwkgICpsZW5ndGhwID0gbmVlZDsKKwkgIGlmIChyZXN1bHQgPT0gMCkKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy8qIGZybV9kcml2ZXIuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZnJtX2hvb2suYyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX2hvb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU2ZDcxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1faG9vay5jCkBAIC0wLDAgKzEsMTQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmcm1faG9vay5jLHYgMS4xNCAyMDA0LzEyLzI1IDIyOjM3OjI3IHRvbSBFeHAgJCIpCisKKy8qICJUZW1wbGF0ZSIgbWFjcm8gdG8gZ2VuZXJhdGUgZnVuY3Rpb24gdG8gc2V0IGFwcGxpY2F0aW9uIHNwZWNpZmljIGhvb2sgKi8KKyNkZWZpbmUgR0VOX0hPT0tfU0VUX0ZVTkNUSU9OKCB0eXAsIG5hbWUgKSBcCitOQ1VSU0VTX0lNUEVYUCBpbnQgTkNVUlNFU19BUEkgc2V0XyAjIyB0eXAgIyMgXyAjIyBuYW1lIChGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYylcCit7XAorICAgVCgoVF9DQUxMRUQoInNldF8iICN0eXAiXyIjbmFtZSIoJXAsJXApIiksIGZvcm0sIGZ1bmMpKTtcCisgICAoTm9ybWFsaXplX0Zvcm0oIGZvcm0gKSAtPiB0eXAgIyMgbmFtZSkgPSBmdW5jIDtcCisgICBSRVRVUk4oRV9PSyk7XAorfQorCisvKiAiVGVtcGxhdGUiIG1hY3JvIHRvIGdlbmVyYXRlIGZ1bmN0aW9uIHRvIGdldCBhcHBsaWNhdGlvbiBzcGVjaWZpYyBob29rICovCisjZGVmaW5lIEdFTl9IT09LX0dFVF9GVU5DVElPTiggdHlwLCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgRm9ybV9Ib29rIE5DVVJTRVNfQVBJIHR5cCAjIyBfICMjIG5hbWUgKCBjb25zdCBGT1JNICpmb3JtIClcCit7XAorICAgVCgoVF9DQUxMRUQoI3R5cCAiXyIgI25hbWUgIiglcCkiKSwgZm9ybSkpO1wKKyAgIHJldHVybkZvcm1Ib29rKCBOb3JtYWxpemVfRm9ybSggZm9ybSApIC0+IHR5cCAjIyBuYW1lICk7XAorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfaW5pdChGT1JNICpmb3JtLCBGb3JtX0hvb2sgZikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFzc2lnbnMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgorfCAgICAgICAgICAgICAgICAgICAgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGZvcm0gaXMgcG9zdGVkIGFuZCBqdXN0IGFmdGVyCit8ICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBmaWVsZCBjaGFuZ2VzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX1NFVF9GVU5DVElPTihmaWVsZCwgaW5pdCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBGb3JtX0hvb2sgZmllbGRfaW5pdChjb25zdCBGT1JNICpmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgZmllbGQgaW5pdGlhbGl6YXRpb24gcm91dGluZSBhZGRyZXNzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIGFkZHJlc3Mgb3IgTlVMTCBpZiBubyBob29rIGRlZmluZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKGZpZWxkLCBpbml0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZmllbGRfdGVybShGT1JNICpmb3JtLCBGb3JtX0hvb2sgZikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFzc2lnbnMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBmaW5hbGl6YXRpb24gZnVuY3Rpb24KK3wgICAgICAgICAgICAgICAgICAgIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHVucG9zdGVkIGFuZCBqdXN0IGJlZm9yZQorfCAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgZmllbGQgY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19TRVRfRlVOQ1RJT04oZmllbGQsIHRlcm0pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgRm9ybV9Ib29rIGZpZWxkX3Rlcm0oY29uc3QgRk9STSAqZm9ybSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGZpZWxkIGZpbmFsaXphdGlvbiByb3V0aW5lIGFkZHJlc3MuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgYWRkcmVzcyBvciBOVUxMIGlmIG5vIGhvb2sgZGVmaW5lZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19HRVRfRlVOQ1RJT04oZmllbGQsIHRlcm0pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9mb3JtX2luaXQoRk9STSAqZm9ybSwgRm9ybV9Ib29rIGYpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBBc3NpZ25zIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KK3wgICAgICAgICAgICAgICAgICAgIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHBvc3RlZCBhbmQganVzdCBhZnRlcgorfCAgICAgICAgICAgICAgICAgICAgYSBwYWdlIGNoYW5nZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfU0VUX0ZVTkNUSU9OKGZvcm0sIGluaXQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgRm9ybV9Ib29rIGZvcm1faW5pdChjb25zdCBGT1JNICpmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgZm9ybSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGFkZHJlc3MuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgYWRkcmVzcyBvciBOVUxMIGlmIG5vIGhvb2sgZGVmaW5lZC4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19HRVRfRlVOQ1RJT04oZm9ybSwgaW5pdCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2Zvcm1fdGVybShGT1JNICpmb3JtLCBGb3JtX0hvb2sgZikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFzc2lnbnMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBmaW5hbGl6YXRpb24gZnVuY3Rpb24KK3wgICAgICAgICAgICAgICAgICAgIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHVucG9zdGVkIGFuZCBqdXN0IGJlZm9yZQorfCAgICAgICAgICAgICAgICAgICAgYSBwYWdlIGNoYW5nZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgLSBzdWNjZXNzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfU0VUX0ZVTkNUSU9OKGZvcm0sIHRlcm0pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgRm9ybV9Ib29rIGZvcm1fdGVybShjb25zdCBGT1JNICpmb3JtKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0cmlldmUgZm9ybSBmaW5hbGl6YXRpb24gcm91dGluZSBhZGRyZXNzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIGFkZHJlc3Mgb3IgTlVMTCBpZiBubyBob29rIGRlZmluZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKGZvcm0sIHRlcm0pCisKKy8qIGZybV9ob29rLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2ZybV9vcHRzLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZybV9vcHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2ZDYxOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX29wdHMuYwpAQCAtMCwwICsxLDEyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX29wdHMuYyx2IDEuMTQgMjAwNS8wNC8xNiAxNjo1OToxOCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9mb3JtX29wdHMoRk9STSAqZm9ybSwgRm9ybV9PcHRpb25zIG9wdHMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBUdXJucyBvbiB0aGUgbmFtZWQgb3B0aW9ucyBhbmQgdHVybnMgb2ZmIGFsbCB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBvcHRpb25zIGZvciB0aGF0IGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBvcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2Zvcm1fb3B0cyhGT1JNICpmb3JtLCBGb3JtX09wdGlvbnMgb3B0cykKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9mb3JtX29wdHMoJXAsJWQpIiksIGZvcm0sIG9wdHMpKTsKKworICBvcHRzICY9IEFMTF9GT1JNX09QVFM7CisgIGlmIChvcHRzICYgfkFMTF9GT1JNX09QVFMpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT5vcHRzID0gb3B0czsKKyAgICAgIFJFVFVSTihFX09LKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBGb3JtX09wdGlvbnMgZm9ybV9vcHRzKGNvbnN0IEZPUk0gKikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlcyB0aGUgY3VycmVudCBmb3JtIG9wdGlvbnMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgb3B0aW9uIGZsYWdzLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKEZvcm1fT3B0aW9ucykKK2Zvcm1fb3B0cyhjb25zdCBGT1JNICpmb3JtKQoreworICBUKChUX0NBTExFRCgiZm9ybV9vcHRzKCVwKSIpLCBmb3JtKSk7CisgIHJldHVybkNvZGUoKGludCkoTm9ybWFsaXplX0Zvcm0oZm9ybSktPm9wdHMgJiBBTExfRk9STV9PUFRTKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZm9ybV9vcHRzX29uKEZPUk0gKmZvcm0sIEZvcm1fT3B0aW9ucyBvcHRzKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVHVybnMgb24gdGhlIG5hbWVkIG9wdGlvbnM7IG5vIG90aGVyIG9wdGlvbnMgYXJlIAorfCAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MgCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG9wdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmb3JtX29wdHNfb24oRk9STSAqZm9ybSwgRm9ybV9PcHRpb25zIG9wdHMpCit7CisgIFQoKFRfQ0FMTEVEKCJmb3JtX29wdHNfb24oJXAsJWQpIiksIGZvcm0sIG9wdHMpKTsKKworICBvcHRzICY9IEFMTF9GT1JNX09QVFM7CisgIGlmIChvcHRzICYgfkFMTF9GT1JNX09QVFMpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT5vcHRzIHw9IG9wdHM7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZvcm1fb3B0c19vZmYoRk9STSAqZm9ybSwgRm9ybV9PcHRpb25zIG9wdHMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBUdXJucyBvZmYgdGhlIG5hbWVkIG9wdGlvbnM7IG5vIG90aGVyIG9wdGlvbnMgYXJlIAorfCAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MgCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG9wdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmb3JtX29wdHNfb2ZmKEZPUk0gKmZvcm0sIEZvcm1fT3B0aW9ucyBvcHRzKQoreworICBUKChUX0NBTExFRCgiZm9ybV9vcHRzX29mZiglcCwlZCkiKSwgZm9ybSwgb3B0cykpOworCisgIG9wdHMgJj0gQUxMX0ZPUk1fT1BUUzsKKyAgaWYgKG9wdHMgJiB+QUxMX0ZPUk1fT1BUUykKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICBlbHNlCisgICAgeworICAgICAgTm9ybWFsaXplX0Zvcm0oZm9ybSktPm9wdHMgJj0gfm9wdHM7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorfQorCisvKiBmcm1fb3B0cy5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fcGFnZS5jIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fcGFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzE4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZybV9wYWdlLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZybV9wYWdlLmMsdiAxLjEwIDIwMDQvMTIvMTEgMjI6MDg6MjEgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZm9ybV9wYWdlKEZPUk0gKiBmb3JtLGludCAgcGFnZSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgcGFnZSBudW1iZXIgb2YgdGhlIGZvcm0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBmb3JtIHBvaW50ZXIgb3IgcGFnZSBudW1iZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX1NUQVRFICAgICAgIC0gY2FsbGVkIGZyb20gYSBob29rIHJvdXRpbmUKK3wgICAgICAgICAgICAgICAgICAgIEVfSU5WQUxJRF9GSUVMRCAgIC0gY3VycmVudCBmaWVsZCBjYW4ndCBiZSBsZWZ0Cit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAtIHN5c3RlbSBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9mb3JtX3BhZ2UoRk9STSAqZm9ybSwgaW50IHBhZ2UpCit7CisgIGludCBlcnIgPSBFX09LOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfZm9ybV9wYWdlKCVwLCVkKSIpLCBmb3JtLCBwYWdlKSk7CisKKyAgaWYgKCFmb3JtIHx8IChwYWdlIDwgMCkgfHwgKHBhZ2UgPj0gZm9ybS0+bWF4cGFnZSkpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoIShmb3JtLT5zdGF0dXMgJiBfUE9TVEVEKSkKKyAgICB7CisgICAgICBmb3JtLT5jdXJwYWdlID0gcGFnZTsKKyAgICAgIGZvcm0tPmN1cnJlbnQgPSBfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkKGZvcm0pOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmb3JtLT5zdGF0dXMgJiBfSU5fRFJJVkVSKQorCWVyciA9IEVfQkFEX1NUQVRFOworICAgICAgZWxzZQorCXsKKwkgIGlmIChmb3JtLT5jdXJwYWdlICE9IHBhZ2UpCisJICAgIHsKKwkgICAgICBpZiAoIV9uY19JbnRlcm5hbF9WYWxpZGF0aW9uKGZvcm0pKQorCQllcnIgPSBFX0lOVkFMSURfRklFTEQ7CisJICAgICAgZWxzZQorCQl7CisJCSAgQ2FsbF9Ib29rKGZvcm0sIGZpZWxkdGVybSk7CisJCSAgQ2FsbF9Ib29rKGZvcm0sIGZvcm10ZXJtKTsKKwkJICBlcnIgPSBfbmNfU2V0X0Zvcm1fUGFnZShmb3JtLCBwYWdlLCAoRklFTEQgKikwKTsKKwkJICBDYWxsX0hvb2soZm9ybSwgZm9ybWluaXQpOworCQkgIENhbGxfSG9vayhmb3JtLCBmaWVsZGluaXQpOworCQkgIF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoZm9ybSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIFJFVFVSTihlcnIpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZvcm1fcGFnZShjb25zdCBGT1JNICogZm9ybSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgY3VycmVudCBwYWdlIG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgPj0gMCAgOiBjdXJyZW50IHBhZ2UgbnVtYmVyCit8ICAgICAgICAgICAgICAgICAgICAtMSAgICA6IGludmFsaWQgZm9ybSBwb2ludGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZm9ybV9wYWdlKGNvbnN0IEZPUk0gKmZvcm0pCit7CisgIFQoKFRfQ0FMTEVEKCJmb3JtX3BhZ2UoJXApIiksIGZvcm0pKTsKKworICByZXR1cm5Db2RlKE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT5jdXJwYWdlKTsKK30KKworLyogZnJtX3BhZ2UuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZnJtX3Bvc3QuYyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX3Bvc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODkzN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fcG9zdC5jCkBAIC0wLDAgKzEsMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmcm1fcG9zdC5jLHYgMS45IDIwMDQvMTIvMTEgMjI6MTk6MDYgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBwb3N0X2Zvcm0oRk9STSAqIGZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBXcml0ZXMgdGhlIGZvcm0gaW50byBpdHMgYXNzb2NpYXRlZCBzdWJ3aW5kb3cuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBmb3JtIHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgICAgIC0gZm9ybSBhbHJlYWR5IHBvc3RlZAorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAgLSBubyBmaWVsZHMgY29ubmVjdGVkIHRvIGZvcm0KK3wgICAgICAgICAgICAgICAgICAgIEVfTk9fUk9PTSAgICAgICAgIC0gZm9ybSBkb2Vzbid0IGZpdCBpbnRvIHN1YndpbmRvdworfCAgICAgICAgICAgICAgICAgICAgRV9TWVNURU1fRVJST1IgICAgLSBzeXN0ZW0gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwb3N0X2Zvcm0oRk9STSAqZm9ybSkKK3sKKyAgV0lORE9XICpmb3Jtd2luOworICBpbnQgZXJyOworICBpbnQgcGFnZTsKKworICBUKChUX0NBTExFRCgicG9zdF9mb3JtKCVwKSIpLCBmb3JtKSk7CisKKyAgaWYgKCFmb3JtKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpCisgICAgUkVUVVJOKEVfUE9TVEVEKTsKKworICBpZiAoIShmb3JtLT5maWVsZCkpCisgICAgUkVUVVJOKEVfTk9UX0NPTk5FQ1RFRCk7CisKKyAgZm9ybXdpbiA9IEdldF9Gb3JtX1dpbmRvdyhmb3JtKTsKKyAgaWYgKChmb3JtLT5jb2xzID4gZ2V0bWF4eChmb3Jtd2luKSkgfHwgKGZvcm0tPnJvd3MgPiBnZXRtYXh5KGZvcm13aW4pKSkKKyAgICBSRVRVUk4oRV9OT19ST09NKTsKKworICAvKiByZXNldCBmb3JtLT5jdXJwYWdlIHRvIGFuIGludmFsZCB2YWx1ZS4gVGhpcyBmb3JjZXMgU2V0X0Zvcm1fUGFnZQorICAgICB0byBkbyB0aGUgcGFnZSBpbml0aWFsaXphdGlvbiB3aGljaCBpcyByZXF1aXJlZCBieSBwb3N0X2Zvcm0uCisgICAqLworICBwYWdlID0gZm9ybS0+Y3VycGFnZTsKKyAgZm9ybS0+Y3VycGFnZSA9IC0xOworICBpZiAoKGVyciA9IF9uY19TZXRfRm9ybV9QYWdlKGZvcm0sIHBhZ2UsIGZvcm0tPmN1cnJlbnQpKSAhPSBFX09LKQorICAgIFJFVFVSTihlcnIpOworCisgIGZvcm0tPnN0YXR1cyB8PSBfUE9TVEVEOworCisgIENhbGxfSG9vayhmb3JtLCBmb3JtaW5pdCk7CisgIENhbGxfSG9vayhmb3JtLCBmaWVsZGluaXQpOworCisgIF9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoZm9ybSk7CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCB1bnBvc3RfZm9ybShGT1JNICogZm9ybSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEVyYXNlIGZvcm0gZnJvbSBpdHMgYXNzb2NpYXRlZCBzdWJ3aW5kb3cuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIGZvcm0gcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfUE9TVEVEICAgIC0gZm9ybSBpc24ndCBwb3N0ZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX1NUQVRFICAgICAtIGNhbGxlZCBmcm9tIGEgaG9vayByb3V0aW5lCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQordW5wb3N0X2Zvcm0oRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoInVucG9zdF9mb3JtKCVwKSIpLCBmb3JtKSk7CisKKyAgaWYgKCFmb3JtKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKCEoZm9ybS0+c3RhdHVzICYgX1BPU1RFRCkpCisgICAgUkVUVVJOKEVfTk9UX1BPU1RFRCk7CisKKyAgaWYgKGZvcm0tPnN0YXR1cyAmIF9JTl9EUklWRVIpCisgICAgUkVUVVJOKEVfQkFEX1NUQVRFKTsKKworICBDYWxsX0hvb2soZm9ybSwgZmllbGR0ZXJtKTsKKyAgQ2FsbF9Ib29rKGZvcm0sIGZvcm10ZXJtKTsKKworICB3ZXJhc2UoR2V0X0Zvcm1fV2luZG93KGZvcm0pKTsKKyAgZGVsd2luKGZvcm0tPncpOworICBmb3JtLT53ID0gKFdJTkRPVyAqKTA7CisgIGZvcm0tPnN0YXR1cyAmPSB+X1BPU1RFRDsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBmcm1fcG9zdC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fcmVxX25hbWUuYyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX3JlcV9uYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjOWFiZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX3JlcV9uYW1lLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIGZvcm1fcmVxdWVzdF9uYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogUm91dGluZXMgdG8gaGFuZGxlIGV4dGVybmFsIG5hbWVzIG9mIG1lbnUgcmVxdWVzdHMgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX3JlcV9uYW1lLmMsdiAxLjE2IDIwMDgvMDcvMDUgMjM6MjI6MDggdG9tIEV4cCAkIikKKworc3RhdGljIGNvbnN0IGNoYXIgKnJlcXVlc3RfbmFtZXNbTUFYX0ZPUk1fQ09NTUFORCAtIE1JTl9GT1JNX0NPTU1BTkQgKyAxXSA9Cit7CisgICJORVhUX1BBR0UiLAorICAiUFJFVl9QQUdFIiwKKyAgIkZJUlNUX1BBR0UiLAorICAiTEFTVF9QQUdFIiwKKworICAiTkVYVF9GSUVMRCIsCisgICJQUkVWX0ZJRUxEIiwKKyAgIkZJUlNUX0ZJRUxEIiwKKyAgIkxBU1RfRklFTEQiLAorICAiU05FWFRfRklFTEQiLAorICAiU1BSRVZfRklFTEQiLAorICAiU0ZJUlNUX0ZJRUxEIiwKKyAgIlNMQVNUX0ZJRUxEIiwKKyAgIkxFRlRfRklFTEQiLAorICAiUklHSFRfRklFTEQiLAorICAiVVBfRklFTEQiLAorICAiRE9XTl9GSUVMRCIsCisKKyAgIk5FWFRfQ0hBUiIsCisgICJQUkVWX0NIQVIiLAorICAiTkVYVF9MSU5FIiwKKyAgIlBSRVZfTElORSIsCisgICJORVhUX1dPUkQiLAorICAiUFJFVl9XT1JEIiwKKyAgIkJFR19GSUVMRCIsCisgICJFTkRfRklFTEQiLAorICAiQkVHX0xJTkUiLAorICAiRU5EX0xJTkUiLAorICAiTEVGVF9DSEFSIiwKKyAgIlJJR0hUX0NIQVIiLAorICAiVVBfQ0hBUiIsCisgICJET1dOX0NIQVIiLAorCisgICJORVdfTElORSIsCisgICJJTlNfQ0hBUiIsCisgICJJTlNfTElORSIsCisgICJERUxfQ0hBUiIsCisgICJERUxfUFJFViIsCisgICJERUxfTElORSIsCisgICJERUxfV09SRCIsCisgICJDTFJfRU9MIiwKKyAgIkNMUl9FT0YiLAorICAiQ0xSX0ZJRUxEIiwKKyAgIk9WTF9NT0RFIiwKKyAgIklOU19NT0RFIiwKKyAgIlNDUl9GTElORSIsCisgICJTQ1JfQkxJTkUiLAorICAiU0NSX0ZQQUdFIiwKKyAgIlNDUl9CUEFHRSIsCisgICJTQ1JfRkhQQUdFIiwKKyAgIlNDUl9CSFBBR0UiLAorICAiU0NSX0ZDSEFSIiwKKyAgIlNDUl9CQ0hBUiIsCisgICJTQ1JfSEZMSU5FIiwKKyAgIlNDUl9IQkxJTkUiLAorICAiU0NSX0hGSEFMRiIsCisgICJTQ1JfSEJIQUxGIiwKKworICAiVkFMSURBVElPTiIsCisgICJORVhUX0NIT0lDRSIsCisgICJQUkVWX0NIT0lDRSIKK307CisKKyNkZWZpbmUgQV9TSVpFIChzaXplb2YocmVxdWVzdF9uYW1lcykvc2l6ZW9mKHJlcXVlc3RfbmFtZXNbMF0pKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgY29uc3QgY2hhciAqIGZvcm1fcmVxdWVzdF9uYW1lIChpbnQgcmVxdWVzdCk7Cit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIGV4dGVybmFsIG5hbWUgb2YgYSBmb3JtIHJlcXVlc3QuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIG5hbWUgICAgICAtIG9uIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgIC0gb24gaW52YWxpZCByZXF1ZXN0IGNvZGUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitmb3JtX3JlcXVlc3RfbmFtZShpbnQgcmVxdWVzdCkKK3sKKyAgVCgoVF9DQUxMRUQoImZvcm1fcmVxdWVzdF9uYW1lKCVkKSIpLCByZXF1ZXN0KSk7CisKKyAgaWYgKChyZXF1ZXN0IDwgTUlOX0ZPUk1fQ09NTUFORCkgfHwgKHJlcXVlc3QgPiBNQVhfRk9STV9DT01NQU5EKSkKKyAgICB7CisgICAgICBTRVRfRVJST1IoRV9CQURfQVJHVU1FTlQpOworICAgICAgcmV0dXJuQ1B0cigoY29uc3QgY2hhciAqKTApOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybkNQdHIocmVxdWVzdF9uYW1lc1tyZXF1ZXN0IC0gTUlOX0ZPUk1fQ09NTUFORF0pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZvcm1fcmVxdWVzdF9ieV9uYW1lIChjb25zdCBjaGFyICpzdHIpOworfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2VhcmNoIGZvciBhIHJlcXVlc3Qgd2l0aCB0aGlzIG5hbWUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBSZXF1ZXN0IElkICAgICAgIC0gb24gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9OT19NQVRDSCAgICAgICAtIHJlcXVlc3Qgbm90IGZvdW5kCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorZm9ybV9yZXF1ZXN0X2J5X25hbWUoY29uc3QgY2hhciAqc3RyKQoreworICAvKiBiZWNhdXNlIHRoZSB0YWJsZSBpcyBzbyBzbWFsbCwgaXQgZG9lc24ndCByZWFsbHkgaHVydAorICAgICB0byBydW4gc2VxdWVudGlhbGx5IHRocm91Z2ggaXQuCisgICAqLworICB1bnNpZ25lZCBpbnQgaSA9IDA7CisgIGNoYXIgYnVmWzE2XTsKKworICBUKChUX0NBTExFRCgiZm9ybV9yZXF1ZXN0X2J5X25hbWUoJXMpIiksIF9uY192aXNidWYoc3RyKSkpOworCisgIGlmIChzdHIpCisgICAgeworICAgICAgc3RybmNweShidWYsIHN0ciwgc2l6ZW9mKGJ1ZikpOworICAgICAgd2hpbGUgKChpIDwgc2l6ZW9mKGJ1ZikpICYmIChidWZbaV0gIT0gJ1wwJykpCisJeworCSAgYnVmW2ldID0gdG91cHBlcihVQ2hhcihidWZbaV0pKTsKKwkgIGkrKzsKKwl9CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBBX1NJWkU7IGkrKykKKwl7CisJICBpZiAoc3RybmNtcChyZXF1ZXN0X25hbWVzW2ldLCBidWYsIHNpemVvZihidWYpKSA9PSAwKQorCSAgICByZXR1cm5Db2RlKE1JTl9GT1JNX0NPTU1BTkQgKyAoaW50KSBpKTsKKwl9CisgICAgfQorICBSRVRVUk4oRV9OT19NQVRDSCk7Cit9CisKKy8qIGZybV9yZXFfbmFtZS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fc2NhbGUuYyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX3NjYWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViZjcyZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZnJtX3NjYWxlLmMKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX3NjYWxlLmMsdiAxLjkgMjAwNC8xMi8xMSAyMjoxMjozNCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNjYWxlX2Zvcm0oIGNvbnN0IEZPUk0gKmZvcm0sIGludCAqcm93cywgaW50ICpjb2xzICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIHNpemUgb2YgZm9ybQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBubyBlcnJvcgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBpbnZhbGlkIGZvcm0gcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAgLSBubyBmaWVsZHMgY29ubmVjdGVkIHRvIGZvcm0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzY2FsZV9mb3JtKGNvbnN0IEZPUk0gKmZvcm0sIGludCAqcm93cywgaW50ICpjb2xzKQoreworICBUKChUX0NBTExFRCgic2NhbGVfZm9ybSglcCwlcCwlcCkiKSwgZm9ybSwgcm93cywgY29scykpOworCisgIGlmICghZm9ybSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmICghKGZvcm0tPmZpZWxkKSkKKyAgICBSRVRVUk4oRV9OT1RfQ09OTkVDVEVEKTsKKworICBpZiAocm93cykKKyAgICAqcm93cyA9IGZvcm0tPnJvd3M7CisgIGlmIChjb2xzKQorICAgICpjb2xzID0gZm9ybS0+Y29sczsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIGZybV9zY2FsZS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fc3ViLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZybV9zdWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGIwMDIzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fc3ViLmMKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX3N1Yi5jLHYgMS45IDIwMDQvMTIvMTEgMjI6MTM6MzkgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfZm9ybV9zdWIoRk9STSAqZm9ybSwgV0lORE9XICp3aW4pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIHN1YndpbmRvdyBvZiB0aGUgZm9ybSB0byB3aW4uIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgLSBmb3JtIGlzIHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9mb3JtX3N1YihGT1JNICpmb3JtLCBXSU5ET1cgKndpbikKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9mb3JtX3N1YiglcCwlcCkiKSwgZm9ybSwgd2luKSk7CisKKyAgaWYgKGZvcm0gJiYgKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpKQorICAgIFJFVFVSTihFX1BPU1RFRCk7CisKKyAgTm9ybWFsaXplX0Zvcm0oZm9ybSktPnN1YiA9IHdpbjsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgV0lORE9XICpmb3JtX3N1Yihjb25zdCBGT1JNICopCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSB0aGUgd2luZG93IG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIHBvaW50ZXIgdG8gdGhlIFN1YndpbmRvdy4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK2Zvcm1fc3ViKGNvbnN0IEZPUk0gKmZvcm0pCit7CisgIGNvbnN0IEZPUk0gKmY7CisKKyAgVCgoVF9DQUxMRUQoImZvcm1fc3ViKCVwKSIpLCBmb3JtKSk7CisKKyAgZiA9IE5vcm1hbGl6ZV9Gb3JtKGZvcm0pOworICByZXR1cm5XaW4oR2V0X0Zvcm1fV2luZG93KGYpKTsKK30KKworLyogZnJtX3N1Yi5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fdXNlci5jIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fdXNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNWUwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZybV91c2VyLmMKQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX3VzZXIuYyx2IDEuMTQgMjAwNC8xMi8yNSAyMjozNzo1NiB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9mb3JtX3VzZXJwdHIoRk9STSAqZm9ybSwgdm9pZCAqdXNycHRyKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBwb2ludGVyIHRoYXQgaXMgcmVzZXJ2ZWQgaW4gYW55IGZvcm0gdG8gc3RvcmUKK3wgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucworfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgIC0gb24gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9mb3JtX3VzZXJwdHIoRk9STSAqZm9ybSwgdm9pZCAqdXNycHRyKQoreworICBUKChUX0NBTExFRCgic2V0X2Zvcm1fdXNlcnB0ciglcCwlcCkiKSwgZm9ybSwgdXNycHRyKSk7CisKKyAgTm9ybWFsaXplX0Zvcm0oZm9ybSktPnVzcnB0ciA9IHVzcnB0cjsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCAqZm9ybV91c2VycHRyKGNvbnN0IEZPUk0gKmZvcm0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIHBvaW50ZXIgdGhhdCBpcyByZXNlcnZlZCBpbiBhbnkgZm9ybSB0bworfCAgICAgICAgICAgICAgICAgICAgc3RvcmUgYXBwbGljYXRpb24gcmVsZXZhbnQgaW5mb3JtYXRpb25zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVmFsdWUgb2YgcG9pbnRlci4gSWYgbm8gc3VjaCBwb2ludGVyIGhhcyBiZWVuIHNldCwKK3wgICAgICAgICAgICAgICAgICAgIE5VTEwgaXMgcmV0dXJuZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVCh2b2lkICopCitmb3JtX3VzZXJwdHIoY29uc3QgRk9STSAqZm9ybSkKK3sKKyAgVCgoVF9DQUxMRUQoImZvcm1fdXNlcnB0ciglcCkiKSwgZm9ybSkpOworICByZXR1cm5Wb2lkUHRyKE5vcm1hbGl6ZV9Gb3JtKGZvcm0pLT51c3JwdHIpOworfQorCisvKiBmcm1fdXNlci5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mcm1fd2luLmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2ZybV93aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjU4ZjBhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mcm1fd2luLmMKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnJtX3dpbi5jLHYgMS4xMyAyMDA0LzEyLzExIDIyOjE1OjI3IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2Zvcm1fd2luKEZPUk0gKmZvcm0sV0lORE9XICp3aW4pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIHdpbmRvdyBvZiB0aGUgZm9ybSB0byB3aW4uIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgLSBmb3JtIGlzIHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9mb3JtX3dpbihGT1JNICpmb3JtLCBXSU5ET1cgKndpbikKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9mb3JtX3dpbiglcCwlcCkiKSwgZm9ybSwgd2luKSk7CisKKyAgaWYgKGZvcm0gJiYgKGZvcm0tPnN0YXR1cyAmIF9QT1NURUQpKQorICAgIFJFVFVSTihFX1BPU1RFRCk7CisKKyAgTm9ybWFsaXplX0Zvcm0oZm9ybSktPndpbiA9IHdpbjsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgV0lORE9XICpmb3JtX3dpbihjb25zdCBGT1JNICopCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXRyaWV2ZSB0aGUgd2luZG93IG9mIHRoZSBmb3JtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIHBvaW50ZXIgdG8gdGhlIFdpbmRvdyBvciBzdGRzY3IgaWYgdGhlcmUgaXMgbm9uZS4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK2Zvcm1fd2luKGNvbnN0IEZPUk0gKmZvcm0pCit7CisgIGNvbnN0IEZPUk0gKmY7CisKKyAgVCgoVF9DQUxMRUQoImZvcm1fd2luKCVwKSIpLCBmb3JtKSk7CisKKyAgZiA9IE5vcm1hbGl6ZV9Gb3JtKGZvcm0pOworICByZXR1cm5XaW4oZi0+d2luID8gZi0+d2luIDogc3Rkc2NyKTsKK30KKworLyogZnJtX3dpbi5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mdHlfYWxudW0uYyBiL25jdXJzZXMtNS43L2Zvcm0vZnR5X2FsbnVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkZDI3MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZnR5X2FsbnVtLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIEF1dGhvciA6IEp1ZXJnZW4gUGZlaWZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnR5X2FsbnVtLmMsdiAxLjIxIDIwMDcvMTAvMTMgMTk6MzE6NTIgdG9tIEV4cCAkIikKKworI2RlZmluZSB0aGlzQVJHIGFsbnVtQVJHCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgd2lkdGg7CisgIH0KK3RoaXNBUkc7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgKk1ha2VfVGhpc19UeXBlKHZhX2xpc3QgKmFwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQWxsb2NhdGUgc3RydWN0dXJlIGZvciBhbHBoYW51bWVyaWMgdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitNYWtlX1RoaXNfVHlwZSh2YV9saXN0ICphcCkKK3sKKyAgdGhpc0FSRyAqYXJncCA9IHR5cGVNYWxsb2ModGhpc0FSRywgMSk7CisKKyAgaWYgKGFyZ3ApCisgICAgeworICAgICAgVCgoVF9DUkVBVEUoInRoaXNBUkcgJXAiKSwgYXJncCkpOworICAgICAgYXJncC0+d2lkdGggPSB2YV9hcmcoKmFwLCBpbnQpOworICAgIH0KKworICByZXR1cm4gKCh2b2lkICopYXJncCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgKkNvcHlfVGhpc1R5cGUoY29uc3Qgdm9pZCAqYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgc3RydWN0dXJlIGZvciBhbHBoYW51bWVyaWMgdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlIG9yIE5VTEwgb24gZXJyb3IuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgKgorQ29weV9UaGlzX1R5cGUoY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgY29uc3QgdGhpc0FSRyAqYXAgPSAoY29uc3QgdGhpc0FSRyAqKWFyZ3A7CisgIHRoaXNBUkcgKnJlc3VsdCA9IHR5cGVNYWxsb2ModGhpc0FSRywgMSk7CisKKyAgaWYgKHJlc3VsdCkKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgidGhpc0FSRyAlcCIpLCByZXN1bHQpKTsKKyAgICAgICpyZXN1bHQgPSAqYXA7CisgICAgfQorCisgIHJldHVybiAoKHZvaWQgKilyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIEZyZWVfVGhpc19UeXBlKHZvaWQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBGcmVlIHN0cnVjdHVyZSBmb3IgYWxwaGFudW1lcmljIHR5cGUgYXJndW1lbnQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK0ZyZWVfVGhpc19UeXBlKHZvaWQgKmFyZ3ApCit7CisgIGlmIChhcmdwKQorICAgIGZyZWUoYXJncCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfVGhpc19DaGFyYWN0ZXIoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYywKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayBhIGNoYXJhY3RlciBmb3IgdGhlIGFscGhhbnVtZXJpYyB0eXBlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBjaGFyYWN0ZXIgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gY2hhcmFjdGVyIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfVGhpc19DaGFyYWN0ZXIoaW50IGMsIGNvbnN0IHZvaWQgKmFyZ3AgR0NDX1VOVVNFRCkKK3sKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICBpZiAoaXN3YWxudW0oKHdpbnRfdCkgYykpCisgICAgcmV0dXJuIFRSVUU7CisjZW5kaWYKKyAgcmV0dXJuIChpc2FsbnVtKFVDaGFyKGMpKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfVGhpc19GaWVsZCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICpmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSBidWZmZXIgY29udGVudCB0byBiZSBhIHZhbGlkIGFscGhhbnVtZXJpYyB2YWx1ZQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBmaWVsZCBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBmaWVsZCBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX1RoaXNfRmllbGQoRklFTEQgKmZpZWxkLCBjb25zdCB2b2lkICphcmdwKQoreworICBpbnQgd2lkdGggPSAoKGNvbnN0IHRoaXNBUkcgKilhcmdwKS0+d2lkdGg7CisgIHVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilmaWVsZF9idWZmZXIoZmllbGQsIDApOworICBib29sIHJlc3VsdCA9ICh3aWR0aCA8IDApOworCisgIENoZWNrX0NUWVBFX0ZpZWxkKHJlc3VsdCwgYnAsIHdpZHRoLCBDaGVja19UaGlzX0NoYXJhY3Rlcik7CisgIHJldHVybiAocmVzdWx0KTsKK30KKworc3RhdGljIEZJRUxEVFlQRSB0eXBlVEhJUyA9Cit7CisgIF9IQVNfQVJHUyB8IF9SRVNJREVOVCwKKyAgMSwJCQkJLyogdGhpcyBpcyBtdXRhYmxlLCBzbyB3ZSBjYW4ndCBiZSBjb25zdCAqLworICAoRklFTERUWVBFICopMCwKKyAgKEZJRUxEVFlQRSAqKTAsCisgIE1ha2VfVGhpc19UeXBlLAorICBDb3B5X1RoaXNfVHlwZSwKKyAgRnJlZV9UaGlzX1R5cGUsCisgIENoZWNrX1RoaXNfRmllbGQsCisgIENoZWNrX1RoaXNfQ2hhcmFjdGVyLAorICBOVUxMLAorICBOVUxMCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFKikgVFlQRV9BTE5VTSA9ICZ0eXBlVEhJUzsKKworLyogZnR5X2FsbnVtLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2Z0eV9hbHBoYS5jIGIvbmN1cnNlcy01LjcvZm9ybS9mdHlfYWxwaGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQ5NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mdHlfYWxwaGEuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQXV0aG9yIDogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmdHlfYWxwaGEuYyx2IDEuMjMgMjAwNy8xMC8xMyAxOTozMjowOSB0b20gRXhwICQiKQorCisjZGVmaW5lIHRoaXNBUkcgYWxwaGFBUkcKKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCB3aWR0aDsKKyAgfQordGhpc0FSRzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqTWFrZV9UaGlzX1R5cGUodmFfbGlzdCAqYXApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBBbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yIGFscGhhIHR5cGUgYXJndW1lbnQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGFyZ3VtZW50IHN0cnVjdHVyZSBvciBOVUxMIG9uIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgKgorTWFrZV9UaGlzX1R5cGUodmFfbGlzdCAqYXApCit7CisgIHRoaXNBUkcgKmFyZ3AgPSB0eXBlTWFsbG9jKHRoaXNBUkcsIDEpOworCisgIGlmIChhcmdwKQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJ0aGlzQVJHICVwIiksIGFyZ3ApKTsKKyAgICAgIGFyZ3AtPndpZHRoID0gdmFfYXJnKCphcCwgaW50KTsKKyAgICB9CisKKyAgcmV0dXJuICgodm9pZCAqKWFyZ3ApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpDb3B5X1RoaXNfVHlwZShjb25zdCB2b2lkICogYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgc3RydWN0dXJlIGZvciBhbHBoYSB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitDb3B5X1RoaXNfVHlwZShjb25zdCB2b2lkICphcmdwKQoreworICBjb25zdCB0aGlzQVJHICphcCA9IChjb25zdCB0aGlzQVJHICopYXJncDsKKyAgdGhpc0FSRyAqcmVzdWx0ID0gdHlwZU1hbGxvYyh0aGlzQVJHLCAxKTsKKworICBpZiAocmVzdWx0KQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJ0aGlzQVJHICVwIiksIHJlc3VsdCkpOworICAgICAgKnJlc3VsdCA9ICphcDsKKyAgICB9CisKKyAgcmV0dXJuICgodm9pZCAqKXJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgRnJlZV9UaGlzX1R5cGUodm9pZCAqYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIEZyZWUgc3RydWN0dXJlIGZvciBhbHBoYSB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitGcmVlX1RoaXNfVHlwZSh2b2lkICphcmdwKQoreworICBpZiAoYXJncCkKKyAgICBmcmVlKGFyZ3ApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1RoaXNfQ2hhcmFjdGVyKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGMsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICphcmdwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgYSBjaGFyYWN0ZXIgZm9yIHRoZSBhbHBoYSB0eXBlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBjaGFyYWN0ZXIgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gY2hhcmFjdGVyIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfVGhpc19DaGFyYWN0ZXIoaW50IGMsIGNvbnN0IHZvaWQgKmFyZ3AgR0NDX1VOVVNFRCkKK3sKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICBpZiAoaXN3YWxwaGEoKHdpbnRfdCkgYykpCisgICAgcmV0dXJuIFRSVUU7CisjZW5kaWYKKyAgcmV0dXJuIChpc2FscGhhKFVDaGFyKGMpKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfVGhpc19GaWVsZCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICpmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSBidWZmZXIgY29udGVudCB0byBiZSBhIHZhbGlkIGFscGhhIHZhbHVlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGZpZWxkIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGZpZWxkIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfVGhpc19GaWVsZChGSUVMRCAqZmllbGQsIGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGludCB3aWR0aCA9ICgoY29uc3QgdGhpc0FSRyAqKWFyZ3ApLT53aWR0aDsKKyAgdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKWZpZWxkX2J1ZmZlcihmaWVsZCwgMCk7CisgIGJvb2wgcmVzdWx0ID0gKHdpZHRoIDwgMCk7CisKKyAgQ2hlY2tfQ1RZUEVfRmllbGQocmVzdWx0LCBicCwgd2lkdGgsIENoZWNrX1RoaXNfQ2hhcmFjdGVyKTsKKyAgcmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgRklFTERUWVBFIHR5cGVUSElTID0KK3sKKyAgX0hBU19BUkdTIHwgX1JFU0lERU5ULAorICAxLAkJCQkvKiB0aGlzIGlzIG11dGFibGUsIHNvIHdlIGNhbid0IGJlIGNvbnN0ICovCisgIChGSUVMRFRZUEUgKikwLAorICAoRklFTERUWVBFICopMCwKKyAgTWFrZV9UaGlzX1R5cGUsCisgIENvcHlfVGhpc19UeXBlLAorICBGcmVlX1RoaXNfVHlwZSwKKyAgQ2hlY2tfVGhpc19GaWVsZCwKKyAgQ2hlY2tfVGhpc19DaGFyYWN0ZXIsCisgIE5VTEwsCisgIE5VTEwKK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUqKSBUWVBFX0FMUEhBID0gJnR5cGVUSElTOworCisvKiBmdHlfYWxwaGEuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZnR5X2VudW0uYyBiL25jdXJzZXMtNS43L2Zvcm0vZnR5X2VudW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZhMDgwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9mdHlfZW51bS5jCkBAIC0wLDAgKzEsMzM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBBdXRob3IgOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZ0eV9lbnVtLmMsdiAxLjIyIDIwMDcvMTAvMTMgMTk6MzI6MjYgdG9tIEV4cCAkIikKKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGNoYXIgKiprd2RzOworICAgIGludCBjb3VudDsKKyAgICBib29sIGNoZWNrY2FzZTsKKyAgICBib29sIGNoZWNrdW5pcXVlOworICB9CitlbnVtQVJHOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgKk1ha2VfRW51bV9UeXBlKCB2YV9saXN0ICogYXAgKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQWxsb2NhdGUgc3RydWN0dXJlIGZvciBlbnVtZXJhdGlvbiB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK01ha2VfRW51bV9UeXBlKHZhX2xpc3QgKmFwKQoreworICBlbnVtQVJHICphcmdwID0gdHlwZU1hbGxvYyhlbnVtQVJHLCAxKTsKKworICBpZiAoYXJncCkKKyAgICB7CisgICAgICBpbnQgY250ID0gMDsKKyAgICAgIGNoYXIgKiprcCA9IChjaGFyICoqKTA7CisgICAgICBpbnQgY2Nhc2UsIGN1bmlxdWU7CisKKyAgICAgIFQoKFRfQ1JFQVRFKCJlbnVtQVJHICVwIiksIGFyZ3ApKTsKKyAgICAgIGFyZ3AtPmt3ZHMgPSB2YV9hcmcoKmFwLCBjaGFyICoqKTsKKyAgICAgIGNjYXNlID0gdmFfYXJnKCphcCwgaW50KTsKKyAgICAgIGN1bmlxdWUgPSB2YV9hcmcoKmFwLCBpbnQpOworCisgICAgICBhcmdwLT5jaGVja2Nhc2UgPSBjY2FzZSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgIGFyZ3AtPmNoZWNrdW5pcXVlID0gY3VuaXF1ZSA/IFRSVUUgOiBGQUxTRTsKKworICAgICAga3AgPSBhcmdwLT5rd2RzOworICAgICAgd2hpbGUgKGtwICYmICgqa3ArKykpCisJY250Kys7CisgICAgICBhcmdwLT5jb3VudCA9IGNudDsKKyAgICB9CisgIHJldHVybiAodm9pZCAqKWFyZ3A7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqQ29weV9FbnVtX1R5cGUoIGNvbnN0IHZvaWQgKiBhcmdwICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgc3RydWN0dXJlIGZvciBlbnVtZXJhdGlvbiB0eXBlIGFyZ3VtZW50LiAgCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGFyZ3VtZW50IHN0cnVjdHVyZSBvciBOVUxMIG9uIGVycm9yLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK0NvcHlfRW51bV9UeXBlKGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGVudW1BUkcgKnJlc3VsdCA9IChlbnVtQVJHICopMDsKKworICBpZiAoYXJncCkKKyAgICB7CisgICAgICBjb25zdCBlbnVtQVJHICphcCA9IChjb25zdCBlbnVtQVJHICopYXJncDsKKworICAgICAgcmVzdWx0ID0gdHlwZU1hbGxvYyhlbnVtQVJHLCAxKTsKKworICAgICAgaWYgKHJlc3VsdCkKKwl7CisJICBUKChUX0NSRUFURSgiZW51bUFSRyAlcCIpLCByZXN1bHQpKTsKKwkgICpyZXN1bHQgPSAqYXA7CisJfQorICAgIH0KKyAgcmV0dXJuICh2b2lkICopcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgRnJlZV9FbnVtX1R5cGUoIHZvaWQgKiBhcmdwICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEZyZWUgc3RydWN0dXJlIGZvciBlbnVtZXJhdGlvbiB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitGcmVlX0VudW1fVHlwZSh2b2lkICphcmdwKQoreworICBpZiAoYXJncCkKKyAgICBmcmVlKGFyZ3ApOworfQorCisjZGVmaW5lIFNLSVBfU1BBQ0UoeCkgd2hpbGUoKCgqKHgpKSE9J1wwJykgJiYgKGlzX2JsYW5rKCooeCkpKSkgKHgpKysKKyNkZWZpbmUgTk9NQVRDSCAwCisjZGVmaW5lIFBBUlRJQUwgMQorI2RlZmluZSBFWEFDVCAgIDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBpbnQgQ29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyICogcywgIAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWYsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAgY2Nhc2UgKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIHRleHQgaW4gJ2J1ZicgbWF0Y2hlcyB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHRleHQgaW4gJ3MnLCBhdCBsZWFzdCBwYXJ0aWFsLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTk9NQVRDSCAgIC0gYnVmZmVyIGRvZXNuJ3QgbWF0Y2gKK3wgICAgICAgICAgICAgICAgICAgIFBBUlRJQUwgICAtIGJ1ZmZlciBtYXRjaGVzIHBhcnRpYWxseQorfCAgICAgICAgICAgICAgICAgICAgRVhBQ1QgICAgIC0gYnVmZmVyIG1hdGNoZXMgZXhhY3RseQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK0NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCWJvb2wgY2Nhc2UpCit7CisgIFNLSVBfU1BBQ0UoYnVmKTsJCS8qIFNraXAgbGVhZGluZyBzcGFjZXMgaW4gYm90aCB0ZXh0cyAqLworICBTS0lQX1NQQUNFKHMpOworCisgIGlmICgqYnVmID09ICdcMCcpCisgICAgeworICAgICAgcmV0dXJuICgoKCpzKSAhPSAnXDAnKSA/IE5PTUFUQ0ggOiBFWEFDVCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGNjYXNlKQorCXsKKwkgIHdoaWxlICgqcysrID09ICpidWYpCisJICAgIHsKKwkgICAgICBpZiAoKmJ1ZisrID09ICdcMCcpCisJCXJldHVybiBFWEFDVDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICB3aGlsZSAodG91cHBlcigqcysrKSA9PSB0b3VwcGVyKCpidWYpKQorCSAgICB7CisJICAgICAgaWYgKCpidWYrKyA9PSAnXDAnKQorCQlyZXR1cm4gRVhBQ1Q7CisJICAgIH0KKwl9CisgICAgfQorICAvKiBBdCB0aGlzIGxvY2F0aW9uIGJ1ZiBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciB3aGVyZSBpdCBubyBsb25nZXIKKyAgICAgbWF0Y2hlcyB3aXRoIHMuIFNvIGlmIG9ubHkgYmxhbmtzIGFyZSBmb2xsb3dpbmcsIHdlIGhhdmUgYSBwYXJ0aWFsCisgICAgIG1hdGNoIG90aGVyd2lzZSB0aGVyZSBpcyBubyBtYXRjaCAqLworICBTS0lQX1NQQUNFKGJ1Zik7CisgIGlmICgqYnVmKQorICAgIHJldHVybiBOT01BVENIOworCisgIC8qIElmIGl0IGhhcHBlbnMgdGhhdCB0aGUgcmVmZXJlbmNlIGJ1ZmZlciBpcyBhdCBpdHMgZW5kLCB0aGUgcGFydGlhbAorICAgICBtYXRjaCBpcyBhY3R1YWxseSBhbiBleGFjdCBtYXRjaC4gKi8KKyAgcmV0dXJuICgoc1stMV0gIT0gJ1wwJykgPyBQQVJUSUFMIDogRVhBQ1QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfRW51bV9GaWVsZCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICAqIGFyZ3ApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSBidWZmZXIgY29udGVudCB0byBiZSBhIHZhbGlkIGVudW1lcmF0aW9uIHZhbHVlCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGZpZWxkIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGZpZWxkIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfRW51bV9GaWVsZChGSUVMRCAqZmllbGQsIGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGNoYXIgKiprd2RzID0gKChjb25zdCBlbnVtQVJHICopYXJncCktPmt3ZHM7CisgIGJvb2wgY2Nhc2UgPSAoKGNvbnN0IGVudW1BUkcgKilhcmdwKS0+Y2hlY2tjYXNlOworICBib29sIHVuaXF1ZSA9ICgoY29uc3QgZW51bUFSRyAqKWFyZ3ApLT5jaGVja3VuaXF1ZTsKKyAgdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKWZpZWxkX2J1ZmZlcihmaWVsZCwgMCk7CisgIGNoYXIgKnMsICp0LCAqcDsKKyAgaW50IHJlczsKKworICB3aGlsZSAoa3dkcyAmJiAocyA9ICgqa3dkcysrKSkpCisgICAgeworICAgICAgaWYgKChyZXMgPSBDb21wYXJlKCh1bnNpZ25lZCBjaGFyICopcywgYnAsIGNjYXNlKSkgIT0gTk9NQVRDSCkKKwl7CisJICBwID0gdCA9IHM7CQkvKiB0IGlzIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCAqLworCSAgaWYgKCh1bmlxdWUgJiYgcmVzICE9IEVYQUNUKSkKKwkgICAgeworCSAgICAgIHdoaWxlIChrd2RzICYmIChwID0gKmt3ZHMrKykpCisJCXsKKwkJICBpZiAoKHJlcyA9IENvbXBhcmUoKHVuc2lnbmVkIGNoYXIgKilwLCBicCwgY2Nhc2UpKSAhPSBOT01BVENIKQorCQkgICAgeworCQkgICAgICBpZiAocmVzID09IEVYQUNUKQorCQkJeworCQkJICB0ID0gcDsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXQgPSAoY2hhciAqKTA7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgaWYgKHQpCisJICAgIHsKKwkgICAgICBzZXRfZmllbGRfYnVmZmVyKGZpZWxkLCAwLCB0KTsKKwkgICAgICByZXR1cm4gVFJVRTsKKwkgICAgfQorCSAgaWYgKCFwKQorCSAgICBicmVhazsKKwl9CisgICAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkdW1teVtdID0KK3soY2hhciAqKTB9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgTmV4dF9FbnVtKEZJRUxEICogZmllbGQsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIGFyZ3ApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayBmb3IgdGhlIG5leHQgZW51bWVyYXRpb24gdmFsdWUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gbmV4dCB2YWx1ZSBmb3VuZCBhbmQgbG9hZGVkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIG5vIG5leHQgdmFsdWUgbG9hZGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK05leHRfRW51bShGSUVMRCAqZmllbGQsIGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGNvbnN0IGVudW1BUkcgKmFyZ3MgPSAoY29uc3QgZW51bUFSRyAqKWFyZ3A7CisgIGNoYXIgKiprd2RzID0gYXJncy0+a3dkczsKKyAgYm9vbCBjY2FzZSA9IGFyZ3MtPmNoZWNrY2FzZTsKKyAgaW50IGNudCA9IGFyZ3MtPmNvdW50OworICB1bnNpZ25lZCBjaGFyICpicCA9ICh1bnNpZ25lZCBjaGFyICopZmllbGRfYnVmZmVyKGZpZWxkLCAwKTsKKworICBpZiAoa3dkcykKKyAgICB7CisgICAgICB3aGlsZSAoY250LS0pCisJeworCSAgaWYgKENvbXBhcmUoKHVuc2lnbmVkIGNoYXIgKikoKmt3ZHMrKyksIGJwLCBjY2FzZSkgPT0gRVhBQ1QpCisJICAgIGJyZWFrOworCX0KKyAgICAgIGlmIChjbnQgPD0gMCkKKwlrd2RzID0gYXJncy0+a3dkczsKKyAgICAgIGlmICgoY250ID49IDApIHx8IChDb21wYXJlKChjb25zdCB1bnNpZ25lZCBjaGFyICopZHVtbXksIGJwLCBjY2FzZSkgPT0gRVhBQ1QpKQorCXsKKwkgIHNldF9maWVsZF9idWZmZXIoZmllbGQsIDAsICprd2RzKTsKKwkgIHJldHVybiBUUlVFOworCX0KKyAgICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIFByZXZpb3VzX0VudW0oCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogYXJncCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrIGZvciB0aGUgcHJldmlvdXMgZW51bWVyYXRpb24gdmFsdWUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gcHJldmlvdXMgdmFsdWUgZm91bmQgYW5kIGxvYWRlZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBubyBwcmV2aW91cyB2YWx1ZSBsb2FkZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorUHJldmlvdXNfRW51bShGSUVMRCAqZmllbGQsIGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGNvbnN0IGVudW1BUkcgKmFyZ3MgPSAoY29uc3QgZW51bUFSRyAqKWFyZ3A7CisgIGludCBjbnQgPSBhcmdzLT5jb3VudDsKKyAgY2hhciAqKmt3ZHMgPSAmYXJncy0+a3dkc1tjbnQgLSAxXTsKKyAgYm9vbCBjY2FzZSA9IGFyZ3MtPmNoZWNrY2FzZTsKKyAgdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKWZpZWxkX2J1ZmZlcihmaWVsZCwgMCk7CisKKyAgaWYgKGt3ZHMpCisgICAgeworICAgICAgd2hpbGUgKGNudC0tKQorCXsKKwkgIGlmIChDb21wYXJlKCh1bnNpZ25lZCBjaGFyICopKCprd2RzLS0pLCBicCwgY2Nhc2UpID09IEVYQUNUKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGlmIChjbnQgPD0gMCkKKwlrd2RzID0gJmFyZ3MtPmt3ZHNbYXJncy0+Y291bnQgLSAxXTsKKworICAgICAgaWYgKChjbnQgPj0gMCkgfHwgKENvbXBhcmUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkdW1teSwgYnAsIGNjYXNlKSA9PSBFWEFDVCkpCisJeworCSAgc2V0X2ZpZWxkX2J1ZmZlcihmaWVsZCwgMCwgKmt3ZHMpOworCSAgcmV0dXJuIFRSVUU7CisJfQorICAgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgRklFTERUWVBFIHR5cGVFTlVNID0KK3sKKyAgX0hBU19BUkdTIHwgX0hBU19DSE9JQ0UgfCBfUkVTSURFTlQsCisgIDEsCQkJCS8qIHRoaXMgaXMgbXV0YWJsZSwgc28gd2UgY2FuJ3QgYmUgY29uc3QgKi8KKyAgKEZJRUxEVFlQRSAqKTAsCisgIChGSUVMRFRZUEUgKikwLAorICBNYWtlX0VudW1fVHlwZSwKKyAgQ29weV9FbnVtX1R5cGUsCisgIEZyZWVfRW51bV9UeXBlLAorICBDaGVja19FbnVtX0ZpZWxkLAorICBOVUxMLAorICBOZXh0X0VudW0sCisgIFByZXZpb3VzX0VudW0KK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUgKikKK1RZUEVfRU5VTSA9ICZ0eXBlRU5VTTsKKworLyogZnR5X2VudW0uYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZnR5X2ludC5jIGIvbmN1cnNlcy01LjcvZm9ybS9mdHlfaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1MzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vZnR5X2ludC5jCkBAIC0wLDAgKzEsMjQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBBdXRob3IgOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZ0eV9pbnQuYyx2IDEuMjIgMjAwNy8xMC8xMyAxOTozMjo0MCB0b20gRXhwICQiKQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNkZWZpbmUgaXNEaWdpdChjKSAoaXN3ZGlnaXQoKHdpbnRfdCkoYykpIHx8IGlzZGlnaXQoVUNoYXIoYykpKQorI2Vsc2UKKyNkZWZpbmUgaXNEaWdpdChjKSBpc2RpZ2l0KFVDaGFyKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgdGhpc0FSRyBpbnRlZ2VyQVJHCisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICBpbnQgcHJlY2lzaW9uOworICAgIGxvbmcgbG93OworICAgIGxvbmcgaGlnaDsKKyAgfQordGhpc0FSRzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpNYWtlX1RoaXNfVHlwZSggdmFfbGlzdCAqIGFwICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgaW50ZWdlciB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK01ha2VfVGhpc19UeXBlKHZhX2xpc3QgKmFwKQoreworICB0aGlzQVJHICphcmdwID0gdHlwZU1hbGxvYyh0aGlzQVJHLCAxKTsKKworICBpZiAoYXJncCkKKyAgICB7CisgICAgICBUKChUX0NSRUFURSgidGhpc0FSRyAlcCIpLCBhcmdwKSk7CisgICAgICBhcmdwLT5wcmVjaXNpb24gPSB2YV9hcmcoKmFwLCBpbnQpOworICAgICAgYXJncC0+bG93ID0gdmFfYXJnKCphcCwgbG9uZyk7CisgICAgICBhcmdwLT5oaWdoID0gdmFfYXJnKCphcCwgbG9uZyk7CisgICAgfQorICByZXR1cm4gKHZvaWQgKilhcmdwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgKkNvcHlfVGhpc19UeXBlKGNvbnN0IHZvaWQgKiBhcmdwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ29weSBzdHJ1Y3R1cmUgZm9yIGludGVnZXIgdHlwZSBhcmd1bWVudC4gIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitDb3B5X1RoaXNfVHlwZShjb25zdCB2b2lkICphcmdwKQoreworICBjb25zdCB0aGlzQVJHICphcCA9IChjb25zdCB0aGlzQVJHICopYXJncDsKKyAgdGhpc0FSRyAqcmVzdWx0ID0gKHRoaXNBUkcgKikgMDsKKworICBpZiAoYXJncCkKKyAgICB7CisgICAgICByZXN1bHQgPSB0eXBlTWFsbG9jKHRoaXNBUkcsIDEpOworICAgICAgaWYgKHJlc3VsdCkKKwl7CisJICBUKChUX0NSRUFURSgidGhpc0FSRyAlcCIpLCByZXN1bHQpKTsKKwkgICpyZXN1bHQgPSAqYXA7CisJfQorICAgIH0KKyAgcmV0dXJuICh2b2lkICopcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgRnJlZV9UaGlzX1R5cGUodm9pZCAqIGFyZ3ApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBGcmVlIHN0cnVjdHVyZSBmb3IgaW50ZWdlciB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitGcmVlX1RoaXNfVHlwZSh2b2lkICphcmdwKQoreworICBpZiAoYXJncCkKKyAgICBmcmVlKGFyZ3ApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfVGhpc19GaWVsZCgKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIGFyZ3ApCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSBidWZmZXIgY29udGVudCB0byBiZSBhIHZhbGlkIGludGVnZXIgdmFsdWUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gZmllbGQgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gZmllbGQgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19UaGlzX0ZpZWxkKEZJRUxEICpmaWVsZCwgY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgY29uc3QgdGhpc0FSRyAqYXJnaSA9IChjb25zdCB0aGlzQVJHICopYXJncDsKKyAgbG9uZyBsb3cgPSBhcmdpLT5sb3c7CisgIGxvbmcgaGlnaCA9IGFyZ2ktPmhpZ2g7CisgIGludCBwcmVjID0gYXJnaS0+cHJlY2lzaW9uOworICB1bnNpZ25lZCBjaGFyICpicCA9ICh1bnNpZ25lZCBjaGFyICopZmllbGRfYnVmZmVyKGZpZWxkLCAwKTsKKyAgY2hhciAqcyA9IChjaGFyICopYnA7CisgIGxvbmcgdmFsOworICBjaGFyIGJ1ZlsxMDBdOworICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgIHdoaWxlICgqYnAgJiYgKmJwID09ICcgJykKKyAgICBicCsrOworICBpZiAoKmJwKQorICAgIHsKKyAgICAgIGlmICgqYnAgPT0gJy0nKQorCWJwKys7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyAgICAgIGlmICgqYnApCisJeworCSAgYm9vbCBibGFuayA9IEZBTFNFOworCSAgaW50IGxlbjsKKwkgIGludCBuOworCSAgd2NoYXJfdCAqbGlzdCA9IF9uY19XaWRlbl9TdHJpbmcoKGNoYXIgKilicCwgJmxlbik7CisKKwkgIGlmIChsaXN0ICE9IDApCisJICAgIHsKKwkgICAgICByZXN1bHQgPSBUUlVFOworCSAgICAgIGZvciAobiA9IDA7IG4gPCBsZW47ICsrbikKKwkJeworCQkgIGlmIChibGFuaykKKwkJICAgIHsKKwkJICAgICAgaWYgKGxpc3Rbbl0gIT0gJyAnKQorCQkJeworCQkJICByZXN1bHQgPSBGQUxTRTsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCSAgZWxzZSBpZiAobGlzdFtuXSA9PSAnICcpCisJCSAgICB7CisJCSAgICAgIGJsYW5rID0gVFJVRTsKKwkJICAgIH0KKwkJICBlbHNlIGlmICghaXNEaWdpdChsaXN0W25dKSkKKwkJICAgIHsKKwkJICAgICAgcmVzdWx0ID0gRkFMU0U7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQl9CisJICAgICAgZnJlZShsaXN0KTsKKwkgICAgfQorCX0KKyNlbHNlCisgICAgICB3aGlsZSAoKmJwKQorCXsKKwkgIGlmICghaXNkaWdpdChVQ2hhcigqYnApKSkKKwkgICAgYnJlYWs7CisJICBicCsrOworCX0KKyAgICAgIHdoaWxlICgqYnAgJiYgKmJwID09ICcgJykKKwlicCsrOworICAgICAgcmVzdWx0ID0gKCpicCA9PSAnXDAnKTsKKyNlbmRpZgorICAgICAgaWYgKHJlc3VsdCkKKwl7CisJICB2YWwgPSBhdG9sKHMpOworCSAgaWYgKGxvdyA8IGhpZ2gpCisJICAgIHsKKwkgICAgICBpZiAodmFsIDwgbG93IHx8IHZhbCA+IGhpZ2gpCisJCXJlc3VsdCA9IEZBTFNFOworCSAgICB9CisJICBpZiAocmVzdWx0KQorCSAgICB7CisJICAgICAgc3ByaW50ZihidWYsICIlLipsZCIsIChwcmVjID4gMCA/IHByZWMgOiAwKSwgdmFsKTsKKwkgICAgICBzZXRfZmllbGRfYnVmZmVyKGZpZWxkLCAwLCBidWYpOworCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIChyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0gIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIGJvb2wgQ2hlY2tfVGhpc19DaGFyYWN0ZXIoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYywKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiBhcmdwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgYSBjaGFyYWN0ZXIgZm9yIHRoZSBpbnRlZ2VyIHR5cGUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGNoYXJhY3RlciBpcyB2YWxpZAorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgLSBjaGFyYWN0ZXIgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19UaGlzX0NoYXJhY3RlcihpbnQgYywgY29uc3Qgdm9pZCAqYXJncCBHQ0NfVU5VU0VEKQoreworICByZXR1cm4gKChpc0RpZ2l0KFVDaGFyKGMpKSB8fCAoYyA9PSAnLScpKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKK3N0YXRpYyBGSUVMRFRZUEUgdHlwZVRISVMgPQoreworICBfSEFTX0FSR1MgfCBfUkVTSURFTlQsCisgIDEsCQkJCS8qIHRoaXMgaXMgbXV0YWJsZSwgc28gd2UgY2FuJ3QgYmUgY29uc3QgKi8KKyAgKEZJRUxEVFlQRSAqKTAsCisgIChGSUVMRFRZUEUgKikwLAorICBNYWtlX1RoaXNfVHlwZSwKKyAgQ29weV9UaGlzX1R5cGUsCisgIEZyZWVfVGhpc19UeXBlLAorICBDaGVja19UaGlzX0ZpZWxkLAorICBDaGVja19UaGlzX0NoYXJhY3RlciwKKyAgTlVMTCwKKyAgTlVMTAorfTsKKworTkNVUlNFU19FWFBPUlRfVkFSKEZJRUxEVFlQRSopIFRZUEVfSU5URUdFUiA9ICZ0eXBlVEhJUzsKKworLyogZnR5X2ludC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvZm9ybS9mdHlfaXB2NC5jIGIvbmN1cnNlcy01LjcvZm9ybS9mdHlfaXB2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMWEyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2Z0eV9pcHY0LmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIEF1dGhvciA6IFBlciBGb3JlYnksIHBlcmZAZWZkLmx0aC5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogZnR5X2lwdjQuYyx2IDEuOCAyMDA2LzEyLzAyIDE5OjMzOjAyIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBDaGVja19JUFY0X0ZpZWxkKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiBhcmdwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgVmFsaWRhdGUgYnVmZmVyIGNvbnRlbnQgdG8gYmUgYSB2YWxpZCBJUCBudW1iZXIgKFZlci4gNCkKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gZmllbGQgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gZmllbGQgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19JUFY0X0ZpZWxkKEZJRUxEICpmaWVsZCwgY29uc3Qgdm9pZCAqYXJncCBHQ0NfVU5VU0VEKQoreworICBjaGFyICpicCA9IGZpZWxkX2J1ZmZlcihmaWVsZCwgMCk7CisgIGludCBudW0gPSAwLCBsZW47CisgIHVuc2lnbmVkIGludCBkMSwgZDIsIGQzLCBkNDsKKworICBpZiAoaXNkaWdpdChVQ2hhcigqYnApKSkJLyogTXVzdCBzdGFydCB3aXRoIGRpZ2l0ICovCisgICAgeworICAgICAgbnVtID0gc3NjYW5mKGJwLCAiJXUuJXUuJXUuJXUlbiIsICZkMSwgJmQyLCAmZDMsICZkNCwgJmxlbik7CisgICAgICBpZiAobnVtID09IDQpCisJeworCSAgYnAgKz0gbGVuOwkJLyogTWFrZSBicCBwb2ludCB0byB3aGF0IHNzY2FuZigpIGxlZnQgKi8KKwkgIHdoaWxlIChpc3NwYWNlKFVDaGFyKCpicCkpKQorCSAgICBicCsrOwkJLyogQWxsb3cgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCX0KKyAgICB9CisgIHJldHVybiAoKG51bSAhPSA0IHx8ICpicCB8fCBkMSA+IDI1NSB8fCBkMiA+IDI1NQorCSAgIHx8IGQzID4gMjU1IHx8IGQ0ID4gMjU1KSA/IEZBTFNFIDogVFJVRSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBDaGVja19JUFY0X0NoYXJhY3RlcigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjLCAKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmFyZ3AgKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2hlY2sgYSBjaGFyYWN0ZXIgZm9yIHVuc2lnbmVkIHR5cGUgb3IgcGVyaW9kLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVFJVRSAgLSBjaGFyYWN0ZXIgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gY2hhcmFjdGVyIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfSVBWNF9DaGFyYWN0ZXIoaW50IGMsIGNvbnN0IHZvaWQgKmFyZ3AgR0NDX1VOVVNFRCkKK3sKKyAgcmV0dXJuICgoaXNkaWdpdChVQ2hhcihjKSkgfHwgKGMgPT0gJy4nKSkgPyBUUlVFIDogRkFMU0UpOworfQorCitzdGF0aWMgRklFTERUWVBFIHR5cGVJUFY0ID0KK3sKKyAgX1JFU0lERU5ULAorICAxLAkJCQkvKiB0aGlzIGlzIG11dGFibGUsIHNvIHdlIGNhbid0IGJlIGNvbnN0ICovCisgIChGSUVMRFRZUEUgKikwLAorICAoRklFTERUWVBFICopMCwKKyAgTlVMTCwKKyAgTlVMTCwKKyAgTlVMTCwKKyAgQ2hlY2tfSVBWNF9GaWVsZCwKKyAgQ2hlY2tfSVBWNF9DaGFyYWN0ZXIsCisgIE5VTEwsCisgIE5VTEwKK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUqKSBUWVBFX0lQVjQgPSAmdHlwZUlQVjQ7CisKKy8qIGZ0eV9pcHY0LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2Z0eV9udW0uYyBiL25jdXJzZXMtNS43L2Zvcm0vZnR5X251bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NGU4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2Z0eV9udW0uYwpAQCAtMCwwICsxLDI5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQXV0aG9yIDogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZm9ybS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBmdHlfbnVtLmMsdiAxLjI1IDIwMDcvMTAvMTMgMTk6MzI6NTQgdG9tIEV4cCAkIikKKworI2lmIEhBVkVfTE9DQUxFX0gKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9MT0NBTEVfSAorI2RlZmluZSBpc0RlY2ltYWxQb2ludChjKSAoKGMpID09ICgoTCAmJiBMLT5kZWNpbWFsX3BvaW50KSA/ICooTC0+ZGVjaW1hbF9wb2ludCkgOiAnLicpKQorI2Vsc2UKKyNkZWZpbmUgaXNEZWNpbWFsUG9pbnQoYykgKChjKSA9PSAnLicpCisjZW5kaWYKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIGlzRGlnaXQoYykgKGlzd2RpZ2l0KCh3aW50X3QpKGMpKSB8fCBpc2RpZ2l0KFVDaGFyKGMpKSkKKyNlbHNlCisjZGVmaW5lIGlzRGlnaXQoYykgaXNkaWdpdChVQ2hhcihjKSkKKyNlbmRpZgorCisjZGVmaW5lIHRoaXNBUkcgbnVtZXJpY0FSRworCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgaW50IHByZWNpc2lvbjsKKyAgICBkb3VibGUgbG93OworICAgIGRvdWJsZSBoaWdoOworICAgIHN0cnVjdCBsY29udiAqTDsKKyAgfQordGhpc0FSRzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCAqTWFrZV9UaGlzX1R5cGUodmFfbGlzdCAqIGFwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQWxsb2NhdGUgc3RydWN0dXJlIGZvciBudW1lcmljIHR5cGUgYXJndW1lbnQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGFyZ3VtZW50IHN0cnVjdHVyZSBvciBOVUxMIG9uIGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgKgorTWFrZV9UaGlzX1R5cGUodmFfbGlzdCAqYXApCit7CisgIHRoaXNBUkcgKmFyZ24gPSB0eXBlTWFsbG9jKHRoaXNBUkcsIDEpOworCisgIGlmIChhcmduKQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJ0aGlzQVJHICVwIiksIGFyZ24pKTsKKyAgICAgIGFyZ24tPnByZWNpc2lvbiA9IHZhX2FyZygqYXAsIGludCk7CisgICAgICBhcmduLT5sb3cgPSB2YV9hcmcoKmFwLCBkb3VibGUpOworICAgICAgYXJnbi0+aGlnaCA9IHZhX2FyZygqYXAsIGRvdWJsZSk7CisKKyNpZiBIQVZFX0xPQ0FMRV9ICisgICAgICBhcmduLT5MID0gbG9jYWxlY29udigpOworI2Vsc2UKKyAgICAgIGFyZ24tPkwgPSBOVUxMOworI2VuZGlmCisgICAgfQorICByZXR1cm4gKHZvaWQgKilhcmduOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpDb3B5X1RoaXNfVHlwZShjb25zdCB2b2lkICogYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgc3RydWN0dXJlIGZvciBudW1lcmljIHR5cGUgYXJndW1lbnQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBQb2ludGVyIHRvIGFyZ3VtZW50IHN0cnVjdHVyZSBvciBOVUxMIG9uIGVycm9yLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK0NvcHlfVGhpc19UeXBlKGNvbnN0IHZvaWQgKmFyZ3ApCit7CisgIGNvbnN0IHRoaXNBUkcgKmFwID0gKGNvbnN0IHRoaXNBUkcgKilhcmdwOworICB0aGlzQVJHICpyZXN1bHQgPSAodGhpc0FSRyAqKSAwOworCisgIGlmIChhcmdwKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IHR5cGVNYWxsb2ModGhpc0FSRywgMSk7CisgICAgICBpZiAocmVzdWx0KQorCXsKKwkgIFQoKFRfQ1JFQVRFKCJ0aGlzQVJHICVwIiksIHJlc3VsdCkpOworCSAgKnJlc3VsdCA9ICphcDsKKwl9CisgICAgfQorICByZXR1cm4gKHZvaWQgKilyZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJuZm9ybQorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgRnJlZV9UaGlzX1R5cGUodm9pZCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBGcmVlIHN0cnVjdHVyZSBmb3IgbnVtZXJpYyB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitGcmVlX1RoaXNfVHlwZSh2b2lkICphcmdwKQoreworICBpZiAoYXJncCkKKyAgICBmcmVlKGFyZ3ApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1RoaXNfRmllbGQoRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBWYWxpZGF0ZSBidWZmZXIgY29udGVudCB0byBiZSBhIHZhbGlkIG51bWVyaWMgdmFsdWUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gZmllbGQgaXMgdmFsaWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFIC0gZmllbGQgaXMgaW52YWxpZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBib29sCitDaGVja19UaGlzX0ZpZWxkKEZJRUxEICpmaWVsZCwgY29uc3Qgdm9pZCAqYXJncCkKK3sKKyAgY29uc3QgdGhpc0FSRyAqYXJnbiA9IChjb25zdCB0aGlzQVJHICopYXJncDsKKyAgZG91YmxlIGxvdyA9IGFyZ24tPmxvdzsKKyAgZG91YmxlIGhpZ2ggPSBhcmduLT5oaWdoOworICBpbnQgcHJlYyA9IGFyZ24tPnByZWNpc2lvbjsKKyAgdW5zaWduZWQgY2hhciAqYnAgPSAodW5zaWduZWQgY2hhciAqKWZpZWxkX2J1ZmZlcihmaWVsZCwgMCk7CisgIGNoYXIgKnMgPSAoY2hhciAqKWJwOworICBkb3VibGUgdmFsID0gMC4wOworICBzdHJ1Y3QgbGNvbnYgKkwgPSBhcmduLT5MOworICBjaGFyIGJ1Zls2NF07CisgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgd2hpbGUgKCpicCAmJiAqYnAgPT0gJyAnKQorICAgIGJwKys7CisgIGlmICgqYnApCisgICAgeworICAgICAgaWYgKCpicCA9PSAnLScgfHwgKmJwID09ICcrJykKKwlicCsrOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgICBpZiAoKmJwKQorCXsKKwkgIGJvb2wgYmxhbmsgPSBGQUxTRTsKKwkgIGludCBzdGF0ZSA9IDA7CisJICBpbnQgbGVuOworCSAgaW50IG47CisJICB3Y2hhcl90ICpsaXN0ID0gX25jX1dpZGVuX1N0cmluZygoY2hhciAqKWJwLCAmbGVuKTsKKworCSAgaWYgKGxpc3QgIT0gMCkKKwkgICAgeworCSAgICAgIHJlc3VsdCA9IFRSVUU7CisJICAgICAgZm9yIChuID0gMDsgbiA8IGxlbjsgKytuKQorCQl7CisJCSAgaWYgKGJsYW5rKQorCQkgICAgeworCQkgICAgICBpZiAobGlzdFtuXSAhPSAnICcpCisJCQl7CisJCQkgIHJlc3VsdCA9IEZBTFNFOworCQkJICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICBlbHNlIGlmIChsaXN0W25dID09ICcgJykKKwkJICAgIHsKKwkJICAgICAgYmxhbmsgPSBUUlVFOworCQkgICAgfQorCQkgIGVsc2UgaWYgKGlzRGVjaW1hbFBvaW50KGxpc3Rbbl0pKQorCQkgICAgeworCQkgICAgICBpZiAoKytzdGF0ZSA+IDEpCisJCQl7CisJCQkgIHJlc3VsdCA9IEZBTFNFOworCQkJICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICBlbHNlIGlmICghaXNEaWdpdChsaXN0W25dKSkKKwkJICAgIHsKKwkJICAgICAgcmVzdWx0ID0gRkFMU0U7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQl9CisJICAgICAgZnJlZShsaXN0KTsKKwkgICAgfQorCX0KKyNlbHNlCisgICAgICB3aGlsZSAoKmJwKQorCXsKKwkgIGlmICghaXNkaWdpdChVQ2hhcigqYnApKSkKKwkgICAgYnJlYWs7CisJICBicCsrOworCX0KKyAgICAgIGlmIChpc0RlY2ltYWxQb2ludCgqYnApKQorCXsKKwkgIGJwKys7CisJICB3aGlsZSAoKmJwKQorCSAgICB7CisJICAgICAgaWYgKCFpc2RpZ2l0KFVDaGFyKCpicCkpKQorCQlicmVhazsKKwkgICAgICBicCsrOworCSAgICB9CisJfQorICAgICAgd2hpbGUgKCpicCAmJiAqYnAgPT0gJyAnKQorCWJwKys7CisgICAgICByZXN1bHQgPSAoKmJwID09ICdcMCcpOworI2VuZGlmCisgICAgICBpZiAocmVzdWx0KQorCXsKKwkgIHZhbCA9IGF0b2Yocyk7CisJICBpZiAobG93IDwgaGlnaCkKKwkgICAgeworCSAgICAgIGlmICh2YWwgPCBsb3cgfHwgdmFsID4gaGlnaCkKKwkJcmVzdWx0ID0gRkFMU0U7CisJICAgIH0KKwkgIGlmIChyZXN1bHQpCisJICAgIHsKKwkgICAgICBzcHJpbnRmKGJ1ZiwgIiUuKmYiLCAocHJlYyA+IDAgPyBwcmVjIDogMCksIHZhbCk7CisJICAgICAgc2V0X2ZpZWxkX2J1ZmZlcihmaWVsZCwgMCwgYnVmKTsKKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiAocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgYm9vbCBDaGVja19UaGlzX0NoYXJhY3RlcigKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjLAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVjayBhIGNoYXJhY3RlciBmb3IgdGhlIG51bWVyaWMgdHlwZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgIC0gY2hhcmFjdGVyIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGNoYXJhY3RlciBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0NoZWNrX1RoaXNfQ2hhcmFjdGVyKGludCBjLCBjb25zdCB2b2lkICphcmdwKQoreworICBjb25zdCB0aGlzQVJHICphcmduID0gKGNvbnN0IHRoaXNBUkcgKilhcmdwOworICBzdHJ1Y3QgbGNvbnYgKkwgPSBhcmduLT5MOworCisgIHJldHVybiAoKGlzRGlnaXQoYykgfHwKKwkgICBjID09ICcrJyB8fAorCSAgIGMgPT0gJy0nIHx8CisJICAgaXNEZWNpbWFsUG9pbnQoYykpCisJICA/IFRSVUUKKwkgIDogRkFMU0UpOworfQorCitzdGF0aWMgRklFTERUWVBFIHR5cGVUSElTID0KK3sKKyAgX0hBU19BUkdTIHwgX1JFU0lERU5ULAorICAxLAkJCQkvKiB0aGlzIGlzIG11dGFibGUsIHNvIHdlIGNhbid0IGJlIGNvbnN0ICovCisgIChGSUVMRFRZUEUgKikwLAorICAoRklFTERUWVBFICopMCwKKyAgTWFrZV9UaGlzX1R5cGUsCisgIENvcHlfVGhpc19UeXBlLAorICBGcmVlX1RoaXNfVHlwZSwKKyAgQ2hlY2tfVGhpc19GaWVsZCwKKyAgQ2hlY2tfVGhpc19DaGFyYWN0ZXIsCisgIE5VTEwsCisgIE5VTEwKK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihGSUVMRFRZUEUqKSBUWVBFX05VTUVSSUMgPSAmdHlwZVRISVM7CisKKy8qIGZ0eV9udW0uYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2Zvcm0vZnR5X3JlZ2V4LmMgYi9uY3Vyc2VzLTUuNy9mb3JtL2Z0eV9yZWdleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0Nzc3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9mb3JtL2Z0eV9yZWdleC5jCkBAIC0wLDAgKzEsMzA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBBdXRob3IgOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IGZ0eV9yZWdleC5jLHYgMS4yMSAyMDA3LzEwLzEzIDE5OjMzOjUwIHRvbSBFeHAgJCIpCisKKyNpZiBIQVZFX1JFR0VYX0hfRlVOQ1MJCS8qIFdlIHByZWZlciBQT1NJWCByZWdleCAqLworI2luY2x1ZGUgPHJlZ2V4Lmg+CisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICByZWdleF90ICpwUmVnRXhwOworICAgIHVuc2lnbmVkIGxvbmcgKnJlZkNvdW50OworICB9CitSZWdFeHBfQXJnOworCisjZWxpZiBIQVZFX1JFR0VYUF9IX0ZVTkNTIHwgSEFWRV9SRUdFWFBSX0hfRlVOQ1MKKyN1bmRlZiBSRVRVUk4KK3N0YXRpYyBpbnQgcmVnX2Vycm5vOworCitzdGF0aWMgY2hhciAqCitSZWdFeF9Jbml0KGNoYXIgKmluc3RyaW5nKQoreworICByZWdfZXJybm8gPSAwOworICByZXR1cm4gaW5zdHJpbmc7Cit9CisKK3N0YXRpYyBjaGFyICoKK1JlZ0V4X0Vycm9yKGludCBjb2RlKQoreworICByZWdfZXJybm8gPSBjb2RlOworICByZXR1cm4gMDsKK30KKworI2RlZmluZSBJTklUIAkJcmVnaXN0ZXIgY2hhciAqc3AgPSBSZWdFeF9Jbml0KGluc3RyaW5nKTsKKyNkZWZpbmUgR0VUQygpCQkoKnNwKyspCisjZGVmaW5lIFBFRUtDKCkJCSgqc3ApCisjZGVmaW5lIFVOR0VUQyhjKQkoLS1zcCkKKyNkZWZpbmUgUkVUVVJOKGMpCXJldHVybihjKQorI2RlZmluZSBFUlJPUihjKQlyZXR1cm4gUmVnRXhfRXJyb3IoYykKKworI2lmIEhBVkVfUkVHRVhQX0hfRlVOQ1MKKyNpbmNsdWRlIDxyZWdleHAuaD4KKyNlbHNlCisjaW5jbHVkZSA8cmVnZXhwci5oPgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGNoYXIgKmNvbXBpbGVkX2V4cHJlc3Npb247CisgIHVuc2lnbmVkIGxvbmcgKnJlZkNvdW50OworfQorUmVnRXhwX0FyZzsKKworLyogTWF4aW11bSBMZW5ndGggd2UgYWxsb3cgZm9yIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uICovCisjZGVmaW5lIE1BWF9SWF9MRU4gICAoMjA0OCkKKyNkZWZpbmUgUlhfSU5DUkVNRU5UICgyNTYpCisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpNYWtlX1JlZ3VsYXJFeHByZXNzaW9uX1R5cGUodmFfbGlzdCAqIGFwKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQWxsb2NhdGUgc3RydWN0dXJlIGZvciByZWdleCB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkICoKK01ha2VfUmVndWxhckV4cHJlc3Npb25fVHlwZSh2YV9saXN0ICphcCkKK3sKKyNpZiBIQVZFX1JFR0VYX0hfRlVOQ1MKKyAgY2hhciAqcnggPSB2YV9hcmcoKmFwLCBjaGFyICopOworICBSZWdFeHBfQXJnICpwcmVnOworCisgIHByZWcgPSB0eXBlTWFsbG9jKFJlZ0V4cF9BcmcsIDEpOworCisgIGlmIChwcmVnKQorICAgIHsKKyAgICAgIFQoKFRfQ1JFQVRFKCJSZWdFeHBfQXJnICVwIiksIHByZWcpKTsKKyAgICAgIGlmICgoKHByZWctPnBSZWdFeHAgPSB0eXBlTWFsbG9jKHJlZ2V4X3QsIDEpKSAhPSAwKQorCSAgJiYgIXJlZ2NvbXAocHJlZy0+cFJlZ0V4cCwgcngsCisJCSAgICAgIChSRUdfRVhURU5ERUQgfCBSRUdfTk9TVUIgfCBSRUdfTkVXTElORSkpKQorCXsKKwkgIFQoKFRfQ1JFQVRFKCJyZWdleF90ICVwIiksIHByZWctPnBSZWdFeHApKTsKKwkgIHByZWctPnJlZkNvdW50ID0gdHlwZU1hbGxvYyh1bnNpZ25lZCBsb25nLCAxKTsKKworCSAgKihwcmVnLT5yZWZDb3VudCkgPSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAocHJlZy0+cFJlZ0V4cCkKKwkgICAgZnJlZShwcmVnLT5wUmVnRXhwKTsKKwkgIGZyZWUocHJlZyk7CisJICBwcmVnID0gKFJlZ0V4cF9BcmcgKikwOworCX0KKyAgICB9CisgIHJldHVybiAoKHZvaWQgKilwcmVnKTsKKyNlbGlmIEhBVkVfUkVHRVhQX0hfRlVOQ1MgfCBIQVZFX1JFR0VYUFJfSF9GVU5DUworICBjaGFyICpyeCA9IHZhX2FyZygqYXAsIGNoYXIgKik7CisgIFJlZ0V4cF9BcmcgKnBBcmc7CisKKyAgcEFyZyA9IHR5cGVNYWxsb2MoUmVnRXhwX0FyZywgMSk7CisKKyAgaWYgKHBBcmcpCisgICAgeworICAgICAgaW50IGJsZW4gPSBSWF9JTkNSRU1FTlQ7CisKKyAgICAgIFQoKFRfQ1JFQVRFKCJSZWdFeHBfQXJnICVwIiksIHBBcmcpKTsKKyAgICAgIHBBcmctPmNvbXBpbGVkX2V4cHJlc3Npb24gPSBOVUxMOworICAgICAgcEFyZy0+cmVmQ291bnQgPSB0eXBlTWFsbG9jKHVuc2lnbmVkIGxvbmcsIDEpOworCisgICAgICAqKHBBcmctPnJlZkNvdW50KSA9IDE7CisKKyAgICAgIGRvCisJeworCSAgY2hhciAqYnVmID0gdHlwZU1hbGxvYyhjaGFyLCBibGVuKTsKKworCSAgaWYgKGJ1ZikKKwkgICAgeworI2lmIEhBVkVfUkVHRVhQX0hfRlVOQ1MKKwkgICAgICBjaGFyICpsYXN0X3BvcyA9IGNvbXBpbGUocngsIGJ1ZiwgJmJ1ZltibGVuXSwgJ1wwJyk7CisKKyNlbHNlIC8qIEhBVkVfUkVHRVhQUl9IX0ZVTkNTICovCisJICAgICAgY2hhciAqbGFzdF9wb3MgPSBjb21waWxlKHJ4LCBidWYsICZidWZbYmxlbl0pOworI2VuZGlmCisJICAgICAgaWYgKHJlZ19lcnJubykKKwkJeworCQkgIGZyZWUoYnVmKTsKKwkJICBpZiAocmVnX2Vycm5vID09IDUwKQorCQkgICAgYmxlbiArPSBSWF9JTkNSRU1FTlQ7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBmcmVlKHBBcmcpOworCQkgICAgICBwQXJnID0gTlVMTDsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBwQXJnLT5jb21waWxlZF9leHByZXNzaW9uID0gYnVmOworCQkgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgICB3aGlsZSAoYmxlbiA8PSBNQVhfUlhfTEVOKTsKKyAgICB9CisgIGlmIChwQXJnICYmICFwQXJnLT5jb21waWxlZF9leHByZXNzaW9uKQorICAgIHsKKyAgICAgIGZyZWUocEFyZyk7CisgICAgICBwQXJnID0gTlVMTDsKKyAgICB9CisgIHJldHVybiAodm9pZCAqKXBBcmc7CisjZWxzZQorICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkICpDb3B5X1JlZ3VsYXJFeHByZXNzaW9uX1R5cGUoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENvcHkgc3RydWN0dXJlIGZvciByZWdleCB0eXBlIGFyZ3VtZW50LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgUG9pbnRlciB0byBhcmd1bWVudCBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCAqCitDb3B5X1JlZ3VsYXJFeHByZXNzaW9uX1R5cGUoY29uc3Qgdm9pZCAqYXJncCkKK3sKKyNpZiAoSEFWRV9SRUdFWF9IX0ZVTkNTIHwgSEFWRV9SRUdFWFBfSF9GVU5DUyB8IEhBVkVfUkVHRVhQUl9IX0ZVTkNTKQorICBjb25zdCBSZWdFeHBfQXJnICphcCA9IChjb25zdCBSZWdFeHBfQXJnICopYXJncDsKKyAgY29uc3QgUmVnRXhwX0FyZyAqcmVzdWx0ID0gKGNvbnN0IFJlZ0V4cF9BcmcgKikwOworCisgIGlmIChhcCkKKyAgICB7CisgICAgICAqKGFwLT5yZWZDb3VudCkgKz0gMTsKKyAgICAgIHJlc3VsdCA9IGFwOworICAgIH0KKyAgcmV0dXJuICh2b2lkICopcmVzdWx0OworI2Vsc2UKKyAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5mb3JtCit8ICAgRnVuY3Rpb24gICAgICA6ICBzdGF0aWMgdm9pZCBGcmVlX1JlZ3VsYXJFeHByZXNzaW9uX1R5cGUodm9pZCAqIGFyZ3ApCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBGcmVlIHN0cnVjdHVyZSBmb3IgcmVnZXggdHlwZSBhcmd1bWVudC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAorRnJlZV9SZWd1bGFyRXhwcmVzc2lvbl9UeXBlKHZvaWQgKmFyZ3ApCit7CisjaWYgSEFWRV9SRUdFWF9IX0ZVTkNTIHwgSEFWRV9SRUdFWFBfSF9GVU5DUyB8IEhBVkVfUkVHRVhQUl9IX0ZVTkNTCisgIFJlZ0V4cF9BcmcgKmFwID0gKFJlZ0V4cF9BcmcgKilhcmdwOworCisgIGlmIChhcCkKKyAgICB7CisgICAgICBpZiAoLS0oKihhcC0+cmVmQ291bnQpKSA9PSAwKQorCXsKKyNpZiBIQVZFX1JFR0VYX0hfRlVOQ1MKKwkgIGlmIChhcC0+cFJlZ0V4cCkKKwkgICAgeworCSAgICAgIGZyZWUoYXAtPnJlZkNvdW50KTsKKwkgICAgICByZWdmcmVlKGFwLT5wUmVnRXhwKTsKKwkgICAgfQorI2VsaWYgSEFWRV9SRUdFWFBfSF9GVU5DUyB8IEhBVkVfUkVHRVhQUl9IX0ZVTkNTCisJICBpZiAoYXAtPmNvbXBpbGVkX2V4cHJlc3Npb24pCisJICAgIHsKKwkgICAgICBmcmVlKGFwLT5yZWZDb3VudCk7CisJICAgICAgZnJlZShhcC0+Y29tcGlsZWRfZXhwcmVzc2lvbik7CisJICAgIH0KKyNlbmRpZgorCSAgZnJlZShhcCk7CisJfQorICAgIH0KKyNlbmRpZgorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibmZvcm0KK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIENoZWNrX1JlZ3VsYXJFeHByZXNzaW9uX0ZpZWxkKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTEQgKiBmaWVsZCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgICogYXJncCkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFZhbGlkYXRlIGJ1ZmZlciBjb250ZW50IHRvIGJlIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICAtIGZpZWxkIGlzIHZhbGlkCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAtIGZpZWxkIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorQ2hlY2tfUmVndWxhckV4cHJlc3Npb25fRmllbGQoRklFTEQgKmZpZWxkLCBjb25zdCB2b2lkICphcmdwKQoreworICBib29sIG1hdGNoID0gRkFMU0U7CisKKyNpZiBIQVZFX1JFR0VYX0hfRlVOQ1MKKyAgY29uc3QgUmVnRXhwX0FyZyAqYXAgPSAoY29uc3QgUmVnRXhwX0FyZyAqKWFyZ3A7CisKKyAgaWYgKGFwICYmIGFwLT5wUmVnRXhwKQorICAgIG1hdGNoID0gKHJlZ2V4ZWMoYXAtPnBSZWdFeHAsIGZpZWxkX2J1ZmZlcihmaWVsZCwgMCksIDAsIE5VTEwsIDApCisJICAgICA/IEZBTFNFCisJICAgICA6IFRSVUUpOworI2VsaWYgSEFWRV9SRUdFWFBfSF9GVU5DUyB8IEhBVkVfUkVHRVhQUl9IX0ZVTkNTCisgIFJlZ0V4cF9BcmcgKmFwID0gKFJlZ0V4cF9BcmcgKilhcmdwOworCisgIGlmIChhcCAmJiBhcC0+Y29tcGlsZWRfZXhwcmVzc2lvbikKKyAgICBtYXRjaCA9IChzdGVwKGZpZWxkX2J1ZmZlcihmaWVsZCwgMCksIGFwLT5jb21waWxlZF9leHByZXNzaW9uKQorCSAgICAgPyBUUlVFCisJICAgICA6IEZBTFNFKTsKKyNlbmRpZgorICByZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBGSUVMRFRZUEUgdHlwZVJFR0VYUCA9Cit7CisgIF9IQVNfQVJHUyB8IF9SRVNJREVOVCwKKyAgMSwJCQkJLyogdGhpcyBpcyBtdXRhYmxlLCBzbyB3ZSBjYW4ndCBiZSBjb25zdCAqLworICAoRklFTERUWVBFICopMCwKKyAgKEZJRUxEVFlQRSAqKTAsCisgIE1ha2VfUmVndWxhckV4cHJlc3Npb25fVHlwZSwKKyAgQ29weV9SZWd1bGFyRXhwcmVzc2lvbl9UeXBlLAorICBGcmVlX1JlZ3VsYXJFeHByZXNzaW9uX1R5cGUsCisgIENoZWNrX1JlZ3VsYXJFeHByZXNzaW9uX0ZpZWxkLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMCit9OworCitOQ1VSU0VTX0VYUE9SVF9WQVIoRklFTERUWVBFKikgVFlQRV9SRUdFWFAgPSAmdHlwZVJFR0VYUDsKKworLyogZnR5X3JlZ2V4LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2hlYWRlcnMgYi9uY3Vyc2VzLTUuNy9mb3JtL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkNzJmMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vaGVhZGVycwpAQCAtMCwwICsxLDMyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NgorIworJChzcmNkaXIpL2Zvcm0uaAorIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2xsaWItbGZvcm0gYi9uY3Vyc2VzLTUuNy9mb3JtL2xsaWItbGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3YzNhNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vbGxpYi1sZm9ybQpAQCAtMCwwICsxLDczNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgMTk5NiwxOTk3LDIwMDIsMjAwNSAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vZl90cmFjZS5jICovCisKKyNpbmNsdWRlICJmb3JtLnByaXYuaCIKKworI3VuZGVmIF9uY19yZXRyYWNlX2ZpZWxkX3B0cgorRklFTEQJKipfbmNfcmV0cmFjZV9maWVsZF9wdHIoCisJCUZJRUxECSoqY29kZSkKKwkJeyByZXR1cm4oKihGSUVMRCAqKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2ZpZWxkCitGSUVMRAkqX25jX3JldHJhY2VfZmllbGQoCisJCUZJRUxECSpjb2RlKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9maWVsZF90eXBlCitGSUVMRFRZUEUgKl9uY19yZXRyYWNlX2ZpZWxkX3R5cGUoCisJCUZJRUxEVFlQRSAqY29kZSkKKwkJeyByZXR1cm4oKihGSUVMRFRZUEUgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2Zvcm0KK0ZPUk0JKl9uY19yZXRyYWNlX2Zvcm0oCisJCUZPUk0JKmNvZGUpCisJCXsgcmV0dXJuKCooRk9STSAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfZm9ybV9ob29rCitGb3JtX0hvb2sgX25jX3JldHJhY2VfZm9ybV9ob29rKAorCQlGb3JtX0hvb2sgY29kZSkKKwkJeyByZXR1cm4oKihGb3JtX0hvb2sgKikwKTsgfQorCisvKiAuL2ZsZF9hcmcuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkdHlwZV9hcmcKK2ludAlzZXRfZmllbGR0eXBlX2FyZygKKwkJRklFTERUWVBFICp0eXAsIAorCQl2b2lkCSooKmNvbnN0IG1ha2VfYXJnKSgKKwkJdmFfbGlzdAkqcDEpLCAKKwkJdm9pZAkqKCpjb25zdCBjb3B5X2FyZykoCisJCWNvbnN0IHZvaWQgKnAxKSwgCisJCXZvaWQJKCpjb25zdCBmcmVlX2FyZykoCisJCXZvaWQJKnAxKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfYXJnCit2b2lkCSpmaWVsZF9hcmcoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vZmxkX2F0dHIuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX2ZvcmUKK2ludAlzZXRfZmllbGRfZm9yZSgKKwkJRklFTEQJKmZpZWxkLCAKKwkJY2h0eXBlCWF0dHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2ZvcmUKK2NodHlwZQlmaWVsZF9mb3JlKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIHNldF9maWVsZF9iYWNrCitpbnQJc2V0X2ZpZWxkX2JhY2soCisJCUZJRUxECSpmaWVsZCwgCisJCWNodHlwZQlhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9iYWNrCitjaHR5cGUJZmllbGRfYmFjaygKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKy8qIC4vZmxkX2N1cnJlbnQuYyAqLworCisjdW5kZWYgc2V0X2N1cnJlbnRfZmllbGQKK2ludAlzZXRfY3VycmVudF9maWVsZCgKKwkJRk9STQkqZm9ybSwgCisJCUZJRUxECSpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY3VycmVudF9maWVsZAorRklFTEQJKmN1cnJlbnRfZmllbGQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRklFTEQgKiopMCk7IH0KKworI3VuZGVmIGZpZWxkX2luZGV4CitpbnQJZmllbGRfaW5kZXgoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9kZWYuYyAqLworCisjdW5kZWYgX25jX0RlZmF1bHRfRmllbGQKK0ZJRUxECSpfbmNfRGVmYXVsdF9GaWVsZDsKKworI3VuZGVmIF9uY19NYWtlX0FyZ3VtZW50CitUeXBlQXJndW1lbnQgKl9uY19NYWtlX0FyZ3VtZW50KAorCQljb25zdCBGSUVMRFRZUEUgKnR5cCwgCisJCXZhX2xpc3QJKmFwLCAKKwkJaW50CSplcnIpCisJCXsgcmV0dXJuKCooVHlwZUFyZ3VtZW50ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfQ29weV9Bcmd1bWVudAorVHlwZUFyZ3VtZW50ICpfbmNfQ29weV9Bcmd1bWVudCgKKwkJY29uc3QgRklFTERUWVBFICp0eXAsIAorCQljb25zdCBUeXBlQXJndW1lbnQgKmFyZ3AsIAorCQlpbnQJKmVycikKKwkJeyByZXR1cm4oKihUeXBlQXJndW1lbnQgKiopMCk7IH0KKworI3VuZGVmIF9uY19GcmVlX0FyZ3VtZW50Cit2b2lkCV9uY19GcmVlX0FyZ3VtZW50KAorCQljb25zdCBGSUVMRFRZUEUgKnR5cCwgCisJCVR5cGVBcmd1bWVudCAqYXJncCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19Db3B5X1R5cGUKK05DVVJTRVNfQk9PTCBfbmNfQ29weV9UeXBlKAorCQlGSUVMRAkqZHN0LCAKKwkJRklFTEQgY29uc3QgKnNyYykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX0ZyZWVfVHlwZQordm9pZAlfbmNfRnJlZV9UeXBlKAorCQlGSUVMRAkqZmllbGQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBuZXdfZmllbGQKK0ZJRUxECSpuZXdfZmllbGQoCisJCWludAlyb3dzLCAKKwkJaW50CWNvbHMsIAorCQlpbnQJZnJvdywgCisJCWludAlmY29sLCAKKwkJaW50CW5yb3csIAorCQlpbnQJbmJ1ZikKKwkJeyByZXR1cm4oKihGSUVMRCAqKikwKTsgfQorCisjdW5kZWYgZnJlZV9maWVsZAoraW50CWZyZWVfZmllbGQoCisJCUZJRUxECSpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9kdXAuYyAqLworCisjdW5kZWYgZHVwX2ZpZWxkCitGSUVMRAkqZHVwX2ZpZWxkKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJZnJvdywgCisJCWludAlmY29sKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKy8qIC4vZmxkX2Z0Y2hvaWNlLmMgKi8KKworI3VuZGVmIHNldF9maWVsZHR5cGVfY2hvaWNlCitpbnQJc2V0X2ZpZWxkdHlwZV9jaG9pY2UoCisJCUZJRUxEVFlQRSAqdHlwLCAKKwkJTkNVUlNFU19CT09MICgqY29uc3QgbmV4dF9jaG9pY2UpKAorCQlGSUVMRAkqcDEsIAorCQljb25zdCB2b2lkICpwMiksIAorCQlOQ1VSU0VTX0JPT0wgKCpjb25zdCBwcmV2X2Nob2ljZSkoCisJCUZJRUxECSpwMSwgCisJCWNvbnN0IHZvaWQgKnAyKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9mdGxpbmsuYyAqLworCisjdW5kZWYgbGlua19maWVsZHR5cGUKK0ZJRUxEVFlQRSAqbGlua19maWVsZHR5cGUoCisJCUZJRUxEVFlQRSAqdHlwZTEsIAorCQlGSUVMRFRZUEUgKnR5cGUyKQorCQl7IHJldHVybigqKEZJRUxEVFlQRSAqKikwKTsgfQorCisvKiAuL2ZsZF9pbmZvLmMgKi8KKworI3VuZGVmIGZpZWxkX2luZm8KK2ludAlmaWVsZF9pbmZvKAorCQljb25zdCBGSUVMRCAqZmllbGQsIAorCQlpbnQJKnJvd3MsIAorCQlpbnQJKmNvbHMsIAorCQlpbnQJKmZyb3csIAorCQlpbnQJKmZjb2wsIAorCQlpbnQJKm5yb3csIAorCQlpbnQJKm5idWYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGR5bmFtaWNfZmllbGRfaW5mbworaW50CWR5bmFtaWNfZmllbGRfaW5mbygKKwkJY29uc3QgRklFTEQgKmZpZWxkLCAKKwkJaW50CSpkcm93cywgCisJCWludAkqZGNvbHMsIAorCQlpbnQJKm1heGdyb3cpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfanVzdC5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfanVzdAoraW50CXNldF9maWVsZF9qdXN0KAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJanVzdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfanVzdAoraW50CWZpZWxkX2p1c3QoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9saW5rLmMgKi8KKworI3VuZGVmIGxpbmtfZmllbGQKK0ZJRUxECSpsaW5rX2ZpZWxkKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJZnJvdywgCisJCWludAlmY29sKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKy8qIC4vZmxkX21heC5jICovCisKKyN1bmRlZiBzZXRfbWF4X2ZpZWxkCitpbnQJc2V0X21heF9maWVsZCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CW1heGdyb3cpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfbW92ZS5jICovCisKKyN1bmRlZiBtb3ZlX2ZpZWxkCitpbnQJbW92ZV9maWVsZCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CWZyb3csIAorCQlpbnQJZmNvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9uZXdmdHlwLmMgKi8KKworI3VuZGVmIF9uY19EZWZhdWx0X0ZpZWxkVHlwZQorY29uc3QgRklFTERUWVBFICpfbmNfRGVmYXVsdF9GaWVsZFR5cGUgPSB7MH07CisKKyN1bmRlZiBuZXdfZmllbGR0eXBlCitGSUVMRFRZUEUgKm5ld19maWVsZHR5cGUoCisJCU5DVVJTRVNfQk9PTCAoKmNvbnN0IGZpZWxkX2NoZWNrKSgKKwkJRklFTEQJKnAxLCAKKwkJY29uc3Qgdm9pZCAqcDIpLCAKKwkJTkNVUlNFU19CT09MICgqY29uc3QgY2hhcl9jaGVjaykoCisJCWludAlwMSwgCisJCWNvbnN0IHZvaWQgKnAyKSkKKwkJeyByZXR1cm4oKihGSUVMRFRZUEUgKiopMCk7IH0KKworI3VuZGVmIGZyZWVfZmllbGR0eXBlCitpbnQJZnJlZV9maWVsZHR5cGUoCisJCUZJRUxEVFlQRSAqdHlwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX29wdHMuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX29wdHMKK2ludAlzZXRfZmllbGRfb3B0cygKKwkJRklFTEQJKmZpZWxkLCAKKwkJRmllbGRfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9vcHRzCitGaWVsZF9PcHRpb25zIGZpZWxkX29wdHMoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihGaWVsZF9PcHRpb25zICopMCk7IH0KKworI3VuZGVmIGZpZWxkX29wdHNfb24KK2ludAlmaWVsZF9vcHRzX29uKAorCQlGSUVMRAkqZmllbGQsIAorCQlGaWVsZF9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX29wdHNfb2ZmCitpbnQJZmllbGRfb3B0c19vZmYoCisJCUZJRUxECSpmaWVsZCwgCisJCUZpZWxkX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9wYWQuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX3BhZAoraW50CXNldF9maWVsZF9wYWQoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfcGFkCitpbnQJZmllbGRfcGFkKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfcGFnZS5jICovCisKKyN1bmRlZiBzZXRfbmV3X3BhZ2UKK2ludAlzZXRfbmV3X3BhZ2UoCisJCUZJRUxECSpmaWVsZCwgCisJCU5DVVJTRVNfQk9PTCBuZXdfcGFnZV9mbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBuZXdfcGFnZQorTkNVUlNFU19CT09MIG5ld19wYWdlKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9mbGRfc3RhdC5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfc3RhdHVzCitpbnQJc2V0X2ZpZWxkX3N0YXR1cygKKwkJRklFTEQJKmZpZWxkLCAKKwkJTkNVUlNFU19CT09MIHN0YXR1cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfc3RhdHVzCitOQ1VSU0VTX0JPT0wgZmllbGRfc3RhdHVzKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9mbGRfdHlwZS5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfdHlwZQoraW50CXNldF9maWVsZF90eXBlKAorCQlGSUVMRAkqZmllbGQsIAorCQlGSUVMRFRZUEUgKnR5cGUsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX3R5cGUKK0ZJRUxEVFlQRSAqZmllbGRfdHlwZSgKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKEZJRUxEVFlQRSAqKikwKTsgfQorCisvKiAuL2ZsZF91c2VyLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF91c2VycHRyCitpbnQJc2V0X2ZpZWxkX3VzZXJwdHIoCisJCUZJRUxECSpmaWVsZCwgCisJCXZvaWQJKnVzcnB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfdXNlcnB0cgordm9pZAkqZmllbGRfdXNlcnB0cigKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi9mcm1fY3Vyc29yLmMgKi8KKworI3VuZGVmIHBvc19mb3JtX2N1cnNvcgoraW50CXBvc19mb3JtX2N1cnNvcigKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9kYXRhLmMgKi8KKworI3VuZGVmIGRhdGFfYmVoaW5kCitOQ1VSU0VTX0JPT0wgZGF0YV9iZWhpbmQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGRhdGFfYWhlYWQKK05DVVJTRVNfQk9PTCBkYXRhX2FoZWFkKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vZnJtX2RlZi5jICovCisKKyN1bmRlZiBfbmNfRGVmYXVsdF9Gb3JtCitGT1JNCSpfbmNfRGVmYXVsdF9Gb3JtOworCisjdW5kZWYgbmV3X2Zvcm0KK0ZPUk0JKm5ld19mb3JtKAorCQlGSUVMRAkqKmZpZWxkcykKKwkJeyByZXR1cm4oKihGT1JNICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX2Zvcm0KK2ludAlmcmVlX2Zvcm0oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldF9mb3JtX2ZpZWxkcworaW50CXNldF9mb3JtX2ZpZWxkcygKKwkJRk9STQkqZm9ybSwgCisJCUZJRUxECSoqZmllbGRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX2ZpZWxkcworRklFTEQJKipmb3JtX2ZpZWxkcygKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGSUVMRCAqKiopMCk7IH0KKworI3VuZGVmIGZpZWxkX2NvdW50CitpbnQJZmllbGRfY291bnQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mcm1fZHJpdmVyLmMgKi8KKworI3VuZGVmIF9uY19Qb3NpdGlvbl9Gb3JtX0N1cnNvcgoraW50CV9uY19Qb3NpdGlvbl9Gb3JtX0N1cnNvcigKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX1JlZnJlc2hfQ3VycmVudF9GaWVsZAoraW50CV9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQoCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzCitpbnQJX25jX1N5bmNocm9uaXplX0F0dHJpYnV0ZXMoCisJCUZJRUxECSpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX1N5bmNocm9uaXplX09wdGlvbnMKK2ludAlfbmNfU3luY2hyb25pemVfT3B0aW9ucygKKwkJRklFTEQJKmZpZWxkLCAKKwkJRmllbGRfT3B0aW9ucyBuZXdvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfU2V0X0N1cnJlbnRfRmllbGQKK2ludAlfbmNfU2V0X0N1cnJlbnRfRmllbGQoCisJCUZPUk0JKmZvcm0sIAorCQlGSUVMRAkqbmV3ZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19JbnRlcm5hbF9WYWxpZGF0aW9uCitOQ1VSU0VTX0JPT0wgX25jX0ludGVybmFsX1ZhbGlkYXRpb24oCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19GaXJzdF9BY3RpdmVfRmllbGQKK0ZJRUxECSpfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkKAorCQlGT1JNCSpmb3JtKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKyN1bmRlZiBfbmNfU2V0X0Zvcm1fUGFnZQoraW50CV9uY19TZXRfRm9ybV9QYWdlKAorCQlGT1JNCSpmb3JtLCAKKwkJaW50CXBhZ2UsIAorCQlGSUVMRAkqZmllbGQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IGtleWNvZGU7IAorICBpbnQgKCpjbWQpIChGT1JNICopOyAKK30KK0JpbmRpbmdfSW5mbzsKKworI3VuZGVmIGZvcm1fZHJpdmVyCitpbnQJZm9ybV9kcml2ZXIoCisJCUZPUk0JKmZvcm0sIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2V0X2ZpZWxkX2J1ZmZlcgoraW50CXNldF9maWVsZF9idWZmZXIoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAlidWZmZXIsIAorCQljb25zdCBjaGFyICp2YWx1ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfYnVmZmVyCitjaGFyCSpmaWVsZF9idWZmZXIoCisJCWNvbnN0IEZJRUxEICpmaWVsZCwgCisJCWludAlidWZmZXIpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL2ZybV9ob29rLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF9pbml0CitpbnQJc2V0X2ZpZWxkX2luaXQoCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfaW5pdAorRm9ybV9Ib29rIGZpZWxkX2luaXQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRm9ybV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9maWVsZF90ZXJtCitpbnQJc2V0X2ZpZWxkX3Rlcm0oCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfdGVybQorRm9ybV9Ib29rIGZpZWxkX3Rlcm0oCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRm9ybV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9mb3JtX2luaXQKK2ludAlzZXRfZm9ybV9pbml0KAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1faW5pdAorRm9ybV9Ib29rIGZvcm1faW5pdCgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGb3JtX0hvb2sgKikwKTsgfQorCisjdW5kZWYgc2V0X2Zvcm1fdGVybQoraW50CXNldF9mb3JtX3Rlcm0oCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV90ZXJtCitGb3JtX0hvb2sgZm9ybV90ZXJtKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fSG9vayAqKTApOyB9CisKKy8qIC4vZnJtX29wdHMuYyAqLworCisjdW5kZWYgc2V0X2Zvcm1fb3B0cworaW50CXNldF9mb3JtX29wdHMoCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV9vcHRzCitGb3JtX09wdGlvbnMgZm9ybV9vcHRzKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fT3B0aW9ucyAqKTApOyB9CisKKyN1bmRlZiBmb3JtX29wdHNfb24KK2ludAlmb3JtX29wdHNfb24oCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV9vcHRzX29mZgoraW50CWZvcm1fb3B0c19vZmYoCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9wYWdlLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX3BhZ2UKK2ludAlzZXRfZm9ybV9wYWdlKAorCQlGT1JNCSpmb3JtLCAKKwkJaW50CXBhZ2UpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fcGFnZQoraW50CWZvcm1fcGFnZSgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9wb3N0LmMgKi8KKworI3VuZGVmIHBvc3RfZm9ybQoraW50CXBvc3RfZm9ybSgKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5wb3N0X2Zvcm0KK2ludAl1bnBvc3RfZm9ybSgKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9yZXFfbmFtZS5jICovCisKKyN1bmRlZiBmb3JtX3JlcXVlc3RfbmFtZQorY29uc3QgY2hhciAqZm9ybV9yZXF1ZXN0X25hbWUoCisJCWludAlyZXF1ZXN0KQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIGZvcm1fcmVxdWVzdF9ieV9uYW1lCitpbnQJZm9ybV9yZXF1ZXN0X2J5X25hbWUoCisJCWNvbnN0IGNoYXIgKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9zY2FsZS5jICovCisKKyN1bmRlZiBzY2FsZV9mb3JtCitpbnQJc2NhbGVfZm9ybSgKKwkJY29uc3QgRk9STSAqZm9ybSwgCisJCWludAkqcm93cywgCisJCWludAkqY29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9zdWIuYyAqLworCisjdW5kZWYgc2V0X2Zvcm1fc3ViCitpbnQJc2V0X2Zvcm1fc3ViKAorCQlGT1JNCSpmb3JtLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fc3ViCitXSU5ET1cJKmZvcm1fc3ViKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2ZybV91c2VyLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX3VzZXJwdHIKK2ludAlzZXRfZm9ybV91c2VycHRyKAorCQlGT1JNCSpmb3JtLCAKKwkJdm9pZAkqdXNycHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX3VzZXJwdHIKK3ZvaWQJKmZvcm1fdXNlcnB0cigKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vZnJtX3dpbi5jICovCisKKyN1bmRlZiBzZXRfZm9ybV93aW4KK2ludAlzZXRfZm9ybV93aW4oCisJCUZPUk0JKmZvcm0sIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV93aW4KK1dJTkRPVwkqZm9ybV93aW4oCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vZnR5X2FsbnVtLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCB3aWR0aDsKKyAgfQorYWxudW1BUkc7CisKKyN1bmRlZiBUWVBFX0FMTlVNCitGSUVMRFRZUEUgKlRZUEVfQUxOVU07CisKKy8qIC4vZnR5X2FscGhhLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCB3aWR0aDsKKyAgfQorYWxwaGFBUkc7CisKKyN1bmRlZiBUWVBFX0FMUEhBCitGSUVMRFRZUEUgKlRZUEVfQUxQSEE7CisKKy8qIC4vZnR5X2VudW0uYyAqLworCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgY2hhciAqKmt3ZHM7CisgICAgaW50IGNvdW50OworICAgIE5DVVJTRVNfQk9PTCBjaGVja2Nhc2U7CisgICAgTkNVUlNFU19CT09MIGNoZWNrdW5pcXVlOworICB9CitlbnVtQVJHOworCisjdW5kZWYgVFlQRV9FTlVNCitGSUVMRFRZUEUgKlRZUEVfRU5VTTsKKworLyogLi9mdHlfaW50LmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCBwcmVjaXNpb247CisgICAgbG9uZyBsb3c7CisgICAgbG9uZyBoaWdoOworICB9CitpbnRlZ2VyQVJHOworCisjdW5kZWYgVFlQRV9JTlRFR0VSCitGSUVMRFRZUEUgKlRZUEVfSU5URUdFUjsKKworLyogLi9mdHlfaXB2NC5jICovCisjdW5kZWYgVFlQRV9JUFY0CitGSUVMRFRZUEUgKlRZUEVfSVBWNDsKKworLyogLi9mdHlfbnVtLmMgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgaW50IHByZWNpc2lvbjsKKyAgICBkb3VibGUgbG93OworICAgIGRvdWJsZSBoaWdoOworICAgIHN0cnVjdCBsY29udiAqTDsKKyAgfQorbnVtZXJpY0FSRzsKKworI3VuZGVmIFRZUEVfTlVNRVJJQworRklFTERUWVBFICpUWVBFX05VTUVSSUM7CisKKy8qIC4vZnR5X3JlZ2V4LmMgKi8KKworI2luY2x1ZGUgPHJlZ2V4Lmg+CisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICByZWdleF90ICpwUmVnRXhwOworICAgIHVuc2lnbmVkIGxvbmcgKnJlZkNvdW50OworICB9CitSZWdFeHBfQXJnOworCisjdW5kZWYgVFlQRV9SRUdFWFAKK0ZJRUxEVFlQRSAqVFlQRV9SRUdFWFA7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL2xsaWItbGZvcm13IGIvbmN1cnNlcy01LjcvZm9ybS9sbGliLWxmb3JtdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkwYzViCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvZm9ybS9sbGliLWxmb3JtdwpAQCAtMCwwICsxLDc0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgMjAwMiwyMDA1ICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTElOVExJQlJBUlkgKi8KKworLyogLi9mX3RyYWNlLmMgKi8KKworI2luY2x1ZGUgImZvcm0ucHJpdi5oIgorCisjdW5kZWYgX25jX3JldHJhY2VfZmllbGRfcHRyCitGSUVMRAkqKl9uY19yZXRyYWNlX2ZpZWxkX3B0cigKKwkJRklFTEQJKipjb2RlKQorCQl7IHJldHVybigqKEZJRUxEICoqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfZmllbGQKK0ZJRUxECSpfbmNfcmV0cmFjZV9maWVsZCgKKwkJRklFTEQJKmNvZGUpCisJCXsgcmV0dXJuKCooRklFTEQgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2ZpZWxkX3R5cGUKK0ZJRUxEVFlQRSAqX25jX3JldHJhY2VfZmllbGRfdHlwZSgKKwkJRklFTERUWVBFICpjb2RlKQorCQl7IHJldHVybigqKEZJRUxEVFlQRSAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfZm9ybQorRk9STQkqX25jX3JldHJhY2VfZm9ybSgKKwkJRk9STQkqY29kZSkKKwkJeyByZXR1cm4oKihGT1JNICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9mb3JtX2hvb2sKK0Zvcm1fSG9vayBfbmNfcmV0cmFjZV9mb3JtX2hvb2soCisJCUZvcm1fSG9vayBjb2RlKQorCQl7IHJldHVybigqKEZvcm1fSG9vayAqKTApOyB9CisKKy8qIC4vZmxkX2FyZy5jICovCisKKyN1bmRlZiBzZXRfZmllbGR0eXBlX2FyZworaW50CXNldF9maWVsZHR5cGVfYXJnKAorCQlGSUVMRFRZUEUgKnR5cCwgCisJCXZvaWQJKigqY29uc3QgbWFrZV9hcmcpKAorCQl2YV9saXN0CSpwMSksIAorCQl2b2lkCSooKmNvbnN0IGNvcHlfYXJnKSgKKwkJY29uc3Qgdm9pZCAqcDEpLCAKKwkJdm9pZAkoKmNvbnN0IGZyZWVfYXJnKSgKKwkJdm9pZAkqcDEpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9hcmcKK3ZvaWQJKmZpZWxkX2FyZygKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi9mbGRfYXR0ci5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfZm9yZQoraW50CXNldF9maWVsZF9mb3JlKAorCQlGSUVMRAkqZmllbGQsIAorCQljaHR5cGUJYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfZm9yZQorY2h0eXBlCWZpZWxkX2ZvcmUoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgc2V0X2ZpZWxkX2JhY2sKK2ludAlzZXRfZmllbGRfYmFjaygKKwkJRklFTEQJKmZpZWxkLCAKKwkJY2h0eXBlCWF0dHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX2JhY2sKK2NodHlwZQlmaWVsZF9iYWNrKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworLyogLi9mbGRfY3VycmVudC5jICovCisKKyN1bmRlZiBzZXRfY3VycmVudF9maWVsZAoraW50CXNldF9jdXJyZW50X2ZpZWxkKAorCQlGT1JNCSpmb3JtLCAKKwkJRklFTEQJKmZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjdXJyZW50X2ZpZWxkCitGSUVMRAkqY3VycmVudF9maWVsZCgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGSUVMRCAqKikwKTsgfQorCisjdW5kZWYgZmllbGRfaW5kZXgKK2ludAlmaWVsZF9pbmRleCgKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX2RlZi5jICovCisKKyN1bmRlZiBfbmNfRGVmYXVsdF9GaWVsZAorRklFTEQJKl9uY19EZWZhdWx0X0ZpZWxkOworCisjdW5kZWYgX25jX01ha2VfQXJndW1lbnQKK1R5cGVBcmd1bWVudCAqX25jX01ha2VfQXJndW1lbnQoCisJCWNvbnN0IEZJRUxEVFlQRSAqdHlwLCAKKwkJdmFfbGlzdAkqYXAsIAorCQlpbnQJKmVycikKKwkJeyByZXR1cm4oKihUeXBlQXJndW1lbnQgKiopMCk7IH0KKworI3VuZGVmIF9uY19Db3B5X0FyZ3VtZW50CitUeXBlQXJndW1lbnQgKl9uY19Db3B5X0FyZ3VtZW50KAorCQljb25zdCBGSUVMRFRZUEUgKnR5cCwgCisJCWNvbnN0IFR5cGVBcmd1bWVudCAqYXJncCwgCisJCWludAkqZXJyKQorCQl7IHJldHVybigqKFR5cGVBcmd1bWVudCAqKikwKTsgfQorCisjdW5kZWYgX25jX0ZyZWVfQXJndW1lbnQKK3ZvaWQJX25jX0ZyZWVfQXJndW1lbnQoCisJCWNvbnN0IEZJRUxEVFlQRSAqdHlwLCAKKwkJVHlwZUFyZ3VtZW50ICphcmdwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX0NvcHlfVHlwZQorTkNVUlNFU19CT09MIF9uY19Db3B5X1R5cGUoCisJCUZJRUxECSpkc3QsIAorCQlGSUVMRCBjb25zdCAqc3JjKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfRnJlZV9UeXBlCit2b2lkCV9uY19GcmVlX1R5cGUoCisJCUZJRUxECSpmaWVsZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG5ld19maWVsZAorRklFTEQJKm5ld19maWVsZCgKKwkJaW50CXJvd3MsIAorCQlpbnQJY29scywgCisJCWludAlmcm93LCAKKwkJaW50CWZjb2wsIAorCQlpbnQJbnJvdywgCisJCWludAluYnVmKQorCQl7IHJldHVybigqKEZJRUxEICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX2ZpZWxkCitpbnQJZnJlZV9maWVsZCgKKwkJRklFTEQJKmZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX2R1cC5jICovCisKKyN1bmRlZiBkdXBfZmllbGQKK0ZJRUxECSpkdXBfZmllbGQoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAlmcm93LCAKKwkJaW50CWZjb2wpCisJCXsgcmV0dXJuKCooRklFTEQgKiopMCk7IH0KKworLyogLi9mbGRfZnRjaG9pY2UuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkdHlwZV9jaG9pY2UKK2ludAlzZXRfZmllbGR0eXBlX2Nob2ljZSgKKwkJRklFTERUWVBFICp0eXAsIAorCQlOQ1VSU0VTX0JPT0wgKCpjb25zdCBuZXh0X2Nob2ljZSkoCisJCUZJRUxECSpwMSwgCisJCWNvbnN0IHZvaWQgKnAyKSwgCisJCU5DVVJTRVNfQk9PTCAoKmNvbnN0IHByZXZfY2hvaWNlKSgKKwkJRklFTEQJKnAxLCAKKwkJY29uc3Qgdm9pZCAqcDIpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX2Z0bGluay5jICovCisKKyN1bmRlZiBsaW5rX2ZpZWxkdHlwZQorRklFTERUWVBFICpsaW5rX2ZpZWxkdHlwZSgKKwkJRklFTERUWVBFICp0eXBlMSwgCisJCUZJRUxEVFlQRSAqdHlwZTIpCisJCXsgcmV0dXJuKCooRklFTERUWVBFICoqKTApOyB9CisKKy8qIC4vZmxkX2luZm8uYyAqLworCisjdW5kZWYgZmllbGRfaW5mbworaW50CWZpZWxkX2luZm8oCisJCWNvbnN0IEZJRUxEICpmaWVsZCwgCisJCWludAkqcm93cywgCisJCWludAkqY29scywgCisJCWludAkqZnJvdywgCisJCWludAkqZmNvbCwgCisJCWludAkqbnJvdywgCisJCWludAkqbmJ1ZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZHluYW1pY19maWVsZF9pbmZvCitpbnQJZHluYW1pY19maWVsZF9pbmZvKAorCQljb25zdCBGSUVMRCAqZmllbGQsIAorCQlpbnQJKmRyb3dzLCAKKwkJaW50CSpkY29scywgCisJCWludAkqbWF4Z3JvdykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9qdXN0LmMgKi8KKworI3VuZGVmIHNldF9maWVsZF9qdXN0CitpbnQJc2V0X2ZpZWxkX2p1c3QoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAlqdXN0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9qdXN0CitpbnQJZmllbGRfanVzdCgKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX2xpbmsuYyAqLworCisjdW5kZWYgbGlua19maWVsZAorRklFTEQJKmxpbmtfZmllbGQoCisJCUZJRUxECSpmaWVsZCwgCisJCWludAlmcm93LCAKKwkJaW50CWZjb2wpCisJCXsgcmV0dXJuKCooRklFTEQgKiopMCk7IH0KKworLyogLi9mbGRfbWF4LmMgKi8KKworI3VuZGVmIHNldF9tYXhfZmllbGQKK2ludAlzZXRfbWF4X2ZpZWxkKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJbWF4Z3JvdykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9tb3ZlLmMgKi8KKworI3VuZGVmIG1vdmVfZmllbGQKK2ludAltb3ZlX2ZpZWxkKAorCQlGSUVMRAkqZmllbGQsIAorCQlpbnQJZnJvdywgCisJCWludAlmY29sKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX25ld2Z0eXAuYyAqLworCisjdW5kZWYgX25jX0RlZmF1bHRfRmllbGRUeXBlCitjb25zdCBGSUVMRFRZUEUgKl9uY19EZWZhdWx0X0ZpZWxkVHlwZSA9IHswfTsKKworI3VuZGVmIG5ld19maWVsZHR5cGUKK0ZJRUxEVFlQRSAqbmV3X2ZpZWxkdHlwZSgKKwkJTkNVUlNFU19CT09MICgqY29uc3QgZmllbGRfY2hlY2spKAorCQlGSUVMRAkqcDEsIAorCQljb25zdCB2b2lkICpwMiksIAorCQlOQ1VSU0VTX0JPT0wgKCpjb25zdCBjaGFyX2NoZWNrKSgKKwkJaW50CXAxLCAKKwkJY29uc3Qgdm9pZCAqcDIpKQorCQl7IHJldHVybigqKEZJRUxEVFlQRSAqKikwKTsgfQorCisjdW5kZWYgZnJlZV9maWVsZHR5cGUKK2ludAlmcmVlX2ZpZWxkdHlwZSgKKwkJRklFTERUWVBFICp0eXApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9mbGRfb3B0cy5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfb3B0cworaW50CXNldF9maWVsZF9vcHRzKAorCQlGSUVMRAkqZmllbGQsIAorCQlGaWVsZF9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZpZWxkX29wdHMKK0ZpZWxkX09wdGlvbnMgZmllbGRfb3B0cygKKwkJY29uc3QgRklFTEQgKmZpZWxkKQorCQl7IHJldHVybigqKEZpZWxkX09wdGlvbnMgKikwKTsgfQorCisjdW5kZWYgZmllbGRfb3B0c19vbgoraW50CWZpZWxkX29wdHNfb24oCisJCUZJRUxECSpmaWVsZCwgCisJCUZpZWxkX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfb3B0c19vZmYKK2ludAlmaWVsZF9vcHRzX29mZigKKwkJRklFTEQJKmZpZWxkLCAKKwkJRmllbGRfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZmxkX3BhZC5jICovCisKKyN1bmRlZiBzZXRfZmllbGRfcGFkCitpbnQJc2V0X2ZpZWxkX3BhZCgKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9wYWQKK2ludAlmaWVsZF9wYWQoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZsZF9wYWdlLmMgKi8KKworI3VuZGVmIHNldF9uZXdfcGFnZQoraW50CXNldF9uZXdfcGFnZSgKKwkJRklFTEQJKmZpZWxkLCAKKwkJTkNVUlNFU19CT09MIG5ld19wYWdlX2ZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5ld19wYWdlCitOQ1VSU0VTX0JPT0wgbmV3X3BhZ2UoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2ZsZF9zdGF0LmMgKi8KKworI3VuZGVmIHNldF9maWVsZF9zdGF0dXMKK2ludAlzZXRfZmllbGRfc3RhdHVzKAorCQlGSUVMRAkqZmllbGQsIAorCQlOQ1VSU0VTX0JPT0wgc3RhdHVzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9zdGF0dXMKK05DVVJTRVNfQk9PTCBmaWVsZF9zdGF0dXMoCisJCWNvbnN0IEZJRUxEICpmaWVsZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2ZsZF90eXBlLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF90eXBlCitpbnQJc2V0X2ZpZWxkX3R5cGUoCisJCUZJRUxECSpmaWVsZCwgCisJCUZJRUxEVFlQRSAqdHlwZSwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfdHlwZQorRklFTERUWVBFICpmaWVsZF90eXBlKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCooRklFTERUWVBFICoqKTApOyB9CisKKy8qIC4vZmxkX3VzZXIuYyAqLworCisjdW5kZWYgc2V0X2ZpZWxkX3VzZXJwdHIKK2ludAlzZXRfZmllbGRfdXNlcnB0cigKKwkJRklFTEQJKmZpZWxkLCAKKwkJdm9pZAkqdXNycHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF91c2VycHRyCit2b2lkCSpmaWVsZF91c2VycHRyKAorCQljb25zdCBGSUVMRCAqZmllbGQpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL2ZybV9jdXJzb3IuYyAqLworCisjdW5kZWYgcG9zX2Zvcm1fY3Vyc29yCitpbnQJcG9zX2Zvcm1fY3Vyc29yKAorCQlGT1JNCSpmb3JtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vZnJtX2RhdGEuYyAqLworCisjdW5kZWYgZGF0YV9iZWhpbmQKK05DVVJTRVNfQk9PTCBkYXRhX2JlaGluZCgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgZGF0YV9haGVhZAorTkNVUlNFU19CT09MIGRhdGFfYWhlYWQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9mcm1fZGVmLmMgKi8KKworI3VuZGVmIF9uY19EZWZhdWx0X0Zvcm0KK0ZPUk0JKl9uY19EZWZhdWx0X0Zvcm07CisKKyN1bmRlZiBuZXdfZm9ybQorRk9STQkqbmV3X2Zvcm0oCisJCUZJRUxECSoqZmllbGRzKQorCQl7IHJldHVybigqKEZPUk0gKiopMCk7IH0KKworI3VuZGVmIGZyZWVfZm9ybQoraW50CWZyZWVfZm9ybSgKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2V0X2Zvcm1fZmllbGRzCitpbnQJc2V0X2Zvcm1fZmllbGRzKAorCQlGT1JNCSpmb3JtLCAKKwkJRklFTEQJKipmaWVsZHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fZmllbGRzCitGSUVMRAkqKmZvcm1fZmllbGRzKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZJRUxEICoqKikwKTsgfQorCisjdW5kZWYgZmllbGRfY291bnQKK2ludAlmaWVsZF9jb3VudCgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9kcml2ZXIuYyAqLworCisjdW5kZWYgX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yCitpbnQJX25jX1Bvc2l0aW9uX0Zvcm1fQ3Vyc29yKAorCQlGT1JNCSpmb3JtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfUmVmcmVzaF9DdXJyZW50X0ZpZWxkCitpbnQJX25jX1JlZnJlc2hfQ3VycmVudF9GaWVsZCgKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX1N5bmNocm9uaXplX0F0dHJpYnV0ZXMKK2ludAlfbmNfU3luY2hyb25pemVfQXR0cmlidXRlcygKKwkJRklFTEQJKmZpZWxkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfU3luY2hyb25pemVfT3B0aW9ucworaW50CV9uY19TeW5jaHJvbml6ZV9PcHRpb25zKAorCQlGSUVMRAkqZmllbGQsIAorCQlGaWVsZF9PcHRpb25zIG5ld29wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19TZXRfQ3VycmVudF9GaWVsZAoraW50CV9uY19TZXRfQ3VycmVudF9GaWVsZCgKKwkJRk9STQkqZm9ybSwgCisJCUZJRUxECSpuZXdmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX0ludGVybmFsX1ZhbGlkYXRpb24KK05DVVJTRVNfQk9PTCBfbmNfSW50ZXJuYWxfVmFsaWRhdGlvbigKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX0ZpcnN0X0FjdGl2ZV9GaWVsZAorRklFTEQJKl9uY19GaXJzdF9BY3RpdmVfRmllbGQoCisJCUZPUk0JKmZvcm0pCisJCXsgcmV0dXJuKCooRklFTEQgKiopMCk7IH0KKworI3VuZGVmIF9uY19TZXRfRm9ybV9QYWdlCitpbnQJX25jX1NldF9Gb3JtX1BhZ2UoCisJCUZPUk0JKmZvcm0sIAorCQlpbnQJcGFnZSwgCisJCUZJRUxECSpmaWVsZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQga2V5Y29kZTsgCisgIGludCAoKmNtZCkgKEZPUk0gKik7IAorfQorQmluZGluZ19JbmZvOworCisjdW5kZWYgZm9ybV9kcml2ZXIKK2ludAlmb3JtX2RyaXZlcigKKwkJRk9STQkqZm9ybSwgCisJCWludAljKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRfZmllbGRfYnVmZmVyCitpbnQJc2V0X2ZpZWxkX2J1ZmZlcigKKwkJRklFTEQJKmZpZWxkLCAKKwkJaW50CWJ1ZmZlciwgCisJCWNvbnN0IGNoYXIgKnZhbHVlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmaWVsZF9idWZmZXIKK2NoYXIJKmZpZWxkX2J1ZmZlcigKKwkJY29uc3QgRklFTEQgKmZpZWxkLCAKKwkJaW50CWJ1ZmZlcikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfV2lkZW5fU3RyaW5nCit3Y2hhcl90CSpfbmNfV2lkZW5fU3RyaW5nKAorCQljaGFyCSpzb3VyY2UsIAorCQlpbnQJKmxlbmd0aHApCisJCXsgcmV0dXJuKCood2NoYXJfdCAqKikwKTsgfQorCisvKiAuL2ZybV9ob29rLmMgKi8KKworI3VuZGVmIHNldF9maWVsZF9pbml0CitpbnQJc2V0X2ZpZWxkX2luaXQoCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfaW5pdAorRm9ybV9Ib29rIGZpZWxkX2luaXQoCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRm9ybV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9maWVsZF90ZXJtCitpbnQJc2V0X2ZpZWxkX3Rlcm0oCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZmllbGRfdGVybQorRm9ybV9Ib29rIGZpZWxkX3Rlcm0oCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooRm9ybV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9mb3JtX2luaXQKK2ludAlzZXRfZm9ybV9pbml0KAorCQlGT1JNCSpmb3JtLCAKKwkJRm9ybV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1faW5pdAorRm9ybV9Ib29rIGZvcm1faW5pdCgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihGb3JtX0hvb2sgKikwKTsgfQorCisjdW5kZWYgc2V0X2Zvcm1fdGVybQoraW50CXNldF9mb3JtX3Rlcm0oCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV90ZXJtCitGb3JtX0hvb2sgZm9ybV90ZXJtKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fSG9vayAqKTApOyB9CisKKy8qIC4vZnJtX29wdHMuYyAqLworCisjdW5kZWYgc2V0X2Zvcm1fb3B0cworaW50CXNldF9mb3JtX29wdHMoCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV9vcHRzCitGb3JtX09wdGlvbnMgZm9ybV9vcHRzKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKEZvcm1fT3B0aW9ucyAqKTApOyB9CisKKyN1bmRlZiBmb3JtX29wdHNfb24KK2ludAlmb3JtX29wdHNfb24oCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV9vcHRzX29mZgoraW50CWZvcm1fb3B0c19vZmYoCisJCUZPUk0JKmZvcm0sIAorCQlGb3JtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9wYWdlLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX3BhZ2UKK2ludAlzZXRfZm9ybV9wYWdlKAorCQlGT1JNCSpmb3JtLCAKKwkJaW50CXBhZ2UpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fcGFnZQoraW50CWZvcm1fcGFnZSgKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9wb3N0LmMgKi8KKworI3VuZGVmIHBvc3RfZm9ybQoraW50CXBvc3RfZm9ybSgKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5wb3N0X2Zvcm0KK2ludAl1bnBvc3RfZm9ybSgKKwkJRk9STQkqZm9ybSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9yZXFfbmFtZS5jICovCisKKyN1bmRlZiBmb3JtX3JlcXVlc3RfbmFtZQorY29uc3QgY2hhciAqZm9ybV9yZXF1ZXN0X25hbWUoCisJCWludAlyZXF1ZXN0KQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIGZvcm1fcmVxdWVzdF9ieV9uYW1lCitpbnQJZm9ybV9yZXF1ZXN0X2J5X25hbWUoCisJCWNvbnN0IGNoYXIgKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9zY2FsZS5jICovCisKKyN1bmRlZiBzY2FsZV9mb3JtCitpbnQJc2NhbGVfZm9ybSgKKwkJY29uc3QgRk9STSAqZm9ybSwgCisJCWludAkqcm93cywgCisJCWludAkqY29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2ZybV9zdWIuYyAqLworCisjdW5kZWYgc2V0X2Zvcm1fc3ViCitpbnQJc2V0X2Zvcm1fc3ViKAorCQlGT1JNCSpmb3JtLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGZvcm1fc3ViCitXSU5ET1cJKmZvcm1fc3ViKAorCQljb25zdCBGT1JNICpmb3JtKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2ZybV91c2VyLmMgKi8KKworI3VuZGVmIHNldF9mb3JtX3VzZXJwdHIKK2ludAlzZXRfZm9ybV91c2VycHRyKAorCQlGT1JNCSpmb3JtLCAKKwkJdm9pZAkqdXNycHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBmb3JtX3VzZXJwdHIKK3ZvaWQJKmZvcm1fdXNlcnB0cigKKwkJY29uc3QgRk9STSAqZm9ybSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vZnJtX3dpbi5jICovCisKKyN1bmRlZiBzZXRfZm9ybV93aW4KK2ludAlzZXRfZm9ybV93aW4oCisJCUZPUk0JKmZvcm0sIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZm9ybV93aW4KK1dJTkRPVwkqZm9ybV93aW4oCisJCWNvbnN0IEZPUk0gKmZvcm0pCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vZnR5X2FsbnVtLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCB3aWR0aDsKKyAgfQorYWxudW1BUkc7CisKKyN1bmRlZiBUWVBFX0FMTlVNCitGSUVMRFRZUEUgKlRZUEVfQUxOVU07CisKKy8qIC4vZnR5X2FscGhhLmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCB3aWR0aDsKKyAgfQorYWxwaGFBUkc7CisKKyN1bmRlZiBUWVBFX0FMUEhBCitGSUVMRFRZUEUgKlRZUEVfQUxQSEE7CisKKy8qIC4vZnR5X2VudW0uYyAqLworCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgY2hhciAqKmt3ZHM7CisgICAgaW50IGNvdW50OworICAgIE5DVVJTRVNfQk9PTCBjaGVja2Nhc2U7CisgICAgTkNVUlNFU19CT09MIGNoZWNrdW5pcXVlOworICB9CitlbnVtQVJHOworCisjdW5kZWYgVFlQRV9FTlVNCitGSUVMRFRZUEUgKlRZUEVfRU5VTTsKKworLyogLi9mdHlfaW50LmMgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIGludCBwcmVjaXNpb247CisgICAgbG9uZyBsb3c7CisgICAgbG9uZyBoaWdoOworICB9CitpbnRlZ2VyQVJHOworCisjdW5kZWYgVFlQRV9JTlRFR0VSCitGSUVMRFRZUEUgKlRZUEVfSU5URUdFUjsKKworLyogLi9mdHlfaXB2NC5jICovCisjdW5kZWYgVFlQRV9JUFY0CitGSUVMRFRZUEUgKlRZUEVfSVBWNDsKKworLyogLi9mdHlfbnVtLmMgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorCit0eXBlZGVmIHN0cnVjdAorICB7CisgICAgaW50IHByZWNpc2lvbjsKKyAgICBkb3VibGUgbG93OworICAgIGRvdWJsZSBoaWdoOworICAgIHN0cnVjdCBsY29udiAqTDsKKyAgfQorbnVtZXJpY0FSRzsKKworI3VuZGVmIFRZUEVfTlVNRVJJQworRklFTERUWVBFICpUWVBFX05VTUVSSUM7CisKKy8qIC4vZnR5X3JlZ2V4LmMgKi8KKworI2luY2x1ZGUgPHJlZ2V4Lmg+CisKK3R5cGVkZWYgc3RydWN0CisgIHsKKyAgICByZWdleF90ICpwUmVnRXhwOworICAgIHVuc2lnbmVkIGxvbmcgKnJlZkNvdW50OworICB9CitSZWdFeHBfQXJnOworCisjdW5kZWYgVFlQRV9SRUdFWFAKK0ZJRUxEVFlQRSAqVFlQRV9SRUdFWFA7CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9mb3JtL21vZHVsZXMgYi9uY3Vyc2VzLTUuNy9mb3JtL21vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmOWY5ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2Zvcm0vbW9kdWxlcwpAQCAtMCwwICsxLDc2IEBACisjICRJZDogbW9kdWxlcyx2IDEuMTUgMjAwNi8xMi8yNCAwMDo1Mjo1OCB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CTE5OTUtb24KKyMKKworQCBiYXNlCisjIExpYnJhcnkgb2JqZWN0cworZl90cmFjZQkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9hcmcJCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfYXR0cglsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX2N1cnJlbnQJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9kZWYJCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfZHVwCQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX2Z0Y2hvaWNlCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfZnRsaW5rCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfaW5mbwlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX2p1c3QJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9saW5rCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfbWF4CQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX21vdmUJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9uZXdmdHlwCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfb3B0cwlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX3BhZAkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF9wYWdlCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmbGRfc3RhdAlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZmxkX3R5cGUJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZsZF91c2VyCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fY3Vyc29yCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fZGF0YQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX2RlZgkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV9kcml2ZXIJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV9ob29rCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fb3B0cwlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX3BhZ2UJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV9wb3N0CWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fcmVxX25hbWUJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV9zY2FsZQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnJtX3N1YgkJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2ZybV91c2VyCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmcm1fd2luCQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnR5X2FsbnVtCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmdHlfYWxwaGEJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2Z0eV9lbnVtCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmdHlfaW50CQlsaWIJCSQoc3JjZGlyKQkkKEZPUk1fUFJJVl9IKQorZnR5X2lwdjQJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKK2Z0eV9udW0JCWxpYgkJJChzcmNkaXIpCSQoRk9STV9QUklWX0gpCitmdHlfcmVnZXgJbGliCQkkKHNyY2RpcikJJChGT1JNX1BSSVZfSCkKKworIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL0NhcHMgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL0NhcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2M2M3ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvQ2FwcwpAQCAtMCwwICsxLDEyNjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1CisjICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+CisjCisjICRJZDogQ2Fwcyx2IDEuMzYgMjAwNi8wNS8yNyAxNTozMzowNCB0b20gRXhwICQKKyMKKyMgVGhpcyBpcyB0aGUgbWFzdGVyIHRlcm1jYXAvdGVybWluZm8gY2FwYWJpbGl0eSB0YWJsZS4KKyMKKyMgVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGluaXRpYWxpemVycyBmb3IgdGFibGVzIHRoYXQgZHJpdmUgdGljLAorIyBpbmZvY21wLCBhbmQgdGhlIGxpYnJhcnkgY29tcGlsYXRpb24gY29kZSB1c2VkIHRvIHN1cHBvcnQgdGhlIHRlcm1jYXAgCisjIGNvbXBhdGliaWxpdHkgaGFjay4gIEl0IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFidWxhciBwb3J0aW9uIG9mIHRoZQorIyB0ZXJtaW5mbyg1KSBtYW4gcGFnZTsgbGluZXMgYmVnaW5uaW5nIHdpdGggYCMlJyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gYmVjb21lCisjIHRoZSB0ZXJtaW5mbyB0YWJsZS4KKyMKKyMgVGhpcyBmaWxlIGhhcyB0aHJlZSBtYWpvciBzZWN0aW9uczsgYSBzdGFuZGFyZC1jYXBhYmlsaXRpZXMgdGFibGUsIHR3bworIyBleHRlbnNpb24tY2FwYWJpbGl0eSB0YWJsZXMsIGFuZCBhIHNlY3Rpb24gb2YgYWxpYXNlcyBkZWNsYXJhdGlvbnMuCisjIFRoZSBmaXJzdCB0d28gaGF2ZSB0aGUgc2FtZSBmb3JtYXQsIGFzIGZvbGxvd3M6CisjCisjIEZJTEUgRk9STUFUCisjCisjIENvbHVtbiAxOiB0ZXJtaW5mbyB2YXJpYWJsZSBuYW1lCisjIENvbHVtbiAyOiB0ZXJtaW5mbyBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDM6IGNhcGFiaWxpdHkgdHlwZSAoYm9vbGVhbiwgbnVtZXJpYywgb3Igc3RyaW5nKQorIyBDb2x1bW4gNDogdGVybWNhcCBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDU6IEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA2OiB2YWx1ZSBmb3IgS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDc6IExlYWQgd2l0aCBgWScgaWYgY2FwYWJpbGl0eSBzaG91bGQgYmUgZW1pdHRlZCBpbiB0ZXJtY2FwCisjICAgICAgICAgICB0cmFuc2xhdGlvbnMsIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDg6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24KKyMKKyMgVGhlIGNvZGVzIGZvbGxvd2luZyBbWS1dIGluIGNvbHVtbiA3IGRlc2NyaWJlIHRoZSB2ZXJzaW9ucyBvZiB0ZXJtY2FwIHdoaWNoCisjIHVzZSB0aGUgZ2l2ZW4gY2FwYWJpbGl0eS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbm90IHVzZWQgYnkgdGhlIGN1cnNlcyBsaWJyYXJ5CisjIHByb3BlcjsgcmF0aGVyLCBpdCdzIHRoZXJlIHRvIGhlbHAgdGhlIHRlcm1pbmZvIG1haW50YWluZXIgYXZvaWQgZW1pdHRpbmcKKyMgdGVybWNhcCBlbnRyeSB0cmFuc2xhdGlvbnMgdGhhdCBhcmUgbW9yZSB0aGFuIDEwMjMgYnl0ZXMgbG9uZyAoYW5kIHRhbmsgYQorIyBsb3Qgb2Ygb2xkIHRlcm1jYXAtdXNpbmcgcHJvZ3JhbXMpLiAgVGhlIGNvZGVzIHJlYWQgYXMgZm9sbG93czoKKyMJQiA9IG1lbnRpb25lZCBpbiB0aGUgQlNEIG1hbiBwYWdlIGZvciA0LjRCU0QgY3Vyc2VzCisjCUMgPSB1c2VkIGJ5IHRoZSA0LjRCU0QgY3Vyc2VzIGxpYnJhcnkKKyMJRyA9IG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgR05VIHRlcm1jYXAKKyMJRSA9IHVzZWQgYnkgR05VIEVtYWNzCisjCUsgPSByZW1vdmUgdGhpcyB0ZXJtaW5mbyBjYXBhYmlsaXR5IHdoZW4gdHJhbnNsYXRpbmcgdG8gc3RhbmRhcmQgZm9ybWF0CisjIFRoZSBpbXBvcnRhbnQgY29kZXMgYXJlIEMgYW5kIEUuICBBIGNhcCB3aXRoIEMgb3IgRSBzaG91bGQgYmUgcHJlc2VydmVkIGluCisjIHRyYW5zbGF0aW9uIGlmIHBvc3NpYmxlLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBwcmVzZXJ2aW5nIGFsbCBzdWNoIGNhcHMgbWF5CisjIGxlYWQgdG8gc29tZSB0ZXJtY2FwIHRyYW5zbGF0aW9ucyBiZWluZyB0b28gbG9uZy4gIFRoZSB0ZXJtY2FwIG1haW50YWluZXIKKyMgaGFzIGEgYml0IG9mIGEganVnZ2xpbmcgYWN0IHRvIGRvLi4ucG90ZW50aWFsIHByb2JsZW0gY2FzZXMgYXJlIG1hcmtlZCB3aXRoCisjIGFuIGFzdGVyaXNrICgqKS4KKyMKKyMgVGhlIGFsaWFzZXMgc2VjdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisjCisjIENvbHVtbiAxOiBlaXRoZXIgYGNhcGFsaWFzJyBvciBgaW5mb2FsaWFzJworIyBDb2x1bW4gMjogbmFtZSB0byBiZSBhbGlhc2VkCisjIENvbHVtbiAzOiB3aGF0IG5hbWUgaXQgc2hvdWxkIHRyYW5zbGF0ZSB0by4gIFRoZSBuYW1lIElHTk9SRSBtZWFucyBpdAorIyAgICAgICAgICAgc2hvdWxkIGJlIGRpc2NhcmRlZCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgorIyBDb2x1bW4gNDogbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNldCAodXNlZCBmb3IgY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcykKKyMgQ29sdW1uIDU6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24gKHVzdWFsbHkgYW4gYXNzb2NpYXRlZCB0ZXJtaW5mbyB2YXJpYWJsZSkKKyMKKyMgSEFORExJTkcgVEVSTUNBUCBBTkQgVEVSTUlORk8gRVhURU5TSU9OUworIworIyBUaGVyZSBhcmUgYmFzaWNhbGx5IGZpdmUgZGlmZmVyZW50IHdheXMgdG8gaGFuZGxlIHRlcm1jYXAgYW5kIHRlcm1pbmZvCisjIGV4dGVuc2lvbnM6CisjCisjIDEuIERvbid0IGxpc3QgdGhlIGNhcG5hbWUgaGVyZSwgb3IgbGlzdCBpdCBidXQgY29tbWVudCBpdCBvdXQgKHRoZSBsYXR0ZXIKKyMgaXMgcHJlZmVyYWJsZTsgc29tZW9uZSBtaWdodCB3YW50IHRvIGhhbmRsZSBpdCBpbiB0aGUgZnV0dXJlKS4gIElmIHlvdSBkbworIyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIHRyZWF0ZWQgYXMgdW5rbm93biBhbmQgcmFpc2UgYSB3YXJuaW5nIGZyb20KKyMgdGhlIGNvbXBpbGVyLgorIworIyAyLiBBbGlhcyBpdC4gIFRoaXMgaXMgYXBwcm9wcmlhdGUgaWYgdGhlIGNhcGFiaWxpdHkgaGFzIHRoZSBzYW1lIG1lYW5pbmcKKyMgYXMgYW4gYWxyZWFkeS1zdXBwb3J0ZWQgb25lLiAgVGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIGFsaWFzaW5nLCBlbWl0dGluZworIyBhbiBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2Ugd2hlbmV2ZXIgYW4gYWxpYXMgZmlyZXMuCisjCisjIDMuIExpc3QgaXQgaW4gdGhlIHN0YW5kYXJkIHRhYmxlLiAgWW91IGFsbW9zdCBjZXJ0YWlubHkgZG8gKm5vdCogd2FudAorIyB0byBkbyB0aGlzIC0tIHRoZSBjYXBhYmlsaXRpZXMgaW4gdGhhdCBvbmUsIGFuZCB0aGVpciBvcmRlciwgaGF2ZSBiZWVuCisjIGNhcmVmdWxseSBjaG9zZW4gdG8gYmUgU1ZyNC1iaW5hcnktY29tcGF0aWJsZSB3aGVuIHRoZXkncmUgd3JpdHRlbiBvdXQKKyMgYXMgYSB0ZXJtaW5mbyBvYmplY3QsIGFuZCBicmVha2luZyB0aGlzIHdvdWxkIGJlIGJhZC4gIEl0J3MgdXAgdGhlIG5jdXJzZXMKKyMgbGlicmFyeSB3aGF0IHRvIGRvIHdpdGggdGhlIHRlcm1pbmZvIGRhdGEgYWZ0ZXIgaXQncyByZWFkIGluLgorIworIyA0LiBMaXN0IGl0IGluIHRoZSBhbGlhc2VzIHRhYmxlIHdpdGggYW4gSUdOT1JFIHRhcmdldCBmaWVsZC4gIElmIHlvdQorIyBkbyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQgb24gaW5wdXQgKHRob3VnaCB0aGUgdXNlciB3aWxsCisjIGdldCBhIHdhcm5pbmcgbWVzc2FnZSBhYm91dCBpdCkuCisjCisjIDUuIExpc3QgaXQgaW4gdGhlIGV4dGVuc2lvbnMgdGFibGUuIElmIHlvdSBkbyB0aGlzLCB0aGUgY29tcGlsZXIgd2lsbAorIyBzaWxlbnRseSBhY2NlcHQgdGhlIGNhcGFiaWxpdHksIGJ1dCB0aGUgY3Vyc2VzIGxpYnJhcnkgcHJvcGVyIHdpbGwgbmV2ZXIKKyMgc2VlIGl0IChiZWNhdXNlIGl0IHdvbid0IGJlIHdyaXR0ZW4gb3V0IGFzIHBhcnQgb2YgdGhlIHRlcm1pbmZvIG9iamVjdAorIyBmb3JtYXQpLiAgSXQncyB1cCB0byB5b3Ugd2hhdCB5b3UgaGF2ZSB0aGUgY29tcGlsZXIgZG8gd2l0aCBpdC4KKyMKKyMgVGhlcmUgYXJlIHR3byBvcHBvc2l0ZSByZWFzb25zIHRvIGNob29zZSBvcHRpb24gNS4gIE9uZSBpcyB3aGVuIHlvdSB3YW50CisjIHRvIGVhdCB0aGUgY2FwYWJpbGl0eSBzaWxlbnRseSBhbmQgZGlzY2FyZCBpdCB3aGVuIGRvaW5nIHRyYW5zbGF0aW9ucworIyB0byB0ZXJtaW5mbyB3aXRoIHRpYyAtSS4gIFNvbWUgdmVyeSBvbGQgb2Jzb2xldGUgQlNEIGNhcHMgbGlrZSA6a246IGFyZQorIyBpbiB0aGlzIGNsYXNzLiAgTm90aGluZyB3aWxsIGV2ZXIgdXNlIHRoZW0gYWdhaW4uCisjCisjIE1vcmUgdXN1YWxseSwgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIHRyeSB0byBkZWR1Y2Ugc29tZXRoaW5nIGZyb20gdGhlCisjIGNhcGFiaWxpdHkgdmFsdWUgdGhhdCBpdCBjYW4gdXNlIHRvIHRyYW5zbGF0ZSBpdCBpbnRvIHlvdXIgb3V0cHV0IGZvcm1hdC4KKyMgWW91J2xsIG5lZWQgdG8gd3JpdGUgY3VzdG9tIGNvZGUsIHByb2JhYmx5IGluIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoKSBvcgorIyBwb3N0cHJvY2Vzc190ZXJtaW5mbygpLCB0byBoYW5kbGUgdGhlIHRyYW5zbGF0aW9uLgorIworIyBDT05UUk9MTElORyBFTlRSWSBMRU5HVEggCisjCisjIE5vdGVzIG9uIHNwZWNpZmljIGVsaXNpb25zIG1hZGUgdG8gZml0IHRyYW5zbGF0aW9ucyB3aXRoaW4gMTAyMyBieXRlczoKKyMKKyMgTWFjaGluZXMgd2l0aCBJQk0gUEMtbGlrZSBrZXlib2FyZHMgd2FudCB0byBiZSBhYmxlIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nCisjIGtleXM6IGtleV9ucGFnZSwga2V5X3BwYWdlLCBrZXlfaG9tZSwga2V5X2xsICh3aGljaCBpcyB1c2VkIGZvciBpbiB0ZXJtY2FwLQorIyBvbmx5IGVudmlyb25tZW50cyBmb3IgRW5kIG9yIEhvbWUtRG93biksIGtleV9kYywgYW5kIGtleV9pYy4gIFRoaXMgaXMgYWxzbworIyB0aGUgc2V0IG9mIGtleXMgdGhlIGBqb2UnIGVkaXRvciB3aWxsIGJlIHVwc2V0IGlmIGl0IGNhbid0IHNlZS4gIFNvIGRvbid0IAorIyB0cmltIHRob3NlIG91dCBvZiB0aGUgc2V0IHRvIGJlIHRyYW5zbGF0ZWQgdG8gdGVybWNhcCwgb3IgdmFyaW91cyB1c2VycyBvZgorIyB0aGUgdGVybWNhcCBmaWxlIHdpbGwgYmVjb21lIGlyYXRlLgorIworIyBJdCBtaWdodCBsb29rIHRlbXB0aW5nIHRvIGxlYXZlIHRob3NlIGxvbmcgaW5pdCBzdHJpbmdzIG91dCBvZiB0cmFuc2xhdGlvbnMuCisjIFdlIGNhbid0IGRvIGl0ICh5ZXQpOyA0LjRCU0QgdHB1dCBhbmQgdHNldCB1c2UgdGhlbS4KKyMKKyMgV2UgcmV0YWluIHRoZSBzZ3IgY2FwYWJpbGl0eSBpbiB0cmFuc2xhdGlvbiBpbiBzcGl0ZSBvZiB0aGUgZmFjdCB0aGF0IG5laXRoZXIKKyMgNC40QlNEIG5vciBHTlUgRW1hY3MgdXNlcyBpdCwgYmVjYXVzZSAoYSkgc29tZSBlbnRyeSBuYW1pbmcgZGlzdGluY3Rpb25zIGFyZQorIyBoYXJkIHRvIHVuZGVyc3RhbmQgd2l0aG91dCBpdCwgYW5kIChiKSB0aGUgZW50cmllcyBpbiB3aGljaCBpdCBpcyBsb25nIHRlbmQKKyMgdG8gYmUgb2xkZXIgdHlwZXMgdGhhdCBkb24ndCB1c2UgdXAgYSBsb3Qgb2Ygc3RyaW5nIHNwYWNlIG9uIGZ1bmN0aW9uIGtleXMuCisjIFRoZSB0aWMoMSkgdHJhbnNsYXRpb24gY29kZSB3aWxsIGNvbXBsYWluIGFuZCBlbGlkZSBpdCBpZiBpdCBtYWtlcyBhIGNyaXRpY2FsCisjIGRpZmZlcmVuY2UgKHRoZXJlIGlzIHNwZWNpYWwgY29kZSBpbiB0aWMgdG8gcmVjb2duaXplIHRoaXMgc2l0dWF0aW9uKS4KKyMKKyMgWWVzLCBCU0QgdHNldCgxKSB1c2VzIGhwYS4gIFdlIGVsaWRlIGhwYS92cGEgYW55d2F5IGJlY2F1c2UgdGhlIG1vdGlvbgorIyBvcHRpbWl6ZXIgaW4gQlNEIGN1cnNlcyBkaWRuJ3QgdXNlIHRoZW0uICBUaGlzIG9taXNzaW9uIHNlZW1zIHRvIGJlIHRoZQorIyBzaW5nbGUgbW9zdCBlZmZlY3RpdmUgb25lLCBpdCBzaG9ydGVuZWQgdGhlIHJlc29sdmVkIGxlbmd0aCBvZiBhbGwgdGhpcnRlZW4KKyMgcHJvYmxlbSBlbnRyaWVzIGluIHRoZSA5LjkuMCB2ZXJzaW9uIG9mIHRoZSB0ZXJtaW5mbyBtYXN0ZXIgYmVsb3cgY3JpdGljYWwuCisjCisjIEl0IHdvdWxkIGJlIG5pY2UgdG8ga2VlcCBmMTEgYW5kIGYxMiBmb3IgRW1hY3MgdXNlLCBidXQgYSBjb3VwbGUgb2YgdGVybWNhcAorIyB0cmFuc2xhdGlvbnMgZ28gYmFjayBvdmVyIGNyaXRpY2FsIGlmIHdlIGRvIHRoaXMuICBBcyA0LjRCU0QgY3Vyc2VzIGZhZGVzCisjIGludG8gaGlzdG9yeSBhbmQgR05VIHRlcm1jYXAncyBhcHBsaWNhdGlvbiBiYXNlIHNocmlua3MgdG93YXJkcyBiZWluZyBHTlUgCisjIEVtYWNzIG9ubHksIHdlJ2xsIHByb2JhYmx5IGVsaWRlIG91dCBzb21lIEJTRC1vbmx5IGNhcGFiaWxpdGllcyBpbiBvcmRlcgorIyB0byBidXkgc3BhY2UgZm9yIG5vbi1lc3NlbnRpYWxzIEVtYWNzIGlzIHN0aWxsIHVzaW5nLiAgQ2FwYWJpbGl0aWVzIGhpZ2gKKyMgb24gdGhhdCBoaXQgbGlzdDogcmMsIHNjLCB1Yy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFNUQU5EQVJEIENBUEFCSUxJVElFUworIworIyVUaGUgZm9sbG93aW5nIGlzIGEgY29tcGxldGUgdGFibGUgb2YgdGhlIGNhcGFiaWxpdGllcyBpbmNsdWRlZCBpbiBhCisjJXRlcm1pbmZvIGRlc2NyaXB0aW9uIGJsb2NrIGFuZCBhdmFpbGFibGUgdG8gdGVybWluZm8tdXNpbmcgY29kZS4gIEluIGVhY2gKKyMlbGluZSBvZiB0aGUgdGFibGUsCisjJQorIyVUaGUgXGZCdmFyaWFibGVcZlIgaXMgdGhlIG5hbWUgYnkgd2hpY2ggdGhlIHByb2dyYW1tZXIgKGF0IHRoZSB0ZXJtaW5mbyBsZXZlbCkKKyMlYWNjZXNzZXMgdGhlIGNhcGFiaWxpdHkuCisjJQorIyVUaGUgXGZCY2FwbmFtZVxmUiBpcyB0aGUgc2hvcnQgbmFtZSB1c2VkIGluIHRoZSB0ZXh0IG9mIHRoZSBkYXRhYmFzZSwKKyMlYW5kIGlzIHVzZWQgYnkgYSBwZXJzb24gdXBkYXRpbmcgdGhlIGRhdGFiYXNlLgorIyVXaGVuZXZlciBwb3NzaWJsZSwgY2FwbmFtZXMgYXJlIGNob3NlbiB0byBiZSB0aGUgc2FtZSBhcyBvciBzaW1pbGFyIHRvCisjJXRoZSBBTlNJIFgzLjY0LTE5Nzkgc3RhbmRhcmQgKG5vdyBzdXBlcnNlZGVkIGJ5IEVDTUEtNDgsIHdoaWNoIHVzZXMgCisjJWlkZW50aWNhbCBvciB2ZXJ5IHNpbWlsYXIgbmFtZXMpLiAgU2VtYW50aWNzIGFyZSBhbHNvIGludGVuZGVkIHRvIG1hdGNoCisjJXRob3NlIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorIyUKKyMlVGhlIHRlcm1jYXAgY29kZSBpcyB0aGUgb2xkCisjJS5CIHRlcm1jYXAKKyMlY2FwYWJpbGl0eSBuYW1lIChzb21lIGNhcGFiaWxpdGllcyBhcmUgbmV3LCBhbmQgaGF2ZSBuYW1lcyB3aGljaCB0ZXJtY2FwCisjJWRpZCBub3Qgb3JpZ2luYXRlKS4KKyMlLlAKKyMlQ2FwYWJpbGl0eSBuYW1lcyBoYXZlIG5vIGhhcmQgbGVuZ3RoIGxpbWl0LCBidXQgYW4gaW5mb3JtYWwgbGltaXQgb2YgNQorIyVjaGFyYWN0ZXJzIGhhcyBiZWVuIGFkb3B0ZWQgdG8ga2VlcCB0aGVtIHNob3J0IGFuZCB0byBhbGxvdyB0aGUgdGFicyBpbgorIyV0aGUgc291cmNlIGZpbGUKKyMlLkIgQ2FwcworIyV0byBsaW5lIHVwIG5pY2VseS4KKyMlCisjJUZpbmFsbHksIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBhdHRlbXB0cyB0byBjb252ZXkgdGhlIHNlbWFudGljcyBvZiB0aGUKKyMlY2FwYWJpbGl0eS4gIFlvdSBtYXkgZmluZCBzb21lIGNvZGVzIGluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZDoKKyMlLlRQCisjJShQKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSBiZSBzcGVjaWZpZWQKKyMlLlRQCisjJSNbMS05XQorIyVpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmluZyBpcyBwYXNzZWQgdGhyb3VnaCB0cGFybSB3aXRoCisjJXBhcm1zIGFzIGdpdmVuICgjXGZJaVxmUCkuCisjJS5UUAorIyUoUCopCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IHZhcnkgaW4gcHJvcG9ydGlvbiB0byB0aGUgbnVtYmVyIG9mCisjJWxpbmVzIGFmZmVjdGVkCisjJS5UUAorIyUoI1xkXGZJaVxmUFx1KQorIyVpbmRpY2F0ZXMgdGhlIFxmSWlcZlBcdXRoXGQgcGFyYW1ldGVyLgorIyUKKyMlLlBQCisjJSBUaGVzZSBhcmUgdGhlIGJvb2xlYW4gY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQkJvb2xlYW5zCW5hbWUJQ29kZVxmUgorYXV0b19sZWZ0X21hcmdpbgkJYncJYm9vbAlidwktCS0JWUItRy0JY3ViMSB3cmFwcyBmcm9tIGNvbHVtbiAwIHRvIGxhc3QgY29sdW1uCithdXRvX3JpZ2h0X21hcmdpbgkJYW0JYm9vbAlhbQktCS0JWUJDR0UJdGVybWluYWwgaGFzIGF1dG9tYXRpYyBtYXJnaW5zCitub19lc2NfY3RsYwkJCXhzYglib29sCXhiCS0JLQlZQkNHLQliZWVoaXZlIChmMT1lc2NhcGUsIGYyPWN0cmwgQykKK2Nlb2xfc3RhbmRvdXRfZ2xpdGNoCQl4aHAJYm9vbAl4cwktCS0JWUJDR0UJc3RhbmRvdXQgbm90IGVyYXNlZCBieSBvdmVyd3JpdGluZyAoaHApCitlYXRfbmV3bGluZV9nbGl0Y2gJCXhlbmwJYm9vbAl4bgktCS0JWUJDR0UJbmV3bGluZSBpZ25vcmVkIGFmdGVyIDgwIGNvbHMgKGNvbmNlcHQpCitlcmFzZV9vdmVyc3RyaWtlCQllbwlib29sCWVvCS0JLQlZQkNHLQljYW4gZXJhc2Ugb3ZlcnN0cmlrZXMgd2l0aCBhIGJsYW5rCitnZW5lcmljX3R5cGUJCQlnbglib29sCWduCS0JLQlZQi1HLQlnZW5lcmljIGxpbmUgdHlwZQoraGFyZF9jb3B5CQkJaGMJYm9vbAloYwktCS0JWUJDRy0JaGFyZGNvcHkgdGVybWluYWwKK2hhc19tZXRhX2tleQkJCWttCWJvb2wJa20JLQktCVlCLUdFCUhhcyBhIG1ldGEga2V5IChpLmUuLCBzZXRzIDh0aC1iaXQpCitoYXNfc3RhdHVzX2xpbmUJCQlocwlib29sCWhzCS0JLQlZQi1HLQloYXMgZXh0cmEgc3RhdHVzIGxpbmUKK2luc2VydF9udWxsX2dsaXRjaAkJaW4JYm9vbAlpbgktCS0JWUJDR0UJaW5zZXJ0IG1vZGUgZGlzdGluZ3Vpc2hlcyBudWxscworbWVtb3J5X2Fib3ZlCQkJZGEJYm9vbAlkYQktCS0JWUJDRy0JZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYWJvdmUgdGhlIHNjcmVlbgorbWVtb3J5X2JlbG93CQkJZGIJYm9vbAlkYgktCS0JWUItR0UJZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYmVsb3cgdGhlIHNjcmVlbgorbW92ZV9pbnNlcnRfbW9kZQkJbWlyCWJvb2wJbWkJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBpbnNlcnQgbW9kZQorbW92ZV9zdGFuZG91dF9tb2RlCQltc2dyCWJvb2wJbXMJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBzdGFuZG91dCBtb2RlCitvdmVyX3N0cmlrZQkJCW9zCWJvb2wJb3MJLQktCVlCQ0ctCXRlcm1pbmFsIGNhbiBvdmVyc3RyaWtlCitzdGF0dXNfbGluZV9lc2Nfb2sJCWVzbG9rCWJvb2wJZXMJLQktCVlCLUctCWVzY2FwZSBjYW4gYmUgdXNlZCBvbiB0aGUgc3RhdHVzIGxpbmUKK2Rlc3RfdGFic19tYWdpY19zbXNvCQl4dAlib29sCXh0CS0JLQlZQkNHRQl0YWJzIGRlc3RydWN0aXZlLCBtYWdpYyBzbyBjaGFyICh0MTA2MSkKK3RpbGRlX2dsaXRjaAkJCWh6CWJvb2wJaHoJLQktCVlCLUdFCWNhbm5vdCBwcmludCB+J3MgKGhhemVsdGluZSkKK3RyYW5zcGFyZW50X3VuZGVybGluZQkJdWwJYm9vbAl1bAktCS0JWUJDR0UJdW5kZXJsaW5lIGNoYXJhY3RlciBvdmVyc3RyaWtlcworeG9uX3hvZmYJCQl4b24JYm9vbAl4bwktCS0JWUItLS0JdGVybWluYWwgdXNlcyB4b24veG9mZiBoYW5kc2hha2luZworbmVlZHNfeG9uX3hvZmYJCQlueG9uCWJvb2wJbngJLQktCS0tLS0tCXBhZGRpbmcgd2lsbCBub3Qgd29yaywgeG9uL3hvZmYgcmVxdWlyZWQKK3BydHJfc2lsZW50CQkJbWM1aQlib29sCTVpCS0JLQktLS0tLQlwcmludGVyIHdpbGwgbm90IGVjaG8gb24gc2NyZWVuCitoYXJkX2N1cnNvcgkJCWNodHMJYm9vbAlIQwktCS0JLS0tLS0JY3Vyc29yIGlzIGhhcmQgdG8gc2VlCitub25fcmV2X3JtY3VwCQkJbnJybWMJYm9vbAlOUgktCS0JLS0tLS0Jc21jdXAgZG9lcyBub3QgcmV2ZXJzZSBybWN1cAorbm9fcGFkX2NoYXIJCQlucGMJYm9vbAlOUAktCS0JLS0tLS0JcGFkIGNoYXJhY3RlciBkb2VzIG5vdCBleGlzdAorbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbgkJbmRzY3IJYm9vbAlORAktCS0JLS0tLS0Jc2Nyb2xsaW5nIHJlZ2lvbiBpcyBub24tZGVzdHJ1Y3RpdmUKK2Nhbl9jaGFuZ2UJCQljY2MJYm9vbAljYwktCS0JLS0tLS0JdGVybWluYWwgY2FuIHJlLWRlZmluZSBleGlzdGluZyBjb2xvcnMKK2JhY2tfY29sb3JfZXJhc2UJCWJjZQlib29sCXV0CS0JLQktLS0tLQlzY3JlZW4gZXJhc2VkIHdpdGggYmFja2dyb3VuZCBjb2xvcgoraHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uCWhscwlib29sCWhsCS0JLQktLS0tLQl0ZXJtaW5hbCB1c2VzIG9ubHkgSExTIGNvbG9yIG5vdGF0aW9uIChUZWt0cm9uaXgpCitjb2xfYWRkcl9nbGl0Y2gJCQl4aHBhCWJvb2wJWUEJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciBocGEvbWhwYSBjYXBzCitjcl9jYW5jZWxzX21pY3JvX21vZGUJCWNyeG0JYm9vbAlZQgktCS0JLS0tLS0JdXNpbmcgY3IgdHVybnMgb2ZmIG1pY3JvIG1vZGUKK2hhc19wcmludF93aGVlbAkJCWRhaXN5CWJvb2wJWUMJLQktCS0tLS0tCXByaW50ZXIgbmVlZHMgb3BlcmF0b3IgdG8gY2hhbmdlIGNoYXJhY3RlciBzZXQKK3Jvd19hZGRyX2dsaXRjaAkJCXh2cGEJYm9vbAlZRAktCS0JLS0tLS0Jb25seSBwb3NpdGl2ZSBtb3Rpb24gZm9yIHZwYS9tdnBhIGNhcHMKK3NlbWlfYXV0b19yaWdodF9tYXJnaW4JCXNhbQlib29sCVlFCS0JLQktLS0tLQlwcmludGluZyBpbiBsYXN0IGNvbHVtbiBjYXVzZXMgY3IKK2NwaV9jaGFuZ2VzX3JlcwkJCWNwaXgJYm9vbAlZRgktCS0JLS0tLS0JY2hhbmdpbmcgY2hhcmFjdGVyIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorbHBpX2NoYW5nZXNfcmVzCQkJbHBpeAlib29sCVlHCS0JLQktLS0tLQljaGFuZ2luZyBsaW5lIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIG51bWVyaWMgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQk51bWVyaWMJbmFtZQlDb2RlXGZSCitjb2x1bW5zCQkJCWNvbHMJbnVtCWNvCS0JLQlZQkNHRQludW1iZXIgb2YgY29sdW1ucyBpbiBhIGxpbmUKK2luaXRfdGFicwkJCWl0CW51bQlpdAktCS0JWUItRy0JdGFicyBpbml0aWFsbHkgZXZlcnkgIyBzcGFjZXMKK2xpbmVzCQkJCWxpbmVzCW51bQlsaQktCS0JWUJDR0UJbnVtYmVyIG9mIGxpbmVzIG9uIHNjcmVlbiBvciBwYWdlCitsaW5lc19vZl9tZW1vcnkJCQlsbQludW0JbG0JLQktCVlCLUctCWxpbmVzIG9mIG1lbW9yeSBpZiA+IGxpbmUuIDAgbWVhbnMgdmFyaWVzCittYWdpY19jb29raWVfZ2xpdGNoCQl4bWMJbnVtCXNnCS0JLQlZQkNHRQludW1iZXIgb2YgYmxhbmsgY2hhcmFjdGVycyBsZWZ0IGJ5IHNtc28gb3Igcm1zbworcGFkZGluZ19iYXVkX3JhdGUJCXBiCW51bQlwYgktCS0JWUItR0UJbG93ZXN0IGJhdWQgcmF0ZSB3aGVyZSBwYWRkaW5nIG5lZWRlZAordmlydHVhbF90ZXJtaW5hbAkJdnQJbnVtCXZ0CS0JLQlZQi0tLQl2aXJ0dWFsIHRlcm1pbmFsIG51bWJlciAoQ0IvdW5peCkKK3dpZHRoX3N0YXR1c19saW5lCQl3c2wJbnVtCXdzCS0JLQlZQi1HLQludW1iZXIgb2YgY29sdW1ucyBpbiBzdGF0dXMgbGluZQorbnVtX2xhYmVscwkJCW5sYWIJbnVtCU5sCS0JLQktLS0tLQludW1iZXIgb2YgbGFiZWxzIG9uIHNjcmVlbgorbGFiZWxfaGVpZ2h0CQkJbGgJbnVtCWxoCS0JLQktLS0tLQlyb3dzIGluIGVhY2ggbGFiZWwKK2xhYmVsX3dpZHRoCQkJbHcJbnVtCWx3CS0JLQktLS0tLQljb2x1bW5zIGluIGVhY2ggbGFiZWwKK21heF9hdHRyaWJ1dGVzCQkJbWEJbnVtCW1hCS0JLQlZQkMtLQltYXhpbXVtIGNvbWJpbmVkIGF0dHJpYnV0ZXMgdGVybWluYWwgY2FuIGhhbmRsZQorbWF4aW11bV93aW5kb3dzCQkJd251bQludW0JTVcJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGRlZmluZWFibGUgd2luZG93cworIyBUaGVzZSBjYW1lIGluIHdpdGggU1ZyNCdzIGNvbG9yIHN1cHBvcnQKK21heF9jb2xvcnMJCQljb2xvcnMJbnVtCUNvCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgb24gc2NyZWVuCittYXhfcGFpcnMJCQlwYWlycwludW0JcGEJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGNvbG9yLXBhaXJzIG9uIHRoZSBzY3JlZW4KK25vX2NvbG9yX3ZpZGVvCQkJbmN2CW51bQlOQwktCS0JLS0tLS0JdmlkZW8gYXR0cmlidXRlcyB0aGF0IGNhbm5vdCBiZSB1c2VkIHdpdGggY29sb3JzCisjJS5URQorIyUuYWQKKyMlCisjJVRoZSBmb2xsb3dpbmcgbnVtZXJpYyBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQgaW4gdGhlIFNWcjQuMCB0ZXJtIHN0cnVjdHVyZSwKKyMlYnV0IGFyZSBub3QgeWV0IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLiAgVGhleSBjYW1lIGluIHdpdGggU1ZyNCdzCisjJXByaW50ZXIgc3VwcG9ydC4KKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorYnVmZmVyX2NhcGFjaXR5CQkJYnVmc3oJbnVtCVlhCS0JLQktLS0tLQludW1iZXJzIG9mIGJ5dGVzIGJ1ZmZlcmVkIGJlZm9yZSBwcmludGluZworZG90X3ZlcnRfc3BhY2luZwkJc3BpbnYJbnVtCVliCS0JLQktLS0tLQlzcGFjaW5nIG9mIHBpbnMgdmVydGljYWxseSBpbiBwaW5zIHBlciBpbmNoCitkb3RfaG9yel9zcGFjaW5nCQlzcGluaAludW0JWWMJLQktCS0tLS0tCXNwYWNpbmcgb2YgZG90cyBob3Jpem9udGFsbHkgaW4gZG90cyBwZXIgaW5jaAorbWF4X21pY3JvX2FkZHJlc3MJCW1hZGRyCW51bQlZZAktCS0JLS0tLS0JbWF4aW11bSB2YWx1ZSBpbiBtaWNyb18uLi5fYWRkcmVzcworbWF4X21pY3JvX2p1bXAJCQltanVtcAludW0JWWUJLQktCS0tLS0tCW1heGltdW0gdmFsdWUgaW4gcGFybV8uLi5fbWljcm8KK21pY3JvX2NvbF9zaXplCQkJbWNzCW51bQlZZgktCS0JLS0tLS0JY2hhcmFjdGVyIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK21pY3JvX2xpbmVfc2l6ZQkJCW1scwludW0JWWcJLQktCS0tLS0tCWxpbmUgc3RlcCBzaXplIHdoZW4gaW4gbWljcm8gbW9kZQorbnVtYmVyX29mX3BpbnMJCQlucGlucwludW0JWWgJLQktCS0tLS0tCW51bWJlcnMgb2YgcGlucyBpbiBwcmludC1oZWFkCitvdXRwdXRfcmVzX2NoYXIJCQlvcmMJbnVtCVlpCS0JLQktLS0tLQlob3Jpem9udGFsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfbGluZQkJCW9ybAludW0JWWoJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfaG9yel9pbmNoCQlvcmhpCW51bQlZawktCS0JLS0tLS0JaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBpbmNoCitvdXRwdXRfcmVzX3ZlcnRfaW5jaAkJb3J2aQludW0JWWwJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGluY2gKK3ByaW50X3JhdGUJCQljcHMJbnVtCVltCS0JLQktLS0tLQlwcmludCByYXRlIGluIGNoYXJhY3RlcnMgcGVyIHNlY29uZAord2lkZV9jaGFyX3NpemUJCQl3aWRjcwludW0JWW4JLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBkb3VibGUgd2lkZSBtb2RlCitidXR0b25zCQkJCWJ0bnMJbnVtCUJUCS0JLQktLS0tLQludW1iZXIgb2YgYnV0dG9ucyBvbiBtb3VzZQorYml0X2ltYWdlX2VudHdpbmluZwkJYml0d2luCW51bQlZbwktCS0JLS0tLS0JbnVtYmVyIG9mIHBhc3NlcyBmb3IgZWFjaCBiaXQtaW1hZ2Ugcm93CitiaXRfaW1hZ2VfdHlwZQkJCWJpdHlwZQludW0JWXAJLQktCS0tLS0tCXR5cGUgb2YgYml0LWltYWdlIGRldmljZQorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIHN0cmluZyBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCU3RyaW5nCW5hbWUJQ29kZVxmUgorYmFja190YWIJCQljYnQJc3RyCWJ0CS0JCS0JWUJDR0UJYmFjayB0YWIgKFApCitiZWxsCQkJCWJlbAlzdHIJYmwJLQkJLQlZQi1HRQlhdWRpYmxlIHNpZ25hbCAoYmVsbCkgKFApCitjYXJyaWFnZV9yZXR1cm4JCQljcglzdHIJY3IJLQkJLQlZQkNHRQljYXJyaWFnZSByZXR1cm4gKFAqKSAoUCopCitjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbgkJY3NyCXN0cgljcwktCQktCVlCQ0dFCWNoYW5nZSByZWdpb24gdG8gbGluZSAjMSB0byBsaW5lICMyIChQKQorY2xlYXJfYWxsX3RhYnMJCQl0YmMJc3RyCWN0CS0JCS0JWUItRy0JY2xlYXIgYWxsIHRhYiBzdG9wcyAoUCkKK2NsZWFyX3NjcmVlbgkJCWNsZWFyCXN0cgljbAktCQktCVlCQ0dFCWNsZWFyIHNjcmVlbiBhbmQgaG9tZSBjdXJzb3IgKFAqKQorY2xyX2VvbAkJCQllbAlzdHIJY2UJLQkJLQlZQkNHRQljbGVhciB0byBlbmQgb2YgbGluZSAoUCkKK2Nscl9lb3MJCQkJZWQJc3RyCWNkCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIHNjcmVlbiAoUCopCitjb2x1bW5fYWRkcmVzcwkJCWhwYQlzdHIJY2gJLQkJLQktQi1HRSoJaG9yaXpvbnRhbCBwb3NpdGlvbiAjMSwgYWJzb2x1dGUgKFApCitjb21tYW5kX2NoYXJhY3RlcgkJY21kY2gJc3RyCUNDCS0JCS0JWUItRy0JdGVybWluYWwgc2V0dGFibGUgY21kIGNoYXJhY3RlciBpbiBwcm90b3R5cGUgIT8KK2N1cnNvcl9hZGRyZXNzCQkJY3VwCXN0cgljbQktCQktCVlCQ0dFCW1vdmUgdG8gcm93ICMxIGNvbHVtbnMgIzIKK2N1cnNvcl9kb3duCQkJY3VkMQlzdHIJZG8JLQkJLQlZQkNHRQlkb3duIG9uZSBsaW5lCitjdXJzb3JfaG9tZQkJCWhvbWUJc3RyCWhvCS0JCS0JWUJDR0UJaG9tZSBjdXJzb3IgKGlmIG5vIGN1cCkKK2N1cnNvcl9pbnZpc2libGUJCWNpdmlzCXN0cgl2aQktCQktCVlCLUctCW1ha2UgY3Vyc29yIGludmlzaWJsZQorY3Vyc29yX2xlZnQJCQljdWIxCXN0cglsZQktCQktCVlCQ0dFCW1vdmUgbGVmdCBvbmUgc3BhY2UKK2N1cnNvcl9tZW1fYWRkcmVzcwkJbXJjdXAJc3RyCUNNCS0JCS0JWUItRy0JbWVtb3J5IHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nLCBtb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3Jfbm9ybWFsCQkJY25vcm0Jc3RyCXZlCS0JCS0JWUJDR0UJbWFrZSBjdXJzb3IgYXBwZWFyIG5vcm1hbCAodW5kbyBjaXZpcy9jdnZpcykKK2N1cnNvcl9yaWdodAkJCWN1ZjEJc3RyCW5kCS0JCS0JWUJDR0UJbm9uLWRlc3RydWN0aXZlIHNwYWNlIChtb3ZlIHJpZ2h0IG9uZSBzcGFjZSkKK2N1cnNvcl90b19sbAkJCWxsCXN0cglsbAktCQktCVlCQ0dFCWxhc3QgbGluZSwgZmlyc3QgY29sdW1uIChpZiBubyBjdXApCitjdXJzb3JfdXAJCQljdXUxCXN0cgl1cAktCQktCVlCQ0dFCXVwIG9uZSBsaW5lCitjdXJzb3JfdmlzaWJsZQkJCWN2dmlzCXN0cgl2cwktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIHZlcnkgdmlzaWJsZQorZGVsZXRlX2NoYXJhY3RlcgkJZGNoMQlzdHIJZGMJLQkJLQlZQkNHRQlkZWxldGUgY2hhcmFjdGVyIChQKikKK2RlbGV0ZV9saW5lCQkJZGwxCXN0cglkbAktCQktCVlCQ0dFCWRlbGV0ZSBsaW5lIChQKikKK2Rpc19zdGF0dXNfbGluZQkJCWRzbAlzdHIJZHMJLQkJLQlZQi1HLQlkaXNhYmxlIHN0YXR1cyBsaW5lCitkb3duX2hhbGZfbGluZQkJCWhkCXN0cgloZAktCQktCVlCLUctCWhhbGYgYSBsaW5lIGRvd24KK2VudGVyX2FsdF9jaGFyc2V0X21vZGUJCXNtYWNzCXN0cglhcwktCQktCVlCLUctCXN0YXJ0IGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IChQKQorZW50ZXJfYmxpbmtfbW9kZQkJYmxpbmsJc3RyCW1iCS0JCS0JWUItRy0JdHVybiBvbiBibGlua2luZworZW50ZXJfYm9sZF9tb2RlCQkJYm9sZAlzdHIJbWQJLQkJLQlZQi1HLQl0dXJuIG9uIGJvbGQgKGV4dHJhIGJyaWdodCkgbW9kZQorZW50ZXJfY2FfbW9kZQkJCXNtY3VwCXN0cgl0aQktCQktCVlCQ0dFCXN0cmluZyB0byBzdGFydCBwcm9ncmFtcyB1c2luZyBjdXAKK2VudGVyX2RlbGV0ZV9tb2RlCQlzbWRjCXN0cglkbQktCQktCVlCQ0dFCWVudGVyIGRlbGV0ZSBtb2RlCitlbnRlcl9kaW1fbW9kZQkJCWRpbQlzdHIJbWgJLQkJLQlZQi1HLQl0dXJuIG9uIGhhbGYtYnJpZ2h0IG1vZGUKK2VudGVyX2luc2VydF9tb2RlCQlzbWlyCXN0cglpbQktCQktCVlCQ0dFCWVudGVyIGluc2VydCBtb2RlCitlbnRlcl9zZWN1cmVfbW9kZQkJaW52aXMJc3RyCW1rCS0JCS0JLUItRy0qCXR1cm4gb24gYmxhbmsgbW9kZSAoY2hhcmFjdGVycyBpbnZpc2libGUpCitlbnRlcl9wcm90ZWN0ZWRfbW9kZQkJcHJvdAlzdHIJbXAJLQkJLQktQi1HLSoJdHVybiBvbiBwcm90ZWN0ZWQgbW9kZQorZW50ZXJfcmV2ZXJzZV9tb2RlCQlyZXYJc3RyCW1yCS0JCS0JWUItRy0JdHVybiBvbiByZXZlcnNlIHZpZGVvIG1vZGUKK2VudGVyX3N0YW5kb3V0X21vZGUJCXNtc28Jc3RyCXNvCS0JCS0JWUJDR0UJYmVnaW4gc3RhbmRvdXQgbW9kZQorZW50ZXJfdW5kZXJsaW5lX21vZGUJCXNtdWwJc3RyCXVzCS0JCS0JWUJDR0UJYmVnaW4gdW5kZXJsaW5lIG1vZGUKK2VyYXNlX2NoYXJzCQkJZWNoCXN0cgllYwktCQktCVlCLUctCWVyYXNlICMxIGNoYXJhY3RlcnMgKFApCitleGl0X2FsdF9jaGFyc2V0X21vZGUJCXJtYWNzCXN0cglhZQktCQktCVlCLUctCWVuZCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2V4aXRfYXR0cmlidXRlX21vZGUJCXNncjAJc3RyCW1lCS0JCS0JWUItR0UJdHVybiBvZmYgYWxsIGF0dHJpYnV0ZXMKK2V4aXRfY2FfbW9kZQkJCXJtY3VwCXN0cgl0ZQktCQktCVlCQ0dFCXN0cmluZ3MgdG8gZW5kIHByb2dyYW1zIHVzaW5nIGN1cAorZXhpdF9kZWxldGVfbW9kZQkJcm1kYwlzdHIJZWQJLQkJLQlZQkNHRQllbmQgZGVsZXRlIG1vZGUKK2V4aXRfaW5zZXJ0X21vZGUJCXJtaXIJc3RyCWVpCS0JCS0JWUJDR0UJZXhpdCBpbnNlcnQgbW9kZQorZXhpdF9zdGFuZG91dF9tb2RlCQlybXNvCXN0cglzZQktCQktCVlCQ0dFCWV4aXQgc3RhbmRvdXQgbW9kZQorZXhpdF91bmRlcmxpbmVfbW9kZQkJcm11bAlzdHIJdWUJLQkJLQlZQkNHRQlleGl0IHVuZGVybGluZSBtb2RlCitmbGFzaF9zY3JlZW4JCQlmbGFzaAlzdHIJdmIJLQkJLQlZQkNHRQl2aXNpYmxlIGJlbGwgKG1heSBub3QgbW92ZSBjdXJzb3IpCitmb3JtX2ZlZWQJCQlmZglzdHIJZmYJLQkJLQlZQi1HLQloYXJkY29weSB0ZXJtaW5hbCBwYWdlIGVqZWN0IChQKikKK2Zyb21fc3RhdHVzX2xpbmUJCWZzbAlzdHIJZnMJLQkJLQlZQi1HLQlyZXR1cm4gZnJvbSBzdGF0dXMgbGluZQoraW5pdF8xc3RyaW5nCQkJaXMxCXN0cglpMQktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF8yc3RyaW5nCQkJaXMyCXN0cglpcwktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF8zc3RyaW5nCQkJaXMzCXN0cglpMwktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF9maWxlCQkJaWYJc3RyCWlmCS0JCS0JWUItRy0JbmFtZSBvZiBpbml0aWFsaXphdGlvbiBmaWxlCitpbnNlcnRfY2hhcmFjdGVyCQlpY2gxCXN0cglpYwktCQktCVlCQ0dFCWluc2VydCBjaGFyYWN0ZXIgKFApCitpbnNlcnRfbGluZQkJCWlsMQlzdHIJYWwJLQkJLQlZQkNHRQlpbnNlcnQgbGluZSAoUCopCitpbnNlcnRfcGFkZGluZwkJCWlwCXN0cglpcAktCQktCVlCQ0dFCWluc2VydCBwYWRkaW5nIGFmdGVyIGluc2VydGVkIGNoYXJhY3Rlcgora2V5X2JhY2tzcGFjZQkJCWticwlzdHIJa2IJS0VZX0JBQ0tTUEFDRQkwNDA3CVlCLUctCWJhY2tzcGFjZSBrZXkKK2tleV9jYXRhYgkJCWt0YmMJc3RyCWthCUtFWV9DQVRBQgkwNTI2CS1CLUctKgljbGVhci1hbGwtdGFicyBrZXkKK2tleV9jbGVhcgkJCWtjbHIJc3RyCWtDCUtFWV9DTEVBUgkwNTE1CS1CLUctKgljbGVhci1zY3JlZW4gb3IgZXJhc2Uga2V5CitrZXlfY3RhYgkJCWtjdGFiCXN0cglrdAlLRVlfQ1RBQgkwNTI1CS1CLUctKgljbGVhci10YWIga2V5CitrZXlfZGMJCQkJa2RjaDEJc3RyCWtECUtFWV9EQwkJMDUxMglZQi1HLQlkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X2RsCQkJCWtkbDEJc3RyCWtMCUtFWV9ETAkJMDUxMAktQi1HLSoJZGVsZXRlLWxpbmUga2V5CitrZXlfZG93bgkJCWtjdWQxCXN0cglrZAlLRVlfRE9XTgkwNDAyCVlCQ0dFCWRvd24tYXJyb3cga2V5CitrZXlfZWljCQkJCWtybWlyCXN0cglrTQlLRVlfRUlDCQkwNTE0CS1CLUctKglzZW50IGJ5IHJtaXIgb3Igc21pciBpbiBpbnNlcnQgbW9kZQora2V5X2VvbAkJCQlrZWwJc3RyCWtFCUtFWV9FT0wJCTA1MTcJLUItRy0qCWNsZWFyLXRvLWVuZC1vZi1saW5lIGtleQora2V5X2VvcwkJCQlrZWQJc3RyCWtTCUtFWV9FT1MJCTA1MTYJLUItRy0qCWNsZWFyLXRvLWVuZC1vZi1zY3JlZW4ga2V5CitrZXlfZjAJCQkJa2YwCXN0cglrMAlLRVlfRigwKQkwNDEwCVlCQ0dFCUYwIGZ1bmN0aW9uIGtleQora2V5X2YxCQkJCWtmMQlzdHIJazEJS0VZX0YoMSkJLQlZQkNHRQlGMSBmdW5jdGlvbiBrZXkKK2tleV9mMTAJCQkJa2YxMAlzdHIJazsJS0VZX0YoMTApCS0JLS0tLUUJRjEwIGZ1bmN0aW9uIGtleQora2V5X2YyCQkJCWtmMglzdHIJazIJS0VZX0YoMikJLQlZQkNHRQlGMiBmdW5jdGlvbiBrZXkKK2tleV9mMwkJCQlrZjMJc3RyCWszCUtFWV9GKDMpCS0JWUJDR0UJRjMgZnVuY3Rpb24ga2V5CitrZXlfZjQJCQkJa2Y0CXN0cglrNAlLRVlfRig0KQktCVlCQ0dFCUY0IGZ1bmN0aW9uIGtleQora2V5X2Y1CQkJCWtmNQlzdHIJazUJS0VZX0YoNSkJLQlZQkNHRQlGNSBmdW5jdGlvbiBrZXkKK2tleV9mNgkJCQlrZjYJc3RyCWs2CUtFWV9GKDYpCS0JWUJDR0UJRjYgZnVuY3Rpb24ga2V5CitrZXlfZjcJCQkJa2Y3CXN0cglrNwlLRVlfRig3KQktCVlCQ0dFCUY3IGZ1bmN0aW9uIGtleQora2V5X2Y4CQkJCWtmOAlzdHIJazgJS0VZX0YoOCkJLQlZQkNHRQlGOCBmdW5jdGlvbiBrZXkKK2tleV9mOQkJCQlrZjkJc3RyCWs5CUtFWV9GKDkpCS0JWUJDR0UJRjkgZnVuY3Rpb24ga2V5CitrZXlfaG9tZQkJCWtob21lCXN0cglraAlLRVlfSE9NRQkwNDA2CVlCQ0dFCWhvbWUga2V5CitrZXlfaWMJCQkJa2ljaDEJc3RyCWtJCUtFWV9JQwkJMDUxMwlZQi1HRQlpbnNlcnQtY2hhcmFjdGVyIGtleQora2V5X2lsCQkJCWtpbDEJc3RyCWtBCUtFWV9JTAkJMDUxMQktQi1HLSoJaW5zZXJ0LWxpbmUga2V5CitrZXlfbGVmdAkJCWtjdWIxCXN0cglrbAlLRVlfTEVGVAkwNDA0CVlCQ0dFCWxlZnQtYXJyb3cga2V5CitrZXlfbGwJCQkJa2xsCXN0cglrSAlLRVlfTEwJCTA1MzMJWUItRy0JbG93ZXItbGVmdCBrZXkgKGhvbWUgZG93bikKK2tleV9ucGFnZQkJCWtucAlzdHIJa04JS0VZX05QQUdFCTA1MjIJWUItR0UJbmV4dC1wYWdlIGtleQora2V5X3BwYWdlCQkJa3BwCXN0cglrUAlLRVlfUFBBR0UJMDUyMwlZQi1HRQlwcmV2aW91cy1wYWdlIGtleQora2V5X3JpZ2h0CQkJa2N1ZjEJc3RyCWtyCUtFWV9SSUdIVAkwNDA1CVlCQ0dFCXJpZ2h0LWFycm93IGtleQora2V5X3NmCQkJCWtpbmQJc3RyCWtGCUtFWV9TRgkJMDUyMAktQi1HLSoJc2Nyb2xsLWZvcndhcmQga2V5CitrZXlfc3IJCQkJa3JpCXN0cglrUglLRVlfU1IJCTA1MjEJLUItRy0qCXNjcm9sbC1iYWNrd2FyZCBrZXkKK2tleV9zdGFiCQkJa2h0cwlzdHIJa1QJS0VZX1NUQUIJMDUyNAktQi1HLSoJc2V0LXRhYiBrZXkKK2tleV91cAkJCQlrY3V1MQlzdHIJa3UJS0VZX1VQCQkwNDAzCVlCQ0dFCXVwLWFycm93IGtleQora2V5cGFkX2xvY2FsCQkJcm1reAlzdHIJa2UJLQkJLQlZQkNHRQlsZWF2ZSAna2V5Ym9hcmRfdHJhbnNtaXQnIG1vZGUKK2tleXBhZF94bWl0CQkJc21reAlzdHIJa3MJLQkJLQlZQkNHRQllbnRlciAna2V5Ym9hcmRfdHJhbnNtaXQnIG1vZGUKK2xhYl9mMAkJCQlsZjAJc3RyCWwwCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMCBpZiBub3QgZjAKK2xhYl9mMQkJCQlsZjEJc3RyCWwxCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMSBpZiBub3QgZjEKK2xhYl9mMTAJCQkJbGYxMAlzdHIJbGEJLQkJLQktLS0tLQlsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEwIGlmIG5vdCBmMTAKK2xhYl9mMgkJCQlsZjIJc3RyCWwyCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMiBpZiBub3QgZjIKK2xhYl9mMwkJCQlsZjMJc3RyCWwzCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMyBpZiBub3QgZjMKK2xhYl9mNAkJCQlsZjQJc3RyCWw0CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNCBpZiBub3QgZjQKK2xhYl9mNQkJCQlsZjUJc3RyCWw1CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNSBpZiBub3QgZjUKK2xhYl9mNgkJCQlsZjYJc3RyCWw2CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNiBpZiBub3QgZjYKK2xhYl9mNwkJCQlsZjcJc3RyCWw3CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNyBpZiBub3QgZjcKK2xhYl9mOAkJCQlsZjgJc3RyCWw4CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmOCBpZiBub3QgZjgKK2xhYl9mOQkJCQlsZjkJc3RyCWw5CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmOSBpZiBub3QgZjkKK21ldGFfb2ZmCQkJcm1tCXN0cgltbwktCQktCVlCLUctKgl0dXJuIG9mZiBtZXRhIG1vZGUKK21ldGFfb24JCQkJc21tCXN0cgltbQktCQktCVlCLUctKgl0dXJuIG9uIG1ldGEgbW9kZSAoOHRoLWJpdCBvbikKK25ld2xpbmUJCQkJbmVsCXN0cgludwktCQktCVlCLUctKgluZXdsaW5lIChiZWhhdmUgbGlrZSBjciBmb2xsb3dlZCBieSBsZikKK3BhZF9jaGFyCQkJcGFkCXN0cglwYwktCQktCVlCQ0dFCXBhZGRpbmcgY2hhciAoaW5zdGVhZCBvZiBudWxsKQorcGFybV9kY2gJCQlkY2gJc3RyCURDCS0JCS0JWUItR0UJZGVsZXRlICMxIGNoYXJhY3RlcnMgKFAqKQorcGFybV9kZWxldGVfbGluZQkJZGwJc3RyCURMCS0JCS0JWUJDR0UJZGVsZXRlICMxIGxpbmVzIChQKikKK3Bhcm1fZG93bl9jdXJzb3IJCWN1ZAlzdHIJRE8JLQkJLQlZQkNHRQlkb3duICMxIGxpbmVzIChQKikKK3Bhcm1faWNoCQkJaWNoCXN0cglJQwktCQktCVlCLUdFCWluc2VydCAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1faW5kZXgJCQlpbmRuCXN0cglTRgktCQktCVlCQ0ctCXNjcm9sbCBmb3J3YXJkICMxIGxpbmVzIChQKQorcGFybV9pbnNlcnRfbGluZQkJaWwJc3RyCUFMCS0JCS0JWUJDR0UJaW5zZXJ0ICMxIGxpbmVzIChQKikKK3Bhcm1fbGVmdF9jdXJzb3IJCWN1YglzdHIJTEUJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQgKFApCitwYXJtX3JpZ2h0X2N1cnNvcgkJY3VmCXN0cglSSQktCQktCVlCQ0dFCW1vdmUgIzEgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgKFAqKQorcGFybV9yaW5kZXgJCQlyaW4Jc3RyCVNSCS0JCS0JWUJDRy0Jc2Nyb2xsIGJhY2sgIzEgbGluZXMgKFApCitwYXJtX3VwX2N1cnNvcgkJCWN1dQlzdHIJVVAJLQkJLQlZQkNHRQl1cCAjMSBsaW5lcyAoUCopCitwa2V5X2tleQkJCXBma2V5CXN0cglwawktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHR5cGUgc3RyaW5nICMyCitwa2V5X2xvY2FsCQkJcGZsb2MJc3RyCXBsCS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gZXhlY3V0ZSBzdHJpbmcgIzIKK3BrZXlfeG1pdAkJCXBmeAlzdHIJcHgJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0cmFuc21pdCBzdHJpbmcgIzIKK3ByaW50X3NjcmVlbgkJCW1jMAlzdHIJcHMJLQkJLQktQi1HLSoJcHJpbnQgY29udGVudHMgb2Ygc2NyZWVuCitwcnRyX29mZgkJCW1jNAlzdHIJcGYJLQkJLQktQi1HLSoJdHVybiBvZmYgcHJpbnRlcgorcHJ0cl9vbgkJCQltYzUJc3RyCXBvCS0JCS0JLUItRy0qCXR1cm4gb24gcHJpbnRlcgorcmVwZWF0X2NoYXIJCQlyZXAJc3RyCXJwCS0JCS0JWUItR0UJcmVwZWF0IGNoYXIgIzEgIzIgdGltZXMgKFAqKQorcmVzZXRfMXN0cmluZwkJCXJzMQlzdHIJcjEJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0XzJzdHJpbmcJCQlyczIJc3RyCXIyCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8zc3RyaW5nCQkJcnMzCXN0cglyMwktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfZmlsZQkJCXJmCXN0cglyZgktCQktCS1CLS0tCW5hbWUgb2YgcmVzZXQgZmlsZQorcmVzdG9yZV9jdXJzb3IJCQlyYwlzdHIJcmMJLQkJLQlZQkNHLQlyZXN0b3JlIGN1cnNvciB0byBwb3NpdGlvbiBvZiBsYXN0IHNhdmVfY3Vyc29yCityb3dfYWRkcmVzcwkJCXZwYQlzdHIJY3YJLQkJLQktQi1HRSoJdmVydGljYWwgcG9zaXRpb24gIzEgYWJzb2x1dGUgKFApCitzYXZlX2N1cnNvcgkJCXNjCXN0cglzYwktCQktCVlCQ0ctCXNhdmUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKFApCitzY3JvbGxfZm9yd2FyZAkJCWluZAlzdHIJc2YJLQkJLQlZQkNHRQlzY3JvbGwgdGV4dCB1cCAoUCkKK3Njcm9sbF9yZXZlcnNlCQkJcmkJc3RyCXNyCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgZG93biAoUCkKK3NldF9hdHRyaWJ1dGVzCQkJc2dyCXN0cglzYQktCQktCVlCLUctCWRlZmluZSB2aWRlbyBhdHRyaWJ1dGVzICMxLSM5IChQRzkpCitzZXRfdGFiCQkJCWh0cwlzdHIJc3QJLQkJLQlZQi1HLQlzZXQgYSB0YWIgaW4gZXZlcnkgcm93LCBjdXJyZW50IGNvbHVtbnMKK3NldF93aW5kb3cJCQl3aW5kCXN0cgl3aQktCQktCS1CLUdFCWN1cnJlbnQgd2luZG93IGlzIGxpbmVzICMxLSMyIGNvbHMgIzMtIzQKK3RhYgkJCQlodAlzdHIJdGEJLQkJLQlZQkNHRQl0YWIgdG8gbmV4dCA4LXNwYWNlIGhhcmR3YXJlIHRhYiBzdG9wCit0b19zdGF0dXNfbGluZQkJCXRzbAlzdHIJdHMJLQkJLQlZQi1HLQltb3ZlIHRvIHN0YXR1cyBsaW5lLCBjb2x1bW4gIzEKK3VuZGVybGluZV9jaGFyCQkJdWMJc3RyCXVjCS0JCS0JWUJDRy0JdW5kZXJsaW5lIGNoYXIgYW5kIG1vdmUgcGFzdCBpdAordXBfaGFsZl9saW5lCQkJaHUJc3RyCWh1CS0JCS0JWUItRy0JaGFsZiBhIGxpbmUgdXAKK2luaXRfcHJvZwkJCWlwcm9nCXN0cglpUAktCQktCS1CLS0tCXBhdGggbmFtZSBvZiBwcm9ncmFtIGZvciBpbml0aWFsaXphdGlvbgora2V5X2ExCQkJCWthMQlzdHIJSzEJS0VZX0ExCQkwNTM0CVlCLUdFCXVwcGVyIGxlZnQgb2Yga2V5cGFkCitrZXlfYTMJCQkJa2EzCXN0cglLMwlLRVlfQTMJCTA1MzUJWUItR0UJdXBwZXIgcmlnaHQgb2Yga2V5cGFkCitrZXlfYjIJCQkJa2IyCXN0cglLMglLRVlfQjIJCTA1MzYJWUItR0UJY2VudGVyIG9mIGtleXBhZAora2V5X2MxCQkJCWtjMQlzdHIJSzQJS0VZX0MxCQkwNTM3CVlCLUdFCWxvd2VyIGxlZnQgb2Yga2V5cGFkCitrZXlfYzMJCQkJa2MzCXN0cglLNQlLRVlfQzMJCTA1NDAJWUItR0UJbG93ZXIgcmlnaHQgb2Yga2V5cGFkCitwcnRyX25vbgkJCW1jNXAJc3RyCXBPCS0JCS0JLUItRy0qCXR1cm4gb24gcHJpbnRlciBmb3IgIzEgYnl0ZXMKKyMKKyMgU1ZyMSBjYXBhYmlsaXRpZXMgc3RvcCBoZXJlLglJQk0ncyB2ZXJzaW9uIG9mIHRlcm1pbmZvIGlzIHRoZSBzYW1lIGFzCisjIFNWcjQgdXAgdG8gdGhpcyBwb2ludCwgYnV0IGhhcyBhIGRpZmZlcmVudCBzZXQgYWZ0ZXJ3YXJkcy4KKyMKK2NoYXJfcGFkZGluZwkJCXJtcAlzdHIJclAJLQkJLQktLS0tLQlsaWtlIGlwIGJ1dCB3aGVuIGluIGluc2VydCBtb2RlCithY3NfY2hhcnMJCQlhY3NjCXN0cglhYwktCQktCS0tLS0tCWdyYXBoaWNzIGNoYXJzZXQgcGFpcnMsIGJhc2VkIG9uIHZ0MTAwCitwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgora2V5X2J0YWIJCQlrY2J0CXN0cglrQglLRVlfQlRBQgkwNTQxCS0tLS0tCWJhY2stdGFiIGtleQorZW50ZXJfeG9uX21vZGUJCQlzbXhvbglzdHIJU1gJLQkJLQktLS0tLQl0dXJuIG9uIHhvbi94b2ZmIGhhbmRzaGFraW5nCitleGl0X3hvbl9tb2RlCQkJcm14b24Jc3RyCVJYCS0JCS0JLS0tLS0JdHVybiBvZmYgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK2VudGVyX2FtX21vZGUJCQlzbWFtCXN0cglTQQktCQktCS0tLS0tCXR1cm4gb24gYXV0b21hdGljIG1hcmdpbnMKK2V4aXRfYW1fbW9kZQkJCXJtYW0Jc3RyCVJBCS0JCS0JLS0tLS0JdHVybiBvZmYgYXV0b21hdGljIG1hcmdpbnMKK3hvbl9jaGFyYWN0ZXIJCQl4b25jCXN0cglYTgktCQktCS0tLS0tCVhPTiBjaGFyYWN0ZXIKK3hvZmZfY2hhcmFjdGVyCQkJeG9mZmMJc3RyCVhGCS0JCS0JLS0tLS0JWE9GRiBjaGFyYWN0ZXIKK2VuYV9hY3MJCQkJZW5hY3MJc3RyCWVBCS0JCS0JLS0tLS0JZW5hYmxlIGFsdGVybmF0ZSBjaGFyIHNldAorbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKK2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKK2tleV9iZWcJCQkJa2JlZwlzdHIJQDEJS0VZX0JFRwkJMDU0MgktLS0tLQliZWdpbiBrZXkKK2tleV9jYW5jZWwJCQlrY2FuCXN0cglAMglLRVlfQ0FOQ0VMCTA1NDMJLS0tLS0JY2FuY2VsIGtleQora2V5X2Nsb3NlCQkJa2NsbwlzdHIJQDMJS0VZX0NMT1NFCTA1NDQJLS0tLS0JY2xvc2Uga2V5CitrZXlfY29tbWFuZAkJCWtjbWQJc3RyCUA0CUtFWV9DT01NQU5ECTA1NDUJLS0tLS0JY29tbWFuZCBrZXkKK2tleV9jb3B5CQkJa2NweQlzdHIJQDUJS0VZX0NPUFkJMDU0NgktLS0tLQljb3B5IGtleQora2V5X2NyZWF0ZQkJCWtjcnQJc3RyCUA2CUtFWV9DUkVBVEUJMDU0NwktLS0tLQljcmVhdGUga2V5CitrZXlfZW5kCQkJCWtlbmQJc3RyCUA3CUtFWV9FTkQJCTA1NTAJLS0tLS0JZW5kIGtleQora2V5X2VudGVyCQkJa2VudAlzdHIJQDgJS0VZX0VOVEVSCTA1MjcJLS0tLS0JZW50ZXIvc2VuZCBrZXkKK2tleV9leGl0CQkJa2V4dAlzdHIJQDkJS0VZX0VYSVQJMDU1MQktLS0tLQlleGl0IGtleQora2V5X2ZpbmQJCQlrZm5kCXN0cglAMAlLRVlfRklORAkwNTUyCS0tLS0tCWZpbmQga2V5CitrZXlfaGVscAkJCWtobHAJc3RyCSUxCUtFWV9IRUxQCTA1NTMJLS0tLS0JaGVscCBrZXkKK2tleV9tYXJrCQkJa21yawlzdHIJJTIJS0VZX01BUksJMDU1NAktLS0tLQltYXJrIGtleQora2V5X21lc3NhZ2UJCQlrbXNnCXN0cgklMwlLRVlfTUVTU0FHRQkwNTU1CS0tLS0tCW1lc3NhZ2Uga2V5CitrZXlfbW92ZQkJCWttb3YJc3RyCSU0CUtFWV9NT1ZFCTA1NTYJLS0tLS0JbW92ZSBrZXkKK2tleV9uZXh0CQkJa254dAlzdHIJJTUJS0VZX05FWFQJMDU1NwktLS0tLQluZXh0IGtleQora2V5X29wZW4JCQlrb3BuCXN0cgklNglLRVlfT1BFTgkwNTYwCS0tLS0tCW9wZW4ga2V5CitrZXlfb3B0aW9ucwkJCWtvcHQJc3RyCSU3CUtFWV9PUFRJT05TCTA1NjEJLS0tLS0Jb3B0aW9ucyBrZXkKK2tleV9wcmV2aW91cwkJCWtwcnYJc3RyCSU4CUtFWV9QUkVWSU9VUwkwNTYyCS0tLS0tCXByZXZpb3VzIGtleQora2V5X3ByaW50CQkJa3BydAlzdHIJJTkJS0VZX1BSSU5UCTA1MzIJLS0tLS0JcHJpbnQga2V5CitrZXlfcmVkbwkJCWtyZG8Jc3RyCSUwCUtFWV9SRURPCTA1NjMJLS0tLS0JcmVkbyBrZXkKK2tleV9yZWZlcmVuY2UJCQlrcmVmCXN0cgkmMQlLRVlfUkVGRVJFTkNFCTA1NjQJLS0tLS0JcmVmZXJlbmNlIGtleQora2V5X3JlZnJlc2gJCQlrcmZyCXN0cgkmMglLRVlfUkVGUkVTSAkwNTY1CS0tLS0tCXJlZnJlc2gga2V5CitrZXlfcmVwbGFjZQkJCWtycGwJc3RyCSYzCUtFWV9SRVBMQUNFCTA1NjYJLS0tLS0JcmVwbGFjZSBrZXkKK2tleV9yZXN0YXJ0CQkJa3JzdAlzdHIJJjQJS0VZX1JFU1RBUlQJMDU2NwktLS0tLQlyZXN0YXJ0IGtleQora2V5X3Jlc3VtZQkJCWtyZXMJc3RyCSY1CUtFWV9SRVNVTUUJMDU3MAktLS0tLQlyZXN1bWUga2V5CitrZXlfc2F2ZQkJCWtzYXYJc3RyCSY2CUtFWV9TQVZFCTA1NzEJLS0tLS0Jc2F2ZSBrZXkKK2tleV9zdXNwZW5kCQkJa3NwZAlzdHIJJjcJS0VZX1NVU1BFTkQJMDYyNwktLS0tLQlzdXNwZW5kIGtleQora2V5X3VuZG8JCQlrdW5kCXN0cgkmOAlLRVlfVU5ETwkwNjMwCS0tLS0tCXVuZG8ga2V5CitrZXlfc2JlZwkJCWtCRUcJc3RyCSY5CUtFWV9TQkVHCTA1NzIJLS0tLS0Jc2hpZnRlZCBiZWdpbiBrZXkKK2tleV9zY2FuY2VsCQkJa0NBTglzdHIJJjAJS0VZX1NDQU5DRUwJMDU3MwktLS0tLQlzaGlmdGVkIGNhbmNlbCBrZXkKK2tleV9zY29tbWFuZAkJCWtDTUQJc3RyCSoxCUtFWV9TQ09NTUFORAkwNTc0CS0tLS0tCXNoaWZ0ZWQgY29tbWFuZCBrZXkKK2tleV9zY29weQkJCWtDUFkJc3RyCSoyCUtFWV9TQ09QWQkwNTc1CS0tLS0tCXNoaWZ0ZWQgY29weSBrZXkKK2tleV9zY3JlYXRlCQkJa0NSVAlzdHIJKjMJS0VZX1NDUkVBVEUJMDU3NgktLS0tLQlzaGlmdGVkIGNyZWF0ZSBrZXkKK2tleV9zZGMJCQkJa0RDCXN0cgkqNAlLRVlfU0RDCQkwNTc3CS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9zZGwJCQkJa0RMCXN0cgkqNQlLRVlfU0RMCQkwNjAwCS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWxpbmUga2V5CitrZXlfc2VsZWN0CQkJa3NsdAlzdHIJKjYJS0VZX1NFTEVDVAkwNjAxCS0tLS0tCXNlbGVjdCBrZXkKK2tleV9zZW5kCQkJa0VORAlzdHIJKjcJS0VZX1NFTkQJMDYwMgktLS0tLQlzaGlmdGVkIGVuZCBrZXkKK2tleV9zZW9sCQkJa0VPTAlzdHIJKjgJS0VZX1NFT0wJMDYwMwktLS0tLQlzaGlmdGVkIGNsZWFyLXRvLWVuZC1vZi1saW5lIGtleQora2V5X3NleGl0CQkJa0VYVAlzdHIJKjkJS0VZX1NFWElUCTA2MDQJLS0tLS0Jc2hpZnRlZCBleGl0IGtleQora2V5X3NmaW5kCQkJa0ZORAlzdHIJKjAJS0VZX1NGSU5ECTA2MDUJLS0tLS0Jc2hpZnRlZCBmaW5kIGtleQora2V5X3NoZWxwCQkJa0hMUAlzdHIJIzEJS0VZX1NIRUxQCTA2MDYJLS0tLS0Jc2hpZnRlZCBoZWxwIGtleQora2V5X3Nob21lCQkJa0hPTQlzdHIJIzIJS0VZX1NIT01FCTA2MDcJLS0tLS0Jc2hpZnRlZCBob21lIGtleQora2V5X3NpYwkJCQlrSUMJc3RyCSMzCUtFWV9TSUMJCTA2MTAJLS0tLS0Jc2hpZnRlZCBpbnNlcnQtY2hhcmFjdGVyIGtleQora2V5X3NsZWZ0CQkJa0xGVAlzdHIJIzQJS0VZX1NMRUZUCTA2MTEJLS0tLS0Jc2hpZnRlZCBsZWZ0LWFycm93IGtleQora2V5X3NtZXNzYWdlCQkJa01TRwlzdHIJJWEJS0VZX1NNRVNTQUdFCTA2MTIJLS0tLS0Jc2hpZnRlZCBtZXNzYWdlIGtleQora2V5X3Ntb3ZlCQkJa01PVglzdHIJJWIJS0VZX1NNT1ZFCTA2MTMJLS0tLS0Jc2hpZnRlZCBtb3ZlIGtleQora2V5X3NuZXh0CQkJa05YVAlzdHIJJWMJS0VZX1NORVhUCTA2MTQJLS0tLS0Jc2hpZnRlZCBuZXh0IGtleQora2V5X3NvcHRpb25zCQkJa09QVAlzdHIJJWQJS0VZX1NPUFRJT05TCTA2MTUJLS0tLS0Jc2hpZnRlZCBvcHRpb25zIGtleQora2V5X3NwcmV2aW91cwkJCWtQUlYJc3RyCSVlCUtFWV9TUFJFVklPVVMJMDYxNgktLS0tLQlzaGlmdGVkIHByZXZpb3VzIGtleQora2V5X3NwcmludAkJCWtQUlQJc3RyCSVmCUtFWV9TUFJJTlQJMDYxNwktLS0tLQlzaGlmdGVkIHByaW50IGtleQora2V5X3NyZWRvCQkJa1JETwlzdHIJJWcJS0VZX1NSRURPCTA2MjAJLS0tLS0Jc2hpZnRlZCByZWRvIGtleQora2V5X3NyZXBsYWNlCQkJa1JQTAlzdHIJJWgJS0VZX1NSRVBMQUNFCTA2MjEJLS0tLS0Jc2hpZnRlZCByZXBsYWNlIGtleQora2V5X3NyaWdodAkJCWtSSVQJc3RyCSVpCUtFWV9TUklHSFQJMDYyMgktLS0tLQlzaGlmdGVkIHJpZ2h0LWFycm93IGtleQora2V5X3Nyc3VtZQkJCWtSRVMJc3RyCSVqCUtFWV9TUlNVTUUJMDYyMwktLS0tLQlzaGlmdGVkIHJlc3VtZSBrZXkKK2tleV9zc2F2ZQkJCWtTQVYJc3RyCSExCUtFWV9TU0FWRQkwNjI0CS0tLS0tCXNoaWZ0ZWQgc2F2ZSBrZXkKK2tleV9zc3VzcGVuZAkJCWtTUEQJc3RyCSEyCUtFWV9TU1VTUEVORAkwNjI1CS0tLS0tCXNoaWZ0ZWQgc3VzcGVuZCBrZXkKK2tleV9zdW5kbwkJCWtVTkQJc3RyCSEzCUtFWV9TVU5ETwkwNjI2CS0tLS0tCXNoaWZ0ZWQgdW5kbyBrZXkKK3JlcV9mb3JfaW5wdXQJCQlyZmkJc3RyCVJGCS0JCS0JLS0tLS0Jc2VuZCBuZXh0IGlucHV0IGNoYXIgKGZvciBwdHlzKQora2V5X2YxMQkJCQlrZjExCXN0cglGMQlLRVlfRigxMSkJLQktLS0tRQlGMTEgZnVuY3Rpb24ga2V5CitrZXlfZjEyCQkJCWtmMTIJc3RyCUYyCUtFWV9GKDEyKQktCS0tLS1FCUYxMiBmdW5jdGlvbiBrZXkKK2tleV9mMTMJCQkJa2YxMwlzdHIJRjMJS0VZX0YoMTMpCS0JLS0tLUUJRjEzIGZ1bmN0aW9uIGtleQora2V5X2YxNAkJCQlrZjE0CXN0cglGNAlLRVlfRigxNCkJLQktLS0tRQlGMTQgZnVuY3Rpb24ga2V5CitrZXlfZjE1CQkJCWtmMTUJc3RyCUY1CUtFWV9GKDE1KQktCS0tLS1FCUYxNSBmdW5jdGlvbiBrZXkKK2tleV9mMTYJCQkJa2YxNglzdHIJRjYJS0VZX0YoMTYpCS0JLS0tLUUJRjE2IGZ1bmN0aW9uIGtleQora2V5X2YxNwkJCQlrZjE3CXN0cglGNwlLRVlfRigxNykJLQktLS0tRQlGMTcgZnVuY3Rpb24ga2V5CitrZXlfZjE4CQkJCWtmMTgJc3RyCUY4CUtFWV9GKDE4KQktCS0tLS1FCUYxOCBmdW5jdGlvbiBrZXkKK2tleV9mMTkJCQkJa2YxOQlzdHIJRjkJS0VZX0YoMTkpCS0JLS0tLUUJRjE5IGZ1bmN0aW9uIGtleQora2V5X2YyMAkJCQlrZjIwCXN0cglGQQlLRVlfRigyMCkJLQktLS0tRQlGMjAgZnVuY3Rpb24ga2V5CitrZXlfZjIxCQkJCWtmMjEJc3RyCUZCCUtFWV9GKDIxKQktCS0tLS1FCUYyMSBmdW5jdGlvbiBrZXkKK2tleV9mMjIJCQkJa2YyMglzdHIJRkMJS0VZX0YoMjIpCS0JLS0tLUUJRjIyIGZ1bmN0aW9uIGtleQora2V5X2YyMwkJCQlrZjIzCXN0cglGRAlLRVlfRigyMykJLQktLS0tRQlGMjMgZnVuY3Rpb24ga2V5CitrZXlfZjI0CQkJCWtmMjQJc3RyCUZFCUtFWV9GKDI0KQktCS0tLS1FCUYyNCBmdW5jdGlvbiBrZXkKK2tleV9mMjUJCQkJa2YyNQlzdHIJRkYJS0VZX0YoMjUpCS0JLS0tLUUJRjI1IGZ1bmN0aW9uIGtleQora2V5X2YyNgkJCQlrZjI2CXN0cglGRwlLRVlfRigyNikJLQktLS0tRQlGMjYgZnVuY3Rpb24ga2V5CitrZXlfZjI3CQkJCWtmMjcJc3RyCUZICUtFWV9GKDI3KQktCS0tLS1FCUYyNyBmdW5jdGlvbiBrZXkKK2tleV9mMjgJCQkJa2YyOAlzdHIJRkkJS0VZX0YoMjgpCS0JLS0tLUUJRjI4IGZ1bmN0aW9uIGtleQora2V5X2YyOQkJCQlrZjI5CXN0cglGSglLRVlfRigyOSkJLQktLS0tRQlGMjkgZnVuY3Rpb24ga2V5CitrZXlfZjMwCQkJCWtmMzAJc3RyCUZLCUtFWV9GKDMwKQktCS0tLS1FCUYzMCBmdW5jdGlvbiBrZXkKK2tleV9mMzEJCQkJa2YzMQlzdHIJRkwJS0VZX0YoMzEpCS0JLS0tLUUJRjMxIGZ1bmN0aW9uIGtleQora2V5X2YzMgkJCQlrZjMyCXN0cglGTQlLRVlfRigzMikJLQktLS0tRQlGMzIgZnVuY3Rpb24ga2V5CitrZXlfZjMzCQkJCWtmMzMJc3RyCUZOCUtFWV9GKDMzKQktCS0tLS1FCUYzMyBmdW5jdGlvbiBrZXkKK2tleV9mMzQJCQkJa2YzNAlzdHIJRk8JS0VZX0YoMzQpCS0JLS0tLUUJRjM0IGZ1bmN0aW9uIGtleQora2V5X2YzNQkJCQlrZjM1CXN0cglGUAlLRVlfRigzNSkJLQktLS0tRQlGMzUgZnVuY3Rpb24ga2V5CitrZXlfZjM2CQkJCWtmMzYJc3RyCUZRCUtFWV9GKDM2KQktCS0tLS1FCUYzNiBmdW5jdGlvbiBrZXkKK2tleV9mMzcJCQkJa2YzNwlzdHIJRlIJS0VZX0YoMzcpCS0JLS0tLUUJRjM3IGZ1bmN0aW9uIGtleQora2V5X2YzOAkJCQlrZjM4CXN0cglGUwlLRVlfRigzOCkJLQktLS0tRQlGMzggZnVuY3Rpb24ga2V5CitrZXlfZjM5CQkJCWtmMzkJc3RyCUZUCUtFWV9GKDM5KQktCS0tLS1FCUYzOSBmdW5jdGlvbiBrZXkKK2tleV9mNDAJCQkJa2Y0MAlzdHIJRlUJS0VZX0YoNDApCS0JLS0tLUUJRjQwIGZ1bmN0aW9uIGtleQora2V5X2Y0MQkJCQlrZjQxCXN0cglGVglLRVlfRig0MSkJLQktLS0tRQlGNDEgZnVuY3Rpb24ga2V5CitrZXlfZjQyCQkJCWtmNDIJc3RyCUZXCUtFWV9GKDQyKQktCS0tLS1FCUY0MiBmdW5jdGlvbiBrZXkKK2tleV9mNDMJCQkJa2Y0MwlzdHIJRlgJS0VZX0YoNDMpCS0JLS0tLUUJRjQzIGZ1bmN0aW9uIGtleQora2V5X2Y0NAkJCQlrZjQ0CXN0cglGWQlLRVlfRig0NCkJLQktLS0tRQlGNDQgZnVuY3Rpb24ga2V5CitrZXlfZjQ1CQkJCWtmNDUJc3RyCUZaCUtFWV9GKDQ1KQktCS0tLS1FCUY0NSBmdW5jdGlvbiBrZXkKK2tleV9mNDYJCQkJa2Y0NglzdHIJRmEJS0VZX0YoNDYpCS0JLS0tLUUJRjQ2IGZ1bmN0aW9uIGtleQora2V5X2Y0NwkJCQlrZjQ3CXN0cglGYglLRVlfRig0NykJLQktLS0tRQlGNDcgZnVuY3Rpb24ga2V5CitrZXlfZjQ4CQkJCWtmNDgJc3RyCUZjCUtFWV9GKDQ4KQktCS0tLS1FCUY0OCBmdW5jdGlvbiBrZXkKK2tleV9mNDkJCQkJa2Y0OQlzdHIJRmQJS0VZX0YoNDkpCS0JLS0tLUUJRjQ5IGZ1bmN0aW9uIGtleQora2V5X2Y1MAkJCQlrZjUwCXN0cglGZQlLRVlfRig1MCkJLQktLS0tRQlGNTAgZnVuY3Rpb24ga2V5CitrZXlfZjUxCQkJCWtmNTEJc3RyCUZmCUtFWV9GKDUxKQktCS0tLS1FCUY1MSBmdW5jdGlvbiBrZXkKK2tleV9mNTIJCQkJa2Y1MglzdHIJRmcJS0VZX0YoNTIpCS0JLS0tLUUJRjUyIGZ1bmN0aW9uIGtleQora2V5X2Y1MwkJCQlrZjUzCXN0cglGaAlLRVlfRig1MykJLQktLS0tRQlGNTMgZnVuY3Rpb24ga2V5CitrZXlfZjU0CQkJCWtmNTQJc3RyCUZpCUtFWV9GKDU0KQktCS0tLS1FCUY1NCBmdW5jdGlvbiBrZXkKK2tleV9mNTUJCQkJa2Y1NQlzdHIJRmoJS0VZX0YoNTUpCS0JLS0tLUUJRjU1IGZ1bmN0aW9uIGtleQora2V5X2Y1NgkJCQlrZjU2CXN0cglGawlLRVlfRig1NikJLQktLS0tRQlGNTYgZnVuY3Rpb24ga2V5CitrZXlfZjU3CQkJCWtmNTcJc3RyCUZsCUtFWV9GKDU3KQktCS0tLS1FCUY1NyBmdW5jdGlvbiBrZXkKK2tleV9mNTgJCQkJa2Y1OAlzdHIJRm0JS0VZX0YoNTgpCS0JLS0tLUUJRjU4IGZ1bmN0aW9uIGtleQora2V5X2Y1OQkJCQlrZjU5CXN0cglGbglLRVlfRig1OSkJLQktLS0tRQlGNTkgZnVuY3Rpb24ga2V5CitrZXlfZjYwCQkJCWtmNjAJc3RyCUZvCUtFWV9GKDYwKQktCS0tLS1FCUY2MCBmdW5jdGlvbiBrZXkKK2tleV9mNjEJCQkJa2Y2MQlzdHIJRnAJS0VZX0YoNjEpCS0JLS0tLUUJRjYxIGZ1bmN0aW9uIGtleQora2V5X2Y2MgkJCQlrZjYyCXN0cglGcQlLRVlfRig2MikJLQktLS0tRQlGNjIgZnVuY3Rpb24ga2V5CitrZXlfZjYzCQkJCWtmNjMJc3RyCUZyCUtFWV9GKDYzKQktCS0tLS1FCUY2MyBmdW5jdGlvbiBrZXkKK2Nscl9ib2wJCQkJZWwxCXN0cgljYgktCQktCS0tLS0tCUNsZWFyIHRvIGJlZ2lubmluZyBvZiBsaW5lCitjbGVhcl9tYXJnaW5zCQkJbWdjCXN0cglNQwktCQktCS0tLS0tCWNsZWFyIHJpZ2h0IGFuZCBsZWZ0IHNvZnQgbWFyZ2lucworc2V0X2xlZnRfbWFyZ2luCQkJc21nbAlzdHIJTUwJLQkJLQktLS0tLQlzZXQgbGVmdCBzb2Z0IG1hcmdpbiBhdCBjdXJyZW50IGNvbHVtbi4JIFNlZSBzbWdsLiAoTUwgaXMgbm90IGluIEJTRCB0ZXJtY2FwKS4KK3NldF9yaWdodF9tYXJnaW4JCXNtZ3IJc3RyCU1SCS0JCS0JLS0tLS0Jc2V0IHJpZ2h0IHNvZnQgbWFyZ2luIGF0IGN1cnJlbnQgY29sdW1uCitsYWJlbF9mb3JtYXQJCQlmbG4Jc3RyCUxmCS0JCS0JLS0tLS0JbGFiZWwgZm9ybWF0CitzZXRfY2xvY2sJCQlzY2xrCXN0cglTQwktCQktCS0tLS0tCXNldCBjbG9jaywgIzEgaHJzICMyIG1pbnMgIzMgc2VjcworZGlzcGxheV9jbG9jawkJCWRjbGsJc3RyCURLCS0JCS0JLS0tLS0JZGlzcGxheSBjbG9jaworcmVtb3ZlX2Nsb2NrCQkJcm1jbGsJc3RyCVJDCS0JCS0JLS0tLS0JcmVtb3ZlIGNsb2NrCitjcmVhdGVfd2luZG93CQkJY3dpbglzdHIJQ1cJLQkJLQktLS0tLQlkZWZpbmUgYSB3aW5kb3cgIzEgZnJvbSAjMiwjMyB0byAjNCwjNQorZ290b193aW5kb3cJCQl3aW5nbwlzdHIJV0cJLQkJLQktLS0tLQlnbyB0byB3aW5kb3cgIzEKK2hhbmd1cAkJCQlodXAJc3RyCUhVCS0JCS0JLS0tLS0JaGFuZy11cCBwaG9uZQorZGlhbF9waG9uZQkJCWRpYWwJc3RyCURJCS0JCS0JLS0tLS0JZGlhbCBudW1iZXIgIzEKK3F1aWNrX2RpYWwJCQlxZGlhbAlzdHIJUUQJLQkJLQktLS0tLQlkaWFsIG51bWJlciAjMSB3aXRob3V0IGNoZWNraW5nCit0b25lCQkJCXRvbmUJc3RyCVRPCS0JCS0JLS0tLS0Jc2VsZWN0IHRvdWNoIHRvbmUgZGlhbGluZworcHVsc2UJCQkJcHVsc2UJc3RyCVBVCS0JCS0JLS0tLS0Jc2VsZWN0IHB1bHNlIGRpYWxpbmcKK2ZsYXNoX2hvb2sJCQlob29rCXN0cglmaAktCQktCS0tLS0tCWZsYXNoIHN3aXRjaCBob29rCitmaXhlZF9wYXVzZQkJCXBhdXNlCXN0cglQQQktCQktCS0tLS0tCXBhdXNlIGZvciAyLTMgc2Vjb25kcword2FpdF90b25lCQkJd2FpdAlzdHIJV0EJLQkJLQktLS0tLQl3YWl0IGZvciBkaWFsLXRvbmUKK3VzZXIwCQkJCXUwCXN0cgl1MAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMwCit1c2VyMQkJCQl1MQlzdHIJdTEJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMQordXNlcjIJCQkJdTIJc3RyCXUyCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzIKK3VzZXIzCQkJCXUzCXN0cgl1MwktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMzCit1c2VyNAkJCQl1NAlzdHIJdTQJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNAordXNlcjUJCQkJdTUJc3RyCXU1CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzUKK3VzZXI2CQkJCXU2CXN0cgl1NgktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM2Cit1c2VyNwkJCQl1NwlzdHIJdTcJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNwordXNlcjgJCQkJdTgJc3RyCXU4CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzgKK3VzZXI5CQkJCXU5CXN0cgl1OQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM5CisjCisjIFNWcjQgYWRkZWQgdGhlc2UgY2FwYWJpbGl0aWVzIHRvIHN1cHBvcnQgY29sb3IKKyMKK29yaWdfcGFpcgkJCW9wCXN0cglvcAktCQktCS0tLS0tCVNldCBkZWZhdWx0IHBhaXIgdG8gaXRzIG9yaWdpbmFsIHZhbHVlCitvcmlnX2NvbG9ycwkJCW9jCXN0cglvYwktCQktCS0tLS0tCVNldCBhbGwgY29sb3IgcGFpcnMgdG8gdGhlIG9yaWdpbmFsIG9uZXMKK2luaXRpYWxpemVfY29sb3IJCWluaXRjCXN0cglJYwktCQktCS0tLS0tCWluaXRpYWxpemUgY29sb3IgIzEgdG8gKCMyLCMzLCM0KQoraW5pdGlhbGl6ZV9wYWlyCQkJaW5pdHAJc3RyCUlwCS0JCS0JLS0tLS0JSW5pdGlhbGl6ZSBjb2xvciBwYWlyICMxIHRvIGZnPSgjMiwjMywjNCksIGJnPSgjNSwjNiwjNykKK3NldF9jb2xvcl9wYWlyCQkJc2NwCXN0cglzcAktCQktCS0tLS0tCVNldCBjdXJyZW50IGNvbG9yIHBhaXIgdG8gIzEKK3NldF9mb3JlZ3JvdW5kCQkJc2V0ZglzdHIJU2YJLQkJLQktLS0tLQlTZXQgZm9yZWdyb3VuZCBjb2xvciAjMQorc2V0X2JhY2tncm91bmQJCQlzZXRiCXN0cglTYgktCQktCS0tLS0tCVNldCBiYWNrZ3JvdW5kIGNvbG9yICMxCisjCisjIFNWcjQgYWRkZWQgdGhlc2UgY2FwYWJpbGl0aWVzIHRvIHN1cHBvcnQgcHJpbnRlcnMKKyMKK2NoYW5nZV9jaGFyX3BpdGNoCQljcGkJc3RyCVpBCS0JCS0JLS0tLS0JQ2hhbmdlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBlciBpbmNoIHRvICMxCitjaGFuZ2VfbGluZV9waXRjaAkJbHBpCXN0cglaQgktCQktCS0tLS0tCUNoYW5nZSBudW1iZXIgb2YgbGluZXMgcGVyIGluY2ggdG8gIzEKK2NoYW5nZV9yZXNfaG9yegkJCWNocglzdHIJWkMJLQkJLQktLS0tLQlDaGFuZ2UgaG9yaXpvbnRhbCByZXNvbHV0aW9uIHRvICMxCitjaGFuZ2VfcmVzX3ZlcnQJCQljdnIJc3RyCVpECS0JCS0JLS0tLS0JQ2hhbmdlIHZlcnRpY2FsIHJlc29sdXRpb24gdG8gIzEKK2RlZmluZV9jaGFyCQkJZGVmYwlzdHIJWkUJLQkJLQktLS0tLQlEZWZpbmUgYSBjaGFyYWN0ZXIgIzEsICMyIGRvdHMgd2lkZSwgZGVzY2VuZGVyICMzCitlbnRlcl9kb3VibGV3aWRlX21vZGUJCXN3aWRtCXN0cglaRgktCQktCS0tLS0tCUVudGVyIGRvdWJsZS13aWRlIG1vZGUKK2VudGVyX2RyYWZ0X3F1YWxpdHkJCXNkcmZxCXN0cglaRwktCQktCS0tLS0tCUVudGVyIGRyYWZ0LXF1YWxpdHkgbW9kZQorZW50ZXJfaXRhbGljc19tb2RlCQlzaXRtCXN0cglaSAktCQktCS0tLS0tCUVudGVyIGl0YWxpYyBtb2RlCitlbnRlcl9sZWZ0d2FyZF9tb2RlCQlzbG0Jc3RyCVpJCS0JCS0JLS0tLS0JU3RhcnQgbGVmdHdhcmQgY2FycmlhZ2UgbW90aW9uCitlbnRlcl9taWNyb19tb2RlCQlzbWljbQlzdHIJWkoJLQkJLQktLS0tLQlTdGFydCBtaWNyby1tb3Rpb24gbW9kZQorZW50ZXJfbmVhcl9sZXR0ZXJfcXVhbGl0eQlzbmxxCXN0cglaSwktCQktCS0tLS0tCUVudGVyIE5MUSBtb2RlCitlbnRlcl9ub3JtYWxfcXVhbGl0eQkJc25ybXEJc3RyCVpMCS0JCS0JLS0tLS0JRW50ZXIgbm9ybWFsLXF1YWxpdHkgbW9kZQorZW50ZXJfc2hhZG93X21vZGUJCXNzaG0Jc3RyCVpNCS0JCS0JLS0tLS0JRW50ZXIgc2hhZG93LXByaW50IG1vZGUKK2VudGVyX3N1YnNjcmlwdF9tb2RlCQlzc3VibQlzdHIJWk4JLQkJLQktLS0tLQlFbnRlciBzdWJzY3JpcHQgbW9kZQorZW50ZXJfc3VwZXJzY3JpcHRfbW9kZQkJc3N1cG0Jc3RyCVpPCS0JCS0JLS0tLS0JRW50ZXIgc3VwZXJzY3JpcHQgbW9kZQorZW50ZXJfdXB3YXJkX21vZGUJCXN1bQlzdHIJWlAJLQkJLQktLS0tLQlTdGFydCB1cHdhcmQgY2FycmlhZ2UgbW90aW9uCitleGl0X2RvdWJsZXdpZGVfbW9kZQkJcndpZG0Jc3RyCVpRCS0JCS0JLS0tLS0JRW5kIGRvdWJsZS13aWRlIG1vZGUKK2V4aXRfaXRhbGljc19tb2RlCQlyaXRtCXN0cglaUgktCQktCS0tLS0tCUVuZCBpdGFsaWMgbW9kZQorZXhpdF9sZWZ0d2FyZF9tb2RlCQlybG0Jc3RyCVpTCS0JCS0JLS0tLS0JRW5kIGxlZnQtbW90aW9uIG1vZGUKK2V4aXRfbWljcm9fbW9kZQkJCXJtaWNtCXN0cglaVAktCQktCS0tLS0tCUVuZCBtaWNyby1tb3Rpb24gbW9kZQorZXhpdF9zaGFkb3dfbW9kZQkJcnNobQlzdHIJWlUJLQkJLQktLS0tLQlFbmQgc2hhZG93LXByaW50IG1vZGUKK2V4aXRfc3Vic2NyaXB0X21vZGUJCXJzdWJtCXN0cglaVgktCQktCS0tLS0tCUVuZCBzdWJzY3JpcHQgbW9kZQorZXhpdF9zdXBlcnNjcmlwdF9tb2RlCQlyc3VwbQlzdHIJWlcJLQkJLQktLS0tLQlFbmQgc3VwZXJzY3JpcHQgbW9kZQorZXhpdF91cHdhcmRfbW9kZQkJcnVtCXN0cglaWAktCQktCS0tLS0tCUVuZCByZXZlcnNlIGNoYXJhY3RlciBtb3Rpb24KK21pY3JvX2NvbHVtbl9hZGRyZXNzCQltaHBhCXN0cglaWQktCQktCS0tLS0tCUxpa2UgY29sdW1uX2FkZHJlc3MgaW4gbWljcm8gbW9kZQorbWljcm9fZG93bgkJCW1jdWQxCXN0cglaWgktCQktCS0tLS0tCUxpa2UgY3Vyc29yX2Rvd24gaW4gbWljcm8gbW9kZQorbWljcm9fbGVmdAkJCW1jdWIxCXN0cglaYQktCQktCS0tLS0tCUxpa2UgY3Vyc29yX2xlZnQgaW4gbWljcm8gbW9kZQorbWljcm9fcmlnaHQJCQltY3VmMQlzdHIJWmIJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9yaWdodCBpbiBtaWNybyBtb2RlCittaWNyb19yb3dfYWRkcmVzcwkJbXZwYQlzdHIJWmMJLQkJLQktLS0tLQlMaWtlIHJvd19hZGRyZXNzICMxIGluIG1pY3JvIG1vZGUKK21pY3JvX3VwCQkJbWN1dTEJc3RyCVpkCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfdXAgaW4gbWljcm8gbW9kZQorb3JkZXJfb2ZfcGlucwkJCXBvcmRlcglzdHIJWmUJLQkJLQktLS0tLQlNYXRjaCBzb2Z0d2FyZSBiaXRzIHRvIHByaW50LWhlYWQgcGlucworcGFybV9kb3duX21pY3JvCQkJbWN1ZAlzdHIJWmYJLQkJLQktLS0tLQlMaWtlIHBhcm1fZG93bl9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGFybV9sZWZ0X21pY3JvCQkJbWN1YglzdHIJWmcJLQkJLQktLS0tLQlMaWtlIHBhcm1fbGVmdF9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGFybV9yaWdodF9taWNybwkJbWN1ZglzdHIJWmgJLQkJLQktLS0tLQlMaWtlIHBhcm1fcmlnaHRfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fdXBfbWljcm8JCQltY3V1CXN0cglaaQktCQktCS0tLS0tCUxpa2UgcGFybV91cF9jdXJzb3IgaW4gbWljcm8gbW9kZQorc2VsZWN0X2NoYXJfc2V0CQkJc2NzCXN0cglaagktCQktCS0tLS0tCVNlbGVjdCBjaGFyYWN0ZXIgc2V0LCAjMQorc2V0X2JvdHRvbV9tYXJnaW4JCXNtZ2IJc3RyCVprCS0JCS0JLS0tLS0JU2V0IGJvdHRvbSBtYXJnaW4gYXQgY3VycmVudCBsaW5lCitzZXRfYm90dG9tX21hcmdpbl9wYXJtCQlzbWdicAlzdHIJWmwJLQkJLQktLS0tLQlTZXQgYm90dG9tIG1hcmdpbiBhdCBsaW5lICMxIG9yIChpZiBzbWd0cCBpcyBub3QgZ2l2ZW4pICMyIGxpbmVzIGZyb20gYm90dG9tCitzZXRfbGVmdF9tYXJnaW5fcGFybQkJc21nbHAJc3RyCVptCS0JCS0JLS0tLS0JU2V0IGxlZnQgKHJpZ2h0KSBtYXJnaW4gYXQgY29sdW1uICMxCitzZXRfcmlnaHRfbWFyZ2luX3Bhcm0JCXNtZ3JwCXN0cglabgktCQktCS0tLS0tCVNldCByaWdodCBtYXJnaW4gYXQgY29sdW1uICMxCitzZXRfdG9wX21hcmdpbgkJCXNtZ3QJc3RyCVpvCS0JCS0JLS0tLS0JU2V0IHRvcCBtYXJnaW4gYXQgY3VycmVudCBsaW5lCitzZXRfdG9wX21hcmdpbl9wYXJtCQlzbWd0cAlzdHIJWnAJLQkJLQktLS0tLQlTZXQgdG9wIChib3R0b20pIG1hcmdpbiBhdCByb3cgIzEKK3N0YXJ0X2JpdF9pbWFnZQkJCXNiaW0Jc3RyCVpxCS0JCS0JLS0tLS0JU3RhcnQgcHJpbnRpbmcgYml0IGltYWdlIGdyYXBoaWNzCitzdGFydF9jaGFyX3NldF9kZWYJCXNjc2QJc3RyCVpyCS0JCS0JLS0tLS0JU3RhcnQgY2hhcmFjdGVyIHNldCBkZWZpbml0aW9uICMxLCB3aXRoICMyIGNoYXJhY3RlcnMgaW4gdGhlIHNldAorc3RvcF9iaXRfaW1hZ2UJCQlyYmltCXN0cglacwktCQktCS0tLS0tCVN0b3AgcHJpbnRpbmcgYml0IGltYWdlIGdyYXBoaWNzCitzdG9wX2NoYXJfc2V0X2RlZgkJcmNzZAlzdHIJWnQJLQkJLQktLS0tLQlFbmQgZGVmaW5pdGlvbiBvZiBjaGFyYWN0ZXIgc2V0ICMxCitzdWJzY3JpcHRfY2hhcmFjdGVycwkJc3ViY3MJc3RyCVp1CS0JCS0JLS0tLS0JTGlzdCBvZiBzdWJzY3JpcHRhYmxlIGNoYXJhY3RlcnMKK3N1cGVyc2NyaXB0X2NoYXJhY3RlcnMJCXN1cGNzCXN0cgladgktCQktCS0tLS0tCUxpc3Qgb2Ygc3VwZXJzY3JpcHRhYmxlIGNoYXJhY3RlcnMKK3RoZXNlX2NhdXNlX2NyCQkJZG9jcglzdHIJWncJLQkJLQktLS0tLQlQcmludGluZyBhbnkgb2YgdGhlc2UgY2hhcmFjdGVycyBjYXVzZXMgQ1IKK3plcm9fbW90aW9uCQkJemVyb20Jc3RyCVp4CS0JCS0JLS0tLS0JTm8gbW90aW9uIGZvciBzdWJzZXF1ZW50IGNoYXJhY3RlcgorIyUuVEUKKyMlLmFkCisjJQorIyVUaGUgZm9sbG93aW5nIHN0cmluZyBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQgaW4gdGhlIFNWcjQuMCB0ZXJtIHN0cnVjdHVyZSwKKyMlYnV0IHdlcmUgb3JpZ2luYWxseSBub3QgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIHBhZ2UuCisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzE4LgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCU3RyaW5nCW5hbWUJQ29kZVxmUgorY2hhcl9zZXRfbmFtZXMJCQljc25tCXN0cglaeQktCQktCS0tLS0tCVByb2R1Y2UgIzEndGggaXRlbSBmcm9tIGxpc3Qgb2YgY2hhcmFjdGVyIHNldCBuYW1lcwora2V5X21vdXNlCQkJa21vdXMJc3RyCUttCUtFWV9NT1VTRQkwNjMxCS0tLS0tCU1vdXNlIGV2ZW50IGhhcyBvY2N1cnJlZAorbW91c2VfaW5mbwkJCW1pbmZvCXN0cglNaQktCQktCS0tLS0tCU1vdXNlIHN0YXR1cyBpbmZvcm1hdGlvbgorcmVxX21vdXNlX3BvcwkJCXJlcW1wCXN0cglSUQktCQktCS0tLS0tCVJlcXVlc3QgbW91c2UgcG9zaXRpb24KK2dldF9tb3VzZQkJCWdldG0Jc3RyCUdtCS0JCS0JLS0tLS0JQ3Vyc2VzIHNob3VsZCBnZXQgYnV0dG9uIGV2ZW50cywgcGFyYW1ldGVyICMxIG5vdCBkb2N1bWVudGVkLgorc2V0X2FfZm9yZWdyb3VuZAkJc2V0YWYJc3RyCUFGCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitzZXRfYV9iYWNrZ3JvdW5kCQlzZXRhYglzdHIJQUIJLQkJLQktLS0tLQlTZXQgYmFja2dyb3VuZCBjb2xvciB0byAjMSwgdXNpbmcgQU5TSSBlc2NhcGUKK3BrZXlfcGxhYgkJCXBmeGwJc3RyCXhsCS0JCS0JLS0tLS0JUHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHlwZSBzdHJpbmcgIzIgYW5kIHNob3cgc3RyaW5nICMzCitkZXZpY2VfdHlwZQkJCWRldnQJc3RyCWR2CS0JCS0JLS0tLS0JSW5kaWNhdGUgbGFuZ3VhZ2UvY29kZXNldCBzdXBwb3J0Citjb2RlX3NldF9pbml0CQkJY3NpbglzdHIJY2kJLQkJLQktLS0tLQlJbml0IHNlcXVlbmNlIGZvciBtdWx0aXBsZSBjb2Rlc2V0cworc2V0MF9kZXNfc2VxCQkJczBkcwlzdHIJczAJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDAgKEVVQyBzZXQgMCwgQVNDSUkpCitzZXQxX2Rlc19zZXEJCQlzMWRzCXN0cglzMQktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMQorc2V0Ml9kZXNfc2VxCQkJczJkcwlzdHIJczIJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDIKK3NldDNfZGVzX3NlcQkJCXMzZHMJc3RyCXMzCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAzCitzZXRfbHJfbWFyZ2luCQkJc21nbHIJc3RyCU1MCS0JCS0JLS0tLS0JU2V0IGJvdGggbGVmdCBhbmQgcmlnaHQgbWFyZ2lucyB0byAjMSwgIzIuICAoTUwgaXMgbm90IGluIEJTRCB0ZXJtY2FwKS4KK3NldF90Yl9tYXJnaW4JCQlzbWd0YglzdHIJTVQJLQkJLQktLS0tLQlTZXRzIGJvdGggdG9wIGFuZCBib3R0b20gbWFyZ2lucyB0byAjMSwgIzIKK2JpdF9pbWFnZV9yZXBlYXQJCWJpcmVwCXN0cglYeQktCQktCS0tLS0tCVJlcGVhdCBiaXQgaW1hZ2UgY2VsbCAjMSAjMiB0aW1lcworYml0X2ltYWdlX25ld2xpbmUJCWJpbmVsCXN0cglaegktCQktCS0tLS0tCU1vdmUgdG8gbmV4dCByb3cgb2YgdGhlIGJpdCBpbWFnZQorYml0X2ltYWdlX2NhcnJpYWdlX3JldHVybgliaWNyCXN0cglZdgktCQktCS0tLS0tCU1vdmUgdG8gYmVnaW5uaW5nIG9mIHNhbWUgcm93Citjb2xvcl9uYW1lcwkJCWNvbG9ybm0Jc3RyCVl3CS0JCS0JLS0tLS0JR2l2ZSBuYW1lIGZvciBjb2xvciAjMQorZGVmaW5lX2JpdF9pbWFnZV9yZWdpb24JCWRlZmJpCXN0cglZeAktCQktCS0tLS0tCURlZmluZSByZWN0YW5ndWFsYXIgYml0IGltYWdlIHJlZ2lvbgorZW5kX2JpdF9pbWFnZV9yZWdpb24JCWVuZGJpCXN0cglZeQktCQktCS0tLS0tCUVuZCBhIGJpdC1pbWFnZSByZWdpb24KK3NldF9jb2xvcl9iYW5kCQlzZXRjb2xvcglzdHIJWXoJLQkJLQktLS0tLQlDaGFuZ2UgdG8gcmliYm9uIGNvbG9yICMxCitzZXRfcGFnZV9sZW5ndGgJCQlzbGluZXMJc3RyCVlaCS0JCS0JLS0tLS0JU2V0IHBhZ2UgbGVuZ3RoIHRvICMxIGxpbmVzCisjCisjIFNWcjQgYWRkZWQgdGhlc2UgY2FwYWJpbGl0aWVzIGZvciBkaXJlY3QgUEMtY2xvbmUgc3VwcG9ydAorIworZGlzcGxheV9wY19jaGFyCQkJZGlzcGMJc3RyCVMxCS0JCS0JLS0tLS0JRGlzcGxheSBQQyBjaGFyYWN0ZXIgIzEKK2VudGVyX3BjX2NoYXJzZXRfbW9kZQkJc21wY2gJc3RyCVMyCS0JCS0JLS0tLS0JRW50ZXIgUEMgY2hhcmFjdGVyIGRpc3BsYXkgbW9kZQorZXhpdF9wY19jaGFyc2V0X21vZGUJCXJtcGNoCXN0cglTMwktCQktCS0tLS0tCUV4aXQgUEMgY2hhcmFjdGVyIGRpc3BsYXkgbW9kZQorZW50ZXJfc2NhbmNvZGVfbW9kZQkJc21zYwlzdHIJUzQJLQkJLQktLS0tLQlFbnRlciBQQyBzY2FuY29kZSBtb2RlCitleGl0X3NjYW5jb2RlX21vZGUJCXJtc2MJc3RyCVM1CS0JCS0JLS0tLS0JRXhpdCBQQyBzY2FuY29kZSBtb2RlCitwY190ZXJtX29wdGlvbnMJCQlwY3RybQlzdHIJUzYJLQkJLQktLS0tLQlQQyB0ZXJtaW5hbCBvcHRpb25zCitzY2FuY29kZV9lc2NhcGUJCQlzY2VzYwlzdHIJUzcJLQkJLQktLS0tLQlFc2NhcGUgZm9yIHNjYW5jb2RlIGVtdWxhdGlvbgorYWx0X3NjYW5jb2RlX2VzYwkJc2Nlc2EJc3RyCVM4CS0JCS0JLS0tLS0JQWx0ZXJuYXRlIGVzY2FwZSBmb3Igc2NhbmNvZGUgZW11bGF0aW9uCisjJS5URQorIyUuYWQKKyMlCisjJS5pbiAuOGkKKyMlVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgYWRkZWQgdGhlc2UuICBUaGV5IGFyZSBzb21lIHBvc3QtNC4xIAorIyV2ZXJzaW9ucyBvZiBTeXN0ZW0gViBjdXJzZXMsIGUuZy4sIFNvbGFyaXMgMi41IGFuZCBJUklYIDYueC4KKyMlVGhlIFxmQm5jdXJzZXNcZlIgdGVybWNhcCBuYW1lcyBmb3IgdGhlbSBhcmUgaW52ZW50ZWQ7IGFjY29yZGluZyB0byB0aGUKKyMlWFNJIEN1cnNlcyBzdGFuZGFyZCwgdGhleSBoYXZlIG5vIHRlcm1jYXAgbmFtZXMuICBJZiB5b3VyIGNvbXBpbGVkIHRlcm1pbmZvCisjJWVudHJpZXMgdXNlIHRoZXNlLCB0aGV5IG1heSBub3QgYmUgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCBTeXN0ZW0gViB0ZXJtaW5mbworIyVlbnRyaWVzIGFmdGVyIFNWcjQuMTsgYmV3YXJlIQorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2VudGVyX2hvcml6b250YWxfaGxfbW9kZQllaGhsbQlzdHIJWGgJLQkJLQktLS0tLQlFbnRlciBob3Jpem9udGFsIGhpZ2hsaWdodCBtb2RlCitlbnRlcl9sZWZ0X2hsX21vZGUJCWVsaGxtCXN0cglYbAktCQktCS0tLS0tCUVudGVyIGxlZnQgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX2xvd19obF9tb2RlCQllbG9obG0Jc3RyCVhvCS0JCS0JLS0tLS0JRW50ZXIgbG93IGhpZ2hsaWdodCBtb2RlCitlbnRlcl9yaWdodF9obF9tb2RlCQllcmhsbQlzdHIJWHIJLQkJLQktLS0tLQlFbnRlciByaWdodCBoaWdobGlnaHQgbW9kZQorZW50ZXJfdG9wX2hsX21vZGUJCWV0aGxtCXN0cglYdAktCQktCS0tLS0tCUVudGVyIHRvcCBoaWdobGlnaHQgbW9kZQorZW50ZXJfdmVydGljYWxfaGxfbW9kZQkJZXZobG0Jc3RyCVh2CS0JCS0JLS0tLS0JRW50ZXIgdmVydGljYWwgaGlnaGxpZ2h0IG1vZGUKK3NldF9hX2F0dHJpYnV0ZXMJCXNncjEJc3RyCXNBCS0JCS0JLS0tLS0JRGVmaW5lIHNlY29uZCBzZXQgb2YgdmlkZW8gYXR0cmlidXRlcyAjMS0jNgorc2V0X3BnbGVuX2luY2gJCQlzbGVuZ3RoCXN0cglzTAktCQktCS0tLS0tCVlJIFNldCBwYWdlIGxlbmd0aCB0byAjMSBodW5kcmVkdGggb2YgYW4gaW5jaAorIyUuVEUKKyMlLmFkCisjCisjIFRoZSBtYWdpYyB0b2tlbiBiZWxvdyB0ZWxscyB0aGUgdGljIGNvbXBpbGVyLWdlbmVyYXRvciBjb2RlIHRoYXQgYWxsIHRoZSBjYXBzCisjIHBhc3QgaXQgc2hvdWxkIGJlIGlnbm9yZWQgKG5vdCB3cml0dGVuIG91dCkgd2hlbiBkdW1waW5nIHRlcm1pbmZvIG9iamVjdHMuIEl0CisjIGFsc28gdGVsbHMgdGhlIG1hbiBwYWdlIHRhYmxlIGdlbmVyYXRvciBub3QgdG8gcGFzcyB0aHJvdWdoIGZvbGxvd2luZyBsaW5lcworIyBUaGlzIG1lYW5zIHdlIGNhbiBoYXZlIG9ic29sZXRlIGNhcGFiaWxpdGllcyBhbmQgcHNldWRvLWNhcGFiaWxpdGllcyB0aGF0IGFyZQorIyByZWNvZ25pemVkIGZvciB0ZXJtY2FwIG9yIHRlcm1pbmZvIGNvbXBpbGF0aW9uLCBidXQgbm90IG91dHB1dC4KKyMKKyMgJSUtU1RPUC1IRVJFLSUlCisjCisjIERvbid0IG1vdmUgdGhpcyBjYXN1YWxseSEgIEluIGZhY3QsIGRvbid0IG1vdmUgaXQgYXQgYWxsIHVubGVzcyB5b3UncmUKKyMgZWl0aGVyIGRvaW5nIGl0IHRvIGFkZCBTeXN0ZW0gViBvciBYUEc0IGV4dGVuc2lvbnMsIG9yIGhhdmUgZGVjaWRlZCB5b3UKKyMgZG9uJ3QgY2FyZSBhYm91dCBTVnI0IGJpbmFyeSBjb21wYXRpYmlsaXR5LgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVEVSTUNBUCBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoZSBjYXBhYmlsaXRpZXMgYmVsb3cgYXJlIGVpdGhlciBvYnNvbGV0ZSBvciBleHRlbnNpb25zIG9uIGNlcnRhaW4gc3lzdGVtcy4KKyMgVGhleSBhcmUgbm90IHVzZWQgYnkgU1ZSNCB0ZXJtaW5mby4gIFNvbWUgYXJlIHVzZWQgYnkgY2FwdG9pbmZvIHRvIHRyYW5zbGF0ZQorIyB0ZXJtY2FwIHNvdXJjZXM7IHRoZSByZXN0IGFyZSBsaXN0ZWQgZm9yIGNvbXBsZXRlbmVzcywgYW5kIGluIGNhc2Ugc29tZWJvZHkKKyMgY2FyZXMgYWJvdXQgdGhlbSBlbm91Z2ggdG8gaGFjayBpbiBjb2RlIHRoYXQgd2lsbCB0cmFuc2xhdGUgdGhlbSBpbnRvCisjIHRlcm1pbmZvIGNhcGFiaWxpdGllcy4KKyMKKyMgVGhlIGZpcnN0IHBhcnQgb2YgdGhlIGxpc3QgaXMgZnJvbSBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UKKyMgKGNvbXAuc291cmNlcy51bml4LCB2b2x1bWUgMjYpOyB0aGUgdmFyaWFibGUgbmFtZXMgYW5kIHRlcm1pbmZvIG5hbWVzIChhcworIyB3ZWxsIGFzIHRoZSB0ZXJtY2FwIGNvZGVzKSBtYXRjaCBoaXMgbGlzdC4KKyMKKyMgVGhpcyBncm91cCBvZiBjb2RlcyBpcyBub3QgbWFya2VkIG9ic29sZXRlIGluIDQuNEJTRCwgYnV0IGhhdmUgbm8gZGlyZWN0CisjIHRlcm1pbmZvIGVxdWl2YWxlbnRzLiAgVGhlIHJzIGNhcGFiaWxpdHkgaXMgc3BlY2lhbGx5IHRyYW5zbGF0ZWQgdG8gdGVybWluZm8KKyMgcjIsIGFuZCB2aWNlIHZlcnNhLCBpZiBhbiBlbnRyeSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW4gcjIuICBTaW1pbGFybHksCisjIGkyIGlzIHRyYW5zbGF0ZWQgdG8gcjMgaWYgdGhlcmUgaXMgbm8gcjMgKGJlY2F1c2UgU1YgdGVybWluZm8gbWFwcyBpcyB0byBpMikuCisjIFRoZSB1ZyBjYXBhYmlsaXR5IGlzIHRocm93biBhd2F5LCBidXQgYXNzdW1lZCB0byBiZSB3aGF0ZXZlciBzZyBpcyBpZiB0aGUKKyMgbGF0dGVyIGlzIG5vbnplcm8gYW5kIHdlJ3JlIGR1bXBpbmcgaW4gdGVybWNhcCBmb3JtYXQuCisjCit0ZXJtY2FwX2luaXQyCQkJT1RpMglzdHIJaTIJLQkJLQlZQi0tLQlzZWNvbmRhcnkgaW5pdGlhbGl6YXRpb24gc3RyaW5nCit0ZXJtY2FwX3Jlc2V0CQkJT1RycwlzdHIJcnMJLQkJLQlZQi1HLQl0ZXJtaW5hbCByZXNldCBzdHJpbmcKK21hZ2ljX2Nvb2tpZV9nbGl0Y2hfdWwJCU9UdWcJbnVtCXVnCS0JCS0JWUJDR0UJbnVtYmVyIG9mIGJsYW5rcyBsZWZ0IGJ5IHVsCisjCisjIE9ic29sZXRlIHRlcm1jYXAgY2FwYWJpbGl0aWVzLiAgU29tZSBhcmUgdXNlZCBmb3IgdGVybWNhcCB0cmFuc2xhdGlvbi4gIFRoZQorIyBjb2RlIHVzZXMgdGhlICdPVCcgcHJlZml4IHdlIHB1dCBvbiBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgdG8gc3VwcHJlc3MKKyMgcHJpbnRpbmcgdGhlbSBpbiB0ZXJtaW5mbyBzb3VyY2UgZHVtcHMgb2YgY29tcGlsZWQgZW50cmllcy4KKyMKK2JhY2tzcGFjZXNfd2l0aF9icwkJT1Ricwlib29sCWJzCS0JCS0JWUJDR0UJdXNlcyBeSCB0byBtb3ZlIGxlZnQKK2NydF9ub19zY3JvbGxpbmcJCU9UbnMJYm9vbAlucwktCQktCVlCQ0ctCWNydCBjYW5ub3Qgc2Nyb2xsCitub19jb3JyZWN0bHlfd29ya2luZ19jcgkJT1RuYwlib29sCW5jCS0JCS0JWUJDRy0Jbm8gd2F5IHRvIGdvIHRvIHN0YXJ0IG9mIGxpbmUKK2NhcnJpYWdlX3JldHVybl9kZWxheQkJT1RkQwludW0JZEMJLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBDUgorbmV3X2xpbmVfZGVsYXkJCQlPVGROCW51bQlkTgktCQktCVlCLUctCXBhZCBuZWVkZWQgZm9yIExGCitsaW5lZmVlZF9pZl9ub3RfbGYJCU9UbmwJc3RyCW5sCS0JCS0JWUJDR0UJdXNlIHRvIG1vdmUgZG93bgorYmFja3NwYWNlX2lmX25vdF9icwkJT1RiYwlzdHIJYmMJLQkJLQlZQkNHRQltb3ZlIGxlZnQsIGlmIG5vdCBeSAorIworIyBHTlUgdGVybWNhcCBsaWJyYXJ5IGV4dGVuc2lvbnMuICBUaGUgR05VIHRlcm1jYXAgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIEVtYWNzIG5vIGxvbmdlciB1c2VzIHRoZXNlLCBidXQgTVQgc2hvd2VkIHVwIGluIHByZS05LjAgdmVyc2lvbnMgb2YgdGhlCisjIEJTRCB0ZXJtY2FwIGZpbGUuICBUaGUgbmFtZSBjbGFzaCB3aXRoIHRlcm1pbmZvIE1UIGlzIHJlc29sdmVkIGJ5IHR5cGUKKyMgaW5mbzsgTVQgaXMgY29udmVydGVkIHRvIGttLgorIworZ251X2hhc19tZXRhX2tleQkJT1RNVAlib29sCU1UCS0JCS0JLS0tLUUJaGFzIG1ldGEga2V5CisjIGdudV90YWJfd2lkdGgJCQlPVHR3CW51bQl0dwktCQktCS0tLS1FCXRhYiB3aWR0aCBpbiBzcGFjZXMKKyMKKyMgR05VIHRlcm1jYXAgKmRvZXMqIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBleHRlbmRlZCBjYXBhYmlsaXR5LCAgT25seSB0aGUKKyMgbm93LW9ic29sZXRlIEFubiBBcmJvciB0ZXJtaW5hbHMgdXNlZCBpdC4KKyMKKyMgZ251X2NoYW5nZV9zY3JvbGxfcmVnaW9uCU9UY1MJc3RyCWNTCS0JCS0JLS0tR0UJYWx0ZXJuYXRlIHNldCBzY3JvbGxpbmcgcmVnaW9uIAorIworIyBUaGUgZm9sbG93aW5nIGNvbW1lbnRzIGRlc2NyaWJlIGNhcG5hbWVzIHNvIGFuY2llbnQgdGhhdCBJIGJlbGlldmUgbm8KKyMgc29mdHdhcmUgdXNlcyB0aGVtIGFueSBsb25nZXIuICBTb21lIG9mIHRoZXNlIGhhdmUgdG8gZ28gYmVjYXVzZSB0aGV5CisjIGNsYXNoIHdpdGggdGVybWluZm8gbmFtZXMgaW4gd2F5cyB0aGF0IGNhbm5vdCBiZSByZXNvbHZlZCBieSB0eXBlCisjIGluZm9ybWF0aW9uLgorIworIyBUaGVzZSBteXRpbmZvIGNvZGVzIGFyZSBub3QgdXNlZCBpbiB0aGUgNC40QlNEIGN1cnNlcyBjb2RlLiAgVGhleSBhcmUKKyMgbWFya2VkIG9ic29sZXRlIGluIHRoZSA0LjRCU0QgbWFudWFsIHBhZ2VzLgorIworIyBUaGVyZSBpcyBvbmUgY29uZmxpY3Qgd2l0aCB0ZXJtaW5mbzsgbWEgaXMgaW4gYm90aC4gIFRoaXMgY29uZmxpY3QgaXMKKyMgcmVzb2x2ZWQgYnkgdHlwZSBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlIGBrbycgY2FwYWJpbGl0eSBpcyB0cmFuc2xhdGVkIGJ5IHNwZWNpYWwgY29kZS4gIEl0IHNob3VsZCBjb250YWluIGEKKyMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2FwYWJpbGl0aWVzIGZvciB3aGljaCB0aGVyZSBhcmUgY29ycmVzcG9uZGluZyBrZXlzLgorIyBUaGUgYGtuJyBjb2RlIGlzIGFjY2VwdGVkIGJ1dCBpZ25vcmVkLgorIworIyBUaGUgYG1hJyBjYXBhYmlsaXR5IHNlZW1zIHRvIGhhdmUgYmVlbiBkZXNpZ25lZCB0byBtYXAgYmV0d2VlbiB0aGUgcm9ndWUoMikKKyMgbW90aW9uIGtleXMgKGluY2x1ZGluZyBqa2hsKSBhbmQgY2hhcmFjdGVycyBlbWl0dGVkIGJ5IGFycm93IGtleXMgb24gc29tZQorIyBwcmltaXRpdmUgcHJlLUFOU0kgdGVybWluYWxzLiAgSXQncyBzbyBvYnNvbGV0ZSBpdCdzIGZvc3NpbGl6ZWQuLi4KKyMKKyMgSGVyZSBpcyBhIGRlc2NyaXB0aW9uIG9mIG1lbW9yeV9sb2NrX2Fib3ZlIGFuZCBtZW1vcnlfdW5sb2NrOgorIyAiWW91IGNhbiAnZnJlZXplJyBkYXRhIG9uIHRoZSBzY3JlZW4gYnkgdHVybmluZyBvbiBNZW1vcnkgTG9jayBpbiBhIGxpbmUgb2YKKyMgdGV4dC4gIEFsbCBsaW5lcyBhYm92ZSB0aGUgY3Vyc29yJ3MgY3VycmVudCBsaW5lIGJlY29tZSBsb2NrZWQgaW4gcGxhY2Ugb24KKyMgdGhlIHNjcmVlbi4gIFRoZW4gZW50ZXIgZGF0YSBub3JtYWxseS4gIFdoZW4gdGhlIHNjcmVlbiBmaWxscyB1cCwgYW55CisjIGZ1cnRoZXIgZGF0YSBlbnRlcmVkIGZvcmNlcyB0aGUgZmlyc3QgbGluZSBvZiB1bmZyb3plbiBsaW5lIHRleHQgdG8gc2Nyb2xsCisjIHVuZGVyIHRoZSBmcm96ZW4gZGF0YS4gIExpbmVzIHNjcm9sbGVkIG9mZiB0aGUgc2NyZWVuIGFyZSBpbnNlcnRlZCBpbnRvCisjIG1lbW9yeSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlIGZpcnN0IGZyb3plbiBsaW5lLiIgKGZyb20gdGhlIEhQIDcwMC85NgorIyBVc2VyJ3MgbWFudWFsKS4gIFZUMTAwL0FOU0kgbWVtb3J5IGxvY2sgc2V0IGlzIFxFWz4yaCwgcmVzZXQgaXMgXEVbPjJsLgorIworIyBBcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGVybWluZm8gYXJlIHN1cHBvc2VkIHRvIGJlaGF2ZSBhcyB0aG91Z2ggeHIgaXMKKyMgYWx3YXlzIHRydWUuCisjCitsaW5lZmVlZF9pc19uZXdsaW5lCQlPVE5MCWJvb2wJTkwJLQkJLQlZQi0tLQltb3ZlIGRvd24gd2l0aCBcbgorIyBldmVuX3Bhcml0eQkJCU9URVAJYm9vbAlFUAktCQktCS1CLS0tCXRlcm1pbmFsIHJlcXVpcmVzIGV2ZW4gcGFyaXR5CisjIG9kZF9wYXJpdHkJCQlPVE9QCWJvb2wJT1AJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBvZGQgcGFyaXR5CisjIGhhbGZfZHVwbGV4CQkJT1RIRAlib29sCUhECS0JCS0JLUItLS0JdGVybWluYWwgaXMgaGFsZi1kdXBsZXgKKyMgbG93ZXJfY2FzZV9vbmx5CQlPVExDCWJvb2wJTEMJLQkJLQktQi0tLQl0ZXJtaW5hbCBoYXMgb25seSBsb3dlciBjYXNlCisjIHVwcGVyX2Nhc2Vfb25seQkJT1RVQwlib29sCVVDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgdXBwZXIgY2FzZQorYmFja3NwYWNlX2RlbGF5CQkJT1RkQgludW0JZEIJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSAorIyBmb3JtX2ZlZWRfZGVsYXkJCU9UZEYJbnVtCWRGCS0JCS0JLUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkwKK2hvcml6b250YWxfdGFiX2RlbGF5CQlPVGRUCW51bQlkVAktCQktCVlCLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5JCisjIHZlcnRpY2FsX3RhYl9kZWxheQkJT1RkVgludW0JZFYJLQkJLQktQi0tLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeVgorbnVtYmVyX29mX2Z1bmN0aW9uX2tleXMJCU9Ua24JbnVtCWtuCS0JCS0JLUItRy0JY291bnQgb2YgZnVuY3Rpb24ga2V5cworb3RoZXJfbm9uX2Z1bmN0aW9uX2tleXMJCU9Ua28Jc3RyCWtvCS0JCS0JLUItRy0JbGlzdCBvZiBzZWxmLW1hcHBlZCBrZXljYXBzCithcnJvd19rZXlfbWFwCQkJT1RtYQlzdHIJbWEJLQkJLQlZQkMtLQltYXAgYXJyb3cga2V5cyByb2d1ZSgxKSBtb3Rpb24ga2V5cworIyBtZW1vcnlfbG9ja19hYm92ZQkJT1RtbAlzdHIJbWwJLQkJLQktQi0tLQlsb2NrIHZpc2libGUgc2NyZWVuIG1lbW9yeSBhYm92ZSB0aGUgY3VycmVudCBsaW5lCisjIG1lbW9yeV91bmxvY2sJCQlPVG11CXN0cgltdQktCQktCS1CLS0tCXVubG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQoraGFzX2hhcmR3YXJlX3RhYnMJCU9UcHQJYm9vbAlwdAktCQktCVlCLS0tCWhhcyA4LWNoYXIgdGFicyBpbnZva2VkIHdpdGggXkkKK3JldHVybl9kb2VzX2Nscl9lb2wJCU9UeHIJYm9vbAl4cgktCQktCVlCLS0tCXJldHVybiBjbGVhcnMgdGhlIGxpbmUKKyMgdGVrXzQwMjVfaW5zZXJ0X2xpbmUJCU9UeHgJYm9vbAl4eAktCQktCS1CQy0tCVRla3Ryb25peCA0MDI1IGluc2VydC1saW5lIGdsaXRjaAorIworIyBteXRpbmZvIGRlc2NyaWJlZCB0aGlzIGFzIGEgdGVybWNhcCBjYXBhYmlsaXR5LCBidXQgaXQncyBub3QgbGlzdGVkIGluIHRoZQorIyA0LjRCU0QgbWFuIHBhZ2VzLCBhbmQgbm90IGZvdW5kIGluIHRoZSA0LjRCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5jdXJzZXMKKyMgcGFja2FnZSwgbGlrZSBTeXN0ZW0gViwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYWx3YXlzIHRydWUuCisjCisjIHJpbmRfb25seV9hdF90b3AJCU9UeHEJYm9vbAl4cQktCQktCS0tLS0tCXJldmVyc2UgaW5kZXggb25seSB3b3JrcyBmcm9tIHRvcCBsaW5lCisjCisjIFVuaXZlcnNpdHkgb2YgV2F0ZXJsb28gdGVybWNhcCBleHRlbnNpb25zIChhcyBkZXNjcmliZWQgaW4gbXl0aW5mbykuCisjIFRoZSBgeGwnIHRlcm1jYXAgZmlsZSBjbGFzaGVzIHdpdGggYSB0ZXJtaW5mbyBuYW1lOyB0aGlzIGFtYmlndWl0eSBjYW5ub3QKKyMgYmUgcmVzb2x2ZWQgYnkgYSB0eXBlIGNoZWNrLiAgVGhlIGRlc2NyaXB0aW9ucyBhcmUgZ3Vlc3NlcyBmcm9tIHdoYXQgd2FzCisjIGluIHRoZSBteXRpbmZvIHRhYmxlcy4gCisjCisjIGtleV9pbnRlcnJ1cHRfY2hhcgkJT1RraQlzdHIJa2kJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGludGVycnVwdCBrZXkgKD8pCisjIGtleV9raWxsX2NoYXIJCQlPVGtrCXN0cglrawktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkga2lsbCBrZXkgKD8pCisjIGtleV9zdXNwZW5kX2NoYXIJCU9Ua3oJc3RyCWt6CS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBzdXNwZW5kIGtleSAoPykKKyMgaW5pdGlhbGl6YXRpb25fbWVzc3kJCU9UeGMJYm9vbAl4YwktCQktCS0tLS0tCWluaXRpYWxpemF0aW9uIGxlYXZlcyBnYXJiYWdlIG9uIHRoZSBzY3JlZW4gKD8pCisjIGluZF9hdF9ib3R0b21fZG9lc19jcgkJT1R4bAlib29sCXhsCS0JCS0JLS0tLS0JaW5kZXggZG9lcyBhIGNhcnJpYWdlIHJldHVybgorIworIyBOb25zdGFuZGFyZCBjYXBhYmlsaXRpZXMgdW5pcXVlIHRvIFJvc3MgUmlkZ2UncyBgbXl0aW5mbycgcGFja2FnZS4KKyMgU1IgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90IGJlIHJlc29sdmVkIGJ5IGEgdHlwZQorIyBjaGVjay4KKyMKKyMgc2Nyb2xsX2xlZnQJCQlPVHNsMQlzdHIJU2wJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIGxlZnR3YXJkCisjIHNjcm9sbF9yaWdodAkJCU9Uc3IxCXN0cglTcgktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gcmlnaHR3YXJkCisjIHBhcm1fc2Nyb2xsX2xlZnQJCU9Uc2wJc3RyCVNMCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZCAjMSBjaGFyYWN0ZXJzCisjIHBhcm1fc2Nyb2xsX3JpZ2h0CQlPVHNyCXN0cglTUgktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gcmlnaHR3YXJkICMxIGNoYXJhY3RlcnMKKyMKKyMgVGhlIG15dGluZm8gY2FwYWJpbGl0aWVzIGVuZCBoZXJlLgorIworIyBYRU5JWCBleHRlbnNpb25zOgorIworIyBYZW5peCBkZWZpbmVkIGl0cyBvd24gc2V0IG9mIGZvcm1zLWRyYXdpbmcgY2FwYWJpbGl0aWVzOgorIworIyBjYXAJSUJNIEFTQ0lJCWRlc2NyaXB0aW9uICAgICAgICAgICAgIEFDUyAgICAgICAgIAlBU0NJSQorIyAtLS0JLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLQktLS0tLS0KKyMgRzEJMTkxIFwyNzcgTS0/CXNpbmdsZSB1cHBlciByaWdodCAgIAlBQ1NfVVJDT1JORVIKKyMgRzIJMjE4IFwzMzIgTS1aCXNpbmdsZSB1cHBlciBsZWZ0CUFDU19VTENPUk5FUgorIyBHMwkxOTIgXDMwMCBNLUAJc2luZ2xlIGxvd2VyIGxlZnQJQUNTX0xMQ09STkVSCisjIEc0CTIxNyBcMzMxIE0tWQlzaW5nbGUgbG93ZXIgcmlnaHQJQUNTX0xSQ09STkVSCisjIEc1CTE4NyBcMjczIE0tOwlkb3VibGUgdXBwZXIgcmlnaHQKKyMgRzYJMjAxIFwzMTEgTS1JCWRvdWJsZSB1cHBlciBsZWZ0CisjIEc3CTIwMCBcMzEwIE0tSAlkb3VibGUgbG93ZXIgbGVmdAorIyBHOAkxODggXDI3NCBNLTwJZG91YmxlIGxvd2VyIHJpZ2h0CisjIEdDCTE5NyBcMzA1IE0tRQlzaW5nbGUgaW50ZXJzZWN0aW9uCUFDU19QTFVTCV8gXworIyBHRAkxOTQgXDMwMiBNLUIJc2luZ2xlIGRvd24tdGljawlBQ1NfVFRFRQkgfAorIyBHSAkxOTYgXDMwNCBNLUQJc2luZ2xlIGhvcml6b250YWwgbGluZQlBQ1NfSExJTkUKKyMgR0wJMTgwIFwyNjQgTS00CXNpbmdsZSBsZWZ0IHRpY2sJQUNTX1JURUUJLXwKKyMgR1IJMTk1IFwzMDMgTS1DCXNpbmdsZSByaWdodCB0aWNrCUFDU19MVEVFCXwtCisjIEdVCTE5MyBcMzAxIE0tQQlzaW5nbGUgdXAgdGljawkJQUNTX0JURUUJX3xfCisjIEdWCTE3OSBcMjYzIE0tMwlzaW5nbGUgdmVydGljYWwgbGluZQlBQ1NfVkxJTkUKKyMgR2MJMjA2IFwzMTYgTS1OCWRvdWJsZSBpbnRlcnNlY3Rpb24KKyMgR2QJMjAzIFwzMTMgTS1LCWRvdWJsZSBkb3duIHRpY2sKKyMgR2gJMjA1IFwzMTUgTS1NCWRvdWJsZSBob3Jpem9udGFsIGxpbmUKKyMgR2wJMjA0IFwyMDQgTS1MCWRvdWJsZSBsZWZ0IHRpY2sKKyMgR3IJMTg1IFwyNzEgTS05CWRvdWJsZSByaWdodCB0aWNrCisjIEd1CTIwMiBcMzEyIE0tSglkb3VibGUgdXAgdGljaworIyBHdgkxODYgXDI3MiBNLToJZG91YmxlIHZlcnRpY2FsIGxpbmUKKyMKKyMgVGhlIGNvbXBpbGVyIHdpbGwgdHJhbnNsYXRlIHRoZSBzaW5nbGUtbGluZSBjYXBzIGFuZCBkaXNjYXJkIHRoZSBvdGhlcnMKKyMgKHZpYSBJR05PUkUgYWxpYXNlcyBmdXJ0aGVyIGRvd24pLiAgV2UgZG9uJ3Qgd2FudCB0byBkbyBub3JtYWwgcGFkIAorIyB0cmFuc2xhdGlvbiBvbiB0aGVzZSwgdGhleSdyZSBvZnRlbiBzaW5nbGUtY2hhcmFjdGVyIHByaW50YWJsZSBBU0NJSQorIyBzdHJpbmdzIHRoYXQgaGFwcGVuIHRvIGJlIG51bWVyaWNzLiAgVGhlcmUncyBhd2sgY29kZSBpbiBwYXJhbWV0cml6ZWQuc2gKKyMgdGhhdCBkZXRlY3RzIHRoZSBhY3NfIHByZWZpeCBhbmQgdXNlcyBpdCB0byBzdXBwcmVzcyBwYWQgdHJhbnNsYXRpb24uCisjIFRoZXNlIHRlcm1pbmZvIG5hbWVzIGFyZSBpbnZlbnRlZC4KKyMKK2Fjc191bGNvcm5lcgkJCU9URzIJc3RyCUcyCS0JCS0JLS0tLS0Jc2luZ2xlIHVwcGVyIGxlZnQKK2Fjc19sbGNvcm5lcgkJCU9URzMJc3RyCUczCS0JCS0JLS0tLS0Jc2luZ2xlIGxvd2VyIGxlZnQKK2Fjc191cmNvcm5lcgkJCU9URzEJc3RyCUcxCS0JCS0JLS0tLS0Jc2luZ2xlIHVwcGVyIHJpZ2h0CithY3NfbHJjb3JuZXIJCQlPVEc0CXN0cglHNAktCQktCS0tLS0tCXNpbmdsZSBsb3dlciByaWdodAorYWNzX2x0ZWUJCQlPVEdSCXN0cglHUgktCQktCS0tLS0tCXRlZSBwb2ludGluZyByaWdodAorYWNzX3J0ZWUJCQlPVEdMCXN0cglHTAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBsZWZ0CithY3NfYnRlZQkJCU9UR1UJc3RyCUdVCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIHVwCithY3NfdHRlZQkJCU9UR0QJc3RyCUdECS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIGRvd24KK2Fjc19obGluZQkJCU9UR0gJc3RyCUdICS0JCS0JLS0tLS0Jc2luZ2xlIGhvcml6b250YWwgbGluZQorYWNzX3ZsaW5lCQkJT1RHVglzdHIJR1YJLQkJLQktLS0tLQlzaW5nbGUgdmVydGljYWwgbGluZQorYWNzX3BsdXMJCQlPVEdDCXN0cglHQwktCQktCS0tLS0tCXNpbmdsZSBpbnRlcnNlY3Rpb24KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1JTkZPIEVYVEVOU0lPTiBDQVBBQklMSVRJRVMKKyMKKyMgVGhpcyBzZWN0aW9uIGlzIGFsbW9zdCBhbGwgY29tbWVudHMuICBXaGF0IGl0J3MgbWFpbmx5IGZvciBpcyB0byBkZXNjcmliZQorIyB3aGF0IGNhcGFiaWxpdGllcyBuZWVkIHRvIGJlIHNxdWVlemVkIG91dCB0byBnZXQgZG93biB0byB0aGUgWFNJIEN1cnNlcworIyBzdGFuZGFyZCBzZXQuICBUaGV5IGFyZSBmbGFnZ2VkIHdpdGggSy4KKyMKKyMgSFAgZXh0ZW5zaW9ucworIworIyBUaGVzZSBleHRlbnNpb25zIGZvbGxvdyBwdHJfbm9uIChyZXBsYWNpbmcgZXZlcnl0aGluZyBhZnRlciBpdCkgaW4gSFAKKyMgdGVybWluZm8gZmlsZXMuICBFeGNlcHQgZm9yIG1lbW9yeV9sb2NrIGFuZCBtZW1vcnlfdW5sb2NrLCB0aGV5IGFyZQorIyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIFNWcjQgZXh0ZW5zaW9ucywgYnV0IHRoZXkgbWFrZSB0aGUgYmluYXJ5IGZvcm1hdAorIyBkaWZmZXJlbnQuICBHcnJyLi4uLgorIworbWVtb3J5X2xvY2sJCQltZW1sCXN0cgltbAktCQktCS0tLS1LCWxvY2sgbWVtb3J5IGFib3ZlIGN1cnNvcgorbWVtb3J5X3VubG9jawkJCW1lbXUJc3RyCW11CS0JCS0JLS0tLUsJdW5sb2NrIG1lbW9yeQorI3BsYWJfbm9ybQkJCXBsbglzdHIJcG4JLQkJLQktLS0tLQlwcm9ncmFtIGxhYmVsICMxIHRvIHNob3cgc3RyaW5nICMyCisjbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKKyNsYWJlbF9vZmYJCQlybWxuCXN0cglMRgktCQktCS0tLS0tCXR1cm4gb2ZmIHNvZnQgbGFiZWxzCisja2V5X2YxMQkJCWtmMTEJc3RyCUYxCS0JCS0JLS0tLS0JRjExIGZ1bmN0aW9uIGtleQorI2tleV9mMTIJCQlrZjEyCXN0cglGMgktCQktCS0tLS0tCUYxMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjEzCQkJa2YxMwlzdHIJRjMJLQkJLQktLS0tLQlGMTMgZnVuY3Rpb24ga2V5Cisja2V5X2YxNAkJCWtmMTQJc3RyCUY0CS0JCS0JLS0tLS0JRjE0IGZ1bmN0aW9uIGtleQorI2tleV9mMTUJCQlrZjE1CXN0cglGNQktCQktCS0tLS0tCUYxNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjE2CQkJa2YxNglzdHIJRjYJLQkJLQktLS0tLQlGMTYgZnVuY3Rpb24ga2V5Cisja2V5X2YxNwkJCWtmMTcJc3RyCUY3CS0JCS0JLS0tLS0JRjE3IGZ1bmN0aW9uIGtleQorI2tleV9mMTgJCQlrZjE4CXN0cglGOAktCQktCS0tLS0tCUYxOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE5CQkJa2YxOQlzdHIJRjkJLQkJLQktLS0tLQlGMTkgZnVuY3Rpb24ga2V5Cisja2V5X2YyMAkJCWtmMjAJc3RyCUZBCS0JCS0JLS0tLS0JRjIwIGZ1bmN0aW9uIGtleQorI2tleV9mMjEJCQlrZjIxCXN0cglGQgktCQktCS0tLS0tCUYyMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjIyCQkJa2YyMglzdHIJRkMJLQkJLQktLS0tLQlGMjIgZnVuY3Rpb24ga2V5Cisja2V5X2YyMwkJCWtmMjMJc3RyCUZECS0JCS0JLS0tLS0JRjIzIGZ1bmN0aW9uIGtleQorI2tleV9mMjQJCQlrZjI0CXN0cglGRQktCQktCS0tLS0tCUYyNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjI1CQkJa2YyNQlzdHIJRkYJLQkJLQktLS0tLQlGMjUgZnVuY3Rpb24ga2V5Cisja2V5X2YyNgkJCWtmMjYJc3RyCUZHCS0JCS0JLS0tLS0JRjI2IGZ1bmN0aW9uIGtleQorI2tleV9mMjcJCQlrZjI3CXN0cglGSAktCQktCS0tLS0tCUYyNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI4CQkJa2YyOAlzdHIJRkkJLQkJLQktLS0tLQlGMjggZnVuY3Rpb24ga2V5Cisja2V5X2YyOQkJCWtmMjkJc3RyCUZKCS0JCS0JLS0tLS0JRjI5IGZ1bmN0aW9uIGtleQorI2tleV9mMzAJCQlrZjMwCXN0cglGSwktCQktCS0tLS0tCUYzMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjMxCQkJa2YzMQlzdHIJRkwJLQkJLQktLS0tLQlGMzEgZnVuY3Rpb24ga2V5Cisja2V5X2YzMgkJCWtmMzIJc3RyCUZNCS0JCS0JLS0tLS0JRjMyIGZ1bmN0aW9uIGtleQorI2tleV9mMzMJCQlrZjMzCXN0cglGTgktCQktCS0tLS0tCUYzMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjM0CQkJa2YzNAlzdHIJRk8JLQkJLQktLS0tLQlGMzQgZnVuY3Rpb24ga2V5Cisja2V5X2YzNQkJCWtmMzUJc3RyCUZQCS0JCS0JLS0tLS0JRjM1IGZ1bmN0aW9uIGtleQorI2tleV9mMzYJCQlrZjM2CXN0cglGUQktCQktCS0tLS0tCUYzNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjM3CQkJa2YzNwlzdHIJRlIJLQkJLQktLS0tLQlGMzcgZnVuY3Rpb24ga2V5Cisja2V5X2YzOAkJCWtmMzgJc3RyCUZTCS0JCS0JLS0tLS0JRjM4IGZ1bmN0aW9uIGtleQorI2tleV9mMzkJCQlrZjM5CXN0cglGVAktCQktCS0tLS0tCUYzOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQwCQkJa2Y0MAlzdHIJRlUJLQkJLQktLS0tLQlGNDAgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MQkJCWtmNDEJc3RyCUZWCS0JCS0JLS0tLS0JRjQxIGZ1bmN0aW9uIGtleQorI2tleV9mNDIJCQlrZjQyCXN0cglGVwktCQktCS0tLS0tCUY0MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjQzCQkJa2Y0MwlzdHIJRlgJLQkJLQktLS0tLQlGNDMgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NAkJCWtmNDQJc3RyCUZZCS0JCS0JLS0tLS0JRjQ0IGZ1bmN0aW9uIGtleQorI2tleV9mNDUJCQlrZjQ1CXN0cglGWgktCQktCS0tLS0tCUY0NSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ2CQkJa2Y0NglzdHIJRmEJLQkJLQktLS0tLQlGNDYgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NwkJCWtmNDcJc3RyCUZiCS0JCS0JLS0tLS0JRjQ3IGZ1bmN0aW9uIGtleQorI2tleV9mNDgJCQlrZjQ4CXN0cglGYwktCQktCS0tLS0tCUY0OCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ5CQkJa2Y0OQlzdHIJRmQJLQkJLQktLS0tLQlGNDkgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MAkJCWtmNTAJc3RyCUZlCS0JCS0JLS0tLS0JRjUwIGZ1bmN0aW9uIGtleQorI2tleV9mNTEJCQlrZjUxCXN0cglGZgktCQktCS0tLS0tCUY1MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjUyCQkJa2Y1MglzdHIJRmcJLQkJLQktLS0tLQlGNTIgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MwkJCWtmNTMJc3RyCUZoCS0JCS0JLS0tLS0JRjUzIGZ1bmN0aW9uIGtleQorI2tleV9mNTQJCQlrZjU0CXN0cglGaQktCQktCS0tLS0tCUY1NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjU1CQkJa2Y1NQlzdHIJRmoJLQkJLQktLS0tLQlGNTUgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NgkJCWtmNTYJc3RyCUZrCS0JCS0JLS0tLS0JRjU2IGZ1bmN0aW9uIGtleQorI2tleV9mNTcJCQlrZjU3CXN0cglGbAktCQktCS0tLS0tCUY1NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU4CQkJa2Y1OAlzdHIJRm0JLQkJLQktLS0tLQlGNTggZnVuY3Rpb24ga2V5Cisja2V5X2Y1OQkJCWtmNTkJc3RyCUZuCS0JCS0JLS0tLS0JRjU5IGZ1bmN0aW9uIGtleQorI2tleV9mNjAJCQlrZjYwCXN0cglGbwktCQktCS0tLS0tCUY2MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjYxCQkJa2Y2MQlzdHIJRnAJLQkJLQktLS0tLQlGNjEgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MgkJCWtmNjIJc3RyCUZxCS0JCS0JLS0tLS0JRjYyIGZ1bmN0aW9uIGtleQorI2tleV9mNjMJCQlrZjYzCXN0cglGcgktCQktCS0tLS0tCUY2MyBmdW5jdGlvbiBrZXkKKyMKKyMgSUJNIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIElCTQorIyB0ZXJtaW5mbyBmaWxlcy4KKyMKKyMgVGhlIHBsYWNlcyBpbiB0aGUgYm94WzEyXSBjYXBhYmlsaXRpZXMgY29ycmVzcG9uZCB0byBhY3NjIGNoYXJhY3RlcnMsIGhlcmUgaXMKKyMgdGhlIG1hcHBpbmc6CisjCisjCWJveDFbMF0gID0gQUNTX1VMQ09STkVSCisjCWJveDFbMV0gID0gQUNTX0hMSU5FCQorIwlib3gxWzJdICA9IEFDU19VUkNPUk5FUgorIwlib3gxWzNdICA9IEFDU19WTElORQorIwlib3gxWzRdICA9IEFDU19MUkNPUk5FUgorIwlib3gxWzVdICA9IEFDU19MTENPUk5FUgorIwlib3gxWzZdICA9IEFDU19UVEVFCisjCWJveDFbN10gID0gQUNTX1JURUUKKyMJYm94MVs4XSAgPSBBQ1NfQlRFRQorIwlib3gxWzldICA9IEFDU19MVEVFCisjCWJveDFbMTBdID0gQUNTX1BMVVMKKyMKKyMgVGhlIGJveDIgY2hhcmFjdGVycyBhcmUgdGhlIGRvdWJsZS1saW5lIHZlcnNpb25zIG9mIHRoZXNlIGZvcm1zIGdyYXBoaWNzLgorIworYm94X2NoYXJzXzEJCQlib3gxCXN0cglieAktCQktCS0tLS1LCWJveCBjaGFyYWN0ZXJzIHByaW1hcnkgc2V0CisjYm94X2NoYXJzXzIJCQlib3gyCXN0cglieQktCQktCS0tLS1LCWJveCBjaGFyYWN0ZXJzIHNlY29uZGFyeSBzZXQKKyNib3hfYXR0cl8xCQkJYmF0dDEJc3RyCUJ4CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MQorI2JveF9hdHRyXzIJCQliYXR0MglzdHIJQnkJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gyCisjY29sb3JfYmdfMAkJCWNvbGIwCXN0cglkMAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMAorI2NvbG9yX2JnXzEJCQljb2xiMQlzdHIJZDEJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDEKKyNjb2xvcl9iZ18yCQkJY29sYjIJc3RyCWQyCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAyCisjY29sb3JfYmdfMwkJCWNvbGIzCXN0cglkMwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMworI2NvbG9yX2JnXzQJCQljb2xiNAlzdHIJZDQJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDQKKyNjb2xvcl9iZ181CQkJY29sYjUJc3RyCWQ1CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA1CisjY29sb3JfYmdfNgkJCWNvbGI2CXN0cglkNgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNgorI2NvbG9yX2JnXzcJCQljb2xiNwlzdHIJZDcJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDcKKyNjb2xvcl9mZ18wCQkJY29sZjAJc3RyCWMwCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAwCisjY29sb3JfZmdfMQkJCWNvbGYxCXN0cgljMQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMQorI2NvbG9yX2ZnXzIJCQljb2xmMglzdHIJYzIJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDIKKyNjb2xvcl9mZ18zCQkJY29sZjMJc3RyCWMzCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAzCisjY29sb3JfZmdfNAkJCWNvbGY0CXN0cgljNAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNAorI2NvbG9yX2ZnXzUJCQljb2xmNQlzdHIJYzUJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDUKKyNjb2xvcl9mZ182CQkJY29sZjYJc3RyCWM2CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA2CisjY29sb3JfZmdfNwkJCWNvbGY3CXN0cgljNwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNworI2ZvbnRfMAkJCQlmb250MAlzdHIJZjAJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAwCisjZm9udF8xCQkJCWZvbnQxCXN0cglmMQktCQktCS0tLS0tCXNlbGVjdCBmb250IDEKKyNmb250XzIJCQkJZm9udDIJc3RyCWYyCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMgorI2ZvbnRfMwkJCQlmb250MwlzdHIJZjMJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAzCisjZm9udF80CQkJCWZvbnQ0CXN0cglmNAktCQktCS0tLS1LCXNlbGVjdCBmb250IDQKKyNmb250XzUJCQkJZm9udDUJc3RyCWY1CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNQorI2ZvbnRfNgkJCQlmb250NglzdHIJZjYJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA2CisjZm9udF83CQkJCWZvbnQ3CXN0cglmNwktCQktCS0tLS1LCXNlbGVjdCBmb250IDcKKyNrZXlfYmFja190YWIJCQlrYnRhYglzdHIJazAJLQkJLQktLS0tLQliYWNrdGFiIGtleQorI2tleV9kbwkJCQlrZG8Jc3RyCWtpCS0JCS0JLS0tLUsJZG8gcmVxdWVzdCBrZXkKKyNrZXlfY29tbWFuZAkJCWtjbWQJc3RyCWtkCS0JCS0JLS0tLUsJY29tbWFuZC1yZXF1ZXN0IGtleQorI2tleV9jb21tYW5kX3BhbmUJCWtjcG4Jc3RyCWtXCS0JCS0JLS0tLUsJY29tbWFuZC1wYW5lIGtleQorI2tleV9lbmQJCQlrZW5kCXN0cglrdwktCQktCS0tLS0tCWVuZCBrZXkKKyNrZXlfaGVscAkJCWtobHAJc3RyCWtxCS0JCS0JLS0tLS0JaGVscCBrZXkKKyNrZXlfbmV3bGluZQkJCWtubAlzdHIJbmwJLQkJLQktLS0tSwluZXdsaW5lIGtleQorI2tleV9uZXh0X3BhbmUJCQlrbnBuCXN0cglrdgktCQktCS0tLS1LCW5leHQtcGFuZSBrZXkKKyNrZXlfcHJldl9jbWQJCQlrcHBuCXN0cglrcAktCQktCS0tLS1LCXByZXZpb3VzLWNvbW1hbmQga2V5Cisja2V5X3ByZXZfcGFuZQkJCWtwcG4Jc3RyCWtWCS0JCS0JLS0tLUsJcHJldmlvdXMtcGFuZSBrZXkKKyNrZXlfcXVpdAkJCWtxdWl0CXN0cglrUQktCQktCS0tLS1LCXF1aXQga2V5Cisja2V5X3NlbGVjdAkJCWtzZWwJc3RyCWtVCS0JCS0JLS0tLS0Jc2VsZWN0IGtleQorI2tleV9zY3JvbGxfbGVmdAkJa3NjbAlzdHIJa3oJLQkJLQktLS0tSwlzY3JvbGwgbGVmdAorI2tleV9zY3JvbGxfcmlnaHQJCWtzY3IJc3RyCWtaCS0JCS0JLS0tLUsJc2Nyb2xsIHJpZ2h0Cisja2V5X3RhYgkJCWt0YWIJc3RyCWtvCS0JCS0JLS0tLUsJdGFiIGtleQorI2tleV9zbWFwX2luMQkJCWttcGYxCXN0cglLdgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAxIGlucHV0Cisja2V5X3NtYXBfb3V0MQkJCWttcHQxCXN0cglLVgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAxIG91dHB1dAorI2tleV9zbWFwX2luMgkJCWttcGYyCXN0cglLdwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAyIGlucHV0Cisja2V5X3NtYXBfb3V0MgkJCWttcHQyCXN0cglLVwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAyIG91dHB1dAorI2tleV9zbWFwX2luMwkJCWttcGYzCXN0cglLeAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAzIGlucHV0Cisja2V5X3NtYXBfb3V0MwkJCWttcHQzCXN0cglLWAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAzIG91dHB1dAorI2tleV9zbWFwX2luNAkJCWttcGY0CXN0cglLeQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA0IGlucHV0Cisja2V5X3NtYXBfb3V0NAkJCWttcHQ0CXN0cglLWQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA0IG91dHB1dAorI2tleV9zbWFwX2luNQkJCWttcGY1CXN0cglLegktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA1IGlucHV0Cisja2V5X3NtYXBfb3V0NQkJCWttcHQ1CXN0cglLWgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA1IG91dHB1dAorI2FwcGxfZGVmaW5lZF9zdHIJCWFwc3RyCXN0cgl6YQktCQktCS0tLS1LCWFwcGxpY2F0aW9uLWRlZmluZWQgc3RyaW5nCisjIFRoZSBrZXlfc21hcF9pbls2Nzg5XSBhbmQga2V5X3NtYXBfb3V0WzY3ODldIGNhcGFiaWxpdGllcyBhcmVuJ3QgZGVzY3JpYmVkIGluCisjIHRoZSBJQk0gbWFudWFsIHBhZ2VzLCBzbyB0aGUgY2FwIG5hbWUgc3RyaW5ncyBhcmUgZ3Vlc3Nlcy4gIFRoZSB0ZXJtaW5mbworIyBuYW1lcyBhcmUgYWxtb3N0IGNlcnRhaW5seSByaWdodCwgdGhlIHRlcm1jYXAgb25lcyBhbG1vc3QgY2VydGFpbmx5IHdyb25nLgorI2tleV9zbWFwX2luNgkJCWttcGY2CXN0cglrIQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA2IGlucHV0Cisja2V5X3NtYXBfb3V0NgkJCWttcHQ2CXN0cglLQAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA2IG91dHB1dAorI2tleV9zbWFwX2luNwkJCWttcGY3CXN0cglrIwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA3IGlucHV0Cisja2V5X3NtYXBfb3V0NwkJCWttcHQ3CXN0cglLJAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA3IG91dHB1dAorI2tleV9zbWFwX2luOAkJCWttcGY4CXN0cglrJQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA4IGlucHV0Cisja2V5X3NtYXBfb3V0OAkJCWttcHQ4CXN0cglLXgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA4IG91dHB1dAorI2tleV9zbWFwX2luOQkJCWttcGY5CXN0cglrJgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA5IGlucHV0Cisja2V5X3NtYXBfb3V0OQkJCWttcHQ5CXN0cglLKgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA5IG91dHB1dAorIyBVbmRvY3VtZW50ZWQgY2FwYWJpbGl0aWVzIGVuZCBoZXJlCisja2V5X3NmMQkJCWtzZjEJc3RyCVMxCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMQorI2tleV9zZjIJCQlrc2YyCXN0cglTMgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDIKKyNrZXlfc2YzCQkJa3NmMwlzdHIJUzMJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAzCisja2V5X3NmNAkJCWtzZjQJc3RyCVM0CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNAorI2tleV9zZjUJCQlrc2Y1CXN0cglTNQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDUKKyNrZXlfc2Y2CQkJa3NmNglzdHIJUzYJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA2Cisja2V5X3NmNwkJCWtzZjcJc3RyCVM3CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNworI2tleV9zZjgJCQlrc2Y4CXN0cglTOAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDgKKyNrZXlfc2Y5CQkJa3NmOQlzdHIJUzkJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA5Cisja2V5X3NmMTAJCQlrc2YxMAlzdHIJU0EJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxMAorIyBBSVggdmVyc2lvbiAzIGRvY3VtZW50cyBkaWZmZXJlbnQgY29kZXMgZm9yIEYxMSwgRjEyIGFuZCBkb2VzIG5vdCBtZW50aW9uCisjIEYxMy1GNjQuICBBSVggdmVyc2lvbiA0IHVzZXMgdGhlIHNhbWUgbmFtaW5nIGZvciBGMC1GNjMgYXMgYWJvdmUuCisja2V5X2YxMQkJCWtmMTEJc3RyCWs8CS0JCS0JLS0tLS0JZnVuY3Rpb24ga2V5IDExCisja2V5X2YxMgkJCWtmMTIJc3RyCWs+CS0JCS0JLS0tLS0JZnVuY3Rpb24ga2V5IDEyCisjIFVuZG9jdW1lbnRlZCBjYXBhYmlsaXRpZXMgZW5kIGhlcmUuCisja2V5X2FjdGlvbgkJCWthY3QJc3RyCWtKCS0JCS0JLS0tLUsJc2VudCBieSBhY3Rpb24ga2V5CisjIFRoZSBJQk0gZG9jcyBzYXkgdGhlc2UgY2FwYWJpbGl0aWVzIGFyZSBmb3IgdGFibGUtZHJhd2luZywgYW5kIGFyZQorIyB2YWxpZCBvbmx5IGZvciBhaXh0ZXJtIGRlc2NyaXB0aW9ucy4KKyNlbnRlcl90b3BsaW5lX21vZGUJCXRvcGwJc3RyCXRwCS0JCS0JLS0tLUsJc3RhcnQgdG9wLWxpbmUgbW9kZQorI2VudGVyX2JvdHRvbV9tb2RlCQlidG1sCXN0cglibQktCQktCS0tLS1LCXN0YXJ0IGJvdHRvbS1saW5lIG1vZGUKKyNlbnRlcl9ydmVydF9tb2RlCQlydmVydAlzdHIJcnYJLQkJLQktLS0tSwlzdGFydCByaWdodC12ZXJ0aWNhbCBtb2RlCisjZW50ZXJfbHZlcnRfbW9kZQkJbHZlcnQJc3RyCWx2CS0JCS0JLS0tLUsJc3RhcnQgbGVmdC12ZXJ0aWNhbCBtb2RlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBTElBUyBERUNMQVJBVElPTlMKKyMKKyMgSGVyZSB3ZSBzZXQgdXAgYWxpYXNlcyBmb3IgdHJhbnNsYXRpbmcgZXh0ZW5zaW9ucyBpbnRvIHN0YW5kYXJkIHRlcm1pbmZvLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVybWNhcCBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgQlNEIGFsaWFzZXM6CisjCisjIFRoaXMgaXMgYSBjb21tb24gZXJyb3IgaW4gbWFueSB0ZXJtY2FwIGZpbGVzLiAgV2UnbGwgZ2V0IG5vdGlmaWVkIGR1cmluZworIyB0cmFuc2xhdGlvbiB3aGVuIHRoaXMgKG9yIGFueSBvdGhlciBhbGlhcykgZmlyZXMuCisjCitjYXBhbGlhcwlzYglzcglCU0QJc2Nyb2xsIHRleHQgZG93bgorIworIyBBVCZUIGV4dGVuc2lvbnM6CisjCisjIFRoZSBvbGQgQVQmVCA1NDEwLCA1NDIwLCA1NDI1LCBwYzYzMDBwbHVzLCA2MTAsIGFuZCBzNCBlbnRyaWVzIHVzZWQgYSBzZXQgb2YKKyMgbm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzLiAgSXRzIHNpZ25hdHVyZSBpcyB0aGUgS00gY2FwYWJpbGl0eSwgdXNlZCB0byBuYW1lCisjIHNvbWUgc29ydCBvZiBrZXltYXAgZmlsZS4gIEVFLCBCTywgQ0ksIENWLCBYUywgRFMsIEZMIGFuZCBGRSBhcmUgaW4gdGhpcworIyBzZXQuICBDb21tZW50cyBpbiB0aGUgb3JpZ2luYWwsIGFuZCBhIGxpdHRsZSBjcm9zcy1jaGVja2luZyB3aXRoIG90aGVyIEFUJlQKKyMgZG9jdW1lbnRhdGlvbiwgc2VlbSB0byBlc3RhYmxpc2ggdGhlIGZvbGxvd2luZyBtYXBwaW5nczoKKyMKK2NhcGFsaWFzCUJPCW1yCUFUJlQJZW50ZXJfcmV2ZXJzZV9tb2RlCitjYXBhbGlhcwlDSQl2aQlBVCZUCWN1cnNvcl9pbnZpc2libGUKK2NhcGFsaWFzCUNWCXZlCUFUJlQJY3Vyc29yX25vcm1hbAorY2FwYWxpYXMJRFMJbWgJQVQmVAllbnRlcl9kaW1fbW9kZQorI2NhcGFsaWFzCUVFCW1lCUFUJlQJZXhpdF9hdHRyaWJ1dGVfbW9kZQkKK2NhcGFsaWFzCUZFCUxGCUFUJlQJbGFiZWxfb24KK2NhcGFsaWFzCUZMCUxPCUFUJlQJbGFiZWxfb2ZmCitjYXBhbGlhcwlYUwltawlBVCZUCWVudGVyX3NlY3VyZV9tb2RlCisjCisjIFdlIGNvbW1lbnQgb3V0IEVFIGJlY2F1c2UgdGhlIGNvbmZsaWN0aW5nIFhFTklYIEVFIGlzIG1vcmUgY29tbW9uIGluIAorIyBvbGQgZW50cmllcy4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgVGhlc2UgYXJlIHRoZSBvbmVzIHdlIGtub3cgaG93IHRvIHRyYW5zbGF0ZSBkaXJlY3RseToKKyMKK2NhcGFsaWFzCUVFCW1oCVhFTklYCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlHRQlhZQlYRU5JWAlleGl0X2FsdF9jaGFyc2V0X21vZGUKK2NhcGFsaWFzCUdTCWFzCVhFTklYCWVudGVyX2FsdF9jaGFyc2V0X21vZGUKK2NhcGFsaWFzCUNGCXZpCVhFTklYCWN1cnNvcl9pbnZpcworY2FwYWxpYXMJQ08JdmUJWEVOSVgJY3Vyc29yX25vcm1hbAorY2FwYWxpYXMJRU4JQDcJWEVOSVgJa2V5X2VuZAorY2FwYWxpYXMJSE0Ja2gJWEVOSVgJa2V5X2hvbWUKK2NhcGFsaWFzCUxECWtMCVhFTklYCWtleV9kbAorY2FwYWxpYXMJUEQJa04JWEVOSVgJa2V5X25wYWdlCitjYXBhbGlhcwlQTglwbwlYRU5JWAlwcnRyX29mZgorY2FwYWxpYXMJUFMJcGYJWEVOSVgJcHJ0cl9vbgorY2FwYWxpYXMJUFUJa1AJWEVOSVgJa2V5X3BwYWdlCitjYXBhbGlhcwlSVAlAOAlYRU5JWAlrZW50CitjYXBhbGlhcwlVUAlrdQlYRU5JWAlrY3V1MQorY2FwYWxpYXMJRzYJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVUxDT1JORVIKK2NhcGFsaWFzCUc3CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xMQ09STkVSCitjYXBhbGlhcwlHNQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19VUkNPUk5FUgorY2FwYWxpYXMJRzgJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTFJDT1JORVIKK2NhcGFsaWFzCUdyCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xURUUKK2NhcGFsaWFzCUdyCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1JURUUKK2NhcGFsaWFzCUd1CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0JURUUKK2NhcGFsaWFzCUdkCUlHTk9SRQlYRU5JWAlkb3VibGUgQUNTX1RURUUKK2NhcGFsaWFzCUdoCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0hMSU5FCitjYXBhbGlhcwlHdglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19WTElORQorY2FwYWxpYXMJR2MJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfUExVUworY2FwYWxpYXMJR0cJSUdOT1JFCVhFTklYCWFjcy1nbGl0Y2gKKyMKKyMgSUJNIGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlrcQklMQlJQk0Ja2V5X2hlbHAKKyMKKyMgSXJpcyBleHRlbnNpb25zOgorIworY2FwYWxpYXMJSFMJbWgJSVJJUwllbnRlcl9kaW1fbW9kZQorIworIyBUZWt0cm9uaXggZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUtBCWs7CVRlawlrZXlfZjEwCitjYXBhbGlhcwlLQglGMQlUZWsJa2V5X2YxMQorY2FwYWxpYXMJS0MJRjIJVGVrCWtleV9mMTIKK2NhcGFsaWFzCUtECUYzCVRlawlrZXlfZjEzCitjYXBhbGlhcwlLRQlGNAlUZWsJa2V5X2YxNAorY2FwYWxpYXMJS0YJRjUJVGVrCWtleV9mMTUKK2NhcGFsaWFzCUJDCVNiCVRlawlzZXRfYmFja2dyb3VuZAorY2FwYWxpYXMJRkMJU2YJVGVrCXNldF9mb3JlZ3JvdW5kCisjCisjIFRoZXJlIGFyZSBhbHNvIHRoZSBmb2xsb3dpbmc6CisjCisjCVhFTklYCVhFTklYIHZhcmlhYmxlIG5hbWUJbmFtZSBjbGFzaCB3aXRoIHRlcm1pbmZvPworIwktLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJQ0wJa2V5X2NoYXJfbGVmdAorIwlDUglrZXlfY2hhcl9yaWdodAorIwlDVwlrZXlfY2hhbmdlX3dpbmRvdworIwlIUAk/PworIwlMRglrZXlfbGluZWZlZWQgCQlsYWJlbF9vZmYKKyMJTlUJa2V5X25leHRfdW5sb2NrZWRfY2VsbAorIwlQTAk/PworIwlQUgk/PworIwlSQwlrZXlfcmVjYWxjCQlyZW1vdmVfY2xvY2sKKyMJUkYJa2V5X3RvZ2dsZV9yZWYJCXJlcV9mb3JfaW5wdXQKKyMJV0wJa2V5X3dvcmRfbGVmdAorIwlXUglrZXlfd29yZF9yaWdodAorIworIyBJZiB5b3Uga25vdyB3aGF0IGFueSBvZiB0aGUgcXVlc3Rpb24tbWFya2VkIG9uZXMgbWVhbiwgcGxlYXNlIHRlbGwgdXMuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1pbmZvIGFsaWFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIElCTSBleHRlbnNpb25zOgorIworaW5mb2FsaWFzCWZvbnQwCXMwZHMJSUJNCXNldDBfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQxCXMxZHMJSUJNCXNldDFfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQyCXMyZHMJSUJNCXNldDJfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQzCXMzZHMJSUJNCXNldDNfZGVzX3NlcQoraW5mb2FsaWFzCWtidGFiCWtjYnQJSUJNCWtleV9iYWNrdGFiCitpbmZvYWxpYXMJa3NlbAlrc2x0CUlCTQlrZXlfc2VsZWN0CisjCisjIFNvbWUgb3RoZXJzIGFyZSBpZGVudGljYWwgdG8gU1ZyNC9YUEc0IGNhcGFiaWxpdGllcywgaW4gcGFydGljdWxhcjoKKyMga2NtZCwga2VuZCwga2hscCwgYW5kIGtmMTEuLi5rZjYzLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworIyBMb2NhbCBWYXJpYWJsZXM6CisjIGNhc2UtZm9sZC1zZWFyY2g6bmlsCisjIHRydW5jYXRlLWxpbmVzOnQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9DYXBzLmFpeDQgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL0NhcHMuYWl4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkxM2RjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9DYXBzLmFpeDQKQEAgLTAsMCArMSwxMjU1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIERpY2tleQorIworIyAkSWQ6IENhcHMuYWl4NCx2IDEuNyAyMDA2LzA1LzI3IDE1OjMzOjA0IHRvbSBFeHAgJAorIworIyBUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgbmN1cnNlcycgdGVybWNhcC90ZXJtaW5mbyBjYXBhYmlsaXR5IHRhYmxlLCB3aGljaAorIyBpcyBkZXNpZ25lZCB0byBhbGlnbiB3aXRoIEFJWCA0LngncyB0ZXJtaW5mby4KKyMKKyMgVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGluaXRpYWxpemVycyBmb3IgdGFibGVzIHRoYXQgZHJpdmUgdGljLAorIyBpbmZvY21wLCBhbmQgdGhlIGxpYnJhcnkgY29tcGlsYXRpb24gY29kZSB1c2VkIHRvIHN1cHBvcnQgdGhlIHRlcm1jYXAgCisjIGNvbXBhdGliaWxpdHkgaGFjay4gIEl0IGlzIGFsc28gdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFidWxhciBwb3J0aW9uIG9mIHRoZQorIyB0ZXJtaW5mbyg1KSBtYW4gcGFnZTsgbGluZXMgYmVnaW5uaW5nIHdpdGggYCMlJyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gYmVjb21lCisjIHRoZSB0ZXJtaW5mbyB0YWJsZS4KKyMKKyMgVGhpcyBmaWxlIGhhcyB0aHJlZSBtYWpvciBzZWN0aW9uczsgYSBzdGFuZGFyZC1jYXBhYmlsaXRpZXMgdGFibGUsIHR3bworIyBleHRlbnNpb24tY2FwYWJpbGl0eSB0YWJsZXMsIGFuZCBhIHNlY3Rpb24gb2YgYWxpYXNlcyBkZWNsYXJhdGlvbnMuCisjIFRoZSBmaXJzdCB0d28gaGF2ZSB0aGUgc2FtZSBmb3JtYXQsIGFzIGZvbGxvd3M6CisjCisjIEZJTEUgRk9STUFUCisjCisjIENvbHVtbiAxOiB0ZXJtaW5mbyB2YXJpYWJsZSBuYW1lCisjIENvbHVtbiAyOiB0ZXJtaW5mbyBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDM6IGNhcGFiaWxpdHkgdHlwZSAoYm9vbGVhbiwgbnVtZXJpYywgb3Igc3RyaW5nKQorIyBDb2x1bW4gNDogdGVybWNhcCBjYXBhYmlsaXR5IG5hbWUKKyMgQ29sdW1uIDU6IEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA2OiB2YWx1ZSBmb3IgS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDc6IExlYWQgd2l0aCBgWScgaWYgY2FwYWJpbGl0eSBzaG91bGQgYmUgZW1pdHRlZCBpbiB0ZXJtY2FwCisjICAgICAgICAgICB0cmFuc2xhdGlvbnMsIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDg6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24KKyMKKyMgVGhlIGNvZGVzIGZvbGxvd2luZyBbWS1dIGluIGNvbHVtbiA3IGRlc2NyaWJlIHRoZSB2ZXJzaW9ucyBvZiB0ZXJtY2FwIHdoaWNoCisjIHVzZSB0aGUgZ2l2ZW4gY2FwYWJpbGl0eS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbm90IHVzZWQgYnkgdGhlIGN1cnNlcyBsaWJyYXJ5CisjIHByb3BlcjsgcmF0aGVyLCBpdCdzIHRoZXJlIHRvIGhlbHAgdGhlIHRlcm1pbmZvIG1haW50YWluZXIgYXZvaWQgZW1pdHRpbmcKKyMgdGVybWNhcCBlbnRyeSB0cmFuc2xhdGlvbnMgdGhhdCBhcmUgbW9yZSB0aGFuIDEwMjMgYnl0ZXMgbG9uZyAoYW5kIHRhbmsgYQorIyBsb3Qgb2Ygb2xkIHRlcm1jYXAtdXNpbmcgcHJvZ3JhbXMpLiAgVGhlIGNvZGVzIHJlYWQgYXMgZm9sbG93czoKKyMJQiA9IG1lbnRpb25lZCBpbiB0aGUgQlNEIG1hbiBwYWdlIGZvciA0LjRCU0QgY3Vyc2VzCisjCUMgPSB1c2VkIGJ5IHRoZSA0LjRCU0QgY3Vyc2VzIGxpYnJhcnkKKyMJRyA9IG1lbnRpb25lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgR05VIHRlcm1jYXAKKyMJRSA9IHVzZWQgYnkgR05VIEVtYWNzCisjCUsgPSByZW1vdmUgdGhpcyB0ZXJtaW5mbyBjYXBhYmlsaXR5IHdoZW4gdHJhbnNsYXRpbmcgdG8gc3RhbmRhcmQgZm9ybWF0CisjIFRoZSBpbXBvcnRhbnQgY29kZXMgYXJlIEMgYW5kIEUuICBBIGNhcCB3aXRoIEMgb3IgRSBzaG91bGQgYmUgcHJlc2VydmVkIGluCisjIHRyYW5zbGF0aW9uIGlmIHBvc3NpYmxlLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBwcmVzZXJ2aW5nIGFsbCBzdWNoIGNhcHMgbWF5CisjIGxlYWQgdG8gc29tZSB0ZXJtY2FwIHRyYW5zbGF0aW9ucyBiZWluZyB0b28gbG9uZy4gIFRoZSB0ZXJtY2FwIG1haW50YWluZXIKKyMgaGFzIGEgYml0IG9mIGEganVnZ2xpbmcgYWN0IHRvIGRvLi4ucG90ZW50aWFsIHByb2JsZW0gY2FzZXMgYXJlIG1hcmtlZCB3aXRoCisjIGFuIGFzdGVyaXNrICgqKS4KKyMKKyMgVGhlIGFsaWFzZXMgc2VjdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisjCisjIENvbHVtbiAxOiBlaXRoZXIgYGNhcGFsaWFzJyBvciBgaW5mb2FsaWFzJworIyBDb2x1bW4gMjogbmFtZSB0byBiZSBhbGlhc2VkCisjIENvbHVtbiAzOiB3aGF0IG5hbWUgaXQgc2hvdWxkIHRyYW5zbGF0ZSB0by4gIFRoZSBuYW1lIElHTk9SRSBtZWFucyBpdAorIyAgICAgICAgICAgc2hvdWxkIGJlIGRpc2NhcmRlZCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgorIyBDb2x1bW4gNDogbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNldCAodXNlZCBmb3IgY29tcGlsZXIgd2FybmluZyBtZXNzYWdlcykKKyMgQ29sdW1uIDU6IGNhcGFiaWxpdHkgZGVzY3JpcHRpb24gKHVzdWFsbHkgYW4gYXNzb2NpYXRlZCB0ZXJtaW5mbyB2YXJpYWJsZSkKKyMKKyMgSEFORExJTkcgVEVSTUNBUCBBTkQgVEVSTUlORk8gRVhURU5TSU9OUworIworIyBUaGVyZSBhcmUgYmFzaWNhbGx5IGZpdmUgZGlmZmVyZW50IHdheXMgdG8gaGFuZGxlIHRlcm1jYXAgYW5kIHRlcm1pbmZvCisjIGV4dGVuc2lvbnM6CisjCisjIDEuIERvbid0IGxpc3QgdGhlIGNhcG5hbWUgaGVyZSwgb3IgbGlzdCBpdCBidXQgY29tbWVudCBpdCBvdXQgKHRoZSBsYXR0ZXIKKyMgaXMgcHJlZmVyYWJsZTsgc29tZW9uZSBtaWdodCB3YW50IHRvIGhhbmRsZSBpdCBpbiB0aGUgZnV0dXJlKS4gIElmIHlvdSBkbworIyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIHRyZWF0ZWQgYXMgdW5rbm93biBhbmQgcmFpc2UgYSB3YXJuaW5nIGZyb20KKyMgdGhlIGNvbXBpbGVyLgorIworIyAyLiBBbGlhcyBpdC4gIFRoaXMgaXMgYXBwcm9wcmlhdGUgaWYgdGhlIGNhcGFiaWxpdHkgaGFzIHRoZSBzYW1lIG1lYW5pbmcKKyMgYXMgYW4gYWxyZWFkeS1zdXBwb3J0ZWQgb25lLiAgVGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIGFsaWFzaW5nLCBlbWl0dGluZworIyBhbiBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2Ugd2hlbmV2ZXIgYW4gYWxpYXMgZmlyZXMuCisjCisjIDMuIExpc3QgaXQgaW4gdGhlIHN0YW5kYXJkIHRhYmxlLiAgWW91IGFsbW9zdCBjZXJ0YWlubHkgZG8gKm5vdCogd2FudAorIyB0byBkbyB0aGlzIC0tIHRoZSBjYXBhYmlsaXRpZXMgaW4gdGhhdCBvbmUsIGFuZCB0aGVpciBvcmRlciwgaGF2ZSBiZWVuCisjIGNhcmVmdWxseSBjaG9zZW4gdG8gYmUgU1ZyNC1iaW5hcnktY29tcGF0aWJsZSB3aGVuIHRoZXkncmUgd3JpdHRlbiBvdXQKKyMgYXMgYSB0ZXJtaW5mbyBvYmplY3QsIGFuZCBicmVha2luZyB0aGlzIHdvdWxkIGJlIGJhZC4gIEl0J3MgdXAgdGhlIG5jdXJzZXMKKyMgbGlicmFyeSB3aGF0IHRvIGRvIHdpdGggdGhlIHRlcm1pbmZvIGRhdGEgYWZ0ZXIgaXQncyByZWFkIGluLgorIworIyA0LiBMaXN0IGl0IGluIHRoZSBhbGlhc2VzIHRhYmxlIHdpdGggYW4gSUdOT1JFIHRhcmdldCBmaWVsZC4gIElmIHlvdQorIyBkbyB0aGlzLCB0aGUgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQgb24gaW5wdXQgKHRob3VnaCB0aGUgdXNlciB3aWxsCisjIGdldCBhIHdhcm5pbmcgbWVzc2FnZSBhYm91dCBpdCkuCisjCisjIDUuIExpc3QgaXQgaW4gdGhlIGV4dGVuc2lvbnMgdGFibGUuIElmIHlvdSBkbyB0aGlzLCB0aGUgY29tcGlsZXIgd2lsbAorIyBzaWxlbnRseSBhY2NlcHQgdGhlIGNhcGFiaWxpdHksIGJ1dCB0aGUgY3Vyc2VzIGxpYnJhcnkgcHJvcGVyIHdpbGwgbmV2ZXIKKyMgc2VlIGl0IChiZWNhdXNlIGl0IHdvbid0IGJlIHdyaXR0ZW4gb3V0IGFzIHBhcnQgb2YgdGhlIHRlcm1pbmZvIG9iamVjdAorIyBmb3JtYXQpLiAgSXQncyB1cCB0byB5b3Ugd2hhdCB5b3UgaGF2ZSB0aGUgY29tcGlsZXIgZG8gd2l0aCBpdC4KKyMKKyMgVGhlcmUgYXJlIHR3byBvcHBvc2l0ZSByZWFzb25zIHRvIGNob29zZSBvcHRpb24gNS4gIE9uZSBpcyB3aGVuIHlvdSB3YW50CisjIHRvIGVhdCB0aGUgY2FwYWJpbGl0eSBzaWxlbnRseSBhbmQgZGlzY2FyZCBpdCB3aGVuIGRvaW5nIHRyYW5zbGF0aW9ucworIyB0byB0ZXJtaW5mbyB3aXRoIHRpYyAtSS4gIFNvbWUgdmVyeSBvbGQgb2Jzb2xldGUgQlNEIGNhcHMgbGlrZSA6a246IGFyZQorIyBpbiB0aGlzIGNsYXNzLiAgTm90aGluZyB3aWxsIGV2ZXIgdXNlIHRoZW0gYWdhaW4uCisjCisjIE1vcmUgdXN1YWxseSwgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIHRyeSB0byBkZWR1Y2Ugc29tZXRoaW5nIGZyb20gdGhlCisjIGNhcGFiaWxpdHkgdmFsdWUgdGhhdCBpdCBjYW4gdXNlIHRvIHRyYW5zbGF0ZSBpdCBpbnRvIHlvdXIgb3V0cHV0IGZvcm1hdC4KKyMgWW91J2xsIG5lZWQgdG8gd3JpdGUgY3VzdG9tIGNvZGUsIHByb2JhYmx5IGluIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoKSBvcgorIyBwb3N0cHJvY2Vzc190ZXJtaW5mbygpLCB0byBoYW5kbGUgdGhlIHRyYW5zbGF0aW9uLgorIworIyBDT05UUk9MTElORyBFTlRSWSBMRU5HVEggCisjCisjIE5vdGVzIG9uIHNwZWNpZmljIGVsaXNpb25zIG1hZGUgdG8gZml0IHRyYW5zbGF0aW9ucyB3aXRoaW4gMTAyMyBieXRlczoKKyMKKyMgTWFjaGluZXMgd2l0aCBJQk0gUEMtbGlrZSBrZXlib2FyZHMgd2FudCB0byBiZSBhYmxlIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nCisjIGtleXM6IGtleV9ucGFnZSwga2V5X3BwYWdlLCBrZXlfaG9tZSwga2V5X2xsICh3aGljaCBpcyB1c2VkIGZvciBpbiB0ZXJtY2FwLQorIyBvbmx5IGVudmlyb25tZW50cyBmb3IgRW5kIG9yIEhvbWUtRG93biksIGtleV9kYywgYW5kIGtleV9pYy4gIFRoaXMgaXMgYWxzbworIyB0aGUgc2V0IG9mIGtleXMgdGhlIGBqb2UnIGVkaXRvciB3aWxsIGJlIHVwc2V0IGlmIGl0IGNhbid0IHNlZS4gIFNvIGRvbid0IAorIyB0cmltIHRob3NlIG91dCBvZiB0aGUgc2V0IHRvIGJlIHRyYW5zbGF0ZWQgdG8gdGVybWNhcCwgb3IgdmFyaW91cyB1c2VycyBvZgorIyB0aGUgdGVybWNhcCBmaWxlIHdpbGwgYmVjb21lIGlyYXRlLgorIworIyBJdCBtaWdodCBsb29rIHRlbXB0aW5nIHRvIGxlYXZlIHRob3NlIGxvbmcgaW5pdCBzdHJpbmdzIG91dCBvZiB0cmFuc2xhdGlvbnMuCisjIFdlIGNhbid0IGRvIGl0ICh5ZXQpOyA0LjRCU0QgdHB1dCBhbmQgdHNldCB1c2UgdGhlbS4KKyMKKyMgV2UgcmV0YWluIHRoZSBzZ3IgY2FwYWJpbGl0eSBpbiB0cmFuc2xhdGlvbiBpbiBzcGl0ZSBvZiB0aGUgZmFjdCB0aGF0IG5laXRoZXIKKyMgNC40QlNEIG5vciBHTlUgRW1hY3MgdXNlcyBpdCwgYmVjYXVzZSAoYSkgc29tZSBlbnRyeSBuYW1pbmcgZGlzdGluY3Rpb25zIGFyZQorIyBoYXJkIHRvIHVuZGVyc3RhbmQgd2l0aG91dCBpdCwgYW5kIChiKSB0aGUgZW50cmllcyBpbiB3aGljaCBpdCBpcyBsb25nIHRlbmQKKyMgdG8gYmUgb2xkZXIgdHlwZXMgdGhhdCBkb24ndCB1c2UgdXAgYSBsb3Qgb2Ygc3RyaW5nIHNwYWNlIG9uIGZ1bmN0aW9uIGtleXMuCisjIFRoZSB0aWMoMSkgdHJhbnNsYXRpb24gY29kZSB3aWxsIGNvbXBsYWluIGFuZCBlbGlkZSBpdCBpZiBpdCBtYWtlcyBhIGNyaXRpY2FsCisjIGRpZmZlcmVuY2UgKHRoZXJlIGlzIHNwZWNpYWwgY29kZSBpbiB0aWMgdG8gcmVjb2duaXplIHRoaXMgc2l0dWF0aW9uKS4KKyMKKyMgWWVzLCBCU0QgdHNldCgxKSB1c2VzIGhwYS4gIFdlIGVsaWRlIGhwYS92cGEgYW55d2F5IGJlY2F1c2UgdGhlIG1vdGlvbgorIyBvcHRpbWl6ZXIgaW4gQlNEIGN1cnNlcyBkaWRuJ3QgdXNlIHRoZW0uICBUaGlzIG9taXNzaW9uIHNlZW1zIHRvIGJlIHRoZQorIyBzaW5nbGUgbW9zdCBlZmZlY3RpdmUgb25lLCBpdCBzaG9ydGVuZWQgdGhlIHJlc29sdmVkIGxlbmd0aCBvZiBhbGwgdGhpcnRlZW4KKyMgcHJvYmxlbSBlbnRyaWVzIGluIHRoZSA5LjkuMCB2ZXJzaW9uIG9mIHRoZSB0ZXJtaW5mbyBtYXN0ZXIgYmVsb3cgY3JpdGljYWwuCisjCisjIEl0IHdvdWxkIGJlIG5pY2UgdG8ga2VlcCBmMTEgYW5kIGYxMiBmb3IgRW1hY3MgdXNlLCBidXQgYSBjb3VwbGUgb2YgdGVybWNhcAorIyB0cmFuc2xhdGlvbnMgZ28gYmFjayBvdmVyIGNyaXRpY2FsIGlmIHdlIGRvIHRoaXMuICBBcyA0LjRCU0QgY3Vyc2VzIGZhZGVzCisjIGludG8gaGlzdG9yeSBhbmQgR05VIHRlcm1jYXAncyBhcHBsaWNhdGlvbiBiYXNlIHNocmlua3MgdG93YXJkcyBiZWluZyBHTlUgCisjIEVtYWNzIG9ubHksIHdlJ2xsIHByb2JhYmx5IGVsaWRlIG91dCBzb21lIEJTRC1vbmx5IGNhcGFiaWxpdGllcyBpbiBvcmRlcgorIyB0byBidXkgc3BhY2UgZm9yIG5vbi1lc3NlbnRpYWxzIEVtYWNzIGlzIHN0aWxsIHVzaW5nLiAgQ2FwYWJpbGl0aWVzIGhpZ2gKKyMgb24gdGhhdCBoaXQgbGlzdDogcmMsIHNjLCB1Yy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFNUQU5EQVJEIENBUEFCSUxJVElFUworIworIyVUaGUgZm9sbG93aW5nIGlzIGEgY29tcGxldGUgdGFibGUgb2YgdGhlIGNhcGFiaWxpdGllcyBpbmNsdWRlZCBpbiBhCisjJXRlcm1pbmZvIGRlc2NyaXB0aW9uIGJsb2NrIGFuZCBhdmFpbGFibGUgdG8gdGVybWluZm8tdXNpbmcgY29kZS4gIEluIGVhY2gKKyMlbGluZSBvZiB0aGUgdGFibGUsCisjJQorIyVUaGUgXGZCdmFyaWFibGVcZlIgaXMgdGhlIG5hbWUgYnkgd2hpY2ggdGhlIHByb2dyYW1tZXIgKGF0IHRoZSB0ZXJtaW5mbyBsZXZlbCkKKyMlYWNjZXNzZXMgdGhlIGNhcGFiaWxpdHkuCisjJQorIyVUaGUgXGZCY2FwbmFtZVxmUiBpcyB0aGUgc2hvcnQgbmFtZSB1c2VkIGluIHRoZSB0ZXh0IG9mIHRoZSBkYXRhYmFzZSwKKyMlYW5kIGlzIHVzZWQgYnkgYSBwZXJzb24gdXBkYXRpbmcgdGhlIGRhdGFiYXNlLgorIyVXaGVuZXZlciBwb3NzaWJsZSwgY2FwbmFtZXMgYXJlIGNob3NlbiB0byBiZSB0aGUgc2FtZSBhcyBvciBzaW1pbGFyIHRvCisjJXRoZSBBTlNJIFgzLjY0LTE5Nzkgc3RhbmRhcmQgKG5vdyBzdXBlcnNlZGVkIGJ5IEVDTUEtNDgsIHdoaWNoIHVzZXMgCisjJWlkZW50aWNhbCBvciB2ZXJ5IHNpbWlsYXIgbmFtZXMpLiAgU2VtYW50aWNzIGFyZSBhbHNvIGludGVuZGVkIHRvIG1hdGNoCisjJXRob3NlIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorIyUKKyMlVGhlIHRlcm1jYXAgY29kZSBpcyB0aGUgb2xkCisjJS5CIHRlcm1jYXAKKyMlY2FwYWJpbGl0eSBuYW1lIChzb21lIGNhcGFiaWxpdGllcyBhcmUgbmV3LCBhbmQgaGF2ZSBuYW1lcyB3aGljaCB0ZXJtY2FwCisjJWRpZCBub3Qgb3JpZ2luYXRlKS4KKyMlLlAKKyMlQ2FwYWJpbGl0eSBuYW1lcyBoYXZlIG5vIGhhcmQgbGVuZ3RoIGxpbWl0LCBidXQgYW4gaW5mb3JtYWwgbGltaXQgb2YgNQorIyVjaGFyYWN0ZXJzIGhhcyBiZWVuIGFkb3B0ZWQgdG8ga2VlcCB0aGVtIHNob3J0IGFuZCB0byBhbGxvdyB0aGUgdGFicyBpbgorIyV0aGUgc291cmNlIGZpbGUKKyMlLkIgQ2FwcworIyV0byBsaW5lIHVwIG5pY2VseS4KKyMlCisjJUZpbmFsbHksIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBhdHRlbXB0cyB0byBjb252ZXkgdGhlIHNlbWFudGljcyBvZiB0aGUKKyMlY2FwYWJpbGl0eS4gIFlvdSBtYXkgZmluZCBzb21lIGNvZGVzIGluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZDoKKyMlLlRQCisjJShQKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSBiZSBzcGVjaWZpZWQKKyMlLlRQCisjJSNbMS05XQorIyVpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmluZyBpcyBwYXNzZWQgdGhyb3VnaCB0cGFybSB3aXRoCisjJXBhcm1zIGFzIGdpdmVuICgjXGZJaVxmUCkuCisjJS5UUAorIyUoUCopCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IHZhcnkgaW4gcHJvcG9ydGlvbiB0byB0aGUgbnVtYmVyIG9mCisjJWxpbmVzIGFmZmVjdGVkCisjJS5UUAorIyUoI1xkXGZJaVxmUFx1KQorIyVpbmRpY2F0ZXMgdGhlIFxmSWlcZlBcdXRoXGQgcGFyYW1ldGVyLgorIyUKKyMlLlBQCisjJSBUaGVzZSBhcmUgdGhlIGJvb2xlYW4gY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQkJvb2xlYW5zCW5hbWUJQ29kZVxmUgorYXV0b19sZWZ0X21hcmdpbgkJYncJYm9vbAlidwktCS0JWUItRy0JY3ViMSB3cmFwcyBmcm9tIGNvbHVtbiAwIHRvIGxhc3QgY29sdW1uCithdXRvX3JpZ2h0X21hcmdpbgkJYW0JYm9vbAlhbQktCS0JWUJDR0UJdGVybWluYWwgaGFzIGF1dG9tYXRpYyBtYXJnaW5zCitub19lc2NfY3RsYwkJCXhzYglib29sCXhiCS0JLQlZQkNHLQliZWVoaXZlIChmMT1lc2NhcGUsIGYyPWN0cmwgQykKK2Nlb2xfc3RhbmRvdXRfZ2xpdGNoCQl4aHAJYm9vbAl4cwktCS0JWUJDR0UJc3RhbmRvdXQgbm90IGVyYXNlZCBieSBvdmVyd3JpdGluZyAoaHApCitlYXRfbmV3bGluZV9nbGl0Y2gJCXhlbmwJYm9vbAl4bgktCS0JWUJDR0UJbmV3bGluZSBpZ25vcmVkIGFmdGVyIDgwIGNvbHMgKGNvbmNlcHQpCitlcmFzZV9vdmVyc3RyaWtlCQllbwlib29sCWVvCS0JLQlZQkNHLQljYW4gZXJhc2Ugb3ZlcnN0cmlrZXMgd2l0aCBhIGJsYW5rCitnZW5lcmljX3R5cGUJCQlnbglib29sCWduCS0JLQlZQi1HLQlnZW5lcmljIGxpbmUgdHlwZQoraGFyZF9jb3B5CQkJaGMJYm9vbAloYwktCS0JWUJDRy0JaGFyZGNvcHkgdGVybWluYWwKK2hhc19tZXRhX2tleQkJCWttCWJvb2wJa20JLQktCVlCLUdFCUhhcyBhIG1ldGEga2V5IChpLmUuLCBzZXRzIDh0aC1iaXQpCitoYXNfc3RhdHVzX2xpbmUJCQlocwlib29sCWhzCS0JLQlZQi1HLQloYXMgZXh0cmEgc3RhdHVzIGxpbmUKK2luc2VydF9udWxsX2dsaXRjaAkJaW4JYm9vbAlpbgktCS0JWUJDR0UJaW5zZXJ0IG1vZGUgZGlzdGluZ3Vpc2hlcyBudWxscworbWVtb3J5X2Fib3ZlCQkJZGEJYm9vbAlkYQktCS0JWUJDRy0JZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYWJvdmUgdGhlIHNjcmVlbgorbWVtb3J5X2JlbG93CQkJZGIJYm9vbAlkYgktCS0JWUItR0UJZGlzcGxheSBtYXkgYmUgcmV0YWluZWQgYmVsb3cgdGhlIHNjcmVlbgorbW92ZV9pbnNlcnRfbW9kZQkJbWlyCWJvb2wJbWkJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBpbnNlcnQgbW9kZQorbW92ZV9zdGFuZG91dF9tb2RlCQltc2dyCWJvb2wJbXMJLQktCVlCQ0dFCXNhZmUgdG8gbW92ZSB3aGlsZSBpbiBzdGFuZG91dCBtb2RlCitvdmVyX3N0cmlrZQkJCW9zCWJvb2wJb3MJLQktCVlCQ0ctCXRlcm1pbmFsIGNhbiBvdmVyc3RyaWtlCitzdGF0dXNfbGluZV9lc2Nfb2sJCWVzbG9rCWJvb2wJZXMJLQktCVlCLUctCWVzY2FwZSBjYW4gYmUgdXNlZCBvbiB0aGUgc3RhdHVzIGxpbmUKK2Rlc3RfdGFic19tYWdpY19zbXNvCQl4dAlib29sCXh0CS0JLQlZQkNHRQl0YWJzIGRlc3RydWN0aXZlLCBtYWdpYyBzbyBjaGFyICh0MTA2MSkKK3RpbGRlX2dsaXRjaAkJCWh6CWJvb2wJaHoJLQktCVlCLUdFCWNhbm5vdCBwcmludCB+J3MgKGhhemVsdGluZSkKK3RyYW5zcGFyZW50X3VuZGVybGluZQkJdWwJYm9vbAl1bAktCS0JWUJDR0UJdW5kZXJsaW5lIGNoYXJhY3RlciBvdmVyc3RyaWtlcworeG9uX3hvZmYJCQl4b24JYm9vbAl4bwktCS0JWUItLS0JdGVybWluYWwgdXNlcyB4b24veG9mZiBoYW5kc2hha2luZworbmVlZHNfeG9uX3hvZmYJCQlueG9uCWJvb2wJbngJLQktCS0tLS0tCXBhZGRpbmcgd2lsbCBub3Qgd29yaywgeG9uL3hvZmYgcmVxdWlyZWQKK3BydHJfc2lsZW50CQkJbWM1aQlib29sCTVpCS0JLQktLS0tLQlwcmludGVyIHdpbGwgbm90IGVjaG8gb24gc2NyZWVuCitoYXJkX2N1cnNvcgkJCWNodHMJYm9vbAlIQwktCS0JLS0tLS0JY3Vyc29yIGlzIGhhcmQgdG8gc2VlCitub25fcmV2X3JtY3VwCQkJbnJybWMJYm9vbAlOUgktCS0JLS0tLS0Jc21jdXAgZG9lcyBub3QgcmV2ZXJzZSBybWN1cAorbm9fcGFkX2NoYXIJCQlucGMJYm9vbAlOUAktCS0JLS0tLS0JcGFkIGNoYXJhY3RlciBkb2VzIG5vdCBleGlzdAorbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbgkJbmRzY3IJYm9vbAlORAktCS0JLS0tLS0Jc2Nyb2xsaW5nIHJlZ2lvbiBpcyBub24tZGVzdHJ1Y3RpdmUKK2Nhbl9jaGFuZ2UJCQljY2MJYm9vbAljYwktCS0JLS0tLS0JdGVybWluYWwgY2FuIHJlLWRlZmluZSBleGlzdGluZyBjb2xvcnMKK2JhY2tfY29sb3JfZXJhc2UJCWJjZQlib29sCXV0CS0JLQktLS0tLQlzY3JlZW4gZXJhc2VkIHdpdGggYmFja2dyb3VuZCBjb2xvcgoraHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uCWhscwlib29sCWhsCS0JLQktLS0tLQl0ZXJtaW5hbCB1c2VzIG9ubHkgSExTIGNvbG9yIG5vdGF0aW9uIChUZWt0cm9uaXgpCitjb2xfYWRkcl9nbGl0Y2gJCQl4aHBhCWJvb2wJWUEJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciBocGEvbWhwYSBjYXBzCitjcl9jYW5jZWxzX21pY3JvX21vZGUJCWNyeG0JYm9vbAlZQgktCS0JLS0tLS0JdXNpbmcgY3IgdHVybnMgb2ZmIG1pY3JvIG1vZGUKK2hhc19wcmludF93aGVlbAkJCWRhaXN5CWJvb2wJWUMJLQktCS0tLS0tCXByaW50ZXIgbmVlZHMgb3BlcmF0b3IgdG8gY2hhbmdlIGNoYXJhY3RlciBzZXQKK3Jvd19hZGRyX2dsaXRjaAkJCXh2cGEJYm9vbAlZRAktCS0JLS0tLS0Jb25seSBwb3NpdGl2ZSBtb3Rpb24gZm9yIHZwYS9tdnBhIGNhcHMKK3NlbWlfYXV0b19yaWdodF9tYXJnaW4JCXNhbQlib29sCVlFCS0JLQktLS0tLQlwcmludGluZyBpbiBsYXN0IGNvbHVtbiBjYXVzZXMgY3IKK2NwaV9jaGFuZ2VzX3JlcwkJCWNwaXgJYm9vbAlZRgktCS0JLS0tLS0JY2hhbmdpbmcgY2hhcmFjdGVyIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorbHBpX2NoYW5nZXNfcmVzCQkJbHBpeAlib29sCVlHCS0JLQktLS0tLQljaGFuZ2luZyBsaW5lIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIG51bWVyaWMgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQk51bWVyaWMJbmFtZQlDb2RlXGZSCitjb2x1bW5zCQkJCWNvbHMJbnVtCWNvCS0JLQlZQkNHRQludW1iZXIgb2YgY29sdW1ucyBpbiBhIGxpbmUKK2luaXRfdGFicwkJCWl0CW51bQlpdAktCS0JWUItRy0JdGFicyBpbml0aWFsbHkgZXZlcnkgIyBzcGFjZXMKK2xpbmVzCQkJCWxpbmVzCW51bQlsaQktCS0JWUJDR0UJbnVtYmVyIG9mIGxpbmVzIG9uIHNjcmVlbiBvciBwYWdlCitsaW5lc19vZl9tZW1vcnkJCQlsbQludW0JbG0JLQktCVlCLUctCWxpbmVzIG9mIG1lbW9yeSBpZiA+IGxpbmUuIDAgbWVhbnMgdmFyaWVzCittYWdpY19jb29raWVfZ2xpdGNoCQl4bWMJbnVtCXNnCS0JLQlZQkNHRQludW1iZXIgb2YgYmxhbmsgY2hhcmFjdGVycyBsZWZ0IGJ5IHNtc28gb3Igcm1zbworcGFkZGluZ19iYXVkX3JhdGUJCXBiCW51bQlwYgktCS0JWUItR0UJbG93ZXN0IGJhdWQgcmF0ZSB3aGVyZSBwYWRkaW5nIG5lZWRlZAordmlydHVhbF90ZXJtaW5hbAkJdnQJbnVtCXZ0CS0JLQlZQi0tLQl2aXJ0dWFsIHRlcm1pbmFsIG51bWJlciAoQ0IvdW5peCkKK3dpZHRoX3N0YXR1c19saW5lCQl3c2wJbnVtCXdzCS0JLQlZQi1HLQludW1iZXIgb2YgY29sdW1ucyBpbiBzdGF0dXMgbGluZQorbnVtX2xhYmVscwkJCW5sYWIJbnVtCU5sCS0JLQktLS0tLQludW1iZXIgb2YgbGFiZWxzIG9uIHNjcmVlbgorbGFiZWxfaGVpZ2h0CQkJbGgJbnVtCWxoCS0JLQktLS0tLQlyb3dzIGluIGVhY2ggbGFiZWwKK2xhYmVsX3dpZHRoCQkJbHcJbnVtCWx3CS0JLQktLS0tLQljb2x1bW5zIGluIGVhY2ggbGFiZWwKK21heF9hdHRyaWJ1dGVzCQkJbWEJbnVtCW1hCS0JLQlZQkMtLQltYXhpbXVtIGNvbWJpbmVkIGF0dHJpYnV0ZXMgdGVybWluYWwgY2FuIGhhbmRsZQorbWF4aW11bV93aW5kb3dzCQkJd251bQludW0JTVcJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGRlZmluZWFibGUgd2luZG93cworIyBUaGVzZSBjYW1lIGluIHdpdGggU1ZyNCdzIGNvbG9yIHN1cHBvcnQKK21heF9jb2xvcnMJCQljb2xvcnMJbnVtCUNvCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgb24gc2NyZWVuCittYXhfcGFpcnMJCQlwYWlycwludW0JcGEJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGNvbG9yLXBhaXJzIG9uIHRoZSBzY3JlZW4KK25vX2NvbG9yX3ZpZGVvCQkJbmN2CW51bQlOQwktCS0JLS0tLS0JdmlkZW8gYXR0cmlidXRlcyB0aGF0IGNhbm5vdCBiZSB1c2VkIHdpdGggY29sb3JzCisjJS5URQorIyUuYWQKKyMlCisjJVRoZSBmb2xsb3dpbmcgbnVtZXJpYyBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQgaW4gdGhlIFNWcjQuMCB0ZXJtIHN0cnVjdHVyZSwKKyMlYnV0IGFyZSBub3QgeWV0IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLiAgVGhleSBjYW1lIGluIHdpdGggU1ZyNCdzCisjJXByaW50ZXIgc3VwcG9ydC4KKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorYnVmZmVyX2NhcGFjaXR5CQkJYnVmc3oJbnVtCVlhCS0JLQktLS0tLQludW1iZXJzIG9mIGJ5dGVzIGJ1ZmZlcmVkIGJlZm9yZSBwcmludGluZworZG90X3ZlcnRfc3BhY2luZwkJc3BpbnYJbnVtCVliCS0JLQktLS0tLQlzcGFjaW5nIG9mIHBpbnMgdmVydGljYWxseSBpbiBwaW5zIHBlciBpbmNoCitkb3RfaG9yel9zcGFjaW5nCQlzcGluaAludW0JWWMJLQktCS0tLS0tCXNwYWNpbmcgb2YgZG90cyBob3Jpem9udGFsbHkgaW4gZG90cyBwZXIgaW5jaAorbWF4X21pY3JvX2FkZHJlc3MJCW1hZGRyCW51bQlZZAktCS0JLS0tLS0JbWF4aW11bSB2YWx1ZSBpbiBtaWNyb18uLi5fYWRkcmVzcworbWF4X21pY3JvX2p1bXAJCQltanVtcAludW0JWWUJLQktCS0tLS0tCW1heGltdW0gdmFsdWUgaW4gcGFybV8uLi5fbWljcm8KK21pY3JvX2NvbF9zaXplCQkJbWNzCW51bQlZZgktCS0JLS0tLS0JY2hhcmFjdGVyIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK21pY3JvX2xpbmVfc2l6ZQkJCW1scwludW0JWWcJLQktCS0tLS0tCWxpbmUgc3RlcCBzaXplIHdoZW4gaW4gbWljcm8gbW9kZQorbnVtYmVyX29mX3BpbnMJCQlucGlucwludW0JWWgJLQktCS0tLS0tCW51bWJlcnMgb2YgcGlucyBpbiBwcmludC1oZWFkCitvdXRwdXRfcmVzX2NoYXIJCQlvcmMJbnVtCVlpCS0JLQktLS0tLQlob3Jpem9udGFsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfbGluZQkJCW9ybAludW0JWWoJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGxpbmUKK291dHB1dF9yZXNfaG9yel9pbmNoCQlvcmhpCW51bQlZawktCS0JLS0tLS0JaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBpbmNoCitvdXRwdXRfcmVzX3ZlcnRfaW5jaAkJb3J2aQludW0JWWwJLQktCS0tLS0tCXZlcnRpY2FsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGluY2gKK3ByaW50X3JhdGUJCQljcHMJbnVtCVltCS0JLQktLS0tLQlwcmludCByYXRlIGluIGNoYXJhY3RlcnMgcGVyIHNlY29uZAord2lkZV9jaGFyX3NpemUJCQl3aWRjcwludW0JWW4JLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBkb3VibGUgd2lkZSBtb2RlCitidXR0b25zCQkJCWJ0bnMJbnVtCUJUCS0JLQktLS0tLQludW1iZXIgb2YgYnV0dG9ucyBvbiBtb3VzZQorYml0X2ltYWdlX2VudHdpbmluZwkJYml0d2luCW51bQlZbwktCS0JLS0tLS0JbnVtYmVyIG9mIHBhc3NlcyBmb3IgZWFjaCBiaXQtaW1hZ2Ugcm93CitiaXRfaW1hZ2VfdHlwZQkJCWJpdHlwZQludW0JWXAJLQktCS0tLS0tCXR5cGUgb2YgYml0LWltYWdlIGRldmljZQorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIHN0cmluZyBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCU3RyaW5nCW5hbWUJQ29kZVxmUgorYmFja190YWIJCQljYnQJc3RyCWJ0CS0JCS0JWUJDR0UJYmFjayB0YWIgKFApCitiZWxsCQkJCWJlbAlzdHIJYmwJLQkJLQlZQi1HRQlhdWRpYmxlIHNpZ25hbCAoYmVsbCkgKFApCitjYXJyaWFnZV9yZXR1cm4JCQljcglzdHIJY3IJLQkJLQlZQkNHRQljYXJyaWFnZSByZXR1cm4gKFAqKSAoUCopCitjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbgkJY3NyCXN0cgljcwktCQktCVlCQ0dFCWNoYW5nZSByZWdpb24gdG8gbGluZSAjMSB0byBsaW5lICMyIChQKQorY2xlYXJfYWxsX3RhYnMJCQl0YmMJc3RyCWN0CS0JCS0JWUItRy0JY2xlYXIgYWxsIHRhYiBzdG9wcyAoUCkKK2NsZWFyX3NjcmVlbgkJCWNsZWFyCXN0cgljbAktCQktCVlCQ0dFCWNsZWFyIHNjcmVlbiBhbmQgaG9tZSBjdXJzb3IgKFAqKQorY2xyX2VvbAkJCQllbAlzdHIJY2UJLQkJLQlZQkNHRQljbGVhciB0byBlbmQgb2YgbGluZSAoUCkKK2Nscl9lb3MJCQkJZWQJc3RyCWNkCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIHNjcmVlbiAoUCopCitjb2x1bW5fYWRkcmVzcwkJCWhwYQlzdHIJY2gJLQkJLQktQi1HRSoJaG9yaXpvbnRhbCBwb3NpdGlvbiAjMSwgYWJzb2x1dGUgKFApCitjb21tYW5kX2NoYXJhY3RlcgkJY21kY2gJc3RyCUNDCS0JCS0JWUItRy0JdGVybWluYWwgc2V0dGFibGUgY21kIGNoYXJhY3RlciBpbiBwcm90b3R5cGUgIT8KK2N1cnNvcl9hZGRyZXNzCQkJY3VwCXN0cgljbQktCQktCVlCQ0dFCW1vdmUgdG8gcm93ICMxIGNvbHVtbnMgIzIKK2N1cnNvcl9kb3duCQkJY3VkMQlzdHIJZG8JLQkJLQlZQkNHRQlkb3duIG9uZSBsaW5lCitjdXJzb3JfaG9tZQkJCWhvbWUJc3RyCWhvCS0JCS0JWUJDR0UJaG9tZSBjdXJzb3IgKGlmIG5vIGN1cCkKK2N1cnNvcl9pbnZpc2libGUJCWNpdmlzCXN0cgl2aQktCQktCVlCLUctCW1ha2UgY3Vyc29yIGludmlzaWJsZQorY3Vyc29yX2xlZnQJCQljdWIxCXN0cglsZQktCQktCVlCQ0dFCW1vdmUgbGVmdCBvbmUgc3BhY2UKK2N1cnNvcl9tZW1fYWRkcmVzcwkJbXJjdXAJc3RyCUNNCS0JCS0JWUItRy0JbWVtb3J5IHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nLCBtb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3Jfbm9ybWFsCQkJY25vcm0Jc3RyCXZlCS0JCS0JWUJDR0UJbWFrZSBjdXJzb3IgYXBwZWFyIG5vcm1hbCAodW5kbyBjaXZpcy9jdnZpcykKK2N1cnNvcl9yaWdodAkJCWN1ZjEJc3RyCW5kCS0JCS0JWUJDR0UJbm9uLWRlc3RydWN0aXZlIHNwYWNlIChtb3ZlIHJpZ2h0IG9uZSBzcGFjZSkKK2N1cnNvcl90b19sbAkJCWxsCXN0cglsbAktCQktCVlCQ0dFCWxhc3QgbGluZSwgZmlyc3QgY29sdW1uIChpZiBubyBjdXApCitjdXJzb3JfdXAJCQljdXUxCXN0cgl1cAktCQktCVlCQ0dFCXVwIG9uZSBsaW5lCitjdXJzb3JfdmlzaWJsZQkJCWN2dmlzCXN0cgl2cwktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIHZlcnkgdmlzaWJsZQorZGVsZXRlX2NoYXJhY3RlcgkJZGNoMQlzdHIJZGMJLQkJLQlZQkNHRQlkZWxldGUgY2hhcmFjdGVyIChQKikKK2RlbGV0ZV9saW5lCQkJZGwxCXN0cglkbAktCQktCVlCQ0dFCWRlbGV0ZSBsaW5lIChQKikKK2Rpc19zdGF0dXNfbGluZQkJCWRzbAlzdHIJZHMJLQkJLQlZQi1HLQlkaXNhYmxlIHN0YXR1cyBsaW5lCitkb3duX2hhbGZfbGluZQkJCWhkCXN0cgloZAktCQktCVlCLUctCWhhbGYgYSBsaW5lIGRvd24KK2VudGVyX2FsdF9jaGFyc2V0X21vZGUJCXNtYWNzCXN0cglhcwktCQktCVlCLUctCXN0YXJ0IGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IChQKQorZW50ZXJfYmxpbmtfbW9kZQkJYmxpbmsJc3RyCW1iCS0JCS0JWUItRy0JdHVybiBvbiBibGlua2luZworZW50ZXJfYm9sZF9tb2RlCQkJYm9sZAlzdHIJbWQJLQkJLQlZQi1HLQl0dXJuIG9uIGJvbGQgKGV4dHJhIGJyaWdodCkgbW9kZQorZW50ZXJfY2FfbW9kZQkJCXNtY3VwCXN0cgl0aQktCQktCVlCQ0dFCXN0cmluZyB0byBzdGFydCBwcm9ncmFtcyB1c2luZyBjdXAKK2VudGVyX2RlbGV0ZV9tb2RlCQlzbWRjCXN0cglkbQktCQktCVlCQ0dFCWVudGVyIGRlbGV0ZSBtb2RlCitlbnRlcl9kaW1fbW9kZQkJCWRpbQlzdHIJbWgJLQkJLQlZQi1HLQl0dXJuIG9uIGhhbGYtYnJpZ2h0IG1vZGUKK2VudGVyX2luc2VydF9tb2RlCQlzbWlyCXN0cglpbQktCQktCVlCQ0dFCWVudGVyIGluc2VydCBtb2RlCitlbnRlcl9zZWN1cmVfbW9kZQkJaW52aXMJc3RyCW1rCS0JCS0JLUItRy0qCXR1cm4gb24gYmxhbmsgbW9kZSAoY2hhcmFjdGVycyBpbnZpc2libGUpCitlbnRlcl9wcm90ZWN0ZWRfbW9kZQkJcHJvdAlzdHIJbXAJLQkJLQktQi1HLSoJdHVybiBvbiBwcm90ZWN0ZWQgbW9kZQorZW50ZXJfcmV2ZXJzZV9tb2RlCQlyZXYJc3RyCW1yCS0JCS0JWUItRy0JdHVybiBvbiByZXZlcnNlIHZpZGVvIG1vZGUKK2VudGVyX3N0YW5kb3V0X21vZGUJCXNtc28Jc3RyCXNvCS0JCS0JWUJDR0UJYmVnaW4gc3RhbmRvdXQgbW9kZQorZW50ZXJfdW5kZXJsaW5lX21vZGUJCXNtdWwJc3RyCXVzCS0JCS0JWUJDR0UJYmVnaW4gdW5kZXJsaW5lIG1vZGUKK2VyYXNlX2NoYXJzCQkJZWNoCXN0cgllYwktCQktCVlCLUctCWVyYXNlICMxIGNoYXJhY3RlcnMgKFApCitleGl0X2FsdF9jaGFyc2V0X21vZGUJCXJtYWNzCXN0cglhZQktCQktCVlCLUctCWVuZCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2V4aXRfYXR0cmlidXRlX21vZGUJCXNncjAJc3RyCW1lCS0JCS0JWUItR0UJdHVybiBvZmYgYWxsIGF0dHJpYnV0ZXMKK2V4aXRfY2FfbW9kZQkJCXJtY3VwCXN0cgl0ZQktCQktCVlCQ0dFCXN0cmluZ3MgdG8gZW5kIHByb2dyYW1zIHVzaW5nIGN1cAorZXhpdF9kZWxldGVfbW9kZQkJcm1kYwlzdHIJZWQJLQkJLQlZQkNHRQllbmQgZGVsZXRlIG1vZGUKK2V4aXRfaW5zZXJ0X21vZGUJCXJtaXIJc3RyCWVpCS0JCS0JWUJDR0UJZXhpdCBpbnNlcnQgbW9kZQorZXhpdF9zdGFuZG91dF9tb2RlCQlybXNvCXN0cglzZQktCQktCVlCQ0dFCWV4aXQgc3RhbmRvdXQgbW9kZQorZXhpdF91bmRlcmxpbmVfbW9kZQkJcm11bAlzdHIJdWUJLQkJLQlZQkNHRQlleGl0IHVuZGVybGluZSBtb2RlCitmbGFzaF9zY3JlZW4JCQlmbGFzaAlzdHIJdmIJLQkJLQlZQkNHRQl2aXNpYmxlIGJlbGwgKG1heSBub3QgbW92ZSBjdXJzb3IpCitmb3JtX2ZlZWQJCQlmZglzdHIJZmYJLQkJLQlZQi1HLQloYXJkY29weSB0ZXJtaW5hbCBwYWdlIGVqZWN0IChQKikKK2Zyb21fc3RhdHVzX2xpbmUJCWZzbAlzdHIJZnMJLQkJLQlZQi1HLQlyZXR1cm4gZnJvbSBzdGF0dXMgbGluZQoraW5pdF8xc3RyaW5nCQkJaXMxCXN0cglpMQktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF8yc3RyaW5nCQkJaXMyCXN0cglpcwktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF8zc3RyaW5nCQkJaXMzCXN0cglpMwktCQktCVlCLUctCWluaXRpYWxpemF0aW9uIHN0cmluZworaW5pdF9maWxlCQkJaWYJc3RyCWlmCS0JCS0JWUItRy0JbmFtZSBvZiBpbml0aWFsaXphdGlvbiBmaWxlCitpbnNlcnRfY2hhcmFjdGVyCQlpY2gxCXN0cglpYwktCQktCVlCQ0dFCWluc2VydCBjaGFyYWN0ZXIgKFApCitpbnNlcnRfbGluZQkJCWlsMQlzdHIJYWwJLQkJLQlZQkNHRQlpbnNlcnQgbGluZSAoUCopCitpbnNlcnRfcGFkZGluZwkJCWlwCXN0cglpcAktCQktCVlCQ0dFCWluc2VydCBwYWRkaW5nIGFmdGVyIGluc2VydGVkIGNoYXJhY3Rlcgora2V5X2JhY2tzcGFjZQkJCWticwlzdHIJa2IJS0VZX0JBQ0tTUEFDRQkwNDA3CVlCLUctCWJhY2tzcGFjZSBrZXkKK2tleV9jYXRhYgkJCWt0YmMJc3RyCWthCUtFWV9DQVRBQgkwNTI2CS1CLUctKgljbGVhci1hbGwtdGFicyBrZXkKK2tleV9jbGVhcgkJCWtjbHIJc3RyCWtDCUtFWV9DTEVBUgkwNTE1CS1CLUctKgljbGVhci1zY3JlZW4gb3IgZXJhc2Uga2V5CitrZXlfY3RhYgkJCWtjdGFiCXN0cglrdAlLRVlfQ1RBQgkwNTI1CS1CLUctKgljbGVhci10YWIga2V5CitrZXlfZGMJCQkJa2RjaDEJc3RyCWtECUtFWV9EQwkJMDUxMglZQi1HLQlkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X2RsCQkJCWtkbDEJc3RyCWtMCUtFWV9ETAkJMDUxMAktQi1HLSoJZGVsZXRlLWxpbmUga2V5CitrZXlfZG93bgkJCWtjdWQxCXN0cglrZAlLRVlfRE9XTgkwNDAyCVlCQ0dFCWRvd24tYXJyb3cga2V5CitrZXlfZWljCQkJCWtybWlyCXN0cglrTQlLRVlfRUlDCQkwNTE0CS1CLUctKglzZW50IGJ5IHJtaXIgb3Igc21pciBpbiBpbnNlcnQgbW9kZQora2V5X2VvbAkJCQlrZWwJc3RyCWtFCUtFWV9FT0wJCTA1MTcJLUItRy0qCWNsZWFyLXRvLWVuZC1vZi1saW5lIGtleQora2V5X2VvcwkJCQlrZWQJc3RyCWtTCUtFWV9FT1MJCTA1MTYJLUItRy0qCWNsZWFyLXRvLWVuZC1vZi1zY3JlZW4ga2V5CitrZXlfZjAJCQkJa2YwCXN0cglrMAlLRVlfRigwKQkwNDEwCVlCQ0dFCUYwIGZ1bmN0aW9uIGtleQora2V5X2YxCQkJCWtmMQlzdHIJazEJS0VZX0YoMSkJLQlZQkNHRQlGMSBmdW5jdGlvbiBrZXkKK2tleV9mMTAJCQkJa2YxMAlzdHIJazsJS0VZX0YoMTApCS0JLS0tLUUJRjEwIGZ1bmN0aW9uIGtleQora2V5X2YyCQkJCWtmMglzdHIJazIJS0VZX0YoMikJLQlZQkNHRQlGMiBmdW5jdGlvbiBrZXkKK2tleV9mMwkJCQlrZjMJc3RyCWszCUtFWV9GKDMpCS0JWUJDR0UJRjMgZnVuY3Rpb24ga2V5CitrZXlfZjQJCQkJa2Y0CXN0cglrNAlLRVlfRig0KQktCVlCQ0dFCUY0IGZ1bmN0aW9uIGtleQora2V5X2Y1CQkJCWtmNQlzdHIJazUJS0VZX0YoNSkJLQlZQkNHRQlGNSBmdW5jdGlvbiBrZXkKK2tleV9mNgkJCQlrZjYJc3RyCWs2CUtFWV9GKDYpCS0JWUJDR0UJRjYgZnVuY3Rpb24ga2V5CitrZXlfZjcJCQkJa2Y3CXN0cglrNwlLRVlfRig3KQktCVlCQ0dFCUY3IGZ1bmN0aW9uIGtleQora2V5X2Y4CQkJCWtmOAlzdHIJazgJS0VZX0YoOCkJLQlZQkNHRQlGOCBmdW5jdGlvbiBrZXkKK2tleV9mOQkJCQlrZjkJc3RyCWs5CUtFWV9GKDkpCS0JWUJDR0UJRjkgZnVuY3Rpb24ga2V5CitrZXlfaG9tZQkJCWtob21lCXN0cglraAlLRVlfSE9NRQkwNDA2CVlCQ0dFCWhvbWUga2V5CitrZXlfaWMJCQkJa2ljaDEJc3RyCWtJCUtFWV9JQwkJMDUxMwlZQi1HRQlpbnNlcnQtY2hhcmFjdGVyIGtleQora2V5X2lsCQkJCWtpbDEJc3RyCWtBCUtFWV9JTAkJMDUxMQktQi1HLSoJaW5zZXJ0LWxpbmUga2V5CitrZXlfbGVmdAkJCWtjdWIxCXN0cglrbAlLRVlfTEVGVAkwNDA0CVlCQ0dFCWxlZnQtYXJyb3cga2V5CitrZXlfbGwJCQkJa2xsCXN0cglrSAlLRVlfTEwJCTA1MzMJWUItRy0JbG93ZXItbGVmdCBrZXkgKGhvbWUgZG93bikKK2tleV9ucGFnZQkJCWtucAlzdHIJa04JS0VZX05QQUdFCTA1MjIJWUItR0UJbmV4dC1wYWdlIGtleQora2V5X3BwYWdlCQkJa3BwCXN0cglrUAlLRVlfUFBBR0UJMDUyMwlZQi1HRQlwcmV2aW91cy1wYWdlIGtleQora2V5X3JpZ2h0CQkJa2N1ZjEJc3RyCWtyCUtFWV9SSUdIVAkwNDA1CVlCQ0dFCXJpZ2h0LWFycm93IGtleQora2V5X3NmCQkJCWtpbmQJc3RyCWtGCUtFWV9TRgkJMDUyMAktQi1HLSoJc2Nyb2xsLWZvcndhcmQga2V5CitrZXlfc3IJCQkJa3JpCXN0cglrUglLRVlfU1IJCTA1MjEJLUItRy0qCXNjcm9sbC1iYWNrd2FyZCBrZXkKK2tleV9zdGFiCQkJa2h0cwlzdHIJa1QJS0VZX1NUQUIJMDUyNAktQi1HLSoJc2V0LXRhYiBrZXkKK2tleV91cAkJCQlrY3V1MQlzdHIJa3UJS0VZX1VQCQkwNDAzCVlCQ0dFCXVwLWFycm93IGtleQora2V5cGFkX2xvY2FsCQkJcm1reAlzdHIJa2UJLQkJLQlZQkNHRQlsZWF2ZSAna2V5Ym9hcmRfdHJhbnNtaXQnIG1vZGUKK2tleXBhZF94bWl0CQkJc21reAlzdHIJa3MJLQkJLQlZQkNHRQllbnRlciAna2V5Ym9hcmRfdHJhbnNtaXQnIG1vZGUKK2xhYl9mMAkJCQlsZjAJc3RyCWwwCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMCBpZiBub3QgZjAKK2xhYl9mMQkJCQlsZjEJc3RyCWwxCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMSBpZiBub3QgZjEKK2xhYl9mMTAJCQkJbGYxMAlzdHIJbGEJLQkJLQktLS0tLQlsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEwIGlmIG5vdCBmMTAKK2xhYl9mMgkJCQlsZjIJc3RyCWwyCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMiBpZiBub3QgZjIKK2xhYl9mMwkJCQlsZjMJc3RyCWwzCS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMyBpZiBub3QgZjMKK2xhYl9mNAkJCQlsZjQJc3RyCWw0CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNCBpZiBub3QgZjQKK2xhYl9mNQkJCQlsZjUJc3RyCWw1CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNSBpZiBub3QgZjUKK2xhYl9mNgkJCQlsZjYJc3RyCWw2CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNiBpZiBub3QgZjYKK2xhYl9mNwkJCQlsZjcJc3RyCWw3CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmNyBpZiBub3QgZjcKK2xhYl9mOAkJCQlsZjgJc3RyCWw4CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmOCBpZiBub3QgZjgKK2xhYl9mOQkJCQlsZjkJc3RyCWw5CS0JCS0JLUItRy0qCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmOSBpZiBub3QgZjkKK21ldGFfb2ZmCQkJcm1tCXN0cgltbwktCQktCVlCLUctKgl0dXJuIG9mZiBtZXRhIG1vZGUKK21ldGFfb24JCQkJc21tCXN0cgltbQktCQktCVlCLUctKgl0dXJuIG9uIG1ldGEgbW9kZSAoOHRoLWJpdCBvbikKK25ld2xpbmUJCQkJbmVsCXN0cgludwktCQktCVlCLUctKgluZXdsaW5lIChiZWhhdmUgbGlrZSBjciBmb2xsb3dlZCBieSBsZikKK3BhZF9jaGFyCQkJcGFkCXN0cglwYwktCQktCVlCQ0dFCXBhZGRpbmcgY2hhciAoaW5zdGVhZCBvZiBudWxsKQorcGFybV9kY2gJCQlkY2gJc3RyCURDCS0JCS0JWUItR0UJZGVsZXRlICMxIGNoYXJhY3RlcnMgKFAqKQorcGFybV9kZWxldGVfbGluZQkJZGwJc3RyCURMCS0JCS0JWUJDR0UJZGVsZXRlICMxIGxpbmVzIChQKikKK3Bhcm1fZG93bl9jdXJzb3IJCWN1ZAlzdHIJRE8JLQkJLQlZQkNHRQlkb3duICMxIGxpbmVzIChQKikKK3Bhcm1faWNoCQkJaWNoCXN0cglJQwktCQktCVlCLUdFCWluc2VydCAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1faW5kZXgJCQlpbmRuCXN0cglTRgktCQktCVlCQ0ctCXNjcm9sbCBmb3J3YXJkICMxIGxpbmVzIChQKQorcGFybV9pbnNlcnRfbGluZQkJaWwJc3RyCUFMCS0JCS0JWUJDR0UJaW5zZXJ0ICMxIGxpbmVzIChQKikKK3Bhcm1fbGVmdF9jdXJzb3IJCWN1YglzdHIJTEUJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQgKFApCitwYXJtX3JpZ2h0X2N1cnNvcgkJY3VmCXN0cglSSQktCQktCVlCQ0dFCW1vdmUgIzEgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgKFAqKQorcGFybV9yaW5kZXgJCQlyaW4Jc3RyCVNSCS0JCS0JWUJDRy0Jc2Nyb2xsIGJhY2sgIzEgbGluZXMgKFApCitwYXJtX3VwX2N1cnNvcgkJCWN1dQlzdHIJVVAJLQkJLQlZQkNHRQl1cCAjMSBsaW5lcyAoUCopCitwa2V5X2tleQkJCXBma2V5CXN0cglwawktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHR5cGUgc3RyaW5nICMyCitwa2V5X2xvY2FsCQkJcGZsb2MJc3RyCXBsCS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gZXhlY3V0ZSBzdHJpbmcgIzIKK3BrZXlfeG1pdAkJCXBmeAlzdHIJcHgJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0cmFuc21pdCBzdHJpbmcgIzIKK3ByaW50X3NjcmVlbgkJCW1jMAlzdHIJcHMJLQkJLQktQi1HLSoJcHJpbnQgY29udGVudHMgb2Ygc2NyZWVuCitwcnRyX29mZgkJCW1jNAlzdHIJcGYJLQkJLQktQi1HLSoJdHVybiBvZmYgcHJpbnRlcgorcHJ0cl9vbgkJCQltYzUJc3RyCXBvCS0JCS0JLUItRy0qCXR1cm4gb24gcHJpbnRlcgorcmVwZWF0X2NoYXIJCQlyZXAJc3RyCXJwCS0JCS0JWUItR0UJcmVwZWF0IGNoYXIgIzEgIzIgdGltZXMgKFAqKQorcmVzZXRfMXN0cmluZwkJCXJzMQlzdHIJcjEJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0XzJzdHJpbmcJCQlyczIJc3RyCXIyCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8zc3RyaW5nCQkJcnMzCXN0cglyMwktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfZmlsZQkJCXJmCXN0cglyZgktCQktCS1CLS0tCW5hbWUgb2YgcmVzZXQgZmlsZQorcmVzdG9yZV9jdXJzb3IJCQlyYwlzdHIJcmMJLQkJLQlZQkNHLQlyZXN0b3JlIGN1cnNvciB0byBwb3NpdGlvbiBvZiBsYXN0IHNhdmVfY3Vyc29yCityb3dfYWRkcmVzcwkJCXZwYQlzdHIJY3YJLQkJLQktQi1HRSoJdmVydGljYWwgcG9zaXRpb24gIzEgYWJzb2x1dGUgKFApCitzYXZlX2N1cnNvcgkJCXNjCXN0cglzYwktCQktCVlCQ0ctCXNhdmUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKFApCitzY3JvbGxfZm9yd2FyZAkJCWluZAlzdHIJc2YJLQkJLQlZQkNHRQlzY3JvbGwgdGV4dCB1cCAoUCkKK3Njcm9sbF9yZXZlcnNlCQkJcmkJc3RyCXNyCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgZG93biAoUCkKK3NldF9hdHRyaWJ1dGVzCQkJc2dyCXN0cglzYQktCQktCVlCLUctCWRlZmluZSB2aWRlbyBhdHRyaWJ1dGVzICMxLSM5IChQRzkpCitzZXRfdGFiCQkJCWh0cwlzdHIJc3QJLQkJLQlZQi1HLQlzZXQgYSB0YWIgaW4gZXZlcnkgcm93LCBjdXJyZW50IGNvbHVtbnMKK3NldF93aW5kb3cJCQl3aW5kCXN0cgl3aQktCQktCS1CLUdFCWN1cnJlbnQgd2luZG93IGlzIGxpbmVzICMxLSMyIGNvbHMgIzMtIzQKK3RhYgkJCQlodAlzdHIJdGEJLQkJLQlZQkNHRQl0YWIgdG8gbmV4dCA4LXNwYWNlIGhhcmR3YXJlIHRhYiBzdG9wCit0b19zdGF0dXNfbGluZQkJCXRzbAlzdHIJdHMJLQkJLQlZQi1HLQltb3ZlIHRvIHN0YXR1cyBsaW5lLCBjb2x1bW4gIzEKK3VuZGVybGluZV9jaGFyCQkJdWMJc3RyCXVjCS0JCS0JWUJDRy0JdW5kZXJsaW5lIGNoYXIgYW5kIG1vdmUgcGFzdCBpdAordXBfaGFsZl9saW5lCQkJaHUJc3RyCWh1CS0JCS0JWUItRy0JaGFsZiBhIGxpbmUgdXAKK2luaXRfcHJvZwkJCWlwcm9nCXN0cglpUAktCQktCS1CLS0tCXBhdGggbmFtZSBvZiBwcm9ncmFtIGZvciBpbml0aWFsaXphdGlvbgora2V5X2ExCQkJCWthMQlzdHIJSzEJS0VZX0ExCQkwNTM0CVlCLUdFCXVwcGVyIGxlZnQgb2Yga2V5cGFkCitrZXlfYTMJCQkJa2EzCXN0cglLMwlLRVlfQTMJCTA1MzUJWUItR0UJdXBwZXIgcmlnaHQgb2Yga2V5cGFkCitrZXlfYjIJCQkJa2IyCXN0cglLMglLRVlfQjIJCTA1MzYJWUItR0UJY2VudGVyIG9mIGtleXBhZAora2V5X2MxCQkJCWtjMQlzdHIJSzQJS0VZX0MxCQkwNTM3CVlCLUdFCWxvd2VyIGxlZnQgb2Yga2V5cGFkCitrZXlfYzMJCQkJa2MzCXN0cglLNQlLRVlfQzMJCTA1NDAJWUItR0UJbG93ZXIgcmlnaHQgb2Yga2V5cGFkCitwcnRyX25vbgkJCW1jNXAJc3RyCXBPCS0JCS0JLUItRy0qCXR1cm4gb24gcHJpbnRlciBmb3IgIzEgYnl0ZXMKKyMKKyMgSUJNIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIElCTQorIyB0ZXJtaW5mbyBmaWxlcy4KKyMKKyMgVGhlIHBsYWNlcyBpbiB0aGUgYm94WzEyXSBjYXBhYmlsaXRpZXMgY29ycmVzcG9uZCB0byBhY3NjIGNoYXJhY3RlcnMsIGhlcmUgaXMKKyMgdGhlIG1hcHBpbmc6CisjCisjCWJveDFbMF0gID0gQUNTX1VMQ09STkVSCisjCWJveDFbMV0gID0gQUNTX0hMSU5FCQorIwlib3gxWzJdICA9IEFDU19VUkNPUk5FUgorIwlib3gxWzNdICA9IEFDU19WTElORQorIwlib3gxWzRdICA9IEFDU19MUkNPUk5FUgorIwlib3gxWzVdICA9IEFDU19MTENPUk5FUgorIwlib3gxWzZdICA9IEFDU19UVEVFCisjCWJveDFbN10gID0gQUNTX1JURUUKKyMJYm94MVs4XSAgPSBBQ1NfQlRFRQorIwlib3gxWzldICA9IEFDU19MVEVFCisjCWJveDFbMTBdID0gQUNTX1BMVVMKKyMKKyMgVGhlIGJveDIgY2hhcmFjdGVycyBhcmUgdGhlIGRvdWJsZS1saW5lIHZlcnNpb25zIG9mIHRoZXNlIGZvcm1zIGdyYXBoaWNzLgorIworYm94X2NoYXJzXzEJCQlib3gxCXN0cglieAktCQktCS0tLS1LCWJveCBjaGFyYWN0ZXJzIHByaW1hcnkgc2V0Citib3hfY2hhcnNfMgkJCWJveDIJc3RyCWJ5CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgc2Vjb25kYXJ5IHNldAorYm94X2F0dHJfMQkJCWJhdHQxCXN0cglCeAktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDEKK2JveF9hdHRyXzIJCQliYXR0MglzdHIJQnkJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gyCitjb2xvcl9iZ18wCQkJY29sYjAJc3RyCWQwCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAwCitjb2xvcl9iZ18xCQkJY29sYjEJc3RyCWQxCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAxCitjb2xvcl9iZ18yCQkJY29sYjIJc3RyCWQyCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAyCitjb2xvcl9iZ18zCQkJY29sYjMJc3RyCWQzCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAzCitjb2xvcl9iZ180CQkJY29sYjQJc3RyCWQ0CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA0Citjb2xvcl9iZ181CQkJY29sYjUJc3RyCWQ1CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA1Citjb2xvcl9iZ182CQkJY29sYjYJc3RyCWQ2CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA2Citjb2xvcl9iZ183CQkJY29sYjcJc3RyCWQ3CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA3Citjb2xvcl9mZ18wCQkJY29sZjAJc3RyCWMwCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAwCitjb2xvcl9mZ18xCQkJY29sZjEJc3RyCWMxCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAxCitjb2xvcl9mZ18yCQkJY29sZjIJc3RyCWMyCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAyCitjb2xvcl9mZ18zCQkJY29sZjMJc3RyCWMzCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAzCitjb2xvcl9mZ180CQkJY29sZjQJc3RyCWM0CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA0Citjb2xvcl9mZ181CQkJY29sZjUJc3RyCWM1CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA1Citjb2xvcl9mZ182CQkJY29sZjYJc3RyCWM2CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA2Citjb2xvcl9mZ183CQkJY29sZjcJc3RyCWM3CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA3Citmb250XzAJCQkJZm9udDAJc3RyCWYwCS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgMAorZm9udF8xCQkJCWZvbnQxCXN0cglmMQktCQktCS0tLS1LCXNlbGVjdCBmb250IDEKK2ZvbnRfMgkJCQlmb250MglzdHIJZjIJLQkJLQktLS0tSwlzZWxlY3QgZm9udCAyCitmb250XzMJCQkJZm9udDMJc3RyCWYzCS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgMworZm9udF80CQkJCWZvbnQ0CXN0cglmNAktCQktCS0tLS1LCXNlbGVjdCBmb250IDQKK2ZvbnRfNQkJCQlmb250NQlzdHIJZjUJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA1Citmb250XzYJCQkJZm9udDYJc3RyCWY2CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNgorZm9udF83CQkJCWZvbnQ3CXN0cglmNwktCQktCS0tLS1LCXNlbGVjdCBmb250IDcKK2tleV9iYWNrX3RhYgkJCWtidGFiCXN0cglrMAktCQktCS0tLS1LCWJhY2t0YWIga2V5CitrZXlfZG8JCQkJa2RvCXN0cglraQktCQktCS0tLS1LCWRvIHJlcXVlc3Qga2V5CitrZXlfY29tbWFuZAkJCWtjbWQJc3RyCWtkCS0JCS0JLS0tLUsJY29tbWFuZC1yZXF1ZXN0IGtleQora2V5X2NvbW1hbmRfcGFuZQkJa2NwbglzdHIJa1cJLQkJLQktLS0tSwljb21tYW5kLXBhbmUga2V5CitrZXlfZW5kCQkJCWtlbmQJc3RyCWt3CUtFWV9FTkQJCTA1NTAJLS0tLS0JZW5kIGtleQora2V5X2hlbHAJCQlraGxwCXN0cglrcQktCQktCS0tLS0tCWhlbHAga2V5CitrZXlfbmV3bGluZQkJCWtubAlzdHIJbmwJLQkJLQktLS0tSwluZXdsaW5lIGtleQora2V5X25leHRfcGFuZQkJCWtucG4Jc3RyCWt2CS0JCS0JLS0tLUsJbmV4dC1wYW5lIGtleQora2V5X3ByZXZfY21kCQkJa3BwbglzdHIJa3AJLQkJLQktLS0tSwlwcmV2aW91cy1jb21tYW5kIGtleQora2V5X3ByZXZfcGFuZQkJCWtwcG4Jc3RyCWtWCS0JCS0JLS0tLUsJcHJldmlvdXMtcGFuZSBrZXkKK2tleV9xdWl0CQkJa3F1aXQJc3RyCWtRCS0JCS0JLS0tLUsJcXVpdCBrZXkKK2tleV9zZWxlY3RfYWl4CQkJa3NlbAlzdHIJa1UJLQkJLQktLS0tLQlzZWxlY3Qga2V5CitrZXlfc2Nyb2xsX2xlZnQJCQlrc2NsCXN0cglregktCQktCS0tLS1LCXNjcm9sbCBsZWZ0CitrZXlfc2Nyb2xsX3JpZ2h0CQlrc2NyCXN0cglrWgktCQktCS0tLS1LCXNjcm9sbCByaWdodAora2V5X3RhYgkJCQlrdGFiCXN0cglrbwktCQktCS0tLS1LCXRhYiBrZXkKK2tleV9zbWFwX2luMQkJCWttcGYxCXN0cglLdgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAxIGlucHV0CitrZXlfc21hcF9vdXQxCQkJa21wdDEJc3RyCUtWCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgb3V0cHV0CitrZXlfc21hcF9pbjIJCQlrbXBmMglzdHIJS3cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBpbnB1dAora2V5X3NtYXBfb3V0MgkJCWttcHQyCXN0cglLVwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAyIG91dHB1dAora2V5X3NtYXBfaW4zCQkJa21wZjMJc3RyCUt4CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgaW5wdXQKK2tleV9zbWFwX291dDMJCQlrbXB0MwlzdHIJS1gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBvdXRwdXQKK2tleV9zbWFwX2luNAkJCWttcGY0CXN0cglLeQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA0IGlucHV0CitrZXlfc21hcF9vdXQ0CQkJa21wdDQJc3RyCUtZCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgb3V0cHV0CitrZXlfc21hcF9pbjUJCQlrbXBmNQlzdHIJS3oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBpbnB1dAora2V5X3NtYXBfb3V0NQkJCWttcHQ1CXN0cglLWgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA1IG91dHB1dAorYXBwbF9kZWZpbmVkX3N0cgkJYXBzdHIJc3RyCXphCS0JCS0JLS0tLUsJYXBwbGljYXRpb24tZGVmaW5lZCBzdHJpbmcKK2tleV9zbWFwX2luNgkJCWttcGY2CXN0cglrcgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA2IGlucHV0CitrZXlfc21hcF9vdXQ2CQkJa21wdDYJc3RyCUtSCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgb3V0cHV0CitrZXlfc21hcF9pbjcJCQlrbXBmNwlzdHIJa3MJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBpbnB1dAora2V5X3NtYXBfb3V0NwkJCWttcHQ3CXN0cglLUwktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA3IG91dHB1dAora2V5X3NtYXBfaW44CQkJa21wZjgJc3RyCWt0CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggaW5wdXQKK2tleV9zbWFwX291dDgJCQlrbXB0OAlzdHIJS1QJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBvdXRwdXQKK2tleV9zbWFwX2luOQkJCWttcGY5CXN0cglrdQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA5IGlucHV0CitrZXlfc21hcF9vdXQ5CQkJa21wdDkJc3RyCUtVCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgb3V0cHV0CitrZXlfc2YxCQkJCWtzZjEJc3RyCVMxCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMQora2V5X3NmMgkJCQlrc2YyCXN0cglTMgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDIKK2tleV9zZjMJCQkJa3NmMwlzdHIJUzMJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAzCitrZXlfc2Y0CQkJCWtzZjQJc3RyCVM0CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNAora2V5X3NmNQkJCQlrc2Y1CXN0cglTNQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDUKK2tleV9zZjYJCQkJa3NmNglzdHIJUzYJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA2CitrZXlfc2Y3CQkJCWtzZjcJc3RyCVM3CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNwora2V5X3NmOAkJCQlrc2Y4CXN0cglTOAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDgKK2tleV9zZjkJCQkJa3NmOQlzdHIJUzkJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA5CitrZXlfc2YxMAkJCWtzZjEwCXN0cglTMAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEwCitrZXlfZjExCQkJCWtmMTEJc3RyCUYxCUtFWV9GKDExKQktCS0tLS1FCUYxMSBmdW5jdGlvbiBrZXkKK2tleV9mMTIJCQkJa2YxMglzdHIJRjIJS0VZX0YoMTIpCS0JLS0tLUUJRjEyIGZ1bmN0aW9uIGtleQora2V5X2YxMwkJCQlrZjEzCXN0cglGMwlLRVlfRigxMykJLQktLS0tRQlGMTMgZnVuY3Rpb24ga2V5CitrZXlfZjE0CQkJCWtmMTQJc3RyCUY0CUtFWV9GKDE0KQktCS0tLS1FCUYxNCBmdW5jdGlvbiBrZXkKK2tleV9mMTUJCQkJa2YxNQlzdHIJRjUJS0VZX0YoMTUpCS0JLS0tLUUJRjE1IGZ1bmN0aW9uIGtleQora2V5X2YxNgkJCQlrZjE2CXN0cglGNglLRVlfRigxNikJLQktLS0tRQlGMTYgZnVuY3Rpb24ga2V5CitrZXlfZjE3CQkJCWtmMTcJc3RyCUY3CUtFWV9GKDE3KQktCS0tLS1FCUYxNyBmdW5jdGlvbiBrZXkKK2tleV9mMTgJCQkJa2YxOAlzdHIJRjgJS0VZX0YoMTgpCS0JLS0tLUUJRjE4IGZ1bmN0aW9uIGtleQora2V5X2YxOQkJCQlrZjE5CXN0cglGOQlLRVlfRigxOSkJLQktLS0tRQlGMTkgZnVuY3Rpb24ga2V5CitrZXlfZjIwCQkJCWtmMjAJc3RyCUZBCUtFWV9GKDIwKQktCS0tLS1FCUYyMCBmdW5jdGlvbiBrZXkKK2tleV9mMjEJCQkJa2YyMQlzdHIJRkIJS0VZX0YoMjEpCS0JLS0tLUUJRjIxIGZ1bmN0aW9uIGtleQora2V5X2YyMgkJCQlrZjIyCXN0cglGQwlLRVlfRigyMikJLQktLS0tRQlGMjIgZnVuY3Rpb24ga2V5CitrZXlfZjIzCQkJCWtmMjMJc3RyCUZECUtFWV9GKDIzKQktCS0tLS1FCUYyMyBmdW5jdGlvbiBrZXkKK2tleV9mMjQJCQkJa2YyNAlzdHIJRkUJS0VZX0YoMjQpCS0JLS0tLUUJRjI0IGZ1bmN0aW9uIGtleQora2V5X2YyNQkJCQlrZjI1CXN0cglGRglLRVlfRigyNSkJLQktLS0tRQlGMjUgZnVuY3Rpb24ga2V5CitrZXlfZjI2CQkJCWtmMjYJc3RyCUZHCUtFWV9GKDI2KQktCS0tLS1FCUYyNiBmdW5jdGlvbiBrZXkKK2tleV9mMjcJCQkJa2YyNwlzdHIJRkgJS0VZX0YoMjcpCS0JLS0tLUUJRjI3IGZ1bmN0aW9uIGtleQora2V5X2YyOAkJCQlrZjI4CXN0cglGSQlLRVlfRigyOCkJLQktLS0tRQlGMjggZnVuY3Rpb24ga2V5CitrZXlfZjI5CQkJCWtmMjkJc3RyCUZKCUtFWV9GKDI5KQktCS0tLS1FCUYyOSBmdW5jdGlvbiBrZXkKK2tleV9mMzAJCQkJa2YzMAlzdHIJRksJS0VZX0YoMzApCS0JLS0tLUUJRjMwIGZ1bmN0aW9uIGtleQora2V5X2YzMQkJCQlrZjMxCXN0cglGTAlLRVlfRigzMSkJLQktLS0tRQlGMzEgZnVuY3Rpb24ga2V5CitrZXlfZjMyCQkJCWtmMzIJc3RyCUZNCUtFWV9GKDMyKQktCS0tLS1FCUYzMiBmdW5jdGlvbiBrZXkKK2tleV9mMzMJCQkJa2YzMwlzdHIJRk4JS0VZX0YoMzMpCS0JLS0tLUUJRjMzIGZ1bmN0aW9uIGtleQora2V5X2YzNAkJCQlrZjM0CXN0cglGTwlLRVlfRigzNCkJLQktLS0tRQlGMzQgZnVuY3Rpb24ga2V5CitrZXlfZjM1CQkJCWtmMzUJc3RyCUZQCUtFWV9GKDM1KQktCS0tLS1FCUYzNSBmdW5jdGlvbiBrZXkKK2tleV9mMzYJCQkJa2YzNglzdHIJRlEJS0VZX0YoMzYpCS0JLS0tLUUJRjM2IGZ1bmN0aW9uIGtleQora2V5X2YzNwkJCQlrZjM3CXN0cglGUglLRVlfRigzNykJLQktLS0tRQlGMzcgZnVuY3Rpb24ga2V5CitrZXlfZjM4CQkJCWtmMzgJc3RyCUZTCUtFWV9GKDM4KQktCS0tLS1FCUYzOCBmdW5jdGlvbiBrZXkKK2tleV9mMzkJCQkJa2YzOQlzdHIJRlQJS0VZX0YoMzkpCS0JLS0tLUUJRjM5IGZ1bmN0aW9uIGtleQora2V5X2Y0MAkJCQlrZjQwCXN0cglGVQlLRVlfRig0MCkJLQktLS0tRQlGNDAgZnVuY3Rpb24ga2V5CitrZXlfZjQxCQkJCWtmNDEJc3RyCUZWCUtFWV9GKDQxKQktCS0tLS1FCUY0MSBmdW5jdGlvbiBrZXkKK2tleV9mNDIJCQkJa2Y0MglzdHIJRlcJS0VZX0YoNDIpCS0JLS0tLUUJRjQyIGZ1bmN0aW9uIGtleQora2V5X2Y0MwkJCQlrZjQzCXN0cglGWAlLRVlfRig0MykJLQktLS0tRQlGNDMgZnVuY3Rpb24ga2V5CitrZXlfZjQ0CQkJCWtmNDQJc3RyCUZZCUtFWV9GKDQ0KQktCS0tLS1FCUY0NCBmdW5jdGlvbiBrZXkKK2tleV9mNDUJCQkJa2Y0NQlzdHIJRloJS0VZX0YoNDUpCS0JLS0tLUUJRjQ1IGZ1bmN0aW9uIGtleQora2V5X2Y0NgkJCQlrZjQ2CXN0cglGYQlLRVlfRig0NikJLQktLS0tRQlGNDYgZnVuY3Rpb24ga2V5CitrZXlfZjQ3CQkJCWtmNDcJc3RyCUZiCUtFWV9GKDQ3KQktCS0tLS1FCUY0NyBmdW5jdGlvbiBrZXkKK2tleV9mNDgJCQkJa2Y0OAlzdHIJRmMJS0VZX0YoNDgpCS0JLS0tLUUJRjQ4IGZ1bmN0aW9uIGtleQora2V5X2Y0OQkJCQlrZjQ5CXN0cglGZAlLRVlfRig0OSkJLQktLS0tRQlGNDkgZnVuY3Rpb24ga2V5CitrZXlfZjUwCQkJCWtmNTAJc3RyCUZlCUtFWV9GKDUwKQktCS0tLS1FCUY1MCBmdW5jdGlvbiBrZXkKK2tleV9mNTEJCQkJa2Y1MQlzdHIJRmYJS0VZX0YoNTEpCS0JLS0tLUUJRjUxIGZ1bmN0aW9uIGtleQora2V5X2Y1MgkJCQlrZjUyCXN0cglGZwlLRVlfRig1MikJLQktLS0tRQlGNTIgZnVuY3Rpb24ga2V5CitrZXlfZjUzCQkJCWtmNTMJc3RyCUZoCUtFWV9GKDUzKQktCS0tLS1FCUY1MyBmdW5jdGlvbiBrZXkKK2tleV9mNTQJCQkJa2Y1NAlzdHIJRmkJS0VZX0YoNTQpCS0JLS0tLUUJRjU0IGZ1bmN0aW9uIGtleQora2V5X2Y1NQkJCQlrZjU1CXN0cglGaglLRVlfRig1NSkJLQktLS0tRQlGNTUgZnVuY3Rpb24ga2V5CitrZXlfZjU2CQkJCWtmNTYJc3RyCUZrCUtFWV9GKDU2KQktCS0tLS1FCUY1NiBmdW5jdGlvbiBrZXkKK2tleV9mNTcJCQkJa2Y1NwlzdHIJRmwJS0VZX0YoNTcpCS0JLS0tLUUJRjU3IGZ1bmN0aW9uIGtleQora2V5X2Y1OAkJCQlrZjU4CXN0cglGbQlLRVlfRig1OCkJLQktLS0tRQlGNTggZnVuY3Rpb24ga2V5CitrZXlfZjU5CQkJCWtmNTkJc3RyCUZuCUtFWV9GKDU5KQktCS0tLS1FCUY1OSBmdW5jdGlvbiBrZXkKK2tleV9mNjAJCQkJa2Y2MAlzdHIJRm8JS0VZX0YoNjApCS0JLS0tLUUJRjYwIGZ1bmN0aW9uIGtleQora2V5X2Y2MQkJCQlrZjYxCXN0cglGcAlLRVlfRig2MSkJLQktLS0tRQlGNjEgZnVuY3Rpb24ga2V5CitrZXlfZjYyCQkJCWtmNjIJc3RyCUZxCUtFWV9GKDYyKQktCS0tLS1FCUY2MiBmdW5jdGlvbiBrZXkKK2tleV9mNjMJCQkJa2Y2MwlzdHIJRnIJS0VZX0YoNjMpCS0JLS0tLUUJRjYzIGZ1bmN0aW9uIGtleQora2V5X2FjdGlvbgkJCWthY3QJc3RyCWtKCS0JCS0JLS0tLUsJc2VudCBieSBhY3Rpb24ga2V5CisKKyMgVGhlIElCTSBkb2NzIHNheSB0aGVzZSBjYXBhYmlsaXRpZXMgYXJlIGZvciB0YWJsZS1kcmF3aW5nLCBhbmQgYXJlCisjIHZhbGlkIG9ubHkgZm9yIGFpeHRlcm0gZGVzY3JpcHRpb25zLgorZW50ZXJfdG9wbGluZV9tb2RlCQl0b3BsCXN0cgl0cAktCQktCS0tLS1LCXN0YXJ0IHRvcC1saW5lIG1vZGUKK2VudGVyX2JvdHRvbV9tb2RlCQlidG1sCXN0cglibQktCQktCS0tLS1LCXN0YXJ0IGJvdHRvbS1saW5lIG1vZGUKK2VudGVyX3J2ZXJ0X21vZGUJCXJ2ZXJ0CXN0cglydgktCQktCS0tLS1LCXN0YXJ0IHJpZ2h0LXZlcnRpY2FsIG1vZGUKK2VudGVyX2x2ZXJ0X21vZGUJCWx2ZXJ0CXN0cglsdgktCQktCS0tLS1LCXN0YXJ0IGxlZnQtdmVydGljYWwgbW9kZQorIworIyBTVnI0IGNhcGFiaWxpdGllcyByZXN1bWUgaGVyZS4gIE5vdGUgdGhhdCBrZXlfZW5kIGlzIGluIHRoZSBJQk0tZXh0ZW5zaW9ucy4KKyMKK2NoYXJfcGFkZGluZwkJCXJtcAlzdHIJclAJLQkJLQktLS0tLQlsaWtlIGlwIGJ1dCB3aGVuIGluIGluc2VydCBtb2RlCithY3NfY2hhcnMJCQlhY3NjCXN0cglhYwktCQktCS0tLS0tCWdyYXBoaWNzIGNoYXJzZXQgcGFpcnMsIGJhc2VkIG9uIHZ0MTAwCitwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgora2V5X2J0YWIJCQlrY2J0CXN0cglrQglLRVlfQlRBQgkwNTQxCS0tLS0tCWJhY2stdGFiIGtleQorZW50ZXJfeG9uX21vZGUJCQlzbXhvbglzdHIJU1gJLQkJLQktLS0tLQl0dXJuIG9uIHhvbi94b2ZmIGhhbmRzaGFraW5nCitleGl0X3hvbl9tb2RlCQkJcm14b24Jc3RyCVJYCS0JCS0JLS0tLS0JdHVybiBvZmYgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK2VudGVyX2FtX21vZGUJCQlzbWFtCXN0cglTQQktCQktCS0tLS0tCXR1cm4gb24gYXV0b21hdGljIG1hcmdpbnMKK2V4aXRfYW1fbW9kZQkJCXJtYW0Jc3RyCVJBCS0JCS0JLS0tLS0JdHVybiBvZmYgYXV0b21hdGljIG1hcmdpbnMKK3hvbl9jaGFyYWN0ZXIJCQl4b25jCXN0cglYTgktCQktCS0tLS0tCVhPTiBjaGFyYWN0ZXIKK3hvZmZfY2hhcmFjdGVyCQkJeG9mZmMJc3RyCVhGCS0JCS0JLS0tLS0JWE9GRiBjaGFyYWN0ZXIKK2VuYV9hY3MJCQkJZW5hY3MJc3RyCWVBCS0JCS0JLS0tLS0JZW5hYmxlIGFsdGVybmF0ZSBjaGFyIHNldAorbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKK2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKK2tleV9iZWcJCQkJa2JlZwlzdHIJQDEJS0VZX0JFRwkJMDU0MgktLS0tLQliZWdpbiBrZXkKK2tleV9jYW5jZWwJCQlrY2FuCXN0cglAMglLRVlfQ0FOQ0VMCTA1NDMJLS0tLS0JY2FuY2VsIGtleQora2V5X2Nsb3NlCQkJa2NsbwlzdHIJQDMJS0VZX0NMT1NFCTA1NDQJLS0tLS0JY2xvc2Uga2V5Cisja2V5X2NvbW1hbmQJCQlrY21kCXN0cglANAlLRVlfQ09NTUFORAkwNTQ1CS0tLS0tCWNvbW1hbmQga2V5CitrZXlfY29weQkJCWtjcHkJc3RyCUA1CUtFWV9DT1BZCTA1NDYJLS0tLS0JY29weSBrZXkKK2tleV9jcmVhdGUJCQlrY3J0CXN0cglANglLRVlfQ1JFQVRFCTA1NDcJLS0tLS0JY3JlYXRlIGtleQorI2tleV9lbmQJCQlrZW5kCXN0cglANwlLRVlfRU5ECQkwNTUwCS0tLS0tCWVuZCBrZXkKK2tleV9lbnRlcgkJCWtlbnQJc3RyCUA4CUtFWV9FTlRFUgkwNTI3CS0tLS0tCWVudGVyL3NlbmQga2V5CitrZXlfZXhpdAkJCWtleHQJc3RyCUA5CUtFWV9FWElUCTA1NTEJLS0tLS0JZXhpdCBrZXkKK2tleV9maW5kCQkJa2ZuZAlzdHIJQDAJS0VZX0ZJTkQJMDU1MgktLS0tLQlmaW5kIGtleQorI2tleV9oZWxwCQkJa2hscAlzdHIJJTEJS0VZX0hFTFAJMDU1MwktLS0tLQloZWxwIGtleQora2V5X21hcmsJCQlrbXJrCXN0cgklMglLRVlfTUFSSwkwNTU0CS0tLS0tCW1hcmsga2V5CitrZXlfbWVzc2FnZQkJCWttc2cJc3RyCSUzCUtFWV9NRVNTQUdFCTA1NTUJLS0tLS0JbWVzc2FnZSBrZXkKK2tleV9tb3ZlCQkJa21vdglzdHIJJTQJS0VZX01PVkUJMDU1NgktLS0tLQltb3ZlIGtleQora2V5X25leHQJCQlrbnh0CXN0cgklNQlLRVlfTkVYVAkwNTU3CS0tLS0tCW5leHQga2V5CitrZXlfb3BlbgkJCWtvcG4Jc3RyCSU2CUtFWV9PUEVOCTA1NjAJLS0tLS0Jb3BlbiBrZXkKK2tleV9vcHRpb25zCQkJa29wdAlzdHIJJTcJS0VZX09QVElPTlMJMDU2MQktLS0tLQlvcHRpb25zIGtleQora2V5X3ByZXZpb3VzCQkJa3BydglzdHIJJTgJS0VZX1BSRVZJT1VTCTA1NjIJLS0tLS0JcHJldmlvdXMga2V5CitrZXlfcHJpbnQJCQlrcHJ0CXN0cgklOQlLRVlfUFJJTlQJMDUzMgktLS0tLQlwcmludCBrZXkKK2tleV9yZWRvCQkJa3JkbwlzdHIJJTAJS0VZX1JFRE8JMDU2MwktLS0tLQlyZWRvIGtleQora2V5X3JlZmVyZW5jZQkJCWtyZWYJc3RyCSYxCUtFWV9SRUZFUkVOQ0UJMDU2NAktLS0tLQlyZWZlcmVuY2Uga2V5CitrZXlfcmVmcmVzaAkJCWtyZnIJc3RyCSYyCUtFWV9SRUZSRVNICTA1NjUJLS0tLS0JcmVmcmVzaCBrZXkKK2tleV9yZXBsYWNlCQkJa3JwbAlzdHIJJjMJS0VZX1JFUExBQ0UJMDU2NgktLS0tLQlyZXBsYWNlIGtleQora2V5X3Jlc3RhcnQJCQlrcnN0CXN0cgkmNAlLRVlfUkVTVEFSVAkwNTY3CS0tLS0tCXJlc3RhcnQga2V5CitrZXlfcmVzdW1lCQkJa3JlcwlzdHIJJjUJS0VZX1JFU1VNRQkwNTcwCS0tLS0tCXJlc3VtZSBrZXkKK2tleV9zYXZlCQkJa3NhdglzdHIJJjYJS0VZX1NBVkUJMDU3MQktLS0tLQlzYXZlIGtleQora2V5X3N1c3BlbmQJCQlrc3BkCXN0cgkmNwlLRVlfU1VTUEVORAkwNjI3CS0tLS0tCXN1c3BlbmQga2V5CitrZXlfdW5kbwkJCWt1bmQJc3RyCSY4CUtFWV9VTkRPCTA2MzAJLS0tLS0JdW5kbyBrZXkKK2tleV9zYmVnCQkJa0JFRwlzdHIJJjkJS0VZX1NCRUcJMDU3MgktLS0tLQlzaGlmdGVkIGJlZ2luIGtleQora2V5X3NjYW5jZWwJCQlrQ0FOCXN0cgkmMAlLRVlfU0NBTkNFTAkwNTczCS0tLS0tCXNoaWZ0ZWQgY2FuY2VsIGtleQora2V5X3Njb21tYW5kCQkJa0NNRAlzdHIJKjEJS0VZX1NDT01NQU5ECTA1NzQJLS0tLS0Jc2hpZnRlZCBjb21tYW5kIGtleQora2V5X3Njb3B5CQkJa0NQWQlzdHIJKjIJS0VZX1NDT1BZCTA1NzUJLS0tLS0Jc2hpZnRlZCBjb3B5IGtleQora2V5X3NjcmVhdGUJCQlrQ1JUCXN0cgkqMwlLRVlfU0NSRUFURQkwNTc2CS0tLS0tCXNoaWZ0ZWQgY3JlYXRlIGtleQora2V5X3NkYwkJCQlrREMJc3RyCSo0CUtFWV9TREMJCTA1NzcJLS0tLS0Jc2hpZnRlZCBkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X3NkbAkJCQlrREwJc3RyCSo1CUtFWV9TREwJCTA2MDAJLS0tLS0Jc2hpZnRlZCBkZWxldGUtbGluZSBrZXkKK2tleV9zZWxlY3QJCQlrc2x0CXN0cgkqNglLRVlfU0VMRUNUCTA2MDEJLS0tLS0Jc2VsZWN0IGtleQora2V5X3NlbmQJCQlrRU5ECXN0cgkqNwlLRVlfU0VORAkwNjAyCS0tLS0tCXNoaWZ0ZWQgZW5kIGtleQora2V5X3Nlb2wJCQlrRU9MCXN0cgkqOAlLRVlfU0VPTAkwNjAzCS0tLS0tCXNoaWZ0ZWQgY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfc2V4aXQJCQlrRVhUCXN0cgkqOQlLRVlfU0VYSVQJMDYwNAktLS0tLQlzaGlmdGVkIGV4aXQga2V5CitrZXlfc2ZpbmQJCQlrRk5ECXN0cgkqMAlLRVlfU0ZJTkQJMDYwNQktLS0tLQlzaGlmdGVkIGZpbmQga2V5CitrZXlfc2hlbHAJCQlrSExQCXN0cgkjMQlLRVlfU0hFTFAJMDYwNgktLS0tLQlzaGlmdGVkIGhlbHAga2V5CitrZXlfc2hvbWUJCQlrSE9NCXN0cgkjMglLRVlfU0hPTUUJMDYwNwktLS0tLQlzaGlmdGVkIGhvbWUga2V5CitrZXlfc2ljCQkJCWtJQwlzdHIJIzMJS0VZX1NJQwkJMDYxMAktLS0tLQlzaGlmdGVkIGluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfc2xlZnQJCQlrTEZUCXN0cgkjNAlLRVlfU0xFRlQJMDYxMQktLS0tLQlzaGlmdGVkIGxlZnQtYXJyb3cga2V5CitrZXlfc21lc3NhZ2UJCQlrTVNHCXN0cgklYQlLRVlfU01FU1NBR0UJMDYxMgktLS0tLQlzaGlmdGVkIG1lc3NhZ2Uga2V5CitrZXlfc21vdmUJCQlrTU9WCXN0cgklYglLRVlfU01PVkUJMDYxMwktLS0tLQlzaGlmdGVkIG1vdmUga2V5CitrZXlfc25leHQJCQlrTlhUCXN0cgklYwlLRVlfU05FWFQJMDYxNAktLS0tLQlzaGlmdGVkIG5leHQga2V5CitrZXlfc29wdGlvbnMJCQlrT1BUCXN0cgklZAlLRVlfU09QVElPTlMJMDYxNQktLS0tLQlzaGlmdGVkIG9wdGlvbnMga2V5CitrZXlfc3ByZXZpb3VzCQkJa1BSVglzdHIJJWUJS0VZX1NQUkVWSU9VUwkwNjE2CS0tLS0tCXNoaWZ0ZWQgcHJldmlvdXMga2V5CitrZXlfc3ByaW50CQkJa1BSVAlzdHIJJWYJS0VZX1NQUklOVAkwNjE3CS0tLS0tCXNoaWZ0ZWQgcHJpbnQga2V5CitrZXlfc3JlZG8JCQlrUkRPCXN0cgklZwlLRVlfU1JFRE8JMDYyMAktLS0tLQlzaGlmdGVkIHJlZG8ga2V5CitrZXlfc3JlcGxhY2UJCQlrUlBMCXN0cgklaAlLRVlfU1JFUExBQ0UJMDYyMQktLS0tLQlzaGlmdGVkIHJlcGxhY2Uga2V5CitrZXlfc3JpZ2h0CQkJa1JJVAlzdHIJJWkJS0VZX1NSSUdIVAkwNjIyCS0tLS0tCXNoaWZ0ZWQgcmlnaHQtYXJyb3cga2V5CitrZXlfc3JzdW1lCQkJa1JFUwlzdHIJJWoJS0VZX1NSU1VNRQkwNjIzCS0tLS0tCXNoaWZ0ZWQgcmVzdW1lIGtleQora2V5X3NzYXZlCQkJa1NBVglzdHIJITEJS0VZX1NTQVZFCTA2MjQJLS0tLS0Jc2hpZnRlZCBzYXZlIGtleQora2V5X3NzdXNwZW5kCQkJa1NQRAlzdHIJITIJS0VZX1NTVVNQRU5ECTA2MjUJLS0tLS0Jc2hpZnRlZCBzdXNwZW5kIGtleQora2V5X3N1bmRvCQkJa1VORAlzdHIJITMJS0VZX1NVTkRPCTA2MjYJLS0tLS0Jc2hpZnRlZCB1bmRvIGtleQorcmVxX2Zvcl9pbnB1dAkJCXJmaQlzdHIJUkYJLQkJLQktLS0tLQlzZW5kIG5leHQgaW5wdXQgY2hhciAoZm9yIHB0eXMpCitjbHJfYm9sCQkJCWVsMQlzdHIJY2IJLQkJLQktLS0tLQlDbGVhciB0byBiZWdpbm5pbmcgb2YgbGluZQorY2xlYXJfbWFyZ2lucwkJCW1nYwlzdHIJTUMJLQkJLQktLS0tLQljbGVhciByaWdodCBhbmQgbGVmdCBzb2Z0IG1hcmdpbnMKK3NldF9sZWZ0X21hcmdpbgkJCXNtZ2wJc3RyCU1MCS0JCS0JLS0tLS0Jc2V0IGxlZnQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4uCSBTZWUgc21nbC4gKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfcmlnaHRfbWFyZ2luCQlzbWdyCXN0cglNUgktCQktCS0tLS0tCXNldCByaWdodCBzb2Z0IG1hcmdpbiBhdCBjdXJyZW50IGNvbHVtbgorbGFiZWxfZm9ybWF0CQkJZmxuCXN0cglMZgktCQktCS0tLS0tCWxhYmVsIGZvcm1hdAorc2V0X2Nsb2NrCQkJc2NsawlzdHIJU0MJLQkJLQktLS0tLQlzZXQgY2xvY2ssICMxIGhycyAjMiBtaW5zICMzIHNlY3MKK2Rpc3BsYXlfY2xvY2sJCQlkY2xrCXN0cglESwktCQktCS0tLS0tCWRpc3BsYXkgY2xvY2sKK3JlbW92ZV9jbG9jawkJCXJtY2xrCXN0cglSQwktCQktCS0tLS0tCXJlbW92ZSBjbG9jaworY3JlYXRlX3dpbmRvdwkJCWN3aW4Jc3RyCUNXCS0JCS0JLS0tLS0JZGVmaW5lIGEgd2luZG93ICMxIGZyb20gIzIsIzMgdG8gIzQsIzUKK2dvdG9fd2luZG93CQkJd2luZ28Jc3RyCVdHCS0JCS0JLS0tLS0JZ28gdG8gd2luZG93ICMxCitoYW5ndXAJCQkJaHVwCXN0cglIVQktCQktCS0tLS0tCWhhbmctdXAgcGhvbmUKK2RpYWxfcGhvbmUJCQlkaWFsCXN0cglESQktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxCitxdWlja19kaWFsCQkJcWRpYWwJc3RyCVFECS0JCS0JLS0tLS0JZGlhbCBudW1iZXIgIzEgd2l0aG91dCBjaGVja2luZwordG9uZQkJCQl0b25lCXN0cglUTwktCQktCS0tLS0tCXNlbGVjdCB0b3VjaCB0b25lIGRpYWxpbmcKK3B1bHNlCQkJCXB1bHNlCXN0cglQVQktCQktCS0tLS0tCXNlbGVjdCBwdWxzZSBkaWFsaW5nCitmbGFzaF9ob29rCQkJaG9vawlzdHIJZmgJLQkJLQktLS0tLQlmbGFzaCBzd2l0Y2ggaG9vaworZml4ZWRfcGF1c2UJCQlwYXVzZQlzdHIJUEEJLQkJLQktLS0tLQlwYXVzZSBmb3IgMi0zIHNlY29uZHMKK3dhaXRfdG9uZQkJCXdhaXQJc3RyCVdBCS0JCS0JLS0tLS0Jd2FpdCBmb3IgZGlhbC10b25lCit1c2VyMAkJCQl1MAlzdHIJdTAJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMAordXNlcjEJCQkJdTEJc3RyCXUxCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzEKK3VzZXIyCQkJCXUyCXN0cgl1MgktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMyCit1c2VyMwkJCQl1MwlzdHIJdTMJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMwordXNlcjQJCQkJdTQJc3RyCXU0CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzQKK3VzZXI1CQkJCXU1CXN0cgl1NQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM1Cit1c2VyNgkJCQl1NglzdHIJdTYJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNgordXNlcjcJCQkJdTcJc3RyCXU3CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzcKK3VzZXI4CQkJCXU4CXN0cgl1OAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM4Cit1c2VyOQkJCQl1OQlzdHIJdTkJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjOQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IGNvbG9yCisjCitvcmlnX3BhaXIJCQlvcAlzdHIJb3AJLQkJLQktLS0tLQlTZXQgZGVmYXVsdCBwYWlyIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQorb3JpZ19jb2xvcnMJCQlvYwlzdHIJb2MJLQkJLQktLS0tLQlTZXQgYWxsIGNvbG9yIHBhaXJzIHRvIHRoZSBvcmlnaW5hbCBvbmVzCitpbml0aWFsaXplX2NvbG9yCQlpbml0YwlzdHIJSWMJLQkJLQktLS0tLQlpbml0aWFsaXplIGNvbG9yICMxIHRvICgjMiwjMywjNCkKK2luaXRpYWxpemVfcGFpcgkJCWluaXRwCXN0cglJcAktCQktCS0tLS0tCUluaXRpYWxpemUgY29sb3IgcGFpciAjMSB0byBmZz0oIzIsIzMsIzQpLCBiZz0oIzUsIzYsIzcpCitzZXRfY29sb3JfcGFpcgkJCXNjcAlzdHIJc3AJLQkJLQktLS0tLQlTZXQgY3VycmVudCBjb2xvciBwYWlyIHRvICMxCitzZXRfZm9yZWdyb3VuZAkJCXNldGYJc3RyCVNmCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgIzEKK3NldF9iYWNrZ3JvdW5kCQkJc2V0YglzdHIJU2IJLQkJLQktLS0tLQlTZXQgYmFja2dyb3VuZCBjb2xvciAjMQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IHByaW50ZXJzCisjCitjaGFuZ2VfY2hhcl9waXRjaAkJY3BpCXN0cglaQQktCQktCS0tLS0tCUNoYW5nZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX2xpbmVfcGl0Y2gJCWxwaQlzdHIJWkIJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGxpbmVzIHBlciBpbmNoIHRvICMxCitjaGFuZ2VfcmVzX2hvcnoJCQljaHIJc3RyCVpDCS0JCS0JLS0tLS0JQ2hhbmdlIGhvcml6b250YWwgcmVzb2x1dGlvbiB0byAjMQorY2hhbmdlX3Jlc192ZXJ0CQkJY3ZyCXN0cglaRAktCQktCS0tLS0tCUNoYW5nZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIHRvICMxCitkZWZpbmVfY2hhcgkJCWRlZmMJc3RyCVpFCS0JCS0JLS0tLS0JRGVmaW5lIGEgY2hhcmFjdGVyICMxLCAjMiBkb3RzIHdpZGUsIGRlc2NlbmRlciAjMworZW50ZXJfZG91Ymxld2lkZV9tb2RlCQlzd2lkbQlzdHIJWkYJLQkJLQktLS0tLQlFbnRlciBkb3VibGUtd2lkZSBtb2RlCitlbnRlcl9kcmFmdF9xdWFsaXR5CQlzZHJmcQlzdHIJWkcJLQkJLQktLS0tLQlFbnRlciBkcmFmdC1xdWFsaXR5IG1vZGUKK2VudGVyX2l0YWxpY3NfbW9kZQkJc2l0bQlzdHIJWkgJLQkJLQktLS0tLQlFbnRlciBpdGFsaWMgbW9kZQorZW50ZXJfbGVmdHdhcmRfbW9kZQkJc2xtCXN0cglaSQktCQktCS0tLS0tCVN0YXJ0IGxlZnR3YXJkIGNhcnJpYWdlIG1vdGlvbgorZW50ZXJfbWljcm9fbW9kZQkJc21pY20Jc3RyCVpKCS0JCS0JLS0tLS0JU3RhcnQgbWljcm8tbW90aW9uIG1vZGUKK2VudGVyX25lYXJfbGV0dGVyX3F1YWxpdHkJc25scQlzdHIJWksJLQkJLQktLS0tLQlFbnRlciBOTFEgbW9kZQorZW50ZXJfbm9ybWFsX3F1YWxpdHkJCXNucm1xCXN0cglaTAktCQktCS0tLS0tCUVudGVyIG5vcm1hbC1xdWFsaXR5IG1vZGUKK2VudGVyX3NoYWRvd19tb2RlCQlzc2htCXN0cglaTQktCQktCS0tLS0tCUVudGVyIHNoYWRvdy1wcmludCBtb2RlCitlbnRlcl9zdWJzY3JpcHRfbW9kZQkJc3N1Ym0Jc3RyCVpOCS0JCS0JLS0tLS0JRW50ZXIgc3Vic2NyaXB0IG1vZGUKK2VudGVyX3N1cGVyc2NyaXB0X21vZGUJCXNzdXBtCXN0cglaTwktCQktCS0tLS0tCUVudGVyIHN1cGVyc2NyaXB0IG1vZGUKK2VudGVyX3Vwd2FyZF9tb2RlCQlzdW0Jc3RyCVpQCS0JCS0JLS0tLS0JU3RhcnQgdXB3YXJkIGNhcnJpYWdlIG1vdGlvbgorZXhpdF9kb3VibGV3aWRlX21vZGUJCXJ3aWRtCXN0cglaUQktCQktCS0tLS0tCUVuZCBkb3VibGUtd2lkZSBtb2RlCitleGl0X2l0YWxpY3NfbW9kZQkJcml0bQlzdHIJWlIJLQkJLQktLS0tLQlFbmQgaXRhbGljIG1vZGUKK2V4aXRfbGVmdHdhcmRfbW9kZQkJcmxtCXN0cglaUwktCQktCS0tLS0tCUVuZCBsZWZ0LW1vdGlvbiBtb2RlCitleGl0X21pY3JvX21vZGUJCQlybWljbQlzdHIJWlQJLQkJLQktLS0tLQlFbmQgbWljcm8tbW90aW9uIG1vZGUKK2V4aXRfc2hhZG93X21vZGUJCXJzaG0Jc3RyCVpVCS0JCS0JLS0tLS0JRW5kIHNoYWRvdy1wcmludCBtb2RlCitleGl0X3N1YnNjcmlwdF9tb2RlCQlyc3VibQlzdHIJWlYJLQkJLQktLS0tLQlFbmQgc3Vic2NyaXB0IG1vZGUKK2V4aXRfc3VwZXJzY3JpcHRfbW9kZQkJcnN1cG0Jc3RyCVpXCS0JCS0JLS0tLS0JRW5kIHN1cGVyc2NyaXB0IG1vZGUKK2V4aXRfdXB3YXJkX21vZGUJCXJ1bQlzdHIJWlgJLQkJLQktLS0tLQlFbmQgcmV2ZXJzZSBjaGFyYWN0ZXIgbW90aW9uCittaWNyb19jb2x1bW5fYWRkcmVzcwkJbWhwYQlzdHIJWlkJLQkJLQktLS0tLQlMaWtlIGNvbHVtbl9hZGRyZXNzIGluIG1pY3JvIG1vZGUKK21pY3JvX2Rvd24JCQltY3VkMQlzdHIJWloJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9kb3duIGluIG1pY3JvIG1vZGUKK21pY3JvX2xlZnQJCQltY3ViMQlzdHIJWmEJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9sZWZ0IGluIG1pY3JvIG1vZGUKK21pY3JvX3JpZ2h0CQkJbWN1ZjEJc3RyCVpiCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfcmlnaHQgaW4gbWljcm8gbW9kZQorbWljcm9fcm93X2FkZHJlc3MJCW12cGEJc3RyCVpjCS0JCS0JLS0tLS0JTGlrZSByb3dfYWRkcmVzcyAjMSBpbiBtaWNybyBtb2RlCittaWNyb191cAkJCW1jdXUxCXN0cglaZAktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3VwIGluIG1pY3JvIG1vZGUKK29yZGVyX29mX3BpbnMJCQlwb3JkZXIJc3RyCVplCS0JCS0JLS0tLS0JTWF0Y2ggc29mdHdhcmUgYml0cyB0byBwcmludC1oZWFkIHBpbnMKK3Bhcm1fZG93bl9taWNybwkJCW1jdWQJc3RyCVpmCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2Rvd25fY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fbGVmdF9taWNybwkJCW1jdWIJc3RyCVpnCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2xlZnRfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fcmlnaHRfbWljcm8JCW1jdWYJc3RyCVpoCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3JpZ2h0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3VwX21pY3JvCQkJbWN1dQlzdHIJWmkJLQkJLQktLS0tLQlMaWtlIHBhcm1fdXBfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3NlbGVjdF9jaGFyX3NldAkJCXNjcwlzdHIJWmoJLQkJLQktLS0tLQlTZWxlY3QgY2hhcmFjdGVyIHNldCwgIzEKK3NldF9ib3R0b21fbWFyZ2luCQlzbWdiCXN0cglaawktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X2JvdHRvbV9tYXJnaW5fcGFybQkJc21nYnAJc3RyCVpsCS0JCS0JLS0tLS0JU2V0IGJvdHRvbSBtYXJnaW4gYXQgbGluZSAjMSBvciAoaWYgc21ndHAgaXMgbm90IGdpdmVuKSAjMiBsaW5lcyBmcm9tIGJvdHRvbQorc2V0X2xlZnRfbWFyZ2luX3Bhcm0JCXNtZ2xwCXN0cglabQktCQktCS0tLS0tCVNldCBsZWZ0IChyaWdodCkgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3JpZ2h0X21hcmdpbl9wYXJtCQlzbWdycAlzdHIJWm4JLQkJLQktLS0tLQlTZXQgcmlnaHQgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3RvcF9tYXJnaW4JCQlzbWd0CXN0cglabwktCQktCS0tLS0tCVNldCB0b3AgbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X3RvcF9tYXJnaW5fcGFybQkJc21ndHAJc3RyCVpwCS0JCS0JLS0tLS0JU2V0IHRvcCAoYm90dG9tKSBtYXJnaW4gYXQgcm93ICMxCitzdGFydF9iaXRfaW1hZ2UJCQlzYmltCXN0cglacQktCQktCS0tLS0tCVN0YXJ0IHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RhcnRfY2hhcl9zZXRfZGVmCQlzY3NkCXN0cglacgktCQktCS0tLS0tCVN0YXJ0IGNoYXJhY3RlciBzZXQgZGVmaW5pdGlvbiAjMSwgd2l0aCAjMiBjaGFyYWN0ZXJzIGluIHRoZSBzZXQKK3N0b3BfYml0X2ltYWdlCQkJcmJpbQlzdHIJWnMJLQkJLQktLS0tLQlTdG9wIHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RvcF9jaGFyX3NldF9kZWYJCXJjc2QJc3RyCVp0CS0JCS0JLS0tLS0JRW5kIGRlZmluaXRpb24gb2YgY2hhcmFjdGVyIHNldCAjMQorc3Vic2NyaXB0X2NoYXJhY3RlcnMJCXN1YmNzCXN0cgladQktCQktCS0tLS0tCUxpc3Qgb2Ygc3Vic2NyaXB0YWJsZSBjaGFyYWN0ZXJzCitzdXBlcnNjcmlwdF9jaGFyYWN0ZXJzCQlzdXBjcwlzdHIJWnYJLQkJLQktLS0tLQlMaXN0IG9mIHN1cGVyc2NyaXB0YWJsZSBjaGFyYWN0ZXJzCit0aGVzZV9jYXVzZV9jcgkJCWRvY3IJc3RyCVp3CS0JCS0JLS0tLS0JUHJpbnRpbmcgYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgY2F1c2VzIENSCit6ZXJvX21vdGlvbgkJCXplcm9tCXN0cglaeAktCQktCS0tLS0tCU5vIG1vdGlvbiBmb3Igc3Vic2VxdWVudCBjaGFyYWN0ZXIKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlIGZvbGxvd2luZyBzdHJpbmcgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCB3ZXJlIG9yaWdpbmFsbHkgbm90IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcxOC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2NoYXJfc2V0X25hbWVzCQkJY3NubQlzdHIJWnkJLQkJLQktLS0tLQlQcm9kdWNlICMxJ3RoIGl0ZW0gZnJvbSBsaXN0IG9mIGNoYXJhY3RlciBzZXQgbmFtZXMKK2tleV9tb3VzZQkJCWttb3VzCXN0cglLbQlLRVlfTU9VU0UJMDYzMQktLS0tLQlNb3VzZSBldmVudCBoYXMgb2NjdXJyZWQKK21vdXNlX2luZm8JCQltaW5mbwlzdHIJTWkJLQkJLQktLS0tLQlNb3VzZSBzdGF0dXMgaW5mb3JtYXRpb24KK3JlcV9tb3VzZV9wb3MJCQlyZXFtcAlzdHIJUlEJLQkJLQktLS0tLQlSZXF1ZXN0IG1vdXNlIHBvc2l0aW9uCitnZXRfbW91c2UJCQlnZXRtCXN0cglHbQktCQktCS0tLS0tCUN1cnNlcyBzaG91bGQgZ2V0IGJ1dHRvbiBldmVudHMsIHBhcmFtZXRlciAjMSBub3QgZG9jdW1lbnRlZC4KK3NldF9hX2ZvcmVncm91bmQJCXNldGFmCXN0cglBRgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorc2V0X2FfYmFja2dyb3VuZAkJc2V0YWIJc3RyCUFCCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitwa2V5X3BsYWIJCQlwZnhsCXN0cgl4bAktCQktCS0tLS0tCVByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHR5cGUgc3RyaW5nICMyIGFuZCBzaG93IHN0cmluZyAjMworZGV2aWNlX3R5cGUJCQlkZXZ0CXN0cglkdgktCQktCS0tLS0tCUluZGljYXRlIGxhbmd1YWdlL2NvZGVzZXQgc3VwcG9ydAorY29kZV9zZXRfaW5pdAkJCWNzaW4Jc3RyCWNpCS0JCS0JLS0tLS0JSW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgY29kZXNldHMKK3NldDBfZGVzX3NlcQkJCXMwZHMJc3RyCXMwCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAwIChFVUMgc2V0IDAsIEFTQ0lJKQorc2V0MV9kZXNfc2VxCQkJczFkcwlzdHIJczEJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDEKK3NldDJfZGVzX3NlcQkJCXMyZHMJc3RyCXMyCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAyCitzZXQzX2Rlc19zZXEJCQlzM2RzCXN0cglzMwktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMworc2V0X2xyX21hcmdpbgkJCXNtZ2xyCXN0cglNTAktCQktCS0tLS0tCVNldCBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMgdG8gIzEsICMyLiAgKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfdGJfbWFyZ2luCQkJc21ndGIJc3RyCU1UCS0JCS0JLS0tLS0JU2V0cyBib3RoIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgdG8gIzEsICMyCitiaXRfaW1hZ2VfcmVwZWF0CQliaXJlcAlzdHIJWHkJLQkJLQktLS0tLQlSZXBlYXQgYml0IGltYWdlIGNlbGwgIzEgIzIgdGltZXMKK2JpdF9pbWFnZV9uZXdsaW5lCQliaW5lbAlzdHIJWnoJLQkJLQktLS0tLQlNb3ZlIHRvIG5leHQgcm93IG9mIHRoZSBiaXQgaW1hZ2UKK2JpdF9pbWFnZV9jYXJyaWFnZV9yZXR1cm4JYmljcglzdHIJWXYJLQkJLQktLS0tLQlNb3ZlIHRvIGJlZ2lubmluZyBvZiBzYW1lIHJvdworY29sb3JfbmFtZXMJCQljb2xvcm5tCXN0cglZdwktCQktCS0tLS0tCUdpdmUgbmFtZSBmb3IgY29sb3IgIzEKK2RlZmluZV9iaXRfaW1hZ2VfcmVnaW9uCQlkZWZiaQlzdHIJWXgJLQkJLQktLS0tLQlEZWZpbmUgcmVjdGFuZ3VhbGFyIGJpdCBpbWFnZSByZWdpb24KK2VuZF9iaXRfaW1hZ2VfcmVnaW9uCQllbmRiaQlzdHIJWXkJLQkJLQktLS0tLQlFbmQgYSBiaXQtaW1hZ2UgcmVnaW9uCitzZXRfY29sb3JfYmFuZAkJc2V0Y29sb3IJc3RyCVl6CS0JCS0JLS0tLS0JQ2hhbmdlIHRvIHJpYmJvbiBjb2xvciAjMQorc2V0X3BhZ2VfbGVuZ3RoCQkJc2xpbmVzCXN0cglZWgktCQktCS0tLS0tCVNldCBwYWdlIGxlbmd0aCB0byAjMSBsaW5lcworIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyBmb3IgZGlyZWN0IFBDLWNsb25lIHN1cHBvcnQKKyMKK2Rpc3BsYXlfcGNfY2hhcgkJCWRpc3BjCXN0cglTMQktCQktCS0tLS0tCURpc3BsYXkgUEMgY2hhcmFjdGVyICMxCitlbnRlcl9wY19jaGFyc2V0X21vZGUJCXNtcGNoCXN0cglTMgktCQktCS0tLS0tCUVudGVyIFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2V4aXRfcGNfY2hhcnNldF9tb2RlCQlybXBjaAlzdHIJUzMJLQkJLQktLS0tLQlFeGl0IFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2VudGVyX3NjYW5jb2RlX21vZGUJCXNtc2MJc3RyCVM0CS0JCS0JLS0tLS0JRW50ZXIgUEMgc2NhbmNvZGUgbW9kZQorZXhpdF9zY2FuY29kZV9tb2RlCQlybXNjCXN0cglTNQktCQktCS0tLS0tCUV4aXQgUEMgc2NhbmNvZGUgbW9kZQorcGNfdGVybV9vcHRpb25zCQkJcGN0cm0Jc3RyCVM2CS0JCS0JLS0tLS0JUEMgdGVybWluYWwgb3B0aW9ucworc2NhbmNvZGVfZXNjYXBlCQkJc2Nlc2MJc3RyCVM3CS0JCS0JLS0tLS0JRXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KK2FsdF9zY2FuY29kZV9lc2MJCXNjZXNhCXN0cglTOAktCQktCS0tLS0tCUFsdGVybmF0ZSBlc2NhcGUgZm9yIHNjYW5jb2RlIGVtdWxhdGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyUuaW4gLjhpCisjJVRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGFkZGVkIHRoZXNlLiAgVGhleSBhcmUgc29tZSBwb3N0LTQuMSAKKyMldmVyc2lvbnMgb2YgU3lzdGVtIFYgY3Vyc2VzLCBlLmcuLCBTb2xhcmlzIDIuNSBhbmQgSVJJWCA2LnguCisjJVRoZSBcZkJuY3Vyc2VzXGZSIHRlcm1jYXAgbmFtZXMgZm9yIHRoZW0gYXJlIGludmVudGVkOyBhY2NvcmRpbmcgdG8gdGhlCisjJVhTSSBDdXJzZXMgc3RhbmRhcmQsIHRoZXkgaGF2ZSBubyB0ZXJtY2FwIG5hbWVzLiAgSWYgeW91ciBjb21waWxlZCB0ZXJtaW5mbworIyVlbnRyaWVzIHVzZSB0aGVzZSwgdGhleSBtYXkgbm90IGJlIGJpbmFyeS1jb21wYXRpYmxlIHdpdGggU3lzdGVtIFYgdGVybWluZm8KKyMlZW50cmllcyBhZnRlciBTVnI0LjE7IGJld2FyZSEKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUJZWhobG0Jc3RyCVhoCS0JCS0JLS0tLS0JRW50ZXIgaG9yaXpvbnRhbCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbGVmdF9obF9tb2RlCQllbGhsbQlzdHIJWGwJLQkJLQktLS0tLQlFbnRlciBsZWZ0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl9sb3dfaGxfbW9kZQkJZWxvaGxtCXN0cglYbwktCQktCS0tLS0tCUVudGVyIGxvdyBoaWdobGlnaHQgbW9kZQorZW50ZXJfcmlnaHRfaGxfbW9kZQkJZXJobG0Jc3RyCVhyCS0JCS0JLS0tLS0JRW50ZXIgcmlnaHQgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3RvcF9obF9tb2RlCQlldGhsbQlzdHIJWHQJLQkJLQktLS0tLQlFbnRlciB0b3AgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3ZlcnRpY2FsX2hsX21vZGUJCWV2aGxtCXN0cglYdgktCQktCS0tLS0tCUVudGVyIHZlcnRpY2FsIGhpZ2hsaWdodCBtb2RlCitzZXRfYV9hdHRyaWJ1dGVzCQlzZ3IxCXN0cglzQQktCQktCS0tLS0tCURlZmluZSBzZWNvbmQgc2V0IG9mIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzYKK3NldF9wZ2xlbl9pbmNoCQkJc2xlbmd0aAlzdHIJc0wJLQkJLQktLS0tLQlZSSBTZXQgcGFnZSBsZW5ndGggdG8gIzEgaHVuZHJlZHRoIG9mIGFuIGluY2gKKyMlLlRFCisjJS5hZAorIworIyBUaGUgbWFnaWMgdG9rZW4gYmVsb3cgdGVsbHMgdGhlIHRpYyBjb21waWxlci1nZW5lcmF0b3IgY29kZSB0aGF0IGFsbCB0aGUgY2FwcworIyBwYXN0IGl0IHNob3VsZCBiZSBpZ25vcmVkIChub3Qgd3JpdHRlbiBvdXQpIHdoZW4gZHVtcGluZyB0ZXJtaW5mbyBvYmplY3RzLiBJdAorIyBhbHNvIHRlbGxzIHRoZSBtYW4gcGFnZSB0YWJsZSBnZW5lcmF0b3Igbm90IHRvIHBhc3MgdGhyb3VnaCBmb2xsb3dpbmcgbGluZXMKKyMgVGhpcyBtZWFucyB3ZSBjYW4gaGF2ZSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgYW5kIHBzZXVkby1jYXBhYmlsaXRpZXMgdGhhdCBhcmUKKyMgcmVjb2duaXplZCBmb3IgdGVybWNhcCBvciB0ZXJtaW5mbyBjb21waWxhdGlvbiwgYnV0IG5vdCBvdXRwdXQuCisjCisjICUlLVNUT1AtSEVSRS0lJQorIworIyBEb24ndCBtb3ZlIHRoaXMgY2FzdWFsbHkhICBJbiBmYWN0LCBkb24ndCBtb3ZlIGl0IGF0IGFsbCB1bmxlc3MgeW91J3JlCisjIGVpdGhlciBkb2luZyBpdCB0byBhZGQgU3lzdGVtIFYgb3IgWFBHNCBleHRlbnNpb25zLCBvciBoYXZlIGRlY2lkZWQgeW91CisjIGRvbid0IGNhcmUgYWJvdXQgU1ZyNCBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1DQVAgRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGUgY2FwYWJpbGl0aWVzIGJlbG93IGFyZSBlaXRoZXIgb2Jzb2xldGUgb3IgZXh0ZW5zaW9ucyBvbiBjZXJ0YWluIHN5c3RlbXMuCisjIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IFNWUjQgdGVybWluZm8uICBTb21lIGFyZSB1c2VkIGJ5IGNhcHRvaW5mbyB0byB0cmFuc2xhdGUKKyMgdGVybWNhcCBzb3VyY2VzOyB0aGUgcmVzdCBhcmUgbGlzdGVkIGZvciBjb21wbGV0ZW5lc3MsIGFuZCBpbiBjYXNlIHNvbWVib2R5CisjIGNhcmVzIGFib3V0IHRoZW0gZW5vdWdoIHRvIGhhY2sgaW4gY29kZSB0aGF0IHdpbGwgdHJhbnNsYXRlIHRoZW0gaW50bworIyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMuCisjCisjIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaXN0IGlzIGZyb20gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlCisjIChjb21wLnNvdXJjZXMudW5peCwgdm9sdW1lIDI2KTsgdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCB0ZXJtaW5mbyBuYW1lcyAoYXMKKyMgd2VsbCBhcyB0aGUgdGVybWNhcCBjb2RlcykgbWF0Y2ggaGlzIGxpc3QuCisjCisjIFRoaXMgZ3JvdXAgb2YgY29kZXMgaXMgbm90IG1hcmtlZCBvYnNvbGV0ZSBpbiA0LjRCU0QsIGJ1dCBoYXZlIG5vIGRpcmVjdAorIyB0ZXJtaW5mbyBlcXVpdmFsZW50cy4gIFRoZSBycyBjYXBhYmlsaXR5IGlzIHNwZWNpYWxseSB0cmFuc2xhdGVkIHRvIHRlcm1pbmZvCisjIHIyLCBhbmQgdmljZSB2ZXJzYSwgaWYgYW4gZW50cnkgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIHIyLiAgU2ltaWxhcmx5LAorIyBpMiBpcyB0cmFuc2xhdGVkIHRvIHIzIGlmIHRoZXJlIGlzIG5vIHIzIChiZWNhdXNlIFNWIHRlcm1pbmZvIG1hcHMgaXMgdG8gaTIpLgorIyBUaGUgdWcgY2FwYWJpbGl0eSBpcyB0aHJvd24gYXdheSwgYnV0IGFzc3VtZWQgdG8gYmUgd2hhdGV2ZXIgc2cgaXMgaWYgdGhlCisjIGxhdHRlciBpcyBub256ZXJvIGFuZCB3ZSdyZSBkdW1waW5nIGluIHRlcm1jYXAgZm9ybWF0LgorIwordGVybWNhcF9pbml0MgkJCU9UaTIJc3RyCWkyCS0JCS0JWUItLS0Jc2Vjb25kYXJ5IGluaXRpYWxpemF0aW9uIHN0cmluZwordGVybWNhcF9yZXNldAkJCU9UcnMJc3RyCXJzCS0JCS0JWUItRy0JdGVybWluYWwgcmVzZXQgc3RyaW5nCittYWdpY19jb29raWVfZ2xpdGNoX3VsCQlPVHVnCW51bQl1ZwktCQktCVlCQ0dFCW51bWJlciBvZiBibGFua3MgbGVmdCBieSB1bAorIworIyBPYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4gIFNvbWUgYXJlIHVzZWQgZm9yIHRlcm1jYXAgdHJhbnNsYXRpb24uICBUaGUKKyMgY29kZSB1c2VzIHRoZSAnT1QnIHByZWZpeCB3ZSBwdXQgb24gb2Jzb2xldGUgY2FwYWJpbGl0aWVzIHRvIHN1cHByZXNzCisjIHByaW50aW5nIHRoZW0gaW4gdGVybWluZm8gc291cmNlIGR1bXBzIG9mIGNvbXBpbGVkIGVudHJpZXMuCisjCitiYWNrc3BhY2VzX3dpdGhfYnMJCU9UYnMJYm9vbAlicwktCQktCVlCQ0dFCXVzZXMgXkggdG8gbW92ZSBsZWZ0CitjcnRfbm9fc2Nyb2xsaW5nCQlPVG5zCWJvb2wJbnMJLQkJLQlZQkNHLQljcnQgY2Fubm90IHNjcm9sbAorbm9fY29ycmVjdGx5X3dvcmtpbmdfY3IJCU9UbmMJYm9vbAluYwktCQktCVlCQ0ctCW5vIHdheSB0byBnbyB0byBzdGFydCBvZiBsaW5lCitjYXJyaWFnZV9yZXR1cm5fZGVsYXkJCU9UZEMJbnVtCWRDCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgQ1IKK25ld19saW5lX2RlbGF5CQkJT1RkTgludW0JZE4JLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBMRgorbGluZWZlZWRfaWZfbm90X2xmCQlPVG5sCXN0cglubAktCQktCVlCQ0dFCXVzZSB0byBtb3ZlIGRvd24KK2JhY2tzcGFjZV9pZl9ub3RfYnMJCU9UYmMJc3RyCWJjCS0JCS0JWUJDR0UJbW92ZSBsZWZ0LCBpZiBub3QgXkgKKyMKKyMgR05VIHRlcm1jYXAgbGlicmFyeSBleHRlbnNpb25zLiAgVGhlIEdOVSB0ZXJtY2FwIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyBFbWFjcyBubyBsb25nZXIgdXNlcyB0aGVzZSwgYnV0IE1UIHNob3dlZCB1cCBpbiBwcmUtOS4wIHZlcnNpb25zIG9mIHRoZQorIyBCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbyBNVCBpcyByZXNvbHZlZCBieSB0eXBlCisjIGluZm87IE1UIGlzIGNvbnZlcnRlZCB0byBrbS4KKyMKK2dudV9oYXNfbWV0YV9rZXkJCU9UTVQJYm9vbAlNVAktCQktCS0tLS1FCWhhcyBtZXRhIGtleQorIyBnbnVfdGFiX3dpZHRoCQkJT1R0dwludW0JdHcJLQkJLQktLS0tRQl0YWIgd2lkdGggaW4gc3BhY2VzCisjCisjIEdOVSB0ZXJtY2FwICpkb2VzKiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZXh0ZW5kZWQgY2FwYWJpbGl0eSwgIE9ubHkgdGhlCisjIG5vdy1vYnNvbGV0ZSBBbm4gQXJib3IgdGVybWluYWxzIHVzZWQgaXQuCisjCisjIGdudV9jaGFuZ2Vfc2Nyb2xsX3JlZ2lvbglPVGNTCXN0cgljUwktCQktCS0tLUdFCWFsdGVybmF0ZSBzZXQgc2Nyb2xsaW5nIHJlZ2lvbiAKKyMKKyMgVGhlIGZvbGxvd2luZyBjb21tZW50cyBkZXNjcmliZSBjYXBuYW1lcyBzbyBhbmNpZW50IHRoYXQgSSBiZWxpZXZlIG5vCisjIHNvZnR3YXJlIHVzZXMgdGhlbSBhbnkgbG9uZ2VyLiAgU29tZSBvZiB0aGVzZSBoYXZlIHRvIGdvIGJlY2F1c2UgdGhleQorIyBjbGFzaCB3aXRoIHRlcm1pbmZvIG5hbWVzIGluIHdheXMgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlc2UgbXl0aW5mbyBjb2RlcyBhcmUgbm90IHVzZWQgaW4gdGhlIDQuNEJTRCBjdXJzZXMgY29kZS4gIFRoZXkgYXJlCisjIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgNC40QlNEIG1hbnVhbCBwYWdlcy4KKyMKKyMgVGhlcmUgaXMgb25lIGNvbmZsaWN0IHdpdGggdGVybWluZm87IG1hIGlzIGluIGJvdGguICBUaGlzIGNvbmZsaWN0IGlzCisjIHJlc29sdmVkIGJ5IHR5cGUgaW5mb3JtYXRpb24uCisjCisjIFRoZSBga28nIGNhcGFiaWxpdHkgaXMgdHJhbnNsYXRlZCBieSBzcGVjaWFsIGNvZGUuICBJdCBzaG91bGQgY29udGFpbiBhCisjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhcGFiaWxpdGllcyBmb3Igd2hpY2ggdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcga2V5cy4KKyMgVGhlIGBrbicgY29kZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyMKKyMgVGhlIGBtYScgY2FwYWJpbGl0eSBzZWVtcyB0byBoYXZlIGJlZW4gZGVzaWduZWQgdG8gbWFwIGJldHdlZW4gdGhlIHJvZ3VlKDIpCisjIG1vdGlvbiBrZXlzIChpbmNsdWRpbmcgamtobCkgYW5kIGNoYXJhY3RlcnMgZW1pdHRlZCBieSBhcnJvdyBrZXlzIG9uIHNvbWUKKyMgcHJpbWl0aXZlIHByZS1BTlNJIHRlcm1pbmFscy4gIEl0J3Mgc28gb2Jzb2xldGUgaXQncyBmb3NzaWxpemVkLi4uCisjCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBtZW1vcnlfbG9ja19hYm92ZSBhbmQgbWVtb3J5X3VubG9jazoKKyMgIllvdSBjYW4gJ2ZyZWV6ZScgZGF0YSBvbiB0aGUgc2NyZWVuIGJ5IHR1cm5pbmcgb24gTWVtb3J5IExvY2sgaW4gYSBsaW5lIG9mCisjIHRleHQuICBBbGwgbGluZXMgYWJvdmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgbGluZSBiZWNvbWUgbG9ja2VkIGluIHBsYWNlIG9uCisjIHRoZSBzY3JlZW4uICBUaGVuIGVudGVyIGRhdGEgbm9ybWFsbHkuICBXaGVuIHRoZSBzY3JlZW4gZmlsbHMgdXAsIGFueQorIyBmdXJ0aGVyIGRhdGEgZW50ZXJlZCBmb3JjZXMgdGhlIGZpcnN0IGxpbmUgb2YgdW5mcm96ZW4gbGluZSB0ZXh0IHRvIHNjcm9sbAorIyB1bmRlciB0aGUgZnJvemVuIGRhdGEuICBMaW5lcyBzY3JvbGxlZCBvZmYgdGhlIHNjcmVlbiBhcmUgaW5zZXJ0ZWQgaW50bworIyBtZW1vcnkgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBmaXJzdCBmcm96ZW4gbGluZS4iIChmcm9tIHRoZSBIUCA3MDAvOTYKKyMgVXNlcidzIG1hbnVhbCkuICBWVDEwMC9BTlNJIG1lbW9yeSBsb2NrIHNldCBpcyBcRVs+MmgsIHJlc2V0IGlzIFxFWz4ybC4KKyMKKyMgQXBwbGljYXRpb25zIHRoYXQgdXNlIHRlcm1pbmZvIGFyZSBzdXBwb3NlZCB0byBiZWhhdmUgYXMgdGhvdWdoIHhyIGlzCisjIGFsd2F5cyB0cnVlLgorIworbGluZWZlZWRfaXNfbmV3bGluZQkJT1ROTAlib29sCU5MCS0JCS0JWUItLS0JbW92ZSBkb3duIHdpdGggXG4KKyMgZXZlbl9wYXJpdHkJCQlPVEVQCWJvb2wJRVAJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBldmVuIHBhcml0eQorIyBvZGRfcGFyaXR5CQkJT1RPUAlib29sCU9QCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgb2RkIHBhcml0eQorIyBoYWxmX2R1cGxleAkJCU9USEQJYm9vbAlIRAktCQktCS1CLS0tCXRlcm1pbmFsIGlzIGhhbGYtZHVwbGV4CisjIGxvd2VyX2Nhc2Vfb25seQkJT1RMQwlib29sCUxDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgbG93ZXIgY2FzZQorIyB1cHBlcl9jYXNlX29ubHkJCU9UVUMJYm9vbAlVQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IHVwcGVyIGNhc2UKK2JhY2tzcGFjZV9kZWxheQkJCU9UZEIJbnVtCWRCCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkgKKyMgZm9ybV9mZWVkX2RlbGF5CQlPVGRGCW51bQlkRgktCQktCS1CLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5MCitob3Jpem9udGFsX3RhYl9kZWxheQkJT1RkVAludW0JZFQJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSQorIyB2ZXJ0aWNhbF90YWJfZGVsYXkJCU9UZFYJbnVtCWRWCS0JCS0JLUItLS0JcGFkZGluZyByZXF1aXJlZCBmb3IgXlYKK251bWJlcl9vZl9mdW5jdGlvbl9rZXlzCQlPVGtuCW51bQlrbgktCQktCS1CLUctCWNvdW50IG9mIGZ1bmN0aW9uIGtleXMKK290aGVyX25vbl9mdW5jdGlvbl9rZXlzCQlPVGtvCXN0cglrbwktCQktCS1CLUctCWxpc3Qgb2Ygc2VsZi1tYXBwZWQga2V5Y2FwcworYXJyb3dfa2V5X21hcAkJCU9UbWEJc3RyCW1hCS0JCS0JWUJDLS0JbWFwIGFycm93IGtleXMgcm9ndWUoMSkgbW90aW9uIGtleXMKKyMgbWVtb3J5X2xvY2tfYWJvdmUJCU9UbWwJc3RyCW1sCS0JCS0JLUItLS0JbG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQorIyBtZW1vcnlfdW5sb2NrCQkJT1RtdQlzdHIJbXUJLQkJLQktQi0tLQl1bmxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKK2hhc19oYXJkd2FyZV90YWJzCQlPVHB0CWJvb2wJcHQJLQkJLQlZQi0tLQloYXMgOC1jaGFyIHRhYnMgaW52b2tlZCB3aXRoIF5JCityZXR1cm5fZG9lc19jbHJfZW9sCQlPVHhyCWJvb2wJeHIJLQkJLQlZQi0tLQlyZXR1cm4gY2xlYXJzIHRoZSBsaW5lCisjIHRla180MDI1X2luc2VydF9saW5lCQlPVHh4CWJvb2wJeHgJLQkJLQktQkMtLQlUZWt0cm9uaXggNDAyNSBpbnNlcnQtbGluZSBnbGl0Y2gKKyMKKyMgbXl0aW5mbyBkZXNjcmliZWQgdGhpcyBhcyBhIHRlcm1jYXAgY2FwYWJpbGl0eSwgYnV0IGl0J3Mgbm90IGxpc3RlZCBpbiB0aGUKKyMgNC40QlNEIG1hbiBwYWdlcywgYW5kIG5vdCBmb3VuZCBpbiB0aGUgNC40QlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuY3Vyc2VzCisjIHBhY2thZ2UsIGxpa2UgU3lzdGVtIFYsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFsd2F5cyB0cnVlLgorIworIyByaW5kX29ubHlfYXRfdG9wCQlPVHhxCWJvb2wJeHEJLQkJLQktLS0tLQlyZXZlcnNlIGluZGV4IG9ubHkgd29ya3MgZnJvbSB0b3AgbGluZQorIworIyBVbml2ZXJzaXR5IG9mIFdhdGVybG9vIHRlcm1jYXAgZXh0ZW5zaW9ucyAoYXMgZGVzY3JpYmVkIGluIG15dGluZm8pLgorIyBUaGUgYHhsJyB0ZXJtY2FwIGZpbGUgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90CisjIGJlIHJlc29sdmVkIGJ5IGEgdHlwZSBjaGVjay4gIFRoZSBkZXNjcmlwdGlvbnMgYXJlIGd1ZXNzZXMgZnJvbSB3aGF0IHdhcworIyBpbiB0aGUgbXl0aW5mbyB0YWJsZXMuIAorIworIyBrZXlfaW50ZXJydXB0X2NoYXIJCU9Ua2kJc3RyCWtpCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBpbnRlcnJ1cHQga2V5ICg/KQorIyBrZXlfa2lsbF9jaGFyCQkJT1RrawlzdHIJa2sJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGtpbGwga2V5ICg/KQorIyBrZXlfc3VzcGVuZF9jaGFyCQlPVGt6CXN0cglregktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgc3VzcGVuZCBrZXkgKD8pCisjIGluaXRpYWxpemF0aW9uX21lc3N5CQlPVHhjCWJvb2wJeGMJLQkJLQktLS0tLQlpbml0aWFsaXphdGlvbiBsZWF2ZXMgZ2FyYmFnZSBvbiB0aGUgc2NyZWVuICg/KQorIyBpbmRfYXRfYm90dG9tX2RvZXNfY3IJCU9UeGwJYm9vbAl4bAktCQktCS0tLS0tCWluZGV4IGRvZXMgYSBjYXJyaWFnZSByZXR1cm4KKyMKKyMgTm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHVuaXF1ZSB0byBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UuCisjIFNSIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdCBiZSByZXNvbHZlZCBieSBhIHR5cGUKKyMgY2hlY2suCisjCisjIHNjcm9sbF9sZWZ0CQkJT1RzbDEJc3RyCVNsCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZAorIyBzY3JvbGxfcmlnaHQJCQlPVHNyMQlzdHIJU3IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZAorIyBwYXJtX3Njcm9sbF9sZWZ0CQlPVHNsCXN0cglTTAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQgIzEgY2hhcmFjdGVycworIyBwYXJtX3Njcm9sbF9yaWdodAkJT1RzcglzdHIJU1IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZCAjMSBjaGFyYWN0ZXJzCisjCisjIFRoZSBteXRpbmZvIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgWGVuaXggZGVmaW5lZCBpdHMgb3duIHNldCBvZiBmb3Jtcy1kcmF3aW5nIGNhcGFiaWxpdGllczoKKyMKKyMgY2FwCUlCTSBBU0NJSQlkZXNjcmlwdGlvbiAgICAgICAgICAgICBBQ1MgICAgICAgICAJQVNDSUkKKyMgLS0tCS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0JLS0tLS0tCisjIEcxCTE5MSBcMjc3IE0tPwlzaW5nbGUgdXBwZXIgcmlnaHQgICAJQUNTX1VSQ09STkVSCisjIEcyCTIxOCBcMzMyIE0tWglzaW5nbGUgdXBwZXIgbGVmdAlBQ1NfVUxDT1JORVIKKyMgRzMJMTkyIFwzMDAgTS1ACXNpbmdsZSBsb3dlciBsZWZ0CUFDU19MTENPUk5FUgorIyBHNAkyMTcgXDMzMSBNLVkJc2luZ2xlIGxvd2VyIHJpZ2h0CUFDU19MUkNPUk5FUgorIyBHNQkxODcgXDI3MyBNLTsJZG91YmxlIHVwcGVyIHJpZ2h0CisjIEc2CTIwMSBcMzExIE0tSQlkb3VibGUgdXBwZXIgbGVmdAorIyBHNwkyMDAgXDMxMCBNLUgJZG91YmxlIGxvd2VyIGxlZnQKKyMgRzgJMTg4IFwyNzQgTS08CWRvdWJsZSBsb3dlciByaWdodAorIyBHQwkxOTcgXDMwNSBNLUUJc2luZ2xlIGludGVyc2VjdGlvbglBQ1NfUExVUwlfIF8KKyMgR0QJMTk0IFwzMDIgTS1CCXNpbmdsZSBkb3duLXRpY2sJQUNTX1RURUUJIHwKKyMgR0gJMTk2IFwzMDQgTS1ECXNpbmdsZSBob3Jpem9udGFsIGxpbmUJQUNTX0hMSU5FCisjIEdMCTE4MCBcMjY0IE0tNAlzaW5nbGUgbGVmdCB0aWNrCUFDU19SVEVFCS18CisjIEdSCTE5NSBcMzAzIE0tQwlzaW5nbGUgcmlnaHQgdGljawlBQ1NfTFRFRQl8LQorIyBHVQkxOTMgXDMwMSBNLUEJc2luZ2xlIHVwIHRpY2sJCUFDU19CVEVFCV98XworIyBHVgkxNzkgXDI2MyBNLTMJc2luZ2xlIHZlcnRpY2FsIGxpbmUJQUNTX1ZMSU5FCisjIEdjCTIwNiBcMzE2IE0tTglkb3VibGUgaW50ZXJzZWN0aW9uCisjIEdkCTIwMyBcMzEzIE0tSwlkb3VibGUgZG93biB0aWNrCisjIEdoCTIwNSBcMzE1IE0tTQlkb3VibGUgaG9yaXpvbnRhbCBsaW5lCisjIEdsCTIwNCBcMjA0IE0tTAlkb3VibGUgbGVmdCB0aWNrCisjIEdyCTE4NSBcMjcxIE0tOQlkb3VibGUgcmlnaHQgdGljaworIyBHdQkyMDIgXDMxMiBNLUoJZG91YmxlIHVwIHRpY2sKKyMgR3YJMTg2IFwyNzIgTS06CWRvdWJsZSB2ZXJ0aWNhbCBsaW5lCisjCisjIFRoZSBjb21waWxlciB3aWxsIHRyYW5zbGF0ZSB0aGUgc2luZ2xlLWxpbmUgY2FwcyBhbmQgZGlzY2FyZCB0aGUgb3RoZXJzCisjICh2aWEgSUdOT1JFIGFsaWFzZXMgZnVydGhlciBkb3duKS4gIFdlIGRvbid0IHdhbnQgdG8gZG8gbm9ybWFsIHBhZCAKKyMgdHJhbnNsYXRpb24gb24gdGhlc2UsIHRoZXkncmUgb2Z0ZW4gc2luZ2xlLWNoYXJhY3RlciBwcmludGFibGUgQVNDSUkKKyMgc3RyaW5ncyB0aGF0IGhhcHBlbiB0byBiZSBudW1lcmljcy4gIFRoZXJlJ3MgYXdrIGNvZGUgaW4gcGFyYW1ldHJpemVkLnNoCisjIHRoYXQgZGV0ZWN0cyB0aGUgYWNzXyBwcmVmaXggYW5kIHVzZXMgaXQgdG8gc3VwcHJlc3MgcGFkIHRyYW5zbGF0aW9uLgorIyBUaGVzZSB0ZXJtaW5mbyBuYW1lcyBhcmUgaW52ZW50ZWQuCisjCithY3NfdWxjb3JuZXIJCQlPVEcyCXN0cglHMgktCQktCS0tLS0tCXNpbmdsZSB1cHBlciBsZWZ0CithY3NfbGxjb3JuZXIJCQlPVEczCXN0cglHMwktCQktCS0tLS0tCXNpbmdsZSBsb3dlciBsZWZ0CithY3NfdXJjb3JuZXIJCQlPVEcxCXN0cglHMQktCQktCS0tLS0tCXNpbmdsZSB1cHBlciByaWdodAorYWNzX2xyY29ybmVyCQkJT1RHNAlzdHIJRzQJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgcmlnaHQKK2Fjc19sdGVlCQkJT1RHUglzdHIJR1IJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgcmlnaHQKK2Fjc19ydGVlCQkJT1RHTAlzdHIJR0wJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgbGVmdAorYWNzX2J0ZWUJCQlPVEdVCXN0cglHVQktCQktCS0tLS0tCXRlZSBwb2ludGluZyB1cAorYWNzX3R0ZWUJCQlPVEdECXN0cglHRAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBkb3duCithY3NfaGxpbmUJCQlPVEdICXN0cglHSAktCQktCS0tLS0tCXNpbmdsZSBob3Jpem9udGFsIGxpbmUKK2Fjc192bGluZQkJCU9UR1YJc3RyCUdWCS0JCS0JLS0tLS0Jc2luZ2xlIHZlcnRpY2FsIGxpbmUKK2Fjc19wbHVzCQkJT1RHQwlzdHIJR0MJLQkJLQktLS0tLQlzaW5nbGUgaW50ZXJzZWN0aW9uCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNSU5GTyBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoaXMgc2VjdGlvbiBpcyBhbG1vc3QgYWxsIGNvbW1lbnRzLiAgV2hhdCBpdCdzIG1haW5seSBmb3IgaXMgdG8gZGVzY3JpYmUKKyMgd2hhdCBjYXBhYmlsaXRpZXMgbmVlZCB0byBiZSBzcXVlZXplZCBvdXQgdG8gZ2V0IGRvd24gdG8gdGhlIFhTSSBDdXJzZXMKKyMgc3RhbmRhcmQgc2V0LiAgVGhleSBhcmUgZmxhZ2dlZCB3aXRoIEsuCisjCisjIEhQIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIEhQCisjIHRlcm1pbmZvIGZpbGVzLiAgRXhjZXB0IGZvciBtZW1vcnlfbG9jayBhbmQgbWVtb3J5X3VubG9jaywgdGhleSBhcmUKKyMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBTVnI0IGV4dGVuc2lvbnMsIGJ1dCB0aGV5IG1ha2UgdGhlIGJpbmFyeSBmb3JtYXQKKyMgZGlmZmVyZW50LiAgR3Jyci4uLi4KKyMKK21lbW9yeV9sb2NrCQkJbWVtbAlzdHIJbWwJLQkJLQktLS0tSwlsb2NrIG1lbW9yeSBhYm92ZSBjdXJzb3IKK21lbW9yeV91bmxvY2sJCQltZW11CXN0cgltdQktCQktCS0tLS1LCXVubG9jayBtZW1vcnkKKyNwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgorI2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCisjbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscworI2tleV9mMTEJCQlrZjExCXN0cglGMQktCQktCS0tLS0tCUYxMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjEyCQkJa2YxMglzdHIJRjIJLQkJLQktLS0tLQlGMTIgZnVuY3Rpb24ga2V5Cisja2V5X2YxMwkJCWtmMTMJc3RyCUYzCS0JCS0JLS0tLS0JRjEzIGZ1bmN0aW9uIGtleQorI2tleV9mMTQJCQlrZjE0CXN0cglGNAktCQktCS0tLS0tCUYxNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE1CQkJa2YxNQlzdHIJRjUJLQkJLQktLS0tLQlGMTUgZnVuY3Rpb24ga2V5Cisja2V5X2YxNgkJCWtmMTYJc3RyCUY2CS0JCS0JLS0tLS0JRjE2IGZ1bmN0aW9uIGtleQorI2tleV9mMTcJCQlrZjE3CXN0cglGNwktCQktCS0tLS0tCUYxNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE4CQkJa2YxOAlzdHIJRjgJLQkJLQktLS0tLQlGMTggZnVuY3Rpb24ga2V5Cisja2V5X2YxOQkJCWtmMTkJc3RyCUY5CS0JCS0JLS0tLS0JRjE5IGZ1bmN0aW9uIGtleQorI2tleV9mMjAJCQlrZjIwCXN0cglGQQktCQktCS0tLS0tCUYyMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjIxCQkJa2YyMQlzdHIJRkIJLQkJLQktLS0tLQlGMjEgZnVuY3Rpb24ga2V5Cisja2V5X2YyMgkJCWtmMjIJc3RyCUZDCS0JCS0JLS0tLS0JRjIyIGZ1bmN0aW9uIGtleQorI2tleV9mMjMJCQlrZjIzCXN0cglGRAktCQktCS0tLS0tCUYyMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI0CQkJa2YyNAlzdHIJRkUJLQkJLQktLS0tLQlGMjQgZnVuY3Rpb24ga2V5Cisja2V5X2YyNQkJCWtmMjUJc3RyCUZGCS0JCS0JLS0tLS0JRjI1IGZ1bmN0aW9uIGtleQorI2tleV9mMjYJCQlrZjI2CXN0cglGRwktCQktCS0tLS0tCUYyNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjI3CQkJa2YyNwlzdHIJRkgJLQkJLQktLS0tLQlGMjcgZnVuY3Rpb24ga2V5Cisja2V5X2YyOAkJCWtmMjgJc3RyCUZJCS0JCS0JLS0tLS0JRjI4IGZ1bmN0aW9uIGtleQorI2tleV9mMjkJCQlrZjI5CXN0cglGSgktCQktCS0tLS0tCUYyOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMwCQkJa2YzMAlzdHIJRksJLQkJLQktLS0tLQlGMzAgZnVuY3Rpb24ga2V5Cisja2V5X2YzMQkJCWtmMzEJc3RyCUZMCS0JCS0JLS0tLS0JRjMxIGZ1bmN0aW9uIGtleQorI2tleV9mMzIJCQlrZjMyCXN0cglGTQktCQktCS0tLS0tCUYzMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjMzCQkJa2YzMwlzdHIJRk4JLQkJLQktLS0tLQlGMzMgZnVuY3Rpb24ga2V5Cisja2V5X2YzNAkJCWtmMzQJc3RyCUZPCS0JCS0JLS0tLS0JRjM0IGZ1bmN0aW9uIGtleQorI2tleV9mMzUJCQlrZjM1CXN0cglGUAktCQktCS0tLS0tCUYzNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjM2CQkJa2YzNglzdHIJRlEJLQkJLQktLS0tLQlGMzYgZnVuY3Rpb24ga2V5Cisja2V5X2YzNwkJCWtmMzcJc3RyCUZSCS0JCS0JLS0tLS0JRjM3IGZ1bmN0aW9uIGtleQorI2tleV9mMzgJCQlrZjM4CXN0cglGUwktCQktCS0tLS0tCUYzOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM5CQkJa2YzOQlzdHIJRlQJLQkJLQktLS0tLQlGMzkgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MAkJCWtmNDAJc3RyCUZVCS0JCS0JLS0tLS0JRjQwIGZ1bmN0aW9uIGtleQorI2tleV9mNDEJCQlrZjQxCXN0cglGVgktCQktCS0tLS0tCUY0MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQyCQkJa2Y0MglzdHIJRlcJLQkJLQktLS0tLQlGNDIgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MwkJCWtmNDMJc3RyCUZYCS0JCS0JLS0tLS0JRjQzIGZ1bmN0aW9uIGtleQorI2tleV9mNDQJCQlrZjQ0CXN0cglGWQktCQktCS0tLS0tCUY0NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ1CQkJa2Y0NQlzdHIJRloJLQkJLQktLS0tLQlGNDUgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NgkJCWtmNDYJc3RyCUZhCS0JCS0JLS0tLS0JRjQ2IGZ1bmN0aW9uIGtleQorI2tleV9mNDcJCQlrZjQ3CXN0cglGYgktCQktCS0tLS0tCUY0NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ4CQkJa2Y0OAlzdHIJRmMJLQkJLQktLS0tLQlGNDggZnVuY3Rpb24ga2V5Cisja2V5X2Y0OQkJCWtmNDkJc3RyCUZkCS0JCS0JLS0tLS0JRjQ5IGZ1bmN0aW9uIGtleQorI2tleV9mNTAJCQlrZjUwCXN0cglGZQktCQktCS0tLS0tCUY1MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjUxCQkJa2Y1MQlzdHIJRmYJLQkJLQktLS0tLQlGNTEgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MgkJCWtmNTIJc3RyCUZnCS0JCS0JLS0tLS0JRjUyIGZ1bmN0aW9uIGtleQorI2tleV9mNTMJCQlrZjUzCXN0cglGaAktCQktCS0tLS0tCUY1MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU0CQkJa2Y1NAlzdHIJRmkJLQkJLQktLS0tLQlGNTQgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NQkJCWtmNTUJc3RyCUZqCS0JCS0JLS0tLS0JRjU1IGZ1bmN0aW9uIGtleQorI2tleV9mNTYJCQlrZjU2CXN0cglGawktCQktCS0tLS0tCUY1NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjU3CQkJa2Y1NwlzdHIJRmwJLQkJLQktLS0tLQlGNTcgZnVuY3Rpb24ga2V5Cisja2V5X2Y1OAkJCWtmNTgJc3RyCUZtCS0JCS0JLS0tLS0JRjU4IGZ1bmN0aW9uIGtleQorI2tleV9mNTkJCQlrZjU5CXN0cglGbgktCQktCS0tLS0tCUY1OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYwCQkJa2Y2MAlzdHIJRm8JLQkJLQktLS0tLQlGNjAgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MQkJCWtmNjEJc3RyCUZwCS0JCS0JLS0tLS0JRjYxIGZ1bmN0aW9uIGtleQorI2tleV9mNjIJCQlrZjYyCXN0cglGcQktCQktCS0tLS0tCUY2MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjYzCQkJa2Y2MwlzdHIJRnIJLQkJLQktLS0tLQlGNjMgZnVuY3Rpb24ga2V5CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBTElBUyBERUNMQVJBVElPTlMKKyMKKyMgSGVyZSB3ZSBzZXQgdXAgYWxpYXNlcyBmb3IgdHJhbnNsYXRpbmcgZXh0ZW5zaW9ucyBpbnRvIHN0YW5kYXJkIHRlcm1pbmZvLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVybWNhcCBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgQlNEIGFsaWFzZXM6CisjCisjIFRoaXMgaXMgYSBjb21tb24gZXJyb3IgaW4gbWFueSB0ZXJtY2FwIGZpbGVzLiAgV2UnbGwgZ2V0IG5vdGlmaWVkIGR1cmluZworIyB0cmFuc2xhdGlvbiB3aGVuIHRoaXMgKG9yIGFueSBvdGhlciBhbGlhcykgZmlyZXMuCisjCitjYXBhbGlhcwlzYglzcglCU0QJc2Nyb2xsIHRleHQgZG93bgorIworIyBBVCZUIGV4dGVuc2lvbnM6CisjCisjIFRoZSBvbGQgQVQmVCA1NDEwLCA1NDIwLCA1NDI1LCBwYzYzMDBwbHVzLCA2MTAsIGFuZCBzNCBlbnRyaWVzIHVzZWQgYSBzZXQgb2YKKyMgbm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzLiAgSXRzIHNpZ25hdHVyZSBpcyB0aGUgS00gY2FwYWJpbGl0eSwgdXNlZCB0byBuYW1lCisjIHNvbWUgc29ydCBvZiBrZXltYXAgZmlsZS4gIEVFLCBCTywgQ0ksIENWLCBYUywgRFMsIEZMIGFuZCBGRSBhcmUgaW4gdGhpcworIyBzZXQuICBDb21tZW50cyBpbiB0aGUgb3JpZ2luYWwsIGFuZCBhIGxpdHRsZSBjcm9zcy1jaGVja2luZyB3aXRoIG90aGVyIEFUJlQKKyMgZG9jdW1lbnRhdGlvbiwgc2VlbSB0byBlc3RhYmxpc2ggdGhlIGZvbGxvd2luZyBtYXBwaW5nczoKKyMKK2NhcGFsaWFzCUJPCW1yCUFUJlQJZW50ZXJfcmV2ZXJzZV9tb2RlCitjYXBhbGlhcwlDSQl2aQlBVCZUCWN1cnNvcl9pbnZpc2libGUKK2NhcGFsaWFzCUNWCXZlCUFUJlQJY3Vyc29yX25vcm1hbAorY2FwYWxpYXMJRFMJbWgJQVQmVAllbnRlcl9kaW1fbW9kZQorI2NhcGFsaWFzCUVFCW1lCUFUJlQJZXhpdF9hdHRyaWJ1dGVfbW9kZQkKK2NhcGFsaWFzCUZFCUxGCUFUJlQJbGFiZWxfb24KK2NhcGFsaWFzCUZMCUxPCUFUJlQJbGFiZWxfb2ZmCitjYXBhbGlhcwlYUwltawlBVCZUCWVudGVyX3NlY3VyZV9tb2RlCisjCisjIFdlIGNvbW1lbnQgb3V0IEVFIGJlY2F1c2UgdGhlIGNvbmZsaWN0aW5nIFhFTklYIEVFIGlzIG1vcmUgY29tbW9uIGluIAorIyBvbGQgZW50cmllcy4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgVGhlc2UgYXJlIHRoZSBvbmVzIHdlIGtub3cgaG93IHRvIHRyYW5zbGF0ZSBkaXJlY3RseToKKyMKK2NhcGFsaWFzCUVFCW1oCVhFTklYCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlHRQlhZQlYRU5JWAlleGl0X2FsdF9jaGFyc2V0X21vZGUKK2NhcGFsaWFzCUdTCWFzCVhFTklYCWVudGVyX2FsdF9jaGFyc2V0X21vZGUKK2NhcGFsaWFzCUNGCXZpCVhFTklYCWN1cnNvcl9pbnZpcworY2FwYWxpYXMJQ08JdmUJWEVOSVgJY3Vyc29yX25vcm1hbAorY2FwYWxpYXMJRU4JQDcJWEVOSVgJa2V5X2VuZAorY2FwYWxpYXMJSE0Ja2gJWEVOSVgJa2V5X2hvbWUKK2NhcGFsaWFzCUxECWtMCVhFTklYCWtleV9kbAorY2FwYWxpYXMJUEQJa04JWEVOSVgJa2V5X25wYWdlCitjYXBhbGlhcwlQTglwbwlYRU5JWAlwcnRyX29mZgorY2FwYWxpYXMJUFMJcGYJWEVOSVgJcHJ0cl9vbgorY2FwYWxpYXMJUFUJa1AJWEVOSVgJa2V5X3BwYWdlCitjYXBhbGlhcwlSVAlAOAlYRU5JWAlrZW50CitjYXBhbGlhcwlVUAlrdQlYRU5JWAlrY3V1MQorY2FwYWxpYXMJRzYJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVUxDT1JORVIKK2NhcGFsaWFzCUc3CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xMQ09STkVSCitjYXBhbGlhcwlHNQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19VUkNPUk5FUgorY2FwYWxpYXMJRzgJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTFJDT1JORVIKK2NhcGFsaWFzCUdyCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xURUUKK2NhcGFsaWFzCUdyCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1JURUUKK2NhcGFsaWFzCUd1CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0JURUUKK2NhcGFsaWFzCUdkCUlHTk9SRQlYRU5JWAlkb3VibGUgQUNTX1RURUUKK2NhcGFsaWFzCUdoCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0hMSU5FCitjYXBhbGlhcwlHdglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19WTElORQorY2FwYWxpYXMJR2MJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfUExVUworY2FwYWxpYXMJR0cJSUdOT1JFCVhFTklYCWFjcy1nbGl0Y2gKKyMKKyMgSUJNIGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlrcQklMQlJQk0Ja2V5X2hlbHAKKyMKKyMgSXJpcyBleHRlbnNpb25zOgorIworY2FwYWxpYXMJSFMJbWgJSVJJUwllbnRlcl9kaW1fbW9kZQorIworIyBUZWt0cm9uaXggZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUtBCWs7CVRlawlrZXlfZjEwCitjYXBhbGlhcwlLQglGMQlUZWsJa2V5X2YxMQorY2FwYWxpYXMJS0MJRjIJVGVrCWtleV9mMTIKK2NhcGFsaWFzCUtECUYzCVRlawlrZXlfZjEzCitjYXBhbGlhcwlLRQlGNAlUZWsJa2V5X2YxNAorY2FwYWxpYXMJS0YJRjUJVGVrCWtleV9mMTUKK2NhcGFsaWFzCUJDCVNiCVRlawlzZXRfYmFja2dyb3VuZAorY2FwYWxpYXMJRkMJU2YJVGVrCXNldF9mb3JlZ3JvdW5kCisjCisjIFRoZXJlIGFyZSBhbHNvIHRoZSBmb2xsb3dpbmc6CisjCisjCVhFTklYCVhFTklYIHZhcmlhYmxlIG5hbWUJbmFtZSBjbGFzaCB3aXRoIHRlcm1pbmZvPworIwktLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJQ0wJa2V5X2NoYXJfbGVmdAorIwlDUglrZXlfY2hhcl9yaWdodAorIwlDVwlrZXlfY2hhbmdlX3dpbmRvdworIwlIUAk/PworIwlMRglrZXlfbGluZWZlZWQgCQlsYWJlbF9vZmYKKyMJTlUJa2V5X25leHRfdW5sb2NrZWRfY2VsbAorIwlQTAk/PworIwlQUgk/PworIwlSQwlrZXlfcmVjYWxjCQlyZW1vdmVfY2xvY2sKKyMJUkYJa2V5X3RvZ2dsZV9yZWYJCXJlcV9mb3JfaW5wdXQKKyMJV0wJa2V5X3dvcmRfbGVmdAorIwlXUglrZXlfd29yZF9yaWdodAorIworIyBJZiB5b3Uga25vdyB3aGF0IGFueSBvZiB0aGUgcXVlc3Rpb24tbWFya2VkIG9uZXMgbWVhbiwgcGxlYXNlIHRlbGwgdXMuCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1pbmZvIGFsaWFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIElCTSBleHRlbnNpb25zOgorIworaW5mb2FsaWFzCWZvbnQwCXMwZHMJSUJNCXNldDBfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQxCXMxZHMJSUJNCXNldDFfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQyCXMyZHMJSUJNCXNldDJfZGVzX3NlcQoraW5mb2FsaWFzCWZvbnQzCXMzZHMJSUJNCXNldDNfZGVzX3NlcQoraW5mb2FsaWFzCWtidGFiCWtjYnQJSUJNCWtleV9iYWNrdGFiCitpbmZvYWxpYXMJa3NlbAlrc2x0CUlCTQlrZXlfc2VsZWN0CisjCisjIFNvbWUgb3RoZXJzIGFyZSBpZGVudGljYWwgdG8gU1ZyNC9YUEc0IGNhcGFiaWxpdGllcywgaW4gcGFydGljdWxhcjoKKyMga2NtZCwga2VuZCwga2hscCwgYW5kIGtmMTEuLi5rZjYzLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworIyBMb2NhbCBWYXJpYWJsZXM6CisjIGNhc2UtZm9sZC1zZWFyY2g6bmlsCisjIHRydW5jYXRlLWxpbmVzOnQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9DYXBzLmhwdXgxMSBiL25jdXJzZXMtNS43L2luY2x1ZGUvQ2Fwcy5ocHV4MTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWNkYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvQ2Fwcy5ocHV4MTEKQEAgLTAsMCArMSwxMjc4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIERpY2tleQorIworIyAkSWQ6IENhcHMuaHB1eDExLHYgMS40IDIwMDYvMDUvMjcgMTU6MzM6MDQgdG9tIEV4cCAkCisjCisjIFRoaXMgaXMgYW4gYWRhcHRhdGlvbiBvZiBuY3Vyc2VzJyB0ZXJtY2FwL3Rlcm1pbmZvIGNhcGFiaWxpdHkgdGFibGUsIHdoaWNoCisjIGlzIGRlc2lnbmVkIHRvIGFsaWduIHdpdGggSFBVWCAxMS54J3MgdGVybWluZm8uCisjCisjIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBpbml0aWFsaXplcnMgZm9yIHRhYmxlcyB0aGF0IGRyaXZlIHRpYywKKyMgaW5mb2NtcCwgYW5kIHRoZSBsaWJyYXJ5IGNvbXBpbGF0aW9uIGNvZGUgdXNlZCB0byBzdXBwb3J0IHRoZSB0ZXJtY2FwIAorIyBjb21wYXRpYmlsaXR5IGhhY2suICBJdCBpcyBhbHNvIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYnVsYXIgcG9ydGlvbiBvZiB0aGUKKyMgdGVybWluZm8oNSkgbWFuIHBhZ2U7IGxpbmVzIGJlZ2lubmluZyB3aXRoIGAjJScgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGJlY29tZQorIyB0aGUgdGVybWluZm8gdGFibGUuCisjCisjIFRoaXMgZmlsZSBoYXMgdGhyZWUgbWFqb3Igc2VjdGlvbnM7IGEgc3RhbmRhcmQtY2FwYWJpbGl0aWVzIHRhYmxlLCB0d28KKyMgZXh0ZW5zaW9uLWNhcGFiaWxpdHkgdGFibGVzLCBhbmQgYSBzZWN0aW9uIG9mIGFsaWFzZXMgZGVjbGFyYXRpb25zLgorIyBUaGUgZmlyc3QgdHdvIGhhdmUgdGhlIHNhbWUgZm9ybWF0LCBhcyBmb2xsb3dzOgorIworIyBGSUxFIEZPUk1BVAorIworIyBDb2x1bW4gMTogdGVybWluZm8gdmFyaWFibGUgbmFtZQorIyBDb2x1bW4gMjogdGVybWluZm8gY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiAzOiBjYXBhYmlsaXR5IHR5cGUgKGJvb2xlYW4sIG51bWVyaWMsIG9yIHN0cmluZykKKyMgQ29sdW1uIDQ6IHRlcm1jYXAgY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiA1OiBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNjogdmFsdWUgZm9yIEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA3OiBMZWFkIHdpdGggYFknIGlmIGNhcGFiaWxpdHkgc2hvdWxkIGJlIGVtaXR0ZWQgaW4gdGVybWNhcAorIyAgICAgICAgICAgdHJhbnNsYXRpb25zLCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA4OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uCisjCisjIFRoZSBjb2RlcyBmb2xsb3dpbmcgW1ktXSBpbiBjb2x1bW4gNyBkZXNjcmliZSB0aGUgdmVyc2lvbnMgb2YgdGVybWNhcCB3aGljaAorIyB1c2UgdGhlIGdpdmVuIGNhcGFiaWxpdHkuICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJzZXMgbGlicmFyeQorIyBwcm9wZXI7IHJhdGhlciwgaXQncyB0aGVyZSB0byBoZWxwIHRoZSB0ZXJtaW5mbyBtYWludGFpbmVyIGF2b2lkIGVtaXR0aW5nCisjIHRlcm1jYXAgZW50cnkgdHJhbnNsYXRpb25zIHRoYXQgYXJlIG1vcmUgdGhhbiAxMDIzIGJ5dGVzIGxvbmcgKGFuZCB0YW5rIGEKKyMgbG90IG9mIG9sZCB0ZXJtY2FwLXVzaW5nIHByb2dyYW1zKS4gIFRoZSBjb2RlcyByZWFkIGFzIGZvbGxvd3M6CisjCUIgPSBtZW50aW9uZWQgaW4gdGhlIEJTRCBtYW4gcGFnZSBmb3IgNC40QlNEIGN1cnNlcworIwlDID0gdXNlZCBieSB0aGUgNC40QlNEIGN1cnNlcyBsaWJyYXJ5CisjCUcgPSBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIEdOVSB0ZXJtY2FwCisjCUUgPSB1c2VkIGJ5IEdOVSBFbWFjcworIwlLID0gcmVtb3ZlIHRoaXMgdGVybWluZm8gY2FwYWJpbGl0eSB3aGVuIHRyYW5zbGF0aW5nIHRvIHN0YW5kYXJkIGZvcm1hdAorIyBUaGUgaW1wb3J0YW50IGNvZGVzIGFyZSBDIGFuZCBFLiAgQSBjYXAgd2l0aCBDIG9yIEUgc2hvdWxkIGJlIHByZXNlcnZlZCBpbgorIyB0cmFuc2xhdGlvbiBpZiBwb3NzaWJsZS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgcHJlc2VydmluZyBhbGwgc3VjaCBjYXBzIG1heQorIyBsZWFkIHRvIHNvbWUgdGVybWNhcCB0cmFuc2xhdGlvbnMgYmVpbmcgdG9vIGxvbmcuICBUaGUgdGVybWNhcCBtYWludGFpbmVyCisjIGhhcyBhIGJpdCBvZiBhIGp1Z2dsaW5nIGFjdCB0byBkby4uLnBvdGVudGlhbCBwcm9ibGVtIGNhc2VzIGFyZSBtYXJrZWQgd2l0aAorIyBhbiBhc3RlcmlzayAoKikuCisjCisjIFRoZSBhbGlhc2VzIHNlY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIworIyBDb2x1bW4gMTogZWl0aGVyIGBjYXBhbGlhcycgb3IgYGluZm9hbGlhcycKKyMgQ29sdW1uIDI6IG5hbWUgdG8gYmUgYWxpYXNlZAorIyBDb2x1bW4gMzogd2hhdCBuYW1lIGl0IHNob3VsZCB0cmFuc2xhdGUgdG8uICBUaGUgbmFtZSBJR05PUkUgbWVhbnMgaXQKKyMgICAgICAgICAgIHNob3VsZCBiZSBkaXNjYXJkZWQgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS4KKyMgQ29sdW1uIDQ6IG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBzZXQgKHVzZWQgZm9yIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMpCisjIENvbHVtbiA1OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uICh1c3VhbGx5IGFuIGFzc29jaWF0ZWQgdGVybWluZm8gdmFyaWFibGUpCisjCisjIEhBTkRMSU5HIFRFUk1DQVAgQU5EIFRFUk1JTkZPIEVYVEVOU0lPTlMKKyMKKyMgVGhlcmUgYXJlIGJhc2ljYWxseSBmaXZlIGRpZmZlcmVudCB3YXlzIHRvIGhhbmRsZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbworIyBleHRlbnNpb25zOgorIworIyAxLiBEb24ndCBsaXN0IHRoZSBjYXBuYW1lIGhlcmUsIG9yIGxpc3QgaXQgYnV0IGNvbW1lbnQgaXQgb3V0ICh0aGUgbGF0dGVyCisjIGlzIHByZWZlcmFibGU7IHNvbWVvbmUgbWlnaHQgd2FudCB0byBoYW5kbGUgaXQgaW4gdGhlIGZ1dHVyZSkuICBJZiB5b3UgZG8KKyMgdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSB0cmVhdGVkIGFzIHVua25vd24gYW5kIHJhaXNlIGEgd2FybmluZyBmcm9tCisjIHRoZSBjb21waWxlci4KKyMKKyMgMi4gQWxpYXMgaXQuICBUaGlzIGlzIGFwcHJvcHJpYXRlIGlmIHRoZSBjYXBhYmlsaXR5IGhhcyB0aGUgc2FtZSBtZWFuaW5nCisjIGFzIGFuIGFscmVhZHktc3VwcG9ydGVkIG9uZS4gIFRoZSBjb21waWxlciB3aWxsIGhhbmRsZSBhbGlhc2luZywgZW1pdHRpbmcKKyMgYW4gYXBwcm9wcmlhdGUgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHdoZW5ldmVyIGFuIGFsaWFzIGZpcmVzLgorIworIyAzLiBMaXN0IGl0IGluIHRoZSBzdGFuZGFyZCB0YWJsZS4gIFlvdSBhbG1vc3QgY2VydGFpbmx5IGRvICpub3QqIHdhbnQKKyMgdG8gZG8gdGhpcyAtLSB0aGUgY2FwYWJpbGl0aWVzIGluIHRoYXQgb25lLCBhbmQgdGhlaXIgb3JkZXIsIGhhdmUgYmVlbgorIyBjYXJlZnVsbHkgY2hvc2VuIHRvIGJlIFNWcjQtYmluYXJ5LWNvbXBhdGlibGUgd2hlbiB0aGV5J3JlIHdyaXR0ZW4gb3V0CisjIGFzIGEgdGVybWluZm8gb2JqZWN0LCBhbmQgYnJlYWtpbmcgdGhpcyB3b3VsZCBiZSBiYWQuICBJdCdzIHVwIHRoZSBuY3Vyc2VzCisjIGxpYnJhcnkgd2hhdCB0byBkbyB3aXRoIHRoZSB0ZXJtaW5mbyBkYXRhIGFmdGVyIGl0J3MgcmVhZCBpbi4KKyMKKyMgNC4gTGlzdCBpdCBpbiB0aGUgYWxpYXNlcyB0YWJsZSB3aXRoIGFuIElHTk9SRSB0YXJnZXQgZmllbGQuICBJZiB5b3UKKyMgZG8gdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkIG9uIGlucHV0ICh0aG91Z2ggdGhlIHVzZXIgd2lsbAorIyBnZXQgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgaXQpLgorIworIyA1LiBMaXN0IGl0IGluIHRoZSBleHRlbnNpb25zIHRhYmxlLiBJZiB5b3UgZG8gdGhpcywgdGhlIGNvbXBpbGVyIHdpbGwKKyMgc2lsZW50bHkgYWNjZXB0IHRoZSBjYXBhYmlsaXR5LCBidXQgdGhlIGN1cnNlcyBsaWJyYXJ5IHByb3BlciB3aWxsIG5ldmVyCisjIHNlZSBpdCAoYmVjYXVzZSBpdCB3b24ndCBiZSB3cml0dGVuIG91dCBhcyBwYXJ0IG9mIHRoZSB0ZXJtaW5mbyBvYmplY3QKKyMgZm9ybWF0KS4gIEl0J3MgdXAgdG8geW91IHdoYXQgeW91IGhhdmUgdGhlIGNvbXBpbGVyIGRvIHdpdGggaXQuCisjCisjIFRoZXJlIGFyZSB0d28gb3Bwb3NpdGUgcmVhc29ucyB0byBjaG9vc2Ugb3B0aW9uIDUuICBPbmUgaXMgd2hlbiB5b3Ugd2FudAorIyB0byBlYXQgdGhlIGNhcGFiaWxpdHkgc2lsZW50bHkgYW5kIGRpc2NhcmQgaXQgd2hlbiBkb2luZyB0cmFuc2xhdGlvbnMKKyMgdG8gdGVybWluZm8gd2l0aCB0aWMgLUkuICBTb21lIHZlcnkgb2xkIG9ic29sZXRlIEJTRCBjYXBzIGxpa2UgOmtuOiBhcmUKKyMgaW4gdGhpcyBjbGFzcy4gIE5vdGhpbmcgd2lsbCBldmVyIHVzZSB0aGVtIGFnYWluLgorIworIyBNb3JlIHVzdWFsbHksIHlvdSB3YW50IHRoZSBjb21waWxlciB0byB0cnkgdG8gZGVkdWNlIHNvbWV0aGluZyBmcm9tIHRoZQorIyBjYXBhYmlsaXR5IHZhbHVlIHRoYXQgaXQgY2FuIHVzZSB0byB0cmFuc2xhdGUgaXQgaW50byB5b3VyIG91dHB1dCBmb3JtYXQuCisjIFlvdSdsbCBuZWVkIHRvIHdyaXRlIGN1c3RvbSBjb2RlLCBwcm9iYWJseSBpbiBwb3N0cHJvY2Vzc190ZXJtY2FwKCkgb3IKKyMgcG9zdHByb2Nlc3NfdGVybWluZm8oKSwgdG8gaGFuZGxlIHRoZSB0cmFuc2xhdGlvbi4KKyMKKyMgQ09OVFJPTExJTkcgRU5UUlkgTEVOR1RIIAorIworIyBOb3RlcyBvbiBzcGVjaWZpYyBlbGlzaW9ucyBtYWRlIHRvIGZpdCB0cmFuc2xhdGlvbnMgd2l0aGluIDEwMjMgYnl0ZXM6CisjCisjIE1hY2hpbmVzIHdpdGggSUJNIFBDLWxpa2Uga2V5Ym9hcmRzIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZworIyBrZXlzOiBrZXlfbnBhZ2UsIGtleV9wcGFnZSwga2V5X2hvbWUsIGtleV9sbCAod2hpY2ggaXMgdXNlZCBmb3IgaW4gdGVybWNhcC0KKyMgb25seSBlbnZpcm9ubWVudHMgZm9yIEVuZCBvciBIb21lLURvd24pLCBrZXlfZGMsIGFuZCBrZXlfaWMuICBUaGlzIGlzIGFsc28KKyMgdGhlIHNldCBvZiBrZXlzIHRoZSBgam9lJyBlZGl0b3Igd2lsbCBiZSB1cHNldCBpZiBpdCBjYW4ndCBzZWUuICBTbyBkb24ndCAKKyMgdHJpbSB0aG9zZSBvdXQgb2YgdGhlIHNldCB0byBiZSB0cmFuc2xhdGVkIHRvIHRlcm1jYXAsIG9yIHZhcmlvdXMgdXNlcnMgb2YKKyMgdGhlIHRlcm1jYXAgZmlsZSB3aWxsIGJlY29tZSBpcmF0ZS4KKyMKKyMgSXQgbWlnaHQgbG9vayB0ZW1wdGluZyB0byBsZWF2ZSB0aG9zZSBsb25nIGluaXQgc3RyaW5ncyBvdXQgb2YgdHJhbnNsYXRpb25zLgorIyBXZSBjYW4ndCBkbyBpdCAoeWV0KTsgNC40QlNEIHRwdXQgYW5kIHRzZXQgdXNlIHRoZW0uCisjCisjIFdlIHJldGFpbiB0aGUgc2dyIGNhcGFiaWxpdHkgaW4gdHJhbnNsYXRpb24gaW4gc3BpdGUgb2YgdGhlIGZhY3QgdGhhdCBuZWl0aGVyCisjIDQuNEJTRCBub3IgR05VIEVtYWNzIHVzZXMgaXQsIGJlY2F1c2UgKGEpIHNvbWUgZW50cnkgbmFtaW5nIGRpc3RpbmN0aW9ucyBhcmUKKyMgaGFyZCB0byB1bmRlcnN0YW5kIHdpdGhvdXQgaXQsIGFuZCAoYikgdGhlIGVudHJpZXMgaW4gd2hpY2ggaXQgaXMgbG9uZyB0ZW5kCisjIHRvIGJlIG9sZGVyIHR5cGVzIHRoYXQgZG9uJ3QgdXNlIHVwIGEgbG90IG9mIHN0cmluZyBzcGFjZSBvbiBmdW5jdGlvbiBrZXlzLgorIyBUaGUgdGljKDEpIHRyYW5zbGF0aW9uIGNvZGUgd2lsbCBjb21wbGFpbiBhbmQgZWxpZGUgaXQgaWYgaXQgbWFrZXMgYSBjcml0aWNhbAorIyBkaWZmZXJlbmNlICh0aGVyZSBpcyBzcGVjaWFsIGNvZGUgaW4gdGljIHRvIHJlY29nbml6ZSB0aGlzIHNpdHVhdGlvbikuCisjCisjIFllcywgQlNEIHRzZXQoMSkgdXNlcyBocGEuICBXZSBlbGlkZSBocGEvdnBhIGFueXdheSBiZWNhdXNlIHRoZSBtb3Rpb24KKyMgb3B0aW1pemVyIGluIEJTRCBjdXJzZXMgZGlkbid0IHVzZSB0aGVtLiAgVGhpcyBvbWlzc2lvbiBzZWVtcyB0byBiZSB0aGUKKyMgc2luZ2xlIG1vc3QgZWZmZWN0aXZlIG9uZSwgaXQgc2hvcnRlbmVkIHRoZSByZXNvbHZlZCBsZW5ndGggb2YgYWxsIHRoaXJ0ZWVuCisjIHByb2JsZW0gZW50cmllcyBpbiB0aGUgOS45LjAgdmVyc2lvbiBvZiB0aGUgdGVybWluZm8gbWFzdGVyIGJlbG93IGNyaXRpY2FsLgorIworIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGtlZXAgZjExIGFuZCBmMTIgZm9yIEVtYWNzIHVzZSwgYnV0IGEgY291cGxlIG9mIHRlcm1jYXAKKyMgdHJhbnNsYXRpb25zIGdvIGJhY2sgb3ZlciBjcml0aWNhbCBpZiB3ZSBkbyB0aGlzLiAgQXMgNC40QlNEIGN1cnNlcyBmYWRlcworIyBpbnRvIGhpc3RvcnkgYW5kIEdOVSB0ZXJtY2FwJ3MgYXBwbGljYXRpb24gYmFzZSBzaHJpbmtzIHRvd2FyZHMgYmVpbmcgR05VIAorIyBFbWFjcyBvbmx5LCB3ZSdsbCBwcm9iYWJseSBlbGlkZSBvdXQgc29tZSBCU0Qtb25seSBjYXBhYmlsaXRpZXMgaW4gb3JkZXIKKyMgdG8gYnV5IHNwYWNlIGZvciBub24tZXNzZW50aWFscyBFbWFjcyBpcyBzdGlsbCB1c2luZy4gIENhcGFiaWxpdGllcyBoaWdoCisjIG9uIHRoYXQgaGl0IGxpc3Q6IHJjLCBzYywgdWMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBTVEFOREFSRCBDQVBBQklMSVRJRVMKKyMKKyMlVGhlIGZvbGxvd2luZyBpcyBhIGNvbXBsZXRlIHRhYmxlIG9mIHRoZSBjYXBhYmlsaXRpZXMgaW5jbHVkZWQgaW4gYQorIyV0ZXJtaW5mbyBkZXNjcmlwdGlvbiBibG9jayBhbmQgYXZhaWxhYmxlIHRvIHRlcm1pbmZvLXVzaW5nIGNvZGUuICBJbiBlYWNoCisjJWxpbmUgb2YgdGhlIHRhYmxlLAorIyUKKyMlVGhlIFxmQnZhcmlhYmxlXGZSIGlzIHRoZSBuYW1lIGJ5IHdoaWNoIHRoZSBwcm9ncmFtbWVyIChhdCB0aGUgdGVybWluZm8gbGV2ZWwpCisjJWFjY2Vzc2VzIHRoZSBjYXBhYmlsaXR5LgorIyUKKyMlVGhlIFxmQmNhcG5hbWVcZlIgaXMgdGhlIHNob3J0IG5hbWUgdXNlZCBpbiB0aGUgdGV4dCBvZiB0aGUgZGF0YWJhc2UsCisjJWFuZCBpcyB1c2VkIGJ5IGEgcGVyc29uIHVwZGF0aW5nIHRoZSBkYXRhYmFzZS4KKyMlV2hlbmV2ZXIgcG9zc2libGUsIGNhcG5hbWVzIGFyZSBjaG9zZW4gdG8gYmUgdGhlIHNhbWUgYXMgb3Igc2ltaWxhciB0bworIyV0aGUgQU5TSSBYMy42NC0xOTc5IHN0YW5kYXJkIChub3cgc3VwZXJzZWRlZCBieSBFQ01BLTQ4LCB3aGljaCB1c2VzIAorIyVpZGVudGljYWwgb3IgdmVyeSBzaW1pbGFyIG5hbWVzKS4gIFNlbWFudGljcyBhcmUgYWxzbyBpbnRlbmRlZCB0byBtYXRjaAorIyV0aG9zZSBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKyMlCisjJVRoZSB0ZXJtY2FwIGNvZGUgaXMgdGhlIG9sZAorIyUuQiB0ZXJtY2FwCisjJWNhcGFiaWxpdHkgbmFtZSAoc29tZSBjYXBhYmlsaXRpZXMgYXJlIG5ldywgYW5kIGhhdmUgbmFtZXMgd2hpY2ggdGVybWNhcAorIyVkaWQgbm90IG9yaWdpbmF0ZSkuCisjJS5QCisjJUNhcGFiaWxpdHkgbmFtZXMgaGF2ZSBubyBoYXJkIGxlbmd0aCBsaW1pdCwgYnV0IGFuIGluZm9ybWFsIGxpbWl0IG9mIDUKKyMlY2hhcmFjdGVycyBoYXMgYmVlbiBhZG9wdGVkIHRvIGtlZXAgdGhlbSBzaG9ydCBhbmQgdG8gYWxsb3cgdGhlIHRhYnMgaW4KKyMldGhlIHNvdXJjZSBmaWxlCisjJS5CIENhcHMKKyMldG8gbGluZSB1cCBuaWNlbHkuCisjJQorIyVGaW5hbGx5LCB0aGUgZGVzY3JpcHRpb24gZmllbGQgYXR0ZW1wdHMgdG8gY29udmV5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlCisjJWNhcGFiaWxpdHkuICBZb3UgbWF5IGZpbmQgc29tZSBjb2RlcyBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQ6CisjJS5UUAorIyUoUCkKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgYmUgc3BlY2lmaWVkCisjJS5UUAorIyUjWzEtOV0KKyMlaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGluZGljYXRlcyB0aGF0IHRoZSBzdHJpbmcgaXMgcGFzc2VkIHRocm91Z2ggdHBhcm0gd2l0aAorIyVwYXJtcyBhcyBnaXZlbiAoI1xmSWlcZlApLgorIyUuVFAKKyMlKFAqKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSB2YXJ5IGluIHByb3BvcnRpb24gdG8gdGhlIG51bWJlciBvZgorIyVsaW5lcyBhZmZlY3RlZAorIyUuVFAKKyMlKCNcZFxmSWlcZlBcdSkKKyMlaW5kaWNhdGVzIHRoZSBcZklpXGZQXHV0aFxkIHBhcmFtZXRlci4KKyMlCisjJS5QUAorIyUgVGhlc2UgYXJlIHRoZSBib29sZWFuIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJCb29sZWFucwluYW1lCUNvZGVcZlIKK2F1dG9fbGVmdF9tYXJnaW4JCWJ3CWJvb2wJYncJLQktCVlCLUctCWN1YjEgd3JhcHMgZnJvbSBjb2x1bW4gMCB0byBsYXN0IGNvbHVtbgorYXV0b19yaWdodF9tYXJnaW4JCWFtCWJvb2wJYW0JLQktCVlCQ0dFCXRlcm1pbmFsIGhhcyBhdXRvbWF0aWMgbWFyZ2lucworbm9fZXNjX2N0bGMJCQl4c2IJYm9vbAl4YgktCS0JWUJDRy0JYmVlaGl2ZSAoZjE9ZXNjYXBlLCBmMj1jdHJsIEMpCitjZW9sX3N0YW5kb3V0X2dsaXRjaAkJeGhwCWJvb2wJeHMJLQktCVlCQ0dFCXN0YW5kb3V0IG5vdCBlcmFzZWQgYnkgb3ZlcndyaXRpbmcgKGhwKQorZWF0X25ld2xpbmVfZ2xpdGNoCQl4ZW5sCWJvb2wJeG4JLQktCVlCQ0dFCW5ld2xpbmUgaWdub3JlZCBhZnRlciA4MCBjb2xzIChjb25jZXB0KQorZXJhc2Vfb3ZlcnN0cmlrZQkJZW8JYm9vbAllbwktCS0JWUJDRy0JY2FuIGVyYXNlIG92ZXJzdHJpa2VzIHdpdGggYSBibGFuaworZ2VuZXJpY190eXBlCQkJZ24JYm9vbAlnbgktCS0JWUItRy0JZ2VuZXJpYyBsaW5lIHR5cGUKK2hhcmRfY29weQkJCWhjCWJvb2wJaGMJLQktCVlCQ0ctCWhhcmRjb3B5IHRlcm1pbmFsCitoYXNfbWV0YV9rZXkJCQlrbQlib29sCWttCS0JLQlZQi1HRQlIYXMgYSBtZXRhIGtleSAoaS5lLiwgc2V0cyA4dGgtYml0KQoraGFzX3N0YXR1c19saW5lCQkJaHMJYm9vbAlocwktCS0JWUItRy0JaGFzIGV4dHJhIHN0YXR1cyBsaW5lCitpbnNlcnRfbnVsbF9nbGl0Y2gJCWluCWJvb2wJaW4JLQktCVlCQ0dFCWluc2VydCBtb2RlIGRpc3Rpbmd1aXNoZXMgbnVsbHMKK21lbW9yeV9hYm92ZQkJCWRhCWJvb2wJZGEJLQktCVlCQ0ctCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGFib3ZlIHRoZSBzY3JlZW4KK21lbW9yeV9iZWxvdwkJCWRiCWJvb2wJZGIJLQktCVlCLUdFCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGJlbG93IHRoZSBzY3JlZW4KK21vdmVfaW5zZXJ0X21vZGUJCW1pcglib29sCW1pCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gaW5zZXJ0IG1vZGUKK21vdmVfc3RhbmRvdXRfbW9kZQkJbXNncglib29sCW1zCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gc3RhbmRvdXQgbW9kZQorb3Zlcl9zdHJpa2UJCQlvcwlib29sCW9zCS0JLQlZQkNHLQl0ZXJtaW5hbCBjYW4gb3ZlcnN0cmlrZQorc3RhdHVzX2xpbmVfZXNjX29rCQllc2xvawlib29sCWVzCS0JLQlZQi1HLQllc2NhcGUgY2FuIGJlIHVzZWQgb24gdGhlIHN0YXR1cyBsaW5lCitkZXN0X3RhYnNfbWFnaWNfc21zbwkJeHQJYm9vbAl4dAktCS0JWUJDR0UJdGFicyBkZXN0cnVjdGl2ZSwgbWFnaWMgc28gY2hhciAodDEwNjEpCit0aWxkZV9nbGl0Y2gJCQloeglib29sCWh6CS0JLQlZQi1HRQljYW5ub3QgcHJpbnQgfidzIChoYXplbHRpbmUpCit0cmFuc3BhcmVudF91bmRlcmxpbmUJCXVsCWJvb2wJdWwJLQktCVlCQ0dFCXVuZGVybGluZSBjaGFyYWN0ZXIgb3ZlcnN0cmlrZXMKK3hvbl94b2ZmCQkJeG9uCWJvb2wJeG8JLQktCVlCLS0tCXRlcm1pbmFsIHVzZXMgeG9uL3hvZmYgaGFuZHNoYWtpbmcKKyMgZW5kIGJvb2xlYW5zIGZvciBIUFVYIDksIDEwIChub24tY29sb3IgY3Vyc2VzKQorbmVlZHNfeG9uX3hvZmYJCQlueG9uCWJvb2wJbngJLQktCS0tLS0tCXBhZGRpbmcgd2lsbCBub3Qgd29yaywgeG9uL3hvZmYgcmVxdWlyZWQKK3BydHJfc2lsZW50CQkJbWM1aQlib29sCTVpCS0JLQktLS0tLQlwcmludGVyIHdpbGwgbm90IGVjaG8gb24gc2NyZWVuCitoYXJkX2N1cnNvcgkJCWNodHMJYm9vbAlIQwktCS0JLS0tLS0JY3Vyc29yIGlzIGhhcmQgdG8gc2VlCitub25fcmV2X3JtY3VwCQkJbnJybWMJYm9vbAlOUgktCS0JLS0tLS0Jc21jdXAgZG9lcyBub3QgcmV2ZXJzZSBybWN1cAorbm9fcGFkX2NoYXIJCQlucGMJYm9vbAlOUAktCS0JLS0tLS0JcGFkIGNoYXJhY3RlciBkb2VzIG5vdCBleGlzdAorbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbgkJbmRzY3IJYm9vbAlORAktCS0JLS0tLS0Jc2Nyb2xsaW5nIHJlZ2lvbiBpcyBub24tZGVzdHJ1Y3RpdmUKK2Nhbl9jaGFuZ2UJCQljY2MJYm9vbAljYwktCS0JLS0tLS0JdGVybWluYWwgY2FuIHJlLWRlZmluZSBleGlzdGluZyBjb2xvcnMKK2JhY2tfY29sb3JfZXJhc2UJCWJjZQlib29sCXV0CS0JLQktLS0tLQlzY3JlZW4gZXJhc2VkIHdpdGggYmFja2dyb3VuZCBjb2xvcgoraHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uCWhscwlib29sCWhsCS0JLQktLS0tLQl0ZXJtaW5hbCB1c2VzIG9ubHkgSExTIGNvbG9yIG5vdGF0aW9uIChUZWt0cm9uaXgpCitjb2xfYWRkcl9nbGl0Y2gJCQl4aHBhCWJvb2wJWUEJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciBocGEvbWhwYSBjYXBzCitjcl9jYW5jZWxzX21pY3JvX21vZGUJCWNyeG0JYm9vbAlZQgktCS0JLS0tLS0JdXNpbmcgY3IgdHVybnMgb2ZmIG1pY3JvIG1vZGUKK2hhc19wcmludF93aGVlbAkJCWRhaXN5CWJvb2wJWUMJLQktCS0tLS0tCXByaW50ZXIgbmVlZHMgb3BlcmF0b3IgdG8gY2hhbmdlIGNoYXJhY3RlciBzZXQKK3Jvd19hZGRyX2dsaXRjaAkJCXh2cGEJYm9vbAlZRAktCS0JLS0tLS0Jb25seSBwb3NpdGl2ZSBtb3Rpb24gZm9yIHZwYS9tdnBhIGNhcHMKK3NlbWlfYXV0b19yaWdodF9tYXJnaW4JCXNhbQlib29sCVlFCS0JLQktLS0tLQlwcmludGluZyBpbiBsYXN0IGNvbHVtbiBjYXVzZXMgY3IKK2NwaV9jaGFuZ2VzX3JlcwkJCWNwaXgJYm9vbAlZRgktCS0JLS0tLS0JY2hhbmdpbmcgY2hhcmFjdGVyIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorbHBpX2NoYW5nZXNfcmVzCQkJbHBpeAlib29sCVlHCS0JLQktLS0tLQljaGFuZ2luZyBsaW5lIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIG51bWVyaWMgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQk51bWVyaWMJbmFtZQlDb2RlXGZSCitjb2x1bW5zCQkJCWNvbHMJbnVtCWNvCS0JLQlZQkNHRQludW1iZXIgb2YgY29sdW1ucyBpbiBhIGxpbmUKK2luaXRfdGFicwkJCWl0CW51bQlpdAktCS0JWUItRy0JdGFicyBpbml0aWFsbHkgZXZlcnkgIyBzcGFjZXMKK2xpbmVzCQkJCWxpbmVzCW51bQlsaQktCS0JWUJDR0UJbnVtYmVyIG9mIGxpbmVzIG9uIHNjcmVlbiBvciBwYWdlCitsaW5lc19vZl9tZW1vcnkJCQlsbQludW0JbG0JLQktCVlCLUctCWxpbmVzIG9mIG1lbW9yeSBpZiA+IGxpbmUuIDAgbWVhbnMgdmFyaWVzCittYWdpY19jb29raWVfZ2xpdGNoCQl4bWMJbnVtCXNnCS0JLQlZQkNHRQludW1iZXIgb2YgYmxhbmsgY2hhcmFjdGVycyBsZWZ0IGJ5IHNtc28gb3Igcm1zbworcGFkZGluZ19iYXVkX3JhdGUJCXBiCW51bQlwYgktCS0JWUItR0UJbG93ZXN0IGJhdWQgcmF0ZSB3aGVyZSBwYWRkaW5nIG5lZWRlZAordmlydHVhbF90ZXJtaW5hbAkJdnQJbnVtCXZ0CS0JLQlZQi0tLQl2aXJ0dWFsIHRlcm1pbmFsIG51bWJlciAoQ0IvdW5peCkKK3dpZHRoX3N0YXR1c19saW5lCQl3c2wJbnVtCXdzCS0JLQlZQi1HLQludW1iZXIgb2YgY29sdW1ucyBpbiBzdGF0dXMgbGluZQorIyBlbmQgbnVtYmVycyBmb3IgSFBVWCA5LCAxMCAobm9uLWNvbG9yIGN1cnNlcykKK251bV9sYWJlbHMJCQlubGFiCW51bQlObAktCS0JLS0tLS0JbnVtYmVyIG9mIGxhYmVscyBvbiBzY3JlZW4KK2xhYmVsX2hlaWdodAkJCWxoCW51bQlsaAktCS0JLS0tLS0Jcm93cyBpbiBlYWNoIGxhYmVsCitsYWJlbF93aWR0aAkJCWx3CW51bQlsdwktCS0JLS0tLS0JY29sdW1ucyBpbiBlYWNoIGxhYmVsCittYXhfYXR0cmlidXRlcwkJCW1hCW51bQltYQktCS0JWUJDLS0JbWF4aW11bSBjb21iaW5lZCBhdHRyaWJ1dGVzIHRlcm1pbmFsIGNhbiBoYW5kbGUKK21heGltdW1fd2luZG93cwkJCXdudW0JbnVtCU1XCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBkZWZpbmVhYmxlIHdpbmRvd3MKKyMgVGhlc2UgY2FtZSBpbiB3aXRoIFNWcjQncyBjb2xvciBzdXBwb3J0CittYXhfY29sb3JzCQkJY29sb3JzCW51bQlDbwktCS0JLS0tLS0JbWF4aW11bSBudW1iZXIgb2YgY29sb3JzIG9uIHNjcmVlbgorbWF4X3BhaXJzCQkJcGFpcnMJbnVtCXBhCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvci1wYWlycyBvbiB0aGUgc2NyZWVuCitub19jb2xvcl92aWRlbwkJCW5jdgludW0JTkMJLQktCS0tLS0tCXZpZGVvIGF0dHJpYnV0ZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCB3aXRoIGNvbG9ycworIyUuVEUKKyMlLmFkCisjJQorIyVUaGUgZm9sbG93aW5nIG51bWVyaWMgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCBhcmUgbm90IHlldCBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4gIFRoZXkgY2FtZSBpbiB3aXRoIFNWcjQncworIyVwcmludGVyIHN1cHBvcnQuCisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCTnVtZXJpYwluYW1lCUNvZGVcZlIKK2J1ZmZlcl9jYXBhY2l0eQkJCWJ1ZnN6CW51bQlZYQktCS0JLS0tLS0JbnVtYmVycyBvZiBieXRlcyBidWZmZXJlZCBiZWZvcmUgcHJpbnRpbmcKK2RvdF92ZXJ0X3NwYWNpbmcJCXNwaW52CW51bQlZYgktCS0JLS0tLS0Jc3BhY2luZyBvZiBwaW5zIHZlcnRpY2FsbHkgaW4gcGlucyBwZXIgaW5jaAorZG90X2hvcnpfc3BhY2luZwkJc3BpbmgJbnVtCVljCS0JLQktLS0tLQlzcGFjaW5nIG9mIGRvdHMgaG9yaXpvbnRhbGx5IGluIGRvdHMgcGVyIGluY2gKK21heF9taWNyb19hZGRyZXNzCQltYWRkcgludW0JWWQJLQktCS0tLS0tCW1heGltdW0gdmFsdWUgaW4gbWljcm9fLi4uX2FkZHJlc3MKK21heF9taWNyb19qdW1wCQkJbWp1bXAJbnVtCVllCS0JLQktLS0tLQltYXhpbXVtIHZhbHVlIGluIHBhcm1fLi4uX21pY3JvCittaWNyb19jb2xfc2l6ZQkJCW1jcwludW0JWWYJLQktCS0tLS0tCWNoYXJhY3RlciBzdGVwIHNpemUgd2hlbiBpbiBtaWNybyBtb2RlCittaWNyb19saW5lX3NpemUJCQltbHMJbnVtCVlnCS0JLQktLS0tLQlsaW5lIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK251bWJlcl9vZl9waW5zCQkJbnBpbnMJbnVtCVloCS0JLQktLS0tLQludW1iZXJzIG9mIHBpbnMgaW4gcHJpbnQtaGVhZAorb3V0cHV0X3Jlc19jaGFyCQkJb3JjCW51bQlZaQktCS0JLS0tLS0JaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBsaW5lCitvdXRwdXRfcmVzX2xpbmUJCQlvcmwJbnVtCVlqCS0JLQktLS0tLQl2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBsaW5lCitvdXRwdXRfcmVzX2hvcnpfaW5jaAkJb3JoaQludW0JWWsJLQktCS0tLS0tCWhvcml6b250YWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgaW5jaAorb3V0cHV0X3Jlc192ZXJ0X2luY2gJCW9ydmkJbnVtCVlsCS0JLQktLS0tLQl2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIHVuaXRzIHBlciBpbmNoCitwcmludF9yYXRlCQkJY3BzCW51bQlZbQktCS0JLS0tLS0JcHJpbnQgcmF0ZSBpbiBjaGFyYWN0ZXJzIHBlciBzZWNvbmQKK3dpZGVfY2hhcl9zaXplCQkJd2lkY3MJbnVtCVluCS0JLQktLS0tLQljaGFyYWN0ZXIgc3RlcCBzaXplIHdoZW4gaW4gZG91YmxlIHdpZGUgbW9kZQorYnV0dG9ucwkJCQlidG5zCW51bQlCVAktCS0JLS0tLS0JbnVtYmVyIG9mIGJ1dHRvbnMgb24gbW91c2UKK2JpdF9pbWFnZV9lbnR3aW5pbmcJCWJpdHdpbgludW0JWW8JLQktCS0tLS0tCW51bWJlciBvZiBwYXNzZXMgZm9yIGVhY2ggYml0LWltYWdlIHJvdworYml0X2ltYWdlX3R5cGUJCQliaXR5cGUJbnVtCVlwCS0JLQktLS0tLQl0eXBlIG9mIGJpdC1pbWFnZSBkZXZpY2UKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBzdHJpbmcgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2JhY2tfdGFiCQkJY2J0CXN0cglidAktCQktCVlCQ0dFCWJhY2sgdGFiIChQKQorYmVsbAkJCQliZWwJc3RyCWJsCS0JCS0JWUItR0UJYXVkaWJsZSBzaWduYWwgKGJlbGwpIChQKQorY2FycmlhZ2VfcmV0dXJuCQkJY3IJc3RyCWNyCS0JCS0JWUJDR0UJY2FycmlhZ2UgcmV0dXJuIChQKikgKFAqKQorY2hhbmdlX3Njcm9sbF9yZWdpb24JCWNzcglzdHIJY3MJLQkJLQlZQkNHRQljaGFuZ2UgcmVnaW9uIHRvIGxpbmUgIzEgdG8gbGluZSAjMiAoUCkKK2NsZWFyX2FsbF90YWJzCQkJdGJjCXN0cgljdAktCQktCVlCLUctCWNsZWFyIGFsbCB0YWIgc3RvcHMgKFApCitjbGVhcl9zY3JlZW4JCQljbGVhcglzdHIJY2wJLQkJLQlZQkNHRQljbGVhciBzY3JlZW4gYW5kIGhvbWUgY3Vyc29yIChQKikKK2Nscl9lb2wJCQkJZWwJc3RyCWNlCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIGxpbmUgKFApCitjbHJfZW9zCQkJCWVkCXN0cgljZAktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBzY3JlZW4gKFAqKQorY29sdW1uX2FkZHJlc3MJCQlocGEJc3RyCWNoCS0JCS0JLUItR0UqCWhvcml6b250YWwgcG9zaXRpb24gIzEsIGFic29sdXRlIChQKQorY29tbWFuZF9jaGFyYWN0ZXIJCWNtZGNoCXN0cglDQwktCQktCVlCLUctCXRlcm1pbmFsIHNldHRhYmxlIGNtZCBjaGFyYWN0ZXIgaW4gcHJvdG90eXBlICE/CitjdXJzb3JfYWRkcmVzcwkJCWN1cAlzdHIJY20JLQkJLQlZQkNHRQltb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3JfZG93bgkJCWN1ZDEJc3RyCWRvCS0JCS0JWUJDR0UJZG93biBvbmUgbGluZQorY3Vyc29yX2hvbWUJCQlob21lCXN0cglobwktCQktCVlCQ0dFCWhvbWUgY3Vyc29yIChpZiBubyBjdXApCitjdXJzb3JfaW52aXNpYmxlCQljaXZpcwlzdHIJdmkJLQkJLQlZQi1HLQltYWtlIGN1cnNvciBpbnZpc2libGUKK2N1cnNvcl9sZWZ0CQkJY3ViMQlzdHIJbGUJLQkJLQlZQkNHRQltb3ZlIGxlZnQgb25lIHNwYWNlCitjdXJzb3JfbWVtX2FkZHJlc3MJCW1yY3VwCXN0cglDTQktCQktCVlCLUctCW1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZywgbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX25vcm1hbAkJCWNub3JtCXN0cgl2ZQktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIGFwcGVhciBub3JtYWwgKHVuZG8gY2l2aXMvY3Z2aXMpCitjdXJzb3JfcmlnaHQJCQljdWYxCXN0cgluZAktCQktCVlCQ0dFCW5vbi1kZXN0cnVjdGl2ZSBzcGFjZSAobW92ZSByaWdodCBvbmUgc3BhY2UpCitjdXJzb3JfdG9fbGwJCQlsbAlzdHIJbGwJLQkJLQlZQkNHRQlsYXN0IGxpbmUsIGZpcnN0IGNvbHVtbiAoaWYgbm8gY3VwKQorY3Vyc29yX3VwCQkJY3V1MQlzdHIJdXAJLQkJLQlZQkNHRQl1cCBvbmUgbGluZQorY3Vyc29yX3Zpc2libGUJCQljdnZpcwlzdHIJdnMJLQkJLQlZQkNHRQltYWtlIGN1cnNvciB2ZXJ5IHZpc2libGUKK2RlbGV0ZV9jaGFyYWN0ZXIJCWRjaDEJc3RyCWRjCS0JCS0JWUJDR0UJZGVsZXRlIGNoYXJhY3RlciAoUCopCitkZWxldGVfbGluZQkJCWRsMQlzdHIJZGwJLQkJLQlZQkNHRQlkZWxldGUgbGluZSAoUCopCitkaXNfc3RhdHVzX2xpbmUJCQlkc2wJc3RyCWRzCS0JCS0JWUItRy0JZGlzYWJsZSBzdGF0dXMgbGluZQorZG93bl9oYWxmX2xpbmUJCQloZAlzdHIJaGQJLQkJLQlZQi1HLQloYWxmIGEgbGluZSBkb3duCitlbnRlcl9hbHRfY2hhcnNldF9tb2RlCQlzbWFjcwlzdHIJYXMJLQkJLQlZQi1HLQlzdGFydCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2VudGVyX2JsaW5rX21vZGUJCWJsaW5rCXN0cgltYgktCQktCVlCLUctCXR1cm4gb24gYmxpbmtpbmcKK2VudGVyX2JvbGRfbW9kZQkJCWJvbGQJc3RyCW1kCS0JCS0JWUItRy0JdHVybiBvbiBib2xkIChleHRyYSBicmlnaHQpIG1vZGUKK2VudGVyX2NhX21vZGUJCQlzbWN1cAlzdHIJdGkJLQkJLQlZQkNHRQlzdHJpbmcgdG8gc3RhcnQgcHJvZ3JhbXMgdXNpbmcgY3VwCitlbnRlcl9kZWxldGVfbW9kZQkJc21kYwlzdHIJZG0JLQkJLQlZQkNHRQllbnRlciBkZWxldGUgbW9kZQorZW50ZXJfZGltX21vZGUJCQlkaW0Jc3RyCW1oCS0JCS0JWUItRy0JdHVybiBvbiBoYWxmLWJyaWdodCBtb2RlCitlbnRlcl9pbnNlcnRfbW9kZQkJc21pcglzdHIJaW0JLQkJLQlZQkNHRQllbnRlciBpbnNlcnQgbW9kZQorZW50ZXJfc2VjdXJlX21vZGUJCWludmlzCXN0cgltawktCQktCS1CLUctKgl0dXJuIG9uIGJsYW5rIG1vZGUgKGNoYXJhY3RlcnMgaW52aXNpYmxlKQorZW50ZXJfcHJvdGVjdGVkX21vZGUJCXByb3QJc3RyCW1wCS0JCS0JLUItRy0qCXR1cm4gb24gcHJvdGVjdGVkIG1vZGUKK2VudGVyX3JldmVyc2VfbW9kZQkJcmV2CXN0cgltcgktCQktCVlCLUctCXR1cm4gb24gcmV2ZXJzZSB2aWRlbyBtb2RlCitlbnRlcl9zdGFuZG91dF9tb2RlCQlzbXNvCXN0cglzbwktCQktCVlCQ0dFCWJlZ2luIHN0YW5kb3V0IG1vZGUKK2VudGVyX3VuZGVybGluZV9tb2RlCQlzbXVsCXN0cgl1cwktCQktCVlCQ0dFCWJlZ2luIHVuZGVybGluZSBtb2RlCitlcmFzZV9jaGFycwkJCWVjaAlzdHIJZWMJLQkJLQlZQi1HLQllcmFzZSAjMSBjaGFyYWN0ZXJzIChQKQorZXhpdF9hbHRfY2hhcnNldF9tb2RlCQlybWFjcwlzdHIJYWUJLQkJLQlZQi1HLQllbmQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitleGl0X2F0dHJpYnV0ZV9tb2RlCQlzZ3IwCXN0cgltZQktCQktCVlCLUdFCXR1cm4gb2ZmIGFsbCBhdHRyaWJ1dGVzCitleGl0X2NhX21vZGUJCQlybWN1cAlzdHIJdGUJLQkJLQlZQkNHRQlzdHJpbmdzIHRvIGVuZCBwcm9ncmFtcyB1c2luZyBjdXAKK2V4aXRfZGVsZXRlX21vZGUJCXJtZGMJc3RyCWVkCS0JCS0JWUJDR0UJZW5kIGRlbGV0ZSBtb2RlCitleGl0X2luc2VydF9tb2RlCQlybWlyCXN0cgllaQktCQktCVlCQ0dFCWV4aXQgaW5zZXJ0IG1vZGUKK2V4aXRfc3RhbmRvdXRfbW9kZQkJcm1zbwlzdHIJc2UJLQkJLQlZQkNHRQlleGl0IHN0YW5kb3V0IG1vZGUKK2V4aXRfdW5kZXJsaW5lX21vZGUJCXJtdWwJc3RyCXVlCS0JCS0JWUJDR0UJZXhpdCB1bmRlcmxpbmUgbW9kZQorZmxhc2hfc2NyZWVuCQkJZmxhc2gJc3RyCXZiCS0JCS0JWUJDR0UJdmlzaWJsZSBiZWxsIChtYXkgbm90IG1vdmUgY3Vyc29yKQorZm9ybV9mZWVkCQkJZmYJc3RyCWZmCS0JCS0JWUItRy0JaGFyZGNvcHkgdGVybWluYWwgcGFnZSBlamVjdCAoUCopCitmcm9tX3N0YXR1c19saW5lCQlmc2wJc3RyCWZzCS0JCS0JWUItRy0JcmV0dXJuIGZyb20gc3RhdHVzIGxpbmUKK2luaXRfMXN0cmluZwkJCWlzMQlzdHIJaTEJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfMnN0cmluZwkJCWlzMglzdHIJaXMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfM3N0cmluZwkJCWlzMwlzdHIJaTMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfZmlsZQkJCWlmCXN0cglpZgktCQktCVlCLUctCW5hbWUgb2YgaW5pdGlhbGl6YXRpb24gZmlsZQoraW5zZXJ0X2NoYXJhY3RlcgkJaWNoMQlzdHIJaWMJLQkJLQlZQkNHRQlpbnNlcnQgY2hhcmFjdGVyIChQKQoraW5zZXJ0X2xpbmUJCQlpbDEJc3RyCWFsCS0JCS0JWUJDR0UJaW5zZXJ0IGxpbmUgKFAqKQoraW5zZXJ0X3BhZGRpbmcJCQlpcAlzdHIJaXAJLQkJLQlZQkNHRQlpbnNlcnQgcGFkZGluZyBhZnRlciBpbnNlcnRlZCBjaGFyYWN0ZXIKK2tleV9iYWNrc3BhY2UJCQlrYnMJc3RyCWtiCUtFWV9CQUNLU1BBQ0UJMDQwNwlZQi1HLQliYWNrc3BhY2Uga2V5CitrZXlfY2F0YWIJCQlrdGJjCXN0cglrYQlLRVlfQ0FUQUIJMDUyNgktQi1HLSoJY2xlYXItYWxsLXRhYnMga2V5CitrZXlfY2xlYXIJCQlrY2xyCXN0cglrQwlLRVlfQ0xFQVIJMDUxNQktQi1HLSoJY2xlYXItc2NyZWVuIG9yIGVyYXNlIGtleQora2V5X2N0YWIJCQlrY3RhYglzdHIJa3QJS0VZX0NUQUIJMDUyNQktQi1HLSoJY2xlYXItdGFiIGtleQora2V5X2RjCQkJCWtkY2gxCXN0cglrRAlLRVlfREMJCTA1MTIJWUItRy0JZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9kbAkJCQlrZGwxCXN0cglrTAlLRVlfREwJCTA1MTAJLUItRy0qCWRlbGV0ZS1saW5lIGtleQora2V5X2Rvd24JCQlrY3VkMQlzdHIJa2QJS0VZX0RPV04JMDQwMglZQkNHRQlkb3duLWFycm93IGtleQora2V5X2VpYwkJCQlrcm1pcglzdHIJa00JS0VZX0VJQwkJMDUxNAktQi1HLSoJc2VudCBieSBybWlyIG9yIHNtaXIgaW4gaW5zZXJ0IG1vZGUKK2tleV9lb2wJCQkJa2VsCXN0cglrRQlLRVlfRU9MCQkwNTE3CS1CLUctKgljbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9lb3MJCQkJa2VkCXN0cglrUwlLRVlfRU9TCQkwNTE2CS1CLUctKgljbGVhci10by1lbmQtb2Ytc2NyZWVuIGtleQora2V5X2YwCQkJCWtmMAlzdHIJazAJS0VZX0YoMCkJMDQxMAlZQkNHRQlGMCBmdW5jdGlvbiBrZXkKK2tleV9mMQkJCQlrZjEJc3RyCWsxCUtFWV9GKDEpCS0JWUJDR0UJRjEgZnVuY3Rpb24ga2V5CitrZXlfZjEwCQkJCWtmMTAJc3RyCWs7CUtFWV9GKDEwKQktCS0tLS1FCUYxMCBmdW5jdGlvbiBrZXkKK2tleV9mMgkJCQlrZjIJc3RyCWsyCUtFWV9GKDIpCS0JWUJDR0UJRjIgZnVuY3Rpb24ga2V5CitrZXlfZjMJCQkJa2YzCXN0cglrMwlLRVlfRigzKQktCVlCQ0dFCUYzIGZ1bmN0aW9uIGtleQora2V5X2Y0CQkJCWtmNAlzdHIJazQJS0VZX0YoNCkJLQlZQkNHRQlGNCBmdW5jdGlvbiBrZXkKK2tleV9mNQkJCQlrZjUJc3RyCWs1CUtFWV9GKDUpCS0JWUJDR0UJRjUgZnVuY3Rpb24ga2V5CitrZXlfZjYJCQkJa2Y2CXN0cglrNglLRVlfRig2KQktCVlCQ0dFCUY2IGZ1bmN0aW9uIGtleQora2V5X2Y3CQkJCWtmNwlzdHIJazcJS0VZX0YoNykJLQlZQkNHRQlGNyBmdW5jdGlvbiBrZXkKK2tleV9mOAkJCQlrZjgJc3RyCWs4CUtFWV9GKDgpCS0JWUJDR0UJRjggZnVuY3Rpb24ga2V5CitrZXlfZjkJCQkJa2Y5CXN0cglrOQlLRVlfRig5KQktCVlCQ0dFCUY5IGZ1bmN0aW9uIGtleQora2V5X2hvbWUJCQlraG9tZQlzdHIJa2gJS0VZX0hPTUUJMDQwNglZQkNHRQlob21lIGtleQora2V5X2ljCQkJCWtpY2gxCXN0cglrSQlLRVlfSUMJCTA1MTMJWUItR0UJaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9pbAkJCQlraWwxCXN0cglrQQlLRVlfSUwJCTA1MTEJLUItRy0qCWluc2VydC1saW5lIGtleQora2V5X2xlZnQJCQlrY3ViMQlzdHIJa2wJS0VZX0xFRlQJMDQwNAlZQkNHRQlsZWZ0LWFycm93IGtleQora2V5X2xsCQkJCWtsbAlzdHIJa0gJS0VZX0xMCQkwNTMzCVlCLUctCWxvd2VyLWxlZnQga2V5IChob21lIGRvd24pCitrZXlfbnBhZ2UJCQlrbnAJc3RyCWtOCUtFWV9OUEFHRQkwNTIyCVlCLUdFCW5leHQtcGFnZSBrZXkKK2tleV9wcGFnZQkJCWtwcAlzdHIJa1AJS0VZX1BQQUdFCTA1MjMJWUItR0UJcHJldmlvdXMtcGFnZSBrZXkKK2tleV9yaWdodAkJCWtjdWYxCXN0cglrcglLRVlfUklHSFQJMDQwNQlZQkNHRQlyaWdodC1hcnJvdyBrZXkKK2tleV9zZgkJCQlraW5kCXN0cglrRglLRVlfU0YJCTA1MjAJLUItRy0qCXNjcm9sbC1mb3J3YXJkIGtleQora2V5X3NyCQkJCWtyaQlzdHIJa1IJS0VZX1NSCQkwNTIxCS1CLUctKglzY3JvbGwtYmFja3dhcmQga2V5CitrZXlfc3RhYgkJCWtodHMJc3RyCWtUCUtFWV9TVEFCCTA1MjQJLUItRy0qCXNldC10YWIga2V5CitrZXlfdXAJCQkJa2N1dTEJc3RyCWt1CUtFWV9VUAkJMDQwMwlZQkNHRQl1cC1hcnJvdyBrZXkKK2tleXBhZF9sb2NhbAkJCXJta3gJc3RyCWtlCS0JCS0JWUJDR0UJbGVhdmUgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitrZXlwYWRfeG1pdAkJCXNta3gJc3RyCWtzCS0JCS0JWUJDR0UJZW50ZXIgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitsYWJfZjAJCQkJbGYwCXN0cglsMAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjAgaWYgbm90IGYwCitsYWJfZjEJCQkJbGYxCXN0cglsMQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEgaWYgbm90IGYxCitsYWJfZjEwCQkJCWxmMTAJc3RyCWxhCS0JCS0JLS0tLS0JbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxMCBpZiBub3QgZjEwCitsYWJfZjIJCQkJbGYyCXN0cglsMgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjIgaWYgbm90IGYyCitsYWJfZjMJCQkJbGYzCXN0cglsMwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjMgaWYgbm90IGYzCitsYWJfZjQJCQkJbGY0CXN0cglsNAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjQgaWYgbm90IGY0CitsYWJfZjUJCQkJbGY1CXN0cglsNQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjUgaWYgbm90IGY1CitsYWJfZjYJCQkJbGY2CXN0cglsNgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjYgaWYgbm90IGY2CitsYWJfZjcJCQkJbGY3CXN0cglsNwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjcgaWYgbm90IGY3CitsYWJfZjgJCQkJbGY4CXN0cglsOAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjggaWYgbm90IGY4CitsYWJfZjkJCQkJbGY5CXN0cglsOQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjkgaWYgbm90IGY5CittZXRhX29mZgkJCXJtbQlzdHIJbW8JLQkJLQlZQi1HLSoJdHVybiBvZmYgbWV0YSBtb2RlCittZXRhX29uCQkJCXNtbQlzdHIJbW0JLQkJLQlZQi1HLSoJdHVybiBvbiBtZXRhIG1vZGUgKDh0aC1iaXQgb24pCituZXdsaW5lCQkJCW5lbAlzdHIJbncJLQkJLQlZQi1HLSoJbmV3bGluZSAoYmVoYXZlIGxpa2UgY3IgZm9sbG93ZWQgYnkgbGYpCitwYWRfY2hhcgkJCXBhZAlzdHIJcGMJLQkJLQlZQkNHRQlwYWRkaW5nIGNoYXIgKGluc3RlYWQgb2YgbnVsbCkKK3Bhcm1fZGNoCQkJZGNoCXN0cglEQwktCQktCVlCLUdFCWRlbGV0ZSAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1fZGVsZXRlX2xpbmUJCWRsCXN0cglETAktCQktCVlCQ0dFCWRlbGV0ZSAjMSBsaW5lcyAoUCopCitwYXJtX2Rvd25fY3Vyc29yCQljdWQJc3RyCURPCS0JCS0JWUJDR0UJZG93biAjMSBsaW5lcyAoUCopCitwYXJtX2ljaAkJCWljaAlzdHIJSUMJLQkJLQlZQi1HRQlpbnNlcnQgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2luZGV4CQkJaW5kbglzdHIJU0YJLQkJLQlZQkNHLQlzY3JvbGwgZm9yd2FyZCAjMSBsaW5lcyAoUCkKK3Bhcm1faW5zZXJ0X2xpbmUJCWlsCXN0cglBTAktCQktCVlCQ0dFCWluc2VydCAjMSBsaW5lcyAoUCopCitwYXJtX2xlZnRfY3Vyc29yCQljdWIJc3RyCUxFCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IChQKQorcGFybV9yaWdodF9jdXJzb3IJCWN1ZglzdHIJUkkJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IChQKikKK3Bhcm1fcmluZGV4CQkJcmluCXN0cglTUgktCQktCVlCQ0ctCXNjcm9sbCBiYWNrICMxIGxpbmVzIChQKQorcGFybV91cF9jdXJzb3IJCQljdXUJc3RyCVVQCS0JCS0JWUJDR0UJdXAgIzEgbGluZXMgKFAqKQorcGtleV9rZXkJCQlwZmtleQlzdHIJcGsJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMgorcGtleV9sb2NhbAkJCXBmbG9jCXN0cglwbAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIGV4ZWN1dGUgc3RyaW5nICMyCitwa2V5X3htaXQJCQlwZngJc3RyCXB4CS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHJhbnNtaXQgc3RyaW5nICMyCitwcmludF9zY3JlZW4JCQltYzAJc3RyCXBzCS0JCS0JLUItRy0qCXByaW50IGNvbnRlbnRzIG9mIHNjcmVlbgorcHJ0cl9vZmYJCQltYzQJc3RyCXBmCS0JCS0JLUItRy0qCXR1cm4gb2ZmIHByaW50ZXIKK3BydHJfb24JCQkJbWM1CXN0cglwbwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIKK3JlcGVhdF9jaGFyCQkJcmVwCXN0cglycAktCQktCVlCLUdFCXJlcGVhdCBjaGFyICMxICMyIHRpbWVzIChQKikKK3Jlc2V0XzFzdHJpbmcJCQlyczEJc3RyCXIxCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8yc3RyaW5nCQkJcnMyCXN0cglyMgktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfM3N0cmluZwkJCXJzMwlzdHIJcjMJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0X2ZpbGUJCQlyZglzdHIJcmYJLQkJLQktQi0tLQluYW1lIG9mIHJlc2V0IGZpbGUKK3Jlc3RvcmVfY3Vyc29yCQkJcmMJc3RyCXJjCS0JCS0JWUJDRy0JcmVzdG9yZSBjdXJzb3IgdG8gcG9zaXRpb24gb2YgbGFzdCBzYXZlX2N1cnNvcgorcm93X2FkZHJlc3MJCQl2cGEJc3RyCWN2CS0JCS0JLUItR0UqCXZlcnRpY2FsIHBvc2l0aW9uICMxIGFic29sdXRlIChQKQorc2F2ZV9jdXJzb3IJCQlzYwlzdHIJc2MJLQkJLQlZQkNHLQlzYXZlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIChQKQorc2Nyb2xsX2ZvcndhcmQJCQlpbmQJc3RyCXNmCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgdXAgKFApCitzY3JvbGxfcmV2ZXJzZQkJCXJpCXN0cglzcgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IGRvd24gKFApCitzZXRfYXR0cmlidXRlcwkJCXNncglzdHIJc2EJLQkJLQlZQi1HLQlkZWZpbmUgdmlkZW8gYXR0cmlidXRlcyAjMS0jOSAoUEc5KQorc2V0X3RhYgkJCQlodHMJc3RyCXN0CS0JCS0JWUItRy0Jc2V0IGEgdGFiIGluIGV2ZXJ5IHJvdywgY3VycmVudCBjb2x1bW5zCitzZXRfd2luZG93CQkJd2luZAlzdHIJd2kJLQkJLQktQi1HRQljdXJyZW50IHdpbmRvdyBpcyBsaW5lcyAjMS0jMiBjb2xzICMzLSM0Cit0YWIJCQkJaHQJc3RyCXRhCS0JCS0JWUJDR0UJdGFiIHRvIG5leHQgOC1zcGFjZSBoYXJkd2FyZSB0YWIgc3RvcAordG9fc3RhdHVzX2xpbmUJCQl0c2wJc3RyCXRzCS0JCS0JWUItRy0JbW92ZSB0byBzdGF0dXMgbGluZSwgY29sdW1uICMxCit1bmRlcmxpbmVfY2hhcgkJCXVjCXN0cgl1YwktCQktCVlCQ0ctCXVuZGVybGluZSBjaGFyIGFuZCBtb3ZlIHBhc3QgaXQKK3VwX2hhbGZfbGluZQkJCWh1CXN0cglodQktCQktCVlCLUctCWhhbGYgYSBsaW5lIHVwCitpbml0X3Byb2cJCQlpcHJvZwlzdHIJaVAJLQkJLQktQi0tLQlwYXRoIG5hbWUgb2YgcHJvZ3JhbSBmb3IgaW5pdGlhbGl6YXRpb24KK2tleV9hMQkJCQlrYTEJc3RyCUsxCUtFWV9BMQkJMDUzNAlZQi1HRQl1cHBlciBsZWZ0IG9mIGtleXBhZAora2V5X2EzCQkJCWthMwlzdHIJSzMJS0VZX0EzCQkwNTM1CVlCLUdFCXVwcGVyIHJpZ2h0IG9mIGtleXBhZAora2V5X2IyCQkJCWtiMglzdHIJSzIJS0VZX0IyCQkwNTM2CVlCLUdFCWNlbnRlciBvZiBrZXlwYWQKK2tleV9jMQkJCQlrYzEJc3RyCUs0CUtFWV9DMQkJMDUzNwlZQi1HRQlsb3dlciBsZWZ0IG9mIGtleXBhZAora2V5X2MzCQkJCWtjMwlzdHIJSzUJS0VZX0MzCQkwNTQwCVlCLUdFCWxvd2VyIHJpZ2h0IG9mIGtleXBhZAorcHJ0cl9ub24JCQltYzVwCXN0cglwTwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIgZm9yICMxIGJ5dGVzCisjCisjIFNWcjEgY2FwYWJpbGl0aWVzIHN0b3AgaGVyZS4JSUJNJ3MgdmVyc2lvbiBvZiB0ZXJtaW5mbyBpcyB0aGUgc2FtZSBhcworIyBTVnI0IHVwIHRvIHRoaXMgcG9pbnQsIGJ1dCBoYXMgYSBkaWZmZXJlbnQgc2V0IGFmdGVyd2FyZHMuCisjCisjIEhQVVggZGVmaW5lcyB0aGVzZSBpZiBfX0hQX0NVUlNFU19DT01QQVQgaXMgZGVmaW5lZDoKK21lbW9yeV9sb2NrCQkJbWVtbAlzdHIJbWwJLQkJLQktLS0tSwlsb2NrIG1lbW9yeSBhYm92ZSBjdXJzb3IKK21lbW9yeV91bmxvY2sJCQltZW11CXN0cgltdQktCQktCS0tLS1LCXVubG9jayBtZW1vcnkKKyMKKyMKK3BsYWJfbm9ybQkJCXBsbglzdHIJcG4JLQkJLQktLS0tLQlwcm9ncmFtIGxhYmVsICMxIHRvIHNob3cgc3RyaW5nICMyCitsYWJlbF9vbgkJCXNtbG4Jc3RyCUxPCS0JCS0JLS0tLS0JdHVybiBvbiBzb2Z0IGxhYmVscworbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscwora2V5X2YxMQkJCQlrZjExCXN0cglGMQlLRVlfRigxMSkJLQktLS0tRQlGMTEgZnVuY3Rpb24ga2V5CitrZXlfZjEyCQkJCWtmMTIJc3RyCUYyCUtFWV9GKDEyKQktCS0tLS1FCUYxMiBmdW5jdGlvbiBrZXkKK2tleV9mMTMJCQkJa2YxMwlzdHIJRjMJS0VZX0YoMTMpCS0JLS0tLUUJRjEzIGZ1bmN0aW9uIGtleQora2V5X2YxNAkJCQlrZjE0CXN0cglGNAlLRVlfRigxNCkJLQktLS0tRQlGMTQgZnVuY3Rpb24ga2V5CitrZXlfZjE1CQkJCWtmMTUJc3RyCUY1CUtFWV9GKDE1KQktCS0tLS1FCUYxNSBmdW5jdGlvbiBrZXkKK2tleV9mMTYJCQkJa2YxNglzdHIJRjYJS0VZX0YoMTYpCS0JLS0tLUUJRjE2IGZ1bmN0aW9uIGtleQora2V5X2YxNwkJCQlrZjE3CXN0cglGNwlLRVlfRigxNykJLQktLS0tRQlGMTcgZnVuY3Rpb24ga2V5CitrZXlfZjE4CQkJCWtmMTgJc3RyCUY4CUtFWV9GKDE4KQktCS0tLS1FCUYxOCBmdW5jdGlvbiBrZXkKK2tleV9mMTkJCQkJa2YxOQlzdHIJRjkJS0VZX0YoMTkpCS0JLS0tLUUJRjE5IGZ1bmN0aW9uIGtleQora2V5X2YyMAkJCQlrZjIwCXN0cglGQQlLRVlfRigyMCkJLQktLS0tRQlGMjAgZnVuY3Rpb24ga2V5CitrZXlfZjIxCQkJCWtmMjEJc3RyCUZCCUtFWV9GKDIxKQktCS0tLS1FCUYyMSBmdW5jdGlvbiBrZXkKK2tleV9mMjIJCQkJa2YyMglzdHIJRkMJS0VZX0YoMjIpCS0JLS0tLUUJRjIyIGZ1bmN0aW9uIGtleQora2V5X2YyMwkJCQlrZjIzCXN0cglGRAlLRVlfRigyMykJLQktLS0tRQlGMjMgZnVuY3Rpb24ga2V5CitrZXlfZjI0CQkJCWtmMjQJc3RyCUZFCUtFWV9GKDI0KQktCS0tLS1FCUYyNCBmdW5jdGlvbiBrZXkKK2tleV9mMjUJCQkJa2YyNQlzdHIJRkYJS0VZX0YoMjUpCS0JLS0tLUUJRjI1IGZ1bmN0aW9uIGtleQora2V5X2YyNgkJCQlrZjI2CXN0cglGRwlLRVlfRigyNikJLQktLS0tRQlGMjYgZnVuY3Rpb24ga2V5CitrZXlfZjI3CQkJCWtmMjcJc3RyCUZICUtFWV9GKDI3KQktCS0tLS1FCUYyNyBmdW5jdGlvbiBrZXkKK2tleV9mMjgJCQkJa2YyOAlzdHIJRkkJS0VZX0YoMjgpCS0JLS0tLUUJRjI4IGZ1bmN0aW9uIGtleQora2V5X2YyOQkJCQlrZjI5CXN0cglGSglLRVlfRigyOSkJLQktLS0tRQlGMjkgZnVuY3Rpb24ga2V5CitrZXlfZjMwCQkJCWtmMzAJc3RyCUZLCUtFWV9GKDMwKQktCS0tLS1FCUYzMCBmdW5jdGlvbiBrZXkKK2tleV9mMzEJCQkJa2YzMQlzdHIJRkwJS0VZX0YoMzEpCS0JLS0tLUUJRjMxIGZ1bmN0aW9uIGtleQora2V5X2YzMgkJCQlrZjMyCXN0cglGTQlLRVlfRigzMikJLQktLS0tRQlGMzIgZnVuY3Rpb24ga2V5CitrZXlfZjMzCQkJCWtmMzMJc3RyCUZOCUtFWV9GKDMzKQktCS0tLS1FCUYzMyBmdW5jdGlvbiBrZXkKK2tleV9mMzQJCQkJa2YzNAlzdHIJRk8JS0VZX0YoMzQpCS0JLS0tLUUJRjM0IGZ1bmN0aW9uIGtleQora2V5X2YzNQkJCQlrZjM1CXN0cglGUAlLRVlfRigzNSkJLQktLS0tRQlGMzUgZnVuY3Rpb24ga2V5CitrZXlfZjM2CQkJCWtmMzYJc3RyCUZRCUtFWV9GKDM2KQktCS0tLS1FCUYzNiBmdW5jdGlvbiBrZXkKK2tleV9mMzcJCQkJa2YzNwlzdHIJRlIJS0VZX0YoMzcpCS0JLS0tLUUJRjM3IGZ1bmN0aW9uIGtleQora2V5X2YzOAkJCQlrZjM4CXN0cglGUwlLRVlfRigzOCkJLQktLS0tRQlGMzggZnVuY3Rpb24ga2V5CitrZXlfZjM5CQkJCWtmMzkJc3RyCUZUCUtFWV9GKDM5KQktCS0tLS1FCUYzOSBmdW5jdGlvbiBrZXkKK2tleV9mNDAJCQkJa2Y0MAlzdHIJRlUJS0VZX0YoNDApCS0JLS0tLUUJRjQwIGZ1bmN0aW9uIGtleQora2V5X2Y0MQkJCQlrZjQxCXN0cglGVglLRVlfRig0MSkJLQktLS0tRQlGNDEgZnVuY3Rpb24ga2V5CitrZXlfZjQyCQkJCWtmNDIJc3RyCUZXCUtFWV9GKDQyKQktCS0tLS1FCUY0MiBmdW5jdGlvbiBrZXkKK2tleV9mNDMJCQkJa2Y0MwlzdHIJRlgJS0VZX0YoNDMpCS0JLS0tLUUJRjQzIGZ1bmN0aW9uIGtleQora2V5X2Y0NAkJCQlrZjQ0CXN0cglGWQlLRVlfRig0NCkJLQktLS0tRQlGNDQgZnVuY3Rpb24ga2V5CitrZXlfZjQ1CQkJCWtmNDUJc3RyCUZaCUtFWV9GKDQ1KQktCS0tLS1FCUY0NSBmdW5jdGlvbiBrZXkKK2tleV9mNDYJCQkJa2Y0NglzdHIJRmEJS0VZX0YoNDYpCS0JLS0tLUUJRjQ2IGZ1bmN0aW9uIGtleQora2V5X2Y0NwkJCQlrZjQ3CXN0cglGYglLRVlfRig0NykJLQktLS0tRQlGNDcgZnVuY3Rpb24ga2V5CitrZXlfZjQ4CQkJCWtmNDgJc3RyCUZjCUtFWV9GKDQ4KQktCS0tLS1FCUY0OCBmdW5jdGlvbiBrZXkKK2tleV9mNDkJCQkJa2Y0OQlzdHIJRmQJS0VZX0YoNDkpCS0JLS0tLUUJRjQ5IGZ1bmN0aW9uIGtleQora2V5X2Y1MAkJCQlrZjUwCXN0cglGZQlLRVlfRig1MCkJLQktLS0tRQlGNTAgZnVuY3Rpb24ga2V5CitrZXlfZjUxCQkJCWtmNTEJc3RyCUZmCUtFWV9GKDUxKQktCS0tLS1FCUY1MSBmdW5jdGlvbiBrZXkKK2tleV9mNTIJCQkJa2Y1MglzdHIJRmcJS0VZX0YoNTIpCS0JLS0tLUUJRjUyIGZ1bmN0aW9uIGtleQora2V5X2Y1MwkJCQlrZjUzCXN0cglGaAlLRVlfRig1MykJLQktLS0tRQlGNTMgZnVuY3Rpb24ga2V5CitrZXlfZjU0CQkJCWtmNTQJc3RyCUZpCUtFWV9GKDU0KQktCS0tLS1FCUY1NCBmdW5jdGlvbiBrZXkKK2tleV9mNTUJCQkJa2Y1NQlzdHIJRmoJS0VZX0YoNTUpCS0JLS0tLUUJRjU1IGZ1bmN0aW9uIGtleQora2V5X2Y1NgkJCQlrZjU2CXN0cglGawlLRVlfRig1NikJLQktLS0tRQlGNTYgZnVuY3Rpb24ga2V5CitrZXlfZjU3CQkJCWtmNTcJc3RyCUZsCUtFWV9GKDU3KQktCS0tLS1FCUY1NyBmdW5jdGlvbiBrZXkKK2tleV9mNTgJCQkJa2Y1OAlzdHIJRm0JS0VZX0YoNTgpCS0JLS0tLUUJRjU4IGZ1bmN0aW9uIGtleQora2V5X2Y1OQkJCQlrZjU5CXN0cglGbglLRVlfRig1OSkJLQktLS0tRQlGNTkgZnVuY3Rpb24ga2V5CitrZXlfZjYwCQkJCWtmNjAJc3RyCUZvCUtFWV9GKDYwKQktCS0tLS1FCUY2MCBmdW5jdGlvbiBrZXkKK2tleV9mNjEJCQkJa2Y2MQlzdHIJRnAJS0VZX0YoNjEpCS0JLS0tLUUJRjYxIGZ1bmN0aW9uIGtleQora2V5X2Y2MgkJCQlrZjYyCXN0cglGcQlLRVlfRig2MikJLQktLS0tRQlGNjIgZnVuY3Rpb24ga2V5CitrZXlfZjYzCQkJCWtmNjMJc3RyCUZyCUtFWV9GKDYzKQktCS0tLS1FCUY2MyBmdW5jdGlvbiBrZXkKKyMgZW5kIG9mIHN0cmluZ3MgaW4gSFBVWCA5CitjaGFyX3BhZGRpbmcJCQlybXAJc3RyCXJQCS0JCS0JLS0tLS0JbGlrZSBpcCBidXQgd2hlbiBpbiBpbnNlcnQgbW9kZQorYWNzX2NoYXJzCQkJYWNzYwlzdHIJYWMJLQkJLQktLS0tLQlncmFwaGljcyBjaGFyc2V0IHBhaXJzLCBiYXNlZCBvbiB2dDEwMAora2V5X2J0YWIJCQlrY2J0CXN0cglrQglLRVlfQlRBQgkwNTQxCS0tLS0tCWJhY2stdGFiIGtleQorZW50ZXJfeG9uX21vZGUJCQlzbXhvbglzdHIJU1gJLQkJLQktLS0tLQl0dXJuIG9uIHhvbi94b2ZmIGhhbmRzaGFraW5nCitleGl0X3hvbl9tb2RlCQkJcm14b24Jc3RyCVJYCS0JCS0JLS0tLS0JdHVybiBvZmYgeG9uL3hvZmYgaGFuZHNoYWtpbmcKK2VudGVyX2FtX21vZGUJCQlzbWFtCXN0cglTQQktCQktCS0tLS0tCXR1cm4gb24gYXV0b21hdGljIG1hcmdpbnMKK2V4aXRfYW1fbW9kZQkJCXJtYW0Jc3RyCVJBCS0JCS0JLS0tLS0JdHVybiBvZmYgYXV0b21hdGljIG1hcmdpbnMKK3hvbl9jaGFyYWN0ZXIJCQl4b25jCXN0cglYTgktCQktCS0tLS0tCVhPTiBjaGFyYWN0ZXIKK3hvZmZfY2hhcmFjdGVyCQkJeG9mZmMJc3RyCVhGCS0JCS0JLS0tLS0JWE9GRiBjaGFyYWN0ZXIKK2VuYV9hY3MJCQkJZW5hY3MJc3RyCWVBCS0JCS0JLS0tLS0JZW5hYmxlIGFsdGVybmF0ZSBjaGFyIHNldAora2V5X2JlZwkJCQlrYmVnCXN0cglAMQlLRVlfQkVHCQkwNTQyCS0tLS0tCWJlZ2luIGtleQora2V5X2NhbmNlbAkJCWtjYW4Jc3RyCUAyCUtFWV9DQU5DRUwJMDU0MwktLS0tLQljYW5jZWwga2V5CitrZXlfY2xvc2UJCQlrY2xvCXN0cglAMwlLRVlfQ0xPU0UJMDU0NAktLS0tLQljbG9zZSBrZXkKK2tleV9jb21tYW5kCQkJa2NtZAlzdHIJQDQJS0VZX0NPTU1BTkQJMDU0NQktLS0tLQljb21tYW5kIGtleQora2V5X2NvcHkJCQlrY3B5CXN0cglANQlLRVlfQ09QWQkwNTQ2CS0tLS0tCWNvcHkga2V5CitrZXlfY3JlYXRlCQkJa2NydAlzdHIJQDYJS0VZX0NSRUFURQkwNTQ3CS0tLS0tCWNyZWF0ZSBrZXkKK2tleV9lbmQJCQkJa2VuZAlzdHIJQDcJS0VZX0VORAkJMDU1MAktLS0tLQllbmQga2V5CitrZXlfZW50ZXIJCQlrZW50CXN0cglAOAlLRVlfRU5URVIJMDUyNwktLS0tLQllbnRlci9zZW5kIGtleQora2V5X2V4aXQJCQlrZXh0CXN0cglAOQlLRVlfRVhJVAkwNTUxCS0tLS0tCWV4aXQga2V5CitrZXlfZmluZAkJCWtmbmQJc3RyCUAwCUtFWV9GSU5ECTA1NTIJLS0tLS0JZmluZCBrZXkKK2tleV9oZWxwCQkJa2hscAlzdHIJJTEJS0VZX0hFTFAJMDU1MwktLS0tLQloZWxwIGtleQora2V5X21hcmsJCQlrbXJrCXN0cgklMglLRVlfTUFSSwkwNTU0CS0tLS0tCW1hcmsga2V5CitrZXlfbWVzc2FnZQkJCWttc2cJc3RyCSUzCUtFWV9NRVNTQUdFCTA1NTUJLS0tLS0JbWVzc2FnZSBrZXkKK2tleV9tb3ZlCQkJa21vdglzdHIJJTQJS0VZX01PVkUJMDU1NgktLS0tLQltb3ZlIGtleQora2V5X25leHQJCQlrbnh0CXN0cgklNQlLRVlfTkVYVAkwNTU3CS0tLS0tCW5leHQga2V5CitrZXlfb3BlbgkJCWtvcG4Jc3RyCSU2CUtFWV9PUEVOCTA1NjAJLS0tLS0Jb3BlbiBrZXkKK2tleV9vcHRpb25zCQkJa29wdAlzdHIJJTcJS0VZX09QVElPTlMJMDU2MQktLS0tLQlvcHRpb25zIGtleQora2V5X3ByZXZpb3VzCQkJa3BydglzdHIJJTgJS0VZX1BSRVZJT1VTCTA1NjIJLS0tLS0JcHJldmlvdXMga2V5CitrZXlfcHJpbnQJCQlrcHJ0CXN0cgklOQlLRVlfUFJJTlQJMDUzMgktLS0tLQlwcmludCBrZXkKK2tleV9yZWRvCQkJa3JkbwlzdHIJJTAJS0VZX1JFRE8JMDU2MwktLS0tLQlyZWRvIGtleQora2V5X3JlZmVyZW5jZQkJCWtyZWYJc3RyCSYxCUtFWV9SRUZFUkVOQ0UJMDU2NAktLS0tLQlyZWZlcmVuY2Uga2V5CitrZXlfcmVmcmVzaAkJCWtyZnIJc3RyCSYyCUtFWV9SRUZSRVNICTA1NjUJLS0tLS0JcmVmcmVzaCBrZXkKK2tleV9yZXBsYWNlCQkJa3JwbAlzdHIJJjMJS0VZX1JFUExBQ0UJMDU2NgktLS0tLQlyZXBsYWNlIGtleQora2V5X3Jlc3RhcnQJCQlrcnN0CXN0cgkmNAlLRVlfUkVTVEFSVAkwNTY3CS0tLS0tCXJlc3RhcnQga2V5CitrZXlfcmVzdW1lCQkJa3JlcwlzdHIJJjUJS0VZX1JFU1VNRQkwNTcwCS0tLS0tCXJlc3VtZSBrZXkKK2tleV9zYXZlCQkJa3NhdglzdHIJJjYJS0VZX1NBVkUJMDU3MQktLS0tLQlzYXZlIGtleQora2V5X3N1c3BlbmQJCQlrc3BkCXN0cgkmNwlLRVlfU1VTUEVORAkwNjI3CS0tLS0tCXN1c3BlbmQga2V5CitrZXlfdW5kbwkJCWt1bmQJc3RyCSY4CUtFWV9VTkRPCTA2MzAJLS0tLS0JdW5kbyBrZXkKK2tleV9zYmVnCQkJa0JFRwlzdHIJJjkJS0VZX1NCRUcJMDU3MgktLS0tLQlzaGlmdGVkIGJlZ2luIGtleQora2V5X3NjYW5jZWwJCQlrQ0FOCXN0cgkmMAlLRVlfU0NBTkNFTAkwNTczCS0tLS0tCXNoaWZ0ZWQgY2FuY2VsIGtleQora2V5X3Njb21tYW5kCQkJa0NNRAlzdHIJKjEJS0VZX1NDT01NQU5ECTA1NzQJLS0tLS0Jc2hpZnRlZCBjb21tYW5kIGtleQora2V5X3Njb3B5CQkJa0NQWQlzdHIJKjIJS0VZX1NDT1BZCTA1NzUJLS0tLS0Jc2hpZnRlZCBjb3B5IGtleQora2V5X3NjcmVhdGUJCQlrQ1JUCXN0cgkqMwlLRVlfU0NSRUFURQkwNTc2CS0tLS0tCXNoaWZ0ZWQgY3JlYXRlIGtleQora2V5X3NkYwkJCQlrREMJc3RyCSo0CUtFWV9TREMJCTA1NzcJLS0tLS0Jc2hpZnRlZCBkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X3NkbAkJCQlrREwJc3RyCSo1CUtFWV9TREwJCTA2MDAJLS0tLS0Jc2hpZnRlZCBkZWxldGUtbGluZSBrZXkKK2tleV9zZWxlY3QJCQlrc2x0CXN0cgkqNglLRVlfU0VMRUNUCTA2MDEJLS0tLS0Jc2VsZWN0IGtleQora2V5X3NlbmQJCQlrRU5ECXN0cgkqNwlLRVlfU0VORAkwNjAyCS0tLS0tCXNoaWZ0ZWQgZW5kIGtleQora2V5X3Nlb2wJCQlrRU9MCXN0cgkqOAlLRVlfU0VPTAkwNjAzCS0tLS0tCXNoaWZ0ZWQgY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfc2V4aXQJCQlrRVhUCXN0cgkqOQlLRVlfU0VYSVQJMDYwNAktLS0tLQlzaGlmdGVkIGV4aXQga2V5CitrZXlfc2ZpbmQJCQlrRk5ECXN0cgkqMAlLRVlfU0ZJTkQJMDYwNQktLS0tLQlzaGlmdGVkIGZpbmQga2V5CitrZXlfc2hlbHAJCQlrSExQCXN0cgkjMQlLRVlfU0hFTFAJMDYwNgktLS0tLQlzaGlmdGVkIGhlbHAga2V5CitrZXlfc2hvbWUJCQlrSE9NCXN0cgkjMglLRVlfU0hPTUUJMDYwNwktLS0tLQlzaGlmdGVkIGhvbWUga2V5CitrZXlfc2ljCQkJCWtJQwlzdHIJIzMJS0VZX1NJQwkJMDYxMAktLS0tLQlzaGlmdGVkIGluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfc2xlZnQJCQlrTEZUCXN0cgkjNAlLRVlfU0xFRlQJMDYxMQktLS0tLQlzaGlmdGVkIGxlZnQtYXJyb3cga2V5CitrZXlfc21lc3NhZ2UJCQlrTVNHCXN0cgklYQlLRVlfU01FU1NBR0UJMDYxMgktLS0tLQlzaGlmdGVkIG1lc3NhZ2Uga2V5CitrZXlfc21vdmUJCQlrTU9WCXN0cgklYglLRVlfU01PVkUJMDYxMwktLS0tLQlzaGlmdGVkIG1vdmUga2V5CitrZXlfc25leHQJCQlrTlhUCXN0cgklYwlLRVlfU05FWFQJMDYxNAktLS0tLQlzaGlmdGVkIG5leHQga2V5CitrZXlfc29wdGlvbnMJCQlrT1BUCXN0cgklZAlLRVlfU09QVElPTlMJMDYxNQktLS0tLQlzaGlmdGVkIG9wdGlvbnMga2V5CitrZXlfc3ByZXZpb3VzCQkJa1BSVglzdHIJJWUJS0VZX1NQUkVWSU9VUwkwNjE2CS0tLS0tCXNoaWZ0ZWQgcHJldmlvdXMga2V5CitrZXlfc3ByaW50CQkJa1BSVAlzdHIJJWYJS0VZX1NQUklOVAkwNjE3CS0tLS0tCXNoaWZ0ZWQgcHJpbnQga2V5CitrZXlfc3JlZG8JCQlrUkRPCXN0cgklZwlLRVlfU1JFRE8JMDYyMAktLS0tLQlzaGlmdGVkIHJlZG8ga2V5CitrZXlfc3JlcGxhY2UJCQlrUlBMCXN0cgklaAlLRVlfU1JFUExBQ0UJMDYyMQktLS0tLQlzaGlmdGVkIHJlcGxhY2Uga2V5CitrZXlfc3JpZ2h0CQkJa1JJVAlzdHIJJWkJS0VZX1NSSUdIVAkwNjIyCS0tLS0tCXNoaWZ0ZWQgcmlnaHQtYXJyb3cga2V5CitrZXlfc3JzdW1lCQkJa1JFUwlzdHIJJWoJS0VZX1NSU1VNRQkwNjIzCS0tLS0tCXNoaWZ0ZWQgcmVzdW1lIGtleQora2V5X3NzYXZlCQkJa1NBVglzdHIJITEJS0VZX1NTQVZFCTA2MjQJLS0tLS0Jc2hpZnRlZCBzYXZlIGtleQora2V5X3NzdXNwZW5kCQkJa1NQRAlzdHIJITIJS0VZX1NTVVNQRU5ECTA2MjUJLS0tLS0Jc2hpZnRlZCBzdXNwZW5kIGtleQora2V5X3N1bmRvCQkJa1VORAlzdHIJITMJS0VZX1NVTkRPCTA2MjYJLS0tLS0Jc2hpZnRlZCB1bmRvIGtleQorcmVxX2Zvcl9pbnB1dAkJCXJmaQlzdHIJUkYJLQkJLQktLS0tLQlzZW5kIG5leHQgaW5wdXQgY2hhciAoZm9yIHB0eXMpCitjbHJfYm9sCQkJCWVsMQlzdHIJY2IJLQkJLQktLS0tLQlDbGVhciB0byBiZWdpbm5pbmcgb2YgbGluZQorY2xlYXJfbWFyZ2lucwkJCW1nYwlzdHIJTUMJLQkJLQktLS0tLQljbGVhciByaWdodCBhbmQgbGVmdCBzb2Z0IG1hcmdpbnMKK3NldF9sZWZ0X21hcmdpbgkJCXNtZ2wJc3RyCU1MCS0JCS0JLS0tLS0Jc2V0IGxlZnQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4uCSBTZWUgc21nbC4gKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfcmlnaHRfbWFyZ2luCQlzbWdyCXN0cglNUgktCQktCS0tLS0tCXNldCByaWdodCBzb2Z0IG1hcmdpbiBhdCBjdXJyZW50IGNvbHVtbgorbGFiZWxfZm9ybWF0CQkJZmxuCXN0cglMZgktCQktCS0tLS0tCWxhYmVsIGZvcm1hdAorc2V0X2Nsb2NrCQkJc2NsawlzdHIJU0MJLQkJLQktLS0tLQlzZXQgY2xvY2ssICMxIGhycyAjMiBtaW5zICMzIHNlY3MKK2Rpc3BsYXlfY2xvY2sJCQlkY2xrCXN0cglESwktCQktCS0tLS0tCWRpc3BsYXkgY2xvY2sKK3JlbW92ZV9jbG9jawkJCXJtY2xrCXN0cglSQwktCQktCS0tLS0tCXJlbW92ZSBjbG9jaworY3JlYXRlX3dpbmRvdwkJCWN3aW4Jc3RyCUNXCS0JCS0JLS0tLS0JZGVmaW5lIGEgd2luZG93ICMxIGZyb20gIzIsIzMgdG8gIzQsIzUKK2dvdG9fd2luZG93CQkJd2luZ28Jc3RyCVdHCS0JCS0JLS0tLS0JZ28gdG8gd2luZG93ICMxCitoYW5ndXAJCQkJaHVwCXN0cglIVQktCQktCS0tLS0tCWhhbmctdXAgcGhvbmUKK2RpYWxfcGhvbmUJCQlkaWFsCXN0cglESQktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxCitxdWlja19kaWFsCQkJcWRpYWwJc3RyCVFECS0JCS0JLS0tLS0JZGlhbCBudW1iZXIgIzEgd2l0aG91dCBjaGVja2luZwordG9uZQkJCQl0b25lCXN0cglUTwktCQktCS0tLS0tCXNlbGVjdCB0b3VjaCB0b25lIGRpYWxpbmcKK3B1bHNlCQkJCXB1bHNlCXN0cglQVQktCQktCS0tLS0tCXNlbGVjdCBwdWxzZSBkaWFsaW5nCitmbGFzaF9ob29rCQkJaG9vawlzdHIJZmgJLQkJLQktLS0tLQlmbGFzaCBzd2l0Y2ggaG9vaworZml4ZWRfcGF1c2UJCQlwYXVzZQlzdHIJUEEJLQkJLQktLS0tLQlwYXVzZSBmb3IgMi0zIHNlY29uZHMKK3dhaXRfdG9uZQkJCXdhaXQJc3RyCVdBCS0JCS0JLS0tLS0Jd2FpdCBmb3IgZGlhbC10b25lCit1c2VyMAkJCQl1MAlzdHIJdTAJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMAordXNlcjEJCQkJdTEJc3RyCXUxCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzEKK3VzZXIyCQkJCXUyCXN0cgl1MgktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMyCit1c2VyMwkJCQl1MwlzdHIJdTMJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMwordXNlcjQJCQkJdTQJc3RyCXU0CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzQKK3VzZXI1CQkJCXU1CXN0cgl1NQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM1Cit1c2VyNgkJCQl1NglzdHIJdTYJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNgordXNlcjcJCQkJdTcJc3RyCXU3CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzcKK3VzZXI4CQkJCXU4CXN0cgl1OAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM4Cit1c2VyOQkJCQl1OQlzdHIJdTkJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjOQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IGNvbG9yCisjCitvcmlnX3BhaXIJCQlvcAlzdHIJb3AJLQkJLQktLS0tLQlTZXQgZGVmYXVsdCBwYWlyIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQorb3JpZ19jb2xvcnMJCQlvYwlzdHIJb2MJLQkJLQktLS0tLQlTZXQgYWxsIGNvbG9yIHBhaXJzIHRvIHRoZSBvcmlnaW5hbCBvbmVzCitpbml0aWFsaXplX2NvbG9yCQlpbml0YwlzdHIJSWMJLQkJLQktLS0tLQlpbml0aWFsaXplIGNvbG9yICMxIHRvICgjMiwjMywjNCkKK2luaXRpYWxpemVfcGFpcgkJCWluaXRwCXN0cglJcAktCQktCS0tLS0tCUluaXRpYWxpemUgY29sb3IgcGFpciAjMSB0byBmZz0oIzIsIzMsIzQpLCBiZz0oIzUsIzYsIzcpCitzZXRfY29sb3JfcGFpcgkJCXNjcAlzdHIJc3AJLQkJLQktLS0tLQlTZXQgY3VycmVudCBjb2xvciBwYWlyIHRvICMxCitzZXRfZm9yZWdyb3VuZAkJCXNldGYJc3RyCVNmCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgIzEKK3NldF9iYWNrZ3JvdW5kCQkJc2V0YglzdHIJU2IJLQkJLQktLS0tLQlTZXQgYmFja2dyb3VuZCBjb2xvciAjMQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IHByaW50ZXJzCisjCitjaGFuZ2VfY2hhcl9waXRjaAkJY3BpCXN0cglaQQktCQktCS0tLS0tCUNoYW5nZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX2xpbmVfcGl0Y2gJCWxwaQlzdHIJWkIJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGxpbmVzIHBlciBpbmNoIHRvICMxCitjaGFuZ2VfcmVzX2hvcnoJCQljaHIJc3RyCVpDCS0JCS0JLS0tLS0JQ2hhbmdlIGhvcml6b250YWwgcmVzb2x1dGlvbiB0byAjMQorY2hhbmdlX3Jlc192ZXJ0CQkJY3ZyCXN0cglaRAktCQktCS0tLS0tCUNoYW5nZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIHRvICMxCitkZWZpbmVfY2hhcgkJCWRlZmMJc3RyCVpFCS0JCS0JLS0tLS0JRGVmaW5lIGEgY2hhcmFjdGVyICMxLCAjMiBkb3RzIHdpZGUsIGRlc2NlbmRlciAjMworZW50ZXJfZG91Ymxld2lkZV9tb2RlCQlzd2lkbQlzdHIJWkYJLQkJLQktLS0tLQlFbnRlciBkb3VibGUtd2lkZSBtb2RlCitlbnRlcl9kcmFmdF9xdWFsaXR5CQlzZHJmcQlzdHIJWkcJLQkJLQktLS0tLQlFbnRlciBkcmFmdC1xdWFsaXR5IG1vZGUKK2VudGVyX2l0YWxpY3NfbW9kZQkJc2l0bQlzdHIJWkgJLQkJLQktLS0tLQlFbnRlciBpdGFsaWMgbW9kZQorZW50ZXJfbGVmdHdhcmRfbW9kZQkJc2xtCXN0cglaSQktCQktCS0tLS0tCVN0YXJ0IGxlZnR3YXJkIGNhcnJpYWdlIG1vdGlvbgorZW50ZXJfbWljcm9fbW9kZQkJc21pY20Jc3RyCVpKCS0JCS0JLS0tLS0JU3RhcnQgbWljcm8tbW90aW9uIG1vZGUKK2VudGVyX25lYXJfbGV0dGVyX3F1YWxpdHkJc25scQlzdHIJWksJLQkJLQktLS0tLQlFbnRlciBOTFEgbW9kZQorZW50ZXJfbm9ybWFsX3F1YWxpdHkJCXNucm1xCXN0cglaTAktCQktCS0tLS0tCUVudGVyIG5vcm1hbC1xdWFsaXR5IG1vZGUKK2VudGVyX3NoYWRvd19tb2RlCQlzc2htCXN0cglaTQktCQktCS0tLS0tCUVudGVyIHNoYWRvdy1wcmludCBtb2RlCitlbnRlcl9zdWJzY3JpcHRfbW9kZQkJc3N1Ym0Jc3RyCVpOCS0JCS0JLS0tLS0JRW50ZXIgc3Vic2NyaXB0IG1vZGUKK2VudGVyX3N1cGVyc2NyaXB0X21vZGUJCXNzdXBtCXN0cglaTwktCQktCS0tLS0tCUVudGVyIHN1cGVyc2NyaXB0IG1vZGUKK2VudGVyX3Vwd2FyZF9tb2RlCQlzdW0Jc3RyCVpQCS0JCS0JLS0tLS0JU3RhcnQgdXB3YXJkIGNhcnJpYWdlIG1vdGlvbgorZXhpdF9kb3VibGV3aWRlX21vZGUJCXJ3aWRtCXN0cglaUQktCQktCS0tLS0tCUVuZCBkb3VibGUtd2lkZSBtb2RlCitleGl0X2l0YWxpY3NfbW9kZQkJcml0bQlzdHIJWlIJLQkJLQktLS0tLQlFbmQgaXRhbGljIG1vZGUKK2V4aXRfbGVmdHdhcmRfbW9kZQkJcmxtCXN0cglaUwktCQktCS0tLS0tCUVuZCBsZWZ0LW1vdGlvbiBtb2RlCitleGl0X21pY3JvX21vZGUJCQlybWljbQlzdHIJWlQJLQkJLQktLS0tLQlFbmQgbWljcm8tbW90aW9uIG1vZGUKK2V4aXRfc2hhZG93X21vZGUJCXJzaG0Jc3RyCVpVCS0JCS0JLS0tLS0JRW5kIHNoYWRvdy1wcmludCBtb2RlCitleGl0X3N1YnNjcmlwdF9tb2RlCQlyc3VibQlzdHIJWlYJLQkJLQktLS0tLQlFbmQgc3Vic2NyaXB0IG1vZGUKK2V4aXRfc3VwZXJzY3JpcHRfbW9kZQkJcnN1cG0Jc3RyCVpXCS0JCS0JLS0tLS0JRW5kIHN1cGVyc2NyaXB0IG1vZGUKK2V4aXRfdXB3YXJkX21vZGUJCXJ1bQlzdHIJWlgJLQkJLQktLS0tLQlFbmQgcmV2ZXJzZSBjaGFyYWN0ZXIgbW90aW9uCittaWNyb19jb2x1bW5fYWRkcmVzcwkJbWhwYQlzdHIJWlkJLQkJLQktLS0tLQlMaWtlIGNvbHVtbl9hZGRyZXNzIGluIG1pY3JvIG1vZGUKK21pY3JvX2Rvd24JCQltY3VkMQlzdHIJWloJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9kb3duIGluIG1pY3JvIG1vZGUKK21pY3JvX2xlZnQJCQltY3ViMQlzdHIJWmEJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9sZWZ0IGluIG1pY3JvIG1vZGUKK21pY3JvX3JpZ2h0CQkJbWN1ZjEJc3RyCVpiCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfcmlnaHQgaW4gbWljcm8gbW9kZQorbWljcm9fcm93X2FkZHJlc3MJCW12cGEJc3RyCVpjCS0JCS0JLS0tLS0JTGlrZSByb3dfYWRkcmVzcyAjMSBpbiBtaWNybyBtb2RlCittaWNyb191cAkJCW1jdXUxCXN0cglaZAktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3VwIGluIG1pY3JvIG1vZGUKK29yZGVyX29mX3BpbnMJCQlwb3JkZXIJc3RyCVplCS0JCS0JLS0tLS0JTWF0Y2ggc29mdHdhcmUgYml0cyB0byBwcmludC1oZWFkIHBpbnMKK3Bhcm1fZG93bl9taWNybwkJCW1jdWQJc3RyCVpmCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2Rvd25fY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fbGVmdF9taWNybwkJCW1jdWIJc3RyCVpnCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2xlZnRfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fcmlnaHRfbWljcm8JCW1jdWYJc3RyCVpoCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3JpZ2h0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3VwX21pY3JvCQkJbWN1dQlzdHIJWmkJLQkJLQktLS0tLQlMaWtlIHBhcm1fdXBfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3NlbGVjdF9jaGFyX3NldAkJCXNjcwlzdHIJWmoJLQkJLQktLS0tLQlTZWxlY3QgY2hhcmFjdGVyIHNldCwgIzEKK3NldF9ib3R0b21fbWFyZ2luCQlzbWdiCXN0cglaawktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X2JvdHRvbV9tYXJnaW5fcGFybQkJc21nYnAJc3RyCVpsCS0JCS0JLS0tLS0JU2V0IGJvdHRvbSBtYXJnaW4gYXQgbGluZSAjMSBvciAoaWYgc21ndHAgaXMgbm90IGdpdmVuKSAjMiBsaW5lcyBmcm9tIGJvdHRvbQorc2V0X2xlZnRfbWFyZ2luX3Bhcm0JCXNtZ2xwCXN0cglabQktCQktCS0tLS0tCVNldCBsZWZ0IChyaWdodCkgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3JpZ2h0X21hcmdpbl9wYXJtCQlzbWdycAlzdHIJWm4JLQkJLQktLS0tLQlTZXQgcmlnaHQgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3RvcF9tYXJnaW4JCQlzbWd0CXN0cglabwktCQktCS0tLS0tCVNldCB0b3AgbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X3RvcF9tYXJnaW5fcGFybQkJc21ndHAJc3RyCVpwCS0JCS0JLS0tLS0JU2V0IHRvcCAoYm90dG9tKSBtYXJnaW4gYXQgcm93ICMxCitzdGFydF9iaXRfaW1hZ2UJCQlzYmltCXN0cglacQktCQktCS0tLS0tCVN0YXJ0IHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RhcnRfY2hhcl9zZXRfZGVmCQlzY3NkCXN0cglacgktCQktCS0tLS0tCVN0YXJ0IGNoYXJhY3RlciBzZXQgZGVmaW5pdGlvbiAjMSwgd2l0aCAjMiBjaGFyYWN0ZXJzIGluIHRoZSBzZXQKK3N0b3BfYml0X2ltYWdlCQkJcmJpbQlzdHIJWnMJLQkJLQktLS0tLQlTdG9wIHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RvcF9jaGFyX3NldF9kZWYJCXJjc2QJc3RyCVp0CS0JCS0JLS0tLS0JRW5kIGRlZmluaXRpb24gb2YgY2hhcmFjdGVyIHNldCAjMQorc3Vic2NyaXB0X2NoYXJhY3RlcnMJCXN1YmNzCXN0cgladQktCQktCS0tLS0tCUxpc3Qgb2Ygc3Vic2NyaXB0YWJsZSBjaGFyYWN0ZXJzCitzdXBlcnNjcmlwdF9jaGFyYWN0ZXJzCQlzdXBjcwlzdHIJWnYJLQkJLQktLS0tLQlMaXN0IG9mIHN1cGVyc2NyaXB0YWJsZSBjaGFyYWN0ZXJzCit0aGVzZV9jYXVzZV9jcgkJCWRvY3IJc3RyCVp3CS0JCS0JLS0tLS0JUHJpbnRpbmcgYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgY2F1c2VzIENSCit6ZXJvX21vdGlvbgkJCXplcm9tCXN0cglaeAktCQktCS0tLS0tCU5vIG1vdGlvbiBmb3Igc3Vic2VxdWVudCBjaGFyYWN0ZXIKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlIGZvbGxvd2luZyBzdHJpbmcgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCB3ZXJlIG9yaWdpbmFsbHkgbm90IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcxOC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2NoYXJfc2V0X25hbWVzCQkJY3NubQlzdHIJWnkJLQkJLQktLS0tLQlQcm9kdWNlICMxJ3RoIGl0ZW0gZnJvbSBsaXN0IG9mIGNoYXJhY3RlciBzZXQgbmFtZXMKK2tleV9tb3VzZQkJCWttb3VzCXN0cglLbQlLRVlfTU9VU0UJMDYzMQktLS0tLQlNb3VzZSBldmVudCBoYXMgb2NjdXJyZWQKK21vdXNlX2luZm8JCQltaW5mbwlzdHIJTWkJLQkJLQktLS0tLQlNb3VzZSBzdGF0dXMgaW5mb3JtYXRpb24KK3JlcV9tb3VzZV9wb3MJCQlyZXFtcAlzdHIJUlEJLQkJLQktLS0tLQlSZXF1ZXN0IG1vdXNlIHBvc2l0aW9uCitnZXRfbW91c2UJCQlnZXRtCXN0cglHbQktCQktCS0tLS0tCUN1cnNlcyBzaG91bGQgZ2V0IGJ1dHRvbiBldmVudHMsIHBhcmFtZXRlciAjMSBub3QgZG9jdW1lbnRlZC4KK3NldF9hX2ZvcmVncm91bmQJCXNldGFmCXN0cglBRgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorc2V0X2FfYmFja2dyb3VuZAkJc2V0YWIJc3RyCUFCCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitwa2V5X3BsYWIJCQlwZnhsCXN0cgl4bAktCQktCS0tLS0tCVByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHR5cGUgc3RyaW5nICMyIGFuZCBzaG93IHN0cmluZyAjMworZGV2aWNlX3R5cGUJCQlkZXZ0CXN0cglkdgktCQktCS0tLS0tCUluZGljYXRlIGxhbmd1YWdlL2NvZGVzZXQgc3VwcG9ydAorY29kZV9zZXRfaW5pdAkJCWNzaW4Jc3RyCWNpCS0JCS0JLS0tLS0JSW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgY29kZXNldHMKK3NldDBfZGVzX3NlcQkJCXMwZHMJc3RyCXMwCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAwIChFVUMgc2V0IDAsIEFTQ0lJKQorc2V0MV9kZXNfc2VxCQkJczFkcwlzdHIJczEJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDEKK3NldDJfZGVzX3NlcQkJCXMyZHMJc3RyCXMyCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAyCitzZXQzX2Rlc19zZXEJCQlzM2RzCXN0cglzMwktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMworc2V0X2xyX21hcmdpbgkJCXNtZ2xyCXN0cglNTAktCQktCS0tLS0tCVNldCBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMgdG8gIzEsICMyLiAgKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfdGJfbWFyZ2luCQkJc21ndGIJc3RyCU1UCS0JCS0JLS0tLS0JU2V0cyBib3RoIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgdG8gIzEsICMyCitiaXRfaW1hZ2VfcmVwZWF0CQliaXJlcAlzdHIJWHkJLQkJLQktLS0tLQlSZXBlYXQgYml0IGltYWdlIGNlbGwgIzEgIzIgdGltZXMKK2JpdF9pbWFnZV9uZXdsaW5lCQliaW5lbAlzdHIJWnoJLQkJLQktLS0tLQlNb3ZlIHRvIG5leHQgcm93IG9mIHRoZSBiaXQgaW1hZ2UKK2JpdF9pbWFnZV9jYXJyaWFnZV9yZXR1cm4JYmljcglzdHIJWXYJLQkJLQktLS0tLQlNb3ZlIHRvIGJlZ2lubmluZyBvZiBzYW1lIHJvdworY29sb3JfbmFtZXMJCQljb2xvcm5tCXN0cglZdwktCQktCS0tLS0tCUdpdmUgbmFtZSBmb3IgY29sb3IgIzEKK2RlZmluZV9iaXRfaW1hZ2VfcmVnaW9uCQlkZWZiaQlzdHIJWXgJLQkJLQktLS0tLQlEZWZpbmUgcmVjdGFuZ3VhbGFyIGJpdCBpbWFnZSByZWdpb24KK2VuZF9iaXRfaW1hZ2VfcmVnaW9uCQllbmRiaQlzdHIJWXkJLQkJLQktLS0tLQlFbmQgYSBiaXQtaW1hZ2UgcmVnaW9uCitzZXRfY29sb3JfYmFuZAkJc2V0Y29sb3IJc3RyCVl6CS0JCS0JLS0tLS0JQ2hhbmdlIHRvIHJpYmJvbiBjb2xvciAjMQorc2V0X3BhZ2VfbGVuZ3RoCQkJc2xpbmVzCXN0cglZWgktCQktCS0tLS0tCVNldCBwYWdlIGxlbmd0aCB0byAjMSBsaW5lcworIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyBmb3IgZGlyZWN0IFBDLWNsb25lIHN1cHBvcnQKKyMKK2Rpc3BsYXlfcGNfY2hhcgkJCWRpc3BjCXN0cglTMQktCQktCS0tLS0tCURpc3BsYXkgUEMgY2hhcmFjdGVyICMxCitlbnRlcl9wY19jaGFyc2V0X21vZGUJCXNtcGNoCXN0cglTMgktCQktCS0tLS0tCUVudGVyIFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2V4aXRfcGNfY2hhcnNldF9tb2RlCQlybXBjaAlzdHIJUzMJLQkJLQktLS0tLQlFeGl0IFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2VudGVyX3NjYW5jb2RlX21vZGUJCXNtc2MJc3RyCVM0CS0JCS0JLS0tLS0JRW50ZXIgUEMgc2NhbmNvZGUgbW9kZQorZXhpdF9zY2FuY29kZV9tb2RlCQlybXNjCXN0cglTNQktCQktCS0tLS0tCUV4aXQgUEMgc2NhbmNvZGUgbW9kZQorcGNfdGVybV9vcHRpb25zCQkJcGN0cm0Jc3RyCVM2CS0JCS0JLS0tLS0JUEMgdGVybWluYWwgb3B0aW9ucworc2NhbmNvZGVfZXNjYXBlCQkJc2Nlc2MJc3RyCVM3CS0JCS0JLS0tLS0JRXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KK2FsdF9zY2FuY29kZV9lc2MJCXNjZXNhCXN0cglTOAktCQktCS0tLS0tCUFsdGVybmF0ZSBlc2NhcGUgZm9yIHNjYW5jb2RlIGVtdWxhdGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyUuaW4gLjhpCisjJVRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGFkZGVkIHRoZXNlLiAgVGhleSBhcmUgc29tZSBwb3N0LTQuMSAKKyMldmVyc2lvbnMgb2YgU3lzdGVtIFYgY3Vyc2VzLCBlLmcuLCBTb2xhcmlzIDIuNSBhbmQgSVJJWCA2LnguCisjJVRoZSBcZkJuY3Vyc2VzXGZSIHRlcm1jYXAgbmFtZXMgZm9yIHRoZW0gYXJlIGludmVudGVkOyBhY2NvcmRpbmcgdG8gdGhlCisjJVhTSSBDdXJzZXMgc3RhbmRhcmQsIHRoZXkgaGF2ZSBubyB0ZXJtY2FwIG5hbWVzLiAgSWYgeW91ciBjb21waWxlZCB0ZXJtaW5mbworIyVlbnRyaWVzIHVzZSB0aGVzZSwgdGhleSBtYXkgbm90IGJlIGJpbmFyeS1jb21wYXRpYmxlIHdpdGggU3lzdGVtIFYgdGVybWluZm8KKyMlZW50cmllcyBhZnRlciBTVnI0LjE7IGJld2FyZSEKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitzZXRfcGdsZW5faW5jaAkJCXNsZW5ndGgJc3RyCXNMCS0JCS0JLS0tLS0JWUkgU2V0IHBhZ2UgbGVuZ3RoIHRvICMxIGh1bmRyZWR0aCBvZiBhbiBpbmNoCitlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUJZWhobG0Jc3RyCVhoCS0JCS0JLS0tLS0JRW50ZXIgaG9yaXpvbnRhbCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbGVmdF9obF9tb2RlCQllbGhsbQlzdHIJWGwJLQkJLQktLS0tLQlFbnRlciBsZWZ0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl9sb3dfaGxfbW9kZQkJZWxvaGxtCXN0cglYbwktCQktCS0tLS0tCUVudGVyIGxvdyBoaWdobGlnaHQgbW9kZQorZW50ZXJfcmlnaHRfaGxfbW9kZQkJZXJobG0Jc3RyCVhyCS0JCS0JLS0tLS0JRW50ZXIgcmlnaHQgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3RvcF9obF9tb2RlCQlldGhsbQlzdHIJWHQJLQkJLQktLS0tLQlFbnRlciB0b3AgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3ZlcnRpY2FsX2hsX21vZGUJCWV2aGxtCXN0cglYdgktCQktCS0tLS0tCUVudGVyIHZlcnRpY2FsIGhpZ2hsaWdodCBtb2RlCitzZXRfYV9hdHRyaWJ1dGVzCQlzZ3IxCXN0cglzQQktCQktCS0tLS0tCURlZmluZSBzZWNvbmQgc2V0IG9mIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzYKK2V4aXRfaG9yaXpvbnRhbF9obF9tb2RlIAlyaGhsbQlzdHIJWEgJLQkJLQktLS0tSwlFeGl0IGhvcml6b250YWwgaGlnaGxpZ2h0IG1vZGUKK2V4aXRfbGVmdF9obF9tb2RlIAkJcmxobG0Jc3RyCVhMCS0JCS0JLS0tLUsJRXhpdCBsZWZ0IGhpZ2hsaWdodCBtb2RlCitleGl0X2xvd19obF9tb2RlIAkJcmxvaGxtCXN0cglYTwktCQktCS0tLS1LCUV4aXQgbG93IGhpZ2hsaWdodCBtb2RlCitleGl0X3JpZ2h0X2hsX21vZGUgCQlycmhsbQlzdHIJWFIJLQkJLQktLS0tSwlFeGl0IHJpZ2h0IGhpZ2hsaWdodCBtb2RlCitleGl0X3RvcF9obF9tb2RlIAkJcnRobG0Jc3RyCVhUCS0JCS0JLS0tLUsJRXhpdCB0b3AgaGlnaGxpZ2h0IG1vZGUKK2V4aXRfdmVydGljYWxfaGxfbW9kZSAJCXJ2aGxtCXN0cglYVgktCQktCS0tLS1LCUV4aXQgdmVydGljYWwgaGlnaGxpZ2h0IG1vZGUKKyMlLlRFCisjJS5hZAorIworIyBUaGUgbWFnaWMgdG9rZW4gYmVsb3cgdGVsbHMgdGhlIHRpYyBjb21waWxlci1nZW5lcmF0b3IgY29kZSB0aGF0IGFsbCB0aGUgY2FwcworIyBwYXN0IGl0IHNob3VsZCBiZSBpZ25vcmVkIChub3Qgd3JpdHRlbiBvdXQpIHdoZW4gZHVtcGluZyB0ZXJtaW5mbyBvYmplY3RzLiBJdAorIyBhbHNvIHRlbGxzIHRoZSBtYW4gcGFnZSB0YWJsZSBnZW5lcmF0b3Igbm90IHRvIHBhc3MgdGhyb3VnaCBmb2xsb3dpbmcgbGluZXMKKyMgVGhpcyBtZWFucyB3ZSBjYW4gaGF2ZSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgYW5kIHBzZXVkby1jYXBhYmlsaXRpZXMgdGhhdCBhcmUKKyMgcmVjb2duaXplZCBmb3IgdGVybWNhcCBvciB0ZXJtaW5mbyBjb21waWxhdGlvbiwgYnV0IG5vdCBvdXRwdXQuCisjCisjICUlLVNUT1AtSEVSRS0lJQorIworIyBEb24ndCBtb3ZlIHRoaXMgY2FzdWFsbHkhICBJbiBmYWN0LCBkb24ndCBtb3ZlIGl0IGF0IGFsbCB1bmxlc3MgeW91J3JlCisjIGVpdGhlciBkb2luZyBpdCB0byBhZGQgU3lzdGVtIFYgb3IgWFBHNCBleHRlbnNpb25zLCBvciBoYXZlIGRlY2lkZWQgeW91CisjIGRvbid0IGNhcmUgYWJvdXQgU1ZyNCBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1DQVAgRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGUgY2FwYWJpbGl0aWVzIGJlbG93IGFyZSBlaXRoZXIgb2Jzb2xldGUgb3IgZXh0ZW5zaW9ucyBvbiBjZXJ0YWluIHN5c3RlbXMuCisjIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IFNWUjQgdGVybWluZm8uICBTb21lIGFyZSB1c2VkIGJ5IGNhcHRvaW5mbyB0byB0cmFuc2xhdGUKKyMgdGVybWNhcCBzb3VyY2VzOyB0aGUgcmVzdCBhcmUgbGlzdGVkIGZvciBjb21wbGV0ZW5lc3MsIGFuZCBpbiBjYXNlIHNvbWVib2R5CisjIGNhcmVzIGFib3V0IHRoZW0gZW5vdWdoIHRvIGhhY2sgaW4gY29kZSB0aGF0IHdpbGwgdHJhbnNsYXRlIHRoZW0gaW50bworIyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMuCisjCisjIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaXN0IGlzIGZyb20gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlCisjIChjb21wLnNvdXJjZXMudW5peCwgdm9sdW1lIDI2KTsgdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCB0ZXJtaW5mbyBuYW1lcyAoYXMKKyMgd2VsbCBhcyB0aGUgdGVybWNhcCBjb2RlcykgbWF0Y2ggaGlzIGxpc3QuCisjCisjIFRoaXMgZ3JvdXAgb2YgY29kZXMgaXMgbm90IG1hcmtlZCBvYnNvbGV0ZSBpbiA0LjRCU0QsIGJ1dCBoYXZlIG5vIGRpcmVjdAorIyB0ZXJtaW5mbyBlcXVpdmFsZW50cy4gIFRoZSBycyBjYXBhYmlsaXR5IGlzIHNwZWNpYWxseSB0cmFuc2xhdGVkIHRvIHRlcm1pbmZvCisjIHIyLCBhbmQgdmljZSB2ZXJzYSwgaWYgYW4gZW50cnkgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIHIyLiAgU2ltaWxhcmx5LAorIyBpMiBpcyB0cmFuc2xhdGVkIHRvIHIzIGlmIHRoZXJlIGlzIG5vIHIzIChiZWNhdXNlIFNWIHRlcm1pbmZvIG1hcHMgaXMgdG8gaTIpLgorIyBUaGUgdWcgY2FwYWJpbGl0eSBpcyB0aHJvd24gYXdheSwgYnV0IGFzc3VtZWQgdG8gYmUgd2hhdGV2ZXIgc2cgaXMgaWYgdGhlCisjIGxhdHRlciBpcyBub256ZXJvIGFuZCB3ZSdyZSBkdW1waW5nIGluIHRlcm1jYXAgZm9ybWF0LgorIwordGVybWNhcF9pbml0MgkJCU9UaTIJc3RyCWkyCS0JCS0JWUItLS0Jc2Vjb25kYXJ5IGluaXRpYWxpemF0aW9uIHN0cmluZwordGVybWNhcF9yZXNldAkJCU9UcnMJc3RyCXJzCS0JCS0JWUItRy0JdGVybWluYWwgcmVzZXQgc3RyaW5nCittYWdpY19jb29raWVfZ2xpdGNoX3VsCQlPVHVnCW51bQl1ZwktCQktCVlCQ0dFCW51bWJlciBvZiBibGFua3MgbGVmdCBieSB1bAorIworIyBPYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4gIFNvbWUgYXJlIHVzZWQgZm9yIHRlcm1jYXAgdHJhbnNsYXRpb24uICBUaGUKKyMgY29kZSB1c2VzIHRoZSAnT1QnIHByZWZpeCB3ZSBwdXQgb24gb2Jzb2xldGUgY2FwYWJpbGl0aWVzIHRvIHN1cHByZXNzCisjIHByaW50aW5nIHRoZW0gaW4gdGVybWluZm8gc291cmNlIGR1bXBzIG9mIGNvbXBpbGVkIGVudHJpZXMuCisjCitiYWNrc3BhY2VzX3dpdGhfYnMJCU9UYnMJYm9vbAlicwktCQktCVlCQ0dFCXVzZXMgXkggdG8gbW92ZSBsZWZ0CitjcnRfbm9fc2Nyb2xsaW5nCQlPVG5zCWJvb2wJbnMJLQkJLQlZQkNHLQljcnQgY2Fubm90IHNjcm9sbAorbm9fY29ycmVjdGx5X3dvcmtpbmdfY3IJCU9UbmMJYm9vbAluYwktCQktCVlCQ0ctCW5vIHdheSB0byBnbyB0byBzdGFydCBvZiBsaW5lCitjYXJyaWFnZV9yZXR1cm5fZGVsYXkJCU9UZEMJbnVtCWRDCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgQ1IKK25ld19saW5lX2RlbGF5CQkJT1RkTgludW0JZE4JLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBMRgorbGluZWZlZWRfaWZfbm90X2xmCQlPVG5sCXN0cglubAktCQktCVlCQ0dFCXVzZSB0byBtb3ZlIGRvd24KK2JhY2tzcGFjZV9pZl9ub3RfYnMJCU9UYmMJc3RyCWJjCS0JCS0JWUJDR0UJbW92ZSBsZWZ0LCBpZiBub3QgXkgKKyMKKyMgR05VIHRlcm1jYXAgbGlicmFyeSBleHRlbnNpb25zLiAgVGhlIEdOVSB0ZXJtY2FwIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyBFbWFjcyBubyBsb25nZXIgdXNlcyB0aGVzZSwgYnV0IE1UIHNob3dlZCB1cCBpbiBwcmUtOS4wIHZlcnNpb25zIG9mIHRoZQorIyBCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbyBNVCBpcyByZXNvbHZlZCBieSB0eXBlCisjIGluZm87IE1UIGlzIGNvbnZlcnRlZCB0byBrbS4KKyMKK2dudV9oYXNfbWV0YV9rZXkJCU9UTVQJYm9vbAlNVAktCQktCS0tLS1FCWhhcyBtZXRhIGtleQorIyBnbnVfdGFiX3dpZHRoCQkJT1R0dwludW0JdHcJLQkJLQktLS0tRQl0YWIgd2lkdGggaW4gc3BhY2VzCisjCisjIEdOVSB0ZXJtY2FwICpkb2VzKiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZXh0ZW5kZWQgY2FwYWJpbGl0eSwgIE9ubHkgdGhlCisjIG5vdy1vYnNvbGV0ZSBBbm4gQXJib3IgdGVybWluYWxzIHVzZWQgaXQuCisjCisjIGdudV9jaGFuZ2Vfc2Nyb2xsX3JlZ2lvbglPVGNTCXN0cgljUwktCQktCS0tLUdFCWFsdGVybmF0ZSBzZXQgc2Nyb2xsaW5nIHJlZ2lvbiAKKyMKKyMgVGhlIGZvbGxvd2luZyBjb21tZW50cyBkZXNjcmliZSBjYXBuYW1lcyBzbyBhbmNpZW50IHRoYXQgSSBiZWxpZXZlIG5vCisjIHNvZnR3YXJlIHVzZXMgdGhlbSBhbnkgbG9uZ2VyLiAgU29tZSBvZiB0aGVzZSBoYXZlIHRvIGdvIGJlY2F1c2UgdGhleQorIyBjbGFzaCB3aXRoIHRlcm1pbmZvIG5hbWVzIGluIHdheXMgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlc2UgbXl0aW5mbyBjb2RlcyBhcmUgbm90IHVzZWQgaW4gdGhlIDQuNEJTRCBjdXJzZXMgY29kZS4gIFRoZXkgYXJlCisjIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgNC40QlNEIG1hbnVhbCBwYWdlcy4KKyMKKyMgVGhlcmUgaXMgb25lIGNvbmZsaWN0IHdpdGggdGVybWluZm87IG1hIGlzIGluIGJvdGguICBUaGlzIGNvbmZsaWN0IGlzCisjIHJlc29sdmVkIGJ5IHR5cGUgaW5mb3JtYXRpb24uCisjCisjIFRoZSBga28nIGNhcGFiaWxpdHkgaXMgdHJhbnNsYXRlZCBieSBzcGVjaWFsIGNvZGUuICBJdCBzaG91bGQgY29udGFpbiBhCisjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhcGFiaWxpdGllcyBmb3Igd2hpY2ggdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcga2V5cy4KKyMgVGhlIGBrbicgY29kZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyMKKyMgVGhlIGBtYScgY2FwYWJpbGl0eSBzZWVtcyB0byBoYXZlIGJlZW4gZGVzaWduZWQgdG8gbWFwIGJldHdlZW4gdGhlIHJvZ3VlKDIpCisjIG1vdGlvbiBrZXlzIChpbmNsdWRpbmcgamtobCkgYW5kIGNoYXJhY3RlcnMgZW1pdHRlZCBieSBhcnJvdyBrZXlzIG9uIHNvbWUKKyMgcHJpbWl0aXZlIHByZS1BTlNJIHRlcm1pbmFscy4gIEl0J3Mgc28gb2Jzb2xldGUgaXQncyBmb3NzaWxpemVkLi4uCisjCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBtZW1vcnlfbG9ja19hYm92ZSBhbmQgbWVtb3J5X3VubG9jazoKKyMgIllvdSBjYW4gJ2ZyZWV6ZScgZGF0YSBvbiB0aGUgc2NyZWVuIGJ5IHR1cm5pbmcgb24gTWVtb3J5IExvY2sgaW4gYSBsaW5lIG9mCisjIHRleHQuICBBbGwgbGluZXMgYWJvdmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgbGluZSBiZWNvbWUgbG9ja2VkIGluIHBsYWNlIG9uCisjIHRoZSBzY3JlZW4uICBUaGVuIGVudGVyIGRhdGEgbm9ybWFsbHkuICBXaGVuIHRoZSBzY3JlZW4gZmlsbHMgdXAsIGFueQorIyBmdXJ0aGVyIGRhdGEgZW50ZXJlZCBmb3JjZXMgdGhlIGZpcnN0IGxpbmUgb2YgdW5mcm96ZW4gbGluZSB0ZXh0IHRvIHNjcm9sbAorIyB1bmRlciB0aGUgZnJvemVuIGRhdGEuICBMaW5lcyBzY3JvbGxlZCBvZmYgdGhlIHNjcmVlbiBhcmUgaW5zZXJ0ZWQgaW50bworIyBtZW1vcnkgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBmaXJzdCBmcm96ZW4gbGluZS4iIChmcm9tIHRoZSBIUCA3MDAvOTYKKyMgVXNlcidzIG1hbnVhbCkuICBWVDEwMC9BTlNJIG1lbW9yeSBsb2NrIHNldCBpcyBcRVs+MmgsIHJlc2V0IGlzIFxFWz4ybC4KKyMKKyMgQXBwbGljYXRpb25zIHRoYXQgdXNlIHRlcm1pbmZvIGFyZSBzdXBwb3NlZCB0byBiZWhhdmUgYXMgdGhvdWdoIHhyIGlzCisjIGFsd2F5cyB0cnVlLgorIworbGluZWZlZWRfaXNfbmV3bGluZQkJT1ROTAlib29sCU5MCS0JCS0JWUItLS0JbW92ZSBkb3duIHdpdGggXG4KKyMgZXZlbl9wYXJpdHkJCQlPVEVQCWJvb2wJRVAJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBldmVuIHBhcml0eQorIyBvZGRfcGFyaXR5CQkJT1RPUAlib29sCU9QCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgb2RkIHBhcml0eQorIyBoYWxmX2R1cGxleAkJCU9USEQJYm9vbAlIRAktCQktCS1CLS0tCXRlcm1pbmFsIGlzIGhhbGYtZHVwbGV4CisjIGxvd2VyX2Nhc2Vfb25seQkJT1RMQwlib29sCUxDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgbG93ZXIgY2FzZQorIyB1cHBlcl9jYXNlX29ubHkJCU9UVUMJYm9vbAlVQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IHVwcGVyIGNhc2UKK2JhY2tzcGFjZV9kZWxheQkJCU9UZEIJbnVtCWRCCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkgKKyMgZm9ybV9mZWVkX2RlbGF5CQlPVGRGCW51bQlkRgktCQktCS1CLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5MCitob3Jpem9udGFsX3RhYl9kZWxheQkJT1RkVAludW0JZFQJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSQorIyB2ZXJ0aWNhbF90YWJfZGVsYXkJCU9UZFYJbnVtCWRWCS0JCS0JLUItLS0JcGFkZGluZyByZXF1aXJlZCBmb3IgXlYKK251bWJlcl9vZl9mdW5jdGlvbl9rZXlzCQlPVGtuCW51bQlrbgktCQktCS1CLUctCWNvdW50IG9mIGZ1bmN0aW9uIGtleXMKK290aGVyX25vbl9mdW5jdGlvbl9rZXlzCQlPVGtvCXN0cglrbwktCQktCS1CLUctCWxpc3Qgb2Ygc2VsZi1tYXBwZWQga2V5Y2FwcworYXJyb3dfa2V5X21hcAkJCU9UbWEJc3RyCW1hCS0JCS0JWUJDLS0JbWFwIGFycm93IGtleXMgcm9ndWUoMSkgbW90aW9uIGtleXMKKyMgbWVtb3J5X2xvY2tfYWJvdmUJCU9UbWwJc3RyCW1sCS0JCS0JLUItLS0JbG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQorIyBtZW1vcnlfdW5sb2NrCQkJT1RtdQlzdHIJbXUJLQkJLQktQi0tLQl1bmxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKK2hhc19oYXJkd2FyZV90YWJzCQlPVHB0CWJvb2wJcHQJLQkJLQlZQi0tLQloYXMgOC1jaGFyIHRhYnMgaW52b2tlZCB3aXRoIF5JCityZXR1cm5fZG9lc19jbHJfZW9sCQlPVHhyCWJvb2wJeHIJLQkJLQlZQi0tLQlyZXR1cm4gY2xlYXJzIHRoZSBsaW5lCisjIHRla180MDI1X2luc2VydF9saW5lCQlPVHh4CWJvb2wJeHgJLQkJLQktQkMtLQlUZWt0cm9uaXggNDAyNSBpbnNlcnQtbGluZSBnbGl0Y2gKKyMKKyMgbXl0aW5mbyBkZXNjcmliZWQgdGhpcyBhcyBhIHRlcm1jYXAgY2FwYWJpbGl0eSwgYnV0IGl0J3Mgbm90IGxpc3RlZCBpbiB0aGUKKyMgNC40QlNEIG1hbiBwYWdlcywgYW5kIG5vdCBmb3VuZCBpbiB0aGUgNC40QlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuY3Vyc2VzCisjIHBhY2thZ2UsIGxpa2UgU3lzdGVtIFYsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFsd2F5cyB0cnVlLgorIworIyByaW5kX29ubHlfYXRfdG9wCQlPVHhxCWJvb2wJeHEJLQkJLQktLS0tLQlyZXZlcnNlIGluZGV4IG9ubHkgd29ya3MgZnJvbSB0b3AgbGluZQorIworIyBVbml2ZXJzaXR5IG9mIFdhdGVybG9vIHRlcm1jYXAgZXh0ZW5zaW9ucyAoYXMgZGVzY3JpYmVkIGluIG15dGluZm8pLgorIyBUaGUgYHhsJyB0ZXJtY2FwIGZpbGUgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90CisjIGJlIHJlc29sdmVkIGJ5IGEgdHlwZSBjaGVjay4gIFRoZSBkZXNjcmlwdGlvbnMgYXJlIGd1ZXNzZXMgZnJvbSB3aGF0IHdhcworIyBpbiB0aGUgbXl0aW5mbyB0YWJsZXMuIAorIworIyBrZXlfaW50ZXJydXB0X2NoYXIJCU9Ua2kJc3RyCWtpCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBpbnRlcnJ1cHQga2V5ICg/KQorIyBrZXlfa2lsbF9jaGFyCQkJT1RrawlzdHIJa2sJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGtpbGwga2V5ICg/KQorIyBrZXlfc3VzcGVuZF9jaGFyCQlPVGt6CXN0cglregktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgc3VzcGVuZCBrZXkgKD8pCisjIGluaXRpYWxpemF0aW9uX21lc3N5CQlPVHhjCWJvb2wJeGMJLQkJLQktLS0tLQlpbml0aWFsaXphdGlvbiBsZWF2ZXMgZ2FyYmFnZSBvbiB0aGUgc2NyZWVuICg/KQorIyBpbmRfYXRfYm90dG9tX2RvZXNfY3IJCU9UeGwJYm9vbAl4bAktCQktCS0tLS0tCWluZGV4IGRvZXMgYSBjYXJyaWFnZSByZXR1cm4KKyMKKyMgTm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHVuaXF1ZSB0byBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UuCisjIFNSIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdCBiZSByZXNvbHZlZCBieSBhIHR5cGUKKyMgY2hlY2suCisjCisjIHNjcm9sbF9sZWZ0CQkJT1RzbDEJc3RyCVNsCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZAorIyBzY3JvbGxfcmlnaHQJCQlPVHNyMQlzdHIJU3IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZAorIyBwYXJtX3Njcm9sbF9sZWZ0CQlPVHNsCXN0cglTTAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQgIzEgY2hhcmFjdGVycworIyBwYXJtX3Njcm9sbF9yaWdodAkJT1RzcglzdHIJU1IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZCAjMSBjaGFyYWN0ZXJzCisjCisjIFRoZSBteXRpbmZvIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgWGVuaXggZGVmaW5lZCBpdHMgb3duIHNldCBvZiBmb3Jtcy1kcmF3aW5nIGNhcGFiaWxpdGllczoKKyMKKyMgY2FwCUlCTSBBU0NJSQlkZXNjcmlwdGlvbiAgICAgICAgICAgICBBQ1MgICAgICAgICAJQVNDSUkKKyMgLS0tCS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0JLS0tLS0tCisjIEcxCTE5MSBcMjc3IE0tPwlzaW5nbGUgdXBwZXIgcmlnaHQgICAJQUNTX1VSQ09STkVSCisjIEcyCTIxOCBcMzMyIE0tWglzaW5nbGUgdXBwZXIgbGVmdAlBQ1NfVUxDT1JORVIKKyMgRzMJMTkyIFwzMDAgTS1ACXNpbmdsZSBsb3dlciBsZWZ0CUFDU19MTENPUk5FUgorIyBHNAkyMTcgXDMzMSBNLVkJc2luZ2xlIGxvd2VyIHJpZ2h0CUFDU19MUkNPUk5FUgorIyBHNQkxODcgXDI3MyBNLTsJZG91YmxlIHVwcGVyIHJpZ2h0CisjIEc2CTIwMSBcMzExIE0tSQlkb3VibGUgdXBwZXIgbGVmdAorIyBHNwkyMDAgXDMxMCBNLUgJZG91YmxlIGxvd2VyIGxlZnQKKyMgRzgJMTg4IFwyNzQgTS08CWRvdWJsZSBsb3dlciByaWdodAorIyBHQwkxOTcgXDMwNSBNLUUJc2luZ2xlIGludGVyc2VjdGlvbglBQ1NfUExVUwlfIF8KKyMgR0QJMTk0IFwzMDIgTS1CCXNpbmdsZSBkb3duLXRpY2sJQUNTX1RURUUJIHwKKyMgR0gJMTk2IFwzMDQgTS1ECXNpbmdsZSBob3Jpem9udGFsIGxpbmUJQUNTX0hMSU5FCisjIEdMCTE4MCBcMjY0IE0tNAlzaW5nbGUgbGVmdCB0aWNrCUFDU19SVEVFCS18CisjIEdSCTE5NSBcMzAzIE0tQwlzaW5nbGUgcmlnaHQgdGljawlBQ1NfTFRFRQl8LQorIyBHVQkxOTMgXDMwMSBNLUEJc2luZ2xlIHVwIHRpY2sJCUFDU19CVEVFCV98XworIyBHVgkxNzkgXDI2MyBNLTMJc2luZ2xlIHZlcnRpY2FsIGxpbmUJQUNTX1ZMSU5FCisjIEdjCTIwNiBcMzE2IE0tTglkb3VibGUgaW50ZXJzZWN0aW9uCisjIEdkCTIwMyBcMzEzIE0tSwlkb3VibGUgZG93biB0aWNrCisjIEdoCTIwNSBcMzE1IE0tTQlkb3VibGUgaG9yaXpvbnRhbCBsaW5lCisjIEdsCTIwNCBcMjA0IE0tTAlkb3VibGUgbGVmdCB0aWNrCisjIEdyCTE4NSBcMjcxIE0tOQlkb3VibGUgcmlnaHQgdGljaworIyBHdQkyMDIgXDMxMiBNLUoJZG91YmxlIHVwIHRpY2sKKyMgR3YJMTg2IFwyNzIgTS06CWRvdWJsZSB2ZXJ0aWNhbCBsaW5lCisjCisjIFRoZSBjb21waWxlciB3aWxsIHRyYW5zbGF0ZSB0aGUgc2luZ2xlLWxpbmUgY2FwcyBhbmQgZGlzY2FyZCB0aGUgb3RoZXJzCisjICh2aWEgSUdOT1JFIGFsaWFzZXMgZnVydGhlciBkb3duKS4gIFdlIGRvbid0IHdhbnQgdG8gZG8gbm9ybWFsIHBhZCAKKyMgdHJhbnNsYXRpb24gb24gdGhlc2UsIHRoZXkncmUgb2Z0ZW4gc2luZ2xlLWNoYXJhY3RlciBwcmludGFibGUgQVNDSUkKKyMgc3RyaW5ncyB0aGF0IGhhcHBlbiB0byBiZSBudW1lcmljcy4gIFRoZXJlJ3MgYXdrIGNvZGUgaW4gcGFyYW1ldHJpemVkLnNoCisjIHRoYXQgZGV0ZWN0cyB0aGUgYWNzXyBwcmVmaXggYW5kIHVzZXMgaXQgdG8gc3VwcHJlc3MgcGFkIHRyYW5zbGF0aW9uLgorIyBUaGVzZSB0ZXJtaW5mbyBuYW1lcyBhcmUgaW52ZW50ZWQuCisjCithY3NfdWxjb3JuZXIJCQlPVEcyCXN0cglHMgktCQktCS0tLS0tCXNpbmdsZSB1cHBlciBsZWZ0CithY3NfbGxjb3JuZXIJCQlPVEczCXN0cglHMwktCQktCS0tLS0tCXNpbmdsZSBsb3dlciBsZWZ0CithY3NfdXJjb3JuZXIJCQlPVEcxCXN0cglHMQktCQktCS0tLS0tCXNpbmdsZSB1cHBlciByaWdodAorYWNzX2xyY29ybmVyCQkJT1RHNAlzdHIJRzQJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgcmlnaHQKK2Fjc19sdGVlCQkJT1RHUglzdHIJR1IJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgcmlnaHQKK2Fjc19ydGVlCQkJT1RHTAlzdHIJR0wJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgbGVmdAorYWNzX2J0ZWUJCQlPVEdVCXN0cglHVQktCQktCS0tLS0tCXRlZSBwb2ludGluZyB1cAorYWNzX3R0ZWUJCQlPVEdECXN0cglHRAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBkb3duCithY3NfaGxpbmUJCQlPVEdICXN0cglHSAktCQktCS0tLS0tCXNpbmdsZSBob3Jpem9udGFsIGxpbmUKK2Fjc192bGluZQkJCU9UR1YJc3RyCUdWCS0JCS0JLS0tLS0Jc2luZ2xlIHZlcnRpY2FsIGxpbmUKK2Fjc19wbHVzCQkJT1RHQwlzdHIJR0MJLQkJLQktLS0tLQlzaW5nbGUgaW50ZXJzZWN0aW9uCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNSU5GTyBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoaXMgc2VjdGlvbiBpcyBhbG1vc3QgYWxsIGNvbW1lbnRzLiAgV2hhdCBpdCdzIG1haW5seSBmb3IgaXMgdG8gZGVzY3JpYmUKKyMgd2hhdCBjYXBhYmlsaXRpZXMgbmVlZCB0byBiZSBzcXVlZXplZCBvdXQgdG8gZ2V0IGRvd24gdG8gdGhlIFhTSSBDdXJzZXMKKyMgc3RhbmRhcmQgc2V0LiAgVGhleSBhcmUgZmxhZ2dlZCB3aXRoIEsuCisjCisjIEhQIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIEhQCisjIHRlcm1pbmZvIGZpbGVzLiAgRXhjZXB0IGZvciBtZW1vcnlfbG9jayBhbmQgbWVtb3J5X3VubG9jaywgdGhleSBhcmUKKyMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBTVnI0IGV4dGVuc2lvbnMsIGJ1dCB0aGV5IG1ha2UgdGhlIGJpbmFyeSBmb3JtYXQKKyMgZGlmZmVyZW50LiAgR3Jyci4uLi4KKyMKKyNtZW1vcnlfbG9jawkJCW1lbWwJc3RyCW1sCS0JCS0JLS0tLUsJbWVtb3J5IGxvY2sgYWJvdmUKKyNtZW1vcnlfdW5sb2NrCQkJbWVtdQlzdHIJbXUJLQkJLQktLS0tSwltZW1vcnkgdW5sb2NrCisjcGxhYl9ub3JtCQkJcGxuCXN0cglwbgktCQktCS0tLS0tCXByb2dyYW0gbGFiZWwgIzEgdG8gc2hvdyBzdHJpbmcgIzIKKyNsYWJlbF9vbgkJCXNtbG4Jc3RyCUxPCS0JCS0JLS0tLS0JdHVybiBvbiBzb2Z0IGxhYmVscworI2xhYmVsX29mZgkJCXJtbG4Jc3RyCUxGCS0JCS0JLS0tLS0JdHVybiBvZmYgc29mdCBsYWJlbHMKKyNrZXlfZjExCQkJa2YxMQlzdHIJRjEJLQkJLQktLS0tLQlGMTEgZnVuY3Rpb24ga2V5Cisja2V5X2YxMgkJCWtmMTIJc3RyCUYyCS0JCS0JLS0tLS0JRjEyIGZ1bmN0aW9uIGtleQorI2tleV9mMTMJCQlrZjEzCXN0cglGMwktCQktCS0tLS0tCUYxMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE0CQkJa2YxNAlzdHIJRjQJLQkJLQktLS0tLQlGMTQgZnVuY3Rpb24ga2V5Cisja2V5X2YxNQkJCWtmMTUJc3RyCUY1CS0JCS0JLS0tLS0JRjE1IGZ1bmN0aW9uIGtleQorI2tleV9mMTYJCQlrZjE2CXN0cglGNgktCQktCS0tLS0tCUYxNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjE3CQkJa2YxNwlzdHIJRjcJLQkJLQktLS0tLQlGMTcgZnVuY3Rpb24ga2V5Cisja2V5X2YxOAkJCWtmMTgJc3RyCUY4CS0JCS0JLS0tLS0JRjE4IGZ1bmN0aW9uIGtleQorI2tleV9mMTkJCQlrZjE5CXN0cglGOQktCQktCS0tLS0tCUYxOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjIwCQkJa2YyMAlzdHIJRkEJLQkJLQktLS0tLQlGMjAgZnVuY3Rpb24ga2V5Cisja2V5X2YyMQkJCWtmMjEJc3RyCUZCCS0JCS0JLS0tLS0JRjIxIGZ1bmN0aW9uIGtleQorI2tleV9mMjIJCQlrZjIyCXN0cglGQwktCQktCS0tLS0tCUYyMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjIzCQkJa2YyMwlzdHIJRkQJLQkJLQktLS0tLQlGMjMgZnVuY3Rpb24ga2V5Cisja2V5X2YyNAkJCWtmMjQJc3RyCUZFCS0JCS0JLS0tLS0JRjI0IGZ1bmN0aW9uIGtleQorI2tleV9mMjUJCQlrZjI1CXN0cglGRgktCQktCS0tLS0tCUYyNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjI2CQkJa2YyNglzdHIJRkcJLQkJLQktLS0tLQlGMjYgZnVuY3Rpb24ga2V5Cisja2V5X2YyNwkJCWtmMjcJc3RyCUZICS0JCS0JLS0tLS0JRjI3IGZ1bmN0aW9uIGtleQorI2tleV9mMjgJCQlrZjI4CXN0cglGSQktCQktCS0tLS0tCUYyOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjI5CQkJa2YyOQlzdHIJRkoJLQkJLQktLS0tLQlGMjkgZnVuY3Rpb24ga2V5Cisja2V5X2YzMAkJCWtmMzAJc3RyCUZLCS0JCS0JLS0tLS0JRjMwIGZ1bmN0aW9uIGtleQorI2tleV9mMzEJCQlrZjMxCXN0cglGTAktCQktCS0tLS0tCUYzMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMyCQkJa2YzMglzdHIJRk0JLQkJLQktLS0tLQlGMzIgZnVuY3Rpb24ga2V5Cisja2V5X2YzMwkJCWtmMzMJc3RyCUZOCS0JCS0JLS0tLS0JRjMzIGZ1bmN0aW9uIGtleQorI2tleV9mMzQJCQlrZjM0CXN0cglGTwktCQktCS0tLS0tCUYzNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM1CQkJa2YzNQlzdHIJRlAJLQkJLQktLS0tLQlGMzUgZnVuY3Rpb24ga2V5Cisja2V5X2YzNgkJCWtmMzYJc3RyCUZRCS0JCS0JLS0tLS0JRjM2IGZ1bmN0aW9uIGtleQorI2tleV9mMzcJCQlrZjM3CXN0cglGUgktCQktCS0tLS0tCUYzNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjM4CQkJa2YzOAlzdHIJRlMJLQkJLQktLS0tLQlGMzggZnVuY3Rpb24ga2V5Cisja2V5X2YzOQkJCWtmMzkJc3RyCUZUCS0JCS0JLS0tLS0JRjM5IGZ1bmN0aW9uIGtleQorI2tleV9mNDAJCQlrZjQwCXN0cglGVQktCQktCS0tLS0tCUY0MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQxCQkJa2Y0MQlzdHIJRlYJLQkJLQktLS0tLQlGNDEgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MgkJCWtmNDIJc3RyCUZXCS0JCS0JLS0tLS0JRjQyIGZ1bmN0aW9uIGtleQorI2tleV9mNDMJCQlrZjQzCXN0cglGWAktCQktCS0tLS0tCUY0MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ0CQkJa2Y0NAlzdHIJRlkJLQkJLQktLS0tLQlGNDQgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NQkJCWtmNDUJc3RyCUZaCS0JCS0JLS0tLS0JRjQ1IGZ1bmN0aW9uIGtleQorI2tleV9mNDYJCQlrZjQ2CXN0cglGYQktCQktCS0tLS0tCUY0NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ3CQkJa2Y0NwlzdHIJRmIJLQkJLQktLS0tLQlGNDcgZnVuY3Rpb24ga2V5Cisja2V5X2Y0OAkJCWtmNDgJc3RyCUZjCS0JCS0JLS0tLS0JRjQ4IGZ1bmN0aW9uIGtleQorI2tleV9mNDkJCQlrZjQ5CXN0cglGZAktCQktCS0tLS0tCUY0OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjUwCQkJa2Y1MAlzdHIJRmUJLQkJLQktLS0tLQlGNTAgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MQkJCWtmNTEJc3RyCUZmCS0JCS0JLS0tLS0JRjUxIGZ1bmN0aW9uIGtleQorI2tleV9mNTIJCQlrZjUyCXN0cglGZwktCQktCS0tLS0tCUY1MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjUzCQkJa2Y1MwlzdHIJRmgJLQkJLQktLS0tLQlGNTMgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NAkJCWtmNTQJc3RyCUZpCS0JCS0JLS0tLS0JRjU0IGZ1bmN0aW9uIGtleQorI2tleV9mNTUJCQlrZjU1CXN0cglGagktCQktCS0tLS0tCUY1NSBmdW5jdGlvbiBrZXkKKyNrZXlfZjU2CQkJa2Y1NglzdHIJRmsJLQkJLQktLS0tLQlGNTYgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NwkJCWtmNTcJc3RyCUZsCS0JCS0JLS0tLS0JRjU3IGZ1bmN0aW9uIGtleQorI2tleV9mNTgJCQlrZjU4CXN0cglGbQktCQktCS0tLS0tCUY1OCBmdW5jdGlvbiBrZXkKKyNrZXlfZjU5CQkJa2Y1OQlzdHIJRm4JLQkJLQktLS0tLQlGNTkgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MAkJCWtmNjAJc3RyCUZvCS0JCS0JLS0tLS0JRjYwIGZ1bmN0aW9uIGtleQorI2tleV9mNjEJCQlrZjYxCXN0cglGcAktCQktCS0tLS0tCUY2MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYyCQkJa2Y2MglzdHIJRnEJLQkJLQktLS0tLQlGNjIgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MwkJCWtmNjMJc3RyCUZyCS0JCS0JLS0tLS0JRjYzIGZ1bmN0aW9uIGtleQorIworIyBJQk0gZXh0ZW5zaW9ucworIworIyBUaGVzZSBleHRlbnNpb25zIGZvbGxvdyBwdHJfbm9uIChyZXBsYWNpbmcgZXZlcnl0aGluZyBhZnRlciBpdCkgaW4gSUJNCisjIHRlcm1pbmZvIGZpbGVzLgorIworIyBUaGUgcGxhY2VzIGluIHRoZSBib3hbMTJdIGNhcGFiaWxpdGllcyBjb3JyZXNwb25kIHRvIGFjc2MgY2hhcmFjdGVycywgaGVyZSBpcworIyB0aGUgbWFwcGluZzoKKyMKKyMJYm94MVswXSAgPSBBQ1NfVUxDT1JORVIKKyMJYm94MVsxXSAgPSBBQ1NfSExJTkUJCisjCWJveDFbMl0gID0gQUNTX1VSQ09STkVSCisjCWJveDFbM10gID0gQUNTX1ZMSU5FCisjCWJveDFbNF0gID0gQUNTX0xSQ09STkVSCisjCWJveDFbNV0gID0gQUNTX0xMQ09STkVSCisjCWJveDFbNl0gID0gQUNTX1RURUUKKyMJYm94MVs3XSAgPSBBQ1NfUlRFRQorIwlib3gxWzhdICA9IEFDU19CVEVFCisjCWJveDFbOV0gID0gQUNTX0xURUUKKyMJYm94MVsxMF0gPSBBQ1NfUExVUworIworIyBUaGUgYm94MiBjaGFyYWN0ZXJzIGFyZSB0aGUgZG91YmxlLWxpbmUgdmVyc2lvbnMgb2YgdGhlc2UgZm9ybXMgZ3JhcGhpY3MuCisjCitib3hfY2hhcnNfMQkJCWJveDEJc3RyCWJ4CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgcHJpbWFyeSBzZXQKKyNib3hfY2hhcnNfMgkJCWJveDIJc3RyCWJ5CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgc2Vjb25kYXJ5IHNldAorI2JveF9hdHRyXzEJCQliYXR0MQlzdHIJQngJLQkJLQktLS0tSwlhdHRyaWJ1dGVzIGZvciBib3gxCisjYm94X2F0dHJfMgkJCWJhdHQyCXN0cglCeQktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDIKKyNjb2xvcl9iZ18wCQkJY29sYjAJc3RyCWQwCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAwCisjY29sb3JfYmdfMQkJCWNvbGIxCXN0cglkMQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMQorI2NvbG9yX2JnXzIJCQljb2xiMglzdHIJZDIJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDIKKyNjb2xvcl9iZ18zCQkJY29sYjMJc3RyCWQzCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAzCisjY29sb3JfYmdfNAkJCWNvbGI0CXN0cglkNAktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNAorI2NvbG9yX2JnXzUJCQljb2xiNQlzdHIJZDUJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDUKKyNjb2xvcl9iZ182CQkJY29sYjYJc3RyCWQ2CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA2CisjY29sb3JfYmdfNwkJCWNvbGI3CXN0cglkNwktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNworI2NvbG9yX2ZnXzAJCQljb2xmMAlzdHIJYzAJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9mZ18xCQkJY29sZjEJc3RyCWMxCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAxCisjY29sb3JfZmdfMgkJCWNvbGYyCXN0cgljMgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMgorI2NvbG9yX2ZnXzMJCQljb2xmMwlzdHIJYzMJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9mZ180CQkJY29sZjQJc3RyCWM0CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA0CisjY29sb3JfZmdfNQkJCWNvbGY1CXN0cgljNQktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNQorI2NvbG9yX2ZnXzYJCQljb2xmNglzdHIJYzYJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9mZ183CQkJY29sZjcJc3RyCWM3CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA3CisjZm9udF8wCQkJCWZvbnQwCXN0cglmMAktCQktCS0tLS0tCXNlbGVjdCBmb250IDAKKyNmb250XzEJCQkJZm9udDEJc3RyCWYxCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMQorI2ZvbnRfMgkJCQlmb250MglzdHIJZjIJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAyCisjZm9udF8zCQkJCWZvbnQzCXN0cglmMwktCQktCS0tLS0tCXNlbGVjdCBmb250IDMKKyNmb250XzQJCQkJZm9udDQJc3RyCWY0CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNAorI2ZvbnRfNQkJCQlmb250NQlzdHIJZjUJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA1CisjZm9udF82CQkJCWZvbnQ2CXN0cglmNgktCQktCS0tLS1LCXNlbGVjdCBmb250IDYKKyNmb250XzcJCQkJZm9udDcJc3RyCWY3CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNworI2tleV9iYWNrX3RhYgkJCWtidGFiCXN0cglrMAktCQktCS0tLS0tCWJhY2t0YWIga2V5Cisja2V5X2RvCQkJCWtkbwlzdHIJa2kJLQkJLQktLS0tSwlkbyByZXF1ZXN0IGtleQorI2tleV9jb21tYW5kCQkJa2NtZAlzdHIJa2QJLQkJLQktLS0tSwljb21tYW5kLXJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmRfcGFuZQkJa2NwbglzdHIJa1cJLQkJLQktLS0tSwljb21tYW5kLXBhbmUga2V5Cisja2V5X2VuZAkJCWtlbmQJc3RyCWt3CS0JCS0JLS0tLS0JZW5kIGtleQorI2tleV9oZWxwCQkJa2hscAlzdHIJa3EJLQkJLQktLS0tLQloZWxwIGtleQorI2tleV9uZXdsaW5lCQkJa25sCXN0cglubAktCQktCS0tLS1LCW5ld2xpbmUga2V5Cisja2V5X25leHRfcGFuZQkJCWtucG4Jc3RyCWt2CS0JCS0JLS0tLUsJbmV4dC1wYW5lIGtleQorI2tleV9wcmV2X2NtZAkJCWtwcG4Jc3RyCWtwCS0JCS0JLS0tLUsJcHJldmlvdXMtY29tbWFuZCBrZXkKKyNrZXlfcHJldl9wYW5lCQkJa3BwbglzdHIJa1YJLQkJLQktLS0tSwlwcmV2aW91cy1wYW5lIGtleQorI2tleV9xdWl0CQkJa3F1aXQJc3RyCWtRCS0JCS0JLS0tLUsJcXVpdCBrZXkKKyNrZXlfc2VsZWN0CQkJa3NlbAlzdHIJa1UJLQkJLQktLS0tLQlzZWxlY3Qga2V5Cisja2V5X3Njcm9sbF9sZWZ0CQlrc2NsCXN0cglregktCQktCS0tLS1LCXNjcm9sbCBsZWZ0Cisja2V5X3Njcm9sbF9yaWdodAkJa3NjcglzdHIJa1oJLQkJLQktLS0tSwlzY3JvbGwgcmlnaHQKKyNrZXlfdGFiCQkJa3RhYglzdHIJa28JLQkJLQktLS0tSwl0YWIga2V5Cisja2V5X3NtYXBfaW4xCQkJa21wZjEJc3RyCUt2CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgaW5wdXQKKyNrZXlfc21hcF9vdXQxCQkJa21wdDEJc3RyCUtWCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDEgb3V0cHV0Cisja2V5X3NtYXBfaW4yCQkJa21wZjIJc3RyCUt3CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgaW5wdXQKKyNrZXlfc21hcF9vdXQyCQkJa21wdDIJc3RyCUtXCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgb3V0cHV0Cisja2V5X3NtYXBfaW4zCQkJa21wZjMJc3RyCUt4CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgaW5wdXQKKyNrZXlfc21hcF9vdXQzCQkJa21wdDMJc3RyCUtYCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgb3V0cHV0Cisja2V5X3NtYXBfaW40CQkJa21wZjQJc3RyCUt5CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgaW5wdXQKKyNrZXlfc21hcF9vdXQ0CQkJa21wdDQJc3RyCUtZCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDQgb3V0cHV0Cisja2V5X3NtYXBfaW41CQkJa21wZjUJc3RyCUt6CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgaW5wdXQKKyNrZXlfc21hcF9vdXQ1CQkJa21wdDUJc3RyCUtaCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgb3V0cHV0CisjYXBwbF9kZWZpbmVkX3N0cgkJYXBzdHIJc3RyCXphCS0JCS0JLS0tLUsJYXBwbGljYXRpb24tZGVmaW5lZCBzdHJpbmcKKyMgVGhlIGtleV9zbWFwX2luWzY3ODldIGFuZCBrZXlfc21hcF9vdXRbNjc4OV0gY2FwYWJpbGl0aWVzIGFyZW4ndCBkZXNjcmliZWQgaW4KKyMgdGhlIElCTSBtYW51YWwgcGFnZXMsIHNvIHRoZSBjYXAgbmFtZSBzdHJpbmdzIGFyZSBndWVzc2VzLiAgVGhlIHRlcm1pbmZvCisjIG5hbWVzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHJpZ2h0LCB0aGUgdGVybWNhcCBvbmVzIGFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuCisja2V5X3NtYXBfaW42CQkJa21wZjYJc3RyCWshCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgaW5wdXQKKyNrZXlfc21hcF9vdXQ2CQkJa21wdDYJc3RyCUtACS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDYgb3V0cHV0Cisja2V5X3NtYXBfaW43CQkJa21wZjcJc3RyCWsjCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgaW5wdXQKKyNrZXlfc21hcF9vdXQ3CQkJa21wdDcJc3RyCUskCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgb3V0cHV0Cisja2V5X3NtYXBfaW44CQkJa21wZjgJc3RyCWslCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggaW5wdXQKKyNrZXlfc21hcF9vdXQ4CQkJa21wdDgJc3RyCUteCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggb3V0cHV0Cisja2V5X3NtYXBfaW45CQkJa21wZjkJc3RyCWsmCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgaW5wdXQKKyNrZXlfc21hcF9vdXQ5CQkJa21wdDkJc3RyCUsqCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDkgb3V0cHV0CisjIFVuZG9jdW1lbnRlZCBjYXBhYmlsaXRpZXMgZW5kIGhlcmUKKyNrZXlfc2YxCQkJa3NmMQlzdHIJUzEJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxCisja2V5X3NmMgkJCWtzZjIJc3RyCVMyCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMgorI2tleV9zZjMJCQlrc2YzCXN0cglTMwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDMKKyNrZXlfc2Y0CQkJa3NmNAlzdHIJUzQJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA0Cisja2V5X3NmNQkJCWtzZjUJc3RyCVM1CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNQorI2tleV9zZjYJCQlrc2Y2CXN0cglTNgktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDYKKyNrZXlfc2Y3CQkJa3NmNwlzdHIJUzcJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA3Cisja2V5X3NmOAkJCWtzZjgJc3RyCVM4CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOAorI2tleV9zZjkJCQlrc2Y5CXN0cglTOQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDkKKyNrZXlfc2YxMAkJCWtzZjEwCXN0cglTQQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEwCisjIEFJWCB2ZXJzaW9uIDMgZG9jdW1lbnRzIGRpZmZlcmVudCBjb2RlcyBmb3IgRjExLCBGMTIgYW5kIGRvZXMgbm90IG1lbnRpb24KKyMgRjEzLUY2NC4gIEFJWCB2ZXJzaW9uIDQgdXNlcyB0aGUgc2FtZSBuYW1pbmcgZm9yIEYwLUY2MyBhcyBhYm92ZS4KKyNrZXlfZjExCQkJa2YxMQlzdHIJazwJLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTEKKyNrZXlfZjEyCQkJa2YxMglzdHIJaz4JLQkJLQktLS0tLQlmdW5jdGlvbiBrZXkgMTIKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyNrZXlfYWN0aW9uCQkJa2FjdAlzdHIJa0oJLQkJLQktLS0tSwlzZW50IGJ5IGFjdGlvbiBrZXkKKyMgVGhlIElCTSBkb2NzIHNheSB0aGVzZSBjYXBhYmlsaXRpZXMgYXJlIGZvciB0YWJsZS1kcmF3aW5nLCBhbmQgYXJlCisjIHZhbGlkIG9ubHkgZm9yIGFpeHRlcm0gZGVzY3JpcHRpb25zLgorI2VudGVyX3RvcGxpbmVfbW9kZQkJdG9wbAlzdHIJdHAJLQkJLQktLS0tSwlzdGFydCB0b3AtbGluZSBtb2RlCisjZW50ZXJfYm90dG9tX21vZGUJCWJ0bWwJc3RyCWJtCS0JCS0JLS0tLUsJc3RhcnQgYm90dG9tLWxpbmUgbW9kZQorI2VudGVyX3J2ZXJ0X21vZGUJCXJ2ZXJ0CXN0cglydgktCQktCS0tLS1LCXN0YXJ0IHJpZ2h0LXZlcnRpY2FsIG1vZGUKKyNlbnRlcl9sdmVydF9tb2RlCQlsdmVydAlzdHIJbHYJLQkJLQktLS0tSwlzdGFydCBsZWZ0LXZlcnRpY2FsIG1vZGUKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEFMSUFTIERFQ0xBUkFUSU9OUworIworIyBIZXJlIHdlIHNldCB1cCBhbGlhc2VzIGZvciB0cmFuc2xhdGluZyBleHRlbnNpb25zIGludG8gc3RhbmRhcmQgdGVybWluZm8uCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtY2FwIGFsaWFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBCU0QgYWxpYXNlczoKKyMKKyMgVGhpcyBpcyBhIGNvbW1vbiBlcnJvciBpbiBtYW55IHRlcm1jYXAgZmlsZXMuICBXZSdsbCBnZXQgbm90aWZpZWQgZHVyaW5nCisjIHRyYW5zbGF0aW9uIHdoZW4gdGhpcyAob3IgYW55IG90aGVyIGFsaWFzKSBmaXJlcy4KKyMKK2NhcGFsaWFzCXNiCXNyCUJTRAlzY3JvbGwgdGV4dCBkb3duCisjCisjIEFUJlQgZXh0ZW5zaW9uczoKKyMKKyMgVGhlIG9sZCBBVCZUIDU0MTAsIDU0MjAsIDU0MjUsIHBjNjMwMHBsdXMsIDYxMCwgYW5kIHM0IGVudHJpZXMgdXNlZCBhIHNldCBvZgorIyBub25zdGFuZGFyZCBjYXBhYmlsaXRpZXMuICBJdHMgc2lnbmF0dXJlIGlzIHRoZSBLTSBjYXBhYmlsaXR5LCB1c2VkIHRvIG5hbWUKKyMgc29tZSBzb3J0IG9mIGtleW1hcCBmaWxlLiAgRUUsIEJPLCBDSSwgQ1YsIFhTLCBEUywgRkwgYW5kIEZFIGFyZSBpbiB0aGlzCisjIHNldC4gIENvbW1lbnRzIGluIHRoZSBvcmlnaW5hbCwgYW5kIGEgbGl0dGxlIGNyb3NzLWNoZWNraW5nIHdpdGggb3RoZXIgQVQmVAorIyBkb2N1bWVudGF0aW9uLCBzZWVtIHRvIGVzdGFibGlzaCB0aGUgZm9sbG93aW5nIG1hcHBpbmdzOgorIworY2FwYWxpYXMJQk8JbXIJQVQmVAllbnRlcl9yZXZlcnNlX21vZGUKK2NhcGFsaWFzCUNJCXZpCUFUJlQJY3Vyc29yX2ludmlzaWJsZQorY2FwYWxpYXMJQ1YJdmUJQVQmVAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlEUwltaAlBVCZUCWVudGVyX2RpbV9tb2RlCisjY2FwYWxpYXMJRUUJbWUJQVQmVAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJRkUJTEYJQVQmVAlsYWJlbF9vbgorY2FwYWxpYXMJRkwJTE8JQVQmVAlsYWJlbF9vZmYKK2NhcGFsaWFzCVhTCW1rCUFUJlQJZW50ZXJfc2VjdXJlX21vZGUKKyMKKyMgV2UgY29tbWVudCBvdXQgRUUgYmVjYXVzZSB0aGUgY29uZmxpY3RpbmcgWEVOSVggRUUgaXMgbW9yZSBjb21tb24gaW4gCisjIG9sZCBlbnRyaWVzLgorIworIyBYRU5JWCBleHRlbnNpb25zOgorIworIyBUaGVzZSBhcmUgdGhlIG9uZXMgd2Uga25vdyBob3cgdG8gdHJhbnNsYXRlIGRpcmVjdGx5OgorIworY2FwYWxpYXMJRUUJbWgJWEVOSVgJZXhpdF9hdHRyaWJ1dGVfbW9kZQkKK2NhcGFsaWFzCUdFCWFlCVhFTklYCWV4aXRfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJR1MJYXMJWEVOSVgJZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQorY2FwYWxpYXMJQ0YJdmkJWEVOSVgJY3Vyc29yX2ludmlzCitjYXBhbGlhcwlDTwl2ZQlYRU5JWAljdXJzb3Jfbm9ybWFsCitjYXBhbGlhcwlFTglANwlYRU5JWAlrZXlfZW5kCitjYXBhbGlhcwlITQlraAlYRU5JWAlrZXlfaG9tZQorY2FwYWxpYXMJTEQJa0wJWEVOSVgJa2V5X2RsCitjYXBhbGlhcwlQRAlrTglYRU5JWAlrZXlfbnBhZ2UKK2NhcGFsaWFzCVBOCXBvCVhFTklYCXBydHJfb2ZmCitjYXBhbGlhcwlQUwlwZglYRU5JWAlwcnRyX29uCitjYXBhbGlhcwlQVQlrUAlYRU5JWAlrZXlfcHBhZ2UKK2NhcGFsaWFzCVJUCUA4CVhFTklYCWtlbnQKK2NhcGFsaWFzCVVQCWt1CVhFTklYCWtjdXUxCitjYXBhbGlhcwlHNglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19VTENPUk5FUgorY2FwYWxpYXMJRzcJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTExDT1JORVIKK2NhcGFsaWFzCUc1CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VSQ09STkVSCitjYXBhbGlhcwlHOAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MUkNPUk5FUgorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfTFRFRQorY2FwYWxpYXMJR3IJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfUlRFRQorY2FwYWxpYXMJR3UJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfQlRFRQorY2FwYWxpYXMJR2QJSUdOT1JFCVhFTklYCWRvdWJsZSBBQ1NfVFRFRQorY2FwYWxpYXMJR2gJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfSExJTkUKK2NhcGFsaWFzCUd2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1ZMSU5FCitjYXBhbGlhcwlHYwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19QTFVTCitjYXBhbGlhcwlHRwlJR05PUkUJWEVOSVgJYWNzLWdsaXRjaAorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCWtxCSUxCUlCTQlrZXlfaGVscAorIworIyBJcmlzIGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlIUwltaAlJUklTCWVudGVyX2RpbV9tb2RlCisjCisjIFRla3Ryb25peCBleHRlbnNpb25zOgorIworY2FwYWxpYXMJS0EJazsJVGVrCWtleV9mMTAKK2NhcGFsaWFzCUtCCUYxCVRlawlrZXlfZjExCitjYXBhbGlhcwlLQwlGMglUZWsJa2V5X2YxMgorY2FwYWxpYXMJS0QJRjMJVGVrCWtleV9mMTMKK2NhcGFsaWFzCUtFCUY0CVRlawlrZXlfZjE0CitjYXBhbGlhcwlLRglGNQlUZWsJa2V5X2YxNQorY2FwYWxpYXMJQkMJU2IJVGVrCXNldF9iYWNrZ3JvdW5kCitjYXBhbGlhcwlGQwlTZglUZWsJc2V0X2ZvcmVncm91bmQKKyMKKyMgVGhlcmUgYXJlIGFsc28gdGhlIGZvbGxvd2luZzoKKyMKKyMJWEVOSVgJWEVOSVggdmFyaWFibGUgbmFtZQluYW1lIGNsYXNoIHdpdGggdGVybWluZm8/CisjCS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwlDTAlrZXlfY2hhcl9sZWZ0CisjCUNSCWtleV9jaGFyX3JpZ2h0CisjCUNXCWtleV9jaGFuZ2Vfd2luZG93CisjCUhQCT8/CisjCUxGCWtleV9saW5lZmVlZCAJCWxhYmVsX29mZgorIwlOVQlrZXlfbmV4dF91bmxvY2tlZF9jZWxsCisjCVBMCT8/CisjCVBSCT8/CisjCVJDCWtleV9yZWNhbGMJCXJlbW92ZV9jbG9jaworIwlSRglrZXlfdG9nZ2xlX3JlZgkJcmVxX2Zvcl9pbnB1dAorIwlXTAlrZXlfd29yZF9sZWZ0CisjCVdSCWtleV93b3JkX3JpZ2h0CisjCisjIElmIHlvdSBrbm93IHdoYXQgYW55IG9mIHRoZSBxdWVzdGlvbi1tYXJrZWQgb25lcyBtZWFuLCBwbGVhc2UgdGVsbCB1cy4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVybWluZm8gYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgSUJNIGV4dGVuc2lvbnM6CisjCitpbmZvYWxpYXMJZm9udDAJczBkcwlJQk0Jc2V0MF9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDEJczFkcwlJQk0Jc2V0MV9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDIJczJkcwlJQk0Jc2V0Ml9kZXNfc2VxCitpbmZvYWxpYXMJZm9udDMJczNkcwlJQk0Jc2V0M19kZXNfc2VxCitpbmZvYWxpYXMJa2J0YWIJa2NidAlJQk0Ja2V5X2JhY2t0YWIKK2luZm9hbGlhcwlrc2VsCWtzbHQJSUJNCWtleV9zZWxlY3QKKyMKKyMgU29tZSBvdGhlcnMgYXJlIGlkZW50aWNhbCB0byBTVnI0L1hQRzQgY2FwYWJpbGl0aWVzLCBpbiBwYXJ0aWN1bGFyOgorIyBrY21kLCBrZW5kLCBraGxwLCBhbmQga2YxMS4uLmtmNjMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisjIExvY2FsIFZhcmlhYmxlczoKKyMgY2FzZS1mb2xkLXNlYXJjaDpuaWwKKyMgdHJ1bmNhdGUtbGluZXM6dAorIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL0NhcHMua2V5cyBiL25jdXJzZXMtNS43L2luY2x1ZGUvQ2Fwcy5rZXlzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDFhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL0NhcHMua2V5cwpAQCAtMCwwICsxLDEzNTQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRGlja2V5CisjICAgIGFuZDogSWx5YSBaYWtoYXJldmljaAorIworIyAkSWQ6IENhcHMua2V5cyx2IDEuMyAyMDA2LzA1LzI3IDE1OjMzOjA0IHRvbSBFeHAgJAorIworIyBUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgbmN1cnNlcycgdGVybWNhcC90ZXJtaW5mbyBjYXBhYmlsaXR5IHRhYmxlLCB3aGljaAorIyBpcyBpbGx1c3RyYXRlcyBhbiBleHBlcmltZW50YWwgZXh0ZW5zaW9uIHRvIGRlc2NyaWJlIGFsdC0sIHNoaWZ0LSBhbmQKKyMgY29udHJvbC1tb2RpZmllcnMgYXBwbGllZCB0byBmdW5jdGlvbiBhbmQgbm9ybWFsIGtleXMsIGFzIGRvbmUgb24gSUJNIHBjJ3MuCisjCisjIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBpbml0aWFsaXplcnMgZm9yIHRhYmxlcyB0aGF0IGRyaXZlIHRpYywKKyMgaW5mb2NtcCwgYW5kIHRoZSBsaWJyYXJ5IGNvbXBpbGF0aW9uIGNvZGUgdXNlZCB0byBzdXBwb3J0IHRoZSB0ZXJtY2FwIAorIyBjb21wYXRpYmlsaXR5IGhhY2suICBJdCBpcyBhbHNvIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYnVsYXIgcG9ydGlvbiBvZiB0aGUKKyMgdGVybWluZm8oNSkgbWFuIHBhZ2U7IGxpbmVzIGJlZ2lubmluZyB3aXRoIGAjJScgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGJlY29tZQorIyB0aGUgdGVybWluZm8gdGFibGUuCisjCisjIFRoaXMgZmlsZSBoYXMgdGhyZWUgbWFqb3Igc2VjdGlvbnM7IGEgc3RhbmRhcmQtY2FwYWJpbGl0aWVzIHRhYmxlLCB0d28KKyMgZXh0ZW5zaW9uLWNhcGFiaWxpdHkgdGFibGVzLCBhbmQgYSBzZWN0aW9uIG9mIGFsaWFzZXMgZGVjbGFyYXRpb25zLgorIyBUaGUgZmlyc3QgdHdvIGhhdmUgdGhlIHNhbWUgZm9ybWF0LCBhcyBmb2xsb3dzOgorIworIyBGSUxFIEZPUk1BVAorIworIyBDb2x1bW4gMTogdGVybWluZm8gdmFyaWFibGUgbmFtZQorIyBDb2x1bW4gMjogdGVybWluZm8gY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiAzOiBjYXBhYmlsaXR5IHR5cGUgKGJvb2xlYW4sIG51bWVyaWMsIG9yIHN0cmluZykKKyMgQ29sdW1uIDQ6IHRlcm1jYXAgY2FwYWJpbGl0eSBuYW1lCisjIENvbHVtbiA1OiBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNjogdmFsdWUgZm9yIEtFWV94eHggbmFtZSwgaWYgYW55LCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA3OiBMZWFkIHdpdGggYFknIGlmIGNhcGFiaWxpdHkgc2hvdWxkIGJlIGVtaXR0ZWQgaW4gdGVybWNhcAorIyAgICAgICAgICAgdHJhbnNsYXRpb25zLCBgLScgb3RoZXJ3aXNlCisjIENvbHVtbiA4OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uCisjCisjIFRoZSBjb2RlcyBmb2xsb3dpbmcgW1ktXSBpbiBjb2x1bW4gNyBkZXNjcmliZSB0aGUgdmVyc2lvbnMgb2YgdGVybWNhcCB3aGljaAorIyB1c2UgdGhlIGdpdmVuIGNhcGFiaWxpdHkuICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJzZXMgbGlicmFyeQorIyBwcm9wZXI7IHJhdGhlciwgaXQncyB0aGVyZSB0byBoZWxwIHRoZSB0ZXJtaW5mbyBtYWludGFpbmVyIGF2b2lkIGVtaXR0aW5nCisjIHRlcm1jYXAgZW50cnkgdHJhbnNsYXRpb25zIHRoYXQgYXJlIG1vcmUgdGhhbiAxMDIzIGJ5dGVzIGxvbmcgKGFuZCB0YW5rIGEKKyMgbG90IG9mIG9sZCB0ZXJtY2FwLXVzaW5nIHByb2dyYW1zKS4gIFRoZSBjb2RlcyByZWFkIGFzIGZvbGxvd3M6CisjCUIgPSBtZW50aW9uZWQgaW4gdGhlIEJTRCBtYW4gcGFnZSBmb3IgNC40QlNEIGN1cnNlcworIwlDID0gdXNlZCBieSB0aGUgNC40QlNEIGN1cnNlcyBsaWJyYXJ5CisjCUcgPSBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIEdOVSB0ZXJtY2FwCisjCUUgPSB1c2VkIGJ5IEdOVSBFbWFjcworIwlLID0gcmVtb3ZlIHRoaXMgdGVybWluZm8gY2FwYWJpbGl0eSB3aGVuIHRyYW5zbGF0aW5nIHRvIHN0YW5kYXJkIGZvcm1hdAorIyBUaGUgaW1wb3J0YW50IGNvZGVzIGFyZSBDIGFuZCBFLiAgQSBjYXAgd2l0aCBDIG9yIEUgc2hvdWxkIGJlIHByZXNlcnZlZCBpbgorIyB0cmFuc2xhdGlvbiBpZiBwb3NzaWJsZS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgcHJlc2VydmluZyBhbGwgc3VjaCBjYXBzIG1heQorIyBsZWFkIHRvIHNvbWUgdGVybWNhcCB0cmFuc2xhdGlvbnMgYmVpbmcgdG9vIGxvbmcuICBUaGUgdGVybWNhcCBtYWludGFpbmVyCisjIGhhcyBhIGJpdCBvZiBhIGp1Z2dsaW5nIGFjdCB0byBkby4uLnBvdGVudGlhbCBwcm9ibGVtIGNhc2VzIGFyZSBtYXJrZWQgd2l0aAorIyBhbiBhc3RlcmlzayAoKikuCisjCisjIFRoZSBhbGlhc2VzIHNlY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIworIyBDb2x1bW4gMTogZWl0aGVyIGBjYXBhbGlhcycgb3IgYGluZm9hbGlhcycKKyMgQ29sdW1uIDI6IG5hbWUgdG8gYmUgYWxpYXNlZAorIyBDb2x1bW4gMzogd2hhdCBuYW1lIGl0IHNob3VsZCB0cmFuc2xhdGUgdG8uICBUaGUgbmFtZSBJR05PUkUgbWVhbnMgaXQKKyMgICAgICAgICAgIHNob3VsZCBiZSBkaXNjYXJkZWQgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS4KKyMgQ29sdW1uIDQ6IG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBzZXQgKHVzZWQgZm9yIGNvbXBpbGVyIHdhcm5pbmcgbWVzc2FnZXMpCisjIENvbHVtbiA1OiBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uICh1c3VhbGx5IGFuIGFzc29jaWF0ZWQgdGVybWluZm8gdmFyaWFibGUpCisjCisjIEhBTkRMSU5HIFRFUk1DQVAgQU5EIFRFUk1JTkZPIEVYVEVOU0lPTlMKKyMKKyMgVGhlcmUgYXJlIGJhc2ljYWxseSBmaXZlIGRpZmZlcmVudCB3YXlzIHRvIGhhbmRsZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbworIyBleHRlbnNpb25zOgorIworIyAxLiBEb24ndCBsaXN0IHRoZSBjYXBuYW1lIGhlcmUsIG9yIGxpc3QgaXQgYnV0IGNvbW1lbnQgaXQgb3V0ICh0aGUgbGF0dGVyCisjIGlzIHByZWZlcmFibGU7IHNvbWVvbmUgbWlnaHQgd2FudCB0byBoYW5kbGUgaXQgaW4gdGhlIGZ1dHVyZSkuICBJZiB5b3UgZG8KKyMgdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSB0cmVhdGVkIGFzIHVua25vd24gYW5kIHJhaXNlIGEgd2FybmluZyBmcm9tCisjIHRoZSBjb21waWxlci4KKyMKKyMgMi4gQWxpYXMgaXQuICBUaGlzIGlzIGFwcHJvcHJpYXRlIGlmIHRoZSBjYXBhYmlsaXR5IGhhcyB0aGUgc2FtZSBtZWFuaW5nCisjIGFzIGFuIGFscmVhZHktc3VwcG9ydGVkIG9uZS4gIFRoZSBjb21waWxlciB3aWxsIGhhbmRsZSBhbGlhc2luZywgZW1pdHRpbmcKKyMgYW4gYXBwcm9wcmlhdGUgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHdoZW5ldmVyIGFuIGFsaWFzIGZpcmVzLgorIworIyAzLiBMaXN0IGl0IGluIHRoZSBzdGFuZGFyZCB0YWJsZS4gIFlvdSBhbG1vc3QgY2VydGFpbmx5IGRvICpub3QqIHdhbnQKKyMgdG8gZG8gdGhpcyAtLSB0aGUgY2FwYWJpbGl0aWVzIGluIHRoYXQgb25lLCBhbmQgdGhlaXIgb3JkZXIsIGhhdmUgYmVlbgorIyBjYXJlZnVsbHkgY2hvc2VuIHRvIGJlIFNWcjQtYmluYXJ5LWNvbXBhdGlibGUgd2hlbiB0aGV5J3JlIHdyaXR0ZW4gb3V0CisjIGFzIGEgdGVybWluZm8gb2JqZWN0LCBhbmQgYnJlYWtpbmcgdGhpcyB3b3VsZCBiZSBiYWQuICBJdCdzIHVwIHRoZSBuY3Vyc2VzCisjIGxpYnJhcnkgd2hhdCB0byBkbyB3aXRoIHRoZSB0ZXJtaW5mbyBkYXRhIGFmdGVyIGl0J3MgcmVhZCBpbi4KKyMKKyMgNC4gTGlzdCBpdCBpbiB0aGUgYWxpYXNlcyB0YWJsZSB3aXRoIGFuIElHTk9SRSB0YXJnZXQgZmllbGQuICBJZiB5b3UKKyMgZG8gdGhpcywgdGhlIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkIG9uIGlucHV0ICh0aG91Z2ggdGhlIHVzZXIgd2lsbAorIyBnZXQgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgaXQpLgorIworIyA1LiBMaXN0IGl0IGluIHRoZSBleHRlbnNpb25zIHRhYmxlLiBJZiB5b3UgZG8gdGhpcywgdGhlIGNvbXBpbGVyIHdpbGwKKyMgc2lsZW50bHkgYWNjZXB0IHRoZSBjYXBhYmlsaXR5LCBidXQgdGhlIGN1cnNlcyBsaWJyYXJ5IHByb3BlciB3aWxsIG5ldmVyCisjIHNlZSBpdCAoYmVjYXVzZSBpdCB3b24ndCBiZSB3cml0dGVuIG91dCBhcyBwYXJ0IG9mIHRoZSB0ZXJtaW5mbyBvYmplY3QKKyMgZm9ybWF0KS4gIEl0J3MgdXAgdG8geW91IHdoYXQgeW91IGhhdmUgdGhlIGNvbXBpbGVyIGRvIHdpdGggaXQuCisjCisjIFRoZXJlIGFyZSB0d28gb3Bwb3NpdGUgcmVhc29ucyB0byBjaG9vc2Ugb3B0aW9uIDUuICBPbmUgaXMgd2hlbiB5b3Ugd2FudAorIyB0byBlYXQgdGhlIGNhcGFiaWxpdHkgc2lsZW50bHkgYW5kIGRpc2NhcmQgaXQgd2hlbiBkb2luZyB0cmFuc2xhdGlvbnMKKyMgdG8gdGVybWluZm8gd2l0aCB0aWMgLUkuICBTb21lIHZlcnkgb2xkIG9ic29sZXRlIEJTRCBjYXBzIGxpa2UgOmtuOiBhcmUKKyMgaW4gdGhpcyBjbGFzcy4gIE5vdGhpbmcgd2lsbCBldmVyIHVzZSB0aGVtIGFnYWluLgorIworIyBNb3JlIHVzdWFsbHksIHlvdSB3YW50IHRoZSBjb21waWxlciB0byB0cnkgdG8gZGVkdWNlIHNvbWV0aGluZyBmcm9tIHRoZQorIyBjYXBhYmlsaXR5IHZhbHVlIHRoYXQgaXQgY2FuIHVzZSB0byB0cmFuc2xhdGUgaXQgaW50byB5b3VyIG91dHB1dCBmb3JtYXQuCisjIFlvdSdsbCBuZWVkIHRvIHdyaXRlIGN1c3RvbSBjb2RlLCBwcm9iYWJseSBpbiBwb3N0cHJvY2Vzc190ZXJtY2FwKCkgb3IKKyMgcG9zdHByb2Nlc3NfdGVybWluZm8oKSwgdG8gaGFuZGxlIHRoZSB0cmFuc2xhdGlvbi4KKyMKKyMgQ09OVFJPTExJTkcgRU5UUlkgTEVOR1RIIAorIworIyBOb3RlcyBvbiBzcGVjaWZpYyBlbGlzaW9ucyBtYWRlIHRvIGZpdCB0cmFuc2xhdGlvbnMgd2l0aGluIDEwMjMgYnl0ZXM6CisjCisjIE1hY2hpbmVzIHdpdGggSUJNIFBDLWxpa2Uga2V5Ym9hcmRzIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZworIyBrZXlzOiBrZXlfbnBhZ2UsIGtleV9wcGFnZSwga2V5X2hvbWUsIGtleV9sbCAod2hpY2ggaXMgdXNlZCBmb3IgaW4gdGVybWNhcC0KKyMgb25seSBlbnZpcm9ubWVudHMgZm9yIEVuZCBvciBIb21lLURvd24pLCBrZXlfZGMsIGFuZCBrZXlfaWMuICBUaGlzIGlzIGFsc28KKyMgdGhlIHNldCBvZiBrZXlzIHRoZSBgam9lJyBlZGl0b3Igd2lsbCBiZSB1cHNldCBpZiBpdCBjYW4ndCBzZWUuICBTbyBkb24ndCAKKyMgdHJpbSB0aG9zZSBvdXQgb2YgdGhlIHNldCB0byBiZSB0cmFuc2xhdGVkIHRvIHRlcm1jYXAsIG9yIHZhcmlvdXMgdXNlcnMgb2YKKyMgdGhlIHRlcm1jYXAgZmlsZSB3aWxsIGJlY29tZSBpcmF0ZS4KKyMKKyMgSXQgbWlnaHQgbG9vayB0ZW1wdGluZyB0byBsZWF2ZSB0aG9zZSBsb25nIGluaXQgc3RyaW5ncyBvdXQgb2YgdHJhbnNsYXRpb25zLgorIyBXZSBjYW4ndCBkbyBpdCAoeWV0KTsgNC40QlNEIHRwdXQgYW5kIHRzZXQgdXNlIHRoZW0uCisjCisjIFdlIHJldGFpbiB0aGUgc2dyIGNhcGFiaWxpdHkgaW4gdHJhbnNsYXRpb24gaW4gc3BpdGUgb2YgdGhlIGZhY3QgdGhhdCBuZWl0aGVyCisjIDQuNEJTRCBub3IgR05VIEVtYWNzIHVzZXMgaXQsIGJlY2F1c2UgKGEpIHNvbWUgZW50cnkgbmFtaW5nIGRpc3RpbmN0aW9ucyBhcmUKKyMgaGFyZCB0byB1bmRlcnN0YW5kIHdpdGhvdXQgaXQsIGFuZCAoYikgdGhlIGVudHJpZXMgaW4gd2hpY2ggaXQgaXMgbG9uZyB0ZW5kCisjIHRvIGJlIG9sZGVyIHR5cGVzIHRoYXQgZG9uJ3QgdXNlIHVwIGEgbG90IG9mIHN0cmluZyBzcGFjZSBvbiBmdW5jdGlvbiBrZXlzLgorIyBUaGUgdGljKDEpIHRyYW5zbGF0aW9uIGNvZGUgd2lsbCBjb21wbGFpbiBhbmQgZWxpZGUgaXQgaWYgaXQgbWFrZXMgYSBjcml0aWNhbAorIyBkaWZmZXJlbmNlICh0aGVyZSBpcyBzcGVjaWFsIGNvZGUgaW4gdGljIHRvIHJlY29nbml6ZSB0aGlzIHNpdHVhdGlvbikuCisjCisjIFllcywgQlNEIHRzZXQoMSkgdXNlcyBocGEuICBXZSBlbGlkZSBocGEvdnBhIGFueXdheSBiZWNhdXNlIHRoZSBtb3Rpb24KKyMgb3B0aW1pemVyIGluIEJTRCBjdXJzZXMgZGlkbid0IHVzZSB0aGVtLiAgVGhpcyBvbWlzc2lvbiBzZWVtcyB0byBiZSB0aGUKKyMgc2luZ2xlIG1vc3QgZWZmZWN0aXZlIG9uZSwgaXQgc2hvcnRlbmVkIHRoZSByZXNvbHZlZCBsZW5ndGggb2YgYWxsIHRoaXJ0ZWVuCisjIHByb2JsZW0gZW50cmllcyBpbiB0aGUgOS45LjAgdmVyc2lvbiBvZiB0aGUgdGVybWluZm8gbWFzdGVyIGJlbG93IGNyaXRpY2FsLgorIworIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGtlZXAgZjExIGFuZCBmMTIgZm9yIEVtYWNzIHVzZSwgYnV0IGEgY291cGxlIG9mIHRlcm1jYXAKKyMgdHJhbnNsYXRpb25zIGdvIGJhY2sgb3ZlciBjcml0aWNhbCBpZiB3ZSBkbyB0aGlzLiAgQXMgNC40QlNEIGN1cnNlcyBmYWRlcworIyBpbnRvIGhpc3RvcnkgYW5kIEdOVSB0ZXJtY2FwJ3MgYXBwbGljYXRpb24gYmFzZSBzaHJpbmtzIHRvd2FyZHMgYmVpbmcgR05VIAorIyBFbWFjcyBvbmx5LCB3ZSdsbCBwcm9iYWJseSBlbGlkZSBvdXQgc29tZSBCU0Qtb25seSBjYXBhYmlsaXRpZXMgaW4gb3JkZXIKKyMgdG8gYnV5IHNwYWNlIGZvciBub24tZXNzZW50aWFscyBFbWFjcyBpcyBzdGlsbCB1c2luZy4gIENhcGFiaWxpdGllcyBoaWdoCisjIG9uIHRoYXQgaGl0IGxpc3Q6IHJjLCBzYywgdWMuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBTVEFOREFSRCBDQVBBQklMSVRJRVMKKyMKKyMlVGhlIGZvbGxvd2luZyBpcyBhIGNvbXBsZXRlIHRhYmxlIG9mIHRoZSBjYXBhYmlsaXRpZXMgaW5jbHVkZWQgaW4gYQorIyV0ZXJtaW5mbyBkZXNjcmlwdGlvbiBibG9jayBhbmQgYXZhaWxhYmxlIHRvIHRlcm1pbmZvLXVzaW5nIGNvZGUuICBJbiBlYWNoCisjJWxpbmUgb2YgdGhlIHRhYmxlLAorIyUKKyMlVGhlIFxmQnZhcmlhYmxlXGZSIGlzIHRoZSBuYW1lIGJ5IHdoaWNoIHRoZSBwcm9ncmFtbWVyIChhdCB0aGUgdGVybWluZm8gbGV2ZWwpCisjJWFjY2Vzc2VzIHRoZSBjYXBhYmlsaXR5LgorIyUKKyMlVGhlIFxmQmNhcG5hbWVcZlIgaXMgdGhlIHNob3J0IG5hbWUgdXNlZCBpbiB0aGUgdGV4dCBvZiB0aGUgZGF0YWJhc2UsCisjJWFuZCBpcyB1c2VkIGJ5IGEgcGVyc29uIHVwZGF0aW5nIHRoZSBkYXRhYmFzZS4KKyMlV2hlbmV2ZXIgcG9zc2libGUsIGNhcG5hbWVzIGFyZSBjaG9zZW4gdG8gYmUgdGhlIHNhbWUgYXMgb3Igc2ltaWxhciB0bworIyV0aGUgQU5TSSBYMy42NC0xOTc5IHN0YW5kYXJkIChub3cgc3VwZXJzZWRlZCBieSBFQ01BLTQ4LCB3aGljaCB1c2VzIAorIyVpZGVudGljYWwgb3IgdmVyeSBzaW1pbGFyIG5hbWVzKS4gIFNlbWFudGljcyBhcmUgYWxzbyBpbnRlbmRlZCB0byBtYXRjaAorIyV0aG9zZSBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKyMlCisjJVRoZSB0ZXJtY2FwIGNvZGUgaXMgdGhlIG9sZAorIyUuQiB0ZXJtY2FwCisjJWNhcGFiaWxpdHkgbmFtZSAoc29tZSBjYXBhYmlsaXRpZXMgYXJlIG5ldywgYW5kIGhhdmUgbmFtZXMgd2hpY2ggdGVybWNhcAorIyVkaWQgbm90IG9yaWdpbmF0ZSkuCisjJS5QCisjJUNhcGFiaWxpdHkgbmFtZXMgaGF2ZSBubyBoYXJkIGxlbmd0aCBsaW1pdCwgYnV0IGFuIGluZm9ybWFsIGxpbWl0IG9mIDUKKyMlY2hhcmFjdGVycyBoYXMgYmVlbiBhZG9wdGVkIHRvIGtlZXAgdGhlbSBzaG9ydCBhbmQgdG8gYWxsb3cgdGhlIHRhYnMgaW4KKyMldGhlIHNvdXJjZSBmaWxlCisjJS5CIENhcHMKKyMldG8gbGluZSB1cCBuaWNlbHkuCisjJQorIyVGaW5hbGx5LCB0aGUgZGVzY3JpcHRpb24gZmllbGQgYXR0ZW1wdHMgdG8gY29udmV5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlCisjJWNhcGFiaWxpdHkuICBZb3UgbWF5IGZpbmQgc29tZSBjb2RlcyBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQ6CisjJS5UUAorIyUoUCkKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgYmUgc3BlY2lmaWVkCisjJS5UUAorIyUjWzEtOV0KKyMlaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGluZGljYXRlcyB0aGF0IHRoZSBzdHJpbmcgaXMgcGFzc2VkIHRocm91Z2ggdHBhcm0gd2l0aAorIyVwYXJtcyBhcyBnaXZlbiAoI1xmSWlcZlApLgorIyUuVFAKKyMlKFAqKQorIyVpbmRpY2F0ZXMgdGhhdCBwYWRkaW5nIG1heSB2YXJ5IGluIHByb3BvcnRpb24gdG8gdGhlIG51bWJlciBvZgorIyVsaW5lcyBhZmZlY3RlZAorIyUuVFAKKyMlKCNcZFxmSWlcZlBcdSkKKyMlaW5kaWNhdGVzIHRoZSBcZklpXGZQXHV0aFxkIHBhcmFtZXRlci4KKyMlCisjJS5QUAorIyUgVGhlc2UgYXJlIHRoZSBib29sZWFuIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJCb29sZWFucwluYW1lCUNvZGVcZlIKK2F1dG9fbGVmdF9tYXJnaW4JCWJ3CWJvb2wJYncJLQktCVlCLUctCWN1YjEgd3JhcHMgZnJvbSBjb2x1bW4gMCB0byBsYXN0IGNvbHVtbgorYXV0b19yaWdodF9tYXJnaW4JCWFtCWJvb2wJYW0JLQktCVlCQ0dFCXRlcm1pbmFsIGhhcyBhdXRvbWF0aWMgbWFyZ2lucworbm9fZXNjX2N0bGMJCQl4c2IJYm9vbAl4YgktCS0JWUJDRy0JYmVlaGl2ZSAoZjE9ZXNjYXBlLCBmMj1jdHJsIEMpCitjZW9sX3N0YW5kb3V0X2dsaXRjaAkJeGhwCWJvb2wJeHMJLQktCVlCQ0dFCXN0YW5kb3V0IG5vdCBlcmFzZWQgYnkgb3ZlcndyaXRpbmcgKGhwKQorZWF0X25ld2xpbmVfZ2xpdGNoCQl4ZW5sCWJvb2wJeG4JLQktCVlCQ0dFCW5ld2xpbmUgaWdub3JlZCBhZnRlciA4MCBjb2xzIChjb25jZXB0KQorZXJhc2Vfb3ZlcnN0cmlrZQkJZW8JYm9vbAllbwktCS0JWUJDRy0JY2FuIGVyYXNlIG92ZXJzdHJpa2VzIHdpdGggYSBibGFuaworZ2VuZXJpY190eXBlCQkJZ24JYm9vbAlnbgktCS0JWUItRy0JZ2VuZXJpYyBsaW5lIHR5cGUKK2hhcmRfY29weQkJCWhjCWJvb2wJaGMJLQktCVlCQ0ctCWhhcmRjb3B5IHRlcm1pbmFsCitoYXNfbWV0YV9rZXkJCQlrbQlib29sCWttCS0JLQlZQi1HRQlIYXMgYSBtZXRhIGtleSAoaS5lLiwgc2V0cyA4dGgtYml0KQoraGFzX3N0YXR1c19saW5lCQkJaHMJYm9vbAlocwktCS0JWUItRy0JaGFzIGV4dHJhIHN0YXR1cyBsaW5lCitpbnNlcnRfbnVsbF9nbGl0Y2gJCWluCWJvb2wJaW4JLQktCVlCQ0dFCWluc2VydCBtb2RlIGRpc3Rpbmd1aXNoZXMgbnVsbHMKK21lbW9yeV9hYm92ZQkJCWRhCWJvb2wJZGEJLQktCVlCQ0ctCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGFib3ZlIHRoZSBzY3JlZW4KK21lbW9yeV9iZWxvdwkJCWRiCWJvb2wJZGIJLQktCVlCLUdFCWRpc3BsYXkgbWF5IGJlIHJldGFpbmVkIGJlbG93IHRoZSBzY3JlZW4KK21vdmVfaW5zZXJ0X21vZGUJCW1pcglib29sCW1pCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gaW5zZXJ0IG1vZGUKK21vdmVfc3RhbmRvdXRfbW9kZQkJbXNncglib29sCW1zCS0JLQlZQkNHRQlzYWZlIHRvIG1vdmUgd2hpbGUgaW4gc3RhbmRvdXQgbW9kZQorb3Zlcl9zdHJpa2UJCQlvcwlib29sCW9zCS0JLQlZQkNHLQl0ZXJtaW5hbCBjYW4gb3ZlcnN0cmlrZQorc3RhdHVzX2xpbmVfZXNjX29rCQllc2xvawlib29sCWVzCS0JLQlZQi1HLQllc2NhcGUgY2FuIGJlIHVzZWQgb24gdGhlIHN0YXR1cyBsaW5lCitkZXN0X3RhYnNfbWFnaWNfc21zbwkJeHQJYm9vbAl4dAktCS0JWUJDR0UJdGFicyBkZXN0cnVjdGl2ZSwgbWFnaWMgc28gY2hhciAodDEwNjEpCit0aWxkZV9nbGl0Y2gJCQloeglib29sCWh6CS0JLQlZQi1HRQljYW4ndCBwcmludCB+J3MgKGhhemVsdGluZSkKK3RyYW5zcGFyZW50X3VuZGVybGluZQkJdWwJYm9vbAl1bAktCS0JWUJDR0UJdW5kZXJsaW5lIGNoYXJhY3RlciBvdmVyc3RyaWtlcworeG9uX3hvZmYJCQl4b24JYm9vbAl4bwktCS0JWUItLS0JdGVybWluYWwgdXNlcyB4b24veG9mZiBoYW5kc2hha2luZworbmVlZHNfeG9uX3hvZmYJCQlueG9uCWJvb2wJbngJLQktCS0tLS0tCXBhZGRpbmcgd29uJ3Qgd29yaywgeG9uL3hvZmYgcmVxdWlyZWQKK3BydHJfc2lsZW50CQkJbWM1aQlib29sCTVpCS0JLQktLS0tLQlwcmludGVyIHdvbid0IGVjaG8gb24gc2NyZWVuCitoYXJkX2N1cnNvcgkJCWNodHMJYm9vbAlIQwktCS0JLS0tLS0JY3Vyc29yIGlzIGhhcmQgdG8gc2VlCitub25fcmV2X3JtY3VwCQkJbnJybWMJYm9vbAlOUgktCS0JLS0tLS0Jc21jdXAgZG9lcyBub3QgcmV2ZXJzZSBybWN1cAorbm9fcGFkX2NoYXIJCQlucGMJYm9vbAlOUAktCS0JLS0tLS0JcGFkIGNoYXJhY3RlciBkb2VzIG5vdCBleGlzdAorbm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbgkJbmRzY3IJYm9vbAlORAktCS0JLS0tLS0Jc2Nyb2xsaW5nIHJlZ2lvbiBpcyBub24tZGVzdHJ1Y3RpdmUKK2Nhbl9jaGFuZ2UJCQljY2MJYm9vbAljYwktCS0JLS0tLS0JdGVybWluYWwgY2FuIHJlLWRlZmluZSBleGlzdGluZyBjb2xvcnMKK2JhY2tfY29sb3JfZXJhc2UJCWJjZQlib29sCXV0CS0JLQktLS0tLQlzY3JlZW4gZXJhc2VkIHdpdGggYmFja2dyb3VuZCBjb2xvcgoraHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uCWhscwlib29sCWhsCS0JLQktLS0tLQl0ZXJtaW5hbCB1c2VzIG9ubHkgSExTIGNvbG9yIG5vdGF0aW9uIChUZWt0cm9uaXgpCitjb2xfYWRkcl9nbGl0Y2gJCQl4aHBhCWJvb2wJWUEJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciBocGEvbWhwYSBjYXBzCitjcl9jYW5jZWxzX21pY3JvX21vZGUJCWNyeG0JYm9vbAlZQgktCS0JLS0tLS0JdXNpbmcgY3IgdHVybnMgb2ZmIG1pY3JvIG1vZGUKK2hhc19wcmludF93aGVlbAkJCWRhaXN5CWJvb2wJWUMJLQktCS0tLS0tCXByaW50ZXIgbmVlZHMgb3BlcmF0b3IgdG8gY2hhbmdlIGNoYXJhY3RlciBzZXQKK3Jvd19hZGRyX2dsaXRjaAkJCXh2cGEJYm9vbAlZRAktCS0JLS0tLS0Jb25seSBwb3NpdGl2ZSBtb3Rpb24gZm9yIHZwYS9tdnBhIGNhcHMKK3NlbWlfYXV0b19yaWdodF9tYXJnaW4JCXNhbQlib29sCVlFCS0JLQktLS0tLQlwcmludGluZyBpbiBsYXN0IGNvbHVtbiBjYXVzZXMgY3IKK2NwaV9jaGFuZ2VzX3JlcwkJCWNwaXgJYm9vbAlZRgktCS0JLS0tLS0JY2hhbmdpbmcgY2hhcmFjdGVyIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorbHBpX2NoYW5nZXNfcmVzCQkJbHBpeAlib29sCVlHCS0JLQktLS0tLQljaGFuZ2luZyBsaW5lIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyVUaGVzZSBhcmUgdGhlIG51bWVyaWMgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQk51bWVyaWMJbmFtZQlDb2RlXGZSCitjb2x1bW5zCQkJCWNvbHMJbnVtCWNvCS0JLQlZQkNHRQludW1iZXIgb2YgY29sdW1ucyBpbiBhIGxpbmUKK2luaXRfdGFicwkJCWl0CW51bQlpdAktCS0JWUItRy0JdGFicyBpbml0aWFsbHkgZXZlcnkgIyBzcGFjZXMKK2xpbmVzCQkJCWxpbmVzCW51bQlsaQktCS0JWUJDR0UJbnVtYmVyIG9mIGxpbmVzIG9uIHNjcmVlbiBvciBwYWdlCitsaW5lc19vZl9tZW1vcnkJCQlsbQludW0JbG0JLQktCVlCLUctCWxpbmVzIG9mIG1lbW9yeSBpZiA+IGxpbmUuIDAgbWVhbnMgdmFyaWVzCittYWdpY19jb29raWVfZ2xpdGNoCQl4bWMJbnVtCXNnCS0JLQlZQkNHRQludW1iZXIgb2YgYmxhbmsgY2hhcmFjdGVycyBsZWZ0IGJ5IHNtc28gb3Igcm1zbworcGFkZGluZ19iYXVkX3JhdGUJCXBiCW51bQlwYgktCS0JWUItR0UJbG93ZXN0IGJhdWQgcmF0ZSB3aGVyZSBwYWRkaW5nIG5lZWRlZAordmlydHVhbF90ZXJtaW5hbAkJdnQJbnVtCXZ0CS0JLQlZQi0tLQl2aXJ0dWFsIHRlcm1pbmFsIG51bWJlciAoQ0IvdW5peCkKK3dpZHRoX3N0YXR1c19saW5lCQl3c2wJbnVtCXdzCS0JLQlZQi1HLQludW1iZXIgb2YgY29sdW1ucyBpbiBzdGF0dXMgbGluZQorbnVtX2xhYmVscwkJCW5sYWIJbnVtCU5sCS0JLQktLS0tLQludW1iZXIgb2YgbGFiZWxzIG9uIHNjcmVlbgorbGFiZWxfaGVpZ2h0CQkJbGgJbnVtCWxoCS0JLQktLS0tLQlyb3dzIGluIGVhY2ggbGFiZWwKK2xhYmVsX3dpZHRoCQkJbHcJbnVtCWx3CS0JLQktLS0tLQljb2x1bW5zIGluIGVhY2ggbGFiZWwKK21heF9hdHRyaWJ1dGVzCQkJbWEJbnVtCW1hCS0JLQlZQkMtLQltYXhpbXVtIGNvbWJpbmVkIGF0dHJpYnV0ZXMgdGVybWluYWwgY2FuIGhhbmRsZQorbWF4aW11bV93aW5kb3dzCQkJd251bQludW0JTVcJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGRlZmluZWFibGUgd2luZG93cworIyBUaGVzZSBjYW1lIGluIHdpdGggU1ZyNCdzIGNvbG9yIHN1cHBvcnQKK21heF9jb2xvcnMJCQljb2xvcnMJbnVtCUNvCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgb24gc2NyZWVuCittYXhfcGFpcnMJCQlwYWlycwludW0JcGEJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGNvbG9yLXBhaXJzIG9uIHRoZSBzY3JlZW4KK25vX2NvbG9yX3ZpZGVvCQkJbmN2CW51bQlOQwktCS0JLS0tLS0JdmlkZW8gYXR0cmlidXRlcyB0aGF0IGNhbid0IGJlIHVzZWQgd2l0aCBjb2xvcnMKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlIGZvbGxvd2luZyBudW1lcmljIGNhcGFiaWxpdGllcyBhcmUgcHJlc2VudCBpbiB0aGUgU1ZyNC4wIHRlcm0gc3RydWN0dXJlLAorIyVidXQgYXJlIG5vdCB5ZXQgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIHBhZ2UuICBUaGV5IGNhbWUgaW4gd2l0aCBTVnI0J3MKKyMlcHJpbnRlciBzdXBwb3J0LgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQk51bWVyaWMJbmFtZQlDb2RlXGZSCitidWZmZXJfY2FwYWNpdHkJCQlidWZzegludW0JWWEJLQktCS0tLS0tCW51bWJlcnMgb2YgYnl0ZXMgYnVmZmVyZWQgYmVmb3JlIHByaW50aW5nCitkb3RfdmVydF9zcGFjaW5nCQlzcGludgludW0JWWIJLQktCS0tLS0tCXNwYWNpbmcgb2YgcGlucyB2ZXJ0aWNhbGx5IGluIHBpbnMgcGVyIGluY2gKK2RvdF9ob3J6X3NwYWNpbmcJCXNwaW5oCW51bQlZYwktCS0JLS0tLS0Jc3BhY2luZyBvZiBkb3RzIGhvcml6b250YWxseSBpbiBkb3RzIHBlciBpbmNoCittYXhfbWljcm9fYWRkcmVzcwkJbWFkZHIJbnVtCVlkCS0JLQktLS0tLQltYXhpbXVtIHZhbHVlIGluIG1pY3JvXy4uLl9hZGRyZXNzCittYXhfbWljcm9fanVtcAkJCW1qdW1wCW51bQlZZQktCS0JLS0tLS0JbWF4aW11bSB2YWx1ZSBpbiBwYXJtXy4uLl9taWNybworbWljcm9fY29sX3NpemUJCQltY3MJbnVtCVlmCS0JLQktLS0tLQljaGFyYWN0ZXIgc3RlcCBzaXplIHdoZW4gaW4gbWljcm8gbW9kZQorbWljcm9fbGluZV9zaXplCQkJbWxzCW51bQlZZwktCS0JLS0tLS0JbGluZSBzdGVwIHNpemUgd2hlbiBpbiBtaWNybyBtb2RlCitudW1iZXJfb2ZfcGlucwkJCW5waW5zCW51bQlZaAktCS0JLS0tLS0JbnVtYmVycyBvZiBwaW5zIGluIHByaW50LWhlYWQKK291dHB1dF9yZXNfY2hhcgkJCW9yYwludW0JWWkJLQktCS0tLS0tCWhvcml6b250YWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgbGluZQorb3V0cHV0X3Jlc19saW5lCQkJb3JsCW51bQlZagktCS0JLS0tLS0JdmVydGljYWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgbGluZQorb3V0cHV0X3Jlc19ob3J6X2luY2gJCW9yaGkJbnVtCVlrCS0JLQktLS0tLQlob3Jpem9udGFsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGluY2gKK291dHB1dF9yZXNfdmVydF9pbmNoCQlvcnZpCW51bQlZbAktCS0JLS0tLS0JdmVydGljYWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgaW5jaAorcHJpbnRfcmF0ZQkJCWNwcwludW0JWW0JLQktCS0tLS0tCXByaW50IHJhdGUgaW4gY2hhcmFjdGVycyBwZXIgc2Vjb25kCit3aWRlX2NoYXJfc2l6ZQkJCXdpZGNzCW51bQlZbgktCS0JLS0tLS0JY2hhcmFjdGVyIHN0ZXAgc2l6ZSB3aGVuIGluIGRvdWJsZSB3aWRlIG1vZGUKK2J1dHRvbnMJCQkJYnRucwludW0JQlQJLQktCS0tLS0tCW51bWJlciBvZiBidXR0b25zIG9uIG1vdXNlCitiaXRfaW1hZ2VfZW50d2luaW5nCQliaXR3aW4JbnVtCVlvCS0JLQktLS0tLQludW1iZXIgb2YgcGFzc2VzIGZvciBlYWNoIGJpdC1pbWFnZSByb3cKK2JpdF9pbWFnZV90eXBlCQkJYml0eXBlCW51bQlZcAktCS0JLS0tLS0JdHlwZSBvZiBiaXQtaW1hZ2UgZGV2aWNlCisjJS5URQorIyUuYWQKKyMlCisjJVRoZXNlIGFyZSB0aGUgc3RyaW5nIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitiYWNrX3RhYgkJCWNidAlzdHIJYnQJLQkJLQlZQkNHRQliYWNrIHRhYiAoUCkKK2JlbGwJCQkJYmVsCXN0cglibAktCQktCVlCLUdFCWF1ZGlibGUgc2lnbmFsIChiZWxsKSAoUCkKK2NhcnJpYWdlX3JldHVybgkJCWNyCXN0cgljcgktCQktCVlCQ0dFCWNhcnJpYWdlIHJldHVybiAoUCopIChQKikKK2NoYW5nZV9zY3JvbGxfcmVnaW9uCQljc3IJc3RyCWNzCS0JCS0JWUJDR0UJY2hhbmdlIHJlZ2lvbiB0byBsaW5lICMxIHRvIGxpbmUgIzIgKFApCitjbGVhcl9hbGxfdGFicwkJCXRiYwlzdHIJY3QJLQkJLQlZQi1HLQljbGVhciBhbGwgdGFiIHN0b3BzIChQKQorY2xlYXJfc2NyZWVuCQkJY2xlYXIJc3RyCWNsCS0JCS0JWUJDR0UJY2xlYXIgc2NyZWVuIGFuZCBob21lIGN1cnNvciAoUCopCitjbHJfZW9sCQkJCWVsCXN0cgljZQktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBsaW5lIChQKQorY2xyX2VvcwkJCQllZAlzdHIJY2QJLQkJLQlZQkNHRQljbGVhciB0byBlbmQgb2Ygc2NyZWVuIChQKikKK2NvbHVtbl9hZGRyZXNzCQkJaHBhCXN0cgljaAktCQktCS1CLUdFKglob3Jpem9udGFsIHBvc2l0aW9uICMxLCBhYnNvbHV0ZSAoUCkKK2NvbW1hbmRfY2hhcmFjdGVyCQljbWRjaAlzdHIJQ0MJLQkJLQlZQi1HLQl0ZXJtaW5hbCBzZXR0YWJsZSBjbWQgY2hhcmFjdGVyIGluIHByb3RvdHlwZSAhPworY3Vyc29yX2FkZHJlc3MJCQljdXAJc3RyCWNtCS0JCS0JWUJDR0UJbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX2Rvd24JCQljdWQxCXN0cglkbwktCQktCVlCQ0dFCWRvd24gb25lIGxpbmUKK2N1cnNvcl9ob21lCQkJaG9tZQlzdHIJaG8JLQkJLQlZQkNHRQlob21lIGN1cnNvciAoaWYgbm8gY3VwKQorY3Vyc29yX2ludmlzaWJsZQkJY2l2aXMJc3RyCXZpCS0JCS0JWUItRy0JbWFrZSBjdXJzb3IgaW52aXNpYmxlCitjdXJzb3JfbGVmdAkJCWN1YjEJc3RyCWxlCS0JCS0JWUJDR0UJbW92ZSBsZWZ0IG9uZSBzcGFjZQorY3Vyc29yX21lbV9hZGRyZXNzCQltcmN1cAlzdHIJQ00JLQkJLQlZQi1HLQltZW1vcnkgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcsIG1vdmUgdG8gcm93ICMxIGNvbHVtbnMgIzIKK2N1cnNvcl9ub3JtYWwJCQljbm9ybQlzdHIJdmUJLQkJLQlZQkNHRQltYWtlIGN1cnNvciBhcHBlYXIgbm9ybWFsICh1bmRvIGNpdmlzL2N2dmlzKQorY3Vyc29yX3JpZ2h0CQkJY3VmMQlzdHIJbmQJLQkJLQlZQkNHRQlub24tZGVzdHJ1Y3RpdmUgc3BhY2UgKG1vdmUgcmlnaHQgb25lIHNwYWNlKQorY3Vyc29yX3RvX2xsCQkJbGwJc3RyCWxsCS0JCS0JWUJDR0UJbGFzdCBsaW5lLCBmaXJzdCBjb2x1bW4gKGlmIG5vIGN1cCkKK2N1cnNvcl91cAkJCWN1dTEJc3RyCXVwCS0JCS0JWUJDR0UJdXAgb25lIGxpbmUKK2N1cnNvcl92aXNpYmxlCQkJY3Z2aXMJc3RyCXZzCS0JCS0JWUJDR0UJbWFrZSBjdXJzb3IgdmVyeSB2aXNpYmxlCitkZWxldGVfY2hhcmFjdGVyCQlkY2gxCXN0cglkYwktCQktCVlCQ0dFCWRlbGV0ZSBjaGFyYWN0ZXIgKFAqKQorZGVsZXRlX2xpbmUJCQlkbDEJc3RyCWRsCS0JCS0JWUJDR0UJZGVsZXRlIGxpbmUgKFAqKQorZGlzX3N0YXR1c19saW5lCQkJZHNsCXN0cglkcwktCQktCVlCLUctCWRpc2FibGUgc3RhdHVzIGxpbmUKK2Rvd25faGFsZl9saW5lCQkJaGQJc3RyCWhkCS0JCS0JWUItRy0JaGFsZiBhIGxpbmUgZG93bgorZW50ZXJfYWx0X2NoYXJzZXRfbW9kZQkJc21hY3MJc3RyCWFzCS0JCS0JWUItRy0Jc3RhcnQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitlbnRlcl9ibGlua19tb2RlCQlibGluawlzdHIJbWIJLQkJLQlZQi1HLQl0dXJuIG9uIGJsaW5raW5nCitlbnRlcl9ib2xkX21vZGUJCQlib2xkCXN0cgltZAktCQktCVlCLUctCXR1cm4gb24gYm9sZCAoZXh0cmEgYnJpZ2h0KSBtb2RlCitlbnRlcl9jYV9tb2RlCQkJc21jdXAJc3RyCXRpCS0JCS0JWUJDR0UJc3RyaW5nIHRvIHN0YXJ0IHByb2dyYW1zIHVzaW5nIGN1cAorZW50ZXJfZGVsZXRlX21vZGUJCXNtZGMJc3RyCWRtCS0JCS0JWUJDR0UJZW50ZXIgZGVsZXRlIG1vZGUKK2VudGVyX2RpbV9tb2RlCQkJZGltCXN0cgltaAktCQktCVlCLUctCXR1cm4gb24gaGFsZi1icmlnaHQgbW9kZQorZW50ZXJfaW5zZXJ0X21vZGUJCXNtaXIJc3RyCWltCS0JCS0JWUJDR0UJZW50ZXIgaW5zZXJ0IG1vZGUKK2VudGVyX3NlY3VyZV9tb2RlCQlpbnZpcwlzdHIJbWsJLQkJLQktQi1HLSoJdHVybiBvbiBibGFuayBtb2RlIChjaGFyYWN0ZXJzIGludmlzaWJsZSkKK2VudGVyX3Byb3RlY3RlZF9tb2RlCQlwcm90CXN0cgltcAktCQktCS1CLUctKgl0dXJuIG9uIHByb3RlY3RlZCBtb2RlCitlbnRlcl9yZXZlcnNlX21vZGUJCXJldglzdHIJbXIJLQkJLQlZQi1HLQl0dXJuIG9uIHJldmVyc2UgdmlkZW8gbW9kZQorZW50ZXJfc3RhbmRvdXRfbW9kZQkJc21zbwlzdHIJc28JLQkJLQlZQkNHRQliZWdpbiBzdGFuZG91dCBtb2RlCitlbnRlcl91bmRlcmxpbmVfbW9kZQkJc211bAlzdHIJdXMJLQkJLQlZQkNHRQliZWdpbiB1bmRlcmxpbmUgbW9kZQorZXJhc2VfY2hhcnMJCQllY2gJc3RyCWVjCS0JCS0JWUItRy0JZXJhc2UgIzEgY2hhcmFjdGVycyAoUCkKK2V4aXRfYWx0X2NoYXJzZXRfbW9kZQkJcm1hY3MJc3RyCWFlCS0JCS0JWUItRy0JZW5kIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IChQKQorZXhpdF9hdHRyaWJ1dGVfbW9kZQkJc2dyMAlzdHIJbWUJLQkJLQlZQi1HRQl0dXJuIG9mZiBhbGwgYXR0cmlidXRlcworZXhpdF9jYV9tb2RlCQkJcm1jdXAJc3RyCXRlCS0JCS0JWUJDR0UJc3RyaW5ncyB0byBlbmQgcHJvZ3JhbXMgdXNpbmcgY3VwCitleGl0X2RlbGV0ZV9tb2RlCQlybWRjCXN0cgllZAktCQktCVlCQ0dFCWVuZCBkZWxldGUgbW9kZQorZXhpdF9pbnNlcnRfbW9kZQkJcm1pcglzdHIJZWkJLQkJLQlZQkNHRQlleGl0IGluc2VydCBtb2RlCitleGl0X3N0YW5kb3V0X21vZGUJCXJtc28Jc3RyCXNlCS0JCS0JWUJDR0UJZXhpdCBzdGFuZG91dCBtb2RlCitleGl0X3VuZGVybGluZV9tb2RlCQlybXVsCXN0cgl1ZQktCQktCVlCQ0dFCWV4aXQgdW5kZXJsaW5lIG1vZGUKK2ZsYXNoX3NjcmVlbgkJCWZsYXNoCXN0cgl2YgktCQktCVlCQ0dFCXZpc2libGUgYmVsbCAobWF5IG5vdCBtb3ZlIGN1cnNvcikKK2Zvcm1fZmVlZAkJCWZmCXN0cglmZgktCQktCVlCLUctCWhhcmRjb3B5IHRlcm1pbmFsIHBhZ2UgZWplY3QgKFAqKQorZnJvbV9zdGF0dXNfbGluZQkJZnNsCXN0cglmcwktCQktCVlCLUctCXJldHVybiBmcm9tIHN0YXR1cyBsaW5lCitpbml0XzFzdHJpbmcJCQlpczEJc3RyCWkxCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzJzdHJpbmcJCQlpczIJc3RyCWlzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0XzNzdHJpbmcJCQlpczMJc3RyCWkzCS0JCS0JWUItRy0JaW5pdGlhbGl6YXRpb24gc3RyaW5nCitpbml0X2ZpbGUJCQlpZglzdHIJaWYJLQkJLQlZQi1HLQluYW1lIG9mIGluaXRpYWxpemF0aW9uIGZpbGUKK2luc2VydF9jaGFyYWN0ZXIJCWljaDEJc3RyCWljCS0JCS0JWUJDR0UJaW5zZXJ0IGNoYXJhY3RlciAoUCkKK2luc2VydF9saW5lCQkJaWwxCXN0cglhbAktCQktCVlCQ0dFCWluc2VydCBsaW5lIChQKikKK2luc2VydF9wYWRkaW5nCQkJaXAJc3RyCWlwCS0JCS0JWUJDR0UJaW5zZXJ0IHBhZGRpbmcgYWZ0ZXIgaW5zZXJ0ZWQgY2hhcmFjdGVyCitrZXlfYmFja3NwYWNlCQkJa2JzCXN0cglrYglLRVlfQkFDS1NQQUNFCTA0MDcJWUItRy0JYmFja3NwYWNlIGtleQora2V5X2NhdGFiCQkJa3RiYwlzdHIJa2EJS0VZX0NBVEFCCTA1MjYJLUItRy0qCWNsZWFyLWFsbC10YWJzIGtleQora2V5X2NsZWFyCQkJa2NscglzdHIJa0MJS0VZX0NMRUFSCTA1MTUJLUItRy0qCWNsZWFyLXNjcmVlbiBvciBlcmFzZSBrZXkKK2tleV9jdGFiCQkJa2N0YWIJc3RyCWt0CUtFWV9DVEFCCTA1MjUJLUItRy0qCWNsZWFyLXRhYiBrZXkKK2tleV9kYwkJCQlrZGNoMQlzdHIJa0QJS0VZX0RDCQkwNTEyCVlCLUctCWRlbGV0ZS1jaGFyYWN0ZXIga2V5CitrZXlfZGwJCQkJa2RsMQlzdHIJa0wJS0VZX0RMCQkwNTEwCS1CLUctKglkZWxldGUtbGluZSBrZXkKK2tleV9kb3duCQkJa2N1ZDEJc3RyCWtkCUtFWV9ET1dOCTA0MDIJWUJDR0UJZG93bi1hcnJvdyBrZXkKK2tleV9laWMJCQkJa3JtaXIJc3RyCWtNCUtFWV9FSUMJCTA1MTQJLUItRy0qCXNlbnQgYnkgcm1pciBvciBzbWlyIGluIGluc2VydCBtb2RlCitrZXlfZW9sCQkJCWtlbAlzdHIJa0UJS0VZX0VPTAkJMDUxNwktQi1HLSoJY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfZW9zCQkJCWtlZAlzdHIJa1MJS0VZX0VPUwkJMDUxNgktQi1HLSoJY2xlYXItdG8tZW5kLW9mLXNjcmVlbiBrZXkKK2tleV9mMAkJCQlrZjAJc3RyCWswCUtFWV9GKDApCTA0MTAJWUJDR0UJRjAgZnVuY3Rpb24ga2V5CitrZXlfZjEJCQkJa2YxCXN0cglrMQlLRVlfRigxKQktCVlCQ0dFCUYxIGZ1bmN0aW9uIGtleQora2V5X2YxMAkJCQlrZjEwCXN0cglrOwlLRVlfRigxMCkJLQktLS0tRQlGMTAgZnVuY3Rpb24ga2V5CitrZXlfZjIJCQkJa2YyCXN0cglrMglLRVlfRigyKQktCVlCQ0dFCUYyIGZ1bmN0aW9uIGtleQora2V5X2YzCQkJCWtmMwlzdHIJazMJS0VZX0YoMykJLQlZQkNHRQlGMyBmdW5jdGlvbiBrZXkKK2tleV9mNAkJCQlrZjQJc3RyCWs0CUtFWV9GKDQpCS0JWUJDR0UJRjQgZnVuY3Rpb24ga2V5CitrZXlfZjUJCQkJa2Y1CXN0cglrNQlLRVlfRig1KQktCVlCQ0dFCUY1IGZ1bmN0aW9uIGtleQora2V5X2Y2CQkJCWtmNglzdHIJazYJS0VZX0YoNikJLQlZQkNHRQlGNiBmdW5jdGlvbiBrZXkKK2tleV9mNwkJCQlrZjcJc3RyCWs3CUtFWV9GKDcpCS0JWUJDR0UJRjcgZnVuY3Rpb24ga2V5CitrZXlfZjgJCQkJa2Y4CXN0cglrOAlLRVlfRig4KQktCVlCQ0dFCUY4IGZ1bmN0aW9uIGtleQora2V5X2Y5CQkJCWtmOQlzdHIJazkJS0VZX0YoOSkJLQlZQkNHRQlGOSBmdW5jdGlvbiBrZXkKK2tleV9ob21lCQkJa2hvbWUJc3RyCWtoCUtFWV9IT01FCTA0MDYJWUJDR0UJaG9tZSBrZXkKK2tleV9pYwkJCQlraWNoMQlzdHIJa0kJS0VZX0lDCQkwNTEzCVlCLUdFCWluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfaWwJCQkJa2lsMQlzdHIJa0EJS0VZX0lMCQkwNTExCS1CLUctKglpbnNlcnQtbGluZSBrZXkKK2tleV9sZWZ0CQkJa2N1YjEJc3RyCWtsCUtFWV9MRUZUCTA0MDQJWUJDR0UJbGVmdC1hcnJvdyBrZXkKK2tleV9sbAkJCQlrbGwJc3RyCWtICUtFWV9MTAkJMDUzMwlZQi1HLQlsb3dlci1sZWZ0IGtleSAoaG9tZSBkb3duKQora2V5X25wYWdlCQkJa25wCXN0cglrTglLRVlfTlBBR0UJMDUyMglZQi1HRQluZXh0LXBhZ2Uga2V5CitrZXlfcHBhZ2UJCQlrcHAJc3RyCWtQCUtFWV9QUEFHRQkwNTIzCVlCLUdFCXByZXZpb3VzLXBhZ2Uga2V5CitrZXlfcmlnaHQJCQlrY3VmMQlzdHIJa3IJS0VZX1JJR0hUCTA0MDUJWUJDR0UJcmlnaHQtYXJyb3cga2V5CitrZXlfc2YJCQkJa2luZAlzdHIJa0YJS0VZX1NGCQkwNTIwCS1CLUctKglzY3JvbGwtZm9yd2FyZCBrZXkKK2tleV9zcgkJCQlrcmkJc3RyCWtSCUtFWV9TUgkJMDUyMQktQi1HLSoJc2Nyb2xsLWJhY2t3YXJkIGtleQora2V5X3N0YWIJCQlraHRzCXN0cglrVAlLRVlfU1RBQgkwNTI0CS1CLUctKglzZXQtdGFiIGtleQora2V5X3VwCQkJCWtjdXUxCXN0cglrdQlLRVlfVVAJCTA0MDMJWUJDR0UJdXAtYXJyb3cga2V5CitrZXlwYWRfbG9jYWwJCQlybWt4CXN0cglrZQktCQktCVlCQ0dFCWxlYXZlICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQora2V5cGFkX3htaXQJCQlzbWt4CXN0cglrcwktCQktCVlCQ0dFCWVudGVyICdrZXlib2FyZF90cmFuc21pdCcgbW9kZQorbGFiX2YwCQkJCWxmMAlzdHIJbDAJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYwIGlmIG5vdCBmMAorbGFiX2YxCQkJCWxmMQlzdHIJbDEJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxIGlmIG5vdCBmMQorbGFiX2YxMAkJCQlsZjEwCXN0cglsYQktCQktCS0tLS0tCWxhYmVsIG9uIGZ1bmN0aW9uIGtleSBmMTAgaWYgbm90IGYxMAorbGFiX2YyCQkJCWxmMglzdHIJbDIJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYyIGlmIG5vdCBmMgorbGFiX2YzCQkJCWxmMwlzdHIJbDMJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYzIGlmIG5vdCBmMworbGFiX2Y0CQkJCWxmNAlzdHIJbDQJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY0IGlmIG5vdCBmNAorbGFiX2Y1CQkJCWxmNQlzdHIJbDUJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY1IGlmIG5vdCBmNQorbGFiX2Y2CQkJCWxmNglzdHIJbDYJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY2IGlmIG5vdCBmNgorbGFiX2Y3CQkJCWxmNwlzdHIJbDcJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY3IGlmIG5vdCBmNworbGFiX2Y4CQkJCWxmOAlzdHIJbDgJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY4IGlmIG5vdCBmOAorbGFiX2Y5CQkJCWxmOQlzdHIJbDkJLQkJLQktQi1HLSoJbGFiZWwgb24gZnVuY3Rpb24ga2V5IGY5IGlmIG5vdCBmOQorbWV0YV9vZmYJCQlybW0Jc3RyCW1vCS0JCS0JWUItRy0qCXR1cm4gb2ZmIG1ldGEgbW9kZQorbWV0YV9vbgkJCQlzbW0Jc3RyCW1tCS0JCS0JWUItRy0qCXR1cm4gb24gbWV0YSBtb2RlICg4dGgtYml0IG9uKQorbmV3bGluZQkJCQluZWwJc3RyCW53CS0JCS0JWUItRy0qCW5ld2xpbmUgKGJlaGF2ZSBsaWtlIGNyIGZvbGxvd2VkIGJ5IGxmKQorcGFkX2NoYXIJCQlwYWQJc3RyCXBjCS0JCS0JWUJDR0UJcGFkZGluZyBjaGFyIChpbnN0ZWFkIG9mIG51bGwpCitwYXJtX2RjaAkJCWRjaAlzdHIJREMJLQkJLQlZQi1HRQlkZWxldGUgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2RlbGV0ZV9saW5lCQlkbAlzdHIJREwJLQkJLQlZQkNHRQlkZWxldGUgIzEgbGluZXMgKFAqKQorcGFybV9kb3duX2N1cnNvcgkJY3VkCXN0cglETwktCQktCVlCQ0dFCWRvd24gIzEgbGluZXMgKFAqKQorcGFybV9pY2gJCQlpY2gJc3RyCUlDCS0JCS0JWUItR0UJaW5zZXJ0ICMxIGNoYXJhY3RlcnMgKFAqKQorcGFybV9pbmRleAkJCWluZG4Jc3RyCVNGCS0JCS0JWUJDRy0Jc2Nyb2xsIGZvcndhcmQgIzEgbGluZXMgKFApCitwYXJtX2luc2VydF9saW5lCQlpbAlzdHIJQUwJLQkJLQlZQkNHRQlpbnNlcnQgIzEgbGluZXMgKFAqKQorcGFybV9sZWZ0X2N1cnNvcgkJY3ViCXN0cglMRQktCQktCVlCQ0dFCW1vdmUgIzEgY2hhcmFjdGVycyB0byB0aGUgbGVmdCAoUCkKK3Bhcm1fcmlnaHRfY3Vyc29yCQljdWYJc3RyCVJJCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCAoUCopCitwYXJtX3JpbmRleAkJCXJpbglzdHIJU1IJLQkJLQlZQkNHLQlzY3JvbGwgYmFjayAjMSBsaW5lcyAoUCkKK3Bhcm1fdXBfY3Vyc29yCQkJY3V1CXN0cglVUAktCQktCVlCQ0dFCXVwICMxIGxpbmVzIChQKikKK3BrZXlfa2V5CQkJcGZrZXkJc3RyCXBrCS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHlwZSBzdHJpbmcgIzIKK3BrZXlfbG9jYWwJCQlwZmxvYwlzdHIJcGwJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byBleGVjdXRlIHN0cmluZyAjMgorcGtleV94bWl0CQkJcGZ4CXN0cglweAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHRyYW5zbWl0IHN0cmluZyAjMgorcHJpbnRfc2NyZWVuCQkJbWMwCXN0cglwcwktCQktCS1CLUctKglwcmludCBjb250ZW50cyBvZiBzY3JlZW4KK3BydHJfb2ZmCQkJbWM0CXN0cglwZgktCQktCS1CLUctKgl0dXJuIG9mZiBwcmludGVyCitwcnRyX29uCQkJCW1jNQlzdHIJcG8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyCityZXBlYXRfY2hhcgkJCXJlcAlzdHIJcnAJLQkJLQlZQi1HRQlyZXBlYXQgY2hhciAjMSAjMiB0aW1lcyAoUCopCityZXNldF8xc3RyaW5nCQkJcnMxCXN0cglyMQktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfMnN0cmluZwkJCXJzMglzdHIJcjIJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0XzNzdHJpbmcJCQlyczMJc3RyCXIzCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF9maWxlCQkJcmYJc3RyCXJmCS0JCS0JLUItLS0JbmFtZSBvZiByZXNldCBmaWxlCityZXN0b3JlX2N1cnNvcgkJCXJjCXN0cglyYwktCQktCVlCQ0ctCXJlc3RvcmUgY3Vyc29yIHRvIHBvc2l0aW9uIG9mIGxhc3Qgc2F2ZV9jdXJzb3IKK3Jvd19hZGRyZXNzCQkJdnBhCXN0cgljdgktCQktCS1CLUdFKgl2ZXJ0aWNhbCBwb3NpdGlvbiAjMSBhYnNvbHV0ZSAoUCkKK3NhdmVfY3Vyc29yCQkJc2MJc3RyCXNjCS0JCS0JWUJDRy0Jc2F2ZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiAoUCkKK3Njcm9sbF9mb3J3YXJkCQkJaW5kCXN0cglzZgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IHVwIChQKQorc2Nyb2xsX3JldmVyc2UJCQlyaQlzdHIJc3IJLQkJLQlZQkNHRQlzY3JvbGwgdGV4dCBkb3duIChQKQorc2V0X2F0dHJpYnV0ZXMJCQlzZ3IJc3RyCXNhCS0JCS0JWUItRy0JZGVmaW5lIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzkgKFBHOSkKK3NldF90YWIJCQkJaHRzCXN0cglzdAktCQktCVlCLUctCXNldCBhIHRhYiBpbiBldmVyeSByb3csIGN1cnJlbnQgY29sdW1ucworc2V0X3dpbmRvdwkJCXdpbmQJc3RyCXdpCS0JCS0JLUItR0UJY3VycmVudCB3aW5kb3cgaXMgbGluZXMgIzEtIzIgY29scyAjMy0jNAordGFiCQkJCWh0CXN0cgl0YQktCQktCVlCQ0dFCXRhYiB0byBuZXh0IDgtc3BhY2UgaGFyZHdhcmUgdGFiIHN0b3AKK3RvX3N0YXR1c19saW5lCQkJdHNsCXN0cgl0cwktCQktCVlCLUctCW1vdmUgdG8gc3RhdHVzIGxpbmUsIGNvbHVtbiAjMQordW5kZXJsaW5lX2NoYXIJCQl1YwlzdHIJdWMJLQkJLQlZQkNHLQl1bmRlcmxpbmUgY2hhciBhbmQgbW92ZSBwYXN0IGl0Cit1cF9oYWxmX2xpbmUJCQlodQlzdHIJaHUJLQkJLQlZQi1HLQloYWxmIGEgbGluZSB1cAoraW5pdF9wcm9nCQkJaXByb2cJc3RyCWlQCS0JCS0JLUItLS0JcGF0aCBuYW1lIG9mIHByb2dyYW0gZm9yIGluaXRpYWxpemF0aW9uCitrZXlfYTEJCQkJa2ExCXN0cglLMQlLRVlfQTEJCTA1MzQJWUItR0UJdXBwZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9hMwkJCQlrYTMJc3RyCUszCUtFWV9BMwkJMDUzNQlZQi1HRQl1cHBlciByaWdodCBvZiBrZXlwYWQKK2tleV9iMgkJCQlrYjIJc3RyCUsyCUtFWV9CMgkJMDUzNglZQi1HRQljZW50ZXIgb2Yga2V5cGFkCitrZXlfYzEJCQkJa2MxCXN0cglLNAlLRVlfQzEJCTA1MzcJWUItR0UJbG93ZXIgbGVmdCBvZiBrZXlwYWQKK2tleV9jMwkJCQlrYzMJc3RyCUs1CUtFWV9DMwkJMDU0MAlZQi1HRQlsb3dlciByaWdodCBvZiBrZXlwYWQKK3BydHJfbm9uCQkJbWM1cAlzdHIJcE8JLQkJLQktQi1HLSoJdHVybiBvbiBwcmludGVyIGZvciAjMSBieXRlcworIworIyBTVnIxIGNhcGFiaWxpdGllcyBzdG9wIGhlcmUuCUlCTSdzIHZlcnNpb24gb2YgdGVybWluZm8gaXMgdGhlIHNhbWUgYXMKKyMgU1ZyNCB1cCB0byB0aGlzIHBvaW50LCBidXQgaGFzIGEgZGlmZmVyZW50IHNldCBhZnRlcndhcmRzLgorIworY2hhcl9wYWRkaW5nCQkJcm1wCXN0cglyUAktCQktCS0tLS0tCWxpa2UgaXAgYnV0IHdoZW4gaW4gaW5zZXJ0IG1vZGUKK2Fjc19jaGFycwkJCWFjc2MJc3RyCWFjCS0JCS0JLS0tLS0JZ3JhcGhpY3MgY2hhcnNldCBwYWlycywgYmFzZWQgb24gdnQxMDAKK3BsYWJfbm9ybQkJCXBsbglzdHIJcG4JLQkJLQktLS0tLQlwcm9ncmFtIGxhYmVsICMxIHRvIHNob3cgc3RyaW5nICMyCitrZXlfYnRhYgkJCWtjYnQJc3RyCWtCCUtFWV9CVEFCCTA1NDEJLS0tLS0JYmFjay10YWIga2V5CitlbnRlcl94b25fbW9kZQkJCXNteG9uCXN0cglTWAktCQktCS0tLS0tCXR1cm4gb24geG9uL3hvZmYgaGFuZHNoYWtpbmcKK2V4aXRfeG9uX21vZGUJCQlybXhvbglzdHIJUlgJLQkJLQktLS0tLQl0dXJuIG9mZiB4b24veG9mZiBoYW5kc2hha2luZworZW50ZXJfYW1fbW9kZQkJCXNtYW0Jc3RyCVNBCS0JCS0JLS0tLS0JdHVybiBvbiBhdXRvbWF0aWMgbWFyZ2lucworZXhpdF9hbV9tb2RlCQkJcm1hbQlzdHIJUkEJLQkJLQktLS0tLQl0dXJuIG9mZiBhdXRvbWF0aWMgbWFyZ2lucworeG9uX2NoYXJhY3RlcgkJCXhvbmMJc3RyCVhOCS0JCS0JLS0tLS0JWE9OIGNoYXJhY3RlcgoreG9mZl9jaGFyYWN0ZXIJCQl4b2ZmYwlzdHIJWEYJLQkJLQktLS0tLQlYT0ZGIGNoYXJhY3RlcgorZW5hX2FjcwkJCQllbmFjcwlzdHIJZUEJLQkJLQktLS0tLQllbmFibGUgYWx0ZXJuYXRlIGNoYXIgc2V0CitsYWJlbF9vbgkJCXNtbG4Jc3RyCUxPCS0JCS0JLS0tLS0JdHVybiBvbiBzb2Z0IGxhYmVscworbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscwora2V5X2JlZwkJCQlrYmVnCXN0cglAMQlLRVlfQkVHCQkwNTQyCS0tLS0tCWJlZ2luIGtleQora2V5X2NhbmNlbAkJCWtjYW4Jc3RyCUAyCUtFWV9DQU5DRUwJMDU0MwktLS0tLQljYW5jZWwga2V5CitrZXlfY2xvc2UJCQlrY2xvCXN0cglAMwlLRVlfQ0xPU0UJMDU0NAktLS0tLQljbG9zZSBrZXkKK2tleV9jb21tYW5kCQkJa2NtZAlzdHIJQDQJS0VZX0NPTU1BTkQJMDU0NQktLS0tLQljb21tYW5kIGtleQora2V5X2NvcHkJCQlrY3B5CXN0cglANQlLRVlfQ09QWQkwNTQ2CS0tLS0tCWNvcHkga2V5CitrZXlfY3JlYXRlCQkJa2NydAlzdHIJQDYJS0VZX0NSRUFURQkwNTQ3CS0tLS0tCWNyZWF0ZSBrZXkKK2tleV9lbmQJCQkJa2VuZAlzdHIJQDcJS0VZX0VORAkJMDU1MAktLS0tLQllbmQga2V5CitrZXlfZW50ZXIJCQlrZW50CXN0cglAOAlLRVlfRU5URVIJMDUyNwktLS0tLQllbnRlci9zZW5kIGtleQora2V5X2V4aXQJCQlrZXh0CXN0cglAOQlLRVlfRVhJVAkwNTUxCS0tLS0tCWV4aXQga2V5CitrZXlfZmluZAkJCWtmbmQJc3RyCUAwCUtFWV9GSU5ECTA1NTIJLS0tLS0JZmluZCBrZXkKK2tleV9oZWxwCQkJa2hscAlzdHIJJTEJS0VZX0hFTFAJMDU1MwktLS0tLQloZWxwIGtleQora2V5X21hcmsJCQlrbXJrCXN0cgklMglLRVlfTUFSSwkwNTU0CS0tLS0tCW1hcmsga2V5CitrZXlfbWVzc2FnZQkJCWttc2cJc3RyCSUzCUtFWV9NRVNTQUdFCTA1NTUJLS0tLS0JbWVzc2FnZSBrZXkKK2tleV9tb3ZlCQkJa21vdglzdHIJJTQJS0VZX01PVkUJMDU1NgktLS0tLQltb3ZlIGtleQora2V5X25leHQJCQlrbnh0CXN0cgklNQlLRVlfTkVYVAkwNTU3CS0tLS0tCW5leHQga2V5CitrZXlfb3BlbgkJCWtvcG4Jc3RyCSU2CUtFWV9PUEVOCTA1NjAJLS0tLS0Jb3BlbiBrZXkKK2tleV9vcHRpb25zCQkJa29wdAlzdHIJJTcJS0VZX09QVElPTlMJMDU2MQktLS0tLQlvcHRpb25zIGtleQora2V5X3ByZXZpb3VzCQkJa3BydglzdHIJJTgJS0VZX1BSRVZJT1VTCTA1NjIJLS0tLS0JcHJldmlvdXMga2V5CitrZXlfcHJpbnQJCQlrcHJ0CXN0cgklOQlLRVlfUFJJTlQJMDUzMgktLS0tLQlwcmludCBrZXkKK2tleV9yZWRvCQkJa3JkbwlzdHIJJTAJS0VZX1JFRE8JMDU2MwktLS0tLQlyZWRvIGtleQora2V5X3JlZmVyZW5jZQkJCWtyZWYJc3RyCSYxCUtFWV9SRUZFUkVOQ0UJMDU2NAktLS0tLQlyZWZlcmVuY2Uga2V5CitrZXlfcmVmcmVzaAkJCWtyZnIJc3RyCSYyCUtFWV9SRUZSRVNICTA1NjUJLS0tLS0JcmVmcmVzaCBrZXkKK2tleV9yZXBsYWNlCQkJa3JwbAlzdHIJJjMJS0VZX1JFUExBQ0UJMDU2NgktLS0tLQlyZXBsYWNlIGtleQora2V5X3Jlc3RhcnQJCQlrcnN0CXN0cgkmNAlLRVlfUkVTVEFSVAkwNTY3CS0tLS0tCXJlc3RhcnQga2V5CitrZXlfcmVzdW1lCQkJa3JlcwlzdHIJJjUJS0VZX1JFU1VNRQkwNTcwCS0tLS0tCXJlc3VtZSBrZXkKK2tleV9zYXZlCQkJa3NhdglzdHIJJjYJS0VZX1NBVkUJMDU3MQktLS0tLQlzYXZlIGtleQora2V5X3N1c3BlbmQJCQlrc3BkCXN0cgkmNwlLRVlfU1VTUEVORAkwNjI3CS0tLS0tCXN1c3BlbmQga2V5CitrZXlfdW5kbwkJCWt1bmQJc3RyCSY4CUtFWV9VTkRPCTA2MzAJLS0tLS0JdW5kbyBrZXkKK2tleV9zYmVnCQkJa0JFRwlzdHIJJjkJS0VZX1NCRUcJMDU3MgktLS0tLQlzaGlmdGVkIGJlZ2luIGtleQora2V5X3NjYW5jZWwJCQlrQ0FOCXN0cgkmMAlLRVlfU0NBTkNFTAkwNTczCS0tLS0tCXNoaWZ0ZWQgY2FuY2VsIGtleQora2V5X3Njb21tYW5kCQkJa0NNRAlzdHIJKjEJS0VZX1NDT01NQU5ECTA1NzQJLS0tLS0Jc2hpZnRlZCBjb21tYW5kIGtleQora2V5X3Njb3B5CQkJa0NQWQlzdHIJKjIJS0VZX1NDT1BZCTA1NzUJLS0tLS0Jc2hpZnRlZCBjb3B5IGtleQora2V5X3NjcmVhdGUJCQlrQ1JUCXN0cgkqMwlLRVlfU0NSRUFURQkwNTc2CS0tLS0tCXNoaWZ0ZWQgY3JlYXRlIGtleQora2V5X3NkYwkJCQlrREMJc3RyCSo0CUtFWV9TREMJCTA1NzcJLS0tLS0Jc2hpZnRlZCBkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X3NkbAkJCQlrREwJc3RyCSo1CUtFWV9TREwJCTA2MDAJLS0tLS0Jc2hpZnRlZCBkZWxldGUtbGluZSBrZXkKK2tleV9zZWxlY3QJCQlrc2x0CXN0cgkqNglLRVlfU0VMRUNUCTA2MDEJLS0tLS0Jc2VsZWN0IGtleQora2V5X3NlbmQJCQlrRU5ECXN0cgkqNwlLRVlfU0VORAkwNjAyCS0tLS0tCXNoaWZ0ZWQgZW5kIGtleQora2V5X3Nlb2wJCQlrRU9MCXN0cgkqOAlLRVlfU0VPTAkwNjAzCS0tLS0tCXNoaWZ0ZWQgY2xlYXItdG8tZW5kLW9mLWxpbmUga2V5CitrZXlfc2V4aXQJCQlrRVhUCXN0cgkqOQlLRVlfU0VYSVQJMDYwNAktLS0tLQlzaGlmdGVkIGV4aXQga2V5CitrZXlfc2ZpbmQJCQlrRk5ECXN0cgkqMAlLRVlfU0ZJTkQJMDYwNQktLS0tLQlzaGlmdGVkIGZpbmQga2V5CitrZXlfc2hlbHAJCQlrSExQCXN0cgkjMQlLRVlfU0hFTFAJMDYwNgktLS0tLQlzaGlmdGVkIGhlbHAga2V5CitrZXlfc2hvbWUJCQlrSE9NCXN0cgkjMglLRVlfU0hPTUUJMDYwNwktLS0tLQlzaGlmdGVkIGhvbWUga2V5CitrZXlfc2ljCQkJCWtJQwlzdHIJIzMJS0VZX1NJQwkJMDYxMAktLS0tLQlzaGlmdGVkIGluc2VydC1jaGFyYWN0ZXIga2V5CitrZXlfc2xlZnQJCQlrTEZUCXN0cgkjNAlLRVlfU0xFRlQJMDYxMQktLS0tLQlzaGlmdGVkIGxlZnQtYXJyb3cga2V5CitrZXlfc21lc3NhZ2UJCQlrTVNHCXN0cgklYQlLRVlfU01FU1NBR0UJMDYxMgktLS0tLQlzaGlmdGVkIG1lc3NhZ2Uga2V5CitrZXlfc21vdmUJCQlrTU9WCXN0cgklYglLRVlfU01PVkUJMDYxMwktLS0tLQlzaGlmdGVkIG1vdmUga2V5CitrZXlfc25leHQJCQlrTlhUCXN0cgklYwlLRVlfU05FWFQJMDYxNAktLS0tLQlzaGlmdGVkIG5leHQga2V5CitrZXlfc29wdGlvbnMJCQlrT1BUCXN0cgklZAlLRVlfU09QVElPTlMJMDYxNQktLS0tLQlzaGlmdGVkIG9wdGlvbnMga2V5CitrZXlfc3ByZXZpb3VzCQkJa1BSVglzdHIJJWUJS0VZX1NQUkVWSU9VUwkwNjE2CS0tLS0tCXNoaWZ0ZWQgcHJldmlvdXMga2V5CitrZXlfc3ByaW50CQkJa1BSVAlzdHIJJWYJS0VZX1NQUklOVAkwNjE3CS0tLS0tCXNoaWZ0ZWQgcHJpbnQga2V5CitrZXlfc3JlZG8JCQlrUkRPCXN0cgklZwlLRVlfU1JFRE8JMDYyMAktLS0tLQlzaGlmdGVkIHJlZG8ga2V5CitrZXlfc3JlcGxhY2UJCQlrUlBMCXN0cgklaAlLRVlfU1JFUExBQ0UJMDYyMQktLS0tLQlzaGlmdGVkIHJlcGxhY2Uga2V5CitrZXlfc3JpZ2h0CQkJa1JJVAlzdHIJJWkJS0VZX1NSSUdIVAkwNjIyCS0tLS0tCXNoaWZ0ZWQgcmlnaHQtYXJyb3cga2V5CitrZXlfc3JzdW1lCQkJa1JFUwlzdHIJJWoJS0VZX1NSU1VNRQkwNjIzCS0tLS0tCXNoaWZ0ZWQgcmVzdW1lIGtleQora2V5X3NzYXZlCQkJa1NBVglzdHIJITEJS0VZX1NTQVZFCTA2MjQJLS0tLS0Jc2hpZnRlZCBzYXZlIGtleQora2V5X3NzdXNwZW5kCQkJa1NQRAlzdHIJITIJS0VZX1NTVVNQRU5ECTA2MjUJLS0tLS0Jc2hpZnRlZCBzdXNwZW5kIGtleQora2V5X3N1bmRvCQkJa1VORAlzdHIJITMJS0VZX1NVTkRPCTA2MjYJLS0tLS0Jc2hpZnRlZCB1bmRvIGtleQorcmVxX2Zvcl9pbnB1dAkJCXJmaQlzdHIJUkYJLQkJLQktLS0tLQlzZW5kIG5leHQgaW5wdXQgY2hhciAoZm9yIHB0eXMpCitrZXlfZjExCQkJCWtmMTEJc3RyCUYxCUtFWV9GKDExKQktCS0tLS1FCUYxMSBmdW5jdGlvbiBrZXkKK2tleV9mMTIJCQkJa2YxMglzdHIJRjIJS0VZX0YoMTIpCS0JLS0tLUUJRjEyIGZ1bmN0aW9uIGtleQora2V5X2YxMwkJCQlrZjEzCXN0cglGMwlLRVlfRigxMykJLQktLS0tRQlGMTMgZnVuY3Rpb24ga2V5CitrZXlfZjE0CQkJCWtmMTQJc3RyCUY0CUtFWV9GKDE0KQktCS0tLS1FCUYxNCBmdW5jdGlvbiBrZXkKK2tleV9mMTUJCQkJa2YxNQlzdHIJRjUJS0VZX0YoMTUpCS0JLS0tLUUJRjE1IGZ1bmN0aW9uIGtleQora2V5X2YxNgkJCQlrZjE2CXN0cglGNglLRVlfRigxNikJLQktLS0tRQlGMTYgZnVuY3Rpb24ga2V5CitrZXlfZjE3CQkJCWtmMTcJc3RyCUY3CUtFWV9GKDE3KQktCS0tLS1FCUYxNyBmdW5jdGlvbiBrZXkKK2tleV9mMTgJCQkJa2YxOAlzdHIJRjgJS0VZX0YoMTgpCS0JLS0tLUUJRjE4IGZ1bmN0aW9uIGtleQora2V5X2YxOQkJCQlrZjE5CXN0cglGOQlLRVlfRigxOSkJLQktLS0tRQlGMTkgZnVuY3Rpb24ga2V5CitrZXlfZjIwCQkJCWtmMjAJc3RyCUZBCUtFWV9GKDIwKQktCS0tLS1FCUYyMCBmdW5jdGlvbiBrZXkKK2tleV9mMjEJCQkJa2YyMQlzdHIJRkIJS0VZX0YoMjEpCS0JLS0tLUUJRjIxIGZ1bmN0aW9uIGtleQora2V5X2YyMgkJCQlrZjIyCXN0cglGQwlLRVlfRigyMikJLQktLS0tRQlGMjIgZnVuY3Rpb24ga2V5CitrZXlfZjIzCQkJCWtmMjMJc3RyCUZECUtFWV9GKDIzKQktCS0tLS1FCUYyMyBmdW5jdGlvbiBrZXkKK2tleV9mMjQJCQkJa2YyNAlzdHIJRkUJS0VZX0YoMjQpCS0JLS0tLUUJRjI0IGZ1bmN0aW9uIGtleQora2V5X2YyNQkJCQlrZjI1CXN0cglGRglLRVlfRigyNSkJLQktLS0tRQlGMjUgZnVuY3Rpb24ga2V5CitrZXlfZjI2CQkJCWtmMjYJc3RyCUZHCUtFWV9GKDI2KQktCS0tLS1FCUYyNiBmdW5jdGlvbiBrZXkKK2tleV9mMjcJCQkJa2YyNwlzdHIJRkgJS0VZX0YoMjcpCS0JLS0tLUUJRjI3IGZ1bmN0aW9uIGtleQora2V5X2YyOAkJCQlrZjI4CXN0cglGSQlLRVlfRigyOCkJLQktLS0tRQlGMjggZnVuY3Rpb24ga2V5CitrZXlfZjI5CQkJCWtmMjkJc3RyCUZKCUtFWV9GKDI5KQktCS0tLS1FCUYyOSBmdW5jdGlvbiBrZXkKK2tleV9mMzAJCQkJa2YzMAlzdHIJRksJS0VZX0YoMzApCS0JLS0tLUUJRjMwIGZ1bmN0aW9uIGtleQora2V5X2YzMQkJCQlrZjMxCXN0cglGTAlLRVlfRigzMSkJLQktLS0tRQlGMzEgZnVuY3Rpb24ga2V5CitrZXlfZjMyCQkJCWtmMzIJc3RyCUZNCUtFWV9GKDMyKQktCS0tLS1FCUYzMiBmdW5jdGlvbiBrZXkKK2tleV9mMzMJCQkJa2YzMwlzdHIJRk4JS0VZX0YoMzMpCS0JLS0tLUUJRjMzIGZ1bmN0aW9uIGtleQora2V5X2YzNAkJCQlrZjM0CXN0cglGTwlLRVlfRigzNCkJLQktLS0tRQlGMzQgZnVuY3Rpb24ga2V5CitrZXlfZjM1CQkJCWtmMzUJc3RyCUZQCUtFWV9GKDM1KQktCS0tLS1FCUYzNSBmdW5jdGlvbiBrZXkKK2tleV9mMzYJCQkJa2YzNglzdHIJRlEJS0VZX0YoMzYpCS0JLS0tLUUJRjM2IGZ1bmN0aW9uIGtleQora2V5X2YzNwkJCQlrZjM3CXN0cglGUglLRVlfRigzNykJLQktLS0tRQlGMzcgZnVuY3Rpb24ga2V5CitrZXlfZjM4CQkJCWtmMzgJc3RyCUZTCUtFWV9GKDM4KQktCS0tLS1FCUYzOCBmdW5jdGlvbiBrZXkKK2tleV9mMzkJCQkJa2YzOQlzdHIJRlQJS0VZX0YoMzkpCS0JLS0tLUUJRjM5IGZ1bmN0aW9uIGtleQora2V5X2Y0MAkJCQlrZjQwCXN0cglGVQlLRVlfRig0MCkJLQktLS0tRQlGNDAgZnVuY3Rpb24ga2V5CitrZXlfZjQxCQkJCWtmNDEJc3RyCUZWCUtFWV9GKDQxKQktCS0tLS1FCUY0MSBmdW5jdGlvbiBrZXkKK2tleV9mNDIJCQkJa2Y0MglzdHIJRlcJS0VZX0YoNDIpCS0JLS0tLUUJRjQyIGZ1bmN0aW9uIGtleQora2V5X2Y0MwkJCQlrZjQzCXN0cglGWAlLRVlfRig0MykJLQktLS0tRQlGNDMgZnVuY3Rpb24ga2V5CitrZXlfZjQ0CQkJCWtmNDQJc3RyCUZZCUtFWV9GKDQ0KQktCS0tLS1FCUY0NCBmdW5jdGlvbiBrZXkKK2tleV9mNDUJCQkJa2Y0NQlzdHIJRloJS0VZX0YoNDUpCS0JLS0tLUUJRjQ1IGZ1bmN0aW9uIGtleQora2V5X2Y0NgkJCQlrZjQ2CXN0cglGYQlLRVlfRig0NikJLQktLS0tRQlGNDYgZnVuY3Rpb24ga2V5CitrZXlfZjQ3CQkJCWtmNDcJc3RyCUZiCUtFWV9GKDQ3KQktCS0tLS1FCUY0NyBmdW5jdGlvbiBrZXkKK2tleV9mNDgJCQkJa2Y0OAlzdHIJRmMJS0VZX0YoNDgpCS0JLS0tLUUJRjQ4IGZ1bmN0aW9uIGtleQora2V5X2Y0OQkJCQlrZjQ5CXN0cglGZAlLRVlfRig0OSkJLQktLS0tRQlGNDkgZnVuY3Rpb24ga2V5CitrZXlfZjUwCQkJCWtmNTAJc3RyCUZlCUtFWV9GKDUwKQktCS0tLS1FCUY1MCBmdW5jdGlvbiBrZXkKK2tleV9mNTEJCQkJa2Y1MQlzdHIJRmYJS0VZX0YoNTEpCS0JLS0tLUUJRjUxIGZ1bmN0aW9uIGtleQora2V5X2Y1MgkJCQlrZjUyCXN0cglGZwlLRVlfRig1MikJLQktLS0tRQlGNTIgZnVuY3Rpb24ga2V5CitrZXlfZjUzCQkJCWtmNTMJc3RyCUZoCUtFWV9GKDUzKQktCS0tLS1FCUY1MyBmdW5jdGlvbiBrZXkKK2tleV9mNTQJCQkJa2Y1NAlzdHIJRmkJS0VZX0YoNTQpCS0JLS0tLUUJRjU0IGZ1bmN0aW9uIGtleQora2V5X2Y1NQkJCQlrZjU1CXN0cglGaglLRVlfRig1NSkJLQktLS0tRQlGNTUgZnVuY3Rpb24ga2V5CitrZXlfZjU2CQkJCWtmNTYJc3RyCUZrCUtFWV9GKDU2KQktCS0tLS1FCUY1NiBmdW5jdGlvbiBrZXkKK2tleV9mNTcJCQkJa2Y1NwlzdHIJRmwJS0VZX0YoNTcpCS0JLS0tLUUJRjU3IGZ1bmN0aW9uIGtleQora2V5X2Y1OAkJCQlrZjU4CXN0cglGbQlLRVlfRig1OCkJLQktLS0tRQlGNTggZnVuY3Rpb24ga2V5CitrZXlfZjU5CQkJCWtmNTkJc3RyCUZuCUtFWV9GKDU5KQktCS0tLS1FCUY1OSBmdW5jdGlvbiBrZXkKK2tleV9mNjAJCQkJa2Y2MAlzdHIJRm8JS0VZX0YoNjApCS0JLS0tLUUJRjYwIGZ1bmN0aW9uIGtleQora2V5X2Y2MQkJCQlrZjYxCXN0cglGcAlLRVlfRig2MSkJLQktLS0tRQlGNjEgZnVuY3Rpb24ga2V5CitrZXlfZjYyCQkJCWtmNjIJc3RyCUZxCUtFWV9GKDYyKQktCS0tLS1FCUY2MiBmdW5jdGlvbiBrZXkKK2tleV9mNjMJCQkJa2Y2MwlzdHIJRnIJS0VZX0YoNjMpCS0JLS0tLUUJRjYzIGZ1bmN0aW9uIGtleQorY2xyX2JvbAkJCQllbDEJc3RyCWNiCS0JCS0JLS0tLS0JQ2xlYXIgdG8gYmVnaW5uaW5nIG9mIGxpbmUKK2NsZWFyX21hcmdpbnMJCQltZ2MJc3RyCU1DCS0JCS0JLS0tLS0JY2xlYXIgcmlnaHQgYW5kIGxlZnQgc29mdCBtYXJnaW5zCitzZXRfbGVmdF9tYXJnaW4JCQlzbWdsCXN0cglNTAktCQktCS0tLS0tCXNldCBsZWZ0IHNvZnQgbWFyZ2luIGF0IGN1cnJlbnQgY29sdW1uLgkgU2VlIHNtZ2wuIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3JpZ2h0X21hcmdpbgkJc21ncglzdHIJTVIJLQkJLQktLS0tLQlzZXQgcmlnaHQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4KK2xhYmVsX2Zvcm1hdAkJCWZsbglzdHIJTGYJLQkJLQktLS0tLQlsYWJlbCBmb3JtYXQKK3NldF9jbG9jawkJCXNjbGsJc3RyCVNDCS0JCS0JLS0tLS0Jc2V0IGNsb2NrLCAjMSBocnMgIzIgbWlucyAjMyBzZWNzCitkaXNwbGF5X2Nsb2NrCQkJZGNsawlzdHIJREsJLQkJLQktLS0tLQlkaXNwbGF5IGNsb2NrCityZW1vdmVfY2xvY2sJCQlybWNsawlzdHIJUkMJLQkJLQktLS0tLQlyZW1vdmUgY2xvY2sKK2NyZWF0ZV93aW5kb3cJCQljd2luCXN0cglDVwktCQktCS0tLS0tCWRlZmluZSBhIHdpbmRvdyAjMSBmcm9tICMyLCMzIHRvICM0LCM1Citnb3RvX3dpbmRvdwkJCXdpbmdvCXN0cglXRwktCQktCS0tLS0tCWdvIHRvIHdpbmRvdyAjMQoraGFuZ3VwCQkJCWh1cAlzdHIJSFUJLQkJLQktLS0tLQloYW5nLXVwIHBob25lCitkaWFsX3Bob25lCQkJZGlhbAlzdHIJREkJLQkJLQktLS0tLQlkaWFsIG51bWJlciAjMQorcXVpY2tfZGlhbAkJCXFkaWFsCXN0cglRRAktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxIHdpdGhvdXQgY2hlY2tpbmcKK3RvbmUJCQkJdG9uZQlzdHIJVE8JLQkJLQktLS0tLQlzZWxlY3QgdG91Y2ggdG9uZSBkaWFsaW5nCitwdWxzZQkJCQlwdWxzZQlzdHIJUFUJLQkJLQktLS0tLQlzZWxlY3QgcHVsc2UgZGlhbGluZworZmxhc2hfaG9vawkJCWhvb2sJc3RyCWZoCS0JCS0JLS0tLS0JZmxhc2ggc3dpdGNoIGhvb2sKK2ZpeGVkX3BhdXNlCQkJcGF1c2UJc3RyCVBBCS0JCS0JLS0tLS0JcGF1c2UgZm9yIDItMyBzZWNvbmRzCit3YWl0X3RvbmUJCQl3YWl0CXN0cglXQQktCQktCS0tLS0tCXdhaXQgZm9yIGRpYWwtdG9uZQordXNlcjAJCQkJdTAJc3RyCXUwCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzAKK3VzZXIxCQkJCXUxCXN0cgl1MQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMxCit1c2VyMgkJCQl1MglzdHIJdTIJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMgordXNlcjMJCQkJdTMJc3RyCXUzCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzMKK3VzZXI0CQkJCXU0CXN0cgl1NAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM0Cit1c2VyNQkJCQl1NQlzdHIJdTUJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNQordXNlcjYJCQkJdTYJc3RyCXU2CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzYKK3VzZXI3CQkJCXU3CXN0cgl1NwktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM3Cit1c2VyOAkJCQl1OAlzdHIJdTgJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjOAordXNlcjkJCQkJdTkJc3RyCXU5CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzkKKyMKKyMgTkN1cnNlcyBleHRlbnNpb25zIGZvciBrZXlzIGFjY2Vzc2libGUgb24gbW9zdCBQQyBjb25zb2xlcworIwora2V5X3N1cAkJCQlrVVAJc3RyCSE1CUtFWV9TVVAJCSsJLS0tLS0Jc2hpZnRlZCB1cC1hcnJvdyBrZXkKK2tleV9zZG93bgkJCWtET1dOCXN0cgkhNglLRVlfU0RPV04JKwktLS0tLQlzaGlmdGVkIGRvd24tYXJyb3cga2V5CitrZXlfc2JhY2tzcGFjZQkJCWtCUwlzdHIJITcJS0VZX1NCQUNLU1BBQ0UJKwktLS0tLQlzaGlmdGVkIGJhY2tzcGFjZSBrZXkKK2tleV9jX2RlbGV0ZQkJCWtjZGVsZXRlIHN0cgkhOAlLRVlfQ19ERUxFVEUJKwktLS0tLQljb250cm9sLSBkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X2NfZW5kCQkJa2NlbmQJc3RyCSE5CUtFWV9DX0VORAkrCS0tLS0tCWNvbnRyb2wtIGVuZCBrZXkKK2tleV9jX2hvbWUJCQlrY2hvbQlzdHIJITAJS0VZX0NfSE9NRQkrCS0tLS0tCWNvbnRyb2wtIGhvbWUga2V5CitrZXlfY19pbnNlcnQJCQlrY2luc2VydCBzdHIJIV8JS0VZX0NfSU5TRVJUCSsJLS0tLS0JY29udHJvbC0gaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9jX2xlZnQJCQlrY2xmdAlzdHIJJWsJS0VZX0NfTEVGVAkrCS0tLS0tCWNvbnRyb2wtIGxlZnQtYXJyb3cga2V5CitrZXlfY19uZXh0CQkJa2NueHQJc3RyCSVsCUtFWV9DX05FWFQJKwktLS0tLQljb250cm9sLSBuZXh0IGtleQora2V5X2NfcHJldmlvdXMJCQlrY3BydglzdHIJJW0JS0VZX0NfUFJFVklPVVMJKwktLS0tLQljb250cm9sLSBwcmV2aW91cyBrZXkKK2tleV9jX3ByaW50CQkJa2NwcnQJc3RyCSVuCUtFWV9DX1BSSU5UCSsJLS0tLS0JY29udHJvbC0gcHJpbnQga2V5CitrZXlfY19yaWdodAkJCWtjcml0CXN0cgklbwlLRVlfQ19SSUdIVAkrCS0tLS0tCWNvbnRyb2wtIHJpZ2h0LWFycm93IGtleQora2V5X2NfYmFja3NwYWNlCQkJa2NicwlzdHIJJXAJS0VZX0NfQkFDS1NQQUNFCSsJLS0tLS0JY29udHJvbC0gYmFja3NwYWNlIGtleQora2V5X2NfdXAJCQlrY3VwCXN0cgklcQlLRVlfQ19VUAkrCS0tLS0tCWNvbnRyb2wtIHVwLWFycm93IGtleQora2V5X2NfZG93bgkJCWtjZG93bglzdHIJJXIJS0VZX0NfRE9XTgkrCS0tLS0tCWNvbnRyb2wtIGRvd24tYXJyb3cga2V5CitrZXlfYV9kZWxldGUJCQlrYWRlbGV0ZSBzdHIJJXMJS0VZX0FfREVMRVRFCSsJLS0tLS0JYWx0LSBkZWxldGUtY2hhcmFjdGVyIGtleQora2V5X2FfZW5kCQkJa2FlbmQJc3RyCSV0CUtFWV9BX0VORAkrCS0tLS0tCWFsdC0gZW5kIGtleQora2V5X2FfaG9tZQkJCWthaG9tCXN0cgkldQlLRVlfQV9IT01FCSsJLS0tLS0JYWx0LSBob21lIGtleQora2V5X2FfaW5zZXJ0CQkJa2FpbnNlcnQgc3RyCSV2CUtFWV9BX0lOU0VSVAkrCS0tLS0tCWFsdC0gaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9hX2xlZnQJCQlrYWxmdAlzdHIJJXcJS0VZX0FfTEVGVAkrCS0tLS0tCWFsdC0gbGVmdC1hcnJvdyBrZXkKK2tleV9hX25leHQJCQlrYW54dAlzdHIJJXgJS0VZX0FfTkVYVAkrCS0tLS0tCWFsdC0gbmV4dCBrZXkKK2tleV9hX3ByZXZpb3VzCQkJa2FwcnYJc3RyCSV5CUtFWV9BX1BSRVZJT1VTCSsJLS0tLS0JYWx0LSBwcmV2aW91cyBrZXkKK2tleV9hX3ByaW50CQkJa2FwcnQJc3RyCSV6CUtFWV9BX1BSSU5UCSsJLS0tLS0JYWx0LSBwcmludCBrZXkKK2tleV9hX3JpZ2h0CQkJa2FyaXQJc3RyCSUhCUtFWV9BX1JJR0hUCSsJLS0tLS0JYWx0LSByaWdodC1hcnJvdyBrZXkKK2tleV9hX2JhY2tzcGFjZQkJCWthYnMJc3RyCSVACUtFWV9BX0JBQ0tTUEFDRQkrCS0tLS0tCWFsdC0gYmFja3NwYWNlIGtleQora2V5X2FfdXAJCQlrYXVwCXN0cgklIwlLRVlfQV9VUAkrCS0tLS0tCWFsdC0gdXAtYXJyb3cga2V5CitrZXlfYV9kb3duCQkJa2Fkb3duCXN0cgklJAlLRVlfQV9ET1dOCSsJLS0tLS0JYWx0LSBkb3duLWFycm93IGtleQora2V5X2FfYQkJCQlrYWEJc3RyCSRhCUtFWV9BX0EJCSsJLS0tLS0JYWx0LSBhIGtleQora2V5X2FfYgkJCQlrYWIJc3RyCSRiCUtFWV9BX0IJCSsJLS0tLS0JYWx0LSBiIGtleQora2V5X2FfYwkJCQlrYWMJc3RyCSRjCUtFWV9BX0MJCSsJLS0tLS0JYWx0LSBjIGtleQora2V5X2FfZAkJCQlrYWQJc3RyCSRkCUtFWV9BX0QJCSsJLS0tLS0JYWx0LSBkIGtleQora2V5X2FfZQkJCQlrYWUJc3RyCSRlCUtFWV9BX0UJCSsJLS0tLS0JYWx0LSBlIGtleQora2V5X2FfZgkJCQlrYWYJc3RyCSRmCUtFWV9BX0YJCSsJLS0tLS0JYWx0LSBmIGtleQora2V5X2FfZwkJCQlrYWcJc3RyCSRnCUtFWV9BX0cJCSsJLS0tLS0JYWx0LSBnIGtleQora2V5X2FfaAkJCQlrYWgJc3RyCSRoCUtFWV9BX0gJCSsJLS0tLS0JYWx0LSBoIGtleQora2V5X2FfaQkJCQlrYWkJc3RyCSRpCUtFWV9BX0kJCSsJLS0tLS0JYWx0LSBpIGtleQora2V5X2FfagkJCQlrYWoJc3RyCSRqCUtFWV9BX0oJCSsJLS0tLS0JYWx0LSBqIGtleQora2V5X2FfawkJCQlrYWsJc3RyCSRrCUtFWV9BX0sJCSsJLS0tLS0JYWx0LSBrIGtleQora2V5X2FfbAkJCQlrYWwJc3RyCSRsCUtFWV9BX0wJCSsJLS0tLS0JYWx0LSBsIGtleQora2V5X2FfbQkJCQlrYW0Jc3RyCSRtCUtFWV9BX00JCSsJLS0tLS0JYWx0LSBtIGtleQora2V5X2FfbgkJCQlrYW4Jc3RyCSRuCUtFWV9BX04JCSsJLS0tLS0JYWx0LSBuIGtleQora2V5X2FfbwkJCQlrYW8Jc3RyCSRvCUtFWV9BX08JCSsJLS0tLS0JYWx0LSBvIGtleQora2V5X2FfcAkJCQlrYXAJc3RyCSRwCUtFWV9BX1AJCSsJLS0tLS0JYWx0LSBwIGtleQora2V5X2FfcQkJCQlrYXEJc3RyCSRxCUtFWV9BX1EJCSsJLS0tLS0JYWx0LSBxIGtleQora2V5X2FfcgkJCQlrYXIJc3RyCSRyCUtFWV9BX1IJCSsJLS0tLS0JYWx0LSByIGtleQora2V5X2FfcwkJCQlrYXMJc3RyCSRzCUtFWV9BX1MJCSsJLS0tLS0JYWx0LSBzIGtleQora2V5X2FfdAkJCQlrYXQJc3RyCSR0CUtFWV9BX1QJCSsJLS0tLS0JYWx0LSB0IGtleQora2V5X2FfdQkJCQlrYXUJc3RyCSR1CUtFWV9BX1UJCSsJLS0tLS0JYWx0LSB1IGtleQora2V5X2FfdgkJCQlrYXYJc3RyCSR2CUtFWV9BX1YJCSsJLS0tLS0JYWx0LSB2IGtleQora2V5X2FfdwkJCQlrYXcJc3RyCSR3CUtFWV9BX1cJCSsJLS0tLS0JYWx0LSB3IGtleQora2V5X2FfeAkJCQlrYXgJc3RyCSR4CUtFWV9BX1gJCSsJLS0tLS0JYWx0LSB4IGtleQora2V5X2FfeQkJCQlrYXkJc3RyCSR5CUtFWV9BX1kJCSsJLS0tLS0JYWx0LSB5IGtleQora2V5X2FfegkJCQlrYXoJc3RyCSR6CUtFWV9BX1oJCSsJLS0tLS0JYWx0LSB6IGtleQora2V5X2FfMAkJCQlrYV8wCXN0cgkkMAlLRVlfQV8wCQkrCS0tLS0tCWFsdC0gMCBrZXkKK2tleV9hXzEJCQkJa2FfMQlzdHIJJDEJS0VZX0FfMQkJKwktLS0tLQlhbHQtIDEga2V5CitrZXlfYV8yCQkJCWthXzIJc3RyCSQyCUtFWV9BXzIJCSsJLS0tLS0JYWx0LSAyIGtleQora2V5X2FfMwkJCQlrYV8zCXN0cgkkMwlLRVlfQV8zCQkrCS0tLS0tCWFsdC0gMyBrZXkKK2tleV9hXzQJCQkJa2FfNAlzdHIJJDQJS0VZX0FfNAkJKwktLS0tLQlhbHQtIDQga2V5CitrZXlfYV81CQkJCWthXzUJc3RyCSQ1CUtFWV9BXzUJCSsJLS0tLS0JYWx0LSA1IGtleQora2V5X2FfNgkJCQlrYV82CXN0cgkkNglLRVlfQV82CQkrCS0tLS0tCWFsdC0gNiBrZXkKK2tleV9hXzcJCQkJa2FfNwlzdHIJJDcJS0VZX0FfNwkJKwktLS0tLQlhbHQtIDcga2V5CitrZXlfYV84CQkJCWthXzgJc3RyCSQ4CUtFWV9BXzgJCSsJLS0tLS0JYWx0LSA4IGtleQora2V5X2FfOQkJCQlrYV85CXN0cgkkOQlLRVlfQV85CQkrCS0tLS0tCWFsdC0gOSBrZXkKK2tleV9hX2JhY2t0aWNrCQkJa2FfYnQJc3RyCSRgCUtFWV9BX0JBQ0tUSUNLCSsJLS0tLS0JYWx0LSBgIGtleQora2V5X2FfdW5kZXIJCQlrYV91bmQJc3RyCSRfCUtFWV9BX1VOREVSCSsJLS0tLS0JYWx0LSBfIGtleQora2V5X2FfZXF1YWxzCQkJa2FfZXEJc3RyCSQ9CUtFWV9BX0VRVUFMUwkrCS0tLS0tCWFsdC0gPSBrZXkKK2tleV9hX2JhcgkJCWthX2JzbAlzdHIJJHwJS0VZX0FfQkFSCSsJLS0tLS0JYWx0LSB8IGtleQora2V5X2FfbGJyYWNrZXIJCQlrYV9sYnIJc3RyCSRbCUtFWV9BX0xCUkFDS0VSCSsJLS0tLS0JYWx0LSBbIGtleQora2V5X2FfcmJyYWNrZXIJCQlrYV9yYnIJc3RyCSRdCUtFWV9BX1JCUkFDS0VSCSsJLS0tLS0JYWx0LSBdIGtleQora2V5X2Ffc2VtaQkJCWthX3NlbWkgc3RyCSQ7CUtFWV9BX1NFTUkJKwktLS0tLQlhbHQtIDsga2V5CitrZXlfYV90aWNrCQkJa2FfdGljayBzdHIJJCcJS0VZX0FfVElDSwkrCS0tLS0tCWFsdC0gJyBrZXkKK2tleV9hX2NvbW1hCQkJa2FfY29tCXN0cgkkLAlLRVlfQV9DT01NQQkrCS0tLS0tCWFsdC0gLCBrZXkKK2tleV9hX2RvdAkJCWthX2RvdAlzdHIJJC4JS0VZX0FfRE9UCSsJLS0tLS0JYWx0LSAuIGtleQora2V5X2FfcXVlc3Rpb24JCQlrYV9zbGEJc3RyCSQ/CUtFWV9BX1FVRVNUSU9OCSsJLS0tLS0JYWx0LSA/IGtleQora2V5X2FfZGl2aWRlCQkJa2FfZGl2CXN0cgkkLwlLRVlfQV9ESVZJREUJKwktLS0tLQlhbHQtIGtleXBhZCAvIGtleQora2V5X2FfbXVsdGlwbHkJCQlrYV9tdWwJc3RyCSQqCUtFWV9BX01VTFRJUExZCSsJLS0tLS0JYWx0LSBrZXlwYWQgKiBrZXkKK2tleV9hX2FkZAkJCWthX2FkZAlzdHIJJCsJS0VZX0FfQURECSsJLS0tLS0JYWx0LSBrZXlwYWQgKyBrZXkKK2tleV9hX3N1YnRyYWN0CQkJa2Ffc3ViCXN0cgkkLQlLRVlfQV9TVUJUUkFDVAkrCS0tLS0tCWFsdC0ga2V5cGFkIC0ga2V5CitrZXlfYV9rZW50ZXIJCQlrYV9rZW50IHN0cgkkPAlLRVlfQV9LRU5URVIJKwktLS0tLQlhbHQtIGtleXBhZCBlbnRlciBrZXkKK2tleV9hX2VudGVyCQkJa2FfZW50CXN0cgkkPglLRVlfQV9FTlRFUgkrCS0tLS0tCWFsdC0gZW50ZXIga2V5CitrZXlfY19hdAkJCWtjYXQJc3RyCSUlCUtFWV9DX0FUCSsJLS0tLS0JY29udHJvbC0gQCBrZXkKK2tleV9jX2RpdmlkZQkJCWtjZGl2CXN0cgklLwlLRVlfQ19ESVZJREUJKwktLS0tLQljb250cm9sLSBrZXlwYWQgLyBrZXkKK2tleV9jX211bHRpcGx5CQkJa2NtdWwJc3RyCSUqCUtFWV9DX01VTFRJUExZCSsJLS0tLS0JY29udHJvbC0ga2V5cGFkICoga2V5CitrZXlfY19hZGQJCQlrY2FkZAlzdHIJJSsJS0VZX0NfQURECSsJLS0tLS0JY29udHJvbC0ga2V5cGFkICsga2V5CitrZXlfY19zdWJ0cmFjdAkJCWtjc3ViCXN0cgklLQlLRVlfQ19TVUJUUkFDVAkrCS0tLS0tCWNvbnRyb2wtIGtleXBhZCAtIGtleQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IGNvbG9yCisjCitvcmlnX3BhaXIJCQlvcAlzdHIJb3AJLQkJLQktLS0tLQlTZXQgZGVmYXVsdCBwYWlyIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQorb3JpZ19jb2xvcnMJCQlvYwlzdHIJb2MJLQkJLQktLS0tLQlTZXQgYWxsIGNvbG9yIHBhaXJzIHRvIHRoZSBvcmlnaW5hbCBvbmVzCitpbml0aWFsaXplX2NvbG9yCQlpbml0YwlzdHIJSWMJLQkJLQktLS0tLQlpbml0aWFsaXplIGNvbG9yICMxIHRvICgjMiwjMywjNCkKK2luaXRpYWxpemVfcGFpcgkJCWluaXRwCXN0cglJcAktCQktCS0tLS0tCUluaXRpYWxpemUgY29sb3IgcGFpciAjMSB0byBmZz0oIzIsIzMsIzQpLCBiZz0oIzUsIzYsIzcpCitzZXRfY29sb3JfcGFpcgkJCXNjcAlzdHIJc3AJLQkJLQktLS0tLQlTZXQgY3VycmVudCBjb2xvciBwYWlyIHRvICMxCitzZXRfZm9yZWdyb3VuZAkJCXNldGYJc3RyCVNmCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgIzEKK3NldF9iYWNrZ3JvdW5kCQkJc2V0YglzdHIJU2IJLQkJLQktLS0tLQlTZXQgYmFja2dyb3VuZCBjb2xvciAjMQorIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyB0byBzdXBwb3J0IHByaW50ZXJzCisjCitjaGFuZ2VfY2hhcl9waXRjaAkJY3BpCXN0cglaQQktCQktCS0tLS0tCUNoYW5nZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX2xpbmVfcGl0Y2gJCWxwaQlzdHIJWkIJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGxpbmVzIHBlciBpbmNoIHRvICMxCitjaGFuZ2VfcmVzX2hvcnoJCQljaHIJc3RyCVpDCS0JCS0JLS0tLS0JQ2hhbmdlIGhvcml6b250YWwgcmVzb2x1dGlvbiB0byAjMQorY2hhbmdlX3Jlc192ZXJ0CQkJY3ZyCXN0cglaRAktCQktCS0tLS0tCUNoYW5nZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIHRvICMxCitkZWZpbmVfY2hhcgkJCWRlZmMJc3RyCVpFCS0JCS0JLS0tLS0JRGVmaW5lIGEgY2hhcmFjdGVyICMxLCAjMiBkb3RzIHdpZGUsIGRlc2NlbmRlciAjMworZW50ZXJfZG91Ymxld2lkZV9tb2RlCQlzd2lkbQlzdHIJWkYJLQkJLQktLS0tLQlFbnRlciBkb3VibGUtd2lkZSBtb2RlCitlbnRlcl9kcmFmdF9xdWFsaXR5CQlzZHJmcQlzdHIJWkcJLQkJLQktLS0tLQlFbnRlciBkcmFmdC1xdWFsaXR5IG1vZGUKK2VudGVyX2l0YWxpY3NfbW9kZQkJc2l0bQlzdHIJWkgJLQkJLQktLS0tLQlFbnRlciBpdGFsaWMgbW9kZQorZW50ZXJfbGVmdHdhcmRfbW9kZQkJc2xtCXN0cglaSQktCQktCS0tLS0tCVN0YXJ0IGxlZnR3YXJkIGNhcnJpYWdlIG1vdGlvbgorZW50ZXJfbWljcm9fbW9kZQkJc21pY20Jc3RyCVpKCS0JCS0JLS0tLS0JU3RhcnQgbWljcm8tbW90aW9uIG1vZGUKK2VudGVyX25lYXJfbGV0dGVyX3F1YWxpdHkJc25scQlzdHIJWksJLQkJLQktLS0tLQlFbnRlciBOTFEgbW9kZQorZW50ZXJfbm9ybWFsX3F1YWxpdHkJCXNucm1xCXN0cglaTAktCQktCS0tLS0tCUVudGVyIG5vcm1hbC1xdWFsaXR5IG1vZGUKK2VudGVyX3NoYWRvd19tb2RlCQlzc2htCXN0cglaTQktCQktCS0tLS0tCUVudGVyIHNoYWRvdy1wcmludCBtb2RlCitlbnRlcl9zdWJzY3JpcHRfbW9kZQkJc3N1Ym0Jc3RyCVpOCS0JCS0JLS0tLS0JRW50ZXIgc3Vic2NyaXB0IG1vZGUKK2VudGVyX3N1cGVyc2NyaXB0X21vZGUJCXNzdXBtCXN0cglaTwktCQktCS0tLS0tCUVudGVyIHN1cGVyc2NyaXB0IG1vZGUKK2VudGVyX3Vwd2FyZF9tb2RlCQlzdW0Jc3RyCVpQCS0JCS0JLS0tLS0JU3RhcnQgdXB3YXJkIGNhcnJpYWdlIG1vdGlvbgorZXhpdF9kb3VibGV3aWRlX21vZGUJCXJ3aWRtCXN0cglaUQktCQktCS0tLS0tCUVuZCBkb3VibGUtd2lkZSBtb2RlCitleGl0X2l0YWxpY3NfbW9kZQkJcml0bQlzdHIJWlIJLQkJLQktLS0tLQlFbmQgaXRhbGljIG1vZGUKK2V4aXRfbGVmdHdhcmRfbW9kZQkJcmxtCXN0cglaUwktCQktCS0tLS0tCUVuZCBsZWZ0LW1vdGlvbiBtb2RlCitleGl0X21pY3JvX21vZGUJCQlybWljbQlzdHIJWlQJLQkJLQktLS0tLQlFbmQgbWljcm8tbW90aW9uIG1vZGUKK2V4aXRfc2hhZG93X21vZGUJCXJzaG0Jc3RyCVpVCS0JCS0JLS0tLS0JRW5kIHNoYWRvdy1wcmludCBtb2RlCitleGl0X3N1YnNjcmlwdF9tb2RlCQlyc3VibQlzdHIJWlYJLQkJLQktLS0tLQlFbmQgc3Vic2NyaXB0IG1vZGUKK2V4aXRfc3VwZXJzY3JpcHRfbW9kZQkJcnN1cG0Jc3RyCVpXCS0JCS0JLS0tLS0JRW5kIHN1cGVyc2NyaXB0IG1vZGUKK2V4aXRfdXB3YXJkX21vZGUJCXJ1bQlzdHIJWlgJLQkJLQktLS0tLQlFbmQgcmV2ZXJzZSBjaGFyYWN0ZXIgbW90aW9uCittaWNyb19jb2x1bW5fYWRkcmVzcwkJbWhwYQlzdHIJWlkJLQkJLQktLS0tLQlMaWtlIGNvbHVtbl9hZGRyZXNzIGluIG1pY3JvIG1vZGUKK21pY3JvX2Rvd24JCQltY3VkMQlzdHIJWloJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9kb3duIGluIG1pY3JvIG1vZGUKK21pY3JvX2xlZnQJCQltY3ViMQlzdHIJWmEJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9sZWZ0IGluIG1pY3JvIG1vZGUKK21pY3JvX3JpZ2h0CQkJbWN1ZjEJc3RyCVpiCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfcmlnaHQgaW4gbWljcm8gbW9kZQorbWljcm9fcm93X2FkZHJlc3MJCW12cGEJc3RyCVpjCS0JCS0JLS0tLS0JTGlrZSByb3dfYWRkcmVzcyAjMSBpbiBtaWNybyBtb2RlCittaWNyb191cAkJCW1jdXUxCXN0cglaZAktCQktCS0tLS0tCUxpa2UgY3Vyc29yX3VwIGluIG1pY3JvIG1vZGUKK29yZGVyX29mX3BpbnMJCQlwb3JkZXIJc3RyCVplCS0JCS0JLS0tLS0JTWF0Y2ggc29mdHdhcmUgYml0cyB0byBwcmludC1oZWFkIHBpbnMKK3Bhcm1fZG93bl9taWNybwkJCW1jdWQJc3RyCVpmCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2Rvd25fY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fbGVmdF9taWNybwkJCW1jdWIJc3RyCVpnCS0JCS0JLS0tLS0JTGlrZSBwYXJtX2xlZnRfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fcmlnaHRfbWljcm8JCW1jdWYJc3RyCVpoCS0JCS0JLS0tLS0JTGlrZSBwYXJtX3JpZ2h0X2N1cnNvciBpbiBtaWNybyBtb2RlCitwYXJtX3VwX21pY3JvCQkJbWN1dQlzdHIJWmkJLQkJLQktLS0tLQlMaWtlIHBhcm1fdXBfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3NlbGVjdF9jaGFyX3NldAkJCXNjcwlzdHIJWmoJLQkJLQktLS0tLQlTZWxlY3QgY2hhcmFjdGVyIHNldCwgIzEKK3NldF9ib3R0b21fbWFyZ2luCQlzbWdiCXN0cglaawktCQktCS0tLS0tCVNldCBib3R0b20gbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X2JvdHRvbV9tYXJnaW5fcGFybQkJc21nYnAJc3RyCVpsCS0JCS0JLS0tLS0JU2V0IGJvdHRvbSBtYXJnaW4gYXQgbGluZSAjMSBvciAoaWYgc21ndHAgaXMgbm90IGdpdmVuKSAjMiBsaW5lcyBmcm9tIGJvdHRvbQorc2V0X2xlZnRfbWFyZ2luX3Bhcm0JCXNtZ2xwCXN0cglabQktCQktCS0tLS0tCVNldCBsZWZ0IChyaWdodCkgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3JpZ2h0X21hcmdpbl9wYXJtCQlzbWdycAlzdHIJWm4JLQkJLQktLS0tLQlTZXQgcmlnaHQgbWFyZ2luIGF0IGNvbHVtbiAjMQorc2V0X3RvcF9tYXJnaW4JCQlzbWd0CXN0cglabwktCQktCS0tLS0tCVNldCB0b3AgbWFyZ2luIGF0IGN1cnJlbnQgbGluZQorc2V0X3RvcF9tYXJnaW5fcGFybQkJc21ndHAJc3RyCVpwCS0JCS0JLS0tLS0JU2V0IHRvcCAoYm90dG9tKSBtYXJnaW4gYXQgcm93ICMxCitzdGFydF9iaXRfaW1hZ2UJCQlzYmltCXN0cglacQktCQktCS0tLS0tCVN0YXJ0IHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RhcnRfY2hhcl9zZXRfZGVmCQlzY3NkCXN0cglacgktCQktCS0tLS0tCVN0YXJ0IGNoYXJhY3RlciBzZXQgZGVmaW5pdGlvbiAjMSwgd2l0aCAjMiBjaGFyYWN0ZXJzIGluIHRoZSBzZXQKK3N0b3BfYml0X2ltYWdlCQkJcmJpbQlzdHIJWnMJLQkJLQktLS0tLQlTdG9wIHByaW50aW5nIGJpdCBpbWFnZSBncmFwaGljcworc3RvcF9jaGFyX3NldF9kZWYJCXJjc2QJc3RyCVp0CS0JCS0JLS0tLS0JRW5kIGRlZmluaXRpb24gb2YgY2hhcmFjdGVyIHNldCAjMQorc3Vic2NyaXB0X2NoYXJhY3RlcnMJCXN1YmNzCXN0cgladQktCQktCS0tLS0tCUxpc3Qgb2Ygc3Vic2NyaXB0YWJsZSBjaGFyYWN0ZXJzCitzdXBlcnNjcmlwdF9jaGFyYWN0ZXJzCQlzdXBjcwlzdHIJWnYJLQkJLQktLS0tLQlMaXN0IG9mIHN1cGVyc2NyaXB0YWJsZSBjaGFyYWN0ZXJzCit0aGVzZV9jYXVzZV9jcgkJCWRvY3IJc3RyCVp3CS0JCS0JLS0tLS0JUHJpbnRpbmcgYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgY2F1c2VzIENSCit6ZXJvX21vdGlvbgkJCXplcm9tCXN0cglaeAktCQktCS0tLS0tCU5vIG1vdGlvbiBmb3Igc3Vic2VxdWVudCBjaGFyYWN0ZXIKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlIGZvbGxvd2luZyBzdHJpbmcgY2FwYWJpbGl0aWVzIGFyZSBwcmVzZW50IGluIHRoZSBTVnI0LjAgdGVybSBzdHJ1Y3R1cmUsCisjJWJ1dCB3ZXJlIG9yaWdpbmFsbHkgbm90IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcxOC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2NoYXJfc2V0X25hbWVzCQkJY3NubQlzdHIJWnkJLQkJLQktLS0tLQlQcm9kdWNlICMxJ3RoIGl0ZW0gZnJvbSBsaXN0IG9mIGNoYXJhY3RlciBzZXQgbmFtZXMKK2tleV9tb3VzZQkJCWttb3VzCXN0cglLbQlLRVlfTU9VU0UJMDYzMQktLS0tLQlNb3VzZSBldmVudCBoYXMgb2NjdXJyZWQKK21vdXNlX2luZm8JCQltaW5mbwlzdHIJTWkJLQkJLQktLS0tLQlNb3VzZSBzdGF0dXMgaW5mb3JtYXRpb24KK3JlcV9tb3VzZV9wb3MJCQlyZXFtcAlzdHIJUlEJLQkJLQktLS0tLQlSZXF1ZXN0IG1vdXNlIHBvc2l0aW9uCitnZXRfbW91c2UJCQlnZXRtCXN0cglHbQktCQktCS0tLS0tCUN1cnNlcyBzaG91bGQgZ2V0IGJ1dHRvbiBldmVudHMsIHBhcmFtZXRlciAjMSBub3QgZG9jdW1lbnRlZC4KK3NldF9hX2ZvcmVncm91bmQJCXNldGFmCXN0cglBRgktCQktCS0tLS0tCVNldCBmb3JlZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorc2V0X2FfYmFja2dyb3VuZAkJc2V0YWIJc3RyCUFCCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitwa2V5X3BsYWIJCQlwZnhsCXN0cgl4bAktCQktCS0tLS0tCVByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIHR5cGUgc3RyaW5nICMyIGFuZCBzaG93IHN0cmluZyAjMworZGV2aWNlX3R5cGUJCQlkZXZ0CXN0cglkdgktCQktCS0tLS0tCUluZGljYXRlIGxhbmd1YWdlL2NvZGVzZXQgc3VwcG9ydAorY29kZV9zZXRfaW5pdAkJCWNzaW4Jc3RyCWNpCS0JCS0JLS0tLS0JSW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgY29kZXNldHMKK3NldDBfZGVzX3NlcQkJCXMwZHMJc3RyCXMwCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAwIChFVUMgc2V0IDAsIEFTQ0lJKQorc2V0MV9kZXNfc2VxCQkJczFkcwlzdHIJczEJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDEKK3NldDJfZGVzX3NlcQkJCXMyZHMJc3RyCXMyCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAyCitzZXQzX2Rlc19zZXEJCQlzM2RzCXN0cglzMwktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMworc2V0X2xyX21hcmdpbgkJCXNtZ2xyCXN0cglNTAktCQktCS0tLS0tCVNldCBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMgdG8gIzEsICMyLiAgKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfdGJfbWFyZ2luCQkJc21ndGIJc3RyCU1UCS0JCS0JLS0tLS0JU2V0cyBib3RoIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgdG8gIzEsICMyCitiaXRfaW1hZ2VfcmVwZWF0CQliaXJlcAlzdHIJWHkJLQkJLQktLS0tLQlSZXBlYXQgYml0IGltYWdlIGNlbGwgIzEgIzIgdGltZXMKK2JpdF9pbWFnZV9uZXdsaW5lCQliaW5lbAlzdHIJWnoJLQkJLQktLS0tLQlNb3ZlIHRvIG5leHQgcm93IG9mIHRoZSBiaXQgaW1hZ2UKK2JpdF9pbWFnZV9jYXJyaWFnZV9yZXR1cm4JYmljcglzdHIJWXYJLQkJLQktLS0tLQlNb3ZlIHRvIGJlZ2lubmluZyBvZiBzYW1lIHJvdworY29sb3JfbmFtZXMJCQljb2xvcm5tCXN0cglZdwktCQktCS0tLS0tCUdpdmUgbmFtZSBmb3IgY29sb3IgIzEKK2RlZmluZV9iaXRfaW1hZ2VfcmVnaW9uCQlkZWZiaQlzdHIJWXgJLQkJLQktLS0tLQlEZWZpbmUgcmVjdGFuZ3VhbGFyIGJpdCBpbWFnZSByZWdpb24KK2VuZF9iaXRfaW1hZ2VfcmVnaW9uCQllbmRiaQlzdHIJWXkJLQkJLQktLS0tLQlFbmQgYSBiaXQtaW1hZ2UgcmVnaW9uCitzZXRfY29sb3JfYmFuZAkJc2V0Y29sb3IJc3RyCVl6CS0JCS0JLS0tLS0JQ2hhbmdlIHRvIHJpYmJvbiBjb2xvciAjMQorc2V0X3BhZ2VfbGVuZ3RoCQkJc2xpbmVzCXN0cglZWgktCQktCS0tLS0tCVNldCBwYWdlIGxlbmd0aCB0byAjMSBsaW5lcworIworIyBTVnI0IGFkZGVkIHRoZXNlIGNhcGFiaWxpdGllcyBmb3IgZGlyZWN0IFBDLWNsb25lIHN1cHBvcnQKKyMKK2Rpc3BsYXlfcGNfY2hhcgkJCWRpc3BjCXN0cglTMQktCQktCS0tLS0tCURpc3BsYXkgUEMgY2hhcmFjdGVyICMxCitlbnRlcl9wY19jaGFyc2V0X21vZGUJCXNtcGNoCXN0cglTMgktCQktCS0tLS0tCUVudGVyIFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2V4aXRfcGNfY2hhcnNldF9tb2RlCQlybXBjaAlzdHIJUzMJLQkJLQktLS0tLQlFeGl0IFBDIGNoYXJhY3RlciBkaXNwbGF5IG1vZGUKK2VudGVyX3NjYW5jb2RlX21vZGUJCXNtc2MJc3RyCVM0CS0JCS0JLS0tLS0JRW50ZXIgUEMgc2NhbmNvZGUgbW9kZQorZXhpdF9zY2FuY29kZV9tb2RlCQlybXNjCXN0cglTNQktCQktCS0tLS0tCUV4aXQgUEMgc2NhbmNvZGUgbW9kZQorcGNfdGVybV9vcHRpb25zCQkJcGN0cm0Jc3RyCVM2CS0JCS0JLS0tLS0JUEMgdGVybWluYWwgb3B0aW9ucworc2NhbmNvZGVfZXNjYXBlCQkJc2Nlc2MJc3RyCVM3CS0JCS0JLS0tLS0JRXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KK2FsdF9zY2FuY29kZV9lc2MJCXNjZXNhCXN0cglTOAktCQktCS0tLS0tCUFsdGVybmF0ZSBlc2NhcGUgZm9yIHNjYW5jb2RlIGVtdWxhdGlvbgorIyUuVEUKKyMlLmFkCisjJQorIyUuaW4gLjhpCisjJVRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGFkZGVkIHRoZXNlLiAgVGhleSBhcmUgc29tZSBwb3N0LTQuMSAKKyMldmVyc2lvbnMgb2YgU3lzdGVtIFYgY3Vyc2VzLCBlLmcuLCBTb2xhcmlzIDIuNSBhbmQgSVJJWCA2LnguCisjJVRoZSBcZkJuY3Vyc2VzXGZSIHRlcm1jYXAgbmFtZXMgZm9yIHRoZW0gYXJlIGludmVudGVkOyBhY2NvcmRpbmcgdG8gdGhlCisjJVhTSSBDdXJzZXMgc3RhbmRhcmQsIHRoZXkgaGF2ZSBubyB0ZXJtY2FwIG5hbWVzLiAgSWYgeW91ciBjb21waWxlZCB0ZXJtaW5mbworIyVlbnRyaWVzIHVzZSB0aGVzZSwgdGhleSBtYXkgbm90IGJlIGJpbmFyeS1jb21wYXRpYmxlIHdpdGggU3lzdGVtIFYgdGVybWluZm8KKyMlZW50cmllcyBhZnRlciBTVnI0LjE7IGJld2FyZSEKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJTdHJpbmcJbmFtZQlDb2RlXGZSCitlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUJZWhobG0Jc3RyCVhoCS0JCS0JLS0tLS0JRW50ZXIgaG9yaXpvbnRhbCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbGVmdF9obF9tb2RlCQllbGhsbQlzdHIJWGwJLQkJLQktLS0tLQlFbnRlciBsZWZ0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl9sb3dfaGxfbW9kZQkJZWxvaGxtCXN0cglYbwktCQktCS0tLS0tCUVudGVyIGxvdyBoaWdobGlnaHQgbW9kZQorZW50ZXJfcmlnaHRfaGxfbW9kZQkJZXJobG0Jc3RyCVhyCS0JCS0JLS0tLS0JRW50ZXIgcmlnaHQgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3RvcF9obF9tb2RlCQlldGhsbQlzdHIJWHQJLQkJLQktLS0tLQlFbnRlciB0b3AgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3ZlcnRpY2FsX2hsX21vZGUJCWV2aGxtCXN0cglYdgktCQktCS0tLS0tCUVudGVyIHZlcnRpY2FsIGhpZ2hsaWdodCBtb2RlCitzZXRfYV9hdHRyaWJ1dGVzCQlzZ3IxCXN0cglzQQktCQktCS0tLS0tCURlZmluZSBzZWNvbmQgc2V0IG9mIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzYKK3NldF9wZ2xlbl9pbmNoCQkJc2xlbmd0aAlzdHIJc0wJLQkJLQktLS0tLQlZSSBTZXQgcGFnZSBsZW5ndGggdG8gIzEgaHVuZHJlZHRoIG9mIGFuIGluY2gKKyMlLlRFCisjJS5hZAorIworIyBUaGUgbWFnaWMgdG9rZW4gYmVsb3cgdGVsbHMgdGhlIHRpYyBjb21waWxlci1nZW5lcmF0b3IgY29kZSB0aGF0IGFsbCB0aGUgY2FwcworIyBwYXN0IGl0IHNob3VsZCBiZSBpZ25vcmVkIChub3Qgd3JpdHRlbiBvdXQpIHdoZW4gZHVtcGluZyB0ZXJtaW5mbyBvYmplY3RzLiBJdAorIyBhbHNvIHRlbGxzIHRoZSBtYW4gcGFnZSB0YWJsZSBnZW5lcmF0b3Igbm90IHRvIHBhc3MgdGhyb3VnaCBmb2xsb3dpbmcgbGluZXMKKyMgVGhpcyBtZWFucyB3ZSBjYW4gaGF2ZSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgYW5kIHBzZXVkby1jYXBhYmlsaXRpZXMgdGhhdCBhcmUKKyMgcmVjb2duaXplZCBmb3IgdGVybWNhcCBvciB0ZXJtaW5mbyBjb21waWxhdGlvbiwgYnV0IG5vdCBvdXRwdXQuCisjCisjICUlLVNUT1AtSEVSRS0lJQorIworIyBEb24ndCBtb3ZlIHRoaXMgY2FzdWFsbHkhICBJbiBmYWN0LCBkb24ndCBtb3ZlIGl0IGF0IGFsbCB1bmxlc3MgeW91J3JlCisjIGVpdGhlciBkb2luZyBpdCB0byBhZGQgU3lzdGVtIFYgb3IgWFBHNCBleHRlbnNpb25zLCBvciBoYXZlIGRlY2lkZWQgeW91CisjIGRvbid0IGNhcmUgYWJvdXQgU1ZyNCBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1DQVAgRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGUgY2FwYWJpbGl0aWVzIGJlbG93IGFyZSBlaXRoZXIgb2Jzb2xldGUgb3IgZXh0ZW5zaW9ucyBvbiBjZXJ0YWluIHN5c3RlbXMuCisjIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IFNWUjQgdGVybWluZm8uICBTb21lIGFyZSB1c2VkIGJ5IGNhcHRvaW5mbyB0byB0cmFuc2xhdGUKKyMgdGVybWNhcCBzb3VyY2VzOyB0aGUgcmVzdCBhcmUgbGlzdGVkIGZvciBjb21wbGV0ZW5lc3MsIGFuZCBpbiBjYXNlIHNvbWVib2R5CisjIGNhcmVzIGFib3V0IHRoZW0gZW5vdWdoIHRvIGhhY2sgaW4gY29kZSB0aGF0IHdpbGwgdHJhbnNsYXRlIHRoZW0gaW50bworIyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMuCisjCisjIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaXN0IGlzIGZyb20gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlCisjIChjb21wLnNvdXJjZXMudW5peCwgdm9sdW1lIDI2KTsgdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCB0ZXJtaW5mbyBuYW1lcyAoYXMKKyMgd2VsbCBhcyB0aGUgdGVybWNhcCBjb2RlcykgbWF0Y2ggaGlzIGxpc3QuCisjCisjIFRoaXMgZ3JvdXAgb2YgY29kZXMgaXMgbm90IG1hcmtlZCBvYnNvbGV0ZSBpbiA0LjRCU0QsIGJ1dCBoYXZlIG5vIGRpcmVjdAorIyB0ZXJtaW5mbyBlcXVpdmFsZW50cy4gIFRoZSBycyBjYXBhYmlsaXR5IGlzIHNwZWNpYWxseSB0cmFuc2xhdGVkIHRvIHRlcm1pbmZvCisjIHIyLCBhbmQgdmljZSB2ZXJzYSwgaWYgYW4gZW50cnkgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIHIyLiAgU2ltaWxhcmx5LAorIyBpMiBpcyB0cmFuc2xhdGVkIHRvIHIzIGlmIHRoZXJlIGlzIG5vIHIzIChiZWNhdXNlIFNWIHRlcm1pbmZvIG1hcHMgaXMgdG8gaTIpLgorIyBUaGUgdWcgY2FwYWJpbGl0eSBpcyB0aHJvd24gYXdheSwgYnV0IGFzc3VtZWQgdG8gYmUgd2hhdGV2ZXIgc2cgaXMgaWYgdGhlCisjIGxhdHRlciBpcyBub256ZXJvIGFuZCB3ZSdyZSBkdW1waW5nIGluIHRlcm1jYXAgZm9ybWF0LgorIwordGVybWNhcF9pbml0MgkJCU9UaTIJc3RyCWkyCS0JCS0JWUItLS0Jc2Vjb25kYXJ5IGluaXRpYWxpemF0aW9uIHN0cmluZwordGVybWNhcF9yZXNldAkJCU9UcnMJc3RyCXJzCS0JCS0JWUItRy0JdGVybWluYWwgcmVzZXQgc3RyaW5nCittYWdpY19jb29raWVfZ2xpdGNoX3VsCQlPVHVnCW51bQl1ZwktCQktCVlCQ0dFCW51bWJlciBvZiBibGFua3MgbGVmdCBieSB1bAorIworIyBPYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4gIFNvbWUgYXJlIHVzZWQgZm9yIHRlcm1jYXAgdHJhbnNsYXRpb24uICBUaGUKKyMgY29kZSB1c2VzIHRoZSAnT1QnIHByZWZpeCB3ZSBwdXQgb24gb2Jzb2xldGUgY2FwYWJpbGl0aWVzIHRvIHN1cHByZXNzCisjIHByaW50aW5nIHRoZW0gaW4gdGVybWluZm8gc291cmNlIGR1bXBzIG9mIGNvbXBpbGVkIGVudHJpZXMuCisjCitiYWNrc3BhY2VzX3dpdGhfYnMJCU9UYnMJYm9vbAlicwktCQktCVlCQ0dFCXVzZXMgXkggdG8gbW92ZSBsZWZ0CitjcnRfbm9fc2Nyb2xsaW5nCQlPVG5zCWJvb2wJbnMJLQkJLQlZQkNHLQljcnQgY2Fubm90IHNjcm9sbAorbm9fY29ycmVjdGx5X3dvcmtpbmdfY3IJCU9UbmMJYm9vbAluYwktCQktCVlCQ0ctCW5vIHdheSB0byBnbyB0byBzdGFydCBvZiBsaW5lCitjYXJyaWFnZV9yZXR1cm5fZGVsYXkJCU9UZEMJbnVtCWRDCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgQ1IKK25ld19saW5lX2RlbGF5CQkJT1RkTgludW0JZE4JLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBMRgorbGluZWZlZWRfaWZfbm90X2xmCQlPVG5sCXN0cglubAktCQktCVlCQ0dFCXVzZSB0byBtb3ZlIGRvd24KK2JhY2tzcGFjZV9pZl9ub3RfYnMJCU9UYmMJc3RyCWJjCS0JCS0JWUJDR0UJbW92ZSBsZWZ0LCBpZiBub3QgXkgKKyMKKyMgR05VIHRlcm1jYXAgbGlicmFyeSBleHRlbnNpb25zLiAgVGhlIEdOVSB0ZXJtY2FwIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyBFbWFjcyBubyBsb25nZXIgdXNlcyB0aGVzZSwgYnV0IE1UIHNob3dlZCB1cCBpbiBwcmUtOS4wIHZlcnNpb25zIG9mIHRoZQorIyBCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbyBNVCBpcyByZXNvbHZlZCBieSB0eXBlCisjIGluZm87IE1UIGlzIGNvbnZlcnRlZCB0byBrbS4KKyMKK2dudV9oYXNfbWV0YV9rZXkJCU9UTVQJYm9vbAlNVAktCQktCS0tLS1FCWhhcyBtZXRhIGtleQorIyBnbnVfdGFiX3dpZHRoCQkJT1R0dwludW0JdHcJLQkJLQktLS0tRQl0YWIgd2lkdGggaW4gc3BhY2VzCisjCisjIEdOVSB0ZXJtY2FwICpkb2VzKiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZXh0ZW5kZWQgY2FwYWJpbGl0eSwgIE9ubHkgdGhlCisjIG5vdy1vYnNvbGV0ZSBBbm4gQXJib3IgdGVybWluYWxzIHVzZWQgaXQuCisjCisjIGdudV9jaGFuZ2Vfc2Nyb2xsX3JlZ2lvbglPVGNTCXN0cgljUwktCQktCS0tLUdFCWFsdGVybmF0ZSBzZXQgc2Nyb2xsaW5nIHJlZ2lvbiAKKyMKKyMgVGhlIGZvbGxvd2luZyBjb21tZW50cyBkZXNjcmliZSBjYXBuYW1lcyBzbyBhbmNpZW50IHRoYXQgSSBiZWxpZXZlIG5vCisjIHNvZnR3YXJlIHVzZXMgdGhlbSBhbnkgbG9uZ2VyLiAgU29tZSBvZiB0aGVzZSBoYXZlIHRvIGdvIGJlY2F1c2UgdGhleQorIyBjbGFzaCB3aXRoIHRlcm1pbmZvIG5hbWVzIGluIHdheXMgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlc2UgbXl0aW5mbyBjb2RlcyBhcmUgbm90IHVzZWQgaW4gdGhlIDQuNEJTRCBjdXJzZXMgY29kZS4gIFRoZXkgYXJlCisjIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgNC40QlNEIG1hbnVhbCBwYWdlcy4KKyMKKyMgVGhlcmUgaXMgb25lIGNvbmZsaWN0IHdpdGggdGVybWluZm87IG1hIGlzIGluIGJvdGguICBUaGlzIGNvbmZsaWN0IGlzCisjIHJlc29sdmVkIGJ5IHR5cGUgaW5mb3JtYXRpb24uCisjCisjIFRoZSBga28nIGNhcGFiaWxpdHkgaXMgdHJhbnNsYXRlZCBieSBzcGVjaWFsIGNvZGUuICBJdCBzaG91bGQgY29udGFpbiBhCisjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhcGFiaWxpdGllcyBmb3Igd2hpY2ggdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcga2V5cy4KKyMgVGhlIGBrbicgY29kZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyMKKyMgVGhlIGBtYScgY2FwYWJpbGl0eSBzZWVtcyB0byBoYXZlIGJlZW4gZGVzaWduZWQgdG8gbWFwIGJldHdlZW4gdGhlIHJvZ3VlKDIpCisjIG1vdGlvbiBrZXlzIChpbmNsdWRpbmcgamtobCkgYW5kIGNoYXJhY3RlcnMgZW1pdHRlZCBieSBhcnJvdyBrZXlzIG9uIHNvbWUKKyMgcHJpbWl0aXZlIHByZS1BTlNJIHRlcm1pbmFscy4gIEl0J3Mgc28gb2Jzb2xldGUgaXQncyBmb3NzaWxpemVkLi4uCisjCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBtZW1vcnlfbG9ja19hYm92ZSBhbmQgbWVtb3J5X3VubG9jazoKKyMgIllvdSBjYW4gJ2ZyZWV6ZScgZGF0YSBvbiB0aGUgc2NyZWVuIGJ5IHR1cm5pbmcgb24gTWVtb3J5IExvY2sgaW4gYSBsaW5lIG9mCisjIHRleHQuICBBbGwgbGluZXMgYWJvdmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgbGluZSBiZWNvbWUgbG9ja2VkIGluIHBsYWNlIG9uCisjIHRoZSBzY3JlZW4uICBUaGVuIGVudGVyIGRhdGEgbm9ybWFsbHkuICBXaGVuIHRoZSBzY3JlZW4gZmlsbHMgdXAsIGFueQorIyBmdXJ0aGVyIGRhdGEgZW50ZXJlZCBmb3JjZXMgdGhlIGZpcnN0IGxpbmUgb2YgdW5mcm96ZW4gbGluZSB0ZXh0IHRvIHNjcm9sbAorIyB1bmRlciB0aGUgZnJvemVuIGRhdGEuICBMaW5lcyBzY3JvbGxlZCBvZmYgdGhlIHNjcmVlbiBhcmUgaW5zZXJ0ZWQgaW50bworIyBtZW1vcnkgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBmaXJzdCBmcm96ZW4gbGluZS4iIChmcm9tIHRoZSBIUCA3MDAvOTYKKyMgVXNlcidzIG1hbnVhbCkuICBWVDEwMC9BTlNJIG1lbW9yeSBsb2NrIHNldCBpcyBcRVs+MmgsIHJlc2V0IGlzIFxFWz4ybC4KKyMKKyMgQXBwbGljYXRpb25zIHRoYXQgdXNlIHRlcm1pbmZvIGFyZSBzdXBwb3NlZCB0byBiZWhhdmUgYXMgdGhvdWdoIHhyIGlzCisjIGFsd2F5cyB0cnVlLgorIworbGluZWZlZWRfaXNfbmV3bGluZQkJT1ROTAlib29sCU5MCS0JCS0JWUItLS0JbW92ZSBkb3duIHdpdGggXG4KKyMgZXZlbl9wYXJpdHkJCQlPVEVQCWJvb2wJRVAJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBldmVuIHBhcml0eQorIyBvZGRfcGFyaXR5CQkJT1RPUAlib29sCU9QCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgb2RkIHBhcml0eQorIyBoYWxmX2R1cGxleAkJCU9USEQJYm9vbAlIRAktCQktCS1CLS0tCXRlcm1pbmFsIGlzIGhhbGYtZHVwbGV4CisjIGxvd2VyX2Nhc2Vfb25seQkJT1RMQwlib29sCUxDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgbG93ZXIgY2FzZQorIyB1cHBlcl9jYXNlX29ubHkJCU9UVUMJYm9vbAlVQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IHVwcGVyIGNhc2UKK2JhY2tzcGFjZV9kZWxheQkJCU9UZEIJbnVtCWRCCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkgKKyMgZm9ybV9mZWVkX2RlbGF5CQlPVGRGCW51bQlkRgktCQktCS1CLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5MCitob3Jpem9udGFsX3RhYl9kZWxheQkJT1RkVAludW0JZFQJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSQorIyB2ZXJ0aWNhbF90YWJfZGVsYXkJCU9UZFYJbnVtCWRWCS0JCS0JLUItLS0JcGFkZGluZyByZXF1aXJlZCBmb3IgXlYKK251bWJlcl9vZl9mdW5jdGlvbl9rZXlzCQlPVGtuCW51bQlrbgktCQktCS1CLUctCWNvdW50IG9mIGZ1bmN0aW9uIGtleXMKK290aGVyX25vbl9mdW5jdGlvbl9rZXlzCQlPVGtvCXN0cglrbwktCQktCS1CLUctCWxpc3Qgb2Ygc2VsZi1tYXBwZWQga2V5Y2FwcworYXJyb3dfa2V5X21hcAkJCU9UbWEJc3RyCW1hCS0JCS0JWUJDLS0JbWFwIGFycm93IGtleXMgcm9ndWUoMSkgbW90aW9uIGtleXMKKyMgbWVtb3J5X2xvY2tfYWJvdmUJCU9UbWwJc3RyCW1sCS0JCS0JLUItLS0JbG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQorIyBtZW1vcnlfdW5sb2NrCQkJT1RtdQlzdHIJbXUJLQkJLQktQi0tLQl1bmxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKK2hhc19oYXJkd2FyZV90YWJzCQlPVHB0CWJvb2wJcHQJLQkJLQlZQi0tLQloYXMgOC1jaGFyIHRhYnMgaW52b2tlZCB3aXRoIF5JCityZXR1cm5fZG9lc19jbHJfZW9sCQlPVHhyCWJvb2wJeHIJLQkJLQlZQi0tLQlyZXR1cm4gY2xlYXJzIHRoZSBsaW5lCisjIHRla180MDI1X2luc2VydF9saW5lCQlPVHh4CWJvb2wJeHgJLQkJLQktQkMtLQlUZWt0cm9uaXggNDAyNSBpbnNlcnQtbGluZSBnbGl0Y2gKKyMKKyMgbXl0aW5mbyBkZXNjcmliZWQgdGhpcyBhcyBhIHRlcm1jYXAgY2FwYWJpbGl0eSwgYnV0IGl0J3Mgbm90IGxpc3RlZCBpbiB0aGUKKyMgNC40QlNEIG1hbiBwYWdlcywgYW5kIG5vdCBmb3VuZCBpbiB0aGUgNC40QlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuY3Vyc2VzCisjIHBhY2thZ2UsIGxpa2UgU3lzdGVtIFYsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFsd2F5cyB0cnVlLgorIworIyByaW5kX29ubHlfYXRfdG9wCQlPVHhxCWJvb2wJeHEJLQkJLQktLS0tLQlyZXZlcnNlIGluZGV4IG9ubHkgd29ya3MgZnJvbSB0b3AgbGluZQorIworIyBVbml2ZXJzaXR5IG9mIFdhdGVybG9vIHRlcm1jYXAgZXh0ZW5zaW9ucyAoYXMgZGVzY3JpYmVkIGluIG15dGluZm8pLgorIyBUaGUgYHhsJyB0ZXJtY2FwIGZpbGUgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90CisjIGJlIHJlc29sdmVkIGJ5IGEgdHlwZSBjaGVjay4gIFRoZSBkZXNjcmlwdGlvbnMgYXJlIGd1ZXNzZXMgZnJvbSB3aGF0IHdhcworIyBpbiB0aGUgbXl0aW5mbyB0YWJsZXMuIAorIworIyBrZXlfaW50ZXJydXB0X2NoYXIJCU9Ua2kJc3RyCWtpCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBpbnRlcnJ1cHQga2V5ICg/KQorIyBrZXlfa2lsbF9jaGFyCQkJT1RrawlzdHIJa2sJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGtpbGwga2V5ICg/KQorIyBrZXlfc3VzcGVuZF9jaGFyCQlPVGt6CXN0cglregktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgc3VzcGVuZCBrZXkgKD8pCisjIGluaXRpYWxpemF0aW9uX21lc3N5CQlPVHhjCWJvb2wJeGMJLQkJLQktLS0tLQlpbml0aWFsaXphdGlvbiBsZWF2ZXMgZ2FyYmFnZSBvbiB0aGUgc2NyZWVuICg/KQorIyBpbmRfYXRfYm90dG9tX2RvZXNfY3IJCU9UeGwJYm9vbAl4bAktCQktCS0tLS0tCWluZGV4IGRvZXMgYSBjYXJyaWFnZSByZXR1cm4KKyMKKyMgTm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHVuaXF1ZSB0byBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UuCisjIFNSIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdCBiZSByZXNvbHZlZCBieSBhIHR5cGUKKyMgY2hlY2suCisjCisjIHNjcm9sbF9sZWZ0CQkJT1RzbDEJc3RyCVNsCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZAorIyBzY3JvbGxfcmlnaHQJCQlPVHNyMQlzdHIJU3IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZAorIyBwYXJtX3Njcm9sbF9sZWZ0CQlPVHNsCXN0cglTTAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQgIzEgY2hhcmFjdGVycworIyBwYXJtX3Njcm9sbF9yaWdodAkJT1RzcglzdHIJU1IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZCAjMSBjaGFyYWN0ZXJzCisjCisjIFRoZSBteXRpbmZvIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgWGVuaXggZGVmaW5lZCBpdHMgb3duIHNldCBvZiBmb3Jtcy1kcmF3aW5nIGNhcGFiaWxpdGllczoKKyMKKyMgY2FwCUlCTSBBU0NJSQlkZXNjcmlwdGlvbiAgICAgICAgICAgICBBQ1MgICAgICAgICAJQVNDSUkKKyMgLS0tCS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0JLS0tLS0tCisjIEcxCTE5MSBcMjc3IE0tPwlzaW5nbGUgdXBwZXIgcmlnaHQgICAJQUNTX1VSQ09STkVSCisjIEcyCTIxOCBcMzMyIE0tWglzaW5nbGUgdXBwZXIgbGVmdAlBQ1NfVUxDT1JORVIKKyMgRzMJMTkyIFwzMDAgTS1ACXNpbmdsZSBsb3dlciBsZWZ0CUFDU19MTENPUk5FUgorIyBHNAkyMTcgXDMzMSBNLVkJc2luZ2xlIGxvd2VyIHJpZ2h0CUFDU19MUkNPUk5FUgorIyBHNQkxODcgXDI3MyBNLTsJZG91YmxlIHVwcGVyIHJpZ2h0CisjIEc2CTIwMSBcMzExIE0tSQlkb3VibGUgdXBwZXIgbGVmdAorIyBHNwkyMDAgXDMxMCBNLUgJZG91YmxlIGxvd2VyIGxlZnQKKyMgRzgJMTg4IFwyNzQgTS08CWRvdWJsZSBsb3dlciByaWdodAorIyBHQwkxOTcgXDMwNSBNLUUJc2luZ2xlIGludGVyc2VjdGlvbglBQ1NfUExVUwlfIF8KKyMgR0QJMTk0IFwzMDIgTS1CCXNpbmdsZSBkb3duLXRpY2sJQUNTX1RURUUJIHwKKyMgR0gJMTk2IFwzMDQgTS1ECXNpbmdsZSBob3Jpem9udGFsIGxpbmUJQUNTX0hMSU5FCisjIEdMCTE4MCBcMjY0IE0tNAlzaW5nbGUgbGVmdCB0aWNrCUFDU19SVEVFCS18CisjIEdSCTE5NSBcMzAzIE0tQwlzaW5nbGUgcmlnaHQgdGljawlBQ1NfTFRFRQl8LQorIyBHVQkxOTMgXDMwMSBNLUEJc2luZ2xlIHVwIHRpY2sJCUFDU19CVEVFCV98XworIyBHVgkxNzkgXDI2MyBNLTMJc2luZ2xlIHZlcnRpY2FsIGxpbmUJQUNTX1ZMSU5FCisjIEdjCTIwNiBcMzE2IE0tTglkb3VibGUgaW50ZXJzZWN0aW9uCisjIEdkCTIwMyBcMzEzIE0tSwlkb3VibGUgZG93biB0aWNrCisjIEdoCTIwNSBcMzE1IE0tTQlkb3VibGUgaG9yaXpvbnRhbCBsaW5lCisjIEdsCTIwNCBcMjA0IE0tTAlkb3VibGUgbGVmdCB0aWNrCisjIEdyCTE4NSBcMjcxIE0tOQlkb3VibGUgcmlnaHQgdGljaworIyBHdQkyMDIgXDMxMiBNLUoJZG91YmxlIHVwIHRpY2sKKyMgR3YJMTg2IFwyNzIgTS06CWRvdWJsZSB2ZXJ0aWNhbCBsaW5lCisjCisjIFRoZSBjb21waWxlciB3aWxsIHRyYW5zbGF0ZSB0aGUgc2luZ2xlLWxpbmUgY2FwcyBhbmQgZGlzY2FyZCB0aGUgb3RoZXJzCisjICh2aWEgSUdOT1JFIGFsaWFzZXMgZnVydGhlciBkb3duKS4gIFdlIGRvbid0IHdhbnQgdG8gZG8gbm9ybWFsIHBhZCAKKyMgdHJhbnNsYXRpb24gb24gdGhlc2UsIHRoZXkncmUgb2Z0ZW4gc2luZ2xlLWNoYXJhY3RlciBwcmludGFibGUgQVNDSUkKKyMgc3RyaW5ncyB0aGF0IGhhcHBlbiB0byBiZSBudW1lcmljcy4gIFRoZXJlJ3MgYXdrIGNvZGUgaW4gcGFyYW1ldHJpemVkLnNoCisjIHRoYXQgZGV0ZWN0cyB0aGUgYWNzXyBwcmVmaXggYW5kIHVzZXMgaXQgdG8gc3VwcHJlc3MgcGFkIHRyYW5zbGF0aW9uLgorIyBUaGVzZSB0ZXJtaW5mbyBuYW1lcyBhcmUgaW52ZW50ZWQuCisjCithY3NfdWxjb3JuZXIJCQlPVEcyCXN0cglHMgktCQktCS0tLS0tCXNpbmdsZSB1cHBlciBsZWZ0CithY3NfbGxjb3JuZXIJCQlPVEczCXN0cglHMwktCQktCS0tLS0tCXNpbmdsZSBsb3dlciBsZWZ0CithY3NfdXJjb3JuZXIJCQlPVEcxCXN0cglHMQktCQktCS0tLS0tCXNpbmdsZSB1cHBlciByaWdodAorYWNzX2xyY29ybmVyCQkJT1RHNAlzdHIJRzQJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgcmlnaHQKK2Fjc19sdGVlCQkJT1RHUglzdHIJR1IJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgcmlnaHQKK2Fjc19ydGVlCQkJT1RHTAlzdHIJR0wJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgbGVmdAorYWNzX2J0ZWUJCQlPVEdVCXN0cglHVQktCQktCS0tLS0tCXRlZSBwb2ludGluZyB1cAorYWNzX3R0ZWUJCQlPVEdECXN0cglHRAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBkb3duCithY3NfaGxpbmUJCQlPVEdICXN0cglHSAktCQktCS0tLS0tCXNpbmdsZSBob3Jpem9udGFsIGxpbmUKK2Fjc192bGluZQkJCU9UR1YJc3RyCUdWCS0JCS0JLS0tLS0Jc2luZ2xlIHZlcnRpY2FsIGxpbmUKK2Fjc19wbHVzCQkJT1RHQwlzdHIJR0MJLQkJLQktLS0tLQlzaW5nbGUgaW50ZXJzZWN0aW9uCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNSU5GTyBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoaXMgc2VjdGlvbiBpcyBhbG1vc3QgYWxsIGNvbW1lbnRzLiAgV2hhdCBpdCdzIG1haW5seSBmb3IgaXMgdG8gZGVzY3JpYmUKKyMgd2hhdCBjYXBhYmlsaXRpZXMgbmVlZCB0byBiZSBzcXVlZXplZCBvdXQgdG8gZ2V0IGRvd24gdG8gdGhlIFhTSSBDdXJzZXMKKyMgc3RhbmRhcmQgc2V0LiAgVGhleSBhcmUgZmxhZ2dlZCB3aXRoIEsuCisjCisjIEhQIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIEhQCisjIHRlcm1pbmZvIGZpbGVzLiAgRXhjZXB0IGZvciBtZW1vcnlfbG9jayBhbmQgbWVtb3J5X3VubG9jaywgdGhleSBhcmUKKyMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBTVnI0IGV4dGVuc2lvbnMsIGJ1dCB0aGV5IG1ha2UgdGhlIGJpbmFyeSBmb3JtYXQKKyMgZGlmZmVyZW50LiAgR3Jyci4uLi4KKyMKK21lbW9yeV9sb2NrCQkJbWVtbAlzdHIJbWwJLQkJLQktLS0tSwlsb2NrIG1lbW9yeSBhYm92ZSBjdXJzb3IKK21lbW9yeV91bmxvY2sJCQltZW11CXN0cgltdQktCQktCS0tLS1LCXVubG9jayBtZW1vcnkKKyNwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgorI2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCisjbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscworI2tleV9mMTEJCQlrZjExCXN0cglGMQktCQktCS0tLS0tCUYxMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjEyCQkJa2YxMglzdHIJRjIJLQkJLQktLS0tLQlGMTIgZnVuY3Rpb24ga2V5Cisja2V5X2YxMwkJCWtmMTMJc3RyCUYzCS0JCS0JLS0tLS0JRjEzIGZ1bmN0aW9uIGtleQorI2tleV9mMTQJCQlrZjE0CXN0cglGNAktCQktCS0tLS0tCUYxNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE1CQkJa2YxNQlzdHIJRjUJLQkJLQktLS0tLQlGMTUgZnVuY3Rpb24ga2V5Cisja2V5X2YxNgkJCWtmMTYJc3RyCUY2CS0JCS0JLS0tLS0JRjE2IGZ1bmN0aW9uIGtleQorI2tleV9mMTcJCQlrZjE3CXN0cglGNwktCQktCS0tLS0tCUYxNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE4CQkJa2YxOAlzdHIJRjgJLQkJLQktLS0tLQlGMTggZnVuY3Rpb24ga2V5Cisja2V5X2YxOQkJCWtmMTkJc3RyCUY5CS0JCS0JLS0tLS0JRjE5IGZ1bmN0aW9uIGtleQorI2tleV9mMjAJCQlrZjIwCXN0cglGQQktCQktCS0tLS0tCUYyMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjIxCQkJa2YyMQlzdHIJRkIJLQkJLQktLS0tLQlGMjEgZnVuY3Rpb24ga2V5Cisja2V5X2YyMgkJCWtmMjIJc3RyCUZDCS0JCS0JLS0tLS0JRjIyIGZ1bmN0aW9uIGtleQorI2tleV9mMjMJCQlrZjIzCXN0cglGRAktCQktCS0tLS0tCUYyMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI0CQkJa2YyNAlzdHIJRkUJLQkJLQktLS0tLQlGMjQgZnVuY3Rpb24ga2V5Cisja2V5X2YyNQkJCWtmMjUJc3RyCUZGCS0JCS0JLS0tLS0JRjI1IGZ1bmN0aW9uIGtleQorI2tleV9mMjYJCQlrZjI2CXN0cglGRwktCQktCS0tLS0tCUYyNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjI3CQkJa2YyNwlzdHIJRkgJLQkJLQktLS0tLQlGMjcgZnVuY3Rpb24ga2V5Cisja2V5X2YyOAkJCWtmMjgJc3RyCUZJCS0JCS0JLS0tLS0JRjI4IGZ1bmN0aW9uIGtleQorI2tleV9mMjkJCQlrZjI5CXN0cglGSgktCQktCS0tLS0tCUYyOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMwCQkJa2YzMAlzdHIJRksJLQkJLQktLS0tLQlGMzAgZnVuY3Rpb24ga2V5Cisja2V5X2YzMQkJCWtmMzEJc3RyCUZMCS0JCS0JLS0tLS0JRjMxIGZ1bmN0aW9uIGtleQorI2tleV9mMzIJCQlrZjMyCXN0cglGTQktCQktCS0tLS0tCUYzMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjMzCQkJa2YzMwlzdHIJRk4JLQkJLQktLS0tLQlGMzMgZnVuY3Rpb24ga2V5Cisja2V5X2YzNAkJCWtmMzQJc3RyCUZPCS0JCS0JLS0tLS0JRjM0IGZ1bmN0aW9uIGtleQorI2tleV9mMzUJCQlrZjM1CXN0cglGUAktCQktCS0tLS0tCUYzNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjM2CQkJa2YzNglzdHIJRlEJLQkJLQktLS0tLQlGMzYgZnVuY3Rpb24ga2V5Cisja2V5X2YzNwkJCWtmMzcJc3RyCUZSCS0JCS0JLS0tLS0JRjM3IGZ1bmN0aW9uIGtleQorI2tleV9mMzgJCQlrZjM4CXN0cglGUwktCQktCS0tLS0tCUYzOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM5CQkJa2YzOQlzdHIJRlQJLQkJLQktLS0tLQlGMzkgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MAkJCWtmNDAJc3RyCUZVCS0JCS0JLS0tLS0JRjQwIGZ1bmN0aW9uIGtleQorI2tleV9mNDEJCQlrZjQxCXN0cglGVgktCQktCS0tLS0tCUY0MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQyCQkJa2Y0MglzdHIJRlcJLQkJLQktLS0tLQlGNDIgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MwkJCWtmNDMJc3RyCUZYCS0JCS0JLS0tLS0JRjQzIGZ1bmN0aW9uIGtleQorI2tleV9mNDQJCQlrZjQ0CXN0cglGWQktCQktCS0tLS0tCUY0NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ1CQkJa2Y0NQlzdHIJRloJLQkJLQktLS0tLQlGNDUgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NgkJCWtmNDYJc3RyCUZhCS0JCS0JLS0tLS0JRjQ2IGZ1bmN0aW9uIGtleQorI2tleV9mNDcJCQlrZjQ3CXN0cglGYgktCQktCS0tLS0tCUY0NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ4CQkJa2Y0OAlzdHIJRmMJLQkJLQktLS0tLQlGNDggZnVuY3Rpb24ga2V5Cisja2V5X2Y0OQkJCWtmNDkJc3RyCUZkCS0JCS0JLS0tLS0JRjQ5IGZ1bmN0aW9uIGtleQorI2tleV9mNTAJCQlrZjUwCXN0cglGZQktCQktCS0tLS0tCUY1MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjUxCQkJa2Y1MQlzdHIJRmYJLQkJLQktLS0tLQlGNTEgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MgkJCWtmNTIJc3RyCUZnCS0JCS0JLS0tLS0JRjUyIGZ1bmN0aW9uIGtleQorI2tleV9mNTMJCQlrZjUzCXN0cglGaAktCQktCS0tLS0tCUY1MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU0CQkJa2Y1NAlzdHIJRmkJLQkJLQktLS0tLQlGNTQgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NQkJCWtmNTUJc3RyCUZqCS0JCS0JLS0tLS0JRjU1IGZ1bmN0aW9uIGtleQorI2tleV9mNTYJCQlrZjU2CXN0cglGawktCQktCS0tLS0tCUY1NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjU3CQkJa2Y1NwlzdHIJRmwJLQkJLQktLS0tLQlGNTcgZnVuY3Rpb24ga2V5Cisja2V5X2Y1OAkJCWtmNTgJc3RyCUZtCS0JCS0JLS0tLS0JRjU4IGZ1bmN0aW9uIGtleQorI2tleV9mNTkJCQlrZjU5CXN0cglGbgktCQktCS0tLS0tCUY1OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYwCQkJa2Y2MAlzdHIJRm8JLQkJLQktLS0tLQlGNjAgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MQkJCWtmNjEJc3RyCUZwCS0JCS0JLS0tLS0JRjYxIGZ1bmN0aW9uIGtleQorI2tleV9mNjIJCQlrZjYyCXN0cglGcQktCQktCS0tLS0tCUY2MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjYzCQkJa2Y2MwlzdHIJRnIJLQkJLQktLS0tLQlGNjMgZnVuY3Rpb24ga2V5CisjCisjIElCTSBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBJQk0KKyMgdGVybWluZm8gZmlsZXMuCisjCisjIFRoZSBwbGFjZXMgaW4gdGhlIGJveFsxMl0gY2FwYWJpbGl0aWVzIGNvcnJlc3BvbmQgdG8gYWNzYyBjaGFyYWN0ZXJzLCBoZXJlIGlzCisjIHRoZSBtYXBwaW5nOgorIworIwlib3gxWzBdICA9IEFDU19VTENPUk5FUgorIwlib3gxWzFdICA9IEFDU19ITElORQkKKyMJYm94MVsyXSAgPSBBQ1NfVVJDT1JORVIKKyMJYm94MVszXSAgPSBBQ1NfVkxJTkUKKyMJYm94MVs0XSAgPSBBQ1NfTFJDT1JORVIKKyMJYm94MVs1XSAgPSBBQ1NfTExDT1JORVIKKyMJYm94MVs2XSAgPSBBQ1NfVFRFRQorIwlib3gxWzddICA9IEFDU19SVEVFCisjCWJveDFbOF0gID0gQUNTX0JURUUKKyMJYm94MVs5XSAgPSBBQ1NfTFRFRQorIwlib3gxWzEwXSA9IEFDU19QTFVTCisjCisjIFRoZSBib3gyIGNoYXJhY3RlcnMgYXJlIHRoZSBkb3VibGUtbGluZSB2ZXJzaW9ucyBvZiB0aGVzZSBmb3JtcyBncmFwaGljcy4KKyMKK2JveF9jaGFyc18xCQkJYm94MQlzdHIJYngJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBwcmltYXJ5IHNldAorI2JveF9jaGFyc18yCQkJYm94MglzdHIJYnkJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBzZWNvbmRhcnkgc2V0CisjYm94X2F0dHJfMQkJCWJhdHQxCXN0cglCeAktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDEKKyNib3hfYXR0cl8yCQkJYmF0dDIJc3RyCUJ5CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MgorI2NvbG9yX2JnXzAJCQljb2xiMAlzdHIJZDAJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9iZ18xCQkJY29sYjEJc3RyCWQxCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAxCisjY29sb3JfYmdfMgkJCWNvbGIyCXN0cglkMgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMgorI2NvbG9yX2JnXzMJCQljb2xiMwlzdHIJZDMJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9iZ180CQkJY29sYjQJc3RyCWQ0CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA0CisjY29sb3JfYmdfNQkJCWNvbGI1CXN0cglkNQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNQorI2NvbG9yX2JnXzYJCQljb2xiNglzdHIJZDYJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9iZ183CQkJY29sYjcJc3RyCWQ3CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA3CisjY29sb3JfZmdfMAkJCWNvbGYwCXN0cgljMAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMAorI2NvbG9yX2ZnXzEJCQljb2xmMQlzdHIJYzEJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDEKKyNjb2xvcl9mZ18yCQkJY29sZjIJc3RyCWMyCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAyCisjY29sb3JfZmdfMwkJCWNvbGYzCXN0cgljMwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMworI2NvbG9yX2ZnXzQJCQljb2xmNAlzdHIJYzQJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDQKKyNjb2xvcl9mZ181CQkJY29sZjUJc3RyCWM1CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA1CisjY29sb3JfZmdfNgkJCWNvbGY2CXN0cgljNgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNgorI2NvbG9yX2ZnXzcJCQljb2xmNwlzdHIJYzcJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDcKKyNmb250XzAJCQkJZm9udDAJc3RyCWYwCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMAorI2ZvbnRfMQkJCQlmb250MQlzdHIJZjEJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAxCisjZm9udF8yCQkJCWZvbnQyCXN0cglmMgktCQktCS0tLS0tCXNlbGVjdCBmb250IDIKKyNmb250XzMJCQkJZm9udDMJc3RyCWYzCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMworI2ZvbnRfNAkJCQlmb250NAlzdHIJZjQJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA0CisjZm9udF81CQkJCWZvbnQ1CXN0cglmNQktCQktCS0tLS1LCXNlbGVjdCBmb250IDUKKyNmb250XzYJCQkJZm9udDYJc3RyCWY2CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNgorI2ZvbnRfNwkJCQlmb250NwlzdHIJZjcJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA3Cisja2V5X2JhY2tfdGFiCQkJa2J0YWIJc3RyCWswCS0JCS0JLS0tLS0JYmFja3RhYiBrZXkKKyNrZXlfZG8JCQkJa2RvCXN0cglraQktCQktCS0tLS1LCWRvIHJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmQJCQlrY21kCXN0cglrZAktCQktCS0tLS1LCWNvbW1hbmQtcmVxdWVzdCBrZXkKKyNrZXlfY29tbWFuZF9wYW5lCQlrY3BuCXN0cglrVwktCQktCS0tLS1LCWNvbW1hbmQtcGFuZSBrZXkKKyNrZXlfZW5kCQkJa2VuZAlzdHIJa3cJLQkJLQktLS0tLQllbmQga2V5Cisja2V5X2hlbHAJCQlraGxwCXN0cglrcQktCQktCS0tLS0tCWhlbHAga2V5Cisja2V5X25ld2xpbmUJCQlrbmwJc3RyCW5sCS0JCS0JLS0tLUsJbmV3bGluZSBrZXkKKyNrZXlfbmV4dF9wYW5lCQkJa25wbglzdHIJa3YJLQkJLQktLS0tSwluZXh0LXBhbmUga2V5Cisja2V5X3ByZXZfY21kCQkJa3BwbglzdHIJa3AJLQkJLQktLS0tSwlwcmV2aW91cy1jb21tYW5kIGtleQorI2tleV9wcmV2X3BhbmUJCQlrcHBuCXN0cglrVgktCQktCS0tLS1LCXByZXZpb3VzLXBhbmUga2V5Cisja2V5X3F1aXQJCQlrcXVpdAlzdHIJa1EJLQkJLQktLS0tSwlxdWl0IGtleQorI2tleV9zZWxlY3QJCQlrc2VsCXN0cglrVQktCQktCS0tLS0tCXNlbGVjdCBrZXkKKyNrZXlfc2Nyb2xsX2xlZnQJCWtzY2wJc3RyCWt6CS0JCS0JLS0tLUsJc2Nyb2xsIGxlZnQKKyNrZXlfc2Nyb2xsX3JpZ2h0CQlrc2NyCXN0cglrWgktCQktCS0tLS1LCXNjcm9sbCByaWdodAorI2tleV90YWIJCQlrdGFiCXN0cglrbwktCQktCS0tLS1LCXRhYiBrZXkKKyNrZXlfc21hcF9pbjEJCQlrbXBmMQlzdHIJS3YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBpbnB1dAorI2tleV9zbWFwX291dDEJCQlrbXB0MQlzdHIJS1YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBvdXRwdXQKKyNrZXlfc21hcF9pbjIJCQlrbXBmMglzdHIJS3cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBpbnB1dAorI2tleV9zbWFwX291dDIJCQlrbXB0MglzdHIJS1cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBvdXRwdXQKKyNrZXlfc21hcF9pbjMJCQlrbXBmMwlzdHIJS3gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBpbnB1dAorI2tleV9zbWFwX291dDMJCQlrbXB0MwlzdHIJS1gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBvdXRwdXQKKyNrZXlfc21hcF9pbjQJCQlrbXBmNAlzdHIJS3kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBpbnB1dAorI2tleV9zbWFwX291dDQJCQlrbXB0NAlzdHIJS1kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBvdXRwdXQKKyNrZXlfc21hcF9pbjUJCQlrbXBmNQlzdHIJS3oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBpbnB1dAorI2tleV9zbWFwX291dDUJCQlrbXB0NQlzdHIJS1oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBvdXRwdXQKKyNhcHBsX2RlZmluZWRfc3RyCQlhcHN0cglzdHIJemEJLQkJLQktLS0tSwlhcHBsaWNhdGlvbi1kZWZpbmVkIHN0cmluZworIyBUaGUga2V5X3NtYXBfaW5bNjc4OV0gYW5kIGtleV9zbWFwX291dFs2Nzg5XSBjYXBhYmlsaXRpZXMgYXJlbid0IGRlc2NyaWJlZCBpbgorIyB0aGUgSUJNIG1hbnVhbCBwYWdlcywgc28gdGhlIGNhcCBuYW1lIHN0cmluZ3MgYXJlIGd1ZXNzZXMuICBUaGUgdGVybWluZm8KKyMgbmFtZXMgYXJlIGFsbW9zdCBjZXJ0YWlubHkgcmlnaHQsIHRoZSB0ZXJtY2FwIG9uZXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZy4KKyNrZXlfc21hcF9pbjYJCQlrbXBmNglzdHIJayEJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBpbnB1dAorI2tleV9zbWFwX291dDYJCQlrbXB0NglzdHIJS0AJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBvdXRwdXQKKyNrZXlfc21hcF9pbjcJCQlrbXBmNwlzdHIJayMJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBpbnB1dAorI2tleV9zbWFwX291dDcJCQlrbXB0NwlzdHIJSyQJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBvdXRwdXQKKyNrZXlfc21hcF9pbjgJCQlrbXBmOAlzdHIJayUJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBpbnB1dAorI2tleV9zbWFwX291dDgJCQlrbXB0OAlzdHIJS14JLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBvdXRwdXQKKyNrZXlfc21hcF9pbjkJCQlrbXBmOQlzdHIJayYJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBpbnB1dAorI2tleV9zbWFwX291dDkJCQlrbXB0OQlzdHIJSyoJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBvdXRwdXQKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZQorI2tleV9zZjEJCQlrc2YxCXN0cglTMQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEKKyNrZXlfc2YyCQkJa3NmMglzdHIJUzIJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAyCisja2V5X3NmMwkJCWtzZjMJc3RyCVMzCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMworI2tleV9zZjQJCQlrc2Y0CXN0cglTNAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDQKKyNrZXlfc2Y1CQkJa3NmNQlzdHIJUzUJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA1Cisja2V5X3NmNgkJCWtzZjYJc3RyCVM2CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNgorI2tleV9zZjcJCQlrc2Y3CXN0cglTNwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDcKKyNrZXlfc2Y4CQkJa3NmOAlzdHIJUzgJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA4Cisja2V5X3NmOQkJCWtzZjkJc3RyCVM5CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOQorI2tleV9zZjEwCQkJa3NmMTAJc3RyCVNBCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMTAKKyMgQUlYIHZlcnNpb24gMyBkb2N1bWVudHMgZGlmZmVyZW50IGNvZGVzIGZvciBGMTEsIEYxMiBhbmQgZG9lcyBub3QgbWVudGlvbgorIyBGMTMtRjY0LiAgQUlYIHZlcnNpb24gNCB1c2VzIHRoZSBzYW1lIG5hbWluZyBmb3IgRjAtRjYzIGFzIGFib3ZlLgorI2tleV9mMTEJCQlrZjExCXN0cglrPAktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMQorI2tleV9mMTIJCQlrZjEyCXN0cglrPgktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMgorIyBVbmRvY3VtZW50ZWQgY2FwYWJpbGl0aWVzIGVuZCBoZXJlLgorI2tleV9hY3Rpb24JCQlrYWN0CXN0cglrSgktCQktCS0tLS1LCXNlbnQgYnkgYWN0aW9uIGtleQorIyBUaGUgSUJNIGRvY3Mgc2F5IHRoZXNlIGNhcGFiaWxpdGllcyBhcmUgZm9yIHRhYmxlLWRyYXdpbmcsIGFuZCBhcmUKKyMgdmFsaWQgb25seSBmb3IgYWl4dGVybSBkZXNjcmlwdGlvbnMuCisjZW50ZXJfdG9wbGluZV9tb2RlCQl0b3BsCXN0cgl0cAktCQktCS0tLS1LCXN0YXJ0IHRvcC1saW5lIG1vZGUKKyNlbnRlcl9ib3R0b21fbW9kZQkJYnRtbAlzdHIJYm0JLQkJLQktLS0tSwlzdGFydCBib3R0b20tbGluZSBtb2RlCisjZW50ZXJfcnZlcnRfbW9kZQkJcnZlcnQJc3RyCXJ2CS0JCS0JLS0tLUsJc3RhcnQgcmlnaHQtdmVydGljYWwgbW9kZQorI2VudGVyX2x2ZXJ0X21vZGUJCWx2ZXJ0CXN0cglsdgktCQktCS0tLS1LCXN0YXJ0IGxlZnQtdmVydGljYWwgbW9kZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQUxJQVMgREVDTEFSQVRJT05TCisjCisjIEhlcmUgd2Ugc2V0IHVwIGFsaWFzZXMgZm9yIHRyYW5zbGF0aW5nIGV4dGVuc2lvbnMgaW50byBzdGFuZGFyZCB0ZXJtaW5mby4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1jYXAgYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEJTRCBhbGlhc2VzOgorIworIyBUaGlzIGlzIGEgY29tbW9uIGVycm9yIGluIG1hbnkgdGVybWNhcCBmaWxlcy4gIFdlJ2xsIGdldCBub3RpZmllZCBkdXJpbmcKKyMgdHJhbnNsYXRpb24gd2hlbiB0aGlzIChvciBhbnkgb3RoZXIgYWxpYXMpIGZpcmVzLgorIworY2FwYWxpYXMJc2IJc3IJQlNECXNjcm9sbCB0ZXh0IGRvd24KKyMKKyMgQVQmVCBleHRlbnNpb25zOgorIworIyBUaGUgb2xkIEFUJlQgNTQxMCwgNTQyMCwgNTQyNSwgcGM2MzAwcGx1cywgNjEwLCBhbmQgczQgZW50cmllcyB1c2VkIGEgc2V0IG9mCisjIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcy4gIEl0cyBzaWduYXR1cmUgaXMgdGhlIEtNIGNhcGFiaWxpdHksIHVzZWQgdG8gbmFtZQorIyBzb21lIHNvcnQgb2Yga2V5bWFwIGZpbGUuICBFRSwgQk8sIENJLCBDViwgWFMsIERTLCBGTCBhbmQgRkUgYXJlIGluIHRoaXMKKyMgc2V0LiAgQ29tbWVudHMgaW4gdGhlIG9yaWdpbmFsLCBhbmQgYSBsaXR0bGUgY3Jvc3MtY2hlY2tpbmcgd2l0aCBvdGhlciBBVCZUCisjIGRvY3VtZW50YXRpb24sIHNlZW0gdG8gZXN0YWJsaXNoIHRoZSBmb2xsb3dpbmcgbWFwcGluZ3M6CisjCitjYXBhbGlhcwlCTwltcglBVCZUCWVudGVyX3JldmVyc2VfbW9kZQorY2FwYWxpYXMJQ0kJdmkJQVQmVAljdXJzb3JfaW52aXNpYmxlCitjYXBhbGlhcwlDVgl2ZQlBVCZUCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCURTCW1oCUFUJlQJZW50ZXJfZGltX21vZGUKKyNjYXBhbGlhcwlFRQltZQlBVCZUCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlGRQlMRglBVCZUCWxhYmVsX29uCitjYXBhbGlhcwlGTAlMTwlBVCZUCWxhYmVsX29mZgorY2FwYWxpYXMJWFMJbWsJQVQmVAllbnRlcl9zZWN1cmVfbW9kZQorIworIyBXZSBjb21tZW50IG91dCBFRSBiZWNhdXNlIHRoZSBjb25mbGljdGluZyBYRU5JWCBFRSBpcyBtb3JlIGNvbW1vbiBpbiAKKyMgb2xkIGVudHJpZXMuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFRoZXNlIGFyZSB0aGUgb25lcyB3ZSBrbm93IGhvdyB0byB0cmFuc2xhdGUgZGlyZWN0bHk6CisjCitjYXBhbGlhcwlFRQltaAlYRU5JWAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJR0UJYWUJWEVOSVgJZXhpdF9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlHUwlhcwlYRU5JWAllbnRlcl9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlDRgl2aQlYRU5JWAljdXJzb3JfaW52aXMKK2NhcGFsaWFzCUNPCXZlCVhFTklYCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCUVOCUA3CVhFTklYCWtleV9lbmQKK2NhcGFsaWFzCUhNCWtoCVhFTklYCWtleV9ob21lCitjYXBhbGlhcwlMRAlrTAlYRU5JWAlrZXlfZGwKK2NhcGFsaWFzCVBECWtOCVhFTklYCWtleV9ucGFnZQorY2FwYWxpYXMJUE4JcG8JWEVOSVgJcHJ0cl9vZmYKK2NhcGFsaWFzCVBTCXBmCVhFTklYCXBydHJfb24KK2NhcGFsaWFzCVBVCWtQCVhFTklYCWtleV9wcGFnZQorY2FwYWxpYXMJUlQJQDgJWEVOSVgJa2VudAorY2FwYWxpYXMJVVAJa3UJWEVOSVgJa2N1dTEKK2NhcGFsaWFzCUc2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VMQ09STkVSCitjYXBhbGlhcwlHNwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MTENPUk5FUgorY2FwYWxpYXMJRzUJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVVJDT1JORVIKK2NhcGFsaWFzCUc4CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xSQ09STkVSCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MVEVFCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19SVEVFCitjYXBhbGlhcwlHdQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19CVEVFCitjYXBhbGlhcwlHZAlJR05PUkUJWEVOSVgJZG91YmxlIEFDU19UVEVFCitjYXBhbGlhcwlHaAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19ITElORQorY2FwYWxpYXMJR3YJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVkxJTkUKK2NhcGFsaWFzCUdjCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1BMVVMKK2NhcGFsaWFzCUdHCUlHTk9SRQlYRU5JWAlhY3MtZ2xpdGNoCisjCisjIElCTSBleHRlbnNpb25zOgorIworY2FwYWxpYXMJa3EJJTEJSUJNCWtleV9oZWxwCisjCisjIElyaXMgZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUhTCW1oCUlSSVMJZW50ZXJfZGltX21vZGUKKyMKKyMgVGVrdHJvbml4IGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlLQQlrOwlUZWsJa2V5X2YxMAorY2FwYWxpYXMJS0IJRjEJVGVrCWtleV9mMTEKK2NhcGFsaWFzCUtDCUYyCVRlawlrZXlfZjEyCitjYXBhbGlhcwlLRAlGMwlUZWsJa2V5X2YxMworY2FwYWxpYXMJS0UJRjQJVGVrCWtleV9mMTQKK2NhcGFsaWFzCUtGCUY1CVRlawlrZXlfZjE1CitjYXBhbGlhcwlCQwlTYglUZWsJc2V0X2JhY2tncm91bmQKK2NhcGFsaWFzCUZDCVNmCVRlawlzZXRfZm9yZWdyb3VuZAorIworIyBUaGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nOgorIworIwlYRU5JWAlYRU5JWCB2YXJpYWJsZSBuYW1lCW5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbz8KKyMJLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCUNMCWtleV9jaGFyX2xlZnQKKyMJQ1IJa2V5X2NoYXJfcmlnaHQKKyMJQ1cJa2V5X2NoYW5nZV93aW5kb3cKKyMJSFAJPz8KKyMJTEYJa2V5X2xpbmVmZWVkIAkJbGFiZWxfb2ZmCisjCU5VCWtleV9uZXh0X3VubG9ja2VkX2NlbGwKKyMJUEwJPz8KKyMJUFIJPz8KKyMJUkMJa2V5X3JlY2FsYwkJcmVtb3ZlX2Nsb2NrCisjCVJGCWtleV90b2dnbGVfcmVmCQlyZXFfZm9yX2lucHV0CisjCVdMCWtleV93b3JkX2xlZnQKKyMJV1IJa2V5X3dvcmRfcmlnaHQKKyMKKyMgSWYgeW91IGtub3cgd2hhdCBhbnkgb2YgdGhlIHF1ZXN0aW9uLW1hcmtlZCBvbmVzIG1lYW4sIHBsZWFzZSB0ZWxsIHVzLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtaW5mbyBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2luZm9hbGlhcwlmb250MAlzMGRzCUlCTQlzZXQwX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MQlzMWRzCUlCTQlzZXQxX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MglzMmRzCUlCTQlzZXQyX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MwlzM2RzCUlCTQlzZXQzX2Rlc19zZXEKK2luZm9hbGlhcwlrYnRhYglrY2J0CUlCTQlrZXlfYmFja3RhYgoraW5mb2FsaWFzCWtzZWwJa3NsdAlJQk0Ja2V5X3NlbGVjdAorIworIyBTb21lIG90aGVycyBhcmUgaWRlbnRpY2FsIHRvIFNWcjQvWFBHNCBjYXBhYmlsaXRpZXMsIGluIHBhcnRpY3VsYXI6CisjIGtjbWQsIGtlbmQsIGtobHAsIGFuZCBrZjExLi4ua2Y2My4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyB0cnVuY2F0ZS1saW5lczp0CisjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvQ2Fwcy5vc2YxcjUgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL0NhcHMub3NmMXI1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZWE1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL0NhcHMub3NmMXI1CkBAIC0wLDAgKzEsMTI3NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBEaWNrZXkKKyMKKyMgJElkOiBDYXBzLm9zZjFyNSx2IDEuNCAyMDA2LzA1LzI3IDE1OjMzOjA0IHRvbSBFeHAgJAorIworIyBUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgbmN1cnNlcycgdGVybWNhcC90ZXJtaW5mbyBjYXBhYmlsaXR5IHRhYmxlLCB3aGljaAorIyBpcyBkZXNpZ25lZCB0byBhbGlnbiB3aXRoIE9TRi8xIHZlcnNpb24gNSAoVHJ1NjQpIHRlcm1pbmZvLgorIworIyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgaW5pdGlhbGl6ZXJzIGZvciB0YWJsZXMgdGhhdCBkcml2ZSB0aWMsCisjIGluZm9jbXAsIGFuZCB0aGUgbGlicmFyeSBjb21waWxhdGlvbiBjb2RlIHVzZWQgdG8gc3VwcG9ydCB0aGUgdGVybWNhcCAKKyMgY29tcGF0aWJpbGl0eSBoYWNrLiAgSXQgaXMgYWxzbyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0YWJ1bGFyIHBvcnRpb24gb2YgdGhlCisjIHRlcm1pbmZvKDUpIG1hbiBwYWdlOyBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgIyUnIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBiZWNvbWUKKyMgdGhlIHRlcm1pbmZvIHRhYmxlLgorIworIyBUaGlzIGZpbGUgaGFzIHRocmVlIG1ham9yIHNlY3Rpb25zOyBhIHN0YW5kYXJkLWNhcGFiaWxpdGllcyB0YWJsZSwgdHdvCisjIGV4dGVuc2lvbi1jYXBhYmlsaXR5IHRhYmxlcywgYW5kIGEgc2VjdGlvbiBvZiBhbGlhc2VzIGRlY2xhcmF0aW9ucy4KKyMgVGhlIGZpcnN0IHR3byBoYXZlIHRoZSBzYW1lIGZvcm1hdCwgYXMgZm9sbG93czoKKyMKKyMgRklMRSBGT1JNQVQKKyMKKyMgQ29sdW1uIDE6IHRlcm1pbmZvIHZhcmlhYmxlIG5hbWUKKyMgQ29sdW1uIDI6IHRlcm1pbmZvIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gMzogY2FwYWJpbGl0eSB0eXBlIChib29sZWFuLCBudW1lcmljLCBvciBzdHJpbmcpCisjIENvbHVtbiA0OiB0ZXJtY2FwIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gNTogS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDY6IHZhbHVlIGZvciBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNzogTGVhZCB3aXRoIGBZJyBpZiBjYXBhYmlsaXR5IHNob3VsZCBiZSBlbWl0dGVkIGluIHRlcm1jYXAKKyMgICAgICAgICAgIHRyYW5zbGF0aW9ucywgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gODogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbgorIworIyBUaGUgY29kZXMgZm9sbG93aW5nIFtZLV0gaW4gY29sdW1uIDcgZGVzY3JpYmUgdGhlIHZlcnNpb25zIG9mIHRlcm1jYXAgd2hpY2gKKyMgdXNlIHRoZSBnaXZlbiBjYXBhYmlsaXR5LiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgdXNlZCBieSB0aGUgY3Vyc2VzIGxpYnJhcnkKKyMgcHJvcGVyOyByYXRoZXIsIGl0J3MgdGhlcmUgdG8gaGVscCB0aGUgdGVybWluZm8gbWFpbnRhaW5lciBhdm9pZCBlbWl0dGluZworIyB0ZXJtY2FwIGVudHJ5IHRyYW5zbGF0aW9ucyB0aGF0IGFyZSBtb3JlIHRoYW4gMTAyMyBieXRlcyBsb25nIChhbmQgdGFuayBhCisjIGxvdCBvZiBvbGQgdGVybWNhcC11c2luZyBwcm9ncmFtcykuICBUaGUgY29kZXMgcmVhZCBhcyBmb2xsb3dzOgorIwlCID0gbWVudGlvbmVkIGluIHRoZSBCU0QgbWFuIHBhZ2UgZm9yIDQuNEJTRCBjdXJzZXMKKyMJQyA9IHVzZWQgYnkgdGhlIDQuNEJTRCBjdXJzZXMgbGlicmFyeQorIwlHID0gbWVudGlvbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBHTlUgdGVybWNhcAorIwlFID0gdXNlZCBieSBHTlUgRW1hY3MKKyMJSyA9IHJlbW92ZSB0aGlzIHRlcm1pbmZvIGNhcGFiaWxpdHkgd2hlbiB0cmFuc2xhdGluZyB0byBzdGFuZGFyZCBmb3JtYXQKKyMgVGhlIGltcG9ydGFudCBjb2RlcyBhcmUgQyBhbmQgRS4gIEEgY2FwIHdpdGggQyBvciBFIHNob3VsZCBiZSBwcmVzZXJ2ZWQgaW4KKyMgdHJhbnNsYXRpb24gaWYgcG9zc2libGUuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHByZXNlcnZpbmcgYWxsIHN1Y2ggY2FwcyBtYXkKKyMgbGVhZCB0byBzb21lIHRlcm1jYXAgdHJhbnNsYXRpb25zIGJlaW5nIHRvbyBsb25nLiAgVGhlIHRlcm1jYXAgbWFpbnRhaW5lcgorIyBoYXMgYSBiaXQgb2YgYSBqdWdnbGluZyBhY3QgdG8gZG8uLi5wb3RlbnRpYWwgcHJvYmxlbSBjYXNlcyBhcmUgbWFya2VkIHdpdGgKKyMgYW4gYXN0ZXJpc2sgKCopLgorIworIyBUaGUgYWxpYXNlcyBzZWN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyMKKyMgQ29sdW1uIDE6IGVpdGhlciBgY2FwYWxpYXMnIG9yIGBpbmZvYWxpYXMnCisjIENvbHVtbiAyOiBuYW1lIHRvIGJlIGFsaWFzZWQKKyMgQ29sdW1uIDM6IHdoYXQgbmFtZSBpdCBzaG91bGQgdHJhbnNsYXRlIHRvLiAgVGhlIG5hbWUgSUdOT1JFIG1lYW5zIGl0CisjICAgICAgICAgICBzaG91bGQgYmUgZGlzY2FyZGVkIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuCisjIENvbHVtbiA0OiBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2V0ICh1c2VkIGZvciBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzKQorIyBDb2x1bW4gNTogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbiAodXN1YWxseSBhbiBhc3NvY2lhdGVkIHRlcm1pbmZvIHZhcmlhYmxlKQorIworIyBIQU5ETElORyBURVJNQ0FQIEFORCBURVJNSU5GTyBFWFRFTlNJT05TCisjCisjIFRoZXJlIGFyZSBiYXNpY2FsbHkgZml2ZSBkaWZmZXJlbnQgd2F5cyB0byBoYW5kbGUgdGVybWNhcCBhbmQgdGVybWluZm8KKyMgZXh0ZW5zaW9uczoKKyMKKyMgMS4gRG9uJ3QgbGlzdCB0aGUgY2FwbmFtZSBoZXJlLCBvciBsaXN0IGl0IGJ1dCBjb21tZW50IGl0IG91dCAodGhlIGxhdHRlcgorIyBpcyBwcmVmZXJhYmxlOyBzb21lb25lIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIGl0IGluIHRoZSBmdXR1cmUpLiAgSWYgeW91IGRvCisjIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgdHJlYXRlZCBhcyB1bmtub3duIGFuZCByYWlzZSBhIHdhcm5pbmcgZnJvbQorIyB0aGUgY29tcGlsZXIuCisjCisjIDIuIEFsaWFzIGl0LiAgVGhpcyBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgY2FwYWJpbGl0eSBoYXMgdGhlIHNhbWUgbWVhbmluZworIyBhcyBhbiBhbHJlYWR5LXN1cHBvcnRlZCBvbmUuICBUaGUgY29tcGlsZXIgd2lsbCBoYW5kbGUgYWxpYXNpbmcsIGVtaXR0aW5nCisjIGFuIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB3aGVuZXZlciBhbiBhbGlhcyBmaXJlcy4KKyMKKyMgMy4gTGlzdCBpdCBpbiB0aGUgc3RhbmRhcmQgdGFibGUuICBZb3UgYWxtb3N0IGNlcnRhaW5seSBkbyAqbm90KiB3YW50CisjIHRvIGRvIHRoaXMgLS0gdGhlIGNhcGFiaWxpdGllcyBpbiB0aGF0IG9uZSwgYW5kIHRoZWlyIG9yZGVyLCBoYXZlIGJlZW4KKyMgY2FyZWZ1bGx5IGNob3NlbiB0byBiZSBTVnI0LWJpbmFyeS1jb21wYXRpYmxlIHdoZW4gdGhleSdyZSB3cml0dGVuIG91dAorIyBhcyBhIHRlcm1pbmZvIG9iamVjdCwgYW5kIGJyZWFraW5nIHRoaXMgd291bGQgYmUgYmFkLiAgSXQncyB1cCB0aGUgbmN1cnNlcworIyBsaWJyYXJ5IHdoYXQgdG8gZG8gd2l0aCB0aGUgdGVybWluZm8gZGF0YSBhZnRlciBpdCdzIHJlYWQgaW4uCisjCisjIDQuIExpc3QgaXQgaW4gdGhlIGFsaWFzZXMgdGFibGUgd2l0aCBhbiBJR05PUkUgdGFyZ2V0IGZpZWxkLiAgSWYgeW91CisjIGRvIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZCBvbiBpbnB1dCAodGhvdWdoIHRoZSB1c2VyIHdpbGwKKyMgZ2V0IGEgd2FybmluZyBtZXNzYWdlIGFib3V0IGl0KS4KKyMKKyMgNS4gTGlzdCBpdCBpbiB0aGUgZXh0ZW5zaW9ucyB0YWJsZS4gSWYgeW91IGRvIHRoaXMsIHRoZSBjb21waWxlciB3aWxsCisjIHNpbGVudGx5IGFjY2VwdCB0aGUgY2FwYWJpbGl0eSwgYnV0IHRoZSBjdXJzZXMgbGlicmFyeSBwcm9wZXIgd2lsbCBuZXZlcgorIyBzZWUgaXQgKGJlY2F1c2UgaXQgd29uJ3QgYmUgd3JpdHRlbiBvdXQgYXMgcGFydCBvZiB0aGUgdGVybWluZm8gb2JqZWN0CisjIGZvcm1hdCkuICBJdCdzIHVwIHRvIHlvdSB3aGF0IHlvdSBoYXZlIHRoZSBjb21waWxlciBkbyB3aXRoIGl0LgorIworIyBUaGVyZSBhcmUgdHdvIG9wcG9zaXRlIHJlYXNvbnMgdG8gY2hvb3NlIG9wdGlvbiA1LiAgT25lIGlzIHdoZW4geW91IHdhbnQKKyMgdG8gZWF0IHRoZSBjYXBhYmlsaXR5IHNpbGVudGx5IGFuZCBkaXNjYXJkIGl0IHdoZW4gZG9pbmcgdHJhbnNsYXRpb25zCisjIHRvIHRlcm1pbmZvIHdpdGggdGljIC1JLiAgU29tZSB2ZXJ5IG9sZCBvYnNvbGV0ZSBCU0QgY2FwcyBsaWtlIDprbjogYXJlCisjIGluIHRoaXMgY2xhc3MuICBOb3RoaW5nIHdpbGwgZXZlciB1c2UgdGhlbSBhZ2Fpbi4KKyMKKyMgTW9yZSB1c3VhbGx5LCB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gdHJ5IHRvIGRlZHVjZSBzb21ldGhpbmcgZnJvbSB0aGUKKyMgY2FwYWJpbGl0eSB2YWx1ZSB0aGF0IGl0IGNhbiB1c2UgdG8gdHJhbnNsYXRlIGl0IGludG8geW91ciBvdXRwdXQgZm9ybWF0LgorIyBZb3UnbGwgbmVlZCB0byB3cml0ZSBjdXN0b20gY29kZSwgcHJvYmFibHkgaW4gcG9zdHByb2Nlc3NfdGVybWNhcCgpIG9yCisjIHBvc3Rwcm9jZXNzX3Rlcm1pbmZvKCksIHRvIGhhbmRsZSB0aGUgdHJhbnNsYXRpb24uCisjCisjIENPTlRST0xMSU5HIEVOVFJZIExFTkdUSCAKKyMKKyMgTm90ZXMgb24gc3BlY2lmaWMgZWxpc2lvbnMgbWFkZSB0byBmaXQgdHJhbnNsYXRpb25zIHdpdGhpbiAxMDIzIGJ5dGVzOgorIworIyBNYWNoaW5lcyB3aXRoIElCTSBQQy1saWtlIGtleWJvYXJkcyB3YW50IHRvIGJlIGFibGUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcKKyMga2V5czoga2V5X25wYWdlLCBrZXlfcHBhZ2UsIGtleV9ob21lLCBrZXlfbGwgKHdoaWNoIGlzIHVzZWQgZm9yIGluIHRlcm1jYXAtCisjIG9ubHkgZW52aXJvbm1lbnRzIGZvciBFbmQgb3IgSG9tZS1Eb3duKSwga2V5X2RjLCBhbmQga2V5X2ljLiAgVGhpcyBpcyBhbHNvCisjIHRoZSBzZXQgb2Yga2V5cyB0aGUgYGpvZScgZWRpdG9yIHdpbGwgYmUgdXBzZXQgaWYgaXQgY2FuJ3Qgc2VlLiAgU28gZG9uJ3QgCisjIHRyaW0gdGhvc2Ugb3V0IG9mIHRoZSBzZXQgdG8gYmUgdHJhbnNsYXRlZCB0byB0ZXJtY2FwLCBvciB2YXJpb3VzIHVzZXJzIG9mCisjIHRoZSB0ZXJtY2FwIGZpbGUgd2lsbCBiZWNvbWUgaXJhdGUuCisjCisjIEl0IG1pZ2h0IGxvb2sgdGVtcHRpbmcgdG8gbGVhdmUgdGhvc2UgbG9uZyBpbml0IHN0cmluZ3Mgb3V0IG9mIHRyYW5zbGF0aW9ucy4KKyMgV2UgY2FuJ3QgZG8gaXQgKHlldCk7IDQuNEJTRCB0cHV0IGFuZCB0c2V0IHVzZSB0aGVtLgorIworIyBXZSByZXRhaW4gdGhlIHNnciBjYXBhYmlsaXR5IGluIHRyYW5zbGF0aW9uIGluIHNwaXRlIG9mIHRoZSBmYWN0IHRoYXQgbmVpdGhlcgorIyA0LjRCU0Qgbm9yIEdOVSBFbWFjcyB1c2VzIGl0LCBiZWNhdXNlIChhKSBzb21lIGVudHJ5IG5hbWluZyBkaXN0aW5jdGlvbnMgYXJlCisjIGhhcmQgdG8gdW5kZXJzdGFuZCB3aXRob3V0IGl0LCBhbmQgKGIpIHRoZSBlbnRyaWVzIGluIHdoaWNoIGl0IGlzIGxvbmcgdGVuZAorIyB0byBiZSBvbGRlciB0eXBlcyB0aGF0IGRvbid0IHVzZSB1cCBhIGxvdCBvZiBzdHJpbmcgc3BhY2Ugb24gZnVuY3Rpb24ga2V5cy4KKyMgVGhlIHRpYygxKSB0cmFuc2xhdGlvbiBjb2RlIHdpbGwgY29tcGxhaW4gYW5kIGVsaWRlIGl0IGlmIGl0IG1ha2VzIGEgY3JpdGljYWwKKyMgZGlmZmVyZW5jZSAodGhlcmUgaXMgc3BlY2lhbCBjb2RlIGluIHRpYyB0byByZWNvZ25pemUgdGhpcyBzaXR1YXRpb24pLgorIworIyBZZXMsIEJTRCB0c2V0KDEpIHVzZXMgaHBhLiAgV2UgZWxpZGUgaHBhL3ZwYSBhbnl3YXkgYmVjYXVzZSB0aGUgbW90aW9uCisjIG9wdGltaXplciBpbiBCU0QgY3Vyc2VzIGRpZG4ndCB1c2UgdGhlbS4gIFRoaXMgb21pc3Npb24gc2VlbXMgdG8gYmUgdGhlCisjIHNpbmdsZSBtb3N0IGVmZmVjdGl2ZSBvbmUsIGl0IHNob3J0ZW5lZCB0aGUgcmVzb2x2ZWQgbGVuZ3RoIG9mIGFsbCB0aGlydGVlbgorIyBwcm9ibGVtIGVudHJpZXMgaW4gdGhlIDkuOS4wIHZlcnNpb24gb2YgdGhlIHRlcm1pbmZvIG1hc3RlciBiZWxvdyBjcml0aWNhbC4KKyMKKyMgSXQgd291bGQgYmUgbmljZSB0byBrZWVwIGYxMSBhbmQgZjEyIGZvciBFbWFjcyB1c2UsIGJ1dCBhIGNvdXBsZSBvZiB0ZXJtY2FwCisjIHRyYW5zbGF0aW9ucyBnbyBiYWNrIG92ZXIgY3JpdGljYWwgaWYgd2UgZG8gdGhpcy4gIEFzIDQuNEJTRCBjdXJzZXMgZmFkZXMKKyMgaW50byBoaXN0b3J5IGFuZCBHTlUgdGVybWNhcCdzIGFwcGxpY2F0aW9uIGJhc2Ugc2hyaW5rcyB0b3dhcmRzIGJlaW5nIEdOVSAKKyMgRW1hY3Mgb25seSwgd2UnbGwgcHJvYmFibHkgZWxpZGUgb3V0IHNvbWUgQlNELW9ubHkgY2FwYWJpbGl0aWVzIGluIG9yZGVyCisjIHRvIGJ1eSBzcGFjZSBmb3Igbm9uLWVzc2VudGlhbHMgRW1hY3MgaXMgc3RpbGwgdXNpbmcuICBDYXBhYmlsaXRpZXMgaGlnaAorIyBvbiB0aGF0IGhpdCBsaXN0OiByYywgc2MsIHVjLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgU1RBTkRBUkQgQ0FQQUJJTElUSUVTCisjCisjJVRoZSBmb2xsb3dpbmcgaXMgYSBjb21wbGV0ZSB0YWJsZSBvZiB0aGUgY2FwYWJpbGl0aWVzIGluY2x1ZGVkIGluIGEKKyMldGVybWluZm8gZGVzY3JpcHRpb24gYmxvY2sgYW5kIGF2YWlsYWJsZSB0byB0ZXJtaW5mby11c2luZyBjb2RlLiAgSW4gZWFjaAorIyVsaW5lIG9mIHRoZSB0YWJsZSwKKyMlCisjJVRoZSBcZkJ2YXJpYWJsZVxmUiBpcyB0aGUgbmFtZSBieSB3aGljaCB0aGUgcHJvZ3JhbW1lciAoYXQgdGhlIHRlcm1pbmZvIGxldmVsKQorIyVhY2Nlc3NlcyB0aGUgY2FwYWJpbGl0eS4KKyMlCisjJVRoZSBcZkJjYXBuYW1lXGZSIGlzIHRoZSBzaG9ydCBuYW1lIHVzZWQgaW4gdGhlIHRleHQgb2YgdGhlIGRhdGFiYXNlLAorIyVhbmQgaXMgdXNlZCBieSBhIHBlcnNvbiB1cGRhdGluZyB0aGUgZGF0YWJhc2UuCisjJVdoZW5ldmVyIHBvc3NpYmxlLCBjYXBuYW1lcyBhcmUgY2hvc2VuIHRvIGJlIHRoZSBzYW1lIGFzIG9yIHNpbWlsYXIgdG8KKyMldGhlIEFOU0kgWDMuNjQtMTk3OSBzdGFuZGFyZCAobm93IHN1cGVyc2VkZWQgYnkgRUNNQS00OCwgd2hpY2ggdXNlcyAKKyMlaWRlbnRpY2FsIG9yIHZlcnkgc2ltaWxhciBuYW1lcykuICBTZW1hbnRpY3MgYXJlIGFsc28gaW50ZW5kZWQgdG8gbWF0Y2gKKyMldGhvc2Ugb2YgdGhlIHNwZWNpZmljYXRpb24uCisjJQorIyVUaGUgdGVybWNhcCBjb2RlIGlzIHRoZSBvbGQKKyMlLkIgdGVybWNhcAorIyVjYXBhYmlsaXR5IG5hbWUgKHNvbWUgY2FwYWJpbGl0aWVzIGFyZSBuZXcsIGFuZCBoYXZlIG5hbWVzIHdoaWNoIHRlcm1jYXAKKyMlZGlkIG5vdCBvcmlnaW5hdGUpLgorIyUuUAorIyVDYXBhYmlsaXR5IG5hbWVzIGhhdmUgbm8gaGFyZCBsZW5ndGggbGltaXQsIGJ1dCBhbiBpbmZvcm1hbCBsaW1pdCBvZiA1CisjJWNoYXJhY3RlcnMgaGFzIGJlZW4gYWRvcHRlZCB0byBrZWVwIHRoZW0gc2hvcnQgYW5kIHRvIGFsbG93IHRoZSB0YWJzIGluCisjJXRoZSBzb3VyY2UgZmlsZQorIyUuQiBDYXBzCisjJXRvIGxpbmUgdXAgbmljZWx5LgorIyUKKyMlRmluYWxseSwgdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGF0dGVtcHRzIHRvIGNvbnZleSB0aGUgc2VtYW50aWNzIG9mIHRoZQorIyVjYXBhYmlsaXR5LiAgWW91IG1heSBmaW5kIHNvbWUgY29kZXMgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkOgorIyUuVFAKKyMlKFApCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IGJlIHNwZWNpZmllZAorIyUuVFAKKyMlI1sxLTldCisjJWluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyaW5nIGlzIHBhc3NlZCB0aHJvdWdoIHRwYXJtIHdpdGgKKyMlcGFybXMgYXMgZ2l2ZW4gKCNcZklpXGZQKS4KKyMlLlRQCisjJShQKikKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgdmFyeSBpbiBwcm9wb3J0aW9uIHRvIHRoZSBudW1iZXIgb2YKKyMlbGluZXMgYWZmZWN0ZWQKKyMlLlRQCisjJSgjXGRcZklpXGZQXHUpCisjJWluZGljYXRlcyB0aGUgXGZJaVxmUFx1dGhcZCBwYXJhbWV0ZXIuCisjJQorIyUuUFAKKyMlIFRoZXNlIGFyZSB0aGUgYm9vbGVhbiBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCQm9vbGVhbnMJbmFtZQlDb2RlXGZSCithdXRvX2xlZnRfbWFyZ2luCQlidwlib29sCWJ3CS0JLQlZQi1HLQljdWIxIHdyYXBzIGZyb20gY29sdW1uIDAgdG8gbGFzdCBjb2x1bW4KK2F1dG9fcmlnaHRfbWFyZ2luCQlhbQlib29sCWFtCS0JLQlZQkNHRQl0ZXJtaW5hbCBoYXMgYXV0b21hdGljIG1hcmdpbnMKK25vX2VzY19jdGxjCQkJeHNiCWJvb2wJeGIJLQktCVlCQ0ctCWJlZWhpdmUgKGYxPWVzY2FwZSwgZjI9Y3RybCBDKQorY2VvbF9zdGFuZG91dF9nbGl0Y2gJCXhocAlib29sCXhzCS0JLQlZQkNHRQlzdGFuZG91dCBub3QgZXJhc2VkIGJ5IG92ZXJ3cml0aW5nIChocCkKK2VhdF9uZXdsaW5lX2dsaXRjaAkJeGVubAlib29sCXhuCS0JLQlZQkNHRQluZXdsaW5lIGlnbm9yZWQgYWZ0ZXIgODAgY29scyAoY29uY2VwdCkKK2VyYXNlX292ZXJzdHJpa2UJCWVvCWJvb2wJZW8JLQktCVlCQ0ctCWNhbiBlcmFzZSBvdmVyc3RyaWtlcyB3aXRoIGEgYmxhbmsKK2dlbmVyaWNfdHlwZQkJCWduCWJvb2wJZ24JLQktCVlCLUctCWdlbmVyaWMgbGluZSB0eXBlCitoYXJkX2NvcHkJCQloYwlib29sCWhjCS0JLQlZQkNHLQloYXJkY29weSB0ZXJtaW5hbAoraGFzX21ldGFfa2V5CQkJa20JYm9vbAlrbQktCS0JWUItR0UJSGFzIGEgbWV0YSBrZXkgKGkuZS4sIHNldHMgOHRoLWJpdCkKK2hhc19zdGF0dXNfbGluZQkJCWhzCWJvb2wJaHMJLQktCVlCLUctCWhhcyBleHRyYSBzdGF0dXMgbGluZQoraW5zZXJ0X251bGxfZ2xpdGNoCQlpbglib29sCWluCS0JLQlZQkNHRQlpbnNlcnQgbW9kZSBkaXN0aW5ndWlzaGVzIG51bGxzCittZW1vcnlfYWJvdmUJCQlkYQlib29sCWRhCS0JLQlZQkNHLQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBhYm92ZSB0aGUgc2NyZWVuCittZW1vcnlfYmVsb3cJCQlkYglib29sCWRiCS0JLQlZQi1HRQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBiZWxvdyB0aGUgc2NyZWVuCittb3ZlX2luc2VydF9tb2RlCQltaXIJYm9vbAltaQktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIGluc2VydCBtb2RlCittb3ZlX3N0YW5kb3V0X21vZGUJCW1zZ3IJYm9vbAltcwktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIHN0YW5kb3V0IG1vZGUKK292ZXJfc3RyaWtlCQkJb3MJYm9vbAlvcwktCS0JWUJDRy0JdGVybWluYWwgY2FuIG92ZXJzdHJpa2UKK3N0YXR1c19saW5lX2VzY19vawkJZXNsb2sJYm9vbAllcwktCS0JWUItRy0JZXNjYXBlIGNhbiBiZSB1c2VkIG9uIHRoZSBzdGF0dXMgbGluZQorZGVzdF90YWJzX21hZ2ljX3Ntc28JCXh0CWJvb2wJeHQJLQktCVlCQ0dFCXRhYnMgZGVzdHJ1Y3RpdmUsIG1hZ2ljIHNvIGNoYXIgKHQxMDYxKQordGlsZGVfZ2xpdGNoCQkJaHoJYm9vbAloegktCS0JWUItR0UJY2Fubm90IHByaW50IH4ncyAoaGF6ZWx0aW5lKQordHJhbnNwYXJlbnRfdW5kZXJsaW5lCQl1bAlib29sCXVsCS0JLQlZQkNHRQl1bmRlcmxpbmUgY2hhcmFjdGVyIG92ZXJzdHJpa2VzCit4b25feG9mZgkJCXhvbglib29sCXhvCS0JLQlZQi0tLQl0ZXJtaW5hbCB1c2VzIHhvbi94b2ZmIGhhbmRzaGFraW5nCitiYWNrX2NvbG9yX2VyYXNlCQliY2UJYm9vbAl1dAktCS0JLS0tLS0Jc2NyZWVuIGVyYXNlZCB3aXRoIGJhY2tncm91bmQgY29sb3IKK2Nhbl9jaGFuZ2UJCQljY2MJYm9vbAljYwktCS0JLS0tLS0JdGVybWluYWwgY2FuIHJlLWRlZmluZSBleGlzdGluZyBjb2xvcnMKK2NvbF9hZGRyX2dsaXRjaAkJCXhocGEJYm9vbAlZQQktCS0JLS0tLS0Jb25seSBwb3NpdGl2ZSBtb3Rpb24gZm9yIGhwYS9taHBhIGNhcHMKK2NwaV9jaGFuZ2VzX3JlcwkJCWNwaXgJYm9vbAlZRgktCS0JLS0tLS0JY2hhbmdpbmcgY2hhcmFjdGVyIHBpdGNoIGNoYW5nZXMgcmVzb2x1dGlvbgorY3JfY2FuY2Vsc19taWNyb19tb2RlCQljcnhtCWJvb2wJWUIJLQktCS0tLS0tCXVzaW5nIGNyIHR1cm5zIG9mZiBtaWNybyBtb2RlCitoYXJkX2N1cnNvcgkJCWNodHMJYm9vbAlIQwktCS0JLS0tLS0JY3Vyc29yIGlzIGhhcmQgdG8gc2VlCitoYXNfcHJpbnRfd2hlZWwJCQlkYWlzeQlib29sCVlDCS0JLQktLS0tLQlwcmludGVyIG5lZWRzIG9wZXJhdG9yIHRvIGNoYW5nZSBjaGFyYWN0ZXIgc2V0CitodWVfbGlnaHRuZXNzX3NhdHVyYXRpb24JaGxzCWJvb2wJaGwJLQktCS0tLS0tCXRlcm1pbmFsIHVzZXMgb25seSBITFMgY29sb3Igbm90YXRpb24gKFRla3Ryb25peCkKK2xwaV9jaGFuZ2VzX3JlcwkJCWxwaXgJYm9vbAlZRwktCS0JLS0tLS0JY2hhbmdpbmcgbGluZSBwaXRjaCBjaGFuZ2VzIHJlc29sdXRpb24KK25lZWRzX3hvbl94b2ZmCQkJbnhvbglib29sCW54CS0JLQktLS0tLQlwYWRkaW5nIHdpbGwgbm90IHdvcmssIHhvbi94b2ZmIHJlcXVpcmVkCitub25fZGVzdF9zY3JvbGxfcmVnaW9uCQluZHNjcglib29sCU5ECS0JLQktLS0tLQlzY3JvbGxpbmcgcmVnaW9uIGlzIG5vbi1kZXN0cnVjdGl2ZQorbm9uX3Jldl9ybWN1cAkJCW5ycm1jCWJvb2wJTlIJLQktCS0tLS0tCXNtY3VwIGRvZXMgbm90IHJldmVyc2Ugcm1jdXAKK25vX3BhZF9jaGFyCQkJbnBjCWJvb2wJTlAJLQktCS0tLS0tCXBhZCBjaGFyYWN0ZXIgZG9lcyBub3QgZXhpc3QKK3BydHJfc2lsZW50CQkJbWM1aQlib29sCTVpCS0JLQktLS0tLQlwcmludGVyIHdpbGwgbm90IGVjaG8gb24gc2NyZWVuCityb3dfYWRkcl9nbGl0Y2gJCQl4dnBhCWJvb2wJWUQJLQktCS0tLS0tCW9ubHkgcG9zaXRpdmUgbW90aW9uIGZvciB2cGEvbXZwYSBjYXBzCitzZW1pX2F1dG9fcmlnaHRfbWFyZ2luCQlzYW0JYm9vbAlZRQktCS0JLS0tLS0JcHJpbnRpbmcgaW4gbGFzdCBjb2x1bW4gY2F1c2VzIGNyCisjJS5URQorIyUuYWQKKyMlCisjJVRoZXNlIGFyZSB0aGUgbnVtZXJpYyBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCTnVtZXJpYwluYW1lCUNvZGVcZlIKK2NvbHVtbnMJCQkJY29scwludW0JY28JLQktCVlCQ0dFCW51bWJlciBvZiBjb2x1bW5zIGluIGEgbGluZQoraW5pdF90YWJzCQkJaXQJbnVtCWl0CS0JLQlZQi1HLQl0YWJzIGluaXRpYWxseSBldmVyeSAjIHNwYWNlcworbGluZXMJCQkJbGluZXMJbnVtCWxpCS0JLQlZQkNHRQludW1iZXIgb2YgbGluZXMgb24gc2NyZWVuIG9yIHBhZ2UKK2xpbmVzX29mX21lbW9yeQkJCWxtCW51bQlsbQktCS0JWUItRy0JbGluZXMgb2YgbWVtb3J5IGlmID4gbGluZS4gMCBtZWFucyB2YXJpZXMKK21hZ2ljX2Nvb2tpZV9nbGl0Y2gJCXhtYwludW0Jc2cJLQktCVlCQ0dFCW51bWJlciBvZiBibGFuayBjaGFyYWN0ZXJzIGxlZnQgYnkgc21zbyBvciBybXNvCitwYWRkaW5nX2JhdWRfcmF0ZQkJcGIJbnVtCXBiCS0JLQlZQi1HRQlsb3dlc3QgYmF1ZCByYXRlIHdoZXJlIHBhZGRpbmcgbmVlZGVkCit2aXJ0dWFsX3Rlcm1pbmFsCQl2dAludW0JdnQJLQktCVlCLS0tCXZpcnR1YWwgdGVybWluYWwgbnVtYmVyIChDQi91bml4KQord2lkdGhfc3RhdHVzX2xpbmUJCXdzbAludW0Jd3MJLQktCVlCLUctCW51bWJlciBvZiBjb2x1bW5zIGluIHN0YXR1cyBsaW5lCitiaXRfaW1hZ2VfZW50d2luaW5nCQliaXR3aW4JbnVtCVlvCS0JLQktLS0tLQludW1iZXIgb2YgcGFzc2VzIGZvciBlYWNoIGJpdC1pbWFnZSByb3cKK2JpdF9pbWFnZV90eXBlCQkJYml0eXBlCW51bQlZcAktCS0JLS0tLS0JdHlwZSBvZiBiaXQtaW1hZ2UgZGV2aWNlCitidWZmZXJfY2FwYWNpdHkJCQlidWZzegludW0JWWEJLQktCS0tLS0tCW51bWJlcnMgb2YgYnl0ZXMgYnVmZmVyZWQgYmVmb3JlIHByaW50aW5nCitidXR0b25zCQkJCWJ0bnMJbnVtCUJUCS0JLQktLS0tLQludW1iZXIgb2YgYnV0dG9ucyBvbiBtb3VzZQorZG90X3ZlcnRfc3BhY2luZwkJc3BpbnYJbnVtCVliCS0JLQktLS0tLQlzcGFjaW5nIG9mIHBpbnMgdmVydGljYWxseSBpbiBwaW5zIHBlciBpbmNoCitkb3RfaG9yel9zcGFjaW5nCQlzcGluaAludW0JWWMJLQktCS0tLS0tCXNwYWNpbmcgb2YgZG90cyBob3Jpem9udGFsbHkgaW4gZG90cyBwZXIgaW5jaAorbGFiZWxfaGVpZ2h0CQkJbGgJbnVtCWxoCS0JLQktLS0tLQlyb3dzIGluIGVhY2ggbGFiZWwKK2xhYmVsX3dpZHRoCQkJbHcJbnVtCWx3CS0JLQktLS0tLQljb2x1bW5zIGluIGVhY2ggbGFiZWwKK21heF9hdHRyaWJ1dGVzCQkJbWEJbnVtCW1hCS0JLQlZQkMtLQltYXhpbXVtIGNvbWJpbmVkIGF0dHJpYnV0ZXMgdGVybWluYWwgY2FuIGhhbmRsZQorbWF4X2NvbG9ycwkJCWNvbG9ycwludW0JQ28JLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGNvbG9ycyBvbiBzY3JlZW4KK21heF9taWNyb19hZGRyZXNzCQltYWRkcgludW0JWWQJLQktCS0tLS0tCW1heGltdW0gdmFsdWUgaW4gbWljcm9fLi4uX2FkZHJlc3MKK21heF9taWNyb19qdW1wCQkJbWp1bXAJbnVtCVllCS0JLQktLS0tLQltYXhpbXVtIHZhbHVlIGluIHBhcm1fLi4uX21pY3JvCittYXhfcGFpcnMJCQlwYWlycwludW0JcGEJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGNvbG9yLXBhaXJzIG9uIHRoZSBzY3JlZW4KK21heGltdW1fd2luZG93cwkJCXdudW0JbnVtCU1XCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBkZWZpbmVhYmxlIHdpbmRvd3MKK21pY3JvX2NvbF9zaXplCQkJbWNzCW51bQlZZgktCS0JLS0tLS0JY2hhcmFjdGVyIHN0ZXAgc2l6ZSB3aGVuIGluIG1pY3JvIG1vZGUKK21pY3JvX2xpbmVfc2l6ZQkJCW1scwludW0JWWcJLQktCS0tLS0tCWxpbmUgc3RlcCBzaXplIHdoZW4gaW4gbWljcm8gbW9kZQorbm9fY29sb3JfdmlkZW8JCQluY3YJbnVtCU5DCS0JLQktLS0tLQl2aWRlbyBhdHRyaWJ1dGVzIHRoYXQgY2FuIG5vdCBiZSB1c2VkIHdpdGggY29sb3JzCitudW1iZXJfb2ZfcGlucwkJCW5waW5zCW51bQlZaAktCS0JLS0tLS0JbnVtYmVycyBvZiBwaW5zIGluIHByaW50LWhlYWQKK251bV9sYWJlbHMJCQlubGFiCW51bQlObAktCS0JLS0tLS0JbnVtYmVyIG9mIGxhYmVscyBvbiBzY3JlZW4KK291dHB1dF9yZXNfY2hhcgkJCW9yYwludW0JWWkJLQktCS0tLS0tCWhvcml6b250YWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgbGluZQorb3V0cHV0X3Jlc19saW5lCQkJb3JsCW51bQlZagktCS0JLS0tLS0JdmVydGljYWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgbGluZQorb3V0cHV0X3Jlc19ob3J6X2luY2gJCW9yaGkJbnVtCVlrCS0JLQktLS0tLQlob3Jpem9udGFsIHJlc29sdXRpb24gaW4gdW5pdHMgcGVyIGluY2gKK291dHB1dF9yZXNfdmVydF9pbmNoCQlvcnZpCW51bQlZbAktCS0JLS0tLS0JdmVydGljYWwgcmVzb2x1dGlvbiBpbiB1bml0cyBwZXIgaW5jaAorcHJpbnRfcmF0ZQkJCWNwcwludW0JWW0JLQktCS0tLS0tCXByaW50IHJhdGUgaW4gY2hhcmFjdGVycyBwZXIgc2Vjb25kCit3aWRlX2NoYXJfc2l6ZQkJCXdpZGNzCW51bQlZbgktCS0JLS0tLS0JY2hhcmFjdGVyIHN0ZXAgc2l6ZSB3aGVuIGluIGRvdWJsZSB3aWRlIG1vZGUKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBzdHJpbmcgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2JhY2tfdGFiCQkJY2J0CXN0cglidAktCQktCVlCQ0dFCWJhY2sgdGFiIChQKQorYmVsbAkJCQliZWwJc3RyCWJsCS0JCS0JWUItR0UJYXVkaWJsZSBzaWduYWwgKGJlbGwpIChQKQorY2FycmlhZ2VfcmV0dXJuCQkJY3IJc3RyCWNyCS0JCS0JWUJDR0UJY2FycmlhZ2UgcmV0dXJuIChQKikgKFAqKQorY2hhbmdlX3Njcm9sbF9yZWdpb24JCWNzcglzdHIJY3MJLQkJLQlZQkNHRQljaGFuZ2UgcmVnaW9uIHRvIGxpbmUgIzEgdG8gbGluZSAjMiAoUCkKK2NsZWFyX2FsbF90YWJzCQkJdGJjCXN0cgljdAktCQktCVlCLUctCWNsZWFyIGFsbCB0YWIgc3RvcHMgKFApCitjbGVhcl9zY3JlZW4JCQljbGVhcglzdHIJY2wJLQkJLQlZQkNHRQljbGVhciBzY3JlZW4gYW5kIGhvbWUgY3Vyc29yIChQKikKK2Nscl9lb2wJCQkJZWwJc3RyCWNlCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIGxpbmUgKFApCitjbHJfZW9zCQkJCWVkCXN0cgljZAktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBzY3JlZW4gKFAqKQorY29sdW1uX2FkZHJlc3MJCQlocGEJc3RyCWNoCS0JCS0JLUItR0UqCWhvcml6b250YWwgcG9zaXRpb24gIzEsIGFic29sdXRlIChQKQorY29tbWFuZF9jaGFyYWN0ZXIJCWNtZGNoCXN0cglDQwktCQktCVlCLUctCXRlcm1pbmFsIHNldHRhYmxlIGNtZCBjaGFyYWN0ZXIgaW4gcHJvdG90eXBlICE/CitjdXJzb3JfYWRkcmVzcwkJCWN1cAlzdHIJY20JLQkJLQlZQkNHRQltb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3JfZG93bgkJCWN1ZDEJc3RyCWRvCS0JCS0JWUJDR0UJZG93biBvbmUgbGluZQorY3Vyc29yX2hvbWUJCQlob21lCXN0cglobwktCQktCVlCQ0dFCWhvbWUgY3Vyc29yIChpZiBubyBjdXApCitjdXJzb3JfaW52aXNpYmxlCQljaXZpcwlzdHIJdmkJLQkJLQlZQi1HLQltYWtlIGN1cnNvciBpbnZpc2libGUKK2N1cnNvcl9sZWZ0CQkJY3ViMQlzdHIJbGUJLQkJLQlZQkNHRQltb3ZlIGxlZnQgb25lIHNwYWNlCitjdXJzb3JfbWVtX2FkZHJlc3MJCW1yY3VwCXN0cglDTQktCQktCVlCLUctCW1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZywgbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX25vcm1hbAkJCWNub3JtCXN0cgl2ZQktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIGFwcGVhciBub3JtYWwgKHVuZG8gY2l2aXMvY3Z2aXMpCitjdXJzb3JfcmlnaHQJCQljdWYxCXN0cgluZAktCQktCVlCQ0dFCW5vbi1kZXN0cnVjdGl2ZSBzcGFjZSAobW92ZSByaWdodCBvbmUgc3BhY2UpCitjdXJzb3JfdG9fbGwJCQlsbAlzdHIJbGwJLQkJLQlZQkNHRQlsYXN0IGxpbmUsIGZpcnN0IGNvbHVtbiAoaWYgbm8gY3VwKQorY3Vyc29yX3VwCQkJY3V1MQlzdHIJdXAJLQkJLQlZQkNHRQl1cCBvbmUgbGluZQorY3Vyc29yX3Zpc2libGUJCQljdnZpcwlzdHIJdnMJLQkJLQlZQkNHRQltYWtlIGN1cnNvciB2ZXJ5IHZpc2libGUKK2RlbGV0ZV9jaGFyYWN0ZXIJCWRjaDEJc3RyCWRjCS0JCS0JWUJDR0UJZGVsZXRlIGNoYXJhY3RlciAoUCopCitkZWxldGVfbGluZQkJCWRsMQlzdHIJZGwJLQkJLQlZQkNHRQlkZWxldGUgbGluZSAoUCopCitkaXNfc3RhdHVzX2xpbmUJCQlkc2wJc3RyCWRzCS0JCS0JWUItRy0JZGlzYWJsZSBzdGF0dXMgbGluZQorZG93bl9oYWxmX2xpbmUJCQloZAlzdHIJaGQJLQkJLQlZQi1HLQloYWxmIGEgbGluZSBkb3duCitlbnRlcl9hbHRfY2hhcnNldF9tb2RlCQlzbWFjcwlzdHIJYXMJLQkJLQlZQi1HLQlzdGFydCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2VudGVyX2JsaW5rX21vZGUJCWJsaW5rCXN0cgltYgktCQktCVlCLUctCXR1cm4gb24gYmxpbmtpbmcKK2VudGVyX2JvbGRfbW9kZQkJCWJvbGQJc3RyCW1kCS0JCS0JWUItRy0JdHVybiBvbiBib2xkIChleHRyYSBicmlnaHQpIG1vZGUKK2VudGVyX2NhX21vZGUJCQlzbWN1cAlzdHIJdGkJLQkJLQlZQkNHRQlzdHJpbmcgdG8gc3RhcnQgcHJvZ3JhbXMgdXNpbmcgY3VwCitlbnRlcl9kZWxldGVfbW9kZQkJc21kYwlzdHIJZG0JLQkJLQlZQkNHRQllbnRlciBkZWxldGUgbW9kZQorZW50ZXJfZGltX21vZGUJCQlkaW0Jc3RyCW1oCS0JCS0JWUItRy0JdHVybiBvbiBoYWxmLWJyaWdodCBtb2RlCitlbnRlcl9pbnNlcnRfbW9kZQkJc21pcglzdHIJaW0JLQkJLQlZQkNHRQllbnRlciBpbnNlcnQgbW9kZQorZW50ZXJfc2VjdXJlX21vZGUJCWludmlzCXN0cgltawktCQktCS1CLUctKgl0dXJuIG9uIGJsYW5rIG1vZGUgKGNoYXJhY3RlcnMgaW52aXNpYmxlKQorZW50ZXJfcHJvdGVjdGVkX21vZGUJCXByb3QJc3RyCW1wCS0JCS0JLUItRy0qCXR1cm4gb24gcHJvdGVjdGVkIG1vZGUKK2VudGVyX3JldmVyc2VfbW9kZQkJcmV2CXN0cgltcgktCQktCVlCLUctCXR1cm4gb24gcmV2ZXJzZSB2aWRlbyBtb2RlCitlbnRlcl9zdGFuZG91dF9tb2RlCQlzbXNvCXN0cglzbwktCQktCVlCQ0dFCWJlZ2luIHN0YW5kb3V0IG1vZGUKK2VudGVyX3VuZGVybGluZV9tb2RlCQlzbXVsCXN0cgl1cwktCQktCVlCQ0dFCWJlZ2luIHVuZGVybGluZSBtb2RlCitlcmFzZV9jaGFycwkJCWVjaAlzdHIJZWMJLQkJLQlZQi1HLQllcmFzZSAjMSBjaGFyYWN0ZXJzIChQKQorZXhpdF9hbHRfY2hhcnNldF9tb2RlCQlybWFjcwlzdHIJYWUJLQkJLQlZQi1HLQllbmQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitleGl0X2F0dHJpYnV0ZV9tb2RlCQlzZ3IwCXN0cgltZQktCQktCVlCLUdFCXR1cm4gb2ZmIGFsbCBhdHRyaWJ1dGVzCitleGl0X2NhX21vZGUJCQlybWN1cAlzdHIJdGUJLQkJLQlZQkNHRQlzdHJpbmdzIHRvIGVuZCBwcm9ncmFtcyB1c2luZyBjdXAKK2V4aXRfZGVsZXRlX21vZGUJCXJtZGMJc3RyCWVkCS0JCS0JWUJDR0UJZW5kIGRlbGV0ZSBtb2RlCitleGl0X2luc2VydF9tb2RlCQlybWlyCXN0cgllaQktCQktCVlCQ0dFCWV4aXQgaW5zZXJ0IG1vZGUKK2V4aXRfc3RhbmRvdXRfbW9kZQkJcm1zbwlzdHIJc2UJLQkJLQlZQkNHRQlleGl0IHN0YW5kb3V0IG1vZGUKK2V4aXRfdW5kZXJsaW5lX21vZGUJCXJtdWwJc3RyCXVlCS0JCS0JWUJDR0UJZXhpdCB1bmRlcmxpbmUgbW9kZQorZmxhc2hfc2NyZWVuCQkJZmxhc2gJc3RyCXZiCS0JCS0JWUJDR0UJdmlzaWJsZSBiZWxsIChtYXkgbm90IG1vdmUgY3Vyc29yKQorZm9ybV9mZWVkCQkJZmYJc3RyCWZmCS0JCS0JWUItRy0JaGFyZGNvcHkgdGVybWluYWwgcGFnZSBlamVjdCAoUCopCitmcm9tX3N0YXR1c19saW5lCQlmc2wJc3RyCWZzCS0JCS0JWUItRy0JcmV0dXJuIGZyb20gc3RhdHVzIGxpbmUKK2luaXRfMXN0cmluZwkJCWlzMQlzdHIJaTEJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfMnN0cmluZwkJCWlzMglzdHIJaXMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfM3N0cmluZwkJCWlzMwlzdHIJaTMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfZmlsZQkJCWlmCXN0cglpZgktCQktCVlCLUctCW5hbWUgb2YgaW5pdGlhbGl6YXRpb24gZmlsZQoraW5zZXJ0X2NoYXJhY3RlcgkJaWNoMQlzdHIJaWMJLQkJLQlZQkNHRQlpbnNlcnQgY2hhcmFjdGVyIChQKQoraW5zZXJ0X2xpbmUJCQlpbDEJc3RyCWFsCS0JCS0JWUJDR0UJaW5zZXJ0IGxpbmUgKFAqKQoraW5zZXJ0X3BhZGRpbmcJCQlpcAlzdHIJaXAJLQkJLQlZQkNHRQlpbnNlcnQgcGFkZGluZyBhZnRlciBpbnNlcnRlZCBjaGFyYWN0ZXIKK2tleV9iYWNrc3BhY2UJCQlrYnMJc3RyCWtiCUtFWV9CQUNLU1BBQ0UJMDQwNwlZQi1HLQliYWNrc3BhY2Uga2V5CitrZXlfY2F0YWIJCQlrdGJjCXN0cglrYQlLRVlfQ0FUQUIJMDUyNgktQi1HLSoJY2xlYXItYWxsLXRhYnMga2V5CitrZXlfY2xlYXIJCQlrY2xyCXN0cglrQwlLRVlfQ0xFQVIJMDUxNQktQi1HLSoJY2xlYXItc2NyZWVuIG9yIGVyYXNlIGtleQora2V5X2N0YWIJCQlrY3RhYglzdHIJa3QJS0VZX0NUQUIJMDUyNQktQi1HLSoJY2xlYXItdGFiIGtleQora2V5X2RjCQkJCWtkY2gxCXN0cglrRAlLRVlfREMJCTA1MTIJWUItRy0JZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9kbAkJCQlrZGwxCXN0cglrTAlLRVlfREwJCTA1MTAJLUItRy0qCWRlbGV0ZS1saW5lIGtleQora2V5X2Rvd24JCQlrY3VkMQlzdHIJa2QJS0VZX0RPV04JMDQwMglZQkNHRQlkb3duLWFycm93IGtleQora2V5X2VpYwkJCQlrcm1pcglzdHIJa00JS0VZX0VJQwkJMDUxNAktQi1HLSoJc2VudCBieSBybWlyIG9yIHNtaXIgaW4gaW5zZXJ0IG1vZGUKK2tleV9lb2wJCQkJa2VsCXN0cglrRQlLRVlfRU9MCQkwNTE3CS1CLUctKgljbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9lb3MJCQkJa2VkCXN0cglrUwlLRVlfRU9TCQkwNTE2CS1CLUctKgljbGVhci10by1lbmQtb2Ytc2NyZWVuIGtleQora2V5X2YwCQkJCWtmMAlzdHIJazAJS0VZX0YoMCkJMDQxMAlZQkNHRQlGMCBmdW5jdGlvbiBrZXkKK2tleV9mMQkJCQlrZjEJc3RyCWsxCUtFWV9GKDEpCS0JWUJDR0UJRjEgZnVuY3Rpb24ga2V5CitrZXlfZjEwCQkJCWtmMTAJc3RyCWs7CUtFWV9GKDEwKQktCS0tLS1FCUYxMCBmdW5jdGlvbiBrZXkKK2tleV9mMgkJCQlrZjIJc3RyCWsyCUtFWV9GKDIpCS0JWUJDR0UJRjIgZnVuY3Rpb24ga2V5CitrZXlfZjMJCQkJa2YzCXN0cglrMwlLRVlfRigzKQktCVlCQ0dFCUYzIGZ1bmN0aW9uIGtleQora2V5X2Y0CQkJCWtmNAlzdHIJazQJS0VZX0YoNCkJLQlZQkNHRQlGNCBmdW5jdGlvbiBrZXkKK2tleV9mNQkJCQlrZjUJc3RyCWs1CUtFWV9GKDUpCS0JWUJDR0UJRjUgZnVuY3Rpb24ga2V5CitrZXlfZjYJCQkJa2Y2CXN0cglrNglLRVlfRig2KQktCVlCQ0dFCUY2IGZ1bmN0aW9uIGtleQora2V5X2Y3CQkJCWtmNwlzdHIJazcJS0VZX0YoNykJLQlZQkNHRQlGNyBmdW5jdGlvbiBrZXkKK2tleV9mOAkJCQlrZjgJc3RyCWs4CUtFWV9GKDgpCS0JWUJDR0UJRjggZnVuY3Rpb24ga2V5CitrZXlfZjkJCQkJa2Y5CXN0cglrOQlLRVlfRig5KQktCVlCQ0dFCUY5IGZ1bmN0aW9uIGtleQora2V5X2hvbWUJCQlraG9tZQlzdHIJa2gJS0VZX0hPTUUJMDQwNglZQkNHRQlob21lIGtleQora2V5X2ljCQkJCWtpY2gxCXN0cglrSQlLRVlfSUMJCTA1MTMJWUItR0UJaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9pbAkJCQlraWwxCXN0cglrQQlLRVlfSUwJCTA1MTEJLUItRy0qCWluc2VydC1saW5lIGtleQora2V5X2xlZnQJCQlrY3ViMQlzdHIJa2wJS0VZX0xFRlQJMDQwNAlZQkNHRQlsZWZ0LWFycm93IGtleQora2V5X2xsCQkJCWtsbAlzdHIJa0gJS0VZX0xMCQkwNTMzCVlCLUctCWxvd2VyLWxlZnQga2V5IChob21lIGRvd24pCitrZXlfbnBhZ2UJCQlrbnAJc3RyCWtOCUtFWV9OUEFHRQkwNTIyCVlCLUdFCW5leHQtcGFnZSBrZXkKK2tleV9wcGFnZQkJCWtwcAlzdHIJa1AJS0VZX1BQQUdFCTA1MjMJWUItR0UJcHJldmlvdXMtcGFnZSBrZXkKK2tleV9yaWdodAkJCWtjdWYxCXN0cglrcglLRVlfUklHSFQJMDQwNQlZQkNHRQlyaWdodC1hcnJvdyBrZXkKK2tleV9zZgkJCQlraW5kCXN0cglrRglLRVlfU0YJCTA1MjAJLUItRy0qCXNjcm9sbC1mb3J3YXJkIGtleQora2V5X3NyCQkJCWtyaQlzdHIJa1IJS0VZX1NSCQkwNTIxCS1CLUctKglzY3JvbGwtYmFja3dhcmQga2V5CitrZXlfc3RhYgkJCWtodHMJc3RyCWtUCUtFWV9TVEFCCTA1MjQJLUItRy0qCXNldC10YWIga2V5CitrZXlfdXAJCQkJa2N1dTEJc3RyCWt1CUtFWV9VUAkJMDQwMwlZQkNHRQl1cC1hcnJvdyBrZXkKK2tleXBhZF9sb2NhbAkJCXJta3gJc3RyCWtlCS0JCS0JWUJDR0UJbGVhdmUgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitrZXlwYWRfeG1pdAkJCXNta3gJc3RyCWtzCS0JCS0JWUJDR0UJZW50ZXIgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitsYWJfZjAJCQkJbGYwCXN0cglsMAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjAgaWYgbm90IGYwCitsYWJfZjEJCQkJbGYxCXN0cglsMQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEgaWYgbm90IGYxCitsYWJfZjEwCQkJCWxmMTAJc3RyCWxhCS0JCS0JLS0tLS0JbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxMCBpZiBub3QgZjEwCitsYWJfZjIJCQkJbGYyCXN0cglsMgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjIgaWYgbm90IGYyCitsYWJfZjMJCQkJbGYzCXN0cglsMwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjMgaWYgbm90IGYzCitsYWJfZjQJCQkJbGY0CXN0cglsNAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjQgaWYgbm90IGY0CitsYWJfZjUJCQkJbGY1CXN0cglsNQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjUgaWYgbm90IGY1CitsYWJfZjYJCQkJbGY2CXN0cglsNgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjYgaWYgbm90IGY2CitsYWJfZjcJCQkJbGY3CXN0cglsNwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjcgaWYgbm90IGY3CitsYWJfZjgJCQkJbGY4CXN0cglsOAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjggaWYgbm90IGY4CitsYWJfZjkJCQkJbGY5CXN0cglsOQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjkgaWYgbm90IGY5CittZXRhX29mZgkJCXJtbQlzdHIJbW8JLQkJLQlZQi1HLSoJdHVybiBvZmYgbWV0YSBtb2RlCittZXRhX29uCQkJCXNtbQlzdHIJbW0JLQkJLQlZQi1HLSoJdHVybiBvbiBtZXRhIG1vZGUgKDh0aC1iaXQgb24pCituZXdsaW5lCQkJCW5lbAlzdHIJbncJLQkJLQlZQi1HLSoJbmV3bGluZSAoYmVoYXZlIGxpa2UgY3IgZm9sbG93ZWQgYnkgbGYpCitwYWRfY2hhcgkJCXBhZAlzdHIJcGMJLQkJLQlZQkNHRQlwYWRkaW5nIGNoYXIgKGluc3RlYWQgb2YgbnVsbCkKK3Bhcm1fZGNoCQkJZGNoCXN0cglEQwktCQktCVlCLUdFCWRlbGV0ZSAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1fZGVsZXRlX2xpbmUJCWRsCXN0cglETAktCQktCVlCQ0dFCWRlbGV0ZSAjMSBsaW5lcyAoUCopCitwYXJtX2Rvd25fY3Vyc29yCQljdWQJc3RyCURPCS0JCS0JWUJDR0UJZG93biAjMSBsaW5lcyAoUCopCitwYXJtX2ljaAkJCWljaAlzdHIJSUMJLQkJLQlZQi1HRQlpbnNlcnQgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2luZGV4CQkJaW5kbglzdHIJU0YJLQkJLQlZQkNHLQlzY3JvbGwgZm9yd2FyZCAjMSBsaW5lcyAoUCkKK3Bhcm1faW5zZXJ0X2xpbmUJCWlsCXN0cglBTAktCQktCVlCQ0dFCWluc2VydCAjMSBsaW5lcyAoUCopCitwYXJtX2xlZnRfY3Vyc29yCQljdWIJc3RyCUxFCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IChQKQorcGFybV9yaWdodF9jdXJzb3IJCWN1ZglzdHIJUkkJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IChQKikKK3Bhcm1fcmluZGV4CQkJcmluCXN0cglTUgktCQktCVlCQ0ctCXNjcm9sbCBiYWNrICMxIGxpbmVzIChQKQorcGFybV91cF9jdXJzb3IJCQljdXUJc3RyCVVQCS0JCS0JWUJDR0UJdXAgIzEgbGluZXMgKFAqKQorcGtleV9rZXkJCQlwZmtleQlzdHIJcGsJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMgorcGtleV9sb2NhbAkJCXBmbG9jCXN0cglwbAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIGV4ZWN1dGUgc3RyaW5nICMyCitwa2V5X3htaXQJCQlwZngJc3RyCXB4CS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHJhbnNtaXQgc3RyaW5nICMyCitwcmludF9zY3JlZW4JCQltYzAJc3RyCXBzCS0JCS0JLUItRy0qCXByaW50IGNvbnRlbnRzIG9mIHNjcmVlbgorcHJ0cl9vZmYJCQltYzQJc3RyCXBmCS0JCS0JLUItRy0qCXR1cm4gb2ZmIHByaW50ZXIKK3BydHJfb24JCQkJbWM1CXN0cglwbwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIKK3JlcGVhdF9jaGFyCQkJcmVwCXN0cglycAktCQktCVlCLUdFCXJlcGVhdCBjaGFyICMxICMyIHRpbWVzIChQKikKK3Jlc2V0XzFzdHJpbmcJCQlyczEJc3RyCXIxCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8yc3RyaW5nCQkJcnMyCXN0cglyMgktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfM3N0cmluZwkJCXJzMwlzdHIJcjMJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0X2ZpbGUJCQlyZglzdHIJcmYJLQkJLQktQi0tLQluYW1lIG9mIHJlc2V0IGZpbGUKK3Jlc3RvcmVfY3Vyc29yCQkJcmMJc3RyCXJjCS0JCS0JWUJDRy0JcmVzdG9yZSBjdXJzb3IgdG8gcG9zaXRpb24gb2YgbGFzdCBzYXZlX2N1cnNvcgorcm93X2FkZHJlc3MJCQl2cGEJc3RyCWN2CS0JCS0JLUItR0UqCXZlcnRpY2FsIHBvc2l0aW9uICMxIGFic29sdXRlIChQKQorc2F2ZV9jdXJzb3IJCQlzYwlzdHIJc2MJLQkJLQlZQkNHLQlzYXZlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIChQKQorc2Nyb2xsX2ZvcndhcmQJCQlpbmQJc3RyCXNmCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgdXAgKFApCitzY3JvbGxfcmV2ZXJzZQkJCXJpCXN0cglzcgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IGRvd24gKFApCitzZXRfYXR0cmlidXRlcwkJCXNncglzdHIJc2EJLQkJLQlZQi1HLQlkZWZpbmUgdmlkZW8gYXR0cmlidXRlcyAjMS0jOSAoUEc5KQorc2V0X3RhYgkJCQlodHMJc3RyCXN0CS0JCS0JWUItRy0Jc2V0IGEgdGFiIGluIGV2ZXJ5IHJvdywgY3VycmVudCBjb2x1bW5zCitzZXRfd2luZG93CQkJd2luZAlzdHIJd2kJLQkJLQktQi1HRQljdXJyZW50IHdpbmRvdyBpcyBsaW5lcyAjMS0jMiBjb2xzICMzLSM0Cit0YWIJCQkJaHQJc3RyCXRhCS0JCS0JWUJDR0UJdGFiIHRvIG5leHQgOC1zcGFjZSBoYXJkd2FyZSB0YWIgc3RvcAordG9fc3RhdHVzX2xpbmUJCQl0c2wJc3RyCXRzCS0JCS0JWUItRy0JbW92ZSB0byBzdGF0dXMgbGluZSwgY29sdW1uICMxCit1bmRlcmxpbmVfY2hhcgkJCXVjCXN0cgl1YwktCQktCVlCQ0ctCXVuZGVybGluZSBjaGFyIGFuZCBtb3ZlIHBhc3QgaXQKK3VwX2hhbGZfbGluZQkJCWh1CXN0cglodQktCQktCVlCLUctCWhhbGYgYSBsaW5lIHVwCitpbml0X3Byb2cJCQlpcHJvZwlzdHIJaVAJLQkJLQktQi0tLQlwYXRoIG5hbWUgb2YgcHJvZ3JhbSBmb3IgaW5pdGlhbGl6YXRpb24KK2tleV9hMQkJCQlrYTEJc3RyCUsxCUtFWV9BMQkJMDUzNAlZQi1HRQl1cHBlciBsZWZ0IG9mIGtleXBhZAora2V5X2EzCQkJCWthMwlzdHIJSzMJS0VZX0EzCQkwNTM1CVlCLUdFCXVwcGVyIHJpZ2h0IG9mIGtleXBhZAora2V5X2IyCQkJCWtiMglzdHIJSzIJS0VZX0IyCQkwNTM2CVlCLUdFCWNlbnRlciBvZiBrZXlwYWQKK2tleV9jMQkJCQlrYzEJc3RyCUs0CUtFWV9DMQkJMDUzNwlZQi1HRQlsb3dlciBsZWZ0IG9mIGtleXBhZAora2V5X2MzCQkJCWtjMwlzdHIJSzUJS0VZX0MzCQkwNTQwCVlCLUdFCWxvd2VyIHJpZ2h0IG9mIGtleXBhZAorcHJ0cl9ub24JCQltYzVwCXN0cglwTwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIgZm9yICMxIGJ5dGVzCisjCisjIFNWcjEgY2FwYWJpbGl0aWVzIHN0b3AgaGVyZS4JSUJNJ3MgdmVyc2lvbiBvZiB0ZXJtaW5mbyBpcyB0aGUgc2FtZSBhcworIyBTVnI0IHVwIHRvIHRoaXMgcG9pbnQsIGJ1dCBoYXMgYSBkaWZmZXJlbnQgc2V0IGFmdGVyd2FyZHMuCisjCisjIE9TRjEgZGlmZmVyZW5jZXMgc3RhcnQgaGVyZSwgYmFzZWQgb24gSUJNIHZlcnNpb246CisjCitib3hfY2hhcnNfMQkJCWJveDEJc3RyCWJ4CS0JCS0JLS0tLUsJYm94IGNoYXJhY3RlcnMgcHJpbWFyeSBzZXQKK2JveF9jaGFyc18yCQkJYm94MglzdHIJYnkJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBzZWNvbmRhcnkgc2V0Citib3hfYXR0cl8xCQkJYmF0dDEJc3RyCUJ4CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MQorYm94X2F0dHJfMgkJCWJhdHQyCXN0cglCeQktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDIKK2NvbG9yX2JnXzAJCQljb2xiMAlzdHIJZDAJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDAKK2NvbG9yX2JnXzEJCQljb2xiMQlzdHIJZDEJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDEKK2NvbG9yX2JnXzIJCQljb2xiMglzdHIJZDIJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDIKK2NvbG9yX2JnXzMJCQljb2xiMwlzdHIJZDMJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDMKK2NvbG9yX2JnXzQJCQljb2xiNAlzdHIJZDQJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDQKK2NvbG9yX2JnXzUJCQljb2xiNQlzdHIJZDUJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDUKK2NvbG9yX2JnXzYJCQljb2xiNglzdHIJZDYJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDYKK2NvbG9yX2JnXzcJCQljb2xiNwlzdHIJZDcJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDcKK2NvbG9yX2ZnXzAJCQljb2xmMAlzdHIJYzAJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDAKK2NvbG9yX2ZnXzEJCQljb2xmMQlzdHIJYzEJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDEKK2NvbG9yX2ZnXzIJCQljb2xmMglzdHIJYzIJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDIKK2NvbG9yX2ZnXzMJCQljb2xmMwlzdHIJYzMJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDMKK2NvbG9yX2ZnXzQJCQljb2xmNAlzdHIJYzQJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDQKK2NvbG9yX2ZnXzUJCQljb2xmNQlzdHIJYzUJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDUKK2NvbG9yX2ZnXzYJCQljb2xmNglzdHIJYzYJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDYKK2NvbG9yX2ZnXzcJCQljb2xmNwlzdHIJYzcJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDcKK2ZvbnRfMAkJCQlmb250MAlzdHIJZjAJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAwCitmb250XzEJCQkJZm9udDEJc3RyCWYxCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMQorZm9udF8yCQkJCWZvbnQyCXN0cglmMgktCQktCS0tLS0tCXNlbGVjdCBmb250IDIKK2ZvbnRfMwkJCQlmb250MwlzdHIJZjMJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAzCitmb250XzQJCQkJZm9udDQJc3RyCWY0CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNAorZm9udF81CQkJCWZvbnQ1CXN0cglmNQktCQktCS0tLS1LCXNlbGVjdCBmb250IDUKK2ZvbnRfNgkJCQlmb250NglzdHIJZjYJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA2Citmb250XzcJCQkJZm9udDcJc3RyCWY3CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNwora2V5X2JhY2tfdGFiCQkJa2J0YWIJc3RyCWswCS0JCS0JLS0tLS0JYmFja3RhYiBrZXkKK2tleV9kbwkJCQlrZG8Jc3RyCWtpCS0JCS0JLS0tLUsJZG8gcmVxdWVzdCBrZXkKK2tleV9jb21tYW5kCQkJa2NtZAlzdHIJa2MJS0VZX0NPTU1BTkQJMDU0NQktLS0tLQljb21tYW5kIGtleQora2V5X2NvbW1hbmRfcGFuZQkJa2NwbglzdHIJa1cJLQkJLQktLS0tSwljb21tYW5kLXBhbmUga2V5CitrZXlfZW5kCQkJCWtlbmQJc3RyCUA3CUtFWV9FTkQJCTA1NTAJLS0tLS0JZW5kIGtleQora2V5X2hlbHAJCQlraGxwCXN0cgklMQlLRVlfSEVMUAkwNTUzCS0tLS0tCWhlbHAga2V5CitrZXlfbmV3bGluZQkJCWtubAlzdHIJbmwJLQkJLQktLS0tSwluZXdsaW5lIGtleQora2V5X25leHRfcGFuZQkJCWtucG4Jc3RyCWt2CS0JCS0JLS0tLUsJbmV4dC1wYW5lIGtleQora2V5X3ByZXZfY21kCQkJa3BwbglzdHIJa3AJLQkJLQktLS0tSwlwcmV2aW91cy1jb21tYW5kIGtleQora2V5X3ByZXZfcGFuZQkJCWtwcG4Jc3RyCWtWCS0JCS0JLS0tLUsJcHJldmlvdXMtcGFuZSBrZXkKK2tleV9xdWl0CQkJa3F1aXQJc3RyCWtRCS0JCS0JLS0tLUsJcXVpdCBrZXkKK2tleV9zZWxlY3QJCQlrc2x0CXN0cgkqNglLRVlfU0VMRUNUCTA2MDEJLS0tLS0Jc2VsZWN0IGtleQora2V5X3Njcm9sbF9sZWZ0CQkJa3NjbAlzdHIJa3oJLQkJLQktLS0tSwlzY3JvbGwgbGVmdAora2V5X3Njcm9sbF9yaWdodAkJa3NjcglzdHIJa1oJLQkJLQktLS0tSwlzY3JvbGwgcmlnaHQKK2tleV90YWIJCQkJa3RhYglzdHIJa28JLQkJLQktLS0tSwl0YWIga2V5CitrZXlfc21hcF9pbjEJCQlrbXBmMQlzdHIJS3YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBpbnB1dAora2V5X3NtYXBfb3V0MQkJCWttcHQxCXN0cglLVgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAxIG91dHB1dAora2V5X3NtYXBfaW4yCQkJa21wZjIJc3RyCUt3CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDIgaW5wdXQKK2tleV9zbWFwX291dDIJCQlrbXB0MglzdHIJS1cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBvdXRwdXQKK2tleV9zbWFwX2luMwkJCWttcGYzCXN0cglLeAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSAzIGlucHV0CitrZXlfc21hcF9vdXQzCQkJa21wdDMJc3RyCUtYCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDMgb3V0cHV0CitrZXlfc21hcF9pbjQJCQlrbXBmNAlzdHIJS3kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBpbnB1dAora2V5X3NtYXBfb3V0NAkJCWttcHQ0CXN0cglLWQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA0IG91dHB1dAora2V5X3NtYXBfaW41CQkJa21wZjUJc3RyCUt6CS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDUgaW5wdXQKK2tleV9zbWFwX291dDUJCQlrbXB0NQlzdHIJS1oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBvdXRwdXQKK2FwcGxfZGVmaW5lZF9zdHIJCWFwc3RyCXN0cgl6YQktCQktCS0tLS1LCWFwcGxpY2F0aW9uLWRlZmluZWQgc3RyaW5nCisjIFRoZSBrZXlfc21hcF9pbls2Nzg5XSBhbmQga2V5X3NtYXBfb3V0WzY3ODldIGNhcGFiaWxpdGllcyBhcmUgZGVzY3JpYmVkIGluCisjIHRoZSBUcnU2NCBtYW51YWwgcGFnZXMuCitrZXlfc21hcF9pbjYJCQlrbXBmNglzdHIJS3IJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBpbnB1dAora2V5X3NtYXBfb3V0NgkJCWttcHQ2CXN0cglLUgktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA2IG91dHB1dAora2V5X3NtYXBfaW43CQkJa21wZjcJc3RyCUtzCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDcgaW5wdXQKK2tleV9zbWFwX291dDcJCQlrbXB0NwlzdHIJS1MJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBvdXRwdXQKK2tleV9zbWFwX2luOAkJCWttcGY4CXN0cglLdAktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA4IGlucHV0CitrZXlfc21hcF9vdXQ4CQkJa21wdDgJc3RyCUtUCS0JCS0JLS0tLUsJc3BlY2lhbCBtYXBwZWQga2V5IDggb3V0cHV0CitrZXlfc21hcF9pbjkJCQlrbXBmOQlzdHIJS3UJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBpbnB1dAora2V5X3NtYXBfb3V0OQkJCWttcHQ5CXN0cglLVQktCQktCS0tLS1LCXNwZWNpYWwgbWFwcGVkIGtleSA5IG91dHB1dAora2V5X3NmMQkJCQlrc2YxCXN0cglTMQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEKK2tleV9zZjIJCQkJa3NmMglzdHIJUzIJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAyCitrZXlfc2YzCQkJCWtzZjMJc3RyCVMzCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMwora2V5X3NmNAkJCQlrc2Y0CXN0cglTNAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDQKK2tleV9zZjUJCQkJa3NmNQlzdHIJUzUJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA1CitrZXlfc2Y2CQkJCWtzZjYJc3RyCVM2CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNgora2V5X3NmNwkJCQlrc2Y3CXN0cglTNwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDcKK2tleV9zZjgJCQkJa3NmOAlzdHIJUzgJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA4CitrZXlfc2Y5CQkJCWtzZjkJc3RyCVM5CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOQora2V5X3NmMTAJCQlrc2YxMAlzdHIJU0EJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAxMAorIwora2V5X2YxMQkJCQlrZjExCXN0cglGMQlLRVlfRigxMSkJLQktLS0tRQlGMTEgZnVuY3Rpb24ga2V5CitrZXlfZjEyCQkJCWtmMTIJc3RyCUYyCUtFWV9GKDEyKQktCS0tLS1FCUYxMiBmdW5jdGlvbiBrZXkKK2tleV9mMTMJCQkJa2YxMwlzdHIJRjMJS0VZX0YoMTMpCS0JLS0tLUUJRjEzIGZ1bmN0aW9uIGtleQora2V5X2YxNAkJCQlrZjE0CXN0cglGNAlLRVlfRigxNCkJLQktLS0tRQlGMTQgZnVuY3Rpb24ga2V5CitrZXlfZjE1CQkJCWtmMTUJc3RyCUY1CUtFWV9GKDE1KQktCS0tLS1FCUYxNSBmdW5jdGlvbiBrZXkKK2tleV9mMTYJCQkJa2YxNglzdHIJRjYJS0VZX0YoMTYpCS0JLS0tLUUJRjE2IGZ1bmN0aW9uIGtleQora2V5X2YxNwkJCQlrZjE3CXN0cglGNwlLRVlfRigxNykJLQktLS0tRQlGMTcgZnVuY3Rpb24ga2V5CitrZXlfZjE4CQkJCWtmMTgJc3RyCUY4CUtFWV9GKDE4KQktCS0tLS1FCUYxOCBmdW5jdGlvbiBrZXkKK2tleV9mMTkJCQkJa2YxOQlzdHIJRjkJS0VZX0YoMTkpCS0JLS0tLUUJRjE5IGZ1bmN0aW9uIGtleQora2V5X2YyMAkJCQlrZjIwCXN0cglGQQlLRVlfRigyMCkJLQktLS0tRQlGMjAgZnVuY3Rpb24ga2V5CitrZXlfZjIxCQkJCWtmMjEJc3RyCUZCCUtFWV9GKDIxKQktCS0tLS1FCUYyMSBmdW5jdGlvbiBrZXkKK2tleV9mMjIJCQkJa2YyMglzdHIJRkMJS0VZX0YoMjIpCS0JLS0tLUUJRjIyIGZ1bmN0aW9uIGtleQora2V5X2YyMwkJCQlrZjIzCXN0cglGRAlLRVlfRigyMykJLQktLS0tRQlGMjMgZnVuY3Rpb24ga2V5CitrZXlfZjI0CQkJCWtmMjQJc3RyCUZFCUtFWV9GKDI0KQktCS0tLS1FCUYyNCBmdW5jdGlvbiBrZXkKK2tleV9mMjUJCQkJa2YyNQlzdHIJRkYJS0VZX0YoMjUpCS0JLS0tLUUJRjI1IGZ1bmN0aW9uIGtleQora2V5X2YyNgkJCQlrZjI2CXN0cglGRwlLRVlfRigyNikJLQktLS0tRQlGMjYgZnVuY3Rpb24ga2V5CitrZXlfZjI3CQkJCWtmMjcJc3RyCUZICUtFWV9GKDI3KQktCS0tLS1FCUYyNyBmdW5jdGlvbiBrZXkKK2tleV9mMjgJCQkJa2YyOAlzdHIJRkkJS0VZX0YoMjgpCS0JLS0tLUUJRjI4IGZ1bmN0aW9uIGtleQora2V5X2YyOQkJCQlrZjI5CXN0cglGSglLRVlfRigyOSkJLQktLS0tRQlGMjkgZnVuY3Rpb24ga2V5CitrZXlfZjMwCQkJCWtmMzAJc3RyCUZLCUtFWV9GKDMwKQktCS0tLS1FCUYzMCBmdW5jdGlvbiBrZXkKK2tleV9mMzEJCQkJa2YzMQlzdHIJRkwJS0VZX0YoMzEpCS0JLS0tLUUJRjMxIGZ1bmN0aW9uIGtleQora2V5X2YzMgkJCQlrZjMyCXN0cglGTQlLRVlfRigzMikJLQktLS0tRQlGMzIgZnVuY3Rpb24ga2V5CitrZXlfZjMzCQkJCWtmMzMJc3RyCUZOCUtFWV9GKDMzKQktCS0tLS1FCUYzMyBmdW5jdGlvbiBrZXkKK2tleV9mMzQJCQkJa2YzNAlzdHIJRk8JS0VZX0YoMzQpCS0JLS0tLUUJRjM0IGZ1bmN0aW9uIGtleQora2V5X2YzNQkJCQlrZjM1CXN0cglGUAlLRVlfRigzNSkJLQktLS0tRQlGMzUgZnVuY3Rpb24ga2V5CitrZXlfZjM2CQkJCWtmMzYJc3RyCUZRCUtFWV9GKDM2KQktCS0tLS1FCUYzNiBmdW5jdGlvbiBrZXkKK2tleV9hY3Rpb24JCQlrYWN0CXN0cglrSglLRVlfQUNUSU9OCTA1NDEJLS0tLUsJc2VudCBieSBhY3Rpb24ga2V5CithY3NfY2hhcnMJCQlhY3NjCXN0cglhYwktCQktCS0tLS0tCWdyYXBoaWNzIGNoYXJzZXQgcGFpcnMsIGJhc2VkIG9uIHZ0MTAwCithbHRfc2NhbmNvZGVfZXNjCQlzY2VzYQlzdHIJUzgJLQkJLQktLS0tLQlBbHRlcm5hdGUgZXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KK2JpdF9pbWFnZV9yZXBlYXQJCWJpcmVwCXN0cglYeQktCQktCS0tLS0tCVJlcGVhdCBiaXQgaW1hZ2UgY2VsbCAjMSAjMiB0aW1lcworYml0X2ltYWdlX25ld2xpbmUJCWJpbmVsCXN0cglaegktCQktCS0tLS0tCU1vdmUgdG8gbmV4dCByb3cgb2YgdGhlIGJpdCBpbWFnZQorYml0X2ltYWdlX2NhcnJpYWdlX3JldHVybgliaWNyCXN0cglZdgktCQktCS0tLS0tCU1vdmUgdG8gYmVnaW5uaW5nIG9mIHNhbWUgcm93CitjaGFuZ2VfY2hhcl9waXRjaAkJY3BpCXN0cglaQQktCQktCS0tLS0tCUNoYW5nZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgaW5jaCB0byAjMQorY2hhbmdlX2xpbmVfcGl0Y2gJCWxwaQlzdHIJWkIJLQkJLQktLS0tLQlDaGFuZ2UgbnVtYmVyIG9mIGxpbmVzIHBlciBpbmNoIHRvICMxCitjaGFuZ2VfcmVzX2hvcnoJCQljaHIJc3RyCVpDCS0JCS0JLS0tLS0JQ2hhbmdlIGhvcml6b250YWwgcmVzb2x1dGlvbiB0byAjMQorY2hhbmdlX3Jlc192ZXJ0CQkJY3ZyCXN0cglaRAktCQktCS0tLS0tCUNoYW5nZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIHRvICMxCitjaGFyX3BhZGRpbmcJCQlybXAJc3RyCXJQCS0JCS0JLS0tLS0JbGlrZSBpcCBidXQgd2hlbiBpbiBpbnNlcnQgbW9kZQorY2hhcl9zZXRfbmFtZXMJCQljc25tCXN0cglaeQktCQktCS0tLS0tCVByb2R1Y2UgIzEndGggaXRlbSBmcm9tIGxpc3Qgb2YgY2hhcmFjdGVyIHNldCBuYW1lcworY2xlYXJfbWFyZ2lucwkJCW1nYwlzdHIJTUMJLQkJLQktLS0tLQljbGVhciByaWdodCBhbmQgbGVmdCBzb2Z0IG1hcmdpbnMKK2Nscl9ib2wJCQkJZWwxCXN0cgljYgktCQktCS0tLS0tCUNsZWFyIHRvIGJlZ2lubmluZyBvZiBsaW5lCitjb2RlX3NldF9pbml0CQkJY3NpbglzdHIJY2kJLQkJLQktLS0tLQlJbml0IHNlcXVlbmNlIGZvciBtdWx0aXBsZSBjb2Rlc2V0cworY29sb3JfbmFtZXMJCQljb2xvcm5tCXN0cglZdwktCQktCS0tLS0tCUdpdmUgbmFtZSBmb3IgY29sb3IgIzEKK2NyZWF0ZV93aW5kb3cJCQljd2luCXN0cglDVwktCQktCS0tLS0tCWRlZmluZSBhIHdpbmRvdyAjMSBmcm9tICMyLCMzIHRvICM0LCM1CitkZWZpbmVfYml0X2ltYWdlX3JlZ2lvbgkJZGVmYmkJc3RyCVl4CS0JCS0JLS0tLS0JRGVmaW5lIHJlY3Rhbmd1YWxhciBiaXQgaW1hZ2UgcmVnaW9uCitkZWZpbmVfY2hhcgkJCWRlZmMJc3RyCVpFCS0JCS0JLS0tLS0JRGVmaW5lIGEgY2hhcmFjdGVyICMxLCAjMiBkb3RzIHdpZGUsIGRlc2NlbmRlciAjMworZGV2aWNlX3R5cGUJCQlkZXZ0CXN0cglkdgktCQktCS0tLS0tCUluZGljYXRlIGxhbmd1YWdlL2NvZGVzZXQgc3VwcG9ydAorZGlhbF9waG9uZQkJCWRpYWwJc3RyCURJCS0JCS0JLS0tLS0JZGlhbCBudW1iZXIgIzEKK2Rpc3BsYXlfY2xvY2sJCQlkY2xrCXN0cglESwktCQktCS0tLS0tCWRpc3BsYXkgY2xvY2sKK2Rpc3BsYXlfcGNfY2hhcgkJCWRpc3BjCXN0cglTMQktCQktCS0tLS0tCURpc3BsYXkgUEMgY2hhcmFjdGVyICMxCitlbmFfYWNzCQkJCWVuYWNzCXN0cgllQQktCQktCS0tLS0tCWVuYWJsZSBhbHRlcm5hdGUgY2hhciBzZXQKK2VuZF9iaXRfaW1hZ2VfcmVnaW9uCQllbmRiaQlzdHIJWXkJLQkJLQktLS0tLQlFbmQgYSBiaXQtaW1hZ2UgcmVnaW9uCitlbnRlcl9hbV9tb2RlCQkJc21hbQlzdHIJU0EJLQkJLQktLS0tLQl0dXJuIG9uIGF1dG9tYXRpYyBtYXJnaW5zCitlbnRlcl9kb3VibGV3aWRlX21vZGUJCXN3aWRtCXN0cglaRgktCQktCS0tLS0tCUVudGVyIGRvdWJsZS13aWRlIG1vZGUKK2VudGVyX2RyYWZ0X3F1YWxpdHkJCXNkcmZxCXN0cglaRwktCQktCS0tLS0tCUVudGVyIGRyYWZ0LXF1YWxpdHkgbW9kZQorZW50ZXJfaXRhbGljc19tb2RlCQlzaXRtCXN0cglaSAktCQktCS0tLS0tCUVudGVyIGl0YWxpYyBtb2RlCitlbnRlcl9sZWZ0d2FyZF9tb2RlCQlzbG0Jc3RyCVpJCS0JCS0JLS0tLS0JU3RhcnQgbGVmdHdhcmQgY2FycmlhZ2UgbW90aW9uCitlbnRlcl9taWNyb19tb2RlCQlzbWljbQlzdHIJWkoJLQkJLQktLS0tLQlTdGFydCBtaWNyby1tb3Rpb24gbW9kZQorZW50ZXJfbmVhcl9sZXR0ZXJfcXVhbGl0eQlzbmxxCXN0cglaSwktCQktCS0tLS0tCUVudGVyIE5MUSBtb2RlCitlbnRlcl9ub3JtYWxfcXVhbGl0eQkJc25ybXEJc3RyCVpMCS0JCS0JLS0tLS0JRW50ZXIgbm9ybWFsLXF1YWxpdHkgbW9kZQorZW50ZXJfcGNfY2hhcnNldF9tb2RlCQlzbXBjaAlzdHIJUzIJLQkJLQktLS0tLQlFbnRlciBQQyBjaGFyYWN0ZXIgZGlzcGxheSBtb2RlCitlbnRlcl9zY2FuY29kZV9tb2RlCQlzbXNjCXN0cglTNAktCQktCS0tLS0tCUVudGVyIFBDIHNjYW5jb2RlIG1vZGUKK2VudGVyX3NoYWRvd19tb2RlCQlzc2htCXN0cglaTQktCQktCS0tLS0tCUVudGVyIHNoYWRvdy1wcmludCBtb2RlCitlbnRlcl9zdWJzY3JpcHRfbW9kZQkJc3N1Ym0Jc3RyCVpOCS0JCS0JLS0tLS0JRW50ZXIgc3Vic2NyaXB0IG1vZGUKK2VudGVyX3N1cGVyc2NyaXB0X21vZGUJCXNzdXBtCXN0cglaTwktCQktCS0tLS0tCUVudGVyIHN1cGVyc2NyaXB0IG1vZGUKK2VudGVyX3Vwd2FyZF9tb2RlCQlzdW0Jc3RyCVpQCS0JCS0JLS0tLS0JU3RhcnQgdXB3YXJkIGNhcnJpYWdlIG1vdGlvbgorZW50ZXJfeG9uX21vZGUJCQlzbXhvbglzdHIJU1gJLQkJLQktLS0tLQl0dXJuIG9uIHhvbi94b2ZmIGhhbmRzaGFraW5nCitleGl0X2FtX21vZGUJCQlybWFtCXN0cglSQQktCQktCS0tLS0tCXR1cm4gb2ZmIGF1dG9tYXRpYyBtYXJnaW5zCitleGl0X2RvdWJsZXdpZGVfbW9kZQkJcndpZG0Jc3RyCVpRCS0JCS0JLS0tLS0JRW5kIGRvdWJsZS13aWRlIG1vZGUKK2V4aXRfaXRhbGljc19tb2RlCQlyaXRtCXN0cglaUgktCQktCS0tLS0tCUVuZCBpdGFsaWMgbW9kZQorZXhpdF9sZWZ0d2FyZF9tb2RlCQlybG0Jc3RyCVpTCS0JCS0JLS0tLS0JRW5kIGxlZnQtbW90aW9uIG1vZGUKK2V4aXRfbWljcm9fbW9kZQkJCXJtaWNtCXN0cglaVAktCQktCS0tLS0tCUVuZCBtaWNyby1tb3Rpb24gbW9kZQorZXhpdF9wY19jaGFyc2V0X21vZGUJCXJtcGNoCXN0cglTMwktCQktCS0tLS0tCUV4aXQgUEMgY2hhcmFjdGVyIGRpc3BsYXkgbW9kZQorZXhpdF9zY2FuY29kZV9tb2RlCQlybXNjCXN0cglTNQktCQktCS0tLS0tCUV4aXQgUEMgc2NhbmNvZGUgbW9kZQorZXhpdF9zaGFkb3dfbW9kZQkJcnNobQlzdHIJWlUJLQkJLQktLS0tLQlFbmQgc2hhZG93LXByaW50IG1vZGUKK2V4aXRfc3Vic2NyaXB0X21vZGUJCXJzdWJtCXN0cglaVgktCQktCS0tLS0tCUVuZCBzdWJzY3JpcHQgbW9kZQorZXhpdF9zdXBlcnNjcmlwdF9tb2RlCQlyc3VwbQlzdHIJWlcJLQkJLQktLS0tLQlFbmQgc3VwZXJzY3JpcHQgbW9kZQorZXhpdF91cHdhcmRfbW9kZQkJcnVtCXN0cglaWAktCQktCS0tLS0tCUVuZCByZXZlcnNlIGNoYXJhY3RlciBtb3Rpb24KK2V4aXRfeG9uX21vZGUJCQlybXhvbglzdHIJUlgJLQkJLQktLS0tLQl0dXJuIG9mZiB4b24veG9mZiBoYW5kc2hha2luZworZml4ZWRfcGF1c2UJCQlwYXVzZQlzdHIJUEEJLQkJLQktLS0tLQlwYXVzZSBmb3IgMi0zIHNlY29uZHMKK2ZsYXNoX2hvb2sJCQlob29rCXN0cglmaAktCQktCS0tLS0tCWZsYXNoIHN3aXRjaCBob29rCitnZXRfbW91c2UJCQlnZXRtCXN0cglHbQktCQktCS0tLS0tCUN1cnNlcyBzaG91bGQgZ2V0IGJ1dHRvbiBldmVudHMsIHBhcmFtZXRlciAjMSBub3QgZG9jdW1lbnRlZC4KK2dvdG9fd2luZG93CQkJd2luZ28Jc3RyCVdHCS0JCS0JLS0tLS0JZ28gdG8gd2luZG93ICMxCitoYW5ndXAJCQkJaHVwCXN0cglIVQktCQktCS0tLS0tCWhhbmctdXAgcGhvbmUKK2luaXRpYWxpemVfY29sb3IJCWluaXRjCXN0cglJYwktCQktCS0tLS0tCWluaXRpYWxpemUgY29sb3IgIzEgdG8gKCMyLCMzLCM0KQoraW5pdGlhbGl6ZV9wYWlyCQkJaW5pdHAJc3RyCUlwCS0JCS0JLS0tLS0JSW5pdGlhbGl6ZSBjb2xvciBwYWlyICMxIHRvIGZnPSgjMiwjMywjNCksIGJnPSgjNSwjNiwjNykKK2tleV9iZWcJCQkJa2JlZwlzdHIJQDEJS0VZX0JFRwkJMDU0MgktLS0tLQliZWdpbiBrZXkKK2tleV9idGFiCQkJa2NidAlzdHIJa0IJS0VZX0JUQUIJMDYzMgktLS0tLQliYWNrLXRhYiBrZXkKK2tleV9jYW5jZWwJCQlrY2FuCXN0cglAMglLRVlfQ0FOQ0VMCTA1NDMJLS0tLS0JY2FuY2VsIGtleQora2V5X2Nsb3NlCQkJa2NsbwlzdHIJQDMJS0VZX0NMT1NFCTA1NDQJLS0tLS0JY2xvc2Uga2V5CitrZXlfY29weQkJCWtjcHkJc3RyCUA1CUtFWV9DT1BZCTA1NDYJLS0tLS0JY29weSBrZXkKK2tleV9jcmVhdGUJCQlrY3J0CXN0cglANglLRVlfQ1JFQVRFCTA1NDcJLS0tLS0JY3JlYXRlIGtleQora2V5X2VudGVyCQkJa2VudAlzdHIJQDgJS0VZX0VOVEVSCTA1MjcJLS0tLS0JZW50ZXIvc2VuZCBrZXkKK2tleV9leGl0CQkJa2V4dAlzdHIJQDkJS0VZX0VYSVQJMDU1MQktLS0tLQlleGl0IGtleQora2V5X2YzNwkJCQlrZjM3CXN0cglGUglLRVlfRigzNykJLQktLS0tRQlGMzcgZnVuY3Rpb24ga2V5CitrZXlfZjM4CQkJCWtmMzgJc3RyCUZTCUtFWV9GKDM4KQktCS0tLS1FCUYzOCBmdW5jdGlvbiBrZXkKK2tleV9mMzkJCQkJa2YzOQlzdHIJRlQJS0VZX0YoMzkpCS0JLS0tLUUJRjM5IGZ1bmN0aW9uIGtleQora2V5X2Y0MAkJCQlrZjQwCXN0cglGVQlLRVlfRig0MCkJLQktLS0tRQlGNDAgZnVuY3Rpb24ga2V5CitrZXlfZjQxCQkJCWtmNDEJc3RyCUZWCUtFWV9GKDQxKQktCS0tLS1FCUY0MSBmdW5jdGlvbiBrZXkKK2tleV9mNDIJCQkJa2Y0MglzdHIJRlcJS0VZX0YoNDIpCS0JLS0tLUUJRjQyIGZ1bmN0aW9uIGtleQora2V5X2Y0MwkJCQlrZjQzCXN0cglGWAlLRVlfRig0MykJLQktLS0tRQlGNDMgZnVuY3Rpb24ga2V5CitrZXlfZjQ0CQkJCWtmNDQJc3RyCUZZCUtFWV9GKDQ0KQktCS0tLS1FCUY0NCBmdW5jdGlvbiBrZXkKK2tleV9mNDUJCQkJa2Y0NQlzdHIJRloJS0VZX0YoNDUpCS0JLS0tLUUJRjQ1IGZ1bmN0aW9uIGtleQora2V5X2Y0NgkJCQlrZjQ2CXN0cglGYQlLRVlfRig0NikJLQktLS0tRQlGNDYgZnVuY3Rpb24ga2V5CitrZXlfZjQ3CQkJCWtmNDcJc3RyCUZiCUtFWV9GKDQ3KQktCS0tLS1FCUY0NyBmdW5jdGlvbiBrZXkKK2tleV9mNDgJCQkJa2Y0OAlzdHIJRmMJS0VZX0YoNDgpCS0JLS0tLUUJRjQ4IGZ1bmN0aW9uIGtleQora2V5X2Y0OQkJCQlrZjQ5CXN0cglGZAlLRVlfRig0OSkJLQktLS0tRQlGNDkgZnVuY3Rpb24ga2V5CitrZXlfZjUwCQkJCWtmNTAJc3RyCUZlCUtFWV9GKDUwKQktCS0tLS1FCUY1MCBmdW5jdGlvbiBrZXkKK2tleV9mNTEJCQkJa2Y1MQlzdHIJRmYJS0VZX0YoNTEpCS0JLS0tLUUJRjUxIGZ1bmN0aW9uIGtleQora2V5X2Y1MgkJCQlrZjUyCXN0cglGZwlLRVlfRig1MikJLQktLS0tRQlGNTIgZnVuY3Rpb24ga2V5CitrZXlfZjUzCQkJCWtmNTMJc3RyCUZoCUtFWV9GKDUzKQktCS0tLS1FCUY1MyBmdW5jdGlvbiBrZXkKK2tleV9mNTQJCQkJa2Y1NAlzdHIJRmkJS0VZX0YoNTQpCS0JLS0tLUUJRjU0IGZ1bmN0aW9uIGtleQora2V5X2Y1NQkJCQlrZjU1CXN0cglGaglLRVlfRig1NSkJLQktLS0tRQlGNTUgZnVuY3Rpb24ga2V5CitrZXlfZjU2CQkJCWtmNTYJc3RyCUZrCUtFWV9GKDU2KQktCS0tLS1FCUY1NiBmdW5jdGlvbiBrZXkKK2tleV9mNTcJCQkJa2Y1NwlzdHIJRmwJS0VZX0YoNTcpCS0JLS0tLUUJRjU3IGZ1bmN0aW9uIGtleQora2V5X2Y1OAkJCQlrZjU4CXN0cglGbQlLRVlfRig1OCkJLQktLS0tRQlGNTggZnVuY3Rpb24ga2V5CitrZXlfZjU5CQkJCWtmNTkJc3RyCUZuCUtFWV9GKDU5KQktCS0tLS1FCUY1OSBmdW5jdGlvbiBrZXkKK2tleV9mNjAJCQkJa2Y2MAlzdHIJRm8JS0VZX0YoNjApCS0JLS0tLUUJRjYwIGZ1bmN0aW9uIGtleQora2V5X2Y2MQkJCQlrZjYxCXN0cglGcAlLRVlfRig2MSkJLQktLS0tRQlGNjEgZnVuY3Rpb24ga2V5CitrZXlfZjYyCQkJCWtmNjIJc3RyCUZxCUtFWV9GKDYyKQktCS0tLS1FCUY2MiBmdW5jdGlvbiBrZXkKK2tleV9mNjMJCQkJa2Y2MwlzdHIJRnIJS0VZX0YoNjMpCS0JLS0tLUUJRjYzIGZ1bmN0aW9uIGtleQora2V5X2ZpbmQJCQlrZm5kCXN0cglAMAlLRVlfRklORAkwNTUyCS0tLS0tCWZpbmQga2V5CitrZXlfbWFyawkJCWttcmsJc3RyCSUyCUtFWV9NQVJLCTA1NTQJLS0tLS0JbWFyayBrZXkKK2tleV9tZXNzYWdlCQkJa21zZwlzdHIJJTMJS0VZX01FU1NBR0UJMDU1NQktLS0tLQltZXNzYWdlIGtleQora2V5X21vdXNlCQkJa21vdXMJc3RyCUttCUtFWV9NT1VTRQkwNjMxCS0tLS0tCU1vdXNlIGV2ZW50IGhhcyBvY2N1cnJlZAora2V5X21vdmUJCQlrbW92CXN0cgklNAlLRVlfTU9WRQkwNTU2CS0tLS0tCW1vdmUga2V5CitrZXlfbmV4dAkJCWtueHQJc3RyCSU1CUtFWV9ORVhUCTA1NTcJLS0tLS0JbmV4dCBrZXkKK2tleV9vcGVuCQkJa29wbglzdHIJJTYJS0VZX09QRU4JMDU2MAktLS0tLQlvcGVuIGtleQora2V5X29wdGlvbnMJCQlrb3B0CXN0cgklNwlLRVlfT1BUSU9OUwkwNTYxCS0tLS0tCW9wdGlvbnMga2V5CitrZXlfcHJldmlvdXMJCQlrcHJ2CXN0cgklOAlLRVlfUFJFVklPVVMJMDU2MgktLS0tLQlwcmV2aW91cyBrZXkKK2tleV9wcmludAkJCWtwcnQJc3RyCSU5CUtFWV9QUklOVAkwNTMyCS0tLS0tCXByaW50IGtleQora2V5X3JlZG8JCQlrcmRvCXN0cgklMAlLRVlfUkVETwkwNTYzCS0tLS0tCXJlZG8ga2V5CitrZXlfcmVmZXJlbmNlCQkJa3JlZglzdHIJJjEJS0VZX1JFRkVSRU5DRQkwNTY0CS0tLS0tCXJlZmVyZW5jZSBrZXkKK2tleV9yZWZyZXNoCQkJa3JmcglzdHIJJjIJS0VZX1JFRlJFU0gJMDU2NQktLS0tLQlyZWZyZXNoIGtleQora2V5X3JlcGxhY2UJCQlrcnBsCXN0cgkmMwlLRVlfUkVQTEFDRQkwNTY2CS0tLS0tCXJlcGxhY2Uga2V5CitrZXlfcmVzdGFydAkJCWtyc3QJc3RyCSY0CUtFWV9SRVNUQVJUCTA1NjcJLS0tLS0JcmVzdGFydCBrZXkKK2tleV9yZXN1bWUJCQlrcmVzCXN0cgkmNQlLRVlfUkVTVU1FCTA1NzAJLS0tLS0JcmVzdW1lIGtleQora2V5X3NhdmUJCQlrc2F2CXN0cgkmNglLRVlfU0FWRQkwNTcxCS0tLS0tCXNhdmUga2V5CitrZXlfc2JlZwkJCWtCRUcJc3RyCSY5CUtFWV9TQkVHCTA1NzIJLS0tLS0Jc2hpZnRlZCBiZWdpbiBrZXkKK2tleV9zY2FuY2VsCQkJa0NBTglzdHIJJjAJS0VZX1NDQU5DRUwJMDU3MwktLS0tLQlzaGlmdGVkIGNhbmNlbCBrZXkKK2tleV9zY29tbWFuZAkJCWtDTUQJc3RyCSoxCUtFWV9TQ09NTUFORAkwNTc0CS0tLS0tCXNoaWZ0ZWQgY29tbWFuZCBrZXkKK2tleV9zY29weQkJCWtDUFkJc3RyCSoyCUtFWV9TQ09QWQkwNTc1CS0tLS0tCXNoaWZ0ZWQgY29weSBrZXkKK2tleV9zY3JlYXRlCQkJa0NSVAlzdHIJKjMJS0VZX1NDUkVBVEUJMDU3NgktLS0tLQlzaGlmdGVkIGNyZWF0ZSBrZXkKK2tleV9zZGMJCQkJa0RDCXN0cgkqNAlLRVlfU0RDCQkwNTc3CS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9zZGwJCQkJa0RMCXN0cgkqNQlLRVlfU0RMCQkwNjAwCS0tLS0tCXNoaWZ0ZWQgZGVsZXRlLWxpbmUga2V5CitrZXlfc2VuZAkJCWtFTkQJc3RyCSo3CUtFWV9TRU5ECTA2MDIJLS0tLS0Jc2hpZnRlZCBlbmQga2V5CitrZXlfc2VvbAkJCWtFT0wJc3RyCSo4CUtFWV9TRU9MCTA2MDMJLS0tLS0Jc2hpZnRlZCBjbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9zZXhpdAkJCWtFWFQJc3RyCSo5CUtFWV9TRVhJVAkwNjA0CS0tLS0tCXNoaWZ0ZWQgZXhpdCBrZXkKK2tleV9zZmluZAkJCWtGTkQJc3RyCSowCUtFWV9TRklORAkwNjA1CS0tLS0tCXNoaWZ0ZWQgZmluZCBrZXkKK2tleV9zaGVscAkJCWtITFAJc3RyCSMxCUtFWV9TSEVMUAkwNjA2CS0tLS0tCXNoaWZ0ZWQgaGVscCBrZXkKK2tleV9zaG9tZQkJCWtIT00Jc3RyCSMyCUtFWV9TSE9NRQkwNjA3CS0tLS0tCXNoaWZ0ZWQgaG9tZSBrZXkKK2tleV9zaWMJCQkJa0lDCXN0cgkjMwlLRVlfU0lDCQkwNjEwCS0tLS0tCXNoaWZ0ZWQgaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9zbGVmdAkJCWtMRlQJc3RyCSM0CUtFWV9TTEVGVAkwNjExCS0tLS0tCXNoaWZ0ZWQgbGVmdC1hcnJvdyBrZXkKK2tleV9zbWVzc2FnZQkJCWtNU0cJc3RyCSVhCUtFWV9TTUVTU0FHRQkwNjEyCS0tLS0tCXNoaWZ0ZWQgbWVzc2FnZSBrZXkKK2tleV9zbW92ZQkJCWtNT1YJc3RyCSViCUtFWV9TTU9WRQkwNjEzCS0tLS0tCXNoaWZ0ZWQgbW92ZSBrZXkKK2tleV9zbmV4dAkJCWtOWFQJc3RyCSVjCUtFWV9TTkVYVAkwNjE0CS0tLS0tCXNoaWZ0ZWQgbmV4dCBrZXkKK2tleV9zb3B0aW9ucwkJCWtPUFQJc3RyCSVkCUtFWV9TT1BUSU9OUwkwNjE1CS0tLS0tCXNoaWZ0ZWQgb3B0aW9ucyBrZXkKK2tleV9zcHJldmlvdXMJCQlrUFJWCXN0cgklZQlLRVlfU1BSRVZJT1VTCTA2MTYJLS0tLS0Jc2hpZnRlZCBwcmV2aW91cyBrZXkKK2tleV9zcHJpbnQJCQlrUFJUCXN0cgklZglLRVlfU1BSSU5UCTA2MTcJLS0tLS0Jc2hpZnRlZCBwcmludCBrZXkKK2tleV9zcmVkbwkJCWtSRE8Jc3RyCSVnCUtFWV9TUkVETwkwNjIwCS0tLS0tCXNoaWZ0ZWQgcmVkbyBrZXkKK2tleV9zcmVwbGFjZQkJCWtSUEwJc3RyCSVoCUtFWV9TUkVQTEFDRQkwNjIxCS0tLS0tCXNoaWZ0ZWQgcmVwbGFjZSBrZXkKK2tleV9zcmlnaHQJCQlrUklUCXN0cgklaQlLRVlfU1JJR0hUCTA2MjIJLS0tLS0Jc2hpZnRlZCByaWdodC1hcnJvdyBrZXkKK2tleV9zcnN1bWUJCQlrUkVTCXN0cgklaglLRVlfU1JTVU1FCTA2MjMJLS0tLS0Jc2hpZnRlZCByZXN1bWUga2V5CitrZXlfc3NhdmUJCQlrU0FWCXN0cgkhMQlLRVlfU1NBVkUJMDYyNAktLS0tLQlzaGlmdGVkIHNhdmUga2V5CitrZXlfc3N1c3BlbmQJCQlrU1BECXN0cgkhMglLRVlfU1NVU1BFTkQJMDYyNQktLS0tLQlzaGlmdGVkIHN1c3BlbmQga2V5CitrZXlfc3VuZG8JCQlrVU5ECXN0cgkhMwlLRVlfU1VORE8JMDYyNgktLS0tLQlzaGlmdGVkIHVuZG8ga2V5CitrZXlfc3VzcGVuZAkJCWtzcGQJc3RyCSY3CUtFWV9TVVNQRU5ECTA2MjcJLS0tLS0Jc3VzcGVuZCBrZXkKK2tleV91bmRvCQkJa3VuZAlzdHIJJjgJS0VZX1VORE8JMDYzMAktLS0tLQl1bmRvIGtleQorbGFiZWxfZm9ybWF0CQkJZmxuCXN0cglMZgktCQktCS0tLS0tCWxhYmVsIGZvcm1hdAorbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscworbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKK21pY3JvX2NvbHVtbl9hZGRyZXNzCQltaHBhCXN0cglaWQktCQktCS0tLS0tCUxpa2UgY29sdW1uX2FkZHJlc3MgaW4gbWljcm8gbW9kZQorbWljcm9fZG93bgkJCW1jdWQxCXN0cglaWgktCQktCS0tLS0tCUxpa2UgY3Vyc29yX2Rvd24gaW4gbWljcm8gbW9kZQorbWljcm9fbGVmdAkJCW1jdWIxCXN0cglaYQktCQktCS0tLS0tCUxpa2UgY3Vyc29yX2xlZnQgaW4gbWljcm8gbW9kZQorbWljcm9fcmlnaHQJCQltY3VmMQlzdHIJWmIJLQkJLQktLS0tLQlMaWtlIGN1cnNvcl9yaWdodCBpbiBtaWNybyBtb2RlCittaWNyb19yb3dfYWRkcmVzcwkJbXZwYQlzdHIJWmMJLQkJLQktLS0tLQlMaWtlIHJvd19hZGRyZXNzICMxIGluIG1pY3JvIG1vZGUKK21pY3JvX3VwCQkJbWN1dTEJc3RyCVpkCS0JCS0JLS0tLS0JTGlrZSBjdXJzb3JfdXAgaW4gbWljcm8gbW9kZQorbW91c2VfaW5mbwkJCW1pbmZvCXN0cglNaQktCQktCS0tLS0tCU1vdXNlIHN0YXR1cyBpbmZvcm1hdGlvbgorb3JkZXJfb2ZfcGlucwkJCXBvcmRlcglzdHIJWmUJLQkJLQktLS0tLQlNYXRjaCBzb2Z0d2FyZSBiaXRzIHRvIHByaW50LWhlYWQgcGlucworb3JpZ19jb2xvcnMJCQlvYwlzdHIJb2MJLQkJLQktLS0tLQlTZXQgYWxsIGNvbG9yIHBhaXJzIHRvIHRoZSBvcmlnaW5hbCBvbmVzCitvcmlnX3BhaXIJCQlvcAlzdHIJb3AJLQkJLQktLS0tLQlTZXQgZGVmYXVsdCBwYWlyIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQorcGFybV9kb3duX21pY3JvCQkJbWN1ZAlzdHIJWmYJLQkJLQktLS0tLQlMaWtlIHBhcm1fZG93bl9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGFybV9sZWZ0X21pY3JvCQkJbWN1YglzdHIJWmcJLQkJLQktLS0tLQlMaWtlIHBhcm1fbGVmdF9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGFybV9yaWdodF9taWNybwkJbWN1ZglzdHIJWmgJLQkJLQktLS0tLQlMaWtlIHBhcm1fcmlnaHRfY3Vyc29yIGluIG1pY3JvIG1vZGUKK3Bhcm1fdXBfbWljcm8JCQltY3V1CXN0cglaaQktCQktCS0tLS0tCUxpa2UgcGFybV91cF9jdXJzb3IgaW4gbWljcm8gbW9kZQorcGNfdGVybV9vcHRpb25zCQkJcGN0cm0Jc3RyCVM2CS0JCS0JLS0tLS0JUEMgdGVybWluYWwgb3B0aW9ucworcGtleV9wbGFiCQkJcGZ4bAlzdHIJeGwJLQkJLQktLS0tLQlQcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMiBhbmQgc2hvdyBzdHJpbmcgIzMKK3BsYWJfbm9ybQkJCXBsbglzdHIJcG4JLQkJLQktLS0tLQlwcm9ncmFtIGxhYmVsICMxIHRvIHNob3cgc3RyaW5nICMyCitwdWxzZQkJCQlwdWxzZQlzdHIJUFUJLQkJLQktLS0tLQlzZWxlY3QgcHVsc2UgZGlhbGluZworcXVpY2tfZGlhbAkJCXFkaWFsCXN0cglRRAktCQktCS0tLS0tCWRpYWwgbnVtYmVyICMxIHdpdGhvdXQgY2hlY2tpbmcKK3JlcV9mb3JfaW5wdXQJCQlyZmkJc3RyCVJGCS0JCS0JLS0tLS0Jc2VuZCBuZXh0IGlucHV0IGNoYXIgKGZvciBwdHlzKQorcmVxX21vdXNlX3BvcwkJCXJlcW1wCXN0cglSUQktCQktCS0tLS0tCVJlcXVlc3QgbW91c2UgcG9zaXRpb24KK3JlbW92ZV9jbG9jawkJCXJtY2xrCXN0cglSQwktCQktCS0tLS0tCXJlbW92ZSBjbG9jaworc2NhbmNvZGVfZXNjYXBlCQkJc2Nlc2MJc3RyCVM3CS0JCS0JLS0tLS0JRXNjYXBlIGZvciBzY2FuY29kZSBlbXVsYXRpb24KK3NlbGVjdF9jaGFyX3NldAkJCXNjcwlzdHIJWmoJLQkJLQktLS0tLQlTZWxlY3QgY2hhcmFjdGVyIHNldCwgIzEKK3NldDBfZGVzX3NlcQkJCXMwZHMJc3RyCXMwCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAwIChFVUMgc2V0IDAsIEFTQ0lJKQorc2V0MV9kZXNfc2VxCQkJczFkcwlzdHIJczEJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDEKK3NldDJfZGVzX3NlcQkJCXMyZHMJc3RyCXMyCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAyCitzZXQzX2Rlc19zZXEJCQlzM2RzCXN0cglzMwktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMworc2V0X2FfYmFja2dyb3VuZAkJc2V0YWIJc3RyCUFCCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitzZXRfYV9mb3JlZ3JvdW5kCQlzZXRhZglzdHIJQUYJLQkJLQktLS0tLQlTZXQgZm9yZWdyb3VuZCBjb2xvciB0byAjMSwgdXNpbmcgQU5TSSBlc2NhcGUKK3NldF9iYWNrZ3JvdW5kCQkJc2V0YglzdHIJU2IJLQkJLQktLS0tLQlTZXQgYmFja2dyb3VuZCBjb2xvciAjMQorc2V0X2JvdHRvbV9tYXJnaW4JCXNtZ2IJc3RyCVprCS0JCS0JLS0tLS0JU2V0IGJvdHRvbSBtYXJnaW4gYXQgY3VycmVudCBsaW5lCitzZXRfYm90dG9tX21hcmdpbl9wYXJtCQlzbWdicAlzdHIJWmwJLQkJLQktLS0tLQlTZXQgYm90dG9tIG1hcmdpbiBhdCBsaW5lICMxIG9yIChpZiBzbWd0cCBpcyBub3QgZ2l2ZW4pICMyIGxpbmVzIGZyb20gYm90dG9tCitzZXRfY2xvY2sJCQlzY2xrCXN0cglTQwktCQktCS0tLS0tCXNldCBjbG9jaywgIzEgaHJzICMyIG1pbnMgIzMgc2Vjcworc2V0X2NvbG9yX2JhbmQJCXNldGNvbG9yCXN0cglZegktCQktCS0tLS0tCUNoYW5nZSB0byByaWJib24gY29sb3IgIzEKK3NldF9jb2xvcl9wYWlyCQkJc2NwCXN0cglzcAktCQktCS0tLS0tCVNldCBjdXJyZW50IGNvbG9yIHBhaXIgdG8gIzEKK3NldF9mb3JlZ3JvdW5kCQkJc2V0ZglzdHIJU2YJLQkJLQktLS0tLQlTZXQgZm9yZWdyb3VuZCBjb2xvciAjMQorc2V0X2xlZnRfbWFyZ2luCQkJc21nbAlzdHIJTUwJLQkJLQktLS0tLQlzZXQgbGVmdCBzb2Z0IG1hcmdpbiBhdCBjdXJyZW50IGNvbHVtbi4JIFNlZSBzbWdsLiAoTUwgaXMgbm90IGluIEJTRCB0ZXJtY2FwKS4KK3NldF9sZWZ0X21hcmdpbl9wYXJtCQlzbWdscAlzdHIJWm0JLQkJLQktLS0tLQlTZXQgbGVmdCAocmlnaHQpIG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF9scl9tYXJnaW4JCQlzbWdscglzdHIJTUwJLQkJLQktLS0tLQlTZXQgYm90aCBsZWZ0IGFuZCByaWdodCBtYXJnaW5zIHRvICMxLCAjMi4gIChNTCBpcyBub3QgaW4gQlNEIHRlcm1jYXApLgorc2V0X3BhZ2VfbGVuZ3RoCQkJc2xpbmVzCXN0cglZWgktCQktCS0tLS0tCVNldCBwYWdlIGxlbmd0aCB0byAjMSBsaW5lcworc2V0X3JpZ2h0X21hcmdpbgkJc21ncglzdHIJTVIJLQkJLQktLS0tLQlzZXQgcmlnaHQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4KK3NldF9yaWdodF9tYXJnaW5fcGFybQkJc21ncnAJc3RyCVpuCS0JCS0JLS0tLS0JU2V0IHJpZ2h0IG1hcmdpbiBhdCBjb2x1bW4gIzEKK3NldF90Yl9tYXJnaW4JCQlzbWd0YglzdHIJTVQJLQkJLQktLS0tLQlTZXRzIGJvdGggdG9wIGFuZCBib3R0b20gbWFyZ2lucyB0byAjMSwgIzIKK3NldF90b3BfbWFyZ2luCQkJc21ndAlzdHIJWm8JLQkJLQktLS0tLQlTZXQgdG9wIG1hcmdpbiBhdCBjdXJyZW50IGxpbmUKK3NldF90b3BfbWFyZ2luX3Bhcm0JCXNtZ3RwCXN0cglacAktCQktCS0tLS0tCVNldCB0b3AgKGJvdHRvbSkgbWFyZ2luIGF0IHJvdyAjMQorc3RhcnRfYml0X2ltYWdlCQkJc2JpbQlzdHIJWnEJLQkJLQktLS0tLQlTdGFydCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0YXJ0X2NoYXJfc2V0X2RlZgkJc2NzZAlzdHIJWnIJLQkJLQktLS0tLQlTdGFydCBjaGFyYWN0ZXIgc2V0IGRlZmluaXRpb24gIzEsIHdpdGggIzIgY2hhcmFjdGVycyBpbiB0aGUgc2V0CitzdG9wX2JpdF9pbWFnZQkJCXJiaW0Jc3RyCVpzCS0JCS0JLS0tLS0JU3RvcCBwcmludGluZyBiaXQgaW1hZ2UgZ3JhcGhpY3MKK3N0b3BfY2hhcl9zZXRfZGVmCQlyY3NkCXN0cgladAktCQktCS0tLS0tCUVuZCBkZWZpbml0aW9uIG9mIGNoYXJhY3RlciBzZXQgIzEKK3N1YnNjcmlwdF9jaGFyYWN0ZXJzCQlzdWJjcwlzdHIJWnUJLQkJLQktLS0tLQlMaXN0IG9mIHN1YnNjcmlwdGFibGUgY2hhcmFjdGVycworc3VwZXJzY3JpcHRfY2hhcmFjdGVycwkJc3VwY3MJc3RyCVp2CS0JCS0JLS0tLS0JTGlzdCBvZiBzdXBlcnNjcmlwdGFibGUgY2hhcmFjdGVycwordGhlc2VfY2F1c2VfY3IJCQlkb2NyCXN0cgladwktCQktCS0tLS0tCVByaW50aW5nIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJzIGNhdXNlcyBDUgordG9uZQkJCQl0b25lCXN0cglUTwktCQktCS0tLS0tCXNlbGVjdCB0b3VjaCB0b25lIGRpYWxpbmcKK3VzZXIwCQkJCXUwCXN0cgl1MAktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMwCit1c2VyMQkJCQl1MQlzdHIJdTEJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjMQordXNlcjIJCQkJdTIJc3RyCXUyCS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzIKK3VzZXIzCQkJCXUzCXN0cgl1MwktCQktCS0tLS0tCVVzZXIgc3RyaW5nICMzCit1c2VyNAkJCQl1NAlzdHIJdTQJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNAordXNlcjUJCQkJdTUJc3RyCXU1CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzUKK3VzZXI2CQkJCXU2CXN0cgl1NgktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM2Cit1c2VyNwkJCQl1NwlzdHIJdTcJLQkJLQktLS0tLQlVc2VyIHN0cmluZyAjNwordXNlcjgJCQkJdTgJc3RyCXU4CS0JCS0JLS0tLS0JVXNlciBzdHJpbmcgIzgKK3VzZXI5CQkJCXU5CXN0cgl1OQktCQktCS0tLS0tCVVzZXIgc3RyaW5nICM5Cit3YWl0X3RvbmUJCQl3YWl0CXN0cglXQQktCQktCS0tLS0tCXdhaXQgZm9yIGRpYWwtdG9uZQoreG9mZl9jaGFyYWN0ZXIJCQl4b2ZmYwlzdHIJWEYJLQkJLQktLS0tLQlYT0ZGIGNoYXJhY3RlcgoreG9uX2NoYXJhY3RlcgkJCXhvbmMJc3RyCVhOCS0JCS0JLS0tLS0JWE9OIGNoYXJhY3RlcgoremVyb19tb3Rpb24JCQl6ZXJvbQlzdHIJWngJLQkJLQktLS0tLQlObyBtb3Rpb24gZm9yIHN1YnNlcXVlbnQgY2hhcmFjdGVyCitzZXRfcGdsZW5faW5jaAkJCXNsZW5ndGgJc3RyCXNMCS0JCS0JLS0tLS0JWUkgU2V0IHBhZ2UgbGVuZ3RoIHRvICMxIGh1bmRyZWR0aCBvZiBhbiBpbmNoCitlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUJZWhobG0Jc3RyCVhoCS0JCS0JLS0tLS0JRW50ZXIgaG9yaXpvbnRhbCBoaWdobGlnaHQgbW9kZQorZW50ZXJfbGVmdF9obF9tb2RlCQllbGhsbQlzdHIJWGwJLQkJLQktLS0tLQlFbnRlciBsZWZ0IGhpZ2hsaWdodCBtb2RlCitlbnRlcl9sb3dfaGxfbW9kZQkJZWxvaGxtCXN0cglYbwktCQktCS0tLS0tCUVudGVyIGxvdyBoaWdobGlnaHQgbW9kZQorZW50ZXJfcmlnaHRfaGxfbW9kZQkJZXJobG0Jc3RyCVhyCS0JCS0JLS0tLS0JRW50ZXIgcmlnaHQgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3RvcF9obF9tb2RlCQlldGhsbQlzdHIJWHQJLQkJLQktLS0tLQlFbnRlciB0b3AgaGlnaGxpZ2h0IG1vZGUKK2VudGVyX3ZlcnRpY2FsX2hsX21vZGUJCWV2aGxtCXN0cglYdgktCQktCS0tLS0tCUVudGVyIHZlcnRpY2FsIGhpZ2hsaWdodCBtb2RlCitzZXRfYV9hdHRyaWJ1dGVzCQlzZ3IxCXN0cglzQQktCQktCS0tLS0tCURlZmluZSBzZWNvbmQgc2V0IG9mIHZpZGVvIGF0dHJpYnV0ZXMgIzEtIzYKKyMKKyMKKyMKKyMgJSUtU1RPUC1IRVJFLSUlCisjCisjIERvbid0IG1vdmUgdGhpcyBjYXN1YWxseSEgIEluIGZhY3QsIGRvbid0IG1vdmUgaXQgYXQgYWxsIHVubGVzcyB5b3UncmUKKyMgZWl0aGVyIGRvaW5nIGl0IHRvIGFkZCBTeXN0ZW0gViBvciBYUEc0IGV4dGVuc2lvbnMsIG9yIGhhdmUgZGVjaWRlZCB5b3UKKyMgZG9uJ3QgY2FyZSBhYm91dCBTVnI0IGJpbmFyeSBjb21wYXRpYmlsaXR5LgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVEVSTUNBUCBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoZSBjYXBhYmlsaXRpZXMgYmVsb3cgYXJlIGVpdGhlciBvYnNvbGV0ZSBvciBleHRlbnNpb25zIG9uIGNlcnRhaW4gc3lzdGVtcy4KKyMgVGhleSBhcmUgbm90IHVzZWQgYnkgU1ZSNCB0ZXJtaW5mby4gIFNvbWUgYXJlIHVzZWQgYnkgY2FwdG9pbmZvIHRvIHRyYW5zbGF0ZQorIyB0ZXJtY2FwIHNvdXJjZXM7IHRoZSByZXN0IGFyZSBsaXN0ZWQgZm9yIGNvbXBsZXRlbmVzcywgYW5kIGluIGNhc2Ugc29tZWJvZHkKKyMgY2FyZXMgYWJvdXQgdGhlbSBlbm91Z2ggdG8gaGFjayBpbiBjb2RlIHRoYXQgd2lsbCB0cmFuc2xhdGUgdGhlbSBpbnRvCisjIHRlcm1pbmZvIGNhcGFiaWxpdGllcy4KKyMKKyMgVGhlIGZpcnN0IHBhcnQgb2YgdGhlIGxpc3QgaXMgZnJvbSBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UKKyMgKGNvbXAuc291cmNlcy51bml4LCB2b2x1bWUgMjYpOyB0aGUgdmFyaWFibGUgbmFtZXMgYW5kIHRlcm1pbmZvIG5hbWVzIChhcworIyB3ZWxsIGFzIHRoZSB0ZXJtY2FwIGNvZGVzKSBtYXRjaCBoaXMgbGlzdC4KKyMKKyMgVGhpcyBncm91cCBvZiBjb2RlcyBpcyBub3QgbWFya2VkIG9ic29sZXRlIGluIDQuNEJTRCwgYnV0IGhhdmUgbm8gZGlyZWN0CisjIHRlcm1pbmZvIGVxdWl2YWxlbnRzLiAgVGhlIHJzIGNhcGFiaWxpdHkgaXMgc3BlY2lhbGx5IHRyYW5zbGF0ZWQgdG8gdGVybWluZm8KKyMgcjIsIGFuZCB2aWNlIHZlcnNhLCBpZiBhbiBlbnRyeSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW4gcjIuICBTaW1pbGFybHksCisjIGkyIGlzIHRyYW5zbGF0ZWQgdG8gcjMgaWYgdGhlcmUgaXMgbm8gcjMgKGJlY2F1c2UgU1YgdGVybWluZm8gbWFwcyBpcyB0byBpMikuCisjIFRoZSB1ZyBjYXBhYmlsaXR5IGlzIHRocm93biBhd2F5LCBidXQgYXNzdW1lZCB0byBiZSB3aGF0ZXZlciBzZyBpcyBpZiB0aGUKKyMgbGF0dGVyIGlzIG5vbnplcm8gYW5kIHdlJ3JlIGR1bXBpbmcgaW4gdGVybWNhcCBmb3JtYXQuCisjCit0ZXJtY2FwX2luaXQyCQkJT1RpMglzdHIJaTIJLQkJLQlZQi0tLQlzZWNvbmRhcnkgaW5pdGlhbGl6YXRpb24gc3RyaW5nCit0ZXJtY2FwX3Jlc2V0CQkJT1RycwlzdHIJcnMJLQkJLQlZQi1HLQl0ZXJtaW5hbCByZXNldCBzdHJpbmcKK21hZ2ljX2Nvb2tpZV9nbGl0Y2hfdWwJCU9UdWcJbnVtCXVnCS0JCS0JWUJDR0UJbnVtYmVyIG9mIGJsYW5rcyBsZWZ0IGJ5IHVsCisjCisjIE9ic29sZXRlIHRlcm1jYXAgY2FwYWJpbGl0aWVzLiAgU29tZSBhcmUgdXNlZCBmb3IgdGVybWNhcCB0cmFuc2xhdGlvbi4gIFRoZQorIyBjb2RlIHVzZXMgdGhlICdPVCcgcHJlZml4IHdlIHB1dCBvbiBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgdG8gc3VwcHJlc3MKKyMgcHJpbnRpbmcgdGhlbSBpbiB0ZXJtaW5mbyBzb3VyY2UgZHVtcHMgb2YgY29tcGlsZWQgZW50cmllcy4KKyMKK2JhY2tzcGFjZXNfd2l0aF9icwkJT1Ricwlib29sCWJzCS0JCS0JWUJDR0UJdXNlcyBeSCB0byBtb3ZlIGxlZnQKK2NydF9ub19zY3JvbGxpbmcJCU9UbnMJYm9vbAlucwktCQktCVlCQ0ctCWNydCBjYW5ub3Qgc2Nyb2xsCitub19jb3JyZWN0bHlfd29ya2luZ19jcgkJT1RuYwlib29sCW5jCS0JCS0JWUJDRy0Jbm8gd2F5IHRvIGdvIHRvIHN0YXJ0IG9mIGxpbmUKK2NhcnJpYWdlX3JldHVybl9kZWxheQkJT1RkQwludW0JZEMJLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBDUgorbmV3X2xpbmVfZGVsYXkJCQlPVGROCW51bQlkTgktCQktCVlCLUctCXBhZCBuZWVkZWQgZm9yIExGCitsaW5lZmVlZF9pZl9ub3RfbGYJCU9UbmwJc3RyCW5sCS0JCS0JWUJDR0UJdXNlIHRvIG1vdmUgZG93bgorYmFja3NwYWNlX2lmX25vdF9icwkJT1RiYwlzdHIJYmMJLQkJLQlZQkNHRQltb3ZlIGxlZnQsIGlmIG5vdCBeSAorIworIyBHTlUgdGVybWNhcCBsaWJyYXJ5IGV4dGVuc2lvbnMuICBUaGUgR05VIHRlcm1jYXAgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIEVtYWNzIG5vIGxvbmdlciB1c2VzIHRoZXNlLCBidXQgTVQgc2hvd2VkIHVwIGluIHByZS05LjAgdmVyc2lvbnMgb2YgdGhlCisjIEJTRCB0ZXJtY2FwIGZpbGUuICBUaGUgbmFtZSBjbGFzaCB3aXRoIHRlcm1pbmZvIE1UIGlzIHJlc29sdmVkIGJ5IHR5cGUKKyMgaW5mbzsgTVQgaXMgY29udmVydGVkIHRvIGttLgorIworZ251X2hhc19tZXRhX2tleQkJT1RNVAlib29sCU1UCS0JCS0JLS0tLUUJaGFzIG1ldGEga2V5CisjIGdudV90YWJfd2lkdGgJCQlPVHR3CW51bQl0dwktCQktCS0tLS1FCXRhYiB3aWR0aCBpbiBzcGFjZXMKKyMKKyMgR05VIHRlcm1jYXAgKmRvZXMqIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBleHRlbmRlZCBjYXBhYmlsaXR5LCAgT25seSB0aGUKKyMgbm93LW9ic29sZXRlIEFubiBBcmJvciB0ZXJtaW5hbHMgdXNlZCBpdC4KKyMKKyMgZ251X2NoYW5nZV9zY3JvbGxfcmVnaW9uCU9UY1MJc3RyCWNTCS0JCS0JLS0tR0UJYWx0ZXJuYXRlIHNldCBzY3JvbGxpbmcgcmVnaW9uIAorIworIyBUaGUgZm9sbG93aW5nIGNvbW1lbnRzIGRlc2NyaWJlIGNhcG5hbWVzIHNvIGFuY2llbnQgdGhhdCBJIGJlbGlldmUgbm8KKyMgc29mdHdhcmUgdXNlcyB0aGVtIGFueSBsb25nZXIuICBTb21lIG9mIHRoZXNlIGhhdmUgdG8gZ28gYmVjYXVzZSB0aGV5CisjIGNsYXNoIHdpdGggdGVybWluZm8gbmFtZXMgaW4gd2F5cyB0aGF0IGNhbm5vdCBiZSByZXNvbHZlZCBieSB0eXBlCisjIGluZm9ybWF0aW9uLgorIworIyBUaGVzZSBteXRpbmZvIGNvZGVzIGFyZSBub3QgdXNlZCBpbiB0aGUgNC40QlNEIGN1cnNlcyBjb2RlLiAgVGhleSBhcmUKKyMgbWFya2VkIG9ic29sZXRlIGluIHRoZSA0LjRCU0QgbWFudWFsIHBhZ2VzLgorIworIyBUaGVyZSBpcyBvbmUgY29uZmxpY3Qgd2l0aCB0ZXJtaW5mbzsgbWEgaXMgaW4gYm90aC4gIFRoaXMgY29uZmxpY3QgaXMKKyMgcmVzb2x2ZWQgYnkgdHlwZSBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlIGBrbycgY2FwYWJpbGl0eSBpcyB0cmFuc2xhdGVkIGJ5IHNwZWNpYWwgY29kZS4gIEl0IHNob3VsZCBjb250YWluIGEKKyMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2FwYWJpbGl0aWVzIGZvciB3aGljaCB0aGVyZSBhcmUgY29ycmVzcG9uZGluZyBrZXlzLgorIyBUaGUgYGtuJyBjb2RlIGlzIGFjY2VwdGVkIGJ1dCBpZ25vcmVkLgorIworIyBUaGUgYG1hJyBjYXBhYmlsaXR5IHNlZW1zIHRvIGhhdmUgYmVlbiBkZXNpZ25lZCB0byBtYXAgYmV0d2VlbiB0aGUgcm9ndWUoMikKKyMgbW90aW9uIGtleXMgKGluY2x1ZGluZyBqa2hsKSBhbmQgY2hhcmFjdGVycyBlbWl0dGVkIGJ5IGFycm93IGtleXMgb24gc29tZQorIyBwcmltaXRpdmUgcHJlLUFOU0kgdGVybWluYWxzLiAgSXQncyBzbyBvYnNvbGV0ZSBpdCdzIGZvc3NpbGl6ZWQuLi4KKyMKKyMgSGVyZSBpcyBhIGRlc2NyaXB0aW9uIG9mIG1lbW9yeV9sb2NrX2Fib3ZlIGFuZCBtZW1vcnlfdW5sb2NrOgorIyAiWW91IGNhbiAnZnJlZXplJyBkYXRhIG9uIHRoZSBzY3JlZW4gYnkgdHVybmluZyBvbiBNZW1vcnkgTG9jayBpbiBhIGxpbmUgb2YKKyMgdGV4dC4gIEFsbCBsaW5lcyBhYm92ZSB0aGUgY3Vyc29yJ3MgY3VycmVudCBsaW5lIGJlY29tZSBsb2NrZWQgaW4gcGxhY2Ugb24KKyMgdGhlIHNjcmVlbi4gIFRoZW4gZW50ZXIgZGF0YSBub3JtYWxseS4gIFdoZW4gdGhlIHNjcmVlbiBmaWxscyB1cCwgYW55CisjIGZ1cnRoZXIgZGF0YSBlbnRlcmVkIGZvcmNlcyB0aGUgZmlyc3QgbGluZSBvZiB1bmZyb3plbiBsaW5lIHRleHQgdG8gc2Nyb2xsCisjIHVuZGVyIHRoZSBmcm96ZW4gZGF0YS4gIExpbmVzIHNjcm9sbGVkIG9mZiB0aGUgc2NyZWVuIGFyZSBpbnNlcnRlZCBpbnRvCisjIG1lbW9yeSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlIGZpcnN0IGZyb3plbiBsaW5lLiIgKGZyb20gdGhlIEhQIDcwMC85NgorIyBVc2VyJ3MgbWFudWFsKS4gIFZUMTAwL0FOU0kgbWVtb3J5IGxvY2sgc2V0IGlzIFxFWz4yaCwgcmVzZXQgaXMgXEVbPjJsLgorIworIyBBcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGVybWluZm8gYXJlIHN1cHBvc2VkIHRvIGJlaGF2ZSBhcyB0aG91Z2ggeHIgaXMKKyMgYWx3YXlzIHRydWUuCisjCitsaW5lZmVlZF9pc19uZXdsaW5lCQlPVE5MCWJvb2wJTkwJLQkJLQlZQi0tLQltb3ZlIGRvd24gd2l0aCBcbgorIyBldmVuX3Bhcml0eQkJCU9URVAJYm9vbAlFUAktCQktCS1CLS0tCXRlcm1pbmFsIHJlcXVpcmVzIGV2ZW4gcGFyaXR5CisjIG9kZF9wYXJpdHkJCQlPVE9QCWJvb2wJT1AJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBvZGQgcGFyaXR5CisjIGhhbGZfZHVwbGV4CQkJT1RIRAlib29sCUhECS0JCS0JLUItLS0JdGVybWluYWwgaXMgaGFsZi1kdXBsZXgKKyMgbG93ZXJfY2FzZV9vbmx5CQlPVExDCWJvb2wJTEMJLQkJLQktQi0tLQl0ZXJtaW5hbCBoYXMgb25seSBsb3dlciBjYXNlCisjIHVwcGVyX2Nhc2Vfb25seQkJT1RVQwlib29sCVVDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgdXBwZXIgY2FzZQorYmFja3NwYWNlX2RlbGF5CQkJT1RkQgludW0JZEIJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSAorIyBmb3JtX2ZlZWRfZGVsYXkJCU9UZEYJbnVtCWRGCS0JCS0JLUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkwKK2hvcml6b250YWxfdGFiX2RlbGF5CQlPVGRUCW51bQlkVAktCQktCVlCLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5JCisjIHZlcnRpY2FsX3RhYl9kZWxheQkJT1RkVgludW0JZFYJLQkJLQktQi0tLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeVgorbnVtYmVyX29mX2Z1bmN0aW9uX2tleXMJCU9Ua24JbnVtCWtuCS0JCS0JLUItRy0JY291bnQgb2YgZnVuY3Rpb24ga2V5cworb3RoZXJfbm9uX2Z1bmN0aW9uX2tleXMJCU9Ua28Jc3RyCWtvCS0JCS0JLUItRy0JbGlzdCBvZiBzZWxmLW1hcHBlZCBrZXljYXBzCithcnJvd19rZXlfbWFwCQkJT1RtYQlzdHIJbWEJLQkJLQlZQkMtLQltYXAgYXJyb3cga2V5cyByb2d1ZSgxKSBtb3Rpb24ga2V5cworIyBtZW1vcnlfbG9ja19hYm92ZQkJT1RtbAlzdHIJbWwJLQkJLQktQi0tLQlsb2NrIHZpc2libGUgc2NyZWVuIG1lbW9yeSBhYm92ZSB0aGUgY3VycmVudCBsaW5lCisjIG1lbW9yeV91bmxvY2sJCQlPVG11CXN0cgltdQktCQktCS1CLS0tCXVubG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQoraGFzX2hhcmR3YXJlX3RhYnMJCU9UcHQJYm9vbAlwdAktCQktCVlCLS0tCWhhcyA4LWNoYXIgdGFicyBpbnZva2VkIHdpdGggXkkKK3JldHVybl9kb2VzX2Nscl9lb2wJCU9UeHIJYm9vbAl4cgktCQktCVlCLS0tCXJldHVybiBjbGVhcnMgdGhlIGxpbmUKKyMgdGVrXzQwMjVfaW5zZXJ0X2xpbmUJCU9UeHgJYm9vbAl4eAktCQktCS1CQy0tCVRla3Ryb25peCA0MDI1IGluc2VydC1saW5lIGdsaXRjaAorIworIyBteXRpbmZvIGRlc2NyaWJlZCB0aGlzIGFzIGEgdGVybWNhcCBjYXBhYmlsaXR5LCBidXQgaXQncyBub3QgbGlzdGVkIGluIHRoZQorIyA0LjRCU0QgbWFuIHBhZ2VzLCBhbmQgbm90IGZvdW5kIGluIHRoZSA0LjRCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5jdXJzZXMKKyMgcGFja2FnZSwgbGlrZSBTeXN0ZW0gViwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYWx3YXlzIHRydWUuCisjCisjIHJpbmRfb25seV9hdF90b3AJCU9UeHEJYm9vbAl4cQktCQktCS0tLS0tCXJldmVyc2UgaW5kZXggb25seSB3b3JrcyBmcm9tIHRvcCBsaW5lCisjCisjIFVuaXZlcnNpdHkgb2YgV2F0ZXJsb28gdGVybWNhcCBleHRlbnNpb25zIChhcyBkZXNjcmliZWQgaW4gbXl0aW5mbykuCisjIFRoZSBgeGwnIHRlcm1jYXAgZmlsZSBjbGFzaGVzIHdpdGggYSB0ZXJtaW5mbyBuYW1lOyB0aGlzIGFtYmlndWl0eSBjYW5ub3QKKyMgYmUgcmVzb2x2ZWQgYnkgYSB0eXBlIGNoZWNrLiAgVGhlIGRlc2NyaXB0aW9ucyBhcmUgZ3Vlc3NlcyBmcm9tIHdoYXQgd2FzCisjIGluIHRoZSBteXRpbmZvIHRhYmxlcy4gCisjCisjIGtleV9pbnRlcnJ1cHRfY2hhcgkJT1RraQlzdHIJa2kJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGludGVycnVwdCBrZXkgKD8pCisjIGtleV9raWxsX2NoYXIJCQlPVGtrCXN0cglrawktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkga2lsbCBrZXkgKD8pCisjIGtleV9zdXNwZW5kX2NoYXIJCU9Ua3oJc3RyCWt6CS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBzdXNwZW5kIGtleSAoPykKKyMgaW5pdGlhbGl6YXRpb25fbWVzc3kJCU9UeGMJYm9vbAl4YwktCQktCS0tLS0tCWluaXRpYWxpemF0aW9uIGxlYXZlcyBnYXJiYWdlIG9uIHRoZSBzY3JlZW4gKD8pCisjIGluZF9hdF9ib3R0b21fZG9lc19jcgkJT1R4bAlib29sCXhsCS0JCS0JLS0tLS0JaW5kZXggZG9lcyBhIGNhcnJpYWdlIHJldHVybgorIworIyBOb25zdGFuZGFyZCBjYXBhYmlsaXRpZXMgdW5pcXVlIHRvIFJvc3MgUmlkZ2UncyBgbXl0aW5mbycgcGFja2FnZS4KKyMgU1IgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90IGJlIHJlc29sdmVkIGJ5IGEgdHlwZQorIyBjaGVjay4KKyMKKyMgc2Nyb2xsX2xlZnQJCQlPVHNsMQlzdHIJU2wJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIGxlZnR3YXJkCisjIHNjcm9sbF9yaWdodAkJCU9Uc3IxCXN0cglTcgktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gcmlnaHR3YXJkCisjIHBhcm1fc2Nyb2xsX2xlZnQJCU9Uc2wJc3RyCVNMCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZCAjMSBjaGFyYWN0ZXJzCisjIHBhcm1fc2Nyb2xsX3JpZ2h0CQlPVHNyCXN0cglTUgktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gcmlnaHR3YXJkICMxIGNoYXJhY3RlcnMKKyMKKyMgVGhlIG15dGluZm8gY2FwYWJpbGl0aWVzIGVuZCBoZXJlLgorIworIyBYRU5JWCBleHRlbnNpb25zOgorIworIyBYZW5peCBkZWZpbmVkIGl0cyBvd24gc2V0IG9mIGZvcm1zLWRyYXdpbmcgY2FwYWJpbGl0aWVzOgorIworIyBjYXAJSUJNIEFTQ0lJCWRlc2NyaXB0aW9uICAgICAgICAgICAgIEFDUyAgICAgICAgIAlBU0NJSQorIyAtLS0JLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLQktLS0tLS0KKyMgRzEJMTkxIFwyNzcgTS0/CXNpbmdsZSB1cHBlciByaWdodCAgIAlBQ1NfVVJDT1JORVIKKyMgRzIJMjE4IFwzMzIgTS1aCXNpbmdsZSB1cHBlciBsZWZ0CUFDU19VTENPUk5FUgorIyBHMwkxOTIgXDMwMCBNLUAJc2luZ2xlIGxvd2VyIGxlZnQJQUNTX0xMQ09STkVSCisjIEc0CTIxNyBcMzMxIE0tWQlzaW5nbGUgbG93ZXIgcmlnaHQJQUNTX0xSQ09STkVSCisjIEc1CTE4NyBcMjczIE0tOwlkb3VibGUgdXBwZXIgcmlnaHQKKyMgRzYJMjAxIFwzMTEgTS1JCWRvdWJsZSB1cHBlciBsZWZ0CisjIEc3CTIwMCBcMzEwIE0tSAlkb3VibGUgbG93ZXIgbGVmdAorIyBHOAkxODggXDI3NCBNLTwJZG91YmxlIGxvd2VyIHJpZ2h0CisjIEdDCTE5NyBcMzA1IE0tRQlzaW5nbGUgaW50ZXJzZWN0aW9uCUFDU19QTFVTCV8gXworIyBHRAkxOTQgXDMwMiBNLUIJc2luZ2xlIGRvd24tdGljawlBQ1NfVFRFRQkgfAorIyBHSAkxOTYgXDMwNCBNLUQJc2luZ2xlIGhvcml6b250YWwgbGluZQlBQ1NfSExJTkUKKyMgR0wJMTgwIFwyNjQgTS00CXNpbmdsZSBsZWZ0IHRpY2sJQUNTX1JURUUJLXwKKyMgR1IJMTk1IFwzMDMgTS1DCXNpbmdsZSByaWdodCB0aWNrCUFDU19MVEVFCXwtCisjIEdVCTE5MyBcMzAxIE0tQQlzaW5nbGUgdXAgdGljawkJQUNTX0JURUUJX3xfCisjIEdWCTE3OSBcMjYzIE0tMwlzaW5nbGUgdmVydGljYWwgbGluZQlBQ1NfVkxJTkUKKyMgR2MJMjA2IFwzMTYgTS1OCWRvdWJsZSBpbnRlcnNlY3Rpb24KKyMgR2QJMjAzIFwzMTMgTS1LCWRvdWJsZSBkb3duIHRpY2sKKyMgR2gJMjA1IFwzMTUgTS1NCWRvdWJsZSBob3Jpem9udGFsIGxpbmUKKyMgR2wJMjA0IFwyMDQgTS1MCWRvdWJsZSBsZWZ0IHRpY2sKKyMgR3IJMTg1IFwyNzEgTS05CWRvdWJsZSByaWdodCB0aWNrCisjIEd1CTIwMiBcMzEyIE0tSglkb3VibGUgdXAgdGljaworIyBHdgkxODYgXDI3MiBNLToJZG91YmxlIHZlcnRpY2FsIGxpbmUKKyMKKyMgVGhlIGNvbXBpbGVyIHdpbGwgdHJhbnNsYXRlIHRoZSBzaW5nbGUtbGluZSBjYXBzIGFuZCBkaXNjYXJkIHRoZSBvdGhlcnMKKyMgKHZpYSBJR05PUkUgYWxpYXNlcyBmdXJ0aGVyIGRvd24pLiAgV2UgZG9uJ3Qgd2FudCB0byBkbyBub3JtYWwgcGFkIAorIyB0cmFuc2xhdGlvbiBvbiB0aGVzZSwgdGhleSdyZSBvZnRlbiBzaW5nbGUtY2hhcmFjdGVyIHByaW50YWJsZSBBU0NJSQorIyBzdHJpbmdzIHRoYXQgaGFwcGVuIHRvIGJlIG51bWVyaWNzLiAgVGhlcmUncyBhd2sgY29kZSBpbiBwYXJhbWV0cml6ZWQuc2gKKyMgdGhhdCBkZXRlY3RzIHRoZSBhY3NfIHByZWZpeCBhbmQgdXNlcyBpdCB0byBzdXBwcmVzcyBwYWQgdHJhbnNsYXRpb24uCisjIFRoZXNlIHRlcm1pbmZvIG5hbWVzIGFyZSBpbnZlbnRlZC4KKyMKK2Fjc191bGNvcm5lcgkJCU9URzIJc3RyCUcyCS0JCS0JLS0tLS0Jc2luZ2xlIHVwcGVyIGxlZnQKK2Fjc19sbGNvcm5lcgkJCU9URzMJc3RyCUczCS0JCS0JLS0tLS0Jc2luZ2xlIGxvd2VyIGxlZnQKK2Fjc191cmNvcm5lcgkJCU9URzEJc3RyCUcxCS0JCS0JLS0tLS0Jc2luZ2xlIHVwcGVyIHJpZ2h0CithY3NfbHJjb3JuZXIJCQlPVEc0CXN0cglHNAktCQktCS0tLS0tCXNpbmdsZSBsb3dlciByaWdodAorYWNzX2x0ZWUJCQlPVEdSCXN0cglHUgktCQktCS0tLS0tCXRlZSBwb2ludGluZyByaWdodAorYWNzX3J0ZWUJCQlPVEdMCXN0cglHTAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBsZWZ0CithY3NfYnRlZQkJCU9UR1UJc3RyCUdVCS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIHVwCithY3NfdHRlZQkJCU9UR0QJc3RyCUdECS0JCS0JLS0tLS0JdGVlIHBvaW50aW5nIGRvd24KK2Fjc19obGluZQkJCU9UR0gJc3RyCUdICS0JCS0JLS0tLS0Jc2luZ2xlIGhvcml6b250YWwgbGluZQorYWNzX3ZsaW5lCQkJT1RHVglzdHIJR1YJLQkJLQktLS0tLQlzaW5nbGUgdmVydGljYWwgbGluZQorYWNzX3BsdXMJCQlPVEdDCXN0cglHQwktCQktCS0tLS0tCXNpbmdsZSBpbnRlcnNlY3Rpb24KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1JTkZPIEVYVEVOU0lPTiBDQVBBQklMSVRJRVMKKyMKKyMgVGhpcyBzZWN0aW9uIGlzIGFsbW9zdCBhbGwgY29tbWVudHMuICBXaGF0IGl0J3MgbWFpbmx5IGZvciBpcyB0byBkZXNjcmliZQorIyB3aGF0IGNhcGFiaWxpdGllcyBuZWVkIHRvIGJlIHNxdWVlemVkIG91dCB0byBnZXQgZG93biB0byB0aGUgWFNJIEN1cnNlcworIyBzdGFuZGFyZCBzZXQuICBUaGV5IGFyZSBmbGFnZ2VkIHdpdGggSy4KKyMKKyMgSFAgZXh0ZW5zaW9ucworIworIyBUaGVzZSBleHRlbnNpb25zIGZvbGxvdyBwdHJfbm9uIChyZXBsYWNpbmcgZXZlcnl0aGluZyBhZnRlciBpdCkgaW4gSFAKKyMgdGVybWluZm8gZmlsZXMuICBFeGNlcHQgZm9yIG1lbW9yeV9sb2NrIGFuZCBtZW1vcnlfdW5sb2NrLCB0aGV5IGFyZQorIyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIFNWcjQgZXh0ZW5zaW9ucywgYnV0IHRoZXkgbWFrZSB0aGUgYmluYXJ5IGZvcm1hdAorIyBkaWZmZXJlbnQuICBHcnJyLi4uLgorIworbWVtb3J5X2xvY2sJCQltZW1sCXN0cgltbAktCQktCS0tLS1LCWxvY2sgbWVtb3J5IGFib3ZlIGN1cnNvcgorbWVtb3J5X3VubG9jawkJCW1lbXUJc3RyCW11CS0JCS0JLS0tLUsJdW5sb2NrIG1lbW9yeQorI3BsYWJfbm9ybQkJCXBsbglzdHIJcG4JLQkJLQktLS0tLQlwcm9ncmFtIGxhYmVsICMxIHRvIHNob3cgc3RyaW5nICMyCisjbGFiZWxfb24JCQlzbWxuCXN0cglMTwktCQktCS0tLS0tCXR1cm4gb24gc29mdCBsYWJlbHMKKyNsYWJlbF9vZmYJCQlybWxuCXN0cglMRgktCQktCS0tLS0tCXR1cm4gb2ZmIHNvZnQgbGFiZWxzCisja2V5X2YxMQkJCWtmMTEJc3RyCUYxCS0JCS0JLS0tLS0JRjExIGZ1bmN0aW9uIGtleQorI2tleV9mMTIJCQlrZjEyCXN0cglGMgktCQktCS0tLS0tCUYxMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjEzCQkJa2YxMwlzdHIJRjMJLQkJLQktLS0tLQlGMTMgZnVuY3Rpb24ga2V5Cisja2V5X2YxNAkJCWtmMTQJc3RyCUY0CS0JCS0JLS0tLS0JRjE0IGZ1bmN0aW9uIGtleQorI2tleV9mMTUJCQlrZjE1CXN0cglGNQktCQktCS0tLS0tCUYxNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjE2CQkJa2YxNglzdHIJRjYJLQkJLQktLS0tLQlGMTYgZnVuY3Rpb24ga2V5Cisja2V5X2YxNwkJCWtmMTcJc3RyCUY3CS0JCS0JLS0tLS0JRjE3IGZ1bmN0aW9uIGtleQorI2tleV9mMTgJCQlrZjE4CXN0cglGOAktCQktCS0tLS0tCUYxOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE5CQkJa2YxOQlzdHIJRjkJLQkJLQktLS0tLQlGMTkgZnVuY3Rpb24ga2V5Cisja2V5X2YyMAkJCWtmMjAJc3RyCUZBCS0JCS0JLS0tLS0JRjIwIGZ1bmN0aW9uIGtleQorI2tleV9mMjEJCQlrZjIxCXN0cglGQgktCQktCS0tLS0tCUYyMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjIyCQkJa2YyMglzdHIJRkMJLQkJLQktLS0tLQlGMjIgZnVuY3Rpb24ga2V5Cisja2V5X2YyMwkJCWtmMjMJc3RyCUZECS0JCS0JLS0tLS0JRjIzIGZ1bmN0aW9uIGtleQorI2tleV9mMjQJCQlrZjI0CXN0cglGRQktCQktCS0tLS0tCUYyNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjI1CQkJa2YyNQlzdHIJRkYJLQkJLQktLS0tLQlGMjUgZnVuY3Rpb24ga2V5Cisja2V5X2YyNgkJCWtmMjYJc3RyCUZHCS0JCS0JLS0tLS0JRjI2IGZ1bmN0aW9uIGtleQorI2tleV9mMjcJCQlrZjI3CXN0cglGSAktCQktCS0tLS0tCUYyNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI4CQkJa2YyOAlzdHIJRkkJLQkJLQktLS0tLQlGMjggZnVuY3Rpb24ga2V5Cisja2V5X2YyOQkJCWtmMjkJc3RyCUZKCS0JCS0JLS0tLS0JRjI5IGZ1bmN0aW9uIGtleQorI2tleV9mMzAJCQlrZjMwCXN0cglGSwktCQktCS0tLS0tCUYzMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjMxCQkJa2YzMQlzdHIJRkwJLQkJLQktLS0tLQlGMzEgZnVuY3Rpb24ga2V5Cisja2V5X2YzMgkJCWtmMzIJc3RyCUZNCS0JCS0JLS0tLS0JRjMyIGZ1bmN0aW9uIGtleQorI2tleV9mMzMJCQlrZjMzCXN0cglGTgktCQktCS0tLS0tCUYzMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjM0CQkJa2YzNAlzdHIJRk8JLQkJLQktLS0tLQlGMzQgZnVuY3Rpb24ga2V5Cisja2V5X2YzNQkJCWtmMzUJc3RyCUZQCS0JCS0JLS0tLS0JRjM1IGZ1bmN0aW9uIGtleQorI2tleV9mMzYJCQlrZjM2CXN0cglGUQktCQktCS0tLS0tCUYzNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjM3CQkJa2YzNwlzdHIJRlIJLQkJLQktLS0tLQlGMzcgZnVuY3Rpb24ga2V5Cisja2V5X2YzOAkJCWtmMzgJc3RyCUZTCS0JCS0JLS0tLS0JRjM4IGZ1bmN0aW9uIGtleQorI2tleV9mMzkJCQlrZjM5CXN0cglGVAktCQktCS0tLS0tCUYzOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQwCQkJa2Y0MAlzdHIJRlUJLQkJLQktLS0tLQlGNDAgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MQkJCWtmNDEJc3RyCUZWCS0JCS0JLS0tLS0JRjQxIGZ1bmN0aW9uIGtleQorI2tleV9mNDIJCQlrZjQyCXN0cglGVwktCQktCS0tLS0tCUY0MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjQzCQkJa2Y0MwlzdHIJRlgJLQkJLQktLS0tLQlGNDMgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NAkJCWtmNDQJc3RyCUZZCS0JCS0JLS0tLS0JRjQ0IGZ1bmN0aW9uIGtleQorI2tleV9mNDUJCQlrZjQ1CXN0cglGWgktCQktCS0tLS0tCUY0NSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ2CQkJa2Y0NglzdHIJRmEJLQkJLQktLS0tLQlGNDYgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NwkJCWtmNDcJc3RyCUZiCS0JCS0JLS0tLS0JRjQ3IGZ1bmN0aW9uIGtleQorI2tleV9mNDgJCQlrZjQ4CXN0cglGYwktCQktCS0tLS0tCUY0OCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ5CQkJa2Y0OQlzdHIJRmQJLQkJLQktLS0tLQlGNDkgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MAkJCWtmNTAJc3RyCUZlCS0JCS0JLS0tLS0JRjUwIGZ1bmN0aW9uIGtleQorI2tleV9mNTEJCQlrZjUxCXN0cglGZgktCQktCS0tLS0tCUY1MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjUyCQkJa2Y1MglzdHIJRmcJLQkJLQktLS0tLQlGNTIgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MwkJCWtmNTMJc3RyCUZoCS0JCS0JLS0tLS0JRjUzIGZ1bmN0aW9uIGtleQorI2tleV9mNTQJCQlrZjU0CXN0cglGaQktCQktCS0tLS0tCUY1NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjU1CQkJa2Y1NQlzdHIJRmoJLQkJLQktLS0tLQlGNTUgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NgkJCWtmNTYJc3RyCUZrCS0JCS0JLS0tLS0JRjU2IGZ1bmN0aW9uIGtleQorI2tleV9mNTcJCQlrZjU3CXN0cglGbAktCQktCS0tLS0tCUY1NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU4CQkJa2Y1OAlzdHIJRm0JLQkJLQktLS0tLQlGNTggZnVuY3Rpb24ga2V5Cisja2V5X2Y1OQkJCWtmNTkJc3RyCUZuCS0JCS0JLS0tLS0JRjU5IGZ1bmN0aW9uIGtleQorI2tleV9mNjAJCQlrZjYwCXN0cglGbwktCQktCS0tLS0tCUY2MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjYxCQkJa2Y2MQlzdHIJRnAJLQkJLQktLS0tLQlGNjEgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MgkJCWtmNjIJc3RyCUZxCS0JCS0JLS0tLS0JRjYyIGZ1bmN0aW9uIGtleQorI2tleV9mNjMJCQlrZjYzCXN0cglGcgktCQktCS0tLS0tCUY2MyBmdW5jdGlvbiBrZXkKKyMKKyMgSUJNIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIElCTQorIyB0ZXJtaW5mbyBmaWxlcy4KKyMKKyMgVGhlIHBsYWNlcyBpbiB0aGUgYm94WzEyXSBjYXBhYmlsaXRpZXMgY29ycmVzcG9uZCB0byBhY3NjIGNoYXJhY3RlcnMsIGhlcmUgaXMKKyMgdGhlIG1hcHBpbmc6CisjCisjCWJveDFbMF0gID0gQUNTX1VMQ09STkVSCisjCWJveDFbMV0gID0gQUNTX0hMSU5FCQorIwlib3gxWzJdICA9IEFDU19VUkNPUk5FUgorIwlib3gxWzNdICA9IEFDU19WTElORQorIwlib3gxWzRdICA9IEFDU19MUkNPUk5FUgorIwlib3gxWzVdICA9IEFDU19MTENPUk5FUgorIwlib3gxWzZdICA9IEFDU19UVEVFCisjCWJveDFbN10gID0gQUNTX1JURUUKKyMJYm94MVs4XSAgPSBBQ1NfQlRFRQorIwlib3gxWzldICA9IEFDU19MVEVFCisjCWJveDFbMTBdID0gQUNTX1BMVVMKKyMKKyMgVGhlIGJveDIgY2hhcmFjdGVycyBhcmUgdGhlIGRvdWJsZS1saW5lIHZlcnNpb25zIG9mIHRoZXNlIGZvcm1zIGdyYXBoaWNzLgorIworI2JveF9jaGFyc18xCQkJYm94MQlzdHIJYngJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBwcmltYXJ5IHNldAorI2JveF9jaGFyc18yCQkJYm94MglzdHIJYnkJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBzZWNvbmRhcnkgc2V0CisjYm94X2F0dHJfMQkJCWJhdHQxCXN0cglCeAktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDEKKyNib3hfYXR0cl8yCQkJYmF0dDIJc3RyCUJ5CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MgorI2NvbG9yX2JnXzAJCQljb2xiMAlzdHIJZDAJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9iZ18xCQkJY29sYjEJc3RyCWQxCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAxCisjY29sb3JfYmdfMgkJCWNvbGIyCXN0cglkMgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMgorI2NvbG9yX2JnXzMJCQljb2xiMwlzdHIJZDMJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9iZ180CQkJY29sYjQJc3RyCWQ0CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA0CisjY29sb3JfYmdfNQkJCWNvbGI1CXN0cglkNQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNQorI2NvbG9yX2JnXzYJCQljb2xiNglzdHIJZDYJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9iZ183CQkJY29sYjcJc3RyCWQ3CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA3CisjY29sb3JfZmdfMAkJCWNvbGYwCXN0cgljMAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMAorI2NvbG9yX2ZnXzEJCQljb2xmMQlzdHIJYzEJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDEKKyNjb2xvcl9mZ18yCQkJY29sZjIJc3RyCWMyCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAyCisjY29sb3JfZmdfMwkJCWNvbGYzCXN0cgljMwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMworI2NvbG9yX2ZnXzQJCQljb2xmNAlzdHIJYzQJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDQKKyNjb2xvcl9mZ181CQkJY29sZjUJc3RyCWM1CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA1CisjY29sb3JfZmdfNgkJCWNvbGY2CXN0cgljNgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNgorI2NvbG9yX2ZnXzcJCQljb2xmNwlzdHIJYzcJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDcKKyNmb250XzAJCQkJZm9udDAJc3RyCWYwCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMAorI2ZvbnRfMQkJCQlmb250MQlzdHIJZjEJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAxCisjZm9udF8yCQkJCWZvbnQyCXN0cglmMgktCQktCS0tLS0tCXNlbGVjdCBmb250IDIKKyNmb250XzMJCQkJZm9udDMJc3RyCWYzCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMworI2ZvbnRfNAkJCQlmb250NAlzdHIJZjQJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA0CisjZm9udF81CQkJCWZvbnQ1CXN0cglmNQktCQktCS0tLS1LCXNlbGVjdCBmb250IDUKKyNmb250XzYJCQkJZm9udDYJc3RyCWY2CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNgorI2ZvbnRfNwkJCQlmb250NwlzdHIJZjcJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA3Cisja2V5X2JhY2tfdGFiCQkJa2J0YWIJc3RyCWswCS0JCS0JLS0tLS0JYmFja3RhYiBrZXkKKyNrZXlfZG8JCQkJa2RvCXN0cglraQktCQktCS0tLS1LCWRvIHJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmQJCQlrY21kCXN0cglrZAktCQktCS0tLS1LCWNvbW1hbmQtcmVxdWVzdCBrZXkKKyNrZXlfY29tbWFuZF9wYW5lCQlrY3BuCXN0cglrVwktCQktCS0tLS1LCWNvbW1hbmQtcGFuZSBrZXkKKyNrZXlfZW5kCQkJa2VuZAlzdHIJa3cJLQkJLQktLS0tLQllbmQga2V5Cisja2V5X2hlbHAJCQlraGxwCXN0cglrcQktCQktCS0tLS0tCWhlbHAga2V5Cisja2V5X25ld2xpbmUJCQlrbmwJc3RyCW5sCS0JCS0JLS0tLUsJbmV3bGluZSBrZXkKKyNrZXlfbmV4dF9wYW5lCQkJa25wbglzdHIJa3YJLQkJLQktLS0tSwluZXh0LXBhbmUga2V5Cisja2V5X3ByZXZfY21kCQkJa3BwbglzdHIJa3AJLQkJLQktLS0tSwlwcmV2aW91cy1jb21tYW5kIGtleQorI2tleV9wcmV2X3BhbmUJCQlrcHBuCXN0cglrVgktCQktCS0tLS1LCXByZXZpb3VzLXBhbmUga2V5Cisja2V5X3F1aXQJCQlrcXVpdAlzdHIJa1EJLQkJLQktLS0tSwlxdWl0IGtleQorI2tleV9zZWxlY3QJCQlrc2VsCXN0cglrVQktCQktCS0tLS0tCXNlbGVjdCBrZXkKKyNrZXlfc2Nyb2xsX2xlZnQJCWtzY2wJc3RyCWt6CS0JCS0JLS0tLUsJc2Nyb2xsIGxlZnQKKyNrZXlfc2Nyb2xsX3JpZ2h0CQlrc2NyCXN0cglrWgktCQktCS0tLS1LCXNjcm9sbCByaWdodAorI2tleV90YWIJCQlrdGFiCXN0cglrbwktCQktCS0tLS1LCXRhYiBrZXkKKyNrZXlfc21hcF9pbjEJCQlrbXBmMQlzdHIJS3YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBpbnB1dAorI2tleV9zbWFwX291dDEJCQlrbXB0MQlzdHIJS1YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBvdXRwdXQKKyNrZXlfc21hcF9pbjIJCQlrbXBmMglzdHIJS3cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBpbnB1dAorI2tleV9zbWFwX291dDIJCQlrbXB0MglzdHIJS1cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBvdXRwdXQKKyNrZXlfc21hcF9pbjMJCQlrbXBmMwlzdHIJS3gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBpbnB1dAorI2tleV9zbWFwX291dDMJCQlrbXB0MwlzdHIJS1gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBvdXRwdXQKKyNrZXlfc21hcF9pbjQJCQlrbXBmNAlzdHIJS3kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBpbnB1dAorI2tleV9zbWFwX291dDQJCQlrbXB0NAlzdHIJS1kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBvdXRwdXQKKyNrZXlfc21hcF9pbjUJCQlrbXBmNQlzdHIJS3oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBpbnB1dAorI2tleV9zbWFwX291dDUJCQlrbXB0NQlzdHIJS1oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBvdXRwdXQKKyNhcHBsX2RlZmluZWRfc3RyCQlhcHN0cglzdHIJemEJLQkJLQktLS0tSwlhcHBsaWNhdGlvbi1kZWZpbmVkIHN0cmluZworIyBUaGUga2V5X3NtYXBfaW5bNjc4OV0gYW5kIGtleV9zbWFwX291dFs2Nzg5XSBjYXBhYmlsaXRpZXMgYXJlbid0IGRlc2NyaWJlZCBpbgorIyB0aGUgSUJNIG1hbnVhbCBwYWdlcywgc28gdGhlIGNhcCBuYW1lIHN0cmluZ3MgYXJlIGd1ZXNzZXMuICBUaGUgdGVybWluZm8KKyMgbmFtZXMgYXJlIGFsbW9zdCBjZXJ0YWlubHkgcmlnaHQsIHRoZSB0ZXJtY2FwIG9uZXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZy4KKyNrZXlfc21hcF9pbjYJCQlrbXBmNglzdHIJayEJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBpbnB1dAorI2tleV9zbWFwX291dDYJCQlrbXB0NglzdHIJS0AJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBvdXRwdXQKKyNrZXlfc21hcF9pbjcJCQlrbXBmNwlzdHIJayMJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBpbnB1dAorI2tleV9zbWFwX291dDcJCQlrbXB0NwlzdHIJSyQJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBvdXRwdXQKKyNrZXlfc21hcF9pbjgJCQlrbXBmOAlzdHIJayUJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBpbnB1dAorI2tleV9zbWFwX291dDgJCQlrbXB0OAlzdHIJS14JLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBvdXRwdXQKKyNrZXlfc21hcF9pbjkJCQlrbXBmOQlzdHIJayYJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBpbnB1dAorI2tleV9zbWFwX291dDkJCQlrbXB0OQlzdHIJSyoJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBvdXRwdXQKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZQorI2tleV9zZjEJCQlrc2YxCXN0cglTMQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEKKyNrZXlfc2YyCQkJa3NmMglzdHIJUzIJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAyCisja2V5X3NmMwkJCWtzZjMJc3RyCVMzCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMworI2tleV9zZjQJCQlrc2Y0CXN0cglTNAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDQKKyNrZXlfc2Y1CQkJa3NmNQlzdHIJUzUJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA1Cisja2V5X3NmNgkJCWtzZjYJc3RyCVM2CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNgorI2tleV9zZjcJCQlrc2Y3CXN0cglTNwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDcKKyNrZXlfc2Y4CQkJa3NmOAlzdHIJUzgJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA4Cisja2V5X3NmOQkJCWtzZjkJc3RyCVM5CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOQorI2tleV9zZjEwCQkJa3NmMTAJc3RyCVNBCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMTAKKyMgQUlYIHZlcnNpb24gMyBkb2N1bWVudHMgZGlmZmVyZW50IGNvZGVzIGZvciBGMTEsIEYxMiBhbmQgZG9lcyBub3QgbWVudGlvbgorIyBGMTMtRjY0LiAgQUlYIHZlcnNpb24gNCB1c2VzIHRoZSBzYW1lIG5hbWluZyBmb3IgRjAtRjYzIGFzIGFib3ZlLgorI2tleV9mMTEJCQlrZjExCXN0cglrPAktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMQorI2tleV9mMTIJCQlrZjEyCXN0cglrPgktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMgorIyBVbmRvY3VtZW50ZWQgY2FwYWJpbGl0aWVzIGVuZCBoZXJlLgorI2tleV9hY3Rpb24JCQlrYWN0CXN0cglrSgktCQktCS0tLS1LCXNlbnQgYnkgYWN0aW9uIGtleQorIyBUaGUgSUJNIGRvY3Mgc2F5IHRoZXNlIGNhcGFiaWxpdGllcyBhcmUgZm9yIHRhYmxlLWRyYXdpbmcsIGFuZCBhcmUKKyMgdmFsaWQgb25seSBmb3IgYWl4dGVybSBkZXNjcmlwdGlvbnMuCisjZW50ZXJfdG9wbGluZV9tb2RlCQl0b3BsCXN0cgl0cAktCQktCS0tLS1LCXN0YXJ0IHRvcC1saW5lIG1vZGUKKyNlbnRlcl9ib3R0b21fbW9kZQkJYnRtbAlzdHIJYm0JLQkJLQktLS0tSwlzdGFydCBib3R0b20tbGluZSBtb2RlCisjZW50ZXJfcnZlcnRfbW9kZQkJcnZlcnQJc3RyCXJ2CS0JCS0JLS0tLUsJc3RhcnQgcmlnaHQtdmVydGljYWwgbW9kZQorI2VudGVyX2x2ZXJ0X21vZGUJCWx2ZXJ0CXN0cglsdgktCQktCS0tLS1LCXN0YXJ0IGxlZnQtdmVydGljYWwgbW9kZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQUxJQVMgREVDTEFSQVRJT05TCisjCisjIEhlcmUgd2Ugc2V0IHVwIGFsaWFzZXMgZm9yIHRyYW5zbGF0aW5nIGV4dGVuc2lvbnMgaW50byBzdGFuZGFyZCB0ZXJtaW5mby4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1jYXAgYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEJTRCBhbGlhc2VzOgorIworIyBUaGlzIGlzIGEgY29tbW9uIGVycm9yIGluIG1hbnkgdGVybWNhcCBmaWxlcy4gIFdlJ2xsIGdldCBub3RpZmllZCBkdXJpbmcKKyMgdHJhbnNsYXRpb24gd2hlbiB0aGlzIChvciBhbnkgb3RoZXIgYWxpYXMpIGZpcmVzLgorIworY2FwYWxpYXMJc2IJc3IJQlNECXNjcm9sbCB0ZXh0IGRvd24KKyMKKyMgQVQmVCBleHRlbnNpb25zOgorIworIyBUaGUgb2xkIEFUJlQgNTQxMCwgNTQyMCwgNTQyNSwgcGM2MzAwcGx1cywgNjEwLCBhbmQgczQgZW50cmllcyB1c2VkIGEgc2V0IG9mCisjIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcy4gIEl0cyBzaWduYXR1cmUgaXMgdGhlIEtNIGNhcGFiaWxpdHksIHVzZWQgdG8gbmFtZQorIyBzb21lIHNvcnQgb2Yga2V5bWFwIGZpbGUuICBFRSwgQk8sIENJLCBDViwgWFMsIERTLCBGTCBhbmQgRkUgYXJlIGluIHRoaXMKKyMgc2V0LiAgQ29tbWVudHMgaW4gdGhlIG9yaWdpbmFsLCBhbmQgYSBsaXR0bGUgY3Jvc3MtY2hlY2tpbmcgd2l0aCBvdGhlciBBVCZUCisjIGRvY3VtZW50YXRpb24sIHNlZW0gdG8gZXN0YWJsaXNoIHRoZSBmb2xsb3dpbmcgbWFwcGluZ3M6CisjCitjYXBhbGlhcwlCTwltcglBVCZUCWVudGVyX3JldmVyc2VfbW9kZQorY2FwYWxpYXMJQ0kJdmkJQVQmVAljdXJzb3JfaW52aXNpYmxlCitjYXBhbGlhcwlDVgl2ZQlBVCZUCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCURTCW1oCUFUJlQJZW50ZXJfZGltX21vZGUKKyNjYXBhbGlhcwlFRQltZQlBVCZUCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlGRQlMRglBVCZUCWxhYmVsX29uCitjYXBhbGlhcwlGTAlMTwlBVCZUCWxhYmVsX29mZgorY2FwYWxpYXMJWFMJbWsJQVQmVAllbnRlcl9zZWN1cmVfbW9kZQorIworIyBXZSBjb21tZW50IG91dCBFRSBiZWNhdXNlIHRoZSBjb25mbGljdGluZyBYRU5JWCBFRSBpcyBtb3JlIGNvbW1vbiBpbiAKKyMgb2xkIGVudHJpZXMuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFRoZXNlIGFyZSB0aGUgb25lcyB3ZSBrbm93IGhvdyB0byB0cmFuc2xhdGUgZGlyZWN0bHk6CisjCitjYXBhbGlhcwlFRQltaAlYRU5JWAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJR0UJYWUJWEVOSVgJZXhpdF9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlHUwlhcwlYRU5JWAllbnRlcl9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlDRgl2aQlYRU5JWAljdXJzb3JfaW52aXMKK2NhcGFsaWFzCUNPCXZlCVhFTklYCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCUVOCUA3CVhFTklYCWtleV9lbmQKK2NhcGFsaWFzCUhNCWtoCVhFTklYCWtleV9ob21lCitjYXBhbGlhcwlMRAlrTAlYRU5JWAlrZXlfZGwKK2NhcGFsaWFzCVBECWtOCVhFTklYCWtleV9ucGFnZQorY2FwYWxpYXMJUE4JcG8JWEVOSVgJcHJ0cl9vZmYKK2NhcGFsaWFzCVBTCXBmCVhFTklYCXBydHJfb24KK2NhcGFsaWFzCVBVCWtQCVhFTklYCWtleV9wcGFnZQorY2FwYWxpYXMJUlQJQDgJWEVOSVgJa2VudAorY2FwYWxpYXMJVVAJa3UJWEVOSVgJa2N1dTEKK2NhcGFsaWFzCUc2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VMQ09STkVSCitjYXBhbGlhcwlHNwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MTENPUk5FUgorY2FwYWxpYXMJRzUJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVVJDT1JORVIKK2NhcGFsaWFzCUc4CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xSQ09STkVSCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MVEVFCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19SVEVFCitjYXBhbGlhcwlHdQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19CVEVFCitjYXBhbGlhcwlHZAlJR05PUkUJWEVOSVgJZG91YmxlIEFDU19UVEVFCitjYXBhbGlhcwlHaAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19ITElORQorY2FwYWxpYXMJR3YJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVkxJTkUKK2NhcGFsaWFzCUdjCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1BMVVMKK2NhcGFsaWFzCUdHCUlHTk9SRQlYRU5JWAlhY3MtZ2xpdGNoCisjCisjIElCTSBleHRlbnNpb25zOgorIworY2FwYWxpYXMJa3EJJTEJSUJNCWtleV9oZWxwCisjCisjIElyaXMgZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUhTCW1oCUlSSVMJZW50ZXJfZGltX21vZGUKKyMKKyMgVGVrdHJvbml4IGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlLQQlrOwlUZWsJa2V5X2YxMAorY2FwYWxpYXMJS0IJRjEJVGVrCWtleV9mMTEKK2NhcGFsaWFzCUtDCUYyCVRlawlrZXlfZjEyCitjYXBhbGlhcwlLRAlGMwlUZWsJa2V5X2YxMworY2FwYWxpYXMJS0UJRjQJVGVrCWtleV9mMTQKK2NhcGFsaWFzCUtGCUY1CVRlawlrZXlfZjE1CitjYXBhbGlhcwlCQwlTYglUZWsJc2V0X2JhY2tncm91bmQKK2NhcGFsaWFzCUZDCVNmCVRlawlzZXRfZm9yZWdyb3VuZAorIworIyBUaGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nOgorIworIwlYRU5JWAlYRU5JWCB2YXJpYWJsZSBuYW1lCW5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbz8KKyMJLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCUNMCWtleV9jaGFyX2xlZnQKKyMJQ1IJa2V5X2NoYXJfcmlnaHQKKyMJQ1cJa2V5X2NoYW5nZV93aW5kb3cKKyMJSFAJPz8KKyMJTEYJa2V5X2xpbmVmZWVkIAkJbGFiZWxfb2ZmCisjCU5VCWtleV9uZXh0X3VubG9ja2VkX2NlbGwKKyMJUEwJPz8KKyMJUFIJPz8KKyMJUkMJa2V5X3JlY2FsYwkJcmVtb3ZlX2Nsb2NrCisjCVJGCWtleV90b2dnbGVfcmVmCQlyZXFfZm9yX2lucHV0CisjCVdMCWtleV93b3JkX2xlZnQKKyMJV1IJa2V5X3dvcmRfcmlnaHQKKyMKKyMgSWYgeW91IGtub3cgd2hhdCBhbnkgb2YgdGhlIHF1ZXN0aW9uLW1hcmtlZCBvbmVzIG1lYW4sIHBsZWFzZSB0ZWxsIHVzLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtaW5mbyBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2luZm9hbGlhcwlmb250MAlzMGRzCUlCTQlzZXQwX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MQlzMWRzCUlCTQlzZXQxX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MglzMmRzCUlCTQlzZXQyX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MwlzM2RzCUlCTQlzZXQzX2Rlc19zZXEKK2luZm9hbGlhcwlrYnRhYglrY2J0CUlCTQlrZXlfYmFja3RhYgoraW5mb2FsaWFzCWtzZWwJa3NsdAlJQk0Ja2V5X3NlbGVjdAorIworIyBTb21lIG90aGVycyBhcmUgaWRlbnRpY2FsIHRvIFNWcjQvWFBHNCBjYXBhYmlsaXRpZXMsIGluIHBhcnRpY3VsYXI6CisjIGtjbWQsIGtlbmQsIGtobHAsIGFuZCBrZjExLi4ua2Y2My4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyB0cnVuY2F0ZS1saW5lczp0CisjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvQ2Fwcy51d2luIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9DYXBzLnV3aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwZWFlYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvQ2Fwcy51d2luCkBAIC0wLDAgKzEsMTA5MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBEaWNrZXkKKyMKKyMgJElkOiBDYXBzLnV3aW4sdiAxLjQgMjAwNi8wNS8yNyAxNTozMzowNCB0b20gRXhwICQKKyMKKyMgVGhpcyBpcyBhbiBhZGFwdGF0aW9uIG9mIG5jdXJzZXMnIHRlcm1jYXAvdGVybWluZm8gY2FwYWJpbGl0eSB0YWJsZSwgd2hpY2gKKyMgaXMgZGVzaWduZWQgdG8gYWxpZ24gd2l0aCBVL1dpbidzIHRlcm1pbmZvLgorIworIyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgaW5pdGlhbGl6ZXJzIGZvciB0YWJsZXMgdGhhdCBkcml2ZSB0aWMsCisjIGluZm9jbXAsIGFuZCB0aGUgbGlicmFyeSBjb21waWxhdGlvbiBjb2RlIHVzZWQgdG8gc3VwcG9ydCB0aGUgdGVybWNhcCAKKyMgY29tcGF0aWJpbGl0eSBoYWNrLiAgSXQgaXMgYWxzbyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB0YWJ1bGFyIHBvcnRpb24gb2YgdGhlCisjIHRlcm1pbmZvKDUpIG1hbiBwYWdlOyBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgIyUnIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBiZWNvbWUKKyMgdGhlIHRlcm1pbmZvIHRhYmxlLgorIworIyBUaGlzIGZpbGUgaGFzIHRocmVlIG1ham9yIHNlY3Rpb25zOyBhIHN0YW5kYXJkLWNhcGFiaWxpdGllcyB0YWJsZSwgdHdvCisjIGV4dGVuc2lvbi1jYXBhYmlsaXR5IHRhYmxlcywgYW5kIGEgc2VjdGlvbiBvZiBhbGlhc2VzIGRlY2xhcmF0aW9ucy4KKyMgVGhlIGZpcnN0IHR3byBoYXZlIHRoZSBzYW1lIGZvcm1hdCwgYXMgZm9sbG93czoKKyMKKyMgRklMRSBGT1JNQVQKKyMKKyMgQ29sdW1uIDE6IHRlcm1pbmZvIHZhcmlhYmxlIG5hbWUKKyMgQ29sdW1uIDI6IHRlcm1pbmZvIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gMzogY2FwYWJpbGl0eSB0eXBlIChib29sZWFuLCBudW1lcmljLCBvciBzdHJpbmcpCisjIENvbHVtbiA0OiB0ZXJtY2FwIGNhcGFiaWxpdHkgbmFtZQorIyBDb2x1bW4gNTogS0VZX3h4eCBuYW1lLCBpZiBhbnksIGAtJyBvdGhlcndpc2UKKyMgQ29sdW1uIDY6IHZhbHVlIGZvciBLRVlfeHh4IG5hbWUsIGlmIGFueSwgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gNzogTGVhZCB3aXRoIGBZJyBpZiBjYXBhYmlsaXR5IHNob3VsZCBiZSBlbWl0dGVkIGluIHRlcm1jYXAKKyMgICAgICAgICAgIHRyYW5zbGF0aW9ucywgYC0nIG90aGVyd2lzZQorIyBDb2x1bW4gODogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbgorIworIyBUaGUgY29kZXMgZm9sbG93aW5nIFtZLV0gaW4gY29sdW1uIDcgZGVzY3JpYmUgdGhlIHZlcnNpb25zIG9mIHRlcm1jYXAgd2hpY2gKKyMgdXNlIHRoZSBnaXZlbiBjYXBhYmlsaXR5LiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgdXNlZCBieSB0aGUgY3Vyc2VzIGxpYnJhcnkKKyMgcHJvcGVyOyByYXRoZXIsIGl0J3MgdGhlcmUgdG8gaGVscCB0aGUgdGVybWluZm8gbWFpbnRhaW5lciBhdm9pZCBlbWl0dGluZworIyB0ZXJtY2FwIGVudHJ5IHRyYW5zbGF0aW9ucyB0aGF0IGFyZSBtb3JlIHRoYW4gMTAyMyBieXRlcyBsb25nIChhbmQgdGFuayBhCisjIGxvdCBvZiBvbGQgdGVybWNhcC11c2luZyBwcm9ncmFtcykuICBUaGUgY29kZXMgcmVhZCBhcyBmb2xsb3dzOgorIwlCID0gbWVudGlvbmVkIGluIHRoZSBCU0QgbWFuIHBhZ2UgZm9yIDQuNEJTRCBjdXJzZXMKKyMJQyA9IHVzZWQgYnkgdGhlIDQuNEJTRCBjdXJzZXMgbGlicmFyeQorIwlHID0gbWVudGlvbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBHTlUgdGVybWNhcAorIwlFID0gdXNlZCBieSBHTlUgRW1hY3MKKyMJSyA9IHJlbW92ZSB0aGlzIHRlcm1pbmZvIGNhcGFiaWxpdHkgd2hlbiB0cmFuc2xhdGluZyB0byBzdGFuZGFyZCBmb3JtYXQKKyMgVGhlIGltcG9ydGFudCBjb2RlcyBhcmUgQyBhbmQgRS4gIEEgY2FwIHdpdGggQyBvciBFIHNob3VsZCBiZSBwcmVzZXJ2ZWQgaW4KKyMgdHJhbnNsYXRpb24gaWYgcG9zc2libGUuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHByZXNlcnZpbmcgYWxsIHN1Y2ggY2FwcyBtYXkKKyMgbGVhZCB0byBzb21lIHRlcm1jYXAgdHJhbnNsYXRpb25zIGJlaW5nIHRvbyBsb25nLiAgVGhlIHRlcm1jYXAgbWFpbnRhaW5lcgorIyBoYXMgYSBiaXQgb2YgYSBqdWdnbGluZyBhY3QgdG8gZG8uLi5wb3RlbnRpYWwgcHJvYmxlbSBjYXNlcyBhcmUgbWFya2VkIHdpdGgKKyMgYW4gYXN0ZXJpc2sgKCopLgorIworIyBUaGUgYWxpYXNlcyBzZWN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyMKKyMgQ29sdW1uIDE6IGVpdGhlciBgY2FwYWxpYXMnIG9yIGBpbmZvYWxpYXMnCisjIENvbHVtbiAyOiBuYW1lIHRvIGJlIGFsaWFzZWQKKyMgQ29sdW1uIDM6IHdoYXQgbmFtZSBpdCBzaG91bGQgdHJhbnNsYXRlIHRvLiAgVGhlIG5hbWUgSUdOT1JFIG1lYW5zIGl0CisjICAgICAgICAgICBzaG91bGQgYmUgZGlzY2FyZGVkIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuCisjIENvbHVtbiA0OiBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2V0ICh1c2VkIGZvciBjb21waWxlciB3YXJuaW5nIG1lc3NhZ2VzKQorIyBDb2x1bW4gNTogY2FwYWJpbGl0eSBkZXNjcmlwdGlvbiAodXN1YWxseSBhbiBhc3NvY2lhdGVkIHRlcm1pbmZvIHZhcmlhYmxlKQorIworIyBIQU5ETElORyBURVJNQ0FQIEFORCBURVJNSU5GTyBFWFRFTlNJT05TCisjCisjIFRoZXJlIGFyZSBiYXNpY2FsbHkgZml2ZSBkaWZmZXJlbnQgd2F5cyB0byBoYW5kbGUgdGVybWNhcCBhbmQgdGVybWluZm8KKyMgZXh0ZW5zaW9uczoKKyMKKyMgMS4gRG9uJ3QgbGlzdCB0aGUgY2FwbmFtZSBoZXJlLCBvciBsaXN0IGl0IGJ1dCBjb21tZW50IGl0IG91dCAodGhlIGxhdHRlcgorIyBpcyBwcmVmZXJhYmxlOyBzb21lb25lIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIGl0IGluIHRoZSBmdXR1cmUpLiAgSWYgeW91IGRvCisjIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgdHJlYXRlZCBhcyB1bmtub3duIGFuZCByYWlzZSBhIHdhcm5pbmcgZnJvbQorIyB0aGUgY29tcGlsZXIuCisjCisjIDIuIEFsaWFzIGl0LiAgVGhpcyBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgY2FwYWJpbGl0eSBoYXMgdGhlIHNhbWUgbWVhbmluZworIyBhcyBhbiBhbHJlYWR5LXN1cHBvcnRlZCBvbmUuICBUaGUgY29tcGlsZXIgd2lsbCBoYW5kbGUgYWxpYXNpbmcsIGVtaXR0aW5nCisjIGFuIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB3aGVuZXZlciBhbiBhbGlhcyBmaXJlcy4KKyMKKyMgMy4gTGlzdCBpdCBpbiB0aGUgc3RhbmRhcmQgdGFibGUuICBZb3UgYWxtb3N0IGNlcnRhaW5seSBkbyAqbm90KiB3YW50CisjIHRvIGRvIHRoaXMgLS0gdGhlIGNhcGFiaWxpdGllcyBpbiB0aGF0IG9uZSwgYW5kIHRoZWlyIG9yZGVyLCBoYXZlIGJlZW4KKyMgY2FyZWZ1bGx5IGNob3NlbiB0byBiZSBTVnI0LWJpbmFyeS1jb21wYXRpYmxlIHdoZW4gdGhleSdyZSB3cml0dGVuIG91dAorIyBhcyBhIHRlcm1pbmZvIG9iamVjdCwgYW5kIGJyZWFraW5nIHRoaXMgd291bGQgYmUgYmFkLiAgSXQncyB1cCB0aGUgbmN1cnNlcworIyBsaWJyYXJ5IHdoYXQgdG8gZG8gd2l0aCB0aGUgdGVybWluZm8gZGF0YSBhZnRlciBpdCdzIHJlYWQgaW4uCisjCisjIDQuIExpc3QgaXQgaW4gdGhlIGFsaWFzZXMgdGFibGUgd2l0aCBhbiBJR05PUkUgdGFyZ2V0IGZpZWxkLiAgSWYgeW91CisjIGRvIHRoaXMsIHRoZSBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZCBvbiBpbnB1dCAodGhvdWdoIHRoZSB1c2VyIHdpbGwKKyMgZ2V0IGEgd2FybmluZyBtZXNzYWdlIGFib3V0IGl0KS4KKyMKKyMgNS4gTGlzdCBpdCBpbiB0aGUgZXh0ZW5zaW9ucyB0YWJsZS4gSWYgeW91IGRvIHRoaXMsIHRoZSBjb21waWxlciB3aWxsCisjIHNpbGVudGx5IGFjY2VwdCB0aGUgY2FwYWJpbGl0eSwgYnV0IHRoZSBjdXJzZXMgbGlicmFyeSBwcm9wZXIgd2lsbCBuZXZlcgorIyBzZWUgaXQgKGJlY2F1c2UgaXQgd29uJ3QgYmUgd3JpdHRlbiBvdXQgYXMgcGFydCBvZiB0aGUgdGVybWluZm8gb2JqZWN0CisjIGZvcm1hdCkuICBJdCdzIHVwIHRvIHlvdSB3aGF0IHlvdSBoYXZlIHRoZSBjb21waWxlciBkbyB3aXRoIGl0LgorIworIyBUaGVyZSBhcmUgdHdvIG9wcG9zaXRlIHJlYXNvbnMgdG8gY2hvb3NlIG9wdGlvbiA1LiAgT25lIGlzIHdoZW4geW91IHdhbnQKKyMgdG8gZWF0IHRoZSBjYXBhYmlsaXR5IHNpbGVudGx5IGFuZCBkaXNjYXJkIGl0IHdoZW4gZG9pbmcgdHJhbnNsYXRpb25zCisjIHRvIHRlcm1pbmZvIHdpdGggdGljIC1JLiAgU29tZSB2ZXJ5IG9sZCBvYnNvbGV0ZSBCU0QgY2FwcyBsaWtlIDprbjogYXJlCisjIGluIHRoaXMgY2xhc3MuICBOb3RoaW5nIHdpbGwgZXZlciB1c2UgdGhlbSBhZ2Fpbi4KKyMKKyMgTW9yZSB1c3VhbGx5LCB5b3Ugd2FudCB0aGUgY29tcGlsZXIgdG8gdHJ5IHRvIGRlZHVjZSBzb21ldGhpbmcgZnJvbSB0aGUKKyMgY2FwYWJpbGl0eSB2YWx1ZSB0aGF0IGl0IGNhbiB1c2UgdG8gdHJhbnNsYXRlIGl0IGludG8geW91ciBvdXRwdXQgZm9ybWF0LgorIyBZb3UnbGwgbmVlZCB0byB3cml0ZSBjdXN0b20gY29kZSwgcHJvYmFibHkgaW4gcG9zdHByb2Nlc3NfdGVybWNhcCgpIG9yCisjIHBvc3Rwcm9jZXNzX3Rlcm1pbmZvKCksIHRvIGhhbmRsZSB0aGUgdHJhbnNsYXRpb24uCisjCisjIENPTlRST0xMSU5HIEVOVFJZIExFTkdUSCAKKyMKKyMgTm90ZXMgb24gc3BlY2lmaWMgZWxpc2lvbnMgbWFkZSB0byBmaXQgdHJhbnNsYXRpb25zIHdpdGhpbiAxMDIzIGJ5dGVzOgorIworIyBNYWNoaW5lcyB3aXRoIElCTSBQQy1saWtlIGtleWJvYXJkcyB3YW50IHRvIGJlIGFibGUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcKKyMga2V5czoga2V5X25wYWdlLCBrZXlfcHBhZ2UsIGtleV9ob21lLCBrZXlfbGwgKHdoaWNoIGlzIHVzZWQgZm9yIGluIHRlcm1jYXAtCisjIG9ubHkgZW52aXJvbm1lbnRzIGZvciBFbmQgb3IgSG9tZS1Eb3duKSwga2V5X2RjLCBhbmQga2V5X2ljLiAgVGhpcyBpcyBhbHNvCisjIHRoZSBzZXQgb2Yga2V5cyB0aGUgYGpvZScgZWRpdG9yIHdpbGwgYmUgdXBzZXQgaWYgaXQgY2FuJ3Qgc2VlLiAgU28gZG9uJ3QgCisjIHRyaW0gdGhvc2Ugb3V0IG9mIHRoZSBzZXQgdG8gYmUgdHJhbnNsYXRlZCB0byB0ZXJtY2FwLCBvciB2YXJpb3VzIHVzZXJzIG9mCisjIHRoZSB0ZXJtY2FwIGZpbGUgd2lsbCBiZWNvbWUgaXJhdGUuCisjCisjIEl0IG1pZ2h0IGxvb2sgdGVtcHRpbmcgdG8gbGVhdmUgdGhvc2UgbG9uZyBpbml0IHN0cmluZ3Mgb3V0IG9mIHRyYW5zbGF0aW9ucy4KKyMgV2UgY2FuJ3QgZG8gaXQgKHlldCk7IDQuNEJTRCB0cHV0IGFuZCB0c2V0IHVzZSB0aGVtLgorIworIyBXZSByZXRhaW4gdGhlIHNnciBjYXBhYmlsaXR5IGluIHRyYW5zbGF0aW9uIGluIHNwaXRlIG9mIHRoZSBmYWN0IHRoYXQgbmVpdGhlcgorIyA0LjRCU0Qgbm9yIEdOVSBFbWFjcyB1c2VzIGl0LCBiZWNhdXNlIChhKSBzb21lIGVudHJ5IG5hbWluZyBkaXN0aW5jdGlvbnMgYXJlCisjIGhhcmQgdG8gdW5kZXJzdGFuZCB3aXRob3V0IGl0LCBhbmQgKGIpIHRoZSBlbnRyaWVzIGluIHdoaWNoIGl0IGlzIGxvbmcgdGVuZAorIyB0byBiZSBvbGRlciB0eXBlcyB0aGF0IGRvbid0IHVzZSB1cCBhIGxvdCBvZiBzdHJpbmcgc3BhY2Ugb24gZnVuY3Rpb24ga2V5cy4KKyMgVGhlIHRpYygxKSB0cmFuc2xhdGlvbiBjb2RlIHdpbGwgY29tcGxhaW4gYW5kIGVsaWRlIGl0IGlmIGl0IG1ha2VzIGEgY3JpdGljYWwKKyMgZGlmZmVyZW5jZSAodGhlcmUgaXMgc3BlY2lhbCBjb2RlIGluIHRpYyB0byByZWNvZ25pemUgdGhpcyBzaXR1YXRpb24pLgorIworIyBZZXMsIEJTRCB0c2V0KDEpIHVzZXMgaHBhLiAgV2UgZWxpZGUgaHBhL3ZwYSBhbnl3YXkgYmVjYXVzZSB0aGUgbW90aW9uCisjIG9wdGltaXplciBpbiBCU0QgY3Vyc2VzIGRpZG4ndCB1c2UgdGhlbS4gIFRoaXMgb21pc3Npb24gc2VlbXMgdG8gYmUgdGhlCisjIHNpbmdsZSBtb3N0IGVmZmVjdGl2ZSBvbmUsIGl0IHNob3J0ZW5lZCB0aGUgcmVzb2x2ZWQgbGVuZ3RoIG9mIGFsbCB0aGlydGVlbgorIyBwcm9ibGVtIGVudHJpZXMgaW4gdGhlIDkuOS4wIHZlcnNpb24gb2YgdGhlIHRlcm1pbmZvIG1hc3RlciBiZWxvdyBjcml0aWNhbC4KKyMKKyMgSXQgd291bGQgYmUgbmljZSB0byBrZWVwIGYxMSBhbmQgZjEyIGZvciBFbWFjcyB1c2UsIGJ1dCBhIGNvdXBsZSBvZiB0ZXJtY2FwCisjIHRyYW5zbGF0aW9ucyBnbyBiYWNrIG92ZXIgY3JpdGljYWwgaWYgd2UgZG8gdGhpcy4gIEFzIDQuNEJTRCBjdXJzZXMgZmFkZXMKKyMgaW50byBoaXN0b3J5IGFuZCBHTlUgdGVybWNhcCdzIGFwcGxpY2F0aW9uIGJhc2Ugc2hyaW5rcyB0b3dhcmRzIGJlaW5nIEdOVSAKKyMgRW1hY3Mgb25seSwgd2UnbGwgcHJvYmFibHkgZWxpZGUgb3V0IHNvbWUgQlNELW9ubHkgY2FwYWJpbGl0aWVzIGluIG9yZGVyCisjIHRvIGJ1eSBzcGFjZSBmb3Igbm9uLWVzc2VudGlhbHMgRW1hY3MgaXMgc3RpbGwgdXNpbmcuICBDYXBhYmlsaXRpZXMgaGlnaAorIyBvbiB0aGF0IGhpdCBsaXN0OiByYywgc2MsIHVjLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgU1RBTkRBUkQgQ0FQQUJJTElUSUVTCisjCisjJVRoZSBmb2xsb3dpbmcgaXMgYSBjb21wbGV0ZSB0YWJsZSBvZiB0aGUgY2FwYWJpbGl0aWVzIGluY2x1ZGVkIGluIGEKKyMldGVybWluZm8gZGVzY3JpcHRpb24gYmxvY2sgYW5kIGF2YWlsYWJsZSB0byB0ZXJtaW5mby11c2luZyBjb2RlLiAgSW4gZWFjaAorIyVsaW5lIG9mIHRoZSB0YWJsZSwKKyMlCisjJVRoZSBcZkJ2YXJpYWJsZVxmUiBpcyB0aGUgbmFtZSBieSB3aGljaCB0aGUgcHJvZ3JhbW1lciAoYXQgdGhlIHRlcm1pbmZvIGxldmVsKQorIyVhY2Nlc3NlcyB0aGUgY2FwYWJpbGl0eS4KKyMlCisjJVRoZSBcZkJjYXBuYW1lXGZSIGlzIHRoZSBzaG9ydCBuYW1lIHVzZWQgaW4gdGhlIHRleHQgb2YgdGhlIGRhdGFiYXNlLAorIyVhbmQgaXMgdXNlZCBieSBhIHBlcnNvbiB1cGRhdGluZyB0aGUgZGF0YWJhc2UuCisjJVdoZW5ldmVyIHBvc3NpYmxlLCBjYXBuYW1lcyBhcmUgY2hvc2VuIHRvIGJlIHRoZSBzYW1lIGFzIG9yIHNpbWlsYXIgdG8KKyMldGhlIEFOU0kgWDMuNjQtMTk3OSBzdGFuZGFyZCAobm93IHN1cGVyc2VkZWQgYnkgRUNNQS00OCwgd2hpY2ggdXNlcyAKKyMlaWRlbnRpY2FsIG9yIHZlcnkgc2ltaWxhciBuYW1lcykuICBTZW1hbnRpY3MgYXJlIGFsc28gaW50ZW5kZWQgdG8gbWF0Y2gKKyMldGhvc2Ugb2YgdGhlIHNwZWNpZmljYXRpb24uCisjJQorIyVUaGUgdGVybWNhcCBjb2RlIGlzIHRoZSBvbGQKKyMlLkIgdGVybWNhcAorIyVjYXBhYmlsaXR5IG5hbWUgKHNvbWUgY2FwYWJpbGl0aWVzIGFyZSBuZXcsIGFuZCBoYXZlIG5hbWVzIHdoaWNoIHRlcm1jYXAKKyMlZGlkIG5vdCBvcmlnaW5hdGUpLgorIyUuUAorIyVDYXBhYmlsaXR5IG5hbWVzIGhhdmUgbm8gaGFyZCBsZW5ndGggbGltaXQsIGJ1dCBhbiBpbmZvcm1hbCBsaW1pdCBvZiA1CisjJWNoYXJhY3RlcnMgaGFzIGJlZW4gYWRvcHRlZCB0byBrZWVwIHRoZW0gc2hvcnQgYW5kIHRvIGFsbG93IHRoZSB0YWJzIGluCisjJXRoZSBzb3VyY2UgZmlsZQorIyUuQiBDYXBzCisjJXRvIGxpbmUgdXAgbmljZWx5LgorIyUKKyMlRmluYWxseSwgdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGF0dGVtcHRzIHRvIGNvbnZleSB0aGUgc2VtYW50aWNzIG9mIHRoZQorIyVjYXBhYmlsaXR5LiAgWW91IG1heSBmaW5kIHNvbWUgY29kZXMgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkOgorIyUuVFAKKyMlKFApCisjJWluZGljYXRlcyB0aGF0IHBhZGRpbmcgbWF5IGJlIHNwZWNpZmllZAorIyUuVFAKKyMlI1sxLTldCisjJWluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyaW5nIGlzIHBhc3NlZCB0aHJvdWdoIHRwYXJtIHdpdGgKKyMlcGFybXMgYXMgZ2l2ZW4gKCNcZklpXGZQKS4KKyMlLlRQCisjJShQKikKKyMlaW5kaWNhdGVzIHRoYXQgcGFkZGluZyBtYXkgdmFyeSBpbiBwcm9wb3J0aW9uIHRvIHRoZSBudW1iZXIgb2YKKyMlbGluZXMgYWZmZWN0ZWQKKyMlLlRQCisjJSgjXGRcZklpXGZQXHUpCisjJWluZGljYXRlcyB0aGUgXGZJaVxmUFx1dGhcZCBwYXJhbWV0ZXIuCisjJQorIyUuUFAKKyMlIFRoZXNlIGFyZSB0aGUgYm9vbGVhbiBjYXBhYmlsaXRpZXM6CisjJQorIyUubmEKKyMlLlRTIEgKKyMlY2VudGVyIGV4cGFuZDsKKyMlYyBsIGwgYworIyVjIGwgbCBjCisjJWx3MjUgbHc2IGx3MiBsdzIwLgorIyVcZkJWYXJpYWJsZQlDYXAtCVRDYXAJRGVzY3JpcHRpb25cZlIKKyMlXGZCQm9vbGVhbnMJbmFtZQlDb2RlXGZSCithdXRvX2xlZnRfbWFyZ2luCQlidwlib29sCWJ3CS0JLQlZQi1HLQljdWIxIHdyYXBzIGZyb20gY29sdW1uIDAgdG8gbGFzdCBjb2x1bW4KK2F1dG9fcmlnaHRfbWFyZ2luCQlhbQlib29sCWFtCS0JLQlZQkNHRQl0ZXJtaW5hbCBoYXMgYXV0b21hdGljIG1hcmdpbnMKK25vX2VzY19jdGxjCQkJeHNiCWJvb2wJeGIJLQktCVlCQ0ctCWJlZWhpdmUgKGYxPWVzY2FwZSwgZjI9Y3RybCBDKQorY2VvbF9zdGFuZG91dF9nbGl0Y2gJCXhocAlib29sCXhzCS0JLQlZQkNHRQlzdGFuZG91dCBub3QgZXJhc2VkIGJ5IG92ZXJ3cml0aW5nIChocCkKK2VhdF9uZXdsaW5lX2dsaXRjaAkJeGVubAlib29sCXhuCS0JLQlZQkNHRQluZXdsaW5lIGlnbm9yZWQgYWZ0ZXIgODAgY29scyAoY29uY2VwdCkKK2VyYXNlX292ZXJzdHJpa2UJCWVvCWJvb2wJZW8JLQktCVlCQ0ctCWNhbiBlcmFzZSBvdmVyc3RyaWtlcyB3aXRoIGEgYmxhbmsKK2dlbmVyaWNfdHlwZQkJCWduCWJvb2wJZ24JLQktCVlCLUctCWdlbmVyaWMgbGluZSB0eXBlCitoYXJkX2NvcHkJCQloYwlib29sCWhjCS0JLQlZQkNHLQloYXJkY29weSB0ZXJtaW5hbAoraGFzX21ldGFfa2V5CQkJa20JYm9vbAlrbQktCS0JWUItR0UJSGFzIGEgbWV0YSBrZXkgKGkuZS4sIHNldHMgOHRoLWJpdCkKK2hhc19zdGF0dXNfbGluZQkJCWhzCWJvb2wJaHMJLQktCVlCLUctCWhhcyBleHRyYSBzdGF0dXMgbGluZQoraW5zZXJ0X251bGxfZ2xpdGNoCQlpbglib29sCWluCS0JLQlZQkNHRQlpbnNlcnQgbW9kZSBkaXN0aW5ndWlzaGVzIG51bGxzCittZW1vcnlfYWJvdmUJCQlkYQlib29sCWRhCS0JLQlZQkNHLQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBhYm92ZSB0aGUgc2NyZWVuCittZW1vcnlfYmVsb3cJCQlkYglib29sCWRiCS0JLQlZQi1HRQlkaXNwbGF5IG1heSBiZSByZXRhaW5lZCBiZWxvdyB0aGUgc2NyZWVuCittb3ZlX2luc2VydF9tb2RlCQltaXIJYm9vbAltaQktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIGluc2VydCBtb2RlCittb3ZlX3N0YW5kb3V0X21vZGUJCW1zZ3IJYm9vbAltcwktCS0JWUJDR0UJc2FmZSB0byBtb3ZlIHdoaWxlIGluIHN0YW5kb3V0IG1vZGUKK292ZXJfc3RyaWtlCQkJb3MJYm9vbAlvcwktCS0JWUJDRy0JdGVybWluYWwgY2FuIG92ZXJzdHJpa2UKK3N0YXR1c19saW5lX2VzY19vawkJZXNsb2sJYm9vbAllcwktCS0JWUItRy0JZXNjYXBlIGNhbiBiZSB1c2VkIG9uIHRoZSBzdGF0dXMgbGluZQorZGVzdF90YWJzX21hZ2ljX3Ntc28JCXh0CWJvb2wJeHQJLQktCVlCQ0dFCXRhYnMgZGVzdHJ1Y3RpdmUsIG1hZ2ljIHNvIGNoYXIgKHQxMDYxKQordGlsZGVfZ2xpdGNoCQkJaHoJYm9vbAloegktCS0JWUItR0UJY2Fubm90IHByaW50IH4ncyAoaGF6ZWx0aW5lKQordHJhbnNwYXJlbnRfdW5kZXJsaW5lCQl1bAlib29sCXVsCS0JLQlZQkNHRQl1bmRlcmxpbmUgY2hhcmFjdGVyIG92ZXJzdHJpa2VzCit4b25feG9mZgkJCXhvbglib29sCXhvCS0JLQlZQi0tLQl0ZXJtaW5hbCB1c2VzIHhvbi94b2ZmIGhhbmRzaGFraW5nCituZWVkc194b25feG9mZgkJCW54b24JYm9vbAlueAktCS0JLS0tLS0JcGFkZGluZyB3aWxsIG5vdCB3b3JrLCB4b24veG9mZiByZXF1aXJlZAorcHJ0cl9zaWxlbnQJCQltYzVpCWJvb2wJNWkJLQktCS0tLS0tCXByaW50ZXIgd2lsbCBub3QgZWNobyBvbiBzY3JlZW4KK2hhcmRfY3Vyc29yCQkJY2h0cwlib29sCUhDCS0JLQktLS0tLQljdXJzb3IgaXMgaGFyZCB0byBzZWUKK25vbl9yZXZfcm1jdXAJCQlucnJtYwlib29sCU5SCS0JLQktLS0tLQlzbWN1cCBkb2VzIG5vdCByZXZlcnNlIHJtY3VwCitub19wYWRfY2hhcgkJCW5wYwlib29sCU5QCS0JLQktLS0tLQlwYWQgY2hhcmFjdGVyIGRvZXMgbm90IGV4aXN0Citub25fZGVzdF9zY3JvbGxfcmVnaW9uCQluZHNjcglib29sCU5ECS0JLQktLS0tLQlzY3JvbGxpbmcgcmVnaW9uIGlzIG5vbi1kZXN0cnVjdGl2ZQorYmFja19jb2xvcl9lcmFzZQkJYmNlCWJvb2wJdXQJLQktCS0tLS0tCXNjcmVlbiBlcmFzZWQgd2l0aCBiYWNrZ3JvdW5kIGNvbG9yCitjYW5fY2hhbmdlCQkJY2NjCWJvb2wJY2MJLQktCS0tLS0tCXRlcm1pbmFsIGNhbiByZS1kZWZpbmUgZXhpc3RpbmcgY29sb3JzCitodWVfbGlnaHRuZXNzX3NhdHVyYXRpb24JaGxzCWJvb2wJaGwJLQktCS0tLS0tCXRlcm1pbmFsIHVzZXMgb25seSBITFMgY29sb3Igbm90YXRpb24gKFRla3Ryb25peCkKKyMlLlRFCisjJS5hZAorIyUKKyMlVGhlc2UgYXJlIHRoZSBudW1lcmljIGNhcGFiaWxpdGllczoKKyMlCisjJS5uYQorIyUuVFMgSAorIyVjZW50ZXIgZXhwYW5kOworIyVjIGwgbCBjCisjJWMgbCBsIGMKKyMlbHcyNSBsdzYgbHcyIGx3MjAuCisjJVxmQlZhcmlhYmxlCUNhcC0JVENhcAlEZXNjcmlwdGlvblxmUgorIyVcZkJOdW1lcmljCW5hbWUJQ29kZVxmUgorY29sdW1ucwkJCQljb2xzCW51bQljbwktCS0JWUJDR0UJbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBsaW5lCitpbml0X3RhYnMJCQlpdAludW0JaXQJLQktCVlCLUctCXRhYnMgaW5pdGlhbGx5IGV2ZXJ5ICMgc3BhY2VzCitsaW5lcwkJCQlsaW5lcwludW0JbGkJLQktCVlCQ0dFCW51bWJlciBvZiBsaW5lcyBvbiBzY3JlZW4gb3IgcGFnZQorbGluZXNfb2ZfbWVtb3J5CQkJbG0JbnVtCWxtCS0JLQlZQi1HLQlsaW5lcyBvZiBtZW1vcnkgaWYgPiBsaW5lLiAwIG1lYW5zIHZhcmllcworbWFnaWNfY29va2llX2dsaXRjaAkJeG1jCW51bQlzZwktCS0JWUJDR0UJbnVtYmVyIG9mIGJsYW5rIGNoYXJhY3RlcnMgbGVmdCBieSBzbXNvIG9yIHJtc28KK3BhZGRpbmdfYmF1ZF9yYXRlCQlwYgludW0JcGIJLQktCVlCLUdFCWxvd2VzdCBiYXVkIHJhdGUgd2hlcmUgcGFkZGluZyBuZWVkZWQKK3ZpcnR1YWxfdGVybWluYWwJCXZ0CW51bQl2dAktCS0JWUItLS0JdmlydHVhbCB0ZXJtaW5hbCBudW1iZXIgKENCL3VuaXgpCit3aWR0aF9zdGF0dXNfbGluZQkJd3NsCW51bQl3cwktCS0JWUItRy0JbnVtYmVyIG9mIGNvbHVtbnMgaW4gc3RhdHVzIGxpbmUKK251bV9sYWJlbHMJCQlubGFiCW51bQlObAktCS0JLS0tLS0JbnVtYmVyIG9mIGxhYmVscyBvbiBzY3JlZW4KK2xhYmVsX2hlaWdodAkJCWxoCW51bQlsaAktCS0JLS0tLS0Jcm93cyBpbiBlYWNoIGxhYmVsCitsYWJlbF93aWR0aAkJCWx3CW51bQlsdwktCS0JLS0tLS0JY29sdW1ucyBpbiBlYWNoIGxhYmVsCitidXR0b25zCQkJCWJ0bnMJbnVtCUJUCS0JLQktLS0tLQludW1iZXIgb2YgYnV0dG9ucyBvbiBtb3VzZQorI21heF9hdHRyaWJ1dGVzCQkJbWEJbnVtCW1hCS0JLQlZQkMtLQltYXhpbXVtIGNvbWJpbmVkIGF0dHJpYnV0ZXMgdGVybWluYWwgY2FuIGhhbmRsZQorI21heGltdW1fd2luZG93cwkJd251bQludW0JTVcJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGRlZmluZWFibGUgd2luZG93cworIyBUaGVzZSBjYW1lIGluIHdpdGggU1ZyNCdzIGNvbG9yIHN1cHBvcnQKK21heF9jb2xvcnMJCQljb2xvcnMJbnVtCUNvCS0JLQktLS0tLQltYXhpbXVtIG51bWJlciBvZiBjb2xvcnMgb24gc2NyZWVuCittYXhfcGFpcnMJCQlwYWlycwludW0JcGEJLQktCS0tLS0tCW1heGltdW0gbnVtYmVyIG9mIGNvbG9yLXBhaXJzIG9uIHRoZSBzY3JlZW4KK25vX2NvbG9yX3ZpZGVvCQkJbmN2CW51bQlOQwktCS0JLS0tLS0JdmlkZW8gYXR0cmlidXRlcyB0aGF0IGNhbm5vdCBiZSB1c2VkIHdpdGggY29sb3JzCisjJS5URQorIyUuYWQKKyMlCisjJVRoZSBmb2xsb3dpbmcgbnVtZXJpYyBjYXBhYmlsaXRpZXMgYXJlIHByZXNlbnQgaW4gdGhlIFNWcjQuMCB0ZXJtIHN0cnVjdHVyZSwKKyMlYnV0IGFyZSBub3QgeWV0IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLiAgVGhleSBjYW1lIGluIHdpdGggU1ZyNCdzCisjJXByaW50ZXIgc3VwcG9ydC4KKyMlCisjJS5uYQorIyUKKyMlVGhlc2UgYXJlIHRoZSBzdHJpbmcgY2FwYWJpbGl0aWVzOgorIyUKKyMlLm5hCisjJS5UUyBICisjJWNlbnRlciBleHBhbmQ7CisjJWMgbCBsIGMKKyMlYyBsIGwgYworIyVsdzI1IGx3NiBsdzIgbHcyMC4KKyMlXGZCVmFyaWFibGUJQ2FwLQlUQ2FwCURlc2NyaXB0aW9uXGZSCisjJVxmQlN0cmluZwluYW1lCUNvZGVcZlIKK2JhY2tfdGFiCQkJY2J0CXN0cglidAktCQktCVlCQ0dFCWJhY2sgdGFiIChQKQorYmVsbAkJCQliZWwJc3RyCWJsCS0JCS0JWUItR0UJYXVkaWJsZSBzaWduYWwgKGJlbGwpIChQKQorY2FycmlhZ2VfcmV0dXJuCQkJY3IJc3RyCWNyCS0JCS0JWUJDR0UJY2FycmlhZ2UgcmV0dXJuIChQKikgKFAqKQorY2hhbmdlX3Njcm9sbF9yZWdpb24JCWNzcglzdHIJY3MJLQkJLQlZQkNHRQljaGFuZ2UgcmVnaW9uIHRvIGxpbmUgIzEgdG8gbGluZSAjMiAoUCkKK2NsZWFyX2FsbF90YWJzCQkJdGJjCXN0cgljdAktCQktCVlCLUctCWNsZWFyIGFsbCB0YWIgc3RvcHMgKFApCitjbGVhcl9zY3JlZW4JCQljbGVhcglzdHIJY2wJLQkJLQlZQkNHRQljbGVhciBzY3JlZW4gYW5kIGhvbWUgY3Vyc29yIChQKikKK2Nscl9lb2wJCQkJZWwJc3RyCWNlCS0JCS0JWUJDR0UJY2xlYXIgdG8gZW5kIG9mIGxpbmUgKFApCitjbHJfZW9zCQkJCWVkCXN0cgljZAktCQktCVlCQ0dFCWNsZWFyIHRvIGVuZCBvZiBzY3JlZW4gKFAqKQorY29sdW1uX2FkZHJlc3MJCQlocGEJc3RyCWNoCS0JCS0JLUItR0UqCWhvcml6b250YWwgcG9zaXRpb24gIzEsIGFic29sdXRlIChQKQorY29tbWFuZF9jaGFyYWN0ZXIJCWNtZGNoCXN0cglDQwktCQktCVlCLUctCXRlcm1pbmFsIHNldHRhYmxlIGNtZCBjaGFyYWN0ZXIgaW4gcHJvdG90eXBlICE/CitjdXJzb3JfYWRkcmVzcwkJCWN1cAlzdHIJY20JLQkJLQlZQkNHRQltb3ZlIHRvIHJvdyAjMSBjb2x1bW5zICMyCitjdXJzb3JfZG93bgkJCWN1ZDEJc3RyCWRvCS0JCS0JWUJDR0UJZG93biBvbmUgbGluZQorY3Vyc29yX2hvbWUJCQlob21lCXN0cglobwktCQktCVlCQ0dFCWhvbWUgY3Vyc29yIChpZiBubyBjdXApCitjdXJzb3JfaW52aXNpYmxlCQljaXZpcwlzdHIJdmkJLQkJLQlZQi1HLQltYWtlIGN1cnNvciBpbnZpc2libGUKK2N1cnNvcl9sZWZ0CQkJY3ViMQlzdHIJbGUJLQkJLQlZQkNHRQltb3ZlIGxlZnQgb25lIHNwYWNlCitjdXJzb3JfbWVtX2FkZHJlc3MJCW1yY3VwCXN0cglDTQktCQktCVlCLUctCW1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZywgbW92ZSB0byByb3cgIzEgY29sdW1ucyAjMgorY3Vyc29yX25vcm1hbAkJCWNub3JtCXN0cgl2ZQktCQktCVlCQ0dFCW1ha2UgY3Vyc29yIGFwcGVhciBub3JtYWwgKHVuZG8gY2l2aXMvY3Z2aXMpCitjdXJzb3JfcmlnaHQJCQljdWYxCXN0cgluZAktCQktCVlCQ0dFCW5vbi1kZXN0cnVjdGl2ZSBzcGFjZSAobW92ZSByaWdodCBvbmUgc3BhY2UpCitjdXJzb3JfdG9fbGwJCQlsbAlzdHIJbGwJLQkJLQlZQkNHRQlsYXN0IGxpbmUsIGZpcnN0IGNvbHVtbiAoaWYgbm8gY3VwKQorY3Vyc29yX3VwCQkJY3V1MQlzdHIJdXAJLQkJLQlZQkNHRQl1cCBvbmUgbGluZQorY3Vyc29yX3Zpc2libGUJCQljdnZpcwlzdHIJdnMJLQkJLQlZQkNHRQltYWtlIGN1cnNvciB2ZXJ5IHZpc2libGUKK2RlbGV0ZV9jaGFyYWN0ZXIJCWRjaDEJc3RyCWRjCS0JCS0JWUJDR0UJZGVsZXRlIGNoYXJhY3RlciAoUCopCitkZWxldGVfbGluZQkJCWRsMQlzdHIJZGwJLQkJLQlZQkNHRQlkZWxldGUgbGluZSAoUCopCitkaXNfc3RhdHVzX2xpbmUJCQlkc2wJc3RyCWRzCS0JCS0JWUItRy0JZGlzYWJsZSBzdGF0dXMgbGluZQorZG93bl9oYWxmX2xpbmUJCQloZAlzdHIJaGQJLQkJLQlZQi1HLQloYWxmIGEgbGluZSBkb3duCitlbnRlcl9hbHRfY2hhcnNldF9tb2RlCQlzbWFjcwlzdHIJYXMJLQkJLQlZQi1HLQlzdGFydCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCAoUCkKK2VudGVyX2JsaW5rX21vZGUJCWJsaW5rCXN0cgltYgktCQktCVlCLUctCXR1cm4gb24gYmxpbmtpbmcKK2VudGVyX2JvbGRfbW9kZQkJCWJvbGQJc3RyCW1kCS0JCS0JWUItRy0JdHVybiBvbiBib2xkIChleHRyYSBicmlnaHQpIG1vZGUKK2VudGVyX2NhX21vZGUJCQlzbWN1cAlzdHIJdGkJLQkJLQlZQkNHRQlzdHJpbmcgdG8gc3RhcnQgcHJvZ3JhbXMgdXNpbmcgY3VwCitlbnRlcl9kZWxldGVfbW9kZQkJc21kYwlzdHIJZG0JLQkJLQlZQkNHRQllbnRlciBkZWxldGUgbW9kZQorZW50ZXJfZGltX21vZGUJCQlkaW0Jc3RyCW1oCS0JCS0JWUItRy0JdHVybiBvbiBoYWxmLWJyaWdodCBtb2RlCitlbnRlcl9pbnNlcnRfbW9kZQkJc21pcglzdHIJaW0JLQkJLQlZQkNHRQllbnRlciBpbnNlcnQgbW9kZQorZW50ZXJfc2VjdXJlX21vZGUJCWludmlzCXN0cgltawktCQktCS1CLUctKgl0dXJuIG9uIGJsYW5rIG1vZGUgKGNoYXJhY3RlcnMgaW52aXNpYmxlKQorZW50ZXJfcHJvdGVjdGVkX21vZGUJCXByb3QJc3RyCW1wCS0JCS0JLUItRy0qCXR1cm4gb24gcHJvdGVjdGVkIG1vZGUKK2VudGVyX3JldmVyc2VfbW9kZQkJcmV2CXN0cgltcgktCQktCVlCLUctCXR1cm4gb24gcmV2ZXJzZSB2aWRlbyBtb2RlCitlbnRlcl9zdGFuZG91dF9tb2RlCQlzbXNvCXN0cglzbwktCQktCVlCQ0dFCWJlZ2luIHN0YW5kb3V0IG1vZGUKK2VudGVyX3VuZGVybGluZV9tb2RlCQlzbXVsCXN0cgl1cwktCQktCVlCQ0dFCWJlZ2luIHVuZGVybGluZSBtb2RlCitlcmFzZV9jaGFycwkJCWVjaAlzdHIJZWMJLQkJLQlZQi1HLQllcmFzZSAjMSBjaGFyYWN0ZXJzIChQKQorZXhpdF9hbHRfY2hhcnNldF9tb2RlCQlybWFjcwlzdHIJYWUJLQkJLQlZQi1HLQllbmQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgKFApCitleGl0X2F0dHJpYnV0ZV9tb2RlCQlzZ3IwCXN0cgltZQktCQktCVlCLUdFCXR1cm4gb2ZmIGFsbCBhdHRyaWJ1dGVzCitleGl0X2NhX21vZGUJCQlybWN1cAlzdHIJdGUJLQkJLQlZQkNHRQlzdHJpbmdzIHRvIGVuZCBwcm9ncmFtcyB1c2luZyBjdXAKK2V4aXRfZGVsZXRlX21vZGUJCXJtZGMJc3RyCWVkCS0JCS0JWUJDR0UJZW5kIGRlbGV0ZSBtb2RlCitleGl0X2luc2VydF9tb2RlCQlybWlyCXN0cgllaQktCQktCVlCQ0dFCWV4aXQgaW5zZXJ0IG1vZGUKK2V4aXRfc3RhbmRvdXRfbW9kZQkJcm1zbwlzdHIJc2UJLQkJLQlZQkNHRQlleGl0IHN0YW5kb3V0IG1vZGUKK2V4aXRfdW5kZXJsaW5lX21vZGUJCXJtdWwJc3RyCXVlCS0JCS0JWUJDR0UJZXhpdCB1bmRlcmxpbmUgbW9kZQorZmxhc2hfc2NyZWVuCQkJZmxhc2gJc3RyCXZiCS0JCS0JWUJDR0UJdmlzaWJsZSBiZWxsIChtYXkgbm90IG1vdmUgY3Vyc29yKQorZm9ybV9mZWVkCQkJZmYJc3RyCWZmCS0JCS0JWUItRy0JaGFyZGNvcHkgdGVybWluYWwgcGFnZSBlamVjdCAoUCopCitmcm9tX3N0YXR1c19saW5lCQlmc2wJc3RyCWZzCS0JCS0JWUItRy0JcmV0dXJuIGZyb20gc3RhdHVzIGxpbmUKK2luaXRfMXN0cmluZwkJCWlzMQlzdHIJaTEJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfMnN0cmluZwkJCWlzMglzdHIJaXMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfM3N0cmluZwkJCWlzMwlzdHIJaTMJLQkJLQlZQi1HLQlpbml0aWFsaXphdGlvbiBzdHJpbmcKK2luaXRfZmlsZQkJCWlmCXN0cglpZgktCQktCVlCLUctCW5hbWUgb2YgaW5pdGlhbGl6YXRpb24gZmlsZQoraW5zZXJ0X2NoYXJhY3RlcgkJaWNoMQlzdHIJaWMJLQkJLQlZQkNHRQlpbnNlcnQgY2hhcmFjdGVyIChQKQoraW5zZXJ0X2xpbmUJCQlpbDEJc3RyCWFsCS0JCS0JWUJDR0UJaW5zZXJ0IGxpbmUgKFAqKQoraW5zZXJ0X3BhZGRpbmcJCQlpcAlzdHIJaXAJLQkJLQlZQkNHRQlpbnNlcnQgcGFkZGluZyBhZnRlciBpbnNlcnRlZCBjaGFyYWN0ZXIKK2tleV9iYWNrc3BhY2UJCQlrYnMJc3RyCWtiCUtFWV9CQUNLU1BBQ0UJMDQwNwlZQi1HLQliYWNrc3BhY2Uga2V5CitrZXlfY2F0YWIJCQlrdGJjCXN0cglrYQlLRVlfQ0FUQUIJMDUyNgktQi1HLSoJY2xlYXItYWxsLXRhYnMga2V5CitrZXlfY2xlYXIJCQlrY2xyCXN0cglrQwlLRVlfQ0xFQVIJMDUxNQktQi1HLSoJY2xlYXItc2NyZWVuIG9yIGVyYXNlIGtleQora2V5X2N0YWIJCQlrY3RhYglzdHIJa3QJS0VZX0NUQUIJMDUyNQktQi1HLSoJY2xlYXItdGFiIGtleQora2V5X2RjCQkJCWtkY2gxCXN0cglrRAlLRVlfREMJCTA1MTIJWUItRy0JZGVsZXRlLWNoYXJhY3RlciBrZXkKK2tleV9kbAkJCQlrZGwxCXN0cglrTAlLRVlfREwJCTA1MTAJLUItRy0qCWRlbGV0ZS1saW5lIGtleQora2V5X2Rvd24JCQlrY3VkMQlzdHIJa2QJS0VZX0RPV04JMDQwMglZQkNHRQlkb3duLWFycm93IGtleQora2V5X2VpYwkJCQlrcm1pcglzdHIJa00JS0VZX0VJQwkJMDUxNAktQi1HLSoJc2VudCBieSBybWlyIG9yIHNtaXIgaW4gaW5zZXJ0IG1vZGUKK2tleV9lb2wJCQkJa2VsCXN0cglrRQlLRVlfRU9MCQkwNTE3CS1CLUctKgljbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9lb3MJCQkJa2VkCXN0cglrUwlLRVlfRU9TCQkwNTE2CS1CLUctKgljbGVhci10by1lbmQtb2Ytc2NyZWVuIGtleQora2V5X2YwCQkJCWtmMAlzdHIJazAJS0VZX0YoMCkJMDQxMAlZQkNHRQlGMCBmdW5jdGlvbiBrZXkKK2tleV9mMQkJCQlrZjEJc3RyCWsxCUtFWV9GKDEpCS0JWUJDR0UJRjEgZnVuY3Rpb24ga2V5CitrZXlfZjEwCQkJCWtmMTAJc3RyCWs7CUtFWV9GKDEwKQktCS0tLS1FCUYxMCBmdW5jdGlvbiBrZXkKK2tleV9mMgkJCQlrZjIJc3RyCWsyCUtFWV9GKDIpCS0JWUJDR0UJRjIgZnVuY3Rpb24ga2V5CitrZXlfZjMJCQkJa2YzCXN0cglrMwlLRVlfRigzKQktCVlCQ0dFCUYzIGZ1bmN0aW9uIGtleQora2V5X2Y0CQkJCWtmNAlzdHIJazQJS0VZX0YoNCkJLQlZQkNHRQlGNCBmdW5jdGlvbiBrZXkKK2tleV9mNQkJCQlrZjUJc3RyCWs1CUtFWV9GKDUpCS0JWUJDR0UJRjUgZnVuY3Rpb24ga2V5CitrZXlfZjYJCQkJa2Y2CXN0cglrNglLRVlfRig2KQktCVlCQ0dFCUY2IGZ1bmN0aW9uIGtleQora2V5X2Y3CQkJCWtmNwlzdHIJazcJS0VZX0YoNykJLQlZQkNHRQlGNyBmdW5jdGlvbiBrZXkKK2tleV9mOAkJCQlrZjgJc3RyCWs4CUtFWV9GKDgpCS0JWUJDR0UJRjggZnVuY3Rpb24ga2V5CitrZXlfZjkJCQkJa2Y5CXN0cglrOQlLRVlfRig5KQktCVlCQ0dFCUY5IGZ1bmN0aW9uIGtleQora2V5X2hvbWUJCQlraG9tZQlzdHIJa2gJS0VZX0hPTUUJMDQwNglZQkNHRQlob21lIGtleQora2V5X2ljCQkJCWtpY2gxCXN0cglrSQlLRVlfSUMJCTA1MTMJWUItR0UJaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9pbAkJCQlraWwxCXN0cglrQQlLRVlfSUwJCTA1MTEJLUItRy0qCWluc2VydC1saW5lIGtleQora2V5X2xlZnQJCQlrY3ViMQlzdHIJa2wJS0VZX0xFRlQJMDQwNAlZQkNHRQlsZWZ0LWFycm93IGtleQora2V5X2xsCQkJCWtsbAlzdHIJa0gJS0VZX0xMCQkwNTMzCVlCLUctCWxvd2VyLWxlZnQga2V5IChob21lIGRvd24pCitrZXlfbnBhZ2UJCQlrbnAJc3RyCWtOCUtFWV9OUEFHRQkwNTIyCVlCLUdFCW5leHQtcGFnZSBrZXkKK2tleV9wcGFnZQkJCWtwcAlzdHIJa1AJS0VZX1BQQUdFCTA1MjMJWUItR0UJcHJldmlvdXMtcGFnZSBrZXkKK2tleV9yaWdodAkJCWtjdWYxCXN0cglrcglLRVlfUklHSFQJMDQwNQlZQkNHRQlyaWdodC1hcnJvdyBrZXkKK2tleV9zZgkJCQlraW5kCXN0cglrRglLRVlfU0YJCTA1MjAJLUItRy0qCXNjcm9sbC1mb3J3YXJkIGtleQora2V5X3NyCQkJCWtyaQlzdHIJa1IJS0VZX1NSCQkwNTIxCS1CLUctKglzY3JvbGwtYmFja3dhcmQga2V5CitrZXlfc3RhYgkJCWtodHMJc3RyCWtUCUtFWV9TVEFCCTA1MjQJLUItRy0qCXNldC10YWIga2V5CitrZXlfdXAJCQkJa2N1dTEJc3RyCWt1CUtFWV9VUAkJMDQwMwlZQkNHRQl1cC1hcnJvdyBrZXkKK2tleXBhZF9sb2NhbAkJCXJta3gJc3RyCWtlCS0JCS0JWUJDR0UJbGVhdmUgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitrZXlwYWRfeG1pdAkJCXNta3gJc3RyCWtzCS0JCS0JWUJDR0UJZW50ZXIgJ2tleWJvYXJkX3RyYW5zbWl0JyBtb2RlCitsYWJfZjAJCQkJbGYwCXN0cglsMAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjAgaWYgbm90IGYwCitsYWJfZjEJCQkJbGYxCXN0cglsMQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjEgaWYgbm90IGYxCitsYWJfZjEwCQkJCWxmMTAJc3RyCWxhCS0JCS0JLS0tLS0JbGFiZWwgb24gZnVuY3Rpb24ga2V5IGYxMCBpZiBub3QgZjEwCitsYWJfZjIJCQkJbGYyCXN0cglsMgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjIgaWYgbm90IGYyCitsYWJfZjMJCQkJbGYzCXN0cglsMwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjMgaWYgbm90IGYzCitsYWJfZjQJCQkJbGY0CXN0cglsNAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjQgaWYgbm90IGY0CitsYWJfZjUJCQkJbGY1CXN0cglsNQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjUgaWYgbm90IGY1CitsYWJfZjYJCQkJbGY2CXN0cglsNgktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjYgaWYgbm90IGY2CitsYWJfZjcJCQkJbGY3CXN0cglsNwktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjcgaWYgbm90IGY3CitsYWJfZjgJCQkJbGY4CXN0cglsOAktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjggaWYgbm90IGY4CitsYWJfZjkJCQkJbGY5CXN0cglsOQktCQktCS1CLUctKglsYWJlbCBvbiBmdW5jdGlvbiBrZXkgZjkgaWYgbm90IGY5CittZXRhX29mZgkJCXJtbQlzdHIJbW8JLQkJLQlZQi1HLSoJdHVybiBvZmYgbWV0YSBtb2RlCittZXRhX29uCQkJCXNtbQlzdHIJbW0JLQkJLQlZQi1HLSoJdHVybiBvbiBtZXRhIG1vZGUgKDh0aC1iaXQgb24pCituZXdsaW5lCQkJCW5lbAlzdHIJbncJLQkJLQlZQi1HLSoJbmV3bGluZSAoYmVoYXZlIGxpa2UgY3IgZm9sbG93ZWQgYnkgbGYpCitwYWRfY2hhcgkJCXBhZAlzdHIJcGMJLQkJLQlZQkNHRQlwYWRkaW5nIGNoYXIgKGluc3RlYWQgb2YgbnVsbCkKK3Bhcm1fZGNoCQkJZGNoCXN0cglEQwktCQktCVlCLUdFCWRlbGV0ZSAjMSBjaGFyYWN0ZXJzIChQKikKK3Bhcm1fZGVsZXRlX2xpbmUJCWRsCXN0cglETAktCQktCVlCQ0dFCWRlbGV0ZSAjMSBsaW5lcyAoUCopCitwYXJtX2Rvd25fY3Vyc29yCQljdWQJc3RyCURPCS0JCS0JWUJDR0UJZG93biAjMSBsaW5lcyAoUCopCitwYXJtX2ljaAkJCWljaAlzdHIJSUMJLQkJLQlZQi1HRQlpbnNlcnQgIzEgY2hhcmFjdGVycyAoUCopCitwYXJtX2luZGV4CQkJaW5kbglzdHIJU0YJLQkJLQlZQkNHLQlzY3JvbGwgZm9yd2FyZCAjMSBsaW5lcyAoUCkKK3Bhcm1faW5zZXJ0X2xpbmUJCWlsCXN0cglBTAktCQktCVlCQ0dFCWluc2VydCAjMSBsaW5lcyAoUCopCitwYXJtX2xlZnRfY3Vyc29yCQljdWIJc3RyCUxFCS0JCS0JWUJDR0UJbW92ZSAjMSBjaGFyYWN0ZXJzIHRvIHRoZSBsZWZ0IChQKQorcGFybV9yaWdodF9jdXJzb3IJCWN1ZglzdHIJUkkJLQkJLQlZQkNHRQltb3ZlICMxIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IChQKikKK3Bhcm1fcmluZGV4CQkJcmluCXN0cglTUgktCQktCVlCQ0ctCXNjcm9sbCBiYWNrICMxIGxpbmVzIChQKQorcGFybV91cF9jdXJzb3IJCQljdXUJc3RyCVVQCS0JCS0JWUJDR0UJdXAgIzEgbGluZXMgKFAqKQorcGtleV9rZXkJCQlwZmtleQlzdHIJcGsJLQkJLQktQi0tLQlwcm9ncmFtIGZ1bmN0aW9uIGtleSAjMSB0byB0eXBlIHN0cmluZyAjMgorcGtleV9sb2NhbAkJCXBmbG9jCXN0cglwbAktCQktCS1CLS0tCXByb2dyYW0gZnVuY3Rpb24ga2V5ICMxIHRvIGV4ZWN1dGUgc3RyaW5nICMyCitwa2V5X3htaXQJCQlwZngJc3RyCXB4CS0JCS0JLUItLS0JcHJvZ3JhbSBmdW5jdGlvbiBrZXkgIzEgdG8gdHJhbnNtaXQgc3RyaW5nICMyCitwcmludF9zY3JlZW4JCQltYzAJc3RyCXBzCS0JCS0JLUItRy0qCXByaW50IGNvbnRlbnRzIG9mIHNjcmVlbgorcHJ0cl9vZmYJCQltYzQJc3RyCXBmCS0JCS0JLUItRy0qCXR1cm4gb2ZmIHByaW50ZXIKK3BydHJfb24JCQkJbWM1CXN0cglwbwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIKK3JlcGVhdF9jaGFyCQkJcmVwCXN0cglycAktCQktCVlCLUdFCXJlcGVhdCBjaGFyICMxICMyIHRpbWVzIChQKikKK3Jlc2V0XzFzdHJpbmcJCQlyczEJc3RyCXIxCS0JCS0JLUItLS0JcmVzZXQgc3RyaW5nCityZXNldF8yc3RyaW5nCQkJcnMyCXN0cglyMgktCQktCS1CLS0tCXJlc2V0IHN0cmluZworcmVzZXRfM3N0cmluZwkJCXJzMwlzdHIJcjMJLQkJLQktQi0tLQlyZXNldCBzdHJpbmcKK3Jlc2V0X2ZpbGUJCQlyZglzdHIJcmYJLQkJLQktQi0tLQluYW1lIG9mIHJlc2V0IGZpbGUKK3Jlc3RvcmVfY3Vyc29yCQkJcmMJc3RyCXJjCS0JCS0JWUJDRy0JcmVzdG9yZSBjdXJzb3IgdG8gcG9zaXRpb24gb2YgbGFzdCBzYXZlX2N1cnNvcgorcm93X2FkZHJlc3MJCQl2cGEJc3RyCWN2CS0JCS0JLUItR0UqCXZlcnRpY2FsIHBvc2l0aW9uICMxIGFic29sdXRlIChQKQorc2F2ZV9jdXJzb3IJCQlzYwlzdHIJc2MJLQkJLQlZQkNHLQlzYXZlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIChQKQorc2Nyb2xsX2ZvcndhcmQJCQlpbmQJc3RyCXNmCS0JCS0JWUJDR0UJc2Nyb2xsIHRleHQgdXAgKFApCitzY3JvbGxfcmV2ZXJzZQkJCXJpCXN0cglzcgktCQktCVlCQ0dFCXNjcm9sbCB0ZXh0IGRvd24gKFApCitzZXRfYXR0cmlidXRlcwkJCXNncglzdHIJc2EJLQkJLQlZQi1HLQlkZWZpbmUgdmlkZW8gYXR0cmlidXRlcyAjMS0jOSAoUEc5KQorc2V0X3RhYgkJCQlodHMJc3RyCXN0CS0JCS0JWUItRy0Jc2V0IGEgdGFiIGluIGV2ZXJ5IHJvdywgY3VycmVudCBjb2x1bW5zCitzZXRfd2luZG93CQkJd2luZAlzdHIJd2kJLQkJLQktQi1HRQljdXJyZW50IHdpbmRvdyBpcyBsaW5lcyAjMS0jMiBjb2xzICMzLSM0Cit0YWIJCQkJaHQJc3RyCXRhCS0JCS0JWUJDR0UJdGFiIHRvIG5leHQgOC1zcGFjZSBoYXJkd2FyZSB0YWIgc3RvcAordG9fc3RhdHVzX2xpbmUJCQl0c2wJc3RyCXRzCS0JCS0JWUItRy0JbW92ZSB0byBzdGF0dXMgbGluZSwgY29sdW1uICMxCit1bmRlcmxpbmVfY2hhcgkJCXVjCXN0cgl1YwktCQktCVlCQ0ctCXVuZGVybGluZSBjaGFyIGFuZCBtb3ZlIHBhc3QgaXQKK3VwX2hhbGZfbGluZQkJCWh1CXN0cglodQktCQktCVlCLUctCWhhbGYgYSBsaW5lIHVwCitpbml0X3Byb2cJCQlpcHJvZwlzdHIJaVAJLQkJLQktQi0tLQlwYXRoIG5hbWUgb2YgcHJvZ3JhbSBmb3IgaW5pdGlhbGl6YXRpb24KK2tleV9hMQkJCQlrYTEJc3RyCUsxCUtFWV9BMQkJMDUzNAlZQi1HRQl1cHBlciBsZWZ0IG9mIGtleXBhZAora2V5X2EzCQkJCWthMwlzdHIJSzMJS0VZX0EzCQkwNTM1CVlCLUdFCXVwcGVyIHJpZ2h0IG9mIGtleXBhZAora2V5X2IyCQkJCWtiMglzdHIJSzIJS0VZX0IyCQkwNTM2CVlCLUdFCWNlbnRlciBvZiBrZXlwYWQKK2tleV9jMQkJCQlrYzEJc3RyCUs0CUtFWV9DMQkJMDUzNwlZQi1HRQlsb3dlciBsZWZ0IG9mIGtleXBhZAora2V5X2MzCQkJCWtjMwlzdHIJSzUJS0VZX0MzCQkwNTQwCVlCLUdFCWxvd2VyIHJpZ2h0IG9mIGtleXBhZAorcHJ0cl9ub24JCQltYzVwCXN0cglwTwktCQktCS1CLUctKgl0dXJuIG9uIHByaW50ZXIgZm9yICMxIGJ5dGVzCisjCisjIFNWcjEgY2FwYWJpbGl0aWVzIHN0b3AgaGVyZS4JSUJNJ3MgdmVyc2lvbiBvZiB0ZXJtaW5mbyBpcyB0aGUgc2FtZSBhcworIyBTVnI0IHVwIHRvIHRoaXMgcG9pbnQsIGJ1dCBoYXMgYSBkaWZmZXJlbnQgc2V0IGFmdGVyd2FyZHMuCisjCitjaGFyX3BhZGRpbmcJCQlybXAJc3RyCXJQCS0JCS0JLS0tLS0JbGlrZSBpcCBidXQgd2hlbiBpbiBpbnNlcnQgbW9kZQorYWNzX2NoYXJzCQkJYWNzYwlzdHIJYWMJLQkJLQktLS0tLQlncmFwaGljcyBjaGFyc2V0IHBhaXJzLCBiYXNlZCBvbiB2dDEwMAorcGxhYl9ub3JtCQkJcGxuCXN0cglwbgktCQktCS0tLS0tCXByb2dyYW0gbGFiZWwgIzEgdG8gc2hvdyBzdHJpbmcgIzIKK2tleV9idGFiCQkJa2NidAlzdHIJa0IJS0VZX0JUQUIJMDU0MQktLS0tLQliYWNrLXRhYiBrZXkKK2VudGVyX3hvbl9tb2RlCQkJc214b24Jc3RyCVNYCS0JCS0JLS0tLS0JdHVybiBvbiB4b24veG9mZiBoYW5kc2hha2luZworZXhpdF94b25fbW9kZQkJCXJteG9uCXN0cglSWAktCQktCS0tLS0tCXR1cm4gb2ZmIHhvbi94b2ZmIGhhbmRzaGFraW5nCitlbnRlcl9hbV9tb2RlCQkJc21hbQlzdHIJU0EJLQkJLQktLS0tLQl0dXJuIG9uIGF1dG9tYXRpYyBtYXJnaW5zCitleGl0X2FtX21vZGUJCQlybWFtCXN0cglSQQktCQktCS0tLS0tCXR1cm4gb2ZmIGF1dG9tYXRpYyBtYXJnaW5zCit4b25fY2hhcmFjdGVyCQkJeG9uYwlzdHIJWE4JLQkJLQktLS0tLQlYT04gY2hhcmFjdGVyCit4b2ZmX2NoYXJhY3RlcgkJCXhvZmZjCXN0cglYRgktCQktCS0tLS0tCVhPRkYgY2hhcmFjdGVyCitlbmFfYWNzCQkJCWVuYWNzCXN0cgllQQktCQktCS0tLS0tCWVuYWJsZSBhbHRlcm5hdGUgY2hhciBzZXQKK2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCitsYWJlbF9vZmYJCQlybWxuCXN0cglMRgktCQktCS0tLS0tCXR1cm4gb2ZmIHNvZnQgbGFiZWxzCitrZXlfYmVnCQkJCWtiZWcJc3RyCUAxCUtFWV9CRUcJCTA1NDIJLS0tLS0JYmVnaW4ga2V5CitrZXlfY2FuY2VsCQkJa2NhbglzdHIJQDIJS0VZX0NBTkNFTAkwNTQzCS0tLS0tCWNhbmNlbCBrZXkKK2tleV9jbG9zZQkJCWtjbG8Jc3RyCUAzCUtFWV9DTE9TRQkwNTQ0CS0tLS0tCWNsb3NlIGtleQora2V5X2NvbW1hbmQJCQlrY21kCXN0cglANAlLRVlfQ09NTUFORAkwNTQ1CS0tLS0tCWNvbW1hbmQga2V5CitrZXlfY29weQkJCWtjcHkJc3RyCUA1CUtFWV9DT1BZCTA1NDYJLS0tLS0JY29weSBrZXkKK2tleV9jcmVhdGUJCQlrY3J0CXN0cglANglLRVlfQ1JFQVRFCTA1NDcJLS0tLS0JY3JlYXRlIGtleQora2V5X2VuZAkJCQlrZW5kCXN0cglANwlLRVlfRU5ECQkwNTUwCS0tLS0tCWVuZCBrZXkKK2tleV9lbnRlcgkJCWtlbnQJc3RyCUA4CUtFWV9FTlRFUgkwNTI3CS0tLS0tCWVudGVyL3NlbmQga2V5CitrZXlfZXhpdAkJCWtleHQJc3RyCUA5CUtFWV9FWElUCTA1NTEJLS0tLS0JZXhpdCBrZXkKK2tleV9maW5kCQkJa2ZuZAlzdHIJQDAJS0VZX0ZJTkQJMDU1MgktLS0tLQlmaW5kIGtleQora2V5X2hlbHAJCQlraGxwCXN0cgklMQlLRVlfSEVMUAkwNTUzCS0tLS0tCWhlbHAga2V5CitrZXlfbWFyawkJCWttcmsJc3RyCSUyCUtFWV9NQVJLCTA1NTQJLS0tLS0JbWFyayBrZXkKK2tleV9tZXNzYWdlCQkJa21zZwlzdHIJJTMJS0VZX01FU1NBR0UJMDU1NQktLS0tLQltZXNzYWdlIGtleQora2V5X21vdmUJCQlrbW92CXN0cgklNAlLRVlfTU9WRQkwNTU2CS0tLS0tCW1vdmUga2V5CitrZXlfbmV4dAkJCWtueHQJc3RyCSU1CUtFWV9ORVhUCTA1NTcJLS0tLS0JbmV4dCBrZXkKK2tleV9vcGVuCQkJa29wbglzdHIJJTYJS0VZX09QRU4JMDU2MAktLS0tLQlvcGVuIGtleQora2V5X29wdGlvbnMJCQlrb3B0CXN0cgklNwlLRVlfT1BUSU9OUwkwNTYxCS0tLS0tCW9wdGlvbnMga2V5CitrZXlfcHJldmlvdXMJCQlrcHJ2CXN0cgklOAlLRVlfUFJFVklPVVMJMDU2MgktLS0tLQlwcmV2aW91cyBrZXkKK2tleV9wcmludAkJCWtwcnQJc3RyCSU5CUtFWV9QUklOVAkwNTMyCS0tLS0tCXByaW50IGtleQora2V5X3JlZG8JCQlrcmRvCXN0cgklMAlLRVlfUkVETwkwNTYzCS0tLS0tCXJlZG8ga2V5CitrZXlfcmVmZXJlbmNlCQkJa3JlZglzdHIJJjEJS0VZX1JFRkVSRU5DRQkwNTY0CS0tLS0tCXJlZmVyZW5jZSBrZXkKK2tleV9yZWZyZXNoCQkJa3JmcglzdHIJJjIJS0VZX1JFRlJFU0gJMDU2NQktLS0tLQlyZWZyZXNoIGtleQora2V5X3JlcGxhY2UJCQlrcnBsCXN0cgkmMwlLRVlfUkVQTEFDRQkwNTY2CS0tLS0tCXJlcGxhY2Uga2V5CitrZXlfcmVzdGFydAkJCWtyc3QJc3RyCSY0CUtFWV9SRVNUQVJUCTA1NjcJLS0tLS0JcmVzdGFydCBrZXkKK2tleV9yZXN1bWUJCQlrcmVzCXN0cgkmNQlLRVlfUkVTVU1FCTA1NzAJLS0tLS0JcmVzdW1lIGtleQora2V5X3NhdmUJCQlrc2F2CXN0cgkmNglLRVlfU0FWRQkwNTcxCS0tLS0tCXNhdmUga2V5CitrZXlfc3VzcGVuZAkJCWtzcGQJc3RyCSY3CUtFWV9TVVNQRU5ECTA2MjcJLS0tLS0Jc3VzcGVuZCBrZXkKK2tleV91bmRvCQkJa3VuZAlzdHIJJjgJS0VZX1VORE8JMDYzMAktLS0tLQl1bmRvIGtleQora2V5X3NiZWcJCQlrQkVHCXN0cgkmOQlLRVlfU0JFRwkwNTcyCS0tLS0tCXNoaWZ0ZWQgYmVnaW4ga2V5CitrZXlfc2NhbmNlbAkJCWtDQU4Jc3RyCSYwCUtFWV9TQ0FOQ0VMCTA1NzMJLS0tLS0Jc2hpZnRlZCBjYW5jZWwga2V5CitrZXlfc2NvbW1hbmQJCQlrQ01ECXN0cgkqMQlLRVlfU0NPTU1BTkQJMDU3NAktLS0tLQlzaGlmdGVkIGNvbW1hbmQga2V5CitrZXlfc2NvcHkJCQlrQ1BZCXN0cgkqMglLRVlfU0NPUFkJMDU3NQktLS0tLQlzaGlmdGVkIGNvcHkga2V5CitrZXlfc2NyZWF0ZQkJCWtDUlQJc3RyCSozCUtFWV9TQ1JFQVRFCTA1NzYJLS0tLS0Jc2hpZnRlZCBjcmVhdGUga2V5CitrZXlfc2RjCQkJCWtEQwlzdHIJKjQJS0VZX1NEQwkJMDU3NwktLS0tLQlzaGlmdGVkIGRlbGV0ZS1jaGFyYWN0ZXIga2V5CitrZXlfc2RsCQkJCWtETAlzdHIJKjUJS0VZX1NETAkJMDYwMAktLS0tLQlzaGlmdGVkIGRlbGV0ZS1saW5lIGtleQora2V5X3NlbGVjdAkJCWtzbHQJc3RyCSo2CUtFWV9TRUxFQ1QJMDYwMQktLS0tLQlzZWxlY3Qga2V5CitrZXlfc2VuZAkJCWtFTkQJc3RyCSo3CUtFWV9TRU5ECTA2MDIJLS0tLS0Jc2hpZnRlZCBlbmQga2V5CitrZXlfc2VvbAkJCWtFT0wJc3RyCSo4CUtFWV9TRU9MCTA2MDMJLS0tLS0Jc2hpZnRlZCBjbGVhci10by1lbmQtb2YtbGluZSBrZXkKK2tleV9zZXhpdAkJCWtFWFQJc3RyCSo5CUtFWV9TRVhJVAkwNjA0CS0tLS0tCXNoaWZ0ZWQgZXhpdCBrZXkKK2tleV9zZmluZAkJCWtGTkQJc3RyCSowCUtFWV9TRklORAkwNjA1CS0tLS0tCXNoaWZ0ZWQgZmluZCBrZXkKK2tleV9zaGVscAkJCWtITFAJc3RyCSMxCUtFWV9TSEVMUAkwNjA2CS0tLS0tCXNoaWZ0ZWQgaGVscCBrZXkKK2tleV9zaG9tZQkJCWtIT00Jc3RyCSMyCUtFWV9TSE9NRQkwNjA3CS0tLS0tCXNoaWZ0ZWQgaG9tZSBrZXkKK2tleV9zaWMJCQkJa0lDCXN0cgkjMwlLRVlfU0lDCQkwNjEwCS0tLS0tCXNoaWZ0ZWQgaW5zZXJ0LWNoYXJhY3RlciBrZXkKK2tleV9zbGVmdAkJCWtMRlQJc3RyCSM0CUtFWV9TTEVGVAkwNjExCS0tLS0tCXNoaWZ0ZWQgbGVmdC1hcnJvdyBrZXkKK2tleV9zbWVzc2FnZQkJCWtNU0cJc3RyCSVhCUtFWV9TTUVTU0FHRQkwNjEyCS0tLS0tCXNoaWZ0ZWQgbWVzc2FnZSBrZXkKK2tleV9zbW92ZQkJCWtNT1YJc3RyCSViCUtFWV9TTU9WRQkwNjEzCS0tLS0tCXNoaWZ0ZWQgbW92ZSBrZXkKK2tleV9zbmV4dAkJCWtOWFQJc3RyCSVjCUtFWV9TTkVYVAkwNjE0CS0tLS0tCXNoaWZ0ZWQgbmV4dCBrZXkKK2tleV9zb3B0aW9ucwkJCWtPUFQJc3RyCSVkCUtFWV9TT1BUSU9OUwkwNjE1CS0tLS0tCXNoaWZ0ZWQgb3B0aW9ucyBrZXkKK2tleV9zcHJldmlvdXMJCQlrUFJWCXN0cgklZQlLRVlfU1BSRVZJT1VTCTA2MTYJLS0tLS0Jc2hpZnRlZCBwcmV2aW91cyBrZXkKK2tleV9zcHJpbnQJCQlrUFJUCXN0cgklZglLRVlfU1BSSU5UCTA2MTcJLS0tLS0Jc2hpZnRlZCBwcmludCBrZXkKK2tleV9zcmVkbwkJCWtSRE8Jc3RyCSVnCUtFWV9TUkVETwkwNjIwCS0tLS0tCXNoaWZ0ZWQgcmVkbyBrZXkKK2tleV9zcmVwbGFjZQkJCWtSUEwJc3RyCSVoCUtFWV9TUkVQTEFDRQkwNjIxCS0tLS0tCXNoaWZ0ZWQgcmVwbGFjZSBrZXkKK2tleV9zcmlnaHQJCQlrUklUCXN0cgklaQlLRVlfU1JJR0hUCTA2MjIJLS0tLS0Jc2hpZnRlZCByaWdodC1hcnJvdyBrZXkKK2tleV9zcnN1bWUJCQlrUkVTCXN0cgklaglLRVlfU1JTVU1FCTA2MjMJLS0tLS0Jc2hpZnRlZCByZXN1bWUga2V5CitrZXlfc3NhdmUJCQlrU0FWCXN0cgkhMQlLRVlfU1NBVkUJMDYyNAktLS0tLQlzaGlmdGVkIHNhdmUga2V5CitrZXlfc3N1c3BlbmQJCQlrU1BECXN0cgkhMglLRVlfU1NVU1BFTkQJMDYyNQktLS0tLQlzaGlmdGVkIHN1c3BlbmQga2V5CitrZXlfc3VuZG8JCQlrVU5ECXN0cgkhMwlLRVlfU1VORE8JMDYyNgktLS0tLQlzaGlmdGVkIHVuZG8ga2V5CityZXFfZm9yX2lucHV0CQkJcmZpCXN0cglSRgktCQktCS0tLS0tCXNlbmQgbmV4dCBpbnB1dCBjaGFyIChmb3IgcHR5cykKK2tleV9mMTEJCQkJa2YxMQlzdHIJRjEJS0VZX0YoMTEpCS0JLS0tLUUJRjExIGZ1bmN0aW9uIGtleQora2V5X2YxMgkJCQlrZjEyCXN0cglGMglLRVlfRigxMikJLQktLS0tRQlGMTIgZnVuY3Rpb24ga2V5CitrZXlfZjEzCQkJCWtmMTMJc3RyCUYzCUtFWV9GKDEzKQktCS0tLS1FCUYxMyBmdW5jdGlvbiBrZXkKK2tleV9mMTQJCQkJa2YxNAlzdHIJRjQJS0VZX0YoMTQpCS0JLS0tLUUJRjE0IGZ1bmN0aW9uIGtleQora2V5X2YxNQkJCQlrZjE1CXN0cglGNQlLRVlfRigxNSkJLQktLS0tRQlGMTUgZnVuY3Rpb24ga2V5CitrZXlfZjE2CQkJCWtmMTYJc3RyCUY2CUtFWV9GKDE2KQktCS0tLS1FCUYxNiBmdW5jdGlvbiBrZXkKK2tleV9mMTcJCQkJa2YxNwlzdHIJRjcJS0VZX0YoMTcpCS0JLS0tLUUJRjE3IGZ1bmN0aW9uIGtleQora2V5X2YxOAkJCQlrZjE4CXN0cglGOAlLRVlfRigxOCkJLQktLS0tRQlGMTggZnVuY3Rpb24ga2V5CitrZXlfZjE5CQkJCWtmMTkJc3RyCUY5CUtFWV9GKDE5KQktCS0tLS1FCUYxOSBmdW5jdGlvbiBrZXkKK2tleV9mMjAJCQkJa2YyMAlzdHIJRkEJS0VZX0YoMjApCS0JLS0tLUUJRjIwIGZ1bmN0aW9uIGtleQora2V5X2YyMQkJCQlrZjIxCXN0cglGQglLRVlfRigyMSkJLQktLS0tRQlGMjEgZnVuY3Rpb24ga2V5CitrZXlfZjIyCQkJCWtmMjIJc3RyCUZDCUtFWV9GKDIyKQktCS0tLS1FCUYyMiBmdW5jdGlvbiBrZXkKK2tleV9mMjMJCQkJa2YyMwlzdHIJRkQJS0VZX0YoMjMpCS0JLS0tLUUJRjIzIGZ1bmN0aW9uIGtleQora2V5X2YyNAkJCQlrZjI0CXN0cglGRQlLRVlfRigyNCkJLQktLS0tRQlGMjQgZnVuY3Rpb24ga2V5CitrZXlfZjI1CQkJCWtmMjUJc3RyCUZGCUtFWV9GKDI1KQktCS0tLS1FCUYyNSBmdW5jdGlvbiBrZXkKK2tleV9mMjYJCQkJa2YyNglzdHIJRkcJS0VZX0YoMjYpCS0JLS0tLUUJRjI2IGZ1bmN0aW9uIGtleQora2V5X2YyNwkJCQlrZjI3CXN0cglGSAlLRVlfRigyNykJLQktLS0tRQlGMjcgZnVuY3Rpb24ga2V5CitrZXlfZjI4CQkJCWtmMjgJc3RyCUZJCUtFWV9GKDI4KQktCS0tLS1FCUYyOCBmdW5jdGlvbiBrZXkKK2tleV9mMjkJCQkJa2YyOQlzdHIJRkoJS0VZX0YoMjkpCS0JLS0tLUUJRjI5IGZ1bmN0aW9uIGtleQora2V5X2YzMAkJCQlrZjMwCXN0cglGSwlLRVlfRigzMCkJLQktLS0tRQlGMzAgZnVuY3Rpb24ga2V5CitrZXlfZjMxCQkJCWtmMzEJc3RyCUZMCUtFWV9GKDMxKQktCS0tLS1FCUYzMSBmdW5jdGlvbiBrZXkKK2tleV9mMzIJCQkJa2YzMglzdHIJRk0JS0VZX0YoMzIpCS0JLS0tLUUJRjMyIGZ1bmN0aW9uIGtleQora2V5X2YzMwkJCQlrZjMzCXN0cglGTglLRVlfRigzMykJLQktLS0tRQlGMzMgZnVuY3Rpb24ga2V5CitrZXlfZjM0CQkJCWtmMzQJc3RyCUZPCUtFWV9GKDM0KQktCS0tLS1FCUYzNCBmdW5jdGlvbiBrZXkKK2tleV9mMzUJCQkJa2YzNQlzdHIJRlAJS0VZX0YoMzUpCS0JLS0tLUUJRjM1IGZ1bmN0aW9uIGtleQora2V5X2YzNgkJCQlrZjM2CXN0cglGUQlLRVlfRigzNikJLQktLS0tRQlGMzYgZnVuY3Rpb24ga2V5CitrZXlfZjM3CQkJCWtmMzcJc3RyCUZSCUtFWV9GKDM3KQktCS0tLS1FCUYzNyBmdW5jdGlvbiBrZXkKK2tleV9mMzgJCQkJa2YzOAlzdHIJRlMJS0VZX0YoMzgpCS0JLS0tLUUJRjM4IGZ1bmN0aW9uIGtleQora2V5X2YzOQkJCQlrZjM5CXN0cglGVAlLRVlfRigzOSkJLQktLS0tRQlGMzkgZnVuY3Rpb24ga2V5CitrZXlfZjQwCQkJCWtmNDAJc3RyCUZVCUtFWV9GKDQwKQktCS0tLS1FCUY0MCBmdW5jdGlvbiBrZXkKK2tleV9mNDEJCQkJa2Y0MQlzdHIJRlYJS0VZX0YoNDEpCS0JLS0tLUUJRjQxIGZ1bmN0aW9uIGtleQora2V5X2Y0MgkJCQlrZjQyCXN0cglGVwlLRVlfRig0MikJLQktLS0tRQlGNDIgZnVuY3Rpb24ga2V5CitrZXlfZjQzCQkJCWtmNDMJc3RyCUZYCUtFWV9GKDQzKQktCS0tLS1FCUY0MyBmdW5jdGlvbiBrZXkKK2tleV9mNDQJCQkJa2Y0NAlzdHIJRlkJS0VZX0YoNDQpCS0JLS0tLUUJRjQ0IGZ1bmN0aW9uIGtleQora2V5X2Y0NQkJCQlrZjQ1CXN0cglGWglLRVlfRig0NSkJLQktLS0tRQlGNDUgZnVuY3Rpb24ga2V5CitrZXlfZjQ2CQkJCWtmNDYJc3RyCUZhCUtFWV9GKDQ2KQktCS0tLS1FCUY0NiBmdW5jdGlvbiBrZXkKK2tleV9mNDcJCQkJa2Y0NwlzdHIJRmIJS0VZX0YoNDcpCS0JLS0tLUUJRjQ3IGZ1bmN0aW9uIGtleQora2V5X2Y0OAkJCQlrZjQ4CXN0cglGYwlLRVlfRig0OCkJLQktLS0tRQlGNDggZnVuY3Rpb24ga2V5CitrZXlfZjQ5CQkJCWtmNDkJc3RyCUZkCUtFWV9GKDQ5KQktCS0tLS1FCUY0OSBmdW5jdGlvbiBrZXkKK2tleV9mNTAJCQkJa2Y1MAlzdHIJRmUJS0VZX0YoNTApCS0JLS0tLUUJRjUwIGZ1bmN0aW9uIGtleQora2V5X2Y1MQkJCQlrZjUxCXN0cglGZglLRVlfRig1MSkJLQktLS0tRQlGNTEgZnVuY3Rpb24ga2V5CitrZXlfZjUyCQkJCWtmNTIJc3RyCUZnCUtFWV9GKDUyKQktCS0tLS1FCUY1MiBmdW5jdGlvbiBrZXkKK2tleV9mNTMJCQkJa2Y1MwlzdHIJRmgJS0VZX0YoNTMpCS0JLS0tLUUJRjUzIGZ1bmN0aW9uIGtleQora2V5X2Y1NAkJCQlrZjU0CXN0cglGaQlLRVlfRig1NCkJLQktLS0tRQlGNTQgZnVuY3Rpb24ga2V5CitrZXlfZjU1CQkJCWtmNTUJc3RyCUZqCUtFWV9GKDU1KQktCS0tLS1FCUY1NSBmdW5jdGlvbiBrZXkKK2tleV9mNTYJCQkJa2Y1NglzdHIJRmsJS0VZX0YoNTYpCS0JLS0tLUUJRjU2IGZ1bmN0aW9uIGtleQora2V5X2Y1NwkJCQlrZjU3CXN0cglGbAlLRVlfRig1NykJLQktLS0tRQlGNTcgZnVuY3Rpb24ga2V5CitrZXlfZjU4CQkJCWtmNTgJc3RyCUZtCUtFWV9GKDU4KQktCS0tLS1FCUY1OCBmdW5jdGlvbiBrZXkKK2tleV9mNTkJCQkJa2Y1OQlzdHIJRm4JS0VZX0YoNTkpCS0JLS0tLUUJRjU5IGZ1bmN0aW9uIGtleQora2V5X2Y2MAkJCQlrZjYwCXN0cglGbwlLRVlfRig2MCkJLQktLS0tRQlGNjAgZnVuY3Rpb24ga2V5CitrZXlfZjYxCQkJCWtmNjEJc3RyCUZwCUtFWV9GKDYxKQktCS0tLS1FCUY2MSBmdW5jdGlvbiBrZXkKK2tleV9mNjIJCQkJa2Y2MglzdHIJRnEJS0VZX0YoNjIpCS0JLS0tLUUJRjYyIGZ1bmN0aW9uIGtleQora2V5X2Y2MwkJCQlrZjYzCXN0cglGcglLRVlfRig2MykJLQktLS0tRQlGNjMgZnVuY3Rpb24ga2V5CitjbHJfYm9sCQkJCWVsMQlzdHIJY2IJLQkJLQktLS0tLQlDbGVhciB0byBiZWdpbm5pbmcgb2YgbGluZQorY2xlYXJfbWFyZ2lucwkJCW1nYwlzdHIJTUMJLQkJLQktLS0tLQljbGVhciByaWdodCBhbmQgbGVmdCBzb2Z0IG1hcmdpbnMKK3NldF9sZWZ0X21hcmdpbgkJCXNtZ2wJc3RyCU1MCS0JCS0JLS0tLS0Jc2V0IGxlZnQgc29mdCBtYXJnaW4gYXQgY3VycmVudCBjb2x1bW4uCSBTZWUgc21nbC4gKE1MIGlzIG5vdCBpbiBCU0QgdGVybWNhcCkuCitzZXRfcmlnaHRfbWFyZ2luCQlzbWdyCXN0cglNUgktCQktCS0tLS0tCXNldCByaWdodCBzb2Z0IG1hcmdpbiBhdCBjdXJyZW50IGNvbHVtbgorZGV2aWNlX3R5cGUJCQlkZXZ0CXN0cglkdgktCQktCS0tLS0tCUluZGljYXRlIGxhbmd1YWdlL2NvZGVzZXQgc3VwcG9ydAorY29kZV9zZXRfaW5pdAkJCWNzaW4Jc3RyCWNpCS0JCS0JLS0tLS0JSW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgY29kZXNldHMKK3NldDBfZGVzX3NlcQkJCXMwZHMJc3RyCXMwCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAwIChFVUMgc2V0IDAsIEFTQ0lJKQorc2V0MV9kZXNfc2VxCQkJczFkcwlzdHIJczEJLQkJLQktLS0tLQlTaGlmdCB0byBjb2Rlc2V0IDEKK3NldDJfZGVzX3NlcQkJCXMyZHMJc3RyCXMyCS0JCS0JLS0tLS0JU2hpZnQgdG8gY29kZXNldCAyCitzZXQzX2Rlc19zZXEJCQlzM2RzCXN0cglzMwktCQktCS0tLS0tCVNoaWZ0IHRvIGNvZGVzZXQgMwora2V5X21vdXNlCQkJa21vdXMJc3RyCUttCUtFWV9NT1VTRQkwNjMxCS0tLS0tCU1vdXNlIGV2ZW50IGhhcyBvY2N1cnJlZAorbW91c2VfaW5mbwkJCW1pbmZvCXN0cglNaQktCQktCS0tLS0tCU1vdXNlIHN0YXR1cyBpbmZvcm1hdGlvbgorcmVxX21vdXNlX3BvcwkJCXJlcW1wCXN0cglSUQktCQktCS0tLS0tCVJlcXVlc3QgbW91c2UgcG9zaXRpb24KK2dldF9tb3VzZQkJCWdldG0Jc3RyCUdtCS0JCS0JLS0tLS0JQ3Vyc2VzIHNob3VsZCBnZXQgYnV0dG9uIGV2ZW50cywgcGFyYW1ldGVyICMxIG5vdCBkb2N1bWVudGVkLgorcmVsZWFzZV9tb3VzZQkJCXJlbG0Jc3RyCVJtCS0JCS0JLS0tLS0JQ3Vyc2VzIHNob3VsZCByZWxlYXNlIHRoZSBtb3VzZSAqLworY29sb3JfbmFtZXMJCQljb2xvcm5tCXN0cglZdwktCQktCS0tLS0tCUdpdmUgbmFtZSBmb3IgY29sb3IgIzEKK2luaXRpYWxpemVfY29sb3IJCWluaXRjCXN0cglJYwktCQktCS0tLS0tCWluaXRpYWxpemUgY29sb3IgIzEgdG8gKCMyLCMzLCM0KQoraW5pdGlhbGl6ZV9wYWlyCQkJaW5pdHAJc3RyCUlwCS0JCS0JLS0tLS0JSW5pdGlhbGl6ZSBjb2xvciBwYWlyICMxIHRvIGZnPSgjMiwjMywjNCksIGJnPSgjNSwjNiwjNykKK29yaWdfY29sb3JzCQkJb2MJc3RyCW9jCS0JCS0JLS0tLS0JU2V0IGFsbCBjb2xvciBwYWlycyB0byB0aGUgb3JpZ2luYWwgb25lcworb3JpZ19wYWlyCQkJb3AJc3RyCW9wCS0JCS0JLS0tLS0JU2V0IGRlZmF1bHQgcGFpciB0byBpdHMgb3JpZ2luYWwgdmFsdWUKK3NldF9hX2JhY2tncm91bmQJCXNldGFiCXN0cglBQgktCQktCS0tLS0tCVNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvICMxLCB1c2luZyBBTlNJIGVzY2FwZQorc2V0X2FfZm9yZWdyb3VuZAkJc2V0YWYJc3RyCUFGCS0JCS0JLS0tLS0JU2V0IGZvcmVncm91bmQgY29sb3IgdG8gIzEsIHVzaW5nIEFOU0kgZXNjYXBlCitzZXRfYmFja2dyb3VuZAkJCXNldGIJc3RyCVNiCS0JCS0JLS0tLS0JU2V0IGJhY2tncm91bmQgY29sb3IgIzEKK3NldF9jb2xvcl9wYWlyCQkJc2NwCXN0cglzcAktCQktCS0tLS0tCVNldCBjdXJyZW50IGNvbG9yIHBhaXIgdG8gIzEKK3NldF9mb3JlZ3JvdW5kCQkJc2V0ZglzdHIJU2YJLQkJLQktLS0tLQlTZXQgZm9yZWdyb3VuZCBjb2xvciAjMQorIyUuVEUKKyMlLmFkCisjJQorIyBUaGUgbWFnaWMgdG9rZW4gYmVsb3cgdGVsbHMgdGhlIHRpYyBjb21waWxlci1nZW5lcmF0b3IgY29kZSB0aGF0IGFsbCB0aGUgY2FwcworIyBwYXN0IGl0IHNob3VsZCBiZSBpZ25vcmVkIChub3Qgd3JpdHRlbiBvdXQpIHdoZW4gZHVtcGluZyB0ZXJtaW5mbyBvYmplY3RzLiBJdAorIyBhbHNvIHRlbGxzIHRoZSBtYW4gcGFnZSB0YWJsZSBnZW5lcmF0b3Igbm90IHRvIHBhc3MgdGhyb3VnaCBmb2xsb3dpbmcgbGluZXMKKyMgVGhpcyBtZWFucyB3ZSBjYW4gaGF2ZSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMgYW5kIHBzZXVkby1jYXBhYmlsaXRpZXMgdGhhdCBhcmUKKyMgcmVjb2duaXplZCBmb3IgdGVybWNhcCBvciB0ZXJtaW5mbyBjb21waWxhdGlvbiwgYnV0IG5vdCBvdXRwdXQuCisjCisjICUlLVNUT1AtSEVSRS0lJQorIworIyBEb24ndCBtb3ZlIHRoaXMgY2FzdWFsbHkhICBJbiBmYWN0LCBkb24ndCBtb3ZlIGl0IGF0IGFsbCB1bmxlc3MgeW91J3JlCisjIGVpdGhlciBkb2luZyBpdCB0byBhZGQgU3lzdGVtIFYgb3IgWFBHNCBleHRlbnNpb25zLCBvciBoYXZlIGRlY2lkZWQgeW91CisjIGRvbid0IGNhcmUgYWJvdXQgU1ZyNCBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRFUk1DQVAgRVhURU5TSU9OIENBUEFCSUxJVElFUworIworIyBUaGUgY2FwYWJpbGl0aWVzIGJlbG93IGFyZSBlaXRoZXIgb2Jzb2xldGUgb3IgZXh0ZW5zaW9ucyBvbiBjZXJ0YWluIHN5c3RlbXMuCisjIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IFNWUjQgdGVybWluZm8uICBTb21lIGFyZSB1c2VkIGJ5IGNhcHRvaW5mbyB0byB0cmFuc2xhdGUKKyMgdGVybWNhcCBzb3VyY2VzOyB0aGUgcmVzdCBhcmUgbGlzdGVkIGZvciBjb21wbGV0ZW5lc3MsIGFuZCBpbiBjYXNlIHNvbWVib2R5CisjIGNhcmVzIGFib3V0IHRoZW0gZW5vdWdoIHRvIGhhY2sgaW4gY29kZSB0aGF0IHdpbGwgdHJhbnNsYXRlIHRoZW0gaW50bworIyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMuCisjCisjIFRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBsaXN0IGlzIGZyb20gUm9zcyBSaWRnZSdzIGBteXRpbmZvJyBwYWNrYWdlCisjIChjb21wLnNvdXJjZXMudW5peCwgdm9sdW1lIDI2KTsgdGhlIHZhcmlhYmxlIG5hbWVzIGFuZCB0ZXJtaW5mbyBuYW1lcyAoYXMKKyMgd2VsbCBhcyB0aGUgdGVybWNhcCBjb2RlcykgbWF0Y2ggaGlzIGxpc3QuCisjCisjIFRoaXMgZ3JvdXAgb2YgY29kZXMgaXMgbm90IG1hcmtlZCBvYnNvbGV0ZSBpbiA0LjRCU0QsIGJ1dCBoYXZlIG5vIGRpcmVjdAorIyB0ZXJtaW5mbyBlcXVpdmFsZW50cy4gIFRoZSBycyBjYXBhYmlsaXR5IGlzIHNwZWNpYWxseSB0cmFuc2xhdGVkIHRvIHRlcm1pbmZvCisjIHIyLCBhbmQgdmljZSB2ZXJzYSwgaWYgYW4gZW50cnkgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIHIyLiAgU2ltaWxhcmx5LAorIyBpMiBpcyB0cmFuc2xhdGVkIHRvIHIzIGlmIHRoZXJlIGlzIG5vIHIzIChiZWNhdXNlIFNWIHRlcm1pbmZvIG1hcHMgaXMgdG8gaTIpLgorIyBUaGUgdWcgY2FwYWJpbGl0eSBpcyB0aHJvd24gYXdheSwgYnV0IGFzc3VtZWQgdG8gYmUgd2hhdGV2ZXIgc2cgaXMgaWYgdGhlCisjIGxhdHRlciBpcyBub256ZXJvIGFuZCB3ZSdyZSBkdW1waW5nIGluIHRlcm1jYXAgZm9ybWF0LgorIwordGVybWNhcF9pbml0MgkJCU9UaTIJc3RyCWkyCS0JCS0JWUItLS0Jc2Vjb25kYXJ5IGluaXRpYWxpemF0aW9uIHN0cmluZwordGVybWNhcF9yZXNldAkJCU9UcnMJc3RyCXJzCS0JCS0JWUItRy0JdGVybWluYWwgcmVzZXQgc3RyaW5nCittYWdpY19jb29raWVfZ2xpdGNoX3VsCQlPVHVnCW51bQl1ZwktCQktCVlCQ0dFCW51bWJlciBvZiBibGFua3MgbGVmdCBieSB1bAorIworIyBPYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4gIFNvbWUgYXJlIHVzZWQgZm9yIHRlcm1jYXAgdHJhbnNsYXRpb24uICBUaGUKKyMgY29kZSB1c2VzIHRoZSAnT1QnIHByZWZpeCB3ZSBwdXQgb24gb2Jzb2xldGUgY2FwYWJpbGl0aWVzIHRvIHN1cHByZXNzCisjIHByaW50aW5nIHRoZW0gaW4gdGVybWluZm8gc291cmNlIGR1bXBzIG9mIGNvbXBpbGVkIGVudHJpZXMuCisjCitiYWNrc3BhY2VzX3dpdGhfYnMJCU9UYnMJYm9vbAlicwktCQktCVlCQ0dFCXVzZXMgXkggdG8gbW92ZSBsZWZ0CitjcnRfbm9fc2Nyb2xsaW5nCQlPVG5zCWJvb2wJbnMJLQkJLQlZQkNHLQljcnQgY2Fubm90IHNjcm9sbAorbm9fY29ycmVjdGx5X3dvcmtpbmdfY3IJCU9UbmMJYm9vbAluYwktCQktCVlCQ0ctCW5vIHdheSB0byBnbyB0byBzdGFydCBvZiBsaW5lCitjYXJyaWFnZV9yZXR1cm5fZGVsYXkJCU9UZEMJbnVtCWRDCS0JCS0JWUItRy0JcGFkIG5lZWRlZCBmb3IgQ1IKK25ld19saW5lX2RlbGF5CQkJT1RkTgludW0JZE4JLQkJLQlZQi1HLQlwYWQgbmVlZGVkIGZvciBMRgorbGluZWZlZWRfaWZfbm90X2xmCQlPVG5sCXN0cglubAktCQktCVlCQ0dFCXVzZSB0byBtb3ZlIGRvd24KK2JhY2tzcGFjZV9pZl9ub3RfYnMJCU9UYmMJc3RyCWJjCS0JCS0JWUJDR0UJbW92ZSBsZWZ0LCBpZiBub3QgXkgKKyMKKyMgR05VIHRlcm1jYXAgbGlicmFyeSBleHRlbnNpb25zLiAgVGhlIEdOVSB0ZXJtY2FwIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyBFbWFjcyBubyBsb25nZXIgdXNlcyB0aGVzZSwgYnV0IE1UIHNob3dlZCB1cCBpbiBwcmUtOS4wIHZlcnNpb25zIG9mIHRoZQorIyBCU0QgdGVybWNhcCBmaWxlLiAgVGhlIG5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbyBNVCBpcyByZXNvbHZlZCBieSB0eXBlCisjIGluZm87IE1UIGlzIGNvbnZlcnRlZCB0byBrbS4KKyMKK2dudV9oYXNfbWV0YV9rZXkJCU9UTVQJYm9vbAlNVAktCQktCS0tLS1FCWhhcyBtZXRhIGtleQorIyBnbnVfdGFiX3dpZHRoCQkJT1R0dwludW0JdHcJLQkJLQktLS0tRQl0YWIgd2lkdGggaW4gc3BhY2VzCisjCisjIEdOVSB0ZXJtY2FwICpkb2VzKiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZXh0ZW5kZWQgY2FwYWJpbGl0eSwgIE9ubHkgdGhlCisjIG5vdy1vYnNvbGV0ZSBBbm4gQXJib3IgdGVybWluYWxzIHVzZWQgaXQuCisjCisjIGdudV9jaGFuZ2Vfc2Nyb2xsX3JlZ2lvbglPVGNTCXN0cgljUwktCQktCS0tLUdFCWFsdGVybmF0ZSBzZXQgc2Nyb2xsaW5nIHJlZ2lvbiAKKyMKKyMgVGhlIGZvbGxvd2luZyBjb21tZW50cyBkZXNjcmliZSBjYXBuYW1lcyBzbyBhbmNpZW50IHRoYXQgSSBiZWxpZXZlIG5vCisjIHNvZnR3YXJlIHVzZXMgdGhlbSBhbnkgbG9uZ2VyLiAgU29tZSBvZiB0aGVzZSBoYXZlIHRvIGdvIGJlY2F1c2UgdGhleQorIyBjbGFzaCB3aXRoIHRlcm1pbmZvIG5hbWVzIGluIHdheXMgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgdHlwZQorIyBpbmZvcm1hdGlvbi4KKyMKKyMgVGhlc2UgbXl0aW5mbyBjb2RlcyBhcmUgbm90IHVzZWQgaW4gdGhlIDQuNEJTRCBjdXJzZXMgY29kZS4gIFRoZXkgYXJlCisjIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgNC40QlNEIG1hbnVhbCBwYWdlcy4KKyMKKyMgVGhlcmUgaXMgb25lIGNvbmZsaWN0IHdpdGggdGVybWluZm87IG1hIGlzIGluIGJvdGguICBUaGlzIGNvbmZsaWN0IGlzCisjIHJlc29sdmVkIGJ5IHR5cGUgaW5mb3JtYXRpb24uCisjCisjIFRoZSBga28nIGNhcGFiaWxpdHkgaXMgdHJhbnNsYXRlZCBieSBzcGVjaWFsIGNvZGUuICBJdCBzaG91bGQgY29udGFpbiBhCisjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhcGFiaWxpdGllcyBmb3Igd2hpY2ggdGhlcmUgYXJlIGNvcnJlc3BvbmRpbmcga2V5cy4KKyMgVGhlIGBrbicgY29kZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyMKKyMgVGhlIGBtYScgY2FwYWJpbGl0eSBzZWVtcyB0byBoYXZlIGJlZW4gZGVzaWduZWQgdG8gbWFwIGJldHdlZW4gdGhlIHJvZ3VlKDIpCisjIG1vdGlvbiBrZXlzIChpbmNsdWRpbmcgamtobCkgYW5kIGNoYXJhY3RlcnMgZW1pdHRlZCBieSBhcnJvdyBrZXlzIG9uIHNvbWUKKyMgcHJpbWl0aXZlIHByZS1BTlNJIHRlcm1pbmFscy4gIEl0J3Mgc28gb2Jzb2xldGUgaXQncyBmb3NzaWxpemVkLi4uCisjCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBtZW1vcnlfbG9ja19hYm92ZSBhbmQgbWVtb3J5X3VubG9jazoKKyMgIllvdSBjYW4gJ2ZyZWV6ZScgZGF0YSBvbiB0aGUgc2NyZWVuIGJ5IHR1cm5pbmcgb24gTWVtb3J5IExvY2sgaW4gYSBsaW5lIG9mCisjIHRleHQuICBBbGwgbGluZXMgYWJvdmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgbGluZSBiZWNvbWUgbG9ja2VkIGluIHBsYWNlIG9uCisjIHRoZSBzY3JlZW4uICBUaGVuIGVudGVyIGRhdGEgbm9ybWFsbHkuICBXaGVuIHRoZSBzY3JlZW4gZmlsbHMgdXAsIGFueQorIyBmdXJ0aGVyIGRhdGEgZW50ZXJlZCBmb3JjZXMgdGhlIGZpcnN0IGxpbmUgb2YgdW5mcm96ZW4gbGluZSB0ZXh0IHRvIHNjcm9sbAorIyB1bmRlciB0aGUgZnJvemVuIGRhdGEuICBMaW5lcyBzY3JvbGxlZCBvZmYgdGhlIHNjcmVlbiBhcmUgaW5zZXJ0ZWQgaW50bworIyBtZW1vcnkgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBmaXJzdCBmcm96ZW4gbGluZS4iIChmcm9tIHRoZSBIUCA3MDAvOTYKKyMgVXNlcidzIG1hbnVhbCkuICBWVDEwMC9BTlNJIG1lbW9yeSBsb2NrIHNldCBpcyBcRVs+MmgsIHJlc2V0IGlzIFxFWz4ybC4KKyMKKyMgQXBwbGljYXRpb25zIHRoYXQgdXNlIHRlcm1pbmZvIGFyZSBzdXBwb3NlZCB0byBiZWhhdmUgYXMgdGhvdWdoIHhyIGlzCisjIGFsd2F5cyB0cnVlLgorIworbGluZWZlZWRfaXNfbmV3bGluZQkJT1ROTAlib29sCU5MCS0JCS0JWUItLS0JbW92ZSBkb3duIHdpdGggXG4KKyMgZXZlbl9wYXJpdHkJCQlPVEVQCWJvb2wJRVAJLQkJLQktQi0tLQl0ZXJtaW5hbCByZXF1aXJlcyBldmVuIHBhcml0eQorIyBvZGRfcGFyaXR5CQkJT1RPUAlib29sCU9QCS0JCS0JLUItLS0JdGVybWluYWwgcmVxdWlyZXMgb2RkIHBhcml0eQorIyBoYWxmX2R1cGxleAkJCU9USEQJYm9vbAlIRAktCQktCS1CLS0tCXRlcm1pbmFsIGlzIGhhbGYtZHVwbGV4CisjIGxvd2VyX2Nhc2Vfb25seQkJT1RMQwlib29sCUxDCS0JCS0JLUItLS0JdGVybWluYWwgaGFzIG9ubHkgbG93ZXIgY2FzZQorIyB1cHBlcl9jYXNlX29ubHkJCU9UVUMJYm9vbAlVQwktCQktCS1CLS0tCXRlcm1pbmFsIGhhcyBvbmx5IHVwcGVyIGNhc2UKK2JhY2tzcGFjZV9kZWxheQkJCU9UZEIJbnVtCWRCCS0JCS0JWUItRy0JcGFkZGluZyByZXF1aXJlZCBmb3IgXkgKKyMgZm9ybV9mZWVkX2RlbGF5CQlPVGRGCW51bQlkRgktCQktCS1CLUctCXBhZGRpbmcgcmVxdWlyZWQgZm9yIF5MCitob3Jpem9udGFsX3RhYl9kZWxheQkJT1RkVAludW0JZFQJLQkJLQlZQi1HLQlwYWRkaW5nIHJlcXVpcmVkIGZvciBeSQorIyB2ZXJ0aWNhbF90YWJfZGVsYXkJCU9UZFYJbnVtCWRWCS0JCS0JLUItLS0JcGFkZGluZyByZXF1aXJlZCBmb3IgXlYKK251bWJlcl9vZl9mdW5jdGlvbl9rZXlzCQlPVGtuCW51bQlrbgktCQktCS1CLUctCWNvdW50IG9mIGZ1bmN0aW9uIGtleXMKK290aGVyX25vbl9mdW5jdGlvbl9rZXlzCQlPVGtvCXN0cglrbwktCQktCS1CLUctCWxpc3Qgb2Ygc2VsZi1tYXBwZWQga2V5Y2FwcworYXJyb3dfa2V5X21hcAkJCU9UbWEJc3RyCW1hCS0JCS0JWUJDLS0JbWFwIGFycm93IGtleXMgcm9ndWUoMSkgbW90aW9uIGtleXMKKyMgbWVtb3J5X2xvY2tfYWJvdmUJCU9UbWwJc3RyCW1sCS0JCS0JLUItLS0JbG9jayB2aXNpYmxlIHNjcmVlbiBtZW1vcnkgYWJvdmUgdGhlIGN1cnJlbnQgbGluZQorIyBtZW1vcnlfdW5sb2NrCQkJT1RtdQlzdHIJbXUJLQkJLQktQi0tLQl1bmxvY2sgdmlzaWJsZSBzY3JlZW4gbWVtb3J5IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUKK2hhc19oYXJkd2FyZV90YWJzCQlPVHB0CWJvb2wJcHQJLQkJLQlZQi0tLQloYXMgOC1jaGFyIHRhYnMgaW52b2tlZCB3aXRoIF5JCityZXR1cm5fZG9lc19jbHJfZW9sCQlPVHhyCWJvb2wJeHIJLQkJLQlZQi0tLQlyZXR1cm4gY2xlYXJzIHRoZSBsaW5lCisjIHRla180MDI1X2luc2VydF9saW5lCQlPVHh4CWJvb2wJeHgJLQkJLQktQkMtLQlUZWt0cm9uaXggNDAyNSBpbnNlcnQtbGluZSBnbGl0Y2gKKyMKKyMgbXl0aW5mbyBkZXNjcmliZWQgdGhpcyBhcyBhIHRlcm1jYXAgY2FwYWJpbGl0eSwgYnV0IGl0J3Mgbm90IGxpc3RlZCBpbiB0aGUKKyMgNC40QlNEIG1hbiBwYWdlcywgYW5kIG5vdCBmb3VuZCBpbiB0aGUgNC40QlNEIHRlcm1jYXAgZmlsZS4gIFRoZSBuY3Vyc2VzCisjIHBhY2thZ2UsIGxpa2UgU3lzdGVtIFYsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFsd2F5cyB0cnVlLgorIworIyByaW5kX29ubHlfYXRfdG9wCQlPVHhxCWJvb2wJeHEJLQkJLQktLS0tLQlyZXZlcnNlIGluZGV4IG9ubHkgd29ya3MgZnJvbSB0b3AgbGluZQorIworIyBVbml2ZXJzaXR5IG9mIFdhdGVybG9vIHRlcm1jYXAgZXh0ZW5zaW9ucyAoYXMgZGVzY3JpYmVkIGluIG15dGluZm8pLgorIyBUaGUgYHhsJyB0ZXJtY2FwIGZpbGUgY2xhc2hlcyB3aXRoIGEgdGVybWluZm8gbmFtZTsgdGhpcyBhbWJpZ3VpdHkgY2Fubm90CisjIGJlIHJlc29sdmVkIGJ5IGEgdHlwZSBjaGVjay4gIFRoZSBkZXNjcmlwdGlvbnMgYXJlIGd1ZXNzZXMgZnJvbSB3aGF0IHdhcworIyBpbiB0aGUgbXl0aW5mbyB0YWJsZXMuIAorIworIyBrZXlfaW50ZXJydXB0X2NoYXIJCU9Ua2kJc3RyCWtpCS0JCS0JLS0tLS0Jc3RyaW5nIHNldCBieSBpbnRlcnJ1cHQga2V5ICg/KQorIyBrZXlfa2lsbF9jaGFyCQkJT1RrawlzdHIJa2sJLQkJLQktLS0tLQlzdHJpbmcgc2V0IGJ5IGtpbGwga2V5ICg/KQorIyBrZXlfc3VzcGVuZF9jaGFyCQlPVGt6CXN0cglregktCQktCS0tLS0tCXN0cmluZyBzZXQgYnkgc3VzcGVuZCBrZXkgKD8pCisjIGluaXRpYWxpemF0aW9uX21lc3N5CQlPVHhjCWJvb2wJeGMJLQkJLQktLS0tLQlpbml0aWFsaXphdGlvbiBsZWF2ZXMgZ2FyYmFnZSBvbiB0aGUgc2NyZWVuICg/KQorIyBpbmRfYXRfYm90dG9tX2RvZXNfY3IJCU9UeGwJYm9vbAl4bAktCQktCS0tLS0tCWluZGV4IGRvZXMgYSBjYXJyaWFnZSByZXR1cm4KKyMKKyMgTm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHVuaXF1ZSB0byBSb3NzIFJpZGdlJ3MgYG15dGluZm8nIHBhY2thZ2UuCisjIFNSIGNsYXNoZXMgd2l0aCBhIHRlcm1pbmZvIG5hbWU7IHRoaXMgYW1iaWd1aXR5IGNhbm5vdCBiZSByZXNvbHZlZCBieSBhIHR5cGUKKyMgY2hlY2suCisjCisjIHNjcm9sbF9sZWZ0CQkJT1RzbDEJc3RyCVNsCS0JCS0JLS0tLS0Jc2Nyb2xsIHNjcmVlbiBsZWZ0d2FyZAorIyBzY3JvbGxfcmlnaHQJCQlPVHNyMQlzdHIJU3IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZAorIyBwYXJtX3Njcm9sbF9sZWZ0CQlPVHNsCXN0cglTTAktCQktCS0tLS0tCXNjcm9sbCBzY3JlZW4gbGVmdHdhcmQgIzEgY2hhcmFjdGVycworIyBwYXJtX3Njcm9sbF9yaWdodAkJT1RzcglzdHIJU1IJLQkJLQktLS0tLQlzY3JvbGwgc2NyZWVuIHJpZ2h0d2FyZCAjMSBjaGFyYWN0ZXJzCisjCisjIFRoZSBteXRpbmZvIGNhcGFiaWxpdGllcyBlbmQgaGVyZS4KKyMKKyMgWEVOSVggZXh0ZW5zaW9uczoKKyMKKyMgWGVuaXggZGVmaW5lZCBpdHMgb3duIHNldCBvZiBmb3Jtcy1kcmF3aW5nIGNhcGFiaWxpdGllczoKKyMKKyMgY2FwCUlCTSBBU0NJSQlkZXNjcmlwdGlvbiAgICAgICAgICAgICBBQ1MgICAgICAgICAJQVNDSUkKKyMgLS0tCS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0JLS0tLS0tCisjIEcxCTE5MSBcMjc3IE0tPwlzaW5nbGUgdXBwZXIgcmlnaHQgICAJQUNTX1VSQ09STkVSCisjIEcyCTIxOCBcMzMyIE0tWglzaW5nbGUgdXBwZXIgbGVmdAlBQ1NfVUxDT1JORVIKKyMgRzMJMTkyIFwzMDAgTS1ACXNpbmdsZSBsb3dlciBsZWZ0CUFDU19MTENPUk5FUgorIyBHNAkyMTcgXDMzMSBNLVkJc2luZ2xlIGxvd2VyIHJpZ2h0CUFDU19MUkNPUk5FUgorIyBHNQkxODcgXDI3MyBNLTsJZG91YmxlIHVwcGVyIHJpZ2h0CisjIEc2CTIwMSBcMzExIE0tSQlkb3VibGUgdXBwZXIgbGVmdAorIyBHNwkyMDAgXDMxMCBNLUgJZG91YmxlIGxvd2VyIGxlZnQKKyMgRzgJMTg4IFwyNzQgTS08CWRvdWJsZSBsb3dlciByaWdodAorIyBHQwkxOTcgXDMwNSBNLUUJc2luZ2xlIGludGVyc2VjdGlvbglBQ1NfUExVUwlfIF8KKyMgR0QJMTk0IFwzMDIgTS1CCXNpbmdsZSBkb3duLXRpY2sJQUNTX1RURUUJIHwKKyMgR0gJMTk2IFwzMDQgTS1ECXNpbmdsZSBob3Jpem9udGFsIGxpbmUJQUNTX0hMSU5FCisjIEdMCTE4MCBcMjY0IE0tNAlzaW5nbGUgbGVmdCB0aWNrCUFDU19SVEVFCS18CisjIEdSCTE5NSBcMzAzIE0tQwlzaW5nbGUgcmlnaHQgdGljawlBQ1NfTFRFRQl8LQorIyBHVQkxOTMgXDMwMSBNLUEJc2luZ2xlIHVwIHRpY2sJCUFDU19CVEVFCV98XworIyBHVgkxNzkgXDI2MyBNLTMJc2luZ2xlIHZlcnRpY2FsIGxpbmUJQUNTX1ZMSU5FCisjIEdjCTIwNiBcMzE2IE0tTglkb3VibGUgaW50ZXJzZWN0aW9uCisjIEdkCTIwMyBcMzEzIE0tSwlkb3VibGUgZG93biB0aWNrCisjIEdoCTIwNSBcMzE1IE0tTQlkb3VibGUgaG9yaXpvbnRhbCBsaW5lCisjIEdsCTIwNCBcMjA0IE0tTAlkb3VibGUgbGVmdCB0aWNrCisjIEdyCTE4NSBcMjcxIE0tOQlkb3VibGUgcmlnaHQgdGljaworIyBHdQkyMDIgXDMxMiBNLUoJZG91YmxlIHVwIHRpY2sKKyMgR3YJMTg2IFwyNzIgTS06CWRvdWJsZSB2ZXJ0aWNhbCBsaW5lCisjCisjIFRoZSBjb21waWxlciB3aWxsIHRyYW5zbGF0ZSB0aGUgc2luZ2xlLWxpbmUgY2FwcyBhbmQgZGlzY2FyZCB0aGUgb3RoZXJzCisjICh2aWEgSUdOT1JFIGFsaWFzZXMgZnVydGhlciBkb3duKS4gIFdlIGRvbid0IHdhbnQgdG8gZG8gbm9ybWFsIHBhZCAKKyMgdHJhbnNsYXRpb24gb24gdGhlc2UsIHRoZXkncmUgb2Z0ZW4gc2luZ2xlLWNoYXJhY3RlciBwcmludGFibGUgQVNDSUkKKyMgc3RyaW5ncyB0aGF0IGhhcHBlbiB0byBiZSBudW1lcmljcy4gIFRoZXJlJ3MgYXdrIGNvZGUgaW4gcGFyYW1ldHJpemVkLnNoCisjIHRoYXQgZGV0ZWN0cyB0aGUgYWNzXyBwcmVmaXggYW5kIHVzZXMgaXQgdG8gc3VwcHJlc3MgcGFkIHRyYW5zbGF0aW9uLgorIyBUaGVzZSB0ZXJtaW5mbyBuYW1lcyBhcmUgaW52ZW50ZWQuCisjCithY3NfdWxjb3JuZXIJCQlPVEcyCXN0cglHMgktCQktCS0tLS0tCXNpbmdsZSB1cHBlciBsZWZ0CithY3NfbGxjb3JuZXIJCQlPVEczCXN0cglHMwktCQktCS0tLS0tCXNpbmdsZSBsb3dlciBsZWZ0CithY3NfdXJjb3JuZXIJCQlPVEcxCXN0cglHMQktCQktCS0tLS0tCXNpbmdsZSB1cHBlciByaWdodAorYWNzX2xyY29ybmVyCQkJT1RHNAlzdHIJRzQJLQkJLQktLS0tLQlzaW5nbGUgbG93ZXIgcmlnaHQKK2Fjc19sdGVlCQkJT1RHUglzdHIJR1IJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgcmlnaHQKK2Fjc19ydGVlCQkJT1RHTAlzdHIJR0wJLQkJLQktLS0tLQl0ZWUgcG9pbnRpbmcgbGVmdAorYWNzX2J0ZWUJCQlPVEdVCXN0cglHVQktCQktCS0tLS0tCXRlZSBwb2ludGluZyB1cAorYWNzX3R0ZWUJCQlPVEdECXN0cglHRAktCQktCS0tLS0tCXRlZSBwb2ludGluZyBkb3duCithY3NfaGxpbmUJCQlPVEdICXN0cglHSAktCQktCS0tLS0tCXNpbmdsZSBob3Jpem9udGFsIGxpbmUKK2Fjc192bGluZQkJCU9UR1YJc3RyCUdWCS0JCS0JLS0tLS0Jc2luZ2xlIHZlcnRpY2FsIGxpbmUKK2Fjc19wbHVzCQkJT1RHQwlzdHIJR0MJLQkJLQktLS0tLQlzaW5nbGUgaW50ZXJzZWN0aW9uCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBURVJNSU5GTyBFWFRFTlNJT04gQ0FQQUJJTElUSUVTCisjCisjIFRoaXMgc2VjdGlvbiBpcyBhbG1vc3QgYWxsIGNvbW1lbnRzLiAgV2hhdCBpdCdzIG1haW5seSBmb3IgaXMgdG8gZGVzY3JpYmUKKyMgd2hhdCBjYXBhYmlsaXRpZXMgbmVlZCB0byBiZSBzcXVlZXplZCBvdXQgdG8gZ2V0IGRvd24gdG8gdGhlIFhTSSBDdXJzZXMKKyMgc3RhbmRhcmQgc2V0LiAgVGhleSBhcmUgZmxhZ2dlZCB3aXRoIEsuCisjCisjIEhQIGV4dGVuc2lvbnMKKyMKKyMgVGhlc2UgZXh0ZW5zaW9ucyBmb2xsb3cgcHRyX25vbiAocmVwbGFjaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQpIGluIEhQCisjIHRlcm1pbmZvIGZpbGVzLiAgRXhjZXB0IGZvciBtZW1vcnlfbG9jayBhbmQgbWVtb3J5X3VubG9jaywgdGhleSBhcmUKKyMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBTVnI0IGV4dGVuc2lvbnMsIGJ1dCB0aGV5IG1ha2UgdGhlIGJpbmFyeSBmb3JtYXQKKyMgZGlmZmVyZW50LiAgR3Jyci4uLi4KKyMKK21lbW9yeV9sb2NrCQkJbWVtbAlzdHIJbWwJLQkJLQktLS0tSwlsb2NrIG1lbW9yeSBhYm92ZSBjdXJzb3IKK21lbW9yeV91bmxvY2sJCQltZW11CXN0cgltdQktCQktCS0tLS1LCXVubG9jayBtZW1vcnkKKyNwbGFiX25vcm0JCQlwbG4Jc3RyCXBuCS0JCS0JLS0tLS0JcHJvZ3JhbSBsYWJlbCAjMSB0byBzaG93IHN0cmluZyAjMgorI2xhYmVsX29uCQkJc21sbglzdHIJTE8JLQkJLQktLS0tLQl0dXJuIG9uIHNvZnQgbGFiZWxzCisjbGFiZWxfb2ZmCQkJcm1sbglzdHIJTEYJLQkJLQktLS0tLQl0dXJuIG9mZiBzb2Z0IGxhYmVscworI2tleV9mMTEJCQlrZjExCXN0cglGMQktCQktCS0tLS0tCUYxMSBmdW5jdGlvbiBrZXkKKyNrZXlfZjEyCQkJa2YxMglzdHIJRjIJLQkJLQktLS0tLQlGMTIgZnVuY3Rpb24ga2V5Cisja2V5X2YxMwkJCWtmMTMJc3RyCUYzCS0JCS0JLS0tLS0JRjEzIGZ1bmN0aW9uIGtleQorI2tleV9mMTQJCQlrZjE0CXN0cglGNAktCQktCS0tLS0tCUYxNCBmdW5jdGlvbiBrZXkKKyNrZXlfZjE1CQkJa2YxNQlzdHIJRjUJLQkJLQktLS0tLQlGMTUgZnVuY3Rpb24ga2V5Cisja2V5X2YxNgkJCWtmMTYJc3RyCUY2CS0JCS0JLS0tLS0JRjE2IGZ1bmN0aW9uIGtleQorI2tleV9mMTcJCQlrZjE3CXN0cglGNwktCQktCS0tLS0tCUYxNyBmdW5jdGlvbiBrZXkKKyNrZXlfZjE4CQkJa2YxOAlzdHIJRjgJLQkJLQktLS0tLQlGMTggZnVuY3Rpb24ga2V5Cisja2V5X2YxOQkJCWtmMTkJc3RyCUY5CS0JCS0JLS0tLS0JRjE5IGZ1bmN0aW9uIGtleQorI2tleV9mMjAJCQlrZjIwCXN0cglGQQktCQktCS0tLS0tCUYyMCBmdW5jdGlvbiBrZXkKKyNrZXlfZjIxCQkJa2YyMQlzdHIJRkIJLQkJLQktLS0tLQlGMjEgZnVuY3Rpb24ga2V5Cisja2V5X2YyMgkJCWtmMjIJc3RyCUZDCS0JCS0JLS0tLS0JRjIyIGZ1bmN0aW9uIGtleQorI2tleV9mMjMJCQlrZjIzCXN0cglGRAktCQktCS0tLS0tCUYyMyBmdW5jdGlvbiBrZXkKKyNrZXlfZjI0CQkJa2YyNAlzdHIJRkUJLQkJLQktLS0tLQlGMjQgZnVuY3Rpb24ga2V5Cisja2V5X2YyNQkJCWtmMjUJc3RyCUZGCS0JCS0JLS0tLS0JRjI1IGZ1bmN0aW9uIGtleQorI2tleV9mMjYJCQlrZjI2CXN0cglGRwktCQktCS0tLS0tCUYyNiBmdW5jdGlvbiBrZXkKKyNrZXlfZjI3CQkJa2YyNwlzdHIJRkgJLQkJLQktLS0tLQlGMjcgZnVuY3Rpb24ga2V5Cisja2V5X2YyOAkJCWtmMjgJc3RyCUZJCS0JCS0JLS0tLS0JRjI4IGZ1bmN0aW9uIGtleQorI2tleV9mMjkJCQlrZjI5CXN0cglGSgktCQktCS0tLS0tCUYyOSBmdW5jdGlvbiBrZXkKKyNrZXlfZjMwCQkJa2YzMAlzdHIJRksJLQkJLQktLS0tLQlGMzAgZnVuY3Rpb24ga2V5Cisja2V5X2YzMQkJCWtmMzEJc3RyCUZMCS0JCS0JLS0tLS0JRjMxIGZ1bmN0aW9uIGtleQorI2tleV9mMzIJCQlrZjMyCXN0cglGTQktCQktCS0tLS0tCUYzMiBmdW5jdGlvbiBrZXkKKyNrZXlfZjMzCQkJa2YzMwlzdHIJRk4JLQkJLQktLS0tLQlGMzMgZnVuY3Rpb24ga2V5Cisja2V5X2YzNAkJCWtmMzQJc3RyCUZPCS0JCS0JLS0tLS0JRjM0IGZ1bmN0aW9uIGtleQorI2tleV9mMzUJCQlrZjM1CXN0cglGUAktCQktCS0tLS0tCUYzNSBmdW5jdGlvbiBrZXkKKyNrZXlfZjM2CQkJa2YzNglzdHIJRlEJLQkJLQktLS0tLQlGMzYgZnVuY3Rpb24ga2V5Cisja2V5X2YzNwkJCWtmMzcJc3RyCUZSCS0JCS0JLS0tLS0JRjM3IGZ1bmN0aW9uIGtleQorI2tleV9mMzgJCQlrZjM4CXN0cglGUwktCQktCS0tLS0tCUYzOCBmdW5jdGlvbiBrZXkKKyNrZXlfZjM5CQkJa2YzOQlzdHIJRlQJLQkJLQktLS0tLQlGMzkgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MAkJCWtmNDAJc3RyCUZVCS0JCS0JLS0tLS0JRjQwIGZ1bmN0aW9uIGtleQorI2tleV9mNDEJCQlrZjQxCXN0cglGVgktCQktCS0tLS0tCUY0MSBmdW5jdGlvbiBrZXkKKyNrZXlfZjQyCQkJa2Y0MglzdHIJRlcJLQkJLQktLS0tLQlGNDIgZnVuY3Rpb24ga2V5Cisja2V5X2Y0MwkJCWtmNDMJc3RyCUZYCS0JCS0JLS0tLS0JRjQzIGZ1bmN0aW9uIGtleQorI2tleV9mNDQJCQlrZjQ0CXN0cglGWQktCQktCS0tLS0tCUY0NCBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ1CQkJa2Y0NQlzdHIJRloJLQkJLQktLS0tLQlGNDUgZnVuY3Rpb24ga2V5Cisja2V5X2Y0NgkJCWtmNDYJc3RyCUZhCS0JCS0JLS0tLS0JRjQ2IGZ1bmN0aW9uIGtleQorI2tleV9mNDcJCQlrZjQ3CXN0cglGYgktCQktCS0tLS0tCUY0NyBmdW5jdGlvbiBrZXkKKyNrZXlfZjQ4CQkJa2Y0OAlzdHIJRmMJLQkJLQktLS0tLQlGNDggZnVuY3Rpb24ga2V5Cisja2V5X2Y0OQkJCWtmNDkJc3RyCUZkCS0JCS0JLS0tLS0JRjQ5IGZ1bmN0aW9uIGtleQorI2tleV9mNTAJCQlrZjUwCXN0cglGZQktCQktCS0tLS0tCUY1MCBmdW5jdGlvbiBrZXkKKyNrZXlfZjUxCQkJa2Y1MQlzdHIJRmYJLQkJLQktLS0tLQlGNTEgZnVuY3Rpb24ga2V5Cisja2V5X2Y1MgkJCWtmNTIJc3RyCUZnCS0JCS0JLS0tLS0JRjUyIGZ1bmN0aW9uIGtleQorI2tleV9mNTMJCQlrZjUzCXN0cglGaAktCQktCS0tLS0tCUY1MyBmdW5jdGlvbiBrZXkKKyNrZXlfZjU0CQkJa2Y1NAlzdHIJRmkJLQkJLQktLS0tLQlGNTQgZnVuY3Rpb24ga2V5Cisja2V5X2Y1NQkJCWtmNTUJc3RyCUZqCS0JCS0JLS0tLS0JRjU1IGZ1bmN0aW9uIGtleQorI2tleV9mNTYJCQlrZjU2CXN0cglGawktCQktCS0tLS0tCUY1NiBmdW5jdGlvbiBrZXkKKyNrZXlfZjU3CQkJa2Y1NwlzdHIJRmwJLQkJLQktLS0tLQlGNTcgZnVuY3Rpb24ga2V5Cisja2V5X2Y1OAkJCWtmNTgJc3RyCUZtCS0JCS0JLS0tLS0JRjU4IGZ1bmN0aW9uIGtleQorI2tleV9mNTkJCQlrZjU5CXN0cglGbgktCQktCS0tLS0tCUY1OSBmdW5jdGlvbiBrZXkKKyNrZXlfZjYwCQkJa2Y2MAlzdHIJRm8JLQkJLQktLS0tLQlGNjAgZnVuY3Rpb24ga2V5Cisja2V5X2Y2MQkJCWtmNjEJc3RyCUZwCS0JCS0JLS0tLS0JRjYxIGZ1bmN0aW9uIGtleQorI2tleV9mNjIJCQlrZjYyCXN0cglGcQktCQktCS0tLS0tCUY2MiBmdW5jdGlvbiBrZXkKKyNrZXlfZjYzCQkJa2Y2MwlzdHIJRnIJLQkJLQktLS0tLQlGNjMgZnVuY3Rpb24ga2V5CisjCisjIElCTSBleHRlbnNpb25zCisjCisjIFRoZXNlIGV4dGVuc2lvbnMgZm9sbG93IHB0cl9ub24gKHJlcGxhY2luZyBldmVyeXRoaW5nIGFmdGVyIGl0KSBpbiBJQk0KKyMgdGVybWluZm8gZmlsZXMuCisjCisjIFRoZSBwbGFjZXMgaW4gdGhlIGJveFsxMl0gY2FwYWJpbGl0aWVzIGNvcnJlc3BvbmQgdG8gYWNzYyBjaGFyYWN0ZXJzLCBoZXJlIGlzCisjIHRoZSBtYXBwaW5nOgorIworIwlib3gxWzBdICA9IEFDU19VTENPUk5FUgorIwlib3gxWzFdICA9IEFDU19ITElORQkKKyMJYm94MVsyXSAgPSBBQ1NfVVJDT1JORVIKKyMJYm94MVszXSAgPSBBQ1NfVkxJTkUKKyMJYm94MVs0XSAgPSBBQ1NfTFJDT1JORVIKKyMJYm94MVs1XSAgPSBBQ1NfTExDT1JORVIKKyMJYm94MVs2XSAgPSBBQ1NfVFRFRQorIwlib3gxWzddICA9IEFDU19SVEVFCisjCWJveDFbOF0gID0gQUNTX0JURUUKKyMJYm94MVs5XSAgPSBBQ1NfTFRFRQorIwlib3gxWzEwXSA9IEFDU19QTFVTCisjCisjIFRoZSBib3gyIGNoYXJhY3RlcnMgYXJlIHRoZSBkb3VibGUtbGluZSB2ZXJzaW9ucyBvZiB0aGVzZSBmb3JtcyBncmFwaGljcy4KKyMKK2JveF9jaGFyc18xCQkJYm94MQlzdHIJYngJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBwcmltYXJ5IHNldAorI2JveF9jaGFyc18yCQkJYm94MglzdHIJYnkJLQkJLQktLS0tSwlib3ggY2hhcmFjdGVycyBzZWNvbmRhcnkgc2V0CisjYm94X2F0dHJfMQkJCWJhdHQxCXN0cglCeAktCQktCS0tLS1LCWF0dHJpYnV0ZXMgZm9yIGJveDEKKyNib3hfYXR0cl8yCQkJYmF0dDIJc3RyCUJ5CS0JCS0JLS0tLUsJYXR0cmlidXRlcyBmb3IgYm94MgorI2NvbG9yX2JnXzAJCQljb2xiMAlzdHIJZDAJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDAKKyNjb2xvcl9iZ18xCQkJY29sYjEJc3RyCWQxCS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciAxCisjY29sb3JfYmdfMgkJCWNvbGIyCXN0cglkMgktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgMgorI2NvbG9yX2JnXzMJCQljb2xiMwlzdHIJZDMJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDMKKyNjb2xvcl9iZ180CQkJY29sYjQJc3RyCWQ0CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA0CisjY29sb3JfYmdfNQkJCWNvbGI1CXN0cglkNQktCQktCS0tLS1LCWJhY2tncm91bmQgY29sb3IgNQorI2NvbG9yX2JnXzYJCQljb2xiNglzdHIJZDYJLQkJLQktLS0tSwliYWNrZ3JvdW5kIGNvbG9yIDYKKyNjb2xvcl9iZ183CQkJY29sYjcJc3RyCWQ3CS0JCS0JLS0tLUsJYmFja2dyb3VuZCBjb2xvciA3CisjY29sb3JfZmdfMAkJCWNvbGYwCXN0cgljMAktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMAorI2NvbG9yX2ZnXzEJCQljb2xmMQlzdHIJYzEJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDEKKyNjb2xvcl9mZ18yCQkJY29sZjIJc3RyCWMyCS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciAyCisjY29sb3JfZmdfMwkJCWNvbGYzCXN0cgljMwktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgMworI2NvbG9yX2ZnXzQJCQljb2xmNAlzdHIJYzQJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDQKKyNjb2xvcl9mZ181CQkJY29sZjUJc3RyCWM1CS0JCS0JLS0tLUsJZm9yZWdyb3VuZCBjb2xvciA1CisjY29sb3JfZmdfNgkJCWNvbGY2CXN0cgljNgktCQktCS0tLS1LCWZvcmVncm91bmQgY29sb3IgNgorI2NvbG9yX2ZnXzcJCQljb2xmNwlzdHIJYzcJLQkJLQktLS0tSwlmb3JlZ3JvdW5kIGNvbG9yIDcKKyNmb250XzAJCQkJZm9udDAJc3RyCWYwCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMAorI2ZvbnRfMQkJCQlmb250MQlzdHIJZjEJLQkJLQktLS0tLQlzZWxlY3QgZm9udCAxCisjZm9udF8yCQkJCWZvbnQyCXN0cglmMgktCQktCS0tLS0tCXNlbGVjdCBmb250IDIKKyNmb250XzMJCQkJZm9udDMJc3RyCWYzCS0JCS0JLS0tLS0Jc2VsZWN0IGZvbnQgMworI2ZvbnRfNAkJCQlmb250NAlzdHIJZjQJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA0CisjZm9udF81CQkJCWZvbnQ1CXN0cglmNQktCQktCS0tLS1LCXNlbGVjdCBmb250IDUKKyNmb250XzYJCQkJZm9udDYJc3RyCWY2CS0JCS0JLS0tLUsJc2VsZWN0IGZvbnQgNgorI2ZvbnRfNwkJCQlmb250NwlzdHIJZjcJLQkJLQktLS0tSwlzZWxlY3QgZm9udCA3Cisja2V5X2JhY2tfdGFiCQkJa2J0YWIJc3RyCWswCS0JCS0JLS0tLS0JYmFja3RhYiBrZXkKKyNrZXlfZG8JCQkJa2RvCXN0cglraQktCQktCS0tLS1LCWRvIHJlcXVlc3Qga2V5Cisja2V5X2NvbW1hbmQJCQlrY21kCXN0cglrZAktCQktCS0tLS1LCWNvbW1hbmQtcmVxdWVzdCBrZXkKKyNrZXlfY29tbWFuZF9wYW5lCQlrY3BuCXN0cglrVwktCQktCS0tLS1LCWNvbW1hbmQtcGFuZSBrZXkKKyNrZXlfZW5kCQkJa2VuZAlzdHIJa3cJLQkJLQktLS0tLQllbmQga2V5Cisja2V5X2hlbHAJCQlraGxwCXN0cglrcQktCQktCS0tLS0tCWhlbHAga2V5Cisja2V5X25ld2xpbmUJCQlrbmwJc3RyCW5sCS0JCS0JLS0tLUsJbmV3bGluZSBrZXkKKyNrZXlfbmV4dF9wYW5lCQkJa25wbglzdHIJa3YJLQkJLQktLS0tSwluZXh0LXBhbmUga2V5Cisja2V5X3ByZXZfY21kCQkJa3BwbglzdHIJa3AJLQkJLQktLS0tSwlwcmV2aW91cy1jb21tYW5kIGtleQorI2tleV9wcmV2X3BhbmUJCQlrcHBuCXN0cglrVgktCQktCS0tLS1LCXByZXZpb3VzLXBhbmUga2V5Cisja2V5X3F1aXQJCQlrcXVpdAlzdHIJa1EJLQkJLQktLS0tSwlxdWl0IGtleQorI2tleV9zZWxlY3QJCQlrc2VsCXN0cglrVQktCQktCS0tLS0tCXNlbGVjdCBrZXkKKyNrZXlfc2Nyb2xsX2xlZnQJCWtzY2wJc3RyCWt6CS0JCS0JLS0tLUsJc2Nyb2xsIGxlZnQKKyNrZXlfc2Nyb2xsX3JpZ2h0CQlrc2NyCXN0cglrWgktCQktCS0tLS1LCXNjcm9sbCByaWdodAorI2tleV90YWIJCQlrdGFiCXN0cglrbwktCQktCS0tLS1LCXRhYiBrZXkKKyNrZXlfc21hcF9pbjEJCQlrbXBmMQlzdHIJS3YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBpbnB1dAorI2tleV9zbWFwX291dDEJCQlrbXB0MQlzdHIJS1YJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMSBvdXRwdXQKKyNrZXlfc21hcF9pbjIJCQlrbXBmMglzdHIJS3cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBpbnB1dAorI2tleV9zbWFwX291dDIJCQlrbXB0MglzdHIJS1cJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMiBvdXRwdXQKKyNrZXlfc21hcF9pbjMJCQlrbXBmMwlzdHIJS3gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBpbnB1dAorI2tleV9zbWFwX291dDMJCQlrbXB0MwlzdHIJS1gJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgMyBvdXRwdXQKKyNrZXlfc21hcF9pbjQJCQlrbXBmNAlzdHIJS3kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBpbnB1dAorI2tleV9zbWFwX291dDQJCQlrbXB0NAlzdHIJS1kJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNCBvdXRwdXQKKyNrZXlfc21hcF9pbjUJCQlrbXBmNQlzdHIJS3oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBpbnB1dAorI2tleV9zbWFwX291dDUJCQlrbXB0NQlzdHIJS1oJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNSBvdXRwdXQKKyNhcHBsX2RlZmluZWRfc3RyCQlhcHN0cglzdHIJemEJLQkJLQktLS0tSwlhcHBsaWNhdGlvbi1kZWZpbmVkIHN0cmluZworIyBUaGUga2V5X3NtYXBfaW5bNjc4OV0gYW5kIGtleV9zbWFwX291dFs2Nzg5XSBjYXBhYmlsaXRpZXMgYXJlbid0IGRlc2NyaWJlZCBpbgorIyB0aGUgSUJNIG1hbnVhbCBwYWdlcywgc28gdGhlIGNhcCBuYW1lIHN0cmluZ3MgYXJlIGd1ZXNzZXMuICBUaGUgdGVybWluZm8KKyMgbmFtZXMgYXJlIGFsbW9zdCBjZXJ0YWlubHkgcmlnaHQsIHRoZSB0ZXJtY2FwIG9uZXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZy4KKyNrZXlfc21hcF9pbjYJCQlrbXBmNglzdHIJayEJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBpbnB1dAorI2tleV9zbWFwX291dDYJCQlrbXB0NglzdHIJS0AJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNiBvdXRwdXQKKyNrZXlfc21hcF9pbjcJCQlrbXBmNwlzdHIJayMJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBpbnB1dAorI2tleV9zbWFwX291dDcJCQlrbXB0NwlzdHIJSyQJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgNyBvdXRwdXQKKyNrZXlfc21hcF9pbjgJCQlrbXBmOAlzdHIJayUJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBpbnB1dAorI2tleV9zbWFwX291dDgJCQlrbXB0OAlzdHIJS14JLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOCBvdXRwdXQKKyNrZXlfc21hcF9pbjkJCQlrbXBmOQlzdHIJayYJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBpbnB1dAorI2tleV9zbWFwX291dDkJCQlrbXB0OQlzdHIJSyoJLQkJLQktLS0tSwlzcGVjaWFsIG1hcHBlZCBrZXkgOSBvdXRwdXQKKyMgVW5kb2N1bWVudGVkIGNhcGFiaWxpdGllcyBlbmQgaGVyZQorI2tleV9zZjEJCQlrc2YxCXN0cglTMQktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDEKKyNrZXlfc2YyCQkJa3NmMglzdHIJUzIJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSAyCisja2V5X3NmMwkJCWtzZjMJc3RyCVMzCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMworI2tleV9zZjQJCQlrc2Y0CXN0cglTNAktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDQKKyNrZXlfc2Y1CQkJa3NmNQlzdHIJUzUJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA1Cisja2V5X3NmNgkJCWtzZjYJc3RyCVM2CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgNgorI2tleV9zZjcJCQlrc2Y3CXN0cglTNwktCQktCS0tLS1LCXNwZWNpYWwgZnVuY3Rpb24ga2V5IDcKKyNrZXlfc2Y4CQkJa3NmOAlzdHIJUzgJLQkJLQktLS0tSwlzcGVjaWFsIGZ1bmN0aW9uIGtleSA4Cisja2V5X3NmOQkJCWtzZjkJc3RyCVM5CS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgOQorI2tleV9zZjEwCQkJa3NmMTAJc3RyCVNBCS0JCS0JLS0tLUsJc3BlY2lhbCBmdW5jdGlvbiBrZXkgMTAKKyMgQUlYIHZlcnNpb24gMyBkb2N1bWVudHMgZGlmZmVyZW50IGNvZGVzIGZvciBGMTEsIEYxMiBhbmQgZG9lcyBub3QgbWVudGlvbgorIyBGMTMtRjY0LiAgQUlYIHZlcnNpb24gNCB1c2VzIHRoZSBzYW1lIG5hbWluZyBmb3IgRjAtRjYzIGFzIGFib3ZlLgorI2tleV9mMTEJCQlrZjExCXN0cglrPAktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMQorI2tleV9mMTIJCQlrZjEyCXN0cglrPgktCQktCS0tLS0tCWZ1bmN0aW9uIGtleSAxMgorIyBVbmRvY3VtZW50ZWQgY2FwYWJpbGl0aWVzIGVuZCBoZXJlLgorI2tleV9hY3Rpb24JCQlrYWN0CXN0cglrSgktCQktCS0tLS1LCXNlbnQgYnkgYWN0aW9uIGtleQorIyBUaGUgSUJNIGRvY3Mgc2F5IHRoZXNlIGNhcGFiaWxpdGllcyBhcmUgZm9yIHRhYmxlLWRyYXdpbmcsIGFuZCBhcmUKKyMgdmFsaWQgb25seSBmb3IgYWl4dGVybSBkZXNjcmlwdGlvbnMuCisjZW50ZXJfdG9wbGluZV9tb2RlCQl0b3BsCXN0cgl0cAktCQktCS0tLS1LCXN0YXJ0IHRvcC1saW5lIG1vZGUKKyNlbnRlcl9ib3R0b21fbW9kZQkJYnRtbAlzdHIJYm0JLQkJLQktLS0tSwlzdGFydCBib3R0b20tbGluZSBtb2RlCisjZW50ZXJfcnZlcnRfbW9kZQkJcnZlcnQJc3RyCXJ2CS0JCS0JLS0tLUsJc3RhcnQgcmlnaHQtdmVydGljYWwgbW9kZQorI2VudGVyX2x2ZXJ0X21vZGUJCWx2ZXJ0CXN0cglsdgktCQktCS0tLS1LCXN0YXJ0IGxlZnQtdmVydGljYWwgbW9kZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQUxJQVMgREVDTEFSQVRJT05TCisjCisjIEhlcmUgd2Ugc2V0IHVwIGFsaWFzZXMgZm9yIHRyYW5zbGF0aW5nIGV4dGVuc2lvbnMgaW50byBzdGFuZGFyZCB0ZXJtaW5mby4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlcm1jYXAgYWxpYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEJTRCBhbGlhc2VzOgorIworIyBUaGlzIGlzIGEgY29tbW9uIGVycm9yIGluIG1hbnkgdGVybWNhcCBmaWxlcy4gIFdlJ2xsIGdldCBub3RpZmllZCBkdXJpbmcKKyMgdHJhbnNsYXRpb24gd2hlbiB0aGlzIChvciBhbnkgb3RoZXIgYWxpYXMpIGZpcmVzLgorIworY2FwYWxpYXMJc2IJc3IJQlNECXNjcm9sbCB0ZXh0IGRvd24KKyMKKyMgQVQmVCBleHRlbnNpb25zOgorIworIyBUaGUgb2xkIEFUJlQgNTQxMCwgNTQyMCwgNTQyNSwgcGM2MzAwcGx1cywgNjEwLCBhbmQgczQgZW50cmllcyB1c2VkIGEgc2V0IG9mCisjIG5vbnN0YW5kYXJkIGNhcGFiaWxpdGllcy4gIEl0cyBzaWduYXR1cmUgaXMgdGhlIEtNIGNhcGFiaWxpdHksIHVzZWQgdG8gbmFtZQorIyBzb21lIHNvcnQgb2Yga2V5bWFwIGZpbGUuICBFRSwgQk8sIENJLCBDViwgWFMsIERTLCBGTCBhbmQgRkUgYXJlIGluIHRoaXMKKyMgc2V0LiAgQ29tbWVudHMgaW4gdGhlIG9yaWdpbmFsLCBhbmQgYSBsaXR0bGUgY3Jvc3MtY2hlY2tpbmcgd2l0aCBvdGhlciBBVCZUCisjIGRvY3VtZW50YXRpb24sIHNlZW0gdG8gZXN0YWJsaXNoIHRoZSBmb2xsb3dpbmcgbWFwcGluZ3M6CisjCitjYXBhbGlhcwlCTwltcglBVCZUCWVudGVyX3JldmVyc2VfbW9kZQorY2FwYWxpYXMJQ0kJdmkJQVQmVAljdXJzb3JfaW52aXNpYmxlCitjYXBhbGlhcwlDVgl2ZQlBVCZUCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCURTCW1oCUFUJlQJZW50ZXJfZGltX21vZGUKKyNjYXBhbGlhcwlFRQltZQlBVCZUCWV4aXRfYXR0cmlidXRlX21vZGUJCitjYXBhbGlhcwlGRQlMRglBVCZUCWxhYmVsX29uCitjYXBhbGlhcwlGTAlMTwlBVCZUCWxhYmVsX29mZgorY2FwYWxpYXMJWFMJbWsJQVQmVAllbnRlcl9zZWN1cmVfbW9kZQorIworIyBXZSBjb21tZW50IG91dCBFRSBiZWNhdXNlIHRoZSBjb25mbGljdGluZyBYRU5JWCBFRSBpcyBtb3JlIGNvbW1vbiBpbiAKKyMgb2xkIGVudHJpZXMuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFRoZXNlIGFyZSB0aGUgb25lcyB3ZSBrbm93IGhvdyB0byB0cmFuc2xhdGUgZGlyZWN0bHk6CisjCitjYXBhbGlhcwlFRQltaAlYRU5JWAlleGl0X2F0dHJpYnV0ZV9tb2RlCQorY2FwYWxpYXMJR0UJYWUJWEVOSVgJZXhpdF9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlHUwlhcwlYRU5JWAllbnRlcl9hbHRfY2hhcnNldF9tb2RlCitjYXBhbGlhcwlDRgl2aQlYRU5JWAljdXJzb3JfaW52aXMKK2NhcGFsaWFzCUNPCXZlCVhFTklYCWN1cnNvcl9ub3JtYWwKK2NhcGFsaWFzCUVOCUA3CVhFTklYCWtleV9lbmQKK2NhcGFsaWFzCUhNCWtoCVhFTklYCWtleV9ob21lCitjYXBhbGlhcwlMRAlrTAlYRU5JWAlrZXlfZGwKK2NhcGFsaWFzCVBECWtOCVhFTklYCWtleV9ucGFnZQorY2FwYWxpYXMJUE4JcG8JWEVOSVgJcHJ0cl9vZmYKK2NhcGFsaWFzCVBTCXBmCVhFTklYCXBydHJfb24KK2NhcGFsaWFzCVBVCWtQCVhFTklYCWtleV9wcGFnZQorY2FwYWxpYXMJUlQJQDgJWEVOSVgJa2VudAorY2FwYWxpYXMJVVAJa3UJWEVOSVgJa2N1dTEKK2NhcGFsaWFzCUc2CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1VMQ09STkVSCitjYXBhbGlhcwlHNwlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MTENPUk5FUgorY2FwYWxpYXMJRzUJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVVJDT1JORVIKK2NhcGFsaWFzCUc4CUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX0xSQ09STkVSCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19MVEVFCitjYXBhbGlhcwlHcglJR05PUkUJWEVOSVgJZG91YmxlLUFDU19SVEVFCitjYXBhbGlhcwlHdQlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19CVEVFCitjYXBhbGlhcwlHZAlJR05PUkUJWEVOSVgJZG91YmxlIEFDU19UVEVFCitjYXBhbGlhcwlHaAlJR05PUkUJWEVOSVgJZG91YmxlLUFDU19ITElORQorY2FwYWxpYXMJR3YJSUdOT1JFCVhFTklYCWRvdWJsZS1BQ1NfVkxJTkUKK2NhcGFsaWFzCUdjCUlHTk9SRQlYRU5JWAlkb3VibGUtQUNTX1BMVVMKK2NhcGFsaWFzCUdHCUlHTk9SRQlYRU5JWAlhY3MtZ2xpdGNoCisjCisjIElCTSBleHRlbnNpb25zOgorIworY2FwYWxpYXMJa3EJJTEJSUJNCWtleV9oZWxwCisjCisjIElyaXMgZXh0ZW5zaW9uczoKKyMKK2NhcGFsaWFzCUhTCW1oCUlSSVMJZW50ZXJfZGltX21vZGUKKyMKKyMgVGVrdHJvbml4IGV4dGVuc2lvbnM6CisjCitjYXBhbGlhcwlLQQlrOwlUZWsJa2V5X2YxMAorY2FwYWxpYXMJS0IJRjEJVGVrCWtleV9mMTEKK2NhcGFsaWFzCUtDCUYyCVRlawlrZXlfZjEyCitjYXBhbGlhcwlLRAlGMwlUZWsJa2V5X2YxMworY2FwYWxpYXMJS0UJRjQJVGVrCWtleV9mMTQKK2NhcGFsaWFzCUtGCUY1CVRlawlrZXlfZjE1CitjYXBhbGlhcwlCQwlTYglUZWsJc2V0X2JhY2tncm91bmQKK2NhcGFsaWFzCUZDCVNmCVRlawlzZXRfZm9yZWdyb3VuZAorIworIyBUaGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nOgorIworIwlYRU5JWAlYRU5JWCB2YXJpYWJsZSBuYW1lCW5hbWUgY2xhc2ggd2l0aCB0ZXJtaW5mbz8KKyMJLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCUNMCWtleV9jaGFyX2xlZnQKKyMJQ1IJa2V5X2NoYXJfcmlnaHQKKyMJQ1cJa2V5X2NoYW5nZV93aW5kb3cKKyMJSFAJPz8KKyMJTEYJa2V5X2xpbmVmZWVkIAkJbGFiZWxfb2ZmCisjCU5VCWtleV9uZXh0X3VubG9ja2VkX2NlbGwKKyMJUEwJPz8KKyMJUFIJPz8KKyMJUkMJa2V5X3JlY2FsYwkJcmVtb3ZlX2Nsb2NrCisjCVJGCWtleV90b2dnbGVfcmVmCQlyZXFfZm9yX2lucHV0CisjCVdMCWtleV93b3JkX2xlZnQKKyMJV1IJa2V5X3dvcmRfcmlnaHQKKyMKKyMgSWYgeW91IGtub3cgd2hhdCBhbnkgb2YgdGhlIHF1ZXN0aW9uLW1hcmtlZCBvbmVzIG1lYW4sIHBsZWFzZSB0ZWxsIHVzLgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXJtaW5mbyBhbGlhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBJQk0gZXh0ZW5zaW9uczoKKyMKK2luZm9hbGlhcwlmb250MAlzMGRzCUlCTQlzZXQwX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MQlzMWRzCUlCTQlzZXQxX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MglzMmRzCUlCTQlzZXQyX2Rlc19zZXEKK2luZm9hbGlhcwlmb250MwlzM2RzCUlCTQlzZXQzX2Rlc19zZXEKK2luZm9hbGlhcwlrYnRhYglrY2J0CUlCTQlrZXlfYmFja3RhYgoraW5mb2FsaWFzCWtzZWwJa3NsdAlJQk0Ja2V5X3NlbGVjdAorIworIyBTb21lIG90aGVycyBhcmUgaWRlbnRpY2FsIHRvIFNWcjQvWFBHNCBjYXBhYmlsaXRpZXMsIGluIHBhcnRpY3VsYXI6CisjIGtjbWQsIGtlbmQsIGtobHAsIGFuZCBrZjExLi4ua2Y2My4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBjYXNlLWZvbGQtc2VhcmNoOm5pbAorIyB0cnVuY2F0ZS1saW5lczp0CisjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvTUtoYXNoc2l6ZS5zaCBiL25jdXJzZXMtNS43L2luY2x1ZGUvTUtoYXNoc2l6ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMWIzMTExCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9NS2hhc2hzaXplLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IE1LaGFzaHNpemUuc2gsdiAxLjcgMjAwNi8xMC8yMiAwMDo0NTozOSB0b20gRXhwICQKKyMKKyMgTUtoYXNoc2l6ZS5zaCAtLS0gZ2VuZXJhdGUgc2l6ZSBpbmNsdWRlIGZvciBoYXNoIGZ1bmN0aW9ucworIworZWNobyAiLyoiCitlY2hvICIgKiBoYXNoc2l6ZS5oIC0tIGhhc2ggYW5kIHRva2VuIHRhYmxlIGNvbnN0YW50cyIKK2VjaG8gIiAqLyIKKworQ0FQUz0iJHsxLUNhcHN9IgorVEFCU0laRT1gZ3JlcCAtdiAnXlsgI10nICRDQVBTIHwgZ3JlcCAtdiAiXiQiIHwgZ3JlcCAtdiAiXmNhcGFsaWFzInwgZ3JlcCAtdiAiXmluZm9hbGlhcyIgfCB3YyAtbGAKKworZWNobyAiIgorZWNobyAiI2RlZmluZSBDQVBUQUJTSVpFCSR7VEFCU0laRX0iCitlY2hvICIjZGVmaW5lIEhBU0hUQUJTSVpFCSgke1RBQlNJWkV9ICogMikiCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL01La2V5X2RlZnMuc2ggYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL01La2V5X2RlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjNjYjRmNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvTUtrZXlfZGVmcy5zaApAQCAtMCwwICsxLDE4MiBAQAorIyEgL2Jpbi9zaAorIyAkSWQ6IE1La2V5X2RlZnMuc2gsdiAxLjE0IDIwMDMvMTIvMDYgMTc6MTA6MDkgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIE1La2V5X2RlZnMuc2ggLS0gZ2VuZXJhdGUgZnVuY3Rpb24ta2V5IGRlZmluaXRpb25zIGZvciBjdXJzZXMuaAorIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMjAwMQorIworIyBFeHRyYWN0IGZ1bmN0aW9uLWtleSBkZWZpbml0aW9ucyBmcm9tIHRoZSBDYXBzIGZpbGUKKyMKKzogJHtBV0stYXdrfQorREFUQT0kezEtQ2Fwc30KKworZGF0YT1kYXRhJCQKK3Bhc3MxPXBhc3MxXyQkCitwYXNzMj1wYXNzMl8kJAorcGFzczM9cGFzczNfJCQKK3Bhc3M0PXBhc3M0XyQkCit0cmFwICdybSAtZiAkZGF0YSBwYXNzWzEyMzRdXyQkJyAwIDEgMiA1IDE1CisKKyMgY2hhbmdlIHJlcGVhdGVkIHRhYnMgKHVzZWQgZm9yIHJlYWRhYmlsaXR5KSB0byBzaW5nbGUgdGFicyAobmVlZGVkIHRvIG1ha2UKKyMgYXdrIHNlZSB0aGUgcmlnaHQgZmllbGQgYWxpZ25tZW50IG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbHVtbnMpOgoraWYgc29ydCAtayA2ICREQVRBID4kZGF0YSAyPi9kZXYvbnVsbAordGhlbgorCSMgUE9TSVgKKwlzZWQgLWUgJ3MvWwldWwldKi8JL2cnIDwgJERBVEEgfHNvcnQgLW4gLWsgNiA+JGRhdGEKK2VsaWYgc29ydCAtbiArNSAkREFUQSA+JGRhdGEgMj4vZGV2L251bGwKK3RoZW4KKwkjIFN1bk9TIChhbmQgU1ZyNCwgbWFya2VkIGFzIG9ic29sZXRlIGJ1dCBzdGlsbCByZWNvZ25pemVkKQorCXNlZCAtZSAncy9bCV1bCV0qLwkvZycgPCAkREFUQSB8c29ydCAtbiArNSA+JGRhdGEKK2Vsc2UKKwllY2hvICJZb3VyIHNvcnQgdXRpbGl0eSBpcyBicm9rZW4uICBQbGVhc2UgaW5zdGFsbCBvbmUgdGhhdCB3b3Jrcy4iID4mMgorCWV4aXQgMQorZmkKKworIyBhZGQga2V5cyB0aGF0IHdlIGdlbmVyYXRlIGF1dG9tYXRpY2FsbHk6CitjYXQgPj4kZGF0YSA8PEVPRgora2V5X3Jlc2l6ZQlrcjEJc3RyCVIxCUtFWV9SRVNJWkUJKwktLS0tLQlUZXJtaW5hbCByZXNpemUgZXZlbnQKK2tleV9ldmVudAlrdjEJc3RyCVYxCUtFWV9FVkVOVAkrCS0tLS0tCVdlIHdlcmUgaW50ZXJydXB0ZWQgYnkgYW4gZXZlbnQKK0VPRgorCitjYXQgPDxFT0YKKy8qCisgKiBUaGVzZSBkZWZpbml0aW9ucyB3ZXJlIGdlbmVyYXRlZCBieSAkMCAkREFUQQorICovCitFT0YKKworIyBLRVlfUkVTRVQKK21heGtleT0zNDUKKworZm9yIHBhc3MgaW4gMSAyIDMgNAorZG8KKworb3V0cHV0PXBhc3Mke3Bhc3N9XyQkCisKKyR7QVdLLWF3a30gPiRvdXRwdXQgPCRkYXRhICcKK2Z1bmN0aW9uIHByaW50X2NvbHModGV4dCxjb2xzKSB7CisJcHJpbnRmICIlcyIsIHRleHQKKwlsZW4gPSBsZW5ndGgodGV4dCk7CisJd2hpbGUgKGxlbiA8IGNvbHMpIHsKKwkJcHJpbnRmICIJIgorCQlsZW4gKz0gODsKKwl9Cit9CitmdW5jdGlvbiBkZWNvZGUoa2V5Y29kZSkgeworCXJlc3VsdCA9IDA7CisJaWYgKHN1YnN0cihrZXljb2RlLCAxLCAyKSA9PSAiMHgiKSB7CisJCWRpZ2l0cz0iMDEyMzQ1Njc4OWFiY2RlZiI7CisJfSBlbHNlIGlmIChzdWJzdHIoa2V5Y29kZSwgMSwgMSkgPT0gIjAiKSB7CisJCWRpZ2l0cz0iMDEyMzQ1NjciOworCX0gZWxzZSB7CisJCWRpZ2l0cz0iMDEyMzQ1Njc4OSI7CisJfQorCXdoaWxlIChsZW5ndGgoa2V5Y29kZSkgIT0gMCkgeworCQlkaWdpdD1zdWJzdHIoa2V5Y29kZSwgMSwgMSk7CisJCWtleWNvZGU9c3Vic3RyKGtleWNvZGUsIDIpOworCQlyZXN1bHQgPSByZXN1bHQgKiBsZW5ndGgoZGlnaXRzKSArIGluZGV4KGRpZ2l0cywgZGlnaXQpIC0gMTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworQkVHSU4JeworCW1heGtleT0nJG1heGtleSc7CisJcGFzcz0nJHBhc3MnOworCWtleV9tYXg9MTsKKwliaXRzPTE7CisJd2hpbGUgKGtleV9tYXggPCBtYXhrZXkpIHsKKwkJYml0cyA9IGJpdHMgKyAxOworCQlrZXlfbWF4ID0gKGtleV9tYXggKiAyKSArIDE7CisJfQorCW9jdGFsX2ZtdCA9IHNwcmludGYgKCIlJTAlZG8iLCAoYml0cyArIDIpIC8gMyArIDEpOworfQorCisvXiQvCQl7bmV4dDt9CisvXiMvCQl7bmV4dDt9CisvXmNhcGFsaWFzLwl7bmV4dDt9CisvXmluZm9hbGlhcy8Je25leHQ7fQorCiskNSAhPSAiLSIgJiYgJDYgIT0gIi0iIHsKKwkJaWYgKCQ2ID09ICIrIikgeworCQkJaWYgKHBhc3MgPT0gMSB8fCBwYXNzID09IDIpCisJCQkJbmV4dDsKKwkJCXRoaXNrZXk9bWF4a2V5ICsgMTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYXNzID09IDMpCisJCQkJbmV4dDsKKwkJCXRoaXNrZXk9ZGVjb2RlKCQ2KTsKKwkJfQorCQlpZiAodGhpc2tleSA+IG1heGtleSkKKwkJCW1heGtleSA9IHRoaXNrZXk7CisJCWlmIChwYXNzID09IDIgfHwgcGFzcyA9PSAzKSB7CisJCQlzaG93a2V5PXNwcmludGYob2N0YWxfZm10LCB0aGlza2V5KTsKKwkJCWlmICgkNSA9PSAiS0VZX0YoMCkiICkgeworCQkJCXByaW50ZiAiI2RlZmluZSAiCisJCQkJcHJpbnRfY29scygiS0VZX0YwIiwgMTYpOworCQkJCXByaW50X2NvbHMoc2hvd2tleSwgMTYpOworCQkJCXByaW50ICIvKiBGdW5jdGlvbiBrZXlzLiAgU3BhY2UgZm9yIDY0ICovIjsKKwkJCQlwcmludGYgIiNkZWZpbmUgIgorCQkJCXByaW50X2NvbHMoIktFWV9GKG4pIiwgMTYpOworCQkJCXByaW50X2NvbHMoIihLRVlfRjArKG4pKSIsIDE2KTsKKwkJCQlwcmludCAiLyogVmFsdWUgb2YgZnVuY3Rpb24ga2V5IG4gKi8iCisJCQl9IGVsc2UgeworCQkJCXByaW50ZiAiI2RlZmluZSAiCisJCQkJcHJpbnRfY29scygkNSwgMTYpOworCQkJCXByaW50X2NvbHMoc2hvd2tleSwgMTYpOworCQkJCXByaW50ZiAiLyoiCisJCQkJZm9yIChpID0gODsgaSA8PSBORjsgaSsrKQorCQkJCQlwcmludGYgIiAlcyIsICRpCisJCQkJcHJpbnQgIiAqLyIKKwkJCX0KKwkJfQorCX0KK0VORAl7CisJCWlmIChwYXNzID09IDEpIHsKKwkJCXByaW50IG1heGtleTsKKwkJfSBlbHNlIGlmIChwYXNzID09IDQpIHsKKwkJCXByaW50ICIiOworCQkJcHJpbnRmICIjZGVmaW5lICI7CisJCQlwcmludF9jb2xzKCJLRVlfTUFYIiwgMTYpOworCQkJcmVzdWx0ID0gc3ByaW50ZiAob2N0YWxfZm10LCBrZXlfbWF4KTsKKwkJCXByaW50X2NvbHMocmVzdWx0LCAxNik7CisJCQlwcmludGYgIi8qIE1heGltdW0ga2V5IHZhbHVlIGlzICI7CisJCQlwcmludGYgb2N0YWxfZm10LCBtYXhrZXk7CisJCQlwcmludCAiICovIjsKKwkJfQorCX0KKycKK2lmIHRlc3QgJHBhc3MgPSAxIDsgdGhlbgorCW1heGtleT1gY2F0ICRwYXNzMWAKK2ZpCisKK2RvbmUKKworY2F0ICRwYXNzMgorY2F0ICRwYXNzMworY2F0ICRwYXNzNApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9NS25jdXJzZXNfZGVmLnNoIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9NS25jdXJzZXNfZGVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhYWM4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL01LbmN1cnNlc19kZWYuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEgL2Jpbi9zaAorIyAkSWQ6IE1LbmN1cnNlc19kZWYuc2gsdiAxLjIgMjAwMy8xMC8yNSAxNjoxOTo0NiB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTUtuY3Vyc2VzX2RlZi5zaCAtLSBnZW5lcmF0ZSBmYWxsYmFjayBkZWZpbml0aW9ucyBmb3IgbmN1cnNlc19jZmcuaAorIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMjAwMAorIworIyBHaXZlbiB0aGUgY2hvaWNlIGJldHdlZW4gY29uc3RydWN0cyBzdWNoIGFzCisjCisjCSNpZiBkZWZpbmVkKGZvbykgJiYgZm9vCisjCSNpZiBmb28KKyMKKyMgd2UgY2hvc2UgdGhlIGxhdHRlci4gIEl0IGlzIGd1YXJhbnRlZWQgYnkgdGhlIGxhbmd1YWdlIHN0YW5kYXJkLCBhbmQgdGhlcmUKKyMgYXBwZWFyIHRvIGJlIG5vIGJyb2tlbiBjb21waWxlcnMgdGhhdCBkbyBub3QgaG9ub3IgdGhhdCBkZXRhaWwuICBCdXQgc29tZQorIyBwZW9wbGUgd2FudCB0byB1c2UgZ2NjJ3MgLVd1bmRlZiBvcHRpb24gKGNvcnJlc3BvbmRpbmcgdG8gb25lIG9mIHRoZSBsZXNzCisjIHVzZWZ1bCBmZWF0dXJlcyBpbiBXYXRjb20ncyBjb21waWxlcikgdG8gY2hlY2sgZm9yIG1pc3NwZWxsaW5ncy4gIFNvIHdlCisjIGdlbmVyYXRlIGEgc2V0IG9mIGZhbGxiYWNrIGRlZmluaXRpb25zIHRvIHF1aWV0IHRoZSB3YXJuaW5ncyB3aXRob3V0IG1ha2luZworIyB0aGUgY29kZSB1Z2x5LgorIworREVGUz0iJHsxLW5jdXJzZXNfZGVmc30iCitjYXQgPDxFT0YKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5ICQwCisgKi8KKworI2lmbmRlZiBOQ19ERUZJTkVfSAorI2RlZmluZSBOQ19ERUZJTkVfSCAxCisKK0VPRgorCiske0FXSy1hd2t9IDwkREVGUyAnCishL15bQCNdLyB7CisJaWYgKCBORiA9PSAxICkKKwl7CisJCXByaW50ICIjaWZuZGVmIiwgJDEKKwkJcHJpbnQgIiNkZWZpbmUiLCAkMSwgIjAiCisJCXByaW50ICIjZW5kaWYiCisJCXByaW50ICIiCisJfSBlbHNlIGlmICggTkYgIT0gMCApIHsKKwkJcHJpbnQgIiNpZm5kZWYiLCAkMQorCQlwcmludGYgIiNkZWZpbmUiCisJCWZvciAobiA9IDE7IG4gPD0gTkY7IG4rKykgeworCQkJcHJpbnRmICIgJXMiLCAkbgorCQl9CisJCXByaW50ICIiCisJCXByaW50ICIjZW5kaWYiCisJCXByaW50ICIiCisJfQorfQorRU5ECXsKK3ByaW50ICIjZW5kaWYgLyogTkNfREVGSU5FX0ggKi8iCisJfQorJwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9NS3BhcmFtZXRyaXplZC5zaCBiL25jdXJzZXMtNS43L2luY2x1ZGUvTUtwYXJhbWV0cml6ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjgyNWM4MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvTUtwYXJhbWV0cml6ZWQuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogTUtwYXJhbWV0cml6ZWQuc2gsdiAxLjYgMjAwNi8wNC8yMiAyMTozNjoxNiB0b20gRXhwICQKKyMKKyMgTUtwYXJhbWV0cml6ZWQuc2ggLS0gZ2VuZXJhdGUgaW5kaXJlY3Rpb24gdmVjdG9ycyBmb3IgdmFyaW91cyBzb3J0IG1ldGhvZHMKKyMKKyMgVGhlIG91dHB1dCBvZiB0aGlzIHNjcmlwdCBpcyBDIHNvdXJjZSBmb3IgYW4gYXJyYXkgc3BlY2lmeWluZyB3aGV0aGVyCisjIHRlcm1jYXAgc3RyaW5ncyBzaG91bGQgdW5kZXJnbyBwYXJhbWV0ZXIgYW5kIHBhZGRpbmcgdHJhbnNsYXRpb24uCisjCitDQVBTPSIkezEtQ2Fwc30iCitjYXQgPDxFT0YKKy8qCisgKiBwYXJhbWV0cml6ZWQuaCAtLS0gaXMgYSB0ZXJtY2FwIGNhcGFiaWxpdHkgcGFyYW1ldHJpemVkPworICoKKyAqIE5vdGU6IHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgdXNpbmcgTUtwYXJhbWV0cml6ZWQuc2gsIGRvIG5vdCBlZGl0IGJ5IGhhbmQuCisgKiBBIHZhbHVlIG9mIC0xIGluIHRoZSB0YWJsZSBtZWFucyBzdXBwcmVzcyBib3RoIHBhZCBhbmQgJSB0cmFuc2xhdGlvbnMuCisgKiBBIHZhbHVlIG9mIDAgaW4gdGhlIHRhYmxlIG1lYW5zIGRvIHBhZCBidXQgbm90ICUgdHJhbnNsYXRpb25zLgorICogQSB2YWx1ZSBvZiAxIGluIHRoZSB0YWJsZSBtZWFucyBkbyBib3RoIHBhZCBhbmQgJSB0cmFuc2xhdGlvbnMuCisgKi8KKworc3RhdGljIHNob3J0IGNvbnN0IHBhcmFtZXRyaXplZFtdID0geworRU9GCisKKyMgV2UgZGV0ZWN0IHdoZXRoZXIgJSB0cmFuc2xhdGlvbnMgc2hvdWxkIGJlIGRvbmUgYnkgbG9va2luZyBmb3IgI1swLTldIGluIHRoZQorIyBkZXNjcmlwdGlvbiBmaWVsZC4gIFdlIHByZXNlbnRseSBzdXBwcmVzcyBwYWRkaW5nIHRyYW5zbGF0aW9uIG9ubHkgZm9yIHRoZQorIyBYRU5JWCBhY3NfKiBjYXBhYmlsaXRpZXMuICBNYXliZSBzb21lZGF5IHdlJ2xsIGRlZGljYXRlIGEgZmxhZyBmaWVsZCBmb3IKKyMgdGhpcywgdGhhdCB3b3VsZCBiZSBjbGVhbmVyLi4uLgorCiske0FXSy1hd2t9IDwkQ0FQUyAnCiskMyAhPSAic3RyIgl7bmV4dDt9CiskMSB+IC9eYWNzXy8Je3ByaW50ICItMSxcdC8qICIsICQyLCAiICovIjsgY291bnQrKzsgbmV4dDt9CiskMCB+IC8jWzAtOV0vCXtwcmludCAiMSxcdC8qICIsICQyLCAiICovIjsgY291bnQrKzsgbmV4dDt9CisJCXtwcmludCAiMCxcdC8qICIsICQyLCAiICovIjsgY291bnQrKzt9CitFTkQJCXtwcmludGYoIn0gLyogJWQgZW50cmllcyAqLztcblxuIiwgY291bnQpO30KKycKKwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9NS3Rlcm0uaC5hd2suaW4gYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL01LdGVybS5oLmF3ay5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmMyMDUyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9NS3Rlcm0uaC5hd2suaW4KQEAgLTAsMCArMSwzMjAgQEAKKyMgdmlsZTphd2ttb2RlCitCRUdJTgkJeworCQkgICAgcHJpbnQgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKwkJICAgIHByaW50ICAiICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoiCisJCSAgICBwcmludCAgIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKiIKKwkJICAgIHByaW50ICAiICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoiCisJCSAgICBwcmludCAgIiAqIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoiCisJCSAgICBwcmludCAgIiAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKiIKKwkJICAgIHByaW50ICAiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoiCisJCSAgICBwcmludCAgIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiIKKwkJICAgIHByaW50ICAiICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoiCisJCSAgICBwcmludCAgIiAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiIKKwkJICAgIHByaW50ICAiICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKiIKKwkJICAgIHByaW50ICAiICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoiCisJCSAgICBwcmludCAgIiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqIgorCQkgICAgcHJpbnQgICIgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKiIKKwkJICAgIHByaW50ICAiICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoiCisJCSAgICBwcmludCAgIiAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqIgorCQkgICAgcHJpbnQgICIgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiIKKwkJICAgIHByaW50ICAiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoiCisJCSAgICBwcmludCAgIiAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqIgorCQkgICAgcHJpbnQgICIgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKiIKKwkJICAgIHByaW50ICAiICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoiCisJCSAgICBwcmludCAgIiAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIgorCQkgICAgcHJpbnQgICIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIgorCQkgICAgcHJpbnQgICIvKiBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAgKi8iCisJCSAgICBwcmludCAgIi8qICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAqLyIKKwkJICAgIHByaW50ICAiLyogICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5NS1vbiAgICAgICAgICAgICAgICAgICovIgorCQkgICAgcHJpbnQgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiLyogJElkOiBNS3Rlcm0uaC5hd2suaW4sdiAxLjUwIDIwMDgvMDUvMjQgMjM6MTM6NTkgdG9tIEV4cCAkICovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIi8qIgorCQkgICAgcHJpbnQgICIqKgl0ZXJtLmggLS0gRGVmaW5pdGlvbiBvZiBzdHJ1Y3QgdGVybSIKKwkJICAgIHByaW50ICAiKi8iCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2lmbmRlZiBOQ1VSU0VTX1RFUk1fSF9pbmNsIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIE5DVVJTRVNfVEVSTV9IX2luY2wgMSIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjdW5kZWYgIE5DVVJTRVNfVkVSU0lPTiIKKwkJICAgIHByaW50ICAiI2RlZmluZSBOQ1VSU0VTX1ZFUlNJT04gXCJATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAXCIiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2luY2x1ZGUgPG5jdXJzZXNfZGxsLmg+IgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNpZmRlZiBfX2NwbHVzcGx1cyIKKwkJICAgIHByaW50ICAiZXh0ZXJuIFwiQ1wiIHsiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIvKiBNYWtlIHRoaXMgZmlsZSBzZWxmLWNvbnRhaW5lZCBieSBwcm92aWRpbmcgZGVmYXVsdHMgZm9yIHRoZSBIQVZFX1RFUk1JT1tTXV9IIgorCQkgICAgcHJpbnQgICIgKiBkZWZpbml0aW9uIChiYXNlZCBvbiB0aGUgc3lzdGVtIGZvciB3aGljaCB0aGlzIHdhcyBjb25maWd1cmVkKS4iCisJCSAgICBwcmludCAgIiAqLyIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjdW5kZWYgIE5DVVJTRVNfQ09OU1QiCisJCSAgICBwcmludCAgIiNkZWZpbmUgTkNVUlNFU19DT05TVCBATkNVUlNFU19DT05TVEAiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI3VuZGVmICBOQ1VSU0VTX1NCT09MIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIE5DVVJTRVNfU0JPT0wgQE5DVVJTRVNfU0JPT0xAIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiN1bmRlZiAgTkNVUlNFU19YTkFNRVMiCisJCSAgICBwcmludCAgIiNkZWZpbmUgTkNVUlNFU19YTkFNRVMgQE5DVVJTRVNfWE5BTUVTQCIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIvKiBXZSB3aWxsIHVzZSB0aGVzZSBzeW1ib2xzIHRvIGhpZGUgZGlmZmVyZW5jZXMgYmV0d2VlbiIKKwkJICAgIHByaW50ICAiICogdGVybWlvcy90ZXJtaW8vc2d0dHliIGludGVyZmFjZXMuIgorCQkgICAgcHJpbnQgICIgKi8iCisJCSAgICBwcmludCAgIiN1bmRlZiAgVFRZIgorCQkgICAgcHJpbnQgICIjdW5kZWYgIFNFVF9UVFkiCisJCSAgICBwcmludCAgIiN1bmRlZiAgR0VUX1RUWSIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIvKiBBc3N1bWUgUE9TSVggdGVybWlvIGlmIHdlIGhhdmUgdGhlIGhlYWRlciBhbmQgZnVuY3Rpb24gKi8iCisJCSAgICBwcmludCAgIi8qICNpZiBIQVZFX1RFUk1JT1NfSCAmJiBIQVZFX1RDR0VUQVRUUiAqLyIKKwkJICAgIHByaW50ICAiI2lmIEBIQVZFX1RFUk1JT1NfSEAgJiYgQEhBVkVfVENHRVRBVFRSQCIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjdW5kZWYgIFRFUk1JT1MiCisJCSAgICBwcmludCAgIiNkZWZpbmUgVEVSTUlPUyAxIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNpbmNsdWRlIDx0ZXJtaW9zLmg+IgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRUWSBzdHJ1Y3QgdGVybWlvcyIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjZWxzZSAvKiAhSEFWRV9URVJNSU9TX0ggKi8iCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiLyogI2lmIEhBVkVfVEVSTUlPX0ggKi8iCisJCSAgICBwcmludCAgIiNpZiBASEFWRV9URVJNSU9fSEAiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI3VuZGVmICBURVJNSU9TIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRFUk1JT1MgMSIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjaW5jbHVkZSA8dGVybWlvLmg+IgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRUWSBzdHJ1Y3QgdGVybWlvIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIi8qIEFkZCBkZWZpbml0aW9ucyB0byBtYWtlIHRlcm1pbyBsb29rIGxpa2UgdGVybWlvcy4iCisJCSAgICBwcmludCAgIiAqIEJ1dCBpZmRlZiBpdCwgc2luY2UgdGhlcmUgYXJlIHNvbWUgaW1wbGVtZW50YXRpb25zIgorCQkgICAgcHJpbnQgICIgKiB0aGF0IHRyeSB0byBkbyB0aGlzIGZvciB1cyBpbiBhIGZha2UgPHRlcm1pby5oPi4iCisJCSAgICBwcmludCAgIiAqLyIKKwkJICAgIHByaW50ICAiI2lmbmRlZiBUQ1NBTk9XIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRDU0FOT1cgVENTRVRBIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgVENTQURSQUlOIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRDU0FEUkFJTiBUQ1NFVEFXIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgVENTQUZMVVNIIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRDU0FGTFVTSCBUQ1NFVEFGIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgdGNzZXRhdHRyIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIHRjc2V0YXR0cihmZCwgY21kLCBhcmcpIGlvY3RsKGZkLCBjbWQsIGFyZykiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiI2lmbmRlZiB0Y2dldGF0dHIiCisJCSAgICBwcmludCAgIiNkZWZpbmUgdGNnZXRhdHRyKGZkLCBhcmcpIGlvY3RsKGZkLCBUQ0dFVEEsIGFyZykiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiI2lmbmRlZiBjZmdldG9zcGVlZCIKKwkJICAgIHByaW50ICAiI2RlZmluZSBjZmdldG9zcGVlZCh0KSAoKHQpLT5jX2NmbGFnICYgQ0JBVUQpIgorCQkgICAgcHJpbnQgICIjZW5kaWYiCisJCSAgICBwcmludCAgIiNpZm5kZWYgVENJRkxVU0ggIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFRDSUZMVVNIIDAiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiI2lmbmRlZiBUQ09GTFVTSCAiCisJCSAgICBwcmludCAgIiNkZWZpbmUgVENPRkxVU0ggMSIKKwkJICAgIHByaW50ICAiI2VuZGlmIgorCQkgICAgcHJpbnQgICIjaWZuZGVmIFRDSU9GTFVTSCAiCisJCSAgICBwcmludCAgIiNkZWZpbmUgVENJT0ZMVVNIIDIiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiI2lmbmRlZiB0Y2ZsdXNoIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIHRjZmx1c2goZmQsIGFyZykgaW9jdGwoZmQsIFRDRkxTSCwgYXJnKSIKKwkJICAgIHByaW50ICAiI2VuZGlmIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNlbHNlIC8qICFIQVZFX1RFUk1JT19IICovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiN1bmRlZiBURVJNSU9TIgorCQkgICAgcHJpbnQgICIjaW5jbHVkZSA8c2d0dHkuaD4iCisJCSAgICBwcmludCAgIiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4iCisJCSAgICBwcmludCAgIiNkZWZpbmUgVFRZIHN0cnVjdCBzZ3R0eWIiCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2VuZGlmIC8qIEhBVkVfVEVSTUlPX0ggKi8iCisJCSAgICBwcmludCAgIiIKKwkJICAgIHByaW50ICAiI2VuZGlmIC8qIEhBVkVfVEVSTUlPU19IICovIgorCQkgICAgcHJpbnQgICIiCisJCSAgICBwcmludCAgIiNpZmRlZiBURVJNSU9TIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIEdFVF9UVFkoZmQsIGJ1ZikgdGNnZXRhdHRyKGZkLCBidWYpIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIFNFVF9UVFkoZmQsIGJ1ZikgdGNzZXRhdHRyKGZkLCBUQ1NBRFJBSU4sIGJ1ZikiCisJCSAgICBwcmludCAgIiNlbHNlIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIEdFVF9UVFkoZmQsIGJ1ZikgZ3R0eShmZCwgYnVmKSIKKwkJICAgIHByaW50ICAiI2RlZmluZSBTRVRfVFRZKGZkLCBidWYpIHN0dHkoZmQsIGJ1ZikiCisJCSAgICBwcmludCAgIiNlbmRpZiIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIE5BTUVTSVpFIDI1NiIKKwkJICAgIHByaW50ICAiIgorCQkgICAgcHJpbnQgICIjZGVmaW5lIENVUiBjdXJfdGVybS0+dHlwZS4iCisJCSAgICBwcmludCAgIiIKKwkJfQorCiskMiA9PSAiJSUtU1RPUC1IRVJFLSUlIgl7CisJCQlwcmludCAgIiIKKwkJCXByaW50ZiAiI2RlZmluZSBCT09MV1JJVEUgJWRcbiIsIEJvb2xDb3VudAorCQkJcHJpbnRmICIjZGVmaW5lIE5VTVdSSVRFICAlZFxuIiwgTnVtYmVyQ291bnQKKwkJCXByaW50ZiAiI2RlZmluZSBTVFJXUklURSAgJWRcbiIsIFN0cmluZ0NvdW50CisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiLyogb2xkZXIgc3lub255bXMgZm9yIHNvbWUgY2FwYWJpbGl0aWVzICovIgorCQkJcHJpbnQgICIjZGVmaW5lIGJlZWhpdmVfZ2xpdGNoCW5vX2VzY19jdGxjIgorCQkJcHJpbnQgICIjZGVmaW5lIHRlbGVyYXlfZ2xpdGNoCWRlc3RfdGFic19tYWdpY19zbXNvIgorCQkJcHJpbnQgICIjZGVmaW5lIG1pY3JvX2NoYXJfc2l6ZSBtaWNyb19jb2xfc2l6ZSIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjaWZkZWYgX19JTlRFUk5BTF9DQVBTX1ZJU0lCTEUiCisJCX0KKworL14jLwkJe25leHQ7fQorCiskMSA9PSAiYWNzX2NoYXJzIgl7YWNzaW5kZXggPSBTdHJpbmdDb3VudH0KKworJDMgPT0gImJvb2wiCXsKKwkJICAgIHByaW50ZiAiI2RlZmluZSAlLTMwcyBDVVIgQm9vbGVhbnNbJWRdXG4iLCAkMSwgQm9vbENvdW50KysKKwkJfQorCiskMyA9PSAibnVtIgl7CisJCSAgICBwcmludGYgIiNkZWZpbmUgJS0zMHMgQ1VSIE51bWJlcnNbJWRdXG4iLCAkMSwgTnVtYmVyQ291bnQrKworCQl9CisKKyQzID09ICJzdHIiCXsKKwkJICAgIHByaW50ZiAiI2RlZmluZSAlLTMwcyBDVVIgU3RyaW5nc1slZF1cbiIsICQxLCBTdHJpbmdDb3VudCsrCisJCX0KKworRU5ECQl7CisJCQlwcmludCAgIiNlbmRpZiAvKiBfX0lOVEVSTkFMX0NBUFNfVklTSUJMRSAqLyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIi8qIgorCQkJcHJpbnQgICIgKiBQcmVkZWZpbmVkIHRlcm1pbmZvIGFycmF5IHNpemVzIgorCQkJcHJpbnQgICIgKi8iCisJCQlwcmludGYgIiNkZWZpbmUgQk9PTENPVU5UICVkXG4iLCBCb29sQ291bnQKKwkJCXByaW50ZiAiI2RlZmluZSBOVU1DT1VOVCAgJWRcbiIsIE51bWJlckNvdW50CisJCQlwcmludGYgIiNkZWZpbmUgU1RSQ09VTlQgICVkXG4iLCBTdHJpbmdDb3VudAorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIi8qIHVzZWQgYnkgY29kZSBmb3IgY29tcGFyaW5nIGVudHJpZXMgKi8iCisJCQlwcmludCAgIiNkZWZpbmUgYWNzX2NoYXJzX2luZGV4CSIsIGFjc2luZGV4CisJCQlwcmludCAgIiIKKwkJCXByaW50ICAidHlwZWRlZiBzdHJ1Y3QgdGVybXR5cGUgewkvKiBpbi1jb3JlIGZvcm0gb2YgdGVybWluZm8gZGF0YSAqLyIKKwkJCXByaW50ICAiICAgIGNoYXIgICp0ZXJtX25hbWVzOwkJLyogc3RyX3RhYmxlIG9mZnNldCBvZiB0ZXJtIG5hbWVzICovIgorCQkJcHJpbnQgICIgICAgY2hhciAgKnN0cl90YWJsZTsJCS8qIHBvaW50ZXIgdG8gc3RyaW5nIHRhYmxlICovIgorCQkJcHJpbnQgICIgICAgTkNVUlNFU19TQk9PTCAgKkJvb2xlYW5zOwkvKiBhcnJheSBvZiBib29sZWFuIHZhbHVlcyAqLyIKKwkJCXByaW50ICAiICAgIHNob3J0ICpOdW1iZXJzOwkJLyogYXJyYXkgb2YgaW50ZWdlciB2YWx1ZXMgKi8iCisJCQlwcmludCAgIiAgICBjaGFyICAqKlN0cmluZ3M7CQkvKiBhcnJheSBvZiBzdHJpbmcgb2Zmc2V0cyAqLyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjaWYgTkNVUlNFU19YTkFNRVMiCisJCQlwcmludCAgIiAgICBjaGFyICAqZXh0X3N0cl90YWJsZTsJLyogcG9pbnRlciB0byBleHRlbmRlZCBzdHJpbmcgdGFibGUgKi8iCisJCQlwcmludCAgIiAgICBjaGFyICAqKmV4dF9OYW1lczsJCS8qIGNvcnJlc3BvbmRpbmcgbmFtZXMgKi8iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiICAgIHVuc2lnbmVkIHNob3J0IG51bV9Cb29sZWFuczsvKiBjb3VudCB0b3RhbCBCb29sZWFucyAqLyIKKwkJCXByaW50ICAiICAgIHVuc2lnbmVkIHNob3J0IG51bV9OdW1iZXJzOwkvKiBjb3VudCB0b3RhbCBOdW1iZXJzICovIgorCQkJcHJpbnQgICIgICAgdW5zaWduZWQgc2hvcnQgbnVtX1N0cmluZ3M7CS8qIGNvdW50IHRvdGFsIFN0cmluZ3MgKi8iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiICAgIHVuc2lnbmVkIHNob3J0IGV4dF9Cb29sZWFuczsvKiBjb3VudCBleHRlbnNpb25zIHRvIEJvb2xlYW5zICovIgorCQkJcHJpbnQgICIgICAgdW5zaWduZWQgc2hvcnQgZXh0X051bWJlcnM7CS8qIGNvdW50IGV4dGVuc2lvbnMgdG8gTnVtYmVycyAqLyIKKwkJCXByaW50ICAiICAgIHVuc2lnbmVkIHNob3J0IGV4dF9TdHJpbmdzOwkvKiBjb3VudCBleHRlbnNpb25zIHRvIFN0cmluZ3MgKi8iCisJCQlwcmludCAgIiNlbmRpZiAvKiBOQ1VSU0VTX1hOQU1FUyAqLyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJ9IFRFUk1UWVBFOyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJ0eXBlZGVmIHN0cnVjdCB0ZXJtIHsJCS8qIGRlc2NyaWJlIGFuIGFjdHVhbCB0ZXJtaW5hbCAqLyIKKwkJCXByaW50ICAiICAgIFRFUk1UWVBFCXR5cGU7CQkvKiB0ZXJtaW5hbCB0eXBlIGRlc2NyaXB0aW9uICovIgorCQkJcHJpbnQgICIgICAgc2hvcnQJRmlsZWRlczsJLyogZmlsZSBkZXNjcmlwdGlvbiBiZWluZyB3cml0dGVuIHRvICovIgorCQkJcHJpbnQgICIgICAgVFRZCQlPdHR5YiwJCS8qIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSB0ZXJtaW5hbCAqLyIKKwkJCXByaW50ICAiCQlOdHR5YjsJCS8qIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRlcm1pbmFsICovIgorCQkJcHJpbnQgICIgICAgaW50CQlfYmF1ZHJhdGU7CS8qIHVzZWQgdG8gY29tcHV0ZSBwYWRkaW5nICovIgorCQkJcHJpbnQgICIgICAgY2hhciAqICAgICAgX3Rlcm1uYW1lOyAgICAgIC8qIHVzZWQgZm9yIHRlcm1uYW1lKCkgKi8iCisJCQlwcmludCAgIn0gVEVSTUlOQUw7IgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiNpZiBAQlJPS0VOX0xJTktFUkAgfHwgQGNmX2N2X2VuYWJsZV9yZWVudHJhbnRAIgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKFRFUk1JTkFMICosIGN1cl90ZXJtKTsiCisJCQlwcmludCAgIk5DVVJTRVNfV1JBUFBFRF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKiwgYm9vbG5hbWVzKTsiCisJCQlwcmludCAgIk5DVVJTRVNfV1JBUFBFRF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKiwgYm9vbGNvZGVzKTsiCisJCQlwcmludCAgIk5DVVJTRVNfV1JBUFBFRF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKiwgYm9vbGZuYW1lcyk7IgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICosIG51bW5hbWVzKTsiCisJCQlwcmludCAgIk5DVVJTRVNfV1JBUFBFRF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKiwgbnVtY29kZXMpOyIKKwkJCXByaW50ICAiTkNVUlNFU19XUkFQUEVEX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCAqLCBudW1mbmFtZXMpOyIKKwkJCXByaW50ICAiTkNVUlNFU19XUkFQUEVEX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCAqLCBzdHJuYW1lcyk7IgorCQkJcHJpbnQgICJOQ1VSU0VTX1dSQVBQRURfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICosIHN0cmNvZGVzKTsiCisJCQlwcmludCAgIk5DVVJTRVNfV1JBUFBFRF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKiwgc3RyZm5hbWVzKTsiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2RlZmluZSBjdXJfdGVybSAgIE5DVVJTRVNfUFVCTElDX1ZBUihjdXJfdGVybSgpKSIKKwkJCXByaW50ICAiI2RlZmluZSBib29sbmFtZXMgIE5DVVJTRVNfUFVCTElDX1ZBUihib29sbmFtZXMoKSkiCisJCQlwcmludCAgIiNkZWZpbmUgYm9vbGNvZGVzICBOQ1VSU0VTX1BVQkxJQ19WQVIoYm9vbGNvZGVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIGJvb2xmbmFtZXMgTkNVUlNFU19QVUJMSUNfVkFSKGJvb2xmbmFtZXMoKSkiCisJCQlwcmludCAgIiNkZWZpbmUgbnVtbmFtZXMgICBOQ1VSU0VTX1BVQkxJQ19WQVIobnVtbmFtZXMoKSkiCisJCQlwcmludCAgIiNkZWZpbmUgbnVtY29kZXMgICBOQ1VSU0VTX1BVQkxJQ19WQVIobnVtY29kZXMoKSkiCisJCQlwcmludCAgIiNkZWZpbmUgbnVtZm5hbWVzICBOQ1VSU0VTX1BVQkxJQ19WQVIobnVtZm5hbWVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIHN0cm5hbWVzICAgTkNVUlNFU19QVUJMSUNfVkFSKHN0cm5hbWVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIHN0cmNvZGVzICAgTkNVUlNFU19QVUJMSUNfVkFSKHN0cmNvZGVzKCkpIgorCQkJcHJpbnQgICIjZGVmaW5lIHN0cmZuYW1lcyAgTkNVUlNFU19QVUJMSUNfVkFSKHN0cmZuYW1lcygpKSIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjZWxzZSIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKFRFUk1JTkFMICopIGN1cl90ZXJtOyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgYm9vbG5hbWVzW107IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgYm9vbGNvZGVzW107IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgYm9vbGZuYW1lc1tdOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIG51bW5hbWVzW107IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgbnVtY29kZXNbXTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBudW1mbmFtZXNbXTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBzdHJuYW1lc1tdOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIHN0cmNvZGVzW107IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgc3RyZm5hbWVzW107IgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiNlbmRpZiIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIvKiBpbnRlcm5hbHMgKi8iCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19zZXRfdHR5X21vZGUgKFRUWSAqYnVmKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19nZXRfdHR5X21vZGUgKFRUWSAqYnVmKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19yZWFkX2VudHJ5IChjb25zdCBjaGFyICogY29uc3QsIGNoYXIgKiBjb25zdCwgVEVSTVRZUEUgKmNvbnN0KTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19yZWFkX2ZpbGVfZW50cnkgKGNvbnN0IGNoYXIgKmNvbnN0LCBURVJNVFlQRSAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19yZWFkX3Rlcm10eXBlIChURVJNVFlQRSAqLCBjaGFyICosIGludCk7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfZmlyc3RfbmFtZSAoY29uc3QgY2hhciAqY29uc3QpOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX25hbWVfbWF0Y2ggKGNvbnN0IGNoYXIgKmNvbnN0LCBjb25zdCBjaGFyICpjb25zdCwgY29uc3QgY2hhciAqY29uc3QpOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IFRFUk1UWVBFICopIF9uY19mYWxsYmFjayAoY29uc3QgY2hhciAqKTsiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiLyogZW50cnkgcG9pbnRzICovIgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoVEVSTUlOQUwgKikgc2V0X2N1cnRlcm0gKFRFUk1JTkFMICopOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZGVsX2N1cnRlcm0gKFRFUk1JTkFMICopOyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIvKiBtaXNjZWxsYW5lb3VzIGVudHJ5IHBvaW50cyAqLyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcmVzdGFydHRlcm0gKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBpbnQsIGludCAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNldHVwdGVybSAoTkNVUlNFU19DT05TVCBjaGFyICosaW50LGludCAqKTsiCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiLyogdGVybWluZm8gZW50cnkgcG9pbnRzLCBhbHNvIGRlY2xhcmVkIGluIGN1cnNlcy5oICovIgorCQkJcHJpbnQgICIjaWYgIWRlZmluZWQoX19OQ1VSU0VTX0gpIgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0aWdldHN0ciAoTkNVUlNFU19DT05TVCBjaGFyICopOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihjaGFyKSB0dHl0eXBlW107IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBwdXRwIChjb25zdCBjaGFyICopOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdGlnZXRmbGFnIChOQ1VSU0VTX0NPTlNUIGNoYXIgKik7IgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0aWdldG51bSAoTkNVUlNFU19DT05TVCBjaGFyICopOyIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjaWYgQE5DVVJTRVNfVFBBUk1fVkFSQVJHU0AgLyogTkNVUlNFU19UUEFSTV9WQVJBUkdTICovIgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0cGFybSAoTkNVUlNFU19DT05TVCBjaGFyICosIC4uLik7CS8qIHNwZWNpYWwgKi8iCisJCQlwcmludCAgIiNlbHNlIgorCQkJcHJpbnQgICJleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSB0cGFybSAoTkNVUlNFU19DT05TVCBjaGFyICosIGxvbmcsbG9uZyxsb25nLGxvbmcsbG9uZyxsb25nLGxvbmcsbG9uZyxsb25nKTsJLyogc3BlY2lhbCAqLyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdHBhcm1fdmFyYXJncyAoTkNVUlNFU19DT05TVCBjaGFyICosIC4uLik7CS8qIHNwZWNpYWwgKi8iCisJCQlwcmludCAgIiNlbmRpZiIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjZW5kaWYgLyogX19OQ1VSU0VTX0ggKi8iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiLyogdGVybWNhcCBkYXRhYmFzZSBlbXVsYXRpb24gKFhQRzQgdXNlcyBjb25zdCBvbmx5IGZvciAybmQgcGFyYW0gb2YgdGdldGVudCkgKi8iCisJCQlwcmludCAgIiNpZiAhZGVmaW5lZChOQ1VSU0VTX1RFUk1DQVBfSF9pbmNsKSIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdGdldHN0ciAoTkNVUlNFU19DT05TVCBjaGFyICosIGNoYXIgKiopOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdGdvdG8gKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdGdldGVudCAoY2hhciAqLCBjb25zdCBjaGFyICopOyIKKwkJCXByaW50ICAiZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdGdldGZsYWcgKE5DVVJTRVNfQ09OU1QgY2hhciAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRnZXRudW0gKE5DVVJTRVNfQ09OU1QgY2hhciAqKTsiCisJCQlwcmludCAgImV4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRwdXRzIChjb25zdCBjaGFyICosIGludCwgaW50ICgqKShpbnQpKTsiCisJCQlwcmludCAgIiNlbmRpZiAvKiBOQ1VSU0VTX1RFUk1DQVBfSF9pbmNsICovIgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiNpZmRlZiBfX2NwbHVzcGx1cyIKKwkJCXByaW50ICAifSIKKwkJCXByaW50ICAiI2VuZGlmIgorCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiNlbmRpZiAvKiBOQ1VSU0VTX1RFUk1fSF9pbmNsICovIgorCQl9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL01ha2VmaWxlLmluIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQ4YTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDEyNiBAQAorIyAkSWQ6IE1ha2VmaWxlLmluLHYgMS4zNSAyMDAxLzEyLzA4IDE4OjUwOjA2IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDAwLDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni0yMDAxCisjCisjIE1ha2VmaWxlIGZvciBuY3Vyc2VzIHNvdXJjZSBjb2RlLgorIworIyBUaGlzIG1ha2VzL2luc3RhbGxzIG5jdXJzZXMgaW5jbHVkZS1maWxlcworIworIyBUaGUgdmFyaWFibGUgJ3NyY2RpcicgcmVmZXJzIHRvIHRoZSBzb3VyY2UtZGlzdHJpYnV0aW9uLCBhbmQgY2FuIGJlIHNldCB3aXRoCisjIHRoZSBjb25maWd1cmUgc2NyaXB0IGJ5ICItLXNyY2Rpcj1ESVIiLgorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK0RFU1RESVIJCT0gQERFU1RESVJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0RBVEEJPSBASU5TVEFMTF9EQVRBQAorCitBV0sJCT0gQEFXS0AKK0xOX1MJCT0gQExOX1NACisKK1ZFUlNJT04JCT0gQGNmX2N2X3JlbF92ZXJzaW9uQAorCisjIFRoZSAiQ2FwcyIgZmlsZSBzcGVjaWZpZXMgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGZvcm1hdCwgYXMgd2VsbCBhcyB0aGUgbGlzdAorIyBvZiBmdW5jdGlvbiBrZXlzLgorVEVSTUlORk9fQ0FQUwk9ICQoc3JjZGlyKS9AVEVSTUlORk9fQ0FQU0AKKworIyBUaGVzZSBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0CitDT05GSUdfU1JDID0gXAorCU1LdGVybS5oLmF3ayBcCisJY3Vyc2VzLmhlYWQgXAorCXRlcm1jYXAuaCBcCisJdW5jdHJsLmgKKworIyBUaGVzZSBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoaXMgbWFrZWZpbGUKK0FVVE9fU1JDID0gXAorCWN1cnNlcy5oIFwKKwloYXNoc2l6ZS5oIFwKKwluY3Vyc2VzX2RlZi5oIFwKKwlwYXJhbWV0cml6ZWQuaCBcCisJdGVybS5oCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithbGwgXAorbGlicyBcCitkZXBlbmQgXAorc291cmNlcyBcCitpbnN0YWxsIDo6CSQoQVVUT19TUkMpCisKK2N1cnNlcy5oIDogJChURVJNSU5GT19DQVBTKSBcCisJCWN1cnNlcy5oZWFkIFwKKwkJJChzcmNkaXIpL2N1cnNlcy50YWlsIFwKKwkJJChzcmNkaXIpL01La2V5X2RlZnMuc2gKKwljYXQgY3Vyc2VzLmhlYWQgPiRACisJQVdLPSQoQVdLKSBzaCAkKHNyY2RpcikvTUtrZXlfZGVmcy5zaCAkKFRFUk1JTkZPX0NBUFMpID4+JEAKKwlzaCAtYyAnaWYgdGVzdCAiQE5DVVJTRVNfQ0hfVEAiID0gImNjaGFyX3QiIDsgdGhlbiBjYXQgJChzcmNkaXIpL2N1cnNlcy53aWRlID4+JEAgOyBmaScKKwljYXQgJChzcmNkaXIpL2N1cnNlcy50YWlsID4+JEAKKwordGVybS5oOiAkKFRFUk1JTkZPX0NBUFMpIE1LdGVybS5oLmF3aworCSQoQVdLKSAtZiBNS3Rlcm0uaC5hd2sgJChURVJNSU5GT19DQVBTKSA+ICRACisJc2ggJChzcmNkaXIpL2VkaXRfY2ZnLnNoIC4uL2luY2x1ZGUvbmN1cnNlc19jZmcuaCAkQAorCitoYXNoc2l6ZS5oOiAkKFRFUk1JTkZPX0NBUFMpICQoc3JjZGlyKS9NS2hhc2hzaXplLnNoCisJc2ggJChzcmNkaXIpL01LaGFzaHNpemUuc2ggJChURVJNSU5GT19DQVBTKSA+JEAKKworbmN1cnNlc19kZWYuaDogJChzcmNkaXIpL25jdXJzZXNfZGVmcyAkKHNyY2RpcikvTUtuY3Vyc2VzX2RlZi5zaAorCUFXSz0kKEFXSykgc2ggJChzcmNkaXIpL01LbmN1cnNlc19kZWYuc2ggJChzcmNkaXIpL25jdXJzZXNfZGVmcyA+JEAKKworcGFyYW1ldHJpemVkLmg6ICQoVEVSTUlORk9fQ0FQUykgJChzcmNkaXIpL01LcGFyYW1ldHJpemVkLnNoCisJQVdLPSQoQVdLKSBzaCAkKHNyY2RpcikvTUtwYXJhbWV0cml6ZWQuc2ggJChURVJNSU5GT19DQVBTKSA+JEAKKwordGFnczoKKwljdGFncyAqLltjaF0KKworQE1BS0VfVVBQRVJfVEFHU0BUQUdTOgorQE1BS0VfVVBQRVJfVEFHU0AJZXRhZ3MgKi5bY2hdCisKK21vc3RseWNsZWFuIDo6CisJLXJtIC1mIGNvcmUgdGFncyBUQUdTICp+ICouYmFrICouaSAqLmxuICouYXRhYyB0cmFjZQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCS1ybSAtZiAkKEFVVE9fU1JDKQorCitkaXN0Y2xlYW4gOjogY2xlYW4KKwktcm0gLWYgTWFrZWZpbGUgJChDT05GSUdfU1JDKQorCityZWFsY2xlYW4gOjogZGlzdGNsZWFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvY2FwZGVmYXVsdHMuYyBiL25jdXJzZXMtNS43L2luY2x1ZGUvY2FwZGVmYXVsdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2YyZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9jYXBkZWZhdWx0cy5jCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiBjYXBkZWZhdWx0cy5jLHYgMS4xMyAyMDA4LzA4LzA0IDEyOjMzOjQyIHRvbSBFeHAgJCAqLworCisgICAgLyoKKyAgICAgKiBDb21wdXRlIG9ic29sZXRlIGNhcGFiaWxpdGllcy4gIFRoZSByZWFzb24gdGhpcyBpcyBhbiBpbmNsdWRlIGZpbGUgaXMKKyAgICAgKiB0aGF0IHRoZSB0d28gcGxhY2VzIHdoZXJlIGl0J3MgbmVlZGVkIHdhbnQgdGhlIG1hY3JvcyB0byBnZW5lcmF0ZQorICAgICAqIG9mZnNldHMgdG8gZGlmZmVyZW50IHN0cnVjdHVyZXMuICBTZWUgdGhlIGZpbGUgQ2FwcyBmb3IgZXhwbGFuYXRpb25zIG9mCisgICAgICogdGhlc2UgY29udmVyc2lvbnMuCisgICAgICoKKyAgICAgKiBOb3RlOiAgVGhpcyBjb2RlIGlzIHRoZSBmdW5jdGlvbmFsIGludmVyc2Ugb2YgdGhlIGZpcnN0IHBhcnQgb2YKKyAgICAgKiBwb3N0cHJvY2Vzc190ZXJtY2FwKCkuCisgICAgICovCit7CisgICAgY2hhciAqc3A7CisgICAgc2hvcnQgY2FwdmFsOworCisjZGVmaW5lIEVYVFJBQ1RfREVMQVkoc3RyKSBcCisgICAgCShzaG9ydCkgKHNwID0gc3RyY2hyKHN0ciwgJyonKSwgc3AgPyBhdG9pKHNwKzEpIDogMCkKKworICAgIC8qIGN1cnJlbnQgKDQuNEJTRCkgY2FwYWJpbGl0aWVzIG1hcmtlZCBvYnNvbGV0ZSAqLworICAgIGlmIChWQUxJRF9TVFJJTkcoY2FycmlhZ2VfcmV0dXJuKQorCSYmIChjYXB2YWwgPSBFWFRSQUNUX0RFTEFZKGNhcnJpYWdlX3JldHVybikpKQorCWNhcnJpYWdlX3JldHVybl9kZWxheSA9IGNhcHZhbDsKKyAgICBpZiAoVkFMSURfU1RSSU5HKG5ld2xpbmUpICYmIChjYXB2YWwgPSBFWFRSQUNUX0RFTEFZKG5ld2xpbmUpKSkKKwluZXdfbGluZV9kZWxheSA9IGNhcHZhbDsKKworICAgIC8qIGN1cnJlbnQgKDQuNEJTRCkgY2FwYWJpbGl0aWVzIG5vdCBvYnNvbGV0ZSAqLworICAgIGlmICghVkFMSURfU1RSSU5HKHRlcm1jYXBfaW5pdDIpICYmIFZBTElEX1NUUklORyhpbml0XzNzdHJpbmcpKSB7CisJdGVybWNhcF9pbml0MiA9IGluaXRfM3N0cmluZzsKKwlpbml0XzNzdHJpbmcgPSBBQlNFTlRfU1RSSU5HOworICAgIH0KKyAgICBpZiAoIVZBTElEX1NUUklORyh0ZXJtY2FwX3Jlc2V0KQorICAgICAmJiBWQUxJRF9TVFJJTkcocmVzZXRfMnN0cmluZykKKyAgICAgJiYgIVZBTElEX1NUUklORyhyZXNldF8xc3RyaW5nKQorICAgICAmJiAhVkFMSURfU1RSSU5HKHJlc2V0XzNzdHJpbmcpKSB7CisJdGVybWNhcF9yZXNldCA9IHJlc2V0XzJzdHJpbmc7CisJcmVzZXRfMnN0cmluZyA9IEFCU0VOVF9TVFJJTkc7CisgICAgfQorICAgIGlmIChtYWdpY19jb29raWVfZ2xpdGNoX3VsID09IEFCU0VOVF9OVU1FUklDCisJJiYgbWFnaWNfY29va2llX2dsaXRjaCAhPSBBQlNFTlRfTlVNRVJJQworCSYmIFZBTElEX1NUUklORyhlbnRlcl91bmRlcmxpbmVfbW9kZSkpCisJbWFnaWNfY29va2llX2dsaXRjaF91bCA9IG1hZ2ljX2Nvb2tpZV9nbGl0Y2g7CisKKyAgICAvKiB0b3RhbGx5IG9ic29sZXRlIGNhcGFiaWxpdGllcyAqLworICAgIGxpbmVmZWVkX2lzX25ld2xpbmUgPSAoY2hhcikgKFZBTElEX1NUUklORyhuZXdsaW5lKQorCQkJCSAgJiYgKHN0cmNtcCgiXG4iLCBuZXdsaW5lKSA9PSAwKSk7CisgICAgaWYgKFZBTElEX1NUUklORyhjdXJzb3JfbGVmdCkKKwkmJiAoY2FwdmFsID0gRVhUUkFDVF9ERUxBWShjdXJzb3JfbGVmdCkpKQorCWJhY2tzcGFjZV9kZWxheSA9IGNhcHZhbDsKKyAgICBpZiAoVkFMSURfU1RSSU5HKHRhYikgJiYgKGNhcHZhbCA9IEVYVFJBQ1RfREVMQVkodGFiKSkpCisJaG9yaXpvbnRhbF90YWJfZGVsYXkgPSBjYXB2YWw7CisjdW5kZWYgRVhUUkFDVF9ERUxBWQorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9jdXJzZXMuaC5pbiBiL25jdXJzZXMtNS43L2luY2x1ZGUvY3Vyc2VzLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYTlhNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvY3Vyc2VzLmguaW4KQEAgLTAsMCArMSwxMjMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogY3Vyc2VzLmguaW4sdiAxLjE4NyAyMDA4LzA4LzMwIDIwOjExOjI5IHRvbSBFeHAgJCAqLworCisjaWZuZGVmIF9fTkNVUlNFU19ICisjZGVmaW5lIF9fTkNVUlNFU19ICisKKyNkZWZpbmUgQ1VSU0VTIDEKKyNkZWZpbmUgQ1VSU0VTX0ggMQorCisvKiBUaGlzIHNob3VsZCBiZSBkZWZpbmVkIGZvciB0aGUgZW5oYW5jZWQgZnVuY3Rpb25hbGl0eSB0byBiZSB2aXNpYmxlLgorICogSG93ZXZlciwgc29tZSBvZiB0aGUgd2lkZS1jaGFyYWN0ZXIgKGVuaGFuY2VkKSBmdW5jdGlvbmFsaXR5IGlzIG1pc3NpbmcuCisgKiBTbyB3ZSBkbyBub3QgZGVmaW5lIGl0ICh5ZXQpLgorI2RlZmluZSBfWE9QRU5fQ1VSU0VTIDEKKyAqLworCisvKiBUaGVzZSBhcmUgZGVmaW5lZCBvbmx5IGluIGN1cnNlcy5oLCBhbmQgYXJlIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGVzICovCisjZGVmaW5lIE5DVVJTRVNfVkVSU0lPTl9NQUpPUiBATkNVUlNFU19NQUpPUkAKKyNkZWZpbmUgTkNVUlNFU19WRVJTSU9OX01JTk9SIEBOQ1VSU0VTX01JTk9SQAorI2RlZmluZSBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0ggQE5DVVJTRVNfUEFUQ0hACisKKy8qIFRoaXMgaXMgZGVmaW5lZCBpbiBtb3JlIHRoYW4gb25lIG5jdXJzZXMgaGVhZGVyLCBmb3IgaWRlbnRpZmljYXRpb24gKi8KKyN1bmRlZiAgTkNVUlNFU19WRVJTSU9OCisjZGVmaW5lIE5DVVJTRVNfVkVSU0lPTiAiQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCIKKworLyoKKyAqIElkZW50aWZ5IHRoZSBtb3VzZSBlbmNvZGluZyB2ZXJzaW9uLgorICovCisjZGVmaW5lIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiBATkNVUlNFU19NT1VTRV9WRVJTSU9OQAorCisvKgorICogRGVmaW5pdGlvbnMgdG8gZmFjaWxpdGF0ZSBETEwncy4KKyAqLworI2luY2x1ZGUgPG5jdXJzZXNfZGxsLmg+CisKKy8qCisgKiBVc2VyLWRlZmluYWJsZSB0d2VhayB0byBkaXNhYmxlIHRoZSBpbmNsdWRlIG9mIDxzdGRib29sLmg+LgorICovCisjaWZuZGVmIE5DVVJTRVNfRU5BQkxFX1NUREJPT0xfSAorI2RlZmluZSBOQ1VSU0VTX0VOQUJMRV9TVERCT09MX0ggQGNmX2N2X2hlYWRlcl9zdGRib29sX2hACisjZW5kaWYKKworLyoKKyAqIE5DVVJTRVNfQVRUUl9UIGlzIHVzZWQgdG8gcXVpZXQgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBidWlsZGluZyBuY3Vyc2VzCisgKiBjb25maWd1cmVkIHVzaW5nIC0tZGlzYWJsZS1tYWNyb3MuCisgKi8KKyNpZmRlZiBOQ1VSU0VTX05PTUFDUk9TCisjaWZuZGVmIE5DVVJTRVNfQVRUUl9UCisjZGVmaW5lIE5DVVJTRVNfQVRUUl9UIGF0dHJfdAorI2VuZGlmCisjZW5kaWYgLyogTkNVUlNFU19OT01BQ1JPUyAqLworCisjaWZuZGVmIE5DVVJTRVNfQVRUUl9UCisjZGVmaW5lIE5DVVJTRVNfQVRUUl9UIGludAorI2VuZGlmCisKKy8qCisgKiBFeHBhbmRzIHRvICdjb25zdCcgaWYgbmN1cnNlcyBpcyBjb25maWd1cmVkIHVzaW5nIC0tZW5hYmxlLWNvbnN0LiAgTm90ZSB0aGF0CisgKiBkb2luZyBzbyBtYWtlcyBpdCBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgWC9PcGVuIEN1cnNlcy4KKyAqLworI3VuZGVmICBOQ1VSU0VTX0NPTlNUCisjZGVmaW5lIE5DVVJTRVNfQ09OU1QgQE5DVVJTRVNfQ09OU1RACisKKyN1bmRlZiBOQ1VSU0VTX0lOTElORQorI2RlZmluZSBOQ1VSU0VTX0lOTElORSBATkNVUlNFU19JTkxJTkVACisKKy8qCisgKiBUaGUgaW50ZXJuYWwgdHlwZSB1c2VkIGZvciBjb2xvciB2YWx1ZXMKKyAqLworI3VuZGVmCU5DVVJTRVNfQ09MT1JfVAorI2RlZmluZQlOQ1VSU0VTX0NPTE9SX1Qgc2hvcnQKKworLyoKKyAqIERlZmluaXRpb24gdXNlZCB0byBtYWtlIFdJTkRPVyBhbmQgc2ltaWxhciBzdHJ1Y3RzIG9wYXF1ZS4KKyAqLworI2lmbmRlZiBAY2ZfY3ZfZW5hYmxlX29wYXF1ZUAKKyNkZWZpbmUgTkNVUlNFU19PUEFRVUUgQE5DVVJTRVNfT1BBUVVFQAorI2VuZGlmCisKKy8qCisgKiBUaGUgaW50ZXJuYWwgdHlwZSB1c2VkIGZvciB3aW5kb3cgZGltZW5zaW9ucy4KKyAqLworI3VuZGVmCU5DVVJTRVNfU0laRV9UCisjZGVmaW5lCU5DVVJTRVNfU0laRV9UIEBOQ1VSU0VTX1NJWkVfVEAKKworLyoKKyAqIENvbnRyb2wgd2hldGhlciB0cGFybSgpIHN1cHBvcnRzIHZhcmFyZ3Mgb3IgZml4ZWQtcGFyYW1ldGVyIGxpc3QuCisgKi8KKyN1bmRlZiBOQ1VSU0VTX1RQQVJNX1ZBUkFSR1MKKyNkZWZpbmUgTkNVUlNFU19UUEFSTV9WQVJBUkdTIEBOQ1VSU0VTX1RQQVJNX1ZBUkFSR1NACisKKy8qCisgKiBOQ1VSU0VTX0NIX1QgaXMgdXNlZCBpbiBidWlsZGluZyB0aGUgbGlicmFyeSwgYnV0IG5vdCB1c2VkIG90aGVyd2lzZSBpbgorICogdGhpcyBoZWFkZXIgZmlsZSwgc2luY2UgdGhhdCB3b3VsZCBtYWtlIHRoZSBub3JtYWwvd2lkZS1jaGFyYWN0ZXIgdmVyc2lvbnMKKyAqIG9mIHRoZSBoZWFkZXIgaW5jb21wYXRpYmxlLgorICovCisjdW5kZWYJTkNVUlNFU19DSF9UCisjZGVmaW5lIE5DVVJTRVNfQ0hfVCBATkNVUlNFU19DSF9UQAorCisjaWYgQGNmX2N2X2VuYWJsZV9scDY0QCAmJiBkZWZpbmVkKF9MUDY0KQordHlwZWRlZiB1bnNpZ25lZCBjaHR5cGU7Cit0eXBlZGVmIHVuc2lnbmVkIG1tYXNrX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBAY2ZfY3ZfdHlwZW9mX2NodHlwZUAgY2h0eXBlOwordHlwZWRlZiB1bnNpZ25lZCBAY2ZfY3ZfdHlwZW9mX21tYXNrX3RAIG1tYXNrX3Q7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5jdHJsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CS8qIHdlIG5lZWQgdmFfbGlzdCAqLworI2lmZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNpbmNsdWRlIDxzdGRkZWYuaD4JLyogd2Ugd2FudCB3Y2hhcl90ICovCisjZW5kaWYgLyogX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAqLworCisvKiBYL09wZW4gYW5kIFNWcjQgc3BlY2lmeSB0aGF0IGN1cnNlcyBpbXBsZW1lbnRzICdib29sJy4gIEhvd2V2ZXIsIEMrKyBtYXkgYWxzbworICogaW1wbGVtZW50IGl0LiAgSWYgc28sIHdlIG11c3QgdXNlIHRoZSBDKysgY29tcGlsZXIncyB0eXBlIHRvIGF2b2lkIGNvbmZsaWN0CisgKiB3aXRoIG90aGVyIGludGVyZmFjZXMuCisgKgorICogQSBmdXJ0aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IDxzdGRib29sLmg+IG1heSBkZWNsYXJlICdib29sJyB0byBiZSBhCisgKiBkaWZmZXJlbnQgdHlwZSwgc3VjaCBhcyBhbiBlbnVtIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSBjb21wYXRpYmxlIHdpdGgKKyAqIEMrKy4gIElmIHdlIGhhdmUgPHN0ZGJvb2wuaD4sIG1ha2UgJ2Jvb2wnIGEgbWFjcm8sIHNvIHVzZXJzIG1heSAjdW5kZWYgaXQuCisgKiBPdGhlcndpc2UsIGxldCBpdCByZW1haW4gYSB0eXBlZGVmIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyICNkZWZpbmUncy4KKyAqIEluIGVpdGhlciBjYXNlLCBtYWtlIGEgdHlwZWRlZiBmb3IgTkNVUlNFU19CT09MIHdoaWNoIGNhbiBiZSB1c2VkIGlmIG5lZWRlZAorICogZnJvbSBlaXRoZXIgQyBvciBDKysuCisgKi8KKworI3VuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAgICAxCisKKyN1bmRlZiBGQUxTRQorI2RlZmluZSBGQUxTRSAgIDAKKwordHlwZWRlZiBAY2ZfY3ZfdHlwZV9vZl9ib29sQCBOQ1VSU0VTX0JPT0w7CisKKyNpZiBAVVNFX0NYWF9CT09MQAkvKiBfX2NwbHVzcGx1cywgZXRjLiAqLworCisvKiB1c2UgdGhlIEMrKyBjb21waWxlcidzIGJvb2wgdHlwZSAqLworI2RlZmluZSBOQ1VSU0VTX0JPT0wgYm9vbAorCisjZWxzZQkJCS8qIGM4OSwgYzk5LCBldGMuICovCisKKyNpZiBOQ1VSU0VTX0VOQUJMRV9TVERCT09MX0gKKyNpbmNsdWRlIDxzdGRib29sLmg+CisvKiB1c2Ugd2hhdGV2ZXIgdGhlIEMgY29tcGlsZXIgZGVjaWRlcyBib29sIHJlYWxseSBpcyAqLworI2RlZmluZSBOQ1VSU0VTX0JPT0wgYm9vbAorI2Vsc2UKKy8qIHRoZXJlIGlzIG5vIHByZWRlZmluZWQgYm9vbCAtIHVzZSBvdXIgb3duICovCisjdW5kZWYgYm9vbAorI2RlZmluZSBib29sIE5DVVJTRVNfQk9PTAorI2VuZGlmCisKKyNlbmRpZiAvKiAhX19jcGx1c3BsdXMsIGV0Yy4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNkZWZpbmUgTkNVUlNFU19DQVNUKHR5cGUsdmFsdWUpIHN0YXRpY19jYXN0PHR5cGU+KHZhbHVlKQorI2Vsc2UKKyNkZWZpbmUgTkNVUlNFU19DQVNUKHR5cGUsdmFsdWUpICh0eXBlKSh2YWx1ZSkKKyNlbmRpZgorCisvKgorICogWC9PcGVuIGF0dHJpYnV0ZXMuICBJbiB0aGUgbmN1cnNlcyBpbXBsZW1lbnRhdGlvbiwgdGhleSBhcmUgaWRlbnRpY2FsIHRvIHRoZQorICogQV8gYXR0cmlidXRlcy4KKyAqLworI2RlZmluZSBXQV9BVFRSSUJVVEVTCUFfQVRUUklCVVRFUworI2RlZmluZSBXQV9OT1JNQUwJQV9OT1JNQUwKKyNkZWZpbmUgV0FfU1RBTkRPVVQJQV9TVEFORE9VVAorI2RlZmluZSBXQV9VTkRFUkxJTkUJQV9VTkRFUkxJTkUKKyNkZWZpbmUgV0FfUkVWRVJTRQlBX1JFVkVSU0UKKyNkZWZpbmUgV0FfQkxJTksJQV9CTElOSworI2RlZmluZSBXQV9ESU0JCUFfRElNCisjZGVmaW5lIFdBX0JPTEQJCUFfQk9MRAorI2RlZmluZSBXQV9BTFRDSEFSU0VUCUFfQUxUQ0hBUlNFVAorI2RlZmluZSBXQV9JTlZJUwlBX0lOVklTCisjZGVmaW5lIFdBX1BST1RFQ1QJQV9QUk9URUNUCisjZGVmaW5lIFdBX0hPUklaT05UQUwJQV9IT1JJWk9OVEFMCisjZGVmaW5lIFdBX0xFRlQJCUFfTEVGVAorI2RlZmluZSBXQV9MT1cJCUFfTE9XCisjZGVmaW5lIFdBX1JJR0hUCUFfUklHSFQKKyNkZWZpbmUgV0FfVE9QCQlBX1RPUAorI2RlZmluZSBXQV9WRVJUSUNBTAlBX1ZFUlRJQ0FMCisKKy8qIGNvbG9ycyAqLworI2RlZmluZSBDT0xPUl9CTEFDSwkwCisjZGVmaW5lIENPTE9SX1JFRAkxCisjZGVmaW5lIENPTE9SX0dSRUVOCTIKKyNkZWZpbmUgQ09MT1JfWUVMTE9XCTMKKyNkZWZpbmUgQ09MT1JfQkxVRQk0CisjZGVmaW5lIENPTE9SX01BR0VOVEEJNQorI2RlZmluZSBDT0xPUl9DWUFOCTYKKyNkZWZpbmUgQ09MT1JfV0hJVEUJNworCisvKiBsaW5lIGdyYXBoaWNzICovCisKKyNpZiBAQlJPS0VOX0xJTktFUkAgfHwgQGNmX2N2X2VuYWJsZV9yZWVudHJhbnRACitOQ1VSU0VTX1dSQVBQRURfVkFSKGNodHlwZSosIGFjc19tYXApOworI2RlZmluZSBhY3NfbWFwIChfbmNfYWNzX21hcCgpKQorI2Vsc2UKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoY2h0eXBlKSBhY3NfbWFwW107CisjZW5kaWYKKworI2RlZmluZSBOQ1VSU0VTX0FDUyhjKQkoYWNzX21hcFtOQ1VSU0VTX0NBU1QodW5zaWduZWQgY2hhcixjKV0pCisKKy8qIFZUMTAwIHN5bWJvbHMgYmVnaW4gaGVyZSAqLworI2RlZmluZSBBQ1NfVUxDT1JORVIJTkNVUlNFU19BQ1MoJ2wnKSAvKiB1cHBlciBsZWZ0IGNvcm5lciAqLworI2RlZmluZSBBQ1NfTExDT1JORVIJTkNVUlNFU19BQ1MoJ20nKSAvKiBsb3dlciBsZWZ0IGNvcm5lciAqLworI2RlZmluZSBBQ1NfVVJDT1JORVIJTkNVUlNFU19BQ1MoJ2snKSAvKiB1cHBlciByaWdodCBjb3JuZXIgKi8KKyNkZWZpbmUgQUNTX0xSQ09STkVSCU5DVVJTRVNfQUNTKCdqJykgLyogbG93ZXIgcmlnaHQgY29ybmVyICovCisjZGVmaW5lIEFDU19MVEVFCU5DVVJTRVNfQUNTKCd0JykgLyogdGVlIHBvaW50aW5nIHJpZ2h0ICovCisjZGVmaW5lIEFDU19SVEVFCU5DVVJTRVNfQUNTKCd1JykgLyogdGVlIHBvaW50aW5nIGxlZnQgKi8KKyNkZWZpbmUgQUNTX0JURUUJTkNVUlNFU19BQ1MoJ3YnKSAvKiB0ZWUgcG9pbnRpbmcgdXAgKi8KKyNkZWZpbmUgQUNTX1RURUUJTkNVUlNFU19BQ1MoJ3cnKSAvKiB0ZWUgcG9pbnRpbmcgZG93biAqLworI2RlZmluZSBBQ1NfSExJTkUJTkNVUlNFU19BQ1MoJ3EnKSAvKiBob3Jpem9udGFsIGxpbmUgKi8KKyNkZWZpbmUgQUNTX1ZMSU5FCU5DVVJTRVNfQUNTKCd4JykgLyogdmVydGljYWwgbGluZSAqLworI2RlZmluZSBBQ1NfUExVUwlOQ1VSU0VTX0FDUygnbicpIC8qIGxhcmdlIHBsdXMgb3IgY3Jvc3NvdmVyICovCisjZGVmaW5lIEFDU19TMQkJTkNVUlNFU19BQ1MoJ28nKSAvKiBzY2FuIGxpbmUgMSAqLworI2RlZmluZSBBQ1NfUzkJCU5DVVJTRVNfQUNTKCdzJykgLyogc2NhbiBsaW5lIDkgKi8KKyNkZWZpbmUgQUNTX0RJQU1PTkQJTkNVUlNFU19BQ1MoJ2AnKSAvKiBkaWFtb25kICovCisjZGVmaW5lIEFDU19DS0JPQVJECU5DVVJTRVNfQUNTKCdhJykgLyogY2hlY2tlciBib2FyZCAoc3RpcHBsZSkgKi8KKyNkZWZpbmUgQUNTX0RFR1JFRQlOQ1VSU0VTX0FDUygnZicpIC8qIGRlZ3JlZSBzeW1ib2wgKi8KKyNkZWZpbmUgQUNTX1BMTUlOVVMJTkNVUlNFU19BQ1MoJ2cnKSAvKiBwbHVzL21pbnVzICovCisjZGVmaW5lIEFDU19CVUxMRVQJTkNVUlNFU19BQ1MoJ34nKSAvKiBidWxsZXQgKi8KKy8qIFRlbGV0eXBlIDU0MTB2MSBzeW1ib2xzIGJlZ2luIGhlcmUgKi8KKyNkZWZpbmUgQUNTX0xBUlJPVwlOQ1VSU0VTX0FDUygnLCcpIC8qIGFycm93IHBvaW50aW5nIGxlZnQgKi8KKyNkZWZpbmUgQUNTX1JBUlJPVwlOQ1VSU0VTX0FDUygnKycpIC8qIGFycm93IHBvaW50aW5nIHJpZ2h0ICovCisjZGVmaW5lIEFDU19EQVJST1cJTkNVUlNFU19BQ1MoJy4nKSAvKiBhcnJvdyBwb2ludGluZyBkb3duICovCisjZGVmaW5lIEFDU19VQVJST1cJTkNVUlNFU19BQ1MoJy0nKSAvKiBhcnJvdyBwb2ludGluZyB1cCAqLworI2RlZmluZSBBQ1NfQk9BUkQJTkNVUlNFU19BQ1MoJ2gnKSAvKiBib2FyZCBvZiBzcXVhcmVzICovCisjZGVmaW5lIEFDU19MQU5URVJOCU5DVVJTRVNfQUNTKCdpJykgLyogbGFudGVybiBzeW1ib2wgKi8KKyNkZWZpbmUgQUNTX0JMT0NLCU5DVVJTRVNfQUNTKCcwJykgLyogc29saWQgc3F1YXJlIGJsb2NrICovCisvKgorICogVGhlc2UgYXJlbid0IGRvY3VtZW50ZWQsIGJ1dCBhIGxvdCBvZiBTeXN0ZW0gVnMgaGF2ZSB0aGVtIGFueXdheQorICogKHlvdSBjYW4gc3BvdCBwcHJyeXl6ent7fHx9fSBpbiBhIGxvdCBvZiBBVCZUIHRlcm1pbmZvIHN0cmluZ3MpLgorICogVGhlIEFDU19uYW1lcyBtYXkgbm90IG1hdGNoIEFUJlQncywgb3VyIHNvdXJjZSBkaWRuJ3Qga25vdyB0aGVtLgorICovCisjZGVmaW5lIEFDU19TMwkJTkNVUlNFU19BQ1MoJ3AnKSAvKiBzY2FuIGxpbmUgMyAqLworI2RlZmluZSBBQ1NfUzcJCU5DVVJTRVNfQUNTKCdyJykgLyogc2NhbiBsaW5lIDcgKi8KKyNkZWZpbmUgQUNTX0xFUVVBTAlOQ1VSU0VTX0FDUygneScpIC8qIGxlc3MvZXF1YWwgKi8KKyNkZWZpbmUgQUNTX0dFUVVBTAlOQ1VSU0VTX0FDUygneicpIC8qIGdyZWF0ZXIvZXF1YWwgKi8KKyNkZWZpbmUgQUNTX1BJCQlOQ1VSU0VTX0FDUygneycpIC8qIFBpICovCisjZGVmaW5lIEFDU19ORVFVQUwJTkNVUlNFU19BQ1MoJ3wnKSAvKiBub3QgZXF1YWwgKi8KKyNkZWZpbmUgQUNTX1NURVJMSU5HCU5DVVJTRVNfQUNTKCd9JykgLyogVUsgcG91bmQgc2lnbiAqLworCisvKgorICogTGluZSBkcmF3aW5nIEFDUyBuYW1lcyBhcmUgb2YgdGhlIGZvcm0gQUNTX3RyYmwsIHdoZXJlIHQgaXMgdGhlIHRvcCwgcgorICogaXMgdGhlIHJpZ2h0LCBiIGlzIHRoZSBib3R0b20sIGFuZCBsIGlzIHRoZSBsZWZ0LiAgdCwgciwgYiwgYW5kIGwgbWlnaHQKKyAqIGJlIEIgKGJsYW5rKSwgUyAoc2luZ2xlKSwgRCAoZG91YmxlKSwgb3IgVCAodGhpY2spLiAgVGhlIHN1YnNldCBkZWZpbmVkCisgKiBoZXJlIG9ubHkgdXNlcyBCIGFuZCBTLgorICovCisjZGVmaW5lIEFDU19CU1NCCUFDU19VTENPUk5FUgorI2RlZmluZSBBQ1NfU1NCQglBQ1NfTExDT1JORVIKKyNkZWZpbmUgQUNTX0JCU1MJQUNTX1VSQ09STkVSCisjZGVmaW5lIEFDU19TQkJTCUFDU19MUkNPUk5FUgorI2RlZmluZSBBQ1NfU0JTUwlBQ1NfUlRFRQorI2RlZmluZSBBQ1NfU1NTQglBQ1NfTFRFRQorI2RlZmluZSBBQ1NfU1NCUwlBQ1NfQlRFRQorI2RlZmluZSBBQ1NfQlNTUwlBQ1NfVFRFRQorI2RlZmluZSBBQ1NfQlNCUwlBQ1NfSExJTkUKKyNkZWZpbmUgQUNTX1NCU0IJQUNTX1ZMSU5FCisjZGVmaW5lIEFDU19TU1NTCUFDU19QTFVTCisKKyN1bmRlZglFUlIKKyNkZWZpbmUgRVJSICAgICAoLTEpCisKKyN1bmRlZglPSworI2RlZmluZSBPSyAgICAgICgwKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBfZmxhZ3MgbWVtYmVyICovCisjZGVmaW5lIF9TVUJXSU4gICAgICAgICAweDAxCS8qIGlzIHRoaXMgYSBzdWItd2luZG93PyAqLworI2RlZmluZSBfRU5ETElORSAgICAgICAgMHgwMgkvKiBpcyB0aGUgd2luZG93IGZsdXNoIHJpZ2h0PyAqLworI2RlZmluZSBfRlVMTFdJTiAgICAgICAgMHgwNAkvKiBpcyB0aGUgd2luZG93IGZ1bGwtc2NyZWVuPyAqLworI2RlZmluZSBfU0NST0xMV0lOICAgICAgMHgwOAkvKiBib3R0b20gZWRnZSBpcyBhdCBzY3JlZW4gYm90dG9tPyAqLworI2RlZmluZSBfSVNQQUQJICAgICAgICAweDEwCS8qIGlzIHRoaXMgd2luZG93IGEgcGFkPyAqLworI2RlZmluZSBfSEFTTU9WRUQgICAgICAgMHgyMAkvKiBoYXMgY3Vyc29yIG1vdmVkIHNpbmNlIGxhc3QgcmVmcmVzaD8gKi8KKyNkZWZpbmUgX1dSQVBQRUQgICAgICAgIDB4NDAJLyogY3Vyc29yIHdhcyBqdXN0IHdyYXBwcGVkICovCisKKy8qCisgKiB0aGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGZpcnN0Y2hhciBhbmQgbGFzdGNoYXIgZmllbGRzIHRvIG1hcmsKKyAqIHVuY2hhbmdlZCBsaW5lcworICovCisjZGVmaW5lIF9OT0NIQU5HRSAgICAgICAtMQorCisvKgorICogdGhpcyB2YWx1ZSBpcyB1c2VkIGluIHRoZSBvbGRpbmRleCBmaWVsZCB0byBtYXJrIGxpbmVzIGNyZWF0ZWQgYnkgaW5zZXJ0aW9ucworICogYW5kIHNjcm9sbHMuCisgKi8KKyNkZWZpbmUgX05FV0lOREVYCS0xCisKK3R5cGVkZWYgc3RydWN0IHNjcmVlbiAgU0NSRUVOOwordHlwZWRlZiBzdHJ1Y3QgX3dpbl9zdCBXSU5ET1c7CisKK3R5cGVkZWYJY2h0eXBlCWF0dHJfdDsJCS8qIC4uLm11c3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyBjaHR5cGUgKi8KKworI2lmZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKworI2lmIEBOQ1VSU0VTX0xJQlVURjhACisjaWZkZWYgbWJsZW4JCQkvKiBsaWJ1dGY4LmggZGVmaW5lcyBpdCB3L28gdW5kZWZpbmluZyBmaXJzdCAqLworI3VuZGVmIG1ibGVuCisjZW5kaWYKKyNpbmNsdWRlIDxsaWJ1dGY4Lmg+CisjZW5kaWYKKworI2lmIEBORUVEX1dDSEFSX0hACisjaW5jbHVkZSA8d2NoYXIuaD4JCS8qIC4uLnRvIGdldCBtYnN0YXRlX3QsIGV0Yy4gKi8KKyNlbmRpZgorCisjaWYgQE5DVVJTRVNfV0NIQVJfVEAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgd2NoYXJfdEBOQ1VSU0VTX09LX1dDSEFSX1RAOworI2VuZGlmCisKKyNpZiBATkNVUlNFU19XSU5UX1RACit0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3RATkNVUlNFU19PS19XQ0hBUl9UQDsKKyNlbmRpZgorCisjZGVmaW5lIENDSEFSV19NQVgJNQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBhdHRyX3QJYXR0cjsKKyAgICB3Y2hhcl90CWNoYXJzW0NDSEFSV19NQVhdOworI2lmIEBOQ1VSU0VTX0VYVF9DT0xPUlNACisjdW5kZWYgTkNVUlNFU19FWFRfQ09MT1JTCisjZGVmaW5lIE5DVVJTRVNfRVhUX0NPTE9SUyBATkNVUlNFU19QQVRDSEAKKyAgICBpbnQJCWV4dF9jb2xvcjsJLyogY29sb3IgcGFpciwgbXVzdCBiZSBtb3JlIHRoYW4gMTYtYml0cyAqLworI2VuZGlmCit9CitjY2hhcl90OworCisjZW5kaWYgLyogX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAqLworCisjaWYgIU5DVVJTRVNfT1BBUVVFCitzdHJ1Y3QgbGRhdDsKKworc3RydWN0IF93aW5fc3QKK3sKKwlOQ1VSU0VTX1NJWkVfVCBfY3VyeSwgX2N1cng7IC8qIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uICovCisKKwkvKiB3aW5kb3cgbG9jYXRpb24gYW5kIHNpemUgKi8KKwlOQ1VSU0VTX1NJWkVfVCBfbWF4eSwgX21heHg7IC8qIG1heGltdW1zIG9mIHggYW5kIHksIE5PVCB3aW5kb3cgc2l6ZSAqLworCU5DVVJTRVNfU0laRV9UIF9iZWd5LCBfYmVneDsgLyogc2NyZWVuIGNvb3JkcyBvZiB1cHBlci1sZWZ0LWhhbmQgY29ybmVyICovCisKKwlzaG9ydCAgIF9mbGFnczsJCS8qIHdpbmRvdyBzdGF0ZSBmbGFncyAqLworCisJLyogYXR0cmlidXRlIHRyYWNraW5nICovCisJYXR0cl90ICBfYXR0cnM7CQkvKiBjdXJyZW50IGF0dHJpYnV0ZSBmb3Igbm9uLXNwYWNlIGNoYXJhY3RlciAqLworCWNodHlwZSAgX2JrZ2Q7CQkvKiBjdXJyZW50IGJhY2tncm91bmQgY2hhci9hdHRyaWJ1dGUgcGFpciAqLworCisJLyogb3B0aW9uIHZhbHVlcyBzZXQgYnkgdXNlciAqLworCWJvb2wJX25vdGltZW91dDsJLyogbm8gdGltZSBvdXQgb24gZnVuY3Rpb24ta2V5IGVudHJ5PyAqLworCWJvb2wJX2NsZWFyOwkJLyogY29uc2lkZXIgYWxsIGRhdGEgaW4gdGhlIHdpbmRvdyBpbnZhbGlkPyAqLworCWJvb2wJX2xlYXZlb2s7CS8qIE9LIHRvIG5vdCByZXNldCBjdXJzb3Igb24gZXhpdD8gKi8KKwlib29sCV9zY3JvbGw7CS8qIE9LIHRvIHNjcm9sbCB0aGlzIHdpbmRvdz8gKi8KKwlib29sCV9pZGxvazsJCS8qIE9LIHRvIHVzZSBpbnNlcnQvZGVsZXRlIGxpbmU/ICovCisJYm9vbAlfaWRjb2s7CQkvKiBPSyB0byB1c2UgaW5zZXJ0L2RlbGV0ZSBjaGFyPyAqLworCWJvb2wJX2ltbWVkOwkJLyogd2luZG93IGluIGltbWVkIG1vZGU/IChub3QgeWV0IHVzZWQpICovCisJYm9vbAlfc3luYzsJCS8qIHdpbmRvdyBpbiBzeW5jIG1vZGU/ICovCisJYm9vbAlfdXNlX2tleXBhZDsJLyogcHJvY2VzcyBmdW5jdGlvbiBrZXlzIGludG8gS0VZXyBzeW1ib2xzPyAqLworCWludAlfZGVsYXk7CQkvKiAwID0gbm9kZWxheSwgPDAgPSBibG9ja2luZywgPjAgPSBkZWxheSAqLworCisJc3RydWN0IGxkYXQgKl9saW5lOwkvKiB0aGUgYWN0dWFsIGxpbmUgZGF0YSAqLworCisJLyogZ2xvYmFsIHNjcmVlbiBzdGF0ZSAqLworCU5DVVJTRVNfU0laRV9UIF9yZWd0b3A7CS8qIHRvcCBsaW5lIG9mIHNjcm9sbGluZyByZWdpb24gKi8KKwlOQ1VSU0VTX1NJWkVfVCBfcmVnYm90dG9tOyAvKiBib3R0b20gbGluZSBvZiBzY3JvbGxpbmcgcmVnaW9uICovCisKKwkvKiB0aGVzZSBhcmUgdXNlZCBvbmx5IGlmIHRoaXMgaXMgYSBzdWItd2luZG93ICovCisJaW50CV9wYXJ4OwkJLyogeCBjb29yZGluYXRlIG9mIHRoaXMgd2luZG93IGluIHBhcmVudCAqLworCWludAlfcGFyeTsJCS8qIHkgY29vcmRpbmF0ZSBvZiB0aGlzIHdpbmRvdyBpbiBwYXJlbnQgKi8KKwlXSU5ET1cJKl9wYXJlbnQ7CS8qIHBvaW50ZXIgdG8gcGFyZW50IGlmIGEgc3ViLXdpbmRvdyAqLworCisJLyogdGhlc2UgYXJlIHVzZWQgb25seSBpZiB0aGlzIGlzIGEgcGFkICovCisJc3RydWN0IHBkYXQKKwl7CisJICAgIE5DVVJTRVNfU0laRV9UIF9wYWRfeSwgICAgICBfcGFkX3g7CisJICAgIE5DVVJTRVNfU0laRV9UIF9wYWRfdG9wLCAgICBfcGFkX2xlZnQ7CisJICAgIE5DVVJTRVNfU0laRV9UIF9wYWRfYm90dG9tLCBfcGFkX3JpZ2h0OworCX0gX3BhZDsKKworCU5DVVJTRVNfU0laRV9UIF95b2Zmc2V0OyAvKiByZWFsIGJlZ3kgaXMgX2JlZ3kgKyBfeW9mZnNldCAqLworCisjaWZkZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorCWNjaGFyX3QgIF9ia2dybmQ7CS8qIGN1cnJlbnQgYmFja2dyb3VuZCBjaGFyL2F0dHJpYnV0ZSBwYWlyICovCisjaWYgQE5DVVJTRVNfRVhUX0NPTE9SU0AKKwlpbnQJX2NvbG9yOwkJLyogY3VycmVudCBjb2xvci1wYWlyIGZvciBub24tc3BhY2UgY2hhcmFjdGVyICovCisjZW5kaWYKKyNlbmRpZgorfTsKKyNlbmRpZiAvKiBOQ1VSU0VTX09QQVFVRSAqLworCisvKgorICogVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gc3VwcG9ydCBldmVudHMuLi4KKyAqLworI2lmIEBOQ1VSU0VTX0VYVF9GVU5DU0AKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyNpZiAhZGVmaW5lZChfX0JFT1NfXykgfHwgZGVmaW5lZChfX0hBSUtVX18pCisgICAvKiBGaXggX25jX3RpbWVkX3dhaXQoKSBvbiBCRU9TLi4uICovCisjICBkZWZpbmUgTkNVUlNFU19FVkVOVF9WRVJTSU9OCTEKKyNlbmRpZgkvKiAhZGVmaW5lZChfX0JFT1NfXykgKi8KKworLyoKKyAqIEJpdHMgdG8gc2V0IGluIF9uY19ldmVudC5kYXRhLmZsYWdzCisgKi8KKyMgIGRlZmluZSBfTkNfRVZFTlRfVElNRU9VVF9NU0VDCTEKKyMgIGRlZmluZSBfTkNfRVZFTlRfRklMRQkJMgorIyAgZGVmaW5lIF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFCTIKKyMgIGlmIDAJCQkJCS8qIE5vdCBzdXBwb3J0ZWQgeWV0Li4uICovCisjICAgIGRlZmluZSBfTkNfRVZFTlRfRklMRV9XUklUQUJMRQk0CisjICAgIGRlZmluZSBfTkNfRVZFTlRfRklMRV9FWENFUFRJT04JOAorIyAgZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgdHlwZTsKKyAgICB1bmlvbgorICAgIHsKKwlsb25nIHRpbWVvdXRfbXNlYzsJLyogX05DX0VWRU5UX1RJTUVPVVRfTVNFQyAqLworCXN0cnVjdAorCXsKKwkgICAgdW5zaWduZWQgaW50IGZsYWdzOworCSAgICBpbnQgZmQ7CisJICAgIHVuc2lnbmVkIGludCByZXN1bHQ7CisJfSBmZXY7CQkJCS8qIF9OQ19FVkVOVF9GSUxFICovCisgICAgfSBkYXRhOworfSBfbmNfZXZlbnQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50IGNvdW50OworICAgIGludCByZXN1bHRfZmxhZ3M7CS8qIF9OQ19FVkVOVF9USU1FT1VUX01TRUMgb3IgX05DX0VWRU5UX0ZJTEVfUkVBREFCTEUgKi8KKyAgICBfbmNfZXZlbnQgKmV2ZW50c1sxXTsKK30gX25jX2V2ZW50bGlzdDsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2dldGNoX2V2ZW50cyhXSU5ET1cgKiwgX25jX2V2ZW50bGlzdCAqKTsJLyogZXhwZXJpbWVudGFsICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Z2V0bnN0cl9ldmVudHMoV0lORE9XICosY2hhciAqLGludCxfbmNfZXZlbnRsaXN0ICopOy8qIGV4cGVyaW1lbnRhbCAqLworCisjZW5kaWYgLyogTkNVUlNFU19XR0VUQ0hfRVZFTlRTICovCisjZW5kaWYgLyogTkNVUlNFU19FWFRfRlVOQ1MgKi8KKworLyoKKyAqIEdDQyAoYW5kIHNvbWUgb3RoZXIgY29tcGlsZXJzKSBkZWZpbmUgJ19fYXR0cmlidXRlX18nOyB3ZSdyZSB1c2luZyB0aGlzCisgKiBtYWNybyB0byBhbGVydCB0aGUgY29tcGlsZXIgdG8gZmxhZyBpbmNvbnNpc3RlbmNpZXMgaW4gcHJpbnRmL3NjYW5mLWxpa2UKKyAqIGZ1bmN0aW9uIGNhbGxzLiAgSnVzdCBpbiBjYXNlICdfX2F0dHJpYnV0ZV9fJyBpc24ndCBkZWZpbmVkLCBtYWtlIGEgZHVtbXkuCisgKiBPbGQgdmVyc2lvbnMgb2YgRysrIGRvIG5vdCBhY2NlcHQgaXQgYW55d2F5LCBhdCBsZWFzdCBub3QgY29uc2lzdGVudGx5IHdpdGgKKyAqIEdDQy4KKyAqLworI2lmICEoZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0dOVUdfXykgfHwgZGVmaW5lZChfX2F0dHJpYnV0ZV9fKSkKKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyhwKSAvKiBub3RoaW5nICovCisjZW5kaWYKKworLyoKKyAqIFdlIGNhbm5vdCBkZWZpbmUgdGhlc2UgaW4gbmN1cnNlc19jZmcuaCwgc2luY2UgdGhleSByZXF1aXJlIHBhcmFtZXRlcnMgdG8gYmUKKyAqIHBhc3NlZCAodGhhdCBpcyBub24tcG9ydGFibGUpLiAgSWYgeW91IGhhcHBlbiB0byBiZSB1c2luZyBnY2Mgd2l0aCB3YXJuaW5ncworICogZW5hYmxlZCwgZGVmaW5lCisgKglHQ0NfUFJJTlRGCisgKglHQ0NfU0NBTkYKKyAqIHRvIGltcHJvdmUgY2hlY2tpbmcgb2YgY2FsbHMgdG8gcHJpbnR3KCksIGV0Yy4KKyAqLworI2lmbmRlZiBHQ0NfUFJJTlRGTElLRQorI2lmIGRlZmluZWQoR0NDX1BSSU5URikgJiYgIWRlZmluZWQocHJpbnRmKQorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLGZtdCx2YXIpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIC8qbm90aGluZyovCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEdDQ19TQ0FORkxJS0UKKyNpZiBkZWZpbmVkKEdDQ19TQ0FORikgJiYgIWRlZmluZWQoc2NhbmYpCisjZGVmaW5lIEdDQ19TQ0FORkxJS0UoZm10LHZhcikgIF9fYXR0cmlidXRlX18oKGZvcm1hdChzY2FuZixmbXQsdmFyKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICAvKm5vdGhpbmcqLworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZglHQ0NfTk9SRVRVUk4KKyNkZWZpbmUJR0NDX05PUkVUVVJOIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjaWZuZGVmCUdDQ19VTlVTRUQKKyNkZWZpbmUJR0NDX1VOVVNFRCAvKiBub3RoaW5nICovCisjZW5kaWYKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMuICBUaGlzIGlzIHRoZSBjb21wbGV0ZSBYL09wZW4gQ3Vyc2VzIGxpc3Qgb2YgcmVxdWlyZWQKKyAqIGZ1bmN0aW9ucy4gIFRob3NlIG1hcmtlZCBgZ2VuZXJhdGVkJyB3aWxsIGhhdmUgc291cmNlcyBnZW5lcmF0ZWQgZnJvbSB0aGUKKyAqIG1hY3JvIGRlZmluaXRpb25zIGxhdGVyIGluIHRoaXMgZmlsZSwgaW4gb3JkZXIgdG8gc2F0aXNmeSBYUEc0LjIKKyAqIHJlcXVpcmVtZW50cy4KKyAqLworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRjaCAoY29uc3QgY2h0eXBlKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFkZGNobnN0ciAoY29uc3QgY2h0eXBlICosIGludCk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFkZGNoc3RyIChjb25zdCBjaHR5cGUgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRuc3RyIChjb25zdCBjaGFyICosIGludCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhZGRzdHIgKGNvbnN0IGNoYXIgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhdHRyb2ZmIChOQ1VSU0VTX0FUVFJfVCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhdHRyb24gKE5DVVJTRVNfQVRUUl9UKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGF0dHJzZXQgKE5DVVJTRVNfQVRUUl9UKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGF0dHJfZ2V0IChhdHRyX3QgKiwgc2hvcnQgKiwgdm9pZCAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBhdHRyX29mZiAoYXR0cl90LCB2b2lkICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYXR0cl9vbiAoYXR0cl90LCB2b2lkICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYXR0cl9zZXQgKGF0dHJfdCwgc2hvcnQsIHZvaWQgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGJhdWRyYXRlICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGJlZXAgICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGJrZ2QgKGNodHlwZSk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIGJrZ2RzZXQgKGNodHlwZSk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYm9yZGVyIChjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBib3ggKFdJTkRPVyAqLCBjaHR5cGUsIGNodHlwZSk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBjYW5fY2hhbmdlX2NvbG9yICh2b2lkKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgY2JyZWFrICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGNoZ2F0IChpbnQsIGF0dHJfdCwgc2hvcnQsIGNvbnN0IHZvaWQgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgY2xlYXIgKHZvaWQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGNsZWFyb2sgKFdJTkRPVyAqLGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBjbHJ0b2JvdCAodm9pZCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgY2xydG9lb2wgKHZvaWQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGNvbG9yX2NvbnRlbnQgKHNob3J0LHNob3J0KixzaG9ydCosc2hvcnQqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGNvbG9yX3NldCAoc2hvcnQsdm9pZCopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgQ09MT1JfUEFJUiAoaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBjb3B5d2luIChjb25zdCBXSU5ET1cqLFdJTkRPVyosaW50LGludCxpbnQsaW50LGludCxpbnQsaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGN1cnNfc2V0IChpbnQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZGVmX3Byb2dfbW9kZSAodm9pZCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGRlZl9zaGVsbF9tb2RlICh2b2lkKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZGVsYXlfb3V0cHV0IChpbnQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZGVsY2ggKHZvaWQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBkZWxzY3JlZW4gKFNDUkVFTiAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZGVsd2luIChXSU5ET1cgKik7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBkZWxldGVsbiAodm9pZCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBkZXJ3aW4gKFdJTkRPVyAqLGludCxpbnQsaW50LGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBkb3VwZGF0ZSAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopIGR1cHdpbiAoV0lORE9XICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBlY2hvICh2b2lkKTsJCQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBlY2hvY2hhciAoY29uc3QgY2h0eXBlKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGVyYXNlICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBlbmR3aW4gKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIpIGVyYXNlY2hhciAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgZmlsdGVyICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGZsYXNoICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGZsdXNoaW5wICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpIGdldGJrZ2QgKFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldGNoICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRuc3RyIChjaGFyICosIGludCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRzdHIgKGNoYXIgKik7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBnZXR3aW4gKEZJTEUgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGhhbGZkZWxheSAoaW50KTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBoYXNfY29sb3JzICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBoYXNfaWMgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGhhc19pbCAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBobGluZSAoY2h0eXBlLCBpbnQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBpZGNvayAoV0lORE9XICosIGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpZGxvayAoV0lORE9XICosIGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgaW1tZWRvayAoV0lORE9XICosIGJvb2wpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2h0eXBlKSBpbmNoICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbmNobnN0ciAoY2h0eXBlICosIGludCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbmNoc3RyIChjaHR5cGUgKik7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBpbml0c2NyICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluaXRfY29sb3IgKHNob3J0LHNob3J0LHNob3J0LHNob3J0KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluaXRfcGFpciAoc2hvcnQsc2hvcnQsc2hvcnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGlubnN0ciAoY2hhciAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5zY2ggKGNodHlwZSk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5zZGVsbG4gKGludCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5zZXJ0bG4gKHZvaWQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc25zdHIgKGNvbnN0IGNoYXIgKiwgaW50KTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc3N0ciAoY29uc3QgY2hhciAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc3RyIChjaGFyICopOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGludHJmbHVzaCAoV0lORE9XICosYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc2VuZHdpbiAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNfbGluZXRvdWNoZWQgKFdJTkRPVyAqLGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX3dpbnRvdWNoZWQgKFdJTkRPVyAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1QgY2hhciAqKSBrZXluYW1lIChpbnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGtleXBhZCAoV0lORE9XICosYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyKSBraWxsY2hhciAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBsZWF2ZW9rIChXSU5ET1cgKixib29sKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgbG9uZ25hbWUgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbWV0YSAoV0lORE9XICosYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG1vdmUgKGludCwgaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmFkZGNoIChpbnQsIGludCwgY29uc3QgY2h0eXBlKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZhZGRjaG5zdHIgKGludCwgaW50LCBjb25zdCBjaHR5cGUgKiwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmFkZGNoc3RyIChpbnQsIGludCwgY29uc3QgY2h0eXBlICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12YWRkbnN0ciAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmFkZHN0ciAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12Y2hnYXQgKGludCwgaW50LCBpbnQsIGF0dHJfdCwgc2hvcnQsIGNvbnN0IHZvaWQgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZjdXIgKGludCxpbnQsaW50LGludCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12ZGVsY2ggKGludCwgaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmRlcndpbiAoV0lORE9XICosIGludCwgaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmdldGNoIChpbnQsIGludCk7CQkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZnZXRuc3RyIChpbnQsIGludCwgY2hhciAqLCBpbnQpOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmdldHN0ciAoaW50LCBpbnQsIGNoYXIgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmhsaW5lIChpbnQsIGludCwgY2h0eXBlLCBpbnQpOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2h0eXBlKSBtdmluY2ggKGludCwgaW50KTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW5jaG5zdHIgKGludCwgaW50LCBjaHR5cGUgKiwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluY2hzdHIgKGludCwgaW50LCBjaHR5cGUgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW5uc3RyIChpbnQsIGludCwgY2hhciAqLCBpbnQpOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluc2NoIChpbnQsIGludCwgY2h0eXBlKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW5zbnN0ciAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluc3N0ciAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW5zdHIgKGludCwgaW50LCBjaGFyICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZwcmludHcgKGludCxpbnQsIGNvbnN0IGNoYXIgKiwuLi4pCQkvKiBpbXBsZW1lbnRlZCAqLworCQlHQ0NfUFJJTlRGTElLRSgzLDQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZzY2FudyAoaW50LGludCwgTkNVUlNFU19DT05TVCBjaGFyICosLi4uKQkvKiBpbXBsZW1lbnRlZCAqLworCQlHQ0NfU0NBTkZMSUtFKDMsNCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdnZsaW5lIChpbnQsIGludCwgY2h0eXBlLCBpbnQpOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndhZGRjaCAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjaHR5cGUpOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2FkZGNobnN0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjaHR5cGUgKiwgaW50KTsvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2FkZGNoc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNodHlwZSAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndhZGRuc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndhZGRzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2hhciAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndjaGdhdCAoV0lORE9XICosIGludCwgaW50LCBpbnQsIGF0dHJfdCwgc2hvcnQsIGNvbnN0IHZvaWQgKik7LyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndkZWxjaCAoV0lORE9XICosIGludCwgaW50KTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3Z2V0Y2ggKFdJTkRPVyAqLCBpbnQsIGludCk7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2dldG5zdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY2hhciAqLCBpbnQpOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2dldHN0ciAoV0lORE9XICosIGludCwgaW50LCBjaGFyICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2hsaW5lIChXSU5ET1cgKiwgaW50LCBpbnQsIGNodHlwZSwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbiAoV0lORE9XICosaW50LGludCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpIG12d2luY2ggKFdJTkRPVyAqLCBpbnQsIGludCk7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbmNobnN0ciAoV0lORE9XICosIGludCwgaW50LCBjaHR5cGUgKiwgaW50KTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbmNoc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNodHlwZSAqKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5uc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNoYXIgKiwgaW50KTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5zY2ggKFdJTkRPVyAqLCBpbnQsIGludCwgY2h0eXBlKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5zbnN0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjaGFyICosIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5zc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNoYXIgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d3ByaW50dyAoV0lORE9XKixpbnQsaW50LCBjb25zdCBjaGFyICosLi4uKQkvKiBpbXBsZW1lbnRlZCAqLworCQlHQ0NfUFJJTlRGTElLRSg0LDUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3c2NhbncgKFdJTkRPVyAqLGludCxpbnQsIE5DVVJTRVNfQ09OU1QgY2hhciAqLC4uLikJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1NDQU5GTElLRSg0LDUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3dmxpbmUgKFdJTkRPVyAqLGludCwgaW50LCBjaHR5cGUsIGludCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbmFwbXMgKGludCk7CQkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBuZXdwYWQgKGludCxpbnQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFNDUkVFTiAqKSBuZXd0ZXJtIChOQ1VSU0VTX0NPTlNUIGNoYXIgKixGSUxFICosRklMRSAqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikgbmV3d2luIChpbnQsaW50LGludCxpbnQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBubCAodm9pZCk7CQkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbm9jYnJlYWsgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbm9kZWxheSAoV0lORE9XICosYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG5vZWNobyAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBub25sICh2b2lkKTsJCQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgbm9xaWZsdXNoICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG5vcmF3ICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG5vdGltZW91dCAoV0lORE9XICosYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG92ZXJsYXkgKGNvbnN0IFdJTkRPVyosV0lORE9XICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG92ZXJ3cml0ZSAoY29uc3QgV0lORE9XKixXSU5ET1cgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcGFpcl9jb250ZW50IChzaG9ydCxzaG9ydCosc2hvcnQqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBQQUlSX05VTUJFUiAoaW50KTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBwZWNob2NoYXIgKFdJTkRPVyAqLCBjb25zdCBjaHR5cGUpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHBub3V0cmVmcmVzaCAoV0lORE9XKixpbnQsaW50LGludCxpbnQsaW50LGludCk7LyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHByZWZyZXNoIChXSU5ET1cgKixpbnQsaW50LGludCxpbnQsaW50LGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBwcmludHcgKGNvbnN0IGNoYXIgKiwuLi4pCQkJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1BSSU5URkxJS0UoMSwyKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHB1dHdpbiAoV0lORE9XICosIEZJTEUgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBxaWZsdXNoICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHJhdyAodm9pZCk7CQkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcmVkcmF3d2luIChXSU5ET1cgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByZWZyZXNoICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByZXNldHR5ICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHJlc2V0X3Byb2dfbW9kZSAodm9pZCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHJlc2V0X3NoZWxsX21vZGUgKHZvaWQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByaXBvZmZsaW5lIChpbnQsIGludCAoKikoV0lORE9XICosIGludCkpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2F2ZXR0eSAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzY2FudyAoTkNVUlNFU19DT05TVCBjaGFyICosLi4uKQkJLyogaW1wbGVtZW50ZWQgKi8KKwkJR0NDX1NDQU5GTElLRSgxLDIpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2NyX2R1bXAgKGNvbnN0IGNoYXIgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNjcl9pbml0IChjb25zdCBjaGFyICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzY3JsIChpbnQpOwkJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzY3JvbGwgKFdJTkRPVyAqKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzY3JvbGxvayAoV0lORE9XICosYm9vbCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNjcl9yZXN0b3JlIChjb25zdCBjaGFyICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzY3Jfc2V0IChjb25zdCBjaGFyICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzZXRzY3JyZWcgKGludCxpbnQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikgc2V0X3Rlcm0gKFNDUkVFTiAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX2F0dHJvZmYgKGNvbnN0IGNodHlwZSk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19hdHRyX29mZiAoY29uc3QgYXR0cl90LCB2b2lkICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfYXR0cm9uIChjb25zdCBjaHR5cGUpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfYXR0cl9vbiAoYXR0cl90LHZvaWQqKTsJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19hdHRyc2V0IChjb25zdCBjaHR5cGUpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYXR0cl90KSBzbGtfYXR0ciAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfYXR0cl9zZXQgKGNvbnN0IGF0dHJfdCxzaG9ydCx2b2lkKik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfY2xlYXIgKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc2xrX2NvbG9yIChzaG9ydCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfaW5pdCAoaW50KTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHNsa19sYWJlbCAoaW50KTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19ub3V0cmVmcmVzaCAodm9pZCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19yZWZyZXNoICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19yZXN0b3JlICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHNsa19zZXQgKGludCxjb25zdCBjaGFyICosaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfdG91Y2ggKHZvaWQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgc3RhbmRvdXQgKHZvaWQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHN0YW5kZW5kICh2b2lkKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzdGFydF9jb2xvciAodm9pZCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopIHN1YnBhZCAoV0lORE9XICosIGludCwgaW50LCBpbnQsIGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopIHN1YndpbiAoV0lORE9XICosIGludCwgaW50LCBpbnQsIGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzeW5jb2sgKFdJTkRPVyAqLCBib29sKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkgdGVybWF0dHJzICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRlcm1uYW1lICh2b2lkKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSB0aW1lb3V0IChpbnQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRvdWNobGluZSAoV0lORE9XICosIGludCwgaW50KTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdG91Y2h3aW4gKFdJTkRPVyAqKTsJCQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0eXBlYWhlYWQgKGludCk7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB1bmdldGNoIChpbnQpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdW50b3VjaHdpbiAoV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIHVzZV9lbnYgKGJvb2wpOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdmlkYXR0ciAoY2h0eXBlKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZpZHB1dHMgKGNodHlwZSwgaW50ICgqKShpbnQpKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB2bGluZSAoY2h0eXBlLCBpbnQpOwkJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZ3cHJpbnR3IChXSU5ET1cgKiwgY29uc3QgY2hhciAqLHZhX2xpc3QpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdndfcHJpbnR3IChXSU5ET1cgKiwgY29uc3QgY2hhciAqLHZhX2xpc3QpOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZ3c2NhbncgKFdJTkRPVyAqLCBOQ1VSU0VTX0NPTlNUIGNoYXIgKix2YV9saXN0KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZ3X3NjYW53IChXSU5ET1cgKiwgTkNVUlNFU19DT05TVCBjaGFyICosdmFfbGlzdCk7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2FkZGNoIChXSU5ET1cgKiwgY29uc3QgY2h0eXBlKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YWRkY2huc3RyIChXSU5ET1cgKixjb25zdCBjaHR5cGUgKixpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2FkZGNoc3RyIChXSU5ET1cgKixjb25zdCBjaHR5cGUgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhZGRuc3RyIChXSU5ET1cgKixjb25zdCBjaGFyICosaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhZGRzdHIgKFdJTkRPVyAqLGNvbnN0IGNoYXIgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhdHRyb24gKFdJTkRPVyAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2F0dHJvZmYgKFdJTkRPVyAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2F0dHJzZXQgKFdJTkRPVyAqLCBpbnQpOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2F0dHJfZ2V0IChXSU5ET1cgKiwgYXR0cl90ICosIHNob3J0ICosIHZvaWQgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2F0dHJfb24gKFdJTkRPVyAqLCBhdHRyX3QsIHZvaWQgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2F0dHJfb2ZmIChXSU5ET1cgKiwgYXR0cl90LCB2b2lkICopOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2F0dHJfc2V0IChXSU5ET1cgKiwgYXR0cl90LCBzaG9ydCwgdm9pZCAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YmtnZCAoV0lORE9XICosIGNodHlwZSk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSB3YmtnZHNldCAoV0lORE9XICosY2h0eXBlKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2JvcmRlciAoV0lORE9XICosY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSxjaHR5cGUsY2h0eXBlLGNodHlwZSk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Y2hnYXQgKFdJTkRPVyAqLCBpbnQsIGF0dHJfdCwgc2hvcnQsIGNvbnN0IHZvaWQgKik7LyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdjbGVhciAoV0lORE9XICopOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2NscnRvYm90IChXSU5ET1cgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdjbHJ0b2VvbCAoV0lORE9XICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Y29sb3Jfc2V0IChXSU5ET1cqLHNob3J0LHZvaWQqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgd2N1cnN5bmN1cCAoV0lORE9XICopOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3ZGVsY2ggKFdJTkRPVyAqKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdkZWxldGVsbiAoV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2VjaG9jaGFyIChXSU5ET1cgKiwgY29uc3QgY2h0eXBlKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3ZXJhc2UgKFdJTkRPVyAqKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRjaCAoV0lORE9XICopOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2dldG5zdHIgKFdJTkRPVyAqLGNoYXIgKixpbnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRzdHIgKFdJTkRPVyAqLCBjaGFyICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2hsaW5lIChXSU5ET1cgKiwgY2h0eXBlLCBpbnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaHR5cGUpIHdpbmNoIChXSU5ET1cgKik7CQkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5jaG5zdHIgKFdJTkRPVyAqLCBjaHR5cGUgKiwgaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5jaHN0ciAoV0lORE9XICosIGNodHlwZSAqKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2lubnN0ciAoV0lORE9XICosIGNoYXIgKiwgaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5zY2ggKFdJTkRPVyAqLCBjaHR5cGUpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5zZGVsbG4gKFdJTkRPVyAqLGludCk7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdpbnNlcnRsbiAoV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luc25zdHIgKFdJTkRPVyAqLCBjb25zdCBjaGFyICosaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdpbnNzdHIgKFdJTkRPVyAqLCBjb25zdCBjaGFyICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5zdHIgKFdJTkRPVyAqLCBjaGFyICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd21vdmUgKFdJTkRPVyAqLGludCxpbnQpOwkJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3bm91dHJlZnJlc2ggKFdJTkRPVyAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3ByaW50dyAoV0lORE9XICosIGNvbnN0IGNoYXIgKiwuLi4pCQkvKiBpbXBsZW1lbnRlZCAqLworCQlHQ0NfUFJJTlRGTElLRSgyLDMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3JlZHJhd2xuIChXSU5ET1cgKixpbnQsaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3cmVmcmVzaCAoV0lORE9XICopOwkJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3NjYW53IChXSU5ET1cgKiwgTkNVUlNFU19DT05TVCBjaGFyICosLi4uKQkvKiBpbXBsZW1lbnRlZCAqLworCQlHQ0NfU0NBTkZMSUtFKDIsMyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3c2NybCAoV0lORE9XICosaW50KTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3NldHNjcnJlZyAoV0lORE9XICosaW50LGludCk7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3N0YW5kb3V0IChXSU5ET1cgKik7CQkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3c3RhbmRlbmQgKFdJTkRPVyAqKTsJCQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSB3c3luY2Rvd24gKFdJTkRPVyAqKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIHdzeW5jdXAgKFdJTkRPVyAqKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSB3dGltZW91dCAoV0lORE9XICosaW50KTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd3RvdWNobG4gKFdJTkRPVyAqLGludCxpbnQsaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3dmxpbmUgKFdJTkRPVyAqLGNodHlwZSxpbnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KKworLyoKKyAqIFRoZXNlIGFyZSBhbHNvIGRlY2xhcmVkIGluIDx0ZXJtLmg+OgorICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0aWdldGZsYWcgKE5DVVJTRVNfQ09OU1QgY2hhciAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0aWdldG51bSAoTkNVUlNFU19DT05TVCBjaGFyICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRpZ2V0c3RyIChOQ1VSU0VTX0NPTlNUIGNoYXIgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgcHV0cCAoY29uc3QgY2hhciAqKTsJCQkJLyogaW1wbGVtZW50ZWQgKi8KKworI2lmIE5DVVJTRVNfVFBBUk1fVkFSQVJHUworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdHBhcm0gKE5DVVJTRVNfQ09OU1QgY2hhciAqLCAuLi4pOwkvKiBzcGVjaWFsICovCisjZWxzZQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgdHBhcm0gKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBsb25nLGxvbmcsbG9uZyxsb25nLGxvbmcsbG9uZyxsb25nLGxvbmcsbG9uZyk7CS8qIHNwZWNpYWwgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRwYXJtX3ZhcmFyZ3MgKE5DVVJTRVNfQ09OU1QgY2hhciAqLCAuLi4pOwkvKiBzcGVjaWFsICovCisjZW5kaWYKKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGluIFgvT3BlbiwgYnV0IHdlIHVzZSB0aGVtIGluIG1hY3JvIGRlZmluaXRpb25zOgorICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRhdHRycyAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0Y3VyeCAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0Y3VyeSAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0YmVneCAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0YmVneSAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0bWF4eCAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0bWF4eSAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0cGFyeCAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZ2V0cGFyeSAoY29uc3QgV0lORE9XICopOwkJCS8qIGdlbmVyYXRlZCAqLworCisvKgorICogdmlkX2F0dHIoKSB3YXMgaW1wbGVtZW50ZWQgb3JpZ2luYWxseSBiYXNlZCBvbiBhIGRyYWZ0IG9mIFgvT3BlbiBjdXJzZXMuCisgKi8KKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2RlZmluZSB2aWRfYXR0cihhLHBhaXIsb3B0cykgdmlkYXR0cihhKQorI2VuZGlmCisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGV4dGVuc2lvbnMgLSBub3QgaW4gWC9PcGVuIEN1cnNlcy4KKyAqLworI2lmIEBOQ1VSU0VTX0VYVF9GVU5DU0AKKyN1bmRlZiAgTkNVUlNFU19FWFRfRlVOQ1MKKyNkZWZpbmUgTkNVUlNFU19FWFRfRlVOQ1MgQE5DVVJTRVNfUEFUQ0hACit0eXBlZGVmIGludCAoKk5DVVJTRVNfV0lORE9XX0NCKShXSU5ET1cgKiwgdm9pZCAqKTsKK3R5cGVkZWYgaW50ICgqTkNVUlNFU19TQ1JFRU5fQ0IpKFNDUkVFTiAqLCB2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX3Rlcm1fcmVzaXplZCAoaW50LCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikga2V5Ym91bmQgKGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIGN1cnNlc192ZXJzaW9uICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFzc3VtZV9kZWZhdWx0X2NvbG9ycyAoaW50LCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgZGVmaW5lX2tleSAoY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkga2V5X2RlZmluZWQgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBrZXlvayAoaW50LCBib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHJlc2l6ZV90ZXJtIChpbnQsIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSByZXNpemV0ZXJtIChpbnQsIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzZXRfZXNjZGVsYXkgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzZXRfdGFic2l6ZSAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHVzZV9kZWZhdWx0X2NvbG9ycyAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB1c2VfZXh0ZW5kZWRfbmFtZXMgKGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdXNlX2xlZ2FjeV9jb2RpbmcgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB1c2Vfc2NyZWVuIChTQ1JFRU4gKiwgTkNVUlNFU19TQ1JFRU5fQ0IsIHZvaWQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB1c2Vfd2luZG93IChXSU5ET1cgKiwgTkNVUlNFU19XSU5ET1dfQ0IsIHZvaWQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3cmVzaXplIChXSU5ET1cgKiwgaW50LCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIG5vZmlsdGVyKHZvaWQpOworCisvKgorICogVGhlc2UgZXh0ZW5zaW9ucyBwcm92aWRlIGFjY2VzcyB0byBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdGhlIFdJTkRPVyBldmVuCisgKiB3aGVuIE5DVVJTRVNfT1BBUVVFIGlzIHNldDoKKyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSB3Z2V0cGFyZW50IChjb25zdCBXSU5ET1cgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX2NsZWFyZWQgKGNvbnN0IFdJTkRPVyAqKTsJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNfaWRjb2sgKGNvbnN0IFdJTkRPVyAqKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX2lkbG9rIChjb25zdCBXSU5ET1cgKik7CQkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19pbW1lZG9rIChjb25zdCBXSU5ET1cgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX2tleXBhZCAoY29uc3QgV0lORE9XICopOwkJLyogZ2VuZXJhdGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgaXNfbGVhdmVvayAoY29uc3QgV0lORE9XICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19ub2RlbGF5IChjb25zdCBXSU5ET1cgKik7CS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIGlzX25vdGltZW91dCAoY29uc3QgV0lORE9XICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19zY3JvbGxvayAoY29uc3QgV0lORE9XICopOwkvKiBnZW5lcmF0ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBpc19zeW5jb2sgKGNvbnN0IFdJTkRPVyAqKTsJCS8qIGdlbmVyYXRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2dldHNjcnJlZyAoY29uc3QgV0lORE9XICosIGludCAqLCBpbnQgKik7IC8qIGdlbmVyYXRlZCAqLworCisjZWxzZQorI2RlZmluZSBjdXJzZXNfdmVyc2lvbigpIE5DVVJTRVNfVkVSU0lPTgorI2VuZGlmCisKKy8qIGF0dHJpYnV0ZXMgKi8KKworI2RlZmluZSBOQ1VSU0VTX0FUVFJfU0hJRlQgICAgICAgOAorI2RlZmluZSBOQ1VSU0VTX0JJVFMobWFzayxzaGlmdCkgKChtYXNrKSA8PCAoKHNoaWZ0KSArIE5DVVJTRVNfQVRUUl9TSElGVCkpCisKKyNkZWZpbmUgQV9OT1JNQUwJKEBjZl9jdl8xVUxAIC0gQGNmX2N2XzFVTEApCisjZGVmaW5lIEFfQVRUUklCVVRFUwlOQ1VSU0VTX0JJVFMofihAY2ZfY3ZfMVVMQCAtIEBjZl9jdl8xVUxAKSwwKQorI2RlZmluZSBBX0NIQVJURVhUCShOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMCkgLSBAY2ZfY3ZfMVVMQCkKKyNkZWZpbmUgQV9DT0xPUgkJTkNVUlNFU19CSVRTKCgoQGNmX2N2XzFVTEApIDw8IDgpIC0gQGNmX2N2XzFVTEAsMCkKKyNkZWZpbmUgQV9TVEFORE9VVAlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsOCkKKyNkZWZpbmUgQV9VTkRFUkxJTkUJTkNVUlNFU19CSVRTKEBjZl9jdl8xVUxALDkpCisjZGVmaW5lIEFfUkVWRVJTRQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTApCisjZGVmaW5lIEFfQkxJTksJCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCwxMSkKKyNkZWZpbmUgQV9ESU0JCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCwxMikKKyNkZWZpbmUgQV9CT0xECQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTMpCisjZGVmaW5lIEFfQUxUQ0hBUlNFVAlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTQpCisjZGVmaW5lIEFfSU5WSVMJCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCwxNSkKKyNkZWZpbmUgQV9QUk9URUNUCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCwxNikKKyNkZWZpbmUgQV9IT1JJWk9OVEFMCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCwxNykKKyNkZWZpbmUgQV9MRUZUCQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTgpCisjZGVmaW5lIEFfTE9XCQlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMTkpCisjZGVmaW5lIEFfUklHSFQJCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCwyMCkKKyNkZWZpbmUgQV9UT1AJCU5DVVJTRVNfQklUUyhAY2ZfY3ZfMVVMQCwyMSkKKyNkZWZpbmUgQV9WRVJUSUNBTAlOQ1VSU0VTX0JJVFMoQGNmX2N2XzFVTEAsMjIpCisKKy8qCisgKiBNb3N0IG9mIHRoZSBwc2V1ZG8gZnVuY3Rpb25zIGFyZSBtYWNyb3MgdGhhdCBlaXRoZXIgcHJvdmlkZSBjb21wYXRpYmlsaXR5CisgKiB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGN1cnNlcywgb3IgcHJvdmlkZSBpbmxpbmUgZnVuY3Rpb25hbGl0eSB0byBpbXByb3ZlCisgKiBwZXJmb3JtYW5jZS4KKyAqLworCisvKgorICogVGhlc2UgcHNldWRvIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGltcGxlbWVudGVkIGFzIG1hY3JvczoKKyAqLworCisjZGVmaW5lIGdldHl4KHdpbix5LHgpICAgCSh5ID0gZ2V0Y3VyeSh3aW4pLCB4ID0gZ2V0Y3VyeCh3aW4pKQorI2RlZmluZSBnZXRiZWd5eCh3aW4seSx4KQkoeSA9IGdldGJlZ3kod2luKSwgeCA9IGdldGJlZ3god2luKSkKKyNkZWZpbmUgZ2V0bWF4eXgod2luLHkseCkJKHkgPSBnZXRtYXh5KHdpbiksIHggPSBnZXRtYXh4KHdpbikpCisjZGVmaW5lIGdldHBhcnl4KHdpbix5LHgpCSh5ID0gZ2V0cGFyeSh3aW4pLCB4ID0gZ2V0cGFyeCh3aW4pKQorCisjZGVmaW5lIGdldHN5eCh5LHgpIGRvIHsgaWYgKG5ld3NjcikgeyBcCisJCQkgICAgIGlmIChpc19sZWF2ZW9rKG5ld3NjcikpIFwKKwkJCQkoeSkgPSAoeCkgPSAtMTsgXAorCQkJICAgICBlbHNlIFwKKwkJCQkgZ2V0eXgobmV3c2NyLCh5KSwgKHgpKTsgXAorCQkJfSBcCisJCSAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgc2V0c3l4KHkseCkgZG8geyBpZiAobmV3c2NyKSB7IFwKKwkJCSAgICBpZiAoKHkpID09IC0xICYmICh4KSA9PSAtMSkgXAorCQkJCWxlYXZlb2sobmV3c2NyLCBUUlVFKTsgXAorCQkJICAgIGVsc2UgeyBcCisJCQkJbGVhdmVvayhuZXdzY3IsIEZBTFNFKTsgXAorCQkJCXdtb3ZlKG5ld3NjciwgKHkpLCAoeCkpOyBcCisJCQkgICAgfSBcCisJCQl9IFwKKwkJICAgIH0gd2hpbGUoMCkKKworI2lmbmRlZiBOQ1VSU0VTX05PTUFDUk9TCisKKy8qCisgKiBUaGVzZSBtaXNjZWxsYW5lb3VzIHBzZXVkbyBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5OgorICovCisKKyNkZWZpbmUgd2dldHN0cih3LCBzKQkJd2dldG5zdHIodywgcywgLTEpCisjZGVmaW5lIGdldG5zdHIocywgbikJCXdnZXRuc3RyKHN0ZHNjciwgcywgbikKKworI2RlZmluZSBzZXR0ZXJtKHRlcm0pCQlzZXR1cHRlcm0odGVybSwgMSwgKGludCAqKTApCisKKyNkZWZpbmUgZml4dGVybSgpCQlyZXNldF9wcm9nX21vZGUoKQorI2RlZmluZSByZXNldHRlcm0oKQkJcmVzZXRfc2hlbGxfbW9kZSgpCisjZGVmaW5lIHNhdmV0ZXJtKCkJCWRlZl9wcm9nX21vZGUoKQorI2RlZmluZSBjcm1vZGUoKQkJY2JyZWFrKCkKKyNkZWZpbmUgbm9jcm1vZGUoKQkJbm9jYnJlYWsoKQorI2RlZmluZSBnZXR0bW9kZSgpCisKKy8qIEl0IHNlZW1zIG9sZGVyIFNZU1YgY3Vyc2VzIHZlcnNpb25zIGRlZmluZSB0aGVzZSAqLworI2lmICFOQ1VSU0VTX09QQVFVRQorI2RlZmluZSBnZXRhdHRycyh3aW4pCQkoKHdpbikgPyAod2luKS0+X2F0dHJzIDogQV9OT1JNQUwpCisjZGVmaW5lIGdldGN1cngod2luKQkJKCh3aW4pID8gKHdpbiktPl9jdXJ4IDogRVJSKQorI2RlZmluZSBnZXRjdXJ5KHdpbikJCSgod2luKSA/ICh3aW4pLT5fY3VyeSA6IEVSUikKKyNkZWZpbmUgZ2V0YmVneCh3aW4pCQkoKHdpbikgPyAod2luKS0+X2JlZ3ggOiBFUlIpCisjZGVmaW5lIGdldGJlZ3kod2luKQkJKCh3aW4pID8gKHdpbiktPl9iZWd5IDogRVJSKQorI2RlZmluZSBnZXRtYXh4KHdpbikJCSgod2luKSA/ICgod2luKS0+X21heHggKyAxKSA6IEVSUikKKyNkZWZpbmUgZ2V0bWF4eSh3aW4pCQkoKHdpbikgPyAoKHdpbiktPl9tYXh5ICsgMSkgOiBFUlIpCisjZGVmaW5lIGdldHBhcngod2luKQkJKCh3aW4pID8gKHdpbiktPl9wYXJ4IDogRVJSKQorI2RlZmluZSBnZXRwYXJ5KHdpbikJCSgod2luKSA/ICh3aW4pLT5fcGFyeSA6IEVSUikKKyNlbmRpZiAvKiBOQ1VSU0VTX09QQVFVRSAqLworCisjZGVmaW5lIHdzdGFuZG91dCh3aW4pICAgICAgCSh3YXR0cnNldCh3aW4sQV9TVEFORE9VVCkpCisjZGVmaW5lIHdzdGFuZGVuZCh3aW4pICAgICAgCSh3YXR0cnNldCh3aW4sQV9OT1JNQUwpKQorCisjZGVmaW5lIHdhdHRyb24od2luLGF0KQkJd2F0dHJfb24od2luLCBOQ1VSU0VTX0NBU1QoYXR0cl90LCBhdCksIE5VTEwpCisjZGVmaW5lIHdhdHRyb2ZmKHdpbixhdCkJd2F0dHJfb2ZmKHdpbiwgTkNVUlNFU19DQVNUKGF0dHJfdCwgYXQpLCBOVUxMKQorCisjaWYgIU5DVVJTRVNfT1BBUVVFCisjaWYgZGVmaW5lZChfWE9QRU5fU09VUkNFX0VYVEVOREVEKSAmJiBATkNVUlNFU19FWFRfQ09MT1JTQAorI2RlZmluZSB3YXR0cnNldCh3aW4sYXQpCSgod2luKS0+X2NvbG9yID0gUEFJUl9OVU1CRVIoYXQpLCBcCisJCQkJICh3aW4pLT5fYXR0cnMgPSAoYXQpKQorI2Vsc2UKKyNkZWZpbmUgd2F0dHJzZXQod2luLGF0KQkoKHdpbiktPl9hdHRycyA9IChhdCkpCisjZW5kaWYKKyNlbmRpZiAvKiBOQ1VSU0VTX09QQVFVRSAqLworCisjZGVmaW5lIHNjcm9sbCh3aW4pCQl3c2NybCh3aW4sMSkKKworI2RlZmluZSB0b3VjaHdpbih3aW4pCQl3dG91Y2hsbigod2luKSwgMCwgZ2V0bWF4eSh3aW4pLCAxKQorI2RlZmluZSB0b3VjaGxpbmUod2luLCBzLCBjKQl3dG91Y2hsbigod2luKSwgcywgYywgMSkKKyNkZWZpbmUgdW50b3VjaHdpbih3aW4pCQl3dG91Y2hsbigod2luKSwgMCwgZ2V0bWF4eSh3aW4pLCAwKQorCisjZGVmaW5lIGJveCh3aW4sIHYsIGgpCQl3Ym9yZGVyKHdpbiwgdiwgdiwgaCwgaCwgMCwgMCwgMCwgMCkKKyNkZWZpbmUgYm9yZGVyKGxzLCBycywgdHMsIGJzLCB0bCwgdHIsIGJsLCBicikJd2JvcmRlcihzdGRzY3IsIGxzLCBycywgdHMsIGJzLCB0bCwgdHIsIGJsLCBicikKKyNkZWZpbmUgaGxpbmUoY2gsIG4pCQl3aGxpbmUoc3Rkc2NyLCBjaCwgbikKKyNkZWZpbmUgdmxpbmUoY2gsIG4pCQl3dmxpbmUoc3Rkc2NyLCBjaCwgbikKKworI2RlZmluZSB3aW5zdHIodywgcykJCXdpbm5zdHIodywgcywgLTEpCisjZGVmaW5lIHdpbmNoc3RyKHcsIHMpCQl3aW5jaG5zdHIodywgcywgLTEpCisjZGVmaW5lIHdpbnNzdHIodywgcykJCXdpbnNuc3RyKHcsIHMsIC0xKQorCisjaWYgIU5DVVJTRVNfT1BBUVVFCisjZGVmaW5lIHJlZHJhd3dpbih3aW4pCQl3cmVkcmF3bG4od2luLCAwLCAod2luKS0+X21heHkrMSkKKyNlbmRpZiAvKiBOQ1VSU0VTX09QQVFVRSAqLworCisjZGVmaW5lIHdhZGRzdHIod2luLHN0cikJd2FkZG5zdHIod2luLHN0ciwtMSkKKyNkZWZpbmUgd2FkZGNoc3RyKHdpbixzdHIpCXdhZGRjaG5zdHIod2luLHN0ciwtMSkKKworLyoKKyAqIFRoZXNlIGFwcGx5IHRvIHRoZSBmaXJzdCAyNTYgY29sb3IgcGFpcnMuCisgKi8KKyNkZWZpbmUgQ09MT1JfUEFJUihuKQlOQ1VSU0VTX0JJVFMobiwgMCkKKyNkZWZpbmUgUEFJUl9OVU1CRVIoYSkJKE5DVVJTRVNfQ0FTVChpbnQsKCgoYSkgJiBBX0NPTE9SKSA+PiBOQ1VSU0VTX0FUVFJfU0hJRlQpKSkKKworLyoKKyAqIHBzZXVkbyBmdW5jdGlvbnMgZm9yIHN0YW5kYXJkIHNjcmVlbgorICovCisKKyNkZWZpbmUgYWRkY2goY2gpCQl3YWRkY2goc3Rkc2NyLGNoKQorI2RlZmluZSBhZGRjaG5zdHIoc3RyLG4pCXdhZGRjaG5zdHIoc3Rkc2NyLHN0cixuKQorI2RlZmluZSBhZGRjaHN0cihzdHIpCQl3YWRkY2hzdHIoc3Rkc2NyLHN0cikKKyNkZWZpbmUgYWRkbnN0cihzdHIsbikJCXdhZGRuc3RyKHN0ZHNjcixzdHIsbikKKyNkZWZpbmUgYWRkc3RyKHN0cikJCXdhZGRuc3RyKHN0ZHNjcixzdHIsLTEpCisjZGVmaW5lIGF0dHJvZmYoYXQpCQl3YXR0cm9mZihzdGRzY3IsYXQpCisjZGVmaW5lIGF0dHJvbihhdCkJCXdhdHRyb24oc3Rkc2NyLGF0KQorI2RlZmluZSBhdHRyc2V0KGF0KQkJd2F0dHJzZXQoc3Rkc2NyLGF0KQorI2RlZmluZSBhdHRyX2dldChhcCxjcCxvKQl3YXR0cl9nZXQoc3Rkc2NyLGFwLGNwLG8pCisjZGVmaW5lIGF0dHJfb2ZmKGEsbykJCXdhdHRyX29mZihzdGRzY3IsYSxvKQorI2RlZmluZSBhdHRyX29uKGEsbykJCXdhdHRyX29uKHN0ZHNjcixhLG8pCisjZGVmaW5lIGF0dHJfc2V0KGEsYyxvKQkJd2F0dHJfc2V0KHN0ZHNjcixhLGMsbykKKyNkZWZpbmUgYmtnZChjaCkJCXdia2dkKHN0ZHNjcixjaCkKKyNkZWZpbmUgYmtnZHNldChjaCkJCXdia2dkc2V0KHN0ZHNjcixjaCkKKyNkZWZpbmUgY2hnYXQobixhLGMsbykJCXdjaGdhdChzdGRzY3IsbixhLGMsbykKKyNkZWZpbmUgY2xlYXIoKQkJCXdjbGVhcihzdGRzY3IpCisjZGVmaW5lIGNscnRvYm90KCkJCXdjbHJ0b2JvdChzdGRzY3IpCisjZGVmaW5lIGNscnRvZW9sKCkJCXdjbHJ0b2VvbChzdGRzY3IpCisjZGVmaW5lIGNvbG9yX3NldChjLG8pCQl3Y29sb3Jfc2V0KHN0ZHNjcixjLG8pCisjZGVmaW5lIGRlbGNoKCkJCQl3ZGVsY2goc3Rkc2NyKQorI2RlZmluZSBkZWxldGVsbigpCQl3aW5zZGVsbG4oc3Rkc2NyLC0xKQorI2RlZmluZSBlY2hvY2hhcihjKQkJd2VjaG9jaGFyKHN0ZHNjcixjKQorI2RlZmluZSBlcmFzZSgpCQkJd2VyYXNlKHN0ZHNjcikKKyNkZWZpbmUgZ2V0Y2goKQkJCXdnZXRjaChzdGRzY3IpCisjZGVmaW5lIGdldHN0cihzdHIpCQl3Z2V0c3RyKHN0ZHNjcixzdHIpCisjZGVmaW5lIGluY2goKQkJCXdpbmNoKHN0ZHNjcikKKyNkZWZpbmUgaW5jaG5zdHIocyxuKQkJd2luY2huc3RyKHN0ZHNjcixzLG4pCisjZGVmaW5lIGluY2hzdHIocykJCXdpbmNoc3RyKHN0ZHNjcixzKQorI2RlZmluZSBpbm5zdHIocyxuKQkJd2lubnN0cihzdGRzY3IscyxuKQorI2RlZmluZSBpbnNjaChjKQkJd2luc2NoKHN0ZHNjcixjKQorI2RlZmluZSBpbnNkZWxsbihuKQkJd2luc2RlbGxuKHN0ZHNjcixuKQorI2RlZmluZSBpbnNlcnRsbigpCQl3aW5zZGVsbG4oc3Rkc2NyLDEpCisjZGVmaW5lIGluc25zdHIocyxuKQkJd2luc25zdHIoc3Rkc2NyLHMsbikKKyNkZWZpbmUgaW5zc3RyKHMpCQl3aW5zc3RyKHN0ZHNjcixzKQorI2RlZmluZSBpbnN0cihzKQkJd2luc3RyKHN0ZHNjcixzKQorI2RlZmluZSBtb3ZlKHkseCkJCXdtb3ZlKHN0ZHNjcix5LHgpCisjZGVmaW5lIHJlZnJlc2goKQkJd3JlZnJlc2goc3Rkc2NyKQorI2RlZmluZSBzY3JsKG4pCQkJd3Njcmwoc3Rkc2NyLG4pCisjZGVmaW5lIHNldHNjcnJlZyh0LGIpCQl3c2V0c2NycmVnKHN0ZHNjcix0LGIpCisjZGVmaW5lIHN0YW5kZW5kKCkJCXdzdGFuZGVuZChzdGRzY3IpCisjZGVmaW5lIHN0YW5kb3V0KCkJCXdzdGFuZG91dChzdGRzY3IpCisjZGVmaW5lIHRpbWVvdXQoZGVsYXkpCQl3dGltZW91dChzdGRzY3IsZGVsYXkpCisjZGVmaW5lIHdkZWxldGVsbih3aW4pCQl3aW5zZGVsbG4od2luLC0xKQorI2RlZmluZSB3aW5zZXJ0bG4od2luKQkJd2luc2RlbGxuKHdpbiwxKQorCisvKgorICogbXYgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBtdndhZGRjaCh3aW4seSx4LGNoKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdhZGRjaCh3aW4sY2gpKQorI2RlZmluZSBtdndhZGRjaG5zdHIod2luLHkseCxzdHIsbikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdhZGRjaG5zdHIod2luLHN0cixuKSkKKyNkZWZpbmUgbXZ3YWRkY2hzdHIod2luLHkseCxzdHIpCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3YWRkY2huc3RyKHdpbixzdHIsLTEpKQorI2RlZmluZSBtdndhZGRuc3RyKHdpbix5LHgsc3RyLG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3YWRkbnN0cih3aW4sc3RyLG4pKQorI2RlZmluZSBtdndhZGRzdHIod2luLHkseCxzdHIpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2FkZG5zdHIod2luLHN0ciwtMSkpCisjZGVmaW5lIG12d2RlbGNoKHdpbix5LHgpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2RlbGNoKHdpbikpCisjZGVmaW5lIG12d2NoZ2F0KHdpbix5LHgsbixhLGMsbykJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdjaGdhdCh3aW4sbixhLGMsbykpCisjZGVmaW5lIG12d2dldGNoKHdpbix5LHgpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2dldGNoKHdpbikpCisjZGVmaW5lIG12d2dldG5zdHIod2luLHkseCxzdHIsbikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdnZXRuc3RyKHdpbixzdHIsbikpCisjZGVmaW5lIG12d2dldHN0cih3aW4seSx4LHN0cikJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3Z2V0c3RyKHdpbixzdHIpKQorI2RlZmluZSBtdndobGluZSh3aW4seSx4LGMsbikJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aGxpbmUod2luLGMsbikpCisjZGVmaW5lIG12d2luY2god2luLHkseCkJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBOQ1VSU0VTX0NBU1QoY2h0eXBlLCBFUlIpIDogd2luY2god2luKSkKKyNkZWZpbmUgbXZ3aW5jaG5zdHIod2luLHkseCxzLG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5jaG5zdHIod2luLHMsbikpCisjZGVmaW5lIG12d2luY2hzdHIod2luLHkseCxzKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbmNoc3RyKHdpbixzKSkKKyNkZWZpbmUgbXZ3aW5uc3RyKHdpbix5LHgscyxuKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbm5zdHIod2luLHMsbikpCisjZGVmaW5lIG12d2luc2NoKHdpbix5LHgsYykJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5zY2god2luLGMpKQorI2RlZmluZSBtdndpbnNuc3RyKHdpbix5LHgscyxuKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbnNuc3RyKHdpbixzLG4pKQorI2RlZmluZSBtdndpbnNzdHIod2luLHkseCxzKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbnNzdHIod2luLHMpKQorI2RlZmluZSBtdndpbnN0cih3aW4seSx4LHMpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2luc3RyKHdpbixzKSkKKyNkZWZpbmUgbXZ3dmxpbmUod2luLHkseCxjLG4pCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd3ZsaW5lKHdpbixjLG4pKQorCisjZGVmaW5lIG12YWRkY2goeSx4LGNoKQkJCW12d2FkZGNoKHN0ZHNjcix5LHgsY2gpCisjZGVmaW5lIG12YWRkY2huc3RyKHkseCxzdHIsbikJCW12d2FkZGNobnN0cihzdGRzY3IseSx4LHN0cixuKQorI2RlZmluZSBtdmFkZGNoc3RyKHkseCxzdHIpCQltdndhZGRjaHN0cihzdGRzY3IseSx4LHN0cikKKyNkZWZpbmUgbXZhZGRuc3RyKHkseCxzdHIsbikJCW12d2FkZG5zdHIoc3Rkc2NyLHkseCxzdHIsbikKKyNkZWZpbmUgbXZhZGRzdHIoeSx4LHN0cikJCW12d2FkZHN0cihzdGRzY3IseSx4LHN0cikKKyNkZWZpbmUgbXZjaGdhdCh5LHgsbixhLGMsbykJCW12d2NoZ2F0KHN0ZHNjcix5LHgsbixhLGMsbykKKyNkZWZpbmUgbXZkZWxjaCh5LHgpCQkJbXZ3ZGVsY2goc3Rkc2NyLHkseCkKKyNkZWZpbmUgbXZnZXRjaCh5LHgpCQkJbXZ3Z2V0Y2goc3Rkc2NyLHkseCkKKyNkZWZpbmUgbXZnZXRuc3RyKHkseCxzdHIsbikJCW12d2dldG5zdHIoc3Rkc2NyLHkseCxzdHIsbikKKyNkZWZpbmUgbXZnZXRzdHIoeSx4LHN0cikJCW12d2dldHN0cihzdGRzY3IseSx4LHN0cikKKyNkZWZpbmUgbXZobGluZSh5LHgsYyxuKQkJbXZ3aGxpbmUoc3Rkc2NyLHkseCxjLG4pCisjZGVmaW5lIG12aW5jaCh5LHgpCQkJbXZ3aW5jaChzdGRzY3IseSx4KQorI2RlZmluZSBtdmluY2huc3RyKHkseCxzLG4pCQltdndpbmNobnN0cihzdGRzY3IseSx4LHMsbikKKyNkZWZpbmUgbXZpbmNoc3RyKHkseCxzKQkJbXZ3aW5jaHN0cihzdGRzY3IseSx4LHMpCisjZGVmaW5lIG12aW5uc3RyKHkseCxzLG4pCQltdndpbm5zdHIoc3Rkc2NyLHkseCxzLG4pCisjZGVmaW5lIG12aW5zY2goeSx4LGMpCQkJbXZ3aW5zY2goc3Rkc2NyLHkseCxjKQorI2RlZmluZSBtdmluc25zdHIoeSx4LHMsbikJCW12d2luc25zdHIoc3Rkc2NyLHkseCxzLG4pCisjZGVmaW5lIG12aW5zc3RyKHkseCxzKQkJCW12d2luc3N0cihzdGRzY3IseSx4LHMpCisjZGVmaW5lIG12aW5zdHIoeSx4LHMpCQkJbXZ3aW5zdHIoc3Rkc2NyLHkseCxzKQorI2RlZmluZSBtdnZsaW5lKHkseCxjLG4pCQltdnd2bGluZShzdGRzY3IseSx4LGMsbikKKworLyoKKyAqIFNvbWUgd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IHRoZSBleHRlbnNpb25zLgorICovCisjaWYgIU5DVVJTRVNfT1BBUVVFCisjZGVmaW5lIGdldGJrZ2Qod2luKSAgICAgICAgICAgICAgICAgICAgKCh3aW4pLT5fYmtnZCkKKyNlbmRpZiAvKiBOQ1VSU0VTX09QQVFVRSAqLworCisjZGVmaW5lIHNsa19hdHRyX29mZihhLHYpCQkoKHYpID8gRVJSIDogc2xrX2F0dHJvZmYoYSkpCisjZGVmaW5lIHNsa19hdHRyX29uKGEsdikJCSgodikgPyBFUlIgOiBzbGtfYXR0cm9uKGEpKQorCisjaWYgIU5DVVJTRVNfT1BBUVVFCisjaWYgZGVmaW5lZChfWE9QRU5fU09VUkNFX0VYVEVOREVEKSAmJiBATkNVUlNFU19FWFRfQ09MT1JTQAorI2RlZmluZSB3YXR0cl9zZXQod2luLGEscCxvcHRzKQkJKCh3aW4pLT5fYXR0cnMgPSAoKGEpICYgfkFfQ09MT1IpLCBcCisJCQkJCSAod2luKS0+X2NvbG9yID0gKHApLCBcCisJCQkJCSBPSykKKyNkZWZpbmUgd2F0dHJfZ2V0KHdpbixhLHAsb3B0cykJCSgodm9pZCkoKGEpICE9ICh2b2lkICopMCAmJiAoKihhKSA9ICh3aW4pLT5fYXR0cnMpKSwgXAorCQkJCQkgKHZvaWQpKChwKSAhPSAodm9pZCAqKTAgJiYgKCoocCkgPSAod2luKS0+X2NvbG9yKSksIFwKKwkJCQkJIE9LKQorI2Vsc2UKKyNkZWZpbmUgd2F0dHJfc2V0KHdpbixhLHAsb3B0cykJCSgod2luKS0+X2F0dHJzID0gKCgoYSkgJiB+QV9DT0xPUikgfCBDT0xPUl9QQUlSKHApKSwgT0spCisjZGVmaW5lIHdhdHRyX2dldCh3aW4sYSxwLG9wdHMpCQkoKHZvaWQpKChhKSAhPSAodm9pZCAqKTAgJiYgKCooYSkgPSAod2luKS0+X2F0dHJzKSksIFwKKwkJCQkJICh2b2lkKSgocCkgIT0gKHZvaWQgKikwICYmICgqKHApID0gUEFJUl9OVU1CRVIoKHdpbiktPl9hdHRycykpKSwgXAorCQkJCQkgT0spCisjZW5kaWYKKyNlbmRpZiAvKiBOQ1VSU0VTX09QQVFVRSAqLworCisvKgorICogWC9PcGVuIGN1cnNlcyBkZXByZWNhdGVzIFNWcjQgdndwcmludHcvdndzY2Fudywgd2hpY2ggYXJlIHN1cHBvc2VkIHRvIHVzZQorICogdmFyYXJncy5oLiAgSXQgYWRkcyBuZXcgY2FsbHMgdndfcHJpbnR3L3Z3X3NjYW53LCB3aGljaCBhcmUgc3VwcG9zZWQgdG8KKyAqIHVzZSBQT1NJWCBzdGRhcmcuaC4gIFRoZSBuY3Vyc2VzIHZlcnNpb25zIG9mIHZ3cHJpbnR3L3Z3c2NhbncgYWxyZWFkeQorICogdXNlIHN0ZGFyZy5oLCBzby4uLgorICovCisjZGVmaW5lIHZ3X3ByaW50dwkJdndwcmludHcKKyNkZWZpbmUgdndfc2NhbncJCXZ3c2NhbncKKworLyoKKyAqIEV4cG9ydCBmYWxsYmFjayBmdW5jdGlvbiBmb3IgdXNlIGluIEMrKyBiaW5kaW5nLgorICovCisjaWYgIUBIQVZFX1ZTU0NBTkZACisjZGVmaW5lIHZzc2NhbmYoYSxiLGMpIF9uY192c3NjYW5mKGEsYixjKQorTkNVUlNFU19FWFBPUlQoaW50KSB2c3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKyNlbmRpZgorCisvKgorICogVGhlc2UgbWFjcm9zIGFyZSBleHRlbnNpb25zIC0gbm90IGluIFgvT3BlbiBDdXJzZXMuCisgKi8KKyNpZiBATkNVUlNFU19FWFRfRlVOQ1NACisjaWYgIU5DVVJTRVNfT1BBUVVFCisjZGVmaW5lIGlzX2NsZWFyZWQod2luKQkJKCh3aW4pLT5fY2xlYXIpCisjZGVmaW5lIGlzX2lkY29rKHdpbikJCSgod2luKS0+X2lkY29rKQorI2RlZmluZSBpc19pZGxvayh3aW4pCQkoKHdpbiktPl9pZGxvaykKKyNkZWZpbmUgaXNfaW1tZWRvayh3aW4pCQkoKHdpbiktPl9pbW1lZCkKKyNkZWZpbmUgaXNfa2V5cGFkKHdpbikJCSgod2luKS0+X3VzZV9rZXlwYWQpCisjZGVmaW5lIGlzX2xlYXZlb2sod2luKQkJKCh3aW4pLT5fbGVhdmVvaykKKyNkZWZpbmUgaXNfbm9kZWxheSh3aW4pCQkoKHdpbiktPl9kZWxheSA9PSAwKQorI2RlZmluZSBpc19ub3RpbWVvdXQod2luKQkoKHdpbiktPl9ub3RpbWVvdXQpCisjZGVmaW5lIGlzX3Njcm9sbG9rKHdpbikJKCh3aW4pLT5fc2Nyb2xsKQorI2RlZmluZSBpc19zeW5jb2sod2luKQkJKCh3aW4pLT5fc3luYykKKyNkZWZpbmUgd2dldHBhcmVudCh3aW4pCQkoKHdpbikgPyAod2luKS0+X3BhcmVudCA6IDApCisjZGVmaW5lIHdnZXRzY3JyZWcod2luLHQsYikJKCh3aW4pID8gKCoodCkgPSAod2luKS0+X3JlZ3RvcCwgKihiKSA9ICh3aW4pLT5fcmVnYm90dG9tLCBPSykgOiBFUlIpCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogTkNVUlNFU19OT01BQ1JPUyAqLworCisvKgorICogUHVibGljIHZhcmlhYmxlcy4KKyAqCisgKiBOb3RlczoKKyAqCWEuIEVTQ0RFTEFZIHdhcyBhbiB1bmRvY3VtZW50ZWQgZmVhdHVyZSB1bmRlciBBSVggY3Vyc2VzLgorICoJICAgSXQgZ2l2ZXMgdGhlIEVTQyBleHBpcmUgdGltZSBpbiBtaWxsaXNlY29uZHMuCisgKgliLiB0dHl0eXBlIGlzIG5lZWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICovCisjaWYgQGNmX2N2X2VuYWJsZV9yZWVudHJhbnRACisKK05DVVJTRVNfV1JBUFBFRF9WQVIoV0lORE9XICosIGN1cnNjcik7CitOQ1VSU0VTX1dSQVBQRURfVkFSKFdJTkRPVyAqLCBuZXdzY3IpOworTkNVUlNFU19XUkFQUEVEX1ZBUihXSU5ET1cgKiwgc3Rkc2NyKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoY2hhciAqLCB0dHl0eXBlKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoaW50LCBDT0xPUlMpOworTkNVUlNFU19XUkFQUEVEX1ZBUihpbnQsIENPTE9SX1BBSVJTKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoaW50LCBDT0xTKTsKK05DVVJTRVNfV1JBUFBFRF9WQVIoaW50LCBFU0NERUxBWSk7CitOQ1VSU0VTX1dSQVBQRURfVkFSKGludCwgTElORVMpOworTkNVUlNFU19XUkFQUEVEX1ZBUihpbnQsIFRBQlNJWkUpOworCisjZGVmaW5lIGN1cnNjciAgICAgIE5DVVJTRVNfUFVCTElDX1ZBUihjdXJzY3IoKSkKKyNkZWZpbmUgbmV3c2NyICAgICAgTkNVUlNFU19QVUJMSUNfVkFSKG5ld3NjcigpKQorI2RlZmluZSBzdGRzY3IgICAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoc3Rkc2NyKCkpCisjZGVmaW5lIHR0eXR5cGUgICAgIE5DVVJTRVNfUFVCTElDX1ZBUih0dHl0eXBlKCkpCisjZGVmaW5lIENPTE9SUyAgICAgIE5DVVJTRVNfUFVCTElDX1ZBUihDT0xPUlMoKSkKKyNkZWZpbmUgQ09MT1JfUEFJUlMgTkNVUlNFU19QVUJMSUNfVkFSKENPTE9SX1BBSVJTKCkpCisjZGVmaW5lIENPTFMgICAgICAgIE5DVVJTRVNfUFVCTElDX1ZBUihDT0xTKCkpCisjZGVmaW5lIEVTQ0RFTEFZICAgIE5DVVJTRVNfUFVCTElDX1ZBUihFU0NERUxBWSgpKQorI2RlZmluZSBMSU5FUyAgICAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoTElORVMoKSkKKyNkZWZpbmUgVEFCU0laRSAgICAgTkNVUlNFU19QVUJMSUNfVkFSKFRBQlNJWkUoKSkKKworI2Vsc2UKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihXSU5ET1cgKikgY3Vyc2NyOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihXSU5ET1cgKikgbmV3c2NyOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihXSU5ET1cgKikgc3Rkc2NyOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihjaGFyKSB0dHl0eXBlW107CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgQ09MT1JTOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIENPTE9SX1BBSVJTOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIENPTFM7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgRVNDREVMQVk7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgTElORVM7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgVEFCU0laRTsKKworI2VuZGlmCisKKy8qCisgKiBQc2V1ZG8tY2hhcmFjdGVyIHRva2VucyBvdXRzaWRlIEFTQ0lJIHJhbmdlLiAgVGhlIGN1cnNlcyB3Z2V0Y2goKSBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gYW55IGdpdmVuIG9uZSBvZiB0aGVzZSBvbmx5IGlmIHRoZSBjb3JyZXNwb25kaW5nIGstIGNhcGFiaWxpdHkKKyAqIGlzIGRlZmluZWQgaW4geW91ciB0ZXJtaW5hbCdzIHRlcm1pbmZvIGVudHJ5LgorICoKKyAqIFNvbWUga2V5cyAoS0VZX0ExLCBldGMpIGFyZSBhcnJhbmdlZCBsaWtlIHRoaXM6CisgKglhMSAgICAgdXAgICAgYTMKKyAqCWxlZnQgICBiMiAgICByaWdodAorICoJYzEgICAgIGRvd24gIGMzCisgKgorICogQSBmZXcga2V5IGNvZGVzIGRvIG5vdCBkZXBlbmQgdXBvbiB0aGUgdGVybWluZm8gZW50cnkuCisgKi8KKyNkZWZpbmUgS0VZX0NPREVfWUVTCTA0MDAJCS8qIEEgd2NoYXJfdCBjb250YWlucyBhIGtleSBjb2RlICovCisjZGVmaW5lIEtFWV9NSU4JCTA0MDEJCS8qIE1pbmltdW0gY3Vyc2VzIGtleSAqLworI2RlZmluZSBLRVlfQlJFQUsJMDQwMQkJLyogQnJlYWsga2V5ICh1bnJlbGlhYmxlKSAqLworI2RlZmluZSBLRVlfU1JFU0VUCTA1MzAJCS8qIFNvZnQgKHBhcnRpYWwpIHJlc2V0ICh1bnJlbGlhYmxlKSAqLworI2RlZmluZSBLRVlfUkVTRVQJMDUzMQkJLyogUmVzZXQgb3IgaGFyZCByZXNldCAodW5yZWxpYWJsZSkgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvY3Vyc2VzLnRhaWwgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL2N1cnNlcy50YWlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZjdjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL2N1cnNlcy50YWlsCkBAIC0wLDAgKzEsMTc5IEBACisvKiAkSWQ6IGN1cnNlcy50YWlsLHYgMS4xNiAyMDA4LzA3LzA1IDIwOjIwOjM4IHRvbSBFeHAgJCAqLworLyoKKyAqIHZpbGU6Y21vZGU6CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBuY3Vyc2VzLCBkZXNpZ25lZCB0byBiZSBhcHBlbmRlZCBhZnRlciBjdXJzZXMuaC5pbgorICogKHNlZSB0aGF0IGZpbGUgZm9yIHRoZSByZWxldmFudCBjb3B5cmlnaHQpLgorICovCisKKy8qIG1vdXNlIGludGVyZmFjZSAqLworCisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID4gMQorI2RlZmluZSBOQ1VSU0VTX01PVVNFX01BU0soYixtKSAoKG0pIDw8ICgoKGIpIC0gMSkgKiA1KSkKKyNlbHNlCisjZGVmaW5lIE5DVVJTRVNfTU9VU0VfTUFTSyhiLG0pICgobSkgPDwgKCgoYikgLSAxKSAqIDYpKQorI2VuZGlmCisKKyNkZWZpbmUJTkNVUlNFU19CVVRUT05fUkVMRUFTRUQJMDAxTAorI2RlZmluZQlOQ1VSU0VTX0JVVFRPTl9QUkVTU0VECTAwMkwKKyNkZWZpbmUJTkNVUlNFU19CVVRUT05fQ0xJQ0tFRAkwMDRMCisjZGVmaW5lCU5DVVJTRVNfRE9VQkxFX0NMSUNLRUQJMDEwTAorI2RlZmluZQlOQ1VSU0VTX1RSSVBMRV9DTElDS0VECTAyMEwKKyNkZWZpbmUJTkNVUlNFU19SRVNFUlZFRF9FVkVOVAkwNDBMCisKKy8qIGV2ZW50IG1hc2tzICovCisjZGVmaW5lCUJVVFRPTjFfUkVMRUFTRUQJTkNVUlNFU19NT1VTRV9NQVNLKDEsIE5DVVJTRVNfQlVUVE9OX1JFTEVBU0VEKQorI2RlZmluZQlCVVRUT04xX1BSRVNTRUQJCU5DVVJTRVNfTU9VU0VfTUFTSygxLCBOQ1VSU0VTX0JVVFRPTl9QUkVTU0VEKQorI2RlZmluZQlCVVRUT04xX0NMSUNLRUQJCU5DVVJTRVNfTU9VU0VfTUFTSygxLCBOQ1VSU0VTX0JVVFRPTl9DTElDS0VEKQorI2RlZmluZQlCVVRUT04xX0RPVUJMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSygxLCBOQ1VSU0VTX0RPVUJMRV9DTElDS0VEKQorI2RlZmluZQlCVVRUT04xX1RSSVBMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSygxLCBOQ1VSU0VTX1RSSVBMRV9DTElDS0VEKQorCisjZGVmaW5lCUJVVFRPTjJfUkVMRUFTRUQJTkNVUlNFU19NT1VTRV9NQVNLKDIsIE5DVVJTRVNfQlVUVE9OX1JFTEVBU0VEKQorI2RlZmluZQlCVVRUT04yX1BSRVNTRUQJCU5DVVJTRVNfTU9VU0VfTUFTSygyLCBOQ1VSU0VTX0JVVFRPTl9QUkVTU0VEKQorI2RlZmluZQlCVVRUT04yX0NMSUNLRUQJCU5DVVJTRVNfTU9VU0VfTUFTSygyLCBOQ1VSU0VTX0JVVFRPTl9DTElDS0VEKQorI2RlZmluZQlCVVRUT04yX0RPVUJMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSygyLCBOQ1VSU0VTX0RPVUJMRV9DTElDS0VEKQorI2RlZmluZQlCVVRUT04yX1RSSVBMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSygyLCBOQ1VSU0VTX1RSSVBMRV9DTElDS0VEKQorCisjZGVmaW5lCUJVVFRPTjNfUkVMRUFTRUQJTkNVUlNFU19NT1VTRV9NQVNLKDMsIE5DVVJTRVNfQlVUVE9OX1JFTEVBU0VEKQorI2RlZmluZQlCVVRUT04zX1BSRVNTRUQJCU5DVVJTRVNfTU9VU0VfTUFTSygzLCBOQ1VSU0VTX0JVVFRPTl9QUkVTU0VEKQorI2RlZmluZQlCVVRUT04zX0NMSUNLRUQJCU5DVVJTRVNfTU9VU0VfTUFTSygzLCBOQ1VSU0VTX0JVVFRPTl9DTElDS0VEKQorI2RlZmluZQlCVVRUT04zX0RPVUJMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSygzLCBOQ1VSU0VTX0RPVUJMRV9DTElDS0VEKQorI2RlZmluZQlCVVRUT04zX1RSSVBMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSygzLCBOQ1VSU0VTX1RSSVBMRV9DTElDS0VEKQorCisjZGVmaW5lCUJVVFRPTjRfUkVMRUFTRUQJTkNVUlNFU19NT1VTRV9NQVNLKDQsIE5DVVJTRVNfQlVUVE9OX1JFTEVBU0VEKQorI2RlZmluZQlCVVRUT040X1BSRVNTRUQJCU5DVVJTRVNfTU9VU0VfTUFTSyg0LCBOQ1VSU0VTX0JVVFRPTl9QUkVTU0VEKQorI2RlZmluZQlCVVRUT040X0NMSUNLRUQJCU5DVVJTRVNfTU9VU0VfTUFTSyg0LCBOQ1VSU0VTX0JVVFRPTl9DTElDS0VEKQorI2RlZmluZQlCVVRUT040X0RPVUJMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSyg0LCBOQ1VSU0VTX0RPVUJMRV9DTElDS0VEKQorI2RlZmluZQlCVVRUT040X1RSSVBMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSyg0LCBOQ1VSU0VTX1RSSVBMRV9DTElDS0VEKQorCisvKgorICogSW4gMzIgYml0cyB0aGUgdmVyc2lvbi0xIHNjaGVtZSBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBzcGFjZSBmb3IgYSA1dGgKKyAqIGJ1dHRvbiwgdW5sZXNzIHdlIGNob29zZSB0byBjaGFuZ2UgdGhlIEFCSSBieSBvbWl0dGluZyB0aGUgcmVzZXJ2ZWQtZXZlbnRzLgorICovCisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID4gMQorCisjZGVmaW5lCUJVVFRPTjVfUkVMRUFTRUQJTkNVUlNFU19NT1VTRV9NQVNLKDUsIE5DVVJTRVNfQlVUVE9OX1JFTEVBU0VEKQorI2RlZmluZQlCVVRUT041X1BSRVNTRUQJCU5DVVJTRVNfTU9VU0VfTUFTSyg1LCBOQ1VSU0VTX0JVVFRPTl9QUkVTU0VEKQorI2RlZmluZQlCVVRUT041X0NMSUNLRUQJCU5DVVJTRVNfTU9VU0VfTUFTSyg1LCBOQ1VSU0VTX0JVVFRPTl9DTElDS0VEKQorI2RlZmluZQlCVVRUT041X0RPVUJMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSyg1LCBOQ1VSU0VTX0RPVUJMRV9DTElDS0VEKQorI2RlZmluZQlCVVRUT041X1RSSVBMRV9DTElDS0VECU5DVVJTRVNfTU9VU0VfTUFTSyg1LCBOQ1VSU0VTX1RSSVBMRV9DTElDS0VEKQorCisjZGVmaW5lCUJVVFRPTl9DVFJMCQlOQ1VSU0VTX01PVVNFX01BU0soNiwgMDAwMUwpCisjZGVmaW5lCUJVVFRPTl9TSElGVAkJTkNVUlNFU19NT1VTRV9NQVNLKDYsIDAwMDJMKQorI2RlZmluZQlCVVRUT05fQUxUCQlOQ1VSU0VTX01PVVNFX01BU0soNiwgMDAwNEwpCisjZGVmaW5lCVJFUE9SVF9NT1VTRV9QT1NJVElPTglOQ1VSU0VTX01PVVNFX01BU0soNiwgMDAxMEwpCisKKyNlbHNlCisKKyNkZWZpbmUJQlVUVE9OMV9SRVNFUlZFRF9FVkVOVAlOQ1VSU0VTX01PVVNFX01BU0soMSwgTkNVUlNFU19SRVNFUlZFRF9FVkVOVCkKKyNkZWZpbmUJQlVUVE9OMl9SRVNFUlZFRF9FVkVOVAlOQ1VSU0VTX01PVVNFX01BU0soMiwgTkNVUlNFU19SRVNFUlZFRF9FVkVOVCkKKyNkZWZpbmUJQlVUVE9OM19SRVNFUlZFRF9FVkVOVAlOQ1VSU0VTX01PVVNFX01BU0soMywgTkNVUlNFU19SRVNFUlZFRF9FVkVOVCkKKyNkZWZpbmUJQlVUVE9ONF9SRVNFUlZFRF9FVkVOVAlOQ1VSU0VTX01PVVNFX01BU0soNCwgTkNVUlNFU19SRVNFUlZFRF9FVkVOVCkKKworI2RlZmluZQlCVVRUT05fQ1RSTAkJTkNVUlNFU19NT1VTRV9NQVNLKDUsIDAwMDFMKQorI2RlZmluZQlCVVRUT05fU0hJRlQJCU5DVVJTRVNfTU9VU0VfTUFTSyg1LCAwMDAyTCkKKyNkZWZpbmUJQlVUVE9OX0FMVAkJTkNVUlNFU19NT1VTRV9NQVNLKDUsIDAwMDRMKQorI2RlZmluZQlSRVBPUlRfTU9VU0VfUE9TSVRJT04JTkNVUlNFU19NT1VTRV9NQVNLKDUsIDAwMTBMKQorCisjZW5kaWYKKworI2RlZmluZQlBTExfTU9VU0VfRVZFTlRTCShSRVBPUlRfTU9VU0VfUE9TSVRJT04gLSAxKQorCisvKiBtYWNyb3MgdG8gZXh0cmFjdCBzaW5nbGUgZXZlbnQtYml0cyBmcm9tIG1hc2tzICovCisjZGVmaW5lCUJVVFRPTl9SRUxFQVNFKGUsIHgpCQkoKGUpICYgTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAwMSkpCisjZGVmaW5lCUJVVFRPTl9QUkVTUyhlLCB4KQkJKChlKSAmIE5DVVJTRVNfTU9VU0VfTUFTSyh4LCAwMDIpKQorI2RlZmluZQlCVVRUT05fQ0xJQ0soZSwgeCkJCSgoZSkgJiBOQ1VSU0VTX01PVVNFX01BU0soeCwgMDA0KSkKKyNkZWZpbmUJQlVUVE9OX0RPVUJMRV9DTElDSyhlLCB4KQkoKGUpICYgTkNVUlNFU19NT1VTRV9NQVNLKHgsIDAxMCkpCisjZGVmaW5lCUJVVFRPTl9UUklQTEVfQ0xJQ0soZSwgeCkJKChlKSAmIE5DVVJTRVNfTU9VU0VfTUFTSyh4LCAwMjApKQorI2RlZmluZQlCVVRUT05fUkVTRVJWRURfRVZFTlQoZSwgeCkJKChlKSAmIE5DVVJTRVNfTU9VU0VfTUFTSyh4LCAwNDApKQorCit0eXBlZGVmIHN0cnVjdAoreworICAgIHNob3J0IGlkOwkJLyogSUQgdG8gZGlzdGluZ3Vpc2ggbXVsdGlwbGUgZGV2aWNlcyAqLworICAgIGludCB4LCB5LCB6OwkvKiBldmVudCBjb29yZGluYXRlcyAoY2hhcmFjdGVyLWNlbGwpICovCisgICAgbW1hc2tfdCBic3RhdGU7CS8qIGJ1dHRvbiBzdGF0ZSBiaXRzICovCit9CitNRVZFTlQ7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldG1vdXNlIChNRVZFTlQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB1bmdldG1vdXNlIChNRVZFTlQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQobW1hc2tfdCkgbW91c2VtYXNrIChtbWFza190LCBtbWFza190ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIHdlbmNsb3NlIChjb25zdCBXSU5ET1cgKiwgaW50LCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbW91c2VpbnRlcnZhbCAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSB3bW91c2VfdHJhZm8gKGNvbnN0IFdJTkRPVyosIGludCosIGludCosIGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIG1vdXNlX3RyYWZvIChpbnQqLCBpbnQqLCBib29sKTsgICAgICAgICAgICAgIC8qIGdlbmVyYXRlZCAqLworCisjZGVmaW5lIG1vdXNlX3RyYWZvKHkseCx0b19zY3JlZW4pIHdtb3VzZV90cmFmbyhzdGRzY3IseSx4LHRvX3NjcmVlbikKKworLyogb3RoZXIgbm9uLVhTSSBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbWNwcmludCAoY2hhciAqLCBpbnQpOwkvKiBkaXJlY3QgZGF0YSB0byBwcmludGVyICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBoYXNfa2V5IChpbnQpOwkJLyogZG8gd2UgaGF2ZSBnaXZlbiBrZXk/ICovCisKKy8qIERlYnVnZ2luZyA6IHVzZSB3aXRoIGxpYm5jdXJzZXNfZy5hICovCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfdHJhY2VmIChjb25zdCBjaGFyICosIC4uLikgR0NDX1BSSU5URkxJS0UoMSwyKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfdHJhY2VkdW1wIChjb25zdCBjaGFyICosIFdJTkRPVyAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF90cmFjZWF0dHIgKGF0dHJfdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfdHJhY2VhdHRyMiAoaW50LCBjaHR5cGUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3RyYWNlYml0cyAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfdHJhY2VjaGFyIChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX3RyYWNlY2h0eXBlIChjaHR5cGUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX3RyYWNlY2h0eXBlMiAoaW50LCBjaHR5cGUpOworI2lmZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgX3RyYWNlY2hfdAkJX3RyYWNlY2NoYXJfdAorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX3RyYWNlY2NoYXJfdCAoY29uc3QgY2NoYXJfdCAqKTsKKyNkZWZpbmUgX3RyYWNlY2hfdDIJCV90cmFjZWNjaGFyX3QyCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfdHJhY2VjY2hhcl90MiAoaW50LCBjb25zdCBjY2hhcl90ICopOworI2Vsc2UKKyNkZWZpbmUgX3RyYWNlY2hfdAkJX3RyYWNlY2h0eXBlCisjZGVmaW5lIF90cmFjZWNoX3QyCQlfdHJhY2VjaHR5cGUyCisjZW5kaWYKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF90cmFjZW1vdXNlIChjb25zdCBNRVZFTlQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgdHJhY2UgKGNvbnN0IHVuc2lnbmVkIGludCk7CisKKy8qIHRyYWNlIG1hc2tzICovCisjZGVmaW5lIFRSQUNFX0RJU0FCTEUJMHgwMDAwCS8qIHR1cm4gb2ZmIHRyYWNpbmcgKi8KKyNkZWZpbmUgVFJBQ0VfVElNRVMJMHgwMDAxCS8qIHRyYWNlIHVzZXIgYW5kIHN5c3RlbSB0aW1lcyBvZiB1cGRhdGVzICovCisjZGVmaW5lIFRSQUNFX1RQVVRTCTB4MDAwMgkvKiB0cmFjZSB0cHV0cyBjYWxscyAqLworI2RlZmluZSBUUkFDRV9VUERBVEUJMHgwMDA0CS8qIHRyYWNlIHVwZGF0ZSBhY3Rpb25zLCBvbGQgJiBuZXcgc2NyZWVucyAqLworI2RlZmluZSBUUkFDRV9NT1ZFCTB4MDAwOAkvKiB0cmFjZSBjdXJzb3IgbW92ZXMgYW5kIHNjcm9sbHMgKi8KKyNkZWZpbmUgVFJBQ0VfQ0hBUlBVVAkweDAwMTAJLyogdHJhY2UgYWxsIGNoYXJhY3RlciBvdXRwdXRzICovCisjZGVmaW5lIFRSQUNFX09SRElOQVJZCTB4MDAxRgkvKiB0cmFjZSBhbGwgdXBkYXRlIGFjdGlvbnMgKi8KKyNkZWZpbmUgVFJBQ0VfQ0FMTFMJMHgwMDIwCS8qIHRyYWNlIGFsbCBjdXJzZXMgY2FsbHMgKi8KKyNkZWZpbmUgVFJBQ0VfVklSVFBVVAkweDAwNDAJLyogdHJhY2UgdmlydHVhbCBjaGFyYWN0ZXIgcHV0cyAqLworI2RlZmluZSBUUkFDRV9JRVZFTlQJMHgwMDgwCS8qIHRyYWNlIGxvdy1sZXZlbCBpbnB1dCBwcm9jZXNzaW5nICovCisjZGVmaW5lIFRSQUNFX0JJVFMJMHgwMTAwCS8qIHRyYWNlIHN0YXRlIG9mIFRUWSBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgVFJBQ0VfSUNBTExTCTB4MDIwMAkvKiB0cmFjZSBpbnRlcm5hbC9uZXN0ZWQgY2FsbHMgKi8KKyNkZWZpbmUgVFJBQ0VfQ0NBTExTCTB4MDQwMAkvKiB0cmFjZSBwZXItY2hhcmFjdGVyIGNhbGxzICovCisjZGVmaW5lIFRSQUNFX0RBVEFCQVNFCTB4MDgwMAkvKiB0cmFjZSByZWFkL3dyaXRlIG9mIHRlcm1pbmZvL3Rlcm1jYXAgZGF0YSAqLworI2RlZmluZSBUUkFDRV9BVFRSUwkweDEwMDAJLyogdHJhY2UgYXR0cmlidXRlIHVwZGF0ZXMgKi8KKworI2RlZmluZSBUUkFDRV9TSElGVAkxMwkvKiBudW1iZXIgb2YgYml0cyBpbiB0aGUgdHJhY2UgbWFza3MgKi8KKyNkZWZpbmUgVFJBQ0VfTUFYSU1VTQkoKDEgPDwgVFJBQ0VfU0hJRlQpIC0gMSkgLyogbWF4aW11bSB0cmFjZSBsZXZlbCAqLworCisjaWYgZGVmaW5lZChUUkFDRSkgfHwgZGVmaW5lZChOQ1VSU0VTX1RFU1QpCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX29wdGltaXplX2VuYWJsZTsJCS8qIGVuYWJsZSBvcHRpbWl6YXRpb25zICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfdmlzYnVmIChjb25zdCBjaGFyICopOworI2RlZmluZSBPUFRJTUlaRV9NVkNVUgkJMHgwMQkvKiBjdXJzb3IgbW92ZW1lbnQgb3B0aW1pemF0aW9uICovCisjZGVmaW5lIE9QVElNSVpFX0hBU0hNQVAJMHgwMgkvKiBkaWZmIGhhc2hpbmcgdG8gZGV0ZWN0IHNjcm9sbHMgKi8KKyNkZWZpbmUgT1BUSU1JWkVfU0NST0xMCQkweDA0CS8qIHNjcm9sbCBvcHRpbWl6YXRpb24gKi8KKyNkZWZpbmUgT1BUSU1JWkVfQUxMCQkweGZmCS8qIGVuYWJsZSBhbGwgb3B0aW1pemF0aW9ucyAoZGZsdCkgKi8KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKworI2lmbmRlZiBOQ1VSU0VTX05PTUFDUk9TCisKKy8qIHRoZXNlIG5hbWVzIGNvbmZsaWN0IHdpdGggU1RMICovCisjdW5kZWYgYm94CisjdW5kZWYgY2xlYXIKKyN1bmRlZiBlcmFzZQorI3VuZGVmIG1vdmUKKyN1bmRlZiByZWZyZXNoCisKKyNlbmRpZiAvKiBOQ1VSU0VTX05PTUFDUk9TICovCisKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19OQ1VSU0VTX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvY3Vyc2VzLndpZGUgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL2N1cnNlcy53aWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNzk5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL2N1cnNlcy53aWRlCkBAIC0wLDAgKzEsMjUyIEBACisvKiAkSWQ6IGN1cnNlcy53aWRlLHYgMS4zNCAyMDA3LzAzLzEwIDE3OjUyOjIzIHRvbSBFeHAgJCAqLworLyoKKyAqIHZpbGU6Y21vZGU6CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBuY3Vyc2VzLCBkZXNpZ25lZCB0byBiZSBhcHBlbmRlZCBhZnRlciBjdXJzZXMuaC5pbgorICogKHNlZSB0aGF0IGZpbGUgZm9yIHRoZSByZWxldmFudCBjb3B5cmlnaHQpLgorICovCisjaWZkZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGNjaGFyX3QgKikgX25jX3dhY3M7CisKKyNkZWZpbmUgTkNVUlNFU19XQUNTKGMpCSgmX25jX3dhY3NbKHVuc2lnbmVkIGNoYXIpY10pCisKKyNkZWZpbmUgV0FDU19CU1NCCU5DVVJTRVNfV0FDUygnbCcpCisjZGVmaW5lIFdBQ1NfU1NCQglOQ1VSU0VTX1dBQ1MoJ20nKQorI2RlZmluZSBXQUNTX0JCU1MJTkNVUlNFU19XQUNTKCdrJykKKyNkZWZpbmUgV0FDU19TQkJTCU5DVVJTRVNfV0FDUygnaicpCisjZGVmaW5lIFdBQ1NfU0JTUwlOQ1VSU0VTX1dBQ1MoJ3UnKQorI2RlZmluZSBXQUNTX1NTU0IJTkNVUlNFU19XQUNTKCd0JykKKyNkZWZpbmUgV0FDU19TU0JTCU5DVVJTRVNfV0FDUygndicpCisjZGVmaW5lIFdBQ1NfQlNTUwlOQ1VSU0VTX1dBQ1MoJ3cnKQorI2RlZmluZSBXQUNTX0JTQlMJTkNVUlNFU19XQUNTKCdxJykKKyNkZWZpbmUgV0FDU19TQlNCCU5DVVJTRVNfV0FDUygneCcpCisjZGVmaW5lIFdBQ1NfU1NTUwlOQ1VSU0VTX1dBQ1MoJ24nKQorCisjZGVmaW5lIFdBQ1NfVUxDT1JORVIJV0FDU19CU1NCCisjZGVmaW5lIFdBQ1NfTExDT1JORVIJV0FDU19TU0JCCisjZGVmaW5lIFdBQ1NfVVJDT1JORVIJV0FDU19CQlNTCisjZGVmaW5lIFdBQ1NfTFJDT1JORVIJV0FDU19TQkJTCisjZGVmaW5lIFdBQ1NfUlRFRQlXQUNTX1NCU1MKKyNkZWZpbmUgV0FDU19MVEVFCVdBQ1NfU1NTQgorI2RlZmluZSBXQUNTX0JURUUJV0FDU19TU0JTCisjZGVmaW5lIFdBQ1NfVFRFRQlXQUNTX0JTU1MKKyNkZWZpbmUgV0FDU19ITElORQlXQUNTX0JTQlMKKyNkZWZpbmUgV0FDU19WTElORQlXQUNTX1NCU0IKKyNkZWZpbmUgV0FDU19QTFVTCVdBQ1NfU1NTUworCisjZGVmaW5lIFdBQ1NfUzEJCU5DVVJTRVNfV0FDUygnbycpIC8qIHNjYW4gbGluZSAxICovCisjZGVmaW5lIFdBQ1NfUzkgCU5DVVJTRVNfV0FDUygncycpIC8qIHNjYW4gbGluZSA5ICovCisjZGVmaW5lIFdBQ1NfRElBTU9ORAlOQ1VSU0VTX1dBQ1MoJ2AnKSAvKiBkaWFtb25kICovCisjZGVmaW5lIFdBQ1NfQ0tCT0FSRAlOQ1VSU0VTX1dBQ1MoJ2EnKSAvKiBjaGVja2VyIGJvYXJkICovCisjZGVmaW5lIFdBQ1NfREVHUkVFCU5DVVJTRVNfV0FDUygnZicpIC8qIGRlZ3JlZSBzeW1ib2wgKi8KKyNkZWZpbmUgV0FDU19QTE1JTlVTCU5DVVJTRVNfV0FDUygnZycpIC8qIHBsdXMvbWludXMgKi8KKyNkZWZpbmUgV0FDU19CVUxMRVQJTkNVUlNFU19XQUNTKCd+JykgLyogYnVsbGV0ICovCisKKwkvKiBUZWxldHlwZSA1NDEwdjEgc3ltYm9scyAqLworI2RlZmluZSBXQUNTX0xBUlJPVwlOQ1VSU0VTX1dBQ1MoJywnKSAvKiBhcnJvdyBsZWZ0ICovCisjZGVmaW5lIFdBQ1NfUkFSUk9XCU5DVVJTRVNfV0FDUygnKycpIC8qIGFycm93IHJpZ2h0ICovCisjZGVmaW5lIFdBQ1NfREFSUk9XCU5DVVJTRVNfV0FDUygnLicpIC8qIGFycm93IGRvd24gKi8KKyNkZWZpbmUgV0FDU19VQVJST1cJTkNVUlNFU19XQUNTKCctJykgLyogYXJyb3cgdXAgKi8KKyNkZWZpbmUgV0FDU19CT0FSRAlOQ1VSU0VTX1dBQ1MoJ2gnKSAvKiBib2FyZCBvZiBzcXVhcmVzICovCisjZGVmaW5lIFdBQ1NfTEFOVEVSTglOQ1VSU0VTX1dBQ1MoJ2knKSAvKiBsYW50ZXJuIHN5bWJvbCAqLworI2RlZmluZSBXQUNTX0JMT0NLCU5DVVJTRVNfV0FDUygnMCcpIC8qIHNvbGlkIHNxdWFyZSBibG9jayAqLworCisJLyogbmN1cnNlcyBleHRlbnNpb25zICovCisjZGVmaW5lIFdBQ1NfUzMJCU5DVVJTRVNfV0FDUygncCcpIC8qIHNjYW4gbGluZSAzICovCisjZGVmaW5lIFdBQ1NfUzcJCU5DVVJTRVNfV0FDUygncicpIC8qIHNjYW4gbGluZSA3ICovCisjZGVmaW5lIFdBQ1NfTEVRVUFMCU5DVVJTRVNfV0FDUygneScpIC8qIGxlc3MvZXF1YWwgKi8KKyNkZWZpbmUgV0FDU19HRVFVQUwJTkNVUlNFU19XQUNTKCd6JykgLyogZ3JlYXRlci9lcXVhbCAqLworI2RlZmluZSBXQUNTX1BJCQlOQ1VSU0VTX1dBQ1MoJ3snKSAvKiBQaSAqLworI2RlZmluZSBXQUNTX05FUVVBTAlOQ1VSU0VTX1dBQ1MoJ3wnKSAvKiBub3QgZXF1YWwgKi8KKyNkZWZpbmUgV0FDU19TVEVSTElORwlOQ1VSU0VTX1dBQ1MoJ30nKSAvKiBVSyBwb3VuZCBzaWduICovCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciB3aWRlLWNoYXJhY3RlciBvcGVyYXRpb25zLgorICoKKyAqICJnZW5lcmF0ZWQiIGNvbW1lbnRzIHNob3VsZCBpbmNsdWRlICI6V0lERUMiIHRvIG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGZ1bmN0aW9ucyBpZmRlZidkIGluIGxpYl9nZW4uYworICoKKyAqICJpbXBsZW1lbnRlZCIgY29tbWVudHMgZG8gbm90IG5lZWQgdGhpcyBtYXJrZXIuCisgKi8KKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYWRkX3djaCAoY29uc3QgY2NoYXJfdCAqKTsJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFkZF93Y2huc3RyIChjb25zdCBjY2hhcl90ICosIGludCk7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFkZF93Y2hzdHIgKGNvbnN0IGNjaGFyX3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFkZG53c3RyIChjb25zdCB3Y2hhcl90ICosIGludCk7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGFkZHdzdHIgKGNvbnN0IHdjaGFyX3QgKik7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBia2dybmQgKGNvbnN0IGNjaGFyX3QgKik7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgYmtncm5kc2V0IChjb25zdCBjY2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBib3JkZXJfc2V0IChjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kixjb25zdCBjY2hhcl90Kik7IC8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgYm94X3NldCAoV0lORE9XICosIGNvbnN0IGNjaGFyX3QgKiwgY29uc3QgY2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBlY2hvX3djaGFyIChjb25zdCBjY2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBlcmFzZXdjaGFyICh3Y2hhcl90Kik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldF93Y2ggKHdpbnRfdCAqKTsJCQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBnZXRfd3N0ciAod2ludF90ICopOwkJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldGJrZ3JuZCAoY2NoYXJfdCAqKTsJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldGNjaGFyIChjb25zdCBjY2hhcl90ICosIHdjaGFyX3QqLCBhdHRyX3QqLCBzaG9ydCosIHZvaWQqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGdldG5fd3N0ciAod2ludF90ICosIGludCk7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBobGluZV9zZXQgKGNvbnN0IGNjaGFyX3QgKiwgaW50KTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5fd2NoIChjY2hhcl90ICopOwkJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluX3djaG5zdHIgKGNjaGFyX3QgKiwgaW50KTsJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluX3djaHN0ciAoY2NoYXJfdCAqKTsJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGlubndzdHIgKHdjaGFyX3QgKiwgaW50KTsJCQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIGluc19ud3N0ciAoY29uc3Qgd2NoYXJfdCAqLCBpbnQpOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbnNfd2NoIChjb25zdCBjY2hhcl90ICopOwkJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgaW5zX3dzdHIgKGNvbnN0IHdjaGFyX3QgKik7CQkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBpbndzdHIgKHdjaGFyX3QgKik7CQkJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1QgY2hhciopIGtleV9uYW1lICh3Y2hhcl90KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBraWxsd2NoYXIgKHdjaGFyX3QgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12YWRkX3djaCAoaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZhZGRfd2NobnN0ciAoaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKiwgaW50KTsvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12YWRkX3djaHN0ciAoaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZhZGRud3N0ciAoaW50LCBpbnQsIGNvbnN0IHdjaGFyX3QgKiwgaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmFkZHdzdHIgKGludCwgaW50LCBjb25zdCB3Y2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12Z2V0X3djaCAoaW50LCBpbnQsIHdpbnRfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZnZXRfd3N0ciAoaW50LCBpbnQsIHdpbnRfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZnZXRuX3dzdHIgKGludCwgaW50LCB3aW50X3QgKiwgaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmhsaW5lX3NldCAoaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKiwgaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluX3djaCAoaW50LCBpbnQsIGNjaGFyX3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW5fd2NobnN0ciAoaW50LCBpbnQsIGNjaGFyX3QgKiwgaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluX3djaHN0ciAoaW50LCBpbnQsIGNjaGFyX3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW5ud3N0ciAoaW50LCBpbnQsIHdjaGFyX3QgKiwgaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluc19ud3N0ciAoaW50LCBpbnQsIGNvbnN0IHdjaGFyX3QgKiwgaW50KTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdmluc193Y2ggKGludCwgaW50LCBjb25zdCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW5zX3dzdHIgKGludCwgaW50LCBjb25zdCB3Y2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12aW53c3RyIChpbnQsIGludCwgd2NoYXJfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ2bGluZV9zZXQgKGludCwgaW50LCBjb25zdCBjY2hhcl90ICosIGludCk7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3YWRkX3djaCAoV0lORE9XICosIGludCwgaW50LCBjb25zdCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2FkZF93Y2huc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKiwgaW50KTsgLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndhZGRfd2Noc3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIGNvbnN0IGNjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3YWRkbndzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3Qgd2NoYXJfdCAqLCBpbnQpOy8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3YWRkd3N0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCB3Y2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2dldF93Y2ggKFdJTkRPVyAqLCBpbnQsIGludCwgd2ludF90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2dldF93c3RyIChXSU5ET1cgKiwgaW50LCBpbnQsIHdpbnRfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndnZXRuX3dzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgd2ludF90ICosIGludCk7LyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndobGluZV9zZXQgKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2NoYXJfdCAqLCBpbnQpOy8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5fd2NoIChXSU5ET1cgKiwgaW50LCBpbnQsIGNjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgbXZ3aW5fd2NobnN0ciAoV0lORE9XICosIGludCxpbnQsIGNjaGFyX3QgKixpbnQpOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luX3djaHN0ciAoV0lORE9XICosIGludCwgaW50LCBjY2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2lubndzdHIgKFdJTkRPVyAqLCBpbnQsIGludCwgd2NoYXJfdCAqLCBpbnQpOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luc19ud3N0ciAoV0lORE9XICosIGludCxpbnQsIGNvbnN0IHdjaGFyX3QgKixpbnQpOyAvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2luc193Y2ggKFdJTkRPVyAqLCBpbnQsIGludCwgY29uc3QgY2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdndpbnNfd3N0ciAoV0lORE9XICosIGludCwgaW50LCBjb25zdCB3Y2hhcl90ICopOwkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIG12d2lud3N0ciAoV0lORE9XICosIGludCwgaW50LCB3Y2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBtdnd2bGluZV9zZXQgKFdJTkRPVyAqLCBpbnQsaW50LCBjb25zdCBjY2hhcl90ICosaW50KTsgLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBwZWNob193Y2hhciAoV0lORE9XICosIGNvbnN0IGNjaGFyX3QgKik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzZXRjY2hhciAoY2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIGNvbnN0IGF0dHJfdCwgc2hvcnQsIGNvbnN0IHZvaWQgKik7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBzbGtfd3NldCAoaW50LCBjb25zdCB3Y2hhcl90ICosIGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYXR0cl90KSB0ZXJtX2F0dHJzICh2b2lkKTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdW5nZXRfd2NoIChjb25zdCB3Y2hhcl90KTsJCQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdmlkX2F0dHIgKGF0dHJfdCwgc2hvcnQsIHZvaWQgKik7CQkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgdmlkX3B1dHMgKGF0dHJfdCwgc2hvcnQsIHZvaWQgKiwgaW50ICgqKShpbnQpKTsgLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHZsaW5lX3NldCAoY29uc3QgY2NoYXJfdCAqLCBpbnQpOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YWRkX3djaCAoV0lORE9XICosY29uc3QgY2NoYXJfdCAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3YWRkX3djaG5zdHIgKFdJTkRPVyAqLGNvbnN0IGNjaGFyX3QgKixpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2FkZF93Y2hzdHIgKFdJTkRPVyAqLGNvbnN0IGNjaGFyX3QgKik7CS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2FkZG53c3RyIChXSU5ET1cgKixjb25zdCB3Y2hhcl90ICosaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdhZGR3c3RyIChXSU5ET1cgKixjb25zdCB3Y2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3Ymtncm5kIChXSU5ET1cgKixjb25zdCBjY2hhcl90ICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSB3Ymtncm5kc2V0IChXSU5ET1cgKixjb25zdCBjY2hhcl90ICopOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2JvcmRlcl9zZXQgKFdJTkRPVyAqLGNvbnN0IGNjaGFyX3QqLGNvbnN0IGNjaGFyX3QqLGNvbnN0IGNjaGFyX3QqLGNvbnN0IGNjaGFyX3QqLGNvbnN0IGNjaGFyX3QqLGNvbnN0IGNjaGFyX3QqLGNvbnN0IGNjaGFyX3QqLGNvbnN0IGNjaGFyX3QqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdlY2hvX3djaGFyIChXSU5ET1cgKiwgY29uc3QgY2NoYXJfdCAqKTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRfd2NoIChXSU5ET1cgKiwgd2ludF90ICopOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRfd3N0ciAoV0lORE9XICosIHdpbnRfdCAqKTsJCS8qIGdlbmVyYXRlZDpXSURFQyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2dldGJrZ3JuZCAoV0lORE9XICosIGNjaGFyX3QgKik7CQkvKiBnZW5lcmF0ZWQ6V0lERUMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdnZXRuX3dzdHIgKFdJTkRPVyAqLHdpbnRfdCAqLCBpbnQpOwkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdobGluZV9zZXQgKFdJTkRPVyAqLCBjb25zdCBjY2hhcl90ICosIGludCk7CS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5fd2NoIChXSU5ET1cgKiwgY2NoYXJfdCAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5fd2NobnN0ciAoV0lORE9XICosIGNjaGFyX3QgKiwgaW50KTsJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHdpbl93Y2hzdHIgKFdJTkRPVyAqLCBjY2hhcl90ICopOwkJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5ud3N0ciAoV0lORE9XICosIHdjaGFyX3QgKiwgaW50KTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW5zX253c3RyIChXSU5ET1cgKiwgY29uc3Qgd2NoYXJfdCAqLCBpbnQpOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luc193Y2ggKFdJTkRPVyAqLCBjb25zdCBjY2hhcl90ICopOwkvKiBpbXBsZW1lbnRlZCAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgd2luc193c3RyIChXSU5ET1cgKiwgY29uc3Qgd2NoYXJfdCAqKTsJLyogZ2VuZXJhdGVkOldJREVDICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB3aW53c3RyIChXSU5ET1cgKiwgd2NoYXJfdCAqKTsJCS8qIGltcGxlbWVudGVkICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQod2NoYXJfdCopIHd1bmN0cmwgKGNjaGFyX3QgKik7CQkJLyogaW1wbGVtZW50ZWQgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHd2bGluZV9zZXQgKFdJTkRPVyAqLCBjb25zdCBjY2hhcl90ICosIGludCk7CS8qIGltcGxlbWVudGVkICovCisKKyNpZm5kZWYgTkNVUlNFU19OT01BQ1JPUworCisvKgorICogWFNJIGN1cnNlcyBtYWNyb3MgZm9yIFhQRzQgY29uZm9ybWFuY2UuCisgKi8KKyNkZWZpbmUgYWRkX3djaChjKQkJCXdhZGRfd2NoKHN0ZHNjcixjKQorI2RlZmluZSBhZGRfd2NobnN0cihzdHIsbikJCXdhZGRfd2NobnN0cihzdGRzY3Isc3RyLG4pCisjZGVmaW5lIGFkZF93Y2hzdHIoc3RyKQkJCXdhZGRfd2Noc3RyKHN0ZHNjcixzdHIpCisjZGVmaW5lIGFkZG53c3RyKHdzdHIsbikJCXdhZGRud3N0cihzdGRzY3Isd3N0cixuKQorI2RlZmluZSBhZGR3c3RyKHdzdHIpCQkJd2FkZHdzdHIoc3Rkc2NyLHdzdHIpCisjZGVmaW5lIGJrZ3JuZChjKQkJCXdia2dybmQoc3Rkc2NyLGMpCisjZGVmaW5lIGJrZ3JuZHNldChjKQkJCXdia2dybmRzZXQoc3Rkc2NyLGMpCisjZGVmaW5lIGJvcmRlcl9zZXQobCxyLHQsYix0bCx0cixibCxicikgd2JvcmRlcl9zZXQoc3Rkc2NyLGwscix0LGIsdGwsdHIsYmwsYnIpCisjZGVmaW5lIGJveF9zZXQodyx2LGgpCQkJd2JvcmRlcl9zZXQodyx2LHYsaCxoLDAsMCwwLDApCisjZGVmaW5lIGVjaG9fd2NoYXIoYykJCQl3ZWNob193Y2hhcihzdGRzY3IsYykKKyNkZWZpbmUgZ2V0X3djaChjKQkJCXdnZXRfd2NoKHN0ZHNjcixjKQorI2RlZmluZSBnZXRfd3N0cih0KQkJCXdnZXRfd3N0cihzdGRzY3IsdCkKKyNkZWZpbmUgZ2V0Ymtncm5kKHdjaCkJCQl3Z2V0Ymtncm5kKHN0ZHNjcix3Y2gpCisjZGVmaW5lIGdldG5fd3N0cih0LG4pCQkJd2dldG5fd3N0cihzdGRzY3IsdCxuKQorI2RlZmluZSBobGluZV9zZXQoYyxuKQkJCXdobGluZV9zZXQoc3Rkc2NyLGMsbikKKyNkZWZpbmUgaW5fd2NoKGMpCQkJd2luX3djaChzdGRzY3IsYykKKyNkZWZpbmUgaW5fd2NobnN0cihjLG4pCQkJd2luX3djaG5zdHIoc3Rkc2NyLGMsbikKKyNkZWZpbmUgaW5fd2Noc3RyKGMpCQkJd2luX3djaHN0cihzdGRzY3IsYykKKyNkZWZpbmUgaW5ud3N0cihjLG4pCQkJd2lubndzdHIoc3Rkc2NyLGMsbikKKyNkZWZpbmUgaW5zX253c3RyKHQsbikJCQl3aW5zX253c3RyKHN0ZHNjcix0LG4pCisjZGVmaW5lIGluc193Y2goYykJCQl3aW5zX3djaChzdGRzY3IsYykKKyNkZWZpbmUgaW5zX3dzdHIodCkJCQl3aW5zX3dzdHIoc3Rkc2NyLHQpCisjZGVmaW5lIGlud3N0cihjKQkJCXdpbndzdHIoc3Rkc2NyLGMpCisjZGVmaW5lIHZsaW5lX3NldChjLG4pCQkJd3ZsaW5lX3NldChzdGRzY3IsYyxuKQorI2RlZmluZSB3YWRkX3djaHN0cih3aW4sc3RyKQkJd2FkZF93Y2huc3RyKHdpbixzdHIsLTEpCisjZGVmaW5lIHdhZGR3c3RyKHdpbix3c3RyKQkJd2FkZG53c3RyKHdpbix3c3RyLC0xKQorI2RlZmluZSB3Z2V0X3dzdHIodyx0KQkJCXdnZXRuX3dzdHIodyx0LC0xKQorI2RlZmluZSB3aW5fd2Noc3RyKHcsYykJCQl3aW5fd2NobnN0cih3LGMsLTEpCisjZGVmaW5lIHdpbnNfd3N0cih3LHQpCQkJd2luc19ud3N0cih3LHQsLTEpCisKKyNpZiAhTkNVUlNFU19PUEFRVUUKKyNkZWZpbmUgd2dldGJrZ3JuZCh3aW4sd2NoKQkJKCp3Y2ggPSB3aW4tPl9ia2dybmQsIE9LKQorI2VuZGlmCisKKyNkZWZpbmUgbXZhZGRfd2NoKHkseCxjKQkJbXZ3YWRkX3djaChzdGRzY3IseSx4LGMpCisjZGVmaW5lIG12YWRkX3djaG5zdHIoeSx4LHMsbikJCW12d2FkZF93Y2huc3RyKHN0ZHNjcix5LHgscyxuKQorI2RlZmluZSBtdmFkZF93Y2hzdHIoeSx4LHMpCQltdndhZGRfd2Noc3RyKHN0ZHNjcix5LHgscykKKyNkZWZpbmUgbXZhZGRud3N0cih5LHgsd3N0cixuKQkJbXZ3YWRkbndzdHIoc3Rkc2NyLHkseCx3c3RyLG4pCisjZGVmaW5lIG12YWRkd3N0cih5LHgsd3N0cikJCW12d2FkZHdzdHIoc3Rkc2NyLHkseCx3c3RyKQorI2RlZmluZSBtdmdldF93Y2goeSx4LGMpCQltdndnZXRfd2NoKHN0ZHNjcix5LHgsYykKKyNkZWZpbmUgbXZnZXRfd3N0cih5LHgsdCkJCW12d2dldF93c3RyKHN0ZHNjcix5LHgsdCkKKyNkZWZpbmUgbXZnZXRuX3dzdHIoeSx4LHQsbikJCW12d2dldG5fd3N0cihzdGRzY3IseSx4LHQsbikKKyNkZWZpbmUgbXZobGluZV9zZXQoeSx4LGMsbikJCW12d2hsaW5lX3NldChzdGRzY3IseSx4LGMsbikKKyNkZWZpbmUgbXZpbl93Y2goeSx4LGMpCQkJbXZ3aW5fd2NoKHN0ZHNjcix5LHgsYykKKyNkZWZpbmUgbXZpbl93Y2huc3RyKHkseCxjLG4pCQltdndpbl93Y2huc3RyKHN0ZHNjcix5LHgsYyxuKQorI2RlZmluZSBtdmluX3djaHN0cih5LHgsYykJCW12d2luX3djaHN0cihzdGRzY3IseSx4LGMpCisjZGVmaW5lIG12aW5ud3N0cih5LHgsYyxuKQkJbXZ3aW5ud3N0cihzdGRzY3IseSx4LGMsbikKKyNkZWZpbmUgbXZpbnNfbndzdHIoeSx4LHQsbikJCW12d2luc19ud3N0cihzdGRzY3IseSx4LHQsbikKKyNkZWZpbmUgbXZpbnNfd2NoKHkseCxjKQkJbXZ3aW5zX3djaChzdGRzY3IseSx4LGMpCisjZGVmaW5lIG12aW5zX3dzdHIoeSx4LHQpCQltdndpbnNfd3N0cihzdGRzY3IseSx4LHQpCisjZGVmaW5lIG12aW53c3RyKHkseCxjKQkJCW12d2lud3N0cihzdGRzY3IseSx4LGMpCisjZGVmaW5lIG12dmxpbmVfc2V0KHkseCxjLG4pCQltdnd2bGluZV9zZXQoc3Rkc2NyLHkseCxjLG4pCisKKyNkZWZpbmUgbXZ3YWRkX3djaCh3aW4seSx4LGMpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2FkZF93Y2god2luLGMpKQorI2RlZmluZSBtdndhZGRfd2NobnN0cih3aW4seSx4LHMsbikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdhZGRfd2NobnN0cih3aW4scyxuKSkKKyNkZWZpbmUgbXZ3YWRkX3djaHN0cih3aW4seSx4LHMpCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3YWRkX3djaHN0cih3aW4scykpCisjZGVmaW5lIG12d2FkZG53c3RyKHdpbix5LHgsd3N0cixuKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2FkZG53c3RyKHdpbix3c3RyLG4pKQorI2RlZmluZSBtdndhZGR3c3RyKHdpbix5LHgsd3N0cikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdhZGR3c3RyKHdpbix3c3RyKSkKKyNkZWZpbmUgbXZ3Z2V0X3djaCh3aW4seSx4LGMpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2dldF93Y2god2luLGMpKQorI2RlZmluZSBtdndnZXRfd3N0cih3aW4seSx4LHQpCQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2dldF93c3RyKHdpbix0KSkKKyNkZWZpbmUgbXZ3Z2V0bl93c3RyKHdpbix5LHgsdCxuKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2dldG5fd3N0cih3aW4sdCxuKSkKKyNkZWZpbmUgbXZ3aGxpbmVfc2V0KHdpbix5LHgsYyxuKQkod21vdmUod2luLHkseCkgPT0gRVJSID8gRVJSIDogd2hsaW5lX3NldCh3aW4sYyxuKSkKKyNkZWZpbmUgbXZ3aW5fd2NoKHdpbix5LHgsYykJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5fd2NoKHdpbixjKSkKKyNkZWZpbmUgbXZ3aW5fd2NobnN0cih3aW4seSx4LGMsbikJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbl93Y2huc3RyKHdpbixjLG4pKQorI2RlZmluZSBtdndpbl93Y2hzdHIod2luLHkseCxjKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbl93Y2hzdHIod2luLGMpKQorI2RlZmluZSBtdndpbm53c3RyKHdpbix5LHgsYyxuKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbm53c3RyKHdpbixjLG4pKQorI2RlZmluZSBtdndpbnNfbndzdHIod2luLHkseCx0LG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5zX253c3RyKHdpbix0LG4pKQorI2RlZmluZSBtdndpbnNfd2NoKHdpbix5LHgsYykJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5zX3djaCh3aW4sYykpCisjZGVmaW5lIG12d2luc193c3RyKHdpbix5LHgsdCkJCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3aW5zX3dzdHIod2luLHQpKQorI2RlZmluZSBtdndpbndzdHIod2luLHkseCxjKQkJKHdtb3ZlKHdpbix5LHgpID09IEVSUiA/IEVSUiA6IHdpbndzdHIod2luLGMpKQorI2RlZmluZSBtdnd2bGluZV9zZXQod2luLHkseCxjLG4pCSh3bW92ZSh3aW4seSx4KSA9PSBFUlIgPyBFUlIgOiB3dmxpbmVfc2V0KHdpbixjLG4pKQorCisjZW5kaWYgLyogTkNVUlNFU19OT01BQ1JPUyAqLworCisjaWYgZGVmaW5lZChUUkFDRSkgfHwgZGVmaW5lZChOQ1VSU0VTX1RFU1QpCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfdmlzd2J1Zihjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc3dpYnVmKGNvbnN0IHdpbnRfdCAqKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9lZGl0X2NmZy5zaCBiL25jdXJzZXMtNS43L2luY2x1ZGUvZWRpdF9jZmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGQ2NGZlZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvZWRpdF9jZmcuc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisjICRJZDogZWRpdF9jZmcuc2gsdiAxLjEyIDIwMDEvMTIvMjMgMDA6NTI6NDAgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAsMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NiwxOTk3LDIwMDAKKyMKKyMgRWRpdCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdGVybS5oIGZpbGUgYmFzZWQgb24gdGhlIGF1dG9jb25mLWdlbmVyYXRlZAorIyB2YWx1ZXM6CisjCisjCSQxID0gbmN1cnNlc19jZmcuaAorIwkkMiA9IHRlcm0uaAorIworQkFLPXNhdmUkJAorVE1QPWVkaXQkJAordHJhcCAicm0gLWYgJEJBSyAkVE1QIiAwIDEgMiA1IDE1Citmb3IgbmFtZSBpbiBcCisJSEFWRV9UQ0dFVEFUVFIgXAorCUhBVkVfVEVSTUlPU19IIFwKKwlIQVZFX1RFUk1JT19IIFwKKwlCUk9LRU5fTElOS0VSCitkbworCW12ICQyICRCQUsKKwlpZiAoIGdyZXAgIlsgCV0kbmFtZVsgCV0iICQxIDI+JjEgPiRUTVAgKQorCXRoZW4KKwkJdmFsdWU9MQorCWVsc2UKKwkJdmFsdWU9MAorCWZpCisJZWNobyAnKiogZWRpdDogJyRuYW1lICR2YWx1ZQorCXNlZCBcCisJCS1lICJzQCNkZWZpbmUgJHtuYW1lfS4qXCRAI2RlZmluZSAkbmFtZSAkdmFsdWVAIiBcCisJCS1lICJzQCNpZiAkbmFtZVwkQCNpZiAkdmFsdWUgLyogJG5hbWUgKi9AIiBcCisJCS1lICJzQCNpZiAhJG5hbWVcJEAjaWYgJHZhbHVlIC8qICEkbmFtZSAqL0AiIFwKKwkJJEJBSyA+JDIKKwlpZiAoY21wIC1zICQyICRCQUspCisJdGhlbgorCQltdiAkQkFLICQyCisJZWxzZQorCQlybSAtZiAkQkFLCisJZmkKK2RvbmUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvaGFzaGVkX2RiLmggYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL2hhc2hlZF9kYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDM5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL2hhc2hlZF9kYi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAkSWQ6IGhhc2hlZF9kYi5oLHYgMS41IDIwMDYvMDgvMTkgMTU6NTg6MzQgdG9tIEV4cCAkCisgKi8KKworI2lmbmRlZiBIQVNIRURfREJfSAorI2RlZmluZSBIQVNIRURfREJfSCAxCisKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKworI2lmIFVTRV9IQVNIRURfREIKKworI2luY2x1ZGUgPGRiLmg+CisKKyNpZm5kZWYgREJOX1NVRkZJWAorI2RlZmluZSBEQk1fU1VGRklYICIuZGIiCisjZW5kaWYKKworI2lmZGVmIERCX1ZFUlNJT05fTUFKT1IKKyNkZWZpbmUgSEFTSEVEX0RCX0FQSSBEQl9WRVJTSU9OX01BSk9SCisjZWxzZQorI2RlZmluZSBIQVNIRURfREJfQVBJIDEJCS8qIGUuZy4sIGRiIDEuOC41ICovCisjZW5kaWYKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKERCICopIF9uY19kYl9vcGVuKGNvbnN0IGNoYXIgKiAvKiBwYXRoICovLCBib29sIC8qIG1vZGlmeSAqLyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX2RiX2hhdmVfZGF0YShEQlQgKiAvKiBrZXkgKi8sIERCVCAqIC8qIGRhdGEgKi8sIGNoYXIgKiogLyogYnVmZmVyICovLCBpbnQgKiAvKiBzaXplICovKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfZGJfaGF2ZV9pbmRleChEQlQgKiAvKiBrZXkgKi8sIERCVCAqIC8qIGRhdGEgKi8sIGNoYXIgKiogLyogYnVmZmVyICovLCBpbnQgKiAvKiBzaXplICovKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19kYl9jbG9zZShEQiAqIC8qIGRiICovKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19kYl9maXJzdChEQiAqIC8qIGRiICovLCBEQlQgKiAvKiBrZXkgKi8sIERCVCAqIC8qIGRhdGEgKi8pOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX2RiX25leHQoREIgKiAvKiBkYiAqLywgREJUICogLyoga2V5ICovLCBEQlQgKiAvKiBkYXRhICovKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19kYl9nZXQoREIgKiAvKiBkYiAqLywgREJUICogLyoga2V5ICovLCBEQlQgKiAvKiBkYXRhICovKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19kYl9wdXQoREIgKiAvKiBkYiAqLywgREJUICogLyoga2V5ICovLCBEQlQgKiAvKiBkYXRhICovKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBIQVNIRURfREJfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9oZWFkZXJzIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNGJkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL2hlYWRlcnMKQEAgLTAsMCArMSw0MiBAQAorIyAkSWQ6IGhlYWRlcnMsdiAxLjkgMjAwNy8wMS8yMCAxOTo1NzowNCBNaXJvc2xhdi5MaWNodmFyIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQkxOTk2LW9uCisjCit0ZXJtLmgKK2N1cnNlcy5oCit1bmN0cmwuaAordGVybWNhcC5oCiskKHNyY2RpcikvbmN1cnNlc19kbGwuaAorQCB0aWNsaWIKKyQoc3JjZGlyKS90aWMuaAorJChzcmNkaXIpL3Rlcm1fZW50cnkuaAorJChzcmNkaXIpL25jX3RwYXJtLmgKKworIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL25jX2FsbG9jLmggYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL25jX2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyMWJmZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvbmNfYWxsb2MuaApAQCAtMCwwICsxLDEwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICRJZDogbmNfYWxsb2MuaCx2IDEuMTYgMjAwOC8wOS8yNyAyMjozMDozMyB0b20gRXhwICQgKi8KKworI2lmbmRlZiBOQ19BTExPQ19pbmNsdWRlZAorI2RlZmluZSBOQ19BTExPQ19pbmNsdWRlZCAxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIEhBVkVfTElCRE1BTExPQworI2luY2x1ZGUgPHN0cmluZy5oPgorI3VuZGVmIHN0cm5kdXAJCS8qIHdvcmthcm91bmQgZm9yICNkZWZpbmUgaW4gR0xJQkMgMi43ICovCisjaW5jbHVkZSA8ZG1hbGxvYy5oPiAgICAvKiBHcmF5IFdhdHNvbidzIGxpYnJhcnkgKi8KKyNlbHNlCisjdW5kZWYgIEhBVkVfTElCRE1BTExPQworI2RlZmluZSBIQVZFX0xJQkRNQUxMT0MgMAorI2VuZGlmCisKKyNpZiBIQVZFX0xJQkRCTUFMTE9DCisjaW5jbHVkZSA8ZGJtYWxsb2MuaD4gICAvKiBDb25vciBDYWhpbGwncyBsaWJyYXJ5ICovCisjZWxzZQorI3VuZGVmICBIQVZFX0xJQkRCTUFMTE9DCisjZGVmaW5lIEhBVkVfTElCREJNQUxMT0MgMAorI2VuZGlmCisKKyNpZiBIQVZFX0xJQk1QQVRST0wKKyNpbmNsdWRlIDxtcGF0cm9sLmg+ICAgIC8qIE1lbW9yeS1QYXRyb2wgbGlicmFyeSAqLworI2Vsc2UKKyN1bmRlZiAgSEFWRV9MSUJNUEFUUk9MCisjZGVmaW5lIEhBVkVfTElCTVBBVFJPTCAwCisjZW5kaWYKKworI2lmbmRlZiBOT19MRUFLUworI2RlZmluZSBOT19MRUFLUyAwCisjZW5kaWYKKworI2lmIEhBVkVfTElCREJNQUxMT0MgfHwgSEFWRV9MSUJETUFMTE9DIHx8IE5PX0xFQUtTCisjZGVmaW5lIEhBVkVfTkNfRlJFRUFMTCAxCitzdHJ1Y3QgdGVybXR5cGU7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVfYW5kX2V4aXQoaW50KSBHQ0NfTk9SRVRVUk47CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVfdGluZm8oaW50KSBHQ0NfTk9SRVRVUk47CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVfdGljKGludCkgR0NDX05PUkVUVVJOOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19mcmVlX3RwYXJtKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19sZWFrc19kdW1wX2VudHJ5KHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19sZWFrc190aWModm9pZCk7CisjZGVmaW5lIEV4aXRQcm9ncmFtKGNvZGUpIF9uY19mcmVlX2FuZF9leGl0KGNvZGUpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX05DX0ZSRUVBTEwKKyNkZWZpbmUgSEFWRV9OQ19GUkVFQUxMIDAKKyNlbmRpZgorCisjaWZuZGVmIEV4aXRQcm9ncmFtCisjZGVmaW5lIEV4aXRQcm9ncmFtKGNvZGUpIGV4aXQoY29kZSkKKyNlbmRpZgorCisvKiBkb2FsbG9jLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkICopIF9uY19kb2FsbG9jKHZvaWQgKiwgc2l6ZV90KTsKKyNpZiAhSEFWRV9TVFJEVVAKKyNkZWZpbmUgc3RyZHVwIF9uY19zdHJkdXAKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19zdHJkdXAoY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisvKiBlbnRyaWVzLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbGVha3NfdGluZm8odm9pZCk7CisKKyNkZWZpbmUgdHlwZU1hbGxvYyh0eXBlLGVsdHMpICh0eXBlICopbWFsbG9jKChlbHRzKSpzaXplb2YodHlwZSkpCisjZGVmaW5lIHR5cGVDYWxsb2ModHlwZSxlbHRzKSAodHlwZSAqKWNhbGxvYygoZWx0cyksc2l6ZW9mKHR5cGUpKQorI2RlZmluZSB0eXBlUmVhbGxvYyh0eXBlLGVsdHMscHRyKSAodHlwZSAqKV9uY19kb2FsbG9jKHB0ciwgKGVsdHMpKnNpemVvZih0eXBlKSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5DX0FMTE9DX2luY2x1ZGVkICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL25jX3BhbmVsLmggYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL25jX3BhbmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3ODU3NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvbmNfcGFuZWwuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgMTk5NyAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKgorICogJElkOiBuY19wYW5lbC5oLHYgMS41IDIwMDgvMDgvMDQgMTg6MjY6NDYgdG9tIEV4cCAkCisgKgorICoJbmNfcGFuZWwuaAorICoKKyAqCUhlYWRlcmZpbGUgdG8gcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIHRoZSBwYW5lbCBsYXllciBpbnRvCisgKiAgICAgIHRoZSBTQ1JFRU4gc3RydWN0dXJlIG9mIHRoZSBuY3Vyc2VzIGNvcmUuCisgKi8KKworI2lmbmRlZiBOQ19QQU5FTF9ICisjZGVmaW5lIE5DX1BBTkVMX0ggMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3N0cnVjdCBwYW5lbDsgLyogRm9yd2FyZCBEZWNsYXJhdGlvbiAqLworCitzdHJ1Y3QgcGFuZWxob29rIHsKKyAgc3RydWN0IHBhbmVsKiAgIHRvcF9wYW5lbDsKKyAgc3RydWN0IHBhbmVsKiAgIGJvdHRvbV9wYW5lbDsKKyAgc3RydWN0IHBhbmVsKiAgIHN0ZHNjcl9wc2V1ZG9fcGFuZWw7CisjaWYgTk9fTEVBS1MKKyAgaW50ICgqZGVzdHJveSkoc3RydWN0IHBhbmVsICopOworI2VuZGlmCit9OworCisvKiBSZXRyaWV2ZSB0aGUgcGFuZWxob29rIG9mIHRoZSBjdXJyZW50IHNjcmVlbiAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHN0cnVjdCBwYW5lbGhvb2sqKSBfbmNfcGFuZWxob29rICh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5DX1BBTkVMX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvbmNfdHBhcm0uaCBiL25jdXJzZXMtNS43L2luY2x1ZGUvbmNfdHBhcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQ3NjliCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9uY190cGFybS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMjAwNiAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogbmNfdHBhcm0uaCx2IDEuNCAyMDA2LzExLzI2IDAwOjQ5OjI1IHRvbSBFeHAgJCAqLworCisvKgorICogQ2FzdCBwYXJhbWV0ZXJzIHBhc3QgdGhlIGZvcm1hdHRpbmctc3RyaW5nIGZvciB0cGFybSgpIHRvIG1hdGNoIHRoZQorICogYXNzdW1wdGlvbiBvZiB0aGUgdmFyYXJncyBjb2RlLgorICovCisjZGVmaW5lIFRQQVJNX0FSRyBsb25nCisjZGVmaW5lIFRQQVJNX04obikgKFRQQVJNX0FSRykobikKKworI2RlZmluZSBUUEFSTV85KGEsYixjLGQsZSxmLGcsaCxpLGopIHRwYXJtKGEsVFBBUk1fTihiKSxUUEFSTV9OKGMpLFRQQVJNX04oZCksVFBBUk1fTihlKSxUUEFSTV9OKGYpLFRQQVJNX04oZyksVFBBUk1fTihoKSxUUEFSTV9OKGkpLFRQQVJNX04oaikpCisKKyNpZiBOQ1VSU0VTX1RQQVJNX1ZBUkFSR1MKKyNkZWZpbmUgVFBBUk1fOChhLGIsYyxkLGUsZixnLGgsaSkgdHBhcm0oYSxUUEFSTV9OKGIpLFRQQVJNX04oYyksVFBBUk1fTihkKSxUUEFSTV9OKGUpLFRQQVJNX04oZiksVFBBUk1fTihnKSxUUEFSTV9OKGgpLFRQQVJNX04oaSkpCisjZGVmaW5lIFRQQVJNXzcoYSxiLGMsZCxlLGYsZyxoKSB0cGFybShhLFRQQVJNX04oYiksVFBBUk1fTihjKSxUUEFSTV9OKGQpLFRQQVJNX04oZSksVFBBUk1fTihmKSxUUEFSTV9OKGcpLFRQQVJNX04oaCkpCisjZGVmaW5lIFRQQVJNXzYoYSxiLGMsZCxlLGYsZykgdHBhcm0oYSxUUEFSTV9OKGIpLFRQQVJNX04oYyksVFBBUk1fTihkKSxUUEFSTV9OKGUpLFRQQVJNX04oZiksVFBBUk1fTihnKSkKKyNkZWZpbmUgVFBBUk1fNShhLGIsYyxkLGUsZikgdHBhcm0oYSxUUEFSTV9OKGIpLFRQQVJNX04oYyksVFBBUk1fTihkKSxUUEFSTV9OKGUpLFRQQVJNX04oZikpCisjZGVmaW5lIFRQQVJNXzQoYSxiLGMsZCxlKSB0cGFybShhLFRQQVJNX04oYiksVFBBUk1fTihjKSxUUEFSTV9OKGQpLFRQQVJNX04oZSkpCisjZGVmaW5lIFRQQVJNXzMoYSxiLGMsZCkgdHBhcm0oYSxUUEFSTV9OKGIpLFRQQVJNX04oYyksVFBBUk1fTihkKSkKKyNkZWZpbmUgVFBBUk1fMihhLGIsYykgdHBhcm0oYSxUUEFSTV9OKGIpLFRQQVJNX04oYykpCisjZGVmaW5lIFRQQVJNXzEoYSxiKSB0cGFybShhLFRQQVJNX04oYikpCisjZGVmaW5lIFRQQVJNXzAoYSkgdHBhcm0oYSkKKyNlbHNlCisjZGVmaW5lIFRQQVJNXzgoYSxiLGMsZCxlLGYsZyxoLGkpIFRQQVJNXzkoYSxiLGMsZCxlLGYsZyxoLGksMCkKKyNkZWZpbmUgVFBBUk1fNyhhLGIsYyxkLGUsZixnLGgpIFRQQVJNXzgoYSxiLGMsZCxlLGYsZyxoLDApCisjZGVmaW5lIFRQQVJNXzYoYSxiLGMsZCxlLGYsZykgVFBBUk1fNyhhLGIsYyxkLGUsZixnLDApCisjZGVmaW5lIFRQQVJNXzUoYSxiLGMsZCxlLGYpIFRQQVJNXzYoYSxiLGMsZCxlLGYsMCkKKyNkZWZpbmUgVFBBUk1fNChhLGIsYyxkLGUpIFRQQVJNXzUoYSxiLGMsZCxlLDApCisjZGVmaW5lIFRQQVJNXzMoYSxiLGMsZCkgVFBBUk1fNChhLGIsYyxkLDApCisjZGVmaW5lIFRQQVJNXzIoYSxiLGMpIFRQQVJNXzMoYSxiLGMsMCkKKyNkZWZpbmUgVFBBUk1fMShhLGIpIFRQQVJNXzIoYSxiLDApCisjZGVmaW5lIFRQQVJNXzEoYSxiKSBUUEFSTV8yKGEsYiwwKQorI2RlZmluZSBUUEFSTV8wKGEpIFRQQVJNXzEoYSwwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL25jdXJzZXNfY2ZnLmhpbiBiL25jdXJzZXMtNS43L2luY2x1ZGUvbmN1cnNlc19jZmcuaGluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGE0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL25jdXJzZXNfY2ZnLmhpbgpAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogbmN1cnNlc19jZmcuaGluLHYgMS43IDIwMDUvMDEvMDIgMDE6MjY6NTggdG9tIEV4cCAkCisgKgorICogVGhpcyBpcyBhIHRlbXBsYXRlLWZpbGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgIm5jdXJzZXNfY2ZnLmgiIGZpbGUuCisgKgorICogUmF0aGVyIHRoYW4gbGlzdCBldmVyeSBkZWZpbml0aW9uLCB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHQgc3Vic3RpdHV0ZXMgdGhlCisgKiBkZWZpbml0aW9ucyB0aGF0IGl0IGZpbmRzIHVzaW5nICdzZWQnLiAgWW91IG5lZWQgYSBwYXRjaCAob3JpZ2luYWwgZGF0ZQorICogOTcxMjIyKSB0byBhdXRvY29uZiAyLjEyIG9yIDIuMTMgdG8gZG8gdGhpcy4KKyAqCisgKiBTZWU6CisgKglodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvYXV0b2NvbmYvCisgKglmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8KKyAqLworI2lmbmRlZiBOQ19DT05GSUdfSAorI2RlZmluZSBOQ19DT05GSUdfSAorQERFRlNACisKKyNpbmNsdWRlIDxuY3Vyc2VzX2RlZi5oPgorCisJLyogVGhlIEMgY29tcGlsZXIgbWF5IG5vdCB0cmVhdCB0aGVzZSBwcm9wZXJseSBidXQgQysrIGhhcyB0byAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisjdW5kZWYgY29uc3QKKyN1bmRlZiBpbmxpbmUKKyNlbHNlCisjaWYgZGVmaW5lZChsaW50KSB8fCBkZWZpbmVkKFRSQUNFKQorI3VuZGVmIGlubGluZQorI2RlZmluZSBpbmxpbmUgLyogbm90aGluZyAqLworI2VuZGlmCisjZW5kaWYKKworCS8qIE9uIEhQLVVYLCB0aGUgQyBjb21waWxlciBkb2Vzbid0IGdyb2sgbWJzdGF0ZV90IHdpdGhvdXQKKwkgICAtRF9YT1BFTl9TT1VSQ0U9NTAwLiBIb3dldmVyLCB0aGlzIGNhdXNlcyBwcm9ibGVtcyBvbgorCSAgIElSSVguIFNvLCB3ZSAjZGVmaW5lIG1ic3RhdGVfdCB0byBpbnQgaW4gY29uZmlndXJlLmluCisJICAgb25seSBmb3IgdGhlIEMgY29tcGlsZXIgaWYgbmVlZGVkLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI2lmZGVmIE5FRURfTUJTVEFURV9UX0RFRgorI2RlZmluZSBtYnN0YXRlX3QgaW50CisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogTkNfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvbmN1cnNlc19kZWZzIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9uY3Vyc2VzX2RlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhMzc3ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvbmN1cnNlc19kZWZzCkBAIC0wLDAgKzEsMjA4IEBACisjICRJZDogbmN1cnNlc19kZWZzLHYgMS40MCAyMDA4LzA5LzA2IDE1OjU3OjQxIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBTZWUgIk1LbmN1cnNlc19kZWYuc2giIGZvciBhbiBleHBsYW5hdGlvbi4KKyMKKyMgKGhpbnQ6IGRvbid0IHRyeSB0byBkZWZpbmUgTkRFQlVHIDstKQorCitCUk9LRU5fTElOS0VSCitCU0RfVFBVVFMKK0NDX0hBU19QUk9UT1MKK0NQUF9IQVNfUEFSQU1fSU5JVAorQ1VSU0VTX0FDU19BUlJBWQlhY3NfbWFwCitDVVJTRVNfV0FDU19BUlJBWQlfbmNfd2FjcworREVDTF9FUlJOTworRVRJUF9ORUVEU19NQVRIX0gKK0dDQ19OT1JFVFVSTgkvKiBub3RoaW5nICovCitHQ0NfVU5VU0VECS8qIG5vdGhpbmcgKi8KK0hBVkVfQklHX0NPUkUKK0hBVkVfQlNEX0NHRVRFTlQKK0hBVkVfQlNEX1NJR05BTF9ICitIQVZFX0JUT1dDIAorSEFWRV9CVUlMVElOX0gKK0hBVkVfQ0hHQVQJMQorSEFWRV9DT0xPUl9TRVQJMQorSEFWRV9ESVJFTlRfSAorSEFWRV9FUlJOTworSEFWRV9GQ05UTF9ICitIQVZFX0ZJTFRFUgkxCitIQVZFX0ZPUk1fSAorSEFWRV9HRVRCRUdYCTEKK0hBVkVfR0VUQ1VSWAkxCitIQVZFX0dFVENXRAorSEFWRV9HRVRFR0lECitIQVZFX0dFVEVVSUQKK0hBVkVfR0VUTUFYWAkxCitIQVZFX0dFVE5TVFIKK0hBVkVfR0VUT1BUX0gKK0hBVkVfR0VUUEFSWAkxCitIQVZFX0dFVFRJTUVPRkRBWQorSEFWRV9HRVRUVFlOQU0KK0hBVkVfR0VUV0lOCTEKK0hBVkVfR1BNX0gKK0hBVkVfR1BQX0JVSUxUSU5fSAorSEFWRV9HWFhfQlVJTFRJTl9ICitIQVZFX0hBU19LRVkKK0hBVkVfSU9TVFJFQU0KK0hBVkVfSVNBU0NJSQorSEFWRV9JU1NFVFVHSUQKK0hBVkVfTEFOR0lORk9fQ09ERVNFVAorSEFWRV9MSUJDX0gKK0hBVkVfTElCREJNQUxMT0MKK0hBVkVfTElCRE1BTExPQworSEFWRV9MSUJGT1JNCitIQVZFX0xJQkdQTQorSEFWRV9MSUJNRU5VCitIQVZFX0xJQk1QQVRST0wKK0hBVkVfTElCUEFORUwKK0hBVkVfTElNSVRTX0gKK0hBVkVfTElOSworSEFWRV9MT0NBTEVfSAorSEFWRV9MT05HX0ZJTEVfTkFNRVMKK0hBVkVfTUJMRU4KK0hBVkVfTUJSTEVOCitIQVZFX01CUlRPV0MKK0hBVkVfTUJTUlRPV0NTCitIQVZFX01CU1RPV0NTCitIQVZFX01CVE9XQworSEFWRV9NRU5VX0gKK0hBVkVfTUtTVEVNUAorSEFWRV9NVlZMSU5FCTEKK0hBVkVfTVZXVkxJTkUJMQorSEFWRV9OQU5PU0xFRVAKK0hBVkVfTkNfQUxMT0NfSAorSEFWRV9QQU5FTF9ICitIQVZFX1BPTEwKK0hBVkVfUE9MTF9ICitIQVZFX1BVUklGWQorSEFWRV9QVVRXQyAKK0hBVkVfUFVUV0lOCTEKK0hBVkVfUkVHRVhQUl9IX0ZVTkNTCitIQVZFX1JFR0VYUF9IX0ZVTkNTCitIQVZFX1JFR0VYX0hfRlVOQ1MKK0hBVkVfUkVNT1ZFCitIQVZFX1JFU0laRVRFUk0KK0hBVkVfUkVTSVpFX1RFUk0KK0hBVkVfUklQT0ZGTElORQkxCitIQVZFX1NFTEVDVAorSEFWRV9TRVRCVUYKK0hBVkVfU0VUQlVGRkVSCitIQVZFX1NFVFVQVEVSTQkxCitIQVZFX1NFVFZCVUYKK0hBVkVfU0lHQUNUSU9OCitIQVZFX1NJR1ZFQworSEFWRV9TSVpFQ0hBTkdFCitIQVZFX1NMS19DT0xPUgorSEFWRV9TTEtfSU5JVAkxCitIQVZFX1NUUkRVUAorSEFWRV9TVFJTVFIKK0hBVkVfU1lNTElOSworSEFWRV9TWVNfQlNEVFlQRVNfSAorSEFWRV9TWVNfSU9DVExfSAorSEFWRV9TWVNfUEFSQU1fSAorSEFWRV9TWVNfUE9MTF9ICitIQVZFX1NZU19TRUxFQ1RfSAorSEFWRV9TWVNfVEVSTUlPX0gKK0hBVkVfU1lTX1RJTUVTX0gKK0hBVkVfU1lTX1RJTUVfSAorSEFWRV9TWVNfVElNRV9TRUxFQ1QKK0hBVkVfVENHRVRBVFRSCitIQVZFX1RDR0VUUEdSUAorSEFWRV9URUxMCitIQVZFX1RFUk1BVFRSUwkxCitIQVZFX1RFUk1JT1NfSAorSEFWRV9URVJNSU9fSAorSEFWRV9URVJNTkFNRQkxCitIQVZFX1RFUk1fSAkxCitIQVZFX1RHRVRFTlQJMQorSEFWRV9USUdFVE5VTQkxCitIQVZFX1RJR0VUU1RSCTEKK0hBVkVfVElNRVMKK0hBVkVfVFRZRU5UX0gKK0hBVkVfVFlQRUFIRUFECTEKK0hBVkVfVFlQRUlORk8KK0hBVkVfVFlQRV9BVFRSX1QKK0hBVkVfVFlQRV9TSUdBQ1RJT04KK0hBVkVfVU5JU1REX0gKK0hBVkVfVU5MSU5LCitIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUworSEFWRV9WRlNDQU5GCitIQVZFX1ZTTlBSSU5URgorSEFWRV9WU1NDQU5GCitIQVZFX1dDU1JUT01CUworSEFWRV9XQ1NUT01CUworSEFWRV9XQ1RPQiAKK0hBVkVfV0NUT01CCitIQVZFX1dDVFlQRV9ICitIQVZFX1dJTlNTVFIJMQorSEFWRV9XT1JLSU5HX1BPTEwKK0hBVkVfV1JFU0laRQorSEFWRV9fRE9TQ0FOCitNSVhFRENBU0VfRklMRU5BTUVTCitOQ1VSU0VTX0NIQVJfRVEKK05DVVJTRVNfRVhQQU5ERUQKK05DVVJTRVNfRVhUX0NPTE9SUworTkNVUlNFU19FWFRfRlVOQ1MKK05DVVJTRVNfTk9fUEFERElORworTkNVUlNFU19QQVRIU0VQCSc6JworTkRFQlVHCitORUVEX1BURU1fSAorTk9fTEVBS1MKK1BVUkVfVEVSTUlORk8KK1JFVFNJR1RZUEUKK1NURENfSEVBREVSUworU1ZSNF9BQ1RJT04KK1NWUjRfVEVSTUlPCitTWVNURU1fTkFNRQkidW5rbm93biIKK1RFUk1JTkZPCSJub25lIgorVEVSTVBBVEgJIm5vbmUiCitUSU1FX1dJVEhfU1lTX1RJTUUKK1RZUEVPRl9DSFRZUEUKK1VTRV9DT0xPUkZHQkcKK1VTRV9EQVRBQkFTRQorVVNFX0dFVENBUAorVVNFX0dFVENBUF9DQUNIRQorVVNFX0hBUkRfVEFCUworVVNFX0hBU0hFRF9EQgorVVNFX0hBU0hNQVAKK1VTRV9IT01FX1RFUk1JTkZPCitVU0VfTElOS1MKK1VTRV9NWV9NRU1NT1ZFCitVU0VfT0tfQkNPUFkKK1VTRV9SQ1NfSURTCitVU0VfUkVFTlRSQU5UCitVU0VfU0FGRV9TUFJJTlRGCitVU0VfU0NST0xMX0hJTlRTCitVU0VfU0lHV0lOQ0gKK1VTRV9TWU1MSU5LUworVVNFX1NZU01PVVNFCitVU0VfVEVSTUNBUAorVVNFX1dFQUtfU1lNQk9MUworVVNFX1dJREVDX1NVUFBPUlQKK1VTRV9YTUNfU1VQUE9SVApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS9uY3Vyc2VzX2RsbC5oIGIvbmN1cnNlcy01LjcvaW5jbHVkZS9uY3Vyc2VzX2RsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNGZlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL25jdXJzZXNfZGxsLmgKQEAgLTAsMCArMSw4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICRJZDogbmN1cnNlc19kbGwuaCx2IDEuNiAyMDA3LzAzLzEwIDE5OjIxOjQ5IHRvbSBFeHAgJCAqLworCisjaWZuZGVmIE5DVVJTRVNfRExMX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX0RMTF9IX2luY2wgMQorCisvKiBubyBsb25nZXIgbmVlZGVkIG9uIGN5Z3dpbiBvciBtaW5ndywgdGhhbmtzIHRvIGF1dG8taW1wb3J0ICAgICAgICovCisvKiBidXQgdGhpcyBzdHJ1Y3R1cmUgbWF5IGJlIHVzZWZ1bCBhdCBzb21lIHBvaW50IGZvciBhbiBNU1ZDIGJ1aWxkICovCisvKiBzbywgZm9yIG5vdyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lIHRoZSBpbXBvcnRhbnQgZmxhZ3MgICAgICAgICAgICovCisvKiAidGhlIHJpZ2h0IHdheSIgZm9yIHByb3BlciBzdGF0aWMgYW5kIGRsbCthdXRvLWltcG9ydCBiZWhhdmlvciAgICovCisjdW5kZWYgTkNVUlNFU19ETEwKKyNkZWZpbmUgTkNVUlNFU19TVEFUSUMKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgIGlmIGRlZmluZWQoTkNVUlNFU19ETEwpCisjICAgIGlmIGRlZmluZWQoTkNVUlNFU19TVEFUSUMpCisjICAgICAgdW5kZWYgTkNVUlNFU19TVEFUSUMKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICB1bmRlZiBOQ1VSU0VTX0lNUEVYUAorIyAgdW5kZWYgTkNVUlNFU19BUEkKKyMgIHVuZGVmIE5DVVJTRVNfRVhQT1JUCisjICB1bmRlZiBOQ1VSU0VTX0VYUE9SVF9WQVIKKyMgIGlmIGRlZmluZWQoTkNVUlNFU19ETEwpCisvKiBidWlsZGluZyBhIERMTCAqLworIyAgICBkZWZpbmUgTkNVUlNFU19JTVBFWFAgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICBlbGlmIGRlZmluZWQoTkNVUlNFU19TVEFUSUMpCisvKiBidWlsZGluZyBvciBsaW5raW5nIHRvIGEgc3RhdGljIGxpYnJhcnkgKi8KKyMgICAgZGVmaW5lIE5DVVJTRVNfSU1QRVhQIC8qIG5vdGhpbmcgKi8KKyMgIGVsc2UKKy8qIGxpbmtpbmcgdG8gdGhlIERMTCAqLworIyAgICBkZWZpbmUgTkNVUlNFU19JTVBFWFAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICBlbmRpZgorIyAgZGVmaW5lIE5DVVJTRVNfQVBJIF9fY2RlY2wKKyMgIGRlZmluZSBOQ1VSU0VTX0VYUE9SVCh0eXBlKSBOQ1VSU0VTX0lNUEVYUCB0eXBlIE5DVVJTRVNfQVBJCisjICBkZWZpbmUgTkNVUlNFU19FWFBPUlRfVkFSKHR5cGUpIE5DVVJTRVNfSU1QRVhQIHR5cGUKKyNlbmRpZgorCisvKiBUYWtlIGNhcmUgb2Ygbm9uLWN5Z3dpbiBwbGF0Zm9ybXMgKi8KKyNpZiAhZGVmaW5lZChOQ1VSU0VTX0lNUEVYUCkKKyMgIGRlZmluZSBOQ1VSU0VTX0lNUEVYUCAvKiBub3RoaW5nICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOQ1VSU0VTX0FQSSkKKyMgIGRlZmluZSBOQ1VSU0VTX0FQSSAvKiBub3RoaW5nICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOQ1VSU0VTX0VYUE9SVCkKKyMgIGRlZmluZSBOQ1VSU0VTX0VYUE9SVCh0eXBlKSBOQ1VSU0VTX0lNUEVYUCB0eXBlIE5DVVJTRVNfQVBJCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOQ1VSU0VTX0VYUE9SVF9WQVIpCisjICBkZWZpbmUgTkNVUlNFU19FWFBPUlRfVkFSKHR5cGUpIE5DVVJTRVNfSU1QRVhQIHR5cGUKKyNlbmRpZgorCisvKgorICogRm9yIHJlZW50cmFudCBjb2RlLCB3ZSBtYXAgdGhlIHZhcmlvdXMgZ2xvYmFsIHZhcmlhYmxlcyBpbnRvIFNDUkVFTiBieQorICogdXNpbmcgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aGVtLgorICovCisjZGVmaW5lIE5DVVJTRVNfUFVCTElDX1ZBUihuYW1lKSBfbmNfIyNuYW1lCisjZGVmaW5lIE5DVVJTRVNfV1JBUFBFRF9WQVIodHlwZSxuYW1lKSBleHRlcm4gdHlwZSBOQ1VSU0VTX1BVQkxJQ19WQVIobmFtZSkodm9pZCkKKworI2VuZGlmIC8qIE5DVVJTRVNfRExMX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvaW5jbHVkZS90ZXJtX2VudHJ5LmggYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL3Rlcm1fZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjg3NTQwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS90ZXJtX2VudHJ5LmgKQEAgLTAsMCArMSwxNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk4LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiB0ZXJtX2VudHJ5LmgsdiAxLjM1IDIwMDgvMDgvMTYgMTY6MTY6MDMgdG9tIEV4cCAkICovCisKKy8qCisgKgl0ZXJtX2VudHJ5LmggLS0gaW50ZXJmYWNlIHRvIGVudHJ5LW1hbmlwdWxhdGlvbiBjb2RlCisgKi8KKworI2lmbmRlZiBOQ1VSU0VTX1RFUk1fRU5UUllfSF9pbmNsCisjZGVmaW5lIE5DVVJTRVNfVEVSTV9FTlRSWV9IX2luY2wgMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDx0ZXJtLmg+CisKKyNkZWZpbmUgTUFYX1VTRVMJMzIKKyNkZWZpbmUgTUFYX0NST1NTTElOS1MJMTYKKwordHlwZWRlZiBzdHJ1Y3QgZW50cnkgeworCVRFUk1UWVBFCXR0ZXJtOworCXVuc2lnbmVkCW51c2VzOworCXN0cnVjdAorICAgICAgICB7CisJICAgIGNoYXIJCSpuYW1lOworCSAgICBzdHJ1Y3QgZW50cnkJKmxpbms7CisJICAgIGxvbmcJCWxpbmU7CisgICAgICAgIH0KKwl1c2VzW01BWF9VU0VTXTsKKwlpbnQJCW5jcm9zc2xpbmtzOworCXN0cnVjdCBlbnRyeQkqY3Jvc3NsaW5rc1tNQVhfQ1JPU1NMSU5LU107CisJbG9uZwkJY3N0YXJ0LCBjZW5kOworCWxvbmcJCXN0YXJ0bGluZTsKKwlzdHJ1Y3QgZW50cnkJKm5leHQ7CisJc3RydWN0IGVudHJ5CSpsYXN0OworfQorRU5UUlk7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworI2RlZmluZSBOVU1fQk9PTEVBTlModHApICh0cCktPm51bV9Cb29sZWFucworI2RlZmluZSBOVU1fTlVNQkVSUyh0cCkgICh0cCktPm51bV9OdW1iZXJzCisjZGVmaW5lIE5VTV9TVFJJTkdTKHRwKSAgKHRwKS0+bnVtX1N0cmluZ3MKKyNkZWZpbmUgRVhUX05BTUVTKHRwLGksbGltaXQsaW5kZXgsdGFibGUpIChpID49IGxpbWl0KSA/IHRwLT5leHRfTmFtZXNbaW5kZXhdIDogdGFibGVbaV0KKyNlbHNlCisjZGVmaW5lIE5VTV9CT09MRUFOUyh0cCkgQk9PTENPVU5UCisjZGVmaW5lIE5VTV9OVU1CRVJTKHRwKSAgTlVNQ09VTlQKKyNkZWZpbmUgTlVNX1NUUklOR1ModHApICBTVFJDT1VOVAorI2RlZmluZSBFWFRfTkFNRVModHAsaSxsaW1pdCxpbmRleCx0YWJsZSkgdGFibGVbaV0KKyNlbmRpZgorCisjZGVmaW5lIE5VTV9FWFRfTkFNRVModHApICgodHApLT5leHRfQm9vbGVhbnMgKyAodHApLT5leHRfTnVtYmVycyArICh0cCktPmV4dF9TdHJpbmdzKQorCisjZGVmaW5lIGZvcl9lYWNoX2Jvb2xlYW4obix0cCkgZm9yKG4gPSAwOyBuIDwgTlVNX0JPT0xFQU5TKHRwKTsgbisrKQorI2RlZmluZSBmb3JfZWFjaF9udW1iZXIobix0cCkgIGZvcihuID0gMDsgbiA8IE5VTV9OVU1CRVJTKHRwKTsgIG4rKykKKyNkZWZpbmUgZm9yX2VhY2hfc3RyaW5nKG4sdHApICBmb3IobiA9IDA7IG4gPCBOVU1fU1RSSU5HUyh0cCk7ICBuKyspCisKKyNkZWZpbmUgRXh0Qm9vbG5hbWUodHAsaSxuYW1lcykgRVhUX05BTUVTKHRwLCBpLCBCT09MQ09VTlQsIChpIC0gKHRwLT5udW1fQm9vbGVhbnMgLSB0cC0+ZXh0X0Jvb2xlYW5zKSksIG5hbWVzKQorI2RlZmluZSBFeHROdW1uYW1lKHRwLGksbmFtZXMpICBFWFRfTkFNRVModHAsIGksIE5VTUNPVU5ULCAoaSAtICh0cC0+bnVtX051bWJlcnMgLSB0cC0+ZXh0X051bWJlcnMpKSArIHRwLT5leHRfQm9vbGVhbnMsIG5hbWVzKQorI2RlZmluZSBFeHRTdHJuYW1lKHRwLGksbmFtZXMpICBFWFRfTkFNRVModHAsIGksIFNUUkNPVU5ULCAoaSAtICh0cC0+bnVtX1N0cmluZ3MgLSB0cC0+ZXh0X1N0cmluZ3MpKSArICh0cC0+ZXh0X051bWJlcnMgKyB0cC0+ZXh0X0Jvb2xlYW5zKSwgbmFtZXMpCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoRU5UUlkgKikgX25jX2hlYWQ7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKEVOVFJZICopIF9uY190YWlsOworI2RlZmluZSBmb3JfZW50cnlfbGlzdChxcCkJZm9yIChxcCA9IF9uY19oZWFkOyBxcDsgcXAgPSBxcC0+bmV4dCkKKworI2RlZmluZSBNQVhfTElORQkxMzIKKworI2RlZmluZSBOVUxMSE9PSyAgICAgICAgKGJvb2woKikoRU5UUlkgKikpMAorCisvKgorICogTm90ZSB0aGF0IFdBTlRFRCBhbmQgUFJFU0VOVCBhcmUgbm90IHNpbXBsZSBpbnZlcnNlcyEgIElmIGEgY2FwYWJpbGl0eQorICogaGFzIGJlZW4gZXhwbGljaXRseSBjYW5jZWxsZWQsIGl0J3Mgbm90IGNvbnNpZGVyZWQgV0FOVEVELgorICovCisjZGVmaW5lIFdBTlRFRChzKQkoKHMpID09IEFCU0VOVF9TVFJJTkcpCisjZGVmaW5lIFBSRVNFTlQocykJKCgocykgIT0gQUJTRU5UX1NUUklORykgJiYgKChzKSAhPSBDQU5DRUxMRURfU1RSSU5HKSkKKworI2RlZmluZSBBTkRNSVNTSU5HKHAscSkgXAorCQl7aWYgKFBSRVNFTlQocCkgJiYgIVBSRVNFTlQocSkpIF9uY193YXJuaW5nKCNwICIgYnV0IG5vICIgI3EpO30KKworI2RlZmluZSBQQUlSRUQocCxxKSBcCisJCXsgXAorCQlpZiAoUFJFU0VOVChxKSAmJiAhUFJFU0VOVChwKSkgXAorCQkJX25jX3dhcm5pbmcoI3EgIiBidXQgbm8gIiAjcCk7IFwKKwkJaWYgKFBSRVNFTlQocCkgJiYgIVBSRVNFTlQocSkpIFwKKwkJCV9uY193YXJuaW5nKCNwICIgYnV0IG5vICIgI3EpOyBcCisJCX0KKworLyogYWxsb2NfZW50cnkuYzogZWxlbWVudGFyeSBhbGxvY2F0aW9uIGNvZGUgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChFTlRSWSAqKSBfbmNfY29weV9lbnRyeSAoRU5UUlkgKm9sZHApOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3NhdmVfc3RyIChjb25zdCBjaGFyICpjb25zdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2luaXRfZW50cnkgKFRFUk1UWVBFICpjb25zdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX21lcmdlX2VudHJ5IChURVJNVFlQRSAqY29uc3QsIFRFUk1UWVBFICpjb25zdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3dyYXBfZW50cnkgKEVOVFJZICpjb25zdCwgYm9vbCk7CisKKy8qIGFsbG9jX3R0eXBlLmM6IGVsZW1lbnRhcnkgYWxsb2NhdGlvbiBjb2RlICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2FsaWduX3Rlcm10eXBlIChURVJNVFlQRSAqLCBURVJNVFlQRSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfY29weV90ZXJtdHlwZSAoVEVSTVRZUEUgKiwgVEVSTVRZUEUgKik7CisKKy8qIGZyZWVfdHR5cGUuYzogZWxlbWVudGFyeSBhbGxvY2F0aW9uIGNvZGUgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZnJlZV90ZXJtdHlwZSAoVEVSTVRZUEUgKik7CisKKy8qIGxpYl9hY3MuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19pbml0X2FjcyAodm9pZCk7CS8qIGNvcnJlc3BvbmRzIHRvIHRyYWRpdGlvbmFsICdpbml0X2FjcygpJyAqLworCisvKiBsaWJfdGVybWNhcC5jOiB0cmltIHNncjAgc3RyaW5nIGZvciB0ZXJtY2FwIHVzZXJzICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfdHJpbV9zZ3IwIChURVJNVFlQRSAqKTsKKworLyogcGFyc2VfZW50cnkuYzogZW50cnktcGFyc2luZyBjb2RlICovCisjaWYgTkNVUlNFU19YTkFNRVMKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoYm9vbCkgX25jX3VzZXJfZGVmaW5hYmxlOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihib29sKSBfbmNfZGlzYWJsZV9wZXJpb2Q7CisjZW5kaWYKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19wYXJzZV9lbnRyeSAoRU5UUlkgKiwgaW50LCBib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19jYXBjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyogd3JpdGVfZW50cnkuYzogd3JpdGluZyBhbiBlbnRyeSB0byB0aGUgZmlsZSBzeXN0ZW0gKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc2V0X3dyaXRlZGlyIChjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY193cml0ZV9lbnRyeSAoVEVSTVRZUEUgKmNvbnN0KTsKKworLyogY29tcF9wYXJzZS5jOiBlbnRyeSBsaXN0IGhhbmRsaW5nICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3JlYWRfZW50cnlfc291cmNlIChGSUxFKiwgY2hhciosIGludCwgYm9vbCwgYm9vbCAoKikoRU5UUlkqKSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX2VudHJ5X21hdGNoIChjaGFyICosIGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmVzb2x2ZV91c2VzIChib29sKTsgLyogb2JzIDIwMDQwNzA1ICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmVzb2x2ZV91c2VzMiAoYm9vbCwgYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVfZW50cmllcyAoRU5UUlkgKik7CitleHRlcm4gTkNVUlNFU19JTVBFWFAgdm9pZCBOQ1VSU0VTX0FQSSAoKl9uY19jaGVja190ZXJtdHlwZSkoVEVSTVRZUEUgKik7IC8qIG9icyAyMDA0MDcwNSAqLworZXh0ZXJuIE5DVVJTRVNfSU1QRVhQIHZvaWQgTkNVUlNFU19BUEkgKCpfbmNfY2hlY2tfdGVybXR5cGUyKShURVJNVFlQRSAqLCBib29sKTsKKworLyogdHJhY2VfeG5hbWVzLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdHJhY2VfeG5hbWVzIChURVJNVFlQRSAqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5DVVJTRVNfVEVSTV9FTlRSWV9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvdGVybWNhcC5oLmluIGIvbmN1cnNlcy01LjcvaW5jbHVkZS90ZXJtY2FwLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkYzMxMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L2luY2x1ZGUvdGVybWNhcC5oLmluCkBAIC0wLDAgKzEsNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IHRlcm1jYXAuaC5pbix2IDEuMTYgMjAwMS8wMy8yNCAyMTo1MzoyNyB0b20gRXhwICQgKi8KKworI2lmbmRlZiBOQ1VSU0VTX1RFUk1DQVBfSF9pbmNsCisjZGVmaW5lIE5DVVJTRVNfVEVSTUNBUF9IX2luY2wJMQorCisjdW5kZWYgIE5DVVJTRVNfVkVSU0lPTgorI2RlZmluZSBOQ1VSU0VTX1ZFUlNJT04gIkBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAiCisKKyNpbmNsdWRlIDxuY3Vyc2VzX2RsbC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyN1bmRlZiAgTkNVUlNFU19DT05TVCAKKyNkZWZpbmUgTkNVUlNFU19DT05TVCBATkNVUlNFU19DT05TVEAgCisKKyN1bmRlZiAgTkNVUlNFU19PU1BFRUQgCisjZGVmaW5lIE5DVVJTRVNfT1NQRUVEIEBOQ1VSU0VTX09TUEVFREAgCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoY2hhcikgUEM7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGNoYXIgKikgVVA7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGNoYXIgKikgQkM7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfT1NQRUVEKSBvc3BlZWQ7IAorCisjaWYgIWRlZmluZWQoTkNVUlNFU19URVJNX0hfaW5jbCkKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRnZXRzdHIgKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBjaGFyICoqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIHRnb3RvIChjb25zdCBjaGFyICosIGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRnZXRlbnQgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIHRnZXRmbGFnIChOQ1VSU0VTX0NPTlNUIGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0Z2V0bnVtIChOQ1VSU0VTX0NPTlNUIGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSB0cHV0cyAoY29uc3QgY2hhciAqLCBpbnQsIGludCAoKikoaW50KSk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5DVVJTRVNfVEVSTUNBUF9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L2luY2x1ZGUvdGljLmggYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL3RpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTAzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9pbmNsdWRlL3RpYy5oCkBAIC0wLDAgKzEsMzMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYgb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAkSWQ6IHRpYy5oLHYgMS42MiAyMDA3LzA4LzExIDE2OjEyOjQzIHRvbSBFeHAgJAorICoJdGljLmggLSBHbG9iYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3R1cmVzIGZvciB0aGUgdGVybWluZm8KKyAqCQkJY29tcGlsZXIuCisgKi8KKworI2lmbmRlZiBfX1RJQ19ICisjZGVmaW5lIF9fVElDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CS8qIGZvciB0aGUgX3RyYWNlZigpIHByb3RvdHlwZSwgRVJSL09LLCBib29sIGRlZnMgKi8KKworLyoKKyoqIFRoZSBmb3JtYXQgb2YgY29tcGlsZWQgdGVybWluZm8gZmlsZXMgaXMgYXMgZm9sbG93czoKKyoqCisqKgkJSGVhZGVyICgxMiBieXRlcyksIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gZ2l2ZW4gYmVsb3cKKyoqCQlOYW1lcyBTZWN0aW9uLCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgdGVybWluYWwKKyoqCQlCb29sZWFuIFNlY3Rpb24sIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlCisqKgkJCQlib29sZWFuIGNhcGFiaWxpdGllcworKioJCQkJQSBudWxsIGJ5dGUgbWF5IGJlIGluc2VydGVkIGhlcmUgdG8gbWFrZQorKioJCQkJc3VyZSB0aGF0IHRoZSBOdW1iZXIgU2VjdGlvbiBiZWdpbnMgb24gYW4KKyoqCQkJCWV2ZW4gd29yZCBib3VuZGFyeS4KKyoqCQlOdW1iZXIgU2VjdGlvbiwgY29udGFpbmluZyB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgbnVtZXJpYworKioJCQkJY2FwYWJpbGl0aWVzLCBlYWNoIGFzIGEgc2hvcnQgaW50ZWdlcgorKioJCVN0cmluZyBTZWN0aW9uLCBjb250YWluaW5nIHNob3J0IGludGVnZXIgb2Zmc2V0cyBpbnRvIHRoZQorKioJCQkJU3RyaW5nIFRhYmxlLCBvbmUgcGVyIHN0cmluZyBjYXBhYmlsaXR5CisqKgkJU3RyaW5nIFRhYmxlLCBjb250YWluaW5nIHRoZSBhY3R1YWwgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nCisqKgkJCQljYXBhYmlsaXRpZXMuCisqKgorKioJTk9URSB0aGF0IGFsbCBzaG9ydCBpbnRlZ2VycyBpbiB0aGUgZmlsZSBhcmUgc3RvcmVkIHVzaW5nIFZBWC9QRFAtc3R5bGUKKyoqCWJ5dGUtb3JkZXIsIGkuZS4sIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QuCisqKgorKioJVGhlcmUgaXMgbm8gc3RydWN0dXJlIGRlZmluaXRpb24gaGVyZSBiZWNhdXNlIGl0IHdvdWxkIG9ubHkgY29uZnVzZQorKioJbWF0dGVycy4gIFRlcm1pbmZvIGZvcm1hdCBpcyBhIHJhdyBieXRlIGxheW91dCwgbm90IGEgc3RydWN0dXJlCisqKglkdW1wLiAgSWYgeW91IGhhcHBlbiB0byBiZSBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZSB3aXRoIDE2LWJpdAorKioJc2hvcnRzIHRoYXQgcmVxdWlyZXMgbm8gcGFkZGluZyBiZXR3ZWVuIHNob3J0IG1lbWJlcnMgaW4gYSBzdHJ1Y3QsCisqKgl0aGVuIHRoZXJlIGlzIGEgbmF0dXJhbCBDIHN0cnVjdHVyZSB0aGF0IGNhcHR1cmVzIHRoZSBoZWFkZXIsIGJ1dAorKioJbm90IHZlcnkgaGVscGZ1bGx5LgorKi8KKworI2RlZmluZSBNQUdJQwkJMDQzMgkvKiBmaXJzdCB0d28gYnl0ZXMgb2YgYSBjb21waWxlZCBlbnRyeSAqLworCisjdW5kZWYgIEJZVEUKKyNkZWZpbmUgQllURShwLG4pCSh1bnNpZ25lZCBjaGFyKSgocClbbl0pCisKKyNkZWZpbmUgSVNfTkVHMShwKQkoKEJZVEUocCwwKSA9PSAwMzc3KSAmJiAoQllURShwLDEpID09IDAzNzcpKQorI2RlZmluZSBJU19ORUcyKHApCSgoQllURShwLDApID09IDAzNzYpICYmIChCWVRFKHAsMSkgPT0gMDM3NykpCisjZGVmaW5lIExPV19NU0IocCkJKEJZVEUocCwwKSArIDI1NipCWVRFKHAsMSkpCisKKyNkZWZpbmUgSVNfVElDX01BR0lDKHApCShMT1dfTVNCKHApID09IE1BR0lDKQorCisvKgorICogVGhlICJtYXhpbXVtIiBoZXJlIGlzIG1pc2xlYWRpbmc7IFhTSSBndWFyYW50ZWVzIG1pbmltdW0gdmFsdWVzLCB3aGljaCBhCisgKiBnaXZlbiBpbXBsZW1lbnRhdGlvbiBtYXkgZXhjZWVkLgorICovCisjZGVmaW5lIE1BWF9OQU1FX1NJWkUJNTEyCS8qIG1heGltdW0gbGVnYWwgbmFtZSBmaWVsZCBzaXplIChYU0k6MTI3KSAqLworI2RlZmluZSBNQVhfRU5UUllfU0laRQk0MDk2CS8qIG1heGltdW0gbGVnYWwgZW50cnkgc2l6ZSAqLworCisvKgorICogVGhlIG1heGltdW0gc2l6ZSBvZiBpbmRpdmlkdWFsIG5hbWUgb3IgYWxpYXMgaXMgZ3VhcmFudGVlZCBpbiBYU0kgdG8gYmUgYXQKKyAqIGxlYXN0IDE0LCBzaW5jZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBvbGRlciBmaWxlbmFtZSBsZW5ndGhzLiAgTmV3ZXIKKyAqIHN5c3RlbXMgYWxsb3cgbG9uZ2VyIGFsaWFzZXMsIHRob3VnaCBub3QgbWFueSB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgYXJlCisgKiB3cml0dGVuIHRvIHVzZSB0aGVtLiAgVGhlIE1BWF9BTElBUyBzeW1ib2wgaXMgdXNlZCBmb3Igd2FybmluZ3MuCisgKi8KKyNpZiBIQVZFX0xPTkdfRklMRV9OQU1FUworI2RlZmluZSBNQVhfQUxJQVMJMzIJLyogc21hbGxlciB0aGFuIFBPU0lYIG1pbmltdW0gZm9yIFBBVEhfTUFYICovCisjZWxzZQorI2RlZmluZSBNQVhfQUxJQVMJMTQJLyogU1ZyMyBmaWxlbmFtZSBsZW5ndGggKi8KKyNlbmRpZgorCisvKiBsb2NhdGlvbiBvZiB1c2VyJ3MgcGVyc29uYWwgaW5mbyBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJJVkFURV9JTkZPCSIlcy8udGVybWluZm8iCS8qIHBsdWcgZ2V0ZW52KCJIT01FIikgaW50byAlcyAqLworCisvKgorICogU29tZSB0cmFjZXMgYXJlIGRlc2lnbmVkIHRvIGJlIHVzZWQgdmlhIHRpYydzIHZlcmJvc2Ugb3B0aW9uIChhbmQgc2ltaWxhciBpbgorICogaW5mb2NtcCBhbmQgdG9lKSByYXRoZXIgdGhhbiB0aGUgJ3RyYWNlKCknIGZ1bmN0aW9uLiAgU28gd2UgdXNlIHRoZSBiaXRzCisgKiBhYm92ZSB0aGUgbm9ybWFsIHRyYWNlKCkgcGFyYW1ldGVyIGFzIGEgZGVidWctbGV2ZWwuCisgKi8KKworI2RlZmluZSBNQVhfREVCVUdfTEVWRUwgMTUKKyNkZWZpbmUgREVCVUdfTEVWRUwobikJKChuKSA8PCBUUkFDRV9TSElGVCkKKworI2RlZmluZSBzZXRfdHJhY2VfbGV2ZWwobikgXAorCV9uY190cmFjaW5nICY9IERFQlVHX0xFVkVMKE1BWF9ERUJVR19MRVZFTCksIFwKKwlfbmNfdHJhY2luZyB8PSBERUJVR19MRVZFTChuKQorCisjaWZkZWYgVFJBQ0UKKyNkZWZpbmUgREVCVUcobiwgYSkJaWYgKF9uY190cmFjaW5nID49IERFQlVHX0xFVkVMKG4pKSBfdHJhY2VmIGEKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGEpCS8qbm90aGluZyovCisjZW5kaWYKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUih1bnNpZ25lZCkgX25jX3RyYWNpbmc7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3RyYWNlZiAoY2hhciAqLCAuLi4pIEdDQ19QUklOVEZMSUtFKDEsMik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfdmlzYnVmIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc2J1ZjIgKGludCwgY29uc3QgY2hhciAqKTsKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgdHlwZXMgb2YgdG9rZW5zIHJldHVybmVkIGJ5IHRoZSBzY2FubmVyLiAgVGhlIGZpcnN0CisgKiB0aHJlZSBhcmUgYWxzbyB1c2VkIGluIHRoZSBoYXNoIHRhYmxlIG9mIGNhcGFiaWxpdHkgbmFtZXMuICBUaGUgc2Nhbm5lcgorICogcmV0dXJucyBvbmUgb2YgdGhlc2UgdmFsdWVzIGFmdGVyIGxvYWRpbmcgdGhlIHNwZWNpZmljcyBpbnRvIHRoZSBnbG9iYWwKKyAqIHN0cnVjdHVyZSBjdXJyX3Rva2VuLgorICovCisKKyNkZWZpbmUgQk9PTEVBTiAwCQkvKiBCb29sZWFuIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgTlVNQkVSIDEJCS8qIE51bWVyaWMgY2FwYWJpbGl0eSAqLworI2RlZmluZSBTVFJJTkcgMgkJLyogU3RyaW5nLXZhbHVlZCBjYXBhYmlsaXR5ICovCisjZGVmaW5lIENBTkNFTCAzCQkvKiBDYXBhYmlsaXR5IHRvIGJlIGNhbmNlbGxlZCBpbiBmb2xsb3dpbmcgdGMncyAqLworI2RlZmluZSBOQU1FUyAgNAkJLyogVGhlIG5hbWVzIGZvciBhIHRlcm1pbmFsIHR5cGUgKi8KKyNkZWZpbmUgVU5ERUYgIDUJCS8qIFVuZGVmaW5lZCAqLworCisjZGVmaW5lIE5PX1BVU0hCQUNLCS0xCS8qIHVzZWQgaW4gcHVzaHR5cGUgdG8gaW5kaWNhdGUgbm8gcHVzaGJhY2sgKi8KKworCS8qCisJICoJVGhlIGdsb2JhbCBzdHJ1Y3R1cmUgaW4gd2hpY2ggdGhlIHNwZWNpZmljIHBhcnRzIG9mIGEKKwkgKglzY2FubmVkIHRva2VuIGFyZSByZXR1cm5lZC4KKwkgKgorCSAqLworCitzdHJ1Y3QgdG9rZW4KK3sKKwljaGFyCSp0a19uYW1lOwkJLyogbmFtZSBvZiBjYXBhYmlsaXR5ICovCisJaW50CXRrX3ZhbG51bWJlcjsJLyogdmFsdWUgb2YgY2FwYWJpbGl0eSAoaWYgYSBudW1iZXIpICovCisJY2hhcgkqdGtfdmFsc3RyaW5nOwkvKiB2YWx1ZSBvZiBjYXBhYmlsaXR5IChpZiBhIHN0cmluZykgKi8KK307CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoc3RydWN0IHRva2VuKQlfbmNfY3Vycl90b2tlbjsKKworCS8qCisJICogT2Zmc2V0cyB0byBzdHJpbmcgY2FwYWJpbGl0aWVzLCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ua2V5CisJICogY29kZXMuCisJICovCitzdHJ1Y3QgdGluZm9fZmtleXMgeworCXVuc2lnbmVkIG9mZnNldDsKKwljaHR5cGUgY29kZTsKKwl9OworCisjaWYJQlJPS0VOX0xJTktFUgorCisjZGVmaW5lCV9uY190aW5mb19ma2V5cwlfbmNfdGluZm9fZmtleXNmKCkKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBzdHJ1Y3QgdGluZm9fZmtleXMgKikgX25jX3RpbmZvX2ZrZXlzZiAodm9pZCk7CisKKyNlbHNlCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoY29uc3Qgc3RydWN0IHRpbmZvX2ZrZXlzKSBfbmNfdGluZm9fZmtleXNbXTsKKworI2VuZGlmCisKKwkvKgorCSAqIFRoZSBmaWxlIGNvbXBfY2FwdGFiLmMgY29udGFpbnMgYW4gYXJyYXkgb2YgdGhlc2Ugc3RydWN0dXJlcywgb25lCisJICogcGVyIHBvc3NpYmxlIGNhcGFiaWxpdHkuICBUaGVzZSBhcmUgaW5kZXhlZCBieSBhIGhhc2ggdGFibGUgYXJyYXkgb2YKKwkgKiBwb2ludGVycyB0byB0aGUgc2FtZSBzdHJ1Y3R1cmVzIGZvciB1c2UgYnkgdGhlIHBhcnNlci4KKwkgKi8KKworc3RydWN0IG5hbWVfdGFibGVfZW50cnkKK3sKKwljb25zdCBjaGFyICpudGVfbmFtZTsJLyogbmFtZSB0byBoYXNoIG9uICovCisJaW50CW50ZV90eXBlOwkvKiBCT09MRUFOLCBOVU1CRVIgb3IgU1RSSU5HICovCisJc2hvcnQJbnRlX2luZGV4OwkvKiBpbmRleCBvZiBhc3NvY2lhdGVkIHZhcmlhYmxlIGluIGl0cyBhcnJheSAqLworCXNob3J0CW50ZV9saW5rOwkvKiBpbmRleCBpbiB0YWJsZSBvZiBuZXh0IGhhc2gsIG9yIC0xICovCit9OworCitzdHJ1Y3QgYWxpYXMKK3sKKwljb25zdCBjaGFyCSpmcm9tOworCWNvbnN0IGNoYXIJKnRvOworCWNvbnN0IGNoYXIJKnNvdXJjZTsKK307CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqKSBfbmNfZ2V0X3RhYmxlIChib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBzaG9ydCAqKSBfbmNfZ2V0X2hhc2hfdGFibGUgKGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IHN0cnVjdCBhbGlhcyAqKSBfbmNfZ2V0X2FsaWFzX3RhYmxlIChib29sKTsKKworI2RlZmluZSBOT1RGT1VORAkoKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICopIDApCisKKy8qIG91dC1vZi1iYW5kIHZhbHVlcyBmb3IgcmVwcmVzZW50aW5nIGFic2VudCBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgQUJTRU5UX0JPT0xFQU4JCSgoc2lnbmVkIGNoYXIpLTEpCS8qIDI1NSAqLworI2RlZmluZSBBQlNFTlRfTlVNRVJJQwkJKC0xKQorI2RlZmluZSBBQlNFTlRfU1RSSU5HCQkoY2hhciAqKTAKKworLyogb3V0LW9mLWJhbmQgdmFsdWVzIGZvciByZXByZXNlbnRpbmcgY2FuY2VscyAqLworI2RlZmluZSBDQU5DRUxMRURfQk9PTEVBTgkoKHNpZ25lZCBjaGFyKS0yKQkvKiAyNTQgKi8KKyNkZWZpbmUgQ0FOQ0VMTEVEX05VTUVSSUMJKC0yKQorI2RlZmluZSBDQU5DRUxMRURfU1RSSU5HCShjaGFyICopKC0xKQorCisjZGVmaW5lIFZBTElEX0JPT0xFQU4ocykgKCh1bnNpZ25lZCBjaGFyKShzKSA8PSAxKSAvKiByZWplY3QgIi0xIiAqLworI2RlZmluZSBWQUxJRF9OVU1FUklDKHMpICgocykgPj0gMCkKKyNkZWZpbmUgVkFMSURfU1RSSU5HKHMpICAoKHMpICE9IENBTkNFTExFRF9TVFJJTkcgJiYgKHMpICE9IEFCU0VOVF9TVFJJTkcpCisKKy8qIHRlcm1jYXAgZW50cmllcyBsb25nZXIgdGhhbiB0aGlzIG1heSBicmVhayBvbGQgYmluYXJpZXMgKi8KKyNkZWZpbmUgTUFYX1RFUk1DQVBfTEVOR1RICTEwMjMKKworLyogdGhpcyBpcyBhIGRvY3VtZW50ZWQgbGltaXRhdGlvbiBvZiB0ZXJtaW5mbyAqLworI2RlZmluZSBNQVhfVEVSTUlORk9fTEVOR1RICTQwOTYKKworI2lmbmRlZiBURVJNSU5GTworI2RlZmluZSBURVJNSU5GTyAiL3Vzci9zaGFyZS90ZXJtaW5mbyIKKyNlbmRpZgorCisvKiBhY2Nlc3MuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHVuc2lnbmVkKSBfbmNfcGF0aGxhc3QgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX2lzX2Fic19wYXRoIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19pc19kaXJfcGF0aCAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfaXNfZmlsZV9wYXRoIChjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX2Jhc2VuYW1lIChjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3Jvb3RuYW1lIChjaGFyICopOworCisvKiBjb21wX2hhc2guYzogbmFtZSBsb29rdXAgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKSBfbmNfZmluZF9lbnRyeQorCShjb25zdCBjaGFyICosIGNvbnN0IHNob3J0ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICopIF9uY19maW5kX3R5cGVfZW50cnkKKwkoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICopOworCisvKiBjb21wX3NjYW4uYzogbGV4aWNhbCBhbmFseXNpcyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgIF9uY19nZXRfdG9rZW4gKGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19wYW5pY19tb2RlIChjaGFyKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfcHVzaF90b2tlbiAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfcmVzZXRfaW5wdXQgKEZJTEUgKiwgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBfbmNfY3Vycl9jb2w7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX2N1cnJfbGluZTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBfbmNfc3ludGF4OworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihsb25nKSBfbmNfY29tbWVudF9lbmQ7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpIF9uY19jb21tZW50X3N0YXJ0OworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihsb25nKSBfbmNfY3Vycl9maWxlX3BvczsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIobG9uZykgX25jX3N0YXJ0X2xpbmU7CisjZGVmaW5lIFNZTl9URVJNSU5GTwkwCisjZGVmaW5lIFNZTl9URVJNQ0FQCTEKKworLyogY29tcF9lcnJvci5jOiB3YXJuaW5nICYgYWJvcnQgbWVzc2FnZXMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY19nZXRfc291cmNlICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZXJyX2Fib3J0IChjb25zdCBjaGFyICpjb25zdCwuLi4pIEdDQ19QUklOVEZMSUtFKDEsMikgR0NDX05PUkVUVVJOOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19nZXRfdHlwZSAoY2hhciAqbmFtZSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NldF9zb3VyY2UgKGNvbnN0IGNoYXIgKmNvbnN0KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc2V0X3R5cGUgKGNvbnN0IGNoYXIgKmNvbnN0KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc3lzZXJyX2Fib3J0IChjb25zdCBjaGFyICpjb25zdCwuLi4pIEdDQ19QUklOVEZMSUtFKDEsMikgR0NDX05PUkVUVVJOOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY193YXJuaW5nIChjb25zdCBjaGFyICpjb25zdCwuLi4pIEdDQ19QUklOVEZMSUtFKDEsMik7CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGJvb2wpIF9uY19zdXBwcmVzc193YXJuaW5nczsKKworLyogY29tcF9leHBhbmQuYzogZXhwYW5kIHN0cmluZyBpbnRvIHJlYWRhYmxlIGZvcm0gKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY190aWNfZXhwYW5kIChjb25zdCBjaGFyICosIGJvb2wsIGludCk7CisKKy8qIGNvbXBfc2Nhbi5jOiBkZWNvZGUgc3RyaW5nIGZyb20gcmVhZGFibGUgZm9ybSAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3RyYW5zX3N0cmluZyAoY2hhciAqLCBjaGFyICopOworCisvKiBjYXB0b2luZm8uYzogY2FwYWJpbGl0eSBjb252ZXJzaW9uICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfY2FwdG9pbmZvIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50IGNvbnN0KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19pbmZvdG9jYXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgY29uc3QpOworCisvKiBob21lX3Rlcm1pbmZvLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19ob21lX3Rlcm1pbmZvICh2b2lkKTsKKworLyogbGliX3RwYXJtLmMgKi8KKyNkZWZpbmUgTlVNX1BBUk0gOQorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX3RwYXJtX2VycjsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3RwYXJtX2FuYWx5emUoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQgKik7CisKKy8qIGxpYl90cHV0cy5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX251bGxzX3NlbnQ7CQkvKiBBZGQgb25lIGZvciBldmVyeSBudWxsIHNlbnQgKi8KKworLyogY29tcF9tYWluLmM6IGNvbXBpbGVyIG1haW4gKi8KK2V4dGVybiBjb25zdCBjaGFyICogX25jX3Byb2duYW1lOworCisvKiBkYl9pdGVyYXRvci5jICovCit0eXBlZGVmIGVudW0geworICAgIGRiZFRJQyA9IDAsCisjaWYgVVNFX0RBVEFCQVNFCisgICAgZGJkRW52T25jZSwKKyAgICBkYmRIb21lLAorICAgIGRiZEVudkxpc3QsCisgICAgZGJkQ2ZnTGlzdCwKKyAgICBkYmRDZmdPbmNlLAorI2VuZGlmCisjaWYgVVNFX1RFUk1DQVAKKyAgICBkYmRFbnZPbmNlMiwKKyAgICBkYmRFbnZMaXN0MiwKKyAgICBkYmRDZmdMaXN0MiwKKyNlbmRpZgorICAgIGRiZExBU1QKK30gREJESVJTOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfbmV4dF9kYihEQkRJUlMgKiwgaW50ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3RpY19kaXIgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZpcnN0X2RiKERCRElSUyAqLCBpbnQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2xhc3RfZGIodm9pZCk7CisKKy8qIHdyaXRlX2VudHJ5LmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY190aWNfd3JpdHRlbiAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1RJQ19IICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbmNsdWRlL3VuY3RybC5oLmluIGIvbmN1cnNlcy01LjcvaW5jbHVkZS91bmN0cmwuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ3NGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5jbHVkZS91bmN0cmwuaC5pbgpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHVuY3RybC5oCisgKgorICogRGlzcGxheSBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIGEgY29udHJvbCBjaGFyYWN0ZXIuCisgKiBDb250cm9sIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBpbiBjYXJldCBub3RhdGlvbiAoXngpLCBERUxFVEUgaXMgZGlzcGxheWVkCisgKiBhcyBePy4gUHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBhcyBpcy4KKyAqLworCisvKiAkSWQ6IHVuY3RybC5oLmluLHYgMS4xMCAyMDAxLzAzLzI0IDIxOjUzOjI1IHRvbSBFeHAgJCAqLworCisjaWZuZGVmIE5DVVJTRVNfVU5DVFJMX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX1VOQ1RSTF9IX2luY2wJMQorCisjdW5kZWYgIE5DVVJTRVNfVkVSU0lPTgorI2RlZmluZSBOQ1VSU0VTX1ZFUlNJT04gIkBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPGN1cnNlcy5oPgorCisjdW5kZWYgdW5jdHJsCitOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgdW5jdHJsIChjaHR5cGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTkNVUlNFU19VTkNUUkxfSF9pbmNsICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9pbnN0YWxsLXNoIGIvbmN1cnNlcy01LjcvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjJmYTljCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvaW5zdGFsbC1zaApAQCAtMCwwICsxLDI5NCBAQAorIyEgL2Jpbi9zaAorIworIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKKyMKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAorIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgorIworIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCisjIGZyb20gc2NyYXRjaC4gIEl0IGNhbiBvbmx5IGluc3RhbGwgb25lIGZpbGUgYXQgYSB0aW1lLCBhIHJlc3RyaWN0aW9uCisjIHNoYXJlZCB3aXRoIG1hbnkgT1MncyBpbnN0YWxsIHByb2dyYW1zLgorCisKKyMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAorCisjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCitkb2l0PSIke0RPSVRQUk9HLX0iCisKKworIyBwdXQgaW4gYWJzb2x1dGUgcGF0aHMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7IG9yIHVzZSBlbnYuIHZhcnMuCisKK212cHJvZz0iJHtNVlBST0ctbXZ9IgorY3Bwcm9nPSIke0NQUFJPRy1jcH0iCitjaG1vZHByb2c9IiR7Q0hNT0RQUk9HLWNobW9kfSIKK2Nob3ducHJvZz0iJHtDSE9XTlBST0ctY2hvd259IgorY2hncnBwcm9nPSIke0NIR1JQUFJPRy1jaGdycH0iCitzdHJpcHByb2c9IiR7U1RSSVBQUk9HLXN0cmlwfSIKK3JtcHJvZz0iJHtSTVBST0ctcm19IgorbWtkaXJwcm9nPSIke01LRElSUFJPRy1ta2Rpcn0iCisKK3RyYW5zZm9ybWJhc2VuYW1lPSIiCit0cmFuc2Zvcm1fYXJnPSIiCitpbnN0Y21kPSIkbXZwcm9nIgorY2htb2RjbWQ9IiRjaG1vZHByb2cgMDc1NSIKK2Nob3duY21kPSIiCitjaGdycGNtZD0iIgorc3RyaXBjbWQ9IiIKK3JtY21kPSIkcm1wcm9nIC1mIgorbXZjbWQ9IiRtdnByb2ciCitzcmM9IiIKK2RzdD0iIgorZGlyX2FyZz0iIgorCit3aGlsZSBbIHgiJDEiICE9IHggXTsgZG8KKyAgICBjYXNlICQxIGluCisJLWMpIGluc3RjbWQ9JGNwcHJvZworCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZCkgZGlyX2FyZz10cnVlCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1tKSBjaG1vZGNtZD0iJGNobW9kcHJvZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJICAgIHNoaWZ0CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS10PSopIHRyYW5zZm9ybWFyZz1gZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJKikgIGlmIFsgeCIkc3JjIiA9IHggXQorCSAgICB0aGVuCisJCXNyYz0kMQorCSAgICBlbHNlCisJCSMgdGhpcyBjb2xvbiBpcyB0byB3b3JrIGFyb3VuZCBhIDM4NkJTRCAvYmluL3NoIGJ1ZworCQk6CisJCWRzdD0kMQorCSAgICBmaQorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisgICAgZXNhYworZG9uZQorCitpZiBbIHgiJHNyYyIgPSB4IF0KK3RoZW4KKwllY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQiID4mMgorCWV4aXQgMQorZWxzZQorCToKK2ZpCisKK2lmIFsgeCIkZGlyX2FyZyIgIT0geCBdOyB0aGVuCisJZHN0PSRzcmMKKwlzcmM9IiIKKworCWlmIFsgLWQgIiRkc3QiIF07IHRoZW4KKwkJaW5zdGNtZD06CisJCWNobW9kY21kPSIiCisJZWxzZQorCQlpbnN0Y21kPSRta2RpcnByb2cKKwlmaQorZWxzZQorCisjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorCisJaWYgWyAtZiAiJHNyYyIgXSB8fCBbIC1kICIkc3JjIiBdCisJdGhlbgorCQk6CisJZWxzZQorCQllY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdCIgPiYyCisJCWV4aXQgMQorCWZpCisKKwlpZiBbIHgiJGRzdCIgPSB4IF0KKwl0aGVuCisJCWVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiID4mMgorCQlleGl0IDEKKwllbHNlCisJCToKKwlmaQorCisjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyBpZiB5b3VyIHN5c3RlbQorIyBkb2VzIG5vdCBsaWtlIGRvdWJsZSBzbGFzaGVzIGluIGZpbGVuYW1lcywgeW91IG1heSBuZWVkIHRvIGFkZCBzb21lIGxvZ2ljCisKKwlpZiBbIC1kICIkZHN0IiBdCisJdGhlbgorCQlkc3Q9JGRzdC9gYmFzZW5hbWUgIiRzcmMiYAorCWVsc2UKKwkJOgorCWZpCitmaQorCisjIyB0aGlzIHNlZCBjb21tYW5kIGVtdWxhdGVzIHRoZSBkaXJuYW1lIGNvbW1hbmQKK2RzdGRpcj1gZWNobyAiJGRzdCIgfCBzZWQgLWUgJ3MsW14vXSokLCw7cywvJCwsO3MsXiQsLiwnYAorCisjIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzLgorIyAgdGhpcyBwYXJ0IGlzIHRha2VuIGZyb20gTm9haCBGcmllZG1hbidzIG1raW5zdGFsbGRpcnMgc2NyaXB0CisKKyMgU2tpcCBsb3RzIG9mIHN0YXQgY2FsbHMgaW4gdGhlIHVzdWFsIGNhc2UuCitpZiBbICEgLWQgIiRkc3RkaXIiIF07IHRoZW4KK2RlZmF1bHRJRlM9JworCScKK0lGUz0iJHtJRlMtJGRlZmF1bHRJRlN9IgorCitvSUZTPSRJRlMKKyMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCitJRlM9JyUnCitzZXQgLSBgZWNobyAiJGRzdGRpciIgfCBzZWQgLWUgJ3NAL0AlQGcnIC1lICdzQF4lQC9AJ2AKK0lGUz0kb0lGUworCitwYXRoY29tcD0nJworCit3aGlsZSBbICQjIC1uZSAwIF0gOyBkbworCXBhdGhjb21wPSRwYXRoY29tcCQxCisJc2hpZnQKKworCWlmIFsgISAtZCAiJHBhdGhjb21wIiBdIDsKKyAgICAgICAgdGhlbgorCQkkbWtkaXJwcm9nICIkcGF0aGNvbXAiCisJZWxzZQorCQk6CisJZmkKKworCXBhdGhjb21wPSRwYXRoY29tcC8KK2RvbmUKK2ZpCisKK2lmIFsgeCIkZGlyX2FyZyIgIT0geCBdCit0aGVuCisJJGRvaXQgJGluc3RjbWQgIiRkc3QiICYmCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICIkZHN0IjsgZWxzZSA6IDsgZmkgJiYKKwlpZiBbIHgiJGNoZ3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgZWxzZSA6IDsgZmkgJiYKKwlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICIkZHN0IjsgZWxzZSA6IDsgZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICIkZHN0IjsgZWxzZSA6IDsgZmkKK2Vsc2UKKworIyBJZiB3ZSdyZSBnb2luZyB0byByZW5hbWUgdGhlIGZpbmFsIGV4ZWN1dGFibGUsIGRldGVybWluZSB0aGUgbmFtZSBub3cuCisKKwlpZiBbIHgiJHRyYW5zZm9ybWFyZyIgPSB4IF0KKwl0aGVuCisJCWRzdGZpbGU9YGJhc2VuYW1lICIkZHN0ImAKKwllbHNlCisJCWRzdGZpbGU9YGJhc2VuYW1lICIkZHN0IiAkdHJhbnNmb3JtYmFzZW5hbWUgfAorCQkJc2VkICR0cmFuc2Zvcm1hcmdgJHRyYW5zZm9ybWJhc2VuYW1lCisJZmkKKworIyBkb24ndCBhbGxvdyB0aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCisKKwlpZiBbIHgiJGRzdGZpbGUiID0geCBdCisJdGhlbgorCQlkc3RmaWxlPWBiYXNlbmFtZSAiJGRzdCJgCisJZWxzZQorCQk6CisJZmkKKworIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKworCWRzdHRtcD0kZHN0ZGlyLyNpbnN0LiQkIworCXJtdG1wPSRkc3RkaXIvI3JtLiQkIworCisjIFRyYXAgdG8gY2xlYW4gdXAgdGVtcCBmaWxlcyBhdCBleGl0LgorCisJdHJhcCAnc3RhdHVzPSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkc3RhdHVzJyAwCisJdHJhcCAnKGV4aXQgJD8pOyBleGl0JyAxIDIgMTMgMTUKKworIyBNb3ZlIG9yIGNvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lCisKKwkkZG9pdCAkaW5zdGNtZCAiJHNyYyIgIiRkc3R0bXAiICYmCisKKyMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cworCisjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgZWxzZSA6O2ZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IGVsc2UgOjtmaSAmJgorCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyBlbHNlIDo7ZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICIkZHN0dG1wIjsgZWxzZSA6O2ZpICYmCisKKyMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4gIFdlIHRyeSB0aGlzCisjIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZSBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24KKyMgZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlciByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cAorIyBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3IGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgorCit7CisJaWYgWyAtZiAiJGRzdGRpci8kZHN0ZmlsZSIgXQorCXRoZW4KKwkJJGRvaXQgJHJtY21kIC1mICIkZHN0ZGlyLyRkc3RmaWxlIiAyPi9kZXYvbnVsbCB8fAorCQkkZG9pdCAkbXZjbWQgLWYgIiRkc3RkaXIvJGRzdGZpbGUiICIkcm10bXAiIDI+L2Rldi9udWxsIHx8CisJCXsKKwkJICBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdGRpci8kZHN0ZmlsZSIgPiYyCisJCSAgKGV4aXQgMSk7IGV4aXQKKwkJfQorCWVsc2UKKwkJOgorCWZpCit9ICYmCisKKyMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKworCSRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3RkaXIvJGRzdGZpbGUiCisKK2ZpICYmCisKKyMgVGhlIGZpbmFsIGxpdHRsZSB0cmljayB0byAiY29ycmVjdGx5IiBwYXNzIHRoZSBleGl0IHN0YXR1cyB0byB0aGUgZXhpdCB0cmFwLgorCit7CisJKGV4aXQgMCk7IGV4aXQKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9NS3Rlcm1pbmZvLnNoIGIvbmN1cnNlcy01LjcvbWFuL01LdGVybWluZm8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2E5OTYwOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9NS3Rlcm1pbmZvLnNoCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKyMgJElkOiBNS3Rlcm1pbmZvLnNoLHYgMS4xMiAyMDAzLzAxLzExIDIxOjQyOjEyIHRvbSBFeHAgJAorIworIyBNS3Rlcm1pbmZvLnNoIC0tIGdlbmVyYXRlIHRlcm1pbmZvLjUgZnJvbSBDYXBzIHRhYnVsYXIgZGF0YQorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMiwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorIyAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorIyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorIyBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorIyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorIyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorIyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorIyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorIyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorIyBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorIyBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyBUaGlzIHNjcmlwdCB0YWtlcyB0ZXJtaW5mby5oZWFkIGFuZCB0ZXJtaW5mby50YWlsIGFuZCBzcGxpY2VzIGluIGJldHdlZW4KKyMgdGhlbSBhIHRhYmxlIGRlcml2ZWQgZnJvbSB0aGUgQ2FwcyBkYXRhIGZpbGUuICBCZXNpZGVzIGF2b2lkaW5nIGhhdmluZworIyB0aGUgZG9jcyBmYWxsIG91dCBvZiBzeW5jIHdpdGggdGhlIHRhYmxlLCB0aGlzIGFsc28gbGV0cyB1cyBzZXQgdXAgdGJsCisjIGNvbW1hbmRzIGZvciBiZXR0ZXIgZm9ybWF0dGluZyBvZiB0aGUgdGFibGUuCisjCisjIE5PVEU6IFRoZSAFcyBpbiB0aGlzIHNjcmlwdCByZWFsbHkgYXJlIGNvbnRyb2wgY2hhcmFjdGVycy4gIEl0IHRyYW5zbGF0ZXMKKyMgBSB0byBcbiBiZWNhdXNlIEkgY291bGRuJ3QgZ2V0IHVzZWQgdG8gaW5zZXJ0aW5nIGxpbmVmZWVkcyBkaXJlY3RseS4gIFRoZXJlCisjIGhhZCBiZXR0ZXIgYmUgbm8gBXMgaW4gdGhlIHRhYmxlIHNvdXJjZSB0ZXh0LgorIworIyBrZWVwIHRoZSBvcmRlciBpbmRlcGVuZGVudCBvZiBsb2NhbGU6CitpZiB0ZXN0ICIke0xBTkdVQUdFK3NldH0iICAgID0gc2V0OyB0aGVuIExBTkdVQUdFPUM7ICAgIGV4cG9ydCBMQU5HVUFHRTsgICAgZmkKK2lmIHRlc3QgIiR7TEFORytzZXR9IiAgICAgICAgPSBzZXQ7IHRoZW4gTEFORz1DOyAgICAgICAgZXhwb3J0IExBTkc7ICAgICAgICBmaQoraWYgdGVzdCAiJHtMQ19BTEwrc2V0fSIgICAgICA9IHNldDsgdGhlbiBMQ19BTEw9QzsgICAgICBleHBvcnQgTENfQUxMOyAgICAgIGZpCitpZiB0ZXN0ICIke0xDX01FU1NBR0VTK3NldH0iID0gc2V0OyB0aGVuIExDX01FU1NBR0VTPUM7IGV4cG9ydCBMQ19NRVNTQUdFUzsgZmkKK2lmIHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgICAgPSBzZXQ7IHRoZW4gTENfQ1RZUEU9QzsgICAgZXhwb3J0IExDX0NUWVBFOyAgICBmaQoraWYgdGVzdCAiJHtMQ19DT0xMQVRFK3NldH0iICA9IHNldDsgdGhlbiBMQ19DT0xMQVRFPUM7ICBleHBvcnQgTENfQ09MTEFURTsgIGZpCisKKyMKK2hlYWQ9JDEKK2NhcHM9JDIKK3RhaWw9JDMKK2NhdCA8PCdFT0YnCisnXCIgdAorLlwiIERPIE5PVCBFRElUIFRISVMgRklMRSBCWSBIQU5EIQorLlwiIEl0IGlzIGdlbmVyYXRlZCBmcm9tIHRlcm1pbmZvLmhlYWQsIENhcHMsIGFuZCB0ZXJtaW5mby50YWlsLgorLlwiCisuXCIgTm90ZTogdGhpcyBtdXN0IGJlIHJ1biB0aHJvdWdoIHRibCBiZWZvcmUgbnJvZmYuCisuXCIgVGhlIG1hZ2ljIGNvb2tpZSBvbiB0aGUgZmlyc3QgbGluZSB0cmlnZ2VycyB0aGlzIHVuZGVyIHNvbWUgbWFuIHByb2dyYW1zLgorRU9GCitjYXQgJGhlYWQKKwordGVtcD10ZW1wJCQKK3NvcnRlZD1zb3J0ZWQkJAordW5zb3J0ZWQ9dW5zb3J0ZWQkJAordHJhcCAicm0gLWYgJHNvcnRlZCAkdGVtcCAkdW5zb3J0ZWQ7IGV4aXQgOTkiIDEgMiA1IDE1CisKK3NlZCAtbiA8JGNhcHMgIlwKKy8lJS1TVE9QLUhFUkUtJSUvcQorL14jJS9zLyMlLy9wCisvXiMvZAorcy9bCV1bCV0qLwkvZworcy8kLwVUfS8KK3MvCVtBLVowLTlfKClcLV1bQS1aMC05XygpXC1dKglbMC05XC1dWzAtOVwtXSoJW1lcLV1bQlwtXVtDXC1dW0dcLV1bRUtcLV1cKioJLwlUewUvCitzLwlib29sCS8JL3AKK3MvCW51bQkvCS9wCitzLwlzdHIJLwkvcAorIiB8c2VkIC1lICdzL14kLy4uLycgfCB0ciAiXDEzNCIgIlwwMDYiID4kdW5zb3J0ZWQKKworcm0gLWYgJHNvcnRlZAorcm0gLWYgJHRlbXAKK3NhdmVkPW5vCit3aGlsZSB0cnVlCitkbworCWRhdGE9CisJcmVhZCBkYXRhCisJdGVzdCAteiAiJGRhdGEiICYmIGJyZWFrCisJY2FzZSAiJGRhdGEiIGluICModmkKKwkqBSopICModmkKKwkJZWNobyAiJGRhdGEiID4+JHRlbXAKKwkJc2F2ZWQ9eWVzCisJCTs7CisJKikKKwkJaWYgdGVzdCAkc2F2ZWQgPSB5ZXMgOyB0aGVuCisJCQlzYXZlZD1ubworCQkJc29ydCAkdGVtcCA+PiRzb3J0ZWQKKwkJCXJtIC1mICR0ZW1wCisJCWZpCisJCWVjaG8gIiRkYXRhIiA+PiRzb3J0ZWQKKwkJOzsKKwllc2FjCitkb25lIDwkdW5zb3J0ZWQKK3Rlc3QgJHNhdmVkID0geWVzICYmIHNvcnQgJHRlbXAgPj4kc29ydGVkCisKK3NlZCAtZSAncy9eXC5cLiQvLycgJHNvcnRlZCB8IHRyICJcMDA1XDAwNiIgIlwwMTJcMTM0IgorY2F0ICR0YWlsCisKK3JtIC1mICRzb3J0ZWQgJHRlbXAgJHVuc29ydGVkCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vTWFrZWZpbGUuaW4gYi9uY3Vyc2VzLTUuNy9tYW4vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0ZjdjOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDgwIEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjQxIDIwMDcvMDMvMzEgMTU6NTQ6MDYgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LDE5OTcKKyMKKyMgTWFrZWZpbGUgZm9yIG5jdXJzZXMgbWFudWFsIHBhZ2VzLgorIworIyBOT1RFOiBXaGVuIHlvdSBhZGQgb3IgcmVuYW1lIGEgbWFuIHBhZ2UsIG1ha2Ugc3VyZSB5b3UgdXBkYXRlIGJvdGgKKyMgdGhlIHRvcC1sZXZlbCBNQU5JRkVTVCBhbmQgYW55IG1hbi8qLnJlbmFtZXMgZmlsZXMhCisKK1NIRUxMCQk9IC9iaW4vc2gKKworREVTVERJUgkJPSBAREVTVERJUkAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2RhdGFkaXIJCT0gQGRhdGFkaXJACittYW5kaXIJCT0gQG1hbmRpckAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK2FsbCBcCitzb3VyY2VzIDoJdGVybWluZm8uNQorZGVwZW5kIDoKK3RhZ3MgOgorCiskKERFU1RESVIpJChtYW5kaXIpIDoKKwlzaCAkKHNyY2RpcikvLi4vbWtkaXJzLnNoICRACisKK0VESVRBUkdTID0gJChERVNURElSKSQobWFuZGlyKSAkKHNyY2RpcikgdGVybWluZm8uNSAkKHNyY2RpcikvKi5bMC05XSoKKworaW5zdGFsbCBpbnN0YWxsLm1hbiA6IHRlcm1pbmZvLjUgJChERVNURElSKSQobWFuZGlyKQorCXNoIC4uL2VkaXRfbWFuLnNoIG5vcm1hbCBpbnN0YWxsaW5nICQoRURJVEFSR1MpCisKK3VuaW5zdGFsbCB1bmluc3RhbGwubWFuIDoKKwktc2ggLi4vZWRpdF9tYW4uc2ggbm9ybWFsIHJlbW92aW5nICQoRURJVEFSR1MpCisKKyMgV2UgY29tcG9zZSB0ZXJtaW5mby41IGZyb20gdGhlIHJlYWwgc291cmNlcy4uLgorQ0FQTElTVD0kKHNyY2RpcikvLi4vaW5jbHVkZS9AVEVSTUlORk9fQ0FQU0AKK3Rlcm1pbmZvLjU6ICQoc3JjZGlyKS90ZXJtaW5mby5oZWFkICQoQ0FQTElTVCkgJChzcmNkaXIpL3Rlcm1pbmZvLnRhaWwgTWFrZWZpbGUgJChzcmNkaXIpL01LdGVybWluZm8uc2gKKwlzaCAkKHNyY2RpcikvTUt0ZXJtaW5mby5zaCAkKHNyY2RpcikvdGVybWluZm8uaGVhZCAkKENBUExJU1QpICQoc3JjZGlyKS90ZXJtaW5mby50YWlsID50ZXJtaW5mby41CisKK21vc3RseWNsZWFuIDoKKwktcm0gLWYgY29yZSB0YWdzIFRBR1MgKn4gKi5iYWsgKi5sbiAqLmF0YWMgdHJhY2UKKworY2xlYW46CW1vc3RseWNsZWFuCisJcm0gLWYgdGVybWluZm8uNQorCisuLi9lZGl0X21hbi5zZWQgOiBtYWtlX3NlZC5zaCBATUFOUEFHRV9SRU5BTUVTQAorCXNoICQoc3JjZGlyKS9tYWtlX3NlZC5zaCBATUFOUEFHRV9SRU5BTUVTQCA+Li4vZWRpdF9tYW4uc2VkCisKK2Rpc3RjbGVhbiByZWFsY2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgLi4vZWRpdF9tYW4uKiAuLi9tYW5fYWxpYXMuKgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2NhcHRvaW5mby4xbSBiL25jdXJzZXMtNS43L21hbi9jYXB0b2luZm8uMW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1N2EyNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jYXB0b2luZm8uMW0KQEAgLTAsMCArMSwxOTMgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGNhcHRvaW5mby4xbSx2IDEuMjIgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwICQKKy5USCBAQ0FQVE9JTkZPQCAxTSAiIgorLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK1xmQkBDQVBUT0lORk9AXGZSIC0gY29udmVydCBhIFxmSXRlcm1jYXBcZlIgZGVzY3JpcHRpb24gaW50byBhIFxmSXRlcm1pbmZvXGZSIGRlc2NyaXB0aW9uCisuU0ggU1lOT1BTSVMKK1xmQkBDQVBUT0lORk9AXGZSIFtcZkItdlxmUlxmSW5cZlIgXGZJd2lkdGhcZlJdICBbXGZCLVZcZlJdIFtcZkItMVxmUl0gW1xmQi13XGZSIFxmSXdpZHRoXGZSXSBcZklmaWxlXGZSIC4gLiAuCisuU0ggREVTQ1JJUFRJT04KK1xmQkBDQVBUT0lORk9AXGZSIGxvb2tzIGluIFxmSWZpbGVcZlIgZm9yIFxmQnRlcm1jYXBcZlIgZGVzY3JpcHRpb25zLiAgRm9yIGVhY2gKK29uZSBmb3VuZCwgYW4gZXF1aXZhbGVudCBcZkJ0ZXJtaW5mb1xmUiBkZXNjcmlwdGlvbiBpcyB3cml0dGVuIHRvIHN0YW5kYXJkCitvdXRwdXQuICBUZXJtY2FwIFxmQnRjXGZSIGNhcGFiaWxpdGllcyBhcmUgdHJhbnNsYXRlZCBkaXJlY3RseSB0byB0ZXJtaW5mbworXGZCdXNlXGZSIGNhcGFiaWxpdGllcy4KKy5QUAorSWYgbm8gXGZJZmlsZVxmUiBpcyBnaXZlbiwgdGhlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXGZCVEVSTUNBUFxmUiBpcyB1c2VkCitmb3IgdGhlIGZpbGVuYW1lIG9yIGVudHJ5LiAgSWYgXGZCVEVSTUNBUFxmUiBpcyBhIGZ1bGwgcGF0aG5hbWUgdG8gYSBmaWxlLCBvbmx5Cit0aGUgdGVybWluYWwgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1cZlIgaXMKK2V4dHJhY3RlZCBmcm9tIHRoYXQgZmlsZS4gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNQ0FQXGZSIGlzIG5vdAorc2V0LCB0aGVuIHRoZSBmaWxlIFxmQlwqZFxmUiBpcyByZWFkLgorLlRQIDUKK1xmQi12XGZSCitwcmludCBvdXQgdHJhY2luZyBpbmZvcm1hdGlvbiBvbiBzdGFuZGFyZCBlcnJvciBhcyB0aGUgcHJvZ3JhbSBydW5zLgorLlRQIDUKK1xmQi1WXGZSCitwcmludCBvdXQgdGhlIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gaW4gdXNlIG9uIHN0YW5kYXJkIGVycm9yIGFuZCBleGl0LgorLlRQIDUKK1xmQi0xXGZSCitjYXVzZSB0aGUgZmllbGRzIHRvIHByaW50IG91dCBvbmUgdG8gYSBsaW5lLiAgT3RoZXJ3aXNlLCB0aGUgZmllbGRzCit3aWxsIGJlIHByaW50ZWQgc2V2ZXJhbCB0byBhIGxpbmUgdG8gYSBtYXhpbXVtIHdpZHRoIG9mIDYwCitjaGFyYWN0ZXJzLgorLlRQIDUKK1xmQi13XGZSCitjaGFuZ2UgdGhlIG91dHB1dCB0byBcZkl3aWR0aFxmUiBjaGFyYWN0ZXJzLgorLlNIIEZJTEVTCisuVFAgMjAKK1wqZAorQ29tcGlsZWQgdGVybWluYWwgZGVzY3JpcHRpb24gZGF0YWJhc2UuCisuU0ggVFJBTlNMQVRJT05TIEZST00gTk9OU1RBTkRBUkQgQ0FQQUJJTElUSUVTCisuUFAKK1NvbWUgb2Jzb2xldGUgbm9uc3RhbmRhcmQgY2FwYWJpbGl0aWVzIHdpbGwgYXV0b21hdGljYWxseSBiZSB0cmFuc2xhdGVkCitpbnRvIHN0YW5kYXJkIChTVnI0L1hTSSBDdXJzZXMpIHRlcm1pbmZvIGNhcGFiaWxpdGllcyBieSBcZkJAQ0FQVE9JTkZPQFxmUi4KK1doZW5ldmVyIG9uZSBvZiB0aGVzZSBhdXRvbWF0aWMgdHJhbnNsYXRpb25zIGlzIGRvbmUsIHRoZSBwcm9ncmFtCit3aWxsIGlzc3VlIGFuIG5vdGlmaWNhdGlvbiB0byBzdGRlcnIsIGludml0aW5nIHRoZSB1c2VyIHRvIGNoZWNrIHRoYXQKK2l0IGhhcyBub3QgbWlzdGFrZW5seSB0cmFuc2xhdGVkIGEgY29tcGxldGVseSB1bmtub3duIGFuZCByYW5kb20KK2NhcGFiaWxpdHkgYW5kL29yIHN5bnRheCBlcnJvci4KKy5QUAorLlRTIEgKK2MgYyBjIGMKK2MgYyBjIGMKK2wgbCBsIGwuCitOb25zdGQJU3RkCUZyb20JVGVybWluZm8KK25hbWUJbmFtZQkJY2FwYWJpbGl0eQorXworQk8JbXIJQVQmVAllbnRlcl9yZXZlcnNlX21vZGUKK0NJCXZpCUFUJlQJY3Vyc29yX2ludmlzaWJsZQorQ1YJdmUJQVQmVAljdXJzb3Jfbm9ybWFsCitEUwltaAlBVCZUCWVudGVyX2RpbV9tb2RlCitFRQltZQlBVCZUCWV4aXRfYXR0cmlidXRlX21vZGUKK0ZFCUxGCUFUJlQJbGFiZWxfb24KK0ZMCUxPCUFUJlQJbGFiZWxfb2ZmCitYUwltawlBVCZUCWVudGVyX3NlY3VyZV9tb2RlCitFTglANwlYRU5JWAlrZXlfZW5kCitHRQlhZQlYRU5JWAlleGl0X2FsdF9jaGFyc2V0X21vZGUKK0dTCWFzCVhFTklYCWVudGVyX2FsdF9jaGFyc2V0X21vZGUKK0hNCWtoCVhFTklYCWtleV9ob21lCitMRAlrTAlYRU5JWAlrZXlfZGwKK1BECWtOCVhFTklYCWtleV9ucGFnZQorUE4JcG8JWEVOSVgJcHJ0cl9vZmYKK1BTCXBmCVhFTklYCXBydHJfb24KK1BVCWtQCVhFTklYCWtleV9wcGFnZQorUlQJQDgJWEVOSVgJa2VudAorVVAJa3UJWEVOSVgJa2N1dTEKK0tBCWs7CVRlawlrZXlfZjEwCitLQglGMQlUZWsJa2V5X2YxMQorS0MJRjIJVGVrCWtleV9mMTIKK0tECUYzCVRlawlrZXlfZjEzCitLRQlGNAlUZWsJa2V5X2YxNAorS0YJRjUJVGVrCWtleV9mMTUKK0JDCVNiCVRlawlzZXRfYmFja2dyb3VuZAorRkMJU2YJVGVrCXNldF9mb3JlZ3JvdW5kCitIUwltaAlJcmlzCWVudGVyX2RpbV9tb2RlCisuVEUKKy5QUAorWEVOSVggdGVybWNhcCBhbHNvIHVzZWQgdG8gaGF2ZSBhIHNldCBvZiBleHRlbnNpb24gY2FwYWJpbGl0aWVzCitmb3IgZm9ybXMgZHJhd2luZywgZGVzaWduZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIElCTSBQQworaGlnaC1oYWxmIGdyYXBoaWNzLiAgVGhleSB3ZXJlIGFzIGZvbGxvd3M6CisuUFAKKy5UUyBICitjIGMKK2wgbC4KK0NhcAlHcmFwaGljCitfCitHMgl1cHBlciBsZWZ0CitHMwlsb3dlciBsZWZ0CitHMQl1cHBlciByaWdodAorRzQJbG93ZXIgcmlnaHQKK0dSCXBvaW50aW5nIHJpZ2h0CitHTAlwb2ludGluZyBsZWZ0CitHVQlwb2ludGluZyB1cAorR0QJcG9pbnRpbmcgZG93bgorR0gJaG9yaXpvbnRhbCBsaW5lCitHVgl2ZXJ0aWNhbCBsaW5lCitHQwlpbnRlcnNlY3Rpb24KK0c2CXVwcGVyIGxlZnQKK0c3CWxvd2VyIGxlZnQKK0c1CXVwcGVyIHJpZ2h0CitHOAlsb3dlciByaWdodAorR3IJdGVlIHBvaW50aW5nIHJpZ2h0CitHcgl0ZWUgcG9pbnRpbmcgbGVmdAorR3UJdGVlIHBvaW50aW5nIHVwCitHZAl0ZWUgcG9pbnRpbmcgZG93bgorR2gJaG9yaXpvbnRhbCBsaW5lCitHdgl2ZXJ0aWNhbCBsaW5lCitHYwlpbnRlcnNlY3Rpb24KK0dHCWFjcyBtYWdpYyBjb29raWUgY291bnQKKy5URQorLlBQCitJZiB0aGUgc2luZ2xlLWxpbmUgY2FwYWJpbGl0aWVzIG9jY3VyIGluIGFuIGVudHJ5LCB0aGV5IHdpbGwgYXV0b21hdGljYWxseQorYmUgY29tcG9zZWQgaW50byBhbiBcZklhY3NjXGZSIHN0cmluZy4gIFRoZSBkb3VibGUtbGluZSBjYXBhYmlsaXRpZXMgYW5kCitcZkJHR1xmUiBhcmUgZGlzY2FyZGVkIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuCisuUFAKK0lCTSdzIEFJWCBoYXMgYSB0ZXJtaW5mbyBmYWNpbGl0eSBkZXNjZW5kZWQgZnJvbSBTVnIxIHRlcm1pbmZvIGJ1dCBpbmNvbXBhdGlibGUKK3dpdGggdGhlIFNWcjQgZm9ybWF0LiBUaGUgZm9sbG93aW5nIEFJWCBleHRlbnNpb25zIGFyZSBhdXRvbWF0aWNhbGx5Cit0cmFuc2xhdGVkOgorLlRTCitjIGMKK2wgbC4KK0lCTQlYU0kKK18KK2tzZWwJa3NsdAora2J0YWIJa2NidAorZm9udDAJczBkcworZm9udDEJczFkcworZm9udDIJczJkcworZm9udDMJczNkcworLlRFCisuUFAKK0FkZGl0aW9uYWxseSwgdGhlIEFJWCBcZklib3gxXGZSIGNhcGFiaWxpdHkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZWQgdG8KK2FuIFxmSWFjc2NcZlIgc3RyaW5nLgorLlBQCitIZXdsZXR0LVBhY2thcmQncyB0ZXJtaW5mbyBsaWJyYXJ5IHN1cHBvcnRzIHR3byBub25zdGFuZGFyZCB0ZXJtaW5mbworY2FwYWJpbGl0aWVzIFxmSW1lbWxcZlIgKG1lbW9yeSBsb2NrKSBhbmQgXGZJbWVtdVxmUiAobWVtb3J5IHVubG9jaykuCitUaGVzZSB3aWxsIGJlIGRpc2NhcmRlZCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgorLlNIIE5PVEVTCitUaGlzIHV0aWxpdHkgaXMgYWN0dWFsbHkgYSBsaW5rIHRvIFxmQkBUSUNAXGZSKDFNKSwgcnVubmluZyBpbiBcZkktSVxmUiBtb2RlLgorWW91IGNhbiB1c2Ugb3RoZXIgXGZCQFRJQ0BcZlIgb3B0aW9ucyBzdWNoIGFzIFxmQi1mXGZSIGFuZCAgXGZCLXhcZlIuCisuUFAKK1RoZSB0cmFjZSBvcHRpb24gaXMgbm90IGlkZW50aWNhbCB0byBTVnI0J3MuICBVbmRlciBTVnI0LCBpbnN0ZWFkIG9mIGZvbGxvd2luZwordGhlIFxmQi12XGZSIHdpdGggYSB0cmFjZSBsZXZlbCBuLCB5b3UgcmVwZWF0IGl0IG4gdGltZXMuCisuU0ggU0VFIEFMU08KK1xmQkBJTkZPQ01QQFxmUigxTSksCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCdGVybWluZm9cZlIoXCpuKQorLlBQCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuU0ggQVVUSE9SCitFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2NsZWFyLjEgYi9uY3Vyc2VzLTUuNy9tYW4vY2xlYXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQwZjkzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2NsZWFyLjEKQEAgLTAsMCArMSw1MyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjbGVhci4xLHYgMS42IDIwMDYvMTIvMjQgMTg6MDc6NTMgdG9tIEV4cCAkCisuVEggQENMRUFSQCAxICIiCisuZHMgbiA1CisuU0ggTkFNRQorXGZCQENMRUFSQFxmUiAtIGNsZWFyIHRoZSB0ZXJtaW5hbCBzY3JlZW4KKy5TSCBTWU5PUFNJUworXGZCQENMRUFSQFxmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1xmQkBDTEVBUkBcZlIgY2xlYXJzIHlvdXIgc2NyZWVuIGlmIHRoaXMgaXMgcG9zc2libGUuICBJdCBsb29rcyBpbiB0aGUKK2Vudmlyb25tZW50IGZvciB0aGUgdGVybWluYWwgdHlwZSBhbmQgdGhlbiBpbiB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgdG8KK2ZpZ3VyZSBvdXQgaG93IHRvIGNsZWFyIHRoZSBzY3JlZW4uCisuUFAKK1xmQkBDTEVBUkBcZlIgaWdub3JlcyBhbnkgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUgcHJlc2VudC4KKy5TSCBTRUUgQUxTTworXGZCQFRQVVRAXGZSKDEpLCBcZkJ0ZXJtaW5mb1xmUihcKm4pCisuUFAKK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfYWRkX3djaC4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZF93Y2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhYzFhNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZF93Y2guM3gKQEAgLTAsMCArMSwxMzUgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19hZGRfd2NoLjN4LHYgMS42IDIwMDYvMTIvMjQgMTU6MjI6MjIgdG9tIEV4cCAkCisuVEggY3Vyc19hZGRfd2NoIDNYICIiCisuU0ggTkFNRQorXGZCYWRkX3djaFxmUCwKK1xmQndhZGRfd2NoXGZQLAorXGZCbXZhZGRfd2NoXGZQLAorXGZCbXZ3YWRkX3djaFxmUCwKK1xmQmVjaG9fd2NoYXJcZlAsCitcZkJ3ZWNob193Y2hhclxmUCAtIGFkZCBhIGNvbXBsZXggY2hhcmFjdGVyIGFuZCByZW5kaXRpb24gdG8gYSBcZkJjdXJzZXNcZlIgd2luZG93LCB0aGVuIGFkdmFuY2UgdGhlIGN1cnNvcgorLlNIIFNZTk9QU0lTCisuUFAKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlAKKy5zcAorLkIgImludCBhZGRfd2NoKCBjb25zdCBjY2hhcl90ICpcZkl3Y2hcZkIgKTsiCisuYnIKKy5CICJpbnQgd2FkZF93Y2goIFdJTkRPVyAqXGZJd2luXGZQLCBjb25zdCBjY2hhcl90ICpcZkl3Y2hcZkIgKTsiCisuYnIKKy5CICJpbnQgbXZhZGRfd2NoKCBpbnQgXGZJeVxmUCwgaW50IFxmSXhcZlAsIGNvbnN0IGNjaGFyX3QgKlxmSXdjaFxmQiApOyIKKy5icgorLkIgImludCBtdndhZGRfd2NoKCBXSU5ET1cgKlxmSXdpblxmUCwgaW50IFxmSXlcZlAsIGludCBcZkl4XGZQLCBjb25zdCBjY2hhcl90ICpcZkl3Y2hcZkIgKTsiCisuYnIKKy5CICJpbnQgZWNob193Y2hhciggY29uc3QgY2NoYXJfdCAqXGZJd2NoXGZCICk7IgorLmJyCisuQiAiaW50IHdlY2hvX3djaGFyKCBXSU5ET1cgKlxmSXdpblxmUCwgY29uc3QgY2NoYXJfdCAqXGZJd2NoXGZCICk7IgorLmJyCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhlCitcZkJhZGRfd2NoXGZQLAorXGZCd2FkZF93Y2hcZlAsCitcZkJtdmFkZF93Y2hcZlAsIGFuZAorXGZCbXZ3YWRkX3djaFxmUAorZnVuY3Rpb25zIHB1dCB0aGUgY29tcGxleCBjaGFyYWN0ZXIgXGZJd2NoXGZQIGludG8gdGhlIGdpdmVuCit3aW5kb3cgYXQgaXRzIGN1cnJlbnQgcG9zaXRpb24sCit3aGljaCBpcyB0aGVuIGFkdmFuY2VkLgorVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0KK3dyYXBwaW5nIGFuZCBzcGVjaWFsLWNoYXJhY3RlciBwcm9jZXNzaW5nIGFzIGZvbGxvd3M6CisuVFAgNQorLQorSWYgXGZJd2NoXGZQIHJlZmVycyB0byBhIHNwYWNpbmcgY2hhcmFjdGVyLAordGhlbiBhbnkgcHJldmlvdXMgY2hhcmFjdGVyIGF0IHRoYXQgbG9jYXRpb24gaXMgcmVtb3ZlZC4KK0EgbmV3IGNoYXJhY3RlciBzcGVjaWZpZWQgYnkgXGZJd2NoXGZQIGlzCitwbGFjZWQgYXQgdGhhdCBsb2NhdGlvbiB3aXRoIHJlbmRpdGlvbiBzcGVjaWZpZWQgYnkgXGZJd2NoXGZQLgorVGhlIGN1cnNvciB0aGVuIGFkdmFuY2VzIHRvCit0aGUgbmV4dCBzcGFjaW5nIGNoYXJhY3RlciBvbiB0aGUgc2NyZWVuLgorLlRQIDUKKy0KK0lmIFxmSXdjaFxmUCByZWZlcnMgdG8gYSBub24tc3BhY2luZyBjaGFyYWN0ZXIsCithbGwgcHJldmlvdXMgY2hhcmFjdGVycyBhdCB0aGF0IGxvY2F0aW9uIGFyZSBwcmVzZXJ2ZWQuCitUaGUgbm9uLXNwYWNpbmcgY2hhcmFjdGVycyBvZiBcZkl3Y2hcZlAKK2FyZSBhZGRlZCB0byB0aGUgc3BhY2luZyBjb21wbGV4IGNoYXJhY3RlciwKK2FuZCB0aGUgcmVuZGl0aW9uIHNwZWNpZmllZCBieSBcZkl3Y2hcZlAgaXMgaWdub3JlZC4KKy5UUCA1CistCitJZiB0aGUgY2hhcmFjdGVyIHBhcnQgb2YgXGZJd2NoXGZQIGlzCithIHRhYiwgbmV3bGluZSwgYmFja3NwYWNlIG9yIG90aGVyIGNvbnRyb2wgY2hhcmFjdGVyLAordGhlIHdpbmRvdyBpcyB1cGRhdGVkIGFuZCB0aGUgY3Vyc29yIG1vdmVzIGFzIGlmIFxmQmFkZGNoXGZSIHdlcmUgY2FsbGVkLgorLlBQCitUaGUgXGZCZWNob193Y2hhclxmUAorZnVuY3Rpb24gaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gYSBjYWxsIHRvCitcZkJhZGRfd2NoXGZQCitmb2xsb3dlZCBieSBhIGNhbGwgdG8KK1xmQnJlZnJlc2hcZlAuCitTaW1pbGFybHksIHRoZQorXGZCd2VjaG9fd2NoYXJcZlAKK2lzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIGEgY2FsbCB0bworXGZCd2FkZF93Y2hcZlAKK2ZvbGxvd2VkIGJ5IGEgY2FsbCB0bworXGZCd3JlZnJlc2hcZlAuCitUaGUga25vd2xlZGdlCit0aGF0IG9ubHkgYSBzaW5nbGUgY2hhcmFjdGVyIGlzIGJlaW5nIG91dHB1dCBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYW5kLAorZm9yIG5vbi1jb250cm9sIGNoYXJhY3RlcnMsIGEgY29uc2lkZXJhYmxlIHBlcmZvcm1hbmNlIGdhaW4gbWlnaHQgYmUgc2VlbgorYnkgdXNpbmcgdGhlICpcZkJlY2hvXGZQKiBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGVpciBlcXVpdmFsZW50cy4KKy5TSCBSRVRVUk4gVkFMVUVTCisuUFAKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIgb24gc3VjY2Vzcy4KKy5TSCBOT1RFUworLlBQCitOb3RlIHRoYXQKK1xmQmFkZF93Y2hcZlAsCitcZkJtdmFkZF93Y2hcZlAsCitcZkJtdndhZGRfd2NoXGZQLCBhbmQKK1xmQmVjaG9fd2NoYXJcZlAKK21heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKKy5QUAorQWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorVGhlIGRlZmF1bHRzIHNwZWNpZmllZCBmb3IgZm9ybXMtZHJhd2luZyBjaGFyYWN0ZXJzIGFwcGx5IGluIHRoZSBQT1NJWCBsb2NhbGUuCisuUFAKK1hTSSBkb2N1bWVudHMgY29uc3RhbnRzIGJlZ2lubmluZyB3aXRoIFxmQldBQ1NfXGZQIHdoaWNoIGFyZSB1c2VkIGZvcgorbGluZS1kcmF3aW5nLgorVGhvc2UgYXJlIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgaW4gXGZCbmN1cnNlc1xmUC4KKy5TSCBTRUUgQUxTTworLlBQCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19hZGRjaFxmUigzWCksCitcZkJjdXJzX2F0dHJcZlIoM1gpLAorXGZCY3Vyc19jbGVhclxmUigzWCksCitcZkJjdXJzX291dG9wdHNcZlIoM1gpLAorXGZCY3Vyc19yZWZyZXNoXGZSKDNYKSwKK1xmQnB1dHdjXGZSKDMpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZF93Y2hzdHIuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19hZGRfd2Noc3RyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NGMyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19hZGRfd2Noc3RyLjN4CkBAIC0wLDAgKzEsOTcgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19hZGRfd2Noc3RyLjN4LHYgMS42IDIwMDUvMDEvMDIgMDE6Mjg6NDkgdG9tIEV4cCAkCisuVEggY3Vyc19hZGRfd2Noc3RyIDNYICIiCisuU0ggTkFNRQorXGZCYWRkX3djaHN0clxmUiwKK1xmQmFkZF93Y2huc3RyXGZSLAorXGZCd2FkZF93Y2hzdHJcZlIsCitcZkJ3YWRkX3djaG5zdHJcZlIsCitcZkJtdmFkZF93Y2hzdHJcZlIsCitcZkJtdmFkZF93Y2huc3RyXGZSLAorXGZCbXZ3YWRkX3djaHN0clxmUiwKK1xmQm12d2FkZF93Y2huc3RyXGZSIFwtIGFkZCBhbiBhcnJheSBvZiBjb21wbGV4IGNoYXJhY3RlcnMgKGFuZCBhdHRyaWJ1dGVzKSB0byBhIGN1cnNlcyB3aW5kb3cKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cnNlcy5oPgorLlBQCisubmYKK1xmQmludCBhZGRfd2Noc3RyKGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBhZGRfd2NobnN0cihjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdhZGRfd2Noc3RyKFdJTkRPVyAqXGZSIFxmSXdpblxmUlxmQiwgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdhZGRfd2NobnN0cihXSU5ET1cgKlxmUiBcZkl3aW5cZlJcZkIsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZhZGRfd2Noc3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12YWRkX3djaG5zdHIoaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2FkZF93Y2hzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2FkZF93Y2huc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIGNvcHkgdGhlIGFycmF5IG9mIGNvbXBsZXggY2hhcmFjdGVycyBcZkl3Y2hzdHJcZlIKK2ludG8gdGhlIHdpbmRvdyBpbWFnZSBzdHJ1Y3R1cmUgYXQgYW5kIGFmdGVyIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KK1RoZSBmb3VyIHJvdXRpbmVzIHdpdGggXGZJblxmUiBhcyB0aGUgbGFzdAorYXJndW1lbnQgY29weSBhdCBtb3N0IFxmSW5cZlIgZWxlbWVudHMsIGJ1dCBubyBtb3JlIHRoYW4gd2lsbCBmaXQgb24gdGhlIGxpbmUuCitJZiBcZkJuXGZSPVxmQi0xXGZSIHRoZW4gdGhlIHdob2xlIGFycmF5IGlzIGNvcGllZCwKK3RvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgd2lsbCBmaXQgb24gdGhlIGxpbmUuCisuUFAKK1RoZSB3aW5kb3cgY3Vyc29yIGlzIFxmSW5vdFxmUiBhZHZhbmNlZC4KK1RoZXNlIHJvdXRpbmVzIHdvcmsgZmFzdGVyIHRoYW4gXGZCd2FkZG5zdHJcZlIuCitPbiB0aGUgb3RoZXIgaGFuZCwgdGhleSBkbyBub3QgcGVyZm9ybSBjaGVja2luZworKHN1Y2ggYXMgZm9yIHRoZSBuZXdsaW5lLCBiYWNrc3BhY2UsIG9yIGNhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXJzKSwKK3RoZXkgZG8gbm90IGFkdmFuY2UgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLAordGhleSBkbyBub3QgZXhwYW5kIG90aGVyIGNvbnRyb2wgY2hhcmFjdGVycyB0byBeLWVzY2FwZXMsCithbmQgdGhleSB0cnVuY2F0ZSB0aGUgc3RyaW5nIGlmIGl0IGNyb3NzZXMgdGhlIHJpZ2h0IG1hcmdpbiwKK3JhdGhlciB0aGFuIHdyYXBwaW5nIGl0IGFyb3VuZCB0byB0aGUgbmV3IGxpbmUuCisuUFAKK1RoZXNlIHJvdXRpbmVzIGVuZCBzdWNjZXNzZnVsbHkKK29uIGVuY291bnRlcmluZyBhIG51bGwgXGZJY2NoYXJfdFxmUiwgb3IKK3doZW4gdGhleSBoYXZlIGZpbGxlZCB0aGUgY3VycmVudCBsaW5lLgorSWYgYSBjb21wbGV4IGNoYXJhY3RlciBjYW5ub3QgY29tcGxldGVseSBmaXQgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLAordGhlIHJlbWFpbmluZyBjb2x1bW5zIGFyZSBmaWxsZWQgd2l0aCB0aGUgYmFja2dyb3VuZCBjaGFyYWN0ZXIgYW5kIHJlbmRpdGlvbi4KKy5TSCBOT1RFUworQWxsIGZ1bmN0aW9ucyBleGNlcHQgXGZCd2FkZF93Y2huc3RyXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUkVUVVJOIFZBTFVFUworQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUiBvbiBzdWNjZXNzLgorLlNIIFBPUlRBQklMSVRZCitBbGwgdGhlc2UgZW50cnkgcG9pbnRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2FkZGNoc3RyXGZSKDNYKSwKK1xmQmN1cnNfYWRkd3N0clxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfYWRkY2guM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19hZGRjaC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzkxOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYWRkY2guM3gKQEAgLTAsMCArMSwxODEgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYWRkY2guM3gsdiAxLjI3IDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggY3Vyc19hZGRjaCAzWCAiIgorLlNIIE5BTUUKK1xmQmFkZGNoXGZSLCBcZkJ3YWRkY2hcZlIsIFxmQm12YWRkY2hcZlIsIFxmQm12d2FkZGNoXGZSLAorXGZCZWNob2NoYXJcZlIsCitcZkJ3ZWNob2NoYXJcZlIgLSBhZGQgYSBjaGFyYWN0ZXIgKHdpdGggYXR0cmlidXRlcykgdG8gYSBcZkJjdXJzZXNcZlIgd2luZG93LCB0aGVuIGFkdmFuY2UgdGhlIGN1cnNvcgorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuUFAKK1xmQmludCBhZGRjaChjb25zdCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJpbnQgd2FkZGNoKFdJTkRPVyAqd2luLCBjb25zdCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJpbnQgbXZhZGRjaChpbnQgeSwgaW50IHgsIGNvbnN0IGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmludCBtdndhZGRjaChXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJpbnQgZWNob2NoYXIoY29uc3QgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IHdlY2hvY2hhcihXSU5ET1cgKndpbiwgY29uc3QgY2h0eXBlIGNoKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCYWRkY2hcZlIsIFxmQndhZGRjaFxmUiwgXGZCbXZhZGRjaFxmUiBhbmQgXGZCbXZ3YWRkY2hcZlIgcm91dGluZXMgcHV0Cit0aGUgY2hhcmFjdGVyIFxmSWNoXGZSIGludG8gdGhlIGdpdmVuIHdpbmRvdyBhdCBpdHMgY3VycmVudCB3aW5kb3cgcG9zaXRpb24sCit3aGljaCBpcyB0aGVuIGFkdmFuY2VkLiAgVGhleSBhcmUgYW5hbG9nb3VzIHRvIFxmQnB1dGNoYXJcZlIgaW4gXGZCc3RkaW9cZlIoMykuCitJZiB0aGUgYWR2YW5jZSBpcyBhdCB0aGUgcmlnaHQgbWFyZ2luLCB0aGUgY3Vyc29yIGF1dG9tYXRpY2FsbHkgd3JhcHMgdG8gdGhlCitiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZS4gIEF0IHRoZSBib3R0b20gb2YgdGhlIGN1cnJlbnQgc2Nyb2xsaW5nIHJlZ2lvbiwgaWYKK1xmQnNjcm9sbG9rXGZSIGlzIGVuYWJsZWQsIHRoZSBzY3JvbGxpbmcgcmVnaW9uIGlzIHNjcm9sbGVkIHVwIG9uZSBsaW5lLgorLlBQCitJZiBcZkljaFxmUiBpcyBhIHRhYiwgbmV3bGluZSwgb3IgYmFja3NwYWNlLAordGhlIGN1cnNvciBpcyBtb3ZlZCBhcHByb3ByaWF0ZWx5IHdpdGhpbiB0aGUgd2luZG93LgorQmFja3NwYWNlIG1vdmVzIHRoZSBjdXJzb3Igb25lIGNoYXJhY3RlciBsZWZ0OyBhdCB0aGUgbGVmdAorZWRnZSBvZiBhIHdpbmRvdyBpdCBkb2VzIG5vdGhpbmcuCitOZXdsaW5lIGRvZXMgYSBcZkJjbHJ0b2VvbFxmUiwKK3RoZW4gbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgd2luZG93IGxlZnQgbWFyZ2luIG9uIHRoZSBuZXh0IGxpbmUsCitzY3JvbGxpbmcgdGhlIHdpbmRvdyBpZiBvbiB0aGUgbGFzdCBsaW5lLgorVGFicyBhcmUgY29uc2lkZXJlZCB0byBiZSBhdCBldmVyeSBlaWdodGggY29sdW1uLgorVGhlIHRhYiBpbnRlcnZhbCBtYXkgYmUgYWx0ZXJlZCBieSBzZXR0aW5nIHRoZSBcZkJUQUJTSVpFXGZSIHZhcmlhYmxlLgorLlBQCitJZiBcZkljaFxmUiBpcyBhbnkgY29udHJvbCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiB0YWIsIG5ld2xpbmUsIG9yIGJhY2tzcGFjZSwgaXQKK2lzIGRyYXduIGluIFxmQl5cZlJcZklYXGZSIG5vdGF0aW9uLiAgQ2FsbGluZyBcZkJ3aW5jaFxmUiBhZnRlciBhZGRpbmcgYQorY29udHJvbCBjaGFyYWN0ZXIgZG9lcyBub3QgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgaXRzZWxmLCBidXQgaW5zdGVhZCByZXR1cm5zCit0aGUgXi1yZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCBjaGFyYWN0ZXIuCisuUFAKK1ZpZGVvIGF0dHJpYnV0ZXMgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBjaGFyYWN0ZXIgYXJndW1lbnQgcGFzc2VkIHRvCitcZkJhZGRjaFxmUiBvciByZWxhdGVkIGZ1bmN0aW9ucyBieSBsb2dpY2FsLU9SaW5nIHRoZW0gaW50byB0aGUgY2hhcmFjdGVyLgorKFRodXMsIHRleHQsIGluY2x1ZGluZyBhdHRyaWJ1dGVzLCBjYW4gYmUgY29waWVkIGZyb20gb25lIHBsYWNlIHRvIGFub3RoZXIKK3VzaW5nIFxmQmluY2hcZlIgYW5kIFxmQmFkZGNoXGZSLikgIFNlZSB0aGUgXGZCY3Vyc19hdHRyXGZSKDNYKSBwYWdlIGZvcgordmFsdWVzIG9mIHByZWRlZmluZWQgdmlkZW8gYXR0cmlidXRlIGNvbnN0YW50cyB0aGF0IGNhbiBiZSB1c2VmdWxseSBPUidlZAoraW50byBjaGFyYWN0ZXJzLgorLlBQCitUaGUgXGZCZWNob2NoYXJcZlIgYW5kIFxmQndlY2hvY2hhclxmUiByb3V0aW5lcyBhcmUgZXF1aXZhbGVudCB0byBhIGNhbGwgdG8KK1xmQmFkZGNoXGZSIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBcZkJyZWZyZXNoXGZSLCBvciBhIGNhbGwgdG8gXGZCd2FkZGNoXGZSCitmb2xsb3dlZCBieSBhIGNhbGwgdG8gXGZCd3JlZnJlc2hcZlIuICBUaGUga25vd2xlZGdlIHRoYXQgb25seSBhIHNpbmdsZQorY2hhcmFjdGVyIGlzIGJlaW5nIG91dHB1dCBpcyB1c2VkIGFuZCwgZm9yIG5vbi1jb250cm9sIGNoYXJhY3RlcnMsIGEKK2NvbnNpZGVyYWJsZSBwZXJmb3JtYW5jZSBnYWluIG1heSBiZSBzZWVuIGJ5IHVzaW5nIHRoZXNlIHJvdXRpbmVzIGluc3RlYWQgb2YKK3RoZWlyIGVxdWl2YWxlbnRzLgorLlNTIExpbmUgR3JhcGhpY3MKK1RoZSBmb2xsb3dpbmcgdmFyaWFibGVzIG1heSBiZSB1c2VkIHRvIGFkZCBsaW5lIGRyYXdpbmcgY2hhcmFjdGVycyB0byB0aGUKK3NjcmVlbiB3aXRoIHJvdXRpbmVzIG9mIHRoZSBcZkJhZGRjaFxmUiBmYW1pbHkuICBUaGUgZGVmYXVsdCBjaGFyYWN0ZXIgbGlzdGVkCitiZWxvdyBpcyB1c2VkIGlmIHRoZSBcZkJhY3NjXGZSIGNhcGFiaWxpdHkgZG9lcyBub3QgZGVmaW5lIGEgdGVybWluYWwtc3BlY2lmaWMKK3JlcGxhY2VtZW50IGZvciBpdC4KK1RoZSBuYW1lcyBhcmUgdGFrZW4gZnJvbSBWVDEwMCBub21lbmNsYXR1cmUuCisuUFAKKy5UUworbCBsIGwKK18gXyBfCitsIGwgbC4KK1xmSU5hbWVcZlIJXGZJRGVmYXVsdFxmUglcZklEZXNjcmlwdGlvblxmUgorQUNTX0JMT0NLCSMJc29saWQgc3F1YXJlIGJsb2NrCitBQ1NfQk9BUkQJIwlib2FyZCBvZiBzcXVhcmVzCitBQ1NfQlRFRQkrCWJvdHRvbSB0ZWUKK0FDU19CVUxMRVQJbwlidWxsZXQKK0FDU19DS0JPQVJECToJY2hlY2tlciBib2FyZCAoc3RpcHBsZSkKK0FDU19EQVJST1cJdglhcnJvdyBwb2ludGluZyBkb3duCitBQ1NfREVHUkVFCScJZGVncmVlIHN5bWJvbAorQUNTX0RJQU1PTkQJKwlkaWFtb25kCitBQ1NfR0VRVUFMCT4JZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvCitBQ1NfSExJTkUJLQlob3Jpem9udGFsIGxpbmUKK0FDU19MQU5URVJOCSMJbGFudGVybiBzeW1ib2wKK0FDU19MQVJST1cJPAlhcnJvdyBwb2ludGluZyBsZWZ0CitBQ1NfTEVRVUFMCTwJbGVzcy10aGFuLW9yLWVxdWFsLXRvCitBQ1NfTExDT1JORVIJKwlsb3dlciBsZWZ0LWhhbmQgY29ybmVyCitBQ1NfTFJDT1JORVIJKwlsb3dlciByaWdodC1oYW5kIGNvcm5lcgorQUNTX0xURUUJKwlsZWZ0IHRlZQorQUNTX05FUVVBTAkhCW5vdC1lcXVhbAorQUNTX1BJCSoJZ3JlZWsgcGkKK0FDU19QTE1JTlVTCSMJcGx1cy9taW51cworQUNTX1BMVVMJKwlwbHVzCitBQ1NfUkFSUk9XCT4JYXJyb3cgcG9pbnRpbmcgcmlnaHQKK0FDU19SVEVFCSsJcmlnaHQgdGVlCitBQ1NfUzEJLQlzY2FuIGxpbmUgMQorQUNTX1MzCS0Jc2NhbiBsaW5lIDMKK0FDU19TNwktCXNjYW4gbGluZSA3CitBQ1NfUzkJXCZfCXNjYW4gbGluZSA5CitBQ1NfU1RFUkxJTkcJZglwb3VuZC1zdGVybGluZyBzeW1ib2wKK0FDU19UVEVFCSsJdG9wIHRlZQorQUNTX1VBUlJPVwleCWFycm93IHBvaW50aW5nIHVwCitBQ1NfVUxDT1JORVIJKwl1cHBlciBsZWZ0LWhhbmQgY29ybmVyCitBQ1NfVVJDT1JORVIJKwl1cHBlciByaWdodC1oYW5kIGNvcm5lcgorQUNTX1ZMSU5FCXwJdmVydGljYWwgbGluZQorLlRFCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSIG9uIHN1Y2Nlc3MKKyh0aGUgU1ZyNCBtYW51YWxzIHNwZWNpZnkgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24KK3N1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzIG90aGVyd2lzZSBub3RlZCBpbiB0aGUgcHJlY2VkaW5nIHJvdXRpbmUKK2Rlc2NyaXB0aW9ucy4KKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQmFkZGNoXGZSLCBcZkJtdmFkZGNoXGZSLCBcZkJtdndhZGRjaFxmUiwgYW5kCitcZkJlY2hvY2hhclxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitBbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCitUaGUgZGVmYXVsdHMgc3BlY2lmaWVkIGZvciBmb3Jtcy1kcmF3aW5nIGNoYXJhY3RlcnMgYXBwbHkgaW4gdGhlIFBPU0lYIGxvY2FsZS4KKy5MUAorU29tZSBBQ1Mgc3ltYm9scworKEFDU19TMywKK0FDU19TNywKK0FDU19MRVFVQUwsCitBQ1NfR0VRVUFMLAorQUNTX1BJLAorQUNTX05FUVVBTCwKK0FDU19TVEVSTElORykKK3dlcmUgbm90IGRvY3VtZW50ZWQgaW4KK2FueSBwdWJsaWNseSByZWxlYXNlZCBTeXN0ZW0gVi4gIEhvd2V2ZXIsIG1hbnkgcHVibGljbHkgYXZhaWxhYmxlIHRlcm1pbmZvcworaW5jbHVkZSBcZkJhY3NjXGZSIHN0cmluZ3MgaW4gd2hpY2ggdGhlaXIga2V5IGNoYXJhY3RlcnMgKHByeXp7fH0pIGFyZQorZW1iZWRkZWQsIGFuZCBhIHNlY29uZC1oYW5kIGxpc3Qgb2YgdGhlaXIgY2hhcmFjdGVyIGRlc2NyaXB0aW9ucyBoYXMgY29tZQordG8gbGlnaHQuICBUaGUgQUNTLXByZWZpeGVkIG5hbWVzIGZvciB0aGVtIHdlcmUgaW52ZW50ZWQgZm9yIFxmQm5jdXJzZXNcZlIoM1gpLgorLkxQCitUaGUgXGZCVEFCU0laRVxmUiB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZCBpbiBzb21lIHZlcnNpb25zIG9mIGN1cnNlcywKK2J1dCBpcyBub3QgcGFydCBvZiBYL09wZW4gY3Vyc2VzLgorLkxQCitJZiBcZkljaFxmUiBpcyBhIGNhcnJpYWdlIHJldHVybiwKK3RoZSBjdXJzb3IgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCByb3cgb2YgdGhlIHdpbmRvdy4KK1RoaXMgaXMgdHJ1ZSBvZiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGJ1dCBpcyBub3QgZG9jdW1lbnRlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfYXR0clxmUigzWCksCitcZkJjdXJzX2NsZWFyXGZSKDNYKSwKK1xmQmN1cnNfaW5jaFxmUigzWCksCitcZkJjdXJzX291dG9wdHNcZlIoM1gpLAorXGZCY3Vyc19yZWZyZXNoXGZSKDNYKSwKK1xmQnB1dGNcZlIoMykuCisuUFAKK0NvbXBhcmFibGUgZnVuY3Rpb25zIGluIHRoZSB3aWRlLWNoYXJhY3RlciAobmN1cnNlc3cpIGxpYnJhcnkgYXJlCitkZXNjcmliZWQgaW4KK1xmQmN1cnNfYWRkX3djaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZGNoc3RyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYWRkY2hzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxYjA0MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZGNoc3RyLjN4CkBAIC0wLDAgKzEsOTkgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19hZGRjaHN0ci4zeCx2IDEuMTIgMjAwNi8xMi8wMiAxNzowMjo0NSB0b20gRXhwICQKKy5USCBjdXJzX2FkZGNoc3RyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCYWRkY2hzdHJcZlIsCitcZkJhZGRjaG5zdHJcZlIsCitcZkJ3YWRkY2hzdHJcZlIsCitcZkJ3YWRkY2huc3RyXGZSLAorXGZCbXZhZGRjaHN0clxmUiwKK1xmQm12YWRkY2huc3RyXGZSLAorXGZCbXZ3YWRkY2hzdHJcZlIsCitcZkJtdndhZGRjaG5zdHJcZlIgLSBhZGQgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyAoYW5kIGF0dHJpYnV0ZXMpIHRvIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJpbnQgYWRkY2hzdHIoY29uc3QgY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCBhZGRjaG5zdHIoY29uc3QgY2h0eXBlICpjaHN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd2FkZGNoc3RyKFdJTkRPVyAqd2luLCBjb25zdCBjaHR5cGUgKmNoc3RyKTtcZlIKKy5icgorXGZCaW50IHdhZGRjaG5zdHIoV0lORE9XICp3aW4sIGNvbnN0IGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12YWRkY2hzdHIoaW50IHksIGludCB4LCBjb25zdCBjaHR5cGUgKmNoc3RyKTtcZlIKKy5icgorXGZCaW50IG12YWRkY2huc3RyKGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlICpjaHN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZ3YWRkY2hzdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCBtdndhZGRjaG5zdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2h0eXBlICpjaHN0ciwgaW50IG4pO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBjb3B5IFxmSWNoc3RyXGZSIGludG8gdGhlIHdpbmRvdyBpbWFnZSBzdHJ1Y3R1cmUgYXQgYW5kIGFmdGVyCit0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uICBUaGUgZm91ciByb3V0aW5lcyB3aXRoIFxmSW5cZlIgYXMgdGhlIGxhc3QKK2FyZ3VtZW50IGNvcHkgYXQgbW9zdCBcZkluXGZSIGVsZW1lbnRzLCBidXQgbm8gbW9yZSB0aGFuIHdpbGwgZml0IG9uIHRoZSBsaW5lLgorSWYgXGZCblxmUj1cZkItMVxmUiB0aGVuIHRoZSB3aG9sZSBzdHJpbmcgaXMgY29waWVkLCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YKK2NoYXJhY3RlcnMgdGhhdCB3aWxsIGZpdCBvbiB0aGUgbGluZS4KKy5QUAorVGhlIHdpbmRvdyBjdXJzb3IgaXMgXGZJbm90XGZSIGFkdmFuY2VkLCBhbmQgdGhlc2Ugcm91dGluZXMgd29yayBmYXN0ZXIgdGhhbgorXGZCd2FkZG5zdHJcZlIuICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhleSBkbyBub3QgcGVyZm9ybSBhbnkga2luZCBvZiBjaGVja2luZworKHN1Y2ggYXMgZm9yIHRoZSBuZXdsaW5lLCBiYWNrc3BhY2UsIG9yIGNhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXJzKSwgdGhleSBkbyBub3QKK2FkdmFuY2UgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLCB0aGV5IGRvIG5vdCBleHBhbmQgb3RoZXIgY29udHJvbCBjaGFyYWN0ZXJzCit0byBeLWVzY2FwZXMsIGFuZCB0aGV5IHRydW5jYXRlIHRoZSBzdHJpbmcgaWYgaXQgY3Jvc3NlcyB0aGUgcmlnaHQgbWFyZ2luLAorcmF0aGVyIHRoYW4gd3JhcHBpbmcgaXQgYXJvdW5kIHRvIHRoZSBuZXcgbGluZS4KKy5TSCBSRVRVUk4gVkFMVUVTCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSIG9uIHN1Y2Nlc3MKKyh0aGUgU1ZyNCBtYW51YWxzIHNwZWNpZnkgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24KK3N1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzIG90aGVyd2lzZSBub3RlZCBpbiB0aGUgcHJlY2VkaW5nIHJvdXRpbmUKK2Rlc2NyaXB0aW9ucy4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK1RoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwuCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0IFxmQndhZGRjaG5zdHJcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZW50cnkgcG9pbnRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkuCisuUFAKK0NvbXBhcmFibGUgZnVuY3Rpb25zIGluIHRoZSB3aWRlLWNoYXJhY3RlciAobmN1cnNlc3cpIGxpYnJhcnkgYXJlCitkZXNjcmliZWQgaW4KK1xmQmN1cnNfYWRkX3djaHN0clxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZHN0ci4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZHN0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODhiOWRkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYWRkc3RyLjN4CkBAIC0wLDAgKzEsOTcgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19hZGRzdHIuM3gsdiAxLjEzIDIwMDUvMDUvMTUgMTY6MTc6MTQgdG9tIEV4cCAkCisuVEggY3Vyc19hZGRzdHIgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJhZGRzdHJcZlIsCitcZkJhZGRuc3RyXGZSLAorXGZCd2FkZHN0clxmUiwKK1xmQndhZGRuc3RyXGZSLAorXGZCbXZhZGRzdHJcZlIsCitcZkJtdmFkZG5zdHJcZlIsCitcZkJtdndhZGRzdHJcZlIsCitcZkJtdndhZGRuc3RyXGZSIC0gYWRkIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgdG8gYSBcZkJjdXJzZXNcZlIgd2luZG93IGFuZCBhZHZhbmNlIGN1cnNvcgorLmFkCisuaHkKKy5TSCBTWU5PUFNJUworLm5mCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuUFAKK1xmQmludCBhZGRzdHIoY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IGFkZG5zdHIoY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3YWRkc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjb25zdCBjaGFyICpcZlJcZklzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2FkZG5zdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNvbnN0IGNoYXIgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZhZGRzdHIoaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjb25zdCBjaGFyICpcZlJcZklzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZhZGRuc3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndhZGRzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2FkZG5zdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3QgY2hhciAqXGZSXGZJc3RyLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgd3JpdGUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIChudWxsLXRlcm1pbmF0ZWQpIGNoYXJhY3RlciBzdHJpbmcKK1xmSXN0clxmUiBvbiB0aGUgZ2l2ZW4gd2luZG93LgorSXQgaXMgc2ltaWxhciB0byBjYWxsaW5nIFxmQndhZGRjaFxmUiBvbmNlIGZvciBlYWNoIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLgorVGhlIGZvdXIgcm91dGluZXMgd2l0aCBcZkluXGZSIGFzIHRoZSBsYXN0IGFyZ3VtZW50Cit3cml0ZSBhdCBtb3N0IFxmSW5cZlIgY2hhcmFjdGVycy4KK0lmIFxmSW5cZlIgaXMgLTEsIHRoZW4gdGhlIGVudGlyZSBzdHJpbmcgd2lsbCBiZSBhZGRlZCwKK3VwIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgd2lsbCBmaXQgb24gdGhlIGxpbmUsCitvciB1bnRpbCBhIHRlcm1pbmF0aW5nIG51bGwgaXMgcmVhY2hlZC4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIgb24gc3VjY2VzcworKHRoZSBTVnI0IG1hbnVhbHMgc3BlY2lmeSBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbgorc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLgorVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCBvcgoraWYgdGhlIHN0cmluZyBwb2ludGVyIGlzIG51bGwgb3IKK2lmIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxzIHRvIFxmQndhZGRjaFxmUCByZXR1cm4gYW4gZXJyb3IuCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgb2YgdGhlc2Ugcm91dGluZXMgZXhjZXB0IFxmQndhZGRzdHJcZlIgYW5kIFxmQndhZGRuc3RyXGZSIG1heSBiZQorbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitBbGwgdGhlc2UgZW50cnkgcG9pbnRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuICBUaGUKK1hTSSBlcnJvcnMgRUlMU0VRIGFuZCBFT1ZFUkZMT1csIGFzc29jaWF0ZWQgd2l0aCBleHRlbmRlZC1sZXZlbCBjb25mb3JtYW5jZSwKK2FyZSBub3QgeWV0IGRldGVjdGVkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX2FkZGNoXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfYWRkd3N0ci4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZHdzdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkMjc0NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2FkZHdzdHIuM3gKQEAgLTAsMCArMSw5NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2FkZHdzdHIuM3gsdiAxLjcgMjAwNi8wMi8yNSAyMDo1OTowOCB0b20gRXhwICQKKy5USCBjdXJzX2FkZHdzdHIgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJhZGR3c3RyXGZSLAorXGZCYWRkbndzdHJcZlIsCitcZkJ3YWRkd3N0clxmUiwKK1xmQndhZGRud3N0clxmUiwKK1xmQm12YWRkd3N0clxmUiwKK1xmQm12YWRkbndzdHJcZlIsCitcZkJtdndhZGR3c3RyXGZSLAorXGZCbXZ3YWRkbndzdHJcZlIgXC0gYWRkIGEgc3RyaW5nIG9mIHdpZGUgY2hhcmFjdGVycyB0byBhIFxmQmN1cnNlc1xmUiB3aW5kb3cgYW5kIGFkdmFuY2UgY3Vyc29yCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCisubmYKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5QUAorXGZCaW50IGFkZHdzdHIoY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBhZGRud3N0cihjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3YWRkd3N0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3YWRkbndzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12YWRkd3N0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZhZGRud3N0cihpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2FkZHdzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndhZGRud3N0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgd3JpdGUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlCisobnVsbC10ZXJtaW5hdGVkKSBcZkJ3Y2hhcl90XGZSIGNoYXJhY3RlciBzdHJpbmcKK1xmSXdzdHJcZlIgb24gdGhlIGdpdmVuIHdpbmRvdy4KK0l0IGlzIHNpbWlsYXIgdG8gY29uc3RydWN0aW5nIGEgXGZCY2NoYXJfdFxmUiBmb3IgZWFjaCB3Y2hhcl90IGluIHRoZSBzdHJpbmcsCit0aGVuIGNhbGxpbmcgXGZCd2FkZF93Y2hcZlIgZm9yIHRoZSByZXN1bHRpbmcgXGZCY2NoYXJfdFxmUi4KKy5QUAorVGhlIFxmSW12XGZSIHJvdXRpbmVzIHBlcmZvcm0gY3Vyc29yIG1vdmVtZW50IG9uY2UsIGJlZm9yZSB3cml0aW5nIGFueQorY2hhcmFjdGVycy4KK1RoZXJlYWZ0ZXIsIHRoZSBjdXJzb3IgaXMgYWR2YW5jZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiB3cml0aW5nIHRvIHRoZSB3aW5kb3cuCisuUFAKK1RoZSBmb3VyIHJvdXRpbmVzIHdpdGggXGZJblxmUiBhcyB0aGUgbGFzdCBhcmd1bWVudAord3JpdGUgYXQgbW9zdCBcZkluXGZSIFxmQndjaGFyX3RcZlIgY2hhcmFjdGVycy4KK0lmIFxmSW5cZlIgaXMgLTEsIHRoZW4gdGhlIGVudGlyZSBzdHJpbmcgd2lsbCBiZSBhZGRlZCwKK3VwIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgd2lsbCBmaXQgb24gdGhlIGxpbmUsCitvciB1bnRpbCBhIHRlcm1pbmF0aW5nIG51bGwgaXMgcmVhY2hlZC4KKy5TSCBSRVRVUk4gVkFMVUVTCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSIG9uIHN1Y2Nlc3MuCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgb2YgdGhlc2Ugcm91dGluZXMgZXhjZXB0IFxmQndhZGRud3N0clxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitBbGwgdGhlc2UgZW50cnkgcG9pbnRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2FkZF93Y2hcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2F0dHIuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19hdHRyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNThhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19hdHRyLjN4CkBAIC0wLDAgKzEsMjcwIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2F0dHIuM3gsdiAxLjMxIDIwMDcvMDMvMTcgMjA6MzA6MzMgdG9tIEV4cCAkCisuVEggY3Vyc19hdHRyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCYXR0cm9mZlxmUiwKK1xmQndhdHRyb2ZmXGZSLAorXGZCYXR0cm9uXGZSLAorXGZCd2F0dHJvblxmUiwKK1xmQmF0dHJzZXRcZlIsCitcZkJ3YXR0cnNldFxmUiwKK1xmQmNvbG9yX3NldFxmUiwKK1xmQndjb2xvcl9zZXRcZlIsCitcZkJzdGFuZGVuZFxmUiwKK1xmQndzdGFuZGVuZFxmUiwKK1xmQnN0YW5kb3V0XGZSLAorXGZCd3N0YW5kb3V0XGZSLAorXGZCYXR0cl9nZXRcZlIsCitcZkJ3YXR0cl9nZXRcZlIsCitcZkJhdHRyX29mZlxmUiwKK1xmQndhdHRyX29mZlxmUiwKK1xmQmF0dHJfb25cZlIsCitcZkJ3YXR0cl9vblxmUiwKK1xmQmF0dHJfc2V0XGZSLAorXGZCd2F0dHJfc2V0XGZSLAorXGZCY2hnYXRcZlIsCitcZkJ3Y2hnYXRcZlIsCitcZkJtdmNoZ2F0XGZSLAorXGZCbXZ3Y2hnYXRcZlIsCitcZkJQQUlSX05VTUJFUlxmUiAtIFxmQmN1cnNlc1xmUiBjaGFyYWN0ZXIgYW5kIHdpbmRvdyBhdHRyaWJ1dGUgY29udHJvbCByb3V0aW5lcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLmJyCitcZkJpbnQgYXR0cm9mZihpbnQgYXR0cnMpO1xmUgorLmJyCitcZkJpbnQgd2F0dHJvZmYoV0lORE9XICp3aW4sIGludCBhdHRycyk7XGZSCisuYnIKK1xmQmludCBhdHRyb24oaW50IGF0dHJzKTtcZlIKKy5icgorXGZCaW50IHdhdHRyb24oV0lORE9XICp3aW4sIGludCBhdHRycyk7XGZSCisuYnIKK1xmQmludCBhdHRyc2V0KGludCBhdHRycyk7XGZSCisuYnIKK1xmQmludCB3YXR0cnNldChXSU5ET1cgKndpbiwgaW50IGF0dHJzKTtcZlIKKy5icgorXGZCaW50IGNvbG9yX3NldChzaG9ydCBjb2xvcl9wYWlyX251bWJlciwgdm9pZCogb3B0cyk7XGZSCisuYnIKK1xmQmludCB3Y29sb3Jfc2V0KFdJTkRPVyAqd2luLCBzaG9ydCBjb2xvcl9wYWlyX251bWJlcixcZlIKKyAgICAgIFxmQnZvaWQqIG9wdHMpO1xmUgorLmJyCitcZkJpbnQgc3RhbmRlbmQodm9pZCk7XGZSCisuYnIKK1xmQmludCB3c3RhbmRlbmQoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgc3RhbmRvdXQodm9pZCk7XGZSCisuYnIKK1xmQmludCB3c3RhbmRvdXQoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgYXR0cl9nZXQoYXR0cl90ICphdHRycywgc2hvcnQgKnBhaXIsIHZvaWQgKm9wdHMpO1xmUgorLmJyCitcZkJpbnQgd2F0dHJfZ2V0KFdJTkRPVyAqd2luLCBhdHRyX3QgKmF0dHJzLCBzaG9ydCAqcGFpcixcZlIKKyAgICAgICBcZkJ2b2lkICpvcHRzKTtcZlIKKy5icgorXGZCaW50IGF0dHJfb2ZmKGF0dHJfdCBhdHRycywgdm9pZCAqb3B0cyk7XGZSCisuYnIKK1xmQmludCB3YXR0cl9vZmYoV0lORE9XICp3aW4sIGF0dHJfdCBhdHRycywgdm9pZCAqb3B0cyk7XGZSCisuYnIKK1xmQmludCBhdHRyX29uKGF0dHJfdCBhdHRycywgdm9pZCAqb3B0cyk7XGZSCisuYnIKK1xmQmludCB3YXR0cl9vbihXSU5ET1cgKndpbiwgYXR0cl90IGF0dHJzLCB2b2lkICpvcHRzKTtcZlIKKy5icgorXGZCaW50IGF0dHJfc2V0KGF0dHJfdCBhdHRycywgc2hvcnQgcGFpciwgdm9pZCAqb3B0cyk7XGZSCisuYnIKK1xmQmludCB3YXR0cl9zZXQoV0lORE9XICp3aW4sIGF0dHJfdCBhdHRycywgc2hvcnQgcGFpciwgdm9pZCAqb3B0cyk7XGZSCisuYnIKK1xmQmludCBjaGdhdChpbnQgbiwgYXR0cl90IGF0dHIsIHNob3J0IGNvbG9yLFxmUgorICAgICAgXGZCY29uc3Qgdm9pZCAqb3B0cylcZlIKKy5icgorXGZCaW50IHdjaGdhdChXSU5ET1cgKndpbiwgaW50IG4sIGF0dHJfdCBhdHRyLFxmUgorICAgICAgXGZCc2hvcnQgY29sb3IsIGNvbnN0IHZvaWQgKm9wdHMpXGZSCisuYnIKK1xmQmludCBtdmNoZ2F0KGludCB5LCBpbnQgeCwgaW50IG4sIGF0dHJfdCBhdHRyLFxmUgorICAgICAgXGZCc2hvcnQgY29sb3IsIGNvbnN0IHZvaWQgKm9wdHMpXGZSCisuYnIKK1xmQmludCBtdndjaGdhdChXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBpbnQgbixcZlIKKyAgICAgIFxmQmF0dHJfdCBhdHRyLCBzaG9ydCBjb2xvciwgY29uc3Qgdm9pZCAqb3B0cylcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBtYW5pcHVsYXRlIHRoZSBjdXJyZW50IGF0dHJpYnV0ZXMgb2YgdGhlIG5hbWVkIHdpbmRvdy4gIFRoZQorY3VycmVudCBhdHRyaWJ1dGVzIG9mIGEgd2luZG93IGFwcGx5IHRvIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHdyaXR0ZW4gaW50bwordGhlIHdpbmRvdyB3aXRoIFxmQndhZGRjaFxmUiwgXGZCd2FkZHN0clxmUiBhbmQgXGZCd3ByaW50d1xmUi4gIEF0dHJpYnV0ZXMgYXJlCithIHByb3BlcnR5IG9mIHRoZSBjaGFyYWN0ZXIsIGFuZCBtb3ZlIHdpdGggdGhlIGNoYXJhY3RlciB0aHJvdWdoIGFueSBzY3JvbGxpbmcKK2FuZCBpbnNlcnQvZGVsZXRlIGxpbmUvY2hhcmFjdGVyIG9wZXJhdGlvbnMuICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGV5IGFyZQorZGlzcGxheWVkIGFzIGFwcHJvcHJpYXRlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGdyYXBoaWMgcmVuZGl0aW9uIG9mIGNoYXJhY3RlcnMKK3B1dCBvbiB0aGUgc2NyZWVuLgorLlBQCitUaGUgcm91dGluZSBcZkJhdHRyc2V0XGZSIHNldHMgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gd2luZG93IHRvCitcZklhdHRyc1xmUi4gIFRoZSByb3V0aW5lIFxmQmF0dHJvZmZcZlIgdHVybnMgb2ZmIHRoZSBuYW1lZCBhdHRyaWJ1dGVzIHdpdGhvdXQKK3R1cm5pbmcgYW55IG90aGVyIGF0dHJpYnV0ZXMgb24gb3Igb2ZmLiAgVGhlIHJvdXRpbmUgXGZCYXR0cm9uXGZSIHR1cm5zIG9uIHRoZQorbmFtZWQgYXR0cmlidXRlcyB3aXRob3V0IGFmZmVjdGluZyBhbnkgb3RoZXJzLiAgVGhlIHJvdXRpbmUgXGZCc3RhbmRvdXRcZlIgaXMKK3RoZSBzYW1lIGFzIFxmQmF0dHJvbihBX1NUQU5ET1VUKVxmUi4gIFRoZSByb3V0aW5lIFxmQnN0YW5kZW5kXGZSIGlzIHRoZSBzYW1lCithcyBcZkJhdHRyc2V0KEFfTk9STUFMKVxmUiBvciBcZkJhdHRyc2V0KDApXGZSLCB0aGF0IGlzLCBpdCB0dXJucyBvZmYgYWxsCithdHRyaWJ1dGVzLgorLlBQCitUaGUgXGZCYXR0cnNldFxmUiBhbmQgcmVsYXRlZCByb3V0aW5lcyBkbyBub3QgYWZmZWN0IHRoZSBhdHRyaWJ1dGVzIHVzZWQKK3doZW4gZXJhc2luZyBwb3J0aW9ucyBvZiB0aGUgd2luZG93LgorU2VlIFxmQmN1cnNfYmtnZFxmUigzWCkgZm9yIGZ1bmN0aW9ucyB3aGljaCBtb2RpZnkgdGhlIGF0dHJpYnV0ZXMgdXNlZCBmb3IKK2VyYXNpbmcgYW5kIGNsZWFyaW5nLgorLlBQCitUaGUgcm91dGluZSBcZkJjb2xvcl9zZXRcZlIgc2V0cyB0aGUgY3VycmVudCBjb2xvciBvZiB0aGUgZ2l2ZW4gd2luZG93IHRvIHRoZQorZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGNvbWJpbmF0aW9uIGRlc2NyaWJlZCBieSB0aGUgY29sb3JfcGFpcl9udW1iZXIuIFRoZQorcGFyYW1ldGVyIG9wdHMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIGFwcGxpY2F0aW9ucyBtdXN0IHN1cHBseSBhIG51bGwKK3BvaW50ZXIuCisuUFAKK1RoZSByb3V0aW5lIFxmQndhdHRyX2dldFxmUiByZXR1cm5zIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSBhbmQgY29sb3IgcGFpciBmb3IKK3RoZSBnaXZlbiB3aW5kb3c7IFxmQmF0dHJfZ2V0XGZSIHJldHVybnMgdGhlIGN1cnJlbnQgYXR0cmlidXRlIGFuZCBjb2xvciBwYWlyCitmb3IgXGZCc3Rkc2NyXGZSLgorVGhlIHJlbWFpbmluZyBcZkJhdHRyX1xmUiogZnVuY3Rpb25zIG9wZXJhdGUgZXhhY3RseSBsaWtlIHRoZSBjb3JyZXNwb25kaW5nCitcZkJhdHRyXGZSKiBmdW5jdGlvbnMsIGV4Y2VwdCB0aGF0IHRoZXkgdGFrZSBhcmd1bWVudHMgb2YgdHlwZSBcZkJhdHRyX3RcZlIKK3JhdGhlciB0aGFuIFxmQmludFxmUi4KKy5QUAorVGhlIHJvdXRpbmUgXGZCY2hnYXRcZlIgY2hhbmdlcyB0aGUgYXR0cmlidXRlcyBvZiBhIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzCitzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgbG9jYXRpb24gb2YgXGZCc3Rkc2NyXGZSLiAgSXQgZG9lcyBub3QgdXBkYXRlCit0aGUgY3Vyc29yIGFuZCBkb2VzIG5vdCBwZXJmb3JtIHdyYXBwaW5nLiAgQSBjaGFyYWN0ZXIgY291bnQgb2YgLTEgb3IgZ3JlYXRlcgordGhhbiB0aGUgcmVtYWluaW5nIHdpbmRvdyB3aWR0aCBtZWFucyB0byBjaGFuZ2UgYXR0cmlidXRlcyBhbGwgdGhlIHdheSB0byB0aGUKK2VuZCBvZiB0aGUgY3VycmVudCBsaW5lLiAgVGhlIFxmQndjaGdhdFxmUiBmdW5jdGlvbiBnZW5lcmFsaXplcyB0aGlzIHRvIGFueQord2luZG93OyB0aGUgXGZCbXZ3Y2hnYXRcZlIgZnVuY3Rpb24gZG9lcyBhIGN1cnNvciBtb3ZlIGJlZm9yZSBhY3RpbmcuICBJbiB0aGVzZQorZnVuY3Rpb25zLCB0aGUgY29sb3IgYXJndW1lbnQgaXMgYSBjb2xvci1wYWlyIGluZGV4IChhcyBpbiB0aGUgZmlyc3QgYXJndW1lbnQKK29mIFxmSWluaXRfcGFpclxmUiwgc2VlIFxmQmN1cnNfY29sb3JcZlIoM1gpKS4gIFRoZSBcZkJvcHRzXGZSIGFyZ3VtZW50IGlzIG5vdAorcHJlc2VudGx5IHVzZWQsIGJ1dCBpcyByZXNlcnZlZCBmb3IgdGhlIGZ1dHVyZSAobGVhdmUgaXQgXGZCTlVMTFxmUikuCisuU1MgQXR0cmlidXRlcworVGhlIGZvbGxvd2luZyB2aWRlbyBhdHRyaWJ1dGVzLCBkZWZpbmVkIGluIFxmQjxjdXJzZXMuaD5cZlIsIGNhbiBiZSBwYXNzZWQgdG8KK3RoZSByb3V0aW5lcyBcZkJhdHRyb25cZlIsIFxmQmF0dHJvZmZcZlIsIGFuZCBcZkJhdHRyc2V0XGZSLCBvciBPUidkIHdpdGggdGhlCitjaGFyYWN0ZXJzIHBhc3NlZCB0byBcZkJhZGRjaFxmUi4KKy5QUAorLlRTCitjZW50ZXIgOworbCBsIC4KK1xmQkFfTk9STUFMXGZSCU5vcm1hbCBkaXNwbGF5IChubyBoaWdobGlnaHQpCitcZkJBX1NUQU5ET1VUXGZSCUJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2YgdGhlIHRlcm1pbmFsLgorXGZCQV9VTkRFUkxJTkVcZlIJVW5kZXJsaW5pbmcKK1xmQkFfUkVWRVJTRVxmUglSZXZlcnNlIHZpZGVvCitcZkJBX0JMSU5LXGZSCUJsaW5raW5nCitcZkJBX0RJTVxmUglIYWxmIGJyaWdodAorXGZCQV9CT0xEXGZSCUV4dHJhIGJyaWdodCBvciBib2xkCitcZkJBX1BST1RFQ1RcZlIJUHJvdGVjdGVkIG1vZGUKK1xmQkFfSU5WSVNcZlIJSW52aXNpYmxlIG9yIGJsYW5rIG1vZGUKK1xmQkFfQUxUQ0hBUlNFVFxmUglBbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorXGZCQV9DSEFSVEVYVFxmUglCaXQtbWFzayB0byBleHRyYWN0IGEgY2hhcmFjdGVyCitcZkJDT0xPUl9QQUlSKFxmUlxmSW5cZlJcZkIpXGZSCUNvbG9yLXBhaXIgbnVtYmVyIFxmSW5cZlIKKy5URQorLlBQCitUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHRoZSByZXZlcnNlIG9mIFxmQkNPTE9SX1BBSVIoXGZSXGZJblxmUlxmQilcZlI6CisuUFAKKy5icgorXGZCUEFJUl9OVU1CRVIoXGZSXGZJYXR0cnNcZlIpIFJldHVybnMgdGhlIHBhaXIgbnVtYmVyIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBcZkJDT0xPUl9QQUlSKFxmUlxmSW5cZlJcZkIpXGZSIGF0dHJpYnV0ZS4KKy5icgorLlBQCitUaGUgcmV0dXJuIHZhbHVlcyBvZiBtYW55IG9mIHRoZXNlIHJvdXRpbmVzIGFyZSBub3QgbWVhbmluZ2Z1bCAodGhleSBhcmUKK2ltcGxlbWVudGVkIGFzIG1hY3JvLWV4cGFuZGVkIGFzc2lnbm1lbnRzIGFuZCBzaW1wbHkgcmV0dXJuIHRoZWlyIGFyZ3VtZW50KS4KK1RoZSBTVnI0IG1hbnVhbCBwYWdlIGNsYWltcyAoZmFsc2VseSkgdGhhdCB0aGVzZSByb3V0aW5lcyBhbHdheXMgcmV0dXJuIFxmQjFcZlIuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJhdHRyb2ZmXGZSLCBcZkJ3YXR0cm9mZlxmUiwgXGZCYXR0cm9uXGZSLCBcZkJ3YXR0cm9uXGZSLAorXGZCYXR0cnNldFxmUiwgXGZCd2F0dHJzZXRcZlIsIFxmQnN0YW5kZW5kXGZSIGFuZCBcZkJzdGFuZG91dFxmUiBtYXkgYmUgbWFjcm9zLgorLlBQCitcZkJDT0xPUl9QQUlSXGZQIHZhbHVlcyBjYW4gb25seSBiZSBPUidkIHdpdGggYXR0cmlidXRlcyBpZiB0aGUgcGFpcgorbnVtYmVyIGlzIGxlc3MgdGhhbiAyNTYuCitUaGUgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBzdWNoIGFzIFxmQmNvbG9yX3NldFxmUCBjYW4gcGFzcyBhIGNvbG9yIHBhaXIKK3ZhbHVlIGRpcmVjdGx5LgorSG93ZXZlciwgbmN1cnNlcyBBQkkgNCBhbmQgNSBzaW1wbHkgT1IgdGhpcyB2YWx1ZSB3aXRoaW4gdGhlIGFsdGVybmF0ZSBmdW5jdGlvbnMuCitZb3UgbXVzdCB1c2UgbmN1cnNlcyBBQkkgNiB0byBzdXBwb3J0IG1vcmUgdGhhbiAyNTYgY29sb3IgcGFpcnMuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LiAgVGhlCitzdGFuZGFyZCBkZWZpbmVkIHRoZSBkZWRpY2F0ZWQgdHlwZSBmb3IgaGlnaGxpZ2h0cywgXGZCYXR0cl90XGZSLCB3aGljaCBpcyBub3QKK2RlZmluZWQgaW4gU1ZyNCBjdXJzZXMuIFRoZSBmdW5jdGlvbnMgdGFraW5nIFxmQmF0dHJfdFxmUiBhcmd1bWVudHMgYXJlCitub3Qgc3VwcG9ydGVkIHVuZGVyIFNWcjQuCisuUFAKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIHN0YXRlcyB0aGF0IHdoZXRoZXIgdGhlIHRyYWRpdGlvbmFsIGZ1bmN0aW9ucworXGZCYXR0cm9uXGZSL1xmQmF0dHJvZmZcZlIvXGZCYXR0cnNldFxmUiBjYW4gbWFuaXB1bGF0ZSBhdHRyaWJ1dGVzIG90aGVyIHRoYW4KK1xmQkFfQkxJTktcZlIsIFxmQkFfQk9MRFxmUiwgXGZCQV9ESU1cZlIsIFxmQkFfUkVWRVJTRVxmUiwgXGZCQV9TVEFORE9VVFxmUiwgb3IKK1xmQkFfVU5ERVJMSU5FXGZSIGlzICJ1bnNwZWNpZmllZCIuICBVbmRlciB0aGlzIGltcGxlbWVudGF0aW9uIGFzIHdlbGwgYXMKK1NWcjQgY3Vyc2VzLCB0aGVzZSBmdW5jdGlvbnMgY29ycmVjdGx5IG1hbmlwdWxhdGUgYWxsIG90aGVyIGhpZ2hsaWdodHMKKyhzcGVjaWZpY2FsbHksIFxmQkFfQUxUQ0hBUlNFVFxmUiwgXGZCQV9QUk9URUNUXGZSLCBhbmQgXGZCQV9JTlZJU1xmUikuCisuUFAKK1hTSSBDdXJzZXMgYWRkZWQgdGhlIG5ldyBlbnRyeSBwb2ludHMsIFxmQmF0dHJfZ2V0XGZSLCBcZkJhdHRyX29uXGZSLAorXGZCYXR0cl9vZmZcZlIsIFxmQmF0dHJfc2V0XGZSLCBcZkJ3YXR0cl9vblxmUiwgXGZCd2F0dHJfb2ZmXGZSLAorXGZCd2F0dHJfZ2V0XGZSLCBcZkJ3YXR0cl9zZXRcZlIuICBUaGVzZSBhcmUgaW50ZW5kZWQgdG8gd29yayB3aXRoCithIG5ldyBzZXJpZXMgb2YgaGlnaGxpZ2h0IG1hY3JvcyBwcmVmaXhlZCB3aXRoIFxmQldBX1xmUi4KKy5QUAorT2xkZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWJyYXJ5IGRpZCBub3QgZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSBzY3JlZW4KK3doZW4gY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMuCitVc2UgXGZCdG91Y2h3aW5cZlIgdG8gZm9yY2UgdGhlIHNjcmVlbiB0byBtYXRjaCB0aGUgdXBkYXRlZCBhdHRyaWJ1dGVzLgorLlBQCisuVFMKK2NlbnRlciA7CitsIGwgLgorXGZCV0FfTk9STUFMXGZSCU5vcm1hbCBkaXNwbGF5IChubyBoaWdobGlnaHQpCitcZkJXQV9TVEFORE9VVFxmUglCZXN0IGhpZ2hsaWdodGluZyBtb2RlIG9mIHRoZSB0ZXJtaW5hbC4KK1xmQldBX1VOREVSTElORVxmUglVbmRlcmxpbmluZworXGZCV0FfUkVWRVJTRVxmUglSZXZlcnNlIHZpZGVvCitcZkJXQV9CTElOS1xmUglCbGlua2luZworXGZCV0FfRElNXGZSCUhhbGYgYnJpZ2h0CitcZkJXQV9CT0xEXGZSCUV4dHJhIGJyaWdodCBvciBib2xkCitcZkJXQV9BTFRDSEFSU0VUXGZSCUFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisuVEUKKy5QUAorVGhlIFhTSSBjdXJzZXMgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgZWFjaCBwYWlyIG9mIGNvcnJlc3BvbmRpbmcgXGZCQV9cZlIKK2FuZCBcZkJXQV9cZlItdXNpbmcgZnVuY3Rpb25zIG9wZXJhdGVzIG9uIHRoZSBzYW1lIGN1cnJlbnQtaGlnaGxpZ2h0CitpbmZvcm1hdGlvbi4KKy5QUAorVGhlIFhTSSBzdGFuZGFyZCBleHRlbmRlZCBjb25mb3JtYW5jZSBsZXZlbCBhZGRzIG5ldyBoaWdobGlnaHRzCitcZkJBX0hPUklaT05UQUxcZlIsIFxmQkFfTEVGVFxmUiwgXGZCQV9MT1dcZlIsIFxmQkFfUklHSFRcZlIsIFxmQkFfVE9QXGZSLAorXGZCQV9WRVJUSUNBTFxmUiAoYW5kIGNvcnJlc3BvbmRpbmcgXGZCV0FfXGZSIG1hY3JvcyBmb3IgZWFjaCkgd2hpY2ggdGhpcworaW1wbGVtZW50YXRpb24gZG9lcyBub3QgeWV0IHN1cHBvcnQuCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQk9LXGZSIG9uIHN1Y2Nlc3MsIG9yIFxmQkVSUlxmUCBvbiBmYWlsdXJlLgorLlBQCitYL09wZW4gZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLgorLlBQCitUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLgorVGhlIFxmQndjb2xvcl9zZXRcZlAgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgY29sb3IgcGFpciBwYXJhbWV0ZXIKK2lzIG91dHNpZGUgdGhlIHJhbmdlIDAuLkNPTE9SX1BBSVJTLTEuCitUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gcHJvdmlkZXMKK1xmQmdldGF0dHJzXGZSCitmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGN1cnNlcy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfYWRkY2hcZlIoM1gpLAorXGZCY3Vyc19hZGRzdHJcZlIoM1gpLAorXGZCY3Vyc19ia2dkXGZSKDNYKSwKK1xmQmN1cnNfcHJpbnR3XGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19iZWVwLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYmVlcC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU1NzYxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYmVlcC4zeApAQCAtMCwwICsxLDYzIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYmVlcC4zeCx2IDEuMTAgMjAwNS8wMS8wOCAxNzo1NTo1MSB0b20gRXhwICQKKy5USCBjdXJzX2JlZXAgM1ggIiIKKy5TSCBOQU1FCitcZkJiZWVwXGZSLCBcZkJmbGFzaFxmUiAtIFxmQmN1cnNlc1xmUiBiZWxsIGFuZCBzY3JlZW4gZmxhc2ggcm91dGluZXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJpbnQgYmVlcCh2b2lkKTtcZlIKKy5icgorXGZCaW50IGZsYXNoKHZvaWQpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJiZWVwXGZSIGFuZCBcZkJmbGFzaFxmUiByb3V0aW5lcyBhcmUgdXNlZCB0byBhbGVydCB0aGUgdGVybWluYWwgdXNlci4KK1RoZSByb3V0aW5lIFxmQmJlZXBcZlIgc291bmRzIGFuIGF1ZGlibGUgYWxhcm0gb24gdGhlIHRlcm1pbmFsLCBpZiBwb3NzaWJsZTsKK290aGVyd2lzZSBpdCBmbGFzaGVzIHRoZSBzY3JlZW4gKHZpc2libGUgYmVsbCkuICBUaGUgcm91dGluZSBcZkJmbGFzaFxmUgorZmxhc2hlcyB0aGUgc2NyZWVuLCBhbmQgaWYgdGhhdCBpcyBub3QgcG9zc2libGUsIHNvdW5kcyB0aGUgYWxlcnQuICBJZiBuZWl0aGVyCithbGVydCBpcyBwb3NzaWJsZSwgbm90aGluZyBoYXBwZW5zLiAgTmVhcmx5IGFsbCB0ZXJtaW5hbHMgaGF2ZSBhbiBhdWRpYmxlIGFsZXJ0CisoYmVsbCBvciBiZWVwKSwgYnV0IG9ubHkgc29tZSBjYW4gZmxhc2ggdGhlIHNjcmVlbi4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBcZkJPS1xmUiBpZiB0aGV5IHN1Y2NlZWQgaW4gYmVlcGluZyBvciBmbGFzaGluZywKK1xmQkVSUlxmUiBvdGhlcndpc2UuCisuU0ggRVhURU5TSU9OUworU1ZyNCdzIGJlZXAgYW5kIGZsYXNoIHJvdXRpbmVzIGFsd2F5cyByZXR1cm5lZCBcZkJPS1xmUiwgc28gaXQgd2FzIG5vdAorcG9zc2libGUgdG8gdGVsbCB3aGVuIHRoZSBiZWVwIG9yIGZsYXNoIGZhaWxlZC4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCitMaWtlIFNWcjQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZXkgYWx3YXlzIHJldHVybiBcZkJPS1xmUi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19ia2dkLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYmtnZC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmQ3NjhhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYmtnZC4zeApAQCAtMCwwICsxLDk4IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYmtnZC4zeCx2IDEuMTkgMjAwMy8xMi8yNyAxODo1MDo0MCB0b20gRXhwICQKKy5USCBjdXJzX2JrZ2QgM1ggIiIKKy5TSCBOQU1FCitcZkJia2dkc2V0XGZSLCBcZkJ3YmtnZHNldFxmUiwKK1xmQmJrZ2RcZlIsIFxmQndia2dkXGZSLAorXGZCZ2V0YmtnZFxmUiAtIFxmQmN1cnNlc1xmUiB3aW5kb3cgYmFja2dyb3VuZCBtYW5pcHVsYXRpb24gcm91dGluZXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLlBQCitcZkJ2b2lkIGJrZ2RzZXQoY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCdm9pZCB3YmtnZHNldChXSU5ET1cgKndpbiwgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IGJrZ2QoY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IHdia2dkKFdJTkRPVyAqd2luLCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJjaHR5cGUgZ2V0YmtnZChXSU5ET1cgKndpbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmJrZ2RzZXRcZlIgYW5kIFxmQndia2dkc2V0XGZSIHJvdXRpbmVzIG1hbmlwdWxhdGUgdGhlCitiYWNrZ3JvdW5kIG9mIHRoZSBuYW1lZCB3aW5kb3cuCitUaGUgd2luZG93IGJhY2tncm91bmQgaXMgYSBcZkJjaHR5cGVcZlIgY29uc2lzdGluZyBvZgorYW55IGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgKGkuZS4sIHJlbmRpdGlvbikgYW5kIGEgY2hhcmFjdGVyLgorVGhlIGF0dHJpYnV0ZSBwYXJ0IG9mIHRoZSBiYWNrZ3JvdW5kIGlzIGNvbWJpbmVkIChPUidlZCkgd2l0aCBhbGwgbm9uLWJsYW5rCitjaGFyYWN0ZXJzIHRoYXQgYXJlIHdyaXR0ZW4gaW50byB0aGUgd2luZG93IHdpdGggXGZCd2FkZGNoXGZSLiAgQm90aAordGhlIGNoYXJhY3RlciBhbmQgYXR0cmlidXRlIHBhcnRzIG9mIHRoZSBiYWNrZ3JvdW5kIGFyZSBjb21iaW5lZCB3aXRoCit0aGUgYmxhbmsgY2hhcmFjdGVycy4gIFRoZSBiYWNrZ3JvdW5kIGJlY29tZXMgYSBwcm9wZXJ0eSBvZiB0aGUKK2NoYXJhY3RlciBhbmQgbW92ZXMgd2l0aCB0aGUgY2hhcmFjdGVyIHRocm91Z2ggYW55IHNjcm9sbGluZyBhbmQKK2luc2VydC9kZWxldGUgbGluZS9jaGFyYWN0ZXIgb3BlcmF0aW9ucy4KKy5QUAorVG8gdGhlIGV4dGVudCBwb3NzaWJsZSBvbiBhIHBhcnRpY3VsYXIgdGVybWluYWwsCit0aGUgYXR0cmlidXRlIHBhcnQgb2YgdGhlIGJhY2tncm91bmQgaXMgZGlzcGxheWVkCithcyB0aGUgZ3JhcGhpYyByZW5kaXRpb24gb2YgdGhlIGNoYXJhY3RlciBwdXQgb24gdGhlIHNjcmVlbi4KKy5QUAorVGhlIFxmQmJrZ2RcZlIgYW5kIFxmQndia2dkXGZSIGZ1bmN0aW9ucworc2V0IHRoZSBiYWNrZ3JvdW5kIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IG9yIHNwZWNpZmllZCB3aW5kb3cKK2FuZCB0aGVuIGFwcGx5IHRoaXMgc2V0dGluZyB0byBldmVyeSBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhhdCB3aW5kb3c6CisuUFAKKy5SUworVGhlIHJlbmRpdGlvbiBvZiBldmVyeSBjaGFyYWN0ZXIgb24gdGhlIHNjcmVlbiBpcyBjaGFuZ2VkIHRvCit0aGUgbmV3IGJhY2tncm91bmQgcmVuZGl0aW9uLgorLlBQCitXaGVyZXZlciB0aGUgZm9ybWVyIGJhY2tncm91bmQgY2hhcmFjdGVyCithcHBlYXJzLCBpdCBpcyBjaGFuZ2VkIHRvIHRoZSBuZXcgYmFja2dyb3VuZCBjaGFyYWN0ZXIuCisuUkUKKy5QUAorVGhlIFxmQmdldGJrZ2RcZlIgZnVuY3Rpb24gcmV0dXJucyB0aGUgZ2l2ZW4gd2luZG93J3MgY3VycmVudCBiYWNrZ3JvdW5kCitjaGFyYWN0ZXIvYXR0cmlidXRlIHBhaXIuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgcm91dGluZXMgXGZCYmtnZFxmUiBhbmQgXGZCd2JrZ2RcZlIgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQk9LXGZSLgorVGhlIFNWcjQuMCBtYW51YWwgc2F5cyAib3IgYSBub24tbmVnYXRpdmUgaW50ZWdlciBpZiBcZkJpbW1lZG9rXGZSIGlzIHNldCIsCitidXQgdGhpcyBhcHBlYXJzIHRvIGJlIGFuIGVycm9yLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCYmtnZHNldFxmUiBhbmQgXGZCYmtnZFxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KK0l0IHNwZWNpZmllcyB0aGF0IFxmQmJrZ2RcZlIgYW5kIFxmQndia2dkXGZSIHJldHVybiBcZkJFUlJcZlIgb24gZmFpbHVyZS4KK2J1dCBnaXZlcyBubyBmYWlsdXJlIGNvbmRpdGlvbnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2FkZGNoXGZSKDNYKSwKK1xmQmN1cnNfYXR0clxmUigzWCksCitcZkJjdXJzX291dG9wdHNcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2JrZ3JuZC4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2JrZ3JuZC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzZmNmFmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYmtncm5kLjN4CkBAIC0wLDAgKzEsMTA2IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfYmtncm5kLjN4LHYgMS4zIDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggY3Vyc19ia2dybmQgM1ggIiIKKy5TSCBOQU1FCitcZkJia2dybmRcZlIsCitcZkJ3Ymtncm5kXGZSLAorXGZCYmtncm5kc2V0XGZSLAorXGZCd2JrZ3JuZHNldFxmUiwKK1xmQmdldGJrZ3JuZFxmUiwKK1xmQndnZXRia2dybmRcZlIgXC0gXGZCY3Vyc2VzXGZSIHdpbmRvdyBjb21wbGV4IGJhY2tncm91bmQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzCisuU0ggU1lOT1BTSVMKKy5QUAorLkIgI2luY2x1ZGUgPGN1cnNlcy5oPgorLnNwCitcZkJpbnQgYmtncm5kKFxmUlxmQiBjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2JrZ3JuZChcZlJcZkIgV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQnZvaWQgYmtncm5kc2V0KGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUiBcZkIpO1xmUgorLmJyCitcZkJ2b2lkIHdia2dybmRzZXQoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCBnZXRia2dybmQoY2NoYXJfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdnZXRia2dybmQoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNjaGFyX3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmJrZ3JuZHNldFxmUiBhbmQgXGZCd2JrZ3JuZHNldFxmUiByb3V0aW5lcyBtYW5pcHVsYXRlIHRoZQorYmFja2dyb3VuZCBvZiB0aGUgbmFtZWQgd2luZG93LgorVGhlIHdpbmRvdyBiYWNrZ3JvdW5kIGlzIGEgXGZCY2NoYXJfdFxmUiBjb25zaXN0aW5nIG9mCithbnkgY29tYmluYXRpb24gb2YgYXR0cmlidXRlcyAoaS5lLiwgcmVuZGl0aW9uKSBhbmQgYSBjb21wbGV4IGNoYXJhY3Rlci4KK1RoZSBhdHRyaWJ1dGUgcGFydCBvZiB0aGUgYmFja2dyb3VuZCBpcyBjb21iaW5lZCAoT1InZWQpIHdpdGggYWxsIG5vbi1ibGFuaworY2hhcmFjdGVycyB0aGF0IGFyZSB3cml0dGVuIGludG8gdGhlIHdpbmRvdyB3aXRoIFxmQndhZGRjaFxmUi4gIEJvdGgKK3RoZSBjaGFyYWN0ZXIgYW5kIGF0dHJpYnV0ZSBwYXJ0cyBvZiB0aGUgYmFja2dyb3VuZCBhcmUgY29tYmluZWQgd2l0aAordGhlIGJsYW5rIGNoYXJhY3RlcnMuCitUaGUgYmFja2dyb3VuZCBiZWNvbWVzIGEgcHJvcGVydHkgb2YgdGhlCitjaGFyYWN0ZXIgYW5kIG1vdmVzIHdpdGggdGhlIGNoYXJhY3RlciB0aHJvdWdoIGFueSBzY3JvbGxpbmcgYW5kCitpbnNlcnQvZGVsZXRlIGxpbmUvY2hhcmFjdGVyIG9wZXJhdGlvbnMuCisuUFAKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgb24gYQorcGFydGljdWxhciB0ZXJtaW5hbCwgdGhlIGF0dHJpYnV0ZSBwYXJ0IG9mIHRoZSBiYWNrZ3JvdW5kIGlzIGRpc3BsYXllZAorYXMgdGhlIGdyYXBoaWMgcmVuZGl0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgcHV0IG9uIHRoZSBzY3JlZW4uCisuUFAKK1RoZSBcZkJia2dybmRcZlIgYW5kIFxmQndia2dybmRcZlIgZnVuY3Rpb25zCitzZXQgdGhlIGJhY2tncm91bmQgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQgb3Igc3BlY2lmaWVkIHdpbmRvdworYW5kIHRoZW4gYXBwbHkgdGhpcyBzZXR0aW5nIHRvIGV2ZXJ5IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IHdpbmRvdzoKKy5SUworLlBQCitUaGUgcmVuZGl0aW9uIG9mIGV2ZXJ5IGNoYXJhY3RlciBvbiB0aGUgc2NyZWVuIGlzIGNoYW5nZWQgdG8KK3RoZSBuZXcgYmFja2dyb3VuZCByZW5kaXRpb24uCisuUFAKK1doZXJldmVyIHRoZSBmb3JtZXIgYmFja2dyb3VuZCBjaGFyYWN0ZXIKK2FwcGVhcnMsIGl0IGlzIGNoYW5nZWQgdG8gdGhlIG5ldyBiYWNrZ3JvdW5kIGNoYXJhY3Rlci4KKy5SRQorLlBQCitUaGUgXGZCZ2V0Ymtncm5kXGZSIGZ1bmN0aW9uIHJldHVybnMgdGhlIGdpdmVuIHdpbmRvdydzIGN1cnJlbnQgYmFja2dyb3VuZAorY2hhcmFjdGVyL2F0dHJpYnV0ZSBwYWlyIHZpYSB0aGUgXGZCd2NoXGZSIHBvaW50ZXIuCisuCisuU0ggTk9URVMKK05vdGUgdGhhdAorXGZCYmtncm5kXGZSLAorXGZCYmtncm5kc2V0XGZSLCBhbmQKK1xmQmdldGJrZ3JuZFxmUgorbWF5IGJlIG1hY3Jvcy4KKy5TSCBSRVRVUk4gVkFMVUVTCitUaGUgXGZCYmtncm5kc2V0XGZSIGFuZCBcZkJ3Ymtncm5kc2V0XGZSIHJvdXRpbmVzIGRvIG5vdCByZXR1cm4gYSB2YWx1ZS4KKy5QUAorVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHRoZSBvdGhlciBmdW5jdGlvbnMgcmV0dXJuIFxmQk9LXGZSLgorT3RoZXJ3aXNlLCB0aGV5IHJldHVybiBcZkJFUlJcZlIuCitBIG51bGwgd2luZG93IHBvaW50ZXIgaXMgdHJlYXRlZCBhcyBhbiBlcnJvci4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfYmtnZFxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfYm9yZGVyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfYm9yZGVyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjlhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19ib3JkZXIuM3gKQEAgLTAsMCArMSwxNTUgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19ib3JkZXIuM3gsdiAxLjE5IDIwMDcvMDIvMjQgMTY6MTU6MzggdG9tIEV4cCAkCisuVEggY3Vyc19ib3JkZXIgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJib3JkZXJcZlIsCitcZkJ3Ym9yZGVyXGZSLAorXGZCYm94XGZSLAorXGZCaGxpbmVcZlIsCitcZkJ3aGxpbmVcZlIsCitcZkJ2bGluZVxmUiwKK1xmQnd2bGluZVxmUiwKK1xmQm12aGxpbmVcZlIsCitcZkJtdndobGluZVxmUiwKK1xmQm12dmxpbmVcZlIsCitcZkJtdnd2bGluZVxmUiAtIGNyZWF0ZSBcZkJjdXJzZXNcZlIgYm9yZGVycywgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbGluZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5icgorXGZCaW50IGJvcmRlcihjaHR5cGUgbHMsIGNodHlwZSBycywgY2h0eXBlIHRzLCBjaHR5cGUgYnMsXGZSCisgICBcZkJjaHR5cGUgdGwsIGNodHlwZSB0ciwgY2h0eXBlIGJsLCBjaHR5cGUgYnIpO1xmUgorLmJyCitcZkJpbnQgd2JvcmRlcihXSU5ET1cgKndpbiwgY2h0eXBlIGxzLCBjaHR5cGUgcnMsXGZSCisgICBcZkJjaHR5cGUgdHMsIGNodHlwZSBicywgY2h0eXBlIHRsLCBjaHR5cGUgdHIsXGZSCisgICBcZkJjaHR5cGUgYmwsIGNodHlwZSBicik7XGZSCisuYnIKK1xmQmludCBib3goV0lORE9XICp3aW4sIGNodHlwZSB2ZXJjaCwgY2h0eXBlIGhvcmNoKTtcZlIKKy5icgorXGZCaW50IGhsaW5lKGNodHlwZSBjaCwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd2hsaW5lKFdJTkRPVyAqd2luLCBjaHR5cGUgY2gsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHZsaW5lKGNodHlwZSBjaCwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd3ZsaW5lKFdJTkRPVyAqd2luLCBjaHR5cGUgY2gsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12aGxpbmUoaW50IHksIGludCB4LCBjaHR5cGUgY2gsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12d2hsaW5lKFdJTkRPVyAqLCBpbnQgeSwgaW50IHgsIGNodHlwZSBjaCwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZ2bGluZShpbnQgeSwgaW50IHgsIGNodHlwZSBjaCwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZ3dmxpbmUoV0lORE9XICosIGludCB5LCBpbnQgeCwgY2h0eXBlIGNoLCBpbnQgbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmJvcmRlclxmUiwgXGZCd2JvcmRlclxmUiBhbmQgXGZCYm94XGZSIHJvdXRpbmVzCitkcmF3IGEgYm94IGFyb3VuZCB0aGUgZWRnZXMgb2YgYSB3aW5kb3cuCitPdGhlciB0aGFuIHRoZSB3aW5kb3csIGVhY2ggYXJndW1lbnQgaXMgYSBjaGFyYWN0ZXIgd2l0aCBhdHRyaWJ1dGVzOgorLnNwCisuUlMKK1xmSWxzXGZSIC0gbGVmdCBzaWRlLAorLmJyCitcZklyc1xmUiAtIHJpZ2h0IHNpZGUsCisuYnIKK1xmSXRzXGZSIC0gdG9wIHNpZGUsCisuYnIKK1xmSWJzXGZSIC0gYm90dG9tIHNpZGUsCisuYnIKK1xmSXRsXGZSIC0gdG9wIGxlZnQtaGFuZCBjb3JuZXIsCisuYnIKK1xmSXRyXGZSIC0gdG9wIHJpZ2h0LWhhbmQgY29ybmVyLAorLmJyCitcZklibFxmUiAtIGJvdHRvbSBsZWZ0LWhhbmQgY29ybmVyLCBhbmQKKy5icgorXGZJYnJcZlIgLSBib3R0b20gcmlnaHQtaGFuZCBjb3JuZXIuCisuUkUKKy5QUAorSWYgYW55IG9mIHRoZXNlIGFyZ3VtZW50cyBpcyB6ZXJvLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nCitkZWZhdWx0IHZhbHVlcyAoZGVmaW5lZCBpbiBcZkJjdXJzZXMuaFxmUikgYXJlIHVzZWQgaW5zdGVhZDoKKy5zcAorLlJTCitcZkJBQ1NfVkxJTkVcZlIsCisuYnIKK1xmQkFDU19WTElORVxmUiwKKy5icgorXGZCQUNTX0hMSU5FXGZSLAorLmJyCitcZkJBQ1NfSExJTkVcZlIsCisuYnIKK1xmQkFDU19VTENPUk5FUlxmUiwKKy5icgorXGZCQUNTX1VSQ09STkVSXGZSLAorLmJyCitcZkJBQ1NfTExDT1JORVJcZlIsCisuYnIKK1xmQkFDU19MUkNPUk5FUlxmUi4KKy5SRQorLlBQCitcZkJib3goXGZSXGZJd2luXGZSXGZCLCBcZlJcZkl2ZXJjaFxmUlxmQiwgXGZSXGZJaG9yY2hcZlJcZkIpXGZSIGlzIGEgc2hvcnRoYW5kCitmb3IgdGhlIGZvbGxvd2luZyBjYWxsOiBcZkJ3Ym9yZGVyKFxmUlxmSXdpblxmUlxmQixcZlIgXGZJdmVyY2hcZlJcZkIsXGZSCitcZkl2ZXJjaFxmUlxmQixcZlIgXGZJaG9yY2hcZlJcZkIsXGZSIFxmSWhvcmNoXGZSXGZCLCAwLCAwLCAwLCAwKVxmUi4KKy5QUAorVGhlIFxmQmhsaW5lXGZSIGFuZCBcZkJ3aGxpbmVcZlIgZnVuY3Rpb25zIGRyYXcgYSBob3Jpem9udGFsIChsZWZ0IHRvIHJpZ2h0KQorbGluZSB1c2luZyBcZkljaFxmUiBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHdpbmRvdy4gIFRoZQorY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaXMgbm90IGNoYW5nZWQuICBUaGUgbGluZSBpcyBhdCBtb3N0IFxmSW5cZlIgY2hhcmFjdGVycworbG9uZywgb3IgYXMgbWFueSBhcyBmaXQgaW50byB0aGUgd2luZG93LgorLlBQCitUaGUgXGZCdmxpbmVcZlIgYW5kIFxmQnd2bGluZVxmUiBmdW5jdGlvbnMgZHJhdyBhIHZlcnRpY2FsICh0b3AgdG8gYm90dG9tKSBsaW5lCit1c2luZyBcZkljaFxmUiBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHdpbmRvdy4gIFRoZQorY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaXMgbm90IGNoYW5nZWQuICBUaGUgbGluZSBpcyBhdCBtb3N0IFxmSW5cZlIgY2hhcmFjdGVycworbG9uZywgb3IgYXMgbWFueSBhcyBmaXQgaW50byB0aGUgd2luZG93LgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJPS1xmUi4gIFRoZSBTVnI0LjAgbWFudWFsIHNheXMgIm9yIGEKK25vbi1uZWdhdGl2ZSBpbnRlZ2VyIGlmIFxmQmltbWVkb2tcZlIgaXMgc2V0IiwgYnV0IHRoaXMgYXBwZWFycyB0byBiZSBhbiBlcnJvci4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK1RoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwuCisuU0ggTk9URVMKK1RoZSBib3JkZXJzIGdlbmVyYXRlZCBieSB0aGVzZSBmdW5jdGlvbnMgYXJlIFxmSWluc2lkZVxmUiBib3JkZXJzICh0aGlzCitpcyBhbHNvIHRydWUgb2YgU1ZyNCBjdXJzZXMsIHRob3VnaCB0aGUgZmFjdCBpcyBub3QgZG9jdW1lbnRlZCkuCisuUFAKK05vdGUgdGhhdCBcZkJib3JkZXJcZlIgYW5kIFxmQmJveFxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KK1RoZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGV5IHJldHVybiBcZkJFUlJcZlIgb24gZmFpbHVyZSwKK2J1dCBzcGVjaWZpZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19vdXRvcHRzXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfYm9yZGVyX3NldC4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2JvcmRlcl9zZXQuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmODY1MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2JvcmRlcl9zZXQuM3gKQEAgLTAsMCArMSwyMDcgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19ib3JkZXJfc2V0LjN4LHYgMS42IDIwMDUvMDUvMTUgMTY6MTc6MzcgdG9tIEV4cCAkCisuVEggY3Vyc19ib3JkZXJfc2V0IDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCYm9yZGVyX3NldFxmUiwKK1xmQndib3JkZXJfc2V0XGZSLAorXGZCYm94X3NldFxmUiwKK1xmQmhsaW5lX3NldFxmUiwKK1xmQndobGluZV9zZXRcZlIsCitcZkJtdmhsaW5lX3NldFxmUiwKK1xmQm12d2hsaW5lX3NldFxmUiwKK1xmQnZsaW5lX3NldFxmUiwKK1xmQnd2bGluZV9zZXRcZlIsCitcZkJtdnZsaW5lX3NldFxmUiwKK1xmQm12d3ZsaW5lX3NldFxmUiBcLSBjcmVhdGUgXGZCY3Vyc2VzXGZSIGJvcmRlcnMgb3IgbGluZXMgdXNpbmcgY29tcGxleCBjaGFyYWN0ZXJzIGFuZCByZW5kaXRpb25zCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCisuUFAKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGJvcmRlcl9zZXQoXGZSCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZklsc1xmUiwgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJcnNcZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl0c1xmUiwgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJYnNcZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl0bFxmUiwgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJdHJcZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZklibFxmUiwgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJYnJcZlIKK1xmQik7XGZSCisuYnIKK1xmQmludCB3Ym9yZGVyX3NldChcZlIKKyAgIFxmQldJTkRPVyAqd2luXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJbHNcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXJzXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJdHNcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSWJzXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJdGxcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXRyXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJYmxcZlIsIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSWJyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IGJveF9zZXQoXGZSCisgICBcZkJXSU5ET1cgKndpblxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXZlcmNoXGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJaG9yY2hcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgaGxpbmVfc2V0KFxmUgorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSLCBcZkJpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3aGxpbmVfc2V0KFxmUgorICAgXGZCV0lORE9XICpcZlJcZkl3aW5cZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlIsIFxmQmludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aGxpbmVfc2V0KFxmUgorICAgXGZCaW50IFxmUlxmSXlcZlIsIFxmQmludCBcZlJcZkl4XGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSLCBcZkJpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndobGluZV9zZXQoXGZSCisgICBcZkJXSU5ET1cgKlxmUlxmSXdpblxmUiwKKyAgIFxmQmludCBcZlJcZkl5XGZSLCBcZkJpbnQgXGZSXGZJeFxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUiwgXGZCaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgdmxpbmVfc2V0KFxmUgorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSLCBcZkJpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3dmxpbmVfc2V0KFxmUgorICAgXGZCV0lORE9XICpcZlJcZkl3aW5cZlIsCisgICBcZkJjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlIsIFxmQmludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12dmxpbmVfc2V0KFxmUgorICAgXGZCaW50IFxmUlxmSXlcZlIsIFxmQmludCBcZlJcZkl4XGZSLAorICAgXGZCY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSLCBcZkJpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdnd2bGluZV9zZXQoXGZSCisgICBcZkJXSU5ET1cgKlxmUlxmSXdpblxmUiwKKyAgIFxmQmludCBcZlJcZkl5XGZSLCBcZkJpbnQgXGZSXGZJeFxmUiwKKyAgIFxmQmNvbnN0IGNjaGFyX3QgKlxmUlxmSXdjaFxmUiwgXGZCaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhlCitcZkJib3JkZXJfc2V0XGZSCithbmQKK1xmQndib3JkZXJfc2V0XGZSCitmdW5jdGlvbnMgZHJhdyBhIGJvcmRlciBhcm91bmQgdGhlIGVkZ2VzIG9mIHRoZSBjdXJyZW50IG9yIHNwZWNpZmllZCB3aW5kb3cuCitUaGVzZSBmdW5jdGlvbnMgZG8gbm90IGNoYW5nZSB0aGUgY3Vyc29yIHBvc2l0aW9uLCBhbmQgZG8gbm90IHdyYXAuCisuUFAKK090aGVyIHRoYW4gdGhlIHdpbmRvdywgZWFjaCBhcmd1bWVudCBpcyBhIGNvbXBsZXggY2hhcmFjdGVyIHdpdGggYXR0cmlidXRlczoKKy5SUworXGZJbHNcZlIgLSBsZWZ0IHNpZGUsCisuYnIKK1xmSXJzXGZSIC0gcmlnaHQgc2lkZSwKKy5icgorXGZJdHNcZlIgLSB0b3Agc2lkZSwKKy5icgorXGZJYnNcZlIgLSBib3R0b20gc2lkZSwKKy5icgorXGZJdGxcZlIgLSB0b3AgbGVmdC1oYW5kIGNvcm5lciwKKy5icgorXGZJdHJcZlIgLSB0b3AgcmlnaHQtaGFuZCBjb3JuZXIsCisuYnIKK1xmSWJsXGZSIC0gYm90dG9tIGxlZnQtaGFuZCBjb3JuZXIsIGFuZAorLmJyCitcZkliclxmUiAtIGJvdHRvbSByaWdodC1oYW5kIGNvcm5lci4KKy5SRQorLlBQCitJZiBhbnkgb2YgdGhlc2UgYXJndW1lbnRzIGlzIHplcm8sIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKK2RlZmF1bHQgdmFsdWVzIChkZWZpbmVkIGluIFxmQmN1cnNlcy5oXGZSKSBhcmUgdXNlZCBpbnN0ZWFkOgorLlJTCitcZkJXQUNTX1ZMSU5FXGZSLAorLmJyCitcZkJXQUNTX1ZMSU5FXGZSLAorLmJyCitcZkJXQUNTX0hMSU5FXGZSLAorLmJyCitcZkJXQUNTX0hMSU5FXGZSLAorLmJyCitcZkJXQUNTX1VMQ09STkVSXGZSLAorLmJyCitcZkJXQUNTX1VSQ09STkVSXGZSLAorLmJyCitcZkJXQUNTX0xMQ09STkVSXGZSLCBhbmQKKy5icgorXGZCV0FDU19MUkNPUk5FUlxmUi4KKy5SRQorLlBQCitcZkJib3hfc2V0KFxmUlxmSXdpblxmUiwgXGZJdmVyY2hcZlJcZkIsIFxmUlxmSWhvcmNoXGZSXGZCKTtcZlIKK2lzIGEgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nIGNhbGw6CisuUFAKK1xmQndib3JkZXJfc2V0KFxmUlxmSXdpblxmUlxmQiwgXGZSXGZJdmVyY2hcZlJcZkIsIFxmUlxmSXZlcmNoXGZSXGZCLFxmUgorICAgIFxmSWhvcmNoXGZSXGZCLCBcZlJcZklob3JjaFxmUlxmQiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7XGZSCisuUFAKK1RoZQorXGZCKmxpbmVfc2V0XGZSCitmdW5jdGlvbnMgdXNlCitcZkl3Y2hcZlIKK3RvIGRyYXcgYSBsaW5lIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgd2luZG93LgorVGhlIGxpbmUgaXMgYXQgbW9zdCBcZkluXGZSIGNoYXJhY3RlcnMgbG9uZyBvciBhcyBtYW55IGFzIGZpdCBpbnRvIHRoZSB3aW5kb3cuCitUaGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaXMgbm90IGNoYW5nZWQuCisuUFAKK1RoZQorXGZCaGxpbmVfc2V0XGZSLAorXGZCbXZobGluZV9zZXRcZlIsCitcZkJtdndobGluZV9zZXRcZlIsIGFuZAorXGZCd2hsaW5lX3NldFxmUgorZnVuY3Rpb25zIGRyYXcgYSBsaW5lIHByb2NlZWRpbmcgdG93YXJkIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgc2FtZSBsaW5lLgorLlBQCitUaGUKK1xmQnZsaW5lX3NldFxmUiwKK1xmQm12dmxpbmVfc2V0XGZSLAorXGZCbXZ3dmxpbmVfc2V0XGZSLCBhbmQKK1xmQnd2bGluZV9zZXRcZlIKK2Z1bmN0aW9ucyBkcmF3IGEgbGluZSBwcm9jZWVkaW5nIHRvd2FyZCB0aGUgbGFzdCBsaW5lIG9mIHRoZSB3aW5kb3cuCisuYnIKKy5TSCBOT1RFUworLlBQCitOb3RlIHRoYXQKK1xmQmJvcmRlcl9zZXRcZlIsCitcZkJobGluZV9zZXRcZlIsCitcZkJtdmhsaW5lX3NldFxmUiwKK1xmQm12dmxpbmVfc2V0XGZSLAorXGZCbXZ3aGxpbmVfc2V0XGZSLAorXGZCbXZ3dmxpbmVfc2V0XGZSLCBhbmQKK1xmQnZsaW5lX3NldFxmUgorbWF5IGJlIG1hY3Jvcy4KKy5icgorLlNIIFJFVFVSTiBWQUxVRVMKKy5QUAorVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4KK1xmQk9LXGZSLgorT3RoZXJ3aXNlLCB0aGV5IHJldHVybgorXGZCRVJSXGZSLgorLlBQCitGdW5jdGlvbnMgdXNpbmcgYSB3aW5kb3cgcGFyYW1ldGVyIHJldHVybiBhbiBlcnJvciBpZiBpdCBpcyBudWxsLgorLlNIIFNFRSBBTFNPCitcZkJuY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfYm9yZGVyXGZSKDNYKSwKK1xmQmN1cnNfb3V0b3B0c1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfY2xlYXIuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19jbGVhci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGJmZDJjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfY2xlYXIuM3gKQEAgLTAsMCArMSwxMjEgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19jbGVhci4zeCx2IDEuMTEgMjAwNy8xMi8yOSAxNTo1ODozOCB0b20gRXhwICQKKy5USCBjdXJzX2NsZWFyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZXJhc2VcZlIsCitcZkJ3ZXJhc2VcZlIsCitcZkJjbGVhclxmUiwKK1xmQndjbGVhclxmUiwKK1xmQmNscnRvYm90XGZSLAorXGZCd2NscnRvYm90XGZSLAorXGZCY2xydG9lb2xcZlIsCitcZkJ3Y2xydG9lb2xcZlIgLSBjbGVhciBhbGwgb3IgcGFydCBvZiBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiMgaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBlcmFzZSh2b2lkKTtcZlIKKy5icgorXGZCaW50IHdlcmFzZShXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBjbGVhcih2b2lkKTtcZlIKKy5icgorXGZCaW50IHdjbGVhcihXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBjbHJ0b2JvdCh2b2lkKTtcZlIKKy5icgorXGZCaW50IHdjbHJ0b2JvdChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBjbHJ0b2VvbCh2b2lkKTtcZlIKKy5icgorXGZCaW50IHdjbHJ0b2VvbChXSU5ET1cgKndpbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmVyYXNlXGZSIGFuZCBcZkJ3ZXJhc2VcZlIgcm91dGluZXMgY29weSBibGFua3MgdG8gZXZlcnkKK3Bvc2l0aW9uIGluIHRoZSB3aW5kb3csIGNsZWFyaW5nIHRoZSBzY3JlZW4uCisuUFAKK1RoZSBcZkJjbGVhclxmUiBhbmQgXGZCd2NsZWFyXGZSIHJvdXRpbmVzIGFyZSBsaWtlIFxmQmVyYXNlXGZSIGFuZAorXGZCd2VyYXNlXGZSLCBidXQgdGhleSBhbHNvIGNhbGwgXGZCY2xlYXJva1xmUiwgc28gdGhhdCB0aGUgc2NyZWVuIGlzCitjbGVhcmVkIGNvbXBsZXRlbHkgb24gdGhlIG5leHQgY2FsbCB0byBcZkJ3cmVmcmVzaFxmUiBmb3IgdGhhdCB3aW5kb3cKK2FuZCByZXBhaW50ZWQgZnJvbSBzY3JhdGNoLgorLlBQCitUaGUgXGZCY2xydG9ib3RcZlIgYW5kIFxmQndjbHJ0b2JvdFxmUiByb3V0aW5lcyBlcmFzZSBmcm9tIHRoZSBjdXJzb3IgdG8gdGhlCitlbmQgb2Ygc2NyZWVuLiAgVGhhdCBpcywgdGhleSBlcmFzZSBhbGwgbGluZXMgYmVsb3cgdGhlIGN1cnNvciBpbiB0aGUgd2luZG93LgorQWxzbywgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciwgaW5jbHVzaXZlLCBpcyBlcmFzZWQuCisuUFAKK1RoZSBcZkJjbHJ0b2VvbFxmUiBhbmQgXGZCd2NscnRvZW9sXGZSIHJvdXRpbmVzIGVyYXNlIHRoZSBjdXJyZW50IGxpbmUKK3RvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yLCBpbmNsdXNpdmUsIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4KKy5QUAorQmxhbmtzIGNyZWF0ZWQgYnkgZXJhc3VyZSBoYXZlIHRoZSBjdXJyZW50IGJhY2tncm91bmQgcmVuZGl0aW9uIChhcyBzZXQKK2J5IFxmQndia2dkc2V0XGZSKSBtZXJnZWQgaW50byB0aGVtLgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJPS1xmUiBvbiBzdWNjZXNzIGFuZCBcZkJFUlJcZlAgb24gZmFpbHVyZS4KK1RoZSBTVnI0LjAgbWFudWFsIHNheXMgIm9yIGEKK25vbi1uZWdhdGl2ZSBpbnRlZ2VyIGlmIFxmQmltbWVkb2tcZlIgaXMgc2V0IiwgYnV0IHRoaXMgYXBwZWFycyB0byBiZSBhbiBlcnJvci4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sCitmdW5jdGlvbnMgdXNpbmcgYSB3aW5kb3cgcG9pbnRlciBwYXJhbWV0ZXIgcmV0dXJuIGFuIGVycm9yIGlmIGl0IGlzIG51bGwuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJlcmFzZVxmUiwgXGZCd2VyYXNlXGZSLCBcZkJjbGVhclxmUiwgXGZCd2NsZWFyXGZSLAorXGZCY2xydG9ib3RcZlIsIGFuZCBcZkJjbHJ0b2VvbFxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIFRoZQorc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgdGhleSByZXR1cm4gXGZCRVJSXGZSIG9uIGZhaWx1cmUsIGJ1dCBzcGVjaWZpZXMgbm8KK2Vycm9yIGNvbmRpdGlvbnMuCisuUFAKK1NvbWUgaGlzdG9yaWMgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBoYWQsIGFzIGFuIHVuZG9jdW1lbnRlZCBmZWF0dXJlLCB0aGUKK2FiaWxpdHkgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgXGZCY2xlYXJvayguLi4sIDEpXGZSIGJ5IHNheWluZworXGZCdG91Y2h3aW4oc3Rkc2NyKVxmUiBvciBcZkJjbGVhcihzdGRzY3IpXGZSLiAgVGhpcyB3aWxsIG5vdCB3b3JrIHVuZGVyCituY3Vyc2VzLgorLlBQCitUaGlzIGltcGxlbWVudGF0aW9uLCBhbmQgb3RoZXJzIHN1Y2ggYXMgU29sYXJpcywKK3NldHMgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gMCwwIGFmdGVyIGVyYXNpbmcKK3ZpYSBcZkJ3ZXJhc2UoKVxmUCBhbmQgXGZCd2NsZWFyKClcZlAuCitUaGF0IGZhY3QgaXMgbm90IGRvY3VtZW50ZWQgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zLAorYW5kIG1heSBub3QgYmUgdHJ1ZSBvZiBpbXBsZW1lbnRhdGlvbnMKK3doaWNoIHdlcmUgbm90IGRlcml2ZWQgZnJvbSBTVnI0IHNvdXJjZS4KKy5QUAorTm90IG9idmlvdXMgZnJvbSB0aGUgZGVzY3JpcHRpb24sCittb3N0IGltcGxlbWVudGF0aW9ucyBjbGVhciB0aGUgc2NyZWVuIGFmdGVyIFxmQndjbGVhclxmUAorZXZlbiBmb3IgYSBzdWJ3aW5kb3cgb3IgZGVyaXZlZCB3aW5kb3cuCitJZiB5b3UgZG8gbm90IHdhbnQgdG8gY2xlYXIgdGhlIHNjcmVlbiBkdXJpbmcgdGhlIG5leHQgXGZCd3JlZnJlc2hcZlAsCit1c2UgXGZCd2VyYXNlXGZQIGluc3RlYWQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfb3V0b3B0c1xmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfY29sb3IuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19jb2xvci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWU2M2VmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfY29sb3IuM3gKQEAgLTAsMCArMSwyNDggQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19jb2xvci4zeCx2IDEuMjggMjAwNS8xMi8xOCAwMDowMDozNyB0b20gRXhwICQKKy5USCBjdXJzX2NvbG9yIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCc3RhcnRfY29sb3JcZlIsCitcZkJpbml0X3BhaXJcZlIsCitcZkJpbml0X2NvbG9yXGZSLAorXGZCaGFzX2NvbG9yc1xmUiwKK1xmQmNhbl9jaGFuZ2VfY29sb3JcZlIsCitcZkJjb2xvcl9jb250ZW50XGZSLAorXGZCcGFpcl9jb250ZW50XGZSLAorXGZCQ09MT1JfUEFJUlxmUiAtIFxmQmN1cnNlc1xmUiBjb2xvciBtYW5pcHVsYXRpb24gcm91dGluZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiMgaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuYnIKK1xmQmludCBzdGFydF9jb2xvcih2b2lkKTtcZlIKKy5icgorXGZCaW50IGluaXRfcGFpcihzaG9ydCBwYWlyLCBzaG9ydCBmLCBzaG9ydCBiKTtcZlIKKy5icgorXGZCaW50IGluaXRfY29sb3Ioc2hvcnQgY29sb3IsIHNob3J0IHIsIHNob3J0IGcsIHNob3J0IGIpO1xmUgorLmJyCitcZkJib29sIGhhc19jb2xvcnModm9pZCk7XGZSCisuYnIKK1xmQmJvb2wgY2FuX2NoYW5nZV9jb2xvcih2b2lkKTtcZlIKKy5icgorXGZCaW50IGNvbG9yX2NvbnRlbnQoc2hvcnQgY29sb3IsIHNob3J0ICpyLCBzaG9ydCAqZywgc2hvcnQgKmIpO1xmUgorLmJyCitcZkJpbnQgcGFpcl9jb250ZW50KHNob3J0IHBhaXIsIHNob3J0ICpmLCBzaG9ydCAqYik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorLlNTIE92ZXJ2aWV3CitcZkJjdXJzZXNcZlIgc3VwcG9ydCBjb2xvciBhdHRyaWJ1dGVzIG9uIHRlcm1pbmFscyB3aXRoIHRoYXQgY2FwYWJpbGl0eS4gIFRvCit1c2UgdGhlc2Ugcm91dGluZXMgXGZCc3RhcnRfY29sb3JcZlIgbXVzdCBiZSBjYWxsZWQsIHVzdWFsbHkgcmlnaHQgYWZ0ZXIKK1xmQmluaXRzY3JcZlIuICBDb2xvcnMgYXJlIGFsd2F5cyB1c2VkIGluIHBhaXJzIChyZWZlcnJlZCB0byBhcyBjb2xvci1wYWlycykuCitBIGNvbG9yLXBhaXIgY29uc2lzdHMgb2YgYSBmb3JlZ3JvdW5kIGNvbG9yIChmb3IgY2hhcmFjdGVycykgYW5kIGEgYmFja2dyb3VuZAorY29sb3IgKGZvciB0aGUgYmxhbmsgZmllbGQgb24gd2hpY2ggdGhlIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCkuICBBCitwcm9ncmFtbWVyIGluaXRpYWxpemVzIGEgY29sb3ItcGFpciB3aXRoIHRoZSByb3V0aW5lIFxmQmluaXRfcGFpclxmUi4gIEFmdGVyIGl0CitoYXMgYmVlbiBpbml0aWFsaXplZCwgXGZCQ09MT1JfUEFJUlxmUihcZkluXGZSKSwgYSBtYWNybyBkZWZpbmVkIGluCitcZkI8Y3Vyc2VzLmg+XGZSLCBjYW4gYmUgdXNlZCBhcyBhIG5ldyB2aWRlbyBhdHRyaWJ1dGUuCisuUFAKK0lmIGEgdGVybWluYWwgaXMgY2FwYWJsZSBvZiByZWRlZmluaW5nIGNvbG9ycywgdGhlIHByb2dyYW1tZXIgY2FuIHVzZSB0aGUKK3JvdXRpbmUgXGZCaW5pdF9jb2xvclxmUiB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgYSBjb2xvci4gIFRoZSByb3V0aW5lcworXGZCaGFzX2NvbG9yc1xmUiBhbmQgXGZCY2FuX2NoYW5nZV9jb2xvclxmUiByZXR1cm4gXGZCVFJVRVxmUiBvciBcZkJGQUxTRVxmUiwKK2RlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0ZXJtaW5hbCBoYXMgY29sb3IgY2FwYWJpbGl0aWVzIGFuZCB3aGV0aGVyIHRoZQorcHJvZ3JhbW1lciBjYW4gY2hhbmdlIHRoZSBjb2xvcnMuICBUaGUgcm91dGluZSBcZkJjb2xvcl9jb250ZW50XGZSIGFsbG93cyBhCitwcm9ncmFtbWVyIHRvIGV4dHJhY3QgdGhlIGFtb3VudHMgb2YgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29tcG9uZW50cyBpbiBhbgoraW5pdGlhbGl6ZWQgY29sb3IuICBUaGUgcm91dGluZSBcZkJwYWlyX2NvbnRlbnRcZlIgYWxsb3dzIGEgcHJvZ3JhbW1lciB0byBmaW5kCitvdXQgaG93IGEgZ2l2ZW4gY29sb3ItcGFpciBpcyBjdXJyZW50bHkgZGVmaW5lZC4KKy5TUyBSb3V0aW5lIERlc2NyaXB0aW9ucworVGhlIFxmQnN0YXJ0X2NvbG9yXGZSIHJvdXRpbmUgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgSXQgbXVzdCBiZQorY2FsbGVkIGlmIHRoZSBwcm9ncmFtbWVyIHdhbnRzIHRvIHVzZSBjb2xvcnMsIGFuZCBiZWZvcmUgYW55IG90aGVyCitjb2xvciBtYW5pcHVsYXRpb24gcm91dGluZSBpcyBjYWxsZWQuICBJdCBpcyBnb29kIHByYWN0aWNlIHRvIGNhbGwKK3RoaXMgcm91dGluZSByaWdodCBhZnRlciBcZkJpbml0c2NyXGZSLiAgXGZCc3RhcnRfY29sb3JcZlIgaW5pdGlhbGl6ZXMKK2VpZ2h0IGJhc2ljIGNvbG9ycyAoYmxhY2ssIHJlZCwgZ3JlZW4sIHllbGxvdywgYmx1ZSwgbWFnZW50YSwgY3lhbiwKK2FuZCB3aGl0ZSksIGFuZCB0d28gZ2xvYmFsIHZhcmlhYmxlcywgXGZCQ09MT1JTXGZSIGFuZAorXGZCQ09MT1JfUEFJUlNcZlIgKHJlc3BlY3RpdmVseSBkZWZpbmluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29sb3JzCithbmQgY29sb3ItcGFpcnMgdGhlIHRlcm1pbmFsIGNhbiBzdXBwb3J0KS4gIEl0IGFsc28gcmVzdG9yZXMgdGhlCitjb2xvcnMgb24gdGhlIHRlcm1pbmFsIHRvIHRoZSB2YWx1ZXMgdGhleSBoYWQgd2hlbiB0aGUgdGVybWluYWwgd2FzCitqdXN0IHR1cm5lZCBvbi4KKy5QUAorVGhlIFxmQmluaXRfcGFpclxmUiByb3V0aW5lIGNoYW5nZXMgdGhlIGRlZmluaXRpb24gb2YgYSBjb2xvci1wYWlyLiAgSXQgdGFrZXMKK3RocmVlIGFyZ3VtZW50czogdGhlIG51bWJlciBvZiB0aGUgY29sb3ItcGFpciB0byBiZSBjaGFuZ2VkLCB0aGUgZm9yZWdyb3VuZAorY29sb3IgbnVtYmVyLCBhbmQgdGhlIGJhY2tncm91bmQgY29sb3IgbnVtYmVyLgorRm9yIHBvcnRhYmxlIGFwcGxpY2F0aW9uczoKKy5UUCA1CistCitUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50CittdXN0IGJlIGJldHdlZW4gXGZCMVxmUiBhbmQgXGZCQ09MT1JfUEFJUlMtMVxmUi4KKy5UUCA1CistCitUaGUgdmFsdWUgb2YgdGhlIHNlY29uZCBhbmQKK3RoaXJkIGFyZ3VtZW50cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgXGZCQ09MT1JTXGZSLgorQ29sb3IgcGFpciAwIGlzIGFzc3VtZWQgdG8gYmUgd2hpdGUgb24gYmxhY2ssCitidXQgaXMgYWN0dWFsbHkgd2hhdGV2ZXIgdGhlIHRlcm1pbmFsIGltcGxlbWVudHMgYmVmb3JlIGNvbG9yIGlzIGluaXRpYWxpemVkLgorSXQgY2Fubm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKy5QUAorSWYgdGhlIGNvbG9yLXBhaXIgd2FzIHByZXZpb3VzbHkKK2luaXRpYWxpemVkLCB0aGUgc2NyZWVuIGlzIHJlZnJlc2hlZCBhbmQgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQgY29sb3ItcGFpcgorYXJlIGNoYW5nZWQgdG8gdGhlIG5ldyBkZWZpbml0aW9uLgorLlBQCitBcyBhbiBleHRlbnNpb24sIG5jdXJzZXMgYWxsb3dzIHlvdSB0byBzZXQgY29sb3IgcGFpciAwIHZpYQordGhlIFxmQmFzc3VtZV9kZWZhdWx0X2NvbG9yc1xmUiByb3V0aW5lLCBvciB0byBzcGVjaWZ5IHRoZSB1c2Ugb2YKK2RlZmF1bHQgY29sb3JzIChjb2xvciBudW1iZXIgXGZCLTFcZlIpIGlmIHlvdSBmaXJzdCBpbnZva2UgdGhlCitcZkJ1c2VfZGVmYXVsdF9jb2xvcnNcZlIgcm91dGluZS4KKy5QUAorVGhlIFxmQmluaXRfY29sb3JcZlIgcm91dGluZSBjaGFuZ2VzIHRoZSBkZWZpbml0aW9uIG9mIGEgY29sb3IuICBJdCB0YWtlcyBmb3VyCithcmd1bWVudHM6IHRoZSBudW1iZXIgb2YgdGhlIGNvbG9yIHRvIGJlIGNoYW5nZWQgZm9sbG93ZWQgYnkgdGhyZWUgUkdCIHZhbHVlcworKGZvciB0aGUgYW1vdW50cyBvZiByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzKS4gIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QKK2FyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiBcZkIwXGZSIGFuZCBcZkJDT0xPUlNcZlIuICAoU2VlIHRoZSBzZWN0aW9uCitcZkJDb2xvcnNcZlIgZm9yIHRoZSBkZWZhdWx0IGNvbG9yIGluZGV4LikgIEVhY2ggb2YgdGhlIGxhc3QgdGhyZWUgYXJndW1lbnRzCittdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAwLiAgV2hlbiBcZkJpbml0X2NvbG9yXGZSIGlzIHVzZWQsIGFsbAorb2NjdXJyZW5jZXMgb2YgdGhhdCBjb2xvciBvbiB0aGUgc2NyZWVuIGltbWVkaWF0ZWx5IGNoYW5nZSB0byB0aGUgbmV3CitkZWZpbml0aW9uLgorLlBQCitUaGUgXGZCaGFzX2NvbG9yc1xmUiByb3V0aW5lIHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEl0IHJldHVybnMgXGZCVFJVRVxmUiBpZgordGhlIHRlcm1pbmFsIGNhbiBtYW5pcHVsYXRlIGNvbG9yczsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIFxmQkZBTFNFXGZSLiAgVGhpcworcm91dGluZSBmYWNpbGl0YXRlcyB3cml0aW5nIHRlcm1pbmFsLWluZGVwZW5kZW50IHByb2dyYW1zLiAgRm9yIGV4YW1wbGUsIGEKK3Byb2dyYW1tZXIgY2FuIHVzZSBpdCB0byBkZWNpZGUgd2hldGhlciB0byB1c2UgY29sb3Igb3Igc29tZSBvdGhlciB2aWRlbworYXR0cmlidXRlLgorLlBQCitUaGUgXGZCY2FuX2NoYW5nZV9jb2xvclxmUiByb3V0aW5lIHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEl0IHJldHVybnMKK1xmQlRSVUVcZlIgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIGNvbG9ycyBhbmQgY2FuIGNoYW5nZSB0aGVpciBkZWZpbml0aW9uczsKK290aGVyLCBpdCByZXR1cm5zIFxmQkZBTFNFXGZSLiAgVGhpcyByb3V0aW5lIGZhY2lsaXRhdGVzIHdyaXRpbmcKK3Rlcm1pbmFsLWluZGVwZW5kZW50IHByb2dyYW1zLgorLlBQCitUaGUgXGZCY29sb3JfY29udGVudFxmUiByb3V0aW5lIGdpdmVzIHByb2dyYW1tZXJzIGEgd2F5IHRvIGZpbmQgdGhlIGludGVuc2l0eQorb2YgdGhlIHJlZCwgZ3JlZW4sIGFuZCBibHVlIChSR0IpIGNvbXBvbmVudHMgaW4gYSBjb2xvci4gIEl0IHJlcXVpcmVzIGZvdXIKK2FyZ3VtZW50czogdGhlIGNvbG9yIG51bWJlciwgYW5kIHRocmVlIGFkZHJlc3NlcyBvZiBcZkJzaG9ydFxmUnMgZm9yIHN0b3JpbmcKK3RoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYW1vdW50cyBvZiByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb21wb25lbnRzIGluIHRoZQorZ2l2ZW4gY29sb3IuICBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAwIGFuZAorXGZCQ09MT1JTXGZSLiAgVGhlIHZhbHVlcyB0aGF0IGFyZSBzdG9yZWQgYXQgdGhlIGFkZHJlc3NlcyBwb2ludGVkIHRvIGJ5IHRoZQorbGFzdCB0aHJlZSBhcmd1bWVudHMgYXJlIGJldHdlZW4gMCAobm8gY29tcG9uZW50KSBhbmQgMTAwMCAobWF4aW11bSBhbW91bnQgb2YKK2NvbXBvbmVudCkuCisuUFAKK1RoZSBcZkJwYWlyX2NvbnRlbnRcZlIgcm91dGluZSBhbGxvd3MgcHJvZ3JhbW1lcnMgdG8gZmluZCBvdXQgd2hhdCBjb2xvcnMgYQorZ2l2ZW4gY29sb3ItcGFpciBjb25zaXN0cyBvZi4gIEl0IHJlcXVpcmVzIHRocmVlIGFyZ3VtZW50czogdGhlIGNvbG9yLXBhaXIKK251bWJlciwgYW5kIHR3byBhZGRyZXNzZXMgb2YgXGZCc2hvcnRcZlJzIGZvciBzdG9yaW5nIHRoZSBmb3JlZ3JvdW5kIGFuZCB0aGUKK2JhY2tncm91bmQgY29sb3IgbnVtYmVycy4gIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDEKK2FuZCBcZkJDT0xPUl9QQUlSUy0xXGZSLiAgVGhlIHZhbHVlcyB0aGF0IGFyZSBzdG9yZWQgYXQgdGhlIGFkZHJlc3NlcyBwb2ludGVkCit0byBieSB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudHMgYXJlIGJldHdlZW4gMCBhbmQgXGZCQ09MT1JTXGZSLgorLlNTIENvbG9ycworSW4gXGZCPGN1cnNlcy5oPlxmUiB0aGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgZGVmaW5lZC4gIFRoZXNlIGFyZSB0aGUgZGVmYXVsdAorY29sb3JzLiAgXGZCY3Vyc2VzXGZSIGFsc28gYXNzdW1lcyB0aGF0IFxmQkNPTE9SX0JMQUNLXGZSIGlzIHRoZSBkZWZhdWx0CitiYWNrZ3JvdW5kIGNvbG9yIGZvciBhbGwgdGVybWluYWxzLgorLlBQCisubmYKKyAgICAgIFxmQkNPTE9SX0JMQUNLXGZSCisgICAgICBcZkJDT0xPUl9SRURcZlIKKyAgICAgIFxmQkNPTE9SX0dSRUVOXGZSCisgICAgICBcZkJDT0xPUl9ZRUxMT1dcZlIKKyAgICAgIFxmQkNPTE9SX0JMVUVcZlIKKyAgICAgIFxmQkNPTE9SX01BR0VOVEFcZlIKKyAgICAgIFxmQkNPTE9SX0NZQU5cZlIKKyAgICAgIFxmQkNPTE9SX1dISVRFXGZSCisuZmkKKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSByb3V0aW5lcyBcZkJjYW5fY2hhbmdlX2NvbG9yKClcZlIgYW5kIFxmQmhhc19jb2xvcnMoKVxmUiByZXR1cm4gXGZCVFJVRVxmUgorb3IgXGZCRkFMU0VcZlIuCisuUFAKK0FsbCBvdGhlciByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgYW4gXGZCT0tcZlIKKyhTVnI0IHNwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorVGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIHJldHVybiBcZkJFUlJcZlIgb24gYXR0ZW1wdHMgdG8KK3VzZSBjb2xvciB2YWx1ZXMgb3V0c2lkZSB0aGUgcmFuZ2UgMCB0byBDT0xPUlMtMQorKGV4Y2VwdCBmb3IgdGhlIGRlZmF1bHQgY29sb3JzIGV4dGVuc2lvbiksCitvciB1c2UgY29sb3IgcGFpcnMgb3V0c2lkZSB0aGUgcmFuZ2UgMCB0byBDT0xPUl9QQUlSLTEuCitDb2xvciB2YWx1ZXMgdXNlZCBpbiBcZkJpbml0X2NvbG9yXGZQIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgdG8gMTAwMC4KK0FuIGVycm9yIGlzIHJldHVybmVkIGZyb20gYWxsIGZ1bmN0aW9ucworaWYgdGhlIHRlcm1pbmFsIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KK0FuIGVycm9yIGlzIHJldHVybmVkIGZyb20gc2Vjb25kYXJ5IGZ1bmN0aW9ucyBzdWNoIGFzIFxmQmluaXRfcGFpclxmUAoraWYgXGZCc3RhcnRfY29sb3JcZlAgd2FzIG5vdCBjYWxsZWQuCisuUlMKKy5UUCA1CitcZkJpbml0X2NvbG9yXGZQCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0Cit0aGlzIGZlYXR1cmUsIGUuZy4sIGlmIHRoZSBcZklpbml0aWFsaXplX2NvbG9yXGZQIGNhcGFiaWxpdHkgaXMgYWJzZW50Citmcm9tIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKy5UUCA1CitcZkJzdGFydF9jb2xvclxmUAorcmV0dXJucyBhbiBlcnJvcgorSWYgdGhlIGNvbG9yIHRhYmxlIGNhbm5vdCBiZSBhbGxvY2F0ZWQuCisuUkUKKy5TSCBOT1RFUworSW4gdGhlIFxmSW5jdXJzZXNcZlIgaW1wbGVtZW50YXRpb24sIHRoZXJlIGlzIGEgc2VwYXJhdGUgY29sb3IgYWN0aXZhdGlvbiBmbGFnLAorY29sb3IgcGFsZXR0ZSwgY29sb3IgcGFpcnMgdGFibGUsIGFuZCBhc3NvY2lhdGVkIENPTE9SUyBhbmQgQ09MT1JfUEFJUlMgY291bnRzCitmb3IgZWFjaCBzY3JlZW47IHRoZSBcZkJzdGFydF9jb2xvclxmUiBmdW5jdGlvbiBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQKK3NjcmVlbi4gIFRoZSBTVnI0L1hTSSBpbnRlcmZhY2UgaXMgbm90IHJlYWxseSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZCwgYW5kCitoaXN0b3JpY2FsIGltcGxlbWVudGF0aW9ucyBtYXkgdXNlIGEgc2luZ2xlIHNoYXJlZCBjb2xvciBwYWxldHRlLgorLlBQCitOb3RlIHRoYXQgc2V0dGluZyBhbiBpbXBsaWNpdCBiYWNrZ3JvdW5kIGNvbG9yIHZpYSBhIGNvbG9yIHBhaXIgYWZmZWN0cyBvbmx5CitjaGFyYWN0ZXIgY2VsbHMgdGhhdCBhIGNoYXJhY3RlciB3cml0ZSBvcGVyYXRpb24gZXhwbGljaXRseSB0b3VjaGVzLiAgVG8gY2hhbmdlCit0aGUgYmFja2dyb3VuZCBjb2xvciB1c2VkIHdoZW4gcGFydHMgb2YgYSB3aW5kb3cgYXJlIGJsYW5rZWQgYnkgZXJhc2luZyBvcgorc2Nyb2xsaW5nIG9wZXJhdGlvbnMsIHNlZSBcZkJjdXJzX2JrZ2RcZlIoM1gpLgorLlBQCitTZXZlcmFsIGNhdmVhdHMgYXBwbHkgb24gMzg2IGFuZCA0ODYgbWFjaGluZXMgd2l0aCBWR0EtY29tcGF0aWJsZSBncmFwaGljczoKKy5UUCA1CistCitDT0xPUl9ZRUxMT1cgaXMgYWN0dWFsbHkgYnJvd24uICBUbyBnZXQgeWVsbG93LCB1c2UgQ09MT1JfWUVMTE9XIGNvbWJpbmVkIHdpdGgKK3RoZSBcZkJBX0JPTERcZlIgYXR0cmlidXRlLgorLlRQIDUKKy0KK1RoZSBBX0JMSU5LIGF0dHJpYnV0ZSBzaG91bGQgaW4gdGhlb3J5IGNhdXNlIHRoZSBiYWNrZ3JvdW5kIHRvIGdvIGJyaWdodC4gIFRoaXMKK29mdGVuIGZhaWxzIHRvIHdvcmssIGFuZCBldmVuIHNvbWUgY2FyZHMgZm9yIHdoaWNoIGl0IG1vc3RseSB3b3JrcyAoc3VjaCBhcyB0aGUKK1BhcmFkaXNlIGFuZCBjb21wYXRpYmxlcykgZG8gdGhlIHdyb25nIHRoaW5nIHdoZW4geW91IHRyeSB0byBzZXQgYSBicmlnaHQKKyJ5ZWxsb3ciIGJhY2tncm91bmQgKHlvdSBnZXQgYSBibGlua2luZyB5ZWxsb3cgZm9yZWdyb3VuZCBpbnN0ZWFkKS4KKy5UUCA1CistCitDb2xvciBSR0IgdmFsdWVzIGFyZSBub3Qgc2V0dGFibGUuCisuU0ggUE9SVEFCSUxJVFkKK1RoaXMgaW1wbGVtZW50YXRpb24gc2F0aXNmaWVzIFhTSSBDdXJzZXMncyBtaW5pbXVtIG1heGltdW1zCitmb3IgXGZCQ09MT1JTXGZSIGFuZCBcZkJDT0xPUl9QQUlSU1xmUi4KKy5QUAorVGhlIFxmQmluaXRfcGFpclxmUCByb3V0aW5lIGFjY2VwdHMgbmVnYXRpdmUgdmFsdWVzIG9mIGZvcmVncm91bmQKK2FuZCBiYWNrZ3JvdW5kIGNvbG9yIHRvIHN1cHBvcnQgdGhlIFxmQnVzZV9kZWZhdWx0X2NvbG9yc1xmUCBleHRlbnNpb24sCitidXQgb25seSBpZiB0aGF0IHJvdXRpbmUgaGFzIGJlZW4gZmlyc3QgaW52b2tlZC4KKy5QUAorVGhlIGFzc3VtcHRpb24gdGhhdCBcZkJDT0xPUl9CTEFDS1xmUiBpcyB0aGUgZGVmYXVsdAorYmFja2dyb3VuZCBjb2xvciBmb3IgYWxsIHRlcm1pbmFscyBjYW4gYmUgbW9kaWZpZWQgdXNpbmcgdGhlCitcZkJhc3N1bWVfZGVmYXVsdF9jb2xvcnNcZlAgZXh0ZW5zaW9uLgorLlBQCitUaGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyB0aGUgcG9pbnRlcnMsCitlLmcuLCBmb3IgdGhlIHZhbHVlcyByZXR1cm5lZCBieQorXGZCY29sb3JfY29udGVudFxmUCBhbmQgXGZCcGFpcl9jb250ZW50XGZQLAorYW5kIHdpbGwgdHJlYXQgdGhvc2UgYXMgb3B0aW9uYWwgcGFyYW1ldGVycyB3aGVuIG51bGwuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2luaXRzY3JcZlIoM1gpLAorXGZCY3Vyc19hdHRyXGZSKDNYKSwKK1xmQmRlZmF1bHRfY29sb3JzXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19kZWxjaC4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2RlbGNoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjY2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19kZWxjaC4zeApAQCAtMCwwICsxLDcwIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfZGVsY2guM3gsdiAxLjggMjAwNi8wMi8yNSAyMTo0Mjo1NyB0b20gRXhwICQKKy5USCBjdXJzX2RlbGNoIDNYICIiCisuU0ggTkFNRQorXGZCZGVsY2hcZlIsCitcZkJ3ZGVsY2hcZlIsCitcZkJtdmRlbGNoXGZSLAorXGZCbXZ3ZGVsY2hcZlIgLSBkZWxldGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgaW4gYSBcZkJjdXJzZXNcZlIgd2luZG93CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGRlbGNoKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgd2RlbGNoKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IG12ZGVsY2goaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCaW50IG12d2RlbGNoKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3I7IGFsbCBjaGFyYWN0ZXJzIHRvIHRoZQorcmlnaHQgb2YgdGhlIGN1cnNvciBvbiB0aGUgc2FtZSBsaW5lIGFyZSBtb3ZlZCB0byB0aGUgbGVmdCBvbmUgcG9zaXRpb24gYW5kIHRoZQorbGFzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUgaXMgZmlsbGVkIHdpdGggYSBibGFuay4gIFRoZSBjdXJzb3IgcG9zaXRpb24gZG9lcworbm90IGNoYW5nZSAoYWZ0ZXIgbW92aW5nIHRvIFxmSXlcZlIsIFxmSXhcZlIsIGlmIHNwZWNpZmllZCkuICAoVGhpcyBkb2VzIG5vdAoraW1wbHkgdXNlIG9mIHRoZSBoYXJkd2FyZSBkZWxldGUgY2hhcmFjdGVyIGZlYXR1cmUuKQorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBhbiBcZkJPS1xmUiAoU1ZyNAorc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24uCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJkZWxjaFxmUiwgXGZCbXZkZWxjaFxmUiwgYW5kIFxmQm12d2RlbGNoXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LiAgVGhlCitzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGV5IHJldHVybiBcZkJFUlJcZlIgb24gZmFpbHVyZSwgYnV0IHNwZWNpZmllcyBubworZXJyb3IgY29uZGl0aW9ucy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19kZWxldGVsbi4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2RlbGV0ZWxuLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2IxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19kZWxldGVsbi4zeApAQCAtMCwwICsxLDkxIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfZGVsZXRlbG4uM3gsdiAxLjExIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggY3Vyc19kZWxldGVsbiAzWCAiIgorLlNIIE5BTUUKK1xmQmRlbGV0ZWxuXGZSLAorXGZCd2RlbGV0ZWxuXGZSLAorXGZCaW5zZGVsbG5cZlIsCitcZkJ3aW5zZGVsbG5cZlIsCitcZkJpbnNlcnRsblxmUiwKK1xmQndpbnNlcnRsblxmUiAtIGRlbGV0ZSBhbmQgaW5zZXJ0IGxpbmVzIGluIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBkZWxldGVsbih2b2lkKTtcZlIKKy5icgorXGZCaW50IHdkZWxldGVsbihXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBpbnNkZWxsbihpbnQgbik7XGZSCisuYnIKK1xmQmludCB3aW5zZGVsbG4oV0lORE9XICp3aW4sIGludCBuKTtcZlIKKy5icgorXGZCaW50IGluc2VydGxuKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgd2luc2VydGxuKFdJTkRPVyAqd2luKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCZGVsZXRlbG5cZlIgYW5kIFxmQndkZWxldGVsblxmUiByb3V0aW5lcyBkZWxldGUgdGhlIGxpbmUgdW5kZXIgdGhlCitjdXJzb3IgaW4gdGhlIHdpbmRvdzsgYWxsIGxpbmVzIGJlbG93IHRoZSBjdXJyZW50IGxpbmUgYXJlIG1vdmVkIHVwIG9uZSBsaW5lLgorVGhlIGJvdHRvbSBsaW5lIG9mIHRoZSB3aW5kb3cgaXMgY2xlYXJlZC4gIFRoZSBjdXJzb3IgcG9zaXRpb24gZG9lcyBub3QgY2hhbmdlLgorLlBQCitUaGUgXGZCaW5zZGVsbG5cZlIgYW5kIFxmQndpbnNkZWxsblxmUiByb3V0aW5lcywgZm9yIHBvc2l0aXZlIFxmSW5cZlIsIGluc2VydAorXGZJblxmUiBsaW5lcyBpbnRvIHRoZSBzcGVjaWZpZWQgd2luZG93IGFib3ZlIHRoZSBjdXJyZW50IGxpbmUuICBUaGUgXGZJblxmUgorYm90dG9tIGxpbmVzIGFyZSBsb3N0LiAgRm9yIG5lZ2F0aXZlIFxmSW5cZlIsIGRlbGV0ZSBcZkluXGZSIGxpbmVzIChzdGFydGluZword2l0aCB0aGUgb25lIHVuZGVyIHRoZSBjdXJzb3IpLCBhbmQgbW92ZSB0aGUgcmVtYWluaW5nIGxpbmVzIHVwLiAgVGhlIGJvdHRvbQorXGZJblxmUiBsaW5lcyBhcmUgY2xlYXJlZC4gIFRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiByZW1haW5zIHRoZSBzYW1lLgorLlBQCitUaGUgXGZCaW5zZXJ0bG5cZlIgYW5kIFxmQndpbnNlcnRsblxmUiByb3V0aW5lcyBpbnNlcnQgYSBibGFuayBsaW5lIGFib3ZlIHRoZQorY3VycmVudCBsaW5lIGFuZCB0aGUgYm90dG9tIGxpbmUgaXMgbG9zdC4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgYW4gXGZCT0tcZlIgKFNWcjQKK3NwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwKK2lmIHRoZSB3aW5kb3cgcGFyYW1ldGVyIGlzIG51bGwsIGFuIGVycm9yIGlzIHJldHVybmVkLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIFRoZQorc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgdGhleSByZXR1cm4gXGZCRVJSXGZSIG9uIGZhaWx1cmUsIGJ1dCBzcGVjaWZpZXMgbm8KK2Vycm9yIGNvbmRpdGlvbnMuCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgYnV0IFxmQndpbnNkZWxsblxmUiBtYXkgYmUgbWFjcm9zLgorLlBQCitUaGVzZSByb3V0aW5lcyBkbyBub3QgcmVxdWlyZSBhIGhhcmR3YXJlIGxpbmUgZGVsZXRlIG9yIGluc2VydCBmZWF0dXJlIGluIHRoZQordGVybWluYWwuICBJbiBmYWN0LCB0aGV5IHdpbGwgbm90IHVzZSBoYXJkd2FyZSBsaW5lIGRlbGV0ZS9pbnNlcnQgdW5sZXNzCitcZkJpZGxvayguLi4sIFRSVUUpXGZSIGhhcyBiZWVuIHNldCBvbiB0aGUgY3VycmVudCB3aW5kb3cuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfZXh0ZW5kLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfZXh0ZW5kLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTIyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19leHRlbmQuM3gKQEAgLTAsMCArMSw4NSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTktb24KKy5cIgorLlwiICRJZDogY3Vyc19leHRlbmQuM3gsdiAxLjE3IDIwMDYvMTIvMjQgMTg6MDE6NDggdG9tIEV4cCAkCisuVEggY3Vyc19leHRlbmQgM1ggIiIKKy5TSCBOQU1FCitcZkJjdXJzZXNfdmVyc2lvblxmUCwKK1xmQnVzZV9leHRlbmRlZF9uYW1lc1xmUCBcLSBtaXNjZWxsYW5lb3VzIGN1cnNlcyBleHRlbnNpb25zCisuCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlAKKy5zcAorXGZCY29uc3QgY2hhciAqIGN1cnNlc192ZXJzaW9uKHZvaWQpO1xmUAorLmJyCitcZkJpbnQgdXNlX2V4dGVuZGVkX25hbWVzKGJvb2wgZW5hYmxlKTtcZlAKKy5TSCBERVNDUklQVElPTgorVGhlc2UgZnVuY3Rpb25zIGFyZSBleHRlbnNpb25zIHRvIHRoZSBjdXJzZXMgbGlicmFyeQord2hpY2ggZG8gbm90IGZpdCBlYXNpbHkgaW50byBvdGhlciBjYXRlZ29yaWVzLgorLlBQCitVc2UKKy5JIGN1cnNlc192ZXJzaW9uKCkKK3RvIGdldCB0aGUgdmVyc2lvbiBudW1iZXIsIGluY2x1ZGluZyBwYXRjaCBsZXZlbCBvZiB0aGUgbGlicmFyeSwgZS5nLiwKKy5CIDUuMC4xOTk5MTAyMworLlBQCitUaGUKKy5JIHVzZV9leHRlbmRlZF9uYW1lcygpCitmdW5jdGlvbiBjb250cm9scyB3aGV0aGVyIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uCitpcyBhYmxlIHRvIHVzZSB1c2VyLWRlZmluZWQgb3Igbm9uc3RhbmRhcmQgbmFtZXMKK3doaWNoIG1heSBiZSBjb21waWxlZCBpbnRvIHRoZSB0ZXJtaW5mbworZGVzY3JpcHRpb24sIGkuZS4sIHZpYSB0aGUgdGVybWluZm8gb3IgdGVybWNhcCBpbnRlcmZhY2VzLgorTm9ybWFsbHkgdGhlc2UgbmFtZXMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlLCBzaW5jZSB0aGUgZXNzZW50aWFsIGRlY2lzaW9uCitpcyBtYWRlIGJ5IHVzaW5nIHRoZSBcZkIteFxmUCBvcHRpb24gb2YgXGZCQFRJQ0BcZlAgdG8gY29tcGlsZQorZXh0ZW5kZWQgdGVybWluYWwgZGVmaW5pdGlvbnMuCitIb3dldmVyIHlvdSBjYW4gZGlzYWJsZSB0aGlzIGZlYXR1cmUKK3RvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIGN1cnNlcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzX2dldGNoXGZSKDNYKSwKK1xmQmN1cnNfbW91c2VcZlIoM1gpLAorXGZCY3Vyc19wcmludFxmUigzWCksCitcZkJjdXJzX3V0aWxcZlIoM1gpLAorXGZCZGVmYXVsdF9jb2xvcnNcZlIoM1gpLAorXGZCZGVmaW5lX2tleVxmUigzWCksCitcZkJrZXlib3VuZFxmUigzWCksCitcZkJrZXlva1xmUigzWCksCitcZkJyZXNpemV0ZXJtXGZSKDNYKSwKK1xmQndyZXNpemVcZlIoM1gpLgorLlNIIEFVVEhPUgorVGhvbWFzIERpY2tleS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfZ2V0X3djaC4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2dldF93Y2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZmY3OQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2dldF93Y2guM3gKQEAgLTAsMCArMSwxNjEgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19nZXRfd2NoLjN4LHYgMS42IDIwMDYvMDIvMjUgMjE6NDc6MDYgdG9tIEV4cCAkCisuVEggY3Vyc19nZXRfd2NoIDNYICIiCisuU0ggTkFNRQorXGZCZ2V0X3djaFxmUiwKK1xmQndnZXRfd2NoXGZSLAorXGZCbXZnZXRfd2NoXGZSLAorXGZCbXZ3Z2V0X3djaFxmUiwKK1xmQnVuZ2V0X3djaFxmUiBcLSBnZXQgKG9yIHB1c2ggYmFjaykgYSB3aWRlIGNoYXJhY3RlciBmcm9tIGN1cnNlcyB0ZXJtaW5hbCBrZXlib2FyZAorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBnZXRfd2NoKHdpbnRfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdnZXRfd2NoKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCB3aW50X3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmdldF93Y2goaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCB3aW50X3QgKlxmUlxmSXdjaFxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndnZXRfd2NoKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIHdpbnRfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHVuZ2V0X3djaChjb25zdCB3Y2hhcl90IFxmUlxmSXdjaFxmUlxmQik7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoZQorXGZCZ2V0X3djaFxmUiwKK1xmQndnZXRfd2NoXGZSLAorXGZCbXZnZXRfd2NoXGZSLCBhbmQKK1xmQm12d2dldF93Y2hcZlIKK2Z1bmN0aW9ucyByZWFkIGEgY2hhcmFjdGVyCitmcm9tIHRoZSB0ZXJtaW5hbCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgb3Igc3BlY2lmaWVkIHdpbmRvdy4KK0luIG5vLWRlbGF5IG1vZGUsCitpZiBubyBpbnB1dCBpcyB3YWl0aW5nLCB0aGUgdmFsdWUgXGZCRVJSXGZSIGlzIHJldHVybmVkLgorSW4gZGVsYXkgbW9kZSwKK3RoZSBwcm9ncmFtIHdhaXRzIHVudGlsIHRoZSBzeXN0ZW0gcGFzc2VzIHRleHQgdGhyb3VnaCB0byB0aGUgcHJvZ3JhbS4KK0RlcGVuZGluZyBvbiB0aGUgc2V0dGluZyBvZiBcZkJjYnJlYWtcZlIsCit0aGlzIGlzIGFmdGVyIG9uZSBjaGFyYWN0ZXIgKGNicmVhayBtb2RlKSwKK29yIGFmdGVyIHRoZSBmaXJzdCBuZXdsaW5lIChub2NicmVhayBtb2RlKS4KK0luIGhhbGYtZGVsYXkgbW9kZSwKK3RoZSBwcm9ncmFtIHdhaXRzIHVudGlsIHRoZSB1c2VyIHR5cGVzIGEgY2hhcmFjdGVyIG9yIHRoZSBzcGVjaWZpZWQKK3RpbWVvdXQgaW50ZXJ2YWwgaGFzIGVsYXBzZWQuCisuUFAKK1VubGVzcyBcZkJub2VjaG9cZlIgaGFzIGJlZW4gc2V0LAordGhlc2Ugcm91dGluZXMgZWNobyB0aGUgY2hhcmFjdGVyIGludG8gdGhlIGRlc2lnbmF0ZWQgd2luZG93LgorLlBQCitJZiB0aGUgd2luZG93IGlzIG5vdCBhIHBhZCBhbmQgaGFzIGJlZW4gbW92ZWQgb3IgbW9kaWZpZWQgc2luY2UgdGhlCitsYXN0IGNhbGwgdG8gXGZCd3JlZnJlc2hcZlIsCitcZkJ3cmVmcmVzaFxmUiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW5vdGhlciBjaGFyYWN0ZXIgaXMgcmVhZC4KKy5QUAorSWYgXGZCa2V5cGFkXGZSIGlzIGVuYWJsZWQsCit0aGVzZSBmdW5jdGlvbnMgcmVzcG9uZCB0bwordGhlIHByZXNzaW5nIG9mIGEgZnVuY3Rpb24ga2V5IGJ5IHNldHRpbmcgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5CitcZkl3Y2hcZlIKK3RvIHRoZSBjb3JyZXNwb25kaW5nCitcZkJLRVlfXGZSCit2YWx1ZSBkZWZpbmVkCitpbgorXGZCPGN1cnNlcy5oPlxmUgorYW5kIHJldHVybmluZworXGZCS0VZX0NPREVfWUVTXGZSLgorSWYgYSBjaGFyYWN0ZXIgKHN1Y2ggYXMgZXNjYXBlKSB0aGF0IGNvdWxkIGJlIHRoZQorYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24ga2V5IGlzIHJlY2VpdmVkLCBjdXJzZXMgc2V0cyBhIHRpbWVyLgorSWYgdGhlIHJlbWFpbmRlcgorb2YgdGhlIHNlcXVlbmNlIGRvZXMgYXJyaXZlIHdpdGhpbiB0aGUgZGVzaWduYXRlZCB0aW1lLCBjdXJzZXMgcGFzc2VzIHRocm91Z2gKK3RoZSBjaGFyYWN0ZXI7IG90aGVyd2lzZSwgY3Vyc2VzIHJldHVybnMgdGhlIGZ1bmN0aW9uIGtleSB2YWx1ZS4KK0ZvciB0aGlzCityZWFzb24sIG1hbnkgdGVybWluYWxzIGV4cGVyaWVuY2UgYSBkZWxheSBiZXR3ZWVuIHRoZSB0aW1lIGEgdXNlciBwcmVzc2VzCit0aGUgZXNjYXBlIGtleSBhbmQgdGhlIHRpbWUgdGhlIGVzY2FwZSBpcyByZXR1cm5lZCB0byB0aGUgcHJvZ3JhbS4KKy5QUAorVGhlCitcZkJ1bmdldF93Y2hcZlIKK2Z1bmN0aW9uIHB1c2hlcyB0aGUgd2lkZSBjaGFyYWN0ZXIKK1xmSXdjaFxmUgorYmFjayBvbnRvIHRoZSBoZWFkIG9mIHRoZSBpbnB1dCBxdWV1ZSwgc28gdGhlIHdpZGUgY2hhcmFjdGVyCitpcyByZXR1cm5lZCBieSB0aGUgbmV4dCBjYWxsIHRvCitcZkJnZXRfd2NoXGZSLgorVGhlIHB1c2hiYWNrIG9mCitvbmUgY2hhcmFjdGVyIGlzIGd1YXJhbnRlZWQuCitJZiB0aGUgcHJvZ3JhbSBjYWxscworXGZCdW5nZXRfd2NoXGZSCit0b28gbWFueSB0aW1lcyB3aXRob3V0IGFuIGludGVydmVuaW5nIGNhbGwgdG8KK1xmQmdldF93Y2hcZlIsCit0aGUgb3BlcmF0aW9uIG1heSBmYWlsLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIKK2F1dG9tYXRpY2FsbHkKK2luY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPHN0ZGlvLmg+XGZSLgorLlBQCitBcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBkZWZpbmUgdGhlIGVzY2FwZSBrZXkgYnkgaXRzZWxmIGFzIGEgc2luZ2xlLWNoYXJhY3RlcgorZnVuY3Rpb24uCisuUFAKK1doZW4gdXNpbmcKK1xmQmdldF93Y2hcZlIsCitcZkJ3Z2V0X3djaFxmUiwKK1xmQm12Z2V0X3djaFxmUiwgb3IKK1xmQm12d2dldF93Y2hcZlIsIGFwcGxpY2F0aW9ucyBzaG91bGQKK25vdCB1c2UKK1xmQm5vY2JyZWFrXGZSCittb2RlIGFuZAorXGZCZWNob1xmUgorbW9kZQorYXQgdGhlIHNhbWUgdGltZS4KK0RlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIHR0eSBkcml2ZXIgd2hlbiBlYWNoIGNoYXJhY3RlcgoraXMgdHlwZWQsIHRoZSBwcm9ncmFtIG1heSBwcm9kdWNlIHVuZGVzaXJhYmxlIHJlc3VsdHMuCisuUFAKK0FsbCBmdW5jdGlvbnMgZXhjZXB0IFxmQndnZXRfd2NoXGZSIGFuZCBcZkJ1bmdldF93Y2hcZlIKK21heSBiZSBtYWNyb3MuCisuU0ggUkVUVVJOIFZBTFVFUworV2hlbgorXGZCZ2V0X3djaFxmUiwKK1xmQndnZXRfd2NoXGZSLAorXGZCbXZnZXRfd2NoXGZSLCBhbmQKK1xmQm12d2dldF93Y2hcZlIKK2Z1bmN0aW9ucyBzdWNjZXNzZnVsbHkKK3JlcG9ydCB0aGUgcHJlc3Npbmcgb2YgYSBmdW5jdGlvbiBrZXksIHRoZXkgcmV0dXJuCitcZkJLRVlfQ09ERV9ZRVNcZlIuCitXaGVuIHRoZXkgc3VjY2Vzc2Z1bGx5IHJlcG9ydCBhIHdpZGUgY2hhcmFjdGVyLCB0aGV5IHJldHVybgorXGZCT0tcZlIuCitPdGhlcndpc2UsIHRoZXkgcmV0dXJuCitcZkJFUlJcZlIuCisuUFAKK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLAorXGZCdW5nZXRfd2NoXGZSCityZXR1cm5zCitcZkJPS1xmUi4KK090aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMKK1xmQkVSUlxmUi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfZ2V0Y2hcZlIoM1gpLAorXGZCY3Vyc19pbnNfd2NoXGZSKDNYKSwKK1xmQmN1cnNfaW5vcHRzXGZSKDNYKSwKK1xmQmN1cnNfbW92ZVxmUigzWCksCitcZkJjdXJzX3JlZnJlc2hcZlIoM1gpCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19nZXRfd3N0ci4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2dldF93c3RyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODZjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19nZXRfd3N0ci4zeApAQCAtMCwwICsxLDE3OCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2dldF93c3RyLjN4LHYgMS42IDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggY3Vyc19nZXRfd3N0ciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmdldF93c3RyXGZSLAorXGZCZ2V0bl93c3RyXGZSLAorXGZCd2dldF93c3RyXGZSLAorXGZCd2dldG5fd3N0clxmUiwKK1xmQm12Z2V0X3dzdHJcZlIsCitcZkJtdmdldG5fd3N0clxmUiwKK1xmQm12d2dldF93c3RyXGZSLAorXGZCbXZ3Z2V0bl93c3RyXGZSIFwtIGdldCBhbiBhcnJheSBvZiB3aWRlIGNoYXJhY3RlcnMgZnJvbSBhIGN1cnNlcyB0ZXJtaW5hbCBrZXlib2FyZAorLmFkCisuaHkKKy5TSCBTWU5PUFNJUworLm5mCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBnZXRfd3N0cih3aW50X3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgZ2V0bl93c3RyKHdpbnRfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2dldF93c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCB3aW50X3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2dldG5fd3N0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgd2ludF90ICpcZlJcZkl3c3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdmdldF93c3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2ludF90ICpcZlJcZkl3c3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12Z2V0bl93c3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2ludF90ICpcZlJcZkl3c3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndnZXRfd3N0cihXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCB3aW50X3QgKlxmUlxmSXdzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3Z2V0bl93c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBpbnQgXGZSXGZJeVxmUlxmQiwgaW50IFxmUlxmSXhcZlJcZkIsIHdpbnRfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZSBlZmZlY3Qgb2YKK1xmQmdldF93c3RyXGZSCitpcyBhcyB0aG91Z2ggYSBzZXJpZXMgb2YgY2FsbHMKK3RvCitcZkJnZXRfd2NoXGZSCit3ZXJlIG1hZGUsIHVudGlsIGEgbmV3bGluZSwgb3RoZXIgZW5kLW9mLWxpbmUsIG9yIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpcyBwcm9jZXNzZWQuCitBbiBlbmQtb2YtZmlsZSBjb25kaXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgXGZCV0VPRlxmUiwgYXMgZGVmaW5lZCBpbiBcZkI8d2NoYXIuaD5cZlIuCitUaGUgbmV3bGluZSBhbmQgZW5kLW9mLWxpbmUgY29uZGl0aW9ucyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIFxmQlxcblxmUiBcZkJ3Y2hhcl90XGZSIHZhbHVlLgorSW4gYWxsIGluc3RhbmNlcywgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgYnkgYSBudWxsIFxmQndjaGFyX3RcZlIuCitUaGUgcm91dGluZSBwbGFjZXMgcmVzdWx0aW5nIHZhbHVlcyBpbiB0aGUgYXJlYSBwb2ludGVkIHRvIGJ5IFxmSXdzdHJcZlIuCisuUFAKK1RoZSB1c2VyJ3MgZXJhc2UgYW5kIGtpbGwgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQuICBJZiBrZXlwYWQKK21vZGUgaXMgb24gZm9yIHRoZSB3aW5kb3csIFxmQktFWV9MRUZUXGZSIGFuZCBcZkJLRVlfQkFDS1NQQUNFXGZSCithcmUgYm90aCBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gdGhlIHVzZXIncyBraWxsIGNoYXJhY3Rlci4KKy5QUAorQ2hhcmFjdGVycyBpbnB1dCBhcmUgZWNob2VkIG9ubHkgaWYgXGZCZWNob1xmUiBpcyBjdXJyZW50bHkgb24uICBJbiB0aGF0IGNhc2UsCitiYWNrc3BhY2UgaXMgZWNob2VkIGFzIGRlbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgKHR5cGljYWxseSBhIGxlZnQKK21vdGlvbikuCisuUFAKK1RoZSBlZmZlY3Qgb2YKK1xmQndnZXRfd3N0clxmUgoraXMgYXMgdGhvdWdoIGEgc2VyaWVzIG9mCitjYWxscyB0bworXGZCd2dldF93Y2hcZlIKK3dlcmUgbWFkZS4KKy5QUAorVGhlIGVmZmVjdCBvZgorXGZCbXZnZXRfd3N0clxmUgoraXMgYXMgdGhvdWdoIGEgY2FsbCB0bworXGZCbW92ZVxmUgorYW5kIHRoZW4gYSBzZXJpZXMgb2YgY2FsbHMgdG8KK1xmQmdldF93Y2hcZlIKK3dlcmUKK21hZGUuCisuUFAKK1RoZSBlZmZlY3Qgb2YKK1xmQm12d2dldF93c3RyXGZSCitpcyBhcyB0aG91Z2ggYSBjYWxsIHRvCitcZkJ3bW92ZVxmUgorYW5kIHRoZW4gYSBzZXJpZXMgb2YgY2FsbHMgdG8KK1xmQndnZXRfd2NoXGZSCit3ZXJlIG1hZGUuCisuUFAKK1RoZQorXGZCZ2V0bl93c3RyXGZSLAorXGZCbXZnZXRuX3dzdHJcZlIsCitcZkJtdndnZXRuX3dzdHJcZlIsIGFuZAorXGZCd2dldG5fd3N0clxmUgorZnVuY3Rpb25zIGFyZSBpZGVudGljYWwKK3RvIHRoZQorXGZCZ2V0X3dzdHJcZlIsCitcZkJtdmdldF93c3RyXGZSLAorXGZCbXZ3Z2V0X3dzdHJcZlIsIGFuZAorXGZCd2dldF93c3RyXGZSCitmdW5jdGlvbnMsIHJlc3BlY3RpdmVseSwKK2V4Y2VwdCB0aGF0IHRoZQorXGZCKm5fKlxmUgordmVyc2lvbnMgcmVhZCBhdCBtb3N0CitcZkluXGZSCitjaGFyYWN0ZXJzLCBsZXR0aW5nIHRoZSBhcHBsaWNhdGlvbiBwcmV2ZW50IG92ZXJmbG93IG9mIHRoZQoraW5wdXQgYnVmZmVyLgorLlNIIE5PVEVTCitVc2luZworXGZCZ2V0X3dzdHJcZlIsCitcZkJtdmdldF93c3RyXGZSLAorXGZCbXZ3Z2V0X3dzdHJcZlIsIG9yCitcZkJ3Z2V0X3dzdHJcZlIKK3RvIHJlYWQgYSBsaW5lIHRoYXQKK292ZXJmbG93cyB0aGUgYXJyYXkgcG9pbnRlZCB0byBieQorXGZCd3N0clxmUgorY2F1c2VzIHVuZGVmaW5lZAorcmVzdWx0cy4KK1RoZSB1c2Ugb2YKK1xmQmdldG5fd3N0clxmUiwKK1xmQm12Z2V0bl93c3RyXGZSLAorXGZCbXZ3Z2V0bl93c3RyXGZSLCBvcgorXGZCd2dldG5fd3N0clxmUiwgcmVzcGVjdGl2ZWx5LCBpcyByZWNvbW1lbmRlZC4KKy5QUAorVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCByZXR1cm4gXGZCS0VZX1xmUiB2YWx1ZXMgYmVjYXVzZSB0aGVyZQoraXMgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoIGEgXGZCS0VZX1xmUiB2YWx1ZSBmcm9tIGEgdmFsaWQgXGZCd2NoYXJfdFxmUiB2YWx1ZS4KKy5QUAorQWxsIG9mIHRoZXNlIHJvdXRpbmVzIGV4Y2VwdCBcZkJ3Z2V0bl93c3RyXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUkVUVVJOIFZBTFVFUworQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gXGZCT0tcZlIgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24uCitPdGhlcndpc2UsIHRoZXkgcmV0dXJuIFxmQkVSUlxmUi4KKy5QUAorRnVuY3Rpb25zIHVzaW5nIGEgd2luZG93IHBhcmFtZXRlciByZXR1cm4gYW4gZXJyb3IgaWYgaXQgaXMgbnVsbC4KKy5SUworLlRQIDUKK1xmQndnZXRuX3dzdHJcZlAKK3JldHVybnMgYW4gZXJyb3IgaWYgdGhlIGFzc29jaWF0ZWQgY2FsbCB0byBcZkJ3Z2V0X3djaFxmUCBmYWlsZWQuCisuUkUKKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gVGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24sIFZlcnNpb24gMi4KK05vIGVycm9yIGNvbmRpdGlvbnMgYXJlIGRlZmluZWQuCitUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgRVJSIGlmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLAorb3IgaWYgdGhlIGxvd2VyLWxldmVsIFxmQndnZXRfd2NoXGZSIGNhbGwgcmV0dXJucyBhbiBFUlIuCitJbiB0aGUgbGF0dGVyIGNhc2UsCithbiBFUlIgcmV0dXJuIHdpdGhvdXQgb3RoZXIgZGF0YSBpcyB0cmVhdGVkIGFzIGFuIGVuZC1vZi1maWxlIGNvbmRpdGlvbiwKK2FuZCB0aGUgcmV0dXJuZWQgYXJyYXkgY29udGFpbnMgYSBcZkJXRU9GXGZSIGZvbGxvd2VkIGJ5IGEgbnVsbCBcZkJ3Y2hhcl90XGZSLgorLlBQCitYL09wZW4gY3Vyc2VzIGRvY3VtZW50cyB0aGVzZSBmdW5jdGlvbnMgdG8gcGFzcyBhbiBhcnJheSBvZiBcZkJ3Y2hhcl90XGZSLAorYnV0IGFsbCBvZiB0aGUgdmVuZG9ycyBpbXBsZW1lbnQgdGhpcyB1c2luZyBcZkJ3aW50X3RcZlIuCisuU0ggU0VFIEFMU08KK0Z1bmN0aW9uczoKK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2dldF93Y2hcZlIoM1gpLAorXGZCY3Vyc19nZXRzdHJcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19nZXRjY2hhci4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2dldGNjaGFyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDJmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19nZXRjY2hhci4zeApAQCAtMCwwICsxLDE0OSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2dldGNjaGFyLjN4LHYgMS4xMSAyMDA4LzA1LzE3IDE5OjM3OjA1IHRvbSBFeHAgJAorLlRIIGN1cnNfZ2V0Y2NoYXIgM1ggIiIKKy5TSCBOQU1FCitcZkJnZXRjY2hhclxmUCwKK1xmQnNldGNjaGFyXGZQIFwtIEdldCBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBhbmQgcmVuZGl0aW9uIGZyb20gYSBcZkJjY2hhcl90XGZQIG9yIHNldCBhIFxmQmNjaGFyX3RcZlAgZnJvbSBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKK1xmQmludCBnZXRjY2hhcihcZlAKKy5icgorLkIgIiAgICAgICAgY29uc3QgY2NoYXJfdCAqXGZJd2N2YWxcZlAsIgorLmJyCisuQiAiICAgICAgICB3Y2hhcl90ICpcZkl3Y2hcZlAsIgorLmJyCisuQiAiICAgICAgICBhdHRyX3QgKlxmSWF0dHJzXGZQLCIKKy5icgorLkIgIiAgICAgICAgc2hvcnQgKlxmSWNvbG9yX3BhaXJcZlAsIgorLmJyCisuQiAiICAgICAgICB2b2lkICpcZklvcHRzXGZQICk7IgorLnNwCisuQiAiaW50IHNldGNjaGFyKCIKKy5icgorLkIgIiAgICAgICAgY2NoYXJfdCAqXGZJd2N2YWxcZlAsIgorLmJyCisuQiAiICAgICAgICBjb25zdCB3Y2hhcl90ICpcZkl3Y2hcZlAsIgorLmJyCisuQiAiICAgICAgICBjb25zdCBhdHRyX3QgXGZJYXR0cnNcZlAsIgorLmJyCisuQiAiICAgICAgICBzaG9ydCBcZkljb2xvcl9wYWlyXGZQLCIKKy5icgorLkIgIiAgICAgICAgdm9pZCAqXGZJb3B0c1xmUCApOyIKKy5TSCBERVNDUklQVElPTgorLlBQCitUaGUgXGZCZ2V0Y2NoYXJcZlAgZnVuY3Rpb24gZ2V0cyBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZworYW5kIHJlbmRpdGlvbiBmcm9tIGEgXGZCY2NoYXJfdFxmUCBhcmd1bWVudC4KK1doZW4gXGZJd2NoXGZQIGlzIG5vdCBhIG51bGwgcG9pbnRlciwKK3RoZSBcZkJnZXRjY2hhclxmUCBmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLQorRXh0cmFjdHMgaW5mb3JtYXRpb24gZnJvbSBhIFxmQmNjaGFyX3RcZlAgdmFsdWUgXGZJd2N2YWxcZlAKKy5UUCA1CistCitTdG9yZXMgdGhlIGNoYXJhY3RlciBhdHRyaWJ1dGVzIGluIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IFxmSWF0dHJzXGZQCisuVFAgNQorLQorU3RvcmVzIHRoZSBjb2xvci1wYWlyIGluIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IFxmSWNvbG9yX3BhaXJcZlAKKy5UUCA1CistCitTdG9yZXMgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZywKK2NoYXJhY3RlcnMgcmVmZXJlbmNlZCBieSBcZkl3Y3ZhbFxmUCwgaW50byB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSBcZkl3Y2hcZlAuCisuUFAKK1doZW4KK1xmSXdjaFxmUAoraXMgYSBudWxsIHBvaW50ZXIsIHRoZQorXGZCZ2V0Y2NoYXJcZlAKK2Z1bmN0aW9uIGRvZXMgdGhlIGZvbGxvd2luZzoKKy5UUCA1CistCitPYnRhaW5zIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIHBvaW50ZWQgdG8gYnkgXGZJd2N2YWxcZlAKKy5UUCA1CistCitEb2VzIG5vdCBjaGFuZ2UgdGhlIGRhdGEgcmVmZXJlbmNlZCBieQorXGZJYXR0cnNcZlAKK29yCitcZkljb2xvcl9wYWlyXGZQCisuUFAKK1RoZSBcZkJzZXRjY2hhclxmUCBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBcZkl3Y3ZhbFxmUAorYnkgdXNpbmc6CisuVFAgNQorLQorVGhlIGNoYXJhY3RlciBhdHRyaWJ1dGVzIGluCitcZklhdHRyc1xmUAorLlRQIDUKKy0KK1RoZSBjb2xvciBwYWlyIGluCitcZkljb2xvcl9wYWlyXGZQCisuVFAgNQorLQorVGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IFxmSXdjaFxmUC4KK1RoZSBzdHJpbmcgbXVzdCBiZSBMJ1xcMCcgdGVybWluYXRlZCwKK2NvbnRhaW4gYXQgbW9zdCBvbmUgc3BhY2luZyBjaGFyYWN0ZXIsCit3aGljaCBtdXN0IGJlIHRoZSBmaXJzdC4KKy5JUAorVXAgdG8gXGZCQ0NIQVJXX01BWFxmUC0xIG5vbnNwYWNpbmcgY2hhcmFjdGVycyBtYXkgZm9sbG93LgorQWRkaXRpb25hbCBub25zcGFjaW5nIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQuCisuSVAKK1RoZSBzdHJpbmcgbWF5IGNvbnRhaW4gYSBzaW5nbGUgY29udHJvbCBjaGFyYWN0ZXIgaW5zdGVhZC4KK0luIHRoYXQgY2FzZSwgbm8gbm9uc3BhY2luZyBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkLgorLlNIIE5PVEVTCisuUFAKK1RoZSBcZklvcHRzXGZQIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorQ3VycmVudGx5LCBhbiBhcHBsaWNhdGlvbiBtdXN0IHByb3ZpZGUgYSBudWxsIHBvaW50ZXIgYXMgXGZJb3B0c1xmUC4KKy5QUAorVGhlIFxmSXdjdmFsXGZQIGFyZ3VtZW50IG1heSBiZSBhIHZhbHVlIGdlbmVyYXRlZCBieSBhIGNhbGwgdG8KK1xmQnNldGNjaGFyXGZQIG9yIGJ5IGEgZnVuY3Rpb24gdGhhdCBoYXMgYSBcZkJjY2hhcl90XGZQIG91dHB1dCBhcmd1bWVudC4KK0lmIFxmSXdjdmFsXGZQIGlzIGNvbnN0cnVjdGVkIGJ5IGFueSBvdGhlciBtZWFucywgdGhlIGVmZmVjdCBpcyB1bnNwZWNpZmllZC4KKy5TSCBSRVRVUk4gVkFMVUVTCisuUFAKK1doZW4gXGZJd2NoXGZQIGlzIGEgbnVsbCBwb2ludGVyLAorXGZCZ2V0Y2NoYXJcZlAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHdpZGUgY2hhcmFjdGVycyByZWZlcmVuY2VkIGJ5CitcZkl3Y3ZhbFxmUC4KKy5QUAorV2hlbiBcZkl3Y2hcZlAgaXMgbm90IGEgbnVsbCBwb2ludGVyLAorXGZCZ2V0Y2NoYXJcZlAgcmV0dXJucyBcZkJPS1xmUCB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwKK2FuZCBcZkJFUlJcZlAgb3RoZXJ3aXNlLgorLlBQCitVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgXGZCc2V0Y2NoYXJcZlAgcmV0dXJucyBcZkJPS1xmUC4KK090aGVyd2lzZSwgaXQgcmV0dXJucyBcZkJFUlJcZlAuCisuU0ggU0VFIEFMU08KKy5QUAorRnVuY3Rpb25zOgorXGZCY3Vyc19hdHRyXGZSKDNYKSwKK1xmQmN1cnNfY29sb3JcZlIoM1gpLAorXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQndjd2lkdGhcZlIoMykuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2dldGNoLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfZ2V0Y2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmZWQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2dldGNoLjN4CkBAIC0wLDAgKzEsMzI4IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2dldGNoLjN4LHYgMS4zMCAyMDA2LzEyLzAyIDE3OjAyOjUzIHRvbSBFeHAgJAorLlRIIGN1cnNfZ2V0Y2ggM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJnZXRjaFxmUiwKK1xmQndnZXRjaFxmUiwKK1xmQm12Z2V0Y2hcZlIsCitcZkJtdndnZXRjaFxmUiwKK1xmQnVuZ2V0Y2hcZlIsCitcZkJoYXNfa2V5XGZSIFwtIGdldCAob3IgcHVzaCBiYWNrKSBjaGFyYWN0ZXJzIGZyb20gXGZCY3Vyc2VzXGZSIHRlcm1pbmFsIGtleWJvYXJkCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuUFAKK1xmQmludCBnZXRjaCh2b2lkKTtcZlIKKy5icgorXGZCaW50IHdnZXRjaChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBtdmdldGNoKGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQmludCBtdndnZXRjaChXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCaW50IHVuZ2V0Y2goaW50IGNoKTtcZlIKKy5icgorXGZCaW50IGhhc19rZXkoaW50IGNoKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCZ2V0Y2hcZlIsIFxmQndnZXRjaFxmUiwgXGZCbXZnZXRjaFxmUiBhbmQgXGZCbXZ3Z2V0Y2hcZlIsIHJvdXRpbmVzIHJlYWQKK2EgY2hhcmFjdGVyIGZyb20gdGhlIHdpbmRvdy4KK0luIG5vLWRlbGF5IG1vZGUsIGlmIG5vIGlucHV0IGlzIHdhaXRpbmcsIHRoZSB2YWx1ZSBcZkJFUlJcZlIgaXMgcmV0dXJuZWQuCitJbiBkZWxheSBtb2RlLCB0aGUgcHJvZ3JhbSB3YWl0cyB1bnRpbCB0aGUgc3lzdGVtCitwYXNzZXMgdGV4dCB0aHJvdWdoIHRvIHRoZSBwcm9ncmFtLgorRGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5nIG9mIFxmQmNicmVha1xmUiwKK3RoaXMgaXMgYWZ0ZXIgb25lIGNoYXJhY3RlciAoY2JyZWFrIG1vZGUpLAorb3IgYWZ0ZXIgdGhlIGZpcnN0IG5ld2xpbmUgKG5vY2JyZWFrIG1vZGUpLgorSW4gaGFsZi1kZWxheSBtb2RlLAordGhlIHByb2dyYW0gd2FpdHMgdW50aWwgYSBjaGFyYWN0ZXIgaXMgdHlwZWQgb3IgdGhlCitzcGVjaWZpZWQgdGltZW91dCBoYXMgYmVlbiByZWFjaGVkLgorLlBQCitVbmxlc3MgXGZCbm9lY2hvXGZSIGhhcyBiZWVuIHNldCwKK3RoZW4gdGhlIGNoYXJhY3RlciB3aWxsIGFsc28gYmUgZWNob2VkIGludG8gdGhlCitkZXNpZ25hdGVkIHdpbmRvdyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBydWxlczoKK0lmIHRoZSBjaGFyYWN0ZXIgaXMgdGhlIGN1cnJlbnQgZXJhc2UgY2hhcmFjdGVyLCBsZWZ0IGFycm93LCBvciBiYWNrc3BhY2UsCit0aGUgY3Vyc29yIGlzIG1vdmVkIG9uZSBzcGFjZSB0byB0aGUgbGVmdCBhbmQgdGhhdCBzY3JlZW4gcG9zaXRpb24gaXMgZXJhc2VkCithcyBpZiBcZkJkZWxjaFxmUiBoYWQgYmVlbiBjYWxsZWQuCitJZiB0aGUgY2hhcmFjdGVyIHZhbHVlIGlzIGFueSBvdGhlciBcZkJLRVlfXGZSIGRlZmluZSwgdGhlIHVzZXIgaXMgYWxlcnRlZAord2l0aCBhIFxmQmJlZXBcZlIgY2FsbC4KK090aGVyd2lzZSB0aGUgY2hhcmFjdGVyIGlzIHNpbXBseSBvdXRwdXQgdG8gdGhlIHNjcmVlbi4KKy5QUAorSWYgdGhlIHdpbmRvdyBpcyBub3QgYSBwYWQsIGFuZCBpdCBoYXMgYmVlbiBtb3ZlZCBvciBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdAorY2FsbCB0byBcZkJ3cmVmcmVzaFxmUiwgXGZCd3JlZnJlc2hcZlIgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGFub3RoZXIgY2hhcmFjdGVyCitpcyByZWFkLgorLlBQCitJZiBcZkJrZXlwYWRcZlIgaXMgXGZCVFJVRVxmUiwgYW5kIGEgZnVuY3Rpb24ga2V5IGlzIHByZXNzZWQsIHRoZSB0b2tlbiBmb3IKK3RoYXQgZnVuY3Rpb24ga2V5IGlzIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIHJhdyBjaGFyYWN0ZXJzLgorUG9zc2libGUgZnVuY3Rpb24KK2tleXMgYXJlIGRlZmluZWQgaW4gXGZCPGN1cnNlcy5oPlxmUiBhcyBtYWNyb3Mgd2l0aCB2YWx1ZXMgb3V0c2lkZSB0aGUgcmFuZ2UKK29mIDgtYml0IGNoYXJhY3RlcnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBcZkJLRVlfXGZSLiBUaHVzLCBhIHZhcmlhYmxlCitpbnRlbmRlZCB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiBrZXkgbXVzdCBiZSBvZiBzaG9ydCBzaXplIG9yCitsYXJnZXIuCisuUFAKK1doZW4gYSBjaGFyYWN0ZXIgdGhhdCBjb3VsZCBiZSB0aGUgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24ga2V5IGlzIHJlY2VpdmVkCisod2hpY2gsIG9uIG1vZGVybiB0ZXJtaW5hbHMsIG1lYW5zIGFuIGVzY2FwZSBjaGFyYWN0ZXIpLAorXGZCY3Vyc2VzXGZSIHNldHMgYSB0aW1lci4KK0lmIHRoZSByZW1haW5kZXIgb2YgdGhlIHNlcXVlbmNlIGRvZXMgbm90IGNvbWUgaW4gd2l0aGluIHRoZSBkZXNpZ25hdGVkCit0aW1lLCB0aGUgY2hhcmFjdGVyIGlzIHBhc3NlZCB0aHJvdWdoOworb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24ga2V5IHZhbHVlIGlzIHJldHVybmVkLgorRm9yIHRoaXMgcmVhc29uLCBtYW55IHRlcm1pbmFscyBleHBlcmllbmNlIGEgZGVsYXkgYmV0d2VlbiB0aGUgdGltZQorYSB1c2VyIHByZXNzZXMgdGhlIGVzY2FwZSBrZXkgYW5kIHRoZSBlc2NhcGUgaXMgcmV0dXJuZWQgdG8gdGhlIHByb2dyYW0uCisuUFAKK1RoZSBcZkJ1bmdldGNoXGZSIHJvdXRpbmUgcGxhY2VzIFxmSWNoXGZSIGJhY2sgb250byB0aGUgaW5wdXQgcXVldWUgdG8gYmUKK3JldHVybmVkIGJ5IHRoZSBuZXh0IGNhbGwgdG8gXGZCd2dldGNoXGZSLgorVGhlcmUgaXMganVzdCBvbmUgaW5wdXQgcXVldWUgZm9yIGFsbCB3aW5kb3dzLgorLlBQCisuU1MgRnVuY3Rpb24gS2V5cworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBrZXlzLCBkZWZpbmVkIGluIFxmQjxjdXJzZXMuaD5cZlIsIG1pZ2h0IGJlIHJldHVybmVkIGJ5CitcZkJnZXRjaFxmUiBpZiBcZkJrZXlwYWRcZlIgaGFzIGJlZW4gZW5hYmxlZC4KK05vdGUgdGhhdCBub3QgYWxsIG9mIHRoZXNlIGFyZQorbmVjZXNzYXJpbHkgc3VwcG9ydGVkIG9uIGFueSBwYXJ0aWN1bGFyIHRlcm1pbmFsLgorLnNwCisuVFMKK2NlbnRlciB0YWIoLykgOworbCBsCitsIGwgLgorXGZJTmFtZVxmUi9cZklLZXlcZlIgXGZJbmFtZVxmUgorS0VZX0JSRUFLL0JyZWFrIGtleQorS0VZX0RPV04vVGhlIGZvdXIgYXJyb3cga2V5cyAuLi4KK0tFWV9VUAorS0VZX0xFRlQKK0tFWV9SSUdIVAorS0VZX0hPTUUvSG9tZSBrZXkgKHVwd2FyZCtsZWZ0IGFycm93KQorS0VZX0JBQ0tTUEFDRS9CYWNrc3BhY2UKK0tFWV9GMC9UeworRnVuY3Rpb24ga2V5czsgc3BhY2UgZm9yIDY0IGtleXMgaXMgcmVzZXJ2ZWQuCitUfQorS0VZX0YoXGZJblxmUikvVHsKK0ZvciAwIFwoPD0gXGZJblxmUiBcKDw9IDYzCitUfQorS0VZX0RML0RlbGV0ZSBsaW5lCitLRVlfSUwvSW5zZXJ0IGxpbmUKK0tFWV9EQy9EZWxldGUgY2hhcmFjdGVyCitLRVlfSUMvSW5zZXJ0IGNoYXIgb3IgZW50ZXIgaW5zZXJ0IG1vZGUKK0tFWV9FSUMvRXhpdCBpbnNlcnQgY2hhciBtb2RlCitLRVlfQ0xFQVIvQ2xlYXIgc2NyZWVuCitLRVlfRU9TL0NsZWFyIHRvIGVuZCBvZiBzY3JlZW4KK0tFWV9FT0wvQ2xlYXIgdG8gZW5kIG9mIGxpbmUKK0tFWV9TRi9TY3JvbGwgMSBsaW5lIGZvcndhcmQKK0tFWV9TUi9TY3JvbGwgMSBsaW5lIGJhY2t3YXJkIChyZXZlcnNlKQorS0VZX05QQUdFL05leHQgcGFnZQorS0VZX1BQQUdFL1ByZXZpb3VzIHBhZ2UKK0tFWV9TVEFCL1NldCB0YWIKK0tFWV9DVEFCL0NsZWFyIHRhYgorS0VZX0NBVEFCL0NsZWFyIGFsbCB0YWJzCitLRVlfRU5URVIvRW50ZXIgb3Igc2VuZAorS0VZX1NSRVNFVC9Tb2Z0IChwYXJ0aWFsKSByZXNldAorS0VZX1JFU0VUL1Jlc2V0IG9yIGhhcmQgcmVzZXQKK0tFWV9QUklOVC9QcmludCBvciBjb3B5CitLRVlfTEwvSG9tZSBkb3duIG9yIGJvdHRvbSAobG93ZXIgbGVmdCkKK0tFWV9BMS9VcHBlciBsZWZ0IG9mIGtleXBhZAorS0VZX0EzL1VwcGVyIHJpZ2h0IG9mIGtleXBhZAorS0VZX0IyL0NlbnRlciBvZiBrZXlwYWQKK0tFWV9DMS9Mb3dlciBsZWZ0IG9mIGtleXBhZAorS0VZX0MzL0xvd2VyIHJpZ2h0IG9mIGtleXBhZAorS0VZX0JUQUIvQmFjayB0YWIga2V5CitLRVlfQkVHL0JlZyhpbm5pbmcpIGtleQorS0VZX0NBTkNFTC9DYW5jZWwga2V5CitLRVlfQ0xPU0UvQ2xvc2Uga2V5CitLRVlfQ09NTUFORC9DbWQgKGNvbW1hbmQpIGtleQorS0VZX0NPUFkvQ29weSBrZXkKK0tFWV9DUkVBVEUvQ3JlYXRlIGtleQorS0VZX0VORC9FbmQga2V5CitLRVlfRVhJVC9FeGl0IGtleQorS0VZX0ZJTkQvRmluZCBrZXkKK0tFWV9IRUxQL0hlbHAga2V5CitLRVlfTUFSSy9NYXJrIGtleQorS0VZX01FU1NBR0UvTWVzc2FnZSBrZXkKK0tFWV9NT1VTRS9Nb3VzZSBldmVudCByZWFkCitLRVlfTU9WRS9Nb3ZlIGtleQorS0VZX05FWFQvTmV4dCBvYmplY3Qga2V5CitLRVlfT1BFTi9PcGVuIGtleQorS0VZX09QVElPTlMvT3B0aW9ucyBrZXkKK0tFWV9QUkVWSU9VUy9QcmV2aW91cyBvYmplY3Qga2V5CitLRVlfUkVETy9SZWRvIGtleQorS0VZX1JFRkVSRU5DRS9SZWYoZXJlbmNlKSBrZXkKK0tFWV9SRUZSRVNIL1JlZnJlc2gga2V5CitLRVlfUkVQTEFDRS9SZXBsYWNlIGtleQorS0VZX1JFU0laRS9TY3JlZW4gcmVzaXplZAorS0VZX1JFU1RBUlQvUmVzdGFydCBrZXkKK0tFWV9SRVNVTUUvUmVzdW1lIGtleQorS0VZX1NBVkUvU2F2ZSBrZXkKK0tFWV9TQkVHL1NoaWZ0ZWQgYmVnaW5uaW5nIGtleQorS0VZX1NDQU5DRUwvU2hpZnRlZCBjYW5jZWwga2V5CitLRVlfU0NPTU1BTkQvU2hpZnRlZCBjb21tYW5kIGtleQorS0VZX1NDT1BZL1NoaWZ0ZWQgY29weSBrZXkKK0tFWV9TQ1JFQVRFL1NoaWZ0ZWQgY3JlYXRlIGtleQorS0VZX1NEQy9TaGlmdGVkIGRlbGV0ZSBjaGFyIGtleQorS0VZX1NETC9TaGlmdGVkIGRlbGV0ZSBsaW5lIGtleQorS0VZX1NFTEVDVC9TZWxlY3Qga2V5CitLRVlfU0VORC9TaGlmdGVkIGVuZCBrZXkKK0tFWV9TRU9ML1NoaWZ0ZWQgY2xlYXIgbGluZSBrZXkKK0tFWV9TRVhJVC9TaGlmdGVkIGV4aXQga2V5CitLRVlfU0ZJTkQvU2hpZnRlZCBmaW5kIGtleQorS0VZX1NIRUxQL1NoaWZ0ZWQgaGVscCBrZXkKK0tFWV9TSE9NRS9TaGlmdGVkIGhvbWUga2V5CitLRVlfU0lDL1NoaWZ0ZWQgaW5wdXQga2V5CitLRVlfU0xFRlQvU2hpZnRlZCBsZWZ0IGFycm93IGtleQorS0VZX1NNRVNTQUdFL1NoaWZ0ZWQgbWVzc2FnZSBrZXkKK0tFWV9TTU9WRS9TaGlmdGVkIG1vdmUga2V5CitLRVlfU05FWFQvU2hpZnRlZCBuZXh0IGtleQorS0VZX1NPUFRJT05TL1NoaWZ0ZWQgb3B0aW9ucyBrZXkKK0tFWV9TUFJFVklPVVMvU2hpZnRlZCBwcmV2IGtleQorS0VZX1NQUklOVC9TaGlmdGVkIHByaW50IGtleQorS0VZX1NSRURPL1NoaWZ0ZWQgcmVkbyBrZXkKK0tFWV9TUkVQTEFDRS9TaGlmdGVkIHJlcGxhY2Uga2V5CitLRVlfU1JJR0hUL1NoaWZ0ZWQgcmlnaHQgYXJyb3cKK0tFWV9TUlNVTUUvU2hpZnRlZCByZXN1bWUga2V5CitLRVlfU1NBVkUvU2hpZnRlZCBzYXZlIGtleQorS0VZX1NTVVNQRU5EL1NoaWZ0ZWQgc3VzcGVuZCBrZXkKK0tFWV9TVU5ETy9TaGlmdGVkIHVuZG8ga2V5CitLRVlfU1VTUEVORC9TdXNwZW5kIGtleQorS0VZX1VORE8vVW5kbyBrZXkKKy5URQorLlBQCitLZXlwYWQgaXMgYXJyYW5nZWQgbGlrZSB0aGlzOgorLnNwCisuVFMKK2NlbnRlciBhbGxib3ggdGFiKC8pIDsKK2MgYyBjIC4KK1xmQkExXGZSL1xmQnVwXGZSL1xmQkEzXGZSCitcZkJsZWZ0XGZSL1xmQkIyXGZSL1xmQnJpZ2h0XGZSCitcZkJDMVxmUi9cZkJkb3duXGZSL1xmQkMzXGZSCisuVEUKKy5zcAorVGhlIFxmQmhhc19rZXlcZlIgcm91dGluZSB0YWtlcyBhIGtleSB2YWx1ZSBmcm9tIHRoZSBhYm92ZSBsaXN0LCBhbmQKK3JldHVybnMgVFJVRSBvciBGQUxTRSBhY2NvcmRpbmcgdG8gd2hldGhlcgordGhlIGN1cnJlbnQgdGVybWluYWwgdHlwZSByZWNvZ25pemVzIGEga2V5IHdpdGggdGhhdCB2YWx1ZS4KK05vdGUgdGhhdCBhIGZldyB2YWx1ZXMgZG8gbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGtleSwKK2UuZy4sIFxmQktFWV9SRVNJWkVcZlAgYW5kIFxmQktFWV9NT1VTRVxmUC4KK1NlZSBcZkJyZXNpemV0ZXJtXGZSKDNYKSBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IFxmQktFWV9SRVNJWkVcZlAsIGFuZAorXGZCY3Vyc19tb3VzZVxmUigzWCkgZm9yIGEgZGlzY3Vzc2lvbiBvZiBcZkJLRVlfTU9VU0VcZlAuCisuUFAKKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgYW4gaW50ZWdlciB2YWx1ZQorb3RoZXIgdGhhbiBcZkJFUlJcZlIgKFxmQk9LXGZSIGluIHRoZSBjYXNlIG9mIHVuZ2V0Y2goKSkgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlJTCisuVFAgNQorXGZCdW5nZXRjaFxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlcmUgaXMgbm8gbW9yZSByb29tIGluIHRoZSBGSUZPLgorLlRQIDUKK1xmQndnZXRjaFxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsIG9yCitpZiBpdHMgdGltZW91dCBleHBpcmVzIHdpdGhvdXQgaGF2aW5nIGFueSBkYXRhLgorLlJFCisuU0ggTk9URVMKK1VzZSBvZiB0aGUgZXNjYXBlIGtleSBieSBhIHByb2dyYW1tZXIgZm9yIGEgc2luZ2xlIGNoYXJhY3RlciBmdW5jdGlvbiBpcworZGlzY291cmFnZWQsIGFzIGl0IHdpbGwgY2F1c2UgYSBkZWxheSBvZiB1cCB0byBvbmUgc2Vjb25kIHdoaWxlIHRoZQora2V5cGFkIGNvZGUgbG9va3MgZm9yIGEgZm9sbG93aW5nIGZ1bmN0aW9uLWtleSBzZXF1ZW5jZS4KKy5QUAorTm90ZSB0aGF0IHNvbWUga2V5cyBtYXkgYmUgdGhlIHNhbWUgYXMgY29tbW9ubHkgdXNlZCBjb250cm9sCitrZXlzLCBlLmcuLCBcZkJLRVlfRU5URVJcZlAgdmVyc3VzIGNvbnRyb2wvTSwgXGZCS0VZX0JBQ0tTUEFDRVxmUCB2ZXJzdXMgY29udHJvbC9ILgorU29tZSBjdXJzZXMgaW1wbGVtZW50YXRpb25zIG1heSBkaWZmZXIgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhleQordHJlYXQgdGhlc2UgY29udHJvbCBrZXlzIHNwZWNpYWxseSAoYW5kIGlnbm9yZSB0aGUgdGVybWluZm8pLCBvcgordXNlIHRoZSB0ZXJtaW5mbyBkZWZpbml0aW9ucy4KK1xmQk5jdXJzZXNcZlIgdXNlcyB0aGUgdGVybWluZm8gZGVmaW5pdGlvbi4KK0lmIGl0IHNheXMgdGhhdCBcZkJLRVlfRU5URVJcZlAgaXMgY29udHJvbC9NLAorXGZCZ2V0Y2hcZlIgd2lsbCByZXR1cm4gXGZCS0VZX0VOVEVSXGZQCit3aGVuIHlvdSBwcmVzcyBjb250cm9sL00uCisuUFAKK1doZW4gdXNpbmcgXGZCZ2V0Y2hcZlIsIFxmQndnZXRjaFxmUiwgXGZCbXZnZXRjaFxmUiwgb3IKK1xmQm12d2dldGNoXGZSLCBub2NicmVhayBtb2RlIChcZkJub2NicmVha1xmUikgYW5kIGVjaG8gbW9kZQorKFxmQmVjaG9cZlIpIHNob3VsZCBub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLgorRGVwZW5kaW5nIG9uIHRoZQorc3RhdGUgb2YgdGhlIHR0eSBkcml2ZXIgd2hlbiBlYWNoIGNoYXJhY3RlciBpcyB0eXBlZCwgdGhlIHByb2dyYW0gbWF5Citwcm9kdWNlIHVuZGVzaXJhYmxlIHJlc3VsdHMuCisuUFAKK05vdGUgdGhhdCBcZkJnZXRjaFxmUiwgXGZCbXZnZXRjaFxmUiwgYW5kIFxmQm12d2dldGNoXGZSIG1heSBiZSBtYWNyb3MuCisuUFAKK0hpc3RvcmljYWxseSwgdGhlIHNldCBvZiBrZXlwYWQgbWFjcm9zIHdhcyBsYXJnZWx5IGRlZmluZWQgYnkgdGhlIGV4dHJlbWVseQorZnVuY3Rpb24ta2V5LXJpY2gga2V5Ym9hcmQgb2YgdGhlIEFUJlQgNzMwMCwgYWthIDNCMSwgYWthIFNhZmFyaSA0LgorTW9kZXJuCitwZXJzb25hbCBjb21wdXRlcnMgdXN1YWxseSBoYXZlIG9ubHkgYSBzbWFsbCBzdWJzZXQgb2YgdGhlc2UuCitJQk0gUEMtc3R5bGUKK2NvbnNvbGVzIHR5cGljYWxseSBzdXBwb3J0IGxpdHRsZSBtb3JlIHRoYW4gXGZCS0VZX1VQXGZSLCBcZkJLRVlfRE9XTlxmUiwKK1xmQktFWV9MRUZUXGZSLCBcZkJLRVlfUklHSFRcZlIsIFxmQktFWV9IT01FXGZSLCBcZkJLRVlfRU5EXGZSLAorXGZCS0VZX05QQUdFXGZSLCBcZkJLRVlfUFBBR0VcZlIsIGFuZCBmdW5jdGlvbiBrZXlzIDEgdGhyb3VnaCAxMi4KK1RoZSBJbnMga2V5CitpcyB1c3VhbGx5IG1hcHBlZCB0byBcZkJLRVlfSUNcZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSAqZ2V0KiBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KK1RoZXkKK3JlYWQgc2luZ2xlLWJ5dGUgY2hhcmFjdGVycyBvbmx5LgorVGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHRoZXkgcmV0dXJuCitcZkJFUlJcZlIgb24gZmFpbHVyZSwgYnV0IHNwZWNpZmllcyBubyBlcnJvciBjb25kaXRpb25zLgorLlBQCitUaGUgZWNobyBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnMgb24gaW5wdXQgb2YgXGZCS0VZX1xmUiBvciBiYWNrc3BhY2UKK2NoYXJhY3RlcnMgd2FzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIFNWcjQgZG9jdW1lbnRhdGlvbi4KK1RoaXMgZGVzY3JpcHRpb24gaXMKK2Fkb3B0ZWQgZnJvbSB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZC4KKy5QUAorVGhlIGJlaGF2aW9yIG9mIFxmQmdldGNoXGZSIGFuZCBmcmllbmRzIGluIHRoZSBwcmVzZW5jZSBvZiBoYW5kbGVkIHNpZ25hbHMgaXMKK3Vuc3BlY2lmaWVkIGluIHRoZSBTVnI0IGFuZCBYU0kgQ3Vyc2VzIGRvY3VtZW50YXRpb24uCitVbmRlciBoaXN0b3JpY2FsIGN1cnNlcworaW1wbGVtZW50YXRpb25zLCBpdCB2YXJpZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncworaW1wbGVtZW50YXRpb24gb2YgaGFuZGxlZCBzaWduYWwgcmVjZWlwdCBpbnRlcnJ1cHRzIGEgXGZCcmVhZFxmUigyKSBjYWxsIGluCitwcm9ncmVzcyBvciBub3QsIGFuZCBhbHNvIChpbiBzb21lIGltcGxlbWVudGF0aW9ucykgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYW4KK2lucHV0IHRpbWVvdXQgb3Igbm9uLWJsb2NraW5nIG1vZGUgaGFzIGJlZW4gc2V0LgorLlBQCitQcm9ncmFtbWVycyBjb25jZXJuZWQgYWJvdXQgcG9ydGFiaWxpdHkgc2hvdWxkIGJlIHByZXBhcmVkIGZvciBlaXRoZXIgb2YgdHdvCitjYXNlczogKGEpIHNpZ25hbCByZWNlaXB0IGRvZXMgbm90IGludGVycnVwdCBcZkJnZXRjaFxmUjsgKGIpIHNpZ25hbCByZWNlaXB0CitpbnRlcnJ1cHRzIFxmQmdldGNoXGZSIGFuZCBjYXVzZXMgaXQgdG8gcmV0dXJuIEVSUiB3aXRoIFxmQmVycm5vXGZSIHNldCB0bworXGZCRUlOVFJcZlIuCitVbmRlciB0aGUgXGZCbmN1cnNlc1xmUiBpbXBsZW1lbnRhdGlvbiwgaGFuZGxlZCBzaWduYWxzIG5ldmVyCitpbnRlcnJ1cHQgXGZCZ2V0Y2hcZlIuCisuUFAKK1RoZSBcZkJoYXNfa2V5XGZSIGZ1bmN0aW9uIGlzIHVuaXF1ZSB0byBcZkJuY3Vyc2VzXGZSLgorV2UgcmVjb21tZW5kIHRoYXQKK2FueSBjb2RlIHVzaW5nIGl0IGJlIGNvbmRpdGlvbmFsaXplZCBvbiB0aGUgXGZCTkNVUlNFU19WRVJTSU9OXGZSIGZlYXR1cmUgbWFjcm8uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2lub3B0c1xmUigzWCksCitcZkJjdXJzX21vdXNlXGZSKDNYKSwKK1xmQmN1cnNfbW92ZVxmUigzWCksCitcZkJjdXJzX3JlZnJlc2hcZlIoM1gpLAorXGZCcmVzaXpldGVybVxmUigzWCkuCisuUFAKK0NvbXBhcmFibGUgZnVuY3Rpb25zIGluIHRoZSB3aWRlLWNoYXJhY3RlciAobmN1cnNlc3cpIGxpYnJhcnkgYXJlCitkZXNjcmliZWQgaW4KK1xmQmN1cnNfZ2V0X3djaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2dldHN0ci4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2dldHN0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMxNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfZ2V0c3RyLjN4CkBAIC0wLDAgKzEsMTIyIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfZ2V0c3RyLjN4LHYgMS4xNSAyMDA2LzAxLzEyIDAwOjMwOjU4IHRvbSBFeHAgJAorLlRIIGN1cnNfZ2V0c3RyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZ2V0c3RyXGZSLAorXGZCZ2V0bnN0clxmUiwKK1xmQndnZXRzdHJcZlIsCitcZkJ3Z2V0bnN0clxmUiwKK1xmQm12Z2V0c3RyXGZSLAorXGZCbXZnZXRuc3RyXGZSLAorXGZCbXZ3Z2V0c3RyXGZSLAorXGZCbXZ3Z2V0bnN0clxmUiAtIGFjY2VwdCBjaGFyYWN0ZXIgc3RyaW5ncyBmcm9tIFxmQmN1cnNlc1xmUiB0ZXJtaW5hbCBrZXlib2FyZAorLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgZ2V0c3RyKGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCBnZXRuc3RyKGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd2dldHN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IHdnZXRuc3RyKFdJTkRPVyAqd2luLCBjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12Z2V0c3RyKGludCB5LCBpbnQgeCwgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IG12d2dldHN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaGFyICpzdHIpO1xmUgorLmJyCitcZkJpbnQgbXZnZXRuc3RyKGludCB5LCBpbnQgeCwgY2hhciAqc3RyLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdndnZXRuc3RyKFdJTkRPVyAqLCBpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJnZXRzdHJcZlIgaXMgZXF1aXZhbGVudCB0byBhIHNlcmllcyBvZiBjYWxscyB0byBcZkJnZXRjaFxmUiwKK3VudGlsIGEgbmV3bGluZSBvciBjYXJyaWFnZSByZXR1cm4gaXMgcmVjZWl2ZWQgKHRoZSB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgaXMKK25vdCBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgc3RyaW5nKS4gIFRoZSByZXN1bHRpbmcgdmFsdWUgaXMgcGxhY2VkIGluIHRoZQorYXJlYSBwb2ludGVkIHRvIGJ5IHRoZSBjaGFyYWN0ZXIgcG9pbnRlciBcZklzdHJcZlIuCisuUFAKK1xmQndnZXRuc3RyXGZSIHJlYWRzIGF0IG1vc3QgXGZJblxmUiBjaGFyYWN0ZXJzLCB0aHVzIHByZXZlbnRpbmcgYSBwb3NzaWJsZQorb3ZlcmZsb3cgb2YgdGhlIGlucHV0IGJ1ZmZlci4gIEFueSBhdHRlbXB0IHRvIGVudGVyIG1vcmUgY2hhcmFjdGVycyAob3RoZXIKK3RoYW4gdGhlIHRlcm1pbmF0aW5nIG5ld2xpbmUgb3IgY2FycmlhZ2UgcmV0dXJuKSBjYXVzZXMgYSBiZWVwLiAgRnVuY3Rpb24KK2tleXMgYWxzbyBjYXVzZSBhIGJlZXAgYW5kIGFyZSBpZ25vcmVkLiAgVGhlIFxmQmdldG5zdHJcZlIgZnVuY3Rpb24gcmVhZHMKK2Zyb20gdGhlIFxmSXN0ZHNjclxmUiBkZWZhdWx0IHdpbmRvdy4KKy5QUAorVGhlIHVzZXIncyBlcmFzZSBhbmQga2lsbCBjaGFyYWN0ZXJzIGFyZSBpbnRlcnByZXRlZC4gIElmIGtleXBhZAorbW9kZSBpcyBvbiBmb3IgdGhlIHdpbmRvdywgXGZCS0VZX0xFRlRcZlIgYW5kIFxmQktFWV9CQUNLU1BBQ0VcZlIKK2FyZSBib3RoIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byB0aGUgdXNlcidzIGtpbGwgY2hhcmFjdGVyLgorLlBQCitDaGFyYWN0ZXJzIGlucHV0IGFyZSBlY2hvZWQgb25seSBpZiBcZkJlY2hvXGZSIGlzIGN1cnJlbnRseSBvbi4gIEluIHRoYXQgY2FzZSwKK2JhY2tzcGFjZSBpcyBlY2hvZWQgYXMgZGVsZXRpb24gb2YgdGhlIHByZXZpb3VzIGNoYXJhY3RlciAodHlwaWNhbGx5IGEgbGVmdAorbW90aW9uKS4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyByZXR1cm4gdGhlIGludGVnZXIgXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgYW4gXGZCT0tcZlIgKFNWcjQKK3NwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorLlBQCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLAordGhlc2UgZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsIG9yCitpZiBpdHMgdGltZW91dCBleHBpcmVzIHdpdGhvdXQgaGF2aW5nIGFueSBkYXRhLgorLlBQCitUaGlzIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGFuIGV4dGVuc2lvbiBhcyB3ZWxsLgorSWYgYSBTSUdXSU5DSCBpbnRlcnJ1cHRzIHRoZSBmdW5jdGlvbiwgaXQgd2lsbCByZXR1cm4gXGZCS0VZX1JFU0laRVxmUAorcmF0aGVyIHRoYW4gXGZCT0tcZlAgb3IgXGZCRVJSXGZQLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCZ2V0c3RyXGZSLCBcZkJtdmdldHN0clxmUiwgYW5kIFxmQm12d2dldHN0clxmUiBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KK1RoZXkgcmVhZCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzIG9ubHkuCitUaGUgc3RhbmRhcmQgZG9lcyBub3QgZGVmaW5lIGFueSBlcnJvciBjb25kaXRpb25zLgorVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIEVSUiBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwKK29yIGlmIHRoZSBsb3dlci1sZXZlbCBcZkJ3Z2V0Y2hcZlIgY2FsbCByZXR1cm5zIGFuIEVSUi4KKy5QUAorU1ZyMyBhbmQgZWFybHkgU1ZyNCBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGRpZCBub3QgcmVqZWN0IGZ1bmN0aW9uIGtleXM7Cit0aGUgU1ZyNC4wIGRvY3VtZW50YXRpb24gY2xhaW1lZCB0aGF0ICJzcGVjaWFsIGtleXMiIChzdWNoIGFzIGZ1bmN0aW9uCitrZXlzLCAiaG9tZSIga2V5LCAiY2xlYXIiIGtleSwgXGZJZXRjXGZSLikgYXJlICJpbnRlcnByZXRlZCIsIHdpdGhvdXQKK2dpdmluZyBkZXRhaWxzLiAgSXQgbGllZC4gIEluIGZhY3QsIHRoZSBgY2hhcmFjdGVyJyB2YWx1ZSBhcHBlbmRlZCB0byB0aGUKK3N0cmluZyBieSB0aG9zZSBpbXBsZW1lbnRhdGlvbnMgd2FzIHByZWRpY3RhYmxlIGJ1dCBub3QgdXNlZnVsCisoYmVpbmcsIGluIGZhY3QsIHRoZSBsb3ctb3JkZXIgZWlnaHQgYml0cyBvZiB0aGUga2V5J3MgS0VZXyB2YWx1ZSkuCisuUFAKK1RoZSBmdW5jdGlvbnMgXGZCZ2V0bnN0clxmUiwgXGZCbXZnZXRuc3RyXGZSLCBhbmQgXGZCbXZ3Z2V0bnN0clxmUiB3ZXJlCitwcmVzZW50IGJ1dCBub3QgZG9jdW1lbnRlZCBpbiBTVnI0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX2dldGNoXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfZ2V0eXguM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19nZXR5eC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTgxMjUzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfZ2V0eXguM3gKQEAgLTAsMCArMSwxMDYgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19nZXR5eC4zeCx2IDEuMTYgMjAwNy8wNS8xMiAxNjozNDo0OSB0b20gRXhwICQKKy5USCBjdXJzX2dldHl4IDNYICIiCisuU0ggTkFNRQorXGZCZ2V0eXhcZlIsCitcZkJnZXRwYXJ5eFxmUiwKK1xmQmdldGJlZ3l4XGZSLAorXGZCZ2V0bWF4eXhcZlIgLSBnZXQgXGZCY3Vyc2VzXGZSIGN1cnNvciBhbmQgd2luZG93IGNvb3JkaW5hdGVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCdm9pZCBnZXR5eChXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCdm9pZCBnZXRwYXJ5eChXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCdm9pZCBnZXRiZWd5eChXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCdm9pZCBnZXRtYXh5eChXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCZ2V0eXhcZlIgbWFjcm8gcGxhY2VzIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gd2luZG93IGluCit0aGUgdHdvIGludGVnZXIgdmFyaWFibGVzIFxmSXlcZlIgYW5kIFxmSXhcZlIuCisuUFAKK0lmIFxmSXdpblxmUiBpcyBhIHN1YndpbmRvdywgdGhlIFxmQmdldHBhcnl4XGZSIG1hY3JvIHBsYWNlcyB0aGUgYmVnaW5uaW5nCitjb29yZGluYXRlcyBvZiB0aGUgc3Vid2luZG93IHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgd2luZG93IGludG8gdHdvIGludGVnZXIKK3ZhcmlhYmxlcyBcZkl5XGZSIGFuZCBcZkl4XGZSLgorT3RoZXJ3aXNlLCBcZkItMVxmUiBpcyBwbGFjZWQgaW50byBcZkl5XGZSIGFuZCBcZkl4XGZSLgorLlBQCitMaWtlIFxmQmdldHl4XGZSLCB0aGUgXGZCZ2V0YmVneXhcZlIgYW5kIFxmQmdldG1heHl4XGZSIG1hY3JvcyBzdG9yZQordGhlIGN1cnJlbnQgYmVnaW5uaW5nIGNvb3JkaW5hdGVzIGFuZCBzaXplIG9mIHRoZSBzcGVjaWZpZWQgd2luZG93LgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIHJldHVybiB2YWx1ZXMgb2YgdGhlc2UgbWFjcm9zIGFyZSB1bmRlZmluZWQgKGkuZS4sCit0aGV5IHNob3VsZCBub3QgYmUgdXNlZCBhcyB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50cykuCisuU0ggTk9URVMKK0FsbCBvZiB0aGVzZSBpbnRlcmZhY2VzIGFyZSBtYWNyb3MuCitBICJcZkImXGZSIiBpcyBub3QgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgdmFyaWFibGVzIFxmSXlcZlIgYW5kIFxmSXhcZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZQorXGZCZ2V0eXhcZlIsCitcZkJnZXRwYXJ5eFxmUiwKK1xmQmdldGJlZ3l4XGZSIGFuZAorXGZCZ2V0bWF4eXhcZlIKK21hY3JvcyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlBQCitUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gcHJvdmlkZXMgZnVuY3Rpb25zCitcZkJnZXRiZWd4XGZSLAorXGZCZ2V0YmVneVxmUiwKK1xmQmdldGN1cnhcZlIsCitcZkJnZXRjdXJ5XGZSLAorXGZCZ2V0bWF4eFxmUiwKK1xmQmdldG1heHlcZlIsCitcZkJnZXRwYXJ4XGZSIGFuZAorXGZCZ2V0cGFyeVxmUgorZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBjdXJzZXMuCisuUFAKK0FsdGhvdWdoIFgvT3BlbiBDdXJzZXMgZG9lcyBub3QgYWRkcmVzcyB0aGlzLAorbWFueSBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZSBtZW1iZXJzIG9mIHRoZSBXSU5ET1cgc3RydWN0dXJlCitjb250YWluaW5nIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIG1hY3Jvcy4KK0ZvciBiZXN0IHBvcnRhYmlsaXR5LCBkbyBub3QgcmVseSBvbiB1c2luZyB0aGUgZGF0YSBpbiBXSU5ET1csCitzaW5jZSBzb21lIGltcGxlbWVudGF0aW9ucyBtYWtlIFdJTkRPVyBvcGFxdWUgKGRvIG5vdCBhbGxvdworZGlyZWN0IHVzZSBvZiBpdHMgbWVtYmVycykuCisuUFAKK0Jlc2lkZXMgdGhlIHByb2JsZW0gb2Ygb3BhcXVlIHN0cnVjdHVyZXMsCit0aGUgZGF0YSBzdG9yZWQgaW4gbGlrZS1uYW1lZCBtZW1iZXJzIG1heSBub3QgaGF2ZSBsaWtlLXZhbHVlcyBpbgorZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4KK0ZvciBleGFtcGxlLCB0aGUgV0lORE9XLl9tYXh4IGFuZCBXSU5ET1cuX21heHkgdmFsdWVzIGluIG5jdXJzZXMKK2hhdmUgKGF0IGxlYXN0IHNpbmNlIHJlbGVhc2UgMS44LjEpIGRpZmZlcmVkIGJ5IG9uZSBmcm9tIHNvbWUKK290aGVyIGltcGxlbWVudGF0aW9ucy4KK1RoZSBkaWZmZXJlbmNlIGlzIGhpZGRlbiBieSBtZWFucyBvZiB0aGUgbWFjcm8gXGZCZ2V0bWF4eXhcZlAuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2xlZ2FjeVxmUigzWCksCitcZkJjdXJzX29wYXF1ZVxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5fd2NoLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5fd2NoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MDlkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19pbl93Y2guM3gKQEAgLTAsMCArMSw2OCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2luX3djaC4zeCx2IDEuMiAyMDA2LzAyLzI1IDIxOjQyOjIyIHRvbSBFeHAgJAorLlRIIGN1cnNfaW5fd2NoIDNYICIiCisuU0ggTkFNRQorXGZCaW5fd2NoXGZSLAorXGZCbXZpbl93Y2hcZlIsCitcZkJtdndpbl93Y2hcZlIsCitcZkJ3aW5fd2NoXGZSIC0gZXh0cmFjdCBhIGNvbXBsZXggY2hhcmFjdGVyIGFuZCByZW5kaXRpb24gZnJvbSBhIHdpbmRvdworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBpbl93Y2goY2NoYXJfdCAqXGZSXGZJd2N2YWxcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZpbl93Y2goaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjY2hhcl90ICpcZlJcZkl3Y3ZhbFxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndpbl93Y2goV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2N2YWxcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2luX3djaChXSU5ET1cgKlxmUlxmSXdpblxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2N2YWxcZlJcZkIpO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgZXh0cmFjdCB0aGUgY29tcGxleCBjaGFyYWN0ZXIgYW5kIHJlbmRpdGlvbiBmcm9tCit0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbmFtZWQgd2luZG93IGludG8gdGhlIFxmQmNjaGFyX3RcZlIgb2JqZWN0CityZWZlcmVuY2VkIGJ5IHdjdmFsLgorLlNIIFJFVFVSTiBWQUxVRQorTm8gZXJyb3JzIGFyZSBkZWZpbmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZm9yIG51bGwgcG9pbnRlcnMsIHJldHVybnMgRVJSIGluIHRoYXQgY2FzZS4KK0Fsc28sIHRoZSBcZkltdlxmUiByb3V0aW5lcyBjaGVjayBmb3IgZXJyb3IgbW92aW5nIHRoZSBjdXJzb3IsIHJldHVybmluZyBFUlIKK2luIHRoYXQgY2FzZS4KK090aGVyd2lzZSB0aGV5IHJldHVybiBPSworLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIG9mIHRoZXNlIHJvdXRpbmVzIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbmNoXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5fd2Noc3RyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5fd2Noc3RyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGExZjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19pbl93Y2hzdHIuM3gKQEAgLTAsMCArMSwxMjIgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbl93Y2hzdHIuM3gsdiAxLjYgMjAwNi8xMi8wMiAxNzowMzowNyB0b20gRXhwICQKKy5USCBjdXJzX2luX3djaHN0ciAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQmluX3djaHN0clxmUiwKK1xmQmluX3djaG5zdHJcZlIsCitcZkJ3aW5fd2Noc3RyXGZSLAorXGZCd2luX3djaG5zdHJcZlIsCitcZkJtdmluX3djaHN0clxmUiwKK1xmQm12aW5fd2NobnN0clxmUiwKK1xmQm12d2luX3djaHN0clxmUiwKK1xmQm12d2luX3djaG5zdHJcZlIgXC0gZ2V0IGFuIGFycmF5IG9mIGNvbXBsZXggY2hhcmFjdGVycyBhbmQgcmVuZGl0aW9ucyBmcm9tIGEgY3Vyc2VzIHdpbmRvdworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworLm5mCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBpbl93Y2hzdHIoY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IGluX3djaG5zdHIoY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3aW5fd2Noc3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2luX3djaG5zdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNjaGFyX3QgKlxmUlxmSXdjaHN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZpbl93Y2hzdHIoaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjY2hhcl90ICpcZlJcZkl3Y2hzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZpbl93Y2huc3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndpbl93Y2hzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2luX3djaG5zdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY2NoYXJfdCAqXGZSXGZJd2Noc3RyXGZSLCBpbnQgXGZJblxmUlxmQik7XGZSCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhbiBhcnJheSBvZiBjb21wbGV4IGNoYXJhY3RlcnMgaW4gXGZJd2Noc3RyXGZSLAorc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBuYW1lZCB3aW5kb3cuCitBdHRyaWJ1dGVzIChyZW5kaXRpb24pIGFyZSBzdG9yZWQgd2l0aCB0aGUgY2hhcmFjdGVycy4KKy5QUAorVGhlCitcZkJpbl93Y2huc3RyXGZSLAorXGZCbXZpbl93Y2huc3RyXGZSLAorXGZCbXZ3aW5fd2NobnN0clxmUgorYW5kCitcZkJ3aW5fd2NobnN0clxmUgorZmlsbCB0aGUgYXJyYXkKK3dpdGggYXQgbW9zdAorXGZJblxmUgorXGZCY2NoYXJfdFxmUgorZWxlbWVudHMuCisuYnIKKy5TSCBOT1RFUworTm90ZSB0aGF0IGFsbCByb3V0aW5lcyBleGNlcHQKK1xmQndpbl93Y2huc3RyXGZSCittYXkgYmUKK21hY3Jvcy4KKy5QUAorUmVhZGluZyBhIGxpbmUgdGhhdCBvdmVyZmxvd3MgdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkKK1xmSXdjaHN0clxmUgord2l0aAorXGZCaW5fd2Noc3RyXGZSLAorXGZCbXZpbl93Y2hzdHJcZlIsCitcZkJtdndpbl93Y2hzdHJcZlIKK29yCitcZkJ3aW5fd2Noc3RyXGZSCitjYXVzZXMgdW5kZWZpbmVkIHJlc3VsdHMuIFRoZXJlZm9yZSwgdGhlIHVzZSBvZgorXGZCaW5fd2NobnN0clxmUiwKK1xmQm12aW5fd2NobnN0clxmUiwKK1xmQm12d2luX3djaG5zdHJcZlIsIG9yCitcZkJ3aW5fd2NobnN0clxmUgoraXMgcmVjb21tZW5kZWQuCisuU0ggUkVUVVJOIFZBTFVFUworVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4KK1xmQk9LXGZSLgorT3RoZXJ3aXNlLCB0aGV5IHJldHVybgorXGZCRVJSXGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCitUaGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyBmb3IgbnVsbCBwb2ludGVycywKK3JldHVybmluZyBFUlIgaW4gdGhhdCBjYXNlLgorLlNIIFNFRSBBTFNPCitGdW5jdGlvbnM6CitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbl93Y2hcZlIoM1gpLAorXGZCY3Vyc19pbnN0clxmUigzWCksCitcZkJjdXJzX2lud3N0clxmUigzWCkKK1xmQmN1cnNfaW5jaHN0clxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5jaC4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2luY2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5MWI5YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2luY2guM3gKQEAgLTAsMCArMSw3NyBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbmNoLjN4LHYgMS4xMyAyMDA2LzEyLzAyIDE2OjU4OjU1IHRvbSBFeHAgJAorLlRIIGN1cnNfaW5jaCAzWCAiIgorLlNIIE5BTUUKK1xmQmluY2hcZlIsIFxmQndpbmNoXGZSLCBcZkJtdmluY2hcZlIsIFxmQm12d2luY2hcZlIKKy0gZ2V0IGEgY2hhcmFjdGVyIGFuZCBhdHRyaWJ1dGVzIGZyb20gYSBcZkJjdXJzZXNcZlIgd2luZG93CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCY2h0eXBlIGluY2godm9pZCk7XGZSCisuYnIKK1xmQmNodHlwZSB3aW5jaChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmNodHlwZSBtdmluY2goaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCY2h0eXBlIG12d2luY2goV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgcmV0dXJuIHRoZSBjaGFyYWN0ZXIsIG9mIHR5cGUgXGZCY2h0eXBlXGZSLCBhdCB0aGUgY3VycmVudAorcG9zaXRpb24gaW4gdGhlIG5hbWVkIHdpbmRvdy4gIElmIGFueSBhdHRyaWJ1dGVzIGFyZSBzZXQgZm9yIHRoYXQgcG9zaXRpb24sCit0aGVpciB2YWx1ZXMgYXJlIE9SJ2VkIGludG8gdGhlIHZhbHVlIHJldHVybmVkLiAgQ29uc3RhbnRzIGRlZmluZWQgaW4KK1xmQjxjdXJzZXMuaD5cZlIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgXGZCJlxmUiAobG9naWNhbCBBTkQpIG9wZXJhdG9yIHRvCitleHRyYWN0IHRoZSBjaGFyYWN0ZXIgb3IgYXR0cmlidXRlcyBhbG9uZS4KKy4KKy5TUyBBdHRyaWJ1dGVzCitUaGUgZm9sbG93aW5nIGJpdC1tYXNrcyBtYXkgYmUgQU5ELWVkIHdpdGggY2hhcmFjdGVycyByZXR1cm5lZCBieSBcZkJ3aW5jaFxmUi4KKy4KKy5UUworbCBsIC4KK1xmQkFfQ0hBUlRFWFRcZlIJQml0LW1hc2sgdG8gZXh0cmFjdCBjaGFyYWN0ZXIKK1xmQkFfQVRUUklCVVRFU1xmUglCaXQtbWFzayB0byBleHRyYWN0IGF0dHJpYnV0ZXMKK1xmQkFfQ09MT1JcZlIJQml0LW1hc2sgdG8gZXh0cmFjdCBjb2xvci1wYWlyIGZpZWxkIGluZm9ybWF0aW9uCisuVEUKKy5TSCBOT1RFUworTm90ZSB0aGF0IGFsbCBvZiB0aGVzZSByb3V0aW5lcyBtYXkgYmUgbWFjcm9zLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKS4KKy5QUAorQ29tcGFyYWJsZSBmdW5jdGlvbnMgaW4gdGhlIHdpZGUtY2hhcmFjdGVyIChuY3Vyc2VzdykgbGlicmFyeSBhcmUKK2Rlc2NyaWJlZCBpbgorXGZCY3Vyc19pbl93Y2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19pbmNoc3RyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5jaHN0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGMyMWRjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5jaHN0ci4zeApAQCAtMCwwICsxLDEwMSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2luY2hzdHIuM3gsdiAxLjEyIDIwMDYvMTIvMDIgMTc6MDA6NTggdG9tIEV4cCAkCisuVEggY3Vyc19pbmNoc3RyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCaW5jaHN0clxmUiwKK1xmQmluY2huc3RyXGZSLAorXGZCd2luY2hzdHJcZlIsCitcZkJ3aW5jaG5zdHJcZlIsCitcZkJtdmluY2hzdHJcZlIsCitcZkJtdmluY2huc3RyXGZSLAorXGZCbXZ3aW5jaHN0clxmUiwKK1xmQm12d2luY2huc3RyXGZSIC0gZ2V0IGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgKGFuZCBhdHRyaWJ1dGVzKSBmcm9tIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgaW5jaHN0cihjaHR5cGUgKmNoc3RyKTtcZlIKKy5icgorXGZCaW50IGluY2huc3RyKGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IHdpbmNoc3RyKFdJTkRPVyAqd2luLCBjaHR5cGUgKmNoc3RyKTtcZlIKKy5icgorXGZCaW50IHdpbmNobnN0cihXSU5ET1cgKndpbiwgY2h0eXBlICpjaHN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZpbmNoc3RyKGludCB5LCBpbnQgeCwgY2h0eXBlICpjaHN0cik7XGZSCisuYnIKK1xmQmludCBtdmluY2huc3RyKGludCB5LCBpbnQgeCwgY2h0eXBlICpjaHN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5jaHN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaHR5cGUgKmNoc3RyKTtcZlIKKy5icgorXGZCaW50IG12d2luY2huc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSAqY2hzdHIsIGludCBuKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyByZXR1cm4gYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgXGZCY2h0eXBlXGZSIHF1YW50aXRpZXMsCitzdGFydGluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIG5hbWVkIHdpbmRvdyBhbmQgZW5kaW5nIGF0IHRoZQorcmlnaHQgbWFyZ2luIG9mIHRoZSB3aW5kb3cuICBUaGUgZm91ciBmdW5jdGlvbnMgd2l0aCBcZkluXGZSIGFzCit0aGUgbGFzdCBhcmd1bWVudCwgcmV0dXJuIGEgbGVhZGluZyBzdWJzdHJpbmcgYXQgbW9zdCBcZkluXGZSIGNoYXJhY3RlcnMgbG9uZworKGV4Y2x1c2l2ZSBvZiB0aGUgdHJhaWxpbmcgKGNodHlwZSkwKS4KK0NvbnN0YW50cyBkZWZpbmVkIGluIFxmQjxjdXJzZXMuaD5cZlIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgXGZCJlxmUiAobG9naWNhbAorQU5EKSBvcGVyYXRvciB0byBleHRyYWN0IHRoZSBjaGFyYWN0ZXIgb3IgdGhlIGF0dHJpYnV0ZSBhbG9uZSBmcm9tIGFueSBwb3NpdGlvbgoraW4gdGhlIFxmSWNoc3RyXGZSIFtzZWUgXGZCY3Vyc19pbmNoXGZSKDNYKV0uCisuU0ggUkVUVVJOIFZBTFVFCitBbGwgcm91dGluZXMgcmV0dXJuIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIGFuIGludGVnZXIgdmFsdWUKK290aGVyIHRoYW4gXGZCRVJSXGZSIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uICh0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKK3JldHJpZXZlZCwgZXhjbHVzaXZlIG9mIHRoZSB0cmFpbGluZyAwKS4KKy5QUAorTm8gZXJyb3IgY29uZGl0aW9ucyBhcmUgZGVmaW5lZC4KK0lmIHRoZSBcZkljaHN0clxmUCBwYXJhbWV0ZXIgaXMgbnVsbCwKK25vIGRhdGEgaXMgcmV0dXJuZWQsCithbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdCBcZkJ3aW5jaG5zdHJcZlIgbWF5IGJlIG1hY3Jvcy4gIFNWcjQgZG9lcyBub3QKK2RvY3VtZW50IHdoZXRoZXIgdGhlIHJlc3VsdCBzdHJpbmcgaXMgMC10ZXJtaW5hdGVkOyBpdCBkb2VzIG5vdCBkb2N1bWVudAord2hldGhlciBhIGxlbmd0aCBsaW1pdCBhcmd1bWVudCBpbmNsdWRlcyBhbnkgdHJhaWxpbmcgMDsgYW5kIGl0IGRvZXMgbm90Citkb2N1bWVudCB0aGUgbWVhbmluZyBvZiB0aGUgcmV0dXJuIHZhbHVlLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNC4gIEl0IGlzIG5vCittb3JlIHNwZWNpZmljIHRoYW4gdGhlIFNWcjQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgdHJhaWxpbmcgMC4gIEl0IGRvZXMgc3BlY2lmeQordGhhdCB0aGUgc3VjY2Vzc2Z1bCByZXR1cm4gb2YgdGhlIGZ1bmN0aW9ucyBpcyBcZkJPS1xmUi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19pbmNoXGZSKDNYKS4KKy5QUAorQ29tcGFyYWJsZSBmdW5jdGlvbnMgaW4gdGhlIHdpZGUtY2hhcmFjdGVyIChuY3Vyc2VzdykgbGlicmFyeSBhcmUKK2Rlc2NyaWJlZCBpbgorXGZCY3Vyc19pbl93Y2hzdHJcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19pbml0c2NyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5pdHNjci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTg2NWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5pdHNjci4zeApAQCAtMCwwICsxLDEzMiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2luaXRzY3IuM3gsdiAxLjE0IDIwMDUvMDUvMTUgMTY6MTg6MDEgdG9tIEV4cCAkCisuVEggY3Vyc19pbml0c2NyIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCaW5pdHNjclxmUiwKK1xmQm5ld3Rlcm1cZlIsCitcZkJlbmR3aW5cZlIsCitcZkJpc2VuZHdpblxmUiwKK1xmQnNldF90ZXJtXGZSLAorXGZCZGVsc2NyZWVuXGZSIC0gXGZCY3Vyc2VzXGZSIHNjcmVlbiBpbml0aWFsaXphdGlvbiBhbmQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQldJTkRPVyAqaW5pdHNjcih2b2lkKTtcZlIKKy5icgorXGZCaW50IGVuZHdpbih2b2lkKTtcZlIKKy5icgorXGZCYm9vbCBpc2VuZHdpbih2b2lkKTtcZlIKKy5icgorXGZCU0NSRUVOICpuZXd0ZXJtKGNoYXIgKnR5cGUsIEZJTEUgKm91dGZkLCBGSUxFICppbmZkKTtcZlIKKy5icgorXGZCU0NSRUVOICpzZXRfdGVybShTQ1JFRU4gKm5ldyk7XGZSCisuYnIKK1xmQnZvaWQgZGVsc2NyZWVuKFNDUkVFTiogc3ApO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1xmQmluaXRzY3JcZlIgaXMgbm9ybWFsbHkgdGhlIGZpcnN0IFxmQmN1cnNlc1xmUiByb3V0aW5lIHRvIGNhbGwgd2hlbgoraW5pdGlhbGl6aW5nIGEgcHJvZ3JhbS4gIEEgZmV3IHNwZWNpYWwgcm91dGluZXMgc29tZXRpbWVzIG5lZWQgdG8gYmUKK2NhbGxlZCBiZWZvcmUgaXQ7IHRoZXNlIGFyZSBcZkJzbGtfaW5pdFxmUiwgXGZCZmlsdGVyXGZSLCBcZkJyaXBvZmZsaW5lXGZSLAorXGZCdXNlX2VudlxmUi4gIEZvciBtdWx0aXBsZS10ZXJtaW5hbCBhcHBsaWNhdGlvbnMsIFxmQm5ld3Rlcm1cZlIgbWF5IGJlCitjYWxsZWQgYmVmb3JlIFxmQmluaXRzY3JcZlIuCisuUFAKK1RoZSBpbml0c2NyIGNvZGUgZGV0ZXJtaW5lcyB0aGUgdGVybWluYWwgdHlwZSBhbmQgaW5pdGlhbGl6ZXMgYWxsIFxmQmN1cnNlc1xmUgorZGF0YSBzdHJ1Y3R1cmVzLiAgXGZCaW5pdHNjclxmUiBhbHNvIGNhdXNlcyB0aGUgZmlyc3QgY2FsbCB0byBcZkJyZWZyZXNoXGZSIHRvCitjbGVhciB0aGUgc2NyZWVuLiAgSWYgZXJyb3JzIG9jY3VyLCBcZkJpbml0c2NyXGZSIHdyaXRlcyBhbiBhcHByb3ByaWF0ZSBlcnJvcgorbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgZXhpdHM7IG90aGVyd2lzZSwgYSBwb2ludGVyIGlzIHJldHVybmVkIHRvCitcZkJzdGRzY3JcZlIuCisuUFAKK0EgcHJvZ3JhbSB0aGF0IG91dHB1dHMgdG8gbW9yZSB0aGFuIG9uZSB0ZXJtaW5hbCBzaG91bGQgdXNlIHRoZSBcZkJuZXd0ZXJtXGZSCityb3V0aW5lIGZvciBlYWNoIHRlcm1pbmFsIGluc3RlYWQgb2YgXGZCaW5pdHNjclxmUi4gIEEgcHJvZ3JhbSB0aGF0IG5lZWRzIHRvCitpbnNwZWN0IGNhcGFiaWxpdGllcywgc28gaXQgY2FuIGNvbnRpbnVlIHRvIHJ1biBpbiBhIGxpbmUtb3JpZW50ZWQgbW9kZSBpZiB0aGUKK3Rlcm1pbmFsIGNhbm5vdCBzdXBwb3J0IGEgc2NyZWVuLW9yaWVudGVkIHByb2dyYW0sIHdvdWxkIGFsc28gdXNlCitcZkJuZXd0ZXJtXGZSLiAgVGhlIHJvdXRpbmUgXGZCbmV3dGVybVxmUiBzaG91bGQgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2gKK3Rlcm1pbmFsLiAgSXQgcmV0dXJucyBhIHZhcmlhYmxlIG9mIHR5cGUgXGZCU0NSRUVOICpcZlIgd2hpY2ggc2hvdWxkIGJlIHNhdmVkCithcyBhIHJlZmVyZW5jZSB0byB0aGF0IHRlcm1pbmFsLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIFxmSXR5cGVcZlIgb2YgdGhlCit0ZXJtaW5hbCB0byBiZSB1c2VkIGluIHBsYWNlIG9mIFxmQiRURVJNXGZSLCBhIGZpbGUgcG9pbnRlciBmb3Igb3V0cHV0IHRvIHRoZQordGVybWluYWwsIGFuZCBhbm90aGVyIGZpbGUgcG9pbnRlciBmb3IgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwgKGlmIFxmSXR5cGVcZlIKK2lzIFxmQk5VTExcZlIsIFxmQiRURVJNXGZSIHdpbGwgYmUgdXNlZCkuICBUaGUgcHJvZ3JhbSBtdXN0IGFsc28gY2FsbAorXGZCZW5kd2luXGZSIGZvciBlYWNoIHRlcm1pbmFsIGJlaW5nIHVzZWQgYmVmb3JlIGV4aXRpbmcgZnJvbSBcZkJjdXJzZXNcZlIuCitJZiBcZkJuZXd0ZXJtXGZSIGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBmb3IgdGhlIHNhbWUgdGVybWluYWwsIHRoZSBmaXJzdAordGVybWluYWwgcmVmZXJyZWQgdG8gbXVzdCBiZSB0aGUgbGFzdCBvbmUgZm9yIHdoaWNoIFxmQmVuZHdpblxmUiBpcyBjYWxsZWQuCisuUFAKK0EgcHJvZ3JhbSBzaG91bGQgYWx3YXlzIGNhbGwgXGZCZW5kd2luXGZSIGJlZm9yZSBleGl0aW5nIG9yIGVzY2FwaW5nIGZyb20KK1xmQmN1cnNlc1xmUiBtb2RlIHRlbXBvcmFyaWx5LiAgVGhpcyByb3V0aW5lIHJlc3RvcmVzIHR0eSBtb2RlcywgbW92ZXMgdGhlCitjdXJzb3IgdG8gdGhlIGxvd2VyIGxlZnQtaGFuZCBjb3JuZXIgb2YgdGhlIHNjcmVlbiBhbmQgcmVzZXRzIHRoZSB0ZXJtaW5hbCBpbnRvCit0aGUgcHJvcGVyIG5vbi12aXN1YWwgbW9kZS4gIENhbGxpbmcgXGZCcmVmcmVzaFxmUiBvciBcZkJkb3VwZGF0ZVxmUiBhZnRlciBhCit0ZW1wb3JhcnkgZXNjYXBlIGNhdXNlcyB0aGUgcHJvZ3JhbSB0byByZXN1bWUgdmlzdWFsIG1vZGUuCisuUFAKK1RoZSBcZkJpc2VuZHdpblxmUiByb3V0aW5lIHJldHVybnMgXGZCVFJVRVxmUiBpZiBcZkJlbmR3aW5cZlIgaGFzIGJlZW4KK2NhbGxlZCB3aXRob3V0IGFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIFxmQndyZWZyZXNoXGZSLCBhbmQgXGZCRkFMU0VcZlIKK290aGVyd2lzZS4KKy5QUAorVGhlIFxmQnNldF90ZXJtXGZSIHJvdXRpbmUgaXMgdXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQKK3Rlcm1pbmFscy4gIFRoZSBzY3JlZW4gcmVmZXJlbmNlIFxmQm5ld1xmUiBiZWNvbWVzIHRoZSBuZXcgY3VycmVudAordGVybWluYWwuICBUaGUgcHJldmlvdXMgdGVybWluYWwgaXMgcmV0dXJuZWQgYnkgdGhlIHJvdXRpbmUuICBUaGlzIGlzCit0aGUgb25seSByb3V0aW5lIHdoaWNoIG1hbmlwdWxhdGVzIFxmQlNDUkVFTlxmUiBwb2ludGVyczsgYWxsIG90aGVyCityb3V0aW5lcyBhZmZlY3Qgb25seSB0aGUgY3VycmVudCB0ZXJtaW5hbC4KKy5QUAorVGhlIFxmQmRlbHNjcmVlblxmUiByb3V0aW5lIGZyZWVzIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZQorXGZCU0NSRUVOXGZSIGRhdGEgc3RydWN0dXJlLiAgVGhlIFxmQmVuZHdpblxmUiByb3V0aW5lIGRvZXMgbm90IGRvCit0aGlzLCBzbyBcZkJkZWxzY3JlZW5cZlIgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBcZkJlbmR3aW5cZlIgaWYgYQorcGFydGljdWxhciBcZkJTQ1JFRU5cZlIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQmVuZHdpblxmUiByZXR1cm5zIHRoZSBpbnRlZ2VyIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSCit1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKy5QUAorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgYWx3YXlzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorXGZCZW5kd2luXGZQIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJpbml0c2NyXGZSIGFuZCBcZkJuZXd0ZXJtXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LiAgSXQKK3NwZWNpZmllcyB0aGF0IHBvcnRhYmxlIGFwcGxpY2F0aW9ucyBtdXN0IG5vdCBjYWxsIFxmQmluaXRzY3JcZlIgbW9yZSB0aGFuCitvbmNlLgorLlBQCitPbGQgdmVyc2lvbnMgb2YgY3Vyc2VzLCBlLmcuLCBCU0QgNC40LCBtYXkgaGF2ZSByZXR1cm5lZCBhIG51bGwgcG9pbnRlcgorZnJvbSBcZkJpbml0c2NyXGZSIHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQsIHJhdGhlciB0aGFuIGV4aXRpbmcuCitJdCBpcyBzYWZlIGJ1dCByZWR1bmRhbnQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBcZkJpbml0c2NyXGZSCitpbiBYU0kgQ3Vyc2VzLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX2tlcm5lbFxmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCksCitcZkJjdXJzX3Nsa1xmUigzWCksIFxmQmN1cnNfdXRpbFxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5vcHRzLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5vcHRzLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWExN2IKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19pbm9wdHMuM3gKQEAgLTAsMCArMSwyNDIgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbm9wdHMuM3gsdiAxLjEzIDIwMDUvMDUvMTUgMTY6MTg6MDcgdG9tIEV4cCAkCisuVEggY3Vyc19pbm9wdHMgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJjYnJlYWtcZlIsCitcZkJub2NicmVha1xmUiwKK1xmQmVjaG9cZlIsCitcZkJub2VjaG9cZlIsCitcZkJoYWxmZGVsYXlcZlIsCitcZkJpbnRyZmx1c2hcZlIsCitcZkJrZXlwYWRcZlIsCitcZkJtZXRhXGZSLAorXGZCbm9kZWxheVxmUiwKK1xmQm5vdGltZW91dFxmUiwKK1xmQnJhd1xmUiwKK1xmQm5vcmF3XGZSLAorXGZCbm9xaWZsdXNoXGZSLAorXGZCcWlmbHVzaFxmUiwKK1xmQnRpbWVvdXRcZlIsCitcZkJ3dGltZW91dFxmUiwKK1xmQnR5cGVhaGVhZFxmUiAtIFxmQmN1cnNlc1xmUiBpbnB1dCBvcHRpb25zCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuUFAKK1xmQmludCBjYnJlYWsodm9pZCk7XGZSCisuYnIKK1xmQmludCBub2NicmVhayh2b2lkKTtcZlIKKy5icgorXGZCaW50IGVjaG8odm9pZCk7XGZSCisuYnIKK1xmQmludCBub2VjaG8odm9pZCk7XGZSCisuYnIKK1xmQmludCBoYWxmZGVsYXkoaW50IHRlbnRocyk7XGZSCisuYnIKK1xmQmludCBpbnRyZmx1c2goV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJpbnQga2V5cGFkKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCaW50IG1ldGEoV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJpbnQgbm9kZWxheShXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQmludCByYXcodm9pZCk7XGZSCisuYnIKK1xmQmludCBub3Jhdyh2b2lkKTtcZlIKKy5icgorXGZCdm9pZCBub3FpZmx1c2godm9pZCk7XGZSCisuYnIKK1xmQnZvaWQgcWlmbHVzaCh2b2lkKTtcZlIKKy5icgorXGZCaW50IG5vdGltZW91dChXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQnZvaWQgdGltZW91dChpbnQgZGVsYXkpO1xmUgorLmJyCitcZkJ2b2lkIHd0aW1lb3V0KFdJTkRPVyAqd2luLCBpbnQgZGVsYXkpO1xmUgorLmJyCitcZkJpbnQgdHlwZWFoZWFkKGludCBmZCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorTm9ybWFsbHksIHRoZSB0dHkgZHJpdmVyIGJ1ZmZlcnMgdHlwZWQgY2hhcmFjdGVycyB1bnRpbCBhIG5ld2xpbmUgb3IgY2FycmlhZ2UKK3JldHVybiBpcyB0eXBlZC4gIFRoZSBcZkJjYnJlYWtcZlIgcm91dGluZSBkaXNhYmxlcyBsaW5lIGJ1ZmZlcmluZyBhbmQKK2VyYXNlL2tpbGwgY2hhcmFjdGVyLXByb2Nlc3NpbmcgKGludGVycnVwdCBhbmQgZmxvdyBjb250cm9sIGNoYXJhY3RlcnMgYXJlCit1bmFmZmVjdGVkKSwgbWFraW5nIGNoYXJhY3RlcnMgdHlwZWQgYnkgdGhlIHVzZXIgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHRvIHRoZQorcHJvZ3JhbS4gIFRoZSBcZkJub2NicmVha1xmUiByb3V0aW5lIHJldHVybnMgdGhlIHRlcm1pbmFsIHRvIG5vcm1hbCAoY29va2VkKQorbW9kZS4KKy5QUAorSW5pdGlhbGx5IHRoZSB0ZXJtaW5hbCBtYXkgb3IgbWF5IG5vdCBiZSBpbiBcZkJjYnJlYWtcZlIgbW9kZSwgYXMgdGhlIG1vZGUgaXMKK2luaGVyaXRlZDsgdGhlcmVmb3JlLCBhIHByb2dyYW0gc2hvdWxkIGNhbGwgXGZCY2JyZWFrXGZSIG9yIFxmQm5vY2JyZWFrXGZSCitleHBsaWNpdGx5LiAgTW9zdCBpbnRlcmFjdGl2ZSBwcm9ncmFtcyB1c2luZyBcZkJjdXJzZXNcZlIgc2V0IHRoZSBcZkJjYnJlYWtcZlIKK21vZGUuICBOb3RlIHRoYXQgXGZCY2JyZWFrXGZSIG92ZXJyaWRlcyBcZkJyYXdcZlIuCitbU2VlIFxmQmN1cnNfZ2V0Y2hcZlIoM1gpIGZvciBhCitkaXNjdXNzaW9uIG9mIGhvdyB0aGVzZSByb3V0aW5lcyBpbnRlcmFjdCB3aXRoIFxmQmVjaG9cZlIgYW5kIFxmQm5vZWNob1xmUi5dCisuUFAKK1RoZSBcZkJlY2hvXGZSIGFuZCBcZkJub2VjaG9cZlIgcm91dGluZXMgY29udHJvbCB3aGV0aGVyIGNoYXJhY3RlcnMgdHlwZWQgYnkKK3RoZSB1c2VyIGFyZSBlY2hvZWQgYnkgXGZCZ2V0Y2hcZlIgYXMgdGhleSBhcmUgdHlwZWQuICBFY2hvaW5nIGJ5IHRoZSB0dHkKK2RyaXZlciBpcyBhbHdheXMgZGlzYWJsZWQsIGJ1dCBpbml0aWFsbHkgXGZCZ2V0Y2hcZlIgaXMgaW4gZWNobyBtb2RlLCBzbworY2hhcmFjdGVycyB0eXBlZCBhcmUgZWNob2VkLiAgQXV0aG9ycyBvZiBtb3N0IGludGVyYWN0aXZlIHByb2dyYW1zIHByZWZlciB0byBkbwordGhlaXIgb3duIGVjaG9pbmcgaW4gYSBjb250cm9sbGVkIGFyZWEgb2YgdGhlIHNjcmVlbiwgb3Igbm90IHRvIGVjaG8gYXQgYWxsLCBzbwordGhleSBkaXNhYmxlIGVjaG9pbmcgYnkgY2FsbGluZyBcZkJub2VjaG9cZlIuCitbU2VlIFxmQmN1cnNfZ2V0Y2hcZlIoM1gpIGZvciBhCitkaXNjdXNzaW9uIG9mIGhvdyB0aGVzZSByb3V0aW5lcyBpbnRlcmFjdCB3aXRoIFxmQmNicmVha1xmUiBhbmQKK1xmQm5vY2JyZWFrXGZSLl0KKy5QUAorVGhlIFxmQmhhbGZkZWxheVxmUiByb3V0aW5lIGlzIHVzZWQgZm9yIGhhbGYtZGVsYXkgbW9kZSwgd2hpY2ggaXMgc2ltaWxhciB0bworXGZCY2JyZWFrXGZSIG1vZGUgaW4gdGhhdCBjaGFyYWN0ZXJzIHR5cGVkIGJ5IHRoZSB1c2VyIGFyZSBpbW1lZGlhdGVseQorYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAgSG93ZXZlciwgYWZ0ZXIgYmxvY2tpbmcgZm9yIFxmSXRlbnRoc1xmUiB0ZW50aHMgb2YKK3NlY29uZHMsIEVSUiBpcyByZXR1cm5lZCBpZiBub3RoaW5nIGhhcyBiZWVuIHR5cGVkLiAgVGhlIHZhbHVlIG9mIFxmQnRlbnRoc1xmUgorbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDI1NS4gIFVzZSBcZkJub2NicmVha1xmUiB0byBsZWF2ZSBoYWxmLWRlbGF5Cittb2RlLgorLlBQCitJZiB0aGUgXGZCaW50cmZsdXNoXGZSIG9wdGlvbiBpcyBlbmFibGVkLCAoXGZJYmZcZlIgaXMgXGZCVFJVRVxmUiksIHdoZW4gYW4KK2ludGVycnVwdCBrZXkgaXMgcHJlc3NlZCBvbiB0aGUga2V5Ym9hcmQgKGludGVycnVwdCwgYnJlYWssIHF1aXQpIGFsbCBvdXRwdXQgaW4KK3RoZSB0dHkgZHJpdmVyIHF1ZXVlIHdpbGwgYmUgZmx1c2hlZCwgZ2l2aW5nIHRoZSBlZmZlY3Qgb2YgZmFzdGVyIHJlc3BvbnNlIHRvCit0aGUgaW50ZXJydXB0LCBidXQgY2F1c2luZyBcZkJjdXJzZXNcZlIgdG8gaGF2ZSB0aGUgd3JvbmcgaWRlYSBvZiB3aGF0IGlzIG9uCit0aGUgc2NyZWVuLiAgRGlzYWJsaW5nIChcZkliZlxmUiBpcyBcZkJGQUxTRVxmUiksIHRoZSBvcHRpb24gcHJldmVudHMgdGhlCitmbHVzaC4gIFRoZSBkZWZhdWx0IGZvciB0aGUgb3B0aW9uIGlzIGluaGVyaXRlZCBmcm9tIHRoZSB0dHkgZHJpdmVyIHNldHRpbmdzLgorVGhlIHdpbmRvdyBhcmd1bWVudCBpcyBpZ25vcmVkLgorLlBQCitUaGUgXGZCa2V5cGFkXGZSIG9wdGlvbiBlbmFibGVzIHRoZSBrZXlwYWQgb2YgdGhlIHVzZXIncyB0ZXJtaW5hbC4gIElmCitlbmFibGVkIChcZkliZlxmUiBpcyBcZkJUUlVFXGZSKSwgdGhlIHVzZXIgY2FuIHByZXNzIGEgZnVuY3Rpb24ga2V5Cisoc3VjaCBhcyBhbiBhcnJvdyBrZXkpIGFuZCBcZkJ3Z2V0Y2hcZlIgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZQorcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBrZXksIGFzIGluIFxmQktFWV9MRUZUXGZSLiAgSWYgZGlzYWJsZWQKKyhcZkliZlxmUiBpcyBcZkJGQUxTRVxmUiksIFxmQmN1cnNlc1xmUiBkb2VzIG5vdCB0cmVhdCBmdW5jdGlvbiBrZXlzCitzcGVjaWFsbHkgYW5kIHRoZSBwcm9ncmFtIGhhcyB0byBpbnRlcnByZXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMKK2l0c2VsZi4gIElmIHRoZSBrZXlwYWQgaW4gdGhlIHRlcm1pbmFsIGNhbiBiZSB0dXJuZWQgb24gKG1hZGUgdG8KK3RyYW5zbWl0KSBhbmQgb2ZmIChtYWRlIHRvIHdvcmsgbG9jYWxseSksIHR1cm5pbmcgb24gdGhpcyBvcHRpb24KK2NhdXNlcyB0aGUgdGVybWluYWwga2V5cGFkIHRvIGJlIHR1cm5lZCBvbiB3aGVuIFxmQndnZXRjaFxmUiBpcworY2FsbGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGtleXBhZCBpcyBmYWxzZS4KKy5QUAorSW5pdGlhbGx5LCB3aGV0aGVyIHRoZSB0ZXJtaW5hbCByZXR1cm5zIDcgb3IgOCBzaWduaWZpY2FudCBiaXRzIG9uCitpbnB1dCBkZXBlbmRzIG9uIHRoZSBjb250cm9sIG1vZGUgb2YgdGhlIHR0eSBkcml2ZXIgW3NlZSB0ZXJtaW8oNyldLgorVG8gZm9yY2UgOCBiaXRzIHRvIGJlIHJldHVybmVkLCBpbnZva2UgXGZCbWV0YVxmUihcZkl3aW5cZlIsCitcZkJUUlVFXGZSKTsgdGhpcyBpcyBlcXVpdmFsZW50LCB1bmRlciBQT1NJWCwgdG8gc2V0dGluZyB0aGUgQ1M4IGZsYWcKK29uIHRoZSB0ZXJtaW5hbC4gIFRvIGZvcmNlIDcgYml0cyB0byBiZSByZXR1cm5lZCwgaW52b2tlCitcZkJtZXRhXGZSKFxmSXdpblxmUiwgXGZCRkFMU0VcZlIpOyB0aGlzIGlzIGVxdWl2YWxlbnQsIHVuZGVyIFBPU0lYLAordG8gc2V0dGluZyB0aGUgQ1M3IGZsYWcgb24gdGhlIHRlcm1pbmFsLiAgVGhlIHdpbmRvdyBhcmd1bWVudCwKK1xmSXdpblxmUiwgaXMgYWx3YXlzIGlnbm9yZWQuICBJZiB0aGUgdGVybWluZm8gY2FwYWJpbGl0aWVzIFxmQnNtbVxmUgorKG1ldGFfb24pIGFuZCBcZkJybW1cZlIgKG1ldGFfb2ZmKSBhcmUgZGVmaW5lZCBmb3IgdGhlIHRlcm1pbmFsLAorXGZCc21tXGZSIGlzIHNlbnQgdG8gdGhlIHRlcm1pbmFsIHdoZW4gXGZCbWV0YVxmUihcZkl3aW5cZlIsCitcZkJUUlVFXGZSKSBpcyBjYWxsZWQgYW5kIFxmQnJtbVxmUiBpcyBzZW50IHdoZW4gXGZCbWV0YVxmUihcZkl3aW5cZlIsCitcZkJGQUxTRVxmUikgaXMgY2FsbGVkLgorLlBQCitUaGUgXGZCbm9kZWxheVxmUiBvcHRpb24gY2F1c2VzIFxmQmdldGNoXGZSIHRvIGJlIGEgbm9uLWJsb2NraW5nIGNhbGwuCitJZiBubyBpbnB1dCBpcyByZWFkeSwgXGZCZ2V0Y2hcZlIgcmV0dXJucyBcZkJFUlJcZlIuICBJZiBkaXNhYmxlZAorKFxmSWJmXGZSIGlzIFxmQkZBTFNFXGZSKSwgXGZCZ2V0Y2hcZlIgd2FpdHMgdW50aWwgYSBrZXkgaXMgcHJlc3NlZC4KKy5QUAorV2hpbGUgaW50ZXJwcmV0aW5nIGFuIGlucHV0IGVzY2FwZSBzZXF1ZW5jZSwgXGZCd2dldGNoXGZSIHNldHMgYSB0aW1lcgord2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLiAgSWYgXGZCbm90aW1lb3V0KFxmUlxmSXdpblxmUiwKK1xmQlRSVUVcZlIpIGlzIGNhbGxlZCwgdGhlbiBcZkJ3Z2V0Y2hcZlIgZG9lcyBub3Qgc2V0IGEgdGltZXIuICBUaGUKK3B1cnBvc2Ugb2YgdGhlIHRpbWVvdXQgaXMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHNlcXVlbmNlcyByZWNlaXZlZAorZnJvbSBhIGZ1bmN0aW9uIGtleSBhbmQgdGhvc2UgdHlwZWQgYnkgYSB1c2VyLgorLlBQCitUaGUgXGZCcmF3XGZSIGFuZCBcZkJub3Jhd1xmUiByb3V0aW5lcyBwbGFjZSB0aGUgdGVybWluYWwgaW50byBvciBvdXQgb2YgcmF3Cittb2RlLiAgUmF3IG1vZGUgaXMgc2ltaWxhciB0byBcZkJjYnJlYWtcZlIgbW9kZSwgaW4gdGhhdCBjaGFyYWN0ZXJzIHR5cGVkIGFyZQoraW1tZWRpYXRlbHkgcGFzc2VkIHRocm91Z2ggdG8gdGhlIHVzZXIgcHJvZ3JhbS4gIFRoZSBkaWZmZXJlbmNlcyBhcmUgdGhhdCBpbgorcmF3IG1vZGUsIHRoZSBpbnRlcnJ1cHQsIHF1aXQsIHN1c3BlbmQsIGFuZCBmbG93IGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsCitwYXNzZWQgdGhyb3VnaCB1bmludGVycHJldGVkLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBzaWduYWwuICBUaGUgYmVoYXZpb3Igb2YKK3RoZSBCUkVBSyBrZXkgZGVwZW5kcyBvbiBvdGhlciBiaXRzIGluIHRoZSB0dHkgZHJpdmVyIHRoYXQgYXJlIG5vdCBzZXQgYnkKK1xmQmN1cnNlc1xmUi4KKy5QUAorV2hlbiB0aGUgXGZCbm9xaWZsdXNoXGZSIHJvdXRpbmUgaXMgdXNlZCwgbm9ybWFsIGZsdXNoIG9mIGlucHV0IGFuZAorb3V0cHV0IHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIFxmQklOVFJcZlIsIFxmQlFVSVRcZlIgYW5kCitcZkJTVVNQXGZSIGNoYXJhY3RlcnMgd2lsbCBub3QgYmUgZG9uZSBbc2VlIHRlcm1pbyg3KV0uICBXaGVuCitcZkJxaWZsdXNoXGZSIGlzIGNhbGxlZCwgdGhlIHF1ZXVlcyB3aWxsIGJlIGZsdXNoZWQgd2hlbiB0aGVzZSBjb250cm9sCitjaGFyYWN0ZXJzIGFyZSByZWFkLiAgWW91IG1heSB3YW50IHRvIGNhbGwgXGZCbm9xaWZsdXNoKClcZlIgaW4gYSBzaWduYWwKK2hhbmRsZXIgaWYgeW91IHdhbnQgb3V0cHV0IHRvIGNvbnRpbnVlIGFzIHRob3VnaCB0aGUgaW50ZXJydXB0CitoYWQgbm90IG9jY3VycmVkLCBhZnRlciB0aGUgaGFuZGxlciBleGl0cy4KKy5QUAorVGhlIFxmQnRpbWVvdXRcZlIgYW5kIFxmQnd0aW1lb3V0XGZSIHJvdXRpbmVzIHNldCBibG9ja2luZyBvcgorbm9uLWJsb2NraW5nIHJlYWQgZm9yIGEgZ2l2ZW4gd2luZG93LiAgSWYgXGZJZGVsYXlcZlIgaXMgbmVnYXRpdmUsCitibG9ja2luZyByZWFkIGlzIHVzZWQgKGkuZS4sIHdhaXRzIGluZGVmaW5pdGVseSBmb3IKK2lucHV0KS4gIElmIFxmSWRlbGF5XGZSIGlzIHplcm8sIHRoZW4gbm9uLWJsb2NraW5nIHJlYWQgaXMgdXNlZAorKGkuZS4sIHJlYWQgcmV0dXJucyBcZkJFUlJcZlIgaWYgbm8gaW5wdXQgaXMgd2FpdGluZykuICBJZgorXGZJZGVsYXlcZlIgaXMgcG9zaXRpdmUsIHRoZW4gcmVhZCBibG9ja3MgZm9yIFxmSWRlbGF5XGZSCittaWxsaXNlY29uZHMsIGFuZCByZXR1cm5zIFxmQkVSUlxmUiBpZiB0aGVyZSBpcyBzdGlsbCBubyBpbnB1dC4KK0hlbmNlLCB0aGVzZSByb3V0aW5lcyBwcm92aWRlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgXGZCbm9kZWxheVxmUiwKK3BsdXMgdGhlIGFkZGl0aW9uYWwgY2FwYWJpbGl0eSBvZiBiZWluZyBhYmxlIHRvIGJsb2NrIGZvciBvbmx5CitcZklkZWxheVxmUiBtaWxsaXNlY29uZHMgKHdoZXJlIFxmSWRlbGF5XGZSIGlzIHBvc2l0aXZlKS4KKy5QUAorVGhlIFxmQmN1cnNlc1xmUiBsaWJyYXJ5IGRvZXMgYGBsaW5lLWJyZWFrb3V0IG9wdGltaXphdGlvbicnIGJ5IGxvb2tpbmcgZm9yCit0eXBlYWhlYWQgcGVyaW9kaWNhbGx5IHdoaWxlIHVwZGF0aW5nIHRoZSBzY3JlZW4uICBJZiBpbnB1dCBpcyBmb3VuZCwKK2FuZCBpdCBpcyBjb21pbmcgZnJvbSBhIHR0eSwgdGhlIGN1cnJlbnQgdXBkYXRlIGlzIHBvc3Rwb25lZCB1bnRpbAorXGZCcmVmcmVzaFxmUiBvciBcZkJkb3VwZGF0ZVxmUiBpcyBjYWxsZWQgYWdhaW4uICBUaGlzIGFsbG93cyBmYXN0ZXIKK3Jlc3BvbnNlIHRvIGNvbW1hbmRzIHR5cGVkIGluIGFkdmFuY2UuICBOb3JtYWxseSwgdGhlIGlucHV0IEZJTEUKK3BvaW50ZXIgcGFzc2VkIHRvIFxmQm5ld3Rlcm1cZlIsIG9yIFxmQnN0ZGluXGZSIGluIHRoZSBjYXNlIHRoYXQKK1xmQmluaXRzY3JcZlIgd2FzIHVzZWQsIHdpbGwgYmUgdXNlZCB0byBkbyB0aGlzIHR5cGVhaGVhZCBjaGVja2luZy4KK1RoZSBcZkJ0eXBlYWhlYWRcZlIgcm91dGluZSBzcGVjaWZpZXMgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yCitcZklmZFxmUiBpcyB0byBiZSB1c2VkIHRvIGNoZWNrIGZvciB0eXBlYWhlYWQgaW5zdGVhZC4gIElmIFxmSWZkXGZSIGlzCistMSwgdGhlbiBubyB0eXBlYWhlYWQgY2hlY2tpbmcgaXMgZG9uZS4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBPSyAoU1ZyNAorc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sCitmdW5jdGlvbnMgd2l0aCBhIHdpbmRvdyBwYXJhbWV0ZXIgd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgaXQgaXMgbnVsbC4KK0FueSBmdW5jdGlvbiB3aWxsIGFsc28gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0ZXJtaW5hbCB3YXMgbm90IGluaXRpYWxpemVkLgorQWxzbywKKy5SUworLlRQIDUKK1xmQmhhbGZkZWxheVxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgaXRzIHBhcmFtZXRlciBpcyBvdXRzaWRlIHRoZSByYW5nZSAxLi4yNTUuCisuUkUKKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCisuUFAKK1RoZSBuY3Vyc2VzIGxpYnJhcnkgb2JleXMgdGhlIFhQRzQgc3RhbmRhcmQgYW5kIHRoZSBoaXN0b3JpY2FsIHByYWN0aWNlIG9mIHRoZQorQVQmVCBjdXJzZXMgaW1wbGVtZW50YXRpb25zLCBpbiB0aGF0IHRoZSBlY2hvIGJpdCBpcyBjbGVhcmVkIHdoZW4gY3Vyc2VzCitpbml0aWFsaXplcyB0aGUgdGVybWluYWwgc3RhdGUuICBCU0QgY3Vyc2VzIGRpZmZlcmVkIGZyb20gdGhpcyBzbGlnaHRseTsgaXQKK2xlZnQgdGhlIGVjaG8gYml0IG9uIGF0IGluaXRpYWxpemF0aW9uLCBidXQgdGhlIEJTRCBcZkJyYXdcZlIgY2FsbCB0dXJuZWQgaXQKK29mZiBhcyBhIHNpZGUtZWZmZWN0LiAgRm9yIGJlc3QgcG9ydGFiaWxpdHksIHNldCBlY2hvIG9yIG5vZWNobyBleHBsaWNpdGx5CitqdXN0IGFmdGVyIGluaXRpYWxpemF0aW9uLCBldmVuIGlmIHlvdXIgcHJvZ3JhbSByZW1haW5zIGluIGNvb2tlZCBtb2RlLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCZWNob1xmUiwgXGZCbm9lY2hvXGZSLCBcZkJoYWxmZGVsYXlcZlIsIFxmQmludHJmbHVzaFxmUiwKK1xmQm1ldGFcZlIsIFxmQm5vZGVsYXlcZlIsIFxmQm5vdGltZW91dFxmUiwgXGZCbm9xaWZsdXNoXGZSLAorXGZCcWlmbHVzaFxmUiwgXGZCdGltZW91dFxmUiwgYW5kIFxmQnd0aW1lb3V0XGZSIG1heSBiZSBtYWNyb3MuCisuUFAKK1RoZSBcZkJub3Jhd1xmUiBhbmQgXGZCbm9jYnJlYWtcZlIgY2FsbHMgZm9sbG93IGhpc3RvcmljYWwgcHJhY3RpY2UgaW4gdGhhdAordGhleSBhdHRlbXB0IHRvIHJlc3RvcmUgdG8gbm9ybWFsIChgY29va2VkJykgbW9kZSBmcm9tIHJhdyBhbmQgY2JyZWFrIG1vZGVzCityZXNwZWN0aXZlbHkuICBNaXhpbmcgcmF3L25vcmF3IGFuZCBjYnJlYWsvbm9jYnJlYWsgY2FsbHMgbGVhZHMgdG8gdHR5IGRyaXZlcgorY29udHJvbCBzdGF0ZXMgdGhhdCBhcmUgaGFyZCB0byBwcmVkaWN0IG9yIHVuZGVyc3RhbmQ7IGl0IGlzIG5vdCByZWNvbW1lbmRlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19nZXRjaFxmUigzWCksIFxmQmN1cnNfaW5pdHNjclxmUigzWCksIFxmQnRlcm1pb1xmUig3KQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19pbnNfd2NoLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5zX3djaC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjhhOWEzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5zX3djaC4zeApAQCAtMCwwICsxLDY1IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5zX3djaC4zeCx2IDEuMyAyMDA2LzAyLzI1IDIxOjQyOjIyIHRvbSBFeHAgJAorLlRIIGN1cnNfaW5zX3djaCAzWCAiIgorLlNIIE5BTUUKK1xmQmluc193Y2hcZlIsCitcZkJtdmluc193Y2hcZlIsCitcZkJtdndpbnNfd2NoXGZSLAorXGZCd2luc193Y2hcZlIgXC0gaW5zZXJ0IGEgY29tcGxleCBjaGFyYWN0ZXIgYW5kIHJlbmRpdGlvbiBpbnRvIGEgd2luZG93CisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKy5zcAorXGZCaW50IGluc193Y2goY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdpbnNfd2NoKFdJTkRPVyAqXGZSXGZJd2luLCBjb25zdCBjY2hhcl90ICpcZlJcZkl3Y2hcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZpbnNfd2NoKGludCBcZlJcZkl5LCBpbnQgXGZSXGZJeCwgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2luc193Y2goV0lORE9XICpcZlJcZkl3aW4sIGludCBcZlJcZkl5LCBpbnQgXGZSXGZJeCwgY29uc3QgY2NoYXJfdCAqXGZSXGZJd2NoXGZSXGZCKTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMsIGluc2VydCB0aGUgY29tcGxleCBjaGFyYWN0ZXIgXGZJd2NoXGZSIHdpdGggcmVuZGl0aW9uCitiZWZvcmUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgorQWxsIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IgYXJlIG1vdmVkIG9uZSBzcGFjZSB0byB0aGUgcmlnaHQsCit3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlciBvbiB0aGUgbGluZSBiZWluZyBsb3N0LgorVGhlIGluc2VydGlvbiBvcGVyYXRpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBjdXJzb3IgcG9zaXRpb24uCisuU0ggUkVUVVJOIFZBTFVFCitJZiBzdWNjZXNzZnVsLCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIE9LLgorSWYgbm90LCB0aGV5IHJldHVybiBFUlIuCisuU0ggRVJST1JTCitObyBlcnJvcnMgYXJlIGRlZmluZWQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2luc2NoXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5zX3dzdHIuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19pbnNfd3N0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzE1M2M0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5zX3dzdHIuM3gKQEAgLTAsMCArMSwxMDggQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMiwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbnNfd3N0ci4zeCx2IDEuNCAyMDA1LzA1LzE1IDE3OjAyOjU0IHRvbSBFeHAgJAorLlRIIGN1cnNfaW5zX3dzdHIgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJpbnNfd3N0clxmUiwKK1xmQmluc19ud3N0clxmUiwKK1xmQndpbnNfd3N0clxmUiwKK1xmQndpbnNfbndzdHJcZlIsCitcZkJtdmluc193c3RyXGZSLAorXGZCbXZpbnNfbndzdHJcZlIsCitcZkJtdndpbnNfd3N0clxmUiwKK1xmQm12d2luc19ud3N0clxmUiBcLSBpbnNlcnQgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgaW50byBhIGN1cnNlcyB3aW5kb3cKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKKy5uZgorXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgaW5zX3dzdHIoY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0cik7XGZSCisuYnIKK1xmQmludCBpbnNfbndzdHIoY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2luc193c3RyKFdJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCBjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHdpbnNfbndzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGNvbnN0IHdjaGFyX3QgKlxmUlxmSXdzdHJcZlJcZkIsIGludCBcZlJcZkluXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW5zX3dzdHIoaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCBjb25zdCB3Y2hhcl90ICpcZlJcZkl3c3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12aW5zX253c3RyKGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5zX3dzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndpbnNfbndzdHIoV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgY29uc3Qgd2NoYXJfdCAqXGZSXGZJd3N0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIGluc2VydCBhIFxmQndjaGFyX3RcZlIgY2hhcmFjdGVyIHN0cmluZworKGFzIG1hbnkgY2hhcmFjdGVycyBhcyB3aWxsIGZpdCBvbiB0aGUgbGluZSkKK2JlZm9yZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IuCitBbGwgY2hhcmFjdGVycyB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciBhcmUgc2hpZnRlZCByaWdodCwKK3dpdGggdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSByaWdodG1vc3QgY2hhcmFjdGVycyBvbiB0aGUgbGluZSBiZWluZyBsb3N0LgorTm8gd3JhcHBpbmcgaXMgcGVyZm9ybWVkLgorVGhlIGN1cnNvciBwb3NpdGlvbiBkb2VzIG5vdCBjaGFuZ2UKKyhhZnRlciBtb3ZpbmcgdG8gXGZJeVxmUiwgXGZJeFxmUiwgaWYgc3BlY2lmaWVkKS4KK1RoZSBmb3VyIHJvdXRpbmVzIHdpdGggXGZJblxmUiBhcyB0aGUgbGFzdCBhcmd1bWVudAoraW5zZXJ0IGEgbGVhZGluZyBzdWJzdHJpbmcgb2YgYXQgbW9zdCBcZkluXGZSIFxmQndjaGFyX3RcZlIgY2hhcmFjdGVycy4KK0lmIFxmSW5cZlIgaXMgbGVzcyB0aGFuIDEsIHRoZSBlbnRpcmUgc3RyaW5nIGlzIGluc2VydGVkLgorLlBQCitJZiBhIGNoYXJhY3RlciBpbiBcZkl3c3RyXGZSIGlzIGEgdGFiLCBuZXdsaW5lLCBjYXJyaWFnZSByZXR1cm4gb3IKK2JhY2tzcGFjZSwgdGhlIGN1cnNvciBpcyBtb3ZlZCBhcHByb3ByaWF0ZWx5IHdpdGhpbiB0aGUgd2luZG93LgorQSBuZXdsaW5lIGFsc28gZG9lcyBhIFxmQmNscnRvZW9sXGZSIGJlZm9yZSBtb3ZpbmcuCitUYWJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGF0IGV2ZXJ5IGVpZ2h0aCBjb2x1bW4uCitJZiBhIGNoYXJhY3RlciBpbiBcZkl3c3RyXGZSIGlzIGFub3RoZXIgY29udHJvbCBjaGFyYWN0ZXIsCitpdCBpcyBkcmF3biBpbiB0aGUgXGZCXlxmUlxmSVhcZlIgbm90YXRpb24uCitDYWxsaW5nIFxmQndpbl93Y2hcZlIgYWZ0ZXIgYWRkaW5nIGEgY29udHJvbCBjaGFyYWN0ZXIKKyhhbmQgbW92aW5nIHRvIGl0LCBpZiBuZWNlc3NhcnkpCitkb2VzIG5vdCByZXR1cm4gdGhlIGNvbnRyb2wgY2hhcmFjdGVyLAorYnV0IGluc3RlYWQgcmV0dXJucyBhIGNoYXJhY3RlciBpbiB0aGUgXi1yZXByZXNlbnRhdGlvbgorb2YgdGhlIGNvbnRyb2wgY2hhcmFjdGVyLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIGJ1dCB3aW5zX253c3RyIG1heSBiZSBtYWNyb3MuCisuUFAKK0lmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyBpcyBhIG5vbnNwYWNpbmcgY2hhcmFjdGVyLCB0aGVzZQorZnVuY3Rpb25zIHdpbGwgZmFpbC4KK1hTSSBkb2VzIG5vdCBkZWZpbmUgd2hhdCB3aWxsIGhhcHBlbiBpZiBhIG5vbnNwYWNpbmcgY2hhcmFjdGVyIGZvbGxvd3MKK2EgY29udHJvbCBjaGFyYWN0ZXIuCisuU0ggUkVUVVJOIFZBTFVFUworVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gT0suCitPdGhlcndpc2UsIHRoZXkgcmV0dXJuIEVSUi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfaW5zc3RyXGZSKDNYKSwKK1xmQmN1cnNfaW5fd2NoXGZSKDNYKSwKK1xmQmN1cnNfaW5zX3djaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2luc2NoLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5zY2guM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhYjVhNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2luc2NoLjN4CkBAIC0wLDAgKzEsNzQgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbnNjaC4zeCx2IDEuMTAgMjAwNi8xMi8wMiAxNzowMTo1MCB0b20gRXhwICQKKy5USCBjdXJzX2luc2NoIDNYICIiCisuU0ggTkFNRQorXGZCaW5zY2hcZlIsCitcZkJ3aW5zY2hcZlIsCitcZkJtdmluc2NoXGZSLAorXGZCbXZ3aW5zY2hcZlIgLSBpbnNlcnQgYSBjaGFyYWN0ZXIgYmVmb3JlIGN1cnNvciBpbiBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgaW5zY2goY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IHdpbnNjaChXSU5ET1cgKndpbiwgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCaW50IG12aW5zY2goaW50IHksIGludCB4LCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5zY2goV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2h0eXBlIGNoKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBpbnNlcnQgdGhlIGNoYXJhY3RlciBcZkljaFxmUiBiZWZvcmUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUKK2N1cnNvci4gIEFsbCBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIGFyZSBtb3ZlZCBvbmUgc3BhY2UgdG8gdGhlCityaWdodCwgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHJpZ2h0bW9zdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUgYmVpbmcgbG9zdC4KK1RoZSBpbnNlcnRpb24gb3BlcmF0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgY3Vyc29yIHBvc2l0aW9uLgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIE9LIChTVnI0CitzcGVjaWZpZXMgb25seSAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbiwgdW5sZXNzIG90aGVyd2lzZSBub3RlZCBpbiB0aGUgcHJlY2VkaW5nIHJvdXRpbmUgZGVzY3JpcHRpb25zLgorLlNIIE5PVEVTCitUaGVzZSByb3V0aW5lcyBkbyBub3QgbmVjZXNzYXJpbHkgaW1wbHkgdXNlIG9mIGEgaGFyZHdhcmUgaW5zZXJ0IGNoYXJhY3RlcgorZmVhdHVyZS4KKy5QUAorTm90ZSB0aGF0IFxmQmluc2NoXGZSLCBcZkJtdmluc2NoXGZSLCBhbmQgXGZCbXZ3aW5zY2hcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkuCisuUFAKK0NvbXBhcmFibGUgZnVuY3Rpb25zIGluIHRoZSB3aWRlLWNoYXJhY3RlciAobmN1cnNlc3cpIGxpYnJhcnkgYXJlCitkZXNjcmliZWQgaW4KK1xmQmN1cnNfaW5zX3djaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2luc3N0ci4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2luc3N0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTM2ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5zc3RyLjN4CkBAIC0wLDAgKzEsMTAxIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfaW5zc3RyLjN4LHYgMS4xOCAyMDA2LzEyLzI0IDE0OjU5OjMwIHRvbSBFeHAgJAorLlRIIGN1cnNfaW5zc3RyIDNYICIiCisuU0ggTkFNRQorXGZCaW5zc3RyXGZSLAorXGZCaW5zbnN0clxmUiwKK1xmQndpbnNzdHJcZlIsCitcZkJ3aW5zbnN0clxmUiwKK1xmQm12aW5zc3RyXGZSLAorXGZCbXZpbnNuc3RyXGZSLAorXGZCbXZ3aW5zc3RyXGZSLAorXGZCbXZ3aW5zbnN0clxmUiAtIGluc2VydCBzdHJpbmcgYmVmb3JlIGN1cnNvciBpbiBhIFxmQmN1cnNlc1xmUiB3aW5kb3cKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLmJyCitcZkJpbnQgaW5zc3RyKGNvbnN0IGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCBpbnNuc3RyKGNvbnN0IGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd2luc3N0cihXSU5ET1cgKndpbiwgY29uc3QgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IHdpbnNuc3RyKFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICpzdHIsIGludCBuKTtcZlIKKy5icgorXGZCaW50IG12aW5zc3RyKGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IG12aW5zbnN0cihpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5zc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKnN0cik7XGZSCisuYnIKK1xmQmludCBtdndpbnNuc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIGluc2VydCBhIGNoYXJhY3RlciBzdHJpbmcKKyhhcyBtYW55IGNoYXJhY3RlcnMgYXMgd2lsbCBmaXQgb24gdGhlIGxpbmUpCitiZWZvcmUgdGhlIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgorQWxsIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IgYXJlIHNoaWZ0ZWQgcmlnaHQKK3dpdGggdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSByaWdodG1vc3QgY2hhcmFjdGVycyBvbiB0aGUgbGluZSBiZWluZyBsb3N0LgorVGhlIGN1cnNvciBwb3NpdGlvbiBkb2VzIG5vdCBjaGFuZ2UKKyhhZnRlciBtb3ZpbmcgdG8gXGZJeVxmUiwgXGZJeFxmUiwgaWYgc3BlY2lmaWVkKS4KK1RoZSBmdW5jdGlvbnMgd2l0aCBcZkluXGZSIGFzIHRoZSBsYXN0IGFyZ3VtZW50CitpbnNlcnQgYSBsZWFkaW5nIHN1YnN0cmluZyBvZiBhdCBtb3N0IFxmSW5cZlIgY2hhcmFjdGVycy4KK0lmIFxmSW5cZlI8PTAsIHRoZW4gdGhlIGVudGlyZSBzdHJpbmcgaXMgaW5zZXJ0ZWQuCisuUFAKK1NwZWNpYWwgY2hhcmFjdGVycyBhcmUgaGFuZGxlZCBhcyBpbiBcZkJhZGRjaFxmUC4KKy5TSCBSRVRVUk4gVkFMVUUKK0FsbCByb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBPSyAoU1ZyNAorc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sCitpZiB0aGUgd2luZG93IHBhcmFtZXRlciBpcyBudWxsIG9yIHRoZSBzdHIgcGFyYW1ldGVyIGlzIG51bGwsCithbiBlcnJvciBpcyByZXR1cm5lZC4KKy5TSCBOT1RFUworTm90ZSB0aGF0IGFsbCBidXQgXGZCd2luc25zdHJcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQsIHdoaWNoIGFkZHMKK2NvbnN0IHF1YWxpZmllcnMgdG8gdGhlIGFyZ3VtZW50cy4KKy5MUAorVGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24sIFZlcnNpb24gMiBzdGF0ZXMgdGhhdCAKK1xmQmluc25zdHJcZlAgYW5kIFxmQndpbnNuc3RyXGZQIHBlcmZvcm0gd3JhcHBpbmcuCitUaGlzIGlzIHByb2JhYmx5IGFuIGVycm9yLCBzaW5jZSBpdCBtYWtlcyB0aGlzIGdyb3VwIG9mIGZ1bmN0aW9ucyBpbmNvbnNpc3RlbnQuCitBbHNvLCBubyBpbXBsZW1lbnRhdGlvbiBvZiBjdXJzZXMgZG9jdW1lbnRzIHRoaXMgaW5jb25zaXN0ZW5jeS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfdXRpbFxmUigzWCksCitcZkJjdXJzX2NsZWFyXGZSKDNYKSwKK1xmQmN1cnNfaW5jaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2luc3RyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW5zdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzZGUyNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2luc3RyLjN4CkBAIC0wLDAgKzEsODkgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbnN0ci4zeCx2IDEuMTMgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwICQKKy5USCBjdXJzX2luc3RyIDNYICIiCisuU0ggTkFNRQorXGZCaW5zdHJcZlIsCitcZkJpbm5zdHJcZlIsCitcZkJ3aW5zdHJcZlIsCitcZkJ3aW5uc3RyXGZSLAorXGZCbXZpbnN0clxmUiwKK1xmQm12aW5uc3RyXGZSLAorXGZCbXZ3aW5zdHJcZlIsCitcZkJtdndpbm5zdHJcZlIgLSBnZXQgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBmcm9tIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBpbnN0cihjaGFyICpzdHIpO1xmUgorLmJyCitcZkJpbnQgaW5uc3RyKGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd2luc3RyKFdJTkRPVyAqd2luLCBjaGFyICpzdHIpO1xmUgorLmJyCitcZkJpbnQgd2lubnN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdmluc3RyKGludCB5LCBpbnQgeCwgY2hhciAqc3RyKTtcZlIKKy5icgorXGZCaW50IG12aW5uc3RyKGludCB5LCBpbnQgeCwgY2hhciAqc3RyLCBpbnQgbik7XGZSCisuYnIKK1xmQmludCBtdndpbnN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaGFyICpzdHIpO1xmUgorLmJyCitcZkJpbnQgbXZ3aW5uc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIHJldHVybiBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGluIFxmSXN0clxmUiwgZXh0cmFjdGVkIHN0YXJ0aW5nCithdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIG5hbWVkIHdpbmRvdy4KK0F0dHJpYnV0ZXMgYXJlIHN0cmlwcGVkIGZyb20gdGhlIGNoYXJhY3RlcnMuICBUaGUgZm91cgorZnVuY3Rpb25zIHdpdGggXGZJblxmUiBhcyB0aGUgbGFzdCBhcmd1bWVudCByZXR1cm4gYSBsZWFkaW5nIHN1YnN0cmluZyBhdCBtb3N0CitcZkluXGZSIGNoYXJhY3RlcnMgbG9uZyAoZXhjbHVzaXZlIG9mIHRoZSB0cmFpbGluZyBOVUwpLgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIG9mIHRoZSBmdW5jdGlvbnMgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUsCitvciB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgcmVhZCBpbnRvIHRoZSBzdHJpbmcuCisuUFAKK1gvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLAoraWYgdGhlIHdpbmRvdyBwYXJhbWV0ZXIgaXMgbnVsbCBvciB0aGUgc3RyIHBhcmFtZXRlciBpcyBudWxsLAorYSB6ZXJvIGlzIHJldHVybmVkLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgYWxsIHJvdXRpbmVzIGV4Y2VwdCBcZkJ3aW5uc3RyXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1NWcjQgZG9lcyBub3QKK2RvY3VtZW50IHdoZXRoZXIgYSBsZW5ndGggbGltaXQgaW5jbHVkZXMgb3IgZXhjbHVkZXMgdGhlIHRyYWlsaW5nIE5VTC4KKy5QUAorVGhlIG5jdXJzZXMgbGlicmFyeSBleHRlbmRzIHRoZSBYU0kgZGVzY3JpcHRpb24gYnkgYWxsb3dpbmcgYSBuZWdhdGl2ZQordmFsdWUgZm9yIFxmSW5cZlIuCitJbiB0aGlzIGNhc2UsIHRoZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzdHJpbmcgZW5kaW5nIGF0IHRoZSByaWdodCBtYXJnaW4uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX2lud3N0ci4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX2lud3N0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA3ODljCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfaW53c3RyLjN4CkBAIC0wLDAgKzEsOTMgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwMi0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19pbndzdHIuM3gsdiAxLjUgMjAwNi8wMi8yNSAyMToyMDoyMCB0b20gRXhwICQKKy5USCBjdXJzX2lud3N0ciAzWCAiIgorLlNIIE5BTUUKK1xmQmlud3N0clxmUiwKK1xmQmlubndzdHJcZlIsCitcZkJ3aW53c3RyXGZSLAorXGZCd2lubndzdHJcZlIsCitcZkJtdmlud3N0clxmUiwKK1xmQm12aW5ud3N0clxmUiwKK1xmQm12d2lud3N0clxmUiwKK1xmQm12d2lubndzdHJcZlIgXC0gZ2V0IGEgc3RyaW5nIG9mIFxmQndjaGFyX3RcZlIgY2hhcmFjdGVycyBmcm9tIGEgY3Vyc2VzIHdpbmRvdworLlNIIFNZTk9QU0lTCisubmYKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD4gXGZSCisuc3AKK1xmQmludCBpbndzdHIoXGZSXGZCd2NoYXJfdCAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IGlubndzdHIoXGZSXGZCd2NoYXJfdCAqXGZSXGZJc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCB3aW53c3RyKFxmUlxmQldJTkRPVyAqXGZSXGZJd2luXGZSXGZCLCB3Y2hhcl90ICpcZlJcZklzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgd2lubndzdHIoXGZSXGZCV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIHdjaGFyX3QgKlxmUlxmSXN0clxmUlxmQiwgaW50IFxmUlxmSW5cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZpbndzdHIoXGZSXGZCaW50IFxmUlxmSXlcZlJcZkIsIGludCBcZlJcZkl4XGZSXGZCLCB3Y2hhcl90ICpcZlJcZklzdHJcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgbXZpbm53c3RyKFxmUlxmQmludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2NoYXJfdCAqXGZSXGZJc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuYnIKK1xmQmludCBtdndpbndzdHIoXGZSXGZCV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2NoYXJfdCAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12d2lubndzdHIoXGZSXGZCV0lORE9XICpcZlJcZkl3aW5cZlJcZkIsIGludCBcZlJcZkl5XGZSXGZCLCBpbnQgXGZSXGZJeFxmUlxmQiwgd2NoYXJfdCAqXGZSXGZJc3RyXGZSXGZCLCBpbnQgXGZSXGZJblxmUlxmQik7XGZSCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlc2Ugcm91dGluZXMgcmV0dXJuIGEgc3RyaW5nIG9mIFxmQndjaGFyX3RcZlIgY2hhcmFjdGVycyBpbiBcZkl3c3RyXGZSLAorZXh0cmFjdGVkIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgbmFtZWQgd2luZG93LgorQXR0cmlidXRlcyBhcmUgc3RyaXBwZWQgZnJvbSB0aGUgY2hhcmFjdGVycy4KK1RoZSBmb3VyIGZ1bmN0aW9ucyB3aXRoIFxmSW5cZlIgYXMgdGhlIGxhc3QgYXJndW1lbnQgcmV0dXJuIGEgbGVhZGluZyBzdWJzdHJpbmcgYXQgbW9zdAorXGZJblxmUiBieXRlcyBsb25nIChleGNsdXNpdmUgb2YgdGhlIHRyYWlsaW5nIE5VTCkuCitUcmFuc2ZlciBzdG9wcyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUsIG9yIHdoZW4gXGZJblxmUiBieXRlcyBoYXZlCitiZWVuIHN0b3JlZCBhdCB0aGUgbG9jYXRpb24gcmVmZXJlbmNlZCBieSBcZkl3c3RyXGZSLgorLlBQCitJZiB0aGUgc2l6ZSBcZkluXGZSIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgYSBjb21wbGV0ZSBjaGFyYWN0ZXIsCithbiBlcnJvciBpcyBnZW5lcmF0ZWQuCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0CitcZkJ3aW5ud3N0clxmUgorbWF5IGJlIG1hY3Jvcy4KKy5TSCBSRVRVUk4gVkFMVUVTCitBbGwgcm91dGluZXMgcmV0dXJuCitcZkJFUlJcZlIKK3Vwb24gZmFpbHVyZS4gVXBvbgorc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGUgKlxmQmlud3N0clxmUgorcm91dGluZXMgcmV0dXJuCitcZkJPS1xmUiwgYW5kIHRoZSAqXGZCaW5ud3N0clxmUgorcm91dGluZXMgcmV0dXJuIHRoZQorbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHRoZSBzdHJpbmcuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2luc3RyXGZSKDNYKSwKK1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19rZXJuZWwuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19rZXJuZWwuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwMzk3MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX2tlcm5lbC4zeApAQCAtMCwwICsxLDE4NiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19rZXJuZWwuM3gsdiAxLjE1IDIwMDUvMDUvMTUgMTY6MTg6MTMgdG9tIEV4cCAkCisuVEggY3Vyc19rZXJuZWwgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJkZWZfcHJvZ19tb2RlXGZSLAorXGZCZGVmX3NoZWxsX21vZGVcZlIsCitcZkJyZXNldF9wcm9nX21vZGVcZlIsCitcZkJyZXNldF9zaGVsbF9tb2RlXGZSLAorXGZCcmVzZXR0eVxmUiwKK1xmQnNhdmV0dHlcZlIsCitcZkJnZXRzeXhcZlIsCitcZkJzZXRzeXhcZlIsCitcZkJyaXBvZmZsaW5lXGZSLAorXGZCY3Vyc19zZXRcZlIsCitcZkJuYXBtc1xmUiAtIGxvdy1sZXZlbCBcZkJjdXJzZXNcZlIgcm91dGluZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGRlZl9wcm9nX21vZGUodm9pZCk7XGZSCisuYnIKK1xmQmludCBkZWZfc2hlbGxfbW9kZSh2b2lkKTtcZlIKKy5icgorXGZCaW50IHJlc2V0X3Byb2dfbW9kZSh2b2lkKTtcZlIKKy5icgorXGZCaW50IHJlc2V0X3NoZWxsX21vZGUodm9pZCk7XGZSCisuYnIKK1xmQmludCByZXNldHR5KHZvaWQpO1xmUgorLmJyCitcZkJpbnQgc2F2ZXR0eSh2b2lkKTtcZlIKKy5icgorXGZCdm9pZCBnZXRzeXgoaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCdm9pZCBzZXRzeXgoaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCaW50IHJpcG9mZmxpbmUoaW50IGxpbmUsIGludCAoKmluaXQpKFdJTkRPVyAqLCBpbnQpKTtcZlIKKy5icgorXGZCaW50IGN1cnNfc2V0KGludCB2aXNpYmlsaXR5KTtcZlIKKy5icgorXGZCaW50IG5hcG1zKGludCBtcyk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZvbGxvd2luZyByb3V0aW5lcyBnaXZlIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdmFyaW91cyBcZkJjdXJzZXNcZlIKK2NhcGFiaWxpdGllcy4gIFRoZXNlcyByb3V0aW5lcyB0eXBpY2FsbHkgYXJlIHVzZWQgaW5zaWRlIGxpYnJhcnkKK3JvdXRpbmVzLgorLlBQCitUaGUgXGZCZGVmX3Byb2dfbW9kZVxmUiBhbmQgXGZCZGVmX3NoZWxsX21vZGVcZlIgcm91dGluZXMgc2F2ZSB0aGUKK2N1cnJlbnQgdGVybWluYWwgbW9kZXMgYXMgdGhlICJwcm9ncmFtIiAoaW4gXGZCY3Vyc2VzXGZSKSBvciAic2hlbGwiCisobm90IGluIFxmQmN1cnNlc1xmUikgc3RhdGUgZm9yIHVzZSBieSB0aGUgXGZCcmVzZXRfcHJvZ19tb2RlXGZSIGFuZAorXGZCcmVzZXRfc2hlbGxfbW9kZVxmUiByb3V0aW5lcy4gIFRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5CitcZkJpbml0c2NyXGZSLiAgVGhlcmUgaXMgb25lIHN1Y2ggc2F2ZSBhcmVhIGZvciBlYWNoIHNjcmVlbiBjb250ZXh0CithbGxvY2F0ZWQgYnkgXGZCbmV3dGVybSgpXGZSLgorLlBQCitUaGUgXGZCcmVzZXRfcHJvZ19tb2RlXGZSIGFuZCBcZkJyZXNldF9zaGVsbF9tb2RlXGZSIHJvdXRpbmVzIHJlc3RvcmUKK3RoZSB0ZXJtaW5hbCB0byAicHJvZ3JhbSIgKGluIFxmQmN1cnNlc1xmUikgb3IgInNoZWxsIiAob3V0IG9mCitcZkJjdXJzZXNcZlIpIHN0YXRlLiAgVGhlc2UgYXJlIGRvbmUgYXV0b21hdGljYWxseSBieSBcZkJlbmR3aW5cZlIKK2FuZCwgYWZ0ZXIgYW4gXGZCZW5kd2luXGZSLCBieSBcZkJkb3VwZGF0ZVxmUiwgc28gdGhleSBub3JtYWxseSBhcmUKK25vdCBjYWxsZWQuCisuUFAKK1RoZSBcZkJyZXNldHR5XGZSIGFuZCBcZkJzYXZldHR5XGZSIHJvdXRpbmVzIHNhdmUgYW5kIHJlc3RvcmUgdGhlCitzdGF0ZSBvZiB0aGUgdGVybWluYWwgbW9kZXMuICBcZkJzYXZldHR5XGZSIHNhdmVzIHRoZSBjdXJyZW50IHN0YXRlIGluCithIGJ1ZmZlciBhbmQgXGZCcmVzZXR0eVxmUiByZXN0b3JlcyB0aGUgc3RhdGUgdG8gd2hhdCBpdCB3YXMgYXQgdGhlCitsYXN0IGNhbGwgdG8gXGZCc2F2ZXR0eVxmUi4KKy5QUAorVGhlIFxmQmdldHN5eFxmUiByb3V0aW5lIHJldHVybnMgdGhlIGN1cnJlbnQgY29vcmRpbmF0ZXMgb2YgdGhlIHZpcnR1YWwgc2NyZWVuCitjdXJzb3IgaW4gXGZJeVxmUiBhbmQgXGZJeFxmUi4gIElmIFxmQmxlYXZlb2tcZlIgaXMgY3VycmVudGx5IFxmQlRSVUVcZlIsIHRoZW4KK1xmQi0xXGZSLFxmQi0xXGZSIGlzIHJldHVybmVkLiAgSWYgbGluZXMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdG9wIG9mIHRoZQorc2NyZWVuLCB1c2luZyBcZkJyaXBvZmZsaW5lXGZSLCBcZkl5XGZSIGFuZCBcZkl4XGZSIGluY2x1ZGUgdGhlc2UgbGluZXM7Cit0aGVyZWZvcmUsIFxmSXlcZlIgYW5kIFxmSXhcZlIgc2hvdWxkIGJlIHVzZWQgb25seSBhcyBhcmd1bWVudHMgZm9yCitcZkJzZXRzeXhcZlIuCisuUFAKK1RoZSBcZkJzZXRzeXhcZlIgcm91dGluZSBzZXRzIHRoZSB2aXJ0dWFsIHNjcmVlbiBjdXJzb3IgdG8KK1xmSXlcZlIsIFxmSXhcZlIuICBJZiBcZkl5XGZSIGFuZCBcZkl4XGZSIGFyZSBib3RoIFxmQi0xXGZSLCB0aGVuCitcZkJsZWF2ZW9rXGZSIGlzIHNldC4gIFRoZSB0d28gcm91dGluZXMgXGZCZ2V0c3l4XGZSIGFuZCBcZkJzZXRzeXhcZlIKK2FyZSBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IGEgbGlicmFyeSByb3V0aW5lLCB3aGljaCBtYW5pcHVsYXRlcworXGZCY3Vyc2VzXGZSIHdpbmRvd3MgYnV0IGRvZXMgbm90IHdhbnQgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHBvc2l0aW9uCitvZiB0aGUgcHJvZ3JhbSdzIGN1cnNvci4gIFRoZSBsaWJyYXJ5IHJvdXRpbmUgd291bGQgY2FsbCBcZkJnZXRzeXhcZlIKK2F0IHRoZSBiZWdpbm5pbmcsIGRvIGl0cyBtYW5pcHVsYXRpb24gb2YgaXRzIG93biB3aW5kb3dzLCBkbyBhCitcZkJ3bm91dHJlZnJlc2hcZlIgb24gaXRzIHdpbmRvd3MsIGNhbGwgXGZCc2V0c3l4XGZSLCBhbmQgdGhlbiBjYWxsCitcZkJkb3VwZGF0ZVxmUi4KKy5QUAorVGhlIFxmQnJpcG9mZmxpbmVcZlIgcm91dGluZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHNhbWUgZmFjaWxpdHkgdGhhdAorXGZCc2xrX2luaXRcZlIgW3NlZSBcZkJjdXJzX3Nsa1xmUigzWCldIHVzZXMgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZQorc2NyZWVuLiAgXGZCcmlwb2ZmbGluZVxmUiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgXGZCaW5pdHNjclxmUiBvcgorXGZCbmV3dGVybVxmUiBpcyBjYWxsZWQuICBJZiBcZklsaW5lXGZSIGlzIHBvc2l0aXZlLCBhIGxpbmUgaXMgcmVtb3ZlZAorZnJvbSB0aGUgdG9wIG9mIFxmQnN0ZHNjclxmUjsgaWYgXGZJbGluZVxmUiBpcyBuZWdhdGl2ZSwgYSBsaW5lIGlzCityZW1vdmVkIGZyb20gdGhlIGJvdHRvbS4gIFdoZW4gdGhpcyBpcyBkb25lIGluc2lkZSBcZkJpbml0c2NyXGZSLCB0aGUKK3JvdXRpbmUgXGZCaW5pdFxmUiAoc3VwcGxpZWQgYnkgdGhlIHVzZXIpIGlzIGNhbGxlZCB3aXRoIHR3bworYXJndW1lbnRzOiBhIHdpbmRvdyBwb2ludGVyIHRvIHRoZSBvbmUtbGluZSB3aW5kb3cgdGhhdCBoYXMgYmVlbgorYWxsb2NhdGVkIGFuZCBhbiBpbnRlZ2VyIHdpdGggdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB3aW5kb3cuCitJbnNpZGUgdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLCB0aGUgaW50ZWdlciB2YXJpYWJsZXMgXGZCTElORVNcZlIKK2FuZCBcZkJDT0xTXGZSIChkZWZpbmVkIGluIFxmQjxjdXJzZXMuaD5cZlIpIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZQorYWNjdXJhdGUgYW5kIFxmQndyZWZyZXNoXGZSIG9yIFxmQmRvdXBkYXRlXGZSIG11c3Qgbm90IGJlIGNhbGxlZC4gIEl0CitpcyBhbGxvd2FibGUgdG8gY2FsbCBcZkJ3bm91dHJlZnJlc2hcZlIgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbgorcm91dGluZS4KKy5QUAorXGZCcmlwb2ZmbGluZVxmUiBjYW4gYmUgY2FsbGVkIHVwIHRvIGZpdmUgdGltZXMgYmVmb3JlIGNhbGxpbmcgXGZCaW5pdHNjclxmUiBvcgorXGZCbmV3dGVybVxmUi4KKy5QUAorVGhlIFxmQmN1cnNfc2V0XGZSIHJvdXRpbmUgc2V0cyB0aGUgY3Vyc29yIHN0YXRlIGlzIHNldCB0byBpbnZpc2libGUsCitub3JtYWwsIG9yIHZlcnkgdmlzaWJsZSBmb3IgXGZCdmlzaWJpbGl0eVxmUiBlcXVhbCB0byBcZkIwXGZSLAorXGZCMVxmUiwgb3IgXGZCMlxmUiByZXNwZWN0aXZlbHkuICBJZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgdGhlCitcZkl2aXNpYmlsaXR5XGZSIHJlcXVlc3RlZCwgdGhlIHByZXZpb3VzIFxmSWN1cnNvclxmUiBzdGF0ZSBpcworcmV0dXJuZWQ7IG90aGVyd2lzZSwgXGZCRVJSXGZSIGlzIHJldHVybmVkLgorLlBQCitUaGUgXGZCbmFwbXNcZlIgcm91dGluZSBpcyB1c2VkIHRvIHNsZWVwIGZvciBcZkltc1xmUiBtaWxsaXNlY29uZHMuCisuU0ggUkVUVVJOIFZBTFVFCitFeGNlcHQgZm9yIFxmQmN1cnNfc2V0XGZSLCB0aGVzZSByb3V0aW5lcyBhbHdheXMgcmV0dXJuIFxmQk9LXGZSLgorLlBQCitcZkJjdXJzX3NldFxmUgorcmV0dXJucyB0aGUgcHJldmlvdXMgY3Vyc29yIHN0YXRlLCBvciBcZkJFUlJcZlIgaWYgdGhlCityZXF1ZXN0ZWQgXGZJdmlzaWJpbGl0eVxmUiBpcyBub3Qgc3VwcG9ydGVkLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorLlJTCisuVFAgNQorXGZCZGVmX3Byb2dfbW9kZVxmUiwgXGZCZGVmX3NoZWxsX21vZGVcZlIsIFxmQnJlc2V0X3Byb2dfbW9kZVxmUiwgXGZCcmVzZXRfc2hlbGxfbW9kZVxmUgorcmV0dXJuIGFuIGVycm9yCitpZiB0aGUgdGVybWluYWwgd2FzIG5vdCBpbml0aWFsaXplZCwgb3IKK2lmIHRoZSBJL08gY2FsbCB0byBvYnRhaW4gdGhlIHRlcm1pbmFsIHNldHRpbmdzIGZhaWxzLgorLlRQIDUKK1xmQnJpcG9mZmxpbmVcZlAKK3JldHVybnMgYW4gZXJyb3IgaWYgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJpcHBlZC1vZmYgbGluZXMKK2V4Y2VlZHMgdGhlIG1heGltdW0gKE5SSVBTID0gNSkuCisuUkUKKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQmdldHN5eFxmUiBpcyBhIG1hY3JvLCBzbyBcZkImXGZSIGlzIG5vdCBuZWNlc3NhcnkgYmVmb3JlCit0aGUgdmFyaWFibGVzIFxmSXlcZlIgYW5kIFxmSXhcZlIuCisuUFAKK09sZGVyIFNWcjQgbWFuIHBhZ2VzIHdhcm4gdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIFxmQmN1cnNfc2V0XGZSICJpcyBjdXJyZW50bHkKK2luY29ycmVjdCIuICBUaGlzIGltcGxlbWVudGF0aW9uIGdldHMgaXQgcmlnaHQsIGJ1dCBpdCBtYXkgYmUgdW53aXNlIHRvIGNvdW50CitvbiB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHJldHVybiB2YWx1ZSBhbnl3aGVyZSBlbHNlLgorLlBQCitCb3RoIG5jdXJzZXMgYW5kIFNWcjQgd2lsbCBjYWxsIFxmQmN1cnNfc2V0XGZSIGluIFxmQmVuZHdpblxmUgoraWYgXGZCY3Vyc19zZXRcZlIKK2hhcyBiZWVuIGNhbGxlZCB0byBtYWtlIHRoZSBjdXJzb3Igb3RoZXIgdGhhbiBub3JtYWwsIGkuZS4sIGVpdGhlcgoraW52aXNpYmxlIG9yIHZlcnkgdmlzaWJsZS4KK1RoZXJlIGlzIG5vIHdheSBmb3IgbmN1cnNlcyB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgY3Vyc29yIHN0YXRlIHRvCityZXN0b3JlIHRoYXQuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBmdW5jdGlvbnMgXGZCc2V0c3l4XGZSIGFuZCBcZkJnZXRzeXhcZlIgYXJlIG5vdCBkZXNjcmliZWQgaW4gdGhlIFhTSQorQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LiAgQWxsIG90aGVyIGZ1bmN0aW9ucyBhcmUgYXMgZGVzY3JpYmVkIGluIFhTSSBDdXJzZXMuCisuUFAKK1RoZSBTVnI0IGRvY3VtZW50YXRpb24gZGVzY3JpYmVzIFxmQnNldHN5eFxmUiBhbmQgXGZCZ2V0c3l4XGZSIGFzIGhhdmluZyByZXR1cm4KK3R5cGUgaW50LiBUaGlzIGlzIG1pc2xlYWRpbmcsIGFzIHRoZXkgYXJlIG1hY3JvcyB3aXRoIG5vIGRvY3VtZW50ZWQgc2VtYW50aWNzCitmb3IgdGhlIHJldHVybiB2YWx1ZS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwgXGZCY3Vyc19vdXRvcHRzXGZSKDNYKSwgXGZCY3Vyc19yZWZyZXNoXGZSKDNYKSwKK1xmQmN1cnNfc2NyX2R1bXBcZlIoM1gpLCBcZkJjdXJzX3Nsa1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfbGVnYWN5LjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfbGVnYWN5LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MWFlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19sZWdhY3kuM3gKQEAgLTAsMCArMSw5MyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX2xlZ2FjeS4zeCx2IDEuMSAyMDA3LzA0LzA3IDIzOjU0OjI5IHRvbSBFeHAgJAorLlRIIGN1cnNfbGVnYWN5IDNYICIiCisuU0ggTkFNRQorXGZCZ2V0YmVneFxmUiwKK1xmQmdldGJlZ3lcZlIsCitcZkJnZXRjdXJ4XGZSLAorXGZCZ2V0Y3VyeVxmUiwKK1xmQmdldG1heHhcZlIsCitcZkJnZXRtYXh5XGZSLAorXGZCZ2V0cGFyeFxmUiwKK1xmQmdldHBhcnlcZlIgLSBnZXQgXGZCY3Vyc2VzXGZSIGN1cnNvciBhbmQgd2luZG93IGNvb3JkaW5hdGVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IGdldGJlZ3goV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgZ2V0YmVneShXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBnZXRjdXJ4KFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IGdldGN1cnkoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgZ2V0bWF4eChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBnZXRtYXh5KFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IGdldHBhcngoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgZ2V0cGFyeShXSU5ET1cgKndpbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmdldGJlZ3lcZlIgYW5kIFxmQmdldGJlZ3hcZlIgZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZQorZGF0YSBhcyBcZkJnZXRiZWd5eFxmUi4KKy5QUAorVGhlIFxmQmdldGN1cnlcZlIgYW5kIFxmQmdldGN1cnhcZlIgZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZQorZGF0YSBhcyBcZkJnZXR5eFxmUi4KKy5QUAorVGhlIFxmQmdldG1heHlcZlIgYW5kIFxmQmdldG1heHhcZlIgZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZQorZGF0YSBhcyBcZkJnZXRtYXh5eFxmUi4KKy5QUAorVGhlIFxmQmdldHBhcnlcZlIgYW5kIFxmQmdldHBhcnhcZlIgZnVuY3Rpb25zIHJldHVybiB0aGUgc2FtZQorZGF0YSBhcyBcZkJnZXRwYXJ5eFxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYW4gaW50ZWdlciwKK29yIEVSUiBpZiB0aGUgd2luZG93IHBhcmFtZXRlciBpcyBudWxsLgorLlNIIE5PVEVTCitBbGwgb2YgdGhlc2UgaW50ZXJmYWNlcyBhcmUgcHJvdmlkZWQgYXMgbWFjcm9zIGFuZCBmdW5jdGlvbnMuCitUaGUgbWFjcm9zIGFyZSBzdXBwcmVzc2VkIChhbmQgb25seSB0aGUgZnVuY3Rpb25zIHByb3ZpZGVkKQord2hlbiBcZkJOQ1VSU0VTX09QQVFVRVxmUiBpcyBkZWZpbmVkLgorVGhlIHN0YW5kYXJkIGZvcm1zIHN1Y2ggYXMgXGZCZ2V0eXhcZlAgbXVzdCBiZSBpbXBsZW1lbnRlZCBhcyBtYWNyb3MsCithbmQgKGluIHRoaXMgaW1wbGVtZW50YXRpb24pIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBmdW5jdGlvbnMKK2Rlc2NyaWJlZCBoZXJlLAordG8gYXZvaWQgcmVsaWFuY2Ugb24gaW50ZXJuYWwgZGV0YWlscyBvZiB0aGUgV0lORE9XIHN0cnVjdHVyZS4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgZnVuY3Rpb25zIHdlcmUgc3VwcG9ydGVkIG9uIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQmN1cnNfZ2V0eXhcZlIoM1gpLAorXGZCY3Vyc19vcGFxdWVcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX21lbWxlYWtzLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfbWVtbGVha3MuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhNDU1MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX21lbWxlYWtzLjN4CkBAIC0wLDAgKzEsNzUgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19tZW1sZWFrcy4zeCx2IDEuMSAyMDA4LzEwLzI1IDIzOjM4OjEzIHRvbSBFeHAgJAorLlRIIGN1cnNfbWVtbGVha3MgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJfbmNfZnJlZWFsbFxmUAorXGZCX25jX2ZyZWVfYW5kX2V4aXRcZlAgLSBcZkJjdXJzZXNcZlIgbWVtb3J5LWxlYWsgY2hlY2tpbmcKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCdm9pZCBfbmNfZnJlZWFsbCh2b2lkKTtcZlIKKy5icgorXGZCdm9pZCBfbmNfZnJlZV9hbmRfZXhpdChpbnQpO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gc2ltcGxpZnkgYW5hbHlzaXMgb2YgbWVtb3J5IGxlYWtzIGluIHRoZSBuY3Vyc2VzCitsaWJyYXJ5LgorVGhleSBhcmUgbm9ybWFsbHkgbm90IGF2YWlsYWJsZTsgdGhleSBtdXN0IGJlIGNvbmZpZ3VyZWQgaW50byB0aGUgbGlicmFyeQorYXQgYnVpbGQgdGltZSB1c2luZyB0aGUgXGZCLS1kaXNhYmxlLWxlYWtzXGZQIG9wdGlvbi4KK1RoYXQgY29tcGlsZXMtaW4gY29kZSB0aGF0IGZyZWVzIG1lbW9yeSB0aGF0IG5vcm1hbGx5IHdvdWxkIG5vdCBiZSBmcmVlZC4KKy5QUAorQW55IGltcGxlbWVudGF0aW9uIG9mIGN1cnNlcyBtdXN0IG5vdCBmcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoCithIHNjcmVlbiwgc2luY2UgKGV2ZW4gYWZ0ZXIgY2FsbGluZyBcZkJlbmR3aW5cZlApLCBpdCBtdXN0IGJlIGF2YWlsYWJsZQorZm9yIHVzZSBpbiB0aGUgbmV4dCBjYWxsIHRvIFxmQnJlZnJlc2hcZlAuCitUaGVyZSBhcmUgYWxzbyBjaHVua3Mgb2YgbWVtb3J5IGhlbGQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCitUaGF0IG1ha2VzIGl0IGhhcmQgdG8gYW5hbHl6ZSBjdXJzZXMgYXBwbGljYXRpb25zIGZvciBtZW1vcnkgbGVha3MuCitUbyB3b3JrIGFyb3VuZCB0aGlzLCBvbmUgY2FuIGJ1aWxkIGEgZGVidWdnaW5nIHZlcnNpb24gb2YgdGhlIG5jdXJzZXMKK2xpYnJhcnkgd2hpY2ggZnJlZXMgdGhvc2UgY2h1bmtzIHdoaWNoIGl0IGNhbiwgYW5kIHByb3ZpZGVzIHRoZXNlCitmdW5jdGlvbnMgdG8gZnJlZSBhbGwgb2YgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIG5jdXJzZXMgbGlicmFyeS4KKy5QUAorVGhlIFxmUF9uY19mcmVlX2FuZF9leGl0XGZQIGZ1bmN0aW9uIGlzIHRoZSBwcmVmZXJyZWQgb25lIHNpbmNlCitzb21lIG9mIHRoZSBtZW1vcnkgd2hpY2ggaXMgZnJlZWQgbWF5IGJlIHJlcXVpcmVkIGZvciB0aGUgYXBwbGljYXRpb24KK3RvIGNvbnRpbnVlIHJ1bm5pbmcuCitJdHMgcGFyYW1ldGVyIGlzIHRoZSBjb2RlIHRvIHBhc3MgdG8gdGhlIFxmUGV4aXRcZlAgcm91dGluZS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIGZ1bmN0aW9ucyBkbyBub3QgcmV0dXJuIGEgdmFsdWUuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIFhTSSBpbnRlcmZhY2UuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX21vdXNlLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfbW91c2UuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmOWY5YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX21vdXNlLjN4CkBAIC0wLDAgKzEsMzEwIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX21vdXNlLjN4LHYgMS4zMCAyMDA2LzEyLzMwIDIzOjQzOjM0IHRvbSBFeHAgJAorLlRIIGN1cnNfbW91c2UgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJnZXRtb3VzZVxmUiwgXGZCdW5nZXRtb3VzZVxmUiwKK1xmQm1vdXNlbWFza1xmUiwgXGZCd2VuY2xvc2VcZlIsCitcZkJtb3VzZV90cmFmb1xmUiwgXGZCd21vdXNlX3RyYWZvXGZSLAorXGZCbW91c2VpbnRlcnZhbFxmUiAtIG1vdXNlIGludGVyZmFjZSB0aHJvdWdoIGN1cnNlcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworLm5mCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+CisuUFAKK1xmQnR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbWFza190OworLlBQCit0eXBlZGVmIHN0cnVjdAoreworICAgIHNob3J0IGlkOyAgICAgICAgIFxmSS8qIElEIHRvIGRpc3Rpbmd1aXNoIG11bHRpcGxlIGRldmljZXMgKi9cZkIKKyAgICBpbnQgeCwgeSwgejsgICAgICBcZkkvKiBldmVudCBjb29yZGluYXRlcyAqL1xmQgorICAgIG1tYXNrX3QgYnN0YXRlOyAgIFxmSS8qIGJ1dHRvbiBzdGF0ZSBiaXRzICovXGZCCit9CitNRVZFTlQ7XGZSCisuZmkKKy5icgorXGZCaW50IGdldG1vdXNlKE1FVkVOVCAqZXZlbnQpO1xmUgorLmJyCitcZkJpbnQgdW5nZXRtb3VzZShNRVZFTlQgKmV2ZW50KTtcZlIKKy5icgorXGZCbW1hc2tfdCBtb3VzZW1hc2sobW1hc2tfdCBuZXdtYXNrLCBtbWFza190ICpvbGRtYXNrKTtcZlIKKy5icgorXGZCYm9vbCB3ZW5jbG9zZShjb25zdCBXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCYm9vbCBtb3VzZV90cmFmbyhpbnQqIHBZLCBpbnQqIHBYLCBib29sIHRvX3NjcmVlbik7XGZSCisuYnIKK1xmQmJvb2wgd21vdXNlX3RyYWZvKGNvbnN0IFdJTkRPVyogd2luLCBpbnQqIHBZLCBpbnQqIHBYLFxmUgorLmJyCisJXGZCYm9vbCB0b19zY3JlZW4pO1xmUgorLmJyCitcZkJpbnQgbW91c2VpbnRlcnZhbChpbnQgZXJ2YWwpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGFuIGludGVyZmFjZSB0byBtb3VzZSBldmVudHMgZnJvbQorXGZCbmN1cnNlc1xmUigzWCkuCitNb3VzZSBldmVudHMgYXJlIHJlcHJlc2VudGVkIGJ5IFxmQktFWV9NT1VTRVxmUgorcHNldWRvLWtleSB2YWx1ZXMgaW4gdGhlIFxmQndnZXRjaFxmUiBpbnB1dCBzdHJlYW0uCisuUFAKK1RvIG1ha2UgbW91c2UgZXZlbnRzIHZpc2libGUsIHVzZSB0aGUgXGZCbW91c2VtYXNrXGZSIGZ1bmN0aW9uLgorVGhpcyB3aWxsIHNldAordGhlIG1vdXNlIGV2ZW50cyB0byBiZSByZXBvcnRlZC4KK0J5IGRlZmF1bHQsIG5vIG1vdXNlIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCitUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBtYXNrIHRvIGluZGljYXRlIHdoaWNoIG9mIHRoZSBzcGVjaWZpZWQgbW91c2UgZXZlbnRzCitjYW4gYmUgcmVwb3J0ZWQ7IG9uIGNvbXBsZXRlIGZhaWx1cmUgaXQgcmV0dXJucyAwLgorSWYgb2xkbWFzayBpcyBub24tTlVMTCwKK3RoaXMgZnVuY3Rpb24gZmlsbHMgdGhlIGluZGljYXRlZCBsb2NhdGlvbiB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgZ2l2ZW4KK3dpbmRvdydzIG1vdXNlIGV2ZW50IG1hc2suCisuUFAKK0FzIGEgc2lkZSBlZmZlY3QsIHNldHRpbmcgYSB6ZXJvIG1vdXNlbWFzayBtYXkgdHVybiBvZmYgdGhlIG1vdXNlIHBvaW50ZXI7CitzZXR0aW5nIGEgbm9uemVybyBtYXNrIG1heSB0dXJuIGl0IG9uLgorV2hldGhlciB0aGlzIGhhcHBlbnMgaXMgZGV2aWNlLWRlcGVuZGVudC4KKy5QUAorSGVyZSBhcmUgdGhlIG1vdXNlIGV2ZW50IHR5cGUgbWFza3Mgd2hpY2ggbWF5IGJlIGRlZmluZWQ6CisuUFAKKy5UUworbCBsCitfIF8KK2wgbC4KK1xmSU5hbWVcZlIJXGZJRGVzY3JpcHRpb25cZlIKK0JVVFRPTjFfUFJFU1NFRAltb3VzZSBidXR0b24gMSBkb3duCitCVVRUT04xX1JFTEVBU0VECW1vdXNlIGJ1dHRvbiAxIHVwCitCVVRUT04xX0NMSUNLRUQJbW91c2UgYnV0dG9uIDEgY2xpY2tlZAorQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gMSBkb3VibGUgY2xpY2tlZAorQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gMSB0cmlwbGUgY2xpY2tlZAorXworQlVUVE9OMl9QUkVTU0VECW1vdXNlIGJ1dHRvbiAyIGRvd24KK0JVVFRPTjJfUkVMRUFTRUQJbW91c2UgYnV0dG9uIDIgdXAKK0JVVFRPTjJfQ0xJQ0tFRAltb3VzZSBidXR0b24gMiBjbGlja2VkCitCVVRUT04yX0RPVUJMRV9DTElDS0VECW1vdXNlIGJ1dHRvbiAyIGRvdWJsZSBjbGlja2VkCitCVVRUT04yX1RSSVBMRV9DTElDS0VECW1vdXNlIGJ1dHRvbiAyIHRyaXBsZSBjbGlja2VkCitfCitCVVRUT04zX1BSRVNTRUQJbW91c2UgYnV0dG9uIDMgZG93bgorQlVUVE9OM19SRUxFQVNFRAltb3VzZSBidXR0b24gMyB1cAorQlVUVE9OM19DTElDS0VECW1vdXNlIGJ1dHRvbiAzIGNsaWNrZWQKK0JVVFRPTjNfRE9VQkxFX0NMSUNLRUQJbW91c2UgYnV0dG9uIDMgZG91YmxlIGNsaWNrZWQKK0JVVFRPTjNfVFJJUExFX0NMSUNLRUQJbW91c2UgYnV0dG9uIDMgdHJpcGxlIGNsaWNrZWQKK18KK0JVVFRPTjRfUFJFU1NFRAltb3VzZSBidXR0b24gNCBkb3duCitCVVRUT040X1JFTEVBU0VECW1vdXNlIGJ1dHRvbiA0IHVwCitCVVRUT040X0NMSUNLRUQJbW91c2UgYnV0dG9uIDQgY2xpY2tlZAorQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gNCBkb3VibGUgY2xpY2tlZAorQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRAltb3VzZSBidXR0b24gNCB0cmlwbGUgY2xpY2tlZAorXworQlVUVE9ONV9QUkVTU0VECW1vdXNlIGJ1dHRvbiA1IGRvd24KK0JVVFRPTjVfUkVMRUFTRUQJbW91c2UgYnV0dG9uIDUgdXAKK0JVVFRPTjVfQ0xJQ0tFRAltb3VzZSBidXR0b24gNSBjbGlja2VkCitCVVRUT041X0RPVUJMRV9DTElDS0VECW1vdXNlIGJ1dHRvbiA1IGRvdWJsZSBjbGlja2VkCitCVVRUT041X1RSSVBMRV9DTElDS0VECW1vdXNlIGJ1dHRvbiA1IHRyaXBsZSBjbGlja2VkCitfCitCVVRUT05fU0hJRlQJc2hpZnQgd2FzIGRvd24gZHVyaW5nIGJ1dHRvbiBzdGF0ZSBjaGFuZ2UKK0JVVFRPTl9DVFJMCWNvbnRyb2wgd2FzIGRvd24gZHVyaW5nIGJ1dHRvbiBzdGF0ZSBjaGFuZ2UKK0JVVFRPTl9BTFQJYWx0IHdhcyBkb3duIGR1cmluZyBidXR0b24gc3RhdGUgY2hhbmdlCitBTExfTU9VU0VfRVZFTlRTCXJlcG9ydCBhbGwgYnV0dG9uIHN0YXRlIGNoYW5nZXMKK1JFUE9SVF9NT1VTRV9QT1NJVElPTglyZXBvcnQgbW91c2UgbW92ZW1lbnQKK18KKy5URQorLlBQCitPbmNlIGEgY2xhc3Mgb2YgbW91c2UgZXZlbnRzIGhhdmUgYmVlbiBtYWRlIHZpc2libGUgaW4gYSB3aW5kb3csCitjYWxsaW5nIHRoZSBcZkJ3Z2V0Y2hcZlIgZnVuY3Rpb24gb24gdGhhdCB3aW5kb3cgbWF5IHJldHVybgorXGZCS0VZX01PVVNFXGZSIGFzIGFuIGluZGljYXRvciB0aGF0IGEgbW91c2UgZXZlbnQgaGFzIGJlZW4gcXVldWVkLgorVG8gcmVhZCB0aGUgZXZlbnQgZGF0YSBhbmQgcG9wIHRoZSBldmVudCBvZmYgdGhlIHF1ZXVlLCBjYWxsCitcZkJnZXRtb3VzZVxmUi4KK1RoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gXGZCT0tcZlIgaWYgYSBtb3VzZSBldmVudAoraXMgYWN0dWFsbHkgdmlzaWJsZSBpbiB0aGUgZ2l2ZW4gd2luZG93LCBcZkJFUlJcZlIgb3RoZXJ3aXNlLgorV2hlbiBcZkJnZXRtb3VzZVxmUiByZXR1cm5zIFxmQk9LXGZSLCB0aGUgZGF0YSBkZXBvc2l0ZWQgYXMgeSBhbmQKK3ggaW4gdGhlIGV2ZW50IHN0cnVjdHVyZSBjb29yZGluYXRlcyB3aWxsIGJlIHNjcmVlbi1yZWxhdGl2ZSBjaGFyYWN0ZXItY2VsbAorY29vcmRpbmF0ZXMuCitUaGUgcmV0dXJuZWQgc3RhdGUgbWFzayB3aWxsIGhhdmUgZXhhY3RseSBvbmUgYml0IHNldCB0bworaW5kaWNhdGUgdGhlIGV2ZW50IHR5cGUuCisuUFAKK1RoZSBcZkJ1bmdldG1vdXNlXGZSIGZ1bmN0aW9uIGJlaGF2ZXMgYW5hbG9nb3VzbHkgdG8gXGZCdW5nZXRjaFxmUi4KK0l0IHB1c2hlcworYSBcZkJLRVlfTU9VU0VcZlIgZXZlbnQgb250byB0aGUgaW5wdXQgcXVldWUsIGFuZCBhc3NvY2lhdGVzIHdpdGggdGhhdCBldmVudAordGhlIGdpdmVuIHN0YXRlIGRhdGEgYW5kIHNjcmVlbi1yZWxhdGl2ZSBjaGFyYWN0ZXItY2VsbCBjb29yZGluYXRlcy4KKy5QUAorVGhlIFxmQndlbmNsb3NlXGZSIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgYSBnaXZlbiBwYWlyIG9mIHNjcmVlbi1yZWxhdGl2ZQorY2hhcmFjdGVyLWNlbGwgY29vcmRpbmF0ZXMgaXMgZW5jbG9zZWQgYnkgYSBnaXZlbiB3aW5kb3csIHJldHVybmluZyBUUlVFCitpZiBpdCBpcyBhbmQgRkFMU0Ugb3RoZXJ3aXNlLgorSXQgaXMgdXNlZnVsIGZvciBkZXRlcm1pbmluZyB3aGF0IHN1YnNldCBvZgordGhlIHNjcmVlbiB3aW5kb3dzIGVuY2xvc2UgdGhlIGxvY2F0aW9uIG9mIGEgbW91c2UgZXZlbnQuCisuUFAKK1RoZSBcZkJ3bW91c2VfdHJhZm9cZlIgZnVuY3Rpb24gdHJhbnNmb3JtcyBhIGdpdmVuIHBhaXIgb2YgY29vcmRpbmF0ZXMKK2Zyb20gc3Rkc2NyLXJlbGF0aXZlIGNvb3JkaW5hdGVzCit0byBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gd2luZG93IG9yIHZpY2UgdmVyc2EuCitQbGVhc2UgcmVtZW1iZXIsIHRoYXQgc3Rkc2NyLXJlbGF0aXZlIGNvb3JkaW5hdGVzIGFyZSBub3QgYWx3YXlzIGlkZW50aWNhbAordG8gd2luZG93LXJlbGF0aXZlIGNvb3JkaW5hdGVzIGR1ZSB0byB0aGUgbWVjaGFuaXNtIHRvIHJlc2VydmUgbGluZXMgb24gdG9wCitvciBib3R0b20gb2YgdGhlIHNjcmVlbiBmb3Igb3RoZXIgcHVycG9zZXMKKyhzZWUgdGhlIFxmQnJpcG9mZmxpbmUoKVxmUCBhbmQgXGZCc2xrX2luaXRcZlIgY2FsbHMsIGZvciBleGFtcGxlKS4KK0lmIHRoZSBwYXJhbWV0ZXIgXGZCdG9fc2NyZWVuXGZSIGlzIFxmQlRSVUVcZlIsIHRoZSBwb2ludGVycworXGZCcFksIHBYXGZSIG11c3QgcmVmZXJlbmNlIHRoZSBjb29yZGluYXRlcyBvZiBhIGxvY2F0aW9uCitpbnNpZGUgdGhlIHdpbmRvdyBcZkJ3aW5cZlIuCitUaGV5IGFyZSBjb252ZXJ0ZWQgdG8gd2luZG93LXJlbGF0aXZlIGNvb3JkaW5hdGVzIGFuZCByZXR1cm5lZAordGhyb3VnaCB0aGUgcG9pbnRlcnMuCitJZiB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgXGZCVFJVRVxmUi4KK0lmIG9uZSBvZiB0aGUgcGFyYW1ldGVycyB3YXMgTlVMTCBvciB0aGUgbG9jYXRpb24gaXMKK25vdCBpbnNpZGUgdGhlIHdpbmRvdywgXGZCRkFMU0VcZlIgaXMgcmV0dXJuZWQuCitJZiBcZkJ0b19zY3JlZW5cZlIgaXMKK1xmQkZBTFNFXGZSLCB0aGUgcG9pbnRlcnMgXGZCcFksIHBYXGZSIG11c3QgcmVmZXJlbmNlIHdpbmRvdy1yZWxhdGl2ZQorY29vcmRpbmF0ZXMuCitUaGV5IGFyZSBjb252ZXJ0ZWQgdG8gc3Rkc2NyLXJlbGF0aXZlIGNvb3JkaW5hdGVzIGlmIHRoZQord2luZG93IFxmQndpblxmUiBlbmNsb3NlcyB0aGlzIHBvaW50LgorSW4gdGhpcyBjYXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIFxmQlRSVUVcZlIuCitJZiBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgaXMgTlVMTCBvciB0aGUgcG9pbnQgaXMgbm90IGluc2lkZSB0aGUKK3dpbmRvdywgXGZCRkFMU0VcZlIgaXMgcmV0dXJuZWQuCitQbGVhc2Ugbm90aWNlLCB0aGF0IHRoZSByZWZlcmVuY2VkIGNvb3JkaW5hdGVzCithcmUgb25seSByZXBsYWNlZCBieSB0aGUgY29udmVydGVkIGNvb3JkaW5hdGVzIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiB3YXMKK3N1Y2Nlc3NmdWwuCisuUFAKK1RoZSBcZkJtb3VzZV90cmFmb1xmUiBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgc2FtZSB0cmFuc2xhdGlvbgorYXMgXGZCd21vdXNlX3RyYWZvXGZSLAordXNpbmcgc3Rkc2NyIGZvciBcZkJ3aW5cZlIuCisuUFAKK1RoZSBcZkJtb3VzZWludGVydmFsXGZSIGZ1bmN0aW9uIHNldHMgdGhlIG1heGltdW0gdGltZSAoaW4gdGhvdXNhbmRzIG9mIGEKK3NlY29uZCkgdGhhdCBjYW4gZWxhcHNlIGJldHdlZW4gcHJlc3MgYW5kIHJlbGVhc2UgZXZlbnRzIGZvciB0aGVtIHRvCitiZSByZWNvZ25pemVkIGFzIGEgY2xpY2suCitVc2UgXGZCbW91c2VpbnRlcnZhbCgwKVxmUiB0byBkaXNhYmxlIGNsaWNrIHJlc29sdXRpb24uCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByZXZpb3VzIGludGVydmFsIHZhbHVlLgorVXNlIFxmQm1vdXNlaW50ZXJ2YWwoLTEpXGZSIHRvIG9idGFpbiB0aGUgaW50ZXJ2YWwgd2l0aG91dCBhbHRlcmluZyBpdC4KK1RoZSBkZWZhdWx0IGlzIG9uZSBzaXh0aCBvZiBhIHNlY29uZC4KKy5QUAorTm90ZSB0aGF0IG1vdXNlIGV2ZW50cyB3aWxsIGJlIGlnbm9yZWQgd2hlbiBpbnB1dCBpcyBpbiBjb29rZWQgbW9kZSwgYW5kIHdpbGwKK2NhdXNlIGFuIGVycm9yIGJlZXAgd2hlbiBjb29rZWQgbW9kZSBpcyBiZWluZyBzaW11bGF0ZWQgaW4gYSB3aW5kb3cgYnkgYQorZnVuY3Rpb24gc3VjaCBhcyBcZkJnZXRzdHJcZlIgdGhhdCBleHBlY3RzIGEgbGluZWZlZWQgZm9yIGlucHV0LWxvb3AKK3Rlcm1pbmF0aW9uLgorLlNIIFJFVFVSTiBWQUxVRQorXGZCZ2V0bW91c2VcZlIgYW5kIFxmQnVuZ2V0bW91c2VcZlIKK3JldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIG9yIFxmQk9LXGZSCit1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKy5SUworLlRQIDUKK1xmQmdldG1vdXNlXGZQCityZXR1cm5zIGFuIGVycm9yLgorSWYgbm8gbW91c2UgZHJpdmVyIHdhcyBpbml0aWFsaXplZCwgb3IKK2lmIHRoZSBtYXNrIHBhcmFtZXRlciBpcyB6ZXJvLAorLlRQIDUKK1xmQnVuZ2V0bW91c2VcZlAKK3JldHVybnMgYW4gZXJyb3IgaWYgdGhlIEZJRk8gaXMgZnVsbC4KKy5SRQorLlBQCitcZkJtb3VzZW1hc2tcZlIKK3JldHVybnMgdGhlIG1hc2sgb2YgcmVwb3J0YWJsZSBldmVudHMuCisuUFAKK1xmQm1vdXNlaW50ZXJ2YWxcZlIKK3JldHVybnMgdGhlIHByZXZpb3VzIGludGVydmFsIHZhbHVlLCB1bmxlc3MKK3RoZSB0ZXJtaW5hbCB3YXMgbm90IGluaXRpYWxpemVkLgorSW4gdGhhdCBjYXNlLCBpdCByZXR1cm5zIHRoZSBtYXhpbXVtIGludGVydmFsIHZhbHVlICgxNjYpLgorLlBQCitcZkJ3ZW5jbG9zZVxmUiBhbmQgXGZCd21vdXNlX3RyYWZvXGZSCithcmUgYm9vbGVhbiBmdW5jdGlvbnMgcmV0dXJuaW5nIFxmQlRSVUVcZlIgb3IgXGZCRkFMU0VcZlIgZGVwZW5kaW5nCitvbiB0aGVpciB0ZXN0IHJlc3VsdC4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2UgY2FsbHMgd2VyZSBkZXNpZ25lZCBmb3IgXGZCbmN1cnNlc1xmUigzWCksIGFuZCBhcmUgbm90IGZvdW5kIGluIFNWcjQKK2N1cnNlcywgNC40QlNEIGN1cnNlcywgb3IgYW55IG90aGVyIHByZXZpb3VzIHZlcnNpb24gb2YgY3Vyc2VzLgorLlBQCitUaGUgZmVhdHVyZSBtYWNybyBcZkJOQ1VSU0VTX01PVVNFX1ZFUlNJT05cZlIgaXMgcHJvdmlkZWQgc28gdGhlIHByZXByb2Nlc3NvcgorY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoZXNlIGZlYXR1cmVzIGFyZSBwcmVzZW50LgorSWYgdGhlIGludGVyZmFjZSBpcyBjaGFuZ2VkLCB0aGUgdmFsdWUgb2YgXGZCTkNVUlNFU19NT1VTRV9WRVJTSU9OXGZSIHdpbGwgYmUKK2luY3JlbWVudGVkLgorVGhlc2UgdmFsdWVzIGZvciBcZkJOQ1VSU0VTX01PVVNFX1ZFUlNJT05cZlIgbWF5IGJlCitzcGVjaWZpZWQgd2hlbiBjb25maWd1cmluZyBuY3Vyc2VzOgorLlJTCisuVFAgMworMQoraGFzIGRlZmluaXRpb25zIGZvciByZXNlcnZlZCBldmVudHMuCitUaGUgbWFzayB1c2VzIDI4IGJpdHMuCisuVFAgMworMgorYWRkcyBkZWZpbml0aW9ucyBmb3IgYnV0dG9uIDUsCityZW1vdmVzIHRoZSBkZWZpbml0aW9ucyBmb3IgcmVzZXJ2ZWQgZXZlbnRzLgorVGhlIG1hc2sgdXNlcyAyOSBiaXRzLgorLlJFCisuUFAKK1RoZSBvcmRlciBvZiB0aGUgXGZCTUVWRU5UXGZSIHN0cnVjdHVyZSBtZW1iZXJzIGlzIG5vdCBndWFyYW50ZWVkLgorQWRkaXRpb25hbCBmaWVsZHMgbWF5IGJlIGFkZGVkIHRvIHRoZSBzdHJ1Y3R1cmUgaW4gdGhlIGZ1dHVyZS4KKy5QUAorVW5kZXIgXGZCbmN1cnNlc1xmUigzWCksIHRoZXNlIGNhbGxzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBlaXRoZXIKK3h0ZXJtJ3MgYnVpbHQtaW4gbW91c2UtdHJhY2tpbmcgQVBJIG9yCitwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXJzIGluY2x1ZGluZworLlJTCitBbGVzc2FuZHJvIFJ1YmluaSdzIGdwbSBzZXJ2ZXIuCisuYnIKK0ZyZWVCU0Qgc3lzbW91c2UKKy5icgorT1MvMiBFTVgKKy5SRQorSWYgeW91IGFyZSB1c2luZyBhbiB1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uLAorbW91c2UgZXZlbnRzIHdpbGwgbm90IGJlIHZpc2libGUgdG8KK1xmQm5jdXJzZXNcZlIoM1gpIChhbmQgdGhlIFxmQm1vdXNlbWFza1xmUiBmdW5jdGlvbiB3aWxsIGFsd2F5cworcmV0dXJuIFxmQjBcZlIpLgorLlBQCitJZiB0aGUgdGVybWluZm8gZW50cnkgY29udGFpbnMgYSBcZkJYTVxmUiBzdHJpbmcsCit0aGlzIGlzIHVzZWQgaW4gdGhlIHh0ZXJtIG1vdXNlIGRyaXZlciB0byBjb250cm9sIHRoZQord2F5IHRoZSB0ZXJtaW5hbCBpcyBpbml0aWFsaXplZCBmb3IgbW91c2Ugb3BlcmF0aW9uLgorVGhlIGRlZmF1bHQsIGlmIFxmQlhNXGZSIGlzIG5vdCBmb3VuZCwKK2NvcnJlc3BvbmRzIHRvIHByaXZhdGUgbW9kZSAxMDAwIG9mIHh0ZXJtOgorLlJTCitcXEVbPzEwMDAlPyVwMSV7MX0lPSV0aCVlbCU7CisuUkUKK1RoZSB6IG1lbWJlciBpbiB0aGUgZXZlbnQgc3RydWN0dXJlIGlzIG5vdCBwcmVzZW50bHkgdXNlZC4KK0l0IGlzIGludGVuZGVkCitmb3IgdXNlIHdpdGggdG91Y2ggc2NyZWVucyAod2hpY2ggbWF5IGJlIHByZXNzdXJlLXNlbnNpdGl2ZSkgb3Igd2l0aAorM0QtbWljZS90cmFja2JhbGxzL3Bvd2VyIGdsb3Zlcy4KKy5TSCBCVUdTCitNb3VzZSBldmVudHMgdW5kZXIgeHRlcm0gd2lsbCBub3QgaW4gZmFjdCBiZSBpZ25vcmVkIGR1cmluZyBjb29rZWQgbW9kZSwKK2lmIHRoZXkgaGF2ZSBiZWVuIGVuYWJsZWQgYnkgXGZCbW91c2VtYXNrXGZSLgorSW5zdGVhZCwgdGhlIHh0ZXJtIG1vdXNlCityZXBvcnQgc2VxdWVuY2Ugd2lsbCBhcHBlYXIgaW4gdGhlIHN0cmluZyByZWFkLgorLlBQCitNb3VzZSBldmVudHMgdW5kZXIgeHRlcm0gd2lsbCBub3QgYmUgZGV0ZWN0ZWQgY29ycmVjdGx5IGluIGEgd2luZG93IHdpdGgKK2l0cyBrZXlwYWQgYml0IG9mZiwgc2luY2UgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYXMgYSB2YXJpZXR5IG9mIGZ1bmN0aW9uIGtleS4KK1lvdXIgdGVybWluZm8gZGVzY3JpcHRpb24gc2hvdWxkIGhhdmUgXGZCa21vdXNcZlIgc2V0IHRvICJcXEVbTSIKKyh0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXNwb25zZSBmcm9tIHh0ZXJtIGZvciBtb3VzZSBjbGlja3MpLgorT3RoZXIgdmFsdWVzIGZvciBcZkJrbW91c1xmUiBhcmUgcGVybWl0dGVkLAorYnV0IHVuZGVyIHRoZSBzYW1lIGFzc3VtcHRpb24sCitpLmUuLCBpdCBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXNwb25zZS4KKy5QUAorQmVjYXVzZSB0aGVyZSBhcmUgbm8gc3RhbmRhcmQgdGVybWluYWwgcmVzcG9uc2VzIHRoYXQgd291bGQgc2VydmUgdG8gaWRlbnRpZnkKK3Rlcm1pbmFscyB3aGljaCBzdXBwb3J0IHRoZSB4dGVybSBtb3VzZSBwcm90b2NvbCwgXGZCbmN1cnNlc1xmUiBhc3N1bWVzIHRoYXQKK2lmIHlvdXIgJFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbnMgInh0ZXJtIiwKK29yIFxmQmttb3VzXGZSIGlzIGRlZmluZWQgaW4KK3RoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbiwgdGhlbiB0aGUgdGVybWluYWwgbWF5IHNlbmQgbW91c2UgZXZlbnRzLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19rZXJuZWxcZlIoM1gpLAorXGZCY3Vyc19zbGtcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19tb3ZlLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfbW92ZS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDQ2Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfbW92ZS4zeApAQCAtMCwwICsxLDY5IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfbW92ZS4zeCx2IDEuMTIgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwICQKKy5USCBjdXJzX21vdmUgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJtb3ZlXGZSLAorXGZCd21vdmVcZlIgLSBtb3ZlIFxmQmN1cnNlc1xmUiB3aW5kb3cgY3Vyc29yCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBtb3ZlKGludCB5LCBpbnQgeCk7XGZSCisuYnIKK1xmQmludCB3bW92ZShXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBtb3ZlIHRoZSBjdXJzb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSB3aW5kb3cgdG8gbGluZSBcZkl5XGZSIGFuZAorY29sdW1uIFxmSXhcZlIuICBUaGlzIHJvdXRpbmUgZG9lcyBub3QgbW92ZSB0aGUgcGh5c2ljYWwgY3Vyc29yIG9mIHRoZSB0ZXJtaW5hbAordW50aWwgXGZCcmVmcmVzaFxmUiBpcyBjYWxsZWQuICBUaGUgcG9zaXRpb24gc3BlY2lmaWVkIGlzIHJlbGF0aXZlIHRvIHRoZSB1cHBlcgorbGVmdC1oYW5kIGNvcm5lciBvZiB0aGUgd2luZG93LCB3aGljaCBpcyAoMCwwKS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBPSyAoU1ZyNAorc3BlY2lmaWVzIG9ubHkgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24uCisuUFAKK1NwZWNpZmljYWxseSwgdGhleSByZXR1cm4gYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgdGhlIHBvc2l0aW9uIGlzIG91dHNpZGUgdGhlIHdpbmRvdy4KKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQm1vdmVcZlIgbWF5IGJlIGEgbWFjcm8uCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX3JlZnJlc2hcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX29wYXF1ZS4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX29wYXF1ZS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzljZmFhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfb3BhcXVlLjN4CkBAIC0wLDAgKzEsMTMzIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfb3BhcXVlLjN4LHYgMS42IDIwMDcvMDkvMDggMTg6NDk6MTMgdG9tIEV4cCAkCisuVEggY3Vyc19vcGFxdWUgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJpc19jbGVhcmVkXGZSLAorXGZCaXNfaWRsb2tcZlIsCitcZkJpc19pZGNva1xmUiwKK1xmQmlzX2ltbWVkb2tcZlIsCitcZkJpc19rZXlwYWRcZlIsCitcZkJpc19sZWF2ZW9rXGZSLAorXGZCaXNfbm9kZWxheVxmUiwKK1xmQmlzX3RpbWVvdXRcZlIsCitcZkJpc19zY3JvbGxva1xmUiwKK1xmQmlzX3N5bmNva1xmUiAtIFxmQmN1cnNlc1xmUiB3aW5kb3cgcHJvcGVydGllcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJib29sIGlzX2NsZWFyZWQoY29uc3QgV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJib29sIGlzX2lkY29rKGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCYm9vbCBpc19pZGxvayhjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmJvb2wgaXNfaW1tZWRvayhjb25zdCBXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmJvb2wgaXNfa2V5cGFkKGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCYm9vbCBpc19sZWF2ZW9rKGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCYm9vbCBpc19ub2RlbGF5KGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCYm9vbCBpc19ub3RpbWVvdXQoY29uc3QgV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJib29sIGlzX3Njcm9sbG9rKGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCYm9vbCBpc19zeW5jb2soY29uc3QgV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJXSU5ET1cgKiB3Z2V0cGFyZW50KGNvbnN0IFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IHdnZXRzY3JyZWcoY29uc3QgV0lORE9XICp3aW4sIGludCAqdG9wLCBpbnQgKmJvdHRvbSk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgd2hpY2ggcmV0dXJuIHByb3BlcnRpZXMKK3NldCBpbiB0aGUgV0lORE9XIHN0cnVjdHVyZSwgYWxsb3dpbmcgaXQgdG8gYmUgYGBvcGFxdWUnJyBpZgordGhlIHN5bWJvbCBcZkJOQ1VSU0VTX09QQVFVRVxmUiBpcyBkZWZpbmVkOgorLlRQIDUKK1xmQmlzX2NsZWFyZWRcZlIKK3JldHVybnMgdGhlIHZhbHVlIHNldCBpbiBcZkJjbGVhcm9rXGZSCisuVFAgNQorXGZCaXNfaWRjb2tcZlIKK3JldHVybnMgdGhlIHZhbHVlIHNldCBpbiBcZkJpZGNva1xmUgorLlRQIDUKK1xmQmlzX2lkbG9rXGZSCityZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gXGZCaWRsb2tcZlIKKy5UUCA1CitcZkJpc19pbW1lZG9rXGZSCityZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gXGZCaW1tZWRva1xmUgorLlRQIDUKK1xmQmlzX2tleXBhZFxmUgorcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIFxmQmtleXBhZFxmUgorLlRQIDUKK1xmQmlzX2xlYXZlb2tcZlIKK3JldHVybnMgdGhlIHZhbHVlIHNldCBpbiBcZkJsZWF2ZW9rXGZSCisuVFAgNQorXGZCaXNfbm9kZWxheVxmUgorcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIFxmQm5vZGVsYXlcZlIKKy5UUCA1CitcZkJpc19ub3RpbWVvdXRcZlIKK3JldHVybnMgdGhlIHZhbHVlIHNldCBpbiBcZkJub3RpbWVvdXRcZlIKKy5UUCA1CitcZkJpc19zY3JvbGxva1xmUgorcmV0dXJucyB0aGUgdmFsdWUgc2V0IGluIFxmQnNjcm9sbG9rXGZSCisuVFAgNQorXGZCaXNfc3luY29rXGZSCityZXR1cm5zIHRoZSB2YWx1ZSBzZXQgaW4gXGZCc3luY29rXGZSCisuVFAgNQorXGZCd2dldHBhcmVudFxmUgorcmV0dXJucyB0aGUgcGFyZW50IFdJTkRPVyBwb2ludGVyIGZvciBzdWJ3aW5kb3dzLAorb3IgTlVMTCBmb3Igd2luZG93cyBoYXZpbmcgbm8gcGFyZW50LgorLlRQIDUKK1xmQndnZXRzY3JyZWdcZlIKK3JldHVybnMgdGhlIHRvcCBhbmQgYm90dG9tIHJvd3MgZm9yIHRoZSBzY3JvbGxpbmcgbWFyZ2luIGFzIHNldCBpbiBcZkJ3c2V0c2NycmVnXGZQLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2UgZnVuY3Rpb25zIGFsbCByZXR1cm4gVFJVRSBvciBGQUxTRSwgZXhjZXB0IGFzIG5vdGVkLgorLlNIIE5PVEVTCitCb3RoIGEgbWFjcm8gYW5kIGEgZnVuY3Rpb24gYXJlIHByb3ZpZGVkIGZvciBlYWNoIG5hbWUuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byBuY3Vyc2VzLgorVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gbmN1cnNlcyBleHRlbnNpb25zCitiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2lub3B0c1xmUigzWCksCitcZkJjdXJzX291dG9wdHNcZlIoM1gpLAorXGZCY3Vyc193aW5kb3dcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX291dG9wdHMuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19vdXRvcHRzLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDQzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19vdXRvcHRzLjN4CkBAIC0wLDAgKzEsMjIyIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfb3V0b3B0cy4zeCx2IDEuMjEgMjAwNy8wNi8wMiAyMDo0MDowNyB0b20gRXhwICQKKy5USCBjdXJzX291dG9wdHMgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJjbGVhcm9rXGZSLAorXGZCaWRsb2tcZlIsCitcZkJpZGNva1xmUiwKK1xmQmltbWVkb2tcZlIsCitcZkJsZWF2ZW9rXGZSLAorXGZCc2V0c2NycmVnXGZSLAorXGZCd3NldHNjcnJlZ1xmUiwKK1xmQnNjcm9sbG9rXGZSLAorXGZCbmxcZlIsCitcZkJub25sXGZSIC0gXGZCY3Vyc2VzXGZSIG91dHB1dCBvcHRpb25zCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBjbGVhcm9rKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCaW50IGlkbG9rKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCdm9pZCBpZGNvayhXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQnZvaWQgaW1tZWRvayhXSU5ET1cgKndpbiwgYm9vbCBiZik7XGZSCisuYnIKK1xmQmludCBsZWF2ZW9rKFdJTkRPVyAqd2luLCBib29sIGJmKTtcZlIKKy5icgorXGZCaW50IHNldHNjcnJlZyhpbnQgdG9wLCBpbnQgYm90KTtcZlIKKy5icgorXGZCaW50IHdzZXRzY3JyZWcoV0lORE9XICp3aW4sIGludCB0b3AsIGludCBib3QpO1xmUgorLmJyCitcZkJpbnQgc2Nyb2xsb2soV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJpbnQgbmwodm9pZCk7XGZSCisuYnIKK1xmQmludCBub25sKHZvaWQpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIHJvdXRpbmVzIHNldCBvcHRpb25zIHRoYXQgY2hhbmdlIHRoZSBzdHlsZSBvZiBvdXRwdXQgd2l0aGluCitcZkJjdXJzZXNcZlIuCitBbGwgb3B0aW9ucyBhcmUgaW5pdGlhbGx5IFxmQkZBTFNFXGZSLCB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4KK0l0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdHVybiB0aGVzZSBvcHRpb25zIG9mZiBiZWZvcmUgY2FsbGluZyBcZkJlbmR3aW5cZlIuCisuUFAKK0lmIFxmQmNsZWFyb2tcZlIgaXMgY2FsbGVkIHdpdGggXGZCVFJVRVxmUiBhcyBhcmd1bWVudCwgdGhlIG5leHQKK2NhbGwgdG8gXGZCd3JlZnJlc2hcZlIgd2l0aCB0aGlzIHdpbmRvdyB3aWxsIGNsZWFyIHRoZSBzY3JlZW4gY29tcGxldGVseSBhbmQKK3JlZHJhdyB0aGUgZW50aXJlIHNjcmVlbiBmcm9tIHNjcmF0Y2guCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBjb250ZW50cyBvZiB0aGUKK3NjcmVlbiBhcmUgdW5jZXJ0YWluLCBvciBpbiBzb21lIGNhc2VzIGZvciBhIG1vcmUgcGxlYXNpbmcgdmlzdWFsIGVmZmVjdC4KK0lmCit0aGUgXGZJd2luXGZSIGFyZ3VtZW50IHRvIFxmQmNsZWFyb2tcZlIgaXMgdGhlIGdsb2JhbCB2YXJpYWJsZSBcZkJjdXJzY3JcZlIsCit0aGUgbmV4dCBjYWxsIHRvIFxmQndyZWZyZXNoXGZSIHdpdGggYW55IHdpbmRvdyBjYXVzZXMgdGhlIHNjcmVlbiB0byBiZSBjbGVhcmVkCithbmQgcmVwYWludGVkIGZyb20gc2NyYXRjaC4KKy5QUAorSWYgXGZCaWRsb2tcZlIgaXMgY2FsbGVkIHdpdGggXGZCVFJVRVxmUiBhcyBzZWNvbmQgYXJndW1lbnQsIFxmQmN1cnNlc1xmUgorY29uc2lkZXJzIHVzaW5nIHRoZSBoYXJkd2FyZSBpbnNlcnQvZGVsZXRlIGxpbmUgZmVhdHVyZSBvZiB0ZXJtaW5hbHMgc28KK2VxdWlwcGVkLgorQ2FsbGluZyBcZkJpZGxva1xmUiB3aXRoIFxmQkZBTFNFXGZSIGFzIHNlY29uZCBhcmd1bWVudCBkaXNhYmxlcyB1c2UKK29mIGxpbmUgaW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4KK1RoaXMgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9ubHkgaWYgdGhlCithcHBsaWNhdGlvbiBuZWVkcyBpbnNlcnQvZGVsZXRlIGxpbmUsIGZvciBleGFtcGxlLCBmb3IgYSBzY3JlZW4gZWRpdG9yLgorSXQgaXMKK2Rpc2FibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpbnNlcnQvZGVsZXRlIGxpbmUgdGVuZHMgdG8gYmUgdmlzdWFsbHkgYW5ub3lpbmcKK3doZW4gdXNlZCBpbiBhcHBsaWNhdGlvbnMgd2hlcmUgaXQgaXMgbm90IHJlYWxseSBuZWVkZWQuCitJZiBpbnNlcnQvZGVsZXRlIGxpbmUKK2Nhbm5vdCBiZSB1c2VkLCBcZkJjdXJzZXNcZlIgcmVkcmF3cyB0aGUgY2hhbmdlZCBwb3J0aW9ucyBvZiBhbGwgbGluZXMuCisuUFAKK0lmIFxmQmlkY29rXGZSIGlzIGNhbGxlZCB3aXRoIFxmQkZBTFNFXGZSIGFzIHNlY29uZCBhcmd1bWVudCwgXGZCY3Vyc2VzXGZSCitubyBsb25nZXIgY29uc2lkZXJzIHVzaW5nIHRoZSBoYXJkd2FyZSBpbnNlcnQvZGVsZXRlIGNoYXJhY3RlciBmZWF0dXJlIG9mCit0ZXJtaW5hbHMgc28gZXF1aXBwZWQuCitVc2Ugb2YgY2hhcmFjdGVyIGluc2VydC9kZWxldGUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorQ2FsbGluZyBcZkJpZGNva1xmUiB3aXRoIFxmQlRSVUVcZlIgYXMgc2Vjb25kIGFyZ3VtZW50IHJlLWVuYWJsZXMgdXNlCitvZiBjaGFyYWN0ZXIgaW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4KKy5QUAorSWYgXGZCaW1tZWRva1xmUiBpcyBjYWxsZWQgd2l0aCBcZkJUUlVFIGFzIGFyZ3VtZW50XGZSLCBhbnkgY2hhbmdlCitpbiB0aGUgd2luZG93IGltYWdlLCBzdWNoIGFzIHRoZSBvbmVzIGNhdXNlZCBieSBcZkJ3YWRkY2gsIHdjbHJ0b2JvdCwgd3NjcmxcZlIsCitldGMuLCBhdXRvbWF0aWNhbGx5IGNhdXNlIGEgY2FsbCB0byBcZkJ3cmVmcmVzaFxmUi4KK0hvd2V2ZXIsIGl0IG1heQorZGVncmFkZSBwZXJmb3JtYW5jZSBjb25zaWRlcmFibHksIGR1ZSB0byByZXBlYXRlZCBjYWxscyB0byBcZkJ3cmVmcmVzaFxmUi4KK0l0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisuUFAKK05vcm1hbGx5LCB0aGUgaGFyZHdhcmUgY3Vyc29yIGlzIGxlZnQgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSB3aW5kb3cgY3Vyc29yCitiZWluZyByZWZyZXNoZWQuCitUaGUgXGZCbGVhdmVva1xmUiBvcHRpb24gYWxsb3dzIHRoZSBjdXJzb3IgdG8gYmUgbGVmdAord2hlcmV2ZXIgdGhlIHVwZGF0ZSBoYXBwZW5zIHRvIGxlYXZlIGl0LgorSXQgaXMgdXNlZnVsIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUKK3RoZSBjdXJzb3IgaXMgbm90IHVzZWQsIHNpbmNlIGl0IHJlZHVjZXMgdGhlIG5lZWQgZm9yIGN1cnNvciBtb3Rpb25zLgorLlBQCitUaGUgXGZCc2V0c2NycmVnXGZSIGFuZCBcZkJ3c2V0c2NycmVnXGZSIHJvdXRpbmVzIGFsbG93IHRoZSBhcHBsaWNhdGlvbgorcHJvZ3JhbW1lciB0byBzZXQgYSBzb2Z0d2FyZSBzY3JvbGxpbmcgcmVnaW9uIGluIGEgd2luZG93LgorXGZJdG9wXGZSIGFuZAorXGZJYm90XGZSIGFyZSB0aGUgbGluZSBudW1iZXJzIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBtYXJnaW4gb2YgdGhlIHNjcm9sbGluZworcmVnaW9uLgorKExpbmUgMCBpcyB0aGUgdG9wIGxpbmUgb2YgdGhlIHdpbmRvdy4pICBJZiB0aGlzIG9wdGlvbiBhbmQKK1xmQnNjcm9sbG9rXGZSIGFyZSBlbmFibGVkLCBhbiBhdHRlbXB0IHRvIG1vdmUgb2ZmIHRoZSBib3R0b20gbWFyZ2luIGxpbmUKK2NhdXNlcyBhbGwgbGluZXMgaW4gdGhlIHNjcm9sbGluZyByZWdpb24gdG8gc2Nyb2xsIG9uZSBsaW5lIGluIHRoZSBkaXJlY3Rpb24KK29mIHRoZSBmaXJzdCBsaW5lLgorT25seSB0aGUgdGV4dCBvZiB0aGUgd2luZG93IGlzIHNjcm9sbGVkLgorKE5vdGUgdGhhdCB0aGlzCitoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSB1c2Ugb2YgYSBwaHlzaWNhbCBzY3JvbGxpbmcgcmVnaW9uIGNhcGFiaWxpdHkgaW4gdGhlCit0ZXJtaW5hbCwgbGlrZSB0aGF0IGluIHRoZSBWVDEwMC4KK0lmIFxmQmlkbG9rXGZSIGlzIGVuYWJsZWQgYW5kIHRoZSB0ZXJtaW5hbAoraGFzIGVpdGhlciBhIHNjcm9sbGluZyByZWdpb24gb3IgaW5zZXJ0L2RlbGV0ZSBsaW5lIGNhcGFiaWxpdHksIHRoZXkgd2lsbAorcHJvYmFibHkgYmUgdXNlZCBieSB0aGUgb3V0cHV0IHJvdXRpbmVzLikKKy5QUAorVGhlIFxmQnNjcm9sbG9rXGZSIG9wdGlvbiBjb250cm9scyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgY3Vyc29yIG9mIGEgd2luZG93IGlzCittb3ZlZCBvZmYgdGhlIGVkZ2Ugb2YgdGhlIHdpbmRvdyBvciBzY3JvbGxpbmcgcmVnaW9uLCBlaXRoZXIgYXMgYSByZXN1bHQgb2YgYQorbmV3bGluZSBhY3Rpb24gb24gdGhlIGJvdHRvbSBsaW5lLCBvciB0eXBpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBsYXN0CitsaW5lLgorSWYgZGlzYWJsZWQsIChcZkliZlxmUiBpcyBcZkJGQUxTRVxmUiksIHRoZSBjdXJzb3IgaXMgbGVmdCBvbiB0aGUgYm90dG9tCitsaW5lLgorSWYgZW5hYmxlZCwgKFxmSWJmXGZSIGlzIFxmQlRSVUVcZlIpLCB0aGUgd2luZG93IGlzIHNjcm9sbGVkIHVwIG9uZSBsaW5lCisoTm90ZSB0aGF0IHRvIGdldCB0aGUgcGh5c2ljYWwgc2Nyb2xsaW5nIGVmZmVjdCBvbiB0aGUgdGVybWluYWwsIGl0IGlzCithbHNvIG5lY2Vzc2FyeSB0byBjYWxsIFxmQmlkbG9rXGZSKS4KKy5QUAorVGhlIFxmQm5sXGZSIGFuZCBcZkJub25sXGZSIHJvdXRpbmVzIGNvbnRyb2wgd2hldGhlciB0aGUgdW5kZXJseWluZyBkaXNwbGF5CitkZXZpY2UgdHJhbnNsYXRlcyB0aGUgcmV0dXJuIGtleSBpbnRvIG5ld2xpbmUgb24gaW5wdXQsIGFuZCB3aGV0aGVyIGl0Cit0cmFuc2xhdGVzIG5ld2xpbmUgaW50byByZXR1cm4gYW5kIGxpbmUtZmVlZCBvbiBvdXRwdXQgKGluIGVpdGhlciBjYXNlLCB0aGUKK2NhbGwgXGZCYWRkY2goJ1xcbicpXGZSIGRvZXMgdGhlIGVxdWl2YWxlbnQgb2YgcmV0dXJuIGFuZCBsaW5lIGZlZWQgb24gdGhlCit2aXJ0dWFsIHNjcmVlbikuCitJbml0aWFsbHksIHRoZXNlIHRyYW5zbGF0aW9ucyBkbyBvY2N1ci4KK0lmIHlvdSBkaXNhYmxlIHRoZW0KK3VzaW5nIFxmQm5vbmxcZlIsIFxmQmN1cnNlc1xmUiB3aWxsIGJlIGFibGUgdG8gbWFrZSBiZXR0ZXIgdXNlIG9mIHRoZSBsaW5lLWZlZWQKK2NhcGFiaWxpdHksIHJlc3VsdGluZyBpbiBmYXN0ZXIgY3Vyc29yIG1vdGlvbi4KK0Fsc28sIFxmQmN1cnNlc1xmUiB3aWxsIHRoZW4gYmUKK2FibGUgdG8gZGV0ZWN0IHRoZSByZXR1cm4ga2V5LgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9ucyBcZkJzZXRzY3JyZWdcZlIgYW5kIFxmQndzZXRzY3JyZWdcZlIgcmV0dXJuIFxmQk9LXGZSIHVwb24gc3VjY2VzcworYW5kIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUuCitBbGwgb3RoZXIgcm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciBhbHdheXMKK3JldHVybiBcZkJPS1xmUi4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KKy5QUAorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgdGhvc2UgZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIHdpbmRvdyBwb2ludGVyCit3aWxsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbC4KKy5SUworLlRQIDUKKy5CIHdjbHJ0b2VvbAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyBhYm91dCB0byB3cmFwLgorLlRQIDUKKy5CIHdzZXRzY3JyZWcKK3JldHVybnMgYW4gZXJyb3IgaWYgdGhlIHNjcm9sbGluZyByZWdpb24gbGltaXRzIGV4dGVuZCBvdXRzaWRlIHRoZSB3aW5kb3cuCisuUkUKKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK1RoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LgorLlBQCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBpcyBhbWJpZ3VvdXMgb24gdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgXGZCcmF3XGZSKCkKK3Nob3VsZCBkaXNhYmxlIHRoZSBDUkxGIHRyYW5zbGF0aW9ucyBjb250cm9sbGVkIGJ5IFxmQm5sXGZSKCkgYW5kIFxmQm5vbmxcZlIoKS4KK0JTRCBjdXJzZXMgZGlkIHR1cm4gb2ZmIHRoZXNlIHRyYW5zbGF0aW9uczsgQVQmVCBjdXJzZXMgKGF0IGxlYXN0IGFzIGxhdGUgYXMKK1NWcjEpIGRpZCBub3QuCitXZSBjaG9vc2UgdG8gZG8gc28sIG9uIHRoZSB0aGVvcnkgdGhhdCBhIHByb2dyYW1tZXIgcmVxdWVzdGluZworcmF3IGlucHV0IHdhbnRzIGEgY2xlYW4gKGlkZWFsbHkgOC1iaXQgY2xlYW4pIGNvbm5lY3Rpb24gdGhhdCB0aGUgb3BlcmF0aW5nCitzeXN0ZW0gd2lsbCBub3QgYWx0ZXIuCisuUFAKK1NvbWUgaGlzdG9yaWMgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBoYWQsIGFzIGFuIHVuZG9jdW1lbnRlZCBmZWF0dXJlLCB0aGUKK2FiaWxpdHkgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgXGZCY2xlYXJvayguLi4sIDEpXGZSIGJ5IHNheWluZworXGZCdG91Y2h3aW4oc3Rkc2NyKVxmUiBvciBcZkJjbGVhcihzdGRzY3IpXGZSLgorVGhpcyB3aWxsIG5vdCB3b3JrIHVuZGVyCituY3Vyc2VzLgorLlBQCitFYXJsaWVyIFN5c3RlbSBWIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWVkIHRoYXQgd2l0aCBcZkJzY3JvbGxva1xmUgorZW5hYmxlZCwgYW55IHdpbmRvdyBtb2RpZmljYXRpb24gdHJpZ2dlcmluZyBhIHNjcm9sbCBhbHNvIGZvcmNlZCBhIHBoeXNpY2FsCityZWZyZXNoLgorWFNJIEN1cnNlcyBkb2VzIG5vdCByZXF1aXJlIHRoaXMsIGFuZCBcZkJuY3Vyc2VzXGZSIGF2b2lkcyBkb2luZworaXQgdG8gcGVyZm9ybSBiZXR0ZXIgdmVydGljYWwtbW90aW9uIG9wdGltaXphdGlvbiBhdCBcZkJ3cmVmcmVzaFxmUgordGltZS4KKy5QUAorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQgZG9lcyBub3QgbWVudGlvbiB0aGF0IHRoZSBjdXJzb3Igc2hvdWxkIGJlCittYWRlIGludmlzaWJsZSBhcyBhIHNpZGUtZWZmZWN0IG9mIFxmQmxlYXZlb2tcZlIuCitTVnI0IGN1cnNlcyBkb2N1bWVudGF0aW9uIGRvZXMgdGhpcywgYnV0IHRoZSBjb2RlIGRvZXMgbm90LgorVXNlIFxmQmN1cnNfc2V0XGZSIHRvIG1ha2UgdGhlIGN1cnNvciBpbnZpc2libGUuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJjbGVhcm9rXGZSLCBcZkJsZWF2ZW9rXGZSLCBcZkJzY3JvbGxva1xmUiwgXGZCaWRjb2tcZlIsIFxmQm5sXGZSLAorXGZCbm9ubFxmUiBhbmQgXGZCc2V0c2NycmVnXGZSIG1heSBiZSBtYWNyb3MuCisuUFAKK1RoZSBcZkJpbW1lZG9rXGZSIHJvdXRpbmUgaXMgdXNlZnVsIGZvciB3aW5kb3dzIHRoYXQgYXJlIHVzZWQgYXMgdGVybWluYWwKK2VtdWxhdG9ycy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19hZGRjaFxmUigzWCksIFxmQmN1cnNfY2xlYXJcZlIoM1gpLAorXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwgXGZCY3Vyc19zY3JvbGxcZlIoM1gpLCBcZkJjdXJzX3JlZnJlc2hcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX292ZXJsYXkuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19vdmVybGF5LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NmMzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19vdmVybGF5LjN4CkBAIC0wLDAgKzEsODcgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19vdmVybGF5LjN4LHYgMS4xNCAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgJAorLlRIIGN1cnNfb3ZlcmxheSAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQm92ZXJsYXlcZlIsCitcZkJvdmVyd3JpdGVcZlIsCitcZkJjb3B5d2luXGZSIC0gb3ZlcmxheSBhbmQgbWFuaXB1bGF0ZSBvdmVybGFwcGVkIFxmQmN1cnNlc1xmUiB3aW5kb3dzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBvdmVybGF5KGNvbnN0IFdJTkRPVyAqc3Jjd2luLCBXSU5ET1cgKmRzdHdpbik7XGZSCisuYnIKK1xmQmludCBvdmVyd3JpdGUoY29uc3QgV0lORE9XICpzcmN3aW4sIFdJTkRPVyAqZHN0d2luKTtcZlIKKy5icgorXGZCaW50IGNvcHl3aW4oY29uc3QgV0lORE9XICpzcmN3aW4sIFdJTkRPVyAqZHN0d2luLCBpbnQgc21pbnJvdyxcZlIKKyAgICAgIFxmQmludCBzbWluY29sLCBpbnQgZG1pbnJvdywgaW50IGRtaW5jb2wsIGludCBkbWF4cm93LFxmUgorICAgICAgXGZCaW50IGRtYXhjb2wsIGludCBvdmVybGF5KTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQm92ZXJsYXlcZlIgYW5kIFxmQm92ZXJ3cml0ZVxmUiByb3V0aW5lcyBvdmVybGF5IFxmSXNyY3dpblxmUiBvbgordG9wIG9mIFxmSWRzdHdpblxmUi4gIFxmSXNjcndpblxmUiBhbmQgXGZJZHN0d2luXGZSIGFyZSBub3QgcmVxdWlyZWQKK3RvIGJlIHRoZSBzYW1lIHNpemU7IG9ubHkgdGV4dCB3aGVyZSB0aGUgdHdvIHdpbmRvd3Mgb3ZlcmxhcCBpcworY29waWVkLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBcZkJvdmVybGF5XGZSIGlzIG5vbi1kZXN0cnVjdGl2ZQorKGJsYW5rcyBhcmUgbm90IGNvcGllZCkgd2hlcmVhcyBcZkJvdmVyd3JpdGVcZlIgaXMgZGVzdHJ1Y3RpdmUuCisuUFAKK1RoZSBcZkJjb3B5d2luXGZSIHJvdXRpbmUgcHJvdmlkZXMgYSBmaW5lciBncmFudWxhcml0eSBvZiBjb250cm9sIG92ZXIgdGhlCitcZkJvdmVybGF5XGZSIGFuZCBcZkJvdmVyd3JpdGVcZlIgcm91dGluZXMuICBMaWtlIGluIHRoZSBcZkJwcmVmcmVzaFxmUgorcm91dGluZSwgYSByZWN0YW5nbGUgaXMgc3BlY2lmaWVkIGluIHRoZSBkZXN0aW5hdGlvbiB3aW5kb3csIChcZklkbWlucm93XGZSLAorXGZJZG1pbmNvbFxmUikgYW5kIChcZklkbWF4cm93XGZSLCBcZklkbWF4Y29sXGZSKSwgYW5kIHRoZSB1cHBlci1sZWZ0LWNvcm5lcgorY29vcmRpbmF0ZXMgb2YgdGhlIHNvdXJjZSB3aW5kb3csIChcZklzbWlucm93XGZSLCBcZklzbWluY29sXGZSKS4gIElmIHRoZQorYXJndW1lbnQgXGZJb3ZlcmxheVxmUiBpcyBcZkJ0cnVlXGZSLCB0aGVuIGNvcHlpbmcgaXMgbm9uLWRlc3RydWN0aXZlLCBhcyBpbgorXGZCb3ZlcmxheVxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUsIGFuZCBcZkJPS1xmUgorKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24uCisuUFAKK1gvT3BlbiBkZWZpbmVzIG5vIGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uLAorXGZCY29weXdpblxmUCwKK1xmQm92ZXJsYXlcZlAgYW5kIFxmQm92ZXJ3cml0ZVxmUCByZXR1cm4gYW4gZXJyb3IKK2lmIGVpdGhlciBvZiB0aGUgd2luZG93IHBvaW50ZXJzIGFyZSBudWxsLCBvcgoraWYgc29tZSBwYXJ0IG9mIHRoZSB3aW5kb3cgd291bGQgYmUgcGxhY2VkIG9mZi1zY3JlZW4uCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJvdmVybGF5XGZSIGFuZCBcZkJvdmVyd3JpdGVcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucyAoYWRkaW5nIHRoZSBjb25zdAorcXVhbGlmaWVycykuICBJdCBmdXJ0aGVyIHNwZWNpZmllcyB0aGVpciBiZWhhdmlvciBpbiB0aGUgcHJlc2VuY2Ugb2YgY2hhcmFjdGVycword2l0aCBtdWx0aWJ5dGUgcmVuZGl0aW9ucyAobm90IHlldCBzdXBwb3J0ZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfcGFkXGZSKDNYKSwgXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19wYWQuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19wYWQuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyMjIwNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX3BhZC4zeApAQCAtMCwwICsxLDE2MiBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3BhZC4zeCx2IDEuMTQgMjAwNS8wNS8xNSAxNjoxODo0MyB0b20gRXhwICQKKy5USCBjdXJzX3BhZCAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQm5ld3BhZFxmUiwKK1xmQnN1YnBhZFxmUiwKK1xmQnByZWZyZXNoXGZSLAorXGZCcG5vdXRyZWZyZXNoXGZSLAorXGZCcGVjaG9jaGFyXGZSLAorXGZCcGVjaG9fd2NoYXJcZlIgLSBjcmVhdGUgYW5kIGRpc3BsYXkgXGZCY3Vyc2VzXGZSIHBhZHMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCV0lORE9XICpuZXdwYWQoaW50IG5saW5lcywgaW50IG5jb2xzKTtcZlIKKy5icgorXGZCV0lORE9XICpzdWJwYWQoV0lORE9XICpvcmlnLCBpbnQgbmxpbmVzLCBpbnQgbmNvbHMsXGZSCisgICAgICBcZkJpbnQgYmVnaW5feSwgaW50IGJlZ2luX3gpO1xmUgorLmJyCitcZkJpbnQgcHJlZnJlc2goV0lORE9XICpwYWQsIGludCBwbWlucm93LCBpbnQgcG1pbmNvbCxcZlIKKyAgICAgIFxmQmludCBzbWlucm93LCBpbnQgc21pbmNvbCwgaW50IHNtYXhyb3csIGludCBzbWF4Y29sKTtcZlIKKy5icgorXGZCaW50IHBub3V0cmVmcmVzaChXSU5ET1cgKnBhZCwgaW50IHBtaW5yb3csIGludCBwbWluY29sLFxmUgorICAgICAgXGZCaW50IHNtaW5yb3csIGludCBzbWluY29sLCBpbnQgc21heHJvdywgaW50IHNtYXhjb2wpO1xmUgorLmJyCitcZkJpbnQgcGVjaG9jaGFyKFdJTkRPVyAqcGFkLCBjaHR5cGUgY2gpO1xmUgorLmJyCitcZkJpbnQgcGVjaG9fd2NoYXIoV0lORE9XICpwYWQsIGNvbnN0IGNjaGFyX3QgKndjaCk7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJuZXdwYWRcZlIgcm91dGluZSBjcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldyBwYWQgZGF0YQorc3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcywgXGZJbmxpbmVzXGZSLCBhbmQgY29sdW1ucywKK1xmSW5jb2xzXGZSLgorQSBwYWQgaXMgbGlrZSBhIHdpbmRvdywgZXhjZXB0IHRoYXQgaXQgaXMgbm90IHJlc3RyaWN0ZWQgYnkgdGhlCitzY3JlZW4gc2l6ZSwgYW5kIGlzIG5vdCBuZWNlc3NhcmlseSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlCitzY3JlZW4uCitQYWRzIGNhbiBiZSB1c2VkIHdoZW4gYSBsYXJnZSB3aW5kb3cgaXMgbmVlZGVkLCBhbmQgb25seSBhIHBhcnQgb2YgdGhlCit3aW5kb3cgd2lsbCBiZSBvbiB0aGUgc2NyZWVuIGF0IG9uZSB0aW1lLgorQXV0b21hdGljIHJlZnJlc2hlcyBvZiBwYWRzCisoZS5nLiwgZnJvbSBzY3JvbGxpbmcgb3IgZWNob2luZyBvZiBpbnB1dCkgZG8gbm90IG9jY3VyLgorSXQgaXMgbm90CitsZWdhbCB0byBjYWxsIFxmQndyZWZyZXNoXGZSIHdpdGggYSBcZklwYWRcZlIgYXMgYW4gYXJndW1lbnQ7IHRoZSByb3V0aW5lcworXGZCcHJlZnJlc2hcZlIgb3IgXGZCcG5vdXRyZWZyZXNoXGZSIHNob3VsZCBiZSBjYWxsZWQgaW5zdGVhZC4KK05vdGUgdGhhdCB0aGVzZQorcm91dGluZXMgcmVxdWlyZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGUgcGFydCBvZiB0aGUgcGFkIHRvIGJlCitkaXNwbGF5ZWQgYW5kIHRoZSBsb2NhdGlvbiBvbiB0aGUgc2NyZWVuIHRvIGJlIHVzZWQgZm9yIHRoZSBkaXNwbGF5LgorLlBQCitUaGUgXGZCc3VicGFkXGZSIHJvdXRpbmUgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdWJ3aW5kb3cgd2l0aGluIGEKK3BhZCB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMsIFxmSW5saW5lc1xmUiwgYW5kIGNvbHVtbnMsIFxmSW5jb2xzXGZSLgorVW5saWtlIFxmQnN1YndpblxmUiwgd2hpY2ggdXNlcyBzY3JlZW4gY29vcmRpbmF0ZXMsIHRoZSB3aW5kb3cgaXMgYXQgcG9zaXRpb24KKyhcZkliZWdpblxmUl9cZkl4XGZSXGZCLFxmUiBcZkliZWdpblxmUl9cZkl5XGZSKSBvbiB0aGUgcGFkLgorVGhlIHdpbmRvdyBpcworbWFkZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSB3aW5kb3cgXGZJb3JpZ1xmUiwgc28gdGhhdCBjaGFuZ2VzIG1hZGUgdG8gb25lIHdpbmRvdworYWZmZWN0IGJvdGggd2luZG93cy4KK0R1cmluZyB0aGUgdXNlIG9mIHRoaXMgcm91dGluZSwgaXQgd2lsbCBvZnRlbiBiZQorbmVjZXNzYXJ5IHRvIGNhbGwgXGZCdG91Y2h3aW5cZlIgb3IgXGZCdG91Y2hsaW5lXGZSIG9uIFxmSW9yaWdcZlIgYmVmb3JlCitjYWxsaW5nIFxmQnByZWZyZXNoXGZSLgorLlBQCitUaGUgXGZCcHJlZnJlc2hcZlIgYW5kIFxmQnBub3V0cmVmcmVzaFxmUiByb3V0aW5lcyBhcmUgYW5hbG9nb3VzIHRvCitcZkJ3cmVmcmVzaFxmUiBhbmQgXGZCd25vdXRyZWZyZXNoXGZSIGV4Y2VwdCB0aGF0IHRoZXkgcmVsYXRlIHRvIHBhZHMgaW5zdGVhZAorb2Ygd2luZG93cy4KK1RoZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIG5lZWRlZCB0byBpbmRpY2F0ZSB3aGF0IHBhcnQgb2YgdGhlCitwYWQgYW5kIHNjcmVlbiBhcmUgaW52b2x2ZWQuCitcZklwbWlucm93XGZSIGFuZCBcZklwbWluY29sXGZSIHNwZWNpZnkgdGhlIHVwcGVyCitsZWZ0LWhhbmQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwYWQuCitcZklzbWlucm93XGZSLAorXGZJc21pbmNvbFxmUiwgXGZJc21heHJvd1xmUiwgYW5kIFxmSXNtYXhjb2xcZlIgc3BlY2lmeSB0aGUgZWRnZXMgb2YgdGhlCityZWN0YW5nbGUgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uCitUaGUgbG93ZXIgcmlnaHQtaGFuZCBjb3JuZXIgb2YgdGhlCityZWN0YW5nbGUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwYWQgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBzY3JlZW4gY29vcmRpbmF0ZXMsCitzaW5jZSB0aGUgcmVjdGFuZ2xlcyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuCitCb3RoIHJlY3RhbmdsZXMgbXVzdCBiZSBlbnRpcmVseQorY29udGFpbmVkIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHN0cnVjdHVyZXMuCitOZWdhdGl2ZSB2YWx1ZXMgb2YKK1xmSXBtaW5yb3dcZlIsIFxmSXBtaW5jb2xcZlIsIFxmSXNtaW5yb3dcZlIsIG9yIFxmSXNtaW5jb2xcZlIgYXJlIHRyZWF0ZWQgYXMgaWYKK3RoZXkgd2VyZSB6ZXJvLgorLlBQCitUaGUgXGZCcGVjaG9jaGFyXGZSIHJvdXRpbmUgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gYSBjYWxsIHRvIFxmQmFkZGNoXGZSCitmb2xsb3dlZCBieSBhIGNhbGwgdG8gXGZCcmVmcmVzaFxmUiwgYSBjYWxsIHRvIFxmQndhZGRjaFxmUiBmb2xsb3dlZCBieSBhIGNhbGwKK3RvIFxmQndyZWZyZXNoXGZSLCBvciBhIGNhbGwgdG8gXGZCd2FkZGNoXGZSIGZvbGxvd2VkIGJ5IGEgY2FsbCB0bworXGZCcHJlZnJlc2hcZlIuCitUaGUga25vd2xlZGdlIHRoYXQgb25seSBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMgYmVpbmcgb3V0cHV0IGlzCit0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYW5kLCBmb3Igbm9uLWNvbnRyb2wgY2hhcmFjdGVycywgYSBjb25zaWRlcmFibGUKK3BlcmZvcm1hbmNlIGdhaW4gbWlnaHQgYmUgc2VlbiBieSB1c2luZyB0aGVzZSByb3V0aW5lcyBpbnN0ZWFkIG9mIHRoZWlyCitlcXVpdmFsZW50cy4KK0luIHRoZSBjYXNlIG9mIFxmQnBlY2hvY2hhclxmUiwgdGhlIGxhc3QgbG9jYXRpb24gb2YgdGhlIHBhZCBvbgordGhlIHNjcmVlbiBpcyByZXVzZWQgZm9yIHRoZSBhcmd1bWVudHMgdG8gXGZCcHJlZnJlc2hcZlIuCisuUFAKK1RoZSBcZkJwZWNob193Y2hhclxmUiBmdW5jdGlvbiBpcyB0aGUgYW5hbG9nb3VzIHdpZGUtY2hhcmFjdGVyCitmb3JtIG9mIFxmQnBlY2hvY2hhclxmUi4KK0l0IG91dHB1dHMgb25lIGNoYXJhY3RlciB0byBhIHBhZCBhbmQgaW1tZWRpYXRlbHkgcmVmcmVzaGVzIHRoZSBwYWQuCitJdCBkb2VzIHRoaXMgYnkgYSBjYWxsIHRvIFxmQndhZGRfd2NoXGZSIGZvbGxvd2VkIGJ5IGEgY2FsbCB0byBcZkJwcmVmcmVzaFxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSCisoU1ZyNCBvbmx5IHNwZWNpZmllcyAiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4KKy5QUAorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IsIGFuZCBzZXQgXGZCZXJybm9cZlIKK3RvIFxmQkVOT01FTVxmUi4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KKy5SUworLlRQIDUKK1xmQnByZWZyZXNoXGZQIGFuZCBcZkJwbm91dHJlZnJlc2hcZlAKK3JldHVybiBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsIG9yCitpZiB0aGUgd2luZG93IGlzIG5vdCByZWFsbHkgYSBwYWQgb3IKK2lmIHRoZSBhcmVhIHRvIHJlZnJlc2ggZXh0ZW5kcyBvZmYtc2NyZWVuIG9yCitpZiB0aGUgbWluaW11bSBjb29yZGluYXRlcyBhcmUgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtLgorLlRQIDUKK1xmQnBlY2hvY2hhclxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBpcyBub3QgcmVhbGx5IGEgcGFkLCBhbmQgdGhlIGFzc29jaWF0ZWQgY2FsbAordG8gXGZCd2VjaG9jaGFyXGZQIHJldHVybnMgYW4gZXJyb3IuCisuVFAgNQorXGZCcGVjaG9fd2NoYXJcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgaXMgbm90IHJlYWxseSBhIHBhZCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNhbGwKK3RvIFxmQndlY2hvX3djaGFyXGZQIHJldHVybnMgYW4gZXJyb3IuCisuUkUKKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQnBlY2hvY2hhclxmUiBtYXkgYmUgYSBtYWNyby4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19yZWZyZXNoXGZSKDNYKSwgXGZCY3Vyc190b3VjaFxmUigzWCksIFxmQmN1cnNfYWRkY2hcZlIoM1gpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19wcmludC4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX3ByaW50LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjljYTIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19wcmludC4zeApAQCAtMCwwICsxLDc0IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfcHJpbnQuM3gsdiAxLjggMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwICQKKy5USCBjdXJzX3ByaW50IDNYICIiCisuU0ggTkFNRQorXGZCbWNwcmludFxmUiAtIHNoaXAgYmluYXJ5IGRhdGEgdG8gcHJpbnRlcgorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBtY3ByaW50KGNoYXIgKmRhdGEsIGludCBsZW4pO1xmUgorLlNIIERFU0NSSVBUSU9OCitUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIFxmQm1jNXBcZlIgb3IgXGZCbWM0XGZSIGFuZCBcZkJtYzVcZlIgY2FwYWJpbGl0aWVzLAoraWYgdGhleSBhcmUgcHJlc2VudCwgdG8gc2hpcCBnaXZlbiBkYXRhIHRvIGEgcHJpbnRlciBhdHRhY2hlZCB0byB0aGUgdGVybWluYWwuCisuUFAKK05vdGUgdGhhdCB0aGUgXGZCbWNwcmludFxmUiBjb2RlIGhhcyBubyB3YXkgdG8gZG8gZmxvdyBjb250cm9sIHdpdGggdGhlIHByaW50ZXIKK29yIHRvIGtub3cgaG93IG11Y2ggYnVmZmVyaW5nIGl0IGhhcy4gIFlvdXIgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgZm9yCitrZWVwaW5nIHRoZSByYXRlIG9mIHdyaXRlcyB0byB0aGUgcHJpbnRlciBiZWxvdyBpdHMgY29udGludW91cyB0aHJvdWdocHV0IHJhdGUKKyh0eXBpY2FsbHkgYWJvdXQgaGFsZiBvZiBpdHMgbm9taW5hbCBjcHMgcmF0aW5nKS4gIERvdC1tYXRyaXggcHJpbnRlcnMgYW5kCis2LXBhZ2UtcGVyLW1pbnV0ZSBsYXNlcnMgY2FuIHR5cGljYWxseSBoYW5kbGUgODBjcHMsIHNvIGEgZ29vZCBjb25zZXJ2YXRpdmUKK3J1bGUgb2YgdGh1bWIgaXMgdG8gc2xlZXAgZm9yIGEgc2Vjb25kIGFmdGVyIHNoaXBwaW5nIGVhY2ggODAtY2hhcmFjdGVyIGxpbmUuCisuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgXGZCbWNwcmludFxmUiBmdW5jdGlvbiByZXR1cm5zIFxmQkVSUlxmUiBpZiB0aGUgd3JpdGUgb3BlcmF0aW9uIGFib3J0ZWQKK2ZvciBzb21lIHJlYXNvbi4gIEluIHRoaXMgY2FzZSwgZXJybm8gd2lsbCBjb250YWluIGVpdGhlciBhbiBlcnJvciBhc3NvY2lhdGVkCit3aXRoIFxmQndyaXRlKDIpXGZSIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKK0VOT0RFVgorQ2FwYWJpbGl0aWVzIGZvciBwcmludGVyIHJlZGlyZWN0aW9uIGRvIG5vdCBleGlzdC4KKy5UUCA1CitFTk9NRU0KK0NvdWxkbid0IGFsbG9jYXRlIHN1ZmZpY2llbnQgbWVtb3J5IHRvIGJ1ZmZlciB0aGUgcHJpbnRlciB3cml0ZS4KKy5QUAorV2hlbiBcZkJtY3ByaW50XGZSIHN1Y2NlZWRzLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseQorc2VudCB0byB0aGUgcHJpbnRlci4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFxmQm1jcHJpbnRcZlIgY2FsbCB3YXMgZGVzaWduZWQgZm9yIFxmQm5jdXJzZXNcZlIoM1gpLCBhbmQgaXMgbm90IGZvdW5kCitpbiBTVnI0IGN1cnNlcywgNC40QlNEIGN1cnNlcywgb3IgYW55IG90aGVyIHByZXZpb3VzIHZlcnNpb24gb2YgY3Vyc2VzLgorLlNIIEJVR1MKK1BhZGRpbmcgaW4gdGhlIFxmQm1jNXBcZlIsIFxmQm1jNFxmUiBhbmQgXGZCbWM1XGZSIGNhcGFiaWxpdGllcyB3aWxsIG5vdCBiZQoraW50ZXJwcmV0ZWQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWClcZlIKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfcHJpbnR3LjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfcHJpbnR3LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDBmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19wcmludHcuM3gKQEAgLTAsMCArMSw5NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3ByaW50dy4zeCx2IDEuMTcgMjAwNi8xMi8yNCAxNjowNToxNyB0b20gRXhwICQKKy5USCBjdXJzX3ByaW50dyAzWCAiIgorLm5hCisuaHkgMAorLlNIIE5BTUUKK1xmQnByaW50d1xmUiwKK1xmQndwcmludHdcZlIsCitcZkJtdnByaW50d1xmUiwKK1xmQm12d3ByaW50d1xmUiwKK1xmQnZ3cHJpbnR3XGZSLCBcZkJ2d19wcmludHdcZlIgLSBwcmludCBmb3JtYXR0ZWQgb3V0cHV0IGluIFxmQmN1cnNlc1xmUiB3aW5kb3dzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBwcmludHcoY29uc3QgY2hhciAqZm10LCAuLi4pO1xmUgorLmJyCitcZkJpbnQgd3ByaW50dyhXSU5ET1cgKndpbiwgY29uc3QgY2hhciAqZm10LCAuLi4pO1xmUgorLmJyCitcZkJpbnQgbXZwcmludHcoaW50IHksIGludCB4LCBjb25zdCBjaGFyICpmbXQsIC4uLik7XGZSCisuYnIKK1xmQmludCBtdndwcmludHcoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY29uc3QgY2hhciAqZm10LCAuLi4pO1xmUgorLmJyCitcZkJpbnQgdndwcmludHcoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2YXJnbGlzdCk7XGZSCisuYnIKK1xmQmludCB2d19wcmludHcoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2YXJnbGlzdCk7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQnByaW50d1xmUiwgXGZCd3ByaW50d1xmUiwgXGZCbXZwcmludHdcZlIgYW5kIFxmQm12d3ByaW50d1xmUgorcm91dGluZXMgYXJlIGFuYWxvZ291cyB0byBcZkJwcmludGZcZlIgW3NlZSBcZkJwcmludGZcZlIoMyldLiAgSW4KK2VmZmVjdCwgdGhlIHN0cmluZyB0aGF0IHdvdWxkIGJlIG91dHB1dCBieSBcZkJwcmludGZcZlIgaXMgb3V0cHV0CitpbnN0ZWFkIGFzIHRob3VnaCBcZkJ3YWRkc3RyXGZSIHdlcmUgdXNlZCBvbiB0aGUgZ2l2ZW4gd2luZG93LgorLlBQCitUaGUgXGZCdndwcmludHdcZlIgYW5kIFxmQnd2X3ByaW50d1xmUiByb3V0aW5lcyBhcmUgYW5hbG9nb3VzCit0byBcZkJ2cHJpbnRmXGZSIFtzZWUgXGZCcHJpbnRmXGZSKDMpXQorYW5kIHBlcmZvcm0gYSBcZkJ3cHJpbnR3XGZSIHVzaW5nIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KK1RoZSB0aGlyZCBhcmd1bWVudCBpcyBhIFxmQnZhX2xpc3RcZlIsIGEgcG9pbnRlciB0byBhCitsaXN0IG9mIGFyZ3VtZW50cywgYXMgZGVmaW5lZCBpbiBcZkI8c3RkYXJnLmg+XGZSLgorLlNIIFJFVFVSTiBWQUxVRQorUm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIKKyhTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwKK2FuIGVycm9yIG1heSBiZSByZXR1cm5lZCBpZiBpdCBjYW5ub3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlCitidWZmZXIgdXNlZCB0byBmb3JtYXQgdGhlIHJlc3VsdHMuCitJdCB3aWxsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbC4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucy4gIFRoZSBmdW5jdGlvbgorXGZCdndwcmludHdcZlIgaXMgbWFya2VkIFRPIEJFIFdJVEhEUkFXTiwgYW5kIGlzIHRvIGJlIHJlcGxhY2VkIGJ5IGEgZnVuY3Rpb24KK1xmQnZ3X3ByaW50d1xmUiB1c2luZyB0aGUgXGZCPHN0ZGFyZy5oPlxmUiBpbnRlcmZhY2UuCitUaGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbiwgVmVyc2lvbiAyIHN0YXRlcyB0aGF0CitcZkJ2d19wcmludHdcZlIgIGlzIHByZWZlcnJlZCB0byBcZkJ2d3ByaW50d1xmUiBzaW5jZSB0aGUgbGF0dGVyIHJlcXVpcmVzCitpbmNsdWRpbmcgXGZCPHZhcmFyZ3MuaD5cZlIsIHdoaWNoCitjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBmaWxlIGFzIFxmQjxzdGRhcmcuaD5cZlIuCitUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgXGZCPHN0ZGFyZy5oPlxmUiBmb3IgYm90aCwgYmVjYXVzZSB0aGF0IGhlYWRlcgoraXMgaW5jbHVkZWQgaW4gXGZCPGN1cnNlcy5oXGZSPi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCcHJpbnRmXGZSKDMpLCBcZkJ2cHJpbnRmKDMpXGZSCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX3JlZnJlc2guM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19yZWZyZXNoLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTA2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19yZWZyZXNoLjN4CkBAIC0wLDAgKzEsMTQ0IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfcmVmcmVzaC4zeCx2IDEuMTIgMjAwNS8wNS8xNSAxNjoxODo0OSB0b20gRXhwICQKKy5USCBjdXJzX3JlZnJlc2ggM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJkb3VwZGF0ZVxmUiwKK1xmQnJlZHJhd3dpblxmUiwKK1xmQnJlZnJlc2hcZlIsCitcZkJ3bm91dHJlZnJlc2hcZlIsCitcZkJ3cmVkcmF3bG5cZlIsCitcZkJ3cmVmcmVzaFxmUiAtIHJlZnJlc2ggXGZCY3Vyc2VzXGZSIHdpbmRvd3MgYW5kIGxpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCByZWZyZXNoKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgd3JlZnJlc2goV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgd25vdXRyZWZyZXNoKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IGRvdXBkYXRlKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgcmVkcmF3d2luKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IHdyZWRyYXdsbihXSU5ET1cgKndpbiwgaW50IGJlZ19saW5lLCBpbnQgbnVtX2xpbmVzKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCcmVmcmVzaFxmUiBhbmQgXGZCd3JlZnJlc2hcZlIgcm91dGluZXMgKG9yIFxmQndub3V0cmVmcmVzaFxmUiBhbmQKK1xmQmRvdXBkYXRlXGZSKSBtdXN0IGJlIGNhbGxlZCB0byBnZXQgYWN0dWFsIG91dHB1dCB0byB0aGUgdGVybWluYWwsIGFzIG90aGVyCityb3V0aW5lcyBtZXJlbHkgbWFuaXB1bGF0ZSBkYXRhIHN0cnVjdHVyZXMuCitUaGUgcm91dGluZSBcZkJ3cmVmcmVzaFxmUiBjb3BpZXMKK3RoZSBuYW1lZCB3aW5kb3cgdG8gdGhlIHBoeXNpY2FsIHRlcm1pbmFsIHNjcmVlbiwgdGFraW5nIGludG8gYWNjb3VudCB3aGF0IGlzCithbHJlYWR5IHRoZXJlIHRvIGRvIG9wdGltaXphdGlvbnMuCitUaGUgXGZCcmVmcmVzaFxmUiByb3V0aW5lIGlzIHRoZQorc2FtZSwgdXNpbmcgXGZCc3Rkc2NyXGZSIGFzIHRoZSBkZWZhdWx0IHdpbmRvdy4KK1VubGVzcyBcZkJsZWF2ZW9rXGZSIGhhcyBiZWVuCitlbmFibGVkLCB0aGUgcGh5c2ljYWwgY3Vyc29yIG9mIHRoZSB0ZXJtaW5hbCBpcyBsZWZ0IGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUKK2N1cnNvciBmb3IgdGhhdCB3aW5kb3cuCisuUFAKK1RoZSBcZkJ3bm91dHJlZnJlc2hcZlIgYW5kIFxmQmRvdXBkYXRlXGZSIHJvdXRpbmVzIGFsbG93IG11bHRpcGxlIHVwZGF0ZXMgd2l0aAorbW9yZSBlZmZpY2llbmN5IHRoYW4gXGZCd3JlZnJlc2hcZlIgYWxvbmUuCitJbiBhZGRpdGlvbiB0byBhbGwgdGhlIHdpbmRvdworc3RydWN0dXJlcywgXGZCY3Vyc2VzXGZSIGtlZXBzIHR3byBkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSB0ZXJtaW5hbAorc2NyZWVuOiBhIHBoeXNpY2FsIHNjcmVlbiwgZGVzY3JpYmluZyB3aGF0IGlzIGFjdHVhbGx5IG9uIHRoZSBzY3JlZW4sIGFuZCBhCit2aXJ0dWFsIHNjcmVlbiwgZGVzY3JpYmluZyB3aGF0IHRoZSBwcm9ncmFtbWVyIHdhbnRzIHRvIGhhdmUgb24gdGhlIHNjcmVlbi4KKy5QUAorVGhlIHJvdXRpbmUgXGZCd3JlZnJlc2hcZlIgd29ya3MgYnkgZmlyc3QgY2FsbGluZyBcZkJ3bm91dHJlZnJlc2hcZlIsIHdoaWNoCitjb3BpZXMgdGhlIG5hbWVkIHdpbmRvdyB0byB0aGUgdmlydHVhbCBzY3JlZW4sIGFuZCB0aGVuIGNhbGxpbmcgXGZCZG91cGRhdGVcZlIsCit3aGljaCBjb21wYXJlcyB0aGUgdmlydHVhbCBzY3JlZW4gdG8gdGhlIHBoeXNpY2FsIHNjcmVlbiBhbmQgZG9lcyB0aGUgYWN0dWFsCit1cGRhdGUuCitJZiB0aGUgcHJvZ3JhbW1lciB3aXNoZXMgdG8gb3V0cHV0IHNldmVyYWwgd2luZG93cyBhdCBvbmNlLCBhIHNlcmllcworb2YgY2FsbHMgdG8gXGZCd3JlZnJlc2hcZlIgcmVzdWx0cyBpbiBhbHRlcm5hdGluZyBjYWxscyB0byBcZkJ3bm91dHJlZnJlc2hcZlIKK2FuZCBcZkJkb3VwZGF0ZVxmUiwgY2F1c2luZyBzZXZlcmFsIGJ1cnN0cyBvZiBvdXRwdXQgdG8gdGhlIHNjcmVlbi4KK0J5IGZpcnN0CitjYWxsaW5nIFxmQndub3V0cmVmcmVzaFxmUiBmb3IgZWFjaCB3aW5kb3csIGl0IGlzIHRoZW4gcG9zc2libGUgdG8gY2FsbAorXGZCZG91cGRhdGVcZlIgb25jZSwgcmVzdWx0aW5nIGluIG9ubHkgb25lIGJ1cnN0IG9mIG91dHB1dCwgd2l0aCBmZXdlciB0b3RhbAorY2hhcmFjdGVycyB0cmFuc21pdHRlZCBhbmQgbGVzcyBDUFUgdGltZSB1c2VkLgorSWYgdGhlIFxmSXdpblxmUiBhcmd1bWVudCB0bworXGZCd3JlZnJlc2hcZlIgaXMgdGhlIGdsb2JhbCB2YXJpYWJsZSBcZkJjdXJzY3JcZlIsIHRoZSBzY3JlZW4gaXMgaW1tZWRpYXRlbHkKK2NsZWFyZWQgYW5kIHJlcGFpbnRlZCBmcm9tIHNjcmF0Y2guCisuUFAKK1RoZSBwaHJhc2UgImNvcGllcyB0aGUgbmFtZWQgd2luZG93IHRvIHRoZSB2aXJ0dWFsIHNjcmVlbiIgYWJvdmUgaXMgYW1iaWd1b3VzLgorV2hhdCBhY3R1YWxseSBoYXBwZW5zIGlzIHRoYXQgYWxsIFxmSXRvdWNoZWRcZlIgKGNoYW5nZWQpIGxpbmVzIGluIHRoZSB3aW5kb3cKK2FyZSBjb3BpZWQgdG8gdGhlIHZpcnR1YWwgc2NyZWVuLgorVGhpcyBhZmZlY3RzIHByb2dyYW1zIHRoYXQgdXNlIG92ZXJsYXBwaW5nCit3aW5kb3dzOyBpdCBtZWFucyB0aGF0IGlmIHR3byB3aW5kb3dzIG92ZXJsYXAsIHlvdSBjYW4gcmVmcmVzaCB0aGVtIGluIGVpdGhlcgorb3JkZXIgYW5kIHRoZSBvdmVybGFwIHJlZ2lvbiB3aWxsIGJlIG1vZGlmaWVkIG9ubHkgd2hlbiBpdCBpcyBleHBsaWNpdGx5CitjaGFuZ2VkLgorKEJ1dCBzZWUgdGhlIHNlY3Rpb24gb24gXGZCUE9SVEFCSUxJVFlcZlIgYmVsb3cgZm9yIGEgd2FybmluZyBhYm91dAorZXhwbG9pdGluZyB0aGlzIGJlaGF2aW9yLikKKy5QUAorVGhlIFxmQndyZWRyYXdsblxmUiByb3V0aW5lIGluZGljYXRlcyB0byBcZkJjdXJzZXNcZlIgdGhhdCBzb21lIHNjcmVlbiBsaW5lcworYXJlIGNvcnJ1cHRlZCBhbmQgc2hvdWxkIGJlIHRocm93biBhd2F5IGJlZm9yZSBhbnl0aGluZyBpcyB3cml0dGVuIG92ZXIgdGhlbS4KK0l0IHRvdWNoZXMgdGhlIGluZGljYXRlZCBsaW5lcyAobWFya2luZyB0aGVtIGNoYW5nZWQpLgorVGhlIHJvdXRpbmUgXGZCcmVkcmF3d2luXGZSKCkgdG91Y2hlcyB0aGUgZW50aXJlIHdpbmRvdy4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUsIGFuZCBcZkJPS1xmUgorKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24uCisuUFAKK1gvT3BlbiBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitJbiB0aGlzIGltcGxlbWVudGF0aW9uCisuUlMKKy5UUCA1CitcZkJ3bm91dHJlZnJlc2hcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgdGhlIHdpbmRvdyBpcyByZWFsbHkgYSBwYWQuCisuVFAgNQorXGZCd3JlZHJhd2xuXGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgYXNzb2NpYXRlZCBjYWxsIHRvIFxmQnRvdWNobG5cZlAgcmV0dXJucyBhbiBlcnJvci4KKy5SRQorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCcmVmcmVzaFxmUiBhbmQgXGZCcmVkcmF3d2luXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMuCisuUFAKK1doZXRoZXIgXGZCd25vdXRyZWZyZXNoKClcZlIgY29waWVzIHRvIHRoZSB2aXJ0dWFsIHNjcmVlbiB0aGUgZW50aXJlIGNvbnRlbnRzCitvZiBhIHdpbmRvdyBvciBqdXN0IGl0cyBjaGFuZ2VkIHBvcnRpb25zIGhhcyBuZXZlciBiZWVuIHdlbGwtZG9jdW1lbnRlZCBpbgoraGlzdG9yaWMgY3Vyc2VzIHZlcnNpb25zIChpbmNsdWRpbmcgU1ZyNCkuCitJdCBtaWdodCBiZSB1bndpc2UgdG8gcmVseSBvbgorZWl0aGVyIGJlaGF2aW9yIGluIHByb2dyYW1zIHRoYXQgbWlnaHQgaGF2ZSB0byBiZSBsaW5rZWQgd2l0aCBvdGhlciBjdXJzZXMKK2ltcGxlbWVudGF0aW9ucy4KK0luc3RlYWQsIHlvdSBjYW4gZG8gYW4gZXhwbGljaXQgXGZCdG91Y2h3aW4oKVxmUiBiZWZvcmUgdGhlCitcZkJ3bm91dHJlZnJlc2goKVxmUiBjYWxsIHRvIGd1YXJhbnRlZSBhbiBlbnRpcmUtY29udGVudHMgY29weSBhbnl3aGVyZS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19zY2Fudy4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX3NjYW53LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYmE5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19zY2Fudy4zeApAQCAtMCwwICsxLDk3IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfc2NhbncuM3gsdiAxLjE0IDIwMDYvMTIvMjQgMTY6MDU6NDkgdG9tIEV4cCAkCisuVEggY3Vyc19zY2FudyAzWCAiIgorLlNIIE5BTUUKK1xmQnNjYW53XGZSLAorXGZCd3NjYW53XGZSLAorXGZCbXZzY2Fud1xmUiwKK1xmQm12d3NjYW53XGZSLAorXGZCdndzY2Fud1xmUiwgXGZCdndfc2NhbndcZlIgLSBjb252ZXJ0IGZvcm1hdHRlZCBpbnB1dCBmcm9tIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBzY2FudyhjaGFyICpmbXQsIC4uLik7XGZSCisuYnIKK1xmQmludCB3c2NhbncoV0lORE9XICp3aW4sIGNoYXIgKmZtdCwgLi4uKTtcZlIKKy5icgorXGZCaW50IG12c2NhbncoaW50IHksIGludCB4LCBjaGFyICpmbXQsIC4uLik7XGZSCisuYnIKK1xmQmludCBtdndzY2FudyhXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaGFyICpmbXQsIC4uLik7XGZSCisuYnIKK1xmQmludCB2d19zY2FudyhXSU5ET1cgKndpbiwgY2hhciAqZm10LCB2YV9saXN0IHZhcmdsaXN0KTtcZlIKKy5icgorXGZCaW50IHZ3c2NhbncoV0lORE9XICp3aW4sIGNoYXIgKmZtdCwgdmFfbGlzdCB2YXJnbGlzdCk7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJzY2Fud1xmUiwgXGZCd3NjYW53XGZSIGFuZCBcZkJtdnNjYW53XGZSIHJvdXRpbmVzIGFyZSBhbmFsb2dvdXMgdG8KK1xmQnNjYW5mXGZSIFtzZWUgXGZCc2NhbmZcZlIoMyldLiAgVGhlIGVmZmVjdCBvZiB0aGVzZSByb3V0aW5lcyBpcyBhcyB0aG91Z2gKK1xmQndnZXRzdHJcZlIgd2VyZSBjYWxsZWQgb24gdGhlIHdpbmRvdywgYW5kIHRoZSByZXN1bHRpbmcgbGluZSB1c2VkIGFzIGlucHV0Citmb3IgXGZCc3NjYW5mXGZSKDMpLiAgRmllbGRzIHdoaWNoIGRvIG5vdCBtYXAgdG8gYSB2YXJpYWJsZSBpbiB0aGUgXGZJZm10XGZSCitmaWVsZCBhcmUgbG9zdC4KKy5QUAorVGhlIFxmQnZ3c2NhbndcZlIgYW5kIFxmQnZ3X3NjYW53XGZSIHJvdXRpbmVzIGFyZSBhbmFsb2dvdXMgdG8gXGZCdnNjYW5mXGZSLgorVGhleSBwZXJmb3JtIGEgXGZCd3NjYW53XGZSIHVzaW5nIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KK1RoZSB0aGlyZCBhcmd1bWVudCBpcyBhIFxmSXZhX2xpc3RcZlIsCithIHBvaW50ZXIgdG8gYSBsaXN0IG9mIGFyZ3VtZW50cywgYXMgZGVmaW5lZCBpbiBcZkI8c3RkYXJnLmg+XGZSLgorLlNIIFJFVFVSTiBWQUxVRQorXGZCdndzY2Fud1xmUiByZXR1cm5zIFxmQkVSUlxmUiBvbiBmYWlsdXJlIGFuZCBhbiBpbnRlZ2VyIGVxdWFsIHRvIHRoZQorbnVtYmVyIG9mIGZpZWxkcyBzY2FubmVkIG9uIHN1Y2Nlc3MuCisuUFAKK0FwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgXGZCc2NhbndcZlIsIFxmQndzY2Fud1xmUiwKK1xmQm12c2NhbndcZlIgYW5kIFxmQm12d3NjYW53XGZSIHJvdXRpbmVzIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGZpZWxkcword2hpY2ggd2VyZSBtYXBwZWQgaW4gdGhlIGNhbGwuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMuICBUaGUgZnVuY3Rpb24KK1xmQnZ3c2NhbndcZlIgaXMgbWFya2VkIFRPIEJFIFdJVEhEUkFXTiwgYW5kIGlzIHRvIGJlIHJlcGxhY2VkIGJ5IGEgZnVuY3Rpb24KK1xmQnZ3X3NjYW53XGZSIHVzaW5nIHRoZSBcZkI8c3RkYXJnLmg+XGZSIGludGVyZmFjZS4KK1RoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDIgc3RhdGVzIHRoYXQKK1xmQnZ3X3NjYW53XGZSICBpcyBwcmVmZXJyZWQgdG8gXGZCdndzY2Fud1xmUiBzaW5jZSB0aGUgbGF0dGVyIHJlcXVpcmVzCitpbmNsdWRpbmcgXGZCPHZhcmFyZ3MuaD5cZlIsIHdoaWNoCitjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBmaWxlIGFzIFxmQjxzdGRhcmcuaD5cZlIuCitUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgXGZCPHN0ZGFyZy5oPlxmUiBmb3IgYm90aCwgYmVjYXVzZSB0aGF0IGhlYWRlcgoraXMgaW5jbHVkZWQgaW4gXGZCPGN1cnNlcy5oXGZSPi4KKy5MUAorQm90aCBYU0kgYW5kIFRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uLCBWZXJzaW9uIDIgc3RhdGUgdGhhdCB0aGVzZQorZnVuY3Rpb25zIHJldHVybiBFUlIgb3IgT0suCitTaW5jZSB0aGUgdW5kZXJseWluZyBcZkJzY2FuZlxmUiBjYW4gcmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgc2Nhbm5lZCwKK2FuZCB0aGUgU1ZyNCBjb2RlIHdhcyBkb2N1bWVudGVkIHRvIHVzZSB0aGlzIGZlYXR1cmUsCit0aGlzIGlzIHByb2JhYmx5IGFuIGVkaXRpbmcgZXJyb3Igd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gWFNJLAorcmF0aGVyIHRoYW4gYmVpbmcgZG9uZSBpbnRlbnRpb25hbGx5LgorUG9ydGFibGUgYXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHRlc3QgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBFUlIsCitzaW5jZSB0aGUgT0sgdmFsdWUgKHplcm8pIGlzIGxpa2VseSB0byBiZSBtaXNsZWFkaW5nLgorT25lIHBvc3NpYmxlIHdheSB0byBnZXQgdXNlZnVsIHJlc3VsdHMgd291bGQgYmUgdG8gdXNlIGEgIiVuIiBjb252ZXJzaW9uCithdCB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRvIGVuc3VyZSB0aGF0IHNvbWV0aGluZyB3YXMgcHJvY2Vzc2VkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX2dldHN0clxmUigzWCksIFxmQmN1cnNfcHJpbnR3XGZSKDNYKSwgXGZCc2NhbmZcZlIoMykKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfc2NyX2R1bXAuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19zY3JfZHVtcC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODg0ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfc2NyX2R1bXAuM3gKQEAgLTAsMCArMSwxMDIgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19zY3JfZHVtcC4zeCx2IDEuNyAyMDA2LzEyLzI0IDE2OjA1OjQ5IHRvbSBFeHAgJAorLlRIIGN1cnNfc2NyX2R1bXAgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJzY3JfZHVtcFxmUiwKK1xmQnNjcl9yZXN0b3JlXGZSLAorXGZCc2NyX2luaXRcZlIsCitcZkJzY3Jfc2V0XGZSIC0gcmVhZCAod3JpdGUpIGEgXGZCY3Vyc2VzXGZSIHNjcmVlbiBmcm9tICh0bykgYSBmaWxlCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCBzY3JfZHVtcChjb25zdCBjaGFyICpmaWxlbmFtZSk7XGZSCisuYnIKK1xmQmludCBzY3JfcmVzdG9yZShjb25zdCBjaGFyICpmaWxlbmFtZSk7XGZSCisuYnIKK1xmQmludCBzY3JfaW5pdChjb25zdCBjaGFyICpmaWxlbmFtZSk7XGZSCisuYnIKK1xmQmludCBzY3Jfc2V0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCc2NyX2R1bXBcZlIgcm91dGluZSBkdW1wcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmlydHVhbCBzY3JlZW4KK3RvIHRoZSBmaWxlIFxmSWZpbGVuYW1lXGZSLgorLlBQCitUaGUgXGZCc2NyX3Jlc3RvcmVcZlIgcm91dGluZSBzZXRzIHRoZSB2aXJ0dWFsIHNjcmVlbiB0byB0aGUgY29udGVudHMKK29mIFxmSWZpbGVuYW1lXGZSLCB3aGljaCBtdXN0IGhhdmUgYmVlbiB3cml0dGVuIHVzaW5nIFxmQnNjcl9kdW1wXGZSLiAgVGhlIG5leHQKK2NhbGwgdG8gXGZCZG91cGRhdGVcZlIgcmVzdG9yZXMgdGhlIHNjcmVlbiB0byB0aGUgd2F5IGl0IGxvb2tlZCBpbiB0aGUgZHVtcAorZmlsZS4KKy5QUAorVGhlIFxmQnNjcl9pbml0XGZSIHJvdXRpbmUgcmVhZHMgaW4gdGhlIGNvbnRlbnRzIG9mIFxmSWZpbGVuYW1lXGZSIGFuZCB1c2VzCit0aGVtIHRvIGluaXRpYWxpemUgdGhlIFxmQmN1cnNlc1xmUiBkYXRhIHN0cnVjdHVyZXMgYWJvdXQgd2hhdCB0aGUgdGVybWluYWwKK2N1cnJlbnRseSBoYXMgb24gaXRzIHNjcmVlbi4gIElmIHRoZSBkYXRhIGlzIGRldGVybWluZWQgdG8gYmUgdmFsaWQsCitcZkJjdXJzZXNcZlIgYmFzZXMgaXRzIG5leHQgdXBkYXRlIG9mIHRoZSBzY3JlZW4gb24gdGhpcyBpbmZvcm1hdGlvbiByYXRoZXIKK3RoYW4gY2xlYXJpbmcgdGhlIHNjcmVlbiBhbmQgc3RhcnRpbmcgZnJvbSBzY3JhdGNoLiAgXGZCc2NyX2luaXRcZlIgaXMgdXNlZAorYWZ0ZXIgXGZCaW5pdHNjclxmUiBvciBhIFxmQnN5c3RlbVxmUiBjYWxsIHRvIHNoYXJlCit0aGUgc2NyZWVuIHdpdGggYW5vdGhlciBwcm9jZXNzIHdoaWNoIGhhcyBkb25lIGEgXGZCc2NyX2R1bXBcZlIgYWZ0ZXIgaXRzCitcZkJlbmR3aW5cZlIgY2FsbC4gIFRoZSBkYXRhIGlzIGRlY2xhcmVkIGludmFsaWQgaWYgdGhlIHRlcm1pbmZvIGNhcGFiaWxpdGllcworXGZCcm1jdXBcZlIgYW5kIFxmQm5ycm1jXGZSIGV4aXN0OyBhbHNvIGlmIHRoZSB0ZXJtaW5hbCBoYXMgYmVlbiB3cml0dGVuIHRvCitzaW5jZSB0aGUgcHJlY2VkaW5nIFxmQnNjcl9kdW1wXGZSIGNhbGwuCisuUFAKK1RoZSBcZkJzY3Jfc2V0XGZSIHJvdXRpbmUgaXMgYSBjb21iaW5hdGlvbiBvZiBcZkJzY3JfcmVzdG9yZVxmUiBhbmQKK1xmQnNjcl9pbml0XGZSLiAgSXQgdGVsbHMgdGhlIHByb2dyYW0gdGhhdCB0aGUgaW5mb3JtYXRpb24gaW4gXGZJZmlsZW5hbWVcZlIgaXMKK3doYXQgaXMgY3VycmVudGx5IG9uIHRoZSBzY3JlZW4sIGFuZCBhbHNvIHdoYXQgdGhlIHByb2dyYW0gd2FudHMgb24gdGhlIHNjcmVlbi4KK1RoaXMgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBzY3JlZW4gaW5oZXJpdGFuY2UgZnVuY3Rpb24uCisuUFAKK1RvIHJlYWQgKHdyaXRlKSBhIHdpbmRvdyBmcm9tICh0bykgYSBmaWxlLCB1c2UgdGhlIFxmQmdldHdpblxmUiBhbmQKK1xmQnB1dHdpblxmUiByb3V0aW5lcyBbc2VlIFxmQmN1cnNfdXRpbFxmUigzWCldLgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUgordXBvbiBzdWNjZXNzLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwKK2VhY2ggd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZC4KKy5TSCBOT1RFUworTm90ZSB0aGF0IFxmQnNjcl9pbml0XGZSLCBcZkJzY3Jfc2V0XGZSLCBhbmQgXGZCc2NyX3Jlc3RvcmVcZlIgbWF5IGJlIG1hY3Jvcy4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQsIGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMgKGFkZGluZyB0aGUgY29uc3QKK3F1YWxpZmllcnMpLgorLlBQCitUaGUgU1ZyNCBkb2NzIG1lcmVseSBzYXkgdW5kZXIgXGZCc2NyX2luaXRcZlIgdGhhdCB0aGUgZHVtcCBkYXRhIGlzIGFsc28KK2NvbnNpZGVyZWQgaW52YWxpZCAiaWYgdGhlIHRpbWUtc3RhbXAgb2YgdGhlIHR0eSBpcyBvbGQiIGJ1dCBkbyBub3QgZGVmaW5lCisib2xkIi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwgXGZCY3Vyc19yZWZyZXNoXGZSKDNYKSwKK1xmQmN1cnNfdXRpbFxmUigzWCksIFxmQnN5c3RlbVxmUigzKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19zY3JvbGwuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19zY3JvbGwuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0YjcxNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX3Njcm9sbC4zeApAQCAtMCwwICsxLDk2IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfc2Nyb2xsLjN4LHYgMS4xMyAyMDA2LzAyLzI1IDIxOjQ5OjE5IHRvbSBFeHAgJAorLlRIIGN1cnNfc2Nyb2xsIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCc2Nyb2xsXGZSLAorXGZCc2NybFxmUiwKK1xmQndzY3JsXGZSIC0gc2Nyb2xsIGEgXGZCY3Vyc2VzXGZSIHdpbmRvdworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJpbnQgc2Nyb2xsKFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCaW50IHNjcmwoaW50IG4pO1xmUgorLmJyCitcZkJpbnQgd3NjcmwoV0lORE9XICp3aW4sIGludCBuKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCc2Nyb2xsXGZSIHJvdXRpbmUgc2Nyb2xscyB0aGUgd2luZG93IHVwIG9uZSBsaW5lLgorVGhpcyBpbnZvbHZlcyBtb3ZpbmcKK3RoZSBsaW5lcyBpbiB0aGUgd2luZG93IGRhdGEgc3RydWN0dXJlLgorQXMgYW4gb3B0aW1pemF0aW9uLCBpZiB0aGUgc2Nyb2xsaW5nCityZWdpb24gb2YgdGhlIHdpbmRvdyBpcyB0aGUgZW50aXJlIHNjcmVlbiwgdGhlIHBoeXNpY2FsIHNjcmVlbiBtYXkgYmUgc2Nyb2xsZWQKK2F0IHRoZSBzYW1lIHRpbWUuCisuUFAKK0ZvciBwb3NpdGl2ZSBcZkluXGZSLCB0aGUgXGZCc2NybFxmUiBhbmQgXGZCd3NjcmxcZlIgcm91dGluZXMgc2Nyb2xsIHRoZQord2luZG93IHVwIFxmSW5cZlIgbGluZXMgKGxpbmUgXGZJaVxmUitcZkluXGZSIGJlY29tZXMgXGZJaVxmUik7IG90aGVyd2lzZQorc2Nyb2xsIHRoZSB3aW5kb3cgZG93biBcZkluXGZSIGxpbmVzLgorVGhpcyBpbnZvbHZlcyBtb3ZpbmcgdGhlIGxpbmVzIGluIHRoZQord2luZG93IGNoYXJhY3RlciBpbWFnZSBzdHJ1Y3R1cmUuCitUaGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaXMgbm90IGNoYW5nZWQuCisuUFAKK0ZvciB0aGVzZSBmdW5jdGlvbnMgdG8gd29yaywgc2Nyb2xsaW5nIG11c3QgYmUgZW5hYmxlZCB2aWEgXGZCc2Nyb2xsb2tcZlIuCisuU0ggUkVUVVJOIFZBTFVFCitUaGVzZSByb3V0aW5lcyByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSwgYW5kIFxmQk9LXGZSIChTVnI0IG9ubHkgc3BlY2lmaWVzCisiYW4gaW50ZWdlciB2YWx1ZSBvdGhlciB0aGFuIFxmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorLlBQCitUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgc2Nyb2xsaW5nIGlzIG5vdCBlbmFibGVkIGluIHRoZSB3aW5kb3csIGUuZy4sIHdpdGggXGZCc2Nyb2xsb2tcZlAuCisuU0ggTk9URVMKK05vdGUgdGhhdCBcZkJzY3JsXGZSIGFuZCBcZkJzY3JvbGxcZlIgbWF5IGJlIG1hY3Jvcy4KKy5QUAorVGhlIFNWcjQgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgdGhlIG9wdGltaXphdGlvbiBvZiBwaHlzaWNhbGx5IHNjcm9sbGluZworaW1tZWRpYXRlbHkgaWYgdGhlIHNjcm9sbCByZWdpb24gaXMgdGhlIGVudGlyZSBzY3JlZW4gImlzIiBwZXJmb3JtZWQsIG5vdAorIm1heSBiZSIgcGVyZm9ybWVkLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBkZWxpYmVyYXRlbHkgZG9lcyBub3QgZ3VhcmFudGVlCit0aGF0IHRoaXMgd2lsbCBvY2N1ciwgdG8gbGVhdmUgb3BlbiB0aGUgcG9zc2liaWxpdHkgb2Ygc21hcnRlcgorb3B0aW1pemF0aW9uIG9mIG11bHRpcGxlIHNjcm9sbCBhY3Rpb25zIG9uIHRoZSBuZXh0IHVwZGF0ZS4KKy5QUAorTmVpdGhlciB0aGUgU1ZyNCBub3IgdGhlIFhTSSBkb2N1bWVudGF0aW9uIHNwZWNpZnkgd2hldGhlciB0aGUgY3VycmVudAorYXR0cmlidXRlIG9yCitjdXJyZW50IGNvbG9yLXBhaXIgb2YgYmxhbmtzIGdlbmVyYXRlZCBieSB0aGUgc2Nyb2xsIGZ1bmN0aW9uIGlzIHplcm9lZC4KK1VuZGVyIHRoaXMgaW1wbGVtZW50YXRpb24gaXQgaXMuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfb3V0b3B0c1xmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfc2xrLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfc2xrLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNjEyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc19zbGsuM3gKQEAgLTAsMCArMSwyMDUgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc19zbGsuM3gsdiAxLjE2IDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggY3Vyc19zbGsgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJzbGtfaW5pdFxmUiwKK1xmQnNsa19zZXRcZlIsCitcZkJzbGtfcmVmcmVzaFxmUiwKK1xmQnNsa19ub3V0cmVmcmVzaFxmUiwKK1xmQnNsa19sYWJlbFxmUiwKK1xmQnNsa19jbGVhclxmUiwKK1xmQnNsa19yZXN0b3JlXGZSLAorXGZCc2xrX3RvdWNoXGZSLAorXGZCc2xrX2F0dHJvblxmUiwKK1xmQnNsa19hdHRyc2V0XGZSLAorXGZCc2xrX2F0dHJvZmZcZlIsCitcZkJzbGtfYXR0cl9vblxmUiwKK1xmQnNsa19hdHRyX3NldFxmUiwKK1xmQnNsa19hdHRyX29mZlxmUiwKK1xmQnNsa19hdHRyXGZSLAorXGZCc2xrX2NvbG9yXGZSIC0gXGZCY3Vyc2VzXGZSIHNvZnQgbGFiZWwgcm91dGluZXMKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCaW50IHNsa19pbml0KGludCBmbXQpO1xmUgorLmJyCitcZkJpbnQgc2xrX3NldChpbnQgbGFibnVtLCBjb25zdCBjaGFyICpsYWJlbCwgaW50IGZtdCk7XGZSCisuYnIKK1xmQmludCBzbGtfcmVmcmVzaCh2b2lkKTtcZlIKKy5icgorXGZCaW50IHNsa19ub3V0cmVmcmVzaCh2b2lkKTtcZlIKKy5icgorXGZCY2hhciAqc2xrX2xhYmVsKGludCBsYWJudW0pO1xmUgorLmJyCitcZkJpbnQgc2xrX2NsZWFyKHZvaWQpO1xmUgorLmJyCitcZkJpbnQgc2xrX3Jlc3RvcmUodm9pZCk7XGZSCisuYnIKK1xmQmludCBzbGtfdG91Y2godm9pZCk7XGZSCisuYnIKK1xmQmludCBzbGtfYXR0cm9uKGNvbnN0IGNodHlwZSBhdHRycyk7XGZSCisuYnIKK1xmQmludCBzbGtfYXR0cm9mZihjb25zdCBjaHR5cGUgYXR0cnMpO1xmUgorLmJyCitcZkJpbnQgc2xrX2F0dHJzZXQoY29uc3QgY2h0eXBlIGF0dHJzKTtcZlIKKy5icgorXGZCaW50IHNsa19hdHRyX29uKGF0dHJfdCBhdHRycywgdm9pZCogb3B0cyk7XGZSCisuYnIKK1xmQmludCBzbGtfYXR0cl9vZmYoY29uc3QgYXR0cl90IGF0dHJzLCB2b2lkICogb3B0cyk7XGZSCisuYnIKK1xmQmludCBzbGtfYXR0cl9zZXQoY29uc3QgYXR0cl90IGF0dHJzLFxmUgorLmJyCisJXGZCc2hvcnQgY29sb3JfcGFpcl9udW1iZXIsIHZvaWQqIG9wdHMpO1xmUgorLmJyCitcZkJhdHRyX3Qgc2xrX2F0dHIodm9pZCk7XGZSCisuYnIKK1xmQmludCBzbGtfY29sb3Ioc2hvcnQgY29sb3JfcGFpcl9udW1iZXIpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBzbGsqIGZ1bmN0aW9ucyBtYW5pcHVsYXRlIHRoZSBzZXQgb2Ygc29mdCBmdW5jdGlvbi1rZXkgbGFiZWxzIHRoYXQgZXhpc3Qgb24KK21hbnkgdGVybWluYWxzLiAgRm9yIHRob3NlIHRlcm1pbmFscyB0aGF0IGRvIG5vdCBoYXZlIHNvZnQgbGFiZWxzLAorXGZCY3Vyc2VzXGZSIHRha2VzIG92ZXIgdGhlIGJvdHRvbSBsaW5lIG9mIFxmQnN0ZHNjclxmUiwgcmVkdWNpbmcgdGhlIHNpemUgb2YKK1xmQnN0ZHNjclxmUiBhbmQgdGhlIHZhcmlhYmxlIFxmQkxJTkVTXGZSLiAgXGZCY3Vyc2VzXGZSIHN0YW5kYXJkaXplcyBvbiBlaWdodAorbGFiZWxzIG9mIHVwIHRvIGVpZ2h0IGNoYXJhY3RlcnMgZWFjaC4gSW4gYWRkaXRpb24gdG8gdGhpcywgdGhlIG5jdXJzZXMKK2ltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGEgbW9kZSB3aGVyZSBpdCBzaW11bGF0ZXMgMTIgbGFiZWxzIG9mIHVwIHRvIGZpdmUKK2NoYXJhY3RlcnMgZWFjaC4gVGhpcyBpcyBtb3N0IGNvbW1vbiBmb3IgdG9kYXlzIFBDIGxpa2UgZW5kdXNlciBkZXZpY2VzLgorUGxlYXNlIG5vdGUgdGhhdCBuY3Vyc2VzIHNpbXVsYXRlcyB0aGlzIG1vZGUgYnkgdGFraW5nIG92ZXIgdXAgdG8gdHdvIGxpbmVzIGF0Cit0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4sIGl0IGRvZXMgbm90IHRyeSB0byB1c2UgYW55IGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoaXMKK21vZGUuCisuUFAKK1RoZSBcZkJzbGtfaW5pdFxmUiByb3V0aW5lIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBcZkJpbml0c2NyXGZSIG9yIFxmQm5ld3Rlcm1cZlIKK2lzIGNhbGxlZC4gIElmIFxmQmluaXRzY3JcZlIgZXZlbnR1YWxseSB1c2VzIGEgbGluZSBmcm9tIFxmQnN0ZHNjclxmUiB0bworZW11bGF0ZSB0aGUgc29mdCBsYWJlbHMsIHRoZW4gXGZJZm10XGZSIGRldGVybWluZXMgaG93IHRoZSBsYWJlbHMgYXJlIGFycmFuZ2VkCitvbiB0aGUgc2NyZWVuLiAgU2V0dGluZyBcZklmbXRcZlIgdG8gXGZCMFxmUiBpbmRpY2F0ZXMgYSAzLTItMyBhcnJhbmdlbWVudCBvZgordGhlIGxhYmVscywgXGZCMVxmUiBpbmRpY2F0ZXMgYSA0LTQgYXJyYW5nZW1lbnQgYW5kIFxmQjJcZlIgaW5kaWNhdGVzIHRoZQorUEMgbGlrZSA0LTQtNCBtb2RlLiBJZiBcZkJmbXRcZlIgaXMgc2V0IHRvIFxmQjNcZlIsIGl0IGlzIGFnYWluIHRoZSBQQyBsaWtlCis0LTQtNCBtb2RlLCBidXQgaW4gYWRkaXRpb24gYW4gaW5kZXggbGluZSBpcyBnZW5lcmF0ZWQsIGhlbHBpbmcgdGhlIHVzZXIgdG8KK2lkZW50aWZ5IHRoZSBrZXkgbnVtYmVycyBlYXNpbHkuCisuUFAKK1RoZSBcZkJzbGtfc2V0XGZSIHJvdXRpbmUgcmVxdWlyZXMgXGZJbGFibnVtXGZSIHRvIGJlIGEgbGFiZWwgbnVtYmVyLAorZnJvbSBcZkIxXGZSIHRvIFxmQjhcZlIgKHJlc3AuIFxmQjEyXGZSKTsgXGZJbGFiZWxcZlIgbXVzdCBiZSB0aGUgc3RyaW5nCit0byBiZSBwdXQgb24gdGhlIGxhYmVsLCB1cCB0byBlaWdodCAocmVzcC4gZml2ZSkgY2hhcmFjdGVycyBpbiBsZW5ndGguCitBIG51bGwgc3RyaW5nIG9yIGEgbnVsbCBwb2ludGVyIHNldHMgdXAgYSBibGFuayBsYWJlbC4gXGZJZm10XGZSIGlzIGVpdGhlcgorXGZCMFxmUiwgXGZCMVxmUiwgb3IgXGZCMlxmUiwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBsYWJlbCBpcyAgdG8gYmUKK2xlZnQtanVzdGlmaWVkLCBjZW50ZXJlZCwgb3IgcmlnaHQtanVzdGlmaWVkLCByZXNwZWN0aXZlbHksIHdpdGhpbiB0aGUKK2xhYmVsLgorLlBQCitUaGUgXGZCc2xrX3JlZnJlc2hcZlIgYW5kIFxmQnNsa19ub3V0cmVmcmVzaFxmUiByb3V0aW5lcyBjb3JyZXNwb25kIHRvCit0aGUgXGZCd3JlZnJlc2hcZlIgYW5kIFxmQndub3V0cmVmcmVzaFxmUiByb3V0aW5lcy4KKy5QUAorVGhlIFxmQnNsa19sYWJlbFxmUiByb3V0aW5lIHJldHVybnMgdGhlIGN1cnJlbnQgbGFiZWwgZm9yIGxhYmVsIG51bWJlcgorXGZJbGFibnVtXGZSLCB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGJsYW5rcyBzdHJpcHBlZC4KKy5QUAorVGhlIFxmQnNsa19jbGVhclxmUiByb3V0aW5lIGNsZWFycyB0aGUgc29mdCBsYWJlbHMgZnJvbSB0aGUgc2NyZWVuLgorLlBQCitUaGUgXGZCc2xrX3Jlc3RvcmVcZlIgcm91dGluZSByZXN0b3JlcyB0aGUgc29mdCBsYWJlbHMgdG8gdGhlIHNjcmVlbgorYWZ0ZXIgYSBcZkJzbGtfY2xlYXJcZlIgaGFzIGJlZW4gcGVyZm9ybWVkLgorLlBQCitUaGUgXGZCc2xrX3RvdWNoXGZSIHJvdXRpbmUgZm9yY2VzIGFsbCB0aGUgc29mdCBsYWJlbHMgdG8gYmUgb3V0cHV0Cit0aGUgbmV4dCB0aW1lIGEgXGZCc2xrX25vdXRyZWZyZXNoXGZSIGlzIHBlcmZvcm1lZC4KKy5QUAorVGhlIFxmQnNsa19hdHRyb25cZlIsIFxmQnNsa19hdHRyc2V0XGZSLCBcZkJzbGtfYXR0cm9mZlxmUiBhbmQgXGZCc2xrX2F0dHJcZlIKK3JvdXRpbmVzIGNvcnJlc3BvbmQgdG8gXGZCYXR0cm9uXGZSLCBcZkJhdHRyc2V0XGZSLCBcZkJhdHRyb2ZmXGZSIGFuZCBcZkJhdHRyX2dldFxmUi4KK1RoZXkgaGF2ZSBhbiBlZmZlY3Qgb25seSBpZiBzb2Z0IGxhYmVscyBhcmUgc2ltdWxhdGVkIG9uIHRoZSBib3R0b20gbGluZSBvZgordGhlIHNjcmVlbi4gIFRoZSBkZWZhdWx0IGhpZ2hsaWdodCBmb3Igc29mdCBrZXlzIGlzIEFfU1RBTkRPVVQgKGFzIGluCitTeXN0ZW0gViBjdXJzZXMsIHdoaWNoIGRvZXMgbm90IGRvY3VtZW50IHRoaXMgZmFjdCkuCisuUFAKK1RoZSBcZkJzbGtfY29sb3JcZlIgcm91dGluZSBjb3JyZXNwb25kcyB0byBcZkJjb2xvcl9zZXRcZlIuIEl0IGhhcyBhbiBlZmZlY3Qgb25seQoraWYgc29mdCBsYWJlbHMgYXJlIHNpbXVsYXRlZCBvbiB0aGUgYm90dG9tIGxpbmUgb2YgdGhlIHNjcmVlbi4KKy4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZXNlIHJvdXRpbmVzIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBPSyAoU1ZyNCBzcGVjaWZpZXMgb25seSAiYW4KK2ludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKy5QUAorWC9PcGVuIGRlZmluZXMgbm8gZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KKy5SUworLlRQIDUKK1xmQnNsa19hdHRyXGZSCityZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdXNlZCBmb3IgdGhlIHNvZnQga2V5cy4KKy5UUCA1CisubmEKKy5oeSAwCitcZkJzbGtfYXR0cm9mZlxmUCwgXGZCc2xrX2F0dHJvblxmUCwgXGZCc2xrX2NsZWFyXGZQLCBcZkJzbGtfbm91dHJlZnJlc2hcZlAsIFxmQnNsa19yZWZyZXNoXGZQLCBcZkJzbGtfdG91Y2hcZlAKKy5hZAorLmh5CityZXR1cm4gYW4gZXJyb3IKK2lmIHRoZSB0ZXJtaW5hbCBvciB0aGUgc29mdGtleXMgd2VyZSBub3QgaW5pdGlhbGl6ZWQuCisuVFAgNQorXGZCc2xrX2F0dHJzZXRcZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIHRoZSB0ZXJtaW5hbCBvciB0aGUgc29mdGtleXMgd2VyZSBub3QgaW5pdGlhbGl6ZWQuCisuVFAgNQorXGZCc2xrX2F0dHJfc2V0XGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnRrZXlzIHdlcmUgbm90IGluaXRpYWxpemVkLCBvcgordGhlIGNvbG9yIHBhaXIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMC4uQ09MT1JfUEFJUlMtMSwKK29yIG9wdHMgaXMgbm90IG51bGwuCisuVFAgNQorXGZCc2xrX2NvbG9yXGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnRrZXlzIHdlcmUgbm90IGluaXRpYWxpemVkLCBvcgordGhlIGNvbG9yIHBhaXIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMC4uQ09MT1JfUEFJUlMtMS4KKy5UUCA1CitcZkJzbGtfaW5pdFxmUgorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIGZvcm1hdCBwYXJhbWV0ZXIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMC4uMy4KKy5UUCA1CitcZkJzbGtfbGFiZWxcZlIKK3JldHVybnMgXGZCTlVMTFxmUiBvbiBlcnJvci4KKy5UUCA1CitcZkJzbGtfc2V0XGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgdGVybWluYWwgb3IgdGhlIHNvZnRrZXlzIHdlcmUgbm90IGluaXRpYWxpemVkLCBvcgordGhlIFxmSWxhYm51bVxmUCBwYXJhbWV0ZXIgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgbGFiZWwgY291bnRzLCBvcgoraWYgdGhlIGZvcm1hdCBwYXJhbWV0ZXIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMC4uMiwgb3IgaWYKK21lbW9yeSBmb3IgdGhlIGxhYmVscyBjYW5ub3QgYmUgYWxsb2NhdGVkLgorLlJFCisuU0ggTk9URVMKK01vc3QgYXBwbGljYXRpb25zIHdvdWxkIHVzZSBcZkJzbGtfbm91dHJlZnJlc2hcZlIgYmVjYXVzZSBhCitcZkJ3cmVmcmVzaFxmUiBpcyBsaWtlbHkgdG8gZm9sbG93IHNvb24uCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0LCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLiAgSXQgY2hhbmdlcyB0aGUKK2FyZ3VtZW50IHR5cGUgb2YgdGhlIGF0dHJpYnV0ZS1tYW5pcHVsYXRpb24gZnVuY3Rpb25zIFxmQnNsa19hdHRyb25cZlIsCitcZkJzbGtfYXR0cm9mZlxmUiwgXGZCc2xrX2F0dHJzZXRcZlIgdG8gYmUgXGZCYXR0cl90XGZSLCBhbmQgYWRkcyBcZkJjb25zdFxmUgorcXVhbGlmaWVycy4gVGhlIGZvcm1hdCBjb2RlcyBcZkIyXGZSIGFuZCBcZkIzXGZSIGZvciBcZkJzbGtfaW5pdCgpXGZSIGFuZCB0aGUKK2Z1bmN0aW9uIFxmQnNsa19hdHRyXGZSIGFyZSBzcGVjaWZpYyB0byBuY3Vyc2VzLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJjdXJzX2F0dHJcZlIoM1gpLCBcZkJjdXJzX2luaXRzY3JcZlIoM1gpLCBcZkJjdXJzX3JlZnJlc2hcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX3Rlcm1hdHRycy4zeCBiL25jdXJzZXMtNS43L21hbi9jdXJzX3Rlcm1hdHRycy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA3MzA3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdGVybWF0dHJzLjN4CkBAIC0wLDAgKzEsMTM0IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfdGVybWF0dHJzLjN4LHYgMS4xMCAyMDA3LzA2LzAyIDIwOjQwOjA3IHRvbSBFeHAgJAorLlRIIGN1cnNfdGVybWF0dHJzIDNYICIiCisuU0ggTkFNRQorXGZCYmF1ZHJhdGVcZlIsCitcZkJlcmFzZWNoYXJcZlIsCitcZkJlcmFzZXdjaGFyXGZSLAorXGZCaGFzX2ljXGZSLAorXGZCaGFzX2lsXGZSLAorXGZCa2lsbGNoYXJcZlIsCitcZkJraWxsd2NoYXJcZlIsCitcZkJsb25nbmFtZVxmUiwKK1xmQnRlcm1fYXR0cnNcZlIsCitcZkJ0ZXJtYXR0cnNcZlIsCitcZkJ0ZXJtbmFtZVxmUiAtIFxmQmN1cnNlc1xmUiBlbnZpcm9ubWVudCBxdWVyeSByb3V0aW5lcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuUFAKK1xmQmludCBiYXVkcmF0ZSh2b2lkKTtcZlIKKy5icgorXGZCY2hhciBlcmFzZWNoYXIodm9pZCk7XGZSCisuYnIKK1xmQmludCBlcmFzZXdjaGFyKHdjaGFyX3QgKlxmUlxmSWNoXGZSXGZCKTtcZlIKKy5icgorXGZCYm9vbCBoYXNfaWModm9pZCk7XGZSCisuYnIKK1xmQmJvb2wgaGFzX2lsKHZvaWQpO1xmUgorLmJyCitcZkJjaGFyIGtpbGxjaGFyKHZvaWQpO1xmUgorLmJyCitcZkJpbnQga2lsbHdjaGFyKHdjaGFyX3QgKlxmUlxmSWNoXGZSXGZCKTtcZlIKKy5icgorXGZCY2hhciAqbG9uZ25hbWUodm9pZCk7XGZSCisuYnIKK1xmQmF0dHJfdCB0ZXJtX2F0dHJzKHZvaWQpO1xmUgorLmJyCitcZkJjaHR5cGUgdGVybWF0dHJzKHZvaWQpO1xmUgorLmJyCitcZkJjaGFyICp0ZXJtbmFtZSh2b2lkKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCYmF1ZHJhdGVcZlIgcm91dGluZSByZXR1cm5zIHRoZSBvdXRwdXQgc3BlZWQgb2YgdGhlIHRlcm1pbmFsLiAgVGhlCitudW1iZXIgcmV0dXJuZWQgaXMgaW4gYml0cyBwZXIgc2Vjb25kLCBmb3IgZXhhbXBsZSBcZkI5NjAwXGZSLCBhbmQgaXMgYW4KK2ludGVnZXIuCisuUFAKK1RoZSBcZkJlcmFzZWNoYXJcZlIgcm91dGluZSByZXR1cm5zIHRoZSB1c2VyJ3MgY3VycmVudCBlcmFzZSBjaGFyYWN0ZXIuCisuUFAKK1RoZSBcZkJlcmFzZXdjaGFyXGZSIHJvdXRpbmUgc3RvcmVzIHRoZSBjdXJyZW50IGVyYXNlIGNoYXJhY3RlcgoraW4gdGhlIGxvY2F0aW9uIHJlZmVyZW5jZWQgYnkgXGZJY2hcZlIuCitJZiBubyBlcmFzZSBjaGFyYWN0ZXIgaGFzIGJlZW4gZGVmaW5lZCwgdGhlIHJvdXRpbmUgZmFpbHMKK2FuZCB0aGUgbG9jYXRpb24gcmVmZXJlbmNlZCBieSBcZkljaFxmUiBpcyBub3QgY2hhbmdlZC4KKy5QUAorVGhlIFxmQmhhc19pY1xmUiByb3V0aW5lIGlzIHRydWUgaWYgdGhlIHRlcm1pbmFsIGhhcyBpbnNlcnQtIGFuZCBkZWxldGUtCitjaGFyYWN0ZXIgY2FwYWJpbGl0aWVzLgorLlBQCitUaGUgXGZCaGFzX2lsXGZSIHJvdXRpbmUgaXMgdHJ1ZSBpZiB0aGUgdGVybWluYWwgaGFzIGluc2VydC0gYW5kIGRlbGV0ZS1saW5lCitjYXBhYmlsaXRpZXMsIG9yIGNhbiBzaW11bGF0ZSB0aGVtIHVzaW5nIHNjcm9sbGluZyByZWdpb25zLiAgVGhpcyBtaWdodAorYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgaXQgd291bGQgYmUgYXBwcm9wcmlhdGUgdG8gdHVybiBvbiBwaHlzaWNhbAorc2Nyb2xsaW5nIHVzaW5nIFxmQnNjcm9sbG9rXGZSLgorLlBQCitUaGUgXGZCa2lsbGNoYXJcZlIgcm91dGluZSByZXR1cm5zIHRoZSB1c2VyJ3MgY3VycmVudCBsaW5lIGtpbGwgY2hhcmFjdGVyLgorLlBQCitUaGUgXGZCa2lsbHdjaGFyXGZSIHJvdXRpbmUgc3RvcmVzIHRoZSBjdXJyZW50IGxpbmUta2lsbCBjaGFyYWN0ZXIKK2luIHRoZSBsb2NhdGlvbiByZWZlcmVuY2VkIGJ5IFxmSWNoXGZSLgorSWYgbm8gbGluZS1raWxsIGNoYXJhY3RlciBoYXMgYmVlbiBkZWZpbmVkLAordGhlIHJvdXRpbmUgZmFpbHMgYW5kIHRoZSBsb2NhdGlvbiByZWZlcmVuY2VkIGJ5IFxmSWNoXGZSIGlzIG5vdCBjaGFuZ2VkLgorLlBQCitUaGUgXGZCbG9uZ25hbWVcZlIgcm91dGluZSByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0YXRpYyBhcmVhCitjb250YWluaW5nIGEgdmVyYm9zZSBkZXNjcmlwdGlvbiBvZiB0aGUgY3VycmVudCB0ZXJtaW5hbC4gIFRoZSBtYXhpbXVtCitsZW5ndGggb2YgYSB2ZXJib3NlIGRlc2NyaXB0aW9uIGlzIDEyOCBjaGFyYWN0ZXJzLiAgSXQgaXMgZGVmaW5lZCBvbmx5CithZnRlciB0aGUgY2FsbCB0byBcZkJpbml0c2NyXGZSIG9yIFxmQm5ld3Rlcm1cZlIuICBUaGUgYXJlYSBpcworb3ZlcndyaXR0ZW4gYnkgZWFjaCBjYWxsIHRvIFxmQm5ld3Rlcm1cZlIgYW5kIGlzIG5vdCByZXN0b3JlZCBieQorXGZCc2V0X3Rlcm1cZlIsIHNvIHRoZSB2YWx1ZSBzaG91bGQgYmUgc2F2ZWQgYmV0d2VlbiBjYWxscyB0bworXGZCbmV3dGVybVxmUiBpZiBcZkJsb25nbmFtZVxmUiBpcyBnb2luZyB0byBiZSB1c2VkIHdpdGggbXVsdGlwbGUKK3Rlcm1pbmFscy4KKy5QUAorSWYgYSBnaXZlbiB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IGEgdmlkZW8gYXR0cmlidXRlIHRoYXQgYW4KK2FwcGxpY2F0aW9uIHByb2dyYW0gaXMgdHJ5aW5nIHRvIHVzZSwgXGZCY3Vyc2VzXGZSIG1heSBzdWJzdGl0dXRlIGEKK2RpZmZlcmVudCB2aWRlbyBhdHRyaWJ1dGUgZm9yIGl0LgorVGhlIFxmQnRlcm1hdHRyc1xmUiBhbmQgXGZCdGVybV9hdHRyc1xmUiBmdW5jdGlvbnMKK3JldHVybiBhIGxvZ2ljYWwgXGZCT1JcZlIgb2YgYWxsIHZpZGVvIGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGJ5IHRoZQordGVybWluYWwgdXNpbmcgXGZJQV9cZlIgYW5kIFxmSVdBX1xmUiBjb25zdGFudHMgcmVzcGVjdGl2ZWx5LgorVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgd2hlbiBhIFxmQmN1cnNlc1xmUiBwcm9ncmFtCituZWVkcyBjb21wbGV0ZSBjb250cm9sIG92ZXIgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHNjcmVlbi4KKy5QUAorVGhlIFxmQnRlcm1uYW1lXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgdGVybWluYWwgbmFtZSB1c2VkIGJ5IFxmQnNldHVwdGVybVxmUi4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQmxvbmduYW1lXGZSIGFuZCBcZkJ0ZXJtbmFtZVxmUiByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4KKy5QUAorUm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIKKyhTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlNIIE5PVEVTCitOb3RlIHRoYXQgXGZCdGVybWF0dHJzXGZSIG1heSBiZSBhIG1hY3JvLgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLiAgSXQgY2hhbmdlcyB0aGUKK3JldHVybiB0eXBlIG9mIFxmQnRlcm1hdHRyc1xmUiB0byB0aGUgbmV3IHR5cGUgXGZCYXR0cl90XGZSLgorTW9zdCB2ZXJzaW9ucyBvZiBjdXJzZXMgdHJ1bmNhdGUgdGhlIHJlc3VsdCByZXR1cm5lZCBieSBcZkJ0ZXJtbmFtZVxmUiB0bworMTQgY2hhcmFjdGVycy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwgXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc190ZXJtY2FwLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdGVybWNhcC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FjMmZiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdGVybWNhcC4zeApAQCAtMCwwICsxLDE2NyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3Rlcm1jYXAuM3gsdiAxLjIyIDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggY3Vyc190ZXJtY2FwIDNYICIiCisuZHMgbiA1CisuU0ggTkFNRQorXGZCdGdldGVudFxmUiwKK1xmQnRnZXRmbGFnXGZSLAorXGZCdGdldG51bVxmUiwKK1xmQnRnZXRzdHJcZlIsCitcZkJ0Z290b1xmUiwKK1xmQnRwdXRzXGZSIC0gZGlyZWN0IFxmQmN1cnNlc1xmUiBpbnRlcmZhY2UgdG8gdGhlIHRlcm1pbmZvIGNhcGFiaWxpdHkgZGF0YWJhc2UKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLmJyCitcZkIjaW5jbHVkZSA8dGVybS5oPlxmUgorLnNwCitcZkJleHRlcm4gY2hhciBQQztcZlIKKy5icgorXGZCZXh0ZXJuIGNoYXIgKiBVUDtcZlIKKy5icgorXGZCZXh0ZXJuIGNoYXIgKiBCQztcZlIKKy5icgorXGZCZXh0ZXJuIEBOQ1VSU0VTX09TUEVFREAgb3NwZWVkO1xmUgorLnNwCitcZkJpbnQgdGdldGVudChjaGFyICpicCwgY29uc3QgY2hhciAqbmFtZSk7XGZSCisuYnIKK1xmQmludCB0Z2V0ZmxhZyhjaGFyICppZCk7XGZSCisuYnIKK1xmQmludCB0Z2V0bnVtKGNoYXIgKmlkKTtcZlIKKy5icgorXGZCY2hhciAqdGdldHN0cihjaGFyICppZCwgY2hhciAqKmFyZWEpO1xmUgorLmJyCitcZkJjaGFyICp0Z290byhjb25zdCBjaGFyICpjYXAsIGludCBjb2wsIGludCByb3cpO1xmUgorLmJyCitcZkJpbnQgdHB1dHMoY29uc3QgY2hhciAqc3RyLCBpbnQgYWZmY250LCBpbnQgKCpwdXRjKShpbnQpKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSByb3V0aW5lcyBhcmUgaW5jbHVkZWQgYXMgYSBjb252ZXJzaW9uIGFpZCBmb3IgcHJvZ3JhbXMgdGhhdCB1c2UKK3RoZSBcZkl0ZXJtY2FwXGZSIGxpYnJhcnkuICBUaGVpciBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZSBhbmQgdGhlCityb3V0aW5lcyBhcmUgZW11bGF0ZWQgdXNpbmcgdGhlIFxmSXRlcm1pbmZvXGZSIGRhdGFiYXNlLiAgVGh1cywgdGhleQorY2FuIG9ubHkgYmUgdXNlZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIG9mIGVudHJpZXMgZm9yIHdoaWNoIGEKK3Rlcm1pbmZvIGVudHJ5IGhhcyBiZWVuIGNvbXBpbGVkLgorLlBQCitUaGUgXGZCdGdldGVudFxmUiByb3V0aW5lIGxvYWRzIHRoZSBlbnRyeSBmb3IgXGZJbmFtZVxmUi4KK0l0IHJldHVybnMgMSBvbiBzdWNjZXNzLCAwIGlmIHRoZXJlIGlzIG5vIHN1Y2ggZW50cnksIGFuZCAtMSBpZiB0aGUKK3Rlcm1pbmZvIGRhdGFiYXNlIGNvdWxkIG5vdCBiZSBmb3VuZC4KK1RoZSBlbXVsYXRpb24gaWdub3JlcyB0aGUgYnVmZmVyIHBvaW50ZXIgXGZJYnBcZlIuCisuUFAKK1RoZSBcZkJ0Z2V0ZmxhZ1xmUiByb3V0aW5lIGdldHMgdGhlIGJvb2xlYW4gZW50cnkgZm9yIFxmSWlkXGZSLAorb3IgemVybyBpZiBpdCBpcyBub3QgYXZhaWxhYmxlLgorLlBQCitUaGUgXGZCdGdldG51bVxmUiByb3V0aW5lIGdldHMgdGhlIG51bWVyaWMgZW50cnkgZm9yIFxmSWlkXGZSLAorb3IgLTEgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KKy5QUAorVGhlIFxmQnRnZXRzdHJcZlIgcm91dGluZSByZXR1cm5zIHRoZSBzdHJpbmcgZW50cnkgZm9yIFxmSWlkXGZSLAorb3IgemVybyBpZiBpdCBpcyBub3QgYXZhaWxhYmxlLgorVXNlIFxmQnRwdXRzXGZSIHRvIG91dHB1dCB0aGUgcmV0dXJuZWQgc3RyaW5nLgorVGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsc28gYmUgY29waWVkIHRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBcZklhcmVhXGZSLAorYW5kIHRoZSBcZklhcmVhXGZSIHZhbHVlIHdpbGwgYmUgdXBkYXRlZCB0byBwb2ludCBwYXN0IHRoZSBudWxsIGVuZGluZwordGhpcyB2YWx1ZS4KKy5QUAorT25seSB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIFxmQmlkXGZSIHBhcmFtZXRlciBvZgorXGZCdGdldGZsYWdcZlIsCitcZkJ0Z2V0bnVtXGZSIGFuZAorXGZCdGdldHN0clxmUiBhcmUgY29tcGFyZWQgaW4gbG9va3Vwcy4KKy5QUAorVGhlIFxmQnRnb3RvXGZSIHJvdXRpbmUgaW5zdGFudGlhdGVzIHRoZSBwYXJhbWV0ZXJzIGludG8gdGhlIGdpdmVuIGNhcGFiaWxpdHkuCitUaGUgb3V0cHV0IGZyb20gdGhpcyByb3V0aW5lIGlzIHRvIGJlIHBhc3NlZCB0byBcZkJ0cHV0c1xmUi4KKy5QUAorVGhlIFxmQnRwdXRzXGZSIHJvdXRpbmUgaXMgZGVzY3JpYmVkIG9uIHRoZSBcZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKSBtYW51YWwKK3BhZ2UuICBJdCBjYW4gcmV0cmlldmUgY2FwYWJpbGl0aWVzIGJ5IGVpdGhlciB0ZXJtY2FwIG9yIHRlcm1pbmZvIG5hbWUuCisuUFAKK1RoZSB2YXJpYWJsZXMKK1xmQlBDXGZSLAorXGZCVVBcZlIgYW5kCitcZkJCQ1xmUgorYXJlIHNldCBieSBcZkJ0Z2V0ZW50XGZSIHRvIHRoZSB0ZXJtaW5mbyBlbnRyeSdzIGRhdGEgZm9yCitcZkJwYWRfY2hhclxmUiwKK1xmQmN1cnNvcl91cFxmUiBhbmQKK1xmQmJhY2tzcGFjZV9pZl9ub3RfYnNcZlIsCityZXNwZWN0aXZlbHkuCitcZkJVUFxmUiBpcyBub3QgdXNlZCBieSBuY3Vyc2VzLgorXGZCUENcZlIgaXMgdXNlZCBpbiB0aGUgXGZCdGRlbGF5X291dHB1dFxmUiBmdW5jdGlvbi4KK1xmQkJDXGZSIGlzIHVzZWQgaW4gdGhlIFxmQnRnb3RvXGZSIGVtdWxhdGlvbi4KK1RoZSB2YXJpYWJsZSBcZkJvc3BlZWRcZlIgaXMgc2V0IGJ5IG5jdXJzZXMgaW4gYSBzeXN0ZW0tc3BlY2lmaWMgY29kaW5nCit0byByZWZsZWN0IHRoZSB0ZXJtaW5hbCBzcGVlZC4KKy4KKy5TSCBSRVRVUk4gVkFMVUUKK0V4Y2VwdCB3aGVyZSBleHBsaWNpdGx5IG5vdGVkLAorcm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gXGZCRVJSXGZSIHVwb24gZmFpbHVyZSBhbmQgXGZCT0tcZlIKKyhTVnI0IG9ubHkgc3BlY2lmaWVzICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIikgdXBvbiBzdWNjZXNzZnVsCitjb21wbGV0aW9uLgorLlBQCitSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4KKy5TSCBCVUdTCitJZiB5b3UgY2FsbCBcZkJ0Z2V0c3RyXGZSIHRvIGZldGNoIFxmQmNhXGZSIG9yIGFueSBvdGhlciBwYXJhbWV0ZXJpemVkIHN0cmluZywKK2JlIGF3YXJlIHRoYXQgaXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0ZXJtaW5mbyBub3RhdGlvbiwgbm90IHRoZSBvbGRlciBhbmQKK25vdC1xdWl0ZS1jb21wYXRpYmxlIHRlcm1jYXAgbm90YXRpb24uICBUaGlzIHdpbGwgbm90IGNhdXNlIHByb2JsZW1zIGlmIGFsbAoreW91IGRvIHdpdGggaXQgaXMgY2FsbCBcZkJ0Z290b1xmUiBvciBcZkJ0cGFybVxmUiwgd2hpY2ggYm90aCBleHBhbmQKK3Rlcm1pbmZvLXN0eWxlIHN0cmluZ3MgYXMgdGVybWluZm8uCisoVGhlIFxmQnRnb3RvXGZSIGZ1bmN0aW9uLCBpZiBjb25maWd1cmVkIHRvIHN1cHBvcnQgdGVybWNhcCwgd2lsbCBjaGVjaworaWYgdGhlIHN0cmluZyBpcyBpbmRlZWQgdGVybWluZm8tc3R5bGUgYnkgbG9va2luZyBmb3IgIiVwIiBwYXJhbWV0ZXJzIG9yCisiJDwuLj4iIGRlbGF5cywgYW5kIGludm9rZSBhIHRlcm1jYXAtc3R5bGUgcGFyc2VyIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QKK2FwcGVhciB0byBiZSB0ZXJtaW5mbykuCisuUFAKK0JlY2F1c2UgdGVybWluZm8gY29udmVudGlvbnMgZm9yIHJlcHJlc2VudGluZyBwYWRkaW5nIGluIHN0cmluZyBjYXBhYmlsaXRpZXMKK2RpZmZlciBmcm9tIHRlcm1jYXAncywgXGZCdHB1dHMoIjUwIik7XGZSIHdpbGwgcHV0IG91dCBhIGxpdGVyYWwgIjUwIiByYXRoZXIKK3RoYW4gYnVzeS13YWl0aW5nIGZvciA1MCBtaWxsaXNlY29uZHMuICBDb3BlIHdpdGggaXQuCisuUFAKK05vdGUgdGhhdCB0ZXJtY2FwIGhhcyBub3RoaW5nIGFuYWxvZ291cyB0byB0ZXJtaW5mbydzIFxmQnNnclxmUiBzdHJpbmcuCitPbmUgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IHRlcm1jYXAgYXBwbGljYXRpb25zIGFzc3VtZSBcZlJtZVxmUgorKHRlcm1pbmZvIFxmQnNncjBcZlIpIGRvZXMgbm90IHJlc2V0IHRoZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldC4KK1RoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIGZvciwgYW5kIG1vZGlmaWVzIHRoZSBkYXRhIHNob3duIHRvIHRoZQordGVybWNhcCBpbnRlcmZhY2UgdG8gYWNjb21tb2RhdGUgdGVybWNhcCdzIGxpbWl0YXRpb24gaW4gdGhpcyByZXNwZWN0LgorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLiAgSG93ZXZlciwgdGhleQorYXJlIG1hcmtlZCBUTyBCRSBXSVRIRFJBV04gYW5kIG1heSBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4KKy5QUAorTmVpdGhlciB0aGUgWFNJIEN1cnNlcyBzdGFuZGFyZCBub3IgdGhlIFNWcjQgbWFuIHBhZ2VzIGRvY3VtZW50ZWQgdGhlIHJldHVybgordmFsdWVzIG9mIFxmQnRnZXRlbnRcZlIgY29ycmVjdGx5LCB0aG91Z2ggYWxsIHRocmVlIHdlcmUgaW4gZmFjdCByZXR1cm5lZCBldmVyCitzaW5jZSBTVnIxLgorSW4gcGFydGljdWxhciwgYW4gb21pc3Npb24gaW4gdGhlIFhTSSBDdXJzZXMgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbgorbWlzaW50ZXJwcmV0ZWQgdG8gbWVhbiB0aGF0IFxmQnRnZXRlbnRcZlIgcmV0dXJucyBcZkJPS1xmUiBvciBcZkJFUlJcZlIuCitCZWNhdXNlIHRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyB0byBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aAordGhlIFxmSXRlcm1jYXBcZlIgbGlicmFyeSwgdGhhdCBpcyBhIGRlZmVjdCBpbiBYQ3Vyc2VzLCBJc3N1ZSA0LCBWZXJzaW9uIDIKK3JhdGhlciB0aGFuIGluIG5jdXJzZXMuCisuUFAKK0V4dGVybmFsIHZhcmlhYmxlcyBhcmUgcHJvdmlkZWQgZm9yIHN1cHBvcnQgb2YgY2VydGFpbiB0ZXJtY2FwIGFwcGxpY2F0aW9ucy4KK0hvd2V2ZXIsIHRlcm1jYXAgYXBwbGljYXRpb25zJyB1c2Ugb2YgdGhvc2UgdmFyaWFibGVzIGlzIHBvb3JseSBkb2N1bWVudGVkLAorZS5nLiwgbm90IGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gaW5wdXQgYW5kIG91dHB1dC4KK0luIHBhcnRpY3VsYXIsIHNvbWUgYXBwbGljYXRpb25zIGFyZSByZXBvcnRlZCB0byBkZWNsYXJlIGFuZC9vcgorbW9kaWZ5IFxmQm9zcGVlZFxmUi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCdGVybWluZm9cZlIoXCpuKSwgXGZCcHV0Y1xmUigzKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfdGVybWluZm8uM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc190ZXJtaW5mby4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDEyYTZhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdGVybWluZm8uM3gKQEAgLTAsMCArMSwzNTIgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc190ZXJtaW5mby4zeCx2IDEuMzAgMjAwOC8wOC8xNiAyMDo1MzoyNyB0b20gRXhwICQKKy5USCBjdXJzX3Rlcm1pbmZvIDNYICIiCisuZHMgbiA1CisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCZGVsX2N1cnRlcm1cZlIsCitcZkJtdmN1clxmUiwKK1xmQnB1dHBcZlIsCitcZkJyZXN0YXJ0dGVybVxmUiwKK1xmQnNldF9jdXJ0ZXJtXGZSLAorXGZCc2V0dGVybVxmUiwKK1xmQnNldHVwdGVybVxmUiwKK1xmQnRpZ2V0ZmxhZ1xmUiwKK1xmQnRpZ2V0bnVtXGZSLAorXGZCdGlnZXRzdHJcZlIsCitcZkJ0cGFybVxmUiwKK1xmQnRwdXRzXGZSLAorXGZCdmlkX2F0dHJcZlIsCitcZkJ2aWRfcHV0c1xmUiwKK1xmQnZpZGF0dHJcZlIsCitcZkJ2aWRwdXRzXGZSIC0gXGZCY3Vyc2VzXGZSIGludGVyZmFjZXMgdG8gdGVybWluZm8gZGF0YWJhc2UKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKKy5uZgorXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLmJyCitcZkIjaW5jbHVkZSA8dGVybS5oPlxmUgorLlBQCitcZkJpbnQgc2V0dXB0ZXJtKGNoYXIgKlxmUlxmSXRlcm1cZlJcZkIsIGludCBcZlJcZklmaWxkZXNcZlJcZkIsIGludCAqXGZSXGZJZXJycmV0XGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHNldHRlcm0oY2hhciAqXGZSXGZJdGVybVxmUlxmQik7XGZSCisuYnIKK1xmQlRFUk1JTkFMICpzZXRfY3VydGVybShURVJNSU5BTCAqXGZSXGZJbnRlcm1cZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgZGVsX2N1cnRlcm0oVEVSTUlOQUwgKlxmUlxmSW90ZXJtXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHJlc3RhcnR0ZXJtKGNoYXIgKlxmUlxmSXRlcm1cZlJcZkIsIGludCBcZlJcZklmaWxkZXNcZlJcZkIsIGludCAqXGZSXGZJZXJycmV0XGZSXGZCKTtcZlIKKy5icgorXGZCY2hhciAqdHBhcm0oY2hhciAqXGZSXGZJc3RyXGZSXGZCLCAuLi4pO1xmUgorLmJyCitcZkJpbnQgdHB1dHMoY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCLCBpbnQgXGZSXGZJYWZmY250XGZSXGZCLCBpbnQgKCpcZlJcZklwdXRjXGZSXGZCKShpbnQpKTtcZlIKKy5icgorXGZCaW50IHB1dHAoY29uc3QgY2hhciAqXGZSXGZJc3RyXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHZpZHB1dHMoY2h0eXBlIFxmUlxmSWF0dHJzXGZSXGZCLCBpbnQgKCpcZlJcZklwdXRjXGZSXGZCKShpbnQpKTtcZlIKKy5icgorXGZCaW50IHZpZGF0dHIoY2h0eXBlIFxmUlxmSWF0dHJzXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IHZpZF9wdXRzKGF0dHJfdCBcZlJcZklhdHRyc1xmUlxmQiwgc2hvcnQgXGZSXGZJcGFpclxmUlxmQiwgdm9pZCAqXGZSXGZJb3B0c1xmUlxmQiwgaW50ICgqXGZSXGZJcHV0Y1xmUlxmQikoY2hhcikpO1xmUgorLmJyCitcZkJpbnQgdmlkX2F0dHIoYXR0cl90IFxmUlxmSWF0dHJzXGZSXGZCLCBzaG9ydCBcZlJcZklwYWlyXGZSXGZCLCB2b2lkICpcZlJcZklvcHRzXGZSXGZCKTtcZlIKKy5icgorXGZCaW50IG12Y3VyKGludCBcZlJcZklvbGRyb3dcZlJcZkIsIGludCBcZlJcZklvbGRjb2xcZlJcZkIsIGludCBcZlJcZkluZXdyb3dcZlIsIGludCBcZlJcZkluZXdjb2xcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgdGlnZXRmbGFnKGNoYXIgKlxmUlxmSWNhcG5hbWVcZlJcZkIpO1xmUgorLmJyCitcZkJpbnQgdGlnZXRudW0oY2hhciAqXGZSXGZJY2FwbmFtZVxmUlxmQik7XGZSCisuYnIKK1xmQmNoYXIgKnRpZ2V0c3RyKGNoYXIgKlxmUlxmSWNhcG5hbWVcZlJcZkIpO1xmUgorLmJyCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlc2UgbG93LWxldmVsIHJvdXRpbmVzIG11c3QgYmUgY2FsbGVkIGJ5IHByb2dyYW1zIHRoYXQgaGF2ZSB0byBkZWFsCitkaXJlY3RseSB3aXRoIHRoZSBcZkJ0ZXJtaW5mb1xmUiBkYXRhYmFzZSB0byBoYW5kbGUgY2VydGFpbiB0ZXJtaW5hbAorY2FwYWJpbGl0aWVzLCBzdWNoIGFzIHByb2dyYW1taW5nIGZ1bmN0aW9uIGtleXMuICBGb3IgYWxsIG90aGVyCitmdW5jdGlvbmFsaXR5LCBcZkJjdXJzZXNcZlIgcm91dGluZXMgYXJlIG1vcmUgc3VpdGFibGUgYW5kIHRoZWlyIHVzZSBpcworcmVjb21tZW5kZWQuCisuUFAKK0luaXRpYWxseSwgXGZCc2V0dXB0ZXJtXGZSIHNob3VsZCBiZSBjYWxsZWQuICBOb3RlIHRoYXQKK1xmQnNldHVwdGVybVxmUiBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBieSBcZkJpbml0c2NyXGZSIGFuZAorXGZCbmV3dGVybVxmUi4gIFRoaXMgZGVmaW5lcyB0aGUgc2V0IG9mIHRlcm1pbmFsLWRlcGVuZGVudCB2YXJpYWJsZXMKK1tsaXN0ZWQgaW4gXGZCdGVybWluZm9cZlIoXCpuKV0uCitUaGUgXGZCdGVybWluZm9cZlIgdmFyaWFibGVzCitcZkJsaW5lc1xmUiBhbmQgXGZCY29sdW1uc1xmUiBhcmUgaW5pdGlhbGl6ZWQgYnkgXGZCc2V0dXB0ZXJtXGZSIGFzCitmb2xsb3dzOgorLlJTCisuUFAKK0lmIFxmQnVzZV9lbnYoRkFMU0UpXGZSIGhhcyBiZWVuIGNhbGxlZCwgdmFsdWVzIGZvcgorXGZCbGluZXNcZlIgYW5kIFxmQmNvbHVtbnNcZlIgc3BlY2lmaWVkIGluIFxmQnRlcm1pbmZvXGZSIGFyZSB1c2VkLgorLlBQCitPdGhlcndpc2UsIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgXGZCTElORVNcZlIgYW5kIFxmQkNPTFVNTlNcZlIKK2V4aXN0LCB0aGVpciB2YWx1ZXMgYXJlIHVzZWQuICBJZiB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZG8gbm90CitleGlzdCBhbmQgdGhlIHByb2dyYW0gaXMgcnVubmluZyBpbiBhIHdpbmRvdywgdGhlIGN1cnJlbnQgd2luZG93IHNpemUKK2lzIHVzZWQuICBPdGhlcndpc2UsIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZG8gbm90IGV4aXN0LCB0aGUKK3ZhbHVlcyBmb3IgXGZCbGluZXNcZlIgYW5kIFxmQmNvbHVtbnNcZlIgc3BlY2lmaWVkIGluIHRoZQorXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgYXJlIHVzZWQuCisuUkUKKy5QUAorVGhlIGhlYWRlciBmaWxlcyBcZkJjdXJzZXMuaFxmUiBhbmQgXGZCdGVybS5oXGZSIHNob3VsZCBiZSBpbmNsdWRlZCAoaW4gdGhpcworb3JkZXIpIHRvIGdldCB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIHN0cmluZ3MsIG51bWJlcnMsIGFuZCBmbGFncy4KK1BhcmFtZXRlcml6ZWQgc3RyaW5ncyBzaG91bGQgYmUgcGFzc2VkIHRocm91Z2ggXGZCdHBhcm1cZlIgdG8gaW5zdGFudGlhdGUgdGhlbS4gCitBbGwgXGZCdGVybWluZm9cZlIgc3RyaW5ncyBbaW5jbHVkaW5nIHRoZSBvdXRwdXQgb2YgXGZCdHBhcm1cZlJdIHNob3VsZCBiZSBwcmludGVkCit3aXRoIFxmQnRwdXRzXGZSIG9yIFxmQnB1dHBcZlIuICBDYWxsIHRoZSBcZkJyZXNldF9zaGVsbF9tb2RlXGZSIHRvIHJlc3RvcmUgdGhlCit0dHkgbW9kZXMgYmVmb3JlIGV4aXRpbmcgW3NlZSBcZkJjdXJzX2tlcm5lbFxmUigzWCldLiAgUHJvZ3JhbXMgd2hpY2ggdXNlCitjdXJzb3IgYWRkcmVzc2luZyBzaG91bGQgb3V0cHV0IFxmQmVudGVyX2NhX21vZGVcZlIgdXBvbiBzdGFydHVwIGFuZCBzaG91bGQKK291dHB1dCBcZkJleGl0X2NhX21vZGVcZlIgYmVmb3JlIGV4aXRpbmcuICBQcm9ncmFtcyBkZXNpcmluZyBzaGVsbCBlc2NhcGVzCitzaG91bGQgY2FsbAorLlBQCitcZkJyZXNldF9zaGVsbF9tb2RlXGZSIGFuZCBvdXRwdXQgXGZCZXhpdF9jYV9tb2RlXGZSIGJlZm9yZSB0aGUgc2hlbGwKK2lzIGNhbGxlZCBhbmQgc2hvdWxkIG91dHB1dCBcZkJlbnRlcl9jYV9tb2RlXGZSIGFuZCBjYWxsCitcZkJyZXNldF9wcm9nX21vZGVcZlIgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHNoZWxsLgorLlBQCitUaGUgXGZCc2V0dXB0ZXJtXGZSIHJvdXRpbmUgcmVhZHMgaW4gdGhlIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlLAoraW5pdGlhbGl6aW5nIHRoZSBcZkJ0ZXJtaW5mb1xmUiBzdHJ1Y3R1cmVzLCBidXQgZG9lcyBub3Qgc2V0IHVwIHRoZQorb3V0cHV0IHZpcnR1YWxpemF0aW9uIHN0cnVjdHVyZXMgdXNlZCBieSBcZkJjdXJzZXNcZlIuICBUaGUgdGVybWluYWwKK3R5cGUgaXMgdGhlIGNoYXJhY3RlciBzdHJpbmcgXGZJdGVybVxmUjsgaWYgXGZJdGVybVxmUiBpcyBudWxsLCB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1cZlIgaXMgdXNlZC4KK0FsbCBvdXRwdXQgaXMgdG8gZmlsZSBkZXNjcmlwdG9yIFxmQmZpbGRlc1xmUiB3aGljaCBpcyBpbml0aWFsaXplZCBmb3Igb3V0cHV0LgorSWYgXGZJZXJycmV0XGZSIGlzIG5vdCBudWxsLAordGhlbiBcZkJzZXR1cHRlcm1cZlIgcmV0dXJucyBcZkJPS1xmUiBvcgorXGZCRVJSXGZSIGFuZCBzdG9yZXMgYSBzdGF0dXMgdmFsdWUgaW4gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieQorXGZJZXJycmV0XGZSLgorQSByZXR1cm4gdmFsdWUgb2YgXGZCT0tcZlIgY29tYmluZWQgd2l0aCBzdGF0dXMgb2YgXGZCMVxmUiBpbiBcZkllcnJyZXRcZlIKK2lzIG5vcm1hbC4KK0lmIFxmQkVSUlxmUiBpcyByZXR1cm5lZCwgZXhhbWluZSBcZkllcnJyZXRcZlI6CisuUlMKKy5UUCA1CisuQiAxCittZWFucyB0aGF0IHRoZSB0ZXJtaW5hbCBpcyBoYXJkY29weSwgY2Fubm90IGJlIHVzZWQgZm9yIGN1cnNlcyBhcHBsaWNhdGlvbnMuCisuVFAgNQorLkIgMAorbWVhbnMgdGhhdCB0aGUgdGVybWluYWwgY291bGQgbm90IGJlIGZvdW5kLAorb3IgdGhhdCBpdCBpcyBhIGdlbmVyaWMgdHlwZSwKK2hhdmluZyB0b28gbGl0dGxlIGluZm9ybWF0aW9uIGZvciBjdXJzZXMgYXBwbGljYXRpb25zIHRvIHJ1bi4KKy5UUCA1CisuQiAtMQorbWVhbnMgdGhhdCB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgY291bGQgbm90IGJlIGZvdW5kLgorLlJFCisuUFAKK0lmIFxmSWVycnJldFxmUiBpcworbnVsbCwgXGZCc2V0dXB0ZXJtXGZSIHByaW50cyBhbiBlcnJvciBtZXNzYWdlIHVwb24gZmluZGluZyBhbiBlcnJvcgorYW5kIGV4aXRzLiAgVGh1cywgdGhlIHNpbXBsZXN0IGNhbGwgaXM6Cisuc3AKKyAgICAgIFxmQnNldHVwdGVybSgoY2hhciAqKTAsIDEsIChpbnQgKikwKTtcZlIsCisuc3AKK3doaWNoIHVzZXMgYWxsIHRoZSBkZWZhdWx0cyBhbmQgc2VuZHMgdGhlIG91dHB1dCB0byBcZkJzdGRvdXRcZlIuCisuUFAKK1RoZSBcZkJzZXR0ZXJtXGZSIHJvdXRpbmUgaXMgYmVpbmcgcmVwbGFjZWQgYnkgXGZCc2V0dXB0ZXJtXGZSLiAgVGhlIGNhbGw6Cisuc3AKKyAgICAgIFxmQnNldHVwdGVybShcZlJcZkl0ZXJtXGZSXGZCLCAxLCAoaW50ICopMClcZlIKKy5zcAorcHJvdmlkZXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBcZkJzZXR0ZXJtKFxmUlxmSXRlcm1cZlJcZkIpXGZSLgorVGhlIFxmQnNldHRlcm1cZlIgcm91dGluZSBpcyBpbmNsdWRlZCBoZXJlIGZvciBCU0QgY29tcGF0aWJpbGl0eSwgYW5kCitpcyBub3QgcmVjb21tZW5kZWQgZm9yIG5ldyBwcm9ncmFtcy4KKy5QUAorVGhlIFxmQnNldF9jdXJ0ZXJtXGZSIHJvdXRpbmUgc2V0cyB0aGUgdmFyaWFibGUgXGZCY3VyX3Rlcm1cZlIgdG8KK1xmSW50ZXJtXGZSLCBhbmQgbWFrZXMgYWxsIG9mIHRoZSBcZkJ0ZXJtaW5mb1xmUiBib29sZWFuLCBudW1lcmljLCBhbmQKK3N0cmluZyB2YXJpYWJsZXMgdXNlIHRoZSB2YWx1ZXMgZnJvbSBcZkludGVybVxmUi4gIEl0IHJldHVybnMgdGhlIG9sZCB2YWx1ZQorb2YgXGZCY3VyX3Rlcm1cZlIuCisuUFAKK1RoZSBcZkJkZWxfY3VydGVybVxmUiByb3V0aW5lIGZyZWVzIHRoZSBzcGFjZSBwb2ludGVkIHRvIGJ5CitcZklvdGVybVxmUiBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHVzZS4gIElmIFxmSW90ZXJtXGZSIGlzCit0aGUgc2FtZSBhcyBcZkJjdXJfdGVybVxmUiwgcmVmZXJlbmNlcyB0byBhbnkgb2YgdGhlIFxmQnRlcm1pbmZvXGZSCitib29sZWFuLCBudW1lcmljLCBhbmQgc3RyaW5nIHZhcmlhYmxlcyB0aGVyZWFmdGVyIG1heSByZWZlciB0byBpbnZhbGlkCittZW1vcnkgbG9jYXRpb25zIHVudGlsIGFub3RoZXIgXGZCc2V0dXB0ZXJtXGZSIGhhcyBiZWVuIGNhbGxlZC4KKy5QUAorVGhlIFxmQnJlc3RhcnR0ZXJtXGZSIHJvdXRpbmUgaXMgc2ltaWxhciB0byBcZkJzZXR1cHRlcm1cZlIgYW5kIFxmQmluaXRzY3JcZlIsCitleGNlcHQgdGhhdCBpdCBpcyBjYWxsZWQgYWZ0ZXIgcmVzdG9yaW5nIG1lbW9yeSB0byBhIHByZXZpb3VzIHN0YXRlIChmb3IKK2V4YW1wbGUsIHdoZW4gcmVsb2FkaW5nIGEgZ2FtZSBzYXZlZCBhcyBhIGNvcmUgaW1hZ2UgZHVtcCkuICBJdCBhc3N1bWVzIHRoYXQKK3RoZSB3aW5kb3dzIGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBvcHRpb25zIGFyZSB0aGUgc2FtZSBhcyB3aGVuIG1lbW9yeSB3YXMKK3NhdmVkLCBidXQgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIGJhdWQgcmF0ZSBtYXkgYmUgZGlmZmVyZW50LiAgQWNjb3JkaW5nbHksCitpdCBzYXZlcyB2YXJpb3VzIHR0eSBzdGF0ZSBiaXRzLCBjYWxscyBcZkJzZXR1cHRlcm1cZlAsCithbmQgdGhlbiByZXN0b3JlcyB0aGUgYml0cy4KKy5QUAorVGhlIFxmQnRwYXJtXGZSIHJvdXRpbmUgaW5zdGFudGlhdGVzIHRoZSBzdHJpbmcgXGZJc3RyXGZSIHdpdGgKK3BhcmFtZXRlcnMgXGZJcGlcZlIuICBBIHBvaW50ZXIgaXMgcmV0dXJuZWQgdG8gdGhlIHJlc3VsdCBvZiBcZklzdHJcZlIKK3dpdGggdGhlIHBhcmFtZXRlcnMgYXBwbGllZC4KKy5QUAorVGhlIFxmQnRwdXRzXGZSIHJvdXRpbmUgYXBwbGllcyBwYWRkaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBzdHJpbmcKK1xmSXN0clxmUiBhbmQgb3V0cHV0cyBpdC4gIFRoZSBcZklzdHJcZlIgbXVzdCBiZSBhIHRlcm1pbmZvIHN0cmluZwordmFyaWFibGUgb3IgdGhlIHJldHVybiB2YWx1ZSBmcm9tIFxmQnRwYXJtXGZSLCBcZkJ0Z2V0c3RyXGZSLCBvcgorXGZCdGdvdG9cZlIuICBcZklhZmZjbnRcZlIgaXMgdGhlIG51bWJlciBvZiBsaW5lcyBhZmZlY3RlZCwgb3IgMSBpZgorbm90IGFwcGxpY2FibGUuICBcZklwdXRjXGZSIGlzIGEgXGZCcHV0Y2hhclxmUi1saWtlIHJvdXRpbmUgdG8gd2hpY2gKK3RoZSBjaGFyYWN0ZXJzIGFyZSBwYXNzZWQsIG9uZSBhdCBhIHRpbWUuCisuUFAKK1RoZSBcZkJwdXRwXGZSIHJvdXRpbmUgY2FsbHMgXGZCdHB1dHMoXGZSXGZJc3RyXGZSXGZCLCAxLCBwdXRjaGFyKVxmUi4KK05vdGUgdGhhdCB0aGUgb3V0cHV0IG9mIFxmQnB1dHBcZlIgYWx3YXlzIGdvZXMgdG8gXGZCc3Rkb3V0XGZSLCBub3QgdG8KK3RoZSBcZklmaWxkZXNcZlIgc3BlY2lmaWVkIGluIFxmQnNldHVwdGVybVxmUi4KKy5QUAorVGhlIFxmQnZpZHB1dHNcZlIgcm91dGluZSBkaXNwbGF5cyB0aGUgc3RyaW5nIG9uIHRoZSB0ZXJtaW5hbCBpbiB0aGUKK3ZpZGVvIGF0dHJpYnV0ZSBtb2RlIFxmSWF0dHJzXGZSLCB3aGljaCBpcyBhbnkgY29tYmluYXRpb24gb2YgdGhlCithdHRyaWJ1dGVzIGxpc3RlZCBpbiBcZkJjdXJzZXNcZlIoM1gpLiAgVGhlIGNoYXJhY3RlcnMgYXJlIHBhc3NlZCB0bwordGhlIFxmQnB1dGNoYXJcZlItbGlrZSByb3V0aW5lIFxmSXB1dGNcZlIuCisuUFAKK1RoZSBcZkJ2aWRhdHRyXGZSIHJvdXRpbmUgaXMgbGlrZSB0aGUgXGZCdmlkcHV0c1xmUiByb3V0aW5lLCBleGNlcHQKK3RoYXQgaXQgb3V0cHV0cyB0aHJvdWdoIFxmQnB1dGNoYXJcZlIuCisuUFAKK1RoZSBcZkJ2aWRfYXR0clxmUiBhbmQgXGZCdmlkX3B1dHNcZlIgcm91dGluZXMgY29ycmVzcG9uZCB0byB2aWRhdHRyIGFuZCB2aWRwdXRzLAorcmVzcGVjdGl2ZWx5LgorVGhleSB1c2UgYSBzZXQgb2YgYXJndW1lbnRzIGZvciByZXByZXNlbnRpbmcgdGhlIHZpZGVvIGF0dHJpYnV0ZXMgcGx1cyBjb2xvciwKK2kuZS4sCitvbmUgb2YgdHlwZSBhdHRyX3QgZm9yIHRoZSBhdHRyaWJ1dGVzIGFuZCBvbmUgb2Ygc2hvcnQgZm9yCit0aGUgY29sb3JfcGFpciBudW1iZXIuCitUaGUgXGZCdmlkX2F0dHJcZlIgYW5kIFxmQnZpZF9wdXRzXGZSIHJvdXRpbmVzCithcmUgZGVzaWduZWQgdG8gdXNlIHRoZSBhdHRyaWJ1dGUgY29uc3RhbnRzIHdpdGggdGhlIFxmSVdBX1xmUiBwcmVmaXguCitUaGUgb3B0cyBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KK0N1cnJlbnRseSwgYXBwbGljYXRpb25zIG11c3QgcHJvdmlkZSBhIG51bGwgcG9pbnRlciBmb3IgdGhhdCBhcmd1bWVudC4KKy5QUAorVGhlIFxmQm12Y3VyXGZSIHJvdXRpbmUgcHJvdmlkZXMgbG93LWxldmVsIGN1cnNvciBtb3Rpb24uICBJdCB0YWtlcworZWZmZWN0IGltbWVkaWF0ZWx5IChyYXRoZXIgdGhhbiBhdCB0aGUgbmV4dCByZWZyZXNoKS4KKy5QUAorVGhlIFxmQnRpZ2V0ZmxhZ1xmUiwgXGZCdGlnZXRudW1cZlIgYW5kIFxmQnRpZ2V0c3RyXGZSIHJvdXRpbmVzIHJldHVybgordGhlIHZhbHVlIG9mIHRoZSBjYXBhYmlsaXR5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFxmQnRlcm1pbmZvXGZSCitcZkljYXBuYW1lXGZSIHBhc3NlZCB0byB0aGVtLCBzdWNoIGFzIFxmQnhlbmxcZlIuCisuUFAKK1RoZSBcZkJ0aWdldGZsYWdcZlIgcm91dGluZSByZXR1cm5zIHRoZSB2YWx1ZSBcZkItMVxmUiBpZgorXGZJY2FwbmFtZVxmUiBpcyBub3QgYSBib29sZWFuIGNhcGFiaWxpdHksCitvciBcZkIwXGZSIGlmIGl0IGlzIGNhbmNlbGVkIG9yIGFic2VudCBmcm9tIHRoZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKy5QUAorVGhlIFxmQnRpZ2V0bnVtXGZSIHJvdXRpbmUgcmV0dXJucyB0aGUgdmFsdWUgXGZCLTJcZlIgaWYKK1xmSWNhcG5hbWVcZlIgaXMgbm90IGEgbnVtZXJpYyBjYXBhYmlsaXR5LAorb3IgXGZCLTFcZlIgaWYgaXQgaXMgY2FuY2VsZWQgb3IgYWJzZW50IGZyb20gdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLgorLlBQCitUaGUgXGZCdGlnZXRzdHJcZlIgcm91dGluZSByZXR1cm5zIHRoZSB2YWx1ZSBcZkIoY2hhciAqKS0xXGZSCitpZiBcZkljYXBuYW1lXGZSIGlzIG5vdCBhIHN0cmluZyBjYXBhYmlsaXR5LAorb3IgXGZCMFxmUiBpZiBpdCBpcyBjYW5jZWxlZCBvciBhYnNlbnQgZnJvbSB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uCisuUFAKK1RoZSBcZkljYXBuYW1lXGZSIGZvciBlYWNoIGNhcGFiaWxpdHkgaXMgZ2l2ZW4gaW4gdGhlIHRhYmxlIGNvbHVtbiBlbnRpdGxlZAorXGZJY2FwbmFtZVxmUiBjb2RlIGluIHRoZSBjYXBhYmlsaXRpZXMgc2VjdGlvbiBvZiBcZkJ0ZXJtaW5mb1xmUihcKm4pLgorLnNwCisuUlMKK1xmQmNoYXIgKmJvb2xuYW1lc1tdXGZSLCBcZkIqYm9vbGNvZGVzW11cZlIsIFxmQipib29sZm5hbWVzW11cZlIKKy5zcAorXGZCY2hhciAqbnVtbmFtZXNbXVxmUiwgXGZCKm51bWNvZGVzW11cZlIsIFxmQipudW1mbmFtZXNbXVxmUgorLnNwCitcZkJjaGFyICpzdHJuYW1lc1tdXGZSLCBcZkIqc3RyY29kZXNbXVxmUiwgXGZCKnN0cmZuYW1lc1tdXGZSCisuUkUKKy5QUAorVGhlc2UgbnVsbC10ZXJtaW5hdGVkIGFycmF5cyBjb250YWluIHRoZSBcZkljYXBuYW1lc1xmUiwgdGhlCitcZkJ0ZXJtY2FwXGZSIGNvZGVzLCBhbmQgdGhlIGZ1bGwgQyBuYW1lcywgZm9yIGVhY2ggb2YgdGhlCitcZkJ0ZXJtaW5mb1xmUiB2YXJpYWJsZXMuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUgorKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uIHN1Y2Nlc3NmdWwKK2NvbXBsZXRpb24sIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgaW4gdGhlIHByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKy5QUAorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgYWx3YXlzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorLlJTCisuVFAgNQorXGZCZGVsX2N1cnRlcm1cZlAKK3JldHVybnMgYW4gZXJyb3IKK2lmIGl0cyB0ZXJtaW5hbCBwYXJhbWV0ZXIgaXMgbnVsbC4KKy5UUCA1CitcZkJwdXRwXGZQCitjYWxscyBcZkJ0cHV0c1xmUCwgcmV0dXJuaW5nIHRoZSBzYW1lIGVycm9yLWNvZGVzLgorLlRQIDUKK1xmQnJlc3RhcnR0ZXJtXGZQCityZXR1cm5zIGFuIGVycm9yCitpZiB0aGUgYXNzb2NpYXRlZCBjYWxsIHRvIFxmQnNldHVwdGVybVxmUCByZXR1cm5zIGFuIGVycm9yLgorLlRQIDUKK1xmQnNldHVwdGVybVxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgaXQgY2Fubm90IGFsbG9jYXRlIGVub3VnaCBtZW1vcnksIG9yCitjcmVhdGUgdGhlIGluaXRpYWwgd2luZG93cyAoc3Rkc2NyLCBjdXJzY3IsIG5ld3NjcikuCitPdGhlciBlcnJvciBjb25kaXRpb25zIGFyZSBkb2N1bWVudGVkIGFib3ZlLgorLlRQIDUKK1xmQnRwdXRzXGZQCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgcGFyYW1ldGVyIGlzIG51bGwuCitJdCBkb2VzIG5vdCBkZXRlY3QgSS9PIGVycm9yczoKK1gvT3BlbiBzdGF0ZXMgdGhhdCBcZkJ0cHV0c1xmUCBpZ25vcmVzIHRoZSByZXR1cm4gdmFsdWUKK29mIHRoZSBvdXRwdXQgZnVuY3Rpb24gXGZJcHV0Y1xmUC4KKy5SRQorLlNIIE5PVEVTCitUaGUgXGZCc2V0dXB0ZXJtXGZSIHJvdXRpbmUgc2hvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YgXGZCc2V0dGVybVxmUi4KK0l0IG1heSBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byB0ZXN0IGZvciB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgd2l0aG91dAorY29tbWl0dGluZyB0byB0aGUgYWxsb2NhdGlvbiBvZiBzdG9yYWdlIGludm9sdmVkIGluIFxmQmluaXRzY3JcZlIuCisuUFAKK05vdGUgdGhhdCBcZkJ2aWRhdHRyXGZSIGFuZCBcZkJ2aWRwdXRzXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBmdW5jdGlvbiBcZkJzZXR0ZXJtXGZSIGlzIG5vdCBkZXNjcmliZWQgYnkgWC9PcGVuIGFuZCBtdXN0CitiZSBjb25zaWRlcmVkIG5vbi1wb3J0YWJsZS4gIEFsbCBvdGhlciBmdW5jdGlvbnMgYXJlIGFzIGRlc2NyaWJlZCBieSBYL09wZW4uCisuUFAKK1xmQnNldHVwdGVybVxmUCBjb3BpZXMgdGhlIHRlcm1pbmFsIG5hbWUgdG8gdGhlIGFycmF5IFxmQnR0eXR5cGVcZlAuCitUaGlzIGlzIG5vdCBwYXJ0IG9mIFgvT3BlbiBDdXJzZXMsIGJ1dCBpcyBhc3N1bWVkIGJ5IHNvbWUgYXBwbGljYXRpb25zLgorLlBQCitJbiBTeXN0ZW0gViBSZWxlYXNlIDQsIFxmQnNldF9jdXJ0ZXJtXGZSIGhhcyBhbiBcZkJpbnRcZlIgcmV0dXJuIHR5cGUgYW5kCityZXR1cm5zIFxmQk9LXGZSIG9yIFxmQkVSUlxmUi4gIFdlIGhhdmUgY2hvc2VuIHRvIGltcGxlbWVudCB0aGUgWC9PcGVuIEN1cnNlcworc2VtYW50aWNzLgorLlBQCitJbiBTeXN0ZW0gViBSZWxlYXNlIDQsIHRoZSB0aGlyZCBhcmd1bWVudCBvZiBcZkJ0cHV0c1xmUiBoYXMgdGhlIHR5cGUKK1xmQmludCAoKnB1dGMpKGNoYXIpXGZSLgorLlBQCitBdCBsZWFzdCBvbmUgaW1wbGVtZW50YXRpb24gb2YgWC9PcGVuIEN1cnNlcyAoU29sYXJpcykgcmV0dXJucyBhIHZhbHVlCitvdGhlciB0aGFuIE9LL0VSUiBmcm9tIFxmQnRwdXRzXGZQLgorVGhhdCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgYW5kIGRvZXMgbm8gZXJyb3ItY2hlY2tpbmcuCisuUFAKK1gvT3BlbiBDdXJzZXMgcHJvdG90eXBlcyBcZkJ0cGFybVxmUiB3aXRoIGEgZml4ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMsCityYXRoZXIgdGhhbiBhIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuCitUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LgorUG9ydGFibGUgYXBwbGljYXRpb25zIHNob3VsZCBwcm92aWRlIDkgcGFyYW1ldGVycyBhZnRlciB0aGUgZm9ybWF0OworemVyb2VzIGFyZSBmaW5lIGZvciB0aGlzIHB1cnBvc2UuCisuUFAKK1gvT3BlbiBub3RlcyB0aGF0IGFmdGVyIGNhbGxpbmcgXGZCbXZjdXJcZlIsIHRoZSBjdXJzZXMgc3RhdGUgbWF5IG5vdCBtYXRjaCB0aGUKK2FjdHVhbCB0ZXJtaW5hbCBzdGF0ZSwgYW5kIHRoYXQgYW4gYXBwbGljYXRpb24gc2hvdWxkIHRvdWNoIGFuZCByZWZyZXNoCit0aGUgd2luZG93IGJlZm9yZSByZXN1bWluZyBub3JtYWwgY3Vyc2VzIGNhbGxzLgorQm90aCBuY3Vyc2VzIGFuZCBTeXN0ZW0gViBSZWxlYXNlIDQgY3Vyc2VzIGltcGxlbWVudCBcZkJtdmN1clxmUiB1c2luZwordGhlIFNDUkVFTiBkYXRhIGFsbG9jYXRlZCBpbiBlaXRoZXIgXGZCaW5pdHNjclxmUiBvciBcZkJuZXd0ZXJtXGZSLgorU28gdGhvdWdoIGl0IGlzIGRvY3VtZW50ZWQgYXMgYSB0ZXJtaW5mbyBmdW5jdGlvbiwKK1xmQm12Y3VyXGZSIGlzIHJlYWxseSBhIGN1cnNlcyBmdW5jdGlvbiB3aGljaCBpcyBub3Qgd2VsbCBzcGVjaWZpZWQuCisuUFAKK1gvT3BlbiBzdGF0ZXMgdGhhdCB0aGUgb2xkIGxvY2F0aW9uIG11c3QgYmUgZ2l2ZW4gZm9yIFxmQm12Y3VyXGZQLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdGhlIGNhbGxlciB0byB1c2UgLTEncyBmb3IgdGhlIG9sZCBvcmRpbmF0ZXMuCitJbiB0aGF0IGNhc2UsIHRoZSBvbGQgbG9jYXRpb24gaXMgdW5rbm93bi4KKy5QUAorRXh0ZW5kZWQgdGVybWluYWwgY2FwYWJpbGl0eSBuYW1lcywgZS5nLiwgYXMgZGVmaW5lZCBieSBcZkJ0aWNcIC14XGZQLAorYXJlIG5vdCBzdG9yZWQgaW4gdGhlIGFycmF5cyBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCY3Vyc19pbml0c2NyXGZSKDNYKSwKK1xmQmN1cnNfa2VybmVsXGZSKDNYKSwKK1xmQmN1cnNfdGVybWNhcFxmUigzWCksCitcZkJwdXRjXGZSKDMpLAorXGZCdGVybWluZm9cZlIoXCpuKQorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vY3Vyc190aHJlYWRzLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdGhyZWFkcy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RhYmRiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdGhyZWFkcy4zeApAQCAtMCwwICsxLDYwMyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBjdXJzX3RocmVhZHMuM3gsdiAxLjEyIDIwMDgvMDQvMTIgMTg6MjI6NTEgdG9tIEV4cCAkCisuVEggY3Vyc190aHJlYWRzIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCdXNlX3NjcmVlblxmUiwKK1xmQnVzZV93aW5kb3dcZlIgLSBcZkJjdXJzZXNcZlIgdGhyZWFkIHN1cHBvcnQKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCdHlwZWRlZiBpbnQgKCpOQ1VSU0VTX1dJTkRPV19DQikoV0lORE9XICosIHZvaWQgKik7XGZSCitcZkJ0eXBlZGVmIGludCAoKk5DVVJTRVNfU0NSRUVOX0NCKShTQ1JFRU4gKiwgdm9pZCAqKTtcZlIKKy5icgorXGZCaW50IHNldF9lc2NkZWxheShpbnQgc2l6ZSk7XGZSCisuYnIKK1xmQmludCBzZXRfdGFic2l6ZShpbnQgc2l6ZSk7XGZSCisuYnIKK1xmQmludCB1c2Vfc2NyZWVuKFNDUkVFTiAqc2NyLCBOQ1VSU0VTX1dJTkRPV19DQiBmdW5jLCB2b2lkICpkYXRhKTtcZlIKKy5icgorXGZCaW50IHVzZV93aW5kb3coV0lORE9XICp3aW4sIE5DVVJTRVNfU0NSRUVOX0NCIGZ1bmMsIHZvaWQgKmRhdGEpO1xmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcHJvdmlkZSBydWRpbWVudGFyeSBzdXBwb3J0Citmb3IgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLgorVGhpcyBtYWtlcyBhIGRpZmZlcmVudCBzZXQgb2YgbGlicmFyaWVzLCBlLmcuLCBcZklsaWJuY3Vyc2VzdFxmUCBzaW5jZQordGhlIGJpbmFyeSBpbnRlcmZhY2VzIGFyZSBkaWZmZXJlbnQuCisuUFAKK1JhdGhlciB0aGFuIG1vZGlmeSB0aGUgaW50ZXJmYWNlcyB0byBwYXNzIGEgdGhyZWFkIHNwZWNpZmllciB0bworZWFjaCBmdW5jdGlvbiwgaXQgYWRkcyBhIGZldyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gYW55Citjb25maWd1cmF0aW9uIHdoaWNoIGhpZGUgdGhlIG11dGV4J3MgbmVlZGVkIHRvIHByZXZlbnQgY29uY3VycmVudAordXNlIG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzIHdoZW4gY29uZmlndXJlZCBmb3IgdGhyZWFkaW5nLgorLlBQCitJbiBhZGRpdGlvbiB0byBmb3JjaW5nIGFjY2VzcyB0byBtZW1iZXJzIG9mIHRoZSBcZkJXSU5ET1dcZlAgc3RydWN0dXJlCit0byBiZSB2aWEgZnVuY3Rpb25zIChzZWUgXGZCY3Vyc19vcGFxdWVcZlAoM3gpKSwKK2l0IG1ha2VzIGZ1bmN0aW9ucyBvZiB0aGUgY29tbW9uIGdsb2JhbCB2YXJpYWJsZXMsCitlLmcuLAorQ09MT1JTLAorQ09MT1JfUEFJUlMsCitDT0xTLAorRVNDREVMQVksCitMSU5FUywKK1RBQlNJWkUKK2N1cnNjciwKK25ld3NjciBhbmQKK3R0eXR5cGUuCitUaG9zZSB2YXJpYWJsZXMgYXJlIG1haW50YWluZWQgYXMgcmVhZC1vbmx5IHZhbHVlcywgc3RvcmVkIGluIHRoZSBcZkJTQ1JFRU5cZlAKK3N0cnVjdHVyZS4KKy5QUAorRXZlbiB0aGlzIGlzIG5vdCBlbm91Z2ggdG8gbWFrZSBhIHRocmVhZC1zYWZlIGFwcGxpY2F0aW9uIHVzaW5nIGN1cnNlcy4KK0EgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24gd291bGQgYmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aHJlYWRzIHVwZGF0aW5nCitzZXBhcmF0ZSB3aW5kb3dzICh3aXRoaW4gdGhlIHNhbWUgZGV2aWNlKSwKK29yIHVwZGF0aW5nIG9uIHNlcGFyYXRlIHNjcmVlbnMgKG9uIGRpZmZlcmVudCBkZXZpY2VzKS4KK0Fsc28sIGEgZmV3IG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzIGFyZSBjb25zaWRlcmVkIHdyaXRhYmxlIGJ5IHNvbWUKK2FwcGxpY2F0aW9ucy4KK1RoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgYWRkcmVzcyB0aGVzZSBzcGVjaWFsIHNpdHVhdGlvbnMuCisuUFAKK1RoZSBFU0NERUxBWSBhbmQgVEFCU0laRSBnbG9iYWwgdmFyaWFibGVzIGFyZSBtb2RpZmllZCBieSBzb21lIGFwcGxpY2F0aW9ucy4KK1RvIG1vZGlmeSB0aGVtIGluIGFueSBjb25maWd1cmF0aW9uLAordXNlIHRoZSBcZkJzZXRfZXNjZGVsYXlcZlAgb3IgXGZCc2V0X3RhYnNpemVcZlAgZnVuY3Rpb25zLgorT3RoZXIgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90IG1vZGlmaWFibGUuCisuUFAKK1RoZSBcZkJ1c2Vfd2luZG93XGZQIGFuZCBcZkJ1c2Vfc2NyZWVuXGZQIGZ1bmN0aW9ucyBwcm92aWRlIGNvYXJzZQorZ3JhbnVsYXJpdHkgbXV0ZXhlcyBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBcZkJXSU5ET1dcZlAgYW5kIFxmQlNDUkVFTlxmUAorcGFyYW1ldGVycywgYW5kIGNhbGwgYSB1c2VyLXN1cHBsaWVkIGZ1bmN0aW9uLAorcGFzc2luZyBpdCBhIFxmSWRhdGFcZlAgcGFyYW1ldGVyLAorYW5kIHJldHVybmluZyB0aGUgdmFsdWUgZnJvbSB0aGUgdXNlci1zdXBwbGllZCBmdW5jdGlvbiB0byB0aGUgYXBwbGljYXRpb24uCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuU1MgVVNBR0UKK0FsbCBvZiB0aGUgbmN1cnNlcyBsaWJyYXJ5IGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgbG9jYWxlIGlzIG5vdAorYWx0ZXJlZCBkdXJpbmcgb3BlcmF0aW9uLgorSW4gYWRkaXRpb24sCit0aGV5IHVzZSBkYXRhIHdoaWNoIGlzIG1haW50YWluZWQgd2l0aGluIGEgaGllcmFyY2h5IG9mIHNjb3Blcy4KKy5SUworLlRQIDMKKy0KK2dsb2JhbCBkYXRhLCBlLmcuLCB1c2VkIGluIHRoZSBsb3ctbGV2ZWwgdGVybWluZm8gb3IgdGVybWNhcCBpbnRlcmZhY2VzLgorLlRQIDMKKy0KK3Rlcm1pbmFsIGRhdGEsIGUuZy4sIGFzc29jaWF0ZWQgd2l0aCBhIGNhbGwgdG8gXGZJc2V0X2N1cnRlcm1cZlAuCitUaGUgdGVybWluYWwgZGF0YSBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBzY3JlZW5zIGFyZSBjcmVhdGVkLgorLlRQIDMKKy0KK3NjcmVlbiBkYXRhLCBlLmcuLCBhc3NvY2lhdGVkIHdpdGggYSBjYWxsIHRvIFxmSW5ld3Rlcm1cZlAgb3IgXGZJaW5pdHNjclxmUC4KKy5UUCAzCistCit3aW5kb3cgZGF0YSwgZS5nLiwgYXNzb2NpYXRlZCB3aXRoIGEgY2FsbCB0byBcZkluZXd3aW5cZlAgb3IgXGZJc3Vid2luXGZQLgorV2luZG93cyBhcmUgYXNzb2NpYXRlZCB3aXRoIHNjcmVlbnMuCitQYWRzIGFyZSBub3QgbmVjZXNzYXJpbHkgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzY3JlZW4uCisuSVAKK01vc3QgY3Vyc2VzIGFwcGxpY2F0aW9ucyBvcGVyYXRlIG9uIG9uZSBvciBtb3JlIHdpbmRvd3Mgd2l0aGluIGEgc2luZ2xlIHNjcmVlbi4KKy5UUCAzCistCityZWVudHJhbnQsIGkuZS4sIGl0IHVzZXMgb25seSB0aGUgZGF0YSBwYXNzZWQgYXMgcGFyYW1ldGVycy4KKy5SRQorLlBQCitUaGlzIHRhYmxlIGxpc3RzIHRoZSBzY29wZSBvZiBkYXRhIHVzZWQgZm9yIGVhY2ggc3ltYm9sIGluIHRoZQorbmN1cnNlcyBsaWJyYXJ5IHdoZW4gaXQgaXMgY29uZmlndXJlZCB0byBzdXBwb3J0IHRocmVhZGluZzoKKy5UUworY2VudGVyIHRhYigvKTsKK2wgbAorbCBsIC4KK1N5bWJvbC9TY29wZQorPQorQkMvZ2xvYmFsCitDT0xPUlMvc2NyZWVuIChyZWFkb25seSkKK0NPTE9SX1BBSVIvcmVlbnRyYW50CitDT0xPUl9QQUlSUy9zY3JlZW4gKHJlYWRvbmx5KQorQ09MUy9zY3JlZW4gKHJlYWRvbmx5KQorRVNDREVMQVkvc2NyZWVuIChyZWFkb25seSwgc2VlIFxmSXNldF9lc2NkZWxheVxmUCkKK0xJTkVTL3NjcmVlbiAocmVhZG9ubHkpCitQQUlSX05VTUJFUi9yZWVudHJhbnQKK1BDL2dsb2JhbAorU1AvZ2xvYmFsCitUQUJTSVpFL3NjcmVlbiAocmVhZG9ubHkpCitVUC9nbG9iYWwKK2Fjc19tYXAvc2NyZWVuIChyZWFkb25seSkKK2FkZF93Y2gvd2luZG93IChzdGRzY3IpCithZGRfd2NobnN0ci93aW5kb3cgKHN0ZHNjcikKK2FkZF93Y2hzdHIvd2luZG93IChzdGRzY3IpCithZGRjaC93aW5kb3cgKHN0ZHNjcikKK2FkZGNobnN0ci93aW5kb3cgKHN0ZHNjcikKK2FkZGNoc3RyL3dpbmRvdyAoc3Rkc2NyKQorYWRkbnN0ci93aW5kb3cgKHN0ZHNjcikKK2FkZG53c3RyL3dpbmRvdyAoc3Rkc2NyKQorYWRkc3RyL3dpbmRvdyAoc3Rkc2NyKQorYWRkd3N0ci93aW5kb3cgKHN0ZHNjcikKK2Fzc3VtZV9kZWZhdWx0X2NvbG9ycy9zY3JlZW4KK2F0dHJfZ2V0L3dpbmRvdyAoc3Rkc2NyKQorYXR0cl9vZmYvd2luZG93IChzdGRzY3IpCithdHRyX29uL3dpbmRvdyAoc3Rkc2NyKQorYXR0cl9zZXQvd2luZG93IChzdGRzY3IpCithdHRyb2ZmL3dpbmRvdyAoc3Rkc2NyKQorYXR0cm9uL3dpbmRvdyAoc3Rkc2NyKQorYXR0cnNldC93aW5kb3cgKHN0ZHNjcikKK2JhdWRyYXRlL3NjcmVlbgorYmVlcC9zY3JlZW4KK2JrZ2Qvd2luZG93IChzdGRzY3IpCitia2dkc2V0L3dpbmRvdyAoc3Rkc2NyKQorYmtncm5kL3dpbmRvdyAoc3Rkc2NyKQorYmtncm5kc2V0L3dpbmRvdyAoc3Rkc2NyKQorYm9vbGNvZGVzL2dsb2JhbCAocmVhZG9ubHkpCitib29sZm5hbWVzL2dsb2JhbCAocmVhZG9ubHkpCitib29sbmFtZXMvZ2xvYmFsIChyZWFkb25seSkKK2JvcmRlci93aW5kb3cgKHN0ZHNjcikKK2JvcmRlcl9zZXQvd2luZG93IChzdGRzY3IpCitib3gvd2luZG93IChzdGRzY3IpCitib3hfc2V0L3dpbmRvdyAoc3Rkc2NyKQorY2FuX2NoYW5nZV9jb2xvci90ZXJtaW5hbAorY2JyZWFrL3NjcmVlbgorY2hnYXQvd2luZG93IChzdGRzY3IpCitjbGVhci93aW5kb3cgKHN0ZHNjcikKK2NsZWFyb2svd2luZG93CitjbHJ0b2JvdC93aW5kb3cgKHN0ZHNjcikKK2NscnRvZW9sL3dpbmRvdyAoc3Rkc2NyKQorY29sb3JfY29udGVudC9zY3JlZW4KK2NvbG9yX3NldC93aW5kb3cgKHN0ZHNjcikKK2NvcHl3aW4vd2luZG93IGxvY2tzKHNvdXJjZSwgdGFyZ2V0KQorY3VyX3Rlcm0vdGVybWluYWwKK2N1cnNfc2V0L3NjcmVlbgorY3Vyc2NyL3NjcmVlbiAocmVhZG9ubHkpCitjdXJzZXNfdmVyc2lvbi9nbG9iYWwgKHJlYWRvbmx5KQorZGVmX3Byb2dfbW9kZS90ZXJtaW5hbAorZGVmX3NoZWxsX21vZGUvdGVybWluYWwKK2RlZmluZV9rZXkvc2NyZWVuCitkZWxfY3VydGVybS9zY3JlZW4KK2RlbGF5X291dHB1dC9zY3JlZW4KK2RlbGNoL3dpbmRvdyAoc3Rkc2NyKQorZGVsZXRlbG4vd2luZG93IChzdGRzY3IpCitkZWxzY3JlZW4vZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QsIHNjcmVlbikKK2RlbHdpbi9nbG9iYWwgbG9ja3Mod2luZG93bGlzdCkKK2Rlcndpbi9zY3JlZW4KK2RvdXBkYXRlL3NjcmVlbgorZHVwd2luL3NjcmVlbiBsb2Nrcyh3aW5kb3cpCitlY2hvL3NjcmVlbgorZWNob193Y2hhci93aW5kb3cgKHN0ZHNjcikKK2VjaG9jaGFyL3dpbmRvdyAoc3Rkc2NyKQorZW5kd2luL3NjcmVlbgorZXJhc2Uvd2luZG93IChzdGRzY3IpCitlcmFzZWNoYXIvd2luZG93IChzdGRzY3IpCitlcmFzZXdjaGFyL3dpbmRvdyAoc3Rkc2NyKQorZmlsdGVyL2dsb2JhbAorZmxhc2gvdGVybWluYWwKK2ZsdXNoaW5wL3NjcmVlbgorZ2V0X3djaC9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2dldF93c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorZ2V0YXR0cnMvd2luZG93CitnZXRiZWd4L3dpbmRvdworZ2V0YmVneS93aW5kb3cKK2dldGJrZ2Qvd2luZG93CitnZXRia2dybmQvd2luZG93CitnZXRjY2hhci9yZWVudHJhbnQKK2dldGNoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorZ2V0Y3VyeC93aW5kb3cKK2dldGN1cnkvd2luZG93CitnZXRtYXh4L3dpbmRvdworZ2V0bWF4eS93aW5kb3cKK2dldG1vdXNlL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorZ2V0bl93c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorZ2V0bnN0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK2dldHBhcngvd2luZG93CitnZXRwYXJ5L3dpbmRvdworZ2V0c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorZ2V0d2luL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQoraGFsZmRlbGF5L3NjcmVlbgoraGFzX2NvbG9ycy90ZXJtaW5hbAoraGFzX2ljL3Rlcm1pbmFsCitoYXNfaWwvdGVybWluYWwKK2hhc19rZXkvc2NyZWVuCitobGluZS93aW5kb3cgKHN0ZHNjcikKK2hsaW5lX3NldC93aW5kb3cgKHN0ZHNjcikKK2lkY29rL3dpbmRvdworaWRsb2svd2luZG93CitpbW1lZG9rL3dpbmRvdworaW5fd2NoL3dpbmRvdyAoc3Rkc2NyKQoraW5fd2NobnN0ci93aW5kb3cgKHN0ZHNjcikKK2luX3djaHN0ci93aW5kb3cgKHN0ZHNjcikKK2luY2gvd2luZG93IChzdGRzY3IpCitpbmNobnN0ci93aW5kb3cgKHN0ZHNjcikKK2luY2hzdHIvd2luZG93IChzdGRzY3IpCitpbml0X2NvbG9yL3NjcmVlbgoraW5pdF9wYWlyL3NjcmVlbgoraW5pdHNjci9nbG9iYWwgbG9ja3Moc2NyZWVubGlzdCkKK2lubnN0ci93aW5kb3cgKHN0ZHNjcikKK2lubndzdHIvd2luZG93IChzdGRzY3IpCitpbnNfbndzdHIvd2luZG93IChzdGRzY3IpCitpbnNfd2NoL3dpbmRvdyAoc3Rkc2NyKQoraW5zX3dzdHIvd2luZG93IChzdGRzY3IpCitpbnNjaC93aW5kb3cgKHN0ZHNjcikKK2luc2RlbGxuL3dpbmRvdyAoc3Rkc2NyKQoraW5zZXJ0bG4vd2luZG93IChzdGRzY3IpCitpbnNuc3RyL3dpbmRvdyAoc3Rkc2NyKQoraW5zc3RyL3dpbmRvdyAoc3Rkc2NyKQoraW5zdHIvd2luZG93IChzdGRzY3IpCitpbnRyZmx1c2gvdGVybWluYWwKK2lud3N0ci93aW5kb3cgKHN0ZHNjcikKK2lzX2NsZWFyZWQvd2luZG93Citpc19pZGNvay93aW5kb3cKK2lzX2lkbG9rL3dpbmRvdworaXNfaW1tZWRvay93aW5kb3cKK2lzX2tleXBhZC93aW5kb3cKK2lzX2xlYXZlb2svd2luZG93Citpc19saW5ldG91Y2hlZC93aW5kb3cKK2lzX25vZGVsYXkvd2luZG93Citpc19ub3RpbWVvdXQvd2luZG93Citpc19zY3JvbGxvay93aW5kb3cKK2lzX3N5bmNvay93aW5kb3cKK2lzX3Rlcm1fcmVzaXplZC90ZXJtaW5hbAoraXNfd2ludG91Y2hlZC93aW5kb3cKK2lzZW5kd2luL3NjcmVlbgora2V5X2RlZmluZWQvc2NyZWVuCitrZXlfbmFtZS9nbG9iYWwgKHN0YXRpYyBkYXRhKQora2V5Ym91bmQvc2NyZWVuCitrZXluYW1lL2dsb2JhbCAoc3RhdGljIGRhdGEpCitrZXlvay9zY3JlZW4KK2tleXBhZC93aW5kb3cKK2tpbGxjaGFyL3Rlcm1pbmFsCitraWxsd2NoYXIvdGVybWluYWwKK2xlYXZlb2svd2luZG93Citsb25nbmFtZS9zY3JlZW4KK21jcHJpbnQvdGVybWluYWwKK21ldGEvc2NyZWVuCittb3VzZV90cmFmby93aW5kb3cgKHN0ZHNjcikKK21vdXNlaW50ZXJ2YWwvc2NyZWVuCittb3VzZW1hc2svc2NyZWVuCittb3ZlL3dpbmRvdyAoc3Rkc2NyKQorbXZhZGRfd2NoL3dpbmRvdyAoc3Rkc2NyKQorbXZhZGRfd2NobnN0ci93aW5kb3cgKHN0ZHNjcikKK212YWRkX3djaHN0ci93aW5kb3cgKHN0ZHNjcikKK212YWRkY2gvd2luZG93IChzdGRzY3IpCittdmFkZGNobnN0ci93aW5kb3cgKHN0ZHNjcikKK212YWRkY2hzdHIvd2luZG93IChzdGRzY3IpCittdmFkZG5zdHIvd2luZG93IChzdGRzY3IpCittdmFkZG53c3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZhZGRzdHIvd2luZG93IChzdGRzY3IpCittdmFkZHdzdHIvd2luZG93IChzdGRzY3IpCittdmNoZ2F0L3dpbmRvdyAoc3Rkc2NyKQorbXZjdXIvc2NyZWVuCittdmRlbGNoL3dpbmRvdyAoc3Rkc2NyKQorbXZkZXJ3aW4vd2luZG93IChzdGRzY3IpCittdmdldF93Y2gvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCittdmdldF93c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZnZXRjaC9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212Z2V0bl93c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZnZXRuc3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZnZXRzdHIvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCittdmhsaW5lL3dpbmRvdyAoc3Rkc2NyKQorbXZobGluZV9zZXQvd2luZG93IChzdGRzY3IpCittdmluX3djaC93aW5kb3cgKHN0ZHNjcikKK212aW5fd2NobnN0ci93aW5kb3cgKHN0ZHNjcikKK212aW5fd2Noc3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZpbmNoL3dpbmRvdyAoc3Rkc2NyKQorbXZpbmNobnN0ci93aW5kb3cgKHN0ZHNjcikKK212aW5jaHN0ci93aW5kb3cgKHN0ZHNjcikKK212aW5uc3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZpbm53c3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZpbnNfbndzdHIvd2luZG93IChzdGRzY3IpCittdmluc193Y2gvd2luZG93IChzdGRzY3IpCittdmluc193c3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZpbnNjaC93aW5kb3cgKHN0ZHNjcikKK212aW5zbnN0ci93aW5kb3cgKHN0ZHNjcikKK212aW5zc3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZpbnN0ci93aW5kb3cgKHN0ZHNjcikKK212aW53c3RyL3dpbmRvdyAoc3Rkc2NyKQorbXZwcmludHcvd2luZG93IChzdGRzY3IpCittdnNjYW53L3NjcmVlbgorbXZ2bGluZS93aW5kb3cgKHN0ZHNjcikKK212dmxpbmVfc2V0L3dpbmRvdyAoc3Rkc2NyKQorbXZ3YWRkX3djaC93aW5kb3cKK212d2FkZF93Y2huc3RyL3dpbmRvdworbXZ3YWRkX3djaHN0ci93aW5kb3cKK212d2FkZGNoL3dpbmRvdworbXZ3YWRkY2huc3RyL3dpbmRvdworbXZ3YWRkY2hzdHIvd2luZG93CittdndhZGRuc3RyL3dpbmRvdworbXZ3YWRkbndzdHIvd2luZG93CittdndhZGRzdHIvd2luZG93CittdndhZGR3c3RyL3dpbmRvdworbXZ3Y2hnYXQvd2luZG93CittdndkZWxjaC93aW5kb3cKK212d2dldF93Y2gvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCittdndnZXRfd3N0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212d2dldGNoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZ3Z2V0bl93c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQorbXZ3Z2V0bnN0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212d2dldHN0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK212d2hsaW5lL3dpbmRvdworbXZ3aGxpbmVfc2V0L3dpbmRvdworbXZ3aW4vd2luZG93Cittdndpbl93Y2gvd2luZG93Cittdndpbl93Y2huc3RyL3dpbmRvdworbXZ3aW5fd2Noc3RyL3dpbmRvdworbXZ3aW5jaC93aW5kb3cKK212d2luY2huc3RyL3dpbmRvdworbXZ3aW5jaHN0ci93aW5kb3cKK212d2lubnN0ci93aW5kb3cKK212d2lubndzdHIvd2luZG93CittdndpbnNfbndzdHIvd2luZG93CittdndpbnNfd2NoL3dpbmRvdworbXZ3aW5zX3dzdHIvd2luZG93CittdndpbnNjaC93aW5kb3cKK212d2luc25zdHIvd2luZG93CittdndpbnNzdHIvd2luZG93CittdndpbnN0ci93aW5kb3cKK212d2lud3N0ci93aW5kb3cKK212d3ByaW50dy93aW5kb3cKK212d3NjYW53L3NjcmVlbgorbXZ3dmxpbmUvd2luZG93Cittdnd2bGluZV9zZXQvd2luZG93CituYXBtcy9yZWVudHJhbnQKK25ld3BhZC9nbG9iYWwgbG9ja3Mod2luZG93bGlzdCkKK25ld3Njci9zY3JlZW4gKHJlYWRvbmx5KQorbmV3dGVybS9nbG9iYWwgbG9ja3Moc2NyZWVubGlzdCkKK25ld3dpbi9nbG9iYWwgbG9ja3Mod2luZG93bGlzdCkKK25sL3NjcmVlbgorbm9jYnJlYWsvc2NyZWVuCitub2RlbGF5L3dpbmRvdworbm9lY2hvL3NjcmVlbgorbm9maWx0ZXIvZ2xvYmFsCitub25sL3NjcmVlbgorbm9xaWZsdXNoL3Rlcm1pbmFsCitub3Jhdy9zY3JlZW4KK25vdGltZW91dC93aW5kb3cKK251bWNvZGVzL2dsb2JhbCAocmVhZG9ubHkpCitudW1mbmFtZXMvZ2xvYmFsIChyZWFkb25seSkKK251bW5hbWVzL2dsb2JhbCAocmVhZG9ubHkpCitvc3BlZWQvZ2xvYmFsCitvdmVybGF5L3dpbmRvdyBsb2Nrcyhzb3VyY2UsIHRhcmdldCkKK292ZXJ3cml0ZS93aW5kb3cgbG9ja3Moc291cmNlLCB0YXJnZXQpCitwYWlyX2NvbnRlbnQvc2NyZWVuCitwZWNob193Y2hhci9zY3JlZW4KK3BlY2hvY2hhci9zY3JlZW4KK3Bub3V0cmVmcmVzaC9zY3JlZW4KK3ByZWZyZXNoL3NjcmVlbgorcHJpbnR3L3dpbmRvdworcHV0cC9nbG9iYWwKK3B1dHdpbi93aW5kb3cKK3FpZmx1c2gvdGVybWluYWwKK3Jhdy9zY3JlZW4KK3JlZHJhd3dpbi93aW5kb3cKK3JlZnJlc2gvc2NyZWVuCityZXNldF9wcm9nX21vZGUvc2NyZWVuCityZXNldF9zaGVsbF9tb2RlL3NjcmVlbgorcmVzZXR0eS90ZXJtaW5hbAorcmVzaXplX3Rlcm0vc2NyZWVuIGxvY2tzKHdpbmRvd2xpc3QpCityZXNpemV0ZXJtL3NjcmVlbgorcmVzdGFydHRlcm0vc2NyZWVuCityaXBvZmZsaW5lL2dsb2JhbCAoc3RhdGljIGRhdGEpCitzYXZldHR5L3Rlcm1pbmFsCitzY2Fudy9zY3JlZW4KK3Njcl9kdW1wL3NjcmVlbgorc2NyX2luaXQvc2NyZWVuCitzY3JfcmVzdG9yZS9zY3JlZW4KK3Njcl9zZXQvc2NyZWVuCitzY3JsL3dpbmRvdyAoc3Rkc2NyKQorc2Nyb2xsL3dpbmRvdworc2Nyb2xsb2svd2luZG93CitzZXRfY3VydGVybS9zY3JlZW4KK3NldF9lc2NkZWxheS9zY3JlZW4KK3NldF90YWJzaXplL3NjcmVlbgorc2V0X3Rlcm0vZ2xvYmFsIGxvY2tzKHNjcmVlbmxpc3QsIHNjcmVlbikKK3NldGNjaGFyL3JlZW50cmFudAorc2V0c2NycmVnL3dpbmRvdyAoc3Rkc2NyKQorc2V0dXB0ZXJtL2dsb2JhbAorc2xrX2F0dHIvc2NyZWVuCitzbGtfYXR0cl9vZmYvc2NyZWVuCitzbGtfYXR0cl9vbi9zY3JlZW4KK3Nsa19hdHRyX3NldC9zY3JlZW4KK3Nsa19hdHRyb2ZmL3NjcmVlbgorc2xrX2F0dHJvbi9zY3JlZW4KK3Nsa19hdHRyc2V0L3NjcmVlbgorc2xrX2NsZWFyL3NjcmVlbgorc2xrX2NvbG9yL3NjcmVlbgorc2xrX2luaXQvc2NyZWVuCitzbGtfbGFiZWwvc2NyZWVuCitzbGtfbm91dHJlZnJlc2gvc2NyZWVuCitzbGtfcmVmcmVzaC9zY3JlZW4KK3Nsa19yZXN0b3JlL3NjcmVlbgorc2xrX3NldC9zY3JlZW4KK3Nsa190b3VjaC9zY3JlZW4KK3Nsa193c2V0L3NjcmVlbgorc3RhbmRlbmQvd2luZG93CitzdGFuZG91dC93aW5kb3cKK3N0YXJ0X2NvbG9yL3NjcmVlbgorc3Rkc2NyL3NjcmVlbiAocmVhZG9ubHkpCitzdHJjb2Rlcy9nbG9iYWwgKHJlYWRvbmx5KQorc3RyZm5hbWVzL2dsb2JhbCAocmVhZG9ubHkpCitzdHJuYW1lcy9nbG9iYWwgKHJlYWRvbmx5KQorc3VicGFkL3dpbmRvdworc3Vid2luL3dpbmRvdworc3luY29rL3dpbmRvdwordGVybV9hdHRycy9zY3JlZW4KK3Rlcm1hdHRycy9zY3JlZW4KK3Rlcm1uYW1lL3Rlcm1pbmFsCit0Z2V0ZW50L2dsb2JhbAordGdldGZsYWcvZ2xvYmFsCit0Z2V0bnVtL2dsb2JhbAordGdldHN0ci9nbG9iYWwKK3Rnb3RvL2dsb2JhbAordGlnZXRmbGFnL3Rlcm1pbmFsCit0aWdldG51bS90ZXJtaW5hbAordGlnZXRzdHIvdGVybWluYWwKK3RpbWVvdXQvd2luZG93IChzdGRzY3IpCit0b3VjaGxpbmUvd2luZG93Cit0b3VjaHdpbi93aW5kb3cKK3RwYXJtL2dsb2JhbCAoc3RhdGljIGRhdGEpCit0cHV0cy9zY3JlZW4KK3RyYWNlL2dsb2JhbCAoc3RhdGljIGRhdGEpCit0dHl0eXBlL3NjcmVlbiAocmVhZG9ubHkpCit0eXBlYWhlYWQvc2NyZWVuCit1bmN0cmwvc2NyZWVuCit1bmdldF93Y2gvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCit1bmdldGNoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQordW5nZXRtb3VzZS9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK3VudG91Y2h3aW4vd2luZG93Cit1c2VfZGVmYXVsdF9jb2xvcnMvc2NyZWVuCit1c2VfZW52L2dsb2JhbCAoc3RhdGljIGRhdGEpCit1c2VfZXh0ZW5kZWRfbmFtZXMvZ2xvYmFsIChzdGF0aWMgZGF0YSkKK3VzZV9sZWdhY3lfY29kaW5nL3NjcmVlbgordXNlX3NjcmVlbi9nbG9iYWwgbG9ja3Moc2NyZWVubGlzdCwgc2NyZWVuKQordXNlX3dpbmRvdy9nbG9iYWwgbG9ja3Mod2luZG93bGlzdCwgd2luZG93KQordmlkX2F0dHIvc2NyZWVuCit2aWRfcHV0cy9zY3JlZW4KK3ZpZGF0dHIvc2NyZWVuCit2aWRwdXRzL3NjcmVlbgordmxpbmUvd2luZG93IChzdGRzY3IpCit2bGluZV9zZXQvd2luZG93IChzdGRzY3IpCit2d19wcmludHcvd2luZG93Cit2d19zY2Fudy9zY3JlZW4KK3Z3cHJpbnR3L3dpbmRvdwordndzY2Fudy9zY3JlZW4KK3dhZGRfd2NoL3dpbmRvdword2FkZF93Y2huc3RyL3dpbmRvdword2FkZF93Y2hzdHIvd2luZG93Cit3YWRkY2gvd2luZG93Cit3YWRkY2huc3RyL3dpbmRvdword2FkZGNoc3RyL3dpbmRvdword2FkZG5zdHIvd2luZG93Cit3YWRkbndzdHIvd2luZG93Cit3YWRkc3RyL3dpbmRvdword2FkZHdzdHIvd2luZG93Cit3YXR0cl9nZXQvd2luZG93Cit3YXR0cl9vZmYvd2luZG93Cit3YXR0cl9vbi93aW5kb3cKK3dhdHRyX3NldC93aW5kb3cKK3dhdHRyb2ZmL3dpbmRvdword2F0dHJvbi93aW5kb3cKK3dhdHRyc2V0L3dpbmRvdword2JrZ2Qvd2luZG93Cit3YmtnZHNldC93aW5kb3cKK3dia2dybmQvd2luZG93Cit3Ymtncm5kc2V0L3dpbmRvdword2JvcmRlci93aW5kb3cKK3dib3JkZXJfc2V0L3dpbmRvdword2NoZ2F0L3dpbmRvdword2NsZWFyL3dpbmRvdword2NscnRvYm90L3dpbmRvdword2NscnRvZW9sL3dpbmRvdword2NvbG9yX3NldC93aW5kb3cKK3djdXJzeW5jdXAvc2NyZWVuIChhZmZlY3RzIHdpbmRvdyBwbHVzIHBhcmVudHMpCit3ZGVsY2gvd2luZG93Cit3ZGVsZXRlbG4vd2luZG93Cit3ZWNob193Y2hhci93aW5kb3cKK3dlY2hvY2hhci93aW5kb3cKK3dlbmNsb3NlL3dpbmRvdword2VyYXNlL3dpbmRvdword2dldF93Y2gvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCit3Z2V0X3dzdHIvc2NyZWVuIChpbnB1dC1vcGVyYXRpb24pCit3Z2V0Ymtncm5kL3dpbmRvdword2dldGNoL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQord2dldG5fd3N0ci9zY3JlZW4gKGlucHV0LW9wZXJhdGlvbikKK3dnZXRuc3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQord2dldHBhcmVudC93aW5kb3cKK3dnZXRzY3JyZWcvd2luZG93Cit3Z2V0c3RyL3NjcmVlbiAoaW5wdXQtb3BlcmF0aW9uKQord2hsaW5lL3dpbmRvdword2hsaW5lX3NldC93aW5kb3cKK3dpbl93Y2gvd2luZG93Cit3aW5fd2NobnN0ci93aW5kb3cKK3dpbl93Y2hzdHIvd2luZG93Cit3aW5jaC93aW5kb3cKK3dpbmNobnN0ci93aW5kb3cKK3dpbmNoc3RyL3dpbmRvdword2lubnN0ci93aW5kb3cKK3dpbm53c3RyL3dpbmRvdword2luc19ud3N0ci93aW5kb3cKK3dpbnNfd2NoL3dpbmRvdword2luc193c3RyL3dpbmRvdword2luc2NoL3dpbmRvdword2luc2RlbGxuL3dpbmRvdword2luc2VydGxuL3dpbmRvdword2luc25zdHIvd2luZG93Cit3aW5zc3RyL3dpbmRvdword2luc3RyL3dpbmRvdword2lud3N0ci93aW5kb3cKK3dtb3VzZV90cmFmby93aW5kb3cKK3dtb3ZlL3dpbmRvdword25vdXRyZWZyZXNoL3NjcmVlbgord3ByaW50dy93aW5kb3cKK3dyZWRyYXdsbi93aW5kb3cKK3dyZWZyZXNoL3NjcmVlbgord3Jlc2l6ZS93aW5kb3cgbG9ja3Mod2luZG93bGlzdCkKK3dzY2Fudy9zY3JlZW4KK3dzY3JsL3dpbmRvdword3NldHNjcnJlZy93aW5kb3cKK3dzdGFuZGVuZC93aW5kb3cKK3dzdGFuZG91dC93aW5kb3cKK3dzeW5jZG93bi9zY3JlZW4gKGFmZmVjdHMgd2luZG93IHBsdXMgcGFyZW50cykKK3dzeW5jdXAvc2NyZWVuIChhZmZlY3RzIHdpbmRvdyBwbHVzIHBhcmVudHMpCit3dGltZW91dC93aW5kb3cKK3d0b3VjaGxuL3dpbmRvdword3VuY3RybC9nbG9iYWwgKHN0YXRpYyBkYXRhKQord3ZsaW5lL3dpbmRvdword3ZsaW5lX3NldC93aW5kb3cKKy5URQorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2UgZnVuY3Rpb25zIGFsbCByZXR1cm4gVFJVRSBvciBGQUxTRSwgZXhjZXB0IGFzIG5vdGVkLgorLlNIIE5PVEVTCitCb3RoIGEgbWFjcm8gYW5kIGEgZnVuY3Rpb24gYXJlIHByb3ZpZGVkIGZvciBlYWNoIG5hbWUuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byBuY3Vyc2VzLgorVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24gVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLgorSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbnkgY29kZSBkZXBlbmRpbmcgb24gbmN1cnNlcyBleHRlbnNpb25zCitiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX29wYXF1ZVxmUigzWCkKKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfdG91Y2guM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc190b3VjaC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QwN2JjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdG91Y2guM3gKQEAgLTAsMCArMSwxMTYgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc190b3VjaC4zeCx2IDEuMTEgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwICQKKy5USCBjdXJzX3RvdWNoIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCdG91Y2h3aW5cZlIsCitcZkJ0b3VjaGxpbmVcZlIsCitcZkJ1bnRvdWNod2luXGZSLAorXGZCd3RvdWNobG5cZlIsCitcZkJpc19saW5ldG91Y2hlZFxmUiwKK1xmQmlzX3dpbnRvdWNoZWRcZlIgLSBcZkJjdXJzZXNcZlIgcmVmcmVzaCBjb250cm9sIHJvdXRpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuYnIKK1xmQmludCB0b3VjaHdpbihXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCB0b3VjaGxpbmUoV0lORE9XICp3aW4sIGludCBzdGFydCwgaW50IGNvdW50KTtcZlIKKy5icgorXGZCaW50IHVudG91Y2h3aW4oV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJpbnQgd3RvdWNobG4oV0lORE9XICp3aW4sIGludCB5LCBpbnQgbiwgaW50IGNoYW5nZWQpO1xmUgorLmJyCitcZkJib29sIGlzX2xpbmV0b3VjaGVkKFdJTkRPVyAqd2luLCBpbnQgbGluZSk7XGZSCisuYnIKK1xmQmJvb2wgaXNfd2ludG91Y2hlZChXSU5ET1cgKndpbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQnRvdWNod2luXGZSIGFuZCBcZkJ0b3VjaGxpbmVcZlIgcm91dGluZXMgdGhyb3cgYXdheSBhbGwKK29wdGltaXphdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwYXJ0cyBvZiB0aGUgd2luZG93IGhhdmUgYmVlbgordG91Y2hlZCwgYnkgcHJldGVuZGluZyB0aGF0IHRoZSBlbnRpcmUgd2luZG93IGhhcyBiZWVuIGRyYXduIG9uLiAgVGhpcworaXMgc29tZXRpbWVzIG5lY2Vzc2FyeSB3aGVuIHVzaW5nIG92ZXJsYXBwaW5nIHdpbmRvd3MsIHNpbmNlIGEgY2hhbmdlCit0byBvbmUgd2luZG93IGFmZmVjdHMgdGhlIG90aGVyIHdpbmRvdywgYnV0IHRoZSByZWNvcmRzIG9mIHdoaWNoIGxpbmVzCitoYXZlIGJlZW4gY2hhbmdlZCBpbiB0aGUgb3RoZXIgd2luZG93IGRvIG5vdCByZWZsZWN0IHRoZSBjaGFuZ2UuICBUaGUKK3JvdXRpbmUgXGZCdG91Y2hsaW5lXGZSIG9ubHkgcHJldGVuZHMgdGhhdCBcZkljb3VudFxmUiBsaW5lcyBoYXZlIGJlZW4KK2NoYW5nZWQsIGJlZ2lubmluZyB3aXRoIGxpbmUgXGZJc3RhcnRcZlIuCisuUFAKK1RoZSBcZkJ1bnRvdWNod2luXGZSIHJvdXRpbmUgbWFya3MgYWxsIGxpbmVzIGluIHRoZSB3aW5kb3cgYXMgdW5jaGFuZ2VkIHNpbmNlCit0aGUgbGFzdCBjYWxsIHRvIFxmQndyZWZyZXNoXGZSLgorLlBQCitUaGUgXGZCd3RvdWNobG5cZlIgcm91dGluZSBtYWtlcyBcZkluXGZSIGxpbmVzIGluIHRoZSB3aW5kb3csIHN0YXJ0aW5nCithdCBsaW5lIFxmSXlcZlIsIGxvb2sgYXMgaWYgdGhleSBoYXZlIChcZkljaGFuZ2VkXGZSXGZCPTFcZlIpIG9yIGhhdmUKK25vdCAoXGZJY2hhbmdlZFxmUlxmQj0wXGZSKSBiZWVuIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0bworXGZCd3JlZnJlc2hcZlIuCisuUFAKK1RoZSBcZkJpc19saW5ldG91Y2hlZFxmUiBhbmQgXGZCaXNfd2ludG91Y2hlZFxmUiByb3V0aW5lcyByZXR1cm4KK1xmQlRSVUVcZlIgaWYgdGhlIHNwZWNpZmllZCBsaW5lL3dpbmRvdyB3YXMgbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QKK2NhbGwgdG8gXGZCd3JlZnJlc2hcZlI7IG90aGVyd2lzZSB0aGV5IHJldHVybiBcZkJGQUxTRVxmUi4gIEluCithZGRpdGlvbiwgXGZCaXNfbGluZXRvdWNoZWRcZlIgcmV0dXJucyBcZkJFUlJcZlIgaWYgXGZJbGluZVxmUiBpcyBub3QKK3ZhbGlkIGZvciB0aGUgZ2l2ZW4gd2luZG93LgorLlNIIFJFVFVSTiBWQUxVRQorQWxsIHJvdXRpbmVzIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBhbiBpbnRlZ2VyIHZhbHVlCitvdGhlciB0aGFuIFxmQkVSUlxmUiB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdW5sZXNzIG90aGVyd2lzZSBub3RlZCBpbiB0aGUKK3ByZWNlZGluZyByb3V0aW5lIGRlc2NyaXB0aW9ucy4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KKy5SUworLlRQIDUKK1xmQmlzX2xpbmV0b3VjaGVkXGZQCityZXR1cm5zIGFuIGVycm9yIAoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsIG9yCitpZiB0aGUgbGluZSBudW1iZXIgaXMgb3V0c2lkZSB0aGUgd2luZG93LgorTm90ZSB0aGF0IEVSUiBpcyBkaXN0aW5jdCBmcm9tIFRSVUUgYW5kIEZBTFNFLCB3aGljaCBhcmUgdGhlIG5vcm1hbCByZXR1cm4gdmFsdWVzIG9mIHRoaXMgZnVuY3Rpb24uCisuVFAgNQorXGZCd3RvdWNobG5cZlAKK3JldHVybnMgYW4gZXJyb3IgCitpZiB0aGUgd2luZG93IHBvaW50ZXIgaXMgbnVsbCwgb3IKK2lmIHRoZSBsaW5lIG51bWJlciBpcyBvdXRzaWRlIHRoZSB3aW5kb3cuCisuUkUKKy5TSCBQT1JUQUJJTElUWQorVGhlIFhTSSBDdXJzZXMgc3RhbmRhcmQsIElzc3VlIDQgZGVzY3JpYmVzIHRoZXNlIGZ1bmN0aW9ucy4KKy5QUAorU29tZSBoaXN0b3JpYyBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGhhZCwgYXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1cmUsIHRoZQorYWJpbGl0eSB0byBkbyB0aGUgZXF1aXZhbGVudCBvZiBcZkJjbGVhcm9rKC4uLiwgMSlcZlIgYnkgc2F5aW5nCitcZkJ0b3VjaHdpbihzdGRzY3IpXGZSIG9yIFxmQmNsZWFyKHN0ZHNjcilcZlIuICBUaGlzIHdpbGwgbm90IHdvcmsgdW5kZXIKK25jdXJzZXMuCisuU0ggTk9URVMKK05vdGUgdGhhdCBhbGwgcm91dGluZXMgZXhjZXB0IFxmQnd0b3VjaGxuXGZSIG1heSBiZSBtYWNyb3MuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX3RyYWNlLjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfdHJhY2UuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3NDk1MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9jdXJzX3RyYWNlLjN4CkBAIC0wLDAgKzEsMTUzIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfdHJhY2UuM3gsdiAxLjggMjAwNy8wMi8yNCAxNzozMzo0OSB0b20gRXhwICQKKy5USCBjdXJzX3RyYWNlIDNYICIiCisubmEKKy5oeSAwCisuU0ggTkFNRQorXGZCX3RyYWNlZlxmUiwKK1xmQl90cmFjZWR1bXBcZlIsCitcZkJfdHJhY2VhdHRyXGZSLAorXGZCX3RyYWNlYXR0cjJcZlIsCitcZkJfbmNfdHJhY2ViaXRzXGZSLAorXGZCX3RyYWNlY2hhclxmUiwKK1xmQl90cmFjZWNodHlwZVxmUiwKK1xmQl90cmFjZWNodHlwZTJcZlIsCitcZkJfdHJhY2Vtb3VzZVxmUiwKK1xmQnRyYWNlXGZSIC0gXGZCY3Vyc2VzXGZSIGRlYnVnZ2luZyByb3V0aW5lcworLmFkCisuaHkKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLnNwCitcZkJ2b2lkIF90cmFjZWYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pO1xmUgorLmJyCitcZkJ2b2lkIF90cmFjZWR1bXAoY29uc3QgY2hhciAqbGFiZWwsIFdJTkRPVyAqd2luKTtcZlIKKy5icgorXGZCY2hhciAqX3RyYWNlYXR0cihhdHRyX3QgYXR0cik7XGZSCisuYnIKK1xmQmNoYXIgKl90cmFjZWF0dHIyKGludCBidWZmZXIsIGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmNoYXIgKl9uY190cmFjZWJpdHModm9pZCk7XGZSCisuYnIKK1xmQmNoYXIgKl90cmFjZWNoYXIoaW50KTtcZlIKKy5icgorXGZCY2hhciAqX3RyYWNlY2h0eXBlKGNodHlwZSBjaCk7XGZSCisuYnIKK1xmQmNoYXIgKl90cmFjZWNodHlwZTIoaW50IGJ1ZmZlciwgY2h0eXBlIGNoKTtcZlIKKy5icgorXGZCY2hhciAqX3RyYWNlbW91c2UoY29uc3QgTUVWRU5UICpldmVudCk7XGZSCisuYnIKK1xmQnZvaWQgdHJhY2UoY29uc3QgdW5zaWduZWQgaW50IHBhcmFtKTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQnRyYWNlXGZSIHJvdXRpbmVzIGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIG5jdXJzZXMgbGlicmFyaWVzLAorYXMgd2VsbCBhcyBhcHBsaWNhdGlvbnMgd2hpY2ggdXNlIHRoZSBuY3Vyc2VzIGxpYnJhcmllcy4KK1RoZXNlIGZ1bmN0aW9ucyBhcmUgbm9ybWFsbHkgYXZhaWxhYmxlIG9ubHkgd2l0aCB0aGUgZGVidWdnaW5nIGxpYnJhcnkKK1xmSWxpYm5jdXJzZXNfZy5hXGZSLCBidXQgbWF5IGJlIGNvbXBpbGVkIGludG8gYW55IG1vZGVsIChzaGFyZWQsIHN0YXRpYywKK3Byb2ZpbGUpIGJ5IGRlZmluaW5nIHRoZSBzeW1ib2wgXGZCVFJBQ0VcZlIuCisuUFAKK1RoZSBwcmluY2lwYWwgcGFydHMgb2YgdGhpcyBpbnRlcmZhY2UgYXJlIHRoZSBcZkJ0cmFjZVxmUiByb3V0aW5lIHdoaWNoCitzZWxlY3RpdmVseSBlbmFibGVzIGRpZmZlcmVudCB0cmFjaW5nIGZlYXR1cmVzLCBhbmQgdGhlIFxmQl90cmFjZWZcZlIKK3JvdXRpbmUgd2hpY2ggd3JpdGVzIGZvcm1hdHRlZCBkYXRhIHRvIHRoZSBcZkl0cmFjZVxmUiBmaWxlLgorLlBQCitDYWxsaW5nIFxmQnRyYWNlXGZSIHdpdGggYSBub256ZXJvIHBhcmFtZXRlciBvcGVucyB0aGUgZmlsZSBcZkJ0cmFjZVxmUgoraW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBvdXRwdXQuICBUaGUgcGFyYW1ldGVyIGlzIGZvcm1lZCBieSBPUidpbmcKK3ZhbHVlcyBmcm9tIHRoZSBsaXN0IG9mIFxmQlRSQUNFX1xmUFxmSXh4eFxmUiBkZWZpbml0aW9ucyBpbiBcZkI8Y3Vyc2VzLmg+XGZSLgorVGhlc2UgaW5jbHVkZToKKy5UUCA1CitUUkFDRV9ESVNBQkxFCit0dXJuIG9mZiB0cmFjaW5nLgorLlRQIDUKK1RSQUNFX1RJTUVTCit0cmFjZSB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgb2YgdXBkYXRlcy4KKy5UUCA1CitUUkFDRV9UUFVUUwordHJhY2UgdHB1dHMgY2FsbHMuCisuVFAgNQorVFJBQ0VfVVBEQVRFCit0cmFjZSB1cGRhdGUgYWN0aW9ucywgb2xkICYgbmV3IHNjcmVlbnMuCisuVFAgNQorVFJBQ0VfTU9WRQordHJhY2UgY3Vyc29yIG1vdmVtZW50IGFuZCBzY3JvbGxpbmcuCisuVFAgNQorVFJBQ0VfQ0hBUlBVVAordHJhY2UgYWxsIGNoYXJhY3RlciBvdXRwdXRzLgorLlRQIDUKK1RSQUNFX09SRElOQVJZCit0cmFjZSBhbGwgdXBkYXRlIGFjdGlvbnMuCitUaGUgb2xkIGFuZCBuZXcgc2NyZWVuIGNvbnRlbnRzIGFyZSB3cml0dGVuIHRvIHRoZSB0cmFjZSBmaWxlCitmb3IgZWFjaCByZWZyZXNoLgorLlRQIDUKK1RSQUNFX0NBTExTCit0cmFjZSBhbGwgY3Vyc2VzIGNhbGxzLgorVGhlIHBhcmFtZXRlcnMgZm9yIGVhY2ggY2FsbCBhcmUgdHJhY2VkLCBhcyB3ZWxsIGFzIHJldHVybiB2YWx1ZXMuCisuVFAgNQorVFJBQ0VfVklSVFBVVAordHJhY2UgdmlydHVhbCBjaGFyYWN0ZXIgcHV0cywgaS5lLiwgY2FsbHMgdG8gXGZCYWRkY2hcZlIuCisuVFAgNQorVFJBQ0VfSUVWRU5UCit0cmFjZSBsb3ctbGV2ZWwgaW5wdXQgcHJvY2Vzc2luZywgaW5jbHVkaW5nIHRpbWVvdXRzLgorLlRQIDUKK1RSQUNFX0JJVFMKK3RyYWNlIHN0YXRlIG9mIFRUWSBjb250cm9sIGJpdHMuCisuVFAgNQorVFJBQ0VfSUNBTExTCit0cmFjZSBpbnRlcm5hbC9uZXN0ZWQgY2FsbHMuCisuVFAgNQorVFJBQ0VfQ0NBTExTCit0cmFjZSBwZXItY2hhcmFjdGVyIGNhbGxzLgorLlRQIDUKK1RSQUNFX0RBVEFCQVNFCit0cmFjZSByZWFkL3dyaXRlIG9mIHRlcm1pbmZvL3Rlcm1jYXAgZGF0YS4KKy5UUCA1CitUUkFDRV9BVFRSUwordHJhY2UgY2hhbmdlcyB0byB2aWRlbyBhdHRyaWJ1dGVzIGFuZCBjb2xvcnMuCisuVFAgNQorVFJBQ0VfTUFYSU1VTQorbWF4aW11bSB0cmFjZSBsZXZlbCwgZW5hYmxlcyBhbGwgb2YgdGhlIHNlcGFyYXRlIHRyYWNlIGZlYXR1cmVzLgorLlBQCitTb21lIHRyYWNpbmcgZmVhdHVyZXMgYXJlIGVuYWJsZWQgd2hlbmV2ZXIgdGhlIFxmQnRyYWNlXGZSIHBhcmFtZXRlcgoraXMgbm9uemVyby4gIFNvbWUgZmVhdHVyZXMgb3ZlcmxhcC4KK1RoZSBzcGVjaWZpYyBuYW1lcyBhcmUgdXNlZCBhcyBhIGd1aWRlbGluZS4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHdoaWNoIHJldHVybiBhIHZhbHVlIGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIHBhcmFtZXRlcnMKK3RvIHRoZSBcZkJfdHJhY2VmXGZSIHJvdXRpbmUuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIFhTSSBpbnRlcmZhY2UuCitTb21lIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMgYXJlIGtub3duIHRvCitoYXZlIHNpbWlsYXIsIHVuZG9jdW1lbnRlZCBmZWF0dXJlcywKK2J1dCB0aGV5IGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIG5jdXJzZXMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9jdXJzX3V0aWwuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc191dGlsLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTJiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc191dGlsLjN4CkBAIC0wLDAgKzEsMjU4IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGN1cnNfdXRpbC4zeCx2IDEuMjcgMjAwOC8xMC8yNSAyMzo0NTo0MSB0b20gRXhwICQKKy5USCBjdXJzX3V0aWwgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJkZWxheV9vdXRwdXRcZlIsCitcZkJmaWx0ZXJcZlIsCitcZkJmbHVzaGlucFxmUiwKK1xmQmdldHdpblxmUiwKK1xmQmtleV9uYW1lXGZSLAorXGZCa2V5bmFtZVxmUiwKK1xmQm5vZmlsdGVyXGZSLAorXGZCcHV0d2luXGZSLAorXGZCdW5jdHJsXGZSLAorXGZCdXNlX2VudlxmUiwKK1xmQnd1bmN0cmxcZlIgLSBtaXNjZWxsYW5lb3VzIFxmQmN1cnNlc1xmUiB1dGlsaXR5IHJvdXRpbmVzCisuYWQKKy5oeQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmNoYXIgKnVuY3RybChjaHR5cGUgYyk7XGZSCisuYnIKK1xmQndjaGFyX3QgKnd1bmN0cmwoY2NoYXJfdCAqYyk7XGZSCisuYnIKK1xmQmNoYXIgKmtleW5hbWUoaW50IGMpO1xmUgorLmJyCitcZkJjaGFyICprZXlfbmFtZSh3Y2hhcl90IHcpO1xmUgorLmJyCitcZkJ2b2lkIGZpbHRlcih2b2lkKTtcZlIKKy5icgorXGZCdm9pZCBub2ZpbHRlcih2b2lkKTtcZlIKKy5icgorXGZCdm9pZCB1c2VfZW52KGJvb2wgZik7XGZSCisuYnIKK1xmQmludCBwdXR3aW4oV0lORE9XICp3aW4sIEZJTEUgKmZpbGVwKTtcZlIKKy5icgorXGZCV0lORE9XICpnZXR3aW4oRklMRSAqZmlsZXApO1xmUgorLmJyCitcZkJpbnQgZGVsYXlfb3V0cHV0KGludCBtcyk7XGZSCisuYnIKK1xmQmludCBmbHVzaGlucCh2b2lkKTtcZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCdW5jdHJsXGZSIHJvdXRpbmUgcmV0dXJucyBhIGNoYXJhY3RlciBzdHJpbmcgd2hpY2ggaXMgYSBwcmludGFibGUKK3JlcHJlc2VudGF0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgXGZJY1xmUiwgaWdub3JpbmcgYXR0cmlidXRlcy4KK0NvbnRyb2wgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIGluIHRoZSBcZkJeXGZSXGZJWFxmUiBub3RhdGlvbi4KK1ByaW50aW5nIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBhcyBpcy4KK1RoZSBjb3JyZXNwb25kaW5nIFxmQnd1bmN0cmxcZlIgcmV0dXJucyBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZgorYSB3aWRlLWNoYXJhY3Rlci4KKy5QUAorVGhlIFxmQmtleW5hbWVcZlIgcm91dGluZSByZXR1cm5zIGEgY2hhcmFjdGVyIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkgXGZJY1xmUjoKKy5SUyAzCisuVFAgMworLQorUHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBhcyB0aGVtc2VsdmVzLCBlLmcuLCBhIG9uZS1jaGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGtleS4KKy5UUCAzCistCitDb250cm9sIGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBpbiB0aGUgXGZCXlxmUlxmSVhcZlIgbm90YXRpb24uCisuVFAgMworLQorREVMIChjaGFyYWN0ZXIgMTI3KSBpcyBkaXNwbGF5ZWQgYXMgXGZCXj9cZlAuCisuVFAgMworLQorVmFsdWVzIGFib3ZlIDEyOCBhcmUgZWl0aGVyIG1ldGEgY2hhcmFjdGVycworKGlmIHRoZSBzY3JlZW4gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLAorb3IgaWYgXGZCbWV0YVxmUCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBhIFRSVUUgcGFyYW1ldGVyKSwKK3Nob3duIGluIHRoZSBcZkJNLVxmUlxmSVhcZlIgbm90YXRpb24sCitvciBhcmUgZGlzcGxheWVkIGFzIHRoZW1zZWx2ZXMuCitJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSB2YWx1ZXMgbWF5IG5vdCBiZSBwcmludGFibGU7Cit0aGlzIGZvbGxvd3MgdGhlIFgvT3BlbiBzcGVjaWZpY2F0aW9uLgorLlRQIDMKKy0KK1ZhbHVlcyBhYm92ZSAyNTYgbWF5IGJlIHRoZSBuYW1lcyBvZiB0aGUgbmFtZXMgb2YgZnVuY3Rpb24ga2V5cy4KKy5UUCAzCistCitPdGhlcndpc2UgKGlmIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbmFtZSkgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCwKK3RvIGRlbm90ZSBhbiBlcnJvci4KK1gvT3BlbiBhbHNvIGxpc3RzIGFuICJVTktOT1dOIEtFWSIgcmV0dXJuIHZhbHVlLCB3aGljaCBzb21lIGltcGxlbWVudGF0aW9ucworcmV0dXJuIHJhdGhlciB0aGFuIG51bGwuCisuUkUKKy5MUAorVGhlIGNvcnJlc3BvbmRpbmcgXGZCa2V5X25hbWVcZlIgcmV0dXJucyBhIGNoYXJhY3RlciBzdHJpbmcgY29ycmVzcG9uZGluZwordG8gdGhlIHdpZGUtY2hhcmFjdGVyIHZhbHVlIFxmSXdcZlIuCitUaGUgdHdvIGZ1bmN0aW9ucyBkbyBub3QgcmV0dXJuIHRoZSBzYW1lIHNldCBvZiBzdHJpbmdzOwordGhlIGxhdHRlciByZXR1cm5zIG51bGwgd2hlcmUgdGhlIGZvcm1lciB3b3VsZCBkaXNwbGF5IGEgbWV0YSBjaGFyYWN0ZXIuCisuUFAKK1RoZSBcZkJmaWx0ZXJcZlIgcm91dGluZSwgaWYgdXNlZCwgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIFxmQmluaXRzY3JcZlIgb3IKK1xmQm5ld3Rlcm1cZlIgYXJlIGNhbGxlZC4gIFRoZSBlZmZlY3QgaXMgdGhhdCwgZHVyaW5nIHRob3NlIGNhbGxzLCBcZkJMSU5FU1xmUgoraXMgc2V0IHRvIDE7IHRoZSBjYXBhYmlsaXRpZXMgXGZCY2xlYXJcZlIsIFxmQmN1cFxmUiwgXGZCY3VkXGZSLCBcZkJjdWQxXGZSLAorXGZCY3V1MVxmUiwgXGZCY3V1XGZSLCBcZkJ2cGFcZlIgYXJlIGRpc2FibGVkOyBhbmQgdGhlIFxmQmhvbWVcZlIgc3RyaW5nIGlzCitzZXQgdG8gdGhlIHZhbHVlIG9mIFxmQmNyXGZSLgorLlBQCitUaGUgXGZCbm9maWx0ZXJcZlAgcm91dGluZSBjYW5jZWxzIHRoZSBlZmZlY3Qgb2YgYSBwcmVjZWRpbmcgXGZCZmlsdGVyXGZQCitjYWxsLgorVGhhdCBhbGxvd3MgdGhlIGNhbGxlciB0byBpbml0aWFsaXplIGEgc2NyZWVuIG9uIGEgZGlmZmVyZW50IGRldmljZSwKK3VzaW5nIGEgZGlmZmVyZW50IHZhbHVlIG9mIFxmQiRURVJNXGZQLgorVGhlIGxpbWl0YXRpb24gYXJpc2VzIGJlY2F1c2UgdGhlIFxmQmZpbHRlclxmUCByb3V0aW5lIG1vZGlmaWVzIHRoZQoraW4tbWVtb3J5IGNvcHkgb2YgdGhlIHRlcm1pbmFsIGluZm9ybWF0aW9uLgorLlBQCitUaGUgXGZCdXNlX2VudlxmUiByb3V0aW5lLCBpZiB1c2VkLCBpcyBjYWxsZWQgYmVmb3JlIFxmQmluaXRzY3JcZlIgb3IKK1xmQm5ld3Rlcm1cZlIgYXJlIGNhbGxlZC4gIFdoZW4gY2FsbGVkIHdpdGggXGZCRkFMU0VcZlIgYXMgYW4KK2FyZ3VtZW50LCB0aGUgdmFsdWVzIG9mIFxmQmxpbmVzXGZSIGFuZCBcZkJjb2x1bW5zXGZSIHNwZWNpZmllZCBpbiB0aGUKK1xmSXRlcm1pbmZvXGZSIGRhdGFiYXNlIHdpbGwgYmUgdXNlZCwgZXZlbiBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK1xmQkxJTkVTXGZSIGFuZCBcZkJDT0xVTU5TXGZSICh1c2VkIGJ5IGRlZmF1bHQpIGFyZSBzZXQsIG9yIGlmCitcZkJjdXJzZXNcZlIgaXMgcnVubmluZyBpbiBhIHdpbmRvdyAoaW4gd2hpY2ggY2FzZSBkZWZhdWx0IGJlaGF2aW9yCit3b3VsZCBiZSB0byB1c2UgdGhlIHdpbmRvdyBzaXplIGlmIFxmQkxJTkVTXGZSIGFuZCBcZkJDT0xVTU5TXGZSIGFyZQorbm90IHNldCkuCitOb3RlIHRoYXQgc2V0dGluZyBcZkJMSU5FU1xmUiBvciBcZkJDT0xVTU5TXGZSIG92ZXJyaWRlcyB0aGUKK2NvcnJlc3BvbmRpbmcgc2l6ZSB3aGljaCBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KKy5QUAorVGhlIFxmQnB1dHdpblxmUiByb3V0aW5lIHdyaXRlcyBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggd2luZG93IFxmSXdpblxmUiBpbnRvCit0aGUgZmlsZSB0byB3aGljaCBcZklmaWxlcFxmUiBwb2ludHMuICBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBsYXRlciByZXRyaWV2ZWQKK3VzaW5nIHRoZSBcZkJnZXR3aW5cZlIgZnVuY3Rpb24uCisuUFAKK1RoZSBcZkJnZXR3aW5cZlIgcm91dGluZSByZWFkcyB3aW5kb3cgcmVsYXRlZCBkYXRhIHN0b3JlZCBpbiB0aGUgZmlsZSBieQorXGZCcHV0d2luXGZSLiAgVGhlIHJvdXRpbmUgdGhlbiBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5ldyB3aW5kb3cgdXNpbmcgdGhhdAorZGF0YS4gIEl0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXcgd2luZG93LgorLlBQCitUaGUgXGZCZGVsYXlfb3V0cHV0XGZSIHJvdXRpbmUgaW5zZXJ0cyBhbiBcZkltc1xmUiBtaWxsaXNlY29uZCBwYXVzZQoraW4gb3V0cHV0LiAgVGhpcyByb3V0aW5lIHNob3VsZCBub3QgYmUgdXNlZCBleHRlbnNpdmVseSBiZWNhdXNlCitwYWRkaW5nIGNoYXJhY3RlcnMgYXJlIHVzZWQgcmF0aGVyIHRoYW4gYSBDUFUgcGF1c2UuCitJZiBubyBwYWRkaW5nIGNoYXJhY3RlciBpcyBzcGVjaWZpZWQsIHRoaXMgdXNlcyBcZkJuYXBtc1xmUiB0byBwZXJmb3JtIHRoZSBkZWxheS4KKy5QUAorVGhlIFxmQmZsdXNoaW5wXGZSIHJvdXRpbmUgdGhyb3dzIGF3YXkgYW55IHR5cGVhaGVhZCB0aGF0IGhhcyBiZWVuIHR5cGVkIGJ5IHRoZQordXNlciBhbmQgaGFzIG5vdCB5ZXQgYmVlbiByZWFkIGJ5IHRoZSBwcm9ncmFtLgorLlNIIFJFVFVSTiBWQUxVRQorRXhjZXB0IGZvciBcZkJmbHVzaGlucFxmUiwgcm91dGluZXMgdGhhdCByZXR1cm4gYW4gaW50ZWdlciByZXR1cm4gXGZCRVJSXGZSCit1cG9uIGZhaWx1cmUgYW5kIFxmQk9LXGZSIChTVnI0IHNwZWNpZmllcyBvbmx5ICJhbiBpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4KK1xmQkVSUlxmUiIpIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorLlBQCitSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvci4KKy5QUAorWC9PcGVuIGRvZXMgbm90IGRlZmluZSBhbnkgZXJyb3IgY29uZGl0aW9ucy4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24KKy5SUyAzCisuVFAgNQorXGZCZmx1c2hpbnBcZlIKK3JldHVybnMgYW4gZXJyb3IgaWYgdGhlIHRlcm1pbmFsIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisuVFAgNQorXGZCbWV0YVxmUgorcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgdGVybWluYWwgd2FzIG5vdCBpbml0aWFsaXplZC4KKy5UUCA1CitcZkJwdXR3aW5cZlAKK3JldHVybnMgYW4gZXJyb3IgaWYgdGhlIGFzc29jaWF0ZWQgXGZCZndyaXRlXGZQIGNhbGxzIHJldHVybiBhbiBlcnJvci4KKy5SRQorLlNIIFBPUlRBQklMSVRZCitUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCwgSXNzdWUgNCBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zLgorSXQgc3RhdGVzIHRoYXQgXGZCdW5jdHJsXGZSIGFuZCBcZkJ3dW5jdHJsXGZSIHdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIGlmCit1bnN1Y2Nlc3NmdWwsIGJ1dCBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMuCitUaGlzIGltcGxlbWVudGF0aW9uIGNoZWNrcyBmb3IgdGhyZWUgY2FzZXM6CisuUlMKKy5UUCA1CistCit0aGUgcGFyYW1ldGVyIGlzIGEgNy1iaXQgVVMtQVNDSUkgY29kZS4KK1RoaXMgaXMgdGhlIGNhc2UgdGhhdCBYL09wZW4gQ3Vyc2VzIGRvY3VtZW50ZWQuCisuVFAgNQorLQordGhlIHBhcmFtZXRlciBpcyBpbiB0aGUgcmFuZ2UgMTI4LTE1OSwgaS5lLiwgYSBDMSBjb250cm9sIGNvZGUuCitJZiBcZkJ1c2VfbGVnYWN5X2NvZGluZ1xmUCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBhIFxmQjJcZlAgcGFyYW1ldGVyLAorXGZCdW5jdHJsXGZQIHJldHVybnMgdGhlIHBhcmFtZXRlciwgaS5lLiwgYSBvbmUtY2hhcmFjdGVyIHN0cmluZyB3aXRoCit0aGUgcGFyYW1ldGVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCitPdGhlcndpc2UsIGl0IHJldHVybnMgYGB+QCcnLCBgYH5BJycsIGV0Yy4sIGFuYWxvZ291cyB0byBgYF5AJycsIGBgXkEnJywgQzAgY29udHJvbHMuCisuSVAKK1gvT3BlbiBDdXJzZXMgZG9lcyBub3QgZG9jdW1lbnQgd2hldGhlciBcZkJ1bmN0cmxcZlAgY2FuIGJlIGNhbGxlZCBiZWZvcmUKK2luaXRpYWxpemluZyBjdXJzZXMuCitUaGlzIGltcGxlbWVudGF0aW9uIHBlcm1pdHMgdGhhdCwKK2FuZCByZXR1cm5zIHRoZSBgYH5AJycsIGV0Yy4sIHZhbHVlcyBpbiB0aGF0IGNhc2UuCisuVFAgNQorLQorcGFyYW1ldGVyIHZhbHVlcyBvdXRzaWRlIHRoZSAwIHRvIDI1NSByYW5nZS4KK1xmQnVuY3RybFxmUCByZXR1cm5zIGEgbnVsbCBwb2ludGVyLgorLlJFCisuUFAKK1RoZSBTVnI0IGRvY3VtZW50YXRpb24gZGVzY3JpYmVzIHRoZSBhY3Rpb24gb2YgXGZCZmlsdGVyXGZSIG9ubHkgaW4gdGhlIHZhZ3Vlc3QKK3Rlcm1zLiAgVGhlIGRlc2NyaXB0aW9uIGhlcmUgaXMgYWRhcHRlZCBmcm9tIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkICh3aGljaAorZXJyb25lb3VzbHkgZmFpbHMgdG8gZGVzY3JpYmUgdGhlIGRpc2FibGluZyBvZiBcZkJjdXVcZlIpLgorLlBQCitUaGUgc3RyaW5ncyByZXR1cm5lZCBieSBcZkJ1bmN0cmxcZlIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmUgZGV0ZXJtaW5lZAorYXQgY29tcGlsZSB0aW1lLAorc2hvd2luZyBDMSBjb250cm9scyBmcm9tIHRoZSB1cHBlci0xMjggY29kZXMgd2l0aCBhIGB+JyBwcmVmaXggcmF0aGVyIHRoYW4gYF4nLgorT3RoZXIgaW1wbGVtZW50YXRpb25zIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zLgorRm9yIGV4YW1wbGUsIHRoZXkgbWF5IHNob3cgYm90aCBzZXRzIG9mIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRoIGBeJywKK2FuZCBzdHJpcCB0aGUgcGFyYW1ldGVyIHRvIDcgYml0cy4KK09yIHRoZXkgbWF5IGlnbm9yZSBDMSBjb250cm9scyBhbmQgdHJlYXQgYWxsIG9mIHRoZSB1cHBlci0xMjggY29kZXMgYXMKK3ByaW50YWJsZS4KK1RoaXMgaW1wbGVtZW50YXRpb24gdXNlcyA4IGJpdHMgYnV0IGRvZXMgbm90IG1vZGlmeSB0aGUgc3RyaW5nIHRvIHJlZmxlY3QKK2xvY2FsZS4KK1RoZSBcZkJ1c2VfbGVnYWN5X2NvZGluZ1xmUCBmdW5jdGlvbiBhbGxvd3MgdGhlIGNhbGxlciB0bworY2hhbmdlIHRoZSBvdXRwdXQgb2YgXGZCdW5jdHJsXGZQLgorLlBQCitMaWtld2lzZSwgdGhlIFxmQm1ldGFcZlAgZnVuY3Rpb24gYWxsb3dzIHRoZSBjYWxsZXIgdG8gY2hhbmdlIHRoZQorb3V0cHV0IG9mIFxmQmtleW5hbWVcZlAsIGkuZS4sCitpdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBgTS0nIHByZWZpeAorZm9yIGBgbWV0YScnIGtleXMgKGNvZGVzIGluIHRoZSByYW5nZSAxMjggdG8gMjU1KS4KK0JvdGggXGZCdXNlX2xlZ2FjeV9jb2RpbmdcZlAgYW5kIFxmQm1ldGFcZlAgc3VjY2VlZCBvbmx5IGFmdGVyCitjdXJzZXMgaXMgaW5pdGlhbGl6ZWQuIAorWC9PcGVuIEN1cnNlcyBkb2VzIG5vdCBkb2N1bWVudCB0aGUgdHJlYXRtZW50IG9mIGNvZGVzIDEyOCB0byAxNTkuCitXaGVuIHRyZWF0aW5nIHRoZW0gYXMgYGBtZXRhJycga2V5cworKG9yIGlmIFxmQmtleW5hbWVcZlAgaXMgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXppbmcgY3Vyc2VzKSwKK3RoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBzdHJpbmdzIGBgTS1eQCcnLCBgYE0tXkEnJywgZXRjLgorLlBQCitUaGUgXGZCa2V5bmFtZVxmUCBmdW5jdGlvbiBtYXkgcmV0dXJuIHRoZSBuYW1lcyBvZiB1c2VyLWRlZmluZWQKK3N0cmluZyBjYXBhYmlsaXRpZXMgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIHRlcm1pbmZvIGVudHJ5IHZpYSB0aGUgXGZCLXhcZlAKK29wdGlvbiBvZiBcZkJ0aWNcZlAuCitUaGlzIGltcGxlbWVudGF0aW9uIGF1dG9tYXRpY2FsbHkgYXNzaWducyBhdCBydW4tdGltZSBrZXljb2RlcyB0byAKK3VzZXItZGVmaW5lZCBzdHJpbmdzIHdoaWNoIGJlZ2luIHdpdGggImsiLgorVGhlIGtleWNvZGVzIHN0YXJ0IGF0IEtFWV9NQVgsIGJ1dCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgCit0aGUgc2FtZSB2YWx1ZSBmb3IgZGlmZmVyZW50IHJ1bnMgYmVjYXVzZSB1c2VyLWRlZmluZWQgY29kZXMgYXJlCittZXJnZWQgZnJvbSBhbGwgdGVybWluYWwgZGVzY3JpcHRpb25zIHdoaWNoIGhhdmUgYmVlbiBsb2FkZWQuCitUaGUgXGZCdXNlX2V4dGVuZGVkX25hbWVzXGZQIGZ1bmN0aW9uIGNvbnRyb2xzIHdoZXRoZXIgdGhpcyBkYXRhIGlzCitsb2FkZWQgd2hlbiB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24gaXMgcmVhZCBieSB0aGUgbGlicmFyeS4KKy5QUAorVGhlIFxmQm5vZmlsdGVyXGZQIHJvdXRpbmUgaXMgc3BlY2lmaWMgdG8gbmN1cnNlcy4KK0l0IHdhcyBub3Qgc3VwcG9ydGVkIG9uIFZlcnNpb24gNywgQlNEIG9yIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucy4KK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55IGNvZGUgZGVwZW5kaW5nIG9uIG5jdXJzZXMgZXh0ZW5zaW9ucworYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJsZWdhY3lfY29kaW5nXGZSKDNYKSwKK1xmQmN1cnNlc1xmUigzWCksCitcZkJjdXJzX2luaXRzY3JcZlIoM1gpLAorXGZCY3Vyc19rZXJuZWxcZlIoM1gpLAorXGZCY3Vyc19zY3JfZHVtcFxmUigzWCksCitcZkJsZWdhY3lfY29kaW5nXGZSKDNYKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2N1cnNfd2luZG93LjN4IGIvbmN1cnNlcy01LjcvbWFuL2N1cnNfd2luZG93LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Mjg2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vY3Vyc193aW5kb3cuM3gKQEAgLTAsMCArMSwxODggQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogY3Vyc193aW5kb3cuM3gsdiAxLjE0IDIwMDYvMDIvMjUgMjE6NDk6MTkgdG9tIEV4cCAkCisuVEggY3Vyc193aW5kb3cgM1ggIiIKKy5uYQorLmh5IDAKKy5TSCBOQU1FCitcZkJuZXd3aW5cZlIsCitcZkJkZWx3aW5cZlIsCitcZkJtdndpblxmUiwKK1xmQnN1YndpblxmUiwKK1xmQmRlcndpblxmUiwKK1xmQm12ZGVyd2luXGZSLAorXGZCZHVwd2luXGZSLAorXGZCd3N5bmN1cFxmUiwKK1xmQnN5bmNva1xmUiwKK1xmQndjdXJzeW5jdXBcZlIsCitcZkJ3c3luY2Rvd25cZlIgLSBjcmVhdGUgXGZCY3Vyc2VzXGZSIHdpbmRvd3MKKy5hZAorLmh5CisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCV0lORE9XICpuZXd3aW4oaW50IG5saW5lcywgaW50IG5jb2xzLCBpbnQgYmVnaW5feSxcZlIKKyAgICAgIFxmQmludCBiZWdpbl94KTtcZlIKKy5icgorXGZCaW50IGRlbHdpbihXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBtdndpbihXSU5ET1cgKndpbiwgaW50IHksIGludCB4KTtcZlIKKy5icgorXGZCV0lORE9XICpzdWJ3aW4oV0lORE9XICpvcmlnLCBpbnQgbmxpbmVzLCBpbnQgbmNvbHMsXGZSCisgICAgICBcZkJpbnQgYmVnaW5feSwgaW50IGJlZ2luX3gpO1xmUgorLmJyCitcZkJXSU5ET1cgKmRlcndpbihXSU5ET1cgKm9yaWcsIGludCBubGluZXMsIGludCBuY29scyxcZlIKKyAgICAgIFxmQmludCBiZWdpbl95LCBpbnQgYmVnaW5feCk7XGZSCisuYnIKK1xmQmludCBtdmRlcndpbihXSU5ET1cgKndpbiwgaW50IHBhcl95LCBpbnQgcGFyX3gpO1xmUgorLmJyCitcZkJXSU5ET1cgKmR1cHdpbihXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQnZvaWQgd3N5bmN1cChXSU5ET1cgKndpbik7XGZSCisuYnIKK1xmQmludCBzeW5jb2soV0lORE9XICp3aW4sIGJvb2wgYmYpO1xmUgorLmJyCitcZkJ2b2lkIHdjdXJzeW5jdXAoV0lORE9XICp3aW4pO1xmUgorLmJyCitcZkJ2b2lkIHdzeW5jZG93bihXSU5ET1cgKndpbik7XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorQ2FsbGluZyBcZkJuZXd3aW5cZlIgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXcgd2luZG93IHdpdGggdGhlCitnaXZlbiBudW1iZXIgb2YgbGluZXMgYW5kIGNvbHVtbnMuICBUaGUgdXBwZXIgbGVmdC1oYW5kIGNvcm5lciBvZiB0aGUgd2luZG93IGlzCithdCBsaW5lIFxmSWJlZ2luXGZSX1xmSXlcZlIsIGNvbHVtbiBcZkliZWdpblxmUl9cZkl4XGZSLiAgSWYgZWl0aGVyCitcZklubGluZXNcZlIgb3IgXGZJbmNvbHNcZlIgaXMgemVybywgdGhleSBkZWZhdWx0IHRvIFxmQkxJTkVTIC1cZlIKK1xmSWJlZ2luXGZSX1xmSXlcZlIgYW5kIFxmQkNPTFMgLVxmUiBcZkliZWdpblxmUl9cZkl4XGZSLiAgQSBuZXcgZnVsbC1zY3JlZW4KK3dpbmRvdyBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgXGZCbmV3d2luKDAsMCwwLDApXGZSLgorLlBQCitDYWxsaW5nIFxmQmRlbHdpblxmUiBkZWxldGVzIHRoZSBuYW1lZCB3aW5kb3csIGZyZWVpbmcgYWxsIG1lbW9yeQorYXNzb2NpYXRlZCB3aXRoIGl0IChpdCBkb2VzIG5vdCBhY3R1YWxseSBlcmFzZSB0aGUgd2luZG93J3Mgc2NyZWVuCitpbWFnZSkuICBTdWJ3aW5kb3dzIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgdGhlIG1haW4gd2luZG93IGNhbiBiZQorZGVsZXRlZC4KKy5QUAorQ2FsbGluZyBcZkJtdndpblxmUiBtb3ZlcyB0aGUgd2luZG93IHNvIHRoYXQgdGhlIHVwcGVyIGxlZnQtaGFuZAorY29ybmVyIGlzIGF0IHBvc2l0aW9uIChcZkl4XGZSLCBcZkl5XGZSKS4gIElmIHRoZSBtb3ZlIHdvdWxkIGNhdXNlIHRoZQord2luZG93IHRvIGJlIG9mZiB0aGUgc2NyZWVuLCBpdCBpcyBhbiBlcnJvciBhbmQgdGhlIHdpbmRvdyBpcyBub3QKK21vdmVkLiAgTW92aW5nIHN1YndpbmRvd3MgaXMgYWxsb3dlZCwgYnV0IHNob3VsZCBiZSBhdm9pZGVkLgorLlBQCitDYWxsaW5nIFxmQnN1YndpblxmUiBjcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldyB3aW5kb3cKK3dpdGggdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcywgXGZJbmxpbmVzXGZSLCBhbmQgY29sdW1ucywKK1xmSW5jb2xzXGZSLiAgVGhlIHdpbmRvdyBpcyBhdCBwb3NpdGlvbiAoXGZJYmVnaW5cZlJfXGZJeVxmUiwKK1xmSWJlZ2luXGZSX1xmSXhcZlIpIG9uIHRoZSBzY3JlZW4uICAoVGhpcyBwb3NpdGlvbiBpcyByZWxhdGl2ZSB0byB0aGUKK3NjcmVlbiwgYW5kIG5vdCB0byB0aGUgd2luZG93IFxmSW9yaWdcZlIuKSAgVGhlIHdpbmRvdyBpcyBtYWRlIGluIHRoZQorbWlkZGxlIG9mIHRoZSB3aW5kb3cgXGZJb3JpZ1xmUiwgc28gdGhhdCBjaGFuZ2VzIG1hZGUgdG8gb25lIHdpbmRvdword2lsbCBhZmZlY3QgYm90aCB3aW5kb3dzLiAgVGhlIHN1YndpbmRvdyBzaGFyZXMgbWVtb3J5IHdpdGggdGhlIHdpbmRvdworXGZJb3JpZ1xmUi4gIFdoZW4gdXNpbmcgdGhpcyByb3V0aW5lLCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbAorXGZCdG91Y2h3aW5cZlIgb3IgXGZCdG91Y2hsaW5lXGZSIG9uIFxmSW9yaWdcZlIgYmVmb3JlIGNhbGxpbmcKK1xmQndyZWZyZXNoXGZSIG9uIHRoZSBzdWJ3aW5kb3cuCisuUFAKK0NhbGxpbmcgXGZCZGVyd2luXGZSIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCc3Vid2luLFxmUiBleGNlcHQgdGhhdAorXGZJYmVnaW5cZlJfXGZJeVxmUiBhbmQgXGZJYmVnaW5cZlJfXGZJeFxmUiBhcmUgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbgorb2YgdGhlIHdpbmRvdyBcZklvcmlnXGZSIHJhdGhlciB0aGFuIHRoZSBzY3JlZW4uICBUaGVyZSBpcyBubworZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdWJ3aW5kb3dzIGFuZCB0aGUgZGVyaXZlZCB3aW5kb3dzLgorLlBQCitDYWxsaW5nIFxmQm12ZGVyd2luXGZSIG1vdmVzIGEgZGVyaXZlZCB3aW5kb3cgKG9yIHN1YndpbmRvdykKK2luc2lkZSBpdHMgcGFyZW50IHdpbmRvdy4gIFRoZSBzY3JlZW4tcmVsYXRpdmUgcGFyYW1ldGVycyBvZiB0aGUKK3dpbmRvdyBhcmUgbm90IGNoYW5nZWQuICBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBkaXNwbGF5IGRpZmZlcmVudAorcGFydHMgb2YgdGhlIHBhcmVudCB3aW5kb3cgYXQgdGhlIHNhbWUgcGh5c2ljYWwgcG9zaXRpb24gb24gdGhlCitzY3JlZW4uCisuUFAKK0NhbGxpbmcgXGZCZHVwd2luXGZSIGNyZWF0ZXMgYW4gZXhhY3QgZHVwbGljYXRlIG9mIHRoZSB3aW5kb3cgXGZJd2luXGZSLgorLlBQCitDYWxsaW5nIFxmQndzeW5jdXBcZlIgdG91Y2hlcyBhbGwgbG9jYXRpb25zIGluIGFuY2VzdG9ycyBvZiBcZkl3aW5cZlIgdGhhdCBhcmUKK2NoYW5nZWQgaW4gXGZJd2luXGZSLiAgSWYgXGZCc3luY29rXGZSIGlzIGNhbGxlZCB3aXRoIHNlY29uZCBhcmd1bWVudAorXGZCVFJVRVxmUiB0aGVuIFxmQndzeW5jdXBcZlIgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGhlcmUgaXMgYQorY2hhbmdlIGluIHRoZSB3aW5kb3cuCisuUFAKK1RoZSBcZkJ3c3luY2Rvd25cZlIgcm91dGluZSB0b3VjaGVzIGVhY2ggbG9jYXRpb24gaW4gXGZJd2luXGZSIHRoYXQgaGFzIGJlZW4KK3RvdWNoZWQgaW4gYW55IG9mIGl0cyBhbmNlc3RvciB3aW5kb3dzLiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieQorXGZCd3JlZnJlc2hcZlIsIHNvIGl0IHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgbmVjZXNzYXJ5IHRvIGNhbGwgaXQgbWFudWFsbHkuCisuUFAKK1RoZSByb3V0aW5lIFxmQndjdXJzeW5jdXBcZlIgdXBkYXRlcyB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gb2YgYWxsIHRoZQorYW5jZXN0b3JzIG9mIHRoZSB3aW5kb3cgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gb2YgdGhlCit3aW5kb3cuCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZAorXGZCT0tcZlIgKFNWcjQgb25seSBzcGVjaWZpZXMgImFuIGludGVnZXIgdmFsdWUgb3RoZXIgdGhhbiBcZkJFUlJcZlIiKSB1cG9uCitzdWNjZXNzZnVsIGNvbXBsZXRpb24uCisuUFAKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLgorLlBQCitYL09wZW4gZGVmaW5lcyBubyBlcnJvciBjb25kaXRpb25zLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorLlJTCisuVFAgNQorXGZCZGVsd2luXGZSCityZXR1cm5zIGFuIGVycm9yIGlmIHRoZSB3aW5kb3cgcG9pbnRlciBpcyBudWxsLCBvcgoraWYgdGhlIHdpbmRvdyBpcyB0aGUgcGFyZW50IG9mIGFub3RoZXIgd2luZG93LgorLklQCitUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gbWFpbnRhaW5zIGEgbGlzdCBvZiB3aW5kb3dzLAorYW5kIGNoZWNrcyB0aGF0IHRoZSBwb2ludGVyIHBhc3NlZCB0byBcZkJkZWx3aW5cZlAgaXMgb25lIHRoYXQKK2l0IGNyZWF0ZWQsIHJldHVybmluZyBhbiBlcnJvciBpZiBpdCB3YXMgbm90Li4KKy5UUCA1CitcZkJtdmRlcndpblxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsIG9yCitpZiBzb21lIHBhcnQgb2YgdGhlIHdpbmRvdyB3b3VsZCBiZSBwbGFjZWQgb2ZmLXNjcmVlbi4KKy5UUCA1CitcZkJtdndpblxmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwsIG9yCitpZiB0aGUgd2luZG93IGlzIHJlYWxseSBhIHBhZCwgb3IKK2lmIHNvbWUgcGFydCBvZiB0aGUgd2luZG93IHdvdWxkIGJlIHBsYWNlZCBvZmYtc2NyZWVuLgorLlRQIDUKK1xmQnN5bmNva1xmUAorcmV0dXJucyBhbiBlcnJvcgoraWYgdGhlIHdpbmRvdyBwb2ludGVyIGlzIG51bGwuCisuUkUKKy5TSCBOT1RFUworSWYgbWFueSBzbWFsbCBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSB3aW5kb3csIHRoZSBcZkJ3c3luY3VwXGZSIG9wdGlvbiBjb3VsZAorZGVncmFkZSBwZXJmb3JtYW5jZS4KKy5QUAorTm90ZSB0aGF0IFxmQnN5bmNva1xmUiBtYXkgYmUgYSBtYWNyby4KKy5TSCBCVUdTCitUaGUgc3Vid2luZG93IGZ1bmN0aW9ucyAoXGZJc3Vid2luXGZSLCBcZklkZXJ3aW5cZlIsIFxmSW12ZGVyd2luXGZSLAorXGZCd3N5bmN1cFxmUiwgXGZCd3N5bmNkb3duXGZSLCBcZkJ3Y3Vyc3luY3VwXGZSLCBcZkJzeW5jb2tcZlIpIGFyZSBmbGFreSwKK2luY29tcGxldGVseSBpbXBsZW1lbnRlZCwgYW5kIG5vdCB3ZWxsIHRlc3RlZC4KKy5QUAorVGhlIFN5c3RlbSBWIGN1cnNlcyBkb2N1bWVudGF0aW9uIGlzIHZlcnkgdW5jbGVhciBhYm91dCB3aGF0IFxmQndzeW5jdXBcZlIKK2FuZCBcZkJ3c3luY2Rvd25cZlIgYWN0dWFsbHkgZG8uICBJdCBzZWVtcyB0byBpbXBseSB0aGF0IHRoZXkgYXJlIG9ubHkKK3N1cHBvc2VkIHRvIHRvdWNoIGV4YWN0bHkgdGhvc2UgbGluZXMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgYW5jZXN0b3IgY2hhbmdlcy4KK1RoZSBsYW5ndWFnZSBoZXJlLCBhbmQgdGhlIGJlaGF2aW9yIG9mIHRoZSBcZkJjdXJzZXNcZlIgaW1wbGVtZW50YXRpb24sCitpcyBwYXR0ZXJuZWQgb24gdGhlIFhQRzQgY3Vyc2VzIHN0YW5kYXJkLiAgVGhlIHdlYWtlciBYUEc0IHNwZWMgbWF5IHJlc3VsdAoraW4gc2xvd2VyIHVwZGF0ZXMuCisuU0ggUE9SVEFCSUxJVFkKK1RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLCBJc3N1ZSA0IGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmN1cnNfcmVmcmVzaFxmUigzWCksIFxmQmN1cnNfdG91Y2hcZlIoM1gpCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9kZWZhdWx0X2NvbG9ycy4zeCBiL25jdXJzZXMtNS43L21hbi9kZWZhdWx0X2NvbG9ycy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjUxOGJhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2RlZmF1bHRfY29sb3JzLjN4CkBAIC0wLDAgKzEsMTQ0IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NywxOTk5LDIwMDAsMjAwNQorLlwiCisuXCIgJElkOiBkZWZhdWx0X2NvbG9ycy4zeCx2IDEuMjAgMjAwNi8xMi8yNCAxNTowMjo1MyB0b20gRXhwICQKKy5USCBkZWZhdWx0X2NvbG9ycyAzWCAiIgorLlNIIE5BTUUKK1xmQnVzZV9kZWZhdWx0X2NvbG9yc1xmUiwKK1xmQmFzc3VtZV9kZWZhdWx0X2NvbG9yc1xmUiBcLSB1c2UgdGVybWluYWwncyBkZWZhdWx0IGNvbG9ycworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKK1xmQmludCB1c2VfZGVmYXVsdF9jb2xvcnModm9pZCk7XGZQCisuYnIKK1xmQmludCBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoaW50IGZnLCBpbnQgYmcpO1xmUAorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5JIHVzZV9kZWZhdWx0X2NvbG9ycygpCithbmQKKy5JIGFzc3VtZV9kZWZhdWx0X2NvbG9ycygpCitmdW5jdGlvbnMgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIGN1cnNlcyBsaWJyYXJ5LgorVGhleSBhcmUgdXNlZCB3aXRoIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgSVNPIDY0MjkgY29sb3IsIG9yIGVxdWl2YWxlbnQuCitUaGVzZSB0ZXJtaW5hbHMgYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIHJlc2V0IGNvbG9yIHRvIGFuIHVuc3BlY2lmaWVkCitkZWZhdWx0IHZhbHVlIChlLmcuLCB3aXRoIFNHUiAzOSBvciBTR1IgNDkpLgorLlBQCitBcHBsaWNhdGlvbnMgdGhhdCBwYWludCBhIGNvbG9yZWQgYmFja2dyb3VuZCBvdmVyIHRoZSB3aG9sZSBzY3JlZW4KK2RvIG5vdCB0YWtlIGFkdmFudGFnZSBvZiBTR1IgMzkgYW5kIFNHUiA0OS4KK1NvbWUgYXBwbGljYXRpb25zIGFyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIGRlZmF1bHQgYmFja2dyb3VuZCwKK3VzaW5nIGNvbG9ycyBvbmx5IGZvciB0ZXh0LgorRm9yIGV4YW1wbGUsIHRoZXJlIGFyZSBzZXZlcmFsIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgXGZCbHNcZlAgcHJvZ3JhbQord2hpY2ggdXNlIGNvbG9ycyB0byBkZW5vdGUgZGlmZmVyZW50IGZpbGUgdHlwZXMgb3IgcGVybWlzc2lvbnMuCitUaGVzZSAiY29sb3IgbHMiIHByb2dyYW1zIGRvIG5vdCBuZWNlc3NhcmlseSBtb2RpZnkgdGhlIGJhY2tncm91bmQgY29sb3IsCit0eXBpY2FsbHkgdXNpbmcgb25seSB0aGUgXGZJc2V0YWZcZlAgdGVybWluZm8gY2FwYWJpbGl0eSB0byBzZXQgdGhlCitmb3JlZ3JvdW5kIGNvbG9yLgorRnVsbC1zY3JlZW4gYXBwbGljYXRpb25zIHRoYXQgdXNlIGRlZmF1bHQgY29sb3JzIGNhbiBhY2hpZXZlIHNpbWlsYXIKK3Zpc3VhbCBlZmZlY3RzLgorLlBQCitUaGUgZmlyc3QgZnVuY3Rpb24sCisuSSB1c2VfZGVmYXVsdF9jb2xvcnMoKQordGVsbHMgdGhlIGN1cnNlcyBsaWJyYXJ5IHRvIGFzc2lnbiB0ZXJtaW5hbCBkZWZhdWx0Citmb3JlZ3JvdW5kL2JhY2tncm91bmQgY29sb3JzIHRvIGNvbG9yIG51bWJlciAtMS4gU28gaW5pdF9wYWlyKHgsQ09MT1JfUkVELC0xKQord2lsbCBpbml0aWFsaXplIHBhaXIgeCBhcyByZWQgb24gZGVmYXVsdCBiYWNrZ3JvdW5kIGFuZCBpbml0X3BhaXIoeCwtMSxDT0xPUl9CTFVFKSB3aWxsCitpbml0aWFsaXplIHBhaXIgeCBhcyBkZWZhdWx0IGZvcmVncm91bmQgb24gYmx1ZS4KKy5QUAorVGhlIG90aGVyLAorLkkgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkKK2lzIGEgcmVmaW5lbWVudCB3aGljaCB0ZWxscyB3aGljaCBjb2xvcnMgdG8gcGFpbnQgZm9yIGNvbG9yIHBhaXIgMC4KK1RoaXMgZnVuY3Rpb24gcmVjb2duaXplcyBhIHNwZWNpYWwgY29sb3IgbnVtYmVyIC0xLAord2hpY2ggZGVub3RlcyB0aGUgZGVmYXVsdCB0ZXJtaW5hbCBjb2xvci4KKy5QUAorVGhlIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDoKKy5SUworLmJyCisuSSB1c2VfZGVmYXVsdF9jb2xvcnMoKTsKKy5icgorLkkgYXNzdW1lX2RlZmF1bHRfY29sb3JzKC0xLC0xKTsKKy5SRQorLlBQCitUaGVzZSBhcmUgbmN1cnNlcyBleHRlbnNpb25zLgorRm9yIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMsIGNvbG9yCitudW1iZXIgLTEgZG9lcyBub3QgbWVhbiBhbnl0aGluZywganVzdCBhcyBmb3IgbmN1cnNlcyBiZWZvcmUgYQorc3VjY2Vzc2Z1bCBjYWxsIG9mIFxmSXVzZV9kZWZhdWx0X2NvbG9ycygpXGZQIG9yIFxmSWFzc3VtZV9kZWZhdWx0X2NvbG9ycygpXGZQLgorLlBQCitPdGhlciBjdXJzZXMgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBhbGxvdyBhbiBhcHBsaWNhdGlvbiB0byBtb2RpZnkgY29sb3IgcGFpciAwLgorVGhleSBhc3N1bWUgdGhhdCB0aGUgYmFja2dyb3VuZCBpcyBDT0xPUl9CTEFDSywKK2J1dCBkbyBub3QgZW5zdXJlIHRoYXQgdGhlIGNvbG9yIHBhaXIgMCBpcyBwYWludGVkIHRvIG1hdGNoIHRoZQorYXNzdW1wdGlvbi4KK0lmIHlvdXIgYXBwbGljYXRpb24gZG9lcyBub3QgdXNlIGVpdGhlcgorLkkgdXNlX2RlZmF1bHRfY29sb3JzKCkKK29yCisuSSBhc3N1bWVfZGVmYXVsdF9jb2xvcnMoKQorbmN1cnNlcyB3aWxsIHBhaW50IGEgd2hpdGUgZm9yZWdyb3VuZCAodGV4dCkgd2l0aCBibGFjayBiYWNrZ3JvdW5kCitmb3IgY29sb3IgcGFpciAwLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgaW50ZWdlciBcZkJFUlJcZlAgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUCBvbiBzdWNjZXNzLgorVGhleSB3aWxsIGZhaWwgaWYgZWl0aGVyIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0Cit0aGUgXGZJb3JpZ19wYWlyXGZQIG9yIFxmSW9yaWdfY29sb3JzXGZQIGNhcGFiaWxpdHkuCitJZiB0aGUgXGZJaW5pdGlhbGl6ZV9wYWlyXGZQIGNhcGFiaWxpdHkgaXMgZm91bmQsIHRoaXMgY2F1c2VzIGFuCitlcnJvciBhcyB3ZWxsLgorLlNIIE5PVEVTCitBc3NvY2lhdGVkIHdpdGggdGhpcyBleHRlbnNpb24sIHRoZSBcZkJpbml0X3BhaXJcZlIgZnVuY3Rpb24gYWNjZXB0cworbmVnYXRpdmUgYXJndW1lbnRzIHRvIHNwZWNpZnkgZGVmYXVsdCBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JzLgorLlBQCitUaGUgXGZJdXNlX2RlZmF1bHRfY29sb3JzKClcZlAgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHN1cHBvcnQgXGZJZGVkXGZQLgorVGhpcyBpcyBhIGZ1bGwtc2NyZWVuIGFwcGxpY2F0aW9uIHdoaWNoIHVzZXMgY3Vyc2VzIHRvIG1hbmFnZSBvbmx5IHBhcnQKK29mIHRoZSBzY3JlZW4uICBUaGUgYm90dG9tIHBvcnRpb24gb2YgdGhlIHNjcmVlbiwgd2hpY2ggaXMgb2YgYWRqdXN0YWJsZQorc2l6ZSwgaXMgbGVmdCB1bmNvbG9yZWQgdG8gZGlzcGxheSB0aGUgcmVzdWx0cyBmcm9tIHNoZWxsIGNvbW1hbmRzLgorVGhlIHRvcCBwb3J0aW9uIG9mIHRoZSBzY3JlZW4gY29sb3JzIGZpbGVuYW1lcyB1c2luZyBhIHNjaGVtZSBsaWtlIHRoZQorImNvbG9yIGxzIiBwcm9ncmFtcy4KK0F0dGVtcHRpbmcgdG8gbWFuYWdlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBzY3JlZW4gZm9yIHRoaXMgYXBwbGljYXRpb24KK3dvdWxkIGdpdmUgdW5zYXRpc2ZhY3RvcnkgcmVzdWx0cyBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMuCitUaGlzIGV4dGVuc2lvbiB3YXMgZGV2aXNlZCBhZnRlcgorbm90aW5nIHRoYXQgY29sb3IgeHRlcm0gKGFuZCBzaW1pbGFyIHByb2dyYW1zKSBwcm92aWRlcyBhIGJhY2tncm91bmQgY29sb3IKK3doaWNoIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gYW55IG9mIHRoZSBBTlNJIGNvbG9ycy4KK1doaWxlIGEgc3BlY2lhbCB0ZXJtaW5mbyBlbnRyeSBjb3VsZCBiZSBjb25zdHJ1Y3RlZCB1c2luZyBuaW5lIGNvbG9ycywKK3RoZXJlIHdhcyBubyBtZWNoYW5pc20gcHJvdmlkZWQgd2l0aGluIGN1cnNlcyB0byBhY2NvdW50IGZvciB0aGUgcmVsYXRlZAorXGZJb3JpZ19wYWlyXGZQIGFuZCBcZkliYWNrX2NvbG9yX2VyYXNlXGZQIGNhcGFiaWxpdGllcy4KKy5QUAorVGhlIFxmSWFzc3VtZV9kZWZhdWx0X2NvbG9ycygpXGZQIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byBzb2x2ZQorYSBkaWZmZXJlbnQgcHJvYmxlbTogc3VwcG9ydCBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHdvdWxkIHVzZQorZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIHRvIGJ5cGFzcyBjdXJzZXMnCitub3Rpb24gb2YgdGhlIHRlcm1pbmFsJ3MgZGVmYXVsdCBjb2xvcnMsIHNldHRpbmcgc3BlY2lmaWMgdmFsdWVzLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0CithbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggU0VFIEFMU08KK1xmQmN1cnNfY29sb3JcZlIoM1gpLAorXGZCZGVkXGZQKDEpLgorLlNIIEFVVEhPUgorVGhvbWFzIERpY2tleSAoZnJvbSBhbiBhbmFseXNpcyBvZiB0aGUgcmVxdWlyZW1lbnRzIGZvciBjb2xvciB4dGVybQorZm9yIFhGcmVlODYgMy4xLjJDLCBGZWJydWFyeSAxOTk2KS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2RlZmluZV9rZXkuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vZGVmaW5lX2tleS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTZhM2NiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2RlZmluZV9rZXkuM3gKQEAgLTAsMCArMSw2NSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTcKKy5cIgorLlwiICRJZDogZGVmaW5lX2tleS4zeCx2IDEuMTIgMjAwNi8wMi8yNSAyMTo0OToxOSB0b20gRXhwICQKKy5USCBkZWZpbmVfa2V5IDNYICIiCisuU0ggTkFNRQorXGZCZGVmaW5lX2tleVxmUCBcLSBkZWZpbmUgYSBrZXljb2RlCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlAKKy5zcAorXGZCaW50IGRlZmluZV9rZXkoY29uc3QgY2hhciAqZGVmaW5pdGlvbiwgaW50IGtleWNvZGUpO1xmUAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuCitJdCBwZXJtaXRzIGFuIGFwcGxpY2F0aW9uIHRvIGRlZmluZSBrZXljb2RlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgY29udHJvbAorc3RyaW5ncywgc28gdGhhdCB0aGUgbmN1cnNlcyBsaWJyYXJ5IHdpbGwgaW50ZXJwcmV0IHRoZW0ganVzdCBhcyBpdCB3b3VsZAordGhlIHByZWRlZmluZWQgY29kZXMgaW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorLlBQCitJZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIG51bGwsIGFueSBleGlzdGluZyBkZWZpbml0aW9uIGZvciB0aGUga2V5Y29kZSBpcworcmVtb3ZlZC4KK1NpbWlsYXJseSwgaWYgdGhlIGdpdmVuIGtleWNvZGUgaXMgbmVnYXRpdmUgb3IgemVybywgYW55IGV4aXN0aW5nIHN0cmluZworZm9yIHRoZSBnaXZlbiBkZWZpbml0aW9uIGlzIHJlbW92ZWQuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUga2V5Y29kZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBlbHNlIEVSUiBpcyByZXR1cm5lZC4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJrZXlva1xmUigzWCksCitcZkJrZXlfZGVmaW5lZFxmUigzWCkuCisuU0ggQVVUSE9SCitUaG9tYXMgRGlja2V5LgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybS4zeCBiL25jdXJzZXMtNS43L21hbi9mb3JtLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmExOWIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybS4zeApAQCAtMCwwICsxLDIxNiBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybS4zeCx2IDEuMjIgMjAwOC8xMC8xMSAyMDo0ODoxMSB0b20gRXhwICQKKy5USCBmb3JtIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybVxmUiAtIGN1cnNlcyBleHRlbnNpb24gZm9yIHByb2dyYW1taW5nIGZvcm1zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQmZvcm1cZlIgbGlicmFyeSBwcm92aWRlcyB0ZXJtaW5hbC1pbmRlcGVuZGVudCBmYWNpbGl0aWVzIGZvciBjb21wb3NpbmcKK2Zvcm0gc2NyZWVucyBvbiBjaGFyYWN0ZXItY2VsbCB0ZXJtaW5hbHMuICBUaGUgbGlicmFyeSBpbmNsdWRlczogZmllbGQKK3JvdXRpbmVzLCB3aGljaCBjcmVhdGUgYW5kIG1vZGlmeSBmb3JtIGZpZWxkczsgYW5kIGZvcm0gcm91dGluZXMsIHdoaWNoIGdyb3VwCitmaWVsZHMgaW50byBmb3JtcywgZGlzcGxheSBmb3JtcyBvbiB0aGUgc2NyZWVuLCBhbmQgaGFuZGxlIGludGVyYWN0aW9uIHdpdGggdGhlCit1c2VyLgorLlBQCitUaGUgXGZCZm9ybVxmUiBsaWJyYXJ5IHVzZXMgdGhlIFxmQmN1cnNlc1xmUiBsaWJyYXJpZXMuCitUbyB1c2UgdGhlIFxmQmZvcm1cZlIgbGlicmFyeSwgbGluayB3aXRoIHRoZSBvcHRpb25zCitcZkItbGZvcm0gLWxjdXJzZXNcZlIuCisuUFAKK1lvdXIgcHJvZ3JhbSBzaG91bGQgc2V0IHVwIHRoZSBsb2NhbGUsIGUuZy4sCisuc3AKKyAgICAgXGZCc2V0bG9jYWxlKExDX0FMTCwgIiIpO1xmUAorLnNwCitzbyB0aGF0IGlucHV0L291dHB1dCBwcm9jZXNzaW5nIHdpbGwgd29yay4KKy5QUAorQSBjdXJzZXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBzdWNoIGFzIFxmQmluaXRzY3JcZlIgbXVzdCBiZSBjYWxsZWQKK2JlZm9yZSB1c2luZyBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLgorLgorLlNTIEN1cnJlbnQgRGVmYXVsdCBWYWx1ZXMgZm9yIEZpZWxkIEF0dHJpYnV0ZXMKKy4KK1RoZSBcZkJmb3JtXGZSIGxpYnJhcnkgbWFpbnRhaW5zIGEgZGVmYXVsdCB2YWx1ZSBmb3IgZmllbGQgYXR0cmlidXRlcy4gIFlvdQorY2FuIGdldCBvciBzZXQgdGhpcyBkZWZhdWx0IGJ5IGNhbGxpbmcgdGhlIGFwcHJvcHJpYXRlIFxmQnNldF9cZlIKK29yIHJldHJpZXZhbAorcm91dGluZSB3aXRoIGEgXGZCTlVMTFxmUiBmaWVsZCBwb2ludGVyLiAgQ2hhbmdpbmcgdGhpcyBkZWZhdWx0IHdpdGggYQorXGZCc2V0X1xmUiBmdW5jdGlvbiBhZmZlY3RzIGZ1dHVyZSBmaWVsZCBjcmVhdGlvbnMsIGJ1dCBkb2VzIG5vdCBjaGFuZ2UgdGhlCityZW5kZXJpbmcgb2YgZmllbGRzIGFscmVhZHkgY3JlYXRlZC4KKy4KKy5TUyBSb3V0aW5lIE5hbWUgSW5kZXgKKy4KK1RoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgZWFjaCBcZkJmb3JtXGZSIHJvdXRpbmUgYW5kIHRoZSBuYW1lIG9mCit0aGUgbWFudWFsIHBhZ2Ugb24gd2hpY2ggaXQgaXMgZGVzY3JpYmVkLgorLgorLlRTCitsIGwKK2wgbCAuCitcZkJjdXJzZXNcZlIgUm91dGluZSBOYW1lCU1hbnVhbCBQYWdlIE5hbWUKKz0KK2N1cnJlbnRfZmllbGQJXGZCZm9ybV9wYWdlXGZSKDNYKQorZGF0YV9haGVhZAlcZkJmb3JtX2RhdGFcZlIoM1gpCitkYXRhX2JlaGluZAlcZkJmb3JtX2RhdGFcZlIoM1gpCitkdXBfZmllbGQJXGZCZm9ybV9maWVsZF9uZXdcZlIoM1gpCitkeW5hbWljX2ZpZWxkX2luZm8JXGZCZm9ybV9maWVsZF9pbmZvXGZSKDNYKQorZmllbGRfYXJnCVxmQmZvcm1fZmllbGRfdmFsaWRhdGlvblxmUigzWCkKK2ZpZWxkX2JhY2sJXGZCZm9ybV9maWVsZF9hdHRyaWJ1dGVzXGZSKDNYKQorZmllbGRfYnVmZmVyCVxmQmZvcm1fZmllbGRfYnVmZmVyXGZSKDNYKQorZmllbGRfY291bnQJXGZCZm9ybV9maWVsZFxmUigzWCkKK2ZpZWxkX2ZvcmUJXGZCZm9ybV9maWVsZF9hdHRyaWJ1dGVzXGZSKDNYKQorZmllbGRfaW5kZXgJXGZCZm9ybV9wYWdlXGZSKDNYKQorZmllbGRfaW5mbwlcZkJmb3JtX2ZpZWxkX2luZm9cZlIoM1gpCitmaWVsZF9pbml0CVxmQmZvcm1faG9va1xmUigzWCkKK2ZpZWxkX2p1c3QJXGZCZm9ybV9maWVsZF9qdXN0XGZSKDNYKQorZmllbGRfb3B0cwlcZkJmb3JtX2ZpZWxkX29wdHNcZlIoM1gpCitmaWVsZF9vcHRzX29mZglcZkJmb3JtX2ZpZWxkX29wdHNcZlIoM1gpCitmaWVsZF9vcHRzX29uCVxmQmZvcm1fZmllbGRfb3B0c1xmUigzWCkKK2ZpZWxkX3BhZAlcZkJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXNcZlIoM1gpCitmaWVsZF9zdGF0dXMJXGZCZm9ybV9maWVsZF9idWZmZXJcZlIoM1gpCitmaWVsZF90ZXJtCVxmQmZvcm1faG9va1xmUigzWCkKK2ZpZWxkX3R5cGUJXGZCZm9ybV9maWVsZF92YWxpZGF0aW9uXGZSKDNYKQorZmllbGRfdXNlcnB0cglcZkJmb3JtX2ZpZWxkX3VzZXJwdHJcZlIoM1gpCitmb3JtX2RyaXZlcglcZkJmb3JtX2RyaXZlclxmUigzWCkKK2Zvcm1fZmllbGRzCVxmQmZvcm1fZmllbGRcZlIoM1gpCitmb3JtX2luaXQJXGZCZm9ybV9ob29rXGZSKDNYKQorZm9ybV9vcHRzCVxmQmZvcm1fb3B0c1xmUigzWCkKK2Zvcm1fb3B0c19vZmYJXGZCZm9ybV9vcHRzXGZSKDNYKQorZm9ybV9vcHRzX29uCVxmQmZvcm1fb3B0c1xmUigzWCkKK2Zvcm1fcGFnZQlcZkJmb3JtX3BhZ2VcZlIoM1gpCitmb3JtX3JlcXVlc3RfYnlfbmFtZQlcZkJmb3JtX3JlcXVlc3RuYW1lXGZSKDNYKQorZm9ybV9yZXF1ZXN0X25hbWUJXGZCZm9ybV9yZXF1ZXN0bmFtZVxmUigzWCkKK2Zvcm1fc3ViCVxmQmZvcm1fd2luXGZSKDNYKQorZm9ybV90ZXJtCVxmQmZvcm1faG9va1xmUigzWCkKK2Zvcm1fdXNlcnB0cglcZkJmb3JtX3VzZXJwdHJcZlIoM1gpCitmb3JtX3dpbglcZkJmb3JtX3dpblxmUigzWCkKK2ZyZWVfZmllbGQJXGZCZm9ybV9maWVsZF9uZXdcZlIoM1gpCitmcmVlX2ZpZWxkdHlwZQlcZkJmb3JtX2ZpZWxkdHlwZVxmUigzWCkKK2ZyZWVfZm9ybQlcZkJmb3JtX25ld1xmUigzWCkKK2xpbmtfZmllbGQJXGZCZm9ybV9maWVsZF9uZXdcZlIoM1gpCitsaW5rX2ZpZWxkdHlwZQlcZkJmb3JtX2ZpZWxkdHlwZVxmUigzWCkKK21vdmVfZmllbGQJXGZCZm9ybV9maWVsZFxmUigzWCkKK25ld19maWVsZAlcZkJmb3JtX2ZpZWxkX25ld1xmUigzWCkKK25ld19maWVsZHR5cGUJXGZCZm9ybV9maWVsZHR5cGVcZlIoM1gpCituZXdfZm9ybQlcZkJmb3JtX25ld1xmUigzWCkKK25ld19wYWdlCVxmQmZvcm1fbmV3X3BhZ2VcZlIoM1gpCitwb3NfZm9ybV9jdXJzb3IJXGZCZm9ybV9jdXJzb3JcZlIoM1gpCitwb3N0X2Zvcm0JXGZCZm9ybV9wb3N0XGZSKDNYKQorc2NhbGVfZm9ybQlcZkJmb3JtX3dpblxmUigzWCkKK3NldF9jdXJyZW50X2ZpZWxkCVxmQmZvcm1fcGFnZVxmUigzWCkKK3NldF9maWVsZF9iYWNrCVxmQmZvcm1fZmllbGRfYXR0cmlidXRlc1xmUigzWCkKK3NldF9maWVsZF9idWZmZXIJXGZCZm9ybV9maWVsZF9idWZmZXJcZlIoM1gpCitzZXRfZmllbGRfZm9yZQlcZkJmb3JtX2ZpZWxkX2F0dHJpYnV0ZXNcZlIoM1gpCitzZXRfZmllbGRfaW5pdAlcZkJmb3JtX2hvb2tcZlIoM1gpCitzZXRfZmllbGRfanVzdAlcZkJmb3JtX2ZpZWxkX2p1c3RcZlIoM1gpCitzZXRfZmllbGRfb3B0cwlcZkJmb3JtX2ZpZWxkX29wdHNcZlIoM1gpCitzZXRfZmllbGRfcGFkCVxmQmZvcm1fZmllbGRfYXR0cmlidXRlc1xmUigzWCkKK3NldF9maWVsZF9zdGF0dXMJXGZCZm9ybV9maWVsZF9idWZmZXJcZlIoM1gpCitzZXRfZmllbGRfdGVybQlcZkJmb3JtX2hvb2tcZlIoM1gpCitzZXRfZmllbGRfdHlwZQlcZkJmb3JtX2ZpZWxkX3ZhbGlkYXRpb25cZlIoM1gpCitzZXRfZmllbGRfdXNlcnB0cglcZkJmb3JtX2ZpZWxkX3VzZXJwdHJcZlIoM1gpCitzZXRfZmllbGR0eXBlX2FyZwlcZkJmb3JtX2ZpZWxkdHlwZVxmUigzWCkKK3NldF9maWVsZHR5cGVfY2hvaWNlCVxmQmZvcm1fZmllbGR0eXBlXGZSKDNYKQorc2V0X2Zvcm1fZmllbGRzCVxmQmZvcm1fZmllbGRcZlIoM1gpCitzZXRfZm9ybV9pbml0CVxmQmZvcm1faG9va1xmUigzWCkKK3NldF9mb3JtX29wdHMJXGZCZm9ybV9maWVsZF9vcHRzXGZSKDNYKQorc2V0X2Zvcm1fcGFnZQlcZkJmb3JtX3BhZ2VcZlIoM1gpCitzZXRfZm9ybV9zdWIJXGZCZm9ybV93aW5cZlIoM1gpCitzZXRfZm9ybV90ZXJtCVxmQmZvcm1faG9va1xmUigzWCkKK3NldF9mb3JtX3VzZXJwdHIJXGZCZm9ybV91c2VycHRyXGZSKDNYKQorc2V0X2Zvcm1fd2luCVxmQmZvcm1fd2luXGZSKDNYKQorc2V0X21heF9maWVsZAlcZkJmb3JtX2ZpZWxkX2J1ZmZlclxmUigzWCkKK3NldF9uZXdfcGFnZQlcZkJmb3JtX25ld19wYWdlXGZSKDNYKQordW5wb3N0X2Zvcm0JXGZCZm9ybV9wb3N0XGZSKDNYKQorLlRFCisuU0ggUkVUVVJOIFZBTFVFCitSb3V0aW5lcyB0aGF0IHJldHVybiBwb2ludGVycyByZXR1cm4gXGZCTlVMTFxmUiBvbiBlcnJvciwKK2FuZCBzZXQgZXJybm8gdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3ItY29kZSByZXR1cm5lZCBieSBmdW5jdGlvbnMKK3JldHVybmluZyBhbiBpbnRlZ2VyLgorUm91dGluZXMgdGhhdCByZXR1cm4KK2FuIGludGVnZXIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQkFEX1NUQVRFCitSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBmdW5jdGlvbi4KKy5UUCA1CisuQiBFX0NPTk5FQ1RFRAorVGhlIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGEgZm9ybS4KKy5UUCA1CisuQiBFX0lOVkFMSURfRklFTEQKK0NvbnRlbnRzIG9mIGEgZmllbGQgYXJlIG5vdCB2YWxpZC4KKy5UUCA1CisuQiBFX05PVF9DT05ORUNURUQKK05vIGZpZWxkcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBmb3JtLgorLlRQIDUKKy5CIEVfTk9UX1BPU1RFRAorVGhlIGZvcm0gaGFzIG5vdCBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX05PX1JPT00KK0Zvcm0gaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgZm9ybSBpcyBhbHJlYWR5IHBvc3RlZC4KKy5UUCA1CisuQiBFX1JFUVVFU1RfREVOSUVECitUaGUgZm9ybSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX1VOS05PV05fQ09NTUFORAorVGhlIGZvcm0gZHJpdmVyIGNvZGUgc2F3IGFuIHVua25vd24gcmVxdWVzdCBjb2RlLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpIGFuZCByZWxhdGVkIHBhZ2VzIHdob3NlIG5hbWVzIGJlZ2luICJmb3JtXyIgZm9yIGRldGFpbGVkCitkZXNjcmlwdGlvbnMgb2YgdGhlIGVudHJ5IHBvaW50cy4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlcworXGZCPGN1cnNlcy5oPlxmUiBhbmQgXGZCPGV0aS5oPlxmUi4KKy5QUAorSW4geW91ciBsaWJyYXJ5IGxpc3QsIGxpYmZvcm0uYSBzaG91bGQgYmUgYmVmb3JlIGxpYm5jdXJzZXMuYTsgdGhhdCBpcywKK3lvdSB3YW50IHRvIHNheSBgLWxmb3JtIC1sbmN1cnNlcycsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZCAod2hpY2ggd291bGQKK2dpdmUgeW91IGEgbGluayBlcnJvciB1c2luZyBtb3N0IGxpbmtlcnMpLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuU0ggU0VFIEFMU08KK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fY3Vyc29yLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fY3Vyc29yLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOWYyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9jdXJzb3IuM3gKQEAgLTAsMCArMSw3NSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9jdXJzb3IuM3gsdiAxLjYgMjAwNi8xMS8wNCAxODo1MDoyNCB0b20gRXhwICQKKy5USCBmb3JtX2N1cnNvciAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fY3Vyc29yXGZSIC0gcG9zaXRpb24gYSBmb3JtIHdpbmRvdyBjdXJzb3IKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHBvc19mb3JtX2N1cnNvcihGT1JNICpmb3JtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCcG9zX2Zvcm1fY3Vyc29yXGZSIHJlc3RvcmVzIHRoZSBjdXJzb3IgdG8gdGhlIHBvc2l0aW9uIHJlcXVpcmVkCitmb3IgdGhlIGZvcm1zIGRyaXZlciB0byBjb250aW51ZSBwcm9jZXNzaW5nIHJlcXVlc3RzLiAgVGhpcyBpcyB1c2VmdWwgYWZ0ZXIKK1xmQmN1cnNlc1xmUiByb3V0aW5lcyBoYXZlIGJlZW4gY2FsbGVkIHRvIGRvIHNjcmVlbi1wYWludGluZyBpbiByZXNwb25zZSB0byBhCitmb3JtIG9wZXJhdGlvbi4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoaXMgcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfTk9UX1BPU1RFRAorVGhlIGZvcm0gaGFzIG5vdCBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9mb3JtX2RhdGEuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9kYXRhLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYTAwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9kYXRhLjN4CkBAIC0wLDAgKzEsNjMgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZGF0YS4zeCx2IDEuOCAyMDA2LzAyLzI1IDIxOjM4OjI2IHRvbSBFeHAgJAorLlRIIGZvcm1fZGF0YSAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fZGF0YVxmUiAtIHRlc3QgZm9yIG9mZi1zY3JlZW4gZGF0YSBpbiBnaXZlbiBmb3JtcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitib29sIGRhdGFfYWhlYWQoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKK2Jvb2wgZGF0YV9iZWhpbmQoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQmRhdGFfYWhlYWRcZlIgdGVzdHMgd2hldGhlciB0aGVyZSBpcyBvZmYtc2NyZWVuIGRhdGEKK2FoZWFkIGluIHRoZSBnaXZlbiBmb3JtLiAgSXQgcmV0dXJucyBUUlVFICgxKSBvciBGQUxTRSAoMCkuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJkYXRhX2JlaGluZFxmUiB0ZXN0cyB3aGV0aGVyIHRoZXJlIGlzIG9mZi1zY3JlZW4gZGF0YQorYmVoaW5kIGluIHRoZSBnaXZlbiBmb3JtLiAgSXQgcmV0dXJucyBUUlVFICgxKSBvciBGQUxTRSAoMCkuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZHJpdmVyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZHJpdmVyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMDU3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9kcml2ZXIuM3gKQEAgLTAsMCArMSwzMzkgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9kcml2ZXIuM3gsdiAxLjE2IDIwMDgvMDYvMjEgMjE6NTU6MzkgdG9tIEV4cCAkCisuVEggZm9ybV9kcml2ZXIgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2RyaXZlclxmUiAtIGNvbW1hbmQtcHJvY2Vzc2luZyBsb29wIG9mIHRoZSBmb3JtIHN5c3RlbQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgZm9ybV9kcml2ZXIoRk9STSAqZm9ybSwgaW50IGMpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK09uY2UgYSBmb3JtIGhhcyBiZWVuIHBvc3RlZCAoZGlzcGxheWVkKSwgeW91IHNob3VsZCBmdW5uZWwgaW5wdXQgZXZlbnRzIHRvIGl0Cit0aHJvdWdoIFxmQmZvcm1fZHJpdmVyXGZSLiAgVGhpcyByb3V0aW5lIGhhcyB0aHJlZSBtYWpvciBpbnB1dCBjYXNlczoKKy5UUCAzCistCitUaGUgaW5wdXQgaXMgYSBmb3JtIG5hdmlnYXRpb24gcmVxdWVzdC4KK05hdmlnYXRpb24gcmVxdWVzdCBjb2RlcyBhcmUgY29uc3RhbnRzIGRlZmluZWQgaW4gXGZCPGZvcm0uaD5cZlAsCit3aGljaCBhcmUgZGlzdGluY3QgZnJvbSB0aGUga2V5LSBhbmQgY2hhcmFjdGVyIGNvZGVzIHJldHVybmVkIGJ5IFxmQndnZXRjaFxmUC4KKy5UUCAzCistCitUaGUgaW5wdXQgaXMgYSBwcmludGFibGUgY2hhcmFjdGVyLgorUHJpbnRhYmxlIGNoYXJhY3RlcnMgKHdoaWNoIG11c3QgYmUgcG9zaXRpdmUsIGxlc3MgdGhhbiAyNTYpIGFyZQorY2hlY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHByb2dyYW0ncyBsb2NhbGUgc2V0dGluZ3MuCisuVFAgMworLQorVGhlIGlucHV0IGlzIHRoZSBLRVlfTU9VU0Ugc3BlY2lhbCBrZXkgYXNzb2NpYXRlZCB3aXRoIGFuIG1vdXNlIGV2ZW50LgorLlBQCitUaGUgZm9ybSBkcml2ZXIgcmVxdWVzdHMgYXJlIGFzIGZvbGxvd3M6CisuVFAgNQorUkVRX05FWFRfUEFHRQorTW92ZSB0byB0aGUgbmV4dCBwYWdlLgorLlRQIDUKK1JFUV9QUkVWX1BBR0UKK01vdmUgdG8gdGhlIHByZXZpb3VzIHBhZ2UuCisuVFAgNQorUkVRX0ZJUlNUX1BBR0UKK01vdmUgdG8gdGhlIGZpcnN0IHBhZ2UuCisuVFAgNQorUkVRX0xBU1RfUEFHRQorTW92ZSB0byB0aGUgbGFzdCBmaWVsZC4KKy5zcAorLlRQIDUKK1JFUV9ORVhUX0ZJRUxECitNb3ZlIHRvIHRoZSBuZXh0IGZpZWxkLgorLlRQIDUKK1JFUV9QUkVWX0ZJRUxECitNb3ZlIHRvIHRoZSBwcmV2aW91cyBmaWVsZC4KKy5UUCA1CitSRVFfRklSU1RfRklFTEQKK01vdmUgdG8gdGhlIGZpcnN0IGZpZWxkLgorLlRQIDUKK1JFUV9MQVNUX0ZJRUxECitNb3ZlIHRvIHRoZSBsYXN0IGZpZWxkLgorLlRQIDUKK1JFUV9TTkVYVF9GSUVMRAorTW92ZSB0byB0aGUgc29ydGVkIG5leHQgZmllbGQuCisuVFAgNQorUkVRX1NQUkVWX0ZJRUxECitNb3ZlIHRvIHRoZSBzb3J0ZWQgcHJldmlvdXMgZmllbGQuCisuVFAgNQorUkVRX1NGSVJTVF9GSUVMRAorTW92ZSB0byB0aGUgc29ydGVkIGZpcnN0IGZpZWxkLgorLlRQIDUKK1JFUV9TTEFTVF9GSUVMRAorTW92ZSB0byB0aGUgc29ydGVkIGxhc3QgZmllbGQuCisuVFAgNQorUkVRX0xFRlRfRklFTEQKK01vdmUgbGVmdCB0byBhIGZpZWxkLgorLlRQIDUKK1JFUV9SSUdIVF9GSUVMRAorTW92ZSByaWdodCB0byBhIGZpZWxkLgorLlRQIDUKK1JFUV9VUF9GSUVMRAorTW92ZSB1cCB0byBhIGZpZWxkLgorLlRQIDUKK1JFUV9ET1dOX0ZJRUxECitNb3ZlIGRvd24gdG8gYSBmaWVsZC4KKy5zcAorLlRQIDUKK1JFUV9ORVhUX0NIQVIKK01vdmUgdG8gdGhlIG5leHQgY2hhci4KKy5UUCA1CitSRVFfUFJFVl9DSEFSCitNb3ZlIHRvIHRoZSBwcmV2aW91cyBjaGFyLgorLlRQIDUKK1JFUV9ORVhUX0xJTkUKK01vdmUgdG8gdGhlIG5leHQgbGluZS4KKy5UUCA1CitSRVFfUFJFVl9MSU5FCitNb3ZlIHRvIHRoZSBwcmV2aW91cyBsaW5lLgorLlRQIDUKK1JFUV9ORVhUX1dPUkQKK01vdmUgdG8gdGhlIG5leHQgd29yZC4KKy5UUCA1CitSRVFfUFJFVl9XT1JECitNb3ZlIHRvIHRoZSBwcmV2aW91cyB3b3JkLgorLlRQIDUKK1JFUV9CRUdfRklFTEQKK01vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmllbGQuCisuVFAgNQorUkVRX0VORF9GSUVMRAorTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBmaWVsZC4KKy5UUCA1CitSRVFfQkVHX0xJTkUKK01vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4KKy5UUCA1CitSRVFfRU5EX0xJTkUKK01vdmUgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKy5UUCA1CitSRVFfTEVGVF9DSEFSCitNb3ZlIGxlZnQgaW4gdGhlIGZpZWxkLgorLlRQIDUKK1JFUV9SSUdIVF9DSEFSCitNb3ZlIHJpZ2h0IGluIHRoZSBmaWVsZC4KKy5UUCA1CitSRVFfVVBfQ0hBUgorTW92ZSB1cCBpbiB0aGUgZmllbGQuCisuVFAgNQorUkVRX0RPV05fQ0hBUgorTW92ZSBkb3duIGluIHRoZSBmaWVsZC4KKy5zcAorLlRQIDUKK1JFUV9ORVdfTElORQorSW5zZXJ0IG9yIG92ZXJsYXkgYSBuZXcgbGluZS4KKy5UUCA1CitSRVFfSU5TX0NIQVIKK0luc2VydCBhIGJsYW5rIGF0IHRoZSBjdXJzb3IuCisuVFAgNQorUkVRX0lOU19MSU5FCitJbnNlcnQgYSBibGFuayBsaW5lIGF0IHRoZSBjdXJzb3IuCisuVFAgNQorUkVRX0RFTF9DSEFSCitEZWxldGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJzb3IuCisuVFAgNQorUkVRX0RFTF9QUkVWCitEZWxldGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY3Vyc29yLgorLlRQIDUKK1JFUV9ERUxfTElORQorRGVsZXRlIGxpbmUgYXQgdGhlIGN1cnNvci4KKy5UUCA1CitSRVFfREVMX1dPUkQKK0RlbGV0ZSBibGFuay1kZWxpbWl0ZWQgd29yZCBhdCB0aGUgY3Vyc29yLgorLlRQIDUKK1JFUV9DTFJfRU9MCitDbGVhciB0byBlbmQgb2YgbGluZSBmcm9tIGN1cnNvci4KKy5UUCA1CitSRVFfQ0xSX0VPRgorQ2xlYXIgdG8gZW5kIG9mIGZpZWxkIGZyb20gY3Vyc29yLgorLlRQIDUKK1JFUV9DTFJfRklFTEQKK0NsZWFyIHRoZSBlbnRpcmUgZmllbGQuCisuVFAgNQorUkVRX09WTF9NT0RFCitFbnRlciBvdmVybGF5IG1vZGUuCisuVFAgNQorUkVRX0lOU19NT0RFCitFbnRlciBpbnNlcnQgbW9kZS4KKy5zcAorLlRQIDUKK1JFUV9TQ1JfRkxJTkUKK1Njcm9sbCB0aGUgZmllbGQgZm9yd2FyZCBhIGxpbmUuCisuVFAgNQorUkVRX1NDUl9CTElORQorU2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBhIGxpbmUuCisuVFAgNQorUkVRX1NDUl9GUEFHRQorU2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGEgcGFnZS4KKy5UUCA1CitSRVFfU0NSX0JQQUdFCitTY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGEgcGFnZS4KKy5UUCA1CitSRVFfU0NSX0ZIUEFHRQorU2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGhhbGYgYSBwYWdlLgorLlRQIDUKK1JFUV9TQ1JfQkhQQUdFCitTY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGhhbGYgYSBwYWdlLgorLnNwCisuVFAgNQorUkVRX1NDUl9GQ0hBUgorU2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGEgY2hhcmFjdGVyLgorLlRQIDUKK1JFUV9TQ1JfQkNIQVIKK1Njcm9sbCB0aGUgZmllbGQgYmFja3dhcmQgYSBjaGFyYWN0ZXIuCisuVFAgNQorUkVRX1NDUl9IRkxJTkUKK0hvcml6b250YWwgc2Nyb2xsIHRoZSBmaWVsZCBmb3J3YXJkIGEgbGluZS4KKy5UUCA1CitSRVFfU0NSX0hCTElORQorSG9yaXpvbnRhbCBzY3JvbGwgdGhlIGZpZWxkIGJhY2t3YXJkIGEgbGluZS4KKy5UUCA1CitSRVFfU0NSX0hGSEFMRgorSG9yaXpvbnRhbCBzY3JvbGwgdGhlIGZpZWxkIGZvcndhcmQgaGFsZiBhIGxpbmUuCisuVFAgNQorUkVRX1NDUl9IQkhBTEYKK0hvcml6b250YWwgc2Nyb2xsIHRoZSBmaWVsZCBiYWNrd2FyZCBoYWxmIGEgbGluZS4KKy5zcAorLlRQCitSRVFfVkFMSURBVElPTgorVmFsaWRhdGUgZmllbGQuCisuVFAKK1JFUV9ORVhUX0NIT0lDRQorRGlzcGxheSBuZXh0IGZpZWxkIGNob2ljZS4KKy5UUAorUkVRX1BSRVZfQ0hPSUNFCitEaXNwbGF5IHByZXZpb3VzIGZpZWxkIGNob2ljZS4KKy5QUAorSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIsIHRoZSBkcml2ZXIgcGxhY2VzIGl0CitpbiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBmaWVsZC4gIElmIGl0IGlzIG9uZSBvZiB0aGUgZm9ybXMKK3JlcXVlc3RzIGxpc3RlZCBhYm92ZSwgdGhhdCByZXF1ZXN0IGlzIGV4ZWN1dGVkLgorLlNTIE1PVVNFIEhBTkRMSU5HCisuUFAKK0lmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIEtFWV9NT1VTRSBzcGVjaWFsIGtleSwgdGhlIGFzc29jaWF0ZWQKK21vdXNlIGV2ZW50IGlzIHRyYW5zbGF0ZWQgaW50byBvbmUgb2YgdGhlIGFib3ZlIHByZS1kZWZpbmVkIHJlcXVlc3RzLgorQ3VycmVudGx5IG9ubHkgY2xpY2tzIGluIHRoZSB1c2VyIHdpbmRvdyAoZS5nLiBpbnNpZGUgdGhlIGZvcm0gZGlzcGxheQorYXJlYSBvciB0aGUgZGVjb3JhdGlvbiB3aW5kb3cpIGFyZSBoYW5kbGVkLgorLlBQCitJZiB5b3UgY2xpY2sgYWJvdmUgdGhlIGRpc3BsYXkgcmVnaW9uIG9mIHRoZSBmb3JtOgorLlJTCisuVFAKK2EgUkVRX1BSRVZfRklFTEQgaXMgZ2VuZXJhdGVkIGZvciBhIHNpbmdsZSBjbGljaywKKy5UUAorYSBSRVFfUFJFVl9QQUdFIGlzIGdlbmVyYXRlZCBmb3IgYSBkb3VibGUtY2xpY2sgYW5kCisuVFAKK2EgUkVRX0ZJUlNUX0ZJRUxEIGlzIGdlbmVyYXRlZCBmb3IgYSB0cmlwbGUtY2xpY2suCisuUkUKKy5QUAorSWYgeW91IGNsaWNrIGJlbG93IHRoZSBkaXNwbGF5IHJlZ2lvbiBvZiB0aGUgZm9ybToKKy5SUworLlRQCithIFJFUV9ORVhUX0ZJRUxEIGlzIGdlbmVyYXRlZCBmb3IgYSBzaW5nbGUgY2xpY2ssCisuVFAKK2EgUkVRX05FWFRfUEFHRSBpcyBnZW5lcmF0ZWQgZm9yIGEgZG91YmxlLWNsaWNrIGFuZAorLlRQCithIFJFUV9MQVNUX0ZJRUxEIGlzIGdlbmVyYXRlZCBmb3IgYSB0cmlwbGUtY2xpY2suCisuUkUKKy5QUAorSWYgeW91IGNsaWNrIGF0IGFuIGZpZWxkIGluc2lkZSB0aGUgZGlzcGxheSBhcmVhIG9mIHRoZSBmb3JtOgorLlJTCisuVFAgMworLQordGhlIGZvcm0gY3Vyc29yIGlzIHBvc2l0aW9uZWQgdG8gdGhhdCBmaWVsZC4KKy5UUCAzCistCitJZiB5b3UgZG91YmxlLWNsaWNrIGEgZmllbGQsCit0aGUgZm9ybSBjdXJzb3IgaXMgcG9zaXRpb25lZCB0byB0aGF0IGZpZWxkCithbmQgXGZCRV9VTktOT1dOX0NPTU1BTkRcZlIgaXMgcmV0dXJuZWQuCitUaGlzIHJldHVybiB2YWx1ZSBtYWtlcyBzZW5zZSwKK2JlY2F1c2UgYSBkb3VibGUgY2xpY2sgdXN1YWxseSBtZWFucyB0aGF0IGFuIGZpZWxkLXNwZWNpZmljIGFjdGlvbiBzaG91bGQKK2JlIHJldHVybmVkLgorSXQgaXMgZXhhY3RseSB0aGUgcHVycG9zZSBvZiB0aGlzIHJldHVybiB2YWx1ZSB0byBzaWduYWwgdGhhdCBhbgorYXBwbGljYXRpb24gc3BlY2lmaWMgY29tbWFuZCBzaG91bGQgYmUgZXhlY3V0ZWQuCisuVFAgMworLQorSWYgYSB0cmFuc2xhdGlvbgoraW50byBhIHJlcXVlc3Qgd2FzIGRvbmUsIFxmQmZvcm1fZHJpdmVyXGZSIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGlzIHJlcXVlc3QuCisuUkUKKy5QUAorSWYgeW91IGNsaWNrZWQgb3V0c2lkZSB0aGUgdXNlciB3aW5kb3cgb3IgdGhlIG1vdXNlIGV2ZW50IGNvdWxkIG5vdCBiZSB0cmFuc2xhdGVkCitpbnRvIGEgZm9ybSByZXF1ZXN0IGFuIFxmQkVfUkVRVUVTVF9ERU5JRURcZlIgaXMgcmV0dXJuZWQuCisuU1MgQVBQTElDQVRJT04tREVGSU5FRCBDT01NQU5EUworLlBQCitJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5laXRoZXIgcHJpbnRhYmxlIG5vciBvbmUgb2YgdGhlIGFib3ZlCitwcmUtZGVmaW5lZCBmb3JtIHJlcXVlc3RzLCB0aGUgZHJpdmVyIGFzc3VtZXMgaXQgaXMgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMKK2NvbW1hbmQgYW5kIHJldHVybnMgXGZCRV9VTktOT1dOX0NPTU1BTkRcZlIuICBBcHBsaWNhdGlvbi1kZWZpbmVkIGNvbW1hbmRzCitzaG91bGQgYmUgZGVmaW5lZCByZWxhdGl2ZSB0byBcZkJNQVhfQ09NTUFORFxmUiwgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlc2UKK3ByZS1kZWZpbmVkIHJlcXVlc3RzLgorLlNIIFJFVFVSTiBWQUxVRQorXGZCZm9ybV9kcml2ZXJcZlIgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9OT1RfUE9TVEVECitUaGUgZm9ybSBoYXMgbm90IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfSU5WQUxJRF9GSUVMRAorQ29udGVudHMgb2YgZmllbGQgaXMgaW52YWxpZC4KKy5UUCA1CisuQiBFX1JFUVVFU1RfREVOSUVECitUaGUgZm9ybSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX1VOS05PV05fQ09NTUFORAorVGhlIGZvcm0gZHJpdmVyIGNvZGUgc2F3IGFuIHVua25vd24gcmVxdWVzdCBjb2RlLgorLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCZm9ybVxmUigzWCksCitcZkJ3Z2V0Y2hcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGVzCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGQuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhMjZjNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkLjN4CkBAIC0wLDAgKzEsOTggQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGQuM3gsdiAxLjggMjAwNi8xMS8wNCAxODowMTozOCB0b20gRXhwICQKKy5USCBmb3JtX2ZpZWxkIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZFxmUiAtIG1ha2UgYW5kIGJyZWFrIGNvbm5lY3Rpb25zIGJldHdlZW4gZmllbGRzIGFuZCBmb3JtcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgc2V0X2Zvcm1fZmllbGRzKEZPUk0gKmZvcm0sIEZJRUxEICoqZmllbGRzKTsKKy5icgorRklFTEQgKipmb3JtX2ZpZWxkcyhjb25zdCBGT1JNICpmb3JtKTsKKy5icgoraW50IGZpZWxkX2NvdW50KGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCitpbnQgbW92ZV9maWVsZChGSUVMRCAqZmllbGQsIGludCBmcm93LCBpbnQgZmNvbCk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9mb3JtX2ZpZWxkc1xmUiBjaGFuZ2VzIHRoZSBmaWVsZCBwb2ludGVyIGFycmF5IG9mCit0aGUgZ2l2ZW4gXGZJZm9ybVxmUi4gIFRoZSBhcnJheSBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYSBcZkJOVUxMXGZSLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZm9ybV9maWVsZHNcZlIgcmV0dXJucyB0aGUgZmllbGQgYXJyYXkgb2YgdGhlIGdpdmVuIGZvcm0uCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9jb3VudFxmUiByZXR1cm5zIHRoZSBjb3VudCBvZiBmaWVsZHMgaW4gXGZJZm9ybVxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQm1vdmVfZmllbGRcZlIgbW92ZXMgdGhlIGdpdmVuIGZpZWxkICh3aGljaCBtdXN0IGJlIGRpc2Nvbm5lY3RlZCkKK3RvIGEgc3BlY2lmaWVkIGxvY2F0aW9uIG9uIHRoZSBzY3JlZW4uCisuU0ggUkVUVVJOIFZBTFVFUworVGhlIGZ1bmN0aW9uIFxmQmZvcm1fZmllbGRzXGZSIHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgYmUgXGZCTlVMTFxmUikuCitJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9jb3VudFxmUiByZXR1cm5zIFxmQkVSUlxmUiBpZiB0aGUgXGZJZm9ybVxmUCBwYXJhbWV0ZXIKK2lzIFxmQk5VTExcZlAuCisuUFAKK1RoZSBmdW5jdGlvbnMgXGZCc2V0X2Zvcm1fZmllbGRzXGZSIGFuZCBcZkJtb3ZlX2ZpZWxkXGZSIHJldHVybiBvbmUgb2YKK3RoZSBmb2xsb3dpbmcgY29kZXMgb24gZXJyb3I6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9DT05ORUNURUQKK1RoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBmb3JtIGlzIGFscmVhZHkgcG9zdGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5QUAorVGhlIFNWcjQgZm9ybXMgbGlicmFyeSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyB0aGUgXGZCZmllbGRfY291bnRcZlIgZXJyb3IgdmFsdWUKK2FzIC0xICh3aGljaCBpcyB0aGUgdmFsdWUgb2YgXGZCRVJSXGZSKS4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeCBiL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkYzBmMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkX2F0dHJpYnV0ZXMuM3gKQEAgLTAsMCArMSw5MiBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9maWVsZF9hdHRyaWJ1dGVzLjN4LHYgMS4xMCAyMDA2LzExLzA0IDE4OjUxOjI2IHRvbSBFeHAgJAorLlRIIGZvcm1fZmllbGRfYXR0cmlidXRlcyAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fZmllbGRfYXR0cmlidXRlc1xmUiAtIGNvbG9yIGFuZCBhdHRyaWJ1dGUgY29udHJvbCBmb3IgZm9ybSBmaWVsZHMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9maWVsZF9mb3JlKEZJRUxEICpmaWVsZCwgY2h0eXBlIGF0dHIpOworLmJyCitjaHR5cGUgZmllbGRfZm9yZShjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCitpbnQgc2V0X2ZpZWxkX2JhY2soRklFTEQgKmZpZWxkLCBjaHR5cGUgYXR0cik7CisuYnIKK2NodHlwZSBmaWVsZF9iYWNrKGNvbnN0IEZJRUxEICpmaWVsZCk7CisuYnIKK2ludCBzZXRfZmllbGRfcGFkKEZJRUxEICpmaWVsZCwgaW50IHBhZCk7CisuYnIKK2ludCBmaWVsZF9wYWQoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX2ZvcmVcZlIgc2V0cyB0aGUgZm9yZWdyb3VuZCBhdHRyaWJ1dGUgb2YKK1xmSWZpZWxkXGZSLiBUaGlzIGlzIHRoZSBoaWdobGlnaHQgdXNlZCB0byBkaXNwbGF5IHRoZSBmaWVsZCBjb250ZW50cy4gIFRoZQorZnVuY3Rpb24gXGZCZmllbGRfZm9yZVxmUiByZXR1cm5zIHRoZSBmb3JlZ3JvdW5kIGF0dHJpYnV0ZS4gIFRoZSBkZWZhdWx0IGlzCitcZkJBX1NUQU5ET1VUXGZSLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX2JhY2tcZlIgc2V0cyB0aGUgYmFja2dyb3VuZCBhdHRyaWJ1dGUgb2YKK1xmSWZvcm1cZlIuIFRoaXMgaXMgdGhlIGhpZ2hsaWdodCB1c2VkIHRvIGRpc3BsYXkgdGhlIGV4dGVudCBmaWVsZHMgaW4gdGhlCitmb3JtLiAgVGhlIGZ1bmN0aW9uIFxmQmZpZWxkX2JhY2tcZlIgcmV0dXJucyB0aGUgYmFja2dyb3VuZCBhdHRyaWJ1dGUuICBUaGUKK2RlZmF1bHQgaXMgXGZCQV9OT1JNQUxcZlIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfcGFkXGZSIHNldHMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIGZpbGwgdGhlIGZpZWxkLgorVGhlIGZ1bmN0aW9uIFxmQmZpZWxkX3BhZFxmUiByZXR1cm5zIHRoZSBnaXZlbiBmb3JtJ3MgcGFkIGNoYXJhY3Rlci4gIFRoZQorZGVmYXVsdCBpcyBhIGJsYW5rLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfYnVmZmVyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjA3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF9idWZmZXIuM3gKQEAgLTAsMCArMSwxNDIgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGRfYnVmZmVyLjN4LHYgMS4xNSAyMDA4LzEwLzE4IDE4OjM1OjE3IHRvbSBFeHAgJAorLlRIIGZvcm1fZmllbGRfYnVmZmVyIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZF9idWZmZXJcZlIgLSBmaWVsZCBidWZmZXIgY29udHJvbAorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgc2V0X2ZpZWxkX2J1ZmZlcihGSUVMRCAqZmllbGQsIGludCBidWYsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKy5icgorY2hhciAqZmllbGRfYnVmZmVyKGNvbnN0IEZJRUxEICpmaWVsZCwgaW50IGJ1ZmZlcik7CisuYnIKK2ludCBzZXRfZmllbGRfc3RhdHVzKEZJRUxEICpmaWVsZCwgYm9vbCBzdGF0dXMpOworLmJyCitib29sIGZpZWxkX3N0YXR1cyhjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCitpbnQgc2V0X21heF9maWVsZChGSUVMRCAqZmllbGQsIGludCBtYXgpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfYnVmZmVyXGZSIHNldHMgdGhlIG51bWJlcmVkIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gZmllbGQKK3RvIGNvbnRhaW4gYSBnaXZlbiBzdHJpbmc6CisuUlMgMworLlRQIDMKKy0KK0J1ZmZlciAwIGlzIHRoZSBkaXNwbGF5ZWQgdmFsdWUgb2YgdGhlIGZpZWxkLgorLlRQIDMKKy0KK090aGVyIG51bWJlcmVkIGJ1ZmZlcnMgbWF5IGJlIGFsbG9jYXRlZCBieSBhcHBsaWNhdGlvbnMgdGhyb3VnaCB0aGUgXGZCbmJ1ZlxmUgorYXJndW1lbnQgb2YgKHNlZSBcZkJmb3JtX2ZpZWxkX25ld1xmUigzWCkpCitidXQgYXJlIG5vdCBtYW5pcHVsYXRlZCBieSB0aGUgZm9ybXMgbGlicmFyeS4KKy5SRQorLlBQCitUaGUgZnVuY3Rpb24gXGZCZmllbGRfYnVmZmVyXGZSIHJldHVybnMgYSBwb2ludGVyIHRvCit0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIG51bWJlcmVkIGJ1ZmZlcjoKKy5SUyAzCisuVFAgMworLQorVGhlIGJ1ZmZlciBjb250ZW50cyBhbHdheXMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgsCithbmQgYXJlIHBhZGRlZCB3aXRoIHRyYWlsaW5nIHNwYWNlcworYXMgbmVlZGVkIHRvIGVuc3VyZSB0aGlzIGxlbmd0aCBpcyB0aGUgc2FtZS4KKy5UUCAzCistCitUaGUgYnVmZmVyIG1heSBjb250YWluIGxlYWRpbmcgc3BhY2VzLCBkZXBlbmRpbmcgb24gaG93IGl0IHdhcyBzZXQuCisuVFAgMworLQorVGhlIGJ1ZmZlciBjb250ZW50cyBhcmUgc2V0IHdpdGggXGZCc2V0X2ZpZWxkX2J1ZmZlclxmUCwKK29yIGFzIGEgc2lkZSBlZmZlY3Qgb2YgYW55IGVkaXRpbmcgb3BlcmF0aW9ucyBvbiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZC4KKy5UUCAzCistCitFZGl0aW5nIG9wZXJhdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBcZkl3aW5kb3dcZlAgd2hpY2ggZGlzcGxheXMgdGhlIGZpZWxkLAorcmF0aGVyIHRoYW4gYSBcZklzdHJpbmdcZlAuCitUaGUgd2luZG93IGNvbnRhaW5zIG9ubHkgcHJpbnRhYmxlIGNoYXJhY3RlcnMsIGFuZCBpcyBmaWxsZWQgd2l0aCBibGFua3MuCitJZiB5b3Ugd2FudCB0aGUgcmF3IGRhdGEsIHlvdSBtdXN0IHdyaXRlIHlvdXIKK293biByb3V0aW5lIHRoYXQgY29waWVzIHRoZSB2YWx1ZSBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmVtb3ZlcyB0aGUgbGVhZGluZworYW5kIHRyYWlsaW5nIHNwYWNlcy4KKy5UUCAzCistCitCZWNhdXNlIGVkaXRpbmcgb3BlcmF0aW9ucyBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlciB0bworY29ycmVzcG9uZCB0byB0aGUgd2luZG93LCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHVzaW5nIGJ1ZmZlcnMKK2ZvciBsb25nLXRlcm0gc3RvcmFnZSBvZiBmb3JtIGRhdGEuCisuUkUKKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF9zdGF0dXNcZlIgc2V0cyB0aGUgYXNzb2NpYXRlZCBzdGF0dXMgZmxhZyBvZgorXGZJZmllbGRcZlI7IFxmQmZpZWxkX3N0YXR1c1xmUiBnZXRzIHRoZSBjdXJyZW50IHZhbHVlLiAgVGhlIHN0YXR1cyBmbGFnCitpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlIHdoZW5ldmVyIHRoZSBmaWVsZCBjaGFuZ2VzLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X21heF9maWVsZFxmUiBzZXRzIHRoZSBtYXhpbXVtIHNpemUgZm9yIGEgZHluYW1pYyBmaWVsZC4KK0FuIGFyZ3VtZW50IG9mIDAgdHVybnMgb2ZmIGFueSBtYXhpbXVtIHNpemUgdGhyZXNob2xkIGZvciB0aGF0IGZpZWxkLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIFxmQmZpZWxkX2J1ZmZlclxmUiBmdW5jdGlvbiByZXR1cm5zIE5VTEwgb24gZXJyb3IuCitJdCBzZXRzIGVycm5vIGFjY29yZGluZyB0byB0aGVpciBzdWNjZXNzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlBQCitUaGUgXGZCZmllbGRfc3RhdHVzXGZSIGZ1bmN0aW9uIHJldHVybnMgXGZCVFJVRVxmUiBvciBcZkJGQUxTRVxmUi4KKy5QUAorVGhlIHJlbWFpbmluZyByb3V0aW5lcyByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvciBkZXRhaWxlZAorZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorLlBQCitXaGVuIGNvbmZpZ3VyZWQgZm9yIHdpZGUtY2hhcmFjdGVycywgXGZCZmllbGRfYnVmZmVyXGZQIHJldHVybnMgYSBwb2ludGVyCit0byB0ZW1wb3Jhcnkgc3RvcmFnZSAoYWxsb2NhdGVkIGFuZCBmcmVlZCBieSB0aGUgbGlicmFyeSkuCitUaGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBhdHRlbXB0IHRvIG1vZGlmeSB0aGUgZGF0YS4KK0l0IHdpbGwgYmUgZnJlZWQgb24gdGhlIG5leHQgY2FsbCB0byBcZkJmaWVsZF9idWZmZXJcZlAgdG8gcmV0dXJuIHRoZQorc2FtZSBidWZmZXIuCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkX2luZm8uM3ggYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF9pbmZvLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTMxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF9pbmZvLjN4CkBAIC0wLDAgKzEsODUgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGZvcm1fZmllbGRfaW5mby4zeCx2IDEuMTAgMjAwNi8xMS8wNCAxNzoxNDozMSB0b20gRXhwICQKKy5USCBmb3JtX2ZpZWxkX2luZm8gM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2ZpZWxkX2luZm9cZlIgLSByZXRyaWV2ZSBmaWVsZCBjaGFyYWN0ZXJpc3RpY3MKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IGZpZWxkX2luZm8oY29uc3QgRklFTEQgKmZpZWxkLCBpbnQgKnJvd3MsIGludCAqY29scywKKyAgICAgICAgICAgICAgaW50ICpmcm93LCBpbnQgKmZjb2wsIGludCAqbnJvdywgaW50ICpuYnVmKTsKKy5icgoraW50IGR5bmFtaWNfZmllbGRfaW5mbyhjb25zdCBGSUVMRCAqZmllbGQsIGludCAqcm93cywgaW50ICpjb2xzLCBpbnQgKm1heCk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQmZpZWxkX2luZm9cZlIgcmV0dXJucyB0aGUgc2l6ZXMgYW5kIG90aGVyIGF0dHJpYnV0ZXMgcGFzc2VkIGluCit0byB0aGUgZmllbGQgYXQgaXRzIGNyZWF0aW9uIHRpbWUuICBUaGUgYXR0cmlidXRlcyBhcmU6IGhlaWdodCwgd2lkdGgsIHJvdyBvZgordXBwZXItbGVmdCBjb3JuZXIsIGNvbHVtbiBvZiB1cHBlci1sZWZ0IGNvcm5lciwgbnVtYmVyIG9mZi1zY3JlZW4gcm93cywgYW5kCitudW1iZXIgb2Ygd29ya2luZyBidWZmZXJzLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZHluYW1pY19maWVsZF9pbmZvXGZSIHJldHVybnMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBmaWVsZCwgYW5kCitpdHMgbWF4aW11bSBwb3NzaWJsZSBzaXplLiAgSWYgdGhlIGZpZWxkIGhhcyBubyBzaXplIGxpbWl0LCB0aGUgbG9jYXRpb24KK2FkZHJlc3NlZCBieSB0aGUgdGhpcmQgYXJndW1lbnQgd2lsbCBiZSBzZXQgdG8gMC4KK0EgZmllbGQgY2FuIGJlIG1hZGUgZHluYW1pYworYnkgdHVybmluZyBvZmYgdGhlIFxmQk9fU1RBVElDXGZSIG9wdGlvbiB3aXRoIFxmQmZpZWxkX29wdHNfb2ZmXGZSLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gImZvcm1fIiBmb3IgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5QUAorQSBudWxsICh6ZXJvIHBvaW50ZXIpIGlzIGFjY2VwdGVkIGZvciBhbnkgb2YgdGhlIHJldHVybiB2YWx1ZXMsCit0byBpZ25vcmUgdGhhdCB2YWx1ZS4KK05vdCBhbGwgaW1wbGVtZW50YXRpb25zIGFsbG93IHRoaXMsIGUuZy4sIFNvbGFyaXMgMi43IGRvZXMgbm90LgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF9qdXN0LjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfanVzdC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ2Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfanVzdC4zeApAQCAtMCwwICsxLDc4IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX2ZpZWxkX2p1c3QuM3gsdiAxLjkgMjAwNi8xMS8wNCAxNzoxMjowMCB0b20gRXhwICQKKy5USCBmb3JtX2ZpZWxkX2p1c3QgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2ZpZWxkX2p1c3RcZlIgLSByZXRyaWV2ZSBmaWVsZCBjaGFyYWN0ZXJpc3RpY3MKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9maWVsZF9qdXN0KEZJRUxEICpmaWVsZCwgaW50IGp1c3RpZmljYXRpb24pOworLmJyCitpbnQgZmllbGRfanVzdChjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfanVzdFxmUiBzZXRzIHRoZSBqdXN0aWZpY2F0aW9uIGF0dHJpYnV0ZSBvZgorYSBmaWVsZDsgXGZCZmllbGRfanVzdFxmUiByZXR1cm5zIGEgZmllbGQncyBqdXN0aWZpY2F0aW9uIGF0dHJpYnV0ZS4KK1RoZSBhdHRyaWJ1dGUgbWF5IGJlIG9uZSBvZiBOT19KVVNUSUZJQ0FUSU9OLCBKVVNUSUZZX1JJR0hULAorSlVTVElGWV9MRUZULCBvciBKVVNUSUZZX0NFTlRFUi4KKy4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9qdXN0XGZSIHJldHVybnMgb25lIG9mOiBOT19KVVNUSUZJQ0FUSU9OLAorSlVTVElGWV9SSUdIVCwgSlVTVElGWV9MRUZULCBvciBKVVNUSUZZX0NFTlRFUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF9qdXN0XGZSIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvciBkZXRhaWxlZAorZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF9uZXcuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF9uZXcuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5NWRlMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkX25ldy4zeApAQCAtMCwwICsxLDEwNiBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9maWVsZF9uZXcuM3gsdiAxLjE2IDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggZm9ybV9maWVsZF9uZXcgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2ZpZWxkX25ld1xmUiAtIGNyZWF0ZSBhbmQgZGVzdHJveSBmb3JtIGZpZWxkcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitGSUVMRCAqbmV3X2ZpZWxkKGludCBoZWlnaHQsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgaW50IHRvcHJvdywgaW50IGxlZnRjb2wsCisgICAgICAgICAgICAgICAgIGludCBvZmZzY3JlZW4sIGludCBuYnVmZmVycyk7CisuYnIKK0ZJRUxEICpkdXBfZmllbGQoRklFTEQgKmZpZWxkLCBpbnQgdG9wcm93LCBpbnQgbGVmdGNvbCk7CisuYnIKK0ZJRUxEICpsaW5rX2ZpZWxkKEZJRUxEICpmaWVsZCwgaW50IHRvcHJvdywgaW50IGxlZnRjb2wpOworLmJyCitpbnQgZnJlZV9maWVsZChGSUVMRCAqZmllbGQpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJuZXdfZmllbGRcZlIgYWxsb2NhdGVzIGEgbmV3IGZpZWxkIGFuZCBpbml0aWFsaXplcyBpdCBmcm9tIHRoZQorcGFyYW1ldGVycyBnaXZlbjogaGVpZ2h0LCB3aWR0aCwgcm93IG9mIHVwcGVyLWxlZnQgY29ybmVyLCBjb2x1bW4gb2YgdXBwZXItbGVmdAorY29ybmVyLCBudW1iZXIgb2ZmLXNjcmVlbiByb3dzLCBhbmQgbnVtYmVyIG9mIGFkZGl0aW9uYWwgd29ya2luZyBidWZmZXJzLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZHVwX2ZpZWxkXGZSIGR1cGxpY2F0ZXMgYSBmaWVsZCBhdCBhIG5ldyBsb2NhdGlvbi4gIE1vc3QKK2F0dHJpYnV0ZXMgKGluY2x1ZGluZyBjdXJyZW50IGNvbnRlbnRzLCBzaXplLCB2YWxpZGF0aW9uIHR5cGUsIGJ1ZmZlciBjb3VudCwKK2dyb3d0aCB0aHJlc2hvbGQsIGp1c3RpZmljYXRpb24sIGZvcmVncm91bmQsIGJhY2tncm91bmQsIHBhZCBjaGFyYWN0ZXIsCitvcHRpb25zLCBhbmQgdXNlciBwb2ludGVyKSBhcmUgY29waWVkLiAgRmllbGQgc3RhdHVzIGFuZCB0aGUgZmllbGQgcGFnZSBiaXQgYXJlCitub3QgY29waWVkLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCbGlua19maWVsZFxmUiBhY3RzIGxpa2UgXGZCZHVwX2ZpZWxkXGZSLCBidXQgdGhlIG5ldyBmaWVsZAorc2hhcmVzIGJ1ZmZlcnMgd2l0aCBpdHMgcGFyZW50LiAgQXR0cmlidXRlIGRhdGEgaXMgc2VwYXJhdGUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX2ZpZWxkXGZSIGRlLWFsbG9jYXRlcyBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBhIGZpZWxkLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uLCBcZkJuZXdfZmllbGRcZlIsIFxmQmR1cF9maWVsZFxmUiwgXGZCbGlua19maWVsZFxmUiByZXR1cm4KK1xmQk5VTExcZlIgb24gZXJyb3IuCitUaGV5IHNldCBlcnJubyBhY2NvcmRpbmcgdG8gdGhlaXIgc3VjY2VzczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZyZWVfZmllbGRcZlIgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0NPTk5FQ1RFRAorZmllbGQgaXMgY29ubmVjdGVkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuUFAKK0l0IG1heSBiZSB1bndpc2UgdG8gY291bnQgb24gdGhlIHNldCBvZiBhdHRyaWJ1dGVzIGNvcGllZCBieQorXGZCZHVwX2ZpZWxkXGZSIGJlaW5nIHBvcnRhYmxlOyB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeSBkb2N1bWVudHMgYXJlCitub3QgdmVyeSBleHBsaWNpdCBhYm91dCB3aGF0IGdldHMgY29waWVkIGFuZCB3aGF0IGRvZXMgbm90LgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF9vcHRzLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfb3B0cy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTA1Mjc5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfb3B0cy4zeApAQCAtMCwwICsxLDEyNCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9maWVsZF9vcHRzLjN4LHYgMS4xMyAyMDA3LzAyLzI0IDE3OjM0OjI3IHRvbSBFeHAgJAorLlRIIGZvcm1fZmllbGRfb3B0cyAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fZmllbGRfb3B0c1xmUiAtIHNldCBhbmQgZ2V0IGZpZWxkIG9wdGlvbnMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9maWVsZF9vcHRzKEZJRUxEICpmaWVsZCwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IGZpZWxkX29wdHNfb24oRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpOworLmJyCitpbnQgZmllbGRfb3B0c19vZmYoRklFTEQgKmZpZWxkLCBGaWVsZF9PcHRpb25zIG9wdHMpOworLmJyCitGaWVsZF9PcHRpb25zIGZpZWxkX29wdHMoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX29wdHNcZlIgc2V0cyBhbGwgdGhlIGdpdmVuIGZpZWxkJ3Mgb3B0aW9uIGJpdHMgKGZpZWxkCitvcHRpb24gYml0cyBtYXkgYmUgbG9naWNhbGx5LU9SJ2VkIHRvZ2V0aGVyKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZpZWxkX29wdHNfb25cZlIgdHVybnMgb24gdGhlIGdpdmVuIG9wdGlvbiBiaXRzLCBhbmQgbGVhdmVzCitvdGhlcnMgYWxvbmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9vcHRzX29mZlxmUiB0dXJucyBvZmYgdGhlIGdpdmVuIG9wdGlvbiBiaXRzLCBhbmQgbGVhdmVzCitvdGhlcnMgYWxvbmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmaWVsZF9vcHRzXGZSIHJldHVybnMgdGhlIGZpZWxkJ3MgY3VycmVudCBvcHRpb24gYml0cy4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBkZWZpbmVkIChhbGwgYXJlIG9uIGJ5IGRlZmF1bHQpOgorLlRQIDUKK09fVklTSUJMRQorVGhlIGZpZWxkIGlzIGRpc3BsYXllZC4gIElmIHRoaXMgb3B0aW9uIGlzIG9mZiwgZGlzcGxheSBvZiB0aGUgZmllbGQgaXMKK3N1cHByZXNzZWQuCisuVFAgNQorT19BQ1RJVkUKK1RoZSBmaWVsZCBpcyB2aXNpdGVkIGR1cmluZyBwcm9jZXNzaW5nLiAgSWYgdGhpcyBvcHRpb24gaXMgb2ZmLCB0aGUgZmllbGQgd2lsbAorbm90IGJlIHJlYWNoYWJsZSBieSBuYXZpZ2F0aW9uIGtleXMuIFBsZWFzZSBub3RpY2UgdGhhdCBhbiBpbnZpc2libGUgZmllbGQKK2FwcGVhcnMgdG8gYmUgaW5hY3RpdmUgYWxzby4KKy5UUCA1CitPX1BVQkxJQworVGhlIGZpZWxkIGNvbnRlbnRzIGFyZSBkaXNwbGF5ZWQgYXMgZGF0YSBpcyBlbnRlcmVkLgorLlRQIDUKK09fRURJVAorVGhlIGZpZWxkIGNhbiBiZSBlZGl0ZWQuCisuVFAgNQorT19XUkFQCitXb3JkcyB0aGF0IGRvIG5vdCBmaXQgb24gYSBsaW5lIGFyZSB3cmFwcGVkIHRvIHRoZSBuZXh0IGxpbmUuICBXb3JkcyBhcmUKK2JsYW5rLXNlcGFyYXRlZC4KKy5UUCA1CitPX0JMQU5LCitUaGUgZmllbGQgaXMgY2xlYXJlZCB3aGVuZXZlciBhIGNoYXJhY3RlciBpcyBlbnRlcmVkIGF0IHRoZSBmaXJzdCBwb3NpdGlvbi4KKy5UUCA1CitPX0FVVE9TS0lQCitTa2lwIHRvIHRoZSBuZXh0IGZpZWxkIHdoZW4gdGhpcyBvbmUgZmlsbHMuCisuVFAgNQorT19OVUxMT0sKK0FsbG93IGEgYmxhbmsgZmllbGQuCisuVFAgNQorT19TVEFUSUMKK0ZpZWxkIGJ1ZmZlcnMgYXJlIGZpeGVkIHRvIGZpZWxkJ3Mgb3JpZ2luYWwgc2l6ZS4KK1R1cm4gdGhpcyBvcHRpb24gb2ZmIHRvIGNyZWF0ZSBhIGR5bmFtaWMgZmllbGQuCisuVFAgNQorT19QQVNTT0sKK1ZhbGlkYXRlIGZpZWxkIG9ubHkgaWYgbW9kaWZpZWQgYnkgdXNlci4KKy5TSCBSRVRVUk4gVkFMVUUKK0V4Y2VwdCBmb3IgXGZCZmllbGRfb3B0c1xmUiwgZWFjaCByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9DVVJSRU5UCitUaGUgZmllbGQgaXMgdGhlIGN1cnJlbnQgZmllbGQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuVFAgNQorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfdXNlcnB0ci4zeCBiL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiOWVkNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkX3VzZXJwdHIuM3gKQEAgLTAsMCArMSw2OSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9maWVsZF91c2VycHRyLjN4LHYgMS44IDIwMDYvMTEvMDQgMTg6MDQ6MzcgdG9tIEV4cCAkCisuVEggZm9ybV9maWVsZF91c2VycHRyIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZF91c2VycHRyXGZSIC0gYXNzb2NpYXRlIGFwcGxpY2F0aW9uIGRhdGEgd2l0aCBhIGZvcm0gZmllbGQKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9maWVsZF91c2VycHRyKEZJRUxEICpmaWVsZCwgdm9pZCp1c2VycHRyKTsKKy5icgordm9pZCAqZmllbGRfdXNlcnB0cihjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK0V2ZXJ5IGZvcm0gZmllbGQgaGFzIGEgZmllbGQgdGhhdCBjYW4gYmUgdXNlZCB0byBob2xkIGFwcGxpY2F0aW9uLXNwZWNpZmljIGRhdGEKKyh0aGF0IGlzLCB0aGUgZm9ybS1kcml2ZXIgY29kZSBsZWF2ZXMgaXQgYWxvbmUpLiAgVGhlc2UgZnVuY3Rpb25zIGdldCBhbmQgc2V0Cit0aGF0IGZpZWxkLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIFxmQmZpZWxkX3VzZXJwdHJcZlIgcmV0dXJucyBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZSBcZkJOVUxMXGZSKS4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF91c2VycHRyXGZSIHJldHVybnMgXGZCRV9PS1xmUCAoc3VjY2VzcykuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5QUAorVGhlIHVzZXIgcG9pbnRlciBpcyBhIHZvaWQgcG9pbnRlci4KK1dlIGNob3NlIG5vdCB0byBsZWF2ZSBpdCBhcyBhIGNoYXIgcG9pbnRlciBmb3IgU1ZyNCBjb21wYXRpYmlsaXR5LgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZF92YWxpZGF0aW9uLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGE1MmVmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeApAQCAtMCwwICsxLDE0NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX2ZpZWxkX3ZhbGlkYXRpb24uM3gsdiAxLjE2IDIwMDYvMTIvMjQgMTY6MDg6MDggdG9tIEV4cCAkCisuVEggZm9ybV9maWVsZF92YWxpZGF0aW9uIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9maWVsZF92YWxpZGF0aW9uXGZSIC0gZGF0YSB0eXBlIHZhbGlkYXRpb24gZm9yIGZpZWxkcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgc2V0X2ZpZWxkX3R5cGUoRklFTEQgKmZpZWxkLCBGSUVMRFRZUEUgKnR5cGUsIC4uLik7CisuYnIKK0ZJRUxEVFlQRSAqZmllbGRfdHlwZShjb25zdCBGSUVMRCAqZmllbGQpOworLmJyCit2b2lkICpmaWVsZF9hcmcoY29uc3QgRklFTEQgKmZpZWxkKTsKKy5zcAorRklFTERUWVBFICpUWVBFX0FMTlVNOworLmJyCitGSUVMRFRZUEUgKlRZUEVfQUxQSEE7CisuYnIKK0ZJRUxEVFlQRSAqVFlQRV9FTlVNOworLmJyCitGSUVMRFRZUEUgKlRZUEVfSU5URUdFUjsKKy5icgorRklFTERUWVBFICpUWVBFX05VTUVSSUM7CisuYnIKK0ZJRUxEVFlQRSAqVFlQRV9SRUdFWFA7CisuYnIKK0ZJRUxEVFlQRSAqVFlQRV9JUFY0OworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfdHlwZVxmUiBkZWNsYXJlcyBhIGRhdGEgdHlwZSBmb3IgYSBnaXZlbiBmb3JtIGZpZWxkLgorVGhpcyBpcyB0aGUgdHlwZSBjaGVja2VkIGJ5IHZhbGlkYXRpb24gZnVuY3Rpb25zLgorVGhlIHByZWRlZmluZWQgdHlwZXMgYXJlIGFzIGZvbGxvd3M6CisuVFAgNQorVFlQRV9BTE5VTQorQWxwaGFudW1lcmljIGRhdGEuICBSZXF1aXJlcyBhIHRoaXJkIFxmQmludFxmUiBhcmd1bWVudCwgYSBtaW5pbXVtIGZpZWxkIHdpZHRoLgorLlRQIDUKK1RZUEVfQUxQSEEKK0NoYXJhY3RlciBkYXRhLiAgUmVxdWlyZXMgYSB0aGlyZCBcZkJpbnRcZlIgYXJndW1lbnQsIGEgbWluaW11bSBmaWVsZCB3aWR0aC4KKy5UUCA1CitUWVBFX0VOVU0KK0FjY2VwdCBvbmUgb2YgYSBzcGVjaWZpZWQgc2V0IG9mIHN0cmluZ3MuICBSZXF1aXJlcyBhIHRoaXJkIFxmQihjaGFyICoqKVxmUgorYXJndW1lbnQgcG9pbnRpbmcgdG8gYSBzdHJpbmcgbGlzdDsgYSBmb3VydGggXGZCaW50XGZSIGZsYWcgYXJndW1lbnQgdG8gZW5hYmxlCitjYXNlLXNlbnNpdGl2aXR5OyBhbmQgYSBmaWZ0aCBcZkJpbnRcZlIgZmxhZyBhcmd1bWVudCBzcGVjaWZ5aW5nIHdoZXRoZXIgYSBwYXJ0aWFsCittYXRjaCBtdXN0IGJlIGEgdW5pcXVlIG9uZSAoaWYgdGhpcyBmbGFnIGlzIG9mZiwgYSBwcmVmaXggbWF0Y2hlcyB0aGUgZmlyc3QKK29mIGFueSBzZXQgb2YgbW9yZSB0aGFuIG9uZSBsaXN0IGVsZW1lbnRzIHdpdGggdGhhdCBwcmVmaXgpLiBQbGVhc2Ugbm90aWNlCit0aGF0IHRoZSBzdHJpbmcgbGlzdCBpcyBub3QgY29waWVkLCBvbmx5IGEgcmVmZXJlbmNlIHRvIGl0IGlzIHN0b3JlZCBpbiB0aGUKK2ZpZWxkLiBTbyB5b3Ugc2hvdWxkIGF2b2lkIHVzaW5nIGEgbGlzdCB0aGF0IGxpdmVzIGluIGF1dG9tYXRpYyB2YXJpYWJsZXMKK29uIHRoZSBzdGFjay4KKy5UUCA1CitUWVBFX0lOVEVHRVIKK0ludGVnZXIgZGF0YSwgcGFyc2FibGUgdG8gYW4gaW50ZWdlciBieSBcZkJhdG9pKDMpXGZSLiAgUmVxdWlyZXMgYSB0aGlyZAorXGZCaW50XGZSIGFyZ3VtZW50IGNvbnRyb2xsaW5nIHRoZSBwcmVjaXNpb24sIGEgZm91cnRoIFxmQmxvbmdcZlIgYXJndW1lbnQKK2NvbnN0cmFpbmluZyBtaW5pbXVtIHZhbHVlLCBhbmQgYSBmaWZ0aCBcZkJsb25nXGZSIGNvbnN0cmFpbmluZyBtYXhpbXVtIHZhbHVlLgorSWYgdGhlIG1heGltdW0gdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5pbXVtIHZhbHVlLCB0aGUgcmFuZ2UgaXMKK3NpbXBseSBpZ25vcmVkLiBPbiByZXR1cm4gdGhlIGZpZWxkIGJ1ZmZlciBpcyBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZQorXGZCcHJpbnRmXGZSIGZvcm1hdCBzcGVjaWZpY2F0aW9uICIuKmxkIiwgd2hlcmUgdGhlICcqJyBpcyByZXBsYWNlZCBieSB0aGUKK3ByZWNpc2lvbiBhcmd1bWVudC4KK0ZvciBkZXRhaWxzIG9mIHRoZSBwcmVjaXNpb24gaGFuZGxpbmcgc2VlIFxmQnByaW50ZidzXGZSIG1hbi1wYWdlLgorLlRQIDUKK1RZUEVfTlVNRVJJQworTnVtZXJpYyBkYXRhIChtYXkgaGF2ZSBhIGRlY2ltYWwtcG9pbnQgcGFydCkuIFJlcXVpcmVzIGEgdGhpcmQKK1xmQmludFxmUiBhcmd1bWVudCBjb250cm9sbGluZyB0aGUgcHJlY2lzaW9uLCBhIGZvdXJ0aCBcZkJkb3VibGVcZlIKK2FyZ3VtZW50IGNvbnN0cmFpbmluZyBtaW5pbXVtIHZhbHVlLCBhbmQgYSBmaWZ0aCBcZkJkb3VibGVcZlIgY29uc3RyYWluaW5nCittYXhpbXVtIHZhbHVlLiBJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyBsb2NhbGVzLCB0aGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIKK3RvIGJlIHVzZWQgbXVzdCBiZSB0aGUgb25lIHNwZWNpZmllZCBieSB5b3VyIGxvY2FsZS4KK0lmIHRoZSBtYXhpbXVtIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWluaW11bSB2YWx1ZSwgdGhlIHJhbmdlIGlzCitzaW1wbHkgaWdub3JlZC4gT24gcmV0dXJuIHRoZSBmaWVsZCBidWZmZXIgaXMgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUKK1xmQnByaW50ZlxmUiBmb3JtYXQgc3BlY2lmaWNhdGlvbiAiLipmIiwgd2hlcmUgdGhlICcqJyBpcyByZXBsYWNlZCBieSB0aGUKK3ByZWNpc2lvbiBhcmd1bWVudC4KK0ZvciBkZXRhaWxzIG9mIHRoZSBwcmVjaXNpb24gaGFuZGxpbmcgc2VlIFxmQnByaW50ZidzXGZSIG1hbi1wYWdlLgorLlRQIDUKK1RZUEVfUkVHRVhQCitSZWd1bGFyIGV4cHJlc3Npb24gZGF0YS4gIFJlcXVpcmVzIGEgcmVndWxhciBleHByZXNzaW9uIFxmQihjaGFyICopXGZSIHRoaXJkIGFyZ3VtZW50OwordGhlIGRhdGEgaXMgdmFsaWQgaWYgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIGl0LiAgUmVndWxhciBleHByZXNzaW9ucworYXJlIGluIHRoZSBmb3JtYXQgb2YgXGZCcmVnY29tcFxmUiBhbmQgXGZCcmVnZXhlY1xmUi4gUGxlYXNlIG5vdGljZQordGhhdCB0aGUgcmVndWxhciBleHByZXNzaW9uIG11c3QgbWF0Y2ggdGhlIHdob2xlIGZpZWxkLiBJZiB5b3UgaGF2ZSBmb3IKK2V4YW1wbGUgYW4gZWlnaHQgY2hhcmFjdGVyIHdpZGUgZmllbGQsIGEgcmVndWxhciBleHByZXNzaW9uICJeWzAtOV0qJCIgYWx3YXlzCittZWFucyB0aGF0IHlvdSBoYXZlIHRvIGZpbGwgYWxsIGVpZ2h0IHBvc2l0aW9ucyB3aXRoIGRpZ2l0cy4gSWYgeW91IHdhbnQgdG8KK2FsbG93IGZld2VyIGRpZ2l0cywgeW91IG1heSB1c2UgZm9yIGV4YW1wbGUgIl5bMC05XSogKiQiIHdoaWNoIGlzIGdvb2QgZm9yCit0cmFpbGluZyBzcGFjZXMgKHVwIHRvIGFuIGVtcHR5IGZpZWxkKSwgb3IgIl4gKlswLTldKiAqJCIgd2hpY2ggaXMgZ29vZCBmb3IKK2xlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBhcm91bmQgdGhlIGRpZ2l0cy4KKy5UUCA1CitUWVBFX0lQVjQKK0FuIEludGVybmV0IFByb3RvY29sIFZlcnNpb24gNCBhZGRyZXNzLiBUaGlzIHJlcXVpcmVzIG5vIGFkZGl0aW9uYWwgYXJndW1lbnQuIEl0CitpcyBjaGVja2VkIHdoZXRoZXIgb3Igbm90IHRoZSBidWZmZXIgaGFzIHRoZSBmb3JtIGEuYi5jLmQsIHdoZXJlIGEsYixjIGFuZCBkIGFyZQorbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDI1NS4gVHJhaWxpbmcgYmxhbmtzIGluIHRoZSBidWZmZXIgYXJlIGlnbm9yZWQuIFRoZSBhZGRyZXNzCitpdHNlbGYgaXMgbm90IHZhbGlkYXRlZC4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIG5jdXJzZXMgZXh0ZW5zaW9uLiBUaGlzCitmaWVsZCB0eXBlIG1heSBub3QgYmUgYXZhaWxhYmxlIGluIG90aGVyIGN1cnNlcyBpbXBsZW1lbnRhdGlvbnMuCisuUFAKK0l0IGlzIHBvc3NpYmxlIHRvIHNldCB1cCBuZXcgcHJvZ3JhbW1lci1kZWZpbmVkIGZpZWxkIHR5cGVzLiAgU2VlIHRoZQorXGZCZm9ybV9maWVsZHR5cGVcZlIoM1gpIG1hbnVhbCBwYWdlLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9ucyBcZkJmaWVsZF90eXBlXGZSIGFuZCBcZkJmaWVsZF9hcmdcZlIgcmV0dXJuIFxmQk5VTExcZlIgb24KK2Vycm9yLiBUaGUgZnVuY3Rpb24gXGZCc2V0X2ZpZWxkX3R5cGVcZlIgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZHR5cGUuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9maWVsZHR5cGUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0MmZhZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9mb3JtX2ZpZWxkdHlwZS4zeApAQCAtMCwwICsxLDE0OCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9maWVsZHR5cGUuM3gsdiAxLjE0IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCAkCisuVEggZm9ybV9maWVsZHR5cGUgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX2ZpZWxkdHlwZVxmUiAtIGRlZmluZSB2YWxpZGF0aW9uLWZpZWxkIHR5cGVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK0ZJRUxEVFlQRSAqbmV3X2ZpZWxkdHlwZSgKKyAgICBib29sICgqIGNvbnN0IGZpZWxkX2NoZWNrKShGSUVMRCAqLCBjb25zdCB2b2lkICopLAorICAgIGJvb2wgKCogY29uc3QgY2hhcl9jaGVjaykoaW50LCBjb25zdCB2b2lkICopKTsKKy5icgoraW50IGZyZWVfZmllbGR0eXBlKEZJRUxEVFlQRSAqZmllbGR0eXBlKTsKKy5icgoraW50IHNldF9maWVsZHR5cGVfYXJnKAorICAgIEZJRUxEVFlQRSAqZmllbGR0eXBlLAorICAgIHZvaWQgKigqIGNvbnN0IG1ha2VfYXJnKSh2YV9saXN0ICopLAorICAgIHZvaWQgKigqIGNvbnN0IGNvcHlfYXJnKShjb25zdCB2b2lkICopLAorICAgIHZvaWQgICgqIGNvbnN0IGZyZWVfYXJnKSh2b2lkICopKTsKKy5icgoraW50IHNldF9maWVsZHR5cGVfY2hvaWNlKAorICAgIEZJRUxEVFlQRSAqZmllbGR0eXBlLAorICAgIGJvb2wgKCogY29uc3QgbmV4dF9jaG9pY2UpKEZJRUxEICosIGNvbnN0IHZvaWQgKiksCisgICAgYm9vbCAoKiBjb25zdCBwcmV2X2Nob2ljZSkoRklFTEQgKiwgY29uc3Qgdm9pZCAqKSk7CisuYnIKK0ZJRUxEVFlQRSAqbGlua19maWVsZHR5cGUoRklFTERUWVBFICp0eXBlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERUWVBFICp0eXBlMik7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQm5ld19maWVsZHR5cGVcZlIgY3JlYXRlcyBhIG5ldyBmaWVsZCB0eXBlIHVzYWJsZSBmb3IgZGF0YQordmFsaWRhdGlvbi4gIFlvdSBzdXBwbHkgaXQgd2l0aCBcZklmaWVsZF9jaGVja1xmUiwgYSBwcmVkaWNhdGUgdG8gY2hlY2sgdGhlCit2YWxpZGl0eSBvZiBhbiBlbnRlcmVkIGRhdGEgc3RyaW5nIHdoZW5ldmVyIHRoZSB1c2VyIGF0dGVtcHRzIHRvIGxlYXZlIGEgZmllbGQuCitUaGUgKEZJRUxEICopIGFyZ3VtZW50IGlzIHBhc3NlZCBpbiBzbyB0aGUgdmFsaWRhdGlvbiBwcmVkaWNhdGUgY2FuIHNlZSB0aGUKK2ZpZWxkJ3MgYnVmZmVyLCBzaXplcyBhbmQgb3RoZXIgYXR0cmlidXRlczsgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbgorYXJndW1lbnQtYmxvY2sgc3RydWN0dXJlLCBhYm91dCB3aGljaCBtb3JlIGJlbG93LgorLlBQCitZb3UgYWxzbyBzdXBwbHkgXGZCbmV3X2ZpZWxkdHlwZVxmUiB3aXRoIFxmSWNoYXJfY2hlY2tcZlIsCithIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IGNoYXJhY3RlcnMgYXMgdGhleSBhcmUgZW50ZXJlZDsgaXQgd2lsbCBiZSBwYXNzZWQKK3RoZSBjaGFyYWN0ZXIgdG8gYmUgY2hlY2tlZCBhbmQgYSBwb2ludGVyIHRvIGFuIGFyZ3VtZW50LWJsb2NrIHN0cnVjdHVyZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZyZWVfZmllbGR0eXBlXGZSIGZyZWVzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIGEgZ2l2ZW4KK3ZhbGlkYXRpb24gdHlwZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZHR5cGVfYXJnXGZSIGFzc29jaWF0ZXMgdGhyZWUgc3RvcmFnZS1tYW5hZ2VtZW50IGZ1bmN0aW9ucword2l0aCBhIGZpZWxkIHR5cGUuCitUaGUgXGZJbWFrZV9hcmdcZlIgZnVuY3Rpb24gaXMgYXV0b21hdGljYWxseSBhcHBsaWVkIHRvIHRoZQorbGlzdCBvZiBhcmd1bWVudHMgeW91IGdpdmUgXGZCc2V0X2ZpZWxkX3R5cGVcZlIgd2hlbiBhdHRhY2hpbmcgdmFsaWRhdGlvbgordG8gYSBmaWVsZDsgaXRzIGpvYiBpcyB0byBidW5kbGUgdGhlc2UgaW50byBhbiBhbGxvY2F0ZWQgYXJndW1lbnQtYmxvY2sKK29iamVjdCB3aGljaCBjYW4gbGF0ZXIgYmUgcGFzc2VkIHRvIHZhbGlkYXRpb24gcHJlZGljYXRlZC4KK1RoZSBvdGhlciB0d28gaG9vayBhcmd1bWVudHMgc2hvdWxkIGNvcHkgYW5kIGZyZWUgYXJndW1lbnQtYmxvY2sgc3RydWN0dXJlcy4KK1RoZXkgd2lsbCBiZSB1c2VkIGJ5IHRoZSBmb3Jtcy1kcml2ZXIgY29kZS4KK1lvdSBtdXN0IHN1cHBseSB0aGUgXGZJbWFrZV9hcmdcZlIgZnVuY3Rpb24sCit0aGUgb3RoZXIgdHdvIGFyZSBvcHRpb25hbCwgeW91IG1heSBzdXBwbHkgTlVMTCBmb3IgdGhlbS4KK0luIHRoaXMgY2FzZSBpdCBpcyBhc3N1bWVkCit0aGF0IFxmSW1ha2VfYXJnXGZSIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBidXQgc2ltcGx5IGxvYWRzIHRoZQorYXJndW1lbnQgaW50byBhIHNpbmdsZSBzY2FsYXIgdmFsdWUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJsaW5rX2ZpZWxkdHlwZVxmUiBjcmVhdGVzCithIG5ldyBmaWVsZCB0eXBlIGZyb20gdGhlIHR3byBnaXZlbiB0eXBlcy4KK1RoZXkgYXJlIGNvbm5lY3RlZCBieSBhbiBsb2dpY2FsICdPUicuCisuUFAKK1RoZSBmb3JtIGRyaXZlciByZXF1ZXN0cyBcZkJSRVFfTkVYVF9DSE9JQ0VcZlIgYW5kIFxmQlJFUV9QUkVWX0NIT0lDRVxmUiBhc3N1bWUKK3RoYXQgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBhIGZpZWxkIGZvcm0gYW4gb3JkZXJlZCBzZXQsIGFuZCBwcm92aWRlIHRoZSBmb3JtcwordXNlciB3aXRoIGEgd2F5IHRvIG1vdmUgdGhyb3VnaCB0aGUgc2V0LgorVGhlIFxmQnNldF9maWVsZHR5cGVfY2hvaWNlXGZSCitmdW5jdGlvbiBhbGxvd3MgZm9ybXMgcHJvZ3JhbW1lcnMgdG8gZGVmaW5lIHN1Y2Nlc3NvciBhbmQgcHJlZGVjZXNzb3IgZnVuY3Rpb25zCitmb3IgdGhlIGZpZWxkIHR5cGUuCitUaGVzZSBmdW5jdGlvbnMgdGFrZSB0aGUgZmllbGQgcG9pbnRlciBhbmQgYW4KK2FyZ3VtZW50LWJsb2NrIHN0cnVjdHVyZSBhcyBhcmd1bWVudHMuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgcG9pbnRlci12YWx1ZWQgcm91dGluZXMgcmV0dXJuIE5VTEwgb24gZXJyb3IuCitUaGV5IHNldCBlcnJubyBhY2NvcmRpbmcgdG8gdGhlaXIgc3VjY2VzczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKy5QUAorVGhlIGludGVnZXItdmFsdWVkIHJvdXRpbmVzIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb2RlcyBvbgorZXJyb3I6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9DT05ORUNURUQKK1RoZSBmaWVsZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGZvcm0uCisuVFAgNQorLkIgRV9DVVJSRU5UCitUaGUgZmllbGQgaXMgdGhlIGN1cnJlbnQgZmllbGQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5QUAorQWxsIG9mIHRoZSBcZkIoY2hhciAqKVxmUiBhcmd1bWVudHMgb2YgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBhY3R1YWxseSBiZQorXGZCKHZvaWQgKilcZlIuICBUaGUgdHlwZSBoYXMgYmVlbiBsZWZ0IHVuY29ycmVjdGVkIGZvciBzdHJpY3QgY29tcGF0aWJpbGl0eQord2l0aCBTeXN0ZW0gVi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9ob29rLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1faG9vay4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQ3YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1faG9vay4zeApAQCAtMCwwICsxLDEwMCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9ob29rLjN4LHYgMS45IDIwMDcvMDIvMjQgMTc6MzQ6MTggdG9tIEV4cCAkCisuVEggZm9ybV9ob29rIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9ob29rXGZSIC0gc2V0IGhvb2tzIGZvciBhdXRvbWF0aWMgaW52b2NhdGlvbiBieSBhcHBsaWNhdGlvbnMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9maWVsZF9pbml0KEZPUk0gKmZvcm0sIEZvcm1fSG9vayBmdW5jKTsKKy5icgorRm9ybV9Ib29rIGZpZWxkX2luaXQoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKK2ludCBzZXRfZmllbGRfdGVybShGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisuYnIKK0Zvcm1fSG9vayBmaWVsZF90ZXJtKGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCitpbnQgc2V0X2Zvcm1faW5pdChGT1JNICpmb3JtLCBGb3JtX0hvb2sgZnVuYyk7CisuYnIKK0Zvcm1fSG9vayBmb3JtX2luaXQoY29uc3QgRk9STSAqZm9ybSk7CisuYnIKK2ludCBzZXRfZm9ybV90ZXJtKEZPUk0gKmZvcm0sIEZvcm1fSG9vayBmdW5jKTsKKy5icgorRm9ybV9Ib29rIGZvcm1fdGVybShjb25zdCBGT1JNICpmb3JtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgbWFrZSBpdCBwb3NzaWJsZSB0byBzZXQgaG9vayBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGF0IHZhcmlvdXMKK3BvaW50cyBpbiB0aGUgYXV0b21hdGljIHByb2Nlc3Npbmcgb2YgaW5wdXQgZXZlbnQgY29kZXMgYnkgXGZCZm9ybV9kcml2ZXJcZlIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZmllbGRfaW5pdFxmUiBzZXRzIGEgaG9vayB0byBiZSBjYWxsZWQgYXQgZm9ybS1wb3N0IHRpbWUKK2FuZCBlYWNoIHRpbWUgdGhlIHNlbGVjdGVkIGZpZWxkIGNoYW5nZXMgKGFmdGVyIHRoZSBjaGFuZ2UpLiAgXGZCZmllbGRfaW5pdFxmUgorcmV0dXJucyB0aGUgY3VycmVudCBmaWVsZCBpbml0IGhvb2ssIGlmIGFueSAoXGZCTlVMTFxmUiBpZiB0aGVyZSBpcyBubyBzdWNoCitob29rKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9maWVsZF90ZXJtXGZSIHNldHMgYSBob29rIHRvIGJlIGNhbGxlZCBhdCBmb3JtLXVucG9zdCB0aW1lCithbmQgZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCBmaWVsZCBjaGFuZ2VzIChiZWZvcmUgdGhlIGNoYW5nZSkuICBcZkJmaWVsZF90ZXJtXGZSCityZXR1cm5zIHRoZSBjdXJyZW50IGZpZWxkIHRlcm0gaG9vaywgaWYgYW55IChcZkJOVUxMXGZSIGlmIHRoZXJlIGlzIG5vIHN1Y2gKK2hvb2spLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2Zvcm1faW5pdFxmUiBzZXRzIGEgaG9vayB0byBiZSBjYWxsZWQgYXQgZm9ybS1wb3N0IHRpbWUgYW5kCitqdXN0IGFmdGVyIGEgcGFnZSBjaGFuZ2Ugb25jZSBpdCBpcyBwb3N0ZWQuICBcZkJmb3JtX2luaXRcZlIgcmV0dXJucyB0aGUKK2N1cnJlbnQgZm9ybSBpbml0IGhvb2ssIGlmIGFueSAoXGZCTlVMTFxmUiBpZiB0aGVyZSBpcyBubyBzdWNoIGhvb2spLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2Zvcm1fdGVybVxmUiBzZXRzIGEgaG9vayB0byBiZSBjYWxsZWQgYXQgZm9ybS11bnBvc3QgdGltZQorYW5kIGp1c3QgYmVmb3JlIGEgcGFnZSBjaGFuZ2Ugb25jZSBpdCBpcyBwb3N0ZWQuICBcZkJmb3JtX2luaXRcZlIKK3JldHVybnMgdGhlIGN1cnJlbnQgZm9ybSB0ZXJtIGhvb2ssIGlmIGFueSAoXGZCTlVMTFxmUiBpZiB0aGVyZSBpcyBubyBzdWNoCitob29rKS4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLiAgT3RoZXIgcm91dGluZXMKK3JldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9uZXcuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9uZXcuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjNGY1MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9mb3JtX25ldy4zeApAQCAtMCwwICsxLDg5IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX25ldy4zeCx2IDEuNyAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIGZvcm1fbmV3IDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV9uZXdcZlIgLSBjcmVhdGUgYW5kIGRlc3Ryb3kgZm9ybXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgorRk9STSAqbmV3X2Zvcm0oRklFTEQgKipmaWVsZHMpOworLmJyCitpbnQgZnJlZV9mb3JtKEZPUk0gKmZvcm0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJuZXdfZm9ybVxmUiBjcmVhdGVzIGEgbmV3IGZvcm0gY29ubmVjdGVkIHRvIGEgc3BlY2lmaWVkIGZpZWxkCitwb2ludGVyIGFycmF5ICh3aGljaCBtdXN0IGJlIFxmQk5VTExcZlItdGVybWluYXRlZCkuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX2Zvcm1cZlIgZGlzY29ubmVjdHMgXGZJZm9ybVxmUiBmcm9tIGl0cyBmaWVsZCBhcnJheQorYW5kIGZyZWVzIHRoZSBzdG9yYWdlIGFsbG9jYXRlZCBmb3IgdGhlIGZvcm0uCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gXGZCbmV3X2Zvcm1cZlIgcmV0dXJucyBcZkJOVUxMXGZSIG9uIGVycm9yLgorSXQgc2V0cyBlcnJubyBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uJ3Mgc3VjY2VzczoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0NPTk5FQ1RFRAorVGhlIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGEgZm9ybS4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZyZWVfZm9ybVxmUiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHBvc3RlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9uZXdfcGFnZS4zeCBiL25jdXJzZXMtNS43L21hbi9mb3JtX25ld19wYWdlLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2Y1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9uZXdfcGFnZS4zeApAQCAtMCwwICsxLDc3IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX25ld19wYWdlLjN4LHYgMS44IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCAkCisuVEggZm9ybV9uZXdfcGFnZSAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fbmV3X3BhZ2VcZlIgLSBmb3JtIHBhZ2luYXRpb24gZnVuY3Rpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfbmV3X3BhZ2UoRklFTEQgKmZpZWxkLCBib29sIG5ld19wYWdlX2ZsYWcpOworLmJyCitib29sIG5ld19wYWdlKGNvbnN0IEZJRUxEICpmaWVsZCk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9uZXdfcGFnZVxmUiBzZXRzIG9yIHJlc2V0cyBhIGZsYWcgbWFya2luZyB0aGUgZ2l2ZW4gZmllbGQKK2FzIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgcGFnZSBvbiBpdHMgZm9ybS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQm5ld19wYWdlXGZSIGlzIGEgcHJlZGljYXRlIHdoaWNoIHRlc3RzIGlmIGEgZ2l2ZW4gZmllbGQgbWFya3MKK2EgcGFnZSBiZWdpbm5pbmcgb24gaXRzIGZvcm0uCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gXGZCbmV3X3BhZ2VcZlIgcmV0dXJucyBcZkJUUlVFXGZSIG9yIFxmQkZBTFNFXGZSLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X25ld19wYWdlXGZSIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX0NPTk5FQ1RFRAorVGhlIGdpdmVuIGZpZWxkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGEgZm9ybS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiZm9ybV8iIGZvciBkZXRhaWxlZAorZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9vcHRzLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fb3B0cy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2FhYWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fb3B0cy4zeApAQCAtMCwwICsxLDkwIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX29wdHMuM3gsdiAxLjkgMjAwNy8wMi8yNCAxNzozNDozNiB0b20gRXhwICQKKy5USCBmb3JtX29wdHMgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX29wdHNcZlIgLSBzZXQgYW5kIGdldCBmb3JtIG9wdGlvbnMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9mb3JtX29wdHMoRk9STSAqZm9ybSwgRmllbGRfT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IGZvcm1fb3B0c19vbihGT1JNICpmb3JtLCBGaWVsZF9PcHRpb25zIG9wdHMpOworLmJyCitpbnQgZm9ybV9vcHRzX29mZihGT1JNICpmb3JtLCBGaWVsZF9PcHRpb25zIG9wdHMpOworLmJyCitGaWVsZF9PcHRpb25zIGZvcm1fb3B0cyhjb25zdCBGT1JNICpmb3JtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2Zvcm1fb3B0c1xmUiBzZXRzIGFsbCB0aGUgZ2l2ZW4gZm9ybSdzIG9wdGlvbiBiaXRzIChmb3JtCitvcHRpb24gYml0cyBtYXkgYmUgbG9naWNhbGx5LU9SJ2VkIHRvZ2V0aGVyKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fb3B0c19vblxmUiB0dXJucyBvbiB0aGUgZ2l2ZW4gb3B0aW9uIGJpdHMsIGFuZCBsZWF2ZXMKK290aGVycyBhbG9uZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fb3B0c19vZmZcZlIgdHVybnMgb2ZmIHRoZSBnaXZlbiBvcHRpb24gYml0cywgYW5kIGxlYXZlcworb3RoZXJzIGFsb25lLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZm9ybV9vcHRzXGZSIHJldHVybnMgdGhlIGZvcm0ncyBjdXJyZW50IG9wdGlvbiBiaXRzLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGRlZmluZWQgKGFsbCBhcmUgb24gYnkgZGVmYXVsdCk6CisuVFAgNQorT19OTF9PVkVSTE9BRAorT3ZlcmxvYWQgdGhlIFxmQlJFUV9ORVdfTElORVxmUiBmb3JtcyBkcml2ZXIgcmVxdWVzdCBzbyB0aGF0IGNhbGxpbmcgaXQgYXQgdGhlCitlbmQgb2YgYSBmaWVsZCBnb2VzIHRvIHRoZSBuZXh0IGZpZWxkLgorLlRQIDUKK09fQlNfT1ZFUkxPQUQKK092ZXJsb2FkIHRoZSBcZkJSRVFfREVMX1BSRVZcZlIgZm9ybXMgZHJpdmVyIHJlcXVlc3Qgc28gdGhhdCBjYWxsaW5nIGl0IGF0IHRoZQorYmVnaW5uaW5nIG9mIGEgZmllbGQgZ29lcyB0byB0aGUgcHJldmlvdXMgZmllbGQuCisuU0ggUkVUVVJOIFZBTFVFCitFeGNlcHQgZm9yIFxmQmZvcm1fb3B0c1xmUiwgZWFjaCByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fcGFnZS4zeCBiL25jdXJzZXMtNS43L21hbi9mb3JtX3BhZ2UuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlZDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9mb3JtX3BhZ2UuM3gKQEAgLTAsMCArMSw5NiBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9wYWdlLjN4LHYgMS4xMCAyMDA2LzExLzA0IDE4OjUyOjMyIHRvbSBFeHAgJAorLlRIIGZvcm1fcGFnZSAzWCAiIgorLlNIIE5BTUUKK1xmQmZvcm1fcGFnZVxmUiAtIHNldCBhbmQgZ2V0IGZvcm0gcGFnZSBudW1iZXIKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgoraW50IHNldF9jdXJyZW50X2ZpZWxkKEZPUk0gKmZvcm0sIEZJRUxEICpmaWVsZCk7CisuYnIKK0ZJRUxEICpjdXJyZW50X2ZpZWxkKGNvbnN0IEZPUk0gKik7CisuYnIKK2ludCBzZXRfZm9ybV9wYWdlKEZPUk0gKmZvcm0sIGludCBuKTsKKy5icgoraW50IGZvcm1fcGFnZShjb25zdCBGT1JNICpmb3JtKTsKKy5icgoraW50IGZpZWxkX2luZGV4KGNvbnN0IEZJRUxEICpmaWVsZCk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9jdXJyZW50IGZpZWxkXGZSIHNldHMgdGhlIGN1cnJlbnQgZmllbGQgb2YgdGhlIGdpdmVuCitmb3JtOyBcZkJjdXJyZW50X2ZpZWxkXGZSIHJldHVybnMgdGhlIGN1cnJlbnQgZmllbGQgb2YgdGhlIGdpdmVuIGZvcm0uCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfZm9ybV9wYWdlXGZSIHNldHMgdGhlIGZvcm0ncyBwYWdlIG51bWJlciAoZ29lcyB0byBwYWdlCitcZkluXGZSIG9mIHRoZSBmb3JtKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fcGFnZVxmUiByZXR1cm5zIHRoZSBmb3JtJ3MgY3VycmVudCBwYWdlIG51bWJlci4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZpZWxkX2luZGV4XGZSIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaWVsZCBpbiB0aGUKK2ZpZWxkIGFycmF5IG9mIHRoZSBmb3JtIGl0IGlzIGNvbm5lY3RlZCB0by4gSXQgcmV0dXJucyBcZkJFUlJcZlIgaWYKK3RoZSBhcmd1bWVudCBpcyB0aGUgbnVsbCBwb2ludGVyIG9yIHRoZSBmaWVsZCBpcyBub3QgY29ubmVjdGVkLgorLlNIIFJFVFVSTiBWQUxVRQorRXhjZXB0IGZvciBcZkJmb3JtX3BhZ2VcZlIsIGVhY2ggcm91dGluZSByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQkFEX1NUQVRFCitSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBmdW5jdGlvbi4KKy5UUCA1CisuQiBFX0lOVkFMSURfRklFTEQKK0NvbnRlbnRzIG9mIGEgZmllbGQgYXJlIG5vdCB2YWxpZC4KKy5UUCA1CisuQiBFX1JFUVVFU1RfREVOSUVECitUaGUgZm9ybSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgZm9ybXMgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9wb3N0LjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fcG9zdC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmYxNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fcG9zdC4zeApAQCAtMCwwICsxLDkxIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX3Bvc3QuM3gsdiAxLjcgMjAwNi8xMS8wNCAxODo1MzoyMCB0b20gRXhwICQKKy5USCBmb3JtX3Bvc3QgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX3Bvc3RcZlIgLSB3cml0ZSBvciBlcmFzZSBmb3JtcyBmcm9tIGFzc29jaWF0ZWQgc3Vid2luZG93cworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgcG9zdF9mb3JtKEZPUk0gKmZvcm0pOworLmJyCitpbnQgdW5wb3N0X2Zvcm0oRk9STSAqZm9ybSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnBvc3RfZm9ybVxmUiBkaXNwbGF5cyBhIGZvcm0gdG8gaXRzIGFzc29jaWF0ZWQgc3Vid2luZG93LiAgVG8KK3RyaWdnZXIgcGh5c2ljYWwgZGlzcGxheSBvZiB0aGUgc3Vid2luZG93LCB1c2UgXGZCcmVmcmVzaFxmUiBvciBzb21lIGVxdWl2YWxlbnQKK1xmQmN1cnNlc1xmUiByb3V0aW5lICh0aGUgaW1wbGljaXQgXGZCZG91cGRhdGVcZlIgdHJpZ2dlcmVkIGJ5IGFuIFxmQmN1cnNlc1xmUgoraW5wdXQgcmVxdWVzdCB3aWxsIGRvKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnVucG9zdF9mb3JtXGZSIGVyYXNlcyBmb3JtIGZyb20gaXRzIGFzc29jaWF0ZWQgc3Vid2luZG93LgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQkFEX1NUQVRFCitSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBmdW5jdGlvbi4KKy5UUCA1CisuQiBFX05PVF9QT1NURUQKK1RoZSBmb3JtIGhhcyBub3QgYmVlbiBwb3N0ZWQuCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBmb3JtLgorLlRQIDUKKy5CIEVfTk9fUk9PTQorRm9ybSBpcyB0b28gbGFyZ2UgZm9yIGl0cyB3aW5kb3cuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQmZvcm1cZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPGZvcm0uaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIGZvcm1zIGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV9yZXF1ZXN0bmFtZS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTcyZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fcmVxdWVzdG5hbWUuM3gKQEAgLTAsMCArMSw3MCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV9yZXF1ZXN0bmFtZS4zeCx2IDEuNyAyMDA2LzExLzA0IDE3OjU3OjQ5IHRvbSBFeHAgJAorLlRIIGZvcm1fcmVxdWVzdG5hbWUgM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX3JlcXVlc3RuYW1lXGZSIC0gaGFuZGxlIHByaW50YWJsZSBmb3JtIHJlcXVlc3QgbmFtZXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGZvcm0uaD5cZlIKKy5icgorY29uc3QgY2hhciAqZm9ybV9yZXF1ZXN0X25hbWUoaW50IHJlcXVlc3QpOworLmJyCitpbnQgZm9ybV9yZXF1ZXN0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fcmVxdWVzdF9uYW1lXGZSIHJldHVybnMgdGhlIHByaW50YWJsZSBuYW1lIG9mIGEgZm9ybQorcmVxdWVzdCBjb2RlLgorLmJyCitUaGUgZnVuY3Rpb24gXGZCZm9ybV9yZXF1ZXN0X2J5X25hbWVcZlIgc2VhcmNoZXMgaW4gdGhlIG5hbWUtdGFibGUgZm9yIGEgcmVxdWVzdAord2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgcmV0dXJucyBpdHMgcmVxdWVzdCBjb2RlLiBPdGhlcndpc2UgRV9OT19NQVRDSCBpcyByZXR1cm5lZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQmZvcm1fcmVxdWVzdF9uYW1lXGZSIHJldHVybnMgXGZCTlVMTFxmUiBvbiBlcnJvciBhbmQgc2V0cyBlcnJubwordG8gXGZCRV9CQURfQVJHVU1FTlRcZlIuCisuYnIKK1xmQmZvcm1fcmVxdWVzdF9ieV9uYW1lXGZSIHJldHVybnMgXGZCRV9OT19NQVRDSFxmUiBvbiBlcnJvci4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCZm9ybVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Zm9ybS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vZm9ybV91c2VycHRyLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fdXNlcnB0ci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmUwYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fdXNlcnB0ci4zeApAQCAtMCwwICsxLDY5IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBmb3JtX3VzZXJwdHIuM3gsdiAxLjExIDIwMDYvMTEvMDQgMTg6NDM6MjQgdG9tIEV4cCAkCisuVEggZm9ybV91c2VycHRyIDNYICIiCisuU0ggTkFNRQorXGZCZm9ybV91c2VycHRyXGZSIC0gYXNzb2NpYXRlIGFwcGxpY2F0aW9uIGRhdGEgd2l0aCBhIGZvcm0gaXRlbQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Zm9ybS5oPlxmUgorLmJyCitpbnQgc2V0X2Zvcm1fdXNlcnB0cihGT1JNICpmb3JtLCB2b2lkICp1c2VycHRyKTsKKy5icgordm9pZCogZm9ybV91c2VycHRyKGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK0V2ZXJ5IGZvcm0gYW5kIGV2ZXJ5IGZvcm0gaXRlbSBoYXMgYSBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGhvbGQKK2FwcGxpY2F0aW9uLXNwZWNpZmljIGRhdGEgKHRoYXQgaXMsIHRoZSBmb3JtLWRyaXZlciBjb2RlIGxlYXZlcyBpdCBhbG9uZSkuCitUaGVzZSBmdW5jdGlvbnMgZ2V0IGFuZCBzZXQgdGhlIGZvcm0gdXNlciBwb2ludGVyIGZpZWxkLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIFxmQmZvcm1fdXNlcnB0clxmUiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlIFxmQk5VTExcZlIpLgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X2Zvcm1fdXNlcnB0clxmUiByZXR1cm5zIFxmQkVfT0tcZlAgKHN1Y2Nlc3MpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuUFAKK1RoZSB1c2VyIHBvaW50ZXIgaXMgYSB2b2lkIHBvaW50ZXIuCitXZSBjaG9zZSBub3QgdG8gbGVhdmUgaXQgYXMgYSBjaGFyIHBvaW50ZXIgZm9yIFNWcjQgY29tcGF0aWJpbGl0eS4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2Zvcm1fd2luLjN4IGIvbmN1cnNlcy01LjcvbWFuL2Zvcm1fd2luLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZjY0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vZm9ybV93aW4uM3gKQEAgLTAsMCArMSw5NSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogZm9ybV93aW4uM3gsdiAxLjEwIDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCAkCisuVEggZm9ybV93aW4gM1ggIiIKKy5TSCBOQU1FCitcZkJmb3JtX3dpblxmUiAtIG1ha2UgYW5kIGJyZWFrIGZvcm0gd2luZG93IGFuZCBzdWJ3aW5kb3cgYXNzb2NpYXRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxmb3JtLmg+XGZSCisuYnIKK2ludCBzZXRfZm9ybV93aW4oRk9STSAqZm9ybSwgV0lORE9XICp3aW4pOworLmJyCitXSU5ET1cgKmZvcm1fd2luKGNvbnN0IEZPUk0gKmZvcm0pOworLmJyCitpbnQgc2V0X2Zvcm1fc3ViKEZPUk0gKmZvcm0sIFdJTkRPVyAqc3ViKTsKKy5icgorV0lORE9XICpmb3JtX3N1Yihjb25zdCBGT1JNICpmb3JtKTsKKy5icgoraW50IHNjYWxlX2Zvcm0oY29uc3QgRk9STSAqZm9ybSwgaW50ICpyb3dzLCBpbnQgKmNvbHVtbnMpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK0V2ZXJ5IGZvcm0gaGFzIGFuIGFzc29jaWF0ZWQgcGFpciBvZiBcZkJjdXJzZXNcZlIgd2luZG93cy4gIFRoZSBmb3JtIHdpbmRvdworZGlzcGxheXMgYW55IHRpdGxlIGFuZCBib3JkZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSB3aW5kb3c7IHRoZSBmb3JtIHN1YndpbmRvdworZGlzcGxheXMgdGhlIGl0ZW1zIG9mIHRoZSBmb3JtIHRoYXQgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4KKy5QUAorVGhlIGZpcnN0IGZvdXIgZnVuY3Rpb25zIGdldCBhbmQgc2V0IHRob3NlIHdpbmRvd3MuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNldAorZWl0aGVyIHdpbmRvdzsgYnkgZGVmYXVsdCwgdGhlIGRyaXZlciBjb2RlIHVzZXMgXGZCc3Rkc2NyXGZSIGZvciBib3RoLgorLlBQCitJbiB0aGUgXGZCc2V0X1xmUiBmdW5jdGlvbnMsIHdpbmRvdyBhcmd1bWVudCBvZiBcZkJOVUxMXGZSIGlzIHRyZWF0ZWQgYXMgdGhvdWdoCitpdCB3ZXJlIFxmQnN0c2RjclxmUi4gIEEgZm9ybSBhcmd1bWVudCBvZiBcZkJOVUxMXGZSIGlzIHRyZWF0ZWQgYXMgYSByZXF1ZXN0Cit0byBjaGFuZ2UgdGhlIHN5c3RlbSBkZWZhdWx0IGZvcm0gd2luZG93IG9yIHN1YndpbmRvdy4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNjYWxlX2Zvcm1cZlIgcmV0dXJucyB0aGUgbWluaW11bSBzaXplIHJlcXVpcmVkIGZvciB0aGUKK3N1YndpbmRvdyBvZiBcZklmb3JtXGZSLgorLlNIIFJFVFVSTiBWQUxVRQorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IuICBSb3V0aW5lcyB0aGF0IHJldHVybgorYW4gaW50ZWdlciByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1BPU1RFRAorVGhlIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBwb3N0ZWQuCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBmb3JtLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJmb3JtXGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxmb3JtLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBmb3JtcyBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9pbmZvY21wLjFtIGIvbmN1cnNlcy01LjcvbWFuL2luZm9jbXAuMW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhODhlNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9pbmZvY21wLjFtCkBAIC0wLDAgKzEsNDM3IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBpbmZvY21wLjFtLHYgMS40NCAyMDA2LzEyLzI0IDE4OjE2OjMxIHRvbSBFeHAgJAorLlRIIEBJTkZPQ01QQCAxTSAiIgorLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK1xmQkBJTkZPQ01QQFxmUiAtIGNvbXBhcmUgb3IgcHJpbnQgb3V0IFxmSXRlcm1pbmZvXGZSIGRlc2NyaXB0aW9ucworLlNIIFNZTk9QU0lTCitcZkJASU5GT0NNUEBcZlIgW1xmQi1cCisxXAorQ1wKK0VcCitGXAorR1wKK0lcCitMXAorVFwKK1VcCitWXAorY1wKK2RcCitlXAorZ1wKK2lcCitsXAorblwKK3BcCitxXAorclwKK3RcCit1XAoreFwKK1xmUl0KKy5icgorICAgICAgW1xmQi12XGZSIFxmSW5cZlJdIFtcZkItcyBkXGZSfCBcZkJpXGZSfCBcZkJsXGZSfCBcZkJjXGZSXSBbXGZCLVIgXGZSXGZCc3Vic2V0XGZSXQorLmJyCisgICAgICBbXGZCLXdcZlJcIFxmSXdpZHRoXGZSXSBbXGZCLUFcZlJcIFxmSWRpcmVjdG9yeVxmUl0gW1xmQi1CXGZSXCBcZklkaXJlY3RvcnlcZlJdCisuYnIKKyAgICAgIFtcZkl0ZXJtbmFtZVxmUi4uLl0KKy5TSCBERVNDUklQVElPTgorXGZCQElORk9DTVBAXGZSIGNhbiBiZSB1c2VkIHRvIGNvbXBhcmUgYSBiaW5hcnkgXGZCdGVybWluZm9cZlIgZW50cnkgd2l0aCBvdGhlcgordGVybWluZm8gZW50cmllcywgcmV3cml0ZSBhIFxmQnRlcm1pbmZvXGZSIGRlc2NyaXB0aW9uIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZQorXGZCdXNlPVxmUiB0ZXJtaW5mbyBmaWVsZCwgb3IgcHJpbnQgb3V0IGEgXGZCdGVybWluZm9cZlIgZGVzY3JpcHRpb24gZnJvbSB0aGUKK2JpbmFyeSBmaWxlIChcZkJ0ZXJtXGZSKSBpbiBhIHZhcmlldHkgb2YgZm9ybWF0cy4gIEluIGFsbCBjYXNlcywgdGhlIGJvb2xlYW4KK2ZpZWxkcyB3aWxsIGJlIHByaW50ZWQgZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBudW1lcmljIGZpZWxkcywgZm9sbG93ZWQgYnkgdGhlCitzdHJpbmcgZmllbGRzLgorLlNTIERlZmF1bHQgT3B0aW9ucworSWYgbm8gb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGFuZCB6ZXJvIG9yIG9uZSBcZkl0ZXJtbmFtZXNcZlIgYXJlIHNwZWNpZmllZCwgdGhlCitcZkItSVxmUiBvcHRpb24gd2lsbCBiZSBhc3N1bWVkLiAgSWYgbW9yZSB0aGFuIG9uZSBcZkl0ZXJtbmFtZVxmUiBpcyBzcGVjaWZpZWQsCit0aGUgXGZCLWRcZlIgb3B0aW9uIHdpbGwgYmUgYXNzdW1lZC4KKy5TUyBDb21wYXJpc29uIE9wdGlvbnMgWy1kXSBbLWNdIFstbl0KK1xmQkBJTkZPQ01QQFxmUiBjb21wYXJlcyB0aGUgXGZCdGVybWluZm9cZlIgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IHRlcm1pbmFsCitcZkl0ZXJtbmFtZVxmUiB3aXRoIGVhY2ggb2YgdGhlIGRlc2NyaXB0aW9ucyBnaXZlbiBieSB0aGUgZW50cmllcyBmb3IgdGhlIG90aGVyCit0ZXJtaW5hbCdzIFxmSXRlcm1uYW1lc1xmUi4gIElmIGEgY2FwYWJpbGl0eSBpcyBkZWZpbmVkIGZvciBvbmx5IG9uZSBvZiB0aGUKK3Rlcm1pbmFscywgdGhlIHZhbHVlIHJldHVybmVkIHdpbGwgZGVwZW5kIG9uIHRoZSB0eXBlIG9mIHRoZSBjYXBhYmlsaXR5OgorXGZCRlxmUiBmb3IgYm9vbGVhbiB2YXJpYWJsZXMsIFxmQi0xXGZSIGZvciBpbnRlZ2VyIHZhcmlhYmxlcywgYW5kIFxmQk5VTExcZlIKK2ZvciBzdHJpbmcgdmFyaWFibGVzLgorLlBQCitUaGUgXGZCLWRcZlIgb3B0aW9uIHByb2R1Y2VzIGEgbGlzdCBvZiBlYWNoIGNhcGFiaWxpdHkgdGhhdCBpcyBkaWZmZXJlbnQKK2JldHdlZW4gdHdvIGVudHJpZXMuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgdG8gc2hvdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3bworZW50cmllcywgY3JlYXRlZCBieSBkaWZmZXJlbnQgcGVvcGxlLCBmb3IgdGhlIHNhbWUgb3Igc2ltaWxhciB0ZXJtaW5hbHMuCisuUFAKK1RoZSBcZkItY1xmUiBvcHRpb24gcHJvZHVjZXMgYSBsaXN0IG9mIGVhY2ggY2FwYWJpbGl0eSB0aGF0IGlzIGNvbW1vbiBiZXR3ZWVuCit0d28gZW50cmllcy4gIENhcGFiaWxpdGllcyB0aGF0IGFyZSBub3Qgc2V0IGFyZSBpZ25vcmVkLiAgVGhpcyBvcHRpb24gY2FuIGJlCit1c2VkIGFzIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZSBcZkItdVxmUiBvcHRpb24gaXMgd29ydGggdXNpbmcuCisuUFAKK1RoZSBcZkItblxmUiBvcHRpb24gcHJvZHVjZXMgYSBsaXN0IG9mIGVhY2ggY2FwYWJpbGl0eSB0aGF0IGlzIGluIG5laXRoZXIKK2VudHJ5LiAgSWYgbm8gXGZJdGVybW5hbWVzXGZSIGFyZSBnaXZlbiwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1cZlIKK3dpbGwgYmUgdXNlZCBmb3IgYm90aCBvZiB0aGUgXGZJdGVybW5hbWVzXGZSLiAgVGhpcyBjYW4gYmUgdXNlZCBhcyBhIHF1aWNrCitjaGVjayB0byBzZWUgaWYgYW55dGhpbmcgd2FzIGxlZnQgb3V0IG9mIGEgZGVzY3JpcHRpb24uCisuU1MgU291cmNlIExpc3RpbmcgT3B0aW9ucyBbLUldIFstTF0gWy1DXSBbLXJdCitUaGUgXGZCLUlcZlIsIFxmQi1MXGZSLCBhbmQgXGZCLUNcZlIgb3B0aW9ucyB3aWxsIHByb2R1Y2UgYSBzb3VyY2UgbGlzdGluZyBmb3IKK2VhY2ggdGVybWluYWwgbmFtZWQuCisuCisuVFMKK2NlbnRlciB0YWIoLykgOworbCBsIC4KK1xmQi1JXGZSL3VzZSB0aGUgXGZCdGVybWluZm9cZlIgbmFtZXMKK1xmQi1MXGZSL3VzZSB0aGUgbG9uZyBDIHZhcmlhYmxlIG5hbWUgbGlzdGVkIGluIDxcZkJ0ZXJtLmhcZlI+CitcZkItQ1xmUi91c2UgdGhlIFxmQnRlcm1jYXBcZlIgbmFtZXMKK1xmQi1yXGZSL3doZW4gdXNpbmcgXGZCLUNcZlIsIHB1dCBvdXQgYWxsIGNhcGFiaWxpdGllcyBpbiBcZkJ0ZXJtY2FwXGZSIGZvcm0KKy5URQorLlBQCitJZiBubyBcZkl0ZXJtbmFtZXNcZlIgYXJlIGdpdmVuLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXGZCVEVSTVxmUiB3aWxsIGJlCit1c2VkIGZvciB0aGUgdGVybWluYWwgbmFtZS4KKy5QUAorVGhlIHNvdXJjZSBwcm9kdWNlZCBieSB0aGUgXGZCLUNcZlIgb3B0aW9uIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIGEKK1xmQnRlcm1jYXBcZlIgZW50cnksIGJ1dCBub3QgYWxsIHBhcmFtZXRlcml6ZWQgc3RyaW5ncyBjYW4gYmUgY2hhbmdlZCB0bwordGhlIFxmQnRlcm1jYXBcZlIgZm9ybWF0LiAgXGZCQElORk9DTVBAXGZSIHdpbGwgYXR0ZW1wdCB0byBjb252ZXJ0IG1vc3Qgb2YgdGhlCitwYXJhbWV0ZXJpemVkIGluZm9ybWF0aW9uLCBhbmQgYW55dGhpbmcgbm90IGNvbnZlcnRlZCB3aWxsIGJlIHBsYWlubHkgbWFya2VkIGluCit0aGUgb3V0cHV0IGFuZCBjb21tZW50ZWQgb3V0LiAgVGhlc2Ugc2hvdWxkIGJlIGVkaXRlZCBieSBoYW5kLgorLlBQCitBbGwgcGFkZGluZyBpbmZvcm1hdGlvbiBmb3Igc3RyaW5ncyB3aWxsIGJlIGNvbGxlY3RlZCB0b2dldGhlciBhbmQgcGxhY2VkCithdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgd2hlcmUgXGZCdGVybWNhcFxmUiBleHBlY3RzIGl0LiAgTWFuZGF0b3J5CitwYWRkaW5nIChwYWRkaW5nIGluZm9ybWF0aW9uIHdpdGggYSB0cmFpbGluZyAnLycpIHdpbGwgYmVjb21lIG9wdGlvbmFsLgorLlBQCitBbGwgXGZCdGVybWNhcFxmUiB2YXJpYWJsZXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBcZkJ0ZXJtaW5mb1xmUiwgYnV0IHdoaWNoCithcmUgZGVyaXZhYmxlIGZyb20gb3RoZXIgXGZCdGVybWluZm9cZlIgdmFyaWFibGVzLCB3aWxsIGJlIG91dHB1dC4gIE5vdCBhbGwKK1xmQnRlcm1pbmZvXGZSIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRyYW5zbGF0ZWQ7IG9ubHkgdGhvc2UgdmFyaWFibGVzIHdoaWNoIHdlcmUKK3BhcnQgb2YgXGZCdGVybWNhcFxmUiB3aWxsIG5vcm1hbGx5IGJlIG91dHB1dC4gIFNwZWNpZnlpbmcgdGhlIFxmQi1yXGZSIG9wdGlvbgord2lsbCB0YWtlIG9mZiB0aGlzIHJlc3RyaWN0aW9uLCBhbGxvd2luZyBhbGwgY2FwYWJpbGl0aWVzIHRvIGJlIG91dHB1dCBpbgorXGZJdGVybWNhcFxmUiBmb3JtLgorLlBQCitOb3RlIHRoYXQgYmVjYXVzZSBwYWRkaW5nIGlzIGNvbGxlY3RlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjYXBhYmlsaXR5LCBub3QKK2FsbCBjYXBhYmlsaXRpZXMgYXJlIG91dHB1dC4gIE1hbmRhdG9yeSBwYWRkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuICBCZWNhdXNlCitcZkJ0ZXJtY2FwXGZSIHN0cmluZ3MgYXJlIG5vdCBhcyBmbGV4aWJsZSwgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBjb252ZXJ0CithIFxmQnRlcm1pbmZvXGZSIHN0cmluZyBjYXBhYmlsaXR5IGludG8gYW4gZXF1aXZhbGVudCBcZkJ0ZXJtY2FwXGZSIGZvcm1hdC4gIEEKK3N1YnNlcXVlbnQgY29udmVyc2lvbiBvZiB0aGUgXGZCdGVybWNhcFxmUiBmaWxlIGJhY2sgaW50byBcZkJ0ZXJtaW5mb1xmUiBmb3JtYXQKK3dpbGwgbm90IG5lY2Vzc2FyaWx5IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgXGZCdGVybWluZm9cZlIKK3NvdXJjZS4KKy5QUAorU29tZSBjb21tb24gXGZCdGVybWluZm9cZlIgcGFyYW1ldGVyIHNlcXVlbmNlcywgdGhlaXIgXGZCdGVybWNhcFxmUgorZXF1aXZhbGVudHMsIGFuZCBzb21lIHRlcm1pbmFsIHR5cGVzIHdoaWNoIGNvbW1vbmx5IGhhdmUgc3VjaCBzZXF1ZW5jZXMsIGFyZToKKy4KKy5UUworY2VudGVyIHRhYigvKSA7CitsIGMgbAorbCBsIGwuCitcZkJ0ZXJtaW5mby90ZXJtY2FwXGZSL1JlcHJlc2VudGF0aXZlIFRlcm1pbmFscworPQorXGZCJXAxJWMvJS5cZlIvYWRtCitcZkIlcDElZC8lZFxmUi9ocCwgQU5TSSBzdGFuZGFyZCwgdnQxMDAKK1xmQiVwMSUneCclKyVjLyUreFxmUi9jb25jZXB0CitcZkIlaS8laVxmUnEvQU5TSSBzdGFuZGFyZCwgdnQxMDAKK1xmQiVwMSU/JSd4JyU+JXQlcDElJ3knJSslOy8lPnh5XGZSL2NvbmNlcHQKK1xmQiVwMlxmUiBpcyBwcmludGVkIGJlZm9yZSBcZkIlcDEvJXJcZlIvaHAKKy5URQorLlNTIFVzZT0gT3B0aW9uIFstdV0KK1RoZSBcZkItdVxmUiBvcHRpb24gcHJvZHVjZXMgYSBcZkJ0ZXJtaW5mb1xmUiBzb3VyY2UgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0Cit0ZXJtaW5hbCBcZkl0ZXJtbmFtZVxmUiB3aGljaCBpcyByZWxhdGl2ZSB0byB0aGUgc3VtIG9mIHRoZSBkZXNjcmlwdGlvbnMgZ2l2ZW4KK2J5IHRoZSBlbnRyaWVzIGZvciB0aGUgb3RoZXIgdGVybWluYWxzIFxmSXRlcm1uYW1lc1xmUi4gIEl0IGRvZXMgdGhpcyBieQorYW5hbHl6aW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBmaXJzdCBcZkl0ZXJtbmFtZVxmUiBhbmQgdGhlIG90aGVyCitcZkl0ZXJtbmFtZXNcZlIgYW5kIHByb2R1Y2luZyBhIGRlc2NyaXB0aW9uIHdpdGggXGZCdXNlPVxmUiBmaWVsZHMgZm9yIHRoZQorb3RoZXIgdGVybWluYWxzLiAgSW4gdGhpcyBtYW5uZXIsIGl0IGlzIHBvc3NpYmxlIHRvIHJldHJvZml0IGdlbmVyaWMgdGVybWluZm8KK2VudHJpZXMgaW50byBhIHRlcm1pbmFsJ3MgZGVzY3JpcHRpb24uICBPciwgaWYgdHdvIHNpbWlsYXIgdGVybWluYWxzIGV4aXN0LCBidXQKK3dlcmUgY29kZWQgYXQgZGlmZmVyZW50IHRpbWVzIG9yIGJ5IGRpZmZlcmVudCBwZW9wbGUgc28gdGhhdCBlYWNoIGRlc2NyaXB0aW9uCitpcyBhIGZ1bGwgZGVzY3JpcHRpb24sIHVzaW5nIFxmQkBJTkZPQ01QQFxmUiB3aWxsIHNob3cgd2hhdCBjYW4gYmUgZG9uZSB0byBjaGFuZ2UKK29uZSBkZXNjcmlwdGlvbiB0byBiZSByZWxhdGl2ZSB0byB0aGUgb3RoZXIuCisuUFAKK0EgY2FwYWJpbGl0eSB3aWxsIGdldCBwcmludGVkIHdpdGggYW4gYXQtc2lnbiAoQCkgaWYgaXQgbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUKK2ZpcnN0IFxmSXRlcm1uYW1lXGZSLCBidXQgb25lIG9mIHRoZSBvdGhlciBcZkl0ZXJtbmFtZVxmUiBlbnRyaWVzIGNvbnRhaW5zIGEKK3ZhbHVlIGZvciBpdC4gIEEgY2FwYWJpbGl0eSdzIHZhbHVlIGdldHMgcHJpbnRlZCBpZiB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0CitcZkl0ZXJtbmFtZVxmUiBpcyBub3QgZm91bmQgaW4gYW55IG9mIHRoZSBvdGhlciBcZkl0ZXJtbmFtZVxmUiBlbnRyaWVzLCBvciBpZgordGhlIGZpcnN0IG9mIHRoZSBvdGhlciBcZkl0ZXJtbmFtZVxmUiBlbnRyaWVzIHRoYXQgaGFzIHRoaXMgY2FwYWJpbGl0eSBnaXZlcyBhCitkaWZmZXJlbnQgdmFsdWUgZm9yIHRoZSBjYXBhYmlsaXR5IHRoYW4gdGhhdCBpbiB0aGUgZmlyc3QgXGZJdGVybW5hbWVcZlIuCisuUFAKK1RoZSBvcmRlciBvZiB0aGUgb3RoZXIgXGZJdGVybW5hbWVcZlIgZW50cmllcyBpcyBzaWduaWZpY2FudC4gIFNpbmNlIHRoZQordGVybWluZm8gY29tcGlsZXIgXGZCdGljXGZSIGRvZXMgYSBsZWZ0LXRvLXJpZ2h0IHNjYW4gb2YgdGhlIGNhcGFiaWxpdGllcywKK3NwZWNpZnlpbmcgdHdvIFxmQnVzZT1cZlIgZW50cmllcyB0aGF0IGNvbnRhaW4gZGlmZmVyaW5nIGVudHJpZXMgZm9yIHRoZSBzYW1lCitjYXBhYmlsaXRpZXMgd2lsbCBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHRzIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgdGhhdCB0aGUKK2VudHJpZXMgYXJlIGdpdmVuIGluLiAgXGZCQElORk9DTVBAXGZSIHdpbGwgZmxhZyBhbnkgc3VjaCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbgordGhlIG90aGVyIFxmSXRlcm1uYW1lXGZSIGVudHJpZXMgYXMgdGhleSBhcmUgZm91bmQuCisuUFAKK0FsdGVybmF0aXZlbHksIHNwZWNpZnlpbmcgYSBjYXBhYmlsaXR5IFxmSWFmdGVyXGZSIGEgXGZCdXNlPVxmUiBlbnRyeSB0aGF0Citjb250YWlucyB0aGF0IGNhcGFiaWxpdHkgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHNwZWNpZmljYXRpb24gdG8gYmUgaWdub3JlZC4KK1VzaW5nIFxmQkBJTkZPQ01QQFxmUiB0byByZWNyZWF0ZSBhIGRlc2NyaXB0aW9uIGNhbiBiZSBhIHVzZWZ1bCBjaGVjayB0byBtYWtlCitzdXJlIHRoYXQgZXZlcnl0aGluZyB3YXMgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiB0aGUgb3JpZ2luYWwgc291cmNlCitkZXNjcmlwdGlvbi4KKy5QUAorQW5vdGhlciBlcnJvciB0aGF0IGRvZXMgbm90IGNhdXNlIGluY29ycmVjdCBjb21waWxlZCBmaWxlcywgYnV0IHdpbGwgc2xvdyBkb3duCit0aGUgY29tcGlsYXRpb24gdGltZSwgaXMgc3BlY2lmeWluZyBleHRyYSBcZkJ1c2U9XGZSIGZpZWxkcyB0aGF0IGFyZQorc3VwZXJmbHVvdXMuICBcZkJASU5GT0NNUEBcZlIgd2lsbCBmbGFnIGFueSBvdGhlciBcZkl0ZXJtbmFtZSB1c2U9XGZSIGZpZWxkcyB0aGF0Cit3ZXJlIG5vdCBuZWVkZWQuCisuU1MgQ2hhbmdpbmcgRGF0YWJhc2VzIFstQSBcZklkaXJlY3RvcnlcZlJdIFstQiBcZklkaXJlY3RvcnlcZlJdCitUaGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlIGlzIHRha2VuIGZyb20gdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJURVJNSU5GT1xmUiAuICBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGRlZmluZWQsIG9yIHRoZQordGVybWluYWwgaXMgbm90IGZvdW5kIGluIHRoYXQgbG9jYXRpb24sIHRoZSBzeXN0ZW0gXGZCdGVybWluZm9cZlIgZGF0YWJhc2UsCitpbiBcZkJAVEVSTUlORk9AXGZSLCB3aWxsIGJlIHVzZWQuICBUaGUgb3B0aW9ucyBcZkItQVxmUgorYW5kIFxmQi1CXGZSIG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoaXMgbG9jYXRpb24uICBUaGUgXGZCLUFcZlIgb3B0aW9uIHdpbGwKK3NldCBcZkJURVJNSU5GT1xmUiBmb3IgdGhlIGZpcnN0IFxmSXRlcm1uYW1lXGZSIGFuZCB0aGUgXGZCLUJcZlIgb3B0aW9uIHdpbGwKK3NldCBcZkJURVJNSU5GT1xmUiBmb3IgdGhlIG90aGVyIFxmSXRlcm1uYW1lc1xmUi4gIFdpdGggdGhpcywgaXQgaXMgcG9zc2libGUgdG8KK2NvbXBhcmUgZGVzY3JpcHRpb25zIGZvciBhIHRlcm1pbmFsIHdpdGggdGhlIHNhbWUgbmFtZSBsb2NhdGVkIGluIHR3byBkaWZmZXJlbnQKK2RhdGFiYXNlcy4gIFRoaXMgaXMgdXNlZnVsIGZvciBjb21wYXJpbmcgZGVzY3JpcHRpb25zIGZvciB0aGUgc2FtZSB0ZXJtaW5hbAorY3JlYXRlZCBieSBkaWZmZXJlbnQgcGVvcGxlLgorLlNTIE90aGVyIE9wdGlvbnMKKy5UUCA1CitcZkItMVxmUgorY2F1c2VzIHRoZSBmaWVsZHMgdG8gYmUgcHJpbnRlZCBvdXQgb25lIHRvIGEgbGluZS4gIE90aGVyd2lzZSwKK3RoZSBmaWVsZHMgd2lsbCBiZSBwcmludGVkIHNldmVyYWwgdG8gYSBsaW5lIHRvIGEgbWF4aW11bSB3aWR0aAorb2YgNjAgY2hhcmFjdGVycy4KKy5UUAorXGZCLWFcZlIKK3RlbGxzIFxmQkBJTkZPQ01QQFxmUCB0byByZXRhaW4gY29tbWVudGVkLW91dCBjYXBhYmlsaXRpZXMgcmF0aGVyIHRoYW4gZGlzY2FyZGluZwordGhlbS4gIENhcGFiaWxpdGllcyBhcmUgY29tbWVudGVkIGJ5IHByZWZpeGluZyB0aGVtIHdpdGggYSBwZXJpb2QuCisuVFAgNQorXGZCLUVcZlIKK0R1bXAgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZ2l2ZW4gdGVybWluYWwgYXMgdGFibGVzLCBuZWVkZWQgaW4KK3RoZSBDIGluaXRpYWxpemVyIGZvciBhCitURVJNVFlQRSBzdHJ1Y3R1cmUgKHRoZSB0ZXJtaW5hbCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBpbiB0aGUgXGZCPHRlcm0uaD5cZlIpLgorVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciBwcmVwYXJpbmcgdmVyc2lvbnMgb2YgdGhlIGN1cnNlcyBsaWJyYXJ5IGhhcmR3aXJlZAorZm9yIGEgZ2l2ZW4gdGVybWluYWwgdHlwZS4KK1RoZSB0YWJsZXMgYXJlIGFsbCBkZWNsYXJlZCBzdGF0aWMsIGFuZCBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlCithbmQgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdGVybWluYWwgZW50cnkuCisuc3AKK0JlZm9yZSBuY3Vyc2VzIDUuMCwgdGhlIHNwbGl0IGJldHdlZW4gdGhlIFxmQi1lXGZQIGFuZCBcZkItRVxmUAorb3B0aW9ucyB3YXMgbm90IG5lZWRlZDsgYnV0IHN1cHBvcnQgZm9yIGV4dGVuZGVkIG5hbWVzIHJlcXVpcmVkIG1ha2luZwordGhlIGFycmF5cyBvZiB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgc2VwYXJhdGUgZnJvbSB0aGUgVEVSTVRZUEUgc3RydWN0dXJlLgorLlRQIDUKK1xmQi1lXGZSCitEdW1wIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGdpdmVuIHRlcm1pbmFsIGFzIGEgQyBpbml0aWFsaXplciBmb3IgYQorVEVSTVRZUEUgc3RydWN0dXJlICh0aGUgdGVybWluYWwgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgaW4gdGhlIFxmQjx0ZXJtLmg+XGZSKS4KK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgcHJlcGFyaW5nIHZlcnNpb25zIG9mIHRoZSBjdXJzZXMgbGlicmFyeSBoYXJkd2lyZWQKK2ZvciBhIGdpdmVuIHRlcm1pbmFsIHR5cGUuCisuVFAgNQorXGZCLUZcZlIKK2NvbXBhcmUgdGVybWluZm8gZmlsZXMuICBUaGlzIGFzc3VtZXMgdGhhdCB0d28gZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUKK2ZpbGVuYW1lcy4gIFRoZSBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIHBhaXJ3aXNlIG1hdGNoZXMgYmV0d2VlbgorZW50cmllcywgd2l0aCB0d28gZW50cmllcyBjb25zaWRlcmVkIHRvIG1hdGNoIGlmIGFueSBvZiB0aGVpciBuYW1lcyBkby4KK1RoZSByZXBvcnQgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXRwdXQgbGlzdHMgZW50cmllcyB3aXRoIG5vIG1hdGNoZXMgaW4KK3RoZSBvdGhlciBmaWxlLCBhbmQgZW50cmllcyB3aXRoIG1vcmUgdGhhbiBvbmUgbWF0Y2guICBGb3IgZW50cmllcword2l0aCBleGFjdGx5IG9uZSBtYXRjaCBpdCBpbmNsdWRlcyBhIGRpZmZlcmVuY2UgcmVwb3J0LiAgTm9ybWFsbHksCit0byByZWR1Y2UgdGhlIHZvbHVtZSBvZiB0aGUgcmVwb3J0LCB1c2UgcmVmZXJlbmNlcyBhcmUKK25vdCByZXNvbHZlZCBiZWZvcmUgbG9va2luZyBmb3IgZGlmZmVyZW5jZXMsIGJ1dCByZXNvbHV0aW9uIGNhbiBiZSBmb3JjZWQKK2J5IGFsc28gc3BlY2lmeWluZyBcZkItclxmUi4KKy5UUCA1CitcZkItZlxmUgorRGlzcGxheSBjb21wbGV4IHRlcm1pbmZvIHN0cmluZ3Mgd2hpY2ggY29udGFpbiBpZi90aGVuL2Vsc2UvZW5kaWYgZXhwcmVzc2lvbnMKK2luZGVudGVkIGZvciByZWFkYWJpbGl0eS4KKy5UUCA1CitcZkItR1xmUgorRGlzcGxheSBjb25zdGFudCBsaXRlcmFscyBpbiBkZWNpbWFsIGZvcm0KK3JhdGhlciB0aGFuIHRoZWlyIGNoYXJhY3RlciBlcXVpdmFsZW50cy4KKy5UUCA1CitcZkItZ1xmUgorRGlzcGxheSBjb25zdGFudCBjaGFyYWN0ZXIgbGl0ZXJhbHMgaW4gcXVvdGVkIGZvcm0KK3JhdGhlciB0aGFuIHRoZWlyIGRlY2ltYWwgZXF1aXZhbGVudHMuCisuVFAgNQorXGZCLWlcZlIKK0FuYWx5emUgdGhlIGluaXRpYWxpemF0aW9uIChcZkJpczFcZlIsIFxmQmlzMlxmUiwgXGZCaXMzXGZSKSwgYW5kIHJlc2V0CisoXGZCcnMxXGZSLCBcZkJyczJcZlIsIFxmQnJzM1xmUiksIHN0cmluZ3MgaW4gdGhlIGVudHJ5LiAgRm9yIGVhY2ggc3RyaW5nLCB0aGUKK2NvZGUgdHJpZXMgdG8gYW5hbHl6ZSBpdCBpbnRvIGFjdGlvbnMgaW4gdGVybXMgb2YgdGhlIG90aGVyIGNhcGFiaWxpdGllcyBpbiB0aGUKK2VudHJ5LCBjZXJ0YWluIFgzLjY0L0lTTyA2NDI5L0VDTUEtNDggY2FwYWJpbGl0aWVzLCBhbmQgY2VydGFpbiBERUMgVlQtc2VyaWVzCitwcml2YXRlIG1vZGVzICh0aGUgc2V0IG9mIHJlY29nbml6ZWQgc3BlY2lhbCBzZXF1ZW5jZXMgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yCitjb21wbGV0ZW5lc3Mgb3ZlciB0aGUgZXhpc3RpbmcgdGVybWluZm8gZGF0YWJhc2UpLiAgRWFjaCByZXBvcnQgbGluZSBjb25zaXN0cworb2YgdGhlIGNhcGFiaWxpdHkgbmFtZSwgZm9sbG93ZWQgYnkgYSBjb2xvbiBhbmQgc3BhY2UsIGZvbGxvd2VkIGJ5IGEgcHJpbnRhYmxlCitleHBhbnNpb24gb2YgdGhlIGNhcGFiaWxpdHkgc3RyaW5nIHdpdGggc2VjdGlvbnMgbWF0Y2hpbmcgcmVjb2duaXplZCBhY3Rpb25zCit0cmFuc2xhdGVkIGludG8ge30tYnJhY2tldGVkIGRlc2NyaXB0aW9ucy4gIEhlcmUgaXMgYSBsaXN0IG9mIHRoZSBERUMvQU5TSQorc3BlY2lhbCBzZXF1ZW5jZXMgcmVjb2duaXplZDoKK2kuCisuVFMKK2NlbnRlciB0YWIoLykgOworbCBsCitsIGwuCitBY3Rpb24vTWVhbmluZworPQorUklTL2Z1bGwgcmVzZXQKK1NDL3NhdmUgY3Vyc29yCitSQy9yZXN0b3JlIGN1cnNvcgorTEwvaG9tZS1kb3duCitSU1IvcmVzZXQgc2Nyb2xsIHJlZ2lvbgorPQorREVDU1RSL3NvZnQgcmVzZXQgKFZUMzIwKQorUzdDMVQvNy1iaXQgY29udHJvbHMgKFZUMjIwKQorPQorSVNPIERFQyBHMC9lbmFibGUgREVDIGdyYXBoaWNzIGZvciBHMAorSVNPIFVLIEcwL2VuYWJsZSBVSyBjaGFycyBmb3IgRzAKK0lTTyBVUyBHMC9lbmFibGUgVVMgY2hhcnMgZm9yIEcwCitJU08gREVDIEcxL2VuYWJsZSBERUMgZ3JhcGhpY3MgZm9yIEcxCitJU08gVUsgRzEvZW5hYmxlIFVLIGNoYXJzIGZvciBHMQorSVNPIFVTIEcxL2VuYWJsZSBVUyBjaGFycyBmb3IgRzEKKz0KK0RFQ1BBTS9hcHBsaWNhdGlvbiBrZXlwYWQgbW9kZQorREVDUE5NL25vcm1hbCBrZXlwYWQgbW9kZQorREVDQU5TSS9lbnRlciBBTlNJIG1vZGUKKz0KK0VDTUFbKy1dQU0va2V5Ym9hcmQgYWN0aW9uIG1vZGUKK0VDTUFbKy1dSVJNL2luc2VydCByZXBsYWNlIG1vZGUKK0VDTUFbKy1dU1JNL3NlbmQgcmVjZWl2ZSBtb2RlCitFQ01BWystXUxOTS9saW5lZmVlZCBtb2RlCis9CitERUNbKy1dQ0tNL2FwcGxpY2F0aW9uIGN1cnNvciBrZXlzCitERUNbKy1dQU5NL3NldCBWVDUyIG1vZGUKK0RFQ1srLV1DT0xNLzEzMi1jb2x1bW4gbW9kZQorREVDWystXVNDTE0vc21vb3RoIHNjcm9sbAorREVDWystXVNDTk0vcmV2ZXJzZSB2aWRlbyBtb2RlCitERUNbKy1dT00vb3JpZ2luIG1vZGUKK0RFQ1srLV1BV00vd3JhcGFyb3VuZCBtb2RlCitERUNbKy1dQVJNL2F1dG8tcmVwZWF0IG1vZGUKKy5URQorLnNwCitJdCBhbHNvIHJlY29nbml6ZXMgYSBTR1IgYWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gQU5TSS9JU08gNjQyOS9FQ01BIFNldAorR3JhcGhpY3MgUmVuZGl0aW9uLCB3aXRoIHRoZSB2YWx1ZXMgTk9STUFMLCBCT0xELCBVTkRFUkxJTkUsIEJMSU5LLCBhbmQKK1JFVkVSU0UuICBBbGwgYnV0IE5PUk1BTCBtYXkgYmUgcHJlZml4ZWQgd2l0aCBgKycgKHR1cm4gb24pIG9yIGAtJyAodHVybiBvZmYpLgorLlBQCitBbiBTR1IwIGRlc2lnbmF0ZXMgYW4gZW1wdHkgaGlnaGxpZ2h0IHNlcXVlbmNlIChlcXVpdmFsZW50IHRvIHtTR1I6Tk9STUFMfSkuCisuVFAgNQorXGZCLWxcZlIKK1NldCBvdXRwdXQgZm9ybWF0IHRvIHRlcm1pbmZvLgorLlRQIDUKK1xmQi1wXGZSCitJZ25vcmUgcGFkZGluZyBzcGVjaWZpY2F0aW9ucyB3aGVuIGNvbXBhcmluZyBzdHJpbmdzLgorLlRQIDUKK1xmQi1xXGZSCitNYWtlIHRoZSBjb21wYXJpc29uIGxpc3Rpbmcgc2hvcnRlciBieSBvbWl0dGluZyBzdWJoZWFkaW5ncywgYW5kIHVzaW5nCisiLSIgZm9yIGFic2VudCBjYXBhYmlsaXRpZXMsICJAIiBmb3IgY2FuY2VsZWQgcmF0aGVyIHRoYW4gIk5VTEwiLgorLlRQIDUKK1xmQi1SXGZSXGZJc3Vic2V0XGZSCitSZXN0cmljdCBvdXRwdXQgdG8gYSBnaXZlbiBzdWJzZXQuICBUaGlzIG9wdGlvbiBpcyBmb3IgdXNlIHdpdGggYXJjaGFpYwordmVyc2lvbnMgb2YgdGVybWluZm8gbGlrZSB0aG9zZSBvbiBTVnIxLCBVbHRyaXgsIG9yIEhQL1VYIHRoYXQgZG8gbm90IHN1cHBvcnQKK3RoZSBmdWxsIHNldCBvZiBTVlI0L1hTSSBDdXJzZXMgdGVybWluZm87IGFuZCB2YXJpYW50cyBzdWNoIGFzIEFJWAordGhhdCBoYXZlIHRoZWlyIG93biBleHRlbnNpb25zIGluY29tcGF0aWJsZSB3aXRoIFNWcjQvWFNJLiAgQXZhaWxhYmxlIHRlcm1pbmZvCitzdWJzZXRzIGFyZSAiU1ZyMSIsICJVbHRyaXgiLCAiSFAiLCBhbmQgIkFJWCI7IHNlZSBcZkJ0ZXJtaW5mb1xmUihcKm4pIGZvcgorZGV0YWlscy4gIFlvdSBjYW4gYWxzbyBjaG9vc2UgdGhlIHN1YnNldCAiQlNEIiB3aGljaCBzZWxlY3RzIG9ubHkgY2FwYWJpbGl0aWVzCit3aXRoIHRlcm1jYXAgZXF1aXZhbGVudHMgcmVjb2duaXplZCBieSA0LjRCU0QuCisuVFAKK1xmQi1zIFxmUlxmSVtkfGl8bHxjXVxmUgorVGhlIFxmQi1zXGZSIG9wdGlvbiBzb3J0cyB0aGUgZmllbGRzIHdpdGhpbiBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRoZSBhcmd1bWVudAorYmVsb3c6CisuYnIKKy5SUyA1CisuVFAgNQorXGZCZFxmUgorbGVhdmUgZmllbGRzIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgXGZJdGVybWluZm9cZlIgZGF0YWJhc2UuCisuVFAgNQorXGZCaVxmUgorc29ydCBieSBcZkl0ZXJtaW5mb1xmUiBuYW1lLgorLlRQIDUKK1xmQmxcZlIKK3NvcnQgYnkgdGhlIGxvbmcgQyB2YXJpYWJsZSBuYW1lLgorLlRQIDUKK1xmQmNcZlIKK3NvcnQgYnkgdGhlIFxmSXRlcm1jYXBcZlIgbmFtZS4KKy5SRQorLklQCitJZiB0aGUgXGZCLXNcZlIgb3B0aW9uIGlzIG5vdCBnaXZlbiwgdGhlIGZpZWxkcyBwcmludGVkIG91dCB3aWxsIGJlCitzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgdGhlIFxmQnRlcm1pbmZvXGZSIG5hbWUgd2l0aGluIGVhY2ggdHlwZSwKK2V4Y2VwdCBpbiB0aGUgY2FzZSBvZiB0aGUgXGZCLUNcZlIgb3IgdGhlIFxmQi1MXGZSIG9wdGlvbnMsIHdoaWNoIGNhdXNlIHRoZQorc29ydGluZyB0byBiZSBkb25lIGJ5IHRoZSBcZkJ0ZXJtY2FwXGZSIG5hbWUgb3IgdGhlIGxvbmcgQyB2YXJpYWJsZQorbmFtZSwgcmVzcGVjdGl2ZWx5LgorLlRQIDUKK1xmQi1UXGZSCitlbGltaW5hdGVzIHNpemUtcmVzdHJpY3Rpb25zIG9uIHRoZSBnZW5lcmF0ZWQgdGV4dC4KK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMsIHNpbmNlIHRoZSBjb21waWxlZAorZGVzY3JpcHRpb25zIGFyZSBsaW1pdGVkIChlLmcuLCAxMDIzIGZvciB0ZXJtY2FwLCA0MDk2IGZvciB0ZXJtaW5mbykuCisuVFAKK1xmQi10XGZSCit0ZWxscyBcZkJ0aWNcZlAgdG8gZGlzY2FyZCBjb21tZW50ZWQtb3V0IGNhcGFiaWxpdGllcy4KK05vcm1hbGx5IHdoZW4gdHJhbnNsYXRpbmcgZnJvbSB0ZXJtaW5mbyB0byB0ZXJtY2FwLAordW50cmFuc2xhdGFibGUgY2FwYWJpbGl0aWVzIGFyZSBjb21tZW50ZWQtb3V0LgorLlRQIDUKK1xmQi1VXGZSCit0ZWxscyBcZkJASU5GT0NNUEBcZlAgdG8gbm90IHBvc3QtcHJvY2VzcyB0aGUgZGF0YSBhZnRlciBwYXJzaW5nIHRoZSBzb3VyY2UgZmlsZS4KK1RoaXMgZmVhdHVyZSBoZWxwcyB3aGVuIGNvbXBhcmluZyB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHR3byBzb3VyY2UgZmlsZXMsCitzaW5jZSBpdCBleGNsdWRlcyB0aGUgaW5mZXJlbmNlcyB0aGF0IFxmQkBJTkZPQ01QQFxmUCBtYWtlcyB0byBmaWxsIGluIG1pc3NpbmcKK2RhdGEuCisuVFAgNQorXGZCLVZcZlIKK3JlcG9ydHMgdGhlIHZlcnNpb24gb2YgbmN1cnNlcyB3aGljaCB3YXMgdXNlZCBpbiB0aGlzIHByb2dyYW0sIGFuZCBleGl0cy4KKy5UUCA1CitcZkItdlxmUiBcZkluXGZSCitwcmludHMgb3V0IHRyYWNpbmcgaW5mb3JtYXRpb24gb24gc3RhbmRhcmQgZXJyb3IgYXMgdGhlIHByb2dyYW0gcnVucy4KK0hpZ2hlciB2YWx1ZXMgb2YgbiBpbmR1Y2UgZ3JlYXRlciB2ZXJib3NpdHkuCisuVFAgNQorXGZCLXdcZlIgXGZJd2lkdGhcZlIKK2NoYW5nZXMgdGhlIG91dHB1dCB0byBcZkl3aWR0aFxmUiBjaGFyYWN0ZXJzLgorLlRQCitcZkIteFxmUgorcHJpbnQgaW5mb3JtYXRpb24gZm9yIHVzZXItZGVmaW5lZCBjYXBhYmlsaXRpZXMuCitUaGVzZSBhcmUgZXh0ZW5zaW9ucyB0byB0aGUgdGVybWluZm8gcmVwZXJ0b2lyZSB3aGljaCBjYW4gYmUgbG9hZGVkCit1c2luZyB0aGUgXGZCLXhcZlIgb3B0aW9uIG9mIFxmQnRpY1xmUC4KKy5TSCBGSUxFUworLlRQIDIwCitcKmQKK0NvbXBpbGVkIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGRhdGFiYXNlLgorLlNIIEVYVEVOU0lPTlMKK1RoZQorXGZCLUVcZlIsCitcZkItRlxmUiwKK1xmQi1HXGZSLAorXGZCLVJcZlIsCitcZkItVFxmUiwKK1xmQi1WXGZSLAorXGZCLWFcZlIsCitcZkItZVxmUiwKK1xmQi1mXGZSLAorXGZCLWdcZlIsCitcZkItaVxmUiwKK1xmQi1sXGZSLAorXGZCLXBcZlIsCitcZkItcVxmUiBhbmQKK1xmQi10XGZSCitvcHRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIFNWcjQgY3Vyc2VzLgorLlBQCitUaGUgXGZCLXJcZlIgb3B0aW9uJ3Mgbm90aW9uIG9mIGB0ZXJtY2FwJyBjYXBhYmlsaXRpZXMgaXMgU3lzdGVtIFYgUmVsZWFzZSA0J3MuCitBY3R1YWwgQlNEIGN1cnNlcyB2ZXJzaW9ucyB3aWxsIGhhdmUgYSBtb3JlIHJlc3RyaWN0ZWQgc2V0LiAgVG8gc2VlIG9ubHkgdGhlCis0LjRCU0Qgc2V0LCB1c2UgXGZCLXJcZlIgXGZCLVJCU0RcZlIuCisuU0ggQlVHUworVGhlIFxmQi1GXGZSIG9wdGlvbiBvZiBcZkJASU5GT0NNUEBcZlIoMU0pIHNob3VsZCBiZSBhIFxmQkBUT0VAXGZSKDFNKSBtb2RlLgorLlNIIFNFRSBBTFNPCitcZkJAQ0FQVE9JTkZPQFxmUigxTSksCitcZkJASU5GT1RPQ0FQQFxmUigxTSksCitcZkJAVElDQFxmUigxTSksCitcZkJAVE9FQFxmUigxTSksCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCdGVybWluZm9cZlIoXCpuKS4KKy5QUAorVGhpcyBkZXNjcmliZXMgXGZCbmN1cnNlc1xmUgordmVyc2lvbiBATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIChwYXRjaCBATkNVUlNFU19QQVRDSEApLgorLlNIIEFVVEhPUgorRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+CithbmQKKy5icgorVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGludmlzaWJsZS1pc2xhbmQubmV0PgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vaW5mb3RvY2FwLjFtIGIvbmN1cnNlcy01LjcvbWFuL2luZm90b2NhcC4xbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTE2MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL2luZm90b2NhcC4xbQpAQCAtMCwwICsxLDc3IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBpbmZvdG9jYXAuMW0sdiAxLjggMjAwNi8xMi8yNCAyMDoxMzo1NiB0b20gRXhwICQKKy5USCBASU5GT1RPQ0FQQCAxTSAiIgorLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK1xmQkBJTkZPVE9DQVBAXGZSIC0gY29udmVydCBhIFxmSXRlcm1pbmZvXGZSIGRlc2NyaXB0aW9uIGludG8gYSBcZkl0ZXJtY2FwXGZSIGRlc2NyaXB0aW9uCisuU0ggU1lOT1BTSVMKK1xmQkBJTkZPVE9DQVBAXGZSIFtcZkItdlxmUlxmSW5cZlIgXGZJd2lkdGhcZlJdICBbXGZCLVZcZlJdIFtcZkItMVxmUl0gW1xmQi13XGZSIFxmSXdpZHRoXGZSXSBcZklmaWxlXGZSIC4gLiAuCisuU0ggREVTQ1JJUFRJT04KK1xmQkBJTkZPVE9DQVBAXGZSIGxvb2tzIGluIFxmSWZpbGVcZlIgZm9yIFxmQnRlcm1pbmZvXGZSIGRlc2NyaXB0aW9ucy4gIEZvciBlYWNoCitvbmUgZm91bmQsIGFuIGVxdWl2YWxlbnQgXGZCdGVybWNhcFxmUiBkZXNjcmlwdGlvbiBpcyB3cml0dGVuIHRvIHN0YW5kYXJkCitvdXRwdXQuICBUZXJtaW5mbyBcZkJ1c2VcZlIgY2FwYWJpbGl0aWVzIGFyZSB0cmFuc2xhdGVkIGRpcmVjdGx5IHRvIHRlcm1jYXAKK1xmQnRjXGZSIGNhcGFiaWxpdGllcy4KKy5UUCA1CitcZkItdlxmUgorcHJpbnQgb3V0IHRyYWNpbmcgaW5mb3JtYXRpb24gb24gc3RhbmRhcmQgZXJyb3IgYXMgdGhlIHByb2dyYW0gcnVucy4KKy5UUCA1CitcZkItVlxmUgorcHJpbnQgb3V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGluIHVzZSBvbiBzdGFuZGFyZCBlcnJvciBhbmQgZXhpdC4KKy5UUCA1CitcZkItMVxmUgorY2F1c2UgdGhlIGZpZWxkcyB0byBwcmludCBvdXQgb25lIHRvIGEgbGluZS4gIE90aGVyd2lzZSwgdGhlIGZpZWxkcword2lsbCBiZSBwcmludGVkIHNldmVyYWwgdG8gYSBsaW5lIHRvIGEgbWF4aW11bSB3aWR0aCBvZiA2MAorY2hhcmFjdGVycy4KKy5UUCA1CitcZkItd1xmUgorY2hhbmdlIHRoZSBvdXRwdXQgdG8gXGZJd2lkdGhcZlIgY2hhcmFjdGVycy4KKy5TSCBGSUxFUworLlRQIDIwCitcKmQKK0NvbXBpbGVkIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGRhdGFiYXNlLgorLlNIIE5PVEVTCitUaGlzIHV0aWxpdHkgaXMgYWN0dWFsbHkgYSBsaW5rIHRvIFxmSUBUSUNAXGZSLCBydW5uaW5nIGluIFxmSS1DXGZSIG1vZGUuCitZb3UgY2FuIHVzZSBvdGhlciBcZklAVElDQFxmUiBvcHRpb25zIHN1Y2ggYXMgXGZCLWZcZlIgYW5kICBcZkIteFxmUi4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwKK1xmQkBUSUNAXGZSKDFNKSwKK1xmQkBJTkZPQ01QQFxmUigxTSksCitcZkJ0ZXJtaW5mb1xmUihcKm4pCisuUFAKK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2tleV9kZWZpbmVkLjN4IGIvbmN1cnNlcy01LjcvbWFuL2tleV9kZWZpbmVkLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDEzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4va2V5X2RlZmluZWQuM3gKQEAgLTAsMCArMSw2MCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDMKKy5cIgorLlwiICRJZDoga2V5X2RlZmluZWQuM3gsdiAxLjQgMjAwNi8wMi8yNSAyMTo1MDowMSB0b20gRXhwICQKKy5USCBrZXlfZGVmaW5lZCAzWCAiIgorLlNIIE5BTUUKK1xmQmtleV9kZWZpbmVkXGZQIFwtIGNoZWNrIGlmIGEga2V5Y29kZSBpcyBkZWZpbmVkCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlAKKy5zcAorXGZCaW50IGtleV9kZWZpbmVkKGNvbnN0IGNoYXIgKmRlZmluaXRpb24pO1xmUAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuCitJdCBwZXJtaXRzIGFuIGFwcGxpY2F0aW9uIHRvIGRldGVybWluZSBpZiBhIHN0cmluZyBpcyBjdXJyZW50bHkgYm91bmQKK3RvIGFueSBrZXljb2RlLgorLlNIIFJFVFVSTiBWQUxVRQorSWYgdGhlIHN0cmluZyBpcyBib3VuZCB0byBhIGtleWNvZGUsIGl0cyB2YWx1ZSAoZ3JlYXRlciB0aGFuIHplcm8pIGlzIHJldHVybmVkLgorSWYgbm8ga2V5Y29kZSBpcyBib3VuZCwgemVybyBpcyByZXR1cm5lZC4KK0lmIHRoZSBzdHJpbmcgY29uZmxpY3RzIHdpdGggbG9uZ2VyIHN0cmluZ3Mgd2hpY2ggYXJlIGJvdW5kIHRvIGtleXMsIC0xIGlzIHJldHVybmVkLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0CithbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggU0VFIEFMU08KK1xmQmRlZmluZV9rZXlcZlIoM1gpLgorLlNIIEFVVEhPUgorVGhvbWFzIERpY2tleS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2tleWJvdW5kLjN4IGIvbmN1cnNlcy01LjcvbWFuL2tleWJvdW5kLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZTE3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4va2V5Ym91bmQuM3gKQEAgLTAsMCArMSw2NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTkKKy5cIgorLlwiICRJZDoga2V5Ym91bmQuM3gsdiAxLjYgMjAwNi8wMi8yNSAyMTo0NzowNiB0b20gRXhwICQKKy5USCBrZXlvayAzWCAiIgorLlNIIE5BTUUKK1xmQmtleWJvdW5kXGZQIFwtIHJldHVybiBkZWZpbml0aW9uIG9mIGtleWNvZGUKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUAorLnNwCitcZkJjaGFyICoga2V5Ym91bmQoaW50IGtleWNvZGUsIGludCBjb3VudCk7XGZQCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4KK0l0IHBlcm1pdHMgYW4gYXBwbGljYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBzdHJpbmcgd2hpY2ggaXMgZGVmaW5lZAoraW4gdGhlIHRlcm1pbmZvIGZvciBzcGVjaWZpYyBrZXljb2Rlcy4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBcZklrZXljb2RlXGZQIHBhcmFtZXRlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBlbHNlIE5VTEwgaXMgcmV0dXJuZWQuCitJZiBpdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZGVmaW5lZCBrZXksIHRoZW4gTlVMTCBpcyByZXR1cm5lZC4KK1RoZSBcZkljb3VudFxmUCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gaXRlcmF0ZQordGhyb3VnaCBtdWx0aXBsZSBkZWZpbml0aW9ucywgY291bnRpbmcgZnJvbSB6ZXJvLgorV2hlbiBzdWNjZXNzZnVsLAordGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgd2hpY2ggbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0CithbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggU0VFIEFMU08KK1xmQmRlZmluZV9rZXlcZlIoM1gpLAorXGZCa2V5b2tcZlIoM1gpLgorLlNIIEFVVEhPUgorVGhvbWFzIERpY2tleS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL2tleW9rLjN4IGIvbmN1cnNlcy01LjcvbWFuL2tleW9rLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YzJhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4va2V5b2suM3gKQEAgLTAsMCArMSw2MyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTcKKy5cIgorLlwiICRJZDoga2V5b2suM3gsdiAxLjkgMjAwNi8wMi8yNSAyMTo0NzowNiB0b20gRXhwICQKKy5USCBrZXlvayAzWCAiIgorLlNIIE5BTUUKK1xmQmtleW9rXGZQIFwtIGVuYWJsZSBvciBkaXNhYmxlIGEga2V5Y29kZQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZQCisuc3AKK1xmQmludCBrZXlvayhpbnQga2V5Y29kZSwgYm9vbCBlbmFibGUpO1xmUAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgY3Vyc2VzIGxpYnJhcnkuCitJdCBwZXJtaXRzIGFuIGFwcGxpY2F0aW9uIHRvIGRpc2FibGUgc3BlY2lmaWMga2V5Y29kZXMsIHJhdGhlciB0aGFuCit1c2UgdGhlIFxmSWtleXBhZFxmUCBmdW5jdGlvbiB0byBkaXNhYmxlIGFsbCBrZXljb2Rlcy4KK0tleXMgdGhhdCBoYXZlIGJlZW4gZGlzYWJsZWQgY2FuIGJlIHJlZW5hYmxlZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBrZXljb2RlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8sIGVsc2UgRVJSIGlzIHJldHVybmVkLgorSWYgaXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGRlZmluZWQga2V5LCB0aGVuIEVSUiBpcyByZXR1cm5lZC4KK0lmIHRoZSBcZkllbmFibGVcZlAgcGFyYW1ldGVyIGlzIHRydWUsIHRoZW4gdGhlIGtleSBtdXN0IGhhdmUgYmVlbiBkaXNhYmxlZCwKK2FuZCB2aWNlIHZlcnNhLgorT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBPSy4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIG5jdXJzZXMuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3LCBCU0Qgb3IgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdAorYW55IGNvZGUgZGVwZW5kaW5nIG9uIHRoZW0gYmUgY29uZGl0aW9uZWQgdXNpbmcgTkNVUlNFU19WRVJTSU9OLgorLlNIIFNFRSBBTFNPCitcZkJkZWZpbmVfa2V5XGZSKDNYKS4KKy5TSCBBVVRIT1IKK1Rob21hcyBEaWNrZXkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9sZWdhY3lfY29kaW5nLjN4IGIvbmN1cnNlcy01LjcvbWFuL2xlZ2FjeV9jb2RpbmcuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjNDlmZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9sZWdhY3lfY29kaW5nLjN4CkBAIC0wLDAgKzEsODIgQEAKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQorLlwiCisuXCIgJElkOiBsZWdhY3lfY29kaW5nLjN4LHYgMS4zIDIwMDYvMTIvMjQgMTU6MTI6NTUgdG9tIEV4cCAkCisuVEggbGVnYWN5X2NvZGluZyAzWCAiIgorLlNIIE5BTUUKK1xmQnVzZV9sZWdhY3lfY29kaW5nXGZSIFwtIHVzZSB0ZXJtaW5hbCdzIGRlZmF1bHQgY29sb3JzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlAKKy5zcAorXGZCaW50IHVzZV9sZWdhY3lfY29kaW5nKGludCBsZXZlbCk7XGZQCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkkgdXNlX2xlZ2FjeV9jb2RpbmcoKQorZnVuY3Rpb24gaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4KK0l0IGFsbG93cyB0aGUgY2FsbGVyIHRvIGNoYW5nZSB0aGUgcmVzdWx0IG9mIFxmQnVuY3RybFxmUCwKK2FuZCBzdXBwcmVzcyByZWxhdGVkIGNoZWNrcyB3aXRoaW4gdGhlIGxpYnJhcnkgdGhhdCB3b3VsZCBub3JtYWxseQorY2F1c2Ugbm9ucHJpbnRpbmcgY2hhcmFjdGVycyB0byBiZSByZW5kZXJlZCBpbiB2aXNpYmxlIGZvcm0uCitUaGlzIGFmZmVjdHMgb25seSA4LWJpdCBjaGFyYWN0ZXJzLgorLlBQCitUaGUgXGZJbGV2ZWxcZlAgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSByZXN1bHQ6CisuUlMKKy5UUCA1CiswCit0aGUgbGlicmFyeSBmdW5jdGlvbnMgbm9ybWFsbHksCityZW5kZXJpbmcgbm9ucHJpbnRpbmcgY2hhcmFjdGVycyBhcyBkZXNjcmliZWQgaW4gXGZCdW5jdHJsXGZQLgorLlRQCisxCit0aGUgbGlicmFyeSBpZ25vcmVzIFxmQmlzcHJpbnRmXGZQIGZvciBjb2RlcyBpbiB0aGUgcmFuZ2UgMTYwLTI1NS4KKy5UUAorMgordGhlIGxpYnJhcnkgaWdub3JlcyBcZkJpc3ByaW50ZlxmUCBmb3IgY29kZXMgaW4gdGhlIHJhbmdlIDEyOC0yNTUuCitJdCBhbHNvIG1vZGlmaWVzIHRoZSBvdXRwdXQgb2YgXGZCdW5jdHJsXGZQLCBzaG93aW5nIGNvZGVzIGluIHRoZQorcmFuZ2UgMTI4LTE1OSBhcyBpcy4KKy5SRQorLlNIIFJFVFVSTiBWQUxVRQorSWYgdGhlIHNjcmVlbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQsCitvciB0aGUgXGZJbGV2ZWxcZlAgcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZSwKK3RoZSBmdW5jdGlvbiByZXR1cm5zIFxmQkVSUlxmUC4KK090aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgcHJldmlvdXMgbGV2ZWw6IFxmQjBcZlAsIFxmQjFcZlAgb3IgXGZCMlxmUC4KKy5TSCBQT1JUQUJJTElUWQorVGhpcyByb3V0aW5lIGlzIHNwZWNpZmljIHRvIG5jdXJzZXMuCitJdCB3YXMgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuCitJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFueSBjb2RlIGRlcGVuZGluZyBvbiBuY3Vyc2VzIGV4dGVuc2lvbnMKK2JlIGNvbmRpdGlvbmVkIHVzaW5nIE5DVVJTRVNfVkVSU0lPTi4KKy5TSCBTRUUgQUxTTworXGZCdW5jdHJsXGZSLgorLlNIIEFVVEhPUgorVGhvbWFzIERpY2tleSAodG8gc3VwcG9ydCBseW54J3MgZm9udC1zd2l0Y2hpbmcgZmVhdHVyZSkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tYWtlX3NlZC5zaCBiL25jdXJzZXMtNS43L21hbi9tYWtlX3NlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMmFmYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21ha2Vfc2VkLnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorIyAkSWQ6IG1ha2Vfc2VkLnNoLHYgMS45IDIwMDUvMDcvMTYgMTg6MTU6MzEgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk3LTIwMDUKKyMKKyMgQ29uc3RydWN0IGEgc2VkLXNjcmlwdCB0byBwZXJmb3JtIHJlbmFtaW5nIHdpdGhpbiBtYW4tcGFnZXMuICBPcmlnaW5hbGx5CisjIHdyaXR0ZW4gaW4gbXVjaCBzaW1wbGVyIGZvcm0sIHRoaXMgb25lIGFjY291bnRzIGZvciB0aGUgY29tbW9uIGNhc2VzIG9mCisjIHNlY3Rpb24tbmFtZXMgaW4gbWFuLXBhZ2VzLgorCitpZiB0ZXN0ICQjICE9IDEgOyB0aGVuCisJZWNobyAnPyBleHBlY3RlZCBhIHNpbmdsZSBmaWxlbmFtZScKKwlleGl0IDEKK2ZpCisKK0NPTD1jb2wkJAorSU5QVVQ9aW5wdXQkJAorVVBQRVI9dXBwZXIkJAorU0NSSVBUPXNjcmlwdCQkCitSRVNVTFQ9cmVzdWx0JCQKK3JtIC1mICRVUFBFUiAkU0NSSVBUICRSRVNVTFQKK3RyYXAgInJtIC1mICRDT0wuKiAkSU5QVVQgJFVQUEVSICRTQ1JJUFQgJFJFU1VMVCIgMCAxIDIgNSAxNQorZmdyZXAgLXYgXCMgJDEgfCBcCitzZWQJLWUgJ3MvWwldWwldKi8JL2cnID4kSU5QVVQKKworZm9yIEYgaW4gMSAyIDMgNAorZG8KK3NlZAktZSAncy9cLi8JL2cnICRJTlBVVCB8IFwKK2N1dAktZiAkRiA+ICRDT0wuJEYKK2RvbmUKK2ZvciBGIGluIDIgNAorZG8KKwl0ciBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiA8JENPTC4kRiA+JFVQUEVSCisJbXYgJFVQUEVSICRDT0wuJEYgCitkb25lCitwYXN0ZSAkQ09MLiogfCBcCitzZWQJLWUgJ3MvXi9zXC9cXDwvJyBcCisJLWUgJ3MvJC9cLy8nID4kVVBQRVIKKworZWNobyAiIyBEbyB0aGUgVEggbGluZXMiID4+JFJFU1VMVAorc2VkCS1lICdzL1wvL1wvVEggLycgXAorCS1lICdzLwkvIC8nIFwKKwktZSAncy8JLyAiIlwvVEggLycgXAorCS1lICdzLwkvIC8nIFwKKwktZSAncy9cLyQvICIiXC8vJyBcCisJJFVQUEVSID4+JFJFU1VMVAorCitlY2hvICIjIERvIHRoZSBlbWJlZGRlZCByZWZlcmVuY2VzIiA+PiRSRVNVTFQKK3NlZAktZSAncy88LzxmQi8nIFwKKwktZSAncy8JL1xcXFxmUigvJyBcCisJLWUgJ3MvCS8pXC9mQi8nIFwKKwktZSAncy8JL1xcXFxmUigvJyBcCisJLWUgJ3MvXC8kLylcLy8nIFwKKwkkVVBQRVIgPj4kUkVTVUxUCisKK2VjaG8gIiMgRG8gdGhlIFxmQnh4eFxmUiByZWZlcmVuY2VzIGluIHRoZSAuTkFNRSBzZWN0aW9uIiA+PiRSRVNVTFQKK3NlZAktZSAncy9cXDwvXlxcXFxmQi8nIFwKKwktZSAncy8JW14JXSoJL1xcXFxmW1JQXSAtXC9cXFxcZkIvJyBcCisJLWUgJ3MvCS4qJC9cXFxcZlIgLVwvLycgXAorCSRVUFBFUiA+PiRSRVNVTFQKKworIyBGaW5hbGx5LCBzZW5kIHRoZSByZXN1bHQgdG8gc3RhbmRhcmQgb3V0cHV0CitjYXQgJFJFU1VMVApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL21hbl9kYi5yZW5hbWVzIGIvbmN1cnNlcy01LjcvbWFuL21hbl9kYi5yZW5hbWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOTFlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vbWFuX2RiLnJlbmFtZXMKQEAgLTAsMCArMSwxNzcgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBtYW5fZGIucmVuYW1lcyx2IDAuNDEgMjAwOC8xMC8yNSAyMzoyNDowMyB0b20gRXhwICQKKyMgTWFudWFsLXBhZ2UgcmVuYW1pbmdzIGZvciB0aGUgbWFuX2RiIHByb2dyYW0KKyMKKyMgRmlsZXM6CitjYXB0b2luZm8uMW0JCQljYXB0b2luZm8uMQorY2xlYXIuMQkJCQljbGVhci4xCitjdXJzX2FkZF93Y2guM3gJCQlhZGRfd2NoLjNuY3Vyc2VzCitjdXJzX2FkZF93Y2hzdHIuM3gJCWFkZF93Y2hzdHIuM25jdXJzZXMKK2N1cnNfYWRkY2guM3gJCQlhZGRjaC4zbmN1cnNlcworY3Vyc19hZGRjaHN0ci4zeAkJYWRkY2hzdHIuM25jdXJzZXMKK2N1cnNfYWRkc3RyLjN4CQkJYWRkc3RyLjNuY3Vyc2VzCitjdXJzX2FkZHdzdHIuM3gJCQlhZGR3c3RyLjNuY3Vyc2VzCitjdXJzX2F0dHIuM3gJCQlhdHRyLjNuY3Vyc2VzCitjdXJzX2JlZXAuM3gJCQliZWVwLjNuY3Vyc2VzCitjdXJzX2JrZ2QuM3gJCQlia2dkLjNuY3Vyc2VzCitjdXJzX2JrZ3JuZC4zeAkJCWJrZ3JuZC4zbmN1cnNlcworY3Vyc19ib3JkZXIuM3gJCQlib3JkZXIuM25jdXJzZXMKK2N1cnNfYm9yZGVyX3NldC4zeAkJYm9yZGVyX3NldC4zbmN1cnNlcworY3Vyc19jbGVhci4zeAkJCWNsZWFyLjNuY3Vyc2VzCitjdXJzX2NvbG9yLjN4CQkJY29sb3IuM25jdXJzZXMKK2N1cnNfZGVsY2guM3gJCQlkZWxjaC4zbmN1cnNlcworY3Vyc19kZWxldGVsbi4zeAkJZGVsZXRlbG4uM25jdXJzZXMKK2N1cnNfZXh0ZW5kLjN4CQkJZXh0ZW5zaW9ucy4zbmN1cnNlcworY3Vyc19nZXRfd2NoLjN4CQkJZ2V0X3djaC4zbmN1cnNlcworY3Vyc19nZXRfd3N0ci4zeAkJZ2V0X3dzdHIuM25jdXJzZXMKK2N1cnNfZ2V0Y2NoYXIuM3gJCWdldGNjaGFyLjNuY3Vyc2VzCitjdXJzX2dldGNoLjN4CQkJZ2V0Y2guM25jdXJzZXMKK2N1cnNfZ2V0c3RyLjN4CQkJZ2V0c3RyLjNuY3Vyc2VzCitjdXJzX2dldHl4LjN4CQkJZ2V0eXguM25jdXJzZXMKK2N1cnNfaW5fd2NoLjN4CQkJaW5fd2NoLjNuY3Vyc2VzCitjdXJzX2luX3djaHN0ci4zeAkJaW5fd2Noc3RyLjNuY3Vyc2VzCitjdXJzX2luY2guM3gJCQlpbmNoLjNuY3Vyc2VzCitjdXJzX2luY2hzdHIuM3gJCQlpbmNoc3RyLjNuY3Vyc2VzCitjdXJzX2luaXRzY3IuM3gJCQlpbml0c2NyLjNuY3Vyc2VzCitjdXJzX2lub3B0cy4zeAkJCWlub3B0cy4zbmN1cnNlcworY3Vyc19pbnNfd2NoLjN4CQkJaW5zX3djaC4zbmN1cnNlcworY3Vyc19pbnNfd3N0ci4zeAkJaW5zX3dzdHIuM25jdXJzZXMKK2N1cnNfaW5zY2guM3gJCQlpbnNjaC4zbmN1cnNlcworY3Vyc19pbnNzdHIuM3gJCQlpbnNzdHIuM25jdXJzZXMKK2N1cnNfaW5zdHIuM3gJCQlpbnN0ci4zbmN1cnNlcworY3Vyc19pbndzdHIuM3gJCQlpbndzdHIuM25jdXJzZXMKK2N1cnNfa2VybmVsLjN4CQkJa2VybmVsLjNuY3Vyc2VzCitjdXJzX2xlZ2FjeS4zeAkJCWxlZ2FjeS4zbmN1cnNlcworY3Vyc19tZW1sZWFrcy4zeAkJbWVtbGVha3MuM25jdXJzZXMKK2N1cnNfbW91c2UuM3gJCQltb3VzZS4zbmN1cnNlcworY3Vyc19tb3ZlLjN4CQkJbW92ZS4zbmN1cnNlcworY3Vyc19vcGFxdWUuM3gJCQlvcGFxdWUuM25jdXJzZXMKK2N1cnNfb3V0b3B0cy4zeAkJCW91dG9wdHMuM25jdXJzZXMKK2N1cnNfb3ZlcmxheS4zeAkJCW92ZXJsYXkuM25jdXJzZXMKK2N1cnNfcGFkLjN4CQkJcGFkLjNuY3Vyc2VzCitjdXJzX3ByaW50LjN4CQkJcHJpbnQuM25jdXJzZXMKK2N1cnNfcHJpbnR3LjN4CQkJcHJpbnR3LjNuY3Vyc2VzCitjdXJzX3JlZnJlc2guM3gJCQlyZWZyZXNoLjNuY3Vyc2VzCitjdXJzX3NjYW53LjN4CQkJc2NhbncuM25jdXJzZXMKK2N1cnNfc2NyX2R1bXAuM3gJCXNjcl9kdW1wLjNuY3Vyc2VzCitjdXJzX3Njcm9sbC4zeAkJCXNjcm9sbC4zbmN1cnNlcworY3Vyc19zbGsuM3gJCQlzbGsuM25jdXJzZXMKK2N1cnNfdGVybWF0dHJzLjN4CQl0ZXJtYXR0cnMuM25jdXJzZXMKK2N1cnNfdGVybWNhcC4zeAkJCXRlcm1jYXAuM25jdXJzZXMKK2N1cnNfdGVybWluZm8uM3gJCXRlcm1pbmZvLjNuY3Vyc2VzCitjdXJzX3RocmVhZHMuM3gJCQl0aHJlYWRzLjNuY3Vyc2VzCitjdXJzX3RvdWNoLjN4CQkJdG91Y2guM25jdXJzZXMKK2N1cnNfdHJhY2UuM3gJCQl0cmFjZS4zbmN1cnNlcworY3Vyc191dGlsLjN4CQkJdXRpbC4zbmN1cnNlcworY3Vyc193aW5kb3cuM3gJCQl3aW5kb3cuM25jdXJzZXMKK2N1cnNlcy4zeAkJCW5jdXJzZXMuM25jdXJzZXMKK2RlZmF1bHRfY29sb3JzLjN4CQlkZWZhdWx0X2NvbG9ycy4zbmN1cnNlcworZGVmaW5lX2tleS4zeAkJCWRlZmluZV9rZXkuM25jdXJzZXMKK2Zvcm0uM3gJCQkJZm9ybS4zZm9ybQorZm9ybV9jdXJzb3IuM3gJCQljdXJzb3IuM2Zvcm0KK2Zvcm1fZGF0YS4zeAkJCWRhdGEuM2Zvcm0KK2Zvcm1fZHJpdmVyLjN4CQkJZHJpdmVyLjNmb3JtCitmb3JtX2ZpZWxkLjN4CQkJZmllbGQuM2Zvcm0KK2Zvcm1fZmllbGRfYXR0cmlidXRlcy4zeAlmaWVsZF9hdHRyaWJ1dGVzLjNmb3JtCitmb3JtX2ZpZWxkX2J1ZmZlci4zeAkJZmllbGRfYnVmZmVyLjNmb3JtCitmb3JtX2ZpZWxkX2luZm8uM3gJCWZpZWxkX2luZm8uM2Zvcm0KK2Zvcm1fZmllbGRfanVzdC4zeAkJZmllbGRfanVzdC4zZm9ybQorZm9ybV9maWVsZF9uZXcuM3gJCWZpZWxkX25ldy4zZm9ybQorZm9ybV9maWVsZF9vcHRzLjN4CQlmaWVsZF9vcHRzLjNmb3JtCitmb3JtX2ZpZWxkX3VzZXJwdHIuM3gJCWZpZWxkX3VzZXJwdHIuM2Zvcm0KK2Zvcm1fZmllbGRfdmFsaWRhdGlvbi4zeAlmaWVsZF92YWxpZGF0aW9uLjNmb3JtCitmb3JtX2ZpZWxkdHlwZS4zeAkJZmllbGR0eXBlLjNmb3JtCitmb3JtX2hvb2suM3gJCQlob29rLjNmb3JtCitmb3JtX25ldy4zeAkJCW5ldy4zZm9ybQorZm9ybV9uZXdfcGFnZS4zeAkJbmV3X3BhZ2UuM2Zvcm0KK2Zvcm1fb3B0cy4zeAkJCW9wdHMuM2Zvcm0KK2Zvcm1fcGFnZS4zeAkJCXBhZ2UuM2Zvcm0KK2Zvcm1fcG9zdC4zeAkJCXBvc3QuM2Zvcm0KK2Zvcm1fcmVxdWVzdG5hbWUuM3gJCXJlcXVlc3RuYW1lLjNmb3JtCitmb3JtX3VzZXJwdHIuM3gJCQl1c2VycHRyLjNmb3JtCitmb3JtX3dpbi4zeAkJCXdpbi4zZm9ybQoraW5mb2NtcC4xbQkJCWluZm9jbXAuMQoraW5mb3RvY2FwLjFtCQkJaW5mb3RvY2FwLjEKK2tleV9kZWZpbmVkLjN4CQkJa2V5X2RlZmluZWQuM25jdXJzZXMKK2tleWJvdW5kLjN4CQkJa2V5Ym91bmQuM25jdXJzZXMKK2tleW9rLjN4CQkJa2V5b2suM25jdXJzZXMKK2xlZ2FjeV9jb2RpbmcuM3gJCWxlZ2FjeV9jb2RpbmcuM25jdXJzZXMKK21lbnUuM3gJCQkJbWVudS4zbWVudQorbWVudV9hdHRyaWJ1dGVzLjN4CQlhdHRyaWJ1dGVzLjNtZW51CittZW51X2N1cnNvci4zeAkJCWN1cnNvci4zbWVudQorbWVudV9kcml2ZXIuM3gJCQlkcml2ZXIuM21lbnUKK21lbnVfZm9ybWF0LjN4CQkJZm9ybWF0LjNtZW51CittZW51X2hvb2suM3gJCQlob29rLjNtZW51CittZW51X2l0ZW1zLjN4CQkJaXRlbXMuM21lbnUKK21lbnVfbWFyay4zeAkJCW1hcmsuM21lbnUKK21lbnVfbmV3LjN4CQkJbmV3LjNtZW51CittZW51X29wdHMuM3gJCQlvcHRzLjNtZW51CittZW51X3BhdHRlcm4uM3gJCQlwYXR0ZXJuLjNtZW51CittZW51X3Bvc3QuM3gJCQlwb3N0LjNtZW51CittZW51X3JlcXVlc3RuYW1lLjN4CQlyZXF1ZXN0bmFtZS4zbWVudQorbWVudV9zcGFjaW5nLjN4CQkJc3BhY2luZy4zbWVudQorbWVudV91c2VycHRyLjN4CQkJdXNlcnB0ci4zbWVudQorbWVudV93aW4uM3gJCQl3aW4uM21lbnUKK21pdGVtX2N1cnJlbnQuM3gJCW1lbnVfY3VycmVudC4zbWVudQorbWl0ZW1fbmFtZS4zeAkJCW1lbnVfbmFtZS4zbWVudQorbWl0ZW1fbmV3LjN4CQkJbWVudV9uZXcuM21lbnUKK21pdGVtX29wdHMuM3gJCQltZW51X29wdHMuM21lbnUKK21pdGVtX3VzZXJwdHIuM3gJCW1lbnVfdXNlcnB0ci4zbWVudQorbWl0ZW1fdmFsdWUuM3gJCQltZW51X3ZhbHVlLjNtZW51CittaXRlbV92aXNpYmxlLjN4CQltZW51X3Zpc2libGUuM21lbnUKK25jdXJzZXMuM3gJCQluY3Vyc2VzLjNuY3Vyc2VzCitwYW5lbC4zeAkJCXBhbmVsLjNjdXJzZXMKK3ByaW50Zi4zcwkJCXByaW50Zi4zCitwdXRjLjNzIAkJCXB1dGMuMworcmVzaXpldGVybS4zeAkJCXJlc2l6ZXRlcm0uM25jdXJzZXMKK3NjYW5mLjNzCQkJc2NhbmYuMworc3lzdGVtLjNzCQkJc3lzdGVtLjMKK3Rlcm0uNQkJCQl0ZXJtLjUKK3Rlcm0uNwkJCQl0ZXJtLjcKK3Rlcm1pbmZvLjUJCQl0ZXJtaW5mby41Cit0ZXJtaW5mby5cXFwqbgkJCXRlcm1pbmZvLjUKK3RpYy4xbQkJCQl0aWMuMQordG9lLjFtCQkJCXRvZS4xCit0cHV0LjEJCQkJdHB1dC4xCit0c2V0LjEJCQkJdHNldC4xCit2cHJpbnRmLjNzCQkJdnByaW50Zi4zCit3cmVzaXplLjN4CQkJd3Jlc2l6ZS4zbmN1cnNlcworIworIyBPdGhlcjoKK3RhY2suMW0JCQkJdGFjay4xCisjCitnZXR0eS4xCQkJCWdldHR5LjgKK3NjYW5mLjMJCQkJc2NhbmYuMwordHR5cy41CQkJCXR0eXMuNAordGVybWlvLjcJCQl0ZXJtaW9zLjMKK3N5c3RlbS4zCQkJc3lzdGVtLjMKK3JlZ2NvbXAuM3gJCQlyZWdjb21wLjMKK3JlZ2V4ZWMuM3gJCQlyZWdleGVjLjMKKyMKKyMgdmlsZTpjZmdtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbWFubGlua3Muc2VkIGIvbmN1cnNlcy01LjcvbWFuL21hbmxpbmtzLnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODA1NWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21hbmxpbmtzLnNlZApAQCAtMCwwICsxLDEwMiBAQAorIyAkSWQ6IG1hbmxpbmtzLnNlZCx2IDEuMTMgMjAwOC8wMS8xOSAyMzozMToxNyB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2l2ZW4gYSBtYW5wYWdlIChucm9mZikgYXMgaW5wdXQsIHdyaXRlcyBhIGxpc3Qgb2YgdGhlIG5hbWVzIHRoYXQgYXJlCisjIGxpc3RlZCBpbiB0aGUgIk5BTUUiIHNlY3Rpb24sIGkuZS4sIHRoZSBuYW1lcyB0aGF0IHdlIHdvdWxkIGxpa2UgdG8gdXNlCisjIGFzIGFsaWFzZXMgZm9yIHRoZSBtYW5wYWdlIC1ULkRpY2tleQorIworIyBlbGltaW5hdGUgZm9ybWF0dGluZyBjb250cm9scyB0aGF0IGdldCBpbiB0aGUgd2F5CisvXidcXCIvZAorL1wuXFwiL2QKKy9eXC5ici9kCisvXlwuc3AvZAorL3R5cGVkZWYvZAorcy9eXC5JWC8vCitzL1xcZi4vL2cKK3MvWzosXS8gL2cKKyMKKyMgZWxpbWluYXRlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UsIGNvbnZlcnQgbXVsdGlwbGUgYmxhbmtzIHRvIHNpbmdsZSBzcGFjZQorcy9eWyAJXVsgCV0qLy8KK3MvWyAJXVsgCV0qJC8vCitzL1sgCV1bIAldKi8gL2cKKyMKKyMgY29udmVydCAiLlNIIiBpbnRvIGEgbW9yZSBtYW5hZ2VhYmxlIGZvcm0KK3MvXC5TSFsgCV1bIAldKi8uU0hfKC8KKyMKKyMgaW4gIi5TSCBOQU1FIgorIyBjaGFuZ2UgIlwtIiB0byAiLSIsIGVsaW1pbmF0ZSB0ZXh0IGFmdGVyICItIiwgYW5kIHNwbGl0IHRoZSByZW1haW5pbmcgbGluZXMKKyMgYXQgZWFjaCBzcGFjZSwgbWFraW5nIGEgbGlzdCBvZiBuYW1lczoKKy9eXC5TSF8oTkFNRS8sL15cLlNIXyhTWU5PUFNJUy97CitzL1xcLS4qLyAtLworLyAtL3sKK3MvIC0uKi8vCitzLyAvXAorL2cKK30KKy9eLS97CitkCit9CitzLyAvXAorL2cKK30KKyMKKyMgaW4gIi5TSCBTWU5PUFNJUyIKKyMgcmVtb3ZlIGFueSBsaW5lIHRoYXQgZG9lcyBub3QgY29udGFpbiBhICcoJywgc2luY2Ugd2Ugb25seSB3YW50IGZ1bmN0aW9ucy4KKyMgdGhlbiBzdHJpcCBvZmYgcmV0dXJuLXR5cGUgb2YgZWFjaCBmdW5jdGlvbi4KKyMgZmluYWxseSwgcmVtb3ZlIHRoZSBwYXJhbWV0ZXIgbGlzdCwgd2hpY2ggYmVnaW5zIHdpdGggYSAnKCcuCisvXlwuU0hfKFNZTk9QU0lTLywvXlwuU0hfKERFU0NSSVBUSU9OL3sKKy9eW14oXSokL2QKKyMgcmVkdWNlCisjCS5CICJpbnQgYWRkX3djaCggY29uc3QgY2NoYXJfdCAqXGZJd2NoXGZCICk7IgorIyB0bworIwlhZGRfd2NoKCBjb25zdCBjY2hhcl90ICpcZkl3Y2hcZkIgKTsiCitzL15cKFteIChdKiBbXiAoXSogWypdKlwpLy9nCitzL15cKFteIChdKiBbKl0qXCkvL2cKKyMgdHJpbSBibGFua3MgaW4gY2FzZSB3ZSBoYXZlCisjCXZvaWQgKCopIChGT1JNICopIGZpZWxkX2luaXQoY29uc3QgRk9STSAqZm9ybSk7CitzLykgKC8pKC9nCisjIHJlZHVjZSBzdHVmZiBsaWtlCisjCXZvaWQgKCopKEZPUk0gKikgZmllbGRfaW5pdChjb25zdCBGT1JNICpmb3JtKTsKKyMgdG8KKyMJZmllbGRfaW5pdChjb25zdCBGT1JNICpmb3JtKTsKK3MvXlwoKFteKV0qKVwpXCgoW14pXSopXCkqWyBdKi8vZworIyByZW5hbWUgbWFya2VyIHRlbXBvcmFyaWx5CitzL1wuU0hfKC8uU0hfLworIyBraWxsIGxpbmVzIHdpdGggIik7IiwgYW5kIHRyaW0gb2ZmIGJlZ2lubmluZyBvZiBhcmd1bWVudCBsaXN0Lgorcy9bKCldLiovLworIyByZW5hbWUgbWFya2VyIGJhY2sKK3MvXC5TSF8vLlNIXygvCit9CisjCisjIGRlbGV0ZSAiLlNIIERFU0NSSVBUSU9OIiBhbmQgZm9sbG93aW5nIGxpbmVzCisvXlwuU0hfKERFU0NSSVBUSU9OLywkeworZAorfQorIworIyBkZWxldGUgYW55IHJlbWFpbmluZyBkaXJlY3RpdmVzCisvXlwuL2QKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51LjN4IGIvbmN1cnNlcy01LjcvbWFuL21lbnUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkNmZjMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51LjN4CkBAIC0wLDAgKzEsMTkzIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51LjN4LHYgMS4xOSAyMDA2LzExLzA0IDE4OjM4OjI5IHRvbSBFeHAgJAorLlRIIG1lbnUgM1ggIiIKKy5TSCBOQU1FCitcZkJtZW51XGZSIC0gY3Vyc2VzIGV4dGVuc2lvbiBmb3IgcHJvZ3JhbW1pbmcgbWVudXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgXGZCbWVudVxmUiBsaWJyYXJ5IHByb3ZpZGVzIHRlcm1pbmFsLWluZGVwZW5kZW50IGZhY2lsaXRpZXMgZm9yIGNvbXBvc2luZworbWVudSBzeXN0ZW1zIG9uIGNoYXJhY3Rlci1jZWxsIHRlcm1pbmFscy4gIFRoZSBsaWJyYXJ5IGluY2x1ZGVzOiBpdGVtIHJvdXRpbmVzLAord2hpY2ggY3JlYXRlIGFuZCBtb2RpZnkgbWVudSBpdGVtczsgYW5kIG1lbnUgcm91dGluZXMsIHdoaWNoIGdyb3VwIGl0ZW1zIGludG8KK21lbnVzLCBkaXNwbGF5IG1lbnVzIG9uIHRoZSBzY3JlZW4sIGFuZCBoYW5kbGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXNlci4KKy5QUAorVGhlIFxmQm1lbnVcZlIgbGlicmFyeSB1c2VzIHRoZSBcZkJjdXJzZXNcZlIgbGlicmFyaWVzLCBhbmQgYSBjdXJzZXMKK2luaXRpYWxpemF0aW9uIHJvdXRpbmUgc3VjaCBhcyBcZkJpbml0c2NyXGZSIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyBhbnkgb2YKK3RoZXNlIGZ1bmN0aW9ucy4gIFRvIHVzZSB0aGUgXGZCbWVudVxmUiBsaWJyYXJ5LCBsaW5rIHdpdGggdGhlIG9wdGlvbnMKK1xmQi1sbWVudSAtbGN1cnNlc1xmUi4KKy4KKy5TUyBDdXJyZW50IERlZmF1bHQgVmFsdWVzIGZvciBJdGVtIEF0dHJpYnV0ZXMKKy4KK1RoZSBcZkJtZW51XGZSIGxpYnJhcnkgbWFpbnRhaW5zIGEgZGVmYXVsdCB2YWx1ZSBmb3IgaXRlbSBhdHRyaWJ1dGVzLiAgWW91IGNhbgorZ2V0IG9yIHNldCB0aGlzIGRlZmF1bHQgYnkgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgXGZCZ2V0X1xmUiBvciBcZkJzZXRfXGZSCityb3V0aW5lIHdpdGggYSBcZkJOVUxMXGZSIGl0ZW0gcG9pbnRlci4gIENoYW5naW5nIHRoaXMgZGVmYXVsdCB3aXRoIGEKK1xmQnNldF9cZlIgZnVuY3Rpb24gYWZmZWN0cyBmdXR1cmUgaXRlbSBjcmVhdGlvbnMsIGJ1dCBkb2VzIG5vdCBjaGFuZ2UgdGhlCityZW5kZXJpbmcgb2YgaXRlbXMgYWxyZWFkeSBjcmVhdGVkLgorLgorLlNTIFJvdXRpbmUgTmFtZSBJbmRleAorLgorVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyBlYWNoIFxmQm1lbnVcZlIgcm91dGluZSBhbmQgdGhlIG5hbWUgb2YKK3RoZSBtYW51YWwgcGFnZSBvbiB3aGljaCBpdCBpcyBkZXNjcmliZWQuCisuCisuVFMKK2wgbCAuCitcZkJjdXJzZXNcZlIgUm91dGluZSBOYW1lCU1hbnVhbCBQYWdlIE5hbWUKKz0KK2N1cnJlbnRfaXRlbQlcZkJtaXRlbV9jdXJyZW50XGZSKDNYKQorZnJlZV9pdGVtIAlcZkJtaXRlbV9uZXdcZlIoM1gpCitmcmVlX21lbnUgCVxmQm1lbnVfbmV3XGZSKDNYKQoraXRlbV9jb3VudAlcZkJtZW51X2l0ZW1zXGZSKDNYKQoraXRlbV9kZXNjcmlwdGlvbglcZkJtaXRlbV9uYW1lXGZSKDNYKQoraXRlbV9pbmRleAlcZkJtaXRlbV9jdXJyZW50XGZSKDNYKQoraXRlbV9pbml0IAlcZkJtZW51X2hvb2tcZlIoM1gpCitpdGVtX25hbWUgCVxmQm1pdGVtX25hbWVcZlIoM1gpCitpdGVtX29wdHMgCVxmQm1pdGVtX29wdHNcZlIoM1gpCitpdGVtX29wdHNfb2ZmCVxmQm1pdGVtX29wdHNcZlIoM1gpCitpdGVtX29wdHNfb24JXGZCbWl0ZW1fb3B0c1xmUigzWCkKK2l0ZW1fdGVybSAJXGZCbWVudV9ob29rXGZSKDNYKQoraXRlbV91c2VycHRyCVxmQm1pdGVtX3VzZXJwdHJcZlIoM1gpCitpdGVtX3ZhbHVlCVxmQm1pdGVtX3ZhbHVlXGZSKDNYKQoraXRlbV92aXNpYmxlCVxmQm1pdGVtX3Zpc2libGVcZlIoM1gpCittZW51X2JhY2sgCVxmQm1lbnVfYXR0cmlidXRlc1xmUigzWCkKK21lbnVfZHJpdmVyCVxmQm1lbnVfZHJpdmVyXGZSKDNYKQorbWVudV9mb3JlIAlcZkJtZW51X2F0dHJpYnV0ZXNcZlIoM1gpCittZW51X2Zvcm1hdAlcZkJtZW51X2Zvcm1hdFxmUigzWCkKK21lbnVfZ3JleSAJXGZCbWVudV9hdHRyaWJ1dGVzXGZSKDNYKQorbWVudV9pbml0IAlcZkJtZW51X2hvb2tcZlIoM1gpCittZW51X2l0ZW1zCVxmQm1lbnVfaXRlbXNcZlIoM1gpCittZW51X21hcmsgCVxmQm1lbnVfbWFya1xmUigzWCkKK21lbnVfb3B0cyAJXGZCbWVudV9vcHRzXGZSKDNYKQorbWVudV9vcHRzX29mZglcZkJtZW51X29wdHNcZlIoM1gpCittZW51X29wdHNfb24JXGZCbWVudV9vcHRzXGZSKDNYKQorbWVudV9wYWQgIAlcZkJtZW51X2F0dHJpYnV0ZXNcZlIoM1gpCittZW51X3BhdHRlcm4JXGZCbWVudV9wYXR0ZXJuXGZSKDNYKQorbWVudV9yZXF1ZXN0X2J5X25hbWUJXGZCbWVudV9yZXF1ZXN0bmFtZVxmUigzWCkKK21lbnVfcmVxdWVzdF9uYW1lCVxmQm1lbnVfcmVxdWVzdG5hbWVcZlIoM1gpCittZW51X3NwYWNpbmcJXGZCbWVudV9zcGFjaW5nXGZSKDNYKQorbWVudV9zdWIgIAlcZkJtZW51X3dpblxmUigzWCkKK21lbnVfdGVybSAJXGZCbWVudV9ob29rXGZSKDNYKQorbWVudV91c2VycHRyCVxmQm1lbnVfdXNlcnB0clxmUigzWCkKK21lbnVfd2luICAJXGZCbWVudV93aW5cZlIoM1gpCituZXdfaXRlbSAgCVxmQm1pdGVtX25ld1xmUigzWCkKK25ld19tZW51ICAJXGZCbWVudV9uZXdcZlIoM1gpCitwb3NfbWVudV9jdXJzb3IJXGZCbWVudV9jdXJzb3JcZlIoM1gpCitwb3N0X21lbnUgCVxmQm1lbnVfcG9zdFxmUigzWCkKK3NjYWxlX21lbnUJXGZCbWVudV93aW5cZlIoM1gpCitzZXRfY3VycmVudF9pdGVtCVxmQm1pdGVtX2N1cnJlbnRcZlIoM1gpCitzZXRfaXRlbV9pbml0CVxmQm1lbnVfaG9va1xmUigzWCkKK3NldF9pdGVtX29wdHMJXGZCbWl0ZW1fb3B0c1xmUigzWCkKK3NldF9pdGVtX3Rlcm0JXGZCbWVudV9ob29rXGZSKDNYKQorc2V0X2l0ZW1fdXNlcnB0cglcZkJtaXRlbV91c2VycHRyXGZSKDNYKQorc2V0X2l0ZW1fdmFsdWUJXGZCbWl0ZW1fdmFsdWVcZlIoM1gpCitzZXRfbWVudV9iYWNrCVxmQm1lbnVfYXR0cmlidXRlc1xmUigzWCkKK3NldF9tZW51X2ZvcmUJXGZCbWVudV9hdHRyaWJ1dGVzXGZSKDNYKQorc2V0X21lbnVfZm9ybWF0CVxmQm1lbnVfZm9ybWF0XGZSKDNYKQorc2V0X21lbnVfZ3JleQlcZkJtZW51X2F0dHJpYnV0ZXNcZlIoM1gpCitzZXRfbWVudV9pbml0CVxmQm1lbnVfaG9va1xmUigzWCkKK3NldF9tZW51X2l0ZW1zCVxmQm1lbnVfaXRlbXNcZlIoM1gpCitzZXRfbWVudV9tYXJrCVxmQm1lbnVfbWFya1xmUigzWCkKK3NldF9tZW51X29wdHMJXGZCbWl0ZW1fb3B0c1xmUigzWCkKK3NldF9tZW51X3BhZAlcZkJtZW51X2F0dHJpYnV0ZXNcZlIoM1gpCitzZXRfbWVudV9wYXR0ZXJuCVxmQm1lbnVfcGF0dGVyblxmUigzWCkKK3NldF9tZW51X3NwYWNpbmcJXGZCbWVudV9zcGFjaW5nXGZSKDNYKQorc2V0X21lbnVfc3ViCVxmQm1lbnVfd2luXGZSKDNYKQorc2V0X21lbnVfdGVybQlcZkJtZW51X2hvb2tcZlIoM1gpCitzZXRfbWVudV91c2VycHRyCVxmQm1lbnVfdXNlcnB0clxmUigzWCkKK3NldF9tZW51X3dpbglcZkJtZW51X3dpblxmUigzWCkKK3NldF90b3Bfcm93CVxmQm1pdGVtX2N1cnJlbnRcZlIoM1gpCit0b3Bfcm93ICAgCVxmQm1pdGVtX2N1cnJlbnRcZlIoM1gpCit1bnBvc3RfbWVudQlcZkJtZW51X3Bvc3RcZlIoM1gpCisuVEUKKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLiAgUm91dGluZXMgdGhhdCByZXR1cm4KK2FuIGludGVnZXIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQkFEX1NUQVRFCitSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBmdW5jdGlvbi4KKy5UUCA1CisuQiBFX05PX01BVENICitDaGFyYWN0ZXIgZmFpbGVkIHRvIG1hdGNoLgorLlRQIDUKKy5CIEVfTk9fUk9PTQorTWVudSBpcyB0b28gbGFyZ2UgZm9yIGl0cyB3aW5kb3cuCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorLlRQIDUKKy5CIEVfTk9UX1BPU1RFRAorVGhlIG1lbnUgaGFzIG5vdCBiZWVuIHBvc3RlZC4KKy5UUCA1CisuQiBFX05PVF9TRUxFQ1RBQkxFCitUaGUgZGVzaWduYXRlZCBpdGVtIGNhbm5vdCBiZSBzZWxlY3RlZC4KKy5UUCA1CisuQiBFX1BPU1RFRAorVGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQuCisuVFAgNQorLkIgRV9SRVFVRVNUX0RFTklFRAorVGhlIG1lbnUgZHJpdmVyIGNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXF1ZXN0LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9VTktOT1dOX0NPTU1BTkQKK1RoZSBtZW51IGRyaXZlciBjb2RlIHNhdyBhbiB1bmtub3duIHJlcXVlc3QgY29kZS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAibWVudV8iIGZvciBkZXRhaWxlZAorZGVzY3JpcHRpb25zIG9mIHRoZSBlbnRyeSBwb2ludHMuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZXMKK1xmQjxjdXJzZXMuaD5cZlIgYW5kIFxmQjxldGkuaD5cZlIuCisuUFAKK0luIHlvdXIgbGlicmFyeSBsaXN0LCBsaWJtZW51LmEgc2hvdWxkIGJlIGJlZm9yZSBsaWJuY3Vyc2VzLmE7IHRoYXQgaXMsCit5b3Ugd2FudCB0byBzYXkgYC1sbWVudSAtbG5jdXJzZXMnLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQgKHdoaWNoIHdvdWxkCit1c3VhbGx5IGdpdmUgYSBsaW5rLWVycm9yKS4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuU0ggU0VFIEFMU08KK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL21lbnVfYXR0cmlidXRlcy4zeCBiL25jdXJzZXMtNS43L21hbi9tZW51X2F0dHJpYnV0ZXMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1ZWRiYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X2F0dHJpYnV0ZXMuM3gKQEAgLTAsMCArMSwxMDAgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfYXR0cmlidXRlcy4zeCx2IDEuMTAgMjAwOC8wOC8yMyAxODoyNDoyMyB0b20gRXhwICQKKy5USCBtZW51X2F0dHJpYnV0ZXMgM1ggIiIKKy5TSCBOQU1FCitcZkJtZW51X2F0dHJpYnV0ZXNcZlIgLSBjb2xvciBhbmQgYXR0cmlidXRlIGNvbnRyb2wgZm9yIG1lbnVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV9mb3JlKE1FTlUgKm1lbnUsIGNodHlwZSBhdHRyKTsKKy5icgorY2h0eXBlIG1lbnVfZm9yZShjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IHNldF9tZW51X2JhY2soTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpOworLmJyCitjaHR5cGUgbWVudV9iYWNrKGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCitpbnQgc2V0X21lbnVfZ3JleShNRU5VICptZW51LCBjaHR5cGUgYXR0cik7CisuYnIKK2NodHlwZSBtZW51X2dyZXkoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKK2ludCBzZXRfbWVudV9wYWQoTUVOVSAqbWVudSwgaW50IHBhZCk7CisuYnIKK2ludCBtZW51X3BhZChjb25zdCBNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfZm9yZVxmUiBzZXRzIHRoZSBmb3JlZ3JvdW5kIGF0dHJpYnV0ZSBvZgorXGZJbWVudVxmUi4gVGhpcyBpcyB0aGUgaGlnaGxpZ2h0IHVzZWQgZm9yIHNlbGVjdGVkIG1lbnUgaXRlbXMuCitcZkJtZW51X2ZvcmVcZlIgcmV0dXJucyB0aGUgZm9yZWdyb3VuZCBhdHRyaWJ1dGUuICBUaGUgZGVmYXVsdAoraXMgXGZCQV9SRVZFUlNFXGZSLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfYmFja1xmUiBzZXRzIHRoZSBiYWNrZ3JvdW5kIGF0dHJpYnV0ZSBvZgorXGZJbWVudVxmUi4gVGhpcyBpcyB0aGUgaGlnaGxpZ2h0IHVzZWQgZm9yIHNlbGVjdGFibGUgKGJ1dCBub3QgY3VycmVudGx5CitzZWxlY3RlZCkgbWVudSBpdGVtcy4gIFRoZSBmdW5jdGlvbiBcZkJtZW51X2JhY2tcZlIgcmV0dXJucyB0aGUgYmFja2dyb3VuZAorYXR0cmlidXRlLiAgVGhlIGRlZmF1bHQgaXMgXGZCQV9OT1JNQUxcZlIuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9ncmV5XGZSIHNldHMgdGhlIGdyZXkgYXR0cmlidXRlIG9mIFxmSW1lbnVcZlIuIFRoaXMgaXMKK3RoZSBoaWdobGlnaHQgdXNlZCBmb3IgdW4tc2VsZWN0YWJsZSBtZW51IGl0ZW1zIGluIG1lbnVzIHRoYXQgcGVybWl0IG1vcmUgdGhhbgorb25lIHNlbGVjdGlvbi4gIFRoZSBmdW5jdGlvbiBcZkJtZW51X2dyZXlcZlIgcmV0dXJucyB0aGUgZ3JleSBhdHRyaWJ1dGUuCitUaGUgZGVmYXVsdCBpcyBcZkJBX1VOREVSTElORVxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X3BhZFxmUiBzZXRzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBmaWxsIHRoZSBzcGFjZQorYmV0d2VlbiB0aGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gcGFydHMgb2YgYSBtZW51IGl0ZW0uICBcZkJtZW51X3BhZFxmUiByZXR1cm5zCit0aGUgZ2l2ZW4gbWVudSdzIHBhZCBjaGFyYWN0ZXIuICBUaGUgZGVmYXVsdCBpcyBhIGJsYW5rLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCkgYW5kIHJlbGF0ZWQgcGFnZXMgd2hvc2UgbmFtZXMgYmVnaW4gIm1lbnVfIiBmb3IgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiB0aGUgZW50cnkgcG9pbnRzLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbWVudV9jdXJzb3IuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV9jdXJzb3IuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkZTBiZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X2N1cnNvci4zeApAQCAtMCwwICsxLDczIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X2N1cnNvci4zeCx2IDEuNiAyMDA2LzExLzA0IDE3OjEzOjU3IHRvbSBFeHAgJAorLlRIIG1lbnVfY3Vyc29yIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9jdXJzb3JcZlIgLSBwb3NpdGlvbiBhIG1lbnUncyBjdXJzb3IKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHBvc19tZW51X2N1cnNvcihjb25zdCBNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCcG9zX21lbnVfY3Vyc29yXGZSIHJlc3RvcmVzIHRoZSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24KK2Fzc29jaWF0ZWQgd2l0aCB0aGUgbWVudSdzIHNlbGVjdGVkIGl0ZW0uICBUaGlzIGlzIHVzZWZ1bCBhZnRlciBcZkJjdXJzZXNcZlIKK3JvdXRpbmVzIGhhdmUgYmVlbiBjYWxsZWQgdG8gZG8gc2NyZWVuLXBhaW50aW5nIGluIHJlc3BvbnNlIHRvIGEgbWVudSBzZWxlY3QuCisuU0ggUkVUVVJOIFZBTFVFCitUaGlzIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfTk9UX1BPU1RFRAorVGhlIG1lbnUgaGFzIG5vdCBiZWVuIHBvc3RlZC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X2RyaXZlci4zeCBiL25jdXJzZXMtNS43L21hbi9tZW51X2RyaXZlci4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzY2MDQwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21lbnVfZHJpdmVyLjN4CkBAIC0wLDAgKzEsMjE1IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfZHJpdmVyLjN4LHYgMS4xNSAyMDA4LzA2LzIxIDIxOjU1OjMwIHRvbSBFeHAgJAorLlRIIG1lbnVfZHJpdmVyIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9kcml2ZXJcZlIgLSBjb21tYW5kLXByb2Nlc3NpbmcgbG9vcCBvZiB0aGUgbWVudSBzeXN0ZW0KKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IG1lbnVfZHJpdmVyKE1FTlUgKm1lbnUsIGludCBjKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitPbmNlIGEgbWVudSBoYXMgYmVlbiBwb3N0ZWQgKGRpc3BsYXllZCksIHlvdSBzaG91bGQgZnVubmVsIGlucHV0IGV2ZW50cyB0byBpdAordGhyb3VnaCBcZkJtZW51X2RyaXZlclxmUi4gIFRoaXMgcm91dGluZSBoYXMgdGhyZWUgbWFqb3IgaW5wdXQgY2FzZXM6CisuVFAgMworLQorVGhlIGlucHV0IGlzIGEgZm9ybSBuYXZpZ2F0aW9uIHJlcXVlc3QuCitOYXZpZ2F0aW9uIHJlcXVlc3QgY29kZXMgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGluIFxmQjxmb3JtLmg+XGZQLAord2hpY2ggYXJlIGRpc3RpbmN0IGZyb20gdGhlIGtleS0gYW5kIGNoYXJhY3RlciBjb2RlcyByZXR1cm5lZCBieSBcZkJ3Z2V0Y2hcZlAuCisuVFAgMworLQorVGhlIGlucHV0IGlzIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4KK1ByaW50YWJsZSBjaGFyYWN0ZXJzICh3aGljaCBtdXN0IGJlIHBvc2l0aXZlLCBsZXNzIHRoYW4gMjU2KSBhcmUKK2NoZWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm9ncmFtJ3MgbG9jYWxlIHNldHRpbmdzLgorLlRQIDMKKy0KK1RoZSBpbnB1dCBpcyB0aGUgS0VZX01PVVNFIHNwZWNpYWwga2V5IGFzc29jaWF0ZWQgd2l0aCBhbiBtb3VzZSBldmVudC4KKy5QUAorVGhlIG1lbnUgZHJpdmVyIHJlcXVlc3RzIGFyZSBhcyBmb2xsb3dzOgorLlRQIDUKK1JFUV9MRUZUX0lURU0KK01vdmUgbGVmdCB0byBhbiBpdGVtLgorLlRQIDUKK1JFUV9SSUdIVF9JVEVNCitNb3ZlIHJpZ2h0IHRvIGFuIGl0ZW0uCisuVFAgNQorUkVRX1VQX0lURU0KK01vdmUgdXAgdG8gYW4gaXRlbS4KKy5UUCA1CitSRVFfRE9XTl9JVEVNCitNb3ZlIGRvd24gdG8gYW4gaXRlbS4KKy5UUCA1CitSRVFfU0NSX1VMSU5FCitTY3JvbGwgdXAgYSBsaW5lLgorLlRQIDUKK1JFUV9TQ1JfRExJTkUKK1Njcm9sbCBkb3duIGEgbGluZS4KKy5UUCA1CitSRVFfU0NSX0RQQUdFCitTY3JvbGwgZG93biBhIHBhZ2UuCisuVFAgNQorUkVRX1NDUl9VUEFHRQorU2Nyb2xsIHVwIGEgcGFnZS4KKy5UUCA1CitSRVFfRklSU1RfSVRFTQorTW92ZSB0byB0aGUgZmlyc3QgaXRlbS4KKy5UUCA1CitSRVFfTEFTVF9JVEVNCitNb3ZlIHRvIHRoZSBsYXN0IGl0ZW0uCisuVFAgNQorUkVRX05FWFRfSVRFTQorTW92ZSB0byB0aGUgbmV4dCBpdGVtLgorLlRQIDUKK1JFUV9QUkVWX0lURU0KK01vdmUgdG8gdGhlIHByZXZpb3VzIGl0ZW0uCisuVFAgNQorUkVRX1RPR0dMRV9JVEVNCitTZWxlY3QvZGVzZWxlY3QgYW4gaXRlbS4KKy5UUCA1CitSRVFfQ0xFQVJfUEFUVEVSTgorQ2xlYXIgdGhlIG1lbnUgcGF0dGVybiBidWZmZXIuCisuVFAgNQorUkVRX0JBQ0tfUEFUVEVSTgorRGVsZXRlIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbSB0aGUgcGF0dGVybiBidWZmZXIuCisuVFAgNQorUkVRX05FWFRfTUFUQ0gKK01vdmUgdG8gdGhlIG5leHQgaXRlbSBtYXRjaGluZyB0aGUgcGF0dGVybiBtYXRjaC4KKy5UUCA1CitSRVFfUFJFVl9NQVRDSAorTW92ZSB0byB0aGUgcHJldmlvdXMgaXRlbSBtYXRjaGluZyB0aGUgcGF0dGVybiBtYXRjaC4KKy5QUAorSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIsIHRoZSBjb2RlIGFwcGVuZHMKK2l0IHRvIHRoZSBwYXR0ZXJuIGJ1ZmZlciBhbmQgYXR0ZW1wdHMgdG8gbW92ZSB0byB0aGUgbmV4dCBpdGVtIG1hdGNoaW5nCit0aGUgbmV3IHBhdHRlcm4uICBJZiB0aGVyZSBpcyBubyBzdWNoIG1hdGNoLCBcZkJtZW51X2RyaXZlclxmUiByZXR1cm5zCitcZkJFX05PX01BVENIXGZSIGFuZCBkZWxldGVzIHRoZSBhcHBlbmRlZCBjaGFyYWN0ZXIgZnJvbSB0aGUgYnVmZmVyLgorLlBQCitJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9uZSBvZiB0aGUgYWJvdmUgcHJlLWRlZmluZWQgcmVxdWVzdHMsIHRoZQorY29ycmVzcG9uZGluZyBhY3Rpb24gaXMgcGVyZm9ybWVkLgorLlNTIE1PVVNFIEhBTkRMSU5HCisuUFAKK0lmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIEtFWV9NT1VTRSBzcGVjaWFsIGtleSwgdGhlIGFzc29jaWF0ZWQKK21vdXNlIGV2ZW50IGlzIHRyYW5zbGF0ZWQgaW50byBvbmUgb2YgdGhlIGFib3ZlIHByZS1kZWZpbmVkIHJlcXVlc3RzLgorQ3VycmVudGx5IG9ubHkgY2xpY2tzIGluIHRoZSB1c2VyIHdpbmRvdyAoZS5nLiBpbnNpZGUgdGhlIG1lbnUgZGlzcGxheQorYXJlYSBvciB0aGUgZGVjb3JhdGlvbiB3aW5kb3cpIGFyZSBoYW5kbGVkLgorLlBQCitJZiB5b3UgY2xpY2sgYWJvdmUgdGhlIGRpc3BsYXkgcmVnaW9uIG9mIHRoZSBtZW51OgorLlJTCisuVFAKK2EgUkVRX1NDUl9VTElORSBpcyBnZW5lcmF0ZWQgZm9yIGEgc2luZ2xlIGNsaWNrLAorLlRQCithIFJFUV9TQ1JfVVBBR0UgaXMgZ2VuZXJhdGVkIGZvciBhIGRvdWJsZS1jbGljayBhbmQKKy5UUAorYSBSRVFfRklSU1RfSVRFTSBpcyBnZW5lcmF0ZWQgZm9yIGEgdHJpcGxlLWNsaWNrLgorLlJFCisuUFAKK0lmIHlvdSBjbGljayBiZWxvdyB0aGUgZGlzcGxheSByZWdpb24gb2YgdGhlIG1lbnU6CisuUlMKKy5UUAorYSBSRVFfU0NSX0RMSU5FIGlzIGdlbmVyYXRlZCBmb3IgYSBzaW5nbGUgY2xpY2ssCisuVFAKK2EgUkVRX1NDUl9EUEFHRSBpcyBnZW5lcmF0ZWQgZm9yIGEgZG91YmxlLWNsaWNrIGFuZAorLlRQCithIFJFUV9MQVNUX0lURU0gaXMgZ2VuZXJhdGVkIGZvciBhIHRyaXBsZS1jbGljay4KKy5SRQorLlBQCitJZiB5b3UgY2xpY2sgYXQgYW4gaXRlbSBpbnNpZGUgdGhlIGRpc3BsYXkgYXJlYSBvZiB0aGUgbWVudToKKy5SUworLlRQIDMKKy0KK3RoZSBtZW51IGN1cnNvciBpcyBwb3NpdGlvbmVkIHRvIHRoYXQgaXRlbS4KKy5UUCAzCistCitJZiB5b3UgZG91YmxlLWNsaWNrIGFuIGl0ZW0gYSBSRVFfVE9HR0xFX0lURU0KK2lzIGdlbmVyYXRlZCBhbmQgXGZCRV9VTktOT1dOX0NPTU1BTkRcZlIgaXMgcmV0dXJuZWQuCitUaGlzIHJldHVybiB2YWx1ZSBtYWtlcyBzZW5zZSwKK2JlY2F1c2UgYSBkb3VibGUgY2xpY2sgdXN1YWxseSBtZWFucyB0aGF0IGFuIGl0ZW0tc3BlY2lmaWMgYWN0aW9uIHNob3VsZAorYmUgcmV0dXJuZWQuCitJdCBpcyBleGFjdGx5IHRoZSBwdXJwb3NlIG9mIHRoaXMgcmV0dXJuIHZhbHVlIHRvIHNpZ25hbCB0aGF0IGFuCithcHBsaWNhdGlvbiBzcGVjaWZpYyBjb21tYW5kIHNob3VsZCBiZSBleGVjdXRlZC4KKy5UUCAzCistCitJZiBhIHRyYW5zbGF0aW9uCitpbnRvIGEgcmVxdWVzdCB3YXMgZG9uZSwgXGZCbWVudV9kcml2ZXJcZlIgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoaXMgcmVxdWVzdC4KKy5SRQorLlBQCitJZiB5b3UgY2xpY2tlZCBvdXRzaWRlIHRoZSB1c2VyIHdpbmRvdyBvciB0aGUgbW91c2UgZXZlbnQgY291bGQgbm90IGJlIHRyYW5zbGF0ZWQKK2ludG8gYSBtZW51IHJlcXVlc3QgYW4gXGZCRV9SRVFVRVNUX0RFTklFRFxmUiBpcyByZXR1cm5lZC4KKy5TUyBBUFBMSUNBVElPTi1ERUZJTkVEIENPTU1BTkRTCisuUFAKK0lmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbmVpdGhlciBwcmludGFibGUgbm9yIG9uZSBvZiB0aGUgYWJvdmUKK3ByZS1kZWZpbmVkIG1lbnUgcmVxdWVzdHMgb3IgS0VZX01PVVNFLCB0aGUgZHJpdmUgYXNzdW1lcyBpdCBpcyBhbiBhcHBsaWNhdGlvbi1zcGVjaWZpYworY29tbWFuZCBhbmQgcmV0dXJucyBcZkJFX1VOS05PV05fQ09NTUFORFxmUi4gIEFwcGxpY2F0aW9uLWRlZmluZWQgY29tbWFuZHMKK3Nob3VsZCBiZSBkZWZpbmVkIHJlbGF0aXZlIHRvIFxmQk1BWF9DT01NQU5EXGZSLCB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGVzZQorcHJlLWRlZmluZWQgcmVxdWVzdHMuCisuU0ggUkVUVVJOIFZBTFVFCitcZkJtZW51X2RyaXZlclxmUiByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX0JBRF9TVEFURQorUm91dGluZSB3YXMgY2FsbGVkIGZyb20gYW4gaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gZnVuY3Rpb24uCisuVFAgNQorLkIgRV9OT1RfUE9TVEVECitUaGUgbWVudSBoYXMgbm90IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfVU5LTk9XTl9DT01NQU5ECitUaGUgbWVudSBkcml2ZXIgY29kZSBzYXcgYW4gdW5rbm93biByZXF1ZXN0IGNvZGUuCisuVFAgNQorLkIgRV9OT19NQVRDSAorQ2hhcmFjdGVyIGZhaWxlZCB0byBtYXRjaC4KKy5UUCA1CisuQiBFX1JFUVVFU1RfREVOSUVECitUaGUgbWVudSBkcml2ZXIgY291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksCitcZkJtZW51XGZSKDNYKSwKK1xmQndnZXRjaFxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZXMKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLiBUaGUgc3VwcG9ydCBmb3IgbW91c2UgZXZlbnRzIGlzIG5jdXJzZXMgc3BlY2lmaWMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X2Zvcm1hdC4zeCBiL25jdXJzZXMtNS43L21hbi9tZW51X2Zvcm1hdC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ0NTZmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21lbnVfZm9ybWF0LjN4CkBAIC0wLDAgKzEsODcgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfZm9ybWF0LjN4LHYgMS4xMCAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIG1lbnVfZm9ybWF0IDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9mb3JtYXRcZlIgLSBzZXQgYW5kIGdldCBtZW51IHNpemVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV9mb3JtYXQoTUVOVSAqbWVudSwgaW50IHJvd3MsIGludCBjb2xzKTsKKy5icgordm9pZCBtZW51X2Zvcm1hdChjb25zdCBNRU5VICptZW51LCBpbnQgKnJvd3MsIGludCAqY29scyk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X2Zvcm1hdFxmUiBzZXRzIHRoZSBtYXhpbXVtIGRpc3BsYXkgc2l6ZSBvZiB0aGUgZ2l2ZW4KK21lbnUuICBJZiB0aGlzIHNpemUgaXMgdG9vIHNtYWxsIHRvIGRpc3BsYXkgYWxsIG1lbnUgaXRlbXMsIHRoZSBtZW51IHdpbGwgYmUKK21hZGUgc2Nyb2xsYWJsZS4gSWYgdGhpcyBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBtZW51cyBzdWJ3aW5kb3cgYW5kIHRoZQorc3Vid2luZG93IGlzIHRvbyBzbWFsbCB0byBkaXNwbGF5IGFsbCBtZW51IGl0ZW1zLCBcZkJwb3N0X21lbnUoKVxmUiB3aWxsIGZhaWwuCisuUFAKK1RoZSBkZWZhdWx0IGZvcm1hdCBpcyAxNiByb3dzLCAxIGNvbHVtbi4gIENhbGxpbmcgXGZCc2V0X21lbnVfZm9ybWF0XGZSIHdpdGggYQorbnVsbCBtZW51IHBvaW50ZXIgd2lsbCBjaGFuZ2UgdGhpcyBkZWZhdWx0LiAgQSB6ZXJvIHJvdyBvciBjb2x1bW4gYXJndW1lbnQgdG8KK1xmQnNldF9tZW51X2Zvcm1hdFxmUiBpcyBpbnRlcnByZXRlZCBhcyBhIHJlcXVlc3Qgbm90IHRvIGNoYW5nZSB0aGUgY3VycmVudAordmFsdWUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJtZW51X2Zvcm1hdFxmUiByZXR1cm5zIHRoZSBtYXhpbXVtLXNpemUgY29uc3RyYWludHMgZm9yIHRoZQorZ2l2ZW4gbWVudSBpbnRvIHRoZSBzdG9yYWdlIGFkZHJlc3NlZCBieSBcZkJyb3dzXGZSIGFuZCBcZkJjb2xzXGZSLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfUE9TVEVECitUaGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZC4KKy5UUCA1CisuQiBFX05PVF9DT05ORUNURUQKK05vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbWVudV9ob29rLjN4IGIvbmN1cnNlcy01LjcvbWFuL21lbnVfaG9vay4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRlMWVjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21lbnVfaG9vay4zeApAQCAtMCwwICsxLDEwMSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWVudV9ob29rLjN4LHYgMS45IDIwMDcvMDIvMjQgMTc6MzQ6MDggdG9tIEV4cCAkCisuVEggbWVudV9ob29rIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9ob29rXGZSIC0gc2V0IGhvb2tzIGZvciBhdXRvbWF0aWMgaW52b2NhdGlvbiBieSBhcHBsaWNhdGlvbnMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9pdGVtX2luaXQoTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMpOworLmJyCitNZW51X0hvb2sgaXRlbV9pbml0KGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCitpbnQgc2V0X2l0ZW1fdGVybShNRU5VICptZW51LCBNZW51X0hvb2sgZnVuYyk7CisuYnIKK01lbnVfSG9vayBpdGVtX3Rlcm0oY29uc3QgTUVOVSAqbWVudSk7CisuYnIKK2ludCBzZXRfbWVudV9pbml0KE1FTlUgKm1lbnUsIE1lbnVfSG9vayBmdW5jKTsKKy5icgorTWVudV9Ib29rIG1lbnVfaW5pdChjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IHNldF9tZW51X3Rlcm0oTUVOVSAqbWVudSwgTWVudV9Ib29rIGZ1bmMpOworLmJyCitNZW51X0hvb2sgbWVudV90ZXJtKGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGZ1bmN0aW9ucyBtYWtlIGl0IHBvc3NpYmxlIHRvIHNldCBob29rIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgYXQgdmFyaW91cworcG9pbnRzIGluIHRoZSBhdXRvbWF0aWMgcHJvY2Vzc2luZyBvZiBpbnB1dCBldmVudCBjb2RlcyBieSBcZkJtZW51X2RyaXZlclxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9pdGVtX2luaXRcZlIgc2V0cyBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0IG1lbnUtcG9zdCB0aW1lIGFuZAorZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCBpdGVtIGNoYW5nZXMgKGFmdGVyIHRoZSBjaGFuZ2UpLiAgXGZCaXRlbV9pbml0XGZSCityZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0gaW5pdCBob29rLCBpZiBhbnkgKFxmQk5VTExcZlIgaWYgdGhlcmUgaXMgbm8gc3VjaAoraG9vaykuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfaXRlbV90ZXJtXGZSIHNldHMgYSBob29rIHRvIGJlIGNhbGxlZCBhdCBtZW51LXVucG9zdCB0aW1lCithbmQgZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCBpdGVtIGNoYW5nZXMgKGJlZm9yZSB0aGUgY2hhbmdlKS4gIFxmQml0ZW1fdGVybVxmUgorcmV0dXJucyB0aGUgY3VycmVudCBpdGVtIHRlcm0gaG9vaywgaWYgYW55IChcZkJOVUxMXGZSIGlmIHRoZXJlIGlzIG5vIHN1Y2gKK2hvb2spLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfaW5pdFxmUiBzZXRzIGEgaG9vayB0byBiZSBjYWxsZWQgYXQgbWVudS1wb3N0IHRpbWUgYW5kCitqdXN0IGFmdGVyIHRoZSB0b3Agcm93IG9uIHRoZSBtZW51IGNoYW5nZXMgb25jZSBpdCBpcyBwb3N0ZWQuICBcZkJtZW51X2luaXRcZlIKK3JldHVybnMgdGhlIGN1cnJlbnQgbWVudSBpbml0IGhvb2ssIGlmIGFueSAoXGZCTlVMTFxmUiBpZiB0aGVyZSBpcyBubyBzdWNoCitob29rKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X3Rlcm1cZlIgc2V0cyBhIGhvb2sgdG8gYmUgY2FsbGVkIGF0IG1lbnUtdW5wb3N0IHRpbWUKK2FuZCBqdXN0IGJlZm9yZSB0aGUgdG9wIHJvdyBvbiB0aGUgbWVudSBjaGFuZ2VzIG9uY2UgaXQgaXMgcG9zdGVkLgorXGZCbWVudV90ZXJtXGZSIHJldHVybnMgdGhlIGN1cnJlbnQgbWVudSB0ZXJtIGhvb2ssIGlmIGFueSAoXGZCTlVMTFxmUiBpZiB0aGVyZQoraXMgbm8gc3VjaCBob29rKS4KKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIHBvaW50ZXJzIHJldHVybiBcZkJOVUxMXGZSIG9uIGVycm9yLiAgT3RoZXIgcm91dGluZXMKK3JldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X2l0ZW1zLjN4IGIvbmN1cnNlcy01LjcvbWFuL21lbnVfaXRlbXMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxNTM0MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X2l0ZW1zLjN4CkBAIC0wLDAgKzEsOTMgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfaXRlbXMuM3gsdiAxLjcgMjAwNi8xMS8wNCAxODozNTozMSB0b20gRXhwICQKKy5USCBtZW51X2l0ZW1zIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9pdGVtc1xmUiAtIG1ha2UgYW5kIGJyZWFrIGNvbm5lY3Rpb25zIGJldHdlZW4gaXRlbXMgYW5kIG1lbnVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV9pdGVtcyhNRU5VICptZW51LCBJVEVNICoqaXRlbXMpOworLmJyCitJVEVNICoqbWVudV9pdGVtcyhjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IGl0ZW1fY291bnQoY29uc3QgTUVOVSAqbWVudSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X2l0ZW1zXGZSIGNoYW5nZXMgdGhlIGl0ZW0gcG9pbnRlciBhcnJheSBvZiB0aGUgZ2l2ZW4KK1xmSW1lbnVcZlIuICBUaGUgYXJyYXkgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IGEgXGZCTlVMTFxmUi4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQm1lbnVfaXRlbXNcZlIgcmV0dXJucyB0aGUgaXRlbSBhcnJheSBvZiB0aGUgZ2l2ZW4gbWVudS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQml0ZW1fY291bnRcZlIgcmV0dXJucyB0aGUgY291bnQgb2YgaXRlbXMgaW4gXGZJbWVudVxmUi4KKy5TSCBSRVRVUk4gVkFMVUVTCitUaGUgZnVuY3Rpb24gXGZCbWVudV9pdGVtc1xmUiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlIFxmQk5VTExcZlIpLgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCaXRlbV9jb3VudFxmUiByZXR1cm5zIFxmQkVSUlxmUiAodGhlIGdlbmVyYWwgXGZCY3Vyc2VzXGZSIGVycm9yCityZXR1cm4gdmFsdWUpIGlmIGl0cyBcZkltZW51XGZQIHBhcmFtZXRlciBpcyBcZkJOVUxMXGZQLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfaXRlbXNcZlIgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb2RlcyBvbiBlcnJvcjoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX05PVF9DT05ORUNURUQKK05vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlBQCitUaGUgU1ZyNCBtZW51IGxpYnJhcnkgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgdGhlIFxmQml0ZW1fY291bnRcZlIgZXJyb3IgdmFsdWUKK2FzIC0xICh3aGljaCBpcyB0aGUgdmFsdWUgb2YgXGZCRVJSXGZSKS4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL21lbnVfbWFyay4zeCBiL25jdXJzZXMtNS43L21hbi9tZW51X21hcmsuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiMmIzZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X21hcmsuM3gKQEAgLTAsMCArMSw4NiBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWVudV9tYXJrLjN4LHYgMS45IDIwMDYvMTEvMDQgMTg6MzM6MTggdG9tIEV4cCAkCisuVEggbWVudV9tYXJrIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9tYXJrXGZSIC0gZ2V0IGFuZCBzZXQgdGhlIG1lbnUgbWFyayBzdHJpbmcKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9tZW51X21hcmsoTUVOVSAqbWVudSwgY29uc3QgY2hhciAqbWFyayk7CisuYnIKK2NvbnN0IGNoYXIgKm1lbnVfbWFyayhjb25zdCBNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitJbiBvcmRlciB0byBtYWtlIG1lbnUgc2VsZWN0aW9ucyB2aXNpYmxlIG9uIG9sZGVyIHRlcm1pbmFscyB3aXRob3V0CitoaWdobGlnaHRpbmcgb3IgY29sb3IgY2FwYWJpbGl0eSwgdGhlIG1lbnUgbGlicmFyeSBtYXJrcyBzZWxlY3RlZCBpdGVtcworaW4gYSBtZW51IHdpdGggYSBwcmVmaXggc3RyaW5nLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfbWFya1xmUiBzZXRzIHRoZSBtYXJrIHN0cmluZyBmb3IgdGhlIGdpdmVuIG1lbnUuCitDYWxsaW5nIFxmQnNldF9tZW51X21hcmtcZlIgd2l0aCBhIG51bGwgbWVudSBpdGVtIHdpbGwgYWJvbGlzaCB0aGUgbWFyayBzdHJpbmcuCitOb3RlIHRoYXQgY2hhbmdpbmcgdGhlIGxlbmd0aCBvZiB0aGUgbWFyayBzdHJpbmcgZm9yIGEgbWVudSB3aGlsZSB0aGUKK21lbnUgaXMgcG9zdGVkIGlzIGxpa2VseSB0byBwcm9kdWNlIHVuaGVscGZ1bCBiZWhhdmlvci4KKy5QUAorVGhlIGRlZmF1bHQgc3RyaW5nIGlzICItIiAoYSBkYXNoKS4gQ2FsbGluZyBcZkJzZXRfbWVudV9tYXJrXGZSIHdpdGgKK2Egbm9uLVxmQk5VTExcZlIgbWVudSBhcmd1bWVudCB3aWxsIGNoYW5nZSB0aGlzIGRlZmF1bHQuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJtZW51X21hcmtcZlIgcmV0dXJucyB0aGUgbWVudSdzIG1hcmsgc3RyaW5nIChvciBcZkJOVUxMXGZSIGlmCit0aGVyZSBpcyBub25lKS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJtZW51X21hcmtcZlIgcmV0dXJucyBhIHBvaW50ZXIgKHdoaWNoIG1heSBiZSBcZkJOVUxMXGZSKS4KK0l0IGRvZXMgbm90IHNldCBlcnJuby4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X21hcmtcZlIgbWF5IHJldHVybiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbWVudV9uZXcuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV9uZXcuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiOThlNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X25ldy4zeApAQCAtMCwwICsxLDg2IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X25ldy4zeCx2IDEuOSAyMDA2LzExLzA0IDE4OjMxOjM3IHRvbSBFeHAgJAorLlRIIG1lbnVfbmV3IDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9uZXdcZlIgLSBjcmVhdGUgYW5kIGRlc3Ryb3kgbWVudXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgorTUVOVSAqbmV3X21lbnUoSVRFTSAqKml0ZW1zKTsKKy5icgoraW50IGZyZWVfbWVudShNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCbmV3X21lbnVcZlIgY3JlYXRlcyBhIG5ldyBtZW51IGNvbm5lY3RlZCB0byBhIHNwZWNpZmllZCBpdGVtCitwb2ludGVyIGFycmF5ICh3aGljaCBtdXN0IGJlIFxmQk5VTExcZlItdGVybWluYXRlZCkuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX21lbnVcZlIgZGlzY29ubmVjdHMgXGZJbWVudVxmUiBmcm9tIGl0cyBpdGVtIGFycmF5CithbmQgZnJlZXMgdGhlIHN0b3JhZ2UgYWxsb2NhdGVkIGZvciB0aGUgbWVudS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJuZXdfbWVudVxmUiByZXR1cm5zIFxmQk5VTExcZlIgb24gZXJyb3IuCitJdCBzZXRzIGVycm5vIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24ncyBmYWlsdXJlOgorLlRQIDUKKy5CIEVfTk9UX0NPTk5FQ1RFRAorTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkLCBlLmcuLCBtYWxsb2MgZmFpbHVyZS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQmZyZWVfbWVudVxmUiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBtZW51IGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL21lbnVfb3B0cy4zeCBiL25jdXJzZXMtNS43L21hbi9tZW51X29wdHMuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5MjdjNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X29wdHMuM3gKQEAgLTAsMCArMSwxMDQgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfb3B0cy4zeCx2IDEuMTAgMjAwNy8wMi8yNCAxNzozMzo1OSB0b20gRXhwICQKKy5USCBtZW51X29wdHMgM1ggIiIKKy5TSCBOQU1FCitcZkJtZW51X29wdHNcZlIgLSBzZXQgYW5kIGdldCBtZW51IG9wdGlvbnMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9tZW51X29wdHMoTUVOVSAqbWVudSwgTWVudV9PcHRpb25zIG9wdHMpOworLmJyCitpbnQgbWVudV9vcHRzX29uKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IG1lbnVfb3B0c19vZmYoTUVOVSAqbWVudSwgTWVudV9PcHRpb25zIG9wdHMpOworLmJyCitNZW51X09wdGlvbnMgbWVudV9vcHRzKGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfbWVudV9vcHRzXGZSIHNldHMgYWxsIHRoZSBnaXZlbiBtZW51J3Mgb3B0aW9uIGJpdHMgKG1lbnUKK29wdGlvbiBiaXRzIG1heSBiZSBsb2dpY2FsbHktT1InZWQgdG9nZXRoZXIpLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCbWVudV9vcHRzX29uXGZSIHR1cm5zIG9uIHRoZSBnaXZlbiBvcHRpb24gYml0cywgYW5kIGxlYXZlcworb3RoZXJzIGFsb25lLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCbWVudV9vcHRzX29mZlxmUiB0dXJucyBvZmYgdGhlIGdpdmVuIG9wdGlvbiBiaXRzLCBhbmQgbGVhdmVzCitvdGhlcnMgYWxvbmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJtZW51X29wdHNcZlIgcmV0dXJucyB0aGUgbWVudSdzIGN1cnJlbnQgb3B0aW9uIGJpdHMuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZGVmaW5lZCAoYWxsIGFyZSBvbiBieSBkZWZhdWx0KToKKy5UUCA1CitPX09ORVZBTFVFCitPbmx5IG9uZSBpdGVtIGNhbiBiZSBzZWxlY3RlZCBmb3IgdGhpcyBtZW51LgorLlRQIDUKK09fU0hPV0RFU0MKK0Rpc3BsYXkgdGhlIGl0ZW0gZGVzY3JpcHRpb25zIHdoZW4gdGhlIG1lbnUgaXMgcG9zdGVkLgorLlRQIDUKK09fUk9XTUFKT1IKK0Rpc3BsYXkgdGhlIG1lbnUgaW4gcm93LW1ham9yIG9yZGVyLgorLlRQIDUKK09fSUdOT1JFQ0FTRQorSWdub3JlIHRoZSBjYXNlIHdoZW4gcGF0dGVybi1tYXRjaGluZy4KKy5UUCA1CitPX1NIT1dNQVRDSAorTW92ZSB0aGUgY3Vyc29yIHRvIHdpdGhpbiB0aGUgaXRlbSBuYW1lIHdoaWxlIHBhdHRlcm4tbWF0Y2hpbmcuCisuVFAgNQorT19OT05DWUNMSUMKK0Rvbid0IHdyYXAgYXJvdW5kIG5leHQtaXRlbSBhbmQgcHJldmlvdXMtaXRlbSwKK3JlcXVlc3RzIHRvIHRoZSBvdGhlciBlbmQgb2YgdGhlIG1lbnUuCisuU0ggUkVUVVJOIFZBTFVFCitFeGNlcHQgZm9yIFxmQm1lbnVfb3B0c1xmUiwgZWFjaCByb3V0aW5lIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL21lbnVfcGF0dGVybi4zeCBiL25jdXJzZXMtNS43L21hbi9tZW51X3BhdHRlcm4uM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkZTE2NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X3BhdHRlcm4uM3gKQEAgLTAsMCArMSw5MSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtZW51X3BhdHRlcm4uM3gsdiAxLjExIDIwMDgvMDYvMjEgMjE6NTg6MjAgdG9tIEV4cCAkCisuVEggbWVudV9wYXR0ZXJuIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9wYXR0ZXJuXGZSIC0gZ2V0IGFuZCBzZXQgYSBtZW51J3MgcGF0dGVybiBidWZmZXIKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9tZW51X3BhdHRlcm4oTUVOVSAqbWVudSwgY29uc3QgY2hhciAqcGF0dGVybik7CisuYnIKK2NoYXIgKm1lbnVfcGF0dGVybihjb25zdCBNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitFdmVyeSBtZW51IGhhcyBhbiBhc3NvY2lhdGVkIHBhdHRlcm4gbWF0Y2ggYnVmZmVyLiAgQXMgaW5wdXQgZXZlbnRzIHRoYXQgYXJlCitwcmludGFibGUgY2hhcmFjdGVycyBjb21lIGluLCB0aGV5IGFyZSBhcHBlbmRlZCB0byB0aGlzIG1hdGNoIGJ1ZmZlcgorYW5kIHRlc3RlZCBmb3IgYSBtYXRjaCwgYXMgZGVzY3JpYmVkIGluIFxmQm1lbnVfZHJpdmVyXGZSKDNYKS4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X3BhdHRlcm5cZlIgc2V0cyB0aGUgcGF0dGVybiBidWZmZXIgZm9yIHRoZSBnaXZlbiBtZW51CithbmQgdHJpZXMgdG8gZmluZCB0aGUgZmlyc3QgbWF0Y2hpbmcgaXRlbS4gIElmIGl0IHN1Y2NlZWRzLCB0aGF0IGl0ZW0gYmVjb21lcworY3VycmVudDsgaWYgbm90LCB0aGUgY3VycmVudCBpdGVtIGRvZXMgbm90IGNoYW5nZS4gCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJtZW51X3BhdHRlcm5cZlIgcmV0dXJucyB0aGUgcGF0dGVybiBidWZmZXIgb2YgdGhlIGdpdmVuCitcZkltZW51XGZSLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIFxmQm1lbnVfcGF0dGVyblxmUiByZXR1cm5zIGEgcG9pbnRlciwgd2hpY2ggaXMgXGZCTlVMTFxmUiBpZiB0aGUgXGZJbWVudVxmUCBwYXJhbWV0ZXIgaXMgXGZCTlVMTFxmUC4KK090aGVyd2lzZSwgaXQgaXMgYSBwb2ludGVyIHRvIGEgc3RyaW5nIHdoaWNoIGlzIGVtcHR5IGlmIG5vIHBhdHRlcm4gaGFzIGJlZW4gc2V0LgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCc2V0X21lbnVfcGF0dGVyblxmUiBtYXkgcmV0dXJuIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9CQURfU1RBVEUKK1JvdXRpbmUgd2FzIGNhbGxlZCBmcm9tIGFuIGluaXRpYWxpemF0aW9uIG9yIHRlcm1pbmF0aW9uIGZ1bmN0aW9uLgorLlRQIDUKKy5CIEVfTk9UX0NPTk5FQ1RFRAorTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byBtZW51LgorLlRQIDUKKy5CIEVfTk9fTUFUQ0gKK0NoYXJhY3RlciBmYWlsZWQgdG8gbWF0Y2guCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X3Bvc3QuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV9wb3N0LjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0N2ZhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV9wb3N0LjN4CkBAIC0wLDAgKzEsOTEgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfcG9zdC4zeCx2IDEuOSAyMDA2LzExLzA0IDE3OjEyOjAwIHRvbSBFeHAgJAorLlRIIG1lbnVfcG9zdCAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfcG9zdFxmUiAtIHdyaXRlIG9yIGVyYXNlIG1lbnVzIGZyb20gYXNzb2NpYXRlZCBzdWJ3aW5kb3dzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBwb3N0X21lbnUoTUVOVSAqbWVudSk7CisuYnIKK2ludCB1bnBvc3RfbWVudShNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCcG9zdF9tZW51XGZSIGRpc3BsYXlzIGEgbWVudSB0byBpdHMgYXNzb2NpYXRlZCBzdWJ3aW5kb3cuICBUbwordHJpZ2dlciBwaHlzaWNhbCBkaXNwbGF5IG9mIHRoZSBzdWJ3aW5kb3csIHVzZSBcZkJyZWZyZXNoXGZSIG9yIHNvbWUgZXF1aXZhbGVudAorXGZCY3Vyc2VzXGZSIHJvdXRpbmUgKHRoZSBpbXBsaWNpdCBcZkJkb3VwZGF0ZVxmUiB0cmlnZ2VyZWQgYnkgYW4gXGZCY3Vyc2VzXGZSCitpbnB1dCByZXF1ZXN0IHdpbGwgZG8pLiBcZkJwb3N0X21lbnVcZlIgcmVzZXRzIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBpdGVtcy4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnVucG9zdF9tZW51XGZSIGVyYXNlcyBtZW51IGZyb20gaXRzIGFzc29jaWF0ZWQgc3Vid2luZG93LgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9QT1NURUQKK1RoZSBtZW51IGhhcyBhbHJlYWR5IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfQkFEX1NUQVRFCitSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBmdW5jdGlvbi4KKy5UUCA1CisuQiBFX05PX1JPT00KK01lbnUgaXMgdG9vIGxhcmdlIGZvciBpdHMgd2luZG93LiBZb3Ugc2hvdWxkIGNvbnNpZGVyIHRvIHVzZQorXGZCc2V0X21lbnVfZm9ybWF0KClcZlIgdG8gc29sdmUgdGhlIHByb2JsZW0uCisuVFAgNQorLkIgRV9OT1RfUE9TVEVECitUaGUgbWVudSBoYXMgbm90IGJlZW4gcG9zdGVkLgorLlRQIDUKKy5CIEVfTk9UX0NPTk5FQ1RFRAorTm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byB0aGUgbWVudS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X3JlcXVlc3RuYW1lLjN4IGIvbmN1cnNlcy01LjcvbWFuL21lbnVfcmVxdWVzdG5hbWUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NWFhNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9tZW51X3JlcXVlc3RuYW1lLjN4CkBAIC0wLDAgKzEsNzEgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfcmVxdWVzdG5hbWUuM3gsdiAxLjcgMjAwNi8xMS8wNCAxNzo1NjowOSB0b20gRXhwICQKKy5USCBtZW51X3JlcXVlc3RuYW1lIDNYICIiCisuU0ggTkFNRQorXGZCbWVudV9yZXF1ZXN0bmFtZVxmUiAtIGhhbmRsZSBwcmludGFibGUgbWVudSByZXF1ZXN0IG5hbWVzCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2NvbnN0IGNoYXIgKm1lbnVfcmVxdWVzdF9uYW1lKGludCByZXF1ZXN0KTsKKy5icgoraW50IG1lbnVfcmVxdWVzdF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJtZW51X3JlcXVlc3RfbmFtZVxmUiByZXR1cm5zIHRoZSBwcmludGFibGUgbmFtZSBvZiBhIG1lbnUKK3JlcXVlc3QgY29kZS4KKy5icgorVGhlIGZ1bmN0aW9uIFxmQm1lbnVfcmVxdWVzdF9ieV9uYW1lXGZSIHNlYXJjaGVzIGluIHRoZSBuYW1lLXRhYmxlIGZvciBhIHJlcXVlc3QKK3dpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHJldHVybnMgaXRzIHJlcXVlc3QgY29kZS4KK090aGVyd2lzZSBFX05PX01BVENIIGlzIHJldHVybmVkLgorLlNIIFJFVFVSTiBWQUxVRQorXGZCbWVudV9yZXF1ZXN0X25hbWVcZlIgcmV0dXJucyBcZkJOVUxMXGZSIG9uIGVycm9yCithbmQgc2V0cyBlcnJubyB0byBcZkJFX0JBRF9BUkdVTUVOVFxmUi4KKy5icgorXGZCbWVudV9yZXF1ZXN0X2J5X25hbWVcZlIgcmV0dXJucyBcZkJFX05PX01BVENIXGZSIG9uIGVycm9yLgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0CithbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X3NwYWNpbmcuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV9zcGFjaW5nLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZTAzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV9zcGFjaW5nLjN4CkBAIC0wLDAgKzEsODQgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfc3BhY2luZy4zeCx2IDEuOCAyMDA0LzEyLzExIDIzOjM5OjA3IHRvbSBFeHAgJAorLlRIIG1lbnVfc3BhY2luZyAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfc3BhY2luZ1xmUiAtIENvbnRyb2wgc3BhY2luZyBiZXR3ZWVuIG1lbnUgaXRlbXMuCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV9zcGFjaW5nKE1FTlUgKm1lbnUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgc3BjX2Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNwY19yb3dzLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNwY19jb2x1bW5zKTsKKy5icgoraW50IG1lbnVfc3BhY2luZyhjb25zdCBNRU5VICptZW51LAorICAgICAgICAgICAgICAgICBpbnQqIHNwY19kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgaW50KiBzcGNfcm93cywKKyAgICAgICAgICAgICAgICAgaW50KiBzcGNfY29sdW1ucyk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQnNldF9tZW51X3NwYWNpbmdcZlIgc2V0cyB0aGUgc3BhY2luZyBpbmZvcm1hdGlvbnMgZm9yIHRoZSBtZW51LgorXGZCc3BjX2Rlc2NyaXB0aW9uXGZSIGNvbnRyb2xzIHRoZSBudW1iZXIgb2Ygc3BhY2VzIGJldHdlZW4gYW4gaXRlbSBuYW1lIGFuZCBhbiBpdGVtCitkZXNjcmlwdGlvbi4gSXQgbXVzdCBub3QgYmUgbGFyZ2VyIHRoYW4gXGZCVEFCU0laRVxmUi4gVGhlIG1lbnUgc3lzdGVtIHB1dHMgaW4gdGhlCittaWRkbGUgb2YgdGhpcyBzcGFjaW5nIGFyZWEgdGhlIHBhZCBjaGFyYWN0ZXIuIFRoZSByZW1haW5pbmcgcGFydHMgYXJlIGZpbGxlZCB3aXRoCitzcGFjZXMuCitcZkJzcGNfcm93c1xmUiBjb250cm9scyB0aGUgbnVtYmVyIG9mIHJvd3MgdGhhdCBhcmUgdXNlZCBmb3IgYW4gaXRlbS4gSXQgbXVzdCBub3QgYmUKK2xhcmdlciB0aGFuIDMuIFRoZSBtZW51IHN5c3RlbSBpbnNlcnRzIHRoZSBibGFuayBsaW5lcyBiZXR3ZWVuIGl0ZW0gcm93cywgdGhlc2UgbGluZXMKK3dpbGwgY29udGFpbiB0aGUgcGFkIGNoYXJhY3RlciBpbiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb25zLgorXGZCc3BjX2NvbHVtbnNcZlIgY29udHJvbHMgdGhlIG51bWJlciBvZiBibGFua3MgYmV0d2VlbiBjb2x1bW5zIG9mIGl0ZW1zLiBJdCBtdXN0IG5vdAorYmUgbGFyZ2VyIHRoYW4gVEFCU0laRS4KK0EgdmFsdWUgb2YgMCBmb3IgYWxsIHRoZSBzcGFjaW5nIHZhbHVlcyByZXNldHMgdGhlbSB0byB0aGUgZGVmYXVsdCwgd2hpY2ggaXMgMSBmb3IgYWxsCitvZiB0aGVtLgorLmJyCitUaGUgZnVuY3Rpb24gXGZCbWVudV9zcGFjaW5nXGZSIHBhc3NlcyBiYWNrIHRoZSBzcGFjaW5nIGluZm8gZm9yIHRoZSBtZW51LiBJZiBhCitwb2ludGVyIGlzIE5VTEwsIHRoaXMgc3BlY2lmaWMgaW5mbyBpcyBzaW1wbHkgbm90IHJldHVybmVkLgorLlNIIFJFVFVSTiBWQUxVRQorQm90aCByb3V0aW5lcyByZXR1cm4gXGZCRV9PS1xmUiBvbiBzdWNjZXNzLiBcZkJzZXRfbWVudV9zcGFjaW5nXGZSIG1heSByZXR1cm4KK1xmQkVfUE9TVEVEXGZSIGlmIHRoZSBtZW51IGlzIHBvc3RlZCwgb3IgXGZCRV9CQURfQVJHVU1FTlRcZlIgaWYgb25lIG9mIHRoZQorc3BhY2luZyB2YWx1ZXMgaXMgb3V0IG9mIHJhbmdlLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gbmN1cnNlcy4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcsIEJTRCBvciBTeXN0ZW0gViBpbXBsZW1lbnRhdGlvbnMuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0CithbnkgY29kZSBkZXBlbmRpbmcgb24gdGhlbSBiZSBjb25kaXRpb25lZCB1c2luZyBOQ1VSU0VTX1ZFUlNJT04uCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X3VzZXJwdHIuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV91c2VycHRyLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YmUyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vbWVudV91c2VycHRyLjN4CkBAIC0wLDAgKzEsNjkgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfdXNlcnB0ci4zeCx2IDEuOCAyMDA2LzExLzA0IDE4OjIxOjAzIHRvbSBFeHAgJAorLlRIIG1lbnVfdXNlcnB0ciAzWCAiIgorLlNIIE5BTUUKK1xmQm1lbnVfdXNlcnB0clxmUiAtIGFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggYSBtZW51IGl0ZW0KKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9tZW51X3VzZXJwdHIoTUVOVSAqbWVudSwgdm9pZCAqdXNlcnB0cik7CisuYnIKK3ZvaWQgKm1lbnVfdXNlcnB0cihjb25zdCBNRU5VICptZW51KTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitFdmVyeSBtZW51IGFuZCBldmVyeSBtZW51IGl0ZW0gaGFzIGEgZmllbGQgdGhhdCBjYW4gYmUgdXNlZCB0byBob2xkCithcHBsaWNhdGlvbi1zcGVjaWZpYyBkYXRhICh0aGF0IGlzLCB0aGUgbWVudS1kcml2ZXIgY29kZSBsZWF2ZXMgaXQgYWxvbmUpLgorVGhlc2UgZnVuY3Rpb25zIGdldCBhbmQgc2V0IHRoZSBtZW51IHVzZXIgcG9pbnRlciBmaWVsZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1xmQm1lbnVfdXNlcnB0clxmUiByZXR1cm5zIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlIFxmQk5VTExcZlIpLgorSXQgZG9lcyBub3Qgc2V0IGVycm5vLgorLlBQCitcZkJzZXRfbWVudV91c2VycHRyXGZQIHJldHVybnMgXGZCRV9PS1xmUCAoc3VjY2VzcykuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlBQCitUaGUgdXNlciBwb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyLgorV2UgY2hvc2Ugbm90IHRvIGxlYXZlIGl0IGFzIGEgY2hhciBwb2ludGVyIGZvciBTVnI0IGNvbXBhdGliaWxpdHkuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9tZW51X3dpbi4zeCBiL25jdXJzZXMtNS43L21hbi9tZW51X3dpbi4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM1NmUxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21lbnVfd2luLjN4CkBAIC0wLDAgKzEsOTUgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1lbnVfd2luLjN4LHYgMS44IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCAkCisuVEggbWVudV93aW4gM1ggIiIKKy5TSCBOQU1FCitcZkJtZW51X3dpblxmUiAtIG1ha2UgYW5kIGJyZWFrIG1lbnUgd2luZG93IGFuZCBzdWJ3aW5kb3cgYXNzb2NpYXRpb25zCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxtZW51Lmg+XGZSCisuYnIKK2ludCBzZXRfbWVudV93aW4oTUVOVSAqbWVudSwgV0lORE9XICp3aW4pOworLmJyCitXSU5ET1cgKm1lbnVfd2luKGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCitpbnQgc2V0X21lbnVfc3ViKE1FTlUgKm1lbnUsIFdJTkRPVyAqc3ViKTsKKy5icgorV0lORE9XICptZW51X3N1Yihjb25zdCBNRU5VICptZW51KTsKKy5icgoraW50IHNjYWxlX21lbnUoY29uc3QgTUVOVSAqbWVudSwgaW50ICpyb3dzLCBpbnQgKmNvbHVtbnMpOworLmJyCisuU0ggREVTQ1JJUFRJT04KK0V2ZXJ5IG1lbnUgaGFzIGFuIGFzc29jaWF0ZWQgcGFpciBvZiBcZkJjdXJzZXNcZlIgd2luZG93cy4gIFRoZSBtZW51IHdpbmRvdworZGlzcGxheXMgYW55IHRpdGxlIGFuZCBib3JkZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSB3aW5kb3c7IHRoZSBtZW51IHN1YndpbmRvdworZGlzcGxheXMgdGhlIGl0ZW1zIG9mIHRoZSBtZW51IHRoYXQgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4KKy5QUAorVGhlIGZpcnN0IGZvdXIgZnVuY3Rpb25zIGdldCBhbmQgc2V0IHRob3NlIHdpbmRvd3MuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNldAorZWl0aGVyIHdpbmRvdzsgYnkgZGVmYXVsdCwgdGhlIGRyaXZlciBjb2RlIHVzZXMgXGZCc3Rkc2NyXGZSIGZvciBib3RoLgorLlBQCitJbiB0aGUgXGZCc2V0X1xmUiBmdW5jdGlvbnMsIHdpbmRvdyBhcmd1bWVudCBvZiBcZkJOVUxMXGZSIGlzIHRyZWF0ZWQgYXMgdGhvdWdoCitpdCB3ZXJlIFxmQnN0c2RjclxmUi4gIEEgbWVudSBhcmd1bWVudCBvZiBcZkJOVUxMXGZSIGlzIHRyZWF0ZWQgYXMgYSByZXF1ZXN0Cit0byBjaGFuZ2UgdGhlIHN5c3RlbSBkZWZhdWx0IG1lbnUgd2luZG93IG9yIHN1YndpbmRvdy4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQnNjYWxlX21lbnVcZlIgcmV0dXJucyB0aGUgbWluaW11bSBzaXplIHJlcXVpcmVkIGZvciB0aGUKK3N1YndpbmRvdyBvZiBcZkltZW51XGZSLgorLlNIIFJFVFVSTiBWQUxVRQorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IuICBSb3V0aW5lcyB0aGF0IHJldHVybgorYW4gaW50ZWdlciByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQgKHNlZSBcZkJlcnJub1xmUikuCisuVFAgNQorLkIgRV9CQURfQVJHVU1FTlQKK1JvdXRpbmUgZGV0ZWN0ZWQgYW4gaW5jb3JyZWN0IG9yIG91dC1vZi1yYW5nZSBhcmd1bWVudC4KKy5UUCA1CisuQiBFX1BPU1RFRAorVGhlIG1lbnUgaGFzIGFscmVhZHkgYmVlbiBwb3N0ZWQuCisuVFAgNQorLkIgRV9OT1RfQ09OTkVDVEVECitObyBpdGVtcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZW51LgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL21pdGVtX2N1cnJlbnQuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWl0ZW1fY3VycmVudC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzlmNDAxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21pdGVtX2N1cnJlbnQuM3gKQEAgLTAsMCArMSwxMDIgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1pdGVtX2N1cnJlbnQuM3gsdiAxLjExIDIwMDYvMTEvMDQgMTg6MTg6MTkgdG9tIEV4cCAkCisuVEggbWl0ZW1fY3VycmVudCAzWCAiIgorLlNIIE5BTUUKK1xmQm1pdGVtX2N1cnJlbnRcZlIgLSBzZXQgYW5kIGdldCBjdXJyZW50X21lbnVfaXRlbQorLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitpbnQgc2V0X2N1cnJlbnRfaXRlbShNRU5VICptZW51LCBjb25zdCBJVEVNICppdGVtKTsKKy5icgorSVRFTSAqY3VycmVudF9pdGVtKGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCitpbnQgc2V0X3RvcF9yb3coTUVOVSAqbWVudSwgaW50IHJvdyk7CisuYnIKK2ludCB0b3Bfcm93KGNvbnN0IE1FTlUgKm1lbnUpOworLmJyCitpbnQgaXRlbV9pbmRleChjb25zdCBJVEVNICppdGVtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb24gXGZCc2V0X2N1cnJlbnRfaXRlbVxmUiBzZXRzIHRoZSBjdXJyZW50IGl0ZW0gKHRoZSBpdGVtIG9uIHdoaWNoCit0aGUgbWVudSBjdXJzb3IgaXMgcG9zaXRpb25lZCkuICBcZkJjdXJyZW50X2l0ZW1cZlIgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCitjdXJyZW50IGl0ZW0gaW4gdGhlIGdpdmVuIG1lbnUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJzZXRfdG9wX3Jvd1xmUiBzZXRzIHRoZSB0b3Agcm93IG9mIHRoZSBtZW51IHRvIHNob3cgdGhlIGdpdmVuCityb3cgKHRoZSB0b3Agcm93IGlzIGluaXRpYWxseSAwLCBhbmQgaXMgcmVzZXQgdG8gdGhpcyB2YWx1ZSB3aGVuZXZlciB0aGUKK1xmQk9fUk9XTUFKT1JcZlIgb3B0aW9uIGlzIHRvZ2dsZWQpLiAgVGhlIGl0ZW0gbGVmdG1vc3Qgb24gdGhlIGdpdmVuIHJvdworYmVjb21lcyBjdXJyZW50LiAgVGhlIGZ1bmN0aW9uIFxmQnRvcF9yb3dcZlIgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSB0b3AgbWVudQorcm93IGJlaW5nIGRpc3BsYXllZC4KKy5QUAorVGhlIGZ1bmN0aW9uIFxmQml0ZW1faW5kZXhcZlIgcmV0dXJucyB0aGUgKHplcm8tb3JpZ2luKSBpbmRleCBvZiBcZklpdGVtXGZSIGluCit0aGUgbWVudSdzIGl0ZW0gcG9pbnRlciBsaXN0LgorLlNIIFJFVFVSTiBWQUxVRQorXGZCY3VycmVudF9pdGVtXGZSIHJldHVybnMgYSBwb2ludGVyICh3aGljaCBtYXkgYmUgXGZCTlVMTFxmUikuCitJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisuUFAKK1xmQnRvcF9yb3dcZlIgYW5kIFxmQml0ZW1faW5kZXhcZlIgcmV0dXJuIFxmQkVSUlxmUiAodGhlIGdlbmVyYWwgXGZCY3Vyc2VzXGZSCitlcnJvciB2YWx1ZSkgaWYgdGhlaXIgXGZJbWVudVxmUCBwYXJhbWV0ZXIgaXMgXGZCTlVMTFxmUC4KKy5QUAorXGZCc2V0X2N1cnJlbnRfaXRlbVxmUiBhbmQgXGZCc2V0X3RvcF9yb3dcZlIgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfQkFEX1NUQVRFCitSb3V0aW5lIHdhcyBjYWxsZWQgZnJvbSBhbiBpbml0aWFsaXphdGlvbiBvciB0ZXJtaW5hdGlvbiBmdW5jdGlvbi4KKy5UUCA1CisuQiBFX05PVF9DT05ORUNURUQKK05vIGl0ZW1zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuUFAKK1RoZSBTVnI0IG1lbnUgbGlicmFyeSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyB0aGUgXGZCdG9wX3Jvd1xmUiBhbmQKK1xmQmluZGV4X2l0ZW1cZlIgZXJyb3IgdmFsdWUgYXMgLTEgKHdoaWNoIGlzIHRoZSB2YWx1ZSBvZiBcZkJFUlJcZlIpLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbWl0ZW1fbmFtZS4zeCBiL25jdXJzZXMtNS43L21hbi9taXRlbV9uYW1lLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDA5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vbWl0ZW1fbmFtZS4zeApAQCAtMCwwICsxLDY1IEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtaXRlbV9uYW1lLjN4LHYgMS42IDIwMDYvMTEvMDQgMTc6NTM6NDAgdG9tIEV4cCAkCisuVEggbWl0ZW1fbmFtZSAzWCAiIgorLlNIIE5BTUUKK1xmQm1pdGVtX25hbWVcZlIgLSBnZXQgbWVudSBpdGVtIG5hbWUgYW5kIGRlc2NyaXB0aW9uIGZpZWxkcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8bWVudS5oPlxmUgorLmJyCitjb25zdCBjaGFyICppdGVtX25hbWUoY29uc3QgSVRFTSAqaXRlbSk7CisuYnIKK2NvbnN0IGNoYXIgKml0ZW1fZGVzY3JpcHRpb24oY29uc3QgSVRFTSAqaXRlbSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9uIFxmQml0ZW1fbmFtZVxmUiByZXR1cm5zIHRoZSBuYW1lIHBhcnQgb2YgdGhlIGdpdmVuIGl0ZW0uCisuYnIKK1RoZSBmdW5jdGlvbiBcZkJpdGVtX2Rlc2NyaXB0aW9uXGZSIHJldHVybnMgdGhlIGRlc2NyaXB0aW9uIHBhcnQgb2YgdGhlIGdpdmVuCitpdGVtLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlc2Ugcm91dGluZXMgcmV0dXJuIGEgcG9pbnRlciAod2hpY2ggbWF5IGJlIFxmQk5VTExcZlIpLgorVGhleSBkbyBub3Qgc2V0IGVycm5vLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuCitUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbiBWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbWl0ZW1fbmV3LjN4IGIvbmN1cnNlcy01LjcvbWFuL21pdGVtX25ldy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGZhNmVkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21pdGVtX25ldy4zeApAQCAtMCwwICsxLDkwIEBACisnXCIgdAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBtaXRlbV9uZXcuM3gsdiAxLjEwIDIwMDYvMTEvMDQgMTg6MTY6MzYgdG9tIEV4cCAkCisuVEggbWl0ZW1fbmV3IDNYICIiCisuU0ggTkFNRQorXGZCbWl0ZW1fbmV3XGZSIC0gY3JlYXRlIGFuZCBkZXN0cm95IG1lbnUgaXRlbXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgorSVRFTSAqbmV3X2l0ZW0oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworLmJyCitpbnQgZnJlZV9pdGVtKElURU0gKml0ZW0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJuZXdfaXRlbVxmUiBhbGxvY2F0ZXMgYSBuZXcgaXRlbSBhbmQgaW5pdGlhbGl6ZXMgaXQgZnJvbSB0aGUKK1xmQm5hbWVcZlIgYW5kIFxmQmRlc2NyaXB0aW9uXGZSIHBvaW50ZXJzLiBQbGVhc2Ugbm90aWNlIHRoYXQgdGhlIGl0ZW0gc3RvcmVzCitvbmx5IHRoZSBwb2ludGVycyB0byB0aGUgbmFtZSBhbmQgZGVzY3JpcHRpb24uIFRob3NlIHBvaW50ZXJzIG11c3QgYmUgdmFsaWQKK2R1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIGl0ZW0uIFNvIHlvdSBzaG91bGQgYmUgdmVyeSBjYXJlZnVsIHdpdGggbmFtZXMKK29yIGRlc2NyaXB0aW9ucyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIG9mIHNvbWUgcm91dGluZXMuCisuYnIKK1RoZSBmdW5jdGlvbiBcZkJmcmVlX2l0ZW1cZlIgZGUtYWxsb2NhdGVzIGFuIGl0ZW0uIFBsZWFzZSBub3RpY2UgdGhhdCBpdAoraXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZWxlYXNlIHRoZSBtZW1vcnkgZm9yIHRoZQorbmFtZSBvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW0uCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gXGZCbmV3X2l0ZW1cZlIgcmV0dXJucyBcZkJOVUxMXGZSIG9uIGVycm9yLgorSXQgc2V0cyBlcnJubyBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uJ3MgZmFpbHVyZToKKy5UUCA1CisuQiBFX0JBRF9BUkdVTUVOVAorUm91dGluZSBkZXRlY3RlZCBhbiBpbmNvcnJlY3Qgb3Igb3V0LW9mLXJhbmdlIGFyZ3VtZW50LgorLlRQIDUKKy5CIEVfU1lTVEVNX0VSUk9SCitTeXN0ZW0gZXJyb3Igb2NjdXJyZWQsIGUuZy4sIG1hbGxvYyBmYWlsdXJlLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCZnJlZV9pdGVtXGZSIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuVFAgNQorLkIgRV9PSworVGhlIHJvdXRpbmUgc3VjY2VlZGVkLgorLlRQIDUKKy5CIEVfQkFEX0FSR1VNRU5UCitSb3V0aW5lIGRldGVjdGVkIGFuIGluY29ycmVjdCBvciBvdXQtb2YtcmFuZ2UgYXJndW1lbnQuCisuVFAgNQorLkIgRV9DT05ORUNURUQKK0l0ZW0gaXMgY29ubmVjdGVkIHRvIGEgbWVudS4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5TSCBBVVRIT1JTCitKdWVyZ2VuIFBmZWlmZXIuICBNYW51YWwgcGFnZXMgYW5kIGFkYXB0YXRpb24gZm9yIG5ldyBjdXJzZXMgYnkgRXJpYworUy4gUmF5bW9uZC4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL21pdGVtX29wdHMuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWl0ZW1fb3B0cy4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDU5ZGFiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL21pdGVtX29wdHMuM3gKQEAgLTAsMCArMSw4NCBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogbWl0ZW1fb3B0cy4zeCx2IDEuOSAyMDA3LzAyLzI0IDE3OjMzOjMyIHRvbSBFeHAgJAorLlRIIG1pdGVtX29wdHMgM1ggIiIKKy5TSCBOQU1FCitcZkJtaXRlbV9vcHRzXGZSIC0gc2V0IGFuZCBnZXQgbWVudSBpdGVtIG9wdGlvbnMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9pdGVtX29wdHMoSVRFTSAqaXRlbSwgSXRlbV9PcHRpb25zIG9wdHMpOworLmJyCitpbnQgaXRlbV9vcHRzX29uKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKTsKKy5icgoraW50IGl0ZW1fb3B0c19vZmYoSVRFTSAqaXRlbSwgSXRlbV9PcHRpb25zIG9wdHMpOworLmJyCitJdGVtX09wdGlvbnMgaXRlbV9vcHRzKGNvbnN0IElURU0gKml0ZW0pOworLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBmdW5jdGlvbiBcZkJzZXRfaXRlbV9vcHRzXGZSIHNldHMgYWxsIHRoZSBnaXZlbiBpdGVtJ3Mgb3B0aW9uIGJpdHMgKG1lbnUKK29wdGlvbiBiaXRzIG1heSBiZSBsb2dpY2FsbHktT1InZWQgdG9nZXRoZXIpLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCaXRlbV9vcHRzX29uXGZSIHR1cm5zIG9uIHRoZSBnaXZlbiBvcHRpb24gYml0cywgYW5kIGxlYXZlcworb3RoZXJzIGFsb25lLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCaXRlbV9vcHRzX29mZlxmUiB0dXJucyBvZmYgdGhlIGdpdmVuIG9wdGlvbiBiaXRzLCBhbmQgbGVhdmVzCitvdGhlcnMgYWxvbmUuCisuUFAKK1RoZSBmdW5jdGlvbiBcZkJpdGVtX29wdHNcZlIgcmV0dXJucyB0aGUgaXRlbSdzIGN1cnJlbnQgb3B0aW9uIGJpdHMuCisuUFAKK1RoZXJlIGlzIG9ubHkgb25lIGRlZmluZWQgb3B0aW9uIGJpdCBtYXNrLCBcZkJPX1NFTEVDVEFCTEVcZlIuICBXaGVuIHRoaXMgaXMKK29uLCB0aGUgaXRlbSBtYXkgYmUgc2VsZWN0ZWQgZHVyaW5nIG1lbnUgcHJvY2Vzc2luZy4gIFRoaXMgb3B0aW9uIGRlZmF1bHRzCit0byBvbi4KKy5TSCBSRVRVUk4gVkFMVUUKK0V4Y2VwdCBmb3IgXGZCaXRlbV9vcHRzXGZSLCBlYWNoIHJvdXRpbmUgcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5UUCA1CisuQiBFX09LCitUaGUgcm91dGluZSBzdWNjZWVkZWQuCisuVFAgNQorLkIgRV9TWVNURU1fRVJST1IKK1N5c3RlbSBlcnJvciBvY2N1cnJlZCAoc2VlIFxmQmVycm5vXGZSKS4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9taXRlbV91c2VycHRyLjN4IGIvbmN1cnNlcy01LjcvbWFuL21pdGVtX3VzZXJwdHIuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5NTE5MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9taXRlbV91c2VycHRyLjN4CkBAIC0wLDAgKzEsNzAgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1pdGVtX3VzZXJwdHIuM3gsdiAxLjkgMjAwNi8xMS8wNCAxODoyMTowMyB0b20gRXhwICQKKy5USCBtaXRlbV91c2VycHRyIDNYICIiCisuU0ggTkFNRQorXGZCbWl0ZW1fdXNlcnB0clxmUiAtIGFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggYSBtZW51IGl0ZW0KKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9pdGVtX3VzZXJwdHIoSVRFTSAqaXRlbSwgdm9pZCAqdXNlcnB0cik7CisuYnIKK3ZvaWQgKml0ZW1fdXNlcnB0cihjb25zdCBJVEVNICppdGVtKTsKKy5icgorLlNIIERFU0NSSVBUSU9OCitFdmVyeSBtZW51IGl0ZW0gaGFzIGEgZmllbGQgdGhhdCBjYW4gYmUgdXNlZCB0byBob2xkIGFwcGxpY2F0aW9uLXNwZWNpZmljIGRhdGEKKyh0aGF0IGlzLCB0aGUgbWVudS1kcml2ZXIgY29kZSBsZWF2ZXMgaXQgYWxvbmUpLiAgVGhlc2UgZnVuY3Rpb25zIGdldCBhbmQgc2V0Cit0aGF0IGZpZWxkLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIGZ1bmN0aW9uIFxmQml0ZW1fdXNlcnB0clxmUiByZXR1cm5zIGEgcG9pbnRlciAocG9zc2libHkgXGZCTlVMTFxmUikuCitJdCBkb2VzIG5vdCBzZXQgZXJybm8uCisuUFAKK1RoZSBcZkJzZXRfaXRlbV91c2VycHRyXGZQIGFsd2F5cyByZXR1cm5zIFxmQkVfT0tcZlAgKHN1Y2Nlc3MpLgorLgorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJtZW51XGZSKDNYKS4KKy5TSCBOT1RFUworVGhlIGhlYWRlciBmaWxlIFxmQjxtZW51Lmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlCitcZkI8Y3Vyc2VzLmg+XGZSLgorLlNIIFBPUlRBQklMSVRZCitUaGVzZSByb3V0aW5lcyBlbXVsYXRlIHRoZSBTeXN0ZW0gViBtZW51IGxpYnJhcnkuICBUaGV5IHdlcmUgbm90IHN1cHBvcnRlZCBvbgorVmVyc2lvbiA3IG9yIEJTRCB2ZXJzaW9ucy4KKy5QUAorVGhlIHVzZXIgcG9pbnRlciBpcyBhIHZvaWQgcG9pbnRlci4KK1dlIGNob3NlIG5vdCB0byBsZWF2ZSBpdCBhcyBhIGNoYXIgcG9pbnRlciBmb3IgU1ZyNCBjb21wYXRpYmlsaXR5LgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbWl0ZW1fdmFsdWUuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vbWl0ZW1fdmFsdWUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4ZmQ1MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9taXRlbV92YWx1ZS4zeApAQCAtMCwwICsxLDc2IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1pdGVtX3ZhbHVlLjN4LHYgMS44IDIwMDYvMTEvMDQgMTc6MTI6MDAgdG9tIEV4cCAkCisuVEggbWl0ZW1fdmFsdWUgM1ggIiIKKy5TSCBOQU1FCitcZkJtaXRlbV92YWx1ZVxmUiAtIHNldCBhbmQgZ2V0IG1lbnUgaXRlbSB2YWx1ZXMKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgoraW50IHNldF9pdGVtX3ZhbHVlKElURU0gKml0ZW0sIGJvb2wgdmFsdWUpOworLmJyCitib29sIGl0ZW1fdmFsdWUoY29uc3QgSVRFTSAqaXRlbSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorSWYgeW91IHR1cm4gb2ZmIHRoZSBtZW51IG9wdGlvbiBcZkJPX09ORVZBTFVFXGZSIChlLmcuLCB3aXRoCitcZkJzZXRfbWVudV9vcHRzXGZSIG9yIFxmQm1lbnVfb3B0c19vZmZcZlI7IHNlZSBcZkJtZW51X29wdHNcZlIoM1gpKSwgdGhlIG1lbnUKK2JlY29tZXMgbXVsdGktdmFsdWVkOyB0aGF0IGlzLCBtb3JlIHRoYW4gb25lIGl0ZW0gbWF5IHNpbXVsdGFuZW91c2x5IGJlCitzZWxlY3RlZC4KKy5QUAorSW4gYSBtdWx0aV92YWx1ZWQgbWVudSwgeW91IGNhbiB1c2VkIFxmQnNldF9pdGVtX3ZhbHVlXGZSIHRvIHNlbGVjdCB0aGUKK2dpdmVuIG1lbnUgaXRlbSAoc2Vjb25kIGFyZ3VtZW50IFxmQlRSVUVcZlIpIG9yIGRlc2VsZWN0IGl0IChzZWNvbmQgYXJndW1lbnQKK1xmQkZBTFNFXGZSKS4KKy5TSCBSRVRVUk4gVkFMVUUKK1RoZSBmdW5jdGlvbiBcZkJzZXRfaXRlbV92YWx1ZVxmUiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlRQIDUKKy5CIEVfT0sKK1RoZSByb3V0aW5lIHN1Y2NlZWRlZC4KKy5UUCA1CisuQiBFX1NZU1RFTV9FUlJPUgorU3lzdGVtIGVycm9yIG9jY3VycmVkIChzZWUgXGZCZXJybm9cZlIpLgorLlRQIDUKKy5CIEVfUkVRVUVTVF9ERU5JRUQKK1RoZSBtZW51IGRyaXZlciBjb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVxdWVzdC4KKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCbWVudVxmUigzWCkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8bWVudS5oPlxmUiBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBoZWFkZXIgZmlsZQorXGZCPGN1cnNlcy5oPlxmUi4KKy5TSCBQT1JUQUJJTElUWQorVGhlc2Ugcm91dGluZXMgZW11bGF0ZSB0aGUgU3lzdGVtIFYgbWVudSBsaWJyYXJ5LiAgVGhleSB3ZXJlIG5vdCBzdXBwb3J0ZWQgb24KK1ZlcnNpb24gNyBvciBCU0QgdmVyc2lvbnMuCisuU0ggQVVUSE9SUworSnVlcmdlbiBQZmVpZmVyLiAgTWFudWFsIHBhZ2VzIGFuZCBhZGFwdGF0aW9uIGZvciBuZXcgY3Vyc2VzIGJ5IEVyaWMKK1MuIFJheW1vbmQuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9taXRlbV92aXNpYmxlLjN4IGIvbmN1cnNlcy01LjcvbWFuL21pdGVtX3Zpc2libGUuM3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5MDM5YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi9taXRlbV92aXNpYmxlLjN4CkBAIC0wLDAgKzEsNTkgQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG1pdGVtX3Zpc2libGUuM3gsdiAxLjUgMTk5OC8xMS8yOSAwMToxMjo1NSBSaWNrLk9obmVtdXMgRXhwICQKKy5USCBtaXRlbV92aXNpYmxlIDNYICIiCisuU0ggTkFNRQorXGZCbWl0ZW1fdmlzaWJsZVxmUiAtIGNoZWNrIHZpc2liaWxpdHkgb2YgYSBtZW51IGl0ZW0KKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPG1lbnUuaD5cZlIKKy5icgorYm9vbCBpdGVtX3Zpc2libGUoY29uc3QgSVRFTSAqaXRlbSk7CisuYnIKKy5TSCBERVNDUklQVElPTgorQSBtZW51IGl0ZW0gaXMgdmlzaWJsZSB3aGVuIGl0IGlzIGluIHRoZSBwb3J0aW9uIG9mIGEgcG9zdGVkIG1lbnUgdGhhdAoraXMgbWFwcGVkIG9udG8gdGhlIHNjcmVlbiAoaWYgdGhlIG1lbnUgaXMgc2Nyb2xsYWJsZSwgaW4gcGFydGljdWxhciwgdGhpcworcG9ydGlvbiB3aWxsIGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgbWVudSkuCisuU0ggU0VFIEFMU08KK1xmQmN1cnNlc1xmUigzWCksIFxmQm1lbnVcZlIoM1gpLgorLlNIIE5PVEVTCitUaGUgaGVhZGVyIGZpbGUgXGZCPG1lbnUuaD5cZlIgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGUKK1xmQjxjdXJzZXMuaD5cZlIuCisuU0ggUE9SVEFCSUxJVFkKK1RoZXNlIHJvdXRpbmVzIGVtdWxhdGUgdGhlIFN5c3RlbSBWIG1lbnUgbGlicmFyeS4gIFRoZXkgd2VyZSBub3Qgc3VwcG9ydGVkIG9uCitWZXJzaW9uIDcgb3IgQlNEIHZlcnNpb25zLgorLlNIIEFVVEhPUlMKK0p1ZXJnZW4gUGZlaWZlci4gIE1hbnVhbCBwYWdlcyBhbmQgYWRhcHRhdGlvbiBmb3IgbmV3IGN1cnNlcyBieSBFcmljCitTLiBSYXltb25kLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vbmN1cnNlcy4zeCBiL25jdXJzZXMtNS43L21hbi9uY3Vyc2VzLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2EyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vbmN1cnNlcy4zeApAQCAtMCwwICsxLDExNjggQEAKKydcIiB0CisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IG5jdXJzZXMuM3gsdiAxLjkyIDIwMDgvMTAvMjUgMjM6MzE6NDUgdG9tIEV4cCAkCisuaHkgMAorLlRIIG5jdXJzZXMgM1ggIiIKKy5kcyBuIDUKKy5kcyBkIEBURVJNSU5GT0AKKy5TSCBOQU1FCitcZkJuY3Vyc2VzXGZSIC0gQ1JUIHNjcmVlbiBoYW5kbGluZyBhbmQgb3B0aW1pemF0aW9uIHBhY2thZ2UKKy5TSCBTWU5PUFNJUworXGZCI2luY2x1ZGUgPGN1cnNlcy5oPlxmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgcm91dGluZXMgZ2l2ZSB0aGUgdXNlciBhIHRlcm1pbmFsLWluZGVwZW5kZW50IG1ldGhvZAorb2YgdXBkYXRpbmcgY2hhcmFjdGVyIHNjcmVlbnMgd2l0aCByZWFzb25hYmxlIG9wdGltaXphdGlvbi4KK1RoaXMgaW1wbGVtZW50YXRpb24gaXMgYGBuZXcgY3Vyc2VzJycgKG5jdXJzZXMpIGFuZAoraXMgdGhlIGFwcHJvdmVkIHJlcGxhY2VtZW50IGZvcgorNC40QlNEIGNsYXNzaWMgY3Vyc2VzLCB3aGljaCBoYXMgYmVlbiBkaXNjb250aW51ZWQuCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuUFAKK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgZW11bGF0ZXMgdGhlIFxmQmN1cnNlc1xmUigzWCkgbGlicmFyeSBvZgorU3lzdGVtIFYgUmVsZWFzZSA0IFVOSVgsCithbmQgWFBHNCAoWC9PcGVuIFBvcnRhYmlsaXR5IEd1aWRlKSBjdXJzZXMgKGFsc28ga25vd24gYXMgWFNJIGN1cnNlcykuCitYU0kgc3RhbmRzIGZvciBYL09wZW4gU3lzdGVtIEludGVyZmFjZXMgRXh0ZW5zaW9uLgorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBpcyBmcmVlbHkgcmVkaXN0cmlidXRhYmxlIGluIHNvdXJjZSBmb3JtLgorRGlmZmVyZW5jZXMgZnJvbSB0aGUgU1ZyNAorY3Vyc2VzIGFyZSBzdW1tYXJpemVkIHVuZGVyIHRoZSBcZkJFWFRFTlNJT05TXGZQIGFuZCBcZkJQT1JUQUJJTElUWVxmUCBzZWN0aW9ucyBiZWxvdyBhbmQKK2Rlc2NyaWJlZCBpbiBkZXRhaWwgaW4gdGhlIHJlc3BlY3RpdmUgXGZCRVhURU5TSU9OU1xmUCwgXGZCUE9SVEFCSUxJVFlcZlAgYW5kIFxmQkJVR1NcZlAgc2VjdGlvbnMKK29mIGluZGl2aWR1YWwgbWFuIHBhZ2VzLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgbWFueSB1c2VmdWwgZXh0ZW5zaW9ucywKK2kuZS4sIGZlYXR1cmVzIHdoaWNoIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBieSBhIHNpbXBsZSBhZGQtb24gbGlicmFyeQorYnV0IHdoaWNoIHJlcXVpcmUgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGxpYnJhcnkuCisuUFAKK0EgcHJvZ3JhbSB1c2luZyB0aGVzZSByb3V0aW5lcyBtdXN0IGJlIGxpbmtlZCB3aXRoIHRoZSBcZkItbG5jdXJzZXNcZlIgb3B0aW9uLAorb3IgKGlmIGl0IGhhcyBiZWVuIGdlbmVyYXRlZCkgd2l0aCB0aGUgZGVidWdnaW5nIGxpYnJhcnkgXGZCLWxuY3Vyc2VzX2dcZlIuCisoWW91ciBzeXN0ZW0gaW50ZWdyYXRvciBtYXkgYWxzbyBoYXZlIGluc3RhbGxlZCB0aGVzZSBsaWJyYXJpZXMgdW5kZXIKK3RoZSBuYW1lcyBcZkItbGN1cnNlc1xmUiBhbmQgXGZCLWxjdXJzZXNfZ1xmUi4pCitUaGUgbmN1cnNlc19nIGxpYnJhcnkgZ2VuZXJhdGVzIHRyYWNlIGxvZ3MgKGluIGEgZmlsZSBjYWxsZWQgJ3RyYWNlJyBpbiB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5KSB0aGF0IGRlc2NyaWJlIGN1cnNlcyBhY3Rpb25zLgorU2VlIGFsc28gdGhlIHNlY3Rpb24gb24gXGZCQUxURVJOQVRFIENPTkZJR1VSQVRJT05TXGZQLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBwYWNrYWdlIHN1cHBvcnRzOiBvdmVyYWxsIHNjcmVlbiwgd2luZG93IGFuZCBwYWQKK21hbmlwdWxhdGlvbjsgb3V0cHV0IHRvIHdpbmRvd3MgYW5kIHBhZHM7IHJlYWRpbmcgdGVybWluYWwgaW5wdXQ7IGNvbnRyb2wgb3ZlcgordGVybWluYWwgYW5kIFxmQmN1cnNlc1xmUiBpbnB1dCBhbmQgb3V0cHV0IG9wdGlvbnM7IGVudmlyb25tZW50IHF1ZXJ5Cityb3V0aW5lczsgY29sb3IgbWFuaXB1bGF0aW9uOyB1c2Ugb2Ygc29mdCBsYWJlbCBrZXlzOyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXM7CithbmQgYWNjZXNzIHRvIGxvdy1sZXZlbCB0ZXJtaW5hbC1tYW5pcHVsYXRpb24gcm91dGluZXMuCisuUFAKK1RoZSBsaWJyYXJ5IHVzZXMgdGhlIGxvY2FsZSB3aGljaCB0aGUgY2FsbGluZyBwcm9ncmFtIGhhcyBpbml0aWFsaXplZC4KK1RoYXQgaXMgbm9ybWFsbHkgZG9uZSB3aXRoIFxmQnNldGxvY2FsZVxmUDoKKy5zcAorICAgICAgXGZCc2V0bG9jYWxlKExDX0FMTCwgIiIpO1xmUAorLnNwCitJZiB0aGUgbG9jYWxlIGlzIG5vdCBpbml0aWFsaXplZCwKK3RoZSBsaWJyYXJ5IGFzc3VtZXMgdGhhdCBjaGFyYWN0ZXJzIGFyZSBwcmludGFibGUgYXMgaW4gSVNPLTg4NTktMSwKK3RvIHdvcmsgd2l0aCBjZXJ0YWluIGxlZ2FjeSBwcm9ncmFtcy4KK1lvdSBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgbG9jYWxlIGFuZCBub3QgcmVseSBvbiBzcGVjaWZpYyBkZXRhaWxzIG9mCit0aGUgbGlicmFyeSB3aGVuIHRoZSBsb2NhbGUgaGFzIG5vdCBiZWVuIHNldHVwLgorLlBQCitUaGUgZnVuY3Rpb24gXGZCaW5pdHNjclxmUiBvciBcZkJuZXd0ZXJtXGZSCittdXN0IGJlIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBsaWJyYXJ5CitiZWZvcmUgYW55IG9mIHRoZSBvdGhlciByb3V0aW5lcyB0aGF0IGRlYWwgd2l0aCB3aW5kb3dzCithbmQgc2NyZWVucyBhcmUgdXNlZC4KK1RoZSByb3V0aW5lIFxmQmVuZHdpblxmUiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZXhpdGluZy4KKy5QUAorVG8gZ2V0IGNoYXJhY3Rlci1hdC1hLXRpbWUgaW5wdXQgd2l0aG91dCBlY2hvaW5nIChtb3N0CitpbnRlcmFjdGl2ZSwgc2NyZWVuIG9yaWVudGVkIHByb2dyYW1zIHdhbnQgdGhpcyksIHRoZSBmb2xsb3dpbmcKK3NlcXVlbmNlIHNob3VsZCBiZSB1c2VkOgorLnNwCisgICAgICBcZkJpbml0c2NyKCk7IGNicmVhaygpOyBub2VjaG8oKTtcZlIKKy5zcAorTW9zdCBwcm9ncmFtcyB3b3VsZCBhZGRpdGlvbmFsbHkgdXNlIHRoZSBzZXF1ZW5jZToKKy5zcAorICAgICAgXGZCbm9ubCgpO1xmUgorICAgICAgXGZCaW50cmZsdXNoKHN0ZHNjciwgRkFMU0UpO1xmUgorICAgICAgXGZCa2V5cGFkKHN0ZHNjciwgVFJVRSk7XGZSCisuc3AKK0JlZm9yZSBhIFxmQmN1cnNlc1xmUiBwcm9ncmFtIGlzIHJ1biwgdGhlIHRhYiBzdG9wcyBvZiB0aGUgdGVybWluYWwKK3Nob3VsZCBiZSBzZXQgYW5kIGl0cyBpbml0aWFsaXphdGlvbiBzdHJpbmdzLCBpZiBkZWZpbmVkLCBtdXN0IGJlIG91dHB1dC4KK1RoaXMgY2FuIGJlIGRvbmUgYnkgZXhlY3V0aW5nIHRoZSBcZkJ0cHV0IGluaXRcZlIgY29tbWFuZAorYWZ0ZXIgdGhlIHNoZWxsIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1cZlIgaGFzIGJlZW4gZXhwb3J0ZWQuCitcZkJ0c2V0KDEpXGZSIGlzIHVzdWFsbHkgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoaXMuCitbU2VlIFxmQnRlcm1pbmZvXGZSKFwqbikgZm9yIGZ1cnRoZXIgZGV0YWlscy5dCisuUFAKK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgcGVybWl0cyBtYW5pcHVsYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLAorY2FsbGVkIFxmSXdpbmRvd3NcZlIsIHdoaWNoIGNhbiBiZSB0aG91Z2h0IG9mIGFzIHR3by1kaW1lbnNpb25hbAorYXJyYXlzIG9mIGNoYXJhY3RlcnMgcmVwcmVzZW50aW5nIGFsbCBvciBwYXJ0IG9mIGEgQ1JUIHNjcmVlbi4KK0EgZGVmYXVsdCB3aW5kb3cgY2FsbGVkIFxmQnN0ZHNjclxmUiwgd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIHRlcm1pbmFsCitzY3JlZW4sIGlzIHN1cHBsaWVkLgorT3RoZXJzIG1heSBiZSBjcmVhdGVkIHdpdGggXGZCbmV3d2luXGZSLgorLlBQCitOb3RlIHRoYXQgXGZCY3Vyc2VzXGZSIGRvZXMgbm90IGhhbmRsZSBvdmVybGFwcGluZyB3aW5kb3dzLCB0aGF0J3MgZG9uZSBieQordGhlIFxmQnBhbmVsXGZSKDNYKSBsaWJyYXJ5LgorVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZWl0aGVyIHVzZQorXGZCc3Rkc2NyXGZSIG9yIGRpdmlkZSB0aGUgc2NyZWVuIGludG8gdGlsZWQgd2luZG93cyBhbmQgbm90IHVzaW5nCitcZkJzdGRzY3JcZlIgYXQgYWxsLgorTWl4aW5nIHRoZSB0d28gd2lsbCByZXN1bHQgaW4gdW5wcmVkaWN0YWJsZSwgYW5kIHVuZGVzaXJlZCwgZWZmZWN0cy4KKy5QUAorV2luZG93cyBhcmUgcmVmZXJyZWQgdG8gYnkgdmFyaWFibGVzIGRlY2xhcmVkIGFzIFxmQldJTkRPVyAqXGZSLgorVGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBtYW5pcHVsYXRlZCB3aXRoIHJvdXRpbmVzIGRlc2NyaWJlZCBoZXJlIGFuZAorZWxzZXdoZXJlIGluIHRoZSBcZkJuY3Vyc2VzXGZSIG1hbnVhbCBwYWdlcy4KK0Ftb25nIHRob3NlLCB0aGUgbW9zdCBiYXNpYworcm91dGluZXMgYXJlIFxmQm1vdmVcZlIgYW5kIFxmQmFkZGNoXGZSLgorTW9yZSBnZW5lcmFsIHZlcnNpb25zIG9mCit0aGVzZSByb3V0aW5lcyBhcmUgaW5jbHVkZWQgd2l0aCBuYW1lcyBiZWdpbm5pbmcgd2l0aCBcZkJ3XGZSLAorYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHdpbmRvdy4KK1RoZSByb3V0aW5lcyBub3QgYmVnaW5uaW5nCit3aXRoIFxmQndcZlIgYWZmZWN0IFxmQnN0ZHNjclxmUi4KKy5QUAorQWZ0ZXIgdXNpbmcgcm91dGluZXMgdG8gbWFuaXB1bGF0ZSBhIHdpbmRvdywgXGZCcmVmcmVzaFxmUiBpcyBjYWxsZWQsCit0ZWxsaW5nIFxmQmN1cnNlc1xmUiB0byBtYWtlIHRoZSB1c2VyJ3MgQ1JUIHNjcmVlbiBsb29rIGxpa2UKK1xmQnN0ZHNjclxmUi4KK1RoZSBjaGFyYWN0ZXJzIGluIGEgd2luZG93IGFyZSBhY3R1YWxseSBvZiB0eXBlCitcZkJjaHR5cGVcZlIsIChjaGFyYWN0ZXIgYW5kIGF0dHJpYnV0ZSBkYXRhKSBzbyB0aGF0IG90aGVyIGluZm9ybWF0aW9uCithYm91dCB0aGUgY2hhcmFjdGVyIG1heSBhbHNvIGJlIHN0b3JlZCB3aXRoIGVhY2ggY2hhcmFjdGVyLgorLlBQCitTcGVjaWFsIHdpbmRvd3MgY2FsbGVkIFxmSXBhZHNcZlIgbWF5IGFsc28gYmUgbWFuaXB1bGF0ZWQuCitUaGVzZSBhcmUgd2luZG93cword2hpY2ggYXJlIG5vdCBjb25zdHJhaW5lZCB0byB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuIGFuZCB3aG9zZSBjb250ZW50cyBuZWVkIG5vdAorYmUgY29tcGxldGVseSBkaXNwbGF5ZWQuCitTZWUgXGZCY3Vyc19wYWRcZlIoM1gpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorLlBQCitJbiBhZGRpdGlvbiB0byBkcmF3aW5nIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiwgdmlkZW8gYXR0cmlidXRlcyBhbmQgY29sb3JzCittYXkgYmUgc3VwcG9ydGVkLCBjYXVzaW5nIHRoZSBjaGFyYWN0ZXJzIHRvIHNob3cgdXAgaW4gc3VjaCBtb2RlcyBhcwordW5kZXJsaW5lZCwgaW4gcmV2ZXJzZSB2aWRlbywgb3IgaW4gY29sb3Igb24gdGVybWluYWxzIHRoYXQgc3VwcG9ydCBzdWNoCitkaXNwbGF5IGVuaGFuY2VtZW50cy4KK0xpbmUgZHJhd2luZyBjaGFyYWN0ZXJzIG1heSBiZSBzcGVjaWZpZWQgdG8gYmUgb3V0cHV0LgorT24gaW5wdXQsIFxmQmN1cnNlc1xmUiBpcyBhbHNvIGFibGUgdG8gdHJhbnNsYXRlIGFycm93IGFuZCBmdW5jdGlvbiBrZXlzIHRoYXQKK3RyYW5zbWl0IGVzY2FwZSBzZXF1ZW5jZXMgaW50byBzaW5nbGUgdmFsdWVzLgorVGhlIHZpZGVvIGF0dHJpYnV0ZXMsIGxpbmUKK2RyYXdpbmcgY2hhcmFjdGVycywgYW5kIGlucHV0IHZhbHVlcyB1c2UgbmFtZXMsIGRlZmluZWQgaW4gXGZCPGN1cnNlcy5oPlxmUiwKK3N1Y2ggYXMgXGZCQV9SRVZFUlNFXGZSLCBcZkJBQ1NfSExJTkVcZlIsIGFuZCBcZkJLRVlfTEVGVFxmUi4KKy5QUAorSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBcZkJMSU5FU1xmUiBhbmQgXGZCQ09MVU1OU1xmUiBhcmUgc2V0LCBvciBpZiB0aGUKK3Byb2dyYW0gaXMgZXhlY3V0aW5nIGluIGEgd2luZG93IGVudmlyb25tZW50LCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gaW4KK3RoZSBlbnZpcm9ubWVudCB3aWxsIG92ZXJyaWRlIGluZm9ybWF0aW9uIHJlYWQgYnkgXGZJdGVybWluZm9cZlIuCitUaGlzIHdvdWxkIGFmZmVjdCBhIHByb2dyYW0gcnVubmluZyBpbiBhbiBBVCZUIDYzMCBsYXllciwKK2ZvciBleGFtcGxlLCB3aGVyZSB0aGUgc2l6ZSBvZiBhCitzY3JlZW4gaXMgY2hhbmdlYWJsZSAoc2VlIFxmQkVOVklST05NRU5UXGZSKS4KKy5QUAorSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1JTkZPXGZSIGlzIGRlZmluZWQsIGFueSBwcm9ncmFtIHVzaW5nCitcZkJjdXJzZXNcZlIgY2hlY2tzIGZvciBhIGxvY2FsIHRlcm1pbmFsIGRlZmluaXRpb24gYmVmb3JlIGNoZWNraW5nIGluIHRoZQorc3RhbmRhcmQgcGxhY2UuCitGb3IgZXhhbXBsZSwgaWYgXGZCVEVSTVxmUiBpcyBzZXQgdG8gXGZCYXR0NDQyNFxmUiwgdGhlbiB0aGUKK2NvbXBpbGVkIHRlcm1pbmFsIGRlZmluaXRpb24gaXMgZm91bmQgaW4KKy5zcAorICAgICAgXGZCXCpkL2EvYXR0NDQyNFxmUi4KKy5zcAorKFRoZSBcZkJhXGZSIGlzIGNvcGllZCBmcm9tIHRoZSBmaXJzdCBsZXR0ZXIgb2YgXGZCYXR0NDQyNFxmUiB0byBhdm9pZAorY3JlYXRpb24gb2YgaHVnZSBkaXJlY3Rvcmllcy4pICBIb3dldmVyLCBpZiBcZkJURVJNSU5GT1xmUiBpcyBzZXQgdG8KK1xmQiRIT01FL215dGVybXNcZlIsIFxmQmN1cnNlc1xmUiBmaXJzdCBjaGVja3MKKy5zcAorICAgICAgXGZCJEhPTUUvbXl0ZXJtcy9hL2F0dDQ0MjRcZlIsCisuc3AKK2FuZCBpZiB0aGF0IGZhaWxzLCBpdCB0aGVuIGNoZWNrcworLnNwCisgICAgICBcZkJcKmQvYS9hdHQ0NDI0XGZSLgorLnNwCitUaGlzIGlzIHVzZWZ1bCBmb3IgZGV2ZWxvcGluZyBleHBlcmltZW50YWwgZGVmaW5pdGlvbnMgb3Igd2hlbiB3cml0ZQorcGVybWlzc2lvbiBpbiBcZkJcKmRcZlIgaXMgbm90IGF2YWlsYWJsZS4KKy5QUAorVGhlIGludGVnZXIgdmFyaWFibGVzIFxmQkxJTkVTXGZSIGFuZCBcZkJDT0xTXGZSIGFyZSBkZWZpbmVkIGluCitcZkI8Y3Vyc2VzLmg+XGZSIGFuZCB3aWxsIGJlIGZpbGxlZCBpbiBieSBcZkJpbml0c2NyXGZSIHdpdGggdGhlIHNpemUgb2YgdGhlCitzY3JlZW4uCitUaGUgY29uc3RhbnRzIFxmQlRSVUVcZlIgYW5kIFxmQkZBTFNFXGZSIGhhdmUgdGhlIHZhbHVlcyBcZkIxXGZSIGFuZAorXGZCMFxmUiwgcmVzcGVjdGl2ZWx5LgorLlBQCitUaGUgXGZCY3Vyc2VzXGZSIHJvdXRpbmVzIGFsc28gZGVmaW5lIHRoZSBcZkJXSU5ET1cgKlxmUiB2YXJpYWJsZSBcZkJjdXJzY3JcZlIKK3doaWNoIGlzIHVzZWQgZm9yIGNlcnRhaW4gbG93LWxldmVsIG9wZXJhdGlvbnMgbGlrZSBjbGVhcmluZyBhbmQgcmVkcmF3aW5nIGEKK3NjcmVlbiBjb250YWluaW5nIGdhcmJhZ2UuCitUaGUgXGZCY3Vyc2NyXGZSIGNhbiBiZSB1c2VkIGluIG9ubHkgYSBmZXcgcm91dGluZXMuCisuXCIKKy5TUyBSb3V0aW5lIGFuZCBBcmd1bWVudCBOYW1lcworTWFueSBcZkJjdXJzZXNcZlIgcm91dGluZXMgaGF2ZSB0d28gb3IgbW9yZSB2ZXJzaW9ucy4KK1RoZSByb3V0aW5lcyBwcmVmaXhlZCB3aXRoIFxmQndcZlIgcmVxdWlyZSBhIHdpbmRvdyBhcmd1bWVudC4KK1RoZSByb3V0aW5lcyBwcmVmaXhlZCB3aXRoIFxmQnBcZlIgcmVxdWlyZSBhIHBhZCBhcmd1bWVudC4KK1Rob3NlIHdpdGhvdXQgYSBwcmVmaXggZ2VuZXJhbGx5IHVzZSBcZkJzdGRzY3JcZlIuCisuUFAKK1RoZSByb3V0aW5lcyBwcmVmaXhlZCB3aXRoIFxmQm12XGZSIHJlcXVpcmUgYSBcZkl5XGZSIGFuZCBcZkl4XGZSCitjb29yZGluYXRlIHRvIG1vdmUgdG8gYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi4KK1RoZSBcZkJtdlxmUiByb3V0aW5lcyBpbXBseSBhIGNhbGwgdG8gXGZCbW92ZVxmUiBiZWZvcmUgdGhlIGNhbGwgdG8gdGhlCitvdGhlciByb3V0aW5lLgorVGhlIGNvb3JkaW5hdGUgXGZJeVxmUiBhbHdheXMgcmVmZXJzIHRvIHRoZSByb3cgKG9mCit0aGUgd2luZG93KSwgYW5kIFxmSXhcZlIgYWx3YXlzIHJlZmVycyB0byB0aGUgY29sdW1uLgorVGhlIHVwcGVyIGxlZnQtaGFuZCBjb3JuZXIgaXMgYWx3YXlzICgwLDApLCBub3QgKDEsMSkuCisuUFAKK1RoZSByb3V0aW5lcyBwcmVmaXhlZCB3aXRoIFxmQm12d1xmUiB0YWtlIGJvdGggYSB3aW5kb3cgYXJndW1lbnQgYW5kCitcZkl4XGZSIGFuZCBcZkl5XGZSIGNvb3JkaW5hdGVzLgorVGhlIHdpbmRvdyBhcmd1bWVudCBpcyBhbHdheXMgc3BlY2lmaWVkIGJlZm9yZSB0aGUgY29vcmRpbmF0ZXMuCisuUFAKK0luIGVhY2ggY2FzZSwgXGZJd2luXGZSIGlzIHRoZSB3aW5kb3cgYWZmZWN0ZWQsIGFuZCBcZklwYWRcZlIgaXMgdGhlCitwYWQgYWZmZWN0ZWQ7IFxmSXdpblxmUiBhbmQgXGZJcGFkXGZSIGFyZSBhbHdheXMgcG9pbnRlcnMgdG8gdHlwZQorXGZCV0lORE9XXGZSLgorLlBQCitPcHRpb24gc2V0dGluZyByb3V0aW5lcyByZXF1aXJlIGEgQm9vbGVhbiBmbGFnIFxmSWJmXGZSIHdpdGggdGhlIHZhbHVlCitcZkJUUlVFXGZSIG9yIFxmQkZBTFNFXGZSOyBcZkliZlxmUiBpcyBhbHdheXMgb2YgdHlwZSBcZkJib29sXGZSLgorTW9zdCBvZiB0aGUgZGF0YSB0eXBlcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHJvdXRpbmVzLAorc3VjaCBhcyBcZkJXSU5ET1dcZlIsIFxmQlNDUkVFTlxmUiwgXGZCYm9vbFxmUiwgYW5kIFxmQmNodHlwZVxmUgorYXJlIGRlZmluZWQgaW4gXGZCPGN1cnNlcy5oPlxmUi4KK1R5cGVzIHVzZWQgZm9yIHRoZSB0ZXJtaW5mbyByb3V0aW5lcyBzdWNoIGFzCitcZkJURVJNSU5BTFxmUiBhcmUgZGVmaW5lZCBpbiBcZkI8dGVybS5oPlxmUi4KKy5QUAorVGhpcyBtYW51YWwgcGFnZSBkZXNjcmliZXMgZnVuY3Rpb25zIHdoaWNoIG1heSBhcHBlYXIgaW4gYW55IGNvbmZpZ3VyYXRpb24KK29mIHRoZSBsaWJyYXJ5LgorVGhlcmUgYXJlIHR3byBjb21tb24gY29uZmlndXJhdGlvbnMgb2YgdGhlIGxpYnJhcnk6CisuUlMKKy5UUCA1CituY3Vyc2VzCit0aGUgIm5vcm1hbCIgbGlicmFyeSwgd2hpY2ggaGFuZGxlcyA4LWJpdCBjaGFyYWN0ZXJzLgorVGhlIG5vcm1hbCAoOC1iaXQpIGxpYnJhcnkgc3RvcmVzIGNoYXJhY3RlcnMgY29tYmluZWQgd2l0aCBhdHRyaWJ1dGVzCitpbiBcZkJjaHR5cGVcZlAgZGF0YS4KKy5JUAorQXR0cmlidXRlcyBhbG9uZSAobm8gY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIpIG1heSBiZSBzdG9yZWQgaW4gXGZCY2h0eXBlXGZQCitvciB0aGUgZXF1aXZhbGVudCBcZkJhdHRyX3RcZlAgZGF0YS4KK0luIGVpdGhlciBjYXNlLCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gc29tZXRoaW5nIGxpa2UgYW4gaW50ZWdlci4KKy5JUAorRWFjaCBjZWxsIChyb3cgYW5kIGNvbHVtbikgaW4gYSBcZkJXSU5ET1dcZlAgaXMgc3RvcmVkIGFzIGEgXGZCY2h0eXBlXGZQLgorLlRQIDUKK25jdXJzZXN3Cit0aGUgc28tY2FsbGVkICJ3aWRlIiBsaWJyYXJ5LCB3aGljaCBoYW5kbGVzIG11bHRpYnl0ZSBjaGFyYWN0ZXJzCisoU2VlIHRoZSBzZWN0aW9uIG9uIFxmQkFMVEVSTkFURSBDT05GSUdVUkFUSU9OU1xmUCkuCitUaGUgIndpZGUiIGxpYnJhcnkgaW5jbHVkZXMgYWxsIG9mIHRoZSBjYWxscyBmcm9tIHRoZSAibm9ybWFsIiBsaWJyYXJ5LgorSXQgYWRkcyBhYm91dCBvbmUgdGhpcmQgbW9yZSBjYWxscyB1c2luZyBkYXRhIHR5cGVzIHdoaWNoIHN0b3JlCittdWx0aWJ5dGUgY2hhcmFjdGVyczoKKy5SUworLlRQIDUKKy5CIGNjaGFyX3QKK2NvcnJlc3BvbmRzIHRvIFxmQmNodHlwZVxmUC4KK0hvd2V2ZXIgaXQgaXMgYSBzdHJ1Y3R1cmUsIGJlY2F1c2UgbW9yZSBkYXRhIGlzIHN0b3JlZCB0aGFuIGNhbiBmaXQgaW50bworYW4gaW50ZWdlci4KK1RoZSBjaGFyYWN0ZXJzIGFyZSBsYXJnZSBlbm91Z2ggdG8gcmVxdWlyZSBhIGZ1bGwgaW50ZWdlciB2YWx1ZSAtIGFuZCB0aGVyZQorbWF5IGJlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIHBlciBjZWxsLgorVGhlIHZpZGVvIGF0dHJpYnV0ZXMgYW5kIGNvbG9yIGFyZSBzdG9yZWQgaW4gc2VwYXJhdGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3R1cmUuCisuSVAKK0VhY2ggY2VsbCAocm93IGFuZCBjb2x1bW4pIGluIGEgXGZCV0lORE9XXGZQIGlzIHN0b3JlZCBhcyBhIFxmQmNjaGFyX3RcZlAuCisuVFAgNQorLkIgd2NoYXJfdAorc3RvcmVzIGEgIndpZGUiIGNoYXJhY3Rlci4KK0xpa2UgXGZCY2h0eXBlXGZQLCB0aGlzIG1heSBiZSBhbiBpbnRlZ2VyLgorLlRQIDUKKy5CIHdpbnRfdAorc3RvcmVzIGEgXGZCd2NoYXJfdFxmUCBvciBcZkJXRU9GXGZQIC0gbm90IHRoZSBzYW1lLCB0aG91Z2ggYm90aCBtYXkgaGF2ZQordGhlIHNhbWUgc2l6ZS4KKy5SRQorLklQCitUaGUgIndpZGUiIGxpYnJhcnkgcHJvdmlkZXMgbmV3IGZ1bmN0aW9ucyB3aGljaCBhcmUgYW5hbG9nb3VzIHRvCitmdW5jdGlvbnMgaW4gdGhlICJub3JtYWwiIGxpYnJhcnkuCitUaGVyZSBpcyBhIG5hbWluZyBjb252ZW50aW9uIHdoaWNoIHJlbGF0ZXMgbWFueSBvZiB0aGUgbm9ybWFsL3dpZGUgdmFyaWFudHM6CithICJfdyIgaXMgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZS4KK0ZvciBleGFtcGxlLCBcZkJ3YWRkY2hcZlAgYmVjb21lcyBcZkJ3YWRkX3djaFxmUC4KKy5SRQorLlBQCisuXCIKKy5TUyBSb3V0aW5lIE5hbWUgSW5kZXgKK1RoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgZWFjaCBcZkJjdXJzZXNcZlIgcm91dGluZSBhbmQgdGhlIG5hbWUgb2YKK3RoZSBtYW51YWwgcGFnZSBvbiB3aGljaCBpdCBpcyBkZXNjcmliZWQuCitSb3V0aW5lcyBmbGFnZ2VkIHdpdGggYConCithcmUgbmN1cnNlcy1zcGVjaWZpYywgbm90IGRlc2NyaWJlZCBieSBYUEc0IG9yIHByZXNlbnQgaW4gU1ZyNC4KKy5QUAorLlRTCitjZW50ZXIgdGFiKC8pOworbCBsCitsIGwgLgorXGZCY3Vyc2VzXGZSIFJvdXRpbmUgTmFtZS9NYW51YWwgUGFnZSBOYW1lCis9CitDT0xPUl9QQUlSL1xmQmN1cnNfY29sb3JcZlIoM1gpCitQQUlSX05VTUJFUi9cZkJjdXJzX2F0dHJcZlIoM1gpCitfbmNfZnJlZV9hbmRfZXhpdC9cZkJjdXJzX21lbWxlYWtzXGZSKDNYKSoKK19uY19mcmVlYWxsL1xmQmN1cnNfbWVtbGVha3NcZlIoM1gpKgorX25jX3RyYWNlYml0cy9cZkJjdXJzX3RyYWNlXGZSKDNYKSoKK190cmFjZWF0dHIvXGZCY3Vyc190cmFjZVxmUigzWCkqCitfdHJhY2VhdHRyMi9cZkJjdXJzX3RyYWNlXGZSKDNYKSoKK190cmFjZWNoYXIvXGZCY3Vyc190cmFjZVxmUigzWCkqCitfdHJhY2VjaHR5cGUvXGZCY3Vyc190cmFjZVxmUigzWCkqCitfdHJhY2VjaHR5cGUyL1xmQmN1cnNfdHJhY2VcZlIoM1gpKgorX3RyYWNlZHVtcC9cZkJjdXJzX3RyYWNlXGZSKDNYKSoKK190cmFjZWYvXGZCY3Vyc190cmFjZVxmUigzWCkqCitfdHJhY2Vtb3VzZS9cZkJjdXJzX3RyYWNlXGZSKDNYKSoKK2FkZF93Y2gvXGZCY3Vyc19hZGRfd2NoXGZSKDNYKQorYWRkX3djaG5zdHIvXGZCY3Vyc19hZGRfd2Noc3RyXGZSKDNYKQorYWRkX3djaHN0ci9cZkJjdXJzX2FkZF93Y2hzdHJcZlIoM1gpCithZGRjaC9cZkJjdXJzX2FkZGNoXGZSKDNYKQorYWRkY2huc3RyL1xmQmN1cnNfYWRkY2hzdHJcZlIoM1gpCithZGRjaHN0ci9cZkJjdXJzX2FkZGNoc3RyXGZSKDNYKQorYWRkbnN0ci9cZkJjdXJzX2FkZHN0clxmUigzWCkKK2FkZG53c3RyL1xmQmN1cnNfYWRkd3N0clxmUigzWCkKK2FkZHN0ci9cZkJjdXJzX2FkZHN0clxmUigzWCkKK2FkZHdzdHIvXGZCY3Vyc19hZGR3c3RyXGZSKDNYKQorYXNzdW1lX2RlZmF1bHRfY29sb3JzL1xmQmRlZmF1bHRfY29sb3JzXGZSKDNYKSoKK2F0dHJfZ2V0L1xmQmN1cnNfYXR0clxmUigzWCkKK2F0dHJfb2ZmL1xmQmN1cnNfYXR0clxmUigzWCkKK2F0dHJfb24vXGZCY3Vyc19hdHRyXGZSKDNYKQorYXR0cl9zZXQvXGZCY3Vyc19hdHRyXGZSKDNYKQorYXR0cm9mZi9cZkJjdXJzX2F0dHJcZlIoM1gpCithdHRyb24vXGZCY3Vyc19hdHRyXGZSKDNYKQorYXR0cnNldC9cZkJjdXJzX2F0dHJcZlIoM1gpCitiYXVkcmF0ZS9cZkJjdXJzX3Rlcm1hdHRyc1xmUigzWCkKK2JlZXAvXGZCY3Vyc19iZWVwXGZSKDNYKQorYmtnZC9cZkJjdXJzX2JrZ2RcZlIoM1gpCitia2dkc2V0L1xmQmN1cnNfYmtnZFxmUigzWCkKK2JrZ3JuZC9cZkJjdXJzX2JrZ3JuZFxmUigzWCkKK2JrZ3JuZHNldC9cZkJjdXJzX2JrZ3JuZFxmUigzWCkKK2JvcmRlci9cZkJjdXJzX2JvcmRlclxmUigzWCkKK2JvcmRlcl9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQorYm94L1xmQmN1cnNfYm9yZGVyXGZSKDNYKQorYm94X3NldC9cZkJjdXJzX2JvcmRlcl9zZXRcZlIoM1gpCitjYW5fY2hhbmdlX2NvbG9yL1xmQmN1cnNfY29sb3JcZlIoM1gpCitjYnJlYWsvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitjaGdhdC9cZkJjdXJzX2F0dHJcZlIoM1gpCitjbGVhci9cZkJjdXJzX2NsZWFyXGZSKDNYKQorY2xlYXJvay9cZkJjdXJzX291dG9wdHNcZlIoM1gpCitjbHJ0b2JvdC9cZkJjdXJzX2NsZWFyXGZSKDNYKQorY2xydG9lb2wvXGZCY3Vyc19jbGVhclxmUigzWCkKK2NvbG9yX2NvbnRlbnQvXGZCY3Vyc19jb2xvclxmUigzWCkKK2NvbG9yX3NldC9cZkJjdXJzX2F0dHJcZlIoM1gpCitjb3B5d2luL1xmQmN1cnNfb3ZlcmxheVxmUigzWCkKK2N1cnNfc2V0L1xmQmN1cnNfa2VybmVsXGZSKDNYKQorY3Vyc2VzX3ZlcnNpb24vXGZCY3Vyc19leHRlbmRcZlIoM1gpKgorZGVmX3Byb2dfbW9kZS9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK2RlZl9zaGVsbF9tb2RlL1xmQmN1cnNfa2VybmVsXGZSKDNYKQorZGVmaW5lX2tleS9cZkJkZWZpbmVfa2V5XGZSKDNYKSoKK2RlbF9jdXJ0ZXJtL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCitkZWxheV9vdXRwdXQvXGZCY3Vyc191dGlsXGZSKDNYKQorZGVsY2gvXGZCY3Vyc19kZWxjaFxmUigzWCkKK2RlbGV0ZWxuL1xmQmN1cnNfZGVsZXRlbG5cZlIoM1gpCitkZWxzY3JlZW4vXGZCY3Vyc19pbml0c2NyXGZSKDNYKQorZGVsd2luL1xmQmN1cnNfd2luZG93XGZSKDNYKQorZGVyd2luL1xmQmN1cnNfd2luZG93XGZSKDNYKQorZG91cGRhdGUvXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQorZHVwd2luL1xmQmN1cnNfd2luZG93XGZSKDNYKQorZWNoby9cZkJjdXJzX2lub3B0c1xmUigzWCkKK2VjaG9fd2NoYXIvXGZCY3Vyc19hZGRfd2NoXGZSKDNYKQorZWNob2NoYXIvXGZCY3Vyc19hZGRjaFxmUigzWCkKK2VuZHdpbi9cZkJjdXJzX2luaXRzY3JcZlIoM1gpCitlcmFzZS9cZkJjdXJzX2NsZWFyXGZSKDNYKQorZXJhc2VjaGFyL1xmQmN1cnNfdGVybWF0dHJzXGZSKDNYKQorZXJhc2V3Y2hhci9cZkJjdXJzX3Rlcm1hdHRyc1xmUigzWCkKK2ZpbHRlci9cZkJjdXJzX3V0aWxcZlIoM1gpCitmbGFzaC9cZkJjdXJzX2JlZXBcZlIoM1gpCitmbHVzaGlucC9cZkJjdXJzX3V0aWxcZlIoM1gpCitnZXRfd2NoL1xmQmN1cnNfZ2V0X3djaFxmUigzWCkKK2dldF93c3RyL1xmQmN1cnNfZ2V0X3dzdHJcZlIoM1gpCitnZXRhdHRycy9cZkJjdXJzX2F0dHJcZlIoM1gpCitnZXRiZWd4L1xmQmN1cnNfbGVnYWN5XGZSKDNYKSoKK2dldGJlZ3kvXGZCY3Vyc19sZWdhY3lcZlIoM1gpKgorZ2V0YmVneXgvXGZCY3Vyc19nZXR5eFxmUigzWCkKK2dldGJrZ2QvXGZCY3Vyc19ia2dkXGZSKDNYKQorZ2V0Ymtncm5kL1xmQmN1cnNfYmtncm5kXGZSKDNYKQorZ2V0Y2NoYXIvXGZCY3Vyc19nZXRjY2hhclxmUigzWCkKK2dldGNoL1xmQmN1cnNfZ2V0Y2hcZlIoM1gpCitnZXRjdXJ4L1xmQmN1cnNfbGVnYWN5XGZSKDNYKSoKK2dldGN1cnkvXGZCY3Vyc19sZWdhY3lcZlIoM1gpKgorZ2V0bWF4eC9cZkJjdXJzX2xlZ2FjeVxmUigzWCkqCitnZXRtYXh5L1xmQmN1cnNfbGVnYWN5XGZSKDNYKSoKK2dldG1heHl4L1xmQmN1cnNfZ2V0eXhcZlIoM1gpCitnZXRtb3VzZS9cZkJjdXJzX21vdXNlXGZSKDNYKSoKK2dldG5fd3N0ci9cZkJjdXJzX2dldF93c3RyXGZSKDNYKQorZ2V0bnN0ci9cZkJjdXJzX2dldHN0clxmUigzWCkKK2dldHBhcngvXGZCY3Vyc19sZWdhY3lcZlIoM1gpKgorZ2V0cGFyeS9cZkJjdXJzX2xlZ2FjeVxmUigzWCkqCitnZXRwYXJ5eC9cZkJjdXJzX2dldHl4XGZSKDNYKQorZ2V0c3RyL1xmQmN1cnNfZ2V0c3RyXGZSKDNYKQorZ2V0c3l4L1xmQmN1cnNfa2VybmVsXGZSKDNYKQorZ2V0d2luL1xmQmN1cnNfdXRpbFxmUigzWCkKK2dldHl4L1xmQmN1cnNfZ2V0eXhcZlIoM1gpCitoYWxmZGVsYXkvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitoYXNfY29sb3JzL1xmQmN1cnNfY29sb3JcZlIoM1gpCitoYXNfaWMvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCitoYXNfaWwvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCitoYXNfa2V5L1xmQmN1cnNfZ2V0Y2hcZlIoM1gpKgoraGxpbmUvXGZCY3Vyc19ib3JkZXJcZlIoM1gpCitobGluZV9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQoraWRjb2svXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQoraWRsb2svXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQoraW1tZWRvay9cZkJjdXJzX291dG9wdHNcZlIoM1gpCitpbl93Y2gvXGZCY3Vyc19pbl93Y2hcZlIoM1gpCitpbl93Y2huc3RyL1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKQoraW5fd2Noc3RyL1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKQoraW5jaC9cZkJjdXJzX2luY2hcZlIoM1gpCitpbmNobnN0ci9cZkJjdXJzX2luY2hzdHJcZlIoM1gpCitpbmNoc3RyL1xmQmN1cnNfaW5jaHN0clxmUigzWCkKK2luaXRfY29sb3IvXGZCY3Vyc19jb2xvclxmUigzWCkKK2luaXRfcGFpci9cZkJjdXJzX2NvbG9yXGZSKDNYKQoraW5pdHNjci9cZkJjdXJzX2luaXRzY3JcZlIoM1gpCitpbm5zdHIvXGZCY3Vyc19pbnN0clxmUigzWCkKK2lubndzdHIvXGZCY3Vyc19pbndzdHJcZlIoM1gpCitpbnNfbndzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK2luc193Y2gvXGZCY3Vyc19pbnNfd2NoXGZSKDNYKQoraW5zX3dzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK2luc2NoL1xmQmN1cnNfaW5zY2hcZlIoM1gpCitpbnNkZWxsbi9cZkJjdXJzX2RlbGV0ZWxuXGZSKDNYKQoraW5zZXJ0bG4vXGZCY3Vyc19kZWxldGVsblxmUigzWCkKK2luc25zdHIvXGZCY3Vyc19pbnNzdHJcZlIoM1gpCitpbnNzdHIvXGZCY3Vyc19pbnNzdHJcZlIoM1gpCitpbnN0ci9cZkJjdXJzX2luc3RyXGZSKDNYKQoraW50cmZsdXNoL1xmQmN1cnNfaW5vcHRzXGZSKDNYKQoraW53c3RyL1xmQmN1cnNfaW53c3RyXGZSKDNYKQoraXNfY2xlYXJlZC9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19pZGNvay9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19pZGxvay9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19pbW1lZG9rL1xmQmN1cnNfb3BhcXVlXGZSKDNYKSoKK2lzX2tleXBhZC9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19sZWF2ZW9rL1xmQmN1cnNfb3BhcXVlXGZSKDNYKSoKK2lzX2xpbmV0b3VjaGVkL1xmQmN1cnNfdG91Y2hcZlIoM1gpCitpc19ub2RlbGF5L1xmQmN1cnNfb3BhcXVlXGZSKDNYKSoKK2lzX25vdGltZW91dC9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19zY3JvbGxvay9cZkJjdXJzX29wYXF1ZVxmUigzWCkqCitpc19zeW5jb2svXGZCY3Vyc19vcGFxdWVcZlIoM1gpKgoraXNfdGVybV9yZXNpemVkL1xmQnJlc2l6ZXRlcm1cZlIoM1gpKgoraXNfd2ludG91Y2hlZC9cZkJjdXJzX3RvdWNoXGZSKDNYKQoraXNlbmR3aW4vXGZCY3Vyc19pbml0c2NyXGZSKDNYKQora2V5X2RlZmluZWQvXGZCa2V5X2RlZmluZWRcZlIoM1gpKgora2V5X25hbWUvXGZCY3Vyc191dGlsXGZSKDNYKQora2V5Ym91bmQvXGZCa2V5Ym91bmRcZlIoM1gpKgora2V5bmFtZS9cZkJjdXJzX3V0aWxcZlIoM1gpCitrZXlvay9cZkJrZXlva1xmUigzWCkqCitrZXlwYWQvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitraWxsY2hhci9cZkJjdXJzX3Rlcm1hdHRyc1xmUigzWCkKK2tpbGx3Y2hhci9cZkJjdXJzX3Rlcm1hdHRyc1xmUigzWCkKK2xlYXZlb2svXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorbG9uZ25hbWUvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCittY3ByaW50L1xmQmN1cnNfcHJpbnRcZlIoM1gpKgorbWV0YS9cZkJjdXJzX2lub3B0c1xmUigzWCkKK21vdXNlX3RyYWZvL1xmQmN1cnNfbW91c2VcZlIoM1gpKgorbW91c2VpbnRlcnZhbC9cZkJjdXJzX21vdXNlXGZSKDNYKSoKK21vdXNlbWFzay9cZkJjdXJzX21vdXNlXGZSKDNYKSoKK21vdmUvXGZCY3Vyc19tb3ZlXGZSKDNYKQorbXZhZGRfd2NoL1xmQmN1cnNfYWRkX3djaFxmUigzWCkKK212YWRkX3djaG5zdHIvXGZCY3Vyc19hZGRfd2Noc3RyXGZSKDNYKQorbXZhZGRfd2Noc3RyL1xmQmN1cnNfYWRkX3djaHN0clxmUigzWCkKK212YWRkY2gvXGZCY3Vyc19hZGRjaFxmUigzWCkKK212YWRkY2huc3RyL1xmQmN1cnNfYWRkY2hzdHJcZlIoM1gpCittdmFkZGNoc3RyL1xmQmN1cnNfYWRkY2hzdHJcZlIoM1gpCittdmFkZG5zdHIvXGZCY3Vyc19hZGRzdHJcZlIoM1gpCittdmFkZG53c3RyL1xmQmN1cnNfYWRkd3N0clxmUigzWCkKK212YWRkc3RyL1xmQmN1cnNfYWRkc3RyXGZSKDNYKQorbXZhZGR3c3RyL1xmQmN1cnNfYWRkd3N0clxmUigzWCkKK212Y2hnYXQvXGZCY3Vyc19hdHRyXGZSKDNYKQorbXZjdXIvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK212ZGVsY2gvXGZCY3Vyc19kZWxjaFxmUigzWCkKK212ZGVyd2luL1xmQmN1cnNfd2luZG93XGZSKDNYKQorbXZnZXRfd2NoL1xmQmN1cnNfZ2V0X3djaFxmUigzWCkKK212Z2V0X3dzdHIvXGZCY3Vyc19nZXRfd3N0clxmUigzWCkKK212Z2V0Y2gvXGZCY3Vyc19nZXRjaFxmUigzWCkKK212Z2V0bl93c3RyL1xmQmN1cnNfZ2V0X3dzdHJcZlIoM1gpCittdmdldG5zdHIvXGZCY3Vyc19nZXRzdHJcZlIoM1gpCittdmdldHN0ci9cZkJjdXJzX2dldHN0clxmUigzWCkKK212aGxpbmUvXGZCY3Vyc19ib3JkZXJcZlIoM1gpCittdmhsaW5lX3NldC9cZkJjdXJzX2JvcmRlcl9zZXRcZlIoM1gpCittdmluX3djaC9cZkJjdXJzX2luX3djaFxmUigzWCkKK212aW5fd2NobnN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK212aW5fd2Noc3RyL1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKQorbXZpbmNoL1xmQmN1cnNfaW5jaFxmUigzWCkKK212aW5jaG5zdHIvXGZCY3Vyc19pbmNoc3RyXGZSKDNYKQorbXZpbmNoc3RyL1xmQmN1cnNfaW5jaHN0clxmUigzWCkKK212aW5uc3RyL1xmQmN1cnNfaW5zdHJcZlIoM1gpCittdmlubndzdHIvXGZCY3Vyc19pbndzdHJcZlIoM1gpCittdmluc19ud3N0ci9cZkJjdXJzX2luc193c3RyXGZSKDNYKQorbXZpbnNfd2NoL1xmQmN1cnNfaW5zX3djaFxmUigzWCkKK212aW5zX3dzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK212aW5zY2gvXGZCY3Vyc19pbnNjaFxmUigzWCkKK212aW5zbnN0ci9cZkJjdXJzX2luc3N0clxmUigzWCkKK212aW5zc3RyL1xmQmN1cnNfaW5zc3RyXGZSKDNYKQorbXZpbnN0ci9cZkJjdXJzX2luc3RyXGZSKDNYKQorbXZpbndzdHIvXGZCY3Vyc19pbndzdHJcZlIoM1gpCittdnByaW50dy9cZkJjdXJzX3ByaW50d1xmUigzWCkKK212c2NhbncvXGZCY3Vyc19zY2Fud1xmUigzWCkKK212dmxpbmUvXGZCY3Vyc19ib3JkZXJcZlIoM1gpCittdnZsaW5lX3NldC9cZkJjdXJzX2JvcmRlcl9zZXRcZlIoM1gpCittdndhZGRfd2NoL1xmQmN1cnNfYWRkX3djaFxmUigzWCkKK212d2FkZF93Y2huc3RyL1xmQmN1cnNfYWRkX3djaHN0clxmUigzWCkKK212d2FkZF93Y2hzdHIvXGZCY3Vyc19hZGRfd2Noc3RyXGZSKDNYKQorbXZ3YWRkY2gvXGZCY3Vyc19hZGRjaFxmUigzWCkKK212d2FkZGNobnN0ci9cZkJjdXJzX2FkZGNoc3RyXGZSKDNYKQorbXZ3YWRkY2hzdHIvXGZCY3Vyc19hZGRjaHN0clxmUigzWCkKK212d2FkZG5zdHIvXGZCY3Vyc19hZGRzdHJcZlIoM1gpCittdndhZGRud3N0ci9cZkJjdXJzX2FkZHdzdHJcZlIoM1gpCittdndhZGRzdHIvXGZCY3Vyc19hZGRzdHJcZlIoM1gpCittdndhZGR3c3RyL1xmQmN1cnNfYWRkd3N0clxmUigzWCkKK212d2NoZ2F0L1xmQmN1cnNfYXR0clxmUigzWCkKK212d2RlbGNoL1xmQmN1cnNfZGVsY2hcZlIoM1gpCittdndnZXRfd2NoL1xmQmN1cnNfZ2V0X3djaFxmUigzWCkKK212d2dldF93c3RyL1xmQmN1cnNfZ2V0X3dzdHJcZlIoM1gpCittdndnZXRjaC9cZkJjdXJzX2dldGNoXGZSKDNYKQorbXZ3Z2V0bl93c3RyL1xmQmN1cnNfZ2V0X3dzdHJcZlIoM1gpCittdndnZXRuc3RyL1xmQmN1cnNfZ2V0c3RyXGZSKDNYKQorbXZ3Z2V0c3RyL1xmQmN1cnNfZ2V0c3RyXGZSKDNYKQorbXZ3aGxpbmUvXGZCY3Vyc19ib3JkZXJcZlIoM1gpCittdndobGluZV9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQorbXZ3aW4vXGZCY3Vyc193aW5kb3dcZlIoM1gpCittdndpbl93Y2gvXGZCY3Vyc19pbl93Y2hcZlIoM1gpCittdndpbl93Y2huc3RyL1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKQorbXZ3aW5fd2Noc3RyL1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKQorbXZ3aW5jaC9cZkJjdXJzX2luY2hcZlIoM1gpCittdndpbmNobnN0ci9cZkJjdXJzX2luY2hzdHJcZlIoM1gpCittdndpbmNoc3RyL1xmQmN1cnNfaW5jaHN0clxmUigzWCkKK212d2lubnN0ci9cZkJjdXJzX2luc3RyXGZSKDNYKQorbXZ3aW5ud3N0ci9cZkJjdXJzX2lud3N0clxmUigzWCkKK212d2luc19ud3N0ci9cZkJjdXJzX2luc193c3RyXGZSKDNYKQorbXZ3aW5zX3djaC9cZkJjdXJzX2luc193Y2hcZlIoM1gpCittdndpbnNfd3N0ci9cZkJjdXJzX2luc193c3RyXGZSKDNYKQorbXZ3aW5zY2gvXGZCY3Vyc19pbnNjaFxmUigzWCkKK212d2luc25zdHIvXGZCY3Vyc19pbnNzdHJcZlIoM1gpCittdndpbnNzdHIvXGZCY3Vyc19pbnNzdHJcZlIoM1gpCittdndpbnN0ci9cZkJjdXJzX2luc3RyXGZSKDNYKQorbXZ3aW53c3RyL1xmQmN1cnNfaW53c3RyXGZSKDNYKQorbXZ3cHJpbnR3L1xmQmN1cnNfcHJpbnR3XGZSKDNYKQorbXZ3c2NhbncvXGZCY3Vyc19zY2Fud1xmUigzWCkKK212d3ZsaW5lL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQorbXZ3dmxpbmVfc2V0L1xmQmN1cnNfYm9yZGVyX3NldFxmUigzWCkKK25hcG1zL1xmQmN1cnNfa2VybmVsXGZSKDNYKQorbmV3cGFkL1xmQmN1cnNfcGFkXGZSKDNYKQorbmV3dGVybS9cZkJjdXJzX2luaXRzY3JcZlIoM1gpCituZXd3aW4vXGZCY3Vyc193aW5kb3dcZlIoM1gpCitubC9cZkJjdXJzX291dG9wdHNcZlIoM1gpCitub2NicmVhay9cZkJjdXJzX2lub3B0c1xmUigzWCkKK25vZGVsYXkvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitub2VjaG8vXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitub2ZpbHRlci9cZkJjdXJzX3V0aWxcZlIoM1gpKgorbm9ubC9cZkJjdXJzX291dG9wdHNcZlIoM1gpCitub3FpZmx1c2gvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCitub3Jhdy9cZkJjdXJzX2lub3B0c1xmUigzWCkKK25vdGltZW91dC9cZkJjdXJzX2lub3B0c1xmUigzWCkKK292ZXJsYXkvXGZCY3Vyc19vdmVybGF5XGZSKDNYKQorb3ZlcndyaXRlL1xmQmN1cnNfb3ZlcmxheVxmUigzWCkKK3BhaXJfY29udGVudC9cZkJjdXJzX2NvbG9yXGZSKDNYKQorcGVjaG9jaGFyL1xmQmN1cnNfcGFkXGZSKDNYKQorcG5vdXRyZWZyZXNoL1xmQmN1cnNfcGFkXGZSKDNYKQorcHJlZnJlc2gvXGZCY3Vyc19wYWRcZlIoM1gpCitwcmludHcvXGZCY3Vyc19wcmludHdcZlIoM1gpCitwdXRwL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCitwdXR3aW4vXGZCY3Vyc191dGlsXGZSKDNYKQorcWlmbHVzaC9cZkJjdXJzX2lub3B0c1xmUigzWCkKK3Jhdy9cZkJjdXJzX2lub3B0c1xmUigzWCkKK3JlZHJhd3dpbi9cZkJjdXJzX3JlZnJlc2hcZlIoM1gpCityZWZyZXNoL1xmQmN1cnNfcmVmcmVzaFxmUigzWCkKK3Jlc2V0X3Byb2dfbW9kZS9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK3Jlc2V0X3NoZWxsX21vZGUvXGZCY3Vyc19rZXJuZWxcZlIoM1gpCityZXNldHR5L1xmQmN1cnNfa2VybmVsXGZSKDNYKQorcmVzaXpldGVybS9cZkJyZXNpemV0ZXJtXGZSKDNYKSoKK3Jlc3RhcnR0ZXJtL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCityaXBvZmZsaW5lL1xmQmN1cnNfa2VybmVsXGZSKDNYKQorc2F2ZXR0eS9cZkJjdXJzX2tlcm5lbFxmUigzWCkKK3NjYW53L1xmQmN1cnNfc2NhbndcZlIoM1gpCitzY3JfZHVtcC9cZkJjdXJzX3Njcl9kdW1wXGZSKDNYKQorc2NyX2luaXQvXGZCY3Vyc19zY3JfZHVtcFxmUigzWCkKK3Njcl9yZXN0b3JlL1xmQmN1cnNfc2NyX2R1bXBcZlIoM1gpCitzY3Jfc2V0L1xmQmN1cnNfc2NyX2R1bXBcZlIoM1gpCitzY3JsL1xmQmN1cnNfc2Nyb2xsXGZSKDNYKQorc2Nyb2xsL1xmQmN1cnNfc2Nyb2xsXGZSKDNYKQorc2Nyb2xsb2svXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorc2V0X2N1cnRlcm0vXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3NldF90ZXJtL1xmQmN1cnNfaW5pdHNjclxmUigzWCkKK3NldGNjaGFyL1xmQmN1cnNfZ2V0Y2NoYXJcZlIoM1gpCitzZXRzY3JyZWcvXGZCY3Vyc19vdXRvcHRzXGZSKDNYKQorc2V0c3l4L1xmQmN1cnNfa2VybmVsXGZSKDNYKQorc2V0dGVybS9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQorc2V0dXB0ZXJtL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCitzbGtfYXR0ci9cZkJjdXJzX3Nsa1xmUigzWCkqCitzbGtfYXR0cl9vZmYvXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfYXR0cl9vbi9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19hdHRyX3NldC9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19hdHRyb2ZmL1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX2F0dHJvbi9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19hdHRyc2V0L1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX2NsZWFyL1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX2NvbG9yL1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX2luaXQvXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfbGFiZWwvXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfbm91dHJlZnJlc2gvXGZCY3Vyc19zbGtcZlIoM1gpCitzbGtfcmVmcmVzaC9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa19yZXN0b3JlL1xmQmN1cnNfc2xrXGZSKDNYKQorc2xrX3NldC9cZkJjdXJzX3Nsa1xmUigzWCkKK3Nsa190b3VjaC9cZkJjdXJzX3Nsa1xmUigzWCkKK3N0YW5kZW5kL1xmQmN1cnNfYXR0clxmUigzWCkKK3N0YW5kb3V0L1xmQmN1cnNfYXR0clxmUigzWCkKK3N0YXJ0X2NvbG9yL1xmQmN1cnNfY29sb3JcZlIoM1gpCitzdWJwYWQvXGZCY3Vyc19wYWRcZlIoM1gpCitzdWJ3aW4vXGZCY3Vyc193aW5kb3dcZlIoM1gpCitzeW5jb2svXGZCY3Vyc193aW5kb3dcZlIoM1gpCit0ZXJtX2F0dHJzL1xmQmN1cnNfdGVybWF0dHJzXGZSKDNYKQordGVybWF0dHJzL1xmQmN1cnNfdGVybWF0dHJzXGZSKDNYKQordGVybW5hbWUvXGZCY3Vyc190ZXJtYXR0cnNcZlIoM1gpCit0Z2V0ZW50L1xmQmN1cnNfdGVybWNhcFxmUigzWCkKK3RnZXRmbGFnL1xmQmN1cnNfdGVybWNhcFxmUigzWCkKK3RnZXRudW0vXGZCY3Vyc190ZXJtY2FwXGZSKDNYKQordGdldHN0ci9cZkJjdXJzX3Rlcm1jYXBcZlIoM1gpCit0Z290by9cZkJjdXJzX3Rlcm1jYXBcZlIoM1gpCit0aWdldGZsYWcvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3RpZ2V0bnVtL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCit0aWdldHN0ci9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQordGltZW91dC9cZkJjdXJzX2lub3B0c1xmUigzWCkKK3RvdWNobGluZS9cZkJjdXJzX3RvdWNoXGZSKDNYKQordG91Y2h3aW4vXGZCY3Vyc190b3VjaFxmUigzWCkKK3RwYXJtL1xmQmN1cnNfdGVybWluZm9cZlIoM1gpCit0cHV0cy9cZkJjdXJzX3Rlcm1jYXBcZlIoM1gpCit0cHV0cy9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQordHJhY2UvXGZCY3Vyc190cmFjZVxmUigzWCkqCit0eXBlYWhlYWQvXGZCY3Vyc19pbm9wdHNcZlIoM1gpCit1bmN0cmwvXGZCY3Vyc191dGlsXGZSKDNYKQordW5nZXRfd2NoL1xmQmN1cnNfZ2V0X3djaFxmUigzWCkKK3VuZ2V0Y2gvXGZCY3Vyc19nZXRjaFxmUigzWCkKK3VuZ2V0bW91c2UvXGZCY3Vyc19tb3VzZVxmUigzWCkqCit1bnRvdWNod2luL1xmQmN1cnNfdG91Y2hcZlIoM1gpCit1c2VfZGVmYXVsdF9jb2xvcnMvXGZCZGVmYXVsdF9jb2xvcnNcZlIoM1gpKgordXNlX2Vudi9cZkJjdXJzX3V0aWxcZlIoM1gpCit1c2VfZXh0ZW5kZWRfbmFtZXMvXGZCY3Vyc19leHRlbmRcZlIoM1gpKgordXNlX2xlZ2FjeV9jb2RpbmcvXGZCbGVnYWN5X2NvZGluZ1xmUigzWCkqCit2aWRfYXR0ci9cZkJjdXJzX3Rlcm1pbmZvXGZSKDNYKQordmlkX3B1dHMvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3ZpZGF0dHIvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3ZpZHB1dHMvXGZCY3Vyc190ZXJtaW5mb1xmUigzWCkKK3ZsaW5lL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQordmxpbmVfc2V0L1xmQmN1cnNfYm9yZGVyX3NldFxmUigzWCkKK3Z3X3ByaW50dy9cZkJjdXJzX3ByaW50d1xmUigzWCkKK3Z3X3NjYW53L1xmQmN1cnNfc2NhbndcZlIoM1gpCit2d3ByaW50dy9cZkJjdXJzX3ByaW50d1xmUigzWCkKK3Z3c2NhbncvXGZCY3Vyc19zY2Fud1xmUigzWCkKK3dhZGRfd2NoL1xmQmN1cnNfYWRkX3djaFxmUigzWCkKK3dhZGRfd2NobnN0ci9cZkJjdXJzX2FkZF93Y2hzdHJcZlIoM1gpCit3YWRkX3djaHN0ci9cZkJjdXJzX2FkZF93Y2hzdHJcZlIoM1gpCit3YWRkY2gvXGZCY3Vyc19hZGRjaFxmUigzWCkKK3dhZGRjaG5zdHIvXGZCY3Vyc19hZGRjaHN0clxmUigzWCkKK3dhZGRjaHN0ci9cZkJjdXJzX2FkZGNoc3RyXGZSKDNYKQord2FkZG5zdHIvXGZCY3Vyc19hZGRzdHJcZlIoM1gpCit3YWRkbndzdHIvXGZCY3Vyc19hZGR3c3RyXGZSKDNYKQord2FkZHN0ci9cZkJjdXJzX2FkZHN0clxmUigzWCkKK3dhZGR3c3RyL1xmQmN1cnNfYWRkd3N0clxmUigzWCkKK3dhdHRyX2dldC9cZkJjdXJzX2F0dHJcZlIoM1gpCit3YXR0cl9vZmYvXGZCY3Vyc19hdHRyXGZSKDNYKQord2F0dHJfb24vXGZCY3Vyc19hdHRyXGZSKDNYKQord2F0dHJfc2V0L1xmQmN1cnNfYXR0clxmUigzWCkKK3dhdHRyb2ZmL1xmQmN1cnNfYXR0clxmUigzWCkKK3dhdHRyb24vXGZCY3Vyc19hdHRyXGZSKDNYKQord2F0dHJzZXQvXGZCY3Vyc19hdHRyXGZSKDNYKQord2JrZ2QvXGZCY3Vyc19ia2dkXGZSKDNYKQord2JrZ2RzZXQvXGZCY3Vyc19ia2dkXGZSKDNYKQord2JrZ3JuZC9cZkJjdXJzX2JrZ3JuZFxmUigzWCkKK3dia2dybmRzZXQvXGZCY3Vyc19ia2dybmRcZlIoM1gpCit3Ym9yZGVyL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQord2JvcmRlcl9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQord2NoZ2F0L1xmQmN1cnNfYXR0clxmUigzWCkKK3djbGVhci9cZkJjdXJzX2NsZWFyXGZSKDNYKQord2NscnRvYm90L1xmQmN1cnNfY2xlYXJcZlIoM1gpCit3Y2xydG9lb2wvXGZCY3Vyc19jbGVhclxmUigzWCkKK3djb2xvcl9zZXQvXGZCY3Vyc19hdHRyXGZSKDNYKQord2N1cnN5bmN1cC9cZkJjdXJzX3dpbmRvd1xmUigzWCkKK3dkZWxjaC9cZkJjdXJzX2RlbGNoXGZSKDNYKQord2RlbGV0ZWxuL1xmQmN1cnNfZGVsZXRlbG5cZlIoM1gpCit3ZWNob193Y2hhci9cZkJjdXJzX2FkZF93Y2hcZlIoM1gpCit3ZWNob2NoYXIvXGZCY3Vyc19hZGRjaFxmUigzWCkKK3dlbmNsb3NlL1xmQmN1cnNfbW91c2VcZlIoM1gpKgord2VyYXNlL1xmQmN1cnNfY2xlYXJcZlIoM1gpCit3Z2V0X3djaC9cZkJjdXJzX2dldF93Y2hcZlIoM1gpCit3Z2V0X3dzdHIvXGZCY3Vyc19nZXRfd3N0clxmUigzWCkKK3dnZXRia2dybmQvXGZCY3Vyc19ia2dybmRcZlIoM1gpCit3Z2V0Y2gvXGZCY3Vyc19nZXRjaFxmUigzWCkKK3dnZXRuX3dzdHIvXGZCY3Vyc19nZXRfd3N0clxmUigzWCkKK3dnZXRuc3RyL1xmQmN1cnNfZ2V0c3RyXGZSKDNYKQord2dldHN0ci9cZkJjdXJzX2dldHN0clxmUigzWCkKK3dobGluZS9cZkJjdXJzX2JvcmRlclxmUigzWCkKK3dobGluZV9zZXQvXGZCY3Vyc19ib3JkZXJfc2V0XGZSKDNYKQord2luX3djaC9cZkJjdXJzX2luX3djaFxmUigzWCkKK3dpbl93Y2huc3RyL1xmQmN1cnNfaW5fd2Noc3RyXGZSKDNYKQord2luX3djaHN0ci9cZkJjdXJzX2luX3djaHN0clxmUigzWCkKK3dpbmNoL1xmQmN1cnNfaW5jaFxmUigzWCkKK3dpbmNobnN0ci9cZkJjdXJzX2luY2hzdHJcZlIoM1gpCit3aW5jaHN0ci9cZkJjdXJzX2luY2hzdHJcZlIoM1gpCit3aW5uc3RyL1xmQmN1cnNfaW5zdHJcZlIoM1gpCit3aW5ud3N0ci9cZkJjdXJzX2lud3N0clxmUigzWCkKK3dpbnNfbndzdHIvXGZCY3Vyc19pbnNfd3N0clxmUigzWCkKK3dpbnNfd2NoL1xmQmN1cnNfaW5zX3djaFxmUigzWCkKK3dpbnNfd3N0ci9cZkJjdXJzX2luc193c3RyXGZSKDNYKQord2luc2NoL1xmQmN1cnNfaW5zY2hcZlIoM1gpCit3aW5zZGVsbG4vXGZCY3Vyc19kZWxldGVsblxmUigzWCkKK3dpbnNlcnRsbi9cZkJjdXJzX2RlbGV0ZWxuXGZSKDNYKQord2luc25zdHIvXGZCY3Vyc19pbnNzdHJcZlIoM1gpCit3aW5zc3RyL1xmQmN1cnNfaW5zc3RyXGZSKDNYKQord2luc3RyL1xmQmN1cnNfaW5zdHJcZlIoM1gpCit3aW53c3RyL1xmQmN1cnNfaW53c3RyXGZSKDNYKQord21vdXNlX3RyYWZvL1xmQmN1cnNfbW91c2VcZlIoM1gpKgord21vdmUvXGZCY3Vyc19tb3ZlXGZSKDNYKQord25vdXRyZWZyZXNoL1xmQmN1cnNfcmVmcmVzaFxmUigzWCkKK3dwcmludHcvXGZCY3Vyc19wcmludHdcZlIoM1gpCit3cmVkcmF3bG4vXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQord3JlZnJlc2gvXGZCY3Vyc19yZWZyZXNoXGZSKDNYKQord3Jlc2l6ZS9cZkJ3cmVzaXplXGZSKDNYKSoKK3dzY2Fudy9cZkJjdXJzX3NjYW53XGZSKDNYKQord3NjcmwvXGZCY3Vyc19zY3JvbGxcZlIoM1gpCit3c2V0c2NycmVnL1xmQmN1cnNfb3V0b3B0c1xmUigzWCkKK3dzdGFuZGVuZC9cZkJjdXJzX2F0dHJcZlIoM1gpCit3c3RhbmRvdXQvXGZCY3Vyc19hdHRyXGZSKDNYKQord3N5bmNkb3duL1xmQmN1cnNfd2luZG93XGZSKDNYKQord3N5bmN1cC9cZkJjdXJzX3dpbmRvd1xmUigzWCkKK3d0aW1lb3V0L1xmQmN1cnNfaW5vcHRzXGZSKDNYKQord3RvdWNobG4vXGZCY3Vyc190b3VjaFxmUigzWCkKK3d1bmN0cmwvXGZCY3Vyc191dGlsXGZSKDNYKQord3ZsaW5lL1xmQmN1cnNfYm9yZGVyXGZSKDNYKQord3ZsaW5lX3NldC9cZkJjdXJzX2JvcmRlcl9zZXRcZlIoM1gpCisuVEUKKy5TSCBSRVRVUk4gVkFMVUUKK1JvdXRpbmVzIHRoYXQgcmV0dXJuIGFuIGludGVnZXIgcmV0dXJuIFxmQkVSUlxmUiB1cG9uIGZhaWx1cmUgYW5kIGFuCitpbnRlZ2VyIHZhbHVlIG90aGVyIHRoYW4gXGZCRVJSXGZSIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB1bmxlc3MKK290aGVyd2lzZSBub3RlZCBpbiB0aGUgcm91dGluZSBkZXNjcmlwdGlvbnMuCisuUFAKK0FsbCBtYWNyb3MgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgXGZCd1xmUiB2ZXJzaW9uLCBleGNlcHQgXGZCc2V0c2NycmVnXGZSLAorXGZCd3NldHNjcnJlZ1xmUiwgXGZCZ2V0eXhcZlIsIFxmQmdldGJlZ3l4XGZSLCBhbmQgXGZCZ2V0bWF4eXhcZlIuCitUaGUgcmV0dXJuIHZhbHVlcyBvZiBcZkJzZXRzY3JyZWdcZlIsIFxmQndzZXRzY3JyZWdcZlIsIFxmQmdldHl4XGZSLCBcZkJnZXRiZWd5eFxmUiwgYW5kCitcZkJnZXRtYXh5eFxmUiBhcmUgdW5kZWZpbmVkIChpLmUuLCB0aGVzZSBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlCityaWdodC1oYW5kIHNpZGUgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnRzKS4KKy5QUAorUm91dGluZXMgdGhhdCByZXR1cm4gcG9pbnRlcnMgcmV0dXJuIFxmQk5VTExcZlIgb24gZXJyb3IuCisuU0ggRU5WSVJPTk1FTlQKK1RoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgc3ltYm9scyBhcmUgdXNlZnVsIGZvciBjdXN0b21pemluZyB0aGUKK3J1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeS4KK1RoZSBtb3N0IGltcG9ydGFudCBvbmVzIGhhdmUgYmVlbiBhbHJlYWR5IGRpc2N1c3NlZCBpbiBkZXRhaWwuCisuVFAgNQorQkFVRFJBVEUKK1RoZSBkZWJ1Z2dpbmcgbGlicmFyeSBjaGVja3MgdGhpcyBlbnZpcm9ubWVudCBzeW1ib2wgd2hlbiB0aGUgYXBwbGljYXRpb24KK2hhcyByZWRpcmVjdGVkIG91dHB1dCB0byBhIGZpbGUuCitUaGUgc3ltYm9sJ3MgbnVtZXJpYyB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgYmF1ZHJhdGUuCitJZiBubyB2YWx1ZSBpcyBmb3VuZCwgXGZCbmN1cnNlc1xmUiB1c2VzIDk2MDAuCitUaGlzIGFsbG93cyB0ZXN0ZXJzIHRvIGNvbnN0cnVjdCByZXBlYXRhYmxlIHRlc3QtY2FzZXMKK3RoYXQgdGFrZSBpbnRvIGFjY291bnQgY29zdHMgdGhhdCBkZXBlbmQgb24gYmF1ZHJhdGUuCisuVFAgNQorQ0MKK1doZW4gc2V0LCBjaGFuZ2Ugb2NjdXJyZW5jZXMgb2YgdGhlIGNvbW1hbmRfY2hhcmFjdGVyCisoaS5lLiwgdGhlIFxmQmNtZGNoXGZQIGNhcGFiaWxpdHkpCitvZiB0aGUgbG9hZGVkIHRlcm1pbmZvIGVudHJpZXMgdG8gdGhlIHZhbHVlIG9mIHRoaXMgc3ltYm9sLgorVmVyeSBmZXcgdGVybWluZm8gZW50cmllcyBwcm92aWRlIHRoaXMgZmVhdHVyZS4KKy5UUCA1CitDT0xVTU5TCitTcGVjaWZ5IHRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuIGluIGNoYXJhY3RlcnMuCitBcHBsaWNhdGlvbnMgcnVubmluZyBpbiBhIHdpbmRvd2luZyBlbnZpcm9ubWVudCB1c3VhbGx5IGFyZSBhYmxlIHRvCitvYnRhaW4gdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cgaW4gd2hpY2ggdGhleSBhcmUgZXhlY3V0aW5nLgorSWYgbmVpdGhlciB0aGUgXGZCQ09MVU1OU1xmUCB2YWx1ZSBub3IgdGhlIHRlcm1pbmFsJ3Mgc2NyZWVuIHNpemUgaXMgYXZhaWxhYmxlLAorXGZCbmN1cnNlc1xmUiB1c2VzIHRoZSBzaXplIHdoaWNoIG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlCisoaS5lLiwgdGhlIFxmQmNvbHNcZlIgY2FwYWJpbGl0eSkuCisuSVAKK0l0IGlzIGltcG9ydGFudCB0aGF0IHlvdXIgYXBwbGljYXRpb24gdXNlIGEgY29ycmVjdCBzaXplIGZvciB0aGUgc2NyZWVuLgorVGhpcyBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIGJlY2F1c2UgeW91ciBhcHBsaWNhdGlvbiBtYXkgYmUKK3J1bm5pbmcgb24gYSBob3N0IHdoaWNoIGRvZXMgbm90IGhvbm9yIE5BV1MgKE5lZ290aWF0aW9ucyBBYm91dCBXaW5kb3cKK1NpemUpLCBvciBiZWNhdXNlIHlvdSBhcmUgdGVtcG9yYXJpbHkgcnVubmluZyBhcyBhbm90aGVyIHVzZXIuCitIb3dldmVyLCBzZXR0aW5nIFxmQkNPTFVNTlNcZlAgYW5kL29yIFxmQkxJTkVTXGZQIG92ZXJyaWRlcyB0aGUgbGlicmFyeSdzCit1c2Ugb2YgdGhlIHNjcmVlbiBzaXplIG9idGFpbmVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisuSVAKK0VpdGhlciBcZkJDT0xVTU5TXGZQIG9yIFxmQkxJTkVTXGZQIHN5bWJvbHMgbWF5IGJlIHNwZWNpZmllZCBpbmRlcGVuZGVudGx5LgorVGhpcyBpcyBtYWlubHkgdXNlZnVsIHRvIGNpcmN1bXZlbnQgbGVnYWN5IG1pc2ZlYXR1cmVzIG9mIHRlcm1pbmFsIGRlc2NyaXB0aW9ucywKK2UuZy4sIHh0ZXJtIHdoaWNoIGNvbW1vbmx5IHNwZWNpZmllcyBhIDY1IGxpbmUgc2NyZWVuLgorRm9yIGJlc3QgcmVzdWx0cywgXGZCbGluZXNcZlIgYW5kIFxmQmNvbHNcZlIgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaW4KK2EgdGVybWluYWwgZGVzY3JpcHRpb24gZm9yIHRlcm1pbmFscyB3aGljaCBhcmUgcnVuIGFzIGVtdWxhdGlvbnMuCisuSVAKK1VzZSB0aGUgXGZCdXNlX2VudlxmUiBmdW5jdGlvbiB0byBkaXNhYmxlIGFsbCB1c2Ugb2YgZXh0ZXJuYWwgZW52aXJvbm1lbnQKKyhpbmNsdWRpbmcgc3lzdGVtIGNhbGxzKSB0byBkZXRlcm1pbmUgdGhlIHNjcmVlbiBzaXplLgorLlRQIDUKK0VTQ0RFTEFZCitTcGVjaWZpZXMgdGhlIHRvdGFsIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yIHdoaWNoIG5jdXJzZXMgd2lsbAorYXdhaXQgYSBjaGFyYWN0ZXIgc2VxdWVuY2UsIGUuZy4sIGEgZnVuY3Rpb24ga2V5LgorVGhlIGRlZmF1bHQgdmFsdWUsIDEwMDAgbWlsbGlzZWNvbmRzLCBpcyBlbm91Z2ggZm9yIG1vc3QgdXNlcy4KK0hvd2V2ZXIsIGl0IGlzIG1hZGUgYSB2YXJpYWJsZSB0byBhY2NvbW1vZGF0ZSB1bnVzdWFsIGFwcGxpY2F0aW9ucy4KKy5JUAorVGhlIG1vc3QgY29tbW9uIGluc3RhbmNlIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBjaGFuZ2UgdGhpcyB2YWx1ZQoraXMgdG8gd29yayB3aXRoIHNsb3cgaG9zdHMsIGUuZy4sIHJ1bm5pbmcgb24gYSBuZXR3b3JrLgorSWYgdGhlIGhvc3QgY2Fubm90IHJlYWQgY2hhcmFjdGVycyByYXBpZGx5IGVub3VnaCwgaXQgd2lsbCBoYXZlIHRoZSBzYW1lCitlZmZlY3QgYXMgaWYgdGhlIHRlcm1pbmFsIGRpZCBub3Qgc2VuZCBjaGFyYWN0ZXJzIHJhcGlkbHkgZW5vdWdoLgorVGhlIGxpYnJhcnkgd2lsbCBzdGlsbCBzZWUgYSB0aW1lb3V0LgorLklQCitOb3RlIHRoYXQgeHRlcm0gbW91c2UgZXZlbnRzIGFyZSBidWlsdCB1cCBmcm9tIGNoYXJhY3RlciBzZXF1ZW5jZXMKK3JlY2VpdmVkIGZyb20gdGhlIHh0ZXJtLgorSWYgeW91ciBhcHBsaWNhdGlvbiBtYWtlcyBoZWF2eSB1c2Ugb2YgbXVsdGlwbGUtY2xpY2tpbmcsIHlvdSBtYXkKK3dpc2ggdG8gbGVuZ3RoZW4gdGhpcyBkZWZhdWx0IHZhbHVlIGJlY2F1c2UgdGhlIHRpbWVvdXQgYXBwbGllcwordG8gdGhlIGNvbXBvc2VkIG11bHRpLWNsaWNrIGV2ZW50IGFzIHdlbGwgYXMgdGhlIGluZGl2aWR1YWwgY2xpY2tzLgorLklQCitJbiBhZGRpdGlvbiB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsCit0aGlzIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgZ2xvYmFsIHZhcmlhYmxlIHdpdGggdGhlIHNhbWUgbmFtZS4KK1BvcnRhYmxlIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHJlbHkgdXBvbiB0aGUgcHJlc2VuY2Ugb2YgRVNDREVMQVkKK2luIGVpdGhlciBmb3JtLAorYnV0IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgdmFyaWFibGUKK2RvZXMgbm90IGNyZWF0ZSBwcm9ibGVtcyB3aGVuIGNvbXBpbGluZyBhbiBhcHBsaWNhdGlvbi4KKy5UUCA1CitIT01FCitUZWxscyBcZkJuY3Vyc2VzXGZSIHdoZXJlIHlvdXIgaG9tZSBkaXJlY3RvcnkgaXMuCitUaGF0IGlzIHdoZXJlIGl0IG1heSByZWFkIGFuZCB3cml0ZSBhdXhpbGlhcnkgdGVybWluYWwgZGVzY3JpcHRpb25zOgorLklQCiskSE9NRS8udGVybWNhcAorLmJyCiskSE9NRS8udGVybWluZm8KKy5UUCA1CitMSU5FUworTGlrZSBDT0xVTU5TLCBzcGVjaWZ5IHRoZSBoZWlnaHQgb2YgdGhlIHNjcmVlbiBpbiBjaGFyYWN0ZXJzLgorU2VlIENPTFVNTlMgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24uCisuVFAgNQorTU9VU0VfQlVUVE9OU18xMjMKK1RoaXMgYXBwbGllcyBvbmx5IHRvIHRoZSBPUy8yIEVNWCBwb3J0LgorSXQgc3BlY2lmaWVzIHRoZSBvcmRlciBvZiBidXR0b25zIG9uIHRoZSBtb3VzZS4KK09TLzIgbnVtYmVycyBhIDMtYnV0dG9uIG1vdXNlIGluY29uc2lzdGVudGx5IGZyb20gb3RoZXIKK3BsYXRmb3JtczoKKy5zcAorMSA9IGxlZnQKKy5icgorMiA9IHJpZ2h0CisuYnIKKzMgPSBtaWRkbGUuCisuc3AKK1RoaXMgc3ltYm9sIGxldHMgeW91IGN1c3RvbWl6ZSB0aGUgbW91c2UuCitUaGUgc3ltYm9sIG11c3QgYmUgdGhyZWUgbnVtZXJpYyBkaWdpdHMgMS0zIGluIGFueSBvcmRlciwgZS5nLiwgMTIzIG9yIDMyMS4KK0lmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIFxmQm5jdXJzZXNcZlIgdXNlcyAxMzIuCisuVFAgNQorTkNVUlNFU19BU1NVTUVEX0NPTE9SUworT3ZlcnJpZGUgdGhlIGNvbXBpbGVkLWluIGFzc3VtcHRpb24gdGhhdCB0aGUKK3Rlcm1pbmFsJ3MgZGVmYXVsdCBjb2xvcnMgYXJlIHdoaXRlLW9uLWJsYWNrCisoc2VlIFxmQmRlZmF1bHRfY29sb3JzXGZSKDNYKSkuCitZb3UgbWF5IHNldCB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvciB2YWx1ZXMgd2l0aCB0aGlzIGVudmlyb25tZW50Cit2YXJpYWJsZSBieSBwcm92aW5nIGEgMi1lbGVtZW50IGxpc3Q6IGZvcmVncm91bmQsYmFja2dyb3VuZC4KK0ZvciBleGFtcGxlLCB0byB0ZWxsIG5jdXJzZXMgdG8gbm90IGFzc3VtZSBhbnl0aGluZworYWJvdXQgdGhlIGNvbG9ycywgc2V0IHRoaXMgdG8gIi0xLC0xIi4KK1RvIG1ha2UgaXQgZ3JlZW4tb24tYmxhY2ssIHNldCBpdCB0byAiMiwwIi4KK0FueSBwb3NpdGl2ZSB2YWx1ZSBmcm9tIHplcm8gdG8gdGhlIHRlcm1pbmZvIFxmQm1heF9jb2xvcnNcZlIgdmFsdWUgaXMgYWxsb3dlZC4KKy5UUCA1CitOQ1VSU0VTX0dQTV9URVJNUworVGhpcyBhcHBsaWVzIG9ubHkgdG8gbmN1cnNlcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgR1BNIGludGVyZmFjZS4KKy5JUAorSWYgcHJlc2VudCwKK3RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBhIGxpc3Qgb2Ygb25lIG9yIG1vcmUgdGVybWluYWwgbmFtZXMKK2FnYWluc3Qgd2hpY2ggdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWF0Y2hlZC4KK1NldHRpbmcgaXQgdG8gYW4gZW1wdHkgdmFsdWUgZGlzYWJsZXMgdGhlIEdQTSBpbnRlcmZhY2U7Cit1c2luZyB0aGUgYnVpbHQtaW4gc3VwcG9ydCBmb3IgeHRlcm0sIGV0Yy4KKy5JUAorSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGFic2VudCwKK25jdXJzZXMgd2lsbCBhdHRlbXB0IHRvIG9wZW4gR1BNIGlmIFRFUk0gY29udGFpbnMgImxpbnV4Ii4KKy5UUCA1CitOQ1VSU0VTX05PX0hBUkRfVEFCUworXGZCTmN1cnNlc1xmUCBtYXkgdXNlIHRhYnMgYXMgcGFydCBvZiB0aGUgY3Vyc29yIG1vdmVtZW50IG9wdGltaXphdGlvbi4KK0luIHNvbWUgY2FzZXMsCit5b3VyIHRlcm1pbmFsIGRyaXZlciBtYXkgbm90IGhhbmRsZSB0aGVzZSBwcm9wZXJseS4KK1NldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGRpc2FibGUgdGhlIGZlYXR1cmUuCitZb3UgY2FuIGFsc28gYWRqdXN0IHlvdXIgXGZCc3R0eVxmUCBzZXR0aW5ncyB0byBhdm9pZCB0aGUgcHJvYmxlbS4KKy5UUCA1CitOQ1VSU0VTX05PX01BR0lDX0NPT0tJRVMKK1NvbWUgdGVybWluYWxzIHVzZSBhIG1hZ2ljLWNvb2tpZSBmZWF0dXJlIHdoaWNoIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcKK3RvIG1ha2UgaGlnaGxpZ2h0aW5nIGFuZCBvdGhlciB2aWRlbyBhdHRyaWJ1dGVzIGRpc3BsYXkgcHJvcGVybHkuCitZb3UgY2FuIHN1cHByZXNzIHRoZSBoaWdobGlnaHRpbmcgZW50aXJlbHkgZm9yIHRoZXNlIHRlcm1pbmFscyBieQorc2V0dGluZyB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlLgorLlRQIDUKK05DVVJTRVNfTk9fUEFERElORworTW9zdCBvZiB0aGUgdGVybWluYWwgZGVzY3JpcHRpb25zIGluIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBhcmUgd3JpdHRlbgorZm9yIHJlYWwgImhhcmR3YXJlIiB0ZXJtaW5hbHMuCitNYW55IHBlb3BsZSB1c2UgdGVybWluYWwgZW11bGF0b3JzCit3aGljaCBydW4gaW4gYSB3aW5kb3dpbmcgZW52aXJvbm1lbnQgYW5kIHVzZSBjdXJzZXMtYmFzZWQgYXBwbGljYXRpb25zLgorVGVybWluYWwgZW11bGF0b3JzIGNhbiBkdXBsaWNhdGUKK2FsbCBvZiB0aGUgaW1wb3J0YW50IGFzcGVjdHMgb2YgYSBoYXJkd2FyZSB0ZXJtaW5hbCwgYnV0IHRoZXkgZG8gbm90CitoYXZlIHRoZSBzYW1lIGxpbWl0YXRpb25zLgorVGhlIGNoaWVmIGxpbWl0YXRpb24gb2YgYSBoYXJkd2FyZSB0ZXJtaW5hbCBmcm9tIHRoZSBzdGFuZHBvaW50CitvZiB5b3VyIGFwcGxpY2F0aW9uIGlzIHRoZSBtYW5hZ2VtZW50IG9mIGRhdGFmbG93LCBpLmUuLCB0aW1pbmcuCitVbmxlc3MgYSBoYXJkd2FyZSB0ZXJtaW5hbCBpcyBpbnRlcmZhY2VkIGludG8gYSB0ZXJtaW5hbCBjb25jZW50cmF0b3IKKyh3aGljaCBkb2VzIGZsb3cgY29udHJvbCksCitpdCAob3IgeW91ciBhcHBsaWNhdGlvbikgbXVzdCBtYW5hZ2UgZGF0YWZsb3csIHByZXZlbnRpbmcgb3ZlcnJ1bnMuCitUaGUgY2hlYXBlc3Qgc29sdXRpb24gKG5vIGhhcmR3YXJlIGNvc3QpCitpcyBmb3IgeW91ciBwcm9ncmFtIHRvIGRvIHRoaXMgYnkgcGF1c2luZyBhZnRlcgorb3BlcmF0aW9ucyB0aGF0IHRoZSB0ZXJtaW5hbCBkb2VzIHNsb3dseSwgc3VjaCBhcyBjbGVhcmluZyB0aGUgZGlzcGxheS4KKy5JUAorQXMgYSByZXN1bHQsIG1hbnkgdGVybWluYWwgZGVzY3JpcHRpb25zIChpbmNsdWRpbmcgdGhlIHZ0MTAwKQoraGF2ZSBkZWxheSB0aW1lcyBlbWJlZGRlZC4KK1lvdSBtYXkgd2lzaCB0byB1c2UgdGhlc2UgZGVzY3JpcHRpb25zLAorYnV0IG5vdCB3YW50IHRvIHBheSB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKy5JUAorU2V0IHRoZSBOQ1VSU0VTX05PX1BBRERJTkcgc3ltYm9sIHRvIGRpc2FibGUgYWxsIGJ1dCBtYW5kYXRvcnkKK3BhZGRpbmcuCitNYW5kYXRvcnkgcGFkZGluZyBpcyB1c2VkIGFzIGEgcGFydCBvZiBzcGVjaWFsIGNvbnRyb2wKK3NlcXVlbmNlcyBzdWNoIGFzIFxmSWZsYXNoXGZSLgorLlRQIDUKK05DVVJTRVNfTk9fU0VUQlVGCitOb3JtYWxseSBcZkJuY3Vyc2VzXGZSIGVuYWJsZXMgYnVmZmVyZWQgb3V0cHV0IGR1cmluZyB0ZXJtaW5hbCBpbml0aWFsaXphdGlvbi4KK1RoaXMgaXMgZG9uZSAoYXMgaW4gU1ZyNCBjdXJzZXMpIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorRm9yIHRlc3RpbmcgcHVycG9zZXMsIGJvdGggb2YgXGZCbmN1cnNlc1xmUiBhbmQgY2VydGFpbiBhcHBsaWNhdGlvbnMsCit0aGlzIGZlYXR1cmUgaXMgbWFkZSBvcHRpb25hbC4KK1NldHRpbmcgdGhlIE5DVVJTRVNfTk9fU0VUQlVGIHZhcmlhYmxlCitkaXNhYmxlcyBvdXRwdXQgYnVmZmVyaW5nLCBsZWF2aW5nIHRoZSBvdXRwdXQgaW4gdGhlIG9yaWdpbmFsICh1c3VhbGx5CitsaW5lIGJ1ZmZlcmVkKSBtb2RlLgorLlRQIDUKK05DVVJTRVNfTk9fVVRGOF9BQ1MKK0R1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeQorY2hlY2tzIGZvciBzcGVjaWFsIGNhc2VzIHdoZXJlIFZUMTAwIGxpbmUtZHJhd2luZyAoYW5kIHRoZSBjb3JyZXNwb25kaW5nCithbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBjYXBhYmlsaXRpZXMpIGRlc2NyaWJlZCBpbiB0aGUgdGVybWluZm8gYXJlIGtub3duCit0byBiZSBtaXNzaW5nLgorU3BlY2lmaWNhbGx5LCB3aGVuIHJ1bm5pbmcgaW4gYSBVVEYtOCBsb2NhbGUsCit0aGUgTGludXggY29uc29sZSBlbXVsYXRvciBhbmQgdGhlIEdOVSBzY3JlZW4gcHJvZ3JhbSBpZ25vcmUgdGhlc2UuCitOY3Vyc2VzIGNoZWNrcyB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlc2UuCitGb3Igb3RoZXIgc3BlY2lhbCBjYXNlcywgeW91IHNob3VsZCBzZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KK0RvaW5nIHRoaXMgdGVsbHMgbmN1cnNlcyB0byB1c2UgVW5pY29kZSB2YWx1ZXMgd2hpY2ggY29ycmVzcG9uZCB0bwordGhlIFZUMTAwIGxpbmUtZHJhd2luZyBnbHlwaHMuCitUaGF0IHdvcmtzIGZvciB0aGUgc3BlY2lhbCBjYXNlcyBjaXRlZCwKK2FuZCBpcyBsaWtlbHkgdG8gd29yayBmb3IgdGVybWluYWwgZW11bGF0b3JzLgorLklQCitXaGVuIHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgeW91IHNob3VsZCBzZXQgaXQgdG8gYSBub256ZXJvIHZhbHVlLgorU2V0dGluZyBpdCB0byB6ZXJvIChvciB0byBhIG5vbm51bWJlcikKK2Rpc2FibGVzIHRoZSBzcGVjaWFsIGNoZWNrIGZvciBMaW51eCBhbmQgc2NyZWVuLgorLlRQIDUKK05DVVJTRVNfVFJBQ0UKK0R1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIFxmQm5jdXJzZXNcZlIgZGVidWdnaW5nIGxpYnJhcnkKK2NoZWNrcyB0aGUgTkNVUlNFU19UUkFDRSBzeW1ib2wuCitJZiBpdCBpcyBkZWZpbmVkLCB0byBhIG51bWVyaWMgdmFsdWUsIFxmQm5jdXJzZXNcZlIgY2FsbHMgdGhlIFxmQnRyYWNlXGZSCitmdW5jdGlvbiwgdXNpbmcgdGhhdCB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCisuSVAKK1RoZSBhcmd1bWVudCB2YWx1ZXMsIHdoaWNoIGFyZSBkZWZpbmVkIGluIFxmQmN1cnNlcy5oXGZSLCBwcm92aWRlIHNldmVyYWwKK3R5cGVzIG9mIGluZm9ybWF0aW9uLgorV2hlbiBydW5uaW5nIHdpdGggdHJhY2VzIGVuYWJsZWQsIHlvdXIgYXBwbGljYXRpb24gd2lsbCB3cml0ZSB0aGUKK2ZpbGUgXGZCdHJhY2VcZlIgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLlRQIDUKK1RFUk0KK0Rlbm90ZXMgeW91ciB0ZXJtaW5hbCB0eXBlLgorRWFjaCB0ZXJtaW5hbCB0eXBlIGlzIGRpc3RpbmN0LCB0aG91Z2ggbWFueSBhcmUgc2ltaWxhci4KKy5UUCA1CitURVJNQ0FQCitJZiB0aGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IGhhcyBiZWVuIGNvbmZpZ3VyZWQgd2l0aCBcZkl0ZXJtY2FwXGZSCitzdXBwb3J0LCBcZkJuY3Vyc2VzXGZSIHdpbGwgY2hlY2sgZm9yIGEgdGVybWluYWwncyBkZXNjcmlwdGlvbiBpbgordGVybWNhcCBmb3JtIGlmIGl0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorLklQCitUaGUgVEVSTUNBUCBzeW1ib2wgY29udGFpbnMgZWl0aGVyIGEgdGVybWluYWwgZGVzY3JpcHRpb24gKHdpdGgKK25ld2xpbmVzIHN0cmlwcGVkIG91dCksCitvciBhIGZpbGUgbmFtZSB0ZWxsaW5nIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBkZW5vdGVkIGJ5IHRoZSBURVJNIHN5bWJvbCBleGlzdHMuCitJbiBlaXRoZXIgY2FzZSwgc2V0dGluZyBpdCBkaXJlY3RzIFxmQm5jdXJzZXNcZlIgdG8gaWdub3JlCit0aGUgdXN1YWwgcGxhY2UgZm9yIHRoaXMgaW5mb3JtYXRpb24sIGUuZy4sIC9ldGMvdGVybWNhcC4KKy5UUCA1CitURVJNSU5GTworT3ZlcnJpZGVzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggXGZCbmN1cnNlc1xmUiBzZWFyY2hlcyBmb3IgeW91ciB0ZXJtaW5hbAorZGVzY3JpcHRpb24uCitUaGlzIGlzIHRoZSBzaW1wbGVzdCwgYnV0IG5vdCB0aGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzLgorVGhlIGNvbXBsZXRlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgaW4gb3JkZXIgZm9sbG93czoKKy5SUworLlRQIDMKKy0KK3RoZSBsYXN0IGRpcmVjdG9yeSB0byB3aGljaCBcZkJuY3Vyc2VzXGZSIHdyb3RlLCBpZiBhbnksIGlzIHNlYXJjaGVkIGZpcnN0CisuVFAgMworLQordGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIFRFUk1JTkZPIHN5bWJvbAorLlRQIDMKKy0KKyRIT01FLy50ZXJtaW5mbworLlRQIDMKKy0KK2RpcmVjdG9yaWVzIGxpc3RlZCBpbiB0aGUgVEVSTUlORk9fRElSUyBzeW1ib2wKKy5UUCAzCistCitvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB3aG9zZSBuYW1lcyBhcmUgY29uZmlndXJlZCBhbmQgY29tcGlsZWQgaW50byB0aGUKK25jdXJzZXMgbGlicmFyeSwgZS5nLiwKK0BURVJNSU5GT0AKKy5SRQorLlRQIDUKK1RFUk1JTkZPX0RJUlMKK1NwZWNpZmllcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMuCitUaGUgbGlzdCBpcyBzZXBhcmF0ZWQgYnkgY29sb25zIChpLmUuLCAiOiIpIG9uIFVuaXgsIHNlbWljb2xvbnMgb24gT1MvMiBFTVguCitBbGwgb2YgdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyBhcmUgaW4gdGVybWluZm8gZm9ybSwgd2hpY2ggbWFrZXMKK2Egc3ViZGlyZWN0b3J5IG5hbWVkIGZvciB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSB0ZXJtaW5hbCBuYW1lcyB0aGVyZWluLgorLlRQIDUKK1RFUk1QQVRICitJZiBURVJNQ0FQIGRvZXMgbm90IGhvbGQgYSBmaWxlIG5hbWUgdGhlbiBcZkJuY3Vyc2VzXGZSIGNoZWNrcwordGhlIFRFUk1QQVRIIHN5bWJvbC4KK1RoaXMgaXMgYSBsaXN0IG9mIGZpbGVuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzIG9yIGNvbG9ucyAoaS5lLiwgIjoiKSBvbiBVbml4LCBzZW1pY29sb25zIG9uIE9TLzIgRU1YLgorSWYgdGhlIFRFUk1QQVRIIHN5bWJvbCBpcyBub3Qgc2V0LCBcZkJuY3Vyc2VzXGZSIGxvb2tzIGluIHRoZSBmaWxlcworL2V0Yy90ZXJtY2FwLCAvdXNyL3NoYXJlL21pc2MvdGVybWNhcCBhbmQgJEhPTUUvLnRlcm1jYXAsIGluIHRoYXQgb3JkZXIuCisuUFAKK1RoZSBsaWJyYXJ5IG1heSBiZSBjb25maWd1cmVkIHRvIGRpc3JlZ2FyZCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyB3aGVuIHRoZQorY3VycmVudCB1c2VyIGlzIHRoZSBzdXBlcnVzZXIgKHJvb3QpLCBvciBpZiB0aGUgYXBwbGljYXRpb24gdXNlcyBzZXR1aWQgb3IKK3NldGdpZCBwZXJtaXNzaW9uczoKKyRURVJNSU5GTywgJFRFUk1JTkZPX0RJUlMsICRURVJNUEFUSCwgYXMgd2VsbCBhcyAkSE9NRS4KKy5TSCBBTFRFUk5BVEUgQ09ORklHVVJBVElPTlMKK1NldmVyYWwgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBwb3NzaWJsZSwKK2RlcGVuZGluZyBvbiB0aGUgY29uZmlndXJlIHNjcmlwdCBvcHRpb25zIHVzZWQgd2hlbiBidWlsZGluZyBcZkJuY3Vyc2VzXGZQLgorVGhlcmUgYXJlIGEgZmV3IG1haW4gb3B0aW9ucyB3aG9zZSBlZmZlY3RzIGFyZSB2aXNpYmxlIHRvIHRoZSBhcHBsaWNhdGlvbnMKK2RldmVsb3BlciB1c2luZyBcZkJuY3Vyc2VzXGZQOgorLlRQIDUKKy0tZGlzYWJsZS1vdmVyd3JpdGUKK1RoZSBzdGFuZGFyZCBpbmNsdWRlIGZvciBcZkJuY3Vyc2VzXGZQIGlzIGFzIG5vdGVkIGluIFxmQlNZTk9QU0lTXGZQOgorLlJTCisuc3AKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5SRQorLklQCitUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGF2b2lkIGZpbGVuYW1lIGNvbmZsaWN0cyB3aGVuIFxmQm5jdXJzZXNcZlAKK2lzIG5vdCB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBvZiBjdXJzZXMgb2YgdGhlIGNvbXB1dGVyLgorSWYgXGZCbmN1cnNlc1xmUCBpcyBpbnN0YWxsZWQgZGlzYWJsaW5nIG92ZXJ3cml0ZSwgaXQgcHV0cyBpdHMgaGVhZGVycyBpbgorYSBzdWJkaXJlY3RvcnksIGUuZy4sCisuUlMKKy5zcAorXGZCI2luY2x1ZGUgPG5jdXJzZXMvY3Vyc2VzLmg+XGZSCisuUkUKKy5JUAorSXQgYWxzbyBvbWl0cyBhIHN5bWJvbGljIGxpbmsgd2hpY2ggd291bGQgYWxsb3cgeW91IHRvIHVzZSBcZkItbGN1cnNlc1xmUAordG8gYnVpbGQgZXhlY3V0YWJsZXMuCisuVFAgNQorLS1lbmFibGUtd2lkZWMKK1RoZSBjb25maWd1cmUgc2NyaXB0IHJlbmFtZXMgdGhlIGxpYnJhcnkgYW5kIChpZiB0aGUgXGZCLS1kaXNhYmxlLW92ZXJ3cml0ZVxmUAorb3B0aW9uIGlzIHVzZWQpIHB1dHMgdGhlIGhlYWRlciBmaWxlcyBpbiBhIGRpZmZlcmVudCBzdWJkaXJlY3RvcnkuCitBbGwgb2YgdGhlIGxpYnJhcnkgbmFtZXMgaGF2ZSBhICJ3IiBhcHBlbmRlZCB0byB0aGVtLAoraS5lLiwgaW5zdGVhZCBvZgorLlJTCisuc3AKK1xmQi1sbmN1cnNlc1xmUgorLlJFCisuSVAKK3lvdSBsaW5rIHdpdGgKKy5SUworLnNwCitcZkItbG5jdXJzZXN3XGZSCisuUkUKKy5JUAorWW91IG11c3QgYWxzbyBkZWZpbmUgXGZCX1hPUEVOX1NPVVJDRV9FWFRFTkRFRFxmUCB3aGVuIGNvbXBpbGluZyBmb3IgdGhlCit3aWRlLWNoYXJhY3RlciBsaWJyYXJ5IHRvIHVzZSB0aGUgZXh0ZW5kZWQgKHdpZGUtY2hhcmFjdGVyKSBmdW5jdGlvbnMuCitUaGUgXGZCY3Vyc2VzLmhcZlAgZmlsZSB3aGljaCBpcyBpbnN0YWxsZWQgZm9yIHRoZSB3aWRlLWNoYXJhY3RlcgorbGlicmFyeSBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIG5vcm1hbCBsaWJyYXJ5J3MgaGVhZGVyLgorT25seSB0aGUgc2l6ZSBvZiB0aGUgXGZCV0lORE9XXGZQIHN0cnVjdHVyZSBkaWZmZXJzLCBhbmQgdmVyeSBmZXcKK2FwcGxpY2F0aW9ucyByZXF1aXJlIG1vcmUgdGhhbiBhIHBvaW50ZXIgdG8gXGZCV0lORE9XXGZQcy4KK0lmIHRoZSBoZWFkZXJzIGFyZSBpbnN0YWxsZWQgYWxsb3dpbmcgb3ZlcndyaXRlLAordGhlIHdpZGUtY2hhcmFjdGVyIGxpYnJhcnkncyBoZWFkZXJzIHNob3VsZCBiZSBpbnN0YWxsZWQgbGFzdCwKK3RvIGFsbG93IGFwcGxpY2F0aW9ucyB0byBiZSBidWlsdCB1c2luZyBlaXRoZXIgbGlicmFyeQorZnJvbSB0aGUgc2FtZSBzZXQgb2YgaGVhZGVycy4KKy5UUCA1CistLXdpdGgtc2hhcmVkCisuVFAKKy0td2l0aC1ub3JtYWwKKy5UUAorLS13aXRoLWRlYnVnCisuVFAKKy0td2l0aC1wcm9maWxlCitUaGUgc2hhcmVkIGFuZCBub3JtYWwgKHN0YXRpYykgbGlicmFyeSBuYW1lcyBkaWZmZXIgYnkgdGhlaXIgc3VmZml4ZXMsCitlLmcuLCBcZkJsaWJuY3Vyc2VzLnNvXGZQIGFuZCBcZkJsaWJuY3Vyc2VzLmFcZlAuCitUaGUgZGVidWcgYW5kIHByb2ZpbGluZyBsaWJyYXJpZXMgYWRkIGEgIl9nIiBhbmQgYSAiX3AiIHRvIHRoZSByb290CituYW1lcyByZXNwZWN0aXZlbHksCitlLmcuLCBcZkJsaWJuY3Vyc2VzX2cuYVxmUCBhbmQgXGZCbGlibmN1cnNlc19wLmFcZlAuCisuVFAgNQorLS13aXRoLXRyYWNlCitUaGUgXGZCdHJhY2VcZlAgZnVuY3Rpb24gbm9ybWFsbHkgcmVzaWRlcyBpbiB0aGUgZGVidWcgbGlicmFyeSwKK2J1dCBpdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGNvbmZpZ3VyZSB0aGlzIGluIHRoZSBzaGFyZWQgbGlicmFyeS4KK0NvbmZpZ3VyZSBzY3JpcHRzIHNob3VsZCBjaGVjayBmb3IgdGhlIGZ1bmN0aW9uJ3MgZXhpc3RlbmNlIHJhdGhlcgordGhhbiBhc3N1bWluZyBpdCBpcyBhbHdheXMgaW4gdGhlIGRlYnVnIGxpYnJhcnkuCisuU0ggRklMRVMKKy5UUCA1CitAREFUQURJUkAvdGFic2V0CitkaXJlY3RvcnkgY29udGFpbmluZyBpbml0aWFsaXphdGlvbiBmaWxlcyBmb3IgdGhlIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YWJhc2UKK0BURVJNSU5GT0AKK3Rlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YWJhc2UKKy5TSCBTRUUgQUxTTworXGZCdGVybWluZm9cZlIoXCpuKSBhbmQgcmVsYXRlZCBwYWdlcyB3aG9zZSBuYW1lcyBiZWdpbiAiY3Vyc18iIGZvciBkZXRhaWxlZCByb3V0aW5lCitkZXNjcmlwdGlvbnMuCisuU0ggRVhURU5TSU9OUworVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBjYW4gYmUgY29tcGlsZWQgd2l0aCBhbiBvcHRpb24gKFxmQi1EVVNFX0dFVENBUFxmUikKK3RoYXQgZmFsbHMgYmFjayB0byB0aGUgb2xkLXN0eWxlIC9ldGMvdGVybWNhcCBmaWxlIGlmIHRoZSB0ZXJtaW5hbCBzZXR1cCBjb2RlCitjYW5ub3QgZmluZCBhIHRlcm1pbmZvIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gXGZCVEVSTVxmUi4KK1VzZSBvZiB0aGlzIGZlYXR1cmUKK2lzIG5vdCByZWNvbW1lbmRlZCwgYXMgaXQgZXNzZW50aWFsbHkgaW5jbHVkZXMgYW4gZW50aXJlIHRlcm1jYXAgY29tcGlsZXIgaW4KK3RoZSBcZkJuY3Vyc2VzXGZSIHN0YXJ0dXAgY29kZSwgYXQgc2lnbmlmaWNhbnQgY29zdCBpbiBjb3JlIGFuZCBzdGFydHVwIGN5Y2xlcy4KKy5QUAorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBpbmNsdWRlcyBmYWNpbGl0aWVzIGZvciBjYXB0dXJpbmcgbW91c2UgZXZlbnRzIG9uCitjZXJ0YWluIHRlcm1pbmFscyAoaW5jbHVkaW5nIHh0ZXJtKS4KK1NlZSB0aGUgXGZCY3Vyc19tb3VzZVxmUigzWCkKK21hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IGluY2x1ZGVzIGZhY2lsaXRpZXMgZm9yIHJlc3BvbmRpbmcgdG8gd2luZG93CityZXNpemluZyBldmVudHMsIGUuZy4sIHdoZW4gcnVubmluZyBpbiBhbiB4dGVybS4KK1NlZSB0aGUgXGZCcmVzaXpldGVybVxmUigzWCkKK2FuZCBcZkJ3cmVzaXplXGZSKDNYKSBtYW51YWwgcGFnZXMgZm9yIGRldGFpbHMuCitJbiBhZGRpdGlvbiwgdGhlIGxpYnJhcnkgbWF5IGJlIGNvbmZpZ3VyZWQgd2l0aCBhIFNJR1dJTkNIIGhhbmRsZXIuCisuUFAKK1RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgZXh0ZW5kcyB0aGUgZml4ZWQgc2V0IG9mIGZ1bmN0aW9uIGtleSBjYXBhYmlsaXRpZXMKK29mIHRlcm1pbmFscyBieSBhbGxvd2luZyB0aGUgYXBwbGljYXRpb24gZGVzaWduZXIgdG8gZGVmaW5lIGFkZGl0aW9uYWwKK2tleSBzZXF1ZW5jZXMgYXQgcnVudGltZS4KK1NlZSB0aGUgXGZCZGVmaW5lX2tleVxmUigzWCkKK1xmQmtleV9kZWZpbmVkXGZSKDNYKSwKK2FuZCBcZkJrZXlva1xmUigzWCkgbWFudWFsIHBhZ2VzIGZvciBkZXRhaWxzLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IGNhbiBleHBsb2l0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGVybWluYWxzIHdoaWNoCitpbXBsZW1lbnQgdGhlIElTTy02NDI5IFNHUiAzOSBhbmQgU0dSIDQ5IGNvbnRyb2xzLCB3aGljaCBhbGxvdyBhbiBhcHBsaWNhdGlvbgordG8gcmVzZXQgdGhlIHRlcm1pbmFsIHRvIGl0cyBvcmlnaW5hbCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycy4KK0Zyb20gdGhlIHVzZXJzJyBwZXJzcGVjdGl2ZSwgdGhlIGFwcGxpY2F0aW9uIGlzIGFibGUgdG8gZHJhdyBjb2xvcmVkCit0ZXh0IG9uIGEgYmFja2dyb3VuZCB3aG9zZSBjb2xvciBpcyBzZXQgaW5kZXBlbmRlbnRseSwgcHJvdmlkaW5nIGJldHRlcgorY29udHJvbCBvdmVyIGNvbG9yIGNvbnRyYXN0cy4KK1NlZSB0aGUgXGZCZGVmYXVsdF9jb2xvcnNcZlIoM1gpIG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorLlBQCitUaGUgXGZCbmN1cnNlc1xmUiBsaWJyYXJ5IGluY2x1ZGVzIGEgZnVuY3Rpb24gZm9yIGRpcmVjdGluZyBhcHBsaWNhdGlvbiBvdXRwdXQKK3RvIGEgcHJpbnRlciBhdHRhY2hlZCB0byB0aGUgdGVybWluYWwgZGV2aWNlLgorU2VlIHRoZSBcZkJjdXJzX3ByaW50XGZSKDNYKSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5TSCBQT1JUQUJJTElUWQorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBiZSBCQVNFLWxldmVsIGNvbmZvcm1hbnQgd2l0aCBYU0kKK0N1cnNlcy4KK1RoZSBFWFRFTkRFRCBYU0kgQ3Vyc2VzIGZ1bmN0aW9uYWxpdHkKKyhpbmNsdWRpbmcgY29sb3Igc3VwcG9ydCkgaXMgc3VwcG9ydGVkLgorLlBQCitBIHNtYWxsIG51bWJlciBvZiBsb2NhbCBkaWZmZXJlbmNlcyAodGhhdCBpcywgaW5kaXZpZHVhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuCit0aGUgWFNJIEN1cnNlcyBhbmQgXGZCbmN1cnNlc1xmUiBjYWxscykgYXJlIGRlc2NyaWJlZCBpbiBcZkJQT1JUQUJJTElUWVxmUgorc2VjdGlvbnMgb2YgdGhlIGxpYnJhcnkgbWFuIHBhZ2VzLgorLlBQCitUaGlzIGltcGxlbWVudGF0aW9uIGFsc28gY29udGFpbnMgc2V2ZXJhbCBleHRlbnNpb25zOgorLlJTIDUKKy5QUAorVGhlIHJvdXRpbmUgXGZCaGFzX2tleVxmUiBpcyBub3QgcGFydCBvZiBYUEc0LCBub3IgaXMgaXQgcHJlc2VudCBpbiBTVnI0LgorU2VlIHRoZSBcZkJjdXJzX2dldGNoXGZSKDNYKSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5QUAorVGhlIHJvdXRpbmUgXGZCc2xrX2F0dHJcZlIgaXMgbm90IHBhcnQgb2YgWFBHNCwgbm9yIGlzIGl0IHByZXNlbnQgaW4gU1ZyNC4KK1NlZSB0aGUgXGZCY3Vyc19zbGtcZlIoM1gpIG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorLlBQCitUaGUgcm91dGluZXMgXGZCZ2V0bW91c2VcZlIsIFxmQm1vdXNlbWFza1xmUiwgXGZCdW5nZXRtb3VzZVxmUiwKK1xmQm1vdXNlaW50ZXJ2YWxcZlIsIGFuZCBcZkJ3ZW5jbG9zZVxmUiByZWxhdGluZyB0byBtb3VzZSBpbnRlcmZhY2luZyBhcmUgbm90CitwYXJ0IG9mIFhQRzQsIG5vciBhcmUgdGhleSBwcmVzZW50IGluIFNWcjQuCitTZWUgdGhlIFxmQmN1cnNfbW91c2VcZlIoM1gpIG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorLlBQCitUaGUgcm91dGluZSBcZkJtY3ByaW50XGZSIHdhcyBub3QgcHJlc2VudCBpbiBhbnkgcHJldmlvdXMgY3Vyc2VzIGltcGxlbWVudGF0aW9uLgorU2VlIHRoZSBcZkJjdXJzX3ByaW50XGZSKDNYKSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5QUAorVGhlIHJvdXRpbmUgXGZCd3Jlc2l6ZVxmUiBpcyBub3QgcGFydCBvZiBYUEc0LCBub3IgaXMgaXQgcHJlc2VudCBpbiBTVnI0LgorU2VlIHRoZSBcZkJ3cmVzaXplXGZSKDNYKSBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KKy5QUAorVGhlIFdJTkRPVyBzdHJ1Y3R1cmUncyBpbnRlcm5hbCBkZXRhaWxzIGNhbiBiZSBoaWRkZW4gZnJvbSBhcHBsaWNhdGlvbgorcHJvZ3JhbXMuCitTZWUgXGZCY3Vyc19vcGFxdWVcZlIoM1gpIGZvciB0aGUgZGlzY3Vzc2lvbiBvZiBcZkJpc19zY3JvbGxva1xmUiwgZXRjLgorLlJFCisuUFAKK0luIGhpc3RvcmljIGN1cnNlcyB2ZXJzaW9ucywgZGVsYXlzIGVtYmVkZGVkIGluIHRoZSBjYXBhYmlsaXRpZXMgXGZCY3JcZlIsCitcZkJpbmRcZlIsIFxmQmN1YjFcZlIsIFxmQmZmXGZSIGFuZCBcZkJ0YWJcZlIgYWN0aXZhdGVkIGNvcnJlc3BvbmRpbmcgZGVsYXkKK2JpdHMgaW4gdGhlIFVOSVggdHR5IGRyaXZlci4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sIGFsbCBwYWRkaW5nIGlzIGRvbmUgYnkgc2VuZGluZyBOVUwgYnl0ZXMuCitUaGlzIG1ldGhvZCBpcyBzbGlnaHRseSBtb3JlIGV4cGVuc2l2ZSwgYnV0IG5hcnJvd3MgdGhlIGludGVyZmFjZQordG8gdGhlIFVOSVgga2VybmVsIHNpZ25pZmljYW50bHkgYW5kIGluY3JlYXNlcyB0aGUgcGFja2FnZSdzIHBvcnRhYmlsaXR5Citjb3JyZXNwb25kaW5nbHkuCisuU0ggTk9URVMKK1RoZSBoZWFkZXIgZmlsZSBcZkI8Y3Vyc2VzLmg+XGZSIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlcworXGZCPHN0ZGlvLmg+XGZSIGFuZCBcZkI8dW5jdHJsLmg+XGZSLgorLlBQCitJZiBzdGFuZGFyZCBvdXRwdXQgZnJvbSBhIFxmQm5jdXJzZXNcZlIgcHJvZ3JhbSBpcyByZS1kaXJlY3RlZCB0byBzb21ldGhpbmcKK3doaWNoIGlzIG5vdCBhIHR0eSwgc2NyZWVuIHVwZGF0ZXMgd2lsbCBiZSBkaXJlY3RlZCB0byBzdGFuZGFyZCBlcnJvci4KK1RoaXMgd2FzIGFuIHVuZG9jdW1lbnRlZCBmZWF0dXJlIG9mIEFUJlQgU3lzdGVtIFYgUmVsZWFzZSAzIGN1cnNlcy4KKy5TSCBBVVRIT1JTCitaZXlkIE0uIEJlbi1IYWxpbSwgRXJpYyBTLiBSYXltb25kLCBUaG9tYXMgRS4gRGlja2V5LgorQmFzZWQgb24gcGN1cnNlcyBieSBQYXZlbCBDdXJ0aXMuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi9wYW5lbC4zeCBiL25jdXJzZXMtNS43L21hbi9wYW5lbC4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTlhOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL3BhbmVsLjN4CkBAIC0wLDAgKzEsMTkwIEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IHBhbmVsLjN4LHYgMS4xNCAyMDA3LzA1LzEyIDIwOjQ1OjIwIHRvbSBFeHAgJAorLlRIIHBhbmVsIDNYICIiCisuZHMgbiA1CisuZHMgZCBAVEVSTUlORk9ACisuU0ggTkFNRQorcGFuZWwgLSBwYW5lbCBzdGFjayBleHRlbnNpb24gZm9yIGN1cnNlcworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8cGFuZWwuaD5cZlIKKy5QCitcZkJjYyBbZmxhZ3NdIHNvdXJjZWZpbGVzIC1scGFuZWwgLWxuY3Vyc2VzXGZSCisuUAorXGZCUEFORUwgKm5ld19wYW5lbChXSU5ET1cgKndpbilcZlIKKy5icgorXGZCaW50IGJvdHRvbV9wYW5lbChQQU5FTCAqcGFuKVxmUgorLmJyCitcZkJpbnQgdG9wX3BhbmVsKFBBTkVMICpwYW4pXGZSCisuYnIKK1xmQmludCBzaG93X3BhbmVsKFBBTkVMICpwYW4pXGZSCisuYnIKK1xmQnZvaWQgdXBkYXRlX3BhbmVscygpO1xmUgorLmJyCitcZkJpbnQgaGlkZV9wYW5lbChQQU5FTCAqcGFuKVxmUgorLmJyCitcZkJXSU5ET1cgKnBhbmVsX3dpbmRvdyhjb25zdCBQQU5FTCAqcGFuKVxmUgorLmJyCitcZkJpbnQgcmVwbGFjZV9wYW5lbChQQU5FTCAqcGFuLCBXSU5ET1cgKndpbmRvdylcZlIKKy5icgorXGZCaW50IG1vdmVfcGFuZWwoUEFORUwgKnBhbiwgaW50IHN0YXJ0eSwgaW50IHN0YXJ0eClcZlIKKy5icgorXGZCaW50IHBhbmVsX2hpZGRlbihjb25zdCBQQU5FTCAqcGFuKVxmUgorLmJyCitcZkJQQU5FTCAqcGFuZWxfYWJvdmUoY29uc3QgUEFORUwgKnBhbilcZlIKKy5icgorXGZCUEFORUwgKnBhbmVsX2JlbG93KGNvbnN0IFBBTkVMICpwYW4pXGZSCisuYnIKK1xmQmludCBzZXRfcGFuZWxfdXNlcnB0cihQQU5FTCAqcGFuLCBjb25zdCB2b2lkICpwdHIpXGZSCisuYnIKK1xmQmNvbnN0IHZvaWQgKnBhbmVsX3VzZXJwdHIoY29uc3QgUEFORUwgKnBhbilcZlIKKy5icgorXGZCaW50IGRlbF9wYW5lbChQQU5FTCAqcGFuKVxmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1BhbmVscyBhcmUgXGZCY3Vyc2VzXGZSKDNYKSB3aW5kb3dzIHdpdGggdGhlIGFkZGVkIGZlYXR1cmUgb2YKK2RlcHRoLiAgUGFuZWwgZnVuY3Rpb25zIGFsbG93IHRoZSB1c2Ugb2Ygc3RhY2tlZCB3aW5kb3dzIGFuZCBlbnN1cmUKK3RoZSBwcm9wZXIgcG9ydGlvbnMgb2YgZWFjaCB3aW5kb3cgYW5kIHRoZSBjdXJzZXMgXGZCc3Rkc2NyXGZSIHdpbmRvdyBhcmUKK2hpZGRlbiBvciBkaXNwbGF5ZWQgd2hlbiBwYW5lbHMgYXJlIGFkZGVkLCBtb3ZlZCwgbW9kaWZpZWQgb3IgcmVtb3ZlZC4KK1RoZSBzZXQgb2YgY3VycmVudGx5IHZpc2libGUgcGFuZWxzIGlzIHRoZSBzdGFjayBvZiBwYW5lbHMuICBUaGUKK1xmQnN0ZHNjclxmUiB3aW5kb3cgaXMgYmVuZWF0aCBhbGwgcGFuZWxzLCBhbmQgaXMgbm90IGNvbnNpZGVyZWQgcGFydAorb2YgdGhlIHN0YWNrLgorLlAKK0Egd2luZG93IGlzIGFzc29jaWF0ZWQgd2l0aCBldmVyeSBwYW5lbC4gVGhlIHBhbmVsIHJvdXRpbmVzIGVuYWJsZQoreW91IHRvIGNyZWF0ZSwgbW92ZSwgaGlkZSwgYW5kIHNob3cgcGFuZWxzLCBhcyB3ZWxsIGFzIHBvc2l0aW9uIGEKK3BhbmVsIGF0IGFueSBkZXNpcmVkIGxvY2F0aW9uIGluIHRoZSBzdGFjay4KKy5QCitQYW5lbCByb3V0aW5lcyBhcmUgYSBmdW5jdGlvbmFsIGxheWVyIGFkZGVkIHRvIFxmQmN1cnNlc1xmUigzWCksIG1ha2Ugb25seQoraGlnaC1sZXZlbCBjdXJzZXMgY2FsbHMsIGFuZCB3b3JrIGFueXdoZXJlIHRlcm1pbmZvIGN1cnNlcyBkb2VzLgorLlNIIEZVTkNUSU9OUworLlRQCisuQiBuZXdfcGFuZWwod2luKQorYWxsb2NhdGVzICBhICBcZkJQQU5FTFxmUiBzdHJ1Y3R1cmUsIGFzc29jaWF0ZXMgaXQgd2l0aAorXGZCd2luXGZSLCBwbGFjZXMgdGhlIHBhbmVsIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrICAoY2F1c2VzICBpdAordG8gIGJlICBkaXNwbGF5ZWQgYWJvdmUgYW55IG90aGVyIHBhbmVsKSBhbmQgcmV0dXJucyBhCitwb2ludGVyIHRvIHRoZSBuZXcgcGFuZWwuCisuVFAKKy5CIHVwZGF0ZV9wYW5lbHMoKQorcmVmcmVzaGVzIHRoZSB2aXJ0dWFsIHNjcmVlbiB0byByZWZsZWN0IHRoZSByZWxhdGlvbnMgYmV0d2VlbiB0aGUKK3BhbmVscyBpbiB0aGUgc3RhY2ssIGJ1dCBkb2VzIG5vdCBjYWxsIGRvdXBkYXRlKCkgdG8gcmVmcmVzaCB0aGUKK3BoeXNpY2FsIHNjcmVlbi4gIFVzZSB0aGlzIGZ1bmN0aW9uIGFuZCBub3Qgd3JlZnJlc2ggb3Igd25vdXRyZWZyZXNoLgordXBkYXRlX3BhbmVscygpIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgYmVmb3JlIGEgY2FsbCB0bworZG91cGRhdGUoKSwgYnV0IGRvdXBkYXRlKCkgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZwordGhlIHBoeXNpY2FsIHNjcmVlbi4KKy5UUAorLkIgZGVsX3BhbmVsKHBhbikKK3JlbW92ZXMgdGhlIGdpdmVuIHBhbmVsIGZyb20gdGhlICBzdGFjayBhbmQgZGVhbGxvY2F0ZXMgdGhlCitcZkJQQU5FTFxmUiBzdHJ1Y3R1cmUgKGJ1dCBub3QgaXRzIGFzc29jaWF0ZWQgd2luZG93KS4KKy5UUAorLkIgaGlkZV9wYW5lbChwYW4pCityZW1vdmVzIHRoZSBnaXZlbiBwYW5lbCBmcm9tIHRoZSBwYW5lbCBzdGFjayBhbmQgdGh1cyBoaWRlcyBpdCBmcm9tCit2aWV3LiBUaGUgXGZCUEFORUxcZlIgc3RydWN0dXJlIGlzIG5vdCBsb3N0LCBtZXJlbHkgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjay4KKy5UUAorLkIgcGFuZWxfaGlkZGVuKHBhbikKK3JldHVybnMgVFJVRSBpZiB0aGUgcGFuZWwgaXMgaW4gdGhlIHBhbmVsIHN0YWNrLAorRkFMU0UgaWYgaXQgaXMgbm90LgorSWYgdGhlIHBhbmVsIGlzIGEgbnVsbCBwb2ludGVyLCByZXR1cm4gRVJSLgorLlRQCisuQiBzaG93X3BhbmVsKHBhbikKK21ha2VzIGEgaGlkZGVuIHBhbmVsIHZpc2libGUgYnkgcGxhY2luZyBpdCBvbiB0b3Agb2YgdGhlIHBhbmVscyBpbiB0aGUKK3BhbmVsIHN0YWNrLiBTZWUgQ09NUEFUSUJJTElUWSBiZWxvdy4KKy5UUAorLkIgdG9wX3BhbmVsKHBhbikKK3B1dHMgdGhlIGdpdmVuIHZpc2libGUgcGFuZWwgb24gdG9wIG9mIGFsbCBwYW5lbHMgaW4gdGhlIHN0YWNrLiAgU2VlCitDT01QQVRJQklMSVRZIGJlbG93LgorLlRQCisuQiBib3R0b21fcGFuZWwocGFuKQorcHV0cyBwYW5lbCBhdCB0aGUgYm90dG9tIG9mIGFsbCBwYW5lbHMuCisuVFAKKy5CIG1vdmVfcGFuZWwocGFuLHN0YXJ0eSxzdGFydHgpCittb3ZlcyB0aGUgZ2l2ZW4gcGFuZWwgd2luZG93IHNvIHRoYXQgaXRzIHVwcGVyLWxlZnQgY29ybmVyIGlzIGF0CitcZkJzdGFydHlcZlIsIFxmQnN0YXJ0eFxmUi4gIEl0IGRvZXMgbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgdGhlCitwYW5lbCBpbiB0aGUgc3RhY2suICBCZSBzdXJlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLCBub3QgXGZCbXZ3aW4oKVxmUiwKK3RvIG1vdmUgYSBwYW5lbCB3aW5kb3cuCisuVFAKKy5CIHJlcGxhY2VfcGFuZWwocGFuLHdpbmRvdykKK3JlcGxhY2VzIHRoZSBjdXJyZW50IHdpbmRvdyBvZiBwYW5lbCB3aXRoIFxmQndpbmRvd1xmUiAodXNlZnVsLCBmb3IKK2V4YW1wbGUgaWYgeW91IHdhbnQgdG8gcmVzaXplIGEgcGFuZWw7IGlmIHlvdSdyZSB1c2luZyBcZkJuY3Vyc2VzXGZSLAoreW91IGNhbiBjYWxsIFxmQnJlcGxhY2VfcGFuZWxcZlIgb24gdGhlIG91dHB1dCBvZiBcZkJ3cmVzaXplXGZSKDNYKSkuCitJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBwYW5lbCBpbiB0aGUgc3RhY2suCisuVFAKKy5CIHBhbmVsX2Fib3ZlKHBhbikKK3JldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwYW5lbCBhYm92ZSBwYW4uICBJZiB0aGUgcGFuZWwgYXJndW1lbnQgaXMKK1xmQihQQU5FTCAqKTBcZlIsIGl0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBib3R0b20gcGFuZWwgaW4gdGhlIHN0YWNrLgorLlRQCisuQiBwYW5lbF9iZWxvdyhwYW4pCityZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGFuZWwganVzdCBiZWxvdyBwYW4uICBJZiB0aGUgcGFuZWwgYXJndW1lbnQKK2lzIFxmQihQQU5FTCAqKTBcZlIsIGl0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB0b3AgcGFuZWwgaW4gdGhlIHN0YWNrLgorLlRQCisuQiBzZXRfcGFuZWxfdXNlcnB0cihwYW4scHRyKQorc2V0cyB0aGUgcGFuZWwncyB1c2VyIHBvaW50ZXIuCisuVFAKKy5CIHBhbmVsX3VzZXJwdHIocGFuKQorcmV0dXJucyB0aGUgdXNlciBwb2ludGVyIGZvciBhIGdpdmVuIHBhbmVsLgorLlRQCisuQiBwYW5lbF93aW5kb3cocGFuKQorcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHdpbmRvdyBvZiB0aGUgZ2l2ZW4gcGFuZWwuCisuU0ggRElBR05PU1RJQ1MKK0VhY2ggcm91dGluZSB0aGF0IHJldHVybnMgYSBwb2ludGVyIHJldHVybnMgXGZCTlVMTFxmUiBpZiBhbiBlcnJvcgorb2NjdXJzLiBFYWNoIHJvdXRpbmUgdGhhdCByZXR1cm5zIGFuIGludCB2YWx1ZSByZXR1cm5zIFxmQk9LXGZSIGlmIGl0CitleGVjdXRlcyBzdWNjZXNzZnVsbHkgYW5kIFxmQkVSUlxmUiBpZiBub3QuCisuU0ggQ09NUEFUSUJJTElUWQorUmVhc29uYWJsZSBjYXJlIGhhcyBiZWVuIHRha2VuIHRvICBlbnN1cmUgIGNvbXBhdGliaWxpdHkKK3dpdGggIHRoZSAgbmF0aXZlICBwYW5lbCBmYWNpbGl0eSBpbnRyb2R1Y2VkIGluIFNWcjMuMiAoaW5zcGVjdGlvbiBvZgordGhlIFNWcjQgbWFudWFsIHBhZ2VzIHN1Z2dlc3RzIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaXMgdW5jaGFuZ2VkKS4KK1RoZSBcZkJQQU5FTFxmUiBkYXRhIHN0cnVjdHVyZXMgYXJlIG1lcmVseSAgc2ltaWxhci4gVGhlICBwcm9ncmFtbWVyCitpcyBjYXV0aW9uZWQgbm90IHRvIGRpcmVjdGx5IHVzZSBcZkJQQU5FTFxmUiBmaWVsZHMuCisuUAorVGhlIGZ1bmN0aW9ucyBcZkJzaG93X3BhbmVsKClcZlIgYW5kIFxmQnRvcF9wYW5lbCgpXGZSIGFyZSBpZGVudGljYWwKK2luIHRoaXMgaW1wbGVtZW50YXRpb24sIGFuZCB3b3JrIGVxdWFsbHkgd2VsbCB3aXRoIGRpc3BsYXllZCBvciBoaWRkZW4KK3BhbmVscy4gIEluIHRoZSBuYXRpdmUgU3lzdGVtIFYgaW1wbGVtZW50YXRpb24sIFxmQnNob3dfcGFuZWwoKVxmUiBpcworaW50ZW5kZWQgZm9yIG1ha2luZyBhIGhpZGRlbiBwYW5lbCB2aXNpYmxlIChhdCB0aGUgdG9wIG9mIHRoZSBzdGFjaykKK2FuZCBcZkJ0b3BfcGFuZWwoKVxmUiBpcyBpbnRlbmRlZCBmb3IgbWFraW5nIGFuIGFscmVhZHktdmlzaWJsZSBwYW5lbAorbW92ZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4gWW91IGFyZSBjYXV0aW9uZWQgdG8gdXNlIHRoZSBjb3JyZWN0CitmdW5jdGlvbiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG5hdGl2ZSBwYW5lbCBsaWJyYXJpZXMuCisuU0ggTk9URQorSW4geW91ciBsaWJyYXJ5IGxpc3QsIGxpYnBhbmVsLmEgc2hvdWxkIGJlIGJlZm9yZSBsaWJuY3Vyc2VzLmE7IHRoYXQgaXMsCit5b3Ugd2FudCB0byBzYXkgYC1scGFuZWwgLWxuY3Vyc2VzJywgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kICh3aGljaCB3b3VsZAordXN1YWxseSBnaXZlIGEgbGluay1lcnJvcikuCisuU0ggRklMRVMKKy5QCitwYW5lbC5oCitpbnRlcmZhY2UgZm9yIHRoZSBwYW5lbHMgbGlicmFyeQorLlAKK2xpYnBhbmVsLmEKK3RoZSBwYW5lbHMgbGlicmFyeSBpdHNlbGYKKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKQorLlBQCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuU0ggQVVUSE9SCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgV2FycmVuIFR1Y2tlciA8d2h0QG40aGdmLm10LXBhcmsuZ2EudXM+LAorcHJpbWFyaWx5IHRvIGFzc2lzdCBpbiBwb3J0aW5nIHUzODZtb24gdG8gc3lzdGVtcyB3aXRob3V0IGEgbmF0aXZlCitwYW5lbHMgbGlicmFyeS4gIFJlcGFja2FnZWQgZm9yIG5jdXJzZXMgYnkgWmV5ZCBiZW4tSGFsaW0uCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vcmVzaXpldGVybS4zeCBiL25jdXJzZXMtNS43L21hbi9yZXNpemV0ZXJtLjN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OGVhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vcmVzaXpldGVybS4zeApAQCAtMCwwICsxLDEwMCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtMjAwNQorLlwiCisuXCIgJElkOiByZXNpemV0ZXJtLjN4LHYgMS4xMSAyMDA1LzA2LzI1IDIyOjE5OjQyIHRvbSBFeHAgJAorLlRIIHJlc2l6ZXRlcm0gM1ggIiIKKy5TSCBOQU1FCitcZkJpc190ZXJtX3Jlc2l6ZWRcZlIsCitcZkJyZXNpemVfdGVybVxmUiwKK1xmQnJlc2l6ZXRlcm1cZlIgLSBjaGFuZ2UgdGhlIGN1cnNlcyB0ZXJtaW5hbCBzaXplCisuU0ggU1lOT1BTSVMKK1xmQiNpbmNsdWRlIDxjdXJzZXMuaD5cZlIKKy5zcAorXGZCYm9vbCBpc190ZXJtX3Jlc2l6ZWQoaW50IGxpbmVzLCBpbnQgY29sdW1ucyk7XGZSCisuYnIKK1xmQmludCByZXNpemVfdGVybShpbnQgbGluZXMsIGludCBjb2x1bW5zKTtcZlIKKy5icgorXGZCaW50IHJlc2l6ZXRlcm0oaW50IGxpbmVzLCBpbnQgY29sdW1ucyk7XGZSCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4KK0l0IHByb3ZpZGVzIGNhbGxlcnMgd2l0aCBhIGhvb2sgaW50byB0aGUgXGZCbmN1cnNlc1xmUiBkYXRhIHRvIHJlc2l6ZSB3aW5kb3dzLAorcHJpbWFyaWx5IGZvciB1c2UgYnkgcHJvZ3JhbXMgcnVubmluZyBpbiBhbiBYIFdpbmRvdyB0ZXJtaW5hbCAoZS5nLiwgeHRlcm0pLgorVGhlIGZ1bmN0aW9uIFxmQnJlc2l6ZXRlcm1cZlIgcmVzaXplcyB0aGUgc3RhbmRhcmQgYW5kIGN1cnJlbnQgd2luZG93cwordG8gdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zLCBhbmQgYWRqdXN0cyBvdGhlciBib29ra2VlcGluZyBkYXRhIHVzZWQgYnkKK3RoZSBcZkJuY3Vyc2VzXGZSIGxpYnJhcnkgdGhhdCByZWNvcmQgdGhlIHdpbmRvdyBkaW1lbnNpb25zLgorLkxQCitNb3N0IG9mIHRoZSB3b3JrIGlzIGRvbmUgYnkgdGhlIGlubmVyIGZ1bmN0aW9uIFxmQnJlc2l6ZV90ZXJtXGZSLgorVGhlIG91dGVyIGZ1bmN0aW9uIFxmQnJlc2l6ZXRlcm1cZlIgYWRkcyBib29ra2VlcGluZyBmb3IgdGhlIFNJR1dJTkNIIGhhbmRsZXIuCitXaGVuIHJlc2l6aW5nIHRoZSB3aW5kb3dzLAorXGZCcmVzaXplX3Rlcm1cZlIgYmxhbmstZmlsbHMgdGhlIGFyZWFzIHRoYXQgYXJlIGV4dGVuZGVkLgorVGhlIGNhbGxpbmcgYXBwbGljYXRpb24gc2hvdWxkIGZpbGwgaW4gdGhlc2UgYXJlYXMgd2l0aCBhcHByb3ByaWF0ZSBkYXRhLgorVGhlIFxmQnJlc2l6ZV90ZXJtXGZSIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlc2l6ZSBhbGwgd2luZG93cy4KK0hvd2V2ZXIsIGR1ZSB0byB0aGUgY2FsbGluZyBjb252ZW50aW9uIG9mIHBhZHMsCitpdCBpcyBub3QgcG9zc2libGUgdG8gcmVzaXplIHRoZXNlCit3aXRob3V0IGFkZGl0aW9uYWwgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwbGljYXRpb24uCisuTFAKK0Egc3VwcG9ydCBmdW5jdGlvbiBcZkJpc190ZXJtX3Jlc2l6ZWRcZlIgaXMgcHJvdmlkZWQgc28gdGhhdCBhcHBsaWNhdGlvbnMKK2NhbiBjaGVjayBpZiB0aGUgXGZCcmVzaXplX3Rlcm1cZlIgZnVuY3Rpb24gd291bGQgbW9kaWZ5IHRoZSB3aW5kb3cgc3RydWN0dXJlcy4KK0l0IHJldHVybnMgVFJVRSBpZiB0aGUgd2luZG93cyB3b3VsZCBiZSBtb2RpZmllZCwgYW5kIEZBTFNFIG90aGVyd2lzZS4KKy5TSCBSRVRVUk4gVkFMVUUKK0V4Y2VwdCBhcyBub3RlcywgdGhlc2UgZnVuY3Rpb24gcmV0dXJuCit0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUiBvbiBzdWNjZXNzLgorVGhleSB3aWxsIGZhaWwgaWYgZWl0aGVyIG9mIHRoZSBkaW1lbnNpb25zIGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywKK29yIGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSAocmUpYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSB3aW5kb3dzLgorLlNIIE5PVEVTCitXaGlsZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gc3VwcG9ydCBhIHNpZ25hbCBoYW5kbGVyCisoaS5lLiwgZm9yIFNJR1dJTkNIKSwgY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gYXZvaWQgaW52b2tpbmcgdGhlbSBpbiBhCitjb250ZXh0IHdoZXJlIFxmQm1hbGxvY1xmUiBvciBcZkJyZWFsbG9jXGZSIG1heSBoYXZlIGJlZW4gaW50ZXJydXB0ZWQsCitzaW5jZSBpdCB1c2VzIHRob3NlIGZ1bmN0aW9ucy4KKy5QUAorSWYgbmN1cnNlcyBpcyBjb25maWd1cmVkIHRvIHN1cHBseSBpdHMgb3duIFNJR1dJTkNIIGhhbmRsZXIsCit0aGUgXGZCcmVzaXpldGVybVxmUiBmdW5jdGlvbiB1bmdldGNoJ3MgYSBcZkJLRVlfUkVTSVpFXGZSIHdoaWNoCit3aWxsIGJlIHJlYWQgb24gdGhlIG5leHQgY2FsbCB0byBcZkJnZXRjaFxmUi4KK1RoaXMgaXMgdXNlZCB0byBhbGVydCBhbiBhcHBsaWNhdGlvbiB0aGF0IHRoZSBzY3JlZW4gc2l6ZSBoYXMgY2hhbmdlZCwKK2FuZCB0aGF0IGl0IHNob3VsZCByZXBhaW50IHNwZWNpYWwgZmVhdHVyZXMgc3VjaCBhcyBwYWRzIHRoYXQgY2Fubm90CitiZSBkb25lIGF1dG9tYXRpY2FsbHkuCisuUFAKK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgXGZCTElORVNcZlAgb3IgXGZCQ09MVU1OU1xmUCBhcmUgc2V0LAordGhpcyBvdmVycmlkZXMgdGhlIGxpYnJhcnkncyB1c2Ugb2YgdGhlIHdpbmRvdyBzaXplIG9idGFpbmVkIGZyb20KK3RoZSBvcGVyYXRpbmcgc3lzdGVtLgorVGh1cywgZXZlbiBpZiBhIFNJR1dJTkNIIGlzIHJlY2VpdmVkLAorbm8gc2NyZWVuIHNpemUgY2hhbmdlIG1heSBiZSByZWNvcmRlZC4KK0luIHRoYXQgY2FzZSwgbm8gXGZCS0VZX1JFU0laRVxmUCBpcyBxdWV1ZWQgZm9yIHRoZSBuZXh0IGNhbGwgdG8gXGZCZ2V0Y2hcZlA7CithbiBcZkJFUlJcZlAgd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkLgorLlNIIFNFRSBBTFNPCitcZkJ3cmVzaXplXGZSKDNYKS4KKy5TSCBBVVRIT1IKK1Rob21hcyBEaWNrZXkgKGZyb20gYW4gZXF1aXZhbGVudCBmdW5jdGlvbiB3cml0dGVuIGluIDE5ODggZm9yIEJTRCBjdXJzZXMpLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vdGVybS41IGIvbmN1cnNlcy01LjcvbWFuL3Rlcm0uNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWFmNjJhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL3Rlcm0uNQpAQCAtMCwwICsxLDI4MyBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiB0ZXJtLjUsdiAxLjE5IDIwMDYvMTIvMjQgMTg6MTI6MzggdG9tIEV4cCAkCisuVEggdGVybSA1CisuZHMgbiA1CisuZHMgZCBAVEVSTUlORk9ACisuU0ggTkFNRQordGVybSBcLSBmb3JtYXQgb2YgY29tcGlsZWQgdGVybSBmaWxlLgorLlNIIFNZTk9QU0lTCisuQiB0ZXJtCisuU0ggREVTQ1JJUFRJT04KKy5TUyBTVE9SQUdFIExPQ0FUSU9OCitDb21waWxlZCB0ZXJtaW5mbyBkZXNjcmlwdGlvbnMgYXJlIHBsYWNlZCB1bmRlciB0aGUgZGlyZWN0b3J5IFxmQlwqZFxmUC4KK1R3byBjb25maWd1cmF0aW9ucyBhcmUgc3VwcG9ydGVkICh3aGVuIGJ1aWxkaW5nIHRoZSBuY3Vyc2VzIGxpYnJhcmllcyk6CisuVFAgNQorLkIgZGlyZWN0b3J5IHRyZWUKK0EgdHdvLWxldmVsIHNjaGVtZSBpcyB1c2VkIHRvIGF2b2lkIGEgbGluZWFyIHNlYXJjaAorb2YgYSBodWdlIFxzLTFVTklYXHMrMSBzeXN0ZW0gZGlyZWN0b3J5OiBcZkJcKmQvYy9uYW1lXGZQIHdoZXJlCisuSSBuYW1lCitpcyB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwsIGFuZAorLkkgYworaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorLklSIG5hbWUgLgorVGh1cywKKy5JIGFjdDQKK2NhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBcZkJcKmQvYS9hY3Q0XGZQLgorU3lub255bXMgZm9yIHRoZSBzYW1lIHRlcm1pbmFsIGFyZSBpbXBsZW1lbnRlZCBieSBtdWx0aXBsZQorbGlua3MgdG8gdGhlIHNhbWUgY29tcGlsZWQgZmlsZS4KKy5UUCA1CisuQiBoYXNoZWQgZGF0YWJhc2UKK1VzaW5nIEJlcmtlbGV5IGRhdGFiYXNlLCB0d28gdHlwZXMgb2YgcmVjb3JkcyBhcmUgc3RvcmVkOgordGhlIHRlcm1pbmZvIGRhdGEgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHN0b3JlZCBpbiBhIGRpcmVjdG9yeSB0cmVlIHdpdGgKK3RoZSB0ZXJtaW5mbydzIHByaW1hcnkgbmFtZSBhcyBhIGtleSwKK2FuZCByZWNvcmRzIGNvbnRhaW5pbmcgb25seSBhbGlhc2VzIHBvaW50aW5nIHRvIHRoZSBwcmltYXJ5IG5hbWUuCisuSVAKK0lmIGJ1aWx0IHRvIHdyaXRlIGhhc2hlZCBkYXRhYmFzZXMsCituY3Vyc2VzIGNhbiBzdGlsbCByZWFkIHRlcm1pbmZvIGRhdGFiYXNlcyBvcmdhbml6ZWQgYXMgYSBkaXJlY3RvcnkgdHJlZSwKK2J1dCBjYW5ub3Qgd3JpdGUgZW50cmllcyBpbnRvIHRoZSBkaXJlY3RvcnkgdHJlZS4KK0l0IGNhbiB3cml0ZSAob3IgcmV3cml0ZSkgZW50cmllcyBpbiB0aGUgaGFzaGVkIGRhdGFiYXNlLgorLklQCituY3Vyc2VzIGRpc3Rpbmd1aXNoZXMgdGhlIHR3byBjYXNlcyBpbiB0aGUgVEVSTUlORk8gYW5kIFRFUk1JTkZPX0RJUlMKK2Vudmlyb25tZW50IHZhcmlhYmxlIGJ5IGFzc3VtaW5nIGEgZGlyZWN0b3J5IHRyZWUgZm9yIGVudHJpZXMgdGhhdAorY29ycmVzcG9uZCB0byBhbiBleGlzdGluZyBkaXJlY3RvcnksCithbmQgaGFzaGVkIGRhdGFiYXNlIG90aGVyd2lzZS4KKy5TUyBTVE9SQUdFIEZPUk1BVAorVGhlIGZvcm1hdCBoYXMgYmVlbiBjaG9zZW4gc28gdGhhdCBpdCB3aWxsIGJlIHRoZSBzYW1lIG9uIGFsbCBoYXJkd2FyZS4KK0FuIDggb3IgbW9yZSBiaXQgYnl0ZSBpcyBhc3N1bWVkLCBidXQgbm8gYXNzdW1wdGlvbnMgYWJvdXQgYnl0ZSBvcmRlcmluZworb3Igc2lnbiBleHRlbnNpb24gYXJlIG1hZGUuCisuUFAKK1RoZSBjb21waWxlZCBmaWxlIGlzIGNyZWF0ZWQgd2l0aCB0aGUKKy5CIEBUSUNACitwcm9ncmFtLCBhbmQgcmVhZCBieSB0aGUgcm91dGluZQorLklSIHNldHVwdGVybSAuCitUaGUgZmlsZSBpcyBkaXZpZGVkIGludG8gc2l4IHBhcnRzOgordGhlIGhlYWRlciwKK3Rlcm1pbmFsIG5hbWVzLAorYm9vbGVhbiBmbGFncywKK251bWJlcnMsCitzdHJpbmdzLAorYW5kCitzdHJpbmcgdGFibGUuCisuUFAKK1RoZSBoZWFkZXIgc2VjdGlvbiBiZWdpbnMgdGhlIGZpbGUuCitUaGlzIHNlY3Rpb24gY29udGFpbnMgc2l4IHNob3J0IGludGVnZXJzIGluIHRoZSBmb3JtYXQKK2Rlc2NyaWJlZCBiZWxvdy4KK1RoZXNlIGludGVnZXJzIGFyZQorLlJTIDUKKy5UUCA1CisoMSkgdGhlIG1hZ2ljIG51bWJlciAob2N0YWwgMDQzMik7CisuVFAgNQorKDIpIHRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIG5hbWVzIHNlY3Rpb247CisuVFAgNQorKDMpIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJvb2xlYW4gc2VjdGlvbjsKKy5UUCA1CisoNCkgdGhlIG51bWJlciBvZiBzaG9ydCBpbnRlZ2VycyBpbiB0aGUgbnVtYmVycyBzZWN0aW9uOworLlRQIDUKKyg1KSB0aGUgbnVtYmVyIG9mIG9mZnNldHMgKHNob3J0IGludGVnZXJzKSBpbiB0aGUgc3RyaW5ncyBzZWN0aW9uOworLlRQIDUKKyg2KSB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBzdHJpbmcgdGFibGUuCisuUkUKKy5QUAorU2hvcnQgaW50ZWdlcnMgYXJlIHN0b3JlZCBpbiB0d28gOC1iaXQgYnl0ZXMuCitUaGUgZmlyc3QgYnl0ZSBjb250YWlucyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgOCBiaXRzIG9mIHRoZSB2YWx1ZSwKK2FuZCB0aGUgc2Vjb25kIGJ5dGUgY29udGFpbnMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgOCBiaXRzLgorKFRodXMsIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBpcyAyNTYqc2Vjb25kK2ZpcnN0LikKK1RoZSB2YWx1ZSAtMSBpcyByZXByZXNlbnRlZCBieSB0aGUgdHdvIGJ5dGVzIDAzNzcsIDAzNzc7IG90aGVyIG5lZ2F0aXZlCit2YWx1ZXMgYXJlIGlsbGVnYWwuIFRoaXMgdmFsdWUgZ2VuZXJhbGx5CittZWFucyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGNhcGFiaWxpdHkgaXMgbWlzc2luZyBmcm9tIHRoaXMgdGVybWluYWwuCitOb3RlIHRoYXQgdGhpcyBmb3JtYXQgY29ycmVzcG9uZHMgdG8gdGhlIGhhcmR3YXJlIG9mIHRoZSBccy0xVkFYXHMrMQorYW5kIFxzLTFQRFBccysxLTExICh0aGF0IGlzLCBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzKS4KK01hY2hpbmVzIHdoZXJlIHRoaXMgZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUgaGFyZHdhcmUgbXVzdCByZWFkIHRoZQoraW50ZWdlcnMgYXMgdHdvIGJ5dGVzIGFuZCBjb21wdXRlIHRoZSBsaXR0bGUtZW5kaWFuIHZhbHVlLgorLlBQCitUaGUgdGVybWluYWwgbmFtZXMgc2VjdGlvbiBjb21lcyBuZXh0LgorSXQgY29udGFpbnMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlcm1pbmZvIGRlc2NyaXB0aW9uLAorbGlzdGluZyB0aGUgdmFyaW91cyBuYW1lcyBmb3IgdGhlIHRlcm1pbmFsLAorc2VwYXJhdGVkIGJ5IHRoZSBgfCcgY2hhcmFjdGVyLgorVGhlIHNlY3Rpb24gaXMgdGVybWluYXRlZCB3aXRoIGFuIFxzLTFBU0NJSSBOVUxccysxIGNoYXJhY3Rlci4KKy5QUAorVGhlIGJvb2xlYW4gZmxhZ3MgaGF2ZSBvbmUgYnl0ZSBmb3IgZWFjaCBmbGFnLgorVGhpcyBieXRlIGlzIGVpdGhlciAwIG9yIDEgYXMgdGhlIGZsYWcgaXMgcHJlc2VudCBvciBhYnNlbnQuCitUaGUgY2FwYWJpbGl0aWVzIGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgZmlsZSA8dGVybS5oPi4KKy5QUAorQmV0d2VlbiB0aGUgYm9vbGVhbiBzZWN0aW9uIGFuZCB0aGUgbnVtYmVyIHNlY3Rpb24sCithIG51bGwgYnl0ZSB3aWxsIGJlIGluc2VydGVkLCBpZiBuZWNlc3NhcnksCit0byBlbnN1cmUgdGhhdCB0aGUgbnVtYmVyIHNlY3Rpb24gYmVnaW5zIG9uIGFuIGV2ZW4gYnl0ZSAodGhpcyBpcyBhCityZWxpYyBvZiB0aGUgUERQLTExJ3Mgd29yZC1hZGRyZXNzZWQgYXJjaGl0ZWN0dXJlLCBvcmlnaW5hbGx5CitkZXNpZ25lZCBpbiB0byBhdm9pZCBJT1QgdHJhcHMgaW5kdWNlZCBieSBhZGRyZXNzaW5nIGEgd29yZCBvbiBhbgorb2RkIGJ5dGUgYm91bmRhcnkpLgorQWxsIHNob3J0IGludGVnZXJzIGFyZSBhbGlnbmVkIG9uIGEgc2hvcnQgd29yZCBib3VuZGFyeS4KKy5QUAorVGhlIG51bWJlcnMgc2VjdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBmbGFncyBzZWN0aW9uLgorRWFjaCBjYXBhYmlsaXR5IHRha2VzIHVwIHR3byBieXRlcywKK2FuZCBpcyBzdG9yZWQgYXMgYSBsaXR0bGUtZW5kaWFuIHNob3J0IGludGVnZXIuCitJZiB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgaXMgLTEsIHRoZSBjYXBhYmlsaXR5IGlzIHRha2VuIHRvIGJlIG1pc3NpbmcuCisuUFAKK1RoZSBzdHJpbmdzIHNlY3Rpb24gaXMgYWxzbyBzaW1pbGFyLgorRWFjaCBjYXBhYmlsaXR5IGlzIHN0b3JlZCBhcyBhIHNob3J0IGludGVnZXIsIGluIHRoZSBmb3JtYXQgYWJvdmUuCitBIHZhbHVlIG9mIC0xIG1lYW5zIHRoZSBjYXBhYmlsaXR5IGlzIG1pc3NpbmcuCitPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyB0YWtlbiBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nCitvZiB0aGUgc3RyaW5nIHRhYmxlLgorU3BlY2lhbCBjaGFyYWN0ZXJzIGluIF5YIG9yIFxlYyBub3RhdGlvbiBhcmUgc3RvcmVkIGluIHRoZWlyCitpbnRlcnByZXRlZCBmb3JtLCBub3QgdGhlIHByaW50aW5nIHJlcHJlc2VudGF0aW9uLgorUGFkZGluZyBpbmZvcm1hdGlvbiAkPG5uPiBhbmQgcGFyYW1ldGVyIGluZm9ybWF0aW9uICV4IGFyZQorc3RvcmVkIGludGFjdCBpbiB1bmludGVycHJldGVkIGZvcm0uCisuUFAKK1RoZSBmaW5hbCBzZWN0aW9uIGlzIHRoZSBzdHJpbmcgdGFibGUuCitJdCBjb250YWlucyBhbGwgdGhlIHZhbHVlcyBvZiBzdHJpbmcgY2FwYWJpbGl0aWVzIHJlZmVyZW5jZWQgaW4KK3RoZSBzdHJpbmcgc2VjdGlvbi4KK0VhY2ggc3RyaW5nIGlzIG51bGwgdGVybWluYXRlZC4KKy5TUyBFWFRFTkRFRCBTVE9SQUdFIEZPUk1BVAorVGhlIHByZXZpb3VzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBjb252ZW50aW9uYWwgdGVybWluZm8gYmluYXJ5IGZvcm1hdC4KK1dpdGggc29tZSBtaW5vciB2YXJpYXRpb25zIG9mIHRoZSBvZmZzZXRzIChzZWUgUE9SVEFCSUxJVFkpLAordGhlIHNhbWUgYmluYXJ5IGZvcm1hdCBpcyB1c2VkIGluIGFsbCBtb2Rlcm4gVU5JWCBzeXN0ZW1zLgorRWFjaCBzeXN0ZW0gdXNlcyBhIHByZWRlZmluZWQgc2V0IG9mIGJvb2xlYW4sIG51bWJlciBvciBzdHJpbmcgY2FwYWJpbGl0aWVzLgorLlBQCitUaGUgbmN1cnNlcyBsaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucyBzdXBwb3J0IGV4dGVuZGVkIHRlcm1pbmZvIGJpbmFyeSBmb3JtYXQsCithbGxvd2luZyB1c2VycyB0byBkZWZpbmUgY2FwYWJpbGl0aWVzIHdoaWNoIGFyZSBsb2FkZWQgYXQgcnVudGltZS4gIFRoaXMKK2V4dGVuc2lvbiBpcyBtYWRlIHBvc3NpYmxlIGJ5IHVzaW5nIHRoZSBmYWN0IHRoYXQgdGhlIG90aGVyIGltcGxlbWVudGF0aW9ucworc3RvcCByZWFkaW5nIHRoZSB0ZXJtaW5mbyBkYXRhIHdoZW4gdGhleSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2l6ZSBnaXZlbgoraW4gdGhlIGhlYWRlci4KK25jdXJzZXMgY2hlY2tzIHRoZSBzaXplLCBhbmQgaWYgaXQgZXhjZWVkcyB0aGF0IGR1ZSB0byB0aGUgcHJlZGVmaW5lZCBkYXRhLAorY29udGludWVzIHRvIHBhcnNlIGFjY29yZGluZyB0byBpdHMgb3duIHNjaGVtZS4KKy5QUAorRmlyc3QsIGl0IHJlYWRzIHRoZSBleHRlbmRlZCBoZWFkZXIgKDUgc2hvcnQgaW50ZWdlcnMpOgorLlJTIDUKKy5UUCA1CisoMSkKK2NvdW50IG9mIGV4dGVuZGVkIGJvb2xlYW4gY2FwYWJpbGl0aWVzCisuVFAgNQorKDIpCitjb3VudCBvZiBleHRlbmRlZCBudW1lcmljIGNhcGFiaWxpdGllcworLlRQIDUKKygzKQorY291bnQgb2YgZXh0ZW5kZWQgc3RyaW5nIGNhcGFiaWxpdGllcworLlRQIDUKKyg0KQorc2l6ZSBvZiB0aGUgZXh0ZW5kZWQgc3RyaW5nIHRhYmxlIGluIGJ5dGVzLgorLlRQIDUKKyg1KQorbGFzdCBvZmZzZXQgb2YgdGhlIGV4dGVuZGVkIHN0cmluZyB0YWJsZSBpbiBieXRlcy4KKy5SRQorLlBQCitVc2luZyB0aGUgY291bnRzIGFuZCBzaXplcywgbmN1cnNlcyBhbGxvY2F0ZXMgYXJyYXlzIGFuZCByZWFkcyBkYXRhCitmb3IgdGhlIGV4dGVuZGVkIGNhcGFiaWx0aWVzIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24uCisuUFAKK1RoZSBleHRlbmRlZCBzdHJpbmcgdGFibGUgY29udGFpbnMgdmFsdWVzIGZvciBzdHJpbmcgY2FwYWJpbGl0aWVzLgorQWZ0ZXIgdGhlIGVuZCBvZiB0aGVzZSB2YWx1ZXMsIGl0IGNvbnRhaW5zIHRoZSBuYW1lcyBmb3IgZWFjaCBvZgordGhlIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBpbiBvcmRlciwgZS5nLiwgYm9vbGVhbnMsIHRoZW4gbnVtYmVycyBhbmQKK2ZpbmFsbHkgc3RyaW5ncy4KKy4KKy5TSCBQT1JUQUJJTElUWQorTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvcgorLkkgc2V0dXB0ZXJtCit0byBleHBlY3QgYSBkaWZmZXJlbnQgc2V0IG9mIGNhcGFiaWxpdGllcwordGhhbiBhcmUgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgZmlsZS4KK0VpdGhlciB0aGUgZGF0YWJhc2UgbWF5IGhhdmUgYmVlbiB1cGRhdGVkIHNpbmNlCisuSSBzZXR1cHRlcm0KK2hhcyBiZWVuIHJlY29tcGlsZWQKKyhyZXN1bHRpbmcgaW4gZXh0cmEgdW5yZWNvZ25pemVkIGVudHJpZXMgaW4gdGhlIGZpbGUpCitvciB0aGUgcHJvZ3JhbSBtYXkgaGF2ZSBiZWVuIHJlY29tcGlsZWQgbW9yZSByZWNlbnRseQordGhhbiB0aGUgZGF0YWJhc2Ugd2FzIHVwZGF0ZWQKKyhyZXN1bHRpbmcgaW4gbWlzc2luZyBlbnRyaWVzKS4KK1RoZSByb3V0aW5lCisuSSBzZXR1cHRlcm0KK211c3QgYmUgcHJlcGFyZWQgZm9yIGJvdGggcG9zc2liaWxpdGllcyBcLQordGhpcyBpcyB3aHkgdGhlIG51bWJlcnMgYW5kIHNpemVzIGFyZSBpbmNsdWRlZC4KK0Fsc28sIG5ldyBjYXBhYmlsaXRpZXMgbXVzdCBhbHdheXMgYmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdHMKK29mIGJvb2xlYW4sIG51bWJlciwgYW5kIHN0cmluZyBjYXBhYmlsaXRpZXMuCisuUFAKK0Rlc3BpdGUgdGhlIGNvbnNpc3RlbnQgdXNlIG9mIGxpdHRsZS1lbmRpYW4gZm9yIG51bWJlcnMgYW5kIHRoZSBvdGhlcndpc2UKK3NlbGYtZGVzY3JpYmluZyBmb3JtYXQsIGl0IGlzIG5vdCB3aXNlIHRvIGNvdW50IG9uIHBvcnRhYmlsaXR5IG9mIGJpbmFyeQordGVybWluZm8gZW50cmllcyBiZXR3ZWVuIGNvbW1lcmNpYWwgVU5JWCB2ZXJzaW9ucy4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlcmUKK2FyZSBhdCBsZWFzdCB0aHJlZSB2ZXJzaW9ucyBvZiB0ZXJtaW5mbyAodW5kZXIgSFAtVVgsIEFJWCwgYW5kIE9TRi8xKSB3aGljaAorZGl2ZXJnZWQgZnJvbSBTeXN0ZW0gViB0ZXJtaW5mbyBhZnRlciBTVnIxLCBhbmQgaGF2ZSBhZGRlZCBleHRlbnNpb24KK2NhcGFiaWxpdGllcyB0byB0aGUgc3RyaW5nIHRhYmxlIHRoYXQgKGluIHRoZSBiaW5hcnkgZm9ybWF0KSBjb2xsaWRlIHdpdGgKK1N5c3RlbSBWIGFuZCBYU0kgQ3Vyc2VzIGV4dGVuc2lvbnMuICBTZWUgXGZCdGVybWluZm9cZlIoXCpuKSBmb3IgZGV0YWlsZWQKK2Rpc2N1c3Npb24gb2YgdGVybWluZm8gc291cmNlIGNvbXBhdGliaWxpdHkgaXNzdWVzLgorLlNIIEVYQU1QTEUKK0FzIGFuIGV4YW1wbGUsIGhlcmUgaXMgYSBoZXggZHVtcCBvZiB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBMZWFyLVNpZWdsZXIKK0FETS0zLCBhIHBvcHVsYXIgdGhvdWdoIHJhdGhlciBzdHVwaWQgZWFybHkgdGVybWluYWw6CisubmYKKy5zcAorYWRtM2F8bHNpIGFkbTNhLAorICAgICAgICBhbSwKKyAgICAgICAgY29scyM4MCwgbGluZXMjMjQsCisgICAgICAgIGJlbD1eRywgY2xlYXI9XDAzMiQ8MT4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorICAgICAgICBjdWYxPV5MLCBjdXA9XFxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKyAgICAgICAgaG9tZT1eXiwgaW5kPV5KLAorLnNwCisuZnQgQ1cKK1xzLTIwMDAwICAxYSAwMSAxMCAwMCAwMiAwMCAwMyAwMCAgODIgMDAgMzEgMDAgNjEgNjQgNmQgMzMgIC4uLi4uLi4uIC4uMS5hZG0zCiswMDEwICA2MSA3YyA2YyA3MyA2OSAyMCA2MSA2NCAgNmQgMzMgNjEgMDAgMDAgMDEgNTAgMDAgIGF8bHNpIGFkIG0zYS4uLlAuCiswMDIwICBmZiBmZiAxOCAwMCBmZiBmZiAwMCAwMCAgMDIgMDAgZmYgZmYgZmYgZmYgMDQgMDAgIC4uLi4uLi4uIC4uLi4uLi4uCiswMDMwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgMGEgMDAgMjUgMDAgMjcgMDAgZmYgZmYgIC4uLi4uLi4uIC4uJS4nLi4uCiswMDQwICAyOSAwMCBmZiBmZiBmZiBmZiAyYiAwMCAgZmYgZmYgMmQgMDAgZmYgZmYgZmYgZmYgICkuLi4uLisuIC4uLS4uLi4uCiswMDUwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMDYwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMDcwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMDgwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMDkwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMGEwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMGIwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMGMwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMGQwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMGUwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMGYwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMTAwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMTEwICBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIC4uLi4uLi4uIC4uLi4uLi4uCiswMTIwICBmZiBmZiBmZiBmZiBmZiBmZiAyZiAwMCAgMDcgMDAgMGQgMDAgMWEgMjQgM2MgMzEgIC4uLi4uLi8uIC4uLi4uJDwxCiswMTMwICAzZSAwMCAxYiAzZCAyNSA3MCAzMSAyNSAgN2IgMzMgMzIgN2QgMjUgMmIgMjUgNjMgID4uLj0lcDElIHszMn0lKyVjCiswMTQwICAyNSA3MCAzMiAyNSA3YiAzMyAzMiA3ZCAgMjUgMmIgMjUgNjMgMDAgMGEgMDAgMWUgICVwMiV7MzJ9ICUrJWMuLi4uCiswMTUwICAwMCAwOCAwMCAwYyAwMCAwYiAwMCAwYSAgMDAgICAgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uIC5ccysyCisuZnQgUgorLmZpCisuc3AKKy5TSCBMSU1JVFMKK1NvbWUgbGltaXRhdGlvbnM6IHRvdGFsIGNvbXBpbGVkIGVudHJpZXMgY2Fubm90IGV4Y2VlZCA0MDk2IGJ5dGVzLgorVGhlIG5hbWUgZmllbGQgY2Fubm90IGV4Y2VlZCAxMjggYnl0ZXMuCisuU0ggRklMRVMKK1wqZC8qLyoJY29tcGlsZWQgdGVybWluYWwgY2FwYWJpbGl0eSBkYXRhIGJhc2UKKy5TSCBTRUUgQUxTTworXGZCY3Vyc2VzXGZSKDNYKSwgXGZCdGVybWluZm9cZlIoXCpuKS4KKy5TSCBBVVRIT1JTCitUaG9tYXMgRS4gRGlja2V5CisuYnIKK2V4dGVuZGVkIHRlcm1pbmZvIGZvcm1hdCBmb3IgbmN1cnNlcyA1LjAKKy5icgoraGFzaGVkIGRhdGFiYXNlIHN1cHBvcnQgZm9yIG5jdXJzZXMgNS42Cisuc3AKK0VyaWMgUy4gUmF5bW9uZAorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vdGVybS43IGIvbmN1cnNlcy01LjcvbWFuL3Rlcm0uNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWRhNmZiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL3Rlcm0uNwpAQCAtMCwwICsxLDIwNCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiB0ZXJtLjcsdiAxLjE4IDIwMDcvMDYvMDIgMjA6NDA6MDcgdG9tIEV4cCAkCisuVEggdGVybSA3CisuZHMgbiA1CisuZHMgZCBAVEVSTUlORk9ACisuU0ggTkFNRQordGVybSBcLSBjb252ZW50aW9ucyBmb3IgbmFtaW5nIHRlcm1pbmFsIHR5cGVzCisuU0ggREVTQ1JJUFRJT04KKy5QUAorVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1cZlIgc2hvdWxkIG5vcm1hbGx5IGNvbnRhaW4gdGhlIHR5cGUgbmFtZSBvZgordGhlIHRlcm1pbmFsLCBjb25zb2xlIG9yIGRpc3BsYXktZGV2aWNlIHR5cGUgeW91IGFyZSB1c2luZy4gIFRoaXMgaW5mb3JtYXRpb24KK2lzIGNyaXRpY2FsIGZvciBhbGwgc2NyZWVuLW9yaWVudGVkIHByb2dyYW1zLCBpbmNsdWRpbmcgeW91ciBlZGl0b3IgYW5kIG1haWxlci4KKy5QUAorQSBkZWZhdWx0IFxmQlRFUk1cZlIgdmFsdWUgd2lsbCBiZSBzZXQgb24gYSBwZXItbGluZSBiYXNpcyBieSBlaXRoZXIKK1xmQi9ldGMvaW5pdHRhYlxmUiAoTGludXggYW5kIFN5c3RlbS1WLWxpa2UgVU5JWGVzKSBvciBcZkIvZXRjL3R0eXNcZlIgKEJTRAorVU5JWGVzKS4gIFRoaXMgd2lsbCBuZWFybHkgYWx3YXlzIHN1ZmZpY2UgZm9yIHdvcmtzdGF0aW9uIGFuZCBtaWNyb2NvbXB1dGVyCitjb25zb2xlcy4KKy5QUAorSWYgeW91IHVzZSBhIGRpYWx1cCBsaW5lLCB0aGUgdHlwZSBvZiBkZXZpY2UgYXR0YWNoZWQgdG8gaXQgbWF5IHZhcnkuICBPbGRlcgorVU5JWCBzeXN0ZW1zIHByZS1zZXQgYSB2ZXJ5IGR1bWIgdGVybWluYWwgdHlwZSBsaWtlIGBkdW1iJyBvciBgZGlhbHVwJyBvbgorZGlhbHVwIGxpbmVzLiAgTmV3ZXIgb25lcyBtYXkgcHJlLXNldCBgdnQxMDAnLCByZWZsZWN0aW5nIHRoZSBwcmV2YWxlbmNlIG9mIERFQworVlQxMDAtY29tcGF0aWJsZSB0ZXJtaW5hbHMgYW5kIHBlcnNvbmFsLWNvbXB1dGVyIGVtdWxhdG9ycy4KKy5QUAorTW9kZXJuIHRlbG5ldHMgcGFzcyB5b3VyIFxmQlRFUk1cZlIgZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbSB0aGUgbG9jYWwgc2lkZSB0bwordGhlIHJlbW90ZSBvbmUuICBUaGVyZSBjYW4gYmUgcHJvYmxlbXMgaWYgdGhlIHJlbW90ZSB0ZXJtaW5mbyBvciB0ZXJtY2FwIGVudHJ5Citmb3IgeW91ciB0eXBlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggeW91cnMsIGJ1dCB0aGlzIHNpdHVhdGlvbiBpcyByYXJlIGFuZAorY2FuIGFsbW9zdCBhbHdheXMgYmUgYXZvaWRlZCBieSBleHBsaWNpdGx5IGV4cG9ydGluZyBgdnQxMDAnIChhc3N1bWluZyB5b3UKK2FyZSBpbiBmYWN0IHVzaW5nIGEgVlQxMDAtc3VwZXJzZXQgY29uc29sZSwgdGVybWluYWwsIG9yIHRlcm1pbmFsIGVtdWxhdG9yLikKKy5QUAorSW4gYW55IGNhc2UsIHlvdSBhcmUgZnJlZSB0byBvdmVycmlkZSB0aGUgc3lzdGVtIFxmQlRFUk1cZlIgc2V0dGluZyB0byB5b3VyCit0YXN0ZSBpbiB5b3VyIHNoZWxsIHByb2ZpbGUuICBUaGUgXGZCdHNldFxmUCgxKSB1dGlsaXR5IG1heSBiZSBvZiBhc3Npc3RhbmNlOworeW91IGNhbiBnaXZlIGl0IGEgc2V0IG9mIHJ1bGVzIGZvciBkZWR1Y2luZyBvciByZXF1ZXN0aW5nIGEgdGVybWluYWwgdHlwZSBiYXNlZAorb24gdGhlIHR0eSBkZXZpY2UgYW5kIGJhdWQgcmF0ZS4KKy5QUAorU2V0dGluZyB5b3VyIG93biBcZkJURVJNXGZSIHZhbHVlIG1heSBhbHNvIGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBjcmVhdGVkIGEKK2N1c3RvbSBlbnRyeSBpbmNvcnBvcmF0aW5nIG9wdGlvbnMgKHN1Y2ggYXMgdmlzdWFsIGJlbGwgb3IgcmV2ZXJzZS12aWRlbykKK3doaWNoIHlvdSB3aXNoIHRvIG92ZXJyaWRlIHRoZSBzeXN0ZW0gZGVmYXVsdCB0eXBlIGZvciB5b3VyIGxpbmUuCisuUFAKK1Rlcm1pbmFsIHR5cGUgZGVzY3JpcHRpb25zIGFyZSBzdG9yZWQgYXMgZmlsZXMgb2YgY2FwYWJpbGl0eSBkYXRhIHVuZGVybmVhdGgKK1wqZC4gIFRvIGJyb3dzZSBhIGxpc3Qgb2YgYWxsIHRlcm1pbmFsIG5hbWVzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbSwgZG8KKy5zcAorCUBUT0VAIHwgbW9yZQorLnNwCitmcm9tIHlvdXIgc2hlbGwuICBUaGVzZSBjYXBhYmlsaXR5IGZpbGVzIGFyZSBpbiBhIGJpbmFyeSBmb3JtYXQgb3B0aW1pemVkIGZvcgorcmV0cmlldmFsIHNwZWVkICh1bmxpa2UgdGhlIG9sZCB0ZXh0LWJhc2VkIFxmQnRlcm1jYXBcZlIgZm9ybWF0IHRoZXkgcmVwbGFjZSk7Cit0byBleGFtaW5lIGFuIGVudHJ5LCB5b3UgbXVzdCB1c2UgdGhlIFxmQkBJTkZPQ01QQFxmUigxTSkgY29tbWFuZC4KK0ludm9rZSBpdCBhcyBmb2xsb3dzOgorLnNwCisJQElORk9DTVBAIFxmSWVudHJ5LW5hbWVcZlIKKy5zcAord2hlcmUgXGZJZW50cnktbmFtZVxmUiBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSB5b3Ugd2lzaCB0byBleGFtaW5lIChhbmQgdGhlCituYW1lIG9mIGl0cyBjYXBhYmlsaXR5IGZpbGUgdGhlIHN1YmRpcmVjdG9yeSBvZiBcKmQgbmFtZWQgZm9yIGl0cyBmaXJzdAorbGV0dGVyKS4gIFRoaXMgY29tbWFuZCBkdW1wcyBhIGNhcGFiaWxpdHkgZmlsZSBpbiB0aGUgdGV4dCBmb3JtYXQgZGVzY3JpYmVkIGJ5CitcZkJ0ZXJtaW5mb1xmUihcKm4pLgorLlBQCitUaGUgZmlyc3QgbGluZSBvZiBhIFxmQnRlcm1pbmZvXGZSKFwqbikgZGVzY3JpcHRpb24gZ2l2ZXMgdGhlIG5hbWVzIGJ5IHdoaWNoCit0ZXJtaW5mbyBrbm93cyBhIHRlcm1pbmFsLCBzZXBhcmF0ZWQgYnkgYHwnIChwaXBlLWJhcikgY2hhcmFjdGVycyB3aXRoIHRoZSBsYXN0CituYW1lIGZpZWxkIHRlcm1pbmF0ZWQgYnkgYSBjb21tYS4gIFRoZSBmaXJzdCBuYW1lIGZpZWxkIGlzIHRoZSB0eXBlJ3MKK1xmSXByaW1hcnkgbmFtZVxmUiwgYW5kIGlzIHRoZSBvbmUgdG8gdXNlIHdoZW4gc2V0dGluZyBcZkJURVJNXGZSLiAgVGhlIGxhc3QKK25hbWUgZmllbGQgKGlmIGRpc3RpbmN0IGZyb20gdGhlIGZpcnN0KSBpcyBhY3R1YWxseSBhIGRlc2NyaXB0aW9uIG9mIHRoZQordGVybWluYWwgdHlwZSAoaXQgbWF5IGNvbnRhaW4gYmxhbmtzOyB0aGUgb3RoZXJzIG11c3QgYmUgc2luZ2xlIHdvcmRzKS4gIE5hbWUKK2ZpZWxkcyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCAoaWYgcHJlc2VudCkgYXJlIGFsaWFzZXMgZm9yIHRoZSB0ZXJtaW5hbCwKK3VzdWFsbHkgaGlzdG9yaWNhbCBuYW1lcyByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4KKy5QUAorVGhlcmUgYXJlIHNvbWUgY29udmVudGlvbnMgZm9yIGhvdyB0byBjaG9vc2UgdGVybWluYWwgcHJpbWFyeSBuYW1lcyB0aGF0IGhlbHAKK2tlZXAgdGhlbSBpbmZvcm1hdGl2ZSBhbmQgdW5pcXVlLiAgSGVyZSBpcyBhIHN0ZXAtYnktc3RlcCBndWlkZSB0byBuYW1pbmcKK3Rlcm1pbmFscyB0aGF0IGFsc28gZXhwbGFpbnMgaG93IHRvIHBhcnNlIHRoZW06CisuUFAKK0ZpcnN0LCBjaG9vc2UgYSByb290IG5hbWUuICBUaGUgcm9vdCB3aWxsIGNvbnNpc3Qgb2YgYSBsb3dlci1jYXNlIGxldHRlcgorZm9sbG93ZWQgYnkgdXAgdG8gc2V2ZW4gbG93ZXItY2FzZSBsZXR0ZXJzIG9yIGRpZ2l0cy4gIFlvdSBuZWVkIHRvIGF2b2lkIHVzaW5nCitwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIGluIHJvb3QgbmFtZXMsIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBhbmQgaW50ZXJwcmV0ZWQgYXMKK2ZpbGVuYW1lcyBhbmQgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIChzdWNoIGFzICEsICQsICosID8sIGV0Yy4pIGVtYmVkZGVkIGluIHRoZW0KK21heSBjYXVzZSBvZGQgYW5kIHVuaGVscGZ1bCBiZWhhdmlvci4gIFRoZSBzbGFzaCAoLyksIG9yIGFueSBvdGhlciBjaGFyYWN0ZXIKK3RoYXQgbWF5IGJlIGludGVycHJldGVkIGJ5IGFueW9uZSdzIGZpbGUgc3lzdGVtIChcZSwgJCwgWywgXSksIGlzIGVzcGVjaWFsbHkKK2Rhbmdlcm91cyAodGVybWluZm8gaXMgcGxhdGZvcm0taW5kZXBlbmRlbnQsIGFuZCBjaG9vc2luZyBuYW1lcyB3aXRoIHNwZWNpYWwKK2NoYXJhY3RlcnMgY291bGQgc29tZWRheSBtYWtlIGxpZmUgZGlmZmljdWx0IGZvciB1c2VycyBvZiBhIGZ1dHVyZSBwb3J0KS4gIFRoZQorZG90ICguKSBjaGFyYWN0ZXIgaXMgcmVsYXRpdmVseSBzYWZlIGFzIGxvbmcgYXMgdGhlcmUgaXMgYXQgbW9zdCBvbmUgcGVyIHJvb3QKK25hbWU7IHNvbWUgaGlzdG9yaWNhbCB0ZXJtaW5mbyBuYW1lcyB1c2UgaXQuCisuUFAKK1RoZSByb290IG5hbWUgZm9yIGEgdGVybWluYWwgb3Igd29ya3N0YXRpb24gY29uc29sZSB0eXBlIHNob3VsZCBhbG1vc3QgYWx3YXlzCitiZWdpbiB3aXRoIGEgdmVuZG9yIHByZWZpeCAoc3VjaCBhcyBcZkJocFxmUiBmb3IgSGV3bGV0dC1QYWNrYXJkLCBcZkJ3eVxmUiBmb3IKK1d5c2UsIG9yIFxmQmF0dFxmUiBmb3IgQVQmVCB0ZXJtaW5hbHMpLCBvciBhIGNvbW1vbiBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBsaW5lCisoXGZCdnRcZlIgZm9yIHRoZSBWVCBzZXJpZXMgb2YgdGVybWluYWxzIGZyb20gREVDLCBvciBcZkJzdW5cZlIgZm9yIFN1bgorTWljcm9zeXN0ZW1zIHdvcmtzdGF0aW9uIGNvbnNvbGVzLCBvciBcZkJyZWdlbnRcZlIgZm9yIHRoZSBBRERTIFJlZ2VudCBzZXJpZXMuCitZb3UgY2FuIGxpc3QgdGhlIHRlcm1pbmZvIHRyZWUgdG8gc2VlIHdoYXQgcHJlZml4ZXMgYXJlIGFscmVhZHkgaW4gY29tbW9uIHVzZS4KK1RoZSByb290IG5hbWUgcHJlZml4IHNob3VsZCBiZSBmb2xsb3dlZCB3aGVuIGFwcHJvcHJpYXRlIGJ5IGEgbW9kZWwgbnVtYmVyOwordGh1cyBcZkJ2dDEwMFxmUiwgXGZCaHAyNjIxXGZSLCBcZkJ3eTUwXGZSLgorLlBQCitUaGUgcm9vdCBuYW1lIGZvciBhIFBDLVVuaXggY29uc29sZSB0eXBlIHNob3VsZCBiZSB0aGUgT1MgbmFtZSwKK2kuZS4gXGZCbGludXhcZlIsIFxmQmJzZG9zXGZSLCBcZkJmcmVlYnNkXGZSLCBcZkJuZXRic2RcZlIuICBJdCBzaG91bGQKK1xmSW5vdFxmUiBiZSBcZkJjb25zb2xlXGZSIG9yIGFueSBvdGhlciBnZW5lcmljIHRoYXQgbWlnaHQgY2F1c2UgY29uZnVzaW9uIGluIGEKK211bHRpLXBsYXRmb3JtIGVudmlyb25tZW50ISAgSWYgYSBtb2RlbCBudW1iZXIgZm9sbG93cywgaXQgc2hvdWxkIGluZGljYXRlCitlaXRoZXIgdGhlIE9TIHJlbGVhc2UgbGV2ZWwgb3IgdGhlIGNvbnNvbGUgZHJpdmVyIHJlbGVhc2UgbGV2ZWwuCisuUFAKK1RoZSByb290IG5hbWUgZm9yIGEgdGVybWluYWwgZW11bGF0b3IgKGFzc3VtaW5nIGl0IGRvZXMgbm90IGZpdCBvbmUgb2YgdGhlCitzdGFuZGFyZCBBTlNJIG9yIHZ0MTAwIHR5cGVzKSBzaG91bGQgYmUgdGhlIHByb2dyYW0gbmFtZSBvciBhIHJlYWRpbHkKK3JlY29nbml6YWJsZSBhYmJyZXZpYXRpb24gb2YgaXQgKGkuZS4gXGZCdmVyc2F0ZXJtXGZSLCBcZkJjdHJtXGZSKS4KKy5QUAorRm9sbG93aW5nIHRoZSByb290IG5hbWUsIHlvdSBtYXkgYWRkIGFueSByZWFzb25hYmxlIG51bWJlciBvZiBoeXBoZW4tc2VwYXJhdGVkCitmZWF0dXJlIHN1ZmZpeGVzLgorLlRQIDUKKzJwCitIYXMgdHdvIHBhZ2VzIG9mIG1lbW9yeS4gIExpa2V3aXNlIDRwLCA4cCwgZXRjLgorLlRQIDUKK21jCitNYWdpYy1jb29raWUuICBTb21lIHRlcm1pbmFscyAobm90YWJseSBvbGRlciBXeXNlcykgY2FuIG9ubHkgc3VwcG9ydCBvbmUKK2F0dHJpYnV0ZSB3aXRob3V0IG1hZ2ljLWNvb2tpZSBsb3NzYWdlLiAgVGhlaXIgYmFzZSBlbnRyeSBpcyB1c3VhbGx5IHBhaXJlZAord2l0aCBhbm90aGVyIHRoYXQgaGFzIHRoaXMgc3VmZml4IGFuZCB1c2VzIG1hZ2ljIGNvb2tpZXMgdG8gc3VwcG9ydCBtdWx0aXBsZQorYXR0cmlidXRlcy4KKy5UUCA1CistYW0KK0VuYWJsZSBhdXRvLW1hcmdpbiAocmlnaHQtbWFyZ2luIHdyYXBhcm91bmQpLgorLlRQIDUKKy1tCitNb25vIG1vZGUgLSBzdXBwcmVzcyBjb2xvciBzdXBwb3J0LgorLlRQIDUKKy1uYQorTm8gYXJyb3cga2V5cyAtIHRlcm1jYXAgaWdub3JlcyBhcnJvdyBrZXlzIHdoaWNoIGFyZSBhY3R1YWxseSB0aGVyZSBvbiB0aGUKK3Rlcm1pbmFsLCBzbyB0aGUgdXNlciBjYW4gdXNlIHRoZSBhcnJvdyBrZXlzIGxvY2FsbHkuCisuVFAgNQorLW5hbQorTm8gYXV0by1tYXJnaW4gLSBzdXBwcmVzcyBhbSBjYXBhYmlsaXR5LgorLlRQIDUKKy1ubAorTm8gbGFiZWxzIC0gc3VwcHJlc3Mgc29mdCBsYWJlbHMuCisuVFAgNQorLW5zbAorTm8gc3RhdHVzIGxpbmUgLSBzdXBwcmVzcyBzdGF0dXMgbGluZS4KKy5UUCA1CistcHAKK0hhcyBhIHByaW50ZXIgcG9ydCB3aGljaCBpcyB1c2VkLgorLlRQIDUKKy1ydgorVGVybWluYWwgaW4gcmV2ZXJzZSB2aWRlbyBtb2RlIChibGFjayBvbiB3aGl0ZSkuCisuVFAgNQorLXMKK0VuYWJsZSBzdGF0dXMgbGluZS4KKy5UUCA1CistdmIKK1VzZSB2aXNpYmxlIGJlbGwgKGZsYXNoKSByYXRoZXIgdGhhbiBiZWVwLgorLlRQIDUKKy13CitXaWRlOyB0ZXJtaW5hbCBpcyBpbiAxMzIgY29sdW1uIG1vZGUuCisuUFAKK0NvbnZlbnRpb25hbGx5LCBpZiB5b3VyIHRlcm1pbmFsIHR5cGUgaXMgYSB2YXJpYW50IGludGVuZGVkIHRvIHNwZWNpZnkgYQorbGluZSBoZWlnaHQsIHRoYXQgc3VmZml4IHNob3VsZCBnbyBmaXJzdC4gIFNvLCBmb3IgYSBoeXBvdGhldGljYWwgRnVCYXJDbworbW9kZWwgMjMxNyB0ZXJtaW5hbCBpbiAzMC1saW5lIG1vZGUgd2l0aCByZXZlcnNlIHZpZGVvLCBiZXN0IGZvcm0gd291bGQgYmUKK1xmQmZ1YmFyLTMwLXJ2XGZSIChyYXRoZXIgdGhhbiwgc2F5LCBgZnViYXItcnYtMzAnKS4KKy5QUAorVGVybWluYWwgdHlwZXMgdGhhdCBhcmUgd3JpdHRlbiBub3QgYXMgc3RhbmRhbG9uZSBlbnRyaWVzLCBidXQgcmF0aGVyIGFzCitjb21wb25lbnRzIHRvIGJlIHBsdWdnZWQgaW50byBvdGhlciBlbnRyaWVzIHZpYSBcZkJ1c2VcZlAgY2FwYWJpbGl0aWVzLAorYXJlIGRpc3Rpbmd1aXNoZWQgYnkgdXNpbmcgZW1iZWRkZWQgcGx1cyBzaWducyByYXRoZXIgdGhhbiBkYXNoZXMuCisuUFAKK0NvbW1hbmRzIHdoaWNoIHVzZSBhIHRlcm1pbmFsIHR5cGUgdG8gY29udHJvbCBkaXNwbGF5IG9mdGVuIGFjY2VwdCBhIC1UCitvcHRpb24gdGhhdCBhY2NlcHRzIGEgdGVybWluYWwgbmFtZSBhcmd1bWVudC4gIFN1Y2ggcHJvZ3JhbXMgc2hvdWxkIGZhbGwgYmFjaworb24gdGhlIFxmQlRFUk1cZlIgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBubyAtVCBvcHRpb24gaXMgc3BlY2lmaWVkLgorLlNIIFBPUlRBQklMSVRZCitGb3IgbWF4aW11bSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgU3lzdGVtIFYgVU5JWGVzLCBuYW1lcyBhbmQgYWxpYXNlcworc2hvdWxkIGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGZpcnN0IDE0IGNoYXJhY3RlcnMuCisuU0ggRklMRVMKKy5UUCA1CitcKmQvPy8qCitjb21waWxlZCB0ZXJtaW5hbCBjYXBhYmlsaXR5IGRhdGEgYmFzZQorLlRQIDUKKy9ldGMvaW5pdHRhYgordHR5IGxpbmUgaW5pdGlhbGl6YXRpb24gKEFUJlQtbGlrZSBVTklYZXMpCisuVFAgNQorL2V0Yy90dHlzCit0dHkgbGluZSBpbml0aWFsaXphdGlvbiAoQlNELWxpa2UgVU5JWGVzKQorLlNIIFNFRSBBTFNPCitcZkJjdXJzZXNcZlIoM1gpLCBcZkJ0ZXJtaW5mb1xmUihcKm4pLCBcZkJ0ZXJtXGZSKFwqbikuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi90ZXJtaW5mby5oZWFkIGIvbmN1cnNlcy01LjcvbWFuL3Rlcm1pbmZvLmhlYWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1NTY3NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi90ZXJtaW5mby5oZWFkCkBAIC0wLDAgKzEsMTA3IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IHRlcm1pbmZvLmhlYWQsdiAxLjE2IDIwMDcvMDMvMDQgMDA6MDk6NDYgdG9tIEV4cCAkCisuVEggdGVybWluZm8gNSAiIiAiIiAiRmlsZSBGb3JtYXRzIgorLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK3Rlcm1pbmZvIFwtIHRlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YSBiYXNlCisuU0ggU1lOT1BTSVMKK1wqZC8qLyoKKy5TSCBERVNDUklQVElPTgorLkkgVGVybWluZm8KK2lzIGEgZGF0YSBiYXNlIGRlc2NyaWJpbmcgdGVybWluYWxzLCB1c2VkIGJ5IHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtcyBzdWNoIGFzCitcZkJudmlcZlIoMSksCitcZkJyb2d1ZVxmUigxKQorYW5kIGxpYnJhcmllcyBzdWNoIGFzCitcZkJjdXJzZXNcZlIoM1gpLgorLkkgVGVybWluZm8KK2Rlc2NyaWJlcyB0ZXJtaW5hbHMgYnkgZ2l2aW5nIGEgc2V0IG9mIGNhcGFiaWxpdGllcyB3aGljaCB0aGV5CitoYXZlLCBieSBzcGVjaWZ5aW5nIGhvdyB0byBwZXJmb3JtIHNjcmVlbiBvcGVyYXRpb25zLCBhbmQgYnkKK3NwZWNpZnlpbmcgcGFkZGluZyByZXF1aXJlbWVudHMgYW5kIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4KK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5QUAorRW50cmllcyBpbgorLkkgdGVybWluZm8KK2NvbnNpc3Qgb2YgYSBzZXF1ZW5jZSBvZiBgLCcgc2VwYXJhdGVkIGZpZWxkcyAoZW1iZWRkZWQgY29tbWFzIG1heSBiZQorZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoIG9yIG5vdGF0ZWQgYXMgXFwwNTQpLgorV2hpdGUgc3BhY2UgYWZ0ZXIgdGhlIGAsJyBzZXBhcmF0b3IgaXMgaWdub3JlZC4KK1RoZSBmaXJzdCBlbnRyeSBmb3IgZWFjaCB0ZXJtaW5hbCBnaXZlcyB0aGUgbmFtZXMgd2hpY2ggYXJlIGtub3duIGZvciB0aGUKK3Rlcm1pbmFsLCBzZXBhcmF0ZWQgYnkgYHwnIGNoYXJhY3RlcnMuCitUaGUgZmlyc3QgbmFtZSBnaXZlbiBpcyB0aGUgbW9zdCBjb21tb24gYWJicmV2aWF0aW9uIGZvciB0aGUgdGVybWluYWwsCit0aGUgbGFzdCBuYW1lIGdpdmVuIHNob3VsZCBiZSBhIGxvbmcgbmFtZSBmdWxseSBpZGVudGlmeWluZyB0aGUgdGVybWluYWwsCithbmQgYWxsIG90aGVycyBhcmUgdW5kZXJzdG9vZCBhcyBzeW5vbnltcyBmb3IgdGhlIHRlcm1pbmFsIG5hbWUuCitBbGwgbmFtZXMgYnV0IHRoZSBsYXN0IHNob3VsZCBiZSBpbiBsb3dlciBjYXNlIGFuZCBjb250YWluIG5vIGJsYW5rczsKK3RoZSBsYXN0IG5hbWUgbWF5IHdlbGwgY29udGFpbiB1cHBlciBjYXNlIGFuZCBibGFua3MgZm9yIHJlYWRhYmlsaXR5LgorLlBQCitMaW5lcyBiZWdpbm5pbmcgd2l0aCBhIGAjJyBpbiB0aGUgZmlyc3QgY29sdW1uIGFyZSB0cmVhdGVkIGFzIGNvbW1lbnRzLgorV2hpbGUgY29tbWVudCBsaW5lcyBhcmUgbGVnYWwgYXQgYW55IHBvaW50LCB0aGUgb3V0cHV0IG9mIFxmQkBDQVBUT0lORk9AXGZQCithbmQgXGZCQElORk9UT0NBUEBcZlAgKGFsaWFzZXMgZm9yIFxmQkBUSUNAXGZQKQord2lsbCBtb3ZlIGNvbW1lbnRzIHNvIHRoZXkgb2NjdXIgb25seSBiZXR3ZWVuIGVudHJpZXMuCisuUFAKK05ld2xpbmVzIGFuZCBsZWFkaW5nIHRhYnMgbWF5IGJlIHVzZWQgZm9yIGZvcm1hdHRpbmcgZW50cmllcyBmb3IgcmVhZGFiaWxpdHkuCitUaGVzZSBhcmUgcmVtb3ZlZCBmcm9tIHBhcnNlZCBlbnRyaWVzLgorVGhlIFxmQkBJTkZPQ01QQFwgLWZcZlAgb3B0aW9uIHJlbGllcyBvbiB0aGlzIHRvIGZvcm1hdCBpZi10aGVuLWVsc2UgZXhwcmVzc2lvbnM6Cit0aGUgcmVzdWx0IGNhbiBiZSByZWFkIGJ5IFxmQkBUSUNAXGZQLgorLlBQCitUZXJtaW5hbCBuYW1lcyAoZXhjZXB0IGZvciB0aGUgbGFzdCwgdmVyYm9zZSBlbnRyeSkgc2hvdWxkCitiZSBjaG9zZW4gdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9ucy4KK1RoZSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlIG1ha2luZyB1cCB0aGUgdGVybWluYWwgc2hvdWxkCitoYXZlIGEgcm9vdCBuYW1lLCB0aHVzIGBgaHAyNjIxJycuCitUaGlzIG5hbWUgc2hvdWxkIG5vdCBjb250YWluIGh5cGhlbnMuCitNb2RlcyB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gYmUgaW4sIG9yIHVzZXIgcHJlZmVyZW5jZXMsIHNob3VsZAorYmUgaW5kaWNhdGVkIGJ5IGFwcGVuZGluZyBhIGh5cGhlbiBhbmQgYSBtb2RlIHN1ZmZpeC4KK1RodXMsIGEgdnQxMDAgaW4gMTMyIGNvbHVtbiBtb2RlIHdvdWxkIGJlIHZ0MTAwLXcuCitUaGUgZm9sbG93aW5nIHN1ZmZpeGVzIHNob3VsZCBiZSB1c2VkIHdoZXJlIHBvc3NpYmxlOgorLlBQCisuVFMKK2NlbnRlciA7CitsIGMgbAorbCBsIGwuCitcZkJTdWZmaXgJTWVhbmluZwlFeGFtcGxlXGZQCistXGZJbm5cZlAJTnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBzY3JlZW4JYWFhLTYwCistXGZJblxmUHAJTnVtYmVyIG9mIHBhZ2VzIG9mIG1lbW9yeQljMTAwLTRwCistYW0JV2l0aCBhdXRvbWFyZ2lucyAodXN1YWxseSB0aGUgZGVmYXVsdCkJdnQxMDAtYW0KKy1tCU1vbm8gbW9kZTsgc3VwcHJlc3MgY29sb3IgICAgICAgCWFuc2ktbQorLW1jCU1hZ2ljIGNvb2tpZTsgc3BhY2VzIHdoZW4gaGlnaGxpZ2h0aW5nCXd5MzAtbWMKKy1uYQlObyBhcnJvdyBrZXlzIChsZWF2ZSB0aGVtIGluIGxvY2FsKQljMTAwLW5hCistbmFtCVdpdGhvdXQgYXV0b21hdGljIG1hcmdpbnMgICAgICAgCXZ0MTAwLW5hbQorLW5sCU5vIHN0YXR1cyBsaW5lICAgICAgICAgICAgICAgICAgCWF0dDQ0MTUtbmwKKy1ucwlObyBzdGF0dXMgbGluZSAgICAgICAgICAgICAgICAgIAlocDI2MjYtbnMKKy1ydglSZXZlcnNlIHZpZGVvICAgICAgICAgICAgICAgICAgIAljMTAwLXJ2CistcwlFbmFibGUgc3RhdHVzIGxpbmUgICAgICAgICAgICAgIAl2dDEwMC1zCistdmIJVXNlIHZpc2libGUgYmVsbCBpbnN0ZWFkIG9mIGJlZXAJd3kzNzAtdmIKKy13CVdpZGUgbW9kZSAoPiA4MCBjb2x1bW5zLCB1c3VhbGx5IDEzMikJdnQxMDAtdworLlRFCisuUFAKK0ZvciBtb3JlIG9uIHRlcm1pbmFsIG5hbWluZyBjb252ZW50aW9ucywgc2VlIHRoZSBcZkJ0ZXJtKDcpXGZSIG1hbnVhbCBwYWdlLgorLlNTIENhcGFiaWxpdGllcworLlwiIEhlYWQgb2YgdGVybWluZm8gbWFuIHBhZ2UgZW5kcyBoZXJlCisucHMgLTEKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi90ZXJtaW5mby50YWlsIGIvbmN1cnNlcy01LjcvbWFuL3Rlcm1pbmZvLnRhaWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2ZDNhOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21hbi90ZXJtaW5mby50YWlsCkBAIC0wLDAgKzEsMTcwMyBAQAorLlwiICRJZDogdGVybWluZm8udGFpbCx2IDEuNDkgMjAwOC8wMi8xNiAyMDo1Nzo0MyB0b20gRXhwICQKKy5cIiBCZWdpbm5pbmcgb2YgdGVybWluZm8udGFpbCBmaWxlCisuXCIgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbmN1cnNlcy4KKy5cIiBTZWUgInRlcm1pbmZvLmhlYWQiIGZvciBjb3B5cmlnaHQuCisucHMgKzEKKy4KKy5TUyBBIFNhbXBsZSBFbnRyeQorLgorVGhlIGZvbGxvd2luZyBlbnRyeSwgZGVzY3JpYmluZyBhbiBBTlNJLXN0YW5kYXJkIHRlcm1pbmFsLCBpcyByZXByZXNlbnRhdGl2ZQorb2Ygd2hhdCBhIFxmQnRlcm1pbmZvXGZSIGVudHJ5IGZvciBhIG1vZGVybiB0ZXJtaW5hbCB0eXBpY2FsbHkgbG9va3MgbGlrZS4KKy5QUAorLm5mCisuaW4gLTIKKy50YSAuM2kKKy5mdCBDVworXHMtMmFuc2l8YW5zaS9wYy10ZXJtIGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKyAgICAgICAgbWM1aSwKKyAgICAgICAgY29sb3JzIzgsIG5jdiMzLCBwYWlycyM2NCwKKyAgICAgICAgY3ViPVxcRVslcDElZEQsIGN1ZD1cXEVbJXAxJWRCLCBjdWY9XFxFWyVwMSVkQywKKyAgICAgICAgY3V1PVxcRVslcDElZEEsIGRjaD1cXEVbJXAxJWRQLCBkbD1cXEVbJXAxJWRNLAorICAgICAgICBlY2g9XFxFWyVwMSVkWCwgZWwxPVxcRVsxSywgaHBhPVxcRVslcDElZEcsIGh0PVxcRVtJLAorICAgICAgICBpY2g9XFxFWyVwMSVkQCwgaWw9XFxFWyVwMSVkTCwgaW5kbj1cXEVbJXAxJWRTLCAuaW5kbj1cXEVbJXAxJWRULAorICAgICAgICBrYnM9XkgsIGtjYnQ9XFxFW1osIGtjdWIxPVxcRVtELCBrY3VkMT1cXEVbQiwKKyAgICAgICAga2N1ZjE9XFxFW0MsIGtjdXUxPVxcRVtBLCBrZjE9XFxFW00sIGtmMTA9XFxFW1YsCisgICAgICAgIGtmMTE9XFxFW1csIGtmMTI9XFxFW1gsIGtmMj1cXEVbTiwga2YzPVxcRVtPLCBrZjQ9XFxFW1AsCisgICAgICAgIGtmNT1cXEVbUSwga2Y2PVxcRVtSLCBrZjc9XFxFW1MsIGtmOD1cXEVbVCwga2Y5PVxcRVtVLAorICAgICAgICBraWNoMT1cXEVbTCwgbWM0PVxcRVs0aSwgbWM1PVxcRVs1aSwgbmVsPVxcclxcRVtTLAorICAgICAgICBvcD1cXEVbMzc7NDBtLCByZXA9JXAxJWNcXEVbJXAyJXsxfSUtJWRiLAorICAgICAgICByaW49XFxFWyVwMSVkVCwgczBkcz1cXEUoQiwgczFkcz1cXEUpQiwgczJkcz1cXEUqQiwKKyAgICAgICAgczNkcz1cXEUrQiwgc2V0YWI9XFxFWzQlcDElZG0sIHNldGFmPVxcRVszJXAxJWRtLAorICAgICAgICBzZXRiPVxcRVs0JT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorICAgICAgICBzZXRmPVxcRVszJT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorICAgICAgICBzZ3I9XFxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOCV0OzExJTslPyVwOSV0OzEyJTttLAorICAgICAgICBzZ3IwPVxcRVswOzEwbSwgdGJjPVxcRVsyZywgdTY9XFxFWyVkOyVkUiwgdTc9XFxFWzZuLAorICAgICAgICB1OD1cXEVbPyVbOzAxMjM0NTY3ODldYywgdTk9XFxFW2MsIHZwYT1cXEVbJXAxJWRkLFxzKzIKKy5pbiArMgorLmZpCisuZnQgUgorLlBQCitFbnRyaWVzIG1heSBjb250aW51ZSBvbnRvIG11bHRpcGxlIGxpbmVzIGJ5IHBsYWNpbmcgd2hpdGUgc3BhY2UgYXQKK3RoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIGV4Y2VwdCB0aGUgZmlyc3QuCitDb21tZW50cyBtYXkgYmUgaW5jbHVkZWQgb24gbGluZXMgYmVnaW5uaW5nIHdpdGggYGAjJycuCitDYXBhYmlsaXRpZXMgaW4KKy5JIHRlcm1pbmZvCithcmUgb2YgdGhyZWUgdHlwZXM6CitCb29sZWFuIGNhcGFiaWxpdGllcyB3aGljaCBpbmRpY2F0ZSB0aGF0IHRoZSB0ZXJtaW5hbCBoYXMKK3NvbWUgcGFydGljdWxhciBmZWF0dXJlLCBudW1lcmljIGNhcGFiaWxpdGllcyBnaXZpbmcgdGhlIHNpemUgb2YgdGhlIHRlcm1pbmFsCitvciB0aGUgc2l6ZSBvZiBwYXJ0aWN1bGFyIGRlbGF5cywgYW5kIHN0cmluZworY2FwYWJpbGl0aWVzLCB3aGljaCBnaXZlIGEgc2VxdWVuY2Ugd2hpY2ggY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBwYXJ0aWN1bGFyCit0ZXJtaW5hbCBvcGVyYXRpb25zLgorLlBQCisuU1MgVHlwZXMgb2YgQ2FwYWJpbGl0aWVzCisuUFAKK0FsbCBjYXBhYmlsaXRpZXMgaGF2ZSBuYW1lcy4KK0ZvciBpbnN0YW5jZSwgdGhlIGZhY3QgdGhhdAorQU5TSS1zdGFuZGFyZCB0ZXJtaW5hbHMgaGF2ZQorLkkgImF1dG9tYXRpYyBtYXJnaW5zIgorKGkuZS4sIGFuIGF1dG9tYXRpYyByZXR1cm4gYW5kIGxpbmUtZmVlZAord2hlbiB0aGUgZW5kIG9mIGEgbGluZSBpcyByZWFjaGVkKSBpcyBpbmRpY2F0ZWQgYnkgdGhlIGNhcGFiaWxpdHkgXGZCYW1cZlIuCitIZW5jZSB0aGUgZGVzY3JpcHRpb24gb2YgYW5zaSBpbmNsdWRlcyBcZkJhbVxmUi4KK051bWVyaWMgY2FwYWJpbGl0aWVzIGFyZSBmb2xsb3dlZCBieSB0aGUgY2hhcmFjdGVyIGAjJyBhbmQgdGhlbiBhIHBvc2l0aXZlIHZhbHVlLgorVGh1cyBcZkJjb2xzXGZSLCB3aGljaCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSB0ZXJtaW5hbCBoYXMsCitnaXZlcyB0aGUgdmFsdWUgYDgwJyBmb3IgYW5zaS4KK1ZhbHVlcyBmb3IgbnVtZXJpYyBjYXBhYmlsaXRpZXMgbWF5IGJlIHNwZWNpZmllZCBpbiBkZWNpbWFsLCBvY3RhbCBvciBoZXhhZGVjaW1hbCwKK3VzaW5nIHRoZSBDIHByb2dyYW1taW5nIGxhbmd1YWdlIGNvbnZlbnRpb25zIChlLmcuLCAyNTUsIDAzNzcgYW5kIDB4ZmYgb3IgMHhGRikuCisuUFAKK0ZpbmFsbHksIHN0cmluZyB2YWx1ZWQgY2FwYWJpbGl0aWVzLCBzdWNoIGFzIFxmQmVsXGZSIChjbGVhciB0byBlbmQgb2YgbGluZQorc2VxdWVuY2UpIGFyZSBnaXZlbiBieSB0aGUgdHdvLWNoYXJhY3RlciBjb2RlLCBhbiBgPScsIGFuZCB0aGVuIGEgc3RyaW5nCitlbmRpbmcgYXQgdGhlIG5leHQgZm9sbG93aW5nIGAsJy4KKy5QUAorQSBudW1iZXIgb2YgZXNjYXBlIHNlcXVlbmNlcyBhcmUgcHJvdmlkZWQgaW4gdGhlIHN0cmluZyB2YWx1ZWQgY2FwYWJpbGl0aWVzCitmb3IgZWFzeSBlbmNvZGluZyBvZiBjaGFyYWN0ZXJzIHRoZXJlLgorQm90aCBcZkJcZUVcZlIgYW5kIFxmQlxlZVxmUgorbWFwIHRvIGFuIFxzLTFFU0NBUEVcczAgY2hhcmFjdGVyLAorXGZCXnhcZlIgbWFwcyB0byBhIGNvbnRyb2wteCBmb3IgYW55IGFwcHJvcHJpYXRlIHgsIGFuZCB0aGUgc2VxdWVuY2VzCitcZkJcZW4gXGVsIFxlciBcZXQgXGViIFxlZiBcZXNcZlIgZ2l2ZQorYSBuZXdsaW5lLCBsaW5lLWZlZWQsIHJldHVybiwgdGFiLCBiYWNrc3BhY2UsIGZvcm0tZmVlZCwgYW5kIHNwYWNlLgorT3RoZXIgZXNjYXBlcyBpbmNsdWRlIFxmQlxlXlxmUiBmb3IgXGZCXlxmUiwKK1xmQlxlXGVcZlIgZm9yIFxmQlxlXGZSLAorXGZCXGVcZlIsIGZvciBjb21tYSwKK1xmQlxlOlxmUiBmb3IgXGZCOlxmUiwKK2FuZCBcZkJcZTBcZlIgZm9yIG51bGwuCisoXGZCXGUwXGZSIHdpbGwgcHJvZHVjZSBcZTIwMCwgd2hpY2ggZG9lcyBub3QgdGVybWluYXRlIGEgc3RyaW5nIGJ1dCBiZWhhdmVzCithcyBhIG51bGwgY2hhcmFjdGVyIG9uIG1vc3QgdGVybWluYWxzLCBwcm92aWRpbmcgQ1M3IGlzIHNwZWNpZmllZC4KK1NlZSBzdHR5KDEpLikKK0ZpbmFsbHksIGNoYXJhY3RlcnMgbWF5IGJlIGdpdmVuIGFzIHRocmVlIG9jdGFsIGRpZ2l0cyBhZnRlciBhIFxmQlxlXGZSLgorLlBQCitBIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBtYXkgYXBwZWFyIGFueXdoZXJlIGluIGEgc3RyaW5nIGNhcGFiaWxpdHksIGVuY2xvc2VkIGluCiskPC4uPiBicmFja2V0cywgYXMgaW4gXGZCZWxcZlA9XGVFSyQ8NT4sIGFuZCBwYWRkaW5nIGNoYXJhY3RlcnMgYXJlIHN1cHBsaWVkIGJ5CisuSSB0cHV0cwordG8gcHJvdmlkZSB0aGlzIGRlbGF5LgorVGhlIGRlbGF5IG11c3QgYmUgYSBudW1iZXIgd2l0aCBhdCBtb3N0IG9uZSBkZWNpbWFsCitwbGFjZSBvZiBwcmVjaXNpb247IGl0IG1heSBiZSBmb2xsb3dlZCBieSBzdWZmaXhlcyBgKicgb3IgJy8nIG9yIGJvdGguCitBIGAqJworaW5kaWNhdGVzIHRoYXQgdGhlIHBhZGRpbmcgcmVxdWlyZWQgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgbGluZXMKK2FmZmVjdGVkIGJ5IHRoZSBvcGVyYXRpb24sIGFuZCB0aGUgYW1vdW50IGdpdmVuIGlzIHRoZSBwZXItYWZmZWN0ZWQtdW5pdAorcGFkZGluZyByZXF1aXJlZC4KKyhJbiB0aGUgY2FzZSBvZiBpbnNlcnQgY2hhcmFjdGVyLCB0aGUgZmFjdG9yIGlzIHN0aWxsIHRoZQorbnVtYmVyIG9mCisuSVIgbGluZXMKK2FmZmVjdGVkLikgIE5vcm1hbGx5LCBwYWRkaW5nIGlzIGFkdmlzb3J5IGlmIHRoZSBkZXZpY2UgaGFzIHRoZSBcZkJ4b25cZlIKK2NhcGFiaWxpdHk7IGl0IGlzIHVzZWQgZm9yIGNvc3QgY29tcHV0YXRpb24gYnV0IGRvZXMgbm90IHRyaWdnZXIgZGVsYXlzLgorQSBgLycKK3N1ZmZpeCBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFkZGluZyBpcyBtYW5kYXRvcnkgYW5kIGZvcmNlcyBhIGRlbGF5IG9mIHRoZSBnaXZlbgorbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBldmVuIG9uIGRldmljZXMgZm9yIHdoaWNoIFxmQnhvblxmUiBpcyBwcmVzZW50IHRvCitpbmRpY2F0ZSBmbG93IGNvbnRyb2wuCisuUFAKK1NvbWV0aW1lcyBpbmRpdmlkdWFsIGNhcGFiaWxpdGllcyBtdXN0IGJlIGNvbW1lbnRlZCBvdXQuCitUbyBkbyB0aGlzLCBwdXQgYSBwZXJpb2QgYmVmb3JlIHRoZSBjYXBhYmlsaXR5IG5hbWUuCitGb3IgZXhhbXBsZSwgc2VlIHRoZSBzZWNvbmQKKy5CIGluZAoraW4gdGhlIGV4YW1wbGUgYWJvdmUuCisuYnIKKy5uZSA1CisuUFAKKy5TUyBGZXRjaGluZyBDb21waWxlZCBEZXNjcmlwdGlvbnMKKy5QUAorSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRFUk1JTkZPIGlzIHNldCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHBhdGhuYW1lCitvZiBhIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBjb21waWxlZCBkZXNjcmlwdGlvbiB5b3UgYXJlIHdvcmtpbmcgb24uCitPbmx5Cit0aGF0IGRpcmVjdG9yeSBpcyBzZWFyY2hlZC4KKy5QUAorSWYgVEVSTUlORk8gaXMgbm90IHNldCwgdGhlIFxmQm5jdXJzZXNcZlIgdmVyc2lvbiBvZiB0aGUgdGVybWluZm8gcmVhZGVyIGNvZGUKK3dpbGwgaW5zdGVhZCBsb29rIGluIHRoZSBkaXJlY3RvcnkgXGZCJEhPTUUvLnRlcm1pbmZvXGZSCitmb3IgYSBjb21waWxlZCBkZXNjcmlwdGlvbi4KK0lmIGl0IGZhaWxzIHRvIGZpbmQgb25lIHRoZXJlLCBhbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRFUk1JTkZPX0RJUlMgaXMKK3NldCwgaXQgd2lsbCBpbnRlcnByZXQgdGhlIGNvbnRlbnRzIG9mIHRoYXQgdmFyaWFibGUgYXMgYSBsaXN0IG9mIGNvbG9uLQorc2VwYXJhdGVkIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIChhbiBlbXB0eSBlbnRyeSBpcyBpbnRlcnByZXRlZCBhcyBhCitjb21tYW5kIHRvIHNlYXJjaCBcZklcKmRcZlIpLgorSWYgbm8gZGVzY3JpcHRpb24gaXMgZm91bmQgaW4gYW55IG9mIHRoZQorVEVSTUlORk9fRElSUyBkaXJlY3RvcmllcywgdGhlIGZldGNoIGZhaWxzLgorLlBQCitJZiBuZWl0aGVyIFRFUk1JTkZPIG5vciBURVJNSU5GT19ESVJTIGlzIHNldCwgdGhlIGxhc3QgcGxhY2UgdHJpZWQgd2lsbCBiZSB0aGUKK3N5c3RlbSB0ZXJtaW5mbyBkaXJlY3RvcnksIFxmSVwqZFxmUi4KKy5QUAorKE5laXRoZXIgdGhlIFxmQiRIT01FLy50ZXJtaW5mb1xmUiBsb29rdXBzIG5vciBURVJNSU5GT19ESVJTIGV4dGVuc2lvbnMgYXJlCitzdXBwb3J0ZWQgdW5kZXIgc3RvY2sgU3lzdGVtIFYgdGVybWluZm8vY3Vyc2VzLikKKy5QUAorLlNTIFByZXBhcmluZyBEZXNjcmlwdGlvbnMKKy5QUAorV2Ugbm93IG91dGxpbmUgaG93IHRvIHByZXBhcmUgZGVzY3JpcHRpb25zIG9mIHRlcm1pbmFscy4KK1RoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gcHJlcGFyZSBhIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGlzIGJ5IGltaXRhdGluZwordGhlIGRlc2NyaXB0aW9uIG9mIGEgc2ltaWxhciB0ZXJtaW5hbCBpbgorLkkgdGVybWluZm8KK2FuZCB0byBidWlsZCB1cCBhIGRlc2NyaXB0aW9uIGdyYWR1YWxseSwgdXNpbmcgcGFydGlhbCBkZXNjcmlwdGlvbnMKK3dpdGgKKy5JIHZpCitvciBzb21lIG90aGVyIHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtIHRvIGNoZWNrIHRoYXQgdGhleSBhcmUgY29ycmVjdC4KK0JlIGF3YXJlIHRoYXQgYSB2ZXJ5IHVudXN1YWwgdGVybWluYWwgbWF5IGV4cG9zZSBkZWZpY2llbmNpZXMgaW4KK3RoZSBhYmlsaXR5IG9mIHRoZQorLkkgdGVybWluZm8KK2ZpbGUgdG8gZGVzY3JpYmUgaXQKK29yIGJ1Z3MgaW4gdGhlIHNjcmVlbi1oYW5kbGluZyBjb2RlIG9mIHRoZSB0ZXN0IHByb2dyYW0uCisuUFAKK1RvIGdldCB0aGUgcGFkZGluZyBmb3IgaW5zZXJ0IGxpbmUgcmlnaHQgKGlmIHRoZSB0ZXJtaW5hbCBtYW51ZmFjdHVyZXIKK2RpZCBub3QgZG9jdW1lbnQgaXQpIGEgc2V2ZXJlIHRlc3QgaXMgdG8gZWRpdCBhIGxhcmdlIGZpbGUgYXQgOTYwMCBiYXVkLAorZGVsZXRlIDE2IG9yIHNvIGxpbmVzIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuLCB0aGVuIGhpdCB0aGUgYHUnCitrZXkgc2V2ZXJhbCB0aW1lcyBxdWlja2x5LgorSWYgdGhlIHRlcm1pbmFsIG1lc3NlcyB1cCwgbW9yZSBwYWRkaW5nIGlzIHVzdWFsbHkgbmVlZGVkLgorQSBzaW1pbGFyIHRlc3QgY2FuIGJlIHVzZWQgZm9yIGluc2VydCBjaGFyYWN0ZXIuCisuUFAKKy5TUyBCYXNpYyBDYXBhYmlsaXRpZXMKKy5QUAorVGhlIG51bWJlciBvZiBjb2x1bW5zIG9uIGVhY2ggbGluZSBmb3IgdGhlIHRlcm1pbmFsIGlzIGdpdmVuIGJ5IHRoZQorXGZCY29sc1xmUiBudW1lcmljIGNhcGFiaWxpdHkuCitJZiB0aGUgdGVybWluYWwgaXMgYSBccy0xQ1JUXHMwLCB0aGVuIHRoZQorbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBzY3JlZW4gaXMgZ2l2ZW4gYnkgdGhlIFxmQmxpbmVzXGZSIGNhcGFiaWxpdHkuCitJZiB0aGUgdGVybWluYWwgd3JhcHMgYXJvdW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSB3aGVuCitpdCByZWFjaGVzIHRoZSByaWdodCBtYXJnaW4sIHRoZW4gaXQgc2hvdWxkIGhhdmUgdGhlIFxmQmFtXGZSIGNhcGFiaWxpdHkuCitJZiB0aGUgdGVybWluYWwgY2FuIGNsZWFyIGl0cyBzY3JlZW4sIGxlYXZpbmcgdGhlIGN1cnNvciBpbiB0aGUgaG9tZQorcG9zaXRpb24sIHRoZW4gdGhpcyBpcyBnaXZlbiBieSB0aGUgXGZCY2xlYXJcZlIgc3RyaW5nIGNhcGFiaWxpdHkuCitJZiB0aGUgdGVybWluYWwgb3ZlcnN0cmlrZXMKKyhyYXRoZXIgdGhhbiBjbGVhcmluZyBhIHBvc2l0aW9uIHdoZW4gYSBjaGFyYWN0ZXIgaXMgc3RydWNrIG92ZXIpCit0aGVuIGl0IHNob3VsZCBoYXZlIHRoZSBcZkJvc1xmUiBjYXBhYmlsaXR5LgorSWYgdGhlIHRlcm1pbmFsIGlzIGEgcHJpbnRpbmcgdGVybWluYWwsIHdpdGggbm8gc29mdCBjb3B5IHVuaXQsCitnaXZlIGl0IGJvdGgKKy5CIGhjCithbmQKKy5CUiBvcyAuCisuUkIgKCBvcworYXBwbGllcyB0byBzdG9yYWdlIHNjb3BlIHRlcm1pbmFscywgc3VjaCBhcyBccy0xVEVLVFJPTklYXHMrMSA0MDEwCitzZXJpZXMsIGFzIHdlbGwgYXMgaGFyZCBjb3B5IGFuZCBBUEwgdGVybWluYWxzLikKK0lmIHRoZXJlIGlzIGEgY29kZSB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGUgY3VycmVudAorcm93LCBnaXZlIHRoaXMgYXMKKy5CUiBjciAuCisoTm9ybWFsbHkgdGhpcyB3aWxsIGJlIGNhcnJpYWdlIHJldHVybiwgY29udHJvbCBNLikKK0lmIHRoZXJlIGlzIGEgY29kZSB0byBwcm9kdWNlIGFuIGF1ZGlibGUgc2lnbmFsIChiZWxsLCBiZWVwLCBldGMpCitnaXZlIHRoaXMgYXMKKy5CUiBiZWwgLgorLlBQCitJZiB0aGVyZSBpcyBhIGNvZGUgdG8gbW92ZSB0aGUgY3Vyc29yIG9uZSBwb3NpdGlvbiB0byB0aGUgbGVmdAorKHN1Y2ggYXMgYmFja3NwYWNlKSB0aGF0IGNhcGFiaWxpdHkgc2hvdWxkIGJlIGdpdmVuIGFzCisuQlIgY3ViMSAuCitTaW1pbGFybHksIGNvZGVzIHRvIG1vdmUgdG8gdGhlIHJpZ2h0LCB1cCwgYW5kIGRvd24gc2hvdWxkIGJlCitnaXZlbiBhcworLkJSIGN1ZjEgLAorLkJSIGN1dTEgLAorYW5kCisuQlIgY3VkMSAuCitUaGVzZSBsb2NhbCBjdXJzb3IgbW90aW9ucyBzaG91bGQgbm90IGFsdGVyIHRoZSB0ZXh0IHRoZXkgcGFzcyBvdmVyLAorZm9yIGV4YW1wbGUsIHlvdSB3b3VsZCBub3Qgbm9ybWFsbHkgdXNlIGBcZkJjdWYxXGZQPVwgJyBiZWNhdXNlIHRoZQorc3BhY2Ugd291bGQgZXJhc2UgdGhlIGNoYXJhY3RlciBtb3ZlZCBvdmVyLgorLlBQCitBIHZlcnkgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhhdCB0aGUgbG9jYWwgY3Vyc29yIG1vdGlvbnMgZW5jb2RlZAoraW4KKy5JIHRlcm1pbmZvCithcmUgdW5kZWZpbmVkIGF0IHRoZSBsZWZ0IGFuZCB0b3AgZWRnZXMgb2YgYSBccy0xQ1JUXHMwIHRlcm1pbmFsLgorUHJvZ3JhbXMgc2hvdWxkIG5ldmVyIGF0dGVtcHQgdG8gYmFja3NwYWNlIGFyb3VuZCB0aGUgbGVmdCBlZGdlLAordW5sZXNzCisuQiBidworaXMgZ2l2ZW4sCithbmQgbmV2ZXIgYXR0ZW1wdCB0byBnbyB1cCBsb2NhbGx5IG9mZiB0aGUgdG9wLgorSW4gb3JkZXIgdG8gc2Nyb2xsIHRleHQgdXAsIGEgcHJvZ3JhbSB3aWxsIGdvIHRvIHRoZSBib3R0b20gbGVmdCBjb3JuZXIKK29mIHRoZSBzY3JlZW4gYW5kIHNlbmQgdGhlCisuQiBpbmQKKyhpbmRleCkgc3RyaW5nLgorLlBQCitUbyBzY3JvbGwgdGV4dCBkb3duLCBhIHByb2dyYW0gZ29lcyB0byB0aGUgdG9wIGxlZnQgY29ybmVyCitvZiB0aGUgc2NyZWVuIGFuZCBzZW5kcyB0aGUKKy5CIHJpCisocmV2ZXJzZSBpbmRleCkgc3RyaW5nLgorVGhlIHN0cmluZ3MKKy5CIGluZAorYW5kCisuQiByaQorYXJlIHVuZGVmaW5lZCB3aGVuIG5vdCBvbiB0aGVpciByZXNwZWN0aXZlIGNvcm5lcnMgb2YgdGhlIHNjcmVlbi4KKy5QUAorUGFyYW1ldGVyaXplZCB2ZXJzaW9ucyBvZiB0aGUgc2Nyb2xsaW5nIHNlcXVlbmNlcyBhcmUKKy5CIGluZG4KK2FuZAorLkIgcmluCit3aGljaCBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcworLkIgaW5kCithbmQKKy5CIHJpCitleGNlcHQgdGhhdCB0aGV5IHRha2Ugb25lIHBhcmFtZXRlciwgYW5kIHNjcm9sbCB0aGF0IG1hbnkgbGluZXMuCitUaGV5IGFyZSBhbHNvIHVuZGVmaW5lZCBleGNlcHQgYXQgdGhlIGFwcHJvcHJpYXRlIGVkZ2Ugb2YgdGhlIHNjcmVlbi4KKy5QUAorVGhlIFxmQmFtXGZSIGNhcGFiaWxpdHkgdGVsbHMgd2hldGhlciB0aGUgY3Vyc29yIHN0aWNrcyBhdCB0aGUgcmlnaHQKK2VkZ2Ugb2YgdGhlIHNjcmVlbiB3aGVuIHRleHQgaXMgb3V0cHV0LCBidXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseQorYXBwbHkgdG8gYQorLkIgY3VmMQorZnJvbSB0aGUgbGFzdCBjb2x1bW4uCitUaGUgb25seSBsb2NhbCBtb3Rpb24gd2hpY2ggaXMgZGVmaW5lZCBmcm9tIHRoZSBsZWZ0IGVkZ2UgaXMgaWYKKy5CIGJ3CitpcyBnaXZlbiwgdGhlbiBhCisuQiBjdWIxCitmcm9tIHRoZSBsZWZ0IGVkZ2Ugd2lsbCBtb3ZlIHRvIHRoZSByaWdodCBlZGdlIG9mIHRoZSBwcmV2aW91cyByb3cuCitJZgorLkIgYncKK2lzIG5vdCBnaXZlbiwgdGhlIGVmZmVjdCBpcyB1bmRlZmluZWQuCitUaGlzIGlzIHVzZWZ1bCBmb3IgZHJhd2luZyBhIGJveCBhcm91bmQgdGhlIGVkZ2Ugb2YgdGhlIHNjcmVlbiwgZm9yIGV4YW1wbGUuCitJZiB0aGUgdGVybWluYWwgaGFzIHN3aXRjaCBzZWxlY3RhYmxlIGF1dG9tYXRpYyBtYXJnaW5zLAordGhlCisuSSB0ZXJtaW5mbworZmlsZSB1c3VhbGx5IGFzc3VtZXMgdGhhdCB0aGlzIGlzIG9uOyBpLmUuLCBcZkJhbVxmUi4KK0lmIHRoZSB0ZXJtaW5hbCBoYXMgYSBjb21tYW5kIHdoaWNoIG1vdmVzIHRvIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIG5leHQKK2xpbmUsIHRoYXQgY29tbWFuZCBjYW4gYmUgZ2l2ZW4gYXMKKy5CIG5lbAorKG5ld2xpbmUpLgorSXQgZG9lcyBub3QgbWF0dGVyIGlmIHRoZSBjb21tYW5kIGNsZWFycyB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGxpbmUsCitzbyBpZiB0aGUgdGVybWluYWwgaGFzIG5vCisuQiBjcgorYW5kCisuQiBsZgoraXQgbWF5IHN0aWxsIGJlIHBvc3NpYmxlIHRvIGNyYWZ0IGEgd29ya2luZworLkIgbmVsCitvdXQgb2Ygb25lIG9yIGJvdGggb2YgdGhlbS4KKy5QUAorVGhlc2UgY2FwYWJpbGl0aWVzIHN1ZmZpY2UgdG8gZGVzY3JpYmUgaGFyZC1jb3B5IGFuZCBcKihscWdsYXNzLXR0eVwqKHJxIHRlcm1pbmFscy4KK1RodXMgdGhlIG1vZGVsIDMzIHRlbGV0eXBlIGlzIGRlc2NyaWJlZCBhcworLlBQCisuRFQKKy5uZgorLmZ0IENXCisuXCIuaW4gLTIKK1xzLTEzM1x8fFx8dHR5MzNcfHxcfHR0eVx8fFx8bW9kZWwgMzMgdGVsZXR5cGUsCisJYmVsPV5HLCBjb2xzIzcyLCBjcj1eTSwgY3VkMT1eSiwgaGMsIGluZD1eSiwgb3MsXHMrMQorLlwiLmluICsyCisuZnQgUgorLlBQCit3aGlsZSB0aGUgTGVhciBTaWVnbGVyIFxzLTFBRE0tM1xzMCBpcyBkZXNjcmliZWQgYXMKKy5QUAorLkRUCisubmYKKy5mdCBDVworLlwiLmluIC0yCitccy0xYWRtM1x8fFx8M1x8fFx8bHNpIGFkbTMsCisJYW0sIGJlbD1eRywgY2xlYXI9XlosIGNvbHMjODAsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWluZD1eSiwgbGluZXMjMjQsXHMrMQorLlwiLmluICsyCisuZnQgUgorLmZpCisuUFAKKy5TUyBQYXJhbWV0ZXJpemVkIFN0cmluZ3MKKy5QUAorQ3Vyc29yIGFkZHJlc3NpbmcgYW5kIG90aGVyIHN0cmluZ3MgcmVxdWlyaW5nIHBhcmFtZXRlcnMKK2luIHRoZSB0ZXJtaW5hbCBhcmUgZGVzY3JpYmVkIGJ5IGEKK3BhcmFtZXRlcml6ZWQgc3RyaW5nIGNhcGFiaWxpdHksIHdpdGgKKy5JUiBwcmludGYgKDMpCitsaWtlIGVzY2FwZXMgXGZCJXhcZlIgaW4gaXQuCitGb3IgZXhhbXBsZSwgdG8gYWRkcmVzcyB0aGUgY3Vyc29yLCB0aGUKKy5CIGN1cAorY2FwYWJpbGl0eSBpcyBnaXZlbiwgdXNpbmcgdHdvIHBhcmFtZXRlcnM6Cit0aGUgcm93IGFuZCBjb2x1bW4gdG8gYWRkcmVzcyB0by4KKyhSb3dzIGFuZCBjb2x1bW5zIGFyZSBudW1iZXJlZCBmcm9tIHplcm8gYW5kIHJlZmVyIHRvIHRoZQorcGh5c2ljYWwgc2NyZWVuIHZpc2libGUgdG8gdGhlIHVzZXIsIG5vdCB0byBhbnkgdW5zZWVuIG1lbW9yeS4pCitJZiB0aGUgdGVybWluYWwgaGFzIG1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZywKK3RoYXQgY2FuIGJlIGluZGljYXRlZCBieQorLkJSIG1yY3VwIC4KKy5QUAorVGhlIHBhcmFtZXRlciBtZWNoYW5pc20gdXNlcyBhIHN0YWNrIGFuZCBzcGVjaWFsIFxmQiVcZlAgY29kZXMKK3RvIG1hbmlwdWxhdGUgaXQuCitUeXBpY2FsbHkgYSBzZXF1ZW5jZSB3aWxsIHB1c2ggb25lIG9mIHRoZQorcGFyYW1ldGVycyBvbnRvIHRoZSBzdGFjayBhbmQgdGhlbiBwcmludCBpdCBpbiBzb21lIGZvcm1hdC4KK1ByaW50IChlLmcuLCAiJWQiKSBpcyBhIHNwZWNpYWwgY2FzZS4KK090aGVyIG9wZXJhdGlvbnMsIGluY2x1ZGluZyAiJXQiIHBvcCB0aGVpciBvcGVyYW5kIGZyb20gdGhlIHN0YWNrLgorSXQgaXMgbm90ZWQgdGhhdCBtb3JlIGNvbXBsZXggb3BlcmF0aW9ucyBhcmUgb2Z0ZW4gbmVjZXNzYXJ5LAorZS5nLiwgaW4gdGhlIFxmQnNnclxmUCBzdHJpbmcuCisuUFAKK1RoZSBcZkIlXGZSIGVuY29kaW5ncyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisuUFAKKy5UUCA1Citccy0xJSUKK291dHB1dHMgYCUnCisuVFAKKyVcZklbW1xmUDpcZkldZmxhZ3NdW3dpZHRoWy5wcmVjaXNpb25dXVtcZlBkb3hYc1xmSV1cZlAKK2FzIGluIFxmQnByaW50ZlxmUCwgZmxhZ3MgYXJlIFstKyNdIGFuZCBzcGFjZS4KK1VzZSBhIGA6JyB0byBhbGxvdyB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgYSBgLScgZmxhZywKK2F2b2lkaW5nIGludGVycHJldGluZyAiJS0iIGFzIGFuIG9wZXJhdG9yLgorLlRQCislYworcHJpbnQgcG9wKCkgbGlrZSAlYyBpbiBcZkJwcmludGZcZlAKKy5UUAorJXMKK3ByaW50IHBvcCgpIGxpa2UgJXMgaW4gXGZCcHJpbnRmXGZQCisuVFAKKyVwWzEtOV0KK3B1c2ggXGZJaVxmUCd0aCBwYXJhbWV0ZXIKKy5UUAorJVBbYS16XQorc2V0IGR5bmFtaWMgdmFyaWFibGUgW2Etel0gdG8gcG9wKCkKKy5UUAorJWdbYS16XQorZ2V0IGR5bmFtaWMgdmFyaWFibGUgW2Etel0gYW5kIHB1c2ggaXQKKy5UUAorJVBbQS1aXQorc2V0IHN0YXRpYyB2YXJpYWJsZSBbYS16XSB0byBwb3AoKQorLlRQCislZ1tBLVpdCitnZXQgc3RhdGljIHZhcmlhYmxlIFthLXpdIGFuZCBwdXNoIGl0CisuSVAKK1RoZSB0ZXJtcyAic3RhdGljIiBhbmQgImR5bmFtaWMiIGFyZSBtaXNsZWFkaW5nLgorSGlzdG9yaWNhbGx5LCB0aGVzZSBhcmUgc2ltcGx5IHR3byBkaWZmZXJlbnQgc2V0cyBvZiB2YXJpYWJsZXMsCit3aG9zZSB2YWx1ZXMgYXJlIG5vdCByZXNldCBiZXR3ZWVuIGNhbGxzIHRvIFxmQnRwYXJtXGZQLgorSG93ZXZlciwgdGhhdCBmYWN0IGlzIG5vdCBkb2N1bWVudGVkIGluIG90aGVyIGltcGxlbWVudGF0aW9ucy4KK1JlbHlpbmcgb24gaXQgd2lsbCBhZHZlcnNlbHkgaW1wYWN0IHBvcnRhYmlsaXR5IHRvIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKy5UUAorJSdcZkljXGZQJworY2hhciBjb25zdGFudCBcZkljXGZQCisuVFAKKyV7XGZJbm5cZlB9CitpbnRlZ2VyIGNvbnN0YW50IFxmSW5uXGZQCisuVFAKKyVsCitwdXNoIHN0cmxlbihwb3ApCisuVFAKKyUrICUtICUqICUvICVtCithcml0aG1ldGljICglbSBpcyBtb2QpOiBwdXNoKHBvcCgpIG9wIHBvcCgpKQorLlRQCislJiAlfCAlXgorYml0IG9wZXJhdGlvbnMgKEFORCwgT1IgYW5kIGV4Y2x1c2l2ZS1PUik6IHB1c2gocG9wKCkgb3AgcG9wKCkpCisuVFAKKyU9ICU+ICU8Citsb2dpY2FsIG9wZXJhdGlvbnM6IHB1c2gocG9wKCkgb3AgcG9wKCkpCisuVFAKKyVBLCAlTworbG9naWNhbCBBTkQgYW5kIE9SIG9wZXJhdGlvbnMgKGZvciBjb25kaXRpb25hbHMpCisuVFAKKyUhICV+Cit1bmFyeSBvcGVyYXRpb25zIChsb2dpY2FsIGFuZCBiaXQgY29tcGxlbWVudCk6IHB1c2gob3AgcG9wKCkpCisuVFAKKyVpCithZGQgMSB0byBmaXJzdCB0d28gcGFyYW1ldGVycyAoZm9yIEFOU0kgdGVybWluYWxzKQorLlRQCislPyBcZklleHByXGZQICV0IFxmSXRoZW5wYXJ0XGZQICVlIFxmSWVsc2VwYXJ0XGZQICU7CitUaGlzIGZvcm1zIGFuIGlmLXRoZW4tZWxzZS4KK1RoZSAlZSBcZkllbHNlcGFydFxmUCBpcyBvcHRpb25hbC4KK1VzdWFsbHkgdGhlICU/IFxmSWV4cHJcZlAgcGFydCBwdXNoZXMgYSB2YWx1ZSBvbnRvIHRoZSBzdGFjaywKK2FuZCAldCBwb3BzIGl0IGZyb20gdGhlIHN0YWNrLCB0ZXN0aW5nIGlmIGl0IGlzIG5vbnplcm8gKHRydWUpLgorSWYgaXQgaXMgemVybyAoZmFsc2UpLCBjb250cm9sIHBhc3NlcyB0byB0aGUgJWUgKGVsc2UpIHBhcnQuCisuSVAKK0l0IGlzIHBvc3NpYmxlIHRvIGZvcm0gZWxzZS1pZidzIGEgbGEgQWxnb2wgNjg6CisuUlMKKyU/IGNcZDFcdSAldCBiXGQxXHUgJWUgY1xkMlx1ICV0IGJcZDJcdSAlZSBjXGQzXHUgJXQgYlxkM1x1ICVlIGNcZDRcdSAldCBiXGQ0XHUgJWUgJTsKKy5SRQorLklQCit3aGVyZSBjXGRpXHUgYXJlIGNvbmRpdGlvbnMsIGJcZGlcdSBhcmUgYm9kaWVzLgorLklQCitVc2UgdGhlIFxmQi1mXGZQIG9wdGlvbiBvZiBcZkJ0aWNcZlAgb3IgXGZCQElORk9DTVBAXGZQIHRvIHNlZQordGhlIHN0cnVjdHVyZSBvZiBpZi10aGUtZWxzZSdzLgorU29tZSBzdHJpbmdzLCBlLmcuLCBcZkJzZ3JcZlAgY2FuIGJlIHZlcnkgY29tcGxpY2F0ZWQgd2hlbiB3cml0dGVuCitvbiBvbmUgbGluZS4KK1RoZSBcZkItZlxmUCBvcHRpb24gc3BsaXRzIHRoZSBzdHJpbmcgaW50byBsaW5lcyB3aXRoIHRoZSBwYXJ0cyBpbmRlbnRlZC4KKy5QUAorQmluYXJ5IG9wZXJhdGlvbnMgYXJlIGluIHBvc3RmaXggZm9ybSB3aXRoIHRoZSBvcGVyYW5kcyBpbiB0aGUgdXN1YWwgb3JkZXIuCitUaGF0IGlzLCB0byBnZXQgeC01IG9uZSB3b3VsZCB1c2UgIiVneCV7NX0lLSIuCislUCBhbmQgJWcgdmFyaWFibGVzIGFyZQorcGVyc2lzdGVudCBhY3Jvc3MgZXNjYXBlLXN0cmluZyBldmFsdWF0aW9ucy4KKy5QUAorQ29uc2lkZXIgdGhlIEhQMjY0NSwgd2hpY2gsIHRvIGdldCB0byByb3cgMyBhbmQgY29sdW1uIDEyLCBuZWVkcwordG8gYmUgc2VudCBcZUUmYTEyYzAzWSBwYWRkZWQgZm9yIDYgbWlsbGlzZWNvbmRzLgorTm90ZSB0aGF0IHRoZSBvcmRlcgorb2YgdGhlIHJvd3MgYW5kIGNvbHVtbnMgaXMgaW52ZXJ0ZWQgaGVyZSwgYW5kIHRoYXQgdGhlIHJvdyBhbmQgY29sdW1uCithcmUgcHJpbnRlZCBhcyB0d28gZGlnaXRzLgorVGh1cyBpdHMgXGZCY3VwXGZSIGNhcGFiaWxpdHkgaXMgXCoobHFjdXA9NlxlRSYlcDIlMmRjJXAxJTJkWVwqKHJxLgorLlBQCitUaGUgTWljcm90ZXJtIFxzLTFBQ1QtSVZcczAgbmVlZHMgdGhlIGN1cnJlbnQgcm93IGFuZCBjb2x1bW4gc2VudAorcHJlY2VkZWQgYnkgYSBcZkJeVFxmUiwgd2l0aCB0aGUgcm93IGFuZCBjb2x1bW4gc2ltcGx5IGVuY29kZWQgaW4gYmluYXJ5LAorXCoobHFjdXA9XlQlcDElYyVwMiVjXCoocnEuCitUZXJtaW5hbHMgd2hpY2ggdXNlIFwqKGxxJWNcKihycSBuZWVkIHRvIGJlIGFibGUgdG8KK2JhY2tzcGFjZSB0aGUgY3Vyc29yIChcZkJjdWIxXGZSKSwKK2FuZCB0byBtb3ZlIHRoZSBjdXJzb3IgdXAgb25lIGxpbmUgb24gdGhlIHNjcmVlbiAoXGZCY3V1MVxmUikuCitUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGl0IGlzIG5vdCBhbHdheXMgc2FmZSB0byB0cmFuc21pdCBcZkJcZW5cZlIKK1xmQl5EXGZSIGFuZCBcZkJcZXJcZlIsIGFzIHRoZSBzeXN0ZW0gbWF5IGNoYW5nZSBvciBkaXNjYXJkIHRoZW0uCisoVGhlIGxpYnJhcnkgcm91dGluZXMgZGVhbGluZyB3aXRoIHRlcm1pbmZvIHNldCB0dHkgbW9kZXMgc28gdGhhdAordGFicyBhcmUgbmV2ZXIgZXhwYW5kZWQsIHNvIFxldCBpcyBzYWZlIHRvIHNlbmQuCitUaGlzIHR1cm5zIG91dCB0byBiZSBlc3NlbnRpYWwgZm9yIHRoZSBBbm4gQXJib3IgNDA4MC4pCisuUFAKK0EgZmluYWwgZXhhbXBsZSBpcyB0aGUgXHMtMUxTSSBBRE1cczAtM2EsIHdoaWNoIHVzZXMgcm93IGFuZCBjb2x1bW4KK29mZnNldCBieSBhIGJsYW5rIGNoYXJhY3RlciwgdGh1cyBcKihscWN1cD1cZUU9JXAxJScgJyUrJWMlcDIlJyAnJSslY1wqKHJxLgorQWZ0ZXIgc2VuZGluZyBgXGVFPScsIHRoaXMgcHVzaGVzIHRoZSBmaXJzdCBwYXJhbWV0ZXIsIHB1c2hlcyB0aGUKK0FTQ0lJIHZhbHVlIGZvciBhIHNwYWNlICgzMiksIGFkZHMgdGhlbSAocHVzaGluZyB0aGUgc3VtIG9uIHRoZSBzdGFjaworaW4gcGxhY2Ugb2YgdGhlIHR3byBwcmV2aW91cyB2YWx1ZXMpIGFuZCBvdXRwdXRzIHRoYXQgdmFsdWUgYXMgYSBjaGFyYWN0ZXIuCitUaGVuIHRoZSBzYW1lIGlzIGRvbmUgZm9yIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorTW9yZSBjb21wbGV4IGFyaXRobWV0aWMgaXMgcG9zc2libGUgdXNpbmcgdGhlIHN0YWNrLgorLlBQCisuU1MgQ3Vyc29yIE1vdGlvbnMKKy5QUAorSWYgdGhlIHRlcm1pbmFsIGhhcyBhIGZhc3Qgd2F5IHRvIGhvbWUgdGhlIGN1cnNvcgorKHRvIHZlcnkgdXBwZXIgbGVmdCBjb3JuZXIgb2Ygc2NyZWVuKSB0aGVuIHRoaXMgY2FuIGJlIGdpdmVuIGFzCitcZkJob21lXGZSOyBzaW1pbGFybHkgYSBmYXN0IHdheSBvZiBnZXR0aW5nIHRvIHRoZSBsb3dlciBsZWZ0LWhhbmQgY29ybmVyCitjYW4gYmUgZ2l2ZW4gYXMgXGZCbGxcZlI7IHRoaXMgbWF5IGludm9sdmUgZ29pbmcgdXAgd2l0aCBcZkJjdXUxXGZSCitmcm9tIHRoZSBob21lIHBvc2l0aW9uLAorYnV0IGEgcHJvZ3JhbSBzaG91bGQgbmV2ZXIgZG8gdGhpcyBpdHNlbGYgKHVubGVzcyBcZkJsbFxmUiBkb2VzKSBiZWNhdXNlIGl0CitjYW4gbWFrZSBubyBhc3N1bXB0aW9uIGFib3V0IHRoZSBlZmZlY3Qgb2YgbW92aW5nIHVwIGZyb20gdGhlIGhvbWUgcG9zaXRpb24uCitOb3RlIHRoYXQgdGhlIGhvbWUgcG9zaXRpb24gaXMgdGhlIHNhbWUgYXMgYWRkcmVzc2luZyB0byAoMCwwKToKK3RvIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiwgbm90IG9mIG1lbW9yeS4KKyhUaHVzLCB0aGUgXGVFSCBzZXF1ZW5jZSBvbiBIUCB0ZXJtaW5hbHMgY2Fubm90IGJlIHVzZWQgZm9yCisuQlIgaG9tZSAuKQorLlBQCitJZiB0aGUgdGVybWluYWwgaGFzIHJvdyBvciBjb2x1bW4gYWJzb2x1dGUgY3Vyc29yIGFkZHJlc3NpbmcsCit0aGVzZSBjYW4gYmUgZ2l2ZW4gYXMgc2luZ2xlIHBhcmFtZXRlciBjYXBhYmlsaXRpZXMKKy5CIGhwYQorKGhvcml6b250YWwgcG9zaXRpb24gYWJzb2x1dGUpCithbmQKKy5CIHZwYQorKHZlcnRpY2FsIHBvc2l0aW9uIGFic29sdXRlKS4KK1NvbWV0aW1lcyB0aGVzZSBhcmUgc2hvcnRlciB0aGFuIHRoZSBtb3JlIGdlbmVyYWwgdHdvIHBhcmFtZXRlcgorc2VxdWVuY2UgKGFzIHdpdGggdGhlIGhwMjY0NSkgYW5kIGNhbiBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8KKy5CUiBjdXAgLgorSWYgdGhlcmUgYXJlIHBhcmFtZXRlcml6ZWQgbG9jYWwgbW90aW9ucyAoZS5nLiwgbW92ZQorLkkgbgorc3BhY2VzIHRvIHRoZSByaWdodCkgdGhlc2UgY2FuIGJlIGdpdmVuIGFzCisuQlIgY3VkICwKKy5CUiBjdWIgLAorLkJSIGN1ZiAsCithbmQKKy5CUiBjdXUKK3dpdGggYSBzaW5nbGUgcGFyYW1ldGVyIGluZGljYXRpbmcgaG93IG1hbnkgc3BhY2VzIHRvIG1vdmUuCitUaGVzZSBhcmUgcHJpbWFyaWx5IHVzZWZ1bCBpZiB0aGUgdGVybWluYWwgZG9lcyBub3QgaGF2ZQorLkJSIGN1cCAsCitzdWNoIGFzIHRoZSBccy0xVEVLVFJPTklYXHMrMSA0MDI1LgorLlBQCitJZiB0aGUgdGVybWluYWwgbmVlZHMgdG8gYmUgaW4gYSBzcGVjaWFsIG1vZGUgd2hlbiBydW5uaW5nCithIHByb2dyYW0gdGhhdCB1c2VzIHRoZXNlIGNhcGFiaWxpdGllcywKK3RoZSBjb2RlcyB0byBlbnRlciBhbmQgZXhpdCB0aGlzIG1vZGUgY2FuIGJlIGdpdmVuIGFzIFxmQnNtY3VwXGZSIGFuZCBcZkJybWN1cFxmUi4KK1RoaXMgYXJpc2VzLCBmb3IgZXhhbXBsZSwgZnJvbSB0ZXJtaW5hbHMgbGlrZSB0aGUgQ29uY2VwdCB3aXRoIG1vcmUgdGhhbgorb25lIHBhZ2Ugb2YgbWVtb3J5LgorSWYgdGhlIHRlcm1pbmFsIGhhcyBvbmx5IG1lbW9yeSByZWxhdGl2ZSBjdXJzb3IgYWRkcmVzc2luZyBhbmQgbm90IHNjcmVlbgorcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcsIGEgb25lIHNjcmVlbi1zaXplZCB3aW5kb3cgbXVzdCBiZSBmaXhlZCBpbnRvCit0aGUgdGVybWluYWwgZm9yIGN1cnNvciBhZGRyZXNzaW5nIHRvIHdvcmsgcHJvcGVybHkuCitUaGlzIGlzIGFsc28gdXNlZCBmb3IgdGhlIFxzLTFURUtUUk9OSVhccysxIDQwMjUsCit3aGVyZQorLkIgc21jdXAKK3NldHMgdGhlIGNvbW1hbmQgY2hhcmFjdGVyIHRvIGJlIHRoZSBvbmUgdXNlZCBieSB0ZXJtaW5mby4KK0lmIHRoZSBcZkJzbWN1cFxmUCBzZXF1ZW5jZSB3aWxsIG5vdCByZXN0b3JlIHRoZSBzY3JlZW4gYWZ0ZXIgYW4KK1xmQnJtY3VwXGZQIHNlcXVlbmNlIGlzIG91dHB1dCAodG8gdGhlIHN0YXRlIHByaW9yIHRvIG91dHB1dHRpbmcKK1xmQnJtY3VwXGZQKSwgc3BlY2lmeSBcZkJucnJtY1xmUC4KKy5QUAorLlNTIEFyZWEgQ2xlYXJzCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBjYW4gY2xlYXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZQorbGluZSwgbGVhdmluZyB0aGUgY3Vyc29yIHdoZXJlIGl0IGlzLCB0aGlzIHNob3VsZCBiZSBnaXZlbiBhcyBcZkJlbFxmUi4KK0lmIHRoZSB0ZXJtaW5hbCBjYW4gY2xlYXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIHRvIHRoZSBjdXJyZW50Citwb3NpdGlvbiBpbmNsdXNpdmUsIGxlYXZpbmcKK3RoZSBjdXJzb3Igd2hlcmUgaXQgaXMsIHRoaXMgc2hvdWxkIGJlIGdpdmVuIGFzIFxmQmVsMVxmUC4KK0lmIHRoZSB0ZXJtaW5hbCBjYW4gY2xlYXIgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZQorZGlzcGxheSwgdGhlbiB0aGlzIHNob3VsZCBiZSBnaXZlbiBhcyBcZkJlZFxmUi4KK1xmQkVkXGZSIGlzIG9ubHkgZGVmaW5lZCBmcm9tIHRoZSBmaXJzdCBjb2x1bW4gb2YgYSBsaW5lLgorKFRodXMsIGl0IGNhbiBiZSBzaW11bGF0ZWQgYnkgYSByZXF1ZXN0IHRvIGRlbGV0ZSBhIGxhcmdlIG51bWJlciBvZiBsaW5lcywKK2lmIGEgdHJ1ZQorLkIgZWQKK2lzIG5vdCBhdmFpbGFibGUuKQorLlBQCisuU1MgSW5zZXJ0L2RlbGV0ZSBsaW5lIGFuZCB2ZXJ0aWNhbCBtb3Rpb25zCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBjYW4gb3BlbiBhIG5ldyBibGFuayBsaW5lIGJlZm9yZSB0aGUgbGluZSB3aGVyZSB0aGUgY3Vyc29yCitpcywgdGhpcyBzaG91bGQgYmUgZ2l2ZW4gYXMgXGZCaWwxXGZSOyB0aGlzIGlzIGRvbmUgb25seSBmcm9tIHRoZSBmaXJzdAorcG9zaXRpb24gb2YgYSBsaW5lLgorVGhlIGN1cnNvciBtdXN0IHRoZW4gYXBwZWFyIG9uIHRoZSBuZXdseSBibGFuayBsaW5lLgorSWYgdGhlIHRlcm1pbmFsIGNhbiBkZWxldGUgdGhlIGxpbmUgd2hpY2ggdGhlIGN1cnNvciBpcyBvbiwgdGhlbiB0aGlzCitzaG91bGQgYmUgZ2l2ZW4gYXMgXGZCZGwxXGZSOyB0aGlzIGlzIGRvbmUgb25seSBmcm9tIHRoZSBmaXJzdCBwb3NpdGlvbiBvbgordGhlIGxpbmUgdG8gYmUgZGVsZXRlZC4KK1ZlcnNpb25zIG9mCisuQiBpbDEKK2FuZAorLkIgZGwxCit3aGljaCB0YWtlIGEgc2luZ2xlIHBhcmFtZXRlciBhbmQgaW5zZXJ0IG9yIGRlbGV0ZSB0aGF0IG1hbnkgbGluZXMgY2FuCitiZSBnaXZlbiBhcworLkIgaWwKK2FuZAorLkJSIGRsIC4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIGhhcyBhIHNldHRhYmxlIHNjcm9sbGluZyByZWdpb24gKGxpa2UgdGhlIHZ0MTAwKQordGhlIGNvbW1hbmQgdG8gc2V0IHRoaXMgY2FuIGJlIGRlc2NyaWJlZCB3aXRoIHRoZQorLkIgY3NyCitjYXBhYmlsaXR5LCB3aGljaCB0YWtlcyB0d28gcGFyYW1ldGVyczoKK3RoZSB0b3AgYW5kIGJvdHRvbSBsaW5lcyBvZiB0aGUgc2Nyb2xsaW5nIHJlZ2lvbi4KK1RoZSBjdXJzb3IgcG9zaXRpb24gaXMsIGFsYXMsIHVuZGVmaW5lZCBhZnRlciB1c2luZyB0aGlzIGNvbW1hbmQuCisuUFAKK0l0IGlzIHBvc3NpYmxlIHRvIGdldCB0aGUgZWZmZWN0IG9mIGluc2VydCBvciBkZWxldGUgbGluZSB1c2luZworLkIgY3NyCitvbiBhIHByb3Blcmx5IGNob3NlbiByZWdpb247IHRoZQorLkIgc2MKK2FuZAorLkIgcmMKKyhzYXZlIGFuZCByZXN0b3JlIGN1cnNvcikgY29tbWFuZHMgbWF5IGJlIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdAoreW91ciBzeW50aGVzaXplZCBpbnNlcnQvZGVsZXRlIHN0cmluZyBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IuCisoTm90ZSB0aGF0IHRoZSBcZkJuY3Vyc2VzXGZSKDNYKSBsaWJyYXJ5IGRvZXMgdGhpcyBzeW50aGVzaXMKK2F1dG9tYXRpY2FsbHksIHNvIHlvdSBuZWVkIG5vdCBjb21wb3NlIGluc2VydC9kZWxldGUgc3RyaW5ncyBmb3IKK2FuIGVudHJ5IHdpdGggXGZCY3NyXGZSKS4KKy5QUAorWWV0IGFub3RoZXIgd2F5IHRvIGNvbnN0cnVjdCBpbnNlcnQgYW5kIGRlbGV0ZSBtaWdodCBiZSB0byB1c2UgYSBjb21iaW5hdGlvbiBvZgoraW5kZXggd2l0aCB0aGUgbWVtb3J5LWxvY2sgZmVhdHVyZSBmb3VuZCBvbiBzb21lIHRlcm1pbmFscyAobGlrZSB0aGUgSFAtNzAwLzkwCitzZXJpZXMsIHdoaWNoIGhvd2V2ZXIgYWxzbyBoYXMgaW5zZXJ0L2RlbGV0ZSkuCisuUFAKK0luc2VydGluZyBsaW5lcyBhdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgc2NyZWVuIGNhbiBhbHNvIGJlCitkb25lIHVzaW5nCisuQiByaQorb3IKKy5CIGluZAorb24gbWFueSB0ZXJtaW5hbHMgd2l0aG91dCBhIHRydWUgaW5zZXJ0L2RlbGV0ZSBsaW5lLAorYW5kIGlzIG9mdGVuIGZhc3RlciBldmVuIG9uIHRlcm1pbmFscyB3aXRoIHRob3NlIGZlYXR1cmVzLgorLlBQCitUaGUgYm9vbGVhbiBcZkJub25fZGVzdF9zY3JvbGxfcmVnaW9uXGZSIHNob3VsZCBiZSBzZXQgaWYgZWFjaCBzY3JvbGxpbmcKK3dpbmRvdyBpcyBlZmZlY3RpdmVseSBhIHZpZXcgcG9ydCBvbiBhIHNjcmVlbi1zaXplZCBjYW52YXMuCitUbyB0ZXN0IGZvcgordGhpcyBjYXBhYmlsaXR5LCBjcmVhdGUgYSBzY3JvbGxpbmcgcmVnaW9uIGluIHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiwKK3dyaXRlIHNvbWV0aGluZyB0byB0aGUgYm90dG9tIGxpbmUsIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgdG9wIG9mIHRoZSByZWdpb24sCithbmQgZG8gXGZCcmlcZlIgZm9sbG93ZWQgYnkgXGZCZGwxXGZSIG9yIFxmQmluZFxmUi4KK0lmIHRoZSBkYXRhIHNjcm9sbGVkCitvZmYgdGhlIGJvdHRvbSBvZiB0aGUgcmVnaW9uIGJ5IHRoZSBcZkJyaVxmUiByZS1hcHBlYXJzLCB0aGVuIHNjcm9sbGluZworaXMgbm9uLWRlc3RydWN0aXZlLgorU3lzdGVtIFYgYW5kIFhTSSBDdXJzZXMgZXhwZWN0IHRoYXQgXGZCaW5kXGZSLCBcZkJyaVxmUiwKK1xmQmluZG5cZlIsIGFuZCBcZkJyaW5cZlIgd2lsbCBzaW11bGF0ZSBkZXN0cnVjdGl2ZSBzY3JvbGxpbmc7IHRoZWlyCitkb2N1bWVudGF0aW9uIGNhdXRpb25zIHlvdSBub3QgdG8gZGVmaW5lIFxmQmNzclxmUiB1bmxlc3MgdGhpcyBpcyB0cnVlLgorVGhpcyBcZkJjdXJzZXNcZlIgaW1wbGVtZW50YXRpb24gaXMgbW9yZSBsaWJlcmFsIGFuZCB3aWxsIGRvIGV4cGxpY2l0IGVyYXNlcworYWZ0ZXIgc2Nyb2xsaW5nIGlmIFxmQm5kc3RyXGZSIGlzIGRlZmluZWQuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBoYXMgdGhlIGFiaWxpdHkgdG8gZGVmaW5lIGEgd2luZG93IGFzIHBhcnQgb2YKK21lbW9yeSwgd2hpY2ggYWxsIGNvbW1hbmRzIGFmZmVjdCwKK2l0IHNob3VsZCBiZSBnaXZlbiBhcyB0aGUgcGFyYW1ldGVyaXplZCBzdHJpbmcKKy5CUiB3aW5kIC4KK1RoZSBmb3VyIHBhcmFtZXRlcnMgYXJlIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGxpbmVzIGluIG1lbW9yeQorYW5kIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGNvbHVtbnMgaW4gbWVtb3J5LCBpbiB0aGF0IG9yZGVyLgorLlBQCitJZiB0aGUgdGVybWluYWwgY2FuIHJldGFpbiBkaXNwbGF5IG1lbW9yeSBhYm92ZSwgdGhlbiB0aGUKK1xmQmRhXGZSIGNhcGFiaWxpdHkgc2hvdWxkIGJlIGdpdmVuOyBpZiBkaXNwbGF5IG1lbW9yeSBjYW4gYmUgcmV0YWluZWQKK2JlbG93LCB0aGVuIFxmQmRiXGZSIHNob3VsZCBiZSBnaXZlbi4KK1RoZXNlIGluZGljYXRlCit0aGF0IGRlbGV0aW5nIGEgbGluZSBvciBzY3JvbGxpbmcgbWF5IGJyaW5nIG5vbi1ibGFuayBsaW5lcyB1cCBmcm9tIGJlbG93CitvciB0aGF0IHNjcm9sbGluZyBiYWNrIHdpdGggXGZCcmlcZlIgbWF5IGJyaW5nIGRvd24gbm9uLWJsYW5rIGxpbmVzLgorLlBQCisuU1MgSW5zZXJ0L0RlbGV0ZSBDaGFyYWN0ZXIKKy5QUAorVGhlcmUgYXJlIHR3byBiYXNpYyBraW5kcyBvZiBpbnRlbGxpZ2VudCB0ZXJtaW5hbHMgd2l0aCByZXNwZWN0IHRvCitpbnNlcnQvZGVsZXRlIGNoYXJhY3RlciB3aGljaCBjYW4gYmUgZGVzY3JpYmVkIHVzaW5nCisuSSB0ZXJtaW5mby4KK1RoZSBtb3N0IGNvbW1vbiBpbnNlcnQvZGVsZXRlIGNoYXJhY3RlciBvcGVyYXRpb25zIGFmZmVjdCBvbmx5IHRoZSBjaGFyYWN0ZXJzCitvbiB0aGUgY3VycmVudCBsaW5lIGFuZCBzaGlmdCBjaGFyYWN0ZXJzIG9mZiB0aGUgZW5kIG9mIHRoZSBsaW5lIHJpZ2lkbHkuCitPdGhlciB0ZXJtaW5hbHMsIHN1Y2ggYXMgdGhlIENvbmNlcHQgMTAwIGFuZCB0aGUgUGVya2luIEVsbWVyIE93bCwgbWFrZQorYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHR5cGVkIGFuZCB1bnR5cGVkIGJsYW5rcyBvbiB0aGUgc2NyZWVuLCBzaGlmdGluZwordXBvbiBhbiBpbnNlcnQgb3IgZGVsZXRlIG9ubHkgdG8gYW4gdW50eXBlZCBibGFuayBvbiB0aGUgc2NyZWVuIHdoaWNoIGlzCitlaXRoZXIgZWxpbWluYXRlZCwgb3IgZXhwYW5kZWQgdG8gdHdvIHVudHlwZWQgYmxhbmtzLgorWW91IGNhbiBkZXRlcm1pbmUgdGhlCitraW5kIG9mIHRlcm1pbmFsIHlvdSBoYXZlIGJ5IGNsZWFyaW5nIHRoZSBzY3JlZW4gYW5kIHRoZW4gdHlwaW5nCit0ZXh0IHNlcGFyYXRlZCBieSBjdXJzb3IgbW90aW9ucy4KK1R5cGUgXCoobHFhYmNcIFwgXCBcIGRlZlwqKHJxIHVzaW5nIGxvY2FsCitjdXJzb3IgbW90aW9ucyAobm90IHNwYWNlcykgYmV0d2VlbiB0aGUgXCoobHFhYmNcKihycSBhbmQgdGhlIFwqKGxxZGVmXCoocnEuCitUaGVuIHBvc2l0aW9uIHRoZSBjdXJzb3IgYmVmb3JlIHRoZSBcKihscWFiY1wqKHJxIGFuZCBwdXQgdGhlIHRlcm1pbmFsIGluIGluc2VydAorbW9kZS4KK0lmIHR5cGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgcmVzdCBvZiB0aGUgbGluZSB0byBzaGlmdAorcmlnaWRseSBhbmQgY2hhcmFjdGVycyB0byBmYWxsIG9mZiB0aGUgZW5kLCB0aGVuIHlvdXIgdGVybWluYWwgZG9lcworbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gYmxhbmtzIGFuZCB1bnR5cGVkIHBvc2l0aW9ucy4KK0lmIHRoZSBcKihscWFiY1wqKHJxCitzaGlmdHMgb3ZlciB0byB0aGUgXCoobHFkZWZcKihycSB3aGljaCB0aGVuIG1vdmUgdG9nZXRoZXIgYXJvdW5kIHRoZSBlbmQgb2YgdGhlCitjdXJyZW50IGxpbmUgYW5kIG9udG8gdGhlIG5leHQgYXMgeW91IGluc2VydCwgeW91IGhhdmUgdGhlIHNlY29uZCB0eXBlIG9mCit0ZXJtaW5hbCwgYW5kIHNob3VsZCBnaXZlIHRoZSBjYXBhYmlsaXR5IFxmQmluXGZSLCB3aGljaCBzdGFuZHMgZm9yCitcKihscWluc2VydCBudWxsXCoocnEuCitXaGlsZSB0aGVzZSBhcmUgdHdvIGxvZ2ljYWxseSBzZXBhcmF0ZSBhdHRyaWJ1dGVzIChvbmUgbGluZSB2ZXJzdXMgbXVsdGktbGluZQoraW5zZXJ0IG1vZGUsIGFuZCBzcGVjaWFsIHRyZWF0bWVudCBvZiB1bnR5cGVkIHNwYWNlcykgd2UgaGF2ZSBzZWVuIG5vCit0ZXJtaW5hbHMgd2hvc2UgaW5zZXJ0IG1vZGUgY2Fubm90IGJlIGRlc2NyaWJlZCB3aXRoIHRoZSBzaW5nbGUgYXR0cmlidXRlLgorLlBQCitUZXJtaW5mbyBjYW4gZGVzY3JpYmUgYm90aCB0ZXJtaW5hbHMgd2hpY2ggaGF2ZSBhbiBpbnNlcnQgbW9kZSwgYW5kIHRlcm1pbmFscword2hpY2ggc2VuZCBhIHNpbXBsZSBzZXF1ZW5jZSB0byBvcGVuIGEgYmxhbmsgcG9zaXRpb24gb24gdGhlIGN1cnJlbnQgbGluZS4KK0dpdmUgYXMgXGZCc21pclxmUiB0aGUgc2VxdWVuY2UgdG8gZ2V0IGludG8gaW5zZXJ0IG1vZGUuCitHaXZlIGFzIFxmQnJtaXJcZlIgdGhlIHNlcXVlbmNlIHRvIGxlYXZlIGluc2VydCBtb2RlLgorTm93IGdpdmUgYXMgXGZCaWNoMVxmUiBhbnkgc2VxdWVuY2UgbmVlZGVkIHRvIGJlIHNlbnQganVzdCBiZWZvcmUgc2VuZGluZwordGhlIGNoYXJhY3RlciB0byBiZSBpbnNlcnRlZC4KK01vc3QgdGVybWluYWxzIHdpdGggYSB0cnVlIGluc2VydCBtb2RlCit3aWxsIG5vdCBnaXZlIFxmQmljaDFcZlI7IHRlcm1pbmFscyB3aGljaCBzZW5kIGEgc2VxdWVuY2UgdG8gb3BlbiBhIHNjcmVlbgorcG9zaXRpb24gc2hvdWxkIGdpdmUgaXQgaGVyZS4KKy5QUAorSWYgeW91ciB0ZXJtaW5hbCBoYXMgYm90aCwgaW5zZXJ0IG1vZGUgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIFxmQmljaDFcZlIuCitUZWNobmljYWxseSwgeW91IHNob3VsZCBub3QgZ2l2ZSBib3RoIHVubGVzcyB0aGUgdGVybWluYWwgYWN0dWFsbHkgcmVxdWlyZXMKK2JvdGggdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbi4KK0FjY29yZGluZ2x5LCBzb21lIG5vbi1jdXJzZXMgYXBwbGljYXRpb25zIGdldAorY29uZnVzZWQgaWYgYm90aCBhcmUgcHJlc2VudDsgdGhlIHN5bXB0b20gaXMgZG91YmxlZCBjaGFyYWN0ZXJzIGluIGFuIHVwZGF0ZQordXNpbmcgaW5zZXJ0LgorVGhpcyByZXF1aXJlbWVudCBpcyBub3cgcmFyZTsgbW9zdCBcZkJpY2hcZlIgc2VxdWVuY2VzIGRvIG5vdAorcmVxdWlyZSBwcmV2aW91cyBzbWlyLCBhbmQgbW9zdCBzbWlyIGluc2VydCBtb2RlcyBkbyBub3QgcmVxdWlyZSBcZkJpY2gxXGZSCitiZWZvcmUgZWFjaCBjaGFyYWN0ZXIuCitUaGVyZWZvcmUsIHRoZSBuZXcgXGZCY3Vyc2VzXGZSIGFjdHVhbGx5IGFzc3VtZXMgdGhpcworaXMgdGhlIGNhc2UgYW5kIHVzZXMgZWl0aGVyIFxmQnJtaXJcZlIvXGZCc21pclxmUiBvciBcZkJpY2hcZlIvXGZCaWNoMVxmUiBhcworYXBwcm9wcmlhdGUgKGJ1dCBub3QgYm90aCkuCitJZiB5b3UgaGF2ZSB0byB3cml0ZSBhbiBlbnRyeSB0byBiZSB1c2VkIHVuZGVyCituZXcgY3Vyc2VzIGZvciBhIHRlcm1pbmFsIG9sZCBlbm91Z2ggdG8gbmVlZCBib3RoLCBpbmNsdWRlIHRoZQorXGZCcm1pclxmUi9cZkJzbWlyXGZSIHNlcXVlbmNlcyBpbiBcZkJpY2gxXGZSLgorLlBQCitJZiBwb3N0IGluc2VydCBwYWRkaW5nIGlzIG5lZWRlZCwgZ2l2ZSB0aGlzIGFzIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcworaW4gXGZCaXBcZlIgKGEgc3RyaW5nIG9wdGlvbikuCitBbnkgb3RoZXIgc2VxdWVuY2Ugd2hpY2ggbWF5IG5lZWQgdG8gYmUKK3NlbnQgYWZ0ZXIgYW4gaW5zZXJ0IG9mIGEgc2luZ2xlIGNoYXJhY3RlciBtYXkgYWxzbyBiZSBnaXZlbiBpbiBcZkJpcFxmUi4KK0lmIHlvdXIgdGVybWluYWwgbmVlZHMgYm90aCB0byBiZSBwbGFjZWQgaW50byBhbiBgaW5zZXJ0IG1vZGUnIGFuZAorYSBzcGVjaWFsIGNvZGUgdG8gcHJlY2VkZSBlYWNoIGluc2VydGVkIGNoYXJhY3RlciwgdGhlbiBib3RoCisuQlIgc21pciAvIHJtaXIKK2FuZAorLkIgaWNoMQorY2FuIGJlIGdpdmVuLCBhbmQgYm90aCB3aWxsIGJlIHVzZWQuCitUaGUKKy5CIGljaAorY2FwYWJpbGl0eSwgd2l0aCBvbmUgcGFyYW1ldGVyLAorLklSIG4gLAord2lsbCByZXBlYXQgdGhlIGVmZmVjdHMgb2YKKy5CIGljaDEKKy5JIG4KK3RpbWVzLgorLlBQCitJZiBwYWRkaW5nIGlzIG5lY2Vzc2FyeSBiZXR3ZWVuIGNoYXJhY3RlcnMgdHlwZWQgd2hpbGUgbm90CitpbiBpbnNlcnQgbW9kZSwgZ2l2ZSB0aGlzIGFzIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBwYWRkaW5nIGluIFxmQnJtcFxmUC4KKy5QUAorSXQgaXMgb2NjYXNpb25hbGx5IG5lY2Vzc2FyeSB0byBtb3ZlIGFyb3VuZCB3aGlsZSBpbiBpbnNlcnQgbW9kZQordG8gZGVsZXRlIGNoYXJhY3RlcnMgb24gdGhlIHNhbWUgbGluZSAoZS5nLiwgaWYgdGhlcmUgaXMgYSB0YWIgYWZ0ZXIKK3RoZSBpbnNlcnRpb24gcG9zaXRpb24pLgorSWYgeW91ciB0ZXJtaW5hbCBhbGxvd3MgbW90aW9uIHdoaWxlIGluCitpbnNlcnQgbW9kZSB5b3UgY2FuIGdpdmUgdGhlIGNhcGFiaWxpdHkgXGZCbWlyXGZSIHRvIHNwZWVkIHVwIGluc2VydGluZworaW4gdGhpcyBjYXNlLgorT21pdHRpbmcgXGZCbWlyXGZSIHdpbGwgYWZmZWN0IG9ubHkgc3BlZWQuCitTb21lIHRlcm1pbmFscworKG5vdGFibHkgRGF0YW1lZGlhJ3MpIG11c3Qgbm90IGhhdmUgXGZCbWlyXGZSIGJlY2F1c2Ugb2YgdGhlIHdheSB0aGVpcgoraW5zZXJ0IG1vZGUgd29ya3MuCisuUFAKK0ZpbmFsbHksIHlvdSBjYW4gc3BlY2lmeQorLkIgZGNoMQordG8gZGVsZXRlIGEgc2luZ2xlIGNoYXJhY3RlciwKKy5CIGRjaAord2l0aCBvbmUgcGFyYW1ldGVyLAorLklSIG4gLAordG8gZGVsZXRlCisuSSBuIGNoYXJhY3RlcnMsCithbmQgZGVsZXRlIG1vZGUgYnkgZ2l2aW5nIFxmQnNtZGNcZlIgYW5kIFxmQnJtZGNcZlIKK3RvIGVudGVyIGFuZCBleGl0IGRlbGV0ZSBtb2RlIChhbnkgbW9kZSB0aGUgdGVybWluYWwgbmVlZHMgdG8gYmUgcGxhY2VkCitpbiBmb3IKKy5CIGRjaDEKK3RvIHdvcmspLgorLlBQCitBIGNvbW1hbmQgdG8gZXJhc2UKKy5JIG4KK2NoYXJhY3RlcnMgKGVxdWl2YWxlbnQgdG8gb3V0cHV0dGluZworLkkgbgorYmxhbmtzIHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3IpCitjYW4gYmUgZ2l2ZW4gYXMKKy5CIGVjaAord2l0aCBvbmUgcGFyYW1ldGVyLgorLlBQCisuU1MgIkhpZ2hsaWdodGluZywgVW5kZXJsaW5pbmcsIGFuZCBWaXNpYmxlIEJlbGxzIgorLlBQCitJZiB5b3VyIHRlcm1pbmFsIGhhcyBvbmUgb3IgbW9yZSBraW5kcyBvZiBkaXNwbGF5IGF0dHJpYnV0ZXMsCit0aGVzZSBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMuCitZb3Ugc2hvdWxkIGNob29zZSBvbmUgZGlzcGxheSBmb3JtIGFzCitcZjJzdGFuZG91dCBtb2RlXGZSLAorcmVwcmVzZW50aW5nIGEgZ29vZCwgaGlnaCBjb250cmFzdCwgZWFzeS1vbi10aGUtZXllcywKK2Zvcm1hdCBmb3IgaGlnaGxpZ2h0aW5nIGVycm9yIG1lc3NhZ2VzIGFuZCBvdGhlciBhdHRlbnRpb24gZ2V0dGVycy4KKyhJZiB5b3UgaGF2ZSBhIGNob2ljZSwgcmV2ZXJzZSB2aWRlbyBwbHVzIGhhbGYtYnJpZ2h0IGlzIGdvb2QsCitvciByZXZlcnNlIHZpZGVvIGFsb25lLikKK1RoZSBzZXF1ZW5jZXMgdG8gZW50ZXIgYW5kIGV4aXQgc3RhbmRvdXQgbW9kZQorYXJlIGdpdmVuIGFzIFxmQnNtc29cZlIgYW5kIFxmQnJtc29cZlIsIHJlc3BlY3RpdmVseS4KK0lmIHRoZSBjb2RlIHRvIGNoYW5nZSBpbnRvIG9yIG91dCBvZiBzdGFuZG91dAorbW9kZSBsZWF2ZXMgb25lIG9yIGV2ZW4gdHdvIGJsYW5rIHNwYWNlcyBvbiB0aGUgc2NyZWVuLAorYXMgdGhlIFRWSSA5MTIgYW5kIFRlbGVyYXkgMTA2MSBkbywKK3RoZW4gXGZCeG1jXGZSIHNob3VsZCBiZSBnaXZlbiB0byB0ZWxsIGhvdyBtYW55IHNwYWNlcyBhcmUgbGVmdC4KKy5QUAorQ29kZXMgdG8gYmVnaW4gdW5kZXJsaW5pbmcgYW5kIGVuZCB1bmRlcmxpbmluZyBjYW4gYmUgZ2l2ZW4gYXMgXGZCc211bFxmUgorYW5kIFxmQnJtdWxcZlIgcmVzcGVjdGl2ZWx5LgorSWYgdGhlIHRlcm1pbmFsIGhhcyBhIGNvZGUgdG8gdW5kZXJsaW5lIHRoZSBjdXJyZW50IGNoYXJhY3RlciBhbmQgbW92ZQordGhlIGN1cnNvciBvbmUgc3BhY2UgdG8gdGhlIHJpZ2h0LAorc3VjaCBhcyB0aGUgTWljcm90ZXJtIE1pbWUsCit0aGlzIGNhbiBiZSBnaXZlbiBhcyBcZkJ1Y1xmUi4KKy5QUAorT3RoZXIgY2FwYWJpbGl0aWVzIHRvIGVudGVyIHZhcmlvdXMgaGlnaGxpZ2h0aW5nIG1vZGVzIGluY2x1ZGUKKy5CIGJsaW5rCisoYmxpbmtpbmcpCisuQiBib2xkCisoYm9sZCBvciBleHRyYSBicmlnaHQpCisuQiBkaW0KKyhkaW0gb3IgaGFsZi1icmlnaHQpCisuQiBpbnZpcworKGJsYW5raW5nIG9yIGludmlzaWJsZSB0ZXh0KQorLkIgcHJvdAorKHByb3RlY3RlZCkKKy5CIHJldgorKHJldmVyc2UgdmlkZW8pCisuQiBzZ3IwCisodHVybiBvZmYKKy5JIGFsbAorYXR0cmlidXRlIG1vZGVzKQorLkIgc21hY3MKKyhlbnRlciBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBtb2RlKQorYW5kCisuQiBybWFjcworKGV4aXQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgbW9kZSkuCitUdXJuaW5nIG9uIGFueSBvZiB0aGVzZSBtb2RlcyBzaW5nbHkgbWF5IG9yIG1heSBub3QgdHVybiBvZmYgb3RoZXIgbW9kZXMuCisuUFAKK0lmIHRoZXJlIGlzIGEgc2VxdWVuY2UgdG8gc2V0IGFyYml0cmFyeSBjb21iaW5hdGlvbnMgb2YgbW9kZXMsCit0aGlzIHNob3VsZCBiZSBnaXZlbiBhcworLkIgc2dyCisoc2V0IGF0dHJpYnV0ZXMpLAordGFraW5nIDkgcGFyYW1ldGVycy4KK0VhY2ggcGFyYW1ldGVyIGlzIGVpdGhlciAwIG9yIG5vbnplcm8sIGFzIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBpcyBvbiBvciBvZmYuCitUaGUgOSBwYXJhbWV0ZXJzIGFyZSwgaW4gb3JkZXI6CitzdGFuZG91dCwgdW5kZXJsaW5lLCByZXZlcnNlLCBibGluaywgZGltLCBib2xkLCBibGFuaywgcHJvdGVjdCwgYWx0ZXJuYXRlCitjaGFyYWN0ZXIgc2V0LgorTm90IGFsbCBtb2RlcyBuZWVkIGJlIHN1cHBvcnRlZCBieQorLkJSIHNnciAsCitvbmx5IHRob3NlIGZvciB3aGljaCBjb3JyZXNwb25kaW5nIHNlcGFyYXRlIGF0dHJpYnV0ZSBjb21tYW5kcyBleGlzdC4KKy5QUAorRm9yIGV4YW1wbGUsIHRoZSBERUMgdnQyMjAgc3VwcG9ydHMgbW9zdCBvZiB0aGUgbW9kZXM6CisuUFAKKy5UUworY2VudGVyOworbCBjIGMKK2wgYyBjCitsdzI4IGx3NiBsdzIgbHcyMC4KK1xmQnRwYXJtIHBhcmFtZXRlcglhdHRyaWJ1dGUJZXNjYXBlIHNlcXVlbmNlXGZQCisKK25vbmUJbm9uZQlcXEVbMG0KK3AxCXN0YW5kb3V0CVxcRVswOzE7N20KK3AyCXVuZGVybGluZQlcXEVbMDs0bQorcDMJcmV2ZXJzZQlcXEVbMDs3bQorcDQJYmxpbmsJXFxFWzA7NW0KK3A1CWRpbQlub3QgYXZhaWxhYmxlCitwNglib2xkCVxcRVswOzFtCitwNwlpbnZpcwlcXEVbMDs4bQorcDgJcHJvdGVjdAlub3QgdXNlZAorcDkJYWx0Y2hhcnNldAleTyAob2ZmKSBeTiAob24pCisuVEUKKy5QUAorV2UgYmVnaW4gZWFjaCBlc2NhcGUgc2VxdWVuY2UgYnkgdHVybmluZyBvZmYgYW55IGV4aXN0aW5nIG1vZGVzLCBzaW5jZQordGhlcmUgaXMgbm8gcXVpY2sgd2F5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIGFjdGl2ZS4KK1N0YW5kb3V0IGlzIHNldCB1cCB0byBiZSB0aGUgY29tYmluYXRpb24gb2YgcmV2ZXJzZSBhbmQgYm9sZC4KK1RoZSB2dDIyMCB0ZXJtaW5hbCBoYXMgYSBwcm90ZWN0IG1vZGUsCit0aG91Z2ggaXQgaXMgbm90IGNvbW1vbmx5IHVzZWQgaW4gc2dyCitiZWNhdXNlIGl0IHByb3RlY3RzIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiBmcm9tIHRoZSBob3N0J3MgZXJhc3VyZXMuCitUaGUgYWx0Y2hhcnNldCBtb2RlIGFsc28gaXMgZGlmZmVyZW50IGluIHRoYXQgaXQgaXMgZWl0aGVyIF5PIG9yIF5OLAorZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgaXMgb2ZmIG9yIG9uLgorSWYgYWxsIG1vZGVzIGFyZSB0dXJuZWQgb24sIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UgaXMgXFxFWzA7MTs0OzU7Nzs4bV5OLgorLlBQCitTb21lIHNlcXVlbmNlcyBhcmUgY29tbW9uIHRvIGRpZmZlcmVudCBtb2Rlcy4KK0ZvciBleGFtcGxlLCA7NyBpcyBvdXRwdXQgd2hlbiBlaXRoZXIgcDEgb3IgcDMgaXMgdHJ1ZSwgdGhhdCBpcywgaWYKK2VpdGhlciBzdGFuZG91dCBvciByZXZlcnNlIG1vZGVzIGFyZSB0dXJuZWQgb24uCisuUFAKK1dyaXRpbmcgb3V0IHRoZSBhYm92ZSBzZXF1ZW5jZXMsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzIHlpZWxkcworLlBQCisuVFMKK2NlbnRlcjsKK2wgYyBjCitsIGMgYworbHcyOCBsdzYgbHcyIGx3MjAuCitcZkJzZXF1ZW5jZQl3aGVuIHRvIG91dHB1dAl0ZXJtaW5mbyB0cmFuc2xhdGlvblxmUAorCitcXEVbMAlhbHdheXMJXFxFWzAKKzsxCWlmIHAxIG9yIHA2CSU/JXAxJXA2JXwldDsxJTsKKzs0CWlmIHAyCSU/JXAyJXwldDs0JTsKKzs1CWlmIHA0CSU/JXA0JXwldDs1JTsKKzs3CWlmIHAxIG9yIHAzCSU/JXAxJXAzJXwldDs3JTsKKzs4CWlmIHA3CSU/JXA3JXwldDs4JTsKK20JYWx3YXlzCW0KK15OIG9yIF5PCWlmIHA5IF5OLCBlbHNlIF5PCSU/JXA5JXReTiVlXk8lOworLlRFCisuUFAKK1B1dHRpbmcgdGhpcyBhbGwgdG9nZXRoZXIgaW50byB0aGUgc2dyIHNlcXVlbmNlIGdpdmVzOgorLlBQCisubmYKKyAgICBzZ3I9XFxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7CisgICAgICAgICU/JXA0JXQ7NSU7JT8lcDcldDs4JTttJT8lcDkldFxcMDE2JWVcXDAxNyU7LAorLmZpCisuUFAKK1JlbWVtYmVyIHRoYXQgaWYgeW91IHNwZWNpZnkgc2dyLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgc2dyMC4KK0Fsc28sIHNvbWUgaW1wbGVtZW50YXRpb25zIHJlbHkgb24gc2dyIGJlaW5nIGdpdmVuIGlmIHNncjAgaXMsCitOb3QgYWxsIHRlcm1pbmZvIGVudHJpZXMgbmVjZXNzYXJpbHkgaGF2ZSBhbiBzZ3Igc3RyaW5nLCBob3dldmVyLgorTWFueSB0ZXJtaW5mbyBlbnRyaWVzIGFyZSBkZXJpdmVkIGZyb20gdGVybWNhcCBlbnRyaWVzCit3aGljaCBoYXZlIG5vIHNnciBzdHJpbmcuCitUaGUgb25seSBkcmF3YmFjayB0byBhZGRpbmcgYW4gc2dyIHN0cmluZyBpcyB0aGF0IHRlcm1jYXAgYWxzbworYXNzdW1lcyB0aGF0IHNncjAgZG9lcyBub3QgZXhpdCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBtb2RlLgorLlBQCitUZXJtaW5hbHMgd2l0aCB0aGUgYGBtYWdpYyBjb29raWUnJyBnbGl0Y2gKKy5SQiAoIHhtYyApCitkZXBvc2l0IHNwZWNpYWwgYGBjb29raWVzJycgd2hlbiB0aGV5IHJlY2VpdmUgbW9kZS1zZXR0aW5nIHNlcXVlbmNlcywKK3doaWNoIGFmZmVjdCB0aGUgZGlzcGxheSBhbGdvcml0aG0gcmF0aGVyIHRoYW4gaGF2aW5nIGV4dHJhIGJpdHMgZm9yCitlYWNoIGNoYXJhY3Rlci4KK1NvbWUgdGVybWluYWxzLCBzdWNoIGFzIHRoZSBIUCAyNjIxLCBhdXRvbWF0aWNhbGx5IGxlYXZlIHN0YW5kb3V0Cittb2RlIHdoZW4gdGhleSBtb3ZlIHRvIGEgbmV3IGxpbmUgb3IgdGhlIGN1cnNvciBpcyBhZGRyZXNzZWQuCitQcm9ncmFtcyB1c2luZyBzdGFuZG91dCBtb2RlIHNob3VsZCBleGl0IHN0YW5kb3V0IG1vZGUgYmVmb3JlCittb3ZpbmcgdGhlIGN1cnNvciBvciBzZW5kaW5nIGEgbmV3bGluZSwKK3VubGVzcyB0aGUKKy5CIG1zZ3IKK2NhcGFiaWxpdHksIGFzc2VydGluZyB0aGF0IGl0IGlzIHNhZmUgdG8gbW92ZSBpbiBzdGFuZG91dCBtb2RlLCBpcyBwcmVzZW50LgorLlBQCitJZiB0aGUgdGVybWluYWwgaGFzCithIHdheSBvZiBmbGFzaGluZyB0aGUgc2NyZWVuIHRvIGluZGljYXRlIGFuIGVycm9yIHF1aWV0bHkgKGEgYmVsbCByZXBsYWNlbWVudCkKK3RoZW4gdGhpcyBjYW4gYmUgZ2l2ZW4gYXMgXGZCZmxhc2hcZlI7IGl0IG11c3Qgbm90IG1vdmUgdGhlIGN1cnNvci4KKy5QUAorSWYgdGhlIGN1cnNvciBuZWVkcyB0byBiZSBtYWRlIG1vcmUgdmlzaWJsZSB0aGFuIG5vcm1hbCB3aGVuIGl0IGlzCitub3Qgb24gdGhlIGJvdHRvbSBsaW5lICh0byBtYWtlLCBmb3IgZXhhbXBsZSwgYSBub24tYmxpbmtpbmcgdW5kZXJsaW5lIGludG8gYW4KK2Vhc2llciB0byBmaW5kIGJsb2NrIG9yIGJsaW5raW5nIHVuZGVybGluZSkKK2dpdmUgdGhpcyBzZXF1ZW5jZSBhcworLkJSIGN2dmlzIC4KK0lmIHRoZXJlIGlzIGEgd2F5IHRvIG1ha2UgdGhlIGN1cnNvciBjb21wbGV0ZWx5IGludmlzaWJsZSwgZ2l2ZSB0aGF0IGFzCisuQlIgY2l2aXMgLgorVGhlIGNhcGFiaWxpdHkKKy5CUiBjbm9ybQorc2hvdWxkIGJlIGdpdmVuIHdoaWNoIHVuZG9lcyB0aGUgZWZmZWN0cyBvZiBib3RoIG9mIHRoZXNlIG1vZGVzLgorLlBQCitJZiB5b3VyIHRlcm1pbmFsIGNvcnJlY3RseSBnZW5lcmF0ZXMgdW5kZXJsaW5lZCBjaGFyYWN0ZXJzCisod2l0aCBubyBzcGVjaWFsIGNvZGVzIG5lZWRlZCkKK2V2ZW4gdGhvdWdoIGl0IGRvZXMgbm90IG92ZXJzdHJpa2UsCit0aGVuIHlvdSBzaG91bGQgZ2l2ZSB0aGUgY2FwYWJpbGl0eSBcZkJ1bFxmUi4KK0lmIGEgY2hhcmFjdGVyIG92ZXJzdHJpa2luZyBhbm90aGVyIGxlYXZlcyBib3RoIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiwKK3NwZWNpZnkgdGhlIGNhcGFiaWxpdHkgXGZCb3NcZlAuCitJZiBvdmVyc3RyaWtlcyBhcmUgZXJhc2FibGUgd2l0aCBhIGJsYW5rLAordGhlbiB0aGlzIHNob3VsZCBiZSBpbmRpY2F0ZWQgYnkgZ2l2aW5nIFxmQmVvXGZSLgorLlBQCisuU1MgS2V5cGFkIGFuZCBGdW5jdGlvbiBLZXlzCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBoYXMgYSBrZXlwYWQgdGhhdCB0cmFuc21pdHMgY29kZXMgd2hlbiB0aGUga2V5cyBhcmUgcHJlc3NlZCwKK3RoaXMgaW5mb3JtYXRpb24gY2FuIGJlIGdpdmVuLgorTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUKK3Rlcm1pbmFscyB3aGVyZSB0aGUga2V5cGFkIG9ubHkgd29ya3MgaW4gbG9jYWwgKHRoaXMgYXBwbGllcywgZm9yIGV4YW1wbGUsCit0byB0aGUgdW5zaGlmdGVkIEhQIDI2MjEga2V5cykuCitJZiB0aGUga2V5cGFkIGNhbiBiZSBzZXQgdG8gdHJhbnNtaXQgb3Igbm90IHRyYW5zbWl0LAorZ2l2ZSB0aGVzZSBjb2RlcyBhcyBcZkJzbWt4XGZSIGFuZCBcZkJybWt4XGZSLgorT3RoZXJ3aXNlIHRoZSBrZXlwYWQgaXMgYXNzdW1lZCB0byBhbHdheXMgdHJhbnNtaXQuCitUaGUgY29kZXMgc2VudCBieSB0aGUgbGVmdCBhcnJvdywgcmlnaHQgYXJyb3csIHVwIGFycm93LCBkb3duIGFycm93LAorYW5kIGhvbWUga2V5cyBjYW4gYmUgZ2l2ZW4gYXMKK1xmQmtjdWIxLCBrY3VmMSwga2N1dTEsIGtjdWQxLCBcZlJhbmRcZkIga2hvbWVcZlIgcmVzcGVjdGl2ZWx5LgorSWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGtleXMgc3VjaCBhcyBmMCwgZjEsIC4uLiwgZjEwLCB0aGUgY29kZXMgdGhleSBzZW5kCitjYW4gYmUgZ2l2ZW4gYXMgXGZCa2YwLCBrZjEsIC4uLiwga2YxMFxmUi4KK0lmIHRoZXNlIGtleXMgaGF2ZSBsYWJlbHMgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBmMCB0aHJvdWdoIGYxMCwgdGhlIGxhYmVscworY2FuIGJlIGdpdmVuIGFzIFxmQmxmMCwgbGYxLCAuLi4sIGxmMTBcZlIuCitUaGUgY29kZXMgdHJhbnNtaXR0ZWQgYnkgY2VydGFpbiBvdGhlciBzcGVjaWFsIGtleXMgY2FuIGJlIGdpdmVuOgorLkIga2xsCisoaG9tZSBkb3duKSwKKy5CIGticworKGJhY2tzcGFjZSksCisuQiBrdGJjCisoY2xlYXIgYWxsIHRhYnMpLAorLkIga2N0YWIKKyhjbGVhciB0aGUgdGFiIHN0b3AgaW4gdGhpcyBjb2x1bW4pLAorLkIga2NscgorKGNsZWFyIHNjcmVlbiBvciBlcmFzZSBrZXkpLAorLkIga2RjaDEKKyhkZWxldGUgY2hhcmFjdGVyKSwKKy5CIGtkbDEKKyhkZWxldGUgbGluZSksCisuQiBrcm1pcgorKGV4aXQgaW5zZXJ0IG1vZGUpLAorLkIga2VsCisoY2xlYXIgdG8gZW5kIG9mIGxpbmUpLAorLkIga2VkCisoY2xlYXIgdG8gZW5kIG9mIHNjcmVlbiksCisuQiBraWNoMQorKGluc2VydCBjaGFyYWN0ZXIgb3IgZW50ZXIgaW5zZXJ0IG1vZGUpLAorLkIga2lsMQorKGluc2VydCBsaW5lKSwKKy5CIGtucAorKG5leHQgcGFnZSksCisuQiBrcHAKKyhwcmV2aW91cyBwYWdlKSwKKy5CIGtpbmQKKyhzY3JvbGwgZm9yd2FyZC9kb3duKSwKKy5CIGtyaQorKHNjcm9sbCBiYWNrd2FyZC91cCksCisuQiBraHRzCisoc2V0IGEgdGFiIHN0b3AgaW4gdGhpcyBjb2x1bW4pLgorSW4gYWRkaXRpb24sIGlmIHRoZSBrZXlwYWQgaGFzIGEgMyBieSAzIGFycmF5IG9mIGtleXMgaW5jbHVkaW5nIHRoZSBmb3VyCithcnJvdyBrZXlzLCB0aGUgb3RoZXIgZml2ZSBrZXlzIGNhbiBiZSBnaXZlbiBhcworLkJSIGthMSAsCisuQlIga2EzICwKKy5CUiBrYjIgLAorLkJSIGtjMSAsCithbmQKKy5CUiBrYzMgLgorVGhlc2Uga2V5cyBhcmUgdXNlZnVsIHdoZW4gdGhlIGVmZmVjdHMgb2YgYSAzIGJ5IDMgZGlyZWN0aW9uYWwgcGFkIGFyZSBuZWVkZWQuCisuUFAKK1N0cmluZ3MgdG8gcHJvZ3JhbSBmdW5jdGlvbiBrZXlzIGNhbiBiZSBnaXZlbiBhcworLkJSIHBma2V5ICwKKy5CUiBwZmxvYyAsCithbmQKKy5CUiBwZnggLgorQSBzdHJpbmcgdG8gcHJvZ3JhbSBzY3JlZW4gbGFiZWxzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgXGZCcGxuXGZQLgorRWFjaCBvZiB0aGVzZSBzdHJpbmdzIHRha2VzIHR3byBwYXJhbWV0ZXJzOiB0aGUgZnVuY3Rpb24ga2V5IG51bWJlciB0bworcHJvZ3JhbSAoZnJvbSAwIHRvIDEwKSBhbmQgdGhlIHN0cmluZyB0byBwcm9ncmFtIGl0IHdpdGguCitGdW5jdGlvbiBrZXkgbnVtYmVycyBvdXQgb2YgdGhpcyByYW5nZSBtYXkgcHJvZ3JhbSB1bmRlZmluZWQga2V5cyBpbgorYSB0ZXJtaW5hbCBkZXBlbmRlbnQgbWFubmVyLgorVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY2FwYWJpbGl0aWVzIGlzIHRoYXQKKy5CIHBma2V5CitjYXVzZXMgcHJlc3NpbmcgdGhlIGdpdmVuIGtleSB0byBiZSB0aGUgc2FtZSBhcyB0aGUgdXNlciB0eXBpbmcgdGhlCitnaXZlbiBzdHJpbmc7CisuQiBwZmxvYworY2F1c2VzIHRoZSBzdHJpbmcgdG8gYmUgZXhlY3V0ZWQgYnkgdGhlIHRlcm1pbmFsIGluIGxvY2FsOyBhbmQKKy5CIHBmeAorY2F1c2VzIHRoZSBzdHJpbmcgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIGNvbXB1dGVyLgorLlBQCitUaGUgY2FwYWJpbGl0aWVzIFxmQm5sYWJcZlAsIFxmQmx3XGZQIGFuZCBcZkJsaFxmUAorZGVmaW5lIHRoZSBudW1iZXIgb2YgcHJvZ3JhbW1hYmxlCitzY3JlZW4gbGFiZWxzIGFuZCB0aGVpciB3aWR0aCBhbmQgaGVpZ2h0LgorSWYgdGhlcmUgYXJlIGNvbW1hbmRzIHRvIHR1cm4gdGhlIGxhYmVscyBvbiBhbmQgb2ZmLAorZ2l2ZSB0aGVtIGluIFxmQnNtbG5cZlAgYW5kIFxmQnJtbG5cZlAuCitcZkJzbWxuXGZQIGlzIG5vcm1hbGx5IG91dHB1dCBhZnRlciBvbmUgb3IgbW9yZSBwbG4KK3NlcXVlbmNlcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGJlY29tZXMgdmlzaWJsZS4KKy5QUAorLlNTIFRhYnMgYW5kIEluaXRpYWxpemF0aW9uCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBoYXMgaGFyZHdhcmUgdGFicywgdGhlIGNvbW1hbmQgdG8gYWR2YW5jZSB0byB0aGUgbmV4dAordGFiIHN0b3AgY2FuIGJlIGdpdmVuIGFzCisuQiBodAorKHVzdWFsbHkgY29udHJvbCBJKS4KK0EgYGBiYWNrLXRhYicnIGNvbW1hbmQgd2hpY2ggbW92ZXMgbGVmdHdhcmQgdG8gdGhlIHByZWNlZGluZyB0YWIgc3RvcCBjYW4KK2JlIGdpdmVuIGFzCisuQlIgY2J0IC4KK0J5IGNvbnZlbnRpb24sIGlmIHRoZSB0ZWxldHlwZSBtb2RlcyBpbmRpY2F0ZSB0aGF0IHRhYnMgYXJlIGJlaW5nCitleHBhbmRlZCBieSB0aGUgY29tcHV0ZXIgcmF0aGVyIHRoYW4gYmVpbmcgc2VudCB0byB0aGUgdGVybWluYWwsCitwcm9ncmFtcyBzaG91bGQgbm90IHVzZQorLkIgaHQKK29yCisuQiBjYnQKK2V2ZW4gaWYgdGhleSBhcmUgcHJlc2VudCwgc2luY2UgdGhlIHVzZXIgbWF5IG5vdCBoYXZlIHRoZSB0YWIgc3RvcHMKK3Byb3Blcmx5IHNldC4KK0lmIHRoZSB0ZXJtaW5hbCBoYXMgaGFyZHdhcmUgdGFicyB3aGljaCBhcmUgaW5pdGlhbGx5IHNldCBldmVyeQorLkkgbgorc3BhY2VzIHdoZW4gdGhlIHRlcm1pbmFsIGlzIHBvd2VyZWQgdXAsCit0aGUgbnVtZXJpYyBwYXJhbWV0ZXIKKy5CIGl0CitpcyBnaXZlbiwgc2hvd2luZyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGUgdGFicyBhcmUgc2V0IHRvLgorVGhpcyBpcyBub3JtYWxseSB1c2VkIGJ5IHRoZQorLklSIHRzZXQKK2NvbW1hbmQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2V0IHRoZSBtb2RlIGZvciBoYXJkd2FyZSB0YWIgZXhwYW5zaW9uLAorYW5kIHdoZXRoZXIgdG8gc2V0IHRoZSB0YWIgc3RvcHMuCitJZiB0aGUgdGVybWluYWwgaGFzIHRhYiBzdG9wcyB0aGF0IGNhbiBiZSBzYXZlZCBpbiBub24tdm9sYXRpbGUgbWVtb3J5LAordGhlIHRlcm1pbmZvIGRlc2NyaXB0aW9uIGNhbiBhc3N1bWUgdGhhdCB0aGV5IGFyZSBwcm9wZXJseSBzZXQuCisuUFAKK090aGVyIGNhcGFiaWxpdGllcworaW5jbHVkZQorLkJSIGlzMSAsCisuQlIgaXMyICwKK2FuZAorLkJSIGlzMyAsCitpbml0aWFsaXphdGlvbiBzdHJpbmdzIGZvciB0aGUgdGVybWluYWwsCisuQlIgaXByb2cgLAordGhlIHBhdGggbmFtZSBvZiBhIHByb2dyYW0gdG8gYmUgcnVuIHRvIGluaXRpYWxpemUgdGhlIHRlcm1pbmFsLAorYW5kIFxmQmlmXGZSLCB0aGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBsb25nIGluaXRpYWxpemF0aW9uIHN0cmluZ3MuCitUaGVzZSBzdHJpbmdzIGFyZSBleHBlY3RlZCB0byBzZXQgdGhlIHRlcm1pbmFsIGludG8gbW9kZXMgY29uc2lzdGVudAord2l0aCB0aGUgcmVzdCBvZiB0aGUgdGVybWluZm8gZGVzY3JpcHRpb24uCitUaGV5IGFyZSBub3JtYWxseSBzZW50IHRvIHRoZSB0ZXJtaW5hbCwgYnkgdGhlCisuSSBpbml0CitvcHRpb24gb2YgdGhlCisuSVIgQFRQVVRACitwcm9ncmFtLCBlYWNoIHRpbWUgdGhlIHVzZXIgbG9ncyBpbi4KK1RoZXkgd2lsbCBiZSBwcmludGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisuUlMKKy5UUAorcnVuIHRoZSBwcm9ncmFtCisuQlIgaXByb2cKKy5UUAorb3V0cHV0CisuQlIgaXMxCisuQlIgaXMyCisuVFAKK3NldCB0aGUgbWFyZ2lucyB1c2luZworLkJSIG1nYyAsCisuQlIgc21nbAorYW5kCisuQlIgc21ncgorLlRQCitzZXQgdGFicyB1c2luZworLkIgdGJjCithbmQKKy5CUiBodHMKKy5UUAorcHJpbnQgdGhlIGZpbGUKKy5CUiBpZgorLlRQCithbmQgZmluYWxseQorb3V0cHV0CisuQlIgaXMzIC4KKy5SRQorLlBQCitNb3N0IGluaXRpYWxpemF0aW9uIGlzIGRvbmUgd2l0aAorLkJSIGlzMiAuCitTcGVjaWFsIHRlcm1pbmFsIG1vZGVzIGNhbiBiZSBzZXQgdXAgd2l0aG91dCBkdXBsaWNhdGluZyBzdHJpbmdzCitieSBwdXR0aW5nIHRoZSBjb21tb24gc2VxdWVuY2VzIGluCisuQiBpczIKK2FuZCBzcGVjaWFsIGNhc2VzIGluCisuQiBpczEKK2FuZAorLkJSIGlzMyAuCisuUFAKK0Egc2V0IG9mIHNlcXVlbmNlcyB0aGF0IGRvZXMgYSBoYXJkZXIgcmVzZXQgZnJvbSBhIHRvdGFsbHkgdW5rbm93biBzdGF0ZQorY2FuIGJlIGdpdmVuIGFzCisuQlIgcnMxICwKKy5CUiByczIgLAorLkJSIHJmCithbmQKKy5CUiByczMgLAorYW5hbG9nb3VzIHRvCisuQiBpczEgLAorLkIgaXMyICwKKy5CIGlmCithbmQKKy5CUiBpczMKK3Jlc3BlY3RpdmVseS4KK1RoZXNlIHN0cmluZ3MgYXJlIG91dHB1dCBieSB0aGUKKy5JUiByZXNldAorcHJvZ3JhbSwgd2hpY2ggaXMgdXNlZCB3aGVuIHRoZSB0ZXJtaW5hbCBnZXRzIGludG8gYSB3ZWRnZWQgc3RhdGUuCitDb21tYW5kcyBhcmUgbm9ybWFsbHkgcGxhY2VkIGluCisuQlIgcnMxICwKKy5CUiByczIKKy5CIHJzMworYW5kCisuQiByZgorb25seSBpZiB0aGV5IHByb2R1Y2UgYW5ub3lpbmcgZWZmZWN0cyBvbiB0aGUgc2NyZWVuIGFuZCBhcmUgbm90CituZWNlc3Nhcnkgd2hlbiBsb2dnaW5nIGluLgorRm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kIHRvIHNldCB0aGUgdnQxMDAgaW50byA4MC1jb2x1bW4gbW9kZSB3b3VsZAorbm9ybWFsbHkgYmUgcGFydCBvZgorLkJSIGlzMiAsCitidXQgaXQgY2F1c2VzIGFuIGFubm95aW5nIGdsaXRjaCBvZiB0aGUgc2NyZWVuIGFuZCBpcyBub3Qgbm9ybWFsbHkKK25lZWRlZCBzaW5jZSB0aGUgdGVybWluYWwgaXMgdXN1YWxseSBhbHJlYWR5IGluIDgwIGNvbHVtbiBtb2RlLgorLlBQCitUaGUKKy5JUiByZXNldAorcHJvZ3JhbSB3cml0ZXMgc3RyaW5ncworaW5jbHVkaW5nCisuQlIgaXByb2cgLAorZXRjLiwgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCisuSVIgaW5pdAorcHJvZ3JhbSwgdXNpbmcgCisuQlIgcnMxICwKK2V0Yy4sIGluc3RlYWQgb2YKKy5CUiBpczEgLAorZXRjLgorSWYgYW55IG9mCisuQlIgcnMxICwKKy5CUiByczIgLAorLkJSIHJzMyAsCitvcgorLkJSIHJmCityZXNldCBjYXBhYmlsaXR5IHN0cmluZ3MgYXJlIG1pc3NpbmcsIHRoZQorLklSIHJlc2V0Citwcm9ncmFtIGZhbGxzIGJhY2sgdXBvbiB0aGUgY29ycmVzcG9uZGluZyBpbml0aWFsaXphdGlvbiBjYXBhYmlsaXR5IHN0cmluZy4KKy5QUAorSWYgdGhlcmUgYXJlIGNvbW1hbmRzIHRvIHNldCBhbmQgY2xlYXIgdGFiIHN0b3BzLCB0aGV5IGNhbiBiZSBnaXZlbiBhcworLkIgdGJjCisoY2xlYXIgYWxsIHRhYiBzdG9wcykKK2FuZAorLkIgaHRzCisoc2V0IGEgdGFiIHN0b3AgaW4gdGhlIGN1cnJlbnQgY29sdW1uIG9mIGV2ZXJ5IHJvdykuCitJZiBhIG1vcmUgY29tcGxleCBzZXF1ZW5jZSBpcyBuZWVkZWQgdG8gc2V0IHRoZSB0YWJzIHRoYW4gY2FuIGJlCitkZXNjcmliZWQgYnkgdGhpcywgdGhlIHNlcXVlbmNlIGNhbiBiZSBwbGFjZWQgaW4KKy5CIGlzMgorb3IKKy5CUiBpZiAuCisuU1MgRGVsYXlzIGFuZCBQYWRkaW5nCisuUFAKK01hbnkgb2xkZXIgYW5kIHNsb3dlciB0ZXJtaW5hbHMgZG8gbm90IHN1cHBvcnQgZWl0aGVyIFhPTi9YT0ZGIG9yIERUUgoraGFuZHNoYWtpbmcsIGluY2x1ZGluZyBoYXJkIGNvcHkgdGVybWluYWxzIGFuZCBzb21lIHZlcnkgYXJjaGFpYyBDUlRzCisoaW5jbHVkaW5nLCBmb3IgZXhhbXBsZSwgREVDIFZUMTAwcykuCitUaGVzZSBtYXkgcmVxdWlyZSBwYWRkaW5nIGNoYXJhY3RlcnMKK2FmdGVyIGNlcnRhaW4gY3Vyc29yIG1vdGlvbnMgYW5kIHNjcmVlbiBjaGFuZ2VzLgorLlBQCitJZiB0aGUgdGVybWluYWwgdXNlcyB4b24veG9mZiBoYW5kc2hha2luZyBmb3IgZmxvdyBjb250cm9sICh0aGF0IGlzLAoraXQgYXV0b21hdGljYWxseSBlbWl0cyBeUyBiYWNrIHRvIHRoZSBob3N0IHdoZW4gaXRzIGlucHV0IGJ1ZmZlcnMgYXJlCitjbG9zZSB0byBmdWxsKSwgc2V0CisuQlIgeG9uIC4KK1RoaXMgY2FwYWJpbGl0eSBzdXBwcmVzc2VzIHRoZSBlbWlzc2lvbiBvZiBwYWRkaW5nLgorWW91IGNhbiBhbHNvIHNldCBpdAorZm9yIG1lbW9yeS1tYXBwZWQgY29uc29sZSBkZXZpY2VzIGVmZmVjdGl2ZWx5IHRoYXQgZG8gbm90IGhhdmUgYSBzcGVlZCBsaW1pdC4KK1BhZGRpbmcgaW5mb3JtYXRpb24gc2hvdWxkIHN0aWxsIGJlIGluY2x1ZGVkIHNvIHRoYXQgcm91dGluZXMgY2FuCittYWtlIGJldHRlciBkZWNpc2lvbnMgYWJvdXQgcmVsYXRpdmUgY29zdHMsIGJ1dCBhY3R1YWwgcGFkIGNoYXJhY3RlcnMgd2lsbAorbm90IGJlIHRyYW5zbWl0dGVkLgorLlBQCitJZiBcZkJwYlxmUiAocGFkZGluZyBiYXVkIHJhdGUpIGlzIGdpdmVuLCBwYWRkaW5nIGlzIHN1cHByZXNzZWQgYXQgYmF1ZCByYXRlcworYmVsb3cgdGhlIHZhbHVlIG9mIFxmQnBiXGZSLgorSWYgdGhlIGVudHJ5IGhhcyBubyBwYWRkaW5nIGJhdWQgcmF0ZSwgdGhlbgord2hldGhlciBwYWRkaW5nIGlzIGVtaXR0ZWQgb3Igbm90IGlzIGNvbXBsZXRlbHkgY29udHJvbGxlZCBieSBcZkJ4b25cZlIuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCByZXF1aXJlcyBvdGhlciB0aGFuIGEgbnVsbCAoemVybykgY2hhcmFjdGVyIGFzIGEgcGFkLAordGhlbiB0aGlzIGNhbiBiZSBnaXZlbiBhcyBcZkJwYWRcZlIuCitPbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisuQiBwYWQKK3N0cmluZyBpcyB1c2VkLgorLlBQCisuU1MgU3RhdHVzIExpbmVzCitTb21lIHRlcm1pbmFscyBoYXZlIGFuIGV4dHJhIGBzdGF0dXMgbGluZScgd2hpY2ggaXMgbm90IG5vcm1hbGx5IHVzZWQgYnkKK3NvZnR3YXJlIChhbmQgdGh1cyBub3QgY291bnRlZCBpbiB0aGUgdGVybWluYWwncyBcZkJsaW5lc1xmUiBjYXBhYmlsaXR5KS4KKy5QUAorVGhlIHNpbXBsZXN0IGNhc2UgaXMgYSBzdGF0dXMgbGluZSB3aGljaCBpcyBjdXJzb3ItYWRkcmVzc2FibGUgYnV0IG5vdAorcGFydCBvZiB0aGUgbWFpbiBzY3JvbGxpbmcgcmVnaW9uIG9uIHRoZSBzY3JlZW47IHRoZSBIZWF0aGtpdCBIMTkgaGFzCithIHN0YXR1cyBsaW5lIG9mIHRoaXMga2luZCwgYXMgd291bGQgYSAyNC1saW5lIFZUMTAwIHdpdGggYSAyMy1saW5lCitzY3JvbGxpbmcgcmVnaW9uIHNldCB1cCBvbiBpbml0aWFsaXphdGlvbi4KK1RoaXMgc2l0dWF0aW9uIGlzIGluZGljYXRlZAorYnkgdGhlIFxmQmhzXGZSIGNhcGFiaWxpdHkuCisuUFAKK1NvbWUgdGVybWluYWxzIHdpdGggc3RhdHVzIGxpbmVzIG5lZWQgc3BlY2lhbCBzZXF1ZW5jZXMgdG8gYWNjZXNzIHRoZQorc3RhdHVzIGxpbmUuCitUaGVzZSBtYXkgYmUgZXhwcmVzc2VkIGFzIGEgc3RyaW5nIHdpdGggc2luZ2xlIHBhcmFtZXRlcgorXGZCdHNsXGZSIHdoaWNoIHRha2VzIHRoZSBjdXJzb3IgdG8gYSBnaXZlbiB6ZXJvLW9yaWdpbiBjb2x1bW4gb24gdGhlCitzdGF0dXMgbGluZS4KK1RoZSBjYXBhYmlsaXR5IFxmQmZzbFxmUiBtdXN0IHJldHVybiB0byB0aGUgbWFpbi1zY3JlZW4KK2N1cnNvciBwb3NpdGlvbnMgYmVmb3JlIHRoZSBsYXN0IFxmQnRzbFxmUi4KK1lvdSBtYXkgbmVlZCB0byBlbWJlZCB0aGUKK3N0cmluZyB2YWx1ZXMgb2YgXGZCc2NcZlIgKHNhdmUgY3Vyc29yKSBhbmQgXGZCcmNcZlIgKHJlc3RvcmUgY3Vyc29yKQoraW4gXGZCdHNsXGZSIGFuZCBcZkJmc2xcZlIgdG8gYWNjb21wbGlzaCB0aGlzLgorLlBQCitUaGUgc3RhdHVzIGxpbmUgaXMgbm9ybWFsbHkgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgd2lkdGgKK29mIHRoZSB0ZXJtaW5hbC4KK0lmIHRoaXMgaXMgdW50cnVlLCB5b3UgY2FuIHNwZWNpZnkgaXQgd2l0aCB0aGUgbnVtZXJpYworY2FwYWJpbGl0eSBcZkJ3c2xcZlIuCisuUFAKK0EgY29tbWFuZCB0byBlcmFzZSBvciBibGFuayB0aGUgc3RhdHVzIGxpbmUgbWF5IGJlIHNwZWNpZmllZCBhcyBcZkJkc2xcZlIuCisuUFAKK1RoZSBib29sZWFuIGNhcGFiaWxpdHkgXGZCZXNsb2tcZlIgc3BlY2lmaWVzIHRoYXQgZXNjYXBlIHNlcXVlbmNlcywgdGFicywKK2V0Yy4sIHdvcmsgb3JkaW5hcmlseSBpbiB0aGUgc3RhdHVzIGxpbmUuCisuUFAKK1RoZSBcZkJuY3Vyc2VzXGZSIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHlldCB1c2UgYW55IG9mIHRoZXNlIGNhcGFiaWxpdGllcy4KK1RoZXkgYXJlIGRvY3VtZW50ZWQgaGVyZSBpbiBjYXNlIHRoZXkgZXZlciBiZWNvbWUgaW1wb3J0YW50LgorLlBQCisuU1MgTGluZSBHcmFwaGljcworLlBQCitNYW55IHRlcm1pbmFscyBoYXZlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0cyB1c2VmdWwgZm9yIGZvcm1zLWRyYXdpbmcuCitUZXJtaW5mbyBhbmQgXGZCY3Vyc2VzXGZSIGJ1aWxkIGluIHN1cHBvcnQgZm9yIHRoZSBkcmF3aW5nIGNoYXJhY3RlcnMKK3N1cHBvcnRlZCBieSB0aGUgVlQxMDAsIHdpdGggc29tZSBjaGFyYWN0ZXJzIGZyb20gdGhlIEFUJlQgNDQxMHYxIGFkZGVkLgorVGhpcyBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBtYXkgYmUgc3BlY2lmaWVkIGJ5IHRoZSBcZkJhY3NjXGZSIGNhcGFiaWxpdHkuCisuUFAKKy5UUyBICitjZW50ZXIgZXhwYW5kOworYyBsIGwgYworYyBsIGwgYworbHcyOCBsdzYgbHcyIGx3MjAuCisuXCIuVEgKK1xmQkdseXBoCUFDUwlBc2NpaQlWVDEwMFxmUgorXGZCTmFtZQlOYW1lCURlZmF1bHQJTmFtZVxmUgorVUsgcG91bmQgc2lnbiAgICAgICAgCUFDU19TVEVSTElORwlmCX0KK2Fycm93IHBvaW50aW5nIGRvd24JQUNTX0RBUlJPVwl2CS4KK2Fycm93IHBvaW50aW5nIGxlZnQJQUNTX0xBUlJPVwk8CSwKK2Fycm93IHBvaW50aW5nIHJpZ2h0CUFDU19SQVJST1cJPgkrCithcnJvdyBwb2ludGluZyB1cAlBQ1NfVUFSUk9XCV4JLQorYm9hcmQgb2Ygc3F1YXJlcwlBQ1NfQk9BUkQJIwloCitidWxsZXQgICAgICAgICAgCUFDU19CVUxMRVQJbwl+CitjaGVja2VyIGJvYXJkIChzdGlwcGxlKQlBQ1NfQ0tCT0FSRAk6CWEKK2RlZ3JlZSBzeW1ib2wgICAJQUNTX0RFR1JFRQlcZQlmCitkaWFtb25kICAgICAgICAgCUFDU19ESUFNT05ECSsJYAorZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvCUFDU19HRVFVQUwJPgl6CitncmVlayBwaSAgICAgICAgCUFDU19QSQkqCXsKK2hvcml6b250YWwgbGluZSAJQUNTX0hMSU5FCS0JcQorbGFudGVybiBzeW1ib2wgIAlBQ1NfTEFOVEVSTgkjCWkKK2xhcmdlIHBsdXMgb3IgY3Jvc3NvdmVyCUFDU19QTFVTCSsJbgorbGVzcy10aGFuLW9yLWVxdWFsLXRvCUFDU19MRVFVQUwJPAl5Citsb3dlciBsZWZ0IGNvcm5lcglBQ1NfTExDT1JORVIJKwltCitsb3dlciByaWdodCBjb3JuZXIJQUNTX0xSQ09STkVSCSsJagorbm90LWVxdWFsICAgICAgIAlBQ1NfTkVRVUFMCSEJfAorcGx1cy9taW51cyAgICAgIAlBQ1NfUExNSU5VUwkjCWcKK3NjYW4gbGluZSAxICAgICAJQUNTX1MxICAJfglvCitzY2FuIGxpbmUgMyAgICAgCUFDU19TMyAgCS0JcAorc2NhbiBsaW5lIDcgICAgIAlBQ1NfUzcgIAktCXIKK3NjYW4gbGluZSA5ICAgICAJQUNTX1M5ICAJXCZfCXMKK3NvbGlkIHNxdWFyZSBibG9jawlBQ1NfQkxPQ0sJIwkwCit0ZWUgcG9pbnRpbmcgZG93bglBQ1NfVFRFRQkrCXcKK3RlZSBwb2ludGluZyBsZWZ0CUFDU19SVEVFCSsJdQordGVlIHBvaW50aW5nIHJpZ2h0CUFDU19MVEVFCSsJdAordGVlIHBvaW50aW5nIHVwIAlBQ1NfQlRFRQkrCXYKK3VwcGVyIGxlZnQgY29ybmVyCUFDU19VTENPUk5FUgkrCWwKK3VwcGVyIHJpZ2h0IGNvcm5lcglBQ1NfVVJDT1JORVIJKwlrCit2ZXJ0aWNhbCBsaW5lICAgCUFDU19WTElORQl8CXgKKy5URQorLlBQCitUaGUgYmVzdCB3YXkgdG8gZGVmaW5lIGEgbmV3IGRldmljZSdzIGdyYXBoaWNzIHNldCBpcyB0byBhZGQgYSBjb2x1bW4KK3RvIGEgY29weSBvZiB0aGlzIHRhYmxlIGZvciB5b3VyIHRlcm1pbmFsLCBnaXZpbmcgdGhlIGNoYXJhY3RlciB3aGljaAorKHdoZW4gZW1pdHRlZCBiZXR3ZWVuIFxmQnNtYWNzXGZSL1xmQnJtYWNzXGZSIHN3aXRjaGVzKSB3aWxsIGJlIHJlbmRlcmVkCithcyB0aGUgY29ycmVzcG9uZGluZyBncmFwaGljLgorVGhlbiByZWFkIG9mZiB0aGUgVlQxMDAveW91ciB0ZXJtaW5hbAorY2hhcmFjdGVyIHBhaXJzIHJpZ2h0IHRvIGxlZnQgaW4gc2VxdWVuY2U7IHRoZXNlIGJlY29tZSB0aGUgQUNTQyBzdHJpbmcuCisuUFAKKy5TUyBDb2xvciBIYW5kbGluZworLlBQCitNb3N0IGNvbG9yIHRlcm1pbmFscyBhcmUgZWl0aGVyIGBUZWt0cm9uaXgtbGlrZScgb3IgYEhQLWxpa2UnLgorVGVrdHJvbml4LWxpa2UKK3Rlcm1pbmFscyBoYXZlIGEgcHJlZGVmaW5lZCBzZXQgb2YgTiBjb2xvcnMgKHdoZXJlIE4gdXN1YWxseSA4KSwgYW5kIGNhbiBzZXQKK2NoYXJhY3Rlci1jZWxsIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY2hhcmFjdGVycyBpbmRlcGVuZGVudGx5LCBtaXhpbmcgdGhlbQoraW50byBOICogTiBjb2xvci1wYWlycy4KK09uIEhQLWxpa2UgdGVybWluYWxzLCB0aGUgdXNlIG11c3Qgc2V0IGVhY2ggY29sb3IKK3BhaXIgdXAgc2VwYXJhdGVseSAoZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBhcmUgbm90IGluZGVwZW5kZW50bHkgc2V0dGFibGUpLgorVXAgdG8gTSBjb2xvci1wYWlycyBtYXkgYmUgc2V0IHVwIGZyb20gMipNIGRpZmZlcmVudCBjb2xvcnMuCitBTlNJLWNvbXBhdGlibGUKK3Rlcm1pbmFscyBhcmUgVGVrdHJvbml4LWxpa2UuCisuUFAKK1NvbWUgYmFzaWMgY29sb3IgY2FwYWJpbGl0aWVzIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgY29sb3IgbWV0aG9kLgorVGhlIG51bWVyaWMKK2NhcGFiaWxpdGllcyBcZkJjb2xvcnNcZlIgYW5kIFxmQnBhaXJzXGZSIHNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVycyBvZiBjb2xvcnMKK2FuZCBjb2xvci1wYWlycyB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgc2ltdWx0YW5lb3VzbHkuCitUaGUgXGZCb3BcZlIgKG9yaWdpbmFsCitwYWlyKSBzdHJpbmcgcmVzZXRzIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzCitmb3IgdGhlIHRlcm1pbmFsLgorVGhlIFxmQm9jXGZSIHN0cmluZyByZXNldHMgYWxsIGNvbG9ycyBvciBjb2xvci1wYWlycyB0bwordGhlaXIgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB0ZXJtaW5hbC4KK1NvbWUgdGVybWluYWxzIChpbmNsdWRpbmcgbWFueSBQQwordGVybWluYWwgZW11bGF0b3JzKSBlcmFzZSBzY3JlZW4gYXJlYXMgd2l0aCB0aGUgY3VycmVudCBiYWNrZ3JvdW5kIGNvbG9yIHJhdGhlcgordGhhbiB0aGUgcG93ZXItdXAgZGVmYXVsdCBiYWNrZ3JvdW5kOyB0aGVzZSBzaG91bGQgaGF2ZSB0aGUgYm9vbGVhbiBjYXBhYmlsaXR5CitcZkJiY2VcZlIuCisuUFAKK1RvIGNoYW5nZSB0aGUgY3VycmVudCBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3Igb24gYSBUZWt0cm9uaXgtdHlwZQordGVybWluYWwsIHVzZSBcZkJzZXRhZlxmUiAoc2V0IEFOU0kgZm9yZWdyb3VuZCkgYW5kIFxmQnNldGFiXGZSIChzZXQgQU5TSQorYmFja2dyb3VuZCkgb3IgXGZCc2V0ZlxmUiAoc2V0IGZvcmVncm91bmQpIGFuZCBcZkJzZXRiXGZSIChzZXQgYmFja2dyb3VuZCkuCitUaGVzZSB0YWtlIG9uZSBwYXJhbWV0ZXIsIHRoZSBjb2xvciBudW1iZXIuCitUaGUgU1ZyNCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcworb25seSBcZkJzZXRhZlxmUi9cZkJzZXRhYlxmUjsgdGhlIFhQRzQgZHJhZnQgc2F5cyB0aGF0ICJJZiB0aGUgdGVybWluYWwKK3N1cHBvcnRzIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0byBzZXQgYmFja2dyb3VuZCBhbmQgZm9yZWdyb3VuZCwgdGhleSBzaG91bGQKK2JlIGNvZGVkIGFzIFxmQnNldGFmXGZSIGFuZCBcZkJzZXRhYlxmUiwgcmVzcGVjdGl2ZWx5LgorSWYgdGhlIHRlcm1pbmFsCitzdXBwb3J0cyBvdGhlciBlc2NhcGUgc2VxdWVuY2VzIHRvIHNldCBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kLCB0aGV5IHNob3VsZAorYmUgY29kZWQgYXMgXGZCc2V0ZlxmUiBhbmQgXGZCc2V0YlxmUiwgcmVzcGVjdGl2ZWx5LgorVGhlIFxmSXZpZHB1dHMoKVxmUgorZnVuY3Rpb24gYW5kIHRoZSByZWZyZXNoIGZ1bmN0aW9ucyB1c2UgXGZCc2V0YWZcZlIgYW5kIFxmQnNldGFiXGZSIGlmIHRoZXkgYXJlCitkZWZpbmVkLiIKKy5QUAorVGhlIFxmQnNldGFmXGZSL1xmQnNldGFiXGZSIGFuZCBcZkJzZXRmXGZSL1xmQnNldGJcZlIgY2FwYWJpbGl0aWVzIHRha2UgYQorc2luZ2xlIG51bWVyaWMgYXJndW1lbnQgZWFjaC4KK0FyZ3VtZW50IHZhbHVlcyAwLTcgb2YgXGZCc2V0YWZcZlIvXGZCc2V0YWJcZlIgYXJlIHBvcnRhYmx5IGRlZmluZWQgYXMKK2ZvbGxvd3MgKHRoZSBtaWRkbGUgY29sdW1uIGlzIHRoZSBzeW1ib2xpYyAjZGVmaW5lIGF2YWlsYWJsZSBpbiB0aGUgaGVhZGVyIGZvcgordGhlIFxmQmN1cnNlc1xmUiBvciBcZkJuY3Vyc2VzXGZSIGxpYnJhcmllcykuCitUaGUgdGVybWluYWwgaGFyZHdhcmUgaXMgZnJlZSB0bworbWFwIHRoZXNlIGFzIGl0IGxpa2VzLCBidXQgdGhlIFJHQiB2YWx1ZXMgaW5kaWNhdGUgbm9ybWFsIGxvY2F0aW9ucyBpbiBjb2xvcgorc3BhY2UuCisuUFAKKy5UUyBICitjZW50ZXI7CitsIGMgYyBjCitsIGwgbiBsLgorXGZCQ29sb3IJI2RlZmluZSAJVmFsdWUJUkdCXGZSCitibGFjawlcZkJDT0xPUl9CTEFDS1xmUgkwCTAsIDAsIDAKK3JlZAlcZkJDT0xPUl9SRURcIFxmUgkxCW1heCwwLDAKK2dyZWVuCVxmQkNPTE9SX0dSRUVOXGZSCTIJMCxtYXgsMAoreWVsbG93CVxmQkNPTE9SX1lFTExPV1xmUgkzCW1heCxtYXgsMAorYmx1ZQlcZkJDT0xPUl9CTFVFXGZSCTQJMCwwLG1heAorbWFnZW50YQlcZkJDT0xPUl9NQUdFTlRBXGZSCTUJbWF4LDAsbWF4CitjeWFuCVxmQkNPTE9SX0NZQU5cZlIJNgkwLG1heCxtYXgKK3doaXRlCVxmQkNPTE9SX1dISVRFXGZSCTcJbWF4LG1heCxtYXgKKy5URQorLlBQCitUaGUgYXJndW1lbnQgdmFsdWVzIG9mIFxmQnNldGZcZlIvXGZCc2V0YlxmUiBoaXN0b3JpY2FsbHkgY29ycmVzcG9uZCB0bworYSBkaWZmZXJlbnQgbWFwcGluZywgaS5lLiwKKy5UUyBICitjZW50ZXI7CitsIGMgYyBjCitsIGwgbiBsLgorXGZCQ29sb3IJI2RlZmluZSAJVmFsdWUJUkdCXGZSCitibGFjawlcZkJDT0xPUl9CTEFDS1xmUgkwCTAsIDAsIDAKK2JsdWUJXGZCQ09MT1JfQkxVRVxmUgkxCTAsMCxtYXgKK2dyZWVuCVxmQkNPTE9SX0dSRUVOXGZSCTIJMCxtYXgsMAorY3lhbglcZkJDT0xPUl9DWUFOXGZSCTMJMCxtYXgsbWF4CityZWQJXGZCQ09MT1JfUkVEXCBcZlIJNAltYXgsMCwwCittYWdlbnRhCVxmQkNPTE9SX01BR0VOVEFcZlIJNQltYXgsMCxtYXgKK3llbGxvdwlcZkJDT0xPUl9ZRUxMT1dcZlIJNgltYXgsbWF4LDAKK3doaXRlCVxmQkNPTE9SX1dISVRFXGZSCTcJbWF4LG1heCxtYXgKKy5URQorSXQgaXMgaW1wb3J0YW50IHRvIG5vdCBjb25mdXNlIHRoZSB0d28gc2V0cyBvZiBjb2xvciBjYXBhYmlsaXRpZXM7CitvdGhlcndpc2UgcmVkL2JsdWUgd2lsbCBiZSBpbnRlcmNoYW5nZWQgb24gdGhlIGRpc3BsYXkuCisuUFAKK09uIGFuIEhQLWxpa2UgdGVybWluYWwsIHVzZSBcZkJzY3BcZlIgd2l0aCBhIGNvbG9yLXBhaXIgbnVtYmVyIHBhcmFtZXRlciB0byBzZXQKK3doaWNoIGNvbG9yIHBhaXIgaXMgY3VycmVudC4KKy5QUAorT24gYSBUZWt0cm9uaXgtbGlrZSB0ZXJtaW5hbCwgdGhlIGNhcGFiaWxpdHkgXGZCY2NjXGZSIG1heSBiZSBwcmVzZW50IHRvCitpbmRpY2F0ZSB0aGF0IGNvbG9ycyBjYW4gYmUgbW9kaWZpZWQuCitJZiBzbywgdGhlIFxmQmluaXRjXGZSIGNhcGFiaWxpdHkgd2lsbAordGFrZSBhIGNvbG9yIG51bWJlciAoMCB0byBcZkJjb2xvcnNcZlIgLSAxKWFuZCB0aHJlZSBtb3JlIHBhcmFtZXRlcnMgd2hpY2gKK2Rlc2NyaWJlIHRoZSBjb2xvci4KK1RoZXNlIHRocmVlIHBhcmFtZXRlcnMgZGVmYXVsdCB0byBiZWluZyBpbnRlcnByZXRlZCBhcyBSR0IKKyhSZWQsIEdyZWVuLCBCbHVlKSB2YWx1ZXMuCitJZiB0aGUgYm9vbGVhbiBjYXBhYmlsaXR5IFxmQmhsc1xmUiBpcyBwcmVzZW50LAordGhleSBhcmUgaW5zdGVhZCBhcyBITFMgKEh1ZSwgTGlnaHRuZXNzLCBTYXR1cmF0aW9uKSBpbmRpY2VzLgorVGhlIHJhbmdlcyBhcmUKK3Rlcm1pbmFsLWRlcGVuZGVudC4KKy5QUAorT24gYW4gSFAtbGlrZSB0ZXJtaW5hbCwgXGZCaW5pdHBcZlIgbWF5IGdpdmUgYSBjYXBhYmlsaXR5IGZvciBjaGFuZ2luZyBhCitjb2xvci1wYWlyIHZhbHVlLgorSXQgd2lsbCB0YWtlIHNldmVuIHBhcmFtZXRlcnM7IGEgY29sb3ItcGFpciBudW1iZXIgKDAgdG8KK1xmQm1heF9wYWlyc1xmUiAtIDEpLCBhbmQgdHdvIHRyaXBsZXMgZGVzY3JpYmluZyBmaXJzdCBiYWNrZ3JvdW5kIGFuZCB0aGVuCitmb3JlZ3JvdW5kIGNvbG9ycy4KK1RoZXNlIHBhcmFtZXRlcnMgbXVzdCBiZSAoUmVkLCBHcmVlbiwgQmx1ZSkgb3IKKyhIdWUsIExpZ2h0bmVzcywgU2F0dXJhdGlvbikgZGVwZW5kaW5nIG9uIFxmQmhsc1xmUi4KKy5QUAorT24gc29tZSBjb2xvciB0ZXJtaW5hbHMsIGNvbG9ycyBjb2xsaWRlIHdpdGggaGlnaGxpZ2h0cy4KK1lvdSBjYW4gcmVnaXN0ZXIKK3RoZXNlIGNvbGxpc2lvbnMgd2l0aCB0aGUgXGZCbmN2XGZSIGNhcGFiaWxpdHkuCitUaGlzIGlzIGEgYml0LW1hc2sgb2YKK2F0dHJpYnV0ZXMgbm90IHRvIGJlIHVzZWQgd2hlbiBjb2xvcnMgYXJlIGVuYWJsZWQuCitUaGUgY29ycmVzcG9uZGVuY2Ugd2l0aCB0aGUKK2F0dHJpYnV0ZXMgdW5kZXJzdG9vZCBieSBcZkJjdXJzZXNcZlIgaXMgYXMgZm9sbG93czoKKy5QUAorLlRTCitjZW50ZXI7CitsIGMgYworbHcyNSBsdzIgbHcxMC4KK1xmQkF0dHJpYnV0ZQlCaXQJRGVjaW1hbFxmUgorQV9TVEFORE9VVAkwCTEKK0FfVU5ERVJMSU5FCTEJMgorQV9SRVZFUlNFCTIJNAorQV9CTElOSyAgIAkzCTgKK0FfRElNICAgICAgCTQJMTYKK0FfQk9MRCAgICAJNQkzMgorQV9JTlZJUyAgIAk2CTY0CitBX1BST1RFQ1QJNwkxMjgKK0FfQUxUQ0hBUlNFVAk4CTI1NgorLlRFCisuUFAKK0ZvciBleGFtcGxlLCBvbiBtYW55IElCTSBQQyBjb25zb2xlcywgdGhlIHVuZGVybGluZSBhdHRyaWJ1dGUgY29sbGlkZXMgd2l0aCB0aGUKK2ZvcmVncm91bmQgY29sb3IgYmx1ZSBhbmQgaXMgbm90IGF2YWlsYWJsZSBpbiBjb2xvciBtb2RlLgorVGhlc2Ugc2hvdWxkIGhhdmUKK2FuIFxmQm5jdlxmUiBjYXBhYmlsaXR5IG9mIDIuCisuUFAKK1NWcjQgY3Vyc2VzIGRvZXMgbm90aGluZyB3aXRoIFxmQm5jdlxmUiwgbmN1cnNlcyByZWNvZ25pemVzIGl0IGFuZCBvcHRpbWl6ZXMKK3RoZSBvdXRwdXQgaW4gZmF2b3Igb2YgY29sb3JzLgorLlBQCisuU1MgTWlzY2VsbGFuZW91cworSWYgdGhlIHRlcm1pbmFsIHJlcXVpcmVzIG90aGVyIHRoYW4gYSBudWxsICh6ZXJvKSBjaGFyYWN0ZXIgYXMgYSBwYWQsIHRoZW4gdGhpcworY2FuIGJlIGdpdmVuIGFzIHBhZC4KK09ubHkgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcGFkIHN0cmluZyBpcyB1c2VkLgorSWYgdGhlIHRlcm1pbmFsIGRvZXMgbm90IGhhdmUgYSBwYWQgY2hhcmFjdGVyLCBzcGVjaWZ5IG5wYy4KK05vdGUgdGhhdCBuY3Vyc2VzIGltcGxlbWVudHMgdGhlIHRlcm1jYXAtY29tcGF0aWJsZSBcZkJQQ1xmUiB2YXJpYWJsZTsKK3Rob3VnaCB0aGUgYXBwbGljYXRpb24gbWF5IHNldCB0aGlzIHZhbHVlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuCithIG51bGwsIG5jdXJzZXMgd2lsbCB0ZXN0IFxmQm5wY1xmUiBmaXJzdCBhbmQgdXNlIG5hcG1zIGlmIHRoZSB0ZXJtaW5hbAoraGFzIG5vIHBhZCBjaGFyYWN0ZXIuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBjYW4gbW92ZSB1cCBvciBkb3duIGhhbGYgYSBsaW5lLAordGhpcyBjYW4gYmUgaW5kaWNhdGVkIHdpdGgKKy5CIGh1CisoaGFsZi1saW5lIHVwKQorYW5kCisuQiBoZAorKGhhbGYtbGluZSBkb3duKS4KK1RoaXMgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3Igc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIG9uIGhhcmQtY29weSB0ZXJtaW5hbHMuCitJZiBhIGhhcmQtY29weSB0ZXJtaW5hbCBjYW4gZWplY3QgdG8gdGhlIG5leHQgcGFnZSAoZm9ybSBmZWVkKSwgZ2l2ZSB0aGlzIGFzCisuQiBmZgorKHVzdWFsbHkgY29udHJvbCBMKS4KKy5QUAorSWYgdGhlcmUgaXMgYSBjb21tYW5kIHRvIHJlcGVhdCBhIGdpdmVuIGNoYXJhY3RlciBhIGdpdmVuIG51bWJlciBvZgordGltZXMgKHRvIHNhdmUgdGltZSB0cmFuc21pdHRpbmcgYSBsYXJnZSBudW1iZXIgb2YgaWRlbnRpY2FsIGNoYXJhY3RlcnMpCit0aGlzIGNhbiBiZSBpbmRpY2F0ZWQgd2l0aCB0aGUgcGFyYW1ldGVyaXplZCBzdHJpbmcKKy5CUiByZXAgLgorVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgY2hhcmFjdGVyIHRvIGJlIHJlcGVhdGVkIGFuZCB0aGUgc2Vjb25kCitpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCBpdC4KK1RodXMsIHRwYXJtKHJlcGVhdF9jaGFyLCAneCcsIDEwKSBpcyB0aGUgc2FtZSBhcyBgeHh4eHh4eHh4eCcuCisuUFAKK0lmIHRoZSB0ZXJtaW5hbCBoYXMgYSBzZXR0YWJsZSBjb21tYW5kIGNoYXJhY3Rlciwgc3VjaCBhcyB0aGUgXHMtMVRFS1RST05JWFxzKzEgNDAyNSwKK3RoaXMgY2FuIGJlIGluZGljYXRlZCB3aXRoCisuQlIgY21kY2ggLgorQSBwcm90b3R5cGUgY29tbWFuZCBjaGFyYWN0ZXIgaXMgY2hvc2VuIHdoaWNoIGlzIHVzZWQgaW4gYWxsIGNhcGFiaWxpdGllcy4KK1RoaXMgY2hhcmFjdGVyIGlzIGdpdmVuIGluIHRoZQorLkIgY21kY2gKK2NhcGFiaWxpdHkgdG8gaWRlbnRpZnkgaXQuCitUaGUgZm9sbG93aW5nIGNvbnZlbnRpb24gaXMgc3VwcG9ydGVkIG9uIHNvbWUgVU5JWCBzeXN0ZW1zOgorVGhlIGVudmlyb25tZW50IGlzIHRvIGJlIHNlYXJjaGVkIGZvciBhCisuQiBDQwordmFyaWFibGUsIGFuZCBpZiBmb3VuZCwgYWxsCitvY2N1cnJlbmNlcyBvZiB0aGUgcHJvdG90eXBlIGNoYXJhY3RlciBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgY2hhcmFjdGVyCitpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisuUFAKK1Rlcm1pbmFsIGRlc2NyaXB0aW9ucyB0aGF0IGRvIG5vdCByZXByZXNlbnQgYSBzcGVjaWZpYyBraW5kIG9mIGtub3duCit0ZXJtaW5hbCwgc3VjaCBhcworLklSIHN3aXRjaCAsCisuSVIgZGlhbHVwICwKKy5JUiBwYXRjaCAsCithbmQKKy5JUiBuZXR3b3JrICwKK3Nob3VsZCBpbmNsdWRlIHRoZQorLkIgZ24KKyhnZW5lcmljKSBjYXBhYmlsaXR5IHNvIHRoYXQgcHJvZ3JhbXMgY2FuIGNvbXBsYWluIHRoYXQgdGhleSBkbyBub3Qga25vdworaG93IHRvIHRhbGsgdG8gdGhlIHRlcm1pbmFsLgorKFRoaXMgY2FwYWJpbGl0eSBkb2VzIG5vdCBhcHBseSB0bworLkkgdmlydHVhbAordGVybWluYWwgZGVzY3JpcHRpb25zIGZvciB3aGljaCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBhcmUga25vd24uKQorLlBQCitJZiB0aGUgdGVybWluYWwgaGFzIGEgYGBtZXRhIGtleScnIHdoaWNoIGFjdHMgYXMgYSBzaGlmdCBrZXksCitzZXR0aW5nIHRoZSA4dGggYml0IG9mIGFueSBjaGFyYWN0ZXIgdHJhbnNtaXR0ZWQsIHRoaXMgZmFjdCBjYW4KK2JlIGluZGljYXRlZCB3aXRoCisuQlIga20gLgorT3RoZXJ3aXNlLCBzb2Z0d2FyZSB3aWxsIGFzc3VtZSB0aGF0IHRoZSA4dGggYml0IGlzIHBhcml0eSBhbmQgaXQKK3dpbGwgdXN1YWxseSBiZSBjbGVhcmVkLgorSWYgc3RyaW5ncyBleGlzdCB0byB0dXJuIHRoaXMgYGBtZXRhIG1vZGUnJyBvbiBhbmQgb2ZmLCB0aGV5CitjYW4gYmUgZ2l2ZW4gYXMKKy5CIHNtbQorYW5kCisuQlIgcm1tIC4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIGhhcyBtb3JlIGxpbmVzIG9mIG1lbW9yeSB0aGFuIHdpbGwgZml0IG9uIHRoZSBzY3JlZW4KK2F0IG9uY2UsIHRoZSBudW1iZXIgb2YgbGluZXMgb2YgbWVtb3J5IGNhbiBiZSBpbmRpY2F0ZWQgd2l0aAorLkJSIGxtIC4KK0EgdmFsdWUgb2YKKy5CUiBsbSAjMAoraW5kaWNhdGVzIHRoYXQgdGhlIG51bWJlciBvZiBsaW5lcyBpcyBub3QgZml4ZWQsCitidXQgdGhhdCB0aGVyZSBpcyBzdGlsbCBtb3JlIG1lbW9yeSB0aGFuIGZpdHMgb24gdGhlIHNjcmVlbi4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIGlzIG9uZSBvZiB0aG9zZSBzdXBwb3J0ZWQgYnkgdGhlIFxzLTFVTklYXHMrMSB2aXJ0dWFsCit0ZXJtaW5hbCBwcm90b2NvbCwgdGhlIHRlcm1pbmFsIG51bWJlciBjYW4gYmUgZ2l2ZW4gYXMKKy5CUiB2dCAuCisuUFAKK01lZGlhIGNvcHkKK3N0cmluZ3Mgd2hpY2ggY29udHJvbCBhbiBhdXhpbGlhcnkgcHJpbnRlciBjb25uZWN0ZWQgdG8gdGhlIHRlcm1pbmFsCitjYW4gYmUgZ2l2ZW4gYXMKKy5CUiBtYzAgOgorcHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzY3JlZW4sCisuQlIgbWM0IDoKK3R1cm4gb2ZmIHRoZSBwcmludGVyLCBhbmQKKy5CUiBtYzUgOgordHVybiBvbiB0aGUgcHJpbnRlci4KK1doZW4gdGhlIHByaW50ZXIgaXMgb24sIGFsbCB0ZXh0IHNlbnQgdG8gdGhlIHRlcm1pbmFsIHdpbGwgYmUgc2VudAordG8gdGhlIHByaW50ZXIuCitJdCBpcyB1bmRlZmluZWQgd2hldGhlciB0aGUgdGV4dCBpcyBhbHNvIGRpc3BsYXllZCBvbiB0aGUgdGVybWluYWwgc2NyZWVuCit3aGVuIHRoZSBwcmludGVyIGlzIG9uLgorQSB2YXJpYXRpb24KKy5CIG1jNXAKK3Rha2VzIG9uZSBwYXJhbWV0ZXIsIGFuZCBsZWF2ZXMgdGhlIHByaW50ZXIgb24gZm9yIGFzIG1hbnkgY2hhcmFjdGVycworYXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIHRoZW4gdHVybnMgdGhlIHByaW50ZXIgb2ZmLgorVGhlIHBhcmFtZXRlciBzaG91bGQgbm90IGV4Y2VlZCAyNTUuCitBbGwgdGV4dCwgaW5jbHVkaW5nCisuQlIgbWM0ICwKK2lzIHRyYW5zcGFyZW50bHkgcGFzc2VkIHRvIHRoZSBwcmludGVyIHdoaWxlIGFuCisuQiBtYzVwCitpcyBpbiBlZmZlY3QuCisuUFAKKy5TUyBHbGl0Y2hlcyBhbmQgQnJhaW5kYW1hZ2UKKy5QUAorSGF6ZWx0aW5lIHRlcm1pbmFscywgd2hpY2ggZG8gbm90IGFsbG93IGB+JyBjaGFyYWN0ZXJzIHRvIGJlIGRpc3BsYXllZCBzaG91bGQKK2luZGljYXRlIFxmQmh6XGZSLgorLlBQCitUZXJtaW5hbHMgd2hpY2ggaWdub3JlIGEgbGluZS1mZWVkIGltbWVkaWF0ZWx5IGFmdGVyIGFuIFxmQmFtXGZSIHdyYXAsCitzdWNoIGFzIHRoZSBDb25jZXB0IGFuZCB2dDEwMCwKK3Nob3VsZCBpbmRpY2F0ZSBcZkJ4ZW5sXGZSLgorLlBQCitJZgorLkIgZWwKK2lzIHJlcXVpcmVkIHRvIGdldCByaWQgb2Ygc3RhbmRvdXQKKyhpbnN0ZWFkIG9mIG1lcmVseSB3cml0aW5nIG5vcm1hbCB0ZXh0IG9uIHRvcCBvZiBpdCksCitcZkJ4aHBcZlAgc2hvdWxkIGJlIGdpdmVuLgorLlBQCitUZWxlcmF5IHRlcm1pbmFscywgd2hlcmUgdGFicyB0dXJuIGFsbCBjaGFyYWN0ZXJzIG1vdmVkIG92ZXIgdG8gYmxhbmtzLAorc2hvdWxkIGluZGljYXRlIFxmQnh0XGZSIChkZXN0cnVjdGl2ZSB0YWJzKS4KK05vdGU6IHRoZSB2YXJpYWJsZSBpbmRpY2F0aW5nIHRoaXMgaXMgbm93IGBkZXN0X3RhYnNfbWFnaWNfc21zbyc7IGluCitvbGRlciB2ZXJzaW9ucywgaXQgd2FzIHRlbGVyYXlfZ2xpdGNoLgorVGhpcyBnbGl0Y2ggaXMgYWxzbyB0YWtlbiB0byBtZWFuIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHBvc2l0aW9uCit0aGUgY3Vyc29yIG9uIHRvcCBvZiBhIGBgbWFnaWMgY29va2llJycsCit0aGF0IHRvIGVyYXNlIHN0YW5kb3V0IG1vZGUgaXQgaXMgaW5zdGVhZCBuZWNlc3NhcnkgdG8gdXNlCitkZWxldGUgYW5kIGluc2VydCBsaW5lLgorVGhlIG5jdXJzZXMgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGlzIGdsaXRjaC4KKy5QUAorVGhlIEJlZWhpdmUgU3VwZXJiZWUsIHdoaWNoIGlzIHVuYWJsZSB0byBjb3JyZWN0bHkgdHJhbnNtaXQgdGhlIGVzY2FwZQorb3IgY29udHJvbCBDIGNoYXJhY3RlcnMsIGhhcworLkJSIHhzYiAsCitpbmRpY2F0aW5nIHRoYXQgdGhlIGYxIGtleSBpcyB1c2VkIGZvciBlc2NhcGUgYW5kIGYyIGZvciBjb250cm9sIEMuCisoT25seSBjZXJ0YWluIFN1cGVyYmVlcyBoYXZlIHRoaXMgcHJvYmxlbSwgZGVwZW5kaW5nIG9uIHRoZSBST00uKQorTm90ZSB0aGF0IGluIG9sZGVyIHRlcm1pbmZvIHZlcnNpb25zLCB0aGlzIGNhcGFiaWxpdHkgd2FzIGNhbGxlZAorYGJlZWhpdmVfZ2xpdGNoJzsgaXQgaXMgbm93IGBub19lc2NfY3RsX2MnLgorLlBQCitPdGhlciBzcGVjaWZpYyB0ZXJtaW5hbCBwcm9ibGVtcyBtYXkgYmUgY29ycmVjdGVkIGJ5IGFkZGluZyBtb3JlCitjYXBhYmlsaXRpZXMgb2YgdGhlIGZvcm0gXGZCeFxmUlxmSXhcZlIuCisuUFAKKy5TUyBTaW1pbGFyIFRlcm1pbmFscworLlBQCitJZiB0aGVyZSBhcmUgdHdvIHZlcnkgc2ltaWxhciB0ZXJtaW5hbHMsIG9uZSAodGhlIHZhcmlhbnQpIGNhbiBiZSBkZWZpbmVkIGFzCitiZWluZyBqdXN0IGxpa2UgdGhlIG90aGVyICh0aGUgYmFzZSkgd2l0aCBjZXJ0YWluIGV4Y2VwdGlvbnMuCitJbiB0aGUKK2RlZmluaXRpb24gb2YgdGhlIHZhcmlhbnQsIHRoZSBzdHJpbmcgY2FwYWJpbGl0eSBcZkJ1c2VcZlIgY2FuIGJlIGdpdmVuIHdpdGgKK3RoZSBuYW1lIG9mIHRoZSBiYXNlIHRlcm1pbmFsLgorVGhlIGNhcGFiaWxpdGllcyBnaXZlbiBiZWZvcmUKKy5CIHVzZQorb3ZlcnJpZGUgdGhvc2UgaW4gdGhlIGJhc2UgdHlwZSBuYW1lZCBieQorLkJSIHVzZSAuCitJZiB0aGVyZSBhcmUgbXVsdGlwbGUgXGZCdXNlXGZSIGNhcGFiaWxpdGllcywgdGhleSBhcmUgbWVyZ2VkIGluIHJldmVyc2Ugb3JkZXIuCitUaGF0IGlzLCB0aGUgcmlnaHRtb3N0IFxmQnVzZVxmUiByZWZlcmVuY2UgaXMgcHJvY2Vzc2VkIGZpcnN0LCB0aGVuIHRoZSBvbmUgdG8KK2l0cyBsZWZ0LCBhbmQgc28gZm9ydGguCitDYXBhYmlsaXRpZXMgZ2l2ZW4gZXhwbGljaXRseSBpbiB0aGUgZW50cnkgb3ZlcnJpZGUKK3Rob3NlIGJyb3VnaHQgaW4gYnkgXGZCdXNlXGZSIHJlZmVyZW5jZXMuCisuUFAKK0EgY2FwYWJpbGl0eSBjYW4gYmUgY2FuY2VsZWQgYnkgcGxhY2luZyBcZkJ4eEBcZlIgdG8gdGhlIGxlZnQgb2YgdGhlCit1c2UgcmVmZXJlbmNlIHRoYXQgaW1wb3J0cyBpdCwgd2hlcmUgXGZJeHhcZlAgaXMgdGhlIGNhcGFiaWxpdHkuCitGb3IgZXhhbXBsZSwgdGhlIGVudHJ5CisuUFAKKwkyNjIxLW5sLCBzbWt4QCwgcm1reEAsIHVzZT0yNjIxLAorLlBQCitkZWZpbmVzIGEgMjYyMS1ubCB0aGF0IGRvZXMgbm90IGhhdmUgdGhlIFxmQnNta3hcZlIgb3IgXGZCcm1reFxmUiBjYXBhYmlsaXRpZXMsCithbmQgaGVuY2UgZG9lcyBub3QgdHVybiBvbiB0aGUgZnVuY3Rpb24ga2V5IGxhYmVscyB3aGVuIGluIHZpc3VhbCBtb2RlLgorVGhpcyBpcyB1c2VmdWwgZm9yIGRpZmZlcmVudCBtb2RlcyBmb3IgYSB0ZXJtaW5hbCwgb3IgZm9yIGRpZmZlcmVudAordXNlciBwcmVmZXJlbmNlcy4KKy5QUAorLlNTIFBpdGZhbGxzIG9mIExvbmcgRW50cmllcworLlBQCitMb25nIHRlcm1pbmZvIGVudHJpZXMgYXJlIHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbTsgdG8gZGF0ZSwgbm8gZW50cnkgaGFzIGV2ZW4KK2FwcHJvYWNoZWQgdGVybWluZm8ncyA0MDk2LWJ5dGUgc3RyaW5nLXRhYmxlIG1heGltdW0uCitVbmZvcnR1bmF0ZWx5LCB0aGUgdGVybWNhcAordHJhbnNsYXRpb25zIGFyZSBtdWNoIG1vcmUgc3RyaWN0bHkgbGltaXRlZCAodG8gMTAyMyBieXRlcyksIHRodXMgdGVybWNhcCB0cmFuc2xhdGlvbnMKK29mIGxvbmcgdGVybWluZm8gZW50cmllcyBjYW4gY2F1c2UgcHJvYmxlbXMuCisuUFAKK1RoZSBtYW4gcGFnZXMgZm9yIDQuM0JTRCBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgXGZCdGdldGVudCgpXGZQIGluc3RydWN0IHRoZSB1c2VyIHRvCithbGxvY2F0ZSBhIDEwMjQtYnl0ZSBidWZmZXIgZm9yIHRoZSB0ZXJtY2FwIGVudHJ5LgorVGhlIGVudHJ5IGdldHMgbnVsbC10ZXJtaW5hdGVkIGJ5Cit0aGUgdGVybWNhcCBsaWJyYXJ5LCBzbyB0aGF0IG1ha2VzIHRoZSBtYXhpbXVtIHNhZmUgbGVuZ3RoIGZvciBhIHRlcm1jYXAgZW50cnkKKzFrLTEgKDEwMjMpIGJ5dGVzLgorRGVwZW5kaW5nIG9uIHdoYXQgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgdGVybWNhcCBsaWJyYXJ5CitiZWluZyB1c2VkIGRvZXMsIGFuZCB3aGVyZSBpbiB0aGUgdGVybWNhcCBmaWxlIHRoZSB0ZXJtaW5hbCB0eXBlIHRoYXQgXGZCdGdldGVudCgpXGZQCitpcyBzZWFyY2hpbmcgZm9yIGlzLCBzZXZlcmFsIGJhZCB0aGluZ3MgY2FuIGhhcHBlbi4KKy5QUAorU29tZSB0ZXJtY2FwIGxpYnJhcmllcyBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSBvciBleGl0IGlmIHRoZXkgZmluZCBhbgorZW50cnkgdGhhdCdzIGxvbmdlciB0aGFuIDEwMjMgYnl0ZXM7IG90aGVycyBkbyBub3Q7IG90aGVycyB0cnVuY2F0ZSB0aGUKK2VudHJpZXMgdG8gMTAyMyBieXRlcy4KK1NvbWUgYXBwbGljYXRpb24gcHJvZ3JhbXMgYWxsb2NhdGUgbW9yZSB0aGFuCit0aGUgcmVjb21tZW5kZWQgMUsgZm9yIHRoZSB0ZXJtY2FwIGVudHJ5OyBvdGhlcnMgZG8gbm90LgorLlBQCitFYWNoIHRlcm1jYXAgZW50cnkgaGFzIHR3byBpbXBvcnRhbnQgc2l6ZXMgYXNzb2NpYXRlZCB3aXRoIGl0OiBiZWZvcmUKKyJ0YyIgZXhwYW5zaW9uLCBhbmQgYWZ0ZXIgInRjIiBleHBhbnNpb24uCisidGMiIGlzIHRoZSBjYXBhYmlsaXR5IHRoYXQKK3RhY2tzIG9uIGFub3RoZXIgdGVybWNhcCBlbnRyeSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG9uZSwgdG8gYWRkCitvbiBpdHMgY2FwYWJpbGl0aWVzLgorSWYgYSB0ZXJtY2FwIGVudHJ5IGRvZXMgbm90IHVzZSB0aGUgInRjIgorY2FwYWJpbGl0eSwgdGhlbiBvZiBjb3Vyc2UgdGhlIHR3byBsZW5ndGhzIGFyZSB0aGUgc2FtZS4KKy5QUAorVGhlICJiZWZvcmUgdGMgZXhwYW5zaW9uIiBsZW5ndGggaXMgdGhlIG1vc3QgaW1wb3J0YW50IG9uZSwgYmVjYXVzZSBpdAorYWZmZWN0cyBtb3JlIHRoYW4ganVzdCB1c2VycyBvZiB0aGF0IHBhcnRpY3VsYXIgdGVybWluYWwuCitUaGlzIGlzIHRoZQorbGVuZ3RoIG9mIHRoZSBlbnRyeSBhcyBpdCBleGlzdHMgaW4gL2V0Yy90ZXJtY2FwLCBtaW51cyB0aGUKK2JhY2tzbGFzaC1uZXdsaW5lIHBhaXJzLCB3aGljaCBcZkJ0Z2V0ZW50KClcZlAgc3RyaXBzIG91dCB3aGlsZSByZWFkaW5nIGl0LgorU29tZSB0ZXJtY2FwIGxpYnJhcmllcyBzdHJpcCBvZmYgdGhlIGZpbmFsIG5ld2xpbmUsIHRvbyAoR05VIHRlcm1jYXAgZG9lcyBub3QpLgorTm93IHN1cHBvc2U6CisuVFAgNQorKgorYSB0ZXJtY2FwIGVudHJ5IGJlZm9yZSBleHBhbnNpb24gaXMgbW9yZSB0aGFuIDEwMjMgYnl0ZXMgbG9uZywKKy5UUCA1CisqCithbmQgdGhlIGFwcGxpY2F0aW9uIGhhcyBvbmx5IGFsbG9jYXRlZCBhIDFrIGJ1ZmZlciwKKy5UUCA1CisqCithbmQgdGhlIHRlcm1jYXAgbGlicmFyeSAobGlrZSB0aGUgb25lIGluIEJTRC9PUyAxLjEgYW5kIEdOVSkgcmVhZHMKK3RoZSB3aG9sZSBlbnRyeSBpbnRvIHRoZSBidWZmZXIsIG5vIG1hdHRlciB3aGF0IGl0cyBsZW5ndGgsIHRvIHNlZQoraWYgaXQgaXMgdGhlIGVudHJ5IGl0IHdhbnRzLAorLlRQIDUKKyoKK2FuZCBcZkJ0Z2V0ZW50KClcZlAgaXMgc2VhcmNoaW5nIGZvciBhIHRlcm1pbmFsIHR5cGUgdGhhdCBlaXRoZXIgaXMgdGhlCitsb25nIGVudHJ5LCBhcHBlYXJzIGluIHRoZSB0ZXJtY2FwIGZpbGUgYWZ0ZXIgdGhlIGxvbmcgZW50cnksIG9yCitkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGZpbGUgYXQgYWxsIChzbyB0aGF0IFxmQnRnZXRlbnQoKVxmUCBoYXMgdG8gc2VhcmNoCit0aGUgd2hvbGUgdGVybWNhcCBmaWxlKS4KKy5QUAorVGhlbiBcZkJ0Z2V0ZW50KClcZlAgd2lsbCBvdmVyd3JpdGUgbWVtb3J5LCBwZXJoYXBzIGl0cyBzdGFjaywgYW5kIHByb2JhYmx5IGNvcmUgZHVtcAordGhlIHByb2dyYW0uCitQcm9ncmFtcyBsaWtlIHRlbG5ldCBhcmUgcGFydGljdWxhcmx5IHZ1bG5lcmFibGU7IG1vZGVybiB0ZWxuZXRzCitwYXNzIGFsb25nIHZhbHVlcyBsaWtlIHRoZSB0ZXJtaW5hbCB0eXBlIGF1dG9tYXRpY2FsbHkuCitUaGUgcmVzdWx0cyBhcmUgYWxtb3N0CithcyB1bmRlc2lyYWJsZSB3aXRoIGEgdGVybWNhcCBsaWJyYXJ5LCBsaWtlIFN1bk9TIDQuMS4zIGFuZCBVbHRyaXggNC40LCB0aGF0CitwcmludHMgd2FybmluZyBtZXNzYWdlcyB3aGVuIGl0IHJlYWRzIGFuIG92ZXJseSBsb25nIHRlcm1jYXAgZW50cnkuCitJZiBhCit0ZXJtY2FwIGxpYnJhcnkgdHJ1bmNhdGVzIGxvbmcgZW50cmllcywgbGlrZSBPU0YvMSAzLjAsIGl0IGlzIGltbXVuZSB0byBkeWluZworaGVyZSBidXQgd2lsbCByZXR1cm4gaW5jb3JyZWN0IGRhdGEgZm9yIHRoZSB0ZXJtaW5hbC4KKy5QUAorVGhlICJhZnRlciB0YyBleHBhbnNpb24iIGxlbmd0aCB3aWxsIGhhdmUgYSBzaW1pbGFyIGVmZmVjdCB0byB0aGUKK2Fib3ZlLCBidXQgb25seSBmb3IgcGVvcGxlIHdobyBhY3R1YWxseSBzZXQgVEVSTSB0byB0aGF0IHRlcm1pbmFsCit0eXBlLCBzaW5jZSBcZkJ0Z2V0ZW50KClcZlAgb25seSBkb2VzICJ0YyIgZXhwYW5zaW9uIG9uY2UgaXQgaXMgZm91bmQgdGhlCit0ZXJtaW5hbCB0eXBlIGl0IHdhcyBsb29raW5nIGZvciwgbm90IHdoaWxlIHNlYXJjaGluZy4KKy5QUAorSW4gc3VtbWFyeSwgYSB0ZXJtY2FwIGVudHJ5IHRoYXQgaXMgbG9uZ2VyIHRoYW4gMTAyMyBieXRlcyBjYW4gY2F1c2UsCitvbiB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiB0ZXJtY2FwIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zLCBhIGNvcmUKK2R1bXAsIHdhcm5pbmdzLCBvciBpbmNvcnJlY3Qgb3BlcmF0aW9uLgorSWYgaXQgaXMgdG9vIGxvbmcgZXZlbiBiZWZvcmUKKyJ0YyIgZXhwYW5zaW9uLCBpdCB3aWxsIGhhdmUgdGhpcyBlZmZlY3QgZXZlbiBmb3IgdXNlcnMgb2Ygc29tZSBvdGhlcgordGVybWluYWwgdHlwZXMgYW5kIHVzZXJzIHdob3NlIFRFUk0gdmFyaWFibGUgZG9lcyBub3QgaGF2ZSBhIHRlcm1jYXAKK2VudHJ5LgorLlBQCitXaGVuIGluIC1DICh0cmFuc2xhdGUgdG8gdGVybWNhcCkgbW9kZSwgdGhlIFxmQm5jdXJzZXNcZlIgaW1wbGVtZW50YXRpb24gb2YKK1xmQkBUSUNAXGZSKDFNKSBpc3N1ZXMgd2FybmluZyBtZXNzYWdlcyB3aGVuIHRoZSBwcmUtdGMgbGVuZ3RoIG9mIGEgdGVybWNhcAordHJhbnNsYXRpb24gaXMgdG9vIGxvbmcuCitUaGUgLWMgKGNoZWNrKSBvcHRpb24gYWxzbyBjaGVja3MgcmVzb2x2ZWQgKGFmdGVyIHRjCitleHBhbnNpb24pIGxlbmd0aHMuCisuU1MgQmluYXJ5IENvbXBhdGliaWxpdHkKK0l0IGlzIG5vdCB3aXNlIHRvIGNvdW50IG9uIHBvcnRhYmlsaXR5IG9mIGJpbmFyeSB0ZXJtaW5mbyBlbnRyaWVzIGJldHdlZW4KK2NvbW1lcmNpYWwgVU5JWCB2ZXJzaW9ucy4KK1RoZSBwcm9ibGVtIGlzIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byB2ZXJzaW9ucworb2YgdGVybWluZm8gKHVuZGVyIEhQLVVYIGFuZCBBSVgpIHdoaWNoIGRpdmVyZ2VkIGZyb20gU3lzdGVtIFYgdGVybWluZm8gYWZ0ZXIKK1NWcjEsIGFuZCBoYXZlIGFkZGVkIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXMgdG8gdGhlIHN0cmluZyB0YWJsZSB0aGF0IChpbiB0aGUKK2JpbmFyeSBmb3JtYXQpIGNvbGxpZGUgd2l0aCBTeXN0ZW0gViBhbmQgWFNJIEN1cnNlcyBleHRlbnNpb25zLgorLlNIIEVYVEVOU0lPTlMKK1NvbWUgU1ZyNCBcZkJjdXJzZXNcZlIgaW1wbGVtZW50YXRpb25zLCBhbmQgYWxsIHByZXZpb3VzIHRvIFNWcjQsIGRvIG5vdAoraW50ZXJwcmV0IHRoZSAlQSBhbmQgJU8gb3BlcmF0b3JzIGluIHBhcmFtZXRlciBzdHJpbmdzLgorLlBQCitTVnI0L1hQRzQgZG8gbm90IHNwZWNpZnkgd2hldGhlciBcZkJtc2dyXGZSIGxpY2Vuc2VzIG1vdmVtZW50IHdoaWxlIGluCithbiBhbHRlcm5hdGUtY2hhcmFjdGVyLXNldCBtb2RlIChzdWNoIG1vZGVzIG1heSwgYW1vbmcgb3RoZXIgdGhpbmdzLCBtYXAKK0NSIGFuZCBOTCB0byBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90IHRyaWdnZXIgbG9jYWwgbW90aW9ucykuCitUaGUgXGZCbmN1cnNlc1xmUiBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIFxmQm1zZ3JcZlIgaW4gXGZCQUxUQ0hBUlNFVFxmUgorbW9kZS4KK1RoaXMgcmFpc2VzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIFhQRzQKK2ltcGxlbWVudGF0aW9uIG1ha2luZyB0aGUgb3Bwb3NpdGUgaW50ZXJwcmV0YXRpb24gbWF5IG5lZWQgdGVybWluZm8KK2VudHJpZXMgbWFkZSBmb3IgXGZCbmN1cnNlc1xmUiB0byBoYXZlIFxmQm1zZ3JcZlIgdHVybmVkIG9mZi4KKy5QUAorVGhlIFxmQm5jdXJzZXNcZlIgbGlicmFyeSBoYW5kbGVzIGluc2VydC1jaGFyYWN0ZXIgYW5kIGluc2VydC1jaGFyYWN0ZXIgbW9kZXMKK2luIGEgc2xpZ2h0bHkgbm9uLXN0YW5kYXJkIHdheSB0byBnZXQgYmV0dGVyIHVwZGF0ZSBlZmZpY2llbmN5LgorU2VlCit0aGUgXGZCSW5zZXJ0L0RlbGV0ZSBDaGFyYWN0ZXJcZlIgc3Vic2VjdGlvbiBhYm92ZS4KKy5QUAorVGhlIHBhcmFtZXRlciBzdWJzdGl0dXRpb25zIGZvciBcZkJzZXRfY2xvY2tcZlIgYW5kIFxmQmRpc3BsYXlfY2xvY2tcZlIgYXJlCitub3QgZG9jdW1lbnRlZCBpbiBTVnI0IG9yIHRoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkLgorVGhleSBhcmUgZGVkdWNlZCBmcm9tIHRoZQorZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEFUJlQgNTA1IHRlcm1pbmFsLgorLlBQCitCZSBjYXJlZnVsIGFzc2lnbmluZyB0aGUgXGZCa21vdXNcZlIgY2FwYWJpbGl0eS4KK1RoZSBcZkJuY3Vyc2VzXGZSIHdhbnRzIHRvCitpbnRlcnByZXQgaXQgYXMgXGZCS0VZX01PVVNFXGZSLCBmb3IgdXNlIGJ5IHRlcm1pbmFscyBhbmQgZW11bGF0b3JzIGxpa2UgeHRlcm0KK3RoYXQgY2FuIHJldHVybiBtb3VzZS10cmFja2luZyBpbmZvcm1hdGlvbiBpbiB0aGUga2V5Ym9hcmQtaW5wdXQgc3RyZWFtLgorLlBQCitEaWZmZXJlbnQgY29tbWVyY2lhbCBwb3J0cyBvZiB0ZXJtaW5mbyBhbmQgY3Vyc2VzIHN1cHBvcnQgZGlmZmVyZW50IHN1YnNldHMgb2YKK3RoZSBYU0kgQ3Vyc2VzIHN0YW5kYXJkIGFuZCAoaW4gc29tZSBjYXNlcykgZGlmZmVyZW50IGV4dGVuc2lvbiBzZXRzLgorSGVyZQoraXMgYSBzdW1tYXJ5LCBhY2N1cmF0ZSBhcyBvZiBPY3RvYmVyIDE5OTU6CisuUFAKK1xmQlNWUjQsIFNvbGFyaXMsIG5jdXJzZXNcZlIgLS0KK1RoZXNlIHN1cHBvcnQgYWxsIFNWcjQgY2FwYWJpbGl0aWVzLgorLlBQCitcZkJTR0lcZlIgLS0KK1N1cHBvcnRzIHRoZSBTVnI0IHNldCwgYWRkcyBvbmUgdW5kb2N1bWVudGVkIGV4dGVuZGVkIHN0cmluZworY2FwYWJpbGl0eSAoXGZCc2V0X3BnbGVuXGZSKS4KKy5QUAorXGZCU1ZyMSwgVWx0cml4XGZSIC0tCitUaGVzZSBzdXBwb3J0IGEgcmVzdHJpY3RlZCBzdWJzZXQgb2YgdGVybWluZm8gY2FwYWJpbGl0aWVzLgorVGhlIGJvb2xlYW5zCitlbmQgd2l0aCBcZkJ4b25feG9mZlxmUjsgdGhlIG51bWVyaWNzIHdpdGggXGZCd2lkdGhfc3RhdHVzX2xpbmVcZlI7IGFuZCB0aGUKK3N0cmluZ3Mgd2l0aCBcZkJwcnRyX25vblxmUi4KKy5QUAorXGZCSFAvVVhcZlIgLS0KK1N1cHBvcnRzIHRoZSBTVnIxIHN1YnNldCwgcGx1cyB0aGUgU1ZyWzIzNF0gbnVtZXJpY3MgXGZCbnVtX2xhYmVsc1xmUiwKK1xmQmxhYmVsX2hlaWdodFxmUiwgXGZCbGFiZWxfd2lkdGhcZlIsIHBsdXMgZnVuY3Rpb24ga2V5cyAxMSB0aHJvdWdoIDYzLCBwbHVzCitcZkJwbGFiX25vcm1cZlIsIFxmQmxhYmVsX29uXGZSLCBhbmQgXGZCbGFiZWxfb2ZmXGZSLCBwbHVzIHNvbWUgaW5jb21wYXRpYmxlCitleHRlbnNpb25zIGluIHRoZSBzdHJpbmcgdGFibGUuCisuUFAKK1xmQkFJWFxmUiAtLQorU3VwcG9ydHMgdGhlIFNWcjEgc3Vic2V0LCBwbHVzIGZ1bmN0aW9uIGtleXMgMTEgdGhyb3VnaCA2MywgcGx1cyBhIG51bWJlcgorb2YgaW5jb21wYXRpYmxlIHN0cmluZyB0YWJsZSBleHRlbnNpb25zLgorLlBQCitcZkJPU0ZcZlIgLS0KK1N1cHBvcnRzIGJvdGggdGhlIFNWcjQgc2V0IGFuZCB0aGUgQUlYIGV4dGVuc2lvbnMuCisuU0ggRklMRVMKKy5UUCAyNQorXCpkLz8vKgorZmlsZXMgY29udGFpbmluZyB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMKKy5TSCBTRUUgQUxTTworXGZCQFRJQ0BcZlIoMU0pLAorXGZCQElORk9DTVBAXGZSKDFNKSwKK1xmQmN1cnNlc1xmUigzWCksCitcZkJwcmludGZcZlIoMyksCitcZkJ0ZXJtXGZSKFwqbikuCisuU0ggQVVUSE9SUworWmV5ZCBNLiBCZW4tSGFsaW0sIEVyaWMgUy4gUmF5bW9uZCwgVGhvbWFzIEUuIERpY2tleS4KK0Jhc2VkIG9uIHBjdXJzZXMgYnkgUGF2ZWwgQ3VydGlzLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vdGljLjFtIGIvbmN1cnNlcy01LjcvbWFuL3RpYy4xbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNlYzMyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL3RpYy4xbQpAQCAtMCwwICsxLDMzMSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiB0aWMuMW0sdiAxLjQ0IDIwMDYvMTIvMjQgMTc6NTk6MTEgdG9tIEV4cCAkCisuVEggQFRJQ0AgMU0gIiIKKy5kcyBuIDUKKy5kcyBkIEBURVJNSU5GT0AKKy5TSCBOQU1FCitcZkJ0aWNcZlIgLSB0aGUgXGZJdGVybWluZm9cZlIgZW50cnktZGVzY3JpcHRpb24gY29tcGlsZXIKKy5TSCBTWU5PUFNJUworXGZCdGljXGZSCitbXGZCLVwKKzFcCitDXAorR1wKK0lcCitMXAorTlwKK1RcCitVXAorVlwKK2FcCitjXAorZlwKK2dcCityXAorc1wKK3RcCit4XAorXGZSXQorW1xmQi1lXGZSIFxmSW5hbWVzXGZSXQorW1xmQi1vXGZSIFxmSWRpclxmUl0KK1tcZkItUlxmUiBcZklzdWJzZXRcZlJdCitbXGZCLXZcZlJbXGZJblxmUl1dCitbXGZCLXdcZlJbXGZJblxmUl1dCitcZklmaWxlXGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorVGhlIGNvbW1hbmQgXGZCdGljXGZSIHRyYW5zbGF0ZXMgYSBcZkJ0ZXJtaW5mb1xmUiBmaWxlIGZyb20gc291cmNlCitmb3JtYXQgaW50byBjb21waWxlZCBmb3JtYXQuICBUaGUgY29tcGlsZWQgZm9ybWF0IGlzIG5lY2Vzc2FyeSBmb3IgdXNlIHdpdGgKK3RoZSBsaWJyYXJ5IHJvdXRpbmVzIGluIFxmQm5jdXJzZXNcZlIoM1gpLgorLlBQCitUaGUgcmVzdWx0cyBhcmUgbm9ybWFsbHkgcGxhY2VkIGluIHRoZSBzeXN0ZW0gdGVybWluZm8KK2RpcmVjdG9yeSBcZkJcKmRcZlIuICBUaGVyZSBhcmUgdHdvIHdheXMgdG8gY2hhbmdlIHRoaXMgYmVoYXZpb3IuCisuUFAKK0ZpcnN0LCB5b3UgbWF5IG92ZXJyaWRlIHRoZSBzeXN0ZW0gZGVmYXVsdCBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZQorXGZCVEVSTUlORk9cZlIgaW4geW91ciBzaGVsbCBlbnZpcm9ubWVudCB0byBhIHZhbGlkIChleGlzdGluZykgZGlyZWN0b3J5IG5hbWUuCisuUFAKK1NlY29uZGx5LCBpZiBcZkJ0aWNcZlIgY2Fubm90IGdldCBhY2Nlc3MgdG8gXGZJXCpkXGZSIG9yIHlvdXIgVEVSTUlORk8KK2RpcmVjdG9yeSwgaXQgbG9va3MgZm9yIHRoZSBkaXJlY3RvcnkgXGZJJEhPTUUvLnRlcm1pbmZvXGZSOyBpZiB0aGF0IGRpcmVjdG9yeQorZXhpc3RzLCB0aGUgZW50cnkgaXMgcGxhY2VkIHRoZXJlLgorLlBQCitMaWJyYXJpZXMgdGhhdCByZWFkIHRlcm1pbmZvIGVudHJpZXMgYXJlIGV4cGVjdGVkIHRvIGNoZWNrIGZvciBhIFRFUk1JTkZPCitkaXJlY3RvcnkgZmlyc3QsIGxvb2sgYXQgXGZJJEhPTUUvLnRlcm1pbmZvXGZSIGlmIFRFUk1JTkZPIGlzIG5vdCBzZXQsIGFuZAorZmluYWxseSBsb29rIGluIFxmSVwqZFxmUi4KKy5UUAorXGZCLTFcZlIKK3Jlc3RyaWN0cyB0aGUgb3V0cHV0IHRvIGEgc2luZ2xlIGNvbHVtbgorLlRQCitcZkItYVxmUgordGVsbHMgXGZCdGljXGZQIHRvIHJldGFpbiBjb21tZW50ZWQtb3V0IGNhcGFiaWxpdGllcyByYXRoZXIgdGhhbiBkaXNjYXJkaW5nCit0aGVtLiAgQ2FwYWJpbGl0aWVzIGFyZSBjb21tZW50ZWQgYnkgcHJlZml4aW5nIHRoZW0gd2l0aCBhIHBlcmlvZC4KK1RoaXMgc2V0cyB0aGUgXGZCLXhcZlIgb3B0aW9uLCBiZWNhdXNlIGl0IHRyZWF0cyB0aGUgY29tbWVudGVkLW91dAorZW50cmllcyBhcyB1c2VyLWRlZmluZWQgbmFtZXMuCitJZiB0aGUgc291cmNlIGlzIHRlcm1jYXAsIGFjY2VwdCB0aGUgMi1jaGFyYWN0ZXIgbmFtZXMgcmVxdWlyZWQgYnkgdmVyc2lvbiA2LgorT3RoZXJ3aXNlIHRoZXNlIGFyZSBpZ25vcmVkLgorLlRQCitcZkItQ1xmUgorRm9yY2Ugc291cmNlIHRyYW5zbGF0aW9uIHRvIHRlcm1jYXAgZm9ybWF0LiAgTm90ZTogdGhpcyBkaWZmZXJzIGZyb20gdGhlIFxmQi1DXGZSCitvcHRpb24gb2YgXGZCQElORk9DTVBAXGZSKDFNKSBpbiB0aGF0IGl0IGRvZXMgbm90IG1lcmVseSB0cmFuc2xhdGUgY2FwYWJpbGl0eQorbmFtZXMsIGJ1dCBhbHNvIHRyYW5zbGF0ZXMgdGVybWluZm8gc3RyaW5ncyB0byB0ZXJtY2FwIGZvcm1hdC4gIENhcGFiaWxpdGllcwordGhhdCBhcmUgbm90IHRyYW5zbGF0YWJsZSBhcmUgbGVmdCBpbiB0aGUgZW50cnkgdW5kZXIgdGhlaXIgdGVybWluZm8gbmFtZXMKK2J1dCBjb21tZW50ZWQgb3V0IHdpdGggdHdvIHByZWNlZGluZyBkb3RzLgorLlRQCitcZkItY1xmUgordGVsbHMgXGZCdGljXGZQIHRvIG9ubHkgY2hlY2sgXGZJZmlsZVxmUiBmb3IgZXJyb3JzLCBpbmNsdWRpbmcgc3ludGF4IHByb2JsZW1zIGFuZAorYmFkIHVzZSBsaW5rcy4gIElmIHlvdSBzcGVjaWZ5IFxmQi1DXGZSIChcZkItSVxmUikgd2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvZGUKK3dpbGwgcHJpbnQgd2FybmluZ3MgYWJvdXQgZW50cmllcyB3aGljaCwgYWZ0ZXIgdXNlIHJlc29sdXRpb24sIGFyZSBtb3JlIHRoYW4KKzEwMjMgKDQwOTYpIGJ5dGVzIGxvbmcuICBEdWUgdG8gYSBmaXhlZCBidWZmZXIgbGVuZ3RoIGluIG9sZGVyIHRlcm1jYXAKK2xpYnJhcmllcyAoYW5kIGEgZG9jdW1lbnRlZCBsaW1pdCBpbiB0ZXJtaW5mbyksIHRoZXNlIGVudHJpZXMgbWF5IGNhdXNlIGNvcmUKK2R1bXBzLgorLlRQCitcZkItZSBcZlJcZkluYW1lc1xmUgorTGltaXQgd3JpdGVzIGFuZCB0cmFuc2xhdGlvbnMgdG8gdGhlIGZvbGxvd2luZyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgordGVybWluYWxzLgorSWYgYW55IG5hbWUgb3IgYWxpYXMgb2YgYSB0ZXJtaW5hbCBtYXRjaGVzIG9uZSBvZiB0aGUgbmFtZXMgaW4KK3RoZSBsaXN0LCB0aGUgZW50cnkgd2lsbCBiZSB3cml0dGVuIG9yIHRyYW5zbGF0ZWQgYXMgbm9ybWFsLgorT3RoZXJ3aXNlIG5vIG91dHB1dCB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgaXQuCitUaGUgb3B0aW9uIHZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgZmlsZSBjb250YWluaW5nIHRoZSBsaXN0IGlmIGl0Citjb250YWlucyBhICcvJy4KKyhOb3RlOiBkZXBlbmRpbmcgb24gaG93IHRpYyB3YXMgY29tcGlsZWQsIHRoaXMgb3B0aW9uIG1heSByZXF1aXJlIFxmQi1JXGZSIG9yIFxmQi1DXGZSLikKKy5UUAorXGZCLWZcZlIKK0Rpc3BsYXkgY29tcGxleCB0ZXJtaW5mbyBzdHJpbmdzIHdoaWNoIGNvbnRhaW4gaWYvdGhlbi9lbHNlL2VuZGlmIGV4cHJlc3Npb25zCitpbmRlbnRlZCBmb3IgcmVhZGFiaWxpdHkuCisuVFAKK1xmQi1HXGZSCitEaXNwbGF5IGNvbnN0YW50IGxpdGVyYWxzIGluIGRlY2ltYWwgZm9ybQorcmF0aGVyIHRoYW4gdGhlaXIgY2hhcmFjdGVyIGVxdWl2YWxlbnRzLgorLlRQCitcZkItZ1xmUgorRGlzcGxheSBjb25zdGFudCBjaGFyYWN0ZXIgbGl0ZXJhbHMgaW4gcXVvdGVkIGZvcm0KK3JhdGhlciB0aGFuIHRoZWlyIGRlY2ltYWwgZXF1aXZhbGVudHMuCisuVFAKK1xmQi1JXGZSCitGb3JjZSBzb3VyY2UgdHJhbnNsYXRpb24gdG8gdGVybWluZm8gZm9ybWF0LgorLlRQCitcZkItTFxmUgorRm9yY2Ugc291cmNlIHRyYW5zbGF0aW9uIHRvIHRlcm1pbmZvIGZvcm1hdAordXNpbmcgdGhlIGxvbmcgQyB2YXJpYWJsZSBuYW1lcyBsaXN0ZWQgaW4gPFxmQnRlcm0uaFxmUj4KKy5UUAorXGZCLU5cZlIKK0Rpc2FibGUgc21hcnQgZGVmYXVsdHMuIAorTm9ybWFsbHksIHdoZW4gdHJhbnNsYXRpbmcgZnJvbSB0ZXJtY2FwIHRvIHRlcm1pbmZvLCB0aGUgY29tcGlsZXIgbWFrZXMKK2EgbnVtYmVyIG9mIGFzc3VtcHRpb25zIGFib3V0IHRoZSBkZWZhdWx0cyBvZiBzdHJpbmcgY2FwYWJpbGl0aWVzCitcZkJyZXNldDFfc3RyaW5nXGZSLCBcZkJjYXJyaWFnZV9yZXR1cm5cZlIsIFxmQmN1cnNvcl9sZWZ0XGZSLAorXGZCY3Vyc29yX2Rvd25cZlIsIFxmQnNjcm9sbF9mb3J3YXJkXGZSLCBcZkJ0YWJcZlIsIFxmQm5ld2xpbmVcZlIsCitcZkJrZXlfYmFja3NwYWNlXGZSLCBcZkJrZXlfbGVmdFxmUiwgYW5kIFxmQmtleV9kb3duXGZSLCB0aGVuIGF0dGVtcHRzCit0byB1c2Ugb2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMgdG8gZGVkdWNlIGNvcnJlY3QgdmFsdWVzLiAgSXQgYWxzbworbm9ybWFsbHkgc3VwcHJlc3NlcyBvdXRwdXQgb2Ygb2Jzb2xldGUgdGVybWNhcCBjYXBhYmlsaXRpZXMgc3VjaCBhcyBcZkJic1xmUi4KK1RoaXMgb3B0aW9uIGZvcmNlcyBhIG1vcmUgbGl0ZXJhbCB0cmFuc2xhdGlvbiB0aGF0IGFsc28gcHJlc2VydmVzIHRoZQorb2Jzb2xldGUgY2FwYWJpbGl0aWVzLgorLlRQCitcZkItb1xmUlxmSWRpclxmUgorV3JpdGUgY29tcGlsZWQgZW50cmllcyB0byBnaXZlbiBkaXJlY3RvcnkuICBPdmVycmlkZXMgdGhlIFRFUk1JTkZPIGVudmlyb25tZW50Cit2YXJpYWJsZS4KKy5UUAorXGZCLVJcZlJcZklzdWJzZXRcZlIKK1Jlc3RyaWN0IG91dHB1dCB0byBhIGdpdmVuIHN1YnNldC4gIFRoaXMgb3B0aW9uIGlzIGZvciB1c2Ugd2l0aCBhcmNoYWljCit2ZXJzaW9ucyBvZiB0ZXJtaW5mbyBsaWtlIHRob3NlIG9uIFNWcjEsIFVsdHJpeCwgb3IgSFAvVVggdGhhdCBkbyBub3Qgc3VwcG9ydAordGhlIGZ1bGwgc2V0IG9mIFNWUjQvWFNJIEN1cnNlcyB0ZXJtaW5mbzsgYW5kIG91dHJpZ2h0IGJyb2tlbiBwb3J0cyBsaWtlIEFJWCAzLngKK3RoYXQgaGF2ZSB0aGVpciBvd24gZXh0ZW5zaW9ucyBpbmNvbXBhdGlibGUgd2l0aCBTVnI0L1hTSS4gIEF2YWlsYWJsZSBzdWJzZXRzCithcmUgIlNWcjEiLCAiVWx0cml4IiwgIkhQIiwgIkJTRCIgYW5kICJBSVgiOyBzZWUgXGZCdGVybWluZm9cZlIoXCpuKSBmb3IgZGV0YWlscy4KKy5UUAorXGZCLXJcZlIKK0ZvcmNlIGVudHJ5IHJlc29sdXRpb24gKHNvIHRoZXJlIGFyZSBubyByZW1haW5pbmcgdGMgY2FwYWJpbGl0aWVzKSBldmVuCit3aGVuIGRvaW5nIHRyYW5zbGF0aW9uIHRvIHRlcm1jYXAgZm9ybWF0LiAgVGhpcyBtYXkgYmUgbmVlZGVkIGlmIHlvdSBhcmUKK3ByZXBhcmluZyBhIHRlcm1jYXAgZmlsZSBmb3IgYSB0ZXJtY2FwIGxpYnJhcnkgKHN1Y2ggYXMgR05VIHRlcm1jYXAgdGhyb3VnaAordmVyc2lvbiAxLjMgb3IgQlNEIHRlcm1jYXAgdGhyb3VnaCA0LjNCU0QpIHRoYXQgZG9lcyBub3QgaGFuZGxlIG11bHRpcGxlCit0YyBjYXBhYmlsaXRpZXMgcGVyIGVudHJ5LgorLlRQCitcZkItc1xmUgorU3VtbWFyaXplIHRoZSBjb21waWxlIGJ5IHNob3dpbmcgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIGVudHJpZXMKK2FyZSB3cml0dGVuLCBhbmQgdGhlIG51bWJlciBvZiBlbnRyaWVzIHdoaWNoIGFyZSBjb21waWxlZC4KKy5UUAorXGZCLVRcZlIKK2VsaW1pbmF0ZXMgc2l6ZS1yZXN0cmljdGlvbnMgb24gdGhlIGdlbmVyYXRlZCB0ZXh0LgorVGhpcyBpcyBtYWlubHkgdXNlZnVsIGZvciB0ZXN0aW5nIGFuZCBhbmFseXNpcywgc2luY2UgdGhlIGNvbXBpbGVkCitkZXNjcmlwdGlvbnMgYXJlIGxpbWl0ZWQgKGUuZy4sIDEwMjMgZm9yIHRlcm1jYXAsIDQwOTYgZm9yIHRlcm1pbmZvKS4KKy5UUAorXGZCLXRcZlIKK3RlbGxzIFxmQnRpY1xmUCB0byBkaXNjYXJkIGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzLgorTm9ybWFsbHkgd2hlbiB0cmFuc2xhdGluZyBmcm9tIHRlcm1pbmZvIHRvIHRlcm1jYXAsCit1bnRyYW5zbGF0YWJsZSBjYXBhYmlsaXRpZXMgYXJlIGNvbW1lbnRlZC1vdXQuCisuVFAgNQorXGZCLVVcZlIKK3RlbGxzIFxmQnRpY1xmUCB0byBub3QgcG9zdC1wcm9jZXNzIHRoZSBkYXRhIGFmdGVyIHBhcnNpbmcgdGhlIHNvdXJjZSBmaWxlLgorTm9ybWFsbHksIGl0IGluZmVycyBkYXRhIHdoaWNoIGlzIGNvbW1vbmx5IG1pc3NpbmcgaW4gb2xkZXIgdGVybWluZm8gZGF0YSwKK29yIGluIHRlcm1jYXBzLgorLlRQCitcZkItVlxmUgorcmVwb3J0cyB0aGUgdmVyc2lvbiBvZiBuY3Vyc2VzIHdoaWNoIHdhcyB1c2VkIGluIHRoaXMgcHJvZ3JhbSwgYW5kIGV4aXRzLgorLlRQCitcZkItdlxmUlxmSW5cZlIKK3NwZWNpZmllcyB0aGF0ICh2ZXJib3NlKSBvdXRwdXQgYmUgd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJvciB0cmFjZQoraW5mb3JtYXRpb24gc2hvd2luZyBcZkJ0aWNcZlIncyBwcm9ncmVzcy4KK1RoZSBvcHRpb25hbCBwYXJhbWV0ZXIgXGZJblxmUiBpcyBhIG51bWJlciBmcm9tIDEgdG8gMTAsIGluY2x1c2l2ZSwKK2luZGljYXRpbmcgdGhlIGRlc2lyZWQgbGV2ZWwgb2YgZGV0YWlsIG9mIGluZm9ybWF0aW9uLgorSWYgXGZJblxmUiBpcyBvbWl0dGVkLCB0aGUgZGVmYXVsdCBsZXZlbCBpcyAxLgorSWYgXGZJblxmUiBpcyBzcGVjaWZpZWQgYW5kIGdyZWF0ZXIgdGhhbiAxLCB0aGUgbGV2ZWwgb2YKK2RldGFpbCBpcyBpbmNyZWFzZWQuCisuVFAKK1xmQi13XGZSXGZJblxmUgorc3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgb3V0cHV0LgorVGhlIHBhcmFtZXRlciBpcyBvcHRpb25hbC4KK0lmIGl0IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIDYwLgorLlRQCitcZkIteFxmUgorVHJlYXQgdW5rbm93biBjYXBhYmlsaXRpZXMgYXMgdXNlci1kZWZpbmVkLgorVGhhdCBpcywgaWYgeW91IHN1cHBseSBhIGNhcGFiaWxpdHkgbmFtZSB3aGljaCBcZkJ0aWNcZlAgZG9lcyBub3QgcmVjb2duaXplLAoraXQgd2lsbCBpbmZlciBpdHMgdHlwZSAoYm9vbGVhbiwgbnVtYmVyIG9yIHN0cmluZykgZnJvbSB0aGUgc3ludGF4IGFuZAorbWFrZSBhbiBleHRlbmRlZCB0YWJsZSBlbnRyeSBmb3IgdGhhdC4KK1VzZXItZGVmaW5lZCBjYXBhYmlsaXR5IHN0cmluZ3MKK3dob3NlIG5hbWUgYmVnaW5zIHdpdGggYGBrJycgYXJlIHRyZWF0ZWQgYXMgZnVuY3Rpb24ga2V5cy4KKy5UUAorXGZJZmlsZVxmUgorY29udGFpbnMgb25lIG9yIG1vcmUgXGZCdGVybWluZm9cZlIgdGVybWluYWwgZGVzY3JpcHRpb25zIGluIHNvdXJjZQorZm9ybWF0IFtzZWUgXGZCdGVybWluZm9cZlIoXCpuKV0uICBFYWNoIGRlc2NyaXB0aW9uIGluIHRoZSBmaWxlCitkZXNjcmliZXMgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHBhcnRpY3VsYXIgdGVybWluYWwuCisuUFAKK1RoZSBkZWJ1ZyBmbGFnIGxldmVscyBhcmUgYXMgZm9sbG93czoKKy5UUAorMQorTmFtZXMgb2YgZmlsZXMgY3JlYXRlZCBhbmQgbGlua2VkCisuVFAKKzIKK0luZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGBgdXNlJycgZmFjaWxpdHkKKy5UUAorMworU3RhdGlzdGljcyBmcm9tIHRoZSBoYXNoaW5nIGFsZ29yaXRobQorLlRQCis1CitTdHJpbmctdGFibGUgbWVtb3J5IGFsbG9jYXRpb25zCisuVFAKKzcKK0VudHJpZXMgaW50byB0aGUgc3RyaW5nLXRhYmxlCisuVFAKKzgKK0xpc3Qgb2YgdG9rZW5zIGVuY291bnRlcmVkIGJ5IHNjYW5uZXIKKy5UUAorOQorQWxsIHZhbHVlcyBjb21wdXRlZCBpbiBjb25zdHJ1Y3Rpb24gb2YgdGhlIGhhc2ggdGFibGUKKy5MUAorSWYgdGhlIGRlYnVnIGxldmVsIFxmSW5cZlIgaXMgbm90IGdpdmVuLCBpdCBpcyB0YWtlbiB0byBiZSBvbmUuCisuUFAKK0FsbCBidXQgb25lIG9mIHRoZSBjYXBhYmlsaXRpZXMgcmVjb2duaXplZCBieSBcZkJ0aWNcZlIgYXJlIGRvY3VtZW50ZWQKK2luIFxmQnRlcm1pbmZvXGZSKFwqbikuICBUaGUgZXhjZXB0aW9uIGlzIHRoZSBcZkJ1c2VcZlIgY2FwYWJpbGl0eS4KKy5QUAorV2hlbiBhIFxmQnVzZVxmUj1cZkllbnRyeVxmUi1cZkluYW1lXGZSIGZpZWxkIGlzIGRpc2NvdmVyZWQgaW4gYQordGVybWluYWwgZW50cnkgY3VycmVudGx5IGJlaW5nIGNvbXBpbGVkLCBcZkJ0aWNcZlIgcmVhZHMgaW4gdGhlIGJpbmFyeQorZnJvbSBcZkJcKmRcZlIgdG8gY29tcGxldGUgdGhlIGVudHJ5LiAgKEVudHJpZXMgY3JlYXRlZCBmcm9tCitcZklmaWxlXGZSIHdpbGwgYmUgdXNlZCBmaXJzdC4gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorXGZCVEVSTUlORk9cZlIgaXMgc2V0LCB0aGF0IGRpcmVjdG9yeSBpcyBzZWFyY2hlZCBpbnN0ZWFkIG9mCitcZkJcKmRcZlIuKSAgXGZCdGljXGZSIGR1cGxpY2F0ZXMgdGhlIGNhcGFiaWxpdGllcyBpbgorXGZJZW50cnlcZlItXGZJbmFtZVxmUiBmb3IgdGhlIGN1cnJlbnQgZW50cnksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgordGhvc2UgY2FwYWJpbGl0aWVzIHRoYXQgZXhwbGljaXRseSBhcmUgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBlbnRyeS4KKy5QUAorV2hlbiBhbiBlbnRyeSwgZS5nLiwgXGZCZW50cnlfbmFtZV8xXGZSLCBjb250YWlucyBhCitcZkJ1c2U9XGZSXGZJZW50cnlcZlJfXGZJbmFtZVxmUl9cZkkyXGZSIGZpZWxkLCBhbnkgY2FuY2VsZWQKK2NhcGFiaWxpdGllcyBpbiBcZkllbnRyeVxmUl9cZkluYW1lXGZSX1xmSTJcZlIgbXVzdCBhbHNvIGFwcGVhciBpbgorXGZCZW50cnlfbmFtZV8xXGZSIGJlZm9yZSBcZkJ1c2U9XGZSIGZvciB0aGVzZSBjYXBhYmlsaXRpZXMgdG8gYmUKK2NhbmNlbGVkIGluIFxmQmVudHJ5X25hbWVfMVxmUi4KKy5QUAorSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlRFUk1JTkZPXGZSIGlzIHNldCwgdGhlIGNvbXBpbGVkCityZXN1bHRzIGFyZSBwbGFjZWQgdGhlcmUgaW5zdGVhZCBvZiBcZkJcKmRcZlIuCisuUFAKK1RvdGFsIGNvbXBpbGVkIGVudHJpZXMgY2Fubm90IGV4Y2VlZCA0MDk2IGJ5dGVzLiAgVGhlIG5hbWUgZmllbGQgY2Fubm90CitleGNlZWQgNTEyIGJ5dGVzLiAgVGVybWluYWwgbmFtZXMgZXhjZWVkaW5nIHRoZSBtYXhpbXVtIGFsaWFzIGxlbmd0aAorKDMyIGNoYXJhY3RlcnMgb24gc3lzdGVtcyB3aXRoIGxvbmcgZmlsZW5hbWVzLCAxNCBjaGFyYWN0ZXJzIG90aGVyd2lzZSkKK3dpbGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBtYXhpbXVtIGFsaWFzIGxlbmd0aCBhbmQgYSB3YXJuaW5nIG1lc3NhZ2Ugd2lsbCBiZSBwcmludGVkLgorLlNIIENPTVBBVElCSUxJVFkKK1RoZXJlIGlzIHNvbWUgZXZpZGVuY2UgdGhhdCBoaXN0b3JpYyBcZkJ0aWNcZlIgaW1wbGVtZW50YXRpb25zIHRyZWF0ZWQKK2Rlc2NyaXB0aW9uIGZpZWxkcyB3aXRoIG5vIHdoaXRlc3BhY2UgaW4gdGhlbSBhcyBhZGRpdGlvbmFsIGFsaWFzZXMgb3IKK3Nob3J0IG5hbWVzLiAgVGhpcyBcZkJ0aWNcZlIgZG9lcyBub3QgZG8gdGhhdCwgYnV0IGl0IGRvZXMgd2FybiB3aGVuCitkZXNjcmlwdGlvbiBmaWVsZHMgbWF5IGJlIHRyZWF0ZWQgdGhhdCB3YXkgYW5kIGNoZWNrIHRoZW0gZm9yIGRhbmdlcm91cworY2hhcmFjdGVycy4KKy5TSCBFWFRFTlNJT05TCitVbmxpa2UgdGhlIHN0b2NrIFNWcjQgXGZCdGljXGZSIGNvbW1hbmQsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGFjdHVhbGx5Citjb21waWxlIHRlcm1jYXAgc291cmNlcy4gIEluIGZhY3QsIGVudHJpZXMgaW4gdGVybWluZm8gYW5kIHRlcm1jYXAgc3ludGF4IGNhbgorYmUgbWl4ZWQgaW4gYSBzaW5nbGUgc291cmNlIGZpbGUuICBTZWUgXGZCdGVybWluZm9cZlIoXCpuKSBmb3IgdGhlIGxpc3Qgb2YKK3Rlcm1jYXAgbmFtZXMgdGFrZW4gdG8gYmUgZXF1aXZhbGVudCB0byB0ZXJtaW5mbyBuYW1lcy4KKy5QUAorVGhlIFNWcjQgbWFudWFsIHBhZ2VzIGFyZSBub3QgY2xlYXIgb24gdGhlIHJlc29sdXRpb24gcnVsZXMgZm9yIFxmQnVzZVxmUgorY2FwYWJpbGl0aWVzLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBcZkJ0aWNcZlIgd2lsbCBmaW5kIFxmQnVzZVxmUiB0YXJnZXRzIGFueXdoZXJlCitpbiB0aGUgc291cmNlIGZpbGUsIG9yIGFueXdoZXJlIGluIHRoZSBmaWxlIHRyZWUgcm9vdGVkIGF0IFxmQlRFUk1JTkZPXGZSIChpZgorXGZCVEVSTUlORk9cZlIgaXMgZGVmaW5lZCksIG9yIGluIHRoZSB1c2VyJ3MgXGZJJEhPTUUvLnRlcm1pbmZvXGZSIGRpcmVjdG9yeQorKGlmIGl0IGV4aXN0cyksIG9yIChmaW5hbGx5KSBhbnl3aGVyZSBpbiB0aGUgc3lzdGVtJ3MgZmlsZSB0cmVlIG9mCitjb21waWxlZCBlbnRyaWVzLgorLlBQCitUaGUgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGlzIFxmQnRpY1xmUiBoYXZlIHRoZSBzYW1lIGZvcm1hdCBhcyBHTlUgQworZXJyb3IgbWVzc2FnZXMsIGFuZCBjYW4gYmUgcGFyc2VkIGJ5IEdOVSBFbWFjcydzIGNvbXBpbGUgZmFjaWxpdHkuCisuUFAKK1RoZQorXGZCLUNcZlIsCitcZkItR1xmUiwKK1xmQi1JXGZSLAorXGZCLU5cZlIsCitcZkItUlxmUiwKK1xmQi1UXGZSLAorXGZCLVZcZlIsCitcZkItYVxmUiwKK1xmQi1lXGZSLAorXGZCLWZcZlIsCitcZkItZ1xmUiwKK1xmQi1vXGZSLAorXGZCLXJcZlIsCitcZkItc1xmUiwKK1xmQi10XGZSIGFuZAorXGZCLXhcZlIKK29wdGlvbnMKK2FyZSBub3Qgc3VwcG9ydGVkIHVuZGVyIFNWcjQuCitUaGUgU1ZyNCBcZkItY1xmUiBtb2RlIGRvZXMgbm90IHJlcG9ydCBiYWQgdXNlIGxpbmtzLgorLlBQCitTeXN0ZW0gViBkb2VzIG5vdCBjb21waWxlIGVudHJpZXMgdG8gb3IgcmVhZCBlbnRyaWVzIGZyb20geW91cgorXGZJJEhPTUUvLnRlcm1pbmZvXGZSIGRpcmVjdG9yeSB1bmxlc3MgVEVSTUlORk8gaXMgZXhwbGljaXRseSBzZXQgdG8gaXQuCisuU0ggRklMRVMKKy5UUCA1CitcZkJcKmQvPy8qXGZSCitDb21waWxlZCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBkYXRhYmFzZS4KKy5TSCBTRUUgQUxTTworXGZCQElORk9DTVBAXGZSKDFNKSwKK1xmQkBDQVBUT0lORk9AXGZSKDFNKSwKK1xmQkBJTkZPVE9DQVBAXGZSKDFNKSwKK1xmQkBUT0VAXGZSKDFNKSwKK1xmQmN1cnNlc1xmUigzWCksCitcZkJ0ZXJtaW5mb1xmUihcKm4pLgorLlBQCitUaGlzIGRlc2NyaWJlcyBcZkJuY3Vyc2VzXGZSCit2ZXJzaW9uIEBOQ1VSU0VTX01BSk9SQC5ATkNVUlNFU19NSU5PUkAgKHBhdGNoIEBOQ1VSU0VTX1BBVENIQCkuCisuXCIjCisuXCIjIFRoZSBmb2xsb3dpbmcgc2V0cyBlZGl0IG1vZGVzIGZvciBHTlUgRU1BQ1MKKy5cIiMgTG9jYWwgVmFyaWFibGVzOgorLlwiIyBtb2RlOm5yb2ZmCisuXCIjIGZpbGwtY29sdW1uOjc5CisuXCIjIEVuZDoKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21hbi90b2UuMW0gYi9uY3Vyc2VzLTUuNy9tYW4vdG9lLjFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzAzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tYW4vdG9lLjFtCkBAIC0wLDAgKzEsMTA3IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IHRvZS4xbSx2IDEuMjEgMjAwOC8wMS8wNSAyMDo1NzoxNiB0b20gRXhwICQKKy5USCBAVE9FQCAxTSAiIgorLmRzIG4gNQorLmRzIGQgQFRFUk1JTkZPQAorLlNIIE5BTUUKK1xmQnRvZVxmUiAtIHRhYmxlIG9mICh0ZXJtaW5mbykgZW50cmllcworLlNIIFNZTk9QU0lTCitcZkJ0b2VcZlIgW1xmQi12XGZSW1xmSW5cZlJdXSBbXGZCLWFodVVWXGZSXSBcZklmaWxlLi4uXGZSCisuYnIKKy5TSCBERVNDUklQVElPTgorLlBQCitXaXRoIG5vIG9wdGlvbnMsCitcZkJ0b2VcZlIgbGlzdHMgYWxsIGF2YWlsYWJsZSB0ZXJtaW5hbCB0eXBlcyBieSBwcmltYXJ5IG5hbWUKK3dpdGggZGVzY3JpcHRpb25zLgorRmlsZSBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZGlyZWN0b3JpZXMgdG8gYmUgc2Nhbm5lZDsgaWYgbm8KK3N1Y2ggYXJndW1lbnRzIGFyZSBnaXZlbiwKK3lvdXIgZGVmYXVsdCB0ZXJtaW5mbyBkaXJlY3RvcnkgaXMgc2Nhbm5lZC4KK0lmIHlvdSBhbHNvIHNwZWNpZnkgdGhlIFxmQi1oXGZSIG9wdGlvbiwKK2EgZGlyZWN0b3J5IGhlYWRlciB3aWxsIGJlIGlzc3VlZCBhcyBlYWNoCitkaXJlY3RvcnkgaXMgZW50ZXJlZC4KKy5QUAorVGhlcmUgYXJlIG90aGVyIG9wdGlvbnMgaW50ZW5kZWQgZm9yIHVzZSBieSB0ZXJtaW5mbyBmaWxlIG1haW50YWluZXJzOgorLlRQCitcZkItYVxmUgorcmVwb3J0IG9uIGFsbCBvZiB0aGUgdGVybWluYWwgZGF0YWJhc2VzIHdoaWNoIG5jdXJzZXMgd291bGQgc2VhcmNoLAorcmF0aGVyIHRoYW4gb25seSB0aGUgZmlyc3Qgb25lIHRoYXQgaXQgZmluZHMuCisuVFAKK1xmQi11XGZSIFxmSWZpbGVcZlIKK3NheXMgdG8gd3JpdGUgYSByZXBvcnQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwKK2xpc3RpbmcgZGVwZW5kZW5jaWVzIGluIHRoZSBnaXZlbiB0ZXJtaW5mby90ZXJtY2FwIHNvdXJjZSBmaWxlLgorVGhlIHJlcG9ydCBjb25kZW5zZXMgdGhlIGB1c2UnIHJlbGF0aW9uOgorZWFjaCBsaW5lIGNvbnNpc3RzIG9mIHRoZSBwcmltYXJ5IG5hbWUgb2YgYSB0ZXJtaW5hbCB0aGF0CitoYXMgdXNlIGNhcGFiaWxpdGllcywKK2ZvbGxvd2VkIGJ5IGEgY29sb24sCitmb2xsb3dlZCBieSB0aGUKK3doaXRlc3BhY2Utc2VwYXJhdGVkIHByaW1hcnkgbmFtZXMgb2YgYWxsIHRlcm1pbmFscyB3aGljaCBvY2N1ciBpbiB0aG9zZSB1c2UKK2NhcGFiaWxpdGllcywKK2ZvbGxvd2VkIGJ5IGEgbmV3bGluZQorLlRQCitcZkItVVxmUiBcZklmaWxlXGZSCitzYXlzIHRvIHdyaXRlIGEgcmVwb3J0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsCitsaXN0aW5nIHJldmVyc2UgZGVwZW5kZW5jaWVzIGluIHRoZSBnaXZlbiB0ZXJtaW5mby90ZXJtY2FwIHNvdXJjZSBmaWxlLgorVGhlIHJlcG9ydCByZXZlcnNlcyB0aGUgYHVzZScgcmVsYXRpb246CitlYWNoIGxpbmUgY29uc2lzdHMgb2YgdGhlIHByaW1hcnkgbmFtZSBvZiBhCit0ZXJtaW5hbCB0aGF0IG9jY3VycyBpbiB1c2UgY2FwYWJpbGl0aWVzLAorZm9sbG93ZWQgYnkgYSBjb2xvbiwKK2ZvbGxvd2VkIGJ5IHRoZQord2hpdGVzcGFjZS1zZXBhcmF0ZWQgcHJpbWFyeSBuYW1lcyBvZiBhbGwgdGVybWluYWxzIHdoaWNoIGRlcGVuZCBvbiBpdCwKK2ZvbGxvd2VkIGJ5IGEgbmV3bGluZS4KKy5UUAorXGZCLXZcZlJcZkluXGZSCitzcGVjaWZpZXMgdGhhdCAodmVyYm9zZSkgb3V0cHV0IGJlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IsCitzaG93aW5nIFxmQnRvZVxmUidzIHByb2dyZXNzLgorVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBcZkluXGZSIGlzIGEgbnVtYmVyIGZyb20gMSB0byAxMCwKK2ludGVycHJldGVkIGFzIGZvciBcZkJAVElDQFxmUigxTSkuCisuVFAKK1xmQi1WXGZSCityZXBvcnRzIHRoZSB2ZXJzaW9uIG9mIG5jdXJzZXMgd2hpY2ggd2FzIHVzZWQgaW4gdGhpcyBwcm9ncmFtLAorYW5kIGV4aXRzLgorLlNIIEZJTEVTCisuVFAgNQorXGZCXCpkLz8vKlxmUgorQ29tcGlsZWQgdGVybWluYWwgZGVzY3JpcHRpb24gZGF0YWJhc2UuCisuU0ggU0VFIEFMU08KK1xmQkBUSUNAXGZSKDFNKSwKK1xmQkBJTkZPQ01QQFxmUigxTSksCitcZkJAQ0FQVE9JTkZPQFxmUigxTSksCitcZkJASU5GT1RPQ0FQQFxmUigxTSksCitcZkJjdXJzZXNcZlIoM1gpLAorXGZCdGVybWluZm9cZlIoXCpuKS4KKy5QUAorVGhpcyBkZXNjcmliZXMgXGZCbmN1cnNlc1xmUgordmVyc2lvbiBATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIChwYXRjaCBATkNVUlNFU19QQVRDSEApLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vdHB1dC4xIGIvbmN1cnNlcy01LjcvbWFuL3RwdXQuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWRhMGIxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL3RwdXQuMQpAQCAtMCwwICsxLDMyNSBAQAorJ1wiIHQKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorLlwiIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisuXCIgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKy5cIiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorLlwiIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisuXCIgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKy5cIiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKy5cIiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKy5cIiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorLlwiIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisuXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKy5cIiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorLlwiIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisuXCIgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisuXCIgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKy5cIiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorLlwiIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlwiICRJZDogdHB1dC4xLHYgMS4yNyAyMDA2LzEyLzI0IDE4OjExOjMxIHRvbSBFeHAgJAorLlRIIEBUUFVUQCAxICIiCisuZHMgZCBAVEVSTUlORk9ACisuZHMgbiAxCisuU0ggTkFNRQorXGZCQFRQVVRAXGZSLCBcZkJyZXNldFxmUiAtIGluaXRpYWxpemUgYSB0ZXJtaW5hbCBvciBxdWVyeSB0ZXJtaW5mbyBkYXRhYmFzZQorLlNIIFNZTk9QU0lTCitcZkJAVFBVVEBcZlIgW1xmQi1UXGZSXGZJdHlwZVxmUl0gXGZJY2FwbmFtZVxmUiBbXGZJcGFybXNcZlIgLi4uIF0KKy5icgorXGZCQFRQVVRAXGZSIFtcZkItVFxmUlxmSXR5cGVcZlJdIFxmQmluaXRcZlIKKy5icgorXGZCQFRQVVRAXGZSIFtcZkItVFxmUlxmSXR5cGVcZlJdIFxmQnJlc2V0XGZSCisuYnIKK1xmQkBUUFVUQFxmUiBbXGZCLVRcZlJcZkl0eXBlXGZSXSBcZkJsb25nbmFtZVxmUgorLmJyCitcZkJAVFBVVEAgLVNcZlIgIFxmQjw8XGZSCisuYnIKK1xmQkBUUFVUQCAtVlxmUgorLmJyCisuU0ggREVTQ1JJUFRJT04KK1RoZSBcZkJAVFBVVEBcZlIgdXRpbGl0eSB1c2VzIHRoZSBcZkJ0ZXJtaW5mb1xmUiBkYXRhYmFzZSB0byBtYWtlIHRoZQordmFsdWVzIG9mIHRlcm1pbmFsLWRlcGVuZGVudCBjYXBhYmlsaXRpZXMgYW5kIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0bwordGhlIHNoZWxsIChzZWUgXGZCc2hcZlIoMSkpLCB0byBpbml0aWFsaXplIG9yIHJlc2V0IHRoZSB0ZXJtaW5hbCwgb3IKK3JldHVybiB0aGUgbG9uZyBuYW1lIG9mIHRoZSByZXF1ZXN0ZWQgdGVybWluYWwgdHlwZS4KK1RoZSByZXN1bHQgZGVwZW5kcyB1cG9uIHRoZSBjYXBhYmlsaXR5J3MgdHlwZToKKy5SUworLlRQIDUKK3N0cmluZworXGZCQFRQVVRAXGZSIHdyaXRlcyB0aGUgc3RyaW5nIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCitObyB0cmFpbGluZyBuZXdsaW5lIGlzIHN1cHBsaWVkLgorLlRQCitpbnRlZ2VyCitcZkJAVFBVVEBcZlIgd3JpdGVzIHRoZSBkZWNpbWFsIHZhbHVlIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsCit3aXRoIGEgdHJhaWxpbmcgbmV3bGluZS4KKy5UUAorYm9vbGVhbgorXGZCQFRQVVRAXGZSIHNpbXBseSBzZXRzIHRoZSBleGl0IGNvZGUKKyhcZkIwXGZSIGZvciBUUlVFIGlmIHRoZSB0ZXJtaW5hbCBoYXMgdGhlIGNhcGFiaWxpdHksCitcZkIxXGZSIGZvciBGQUxTRSBpZiBpdCBkb2VzIG5vdCksCithbmQgd3JpdGVzIG5vdGhpbmcgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKy5SRQorLlBQCitCZWZvcmUgdXNpbmcgYSB2YWx1ZSByZXR1cm5lZCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LAordGhlIGFwcGxpY2F0aW9uIHNob3VsZCB0ZXN0IHRoZSBleGl0IGNvZGUKKyhlLmcuLCBcZkIkP1xmUiwgc2VlIFxmQnNoXGZSKDEpKSB0byBiZSBzdXJlIGl0IGlzIFxmQjBcZlIuCisoU2VlIHRoZSBcZkJFWElUIENPREVTXGZSIGFuZCBcZkJESUFHTk9TVElDU1xmUiBzZWN0aW9ucy4pCitGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIGNhcGFiaWxpdGllcworYW5kIHRoZSBcZkljYXBuYW1lXGZSIGFzc29jaWF0ZWQgd2l0aCBlYWNoLCBzZWUgXGZCdGVybWluZm9cZlIoNSkuCisuVFAKK1xmQi1UXGZSXGZJdHlwZVxmUgoraW5kaWNhdGVzIHRoZSBcZkl0eXBlXGZSIG9mIHRlcm1pbmFsLiAgTm9ybWFsbHkgdGhpcyBvcHRpb24gaXMKK3VubmVjZXNzYXJ5LCBiZWNhdXNlIHRoZSBkZWZhdWx0IGlzIHRha2VuIGZyb20gdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSBcZkJURVJNXGZSLiAgSWYgXGZCLVRcZlIgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBzaGVsbAordmFyaWFibGVzIFxmQkxJTkVTXGZSIGFuZCBcZkJDT0xVTU5TXGZSIHdpbGwgYmUgaWdub3JlZCxhbmQgdGhlCitvcGVyYXRpbmcgc3lzdGVtIHdpbGwgbm90IGJlIHF1ZXJpZWQgZm9yIHRoZSBhY3R1YWwgc2NyZWVuIHNpemUuCisuVFAKK1xmSWNhcG5hbWVcZlIKK2luZGljYXRlcyB0aGUgY2FwYWJpbGl0eSBmcm9tIHRoZSBcZkJ0ZXJtaW5mb1xmUiBkYXRhYmFzZS4gIFdoZW4KK1xmQnRlcm1jYXBcZlIgc3VwcG9ydCBpcyBjb21waWxlZCBpbiwgdGhlIFxmQnRlcm1jYXBcZlIgbmFtZSBmb3IKK3RoZSBjYXBhYmlsaXR5IGlzIGFsc28gYWNjZXB0ZWQuCisuVFAKK1xmSXBhcm1zXGZSCitJZiB0aGUgY2FwYWJpbGl0eSBpcyBhIHN0cmluZyB0aGF0IHRha2VzIHBhcmFtZXRlcnMsIHRoZSBhcmd1bWVudHMKK1xmSXBhcm1zXGZSIHdpbGwgYmUgaW5zdGFudGlhdGVkIGludG8gdGhlIHN0cmluZy4KKy5JUAorTW9zdCBwYXJhbWV0ZXJzIGFyZSBudW1iZXJzLgorT25seSBhIGZldyB0ZXJtaW5mbyBjYXBhYmlsaXRpZXMgcmVxdWlyZSBzdHJpbmcgcGFyYW1ldGVyczsKK1xmQkBUUFVUQFxmUiB1c2VzIGEgdGFibGUgdG8gZGVjaWRlIHdoaWNoIHRvIHBhc3MgYXMgc3RyaW5ncy4KK05vcm1hbGx5IFxmQkBUUFVUQFxmUiB1c2VzIFxmQnRwYXJtXGZSICgzWCkgdG8gcGVyZm9ybSB0aGUgc3Vic3RpdHV0aW9uLgorSWYgbm8gcGFyYW1ldGVycyBhcmUgZ2l2ZW4gZm9yIHRoZSBjYXBhYmlsaXR5LAorXGZCQFRQVVRAXGZSIHdyaXRlcyB0aGUgc3RyaW5nIHdpdGhvdXQgcGVyZm9ybWluZyB0aGUgc3Vic3RpdHV0aW9uLgorLlRQCitcZkItU1xmUgorYWxsb3dzIG1vcmUgdGhhbiBvbmUgY2FwYWJpbGl0eSBwZXIgaW52b2NhdGlvbiBvZiBcZkJAVFBVVEBcZlIuICBUaGUKK2NhcGFiaWxpdGllcyBtdXN0IGJlIHBhc3NlZCB0byBcZkJAVFBVVEBcZlIgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQKK2luc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZCBsaW5lIChzZWUgZXhhbXBsZSkuCitPbmx5IG9uZSBcZkljYXBuYW1lXGZSIGlzIGFsbG93ZWQgcGVyIGxpbmUuCitUaGUgXGZCLVNcZlIgb3B0aW9uIGNoYW5nZXMgdGhlCittZWFuaW5nIG9mIHRoZSBcZkIwXGZSIGFuZCBcZkIxXGZSIGJvb2xlYW4gYW5kIHN0cmluZyBleGl0IGNvZGVzIChzZWUgdGhlCitFWElUIENPREVTIHNlY3Rpb24pLgorLklQCitBZ2FpbiwgXGZCQFRQVVRAXGZSIHVzZXMgYSB0YWJsZSBhbmQgdGhlIHByZXNlbmNlIG9mIHBhcmFtZXRlcnMgaW4gaXRzIGlucHV0Cit0byBkZWNpZGUgd2hldGhlciB0byB1c2UgXGZCdHBhcm1cZlIgKDNYKSwKK2FuZCBob3cgdG8gaW50ZXJwcmV0IHRoZSBwYXJhbWV0ZXJzLgorLlRQCitcZkItVlxmUgorcmVwb3J0cyB0aGUgdmVyc2lvbiBvZiBuY3Vyc2VzIHdoaWNoIHdhcyB1c2VkIGluIHRoaXMgcHJvZ3JhbSwgYW5kIGV4aXRzLgorLlRQCitcZkJpbml0XGZSCitJZiB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgaXMgcHJlc2VudCBhbmQgYW4gZW50cnkgZm9yIHRoZSB1c2VyJ3MKK3Rlcm1pbmFsIGV4aXN0cyAoc2VlIFxmQi1UXGZSXGZJdHlwZVxmUiwgYWJvdmUpLCB0aGUgZm9sbG93aW5nIHdpbGwKK29jY3VyOgorLlJTCisuVFAKKygxKQoraWYgcHJlc2VudCwgdGhlIHRlcm1pbmFsJ3MgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyB3aWxsIGJlCitvdXRwdXQgYXMgZGV0YWlsZWQgaW4gdGhlIFxmQnRlcm1pbmZvXGZSKDUpIHNlY3Rpb24gb24KKy5JUiAiVGFicyBhbmQgSW5pdGlhbGl6YXRpb24iICwKKy5UUAorKDIpCithbnkgZGVsYXlzIChlLmcuLCBuZXdsaW5lKSBzcGVjaWZpZWQgaW4gdGhlIGVudHJ5IHdpbGwKK2JlIHNldCBpbiB0aGUgdHR5IGRyaXZlciwKKy5UUAorKDMpCit0YWJzIGV4cGFuc2lvbiB3aWxsIGJlIHR1cm5lZCBvbiBvciBvZmYgYWNjb3JkaW5nIHRvCit0aGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZW50cnksIGFuZAorLlRQCisoNCkKK2lmIHRhYnMgYXJlIG5vdCBleHBhbmRlZCwKK3N0YW5kYXJkIHRhYnMgd2lsbCBiZSBzZXQgKGV2ZXJ5IDggc3BhY2VzKS4KKy5SRQorLklQCitJZiBhbiBlbnRyeSBkb2VzIG5vdAorY29udGFpbiB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBhbnkgb2YgdGhlIGZvdXIgYWJvdmUgYWN0aXZpdGllcywKK3RoYXQgYWN0aXZpdHkgd2lsbCBzaWxlbnRseSBiZSBza2lwcGVkLgorLlRQCitcZkJyZXNldFxmUgorSW5zdGVhZCBvZiBwdXR0aW5nIG91dCBpbml0aWFsaXphdGlvbiBzdHJpbmdzLCB0aGUgdGVybWluYWwncworcmVzZXQgc3RyaW5ncyB3aWxsIGJlIG91dHB1dCBpZiBwcmVzZW50IChcZkJyczFcZlIsIFxmQnJzMlxmUiwgXGZCcnMzXGZSLCBcZkJyZlxmUikuCitJZiB0aGUgcmVzZXQgc3RyaW5ncyBhcmUgbm90IHByZXNlbnQsIGJ1dCBpbml0aWFsaXphdGlvbgorc3RyaW5ncyBhcmUsIHRoZSBpbml0aWFsaXphdGlvbiBzdHJpbmdzIHdpbGwgYmUgb3V0cHV0LgorT3RoZXJ3aXNlLCBcZkJyZXNldFxmUiBhY3RzIGlkZW50aWNhbGx5IHRvIFxmQmluaXRcZlIuCisuVFAKK1xmQmxvbmduYW1lXGZSCitJZiB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgaXMgcHJlc2VudCBhbmQgYW4gZW50cnkgZm9yIHRoZQordXNlcidzIHRlcm1pbmFsIGV4aXN0cyAoc2VlIFxmQi1UXGZSXGZJdHlwZVxmUiBhYm92ZSksIHRoZW4gdGhlIGxvbmcgbmFtZQorb2YgdGhlIHRlcm1pbmFsIHdpbGwgYmUgcHV0IG91dC4gIFRoZSBsb25nIG5hbWUgaXMgdGhlIGxhc3QKK25hbWUgaW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlcm1pbmFsJ3MgZGVzY3JpcHRpb24gaW4gdGhlCitcZkJ0ZXJtaW5mb1xmUiBkYXRhYmFzZSBbc2VlIFxmQnRlcm1cZlIoNSldLgorLlBQCitJZiBcZkJAVFBVVEBcZlIgaXMgaW52b2tlZCBieSBhIGxpbmsgbmFtZWQgXGZCcmVzZXRcZlIsIHRoaXMgaGFzIHRoZQorc2FtZSBlZmZlY3QgYXMgXGZCQFRQVVRAIHJlc2V0XGZSLgorU2VlIFxmQnRzZXRcZlIgZm9yIGNvbXBhcmlzb24sIHdoaWNoIGhhcyBzaW1pbGFyIGJlaGF2aW9yLgorLlNIIEVYQU1QTEVTCisuVFAgNQorXGZCQFRQVVRAIGluaXRcZlIKK0luaXRpYWxpemUgdGhlIHRlcm1pbmFsIGFjY29yZGluZyB0byB0aGUgdHlwZSBvZgordGVybWluYWwgaW4gdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgXGZCVEVSTVxmUi4gIFRoaXMKK2NvbW1hbmQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGV2ZXJ5b25lJ3MgLnByb2ZpbGUgYWZ0ZXIKK3RoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIFxmQlRFUk1cZlIgaGFzIGJlZW4gZXhwb3J0ZWQsIGFzCitpbGx1c3RyYXRlZCBvbiB0aGUgXGZCcHJvZmlsZVxmUig1KSBtYW51YWwgcGFnZS4KKy5UUCA1CitcZkJAVFBVVEAgLVQ1NjIwIHJlc2V0XGZSCitSZXNldCBhbiBBVCZUIDU2MjAgdGVybWluYWwsIG92ZXJyaWRpbmcgdGhlIHR5cGUgb2YKK3Rlcm1pbmFsIGluIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIFxmQlRFUk1cZlIuCisuVFAgNQorXGZCQFRQVVRAIGN1cCAwIDBcZlIKK1NlbmQgdGhlIHNlcXVlbmNlIHRvIG1vdmUgdGhlIGN1cnNvciB0byByb3cgXGZCMFxmUiwgY29sdW1uIFxmQjBcZlIKKyh0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmVlbiwgdXN1YWxseSBrbm93biBhcyB0aGUgImhvbWUiCitjdXJzb3IgcG9zaXRpb24pLgorLlRQIDUKK1xmQkBUUFVUQCBjbGVhclxmUgorRWNobyB0aGUgY2xlYXItc2NyZWVuIHNlcXVlbmNlIGZvciB0aGUgY3VycmVudCB0ZXJtaW5hbC4KKy5UUCA1CitcZkJAVFBVVEAgY29sc1xmUgorUHJpbnQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciB0aGUgY3VycmVudCB0ZXJtaW5hbC4KKy5UUCA1CitcZkJAVFBVVEAgLVQ0NTAgY29sc1xmUgorUHJpbnQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciB0aGUgNDUwIHRlcm1pbmFsLgorLlRQIDUKK1xmQmJvbGQ9YEBUUFVUQCBzbXNvYCBvZmZib2xkPWBAVFBVVEAgcm1zb2BcZlIKK1NldCB0aGUgc2hlbGwgdmFyaWFibGVzIFxmQmJvbGRcZlIsIHRvIGJlZ2luIHN0YW5kLW91dCBtb2RlCitzZXF1ZW5jZSwgYW5kIFxmQm9mZmJvbGRcZlIsIHRvIGVuZCBzdGFuZG91dCBtb2RlIHNlcXVlbmNlLAorZm9yIHRoZSBjdXJyZW50IHRlcm1pbmFsLiAgVGhpcyBtaWdodCBiZSBmb2xsb3dlZCBieSBhCitwcm9tcHQ6IFxmQmVjaG8gIiR7Ym9sZH1QbGVhc2UgdHlwZSBpbiB5b3VyIG5hbWU6ICR7b2ZmYm9sZH1cXGMiXGZSCisuVFAgNQorXGZCQFRQVVRAIGhjXGZSCitTZXQgZXhpdCBjb2RlIHRvIGluZGljYXRlIGlmIHRoZSBjdXJyZW50IHRlcm1pbmFsIGlzIGEgaGFyZCBjb3B5IHRlcm1pbmFsLgorLlRQIDUKK1xmQkBUUFVUQCBjdXAgMjMgNFxmUgorU2VuZCB0aGUgc2VxdWVuY2UgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIHJvdyAyMywgY29sdW1uIDQuCisuVFAgNQorXGZCQFRQVVRAIGN1cFxmUgorU2VuZCB0aGUgdGVybWluZm8gc3RyaW5nIGZvciBjdXJzb3ItbW92ZW1lbnQsIHdpdGggbm8gcGFyYW1ldGVycyBzdWJzdGl0dXRlZC4KKy5UUCA1CitcZkJAVFBVVEAgbG9uZ25hbWVcZlIKK1ByaW50IHRoZSBsb25nIG5hbWUgZnJvbSB0aGUgXGZCdGVybWluZm9cZlIgZGF0YWJhc2UgZm9yIHRoZQordHlwZSBvZiB0ZXJtaW5hbCBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50YWwKK3ZhcmlhYmxlIFxmQlRFUk1cZlIuCisuUFAKKy5SUyA1CitcZkJAVFBVVEAgLVMgPDwhXGZSCisuYnIKK1xmQj4gY2xlYXJcZlIKKy5icgorXGZCPiBjdXAgMTAgMTBcZlIKKy5icgorXGZCPiBib2xkXGZSCisuYnIKK1xmQj4gIVxmUgorLlJFCisuVFAgNQorXCYKK1RoaXMgZXhhbXBsZSBzaG93cyBcZkJAVFBVVEBcZlIgcHJvY2Vzc2luZyBzZXZlcmFsIGNhcGFiaWxpdGllcyBpbiBvbmUgaW52b2NhdGlvbi4KK0l0IGNsZWFycyB0aGUgc2NyZWVuLAorbW92ZXMgdGhlIGN1cnNvciB0byBwb3NpdGlvbiAxMCwgMTAKK2FuZCB0dXJucyBvbiBib2xkIChleHRyYSBicmlnaHQpIG1vZGUuCitUaGUgbGlzdCBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIG1hcmsgKFxmQiFcZlIpIG9uIGEgbGluZSBieSBpdHNlbGYuCisuU0ggRklMRVMKKy5UUAorXGZCXCpkXGZSCitjb21waWxlZCB0ZXJtaW5hbCBkZXNjcmlwdGlvbiBkYXRhYmFzZQorLlRQCitcZkJAREFUQURJUkAvdGFic2V0LypcZlIKK3RhYiBzZXR0aW5ncyBmb3Igc29tZSB0ZXJtaW5hbHMsIGluIGEgZm9ybWF0CithcHByb3ByaWF0ZSB0byBiZSBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsIChlc2NhcGUKK3NlcXVlbmNlcyB0aGF0IHNldCBtYXJnaW5zIGFuZCB0YWJzKTsgZm9yIG1vcmUKK2luZm9ybWF0aW9uLCBzZWUgdGhlICJUYWJzIGFuZCBJbml0aWFsaXphdGlvbiIKK3NlY3Rpb24gb2YgXGZCdGVybWluZm9cZlIoNSkKKy5TSCBFWElUIENPREVTCitJZiB0aGUgXGZCLVNcZlIgb3B0aW9uIGlzIHVzZWQsCitcZkJAVFBVVEBcZlIgY2hlY2tzIGZvciBlcnJvcnMgZnJvbSBlYWNoIGxpbmUsCithbmQgaWYgYW55IGVycm9ycyBhcmUgZm91bmQsIHdpbGwgc2V0IHRoZSBleGl0IGNvZGUgdG8gNCBwbHVzIHRoZQorbnVtYmVyIG9mIGxpbmVzIHdpdGggZXJyb3JzLgorSWYgbm8gZXJyb3JzIGFyZSBmb3VuZCwgdGhlIGV4aXQgY29kZSBpcyBcZkIwXGZSLgorTm8gaW5kaWNhdGlvbiBvZiB3aGljaCBsaW5lIGZhaWxlZCBjYW4gYmUgZ2l2ZW4gc28KK2V4aXQgY29kZSBcZkIxXGZSIHdpbGwgbmV2ZXIgYXBwZWFyLiAgRXhpdCBjb2RlcyBcZkIyXGZSLCBcZkIzXGZSLCBhbmQKK1xmQjRcZlIgcmV0YWluIHRoZWlyIHVzdWFsIGludGVycHJldGF0aW9uLgorSWYgdGhlIFxmQi1TXGZSIG9wdGlvbiBpcyBub3QgdXNlZCwKK3RoZSBleGl0IGNvZGUgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBcZkljYXBuYW1lXGZSOgorLlJTIDUKKy5UUAorLkkgYm9vbGVhbgorYSB2YWx1ZSBvZiBcZkIwXGZSIGlzIHNldCBmb3IgVFJVRSBhbmQgXGZCMVxmUiBmb3IgRkFMU0UuCisuVFAKKy5JIHN0cmluZworYSB2YWx1ZSBvZiBcZkIwXGZSIGlzIHNldCBpZiB0aGUKK1xmSWNhcG5hbWVcZlIgaXMgZGVmaW5lZCBmb3IgdGhpcyB0ZXJtaW5hbCBcZkl0eXBlXGZSICh0aGUgdmFsdWUgb2YKK1xmSWNhcG5hbWVcZlIgaXMgcmV0dXJuZWQgb24gc3RhbmRhcmQgb3V0cHV0KTsKK2EgdmFsdWUgb2YgXGZCMVxmUiBpcyBzZXQgaWYgXGZJY2FwbmFtZVxmUgoraXMgbm90IGRlZmluZWQgZm9yIHRoaXMgdGVybWluYWwgXGZJdHlwZVxmUgorKG5vdGhpbmcgaXMgd3JpdHRlbiB0byBzdGFuZGFyZCBvdXRwdXQpLgorLlRQCisuSSBpbnRlZ2VyCithIHZhbHVlIG9mIFxmQjBcZlIgaXMgYWx3YXlzIHNldCwKK3doZXRoZXIgb3Igbm90IFxmSWNhcG5hbWVcZlIgaXMgZGVmaW5lZCBmb3IgdGhpcyB0ZXJtaW5hbCBcZkl0eXBlXGZSLgorVG8gZGV0ZXJtaW5lIGlmIFxmSWNhcG5hbWVcZlIgaXMgZGVmaW5lZCBmb3IgdGhpcyB0ZXJtaW5hbCBcZkl0eXBlXGZSLAordGhlIHVzZXIgbXVzdCB0ZXN0IHRoZSB2YWx1ZSB3cml0dGVuIHRvIHN0YW5kYXJkIG91dHB1dC4KK0EgdmFsdWUgb2YgXGZCLTFcZlIKK21lYW5zIHRoYXQgXGZJY2FwbmFtZVxmUiBpcyBub3QgZGVmaW5lZCBmb3IgdGhpcyB0ZXJtaW5hbCBcZkl0eXBlXGZSLgorLlRQCisuSSBvdGhlcgorXGZCcmVzZXRcZlIgb3IgXGZCaW5pdFxmUiBtYXkgZmFpbCB0byBmaW5kIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMuCitJbiB0aGF0IGNhc2UsIHRoZSBleGl0IGNvZGUgaXMgc2V0IHRvIDQgKyBcZkJlcnJub1xmUi4KKy5SRQorLlBQCitBbnkgb3RoZXIgZXhpdCBjb2RlIGluZGljYXRlcyBhbiBlcnJvcjsgc2VlIHRoZSBESUFHTk9TVElDUyBzZWN0aW9uLgorLlNIIERJQUdOT1NUSUNTCitcZkJ0cHV0XGZSIHByaW50cyB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2VzIGFuZCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGV4aXQKK2NvZGVzLgorLlBQCisubmUgMTUKKy5UUworbCBsLgorZXhpdCBjb2RlCWVycm9yIG1lc3NhZ2UKKz0KK1xmQjBcZlIJVHsKKyhcZkljYXBuYW1lXGZSIGlzIGEgbnVtZXJpYyB2YXJpYWJsZSB0aGF0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlCitcZkJ0ZXJtaW5mb1xmUig1KSBkYXRhYmFzZSBmb3IgdGhpcyB0ZXJtaW5hbCB0eXBlLCBlLmcuCitcZkJAVFBVVEAgLVQ0NTAgbGluZXNcZlIgYW5kIFxmQkBUUFVUQCAtVDI2MjEgeG1jXGZSKQorVH0KK1xmQjFcZlIJbm8gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCBzZWUgdGhlIFxmQkVYSVQgQ09ERVNcZlIgc2VjdGlvbi4KK1xmQjJcZlIJdXNhZ2UgZXJyb3IKK1xmQjNcZlIJdW5rbm93biB0ZXJtaW5hbCBcZkl0eXBlXGZSIG9yIG5vIFxmQnRlcm1pbmZvXGZSIGRhdGFiYXNlCitcZkI0XGZSCXVua25vd24gXGZCdGVybWluZm9cZlIgY2FwYWJpbGl0eSBcZkljYXBuYW1lXGZSCitcZkI+NFxmUgllcnJvciBvY2N1cnJlZCBpbiAtUworPQorLlRFCisuU0ggUE9SVEFCSUxJVFkKKy5QUAorVGhlIFxmQmxvbmduYW1lXGZSIGFuZCBcZkItU1xmUiBvcHRpb25zLCBhbmQgdGhlIHBhcmFtZXRlci1zdWJzdGl0dXRpb24KK2ZlYXR1cmVzIHVzZWQgaW4gdGhlIFxmQmN1cFxmUiBleGFtcGxlLCBhcmUgbm90IHN1cHBvcnRlZCBpbiBCU0QgY3Vyc2VzIG9yIGluCitBVCZUL1VTTCBjdXJzZXMgYmVmb3JlIFNWcjQuCisuUFAKK1gvT3BlbiBkb2N1bWVudHMgb25seSB0aGUgb3BlcmFuZHMgZm9yIFxmQmNsZWFyXGZQLCBcZkJpbml0XGZQIGFuZCBcZkJyZXNldFxmUC4KK0luIHRoaXMgaW1wbGVtZW50YXRpb24sIFxmQmNsZWFyXGZQIGlzIHBhcnQgb2YgdGhlIFxmSWNhcG5hbWVcZlIgc3VwcG9ydC4KK090aGVyIGltcGxlbWVudGF0aW9ucyBvZiBcZkJ0cHV0XGZQIG9uCitTVnI0LWJhc2VkIHN5c3RlbXMgc3VjaCBhcyBTb2xhcmlzLCBJUklYNjQgYW5kIEhQVVgKK2FzIHdlbGwgYXMgb3RoZXJzIHN1Y2ggYXMgQUlYIGFuZCBUcnU2NAorcHJvdmlkZSBzdXBwb3J0IGZvciBcZkljYXBuYW1lXGZSIG9wZXJhbmRzLgorQSBmZXcgcGxhdGZvcm1zIHN1Y2ggYXMgRnJlZUJTRCBhbmQgTmV0QlNEIHJlY29nbml6ZSB0ZXJtY2FwIG5hbWVzIHJhdGhlcgordGhhbiB0ZXJtaW5mbyBjYXBhYmlsaXR5IG5hbWVzIGluIHRoZWlyIHJlc3BlY3RpdmUgXGZCdHB1dFxmUCBjb21tYW5kcy4KKy5TSCBTRUUgQUxTTworXGZCQENMRUFSQFxmUigxKSwKK1xmQnN0dHlcZlIoMSksCitcZkJ0YWJzXGZSKFwqbiksCitcZkJ0ZXJtaW5mb1xmUig1KS4KKy5QUAorVGhpcyBkZXNjcmliZXMgXGZCbmN1cnNlc1xmUgordmVyc2lvbiBATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JAIChwYXRjaCBATkNVUlNFU19QQVRDSEApLgorLlwiIworLlwiIyBUaGUgZm9sbG93aW5nIHNldHMgZWRpdCBtb2RlcyBmb3IgR05VIEVNQUNTCisuXCIjIExvY2FsIFZhcmlhYmxlczoKKy5cIiMgbW9kZTpucm9mZgorLlwiIyBmaWxsLWNvbHVtbjo3OQorLlwiIyBFbmQ6CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tYW4vdHNldC4xIGIvbmN1cnNlcy01LjcvbWFuL3RzZXQuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDIzMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL3RzZXQuMQpAQCAtMCwwICsxLDI4OCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiB0c2V0LjEsdiAxLjE5IDIwMDYvMTIvMjQgMTU6MDA6MzAgdG9tIEV4cCAkCisuVEggdHNldCAxICIiCisuU0ggTkFNRQorXGZCdHNldFxmUiwgXGZCcmVzZXRcZlIgLSB0ZXJtaW5hbCBpbml0aWFsaXphdGlvbgorLlNIIFNZTk9QU0lTCitcZkJ0c2V0XGZSIFtcZkItSVFWY3Fyc3dcZlJdIFtcZkItXGZSXSBbXGZCLWVcZlIgXGZJY2hcZlJdIFtcZkItaVxmUiBcZkljaFxmUl0gW1xmQi1rXGZSIFxmSWNoXGZSXSBbXGZCLW1cZlIgXGZJbWFwcGluZ1xmUl0gW1xmSXRlcm1pbmFsXGZSXQorLmJyCitcZkJyZXNldFxmUiBbXGZCLUlRVmNxcnN3XGZSXSBbXGZCLVxmUl0gW1xmQi1lXGZSIFxmSWNoXGZSXSBbXGZCLWlcZlIgXGZJY2hcZlJdIFtcZkIta1xmUiBcZkljaFxmUl0gW1xmQi1tXGZSIFxmSW1hcHBpbmdcZlJdIFtcZkl0ZXJtaW5hbFxmUl0KKy5TSCBERVNDUklQVElPTgorXCZcZkJUc2V0XGZSIGluaXRpYWxpemVzIHRlcm1pbmFscy4KK1xmQlRzZXRcZlIgZmlyc3QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0ZXJtaW5hbCB0aGF0IHlvdSBhcmUgdXNpbmcuCitUaGlzIGRldGVybWluYXRpb24gaXMgZG9uZSBhcyBmb2xsb3dzLCB1c2luZyB0aGUgZmlyc3QgdGVybWluYWwgdHlwZSBmb3VuZC4KKy5QUAorMS4gVGhlIFxmQnRlcm1pbmFsXGZSIGFyZ3VtZW50IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorLlBQCisyLiBUaGUgdmFsdWUgb2YgdGhlIFxmQlRFUk1cZlIgZW52aXJvbm1lbnRhbCB2YXJpYWJsZS4KKy5QUAorMy4gKEJTRCBzeXN0ZW1zIG9ubHkuKSBUaGUgdGVybWluYWwgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YW5kYXJkCitlcnJvciBvdXRwdXQgZGV2aWNlIGluIHRoZSBcZkkvZXRjL3R0eXNcZlIgZmlsZS4gIChPbiBMaW51eCBhbmQKK1N5c3RlbS1WLWxpa2UgVU5JWGVzLCBcZklnZXR0eVxmUiBkb2VzIHRoaXMgam9iIGJ5IHNldHRpbmcKK1xmQlRFUk1cZlIgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIHBhc3NlZCB0byBpdCBieSBcZkkvZXRjL2luaXR0YWJcZlIuKQorLlBQCis0LiBUaGUgZGVmYXVsdCB0ZXJtaW5hbCB0eXBlLCBgYHVua25vd24nJy4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIHR5cGUgd2FzIG5vdCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIFxmQi1tXGZSCitvcHRpb24gbWFwcGluZ3MgYXJlIHRoZW4gYXBwbGllZCAoc2VlIHRoZSBzZWN0aW9uCisuQiBURVJNSU5BTCBUWVBFIE1BUFBJTkcKK2ZvciBtb3JlIGluZm9ybWF0aW9uKS4KK1RoZW4sIGlmIHRoZSB0ZXJtaW5hbCB0eXBlIGJlZ2lucyB3aXRoIGEgcXVlc3Rpb24gbWFyayAoYGA/JycpLCB0aGUKK3VzZXIgaXMgcHJvbXB0ZWQgZm9yIGNvbmZpcm1hdGlvbiBvZiB0aGUgdGVybWluYWwgdHlwZS4gIEFuIGVtcHR5CityZXNwb25zZSBjb25maXJtcyB0aGUgdHlwZSwgb3IsIGFub3RoZXIgdHlwZSBjYW4gYmUgZW50ZXJlZCB0byBzcGVjaWZ5CithIG5ldyB0eXBlLiAgT25jZSB0aGUgdGVybWluYWwgdHlwZSBoYXMgYmVlbiBkZXRlcm1pbmVkLCB0aGUgdGVybWluZm8KK2VudHJ5IGZvciB0aGUgdGVybWluYWwgaXMgcmV0cmlldmVkLiAgSWYgbm8gdGVybWluZm8gZW50cnkgaXMgZm91bmQKK2ZvciB0aGUgdHlwZSwgdGhlIHVzZXIgaXMgcHJvbXB0ZWQgZm9yIGFub3RoZXIgdGVybWluYWwgdHlwZS4KKy5QUAorT25jZSB0aGUgdGVybWluZm8gZW50cnkgaXMgcmV0cmlldmVkLCB0aGUgd2luZG93IHNpemUsIGJhY2tzcGFjZSwgaW50ZXJydXB0CithbmQgbGluZSBraWxsIGNoYXJhY3RlcnMgKGFtb25nIG1hbnkgb3RoZXIgdGhpbmdzKSBhcmUgc2V0IGFuZCB0aGUgdGVybWluYWwKK2FuZCB0YWIgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0LgorRmluYWxseSwgaWYgdGhlIGVyYXNlLCBpbnRlcnJ1cHQgYW5kIGxpbmUga2lsbCBjaGFyYWN0ZXJzIGhhdmUgY2hhbmdlZCwKK29yIGFyZSBub3Qgc2V0IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCB0aGVpciB2YWx1ZXMgYXJlIGRpc3BsYXllZCB0byB0aGUKK3N0YW5kYXJkIGVycm9yIG91dHB1dC4KK1VzZSB0aGUgXGZCLWNcZlAgb3IgXGZCLXdcZlAgb3B0aW9uIHRvIHNlbGVjdCBvbmx5IHRoZSB3aW5kb3cgc2l6aW5nCit2ZXJzdXMgdGhlIG90aGVyIGluaXRpYWxpemF0aW9uLgorSWYgbmVpdGhlciBvcHRpb24gaXMgZ2l2ZW4sIGJvdGggYXJlIGFzc3VtZWQuCisuUFAKK1doZW4gaW52b2tlZCBhcyBcZkJyZXNldFxmUiwgXGZCdHNldFxmUiBzZXRzIGNvb2tlZCBhbmQgZWNobyBtb2RlcywKK3R1cm5zIG9mZiBjYnJlYWsgYW5kIHJhdyBtb2RlcywgdHVybnMgb24gbmV3bGluZSB0cmFuc2xhdGlvbiBhbmQKK3Jlc2V0cyBhbnkgdW5zZXQgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzIGJlZm9yZQorZG9pbmcgdGhlIHRlcm1pbmFsIGluaXRpYWxpemF0aW9uIGRlc2NyaWJlZCBhYm92ZS4gIFRoaXMgaXMgdXNlZnVsCithZnRlciBhIHByb2dyYW0gZGllcyBsZWF2aW5nIGEgdGVybWluYWwgaW4gYW4gYWJub3JtYWwgc3RhdGUuICBOb3RlLAoreW91IG1heSBoYXZlIHRvIHR5cGUKKy5zcAorICAgIFxmQjxMRj5yZXNldDxMRj5cZlIKKy5zcAorKHRoZSBsaW5lLWZlZWQgY2hhcmFjdGVyIGlzIG5vcm1hbGx5IGNvbnRyb2wtSikgdG8gZ2V0IHRoZSB0ZXJtaW5hbAordG8gd29yaywgYXMgY2FycmlhZ2UtcmV0dXJuIG1heSBubyBsb25nZXIgd29yayBpbiB0aGUgYWJub3JtYWwgc3RhdGUuCitBbHNvLCB0aGUgdGVybWluYWwgd2lsbCBvZnRlbiBub3QgZWNobyB0aGUgY29tbWFuZC4KKy5QUAorVGhlIG9wdGlvbnMgYXJlIGFzIGZvbGxvd3M6CisuVFAgNQorLkIgLWMKK1NldCBjb250cm9sIGNoYXJhY3RlcnMgYW5kIG1vZGVzLgorLkIgLWUKK1NldCB0aGUgZXJhc2UgY2hhcmFjdGVyIHRvIFxmSWNoXGZSLgorLlRQCisuQiAtSQorRG8gbm90IHNlbmQgdGhlIHRlcm1pbmFsIG9yIHRhYiBpbml0aWFsaXphdGlvbiBzdHJpbmdzIHRvIHRoZSB0ZXJtaW5hbC4KKy5UUAorLkIgLWkKK1NldCB0aGUgaW50ZXJydXB0IGNoYXJhY3RlciB0byBcZkljaFxmUi4KKy5UUAorLkIgLWsKK1NldCB0aGUgbGluZSBraWxsIGNoYXJhY3RlciB0byBcZkljaFxmUi4KKy5UUAorLkIgLW0KK1NwZWNpZnkgYSBtYXBwaW5nIGZyb20gYSBwb3J0IHR5cGUgdG8gYSB0ZXJtaW5hbC4KK1NlZSB0aGUgc2VjdGlvbgorLkIgVEVSTUlOQUwgVFlQRSBNQVBQSU5HCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5UUAorLkIgLVEKK0RvIG5vdCBkaXNwbGF5IGFueSB2YWx1ZXMgZm9yIHRoZSBlcmFzZSwgaW50ZXJydXB0IGFuZCBsaW5lIGtpbGwgY2hhcmFjdGVycy4KK05vcm1hbGx5IFxmQnRzZXRcZlIgZGlzcGxheXMgdGhlIHZhbHVlcyBmb3IgY29udHJvbCBjaGFyYWN0ZXJzIHdoaWNoCitkaWZmZXIgZnJvbSB0aGUgc3lzdGVtJ3MgZGVmYXVsdCB2YWx1ZXMuCisuVFAKKy5CIC1xCitUaGUgdGVybWluYWwgdHlwZSBpcyBkaXNwbGF5ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgYW5kIHRoZSB0ZXJtaW5hbCBpcworbm90IGluaXRpYWxpemVkIGluIGFueSB3YXkuICBUaGUgb3B0aW9uIGAtJyBieSBpdHNlbGYgaXMgZXF1aXZhbGVudCBidXQKK2FyY2hhaWMuCisuVFAKKy5CIC1yCitQcmludCB0aGUgdGVybWluYWwgdHlwZSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0LgorLlRQCisuQiAtcworUHJpbnQgdGhlIHNlcXVlbmNlIG9mIHNoZWxsIGNvbW1hbmRzIHRvIGluaXRpYWxpemUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCitcZkJURVJNXGZSIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCitTZWUgdGhlIHNlY3Rpb24KKy5CIFNFVFRJTkcgVEhFIEVOVklST05NRU5UCitmb3IgZGV0YWlscy4KKy5UUAorLkIgLVYKK3JlcG9ydHMgdGhlIHZlcnNpb24gb2YgbmN1cnNlcyB3aGljaCB3YXMgdXNlZCBpbiB0aGlzIHByb2dyYW0sIGFuZCBleGl0cy4KKy5UUAorLkIgLXcKK1Jlc2l6ZSB0aGUgd2luZG93IHRvIG1hdGNoIHRoZSBzaXplIGRlZHVjZWQgdmlhIFxmQnNldHVwdGVybVxmUC4KK05vcm1hbGx5IHRoaXMgaGFzIG5vIGVmZmVjdCwKK3VubGVzcyBcZkJzZXR1cHRlcm1cZlAgaXMgbm90IGFibGUgdG8gZGV0ZWN0IHRoZSB3aW5kb3cgc2l6ZS4KKy5QUAorVGhlIGFyZ3VtZW50cyBmb3IgdGhlIFxmQi1lXGZSLCBcZkItaVxmUiwgYW5kIFxmQi1rXGZSCitvcHRpb25zIG1heSBlaXRoZXIgYmUgZW50ZXJlZCBhcyBhY3R1YWwgY2hhcmFjdGVycyBvciBieSB1c2luZyB0aGUgYGhhdCcKK25vdGF0aW9uLCBpLmUuIGNvbnRyb2wtaCBtYXkgYmUgc3BlY2lmaWVkIGFzIGBgXkgnJyBvciBgYF5oJycuCisuCisuU0ggU0VUVElORyBUSEUgRU5WSVJPTk1FTlQKK0l0IGlzIG9mdGVuIGRlc2lyYWJsZSB0byBlbnRlciB0aGUgdGVybWluYWwgdHlwZSBhbmQgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSB0ZXJtaW5hbCdzIGNhcGFiaWxpdGllcyBpbnRvIHRoZSBzaGVsbCdzIGVudmlyb25tZW50LgorVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBcZkItc1xmUiBvcHRpb24uCisuUFAKK1doZW4gdGhlIFxmQi1zXGZSIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kcyB0byBlbnRlciB0aGUgaW5mb3JtYXRpb24KK2ludG8gdGhlIHNoZWxsJ3MgZW52aXJvbm1lbnQgYXJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIElmCit0aGUgXGZCU0hFTExcZlIgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBlbmRzIGluIGBgY3NoJycsIHRoZSBjb21tYW5kcworYXJlIGZvciBcZkJjc2hcZlIsIG90aGVyd2lzZSwgdGhleSBhcmUgZm9yIFxmQnNoXGZSLgorTm90ZSwgdGhlIFxmQmNzaFxmUiBjb21tYW5kcyBzZXQgYW5kIHVuc2V0IHRoZSBzaGVsbCB2YXJpYWJsZQorXGZCbm9nbG9iXGZSLCBsZWF2aW5nIGl0IHVuc2V0LiAgVGhlIGZvbGxvd2luZyBsaW5lIGluIHRoZSBcZkIubG9naW5cZlIKK29yIFxmQi5wcm9maWxlXGZSIGZpbGVzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZW52aXJvbm1lbnQgY29ycmVjdGx5OgorLnNwCisgICAgZXZhbCBcYHRzZXQgLXMgb3B0aW9ucyAuLi4gXGAKKy4KKy5TSCBURVJNSU5BTCBUWVBFIE1BUFBJTkcKK1doZW4gdGhlIHRlcm1pbmFsIGlzIG5vdCBoYXJkd2lyZWQgaW50byB0aGUgc3lzdGVtIChvciB0aGUgY3VycmVudAorc3lzdGVtIGluZm9ybWF0aW9uIGlzIGluY29ycmVjdCkgdGhlIHRlcm1pbmFsIHR5cGUgZGVyaXZlZCBmcm9tIHRoZQorXGZJL2V0Yy90dHlzXGZSIGZpbGUgb3IgdGhlIFxmQlRFUk1cZlIgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBpcyBvZnRlbgorc29tZXRoaW5nIGdlbmVyaWMgbGlrZSBcZkJuZXR3b3JrXGZSLCBcZkJkaWFsdXBcZlIsIG9yIFxmQnVua25vd25cZlIuCitXaGVuIFxmQnRzZXRcZlIgaXMgdXNlZCBpbiBhIHN0YXJ0dXAgc2NyaXB0IGl0IGlzIG9mdGVuIGRlc2lyYWJsZSB0bworcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZSBvZiB0ZXJtaW5hbCB1c2VkIG9uIHN1Y2ggcG9ydHMuCisuUFAKK1RoZSBwdXJwb3NlIG9mIHRoZSBcZkItbVxmUiBvcHRpb24gaXMgdG8gbWFwCitmcm9tIHNvbWUgc2V0IG9mIGNvbmRpdGlvbnMgdG8gYSB0ZXJtaW5hbCB0eXBlLCB0aGF0IGlzLCB0bwordGVsbCBcZkJ0c2V0XGZSCitgYElmIEknbSBvbiB0aGlzIHBvcnQgYXQgYSBwYXJ0aWN1bGFyIHNwZWVkLCBndWVzcyB0aGF0IEknbSBvbiB0aGF0CitraW5kIG9mIHRlcm1pbmFsJycuCisuUFAKK1RoZSBhcmd1bWVudCB0byB0aGUgXGZCLW1cZlIgb3B0aW9uIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsIHBvcnQgdHlwZSwgYW4KK29wdGlvbmFsIG9wZXJhdG9yLCBhbiBvcHRpb25hbCBiYXVkIHJhdGUgc3BlY2lmaWNhdGlvbiwgYW4gb3B0aW9uYWwKK2NvbG9uIChgYDonJykgY2hhcmFjdGVyIGFuZCBhIHRlcm1pbmFsIHR5cGUuICBUaGUgcG9ydCB0eXBlIGlzIGEKK3N0cmluZyAoZGVsaW1pdGVkIGJ5IGVpdGhlciB0aGUgb3BlcmF0b3Igb3IgdGhlIGNvbG9uIGNoYXJhY3RlcikuICBUaGUKK29wZXJhdG9yIG1heSBiZSBhbnkgY29tYmluYXRpb24gb2YgYGA+JycsIGBgPCcnLCBgYEAnJywgYW5kIGBgIScnOyBgYD4nJworbWVhbnMgZ3JlYXRlciB0aGFuLCBgYDwnJyBtZWFucyBsZXNzIHRoYW4sIGBgQCcnIG1lYW5zIGVxdWFsIHRvCithbmQgYGAhJycgaW52ZXJ0cyB0aGUgc2Vuc2Ugb2YgdGhlIHRlc3QuCitUaGUgYmF1ZCByYXRlIGlzIHNwZWNpZmllZCBhcyBhIG51bWJlciBhbmQgaXMgY29tcGFyZWQgd2l0aCB0aGUgc3BlZWQKK29mIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgKHdoaWNoIHNob3VsZCBiZSB0aGUgY29udHJvbCB0ZXJtaW5hbCkuCitUaGUgdGVybWluYWwgdHlwZSBpcyBhIHN0cmluZy4KKy5QUAorSWYgdGhlIHRlcm1pbmFsIHR5cGUgaXMgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgXGZCLW1cZlIKK21hcHBpbmdzIGFyZSBhcHBsaWVkIHRvIHRoZSB0ZXJtaW5hbCB0eXBlLiAgSWYgdGhlIHBvcnQgdHlwZSBhbmQgYmF1ZAorcmF0ZSBtYXRjaCB0aGUgbWFwcGluZywgdGhlIHRlcm1pbmFsIHR5cGUgc3BlY2lmaWVkIGluIHRoZSBtYXBwaW5nCityZXBsYWNlcyB0aGUgY3VycmVudCB0eXBlLiAgSWYgbW9yZSB0aGFuIG9uZSBtYXBwaW5nIGlzIHNwZWNpZmllZCwgdGhlCitmaXJzdCBhcHBsaWNhYmxlIG1hcHBpbmcgaXMgdXNlZC4KKy5QUAorRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgbWFwcGluZzogXGZCZGlhbHVwPjk2MDA6dnQxMDBcZlIuCitUaGUgcG9ydCB0eXBlIGlzIGRpYWx1cCAsIHRoZSBvcGVyYXRvciBpcyA+LCB0aGUgYmF1ZCByYXRlCitzcGVjaWZpY2F0aW9uIGlzIDk2MDAsIGFuZCB0aGUgdGVybWluYWwgdHlwZSBpcyB2dDEwMC4gIFRoZSByZXN1bHQgb2YKK3RoaXMgbWFwcGluZyBpcyB0byBzcGVjaWZ5IHRoYXQgaWYgdGhlIHRlcm1pbmFsIHR5cGUgaXMgXGZCZGlhbHVwXGZSLAorYW5kIHRoZSBiYXVkIHJhdGUgaXMgZ3JlYXRlciB0aGFuIDk2MDAgYmF1ZCwgYSB0ZXJtaW5hbCB0eXBlIG9mCitcZkJ2dDEwMFxmUiB3aWxsIGJlIHVzZWQuCisuUFAKK0lmIG5vIGJhdWQgcmF0ZSBpcyBzcGVjaWZpZWQsIHRoZSB0ZXJtaW5hbCB0eXBlIHdpbGwgbWF0Y2ggYW55IGJhdWQgcmF0ZS4KK0lmIG5vIHBvcnQgdHlwZSBpcyBzcGVjaWZpZWQsIHRoZSB0ZXJtaW5hbCB0eXBlIHdpbGwgbWF0Y2ggYW55IHBvcnQgdHlwZS4KK0ZvciBleGFtcGxlLCBcZkItbSBkaWFsdXA6dnQxMDAgLW0gOj94dGVybVxmUgord2lsbCBjYXVzZSBhbnkgZGlhbHVwIHBvcnQsIHJlZ2FyZGxlc3Mgb2YgYmF1ZCByYXRlLCB0byBtYXRjaCB0aGUgdGVybWluYWwKK3R5cGUgdnQxMDAsIGFuZCBhbnkgbm9uLWRpYWx1cCBwb3J0IHR5cGUgdG8gbWF0Y2ggdGhlIHRlcm1pbmFsIHR5cGUgP3h0ZXJtLgorTm90ZSwgYmVjYXVzZSBvZiB0aGUgbGVhZGluZyBxdWVzdGlvbiBtYXJrLCB0aGUgdXNlciB3aWxsIGJlCitxdWVyaWVkIG9uIGEgZGVmYXVsdCBwb3J0IGFzIHRvIHdoZXRoZXIgdGhleSBhcmUgYWN0dWFsbHkgdXNpbmcgYW4geHRlcm0KK3Rlcm1pbmFsLgorLlBQCitObyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZCBpbiB0aGUgXGZCLW1cZlIgb3B0aW9uIGFyZ3VtZW50LgorQWxzbywgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBtZXRhLWNoYXJhY3RlcnMsIGl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoZQorZW50aXJlIFxmQi1tXGZSIG9wdGlvbiBhcmd1bWVudCBiZSBwbGFjZWQgd2l0aGluIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzLAorYW5kIHRoYXQgXGZCY3NoXGZSIHVzZXJzIGluc2VydCBhIGJhY2tzbGFzaCBjaGFyYWN0ZXIgKGBgXGUnJykgYmVmb3JlCithbnkgZXhjbGFtYXRpb24gbWFya3MgKGBgIScnKS4KKy5TSCBISVNUT1JZCitUaGUgXGZCdHNldFxmUiBjb21tYW5kIGFwcGVhcmVkIGluIEJTRCAzLjAuICBUaGUgXGZCbmN1cnNlc1xmUiBpbXBsZW1lbnRhdGlvbgord2FzIGxpZ2h0bHkgYWRhcHRlZCBmcm9tIHRoZSA0LjRCU0Qgc291cmNlcyBmb3IgYSB0ZXJtaW5mbyBlbnZpcm9ubWVudCBieSBFcmljCitTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+LgorLlNIIENPTVBBVElCSUxJVFkKK1RoZSBcZkJ0c2V0XGZSIHV0aWxpdHkgaGFzIGJlZW4gcHJvdmlkZWQgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgd2l0aCBCU0QKK2Vudmlyb25tZW50cyAodW5kZXIgbW9zdCBtb2Rlcm4gVU5JWGVzLCBcZkIvZXRjL2luaXR0YWJcZlIgYW5kIFxmSWdldHR5XGZSKDEpCitjYW4gc2V0IFxmQlRFUk1cZlIgYXBwcm9wcmlhdGVseSBmb3IgZWFjaCBkaWFsLXVwIGxpbmU7IHRoaXMgb2J2aWF0ZXMgd2hhdCB3YXMKK1xmQnRzZXRcZlIncyBtb3N0IGltcG9ydGFudCB1c2UpLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBiZWhhdmVzIGxpa2UgNC40QlNECit0c2V0LCB3aXRoIGEgZmV3IGV4Y2VwdGlvbnMgc3BlY2lmaWVkIGhlcmUuCisuUFAKK1RoZSBcZkItU1xmUiBvcHRpb24gb2YgQlNEIHRzZXQgbm8gbG9uZ2VyIHdvcmtzOyBpdCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSB0byBzdGRlcnIKK2FuZCBkaWVzLiAgVGhlIFxmQi1zXGZSIG9wdGlvbiBvbmx5IHNldHMgXGZCVEVSTVxmUiwgbm90IFxmQlRFUk1DQVBcZlAuICBCb3RoIHRoZXNlCitjaGFuZ2VzIGFyZSBiZWNhdXNlIHRoZSBcZkJURVJNQ0FQXGZSIHZhcmlhYmxlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgdW5kZXIKK3Rlcm1pbmZvLWJhc2VkIFxmQm5jdXJzZXNcZlIsIHdoaWNoIG1ha2VzIFxmQnRzZXQgLVNcZlIgdXNlbGVzcyAod2UgbWFkZSBpdCBkaWUKK25vaXNpbHkgcmF0aGVyIHRoYW4gc2lsZW50bHkgaW5kdWNlIGxvc3NhZ2UpLgorLlBQCitUaGVyZSB3YXMgYW4gdW5kb2N1bWVudGVkIDQuNEJTRCBmZWF0dXJlIHRoYXQgaW52b2tpbmcgdHNldCB2aWEgYSBsaW5rIG5hbWVkCitgVFNFVGAgKG9yIHZpYSBhbnkgb3RoZXIgbmFtZSBiZWdpbm5pbmcgd2l0aCBhbiB1cHBlci1jYXNlIGxldHRlcikgc2V0IHRoZQordGVybWluYWwgdG8gdXNlIHVwcGVyLWNhc2Ugb25seS4gIFRoaXMgZmVhdHVyZSBoYXMgYmVlbiBvbWl0dGVkLgorLlBQCitUaGUgXGZCLUFcZlIsIFxmQi1FXGZSLCBcZkItaFxmUiwgXGZCLXVcZlIgYW5kIFxmQi12XGZSCitvcHRpb25zIHdlcmUgZGVsZXRlZCBmcm9tIHRoZSBcZkJ0c2V0XGZSCit1dGlsaXR5IGluIDQuNEJTRC4KK05vbmUgb2YgdGhlbSB3ZXJlIGRvY3VtZW50ZWQgaW4gNC4zQlNEIGFuZCBhbGwgYXJlCitvZiBsaW1pdGVkIHV0aWxpdHkgYXQgYmVzdC4KK1RoZSBcZkItYVxmUiwgXGZCLWRcZlIsIGFuZCBcZkItcFxmUiBvcHRpb25zIGFyZSBzaW1pbGFybHkKK25vdCBkb2N1bWVudGVkIG9yIHVzZWZ1bCwgYnV0IHdlcmUgcmV0YWluZWQgYXMgdGhleSBhcHBlYXIgdG8gYmUgaW4KK3dpZGVzcHJlYWQgdXNlLiAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBhbnkgdXNhZ2Ugb2YgdGhlc2UKK3RocmVlIG9wdGlvbnMgYmUgY2hhbmdlZCB0byB1c2UgdGhlIFxmQi1tXGZSIG9wdGlvbiBpbnN0ZWFkLiAgVGhlCistbiBvcHRpb24gcmVtYWlucywgYnV0IGhhcyBubyBlZmZlY3QuICBUaGUgXGZCLWFkbnBcZlIgb3B0aW9ucyBhcmUgdGhlcmVmb3JlCitvbWl0dGVkIGZyb20gdGhlIHVzYWdlIHN1bW1hcnkgYWJvdmUuCisuUFAKK0l0IGlzIHN0aWxsIHBlcm1pc3NpYmxlIHRvIHNwZWNpZnkgdGhlIFxmQi1lXGZSLCBcZkItaVxmUiwgYW5kIFxmQi1rXGZSIG9wdGlvbnMgd2l0aG91dAorYXJndW1lbnRzLCBhbHRob3VnaCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHN1Y2ggdXNhZ2UgYmUgZml4ZWQgdG8KK2V4cGxpY2l0bHkgc3BlY2lmeSB0aGUgY2hhcmFjdGVyLgorLlBQCitBcyBvZiA0LjRCU0QsIGV4ZWN1dGluZyBcZkJ0c2V0XGZSIGFzIFxmQnJlc2V0XGZSIG5vIGxvbmdlciBpbXBsaWVzIHRoZSBcZkItUVxmUgorb3B0aW9uLiAgQWxzbywgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIC0gb3B0aW9uIGFuZCB0aGUgXGZJdGVybWluYWxcZlIKK2FyZ3VtZW50IGluIHNvbWUgaGlzdG9yaWMgaW1wbGVtZW50YXRpb25zIG9mIFxmQnRzZXRcZlIgaGFzIGJlZW4gcmVtb3ZlZC4KKy5TSCBFTlZJUk9OTUVOVAorVGhlIFxmQnRzZXRcZlIgY29tbWFuZCB1c2VzIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlczoKKy5UUCA1CitTSEVMTAordGVsbHMgXGZCdHNldFxmUCB3aGV0aGVyIHRvIGluaXRpYWxpemUgXGZCVEVSTVxmUCB1c2luZyBcZkJzaFxmUCBvcgorXGZCY3NoXGZQIHN5bnRheC4KKy5UUCA1CitURVJNCitEZW5vdGVzIHlvdXIgdGVybWluYWwgdHlwZS4KK0VhY2ggdGVybWluYWwgdHlwZSBpcyBkaXN0aW5jdCwgdGhvdWdoIG1hbnkgYXJlIHNpbWlsYXIuCisuVFAgNQorVEVSTUNBUAorbWF5IGRlbm90ZSB0aGUgbG9jYXRpb24gb2YgYSB0ZXJtY2FwIGRhdGFiYXNlLgorSWYgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGhuYW1lLCBlLmcuLCBiZWdpbnMgd2l0aCBhIGAvJywKK1xmQnRzZXRcZlAgcmVtb3ZlcyB0aGUgdmFyaWFibGUgZnJvbSB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIGxvb2tpbmcKK2ZvciB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uCisuU0ggRklMRVMKKy5UUCA1CisvZXRjL3R0eXMKK3N5c3RlbSBwb3J0IG5hbWUgdG8gdGVybWluYWwgdHlwZSBtYXBwaW5nIGRhdGFiYXNlIChCU0QgdmVyc2lvbnMgb25seSkuCisuVFAKK0BURVJNSU5GT0AKK3Rlcm1pbmFsIGNhcGFiaWxpdHkgZGF0YWJhc2UKKy5TSCBTRUUgQUxTTworY3NoKDEpLAorc2goMSksCitzdHR5KDEpLAorY3Vyc190ZXJtaW5mbygzWCksCit0dHkoNCksCit0ZXJtaW5mbyg1KSwKK3R0eXMoNSksCitlbnZpcm9uKDcpCisuUFAKK1RoaXMgZGVzY3JpYmVzIFxmQm5jdXJzZXNcZlIKK3ZlcnNpb24gQE5DVVJTRVNfTUFKT1JALkBOQ1VSU0VTX01JTk9SQCAocGF0Y2ggQE5DVVJTRVNfUEFUQ0hAKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWFuL3dyZXNpemUuM3ggYi9uY3Vyc2VzLTUuNy9tYW4vd3Jlc2l6ZS4zeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDA1ZDNlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWFuL3dyZXNpemUuM3gKQEAgLTAsMCArMSw2NCBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYKKy5cIgorLlwiICRJZDogd3Jlc2l6ZS4zeCx2IDEuOSAyMDA2LzAyLzI1IDIxOjQ3OjA2IHRvbSBFeHAgJAorLlRIIHdyZXNpemUgM1ggIiIKKy5TSCBOQU1FCitcZkJ3cmVzaXplXGZSIC0gcmVzaXplIGEgY3Vyc2VzIHdpbmRvdworLlNIIFNZTk9QU0lTCitcZkIjaW5jbHVkZSA8Y3Vyc2VzLmg+XGZSCisuc3AKK1xmQmludCB3cmVzaXplKFdJTkRPVyAqd2luLCBpbnQgbGluZXMsIGludCBjb2x1bW5zKTtcZlIKKy5TSCBERVNDUklQVElPTgorVGhlIFxmQndyZXNpemVcZlIgZnVuY3Rpb24gcmVhbGxvY2F0ZXMgc3RvcmFnZSBmb3IgYW4gXGZCbmN1cnNlc1xmUgord2luZG93IHRvIGFkanVzdCBpdHMgZGltZW5zaW9ucyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlcy4KK0lmIGVpdGhlciBkaW1lbnNpb24gaXMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWVzLCB0aGUKK3dpbmRvdydzIGRhdGEgaXMgZmlsbGVkIHdpdGggYmxhbmtzIHRoYXQgaGF2ZSB0aGUgY3VycmVudCBiYWNrZ3JvdW5kIHJlbmRpdGlvbgorKGFzIHNldCBieSBcZkJ3YmtnbmRzZXRcZlIpIG1lcmdlZCBpbnRvIHRoZW0uCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW50ZWdlciBcZkJFUlJcZlIgdXBvbiBmYWlsdXJlIGFuZCBcZkJPS1xmUiBvbiBzdWNjZXNzLgorSXQgd2lsbCBmYWlsIGlmIGVpdGhlciBvZiB0aGUgZGltZW5zaW9ucyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywKK29yIGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSAocmUpYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSB3aW5kb3cuCisuU0ggTk9URVMKK1RoZSBvbmx5IHJlc3RyaWN0aW9uIHBsYWNlZCBvbiB0aGUgZGltZW5zaW9ucyBpcyB0aGF0IHRoZXkgYmUgZ3JlYXRlciB0aGFuIHplcm8uCitUaGUgZGltZW5zaW9ucyBhcmUgbm90IGNvbXBhcmVkIHRvIFxmQmN1cnNlc1xmUiBzY3JlZW4gZGltZW5zaW9ucyB0bworc2ltcGxpZnkgdGhlIGxvZ2ljIG9mIFxmQnJlc2l6ZXRlcm1cZlIuCitUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdpbmRvdydzIGRpbWVuc2lvbnMgZml0IHdpdGhpbiB0aGUKK2FjdHVhbCBzY3JlZW4gZGltZW5zaW9ucy4KKy5TSCBTRUUgQUxTTworXGZCcmVzaXpldGVybVxmUigzWCkuCisuU0ggQVVUSE9SCitUaG9tYXMgRGlja2V5IChmcm9tIGFuIGVxdWl2YWxlbnQgZnVuY3Rpb24gd3JpdHRlbiBpbiAxOTg4IGZvciBCU0QgY3Vyc2VzKS4KKy5cIiMKKy5cIiMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUworLlwiIyBMb2NhbCBWYXJpYWJsZXM6CisuXCIjIG1vZGU6bnJvZmYKKy5cIiMgZmlsbC1jb2x1bW46NzkKKy5cIiMgRW5kOgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9NYWtlZmlsZS5pbiBiL25jdXJzZXMtNS43L21lbnUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzM2RjNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxNjcgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuNDggMjAwNy8wNC8yOCAxNDo1NjoxMSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtb24KKyMKKyMgTWFrZWZpbGUgZm9yIG1lbnUgc291cmNlIGNvZGUuCisjCisjIFRoaXMgbWFrZXMgdGhlIGZvbGxvd2luZzoKKyMJbGlicmFyaWVzIChub3JtYWwvZGVidWcvcHJvZmlsZS9zaGFyZWQpCisjCisjIFRoZSB2YXJpYWJsZSAnc3JjZGlyJyByZWZlcnMgdG8gdGhlIHNvdXJjZS1kaXN0cmlidXRpb24sIGFuZCBjYW4gYmUgc2V0IHdpdGgKKyMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnkgIi0tc3JjZGlyPURJUiIuCisjCisjIFRoZSBydWxlcyBhcmUgb3JnYW5pemVkIHRvIHByb2R1Y2UgdGhlIGxpYnJhcmllcyBmb3IgdGhlIGNvbmZpZ3VyZWQgbW9kZWxzLAorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK3gJCT0gQEVYRUVYVEAKK28JCT0gLkBPQkpFWFRACisKK01PREVMCQk9IEBERlRfTFdSX01PREVMQAorREVTVERJUgkJPSBAREVTVERJUkAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorbGliZGlyCQk9IEBsaWJkaXJACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACisKK0xJQlRPT0wJCT0gQExJQlRPT0xACitMSUJUT09MX0NMRUFOCT0gQExJQl9DTEVBTkAKK0xJQlRPT0xfQ09NUElMRQk9IEBMSUJfQ09NUElMRUAKK0xJQlRPT0xfTElOSwk9IEBMSUJfTElOS0AKK0xJQlRPT0xfSU5TVEFMTAk9IEBMSUJfSU5TVEFMTEAKK0xJQlRPT0xfVU5JTlNUQUxMID0gQExJQl9VTklOU1RBTExACisKK0lOU1RBTEwJCT0gQElOU1RBTExACitJTlNUQUxMX0xJQgk9IEBJTlNUQUxMQCBASU5TVEFMTF9MSUJACitJTlNUQUxMX1BST0cJPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9EQVRBCT0gQElOU1RBTExfREFUQUAKKworQVIJCT0gQEFSQAorQVJfT1BUUwkJPSBAQVJfT1BUU0AKK0FXSwkJPSBAQVdLQAorTEQJCT0gQExEQAorTE5fUwkJPSBATE5fU0AKKworQ0MJCT0gQENDQAorQ1BQCQk9IEBDUFBACitDRkxBR1MJCT0gQENGTEFHU0AKKworQ1BQRkxBR1MJPSAtSUB0b3Bfc3JjZGlyQC9uY3Vyc2VzIC1ESEFWRV9DT05GSUdfSCBAQ1BQRkxBR1NACisKK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCisKK0NGTEFHU19MSUJUT09MCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX05PUk1BTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19ERUJVRwk9ICQoQ0NGTEFHUykgQENDX0dfT1BUQCAtRFRSQUNFCitDRkxBR1NfUFJPRklMRQk9ICQoQ0NGTEFHUykgLXBnCitDRkxBR1NfU0hBUkVECT0gJChDQ0ZMQUdTKSBAQ0NfU0hBUkVEX09QVFNACisKK0NGTEFHU19ERUZBVUxUCT0gJChDRkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitMSU5LCQk9ICQoTElCVE9PTF9MSU5LKQorTERGTEFHUwkJPSBATERGTEFHU0AgQExEX01PREVMQCBATElCU0AKKworU0hMSUJfRElSUwk9IC1MLi4vbGliCitTSExJQl9MSVNUCT0gJChTSExJQl9ESVJTKSAtbG5jdXJzZXNATElCX1NVRkZJWEAgQFNITElCX0xJU1RACisKK01LX1NIQVJFRF9MSUIJPSBATUtfU0hBUkVEX0xJQkAKKworTkNVUlNFU19NQUpPUgk9IEBOQ1VSU0VTX01BSk9SQAorTkNVUlNFU19NSU5PUgk9IEBOQ1VSU0VTX01JTk9SQAorUkVMX1ZFUlNJT04JPSBAY2ZfY3ZfcmVsX3ZlcnNpb25ACitBQklfVkVSU0lPTgk9IEBjZl9jdl9hYmlfdmVyc2lvbkAKKworUkFOTElCCQk9IEBMSUJfUFJFUEAKKworTElCUkFSSUVTCT0gQExJQlNfVE9fTUFLRUAKKworTElOVAkJPSBATElOVEAKK0xJTlRfT1BUUwk9IEBMSU5UX09QVFNACitMSU5UX0xJQlMJPSAtbG1lbnUgLWxuY3Vyc2VzIEBMSUJTQAorCitBVVRPX1NSQwk9IFwKKwkJLi4vaW5jbHVkZS9tZW51LmggXAorCQkuLi9pbmNsdWRlL2V0aS5oIFwKKwkJLi4vaW5jbHVkZS9tZl9jb21tb24uaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWxsIFwKK2xpYnMgXAoraW5zdGFsbCA6OgkkKEFVVE9fU1JDKSAkKExJQlJBUklFUykKKworc291cmNlcyA6CSQoQVVUT19TUkMpCisKKyQoREVTVERJUikkKGJpbmRpcikgXAorJChERVNURElSKSQobGliZGlyKSA6CisJc2ggJChzcmNkaXIpLy4uL21rZGlycy5zaCAkQAorCisjIG1ha2UgY29waWVzIHRvIHNpbXBsaWZ5IGluY2x1ZGUtcGF0aHMgd2hpbGUgc3RpbGwga2VlcGluZyBtZW51J3MgaW5jbHVkZQorIyBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgorLi4vaW5jbHVkZS9tZW51LmggOiAkKHNyY2RpcikvbWVudS5oCisJLXJtIC1mICRACisJY3AgJChzcmNkaXIpL21lbnUuaCAkQAorLi4vaW5jbHVkZS9ldGkuaCA6ICQoc3JjZGlyKS9ldGkuaAorCS1ybSAtZiAkQAorCWNwICQoc3JjZGlyKS9ldGkuaCAkQAorLi4vaW5jbHVkZS9tZl9jb21tb24uaCA6ICQoc3JjZGlyKS9tZl9jb21tb24uaAorCS1ybSAtZiAkQAorCWNwICQoc3JjZGlyKS9tZl9jb21tb24uaCAkQAorCitNRU5VX1BSSVZfSCA9IFwKKwkkKHNyY2RpcikvbWVudS5wcml2LmggXAorCSQoQVVUT19TUkMpIFwKKwkuLi9pbmNsdWRlL2N1cnNlcy5oCisKK3RhZ3M6CisJY3RhZ3MgKi5bY2hdCisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUzoKK0BNQUtFX1VQUEVSX1RBR1NACWV0YWdzICouW2NoXQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwktcm0gLWYgJChBVVRPX1NSQykKKworZGlzdGNsZWFuIDo6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9SRUFELk1FIGIvbmN1cnNlcy01LjcvbWVudS9SRUFELk1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZmY1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L1JFQUQuTUUKQEAgLTAsMCArMSw0MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFELk1FLHYgMS45IDIwMDYvMDQvMjIgMjM6MTM6MDUgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBjbG9uZSBvZiB0aGUgbWVudSBsaWJyYXJ5IHRoYXQgaXMgYXZhaWxhYmxlIHdpdGggdHlwaWNhbAorU3lzdGVtIFYgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyAoRVRJKS4KKworSXQgaXMgbW9kZWxsZWQgYWZ0ZXIgdGhlIGRvY3VtZW50YXRpb24gdGhhdCBjb21lcyBmb3IgdGhpcyBsaWJyYXJ5IHdpdGgKK2EgMzg2IGJhc2VkIFNWUjQgaW1wbGVtZW50YXRpb24gKEVTSVgpLgorCitUaGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgd2FzIGFuZCBpcyBhbiBFTEYgYmFzZWQgTGludXggc3lzdGVtLgorCitGb3IgdGhpbmdzIHRoYXQgc3RpbGwgbmVlZCBkb2luZywgc2VlIHRoZSBUTy1ETyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgCitkaXJlY3RvcnkuCisKK0p1ZXJnZW4gUGZlaWZlcgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9ldGkuaCBiL25jdXJzZXMtNS43L21lbnUvZXRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhNjE5MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvZXRpLmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiBldGkuaCx2IDEuOCAyMDAzLzEwLzI1IDE1OjI0OjI5IHRvbSBFeHAgJCAqLworCisjaWZuZGVmIE5DVVJTRVNfRVRJX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX0VUSV9IX2luY2wgMQorCisjZGVmaW5lCUVfT0sJCQkoMCkKKyNkZWZpbmUJRV9TWVNURU1fRVJST1IJIAkoLTEpCisjZGVmaW5lCUVfQkFEX0FSR1VNRU5UCSAJKC0yKQorI2RlZmluZQlFX1BPU1RFRAkgCSgtMykKKyNkZWZpbmUJRV9DT05ORUNURUQJIAkoLTQpCisjZGVmaW5lCUVfQkFEX1NUQVRFCSAJKC01KQorI2RlZmluZQlFX05PX1JPT00JIAkoLTYpCisjZGVmaW5lCUVfTk9UX1BPU1RFRAkJKC03KQorI2RlZmluZQlFX1VOS05PV05fQ09NTUFORAkoLTgpCisjZGVmaW5lCUVfTk9fTUFUQ0gJCSgtOSkKKyNkZWZpbmUJRV9OT1RfU0VMRUNUQUJMRQkoLTEwKQorI2RlZmluZQlFX05PVF9DT05ORUNURUQJICAgICAgICAoLTExKQorI2RlZmluZQlFX1JFUVVFU1RfREVOSUVECSgtMTIpCisjZGVmaW5lCUVfSU5WQUxJRF9GSUVMRAkgICAgICAgICgtMTMpCisjZGVmaW5lCUVfQ1VSUkVOVAkJKC0xNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L2hlYWRlcnMgYi9uY3Vyc2VzLTUuNy9tZW51L2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjMjBhZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvaGVhZGVycwpAQCAtMCwwICsxLDMzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NgorIworJChzcmNkaXIpL2V0aS5oCiskKHNyY2RpcikvbWVudS5oCisjIHZpbGU6bWFrZW1vZGUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbGxpYi1sbWVudSBiL25jdXJzZXMtNS43L21lbnUvbGxpYi1sbWVudQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzE3Y2MzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9sbGliLWxtZW51CkBAIC0wLDAgKzEsNTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgMTk5Ni0yMDAyLDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTElOVExJQlJBUlkgKi8KKworLyogLi9tX2F0dHJpYnMuYyAqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKKyN1bmRlZiBzZXRfbWVudV9mb3JlCitpbnQJc2V0X21lbnVfZm9yZSgKKwkJTUVOVQkqbWVudSwgCisJCWNodHlwZQlhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2ZvcmUKK2NodHlwZQltZW51X2ZvcmUoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIHNldF9tZW51X2JhY2sKK2ludAlzZXRfbWVudV9iYWNrKAorCQlNRU5VCSptZW51LCAKKwkJY2h0eXBlCWF0dHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfYmFjaworY2h0eXBlCW1lbnVfYmFjaygKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgc2V0X21lbnVfZ3JleQoraW50CXNldF9tZW51X2dyZXkoCisJCU1FTlUJKm1lbnUsIAorCQljaHR5cGUJYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9ncmV5CitjaHR5cGUJbWVudV9ncmV5KAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKy8qIC4vbV9jdXJzb3IuYyAqLworCisjdW5kZWYgX25jX21lbnVfY3Vyc29yX3BvcworaW50CV9uY19tZW51X2N1cnNvcl9wb3MoCisJCWNvbnN0IE1FTlUgKm1lbnUsIAorCQljb25zdCBJVEVNICppdGVtLCAKKwkJaW50CSpwWSwgCisJCWludAkqcFgpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBvc19tZW51X2N1cnNvcgoraW50CXBvc19tZW51X2N1cnNvcigKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fZHJpdmVyLmMgKi8KKworI3VuZGVmIF9uY19NYXRjaF9OZXh0X0NoYXJhY3Rlcl9Jbl9JdGVtX05hbWUKK2ludAlfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lKAorCQlNRU5VCSptZW51LCAKKwkJaW50CWNoLCAKKwkJSVRFTQkqKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfZHJpdmVyCitpbnQJbWVudV9kcml2ZXIoCisJCU1FTlUJKm1lbnUsIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fZm9ybWF0LmMgKi8KKworI3VuZGVmIHNldF9tZW51X2Zvcm1hdAoraW50CXNldF9tZW51X2Zvcm1hdCgKKwkJTUVOVQkqbWVudSwgCisJCWludAlyb3dzLCAKKwkJaW50CWNvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfZm9ybWF0Cit2b2lkCW1lbnVfZm9ybWF0KAorCQljb25zdCBNRU5VICptZW51LCAKKwkJaW50CSpyb3dzLCAKKwkJaW50CSpjb2xzKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL21fZ2xvYmFsLmMgKi8KKworI3VuZGVmIF9uY19EZWZhdWx0X01lbnUKK01FTlUJX25jX0RlZmF1bHRfTWVudTsKKyN1bmRlZiBfbmNfRGVmYXVsdF9JdGVtCitJVEVNCV9uY19EZWZhdWx0X0l0ZW07CisKKyN1bmRlZiBfbmNfQ29ubmVjdF9JdGVtcworTkNVUlNFU19CT09MIF9uY19Db25uZWN0X0l0ZW1zKAorCQlNRU5VCSptZW51LCAKKwkJSVRFTQkqKml0ZW1zKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfRGlzY29ubmVjdF9JdGVtcwordm9pZAlfbmNfRGlzY29ubmVjdF9JdGVtcygKKwkJTUVOVQkqbWVudSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19DYWxjdWxhdGVfVGV4dF9XaWR0aAoraW50CV9uY19DYWxjdWxhdGVfVGV4dF9XaWR0aCgKKwkJY29uc3QgVEVYVCAqaXRlbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgKK3ZvaWQJX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgoCisJCU1FTlUJKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfTGlua19JdGVtcwordm9pZAlfbmNfTGlua19JdGVtcygKKwkJTUVOVQkqbWVudSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19TaG93X01lbnUKK3ZvaWQJX25jX1Nob3dfTWVudSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19OZXdfVG9wUm93X2FuZF9DdXJyZW50SXRlbQordm9pZAlfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0oCisJCU1FTlUJKm1lbnUsIAorCQlpbnQJbmV3X3RvcHJvdywgCisJCUlURU0JKm5ld19jdXJyZW50X2l0ZW0pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vbV9ob29rLmMgKi8KKworI3VuZGVmIHNldF9tZW51X2luaXQKK2ludAlzZXRfbWVudV9pbml0KAorCQlNRU5VCSptZW51LCAKKwkJTWVudV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfaW5pdAorTWVudV9Ib29rIG1lbnVfaW5pdCgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihNZW51X0hvb2sgKikwKTsgfQorCisjdW5kZWYgc2V0X21lbnVfdGVybQoraW50CXNldF9tZW51X3Rlcm0oCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV90ZXJtCitNZW51X0hvb2sgbWVudV90ZXJtKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKE1lbnVfSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfaXRlbV9pbml0CitpbnQJc2V0X2l0ZW1faW5pdCgKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX2luaXQKK01lbnVfSG9vayBpdGVtX2luaXQoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9pdGVtX3Rlcm0KK2ludAlzZXRfaXRlbV90ZXJtKAorCQlNRU5VCSptZW51LCAKKwkJTWVudV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fdGVybQorTWVudV9Ib29rIGl0ZW1fdGVybSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihNZW51X0hvb2sgKikwKTsgfQorCisvKiAuL21faXRlbV9jdXIuYyAqLworCisjdW5kZWYgc2V0X2N1cnJlbnRfaXRlbQoraW50CXNldF9jdXJyZW50X2l0ZW0oCisJCU1FTlUJKm1lbnUsIAorCQlJVEVNCSppdGVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjdXJyZW50X2l0ZW0KK0lURU0JKmN1cnJlbnRfaXRlbSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihJVEVNICoqKTApOyB9CisKKyN1bmRlZiBpdGVtX2luZGV4CitpbnQJaXRlbV9pbmRleCgKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21faXRlbV9uYW0uYyAqLworCisjdW5kZWYgaXRlbV9uYW1lCitjb25zdCBjaGFyICppdGVtX25hbWUoCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgaXRlbV9kZXNjcmlwdGlvbgorY29uc3QgY2hhciAqaXRlbV9kZXNjcmlwdGlvbigKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKy8qIC4vbV9pdGVtX25ldy5jICovCisKKyN1bmRlZiBuZXdfaXRlbQorSVRFTQkqbmV3X2l0ZW0oCisJCWNvbnN0IGNoYXIgKm5hbWUsIAorCQljb25zdCBjaGFyICpkZXNjcmlwdGlvbikKKwkJeyByZXR1cm4oKihJVEVNICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX2l0ZW0KK2ludAlmcmVlX2l0ZW0oCisJCUlURU0JKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldF9tZW51X21hcmsKK2ludAlzZXRfbWVudV9tYXJrKAorCQlNRU5VCSptZW51LCAKKwkJY29uc3QgY2hhciAqbWFyaykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9tYXJrCitjb25zdCBjaGFyICptZW51X21hcmsoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisvKiAuL21faXRlbV9vcHQuYyAqLworCisjdW5kZWYgc2V0X2l0ZW1fb3B0cworaW50CXNldF9pdGVtX29wdHMoCisJCUlURU0JKml0ZW0sIAorCQlJdGVtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaXRlbV9vcHRzX29mZgoraW50CWl0ZW1fb3B0c19vZmYoCisJCUlURU0JKml0ZW0sIAorCQlJdGVtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaXRlbV9vcHRzX29uCitpbnQJaXRlbV9vcHRzX29uKAorCQlJVEVNCSppdGVtLCAKKwkJSXRlbV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fb3B0cworSXRlbV9PcHRpb25zIGl0ZW1fb3B0cygKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKihJdGVtX09wdGlvbnMgKikwKTsgfQorCisvKiAuL21faXRlbV90b3AuYyAqLworCisjdW5kZWYgc2V0X3RvcF9yb3cKK2ludAlzZXRfdG9wX3JvdygKKwkJTUVOVQkqbWVudSwgCisJCWludAlyb3cpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRvcF9yb3cKK2ludAl0b3Bfcm93KAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9pdGVtX3VzZS5jICovCisKKyN1bmRlZiBzZXRfaXRlbV91c2VycHRyCitpbnQJc2V0X2l0ZW1fdXNlcnB0cigKKwkJSVRFTQkqaXRlbSwgCisJCXZvaWQJKnVzZXJwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fdXNlcnB0cgordm9pZAkqaXRlbV91c2VycHRyKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi9tX2l0ZW1fdmFsLmMgKi8KKworI3VuZGVmIHNldF9pdGVtX3ZhbHVlCitpbnQJc2V0X2l0ZW1fdmFsdWUoCisJCUlURU0JKml0ZW0sIAorCQlOQ1VSU0VTX0JPT0wgdmFsdWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fdmFsdWUKK05DVVJTRVNfQk9PTCBpdGVtX3ZhbHVlKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vbV9pdGVtX3Zpcy5jICovCisKKyN1bmRlZiBpdGVtX3Zpc2libGUKK05DVVJTRVNfQk9PTCBpdGVtX3Zpc2libGUoCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9tX2l0ZW1zLmMgKi8KKworI3VuZGVmIHNldF9tZW51X2l0ZW1zCitpbnQJc2V0X21lbnVfaXRlbXMoCisJCU1FTlUJKm1lbnUsIAorCQlJVEVNCSoqaXRlbXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfaXRlbXMKK0lURU0JKiptZW51X2l0ZW1zKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKElURU0gKioqKTApOyB9CisKKyN1bmRlZiBpdGVtX2NvdW50CitpbnQJaXRlbV9jb3VudCgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fbmV3LmMgKi8KKworI3VuZGVmIG5ld19tZW51CitNRU5VCSpuZXdfbWVudSgKKwkJSVRFTQkqKml0ZW1zKQorCQl7IHJldHVybigqKE1FTlUgKiopMCk7IH0KKworI3VuZGVmIGZyZWVfbWVudQoraW50CWZyZWVfbWVudSgKKwkJTUVOVQkqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fb3B0cy5jICovCisKKyN1bmRlZiBzZXRfbWVudV9vcHRzCitpbnQJc2V0X21lbnVfb3B0cygKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X29wdHNfb2ZmCitpbnQJbWVudV9vcHRzX29mZigKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X29wdHNfb24KK2ludAltZW51X29wdHNfb24oCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9vcHRzCitNZW51X09wdGlvbnMgbWVudV9vcHRzKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKE1lbnVfT3B0aW9ucyAqKTApOyB9CisKKy8qIC4vbV9wYWQuYyAqLworCisjdW5kZWYgc2V0X21lbnVfcGFkCitpbnQJc2V0X21lbnVfcGFkKAorCQlNRU5VCSptZW51LCAKKwkJaW50CXBhZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9wYWQKK2ludAltZW51X3BhZCgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fcGF0dGVybi5jICovCisKKyN1bmRlZiBtZW51X3BhdHRlcm4KK2NoYXIJKm1lbnVfcGF0dGVybigKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV9wYXR0ZXJuCitpbnQJc2V0X21lbnVfcGF0dGVybigKKwkJTUVOVQkqbWVudSwgCisJCWNvbnN0IGNoYXIgKnApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3Bvc3QuYyAqLworCisjdW5kZWYgX25jX1Bvc3RfSXRlbQordm9pZAlfbmNfUG9zdF9JdGVtKAorCQljb25zdCBNRU5VICptZW51LCAKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19EcmF3X01lbnUKK3ZvaWQJX25jX0RyYXdfTWVudSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHBvc3RfbWVudQoraW50CXBvc3RfbWVudSgKKwkJTUVOVQkqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5wb3N0X21lbnUKK2ludAl1bnBvc3RfbWVudSgKKwkJTUVOVQkqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fcmVxX25hbWUuYyAqLworCisjdW5kZWYgbWVudV9yZXF1ZXN0X25hbWUKK2NvbnN0IGNoYXIgKm1lbnVfcmVxdWVzdF9uYW1lKAorCQlpbnQJcmVxdWVzdCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBtZW51X3JlcXVlc3RfYnlfbmFtZQoraW50CW1lbnVfcmVxdWVzdF9ieV9uYW1lKAorCQljb25zdCBjaGFyICpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3NjYWxlLmMgKi8KKworI3VuZGVmIHNjYWxlX21lbnUKK2ludAlzY2FsZV9tZW51KAorCQljb25zdCBNRU5VICptZW51LCAKKwkJaW50CSpyb3dzLCAKKwkJaW50CSpjb2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9zcGFjaW5nLmMgKi8KKworI3VuZGVmIHNldF9tZW51X3NwYWNpbmcKK2ludAlzZXRfbWVudV9zcGFjaW5nKAorCQlNRU5VCSptZW51LCAKKwkJaW50CXNfZGVzYywgCisJCWludAlzX3JvdywgCisJCWludAlzX2NvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9zcGFjaW5nCitpbnQJbWVudV9zcGFjaW5nKAorCQljb25zdCBNRU5VICptZW51LCAKKwkJaW50CSpzX2Rlc2MsIAorCQlpbnQJKnNfcm93LCAKKwkJaW50CSpzX2NvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fc3ViLmMgKi8KKworI3VuZGVmIHNldF9tZW51X3N1YgoraW50CXNldF9tZW51X3N1YigKKwkJTUVOVQkqbWVudSwgCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X3N1YgorV0lORE9XCSptZW51X3N1YigKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9tX3RyYWNlLmMgKi8KKworI3VuZGVmIF9uY19yZXRyYWNlX2l0ZW0KK0lURU0JKl9uY19yZXRyYWNlX2l0ZW0oCisJCUlURU0JKmNvZGUpCisJCXsgcmV0dXJuKCooSVRFTSAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfaXRlbV9wdHIKK0lURU0JKipfbmNfcmV0cmFjZV9pdGVtX3B0cigKKwkJSVRFTQkqKmNvZGUpCisJCXsgcmV0dXJuKCooSVRFTSAqKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2l0ZW1fb3B0cworSXRlbV9PcHRpb25zIF9uY19yZXRyYWNlX2l0ZW1fb3B0cygKKwkJSXRlbV9PcHRpb25zIGNvZGUpCisJCXsgcmV0dXJuKCooSXRlbV9PcHRpb25zICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX21lbnUKK01FTlUJKl9uY19yZXRyYWNlX21lbnUoCisJCU1FTlUJKmNvZGUpCisJCXsgcmV0dXJuKCooTUVOVSAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfbWVudV9ob29rCitNZW51X0hvb2sgX25jX3JldHJhY2VfbWVudV9ob29rKAorCQlNZW51X0hvb2sgY29kZSkKKwkJeyByZXR1cm4oKihNZW51X0hvb2sgKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfbWVudV9vcHRzCitNZW51X09wdGlvbnMgX25jX3JldHJhY2VfbWVudV9vcHRzKAorCQlNZW51X09wdGlvbnMgY29kZSkKKwkJeyByZXR1cm4oKihNZW51X09wdGlvbnMgKikwKTsgfQorCisvKiAuL21fdXNlcnB0ci5jICovCisKKyN1bmRlZiBzZXRfbWVudV91c2VycHRyCitpbnQJc2V0X21lbnVfdXNlcnB0cigKKwkJTUVOVQkqbWVudSwgCisJCXZvaWQJKnVzZXJwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfdXNlcnB0cgordm9pZAkqbWVudV91c2VycHRyKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi9tX3dpbi5jICovCisKKyN1bmRlZiBzZXRfbWVudV93aW4KK2ludAlzZXRfbWVudV93aW4oCisJCU1FTlUJKm1lbnUsIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV93aW4KK1dJTkRPVwkqbWVudV93aW4oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L2xsaWItbG1lbnV3IGIvbmN1cnNlcy01LjcvbWVudS9sbGliLWxtZW51dwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjFmYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9sbGliLWxtZW51dwpAQCAtMCwwICsxLDU0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDIwMDIsMjAwNSAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExJTlRMSUJSQVJZICovCisKKy8qIC4vbV9hdHRyaWJzLmMgKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCisjdW5kZWYgc2V0X21lbnVfZm9yZQoraW50CXNldF9tZW51X2ZvcmUoCisJCU1FTlUJKm1lbnUsIAorCQljaHR5cGUJYXR0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9mb3JlCitjaHR5cGUJbWVudV9mb3JlKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV9iYWNrCitpbnQJc2V0X21lbnVfYmFjaygKKwkJTUVOVQkqbWVudSwgCisJCWNodHlwZQlhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2JhY2sKK2NodHlwZQltZW51X2JhY2soCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIHNldF9tZW51X2dyZXkKK2ludAlzZXRfbWVudV9ncmV5KAorCQlNRU5VCSptZW51LCAKKwkJY2h0eXBlCWF0dHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfZ3JleQorY2h0eXBlCW1lbnVfZ3JleSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL21fY3Vyc29yLmMgKi8KKworI3VuZGVmIF9uY19tZW51X2N1cnNvcl9wb3MKK2ludAlfbmNfbWVudV9jdXJzb3JfcG9zKAorCQljb25zdCBNRU5VICptZW51LCAKKwkJY29uc3QgSVRFTSAqaXRlbSwgCisJCWludAkqcFksIAorCQlpbnQJKnBYKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwb3NfbWVudV9jdXJzb3IKK2ludAlwb3NfbWVudV9jdXJzb3IoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX2RyaXZlci5jICovCisKKyN1bmRlZiBfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lCitpbnQJX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZSgKKwkJTUVOVQkqbWVudSwgCisJCWludAljaCwgCisJCUlURU0JKippdGVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2RyaXZlcgoraW50CW1lbnVfZHJpdmVyKAorCQlNRU5VCSptZW51LCAKKwkJaW50CWMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX2Zvcm1hdC5jICovCisKKyN1bmRlZiBzZXRfbWVudV9mb3JtYXQKK2ludAlzZXRfbWVudV9mb3JtYXQoCisJCU1FTlUJKm1lbnUsIAorCQlpbnQJcm93cywgCisJCWludAljb2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2Zvcm1hdAordm9pZAltZW51X2Zvcm1hdCgKKwkJY29uc3QgTUVOVSAqbWVudSwgCisJCWludAkqcm93cywgCisJCWludAkqY29scykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9tX2dsb2JhbC5jICovCisKKyN1bmRlZiBfbmNfRGVmYXVsdF9NZW51CitNRU5VCV9uY19EZWZhdWx0X01lbnU7CisjdW5kZWYgX25jX0RlZmF1bHRfSXRlbQorSVRFTQlfbmNfRGVmYXVsdF9JdGVtOworCisjdW5kZWYgX25jX0Nvbm5lY3RfSXRlbXMKK05DVVJTRVNfQk9PTCBfbmNfQ29ubmVjdF9JdGVtcygKKwkJTUVOVQkqbWVudSwgCisJCUlURU0JKippdGVtcykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX0Rpc2Nvbm5lY3RfSXRlbXMKK3ZvaWQJX25jX0Rpc2Nvbm5lY3RfSXRlbXMoCisJCU1FTlUJKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgKK2ludAlfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoCisJCWNvbnN0IFRFWFQgKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoCit2b2lkCV9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoKAorCQlNRU5VCSptZW51KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX0xpbmtfSXRlbXMKK3ZvaWQJX25jX0xpbmtfSXRlbXMoCisJCU1FTlUJKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfU2hvd19NZW51Cit2b2lkCV9uY19TaG93X01lbnUoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0KK3ZvaWQJX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtKAorCQlNRU5VCSptZW51LCAKKwkJaW50CW5ld190b3Byb3csIAorCQlJVEVNCSpuZXdfY3VycmVudF9pdGVtKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL21faG9vay5jICovCisKKyN1bmRlZiBzZXRfbWVudV9pbml0CitpbnQJc2V0X21lbnVfaW5pdCgKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X2luaXQKK01lbnVfSG9vayBtZW51X2luaXQoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworI3VuZGVmIHNldF9tZW51X3Rlcm0KK2ludAlzZXRfbWVudV90ZXJtKAorCQlNRU5VCSptZW51LCAKKwkJTWVudV9Ib29rIGZ1bmMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfdGVybQorTWVudV9Ib29rIG1lbnVfdGVybSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihNZW51X0hvb2sgKikwKTsgfQorCisjdW5kZWYgc2V0X2l0ZW1faW5pdAoraW50CXNldF9pdGVtX2luaXQoCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X0hvb2sgZnVuYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaXRlbV9pbml0CitNZW51X0hvb2sgaXRlbV9pbml0KAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKE1lbnVfSG9vayAqKTApOyB9CisKKyN1bmRlZiBzZXRfaXRlbV90ZXJtCitpbnQJc2V0X2l0ZW1fdGVybSgKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfSG9vayBmdW5jKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpdGVtX3Rlcm0KK01lbnVfSG9vayBpdGVtX3Rlcm0oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooTWVudV9Ib29rICopMCk7IH0KKworLyogLi9tX2l0ZW1fY3VyLmMgKi8KKworI3VuZGVmIHNldF9jdXJyZW50X2l0ZW0KK2ludAlzZXRfY3VycmVudF9pdGVtKAorCQlNRU5VCSptZW51LCAKKwkJSVRFTQkqaXRlbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY3VycmVudF9pdGVtCitJVEVNCSpjdXJyZW50X2l0ZW0oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooSVRFTSAqKikwKTsgfQorCisjdW5kZWYgaXRlbV9pbmRleAoraW50CWl0ZW1faW5kZXgoCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX2l0ZW1fbmFtLmMgKi8KKworI3VuZGVmIGl0ZW1fbmFtZQorY29uc3QgY2hhciAqaXRlbV9uYW1lKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIGl0ZW1fZGVzY3JpcHRpb24KK2NvbnN0IGNoYXIgKml0ZW1fZGVzY3JpcHRpb24oCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisvKiAuL21faXRlbV9uZXcuYyAqLworCisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyN1bmRlZiBuZXdfaXRlbQorSVRFTQkqbmV3X2l0ZW0oCisJCWNvbnN0IGNoYXIgKm5hbWUsIAorCQljb25zdCBjaGFyICpkZXNjcmlwdGlvbikKKwkJeyByZXR1cm4oKihJVEVNICoqKTApOyB9CisKKyN1bmRlZiBmcmVlX2l0ZW0KK2ludAlmcmVlX2l0ZW0oCisJCUlURU0JKml0ZW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldF9tZW51X21hcmsKK2ludAlzZXRfbWVudV9tYXJrKAorCQlNRU5VCSptZW51LCAKKwkJY29uc3QgY2hhciAqbWFyaykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9tYXJrCitjb25zdCBjaGFyICptZW51X21hcmsoCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisvKiAuL21faXRlbV9vcHQuYyAqLworCisjdW5kZWYgc2V0X2l0ZW1fb3B0cworaW50CXNldF9pdGVtX29wdHMoCisJCUlURU0JKml0ZW0sIAorCQlJdGVtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaXRlbV9vcHRzX29mZgoraW50CWl0ZW1fb3B0c19vZmYoCisJCUlURU0JKml0ZW0sIAorCQlJdGVtX09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaXRlbV9vcHRzX29uCitpbnQJaXRlbV9vcHRzX29uKAorCQlJVEVNCSppdGVtLCAKKwkJSXRlbV9PcHRpb25zIG9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fb3B0cworSXRlbV9PcHRpb25zIGl0ZW1fb3B0cygKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyByZXR1cm4oKihJdGVtX09wdGlvbnMgKikwKTsgfQorCisvKiAuL21faXRlbV90b3AuYyAqLworCisjdW5kZWYgc2V0X3RvcF9yb3cKK2ludAlzZXRfdG9wX3JvdygKKwkJTUVOVQkqbWVudSwgCisJCWludAlyb3cpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRvcF9yb3cKK2ludAl0b3Bfcm93KAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9pdGVtX3VzZS5jICovCisKKyN1bmRlZiBzZXRfaXRlbV91c2VycHRyCitpbnQJc2V0X2l0ZW1fdXNlcnB0cigKKwkJSVRFTQkqaXRlbSwgCisJCXZvaWQJKnVzZXJwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fdXNlcnB0cgordm9pZAkqaXRlbV91c2VycHRyKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi9tX2l0ZW1fdmFsLmMgKi8KKworI3VuZGVmIHNldF9pdGVtX3ZhbHVlCitpbnQJc2V0X2l0ZW1fdmFsdWUoCisJCUlURU0JKml0ZW0sIAorCQlOQ1VSU0VTX0JPT0wgdmFsdWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGl0ZW1fdmFsdWUKK05DVVJTRVNfQk9PTCBpdGVtX3ZhbHVlKAorCQljb25zdCBJVEVNICppdGVtKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vbV9pdGVtX3Zpcy5jICovCisKKyN1bmRlZiBpdGVtX3Zpc2libGUKK05DVVJTRVNfQk9PTCBpdGVtX3Zpc2libGUoCisJCWNvbnN0IElURU0gKml0ZW0pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9tX2l0ZW1zLmMgKi8KKworI3VuZGVmIHNldF9tZW51X2l0ZW1zCitpbnQJc2V0X21lbnVfaXRlbXMoCisJCU1FTlUJKm1lbnUsIAorCQlJVEVNCSoqaXRlbXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfaXRlbXMKK0lURU0JKiptZW51X2l0ZW1zKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKElURU0gKioqKTApOyB9CisKKyN1bmRlZiBpdGVtX2NvdW50CitpbnQJaXRlbV9jb3VudCgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fbmV3LmMgKi8KKworI3VuZGVmIG5ld19tZW51CitNRU5VCSpuZXdfbWVudSgKKwkJSVRFTQkqKml0ZW1zKQorCQl7IHJldHVybigqKE1FTlUgKiopMCk7IH0KKworI3VuZGVmIGZyZWVfbWVudQoraW50CWZyZWVfbWVudSgKKwkJTUVOVQkqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fb3B0cy5jICovCisKKyN1bmRlZiBzZXRfbWVudV9vcHRzCitpbnQJc2V0X21lbnVfb3B0cygKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X29wdHNfb2ZmCitpbnQJbWVudV9vcHRzX29mZigKKwkJTUVOVQkqbWVudSwgCisJCU1lbnVfT3B0aW9ucyBvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X29wdHNfb24KK2ludAltZW51X29wdHNfb24oCisJCU1FTlUJKm1lbnUsIAorCQlNZW51X09wdGlvbnMgb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9vcHRzCitNZW51X09wdGlvbnMgbWVudV9vcHRzKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKE1lbnVfT3B0aW9ucyAqKTApOyB9CisKKy8qIC4vbV9wYWQuYyAqLworCisjdW5kZWYgc2V0X21lbnVfcGFkCitpbnQJc2V0X21lbnVfcGFkKAorCQlNRU5VCSptZW51LCAKKwkJaW50CXBhZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9wYWQKK2ludAltZW51X3BhZCgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fcGF0dGVybi5jICovCisKKyN1bmRlZiBtZW51X3BhdHRlcm4KK2NoYXIJKm1lbnVfcGF0dGVybigKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBzZXRfbWVudV9wYXR0ZXJuCitpbnQJc2V0X21lbnVfcGF0dGVybigKKwkJTUVOVQkqbWVudSwgCisJCWNvbnN0IGNoYXIgKnApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3Bvc3QuYyAqLworCisjdW5kZWYgX25jX1Bvc3RfSXRlbQordm9pZAlfbmNfUG9zdF9JdGVtKAorCQljb25zdCBNRU5VICptZW51LCAKKwkJY29uc3QgSVRFTSAqaXRlbSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19EcmF3X01lbnUKK3ZvaWQJX25jX0RyYXdfTWVudSgKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHBvc3RfbWVudQoraW50CXBvc3RfbWVudSgKKwkJTUVOVQkqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5wb3N0X21lbnUKK2ludAl1bnBvc3RfbWVudSgKKwkJTUVOVQkqbWVudSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fcmVxX25hbWUuYyAqLworCisjdW5kZWYgbWVudV9yZXF1ZXN0X25hbWUKK2NvbnN0IGNoYXIgKm1lbnVfcmVxdWVzdF9uYW1lKAorCQlpbnQJcmVxdWVzdCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBtZW51X3JlcXVlc3RfYnlfbmFtZQoraW50CW1lbnVfcmVxdWVzdF9ieV9uYW1lKAorCQljb25zdCBjaGFyICpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9tX3NjYWxlLmMgKi8KKworI3VuZGVmIHNjYWxlX21lbnUKK2ludAlzY2FsZV9tZW51KAorCQljb25zdCBNRU5VICptZW51LCAKKwkJaW50CSpyb3dzLCAKKwkJaW50CSpjb2xzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbV9zcGFjaW5nLmMgKi8KKworI3VuZGVmIHNldF9tZW51X3NwYWNpbmcKK2ludAlzZXRfbWVudV9zcGFjaW5nKAorCQlNRU5VCSptZW51LCAKKwkJaW50CXNfZGVzYywgCisJCWludAlzX3JvdywgCisJCWludAlzX2NvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV9zcGFjaW5nCitpbnQJbWVudV9zcGFjaW5nKAorCQljb25zdCBNRU5VICptZW51LCAKKwkJaW50CSpzX2Rlc2MsIAorCQlpbnQJKnNfcm93LCAKKwkJaW50CSpzX2NvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL21fc3ViLmMgKi8KKworI3VuZGVmIHNldF9tZW51X3N1YgoraW50CXNldF9tZW51X3N1YigKKwkJTUVOVQkqbWVudSwgCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtZW51X3N1YgorV0lORE9XCSptZW51X3N1YigKKwkJY29uc3QgTUVOVSAqbWVudSkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9tX3RyYWNlLmMgKi8KKworI3VuZGVmIF9uY19yZXRyYWNlX2l0ZW0KK0lURU0JKl9uY19yZXRyYWNlX2l0ZW0oCisJCUlURU0JKmNvZGUpCisJCXsgcmV0dXJuKCooSVRFTSAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfaXRlbV9wdHIKK0lURU0JKipfbmNfcmV0cmFjZV9pdGVtX3B0cigKKwkJSVRFTQkqKmNvZGUpCisJCXsgcmV0dXJuKCooSVRFTSAqKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2l0ZW1fb3B0cworSXRlbV9PcHRpb25zIF9uY19yZXRyYWNlX2l0ZW1fb3B0cygKKwkJSXRlbV9PcHRpb25zIGNvZGUpCisJCXsgcmV0dXJuKCooSXRlbV9PcHRpb25zICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX21lbnUKK01FTlUJKl9uY19yZXRyYWNlX21lbnUoCisJCU1FTlUJKmNvZGUpCisJCXsgcmV0dXJuKCooTUVOVSAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfbWVudV9ob29rCitNZW51X0hvb2sgX25jX3JldHJhY2VfbWVudV9ob29rKAorCQlNZW51X0hvb2sgY29kZSkKKwkJeyByZXR1cm4oKihNZW51X0hvb2sgKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfbWVudV9vcHRzCitNZW51X09wdGlvbnMgX25jX3JldHJhY2VfbWVudV9vcHRzKAorCQlNZW51X09wdGlvbnMgY29kZSkKKwkJeyByZXR1cm4oKihNZW51X09wdGlvbnMgKikwKTsgfQorCisvKiAuL21fdXNlcnB0ci5jICovCisKKyN1bmRlZiBzZXRfbWVudV91c2VycHRyCitpbnQJc2V0X21lbnVfdXNlcnB0cigKKwkJTUVOVQkqbWVudSwgCisJCXZvaWQJKnVzZXJwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1lbnVfdXNlcnB0cgordm9pZAkqbWVudV91c2VycHRyKAorCQljb25zdCBNRU5VICptZW51KQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworLyogLi9tX3dpbi5jICovCisKKyN1bmRlZiBzZXRfbWVudV93aW4KK2ludAlzZXRfbWVudV93aW4oCisJCU1FTlUJKm1lbnUsIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWVudV93aW4KK1dJTkRPVwkqbWVudV93aW4oCisJCWNvbnN0IE1FTlUgKm1lbnUpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21fYXR0cmlicy5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2F0dHJpYnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTI2ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tX2F0dHJpYnMuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9hdHRyaWJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBDb250cm9sIG1lbnVzIGRpc3BsYXkgYXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2F0dHJpYnMuYyx2IDEuMTQgMjAwNC8xMi8xMSAyMzoyOToxMiB0b20gRXhwICQiKQorCisvKiBNYWNybyB0byByZWRyYXcgbWVudSBpZiBpdCBpcyBwb3N0ZWQgYW5kIGNoYW5nZWQgKi8KKyNkZWZpbmUgUmVmcmVzaF9NZW51KG1lbnUpIFwKKyAgIGlmICggKG1lbnUpICYmICgobWVudSktPnN0YXR1cyAmIF9QT1NURUQpIClcCisgICB7XAorICAgICAgX25jX0RyYXdfTWVudSggbWVudSApO1wKKyAgICAgIF9uY19TaG93X01lbnUoIG1lbnUgKTtcCisgICB9CisKKy8qICJUZW1wbGF0ZSIgbWFjcm8gdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBzZXQgYSBtZW51cyBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgR0VOX01FTlVfQVRUUl9TRVRfRkNUKCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgaW50IE5DVVJTRVNfQVBJIHNldF9tZW51XyAjIyBuYW1lIChNRU5VICogbWVudSwgY2h0eXBlIGF0dHIpXAore1wKKyAgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV8iICNuYW1lICIoJXAsJXMpIiksIG1lbnUsIF90cmFjZWF0dHIoYXR0cikpKTtcCisgICBpZiAoIShhdHRyPT1BX05PUk1BTCB8fCAoYXR0ciAmIEFfQVRUUklCVVRFUyk9PWF0dHIpKVwKKyAgICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7XAorICAgaWYgKG1lbnUgJiYgKCBtZW51IC0+IG5hbWUgIT0gYXR0cikpXAorICAgICB7XAorICAgICAgIChtZW51IC0+IG5hbWUpID0gYXR0cjtcCisgICAgICAgUmVmcmVzaF9NZW51KG1lbnUpO1wKKyAgICAgfVwKKyAgIE5vcm1hbGl6ZV9NZW51KCBtZW51ICkgLT4gbmFtZSA9IGF0dHI7XAorICAgUkVUVVJOKEVfT0spO1wKK30KKworLyogIlRlbXBsYXRlIiBtYWNybyB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHRvIGdldCBhIG1lbnUncyBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgR0VOX01FTlVfQVRUUl9HRVRfRkNUKCBuYW1lICkgXAorTkNVUlNFU19JTVBFWFAgY2h0eXBlIE5DVVJTRVNfQVBJIG1lbnVfICMjIG5hbWUgKGNvbnN0IE1FTlUgKiBtZW51KVwKK3tcCisgICBUKChUX0NBTExFRCgibWVudV8iICNuYW1lICIoJXApIiksIG1lbnUpKTtcCisgICByZXR1cm5BdHRyKE5vcm1hbGl6ZV9NZW51KCBtZW51ICkgLT4gbmFtZSk7XAorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X2ZvcmUoTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIGF0dHJpYnV0ZSBmb3Igc2VsZWN0YWJsZSBpdGVtcy4gSW4gc2luZ2xlLQorfCAgICAgICAgICAgICAgICAgICAgdmFsdWVkIG1lbnVzIHRoaXMgaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIGl0ZW0gKChpLmUuIHdoZXJlIHRoZSBjdXJzb3IgaXMpLCBpbiBtdWx0aS12YWx1ZWQKK3wgICAgICAgICAgICAgICAgICAgIG1lbnVzIHRoaXMgaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIHNlbGVjdGVkIGl0ZW1zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGFuIGludmFsaWQgdmFsdWUgaGFzIGJlZW4gcGFzc2VkICAgCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworR0VOX01FTlVfQVRUUl9TRVRfRkNUKGZvcmUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBjaHR5cGUgbWVudV9mb3JlKGNvbnN0IE1FTlUqIG1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIGF0dHJpYnV0ZSB1c2VkIGZvciBzZWxlY3RhYmxlIGl0ZW1zIHRoYXQKK3wgICAgICAgICAgICAgICAgICAgIGFyZSBjdXJyZW50IChzaW5nbGUtdmFsdWVkIG1lbnUpIG9yIHNlbGVjdGVkIChtdWx0aS0KK3wgICAgICAgICAgICAgICAgICAgIHZhbHVlZCBtZW51KS4gICAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEF0dHJpYnV0ZSB2YWx1ZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9NRU5VX0FUVFJfR0VUX0ZDVChmb3JlKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X2JhY2soTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIGF0dHJpYnV0ZSBmb3Igc2VsZWN0YWJsZSBidXQgbm90IHlldCBzZWxlY3RlZAorfCAgICAgICAgICAgICAgICAgICAgaXRlbXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgIC0gc3VjY2VzcyAgCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgIC0gYW4gaW52YWxpZCB2YWx1ZSBoYXMgYmVlbiBwYXNzZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fTUVOVV9BVFRSX1NFVF9GQ1QoYmFjaykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGNodHlwZSBtZW51X2JhY2soY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgYXR0cmlidXRlIHVzZWQgZm9yIHNlbGVjdGFibGUgYnV0IG5vdCB5ZXQKK3wgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIGl0ZW1zLiAKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEF0dHJpYnV0ZSB2YWx1ZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9NRU5VX0FUVFJfR0VUX0ZDVChiYWNrKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X2dyZXkoTUVOVSAqbWVudSwgY2h0eXBlIGF0dHIpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIGF0dHJpYnV0ZSBmb3IgdW5zZWxlY3RhYmxlIGl0ZW1zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgLSBhbiBpbnZhbGlkIHZhbHVlIGhhcyBiZWVuIHBhc3NlZCAgICAKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fTUVOVV9BVFRSX1NFVF9GQ1QoZ3JleSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGNodHlwZSBtZW51X2dyZXkoY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiB0aGUgYXR0cmlidXRlIHVzZWQgZm9yIG5vbi1zZWxlY3RhYmxlIGl0ZW1zCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBBdHRyaWJ1dGUgdmFsdWUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fTUVOVV9BVFRSX0dFVF9GQ1QoZ3JleSkKKy8qIG1fYXR0cmlicy5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX2N1cnNvci5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2N1cnNvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTNmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21fY3Vyc29yLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fY3Vyc29yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogQ29ycmVjdGx5IHBvc2l0aW9uIGEgbWVudSdzIGN1cnNvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9jdXJzb3IuYyx2IDEuMjAgMjAwNS8xMC8yMiAyMzowMzozMiB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIF9uY19tZW51X2N1cnNvcl9wb3MKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiBwb3NpdGlvbiBvZiBsb2dpY2FsIGN1cnNvciB0byBjdXJyZW50IGl0ZW0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgbWVudQorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfUE9TVEVEICAgIC0gTWVudSBpcyBub3QgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX21lbnVfY3Vyc29yX3Bvcyhjb25zdCBNRU5VICogbWVudSwgY29uc3QgSVRFTSAqIGl0ZW0sIGludCAqcFksIGludCAqcFgpCit7CisgIGlmICghbWVudSB8fCAhcFggfHwgIXBZKQorICAgIHJldHVybiAoRV9CQURfQVJHVU1FTlQpOworICBlbHNlCisgICAgeworICAgICAgaWYgKChJVEVNICopIDAgPT0gaXRlbSkKKwlpdGVtID0gbWVudS0+Y3VyaXRlbTsKKyAgICAgIGFzc2VydChpdGVtICE9IChJVEVNICopIDApOworCisgICAgICBpZiAoIShtZW51LT5zdGF0dXMgJiBfUE9TVEVEKSkKKwlyZXR1cm4gKEVfTk9UX1BPU1RFRCk7CisKKyAgICAgICpwWCA9IGl0ZW0tPnggKiAobWVudS0+c3BjX2NvbHMgKyBtZW51LT5pdGVtbGVuKTsKKyAgICAgICpwWSA9IChpdGVtLT55IC0gbWVudS0+dG9wcm93KSAqIG1lbnUtPnNwY19yb3dzOworICAgIH0KKyAgcmV0dXJuIChFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBwb3NfbWVudV9jdXJzb3IKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFBvc2l0aW9uIGxvZ2ljYWwgY3Vyc29yIHRvIGN1cnJlbnQgaXRlbSBpbiBtZW51Cit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG1lbnUKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX1BPU1RFRCAgICAtIE1lbnUgaXMgbm90IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3Bvc19tZW51X2N1cnNvcihjb25zdCBNRU5VICogbWVudSkKK3sKKyAgV0lORE9XICp3aW4sICpzdWI7CisgIGludCB4ID0gMCwgeSA9IDA7CisgIGludCBlcnIgPSBfbmNfbWVudV9jdXJzb3JfcG9zKG1lbnUsIChJVEVNICopIDAsICZ5LCAmeCk7CisKKyAgVCgoVF9DQUxMRUQoInBvc19tZW51X2N1cnNvciglcCkiKSwgbWVudSkpOworCisgIGlmIChFX09LID09IGVycikKKyAgICB7CisgICAgICB3aW4gPSBtZW51LT51c2Vyd2luID8gbWVudS0+dXNlcndpbiA6IHN0ZHNjcjsKKyAgICAgIHN1YiA9IG1lbnUtPnVzZXJzdWIgPyBtZW51LT51c2Vyc3ViIDogd2luOworICAgICAgYXNzZXJ0KHdpbiAmJiBzdWIpOworCisgICAgICBpZiAoKG1lbnUtPm9wdCAmIE9fU0hPV01BVENIKSAmJiAobWVudS0+cGluZGV4ID4gMCkpCisJeCArPSAobWVudS0+cGluZGV4ICsgbWVudS0+bWFya2xlbiAtIDEpOworCisgICAgICB3bW92ZShzdWIsIHksIHgpOworCisgICAgICBpZiAod2luICE9IHN1YikKKwl7CisJICB3Y3Vyc3luY3VwKHN1Yik7CisJICB3c3luY3VwKHN1Yik7CisJICB1bnRvdWNod2luKHN1Yik7CisJfQorICAgIH0KKyAgUkVUVVJOKGVycik7Cit9CisKKy8qIG1fY3Vyc29yLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21fZHJpdmVyLmMgYi9uY3Vyc2VzLTUuNy9tZW51L21fZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxOGU2YQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9kcml2ZXIuYwpAQCAtMCwwICsxLDU1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9kcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBDZW50cmFsIGRpc3BhdGNoaW5nIHJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2RyaXZlci5jLHYgMS4yNyAyMDA4LzA4LzAzIDIyOjA4OjIyIHRvbSBFeHAgJCIpCisKKy8qIE1hY3JvcyAqLworCisvKiBSZW1vdmUgdGhlIGxhc3QgY2hhcmFjdGVyIGZyb20gdGhlIG1hdGNoIHBhdHRlcm4gYnVmZmVyICovCisjZGVmaW5lIFJlbW92ZV9DaGFyYWN0ZXJfRnJvbV9QYXR0ZXJuKG1lbnUpIFwKKyAgKG1lbnUpLT5wYXR0ZXJuWy0tKChtZW51KS0+cGluZGV4KV0gPSAnXDAnCisKKy8qIEFkZCBhIG5ldyBjaGFyYWN0ZXIgdG8gdGhlIG1hdGNoIHBhdHRlcm4gYnVmZmVyICovCisjZGVmaW5lIEFkZF9DaGFyYWN0ZXJfVG9fUGF0dGVybihtZW51LGNoKSBcCisgIHsgKG1lbnUpLT5wYXR0ZXJuWygobWVudSktPnBpbmRleCkrK10gPSAoY2gpO1wKKyAgICAobWVudSktPnBhdHRlcm5bKG1lbnUpLT5waW5kZXhdID0gJ1wwJzsgfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyBib29sIElzX1N1Yl9TdHJpbmcoCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBJZ25vcmVDYXNlRmxhZywKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXJ0LAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIENoZWNrcyB3aGV0aGVyIG9yIG5vdCBwYXJ0IGlzIGEgc3Vic3RyaW5nIG9mIHN0cmluZy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAtIGlmIGl0IGlzIGEgc3Vic3RyaW5nCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSAgLSBpZiBpdCBpcyBub3QgYSBzdWJzdHJpbmcKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgYm9vbAorSXNfU3ViX1N0cmluZygKKwkgICAgICAgYm9vbCBJZ25vcmVDYXNlRmxhZywKKwkgICAgICAgY29uc3QgY2hhciAqcGFydCwKKwkgICAgICAgY29uc3QgY2hhciAqc3RyaW5nCispCit7CisgIGFzc2VydChwYXJ0ICYmIHN0cmluZyk7CisgIGlmIChJZ25vcmVDYXNlRmxhZykKKyAgICB7CisgICAgICB3aGlsZSAoKnN0cmluZyAmJiAqcGFydCkKKwl7CisJICBpZiAodG91cHBlcihVQ2hhcigqc3RyaW5nKyspKSAhPSB0b3VwcGVyKFVDaGFyKCpwYXJ0KSkpCisJICAgIGJyZWFrOworCSAgcGFydCsrOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3aGlsZSAoKnN0cmluZyAmJiAqcGFydCkKKwlpZiAoKnBhcnQgIT0gKnN0cmluZysrKQorCSAgYnJlYWs7CisgICAgICBwYXJ0Kys7CisgICAgfQorICByZXR1cm4gKCgqcGFydCkgPyBGQUxTRSA6IFRSVUUpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTlUgKm1lbnUsCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBjaCwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBJVEVNICoqaXRlbSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFRoaXMgaW50ZXJuYWwgcm91dGluZSBpcyBjYWxsZWQgZm9yIGEgbWVudSBwb3NpdGlvbmVkCit8ICAgICAgICAgICAgICAgICAgICBhdCBhbiBpdGVtIHdpdGggdGhyZWUgZGlmZmVyZW50IGNsYXNzZXMgb2YgY2hhcmFjdGVyczoKK3wgICAgICAgICAgICAgICAgICAgICAgIC0gYSBwcmludGFibGUgY2hhcmFjdGVyOyB0aGUgY2hhcmFjdGVyIGlzIGFkZGVkIHRvCit8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IHBhdHRlcm4gYW5kIHRoZSBuZXh0IGl0ZW0gbWF0Y2hpbmcKK3wgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBwYXR0ZXJuIGlzIHNlYXJjaGVkLgorfCAgICAgICAgICAgICAgICAgICAgICAgLSBOVUw7IHRoZSBwYXR0ZXJuIHN0YXlzIGFzIGl0IGlzIGFuZCB0aGUgbmV4dCBpdGVtCit8ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIGlzIHNlYXJjaGVkCit8ICAgICAgICAgICAgICAgICAgICAgICAtIEJTOyB0aGUgcGF0dGVybiBzdGF5cyBhcyBpdCBpcyBhbmQgdGhlIHByZXZpb3VzCit8ICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gbWF0Y2hpbmcgdGhlIHBhdHRlcm4gaXMgc2VhcmNoZWQKK3wKK3wgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpdGVtIHBhcmFtZXRlciBjb250YWlucyBvbiBjYWxsIGEgcG9pbnRlciB0bworfCAgICAgICAgICAgICAgICAgICAgICAgdGhlIGl0ZW0gd2hlcmUgdGhlIHNlYXJjaCBzdGFydHMuIE9uIHJldHVybiAtIGlmCit8ICAgICAgICAgICAgICAgICAgICAgICBhIG1hdGNoIHdhcyBmb3VuZCAtIGl0IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUKK3wgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIGl0ZW0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAtIGFuIGl0ZW0gbWF0Y2hpbmcgdGhlIHBhdHRlcm4gd2FzIGZvdW5kCit8ICAgICAgICAgICAgICAgICAgICBFX05PX01BVENIICAtIG5vdGhpbmcgZm91bmQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lCisoTUVOVSAqIG1lbnUsIGludCBjaCwgSVRFTSAqKiBpdGVtKQoreworICBib29sIGZvdW5kID0gRkFMU0UsIHBhc3NlZCA9IEZBTFNFOworICBpbnQgaWR4LCBsYXN0OworCisgIFQoKFRfQ0FMTEVEKCJfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXIoJXAsJWQsJXApIiksIG1lbnUsIGNoLCBpdGVtKSk7CisKKyAgYXNzZXJ0KG1lbnUgJiYgaXRlbSAmJiAqaXRlbSk7CisgIGlkeCA9ICgqaXRlbSktPmluZGV4OworCisgIGlmIChjaCAmJiBjaCAhPSBCUykKKyAgICB7CisgICAgICAvKiBpZiB3ZSBiZWNvbWUgdG8gbG9uZywgd2UgbmVlZCBubyBmdXJ0aGVyIGNoZWNraW5nIDogdGhlcmUgY2FuJ3QgYmUKKyAgICAgICAgIGEgbWF0Y2ggISAqLworICAgICAgaWYgKChtZW51LT5waW5kZXggKyAxKSA+IG1lbnUtPm5hbWVsZW4pCisJUkVUVVJOKEVfTk9fTUFUQ0gpOworCisgICAgICBBZGRfQ2hhcmFjdGVyX1RvX1BhdHRlcm4obWVudSwgY2gpOworICAgICAgLyogd2UgYXJ0aWZpY2lhbGx5IHBvc2l0aW9uIG9uZSBpdGVtIGJhY2ssIGJlY2F1c2UgaW4gdGhlIGRvLi4ud2hpbGUKKyAgICAgICAgIGxvb3Agd2Ugc3RhcnQgd2l0aCB0aGUgbmV4dCBpdGVtLiBUaGlzIG1lYW5zLCB0aGF0IHdpdGggYSBuZXcKKyAgICAgICAgIHBhdHRlcm4gc2VhcmNoIHdlIGFsd2F5cyBzdGFydCB0aGUgc2NhbiB3aXRoIHRoZSBhY3R1YWwgaXRlbS4gSWYKKyAgICAgICAgIHdlIGRvIGEgTkVYVF9QQVRURVJOIG9kZXIgUFJFVl9QQVRURVJOIHNlYXJjaCwgd2Ugc3RhcnQgd2l0aCB0aGUKKyAgICAgICAgIG9uZSBhZnRlciBvciBiZWZvcmUgdGhlIGFjdHVhbCBpdGVtLiAqLworICAgICAgaWYgKC0taWR4IDwgMCkKKwlpZHggPSBtZW51LT5uaXRlbXMgLSAxOworICAgIH0KKworICBsYXN0ID0gaWR4OwkJCS8qIHRoaXMgY2xvc2VzIHRoZSBjeWNsZSAqLworCisgIGRvCisgICAgeworICAgICAgaWYgKGNoID09IEJTKQorCXsJCQkvKiB3ZSBoYXZlIHRvIGdvIGJhY2t3YXJkICovCisJICBpZiAoLS1pZHggPCAwKQorCSAgICBpZHggPSBtZW51LT5uaXRlbXMgLSAxOworCX0KKyAgICAgIGVsc2UKKwl7CQkJLyogb3RoZXJ3aXNlIHdlIGFsd2F5cyBnbyBmb3J3YXJkICovCisJICBpZiAoKytpZHggPj0gbWVudS0+bml0ZW1zKQorCSAgICBpZHggPSAwOworCX0KKyAgICAgIGlmIChJc19TdWJfU3RyaW5nKChib29sKSgobWVudS0+b3B0ICYgT19JR05PUkVDQVNFKSAhPSAwKSwKKwkJCW1lbnUtPnBhdHRlcm4sCisJCQltZW51LT5pdGVtc1tpZHhdLT5uYW1lLnN0cikKKwkpCisJZm91bmQgPSBUUlVFOworICAgICAgZWxzZQorCXBhc3NlZCA9IFRSVUU7CisgICAgfQorICB3aGlsZSAoIWZvdW5kICYmIChpZHggIT0gbGFzdCkpOworCisgIGlmIChmb3VuZCkKKyAgICB7CisgICAgICBpZiAoISgoaWR4ID09ICgqaXRlbSktPmluZGV4KSAmJiBwYXNzZWQpKQorCXsKKwkgICppdGVtID0gbWVudS0+aXRlbXNbaWR4XTsKKwkgIFJFVFVSTihFX09LKTsKKwl9CisgICAgICAvKiBUaGlzIHBvaW50IGlzIHJlYWNoZWQsIGlmIHdlIGZ1bGx5IGN5Y2xlZCB0aHJvdWdoIHRoZSBpdGVtIGxpc3QKKyAgICAgICAgIGFuZCB0aGUgb25seSBtYXRjaCB3ZSBmb3VuZCBpcyB0aGUgc3RhcnRpbmcgaXRlbS4gV2l0aCBhIE5FWFRfUEFUVEVSTgorICAgICAgICAgb3IgUFJFVl9QQVRURVJOIHNjYW4gdGhpcyBtZWFucywgdGhhdCB0aGVyZSB3YXMgbm8gYWRkaXRpb25hbCBtYXRjaC4KKyAgICAgICAgIElmIHdlIHNlYXJjaGVkIHdpdGggYW4gZXhwYW5kZWQgbmV3IHBhdHRlcm4sIHdlIHNob3VsZCBuZXZlciByZWFjaAorICAgICAgICAgdGhpcyBwb2ludCwgYmVjYXVzZSBpZiB0aGUgZXhwYW5kZWQgcGF0dGVybiBtYXRjaGVzIGFsc28gdGhlIGFjdHVhbAorICAgICAgICAgaXRlbSB3ZSB3aWxsIGZpbmQgaXQgaW4gdGhlIGZpcnN0IGF0dGVtcHQgKHBhc3NlZD09RkFMU0UpIGFuZCB3ZQorICAgICAgICAgd2lsbCBuZXZlciBjeWNsZSB0aHJvdWdoIHRoZSB3aG9sZSBpdGVtIGFycmF5LgorICAgICAgICovCisgICAgICBhc3NlcnQoY2ggPT0gMCB8fCBjaCA9PSBCUyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGNoICYmIGNoICE9IEJTICYmIG1lbnUtPnBpbmRleCA+IDApCisJeworCSAgLyogaWYgd2UgaGFkIG5vIG1hdGNoIHdpdGggYSBuZXcgcGF0dGVybiwgd2UgaGF2ZSB0byByZXN0b3JlIGl0ICovCisJICBSZW1vdmVfQ2hhcmFjdGVyX0Zyb21fUGF0dGVybihtZW51KTsKKwl9CisgICAgfQorICBSRVRVUk4oRV9OT19NQVRDSCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IG1lbnVfZHJpdmVyKE1FTlUgKm1lbnUsIGludCBjKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ2VudHJhbCBkaXNwYXRjaGVyIGZvciB0aGUgbWVudS4gVHJhbnNsYXRlcyB0aGUgbG9naWNhbAorfCAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCAnYycgaW50byBhIG1lbnUgYWN0aW9uLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgIC0gaW52YWxpZCBtZW51IHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX1NUQVRFICAgICAtIG1lbnUgaXMgaW4gdXNlciBob29rIHJvdXRpbmUKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX1BPU1RFRCAgICAtIG1lbnUgaXMgbm90IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK21lbnVfZHJpdmVyKE1FTlUgKiBtZW51LCBpbnQgYykKK3sKKyNkZWZpbmUgTkFWSUdBVEUoZGlyKSBcCisgIGlmICghaXRlbS0+ZGlyKVwKKyAgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDtcCisgIGVsc2VcCisgICAgIGl0ZW0gPSBpdGVtLT5kaXIKKworICBpbnQgcmVzdWx0ID0gRV9PSzsKKyAgSVRFTSAqaXRlbTsKKyAgaW50IG15X3RvcF9yb3csIHJkaWZmOworCisgIFQoKFRfQ0FMTEVEKCJtZW51X2RyaXZlciglcCwlZCkiKSwgbWVudSwgYykpOworCisgIGlmICghbWVudSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChtZW51LT5zdGF0dXMgJiBfSU5fRFJJVkVSKQorICAgIFJFVFVSTihFX0JBRF9TVEFURSk7CisgIGlmICghKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpKQorICAgIFJFVFVSTihFX05PVF9QT1NURUQpOworCisgIGl0ZW0gPSBtZW51LT5jdXJpdGVtOworCisgIG15X3RvcF9yb3cgPSBtZW51LT50b3Byb3c7CisgIGFzc2VydChpdGVtKTsKKworICBpZiAoKGMgPiBLRVlfTUFYKSAmJiAoYyA8PSBNQVhfTUVOVV9DT01NQU5EKSkKKyAgICB7CisgICAgICBpZiAoISgoYyA9PSBSRVFfQkFDS19QQVRURVJOKQorCSAgICB8fCAoYyA9PSBSRVFfTkVYVF9NQVRDSCkgfHwgKGMgPT0gUkVRX1BSRVZfTUFUQ0gpKSkKKwl7CisJICBhc3NlcnQobWVudS0+cGF0dGVybik7CisJICBSZXNldF9QYXR0ZXJuKG1lbnUpOworCX0KKworICAgICAgc3dpdGNoIChjKQorCXsKKwljYXNlIFJFUV9MRUZUX0lURU06CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgTkFWSUdBVEUobGVmdCk7CisJICBicmVhazsKKworCWNhc2UgUkVRX1JJR0hUX0lURU06CisJICAgIC8qPT09PT09PT09PT09PT09PT09Ki8KKwkgIE5BVklHQVRFKHJpZ2h0KTsKKwkgIGJyZWFrOworCisJY2FzZSBSRVFfVVBfSVRFTToKKwkgICAgLyo9PT09PT09PT09PT09PT0qLworCSAgTkFWSUdBVEUodXApOworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9ET1dOX0lURU06CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgTkFWSUdBVEUoZG93bik7CisJICBicmVhazsKKworCWNhc2UgUkVRX1NDUl9VTElORToKKwkgICAgLyo9PT09PT09PT09PT09PT09PSovCisJICBpZiAobXlfdG9wX3JvdyA9PSAwIHx8ICEoaXRlbS0+dXApKQorCSAgICByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCSAgZWxzZQorCSAgICB7CisJICAgICAgLS1teV90b3Bfcm93OworCSAgICAgIGl0ZW0gPSBpdGVtLT51cDsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIFJFUV9TQ1JfRExJTkU6CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgaWYgKChteV90b3Bfcm93ICsgbWVudS0+YXJvd3MgPj0gbWVudS0+cm93cykgfHwgIShpdGVtLT5kb3duKSkKKwkgICAgeworCSAgICAgIC8qIG9ubHkgaWYgdGhlIG1lbnUgaGFzIGxlc3MgaXRlbXMgdGhhbiByb3dzLCB3ZSBjYW4gZGVueSB0aGUKKwkgICAgICAgICByZXF1ZXN0LiBPdGhlcndpc2UgdGhlIGVwaWxvZ3VlIG9mIHRoaXMgcm91dGluZSBhZGp1c3RzIHRoZQorCSAgICAgICAgIHRvcCByb3cgaWYgbmVjZXNzYXJ5ICovCisJICAgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbXlfdG9wX3JvdysrOworCSAgICAgIGl0ZW0gPSBpdGVtLT5kb3duOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgUkVRX1NDUl9EUEFHRToKKwkgICAgLyo9PT09PT09PT09PT09PT09PSovCisJICByZGlmZiA9IG1lbnUtPnJvd3MgLSAobWVudS0+YXJvd3MgKyBteV90b3Bfcm93KTsKKwkgIGlmIChyZGlmZiA+IG1lbnUtPmFyb3dzKQorCSAgICByZGlmZiA9IG1lbnUtPmFyb3dzOworCSAgaWYgKHJkaWZmIDw9IDApCisJICAgIHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBteV90b3Bfcm93ICs9IHJkaWZmOworCSAgICAgIHdoaWxlIChyZGlmZi0tID4gMCAmJiBpdGVtICE9IDAgJiYgaXRlbS0+ZG93biAhPSAwKQorCQlpdGVtID0gaXRlbS0+ZG93bjsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIFJFUV9TQ1JfVVBBR0U6CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgcmRpZmYgPSAobWVudS0+YXJvd3MgPCBteV90b3Bfcm93KSA/IG1lbnUtPmFyb3dzIDogbXlfdG9wX3JvdzsKKwkgIGlmIChyZGlmZiA8PSAwKQorCSAgICByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCSAgZWxzZQorCSAgICB7CisJICAgICAgbXlfdG9wX3JvdyAtPSByZGlmZjsKKwkgICAgICB3aGlsZSAocmRpZmYtLSA+IDAgJiYgaXRlbSAhPSAwICYmIGl0ZW0tPnVwICE9IDApCisJCWl0ZW0gPSBpdGVtLT51cDsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIFJFUV9GSVJTVF9JVEVNOgorCSAgICAvKj09PT09PT09PT09PT09PT09PSovCisJICBpdGVtID0gbWVudS0+aXRlbXNbMF07CisJICBicmVhazsKKworCWNhc2UgUkVRX0xBU1RfSVRFTToKKwkgICAgLyo9PT09PT09PT09PT09PT09PSovCisJICBpdGVtID0gbWVudS0+aXRlbXNbbWVudS0+bml0ZW1zIC0gMV07CisJICBicmVhazsKKworCWNhc2UgUkVRX05FWFRfSVRFTToKKwkgICAgLyo9PT09PT09PT09PT09PT09PSovCisJICBpZiAoKGl0ZW0tPmluZGV4ICsgMSkgPj0gbWVudS0+bml0ZW1zKQorCSAgICB7CisJICAgICAgaWYgKG1lbnUtPm9wdCAmIE9fTk9OQ1lDTElDKQorCQlyZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCSAgICAgIGVsc2UKKwkJaXRlbSA9IG1lbnUtPml0ZW1zWzBdOworCSAgICB9CisJICBlbHNlCisJICAgIGl0ZW0gPSBtZW51LT5pdGVtc1tpdGVtLT5pbmRleCArIDFdOworCSAgYnJlYWs7CisKKwljYXNlIFJFUV9QUkVWX0lURU06CisJICAgIC8qPT09PT09PT09PT09PT09PT0qLworCSAgaWYgKGl0ZW0tPmluZGV4IDw9IDApCisJICAgIHsKKwkgICAgICBpZiAobWVudS0+b3B0ICYgT19OT05DWUNMSUMpCisJCXJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJICAgICAgZWxzZQorCQlpdGVtID0gbWVudS0+aXRlbXNbbWVudS0+bml0ZW1zIC0gMV07CisJICAgIH0KKwkgIGVsc2UKKwkgICAgaXRlbSA9IG1lbnUtPml0ZW1zW2l0ZW0tPmluZGV4IC0gMV07CisJICBicmVhazsKKworCWNhc2UgUkVRX1RPR0dMRV9JVEVNOgorCSAgICAvKj09PT09PT09PT09PT09PT09PT0qLworCSAgaWYgKG1lbnUtPm9wdCAmIE9fT05FVkFMVUUpCisJICAgIHsKKwkgICAgICByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAobWVudS0+Y3VyaXRlbS0+b3B0ICYgT19TRUxFQ1RBQkxFKQorCQl7CisJCSAgbWVudS0+Y3VyaXRlbS0+dmFsdWUgPSAhbWVudS0+Y3VyaXRlbS0+dmFsdWU7CisJCSAgTW92ZV9BbmRfUG9zdF9JdGVtKG1lbnUsIG1lbnUtPmN1cml0ZW0pOworCQkgIF9uY19TaG93X01lbnUobWVudSk7CisJCX0KKwkgICAgICBlbHNlCisJCXJlc3VsdCA9IEVfTk9UX1NFTEVDVEFCTEU7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBSRVFfQ0xFQVJfUEFUVEVSTjoKKwkgICAgLyo9PT09PT09PT09PT09PT09PT09PT0qLworCSAgLyogYWxyZWFkeSBjbGVhcmVkIGluIHByb2xvZ3VlICovCisJICBicmVhazsKKworCWNhc2UgUkVRX0JBQ0tfUEFUVEVSTjoKKwkgICAgLyo9PT09PT09PT09PT09PT09PT09PSovCisJICBpZiAobWVudS0+cGluZGV4ID4gMCkKKwkgICAgeworCSAgICAgIGFzc2VydChtZW51LT5wYXR0ZXJuKTsKKwkgICAgICBSZW1vdmVfQ2hhcmFjdGVyX0Zyb21fUGF0dGVybihtZW51KTsKKwkgICAgICBwb3NfbWVudV9jdXJzb3IobWVudSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkgIGJyZWFrOworCisJY2FzZSBSRVFfTkVYVF9NQVRDSDoKKwkgICAgLyo9PT09PT09PT09PT09PT09PT0qLworCSAgYXNzZXJ0KG1lbnUtPnBhdHRlcm4pOworCSAgaWYgKG1lbnUtPnBhdHRlcm5bMF0pCisJICAgIHJlc3VsdCA9IF9uY19NYXRjaF9OZXh0X0NoYXJhY3Rlcl9Jbl9JdGVtX05hbWUobWVudSwgMCwgJml0ZW0pOworCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKChpdGVtLT5pbmRleCArIDEpIDwgbWVudS0+bml0ZW1zKQorCQlpdGVtID0gbWVudS0+aXRlbXNbaXRlbS0+aW5kZXggKyAxXTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAobWVudS0+b3B0ICYgT19OT05DWUNMSUMpCisJCSAgICByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCQkgIGVsc2UKKwkJICAgIGl0ZW0gPSBtZW51LT5pdGVtc1swXTsKKwkJfQorCSAgICB9CisJICBicmVhazsKKworCWNhc2UgUkVRX1BSRVZfTUFUQ0g6CisJICAgIC8qPT09PT09PT09PT09PT09PT09Ki8KKwkgIGFzc2VydChtZW51LT5wYXR0ZXJuKTsKKwkgIGlmIChtZW51LT5wYXR0ZXJuWzBdKQorCSAgICByZXN1bHQgPSBfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lKG1lbnUsIEJTLCAmaXRlbSk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoaXRlbS0+aW5kZXgpCisJCWl0ZW0gPSBtZW51LT5pdGVtc1tpdGVtLT5pbmRleCAtIDFdOworCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChtZW51LT5vcHQgJiBPX05PTkNZQ0xJQykKKwkJICAgIHJlc3VsdCA9IEVfUkVRVUVTVF9ERU5JRUQ7CisJCSAgZWxzZQorCQkgICAgaXRlbSA9IG1lbnUtPml0ZW1zW21lbnUtPm5pdGVtcyAtIDFdOworCQl9CisJICAgIH0KKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgLyo9PT09PT0qLworCSAgcmVzdWx0ID0gRV9VTktOT1dOX0NPTU1BTkQ7CisJICBicmVhazsKKwl9CisgICAgfQorICBlbHNlCisgICAgewkJCQkvKiBub3QgYSBjb21tYW5kICovCisgICAgICBpZiAoIShjICYgfigoaW50KU1BWF9SRUdVTEFSX0NIQVJBQ1RFUikpICYmIGlzcHJpbnQoVUNoYXIoYykpKQorCXJlc3VsdCA9IF9uY19NYXRjaF9OZXh0X0NoYXJhY3Rlcl9Jbl9JdGVtX05hbWUobWVudSwgYywgJml0ZW0pOworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgICAgZWxzZSBpZiAoS0VZX01PVVNFID09IGMpCisJeworCSAgTUVWRU5UIGV2ZW50OworCSAgV0lORE9XICp1d2luID0gR2V0X01lbnVfVXNlcldpbihtZW51KTsKKworCSAgZ2V0bW91c2UoJmV2ZW50KTsKKwkgIGlmICgoZXZlbnQuYnN0YXRlICYgKEJVVFRPTjFfQ0xJQ0tFRCB8CisJCQkgICAgICAgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCB8CisJCQkgICAgICAgQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCkpCisJICAgICAgJiYgd2VuY2xvc2UodXdpbiwgZXZlbnQueSwgZXZlbnQueCkpCisJICAgIHsJCQkvKiB3ZSByZWFjdCBvbmx5IGlmIHRoZSBjbGljayB3YXMgaW4gdGhlIHVzZXJ3aW4sIHRoYXQgbWVhbnMKKwkJCQkgKiBpbnNpZGUgdGhlIG1lbnUgZGlzcGxheSBhcmVhIG9yIGF0IHRoZSBkZWNvcmF0aW9uIHdpbmRvdy4KKwkJCQkgKi8KKwkgICAgICBXSU5ET1cgKnN1YiA9IEdldF9NZW51X1dpbmRvdyhtZW51KTsKKwkgICAgICBpbnQgcnkgPSBldmVudC55LCByeCA9IGV2ZW50Lng7CS8qIHNjcmVlbiBjb29yZGluYXRlcyAqLworCisJICAgICAgcmVzdWx0ID0gRV9SRVFVRVNUX0RFTklFRDsKKwkgICAgICBpZiAobW91c2VfdHJhZm8oJnJ5LCAmcngsIEZBTFNFKSkKKwkJewkJLyogcngsIHJ5IGFyZSBub3cgImN1cnNlcyIgY29vcmRpbmF0ZXMgKi8KKwkJICBpZiAocnkgPCBzdWItPl9iZWd5KQorCQkgICAgewkJLyogd2UgY2xpY2tlZCBhYm92ZSB0aGUgZGlzcGxheSByZWdpb247IHRoaXMgaXMKKwkJCQkgKiBpbnRlcnByZXRlZCBhcyAic2Nyb2xsIHVwIiByZXF1ZXN0CisJCQkJICovCisJCSAgICAgIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX0NMSUNLRUQpCisJCQlyZXN1bHQgPSBtZW51X2RyaXZlcihtZW51LCBSRVFfU0NSX1VMSU5FKTsKKwkJICAgICAgZWxzZSBpZiAoZXZlbnQuYnN0YXRlICYgQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCkKKwkJCXJlc3VsdCA9IG1lbnVfZHJpdmVyKG1lbnUsIFJFUV9TQ1JfVVBBR0UpOworCQkgICAgICBlbHNlIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX1RSSVBMRV9DTElDS0VEKQorCQkJcmVzdWx0ID0gbWVudV9kcml2ZXIobWVudSwgUkVRX0ZJUlNUX0lURU0pOworCQkgICAgICBSRVRVUk4ocmVzdWx0KTsKKwkJICAgIH0KKwkJICBlbHNlIGlmIChyeSA+IHN1Yi0+X2JlZ3kgKyBzdWItPl9tYXh5KQorCQkgICAgewkJLyogd2UgY2xpY2tlZCBiZWxvdyB0aGUgZGlzcGxheSByZWdpb247IHRoaXMgaXMKKwkJCQkgKiBpbnRlcnByZXRlZCBhcyAic2Nyb2xsIGRvd24iIHJlcXVlc3QKKwkJCQkgKi8KKwkJICAgICAgaWYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfQ0xJQ0tFRCkKKwkJCXJlc3VsdCA9IG1lbnVfZHJpdmVyKG1lbnUsIFJFUV9TQ1JfRExJTkUpOworCQkgICAgICBlbHNlIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX0RPVUJMRV9DTElDS0VEKQorCQkJcmVzdWx0ID0gbWVudV9kcml2ZXIobWVudSwgUkVRX1NDUl9EUEFHRSk7CisJCSAgICAgIGVsc2UgaWYgKGV2ZW50LmJzdGF0ZSAmIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpCisJCQlyZXN1bHQgPSBtZW51X2RyaXZlcihtZW51LCBSRVFfTEFTVF9JVEVNKTsKKwkJICAgICAgUkVUVVJOKHJlc3VsdCk7CisJCSAgICB9CisJCSAgZWxzZSBpZiAod2VuY2xvc2Uoc3ViLCBldmVudC55LCBldmVudC54KSkKKwkJICAgIHsJCS8qIEluc2lkZSB0aGUgYXJlYSB3ZSB0cnkgdG8gZmluZCB0aGUgaGl0IGl0ZW0gKi8KKwkJICAgICAgaW50IGksIHgsIHksIGVycjsKKworCQkgICAgICByeSA9IGV2ZW50Lnk7CisJCSAgICAgIHJ4ID0gZXZlbnQueDsKKwkJICAgICAgaWYgKHdtb3VzZV90cmFmbyhzdWIsICZyeSwgJnJ4LCBGQUxTRSkpCisJCQl7CisJCQkgIGZvciAoaSA9IDA7IGkgPCBtZW51LT5uaXRlbXM7IGkrKykKKwkJCSAgICB7CisJCQkgICAgICBlcnIgPSBfbmNfbWVudV9jdXJzb3JfcG9zKG1lbnUsIG1lbnUtPml0ZW1zW2ldLAorCQkJCQkJCSZ5LCAmeCk7CisJCQkgICAgICBpZiAoRV9PSyA9PSBlcnIpCisJCQkJeworCQkJCSAgaWYgKChyeSA9PSB5KSAmJgorCQkJCSAgICAgIChyeCA+PSB4KSAmJgorCQkJCSAgICAgIChyeCA8IHggKyBtZW51LT5pdGVtbGVuKSkKKwkJCQkgICAgeworCQkJCSAgICAgIGl0ZW0gPSBtZW51LT5pdGVtc1tpXTsKKwkJCQkgICAgICByZXN1bHQgPSBFX09LOworCQkJCSAgICAgIGJyZWFrOworCQkJCSAgICB9CisJCQkJfQorCQkJICAgIH0KKwkJCSAgaWYgKEVfT0sgPT0gcmVzdWx0KQorCQkJICAgIHsJLyogV2UgZm91bmQgYW4gaXRlbSwgbm93IHdlIGNhbiBoYW5kbGUgdGhlIGNsaWNrLgorCQkJCSAqIEEgc2luZ2xlIGNsaWNrIGp1c3QgcG9zaXRpb25zIHRoZSBtZW51IGN1cnNvcgorCQkJCSAqIHRvIHRoZSBjbGlja2VkIGl0ZW0uIEEgZG91YmxlIGNsaWNrIHRvZ2dsZXMKKwkJCQkgKiB0aGUgaXRlbS4KKwkJCQkgKi8KKwkJCSAgICAgIGlmIChldmVudC5ic3RhdGUgJiBCVVRUT04xX0RPVUJMRV9DTElDS0VEKQorCQkJCXsKKwkJCQkgIF9uY19OZXdfVG9wUm93X2FuZF9DdXJyZW50SXRlbShtZW51LAorCQkJCQkJCQkgbXlfdG9wX3JvdywKKwkJCQkJCQkJIGl0ZW0pOworCQkJCSAgbWVudV9kcml2ZXIobWVudSwgUkVRX1RPR0dMRV9JVEVNKTsKKwkJCQkgIHJlc3VsdCA9IEVfVU5LTk9XTl9DT01NQU5EOworCQkJCX0KKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICByZXN1bHQgPSBFX1JFUVVFU1RfREVOSUVEOworCX0KKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKyAgICAgIGVsc2UKKwlyZXN1bHQgPSBFX1VOS05PV05fQ09NTUFORDsKKyAgICB9CisKKyAgaWYgKEVfT0sgPT0gcmVzdWx0KQorICAgIHsKKyAgICAgIC8qIEFkanVzdCB0aGUgdG9wIHJvdyBpZiBpdCB0dXJucyBvdXQgdGhhdCB0aGUgY3VycmVudCBpdGVtIHVuZm9ydHVuYXRlbHkKKyAgICAgICAgIGRvZXNuJ3QgYXBwZWFyIGluIHRoZSBtZW51IHdpbmRvdyAqLworICAgICAgaWYgKGl0ZW0tPnkgPCBteV90b3Bfcm93KQorCW15X3RvcF9yb3cgPSBpdGVtLT55OworICAgICAgZWxzZSBpZiAoaXRlbS0+eSA+PSAobXlfdG9wX3JvdyArIG1lbnUtPmFyb3dzKSkKKwlteV90b3Bfcm93ID0gaXRlbS0+eSAtIG1lbnUtPmFyb3dzICsgMTsKKworICAgICAgX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtKG1lbnUsIG15X3RvcF9yb3csIGl0ZW0pOworCisgICAgfQorCisgIFJFVFVSTihyZXN1bHQpOworfQorCisvKiBtX2RyaXZlci5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX2Zvcm1hdC5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2Zvcm1hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3M2NiMjcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21fZm9ybWF0LmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogU2V0IGFuZCBnZXQgbWF4aW11bSBudW1iZXJzIG9mIHJvd3MgYW5kIGNvbHVtbnMgaW4gbWVudXMgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9mb3JtYXQuYyx2IDEuMTUgMjAwNC8xMi8xMSAyMzoxMToyMSB0b20gRXhwICQiKQorCisjZGVmaW5lIG1pbmltdW0oYSxiKSAoKGEpPChiKSA/IChhKTogKGIpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9mb3JtYXQoTUVOVSAqbWVudSwgaW50IHJvd3MsIGludCBjb2xzKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyBvZiBpdGVtcworfCAgICAgICAgICAgICAgICAgICAgdGhhdCBtYXkgYmUgZGlzcGxheWVkIGF0IG9uZSB0aW1lIG9uIGEgbWVudS4gSWYgdGhlCit8ICAgICAgICAgICAgICAgICAgICBtZW51IGNvbnRhaW5zIG1vcmUgaXRlbXMgdGhhbiBjYW4gYmUgZGlzcGxheWVkIGF0Cit8ICAgICAgICAgICAgICAgICAgICBvbmNlLCB0aGUgbWVudSB3aWxsIGJlIHNjcm9sbGFibGUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgICAgICAtIGludmFsaWQgdmFsdWVzIHBhc3NlZAorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAgICAgICAtIHRoZXJlIGFyZSBubyBpdGVtcyBjb25uZWN0ZWQKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgICAgICAgICAgLSB0aGUgbWVudSBpcyBhbHJlYWR5IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9tZW51X2Zvcm1hdChNRU5VICogbWVudSwgaW50IHJvd3MsIGludCBjb2xzKQoreworICBpbnQgdG90YWxfcm93cywgdG90YWxfY29sczsKKworICBUKChUX0NBTExFRCgic2V0X21lbnVfZm9ybWF0KCVwLCVkLCVkKSIpLCBtZW51LCByb3dzLCBjb2xzKSk7CisKKyAgaWYgKHJvd3MgPCAwIHx8IGNvbHMgPCAwKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKG1lbnUpCisgICAgeworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpCisJUkVUVVJOKEVfUE9TVEVEKTsKKworICAgICAgaWYgKCEobWVudS0+aXRlbXMpKQorCVJFVFVSTihFX05PVF9DT05ORUNURUQpOworCisgICAgICBpZiAocm93cyA9PSAwKQorCXJvd3MgPSBtZW51LT5mcm93czsKKyAgICAgIGlmIChjb2xzID09IDApCisJY29scyA9IG1lbnUtPmZjb2xzOworCisgICAgICBpZiAobWVudS0+cGF0dGVybikKKwlSZXNldF9QYXR0ZXJuKG1lbnUpOworCisgICAgICBtZW51LT5mcm93cyA9IHJvd3M7CisgICAgICBtZW51LT5mY29scyA9IGNvbHM7CisKKyAgICAgIGFzc2VydChyb3dzID4gMCAmJiBjb2xzID4gMCk7CisgICAgICB0b3RhbF9yb3dzID0gKG1lbnUtPm5pdGVtcyAtIDEpIC8gY29scyArIDE7CisgICAgICB0b3RhbF9jb2xzID0gKG1lbnUtPm9wdCAmIE9fUk9XTUFKT1IpID8KKwltaW5pbXVtKG1lbnUtPm5pdGVtcywgY29scykgOgorCShtZW51LT5uaXRlbXMgLSAxKSAvIHRvdGFsX3Jvd3MgKyAxOworCisgICAgICBtZW51LT5yb3dzID0gdG90YWxfcm93czsKKyAgICAgIG1lbnUtPmNvbHMgPSB0b3RhbF9jb2xzOworICAgICAgbWVudS0+YXJvd3MgPSBtaW5pbXVtKHRvdGFsX3Jvd3MsIHJvd3MpOworICAgICAgbWVudS0+dG9wcm93ID0gMDsKKyAgICAgIG1lbnUtPmN1cml0ZW0gPSAqKG1lbnUtPml0ZW1zKTsKKyAgICAgIGFzc2VydChtZW51LT5jdXJpdGVtKTsKKyAgICAgIG1lbnUtPnN0YXR1cyB8PSBfTElOS19ORUVERUQ7CisgICAgICBfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aChtZW51KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocm93cyA+IDApCisJX25jX0RlZmF1bHRfTWVudS5mcm93cyA9IHJvd3M7CisgICAgICBpZiAoY29scyA+IDApCisJX25jX0RlZmF1bHRfTWVudS5mY29scyA9IGNvbHM7CisgICAgfQorCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkIG1lbnVfZm9ybWF0KGNvbnN0IE1FTlUgKm1lbnUsIGludCAqcm93cywgaW50ICpjb2xzKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyB0aGF0IG1heQorfCAgICAgICAgICAgICAgICAgICAgYmUgZGlzcGxheWVkIGF0IG9uZSB0aW1lIG9uIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKK21lbnVfZm9ybWF0KGNvbnN0IE1FTlUgKiBtZW51LCBpbnQgKnJvd3MsIGludCAqY29scykKK3sKKyAgaWYgKHJvd3MpCisgICAgKnJvd3MgPSBOb3JtYWxpemVfTWVudShtZW51KS0+ZnJvd3M7CisgIGlmIChjb2xzKQorICAgICpjb2xzID0gTm9ybWFsaXplX01lbnUobWVudSktPmZjb2xzOworfQorCisvKiBtX2Zvcm1hdC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX2dsb2JhbC5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2dsb2JhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZTgzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21fZ2xvYmFsLmMKQEAgLTAsMCArMSw1OTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fZ2xvYmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogR2xvYmFsbHkgdXNlZCBpbnRlcm5hbCByb3V0aW5lcyBhbmQgdGhlIGRlZmF1bHQgbWVudSBhbmQgaXRlbSBzdHJ1Y3R1cmVzICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9nbG9iYWwuYyx2IDEuMjMgMjAwNS8xMi8zMSAyMTo1MTo1MiB0b20gRXhwICQiKQorCitzdGF0aWMgY2hhciBtYXJrW10gPSAiLSI7CisvKiAqSU5ERU5ULU9GRiogKi8KK05DVVJTRVNfRVhQT1JUX1ZBUihNRU5VKSBfbmNfRGVmYXVsdF9NZW51ID0geworICAxNiwJCQkJICAvKiBOci4gb2YgY2hhcnMgaGlnaCAqLworICAxLAkJCQkgIC8qIE5yLiBvZiBjaGFycyB3aWRlICovCisgIDE2LAkJCQkgIC8qIE5yLiBvZiBpdGVtcyBoaWdoICovCisgIDEsCQkJICAgICAgICAgIC8qIE5yLiBvZiBpdGVtcyB3aWRlICovCisgIDE2LAkJCQkgIC8qIE5yLiBvZiBmb3JtYXR0ZWQgaXRlbXMgaGlnaCAqLworICAxLAkJCQkgIC8qIE5yLiBvZiBmb3JtYXR0ZWQgaXRlbXMgd2lkZSAqLworICAxNiwJCQkJICAvKiBOci4gb2YgaXRlbXMgaGlnaCAoYWN0dWFsKSAqLworICAwLAkJCQkgIC8qIGxlbmd0aCBvZiB3aWRlc3QgbmFtZSAqLworICAwLAkJCQkgIC8qIGxlbmd0aCBvZiB3aWRlc3QgZGVzY3JpcHRpb24gKi8KKyAgMSwJCQkJICAvKiBsZW5ndGggb2YgbWFyayAqLworICAxLAkJCQkgIC8qIGxlbmd0aCBvZiBvbmUgaXRlbSAqLworICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwYWNpbmcgZm9yIGRlc2NyaXB0b3IgKi8gCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3BhY2luZyBmb3IgY29sdW1ucyAqLworICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwYWNpbmcgZm9yIHJvd3MgKi8KKyAgKGNoYXIgKikwLAkJCSAgLyogYnVmZmVyIHVzZWQgdG8gc3RvcmUgbWF0Y2ggY2hhcnMgKi8KKyAgMCwJCQkJICAvKiBJbmRleCBpbnRvIHBhdHRlcm4gYnVmZmVyICovCisgIChXSU5ET1cgKikwLAkJCSAgLyogV2luZG93IGNvbnRhaW5pbmcgZW50aXJlIG1lbnUgKi8KKyAgKFdJTkRPVyAqKTAsCQkJICAvKiBQb3J0aW9uIG9mIG1lbnUgZGlzcGxheWVkICovCisgIChXSU5ET1cgKikwLAkJCSAgLyogVXNlcidzIHdpbmRvdyAqLworICAoV0lORE9XICopMCwJCQkgIC8qIFVzZXIncyBzdWJ3aW5kb3cgKi8KKyAgKElURU0gKiopMCwJCQkgIC8qIExpc3Qgb2YgaXRlbXMgKi8KKyAgMCwJCQkJICAvKiBUb3RhbCBOci4gb2YgaXRlbXMgaW4gbWVudSAqLworICAoSVRFTSAqKTAsCQkJICAvKiBDdXJyZW50IGl0ZW0gKi8KKyAgMCwJCQkJICAvKiBUb3Agcm93IG9mIG1lbnUgKi8KKyAgKGNodHlwZSlBX1JFVkVSU0UsCQkgIC8qIEF0dHJpYnV0ZSBmb3Igc2VsZWN0aW9uICovCisgIChjaHR5cGUpQV9OT1JNQUwsCQkgIC8qIEF0dHJpYnV0ZSBmb3Igbm9uc2VsZWN0aW9uICovCisgIChjaHR5cGUpQV9VTkRFUkxJTkUsCQkgIC8qIEF0dHJpYnV0ZSBmb3IgaW5hY3RpdmUgKi8JCisgICcgJywgIAkJCSAgLyogUGFkIGNoYXJhY3RlciAqLworICAoTWVudV9Ib29rKTAsCQkJICAvKiBNZW51IGluaXQgKi8KKyAgKE1lbnVfSG9vaykwLAkJCSAgLyogTWVudSB0ZXJtICovCisgIChNZW51X0hvb2spMCwJCQkgIC8qIEl0ZW0gaW5pdCAqLworICAoTWVudV9Ib29rKTAsCQkJICAvKiBJdGVtIHRlcm0gKi8KKyAgKHZvaWQgKikwLAkJCSAgLyogdXNlcnB0ciAqLworICBtYXJrLAkJCQkgIC8qIG1hcmsgKi8KKyAgQUxMX01FTlVfT1BUUywgICAgICAgICAgICAgICAgICAvKiBvcHRpb25zICovCisgIDAJCQkgICAgICAgICAgLyogc3RhdHVzICovCSAgICAKK307CisKK05DVVJTRVNfRVhQT1JUX1ZBUihJVEVNKSBfbmNfRGVmYXVsdF9JdGVtID0geworICB7IChjaGFyICopMCwgMCB9LAkJICAvKiBuYW1lICovCisgIHsgKGNoYXIgKikwLCAwIH0sCQkgIC8qIGRlc2NyaXB0aW9uICovCisgIChNRU5VICopMCwJCSAgICAgICAgICAvKiBQb2ludGVyIHRvIHBhcmVudCBtZW51ICovCisgIChjaGFyICopMCwJCQkgIC8qIFVzZXJwb2ludGVyICovCisgIEFMTF9JVEVNX09QVFMsCQkgIC8qIG9wdGlvbnMgKi8KKyAgMCwJCQkJICAvKiBJdGVtIE5yLiAqLworICAwLAkJCQkgIC8qIHkgKi8KKyAgMCwJCQkJICAvKiB4ICovCisgIEZBTFNFLAkJCSAgLyogdmFsdWUgKi8KKyAgKElURU0gKikwLAkJICAgICAgICAgIC8qIGxlZnQgKi8KKyAgKElURU0gKikwLAkJICAgICAgICAgIC8qIHJpZ2h0ICovCisgIChJVEVNICopMCwJCSAgICAgICAgICAvKiB1cCAqLworICAoSVRFTSAqKTAJCSAgICAgICAgICAvKiBkb3duICovCisgIH07CisvKiAqSU5ERU5ULU9OKiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgc3RhdGljIHZvaWQgQ29tcHV0ZU1heGltdW1fTmFtZURlc2NfTGVudGhzKE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDYWxjdWxhdGVzIHRoZSBtYXhpbXVtIG5hbWUgYW5kIGRlc2NyaXB0aW9uIGxlbmd0aHMKK3wgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBpdGVtcyBjb25uZWN0ZWQgdG8gdGhlIG1lbnUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgdm9pZAorQ29tcHV0ZU1heGltdW1fTmFtZURlc2NfTGVuZ3RocyhNRU5VICogbWVudSkKK3sKKyAgdW5zaWduZWQgTWF4aW11bU5hbWVMZW5ndGggPSAwOworICB1bnNpZ25lZCBNYXhpbXVtRGVzY3JpcHRpb25MZW5ndGggPSAwOworICBJVEVNICoqaXRlbXM7CisgIHVuc2lnbmVkIGNoZWNrOworCisgIGFzc2VydChtZW51ICYmIG1lbnUtPml0ZW1zKTsKKyAgZm9yIChpdGVtcyA9IG1lbnUtPml0ZW1zOyAqaXRlbXM7IGl0ZW1zKyspCisgICAgeworICAgICAgY2hlY2sgPSBfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoJigoKml0ZW1zKS0+bmFtZSkpOworICAgICAgaWYgKGNoZWNrID4gTWF4aW11bU5hbWVMZW5ndGgpCisJTWF4aW11bU5hbWVMZW5ndGggPSBjaGVjazsKKworICAgICAgY2hlY2sgPSBfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoJigoKml0ZW1zKS0+ZGVzY3JpcHRpb24pKTsKKyAgICAgIGlmIChjaGVjayA+IE1heGltdW1EZXNjcmlwdGlvbkxlbmd0aCkKKwlNYXhpbXVtRGVzY3JpcHRpb25MZW5ndGggPSBjaGVjazsKKyAgICB9CisKKyAgbWVudS0+bmFtZWxlbiA9IE1heGltdW1OYW1lTGVuZ3RoOworICBtZW51LT5kZXNjbGVuID0gTWF4aW11bURlc2NyaXB0aW9uTGVuZ3RoOworICBUKCgiQ29tcHV0ZU1heGltdW1fTmFtZURlc2NfTGVuZ3RocyAlZCwlZCIsIG1lbnUtPm5hbWVsZW4sIG1lbnUtPmRlc2NsZW4pKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHN0YXRpYyB2b2lkIFJlc2V0Q29ubmVjdGlvbkluZm8oTUVOVSAqLCBJVEVNICoqKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmVzZXQgYWxsIGluZm9ybWF0aW9ucyBpbiB0aGUgbWVudSBhbmQgdGhlIGl0ZW1zIGluCit8ICAgICAgICAgICAgICAgICAgICB0aGUgaXRlbSBhcnJheSB0aGF0IGluZGljYXRlcyBhIGNvbm5lY3Rpb24KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0lOTElORSBzdGF0aWMgdm9pZAorUmVzZXRDb25uZWN0aW9uSW5mbyhNRU5VICogbWVudSwgSVRFTSAqKiBpdGVtcykKK3sKKyAgSVRFTSAqKml0ZW07CisKKyAgYXNzZXJ0KG1lbnUgJiYgaXRlbXMpOworICBmb3IgKGl0ZW0gPSBpdGVtczsgKml0ZW07IGl0ZW0rKykKKyAgICB7CisgICAgICAoKml0ZW0pLT5pbmRleCA9IDA7CisgICAgICAoKml0ZW0pLT5pbWVudSA9IChNRU5VICopIDA7CisgICAgfQorICBpZiAobWVudS0+cGF0dGVybikKKyAgICBmcmVlKG1lbnUtPnBhdHRlcm4pOworICBtZW51LT5wYXR0ZXJuID0gKGNoYXIgKikwOworICBtZW51LT5waW5kZXggPSAwOworICBtZW51LT5pdGVtcyA9IChJVEVNICoqKSAwOworICBtZW51LT5uaXRlbXMgPSAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBfbmNfQ29ubmVjdF9JdGVtcyhNRU5VICptZW51LCBJVEVNICoqaXRlbXMpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBDb25uZWN0IHRoZSBpdGVtcyBpbiB0aGUgaXRlbSBhcnJheSB0byB0aGUgbWVudS4KK3wgICAgICAgICAgICAgICAgICAgIERlY29yYXRlIGFsbCB0aGUgaXRlbXMgd2l0aCBhIG51bWJlciBhbmQgYSBiYWNrd2FyZAorfCAgICAgICAgICAgICAgICAgICAgcG9pbnRlciB0byB0aGUgbWVudS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAgICAgLSBzdWNjZXNzZnVsIGNvbm5lY3Rpb24KK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAgICAgLSBjb25uZWN0aW9uIGZhaWxlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitfbmNfQ29ubmVjdF9JdGVtcyhNRU5VICogbWVudSwgSVRFTSAqKiBpdGVtcykKK3sKKyAgSVRFTSAqKml0ZW07CisgIHVuc2lnbmVkIGludCBJdGVtQ291bnQgPSAwOworCisgIGlmIChtZW51ICYmIGl0ZW1zKQorICAgIHsKKyAgICAgIGZvciAoaXRlbSA9IGl0ZW1zOyAqaXRlbTsgaXRlbSsrKQorCXsKKwkgIGlmICgoKml0ZW0pLT5pbWVudSkKKwkgICAgeworCSAgICAgIC8qIGlmIGEgaXRlbSBpcyBhbHJlYWR5IGNvbm5lY3RlZCwgcmVqZWN0IGNvbm5lY3Rpb24gKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIGlmICghKCppdGVtKSkKKwkvKiB3ZSByZWFjaGVkIHRoZSBlbmQsIHNvIHRoZXJlIHdhcyBubyBjb25uZWN0ZWQgaXRlbSAqLworCXsKKwkgIGZvciAoaXRlbSA9IGl0ZW1zOyAqaXRlbTsgaXRlbSsrKQorCSAgICB7CisJICAgICAgaWYgKG1lbnUtPm9wdCAmIE9fT05FVkFMVUUpCisJCXsKKwkJICAoKml0ZW0pLT52YWx1ZSA9IEZBTFNFOworCQl9CisJICAgICAgKCppdGVtKS0+aW5kZXggPSBJdGVtQ291bnQrKzsKKwkgICAgICAoKml0ZW0pLT5pbWVudSA9IG1lbnU7CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIChGQUxTRSk7CisKKyAgaWYgKEl0ZW1Db3VudCAhPSAwKQorICAgIHsKKyAgICAgIG1lbnUtPml0ZW1zID0gaXRlbXM7CisgICAgICBtZW51LT5uaXRlbXMgPSBJdGVtQ291bnQ7CisgICAgICBDb21wdXRlTWF4aW11bV9OYW1lRGVzY19MZW5ndGhzKG1lbnUpOworICAgICAgaWYgKChtZW51LT5wYXR0ZXJuID0gdHlwZU1hbGxvYyhjaGFyLCAodW5zaWduZWQpKDEgKyBtZW51LT5uYW1lbGVuKSkpKQorCXsKKwkgIFJlc2V0X1BhdHRlcm4obWVudSk7CisJICBzZXRfbWVudV9mb3JtYXQobWVudSwgbWVudS0+ZnJvd3MsIG1lbnUtPmZjb2xzKTsKKwkgIG1lbnUtPmN1cml0ZW0gPSAqaXRlbXM7CisJICBtZW51LT50b3Byb3cgPSAwOworCSAgcmV0dXJuIChUUlVFKTsKKwl9CisgICAgfQorCisgIC8qIElmIHdlIGZhbGwgdGhyb3VnaCB0byB0aGlzIHBvaW50LCB3ZSBoYXZlIHRvIHJlc2V0IGFsbCBpdGVtcyBjb25uZWN0aW9uIAorICAgICBhbmQgaW5mb3JtIGFib3V0IGEgcmVqZWN0IGNvbm5lY3Rpb24gKi8KKyAgUmVzZXRDb25uZWN0aW9uSW5mbyhtZW51LCBpdGVtcyk7CisgIHJldHVybiAoRkFMU0UpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCBfbmNfRGlzY29ubmVjdF9JdGVtcyhNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgRGlzY29ubmVjdCB0aGUgbWVudXMgaXRlbSBhcnJheSBmcm9tIHRoZSBtZW51Cit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19EaXNjb25uZWN0X0l0ZW1zKE1FTlUgKiBtZW51KQoreworICBpZiAobWVudSAmJiBtZW51LT5pdGVtcykKKyAgICBSZXNldENvbm5lY3Rpb25JbmZvKG1lbnUsIG1lbnUtPml0ZW1zKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoY29uc3QgVEVYVCAqIGl0ZW0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciBhIFRFWFQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICB0aGUgd2lkdGgKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfQ2FsY3VsYXRlX1RleHRfV2lkdGgoY29uc3QgVEVYVCAqIGl0ZW0gLypGSVhNRTogbGltaXQgbGVuZ3RoICovICkKK3sKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICBpbnQgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoOworCisgIFQoKFRfQ0FMTEVEKCJfbmNfbWVudV90ZXh0X3dpZHRoKCVwKSIpLCBpdGVtKSk7CisgIGlmIChyZXN1bHQgIT0gMCAmJiBpdGVtLT5zdHIgIT0gMCkKKyAgICB7CisgICAgICBpbnQgY291bnQgPSBtYnN0b3djcygwLCBpdGVtLT5zdHIsIDApOworICAgICAgd2NoYXJfdCAqdGVtcCA9IDA7CisKKyAgICAgIGlmIChjb3VudCA+IDAKKwkgICYmICh0ZW1wID0gdHlwZU1hbGxvYyh3Y2hhcl90LCAyICsgY291bnQpKSAhPSAwKQorCXsKKwkgIGludCBuOworCisJICByZXN1bHQgPSAwOworCSAgbWJzdG93Y3ModGVtcCwgaXRlbS0+c3RyLCAodW5zaWduZWQpY291bnQpOworCSAgZm9yIChuID0gMDsgbiA8IGNvdW50OyArK24pCisJICAgIHsKKwkgICAgICBpbnQgdGVzdCA9IHdjd2lkdGgodGVtcFtuXSk7CisKKwkgICAgICBpZiAodGVzdCA8PSAwKQorCQl0ZXN0ID0gMTsKKwkgICAgICByZXN1bHQgKz0gdGVzdDsKKwkgICAgfQorCSAgZnJlZSh0ZW1wKTsKKwl9CisgICAgfQorICByZXR1cm5Db2RlKHJlc3VsdCk7CisjZWxzZQorICByZXR1cm4gaXRlbS0+bGVuZ3RoOworI2VuZGlmCit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCB3aWR0aCBvZiBhIG1lbnUgZW50cnkgZm9yIHdpZGUtY2hhcmFjdGVycy4KKyAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitzdGF0aWMgaW50CitjYWxjdWxhdGVfYWN0dWFsX3dpZHRoKE1FTlUgKiBtZW51LCBib29sIG5hbWUpCit7CisgIGludCB3aWR0aCA9IDA7CisgIGludCBjaGVjayA9IDA7CisgIElURU0gKippdGVtczsKKworICBhc3NlcnQobWVudSAmJiBtZW51LT5pdGVtcyk7CisKKyAgaWYgKG1lbnUtPml0ZW1zICE9IDApCisgICAgeworICAgICAgZm9yIChpdGVtcyA9IG1lbnUtPml0ZW1zOyAqaXRlbXM7IGl0ZW1zKyspCisJeworCSAgaWYgKG5hbWUpCisJICAgIHsKKwkgICAgICBjaGVjayA9IF9uY19DYWxjdWxhdGVfVGV4dF9XaWR0aCgmKCgqaXRlbXMpLT5uYW1lKSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGNoZWNrID0gX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKCYoKCppdGVtcyktPmRlc2NyaXB0aW9uKSk7CisJICAgIH0KKwkgIGlmIChjaGVjayA+IHdpZHRoKQorCSAgICB3aWR0aCA9IGNoZWNrOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3aWR0aCA9IChuYW1lID8gbWVudS0+bmFtZWxlbiA6IG1lbnUtPmRlc2NsZW4pOworICAgIH0KKworICBUKCgiY2FsY3VsYXRlX2FjdHVhbF93aWR0aCAlcyA9ICVkLyVkIiwKKyAgICAgbmFtZSA/ICJuYW1lIiA6ICJkZXNjIiwKKyAgICAgd2lkdGgsCisgICAgIG5hbWUgPyBtZW51LT5uYW1lbGVuIDogbWVudS0+ZGVzY2xlbikpOworICByZXR1cm4gd2lkdGg7Cit9CisjZWxzZQorI2RlZmluZSBjYWxjdWxhdGVfYWN0dWFsX3dpZHRoKG1lbnUsIG5hbWUpIChuYW1lID8gbWVudS0+bmFtZWxlbiA6IG1lbnUtPmRlc2NsZW4pCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX0NhbGN1bGF0ZV9JdGVtX0xlbmd0aF9hbmRfV2lkdGgoTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGFuIGl0ZW0gYW5kIHRoZSB3aWR0aCBvZiB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHdob2xlIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoKE1FTlUgKiBtZW51KQoreworICBpbnQgbDsKKworICBhc3NlcnQobWVudSk7CisKKyAgbWVudS0+aGVpZ2h0ID0gMSArIG1lbnUtPnNwY19yb3dzICogKG1lbnUtPmFyb3dzIC0gMSk7CisKKyAgbCA9IGNhbGN1bGF0ZV9hY3R1YWxfd2lkdGgobWVudSwgVFJVRSk7CisgIGwgKz0gbWVudS0+bWFya2xlbjsKKworICBpZiAoKG1lbnUtPm9wdCAmIE9fU0hPV0RFU0MpICYmIChtZW51LT5kZXNjbGVuID4gMCkpCisgICAgeworICAgICAgbCArPSBjYWxjdWxhdGVfYWN0dWFsX3dpZHRoKG1lbnUsIEZBTFNFKTsKKyAgICAgIGwgKz0gbWVudS0+c3BjX2Rlc2M7CisgICAgfQorCisgIG1lbnUtPml0ZW1sZW4gPSBsOworICBsICo9IG1lbnUtPmNvbHM7CisgIGwgKz0gKG1lbnUtPmNvbHMgLSAxKSAqIG1lbnUtPnNwY19jb2xzOwkvKiBmb3IgdGhlIHBhZGRpbmcgYmV0d2VlbiB0aGUgY29sdW1ucyAqLworICBtZW51LT53aWR0aCA9IGw7CisKKyAgVCgoIl9uY19DYWxjdWxhdGVJdGVtX0xlbmd0aF9hbmRfV2lkdGggY29sdW1ucyAlZCwgaXRlbSAlZCwgd2lkdGggJWQiLAorICAgICBtZW51LT5jb2xzLAorICAgICBtZW51LT5pdGVtbGVuLAorICAgICBtZW51LT53aWR0aCkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCBfbmNfTGlua19JdGVtKE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTdGF0aWNhbGx5IGNhbGN1bGF0ZSBmb3IgZXZlcnkgaXRlbSBpdHMgZm91ciBuZWlnaGJvcnMuCit8ICAgICAgICAgICAgICAgICAgICBUaGlzIGRlcGVuZHMgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBtZW51LiBUaGlzCit8ICAgICAgICAgICAgICAgICAgICBzdGF0aWMgYXBwcm9hY2ggc2ltcGxpZmllcyBuYXZpZ2F0aW9uIGluIHRoZSBtZW51IGEgbG90LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfTGlua19JdGVtcyhNRU5VICogbWVudSkKK3sKKyAgaWYgKG1lbnUgJiYgbWVudS0+aXRlbXMgJiYgKihtZW51LT5pdGVtcykpCisgICAgeworICAgICAgaW50IGksIGo7CisgICAgICBJVEVNICppdGVtOworICAgICAgaW50IE51bWJlcl9PZl9JdGVtcyA9IG1lbnUtPm5pdGVtczsKKyAgICAgIGludCBjb2wgPSAwLCByb3cgPSAwOworICAgICAgaW50IExhc3RfaW5fUm93OworICAgICAgaW50IExhc3RfaW5fQ29sdW1uOworICAgICAgYm9vbCBjeWNsZSA9IChtZW51LT5vcHQgJiBPX05PTkNZQ0xJQykgPyBGQUxTRSA6IFRSVUU7CisKKyAgICAgIG1lbnUtPnN0YXR1cyAmPSB+X0xJTktfTkVFREVEOworCisgICAgICBpZiAobWVudS0+b3B0ICYgT19ST1dNQUpPUikKKwl7CisJICBpbnQgTnVtYmVyX09mX0NvbHVtbnMgPSBtZW51LT5jb2xzOworCisJICBmb3IgKGkgPSAwOyBpIDwgTnVtYmVyX09mX0l0ZW1zOyBpKyspCisJICAgIHsKKwkgICAgICBpdGVtID0gbWVudS0+aXRlbXNbaV07CisKKwkgICAgICBMYXN0X2luX1JvdyA9IHJvdyAqIE51bWJlcl9PZl9Db2x1bW5zICsgKE51bWJlcl9PZl9Db2x1bW5zIC0gMSk7CisKKwkgICAgICBpdGVtLT5sZWZ0ID0gKGNvbCkgPworCSAgICAgIC8qIGlmIHdlIGFyZSBub3QgaW4gdGhlIGxlZnRtb3N0IGNvbHVtbiwgd2UgY2FuIHVzZSB0aGUKKwkgICAgICAgICBwcmVkZWNlc3NvciBpbiB0aGUgaXRlbXMgYXJyYXkgKi8KKwkJbWVudS0+aXRlbXNbaSAtIDFdIDoKKwkJKGN5Y2xlID8gbWVudS0+aXRlbXNbKExhc3RfaW5fUm93ID49IE51bWJlcl9PZl9JdGVtcykgPworCQkJCSAgICAgTnVtYmVyX09mX0l0ZW1zIC0gMSA6CisJCQkJICAgICBMYXN0X2luX1Jvd10gOgorCQkgKElURU0gKikgMCk7CisKKwkgICAgICBpdGVtLT5yaWdodCA9ICgoY29sIDwgKE51bWJlcl9PZl9Db2x1bW5zIC0gMSkpICYmCisJCQkgICAgICgoaSArIDEpIDwgTnVtYmVyX09mX0l0ZW1zKQorCQkpPworCQltZW51LT5pdGVtc1tpICsgMV0gOgorCQkoY3ljbGUgPyBtZW51LT5pdGVtc1tyb3cgKiBOdW1iZXJfT2ZfQ29sdW1uc10gOgorCQkgKElURU0gKikgMAorCQkpOworCisJICAgICAgTGFzdF9pbl9Db2x1bW4gPSAobWVudS0+cm93cyAtIDEpICogTnVtYmVyX09mX0NvbHVtbnMgKyBjb2w7CisKKwkgICAgICBpdGVtLT51cCA9IChyb3cpID8gbWVudS0+aXRlbXNbaSAtIE51bWJlcl9PZl9Db2x1bW5zXSA6CisJCShjeWNsZSA/IG1lbnUtPml0ZW1zWyhMYXN0X2luX0NvbHVtbiA+PSBOdW1iZXJfT2ZfSXRlbXMpID8KKwkJCQkgICAgIE51bWJlcl9PZl9JdGVtcyAtIDEgOgorCQkJCSAgICAgTGFzdF9pbl9Db2x1bW5dIDoKKwkJIChJVEVNICopIDApOworCisJICAgICAgaXRlbS0+ZG93biA9ICgoaSArIE51bWJlcl9PZl9Db2x1bW5zKSA8IE51bWJlcl9PZl9JdGVtcykKKwkJPworCQltZW51LT5pdGVtc1tpICsgTnVtYmVyX09mX0NvbHVtbnNdIDoKKwkJKGN5Y2xlID8gbWVudS0+aXRlbXNbKHJvdyArIDEpIDwgbWVudS0+cm93cyA/CisJCQkJICAgICBOdW1iZXJfT2ZfSXRlbXMgLSAxIDogY29sXSA6CisJCSAoSVRFTSAqKSAwKTsKKwkgICAgICBpdGVtLT54ID0gY29sOworCSAgICAgIGl0ZW0tPnkgPSByb3c7CisJICAgICAgaWYgKCsrY29sID09IE51bWJlcl9PZl9Db2x1bW5zKQorCQl7CisJCSAgcm93Kys7CisJCSAgY29sID0gMDsKKwkJfQorCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIGludCBOdW1iZXJfT2ZfUm93cyA9IG1lbnUtPnJvd3M7CisKKwkgIGZvciAoaiA9IDA7IGogPCBOdW1iZXJfT2ZfSXRlbXM7IGorKykKKwkgICAgeworCSAgICAgIGl0ZW0gPSBtZW51LT5pdGVtc1tpID0gKGNvbCAqIE51bWJlcl9PZl9Sb3dzICsgcm93KV07CisKKwkgICAgICBMYXN0X2luX0NvbHVtbiA9IChtZW51LT5jb2xzIC0gMSkgKiBOdW1iZXJfT2ZfUm93cyArIHJvdzsKKworCSAgICAgIGl0ZW0tPmxlZnQgPSAoY29sKSA/CisJCW1lbnUtPml0ZW1zW2kgLSBOdW1iZXJfT2ZfUm93c10gOgorCQkoY3ljbGUgPyAoTGFzdF9pbl9Db2x1bW4gPj0gTnVtYmVyX09mX0l0ZW1zKSA/CisJCSBtZW51LT5pdGVtc1tMYXN0X2luX0NvbHVtbiAtIE51bWJlcl9PZl9Sb3dzXSA6CisJCSBtZW51LT5pdGVtc1tMYXN0X2luX0NvbHVtbl0gOgorCQkgKElURU0gKikgMCk7CisKKwkgICAgICBpdGVtLT5yaWdodCA9ICgoaSArIE51bWJlcl9PZl9Sb3dzKSA8IE51bWJlcl9PZl9JdGVtcykKKwkJPworCQltZW51LT5pdGVtc1tpICsgTnVtYmVyX09mX1Jvd3NdIDoKKwkJKGN5Y2xlID8gbWVudS0+aXRlbXNbcm93XSA6IChJVEVNICopIDApOworCisJICAgICAgTGFzdF9pbl9Sb3cgPSBjb2wgKiBOdW1iZXJfT2ZfUm93cyArIChOdW1iZXJfT2ZfUm93cyAtIDEpOworCisJICAgICAgaXRlbS0+dXAgPSAocm93KSA/CisJCW1lbnUtPml0ZW1zW2kgLSAxXSA6CisJCShjeWNsZSA/CisJCSBtZW51LT5pdGVtc1soTGFzdF9pbl9Sb3cgPj0gTnVtYmVyX09mX0l0ZW1zKSA/CisJCQkgICAgIE51bWJlcl9PZl9JdGVtcyAtIDEgOgorCQkJICAgICBMYXN0X2luX1Jvd10gOgorCQkgKElURU0gKikgMCk7CisKKwkgICAgICBpdGVtLT5kb3duID0gKHJvdyA8IChOdW1iZXJfT2ZfUm93cyAtIDEpKQorCQk/CisJCShtZW51LT5pdGVtc1soKGkgKyAxKSA8IE51bWJlcl9PZl9JdGVtcykgPworCQkJICAgICBpICsgMSA6CisJCQkgICAgIChjb2wgLSAxKSAqIE51bWJlcl9PZl9Sb3dzICsgcm93ICsgMV0pIDoKKwkJKGN5Y2xlID8KKwkJIG1lbnUtPml0ZW1zW2NvbCAqIE51bWJlcl9PZl9Sb3dzXSA6CisJCSAoSVRFTSAqKSAwCisJCSk7CisKKwkgICAgICBpdGVtLT54ID0gY29sOworCSAgICAgIGl0ZW0tPnkgPSByb3c7CisJICAgICAgaWYgKCgrK3JvdykgPT0gTnVtYmVyX09mX1Jvd3MpCisJCXsKKwkJICBjb2wrKzsKKwkJICByb3cgPSAwOworCQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCBfbmNfU2hvd19NZW51KGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBVcGRhdGUgdGhlIHdpbmRvdyB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgLQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfU2hvd19NZW51KGNvbnN0IE1FTlUgKiBtZW51KQoreworICBXSU5ET1cgKndpbjsKKyAgaW50IG1heHksIG1heHg7CisKKyAgYXNzZXJ0KG1lbnUpOworICBpZiAoKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpICYmICEobWVudS0+c3RhdHVzICYgX0lOX0RSSVZFUikpCisgICAgeworICAgICAgLyogYWRqdXN0IHRoZSBpbnRlcm5hbCBzdWJ3aW5kb3cgdG8gc3RhcnQgb24gdGhlIGN1cnJlbnQgdG9wICovCisgICAgICBhc3NlcnQobWVudS0+c3ViKTsKKyAgICAgIG12ZGVyd2luKG1lbnUtPnN1YiwgbWVudS0+c3BjX3Jvd3MgKiBtZW51LT50b3Byb3csIDApOworICAgICAgd2luID0gR2V0X01lbnVfV2luZG93KG1lbnUpOworCisgICAgICBtYXh5ID0gZ2V0bWF4eSh3aW4pOworICAgICAgbWF4eCA9IGdldG1heHgod2luKTsKKworICAgICAgaWYgKG1lbnUtPmhlaWdodCA8IG1heHkpCisJbWF4eSA9IG1lbnUtPmhlaWdodDsKKyAgICAgIGlmIChtZW51LT53aWR0aCA8IG1heHgpCisJbWF4eCA9IG1lbnUtPndpZHRoOworCisgICAgICBjb3B5d2luKG1lbnUtPnN1Yiwgd2luLCAwLCAwLCAwLCAwLCBtYXh5IC0gMSwgbWF4eCAtIDEsIDApOworICAgICAgcG9zX21lbnVfY3Vyc29yKG1lbnUpOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtKAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU5VICptZW51LCAKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5ld190b3Byb3csIAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVEVNICpuZXdfY3VycmVudF9pdGVtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmVkaXNwbGF5IHRoZSBtZW51IHNvIHRoYXQgdGhlIGdpdmVuIHJvdyBiZWNvbWVzIHRoZQorfCAgICAgICAgICAgICAgICAgICAgdG9wIHJvdyBhbmQgdGhlIGdpdmVuIGl0ZW0gYmVjb21lcyB0aGUgbmV3IGN1cnJlbnQKK3wgICAgICAgICAgICAgICAgICAgIGl0ZW0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKKyAgX25jX05ld19Ub3BSb3dfYW5kX0N1cnJlbnRJdGVtCisgIChNRU5VICogbWVudSwgaW50IG5ld190b3Byb3csIElURU0gKiBuZXdfY3VycmVudF9pdGVtKQoreworICBJVEVNICpjdXJfaXRlbTsKKyAgYm9vbCBtdGVybV9jYWxsZWQgPSBGQUxTRTsKKyAgYm9vbCBpdGVybV9jYWxsZWQgPSBGQUxTRTsKKworICBhc3NlcnQobWVudSk7CisgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorICAgIHsKKyAgICAgIGlmIChuZXdfY3VycmVudF9pdGVtICE9IG1lbnUtPmN1cml0ZW0pCisJeworCSAgQ2FsbF9Ib29rKG1lbnUsIGl0ZW10ZXJtKTsKKwkgIGl0ZXJtX2NhbGxlZCA9IFRSVUU7CisJfQorICAgICAgaWYgKG5ld190b3Byb3cgIT0gbWVudS0+dG9wcm93KQorCXsKKwkgIENhbGxfSG9vayhtZW51LCBtZW51dGVybSk7CisJICBtdGVybV9jYWxsZWQgPSBUUlVFOworCX0KKworICAgICAgY3VyX2l0ZW0gPSBtZW51LT5jdXJpdGVtOworICAgICAgYXNzZXJ0KGN1cl9pdGVtKTsKKyAgICAgIG1lbnUtPnRvcHJvdyA9IG5ld190b3Byb3c7CisgICAgICBtZW51LT5jdXJpdGVtID0gbmV3X2N1cnJlbnRfaXRlbTsKKworICAgICAgaWYgKG10ZXJtX2NhbGxlZCkKKwl7CisJICBDYWxsX0hvb2sobWVudSwgbWVudWluaXQpOworCX0KKyAgICAgIGlmIChpdGVybV9jYWxsZWQpCisJeworCSAgLyogdGhpcyBtZWFucywgbW92ZSBmcm9tIHRoZSBvbGQgY3VycmVudF9pdGVtIHRvIHRoZSBuZXcgb25lLi4uICovCisJICBNb3ZlX1RvX0N1cnJlbnRfSXRlbShtZW51LCBjdXJfaXRlbSk7CisJICBDYWxsX0hvb2sobWVudSwgaXRlbWluaXQpOworCX0KKyAgICAgIGlmIChtdGVybV9jYWxsZWQgfHwgaXRlcm1fY2FsbGVkKQorCXsKKwkgIF9uY19TaG93X01lbnUobWVudSk7CisJfQorICAgICAgZWxzZQorCXBvc19tZW51X2N1cnNvcihtZW51KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CQkJCS8qIGlmIHdlIGFyZSBub3QgcG9zdGVkLCB0aGlzIGlzIHF1aXRlIHNpbXBsZSAqLworICAgICAgbWVudS0+dG9wcm93ID0gbmV3X3RvcHJvdzsKKyAgICAgIG1lbnUtPmN1cml0ZW0gPSBuZXdfY3VycmVudF9pdGVtOworICAgIH0KK30KKworLyogbV9nbG9iYWwuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9ob29rLmMgYi9uY3Vyc2VzLTUuNy9tZW51L21faG9vay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNzY4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21faG9vay5jCkBAIC0wLDAgKzEsMTUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2hvb2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIEFzc2lnbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyByb3V0aW5lcyBmb3IgYXV0b21hdGljIGludm9jYXRpb24gYnkgbWVudXMgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1faG9vay5jLHYgMS4xNCAyMDA0LzEyLzI1IDIxOjM5OjUyIHRvbSBFeHAgJCIpCisKKy8qICJUZW1wbGF0ZSIgbWFjcm8gdG8gZ2VuZXJhdGUgZnVuY3Rpb24gdG8gc2V0IGFwcGxpY2F0aW9uIHNwZWNpZmljIGhvb2sgKi8KKyNkZWZpbmUgR0VOX0hPT0tfU0VUX0ZVTkNUSU9OKCB0eXAsIG5hbWUgKSBcCitOQ1VSU0VTX0lNUEVYUCBpbnQgTkNVUlNFU19BUEkgc2V0XyAjIyB0eXAgIyMgXyAjIyBuYW1lIChNRU5VICptZW51LCBNZW51X0hvb2sgZnVuYyApXAore1wKKyAgIFQoKFRfQ0FMTEVEKCJzZXRfIiAjdHlwICJfIiAjbmFtZSAiKCVwLCVwKSIpLCBtZW51LCBmdW5jKSk7XAorICAgKE5vcm1hbGl6ZV9NZW51KG1lbnUpIC0+IHR5cCAjIyBuYW1lID0gZnVuYyApO1wKKyAgIFJFVFVSTihFX09LKTtcCit9CisKKy8qICJUZW1wbGF0ZSIgbWFjcm8gdG8gZ2VuZXJhdGUgZnVuY3Rpb24gdG8gZ2V0IGFwcGxpY2F0aW9uIHNwZWNpZmljIGhvb2sgKi8KKyNkZWZpbmUgR0VOX0hPT0tfR0VUX0ZVTkNUSU9OKCB0eXAsIG5hbWUgKSBcCitOQ1VSU0VTX0lNUEVYUCBNZW51X0hvb2sgTkNVUlNFU19BUEkgdHlwICMjIF8gIyMgbmFtZSAoIGNvbnN0IE1FTlUgKm1lbnUgKVwKK3tcCisgICBUKChUX0NBTExFRCgjdHlwICJfIiAjbmFtZSAiKCVwKSIpLCBtZW51KSk7XAorICAgcmV0dXJuTWVudUhvb2soTm9ybWFsaXplX01lbnUobWVudSkgLT4gdHlwICMjIG5hbWUpO1wKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9pbml0KE1FTlUgKm1lbnUsIHZvaWQgKCpmKShNRU5VICopKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHVzZXItZXhpdCB3aGljaCBpcyBjYWxsZWQgd2hlbiBtZW51IGlzIHBvc3RlZAorfCAgICAgICAgICAgICAgICAgICAgb3IganVzdCBhZnRlciB0aGUgdG9wIHJvdyBjaGFuZ2VzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX1NFVF9GVU5DVElPTihtZW51LCBpbml0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCAoKikoTUVOVSAqKSBtZW51X2luaXQoY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiBhZGRyZXNzIG9mIHVzZXItZXhpdCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQKK3wgICAgICAgICAgICAgICAgICAgIHdoZW4gYSBtZW51IGlzIHBvc3RlZCBvciBqdXN0IGFmdGVyIHRoZSB0b3Agcm93IAorfCAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE1lbnUgaW5pdCBmdW5jdGlvbiBhZGRyZXNzIG9yIE5VTEwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19HRVRfRlVOQ1RJT04obWVudSwgaW5pdCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV90ZXJtIChNRU5VICptZW51LCB2b2lkICgqZikoTUVOVSAqKSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB1c2VyLWV4aXQgd2hpY2ggaXMgY2FsbGVkIHdoZW4gbWVudSBpcyB1bnBvc3RlZAorfCAgICAgICAgICAgICAgICAgICAgb3IganVzdCBiZWZvcmUgdGhlIHRvcCByb3cgY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19TRVRfRlVOQ1RJT04obWVudSwgdGVybSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKCopKE1FTlUgKikgbWVudV90ZXJtKGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gYWRkcmVzcyBvZiB1c2VyLWV4aXQgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkCit8ICAgICAgICAgICAgICAgICAgICB3aGVuIGEgbWVudSBpcyB1bnBvc3RlZCBvciBqdXN0IGJlZm9yZSB0aGUgdG9wIHJvdyAKK3wgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBNZW51IGZpbmFsaXphdGlvbiBmdW5jdGlvbiBhZGRyZXNzIG9yIE5VTEwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19HRVRfRlVOQ1RJT04obWVudSwgdGVybSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfaXRlbV9pbml0IChNRU5VICptZW51LCB2b2lkICgqZikoTUVOVSAqKSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB1c2VyLWV4aXQgd2hpY2ggaXMgY2FsbGVkIHdoZW4gbWVudSBpcyBwb3N0ZWQKK3wgICAgICAgICAgICAgICAgICAgIG9yIGp1c3QgYWZ0ZXIgdGhlIGN1cnJlbnQgaXRlbSBjaGFuZ2VzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX1NFVF9GVU5DVElPTihpdGVtLCBpbml0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCAoKikoTUVOVSAqKSBpdGVtX2luaXQgKGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gYWRkcmVzcyBvZiB1c2VyLWV4aXQgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkCit8ICAgICAgICAgICAgICAgICAgICB3aGVuIGEgbWVudSBpcyBwb3N0ZWQgb3IganVzdCBhZnRlciB0aGUgY3VycmVudCBpdGVtIAorfCAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEl0ZW0gaW5pdCBmdW5jdGlvbiBhZGRyZXNzIG9yIE5VTEwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitHRU5fSE9PS19HRVRfRlVOQ1RJT04oaXRlbSwgaW5pdCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfaXRlbV90ZXJtIChNRU5VICptZW51LCB2b2lkICgqZikoTUVOVSAqKSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB1c2VyLWV4aXQgd2hpY2ggaXMgY2FsbGVkIHdoZW4gbWVudSBpcyB1bnBvc3RlZAorfCAgICAgICAgICAgICAgICAgICAgb3IganVzdCBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSBjaGFuZ2VzLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX1NFVF9GVU5DVElPTihpdGVtLCB0ZXJtKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCAoKikoTUVOVSAqKSBpdGVtX2luaXQgKGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gYWRkcmVzcyBvZiB1c2VyLWV4aXQgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkCit8ICAgICAgICAgICAgICAgICAgICB3aGVuIGEgbWVudSBpcyB1bnBvc3RlZCBvciBqdXN0IGJlZm9yZSB0aGUgY3VycmVudCBpdGVtIAorfCAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEl0ZW0gZmluYWxpemF0aW9uIGZ1bmN0aW9uIGFkZHJlc3Mgb3IgTlVMTAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0dFTl9IT09LX0dFVF9GVU5DVElPTihpdGVtLCB0ZXJtKQorCisvKiBtX2hvb2suYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX2N1ci5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2l0ZW1fY3VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjMTJlZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX2N1ci5jCkBAIC0wLDAgKzEsMTEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2l0ZW1fY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFNldCBhbmQgZ2V0IGN1cnJlbnQgbWVudXMgaXRlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1faXRlbV9jdXIuYyx2IDEuMTcgMjAwNC8xMi8yNSAyMTo1NzozOCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9jdXJyZW50X2l0ZW0oTUVOVSAqbWVudSwgY29uc3QgSVRFTSAqaXRlbSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIE1ha2UgdGhlIGl0ZW0gdGhlIGN1cnJlbnQgaXRlbQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfY3VycmVudF9pdGVtKE1FTlUgKiBtZW51LCBJVEVNICogaXRlbSkKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9jdXJyZW50X2l0ZW0oJXAsJXApIiksIG1lbnUsIGl0ZW0pKTsKKworICBpZiAobWVudSAmJiBpdGVtICYmIChpdGVtLT5pbWVudSA9PSBtZW51KSkKKyAgICB7CisgICAgICBpZiAobWVudS0+c3RhdHVzICYgX0lOX0RSSVZFUikKKwlSRVRVUk4oRV9CQURfU1RBVEUpOworCisgICAgICBhc3NlcnQobWVudS0+Y3VyaXRlbSk7CisgICAgICBpZiAoaXRlbSAhPSBtZW51LT5jdXJpdGVtKQorCXsKKwkgIGlmIChtZW51LT5zdGF0dXMgJiBfTElOS19ORUVERUQpCisJICAgIHsKKwkgICAgICAvKgorCSAgICAgICAqIEl0ZW1zIGFyZSBhdmFpbGFibGUsIGJ1dCB0aGV5IGFyZSBub3QgbGlua2VkIHRvZ2V0aGVyLgorCSAgICAgICAqIFNvIHdlIGhhdmUgdG8gbGluayBoZXJlLgorCSAgICAgICAqLworCSAgICAgIF9uY19MaW5rX0l0ZW1zKG1lbnUpOworCSAgICB9CisJICBhc3NlcnQobWVudS0+cGF0dGVybik7CisJICBSZXNldF9QYXR0ZXJuKG1lbnUpOworCSAgLyogYWRqdXN0IHRoZSB3aW5kb3cgdG8gbWFrZSBpdGVtIHZpc2libGUgYW5kIHVwZGF0ZSB0aGUgbWVudSAqLworCSAgQWRqdXN0X0N1cnJlbnRfSXRlbShtZW51LCBtZW51LT50b3Byb3csIGl0ZW0pOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIElURU0gKmN1cnJlbnRfaXRlbShjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBtZW51cyBjdXJyZW50IGl0ZW0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEl0ZW0gcG9pbnRlciBvciBOVUxMIGlmIGZhaWx1cmUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChJVEVNICopCitjdXJyZW50X2l0ZW0oY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJjdXJyZW50X2l0ZW0oJXApIiksIG1lbnUpKTsKKyAgcmV0dXJuSXRlbSgobWVudSAmJiBtZW51LT5pdGVtcykgPyBtZW51LT5jdXJpdGVtIDogKElURU0gKikgMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgaXRlbV9pbmRleChjb25zdCBJVEVNICopCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIGxvZ2ljYWwgaW5kZXggb2YgdGhpcyBpdGVtLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIGluZGV4IG9yIEVSUiBpZiB0aGlzIGlzIGFuIGludmFsaWQgaXRlbSBwb2ludGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQoraXRlbV9pbmRleChjb25zdCBJVEVNICogaXRlbSkKK3sKKyAgVCgoVF9DQUxMRUQoIml0ZW1faW5kZXgoJXApIiksIGl0ZW0pKTsKKyAgcmV0dXJuQ29kZSgoaXRlbSAmJiBpdGVtLT5pbWVudSkgPyBpdGVtLT5pbmRleCA6IEVSUik7Cit9CisKKy8qIG1faXRlbV9jdXIuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX25hbS5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2l0ZW1fbmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhMTY5MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX25hbS5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1faXRlbV9uYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogR2V0IG1lbnVzIGl0ZW0gbmFtZSBhbmQgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9pdGVtX25hbS5jLHYgMS4xNCAyMDA0LzEyLzI1IDIxOjQxOjU0IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBjaGFyICppdGVtX25hbWUoY29uc3QgSVRFTSAqaXRlbSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybiBuYW1lIG9mIG1lbnUgaXRlbQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgU2VlIGFib3ZlOyByZXR1cm5zIE5VTEwgaWYgaXRlbSBpcyBpbnZhbGlkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQoraXRlbV9uYW1lKGNvbnN0IElURU0gKiBpdGVtKQoreworICBUKChUX0NBTExFRCgiaXRlbV9uYW1lKCVwKSIpLCBpdGVtKSk7CisgIHJldHVybkNQdHIoKGl0ZW0pID8gaXRlbS0+bmFtZS5zdHIgOiAoY2hhciAqKTApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgY2hhciAqaXRlbV9kZXNjcmlwdGlvbihjb25zdCBJVEVNICppdGVtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJucyBkZXNjcmlwdGlvbiBvZiBpdGVtCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBTZWUgYWJvdmU7IFJldHVybnMgTlVMTCBpZiBpdGVtIGlzIGludmFsaWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitpdGVtX2Rlc2NyaXB0aW9uKGNvbnN0IElURU0gKiBpdGVtKQoreworICBUKChUX0NBTExFRCgiaXRlbV9kZXNjcmlwdGlvbiglcCkiKSwgaXRlbSkpOworICByZXR1cm5DUHRyKChpdGVtKSA/IGl0ZW0tPmRlc2NyaXB0aW9uLnN0ciA6IChjaGFyICopMCk7Cit9CisKKy8qIG1faXRlbV9uYW0uYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX25ldy5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2l0ZW1fbmV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmZTFmOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX25ldy5jCkBAIC0wLDAgKzEsMjc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2l0ZW1fbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIENyZWF0ZSBhbmQgZGVzdHJveSBtZW51IGl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFNldCBhbmQgZ2V0IG1hcmtlciBzdHJpbmcgZm9yIG1lbnUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjaWYgSEFWRV9XQ1RZUEVfSAorI2luY2x1ZGUgPHdjdHlwZS5oPgorI2VuZGlmCisjZW5kaWYKKworTU9EVUxFX0lEKCIkSWQ6IG1faXRlbV9uZXcuYyx2IDEuMjcgMjAwNi8xMi8xNyAxOTo0NzowOSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBJc19QcmludGFibGVfU3RyaW5nKGNvbnN0IGNoYXIgKnMpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBDaGVja3Mgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBjb250YWlucyBvbmx5IHByaW50YWJsZQorfCAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAgIC0gaWYgc3RyaW5nIGlzIHByaW50YWJsZQorfCAgICAgICAgICAgICAgICAgICAgRkFMU0UgICAgLSBpZiBzdHJpbmcgY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGJvb2wKK0lzX1ByaW50YWJsZV9TdHJpbmcoY29uc3QgY2hhciAqcykKK3sKKyAgaW50IHJlc3VsdCA9IFRSVUU7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICBpbnQgY291bnQgPSBtYnN0b3djcygwLCBzLCAwKTsKKyAgd2NoYXJfdCAqdGVtcCA9IDA7CisKKyAgYXNzZXJ0KHMpOworCisgIGlmIChjb3VudCA+IDAKKyAgICAgICYmICh0ZW1wID0gdHlwZUNhbGxvYyh3Y2hhcl90LCAoMiArICh1bnNpZ25lZCljb3VudCkpKSAhPSAwKQorICAgIHsKKyAgICAgIGludCBuOworCisgICAgICBtYnN0b3djcyh0ZW1wLCBzLCAodW5zaWduZWQpY291bnQpOworICAgICAgZm9yIChuID0gMDsgbiA8IGNvdW50OyArK24pCisJaWYgKCFpc3dwcmludCgod2ludF90KSB0ZW1wW25dKSkKKwkgIHsKKwkgICAgcmVzdWx0ID0gRkFMU0U7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgZnJlZSh0ZW1wKTsKKyAgICB9CisjZWxzZQorICBhc3NlcnQocyk7CisgIHdoaWxlICgqcykKKyAgICB7CisgICAgICBpZiAoIWlzcHJpbnQoVUNoYXIoKnMpKSkKKwl7CisJICByZXN1bHQgPSBGQUxTRTsKKwkgIGJyZWFrOworCX0KKyAgICAgIHMrKzsKKyAgICB9CisjZW5kaWYKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIElURU0gKm5ld19pdGVtKGNoYXIgKm5hbWUsIGNoYXIgKmRlc2NyaXB0aW9uKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ3JlYXRlIGEgbmV3IGl0ZW0gd2l0aCBuYW1lIGFuZCBkZXNjcmlwdGlvbi4gUmV0dXJuCit8ICAgICAgICAgICAgICAgICAgICBhIHBvaW50ZXIgdG8gdGhpcyBuZXcgaXRlbS4KK3wgICAgICAgICAgICAgICAgICAgIE4uQi46IGFuIGl0ZW0gbXVzdCghKSBoYXZlIGEgbmFtZS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRoZSBpdGVtIHBvaW50ZXIgb3IgTlVMTCBpZiBjcmVhdGlvbiBmYWlsZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoSVRFTSAqKQorbmV3X2l0ZW0oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCit7CisgIElURU0gKml0ZW07CisKKyAgVCgoVF9DQUxMRUQoIm5ld19pdGVtKFwiJXNcIiwgXCIlc1wiKSIpLAorICAgICBuYW1lID8gbmFtZSA6ICIiLAorICAgICBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uIDogIiIpKTsKKworICBpZiAoIW5hbWUgfHwgKCpuYW1lID09ICdcMCcpIHx8ICFJc19QcmludGFibGVfU3RyaW5nKG5hbWUpKQorICAgIHsKKyAgICAgIGl0ZW0gPSAoSVRFTSAqKSAwOworICAgICAgU0VUX0VSUk9SKEVfQkFEX0FSR1VNRU5UKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpdGVtID0gKElURU0gKikgY2FsbG9jKDEsIHNpemVvZihJVEVNKSk7CisgICAgICBpZiAoaXRlbSkKKwl7CisJICAqaXRlbSA9IF9uY19EZWZhdWx0X0l0ZW07CS8qIGhvcGUgd2UgaGF2ZSBzdHJ1Y3QgYXNzaWdubWVudCAqLworCisJICBpdGVtLT5uYW1lLmxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKwkgIGl0ZW0tPm5hbWUuc3RyID0gbmFtZTsKKworCSAgaWYgKGRlc2NyaXB0aW9uICYmICgqZGVzY3JpcHRpb24gIT0gJ1wwJykgJiYKKwkgICAgICBJc19QcmludGFibGVfU3RyaW5nKGRlc2NyaXB0aW9uKSkKKwkgICAgeworCSAgICAgIGl0ZW0tPmRlc2NyaXB0aW9uLmxlbmd0aCA9IHN0cmxlbihkZXNjcmlwdGlvbik7CisJICAgICAgaXRlbS0+ZGVzY3JpcHRpb24uc3RyID0gZGVzY3JpcHRpb247CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGl0ZW0tPmRlc2NyaXB0aW9uLmxlbmd0aCA9IDA7CisJICAgICAgaXRlbS0+ZGVzY3JpcHRpb24uc3RyID0gKGNoYXIgKikwOworCSAgICB9CisJfQorICAgICAgZWxzZQorCVNFVF9FUlJPUihFX1NZU1RFTV9FUlJPUik7CisgICAgfQorICByZXR1cm5JdGVtKGl0ZW0pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGZyZWVfaXRlbShJVEVNICppdGVtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgRnJlZSB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UgZm9yIHRoaXMgaXRlbS4gCit8ICAgICAgICAgICAgICAgICAgICBOLkIuOiBhIGNvbm5lY3RlZCBpdGVtIGNhbid0IGJlIGZyZWVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIGludmFsaWQgdmFsdWUgaGFzIGJlZW4gcGFzc2VkCit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgICAgICAtIGl0ZW0gaXMgc3RpbGwgY29ubmVjdGVkIHRvIGEgbWVudSAgICAKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitmcmVlX2l0ZW0oSVRFTSAqIGl0ZW0pCit7CisgIFQoKFRfQ0FMTEVEKCJmcmVlX2l0ZW0oJXApIiksIGl0ZW0pKTsKKworICBpZiAoIWl0ZW0pCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoaXRlbS0+aW1lbnUpCisgICAgUkVUVVJOKEVfQ09OTkVDVEVEKTsKKworICBmcmVlKGl0ZW0pOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9tYXJrKCBNRU5VICptZW51LCBjb25zdCBjaGFyICptYXJrICkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgbWFyayBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudAorfCAgICAgICAgICAgICAgICAgICAgaXRlbSAoc2luZ2xlLXZhbHVlZCBtZW51KSBvciB0aGUgc2VsZWN0ZWQgaXRlbXMKK3wgICAgICAgICAgICAgICAgICAgIChtdWx0aS12YWx1ZWQgbWVudSkuCit8ICAgICAgICAgICAgICAgICAgICBUaGUgbWFyayBhcmd1bWVudCBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBubyAKK3wgICAgICAgICAgICAgICAgICAgIG1hcmtlciBpcyB1c2VkLgorfCAgICAgICAgICAgICAgICAgICAgVGhpcyBtaWdodCBiZSBhIGxpdHRsZSBiaXQgdHJpY2t5LCBiZWNhdXNlIHRoaXMgbWF5IAorfCAgICAgICAgICAgICAgICAgICAgYWZmZWN0IHRoZSBnZW9tZXRyeSBvZiB0aGUgbWVudSwgd2hpY2ggd2UgZG9uJ3QgYWxsb3cgCit8ICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHBvc3RlZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgICAtIGFuIGludmFsaWQgdmFsdWUgaGFzIGJlZW4gcGFzc2VkCit8ICAgICAgICAgICAgICAgICAgICBFX1NZU1RFTV9FUlJPUiAgICAgLSBubyBtZW1vcnkgdG8gc3RvcmUgbWFyaworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9tZW51X21hcmsoTUVOVSAqIG1lbnUsIGNvbnN0IGNoYXIgKm1hcmspCit7CisgIHVuc2lnbmVkIGw7CisKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X21hcmsoJXAsJXMpIiksIG1lbnUsIF9uY192aXNidWYobWFyaykpKTsKKworICBpZiAobWFyayAmJiAoKm1hcmsgIT0gJ1wwJykgJiYgSXNfUHJpbnRhYmxlX1N0cmluZyhtYXJrKSkKKyAgICBsID0gc3RybGVuKG1hcmspOworICBlbHNlCisgICAgbCA9IDA7CisKKyAgaWYgKG1lbnUpCisgICAgeworICAgICAgY2hhciAqb2xkX21hcmsgPSBtZW51LT5tYXJrOworICAgICAgdW5zaWduZWQgc2hvcnQgb2xkX3N0YXR1cyA9IG1lbnUtPnN0YXR1czsKKworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpCisJeworCSAgLyogSWYgdGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQsIHRoZSBnZW9tZXRyeSBpcyBmaXhlZC4gVGhlbgorCSAgICAgd2UgY2FuIG9ubHkgYWNjZXB0IGEgbWFyayB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoICovCisJICBpZiAobWVudS0+bWFya2xlbiAhPSAoaW50KWwpCisJICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisJfQorICAgICAgbWVudS0+bWFya2xlbiA9IGw7CisgICAgICBpZiAobCkKKwl7CisJICBtZW51LT5tYXJrID0gKGNoYXIgKiltYWxsb2MobCArIDEpOworCSAgaWYgKG1lbnUtPm1hcmspCisJICAgIHsKKwkgICAgICBzdHJjcHkobWVudS0+bWFyaywgbWFyayk7CisJICAgICAgaWYgKG1lbnUgIT0gJl9uY19EZWZhdWx0X01lbnUpCisJCW1lbnUtPnN0YXR1cyB8PSBfTUFSS19BTExPQ0FURUQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1lbnUtPm1hcmsgPSBvbGRfbWFyazsKKwkgICAgICBSRVRVUk4oRV9TWVNURU1fRVJST1IpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCW1lbnUtPm1hcmsgPSAoY2hhciAqKTA7CisKKyAgICAgIGlmICgob2xkX3N0YXR1cyAmIF9NQVJLX0FMTE9DQVRFRCkgJiYgb2xkX21hcmspCisJZnJlZShvbGRfbWFyayk7CisKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorCXsKKwkgIF9uY19EcmF3X01lbnUobWVudSk7CisJICBfbmNfU2hvd19NZW51KG1lbnUpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBSZWNhbGN1bGF0ZSB0aGUgZ2VvbWV0cnkgKi8KKwkgIF9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoKG1lbnUpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm5Db2RlKHNldF9tZW51X21hcmsoJl9uY19EZWZhdWx0X01lbnUsIG1hcmspKTsKKyAgICB9CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGNoYXIgKm1lbnVfbWFyayhjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbWFya2VyIHN0cmluZworfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIG1hcmtlciBzdHJpbmcgcG9pbnRlciBvciBOVUxMIGlmIG5vIG1hcmtlciBkZWZpbmVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorbWVudV9tYXJrKGNvbnN0IE1FTlUgKiBtZW51KQoreworICBUKChUX0NBTExFRCgibWVudV9tYXJrKCVwKSIpLCBtZW51KSk7CisgIHJldHVyblB0cihOb3JtYWxpemVfTWVudShtZW51KS0+bWFyayk7Cit9CisKKy8qIG1faXRlbV9uZXcuYyAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX2l0ZW1fb3B0LmMgYi9uY3Vyc2VzLTUuNy9tZW51L21faXRlbV9vcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmU3Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tX2l0ZW1fb3B0LmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1faXRlbV9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogTWVudXMgaXRlbSBvcHRpb24gcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9pdGVtX29wdC5jLHYgMS4xNyAyMDA0LzEyLzI1IDIxOjMyOjU0IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2l0ZW1fb3B0cyhJVEVNICppdGVtLCBJdGVtX09wdGlvbnMgb3B0cykgIAorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBvcHRpb25zIG9mIHRoZSBpdGVtLiBJZiB0aGVyZSBhcmUgcmVsZXZhbnQKK3wgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMsIHRoZSBpdGVtIGlzIGNvbm5lY3RlZCBhbmQgdGhlIG1lbnUgaXMgcG9zdGVkLAorfCAgICAgICAgICAgICAgICAgICAgdGhlIG1lbnUgd2lsbCBiZSByZWRpc3BsYXllZC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgaXRlbSBvcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X2l0ZW1fb3B0cyhJVEVNICogaXRlbSwgSXRlbV9PcHRpb25zIG9wdHMpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfbWVudV9vcHRzKCVwLCVkKSIpLCBpdGVtLCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfSVRFTV9PUFRTOworCisgIGlmIChvcHRzICYgfkFMTF9JVEVNX09QVFMpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoaXRlbSkKKyAgICB7CisgICAgICBpZiAoaXRlbS0+b3B0ICE9IG9wdHMpCisJeworCSAgTUVOVSAqbWVudSA9IGl0ZW0tPmltZW51OworCisJICBpdGVtLT5vcHQgPSBvcHRzOworCisJICBpZiAoKCEob3B0cyAmIE9fU0VMRUNUQUJMRSkpICYmIGl0ZW0tPnZhbHVlKQorCSAgICBpdGVtLT52YWx1ZSA9IEZBTFNFOworCisJICBpZiAobWVudSAmJiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkpCisJICAgIHsKKwkgICAgICBNb3ZlX0FuZF9Qb3N0X0l0ZW0obWVudSwgaXRlbSk7CisJICAgICAgX25jX1Nob3dfTWVudShtZW51KTsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAgICBfbmNfRGVmYXVsdF9JdGVtLm9wdCA9IG9wdHM7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IGl0ZW1fb3B0c19vZmYoSVRFTSAqaXRlbSwgSXRlbV9PcHRpb25zIG9wdHMpICAgCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTd2l0Y2ggb2YgdGhlIG9wdGlvbnMgZm9yIHRoaXMgaXRlbS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAtIGludmFsaWQgb3B0aW9ucworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2l0ZW1fb3B0c19vZmYoSVRFTSAqIGl0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKQoreworICBJVEVNICpjaXRlbSA9IGl0ZW07CQkvKiB1c2UgYSBjb3B5IGJlY2F1c2Ugc2V0X2l0ZW1fb3B0cyBtdXN0IGRldGVjdAorCisJCQkJICAgTlVMTCBpdGVtIGl0c2VsZiB0byBhZGp1c3QgaXRzIGJlaGF2aW9yICovCisKKyAgVCgoVF9DQUxMRUQoIml0ZW1fb3B0c19vZmYoJXAsJWQpIiksIGl0ZW0sIG9wdHMpKTsKKworICBpZiAob3B0cyAmIH5BTExfSVRFTV9PUFRTKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgIGVsc2UKKyAgICB7CisgICAgICBOb3JtYWxpemVfSXRlbShjaXRlbSk7CisgICAgICBvcHRzID0gY2l0ZW0tPm9wdCAmIH4ob3B0cyAmIEFMTF9JVEVNX09QVFMpOworICAgICAgcmV0dXJuQ29kZShzZXRfaXRlbV9vcHRzKGl0ZW0sIG9wdHMpKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgaXRlbV9vcHRzX29uKElURU0gKml0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKSAgIAorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3dpdGNoIG9uIHRoZSBvcHRpb25zIGZvciB0aGlzIGl0ZW0uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgLSBpbnZhbGlkIG9wdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitpdGVtX29wdHNfb24oSVRFTSAqIGl0ZW0sIEl0ZW1fT3B0aW9ucyBvcHRzKQoreworICBJVEVNICpjaXRlbSA9IGl0ZW07CQkvKiB1c2UgYSBjb3B5IGJlY2F1c2Ugc2V0X2l0ZW1fb3B0cyBtdXN0IGRldGVjdAorCisJCQkJICAgTlVMTCBpdGVtIGl0c2VsZiB0byBhZGp1c3QgaXRzIGJlaGF2aW9yICovCisKKyAgVCgoVF9DQUxMRUQoIml0ZW1fb3B0c19vbiglcCwlZCkiKSwgaXRlbSwgb3B0cykpOworCisgIG9wdHMgJj0gQUxMX0lURU1fT1BUUzsKKyAgaWYgKG9wdHMgJiB+QUxMX0lURU1fT1BUUykKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworICBlbHNlCisgICAgeworICAgICAgTm9ybWFsaXplX0l0ZW0oY2l0ZW0pOworICAgICAgb3B0cyA9IGNpdGVtLT5vcHQgfCBvcHRzOworICAgICAgcmV0dXJuQ29kZShzZXRfaXRlbV9vcHRzKGl0ZW0sIG9wdHMpKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBJdGVtX09wdGlvbnMgaXRlbV9vcHRzKGNvbnN0IElURU0gKml0ZW0pICAgCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTd2l0Y2ggb2YgdGhlIG9wdGlvbnMgZm9yIHRoaXMgaXRlbS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEl0ZW1zIG9wdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChJdGVtX09wdGlvbnMpCitpdGVtX29wdHMoY29uc3QgSVRFTSAqIGl0ZW0pCit7CisgIFQoKFRfQ0FMTEVEKCJpdGVtX29wdHMoJXApIiksIGl0ZW0pKTsKKyAgcmV0dXJuSXRlbU9wdHMoQUxMX0lURU1fT1BUUyAmIE5vcm1hbGl6ZV9JdGVtKGl0ZW0pLT5vcHQpOworfQorCisvKiBtX2l0ZW1fb3B0LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21faXRlbV90b3AuYyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX3RvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNjhhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21faXRlbV90b3AuYwpAQCAtMCwwICsxLDEwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9pdGVtX3RvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBTZXQgYW5kIGdldCB0b3AgbWVudXMgaXRlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2l0ZW1fdG9wLmMsdiAxLjEwIDIwMDQvMTIvMTEgMjM6Mjk6MzQgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfdG9wX3JvdyhNRU5VICptZW51LCBpbnQgcm93KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgTWFrZXMgdGhlIHNwZWNpZmllZCByb3cgdGhlIHRvcCByb3cgaW4gdGhlIG1lbnUKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgIC0gbm90IGEgbWVudSBwb2ludGVyIG9yIGludmFsaWQgcm93Cit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9DT05ORUNURUQgIC0gdGhlcmUgYXJlIG5vIGl0ZW1zIGZvciB0aGUgbWVudQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF90b3Bfcm93KE1FTlUgKiBtZW51LCBpbnQgcm93KQoreworICBJVEVNICppdGVtOworCisgIFQoKFRfQ0FMTEVEKCJzZXRfdG9wX3JvdyglcCwlZCkiKSwgbWVudSwgcm93KSk7CisKKyAgaWYgKG1lbnUpCisgICAgeworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9JTl9EUklWRVIpCisJUkVUVVJOKEVfQkFEX1NUQVRFKTsKKyAgICAgIGlmIChtZW51LT5pdGVtcyA9PSAoSVRFTSAqKikgMCkKKwlSRVRVUk4oRV9OT1RfQ09OTkVDVEVEKTsKKworICAgICAgaWYgKChyb3cgPCAwKSB8fCAocm93ID4gKG1lbnUtPnJvd3MgLSBtZW51LT5hcm93cykpKQorCVJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgICAgfQorICBlbHNlCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAocm93ICE9IG1lbnUtPnRvcHJvdykKKyAgICB7CisgICAgICBpZiAobWVudS0+c3RhdHVzICYgX0xJTktfTkVFREVEKQorCV9uY19MaW5rX0l0ZW1zKG1lbnUpOworCisgICAgICBpdGVtID0gbWVudS0+aXRlbXNbKG1lbnUtPm9wdCAmIE9fUk9XTUFKT1IpID8gKHJvdyAqIG1lbnUtPmNvbHMpIDogcm93XTsKKyAgICAgIGFzc2VydChtZW51LT5wYXR0ZXJuKTsKKyAgICAgIFJlc2V0X1BhdHRlcm4obWVudSk7CisgICAgICBfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0obWVudSwgcm93LCBpdGVtKTsKKyAgICB9CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHRvcF9yb3coY29uc3QgTUVOVSAqKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSB0b3Agcm93IG9mIHRoZSBtZW51Cit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUaGUgcm93IG51bWJlciBvciBFUlIgaWYgdGhlcmUgaXMgbm8gcm93CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQordG9wX3Jvdyhjb25zdCBNRU5VICogbWVudSkKK3sKKyAgVCgoVF9DQUxMRUQoInRvcF9yb3coJXApIiksIG1lbnUpKTsKKyAgaWYgKG1lbnUgJiYgbWVudS0+aXRlbXMgJiYgKihtZW51LT5pdGVtcykpCisgICAgeworICAgICAgYXNzZXJ0KChtZW51LT50b3Byb3cgPj0gMCkgJiYgKG1lbnUtPnRvcHJvdyA8IG1lbnUtPnJvd3MpKTsKKyAgICAgIHJldHVybkNvZGUobWVudS0+dG9wcm93KTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm5Db2RlKEVSUik7Cit9CisKKy8qIG1faXRlbV90b3AuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX3VzZS5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2l0ZW1fdXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhNWJhZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX3VzZS5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1faXRlbV91c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogQXNzb2NpYXRlIGFwcGxpY2F0aW9uIGRhdGEgd2l0aCBtZW51IGl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9pdGVtX3VzZS5jLHYgMS4xNiAyMDA0LzEyLzI1IDIxOjMzOjMxIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X2l0ZW1fdXNlcnB0cihJVEVNICppdGVtLCB2b2lkICp1c2VycHRyKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBwb2ludGVyIHRoYXQgaXMgcmVzZXJ2ZWQgaW4gYW55IGl0ZW0gdG8gc3RvcmUKK3wgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucy4gIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgIC0gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9pdGVtX3VzZXJwdHIoSVRFTSAqIGl0ZW0sIHZvaWQgKnVzZXJwdHIpCit7CisgIFQoKFRfQ0FMTEVEKCJzZXRfaXRlbV91c2VycHRyKCVwLCVwKSIpLCBpdGVtLCB1c2VycHRyKSk7CisgIE5vcm1hbGl6ZV9JdGVtKGl0ZW0pLT51c2VycHRyID0gdXNlcnB0cjsKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCAqaXRlbV91c2VycHRyKGNvbnN0IElURU0gKml0ZW0pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIHBvaW50ZXIgdGhhdCBpcyByZXNlcnZlZCBpbiBhbnkgaXRlbSB0byBzdG9yZQorfCAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gcmVsZXZhbnQgaW5mb3JtYXRpb25zLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVmFsdWUgb2YgdGhlIHBvaW50ZXIuIElmIG5vIHN1Y2ggcG9pbnRlciBoYXMgYmVlbiBzZXQsCit8ICAgICAgICAgICAgICAgICAgICBOVUxMIGlzIHJldHVybmVkLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQgKikKK2l0ZW1fdXNlcnB0cihjb25zdCBJVEVNICogaXRlbSkKK3sKKyAgVCgoVF9DQUxMRUQoIml0ZW1fdXNlcnB0ciglcCkiKSwgaXRlbSkpOworICByZXR1cm5Wb2lkUHRyKE5vcm1hbGl6ZV9JdGVtKGl0ZW0pLT51c2VycHRyKTsKK30KKworLyogbV9pdGVtX3VzZS5jICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21faXRlbV92YWwuYyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX3ZhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmY2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21faXRlbV92YWwuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9pdGVtX3ZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBTZXQgYW5kIGdldCBtZW51cyBpdGVtIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX2l0ZW1fdmFsLmMsdiAxLjE0IDIwMDQvMTIvMTEgMjM6Mjk6MzQgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfaXRlbV92YWx1ZShJVEVNICppdGVtLCBpbnQgdmFsdWUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgaXRlbSdzIHNlbGVjdGlvbiB2YWx1ZS4gVGhpcyBpcworfCAgICAgICAgICAgICAgICAgICAgb25seSBhbGxvd2VkIGlmIHRoZSBpdGVtIGlzIHNlbGVjdGFibGUgYXQgYWxsIGFuZCBpZgorfCAgICAgICAgICAgICAgICAgICAgaXQgaXMgbm90IGNvbm5lY3RlZCB0byBhIHNpbmdsZS12YWx1ZWQgbWVudS4KK3wgICAgICAgICAgICAgICAgICAgIElmIHRoZSBpdGVtIGlzIGNvbm5lY3RlZCB0byBhIHBvc3RlZCBtZW51LCB0aGUgbWVudQorfCAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWRpc3BsYXllZC4gIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1JFUVVFU1RfREVOSUVEICAtIG5vdCBzZWxlY3RhYmxlIG9yIHNpbmdsZSB2YWx1ZWQgbWVudQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9pdGVtX3ZhbHVlKElURU0gKiBpdGVtLCBib29sIHZhbHVlKQoreworICBNRU5VICptZW51OworCisgIFQoKFRfQ0FMTEVEKCJzZXRfaXRlbV92YWx1ZSglcCwlZCkiKSwgaXRlbSwgdmFsdWUpKTsKKyAgaWYgKGl0ZW0pCisgICAgeworICAgICAgbWVudSA9IGl0ZW0tPmltZW51OworCisgICAgICBpZiAoKCEoaXRlbS0+b3B0ICYgT19TRUxFQ1RBQkxFKSkgfHwKKwkgIChtZW51ICYmIChtZW51LT5vcHQgJiBPX09ORVZBTFVFKSkpCisJUkVUVVJOKEVfUkVRVUVTVF9ERU5JRUQpOworCisgICAgICBpZiAoaXRlbS0+dmFsdWUgXiB2YWx1ZSkKKwl7CisJICBpdGVtLT52YWx1ZSA9IHZhbHVlID8gVFJVRSA6IEZBTFNFOworCSAgaWYgKG1lbnUpCisJICAgIHsKKwkgICAgICBpZiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkKKwkJeworCQkgIE1vdmVfQW5kX1Bvc3RfSXRlbShtZW51LCBpdGVtKTsKKwkJICBfbmNfU2hvd19NZW51KG1lbnUpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCisgICAgX25jX0RlZmF1bHRfSXRlbS52YWx1ZSA9IHZhbHVlOworCisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGJvb2wgaXRlbV92YWx1ZShjb25zdCBJVEVNICppdGVtKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBzZWxlY3Rpb24gdmFsdWUgb2YgdGhlIGl0ZW0KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFRSVUUgICAtIGlmIGl0ZW0gaXMgc2VsZWN0ZWQKK3wgICAgICAgICAgICAgICAgICAgIEZBTFNFICAtIGlmIGl0ZW0gaXMgbm90IHNlbGVjdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2l0ZW1fdmFsdWUoY29uc3QgSVRFTSAqIGl0ZW0pCit7CisgIFQoKFRfQ0FMTEVEKCJpdGVtX3ZhbHVlKCVwKSIpLCBpdGVtKSk7CisgIHJldHVybkJvb2woKE5vcm1hbGl6ZV9JdGVtKGl0ZW0pLT52YWx1ZSkgPyBUUlVFIDogRkFMU0UpOworfQorCisvKiBtX2l0ZW1fdmFsLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21faXRlbV92aXMuYyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtX3Zpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZmI5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21faXRlbV92aXMuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2l0ZW1fdmlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFRlbGwgaWYgbWVudSBpdGVtIGlzIHZpc2libGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1faXRlbV92aXMuYyx2IDEuMTUgMjAwNC8xMi8yNSAyMTo0MDowOSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgYm9vbCBpdGVtX3Zpc2libGUoY29uc3QgSVRFTSAqaXRlbSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEEgaXRlbSBpcyB2aXNpYmxlIGlmIGl0IGN1cnJlbnRseSBhcHBlYXJzIGluIHRoZQorfCAgICAgICAgICAgICAgICAgICAgc3Vid2luZG93IG9mIGEgcG9zdGVkIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBUUlVFICBpZiB2aXNpYmxlCit8ICAgICAgICAgICAgICAgICAgICBGQUxTRSBpZiBpbnZpc2libGUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChib29sKQoraXRlbV92aXNpYmxlKGNvbnN0IElURU0gKiBpdGVtKQoreworICBNRU5VICptZW51OworCisgIFQoKFRfQ0FMTEVEKCJpdGVtX3Zpc2libGUoJXApIiksIGl0ZW0pKTsKKyAgaWYgKGl0ZW0gJiYKKyAgICAgIChtZW51ID0gaXRlbS0+aW1lbnUpICYmCisgICAgICAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkgJiYKKyAgICAgICgobWVudS0+dG9wcm93ICsgbWVudS0+YXJvd3MpID4gKGl0ZW0tPnkpKSAmJgorICAgICAgKGl0ZW0tPnkgPj0gbWVudS0+dG9wcm93KSkKKyAgICByZXR1cm5Cb29sKFRSVUUpOworICBlbHNlCisgICAgcmV0dXJuQm9vbChGQUxTRSk7Cit9CisKKy8qIG1faXRlbV92aXMuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9pdGVtcy5jIGIvbmN1cnNlcy01LjcvbWVudS9tX2l0ZW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4ZjcwYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9pdGVtcy5jCkBAIC0wLDAgKzEsMTEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX2l0ZW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIENvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgaXRlbXMgdG8gYW5kIGZyb20gbWVudXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1faXRlbXMuYyx2IDEuMTYgMjAwNS8wMS8xNiAwMTowMjoyMyB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X2l0ZW1zKE1FTlUgKm1lbnUsIElURU0gKippdGVtcykKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldHMgdGhlIGl0ZW0gcG9pbnRlciBhcnJheSBjb25uZWN0ZWQgdG8gbWVudS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgLSBtZW51IGlzIGFscmVhZHkgcG9zdGVkCit8ICAgICAgICAgICAgICAgICAgICBFX0NPTk5FQ1RFRCAgICAtIG9uZSBvciBtb3JlIGl0ZW1zIGFyZSBhbHJlYWR5IGNvbm5lY3RlZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhbm90aGVyIG1lbnUuCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIEFuIGluY29ycmVjdCBtZW51IG9yIGl0ZW0gYXJyYXkgd2FzCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWVudV9pdGVtcyhNRU5VICogbWVudSwgSVRFTSAqKiBpdGVtcykKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X2l0ZW1zKCVwLCVwKSIpLCBtZW51LCBpdGVtcykpOworCisgIGlmICghbWVudSB8fCAoaXRlbXMgJiYgISgqaXRlbXMpKSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorICAgIFJFVFVSTihFX1BPU1RFRCk7CisKKyAgaWYgKG1lbnUtPml0ZW1zKQorICAgIF9uY19EaXNjb25uZWN0X0l0ZW1zKG1lbnUpOworCisgIGlmIChpdGVtcykKKyAgICB7CisgICAgICBpZiAoIV9uY19Db25uZWN0X0l0ZW1zKG1lbnUsIGl0ZW1zKSkKKwlSRVRVUk4oRV9DT05ORUNURUQpOworICAgIH0KKworICBtZW51LT5pdGVtcyA9IGl0ZW1zOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBJVEVNICoqbWVudV9pdGVtcyhjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGl0ZW0gcG9pbnRlciBhcnJheSBvZiB0aGUgbWVudQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTlVMTCBvbiBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKElURU0gKiopCittZW51X2l0ZW1zKGNvbnN0IE1FTlUgKiBtZW51KQoreworICBUKChUX0NBTExFRCgibWVudV9pdGVtcyglcCkiKSwgbWVudSkpOworICByZXR1cm5JdGVtUHRyKG1lbnUgPyBtZW51LT5pdGVtcyA6IChJVEVNICoqKSAwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBpdGVtX2NvdW50KGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBHZXQgdGhlIG51bWJlciBvZiBpdGVtcyBjb25uZWN0ZWQgdG8gdGhlIG1lbnUuIElmIHRoZQorfCAgICAgICAgICAgICAgICAgICAgbWVudSBwb2ludGVyIGlzIE5VTEwgd2UgcmV0dXJuIC0xLiAgICAgICAgIAorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTnVtYmVyIG9mIGl0ZW1zIG9yIC0xIHRvIGluZGljYXRlIGVycm9yLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2l0ZW1fY291bnQoY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJpdGVtX2NvdW50KCVwKSIpLCBtZW51KSk7CisgIHJldHVybkNvZGUobWVudSA/IG1lbnUtPm5pdGVtcyA6IC0xKTsKK30KKworLyogbV9pdGVtcy5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX25ldy5jIGIvbmN1cnNlcy01LjcvbWVudS9tX25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGM2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21fbmV3LmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogQ3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIG9mIG5ldyBtZW51cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9uZXcuYyx2IDEuMTggMjAwNi8xMS8wNCAxOTowNDowNiB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgTUVOVSAqbmV3X21lbnUoSVRFTSAqKml0ZW1zKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgQ3JlYXRlcyBhIG5ldyBtZW51IGNvbm5lY3RlZCB0byB0aGUgaXRlbSBwb2ludGVyCit8ICAgICAgICAgICAgICAgICAgICBhcnJheSBpdGVtcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBtZW51LgorfCAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBtZW51IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZQorfCAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBtZW51LgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTlVMTCBvbiBlcnJvcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKE1FTlUgKikKK25ld19tZW51KElURU0gKiogaXRlbXMpCit7CisgIGludCBlcnIgPSBFX1NZU1RFTV9FUlJPUjsKKyAgTUVOVSAqbWVudSA9IChNRU5VICopIGNhbGxvYygxLCBzaXplb2YoTUVOVSkpOworCisgIFQoKFRfQ0FMTEVEKCJuZXdfbWVudSglcCkiKSwgaXRlbXMpKTsKKyAgaWYgKG1lbnUpCisgICAgeworICAgICAgKm1lbnUgPSBfbmNfRGVmYXVsdF9NZW51OworICAgICAgbWVudS0+c3RhdHVzID0gMDsKKyAgICAgIG1lbnUtPnJvd3MgPSBtZW51LT5mcm93czsKKyAgICAgIG1lbnUtPmNvbHMgPSBtZW51LT5mY29sczsKKyAgICAgIGlmIChpdGVtcyAmJiAqaXRlbXMpCisJeworCSAgaWYgKCFfbmNfQ29ubmVjdF9JdGVtcyhtZW51LCBpdGVtcykpCisJICAgIHsKKwkgICAgICBlcnIgPSBFX05PVF9DT05ORUNURUQ7CisJICAgICAgZnJlZShtZW51KTsKKwkgICAgICBtZW51ID0gKE1FTlUgKikgMDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKCFtZW51KQorICAgIFNFVF9FUlJPUihlcnIpOworCisgIHJldHVybk1lbnUobWVudSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgZnJlZV9tZW51KE1FTlUgKm1lbnUpICAKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIERpc2Nvbm5lY3RzIG1lbnUgZnJvbSBpdHMgYXNzb2NpYXRlZCBpdGVtIHBvaW50ZXIgCit8ICAgICAgICAgICAgICAgICAgICBhcnJheSBhbmQgZnJlZXMgdGhlIHN0b3JhZ2UgYWxsb2NhdGVkIGZvciB0aGUgbWVudS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgICAtIEludmFsaWQgbWVudSBwb2ludGVyIHBhc3NlZAorfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgICAgIC0gTWVudSBpcyBhbHJlYWR5IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK2ZyZWVfbWVudShNRU5VICogbWVudSkKK3sKKyAgVCgoVF9DQUxMRUQoImZyZWVfbWVudSglcCkiKSwgbWVudSkpOworICBpZiAoIW1lbnUpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAobWVudS0+c3RhdHVzICYgX1BPU1RFRCkKKyAgICBSRVRVUk4oRV9QT1NURUQpOworCisgIGlmIChtZW51LT5pdGVtcykKKyAgICBfbmNfRGlzY29ubmVjdF9JdGVtcyhtZW51KTsKKworICBpZiAoKG1lbnUtPnN0YXR1cyAmIF9NQVJLX0FMTE9DQVRFRCkgJiYgbWVudS0+bWFyaykKKyAgICBmcmVlKG1lbnUtPm1hcmspOworCisgIGZyZWUobWVudSk7CisgIFJFVFVSTihFX09LKTsKK30KKworLyogbV9uZXcuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9vcHRzLmMgYi9uY3Vyc2VzLTUuNy9tZW51L21fb3B0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzcwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21fb3B0cy5jCkBAIC0wLDAgKzEsMTgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX29wdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIE1lbnVzIG9wdGlvbiByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fb3B0cy5jLHYgMS4xOSAyMDA0LzEyLzI1IDIxOjM2OjEyIHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X29wdHMoTUVOVSAqbWVudSwgTWVudV9PcHRpb25zIG9wdHMpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIG9wdGlvbnMgZm9yIHRoaXMgbWVudS4gSWYgdGhlIG5ldyBzZXR0aW5ncworfCAgICAgICAgICAgICAgICAgICAgZW5kIHVwIGluIGEgY2hhbmdlIG9mIHRoZSBnZW9tZXRyeSBvZiB0aGUgbWVudSwgaXQKK3wgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVjYWxjdWxhdGVkLiBUaGlzIG9wZXJhdGlvbiBpcyBmb3JiaWRkZW4gaWYKK3wgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IGlzIGFscmVhZHkgcG9zdGVkLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAtIGludmFsaWQgbWVudSBvcHRpb25zCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAtIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWVudV9vcHRzKE1FTlUgKiBtZW51LCBNZW51X09wdGlvbnMgb3B0cykKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X29wdHMoJXAsJWQpIiksIG1lbnUsIG9wdHMpKTsKKworICBvcHRzICY9IEFMTF9NRU5VX09QVFM7CisKKyAgaWYgKG9wdHMgJiB+QUxMX01FTlVfT1BUUykKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChtZW51KQorICAgIHsKKyAgICAgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorCVJFVFVSTihFX1BPU1RFRCk7CisKKyAgICAgIGlmICgob3B0cyAmIE9fUk9XTUFKT1IpICE9IChtZW51LT5vcHQgJiBPX1JPV01BSk9SKSkKKwl7CisJICAvKiB3ZSBuZWVkIHRoaXMgb25seSBpZiB0aGUgbGF5b3V0IHJlYWxseSBjaGFuZ2VkIC4uLiAqLworCSAgaWYgKG1lbnUtPml0ZW1zICYmIG1lbnUtPml0ZW1zWzBdKQorCSAgICB7CisJICAgICAgbWVudS0+dG9wcm93ID0gMDsKKwkgICAgICBtZW51LT5jdXJpdGVtID0gbWVudS0+aXRlbXNbMF07CisJICAgICAgYXNzZXJ0KG1lbnUtPmN1cml0ZW0pOworCSAgICAgIHNldF9tZW51X2Zvcm1hdChtZW51LCBtZW51LT5mcm93cywgbWVudS0+ZmNvbHMpOworCSAgICB9CisJfQorCisgICAgICBtZW51LT5vcHQgPSBvcHRzOworCisgICAgICBpZiAob3B0cyAmIE9fT05FVkFMVUUpCisJeworCSAgSVRFTSAqKml0ZW07CisKKwkgIGlmICgoKGl0ZW0gPSBtZW51LT5pdGVtcykgIT0gKElURU0gKiopIDApKQorCSAgICBmb3IgKDsgKml0ZW07IGl0ZW0rKykKKwkgICAgICAoKml0ZW0pLT52YWx1ZSA9IEZBTFNFOworCX0KKworICAgICAgaWYgKG9wdHMgJiBPX1NIT1dERVNDKQkvKiB0aGlzIGFsc28gY2hhbmdlcyB0aGUgZ2VvbWV0cnkgKi8KKwlfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aChtZW51KTsKKyAgICB9CisgIGVsc2UKKyAgICBfbmNfRGVmYXVsdF9NZW51Lm9wdCA9IG9wdHM7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBtZW51X29wdHNfb2ZmKE1FTlUgKm1lbnUsIE1lbnVfT3B0aW9ucyBvcHRzKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgU3dpdGNoIG9mZiB0aGUgb3B0aW9ucyBmb3IgdGhpcyBtZW51LiBJZiB0aGUgbmV3IHNldHRpbmdzCit8ICAgICAgICAgICAgICAgICAgICBlbmQgdXAgaW4gYSBjaGFuZ2Ugb2YgdGhlIGdlb21ldHJ5IG9mIHRoZSBtZW51LCBpdAorfCAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWNhbGN1bGF0ZWQuIFRoaXMgb3BlcmF0aW9uIGlzIGZvcmJpZGRlbiBpZgorfCAgICAgICAgICAgICAgICAgICAgdGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBvcHRpb25zCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAtIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCittZW51X29wdHNfb2ZmKE1FTlUgKiBtZW51LCBNZW51X09wdGlvbnMgb3B0cykKK3sKKyAgTUVOVSAqY21lbnUgPSBtZW51OwkJLyogdXNlIGEgY29weSBiZWNhdXNlIHNldF9tZW51X29wdHMgbXVzdCBkZXRlY3QKKworCQkJCSAgIE5VTEwgbWVudSBpdHNlbGYgdG8gYWRqdXN0IGl0cyBiZWhhdmlvciAqLworCisgIFQoKFRfQ0FMTEVEKCJtZW51X29wdHNfb2ZmKCVwLCVkKSIpLCBtZW51LCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfTUVOVV9PUFRTOworICBpZiAob3B0cyAmIH5BTExfTUVOVV9PUFRTKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgIGVsc2UKKyAgICB7CisgICAgICBOb3JtYWxpemVfTWVudShjbWVudSk7CisgICAgICBvcHRzID0gY21lbnUtPm9wdCAmIH5vcHRzOworICAgICAgcmV0dXJuQ29kZShzZXRfbWVudV9vcHRzKG1lbnUsIG9wdHMpKTsKKyAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IG1lbnVfb3B0c19vbihNRU5VICptZW51LCBNZW51X09wdGlvbnMgb3B0cykKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFN3aXRjaCBvbiB0aGUgb3B0aW9ucyBmb3IgdGhpcyBtZW51LiBJZiB0aGUgbmV3IHNldHRpbmdzCit8ICAgICAgICAgICAgICAgICAgICBlbmQgdXAgaW4gYSBjaGFuZ2Ugb2YgdGhlIGdlb21ldHJ5IG9mIHRoZSBtZW51LCBpdAorfCAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWNhbGN1bGF0ZWQuIFRoaXMgb3BlcmF0aW9uIGlzIGZvcmJpZGRlbiBpZgorfCAgICAgICAgICAgICAgICAgICAgdGhlIG1lbnUgaXMgYWxyZWFkeSBwb3N0ZWQuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UIC0gaW52YWxpZCBtZW51IG9wdGlvbnMKK3wgICAgICAgICAgICAgICAgICAgIEVfUE9TVEVEICAgICAgIC0gbWVudSBpcyBhbHJlYWR5IHBvc3RlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK21lbnVfb3B0c19vbihNRU5VICogbWVudSwgTWVudV9PcHRpb25zIG9wdHMpCit7CisgIE1FTlUgKmNtZW51ID0gbWVudTsJCS8qIHVzZSBhIGNvcHkgYmVjYXVzZSBzZXRfbWVudV9vcHRzIG11c3QgZGV0ZWN0CisKKwkJCQkgICBOVUxMIG1lbnUgaXRzZWxmIHRvIGFkanVzdCBpdHMgYmVoYXZpb3IgKi8KKworICBUKChUX0NBTExFRCgibWVudV9vcHRzX29uKCVwLCVkKSIpLCBtZW51LCBvcHRzKSk7CisKKyAgb3B0cyAmPSBBTExfTUVOVV9PUFRTOworICBpZiAob3B0cyAmIH5BTExfTUVOVV9PUFRTKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisgIGVsc2UKKyAgICB7CisgICAgICBOb3JtYWxpemVfTWVudShjbWVudSk7CisgICAgICBvcHRzID0gY21lbnUtPm9wdCB8IG9wdHM7CisgICAgICByZXR1cm5Db2RlKHNldF9tZW51X29wdHMobWVudSwgb3B0cykpOworICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICBNZW51X09wdGlvbnMgbWVudV9vcHRzKGNvbnN0IE1FTlUgKm1lbnUpCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIG9wdGlvbnMgZm9yIHRoaXMgbWVudS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE1lbnUgb3B0aW9ucworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKE1lbnVfT3B0aW9ucykKK21lbnVfb3B0cyhjb25zdCBNRU5VICogbWVudSkKK3sKKyAgVCgoVF9DQUxMRUQoIm1lbnVfb3B0cyglcCkiKSwgbWVudSkpOworICByZXR1cm5NZW51T3B0cyhBTExfTUVOVV9PUFRTICYgTm9ybWFsaXplX01lbnUobWVudSktPm9wdCk7Cit9CisKKy8qIG1fb3B0cy5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX3BhZC5jIGIvbmN1cnNlcy01LjcvbWVudS9tX3BhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDgzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tZW51L21fcGFkLmMKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9wYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBDb250cm9sIG1lbnVzIHBhZGRpbmcgY2hhcmFjdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX3BhZC5jLHYgMS4xMCAyMDA0LzEyLzI1IDIxOjQwOjU4IHRvbSBFeHAgJCIpCisKKy8qIE1hY3JvIHRvIHJlZHJhdyBtZW51IGlmIGl0IGlzIHBvc3RlZCBhbmQgY2hhbmdlZCAqLworI2RlZmluZSBSZWZyZXNoX01lbnUobWVudSkgXAorICAgaWYgKCAobWVudSkgJiYgKChtZW51KS0+c3RhdHVzICYgX1BPU1RFRCkgKVwKKyAgIHtcCisgICAgICBfbmNfRHJhd19NZW51KCBtZW51ICk7XAorICAgICAgX25jX1Nob3dfTWVudSggbWVudSApO1wKKyAgIH0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9wYWQoTUVOVSAqbWVudSwgaW50IHBhZCkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldCB0aGUgY2hhcmFjdGVyIHRvIGJlIHVzZWQgdG8gc2VwYXJhdGUgdGhlIGl0ZW0gbmFtZQorfCAgICAgICAgICAgICAgICAgICAgZnJvbSBpdHMgZGVzY3JpcHRpb24uIFRoaXMgbXVzdCBiZSBhIHByaW50YWJsZSAKK3wgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rlci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9CQURfQVJHVU1FTlQgICAgLSBhbiBpbnZhbGlkIHZhbHVlIGhhcyBiZWVuIHBhc3NlZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldF9tZW51X3BhZChNRU5VICogbWVudSwgaW50IHBhZCkKK3sKKyAgYm9vbCBkb19yZWZyZXNoID0gKG1lbnUgIT0gKE1FTlUgKikgMCk7CisKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X3BhZCglcCwlZCkiKSwgbWVudSwgcGFkKSk7CisKKyAgaWYgKCFpc3ByaW50KFVDaGFyKHBhZCkpKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgTm9ybWFsaXplX01lbnUobWVudSk7CisgIG1lbnUtPnBhZCA9IHBhZDsKKworICBpZiAoZG9fcmVmcmVzaCkKKyAgICBSZWZyZXNoX01lbnUobWVudSk7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IG1lbnVfcGFkKGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBwYWRkaW5nIGNoYXJhY3RlcgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgVGhlIHBhZCBjaGFyYWN0ZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCittZW51X3BhZChjb25zdCBNRU5VICogbWVudSkKK3sKKyAgVCgoVF9DQUxMRUQoIm1lbnVfcGFkKCVwKSIpLCBtZW51KSk7CisgIHJldHVybkNvZGUoTm9ybWFsaXplX01lbnUobWVudSktPnBhZCk7Cit9CisKKy8qIG1fcGFkLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21fcGF0dGVybi5jIGIvbmN1cnNlcy01LjcvbWVudS9tX3BhdHRlcm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTcxMzkwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tX3BhdHRlcm4uYwpAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9wYXR0ZXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBQYXR0ZXJuIG1hdGNoaW5nIGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX3BhdHRlcm4uYyx2IDEuMTUgMjAwNi8xMS8wNCAxODo0NjozOSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgY2hhciAqbWVudV9wYXR0ZXJuKGNvbnN0IE1FTlUgKm1lbnUpCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBwYXR0ZXJuIGJ1ZmZlci4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIE5VTEwgICAgICAgICAgLSBpZiB0aGVyZSBpcyBubyBwYXR0ZXJuIGJ1ZmZlciBhbGxvY2F0ZWQKK3wgICAgICAgICAgICAgICAgICAgIEVtcHR5U3RyaW5nICAgLSBpZiB0aGVyZSBpcyBhIHBhdHRlcm4gYnVmZmVyIGJ1dCBubworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gaXMgc3RvcmVkCit8ICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuU3RyaW5nIC0gYXMgZXhwZWN0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCittZW51X3BhdHRlcm4oY29uc3QgTUVOVSAqIG1lbnUpCit7CisgIHN0YXRpYyBjaGFyIGVtcHR5W10gPSAiIjsKKworICBUKChUX0NBTExFRCgibWVudV9wYXR0ZXJuKCVwKSIpLCBtZW51KSk7CisgIHJldHVyblB0cihtZW51ID8gKG1lbnUtPnBhdHRlcm4gPyBtZW51LT5wYXR0ZXJuIDogZW1wdHkpIDogMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfcGF0dGVybihNRU5VICptZW51LCBjb25zdCBjaGFyICpwKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBtYXRjaCBwYXR0ZXJuIGZvciBhIG1lbnUgYW5kIHBvc2l0aW9uIHRvIHRoZQorfCAgICAgICAgICAgICAgICAgICAgZmlyc3QgaXRlbSB0aGF0IG1hdGNoZXMuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgIC0gaW52YWxpZCBtZW51IG9yIHBhdHRlcm4gcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfU1RBVEUgICAgICAgLSBtZW51IGluIHVzZXIgaG9vayByb3V0aW5lCit8ICAgICAgICAgICAgICAgICAgICBFX05PVF9DT05ORUNURUQgICAtIG5vIGl0ZW1zIGNvbm5lY3RlZCB0byBtZW51Cit8ICAgICAgICAgICAgICAgICAgICBFX05PX01BVENIICAgICAgICAtIG5vIGl0ZW0gbWF0Y2hlcyBwYXR0ZXJuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X21lbnVfcGF0dGVybihNRU5VICogbWVudSwgY29uc3QgY2hhciAqcCkKK3sKKyAgSVRFTSAqbWF0Y2hpdGVtOworICBpbnQgbWF0Y2hwb3M7CisKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X3BhdHRlcm4oJXAsJXMpIiksIG1lbnUsIF9uY192aXNidWYocCkpKTsKKworICBpZiAoIW1lbnUgfHwgIXApCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAoIShtZW51LT5pdGVtcykpCisgICAgUkVUVVJOKEVfTk9UX0NPTk5FQ1RFRCk7CisKKyAgaWYgKG1lbnUtPnN0YXR1cyAmIF9JTl9EUklWRVIpCisgICAgUkVUVVJOKEVfQkFEX1NUQVRFKTsKKworICBSZXNldF9QYXR0ZXJuKG1lbnUpOworCisgIGlmICghKCpwKSkKKyAgICB7CisgICAgICBwb3NfbWVudV9jdXJzb3IobWVudSk7CisgICAgICBSRVRVUk4oRV9PSyk7CisgICAgfQorCisgIGlmIChtZW51LT5zdGF0dXMgJiBfTElOS19ORUVERUQpCisgICAgX25jX0xpbmtfSXRlbXMobWVudSk7CisKKyAgbWF0Y2hwb3MgPSBtZW51LT50b3Byb3c7CisgIG1hdGNoaXRlbSA9IG1lbnUtPmN1cml0ZW07CisgIGFzc2VydChtYXRjaGl0ZW0pOworCisgIHdoaWxlICgqcCkKKyAgICB7CisgICAgICBpZiAoIWlzcHJpbnQoVUNoYXIoKnApKSB8fAorCSAgKF9uY19NYXRjaF9OZXh0X0NoYXJhY3Rlcl9Jbl9JdGVtX05hbWUobWVudSwgKnAsICZtYXRjaGl0ZW0pICE9IEVfT0spKQorCXsKKwkgIFJlc2V0X1BhdHRlcm4obWVudSk7CisJICBwb3NfbWVudV9jdXJzb3IobWVudSk7CisJICBSRVRVUk4oRV9OT19NQVRDSCk7CisJfQorICAgICAgcCsrOworICAgIH0KKworICAvKiBUaGlzIGlzIHJlYWNoZWQgaWYgdGhlcmUgd2FzIGEgbWF0Y2guIFNvIHdlIHBvc2l0aW9uIHRvIHRoZSBuZXcgaXRlbSAqLworICBBZGp1c3RfQ3VycmVudF9JdGVtKG1lbnUsIG1hdGNocG9zLCBtYXRjaGl0ZW0pOworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIG1fcGF0dGVybi5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX3Bvc3QuYyBiL25jdXJzZXMtNS43L21lbnUvbV9wb3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3ZDBmMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9wb3N0LmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fcG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogV3JpdGUgb3IgZXJhc2UgbWVudXMgZnJvbSBhc3NvY2lhdGVkIHN1YndpbmRvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9wb3N0LmMsdiAxLjI2IDIwMDQvMTIvMjUgMjM6NTc6MDQgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51Cit8ICAgRnVuY3Rpb24gICAgICA6ICB2b2lkIF9uY19Qb3N0X0l0ZW0oTUVOVSAqbWVudSwgSVRFTSAqaXRlbSkKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIERyYXcgdGhlIGl0ZW0gaW4gdGhlIG1lbnVzIHdpbmRvdyBhdCB0aGUgY3VycmVudAorfCAgICAgICAgICAgICAgICAgICAgd2luZG93IHBvc2l0aW9uCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19Qb3N0X0l0ZW0oY29uc3QgTUVOVSAqIG1lbnUsIGNvbnN0IElURU0gKiBpdGVtKQoreworICBpbnQgaTsKKyAgY2h0eXBlIGNoOworICBpbnQgaXRlbV94LCBpdGVtX3k7CisgIGludCBjb3VudCA9IDA7CisgIGJvb2wgaXNmb3JlID0gRkFMU0UsIGlzYmFjayA9IEZBTFNFLCBpc2dyZXkgPSBGQUxTRTsKKyAgaW50IG5hbWVfbGVuOworICBpbnQgZGVzY19sZW47CisKKyAgYXNzZXJ0KG1lbnUtPndpbik7CisKKyAgZ2V0eXgobWVudS0+d2luLCBpdGVtX3ksIGl0ZW1feCk7CisKKyAgLyogV2UgbmVlZCBhIG1hcmtlciBpZmYKKyAgICAgLSBpdCBpcyBhIG9uZXZhbHVlZCBtZW51IGFuZCBpdCBpcyB0aGUgY3VycmVudCBpdGVtCisgICAgIC0gb3IgaXQgaGFzIGEgc2VsZWN0aW9uIHZhbHVlCisgICAqLworICB3YXR0cm9uKG1lbnUtPndpbiwgbWVudS0+YmFjayk7CisgIGlmIChpdGVtLT52YWx1ZSB8fCAoaXRlbSA9PSBtZW51LT5jdXJpdGVtKSkKKyAgICB7CisgICAgICBpZiAobWVudS0+bWFya2xlbikKKwl7CisJICAvKiBJbiBhIG11bHRpIHNlbGVjdGlvbiBtZW51IHdlIHVzZSB0aGUgZm9yZSBhdHRyaWJ1dGUKKwkgICAgIGZvciBhIHNlbGVjdGVkIG1hcmtlciB0aGF0IGlzIG5vdCB0aGUgY3VycmVudCBvbmUuCisJICAgICBUaGlzIGltcHJvdmVzIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1lbnUsIGJlY2F1c2Ugbm93CisJICAgICBhbHdheXMgdGhlICdub3JtYWwnIG1hcmtlciBkZW5vdGVzIHRoZSBjdXJyZW50CisJICAgICBpdGVtLiAqLworCSAgaWYgKCEobWVudS0+b3B0ICYgT19PTkVWQUxVRSkgJiYgaXRlbS0+dmFsdWUgJiYgaXRlbSAhPSBtZW51LT5jdXJpdGVtKQorCSAgICB7CisJICAgICAgd2F0dHJvbihtZW51LT53aW4sIG1lbnUtPmZvcmUpOworCSAgICAgIGlzZm9yZSA9IFRSVUU7CisJICAgIH0KKwkgIHdhZGRzdHIobWVudS0+d2luLCBtZW51LT5tYXJrKTsKKwkgIGlmIChpc2ZvcmUpCisJICAgIHsKKwkgICAgICB3YXR0cm9uKG1lbnUtPndpbiwgbWVudS0+Zm9yZSk7CisJICAgICAgaXNmb3JlID0gRkFMU0U7CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCQkJCS8qIG90aGVyd2lzZSB3ZSBoYXZlIHRvIHdpcGUgb3V0IHRoZSBtYXJrZXIgYXJlYSAqLworICAgIGZvciAoY2ggPSAnICcsIGkgPSBtZW51LT5tYXJrbGVuOyBpID4gMDsgaS0tKQorICAgICAgd2FkZGNoKG1lbnUtPndpbiwgY2gpOworICB3YXR0cm9mZihtZW51LT53aW4sIG1lbnUtPmJhY2spOworICBjb3VudCArPSBtZW51LT5tYXJrbGVuOworCisgIC8qIEZpcnN0IHdlIGhhdmUgdG8gY2FsY3VsYXRlIHRoZSBhdHRyaWJ1dGUgZGVwZW5kaW5nIG9uIHNlbGVjdGFiaWxpdHkKKyAgICAgYW5kIHNlbGVjdGlvbiBzdGF0dXMKKyAgICovCisgIGlmICghKGl0ZW0tPm9wdCAmIE9fU0VMRUNUQUJMRSkpCisgICAgeworICAgICAgd2F0dHJvbihtZW51LT53aW4sIG1lbnUtPmdyZXkpOworICAgICAgaXNncmV5ID0gVFJVRTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoaXRlbS0+dmFsdWUgfHwgaXRlbSA9PSBtZW51LT5jdXJpdGVtKQorCXsKKwkgIHdhdHRyb24obWVudS0+d2luLCBtZW51LT5mb3JlKTsKKwkgIGlzZm9yZSA9IFRSVUU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHdhdHRyb24obWVudS0+d2luLCBtZW51LT5iYWNrKTsKKwkgIGlzYmFjayA9IFRSVUU7CisJfQorICAgIH0KKworICB3YWRkbnN0cihtZW51LT53aW4sIGl0ZW0tPm5hbWUuc3RyLCBpdGVtLT5uYW1lLmxlbmd0aCk7CisgIG5hbWVfbGVuID0gX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKCYoaXRlbS0+bmFtZSkpOworICBmb3IgKGNoID0gJyAnLCBpID0gbWVudS0+bmFtZWxlbiAtIG5hbWVfbGVuOyBpID4gMDsgaS0tKQorICAgIHsKKyAgICAgIHdhZGRjaChtZW51LT53aW4sIGNoKTsKKyAgICB9CisgIGNvdW50ICs9IG1lbnUtPm5hbWVsZW47CisKKyAgLyogU2hvdyBkZXNjcmlwdGlvbiBpZiByZXF1aXJlZCBhbmQgYXZhaWxhYmxlICovCisgIGlmICgobWVudS0+b3B0ICYgT19TSE9XREVTQykgJiYgbWVudS0+ZGVzY2xlbiA+IDApCisgICAgeworICAgICAgaW50IG0gPSBtZW51LT5zcGNfZGVzYyAvIDI7CisgICAgICBpbnQgY3kgPSAtMSwgY3ggPSAtMTsKKworICAgICAgZm9yIChjaCA9ICcgJywgaSA9IDA7IGkgPCBtZW51LT5zcGNfZGVzYzsgaSsrKQorCXsKKwkgIGlmIChpID09IG0pCisJICAgIHsKKwkgICAgICB3YWRkY2gobWVudS0+d2luLCBtZW51LT5wYWQpOworCSAgICAgIGdldHl4KG1lbnUtPndpbiwgY3ksIGN4KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB3YWRkY2gobWVudS0+d2luLCBjaCk7CisJfQorICAgICAgaWYgKGl0ZW0tPmRlc2NyaXB0aW9uLmxlbmd0aCkKKwl3YWRkbnN0cihtZW51LT53aW4sIGl0ZW0tPmRlc2NyaXB0aW9uLnN0ciwgaXRlbS0+ZGVzY3JpcHRpb24ubGVuZ3RoKTsKKyAgICAgIGRlc2NfbGVuID0gX25jX0NhbGN1bGF0ZV9UZXh0X1dpZHRoKCYoaXRlbS0+ZGVzY3JpcHRpb24pKTsKKyAgICAgIGZvciAoY2ggPSAnICcsIGkgPSBtZW51LT5kZXNjbGVuIC0gZGVzY19sZW47IGkgPiAwOyBpLS0pCisJeworCSAgd2FkZGNoKG1lbnUtPndpbiwgY2gpOworCX0KKyAgICAgIGNvdW50ICs9IG1lbnUtPmRlc2NsZW4gKyBtZW51LT5zcGNfZGVzYzsKKworICAgICAgaWYgKG1lbnUtPnNwY19yb3dzID4gMSkKKwl7CisJICBpbnQgaiwgaywgbmN5LCBuY3g7CisKKwkgIGFzc2VydChjeCA+PSAwICYmIGN5ID49IDApOworCSAgZ2V0eXgobWVudS0+d2luLCBuY3ksIG5jeCk7CisJICBpZiAoaXNncmV5KQorCSAgICB3YXR0cm9mZihtZW51LT53aW4sIG1lbnUtPmdyZXkpOworCSAgZWxzZSBpZiAoaXNmb3JlKQorCSAgICB3YXR0cm9mZihtZW51LT53aW4sIG1lbnUtPmZvcmUpOworCSAgd2F0dHJvbihtZW51LT53aW4sIG1lbnUtPmJhY2spOworCSAgZm9yIChqID0gMTsgaiA8IG1lbnUtPnNwY19yb3dzOyBqKyspCisJICAgIHsKKwkgICAgICBpZiAoKGl0ZW1feSArIGopIDwgZ2V0bWF4eShtZW51LT53aW4pKQorCQl7CisJCSAgd21vdmUobWVudS0+d2luLCBpdGVtX3kgKyBqLCBpdGVtX3gpOworCQkgIGZvciAoayA9IDA7IGsgPCBjb3VudDsgaysrKQorCQkgICAgd2FkZGNoKG1lbnUtPndpbiwgJyAnKTsKKwkJfQorCSAgICAgIGlmICgoY3kgKyBqKSA8IGdldG1heHkobWVudS0+d2luKSkKKwkJbXZ3YWRkY2gobWVudS0+d2luLCBjeSArIGosIGN4IC0gMSwgbWVudS0+cGFkKTsKKwkgICAgfQorCSAgd21vdmUobWVudS0+d2luLCBuY3ksIG5jeCk7CisJICBpZiAoIWlzYmFjaykKKwkgICAgd2F0dHJvZmYobWVudS0+d2luLCBtZW51LT5iYWNrKTsKKwl9CisgICAgfQorCisgIC8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCisgIGlmIChpc2ZvcmUpCisgICAgd2F0dHJvZmYobWVudS0+d2luLCBtZW51LT5mb3JlKTsKKyAgaWYgKGlzYmFjaykKKyAgICB3YXR0cm9mZihtZW51LT53aW4sIG1lbnUtPmJhY2spOworICBpZiAoaXNncmV5KQorICAgIHdhdHRyb2ZmKG1lbnUtPndpbiwgbWVudS0+Z3JleSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgdm9pZCBfbmNfRHJhd19NZW51KGNvbnN0IE1FTlUgKikKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIERpc3BsYXkgdGhlIG1lbnUgaW4gaXRzIHdpbmRvd3MKK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX0RyYXdfTWVudShjb25zdCBNRU5VICogbWVudSkKK3sKKyAgSVRFTSAqaXRlbSA9IG1lbnUtPml0ZW1zWzBdOworICBJVEVNICpsYXN0aG9yLCAqbGFzdHZlcnQ7CisgIElURU0gKmhpdGVtOworICBpbnQgeSA9IDA7CisgIGNodHlwZSBzX2JrZ2Q7CisKKyAgYXNzZXJ0KGl0ZW0gJiYgbWVudS0+d2luKTsKKworICBzX2JrZ2QgPSBnZXRia2dkKG1lbnUtPndpbik7CisgIHdia2dkc2V0KG1lbnUtPndpbiwgbWVudS0+YmFjayk7CisgIHdlcmFzZShtZW51LT53aW4pOworICB3YmtnZHNldChtZW51LT53aW4sIHNfYmtnZCk7CisKKyAgbGFzdHZlcnQgPSAobWVudS0+b3B0ICYgT19OT05DWUNMSUMpID8gKElURU0gKikgMCA6IGl0ZW07CisKKyAgZG8KKyAgICB7CisgICAgICB3bW92ZShtZW51LT53aW4sIHksIDApOworCisgICAgICBoaXRlbSA9IGl0ZW07CisgICAgICBsYXN0aG9yID0gKG1lbnUtPm9wdCAmIE9fTk9OQ1lDTElDKSA/IChJVEVNICopIDAgOiBoaXRlbTsKKworICAgICAgZG8KKwl7CisJICBfbmNfUG9zdF9JdGVtKG1lbnUsIGhpdGVtKTsKKworCSAgd2F0dHJvbihtZW51LT53aW4sIG1lbnUtPmJhY2spOworCSAgaWYgKCgoaGl0ZW0gPSBoaXRlbS0+cmlnaHQpICE9IGxhc3Rob3IpICYmIGhpdGVtKQorCSAgICB7CisJICAgICAgaW50IGksIGosIGN5LCBjeDsKKwkgICAgICBjaHR5cGUgY2ggPSAnICc7CisKKwkgICAgICBnZXR5eChtZW51LT53aW4sIGN5LCBjeCk7CisJICAgICAgZm9yIChqID0gMDsgaiA8IG1lbnUtPnNwY19yb3dzOyBqKyspCisJCXsKKwkJICB3bW92ZShtZW51LT53aW4sIGN5ICsgaiwgY3gpOworCQkgIGZvciAoaSA9IDA7IGkgPCBtZW51LT5zcGNfY29sczsgaSsrKQorCQkgICAgeworCQkgICAgICB3YWRkY2gobWVudS0+d2luLCBjaCk7CisJCSAgICB9CisJCX0KKwkgICAgICB3bW92ZShtZW51LT53aW4sIGN5LCBjeCArIG1lbnUtPnNwY19jb2xzKTsKKwkgICAgfQorCX0KKyAgICAgIHdoaWxlIChoaXRlbSAmJiAoaGl0ZW0gIT0gbGFzdGhvcikpOworICAgICAgd2F0dHJvZmYobWVudS0+d2luLCBtZW51LT5iYWNrKTsKKworICAgICAgaXRlbSA9IGl0ZW0tPmRvd247CisgICAgICB5ICs9IG1lbnUtPnNwY19yb3dzOworCisgICAgfQorICB3aGlsZSAoaXRlbSAmJiAoaXRlbSAhPSBsYXN0dmVydCkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBwb3N0X21lbnUoTUVOVSAqKQorfAorfCAgIERlc2NyaXB0aW9uICAgOiAgUG9zdCBhIG1lbnUgdG8gdGhlIHNjcmVlbi4gVGhpcyBtYWtlcyBpdCB2aXNpYmxlLgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgICAtIHN1Y2Nlc3MKK3wgICAgICAgICAgICAgICAgICAgIEVfQkFEX0FSR1VNRU5UICAgICAgLSBub3QgYSB2YWxpZCBtZW51IHBvaW50ZXIKK3wgICAgICAgICAgICAgICAgICAgIEVfU1lTVEVNX0VSUk9SICAgICAgLSBlcnJvciBpbiBsb3dlciBsYXllcnMKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX0NPTk5FQ1RFRCAgICAgLSBObyBpdGVtcyBjb25uZWN0ZWQgdG8gbWVudQorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfU1RBVEUgICAgICAgICAtIE1lbnUgaW4gdXNlcmV4aXQgcm91dGluZQorfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgICAgICAtIE1lbnUgYWxyZWFkeSBwb3N0ZWQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwb3N0X21lbnUoTUVOVSAqIG1lbnUpCit7CisgIFQoKFRfQ0FMTEVEKCJwb3N0X21lbnUoJXApIiksIG1lbnUpKTsKKworICBpZiAoIW1lbnUpCisgICAgUkVUVVJOKEVfQkFEX0FSR1VNRU5UKTsKKworICBpZiAobWVudS0+c3RhdHVzICYgX0lOX0RSSVZFUikKKyAgICBSRVRVUk4oRV9CQURfU1RBVEUpOworCisgIGlmIChtZW51LT5zdGF0dXMgJiBfUE9TVEVEKQorICAgIFJFVFVSTihFX1BPU1RFRCk7CisKKyAgaWYgKG1lbnUtPml0ZW1zICYmICoobWVudS0+aXRlbXMpKQorICAgIHsKKyAgICAgIGludCB5OworICAgICAgaW50IGggPSAxICsgbWVudS0+c3BjX3Jvd3MgKiAobWVudS0+cm93cyAtIDEpOworCisgICAgICBXSU5ET1cgKndpbiA9IEdldF9NZW51X1dpbmRvdyhtZW51KTsKKyAgICAgIGludCBtYXh5ID0gZ2V0bWF4eSh3aW4pOworCisgICAgICBpZiAoKG1lbnUtPndpbiA9IG5ld3BhZChoLCBtZW51LT53aWR0aCkpKQorCXsKKwkgIHkgPSAobWF4eSA+PSBoKSA/IGggOiBtYXh5OworCSAgaWYgKHkgPj0gbWVudS0+aGVpZ2h0KQorCSAgICB5ID0gbWVudS0+aGVpZ2h0OworCSAgaWYgKCEobWVudS0+c3ViID0gc3VicGFkKG1lbnUtPndpbiwgeSwgbWVudS0+d2lkdGgsIDAsIDApKSkKKwkgICAgUkVUVVJOKEVfU1lTVEVNX0VSUk9SKTsKKwl9CisgICAgICBlbHNlCisJUkVUVVJOKEVfU1lTVEVNX0VSUk9SKTsKKworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9MSU5LX05FRURFRCkKKwlfbmNfTGlua19JdGVtcyhtZW51KTsKKyAgICB9CisgIGVsc2UKKyAgICBSRVRVUk4oRV9OT1RfQ09OTkVDVEVEKTsKKworICBtZW51LT5zdGF0dXMgfD0gX1BPU1RFRDsKKworICBpZiAoIShtZW51LT5vcHQgJiBPX09ORVZBTFVFKSkKKyAgICB7CisgICAgICBJVEVNICoqaXRlbXM7CisKKyAgICAgIGZvciAoaXRlbXMgPSBtZW51LT5pdGVtczsgKml0ZW1zOyBpdGVtcysrKQorCXsKKwkgICgqaXRlbXMpLT52YWx1ZSA9IEZBTFNFOworCX0KKyAgICB9CisKKyAgX25jX0RyYXdfTWVudShtZW51KTsKKworICBDYWxsX0hvb2sobWVudSwgbWVudWluaXQpOworICBDYWxsX0hvb2sobWVudSwgaXRlbWluaXQpOworCisgIF9uY19TaG93X01lbnUobWVudSk7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCB1bnBvc3RfbWVudShNRU5VICopCit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBEZXRhY2ggbWVudSBmcm9tIHNjcmVlbgorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgRV9PSyAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAtIG5vdCBhIHZhbGlkIG1lbnUgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9CQURfU1RBVEUgICAgICAgLSBtZW51IGluIHVzZXJleGl0IHJvdXRpbmUKK3wgICAgICAgICAgICAgICAgICAgIEVfTk9UX1BPU1RFRCAgICAgIC0gbWVudSBpcyBub3QgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQordW5wb3N0X21lbnUoTUVOVSAqIG1lbnUpCit7CisgIFdJTkRPVyAqd2luOworCisgIFQoKFRfQ0FMTEVEKCJ1bnBvc3RfbWVudSglcCkiKSwgbWVudSkpOworCisgIGlmICghbWVudSkKKyAgICBSRVRVUk4oRV9CQURfQVJHVU1FTlQpOworCisgIGlmIChtZW51LT5zdGF0dXMgJiBfSU5fRFJJVkVSKQorICAgIFJFVFVSTihFX0JBRF9TVEFURSk7CisKKyAgaWYgKCEobWVudS0+c3RhdHVzICYgX1BPU1RFRCkpCisgICAgUkVUVVJOKEVfTk9UX1BPU1RFRCk7CisKKyAgQ2FsbF9Ib29rKG1lbnUsIGl0ZW10ZXJtKTsKKyAgQ2FsbF9Ib29rKG1lbnUsIG1lbnV0ZXJtKTsKKworICB3aW4gPSBHZXRfTWVudV9XaW5kb3cobWVudSk7CisgIHdlcmFzZSh3aW4pOworICB3c3luY3VwKHdpbik7CisKKyAgYXNzZXJ0KG1lbnUtPnN1Yik7CisgIGRlbHdpbihtZW51LT5zdWIpOworICBtZW51LT5zdWIgPSAoV0lORE9XICopMDsKKworICBhc3NlcnQobWVudS0+d2luKTsKKyAgZGVsd2luKG1lbnUtPndpbik7CisgIG1lbnUtPndpbiA9IChXSU5ET1cgKikwOworCisgIG1lbnUtPnN0YXR1cyAmPSB+X1BPU1RFRDsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qIG1fcG9zdC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX3JlcV9uYW1lLmMgYi9uY3Vyc2VzLTUuNy9tZW51L21fcmVxX25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmQ1MWIxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tX3JlcV9uYW1lLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fcmVxdWVzdF9uYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogUm91dGluZXMgdG8gaGFuZGxlIGV4dGVybmFsIG5hbWVzIG9mIG1lbnUgcmVxdWVzdHMgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9yZXFfbmFtZS5jLHYgMS4yMCAyMDA4LzA5LzEzIDE4OjU5OjE3IHRvbSBFeHAgJCIpCisKK3N0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X25hbWVzW01BWF9NRU5VX0NPTU1BTkQgLSBNSU5fTUVOVV9DT01NQU5EICsgMV0gPQoreworICAiTEVGVF9JVEVNIiwKKyAgIlJJR0hUX0lURU0iLAorICAiVVBfSVRFTSIsCisgICJET1dOX0lURU0iLAorICAiU0NSX1VMSU5FIiwKKyAgIlNDUl9ETElORSIsCisgICJTQ1JfRFBBR0UiLAorICAiU0NSX1VQQUdFIiwKKyAgIkZJUlNUX0lURU0iLAorICAiTEFTVF9JVEVNIiwKKyAgIk5FWFRfSVRFTSIsCisgICJQUkVWX0lURU0iLAorICAiVE9HR0xFX0lURU0iLAorICAiQ0xFQVJfUEFUVEVSTiIsCisgICJCQUNLX1BBVFRFUk4iLAorICAiTkVYVF9NQVRDSCIsCisgICJQUkVWX01BVENIIgorfTsKKworI2RlZmluZSBBX1NJWkUgKHNpemVvZihyZXF1ZXN0X25hbWVzKS9zaXplb2YocmVxdWVzdF9uYW1lc1swXSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBjb25zdCBjaGFyICogbWVudV9yZXF1ZXN0X25hbWUgKGludCByZXF1ZXN0KTsKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIEdldCB0aGUgZXh0ZXJuYWwgbmFtZSBvZiBhIG1lbnUgcmVxdWVzdC4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFBvaW50ZXIgdG8gbmFtZSAgICAgIC0gb24gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgLSBvbiBpbnZhbGlkIHJlcXVlc3QgY29kZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK21lbnVfcmVxdWVzdF9uYW1lKGludCByZXF1ZXN0KQoreworICBUKChUX0NBTExFRCgibWVudV9yZXF1ZXN0X25hbWUoJWQpIiksIHJlcXVlc3QpKTsKKyAgaWYgKChyZXF1ZXN0IDwgTUlOX01FTlVfQ09NTUFORCkgfHwgKHJlcXVlc3QgPiBNQVhfTUVOVV9DT01NQU5EKSkKKyAgICB7CisgICAgICBTRVRfRVJST1IoRV9CQURfQVJHVU1FTlQpOworICAgICAgcmV0dXJuQ1B0cigoY29uc3QgY2hhciAqKTApOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybkNQdHIocmVxdWVzdF9uYW1lc1tyZXF1ZXN0IC0gTUlOX01FTlVfQ09NTUFORF0pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IG1lbnVfcmVxdWVzdF9ieV9uYW1lIChjb25zdCBjaGFyICpzdHIpOworfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2VhcmNoIGZvciBhIHJlcXVlc3Qgd2l0aCB0aGlzIG5hbWUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBSZXF1ZXN0IElkICAgICAgIC0gb24gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9OT19NQVRDSCAgICAgICAtIHJlcXVlc3Qgbm90IGZvdW5kCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorbWVudV9yZXF1ZXN0X2J5X25hbWUoY29uc3QgY2hhciAqc3RyKQoreworICAvKiBiZWNhdXNlIHRoZSB0YWJsZSBpcyBzbyBzbWFsbCwgaXQgZG9lc24ndCByZWFsbHkgaHVydAorICAgICB0byBydW4gc2VxdWVudGlhbGx5IHRocm91Z2ggaXQuCisgICAqLworICB1bnNpZ25lZCBpbnQgaSA9IDA7CisgIGNoYXIgYnVmWzE2XTsKKworICBUKChUX0NBTExFRCgibWVudV9yZXF1ZXN0X2J5X25hbWUoJXMpIiksIF9uY192aXNidWYoc3RyKSkpOworCisgIGlmIChzdHIpCisgICAgeworICAgICAgc3RybmNweShidWYsIHN0ciwgc2l6ZW9mKGJ1ZikpOworICAgICAgd2hpbGUgKChpIDwgc2l6ZW9mKGJ1ZikpICYmIChidWZbaV0gIT0gJ1wwJykpCisJeworCSAgYnVmW2ldID0gdG91cHBlcihVQ2hhcihidWZbaV0pKTsKKwkgIGkrKzsKKwl9CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBBX1NJWkU7IGkrKykKKwl7CisJICBpZiAoc3RybmNtcChyZXF1ZXN0X25hbWVzW2ldLCBidWYsIHNpemVvZihidWYpKSA9PSAwKQorCSAgICByZXR1cm5Db2RlKE1JTl9NRU5VX0NPTU1BTkQgKyAoaW50KWkpOworCX0KKyAgICB9CisgIFJFVFVSTihFX05PX01BVENIKTsKK30KKworLyogbV9yZXFfbmFtZS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX3NjYWxlLmMgYi9uY3Vyc2VzLTUuNy9tZW51L21fc2NhbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmMyZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tX3NjYWxlLmMKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBNb2R1bGUgbV9zY2FsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBNZW51IHNjYWxpbmcgcm91dGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWVudS5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBtX3NjYWxlLmMsdiAxLjkgMjAwNC8xMi8xMSAyMzoyOTozNCB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNjYWxlX21lbnUoY29uc3QgTUVOVSAqbWVudSkKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHVybnMgdGhlIG1pbmltdW0gd2luZG93IHNpemUgbmVjZXNzYXJ5IGZvciB0aGUKK3wgICAgICAgICAgICAgICAgICAgIHN1YndpbmRvdyBvZiBtZW51LiAgCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX0JBRF9BUkdVTUVOVCAgICAgICAgLSBpbnZhbGlkIG1lbnUgcG9pbnRlcgorfCAgICAgICAgICAgICAgICAgICAgRV9OT1RfQ09OTkVDVEVEICAgICAgIC0gbm8gaXRlbXMgYXJlIGNvbm5lY3RlZCB0byBtZW51CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2NhbGVfbWVudShjb25zdCBNRU5VICogbWVudSwgaW50ICpyb3dzLCBpbnQgKmNvbHMpCit7CisgIFQoKFRfQ0FMTEVEKCJzY2FsZV9tZW51KCVwLCVwLCVwKSIpLCBtZW51LCByb3dzLCBjb2xzKSk7CisKKyAgaWYgKCFtZW51KQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgaWYgKG1lbnUtPml0ZW1zICYmICoobWVudS0+aXRlbXMpKQorICAgIHsKKyAgICAgIGlmIChyb3dzKQorCSpyb3dzID0gbWVudS0+aGVpZ2h0OworICAgICAgaWYgKGNvbHMpCisJKmNvbHMgPSBtZW51LT53aWR0aDsKKyAgICAgIFJFVFVSTihFX09LKTsKKyAgICB9CisgIGVsc2UKKyAgICBSRVRVUk4oRV9OT1RfQ09OTkVDVEVEKTsKK30KKworLyogbV9zY2FsZS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tX3NwYWNpbmcuYyBiL25jdXJzZXMtNS43L21lbnUvbV9zcGFjaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5YmJlNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV9zcGFjaW5nLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fc3BhY2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogUm91dGluZXMgdG8gaGFuZGxlIHNwYWNpbmcgYmV0d2VlbiBlbnRyaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9zcGFjaW5nLmMsdiAxLjE3IDIwMDQvMTIvMTEgMjM6Mjk6MzQgdG9tIEV4cCAkIikKKworI2RlZmluZSBNQVhfU1BDX0RFU0MgKChUQUJTSVpFKSA/IChUQUJTSVpFKSA6IDgpCisjZGVmaW5lIE1BWF9TUENfQ09MUyAoKFRBQlNJWkUpID8gKFRBQlNJWkUpIDogOCkKKyNkZWZpbmUgTUFYX1NQQ19ST1dTICgzKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV9zcGFjaW5nKE1FTlUgKm1lbnUsaW50IGRlc2MsIGludCByLCBpbnQgYyk7Cit8Cit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXQgdGhlIHNwYWNpbmcgYmV0d2VlbiBlbnRyaWVzCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWVudV9zcGFjaW5nKE1FTlUgKiBtZW51LCBpbnQgc19kZXNjLCBpbnQgc19yb3csIGludCBzX2NvbCkKK3sKKyAgTUVOVSAqbTsJCQkvKiBzcGxpdCBmb3IgQVRBQyB3b3JrYXJvdW5kICovCisKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X3NwYWNpbmcoJXAsJWQsJWQsJWQpIiksIG1lbnUsIHNfZGVzYywgc19yb3csIHNfY29sKSk7CisKKyAgbSA9IE5vcm1hbGl6ZV9NZW51KG1lbnUpOworCisgIGFzc2VydChtKTsKKyAgaWYgKG0tPnN0YXR1cyAmIF9QT1NURUQpCisgICAgUkVUVVJOKEVfUE9TVEVEKTsKKworICBpZiAoKChzX2Rlc2MgPCAwKSB8fCAoc19kZXNjID4gTUFYX1NQQ19ERVNDKSkgfHwKKyAgICAgICgoc19yb3cgPCAwKSB8fCAoc19yb3cgPiBNQVhfU1BDX1JPV1MpKSB8fAorICAgICAgKChzX2NvbCA8IDApIHx8IChzX2NvbCA+IE1BWF9TUENfQ09MUykpKQorICAgIFJFVFVSTihFX0JBRF9BUkdVTUVOVCk7CisKKyAgbS0+c3BjX2Rlc2MgPSBzX2Rlc2MgPyBzX2Rlc2MgOiAxOworICBtLT5zcGNfcm93cyA9IHNfcm93ID8gc19yb3cgOiAxOworICBtLT5zcGNfY29scyA9IHNfY29sID8gc19jb2wgOiAxOworICBfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aChtKTsKKworICBSRVRVUk4oRV9PSyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudQorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IG1lbnVfc3BhY2luZyAoY29uc3QgTUVOVSAqLGludCAqLGludCAqLGludCAqKTsKK3wKK3wgICBEZXNjcmlwdGlvbiAgIDogIFJldHJpZXZlIGluZm8gYWJvdXQgc3BhY2luZyBiZXR3ZWVuIHRoZSBlbnRyaWVzCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgIC0gb24gc3VjY2VzcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK21lbnVfc3BhY2luZyhjb25zdCBNRU5VICogbWVudSwgaW50ICpzX2Rlc2MsIGludCAqc19yb3csIGludCAqc19jb2wpCit7CisgIGNvbnN0IE1FTlUgKm07CQkvKiBzcGxpdCBmb3IgQVRBQyB3b3JrYXJvdW5kICovCisKKyAgVCgoVF9DQUxMRUQoIm1lbnVfc3BhY2luZyglcCwlcCwlcCwlcCkiKSwgbWVudSwgc19kZXNjLCBzX3Jvdywgc19jb2wpKTsKKworICBtID0gTm9ybWFsaXplX01lbnUobWVudSk7CisKKyAgYXNzZXJ0KG0pOworICBpZiAoc19kZXNjKQorICAgICpzX2Rlc2MgPSBtLT5zcGNfZGVzYzsKKyAgaWYgKHNfcm93KQorICAgICpzX3JvdyA9IG0tPnNwY19yb3dzOworICBpZiAoc19jb2wpCisgICAgKnNfY29sID0gbS0+c3BjX2NvbHM7CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKiBtX3NwYWNpbmcuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV9zdWIuYyBiL25jdXJzZXMtNS43L21lbnUvbV9zdWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjY0OWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tX3N1Yi5jCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1fc3ViICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogTWVudXMgc3Vid2luZG93IGFzc29jaWF0aW9uIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1lbnUucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogbV9zdWIuYyx2IDEuMTAgMjAwNC8xMi8yNSAyMTozODozMSB0b20gRXhwICQiKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgaW50IHNldF9tZW51X3N1YihNRU5VICptZW51LCBXSU5ET1cgKndpbikKK3wgICAKK3wgICBEZXNjcmlwdGlvbiAgIDogIFNldHMgdGhlIHN1YndpbmRvdyBvZiB0aGUgbWVudS4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAgIC0gc3VjY2VzcworfCAgICAgICAgICAgICAgICAgICAgRV9QT1NURUQgICAgICAgLSBtZW51IGlzIGFscmVhZHkgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X21lbnVfc3ViKE1FTlUgKiBtZW51LCBXSU5ET1cgKndpbikKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X3N1YiglcCwlcCkiKSwgbWVudSwgd2luKSk7CisKKyAgaWYgKG1lbnUpCisgICAgeworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpCisJUkVUVVJOKEVfUE9TVEVEKTsKKyAgICAgIG1lbnUtPnVzZXJzdWIgPSB3aW47CisgICAgICBfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aChtZW51KTsKKyAgICB9CisgIGVsc2UKKyAgICBfbmNfRGVmYXVsdF9NZW51LnVzZXJzdWIgPSB3aW47CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgV0lORE9XICptZW51X3N1Yihjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN1YndpbmRvdyBvZiB0aGUgbWVudQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTlVMTCBvbiBlcnJvciwgb3RoZXJ3aXNlIGEgcG9pbnRlciB0byB0aGUgd2luZG93CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCittZW51X3N1Yihjb25zdCBNRU5VICogbWVudSkKK3sKKyAgY29uc3QgTUVOVSAqbSA9IE5vcm1hbGl6ZV9NZW51KG1lbnUpOworCisgIFQoKFRfQ0FMTEVEKCJtZW51X3N1YiglcCkiKSwgbWVudSkpOworICByZXR1cm5XaW4oR2V0X01lbnVfV2luZG93KG0pKTsKK30KKworLyogbV9zdWIuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbV90cmFjZS5jIGIvbmN1cnNlcy01LjcvbWVudS9tX3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5ZjkwMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV90cmFjZS5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fdHJhY2UuYyx2IDEuMyAyMDA1LzAxLzE2IDAxOjA2OjExIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKElURU0gKikKK19uY19yZXRyYWNlX2l0ZW0oSVRFTSAqIGNvZGUpCit7CisgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgIHJldHVybiBjb2RlOworfQorCitOQ1VSU0VTX0VYUE9SVChJVEVNICoqKQorX25jX3JldHJhY2VfaXRlbV9wdHIoSVRFTSAqKiBjb2RlKQoreworICBUKChUX1JFVFVSTigiJXAiKSwgY29kZSkpOworICByZXR1cm4gY29kZTsKK30KKworTkNVUlNFU19FWFBPUlQoSXRlbV9PcHRpb25zKQorX25jX3JldHJhY2VfaXRlbV9vcHRzKEl0ZW1fT3B0aW9ucyBjb2RlKQoreworICBUKChUX1JFVFVSTigiJWQiKSwgY29kZSkpOworICByZXR1cm4gY29kZTsKK30KKworTkNVUlNFU19FWFBPUlQoTUVOVSAqKQorX25jX3JldHJhY2VfbWVudShNRU5VICogY29kZSkKK3sKKyAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgcmV0dXJuIGNvZGU7Cit9CisKK05DVVJTRVNfRVhQT1JUKE1lbnVfSG9vaykKK19uY19yZXRyYWNlX21lbnVfaG9vayhNZW51X0hvb2sgY29kZSkKK3sKKyAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgcmV0dXJuIGNvZGU7Cit9CisKK05DVVJTRVNfRVhQT1JUKE1lbnVfT3B0aW9ucykKK19uY19yZXRyYWNlX21lbnVfb3B0cyhNZW51X09wdGlvbnMgY29kZSkKK3sKKyAgVCgoVF9SRVRVUk4oIiVkIiksIGNvZGUpKTsKKyAgcmV0dXJuIGNvZGU7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21fdXNlcnB0ci5jIGIvbmN1cnNlcy01LjcvbWVudS9tX3VzZXJwdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE3OGIyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tX3VzZXJwdHIuYwpAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX3VzZXJwdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIEFzc29jaWF0ZSBhcHBsaWNhdGlvbiBkYXRhIHdpdGggbWVudXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fdXNlcnB0ci5jLHYgMS4xNiAyMDA0LzEyLzI1IDIxOjM4OjU1IHRvbSBFeHAgJCIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8ICAgRmFjaWxpdHkgICAgICA6ICBsaWJubWVudSAgCit8ICAgRnVuY3Rpb24gICAgICA6ICBpbnQgc2V0X21lbnVfdXNlcnB0cihNRU5VICptZW51LCB2b2lkICp1c2VycHRyKQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgU2V0IHRoZSBwb2ludGVyIHRoYXQgaXMgcmVzZXJ2ZWQgaW4gYW55IG1lbnUgdG8gc3RvcmUKK3wgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIEVfT0sgICAgICAgICAtIHN1Y2Nlc3MKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfbWVudV91c2VycHRyKE1FTlUgKiBtZW51LCB2b2lkICp1c2VycHRyKQoreworICBUKChUX0NBTExFRCgic2V0X21lbnVfdXNlcnB0ciglcCwlcCkiKSwgbWVudSwgdXNlcnB0cikpOworICBOb3JtYWxpemVfTWVudShtZW51KS0+dXNlcnB0ciA9IHVzZXJwdHI7CisgIFJFVFVSTihFX09LKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIHZvaWQgKm1lbnVfdXNlcnB0cihjb25zdCBNRU5VICptZW51KQorfCAgIAorfCAgIERlc2NyaXB0aW9uICAgOiAgUmV0dXJuIHRoZSBwb2ludGVyIHRoYXQgaXMgcmVzZXJ2ZWQgaW4gYW55IG1lbnUgdG8KK3wgICAgICAgICAgICAgICAgICAgIHN0b3JlIGFwcGxpY2F0aW9uIHJlbGV2YW50IGluZm9ybWF0aW9ucy4KK3wKK3wgICBSZXR1cm4gVmFsdWVzIDogIFZhbHVlIG9mIHRoZSBwb2ludGVyLiBJZiBubyBzdWNoIHBvaW50ZXIgaGFzIGJlZW4gc2V0LAorfCAgICAgICAgICAgICAgICAgICAgTlVMTCBpcyByZXR1cm5lZAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQgKikKK21lbnVfdXNlcnB0cihjb25zdCBNRU5VICogbWVudSkKK3sKKyAgVCgoVF9DQUxMRUQoIm1lbnVfdXNlcnB0ciglcCkiKSwgbWVudSkpOworICByZXR1cm5Wb2lkUHRyKE5vcm1hbGl6ZV9NZW51KG1lbnUpLT51c2VycHRyKTsKK30KKworLyogbV91c2VycHRyLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tZW51L21fd2luLmMgYi9uY3Vyc2VzLTUuNy9tZW51L21fd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmODU3ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbV93aW4uYwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTUsMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE1vZHVsZSBtX3dpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIE1lbnVzIHdpbmRvdyBhc3NvY2lhdGlvbiByb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJtZW51LnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IG1fd2luLmMsdiAxLjE1IDIwMDQvMTIvMjUgMjE6Mzk6MjAgdG9tIEV4cCAkIikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICBGYWNpbGl0eSAgICAgIDogIGxpYm5tZW51ICAKK3wgICBGdW5jdGlvbiAgICAgIDogIGludCBzZXRfbWVudV93aW4oTUVOVSAqbWVudSwgV0lORE9XICp3aW4pCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBTZXRzIHRoZSB3aW5kb3cgb2YgdGhlIG1lbnUuCit8Cit8ICAgUmV0dXJuIFZhbHVlcyA6ICBFX09LICAgICAgICAgICAgICAgLSBzdWNjZXNzCit8ICAgICAgICAgICAgICAgICAgICBFX1BPU1RFRCAgICAgICAgICAgLSBtZW51IGlzIGFscmVhZHkgcG9zdGVkCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoaW50KQorc2V0X21lbnVfd2luKE1FTlUgKiBtZW51LCBXSU5ET1cgKndpbikKK3sKKyAgVCgoVF9DQUxMRUQoInNldF9tZW51X3dpbiglcCwlcCkiKSwgbWVudSwgd2luKSk7CisKKyAgaWYgKG1lbnUpCisgICAgeworICAgICAgaWYgKG1lbnUtPnN0YXR1cyAmIF9QT1NURUQpCisJUkVUVVJOKEVfUE9TVEVEKTsKKyAgICAgIG1lbnUtPnVzZXJ3aW4gPSB3aW47CisgICAgICBfbmNfQ2FsY3VsYXRlX0l0ZW1fTGVuZ3RoX2FuZF9XaWR0aChtZW51KTsKKyAgICB9CisgIGVsc2UKKyAgICBfbmNfRGVmYXVsdF9NZW51LnVzZXJ3aW4gPSB3aW47CisKKyAgUkVUVVJOKEVfT0spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCAgIEZhY2lsaXR5ICAgICAgOiAgbGlibm1lbnUgIAorfCAgIEZ1bmN0aW9uICAgICAgOiAgV0lORE9XICptZW51X3dpbihjb25zdCBNRU5VICopCit8ICAgCit8ICAgRGVzY3JpcHRpb24gICA6ICBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIHdpbmRvdyBvZiB0aGUgbWVudQorfAorfCAgIFJldHVybiBWYWx1ZXMgOiAgTlVMTCBvbiBlcnJvciwgb3RoZXJ3aXNlIHBvaW50ZXIgdG8gd2luZG93CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCittZW51X3dpbihjb25zdCBNRU5VICogbWVudSkKK3sKKyAgY29uc3QgTUVOVSAqbSA9IE5vcm1hbGl6ZV9NZW51KG1lbnUpOworCisgIFQoKFRfQ0FMTEVEKCJtZW51X3dpbiglcCkiKSwgbWVudSkpOworICByZXR1cm5XaW4obS0+dXNlcndpbiA/IG0tPnVzZXJ3aW4gOiBzdGRzY3IpOworfQorCisvKiBtX3dpbi5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tZW51LmggYi9uY3Vyc2VzLTUuNy9tZW51L21lbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDM1MmViCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tZW51LmgKQEAgLTAsMCArMSwyNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogbWVudS5oLHYgMS4xOSAyMDA3LzAyLzI0IDE3OjMyOjEzIHRvbSBFeHAgJCAqLworCisjaWZuZGVmIEVUSV9NRU5VCisjZGVmaW5lIEVUSV9NRU5VCisKKyNpZmRlZiBBTUlHQQorI2RlZmluZSBURVhUIFRFWFRfbmN1cnNlcworI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKyNpbmNsdWRlIDxldGkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIGludCBNZW51X09wdGlvbnM7Cit0eXBlZGVmIGludCBJdGVtX09wdGlvbnM7CisKKy8qIE1lbnUgb3B0aW9uczogKi8KKyNkZWZpbmUgT19PTkVWQUxVRSAgICAgICgweDAxKQorI2RlZmluZSBPX1NIT1dERVNDICAgICAgKDB4MDIpCisjZGVmaW5lIE9fUk9XTUFKT1IgICAgICAoMHgwNCkKKyNkZWZpbmUgT19JR05PUkVDQVNFICAgICgweDA4KQorI2RlZmluZSBPX1NIT1dNQVRDSCAgICAgKDB4MTApCisjZGVmaW5lIE9fTk9OQ1lDTElDICAgICAoMHgyMCkKKworLyogSXRlbSBvcHRpb25zOiAqLworI2RlZmluZSBPX1NFTEVDVEFCTEUgICAgKDB4MDEpCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGNvbnN0IGNoYXIqIHN0cjsKKyAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOworfSBURVhUOworCit0eXBlZGVmIHN0cnVjdCB0YWdJVEVNIAoreworICBURVhUICAgICAgICAgICBuYW1lOyAgICAgICAgLyogbmFtZSBvZiBtZW51IGl0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgVEVYVCAgICAgICAgICAgZGVzY3JpcHRpb247IC8qIGRlc2NyaXB0aW9uIG9mIGl0ZW0sIG9wdGlvbmFsIGluIGRpc3BsYXkgICovIAorICBzdHJ1Y3QgdGFnTUVOVSAqaW1lbnU7ICAgICAgLyogUG9pbnRlciB0byBwYXJlbnQgbWVudSAgICAgICAgICAgICAgICAgICAgKi8KKyAgdm9pZCAgICAgICAgICAgKnVzZXJwdHI7ICAgIC8qIFBvaW50ZXIgdG8gdXNlciBkZWZpbmVkIHBlciBpdGVtIGRhdGEgICAgICovIAorICBJdGVtX09wdGlvbnMgICBvcHQ7ICAgICAgICAgLyogSXRlbSBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCisgIHNob3J0ICAgICAgICAgIGluZGV4OyAgICAgICAvKiBJdGVtIG51bWJlciBpZiBjb25uZWN0ZWQgdG8gYSBtZW51ICAgICAgICAqLworICBzaG9ydCAgICAgICAgICB5OyAgICAgICAgICAgLyogeSBhbmQgeCBsb2NhdGlvbiBvZiBpdGVtIGluIG1lbnUgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgeDsKKyAgYm9vbCAgICAgICAgICAgdmFsdWU7ICAgICAgIC8qIFNlbGVjdGlvbiB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBzdHJ1Y3QgdGFnSVRFTSAqbGVmdDsgICAgICAgLyogbmVpZ2hib3IgaXRlbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RydWN0IHRhZ0lURU0gKnJpZ2h0OworICBzdHJ1Y3QgdGFnSVRFTSAqdXA7CisgIHN0cnVjdCB0YWdJVEVNICpkb3duOworCit9IElURU07CisKK3R5cGVkZWYgdm9pZCAoKk1lbnVfSG9vaykoc3RydWN0IHRhZ01FTlUgKik7CisKK3R5cGVkZWYgc3RydWN0IHRhZ01FTlUgCit7CisgIHNob3J0ICAgICAgICAgIGhlaWdodDsgICAgICAgICAgICAgICAgLyogTnIuIG9mIGNoYXJzIGhpZ2ggICAgICAgICAgICAgICAqLworICBzaG9ydCAgICAgICAgICB3aWR0aDsgICAgICAgICAgICAgICAgIC8qIE5yLiBvZiBjaGFycyB3aWRlICAgICAgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgcm93czsgICAgICAgICAgICAgICAgICAvKiBOci4gb2YgaXRlbXMgaGlnaCAgICAgICAgICAgICAgICovCisgIHNob3J0ICAgICAgICAgIGNvbHM7ICAgICAgICAgICAgICAgICAgLyogTnIuIG9mIGl0ZW1zIHdpZGUgICAgICAgICAgICAgICAqLworICBzaG9ydCAgICAgICAgICBmcm93czsgICAgICAgICAgICAgICAgIC8qIE5yLiBvZiBmb3JtYXR0ZWQgaXRlbXMgaGlnaCAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgZmNvbHM7ICAgICAgICAgICAgICAgICAvKiBOci4gb2YgZm9ybWF0dGVkIGl0ZW1zIHdpZGUgICAgICovCisgIHNob3J0ICAgICAgICAgIGFyb3dzOyAgICAgICAgICAgICAgICAgLyogTnIuIG9mIGl0ZW1zIGhpZ2ggKGFjdHVhbCkgICAgICAqLworICBzaG9ydCAgICAgICAgICBuYW1lbGVuOyAgICAgICAgICAgICAgIC8qIE1heC4gbmFtZSBsZW5ndGggICAgICAgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgZGVzY2xlbjsgICAgICAgICAgICAgICAvKiBNYXguIGRlc2NyaXB0aW9uIGxlbmd0aCAgICAgICAgICovCisgIHNob3J0ICAgICAgICAgIG1hcmtsZW47ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIG1hcmssIGlmIGFueSAgICAgICAgICAqLworICBzaG9ydCAgICAgICAgICBpdGVtbGVuOyAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBvbmUgaXRlbSAgICAgICAgICAgICAgKi8KKyAgc2hvcnQgICAgICAgICAgc3BjX2Rlc2M7ICAgICAgICAgICAgICAvKiBTcGFjaW5nIGZvciBkZXNjcmlwdG9yICAgICAgICAgICovCisgIHNob3J0ICAgICAgICAgIHNwY19jb2xzOyAgICAgICAgICAgICAgLyogU3BhY2luZyBmb3IgY29sdW1ucyAgICAgICAgICAgICAqLworICBzaG9ydCAgICAgICAgICBzcGNfcm93czsgICAgICAgICAgICAgIC8qIFNwYWNpbmcgZm9yIHJvd3MgICAgICAgICAgICAgICAgKi8gCisgIGNoYXIgICAgICAgICAgKnBhdHRlcm47ICAgICAgICAgICAgICAgLyogQnVmZmVyIHRvIHN0b3JlIG1hdGNoIGNoYXJzICAgICAqLworICBzaG9ydCAgICAgICAgICBwaW5kZXg7ICAgICAgICAgICAgICAgIC8qIEluZGV4IGludG8gcGF0dGVybiBidWZmZXIgICAgICAgKi8KKyAgV0lORE9XICAgICAgICAqd2luOyAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgY29udGFpbmluZyBtZW51ICAgICAgICAgICovCisgIFdJTkRPVyAgICAgICAgKnN1YjsgICAgICAgICAgICAgICAgICAgLyogU3Vid2luZG93IGZvciBtZW51IGRpc3BsYXkgICAgICAqLworICBXSU5ET1cgICAgICAgICp1c2Vyd2luOyAgICAgICAgICAgICAgIC8qIFVzZXIncyB3aW5kb3cgICAgICAgICAgICAgICAgICAgKi8KKyAgV0lORE9XICAgICAgICAqdXNlcnN1YjsgICAgICAgICAgICAgICAvKiBVc2VyJ3Mgc3Vid2luZG93ICAgICAgICAgICAgICAgICovCisgIElURU0gICAgICAgICAgKippdGVtczsgICAgICAgICAgICAgICAgLyogYXJyYXkgb2YgaXRlbXMgICAgICAgICAgICAgICAgICAqLyAKKyAgc2hvcnQgICAgICAgICAgbml0ZW1zOyAgICAgICAgICAgICAgICAvKiBOci4gb2YgaXRlbXMgaW4gbWVudSAgICAgICAgICAgICovCisgIElURU0gICAgICAgICAgKmN1cml0ZW07ICAgICAgICAgICAgICAgLyogQ3VycmVudCBpdGVtICAgICAgICAgICAgICAgICAgICAqLworICBzaG9ydCAgICAgICAgICB0b3Byb3c7ICAgICAgICAgICAgICAgIC8qIFRvcCByb3cgb2YgbWVudSAgICAgICAgICAgICAgICAgKi8KKyAgY2h0eXBlICAgICAgICAgZm9yZTsgICAgICAgICAgICAgICAgICAvKiBTZWxlY3Rpb24gYXR0cmlidXRlICAgICAgICAgICAgICovCisgIGNodHlwZSAgICAgICAgIGJhY2s7ICAgICAgICAgICAgICAgICAgLyogTm9uc2VsZWN0aW9uIGF0dHJpYnV0ZSAgICAgICAgICAqLworICBjaHR5cGUgICAgICAgICBncmV5OyAgICAgICAgICAgICAgICAgIC8qIEluYWN0aXZlIGF0dHJpYnV0ZSAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciAgcGFkOyAgICAgICAgICAgICAgICAgICAvKiBQYWQgY2hhcmFjdGVyICAgICAgICAgICAgICAgICAgICovCisKKyAgTWVudV9Ib29rICAgICAgbWVudWluaXQ7ICAgICAgICAgICAgICAvKiBVc2VyIGhvb2tzICAgICAgICAgICAgICAgICAgICAgICovCisgIE1lbnVfSG9vayAgICAgIG1lbnV0ZXJtOworICBNZW51X0hvb2sgICAgICBpdGVtaW5pdDsKKyAgTWVudV9Ib29rICAgICAgaXRlbXRlcm07CisKKyAgdm9pZCAgICAgICAgICAqdXNlcnB0cjsgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG1lbnVzIHVzZXIgZGF0YSAgICAgICovCisgIGNoYXIgICAgICAgICAgKm1hcms7ICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBtYXJrZXIgc3RyaW5nICAgICAgICAqLworCisgIE1lbnVfT3B0aW9ucyAgIG9wdDsgICAgICAgICAgICAgICAgICAgLyogTWVudSBvcHRpb25zICAgICAgICAgICAgICAgICAgICAqLworICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7ICAgICAgICAgICAgICAgIC8qIEludGVybmFsIHN0YXRlIG9mIG1lbnUgICAgICAgICAgKi8KKworfSBNRU5VOworCisKKy8qIERlZmluZSBrZXlzICovCisKKyNkZWZpbmUgUkVRX0xFRlRfSVRFTSAgICAgICAgICAgKEtFWV9NQVggKyAxKQorI2RlZmluZSBSRVFfUklHSFRfSVRFTSAgICAgICAgICAoS0VZX01BWCArIDIpCisjZGVmaW5lIFJFUV9VUF9JVEVNICAgICAgICAgICAgIChLRVlfTUFYICsgMykKKyNkZWZpbmUgUkVRX0RPV05fSVRFTSAgICAgICAgICAgKEtFWV9NQVggKyA0KQorI2RlZmluZSBSRVFfU0NSX1VMSU5FICAgICAgICAgICAoS0VZX01BWCArIDUpCisjZGVmaW5lIFJFUV9TQ1JfRExJTkUgICAgICAgICAgIChLRVlfTUFYICsgNikKKyNkZWZpbmUgUkVRX1NDUl9EUEFHRSAgICAgICAgICAgKEtFWV9NQVggKyA3KQorI2RlZmluZSBSRVFfU0NSX1VQQUdFICAgICAgICAgICAoS0VZX01BWCArIDgpCisjZGVmaW5lIFJFUV9GSVJTVF9JVEVNICAgICAgICAgIChLRVlfTUFYICsgOSkKKyNkZWZpbmUgUkVRX0xBU1RfSVRFTSAgICAgICAgICAgKEtFWV9NQVggKyAxMCkKKyNkZWZpbmUgUkVRX05FWFRfSVRFTSAgICAgICAgICAgKEtFWV9NQVggKyAxMSkKKyNkZWZpbmUgUkVRX1BSRVZfSVRFTSAgICAgICAgICAgKEtFWV9NQVggKyAxMikKKyNkZWZpbmUgUkVRX1RPR0dMRV9JVEVNICAgICAgICAgKEtFWV9NQVggKyAxMykKKyNkZWZpbmUgUkVRX0NMRUFSX1BBVFRFUk4gICAgICAgKEtFWV9NQVggKyAxNCkKKyNkZWZpbmUgUkVRX0JBQ0tfUEFUVEVSTiAgICAgICAgKEtFWV9NQVggKyAxNSkKKyNkZWZpbmUgUkVRX05FWFRfTUFUQ0ggICAgICAgICAgKEtFWV9NQVggKyAxNikKKyNkZWZpbmUgUkVRX1BSRVZfTUFUQ0ggICAgICAgICAgKEtFWV9NQVggKyAxNykKKworI2RlZmluZSBNSU5fTUVOVV9DT01NQU5EICAgICAgICAoS0VZX01BWCArIDEpCisjZGVmaW5lIE1BWF9NRU5VX0NPTU1BTkQgICAgICAgIChLRVlfTUFYICsgMTcpCisKKy8qCisgKiBTb21lIEFUJlQgY29kZSBleHBlY3RzIE1BWF9DT01NQU5EIHRvIGJlIG91dC1vZi1iYW5kIG5vdAorICoganVzdCBmb3IgbWVudSBjb21tYW5kcyBidXQgZm9yIGZvcm1zIG9uZXMgYXMgd2VsbC4KKyAqLworI2lmIGRlZmluZWQoTUFYX0NPTU1BTkQpCisjICBpZiAoTUFYX01FTlVfQ09NTUFORCA+IE1BWF9DT01NQU5EKQorIyAgICBlcnJvciBTb21ldGhpbmcgaXMgd3JvbmcgLS0gTUFYX01FTlVfQ09NTUFORCBpcyBncmVhdGVyIHRoYW4gTUFYX0NPTU1BTkQKKyMgIGVsaWYgKE1BWF9DT01NQU5EICE9IChLRVlfTUFYICsgMTI4KSkKKyMgICAgZXJyb3IgU29tZXRoaW5nIGlzIHdyb25nIC0tIE1BWF9DT01NQU5EIGlzIGFscmVhZHkgaW5jb25zaXN0ZW50bHkgZGVmaW5lZC4KKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIE1BWF9DT01NQU5EIChLRVlfTUFYICsgMTI4KQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tIHByb3RvdHlwZXMgZm9yIGxpYm1lbnUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChJVEVNICoqKQltZW51X2l0ZW1zIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKElURU0gKikJY3VycmVudF9pdGVtIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKElURU0gKikJbmV3X2l0ZW0gKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoTUVOVSAqKQluZXdfbWVudSAoSVRFTSAqKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChJdGVtX09wdGlvbnMpCWl0ZW1fb3B0cyAoY29uc3QgSVRFTSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChNZW51X09wdGlvbnMpCW1lbnVfb3B0cyAoY29uc3QgTUVOVSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE1lbnVfSG9vaykJaXRlbV9pbml0IChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE1lbnVfSG9vaykJaXRlbV90ZXJtIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE1lbnVfSG9vaykJbWVudV9pbml0IChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE1lbnVfSG9vaykJbWVudV90ZXJtIChjb25zdCBNRU5VICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopCW1lbnVfc3ViIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQltZW51X3dpbiAoY29uc3QgTUVOVSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikJaXRlbV9kZXNjcmlwdGlvbiAoY29uc3QgSVRFTSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCWl0ZW1fbmFtZSAoY29uc3QgSVRFTSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCW1lbnVfbWFyayAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCW1lbnVfcmVxdWVzdF9uYW1lIChpbnQpOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKQltZW51X3BhdHRlcm4gKGNvbnN0IE1FTlUgKik7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkICopCW1lbnVfdXNlcnB0ciAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkICopCWl0ZW1fdXNlcnB0ciAoY29uc3QgSVRFTSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkJbWVudV9iYWNrIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkJbWVudV9mb3JlIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNodHlwZSkJbWVudV9ncmV5IChjb25zdCBNRU5VICopOworCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmcmVlX2l0ZW0gKElURU0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlmcmVlX21lbnUgKE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlpdGVtX2NvdW50IChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJaXRlbV9pbmRleCAoY29uc3QgSVRFTSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCWl0ZW1fb3B0c19vZmYgKElURU0gKixJdGVtX09wdGlvbnMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJaXRlbV9vcHRzX29uIChJVEVNICosSXRlbV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCW1lbnVfZHJpdmVyIChNRU5VICosaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCW1lbnVfb3B0c19vZmYgKE1FTlUgKixNZW51X09wdGlvbnMpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJbWVudV9vcHRzX29uIChNRU5VICosTWVudV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCW1lbnVfcGFkIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJcG9zX21lbnVfY3Vyc29yIChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJcG9zdF9tZW51IChNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2NhbGVfbWVudSAoY29uc3QgTUVOVSAqLGludCAqLGludCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9jdXJyZW50X2l0ZW0gKE1FTlUgKm1lbnUsSVRFTSAqaXRlbSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfaXRlbV9pbml0IChNRU5VICosIE1lbnVfSG9vayk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfaXRlbV9vcHRzIChJVEVNICosSXRlbV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9pdGVtX3Rlcm0gKE1FTlUgKiwgTWVudV9Ib29rKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9pdGVtX3VzZXJwdHIgKElURU0gKiwgdm9pZCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9pdGVtX3ZhbHVlIChJVEVNICosYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9iYWNrIChNRU5VICosY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X2ZvcmUgKE1FTlUgKixjaHR5cGUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfZm9ybWF0IChNRU5VICosaW50LGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9ncmV5IChNRU5VICosY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X2luaXQgKE1FTlUgKiwgTWVudV9Ib29rKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X2l0ZW1zIChNRU5VICosSVRFTSAqKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9tYXJrIChNRU5VICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9vcHRzIChNRU5VICosTWVudV9PcHRpb25zKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X3BhZCAoTUVOVSAqLGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9wYXR0ZXJuIChNRU5VICosY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X3N1YiAoTUVOVSAqLFdJTkRPVyAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X3Rlcm0gKE1FTlUgKiwgTWVudV9Ib29rKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXNldF9tZW51X3VzZXJwdHIgKE1FTlUgKix2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X21lbnVfd2luIChNRU5VICosV0lORE9XICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJc2V0X3RvcF9yb3cgKE1FTlUgKixpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJdG9wX3JvdyAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpCXVucG9zdF9tZW51IChNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJbWVudV9yZXF1ZXN0X2J5X25hbWUgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlzZXRfbWVudV9zcGFjaW5nIChNRU5VICosaW50LGludCxpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkJbWVudV9zcGFjaW5nIChjb25zdCBNRU5VICosaW50ICosaW50ICosaW50ICopOworCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKQlpdGVtX3ZhbHVlIChjb25zdCBJVEVNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpCWl0ZW1fdmlzaWJsZSAoY29uc3QgSVRFTSAqKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpCW1lbnVfZm9ybWF0IChjb25zdCBNRU5VICosaW50ICosaW50ICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBFVElfTUVOVSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tZW51LnByaXYuaCBiL25jdXJzZXMtNS43L21lbnUvbWVudS5wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkMzUzNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbWVudS5wcml2LmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NSwxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogbWVudS5wcml2LmgsdiAxLjIyIDIwMDUvMDEvMTYgMDE6MDI6MjMgdG9tIEV4cCAkICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTW9kdWxlIG1lbnUucHJpdi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogVG9wIGxldmVsIHByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIGFsbCBsaWJubWVudSBtb2R1bGVzICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBNRU5VX1BSSVZfSF9pbmNsCisjZGVmaW5lIE1FTlVfUFJJVl9IX2luY2wgMQorCisjaW5jbHVkZSAiY3Vyc2VzLnByaXYuaCIKKyNpbmNsdWRlICJtZl9jb21tb24uaCIKKyNpbmNsdWRlICJtZW51LmgiCisKKy8qIEJhY2tzcGFjZSBjb2RlICovCisjZGVmaW5lIEJTICg4KQorCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKElURU0pIF9uY19EZWZhdWx0X0l0ZW07CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE1FTlUpIF9uY19EZWZhdWx0X01lbnU7CisKKy8qIE5vcm1hbGl6ZSBpdGVtIHRvIGRlZmF1bHQgaWYgbm9uZSB3YXMgZ2l2ZW4gKi8KKyNkZWZpbmUgTm9ybWFsaXplX0l0ZW0oIGl0ZW0gKSAoKGl0ZW0pPShpdGVtKT8oaXRlbSk6Jl9uY19EZWZhdWx0X0l0ZW0pCisKKy8qIE5vcm1hbGl6ZSBtZW51IHRvIGRlZmF1bHQgaWYgbm9uZSB3YXMgZ2l2ZW4gKi8KKyNkZWZpbmUgTm9ybWFsaXplX01lbnUoIG1lbnUgKSAoKG1lbnUpPShtZW51KT8obWVudSk6Jl9uY19EZWZhdWx0X01lbnUpCisKKy8qIEdldCB0aGUgdXNlciBkZWZpbmVkIChmcmFtaW5nKSB3aW5kb3cgb2YgdGhlIG1lbnUgKi8KKyNkZWZpbmUgR2V0X01lbnVfVXNlcldpbihtZW51KSAoKG1lbnUpLT51c2Vyd2luID8gKG1lbnUpLT51c2Vyd2luIDogc3Rkc2NyKQorCisvKiBOb3JtYWxpemUgbWVudSB3aW5kb3cgKi8KKyNkZWZpbmUgR2V0X01lbnVfV2luZG93KCAgbWVudSApIFwKKyAgICgobWVudSktPnVzZXJzdWIgID8gKG1lbnUpLT51c2Vyc3ViICA6IEdldF9NZW51X1VzZXJXaW4obWVudSkpCisKKy8qIG1lbnUgc3BlY2lmaWMgc3RhdHVzIGZsYWdzICovCisjZGVmaW5lIF9MSU5LX05FRURFRCAgICAoMHgwNCkKKyNkZWZpbmUgX01BUktfQUxMT0NBVEVEICgweDA4KQorCisjZGVmaW5lIEFMTF9NRU5VX09QVFMgKCAgICAgICAgICAgICAgICAgXAorCQkgICAgICAgT19PTkVWQUxVRSAgICAgfCBcCisJCSAgICAgICBPX1NIT1dERVNDICAgICB8IFwKKwkJICAgICAgIE9fUk9XTUFKT1IgICAgIHwgXAorCQkgICAgICAgT19JR05PUkVDQVNFICAgfCBcCisJCSAgICAgICBPX1NIT1dNQVRDSCAgICB8IFwKKwkJICAgICAgIE9fTk9OQ1lDTElDICAgICkKKworI2RlZmluZSBBTExfSVRFTV9PUFRTIChPX1NFTEVDVEFCTEUpCisKKy8qIE1vdmUgdG8gdGhlIHdpbmRvdyBwb3NpdGlvbiBvZiBhbiBpdGVtIGFuZCBkcmF3IGl0ICovCisjZGVmaW5lIE1vdmVfQW5kX1Bvc3RfSXRlbShtZW51LGl0ZW0pIFwKKyAge3dtb3ZlKChtZW51KS0+d2luLChtZW51KS0+c3BjX3Jvd3MqKGl0ZW0pLT55LCgobWVudSktPml0ZW1sZW4rKG1lbnUpLT5zcGNfY29scykqKGl0ZW0pLT54KTtcCisgICBfbmNfUG9zdF9JdGVtKChtZW51KSwoaXRlbSkpO30KKworI2RlZmluZSBNb3ZlX1RvX0N1cnJlbnRfSXRlbShtZW51LGl0ZW0pIFwKKyAgaWYgKCAoaXRlbSkgIT0gKG1lbnUpLT5jdXJpdGVtKVwKKyAgICB7XAorICAgICAgTW92ZV9BbmRfUG9zdF9JdGVtKG1lbnUsaXRlbSk7XAorICAgICAgTW92ZV9BbmRfUG9zdF9JdGVtKG1lbnUsKG1lbnUpLT5jdXJpdGVtKTtcCisgICAgfQorCisvKiBUaGlzIG1hY3JvIGVuc3VyZXMsIHRoYXQgdGhlIGl0ZW0gYmVjb21lcyB2aXNpYmxlLCBpZiBwb3NzaWJsZSB3aXRoIHRoZQorICAgc3BlY2lmaWVkIHJvdyBhcyB0aGUgdG9wIHJvdyBvZiB0aGUgd2luZG93LiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwKKyAgIHRoZSB0b3Agcm93IHdpbGwgYmUgYWRqdXN0ZWQgYW5kIHRoZSB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHJvdyBhcmd1bWVudC4KKyovCisjZGVmaW5lIEFkanVzdF9DdXJyZW50X0l0ZW0obWVudSxyb3csaXRlbSkgXAorICB7IGlmICgoaXRlbSktPnkgPCByb3cpIFwKKyAgICAgIHJvdyA9IChpdGVtKS0+eTtcCisgICAgaWYgKCAoaXRlbSktPnkgPj0gKHJvdyArIChtZW51KS0+YXJvd3MpIClcCisgICAgICByb3cgPSAoIChpdGVtKS0+eSA8ICgobWVudSktPnJvd3MgLSByb3cpICkgPyBcCisgICAgICAgICAgICAoaXRlbSktPnkgOiAobWVudSktPnJvd3MgLSAobWVudSktPmFyb3dzO1wKKyAgICBfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0obWVudSxyb3csaXRlbSk7IH0KKworLyogUmVzZXQgdGhlIG1hdGNoIHBhdHRlcm4gYnVmZmVyICovCisjZGVmaW5lIFJlc2V0X1BhdHRlcm4obWVudSkgXAorICB7IChtZW51KS0+cGluZGV4ID0gMDsgXAorICAgIChtZW51KS0+cGF0dGVyblswXSA9ICdcMCc7IH0KKworI2RlZmluZSBVQ2hhcihjKQkoKHVuc2lnbmVkIGNoYXIpKGMpKQorCisvKiBJbnRlcm5hbCBmdW5jdGlvbnMuICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX0RyYXdfTWVudSAoY29uc3QgTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfU2hvd19NZW51IChjb25zdCBNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoIChNRU5VICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgIF9uY19DYWxjdWxhdGVfVGV4dF9XaWR0aChjb25zdCBURVhUICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19Qb3N0X0l0ZW0gKGNvbnN0IE1FTlUgKiwgY29uc3QgSVRFTSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfQ29ubmVjdF9JdGVtcyAoTUVOVSAqLCBJVEVNICoqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfRGlzY29ubmVjdF9JdGVtcyAoTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0gKE1FTlUgKixpbnQsIElURU0gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX0xpbmtfSXRlbXMgKE1FTlUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgX25jX01hdGNoX05leHRfQ2hhcmFjdGVyX0luX0l0ZW1fTmFtZSAoTUVOVSosaW50LElURU0qKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgX25jX21lbnVfY3Vyc29yX3BvcyAoY29uc3QgTUVOVSogbWVudSwgY29uc3QgSVRFTSogaXRlbSwKKwkJCQlpbnQqIHBZLCBpbnQqIHBYKTsKKworI2lmZGVmIFRSQUNFCisKKyNkZWZpbmUgcmV0dXJuSXRlbShjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxpdGVtKQorI2RlZmluZSByZXR1cm5JdGVtUHRyKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGl0ZW1fcHRyKQorI2RlZmluZSByZXR1cm5JdGVtT3B0cyhjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxpdGVtX29wdHMpCisjZGVmaW5lIHJldHVybk1lbnUoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsbWVudSkKKyNkZWZpbmUgcmV0dXJuTWVudUhvb2soY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsbWVudV9ob29rKQorI2RlZmluZSByZXR1cm5NZW51T3B0cyhjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxtZW51X29wdHMpCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChJVEVNICopCSAgICBfbmNfcmV0cmFjZV9pdGVtIChJVEVNICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKElURU0gKiopCSAgICBfbmNfcmV0cmFjZV9pdGVtX3B0ciAoSVRFTSAqKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoSXRlbV9PcHRpb25zKSBfbmNfcmV0cmFjZV9pdGVtX29wdHMgKEl0ZW1fT3B0aW9ucyk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoTUVOVSAqKQkgICAgX25jX3JldHJhY2VfbWVudSAoTUVOVSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChNZW51X0hvb2spICAgIF9uY19yZXRyYWNlX21lbnVfaG9vayAoTWVudV9Ib29rKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChNZW51X09wdGlvbnMpIF9uY19yZXRyYWNlX21lbnVfb3B0cyAoTWVudV9PcHRpb25zKTsKKworI2Vsc2UgLyogIVRSQUNFICovCisKKyNkZWZpbmUgcmV0dXJuSXRlbShjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5JdGVtUHRyKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkl0ZW1PcHRzKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybk1lbnUoY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuTWVudUhvb2soY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuTWVudU9wdHMoY29kZSkJcmV0dXJuIGNvZGUKKworI2VuZGlmIC8qIFRSQUNFLyFUUkFDRSAqLworCisjZW5kaWYgLyogTUVOVV9QUklWX0hfaW5jbCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWVudS9tZl9jb21tb24uaCBiL25jdXJzZXMtNS43L21lbnUvbWZfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxNjcyZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21lbnUvbWZfY29tbW9uLmgKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk1LDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogJElkOiBtZl9jb21tb24uaCx2IDAuMjIgMjAwNS8xMS8yNiAxNToyNjo1MiB0b20gRXhwICQgKi8KKworLyogQ29tbW9uIGludGVybmFsIGhlYWRlciBmb3IgbWVudSBhbmQgZm9ybSBsaWJyYXJ5ICovCisKKyNpZm5kZWYgTUZfQ09NTU9OX0hfaW5jbAorI2RlZmluZSBNRl9DT01NT05fSF9pbmNsIDEKKworI2luY2x1ZGUgPG5jdXJzZXNfY2ZnLmg+CisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBERUNMX0VSUk5PCitleHRlcm4gaW50IGVycm5vOworI2VuZGlmCisKKy8qIGluIGNhc2Ugb2YgZGVidWcgdmVyc2lvbiB3ZSBpZ25vcmUgdGhlIHN1cHByZXNzaW9uIG9mIGFzc2VydGlvbnMgKi8KKyNpZmRlZiBUUkFDRQorIyAgaWZkZWYgTkRFQlVHCisjICAgIHVuZGVmIE5ERUJVRworIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bmNfYWxsb2MuaD4KKworI2lmIFVTRV9SQ1NfSURTCisjZGVmaW5lIE1PRFVMRV9JRChpZCkgc3RhdGljIGNvbnN0IGNoYXIgSWRlbnRbXSA9IGlkOworI2Vsc2UKKyNkZWZpbmUgTU9EVUxFX0lEKGlkKSAvKm5vdGhpbmcqLworI2VuZGlmCisKKworLyogTWF4aW11bSByZWd1bGFyIDgtYml0IGNoYXJhY3RlciBjb2RlICovCisjZGVmaW5lIE1BWF9SRUdVTEFSX0NIQVJBQ1RFUiAoMHhmZikKKworI2RlZmluZSBTRVRfRVJST1IoY29kZSkgKGVycm5vPShjb2RlKSkKKyNkZWZpbmUgR0VUX0VSUk9SKCkgICAgIChlcnJubykKKworI2lmZGVmIFRSQUNFCisjZGVmaW5lIFJFVFVSTihjb2RlKSAgICByZXR1cm5Db2RlKCBTRVRfRVJST1IoY29kZSkgKQorI2Vsc2UKKyNkZWZpbmUgUkVUVVJOKGNvZGUpICAgIHJldHVybiggU0VUX0VSUk9SKGNvZGUpICkKKyNlbmRpZgorCisvKiBUaGUgZmV3IGNvbW1vbiB2YWx1ZXMgaW4gdGhlIHN0YXR1cyBmaWVsZHMgZm9yIG1lbnVzIGFuZCBmb3JtcyAqLworI2RlZmluZSBfUE9TVEVEICAgICAgICAgKDB4MDFVKSAgLyogbWVudSBvciBmb3JtIGlzIHBvc3RlZCAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIF9JTl9EUklWRVIgICAgICAoMHgwMlUpICAvKiBtZW51IG9yIGZvcm0gaXMgcHJvY2Vzc2luZyBob29rIHJvdXRpbmUgKi8KKworLyogQ2FsbCBvYmplY3QgaG9vayAqLworI2RlZmluZSBDYWxsX0hvb2soIG9iamVjdCwgaGFuZGxlciApIFwKKyAgIGlmICggKG9iamVjdCkgIT0gMCAmJiAoKG9iamVjdCktPmhhbmRsZXIpICE9ICh2b2lkICopIDAgKVwKKyAgIHtcCisJKG9iamVjdCktPnN0YXR1cyB8PSBfSU5fRFJJVkVSO1wKKwkob2JqZWN0KS0+aGFuZGxlcihvYmplY3QpO1wKKwkob2JqZWN0KS0+c3RhdHVzICY9IH5fSU5fRFJJVkVSO1wKKyAgIH0KKworI2VuZGlmIC8qIE1GX0NPTU1PTl9IX2luY2wgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21lbnUvbW9kdWxlcyBiL25jdXJzZXMtNS43L21lbnUvbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmM0Y2YwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWVudS9tb2R1bGVzCkBAIC0wLDAgKzEsNjMgQEAKKyMgJElkOiBtb2R1bGVzLHYgMS4xNyAyMDA2LzEyLzI0IDAwOjUyOjM5IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMTk5Ni1vbgorIworCitAIGJhc2UKKyMgTGlicmFyeSBvYmplY3RzCittX2F0dHJpYnMJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fY3Vyc29yCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2RyaXZlcglsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9mb3JtYXQJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fZ2xvYmFsCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2hvb2sJCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fY3VyCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fbmFtCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fbmV3CWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fb3B0CWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fdG9wCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fdXNlCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fdmFsCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1fdmlzCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX2l0ZW1zCQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9uZXcJCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX29wdHMJCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX3BhZAkJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fcGF0dGVybglsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9wb3N0CQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9yZXFfbmFtZQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9zY2FsZQkJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKK21fc3BhY2luZwlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV9zdWIJCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX3RyYWNlCQlsaWIJCSQoc3JjZGlyKQkkKE1FTlVfUFJJVl9IKQorbV91c2VycHRyCWxpYgkJJChzcmNkaXIpCSQoTUVOVV9QUklWX0gpCittX3dpbgkJbGliCQkkKHNyY2RpcikJJChNRU5VX1BSSVZfSCkKKworIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9taXNjL01ha2VmaWxlLmluIGIvbmN1cnNlcy01LjcvbWlzYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2IzOWIwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE1MiBAQAorIyAkSWQ6IE1ha2VmaWxlLmluLHYgMS40MyAyMDA3LzAzLzMxIDE1OjU0OjE3IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni1vbgorIworIyBNYWtlZmlsZSBmb3IgbmN1cnNlcyBtaXNjZWxsYW55IGRpcmVjdG9yeQorIworIyBUaGlzIG1ha2VzL2luc3RhbGxzIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZQorIworIyBUaGUgdmFyaWFibGUgJ3NyY2RpcicgcmVmZXJzIHRvIHRoZSBzb3VyY2UtZGlzdHJpYnV0aW9uLCBhbmQgY2FuIGJlIHNldCB3aXRoCisjIHRoZSBjb25maWd1cmUgc2NyaXB0IGJ5ICItLXNyY2Rpcj1ESVIiLgorIworIyBUaGUgcnVsZXMgYXJlIG9yZ2FuaXplZCB0byBwcm9kdWNlIHRoZSBsaWJyYXJpZXMgZm9yIHRoZSBjb25maWd1cmVkIG1vZGVscywKKyMgYW5kIHRoZSBwcm9ncmFtcyB3aXRoIHRoZSBjb25maWd1cmVkIGRlZmF1bHQgbW9kZWwuCisKKyMgdHVybiBvZmYgX2FsbF8gc3VmZml4IHJ1bGVzOyB3ZSdsbCBnZW5lcmF0ZSBvdXIgb3duCisuU1VGRklYRVMgOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK0NGX01GTEFHUyAJPSBAY2ZfY3ZfbWFrZWZsYWdzQAorQFNFVF9NQUtFQAorCitERVNURElSCQk9IEBERVNURElSQAordG9wX3NyY2Rpcgk9IEB0b3Bfc3JjZGlyQAorc3JjZGlyCQk9IEBzcmNkaXJACitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAorYmluZGlyCQk9IEBiaW5kaXJACitsaWJkaXIJCT0gQGxpYmRpckAKK2RhdGFkaXIJCT0gQGRhdGFkaXJACisKK0NDCQk9IEBDQ0AKK0hPU1RDQwkJPSBAQlVJTERfQ0NACisKK3RhYnNldGRpcgk9ICQoZGF0YWRpcikvdGFic2V0Cit0aWNkaXIJCT0gQFRFUk1JTkZPQAordGljZmlsZQkJPSAkKHRpY2RpcikuZGIKK3NvdXJjZQkJPSBAVEVSTUlORk9fU1JDQAorCitJTlNUQUxMCQk9IEBJTlNUQUxMQAorSU5TVEFMTF9QUk9HCT0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithbGwgOgl0ZXJtaW5mby50bXAKKworZGVwZW5kIDoKKworc291cmNlcyA6CisKK2luc3RhbGwgOiBpbnN0YWxsLmRhdGEgaW5zdGFsbC5saWJzCisKK2luc3RhbGwuZGF0YSA6CXRlcm1pbmZvLnRtcCBcCisJCSQoREVTVERJUikkKGxpYmRpcikgXAorCQkkKERFU1RESVIpJChkYXRhZGlyKSBcCisJCSQoREVTVERJUikkKHRhYnNldGRpcikKKwlERVNURElSPSR7REVTVERJUn0gXAorCXByZWZpeD0ke3ByZWZpeH0gXAorCWV4ZWNfcHJlZml4PSR7ZXhlY19wcmVmaXh9IFwKKwliaW5kaXI9JHtiaW5kaXJ9IFwKKwl0b3Bfc3JjZGlyPSR7dG9wX3NyY2Rpcn0gXAorCXNyY2Rpcj0ke3NyY2Rpcn0gXAorCWRhdGFkaXI9JHtkYXRhZGlyfSBcCisJdGljZGlyPSR7dGljZGlyfSBcCisJc291cmNlPXRlcm1pbmZvLnRtcCBcCisJVEhJU19DQz0iJChDQykiIFwKKwlUSEFUX0NDPSIkKEhPU1RDQykiIFwKKwkkKFNIRUxMKSAuL3J1bl90aWMuc2gKKwlAY2QgJChzcmNkaXIpL3RhYnNldCAmJiBcCisJCSQoU0hFTEwpIC1jICdmb3IgaSBpbiAqIDsgZG8gXAorCQkJaWYgdGVzdCAtZiAkJGkgOyB0aGVuIFwKKwkJCWVjaG8gaW5zdGFsbGluZyAkJGk7IFwKKwkJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQodGFic2V0ZGlyKS8kJGk7IFwKKwkJCWZpOyBkb25lJworCitOQ1VSU0VTX0NPTkZJRwk9IG5jdXJzZXNAREZUX0FSR19TVUZGSVhAQGNmX2N2X2FiaV92ZXJzaW9uQC1jb25maWcKKworaW5zdGFsbC5saWJzIDogJChERVNURElSKSQoYmluZGlyKSBuY3Vyc2VzLWNvbmZpZworCSQoSU5TVEFMTF9QUk9HKSBuY3Vyc2VzLWNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpLyQoTkNVUlNFU19DT05GSUcpCisKK3Rlcm1pbmZvLnRtcCA6IHJ1bl90aWMuc2VkICQoc291cmNlKQorCWVjaG8gJyoqIGFkanVzdGluZyB0YWJzZXQgcGF0aHMnCisJc2VkIC1mIHJ1bl90aWMuc2VkICQoc291cmNlKSA+dGVybWluZm8udG1wCisKK3J1bl90aWMuc2VkIDoKKwlXSElDSF9YVEVSTT1AV0hJQ0hfWFRFUk1AIFwKKwl0aWNkaXI9JHt0aWNkaXJ9IFwKKwkkKFNIRUxMKSAkKHNyY2RpcikvZ2VuX2VkaXQuc2ggPiRACisKKyQoREVTVERJUikkKGJpbmRpcikgXAorJChERVNURElSKSQobGliZGlyKSBcCiskKERFU1RESVIpJChkYXRhZGlyKSBcCiskKERFU1RESVIpJCh0YWJzZXRkaXIpIDoKKwkkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21rZGlycy5zaCAkQAorCit1bmluc3RhbGwgOiB1bmluc3RhbGwuZGF0YSB1bmluc3RhbGwubGlicworCit1bmluc3RhbGwuZGF0YSA6CisJLXRlc3QgLWQgJChERVNURElSKSQodGFic2V0ZGlyKSAmJiBybSAtcmYgJChERVNURElSKSQodGFic2V0ZGlyKQorCS10ZXN0IC1kICQoREVTVERJUikkKHRpY2RpcikgJiYgcm0gLXJmICQoREVTVERJUikkKHRpY2RpcikKKwktdGVzdCAtZiAkKERFU1RESVIpJCh0aWNmaWxlKSAmJiBybSAtZiAkKERFU1RESVIpJCh0aWNmaWxlKQorCit1bmluc3RhbGwubGlicyA6CisJLXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChOQ1VSU0VTX0NPTkZJRykKKwordGFncyA6CisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUyA6CisKK21vc3RseWNsZWFuIDoKKwktcm0gLWYgdGVybWluZm8udG1wCisJLXJtIC1mIHJ1bl90aWMuc2VkCisJLXJtIC1mIGNvcmUgdGFncyBUQUdTICp+ICouYmFrICoubG4gKi5hdGFjIHRyYWNlCisKK2NsZWFuIDo6IG1vc3RseWNsZWFuCisKK2Rpc3RjbGVhbiA6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlIHJ1bl90aWMuc2ggbmN1cnNlcy1jb25maWcKKworcmVhbGNsZWFuIDogZGlzdGNsZWFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21pc2MvY2hrZGVmLmNtZCBiL25jdXJzZXMtNS43L21pc2MvY2hrZGVmLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTkxZGNlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9jaGtkZWYuY21kCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKg0KKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqDQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoNCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKg0KKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqDQorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoNCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoNCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoNCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKg0KKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqDQorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoNCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKg0KKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqDQorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqDQorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoNCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKg0KKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoNCisgKiAkSWQ6IGNoa2RlZi5jbWQsdiAxLjMgMjAwNi8wNC8yMiAyMzoxNDo1MCB0b20gRXhwICQNCisgKg0KKyAqIEF1dGhvcjogIEp1YW4gSm9zZSBHYXJjaWEgUmlwb2xsIDx3b3JtQGFycmFraXMuZXM+Lg0KKyAqIFdlYnBhZ2U6IGh0dHA6Ly93d3cuYXJyYWtpcy5lcy9+d29ybS8NCisgKg0KKyAqIGNoa2RlZi5jbWQgLSBjaGVja3MgdGhhdCBhIC5kZWYgZmlsZSBoYXMgbm8gY29uZmxpY3RzIGFuZCBpcyBwcm9wZXJseQ0KKyAqCQlmb3JtYXR0ZWQuDQorICoNCisgKiByZXR1cm5zIG5vbnplcm8gaWYgdHdvIHN5bWJvbHMgaGF2ZSB0aGUgc2FtZSBjb2RlIG9yIGEgbGluZSBoYXMgYSB3cm9uZw0KKyAqIGZvcm1hdC4NCisgKg0KKyAqIHJldHVybnMgMCBvdGhlcndpc2UNCisgKg0KKyAqIHRoZSBzdGFuZGFyZCBvdXRwdXQgc2hvd3MgY29uZmxpY3RzLg0KKyAqLw0KK3BhcnNlIGFyZyBkZWZfZmlsZQ0KKw0KK2RlZl9maWxlID0gdHJhbnNsYXRlKGRlZl9maWxlLCdcJywnLycpDQorDQorY2FsbCBDbGVhblF1ZXVlDQorDQorLyoNCisgKiBgY21wJyBpcyB6ZXJvIHdoZW4gdGhlIGZpbGUgaXMgdmFsaWQNCisgKiBgY29kZXMnIGFzc29jaWF0ZXMgYSBuYW1lIHRvIGEgY29kZQ0KKyAqIGBuYW1lcycgYXNzb2NpYXRlcyBhIGNvZGUgdG8gYSBuYW1lDQorICovDQorY21wICAgID0gMA0KK2NvZGVzLiA9IDANCituYW1lcy4gPSAnJw0KKw0KKy8qDQorICogVGhpcyBzZWQgZXhwcmVzc2lvbiBjbGVhbnMgZW1wdHkgbGluZXMsIGNvbW1lbnRzIGFuZCBzcGVjaWFsIC5ERUYNCisgKiBjb21tYW5kcywgc3VjaCBhcyBMSUJSQVJZLi4uLCBFWFBPUlRTLi4uLCBldGMNCisgKi8NCit0aWR5X3VwICA9ICcicy9bIAldWyAJXSovIC9nO3MvOy4qLy9nOy9eWyBdKiQvZDsvXlthLXpBLVpdL2Q7IicNCisNCisvKg0KKyAqIEZpcnN0IHdlIGZpbmQgYWxsIHB1YmxpYyBzeW1ib2xzIGZyb20gdGhlIG9yaWdpbmFsIERMTC4gQWxsIHRoaXMNCisgKiBpbmZvcm1hdGlvbiBpcyBwdXNoZWQgaW50byBhIFJFWFggcHJpdmF0ZSBsaXN0IHdpdGggdGhlIFJYUVVFVUUNCisgKiB1dGlsaXR5IHByb2dyYW0uDQorICovDQorJ0BlY2hvIG9mZicNCisndHlwZScgZGVmX2ZpbGUgJ3wgc2VkJyB0aWR5X3VwICd8IHNvcnQgfCByeHF1ZXVlJw0KKw0KK2RvIHdoaWxlIHF1ZXVlZCgpID4gMA0KKyAgIC8qDQorICAgICogV2UgcmV0cmlldmUgdGhlIHN5bWJvbCBuYW1lIChORVdfTkFNRSkgYW5kIGl0cyBjb2RlIChORVdfQ09ERSkNCisgICAgKi8NCisgICBwYXJzZSBwdWxsICciJyBuZXdfbmFtZSAnIicgJ0AnbmV3X2NvZGUgcmVzdA0KKyAgIHNlbGVjdA0KKyAgICAgIHdoZW4gKG5ld19jb2RlID0gJycpIHwgKG5ld19uYW1lID0gJycpIHRoZW4NCisgICAgICAgICAvKiBUaGUgaW5wdXQgd2FzIG5vdCBwcm9wZXJseSBmb3JtYXR0ZWQgKi8NCisgICAgICAgICBkbw0KKyAgICAgICAgIHNheSAnRXJyb3I6IHN5bWJvbCAiJ25ld19uYW1lJyIgaGFzIG5vIGV4cG9ydCBjb2RlIG9yIGlzIGVtcHR5Jw0KKyAgICAgICAgIGNtcCA9IDENCisgICAgICAgICBlbmQNCisgICAgICB3aGVuIGNvZGVzLm5ld19uYW1lIFw9IDAgdGhlbg0KKyAgICAgICAgIC8qIFRoaXMgc3ltYm9sIHdhcyBhbHJlYWR5IGRlZmluZWQgKi8NCisgICAgICAgICBpZiBjb2Rlcy5uZXdfbmFtZSBcPSBuZXdfY29kZSB0aGVuDQorICAgICAgICAgICAgZG8NCisJICAgIGNtcCA9IDINCisgCSAgICBzYXkgJ1N5bWJvbCAiJ25ld19uYW1lJyIgbXVsdGlwbHkgZGVmaW5lZCcNCisJICAgIGVuZA0KKyAgICAgIHdoZW4gbmFtZXMubmV3X2NvZGUgXD0gJycgdGhlbg0KKyAgICAgICAgIC8qIFRoaXMgY29kZSB3YXMgYWxyZWFkeSBhc3NpZ25lZCB0byBhIHN5bWJvbCAqLw0KKyAgICAgICAgIGlmIG5hbWVzLm5ld19jb2RlIFw9IG5ld19uYW1lIHRoZW4NCisgICAgICAgICAgICBkbw0KKyAgICAgICAgICAgIGNtcCA9IDMNCisJICAgIHNheSAnQ29uZmxpY3Qgd2l0aCAiJ25hbWVzLm5ld19jb2RlJyIgJiAiJ25ld19uYW1lJyIgYmVpbmcgQCduZXdfY29kZQ0KKyAgICAgICAgICAgIGVuZA0KKyAgICAgIG90aGVyd2lzZQ0KKyAgICAgICAgIGRvDQorICAgICAgICAgY29kZXMubmV3X25hbWUgPSBuZXdfY29kZQ0KKyAgICAgICAgIG5hbWVzLm5ld19jb2RlID0gbmV3X25hbWUNCisgICAgICAgICBlbmQNCisgICBlbmQgIC8qIHNlbGVjdCAqLw0KK2VuZA0KKw0KK2V4aXQgY21wDQorDQorQ2xlYW5RdWV1ZTogcHJvY2VkdXJlDQorCWRvIHdoaWxlIHF1ZXVlZCgpID4gMA0KKwkgICBwYXJzZSBwdWxsIGZvbw0KKwllbmQNCityZXR1cm4NCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9taXNjL2NsZWFudGljLmNtZCBiL25jdXJzZXMtNS43L21pc2MvY2xlYW50aWMuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTlkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9taXNjL2NsZWFudGljLmNtZApAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKg0KKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqDQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoNCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKg0KKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqDQorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoNCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoNCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoNCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKg0KKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqDQorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoNCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKg0KKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqDQorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqDQorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoNCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKg0KKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoNCisgKiAkSWQ6IGNsZWFudGljLmNtZCx2IDEuNCAyMDA2LzA0LzIyIDIzOjE0OjUwIHRvbSBFeHAgJA0KKyAqDQorICogQXV0aG9yOiAgSnVhbiBKb3NlIEdhcmNpYSBSaXBvbGwgPHdvcm1AYXJyYWtpcy5lcz4uDQorICogV2VicGFnZTogaHR0cDovL3d3dy5hcnJha2lzLmVzL353b3JtLw0KKyAqLw0KK3BhcnNlIGFyZyBkaXINCisNCitwYXVzZQ0KK2RpciA9IHRyYW5zbGF0ZShkaXIsJ1wnLCcvJyk7DQorbGV0dGVycyA9ICcwIDEgMiAzIDQgNSA2IDcgOCA5IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeicNCisNCitpZiBkaXIgPSAnJyB0aGVuDQorICAgIGRpciA9ICcuJw0KKydlY2hvIENsZWFuaW5nICdkaXINCisnZm9yICUlMSBpbiAoJ2xldHRlcnMnKSBkbyBAaWYgbm90IGV4aXN0ICdkaXInXCUlMVwqIChlY2hvIENsZWFuaW5nIC4uLlwlJTEgJiByZCAlJTEgMj5OVUwpJw0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21pc2MvY21wZGVmLmNtZCBiL25jdXJzZXMtNS43L21pc2MvY21wZGVmLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmI4ZjZjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9jbXBkZWYuY21kCkBAIC0wLDAgKzEsMTM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKg0KKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqDQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoNCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKg0KKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqDQorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoNCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoNCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoNCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKg0KKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqDQorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoNCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKg0KKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqDQorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqDQorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoNCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKg0KKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoNCisgKiAkSWQ6IGNtcGRlZi5jbWQsdiAxLjMgMjAwNi8wNC8yMiAyMzoxNDo1MCB0b20gRXhwICQNCisgKg0KKyAqIEF1dGhvcjogIEp1YW4gSm9zZSBHYXJjaWEgUmlwb2xsIDx3b3JtQGFycmFraXMuZXM+Lg0KKyAqIFdlYnBhZ2U6IGh0dHA6Ly93d3cuYXJyYWtpcy5lcy9+d29ybS8NCisgKg0KKyAqIGNtcGRlZi5jbWQgLSBjb21wYXJlcyB0d28gLmRlZiBmaWxlcywgY2hlY2tpbmcgd2hldGhlciB0aGV5IGhhdmUNCisgKgkJdGhlIHNhbWUgZW50cmllcyB3aXRoIHRoZSBzYW1lIGV4cG9ydCBjb2Rlcy4NCisgKg0KKyAqIHJldHVybnMgMCBpZiB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIGJldHdlZW4gdGhlIGZpbGVzIC0tIHRoYXQgaXMsDQorICogdGhlIG5ld2VyIG9uZSBjYW4gcmVwbGFjZSB0aGUgb2xkZXIgb25lLg0KKyAqDQorICogcmV0dXJucyAxIHdoZW4gZWl0aGVyIG9mIHRoZSBmaWxlcyBpcyBub3QgcHJvcGVybHkgZm9ybWF0dGVkIGFuZA0KKyAqIHdoZW4gdGhlcmUgYXJlIGNvbmZsaWN0czogdHdvIHN5bWJvbHMgaGF2aW5nIHRoZSBzYW1lIGV4cG9ydCBjb2RlLg0KKyAqDQorICogdGhlIHN0YW5kYXJkIG91dHB1dCBzaG93cyBhIGxpc3Qgd2l0aCBuZXdseSBhZGRlZCBzeW1ib2xzLCBwbHVzDQorICogcmVwbGFjZWQgc3ltYm9scyBhbmQgY29uZmxpY3RzLg0KKyAqLw0KK3BhcnNlIGFyZyBkZWZfZmlsZTEgZGVmX2ZpbGUyDQorDQorZGVmX2ZpbGUxID0gdHJhbnNsYXRlKGRlZl9maWxlMSwnXCcsJy8nKQ0KK2RlZl9maWxlMiA9IHRyYW5zbGF0ZShkZWZfZmlsZTIsJ1wnLCcvJykNCisNCitjYWxsIENsZWFuUXVldWUNCisNCisvKg0KKyAqIGBjbXAnIGlzIHplcm8gd2hlbiB0aGUgbGFzdCBmaWxlIGlzIHZhbGlkIGFuZCB1cHdhcmQgY29tcGF0aWJsZQ0KKyAqIGBudW1iZXJzJyBpcyB0aGUgc3RlbSB3aGVyZSBzeW1ib2xzIGFyZSBzdG9yZWQNCisgKi8NCitjbXAgICAgICA9IDANCituYW1lcy4gICA9ICcnDQorbnVtYmVycy4gPSAwDQorDQorLyoNCisgKiBUaGlzIHNlZCBleHByZXNzaW9uIGNsZWFucyBlbXB0eSBsaW5lcywgY29tbWVudHMgYW5kIHNwZWNpYWwgLkRFRg0KKyAqIGNvbW1hbmRzLCBzdWNoIGFzIExJQlJBUlkuLi4sIEVYUE9SVFMuLi4sIGV0Yw0KKyAqLw0KK3RpZHlfdXAgID0gJyJzL1sgCV1bIAldKi8gL2c7cy87LiovL2c7L15bIF0qJC9kOy9eW2EtekEtWl0vZDsiJw0KKw0KKy8qDQorICogRmlyc3Qgd2UgZmluZCBhbGwgcHVibGljIHN5bWJvbHMgZnJvbSB0aGUgb3JpZ2luYWwgRExMLiBBbGwgdGhpcw0KKyAqIGluZm9ybWF0aW9uIGlzIHB1c2hlZCBpbnRvIGEgUkVYWCBwcml2YXRlIGxpc3Qgd2l0aCB0aGUgUlhRVUVVRQ0KKyAqIHV0aWxpdHkgcHJvZ3JhbS4NCisgKi8NCisnQGVjaG8gb2ZmJw0KKyd0eXBlJyBkZWZfZmlsZTEgJ3wgc2VkJyB0aWR5X3VwICd8IHNvcnQgfCByeHF1ZXVlJw0KKw0KK2RvIHdoaWxlIHF1ZXVlZCgpID4gMA0KKyAgIC8qDQorICAgICogV2UgcmV0cmlldmUgdGhlIHN5bWJvbCBuYW1lIChOQU1FKSBhbmQgaXRzIG51bWJlciAoTlVNQkVSKQ0KKyAgICAqLw0KKyAgIHBhcnNlIHB1bGwgJyInIG5hbWUgJyInICdAJ251bWJlciByZXN0DQorICAgaWYgbnVtYmVyID0gJycgfHwgbmFtZSA9ICcnIHRoZW4NCisgICAgICBkbw0KKyAgICAgIHNheSAnQ29ycnVwdGVkIGZpbGUnIGRlZl9maWxlMQ0KKyAgICAgIHNheSAnU3ltYm9sJyBuYW1lICdoYXMgbm8gbnVtYmVyJw0KKyAgICAgIGV4aXQgMQ0KKyAgICAgIGVuZA0KKyAgIGVsc2UNCisgICAgICBkbw0KKyAgICAgIG51bWJlcnMubmFtZSA9IG51bWJlcg0KKyAgICAgIG5hbWVzLm51bWJlciA9IG5hbWUNCisgICAgICBlbmQNCitlbmQNCisNCisvKg0KKyAqIE5vdyB3ZSBmaW5kIGFsbCBwdWJsaWMgc3ltYm9scyBmcm9tIHRoZSBuZXcgRExMLCBhbmQgY29tcGFyZS4NCisgKi8NCisndHlwZScgZGVmX2ZpbGUyICd8IHNlZCcgdGlkeV91cCAnfCBzb3J0IHwgcnhxdWV1ZScNCisNCitkbyB3aGlsZSBxdWV1ZWQoKSA+IDANCisgICBwYXJzZSBwdWxsICciJyBuYW1lICciJyAnQCdudW1iZXIgcmVzdA0KKyAgIGlmIG5hbWUgPSAnJyB8IG51bWJlciA9ICcnIHRoZW4NCisgICAgICBkbw0KKyAgICAgIHNheSAnQ29ycnVwdGVkIGZpbGUnIGRlZl9maWxlMg0KKyAgICAgIHNheSAnU3ltYm9sJyBuYW1lICdoYXMgbm8gbnVtYmVyJw0KKyAgICAgIGV4aXQgMQ0KKyAgICAgIGVuZA0KKyAgIGlmIG51bWJlcnMubmFtZSA9IDAgdGhlbg0KKyAgICAgIGRvDQorICAgICAgY21wID0gMQ0KKyAgICAgIGlmIG5hbWVzLm51bWJlciA9ICcnIHRoZW4NCisgICAgICAgICBzYXkgJ05ldyBzeW1ib2wnIG5hbWUgJ3dpdGggY29kZSBAJ251bWJlcg0KKyAgICAgIGVsc2UNCisgICAgICAgICBzYXkgJ0NvbmZsaWN0IG9sZCA9JyBuYW1lcy5udW1iZXIgJywgbmV3ID0nIG5hbWUgJ2F0IEAnbnVtYmVyDQorICAgICAgZW5kDQorICAgZWxzZSBpZiBudW1iZXJzLm5hbWUgXD0gbnVtYmVyIHRoZW4NCisgICAgICBkbw0KKyAgICAgIGNtcCA9IDENCisgICAgICBzYXkgbmFtZSAnU3ltYm9sJyBuYW1lICdjaGFuZ2VkIGZyb20gQCdudW1iZXJzLm5hbWUgJ3RvIEAnbnVtYmVyDQorICAgICAgZW5kDQorZW5kIC8qIGRvICovDQorDQorZXhpdCBjbXANCisNCisvKg0KKyAqIENsZWFucyB0aGUgUkVYWCBxdWV1ZSBieSBwdWxsaW5nIGFuZCBmb3JnZXR0aW5nIGV2ZXJ5IGxpbmUuDQorICogVGhpcyBpcyBuZWVkZWQsIGF0IGxlYXN0LCB3aGVuIGBjbXBkZWYuY21kJyBzdGFydHMsIGJlY2F1c2UgYW4gYWJvcnRlZA0KKyAqIFJFWFggcHJvZ3JhbSBtaWdodCBoYXZlIGxlZnQgc29tZSBydWJiaXNoIGluLg0KKyAqLw0KK0NsZWFuUXVldWU6IHByb2NlZHVyZQ0KKyAgIGRvIHdoaWxlIHF1ZXVlZCgpID4gMA0KKyAgICAgIHBhcnNlIHB1bGwgZm9vDQorICAgZW5kDQorcmV0dXJuDQorDQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9jc29ydCBiL25jdXJzZXMtNS43L21pc2MvY3NvcnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDJmYWFmMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvY3NvcnQKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisjICRJZDogY3NvcnQsdiAxLjIgMjAwMi8xMC8xOSAyMTo0MjowOSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgb3ZlcnJpZGUgYW55dGhpbmcgdGhhdCBtaWdodCBjYXVzZSAnc29ydCcgdG8gZG8gdGhlIHdyb25nIHRoaW5nLi4uCitMQU5HPUM7CQlleHBvcnQgTEFORworTEFOR1VBR0U9QzsJZXhwb3J0IExBTkdVQUdFCitMQ19BTEw9QzsJZXhwb3J0IExDX0FMTAorTENfQ1RZUEU9QzsJZXhwb3J0IExDX0NUWVBFCitzb3J0ICQqCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9taXNjL2VteC5zcmMgYi9uY3Vyc2VzLTUuNy9taXNjL2VteC5zcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMDA2NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvZW14LnNyYwpAQCAtMCwwICsxLDg4NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IGVteC5zcmMsdiAxLjkgMjAwNi8wNC8yMiAyMTo0NjoxNyB0b20gRXhwICQKKyMgVGhpcyBpcyBhIHJlZm9ybWF0dGVkIGNvcHkgb2YgdGhlIHRlcm1pbmZvIHNvdXJjZSBmb3IgT1MvMiBFTVggZnJvbQorIyBKdWFuIEpvc2UgR2FyY2lhIFJpcG9sbCA8d29ybUBhcnJha2lzLmVzPi4KKyMgaHR0cDovL3d3dy5hcnJha2lzLmVzL353b3JtLworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0ZXJtaW5hbCBjbGFzc2VzIGFuZCBtYWtlciBicmFuZHMgdGhhdCBhcmUgc3RpbGwKKyMgcXVpdGUgY29tbW9uLgorIworCisjIyMjIFNwZWNpYWxzCisjCisjIFNwZWNpYWwgInRlcm1pbmFscyIuICBUaGVzZSBhcmUgdXNlZCB0byBsYWJlbCB0dHkgbGluZXMgd2hlbiB5b3UgZG9uJ3QKKyMga25vdyB3aGF0IGtpbmQgb2YgdGVybWluYWwgaXMgb24gaXQuICBUaGUgY2hhcmFjdGVyaXN0aWNzIG9mIGFuIHVua25vd24KKyMgdGVybWluYWwgYXJlIHRoZSBsb3dlc3QgY29tbW9uIGRlbm9taW5hdG9yIC0gdGhleSBsb29rIGFib3V0IGxpa2UgYSB0aSA3MDAuCisjCisKK2R1bWJ8ODAtY29sdW1uIGR1bWIgdHR5LAorCWFtLAorCWNvbHMjODAsCisJYmVsPV5HLAorCWNyPV5NLAorCWN1ZDE9XkosCisJaW5kPV5KLAordW5rbm93bnx1bmtub3duIHRlcm1pbmFsIHR5cGUsCisJZ24sCisJdXNlPWR1bWIsCitscHJ8cHJpbnRlcnxsaW5lIHByaW50ZXIsCisJaGMsCisJb3MsCisJY29scyMxMzIsCisJbGluZXMjNjYsCisJYmVsPV5HLAorCWNyPV5NLAorCWN1YjE9XkgsCisJY3VkMT1eSiwKKwlmZj1eTCwKKwlpbmQ9XkosCitnbGFzc3R0eXxjbGFzc2ljIGdsYXNzIHR0eSBpbnRlcnByZXRpbmcgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzLAorCWFtLAorCWNvbHMjODAsCisJYmVsPV5HLAorCWNsZWFyPV5MLAorCWNyPV5NLAorCWN1YjE9XkgsCisJY3VkMT1eSiwKKwlodD1eSSwKKwlrYnM9XkgsCisJa2N1YjE9XkgsCisJa2N1ZDE9XkosCisJbmVsPV5NXkosCisKKyMjIyMgQU5TSS5TWVMvSVNPIDY0MjkvRUNNQS00OCBDYXBhYmlsaXRpZXMKKyMKKyMgU2VlIHRoZSBlbmQtb2YtZmlsZSBjb21tZW50IGZvciBtb3JlIG9uIHRoZXNlLgorIworCisjIFRoZSBJQk0gUEMgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQuICBQbHVnIHRoaXMgaW50byBhbnkgSW50ZWwgY29uc29sZSBlbnRyeS4KKyMgV2UgdXNlIFxFWzExbSBmb3Igcm1hY3MgcmF0aGVyIHRoYW4gXEVbMTJtIHNvIHRoZSA8YWNzYz4gc3RyaW5nIGNhbiB1c2UgdGhlCisjIFJPTSBncmFwaGljcyBmb3IgY29udHJvbCBjaGFyYWN0ZXJzIHN1Y2ggYXMgdGhlIGRpYW1vbmQsIHVwLSBhbmQgZG93bi1hcnJvdy4KKyMgVGhpcyB3b3JrcyB3aXRoIHRoZSBTeXN0ZW0gViwgTGludXgsIGFuZCBCU0RJIGNvbnNvbGVzLiAgSXQncyBhIHNhZmUgYmV0IHRoaXMKKyMgd2lsbCB3b3JrIHdpdGggYW55IEludGVsIGNvbnNvbGUsIHRoZXkgYWxsIHNlZW0gdG8gaGF2ZSBpbmhlcml0ZWQgXEVbMTFtCisjIGZyb20gdGhlIEFOU0kuU1lTIGRlLWZhY3RvIHN0YW5kYXJkLgora2xvbmUrYWNzfGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGZvciBhbnNpLnN5cyBkaXNwbGF5cywKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b35wXDMwNHFcMzA0clwzMDRzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0flwzNzYsCisJcm1hY3M9XEVbMTBtLAorCXNtYWNzPVxFWzExbSwKKworIyBIaWdobGlnaHQgY29udHJvbHMgY29ycmVzcG9uZGluZyB0byB0aGUgQU5TSS5TWVMgc3RhbmRhcmQuICBNb3N0CisjIGNvbnNvbGUgZHJpdmVycyBmb3IgSW50ZWwgYm94ZXMgb2JleSB0aGVzZS4gIE1ha2VzIHRoZSBzYW1lIGFzc3VtcHRpb24KKyMgYWJvdXQgXEVbMTFtIGFzIGtsb25lK2Fjcy4gIFRydWUgQU5TSS9FQ01BLTQ4IHdvdWxkIGhhdmUgPHJtc289XEVbMjdtPiwKKyMgPHJtdWw9XEVbMjRtPiwgYnV0IHRoaXMgaXNuJ3QgYSBkb2N1bWVudGVkIGZlYXR1cmUgb2YgQU5TSS5TWVMuCitrbG9uZStzZ3J8YXR0cmlidXRlIGNvbnRyb2wgZm9yIGFuc2kuc3lzIGRpc3BsYXlzLAorCWJsaW5rPVxFWzVtLAorCWJvbGQ9XEVbMW0sCisJaW52aXM9XEVbOG0sCisJcmV2PVxFWzdtLAorCXJtYWNzPVxFWzEwbSwKKwlybXBjaD1cRVsxMG0sCisJcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTElO20sCisJc2dyMD1cRVswOzEwbSwKKwlzbWFjcz1cRVsxMW0sCisJc21wY2g9XEVbMTFtLAorCXNtc289XEVbN20sCisJc211bD1cRVs0bSwKKwl1c2U9a2xvbmUrYWNzLAorCisjIEhpZ2hsaWdodCBjb250cm9scyBjb3JyZXNwb25kaW5nIHRvIHRoZSBBTlNJLlNZUyBzdGFuZGFyZC4gICpBbGwqCisjIGNvbnNvbGUgZHJpdmVycyBmb3IgSW50ZWwgYm94ZXMgb2JleSB0aGVzZS4gIERvZXMgbm90IGFzc3VtZSBcRVsxMW0gd2lsbAorIyB3b3JrOyB1c2VzIFxFWzEybSBpbnN0ZWFkLCB3aGljaCBpcyBwcmV0dHkgYnVsbGV0cHJvb2YgYnV0IGxvc2VzIHlvdSB0aGUgQUNTCisjIGRpYW1vbmQgYW5kIGFycm93IGNoYXJhY3RlcnMgdW5kZXIgY3Vyc2VzLgora2xvbmUrc2dyLWR1bWJ8YXR0cmlidXRlIGNvbnRyb2wgZm9yIGFuc2kuc3lzIGRpc3BsYXlzIChubyBFU0MgWyAxMSBtKSwKKwlibGluaz1cRVs1bSwKKwlib2xkPVxFWzFtLAorCWludmlzPVxFWzhtLAorCXJldj1cRVs3bSwKKwlybWFjcz1cRVsxMG0sCisJcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTIlO20sCisJc2dyMD1cRVswOzEwbSwKKwlzbWFjcz1cRVsxMm0sCisJc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorCXVzZT1rbG9uZSthY3MsCisKKyMgQU5TSS5TWVMgY29sb3IgY29udHJvbC4KKyMgVGhlIERPUyA1IG1hbnVhbCBhc3NlcnRzIHRoYXQgdGhlc2Ugc2VxdWVuY2VzIG1lZXQgdGhlIElTTyA2NDI5IHN0YW5kYXJkLgora2xvbmUrY29sb3J8Y29sb3IgY29udHJvbCBmb3IgYW5zaS5zeXMgYW5kIElTTzY0MjktY29tcGF0aWJsZSBkaXNwbGF5cywKKwljb2xvcnMjOCwKKwluY3YjMywKKwlwYWlycyM2NCwKKwlvcD1cRVszNzs0MG0sCisJc2V0YWI9XEVbNCVwMSVkbSwKKwlzZXRhZj1cRVszJXAxJWRtLAorCisjIFRoaXMgaXMgYmV0dGVyIHRoYW4ga2xvbmUrY29sb3IsIGl0IGRvZXNuJ3QgYXNzdW1lIHdoaXRlLW9uLWJsYWNrIGFzIHRoZQorIyBkZWZhdWx0IGNvbG9yIHBhaXIsICBidXQgbWFueSBgQU5TSScgdGVybWluYWxzIGRvbid0IGdyb2sgdGhlIDxvcD4gY2FwLgorZWNtYStjb2xvcnxjb2xvciBjb250cm9sIGZvciBFQ01BLTQ4LWNvbXBhdGlibGUgdGVybWluYWxzLAorCUFYLAorCWNvbG9ycyM4LAorCW5jdiMzLAorCXBhaXJzIzY0LAorCW9wPVxFWzM5OzQ5bSwKKwlzZXRhYj1cRVs0JXAxJWRtLAorCXNldGFmPVxFWzMlcDElZG0sCisKKyMjIyMgQU5TSS9FQ01BLTQ4IHRlcm1pbmFscyBhbmQgdGVybWluYWwgZW11bGF0b3JzCisjCisjIFNlZSBuZWFyIHRoZSBlbmQgb2YgdGhpcyBmaWxlIGZvciBkZXRhaWxzIG9uIEFOU0kgY29uZm9ybWFuY2UuCisjIERvbid0IG1lc3Mgd2l0aCB0aGVzZSBlbnRyaWVzISAgTG90cyBvZiBvdGhlciBlbnRyaWVzIGRlcGVuZCBvbiB0aGVtIQorIworIyBUaGlzIHNlY3Rpb24gbGlzdHMgZW50cmllcyBpbiBhIGxlYXN0LWNhcGFibGUgdG8gbW9zdC1jYXBhYmxlIG9yZGVyLgorIyBpZiB5b3UncmUgaW4gZG91YnQgYWJvdXQgd2hhdCBgQU5TSScgbWF0Y2hlcyB5b3VycywgdHJ5IHRoZW0gaW4gdGhhdAorIyBvcmRlciBhbmQgYmFjayBvZmYgZnJvbSB0aGUgZmlyc3QgdGhhdCBicmVha3MuCisKK2Fuc2ktbWluaXxhbnkgYW5zaSB0ZXJtaW5hbCB3aXRoIHBlc3NpbWlzdGljIGFzc3VtcHRpb25zLAorCWFtLAorCWNvbHMjODAsCisJaXQjOCwKKwlsaW5lcyMyNCwKKwljbGVhcj1cRVtIXEVbMkokPDUwPiwKKwljdWIxPVxFW0QsCisJY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVtBLAorCWVsPVxFW0ssCisJaG9tZT1cRVtILAorCWh0PV5JLAorCisjCisjIEFOU0kuU1lTIGVudHJpZXMKKyMKKyMgVGhpcyBjb21wbGV0ZWx5IGRlc2NyaWJlcyB0aGUgc2VxdWVuY2VzIHNwZWNpZmllZCBpbiB0aGUgRE9TIDIuMSBBTlNJLlNZUworIyBkb2N1bWVudGF0aW9uIChleGNlcHQgZm9yIHRoZSBrZXlib2FyZCBrZXkgcmVhc3NpZ25tZW50IGZlYXR1cmUsIHdoaWNoCisjIGRvZW4ndCBmaXQgdGhlIDxwZmtleT4gbW9kZWwgd2VsbCkuICBUaGUga2xvbmUrYWNzIHNlcXVlbmNlcyB3ZXJlIHZhbGlkCisjIHRob3VnaCB1bmRvY3VtZW50ZWQuICBUaGUgPHBma2V5PiBjYXBhYmlsaXR5IGlzIHVudGVzdGVkIGJ1dCBzaG91bGQgd29yayBmb3IKKyMga2V5cyBGMS1GMTAgKCVwMSB2YWx1ZXMgb3V0c2lkZSB0aGlzIHJhbmdlIHdpbGwgeWllbGQgdW5wcmVkaWN0YWJsZSByZXN1bHRzKS4KKyMgRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IE5vdiA3IDE5OTUKK2Fuc2kuc3lzLW9sZHxBTlNJLlNZUyB1bmRlciBQQy1ET1MgMi4xLAorCWFtLAorCW1pciwKKwltc2dyLAorCXhvbiwKKwljb2xzIzgwLAorCWxpbmVzIzI1LAorCWNsZWFyPVxFWzJKLAorCWN1YjE9XkgsCisJY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVtBLAorCWVsPVxFW2ssCisJaG9tZT1cRVtILAorCWlzMj1cRVttXEVbPzdoLAorCWtjdWIxPV5ILAorCWtjdWQxPV5KLAorCWtjdWYxPV5MLAorCWtjdXUxPV5LLAorCWtob21lPV5eLAorCXBma2V5PVxFWzA7JXAxJXs1OH0lKyVkOyVwMiIlcyIsCisJcmM9XEVbdSwKKwlybWFtPVxFWz83bCwKKwlzYz1cRVtzLAorCXNtYW09XEVbPzdoLAorCXU2PVxFWyVpJWQ7JWRSLAorCXU3PVxFWzZuLAorCXVzZT1rbG9uZStjb2xvciwKKwl1c2U9a2xvbmUrYWNzLAorCXVzZT1rbG9uZStzZ3IsCithbnNpLnN5c3xBTlNJLlNZUyAzLjEgYW5kIGxhdGVyIHZlcnNpb25zLAorCWVsPVxFW0ssCisJdXNlPWFuc2kuc3lzLW9sZCwKKworIyMjIEVNWCB0ZXJtY2FwLmRhdCBjb21wYXRpYmlsaXR5IG1vZGVzCisjCisjIEtleXBhZDoJSG9tZT1cMEcJVXA9XDBICVByUGFnPVwwSQorIwkJa2ExLGtoCQlrY3V1MQkJa3BwLGthMworIworIwkJTGVmdD1cMEsJNT1cMEwJCVJpZ2h0PVwwTQorIwkJa2N1YjEJCWtiMgkJa2N1ZjEKKyMKKyMJCUVuZD1cME8JCURvd249XDBQCU54UGFnPVwwUQorIwkJa2MxLGtlbmQJa2N1ZDEJCWtjMyxrbnAKKyMKKyMJCUlucz1cMFIJCURlbD1cMFMKKyMJCWtpY2gxCQlrZGNoMQorIworIyBPbiBrZXlib2FyZCB3aXRoIDEyIGZ1bmN0aW9uIGtleXMsCisjCXNoaWZ0ZWQgZi1rZXlzOiBGMTMtRjI0CisjCWNvbnRyb2wgZi1rZXlzOiBGMjUtRjM2CisjCWFsdCBmLWtleXM6ICAgICBGMzctRjQ4CisjIFRoZSBzaGlmdC9jb250cm9sL2FsdCBrZXlzIGRvIG5vdCBtb2RpZnkgZWFjaCBvdGhlciwgYnV0IGFsdCBvdmVycmlkZXMgYm90aCwKKyMgYW5kIGNvbnRyb2wgb3ZlcnJpZGVzIHNoaWZ0LgorIworIyBBbHNvIChwb3NzaWJseSBvbmx5IEVNWCwgc28gd2UgZG9uJ3QgcHV0IGl0IGluIGFuc2kuc3lzLCBldGMpOiBzZXQgdGhlCisjIG5vX2NvbG9yX3ZpZGVvIHRvIGluZm9ybSB0aGUgYXBwbGljYXRpb24gdGhhdCBzdGFuZG91dCgxKSwgdW5kZXJsaW5lKDIpCisjIHJldmVyc2UoNCkgYW5kIGludmlzaWJsZSg2NCkgZG9uJ3Qgd29yayB3aXRoIGNvbG9yLgorZW14LWJhc2V8RE9TIHNwZWNpYWwga2V5cywKKwliY2UsCisJYncsCisJaXQjOCwKKwluY3YjNzEsCisJYmVsPV5HLAorCWthMT1cMEcsCisJa2EzPVwwSSwKKwlrYjI9XDBMLAorCWticz1eSCwKKwlrYzE9XDBPLAorCWtjMz1cMFEsCisJa2NidD1cMF5PLAorCWtjdWIxPVwwSywKKwlrY3VkMT1cMFAsCisJa2N1ZjE9XDBNLAorCWtjdXUxPVwwSCwKKwlrZGNoMT1cMFMsCisJa2VuZD1cME8sCisJa2YxPVwwOywKKwlrZjEwPVwwRCwKKwlrZjExPVwwXDIwNSwKKwlrZjEyPVwwXDIwNiwKKwlrZjEzPVwwVCwKKwlrZjE0PVwwVSwKKwlrZjE1PVwwViwKKwlrZjE2PVwwVywKKwlrZjE3PVwwWCwKKwlrZjE4PVwwWSwKKwlrZjE5PVwwWiwKKwlrZjI9XDA8LAorCWtmMjA9XDBbLAorCWtmMjE9XDBcXCwKKwlrZjIyPVwwXSwKKwlrZjIzPVwwXDIwNywKKwlrZjI0PVwwXDIxMCwKKwlrZjI1PVwwXF4sCisJa2YyNj1cMF8sCisJa2YyNz1cMGAsCisJa2YyOD1cMGEsCisJa2YyOT1cMGIsCisJa2YzPVwwPSwKKwlrZjMwPVwwYywKKwlrZjMxPVwwZCwKKwlrZjMyPVwwZSwKKwlrZjMzPVwwZiwKKwlrZjM0PVwwZywKKwlrZjM1PVwwXDIxMSwKKwlrZjM2PVwwXDIxMiwKKwlrZjM3PVwwaCwKKwlrZjM4PVwwaSwKKwlrZjM5PVwwaiwKKwlrZjQ9XDA+LAorCWtmNDA9XDBrLAorCWtmNDE9XDBsLAorCWtmNDI9XDBtLAorCWtmNDM9XDBuLAorCWtmNDQ9XDBvLAorCWtmNDU9XDBwLAorCWtmNDY9XDBxLAorCWtmNDc9XDBcMjEzLAorCWtmNDg9XDBcMjE0LAorCWtmNT1cMD8sCisJa2Y2PVwwQCwKKwlrZjc9XDBBLAorCWtmOD1cMEIsCisJa2Y5PVwwQywKKwlraG9tZT1cMEcsCisJa2ljaDE9XDBSLAorCWtucD1cMFEsCisJa3BwPVwwSSwKKwl1c2U9YW5zaS5zeXMsCisjCisjIFRvIHByb3Blcmx5IHRyYW5zbGF0ZSB0ZXJtY2FwLmRhdCAtPiB0ZXJtaW5mby5zcmMgcmVtZW1iZXIgdGhlc2UKKyMgZXF1aXZhbGVuY2VzOgorIwl0aQk8LT4Jc21jdXAJc3RyaW5nIHRvIHN0YXJ0IHByb2dyYW1zIHVzaW5nIGN1cCh0ZXJtY2FwKQorIwl0ZQk8LT4Jcm1jdXAJc3RyaW5nIHRvIGVuZCBwcm9ncmFtcyB1c2luZyBjdXAKKyMJc28JPC0+CXNtc28JYmVnaW4gc3RhbmRvdXQgbW9kZQorIwlzZQk8LT4Jcm1zbwlleGl0IHN0YW5kb3V0IG1vZGUKKyMJdXMJPC0+CXNtdWwJYmVnaW4gdW5kZXJsaW5lIG1vZGUKKyMJdWUJPC0+CXJtdWwJZXhpdCB1bmRlcmxpbmUgbW9kZQorIwltYgk8LT4JYmxpbmsJdHVybiBvbiBibGlua2luZworIwltZAk8LT4JYm9sZAl0dXJuIG9uIGV4dHJhIGJyaWdodCAoYm9sZCkgbW9kZQorIwltcgk8LT4JcmV2CXR1cm4gb24gcmV2ZXJzZSB2aWRlbyBtb2RlCisjCW1lCTwtPglzZ3IwCXR1cm4gb2ZmIGFsbCBhdHJpYnV0ZXMKKyMKKyMgT24gbXkgdGVybWluYWwsIFxFWzRtIGxvb2tzIGRpbS4KK2Fuc2ktZW14fEFOU0kuU1lTIGNvbG9yLAorCWJsaW5rPVxFWzVtLAorCWJvbGQ9XEVbMW0sCisJa21vdXM9XEVbTSwKKwlyZXY9XEVbN20sCisJcm1jdXA9XEVbMG0sCisJcm1zbz1cRVswbSwKKwlybXVsQCwKKwlzZ3IwPVxFWzBtLAorCXNtY3VwPVxFWzA7Mzc7NDBtLAorCXNtc289XEVbN20sCisJc211bEAsCisJdXNlPWVteC1iYXNlLAord2luZG93fEFOU0kuU1lTIHdpbmRvdywKKwlibGluaz1cRVs1bSwKKwlib2xkPVxFWzE7Mzc7NDdtLAorCXJldj1cRVsxOzM3OzQ3bSwKKwlybWN1cD1cRVswbSwKKwlybXNvPVxFWzA7Mzc7NDBtLAorCXJtdWw9XEVbMDszNzs0MG0sCisJc2dyMD1cRVswOzM3OzQwbSwKKwlzbWN1cD1cRVswOzM3OzQwbSwKKwlzbXNvPVxFWzE7Mzc7NDdtLAorCXNtdWw9XEVbMTszMTs0N20sCisJdXNlPWVteC1iYXNlLAorb3MyfE9TLzItZW14IEFOU0kuU1lTLAorCWN1Yj1cRVslcDElZEQsCisJY3ViMT1cRVtELAorCWN1ZD1cRVslcDElZEIsCisJY3VkMT1cRVtCLAorCWN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLAorCWN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLAorCXJjPVxFW3UsCisJc2M9XEVbcywKKwl1c2U9YW5zaS1lbXgsCisJdXNlPW1vbm8sCittb25vfEFOU0kuU1lTIG1vbm8sCisJYmxpbms9XEVbNW0sCisJYm9sZD1cRVsxbSwKKwlyZXY9XEVbN20sCisJcm1jdXA9XEVbMG0sCisJcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sCisJc21jdXA9XEVbMG0sCisJc21zbz1cRVsxbSwKKwlzbXVsPVxFWzRtLAorCXVzZT1lbXgtYmFzZSwKKyMgc2FtZSBhcyBtb25vLCBidXQgdXNlIHJldmVyc2UgdmlkZW8gZm9yIHN0YW5kb3V0IChuaWNlIGZvciBFbWFjcykKK3Jtb25vfEFOU0kuU1lTIHJldmVyc2UgbW9ubywKKwlzbXNvPVxFWzdtLAorCXVzZT1tb25vLAorIyBzYW1lIGFzIG1vbm8sIGJ1dCB1c2UgYSByZWFkYWJsZSBjb2xvciBmb3IgdW5kZXJsaW5pbmcKK21vbm8yfEFOU0kuU1lTIG1vbm8yLAorCXJtdWw9XEVbMG0sCisJc211bD1cRVsxOzMxOzQwbSwKKwl1c2U9bW9ubywKKyMgbmljZSBjb2xvcnMgZm9yIEVtYWNzICh3aGl0ZSBvbiBibHVlLCBtb2RlIGxpbmUgd2hpdGUgb24gY3lhbikKK2Fuc2ktY29sb3ItMi1lbXh8QU5TSS5TWVMgY29sb3IgMiwKKwlybWN1cD1cRVswbSwKKwlybXNvPVxFWzA7Mzc7NDRtLAorCXJtdWw9XEVbMG0sCisJc2dyMD1cRVswOzM3OzQ0bSwKKwlzbWN1cD1cRVswOzM3OzQ0bSwKKwlzbXNvPVxFWzE7Mzc7NDZtLAorCXNtdWw9XEVbMTszMTs0MG0sCisJdXNlPWFuc2ktZW14LAorIyBuaWNlIGNvbG9ycyBmb3IgRW1hY3MgKHdoaXRlIG9uIGJsYWNrLCBtb2RlIGxpbmUgYmxhY2sgb24gY3lhbikKK2Fuc2ktY29sb3ItMy1lbXh8QU5TSS5TWVMgY29sb3IgMywKKwlybWN1cD1cRVswbSwKKwlybXNvPVxFWzBtLAorCXJtdWw9XEVbMG0sCisJc2dyMD1cRVswbSwKKwlzbWN1cD1cRVswbSwKKwlzbXNvPVxFWzMwOzQ2bSwKKwlzbXVsPVxFWzE7MzE7NDBtLAorCXVzZT1hbnNpLWVteCwKKworIyMjIyBYIHRlcm1pbmFsIGVtdWxhdG9ycworIworIyBYMTAvNi42CTExLzcvODYsIG1pbnVzIGFsdGVybmF0ZSBzY3JlZW4sIHBsdXMgKGNzcikKKyMgKHh0ZXJtOiAiOk1UOiIgY2hhbmdlZCB0byAiOmttOiI7IGFkZGVkIDxzbWFtPi88cm1hbT4gYmFzZWQgb24gaW5pdCBzdHJpbmc7CisjIHJlbW92ZWQgKGhzLCBlc2xvaywgdHNsPVxFWz9FXEVbPyVpJWRULCBmc2w9XEVbP0YsIGRzbD1cRVs/RSkKKyMgYXMgdGhlc2Ugc2VlbSBub3QgdG8gd29yayAtLSBlc3IpCit4MTB0ZXJtfHZzMTAwLXgxMHx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWDEwIHdpbmRvdyBzeXN0ZW0pLAorCWFtLAorCWttLAorCW1pciwKKwltc2dyLAorCXhlbmwsCisJeG9uLAorCWNvbHMjODAsCisJaXQjOCwKKwlsaW5lcyM2NSwKKwlib2xkPVxFWzFtLAorCWNsZWFyPVxFW0hcRVsySiwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwKKwljdWQxPV5KLAorCWN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsCisJZGNoMT1cRVtQLAorCWRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwKKwllZD1cRVtKLAorCWVsPVxFW0ssCisJaG9tZT1cRVtILAorCWh0PV5JLAorCWlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwKKwlpbmQ9XkosCisJaXMyPVxFXEVbbVxFWz83aFxFWz8xOzRsLAorCWticz1eSCwKKwlrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsCisJa2N1ZjE9XEVPQywKKwlrY3V1MT1cRU9BLAorCWtmMT1cRU9QLAorCWtmMj1cRU9RLAorCWtmMz1cRU9SLAorCWtmND1cRU9TLAorCXJldj1cRVs3bSwKKwlyaT1cRU0sCisJcm1hbT1cRVs/N2wsCisJcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbFxFPiwKKwlybXNvPVxFW20sCisJcm11bD1cRVttLAorCXNncjA9XEVbbSwKKwlzbWFtPVxFWz83aCwKKwlzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20sCisJc211bD1cRVs0bSwKKyMgWDExUjYgeHRlcm0uICBUaGlzIGlzIGtub3duIGdvb2QgZm9yIHRoZSBYRnJlZTg2IHZlcnNpb24gdW5kZXIgTGludXguCisjIEl0IGlzICp3YXkqIG1vcmUgZmVhdHVyZWZ1bCB0aGFuIHRoZSBzdG9jayBYIGNvbnNvcnRpdW0gZW50cnkgKGhhcyBhY3NjLAorIyBmb3Igc3RhcnRlcnMpLiAgVGhlIDxrbW91cz4ga2V5IGlzIGFjdHVhbGx5IHRoZSBcRVtNIHByZWZpeCByZXR1cm5lZCBieQorIyB4dGVybSdzIGludGVybmFsIG1vdXNlLXRyYWNraW5nIGZhY2lsaXR5OyBuY3Vyc2VzIHdpbGwgaW50ZXJwcmV0IHRoZQorIyBmb2xsb3dpbmcgdGhyZWUgYnl0ZXMgb2YgbW91c2Ugc3RhdHVzIGluZm9ybWF0aW9uLgorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gMTQgRGVjIDE5OTUKK3h0ZXJtLXI2fHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYMTFSNiBXaW5kb3cgU3lzdGVtKSwKKwlhbSwKKwlrbSwKKwltaXIsCisJbXNnciwKKwl4ZW5sLAorCXhvbiwKKwljb2xzIzgwLAorCWl0IzgsCisJbGluZXMjNjUsCisJYWNzYz0rK1wsXCwtLS4uMDBJSWBgYWFmZmdnaGhqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLAorCWJvbGQ9XEVbMW0sCisJY2xlYXI9XEVbSFxFWzJKLAorCWNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELAorCWN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwKKwljdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLAorCWRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sCisJZGwxPVxFW00sCisJZWQ9XEVbSiwKKwllbD1cRVtLLAorCWVuYWNzPVxFKEJcRSkwLAorCWhvbWU9XEVbSCwKKwlodD1eSSwKKwlpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbQCwKKwlpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsCisJaW5kPV5KLAorCWlzMj1cRVtyXEVbbVxFWzJKXEVbSFxFWz83aFxFWz8xOzM7NDs2bFxFWzRsLAorCWticz1eSCwKKwlrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsCisJa2N1ZjE9XEVPQywKKwlrY3V1MT1cRU9BLAorCWtlbmQ9XEVPZSwKKwlrZW50PVxFT00sCisJa2YxPVxFWzExfiwKKwlrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwKKwlrZjEzPVxFWzI1fiwKKwlrZjE0PVxFWzI2fiwKKwlrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwKKwlrZjE3PVxFWzMxfiwKKwlrZjE4PVxFWzMyfiwKKwlrZjE5PVxFWzMzfiwKKwlrZjI9XEVbMTJ+LAorCWtmMjA9XEVbMzR+LAorCWtmMz1cRVsxM34sCisJa2Y0PVxFWzE0fiwKKwlrZjU9XEVbMTV+LAorCWtmNj1cRVsxN34sCisJa2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LAorCWtmOT1cRVsyMH4sCisJa2ZuZD1cRVsxfiwKKwlraG9tZT1cRU9cMCwKKwlraWNoMT1cRVsyfiwKKwlrbW91cz1cRVtNLAorCWtucD1cRVs2fiwKKwlrcHA9XEVbNX4sCisJcmM9XEU4LAorCXJldj1cRVs3bSwKKwlyaT1cRU0sCisJcm1hY3M9Xk8sCisJcm1hbT1cRVs/N2wsCisJcm1jdXA9XEVbMkpcRVs/NDdsXEU4LAorCXJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWxcRT4sCisJcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlyczE9Xk8sCisJcnMyPVxFW3JcRVttXEVbMkpcRVtIXEVbPzdoXEVbPzE7Mzs0OzZsXEVbNGxcRTwsCisJc2M9XEU3LAorCXNncjA9XEVbbSwKKwlzbWFjcz1eTiwKKwlzbWFtPVxFWz83aCwKKwlzbWN1cD1cRTdcRVs/NDdoLAorCXNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sCisJc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorCXRiYz1cRVszaywKKwl1Nj1cRVslaSVkOyVkUiwKKwl1Nz1cRVs2biwKKwl1OD1cRVs/MTsyYywKKwl1OT1cRVtjLAoreHRlcm0tYm9sZHx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWDExUjYgV2luZG93IFN5c3RlbSkgc3RhbmRvdXQgdy9ib2xkLAorCXNtc289XEVbMW0sCisJdXNlPXh0ZXJtLAoreHRlcm1zfHZzMTAwc3x4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoc21hbGwgc2NyZWVuIDI0eDgwKSwKKwljb2xzIzgwLAorCWxpbmVzIzI0LAorCXVzZT14dGVybSwKKyMgKGt0ZXJtOiB0aGlzIGhhZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzICI6S0o6VFk9YXNjaWk6IiAtLSBlc3IpCitrdGVybXxrdGVybSBrYW5qaSB0ZXJtaW5hbCBlbXVsYXRvciAoWCB3aW5kb3cgc3lzdGVtKSwKKwllc2xvaywKKwlocywKKwljc3I9XEVbJWklcDElZDslcDIlZHIsCisJZHNsPVxFWz9ILAorCWZzbD1cRVs/RiwKKwlyYz1cRTgsCisJc2M9XEU3LAorCXRzbD1cRVs/RVxFWz8laSVkVCwKKwl1c2U9eHRlcm0sCisJdXNlPWVjbWErY29sb3IsCisKKyMgU2VlIHRoZSBub3RlIG9uIElDSC9JQ0gxIFZFUlNVUyBSTUlSL1NNSVIgbmVhciB0aGUgZW5kIG9mIGZpbGUKK3h0ZXJtLW5pY3x4dGVybSB3aXRoIGljaC9pY2gxIHN1cHByZXNzZWQgZm9yIG5vbi1jdXJzZXMgcHJvZ3JhbXMsCisJaWNoQCwKKwlpY2gxQCwKKwl1c2U9eHRlcm0sCisKKyMgU2hvdWxkIHdvcmsgd2l0aCB0aGUgY29sb3IgeHRlcm0gb24gdGhlIFgxMVI2IGNvbnRyaWIgdGFwZS4KKyMgQXNzdW1lcyB0aGUgeHRlcm0gYXR0cmlidXRlIGRlZmF1bHQgaXMgYmxhY2sgb24gd2hpdGUuCisjIEZyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiBNYXJjaCA0IDE5OTYKK3h0ZXJtLWNvbG9yfHh0ZXJtIHdpdGggY29sb3Igc3VwcG9ydCwKKwlvcD1cRVszMDs0N20sCisJdXNlPXh0ZXJtLAorCXVzZT1rbG9uZStjb2xvciwKKworIyBGcm9tOiBUaG9tYXMgRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxMyBEZWMgMTk5NQorcnh2dHxyeHZ0IHRlcm1pbmFsIGVtdWxhdG9yLAorCWtlbmQ9XEVPdywKKwlraG9tZT1cRVtILAorCWttb3VzQCwKKwl1c2U9eHRlcm0sCisJdXNlPWtsb25lK2NvbG9yLAorCisjIEZyb206IERhdmlkIEouIE1hY0tlbnppZSA8ZGptQHZhLnB1Ym5peC5jb20+IDIwIEFwciAxOTk1CisjIEhlcmUncyBhIHRlcm1jYXAgZW50cnkgSSd2ZSBiZWVuIHVzaW5nIGZvciB4dGVybV9jb2xvciwgd2hpY2ggY29tZXMKKyMgd2l0aCBCU0QvT1MgMi4wLCBhbmQgdGhlIFgxMVI2IGNvbnRyaWIgdGFwZSB0b28gSSB0aGluay4gIEJlc2lkZXMgdGhlCisjIGNvbG9yIHN0dWZmLCBJIGFsc28gaGF2ZSBhIHN0YXR1cyBsaW5lIGRlZmluZWQgYXMgdGhlIHdpbmRvdyBtYW5hZ2VyCisjIHRpdGxlIGJhci4gW0kgaGF2ZSB0cmFuc2xhdGVkIGl0IHRvIHRlcm1pbmZvIC0tIEVTUl0KK3h0ZXJtLXBjb2xvcnx4dGVybSB3aXRoIGNvbG9yIHVzZWQgZm9yIGhpZ2hsaWdodHMgYW5kIHN0YXR1cyBsaW5lLAorCWhzLAorCXdzbCM0MCwKKwlib2xkPVxFWzFtXEVbNDNtLAorCWRzbD1cRV0wO1wwMDcsCisJZnNsPV5HLAorCXJldj1cRVs3bVxFWzM0bSwKKwlzbXNvPVxFWzdtXEVbMzFtLAorCXNtdWw9XEVbNG1cRVs0Mm0sCisJdHNsPVxFXTA7LAorCXVzZT14dGVybSwKKworIyBIUCBzaGlwcyB0aGlzLCBleGNlcHQgZm9yIHRoZSBwYiM5NjAwIHdoaWNoIHdhcyBtZXJnZWQgaW4gZnJvbSBCU0QgdGVybWNhcC4KK2hwdGVybXxYLWhwdGVybXxocCBYMTEgdGVybWluYWwgZW11bGF0b3IsCisJYW0sCisJZGEsCisJZGIsCisJbWlyLAorCXhocCwKKwljb2xzIzgwLAorCWxoIzIsCisJbGluZXMjMjQsCisJbG0jMCwKKwlsdyM4LAorCW5sYWIjOCwKKwlwYiM5NjAwLAorCXhtYyMwLAorCWJlbD1eRywKKwlib2xkPVxFJmRCLAorCWNidD1cRWksCisJY2xlYXI9XEUmYTB5MENcRUosCisJY3I9Xk0sCisJY3ViMT1eSCwKKwljdWQxPVxFQiwKKwljdWYxPVxFQywKKwljdXA9XEUmYSVwMSVkeSVwMiVkQywKKwljdXUxPVxFQSwKKwlkY2gxPVxFUCwKKwlkaW09XEUmZEgsCisJZGwxPVxFTSwKKwllZD1cRUokPDE+LAorCWVsPVxFSywKKwlocGE9XEUmYSVwMSVkQywKKwlodD1eSSwKKwlodHM9XEUxLAorCWlsMT1cRUwsCisJaW5kPV5KLAorCWticz1eSCwKKwlrY2xyPVxFSiwKKwlrY3RhYj1cRTIsCisJa2N1YjE9XEVELAorCWtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsCisJa2N1dTE9XEVBLAorCWtkY2gxPVxFUCwKKwlrZGwxPVxFTSwKKwlrZWQ9XEVKLAorCWtlbD1cRUssCisJa2YxPVxFcCwKKwlrZjI9XEVxLAorCWtmMz1cRXIsCisJa2Y0PVxFcywKKwlrZjU9XEV0LAorCWtmNj1cRXUsCisJa2Y3PVxFdiwKKwlrZjg9XEV3LAorCWtob21lPVxFaCwKKwlraHRzPVxFMSwKKwlraWNoMT1cRVEsCisJa2lsMT1cRUwsCisJa2luZD1cRVMsCisJa2xsPVxFRiwKKwlrbnA9XEVVLAorCWtwcD1cRVYsCisJa3JpPVxFVCwKKwlrcm1pcj1cRVIsCisJa3RiYz1cRTMsCisJbWVtbD1cRWwsCisJbWVtdT1cRW0sCisJcGZrZXk9XEUmZiVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGZsb2M9XEUmZjFhJXAxJWRrJXAyJWwlZEwlcDIlcywKKwlwZng9XEUmZjJhJXAxJWRrJXAyJWwlZEwlcDIlcywKKwlwbG49XEUmZiVwMSVkayVwMiVsJWRkMEwlcDIlcywKKwlyZXY9XEUmZEIsCisJcmk9XEVULAorCXJtYWNzPV5PLAorCXJtaXI9XEVSLAorCXJta3g9XEUmczBBLAorCXJtbG49XEUmakAsCisJcm1zbz1cRSZkQCwKKwlybXVsPVxFJmRALAorCXNncj1cRSZkJT8lcDcldCUncyclYyU7JXAxJXAzJXwlcDYlfCV7Mn0lKiVwMiV7NH0lKiUrJXA0JSslcDUlezh9JSolKyUnQCclKyVjJT8lcDkldCUnXDAxNiclYyVlJSdcMDE3JyVjJTssCisJc2dyMD1cRSZkQCwKKwlzbWFjcz1eTiwKKwlzbWlyPVxFUSwKKwlzbWt4PVxFJnMxQSwKKwlzbWxuPVxFJmpCLAorCXNtc289XEUmZEosCisJc211bD1cRSZkRCwKKwl0YmM9XEUzLAorCXZwYT1cRSZhJXAxJWRZLAorCisjIFRoaXMgZW50cnkgZGVzY3JpYmVzIGFuIHh0ZXJtIHdpdGggU3VuLXN0eWxlIGZ1bmN0aW9uIGtleXMgZW5hYmxlZAorIyB2aWEgdGhlIFggcmVzb3VyY2Ugc2V0dGluZyAieHRlcm0qc3VuRnVuY3Rpb25LZXlzOnRydWUiCisjIFRvIHVuZGVyc3RhbmQgPGtmMTE+LzxrZjEyPiBub3RlIHRoYXQgTDEsTDIgYW5kIEYxMSxGMTIgYXJlIHRoZSBzYW1lLgorIyBUaGUgPGtmMTM+Li4uPGtmMjA+IGtleXMgYXJlIEwzLUwxMC4gIFdlIGRvbid0IHNldCA8a2YxNj1cRVsxOTd6PgorIyBiZWNhdXNlIHdlIHdhbnQgaXQgdG8gYmUgc2VlbiBhcyA8a2NweT4uCisjIFRoZSA8a2YzMT4uLi48a2Y0NT4ga2V5cyBhcmUgUjEtUjE1LiAgV2UgdHJlYXQgc29tZSBvZiB0aGVzZSBpbiBhY2NvcmRhbmNlCisjIHdpdGggdGhlaXIgU3VuIGtleWJvYXJkIGxhYmVscyBpbnN0ZWFkLgorIyBGcm9tOiBTaW1vbiBKLiBHZXJyYXR5IDxzamdAemVuLnZvaWQub3ouYXU+IDEwIEphbiAxOTk2Cit4dGVybS1zdW58eHRlcm0gd2l0aCBzdW5GdW5jdGlvbktleXMgdHJ1ZSwKKwlrYjI9XEVbMjE4eiwKKwlrY3B5PVxFWzE5N3osCisJa2VuZD1cRVsyMjB6LAorCWtmMT1cRVsyMjR6LAorCWtmMTA9XEVbMjMzeiwKKwlrZjExPVxFWzE5MnosCisJa2YxMj1cRVsxOTN6LAorCWtmMTM9XEVbMTk0eiwKKwlrZjE0PVxFWzE5NXosCisJa2YxNT1cRVsxOTZ6LAorCWtmMTc9XEVbMTk4eiwKKwlrZjE4PVxFWzE5OXosCisJa2YxOT1cRVsyMDB6LAorCWtmMj1cRVsyMjV6LAorCWtmMjA9XEVbMjAxeiwKKwlrZjM9XEVbMjI2eiwKKwlrZjMxPVxFWzIwOHosCisJa2YzMj1cRVsyMDl6LAorCWtmMzM9XEVbMjEweiwKKwlrZjM0PVxFWzIxMXosCisJa2YzNT1cRVsyMTJ6LAorCWtmMzY9XEVbMjEzeiwKKwlrZjM4PVxFWzIxNXosCisJa2Y0PVxFWzIyN3osCisJa2Y0MD1cRVsyMTd6LAorCWtmNDI9XEVbMjE5eiwKKwlrZjQ0PVxFWzIyMXosCisJa2Y1PVxFWzIyOHosCisJa2Y2PVxFWzIyOXosCisJa2Y3PVxFWzIzMHosCisJa2Y4PVxFWzIzMXosCisJa2Y5PVxFWzIzMnosCisJa2ZuZD1cRVsyMDB6LAorCWtobHA9XEVbMTk2eiwKKwlraG9tZT1cRVsyMTR6LAorCWtpY2gxPVxFWzJ6LAorCWtucD1cRVsyMjJ6LAorCWtwcD1cRVsyMTZ6LAorCWt1bmQ9XEVbMTk1eiwKKwl1c2U9eHRlcm0sCit4dGVybXMtc3VufHNtYWxsICg4MHgyNCkgeHRlcm0gd2l0aCBzdW5GdW5jdGlvbktleXMgdHJ1ZSwKKwljb2xzIzgwLAorCWxpbmVzIzI0LAorCXVzZT14dGVybS1zdW4sCisKKyMgVGhpcyBpcyBmb3IgdGhlIGV4dGVuc2libGUgdGVybWluYWwgZW11bGF0b3Igb24gdGhlIFgxMVI2IGNvbnRyaWIgdGFwZS4KK2VtdXxlbXUgbmF0aXZlIG1vZGUsCisJbWlyLAorCW1zZ3IsCisJeG9uLAorCWNvbG9ycyMxNSwKKwljb2xzIzgwLAorCWl0IzgsCisJbGluZXMjMjQsCisJcGFpcnMjNjQsCisJdnQjMjAwLAorCWFjc2M9NjFhXDIwMmZcMjYwZzJqXDIxM2tcMjE0bFwyMTVtXDIxNm5cMjE3b1wyMjBxXDIyMnNcMjI0dFwyMjV1XDIyNnZcMjI3d1wyMzB4XDIzMX5cMjQ0LAorCWJlbD1eRywKKwlibGluaz1cRVNcRVcsCisJYm9sZD1cRVNcRVUsCisJY2l2aXM9XEVaLAorCWNsZWFyPVxFUFxFRTA7MDssCisJY25vcm09XEVhLAorCWNyPV5NLAorCWNzcj1cRWslcDElZDslcDIlZDssCisJY3ViPVxFcS0lcDElZDssCisJY3ViMT1eSCwKKwljdWQ9XEVwJXAxJWQ7LAorCWN1ZDE9XEVCLAorCWN1Zj1cRXElcDElZDssCisJY3VmMT1cRUQsCisJY3VwPVxFRSVwMSVkOyVwMiVkOywKKwljdXU9XEVwLSVwMSVkOywKKwljdXUxPVxFQSwKKwlkY2g9XEVJJXAxJWQ7LAorCWRjaDE9XEVJMTssCisJZGw9XEVSJXAxJWQ7LAorCWRsMT1cRVIxOywKKwllY2g9XEVqJXAxJWQ7LAorCWVkPVxFTiwKKwllbD1cRUssCisJZWwxPVxFTCwKKwllbmFjcz1cMCwKKwlob21lPVxFRTA7MDssCisJaHQ9XkksCisJaHRzPVxFaCwKKwlpbD1cRVElcDElZDssCisJaWwxPVxFUTE7LAorCWluZD1cRUcsCisJaXMyPVxFU1xFcjA7XEVzMDssCisJa2JzPV5ILAorCWtjdWIxPVxFQywKKwlrY3VkMT1cRUIsCisJa2N1ZjE9XEVELAorCWtjdXUxPVxFQSwKKwlrZGNoMT1cMTc3LAorCWtlbnQ9Xk0sCisJa2YwPVxFRjAwLAorCWtmMT1cRUYwMSwKKwlrZjEwPVxFRjEwLAorCWtmMTE9XEVGMTEsCisJa2YxMj1cRUYxMiwKKwlrZjEzPVxFRjEzLAorCWtmMTQ9XEVGMTQsCisJa2YxNT1cRUYxNSwKKwlrZjE2PVxFRjE2LAorCWtmMTc9XEVGMTcsCisJa2YxOD1cRUYxOCwKKwlrZjE5PVxFRjE5LAorCWtmMj1cRUYwMiwKKwlrZjIwPVxFRjIwLAorCWtmMz1cRUYwMywKKwlrZjQ9XEVGMDQsCisJa2Y1PVxFRjA1LAorCWtmNj1cRUYwNiwKKwlrZjc9XEVGMDcsCisJa2Y4PVxFRjA4LAorCWtmOT1cRUYwOSwKKwlrZm5kPVxFZmluZCwKKwlraWNoMT1cRWlucywKKwlrbnA9XEVuZXh0LAorCWtwcD1cRXByaW9yLAorCWtzbHQ9XEVzZWwsCisJb2M9XEVzMDtcRXIwOywKKwlyZXY9XEVTXEVULAorCXJpPVxFRiwKKwlybWFjcz1cMCwKKwlybWlyPVxFWCwKKwlybXNvPVxFUywKKwlybXVsPVxFUywKKwlyczI9XEVTXEVzMDtcRXIwOywKKwlzZXRhYj1cRXMlaSVwMSVkOywKKwlzZXRhZj1cRXIlaSVwMSVkOywKKwlzZ3IwPVxFUywKKwlzbWFjcz1cMCwKKwlzbWlyPVxFWSwKKwlzbXNvPVxFU1xFVCwKKwlzbXVsPVxFU1xFViwKKwl0YmM9XEVqLAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBbGlhc2VzIHdoaWNoIGNvbmZsaWN0IHdpdGggdGVybWluZm8uc3JjCithbnNpfEFOU0kuU1lTIGNvbG9yLAorCXVzZT1hbnNpLWVteCwKK2Fuc2ktY29sb3ItMnxBTlNJLlNZUyBjb2xvciAyLAorCXVzZT1hbnNpLWNvbG9yLTItZW14LAorYW5zaS1jb2xvci0zfEFOU0kuU1lTIGNvbG9yIDMsCisJdXNlPWFuc2ktY29sb3ItMy1lbXgsCit4dGVybXx2czEwMHx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWDExUjYgV2luZG93IFN5c3RlbSksCisJdXNlPXh0ZXJtLXI2LApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9mb3JtLmRlZiBiL25jdXJzZXMtNS43L21pc2MvZm9ybS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0M2I1OQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvZm9ybS5kZWYKQEAgLTAsMCArMSwxMDEgQEAKK0xJQlJBUlkgZm9ybTUgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQ0KK0RFU0NSSVBUSU9OICJOQ3Vyc2VzLTUtMS0yMDAwMDcwNCwgbW9kdWxlIGZvcm0iDQorQ09ERSBMT0FET05DQUxMDQorREFUQSBMT0FET05DQUxMIE5PTlNIQVJFRCBNVUxUSVBMRQ0KK0VYUE9SVFMNCisJIlRZUEVfQUxOVU0iCUAyCU5PTkFNRQ0KKwkiVFlQRV9BTFBIQSIJQDEJTk9OQU1FDQorCSJUWVBFX0VOVU0iCUAzCU5PTkFNRQ0KKwkiVFlQRV9JTlRFR0VSIglANAlOT05BTUUNCisJIlRZUEVfSVBWNCIJQDcJTk9OQU1FDQorCSJUWVBFX05VTUVSSUMiCUA1CU5PTkFNRQ0KKwkiVFlQRV9SRUdFWFAiCUA2CU5PTkFNRQ0KKwkiX25jX0NvcHlfQXJndW1lbnQiCUA4CU5PTkFNRQ0KKwkiX25jX0NvcHlfVHlwZSIJQDkJTk9OQU1FDQorCSJfbmNfRGVmYXVsdF9GaWVsZCIJQDExCU5PTkFNRQ0KKwkiX25jX0RlZmF1bHRfRmllbGRUeXBlIglAMTIJTk9OQU1FDQorCSJfbmNfRGVmYXVsdF9Gb3JtIglAMTAJTk9OQU1FDQorCSJfbmNfRmlyc3RfQWN0aXZlX0ZpZWxkIglAMTMJTk9OQU1FDQorCSJfbmNfRnJlZV9Bcmd1bWVudCIJQDE0CU5PTkFNRQ0KKwkiX25jX0ZyZWVfVHlwZSIJQDE1CU5PTkFNRQ0KKwkiX25jX0ludGVybmFsX1ZhbGlkYXRpb24iCUAxNglOT05BTUUNCisJIl9uY19NYWtlX0FyZ3VtZW50IglAMTcJTk9OQU1FDQorCSJfbmNfUG9zaXRpb25fRm9ybV9DdXJzb3IiCUAxOAlOT05BTUUNCisJIl9uY19SZWZyZXNoX0N1cnJlbnRfRmllbGQiCUAxOQlOT05BTUUNCisJIl9uY19TZXRfQ3VycmVudF9GaWVsZCIJQDI1CU5PTkFNRQ0KKwkiX25jX1NldF9Gb3JtX1BhZ2UiCUAyNglOT05BTUUNCisJIl9uY19TeW5jaHJvbml6ZV9BdHRyaWJ1dGVzIglAMjcJTk9OQU1FDQorCSJfbmNfU3luY2hyb25pemVfT3B0aW9ucyIJQDI4CU5PTkFNRQ0KKwkiY3VycmVudF9maWVsZCIJQDEwMglOT05BTUUNCisJImRhdGFfYWhlYWQiCUAxMzMJTk9OQU1FDQorCSJkYXRhX2JlaGluZCIJQDEzNAlOT05BTUUNCisJImR1cF9maWVsZCIJQDMxCU5PTkFNRQ0KKwkiZHluYW1pY19maWVsZF9pbmZvIglAMzUJTk9OQU1FDQorCSJmaWVsZF9hcmciCUA1NglOT05BTUUNCisJImZpZWxkX2JhY2siCUA1MwlOT05BTUUNCisJImZpZWxkX2J1ZmZlciIJQDU5CU5PTkFNRQ0KKwkiZmllbGRfY291bnQiCUAxMTEJTk9OQU1FDQorCSJmaWVsZF9mb3JlIglANTIJTk9OQU1FDQorCSJmaWVsZF9pbmRleCIJQDExNQlOT05BTUUNCisJImZpZWxkX2luZm8iCUAzNAlOT05BTUUNCisJImZpZWxkX2luaXQiCUAxMDcJTk9OQU1FDQorCSJmaWVsZF9qdXN0IglANDEJTk9OQU1FDQorCSJmaWVsZF9vcHRzIglANjAJTk9OQU1FDQorCSJmaWVsZF9vcHRzX29mZiIJQDUxCU5PTkFNRQ0KKwkiZmllbGRfb3B0c19vbiIJQDUwCU5PTkFNRQ0KKwkiZmllbGRfcGFkIglANDUJTk9OQU1FDQorCSJmaWVsZF9zdGF0dXMiCUA1NQlOT05BTUUNCisJImZpZWxkX3Rlcm0iCUAxMDgJTk9OQU1FDQorCSJmaWVsZF90eXBlIglANTgJTk9OQU1FDQorCSJmaWVsZF91c2VycHRyIglANTcJTk9OQU1FDQorCSJmb3JtX2RyaXZlciIJQDEyNglOT05BTUUNCisJImZvcm1fZmllbGRzIglAMTAxCU5PTkFNRQ0KKwkiZm9ybV9pbml0IglAMTA1CU5PTkFNRQ0KKwkiZm9ybV9vcHRzIglAMTMyCU5PTkFNRQ0KKwkiZm9ybV9vcHRzX29mZiIJQDEzMAlOT05BTUUNCisJImZvcm1fb3B0c19vbiIJQDEyOQlOT05BTUUNCisJImZvcm1fcGFnZSIJQDExNwlOT05BTUUNCisJImZvcm1fcmVxdWVzdF9ieV9uYW1lIglAMjkJTk9OQU1FDQorCSJmb3JtX3JlcXVlc3RfbmFtZSIJQDYxCU5PTkFNRQ0KKwkiZm9ybV9zdWIiCUAxMDQJTk9OQU1FDQorCSJmb3JtX3Rlcm0iCUAxMDYJTk9OQU1FDQorCSJmb3JtX3VzZXJwdHIiCUAxMzEJTk9OQU1FDQorCSJmb3JtX3dpbiIJQDEwMwlOT05BTUUNCisJImZyZWVfZmllbGQiCUAzMwlOT05BTUUNCisJImZyZWVfZmllbGR0eXBlIglAMjIJTk9OQU1FDQorCSJmcmVlX2Zvcm0iCUAxMDkJTk9OQU1FDQorCSJsaW5rX2ZpZWxkIglAMzIJTk9OQU1FDQorCSJsaW5rX2ZpZWxkdHlwZSIJQDIxCU5PTkFNRQ0KKwkibW92ZV9maWVsZCIJQDM3CU5PTkFNRQ0KKwkibmV3X2ZpZWxkIglAMzAJTk9OQU1FDQorCSJuZXdfZmllbGR0eXBlIglAMjAJTk9OQU1FDQorCSJuZXdfZm9ybSIJQDEwMAlOT05BTUUNCisJIm5ld19wYWdlIglANTQJTk9OQU1FDQorCSJwb3NfZm9ybV9jdXJzb3IiCUAxMjUJTk9OQU1FDQorCSJwb3N0X2Zvcm0iCUAxMjMJTk9OQU1FDQorCSJzY2FsZV9mb3JtIglAMTE4CU5PTkFNRQ0KKwkic2V0X2N1cnJlbnRfZmllbGQiCUAxMTQJTk9OQU1FDQorCSJzZXRfZmllbGRfYmFjayIJQDQzCU5PTkFNRQ0KKwkic2V0X2ZpZWxkX2J1ZmZlciIJQDQ2CU5PTkFNRQ0KKwkic2V0X2ZpZWxkX2ZvcmUiCUA0MglOT05BTUUNCisJInNldF9maWVsZF9pbml0IglAMTIxCU5PTkFNRQ0KKwkic2V0X2ZpZWxkX2p1c3QiCUA0MAlOT05BTUUNCisJInNldF9maWVsZF9vcHRzIglANDkJTk9OQU1FDQorCSJzZXRfZmllbGRfcGFkIglANDQJTk9OQU1FDQorCSJzZXRfZmllbGRfc3RhdHVzIglANDcJTk9OQU1FDQorCSJzZXRfZmllbGRfdGVybSIJQDEyMglOT05BTUUNCisJInNldF9maWVsZF90eXBlIglAMzgJTk9OQU1FDQorCSJzZXRfZmllbGRfdXNlcnB0ciIJQDQ4CU5PTkFNRQ0KKwkic2V0X2ZpZWxkdHlwZV9hcmciCUAyMwlOT05BTUUNCisJInNldF9maWVsZHR5cGVfY2hvaWNlIglAMjQJTk9OQU1FDQorCSJzZXRfZm9ybV9maWVsZHMiCUAxMTAJTk9OQU1FDQorCSJzZXRfZm9ybV9pbml0IglAMTE5CU5PTkFNRQ0KKwkic2V0X2Zvcm1fb3B0cyIJQDEyOAlOT05BTUUNCisJInNldF9mb3JtX3BhZ2UiCUAxMTYJTk9OQU1FDQorCSJzZXRfZm9ybV9zdWIiCUAxMTMJTk9OQU1FDQorCSJzZXRfZm9ybV90ZXJtIglAMTIwCU5PTkFNRQ0KKwkic2V0X2Zvcm1fdXNlcnB0ciIJQDEyNwlOT05BTUUNCisJInNldF9mb3JtX3dpbiIJQDExMglOT05BTUUNCisJInNldF9tYXhfZmllbGQiCUAzNglOT05BTUUNCisJInNldF9uZXdfcGFnZSIJQDM5CU5PTkFNRQ0KKwkidW5wb3N0X2Zvcm0iCUAxMjQJTk9OQU1FDQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9mb3JtLnJlZiBiL25jdXJzZXMtNS43L21pc2MvZm9ybS5yZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNjVhNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvZm9ybS5yZWYKQEAgLTAsMCArMSwxMDYgQEAKK0xJQlJBUlkgRk9STTIgSU5JVElOU1RBTkNFDQorREVTQ1JJUFRJT04gJ05DdXJzZXMgMS45LjllLTEgZm9yIE9TLzIgLSBmb3JtcyBsaWJyYXJ5Jw0KK0VYUE9SVFMNCis7DQorOyBTSEFSRUQgVkFSSUFCTEVTDQorOw0KKwkiVFlQRV9BTFBIQSIJCUAxCTtOT05BTUUNCisJIlRZUEVfQUxOVU0iCQlAMgk7Tk9OQU1FDQorCSJUWVBFX0VOVU0iCQlAMwk7Tk9OQU1FDQorCSJUWVBFX0lOVEVHRVIiCQlANAk7Tk9OQU1FDQorCSJUWVBFX05VTUVSSUMiCQlANQk7Tk9OQU1FDQorCSJUWVBFX1JFR0VYUCIJCUA2CTtOT05BTUUNCisNCisJIl9uY19EZWZhdWx0X0Zvcm0iCUAxMAk7Tk9OQU1FDQorCSJfbmNfRGVmYXVsdF9GaWVsZCIJQDExCTtOT05BTUUNCisNCis7DQorOyBGSUVMRCBGVU5DVElPTlMNCis7DQorCSJuZXdfZmllbGR0eXBlIgkJQDIwCTtOT05BTUUNCisJImxpbmtfZmllbGR0eXBlIglAMjEJO05PTkFNRQ0KKw0KKwkiZnJlZV9maWVsZHR5cGUiCUAyMgk7Tk9OQU1FDQorCSJzZXRfZmllbGR0eXBlX2FyZyIJQDIzCTtOT05BTUUNCisJInNldF9maWVsZHR5cGVfY2hvaWNlIglAMjQJO05PTkFNRQ0KKw0KKwkibmV3X2ZpZWxkIgkJQDMwCTtOT05BTUUNCisJImR1cF9maWVsZCIJCUAzMQk7Tk9OQU1FDQorCSJsaW5rX2ZpZWxkIgkJQDMyCTtOT05BTUUNCisNCisJImZyZWVfZmllbGQiCQlAMzMJO05PTkFNRQ0KKwkiZmllbGRfaW5mbyIJCUAzNAk7Tk9OQU1FDQorCSJkeW5hbWljX2ZpZWxkX2luZm8iCUAzNQk7Tk9OQU1FDQorCSJzZXRfbWF4X2ZpZWxkIgkJQDM2CTtOT05BTUUNCisJIm1vdmVfZmllbGQiCQlAMzcJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX3R5cGUiCUAzOAk7Tk9OQU1FDQorCSJzZXRfbmV3X3BhZ2UiCQlAMzkJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX2p1c3QiCUA0MAk7Tk9OQU1FDQorCSJmaWVsZF9qdXN0IgkJQDQxCTtOT05BTUUNCisJInNldF9maWVsZF9mb3JlIglANDIJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX2JhY2siCUA0Mwk7Tk9OQU1FDQorCSJzZXRfZmllbGRfcGFkIgkJQDQ0CTtOT05BTUUNCisJImZpZWxkX3BhZCIJCUA0NQk7Tk9OQU1FDQorCSJzZXRfZmllbGRfYnVmZmVyIglANDYJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX3N0YXR1cyIJQDQ3CTtOT05BTUUNCisJInNldF9maWVsZF91c2VycHRyIglANDgJO05PTkFNRQ0KKwkic2V0X2ZpZWxkX29wdHMiCUA0OQk7Tk9OQU1FDQorCSJmaWVsZF9vcHRzX29uIgkJQDUwCTtOT05BTUUNCisJImZpZWxkX29wdHNfb2ZmIglANTEJO05PTkFNRQ0KKw0KKwkiZmllbGRfZm9yZSIJCUA1Mgk7Tk9OQU1FDQorCSJmaWVsZF9iYWNrIgkJQDUzCTtOT05BTUUNCisNCisJIm5ld19wYWdlIgkJQDU0CTtOT05BTUUNCisJImZpZWxkX3N0YXR1cyIJCUA1NQk7Tk9OQU1FDQorCSJmaWVsZF9hcmciCQlANTYJO05PTkFNRQ0KKwkiZmllbGRfdXNlcnB0ciIJCUA1Nwk7Tk9OQU1FDQorCSJmaWVsZF90eXBlIgkJQDU4CTtOT05BTUUNCisJImZpZWxkX2J1ZmZlciIJCUA1OQk7Tk9OQU1FDQorCSJmaWVsZF9vcHRzIgkJQDYwCTtOT05BTUUNCisNCis7DQorOyBGT1JNIEZVTkNUSU9OUw0KKzsNCisJIm5ld19mb3JtIgkJQDEwMAk7Tk9OQU1FDQorDQorCSJmb3JtX2ZpZWxkcyIJCUAxMDEJO05PTkFNRQ0KKwkiY3VycmVudF9maWVsZCIJCUAxMDIJO05PTkFNRQ0KKw0KKwkiZm9ybV93aW4iCQlAMTAzCTtOT05BTUUNCisJImZvcm1fc3ViIgkJQDEwNAk7Tk9OQU1FDQorDQorCSJmb3JtX2luaXQiCQlAMTA1CTtOT05BTUUNCisJImZvcm1fdGVybSIJCUAxMDYJO05PTkFNRQ0KKwkiZmllbGRfaW5pdCIJCUAxMDcJO05PTkFNRQ0KKwkiZmllbGRfdGVybSIJCUAxMDgJO05PTkFNRQ0KKw0KKwkiZnJlZV9mb3JtIgkJQDEwOQk7Tk9OQU1FDQorCSJzZXRfZm9ybV9maWVsZHMiIEAxMTAJO05PTkFNRQ0KKwkiZmllbGRfY291bnQiCQlAMTExCTtOT05BTUUNCisJInNldF9mb3JtX3dpbiIJCUAxMTIJO05PTkFNRQ0KKwkic2V0X2Zvcm1fc3ViIgkJQDExMwk7Tk9OQU1FDQorCSJzZXRfY3VycmVudF9maWVsZCIJQDExNAk7Tk9OQU1FDQorCSJmaWVsZF9pbmRleCIJCUAxMTUJO05PTkFNRQ0KKwkic2V0X2Zvcm1fcGFnZSIJCUAxMTYJO05PTkFNRQ0KKwkiZm9ybV9wYWdlIgkJQDExNwk7Tk9OQU1FDQorCSJzY2FsZV9mb3JtIgkJQDExOAk7Tk9OQU1FDQorCSJzZXRfZm9ybV9pbml0IgkJQDExOQk7Tk9OQU1FDQorCSJzZXRfZm9ybV90ZXJtIgkJQDEyMAk7Tk9OQU1FDQorCSJzZXRfZmllbGRfaW5pdCIJQDEyMQk7Tk9OQU1FDQorCSJzZXRfZmllbGRfdGVybSIJQDEyMgk7Tk9OQU1FDQorCSJwb3N0X2Zvcm0iCQlAMTIzCTtOT05BTUUNCisJInVucG9zdF9mb3JtIgkJQDEyNAk7Tk9OQU1FDQorCSJwb3NfZm9ybV9jdXJzb3IiIAlAMTI1CTtOT05BTUUNCisJImZvcm1fZHJpdmVyIgkJQDEyNgk7Tk9OQU1FDQorCSJzZXRfZm9ybV91c2VycHRyIglAMTI3CTtOT05BTUUNCisJInNldF9mb3JtX29wdHMiCQlAMTI4CTtOT05BTUUNCisJImZvcm1fb3B0c19vbiIJCUAxMjkJO05PTkFNRQ0KKwkiZm9ybV9vcHRzX29mZiIJCUAxMzAJO05PTkFNRQ0KKw0KKwkiZm9ybV91c2VycHRyIgkJQDEzMQk7Tk9OQU1FDQorDQorCSJmb3JtX29wdHMiCQlAMTMyCTtOT05BTUUNCisNCisJImRhdGFfYWhlYWQiCQlAMTMzCTtOT05BTUUNCisJImRhdGFfYmVoaW5kIgkJQDEzNAk7Tk9OQU1FDQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9nZW5fZWRpdC5zaCBiL25jdXJzZXMtNS43L21pc2MvZ2VuX2VkaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjBhYTcyYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvZ2VuX2VkaXQuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQorIworIyAkSWQ6IGdlbl9lZGl0LnNoLHYgMS4xIDIwMDQvMDcvMTEgMTU6MDE6MjkgdG9tIEV4cCAkCisjIEdlbmVyYXRlIGEgc2VkLXNjcmlwdCBmb3IgY29udmVydGluZyB0aGUgdGVybWluZm8uc3JjIHRvIHRoZSBmb3JtIHdoaWNoIHdpbGwKKyMgYmUgaW5zdGFsbGVkLgorIworIyBBc3N1bWVzOgorIwlUaGUgbGVhZiBkaXJlY3RvcnkgbmFtZXMgKGxpYiwgdGFic2V0LCB0ZXJtaW5mbykKKyMKKworOiAke3RpY2Rpcj1AVEVSTUlORk9AfQorOiAke3h0ZXJtX25ldz1AV0hJQ0hfWFRFUk1AfQorCisjIElmIHdlJ3JlIG5vdCBpbnN0YWxsaW5nIGludG8gL3Vzci9zaGFyZS8sIHdlJ2xsIGhhdmUgdG8gYWRqdXN0IHRoZSBsb2NhdGlvbgorIyBvZiB0aGUgdGFic2V0IGZpbGVzIGluIHRlcm1pbmZvLnNyYyAod2hpY2ggYXJlIGluIGEgcGFyYWxsZWwgZGlyZWN0b3J5KS4KK1RBQlNFVD1gZWNobyAkdGljZGlyIHwgc2VkIC1lICdzJS90ZXJtaW5mbyQlL3RhYnNldCUnYAoraWYgdGVzdCAieCRUQUJTRVQiICE9ICJ4L3Vzci9zaGFyZS90YWJzZXQiIDsgdGhlbgorY2F0IDw8RU9GCitzJS91c3Ivc2hhcmUvdGFic2V0JSRUQUJTRVQlZworRU9GCitmaQorCitpZiB0ZXN0ICIkeHRlcm1fbmV3IiAhPSAieHRlcm0tbmV3IiA7IHRoZW4KK2NhdCA8PEVPRgorL14jIFRoaXMgaXMgeHRlcm0gZm9yIG5jdXJzZXMvLC9eJC97CisJcy91c2U9eHRlcm0tbmV3LC91c2U9JFdISUNIX1hURVJNLC8KK30KK0VPRgorZmkKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21pc2MvanBmLWluZGVudCBiL25jdXJzZXMtNS43L21pc2MvanBmLWluZGVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZGQ4MjVjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9qcGYtaW5kZW50CkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSwyMDA2IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisjKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorIyogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyMqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisjKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorIyogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyMqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyMqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyMqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisjKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorIyogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyMqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisjKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorIyogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorIyogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyMqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisjKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjICRJZDoganBmLWluZGVudCx2IDEuNiAyMDA2LzAyLzE4IDE3OjA3OjE1IHRvbSBFeHAgJAorIyBpbmRlbnQgbmN1cnNlcyBzb3VyY2Ugd3JpdHRlbiBieSBKdWVyZ2VuIFBmZWlmZXIKK05PT1A9bm8KK09QVFM9JworLW5wcm8KKy0tYmxhbmstbGluZXMtYWZ0ZXItZGVjbGFyYXRpb25zCistLWJsYW5rLWxpbmVzLWFmdGVyLXByb2NlZHVyZXMKKy0tYnJhY2UtaW5kZW50MgorLS1icmFjZXMtYWZ0ZXItaWYtbGluZQorLS1jb250aW51ZS1hdC1wYXJlbnRoZXNlcworLS1pbmRlbnQtbGV2ZWwyCistLWxpbmUtbGVuZ3RoODAKKy0tbm8tc3BhY2UtYWZ0ZXItY2FzdHMKKy0tbm8tc3BhY2UtYWZ0ZXItZnVuY3Rpb24tY2FsbC1uYW1lcworLS1wYXJhbWV0ZXItaW5kZW50YXRpb240CistLXN3YWxsb3ctb3B0aW9uYWwtYmxhbmstbGluZXMKKy0tdGFiLXNpemU4CisKKy1UIEZJRUxECistVCBGSUVMRFRZUEUKKy1UIEZJRUxEX0NFTEwKKy1UIEZPUk0KKy1UIE5DVVJTRVNfSU5MSU5FCistVCBSZWdFeHBfQXJnIAorLVQgVHlwZUFyZ3VtZW50IAorLVQgV0lORE9XCistVCBhdHRyX3QKKy1UIGJvb2wKKy1UIGNjaGFyX3QKKy1UIGNodHlwZQorLVQgZW51bUFSRworLVQgdmFfbGlzdAorLVQgd2NoYXJfdCAKKycKK2ZvciBuYW1lIGluICQqCitkbworCWNhc2UgJG5hbWUgaW4KKwktdnwtbikKKwkJTk9PUD15ZXMKKwkJT1BUUz0iJE9QVFMgLXYiCisJCTs7CisJLSopCisJCU9QVFM9IiRPUFRTICRuYW1lIgorCQk7OworCSouW2NoXSkKKwkJc2F2ZT0iJHtuYW1lfSIuYSQkCisJCXRlc3Q9IiR7bmFtZX0iLmIkJAorCQlybSAtZiAiJHNhdmUiICIkdGVzdCIKKwkJbXYgIiRuYW1lIiAiJHNhdmUiCisJCXNlZCBcCisJCQktZSAnL01PRFVMRV9JRCgvcy8pJC8pOy8nIFwKKwkJCS1lICdzLFw8R0NDX05PUkVUVVJOOyw7Ly9HQ0NfTk9SRVRVUk47LCcgXAorCQkJLWUgJ3MsXDxHQ0NfUFJJTlRGTElLRSgsOy8vR0NDX1BSSU5URkxJS0UoLCcgXAorCQkJLWUgJ3MsXDxHQ0NfU0NBTkZMSUtFKCw7Ly9HQ0NfU0NBTkZMSUtFKCwnIFwKKwkJCS1lICdzLFwoXDxOQ1VSU0VTX0VYUE9SVF9WQVJcPlwpLC8vXDEsJyBcCisJCQkiJHNhdmUiID4iJHRlc3QiCisJCWNwICIkdGVzdCIgIiRuYW1lIgorCQljaG1vZCB1K3cgIiRuYW1lIgorCQkjICR7SU5ERU5UX1BST0ctaW5kZW50fSAtLXZlcnNpb24KKwkJJHtJTkRFTlRfUFJPRy1pbmRlbnR9IC1ucHJvICRPUFRTICIkbmFtZSIKKwkJc2VkIFwKKwkJCS1lICcvTU9EVUxFX0lEKC9zLyk7JC8pLycgXAorCQkJLWUgJ3MsO1sgCV0qLy9HQ0NfTk9SRVRVUk47LCBHQ0NfTk9SRVRVUk47LCcgXAorCQkJLWUgJ3MsO1sgCV0qLy9HQ0NfUFJJTlRGTElLRSgsIEdDQ19QUklOVEZMSUtFKCwnIFwKKwkJCS1lICdzLDtbIAldKi8vR0NDX1NDQU5GTElLRSgsIEdDQ19TQ0FORkxJS0UoLCcgXAorCQkJLWUgJ3MsLy9cKFw8TkNVUlNFU19FWFBPUlRfVkFSXD5cKSxcMSwnIFwKKwkJCSIkbmFtZSIgPiIkdGVzdCIKKwkJbXYgIiR0ZXN0IiAiJG5hbWUiCisJCXJtIC1mICIke25hbWV9fiIKKwkJaWYgdGVzdCAkTk9PUCA9IHllcyA7IHRoZW4KKwkJCWlmIChjbXAgLXMgIiRuYW1lIiAiJHNhdmUiICkgdGhlbgorCQkJCWVjaG8gIioqIG5vIGNoYW5nZTogJG5hbWUiCisJCQllbHNlCisJCQkJZGlmZiAtdSAiJHNhdmUiICIkbmFtZSIKKwkJCWZpCisJCQlybSAtZiAiJG5hbWUiCisJCQltdiAiJHNhdmUiICIkbmFtZSIKKwkJZWxpZiAoIGNtcCAtcyAiJG5hbWUiICIkc2F2ZSIgKSA7IHRoZW4KKwkJCWVjaG8gIioqIHVuY2hhbmdlZCAkbmFtZSIKKwkJCXJtIC1mICIke25hbWV9IgorCQkJbXYgIiRzYXZlIiAiJG5hbWUiCisJCWVsc2UKKwkJCWVjaG8gIioqIHVwZGF0ZWQgJG5hbWUiCisJCQlybSAtZiAiJHNhdmUiCisJCWZpCisJCTs7CisJKikKKwkJZWNobyAiKiogaWdub3JlZDogICAkbmFtZSIKKwkJOzsKKwllc2FjCitkb25lCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9taXNjL21ha2VkZWYuY21kIGIvbmN1cnNlcy01LjcvbWlzYy9tYWtlZGVmLmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGEzNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9tYWtlZGVmLmNtZApAQCAtMCwwICsxLDE3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoNCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKg0KKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqDQorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoNCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKg0KKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqDQorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqDQorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqDQorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoNCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKg0KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqDQorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoNCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKg0KKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKg0KKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqDQorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoNCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qDQorICogJElkOiBtYWtlZGVmLmNtZCx2IDEuNSAyMDA2LzA0LzIyIDIzOjE0OjUwIHRvbSBFeHAgJA0KKyAqDQorICogQXV0aG9yOiAgSnVhbiBKb3NlIEdhcmNpYSBSaXBvbGwgPHdvcm1AYXJyYWtpcy5lcz4uDQorICogV2VicGFnZTogaHR0cDovL3d3dy5hcnJha2lzLmVzL353b3JtLw0KKyAqDQorICogbWFrZWRlZi5jbWQgLSB1cGRhdGUgYSBETEwgZXhwb3J0IGxpc3QgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxpYnJhcnkgZmlsZQ0KKyAqCQkgaW4gYS5vdXQgZm9ybWF0LCBwbHVzIGFuIG9sZCAuREVGIGZpbGUuDQorICoNCisgKiBzdGFuZGFyZCBvdXRwdXQgZ2V0cyBhIHNvcnRlZCBsaXN0IHdpdGggYWxsIGVudHJ5cG9pbnRzIHdpdGggZW50cnljb2Rlcy4NCisgKiBUaGlzIGxpc3QsIHBsdXMgYSBmZXcgLmRlZiBzZW50ZW5jZXMgKExJQlJBUlksIERFU0NSSVBUSU9OIGFuZCBFWFBPUlQpDQorICogaXMgdXNlZCB0byBidWlsZCBhIG5ldyAuZGVmIGZpbGUuDQorICoNCisgKiBgX25jXyonIHN5bWJvbHMgYXJlIGlnbm9yZWQuDQorICoNCisgKiByZXR1cm5zIDEgd2hlbiB0aGUgb2xkIGRlZl9maWxlIGlzIGNvcnJ1cHRlZCAtLSB0aGF0IGlzLCBleHBvcnQgaXRlbXMgYXJlDQorICogbm90IHByb3Blcmx5IGZvcm1hdHRlZC4NCisgKg0KKyAqIHJldHVybnMgMCBpZiBldmVyeXRoaW5nIHdlbnQgT0suDQorICovDQorDQorcGFyc2UgYXJnIGxpYl9maWxlIGRlZl9maWxlDQorDQorbGliX2ZpbGUgPSB0cmFuc2xhdGUobGliX2ZpbGUsJ1wnLCcvJykNCitkZWZfZmlsZSA9IHRyYW5zbGF0ZShkZWZfZmlsZSwnXCcsJy8nKQ0KKw0KK2NhbGwgQ2xlYW5RdWV1ZQ0KKw0KKy8qDQorICogYGNvZGVzJyBpcyB0aGUgc3RlbSB0aGF0IGxpbmtzIGEgY29kZSB0byBldmVyeSBzeW1ib2wNCisgKiBgbmFtZXMnIGlzIHRoZSBzdGVtIHdoZXJlIHN5bWJvbHMgYXJlIHN0b3JlZCBzZXF1ZW50aWFsbHkNCisgKiBgbGFzdCcgaXMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN5bWJvbCBkZWZpbmVkDQorICovDQorbGFzdCAgID0gMA0KK3VzZWQuICA9IDANCitjb2Rlcy4gPSAwDQorbmFtZXMuID0gJycNCisNCit0bXBfbmFtZSA9ICdmb28udG1wJw0KKw0KKy8qDQorICogVGhpcyBzZWQgZXhwcmVzc2lvbiBjbGVhbnMgZW1wdHkgbGluZXMsIGNvbW1lbnRzIGFuZCBzcGVjaWFsIC5ERUYNCisgKiBjb21tYW5kcywgc3VjaCBhcyBMSUJSQVJZLi4uLCBFWFBPUlRTLi4uLCBldGMNCisgKi8NCit0aWR5X3VwICA9ICciL15bQS1aXS9kO3MvWyAJXVsgCV0qLyAvZztzLzsuKiQvL2c7cy9eWyBdKi8vZzsvXlsgXSokL2QiJw0KKw0KKy8qDQorICogRmlyc3Qgd2UgZmluZCBhbGwgcHVibGljIHN5bWJvbHMgKGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzKS4gTmV4dCB3ZQ0KKyAqIGNvbmNhdGVuYXRlIHRoaXMgbGlzdCB3aXRoIHRoZSBvbGQgb25lLCBzb3J0aW5nIGl0IGFuZCB3aXBpbmcgb3V0DQorICogYWxsIHVudXNlZCBkYXRhIChjb21tZW50cywgRExMIGRpcmVjdGl2ZXMsIGJsYW5rcywgZXRjKS4gQWxsIHRoaXMNCisgKiBpbmZvcm1hdGlvbiBpcyBwdXNoZWQgaW50byBhIFJFWFggcHJpdmF0ZSBsaXN0IHdpdGggdGhlIFJYUVVFVUUNCisgKiB1dGlsaXR5IHByb2dyYW0uDQorICovDQorJ0BlY2hvIG9mZicNCisnZW14ZXhwIC11JyBsaWJfZmlsZSAnPicgdG1wX25hbWUNCisnY2F0JyB0bXBfbmFtZSBkZWZfZmlsZSAnfCBzZWQnIHRpZHlfdXAgJ3wgc29ydCA+IGZvbzIudG1wJw0KKyd0eXBlIGZvbzIudG1wIHwgcnhxdWV1ZScNCisnZGVsJyB0bXBfbmFtZSAnMT5OVUwnDQorDQorLyoNCisgKiBUaGlzIGxvb3AgcnVucyBvdmVyIHRoZSBxdWV1ZSBpdGVtcw0KKyAqLw0KK2RvIHdoaWxlIHF1ZXVlZCgpID4gMA0KKyAgIC8qDQorICAgICogV2UgcmV0cmlldmUgdGhlIHN5bWJvbCBuYW1lIChORVdfTkFNRSkgYW5kIGl0cyBudW1iZXIgKE5FV19OVU1CRVIpDQorICAgICogV2hlbiB0aGUgbGluZSBjb21lcyBmcm9tIGBlbXhpbXAncyBvdXRwdXQsIHRoZXJlJ3Mgbm8gbnVtYmVyLCBzbw0KKyAgICAqIHdlIGFzc2lnbiBpdCB0aGUgc3BlY2lhbCB2YWx1ZSAwLg0KKyAgICAqLw0KKyAgIHBhcnNlIHB1bGwgbmV3X3N5bWJvbCAnQCduZXdfY29kZSByZXN0DQorICAgaWYgTGVmdChuZXdfc3ltYm9sLDEpID0gJyInIHRoZW4NCisgICAgICBwYXJzZSB2YXIgbmV3X3N5bWJvbCAnIicgbmV3X25hbWUgJyInIHJlc3QNCisgICBlbHNlDQorICAgICAgZG8NCisgICAgICBlY2hvICdTeW1ib2wgJ25ld19zeW1ib2wnIHdhcyBub3QgcXVvdGVkJw0KKyAgICAgIG5ld19uYW1lID0gbmV3X3N5bWJvbA0KKyAgICAgIGVuZA0KKw0KKyAgIGlmIG5ld19jb2RlID0gJycgdGhlbg0KKyAgICAgIG5ld19jb2RlID0gMA0KKyAgIC8qDQorICAgICogSGVyZSwgb25lIHdvdWxkIHBsYWNlIGFsbCBzbWFydCBjaGVja3MgdGhhdCB3b3VsZCBraWxsIHVudXNlZCBzeW1ib2xzLg0KKyAgICAqIEhvd2V2ZXIsIGV4cG9ydCB0YWJsZXMgYXJlIG5vdCB0aGF0IGJpZywgc28gd2h5IGJvdGhlcmluZz8NCisgICBpZiBMZWZ0KG5ld19uYW1lLDQpID0gJ19uY18nIHRoZW4NCisgICAgICBpdGVyYXRlDQorICAgICovDQorICAgLyoNCisgICAgKiBUaGUgYWxnb3JpdGhtOg0KKyAgICAqCUlGICh0aGlzIGlzIHRoZSAybmQgdGltZSB0aGUgc3ltYm9sIGFwcGVhcnMpIFRIRU4NCisgICAgKgkJKHRoaXMgc3ltYm9sIGNvbWVzIGZyb20gYSAuREVGIGZpbGUpDQorICAgICoJCWl0IGhhcyBhIHZhbGlkIGNvZGUgdGhhdCB3ZSBzdG9yZQ0KKyAgICAqCQl3ZSBtYXJrIHRoYXQgY29kZSBhcyB1c2VkDQorICAgICogICBFTElGIChpdCBoYXMgbm8gbnVtYmVyKSBUSEVODQorICAgICoJCShpdCdzIGEgbmV3IHN5bWJvbCkNCisgICAgKgkJd2UgaW5jcmVhc2UgdGhlIGNvdW50ZXIgb2YgZGVmaW5lZCBzeW1ib2xzDQorICAgICoJCXdlIGFzc2lnbiBpdCB0aGUgc3BlY2lhbCBudW1iZXIgMA0KKyAgICAqCQkobGF0ZXIgb24gaXQnbGwgYmUgYXNzaWduZWQgYW4gdW51c2VkIGV4cG9ydCBjb2RlKQ0KKyAgICAqICAgRUxTRQ0KKyAgICAqCQl0aGlzIHN5bWJvbCB3YXMgaW4gdGhlIG9sZCBETEwgYW5kIGl0J3Mgbm8gbG9uZ2VyDQorICAgICoJCWhlcmUsIHNvIHdlIHNraXAgaXQuDQorICAgICovDQorICAgc2VsZWN0DQorICAgICAgd2hlbiBuZXdfbmFtZSA9ICcnIHRoZW4NCisgICAgICAgICAnZWNobyBXYXJuaW5nOiBlbXB0eSBzeW1ib2wgZm91bmQgMT4mMicNCisgICAgICB3aGVuIG5hbWVzLmxhc3QgPSBuZXdfbmFtZSB0aGVuDQorICAgICAgICAgZG8NCisgICAgICAgICBjb2Rlcy5sYXN0ID0gbmV3X2NvZGUNCisgICAgICAgICB1c2VkLm5ld19jb2RlID0gMQ0KKyAgICAgICAgIGVuZA0KKyAgICAgIHdoZW4gbmV3X2NvZGUgPSAwIHRoZW4NCisgICAgICAgICBkbw0KKyAgICAgICAgIGxhc3QgPSBsYXN0ICsgMQ0KKyAgICAgICAgIG5hbWVzLmxhc3QgPSBuZXdfbmFtZQ0KKyAgICAgICAgIGNvZGVzLmxhc3QgPSAwDQorICAgICAgICAgZW5kDQorICAgb3RoZXJ3aXNlDQorICAgICAgJ2VjaG8gV2FybmluZzogc3ltYm9sICInbmV3X25hbWUnIiBoYXMgZGlzYXBwZWFyZWQgMT4mMicNCisgICBlbmQgLyogc2VsZWN0ICovDQorZW5kIC8qIGRvIHdoaWxlIHF1ZXVlZCgpICovDQorDQorLyoNCisgKiBGaW5hbGx5IHdlIHNjYW4gdGhlIHN0ZW0sIHdyaXRpbmcgb3V0IGFsbCBzeW1ib2xzIHdpdGggZXhwb3J0IGNvZGVzLg0KKyAqIFRob3NlIHRoYXQgZGlkIG5vdCBoYXZlIGEgdmFsaWQgb25lIChqdXN0IDApIGFyZSBhc3NpZ25lZCBhIG5ldyBvbmUuDQorICovDQorbmV3X2NvZGUgPSAxDQoraW54ID0gMQ0KK2RvIHdoaWxlIGlueCA8PSBsYXN0DQorICAgaWYgY29kZXMuaW54ID0gMCB0aGVuDQorICAgICAgZG8NCisgICAgICBkbyB3aGlsZSB1c2VkLm5ld19jb2RlIFw9IDANCisgICAgICAgICBuZXdfY29kZSA9IG5ld19jb2RlICsgMQ0KKyAgICAgIGVuZA0KKyAgICAgIGNvZGVzLmlueCA9IG5ld19jb2RlDQorICAgICAgdXNlZC5uZXdfY29kZSA9IDENCisgICAgICBlbmQNCisgICBzYXkgJwkiJ25hbWVzLmlueCciCUAnY29kZXMuaW54JwlOT05BTUUnDQorICAgaW54ID0gaW54ICsgMQ0KK2VuZA0KKydkZWwgZm9vMi50bXAgMT5OVUwnDQorZXhpdCAwDQorDQorLyoNCisgKiBDbGVhbnMgdGhlIFJFWFggcXVldWUgYnkgcHVsbGluZyBhbmQgZm9yZ2V0dGluZyBldmVyeSBsaW5lLg0KKyAqIFRoaXMgaXMgbmVlZGVkLCBhdCBsZWFzdCwgd2hlbiBgbWFrZWRlZi5jbWQnIHN0YXJ0cywgYmVjYXVzZSBhbiBhYm9ydGVkDQorICogUkVYWCBwcm9ncmFtIG1pZ2h0IGhhdmUgbGVmdCBzb21lIHJ1YmJpc2ggaW4uDQorICovDQorQ2xlYW5RdWV1ZTogcHJvY2VkdXJlDQorICAgZG8gd2hpbGUgcXVldWVkKCkgPiAwDQorICAgICAgcGFyc2UgcHVsbCBmb28NCisgICBlbmQNCityZXR1cm4NCisNCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9taXNjL21ha2VsbGliIGIvbmN1cnNlcy01LjcvbWlzYy9tYWtlbGxpYgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNDYwNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9tYWtlbGxpYgpAQCAtMCwwICsxLDE2NyBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LDE5OTcsMjAwMAorIworIyAkSWQ6IG1ha2VsbGliLHYgMS44IDIwMDAvMTAvMjggMjE6Mzc6MTAgdG9tIEV4cCAkCisjIFN5c3RlbS1kZXBlbmRlbnQgd3JhcHBlciBmb3IgJ2xpbnQnIHRoYXQgY3JlYXRlcyBhIGxpbnQtbGlicmFyeSB2aWEgdGhlCisjIGZvbGxvd2luZyBtZXRob2QgKFhYWCBpcyB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSk6CisjCWEuICBJZiB0aGUgZmlsZSBsbGliLWxYWFggZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0IHVzaW5nIHRoZSBtYWtlLXJ1bGUKKyMJYi4gIFByb2Nlc3MgbGxpYi1sWFhYIHdpdGggdGhlIHN5c3RlbSdzIGxpbnQgdXRpbGl0eSwgbWFraW5nCisjCSAgICBsbGliLWxYWFgubG4KKyMJYy4gIEluc3RhbGwgbGxpYi1sWFhYLmxuIGluIHRoZSBsaWIgZGlyZWN0b3J5LgorIworIyBVc2luZyB0aGUgaW50ZXJtZWRpYXRlIGZpbGUgbGxpYi1sWFhYIGJ5cGFzc2VzIGEgd2Vha25lc3Mgb2YgbGludCAocGFzc2luZworIyB0aHJvdWdoIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgb3JpZ2luYWwgc291cmNlLWZpbGVzKS4KKyMKKyMgVGhlcmUgYXJlIHR3byBkcmF3YmFja3MgdG8gdGhpcyBhcHByb2FjaDoKKyMJYS4gIE9uIGEgZmV3IHN5c3RlbXMsIHlvdSdsbCBoYXZlIHRvIG1hbnVhbGx5LWVkaXQgdGhlIGxsaWItbFhYWCBmaWxlCisjCSAgICB0byBnZXQgYSB1c2FibGUgbGludC1saWJyYXJ5IChub3QgYWxsIEMtcHJlcHJvY2Vzc29ycyB3b3JrIHdlbGwpLgorIwliLiAgVGhlIHN5c3RlbSdzIGxpbnQgdXRpbGl0eSB3b24ndCByZWNvZ25pemUgLWxYWFggYXMgYSBsaW50LWxpYnJhcnkKKyMJICAgIChVc2UgdGRsaW50IGFzIGEgd3JhcHBlcjsgaXQncyBkZXNpZ25lZCBmb3IgdGhpcykuCisjCisjIFBhcmFtZXRlcnM6CisjCSQxID0gbGlicmFyeSBuYW1lCisjCSQqID0gQy1wcmVwcm9jZXNzb3Igb3B0aW9ucworIworQVJDSD1gdW5hbWUgLXNgCitpZiB0ZXN0ICJ4JEFSQ0giID0gInhTdW5PUyIgOyB0aGVuCisJY2FzZSBgdW5hbWUgLXJgIGluCisJNS4qKQlBUkNIPVNvbGFyaXMKKwkJOzsKKwllc2FjCitmaQorIworRFNUPSIkSE9NRS9saWIvJEFSQ0gvbGludCIKK09QVD0iIgorTExJQj0iIgorbGxpYj0iIgorIword2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgJDEgaW4KKwktTCopCisJCURTVD0iJERTVCBgZWNobyAkMXxzZWQgLWUgJ3MvXi1MLy8nYCIKKwkJOzsKKwktKikKKwkJT1BUPSIkT1BUICQxIgorCQk7OworCSopCisJCWlmIHRlc3QgLXogIiRMTElCIgorCQl0aGVuCisJCQlMTElCPSQxCisJCWVsc2UKKwkJCWxsaWI9bGxpYi1sJDEKKwkJZmkKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJExMSUIiCit0aGVuCisJZWNobyAnPyBubyBsaWJyYXJ5IG5hbWUgc3BlY2lmaWVkJworCWV4aXQgMQorZWxpZiB0ZXN0IC16ICIkbGxpYiIKK3RoZW4KKwlsbGliPSJsbGliLWwkTExJQiIKK2ZpCisKK2lmIHRlc3QgISAtZiAkbGxpYiA7IHRoZW4KKwlpZiAoIG1ha2UgJGxsaWIgKQorCXRoZW4KKwkJOgorCWVsc2UKKwkJZXhpdCAxCisJZmkKK2ZpCisKK3JtIC1mICRsbGliLmxuICRsbGliLmMKK1RBUkdFVD0kTExJQgorCitjYXNlICIkQVJDSCIgaW4KK0FJWCkKKwlDUkVBVEU9Ii11dnhvJExMSUIgLU5uNDAwMCIKKwlUQVJHRVQ9JGxsaWIuYworCWxuICRsbGliICRUQVJHRVQKKwk7OworU29sYXJpcykKKwlDUkVBVEU9Ii1DJGxsaWIiCisJVEFSR0VUPSRsbGliLmMKKwlsbiAkbGxpYiAkVEFSR0VUCisJOzsKK0ZyZWVCU0QpCisJQ1JFQVRFPSItZyAteiAtQyRMTElCIgorCVRBUkdFVD0kbGxpYi5jCisJbG4gJGxsaWIgJFRBUkdFVAorCTs7CitDTElYKQorCUNSRUFURT0iLURMSU5UTElCUkFSWSAtdnhvJExMSUIiCisJVEFSR0VUPSRsbGliLmMKKwlsbiAkbGxpYiAkVEFSR0VUCisJOzsKK0lSSVgqKQorCUNSRUFURT0iLURMSU5UTElCUkFSWSAtdnh5byRMTElCIgorCVRBUkdFVD0kbGxpYi5jCisJbG4gJGxsaWIgJFRBUkdFVAorCTs7CitVTklYX1NWKQorCUNSRUFURT0iLURMSU5UTElCUkFSWSAtdnh5byRMTElCIgorCVRBUkdFVD0kbGxpYi5jCisJbG4gJGxsaWIgJFRBUkdFVAorCTs7CisqKQorCWVjaG8gIlNvcnJ5LiAgSSBkbyBub3Qga25vdyBob3cgdG8gYnVpbGQgYSBsaW50LWxpYnJhcnkgZm9yICRBUkNIIgorCWV4aXQgMQorZXNhYworCitlY2hvIE9QVCAgICAiJE9QVCIKK2VjaG8gVEFSR0VUICIkVEFSR0VUIgorZWNobyBMSUJOQU1FICIkbGxpYiIKK2lmICggbGludCAkQ1JFQVRFICRPUFQgJFRBUkdFVCApCit0aGVuCisJaWYgdGVzdCAtZiAkbGxpYi5sbgorCXRoZW4KKwkJZm9yIHAgaW4gJEhPTUUvbGliICRIT01FL2xpYi8kQVJDSCAkSE9NRS9saWIvJEFSQ0gvbGludAorCQlkbworCQkJaWYgdGVzdCAhIC1kICRwCisJCQl0aGVuCisJCQkJbWtkaXIgJHAKKwkJCWZpCisJCWRvbmUKKwkJZm9yIHAgaW4gJERTVAorCQlkbworCQkJY3AgJGxsaWIubG4gJHAvCisJCWRvbmUKKwkJcm0gLWYgJGxsaWIubG4KKwlmaQorZmkKK2lmIHRlc3QgIngkVEFSR0VUIiA9ICJ4JGxsaWIuYyIgOyB0aGVuCisJcm0gLWYgJFRBUkdFVAorZmkKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21pc2MvbWVudS5kZWYgYi9uY3Vyc2VzLTUuNy9taXNjL21lbnUuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjk3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9taXNjL21lbnUuZGVmCkBAIC0wLDAgKzEsODEgQEAKK0xJQlJBUlkgbWVudTUgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQ0KK0RFU0NSSVBUSU9OICJOQ3Vyc2VzLTUtMS0yMDAwMDcwNCwgbW9kdWxlIG1lbnUiDQorQ09ERSBMT0FET05DQUxMDQorREFUQSBMT0FET05DQUxMIE5PTlNIQVJFRCBNVUxUSVBMRQ0KK0VYUE9SVFMNCisJIl9uY19DYWxjdWxhdGVfSXRlbV9MZW5ndGhfYW5kX1dpZHRoIglAMTEJTk9OQU1FDQorCSJfbmNfQ29ubmVjdF9JdGVtcyIJQDM4CU5PTkFNRQ0KKwkiX25jX0RlZmF1bHRfSXRlbSIJQDYzCU5PTkFNRQ0KKwkiX25jX0RlZmF1bHRfTWVudSIJQDY0CU5PTkFNRQ0KKwkiX25jX0Rpc2Nvbm5lY3RfSXRlbXMiCUA2NQlOT05BTUUNCisJIl9uY19EcmF3X01lbnUiCUA2NglOT05BTUUNCisJIl9uY19MaW5rX0l0ZW1zIglANjcJTk9OQU1FDQorCSJfbmNfTWF0Y2hfTmV4dF9DaGFyYWN0ZXJfSW5fSXRlbV9OYW1lIglANjgJTk9OQU1FDQorCSJfbmNfTmV3X1RvcFJvd19hbmRfQ3VycmVudEl0ZW0iCUA2OQlOT05BTUUNCisJIl9uY19Qb3N0X0l0ZW0iCUA3MAlOT05BTUUNCisJIl9uY19TaG93X01lbnUiCUA3MQlOT05BTUUNCisJIl9uY19tZW51X2N1cnNvcl9wb3MiCUA3MglOT05BTUUNCisJImN1cnJlbnRfaXRlbSIJQDIJTk9OQU1FDQorCSJmcmVlX2l0ZW0iCUAyMwlOT05BTUUNCisJImZyZWVfbWVudSIJQDI0CU5PTkFNRQ0KKwkiaXRlbV9jb3VudCIJQDI1CU5PTkFNRQ0KKwkiaXRlbV9kZXNjcmlwdGlvbiIJQDE0CU5PTkFNRQ0KKwkiaXRlbV9pbmRleCIJQDI2CU5PTkFNRQ0KKwkiaXRlbV9pbml0IglANwlOT05BTUUNCisJIml0ZW1fbmFtZSIJQDE1CU5PTkFNRQ0KKwkiaXRlbV9vcHRzIglANQlOT05BTUUNCisJIml0ZW1fb3B0c19vZmYiCUAyNwlOT05BTUUNCisJIml0ZW1fb3B0c19vbiIJQDI4CU5PTkFNRQ0KKwkiaXRlbV90ZXJtIglAOAlOT05BTUUNCisJIml0ZW1fdXNlcnB0ciIJQDE4CU5PTkFNRQ0KKwkiaXRlbV92YWx1ZSIJQDYwCU5PTkFNRQ0KKwkiaXRlbV92aXNpYmxlIglANjEJTk9OQU1FDQorCSJtZW51X2JhY2siCUAyMAlOT05BTUUNCisJIm1lbnVfZHJpdmVyIglAMjkJTk9OQU1FDQorCSJtZW51X2ZvcmUiCUAyMQlOT05BTUUNCisJIm1lbnVfZm9ybWF0IglANjIJTk9OQU1FDQorCSJtZW51X2dyZXkiCUAyMglOT05BTUUNCisJIm1lbnVfaW5pdCIJQDkJTk9OQU1FDQorCSJtZW51X2l0ZW1zIglAMQlOT05BTUUNCisJIm1lbnVfbWFyayIJQDE2CU5PTkFNRQ0KKwkibWVudV9vcHRzIglANglOT05BTUUNCisJIm1lbnVfb3B0c19vZmYiCUAzMAlOT05BTUUNCisJIm1lbnVfb3B0c19vbiIJQDMxCU5PTkFNRQ0KKwkibWVudV9wYWQiCUAzMglOT05BTUUNCisJIm1lbnVfcGF0dGVybiIJQDE3CU5PTkFNRQ0KKwkibWVudV9yZXF1ZXN0X2J5X25hbWUiCUA3MwlOT05BTUUNCisJIm1lbnVfcmVxdWVzdF9uYW1lIglANzQJTk9OQU1FDQorCSJtZW51X3NwYWNpbmciCUA3NQlOT05BTUUNCisJIm1lbnVfc3ViIglAMTIJTk9OQU1FDQorCSJtZW51X3Rlcm0iCUAxMAlOT05BTUUNCisJIm1lbnVfdXNlcnB0ciIJQDE5CU5PTkFNRQ0KKwkibWVudV93aW4iCUAxMwlOT05BTUUNCisJIm5ld19pdGVtIglAMwlOT05BTUUNCisJIm5ld19tZW51IglANAlOT05BTUUNCisJInBvc19tZW51X2N1cnNvciIJQDMzCU5PTkFNRQ0KKwkicG9zdF9tZW51IglAMzQJTk9OQU1FDQorCSJzY2FsZV9tZW51IglAMzUJTk9OQU1FDQorCSJzZXRfY3VycmVudF9pdGVtIglAMzYJTk9OQU1FDQorCSJzZXRfaXRlbV9pbml0IglAMzcJTk9OQU1FDQorCSJzZXRfaXRlbV9vcHRzIglAMzkJTk9OQU1FDQorCSJzZXRfaXRlbV90ZXJtIglANDAJTk9OQU1FDQorCSJzZXRfaXRlbV91c2VycHRyIglANDEJTk9OQU1FDQorCSJzZXRfaXRlbV92YWx1ZSIJQDQyCU5PTkFNRQ0KKwkic2V0X21lbnVfYmFjayIJQDQzCU5PTkFNRQ0KKwkic2V0X21lbnVfZm9yZSIJQDQ0CU5PTkFNRQ0KKwkic2V0X21lbnVfZm9ybWF0IglANDUJTk9OQU1FDQorCSJzZXRfbWVudV9ncmV5IglANDYJTk9OQU1FDQorCSJzZXRfbWVudV9pbml0IglANDcJTk9OQU1FDQorCSJzZXRfbWVudV9pdGVtcyIJQDQ4CU5PTkFNRQ0KKwkic2V0X21lbnVfbWFyayIJQDQ5CU5PTkFNRQ0KKwkic2V0X21lbnVfb3B0cyIJQDUwCU5PTkFNRQ0KKwkic2V0X21lbnVfcGFkIglANTEJTk9OQU1FDQorCSJzZXRfbWVudV9wYXR0ZXJuIglANTIJTk9OQU1FDQorCSJzZXRfbWVudV9zcGFjaW5nIglANzYJTk9OQU1FDQorCSJzZXRfbWVudV9zdWIiCUA1MwlOT05BTUUNCisJInNldF9tZW51X3Rlcm0iCUA1NAlOT05BTUUNCisJInNldF9tZW51X3VzZXJwdHIiCUA1NQlOT05BTUUNCisJInNldF9tZW51X3dpbiIJQDU2CU5PTkFNRQ0KKwkic2V0X3RvcF9yb3ciCUA1NwlOT05BTUUNCisJInRvcF9yb3ciCUA1OAlOT05BTUUNCisJInVucG9zdF9tZW51IglANTkJTk9OQU1FDQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9tZW51LnJlZiBiL25jdXJzZXMtNS43L21pc2MvbWVudS5yZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlOTY0ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvbWVudS5yZWYKQEAgLTAsMCArMSw3MyBAQAorTElCUkFSWSBNRU5VMiBJTklUSU5TVEFOQ0UNCitERVNDUklQVElPTiAnTkN1cnNlcyAxLjkuOWUtMSBmb3IgT1MvMiAtIG1lbnUgbGlicmFyeScNCitFWFBPUlRTDQorCSJtZW51X2l0ZW1zIgkJQDEJO05PTkFNRQ0KKwkiY3VycmVudF9pdGVtIgkJQDIJO05PTkFNRQ0KKwkibmV3X2l0ZW0iCQlAMwk7Tk9OQU1FDQorDQorCSJuZXdfbWVudSIJCUA0CTtOT05BTUUNCisNCisJIml0ZW1fb3B0cyIJCUA1CTtOT05BTUUNCisJIm1lbnVfb3B0cyIJCUA2CTtOT05BTUUNCisNCisJIml0ZW1faW5pdCIJCUA3CTtOT05BTUUNCisJIml0ZW1fdGVybSIJCUA4CTtOT05BTUUNCisJIm1lbnVfaW5pdCIJCUA5CTtOT05BTUUNCisJIm1lbnVfdGVybSIJCUAxMAk7Tk9OQU1FDQorDQorCSJtZW51X3N1YiIJCUAxMgk7Tk9OQU1FDQorCSJtZW51X3dpbiIJCUAxMwk7Tk9OQU1FDQorDQorCSJpdGVtX2Rlc2NyaXB0aW9uIglAMTQJO05PTkFNRQ0KKwkiaXRlbV9uYW1lIgkJQDE1CTtOT05BTUUNCisJIm1lbnVfbWFyayIJCUAxNgk7Tk9OQU1FDQorCSJtZW51X3BhdHRlcm4iCQlAMTcJO05PTkFNRQ0KKw0KKwkiaXRlbV91c2VycHRyIgkJQDE4CTtOT05BTUUNCisJIm1lbnVfdXNlcnB0ciIJCUAxOQk7Tk9OQU1FDQorDQorCSJtZW51X2JhY2siCQlAMjAJO05PTkFNRQ0KKwkibWVudV9mb3JlIgkJQDIxCTtOT05BTUUNCisJIm1lbnVfZ3JleSIJCUAyMgk7Tk9OQU1FDQorDQorCSJmcmVlX2l0ZW0iCQlAMjMJO05PTkFNRQ0KKwkiZnJlZV9tZW51IgkJQDI0CTtOT05BTUUNCisJIml0ZW1fY291bnQiCQlAMjUJO05PTkFNRQ0KKwkiaXRlbV9pbmRleCIJCUAyNgk7Tk9OQU1FDQorCSJpdGVtX29wdHNfb2ZmIgkJQDI3CTtOT05BTUUNCisJIml0ZW1fb3B0c19vbiIJCUAyOAk7Tk9OQU1FDQorCSJtZW51X2RyaXZlciIJCUAyOQk7Tk9OQU1FDQorCSJtZW51X29wdHNfb2ZmIgkJQDMwCTtOT05BTUUNCisJIm1lbnVfb3B0c19vbiIJCUAzMQk7Tk9OQU1FDQorCSJtZW51X3BhZCIJCUAzMgk7Tk9OQU1FDQorCSJwb3NfbWVudV9jdXJzb3IiIAlAMzMJO05PTkFNRQ0KKwkicG9zdF9tZW51IgkJQDM0CTtOT05BTUUNCisJInNjYWxlX21lbnUiCQlAMzUJO05PTkFNRQ0KKwkic2V0X2N1cnJlbnRfaXRlbSIJQDM2CTtOT05BTUUNCisJInNldF9pdGVtX2luaXQiCQlAMzcJO05PTkFNRQ0KKwkic2V0X2l0ZW1fb3B0cyIJCUAzOQk7Tk9OQU1FDQorCSJzZXRfaXRlbV90ZXJtIgkJQDQwCTtOT05BTUUNCisJInNldF9pdGVtX3VzZXJwdHIiCUA0MQk7Tk9OQU1FDQorCSJzZXRfaXRlbV92YWx1ZSIJQDQyCTtOT05BTUUNCisJInNldF9tZW51X2JhY2siCQlANDMJO05PTkFNRQ0KKwkic2V0X21lbnVfZm9yZSIJCUA0NAk7Tk9OQU1FDQorCSJzZXRfbWVudV9mb3JtYXQiIAlANDUJO05PTkFNRQ0KKwkic2V0X21lbnVfZ3JleSIJCUA0Ngk7Tk9OQU1FDQorCSJzZXRfbWVudV9pbml0IgkJQDQ3CTtOT05BTUUNCisJInNldF9tZW51X2l0ZW1zIglANDgJO05PTkFNRQ0KKwkic2V0X21lbnVfbWFyayIJCUA0OQk7Tk9OQU1FDQorCSJzZXRfbWVudV9vcHRzIgkJQDUwCTtOT05BTUUNCisJInNldF9tZW51X3BhZCIJCUA1MQk7Tk9OQU1FDQorCSJzZXRfbWVudV9wYXR0ZXJuIglANTIJO05PTkFNRQ0KKwkic2V0X21lbnVfc3ViIgkJQDUzCTtOT05BTUUNCisJInNldF9tZW51X3Rlcm0iCQlANTQJO05PTkFNRQ0KKwkic2V0X21lbnVfdXNlcnB0ciIJQDU1CTtOT05BTUUNCisJInNldF9tZW51X3dpbiIJCUA1Ngk7Tk9OQU1FDQorCSJzZXRfdG9wX3JvdyIJCUA1Nwk7Tk9OQU1FDQorCSJ0b3Bfcm93IiAJCUA1OAk7Tk9OQU1FDQorCSJ1bnBvc3RfbWVudSIJCUA1OQk7Tk9OQU1FDQorDQorCSJpdGVtX3ZhbHVlIgkJQDYwCTtOT05BTUUNCisJIml0ZW1fdmlzaWJsZSIJCUA2MQk7Tk9OQU1FDQorDQorCSJtZW51X2Zvcm1hdCIJCUA2Mgk7Tk9OQU1FDQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9uY3UtaW5kZW50IGIvbmN1cnNlcy01LjcvbWlzYy9uY3UtaW5kZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2MmExMDgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9taXNjL25jdS1pbmRlbnQKQEAgLTAsMCArMSwxMzIgQEAKKyMhL2Jpbi9zaAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMqIENvcHlyaWdodCAoYykgMjAwMS0yMDA2LDIwMDggVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyMqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisjKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorIyogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyMqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisjKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorIyogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorIyogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorIyogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyMqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisjKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorIyogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyMqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisjKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisjKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorIyogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyMqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyMgJElkOiBuY3UtaW5kZW50LHYgMS4xNyAyMDA4LzA4LzAzIDE1OjQ2OjQ0IHRvbSBFeHAgJAorTk9PUD1ubworT1BUUz0nCistLWJsYW5rLWxpbmVzLWFmdGVyLXByb2NlZHVyZXMKKy0tYnJhY2VzLW9uLWlmLWxpbmUKKy0tY29udGludWF0aW9uLWluZGVudGF0aW9uMAorLS1jb250aW51ZS1hdC1wYXJlbnRoZXNlcworLS1jdWRkbGUtZWxzZQorLS1pbmRlbnQtbGV2ZWw0CistLWxlYXZlLXByZXByb2Nlc3Nvci1zcGFjZQorLS1uby1ibGFuay1saW5lcy1hZnRlci1jb21tYXMKKy0tbm8tYmxhbmstbGluZXMtYWZ0ZXItZGVjbGFyYXRpb25zCistLW5vLXNwYWNlLWFmdGVyLWZ1bmN0aW9uLWNhbGwtbmFtZXMKKy0tcHJvY25hbWVzLXN0YXJ0LWxpbmVzCistLXNwYWNlLXNwZWNpYWwtc2VtaWNvbG9uCistLXN3YWxsb3ctb3B0aW9uYWwtYmxhbmstbGluZXMKKy0tdGFiLXNpemU4CisKKy1UIE5DVVJTRVNfRVhQT1JUX1ZBUgorLVQgTkNVUlNFU19JTkxJTkUKKy1UIFNDUkVFTgorLVQgVEVSTVRZUEUKKy1UIGF0dHJfdAorLVQgY2NoYXJfdAorLVQgY2h0eXBlCistVCBpbmxpbmUKKy1UIHdjaGFyX3QKKy1UIHdpbnRfdAorCistVCBCVUZGRVIKKy1UIENIQVJUWVBFCistVCBGSUxFCistVCBHQ0NfTk9SRVRVUk4KKy1UIExJTkUKKy1UIE1BUksKKy1UIFJFVFNJR1RZUEUgCistVCBUQlVGRgorLVQgV0lORE9XCistVCBzaXplX3QKKy1UIHZhX2xpc3QKKworLVQgQ2FyZGluYWwKKy1UIFdpZGdldAorLVQgWHRQb2ludGVyCisnCitmb3IgbmFtZSBpbiAkKgorZG8KKwljYXNlICRuYW1lIGluCisJLXZ8LW4pCisJCU5PT1A9eWVzCisJCU9QVFM9IiRPUFRTIC12IgorCQk7OworCS0qKQorCQlPUFRTPSIkT1BUUyAkbmFtZSIKKwkJOzsKKwkqLltjaF18Ki5jY3wqLmNwcCkKKwkJc2F2ZT0iJHtuYW1lfSIuYSQkCisJCXRlc3Q9IiR7bmFtZX0iLmIkJAorCQlybSAtZiAiJHNhdmUiICIkdGVzdCIKKwkJbXYgIiRuYW1lIiAiJHNhdmUiCisJCXNlZCBcCisJCQktZSAnL0VNUFRZX01PRFVMRSgvcy8pJC8pOy8nIFwKKwkJCS1lICcvTU9EVUxFX0lEKC9zLykkLyk7LycgXAorCQkJLWUgJ3MsXDxHQ0NfTk9SRVRVUk47LDsvL0dDQ19OT1JFVFVSTjssJyBcCisJCQktZSAncyxcPEdDQ19QUklOVEZMSUtFKCw7Ly9HQ0NfUFJJTlRGTElLRSgsJyBcCisJCQktZSAncyxcPEdDQ19TQ0FORkxJS0UoLDsvL0dDQ19TQ0FORkxJS0UoLCcgXAorCQkJLWUgJ3MsXChcPE5DVVJTRVNfRVhQT1JUX1ZBUlw+XCksLy9cMSwnIFwKKwkJCSIkc2F2ZSIgPiIkdGVzdCIKKwkJY3AgIiR0ZXN0IiAiJG5hbWUiCisJCWNobW9kIHUrdyAiJG5hbWUiCisJCSMgJHtJTkRFTlRfUFJPRy1pbmRlbnR9IC0tdmVyc2lvbgorCQkke0lOREVOVF9QUk9HLWluZGVudH0gLW5wcm8gJE9QVFMgIiRuYW1lIgorCQlzZWQgXAorCQkJLWUgJy9FTVBUWV9NT0RVTEUoL3MvKTskLykvJyBcCisJCQktZSAnL01PRFVMRV9JRCgvcy8pOyQvKS8nIFwKKwkJCS1lICdzLDtbIAldKi8vR0NDX05PUkVUVVJOOywgR0NDX05PUkVUVVJOOywnIFwKKwkJCS1lICdzLDtbIAldKi8vR0NDX1BSSU5URkxJS0UoLCBHQ0NfUFJJTlRGTElLRSgsJyBcCisJCQktZSAncyw7WyAJXSovL0dDQ19TQ0FORkxJS0UoLCBHQ0NfU0NBTkZMSUtFKCwnIFwKKwkJCS1lICdzLC8vXChcPE5DVVJTRVNfRVhQT1JUX1ZBUlw+XCksXDEsJyBcCisJCQkiJG5hbWUiID4iJHRlc3QiCisJCW12ICIkdGVzdCIgIiRuYW1lIgorCQlybSAtZiAiJHtuYW1lfX4iCisJCWlmIHRlc3QgJE5PT1AgPSB5ZXMgOyB0aGVuCisJCQlpZiAoY21wIC1zICIkbmFtZSIgIiRzYXZlIiApIHRoZW4KKwkJCQllY2hvICIqKiBubyBjaGFuZ2U6ICRuYW1lIgorCQkJZWxzZQorCQkJCWRpZmYgLXUgIiRzYXZlIiAiJG5hbWUiCisJCQlmaQorCQkJcm0gLWYgIiRuYW1lIgorCQkJbXYgIiRzYXZlIiAiJG5hbWUiCisJCWVsaWYgKCBjbXAgLXMgIiRuYW1lIiAiJHNhdmUiICkgOyB0aGVuCisJCQllY2hvICIqKiB1bmNoYW5nZWQgJG5hbWUiCisJCQlybSAtZiAiJHtuYW1lfSIKKwkJCW12ICIkc2F2ZSIgIiRuYW1lIgorCQllbHNlCisJCQllY2hvICIqKiB1cGRhdGVkICRuYW1lIgorCQkJcm0gLWYgIiRzYXZlIgorCQlmaQorCQk7OworCSopCisJCWVjaG8gIioqIGlnbm9yZWQ6ICAgJG5hbWUiCisJCTs7CisJZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9uY3Vyc2VzLWNvbmZpZy5pbiBiL25jdXJzZXMtNS43L21pc2MvbmN1cnNlcy1jb25maWcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0OTI1MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvbmN1cnNlcy1jb25maWcuaW4KQEAgLTAsMCArMSwxNjEgQEAKKyMhQFNIRUxMQAorIyAkSWQ6IG5jdXJzZXMtY29uZmlnLmluLHYgMS4xMiAyMDA3LzAzLzE3IDIwOjAyOjE5IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXksIDIwMDYKKworcHJlZml4PSJAcHJlZml4QCIKK2V4ZWNfcHJlZml4PSJAZXhlY19wcmVmaXhAIgorCitiaW5kaXI9IkBiaW5kaXJAIgorbGliZGlyPSJAbGliZGlyQCIKK2RhdGFkaXI9IkBkYXRhZGlyQCIKK21hbmRpcj0iQG1hbmRpckAiCisKK1RISVM9Im5jdXJzZXNAREZUX0FSR19TVUZGSVhAIgorCitMQU5HPUM7CQlleHBvcnQgTEFORworTEFOR1VBR0U9QzsJZXhwb3J0IExBTkdVQUdFCitMQ19BTEw9QzsJZXhwb3J0IExDX0FMTAorTENfQ1RZUEU9QzsJZXhwb3J0IExDX0NUWVBFCisKK3Rlc3QgJCMgPSAwICYmIGV4ZWMgQFNIRUxMQCAkMCAtLWVycm9yCisKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisJY2FzZSAiJDEiIGluCisJLSo9KikKKwkJQVJHPWBlY2hvICIkMSIgfCBzZWQgJ3MvWy1fYS16QS1aMC05XSo9Ly8nYAorCQk7OworCSopCisJCUFSRz0KKwkJOzsKKwllc2FjCisKKwljYXNlICIkMSIgaW4KKwkjIGJhc2ljIGNvbmZpZ3VyYXRpb24KKwktLXByZWZpeD0qKQorCQlwcmVmaXg9IiRBUkciCisJCXRlc3QgLXogIiRleGVjX3ByZWZpeCIgJiYgZXhlY19wcmVmaXg9IiRBUkciCisJCTs7CisJLS1wcmVmaXgpCisJCWVjaG8gIiRwcmVmaXgiCisJCTs7CisJLS1leGVjLXByZWZpeD0qKQorCQlleGVjX3ByZWZpeD0iJEFSRyIKKwkJOzsKKwktLWV4ZWMtcHJlZml4KQorCQllY2hvICIkZXhlY19wcmVmaXgiCisJCTs7CisJIyBjb21waWxlL2xpbmsKKwktLWNmbGFncykKKwkJSU5DUz0KKwkJaWYgdGVzdCAiJHtwcmVmaXh9L2luY2x1ZGUiICE9IC91c3IvaW5jbHVkZSA7IHRoZW4KKwkJCUlOQ1M9Ii1JJHtwcmVmaXh9L2luY2x1ZGUiCisJCWZpCisJCWlmIHRlc3QgIkBXSVRIX09WRVJXUklURUAiICE9IG5vIDsgdGhlbgorCQkJSU5DUz0iJElOQ1MgLUkke3ByZWZpeH0vaW5jbHVkZS8ke1RISVN9IgorCQlmaQorCQlzZWQgLWUgJ3MsXlsgXSosLCcgLWUgJ3MsIFsgXSosICxnJyAtZSAncyxbIF0qJCwsJyA8PC1FTkRFQ0hPCisJCQkkSU5DUworRU5ERUNITworCQk7OworCS0tbGlicykKKwkJc2VkIC1lICdzLF5bIF0qLCwnIC1lICdzLCBbIF0qLCAsZycgLWUgJ3MsWyBdKiQsLCcgPDwtRU5ERUNITworCQkJLUwke2V4ZWNfcHJlZml4fS9saWIgQEVYVFJBX0xERkxBR1NAIC1sJHtUSElTfSBATElCU0AKK0VOREVDSE8KKwkJOzsKKwkjIGlkZW50aWZpY2F0aW9uCisJLS12ZXJzaW9uKQorCQllY2hvICJATkNVUlNFU19NQUpPUkAuQE5DVVJTRVNfTUlOT1JALkBOQ1VSU0VTX1BBVENIQCIKKwkJOzsKKwktLWFiaS12ZXJzaW9uKQorCQllY2hvICJAY2ZfY3ZfYWJpX3ZlcnNpb25AIgorCQk7OworCS0tbW91c2UtdmVyc2lvbikKKwkJZWNobyAiQE5DVVJTRVNfTU9VU0VfVkVSU0lPTkAiCisJCTs7CisJIyBsb2NhdGlvbnMKKwktLWJpbmRpcikKKwkJZWNobyAiJHtiaW5kaXJ9IgorCQk7OworCS0tZGF0YWRpcikKKwkJZWNobyAiJHtkYXRhZGlyfSIKKwkJOzsKKwktLWxpYmRpcikKKwkJZWNobyAiJHtsaWJkaXJ9IgorCQk7OworCS0tbWFuZGlyKQorCQllY2hvICIke21hbmRpcn0iCisJCTs7CisJLS10ZXJtaW5mbykKKwkJZWNobyAiQFRFUk1JTkZPQCIKKwkJOzsKKwktLXRlcm1pbmZvLWRpcnMpCisJCWVjaG8gIkBURVJNSU5GT19ESVJTQCIKKwkJOzsKKwktLXRlcm1wYXRoKQorCQllY2hvICJAVEVSTVBBVEhAIgorCQk7OworCSMgZ2VuZXJhbCBpbmZvCisJLS1oZWxwKQorCQljYXQgPDxFTkRIRUxQCitVc2FnZTogJHtUSElTfS1jb25maWcgW29wdGlvbnNdCisKK09wdGlvbnM6CisgIC0tcHJlZml4ICAgICAgICAgICBlY2hvcyB0aGUgcGFja2FnZS1wcmVmaXggb2YgJHtUSElTfQorICAtLXByZWZpeD1BUkcgICAgICAgc2V0cyB0aGUgcGFja2FnZS1wcmVmaXggb2YgJHtUSElTfQorICAtLWV4ZWMtcHJlZml4ICAgICAgZWNob3MgdGhlIGV4ZWN1dGFibGUtcHJlZml4IG9mICR7VEhJU30KKyAgLS1leGVjLXByZWZpeD1BUkcgIHNldHMgdGhlIGV4ZWN1dGFibGUtcHJlZml4IG9mICR7VEhJU30KKworICAtLWNmbGFncyAgICAgICAgICAgZWNob3MgdGhlIEMgY29tcGlsZXIgZmxhZ3MgbmVlZGVkIHRvIGNvbXBpbGUgd2l0aCAke1RISVN9CisgIC0tbGlicyAgICAgICAgICAgICBlY2hvcyB0aGUgbGlicmFyaWVzIG5lZWRlZCB0byBsaW5rIHdpdGggJHtUSElTfQorCisgIC0tdmVyc2lvbiAgICAgICAgICBlY2hvcyB0aGUgcmVsZWFzZStwYXRjaGRhdGUgdmVyc2lvbiBvZiAke1RISVN9CisgIC0tYWJpLXZlcnNpb24gICAgICBlY2hvcyB0aGUgQUJJIHZlcnNpb24gb2YgJHtUSElTfQorICAtLW1vdXNlLXZlcnNpb24gICAgZWNob3MgdGhlIG1vdXNlLWludGVyZmFjZSB2ZXJzaW9uIG9mICR7VEhJU30KKworICAtLWJpbmRpciAgICAgICAgICAgZWNob3MgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nICR7VEhJU30gcHJvZ3JhbXMKKyAgLS1kYXRhZGlyICAgICAgICAgIGVjaG9zIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyAke1RISVN9IGRhdGEKKyAgLS1saWJkaXIgICAgICAgICAgIGVjaG9zIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyAke1RISVN9IGxpYnJhcmllcworICAtLW1hbmRpciAgICAgICAgICAgZWNob3MgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nICR7VEhJU30gbWFucGFnZXMKKyAgLS10ZXJtaW5mbyAgICAgICAgIGVjaG9zIHRoZSBcJFRFUk1JTkZPIHRlcm1pbmZvIGRhdGFiYXNlIHBhdGgKKyAgLS10ZXJtaW5mby1kaXJzICAgIGVjaG9zIHRoZSBcJFRFUk1JTkZPX0RJUlMgZGlyZWN0b3J5IGxpc3QKKyAgLS10ZXJtcGF0aCAgICAgICAgIGVjaG9zIHRoZSBcJFRFUk1QQVRIIHRlcm1jYXAgbGlzdAorCisgIC0taGVscCAgICAgICAgICAgICBwcmludHMgdGhpcyBtZXNzYWdlCitFTkRIRUxQCisJCTs7CisJLS1lcnJvcnwqKQorCQlAU0hFTExAICQwIC0taGVscCAxPiYyCisJCWV4aXQgMQorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorIyB2aWxlOnNobW9kZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9uY3Vyc2VzLmRlZiBiL25jdXJzZXMtNS43L21pc2MvbmN1cnNlcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1MDQ1NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvbmN1cnNlcy5kZWYKQEAgLTAsMCArMSw0NDcgQEAKK0xJQlJBUlkgbmN1cnNlczUgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQ0KK0RFU0NSSVBUSU9OICJOQ3Vyc2VzLTUtMS0yMDAwMDcwNCwgbW9kdWxlIG5jdXJzZXMiDQorQ09ERSBMT0FET05DQUxMDQorREFUQSBMT0FET05DQUxMIE5PTlNIQVJFRCBNVUxUSVBMRQ0KK0VYUE9SVFMNCisJIkJDIglANjYyCU5PTkFNRQ0KKwkiQ09MT1JTIglANTAzCU5PTkFNRQ0KKwkiQ09MT1JfUEFJUiIJQDM2CU5PTkFNRQ0KKwkiQ09MT1JfUEFJUlMiCUA1MDQJTk9OQU1FDQorCSJDT0xTIglANTExCU5PTkFNRQ0KKwkiRVNDREVMQVkiCUA1MTMJTk9OQU1FDQorCSJMSU5FUyIJQDUxMAlOT05BTUUNCisJIlBBSVJfTlVNQkVSIglAMjA5CU5PTkFNRQ0KKwkiUEMiCUA2NjAJTk9OQU1FDQorCSJTUCIJQDEwMDMJTk9OQU1FDQorCSJUQUJTSVpFIglANTEyCU5PTkFNRQ0KKwkiVVAiCUA2NjEJTk9OQU1FDQorCSJfbmNfYWNjZXNzIglANglOT05BTUUNCisJIl9uY19hZGRfdG9fdHJ5IglANwlOT05BTUUNCisJIl9uY19hbGlnbl90ZXJtdHlwZSIJQDgJTk9OQU1FDQorCSJfbmNfYmFja2dyb3VuZCIJQDkJTk9OQU1FDQorCSJfbmNfYmF1ZHJhdGUiCUAxMAlOT05BTUUNCisJIl9uY19jYXBfaGFzaF90YWJsZSIJQDgwNQlOT05BTUUNCisJIl9uY19jYXBhbGlhc190YWJsZSIJQDgwNglOT05BTUUNCisJIl9uY19jYXBjbXAiCUA3MDcJTk9OQU1FDQorCSJfbmNfY2FwdG9pbmZvIglAODI5CU5PTkFNRQ0KKwkiX25jX2NoZWNrX3Rlcm10eXBlIglAMTUJTk9OQU1FDQorCSJfbmNfY29tbWVudF9lbmQiCUA4MTkJTk9OQU1FDQorCSJfbmNfY29tbWVudF9zdGFydCIJQDgxOAlOT05BTUUNCisJIl9uY19jb3B5X2VudHJ5IglAMTYJTk9OQU1FDQorCSJfbmNfY29weV90ZXJtdHlwZSIJQDIyCU5PTkFNRQ0KKwkiX25jX2N1cnJfY29sIglAODE2CU5PTkFNRQ0KKwkiX25jX2N1cnJfZmlsZV9wb3MiCUA4MTcJTk9OQU1FDQorCSJfbmNfY3Vycl9saW5lIglAODE1CU5PTkFNRQ0KKwkiX25jX2N1cnJfdG9rZW4iCUA4MDMJTk9OQU1FDQorCSJfbmNfZGlzYWJsZV9wZXJpb2QiCUAyMwlOT05BTUUNCisJIl9uY19kb19jb2xvciIJQDEwMzcJTk9OQU1FDQorCSJfbmNfZG9hbGxvYyIJQDI1CU5PTkFNRQ0KKwkiX25jX2VudHJ5X21hdGNoIglANzEwCU5PTkFNRQ0KKwkiX25jX2Vycl9hYm9ydCIJQDgyNglOT05BTUUNCisJIl9uY19leHBhbmRfdHJ5IglAMjcJTk9OQU1FDQorCSJfbmNfZXhwYW5kZWQiCUA1MQlOT05BTUUNCisJIl9uY19mYWxsYmFjayIJQDYyNQlOT05BTUUNCisJIl9uY19maW5kX2VudHJ5IglAODA5CU5PTkFNRQ0KKwkiX25jX2ZpbmRfdHlwZV9lbnRyeSIJQDgxMAlOT05BTUUNCisJIl9uY19maXJzdF9uYW1lIglANjIyCU5PTkFNRQ0KKwkiX25jX2ZsdXNoIglANTQJTk9OQU1FDQorCSJfbmNfZnJlZV9lbnRyaWVzIglANzEyCU5PTkFNRQ0KKwkiX25jX2ZyZWVfdGVybXR5cGUiCUA1OAlOT05BTUUNCisJIl9uY19mcmVlYWxsIglANTkJTk9OQU1FDQorCSJfbmNfZnJlZXdpbiIJQDYwCU5PTkFNRQ0KKwkiX25jX2dldF9oYXNoX3RhYmxlIglANjMJTk9OQU1FDQorCSJfbmNfZ2V0X3RhYmxlIglAODA4CU5PTkFNRQ0KKwkiX25jX2dldF90b2tlbiIJQDgxMQlOT05BTUUNCisJIl9uY19nZXRfdHR5X21vZGUiCUA2NQlOT05BTUUNCisJIl9uY19nZXRfdHlwZSIJQDgyMwlOT05BTUUNCisJIl9uY19nZXRlbnZfbnVtIglANjcJTk9OQU1FDQorCSJfbmNfaGFzX21vdXNlIglANzMJTk9OQU1FDQorCSJfbmNfaGFzaF9tYXAiCUA4NAlOT05BTUUNCisJIl9uY19oZWFkIglANzAwCU5PTkFNRQ0KKwkiX25jX2hvbWVfdGVybWluZm8iCUA5MQlOT05BTUUNCisJIl9uY19pbmZvX2hhc2hfdGFibGUiCUA4MDQJTk9OQU1FDQorCSJfbmNfaW5mb2FsaWFzX3RhYmxlIglAODA3CU5PTkFNRQ0KKwkiX25jX2luZm90b2NhcCIJQDgzMAlOT05BTUUNCisJIl9uY19pbml0X2FjcyIJQDkyCU5PTkFNRQ0KKwkiX25jX2luaXRfZW50cnkiCUA3MDIJTk9OQU1FDQorCSJfbmNfaW5pdF9rZXl0cnkiCUA5MwlOT05BTUUNCisJIl9uY19rZWVwX3RpY19kaXIiCUA5NQlOT05BTUUNCisJIl9uY19rZXlfbmFtZXMiCUA5NglOT05BTUUNCisJIl9uY19rZXlwYWQiCUAxMDI0CU5PTkFNRQ0KKwkiX25jX21ha2Vfb2xkaGFzaCIJQDk3CU5PTkFNRQ0KKwkiX25jX21ha2VuZXciCUAxMDI1CU5PTkFNRQ0KKwkiX25jX21lbW1vdmUiCUA5OAlOT05BTUUNCisJIl9uY19tZXJnZV9lbnRyeSIJQDcwNAlOT05BTUUNCisJIl9uY19tc2VjX2Nvc3QiCUAxMDMJTk9OQU1FDQorCSJfbmNfbXZjdXJfaW5pdCIJQDEwMTQJTk9OQU1FDQorCSJfbmNfbXZjdXJfcmVzdW1lIglAMTA2CU5PTkFNRQ0KKwkiX25jX212Y3VyX3dyYXAiCUAxMDE1CU5PTkFNRQ0KKwkiX25jX25hbWVfbWF0Y2giCUA2MjMJTk9OQU1FDQorCSJfbmNfbnVsbHNfc2VudCIJQDExNglOT05BTUUNCisJIl9uY19vbGRudW1zIglAMTE3CU5PTkFNRQ0KKwkiX25jX29zcGVlZCIJQDExOAlOT05BTUUNCisJIl9uY19vdXRjaCIJQDEwMjYJTk9OQU1FDQorCSJfbmNfb3V0c3RyIglAMTAzMwlOT05BTUUNCisJIl9uY19wYW5lbGhvb2siCUAxMTkJTk9OQU1FDQorCSJfbmNfcGFuaWNfbW9kZSIJQDgxNAlOT05BTUUNCisJIl9uY19wYXJzZV9lbnRyeSIJQDcwNglOT05BTUUNCisJIl9uY19wcmludGZfc3RyaW5nIglAMTIwCU5PTkFNRQ0KKwkiX25jX3B1c2hfdG9rZW4iCUA4MTIJTk9OQU1FDQorCSJfbmNfcmVhZF9lbnRyeSIJQDYyMAlOT05BTUUNCisJIl9uY19yZWFkX2VudHJ5X3NvdXJjZSIJQDcwOQlOT05BTUUNCisJIl9uY19yZWFkX2ZpbGVfZW50cnkiCUA2MjEJTk9OQU1FDQorCSJfbmNfcmVhZF90ZXJtY2FwIglAMTI3CU5PTkFNRQ0KKwkiX25jX3JlbW92ZV9rZXkiCUAxMjkJTk9OQU1FDQorCSJfbmNfcmVtb3ZlX3N0cmluZyIJQDEzMAlOT05BTUUNCisJIl9uY19yZW5kZXIiCUAxMDI3CU5PTkFNRQ0KKwkiX25jX3Jlc2V0X2lucHV0IglAODEzCU5PTkFNRQ0KKwkiX25jX3Jlc29sdmVfdXNlcyIJQDcxMQlOT05BTUUNCisJIl9uY19yaXBvZmZsaW5lIglAMTMyCU5PTkFNRQ0KKwkiX25jX3NhdmVfc3RyIglANzAzCU5PTkFNRQ0KKwkiX25jX3NjcmVlbl9jaGFpbiIJQDEzNwlOT05BTUUNCisJIl9uY19zY3JlZW5faW5pdCIJQDE0MglOT05BTUUNCisJIl9uY19zY3JlZW5fcmVzdW1lIglAMTQzCU5PTkFNRQ0KKwkiX25jX3NjcmVlbl93cmFwIglAMTQ0CU5PTkFNRQ0KKwkiX25jX3Njcm9sbF9vbGRoYXNoIglAMTQ1CU5PTkFNRQ0KKwkiX25jX3Njcm9sbF9vcHRpbWl6ZSIJQDEwMjkJTk9OQU1FDQorCSJfbmNfc2Nyb2xsX3dpbmRvdyIJQDEwMzAJTk9OQU1FDQorCSJfbmNfc2Nyb2xsbiIJQDE0NglOT05BTUUNCisJIl9uY19zZXRfYnVmZmVyIglAMTQ3CU5PTkFNRQ0KKwkiX25jX3NldF9zb3VyY2UiCUA4MjIJTk9OQU1FDQorCSJfbmNfc2V0X3R0eV9tb2RlIglAMTQ4CU5PTkFNRQ0KKwkiX25jX3NldF90eXBlIglAODI0CU5PTkFNRQ0KKwkiX25jX3NldF93cml0ZWRpciIJQDE1MglOT05BTUUNCisJIl9uY19zZXR1cHNjcmVlbiIJQDEwMzEJTk9OQU1FDQorCSJfbmNfc2lnYWN0aW9uIglAMTU4CU5PTkFNRQ0KKwkiX25jX3NpZ25hbF9oYW5kbGVyIglAMTAzNAlOT05BTUUNCisJIl9uY19zbGtfZm9ybWF0IglAMTU5CU5PTkFNRQ0KKwkiX25jX3Nsa19pbml0aWFsaXplIglAMTYwCU5PTkFNRQ0KKwkiX25jX3N0YXJ0X2xpbmUiCUA4MjEJTk9OQU1FDQorCSJfbmNfc3VwcHJlc3Nfd2FybmluZ3MiCUA4MjgJTk9OQU1FDQorCSJfbmNfc3luY2hvb2siCUAxMDM1CU5PTkFNRQ0KKwkiX25jX3N5bnRheCIJQDgyMAlOT05BTUUNCisJIl9uY19zeXNlcnJfYWJvcnQiCUA4MjUJTk9OQU1FDQorCSJfbmNfdGFpbCIJQDcwMQlOT05BTUUNCisJIl9uY190aWNfZGlyIglAMTYxCU5PTkFNRQ0KKwkiX25jX3RpY19leHBhbmQiCUAxNjIJTk9OQU1FDQorCSJfbmNfdGljX3dyaXR0ZW4iCUAxNjcJTk9OQU1FDQorCSJfbmNfdGltZWRfd2FpdCIJQDEwMzYJTk9OQU1FDQorCSJfbmNfdGluZm9fZmtleXMiCUAxNjkJTk9OQU1FDQorCSJfbmNfdHJhY2luZyIJQDEwMTAJTk9OQU1FDQorCSJfbmNfdHJhbnNfc3RyaW5nIglAMTcwCU5PTkFNRQ0KKwkiX25jX3VzZXJfZGVmaW5hYmxlIglAMTcyCU5PTkFNRQ0KKwkiX25jX3Zpc2J1ZiIJQDEwMTIJTk9OQU1FDQorCSJfbmNfdmlzYnVmMiIJQDE3OAlOT05BTUUNCisJIl9uY192c3NjYW5mIglAMTgzCU5PTkFNRQ0KKwkiX25jX3dhZGRjaF9ub3N5bmMiCUAxMDI4CU5PTkFNRQ0KKwkiX25jX3dhcm5pbmciCUA4MjcJTk9OQU1FDQorCSJfbmNfd3JhcF9lbnRyeSIJQDcwNQlOT05BTUUNCisJIl9uY193cml0ZV9lbnRyeSIJQDcwOAlOT05BTUUNCisJImFjc19tYXAiCUA1MDYJTk9OQU1FDQorCSJhZGRjaCIJQDEJTk9OQU1FDQorCSJhZGRjaG5zdHIiCUAyCU5PTkFNRQ0KKwkiYWRkY2hzdHIiCUAzCU5PTkFNRQ0KKwkiYWRkbnN0ciIJQDQJTk9OQU1FDQorCSJhZGRzdHIiCUA1CU5PTkFNRQ0KKwkiYXNzdW1lX2RlZmF1bHRfY29sb3JzIglAMTg0CU5PTkFNRQ0KKwkiYXR0cl9nZXQiCUAxNAlOT05BTUUNCisJImF0dHJfb2ZmIglAMTg1CU5PTkFNRQ0KKwkiYXR0cl9vbiIJQDE4NglOT05BTUUNCisJImF0dHJfc2V0IglAMTcJTk9OQU1FDQorCSJhdHRyb2ZmIglAMTEJTk9OQU1FDQorCSJhdHRyb24iCUAxMglOT05BTUUNCisJImF0dHJzZXQiCUAxMwlOT05BTUUNCisJImJhdWRyYXRlIglAMTgJTk9OQU1FDQorCSJiZWVwIglAMTkJTk9OQU1FDQorCSJia2dkIglAMjAJTk9OQU1FDQorCSJia2dkc2V0IglAMjEJTk9OQU1FDQorCSJib29sY29kZXMiCUA2MDEJTk9OQU1FDQorCSJib29sZm5hbWVzIglANjAyCU5PTkFNRQ0KKwkiYm9vbG5hbWVzIglANjAwCU5PTkFNRQ0KKwkiYm9yZGVyIglAMjQJTk9OQU1FDQorCSJib3giCUAyNglOT05BTUUNCisJImNhbl9jaGFuZ2VfY29sb3IiCUAyOAlOT05BTUUNCisJImNicmVhayIJQDI5CU5PTkFNRQ0KKwkiY2hnYXQiCUAzMAlOT05BTUUNCisJImNsZWFyIglAMzEJTk9OQU1FDQorCSJjbGVhcm9rIglAMzIJTk9OQU1FDQorCSJjbHJ0b2JvdCIJQDMzCU5PTkFNRQ0KKwkiY2xydG9lb2wiCUAzNAlOT05BTUUNCisJImNvbG9yX2NvbnRlbnQiCUAzNQlOT05BTUUNCisJImNvbG9yX3NldCIJQDE4NwlOT05BTUUNCisJImNvcHl3aW4iCUAzNwlOT05BTUUNCisJImN1cl90ZXJtIglANTE1CU5PTkFNRQ0KKwkiY3Vyc19zZXQiCUAzOAlOT05BTUUNCisJImN1cnNjciIJQDUwMQlOT05BTUUNCisJImN1cnNlc192ZXJzaW9uIglAMTg4CU5PTkFNRQ0KKwkiZGVmX3Byb2dfbW9kZSIJQDM5CU5PTkFNRQ0KKwkiZGVmX3NoZWxsX21vZGUiCUA0MAlOT05BTUUNCisJImRlZmluZV9rZXkiCUAxODkJTk9OQU1FDQorCSJkZWxfY3VydGVybSIJQDY0MQlOT05BTUUNCisJImRlbGF5X291dHB1dCIJQDQxCU5PTkFNRQ0KKwkiZGVsY2giCUA0MglOT05BTUUNCisJImRlbGV0ZWxuIglANDUJTk9OQU1FDQorCSJkZWxzY3JlZW4iCUA0MwlOT05BTUUNCisJImRlbHdpbiIJQDQ0CU5PTkFNRQ0KKwkiZGVyd2luIglANDYJTk9OQU1FDQorCSJkb3VwZGF0ZSIJQDQ3CU5PTkFNRQ0KKwkiZHVwd2luIglANDgJTk9OQU1FDQorCSJlY2hvIglANDkJTk9OQU1FDQorCSJlY2hvY2hhciIJQDUwCU5PTkFNRQ0KKwkiZW5kd2luIglANTIJTk9OQU1FDQorCSJlcmFzZSIJQDE5MwlOT05BTUUNCisJImVyYXNlY2hhciIJQDUzCU5PTkFNRQ0KKwkiZmlsdGVyIglANTUJTk9OQU1FDQorCSJmbGFzaCIJQDU2CU5PTkFNRQ0KKwkiZmx1c2hpbnAiCUA1NwlOT05BTUUNCisJImdldGJrZ2QiCUAyMTEJTk9OQU1FDQorCSJnZXRjaCIJQDYxCU5PTkFNRQ0KKwkiZ2V0bW91c2UiCUAzNTYJTk9OQU1FDQorCSJnZXRuc3RyIglANjIJTk9OQU1FDQorCSJnZXRzdHIiCUA2NAlOT05BTUUNCisJImdldHdpbiIJQDY2CU5PTkFNRQ0KKwkiaGFsZmRlbGF5IglANjgJTk9OQU1FDQorCSJoYXNfY29sb3JzIglANjkJTk9OQU1FDQorCSJoYXNfaWMiCUA3MAlOT05BTUUNCisJImhhc19pbCIJQDcxCU5PTkFNRQ0KKwkiaGFzX2tleSIJQDIzNAlOT05BTUUNCisJImhsaW5lIglANzIJTk9OQU1FDQorCSJpZGNvayIJQDc0CU5PTkFNRQ0KKwkiaWRsb2siCUA3NQlOT05BTUUNCisJImltbWVkb2siCUA3NglOT05BTUUNCisJImluY2giCUA3NwlOT05BTUUNCisJImluY2huc3RyIglANzgJTk9OQU1FDQorCSJpbmNoc3RyIglANzkJTk9OQU1FDQorCSJpbml0X2NvbG9yIglAODEJTk9OQU1FDQorCSJpbml0X3BhaXIiCUA4MglOT05BTUUNCisJImluaXRzY3IiCUA4MAlOT05BTUUNCisJImlubnN0ciIJQDgzCU5PTkFNRQ0KKwkiaW5zY2giCUA4NQlOT05BTUUNCisJImluc2RlbGxuIglAODYJTk9OQU1FDQorCSJpbnNlcnRsbiIJQDg3CU5PTkFNRQ0KKwkiaW5zbnN0ciIJQDg4CU5PTkFNRQ0KKwkiaW5zc3RyIglAODkJTk9OQU1FDQorCSJpbnN0ciIJQDkwCU5PTkFNRQ0KKwkiaW50cmZsdXNoIglAOTQJTk9OQU1FDQorCSJpc19saW5ldG91Y2hlZCIJQDEwMAlOT05BTUUNCisJImlzX3dpbnRvdWNoZWQiCUAxMDEJTk9OQU1FDQorCSJpc2VuZHdpbiIJQDk5CU5PTkFNRQ0KKwkia2V5Ym91bmQiCUAyMzgJTk9OQU1FDQorCSJrZXluYW1lIglAMTAyCU5PTkFNRQ0KKwkia2V5b2siCUAyNDAJTk9OQU1FDQorCSJrZXlwYWQiCUAxMDQJTk9OQU1FDQorCSJraWxsY2hhciIJQDEwNQlOT05BTUUNCisJImxlYXZlb2siCUAxMDcJTk9OQU1FDQorCSJsb25nbmFtZSIJQDEwOAlOT05BTUUNCisJIm1jcHJpbnQiCUAyNDIJTk9OQU1FDQorCSJtZXRhIglAMTA5CU5PTkFNRQ0KKwkibW91c2VfdHJhZm8iCUAyNTEJTk9OQU1FDQorCSJtb3VzZWludGVydmFsIglAMzYwCU5PTkFNRQ0KKwkibW91c2VtYXNrIglAMzU4CU5PTkFNRQ0KKwkibW92ZSIJQDExMAlOT05BTUUNCisJIm12YWRkY2giCUAxMTEJTk9OQU1FDQorCSJtdmFkZGNobnN0ciIJQDExMglOT05BTUUNCisJIm12YWRkY2hzdHIiCUAxMTMJTk9OQU1FDQorCSJtdmFkZG5zdHIiCUAxMTQJTk9OQU1FDQorCSJtdmFkZHN0ciIJQDExNQlOT05BTUUNCisJIm12Y2hnYXQiCUAxMjEJTk9OQU1FDQorCSJtdmN1ciIJQDEyMglOT05BTUUNCisJIm12ZGVsY2giCUAxMjMJTk9OQU1FDQorCSJtdmRlcndpbiIJQDEyNAlOT05BTUUNCisJIm12Z2V0Y2giCUAxMjUJTk9OQU1FDQorCSJtdmdldG5zdHIiCUAxMjYJTk9OQU1FDQorCSJtdmdldHN0ciIJQDEyOAlOT05BTUUNCisJIm12aGxpbmUiCUAxMzEJTk9OQU1FDQorCSJtdmluY2giCUAxMzMJTk9OQU1FDQorCSJtdmluY2huc3RyIglAMTM0CU5PTkFNRQ0KKwkibXZpbmNoc3RyIglAMTM1CU5PTkFNRQ0KKwkibXZpbm5zdHIiCUAxMzYJTk9OQU1FDQorCSJtdmluc2NoIglAMTM4CU5PTkFNRQ0KKwkibXZpbnNuc3RyIglAMTM5CU5PTkFNRQ0KKwkibXZpbnNzdHIiCUAxNDAJTk9OQU1FDQorCSJtdmluc3RyIglAMTQxCU5PTkFNRQ0KKwkibXZwcmludHciCUAxNDkJTk9OQU1FDQorCSJtdnNjYW53IglAMTUwCU5PTkFNRQ0KKwkibXZ2bGluZSIJQDE1MQlOT05BTUUNCisJIm12d2FkZGNoIglAMTUzCU5PTkFNRQ0KKwkibXZ3YWRkY2huc3RyIglAMTU0CU5PTkFNRQ0KKwkibXZ3YWRkY2hzdHIiCUAxNTUJTk9OQU1FDQorCSJtdndhZGRuc3RyIglAMTU2CU5PTkFNRQ0KKwkibXZ3YWRkc3RyIglAMTU3CU5PTkFNRQ0KKwkibXZ3Y2hnYXQiCUAxNjMJTk9OQU1FDQorCSJtdndkZWxjaCIJQDE2NAlOT05BTUUNCisJIm12d2dldGNoIglAMTY1CU5PTkFNRQ0KKwkibXZ3Z2V0bnN0ciIJQDE2NglOT05BTUUNCisJIm12d2dldHN0ciIJQDE2OAlOT05BTUUNCisJIm12d2hsaW5lIglAMTcxCU5PTkFNRQ0KKwkibXZ3aW4iCUAxNzMJTk9OQU1FDQorCSJtdndpbmNoIglAMTc0CU5PTkFNRQ0KKwkibXZ3aW5jaG5zdHIiCUAxNzUJTk9OQU1FDQorCSJtdndpbmNoc3RyIglAMTc2CU5PTkFNRQ0KKwkibXZ3aW5uc3RyIglAMTc3CU5PTkFNRQ0KKwkibXZ3aW5zY2giCUAxNzkJTk9OQU1FDQorCSJtdndpbnNuc3RyIglAMTgwCU5PTkFNRQ0KKwkibXZ3aW5zc3RyIglAMTgxCU5PTkFNRQ0KKwkibXZ3aW5zdHIiCUAxODIJTk9OQU1FDQorCSJtdndwcmludHciCUAxOTAJTk9OQU1FDQorCSJtdndzY2FudyIJQDE5MQlOT05BTUUNCisJIm12d3ZsaW5lIglAMTkyCU5PTkFNRQ0KKwkibmFwbXMiCUAxOTQJTk9OQU1FDQorCSJuZXdwYWQiCUAxOTUJTk9OQU1FDQorCSJuZXdzY3IiCUA1MDIJTk9OQU1FDQorCSJuZXd0ZXJtIglAMTk2CU5PTkFNRQ0KKwkibmV3d2luIglAMTk3CU5PTkFNRQ0KKwkibmwiCUAxOTgJTk9OQU1FDQorCSJub2NicmVhayIJQDE5OQlOT05BTUUNCisJIm5vZGVsYXkiCUAyMDAJTk9OQU1FDQorCSJub2VjaG8iCUAyMDEJTk9OQU1FDQorCSJub25sIglAMjAyCU5PTkFNRQ0KKwkibm9xaWZsdXNoIglAMjAzCU5PTkFNRQ0KKwkibm9yYXciCUAyMDQJTk9OQU1FDQorCSJub3RpbWVvdXQiCUAyMDUJTk9OQU1FDQorCSJudW1jb2RlcyIJQDYwNAlOT05BTUUNCisJIm51bWZuYW1lcyIJQDYwNQlOT05BTUUNCisJIm51bW5hbWVzIglANjAzCU5PTkFNRQ0KKwkib3NwZWVkIglANjYzCU5PTkFNRQ0KKwkib3ZlcmxheSIJQDIwNglOT05BTUUNCisJIm92ZXJ3cml0ZSIJQDIwNwlOT05BTUUNCisJInBhaXJfY29udGVudCIJQDIwOAlOT05BTUUNCisJInBlY2hvY2hhciIJQDIxMAlOT05BTUUNCisJInBub3V0cmVmcmVzaCIJQDIxMglOT05BTUUNCisJInByZWZyZXNoIglAMjEzCU5PTkFNRQ0KKwkicHJpbnR3IglAMjE0CU5PTkFNRQ0KKwkicHV0cCIJQDIxNQlOT05BTUUNCisJInB1dHdpbiIJQDIxNglOT05BTUUNCisJInFpZmx1c2giCUAyMTcJTk9OQU1FDQorCSJyYXciCUAyMTgJTk9OQU1FDQorCSJyZWRyYXd3aW4iCUAyMTkJTk9OQU1FDQorCSJyZWZyZXNoIglAMjIwCU5PTkFNRQ0KKwkicmVzZXRfcHJvZ19tb2RlIglAMjIyCU5PTkFNRQ0KKwkicmVzZXRfc2hlbGxfbW9kZSIJQDIyMwlOT05BTUUNCisJInJlc2V0dHkiCUAyMjEJTk9OQU1FDQorCSJyZXNpemV0ZXJtIglAMjYzCU5PTkFNRQ0KKwkicmVzdGFydHRlcm0iCUA2NDMJTk9OQU1FDQorCSJyaXBvZmZsaW5lIglAMjI0CU5PTkFNRQ0KKwkic2F2ZXR0eSIJQDIyNQlOT05BTUUNCisJInNjYW53IglAMjI2CU5PTkFNRQ0KKwkic2NyX2R1bXAiCUAyMjcJTk9OQU1FDQorCSJzY3JfaW5pdCIJQDIyOAlOT05BTUUNCisJInNjcl9yZXN0b3JlIglAMjMyCU5PTkFNRQ0KKwkic2NyX3NldCIJQDIzMwlOT05BTUUNCisJInNjcmwiCUAyMjkJTk9OQU1FDQorCSJzY3JvbGwiCUAyMzAJTk9OQU1FDQorCSJzY3JvbGxvayIJQDIzMQlOT05BTUUNCisJInNldF9jdXJ0ZXJtIglANjQwCU5PTkFNRQ0KKwkic2V0X3Rlcm0iCUAyMzYJTk9OQU1FDQorCSJzZXRzY3JyZWciCUAyMzUJTk9OQU1FDQorCSJzZXR1cHRlcm0iCUA2NDQJTk9OQU1FDQorCSJzbGtfYXR0ciIJQDI2NglOT05BTUUNCisJInNsa19hdHRyX3NldCIJQDI3MAlOT05BTUUNCisJInNsa19hdHRyb2ZmIglAMjM3CU5PTkFNRQ0KKwkic2xrX2F0dHJvbiIJQDIzOQlOT05BTUUNCisJInNsa19hdHRyc2V0IglAMjQxCU5PTkFNRQ0KKwkic2xrX2NsZWFyIglAMjQzCU5PTkFNRQ0KKwkic2xrX2NvbG9yIglAMjcyCU5PTkFNRQ0KKwkic2xrX2luaXQiCUAyNDQJTk9OQU1FDQorCSJzbGtfbGFiZWwiCUAyNDUJTk9OQU1FDQorCSJzbGtfbm91dHJlZnJlc2giCUAyNDYJTk9OQU1FDQorCSJzbGtfcmVmcmVzaCIJQDI0NwlOT05BTUUNCisJInNsa19yZXN0b3JlIglAMjQ4CU5PTkFNRQ0KKwkic2xrX3NldCIJQDI0OQlOT05BTUUNCisJInNsa190b3VjaCIJQDI1MAlOT05BTUUNCisJInN0YW5kZW5kIglAMjUzCU5PTkFNRQ0KKwkic3RhbmRvdXQiCUAyNTIJTk9OQU1FDQorCSJzdGFydF9jb2xvciIJQDI1NAlOT05BTUUNCisJInN0ZHNjciIJQDUwMAlOT05BTUUNCisJInN0cmNvZGVzIglANjA4CU5PTkFNRQ0KKwkic3RyZm5hbWVzIglANjA5CU5PTkFNRQ0KKwkic3RybmFtZXMiCUA2MDYJTk9OQU1FDQorCSJzdWJwYWQiCUAyNTUJTk9OQU1FDQorCSJzdWJ3aW4iCUAyNTYJTk9OQU1FDQorCSJzeW5jb2siCUAyNTcJTk9OQU1FDQorCSJ0ZXJtYXR0cnMiCUAyNTgJTk9OQU1FDQorCSJ0ZXJtbmFtZSIJQDI1OQlOT05BTUUNCisJInRnZXRlbnQiCUA2NDUJTk9OQU1FDQorCSJ0Z2V0ZmxhZyIJQDY0NglOT05BTUUNCisJInRnZXRudW0iCUA2NDcJTk9OQU1FDQorCSJ0Z2V0c3RyIglANjQ4CU5PTkFNRQ0KKwkidGdvdG8iCUA2NDkJTk9OQU1FDQorCSJ0aWdldGZsYWciCUAyNjAJTk9OQU1FDQorCSJ0aWdldG51bSIJQDI2MQlOT05BTUUNCisJInRpZ2V0c3RyIglAMjYyCU5PTkFNRQ0KKwkidGltZW91dCIJQDI3NAlOT05BTUUNCisJInRwYXJtIglANjUzCU5PTkFNRQ0KKwkidHB1dHMiCUA2NTUJTk9OQU1FDQorCSJ0dHl0eXBlIglANTE0CU5PTkFNRQ0KKwkidHlwZWFoZWFkIglAMjY0CU5PTkFNRQ0KKwkidW5jdHJsIglAMzYxCU5PTkFNRQ0KKwkidW5nZXRjaCIJQDI2NQlOT05BTUUNCisJInVuZ2V0bW91c2UiCUAzNTcJTk9OQU1FDQorCSJ1bnRvdWNod2luIglAMjY3CU5PTkFNRQ0KKwkidXNlX2RlZmF1bHRfY29sb3JzIglAMjc2CU5PTkFNRQ0KKwkidXNlX2VudiIJQDI2OAlOT05BTUUNCisJInVzZV9leHRlbmRlZF9uYW1lcyIJQDI3OAlOT05BTUUNCisJInZpZGF0dHIiCUAyNjkJTk9OQU1FDQorCSJ2aWRwdXRzIglAMjcxCU5PTkFNRQ0KKwkidmxpbmUiCUAyNzMJTk9OQU1FDQorCSJ2d19wcmludHciCUAyODQJTk9OQU1FDQorCSJ2d19zY2FudyIJQDI4NQlOT05BTUUNCisJInZ3cHJpbnR3IglAMjc1CU5PTkFNRQ0KKwkidndzY2FudyIJQDI3NwlOT05BTUUNCisJIndhZGRjaCIJQDI3OQlOT05BTUUNCisJIndhZGRjaG5zdHIiCUAyODAJTk9OQU1FDQorCSJ3YWRkY2hzdHIiCUAyODEJTk9OQU1FDQorCSJ3YWRkbnN0ciIJQDI4MglOT05BTUUNCisJIndhZGRzdHIiCUAyODMJTk9OQU1FDQorCSJ3YXR0cl9nZXQiCUAyOTEJTk9OQU1FDQorCSJ3YXR0cl9vZmYiCUAyOTMJTk9OQU1FDQorCSJ3YXR0cl9vbiIJQDI5MglOT05BTUUNCisJIndhdHRyX3NldCIJQDI4NglOT05BTUUNCisJIndhdHRyb2ZmIglAMjg5CU5PTkFNRQ0KKwkid2F0dHJvbiIJQDI4OAlOT05BTUUNCisJIndhdHRyc2V0IglAMjkwCU5PTkFNRQ0KKwkid2JrZ2QiCUAyOTUJTk9OQU1FDQorCSJ3YmtnZHNldCIJQDI5NglOT05BTUUNCisJIndib3JkZXIiCUAyOTkJTk9OQU1FDQorCSJ3Y2hnYXQiCUAzMDEJTk9OQU1FDQorCSJ3Y2xlYXIiCUAzMDIJTk9OQU1FDQorCSJ3Y2xydG9ib3QiCUAzMDMJTk9OQU1FDQorCSJ3Y2xydG9lb2wiCUAzMDQJTk9OQU1FDQorCSJ3Y29sb3Jfc2V0IglAMjg3CU5PTkFNRQ0KKwkid2N1cnN5bmN1cCIJQDMwNQlOT05BTUUNCisJIndkZWxjaCIJQDMwNglOT05BTUUNCisJIndkZWxldGVsbiIJQDMwNwlOT05BTUUNCisJIndlY2hvY2hhciIJQDMwOAlOT05BTUUNCisJIndlbmNsb3NlIglAMzU5CU5PTkFNRQ0KKwkid2VyYXNlIglAMzEwCU5PTkFNRQ0KKwkid2dldGNoIglAMzEyCU5PTkFNRQ0KKwkid2dldG5zdHIiCUAzMTMJTk9OQU1FDQorCSJ3Z2V0c3RyIglAMzE1CU5PTkFNRQ0KKwkid2hsaW5lIglAMzE4CU5PTkFNRQ0KKwkid2luY2giCUAzMjAJTk9OQU1FDQorCSJ3aW5jaG5zdHIiCUAzMjEJTk9OQU1FDQorCSJ3aW5jaHN0ciIJQDMyMglOT05BTUUNCisJIndpbm5zdHIiCUAzMjMJTk9OQU1FDQorCSJ3aW5zY2giCUAzMjUJTk9OQU1FDQorCSJ3aW5zZGVsbG4iCUAzMjYJTk9OQU1FDQorCSJ3aW5zZXJ0bG4iCUAzMjcJTk9OQU1FDQorCSJ3aW5zbnN0ciIJQDMyOAlOT05BTUUNCisJIndpbnNzdHIiCUAzMjkJTk9OQU1FDQorCSJ3aW5zdHIiCUAzMzAJTk9OQU1FDQorCSJ3bW91c2VfdHJhZm8iCUAyOTQJTk9OQU1FDQorCSJ3bW92ZSIJQDMzOAlOT05BTUUNCisJIndub3V0cmVmcmVzaCIJQDMzOQlOT05BTUUNCisJIndwcmludHciCUAzNDAJTk9OQU1FDQorCSJ3cmVkcmF3bG4iCUAzNDEJTk9OQU1FDQorCSJ3cmVmcmVzaCIJQDM0MglOT05BTUUNCisJIndyZXNpemUiCUAzNDMJTk9OQU1FDQorCSJ3c2NhbnciCUAzNDQJTk9OQU1FDQorCSJ3c2NybCIJQDM0NQlOT05BTUUNCisJIndzZXRzY3JyZWciCUAzNDYJTk9OQU1FDQorCSJ3c3RhbmRlbmQiCUAzNDgJTk9OQU1FDQorCSJ3c3RhbmRvdXQiCUAzNDcJTk9OQU1FDQorCSJ3c3luY2Rvd24iCUAzNDkJTk9OQU1FDQorCSJ3c3luY3VwIglAMzUwCU5PTkFNRQ0KKwkid3RpbWVvdXQiCUAzNTEJTk9OQU1FDQorCSJ3dG91Y2hsbiIJQDM1MglOT05BTUUNCisJInd2bGluZSIJQDM1NAlOT05BTUUNCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9taXNjL25jdXJzZXMucmVmIGIvbmN1cnNlcy01LjcvbWlzYy9uY3Vyc2VzLnJlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjRkZTdkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9uY3Vyc2VzLnJlZgpAQCAtMCwwICsxLDU3MiBAQAorTElCUkFSWSBuY3Vyc2VzMiBJTklUSU5TVEFOQ0UNCitERVNDUklQVElPTiAnTkN1cnNlcyAxLjkuOWUtMSBmb3IgT1MvMiAtIGJhc2UgbGlicmFyeScNCitFWFBPUlRTDQorOyoqKioqKioqKioqKg0KKzsqIGN1cnNlcy5oICoNCis7KioqKioqKioqKioqDQorDQorCSJzdGRzY3IiCQkJQDUwMAlOT05BTUUgOyB2YXJpYWJsZQ0KKwkiY3Vyc2NyIgkJCUA1MDEJTk9OQU1FIDsgdmFyaWFibGUNCisJIm5ld3NjciIJCQlANTAyCU5PTkFNRSA7IHZhcmlhYmxlDQorCSJDT0xPUlMiCQkJQDUwMwlOT05BTUUgOyB2YXJpYWJsZQ0KKwkiQ09MT1JfUEFJUlMiCQkJQDUwNAlOT05BTUUgOyB2YXJpYWJsZQ0KKwkiY29sb3JfcGFpcnMiCQkJQDUwNQlOT05BTUUgOyB2YXJpYWJsZQ0KKwkiYWNzX21hcCIJIAkJQDUwNglOT05BTUUgOyB2YXJpYWJsZQ0KKwkiTElORVMiCQkJCUA1MTAJTk9OQU1FIDsgdmFyaWFibGUNCisJIkNPTFMiCQkJCUA1MTEJTk9OQU1FIDsgdmFyaWFibGUNCisJIlRBQlNJWkUiCQkJQDUxMglOT05BTUUgOyB2YXJpYWJsZQ0KKwkiRVNDREVMQVkiCQkJQDUxMwlOT05BTUUgOyB2YXJpYWJsZQ0KKwkidHR5dHlwZSIJCQlANTE0CU5PTkFNRSA7IHZhcmlhYmxlDQorCSJjdXJfdGVybSIJCQlANTE1CU5PTkFNRSA7IHZhcmlhYmxlDQorDQorCSJhZGRjaCIgICAJCQlAMQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImFkZGNobnN0ciIgICAgICAgCQlAMglOT05BTUUgOyBnZW5lcmF0ZWQNCisJImFkZGNoc3RyIgkJCUAzCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiYWRkbnN0ciIgCQkJQDQJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJhZGRzdHIiICAJCQlANQlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJhZGRud3N0ciIJCQlANglOT05BTUUgOyBtaXNzaW5nDQorOwkiYWRkd3N0ciIgCQkJQDcJTk9OQU1FIDsgbWlzc2luZw0KKzsJImFkZF93Y2giIAkJCUA4CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJhZGRfd2NobnN0ciIgICAgIAkJQDkJTk9OQU1FIDsgbWlzc2luZw0KKzsJImFkZF93Y2hzdHIiICAgICAgCQlAMTAJTk9OQU1FIDsgbWlzc2luZw0KKwkiYXR0cm9mZiIgCQkJQDExCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiYXR0cm9uIiAgCQkJQDEyCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiYXR0cnNldCIgCQkJQDEzCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiYXR0cl9nZXQiCQkJQDE0CU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJImF0dHJfb2ZmIgkJCUAxNQlOT05BTUUgOyBpbXBsZW1lbnRlZCA8PCBOTyEhDQorOwkiYXR0cl9vbiIgCQkJQDE2CU5PTkFNRSA7IGltcGxlbWVudGVkIDw8IE5PISENCisJImF0dHJfc2V0IgkJCUAxNwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImJhdWRyYXRlIgkJCUAxOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiYmVlcCIgICAgCQkJQDE5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJia2dkIiAgICAJCQlAMjAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJia2dkc2V0IiAJCQlAMjEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiYmtncm5kc2V0IiAgICAgICAJCUAyMglOT05BTUUgOyBtaXNzaW5nDQorOwkiYmtncm5kIiAgCQkJQDIzCU5PTkFNRSA7IG1pc3NpbmcNCisJImJvcmRlciIgIAkJCUAyNAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJib3JkZXJfc2V0IiAgICAgIAkJQDI1CU5PTkFNRSA7IG1pc3NpbmcNCisJImJveCIgICAgIAkJCUAyNglOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJib3hfc2V0IiAJCQlAMjcJTk9OQU1FIDsgbWlzc2luZw0KKwkiY2FuX2NoYW5nZV9jb2xvciIJCUAyOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiY2JyZWFrIiAgCQkJQDI5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJjaGdhdCIgICAJCQlAMzAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJjbGVhciIgICAJCQlAMzEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJjbGVhcm9rIiAJCQlAMzIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImNscnRvYm90IgkJCUAzMwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImNscnRvZW9sIgkJCUAzNAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImNvbG9yX2NvbnRlbnQiICAgCQlAMzUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIkNPTE9SX1BBSVIiICAgICAgCQlAMzYJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJjb3B5d2luIiAJCQlAMzcJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImN1cnNfc2V0IgkJCUAzOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZGVmX3Byb2dfbW9kZSIgICAJCUAzOQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZGVmX3NoZWxsX21vZGUiICAJCUA0MAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZGVsYXlfb3V0cHV0IiAgICAJCUA0MQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZGVsY2giICAgCQkJQDQyCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiZGVsc2NyZWVuIiAgICAgICAJCUA0MwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZGVsd2luIiAgCQkJQDQ0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJkZWxldGVsbiIJCQlANDUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJkZXJ3aW4iICAJCQlANDYJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImRvdXBkYXRlIgkJCUA0NwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZHVwd2luIiAgCQkJQDQ4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJlY2hvIiAgICAJCQlANDkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImVjaG9jaGFyIgkJCUA1MAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJlY2hvX3djaGFyIiAgICAgIAkJQDUxCU5PTkFNRSA7IG1pc3NpbmcNCisJImVuZHdpbiIgIAkJCUA1MglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiZXJhc2VjaGFyIiAgICAgICAJCUA1MwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJImVyYXNlX3djaGFyIiAgICAgCQlANTQJTk9OQU1FIDsgbWlzc2luZw0KKwkiZmlsdGVyIiAgCQkJQDU1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJmbGFzaCIgICAJCQlANTYJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImZsdXNoaW5wIgkJCUA1NwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJImdldGJrZ2QiIAkJCUA1OAlOT05BTUUgOyBtaXNzaW5nDQorOwkiZ2V0Ymtncm5kIiAgICAgICAJCUA1OQlOT05BTUUgOyBtaXNzaW5nDQorOwkiZ2V0Y2NoYXIiCQkJQDYwCU5PTkFNRSA7IG1pc3NpbmcNCisJImdldGNoIiAgIAkJCUA2MQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJImdldG5zdHIiIAkJCUA2MglOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJnZXRuX3dzdHIiICAgICAgIAkJQDYzCU5PTkFNRSA7IG1pc3NpbmcNCisJImdldHN0ciIgIAkJCUA2NAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJnZXRfd2NoIiAJCQlANjUJTk9OQU1FIDsgbWlzc2luZw0KKwkiZ2V0d2luIiAgCQkJQDY2CU5PTkFNRSA7IG5vdCBpbiBYUEc0DQorOwkiZ2V0X3dzdHIiCQkJQDY3CU5PTkFNRSA7IG1pc3NpbmcNCisJImhhbGZkZWxheSIgICAgICAgCQlANjgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImhhc19jb2xvcnMiICAgICAgCQlANjkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImhhc19pYyIgIAkJCUA3MAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiaGFzX2lsIiAgCQkJQDcxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJobGluZSIgICAJCQlANzIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkiaGxpbmVfc2V0IiAgICAgICAJCUA3MwlOT05BTUUgOyBtaXNzaW5nDQorCSJpZGNvayIgICAJCQlANzQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImlkbG9rIiAgIAkJCUA3NQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiaW1tZWRvayIgCQkJQDc2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJpbmNoIiAgICAJCQlANzcJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJpbmNobnN0ciIJCQlANzgJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJpbmNoc3RyIiAJCQlANzkJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJpbml0c2NyIiAJCQlAODAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImluaXRfY29sb3IiICAgICAgCQlAODEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImluaXRfcGFpciIgICAgICAgCQlAODIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImlubnN0ciIgIAkJCUA4MwlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJpbm53c3RyIiAJCQlAODQJTk9OQU1FIDsgbWlzc2luZw0KKwkiaW5zY2giICAgCQkJQDg1CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5zZGVsbG4iCQkJQDg2CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5zZXJ0bG4iCQkJQDg3CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5zbnN0ciIgCQkJQDg4CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5zc3RyIiAgCQkJQDg5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkiaW5zdHIiICAgCQkJQDkwCU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJImluc19ud3N0ciIgICAgICAgCQlAOTEJTk9OQU1FIDsgbWlzc2luZw0KKzsJImluc193Y2giIAkJCUA5MglOT05BTUUgOyBtaXNzaW5nDQorOwkiaW5zX3dzdHIiCQkJQDkzCU5PTkFNRSA7IG1pc3NpbmcNCisJImludHJmbHVzaCIgICAgICAgCQlAOTQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJpbndzdHIiICAJCQlAOTUJTk9OQU1FIDsgbWlzc2luZw0KKzsJImluX3djaCIgIAkJCUA5NglOT05BTUUgOyBtaXNzaW5nDQorOwkiaW5fd2Noc3RyIiAgICAgICAJCUA5NwlOT05BTUUgOyBtaXNzaW5nDQorOwkiaW5fd2NobnRyIiAgICAgICAJCUA5OAlOT05BTUUgOyBtaXNzaW5nDQorCSJpc2VuZHdpbiIJCQlAOTkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImlzX2xpbmV0b3VjaGVkIiAgCQlAMTAwCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJpc193aW50b3VjaGVkIiAgIAkJQDEwMQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkia2V5bmFtZSIgCQkJQDEwMglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJImtleV9uYW1lIgkJCUAxMDMJTk9OQU1FIDsgbWlzc2luZw0KKwkia2V5cGFkIiAgCQkJQDEwNAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkia2lsbGNoYXIiCQkJQDEwNQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJImtpbGx3Y2hhciIgICAgICAgCQlAMTA2CU5PTkFNRSA7IG1pc3NpbmcNCisJImxlYXZlb2siIAkJCUAxMDcJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJImxvbmduYW1lIgkJCUAxMDgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm1ldGEiICAgIAkJCUAxMDkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm1vdmUiICAgIAkJCUAxMTAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmFkZGNoIiAJCQlAMTExCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZhZGRjaG5zdHIiICAgICAJCUAxMTIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmFkZGNoc3RyIiAgICAgIAkJQDExMwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12YWRkbnN0ciIgICAgICAgCQlAMTE0CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZhZGRzdHIiCQkJQDExNQlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdmFkZG53c3RyIiAgICAgIAkJQDExNglOT05BTUUgOyBtaXNzaW5nDQorOwkibXZhZGR3c3RyIiAgICAgICAJCUAxMTcJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12YWRkX3djaCIgICAgICAgCQlAMTE4CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdmFkZF93Y2huc3RyIiAgIAkJQDExOQlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZhZGRfd2Noc3RyIiAgICAJCUAxMjAJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZjaGdhdCIgCQkJQDEyMQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12Y3VyIiAgIAkJCUAxMjIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm12ZGVsY2giIAkJCUAxMjMJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmRlcndpbiIJCQlAMTI0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJtdmdldGNoIiAJCQlAMTI1CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZnZXRuc3RyIiAgICAgICAJCUAxMjYJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZnZXRuX3dzdHIiICAgICAJCUAxMjcJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZnZXRzdHIiCQkJQDEyOAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdmdldF93Y2giICAgICAgIAkJQDEyOQlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZnZXRfd3N0ciIgICAgICAJCUAxMzAJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZobGluZSIgCQkJQDEzMQlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdmhsaW5lX3NldCIgICAgIAkJQDEzMglOT05BTUUgOyBtaXNzaW5nDQorCSJtdmluY2giICAJCQlAMTMzCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZpbmNobnN0ciIgICAgICAJCUAxMzQJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdmluY2hzdHIiICAgICAgIAkJQDEzNQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12aW5uc3RyIgkJCUAxMzYJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZpbm53c3RyIiAgICAgICAJCUAxMzcJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZpbnNjaCIgCQkJQDEzOAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12aW5zbnN0ciIgICAgICAgCQlAMTM5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZpbnNzdHIiCQkJQDE0MAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12aW5zdHIiIAkJCUAxNDEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZpbnNfbndzdHIiICAgICAJCUAxNDIJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12aW5zX3djaCIgICAgICAgCQlAMTQzCU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdmluc193c3RyIiAgICAgIAkJQDE0NAlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZpbndzdHIiCQkJQDE0NQlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZpbl93Y2giCQkJQDE0NglOT05BTUUgOyBtaXNzaW5nDQorOwkibXZpbl93Y2hzdHIiICAgICAJCUAxNDcJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12aW5fd2NobnRyIiAgICAgCQlAMTQ4CU5PTkFNRSA7IG1pc3NpbmcNCisJIm12cHJpbnR3IgkJCUAxNDkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm12c2NhbnciIAkJCUAxNTAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm12dmxpbmUiIAkJCUAxNTEJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkibXZ2bGluZV9zZXQiICAgICAJCUAxNTIJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZ3YWRkY2giCQkJQDE1MwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2FkZGNobnN0ciIgICAgCQlAMTU0CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3YWRkY2hzdHIiICAgICAJCUAxNTUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndhZGRuc3RyIiAgICAgIAkJQDE1NglOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2FkZHN0ciIgICAgICAgCQlAMTU3CU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIm12d2FkZG53c3RyIiAgICAgCQlAMTU4CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdndhZGR3c3RyIiAgICAgIAkJQDE1OQlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3YWRkX3djaCIgICAgICAJCUAxNjAJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12d2FkZF93Y2huc3RyIiAgCQlAMTYxCU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdndhZGRfd2Noc3RyIiAgIAkJQDE2MglOT05BTUUgOyBtaXNzaW5nDQorCSJtdndjaGdhdCIJCQlAMTYzCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3ZGVsY2giCQkJQDE2NAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2dldGNoIgkJCUAxNjUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndnZXRuc3RyIiAgICAgIAkJQDE2NglOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdndnZXRuX3dzdHIiICAgIAkJQDE2NwlOT05BTUUgOyBtaXNzaW5nDQorCSJtdndnZXRzdHIiICAgICAgIAkJQDE2OAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdndnZXRfd2NoIiAgICAgIAkJQDE2OQlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3Z2V0X3dzdHIiICAgICAJCUAxNzAJTk9OQU1FIDsgbWlzc2luZw0KKwkibXZ3aGxpbmUiCQkJQDE3MQlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdndobGluZV9zZXQiICAgIAkJQDE3MglOT05BTUUgOyBtaXNzaW5nDQorCSJtdndpbiIgICAJCQlAMTczCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJtdndpbmNoIiAJCQlAMTc0CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3aW5jaG5zdHIiICAgICAJCUAxNzUJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndpbmNoc3RyIiAgICAgIAkJQDE3NglOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2lubnN0ciIgICAgICAgCQlAMTc3CU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIm12d2lubndzdHIiICAgICAgCQlAMTc4CU5PTkFNRSA7IG1pc3NpbmcNCisJIm12d2luc2NoIgkJCUAxNzkJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJtdndpbnNuc3RyIiAgICAgIAkJQDE4MAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIm12d2luc3N0ciIgICAgICAgCQlAMTgxCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkibXZ3aW5zdHIiCQkJQDE4MglOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdndpbnNfbndzdHIiICAgIAkJQDE4MwlOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3aW5zX3djaCIgICAgICAJCUAxODQJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12d2luc193c3RyIiAgICAgCQlAMTg1CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdndpbndzdHIiICAgICAgIAkJQDE4NglOT05BTUUgOyBtaXNzaW5nDQorOwkibXZ3aW5fd2NoIiAgICAgICAJCUAxODcJTk9OQU1FIDsgbWlzc2luZw0KKzsJIm12d2luX3djaG5zdHIiICAgCQlAMTg4CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJtdndpbl93Y2hzdHIiICAgIAkJQDE4OQlOT05BTUUgOyBtaXNzaW5nDQorCSJtdndwcmludHciICAgICAgIAkJQDE5MAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibXZ3c2NhbnciCQkJQDE5MQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibXZ3dmxpbmUiCQkJQDE5MglOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJtdnd2bGluZV9zZXQiICAgIAkJQDE5MwlOT05BTUUgOyBtaXNzaW5nDQorCSJuYXBtcyIgICAJCQlAMTk0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJuZXdwYWQiICAJCQlAMTk1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJuZXd0ZXJtIiAJCQlAMTk2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJuZXd3aW4iICAJCQlAMTk3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJubCIgICAgICAJCQlAMTk4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJub2NicmVhayIJCQlAMTk5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJub2RlbGF5IiAJCQlAMjAwCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJub2VjaG8iICAJCQlAMjAxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJub25sIiAgICAJCQlAMjAyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJub3FpZmx1c2giICAgICAgIAkJQDIwMwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibm9yYXciICAgCQkJQDIwNAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkibm90aW1lb3V0IiAgICAgICAJCUAyMDUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm92ZXJsYXkiIAkJCUAyMDYJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIm92ZXJ3cml0ZSIgICAgICAgCQlAMjA3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJwYWlyX2NvbnRlbnQiICAgIAkJQDIwOAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkiUEFJUl9OVU1CRVIiICAgICAJCUAyMDkJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJwZWNob2NoYXIiICAgICAgIAkJQDIxMAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJInBlY2hvX3djaGFyIiAgICAgCQlAMjExCU5PTkFNRSA7IG1pc3NpbmcNCisJInBub3V0cmVmcmVzaCIgICAgCQlAMjEyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJwcmVmcmVzaCIJCQlAMjEzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJwcmludHciICAJCQlAMjE0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJwdXRwIiAgICAJCQlAMjE1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJwdXR3aW4iICAJCQlAMjE2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJxaWZsdXNoIiAJCQlAMjE3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJyYXciICAgICAJCQlAMjE4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJyZWRyYXd3aW4iICAgICAgIAkJQDIxOQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJInJlZnJlc2giIAkJCUAyMjAJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJyZXNldHR5IiAJCQlAMjIxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJyZXNldF9wcm9nX21vZGUiIAkJQDIyMglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkicmVzZXRfc2hlbGxfbW9kZSIJCUAyMjMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInJpcG9mZmxpbmUiICAgICAgCQlAMjI0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzYXZldHR5IiAJCQlAMjI1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzY2FudyIgICAJCQlAMjI2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzY3JfZHVtcCIJCQlAMjI3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzY3JfaW5pdCIJCQlAMjI4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzY3JsIiAgICAJCQlAMjI5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkic2Nyb2xsIiAgCQkJQDIzMAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJInNjcm9sbG9rIgkJCUAyMzEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInNjcl9yZXN0b3JlIiAgICAgCQlAMjMyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzY3Jfc2V0IiAJCQlAMjMzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkic2V0Y2NoYXIiCQkJQDIzNAlOT05BTUUgOyBtaXNzaW5nDQorCSJzZXRzY3JyZWciICAgICAgIAkJQDIzNQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJInNldF90ZXJtIgkJCUAyMzYJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInNsa19hdHRyb2ZmIiAgICAgCQlAMjM3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkic2xrX2F0dHJfb2ZmIiAgICAJCUAyMzgJTk9OQU1FIDsgbWlzc2luZw0KKwkic2xrX2F0dHJvbiIgICAgICAJCUAyMzkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJzbGtfYXR0cl9vbiIgICAgIAkJQDI0MAlOT05BTUUgOyBtaXNzaW5nDQorCSJzbGtfYXR0cnNldCIgICAgIAkJQDI0MQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJInNsa19hdHRyX3NldCIgICAgCQlAMjQyCU5PTkFNRSA7IG1pc3NpbmcNCisJInNsa19jbGVhciIgICAgICAgCQlAMjQzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzbGtfaW5pdCIJCQlAMjQ0CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzbGtfbGFiZWwiICAgICAgIAkJQDI0NQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2xrX25vdXRyZWZyZXNoIiAJCUAyNDYJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInNsa19yZWZyZXNoIiAgICAgCQlAMjQ3CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJzbGtfcmVzdG9yZSIgICAgIAkJQDI0OAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2xrX3NldCIgCQkJQDI0OQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkic2xrX3RvdWNoIiAgICAgICAJCUAyNTAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJzbGtfd3NldCIJCQlAMjUxCU5PTkFNRSA7IG1pc3NpbmcNCisJInN0YW5kb3V0IgkJCUAyNTIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJzdGFuZGVuZCIJCQlAMjUzCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkic3RhcnRfY29sb3IiICAgICAJCUAyNTQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInN1YnBhZCIgIAkJCUAyNTUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInN1YndpbiIgIAkJCUAyNTYJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInN5bmNvayIgIAkJCUAyNTcJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInRlcm1hdHRycyIgICAgICAgCQlAMjU4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ0ZXJtbmFtZSIJCQlAMjU5CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ0aWdldGZsYWciICAgICAgIAkJQDI2MAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkidGlnZXRudW0iCQkJQDI2MQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkidGlnZXRzdHIiCQkJQDI2MglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJInRpbWVvdXQiIAkJCUAyNjMJTk9OQU1FIDsgaW1wbGVtZW50ZWQgPDwgTk8hIQ0KKwkidHlwZWFoZWFkIiAgICAgICAJCUAyNjQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInVuZ2V0Y2giIAkJCUAyNjUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ1bmdldF93Y2giICAgICAgIAkJQDI2NglOT05BTUUgOyBtaXNzaW5nDQorCSJ1bnRvdWNod2luIiAgICAgIAkJQDI2NwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJInVzZV9lbnYiIAkJCUAyNjgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInZpZGF0dHIiIAkJCUAyNjkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ2aWRfYXR0ciIJCQlAMjcwCU5PTkFNRSA7IG1pc3NpbmcNCisJInZpZHB1dHMiIAkJCUAyNzEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ2aWRfcHV0cyIJCQlAMjcyCU5PTkFNRSA7IG1pc3NpbmcNCisJInZsaW5lIiAgIAkJCUAyNzMJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkidmxpbmVfc2V0IiAgICAgICAJCUAyNzQJTk9OQU1FIDsgbWlzc2luZw0KKwkidndwcmludHciCQkJQDI3NQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJInZ3X3ByaW50dyIgICAgICAgCQlAMjc2CU5PTkFNRSA7IGltcGxlbWVudGVkIDw8IE5PISENCisJInZ3c2NhbnciIAkJCUAyNzcJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ2d19zY2FudyIJCQlAMjc4CU5PTkFNRSA7IGltcGxlbWVudGVkIDw8IE5PISENCisJIndhZGRjaCIgIAkJCUAyNzkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndhZGRjaG5zdHIiICAgICAgCQlAMjgwCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3YWRkY2hzdHIiICAgICAgIAkJQDI4MQlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndhZGRuc3RyIgkJCUAyODIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndhZGRzdHIiIAkJCUAyODMJTk9OQU1FIDsgZ2VuZXJhdGVkDQorOwkid2FkZHdzdHIiCQkJQDI4NAlOT05BTUUgOyBtaXNzaW5nDQorOwkid2FkZF93Y2giCQkJQDI4NQlOT05BTUUgOyBtaXNzaW5nDQorOwkid2FkZF93Y2huc3RyIiAgICAJCUAyODYJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndhZGRfd2Noc3RyIiAgICAgCQlAMjg3CU5PTkFNRSA7IG1pc3NpbmcNCisJIndhdHRyb24iIAkJCUAyODgJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ3YXR0cm9mZiIJCQlAMjg5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid2F0dHJzZXQiCQkJQDI5MAlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndhdHRyX2dldCIgICAgICAgCQlAMjkxCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid2F0dHJfb24iCQkJQDI5MglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2F0dHJfb2ZmIiAgICAgICAJCUAyOTMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ3YXR0cl9zZXQiICAgICAgIAkJQDI5NAlOT05BTUUgOyBpbXBsZW1lbnRlZCA8PCBOTyEhDQorCSJ3YmtnZCIgICAJCQlAMjk1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3YmtnZHNldCIJCQlAMjk2CU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIndia2dybmRzZXQiICAgICAgCQlAMjk3CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJ3Ymtncm5kIiAJCQlAMjk4CU5PTkFNRSA7IG1pc3NpbmcNCisJIndib3JkZXIiIAkJCUAyOTkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ3Ym9yZGVyX3NldCIgICAgIAkJQDMwMAlOT05BTUUgOyBtaXNzaW5nDQorCSJ3Y2hnYXQiICAJCQlAMzAxCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3Y2xlYXIiICAJCQlAMzAyCU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3Y2xydG9ib3QiICAgICAgIAkJQDMwMwlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2NscnRvZW9sIiAgICAgICAJCUAzMDQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndjdXJzeW5jdXAiICAgICAgCQlAMzA1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3ZGVsY2giICAJCQlAMzA2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3ZGVsZXRlbG4iICAgICAgIAkJQDMwNwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndlY2hvY2hhciIgICAgICAgCQlAMzA4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid2VjaG9fd2NoYXIiICAgICAJCUAzMDkJTk9OQU1FIDsgbWlzc2luZw0KKwkid2VyYXNlIiAgCQkJQDMxMAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKzsJIndnZXRia2dybmQiICAgICAgCQlAMzExCU5PTkFNRSA7IG1pc3NpbmcNCisJIndnZXRjaCIgIAkJCUAzMTIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndnZXRuc3RyIgkJCUAzMTMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ3Z2V0bl93c3RyIiAgICAgIAkJQDMxNAlOT05BTUUgOyBtaXNzaW5nDQorCSJ3Z2V0c3RyIiAJCQlAMzE1CU5PTkFNRSA7IGdlbmVyYXRlZA0KKzsJIndnZXRfd2NoIgkJCUAzMTYJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndnZXRfd3N0ciIgICAgICAgCQlAMzE3CU5PTkFNRSA7IG1pc3NpbmcNCisJIndobGluZSIgIAkJCUAzMTgJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ3aGxpbmVfc2V0IiAgICAgIAkJQDMxOQlOT05BTUUgOyBtaXNzaW5nDQorCSJ3aW5jaCIgICAJCQlAMzIwCU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid2luY2huc3RyIiAgICAgICAJCUAzMjEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndpbmNoc3RyIgkJCUAzMjIJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ3aW5uc3RyIiAJCQlAMzIzCU5PTkFNRSA7IGltcGxlbWVudGVkDQorOwkid2lubndzdHIiCQkJQDMyNAlOT05BTUUgOyBtaXNzaW5nDQorCSJ3aW5zY2giICAJCQlAMzI1CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3aW5zZGVsbG4iICAgICAgIAkJQDMyNglOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid2luc2VydGxuIiAgICAgICAJCUAzMjcJTk9OQU1FIDsgZ2VuZXJhdGVkDQorCSJ3aW5zbnN0ciIJCQlAMzI4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3aW5zc3RyIiAJCQlAMzI5CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid2luc3RyIiAgCQkJQDMzMAlOT05BTUUgOyBnZW5lcmF0ZWQNCis7CSJ3aW5zX253c3RyIiAgICAgIAkJQDMzMQlOT05BTUUgOyBtaXNzaW5nDQorOwkid2luc193Y2giCQkJQDMzMglOT05BTUUgOyBtaXNzaW5nDQorOwkid2luc193c3RyIiAgICAgICAJCUAzMzMJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndpbndzdHIiIAkJCUAzMzQJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndpbl93Y2giIAkJCUAzMzUJTk9OQU1FIDsgbWlzc2luZw0KKzsJIndpbl93Y2huc3RyIiAgICAgCQlAMzM2CU5PTkFNRSA7IG1pc3NpbmcNCis7CSJ3aW5fd2Noc3RyIiAgICAgIAkJQDMzNwlOT05BTUUgOyBtaXNzaW5nDQorCSJ3bW92ZSIgICAJCQlAMzM4CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3bm91dHJlZnJlc2giICAgIAkJQDMzOQlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid3ByaW50dyIgCQkJQDM0MAlOT05BTUUgOyBpbXBsZW1lbnRlZA0KKwkid3JlZHJhd2xuIiAgICAgICAJCUAzNDEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndyZWZyZXNoIgkJCUAzNDIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndyZXNpemUiIAkJCUAzNDMJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndzY2FudyIgIAkJCUAzNDQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndzY3JsIiAgIAkJCUAzNDUJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndzZXRzY3JyZWciICAgICAgCQlAMzQ2CU5PTkFNRSA7IGltcGxlbWVudGVkDQorCSJ3c3RhbmRvdXQiICAgICAgIAkJQDM0NwlOT05BTUUgOyBnZW5lcmF0ZWQNCisJIndzdGFuZGVuZCIgICAgICAgCQlAMzQ4CU5PTkFNRSA7IGdlbmVyYXRlZA0KKwkid3N5bmNkb3duIiAgICAgICAJCUAzNDkJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJIndzeW5jdXAiIAkJCUAzNTAJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInd0aW1lb3V0IgkJCUAzNTEJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCisJInd0b3VjaGxuIgkJCUAzNTIJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ3dW5jdHJsIiAJCQlAMzUzCU5PTkFNRSA7IG1pc3NpbmcNCisJInd2bGluZSIgIAkJCUAzNTQJTk9OQU1FIDsgaW1wbGVtZW50ZWQNCis7CSJ3dmxpbmVfc2V0IiAgICAgIAkJQDM1NQlOT05BTUUgOyBtaXNzaW5nDQorDQorCSJnZXRtb3VzZSIJCQlAMzU2CU5PTkFNRQ0KKwkidW5nZXRtb3VzZSIJCQlAMzU3CU5PTkFNRQ0KKwkibW91c2VtYXNrIgkJCUAzNTgJTk9OQU1FDQorCSJ3ZW5jbG9zZSIJCQlAMzU5CU5PTkFNRQ0KKwkibW91c2VpbnRlcnZhbCIJCQlAMzYwCU5PTkFNRQ0KKw0KKzsgZnJvbSB1bmN0cmwuaA0KKwkidW5jdHJsIgkJCUAzNjEJTk9OQU1FDQorDQorOyBwdWJsaWNzIGZvciB0cmFjaW5nDQorCSJfdHJhY2VmIgkJCUA0MDAJTk9OQU1FDQorCSJfdHJhY2VkdW1wIgkJCUA0MDEJTk9OQU1FDQorCSJfdHJhY2VhdHRyIgkJCUA0MDIJTk9OQU1FDQorCSJfdHJhY2VjaGFyIgkJCUA0MDMJTk9OQU1FDQorCSJfdHJhY2Vtb3VzZSIJCQlANDA0CU5PTkFNRQ0KKwkidHJhY2UiCQkJCUA0MDUJTk9OQU1FDQorDQorOyoqKioqKioqKioNCis7KiB0ZXJtLmggKg0KKzsqKioqKioqKioqDQorCSJib29sbmFtZXMiCQkJQDYwMAlOT05BTUUgOyB2YXJpYWJsZQ0KKwkiYm9vbGNvZGVzIgkJCUA2MDEJTk9OQU1FIDsgdmFyaWFibGUNCisJImJvb2xmbmFtZXMiCQkJQDYwMglOT05BTUUgOyB2YXJpYWJsZQ0KKwkibnVtbmFtZXMiCQkJQDYwMwlOT05BTUUgOyB2YXJpYWJsZQ0KKwkibnVtY29kZXMiCQkJQDYwNAlOT05BTUUgOyB2YXJpYWJsZQ0KKwkibnVtZm5hbWVzIgkJCUA2MDUJTk9OQU1FIDsgdmFyaWFibGUNCisJInN0cm5hbWVzIgkJCUA2MDYJTk9OQU1FIDsgdmFyaWFibGUNCisJInN0cmNvZGVzIgkJCUA2MDgJTk9OQU1FIDsgdmFyaWFibGUNCisJInN0cmZuYW1lcyIJCQlANjA5CU5PTkFNRSA7IHZhcmlhYmxlDQorDQorOyBpbnRlcm5hbHMNCisJIl9uY19yZWFkX2VudHJ5IgkJQDYyMAlOT05BTUUNCisJIl9uY19yZWFkX2ZpbGVfZW50cnkiCQlANjIxCU5PTkFNRQ0KKwkiX25jX2ZpcnN0X25hbWUiCQlANjIyCU5PTkFNRQ0KKwkiX25jX25hbWVfbWF0Y2giCQlANjIzCU5PTkFNRQ0KKwkiX25jX3JlYWRfdGVybWNhcF9lbnRyeSIJQDYyNAlOT05BTUUNCisJIl9uY19mYWxsYmFjayIJCQlANjI1CU5PTkFNRQ0KKw0KKzsgZW50cnkgcG9pbnRzDQorCSJzZXRfY3VydGVybSIJCQlANjQwCU5PTkFNRQ0KKwkiZGVsX2N1cnRlcm0iCQkJQDY0MQlOT05BTUUNCisNCis7IGVudHJ5IHBvaW50cw0KKzsJInB1dHAiCQkJCUA2NDIJTk9OQU1FCTsgYWxyZWFkeSBkZWZpbmVkDQorCSJyZXN0YXJ0dGVybSIJCQlANjQzCU5PTkFNRQ0KKwkic2V0dXB0ZXJtIgkJCUA2NDQJTk9OQU1FDQorCSJ0Z2V0ZW50IgkJCUA2NDUJTk9OQU1FDQorCSJ0Z2V0ZmxhZyIJCQlANjQ2CU5PTkFNRQ0KKwkidGdldG51bSIJCQlANjQ3CU5PTkFNRQ0KKwkidGdldHN0ciIJCQlANjQ4CU5PTkFNRQ0KKwkidGdvdG8iCQkJCUA2NDkJTk9OQU1FDQorOwkidGlnZXRmbGFnIgkJCUA2NTAJTk9OQU1FCTsgYWxyZWFkeSBkZWZpbmVkDQorOwkidGlnZXRudW0iCQkJQDY1MQlOT05BTUUJOyBhbHJlYWR5IGRlZmluZWQNCis7CSJ0aWdldHN0ciIJCQlANjUyCU5PTkFNRQk7IGFscmVhZHkgZGVmaW5lZA0KKwkidHBhcm0iCQkJCUA2NTMJTk9OQU1FDQorCSJ0cGFyYW0iCQkJQDY1NAlOT05BTUUNCisJInRwdXRzIgkJCQlANjU1CU5PTkFNRQ0KKw0KKzsqKioqKioqKioqKioqDQorOyogdGVybWNhcC5oICoNCis7KioqKioqKioqKioqKg0KKzsgdGhlIGZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBkZWZpbmVkIGluIHRlcm0uaA0KKwkiUEMiCQkJCUA2NjAJTk9OQU1FDQorCSJVUCIJCQkJQDY2MQlOT05BTUUNCisJIkJDIgkJCQlANjYyCU5PTkFNRQ0KKwkib3NwZWVkIgkJCUA2NjMJTk9OQU1FDQorDQorOyoqKioqKioqKioqKioqKioNCis7KiB0ZXJtX2VudHJ5LmggKg0KKzsqKioqKioqKioqKioqKioqDQorCSJfbmNfaGVhZCIJCQlANzAwCU5PTkFNRQ0KKwkiX25jX3RhaWwiCQkJQDcwMQlOT05BTUUNCisNCis7IGFsbG9jX2VudHJ5LmM6IGVsZW1lbnRhcnkgYWxsb2NhdGlvbiBjb2RlDQorCSJfbmNfaW5pdF9lbnRyeSIJCUA3MDIJTk9OQU1FDQorCSJfbmNfc2F2ZV9zdHIiCQkJQDcwMwlOT05BTUUNCisJIl9uY19tZXJnZV9lbnRyeSIJCUA3MDQJTk9OQU1FDQorCSJfbmNfd3JhcF9lbnRyeSIJCUA3MDUJTk9OQU1FDQorDQorOyBwYXJzZV9lbnRyeS5jOiBlbnRyeS1wYXJzaW5nIGNvZGUNCisJIl9uY19wYXJzZV9lbnRyeSIJCUA3MDYJTk9OQU1FDQorCSJfbmNfY2FwY21wIgkJCUA3MDcJTk9OQU1FDQorDQorOyB3cml0ZV9lbnRyeS5jOiB3cml0aW5nIGFuIGVudHJ5IHRvIHRoZSBmaWxlIHN5c3RlbQ0KKwkiX25jX3dyaXRlX2VudHJ5IgkJQDcwOAlOT05BTUUNCisNCis7IGNvbXBfcGFyc2UuYzogZW50cnkgbGlzdCBoYW5kbGluZw0KKwkiX25jX3JlYWRfZW50cnlfc291cmNlIgkJQDcwOQlOT05BTUUNCisJIl9uY19lbnRyeV9tYXRjaCIJCUA3MTAJTk9OQU1FDQorCSJfbmNfcmVzb2x2ZV91c2VzIgkJQDcxMQlOT05BTUUNCisJIl9uY19mcmVlX2VudHJpZXMiCQlANzEyCU5PTkFNRQ0KKw0KKzsqKioqKioqKioNCis7KiB0aWMuaCAqDQorOyoqKioqKioqKg0KKzsJIl9uY190cmFjaW5nIgkJCUA4MDAJTk9OQU1FCTsgZGVmaW5lZCBiZWxvdw0KKzsJIl9uY190cmFjZWYiCQkJQDgwMQlOT05BTUUJOyBtaXNzaW5nDQorOwkiX25jX3Zpc2J1ZiIJCQlAODAyCU5PTkFNRQk7IGRlZmluZWQgYmVsb3cNCisNCisJIl9uY19jdXJyX3Rva2VuIgkJQDgwMwlOT05BTUUNCisNCisJIl9uY19pbmZvX2hhc2hfdGFibGUiCQlAODA0CU5PTkFNRQ0KKwkiX25jX2NhcF9oYXNoX3RhYmxlIgkJQDgwNQlOT05BTUUNCisNCisJIl9uY19jYXBhbGlhc190YWJsZSIJCUA4MDYJTk9OQU1FDQorCSJfbmNfaW5mb2FsaWFzX3RhYmxlIgkJQDgwNwlOT05BTUUNCisJIl9uY19nZXRfdGFibGUiCQkJQDgwOAlOT05BTUUNCisNCis7IGNvbXBfaGFzaC5jOiBuYW1lIGxvb2t1cA0KKwkiX25jX2ZpbmRfZW50cnkiCQlAODA5CU5PTkFNRQ0KKwkiX25jX2ZpbmRfdHlwZV9lbnRyeSIJCUA4MTAJTk9OQU1FDQorDQorOyBjb21wX3NjYW4uYzogbGV4aWNhbCBhbmFseXNpcw0KKwkiX25jX2dldF90b2tlbiIJCQlAODExCU5PTkFNRQ0KKwkiX25jX3B1c2hfdG9rZW4iCQlAODEyCU5PTkFNRQ0KKwkiX25jX3Jlc2V0X2lucHV0IgkJQDgxMwlOT05BTUUNCisJIl9uY19wYW5pY19tb2RlIgkJQDgxNAlOT05BTUUNCisJIl9uY19jdXJyX2xpbmUiCQkJQDgxNQlOT05BTUUNCisJIl9uY19jdXJyX2NvbCIJCQlAODE2CU5PTkFNRQ0KKwkiX25jX2N1cnJfZmlsZV9wb3MiCQlAODE3CU5PTkFNRQ0KKwkiX25jX2NvbW1lbnRfc3RhcnQiCQlAODE4CU5PTkFNRQ0KKwkiX25jX2NvbW1lbnRfZW5kIgkJQDgxOQlOT05BTUUNCisJIl9uY19zeW50YXgiCQkJQDgyMAlOT05BTUUNCisJIl9uY19zdGFydF9saW5lIgkJQDgyMQlOT05BTUUNCisNCis7IGNvbXBfZXJyb3IuYzogd2FybmluZyAmIGFib3J0IG1lc3NhZ2VzDQorCSJfbmNfc2V0X3NvdXJjZSIJCUA4MjIJTk9OQU1FDQorCSJfbmNfZ2V0X3R5cGUiCQkJQDgyMwlOT05BTUUNCisJIl9uY19zZXRfdHlwZSIJCQlAODI0CU5PTkFNRQ0KKwkiX25jX3N5c2Vycl9hYm9ydCIJCUA4MjUJTk9OQU1FDQorCSJfbmNfZXJyX2Fib3J0IgkJCUA4MjYJTk9OQU1FDQorCSJfbmNfd2FybmluZyIJCQlAODI3CU5PTkFNRQ0KKwkiX25jX3N1cHByZXNzX3dhcm5pbmdzIgkJQDgyOAlOT05BTUUNCisNCis7IGNhcHRvaW5mby5jOiBjYXBhYmlsaXR5IGNvbnZlcnNpb24NCisJIl9uY19jYXB0b2luZm8iCQkJQDgyOQlOT05BTUUNCisJIl9uY19pbmZvdG9jYXAiCQkJQDgzMAlOT05BTUUNCisNCis7IGNvbXBfbWFpbi5jOiBjb21waWxlciBtYWluDQorOwkiX25jX3Byb2duYW1lIgkJCUA4MzEJTk9OQU1FCTsgbm8gbmVlZCB0byBleHBvcnQgaXQNCisNCisNCis7ICoqKioqKioqKioqKioqKioqDQorOyBOQ3Vyc2VzIGludGVybmFscyAtLSBqdXN0IGZvciBwcm9ncy8qLmV4ZSBhbmQgdGhlIGxpYnJhcnkgaXRzZWxmLg0KKzsgKioqKioqKioqKioqKioqKioNCisNCis7IEZvciBicm9rZW4gbGlua2Vycw0KKzsJIl9uY19zY3JlZW4iCQkJQDEwMDAJTk9OQU1FDQorOwkiX25jX2FsbG9jX3NjcmVlbiIJCUAxMDAxCU5PTkFNRQ0KKzsJIl9uY19zZXRfc2NyZWVuIgkJQDEwMDIJTk9OQU1FDQorDQorOyBGb3Igbm90IHNvIGJyb2tlbiBsaW5rZXJzDQorCSJTUCIJCQkJQDEwMDMJTk9OQU1FDQorDQorOyBXaG8ga25vd3Mgd2hhdCB0aGlzIGlzIGZvcg0KKwkiX3Nsa19pbml0IgkJCUAxMDA0CU5PTkFNRQ0KKwkic2xrX2luaXRpYWxpemUiCQlAMTAwNQlOT05BTUUNCisNCis7IFRyYWNpbmcgLS0gYWxsIGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkNCisJIl9uY190cmFjaW5nIgkJCUAxMDEwCU5PTkFNRQ0KKwkiX25jX3RwdXRzX3RyYWNlIgkJQDEwMTEJTk9OQU1FDQorCSJfbmNfdmlzYnVmIgkJCUAxMDEyCU5PTkFNRQ0KKw0KKzsgbGliX2Fjcy5jDQorCSJpbml0X2FjcyIJCQlAMTAxMwlOT05BTUUNCisNCis7IGxpYl9tdmN1ci5jDQorCSJfbmNfbXZjdXJfaW5pdCIJCUAxMDE0CU5PTkFNRQ0KKwkiX25jX212Y3VyX3dyYXAiCQlAMTAxNQlOT05BTUUNCisJIl9uY19tdmN1cl9zY3JvbGxuIgkJQDEwMTYJTk9OQU1FDQorDQorOyBsaWJfbW91c2UuYw0KKwkiX25jX21vdXNlX2luaXQiCQlAMTAxNwlOT05BTUUNCisJIl9uY19tb3VzZV9ldmVudCIJCUAxMDE4CU5PTkFNRQ0KKwkiX25jX21vdXNlX2lubGluZSIgICAgICAgIAlAMTAxOQlOT05BTUUNCisJIl9uY19tb3VzZV9wYXJzZSIJCUAxMDIwCU5PTkFNRQ0KKwkiX25jX21vdXNlX3dyYXAiCQlAMTAyMQlOT05BTUUNCisJIl9uY19tb3VzZV9yZXN1bWUiCSAgICAgICAgQDEwMjIJTk9OQU1FDQorCSJfbmNfbWF4X2NsaWNrX2ludGVydmFsIglAMTAyMwlOT05BTUUNCisNCis7IGVsc2V3aGVyZSAuLi4NCisJIl9uY19rZXlwYWQiIAkJCUAxMDI0CU5PTkFNRQ0KKwkiX25jX21ha2VuZXciCQkJQDEwMjUJTk9OQU1FDQorCSJfbmNfb3V0Y2giCQkJQDEwMjYJTk9OQU1FDQorCSJfbmNfcmVuZGVyIgkJCUAxMDI3CU5PTkFNRQ0KKwkiX25jX3dhZGRjaF9ub3N5bmMiCQlAMTAyOAlOT05BTUUNCisJIl9uY19zY3JvbGxfb3B0aW1pemUiCQlAMTAyOQlOT05BTUUNCisJIl9uY19zY3JvbGxfd2luZG93IgkJQDEwMzAJTk9OQU1FDQorCSJfbmNfc2V0dXBzY3JlZW4iCQlAMTAzMQlOT05BTUUNCisJIl9uY19iYWNrc3BhY2UiCQkJQDEwMzIJTk9OQU1FDQorCSJfbmNfb3V0c3RyIgkJCUAxMDMzCU5PTkFNRQ0KKwkiX25jX3NpZ25hbF9oYW5kbGVyIgkJQDEwMzQJTk9OQU1FDQorCSJfbmNfc3luY2hvb2siCQkJQDEwMzUJTk9OQU1FDQorCSJfbmNfdGltZWRfd2FpdCIJCUAxMDM2CU5PTkFNRQ0KKwkiX25jX2RvX2NvbG9yIgkJCUAxMDM3CU5PTkFNRQ0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21pc2MvbmN1cnNlcy5zdXBwIGIvbmN1cnNlcy01LjcvbWlzYy9uY3Vyc2VzLnN1cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhNTgyYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L21pc2MvbmN1cnNlcy5zdXBwCkBAIC0wLDAgKzEsMjA1IEBACisjICRJZDogbmN1cnNlcy5zdXBwLHYgMS43IDIwMDgvMDkvMjAgMTg6NDM6NDIgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoaXMgaXMgYSB3YXJuaW5nLXN1cHByZXNzaW9uIGZpbGUgZm9yIHZhbGdyaW5kIGFuZCBuY3Vyc2VzLgorIworIyBuY3Vyc2VzIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIC0tZGlzYWJsZS1sZWFrcyBvcHRpb24sIHdoaWNoCisjIGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBjYWxsIF9uY19mcmVlYWxsKCkgb3IgX25jX2ZyZWVfYW5kX2V4aXQoKSwgdG8KKyMgZnJlZSBhbGwgb2YgbmN1cnNlcycgInBlcm1hbmVudCIgbWVtb3J5LgorIworIyBTb21lIG9mIHRoZXNlIGxlYWtzIGNhbiBiZSBmcmVlZCBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBpdHMgb3duIGNsZWFudXAsCisjIGZvciBleGFtcGxlOgorIwlkZWxzY3JlZW4oU1ApOworIwlkZWxfY3VydGVybShjdXJfdGVybSk7CisjIEhvd2V2ZXIsIGZldyBhcHBsaWNhdGlvbnMgZG8gdGhpcy4KKworeworICAgbmN1cnNlc19sZWFrX19uY19hZGRfdG9fdHJ5CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBmdW46X25jX2FkZF90b190cnkKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19ob21lX3Rlcm1pbmZvCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46X25jX2hvbWVfdGVybWluZm8KK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19pbml0X3dhY3MKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfbmNfaW5pdF93YWNzCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfa2V5bmFtZQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOl9uY19rZXluYW1lCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfa2V5bmFtZV8yCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46c3RyZHVwCisgICBmdW46X25jX2tleW5hbWUKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19wcmludGZfc3RyaW5nCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46X25jX2RvYWxsb2MKKyAgIGZ1bjpfbmNfcHJpbnRmX3N0cmluZworfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX3JlYWRfdGVybXR5cGUKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfbmNfcmVhZF90ZXJtdHlwZQorICAgZnVuOl9uY19yZWFkX2ZpbGVfZW50cnkKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19yZWFkX3Rlcm10eXBlXzIKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfbmNfZG9hbGxvYworICAgZnVuOl9uY19yZWFkX3Rlcm10eXBlCisgICBmdW46X25jX3JlYWRfZmlsZV9lbnRyeQorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX3Njcm9sbF9vcHRpbWl6ZQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOl9uY19oYXNoX21hcAorICAgZnVuOl9uY19zY3JvbGxfb3B0aW1pemUKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19zY3JvbGxfb3B0aW1pemVfMgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOl9uY19kb2FsbG9jCisgICBmdW46X25jX3Njcm9sbF9vcHRpbWl6ZQorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX3NldHVwc2NyZWVuCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46X25jX3NldHVwc2NyZWVuCisgICBmdW46bmV3dGVybQorfQorCit7CisgICBuY3Vyc2VzX2xlYWtfX25jX3NldHVwc2NyZWVuXzIKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpuZXd3aW4KKyAgIGZ1bjpfbmNfc2V0dXBzY3JlZW4KK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19zZXR1cHRlcm1fMQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOnN0cmR1cAorICAgZnVuOl9uY19zZXR1cHRlcm0KK30KKworeworICAgbmN1cnNlc19sZWFrX19uY19zZXR1cHRlcm0KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfbmNfc2V0dXB0ZXJtCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfc2V0dXBzY3JlZW5fMworICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOl9uY19tYWtlbmV3CisgICBmdW46bmV3d2luCisgICBmdW46X25jX3NldHVwc2NyZWVuCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfc2V0X2J1ZmZlcgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOl9uY19zZXRfYnVmZmVyCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19fbmNfdHBhcm1fYW5hbHl6ZQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOl9uY19kb2FsbG9jCisgICBmdW46X25jX3RwYXJtX2FuYWx5emUKK30KKworeworICAgbmN1cnNlc19sZWFrX19uY190cmFjZV9hbGxvYworICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOl9uY19kb2FsbG9jCisgICBmdW46X25jX3RyYWNlX2FsbG9jCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha19zdGFydF9jb2xvcgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOnN0YXJ0X2NvbG9yCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha190cGFybQorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOnJlYWxsb2MKKyAgIGZ1bjpfbmNfZG9hbGxvYworICAgZnVuOnRwYXJtCit9CisKK3sKKyAgIG5jdXJzZXNfbGVha190cGFyYW1faW50ZXJuYWwKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpyZWFsbG9jCisgICBmdW46X25jX2RvYWxsb2MKKyAgIGZ1bjpnZXRfc3BhY2UKKyAgIGZ1bjpzYXZlX251bWJlcgorICAgZnVuOnRwYXJhbV9pbnRlcm5hbAorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9wYW5lbC5kZWYgYi9uY3Vyc2VzLTUuNy9taXNjL3BhbmVsLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGNlMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9wYW5lbC5kZWYKQEAgLTAsMCArMSwyMCBAQAorTElCUkFSWSBwYW5lbDUgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQ0KK0RFU0NSSVBUSU9OICJOQ3Vyc2VzLTUtMS0yMDAwMDcwNCwgbW9kdWxlIHBhbmVsIg0KK0NPREUgTE9BRE9OQ0FMTA0KK0RBVEEgTE9BRE9OQ0FMTCBOT05TSEFSRUQgTVVMVElQTEUNCitFWFBPUlRTDQorCSJib3R0b21fcGFuZWwiCUA3CU5PTkFNRQ0KKwkiZGVsX3BhbmVsIglANQlOT05BTUUNCisJImhpZGVfcGFuZWwiCUAzCU5PTkFNRQ0KKwkibW92ZV9wYW5lbCIJQDEzCU5PTkFNRQ0KKwkibmV3X3BhbmVsIglAOAlOT05BTUUNCisJInBhbmVsX2Fib3ZlIglAOQlOT05BTUUNCisJInBhbmVsX2JlbG93IglAMTAJTk9OQU1FDQorCSJwYW5lbF9oaWRkZW4iCUAxNQlOT05BTUUNCisJInBhbmVsX3VzZXJwdHIiCUAxMglOT05BTUUNCisJInBhbmVsX3dpbmRvdyIJQDEJTk9OQU1FDQorCSJyZXBsYWNlX3BhbmVsIglAMTQJTk9OQU1FDQorCSJzZXRfcGFuZWxfdXNlcnB0ciIJQDExCU5PTkFNRQ0KKwkic2hvd19wYW5lbCIJQDQJTk9OQU1FDQorCSJ0b3BfcGFuZWwiCUA2CU5PTkFNRQ0KKwkidXBkYXRlX3BhbmVscyIJQDIJTk9OQU1FDQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy9wYW5lbC5yZWYgYi9uY3Vyc2VzLTUuNy9taXNjL3BhbmVsLnJlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQwNDVhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9wYW5lbC5yZWYKQEAgLTAsMCArMSwxOCBAQAorTElCUkFSWSBwYW5lbDIgSU5JVElOU1RBTkNFDQorREVTQ1JJUFRJT04gJ05DdXJzZXMgMS45LjllLTEgZm9yIE9TLzIgLSBwYW5lbCBsaWJyYXJ5Jw0KK0VYUE9SVFMNCisJInBhbmVsX3dpbmRvdyIJCUAxDQorCSJ1cGRhdGVfcGFuZWxzIgkJQDINCisJImhpZGVfcGFuZWwiCQlAMw0KKwkic2hvd19wYW5lbCIJCUA0DQorCSJkZWxfcGFuZWwiCQlANQ0KKwkidG9wX3BhbmVsIgkJQDYNCisJImJvdHRvbV9wYW5lbCIJCUA3DQorCSJuZXdfcGFuZWwiCQlAOA0KKwkicGFuZWxfYWJvdmUiCQlAOQ0KKwkicGFuZWxfYmVsb3ciCQlAMTANCisJInNldF9wYW5lbF91c2VycHRyIglAMTENCisJInBhbmVsX3VzZXJwdHIiCQlAMTINCisJIm1vdmVfcGFuZWwiCQlAMTMNCisJInJlcGxhY2VfcGFuZWwiCQlAMTQNCisJInBhbmVsX2hpZGRlbiIJCUAxNQ0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21pc2MvcnVuX3RpYy5pbiBiL25jdXJzZXMtNS43L21pc2MvcnVuX3RpYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzMyNDAzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy9ydW5fdGljLmluCkBAIC0wLDAgKzEsMTc0IEBACisjIUBTSEVMTEAKKyMgJElkOiBydW5fdGljLmluLHYgMS4yMyAyMDA2LzEwLzI4IDE5OjQzOjMwIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5NiwyMDAwCisjCisjIFRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gaW5zdGFsbCB0ZXJtaW5mby5zcmMgdXNpbmcgdGljLiAgV2UgdXNlIGEgc2NyaXB0CisjIGJlY2F1c2UgdGhlIHBhdGggY2hlY2tpbmcgaXMgdG9vIGF3a3dhcmQgdG8gZG8gaW4gYSBtYWtlZmlsZS4KKyMKKyMgQXNzdW1lczoKKyMJVGhlIGxlYWYgZGlyZWN0b3J5IG5hbWVzIChsaWIsIHRhYnNldCwgdGVybWluZm8pCisjCitlY2hvICcqKiBCdWlsZGluZyB0ZXJtaW5mbyBkYXRhYmFzZSwgcGxlYXNlIHdhaXQuLi4nCisjCisjIFRoZSBzY3JpcHQgaXMgZGVzaWduZWQgdG8gYmUgcnVuIGZyb20gdGhlIG1pc2MvTWFrZWZpbGUgYXMKKyMJbWFrZSBpbnN0YWxsLmRhdGEKKworOiAke3N1ZmZpeD1AUFJPR19FWFRAfQorOiAke0RFU1RESVI9QERFU1RESVJAfQorOiAke3ByZWZpeD1AcHJlZml4QH0KKzogJHtleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhAfQorOiAke2JpbmRpcj1AYmluZGlyQH0KKzogJHt0b3Bfc3JjZGlyPUB0b3Bfc3JjZGlyQH0KKzogJHtzcmNkaXI9QHNyY2RpckB9Cis6ICR7ZGF0YWRpcj1AZGF0YWRpckB9Cis6ICR7dGljZGlyPUBURVJNSU5GT0B9Cis6ICR7c291cmNlPUBURVJNSU5GT19TUkNAfQorOiAke0xOX1M9IkBMTl9TQCJ9Cis6ICR7VEhBVF9DQz1jY30KKzogJHtUSElTX0NDPWNjfQorOiAke2V4dF9mdW5jcz1ATkNVUlNFU19FWFRfRlVOQ1NAfQorCit0ZXN0IC16ICIke0RFU1RESVJ9IiAmJiBERVNURElSPQorCisjIEFsbG93IHRpYyB0byBydW4gZWl0aGVyIGZyb20gdGhlIGluc3RhbGwtcGF0aCwgb3IgZnJvbSB0aGUgYnVpbGQtZGlyZWN0b3J5LgorIyBEbyBub3QgZG8gdGhpcyBpZiB3ZSBhcHBlYXIgdG8gYmUgY3Jvc3MtY29tcGlsaW5nLiAgSW4gdGhhdCBjYXNlLCB3ZSByZWx5CisjIG9uIHRoZSBob3N0J3MgY29weSBvZiB0aWMgdG8gY29tcGlsZSB0aGUgdGVybWluZm8gZGF0YWJhc2UuCitpZiB0ZXN0ICIkVEhBVF9DQyIgPSAiJFRISVNfQ0MiIDsgdGhlbgorY2FzZSAiJFBBVEgiIGluCis6KikgUEFUSD0uLi9wcm9nczouLi9saWI6JHtERVNURElSfSRiaW5kaXIkUEFUSCA7OworKikgUEFUSD0uLi9wcm9nczouLi9saWI6JHtERVNURElSfSRiaW5kaXI6JFBBVEggOzsKK2VzYWMKK2V4cG9ydCBQQVRICitTSExJQj0ic2ggJHNyY2Rpci9zaGxpYiIKK2Vsc2UKKyMgQ3Jvc3MtY29tcGlsaW5nLCBzbyBkb24ndCBzZXQgUEFUSCBvciBydW4gc2hsaWIuCitTSExJQj0KKyMgcmVzZXQgJHN1ZmZpeCwgc2luY2UgaXQgYXBwbGllcyB0byB0aGUgdGFyZ2V0LCBub3QgdGhlIGJ1aWxkIHBsYXRmb3JtLgorc3VmZml4PQorZmkKKworCisjIHNldCBhbm90aGVyIGVudiB2YXIgdGhhdCBkb2Vzbid0IGdldCByZXNldCB3aGVuIGBzaGxpYicgcnVucywgc28gYHNobGliJyB1c2VzCisjIHRoZSBQQVRIIHdlIGp1c3Qgc2V0LgorU0hMSUJfUEFUSD0kUEFUSAorZXhwb3J0IFNITElCX1BBVEgKKworIyBzZXQgYSB2YXJpYWJsZSB0byBzaW1wbGlmeSBlbnZpcm9ubWVudCB1cGRhdGUgaW4gc2hsaWIKK1NITElCX0hPU1Q9QGhvc3Rfb3NACitleHBvcnQgU0hMSUJfSE9TVAorCisjIGRvbid0IHVzZSB1c2VyJ3MgVEVSTUlORk8gdmFyaWFibGUKK1RFUk1JTkZPPSR7REVTVERJUn0kdGljZGlyIDsgZXhwb3J0IFRFUk1JTkZPCit1bWFzayAwMjIKKworIyBDb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhlIG9sZCAob2Jzb2xldGUpIHBhdGhuYW1lLCBlLmcuLCAvdXNyL2xpYi90ZXJtaW5mby4KK1RJQ0RJUj1gZWNobyAkVEVSTUlORk8gfCBzZWQgLWUgJ3MlL3NoYXJlL1woW14vXSpcKSQlL2xpYi9cMSUnYAorCisjIFJlbW92ZSB0aGUgb2xkIHRlcm1pbmZvIHN0dWZmOyB3ZSBkb24ndCBjYXJlIGlmIGl0IGV4aXN0ZWQgYmVmb3JlLCBhbmQgaXQKKyMgd291bGQgZ2VuZXJhdGUgYSBsb3Qgb2YgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIGlmIHdlIHRyaWVkIHRvIG92ZXJ3cml0ZSBpdC4KKyMgV2UgZXhwbGljaXRseSByZW1vdmUgaXRzIGNvbnRlbnRzIHJhdGhlciB0aGFuIHRoZSBkaXJlY3RvcnkgaXRzZWxmLCBpbiBjYXNlCisjIHRoZSBkaXJlY3RvcnkgaXMgYWN0dWFsbHkgYSBzeW1ib2xpYyBsaW5rLgorKCB0ZXN0IC1kICIkVEVSTUlORk8iICYmIGNkICRURVJNSU5GTyAmJiBybSAtZnIgPyAyPi9kZXYvbnVsbCApCisKK2lmIHRlc3QgIiRleHRfZnVuY3MiID0gMSA7IHRoZW4KK2NhdCA8PEVPRgorUnVubmluZyB0aWMgdG8gaW5zdGFsbCAkVEVSTUlORk8gLi4uCisKKwlZb3UgbWF5IHNlZSBtZXNzYWdlcyByZWdhcmRpbmcgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzLCBlLmcuLCBBWC4KKwlUaGVzZSBhcmUgZXh0ZW5kZWQgdGVybWluYWwgY2FwYWJpbGl0aWVzIHdoaWNoIGFyZSBjb21waWxlZAorCXVzaW5nCisJCXRpYyAteAorCUlmIHlvdSBoYXZlIG5jdXJzZXMgNC4yIGFwcGxpY2F0aW9ucywgeW91IHNob3VsZCByZWFkIHRoZSBJTlNUQUxMCisJZG9jdW1lbnQsIGFuZCBpbnN0YWxsIHRoZSB0ZXJtaW5mbyB3aXRob3V0IHRoZSAteCBvcHRpb24uCisKK0VPRgoraWYgKCAkU0hMSUIgdGljJHN1ZmZpeCAteCAtcyAtbyAkVEVSTUlORk8gJHNvdXJjZSApCit0aGVuCisJZWNobyAnKiogYnVpbHQgbmV3ICckVEVSTUlORk8KK2Vsc2UKKwllY2hvICc/IHRpYyBjb3VsZCBub3QgYnVpbGQgJyRURVJNSU5GTworCWV4aXQgMQorZmkKK2Vsc2UKK2NhdCA8PEVPRgorUnVubmluZyB0aWMgdG8gaW5zdGFsbCAkVEVSTUlORk8gLi4uCisKKwlZb3UgbWF5IHNlZSBtZXNzYWdlcyByZWdhcmRpbmcgdW5rbm93biBjYXBhYmlsaXRpZXMsIGUuZy4sIEFYLgorCVRoZXNlIGFyZSBleHRlbmRlZCB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgd2hpY2ggbWF5IGJlIGNvbXBpbGVkCisJdXNpbmcKKwkJdGljIC14CisJSWYgeW91IGhhdmUgbmN1cnNlcyA0LjIgYXBwbGljYXRpb25zLCB5b3Ugc2hvdWxkIHJlYWQgdGhlIElOU1RBTEwKKwlkb2N1bWVudCwgYW5kIGluc3RhbGwgdGhlIHRlcm1pbmZvIHdpdGhvdXQgdGhlIC14IG9wdGlvbi4KKworRU9GCitpZiAoICRTSExJQiB0aWMkc3VmZml4IC1zIC1vICRURVJNSU5GTyAkc291cmNlICkKK3RoZW4KKwllY2hvICcqKiBidWlsdCBuZXcgJyRURVJNSU5GTworZWxzZQorCWVjaG8gJz8gdGljIGNvdWxkIG5vdCBidWlsZCAnJFRFUk1JTkZPCisJZXhpdCAxCitmaQorZmkKKworIyBNYWtlIGEgc3ltYm9saWMgbGluayB0byBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBhcHBsaWNhdGlvbnMgdGhhdCBleHBlY3QKKyMgdG8gZmluZCB0ZXJtaW5mbyB1bmRlciAvdXNyL2xpYi4gIFRoYXQgaXMsIHdlJ2xsIF90cnlfIHRvIGRvIHRoYXQuICBOb3QKKyMgYWxsIHN5c3RlbXMgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcywgYW5kIHRob3NlIHRoYXQgZG8gcHJvdmlkZSBhIHZhcmlldHkKKyMgb2Ygb3B0aW9ucyBmb3IgJ3Rlc3QnLgoraWYgdGVzdCAiJFRJQ0RJUiIgIT0gIiRURVJNSU5GTyIgOyB0aGVuCisJKCBybSAtZiAkVElDRElSIDI+L2Rldi9udWxsICkKKwlpZiAoIGNkICRUSUNESVIgMj4vZGV2L251bGwgKQorCXRoZW4KKwkJY2QgJFRJQ0RJUgorCQlUSUNESVI9YHB3ZGAKKwkJaWYgdGVzdCAkVElDRElSICE9ICRURVJNSU5GTyA7IHRoZW4KKwkJCSMgV2VsbCwgd2UgdHJpZWQuICBTb21lIHN5c3RlbXMgbGllIHRvIHVzLCBzbyB0aGUKKwkJCSMgaW5zdGFsbGVyIHdpbGwgaGF2ZSB0byBkb3VibGUtY2hlY2suCisJCQllY2hvICJWZXJpZnkgaWYgJFRJQ0RJUiBhbmQgJFRFUk1JTkZPIGFyZSB0aGUgc2FtZS4iCisJCQllY2hvICJUaGUgbmV3IHRlcm1pbmZvIGlzIGluICRURVJNSU5GTzsgdGhlIG90aGVyIHNob3VsZCBiZSBhIGxpbmsgdG8gaXQuIgorCQkJZWNobyAiT3RoZXJ3aXNlLCByZW1vdmUgJFRJQ0RJUiBhbmQgbGluayBpdCB0byAkVEVSTUlORk8uIgorCQlmaQorCWVsc2UKKwkJY2QgJHtERVNURElSfSRwcmVmaXgKKwkJIyBDb25zdHJ1Y3QgYSBzeW1ib2xpYyBsaW5rIHRoYXQgb25seSBhc3N1bWVzICR0aWNkaXIgaGFzIHRoZQorCQkjIHNhbWUgJHByZWZpeCBhcyB0aGUgb3RoZXIgaW5zdGFsbGVkIGRpcmVjdG9yaWVzLgorCQlSRUxBVElWRT1gZWNobyAkdGljZGlyfHNlZCAtZSAncyVeJyRwcmVmaXgnLyUlJ2AKKwkJaWYgdGVzdCAiJFJFTEFUSVZFIiAhPSAiJHRpY2RpciIgOyB0aGVuCisJCQlSRUxBVElWRT0uLi9gZWNobyAkdGljZGlyfHNlZCAtZSAncyVeJyRwcmVmaXgnLyUlJyAtZSAncyVeLyUlJ2AKKwkJZmkKKwkJaWYgKCBATE5fU0AgJFJFTEFUSVZFICRUSUNESVIgKQorCQl0aGVuCisJCQllY2hvICcqKiBzeW0tbGlua2VkICckVElDRElSJyBmb3IgY29tcGF0aWJpbGl0eScKKwkJZWxzZQorCQkJZWNobyAnKiogY291bGQgbm90IHN5bS1saW5rICckVElDRElSJyBmb3IgY29tcGF0aWJpbGl0eScKKwkJZmkKKwlmaQorZmkKKyMgdmlsZTpzaG1vZGUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21pc2Mvc2hsaWIgYi9uY3Vyc2VzLTUuNy9taXNjL3NobGliCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzZWQ4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9taXNjL3NobGliCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk2CisjCisjICRJZDogc2hsaWIsdiAxLjExIDIwMDcvMDEvMTMgMTc6MDk6NTIgdG9tIEV4cCAkCisjIFVzZSB0aGlzIHNjcmlwdCBhcyBhIHdyYXBwZXIgd2hlbiBydW5uaW5nIGV4ZWN1dGFibGVzIGxpbmtlZCB0byBzaGFyZWQKKyMgbGlicmFyaWVzIG9uIHN5c3RlbXMgdGhhdCB1c2UgdGhlICRMRF9MSUJSQVJZX1BBVEggdmFyaWFibGUgYW5kIGRvbid0IGVtYmVkCisjIHRoZSBzb25hbWUncyBwYXRoIHdpdGhpbiB0aGUgbGlua2VkIGV4ZWN1dGFibGUgKHN1Y2ggYXMgSVJJWCksIGUuZywKKyMKKyMJc2hsaWIga25pZ2h0CisjCisjIFNldHRpbmcgTERfTElCUkFSWV9QQVRILCBvdmVycmlkZXMvc3VwcGxlbWVudHMgdGhlIGxvYWRlcidzIG5vcm1hbCBzZWFyY2gKKyMgcGF0aCwgYW5kIHdvcmtzIG9uIG1vc3Qgc3lzdGVtcy4gIFRoZSBkcmF3YmFjayBpcyB0aGF0IHRoZW4gdGhlIGVudmlyb25tZW50CisjIHZhcmlhYmxlIGhhcyB0byBiZSBzZXQgdG8gcnVuIHRoZSBwcm9ncmFtcyB3aXRoaW4gdGhpcyBkaXJlY3RvcnkgdHJlZS4KKyMKKyMgRm9yIExpbnV4IChhbmQgb3RoZXIgc3lzdGVtcyB1c2luZyB0aGUgR05VIGxvYWRlciksIHdlIGNhbiB1c2UgdGhlIHJwYXRoCisjIGRpcmVjdGl2ZSwgd2hpY2ggZW1iZWRzIHRoZSBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSB3aXRoaW4gdGhlIGV4ZWN1dGFibGUuCisjIFVzaW5nIHRoZSBMaW51eCBsb2FkZXIncyBycGF0aCBkaXJlY3RpdmUgaW50cm9kdWNlcyBhIGNvbnN0cmFpbnQsIHNpbmNlCisjIGl0J3MgZW1iZWRkZWQgaW50byB0aGUgYmluYXJ5LCBhbmQgbWVhbnMgdGhhdCB0aGUgYmluYXJ5IGNhbm5vdCBiZSBtb3ZlZAorIyBhcm91bmQgKHRob3VnaCBpdCdsbCB3b3JrIGlmIHRoZSAkZXhlY19wcmVmaXggY29udmVudGlvbiB0aGF0IHB1dHMgdGhlIGJpbgorIyBhbmQgbGliIGRpcmVjdG9yaWVzIHVuZGVyIHRoZSBzYW1lIHBhcmVudCBpcyBmb2xsb3dlZCkuCisjCisjIFVzaW5nIHRoZSBhY3R1YWwgc29uYW1lIChlLmcuLCAuLi9saWIvbGlibmN1cnNlcy5zbykgYWxvbmUsIGlzIGEgbW9yZQorIyBmbGV4aWJsZSBzb2x1dGlvbjsgeW91IGNhbiBsaW5rIHdpdGhvdXQgaGF2aW5nIHRvIHNldCB0aGUgZW52aXJvbm1lbnQKKyMgdmFyaWFibGUsIGFuZCBvbiBzb21lIHN5c3RlbXMgKElSSVgpIHlvdSBjYW4gZXZlbiBydW4gdGhlIHJlc3VsdGluZyBiaW5hcmllcworIyB3aXRob3V0IHNldHRpbmcgTERfTElCUkFSWV9QQVRILgorIworIyBVc2luZyBhIGNvbnZlbnRpb25hbCBsaW5rLCB3aXRoIC1MIGFuZCAtbCBvcHRpb25zIG9uIExpbnV4IHJlc3VsdHMgaW4gYQorIyBzdGF0aWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlLCB3aGljaCB3ZSBkb24ndCB3YW50IGF0IGFsbC4KKyMKKyMgU3BlY2lhbCBjYXNlczoKKyMKKyMJQmVPUyBSNC41IHVzZXMgJExJQlJBUllfUEFUSCByYXRoZXIgdGhhbiAkTERfTElCUkFSWV9QQVRILgorIwlDeWd3aW4gdXNlcyAkUEFUSAorIwlNYWMgT1MgWCB1c2VzICREWUxEX0xJQlJBUllfUEFUSAorIworIyBPdGhlciBjYXNlcyBub3QgaGFuZGxlZCBieSB0aGlzIHNjcmlwdDoKKyMKKyMJQUlYIHVzZXMgJExJQlBBVEgKKyMJSVJJWDY0IG1heSB1c2UgJExEX0xJQlJBUlk2NF9QQVRIIG9yICRMRF9MSUJSQVJZTjMyX1BBVEgKKyMJU29sYXJpcyBtYXkgdXNlICRMRF9MSUJSQVJZX1BBVEhfNjQKKyMKK0NEUEFUSD0KKyMKKyMgTWFrZSBzdXJlIHRoYXQgd2UgdXNlIHRoZSBQQVRIIHRoYXQgd2FzIHNldCBpbiBydW5fdGljLnNoCitpZiB0ZXN0IC1uICIkU0hMSUJfUEFUSCIgOyB0aGVuCisJUEFUSD0kU0hMSUJfUEFUSAorCWV4cG9ydCBQQVRICitmaQorCisjIEZpbmQgdGhlIGxpYi1kaXJlY3RvcnkgZm9yIHRoaXMgYnVpbGQgdHJlZQorcT0iIgorZm9yIHAgaW4gbGliIC4uL2xpYiAuLi8uLi9saWIgLi4vLi4vLi4vbGliCitkbworCWlmIHRlc3QgLWQgJHA7IHRoZW4KKwkJcT1gY2QgJHA7IHB3ZGAKKwkJYnJlYWsKKwllbGlmIHRlc3QgLWYgY29uZmlndXJlICYmIHRlc3QgISAtZCAuLi8kcCA7IHRoZW4KKwkJYnJlYWsKKwlmaQorZG9uZQorCisjIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCitpZiB0ZXN0IC1uICIkcSIgOyB0aGVuCisJc3lzdGVtPQorCWlmIHRlc3QgLW4gIiRTSExJQl9IT1NUIiA7IHRoZW4KKwkJc3lzdGVtPSIkU0hMSUJfSE9TVCIKKwllbGlmIHRlc3QgLW4gIiRQQVRIRVhUIiA7IHRoZW4KKwkJc3lzdGVtPWN5Z3dpbgorCWVsaWYgdGVzdCAtbiAiJExJQlJBUllfUEFUSCIgOyB0aGVuCisJCXN5c3RlbT1iZW9zCisJZWxpZiB0ZXN0IC1uICIkRFlMRF9MSUJSQVJZX1BBVEgiIDsgdGhlbgorCQlzeXN0ZW09ZGFyd2luCisJZWxpZiB0ZXN0IC1uICIkTERfTElCUkFSWV9QQVRIIjsgdGhlbgorCQlzeXN0ZW09dW5peAorCWVsc2UKKwkJZm9yIHIgaW4gJHEvKi4qCisJCWRvCisJCQlpZiB0ZXN0IC1mICIkciIKKwkJCXRoZW4KKwkJCQljYXNlICRyIGluCisJCQkJKi5kbGwpCisJCQkJCXN5c3RlbT1jeWd3aW4KKwkJCQkJOzsKKwkJCQkqLmR5bGliKQorCQkJCQlzeXN0ZW09ZGFyd2luCisJCQkJCTs7CisJCQkJZXNhYworCQkJZmkKKwkJCXRlc3QgLW4gIiRzeXN0ZW0iICYmIGJyZWFrCisJCWRvbmUKKwlmaQorCisJY2FzZSAuJHN5c3RlbSBpbgorCS5jeWd3aW4qKQorCQl2YXJpYWJsZT1QQVRICisJCTs7CisJLmJlb3MqKQorCQl2YXJpYWJsZT1MSUJSQVJZX1BBVEgKKwkJOzsKKwkuZGFyd2luKikKKwkJdmFyaWFibGU9RFlMRF9MSUJSQVJZX1BBVEgKKwkJOzsKKwkqKQorCQl2YXJpYWJsZT1MRF9MSUJSQVJZX1BBVEgKKwkJOzsKKwllc2FjCisKKwlldmFsICd0ZXN0IC16ICIkJyR2YXJpYWJsZSciICYmICckdmFyaWFibGUnPSI6IicKKwlldmFsICR2YXJpYWJsZSc9IiRxOiQnJHZhcmlhYmxlJyInCisJZXZhbCAnZXhwb3J0ICckdmFyaWFibGUKK2ZpCisKK2V2YWwgIiQqIgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvc3RkIGIvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvc3RkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5M2Y3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9taXNjL3RhYnNldC9zdGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvc3RkY3J0IGIvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvc3RkY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YmExMmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9taXNjL3RhYnNldC9zdGRjcnQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvdnQxMDAgYi9uY3Vyc2VzLTUuNy9taXNjL3RhYnNldC92dDEwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI4ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvdnQxMDAKQEAgLTAsMCArMSwzIEBACisNCisbWzNnCisbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSCAgICAgICAgG0ggICAgICAgIBtIICAgICAgICAbSApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvdnQzMDAgYi9uY3Vyc2VzLTUuNy9taXNjL3RhYnNldC92dDMwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWY5Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy90YWJzZXQvdnQzMDAKQEAgLTAsMCArMSwzIEBACisKKxtbM2cKKxtQMiR0OS8xNy8yNS8zMy80MS80OS81Ny82NS83My84MS84OS85Ny8xMDUvMTEzLzEyMS8xMjkbXApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWlzYy90ZGxpbnQgYi9uY3Vyc2VzLTUuNy9taXNjL3RkbGludApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMGU2NTJiCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWlzYy90ZGxpbnQKQEAgLTAsMCArMSwxMTMgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTYKKyMKKyMgJElkOiB0ZGxpbnQsdiAxLjUgMjAwMC8xMC8yOCAyMDo1MzozNiB0b20gRXhwICQKKyMKKyMgTGludC1zY3JpcHQgdGhhdCBhbGxvd3MgdXNlcidzIG93biBsaW50IGxpYnJhcmllcywgaW4gYWRkaXRpb24gdG8gdGhlIG9uZXMKKyMgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCitPUFQ9IiIKK0RJUlM9IiIKK0xJQlM9IiIKK0ZJTEVTPSIiCitBUkNIPWB1bmFtZSAtc2AKK2lmIHRlc3QgLXogIiRBUkNIIiA7IHRoZW4KKwllY2hvICc/IHVuYW1lIG5vdCBmb3VuZCcKKwlleGl0IDEKK2Vsc2UKKwljYXNlICRBUkNIIGluCisJQUlYKQlzZXQgLSAkKiAtTm40MDAwCisJCTs7CisJSVJJWCkJc2V0IC0gJCogLW4gLWxjCisJCTs7CisJRnJlZUJTRCkgc2V0IC0gJCogLWcgLXAgLXUgLXYgLXoKKwkJOzsKKwlTdW5PUykKKwkJY2FzZSBgdW5hbWUgLXJgIGluCisJCTUuKikJQVJDSD1Tb2xhcmlzCisJCQlzZXQgLSAkKiAtbiAtbGMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCitmaQorIyBMSUJESVI9JEhPTUUvbGliLyRBUkNIL2xpbnQgO2V4cG9ydCBMSUJESVIKK2ZvciBwIGluICRIT01FL2xpYi8kQVJDSC9saW50IC91c3IvbGliL2xpbnQgL3Vzci9saWIKK2RvCisJaWYgWyAtZCAkcCBdCisJdGhlbgorCQlESVJTPSIkRElSUyAkcCIKKwlmaQorZG9uZQorIword2hpbGUgWyAkIyAhPSAwIF0KK2RvCisJY2FzZSAkMSBpbgorCS1EKlwiKikJOzsKKwktTCopCisJCURJUlM9ImBlY2hvICQxfHNlZCAtZSAncy9eLUwvLydgICRESVJTIgorCQk7OworCS1sKikKKwkJbGliPSJsbGliLWxgZWNobyAkMSB8IHNlZCAtZSAncy9eLWwvLydgLmxuIgorCQlmb3VuZD1ubworCQlmb3IgcCBpbiAkRElSUworCQlkbworCQkJZWNobyAtbiB0ZXN0aW5nICRwLyRsaWIKKwkJCWlmIFsgLWYgJHAvJGxpYiBdCisJCQl0aGVuCisJCQkJTElCUz0iJExJQlMgJHAvJGxpYiIKKwkJCQllY2hvICIgKG9rKSIKKwkJCQlmb3VuZD15ZXMKKwkJCQlicmVhaworCQkJZmkKKwkJCWVjaG8KKwkJZG9uZQorCQlpZiBbICRmb3VuZCA9IG5vIF0KKwkJdGhlbgorCQkJZWNobyAiaWdub3JlZCBsaWJyYXJ5ICQxIgorCQlmaQorCQk7OworCS1uKQlpZiBbIC16ICIkT1BUIiBdCisJCXRoZW4KKwkJCU9QVD0iLUkuIgorCQlmaQorCQlPUFQ9IiRPUFQgJDEiCisJCTs7CisJLSopCU9QVD0iJE9QVCAkMSIKKwkJOzsKKwkqKQorCQlGSUxFUz0iJEZJTEVTICQxIgorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorIworZXZhbCBsaW50ICRPUFQgJEZJTEVTICRMSUJTCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9taXNjL3Rlcm1pbmZvLnNyYyBiL25jdXJzZXMtNS43L21pc2MvdGVybWluZm8uc3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYThkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9taXNjL3Rlcm1pbmZvLnNyYwpAQCAtMCwwICsxLDIxODAzIEBACisjIyMjIyMjIyBURVJNSU5BTCBUWVBFIERFU0NSSVBUSU9OUyBTT1VSQ0UgRklMRQorIworIyBUaGlzIHZlcnNpb24gb2YgdGVybWluZm8uc3JjIGlzIGRpc3RyaWJ1dGVkIHdpdGggbmN1cnNlcyBhbmQgaXMgbWFpbnRhaW5lZAorIyBieSBUaG9tYXMgRS4gRGlja2V5IChURCkuCisjCisjIFJlcG9ydCBidWdzIGFuZCBuZXcgdGVybWluYWwgZGVzY3JpcHRpb25zIHRvCisjCWJ1Zy1uY3Vyc2VzQGdudS5vcmcKKyMKKyMJJFJldmlzaW9uOiAxLjM0MSAkCisjCSREYXRlOiAyMDA4LzEwLzEyIDIzOjAzOjU0ICQKKyMKKyMgVGhlIG9yaWdpbmFsIGhlYWRlciBpcyBwcmVzZXJ2ZWQgYmVsb3cgZm9yIHJlZmVyZW5jZS4gIEl0IGlzIG5vdGVkIHRoYXQgdGhlcmUKKyMgaXMgYSAibmV3ZXIiIHZlcnNpb24gd2hpY2ggZGlmZmVycyBpbiBzb21lIGNvc21ldGljIGRldGFpbHMgKGJ1dCBhY3R1YWxseQorIyBzdG9wcGVkIHVwZGF0ZXMgc2V2ZXJhbCB5ZWFycyBhZ28pOyB3ZSBoYXZlIGRlY2lkZWQgdG8gbm90IGNoYW5nZSB0aGUgaGVhZGVyCisjIHVubGVzcyB0aGVyZSBpcyBhbHNvIGEgY2hhbmdlIGluIGNvbnRlbnQuCisjCisjIFRvIGZ1cnRoZXIgbXVkZHkgdGhlIHdhdGVycywgaXQgaXMgbm90ZWQgdGhhdCBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcyBwYXJ0IG9mCisjIG1haW50ZW5hbmNlIG9mIG5jdXJzZXMgKHNpbmNlIDE5OTYpIGFyZSBnZW5lcmFsbHkgY29uY2VkZWQgdG8gYmUgY29weXJpZ2h0CisjIHVuZGVyIHRoZSBuY3Vyc2VzIE1JVC1zdHlsZSBsaWNlbnNlLiAgVGhhdCB3YXMgdGhlIGVmZmVjdCBvZiB0aGUgYWdyZWVtZW50CisjIHdoaWNoIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiBuY3Vyc2VzIG1hZGUgaW4gMTk5OC4gIEhvd2V2ZXIsIHNpbmNlIG11Y2ggb2YKKyMgdGhlIGZpbGUgaXRzZWxmIGlzIG9mIHVua25vd24gYXV0aG9yc2hpcCAoYW5kIHRoZSBkaXNjbGFpbWVyIGJlbG93IG1ha2VzIGl0CisjIG9idmlvdXMgdGhhdCBSYXltb25kIGNhbm5vdCBvciB3aWxsIG5vdCBjb252ZXkgcmlnaHRzIG92ZXIgdGhvc2UgcGFydHMpLAorIyB0aGVyZSBpcyBubyBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIG9uIHRoZSBmaWxlIGl0c2VsZi4KKyMKKyMgSXQgd291bGQgYWxzbyBiZSBhIG51aXNhbmNlIHRvIHNwbGl0IHRoZSBmaWxlIGludG8gdW5rbm93bi9rbm93biBhdXRob3JzaGlwCisjIGFuZCBtb3ZlIHBpZWNlcyBhcyB0aGV5IGFyZSBtYWludGFpbmVkLCBzaW5jZSBtYW55IG9mIHRoZSBtYWludGVuYW5jZSBjaGFuZ2VzCisjIGhhdmUgYmVlbiBzbWFsbCBjb3JyZWN0aW9ucyB0byBSYXltb25kJ3MgdHJhbnNsYXRpb25zIHRvL2Zyb20gdGVybWNhcCBmb3JtYXQsCisjIGNvcnJlY3RpbmcgdGhlIGRhdGEgYnV0IG5vdCB0aGUgYWNjb21wYW55aW5nIGFubm90YXRpb25zLgorIworIyBJbiBhbnkgY2FzZSwgbm90ZSB0aGF0IGFsbW9zdCBoYWxmIG9mIHRoaXMgZmlsZSBpcyBub3QgZGF0YSBidXQgYW5ub3RhdGlvbnMKKyMgd2hpY2ggcmVmbGVjdCBjcmVhdGl2ZSBlZmZvcnQuICBGdXJ0aGVybW9yZSwgdGhlIHN0cnVjdHVyZSBvZiBlbnRyaWVzIHRvCisjIHJldXNlIGNvbW1vbiBjaHVua3MgYWxzbyBpcyBjcmVhdGl2ZSAoYW5kIHN1YmplY3QgdG8gY29weXJpZ2h0KS4gIEZpbmFsbHksCisjIHNvbWUgcG9ydGlvbnMgb2YgdGhlIGRhdGEgYXJlIGRlcml2YXRpdmUgd29yayB1bmRlciBhIGNvbXBhdGlibGUgTUlULXN0eWxlCisjIGxpY2Vuc2UgZnJvbSB4dGVybS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJVmVyc2lvbiAxMC4yLjEKKyMJdGVybWluZm8gc3ludGF4CisjCisjCUVyaWMgUy4gUmF5bW9uZAkJKGN1cnJlbnQgbWFpbnRhaW5lcikKKyMJSm9obiBLdW56ZSwgQmVya2VsZXkKKyMJQ3JhaWcgTGVyZXMsIEJlcmtlbGV5CisjCisjIFBsZWFzZSBlLW1haWwgY2hhbmdlcyB0byB0ZXJtaW5mb0B0aHlyc3VzLmNvbTsgdGhlIG9sZCB0ZXJtY2FwQGJlcmtlbGV5LmVkdQorIyBhZGRyZXNzIGlzIG5vIGxvbmdlciB2YWxpZC4gIFRoZSBsYXRlc3QgdmVyc2lvbiBjYW4gYWx3YXlzIGJlIGZvdW5kIGF0CisjIDxodHRwOi8vd3d3LnR1eGVkby5vcmcvdGVybWluZm8+LgorIworIyBQVVJQT1NFIE9GIFRISVMgRklMRToKKyMKKyMgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY2FwYWJpbGl0aWVzIG9mIHZhcmlvdXMgY2hhcmFjdGVyLWNlbGwgdGVybWluYWxzLAorIyBhcyBuZWVkZWQgYnkgc29mdHdhcmUgc3VjaCBhcyBzY3JlZW4tb3JpZW50ZWQgZWRpdG9ycy4KKyMKKyMgT3RoZXIgdGVybWluZm8gYW5kIHRlcm1jYXAgZmlsZXMgZXhpc3QsIHN1cHBvcnRlZCBieSB2YXJpb3VzIE9TIHZlbmRvcnMKKyMgb3IgYXMgcmVsaWNzIG9mIHZhcmlvdXMgb2xkZXIgdmVyc2lvbnMgb2YgVU5JWC4gIFRoaXMgb25lIGlzIHRoZSBsb25nZXN0CisjIGFuZCBtb3N0IGNvbXByZWhlbnNpdmUgb25lIGluIGV4aXN0ZW5jZS4gIEl0IHN1YnN1bWVzIG5vdCBvbmx5IHRoZSBlbnRpcmV0eQorIyBvZiB0aGUgaGlzdG9yaWNhbCA0LjRCU0QsIEdOVSwgU3lzdGVtIFYgYW5kIFNDTyB0ZXJtY2FwIGZpbGVzIGFuZCB0aGUgQlJMCisjIHRlcm1jYXAgZmlsZSwgYnV0IGFsc28gbGFyZ2UgbnVtYmVycyBvZiB2ZW5kb3ItbWFpbnRhaW5lZCB0ZXJtY2FwIGFuZAorIyB0ZXJtaW5mbyBlbnRyaWVzIG1vcmUgY29tcGxldGUgYW5kIGNhcmVmdWxseSB0ZXN0ZWQgdGhhbiB0aG9zZSBpbiBoaXN0b3JpY2FsCisjIHRlcm1jYXAvdGVybWluZm8gdmVyc2lvbnMuCisjCisjIFBvaW50ZXJzIHRvIHJlbGF0ZWQgcmVzb3VyY2VzIChpbmNsdWRpbmcgdGhlIG5jdXJzZXMgZGlzdHJpYnV0aW9uKSBtYXkKKyMgYmUgZm91bmQgYXQgPGh0dHA6Ly93d3cudHV4ZWRvLm9yZy90ZXJtaW5mbz4uCisjCisjIElOVEVSTkFUSU9OQUxJWkFUSU9OOgorIworIyBUaGlzIGZpbGUgdXNlcyBvbmx5IHRoZSBVUy1BU0NJSSBjaGFyYWN0ZXIgc2V0IChubyBJU084ODU5IGNoYXJhY3RlcnMpLgorIworIyBUaGlzIGZpbGUgYXNzdW1lcyBhIFVTLUFTQ0lJIGNoYXJhY3RlciBzZXQuIElmIHlvdSBuZWVkIHRvIGZpeCB0aGlzLCBzdGFydAorIyBieSBnbG9iYWwtcmVwbGFjaW5nIFxFKEIgYW5kIFxFKUIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgSVNPIDY0MjkgZW5hYmxlcnMKKyMgZm9yIHlvdXIgY2hhcmFjdGVyIHNldC4gIFxFKEEgYW5kIFxFKUEgZW5hYmxlcyB0aGUgQnJpdGlzaCBjaGFyYWN0ZXIgc2V0CisjIHdpdGggdGhlIHBvdW5kIHNpZ24gYXQgcG9zaXRpb24gMi8zLgorIworIyBJbiBhIEphcGFuZXNlLXByb2Nlc3NpbmcgZW52aXJvbm1lbnQgdXNpbmcgRVVDL0phcGFuZXNlIG9yIFNoaWZ0LUpJUywKKyMgQzEgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCB0aGUgZmlyc3QtYnl0ZSBzZXQgb2YgdGhlIEphcGFuZXNlIGVuY29kaW5ncywKKyMgc28gXEUpMCBzaG91bGQgYmUgYXZvaWRlZCBpbiA8ZW5hY3M+IGFuZCBpbml0aWFsaXphdGlvbiBzdHJpbmdzLgorIworIyBGSUxFIEZPUk1BVDoKKyMKKyMgVGhlIHZlcnNpb24geW91IGFyZSBsb29raW5nIGF0IG1heSBiZSBpbiBhbnkgb2YgdGhyZWUgZm9ybWF0czogbWFzdGVyCisjICh0ZXJtaW5mbyB3aXRoIE9UIGNhcGFiaWxpdGllcyksIHN0b2NrIHRlcm1pbmZvLCBvciB0ZXJtY2FwLiAgWW91IGNhbiB0ZWxsCisjIHdoaWNoIGJ5IHRoZSBmb3JtYXQgZ2l2ZW4gaW4gdGhlIGhlYWRlciBhYm92ZS4KKyMKKyMgVGhlIG1hc3RlciBmb3JtYXQgaXMgYWNjZXB0ZWQgYW5kIGdlbmVyYXRlZCBieSB0aGUgdGVybWluZm8gdG9vbHMgaW4gdGhlCisjIG5jdXJzZXMgc3VpdGU7IGl0IGRpZmZlcnMgZnJvbSBzdG9jayAoU3lzdGVtIFYtY29tcGF0aWJsZSkgdGVybWluZm8gb25seQorIyBpbiB0aGF0IGl0IGFkbWl0cyBhIGdyb3VwIG9mIGNhcGFiaWxpdGllcyAocHJlZml4ZWQgYE9UJykgZXF1aXZhbGVudCB0bworIyB2YXJpb3VzIG9ic29sZXRlIHRlcm1jYXAgY2FwYWJpbGl0aWVzLiAgWW91IGNhbiwgdGh1cywgY29udmVydCBmcm9tIG1hc3RlcgorIyB0byBzdG9jayB0ZXJtaW5mbyBzaW1wbHkgYnkgZmlsdGVyaW5nIHdpdGggYHNlZCAiL09UW14sXSosL3MvLy8iJzsgYnV0IGlmCisjIHlvdSBoYXZlIG5jdXJzZXMgYHRpYyAtSScgaXMgbmljZXIgKGFtb25nIG90aGVyIHRoaW5ncywgaXQgYXV0b21hdGljYWxseQorIyBvdXRwdXRzIGVudHJpZXMgaW4gYSBjYW5vbmljYWwgZm9ybSkuCisjCisjIFRoZSB0ZXJtY2FwIHZlcnNpb24gaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgbWFzdGVyIHZlcnNpb24KKyMgdXNpbmcgdGljIC1DLiAgVGhpcyBmaWx0ZXJpbmcgbGVhdmVzIGluIHRoZSBPVCBjYXBhYmlsaXRpZXMgdW5kZXIgdGhlaXIKKyMgb3JpZ2luYWwgdGVybWNhcCBuYW1lcy4gIEFsbCB0cmFuc2xhdGVkIGVudHJpZXMgZml0IHdpdGhpbiB0aGUgMTAyMy1ieXRlCisjIHN0cmluZy10YWJsZSBsaW1pdCBvZiBhcmNoYWljIHRlcm1jYXAgbGlicmFyaWVzIGV4Y2VwdCB3aGVyZSBleHBsaWNpdGx5CisjIG5vdGVkIGJlbG93LiAgTm90ZSB0aGF0IHRoZSB0ZXJtY2FwIHRyYW5zbGF0aW9uIGFzc3VtZXMgdGhhdCB5b3VyIHRlcm1jYXAKKyMgbGlicmFyeSBjYW4gaGFuZGxlIG11bHRpcGxlIHRjIGNhcGFiaWxpdGllcyBpbiBhbiBlbnRyeS4gNC40QlNEIGhhcyB0aGlzCisjIGNhcGFiaWxpdHkuICBPbGRlciB2ZXJzaW9ucyBvZiBHTlUgdGVybWNhcCwgdGhyb3VnaCAxLjMsIGRvIG5vdC4KKyMKKyMgRm9yIGRldGFpbHMgb24gdGhlc2UgZm9ybWF0cywgc2VlIHRlcm1pbmZvKDUpIGluIHRoZSBuY3Vyc2VzIGRpc3RyaWJ1dGlvbiwKKyMgYW5kIHRlcm1jYXAoNSkgaW4gdGhlIDQuNEJTRCBVbml4IFByb2dyYW1tZXIncyBNYW51YWwuICBCZSBhd2FyZSB0aGF0IDQuNEJTRAorIyBjdXJzZXMgaGFzIGJlZW4gZGVjbGFyZWQgb2Jzb2xldGUgYnkgdGhlIGNhcmV0YWtlcnMgb2YgdGhlIDQuNEJTRCBzb3VyY2VzCisjIGFzIG9mIEp1bmUgMTk5NTsgdGhleSBhcmUgZW5jb3VyYWdpbmcgZXZlcnlvbmUgdG8gbWlncmF0ZSB0byBuY3Vyc2VzLgorIworIyBOb3RlOiB1bmxpa2Ugc29tZSBvdGhlciBkaXN0cmlidXRlZCB0ZXJtaW5mbyBmaWxlcyAoTm92ZWxsIFVuaXggJiBTQ08ncyksCisjIG5vIGVudHJ5IGluIHRoaXMgZmlsZSBoYXMgZW1iZWRkZWQgY29tbWVudHMuICBUaGlzIGlzIHNvIHNvdXJjZSB0cmFuc2xhdGlvbgorIyB0byB0ZXJtY2FwIG9ubHkgaGFzIHRvIGNhcnJ5IG92ZXIgbGVhZGluZyBjb21tZW50cy4gIEFsc28sIG5vIG5hbWUgZmllbGQKKyMgY29udGFpbnMgZW1iZWRkZWQgd2hpdGVzcGFjZSAoc3VjaCB3aGl0ZXNwYWNlIGNvbmZ1c2VzIHJkaXN0KS4KKyMKKyMgRnVydGhlciBub3RlOiBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUgd2VyZSBvZnRlbiBpbnN0YWxsZWQgd2l0aCBhbiBlZGl0b3IKKyMgc2NyaXB0IChyZW9yZGVyKSB0aGF0IG1vdmVkIHRoZSBtb3N0IGNvbW1vbiB0ZXJtaW5hbCB0eXBlcyB0byB0aGUgZnJvbnQgb2YKKyMgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBubyBsb25nZXIgYmUgbmVjZXNzYXJ5LCBhcyB0aGUgZmlsZSBpcyBub3cgb3JkZXJlZAorIyByb3VnaGx5IGJ5IHR5cGUgZnJlcXVlbmN5IHdpdGggQU5TSS9WVDEwMCBhbmQgb3RoZXIgY29tbW9uIHR5cGVzIHVwIGZyb250LgorIworIyBTb21lIGluZm9ybWF0aW9uIGhhcyBiZWVuIG1lcmdlZCBpbiBmcm9tIHRlcm1pbmZvIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5CisjIFVTTCBhbmQgU0NPIChzZWUgQ09QWVJJR0hUUyBBTkQgT1RIRVIgREVMVVNJT05TIGJlbG93KS4gIE11Y2ggaW5mb3JtYXRpb24KKyMgY29tZXMgZnJvbSB2ZW5kb3JzIHdobyBtYWludGFpbiBvZmZpY2lhbCB0ZXJtaW5mb3MgZm9yIHRoZWlyIGhhcmR3YXJlCisjIChub3RhYmx5IERFQyBhbmQgV3lzZSkuCisjCisjIEEgZGV0YWlsZWQgY2hhbmdlIGhpc3RvcnkgaXMgaW5jbHVkZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisjCisjIEZJTEUgT1JHQU5JWkFUSU9OOgorIworIyBDb21tZW50cyBpbiB0aGlzIGZpbGUgYmVnaW4gd2l0aCAjIC0gdGhleSBjYW5ub3QgYXBwZWFyIGluIHRoZSBtaWRkbGUKKyMgb2YgYSB0ZXJtaW5mby90ZXJtY2FwIGVudHJ5ICh0aGlzIGZlYXR1cmUgaGFkIHRvIGJlIHNhY3JpZmljZWQgaW4gb3JkZXIKKyMgdG8gYWxsb3cgc3RhbmRhcmQgdGVybWluZm8gYW5kIHRlcm1jYXAgc3ludGF4IHRvIGJlIGdlbmVyYXRlZCBjbGVhbmx5IGZyb20KKyMgdGhlIG1hc3RlciBmb3JtYXQpLiAgSW5kaXZpZHVhbCBjYXBhYmlsaXRpZXMgYXJlIGNvbW1lbnRlZCBvdXQgYnkKKyMgcGxhY2luZyBhIHBlcmlvZCBiZXR3ZWVuIHRoZSBjb2xvbiBhbmQgdGhlIGNhcGFiaWxpdHkgbmFtZS4KKyMKKyMgVGhlIGZpbGUgaXMgZGl2aWRlZCB1cCBpbnRvIG1ham9yIHNlY3Rpb25zIChoZWFkZWQgYnkgbGluZXMgYmVnaW5uaW5nIHdpdGgKKyMgdGhlIHN0cmluZyAiIyMjIyMjIyMiKSBhbmQgbWlub3Igc2VjdGlvbnMgKGJlZ2lubmluZyB3aXRoICIjIyMjIik7IGRvCisjCisjCWdyZXAgIl4jIyMjIiA8ZmlsZT4gfCBtb3JlCisjCisjIHRvIHNlZSBhIGxpc3Rpbmcgb2Ygc2VjdGlvbiBoZWFkaW5ncy4gIFRoZSBpbnRlbnQgb2YgdGhlIGRpdmlzaW9ucyBpcworIyAoYSkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmluZCB0aGluZ3MsIGFuZCAoYikgdG8gb3JkZXIgdGhlIGRhdGFiYXNlIHNvCisjIHRoYXQgaW1wb3J0YW50IGFuZCBmcmVxdWVudGx5LWVuY291bnRlcmVkIHRlcm1pbmFsIHR5cGVzIGFyZSBuZWFyIHRoZQorIyBmcm9udCAoc28gdGhhdCB5b3UnbGwgZ2V0IHJlYXNvbmFibGUgc2VhcmNoIGVmZmljaWVuY3kgZnJvbSBhIGxpbmVhcgorIyBzZWFyY2ggb2YgdGhlIHRlcm1jYXAgZm9ybSBldmVuIGlmIHlvdSBkb24ndCB1c2UgcmVvcmRlcikuICBNaW5vciBzZWN0aW9ucworIyB1c3VhbGx5IGNvcnJlc3BvbmQgdG8gbWFudWZhY3R1cmVycyBvciBzdGFuZGFyZCB0ZXJtaW5hbCBjbGFzc2VzLgorIyBQYXJlbnRoZXNpemVkIHdvcmRzIGZvbGxvd2luZyBtYW51ZmFjdHVyZXIgbmFtZXMgYXJlIHR5cGUgcHJlZml4ZXMgb3IKKyMgcHJvZHVjdCBsaW5lIG5hbWVzIHVzZWQgYnkgdGhhdCBtYW51ZmFjdHVyZXJzLgorIworIyBIT1cgVE8gUkVBRCBUSEUgRU5UUklFUzoKKyMKKyMgVGhlIGZpcnN0IG5hbWUgaW4gYW4gZW50cnkgaXMgdGhlIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgbW9kZWwgb3IKKyMgdHlwZSwgbGFzdCBlbnRyeSBpcyBhIHZlcmJvc2UgZGVzY3JpcHRpb24uICBPdGhlcnMgYXJlIG1uZW1vbmljIHN5bm9ueW1zIGZvcgorIyB0aGUgdGVybWluYWwuCisjCisjIFRlcm1pbmFsIG5hbWVzIGxvb2sgbGlrZSA8bWFudWZhY3R1cmVyPiA8bW9kZWw+IC0gPG1vZGVzL29wdGlvbnM+CisjIFRoZSBwYXJ0IHRvIHRoZSBsZWZ0IG9mIHRoZSBkYXNoLCBpZiBhIGRhc2ggaXMgcHJlc2VudCwgZGVzY3JpYmVzIHRoZQorIyBwYXJ0aWN1bGFyIGhhcmR3YXJlIG9mIHRoZSB0ZXJtaW5hbC4gIFRoZSBwYXJ0IHRvIHRoZSByaWdodCBtYXkgYmUgdXNlZAorIyBmb3IgZmxhZ3MgaW5kaWNhdGluZyBzcGVjaWFsIFJPTXMsIGV4dHJhIG1lbW9yeSwgcGFydGljdWxhciB0ZXJtaW5hbCBtb2RlcywKKyMgb3IgdXNlciBwcmVmZXJlbmNlcy4KKyMKKyMgQWxsIG5hbWVzIHNob3VsZCBiZSBpbiBsb3dlciBjYXNlLCBmb3IgY29uc2lzdGVuY3kgaW4gdHlwaW5nLgorIworIyBUaGUgZm9sbG93aW5nIGFyZSBjb252ZW50aW9uYWxseSB1c2VkIHN1ZmZpeGVzOgorIwktMnAJSGFzIHR3byBwYWdlcyBvZiBtZW1vcnkuICBMaWtld2lzZSA0cCwgOHAsIGV0Yy4KKyMJLWFtCUVuYWJsZSBhdXRvLW1hcmdpbi4KKyMJLW0JTW9ub2Nocm9tZS4gIFN1cHByZXNzIGNvbG9yIHN1cHBvcnQKKyMJLW1jCU1hZ2ljLWNvb2tpZS4gIFNvbWUgdGVybWluYWxzIChub3RhYmx5IG9sZGVyIFd5c2VzKSBjYW4KKyMJCW9ubHkgc3VwcG9ydCBvbmUgYXR0cmlidXRlIHdpdGhvdXQgbWFnaWMtY29va2llIGxvc3NhZ2UuCisjCQlUaGVpciBiYXNlIGVudHJ5IGlzIHVzdWFsbHkgcGFpcmVkIHdpdGggYW5vdGhlciB0aGF0CisjCQl1c2VzIG1hZ2ljIGNvb2tpZXMgdG8gc3VwcG9ydCBtdWx0aXBsZSBhdHRyaWJ1dGVzLgorIwktbmFtCU5vIGF1dG8tbWFyZ2luIC0gc3VwcHJlc3MgPGFtPiBjYXBhYmlsaXR5CisjCS1ubAlObyBsYWJlbHMgLSBzdXBwcmVzcyBzb2Z0IGxhYmVscworIwktbnMJTm8gc3RhdHVzIGxpbmUgLSBzdXBwcmVzcyBzdGF0dXMgbGluZQorIwktcnYJVGVybWluYWwgaW4gcmV2ZXJzZSB2aWRlbyBtb2RlIChibGFjayBvbiB3aGl0ZSkKKyMJLXMJRW5hYmxlIHN0YXR1cyBsaW5lLgorIwktdmIJVXNlIHZpc2libGUgYmVsbCAoPGZsYXNoPikgcmF0aGVyIHRoYW4gPGJlbD4uCisjCS13CVdpZGUgLSBpbiAxMzIgY29sdW1uIG1vZGUuCisjIElmIGEgbmFtZSBoYXMgbXVsdGlwbGUgc3VmZml4ZXMgYW5kIG9uZSBpcyBhIGxpbmUgaGVpZ2h0LCB0aGF0IG9uZSBzaG91bGQKKyMgZ28gZmlyc3QuICBUaHVzIGBhYWEtMzAtcy1ydicgaXMgcmVjb21tZW5kZWQgb3ZlciBgYWFhLXMtcnYtMzAnLgorIworIyBFbnRyaWVzIHdpdGggZW1iZWRkZWQgcGx1cyBzaWducyBhcmUgZGVzaWduZWQgdG8gYmUgaW5jbHVkZWQgdGhyb3VnaCB1c2UvdGMKKyMgY2FwYWJpbGl0aWVzLCBub3QgdXNlZCBhcyBzdGFuZGFsb25lIGVudHJpZXMuCisjCisjIFRvIGF2b2lkIHNlYXJjaCBjbGFzaGVzLCBzb21lIG9sZGVyIGFsbC1udW1lcmljIG5hbWVzIGZvciB0ZXJtaW5hbHMgaGF2ZQorIyBiZWVuIHJlbW92ZWQgKGkuZS4sICIzMyIgZm9yIHRoZSBNb2RlbCAzMyBUZWxldHlwZSwgIjI2MjEiIGZvciB0aGUgSFAyNjIxKS4KKyMgQWxsIHByaW1hcnkgbmFtZXMgb2YgdGVybWluYWxzIG5vdyBoYXZlIGFscGhhbnVtZXJpYyBwcmVmaXhlcy4KKyMKKyMgQ29tbWVudHMgbWFya2VkICJlc3IiIGFyZSBtb3N0bHkgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgdGVybWNhcC1jb21waWxlcgorIyBjb2RlIHBhY2thZ2VkIHdpdGggbmN1cnNlcyBhbmQgY29udGVtcGxhdGluZyB0aGUgcmVzdWx0aW5nIGVycm9yIG1lc3NhZ2VzLgorIyBJbiBtYW55IGNhc2VzLCB0aGVzZSBpbmRpY2F0ZWQgb2J2aW91cyBmaXhlcyB0byBzeW50YXggZ2FyYmxlZCBieSB0aGUKKyMgY29tcG9zZXJzLiAgSW4gYSBmZXcgY2FzZXMsIEkgd2FzIGFibGUgdG8gZGVkdWNlIGNvcnJlY3RlZCBmb3JtcyBmb3IgZ2FyYmxlZAorIyBjYXBhYmlsaXRpZXMgYnkgbG9va2luZyBhdCBjb250ZXh0LiAgQWxsIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3JpZ2luYWwKKyMgZW50cmllcyBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNvbW1lbnRzLgorIworIyBJbiB0aGUgY29tbWVudHMsIHRlcm1pbmZvIGNhcGFiaWxpdHkgbmFtZXMgYXJlIGJyYWNrZXRlZCB3aXRoIDw+IChhbmdsZQorIyBicmFja2V0cykuICBUZXJtY2FwIGNhcGFiaWxpdHkgbmFtZXMgYXJlIGJyYWNrZXRlZCB3aXRoIDo6IChjb2xvbnMpLgorIworIyBJTlRFUlBSRVRBVElPTiBPRiBVU0VSIENBUEFCSUxJVElFUworIworIyBUaGUgU3lzdGVtIFYgUmVsZWFzZSA0IGFuZCBYUEc0IHRlcm1pbmZvIGZvcm1hdCBkZWZpbmVzIHRlbiBzdHJpbmcKKyMgY2FwYWJpbGl0aWVzIGZvciB1c2UgYnkgYXBwbGljYXRpb25zLCA8dTA+Li4uPHU5Pi4gICBJbiB0aGlzIGZpbGUsIHdlIHVzZQorIyBjZXJ0YWluIG9mIHRoZXNlIGNhcGFiaWxpdGllcyB0byBkZXNjcmliZSBmdW5jdGlvbnMgd2hpY2ggYXJlIG5vdCBjb3ZlcmVkCisjIGJ5IHRlcm1pbmZvLiAgVGhlIG1hcHBpbmcgaXMgYXMgZm9sbG93czoKKyMKKyMJdTkJdGVybWluYWwgZW5xdWlyZSBzdHJpbmcgKGVxdWl2LiB0byBBTlNJL0VDTUEtNDggREEpCisjCXU4CXRlcm1pbmFsIGFuc3dlcmJhY2sgZGVzY3JpcHRpb24KKyMJdTcJY3Vyc29yIHBvc2l0aW9uIHJlcXVlc3QgKGVxdWl2LiB0byBWVDEwMC9BTlNJL0VDTUEtNDggRFNSIDYpCisjCXU2CWN1cnNvciBwb3NpdGlvbiByZXBvcnQgKGVxdWl2LiB0byBBTlNJL0VDTUEtNDggQ1BSKQorIworIyBUaGUgdGVybWluYWwgZW5xdWlyZSBzdHJpbmcgPHU5PiBzaG91bGQgZWxpY2l0IGFuIGFuc3dlcmJhY2sgcmVzcG9uc2UKKyMgZnJvbSB0aGUgdGVybWluYWwuICBDb21tb24gdmFsdWVzIGZvciA8dTk+IHdpbGwgYmUgXkUgKG9uIG9sZGVyIEFTQ0lJCisjIHRlcm1pbmFscykgb3IgXEVbYyAob24gbmV3ZXIgVlQxMDAvQU5TSS9FQ01BLTQ4LWNvbXBhdGlibGUgdGVybWluYWxzKS4KKyMKKyMgVGhlIGN1cnNvciBwb3NpdGlvbiByZXF1ZXN0ICg8dTc+KSBzdHJpbmcgc2hvdWxkIGVsaWNpdCBhIGN1cnNvciBwb3NpdGlvbgorIyByZXBvcnQuICBBIHR5cGljYWwgdmFsdWUgKGZvciBWVDEwMCB0ZXJtaW5hbHMpIGlzIFxFWzZuLgorIworIyBUaGUgdGVybWluYWwgYW5zd2VyYmFjayBkZXNjcmlwdGlvbiAodTgpIG11c3QgY29uc2lzdCBvZiBhbiBleHBlY3RlZAorIyBhbnN3ZXJiYWNrIHN0cmluZy4gIFRoZSBzdHJpbmcgbWF5IGNvbnRhaW4gdGhlIGZvbGxvd2luZyBzY2FuZigzKS1saWtlCisjIGVzY2FwZXM6CisjCisjCSVjCUFjY2VwdCBhbnkgY2hhcmFjdGVyCisjCSVbLi4uXQlBY2NlcHQgYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBnaXZlbiBzZXQKKyMKKyMgVGhlIGN1cnNvciBwb3NpdGlvbiByZXBvcnQgKDx1Nj4pIHN0cmluZyBtdXN0IGNvbnRhaW4gdHdvIHNjYW5mKDMpLXN0eWxlCisjICVkIGZvcm1hdCBlbGVtZW50cy4gIFRoZSBmaXJzdCBvZiB0aGVzZSBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIFkgY29vcmRpbmF0ZQorIyBhbmQgdGhlIHNlY29uZCB0byB0aGUgJWQuICBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSAlaSwgaXQgaXMKKyMgdGFrZW4gYXMgYW4gaW5zdHJ1Y3Rpb24gdG8gZGVjcmVtZW50IGVhY2ggdmFsdWUgYWZ0ZXIgcmVhZGluZyBpdCAodGhpcyBpcworIyB0aGUgaW52ZXJzZSBzZW5zZSBmcm9tIHRoZSBjdXAgc3RyaW5nKS4gIFRoZSB0eXBpY2FsIENQUiB2YWx1ZSBpcworIyBcRVslaSVkOyVkUiAob24gVlQxMDAvQU5TSS9FQ01BLTQ4LWNvbXBhdGlibGUgdGVybWluYWxzKS4KKyMKKyMgVGhlc2UgY2FwYWJpbGl0aWVzIGFyZSB1c2VkIGJ5IHRhY2soMW0pLCB0aGUgdGVybWluZm8gYWN0aW9uIGNoZWNrZXIKKyMgKGRpc3RyaWJ1dGVkIHdpdGggbmN1cnNlcyA1LjApLgorIworIyBUQUJTRVQgRklMRVMKKyMKKyMgQWxsIHRoZSBlbnRyaWVzIGluIHRoaXMgZmlsZSBoYXZlIGJlZW4gZWRpdGVkIHRvIGFzc3VtZSB0aGF0IHRoZSB0YWJzZXQKKyMgZmlsZXMgZGlyZWN0b3J5IGlzIC91c3Ivc2hhcmUvdGFic2V0LCBpbiBjb25mb3JtYW5jZSB3aXRoIHRoZSBGaWxlIEhpZXJhcmNoeQorIyBTdGFuZGFyZCBmb3IgTGludXggYW5kIG9wZW4tc291cmNlIEJTRCBzeXN0ZW1zLiAgU29tZSB2ZW5kb3JzIChub3RhYmx5IFN1bikKKyMgdXNlIC91c3IvbGliL3RhYnNldCBvciAobW9yZSByZWNlbnRseSkgL3Vzci9zaGFyZS9saWIvdGFic2V0LgorIworIyBObyBjdXJzZXMgcGFja2FnZSB3ZSBrbm93IG9mIGFjdHVhbGx5IHVzZXMgdGhlc2UgZmlsZXMuICBJZiB0aGVpciBsb2NhdGlvbgorIyBpcyBhbiBpc3N1ZSwgeW91IHdpbGwgaGF2ZSB0byBoYW5kLXBhdGNoIHRoZSBmaWxlIGxvY2F0aW9ucyBiZWZvcmUgY29tcGlsaW5nCisjIHRoaXMgZmlsZS4KKyMKKyMgUkVRVUVTVCBGT1IgQ09OVEFDVCBJTkZPUk1BVElPTiBBTkQgSElTVE9SSUNBTCBNQVRFUklBTAorIworIyBBcyB0aGUgQU5TSS9FQ01BLTQ4IHN0YW5kYXJkIGFuZCB2YXJpYW50cyB0YWtlIGZpcm1lciBob2xkLCBhbmQgYXMKKyMgY2hhcmFjdGVyLWNlbGwgdGVybWluYWxzIGFyZSBpbmNyZWFzaW5nbHkgcmVwbGFjZWQgYnkgWCBkaXNwbGF5cywgbXVjaCBvZgorIyB0aGlzIGZpbGUgaXMgYmVjb21pbmcgYSBoaXN0b3JpY2FsIGRvY3VtZW50ICh0aGlzIGlzIHBhcnQgb2YgdGhlIHJlYXNvbiBmb3IKKyMgdGhlIG5ldyBvcmdhbml6YXRpb24sIHdoaWNoIHB1dHMgQU5TSSB0eXBlcywgeHRlcm0sIFVuaXggY29uc29sZXMsCisjIGFuZCB2dDEwMCB1cCBmcm9udCBpbiBjb25maWRlbmNlIHRoYXQgdGhpcyB3aWxsIGNhdGNoIDk1JSBvZiBuZXcgaGFyZHdhcmUpLgorIworIyBGb3IgdGhlIHRlcm1pbmFsIHR5cGVzIHN0aWxsIGFsaXZlLCBJJ2QgbGlrZSB0byBoYXZlIG1hbnVmYWN0dXJlcidzCisjIGNvbnRhY3QgZGF0YSAoSW50ZXJuZXQgYWRkcmVzcyBhbmQvb3Igc25haWwtbWFpbCArIHBob25lKS4KKyMKKyMgSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBlbnJpY2hpbmcgdGhlIGNvbW1lbnRzIHNvIHRoYXQgdGhlIGxhdHRlciBwb3J0aW9ucyBvZgorIyB0aGUgZmlsZSBkbyBpbiBmYWN0IGJlY29tZSBhIHBvdHRlZCBoaXN0b3J5IG9mIFZEVCB0ZWNobm9sb2d5IGFzIHNlZW4gYnkKKyMgVU5JWCBoYWNrZXJzLiAgSWRlYWxseSwgSSdkIGxpa2UgdGhlIGhlYWRlcnMgZm9yIGVhY2ggbWFudWZhY3R1cmVyIHRvCisjIGluY2x1ZGUgaXRzIGxpdmUvZGVhZC9vdXQtb2YtdGhlLWJ1c2luZXNzIHN0YXR1cywgYW5kIGZvciBhcyBtYW55CisjIHRlcm1pbmFsIHR5cGVzIGFzIHBvc3NpYmxlIHRvIGJlIHRhZ2dlZCB3aXRoIGluZm9ybWF0aW9uIGxpa2UgeWVhcnMKKyMgb2YgaGVhdmllc3QgdXNlLCBwb3B1bGFyaXR5LCBhbmQgaW50ZXJlc3RpbmcgZmVhdHVyZXMuCisjCisjIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgdGhlIG9ic2N1cmUgZW50cmllcyBsaXN0ZWQgdW5kZXIKKyMgYE1pc2NlbGxhbmVvdXMgb2Jzb2xldGUgdGVybWluYWxzLCBtYW51ZmFjdHVyZXJzIHVua25vd24nIGJlZm9yZSB0aGUgdHJpYmFsCisjIHdpc2RvbSBhYm91dCB0aGVtIGdldHMgbG9zdC4gIElmIHlvdSBrbm93IGEgbG90IGFib3V0IG9ic2N1cmUgb2xkIHRlcm1pbmFscywKKyMgcGxlYXNlIGdvIHRvIHRoZSB0ZXJtaW5mbyByZXNvdXJjZSBwYWdlLCBncmFiIHRoZSBVRk8gZmlsZSAodWZvLnRpKSwgYW5kCisjIGV5ZWJhbGwgaXQgZm9yIHRoaW5ncyB5b3UgY2FuIGlkZW50aWZ5IGFuZCBkZXNjcmliZS4KKyMKKyMgSWYgeW91IGhhdmUgYmVlbiBhcm91bmQgbG9uZyBlbm91Z2ggdG8gY29udHJpYnV0ZSwgcGxlYXNlIHJlYWQgdGhlIGZpbGUKKyMgd2l0aCB0aGlzIGluIG1pbmQgYW5kIHNlbmQgbWUgeW91ciBhbm5vdGF0aW9ucy4KKyMKKyMgQ09QWVJJR0hUUyBBTkQgT1RIRVIgREVMVVNJT05TCisjCisjIFRoZSBCU0QgYW5jZXN0b3Igb2YgdGhpcyBmaWxlIGhhZCBhIHN0YW5kYXJkIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKKyMgQ2FsaWZvcm5pYSBjb3B5cmlnaHQgd2l0aCBkYXRlcyBmcm9tIDE5ODAgdG8gMTk5My4KKyMKKyMgU29tZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBtZXJnZWQgaW4gZnJvbSBhIHRlcm1pbmZvIGZpbGUgU0NPIGRpc3RyaWJ1dGVzLgorIyBJdCBoYXMgYW4gb2Jub3hpb3VzIGJvaWxlcnBsYXRlIGNvcHlyaWdodCB3aGljaCBJJ20gaWdub3JpbmcgYmVjYXVzZSB0aGV5CisjIHRvb2sgc28gbXVjaCBvZiB0aGUgY29udGVudCBmcm9tIHRoZSBhbmNlc3RyYWwgQlNEIHZlcnNpb25zIG9mIHRoaXMgZmlsZQorIyBhbmQgZGlkbid0IGF0dHJpYnV0ZSBpdCwgdGhlcmVieSB2aW9sYXRpbmcgdGhlIEJTRCBSZWdlbnRzJyBjb3B5cmlnaHQuCisjCisjIE5vdCB0aGF0IGFueW9uZSBzaG91bGQgY2FyZS4gIEhvd2V2ZXIgbWFueSB2YWxpZCBmdW5jdGlvbnMgY29weXJpZ2h0cyBtYXkKKyMgc2VydmUsIHB1dHRpbmcgb25lIG9uIGEgdGVybWNhcC90ZXJtaW5mbyBmaWxlIHdpdGggaHVuZHJlZHMgb2YgYW5vbnltb3VzCisjIGNvbnRyaWJ1dG9ycyBtYWtlcyBhYm91dCBhcyBtdWNoIHNlbnNlIGFzIGNvcHlyaWdodGluZyBhIHdhbGwtZnVsbCBvZgorIyBncmFmZml0aSAtLSBpdCdzIGxlZ2FsbHkgZHViaW91cywgZXRoaWNhbGx5IGJvZ3VzLCBhbmQgcGF0ZW50bHkgcmlkaWN1bG91cy4KKyMKKyMgVGhpcyBmaWxlIGRlbGliZXJhdGVseSBoYXMgbm8gY29weXJpZ2h0LiAgSXQgYmVsb25ncyB0byBubyBvbmUgYW5kIGV2ZXJ5b25lLgorIyBJZiB5b3UgY2xhaW0geW91IG93biBpdCwgeW91IHdpbGwgbWVyZWx5IHN1Y2NlZWQgaW4gbG9va2luZyBsaWtlIGEgZm9vbC4KKyMgVXNlIGl0IGFzIHlvdSBsaWtlLiAgVXNlIGl0IGF0IHlvdXIgb3duIHJpc2suICBDb3B5IGFuZCByZWRpc3RyaWJ1dGUgZnJlZWx5LgorIyBUaGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBhbnl3aGVyZS4gIFN2YWhhIQorIworCisjIyMjIyMjIyBBTlNJLCBVTklYIENPTlNPTEUsIEFORCBTUEVDSUFMIFRZUEVTCisjCisjIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGVybWluYWwgY2xhc3NlcyBhbmQgYnJhbmRzIHRoYXQgYXJlIHN0aWxsCisjIHF1aXRlIGNvbW1vbi4KKyMKKworIyMjIyBTcGVjaWFscworIworIyBTcGVjaWFsICJ0ZXJtaW5hbHMiLiAgVGhlc2UgYXJlIHVzZWQgdG8gbGFiZWwgdHR5IGxpbmVzIHdoZW4geW91IGRvbid0CisjIGtub3cgd2hhdCBraW5kIG9mIHRlcm1pbmFsIGlzIG9uIGl0LiAgVGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhbiB1bmtub3duCisjIHRlcm1pbmFsIGFyZSB0aGUgbG93ZXN0IGNvbW1vbiBkZW5vbWluYXRvciAtIHRoZXkgbG9vayBhYm91dCBsaWtlIGEgdGkgNzAwLgorIworCitkdW1ifDgwLWNvbHVtbiBkdW1iIHR0eSwKKwlhbSwKKwljb2xzIzgwLAorCWJlbD1eRywgY3I9Xk0sIGN1ZDE9XkosIGluZD1eSiwKK3Vua25vd258dW5rbm93biB0ZXJtaW5hbCB0eXBlLAorCWduLCB1c2U9ZHVtYiwKK2xwcnxwcmludGVyfGxpbmUgcHJpbnRlciwKKwlPVGJzLCBoYywgb3MsCisJY29scyMxMzIsIGxpbmVzIzY2LAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGZmPV5MLCBpbmQ9XkosCitnbGFzc3R0eXxjbGFzc2ljIGdsYXNzIHR0eSBpbnRlcnByZXRpbmcgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzLAorCU9UYnMsIGFtLAorCWNvbHMjODAsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGh0PV5JLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwgbmVsPV5NXkosIC5rYnM9XkgsCisKK3ZhbmlsbGF8ZHVtYiB0dHksCisJT1RicywKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBpbmQ9XkosCisKKyMgVGhpcyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgImR1bWIiLCBidXQgd2l0aCBubyBwcmVzcGVjaWZpZWQgd2lkdGguCisjIERFTCBhbmQgXkMgYXJlIGhhcmRjb2RlZCB0byBhY3QgYXMga2lsbCBjaGFyYWN0ZXJzLgorIyBeRCBhY3RzIGFzIGEgbGluZSBicmVhayAoanVzdCBsaWtlIG5ld2xpbmUpLgorIyBJdCBhbHNvIGludGVycHJldHMKKyMgICAgICBcMDMzXTt4eHhcMDA3IAorIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHh0ZXJtIC1URAorOXRlcm18UGxhbjkgdGVybWluYWwgZW11bGF0b3IgZm9yIFgsCisJYW0sCisJT1RubD1eSiwgYmVsPV5HLCBjdWQxPV5KLAorCisjIyMjIEFOU0kuU1lTL0lTTyA2NDI5L0VDTUEtNDggQ2FwYWJpbGl0aWVzCisjCisjIFNlZSB0aGUgZW5kLW9mLWZpbGUgY29tbWVudCBmb3IgbW9yZSBvbiB0aGVzZS4KKyMKKworIyBBTlNJIGNhcGFiaWxpdGllcyBhcmUgYnJva2VuIHVwIGludG8gcGllY2VzLCBzbyB0aGF0IGEgdGVybWluYWwKKyMgaW1wbGVtZW50aW5nIHNvbWUgQU5TSSBzdWJzZXQgY2FuIHVzZSBtYW55IG9mIHRoZW0uCithbnNpK2xvY2FsMSwKKwljdWIxPVxFW0QsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLCBjdXUxPVxFW0EsCithbnNpK2xvY2FsLAorCWN1Yj1cRVslcDElZEQsIGN1ZD1cRVslcDElZEIsIGN1Zj1cRVslcDElZEMsCisJY3V1PVxFWyVwMSVkQSwgdXNlPWFuc2krbG9jYWwxLAorYW5zaSt0YWJzLAorCWNidD1cRVtaLCBodD1eSSwgaHRzPVxFSCwgdGJjPVxFWzJnLAorYW5zaStpbml0dGFicywKKwlpdCM4LCB1c2U9YW5zaSt0YWJzLAorYW5zaStlcmFzZSwKKwljbGVhcj1cRVtIXEVbSiwgZWQ9XEVbSiwgZWw9XEVbSywKK2Fuc2krcmNhLAorCWhwYT1cRVslcDElezF9JSslZEcsIHZwYT1cRVslcDElezF9JSslZGQsCithbnNpK2N1cCwKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGhvbWU9XEVbSCwKK2Fuc2krcmVwLAorCXJlcD0lcDElY1xFWyVwMiV7MX0lLSVkYiwKK2Fuc2kraWRsMSwKKwlkbDE9XEVbTSwgaWwxPVxFW0wsCithbnNpK2lkbCwKKwlkbD1cRVslcDElZE0sIGlsPVxFWyVwMSVkTCwgdXNlPWFuc2kraWRsMSwKK2Fuc2kraWRjLAorCWRjaDE9XEVbUCwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBybWlyPVxFNiwgc21pcj1cRTYsCithbnNpK2Fycm93cywKKwlrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2hvbWU9XEVbSCwKK2Fuc2krc2dyfGFuc2kgZ3JhcGhpYyByZW5kaXRpb25zLAorCWJsaW5rPVxFWzVtLCBpbnZpcz1cRVs4bSwgcmV2PVxFWzdtLAorCXNncj1cRVswJT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSwKKwlzZ3IwPVxFWzBtLAorYW5zaStzZ3Jzb3xhbnNpIHN0YW5kb3V0IG9ubHksCisJcm1zbz1cRVttLCBzbXNvPVxFWzdtLAorYW5zaStzZ3J1bHxhbnNpIHVuZGVybGluZSBvbmx5LAorCXJtdWw9XEVbbSwgc211bD1cRVs0bSwKK2Fuc2krc2dyYm9sZHxhbnNpIGdyYXBoaWMgcmVuZGl0aW9uczsgYXNzdW1pbmcgdGVybWluYWwgaGFzIGJvbGQ7IG5vdCBkaW0sCisJYm9sZD1cRVsxbSwKKwlzZ3I9XEVbJT8lcDEldDc7JTslPyVwMiV0NDslOyU/JXAzJXQ3OyU7JT8lcDQldDU7JTslPyVwNiV0MTslOyU/JXA3JXQ4OyU7bSwKKwl1c2U9YW5zaStzZ3IsIHVzZT1hbnNpK3NncnNvLCB1c2U9YW5zaStzZ3J1bCwKK2Fuc2krc2dyZGltfGFuc2kgZ3JhcGhpYyByZW5kaXRpb25zOyBhc3N1bWluZyB0ZXJtaW5hbCBoYXMgZGltOyBub3QgYm9sZCwKKwlkaW09XEVbMm0sCisJc2dyPVxFWyU/JXAxJXQ3OyU7JT8lcDIldDQ7JTslPyVwMyV0NzslOyU/JXA0JXQ1OyU7JT8lcDUldDI7JTslPyVwNyV0ODslO20sCisJdXNlPWFuc2krc2dyLCB1c2U9YW5zaStzZ3JzbywgdXNlPWFuc2krc2dydWwsCithbnNpK3BwfGFuc2kgcHJpbnRlciBwb3J0LAorCW1jMD1cRVswaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksCithbnNpK2NzcnxhbnNpIHNjcm9sbC1yZWdpb24gcGx1cyBjdXJzb3Igc2F2ZSAmIHJlc3RvcmUsCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCByYz1cRTgsIHNjPVxFNywKKworIyBUaGUgSUJNIFBDIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0LiAgUGx1ZyB0aGlzIGludG8gYW55IEludGVsIGNvbnNvbGUgZW50cnkuCisjIFdlIHVzZSBcRVsxMW0gZm9yIHJtYWNzIHJhdGhlciB0aGFuIFxFWzEybSBzbyB0aGUgPGFjc2M+IHN0cmluZyBjYW4gdXNlIHRoZQorIyBST00gZ3JhcGhpY3MgZm9yIGNvbnRyb2wgY2hhcmFjdGVycyBzdWNoIGFzIHRoZSBkaWFtb25kLCB1cC0gYW5kIGRvd24tYXJyb3cuCisjIFRoaXMgd29ya3Mgd2l0aCB0aGUgU3lzdGVtIFYsIExpbnV4LCBhbmQgQlNESSBjb25zb2xlcy4gIEl0J3MgYSBzYWZlIGJldCB0aGlzCisjIHdpbGwgd29yayB3aXRoIGFueSBJbnRlbCBjb25zb2xlLCB0aGV5IGFsbCBzZWVtIHRvIGhhdmUgaW5oZXJpdGVkIFxFWzExbQorIyBmcm9tIHRoZSBBTlNJLlNZUyBkZS1mYWN0byBzdGFuZGFyZC4KK2tsb25lK2Fjc3xhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBmb3IgYW5zaS5zeXMgZGlzcGxheXMsCisJYWNzYz0rXDAyMFwsXDAyMS1cMDMwLl5ZMFwzMzNgXDAwNGFcMjYxZlwzNzBnXDM2MWhcMjYwalwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cFwzMDRxXDMwNHJcMzA0c190XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzeVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNH5cMzc2LAorCXJtYWNzPVxFWzEwbSwgc21hY3M9XEVbMTFtLAorCisjIEhpZ2hsaWdodCBjb250cm9scyBjb3JyZXNwb25kaW5nIHRvIHRoZSBBTlNJLlNZUyBzdGFuZGFyZC4gIE1vc3QKKyMgY29uc29sZSBkcml2ZXJzIGZvciBJbnRlbCBib3hlcyBvYmV5IHRoZXNlLiAgTWFrZXMgdGhlIHNhbWUgYXNzdW1wdGlvbgorIyBhYm91dCBcRVsxMW0gYXMga2xvbmUrYWNzLiAgVHJ1ZSBBTlNJL0VDTUEtNDggd291bGQgaGF2ZSA8cm1zbz1cRVsyN20+LAorIyA8cm11bD1cRVsyNG0+LCBidXQgdGhpcyBpc24ndCBhIGRvY3VtZW50ZWQgZmVhdHVyZSBvZiBBTlNJLlNZUy4KK2tsb25lK3NncnxhdHRyaWJ1dGUgY29udHJvbCBmb3IgYW5zaS5zeXMgZGlzcGxheXMsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIHJldj1cRVs3bSwgcm1wY2g9XEVbMTBtLAorCXJtc289XEVbbSwgcm11bD1cRVttLAorCXNncj1cRVswOzEwJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA5JXQ7MTElO20sCisJc2dyMD1cRVswOzEwbSwgc21wY2g9XEVbMTFtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXVzZT1rbG9uZSthY3MsCisKKyMgTW9zdCBJbnRlbCBib3hlcyBkbyBub3QgdHJlYXQgImludmlzIiAoaW52aXNpYmxlKSB0ZXh0Lgora2xvbmUrc2dyOHxhdHRyaWJ1dGUgY29udHJvbCBmb3IgYW5zaS5zeXMgZGlzcGxheXMsCisJaW52aXM9XEVbOG0sCisJc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzExJTttLAorCXVzZT1rbG9uZStzZ3IsCisKKyMgSGlnaGxpZ2h0IGNvbnRyb2xzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFOU0kuU1lTIHN0YW5kYXJkLiAgKkFsbCoKKyMgY29uc29sZSBkcml2ZXJzIGZvciBJbnRlbCBib3hlcyBvYmV5IHRoZXNlLiAgRG9lcyBub3QgYXNzdW1lIFxFWzExbSB3aWxsCisjIHdvcms7IHVzZXMgXEVbMTJtIGluc3RlYWQsIHdoaWNoIGlzIHByZXR0eSBidWxsZXRwcm9vZiBidXQgbG9zZXMgeW91IHRoZSBBQ1MKKyMgZGlhbW9uZCBhbmQgYXJyb3cgY2hhcmFjdGVycyB1bmRlciBjdXJzZXMuCitrbG9uZStzZ3ItZHVtYnxhdHRyaWJ1dGUgY29udHJvbCBmb3IgYW5zaS5zeXMgZGlzcGxheXMgKG5vIEVTQyBbIDExIG0pLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBpbnZpcz1cRVs4bSwgcmV2PVxFWzdtLCBybXNvPVxFW20sCisJcm11bD1cRVttLAorCXNncj1cRVswOzEwJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7JT8lcDkldDsxMiU7bSwKKwlzZ3IwPVxFWzA7MTBtLCBzbWFjcz1cRVsxMm0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdXNlPWtsb25lK2FjcywKKworIyBLT0k4LVIgKFJGQzE0ODkpIGFjcyAoYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQpCisjIEZyb206IFFpbmcgTG9uZyA8cWluZ2xvbmdAQm9saXptLmloZXAuc3U+LCAyNCBGZWIgMTk5Ni4KK2tsb25lK2tvaThhY3N8YWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgZm9yIGFuc2kuc3lzIGRpc3BsYXlzIHdpdGggS09JOCBjaGFyc2V0LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzNi5eXzBcMjE1YFwwMDRhXDIzN2ZcMjM0Z1wyMzJoXDIyMmlcMjIwalwyMDVrXDIwM2xcMjAybVwyMDRuXDIxMm9cMjEzcFwyMTZxXDByXDIxN3NcMjE0dFwyMDZ1XDIwN3ZcMjEwd1wyMTF4XDIwMXlcMjMwelwyMzF7XDI2N3xcMjc0fUx+XDIyNSwKKwlybWFjcz1cRVsxMG0sIHNtYWNzPVxFWzExbSwKKworIyBBTlNJLlNZUyBjb2xvciBjb250cm9sLiAgVGhlIHNldGFiL3NldGFmIGNhcHMgZGVwZW5kIG9uIHRoZSBjb2luY2lkZW5jZQorIyBiZXR3ZWVuIFNWcjQvWFBHNCdzIGNvbG9yIG51bWJlcnMgYW5kIEFOU0kuU1lTIGF0dHJpYnV0ZXMuICBIZXJlIGFyZSBsb25nZXIKKyMgYnV0IGVxdWl2YWxlbnQgc3RyaW5ncyB0aGF0IGRvbid0IHJlbHkgb24gdGhhdCBjb2luY2lkZW5jZToKKyMgc2V0Yj1cRVs0JT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorIyBzZXRmPVxFWzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisjIFRoZSBET1MgNSBtYW51YWwgYXNzZXJ0cyB0aGF0IHRoZXNlIHNlcXVlbmNlcyBtZWV0IHRoZSBJU08gNjQyOSBzdGFuZGFyZC4KKyMgVGhleSBtYXRjaCBhIHN1YnNldCBvZiBFQ01BLTQ4Lgora2xvbmUrY29sb3J8Y29sb3IgY29udHJvbCBmb3IgYW5zaS5zeXMgYW5kIElTTzY0MjktY29tcGF0aWJsZSBkaXNwbGF5cywKKwljb2xvcnMjOCwgbmN2IzMsIHBhaXJzIzY0LAorCW9wPVxFWzM3OzQwbSwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKworIyBUaGlzIGlzIGJldHRlciB0aGFuIGtsb25lK2NvbG9yLCBpdCBkb2Vzbid0IGFzc3VtZSB3aGl0ZS1vbi1ibGFjayBhcyB0aGUKKyMgZGVmYXVsdCBjb2xvciBwYWlyLCAgYnV0IG1hbnkgYEFOU0knIHRlcm1pbmFscyBkb24ndCBncm9rIHRoZSA8b3A+IGNhcC4KK2VjbWErY29sb3J8Y29sb3IgY29udHJvbCBmb3IgRUNNQS00OC1jb21wYXRpYmxlIHRlcm1pbmFscywKKwlBWCwKKwljb2xvcnMjOCwgbmN2IzMsIHBhaXJzIzY0LAorCW9wPVxFWzM5OzQ5bSwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKworIyBBdHRyaWJ1dGUgY29udHJvbCBmb3IgRUNNQS00OC1jb21wYXRpYmxlIHRlcm1pbmFscworZWNtYStzZ3J8YXR0cmlidXRlIGNhcGFiaWxpdGllcyBmb3IgdHJ1ZSBFQ01BLTQ4IHRlcm1pbmFscywKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sIHVzZT1rbG9uZStzZ3I4LAorCisjIEZvciBjb21wYXJpc29uLCBoZXJlIGFyZSBhbGwgdGhlIGNhcGFiaWxpdGllcyBpbXBsaWVkIGJ5IHRoZSBJbnRlbAorIyBCaW5hcnkgQ29tcGF0aWJpbGl0eSBTdGFuZGFyZCAobGV2ZWwgMikgdGhhdCBmaXQgd2l0aGluIHRlcm1pbmZvLgorIyBGb3IgbW9yZSBkZXRhaWwgb24gdGhpcyByYXRoZXIgcGF0aGV0aWMgc3RhbmRhcmQsIHNlZSB0aGUgY29tbWVudHMKKyMgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KK2liY3MyfEludGVsIEJpbmFyeSBDb21wYXRpYmlsaXR5IFN0YW5kYXJkIHByZXNjcmlwdGlvbnMsCisJY2J0PVxFW1osIGNsZWFyPVxFYywgY3ViPVxFWyVwMSVkRCwgY3VkPVxFWyVwMSVkQiwKKwljdWY9XEVbJXAxJWRDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJZGNoPVxFWyVwMSVkUCwgZGlzcGM9XEU9JXAxJWRnLCBlY2g9XEVbJXAxJWRYLAorCWhwYT1cRVslaSVwMSVkRywgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLAorCWluZG49XEVbJXAxJWRTLCByYz1cRTcsIHJpbj1cRVslcDElZFQsIHJtYW09XEVbPzdsLCBzYz1cRTcsCisJc21hbT1cRVs/N2gsIHRiYz1cRVtnLCB2cGE9XEVbJWklcDElZGQsCisKKyMjIyMgQU5TSS9FQ01BLTQ4IHRlcm1pbmFscyBhbmQgdGVybWluYWwgZW11bGF0b3JzCisjCisjIFNlZSBuZWFyIHRoZSBlbmQgb2YgdGhpcyBmaWxlIGZvciBkZXRhaWxzIG9uIEFOU0kgY29uZm9ybWFuY2UuCisjIERvbid0IG1lc3Mgd2l0aCB0aGVzZSBlbnRyaWVzISAgTG90cyBvZiBvdGhlciBlbnRyaWVzIGRlcGVuZCBvbiB0aGVtIQorIworIyBUaGlzIHNlY3Rpb24gbGlzdHMgZW50cmllcyBpbiBhIGxlYXN0LWNhcGFibGUgdG8gbW9zdC1jYXBhYmxlIG9yZGVyLgorIyBpZiB5b3UncmUgaW4gZG91YnQgYWJvdXQgd2hhdCBgQU5TSScgbWF0Y2hlcyB5b3VycywgdHJ5IHRoZW0gaW4gdGhhdAorIyBvcmRlciBhbmQgYmFjayBvZmYgZnJvbSB0aGUgZmlyc3QgdGhhdCBicmVha3MuCisKKyMgYW5zaS1tciBpcyBmb3IgQU5TSSB0ZXJtaW5hbHMgd2l0aCBPTkxZIHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nCisjIGFuZCBtb3JlIHRoYW4gb25lIHBhZ2Ugb2YgbWVtb3J5LiAgSXQgdXNlcyBsb2NhbCBtb3Rpb25zIGluc3RlYWQgb2YKKyMgZGlyZWN0IGN1cnNvciBhZGRyZXNzaW5nLCBhbmQgbWFrZXMgYWxtb3N0IG5vIGFzc3VtcHRpb25zLiBJdCBkb2VzCisjIGFzc3VtZSBhdXRvIG1hcmdpbnMsIG5vIHBhZGRpbmcgYW5kL29yIHhvbi94b2ZmLCBhbmQgYSAyNHg4MCBzY3JlZW4uCithbnNpLW1yfG1lbSByZWwgY3VwIGFuc2ksCisJYW0sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgdXNlPXZhbmlsbGEsIHVzZT1hbnNpK2VyYXNlLAorCXVzZT1hbnNpK2xvY2FsMSwKKworIyBhbnNpLW1pbmkgaXMgYSBiYXJlIG1pbmltdW0gQU5TSSB0ZXJtaW5hbC4gVGhpcyBzaG91bGQgd29yayBvbiBhbnl0aGluZywgYnV0CisjIGJld2FyZSBvZiBzY3JlZW4gc2l6ZSBwcm9ibGVtcyBhbmQgbWVtb3J5IHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nLgorYW5zaS1taW5pfGFueSBhbnNpIHRlcm1pbmFsIHdpdGggcGVzc2ltaXN0aWMgYXNzdW1wdGlvbnMsCisJYW0sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgdXNlPXZhbmlsbGEsIHVzZT1hbnNpK2N1cCwKKwl1c2U9YW5zaStlcmFzZSwKKworIyBhbnNpLW10YWJzIGFkZHMgcmVsYXRpdmUgYWRkcmVzc2luZyBhbmQgbWluaW1hbCB0YWIgc3VwcG9ydAorYW5zaS1tdGFic3xhbnkgYW5zaSB0ZXJtaW5hbCB3aXRoIHBlc3NpbWlzdGljIGFzc3VtcHRpb25zLAorCWl0IzgsCisJaHQ9XkksIHVzZT1hbnNpK2xvY2FsMSwgdXNlPWFuc2ktbWluaSwKKworIyBBTlNJIFgzLjY0IGZyb20gZW1vcnkhbWxoaGggKEh1Z2ggSGFuc2FyZCkgdmlhIEJSTAorIworIyBUaGUgZm9sbG93aW5nIGlzIGFuIGVudHJ5IGZvciB0aGUgZnVsbCBBTlNJIDMuNjQgKDE5NzcpLiAgSXQgbGFja3MKKyMgcGFkZGluZywgYnV0IG1vc3QgdGVybWluYWxzIHVzaW5nIHRoZSBzdGFuZGFyZCBhcmUgImZhc3QiIGVub3VnaAorIyBub3QgdG8gcmVxdWlyZSBhbnkgLS0gZXZlbiBhdCA5NjAwIGJwcy4gIElmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMsCisjIHRyeSBpbmNsdWRpbmcgdGhlIHBhZGRpbmcgc3BlY2lmaWNhdGlvbnMuCisjCisjIE5vdGU6IHRoZSA6YXM6IGFuZCA6YWU6IHNwZWNpZmljYXRpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgaGVyZSwgZm9yCisjIHRoZSBhdmFpbGFibGUgdGVybWNhcCBkb2N1bWVudGF0aW9uIGRvZXMgbm90IG1ha2UgY2xlYXIgV0hJQ0ggYWx0ZXJuYXRlCisjIGNoYXJhY3RlciBzZXQgdG8gc3BlY2lmeS4gIEFOU0kgMy42NCBzZWVtcyB0byBtYWtlIGFsbG93YW5jZXMgZm9yIHNldmVyYWwuCisjIFBsZWFzZSBtYWtlIHRoZSBhcHByb3ByaWF0ZSBhZGp1c3RtZW50cyB0byBmaXQgeW91ciBuZWVkcyAtLSB0aGF0IGlzCisjIGlmIHlvdSB3aWxsIGJlIHVzaW5nIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0cy4KKyMKKyMgVGhlcmUgYXJlIHZlcnkgZmV3IHRlcm1pbmFscyBydW5uaW5nIHRoZSBmdWxsIEFOU0kgMy42NCBzdGFuZGFyZCwKKyMgc28gSSBjb3VsZCBvbmx5IHRlc3QgdGhpcyBlbnRyeSBvbiBvbmUgdmVyaWZpZWQgdGVybWluYWwgKFZpc3VhbCAxMDIpLgorIyBJIHdvdWxkIGFwcHJlY2lhdGUgdGhlIHJlc3VsdHMgb24gb3RoZXIgdGVybWluYWxzIHNlbnQgdG8gbWUuCisjCisjIFBsZWFzZSByZXBvcnQgY29tbWVudHMsIGNoYW5nZXMsIGFuZCBwcm9ibGVtcyB0bzoKKyMKKyMgVS5TLiBNQUlMOiAgIEh1Z2ggSGFuc2FyZAorIyAgICAgICAgICAgICAgQm94OiAyMjgzMAorIyAgICAgICAgICAgICAgRW1vcnkgVW5pdmVyc2l0eQorIyAgICAgICAgICAgICAgQXRsYW50YSwgR0EuIDMwMzIyLgorIworIyBVU0VORVQge2FrZ3VhLG1zZGMsc2IxLHNiNixnYXRlY2h9IWVtb3J5IW1saGhoLgorIworIyAoQWRkZWQgdnQxMDAgPHJjPiw8c2M+IHRvIHF1aWV0IGEgdGljIHdhcm5pbmcgLS1lc3IpCithbnNpNzd8YW5zaSAzLjY0IHN0YW5kYXJkIDE5NzcgdmVyc2lvbiwKKwlPVGJzLCBhbSwgbWlyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVbO0hcRVsySiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwgZGNoMT1cRVtQLCBkbDE9XEVbTSQ8NSovPiwgZWQ9XEVbSiwgZWw9XEVbSywKKwlob21lPVxFW0gsIGh0PV5JLCBpbDE9XEVbTCQ8NSovPiwgaW5kPVxFRCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLAorCWtmMj1cRU9SLCBrZjQ9XEVPUywga2hvbWU9XEVbSCwgbmVsPV5NXEVELCByYz1cRTgsIHJpPVxFTSwKKwlybWlyPVxFWzRsLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2M9XEU3LCBzbWlyPVxFWzRoLAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMgUHJvY29tbSBhbmQgc29tZSBvdGhlciBBTlNJIGVtdWxhdGlvbnMgZG9uJ3QgcmVjb2duaXplIGFsbCBvZiB0aGUgQU5TSS0KKyMgc3RhbmRhcmQgY2FwYWJpbGl0aWVzLiAgVGhpcyBlbnRyeSBkZWxldGVzIDxjdXU+LCA8Y3VmPiwgPGN1ZD4sIDxjdWI+LCBhbmQKKyMgPHZwYT4vPGhwYT4gY2FwYWJpbGl0aWVzLCBmb3JjaW5nIGN1cnNlcyB0byB1c2UgcmVwZXRpdGlvbnMgb2YgPGN1dTE+LAorIyA8Y3VmMT4sIDxjdWQxPiBhbmQgPGN1YjE+LiAgQWxzbyBkZWxldGVkIDxpY2g+IGFuZCA8aWNoMT4sIGFzIFFNb2RlbSB1cCB0bworIyA1LjAzIGRvZXNuJ3QgcmVjb2duaXplIHRoZXNlLiAgRmluYWxseSwgd2UgZGVsZXRlIDxyZXA+IGFuZCA8cmk+LCB3aGljaCBzZWVtCisjIHRvIGNvbmZ1c2UgbWFueSBlbXVsYXRvcnMuICBPbiB0aGUgb3RoZXIgaGFuZCwgd2UgY2FuIGNvdW50IG9uIHRoZXNlIHByb2dyYW1zCisjIGRvaW5nIDxybWFjcz4vPHNtYWNzPi88c2dyPi4gT2xkZXIgdmVyc2lvbnMgb2YgdGhpcyBlbnRyeSBmZWF0dXJlZAorIyA8aW52aXM9XEVbOW0+LCBidXQgPGludmlzPVxFWzhtPiBub3cgc2VlbXMgdG8gYmUgbW9yZSBjb21tb24gdW5kZXIKKyMgQU5TSS5TWVMgaW5mbHVlbmNlLgorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gT2N0IDMwIDE5OTUKK3BjYW5zaS1tfHBjYW5zaS1tb25vfGlibS1wYyB0ZXJtaW5hbCBwcm9ncmFtcyBjbGFpbWluZyB0byBiZSBhbnNpIChtb25vIG1vZGUpLAorCU9UYnMsIGFtLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLCBjdWIxPVxFW0QsCisJY3VkMT1cRVtCLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWRjaDE9XEVbUCwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksCisJaHRzPVxFSCwgaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsIHRiYz1cRVsyZywKKwl1c2U9a2xvbmUrc2dyLWR1bWIsCitwY2Fuc2ktMjUtbXxwY2Fuc2kyNW18aWJtLXBjIHRlcm1pbmFsIHByb2dyYW1zIHdpdGggMjUgbGluZXMgKG1vbm8gbW9kZSksCisJbGluZXMjMjUsIHVzZT1wY2Fuc2ktbSwKK3BjYW5zaS0zMy1tfHBjYW5zaTMzbXxpYm0tcGMgdGVybWluYWwgcHJvZ3JhbXMgd2l0aCAzMyBsaW5lcyAobW9ubyBtb2RlKSwKKwlsaW5lcyMzMywgdXNlPXBjYW5zaS1tLAorcGNhbnNpLTQzLW18YW5zaTQzbXxpYm0tcGMgdGVybWluYWwgcHJvZ3JhbXMgd2l0aCA0MyBsaW5lcyAobW9ubyBtb2RlKSwKKwlsaW5lcyM0MywgdXNlPXBjYW5zaS1tLAorIyBUaGUgY29sb3IgdmVyc2lvbnMuICBBbGwgUEMgZW11bGF0b3JzIGRvIGNvbG9yLi4uCitwY2Fuc2l8aWJtLXBjIHRlcm1pbmFsIHByb2dyYW1zIGNsYWltaW5nIHRvIGJlIGFuc2ksCisJdXNlPWtsb25lK2NvbG9yLCB1c2U9cGNhbnNpLW0sCitwY2Fuc2ktMjV8cGNhbnNpMjV8aWJtLXBjIHRlcm1pbmFsIHByb2dyYW1zIHdpdGggMjUgbGluZXMsCisJbGluZXMjMjUsIHVzZT1wY2Fuc2ksCitwY2Fuc2ktMzN8cGNhbnNpMzN8aWJtLXBjIHRlcm1pbmFsIHByb2dyYW1zIHdpdGggMzMgbGluZXMsCisJbGluZXMjMzMsIHVzZT1wY2Fuc2ksCitwY2Fuc2ktNDN8cGNhbnNpNDN8aWJtLXBjIHRlcm1pbmFsIHByb2dyYW1zIHdpdGggNDMgbGluZXMsCisJbGluZXMjNDMsIHVzZT1wY2Fuc2ksCisKKyMgYW5zaS1tIC0tIGZ1bGwgQU5TSSBYMy42NCB3aXRoIEFOU0kuU1lTLWNvbXBhdGlibGUgYXR0cmlidXRlcywgbm8gY29sb3IuCisjIElmIHlvdSB3YW50IHBvdW5kIHNpZ25zIHJhdGhlciB0aGFuIGRvbGxhcnMsIHJlcGxhY2UgYEInIHdpdGggYEEnCisjIGluIHRoZSA8czBkcz4sIDxzMWRzPiwgPHMyZHM+LCBhbmQgPHMzZHM+IGNhcGFiaWxpdGllcy4KKyMgRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IE5vdiA2IDE5OTUKK2Fuc2ktbXxhbnNpLW1vbm98QU5TSSBYMy42NC0xOTc5IHRlcm1pbmFsIHdpdGggQU5TSS5TWVMgY29tcGF0aWJsZSBhdHRyaWJ1dGVzLAorCW1jNWksCisJY3ViPVxFWyVwMSVkRCwgY3VkPVxFWyVwMSVkQiwgY3VmPVxFWyVwMSVkQywKKwljdXU9XEVbJXAxJWRBLCBkY2g9XEVbJXAxJWRQLCBkbD1cRVslcDElZE0sCisJZWNoPVxFWyVwMSVkWCwgZWwxPVxFWzFLLCBocGE9XEVbJWklcDElZEcsIGh0PVxFW0ksCisJaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbmRuPVxFWyVwMSVkUywga2JzPV5ILAorCWtjYnQ9XEVbWiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlraWNoMT1cRVtMLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgbmVsPVxyXEVbUywKKwlyZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsIHJpbj1cRVslcDElZFQsIHMwZHM9XEUoQiwKKwlzMWRzPVxFKUIsIHMyZHM9XEUqQiwgczNkcz1cRStCLCB0YmM9XEVbMmcsCisJdnBhPVxFWyVpJXAxJWRkLCB1c2U9cGNhbnNpLW0sCisKK2Fuc2krZW5xfG5jdXJzZXMgZXh0ZW5zaW9uIGZvciBBTlNJIEVOUSwKKwl1Nj1cRVslaSVkOyVkUiwgdTc9XEVbNm4sIHU4PVxFWz8lWzswMTIzNDU2Nzg5XWMsCisJdTk9XEVbYywKKworIyBhbnNpIC0tIHRoaXMgdGVybWluZm8gZXhwcmVzc2VzIHRoZSBsYXJnZXN0IHN1YnNldCBvZiBYMy42NCB0aGF0IHdpbGwgZml0IGluCisjIHN0YW5kYXJkIHRlcm1pbmZvLiAgQXNzdW1lcyBBTlNJLlNZUy1jb21wYXRpYmxlIGF0dHJpYnV0ZXMgYW5kIGNvbG9yLgorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gTm92IDYgMTk5NQorYW5zaXxhbnNpL3BjLXRlcm0gY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCXVzZT1hbnNpK2VucSwgdXNlPWVjbWErY29sb3IsIHVzZT1rbG9uZStzZ3I4LCB1c2U9YW5zaS1tLAorCisjIGFuc2ktZ2VuZXJpYyBpcyBhIHZhbmlsbGEgQU5TSSB0ZXJtaW5hbC4gVGhpcyBpcyBhc3N1bWVkIHRvIGltcGxlbWVudAorIyBhbGwgdGhlIG5vcm1hbCBBTlNJIHN0dWZmIHdpdGggbm8gZXh0ZW5zaW9ucy4gSXQgYXNzdW1lcworIyBpbnNlcnQvZGVsZXRlIGxpbmUvY2hhciBpcyB0aGVyZSwgc28gaXQgd29uJ3Qgd29yayB3aXRoCisjIHZ0MTAwIGNsb25lcy4gSXQgYXNzdW1lcyB2aWRlbyBhdHRyaWJ1dGVzIGZvciBib2xkLCBibGluaywKKyMgdW5kZXJsaW5lLCBhbmQgcmV2ZXJzZSwgd2hpY2ggd29uJ3QgbWF0dGVyIG11Y2ggaWYgdGhlIHRlcm1pbmFsCisjIGNhbid0IGRvIHNvbWUgb2YgdGhvc2UuIFBhZGRpbmcgaXMgYXNzdW1lZCB0byBiZSB6ZXJvLCB3aGljaAorIyBzaG91bGRuJ3QgaHVydCBzaW5jZSB4b24veG9mZiBpcyBhc3N1bWVkLgorYW5zaS1nZW5lcmljfGdlbmVyaWMgYW5zaSBzdGFuZGFyZCB0ZXJtaW5hbCwKKwlhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCB1c2U9dmFuaWxsYSwgdXNlPWFuc2krY3NyLCB1c2U9YW5zaStjdXAsCisJdXNlPWFuc2krcmNhLCB1c2U9YW5zaStlcmFzZSwgdXNlPWFuc2krdGFicywKKwl1c2U9YW5zaStsb2NhbCwgdXNlPWFuc2kraWRjLCB1c2U9YW5zaStpZGwsIHVzZT1hbnNpK3JlcCwKKwl1c2U9YW5zaStzZ3Jib2xkLCB1c2U9YW5zaSthcnJvd3MsCisKKyMjIyMgRE9TIEFOU0kuU1lTIHZhcmlhbnRzCisjCisjIFRoaXMgY29tcGxldGVseSBkZXNjcmliZXMgdGhlIHNlcXVlbmNlcyBzcGVjaWZpZWQgaW4gdGhlIERPUyAyLjEgQU5TSS5TWVMKKyMgZG9jdW1lbnRhdGlvbiAoZXhjZXB0IGZvciB0aGUga2V5Ym9hcmQga2V5IHJlYXNzaWdubWVudCBmZWF0dXJlLCB3aGljaAorIyBkb2Vzbid0IGZpdCB0aGUgPHBma2V5PiBtb2RlbCB3ZWxsKS4gIFRoZSBrbG9uZSthY3Mgc2VxdWVuY2VzIHdlcmUgdmFsaWQKKyMgdGhvdWdoIHVuZG9jdW1lbnRlZC4gIFRoZSA8cGZrZXk+IGNhcGFiaWxpdHkgaXMgdW50ZXN0ZWQgYnV0IHNob3VsZCB3b3JrIGZvcgorIyBrZXlzIEYxLUYxMCAoJXAxIHZhbHVlcyBvdXRzaWRlIHRoaXMgcmFuZ2Ugd2lsbCB5aWVsZCB1bnByZWRpY3RhYmxlIHJlc3VsdHMpLgorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gTm92IDcgMTk5NQorYW5zaS5zeXMtb2xkfEFOU0kuU1lTIHVuZGVyIFBDLURPUyAyLjEsCisJT1RicywgYW0sIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWNsZWFyPVxFWzJKLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZWw9XEVbaywgaG9tZT1cRVtILAorCWlzMj1cRVttXEVbPzdoLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywKKwlraG9tZT1eXiwgcGZrZXk9XEVbMDslcDElezU4fSUrJWQ7JXAyIiVzIiwgcmM9XEVbdSwKKwlybWFtPVxFWz83bCwgc2M9XEVbcywgc21hbT1cRVs/N2gsIHU2PVxFWyVpJWQ7JWRSLAorCXU3PVxFWzZuLCB1c2U9a2xvbmUrY29sb3IsIHVzZT1rbG9uZStzZ3I4LAorYW5zaS5zeXN8QU5TSS5TWVMgMy4xIGFuZCBsYXRlciB2ZXJzaW9ucywKKwllbD1cRVtLLCB1c2U9YW5zaS5zeXMtb2xkLAorCisjCisjIERlZmluZSBJQk0gUEMga2V5cGFkIGtleXMgZm9yIHZpIGFzIHBlciBNUy1LZXJtaXQgd2hpbGUgdXNpbmcgQU5TSS5TWVMuCisjIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHRoZSB0ZXJtaW5hbCBlbXVsYXRvciBjYW5ub3QgcmVkZWZpbmUgdGhlIGtleXMuCisjIFNpbmNlIHJlZGVmaW5pbmcga2V5cyB3aXRoIGFuc2kuc3lzIGFsc28gYWZmZWN0cyBQQy1ET1MgcHJvZ3JhbXMsIHRoZSBrZXkKKyMgZGVmaW5pdGlvbnMgbXVzdCBiZSByZXN0b3JlZC4gIElmIHRoZSB0ZXJtaW5hbCBlbXVsYXRvciBpcyBxdWl0IHdoaWxlIGluIHZpCisjIG9yIG90aGVycyB1c2luZyA8c21reD4vPHJta3g+LCB0aGUga2V5cGFkIHdpbGwgbm90IGJlIGRlZmluZWQgYXMgcGVyIFBDLURPUy4KKyMgVGhlIFBnVXAgYW5kIFBnRG4gYXJlIHByZWZpeGVkIHdpdGggRVNDIHNvIHRoYXQgdG4zMjcwIGNhbiBiZSB1c2VkIG9uIFVuaXgKKyMgKF5VIGFuZCBeRCBhcmUgYWxyZWFkeSBkZWZpbmVkIGZvciB0bjMyNzApLiAgVGhlIEVTQyBpcyBzYWZlIGZvciB2aSBidXQgaXQKKyMgZG9lcyAiYmVlcCIuICBFU0MgRVNDIGkgaXMgdXNlZCBmb3IgSW5zIHRvIGF2b2lkIHRuMzI3MCBFU0MgaSBmb3IgY29sdGFiLgorIyBOb3RlIHRoYXQgPGtjdWIxPiBpcyBhbHdheXMgQlMsIGJlY2F1c2UgUEMtZG9zIGNhbiB0b2xlcmF0ZSB0aGlzIGNoYW5nZS4KKyMgQ2F1dGlvbjogdmkgaXMgbGltaXRlZCB0byAyNTYgc3RyaW5nIGJ5dGVzLCBsb25nZXIgY3Jhc2hlcyBvciB3ZWlyZHMgb3V0IHZpLgorIyBDb25zZXF1ZW50bHkgdGhlIEVuZCBrZXlwYWQga2V5IGNvdWxkIG5vdCBiZSBzZXQgKGl0IGlzIHJlbGF0aXZlbHkgc2FmZSBhbmQKKyMgYWN0dWFsbHkgdXNlZnVsIGJlY2F1c2UgaXQgc2VuZHMgXkAgTywgd2hpY2ggYmVlcHMgYW5kIG9wZW5zIGEgbGluZSBhYm92ZSkuCithbnNpLnN5c2t8YW5zaXN5c2t8UEMtRE9TIDMuMSBBTlNJLlNZUyB3aXRoIGtleXBhZCByZWRlZmluZWQgZm9yIHZpLAorCWlzMj1VMiBQQy1ET1MgMy4xIEFOU0kuU1lTIHdpdGgga2V5cGFkIHJlZGVmaW5lZCBmb3IgdmkgOS0yOS04NlxuXEVbOzc1OzhwLAorCXJta3g9XEVbOzcxOzA7NzFwXEVbOzcyOzA7NzJwXEVbOzczOzA7NzNwXEVbOzc3OzA7NzdwXEVbOzgwOzA7ODBwXEVbOzgxOzA7ODFwXEVbOzgyOzA7ODJwXEVbOzgzOzA7ODNwLAorCXNta3g9XEVbOzcxOzMwcFxFWzs3MjsxMXBcRVs7NzM7Mjc7MjFwXEVbOzc3OzEycFxFWzs4MDsxMHBcRVs7ODE7Mjc7NHBcRVs7ODI7Mjc7Mjc7MTA1cFxFWzs4MzsxMjdwLAorCXVzZT1hbnNpLnN5cywKKyMKKyMgQWRkcyBpbnMvZGVsIGxpbmUvY2hhcmFjdGVyLCBoZW5jZSB2aSByZXZlcnNlIHNjcm9sbHMvaW5zZXJ0cy9kZWxldGVzIG5pY2VyLgorbmFuc2kuc3lzfG5hbnNpc3lzfFBDLURPUyBQdWJsaWMgRG9tYWluIE5BTlNJLlNZUywKKwlkY2gxPVxFWzFQLCBkbDE9XEVbMU0sIGljaDE9XEVbMUAsIGlsMT1cRVsxTCwKKwlpczI9VTMgUEMtRE9TIFB1YmxpYyBEb21haW4gTkFOU0kuU1lTIDktMjMtODZcbiwKKwl1c2U9YW5zaS5zeXMsCisjCisjIFNlZSBhbnNpLnN5c2sgYW5kIG5hbnNpLnN5cyBhYm92ZS4KK25hbnNpLnN5c2t8bmFuc2lzeXNrfFBDLURPUyBQdWJsaWMgRG9tYWluIE5BTlNJLlNZUyB3aXRoIGtleXBhZCByZWRlZmluZWQgZm9yIHZpLAorCWRjaDE9XEVbMVAsIGRsMT1cRVsxTSwgaWNoMT1cRVsxQCwgaWwxPVxFWzFMLAorCWlzMj1VNCBQQy1ET1MgUHVibGljIERvbWFpbiBOQU5TSS5TWVMgd2l0aCBrZXlwYWQgcmVkZWZpbmVkIGZvciB2aSA5LTI5LTg2XG5cRVs7NzU7OHAsCisJdXNlPWFuc2kuc3lzaywKKworIyMjIyBBTlNJIGNvbnNvbGUgdHlwZXMKKyMKKworIyMjIyBCZU9TCisjCisjIEJlT1MgZW50cnkgZm9yIFRlcm1pbmFsIHByb2dyYW0gU2VlbXMgdG8gYmUgYWxtb3N0IEFOU0kKK2JldGVybXxCZU9TIFRlcm1pbmFsLAorCWFtLCBlbywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCBuY3YjNSwgcGFpcnMjNjQsCisJYmVsPV5HLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBob21lPVxFW0gsCisJaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LAorCWtlbmQ9XEVbNH4sIGtmMT1cRVsxMX4sIGtmMTA9XEVbMjB+LCBrZjExPVxFWzIxfiwKKwlrZjEyPVxFWzIyfiwga2YyPVxFWzEyfiwga2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwKKwlrZjU9XEVbMTV+LCBrZjY9XEVbMTZ+LCBrZjc9XEVbMTd+LCBrZjg9XEVbMTh+LCBrZjk9XEVbMTl+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtzcGQ9XlosCisJbmVsPV5NXkosIG9wPVxFW20sIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtaXI9XEVbNGwsCisJcm1reD1cRVs/NGwsIHJtc289XEVbbSwgcm11bD1cRVsyNG0sIHJzMT1cRWMsIHNjPVxFNywKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNldGI9XEVbJXAxJXs0MH0lKyVjbSwgc2V0Zj1cRVslcDElezMwfSUrJWNtLAorCXNncjA9XEVbMDsxMG0sIHNtaXI9XEVbNGgsIHNta3g9XEVbPzRoLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHU2PVxFWyVpJXAxJWQ7JXAyJWRSLCB1Nz1cRVs2biwKKwl2cGE9XEVbJWklcDElZGQsCisKKyMjIyMgTGludXggY29uc29sZXMKKyMKKworIyBUaGlzIGVudHJ5IGlzIGdvb2QgZm9yIHRoZSAxLjIuMTMgb3IgbGF0ZXIgdmVyc2lvbiBvZiB0aGUgTGludXggY29uc29sZS4KKyMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgKiBMaW51eGVzIGNvbWUgd2l0aCBhIGRlZmF1bHQga2V5Ym9hcmQgbWFwcGluZyBrY2J0PV5JLiAgVGhpcyBlbnRyeSwgaW4gICAqCisjICogcmVzcG9uc2UgdG8gdXNlciByZXF1ZXN0cywgYXNzdW1lcyBrY2J0PVxFW1osIHRoZSBBTlNJL0VDTUEgcmV2ZXJzZS10YWIgKgorIyAqIGNoYXJhY3Rlci4gSGVyZSBhcmUgdGhlIGtleW1hcCByZXBsYWNlbWVudCBsaW5lcyB0aGF0IHdpbGwgc2V0IHRoaXMgdXA6ICoKKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjCWtleWNvZGUgIDE1ID0gVGFiICAgICAgICAgICAgIFRhYgorIwkJYWx0ICAgICBrZXljb2RlICAxNSA9IE1ldGFfVGFiCisjCQlzaGlmdAlrZXljb2RlICAxNSA9IEYyNgorIwlzdHJpbmcgRjI2ID0iXDAzM1taIgorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgKiBUaGlzIGhhcyB0byB1c2UgYSBrZXkgc2xvdCB3aGljaCBpcyB1bmZvcnR1bmF0ZSAoYW55IHVudXNlZCBvbmUgd2lsbCAgICAqCisjICogZG8sIEYyNiBpcyB0aGUgaGlnaGVyLW51bWJlcmVkIG9uZSkuICBUaGUgY2hhbmdlIG91Z2h0IHRvIGJlIGJ1aWx0ICAgICAgKgorIyAqIGludG8gdGhlIGtlcm5lbCB0YWJsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyBBbGwgbGludXgga2VybmVscyBzaW5jZSAxLjIuMTMgKGF0IGxlYXN0KSBzZXQgdGhlIHNjcmVlbiBzaXplCisjIHRoZW1zZWx2ZXM7IHRoaXMgZW50cnkgYXNzdW1lcyB0aGF0IGNhcGFiaWxpdHkuCisjCitsaW51eC1iYXNpY3xsaW51eCBjb25zb2xlLAorCWFtLCBiY2UsIGVvLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwlpdCM4LCBuY3YjMTgsCisJYWNzYz0rXDAyMFwsXDAyMS1cMDMwLl5ZMFwzMzNgXDAwNGFcMjYxZlwzNzBnXDM2MWhcMjYwaVwzMTZqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b35wXDMwNHFcMzA0clwzMDRzX3RcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjN5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0flwzNzYsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssCisJZWwxPVxFWzFLLCBmbGFzaD1cRVs/NWhcRVs/NWwkPDIwMC8+LCBob21lPVxFW0gsCisJaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwga2IyPVxFW0csIGticz1cMTc3LAorCWtjYnQ9XEVbWiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVszfiwga2VuZD1cRVs0fiwga2YxPVxFW1tBLCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwKKwlrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwKKwlrZjE5PVxFWzMzfiwga2YyPVxFW1tCLCBrZjIwPVxFWzM0fiwga2YzPVxFW1tDLCBrZjQ9XEVbW0QsCisJa2Y1PVxFW1tFLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga21vdXM9XEVbTSwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3NwZD1eWiwgbmVsPV5NXkosIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYW09XEVbPzdsLAorCXJtaXI9XEVbNGwsIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwgcnMxPVxFY1xFXVIsIHNjPVxFNywKKwlzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDsyJTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7JT8lcDkldDsxMSU7bSwKKwlzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXZwYT1cRVslaSVwMSVkZCwgdXNlPXZ0MTAyK2VucSwgdXNlPWtsb25lK3NnciwKKwl1c2U9ZWNtYStjb2xvciwKKworbGludXgtbXxMaW51eCBjb25zb2xlIG5vIGNvbG9yLAorCWNvbG9yc0AsIHBhaXJzQCwKKwlzZXRhYkAsIHNldGFmQCwgc2V0YkAsIHNldGZALCB1c2U9bGludXgsCisKKyMgVGhlIDEuMy54IGtlcm5lbHMgYWRkIGNvbG9yLWNoYW5nZSBjYXBhYmlsaXRpZXM7IGlmIHlvdXJzIGRvZXNuJ3QgaGF2ZSB0aGlzCisjIGFuZCBpdCBtYXR0ZXJzLCB0dXJuIG9mZiA8Y2NjPi4gIFRoZSAlMDJ4IGVzY2FwZSB1c2VkIHRvIGltcGxlbWVudCB0aGlzIGlzCisjIG5vdCBzdXBwb3NlZGx5IGJhY2stcG9ydGFibGUgdG8gb2xkZXIgU1YgY3Vyc2VzIChhbHRob3VnaCBpdCBoYXMgd29ya2VkIGZpbmUKKyMgb24gU29sYXJpcyBmb3Igc2V2ZXJhbCB5ZWFycykgYW5kIG5vdCBzdXBwb3J0ZWQgaW4gbmN1cnNlcyB2ZXJzaW9ucyBiZWZvcmUKKyMgMS45LjkuCitsaW51eC1jLW5jfGxpbnV4IGNvbnNvbGUgd2l0aCBjb2xvci1jaGFuZ2UsCisJY2NjLAorCWluaXRjPVxFXVAlcDEleCVwMiV7MjU2fSUqJXsxMDAwfSUvJTAyeCVwMyV7MjU2fSUqJXsxMDAwfSUvJTAyeCVwNCV7MjU2fSUqJXsxMDAwfSUvJTAyeCwKKwlvYz1cRV1SLCB1c2U9bGludXgtYmFzaWMsCisjIEZyb206IERlbm5pcyBIZW5yaWtzZW4gPG9wdXNAb3NybC5kaz4sIDkgSnVseSAxOTk2CitsaW51eC1jfGxpbnV4IGNvbnNvbGUgMS4zLjYrIGZvciBvbGRlciBuY3Vyc2VzLAorCWNjYywKKwlpbml0Yz1cRV1QJT8lcDElezl9JT4ldCVwMSV7MTB9JS0lJ2EnJSslYyVlJXAxJWQlOyVwMiV7MjU2fSUqJXsxMDAwfSUvJVByJWdyJXsxNn0lLyVQeCU/JWd4JXs5fSU+JXQlZ3glezEwfSUtJSdhJyUrJWMlZSVneCVkJTslZ3IlezE1fSUmJVB4JT8lZ3glezl9JT4ldCVneCV7MTB9JS0lJ2EnJSslYyVlJWd4JWQlOyVwMyV7MjU2fSUqJXsxMDAwfSUvJVByJWdyJXsxNn0lLyVQeCU/JWd4JXs5fSU+JXQlZ3glezEwfSUtJSdhJyUrJWMlZSVneCVkJTslZ3IlezE1fSUmJVB4JT8lZ3glezl9JT4ldCVneCV7MTB9JS0lJ2EnJSslYyVlJWd4JWQlOyVwNCV7MjU2fSUqJXsxMDAwfSUvJVByJWdyJXsxNn0lLyVQeCU/JWd4JXs5fSU+JXQlZ3glezEwfSUtJSdhJyUrJWMlZSVneCVkJTslZ3IlezE1fSUmJVB4JT8lZ3glezl9JT4ldCVneCV7MTB9JS0lJ2EnJSslYyVlJWd4JWQlOywKKwlvYz1cRV1SLCB1c2U9bGludXgtYmFzaWMsCisKKyMgVGhlIDIuMi54IGtlcm5lbHMgYWRkIGEgcHJpdmF0ZSBtb2RlIHRoYXQgc2V0cyB0aGUgY3Vyc29yIHR5cGU7IHVzZSB0aGF0IHRvCisjIGdldCBhIGJsb2NrIGN1cnNvciBmb3IgY3Z2aXMuCisjIHJlcG9ydGVkIGJ5IEZyYW5rIEhlY2tlbmJhY2ggPGZyYW5rQGctbi11LmRlPi4KK2xpbnV4fGxpbnV4IGNvbnNvbGUsCisJY2l2aXM9XEVbPzI1bFxFWz8xYywgY25vcm09XEVbPzI1aFxFWz8wYywKKwljdnZpcz1cRVs/MjVoXEVbPzhjLCB1c2U9bGludXgtYy1uYywKKworIyBTdWJqZWN0OiBsaW51eCAyLjYuMjYgdnQgYmFja19jb2xvcl9lcmFzZQorIyBDaGFuZ2VzIHRvIHRoZSBMaW51eCBjb25zb2xlIGRyaXZlciBicm9rZSBiY2UgbW9kZWwgYXMgcmVwb3J0ZWQgaW4KKyMJaHR0cHM6Ly9idWd6aWxsYS5ub3ZlbGwuY29tL3Nob3dfYnVnLmNnaT9pZD00MTg2MTMKKyMgYXBwYXJlbnRseSBmcm9tCisjCWh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDgvNC8yNi8zMDUKKyMJaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2ZhLmxpbnV4Lmtlcm5lbC9icm93c2VfdGhyZWFkL3RocmVhZC84N2Y5ODMzOGYwZDYzNmJiL2FhOTZlOGI4NmNlZTBkMWU/bG5rPXN0JnE9I2FhOTZlOGI4NmNlZTBkMWUKK2xpbnV4Mi42LjI2fGxpbnV4IGNvbnNvbGUgdy9vIGJjZSwKKwliY2VALCB1c2U9bGludXgsCisKKyMgU2VlIHRoZSBub3RlIG9uIElDSC9JQ0gxIFZFUlNVUyBSTUlSL1NNSVIgbmVhciB0aGUgZW5kIG9mIGZpbGUKK2xpbnV4LW5pY3xsaW51eCB3aXRoIGljaC9pY2gxIHN1cHByZXNzZWQgZm9yIG5vbi1jdXJzZXMgcHJvZ3JhbXMsCisJaWNoQCwgaWNoMUAsIHVzZT1saW51eCwKKworIyBUaGlzIGFzc3VtZXMgeW91IGhhdmUgdXNlZCBzZXRmb250KDgpIHRvIGxvYWQgb25lIG9mIHRoZSBMaW51eCBrb2k4LXIgZm9udHMuCisjIGFjc2MgZW50cnkgZnJvbSBQYXZlbCBSb3NraW4iIDxwYXZlbEBhYnNvbHV0ZS5zcGIuc3U+LCAyOSBTZXAgMTk5Ny4KK2xpbnV4LWtvaTh8bGludXggd2l0aCBrb2k4IGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMjE1YFwwMDRhXDIyMWZcMjM0Z1wyMzdoXDIyMGlcMjc2alwyMDVrXDIwM2xcMjAybVwyMDRuXDIxMm9+cFwwcVwwclwwc190XDIwNnVcMjA3dlwyMTF3XDIxMHhcMjAxeVwyMzB6XDIzMXtcMjY3fFwyNzR+XDIyNCwKKwl1c2U9bGludXgsIHVzZT1rbG9uZStrb2k4YWNzLAorCisjIEFub3RoZXIgZW50cnkgZm9yIEtPSTgtciB3aXRoIFFpbmcgTG9uZydzIGFjc2MuCisjICh3aGljaCBvbmUgYmV0dGVyIGNvbXBsaWVzIHdpdGggdGhlIHN0YW5kYXJkPykKK2xpbnV4LWtvaThyfGxpbnV4IHdpdGgga29pOC1yIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0LAorCXVzZT1saW51eCwgdXNlPWtsb25lK2tvaThhY3MsCisKKyMgRW50cnkgZm9yIHRoZSBsYXRpbjEgYW5kIGxhdGluMiBmb250cworbGludXgtbGF0fGxpbnV4IHdpdGggbGF0aW4xIG9yIGxhdGluMiBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwwMTNmXDM3MGdcMzYxaFwyNjBpXDMxNmpcMjExa1wyMTRsXDIwNm1cMjAzblwzMDVvfnBcMzA0cVwyMTJyXDMwNHNfdFwyMDd1XDIxNXZcMzAxd1wzMDJ4XDIwNXlcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwl1c2U9bGludXgsCisKKyMgVGhpcyB1c2VzIGdyYXBoaWNzIGZyb20gVlQgY29kZXNldCBpbnN0ZWFkIG9mIGZyb20gY3A0MzcuCisjIHJlYXNvbjogY3A0MzcgKGFrYSAic3RyYWlnaHQgdG8gZm9udCIpIGlzIG5vdCBmdW5jdGlvbmFsIHVuZGVyIGx1aXQuCisjIGZyb206IEFuZHJleSBWIEx1a3lhbm92IDxsYW5kQGxvbmcueWFyLnJ1Pi4KK2xpbnV4LXZ0fGxpbnV4IGNvbnNvbGUgdXNpbmcgVlQgY29kZXMgZm9yIGdyYXBoaWNzLAorCWFjc2M9KytcLFwsLS0uLjAwYGBhYWZmZ2doaGlpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6en5+LAorCXJtYWNzPVxFKEssIHJtcGNoQCwgc2dyQCwgc2dyMD1cRVswbVxFKEtcMDE3LCBzbWFjcz1cRSgwLAorCXNtcGNoQCwgdXNlPWxpbnV4LAorCisjIFRoaXMgaXMgYmFzZWQgb24gdGhlIExpbnV4IGNvbnNvbGUgKHJlbGllcyBvbiB0aGUgY29uc29sZSB0byBwZXJmb3JtIHNvbWUKKyMgb2YgdGhlIGZ1bmN0aW9uYWxpdHkpLCBidXQgZG9lcyBub3QgcmVjb2duaXplIGFzIG1hbnkgY29udHJvbCBzZXF1ZW5jZXMuCisjIFRoZSBwcm9ncmFtIGNvbWVzIGJ1bmRsZWQgd2l0aCBhbiBvbGQgKGNpcmNhIDE5OTgpIGNvcHkgb2YgdGhlIExpbnV4CisjIGNvbnNvbGUgdGVybWluZm8uICBJdCByZWNvZ25pemVzIHNvbWUgbm9uLUFOU0kvVlQxMDAgc2VxdWVuY2VzIHN1Y2ggYXMKKyMJXEUqCW1vdmUgY3Vyc29yIHRvIGhvbWUsIGFzIGFzIFxFW0gKKyMJXEUsWAlzYW1lIGFzIFxFKFgKKyMJXEVFCW1vdmUgY3Vyc29yIHRvIGJlZ2lubmluZyBvZiByb3cKKyMJXEVbeSx4ZglzYW1lIGFzIFxFW3kseEgKKyMKKyMgTm90ZTogVGhlIHN0YXR1cy1saW5lIHN1cHBvcnQgaXMgYnVnZ3kgKGRzbCBkb2VzIG5vdCB3b3JrKS4KK2tvbnxrb24yfGpmYnRlcm18S2FuamkgT04gTGludXggY29uc29sZSwKKwljY2NALCBocywKKwljaXZpc0AsIGNub3JtQCwgY3Z2aXNALCBkc2w9XEVbP0gsIGZsYXNoQCwgZnNsPVxFWz9GLCBpbml0Y0AsCisJaW5pdHBALCBrY2J0QCwgb2NALCBvcD1cRVszNzs0MG0sIHJzMT1cRWMsIHRzbD1cRVs/VCwKKwl1c2U9bGludXgsCisKKyMjIyMgTWFjaAorIworCisjIEZyb206IE1hdHRoZXcgVmVybm9uIDxtY3YyMUBwaWNrLnNlbC5jYW0uYWMudWs+CittYWNofE1hY2ggQ29uc29sZSwKKwlhbSwga20sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVjLCBjcj1eTSwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJa2JzPVwxNzcsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbOSwga2VuZD1cRVtZLCBrZjE9XEVPUCwga2YxMD1cRU9ZLCBrZjI9XEVPUSwKKwlrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9ULCBrZjY9XEVPVSwga2Y3PVxFT1YsIGtmOD1cRU9XLAorCWtmOT1cRU9YLCBraG9tZT1cRVtILCBraWNoMT1cRVtALCBrbGw9XEVbRiwga25wPVxFW1UsCisJa3BwPVxFW1YsIHJldj1cRVs3bSwgcm1zbz1cRVswbSwgcm11bD1cRVsyNG0sIHNncjA9XEVbMG0sCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKK21hY2gtYm9sZHxNYWNoIENvbnNvbGUgd2l0aCBib2xkIGluc3RlYWQgb2YgdW5kZXJsaW5lLAorCXJtdWw9XEVbMG0sIHNtdWw9XEVbMW0sIHVzZT1tYWNoLAorbWFjaC1jb2xvcnxNYWNoIENvbnNvbGUgd2l0aCBBTlNJIGNvbG9yLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwlkaW09XEVbMm0sIGludmlzPVxFWzhtLCBvcD1cRVszNzs0MG0sIHJtc289XEVbMjdtLAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sIHVzZT1tYWNoLAorCisjIEZyb206IE1hcmN1cyBCcmlua21hbm4KKyMgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovaHVyZC9odXJkL2NvbnNvbGUvCisjCisjIENvbW1lbnRzIGluIHRoZSBvcmlnaW5hbCBhcmUgc3VtbWFyaXplZCBoZXJlOgorIworIyBodXJkIHVzZXMgOC1iaXQgY2hhcmFjdGVycyAoa20pLgorIworIyBBbHRob3VnaCBpdCBkb2Vzbid0IGRvIFhPTi9YT0ZGLCB3ZSBkb24ndCB3YW50IHBhZGRpbmcgY2hhcmFjdGVycyAoeG9uKS4KKyMKKyMgUmVnYXJkaW5nIGNvbXBhdGliaWxpdHkgdG8gdnQxMDA6ICBodXJkIGRvZXNuJ3Qgc3BlY2lmeSA8eGVubD4sIGFzIHdlIGRvbid0CisjIGhhdmUgdGhlIGVhdF9uZXdsaW5lX2dsaXRjaC4gIEl0IGRvZXNuJ3Qgc3VwcG9ydCBzZXR0aW5nIG9yIHJlbW92aW5nIHRhYgorIyBzdG9wcyAoaHRzL3RiYykuCisjCisjIGh1cmQgdXNlcyBeSCBpbnN0ZWFkIG9mIFxFW0QgZm9yIGN1YjEsIGFzIG9ubHkgXkggaW1wbGVtZW50cyA8Ync+IGFuZCBpdCBpcworIyBvbmUgYnl0ZSBpbnN0ZWFkIHRocmVlLgorIworIyA8aWNoMT4gaXMgbm90IGluY2x1ZGVkIGJlY2F1c2UgaHVyZCBoYXMgaW5zZXJ0IG1vZGUuCisjCisjIGh1cmQgZG9lc24ndCB1c2UgXkogZm9yIHNjcm9sbGluZywgYmVjYXVzZSB0aGlzIGNvdWxkIHB1dCB0aGluZ3MgaW50byB0aGUKKyMgc2Nyb2xsYmFjayBidWZmZXIuCisjCisjIGdzYm9tL2dyYm9tIGFyZSB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHJlYWwgYm9sZCAobm90IGludGVuc2l0eSBicmlnaHQpIG1vZGUuCisjIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLgorIworIyBUaGUgb3JpZ2luYWwgaGFzIGNvbW1lbnRlZC1vdXQgbmN2LCBidXQgaXMgcmVzdG9yZWQgaGVyZS4KKyMKKyMgUmVhZGluZyB0aGUgc291cmNlLCBSSVMgcmVzZXRzIGNub3JtLCBidXQgbm90IHhtb3VzLgoraHVyZHxUaGUgR05VIEh1cmQgY29uc29sZSBzZXJ2ZXIsCisJYW0sIGJjZSwgYncsIGVvLCBrbSwgbWlyLCBtc2dyLCB4b24sCisJY29sb3JzIzgsIGl0IzgsIG5jdiMxOCwgcGFpcnMjNjQsCisJYWNzYz0rK1wsXCwtLS4uMDBpaWBgYWFmZmdnaGhqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVjLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGN2dmlzPVxFWzM0bCwgZGNoPVxFWyVwMSVkUCwKKwlkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGZsYXNoPVxFZywKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGljaD1cRVslcDElZEAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFW1MsIGluZG49XEVbJXAxJWRTLAorCWludmlzPVxFWzhtLCBrYjI9XEVbRywga2JzPVwxNzcsIGtjYnQ9XEVbWiwga2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZGNoMT1cRVszfiwKKwlrZW5kPVxFWzR+LCBrZjE9XEVPUCwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LAorCWtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LAorCWtmMj1cRU9RLCBrZjIwPVxFWzM0fiwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVbMTV+LAorCWtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc3BkPV5aLCBuZWw9Xk1eSiwgb3A9XEVbMzk7NDltLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVbVCwKKwlyaW49XEVbJXAxJWRULCByaXRtPVxFWzIzbSwgcm1hY3M9XEVbMTBtLCBybWlyPVxFWzRsLAorCXJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwgcnMxPVxFTVxFWz8xMDAwbCwgc2M9XEU3LAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2dyPVxFWzAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTElO20sCisJc2dyMD1cRVswbSwgc2l0bT1cRVszbSwgc21hY3M9XEVbMTFtLCBzbWlyPVxFWzRoLAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sIHZwYT1cRVslaSVwMSVkZCwgZ3Jib209XEVbPjFsLAorCWdzYm9tPVxFWz4xaCwKKworIyMjIyBPU0YgVW5peAorIworCisjIE9TRi8xIDEuMSBTbmFwc2hvdCAyCitwbWNvbnN8cG1jb25zb2xlfFBNQVggY29uc29sZSwKKwlhbSwKKwljb2xzIzEyOCwgbGluZXMjNTcsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1dTE9XkssIGh0PV5JLAorCWluZD1eSiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywKKworIyBTQ08gY29uc29sZSBhbmQgU09TLVN5c2NvbnMgY29uc29sZSBmb3IgMzg2YnNkCisjIChzY29hbnNpOiBoYWQgdW5rbm93biBjYXBhYmlsaXRpZXMKKyMJOkdjPU46R2Q9SzpHaD1NOkdsPUw6R3U9SjpHdj1cMDcyOlwKKyMJOkdDPUU6R0Q9QjpHSD1EOkdMPVw2NDpHVT1BOkdWPVw2MzpHUj1DOgorIwk6RzE9PzpHMj1aOkczPUA6RzQ9WTpHNT07Okc2PUk6Rzc9SDpHOD08OlwKKyMJOkNXPVxFW006TlU9XEVbTjpSRj1cRVtPOlJDPVxFW1A6XAorIwk6V0w9XEVbUzpXUj1cRVtUOkNMPVxFW1U6Q1I9XEVbVjpcCisjIEkgcmVuYW1lZCBHUy9HRS9ITS9FTi9QVS9QRC9SVCBhbmQgYWRkZWQga2xvbmUrc2dyLWR1bWIsIGJhc2VkCisjIG9uIHRoZSA8c21hY3M+PVxFWzEybSAgLS0gZXNyKQorIworIyBrbG9uZStzZ3ItZHVtYiBpcyBhbiBlcnJvciBzaW5jZSB0aGUgYWNzYyBkb2VzIG5vdCBtYXRjaCAtVEQKKyMKKyMgSW4gdGhpcyBkZXNjcmlwdGlvbiBiYXNlZCBvbiBTQ08ncyBrZXlib2FyZChIVykgbWFucGFnZSBsaXN0IG9mIGRlZmF1bHQKKyMgZnVuY3Rpb24ga2V5IHZhbHVlczoKKyMJRjEzLUYyNCBhcmUgc2hpZnRlZCBGMS1GMTIKKyMJRjI1LUYzNiBhcmUgY29udHJvbCBGMS1GMTIKKyMJRjM3LUY0OCBhcmUgc2hpZnQrY29udHJvbCBGMS1GMTIKKyMKKyMgaHBhL3ZwYSB3b3JrIGluIHRoZSBjb25zb2xlLCBidXQgbm90IGluIHNjb3Rlcm06CisjCWhwYT1cRVslcDElZEcsCisjCXZwYT1cRVslcDElZGQsCisjCisjIFNDTydzIHRlcm1pbmZvIHVzZXMKKyMJa0xGVD1cRVtkLAorIwlrUklUPVxFW2MsCisjIHdoaWNoIGRvIG5vdCB3b3JrIChjb25zb2xlIG9yIHNjb3Rlcm0pLgorIworIyBDb25zb2xlIGRvY3VtZW50cyBvbmx5IDMgYXR0cmlidXRlcyBjYW4gYmUgc2V0IHdpdGggU0dSIChzbyB3ZSBkb24ndCB1c2Ugc2dyKS4KK3Njb2Fuc2ktb2xkfFNDTyBFeHRlbmRlZCBBTlNJIHN0YW5kYXJkIGNydCAoNS4wLjUpLAorCU9UYnMsIGFtLCBiY2UsIGVvLCB4b24sCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCBwYWlycyM2NCwKKwlhY3NjPS1cMjMwLlwyMzFcLC4rLzBbNTU2Njc3ODg5OVw6XDo7Ozw8PT0+PkZGR0dISElJSkpLS0xMTU1OTk9PUFBRUVJSU1NUVFVVVlZXV1hYYFwyMDRhMGZ4Z3FoMmpZaz9sWm1AbkVxRHRDdTR2QXdCeDN5c3pye2N9XDAzNH5cMjA3LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLAorCWNpdmlzPVxFWz0xNDsxMkMsIGNsZWFyPVxFW0hcRVsySiwgY25vcm09XEVbPTEwOzEyQywKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBjdnZpcz1cRVs9MDsxMkMsIGRjaD1cRVslcDElZFAsCisJZGNoMT1cRVtQLCBkaXNwYz1cRVs9JXAxJWRnLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVkPVxFW21cRVtKLCBlbD1cRVttXEVbSywgZWwxPVxFWzFLLCBob21lPVxFW0gsIGh0PV5JLAorCWh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwKKwlpbmQ9XEVbUywgaW5kbj1cRVslcDElZFMsIGludmlzPVxFWzhtLCBrYmVnPVxFW0UsIGticz1eSCwKKwlrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XDE3Nywga2VuZD1cRVtGLCBrZjE9XEVbTSwga2YxMD1cRVtWLCBrZjExPVxFW1csCisJa2YxMj1cRVtYLCBrZjEzPVxFW1ksIGtmMTU9XEVbYSwga2YxNj1cRVtiLCBrZjE3PVxFW2MsCisJa2YxOD1cRVtkLCBrZjE5PVxFW2UsIGtmMj1cRVtOLCBrZjIwPVxFW2YsIGtmMjE9XEVbZywKKwlrZjIyPVxFW2gsIGtmMjM9XEVbaSwga2YyND1cRVtqLCBrZjI1PVxFW2ssIGtmMjY9XEVbbCwKKwlrZjI3PVxFW20sIGtmMjg9XEVbbiwga2YyOT1cRVtvLCBrZjM9XEVbTywga2YzMD1cRVtwLAorCWtmMzE9XEVbcSwga2YzMj1cRVtyLCBrZjMzPVxFW3MsIGtmMzQ9XEVbdCwga2YzNT1cRVt1LAorCWtmMzY9XEVbdiwga2YzNz1cRVt3LCBrZjM4PVxFW3gsIGtmMzk9XEVbeSwga2Y0PVxFW1AsCisJa2Y0MD1cRVt6LCBrZjQxPVxFW0AsIGtmNDI9XEVbWywga2Y0Mz1cRVtcXCwga2Y0ND1cRVtdLAorCWtmNDU9XEVbXF4sIGtmNDY9XEVbXywga2Y0Nz1cRVtgLCBrZjQ4PVxFW3ssIGtmNT1cRVtRLAorCWtmNj1cRVtSLCBrZjc9XEVbUywga2Y4PVxFW1QsIGtmOT1cRVtVLCBraG9tZT1cRVtILAorCWtpY2gxPVxFW0wsIGtucD1cRVtHLCBrcHA9XEVbSSwgb3A9XEVbMDszNzs0MG0sIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJpPVxFW1QsIHJpbj1cRVslcDElZFQsIHJtYWNzPVxFWzEwbSwKKwlybWFtPVxFWz83bCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNjPVxFNywKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCBzZ3IwPVxFWzA7MTBtLAorCXNtYWNzPVxFWzEybSwgc21hbT1cRVs/N2gsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCitzY29hbnNpLW5ld3xTQ08gRXh0ZW5kZWQgQU5TSSBzdGFuZGFyZCBjcnQgKDUuMC42KSwKKwlrbSwKKwljaXZpcz1cRVs9MGMsIGNub3JtPVxFWz0xYywgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN2dmlzPVxFWz0yYywgbWdjPVxFWz1yLCBvYz1cRVs1MW0sIG9wPVxFWzUwbSwKKwlyZXA9XEVbJXAxJWQ7JXAyJWRiLCBybW09XEVbPTExTCwKKwlzZ3I9XEVbMCU/JXAxJXAzJXwldDs3JTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTIlO20sCisJc21nYj1cRVs9MTswbSwgc21nYnA9XEVbPTE7JWklcDElZG0sCisJc21nbHA9XEVbPTI7JWklcDElZG0sIHNtZ3I9XEVbPTM7MG0sCisJc21ncnA9XEVbPTM7JWklcDElZG0sIHNtZ3Q9XEVbPTA7MG0sCisJc21ndHA9XEVbPTA7JWklcDElZG0sIHNtbT1cRVs9MTBMLAorCXdpbmQ9XEVbJWklcDElZDslcDIlZDslaSVwMyVkOyVwNCVkciwKKwl1c2U9c2NvYW5zaS1vbGQsCisjIG1ha2UgdGhpcyBlYXN5IHRvIGNoYW5nZS4uLgorc2NvYW5zaXxTQ08gRXh0ZW5kZWQgQU5TSSBzdGFuZGFyZCBjcnQsCisJdXNlPXNjb2Fuc2ktb2xkLAorCisjIFRoaXMgYWN0dWFsbHkgZGVzY3JpYmVzIHRoZSBnZW5lcmljIFNWcjQgZGlzcGxheSBkcml2ZXIgZm9yIEludGVsIGJveGVzLgorIyBUaGUgPGRpbT1cRVsybT4gaXNuJ3QgZG9jdW1lbnRlZCBhbmQgdGhlcmVmb3JlIG1heSBub3QgYmUgcmVsaWFibGUuCisjIEZyb206IEVyaWMgUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiBNb24gTm92IDI3IDE5OjAwOjUzIEVTVCAxOTk1CithdHQ2Mzg2fGF0Mzg2fDM4NmF0fEFUJlQgV0dTIDYzODYgY29uc29sZSwKKwlhbSwgYncsIGVvLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYWNzYz1gYGExZnhncWgwallrP2xabUBuRW9vcHBxRHJyc3N0Q3U0dkF3QngzeXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs9QywKKwljbGVhcj1cRVsySlxFW0gsIGNub3JtPVxFWz0xQywgY3I9Xk0sIGN1Yj1cRVslcDElZEQsCisJY3ViMT1cRVtELCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVsxTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVsxQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbMUwsIGluZD1cRVtTLAorCWluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs5bSwgaXMyPVxFWzA7MTA7MzltLCBrYnM9XkgsCisJa2NidD1eXSwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVtQLCBrZW5kPVxFW1ksIGtmMT1cRU9QLCBrZjEwPVxFT1ksIGtmMTE9XEVPWiwKKwlrZjEyPVxFT0EsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9ULCBrZjY9XEVPVSwKKwlrZjc9XEVPViwga2Y4PVxFT1csIGtmOT1cRU9YLCBraG9tZT1cRVtILCBraWNoMT1cRVtALAorCWtucD1cRVtVLCBrcHA9XEVbViwga3JtaXI9XEUwLCBuZWw9XHJcRVtTLCByYz1cRTgsIHJldj1cRVs3bSwKKwlyaT1cRVtULCByaW49XEVbJXAxJWRULCBybWFjcz1cRVsxMG0sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNjPVxFNywKKwlzZ3I9XEVbMTBtXEVbMCU/JXAxJXAzJXwldDs3JTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDUldDsyJTslPyVwNiV0OzElOyU/JXA5JXQ7MTIlZTsxMCU7JT8lcDcldDs5JTttLAorCXNncjA9XEVbMDsxMG0sIHNtYWNzPVxFWzEybSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbMmcsIHZwYT1cRVslaSVwMSVkZCwgdXNlPWtsb25lK2NvbG9yLAorIyAocGM2MzAwcGx1czogcmVtb3ZlZCAiOktNPS91c3IvbGliL3VhL2ttYXAuczU6IjsgcmVuYW1lZCBCTy9FRS9DSS9DViAtLSBlc3IpCitwYzYzMDBwbHVzfEFUJlQgNjMwMCBwbHVzLAorCU9UYnMsIGFtLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPUMsCisJY2xlYXI9XEVbMkpcRVtILCBjbm9ybT1cRVs9MUMsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRVtBLAorCWRjaDE9XEVbMVAsIGRpbT1cRVsybSwgZGwxPVxFWzFNLCBlZD1cRVswSiwgZWw9XEVbMEssCisJaG9tZT1cRVtILCBodHM9XEVILCBpY2gxPVxFWzFALCBpbDE9XEVbMUwsIGluZD1eSiwKKwlpbnZpcz1cRVs5bSwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMT1cRU9jLCBrZjEwPVxFT3UsIGtmMj1cRU9kLCBrZjM9XEVPZSwKKwlrZjQ9XEVPZiwga2Y1PVxFT2csIGtmNj1cRU9oLCBrZjc9XEVPaSwga2Y4PVxFT2osIGtmOT1cRU9rLAorCW5lbD1eTV5KLCByZXY9XEVbN20sIHJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCisjIEZyb206IEJlbmphbWluIEMuIFcuIFNpdHRsZXIgPGJzaXR0bGVyQG5tdC5lZHU+CisjCisjIEkgaGF2ZSBhIFVOSVggUEMgd2hpY2ggSSB1c2UgYXMgYSB0ZXJtaW5hbCBhdHRhY2hlZCB0byBteSBMaW51eCBQQy4KKyMgVW5mb3J0dW5hdGVseSwgdGhlIFVOSVggUEMgdGVybWluZm8gZW50cnkgdGhhdCBjb21lcyB3aXRoIG5jdXJzZXMKKyMgaXMgYnJva2VuLiBBbGwgdGhlIHNwZWNpYWwga2V5IHNlcXVlbmNlcyBhcmUgYnJva2VuLCBtYWtpbmcgaXQgdW51c2FibGUKKyMgd2l0aCBFbWFjcy4gVGhlIHByb2JsZW0gc3RlbXMgZnJvbSB0aGUgZm9sbG93aW5nOgorIworIyBUaGUgVU5JWCBQQyBoYXMgYSBwbGV0aG9yYSBvZiBrZXlzICgxMDMgb2YgdGhlbSwgYW5kIHRoZXJlJ3Mgbm8gbnVtZXJpYworIyBrZXlwYWQhKSwgbG9hZGFibGUgZm9udHMsIGFuZCBzdHJhbmdlIGhpZ2hsaWdodGluZyBtb2RlcyAoImRpdGhlcmVkIgorIyBoYWxmLWludGVuc2l0eSwgInNtZWFyZWQiIGJvbGQsIGFuZCByZWFsIHN0cmlrZS1vdXQsIGZvciBleGFtcGxlLikgSXQgYWxzbworIyB1c2VzIHJlc2l6YWJsZSB0ZXJtaW5hbCB3aW5kb3dzLCBidXQgdGhlIGJ1bmRsZWQgdGVybWluYWwgcHJvZ3JhbSBhbHdheXMKKyMgdXNlcyBhbiA4MHgyNCB3aW5kb3cgKGFuZCBkb2Vzbid0IHN1cHBvcnQgc2VlbSB0byBzdXBwb3J0IGEgMTMyLWNvbHVtbgorIyBtb2RlLikKKyMKKyMgSElTVE9SWTogVGhlIFVOSVggUEMgd2FzIG9uZSBvZiB0aGUgZmlyc3QgbWFjaGluZXMgd2l0aCBhIEdVSSwgYW5kIHVzZWQgYQorIyBsaWJyYXJ5IHdoaWNoIHdhcyBhIHN1cGVyc2V0IG9mIFNWcjMuNSBjdXJzZXMgKGNhbGxlZCB0YW0sIGZvciAidGVybWluYWwKKyMgYWNjZXNzIG1ldGhvZCIuKSB0YW0gaW5jbHVkZXMgc3VwcG9ydCBmb3IgcmVhbCwgb3ZlcmxhcHBpbmcgd2luZG93cywKKyMgb25zY3JlZW4gZnVuY3Rpb24ga2V5IGxhYmVscywgYW5kIGJpdG1hcCBncmFwaGljcy4gQnV0IHNpbmNlIHRoZSBwcmltYXJ5CisjIHVzZXIgaW50ZXJmYWNlIG9uIHRoZSBVTklYIFBDIHdhcyBhIEdVSSBwcm9ncmFtICh1YSwgZm9yICJ1c2VyCisjIGFzc2lzdGFudCIsKSBhbmQgcmVtb3RlIGFkbWluaXN0cmF0aW9uIHdhcyBjb25zaWRlcmVkIGltcG9ydGFudCBmb3IgdGhlCisjIG1hY2hpbmUsIHRhbSBhbHNvIHN1cHBvcnRlZCBWVDEwMC1jb21wYXRpYmxlIHRlcm1pbmFscyBhdHRhY2hlZCB0byB0aGUKKyMgc2VyaWFsIHBvcnQgb3IgdXNlZCBhY3Jvc3MgdGhlIFN0YXJMYW4gbmV0d29yay4gVG8gc2ltdWxhdGUgdGhlIGV4dHJhIGtleXMKKyMgbm90IHByZXNlbnQgb24gYSBWVDEwMCwgdXNlcnMgY291bGQgcHJlc3MgRVNDIGFuZCBhIHR3by1sZXR0ZXIgc2VxdWVuY2UsCisjIHN1Y2ggYXMgdSBkIChVbmRvKSBvciBVIEQgKFNoaWZ0LVVuZG8uKSBUaGVzZSB0d28tbGV0dGVyIHNlcXVlbmNlcywKKyMgaG93ZXZlciwgd2VyZSBub3QgdGhlIHNhbWUgYXMgdGhvc2Ugc2VudCBieSB0aGUgYWN0dWFsIFVuZG8ga2V5LiBUaGUKKyMgYWN0dWFsIFVuZG8ga2V5IHNlbmRzIEVTQyAwIHMgdW5zaGlmdGVkLCBhbmQgRVNDIDAgUyBzaGlmdGVkLCBmb3IgZXhhbXBsZS4KKyMgKElmIHlvdSdyZSBpbnRlcmVzdGVkIGluIGFkZGluZyBzb21lIG9mIHRoZSB0YW0gY2FsbHMgdG8gbmN1cnNlcywgYnR3LCBJCisjIGhhdmUgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiBhbmQgc2V2ZXJhbCBwcm9ncmFtcyB3aGljaCB1c2UgdGFtLiBJdCBhbHNvCisjIHVzZWQgYW4gZXh0ZW5kZWQgdGVybWluZm8gZm9ybWF0IHRvIGRlc2NyaWJlIGtleSBzZXF1ZW5jZXMsIHNwZWNpYWwKKyMgaGlnaGxpZ2h0aW5nIG1vZGVzLCBldGMuKQorIworIyBLRVlTOiBUaGlzIG1lYW5zIHRoYXQgbmN1cnNlcyB3b3VsZCBxdWl0ZSBwYWluZnVsIG9uIHRoZSBVTklYIFBDLCBzaW5jZQorIyB0aGVyZSBhcmUgdHdvIHNlcXVlbmNlcyBmb3IgZXZlcnkga2V5LW1vZGlmaWVyIGNvbWJpbmF0aW9uIChsb2NhbCBrZXlib2FyZAorIyBzZXF1ZW5jZSBhbmQgcmVtb3RlICJWVDEwMCIgc2VxdWVuY2UuKSBCdXQgSSBkb3VidCBtYW55IHBlb3BsZSBhcmUgdHJ5aW5nCisjIHRvIHVzZSBuY3Vyc2VzIG9uIHRoZSBVTklYIFBDLCBzaW5jZSBuY3Vyc2VzIGRvZXNuJ3QgcHJvcGVybHkgaGFuZGxlIHRoZQorIyBHVUkuIFVuZm9ydHVuYXRlbHksIHRoZSB0ZXJtaW5mbyBlbnRyeSAoYW5kIHRoZSB0ZXJtY2FwLCB0b28sIEkgcHJlc3VtZSkKKyMgc2VlbSB0byBoYXZlIGJlZW4gYnVpbHQgZnJvbSB0aGUgbWFudWFsIGRlc2NyaWJpbmcgdGhlIFZUMTAwIHNlcXVlbmNlcy4KKyMgVGhpcyBtZWFucyBpdCBkb2Vzbid0IHdvcmsgZm9yIGEgcmVhbCBsaXZlIFVOSVggUEMuCisjCisjIEZPTlRTOiBUaGUgVU5JWCBQQyBhbHNvIGhhcyBhIHN0cmFuZ2UgaW50ZXJwcmV0YXRpb24gb2YgImFsdGVybmF0ZQorIyBjaGFyYWN0ZXIgc2V0Ii4gUmF0aGVyIHRoYW4gdGhlIFZUMTAwIGdyYXBoaWNzIHlvdSBtaWdodCBleHBlY3QsIGl0IGFsbG93cworIyB1cCB0byA4IGN1c3RvbSBmb250cyB0byBiZSBsb2FkZWQgYXQgYW55IGdpdmVuIHRpbWUuIFRoaXMgbWVhbnMgdGhhdAorIyBwcm9ncmFtcyBleHBlY3RpbmcgVlQxMDAgZ3JhcGhpY3Mgd2lsbCB1c3VhbGx5IGJlIGRpc2FwcG9pbnRlZC4gRm9yIHRoaXMKKyMgcmVhc29uIEkgaGF2ZSBkaXNhYmxlZCB0aGUgc21hY3Mvcm1hY3Mgc2VxdWVuY2VzLCBidXQgdGhleSBjb3VsZCBlYXNpbHkgYmUKKyMgcmUtZW5hYmxlZC4gSGVyZSBhcmUgdGhlIHJlbGV2YW50IGNvbnRyb2wgc2VxdWVuY2VzIChmcm9tIHRoZSBFU0NBUEUoNykKKyMgbWFucGFnZSksIHNob3VsZCB5b3Ugd2lzaCB0byBkbyBzbzoKKyMKKyMgU0dSMTAgLSBTZWxlY3QgZm9udCAwIC0gRVNDIFsgMTAgbSBvciBTTworIyBTR1IxMSAtIFNlbGVjdCBmb250IDEgLSBFU0MgWyAxMSBtIG9yIFNJCisjIFNHUjEyIC0gU2VsZWN0IGZvbnQgMiAtIEVTQyBbIDEyIG0KKyMgLi4uIChldGMuKQorIyBTR1IxNyAtIFNlbGVjdCBmb250IDcgLSBFU0MgWyAxNyBtCisjCisjIEdyYXBoaWNzIGZvciBsaW5lIGRyYXdpbmcgYXJlIG5vdCByZWxpYWJseSBmb3VuZCBhdCAqYW55KiBjaGFyYWN0ZXIKKyMgbG9jYXRpb24gYmVjYXVzZSB0aGUgVU5JWCBQQyBoYXMgZHluYW1pY2FsbHkgcmVsb2FkYWJsZSBmb250cy4gSSB1c2UgZm9udAorIyAwIGZvciByZWd1bGFyIHRleHQgYW5kIGZvbnQgMSBmb3IgaXRhbGljcywgYnV0IHRoaXMgaXMgYnkgbm8gbWVhbnMKKyMgdW5pdmVyc2FsLiBTbyBBU0NJSSBsaW5lIGRyYXdpbmcgaXMgaW4gb3JkZXIgaWYgc21hY3Mvcm1hY3MgYXJlIGVuYWJsZWQuCisjCisjIE1JU0M6IFRoZSBjdXJzb3IgdmlzaWJsZS9jdXJzb3IgaW52aXNpYmxlIHNlcXVlbmNlcyB3ZXJlIHN3YXBwZWQgaW4gdGhlCisjIGRpc3RyaWJ1dGVkIHRlcm1pbmZvLgorIworIyBUbyBhbWVsaW9yYXRlIHRoZXNlIHByb2JsZW1zIChhbmQgZml4IGEgZmV3IGhpZ2hsaWdodGluZyBidWdzKSBJIHJld3JvdGUKKyMgdGhlIFVOSVggUEMgdGVybWluZm8gZW50cnkuIFRoZSBtb2RpZmllZCB2ZXJzaW9uIHdvcmtzIGdyZWF0IHdpdGggTHlueCwKKyMgRW1hY3MsIGFuZCBYRW1hY3MgcnVubmluZyBvbiBteSBMaW51eCBQQyBhbmQgZGlzcGxheWluZyBvbiB0aGUgVU5JWCBQQworIyBhdHRhY2hlZCBieSBzZXJpYWwgY2FibGUuIEluIEVtYWNzLCBldmVuIHRoZSBVbmRvIGtleSB3b3JrcywgYW5kIG1hbnkKKyMgYXBwbGljYXRpb25zIGNhbiBub3cgdXNlIHRoZSBGMS1GOCBrZXlzLgorIworIyBlc3IncyBub3RlczoKKyMJVGVybWluZm8gZW50cnkgZm9yIHRoZSBBVCZUIFVuaXggUEMgNzMwMAorIwlmcm9tIGVzY2FwZSg3KSBpbiBVbml4IFBDIDczMDAgTWFudWFsLgorIwlTb21ld2hhdCBzaW1pbGFyIHRvIGEgdnQxMDAtYW0gKGJ1dCBkaWZmZXJlbnQgZW5vdWdoCisjCXRvIHJlZG8gdGhpcyBmcm9tIHNjcmF0Y2guKQorIworIwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCSoKKyMJKiAgICAgICAgICAgRk9OVCBMT0FESU5HIFBST0dSQU0gRk9SIFRIRSBVTklYIFBDCisjCSoKKyMJKiAgICAgVGhpcyByb3V0aW5lIGxvYWRzIGEgZm9udCBkZWZpbmVkIGluIHRoZSBmaWxlIEFMVEZPTlQKKyMJKiAgICAgaW50byBmb250IG1lbW9yeSBzbG90ICMxLiAgT25jZSB0aGUgZm9udCBoYXMgYmVlbiBsb2FkZWQsCisjCSogICAgIGl0IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIGNoYXJhY3RlciBzZXQuCisjCSoKKyMJKiAgICAgVGhlIGNhbGwgdG8gaW9jdGwgd2l0aCB0aGUgYXJndW1lbnQgV0lPQ0xGT05UIGlzIHRoZSBrZXkKKyMJKiAgICAgdG8gdGhpcyByb3V0aW5lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB3aW5kb3coNykgaW4KKyMJKiAgICAgdGhlIFBDIDczMDAgZG9jdW1lbnRhdGlvbi4KKyMJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIwkjaW5jbHVkZSA8c3RyaW5nLmg+CQkvKiBuZWVkZWQgZm9yIHN0cmNweSBjYWxsICovCisjCSNpbmNsdWRlIDxzeXMvd2luZG93Lmg+ICAgICAgICAgLyogbmVlZGVkIGZvciBpb2N0bCBjYWxsICovCisjCSNkZWZpbmUgRk5TSVpFCTYwCQkvKiBmb250IG5hbWUgc2l6ZSAqLworIwkjZGVmaW5lIEFMVEZPTlQgICIvdXNyL2xpYi93Zm9udC9zcGVjaWFsLjguZnQiICAvKiBmb250IGZpbGUgKi8KKyMJLyoKKyMJKiAgICAgVGhlIGZpbGUgL3Vzci9saWIvd2ZvbnQvc3BlY2lhbC44LmZ0IGNvbWVzIHdpdGggdGhlCisjCSogICAgIHN0YW5kYXJkIFBDIHNvZnR3YXJlLiAgSXQgZGVmaW5lcyBhIGdyYXBoaWNzIGNoYXJhY3RlciBzZXQKKyMJKiAgICAgc2ltaWxhciB0byB0aGF0IG9mIHRoZSBUZWxldHlwZSA1NDI1IHRlcm1pbmFsLiAgVG8gdmlldworIwkqICAgICB0aGlzIG9yIG90aGVyIGZvbnRzIGluIC91c3IvbGliL3dmb250LCB1c2UgdGhlIGNvbW1hbmQKKyMJKiAgICAgY2ZvbnQgPGZpbGVuYW1lPi4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGZvbnRzIHNlZQorIwkqICAgICBjZm9udCgxKSBpbiB0aGUgUEMgNzMwMCBkb2N1bWVudGF0aW9uLgorIwkqLworIworIwlzdHJ1Y3QgYWx0ZmRhdGEgCS8qIHN0cnVjdHVyZSBmb3IgYWx0IGZvbnQgZGF0YSAqLworIwl7CisjCXNob3J0CWFsdGZfc2xvdDsJCS8qIG1lbW9yeSBzbG90IG51bWJlciAqLworIwljaGFyCWFsdGZfbmFtZVtGTlNJWkVdOwkvKiBmb250IG5hbWUgKGZpbGUgbmFtZSkgKi8KKyMJfTsKKyMJbGRmb250KCkKKyMJeworIwkJaW50IHdkOwkJLyogd2luZG93IGluIHdoaWNoIGFsdGZvbnQgd2lsbCBiZSAqLworIwkJc3RydWN0IGFsdGZkYXRhIGFsdGY7CisjCQlhbHRmLmFsdGZfc2xvdD0xOworIwkJc3RyY3B5KGFsdGYuYWx0Zl9uYW1lLEFMVEZPTlQpOworIwkJZm9yICh3ZCA9MTsgd2QgPCAxMjsgd2QrKykgeworIwkJICAgICBpb2N0bCh3ZCwgV0lPQ0xGT05ULCZhbHRmKTsKKyMJICAgICAgICB9CisjCX0KKyMKKyMgKGF0dDczMDA6IGFkZGVkIDxjaXZpcz4vPGNub3JtPi88aWNoMT4vPGludmlzPiBmcm9tIHRoZSBCU0RJIGVudHJ5LAorIyB0aGV5J3JlIGNvbmZpcm1lZCBieSB0aGUgbWFuIHBhZ2UgZm9yIHRoZSBTeXN0ZW0gViBkaXNwbGF5LS0tZXNyKQorIworYXR0NzMwMHx1bml4cGN8cGM3MzAwfDNiMXxzNHxBVCZUIFVOSVggUEMgTW9kZWwgNzMwMCwKKwlhbSwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgYmxpbms9XEVbOW0sIGJvbGQ9XEVbMW0sIGNidD1cRV5JLCBjaXZpcz1cRVs9MUMsCisJY2xlYXI9XEVbMkpcRVtILCBjbm9ybT1cRVs9MEMsIGNyPV5NLCBjdWI9XEVbJXAxJWRELAorCWN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVkPVxFWzBKLCBlbD1cRVswSywgaG9tZT1cRVtILCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBpbnZpcz1cRVs5bSwgaXMxPVwwMTdcRVs9MXcsIGtCRUc9XEVOQiwKKwlrQ0FOPVxFT1csIGtDUFk9XEVORCwga0NSVD1cRU9OLCBrREM9XEVORiwga0RMPVxFTkUsCisJa0VORD1cRU5OLCBrRU9MPVxFT0EsIGtGTkQ9XEVPWCwga0hMUD1cRU9NLCBrSE9NPVxFTk0sCisJa0lDPVxFTkosIGtMRlQ9XEVOSywga01PVj1cRU5DLCBrTlhUPVxFTkgsIGtPUFQ9XEVPUiwKKwlrUFJWPVxFTkcsIGtSRE89XEVPVCwga1JJVD1cRU5MLCBrUlBMPVxFT1ksIGtTQVY9XEVPTywKKwlrVU5EPVxFT1MsIGtiZWc9XEVOYiwga2JzPV5ILCBrY2FuPVxFT3csIGtjYnQ9XEVbWiwKKwlrY2xvPVxFT1YsIGtjbHI9XEVbSiwga2NtZD1cRU91LCBrY3B5PVxFTmQsIGtjcnQ9XEVPbiwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRU5mLAorCWtlZD1cRVtKLCBrZWw9XEVPYSwga2VuZD1cRTAsIGtleHQ9XEVPaywga2YxPVxFT2MsIGtmMj1cRU9kLAorCWtmMz1cRU9lLCBrZjQ9XEVPZiwga2Y1PVxFT2csIGtmNj1cRU9oLCBrZjc9XEVPaSwga2Y4PVxFT2osCisJa2ZuZD1cRU94LCBraGxwPVxFT20sIGtob21lPVxFW0gsIGtpY2gxPVxFTmosIGtpbmQ9XEVbQiwKKwlrbW92PVxFTmMsIGttcms9XEVOaSwga25wPVxFW1UsIGtueHQ9XEVOaCwga29wbj1cRU92LAorCWtvcHQ9XEVPciwga3BwPVxFW1YsIGtwcnQ9XEVPeiwga3Bydj1cRU5nLCBrcmRvPVxFT3QsCisJa3JlZj1cRU9iLCBrcmZyPVxFTmEsIGtyaT1cRVtBLCBrcnBsPVxFT3ksIGtyc3Q9XEVPQiwKKwlrc2F2PVxFT28sIGtzbHQ9XEVOSSwga3VuZD1cRU9zLCBuZWw9XEVFLCByZXY9XEVbN20sIHJpPVxFTSwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVswOzEwbSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorCisjIFNlbnQgYnkgU3RlZmFuIFN0YXBlbGJlcmcgPHN0ZWZhbkByZW50LWEtZ3VydS5kZT4sIDI0IEZlYiAxOTk3LCB0aGlzIGlzCisjIGZyb20gU0dJJ3MgdGVybWluZm8gZGF0YWJhc2UuICBTR0kncyBlbnRyeSBzaG93cyBGOS1GMTIgd2l0aCB0aGUgY29kZXMKKyMgZm9yIHRoZSBhcHBsaWNhdGlvbiBrZXlwYWQgbW9kZS4gIFdlIGhhdmUgYWRkZWQgaXJpcy1hbnNpLWFwIHJhdGhlciB0aGFuCisjIGNoYW5nZSB0aGUgb3JpZ2luYWwgdG8ga2V5cGFkIG1vZGUuCisjCisjIChpcmlzLWFuc2k6IGFkZGVkIHJtYW0vc21hbSBiYXNlZCBvbiBpbml0IHN0cmluZyAtLSBlc3IpCisjCisjIFRoaXMgZW50cnksIGFuZCB0aG9zZSBkZXJpdmVkIGZyb20gaXQsIGlzIHVzZWQgaW4geHdzaCAoYWxzbyBrbm93biBhcworIyB3aW50ZXJtKS4gIFNvbWUgY2FwYWJpbGl0aWVzIHRoYXQgZG8gbm90IGZpdCBpbnRvIHRoZSB0ZXJtaW5mbyBtb2RlbAorIyBpbmNsdWRlIHRoZSBzaGlmdC0gYW5kIGNvbnRyb2wtZnVuY3Rpb25rZXlzOgorIworIyBGMS1GMTIgZ2VuZXJhdGUgZGlmZmVyZW50IGNvZGVzIHdoZW4gc2hpZnQgb3IgY29udHJvbCBtb2RpZmllcnMgYXJlIHVzZWQuCisjIEZvciBleGFtcGxlOgorIwlGMSAgICAgIAlcRVswMDFxCisjCXNoaWZ0IEYxCVxFWzAxM3EKKyMJY29udHJvbC1GMQlcRVswMjVxCisjCisjIEluIGFwcGxpY2F0aW9uIGtleXBhZCBtb2RlLCBGOS1GMTIgZ2VuZXJhdGUgY29kZXMgbGlrZSB2dDEwMCBQRjEtUEY0LCBpLmUuLAorIyBcRU9QIHRvIFxFT1MuICBUaGUgc2hpZnRlZCBhbmQgY29udHJvbCBtb2RpZmllcnMgc3RpbGwgZG8gdGhlIHNhbWUgdGhpbmcuCisjCisjIFRoZSBjdXJzb3Iga2V5cyBhbHNvIGhhdmUgZGlmZmVyZW50IGNvZGVzOgorIwljb250cm9sLXVwCVxFWzE2MnEKKyMJY29udHJvbC1kb3duCVxFWzE2NXEKKyMJY29udHJvbC1sZWZ0CVxFWzE1OXEKKyMJY29udHJvbC1yaWdodAlcRVsxNjhxCisjCisjCXNoaWZ0LXVwCVxFWzE2MXEKKyMJc2hpZnQtZG93bglcRVsxNjRxCisjCXNoaWZ0LWxlZnQJXEVbMTU4cQorIwlzaGlmdC1yaWdodAlcRVsxNjdxCisjCisjCWNvbnRyb2wtdGFiCVxbMDcycQorIworaXJpcy1hbnNpfGlyaXMtYW5zaS1uZXR8SVJJUyBlbXVsYXRpbmcgNDAgbGluZSBBTlNJIHRlcm1pbmFsIChhbG1vc3QgVlQxMDApLAorCWFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzQwLAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFWzJKLAorCWNub3JtPVxFWzkveVxFWzEyL3lcRVs9NmwsIGNyPV5NLCBjdWI9XEVbJXAxJWRELAorCWN1YjE9XEVbRCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsIGN2dmlzPVxFWzEwL3lcRVs9MWhcRVs9MmxcRVs9NmgsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsCisJaXMyPVxFWz8xbFxFPlxFWz83aFxFWzEwMGdcRVswbVxFN1xFW3JcRTgsIGtEQz1cRVtQLAorCWtFTkQ9XEVbMTQ3cSwga0hPTT1cRVsxNDNxLCBrTEZUPVxFWzE1OHEsIGtQUlQ9XEVbMjEwcSwKKwlrUklUPVxFWzE2N3EsIGtTUEQ9XEVbMjE4cSwga2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XDE3NywKKwlrZW5kPVxFWzE0NnEsIGtlbnQ9Xk0sIGtmMT1cRVswMDFxLCBrZjEwPVxFWzAxMHEsCisJa2YxMT1cRVswMTFxLCBrZjEyPVxFWzAxMnEsIGtmMj1cRVswMDJxLCBrZjM9XEVbMDAzcSwKKwlrZjQ9XEVbMDA0cSwga2Y1PVxFWzAwNXEsIGtmNj1cRVswMDZxLCBrZjc9XEVbMDA3cSwKKwlrZjg9XEVbMDA4cSwga2Y5PVxFWzAwOXEsIGtob21lPVxFW0gsIGtpY2gxPVxFWzEzOXEsCisJa25wPVxFWzE1NHEsIGtwcD1cRVsxNTBxLCBrcHJ0PVxFWzIwOXEsIGtybWlyPVxFWzE0NnEsCisJa3NwZD1cRVsyMTdxLCBuZWw9XEVFLCBwZmtleT1cRVAxMDE7JXAxJWQueSVwMiVzXEVcXCwKKwlyYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFtPVxFWz83bCwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2M9XEU3LCBzZ3IwPVxFW20sIHNtYW09XEVbPzdoLCBzbXNvPVxFWzE7N20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLAoraXJpcy1hbnNpLWFwfElSSVMgQU5TSSBpbiBhcHBsaWNhdGlvbi1rZXlwYWQgbW9kZSwKKwlpczI9XEVbPzFsXEU9XEVbPzdoLCBrZW50PVxFT00sIGtmMTA9XEVbMDEwcSwKKwlrZjExPVxFWzAxMXEsIGtmMTI9XEVbMDEycSwga2Y5PVxFWzAwOXEsIHVzZT1pcmlzLWFuc2ksCisKKyMgRnJvbSB0aGUgbWFuLXBhZ2UsIHRoaXMgaXMgYSBxdWFzaS12dDEwMCBlbXVsYXRvciB0aGF0IHJ1bnMgb24gU0dJJ3MgSVJJWAorIyAoVC5EaWNrZXkgOTgvMS8yNCkKK2lyaXMtY29sb3J8eHdzaHxJUklYIEFOU0kgd2l0aCBjb2xvciwKKwluY3YjMzMsCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBkY2g9XEVbJXAxJWRQLCBkaW09XEVbMm0sCisJZWNoPVxFWyVwMSVkWCwgaWNoPVxFWyVwMSVkQCwgcmM9XEU4LCByaXRtPVxFWzIzbSwKKwlybXVsPVxFWzI0bSwgcnMxPVxFYywKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2l0bT1cRVszbSwgdXNlPXZ0MTAwK2VucSwgdXNlPWtsb25lK2NvbG9yLAorCXVzZT1pcmlzLWFuc2ktYXAsCisKKyMgVGhlIGZvbGxvd2luZyBpcyBhIHZlcnNpb24gb2YgdGhlIGlibS1wYyBlbnRyeSBkaXN0cmlidXRlZCB3aXRoIFBDL0lYLAorIyAoSW50ZXJhY3RpdmUgU3lzdGVtcycgU3lzdGVtIDMgZm9yIHRoZSBCaWcgQmx1ZSksIG1vZGlmaWVkIGJ5IFJpY2hhcmQKKyMgTWNJbnRvc2ggYXQgVUNCL0NTTS4gIFRoZSA6cHQ6IGFuZCA6dWM6IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIG9yaWdpbmFsLAorIyAodGhlIGZvcm1lciBpcyB1bnRydWUsIGFuZCB0aGUgbGF0dGVyIGZhaWxlZCB1bmRlciBVQ0IvbWFuKTsgc3RhbmRvdXQgYW5kCisjIHVuZGVybGluZSBtb2RlcyBoYXZlIGJlZW4gYWRkZWQuICBOb3RlOiB0aGlzIGVudHJ5IGRlc2NyaWJlcyB0aGUgIm5hdGl2ZSIKKyMgY2FwYWJpbGl0aWVzIG9mIHRoZSBQQyBtb25vY2hyb21lIGRpc3BsYXksIHdpdGhvdXQgQU5ZIGVtdWxhdGlvbjsgbW9zdAorIyBjb21tdW5pY2F0aW9ucyBwYWNrYWdlcyAoYnV0IE5PVCBQQy9JWCBjb25uZWN0KSBkbyBzb21lIGtpbmQgb2YgZW11bGF0aW9uLgorcGNpeHxQQy9JWCBjb25zb2xlLAorCWFtLCBidywgZW8sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEVjLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRVtBLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNncjA9XEVbbSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorCisjIChpYm1wY3g6IHRoaXMgZW50cnkgdXNlZCB0byBiZSBrbm93biBhcyBpYm14LgorIyBJdCBmb3JtZXJseSBpbmNsdWRlZCB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXM6CisjCTpHQz1iOkdMPXY6R1I9dDpSVD1eSjpcCisjCTpHSD1cRVsxOTZnOkdWPVxFWzE3OWc6XAorIwk6R1U9XEVbMTkzZzpHRD1cRVsxOTRnOlwKKyMJOkcxPVxFWzE5MWc6RzI9XEVbMjE4ZzpHMz1cRVsxOTJnOkc0PVxFWzIxN2c6XAorIwk6Q1c9XEVbRTpOVT1cRVtGOlJGPVxFW0c6UkM9XEVbSDpcCisjCTpXTD1cRVtLOldSPVxFW0w6Q0w9XEVbTTpDUj1cRVtOOlwKKyMgSSByZW5hbWVkIEdTL0dFL1dML1dSL0NML0NSL1BVL1BEL0hNL0VOOyBhbHNvLCByZW1vdmVkIGEgZHVwbGljYXRlCisjICI6a2g9XEVbWToiLiAgQWRkZWQgSUJNLVBDIGZvcm1zIGNoYXJhY3RlcnMgYW5kIGhpZ2hsaWdodHMsIHRoZXkgbWF0Y2gKKyMgd2hhdCB3YXMgdGhlcmUgYmVmb3JlLiAtLSBlc3IpCitpYm1wY3h8eGVuaXh8aWJteHxJQk0gUEMgeGVuaXggY29uc29sZSBkaXNwbGF5LAorCU9UYnMsIGFtLCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWNsZWFyPV5MLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBpY2gxPVxFW0AsIGlsMT1cRVtMLCBrYnM9XkgsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2VuZD1cRVtkLAorCWtmMT1cRVtLLCBrZjI9XEVbTCwga2YzPVxFW00sIGtmND1cRVtOLCBraG9tZT1cRVtZLCBrbnA9XEVbZSwKKwlrcHA9XEVbWiwgdXNlPWtsb25lK2FjcywgdXNlPWtsb25lK3NncjgsCisKKyMjIyMgUU5YCisjCisKKyMgUU5YIDQuMCBDb25zb2xlCisjIE1pY2hhZWwncyBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgZW50cnkgaGFkIDxhbUA+LCA8c21jdXA9XEVpPiwKKyMgPHJtY3VwPVxFaFxFUj47IHRoaXMgd2FzIHNvIHRlcm1pbmZvIGFwcGxpY2F0aW9ucyBjb3VsZCB3cml0ZSB0aGUgbG93ZXIKKyMgcmlnaHQgY29ybmVyIHdpdGhvdXQgdHJpZ2dlcmluZyBhIHNjcm9sbC4gIFRoZSBuY3Vyc2VzIHRlcm1pbmZvIGxpYnJhcnkgY2FuCisjIGhhbmRsZSB0aGlzIGNhc2Ugd2l0aCB0aGUgPGljaDE+IGNhcGFiaWxpdHksIGFuZCBwcmVmZXJzIDxhbT4gZm9yIGJldHRlcgorIyBvcHRpbWl6YXRpb24uICBCdWc6IFRoZSA8b3A+IGNhcGFiaWxpdHkgcmVzZXRzIGF0dHJpYnV0ZXMuCisjIEZyb206IE1pY2hhZWwgSHVudGVyIDxtcGh1bnRlckBxbnguY29tPiAzMCBKdWwgMTk5NgorIyAocmVtb3ZlZDogPHNncj0lPyVwMSV0XEU8JTslcDIldFxFWyU7JXAzJXRcRSglOyVwNCV0XEV7JTslcDYldFxFPCU7LD4pCitxbnh8cW54NHxxbnggY29uc29sZSwKKwlkYWlzeSwga20sIG1pciwgbXNnciwgeGhwYSwgeHQsCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzQsIGxpbmVzIzI1LCBuY3YjMywgcGFpcnMjOCwKKwlhY3NjPU9cMzMzYVwyNjFqXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1b1wzMzdxXDMwNHNcMzM0dFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2MywKKwliZWw9XkcsIGJsaW5rPVxFeywgYm9sZD1cRTwsIGNpdmlzPVxFeTAsIGNsZWFyPVxFSFxFSiwKKwljbm9ybT1cRXkxLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGN2dmlzPVxFeTIsCisJZGNoMT1cRWYsIGRsMT1cRUYsIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGljaDE9XEVlLAorCWlsMT1cRUUsIGluZD1eSiwga0JFRz1cMzc3XDM1Niwga0NBTj1cMzc3XDI2MywKKwlrQ01EPVwzNzdcMjY3LCBrQ1BZPVwzNzdcMzYzLCBrQ1JUPVwzNzdcMzY0LAorCWtETD1cMzc3XDM2Niwga0VORD1cMzc3XDMwMSwga0VPTD1cMzc3XDMxMSwKKwlrRVhUPVwzNzdcMzY3LCBrRk5EPVwzNzdcMzcwLCBrSExQPVwzNzdcMzcxLAorCWtIT009XDM3N1wyNjAsIGtJQz1cMzc3XDM0MCwga0xGVD1cMzc3XDI2NCwKKwlrTU9WPVwzNzdcMzA2LCBrTVNHPVwzNzdcMzA0LCBrTlhUPVwzNzdcMjcyLAorCWtPUFQ9XDM3N1wzNzIsIGtQUlQ9XDM3N1wyNzUsIGtQUlY9XDM3N1wyNjIsCisJa1JETz1cMzc3XDMxNSwga1JFUz1cMzc3XDM3NCwga1JJVD1cMzc3XDI2NiwKKwlrUlBMPVwzNzdcMzczLCBrU0FWPVwzNzdcMzA3LCBrU1BEPVwzNzdcMzAzLAorCWtVTkQ9XDM3N1wzMzcsIGtiZWc9XDM3N1wzMDAsIGtjYW49XDM3N1wyNDMsIGtjYnQ9XDM3N1wwLAorCWtjbG89XDM3N1wzNDMsIGtjbHI9XDM3N1wzNDEsIGtjbWQ9XDM3N1wyNDUsCisJa2NweT1cMzc3XDI2NSwga2NydD1cMzc3XDMwNSwga2N0YWI9XDM3N1wyMzcsCisJa2N1YjE9XDM3N1wyNDQsIGtjdWQxPVwzNzdcMjUxLCBrY3VmMT1cMzc3XDI0NiwKKwlrY3V1MT1cMzc3XDI0MSwga2RjaDE9XDM3N1wyNTQsIGtkbDE9XDM3N1wyNzQsCisJa2VkPVwzNzdcMzE0LCBrZWw9XDM3N1wzMTAsIGtlbmQ9XDM3N1wyNTAsIGtlbnQ9XDM3N1wzMjAsCisJa2V4dD1cMzc3XDI3MCwga2YxPVwzNzdcMjAxLCBrZjEwPVwzNzdcMjEyLAorCWtmMTE9XDM3N1wyNTYsIGtmMTI9XDM3N1wyNTcsIGtmMTM9XDM3N1wyMTMsCisJa2YxND1cMzc3XDIxNCwga2YxNT1cMzc3XDIxNSwga2YxNj1cMzc3XDIxNiwKKwlrZjE3PVwzNzdcMjE3LCBrZjE4PVwzNzdcMjIwLCBrZjE5PVwzNzdcMjIxLAorCWtmMj1cMzc3XDIwMiwga2YyMD1cMzc3XDIyMiwga2YyMT1cMzc3XDIyMywKKwlrZjIyPVwzNzdcMjI0LCBrZjIzPVwzNzdcMzMzLCBrZjI0PVwzNzdcMzM0LAorCWtmMjU9XDM3N1wyMjUsIGtmMjY9XDM3N1wyMjYsIGtmMjc9XDM3N1wyMjcsCisJa2YyOD1cMzc3XDIzMCwga2YyOT1cMzc3XDIzMSwga2YzPVwzNzdcMjAzLAorCWtmMzA9XDM3N1wyMzIsIGtmMzE9XDM3N1wyMzMsIGtmMzI9XDM3N1wyMzQsCisJa2YzMz1cMzc3XDIzNSwga2YzND1cMzc3XDIzNiwga2YzNT1cMzc3XDI3NiwKKwlrZjM2PVwzNzdcMjc3LCBrZjM3PVwzNzdcMzIxLCBrZjM4PVwzNzdcMzIyLAorCWtmMzk9XDM3N1wzMjMsIGtmND1cMzc3XDIwNCwga2Y0MD1cMzc3XDMyNCwKKwlrZjQxPVwzNzdcMzI1LCBrZjQyPVwzNzdcMzI2LCBrZjQzPVwzNzdcMzI3LAorCWtmNDQ9XDM3N1wzMzAsIGtmNDU9XDM3N1wzMzEsIGtmNDY9XDM3N1wzMzIsCisJa2Y0Nz1cMzc3XDMxNiwga2Y0OD1cMzc3XDMxNywga2Y1PVwzNzdcMjA1LCBrZjY9XDM3N1wyMDYsCisJa2Y3PVwzNzdcMjA3LCBrZjg9XDM3N1wyMTAsIGtmOT1cMzc3XDIxMSwga2ZuZD1cMzc3XDM0NiwKKwlraGxwPVwzNzdcMzUwLCBraG9tZT1cMzc3XDI0MCwga2h0cz1cMzc3XDM0MiwKKwlraWNoMT1cMzc3XDI1Mywga2lsMT1cMzc3XDI3Mywga2luZD1cMzc3XDI2MSwKKwlrbW92PVwzNzdcMzUxLCBrbXJrPVwzNzdcMzU1LCBrbXNnPVwzNzdcMzQ1LAorCWtucD1cMzc3XDI1Miwga254dD1cMzc3XDMxMiwga29wbj1cMzc3XDM1NywKKwlrb3B0PVwzNzdcMzUzLCBrcHA9XDM3N1wyNDIsIGtwcnQ9XDM3N1wyNTUsCisJa3Bydj1cMzc3XDMwMiwga3Jkbz1cMzc3XDMzNiwga3JlZj1cMzc3XDM1NCwKKwlrcmVzPVwzNzdcMzYwLCBrcmZyPVwzNzdcMzQ3LCBrcmk9XDM3N1wyNzEsCisJa3JtaXI9XDM3N1wzMTMsIGtycGw9XDM3N1wzNjIsIGtyc3Q9XDM3N1wzNTIsCisJa3Nhdj1cMzc3XDM2MSwga3NsdD1cMzc3XDI0Nywga3NwZD1cMzc3XDMzNSwKKwlrdGJjPVwzNzdcMzQ0LCBrdW5kPVwzNzdcMzY1LCBtdnBhPVxFISVwMSUwMmQsIG9wPVxFUiwKKwlyZXA9XEVnJXAyJXszMn0lKyVjJXAxJWMsIHJldj1cRSgsIHJpPVxFSSwgcm1jdXA9XEVoXEVSLAorCXJtc289XEUpLCBybXVsPVxFXSwgcnMxPVxFUiwgc2V0Yj1cRUAlcDElUGIlZ2IlZ2YlZCVkLAorCXNldGY9XEVAJXAxJVBmJWdiJWdmJWQlZCwgc2dyMD1cRX1cRV1cRT5cRSksIHNtY3VwPVxFaSwKKwlzbXNvPVxFKCwgc211bD1cRVssCisjCisjCitxbnh0fHFueHQ0fFFOWDQgdGVybWluYWwsCisJY3J4bSwgdXNlPXFueDQsCisjCitxbnhtfFFOWDQgd2l0aCBtb3VzZSBldmVudHMsCisJbWFkZHIjMSwKKwljaHI9XEUvLCBjdnI9XEUiLCBpczE9XEUvMHQsIG1jdWI9XEUvPjFoLCBtY3ViMT1cRS8+N2gsCisJbWN1ZD1cRS8+MWgsIG1jdWQxPVxFLz4xbFxFLz45aCwgbWN1Zj1cRS8+MWhcRS8+OWwsCisJbWN1ZjE9XEUvPjdsLCBtY3V1PVxFLz42aCwgbWN1dTE9XEUvPjZsLCBybWljbT1cRS8+MmwsCisJc21pY209XEUvPjJoLCB1c2U9cW54NCwKKyMKK3FueHd8UU5YNCB3aW5kb3dzLAorCXh2cGEsIHVzZT1xbnhtLAorIworIwlNb25vY2hyb21lIFFOWDQgdGVybWluYWwgb3IgY29uc29sZS4gU2V0dGluZyB0aGlzIHRlcm1pbmFsIHR5cGUgd2lsbAorIwlhbGxvdyBhbiBhcHBsaWNhdGlvbiBydW5uaW5nIG9uIGEgY29sb3IgY29uc29sZSB0byBiZWhhdmUgYXMgaWYgaXQKKyMJd2VyZSBhIG1vbm9jaHJvbWUgdGVybWluYWwuIE91dHB1dCB3aWxsIGJlIHRocm91Z2ggc3Rkb3V0IGluc3RlYWQgb2YKKyMJY29uc29sZSB3cml0ZXMgYmVjYXVzZSB0aGUgdGVybSByb3V0aW5lcyB3aWxsIHJlY29nbml6ZSB0aGF0IHRoZQorIwl0ZXJtaW5hbCBuYW1lIHN0YXJ0cyB3aXRoICdxbnh0Jy4KKyMKK3FueHRtb25vfE1vbm9jaHJvbWUgUU5YNCB0ZXJtaW5hbCBvciBjb25zb2xlLAorCWNvbG9yc0AsIHBhaXJzQCwKKwlzY3BALCB1c2U9cW54NCwKKworIyBGcm9tOiBGZWRlcmljbyBCaWFuY2hpIDxiaWFuY2hpQHBjLWFydGUyLmFydGUudW5pcGkuaXQ+LCAxIEp1bCAxOTk4CisjIChlc3I6IGNvbW1lbnRlZCBvdXQgPHNjcD4gYW5kIDxybWN1cD4gdG8gYXZvaWQgd2FybmluZ3MuKQorIyAoVEQ6IGRlcml2ZSBmcm9tIG9yaWdpbmFsIHFueDQgZW50cnkpCitxbnh0MnxxbnggMi4xNSBzZXJpYWwgdGVybWluYWwsCisJYW0sCisJY2l2aXNALCBjbm9ybUAsIGN2dmlzQCwgZGNoMUAsIGljaDFALCBrUkVTQCwga1JQTEAsIGtVTkRALCBrc3BkQCwKKwlyZXBALCBybWN1cEAsIHJtc289XEU+LCBzZXRiQCwgc2V0ZkAsIHNtY3VwQCwgc21zbz1cRTwsIHVzZT1xbng0LAorCisjIFFOWCBBTlNJIHRlcm1pbmFsIGRlZmluaXRpb24KK3FhbnNpLWd8UU5YIEFOU0ksCisJYW0sIGVzbG9rLCBocywgeG9uLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwgbmN2IzE5LCBwYWlycyM2NCwgd3NsIzgwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn5PYSwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVsySlxFW0gsIGNub3JtPVxFWz8yNWhcRVs/MTJsLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPzEyOzI1aCwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbMU0sIGRzbD1cRVtyLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLAorCWVsPVxFW0ssIGVsMT1cRVsxS1xFW1gsIGZsYXNoPVxFWz81aCQ8MjAwPlxFWz81bCwKKwlmc2w9XEVbPzZoXEU4LCBob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVsxQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbMUwsCisJaW5kPVxFW1MsIGluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs5bSwKKwlpczI9XEU+XEVbPzFsXEVbPzdoXEVbMDsxMDszOTs0OW0sIGlzMz1cRShCXEUpMCwKKwlrQkVHPVxFTm4sIGtDQU49XEVbcywga0NNRD1cRVt0LCBrQ1BZPVxFTnMsIGtDUlQ9XEVOdCwKKwlrREw9XEVOdiwga0VYVD1cRU53LCBrRk5EPVxFTngsIGtITFA9XEVOeSwga0hPTT1cRVtoLAorCWtMRlQ9XEVbZCwga05YVD1cRVt1LCBrT1BUPVxFTnosIGtQUlY9XEVbdiwga1JJVD1cRVtjLAorCWticz1eSCwga2Nhbj1cRVtTLCBrY2J0PVxFW1osIGtjbG89XEVOYywga2Nscj1cRU5hLAorCWtjbWQ9XEVbRywga2NweT1cRVtnLCBrY3RhYj1cRVt6LCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsIGtkbDE9XEVbcCwga2VuZD1cRVtZLAorCWtleHQ9XEVbeSwga2YxPVxFT1AsIGtmMTA9XEVPWSwga2YxMT1cRU9aLCBrZjEyPVxFT0EsCisJa2YxMz1cRU9wLCBrZjE0PVxFT3EsIGtmMTU9XEVPciwga2YxNj1cRU9zLCBrZjE3PVxFT3QsCisJa2YxOD1cRU91LCBrZjE5PVxFT3YsIGtmMj1cRU9RLCBrZjIwPVxFT3csIGtmMjE9XEVPeCwKKwlrZjIyPVxFT3ksIGtmMjM9XEVPeiwga2YyND1cRU9hLCBrZjI1PVxFWzF+LCBrZjI2PVxFWzJ+LAorCWtmMjc9XEVbM34sIGtmMjg9XEVbNH4sIGtmMjk9XEVbNX4sIGtmMz1cRU9SLCBrZjMwPVxFWzZ+LAorCWtmMzE9XEVbN34sIGtmMzI9XEVbOH4sIGtmMzM9XEVbOX4sIGtmMzQ9XEVbMTB+LAorCWtmMzU9XEVbMTF+LCBrZjM2PVxFWzEyfiwga2YzNz1cRVsxN34sIGtmMzg9XEVbMTh+LAorCWtmMzk9XEVbMTl+LCBrZjQ9XEVPUywga2Y0MD1cRVsyMH4sIGtmNDE9XEVbMjF+LAorCWtmNDI9XEVbMjJ+LCBrZjQzPVxFWzIzfiwga2Y0ND1cRVsyNH4sIGtmNDU9XEVbMjV+LAorCWtmNDY9XEVbMjZ+LCBrZjQ3PVxFWzI3fiwga2Y0OD1cRVsyOH4sIGtmNT1cRU9ULCBrZjY9XEVPVSwKKwlrZjc9XEVPViwga2Y4PVxFT1csIGtmOT1cRU9YLCBrZm5kPVxFTmYsIGtobHA9XEVOaCwKKwlraG9tZT1cRVtILCBraHRzPVxFTmIsIGtpY2gxPVxFW0AsIGtpbDE9XEVbYCwga2luZD1cRVthLAorCWttb3Y9XEVOaSwga21yaz1cRU5tLCBrbXNnPVxFTmUsIGtucD1cRVtVLCBrb3BuPVxFTm8sCisJa29wdD1cRU5rLCBrcHA9XEVbViwga3JlZj1cRU5sLCBrcmVzPVxFTnAsIGtyZnI9XEVOZywKKwlrcmk9XEVbYiwga3JwbD1cRU5yLCBrcnN0PVxFTmosIGtzYXY9XEVOcSwga3NsdD1cRVtULAorCWt0YmM9XEVOZCwga3VuZD1cRU51LCBsbD1cRVs5OUgsIG5lbD1cRUUsIG9wPVxFWzM5OzQ5bSwKKwlyZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsIHJldj1cRVs3bSwgcmk9XEVbVCwKKwlyaW49XEVbJXAxJWRULCBybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtc289XEVbMjdtLAorCXJtdWw9XEVbMjRtLCByczE9XDAxN1xFWz83aFxFWzA7Mzk7NDltJDwyPlxFPlxFWz8xbCwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXNldGI9XEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwlzZXRmPVxFWzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXA1JXQ7MiU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwldDs3JTslPyVwNyV0OzklO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbMmcsCisJdHNsPVxFN1xFMTsyNHJcRVs/NmxcRVsyNTslaSVwMSVkSCwKKyMKK3FhbnNpfFFOWCBhbnNpIHdpdGggY29uc29sZSB3cml0ZXMsCisJZGFpc3ksIHhocGEsIHVzZT1xYW5zaS1nLAorIworcWFuc2ktdHxRTlggYW5zaSB3aXRob3V0IGNvbnNvbGUgd3JpdGVzLAorCWNyeG0sIHVzZT1xYW5zaSwKKyMKK3FhbnNpLW18UU5YIGFuc2kgd2l0aCBtb3VzZSwKKwltYWRkciMxLAorCWNocj1cRVssIGN2cj1cRV0sIGlzMT1cRVswdCwgbWN1Yj1cRVs+MWgsIG1jdWIxPVxFWz43aCwKKwltY3VkPVxFWz4xaCwgbWN1ZDE9XEVbPjFsXEVbPjloLCBtY3VmPVxFWz4xaFxFWz45bCwKKwltY3VmMT1cRVs+N2wsIG1jdXU9XEVbPjZoLCBtY3V1MT1cRVs+NmwsIHJtaWNtPVxFWz4ybCwKKwlzbWljbT1cRVs+MmgsIHVzZT1xYW5zaSwKKyMKK3FhbnNpLXd8UU5YIGFuc2kgZm9yIHdpbmRvd3MsCisJeHZwYSwgdXNlPXFhbnNpLW0sCisKKyMjIyMgTmV0QlNEIGNvbnNvbGVzCisjCisjIHBjdnQgdGVybWNhcCBkYXRhYmFzZSBlbnRyaWVzIChjb3JyZXNwb25kaW5nIHRvIHJlbGVhc2UgMy4zMSkKKyMgQXV0aG9yJ3MgbGFzdCBlZGl0LWRhdGU6IFtGcmkgU2VwIDE1IDIwOjI5OjEwIDE5OTVdCisjCisjIChGb3IgdGhlIHRlcm1pbmZvIG1hc3RlciBmaWxlLCBJIHRyYW5zbGF0ZWQgdGhlc2UgaW50byB0ZXJtaW5mbyBzeW50YXguCisjIFRoZW4gSSBkcm9wcGVkIGFsbCB0aGUgcHNldWRvLUhQIGVudHJpZXMuIHdlIGRvbid0IHdhbnQgYW5kIGNhbid0IHVzZQorIyB0aGUgOlhzOiBmbGFnLiBUaGVuIEkgc3BsaXQgOmlzOiBpbnRvIGEgc2l6ZS1pbmRlcGVuZGVudCA8aXMxPiBhbmQgYQorIyBzaXplLWRlcGVuZGVudCA8aXMyPi4gIEZpbmFsbHksIEkgYWRkZWQgPHJtYW0+LzxzbWFtPiAtLSBlc3IpCisKKyMgTk9URTogPGljaDE+IGhhcyBiZWVuIHRha2VuIG91dCBvZiB0aGlzIGVudHJ5LiBmb3IgcmVmZXJlbmNlLCBpdCBzaG91bGQKKyMgYmUgPGljaDE9XEVbQD4uICBGb3IgZGlzY3Vzc2lvbiwgc2VlIElDSC9JQ0gxIFZFUlNVUyBSTUlSL1NNSVIgYmVsb3cuCisjIChlc3I6IGFkZGVkIDxjaXZpcz4gYW5kIDxjbm9ybT4gdG8gcmVzb2x2ZSBOZXRCU0QgUHJvYmxlbSBSZXBvcnQgIzQ1ODMpCitwY3Z0WFh8cGN2dCB2dDIwMCBlbXVsYXRvciAoREVDIFZUMjIwKSwKKwlhbSwga20sIG1pciwgbXNnciwgeGVubCwKKwlpdCM4LCB2dCMzLAorCWFjc2M9KytcLFwsLS0uLjAwYGBhYWZmZ2doaGlpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6en5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgZWwxPVxFWzFLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsIGluZG49XEVbJXAxJWRTLAorCWlzMT1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIGticz1cMTc3LAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2RjaDE9XEVbM34sIGtmMT1cRVsxN34sIGtmMj1cRVsxOH4sIGtmMz1cRVsxOX4sCisJa2Y0PVxFWzIwfiwga2Y1PVxFWzIxfiwga2Y2PVxFWzIzfiwga2Y3PVxFWzI0fiwga2Y4PVxFWzI1fiwKKwlraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sIGtsbD1cRVs0fiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sIHJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLAorCXJpPVxFTSwgcmluPVxFWyVwMSVkVCwgcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEVjXEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyMD1cRVttLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCisjCU5ldEJTRC9GcmVlQlNEIHZ0MjIwIHRlcm1pbmFsIGVtdWxhdG9yIGNvbnNvbGUgKHBjIGtleWJvYXJkICYgbW9uaXRvcikKKyMJdGVybWNhcCBlbnRyaWVzIGZvciBwdXJlIFZUMjIwLUVtdWxhdGlvbiBhbmQgMjUsIDI4LCAzNSwgNDAsIDQzIGFuZAorIwk1MCBsaW5lcyBlbnRyaWVzOyA4MCBjb2x1bW5zCitwY3Z0MjV8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDI1IGxpbmVzLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWlzMj1cRVsxOzI1clxFWzI1OzFILCB1c2U9cGN2dFhYLAorcGN2dDI4fGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCAyOCBsaW5lcywKKwljb2xzIzgwLCBsaW5lcyMyOCwKKwlpczI9XEVbMTsyOHJcRVsyODsxSCwgdXNlPXBjdnRYWCwKK3BjdnQzNXxkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggMzUgbGluZXMsCisJY29scyM4MCwgbGluZXMjMzUsCisJaXMyPVxFWzE7MzVyXEVbMzU7MUgsIHVzZT1wY3Z0WFgsCitwY3Z0NDB8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDQwIGxpbmVzLAorCWNvbHMjODAsIGxpbmVzIzQwLAorCWlzMj1cRVsxOzQwclxFWzQwOzFILCB1c2U9cGN2dFhYLAorcGN2dDQzfGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCA0MyBsaW5lcywKKwljb2xzIzgwLCBsaW5lcyM0MywKKwlpczI9XEVbMTs0M3JcRVs0MzsxSCwgdXNlPXBjdnRYWCwKK3BjdnQ1MHxkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggNTAgbGluZXMsCisJY29scyM4MCwgbGluZXMjNTAsCisJaXMyPVxFWzE7NTByXEVbNTA7MUgsIHVzZT1wY3Z0WFgsCisKKyMJTmV0QlNEL0ZyZWVCU0QgdnQyMjAgdGVybWluYWwgZW11bGF0b3IgY29uc29sZSAocGMga2V5Ym9hcmQgJiBtb25pdG9yKQorIwl0ZXJtY2FwIGVudHJpZXMgZm9yIHB1cmUgVlQyMjAtRW11bGF0aW9uIGFuZCAyNSwgMjgsIDM1LCA0MCwgNDMgYW5kCisjCTUwIGxpbmVzIGVudHJpZXM7IDEzMiBjb2x1bW5zCitwY3Z0MjV3fGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCAyNSBsaW5lcyBhbmQgMTMyIGNvbHMsCisJY29scyMxMzIsIGxpbmVzIzI1LAorCWlzMj1cRVsxOzI1clxFWzI1OzFILCB1c2U9cGN2dFhYLAorcGN2dDI4d3xkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggMjggbGluZXMgYW5kIDEzMiBjb2xzLAorCWNvbHMjMTMyLCBsaW5lcyMyOCwKKwlpczI9XEVbMTsyOHJcRVsyODsxSCwgdXNlPXBjdnRYWCwKK3BjdnQzNXd8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDM1IGxpbmVzIGFuZCAxMzIgY29scywKKwljb2xzIzEzMiwgbGluZXMjMzUsCisJaXMyPVxFWzE7MzVyXEVbMzU7MUgsIHVzZT1wY3Z0WFgsCitwY3Z0NDB3fGRlYyB2dDIyMCBlbXVsYXRpb24gd2l0aCA0MCBsaW5lcyBhbmQgMTMyIGNvbHMsCisJY29scyMxMzIsIGxpbmVzIzQwLAorCWlzMj1cRVsxOzQwclxFWzQwOzFILCB1c2U9cGN2dFhYLAorcGN2dDQzd3xkZWMgdnQyMjAgZW11bGF0aW9uIHdpdGggNDMgbGluZXMgYW5kIDEzMiBjb2xzLAorCWNvbHMjMTMyLCBsaW5lcyM0MywKKwlpczI9XEVbMTs0M3JcRVs0MzsxSCwgdXNlPXBjdnRYWCwKK3BjdnQ1MHd8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDUwIGxpbmVzIGFuZCAxMzIgY29scywKKwljb2xzIzEzMiwgbGluZXMjNTAsCisJaXMyPVxFWzE7NTByXEVbNTA7MUgsIHVzZT1wY3Z0WFgsCisKKyMJT3BlbkJTRCBpbXBsZW1lbnRzIGEgY29sb3IgdmFyaWF0aW9uCitwY3Z0MjUtY29sb3J8ZGVjIHZ0MjIwIGVtdWxhdGlvbiB3aXRoIDI1IGxpbmVzIGFuZCBjb2xvciwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwlpczI9XEVbMTsyNXJcRVsyNTsxSCwga2YxPVxFT1AsIGtmMTA9XEVbMjl+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjI9XEVPUSwga2YyMD1cRVszNH4sIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFWzE3fiwKKwlrZjY9XEVbMTh+LCBrZjc9XEVbMTl+LCBrZjg9XEVbMjB+LCBrZjk9XEVbMjF+LCB1c2U9cGN2dFhYLAorCXVzZT1lY21hK2NvbG9yLAorCisjIFRlcm1pbmZvIGVudHJpZXMgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgdGhlIG5jdXJzZXMgbGlicmFyeSBpbiBjb2xvdXIgb24gYQorIyBOZXRCU0QtYXJtMzIgY29uc29sZSAob25seSB0ZXN0ZWQgb24gYSBSaXNjUEMpLgorIyBDcmVhdGVkIGJ5IERhdmUgTWlsbGVuIDxkbWlsbEBnbG9iYWxuZXQuY28udWs+IDIyLjA3Ljk4CisjIG1vZGlmaWVkIGNvZGVzIGZvciBzZXRmL3NldGIgdG8gc2V0YWYvc2V0YWIsIHRoZW4gdG8ga2xvbmUrY29sb3IsIGNvcnJlY3RlZAorIyB0eXBvIGluIGludmlzIC0gVEQKK2FybTEwMHxhcm0xMDAtYW18QXJtKFJpc2NQQykgbmN1cnNlcyBjb21wYXRpYmxlIChmb3IgNjQweDQ4MCksCisJYW0sIGJjZSwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzMwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSQ8Mj4sIGJvbGQ9XEVbMW0kPDI+LAorCWNsZWFyPVxFW0hcRVtKJDw1MD4sIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MkPDI+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8NT4sIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBJDwyPiwgZWQ9XEVbSiQ8NTA+LCBlbD1cRVtLJDwzPiwgZWwxPVxFWzFLJDwzPiwKKwllbmFjcz1cRShCXEUpMCwgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaW5kPV5KLAorCWludmlzPVxFWzhtJDwyPiwga2ExPVxFW3EsIGthMz1cRVtzLCBrYjI9XEVbciwga2JzPV5ILAorCWtjMT1cRVtwLCBrYzM9XEVbbiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZW50PVxFW00sIGtmMD1cRVt5LCBrZjE9XEVbUCwga2YxMD1cRVt4LAorCWtmMj1cRVtRLCBrZjM9XEVbUiwga2Y0PVxFW1MsIGtmNT1cRVt0LCBrZjY9XEVbdSwga2Y3PVxFW3YsCisJa2Y4PVxFW2wsIGtmOT1cRVt3LCByYz1cRTgsIHJldj1cRVs3bSQ8Mj4sIHJpPVxFTSQ8NT4sCisJcm1hY3M9Xk8sIHJtYW09XEVbPzdsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttJDwyPiwKKwlybXVsPVxFW20kPDI+LCByczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDI+LAorCXNncjA9XEVbbVwwMTckPDI+LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20kPDI+LCBzbXVsPVxFWzRtJDwyPiwgdGJjPVxFWzNnLCB1c2U9ZWNtYStzZ3IsCisJdXNlPWtsb25lK2NvbG9yLAorCithcm0xMDAtd3xhcm0xMDAtd2FtfEFybShSaXNjUEMpIG5jdXJzZXMgY29tcGF0aWJsZSAoZm9yIDEwMjR4NzY4KSwKKwljb2xzIzEzMiwgbGluZXMjNTAsIHVzZT1hcm0xMDAsCisKKyMgTmV0QlNEL3g2OGsgY29uc29sZSB2dDIwMCBlbXVsYXRvci4gVGhpcyBwb3J0IHJ1bnMgb24gYSA2OEsgbWFjaGluZQorIyBtYW51ZmFjdHVyZWQgYnkgU2hhcnAgZm9yIHRoZSBKYXBlbmVzZSBtYXJrZXQuCisjIEZyb20gTWlub3VyYSBNYWtvdG8gPG1pbm91cmFAbmV0bGFwdXRhLm9yLmpwPiwgMTIgTWF5IDE5OTYKK3g2OGt8eDY4ay1pdGV8TmV0QlNEL3g2OGsgSVRFLAorCWNvbHMjOTYsIGxpbmVzIzMyLAorCWtjbHI9XEVbOX4sIGtobHA9XEVbMjh+LCB1c2U9dnQyMjAsCisKKyMgPHR2QHBvYm94LmNvbT46CisjIEVudHJ5IGZvciB0aGUgRE5BUkQgT3BlbkZpcm13YXJlIGNvbnNvbGUsIGNsb3NlIHRvIEFOU0kgYnV0IG5vdCBxdWl0ZS4KKyMKKyMgKHN0aWxsIHVuZmluaXNoZWQsIGJ1dCBnb29kIGVub3VnaCBzbyBmYXIuKQorb2Zjb25zfEROQVJEIE9wZW5GaXJtd2FyZSBjb25zb2xlLAorCWJ3LAorCWNvbHMjODAsIGxpbmVzIzMwLAorCWJlbD1eRywgYmxpbms9XDIzMzc7Mm0sIGJvbGQ9XDIzMzFtLCBjbGVhcj1eTCwgY3I9Xk0sCisJY3ViPVwyMzMlcDElZEQsIGN1YjE9XDIzM0QsIGN1ZD1cMjMzJXAxJWRCLCBjdWQxPVwyMzNCLAorCWN1Zj1cMjMzJXAxJWRDLCBjdWYxPVwyMzNDLCBjdXA9XDIzMyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cMjMzJXAxJWRBLCBjdXUxPVwyMzNBLCBkY2g9XDIzMyVwMSVkUCwgZGNoMT1cMjMzUCwKKwlkaW09XDIzMzJtLCBkbD1cMjMzJXAxJWRNLCBkbDE9XDIzM00sIGVkPVwyMzNKLCBlbD1cMjMzSywKKwlmbGFzaD1eRywgaHQ9XkksIGljaD1cMjMzJXAxJWRALCBpY2gxPVwyMzNALCBpbD1cMjMzJXAxJWRMLAorCWlsMT1cMjMzTCwgaW5kPV5KLCBpbnZpcz1cMjMzOG0sIGticz1eSCwga2N1YjE9XDIzM0QsCisJa2N1ZDE9XDIzM0IsIGtjdWYxPVwyMzNDLCBrY3V1MT1cMjMzQSwga2RjaDE9XDIzM1AsCisJa2YxPVwyMzMwUCwga2YxMD1cMjMzME0sIGtmMj1cMjMzMFEsIGtmMz1cMjMzMFcsCisJa2Y0PVwyMzMweCwga2Y1PVwyMzMwdCwga2Y2PVwyMzMwdSwga2Y3PVwyMzMwcSwga2Y4PVwyMzMwciwKKwlrZjk9XDIzMzBwLCBrbnA9XDIzMy8sIGtwcD1cMjMzPywgbmVsPV5NXkosIHJldj1cMjMzN20sCisJcm1zbz1cMjMzMG0sIHJtdWw9XDIzMzBtLAorCXNncj1cMjMzMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7bSwKKwlzZ3IwPVwyMzMwbSwKKworIyBOZXRCU0QgIndzY29ucyIgZW11bGF0b3IgaW4gdnQyMjAgbW9kZS4KKyMgVGhpcyBlbnRyeSBpcyBiYXNlZCBvbiB0aGUgTmV0QlNEIHRlcm1jYXAgZW50cnksIGNvcnJlY3RpbmcgdGhlIG5jdiB2YWx1ZS4KKyMgVGhlIGVtdWxhdG9yIHJlbmRlcnMgdW5kZXJsaW5lZCB0ZXh0IGluIHJlZC4gIENvbG9ycyBhcmUgb3RoZXJ3aXNlIHVzYWJsZS4KKyMKKyMgVGVzdGluZyB0aGUgZW11bGF0b3IgYW5kIHJlYWRpbmcgdGhlIHNvdXJjZSBjb2RlIChOZXRCU0QgMi4wKSwgaXQgYXBwZWFycworIyB0aGF0ICJ2dDIyMCIgaXMgaW5hY2N1cmF0ZS4gIFRoZXJlIGFyZSBhIGZldyB2dDIyMC1mZWF0dXJlcywgYnV0IG1vc3Qgb2YgdGhlCisjIHZ0MjIwIHNjcmVlbnMgaW4gdnR0ZXN0IGRvIG5vdCB3b3JrIHdpdGggdGhpcyBlbXVsYXRvci4gIEZvciBpbnN0YW5jZSwgaXQKKyMgaWRlbnRpZmllcyBpdHNlbGYgKHByaW1hcnkgREEgcmVzcG9uc2UpIGFzIGEgdnQyMjAgd2l0aCBzZWxlY3RpdmUgZXJhc2UuICBCdXQKKyMgdGhlIHNlbGVjdGl2ZSBlcmFzZSBmZWF0dXJlIGRvZXMgbm90IHdvcmsuICBUaGUgc2Vjb25kYXJ5IHJlc3BvbnNlIGlzIGNvcGllZAorIyBmcm9tIEtlcm1pdCdzIGVtdWxhdGlvbiBvZiB2dDIyMCwgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhY3R1YWwgdnQyMjAuICBBdAorIyB0aGUgbGV2ZWwgb2YgZGV0YWlsIGluIGEgdGVybWNhcCwgaXQgaXMgYSBwYXNzYWJsZSBlbXVsYXRvciwgc2luY2UgRUNIIGRvZXMKKyMgd29yay4gIERvbid0IHVzZSBpdCBvbiBhIFZNUyBzeXN0ZW0gLVRECit3c3Z0MjV8TmV0QlNEIHdzY29ucyBpbiAyNSBsaW5lIERFQyBWVDIyMCBtb2RlLAorCWJjZSwgbXNnciwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjUsIG5jdiMyLCBwYWlycyM2NCwKKwlpczI9XEVbclxFWzI1OzFILCBrZW5kPVxFWzh+LCBrZjE9XEVbMTF+LCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMj1cRVsxMn4sIGtmMz1cRVsxM34sCisJa2Y0PVxFWzE0fiwga2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwKKwlrZjk9XEVbMjB+LCBraG9tZT1cRVs3fiwgb3A9XEVbbSwgc2V0YWI9XEVbNCVwMSVkbSwKKwlzZXRhZj1cRVszJXAxJWRtLCB1c2U9dnQyMjAsCisKK3dzdnQyNW18TmV0QlNEIHdzY29ucyBpbiAyNSBsaW5lIERFQyBWVDIyMCBtb2RlIHdpdGggTWV0YSwKKwlrbSwgdXNlPXdzdnQyNSwKKworIyBgcmFzdGVyY29uc29sZScgcHJvdmlkZWQgYnkgNC40QlNELCBOZXRCU0QgYW5kIE9wZW5CU0Qgb24gU1BBUkMsIGFuZAorIyBERUNzdGF0aW9uL3BtYXguCityY29uc3xCU0QgcmFzdGVyY29uc29sZSwKKwl1c2U9c3VuLWlsLAorIyBDb2xvciB2ZXJzaW9uIG9mIGFib3ZlLiBDb2xvciBjdXJyZW50bHkgb25seSBwcm92aWRlZCBieSBOZXRCU0QuCityY29ucy1jb2xvcnxCU0QgcmFzdGVyY29uc29sZSB3aXRoIEFOU0kgY29sb3IsCisJYmNlLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwlvcD1cRVttLCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCB1c2U9cmNvbnMsCisKKyMgbWd0ZXJtIC0tIE1HTC9NR0wyLCBNb2JpbGVHZWFyIEdyYXBoaWMgTGlicmFyeQorIyBmb3IgUG9ja2V0QlNELFBvY2tldExpbnV4LE5ldEJTRC97aHBjbWlwcyxtYWM2OGt9CisjIC0tIHRoZSBzZXRmL3NldGIgYXJlIHByb2JhYmx5IGluY29ycmVjdCwgbW9yZSBsaWtlbHkgc2V0YWYvc2V0YWIgLVRECisjIC0tIGNvbXBhcmUgd2l0aCBjb25zMjV3CittZ3Rlcm0sCisJT1RicywgT1RwdCwgYW0sIGJjZSwgYncsIGVvLCBrbSwgbXNnciwgbnBjLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMxOCwgcGFpcnMjNjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLAorCWNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMzA7MW0sIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRgLCBodD1eSSwgaWNoPVxFWyVwMSVkQCwKKwlpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLAorCWluZG49XEVbJXAxJWRTLCBrYjI9XEVbRSwga2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XDE3Nywga2VuZD1cRVtGLAorCWtmMT1cRVtNLCBrZjEwPVxFW1YsIGtmMTE9XEVbVywga2YxMj1cRVtYLCBrZjI9XEVbTiwKKwlrZjM9XEVbTywga2Y0PVxFW1AsIGtmNT1cRVtRLCBrZjY9XEVbUiwga2Y3PVxFW1MsIGtmOD1cRVtULAorCWtmOT1cRVtVLCBraG9tZT1cRVtILCBraWNoMT1cRVtMLCBrbnA9XEVbRywga3BwPVxFW0ksCisJbmVsPVxFW0UsIG9wPVxFW3gsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRVtULCByaW49XEVbJXAxJWRULAorCXJtc289XEVbbSwgcnMyPVxFW3hcRVttXEVjLCBzYz1cRTcsIHNldGI9XEVbNCVwMSVkbSwKKwlzZXRmPVxFWzMlcDElZG0sIHNncjA9XEVbbSwgc21zbz1cRVs3bSwgdnBhPVxFWyVpJXAxJWRkLAorCisjIyMjIEZyZWVCU0QgY29uc29sZSBlbnRyaWVzCisjCisjIEZyb206IEFuZHJleSBDaGVybm92IDxhY2hlQGFzdHJhbC5tc2suc3U+IDI5IE1hciAxOTk2CisjIEFuZHJleSBDaGVybm92IG1haW50YWlucyB0aGUgRnJlZUJTRCB0ZXJtY2FwIGRpc3RyaWJ1dGlvbnMuCisjCisjIE5vdGU6IFVzZXJzIG9mIEZyZWVCU0QgMi4xLjAgYW5kIG9sZGVyIHZlcnNpb25zIG11c3QgZWl0aGVyIHVwZ3JhZGUKKyMgb3IgY29tbWVudCBvdXQgdGhlIDpjYjogY2FwYWJpbGl0eSBpbiB0aGUgY29uc29sZSBlbnRyeS4KKyMKKyMgQWxleGFuZGVyIEx1a3lhbm92IHJlcG9ydHM6CisjIEkgaGF2ZSBzZWVuIEZyZWVCU0QtMi4xLjVSLi4uIFRoZSBvbGQgZWwxIGJ1ZyBjaGFuZ2VkLCBidXQgaXQgaXMgc3RpbGwgdGhlcmUuCisjIE5vdyBlbDEgY2xlYXJzIG5vdCBvbmx5IHRvIHRoZSBsaW5lIGJlZ2lubmluZywgYnV0IGFsc28gYSBsYXJnZSBjaHVuaworIyBvZiBwcmV2aW91cyBsaW5lLiBCdXQgdGhlcmUgaXMgYW5vdGhlciBidWcgLSBlY2ggZG9lcyBub3Qgd29yayBhdCBhbGwuCisjCisKKyMgZm9yIHN5c2NvbnMKKyMgY29tbW9uIGVudHJ5IHdpdGhvdXQgc2VtaWdyYXBoaWNzCisjIEJ1ZzogVGhlIDxvcD4gY2FwYWJpbGl0eSByZXNldHMgYXR0cmlidXRlcy4KKyMgQnVnPyBUaGUgZWNoIGFuZCBlbDEgYXR0cmlidXRlcyBhcHBlYXIgdG8gbW92ZSB0aGUgY3Vyc29yIGluIHNvbWUgY2FzZXM7IGZvcgorIyBpbnN0YW5jZSBlbDEgZG9lcyBpZiB0aGUgY3Vyc29yIGlzIG1vdmVkIHRvIHRoZSByaWdodCBtYXJnaW4gZmlyc3QuICBSZW1vdmVkCisjIGJ5IFQuRGlja2V5IDk3LzUvMyAoZWNoPVxFWyVwMSVkWCwgZWwxPVxFWzFLKQorIworIyBTZXR0aW5nIGNvbG9ycyB0dXJucyBvZmYgcmV2ZXJzZTsgd2UgY2Fubm90IGd1YXJhbnRlZSBvcmRlciwgc28gdXNlIG5jdi4KKyMgTm90ZSB0aGF0IHRoaXMgZGlzYWJsZXMgc3RhbmRvdXQgd2l0aCBjb2xvci4KKyMKKyMgVGhlIGVtdWxhdG9yIHNlbmRzIGRpZmZlcmVuY2Ugc3RyaW5ncyBiYXNlZCBvbiBzaGlmdC0gYW5kIGNvbnRyb2wta2V5cywKKyMgbGlrZSBzY29hbnNpOgorIwlGMTMtRjI0IGFyZSBzaGlmdGVkIEYxLUYxMgorIwlGMjUtRjM2IGFyZSBjb250cm9sIEYxLUYxMgorIwlGMzctRjQ4IGFyZSBzaGlmdCtjb250cm9sIEYxLUYxMgorY29uczI1d3xhbnNpd3xhbnNpODB4MjUtcmF3fGZyZWVic2QgY29uc29sZSAoMjUtbGluZSByYXcgbW9kZSksCisJYW0sIGJjZSwgYncsIGVvLCBtc2dyLCBucGMsCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCBuY3YjMjEsIHBhaXJzIzY0LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbSiwKKwljbm9ybT1cRVs9MEMsIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLAorCWN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz0xQywgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMzA7MW0sCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwgaHQ9XkksIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVbUywKKwlpbmRuPVxFWyVwMSVkUywga2IyPVxFW0UsIGticz1eSCwga2NidD1cRVtaLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVwxNzcsIGtlbmQ9XEVbRiwKKwlrZjE9XEVbTSwga2YxMD1cRVtWLCBrZjExPVxFW1csIGtmMTI9XEVbWCwga2YxMz1cRVtZLAorCWtmMTQ9XEVbWiwga2YxNT1cRVthLCBrZjE2PVxFW2IsIGtmMTc9XEVbYywga2YxOD1cRVtkLAorCWtmMTk9XEVbZSwga2YyPVxFW04sIGtmMjA9XEVbZiwga2YyMT1cRVtnLCBrZjIyPVxFW2gsCisJa2YyMz1cRVtpLCBrZjI0PVxFW2osIGtmMjU9XEVbaywga2YyNj1cRVtsLCBrZjI3PVxFW20sCisJa2YyOD1cRVtuLCBrZjI5PVxFW28sIGtmMz1cRVtPLCBrZjMwPVxFW3AsIGtmMzE9XEVbcSwKKwlrZjMyPVxFW3IsIGtmMzM9XEVbcywga2YzND1cRVt0LCBrZjM1PVxFW3UsIGtmMzY9XEVbdiwKKwlrZjM3PVxFW3csIGtmMzg9XEVbeCwga2YzOT1cRVt5LCBrZjQ9XEVbUCwga2Y0MD1cRVt6LAorCWtmNDE9XEVbQCwga2Y0Mj1cRVtbLCBrZjQzPVxFW1xcLCBrZjQ0PVxFW10sIGtmNDU9XEVbXF4sCisJa2Y0Nj1cRVtfLCBrZjQ3PVxFW2AsIGtmNDg9XEVbeywga2Y1PVxFW1EsIGtmNj1cRVtSLAorCWtmNz1cRVtTLCBrZjg9XEVbVCwga2Y5PVxFW1UsIGtob21lPVxFW0gsIGtpY2gxPVxFW0wsCisJa25wPVxFW0csIGtwcD1cRVtJLCBuZWw9XEVbRSwgb3A9XEVbeCwgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwgcm1zbz1cRVttLCByczI9XEVbeFxFW21cRWMsIHNjPVxFNywKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNncj1cRVswJT8lcDEldDsyOzclOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzMwOzElOyU/JXA2JXQ7MSU7bSwKKwlzZ3IwPVxFW20sIHNtc289XEVbN20sIHZwYT1cRVslaSVwMSVkZCwKK2NvbnMyNXxhbnNpc3xhbnNpODB4MjV8ZnJlZWJzZCBjb25zb2xlICgyNS1saW5lIGFuc2kgbW9kZSksCisJYWNzYz0tXDAzMC5eWTBcMzMzYFwwMDRhXDI2MGZcMzcwZ1wzNjFoXDI2MWlcMDI1alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNXFcMzA0dFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ+XDM3MSwKKwl1c2U9Y29uczI1dywKK2NvbnMyNS1tfGFuc2lzLW1vbm98YW5zaTgweDI1LW1vbm98ZnJlZWJzZCBjb25zb2xlICgyNS1saW5lIG1vbm8gYW5zaSBtb2RlKSwKKwljb2xvcnNALCBwYWlyc0AsCisJYm9sZEAsIGRpbUAsIG9wQCwgcm11bD1cRVttLCBzZXRhYkAsIHNldGFmQCwKKwlzZ3I9XEVbMCU/JXAxJXQ7Mjs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTttLAorCXNtdWw9XEVbNG0sIHVzZT1jb25zMjUsCitjb25zMzB8YW5zaTgweDMwfGZyZWVic2QgY29uc29sZSAoMzAtbGluZSBhbnNpIG1vZGUpLAorCWxpbmVzIzMwLCB1c2U9Y29uczI1LAorY29uczMwLW18YW5zaTgweDMwLW1vbm98ZnJlZWJzZCBjb25zb2xlICgzMC1saW5lIG1vbm8gYW5zaSBtb2RlKSwKKwlsaW5lcyMzMCwgdXNlPWNvbnMyNS1tLAorY29uczQzfGFuc2k4MHg0M3xmcmVlYnNkIGNvbnNvbGUgKDQzLWxpbmUgYW5zaSBtb2RlKSwKKwlsaW5lcyM0MywgdXNlPWNvbnMyNSwKK2NvbnM0My1tfGFuc2k4MHg0My1tb25vfGZyZWVic2QgY29uc29sZSAoNDMtbGluZSBtb25vIGFuc2kgbW9kZSksCisJbGluZXMjNDMsIHVzZT1jb25zMjUtbSwKK2NvbnM1MHxhbnNpbHxhbnNpODB4NTB8ZnJlZWJzZCBjb25zb2xlICg1MC1saW5lIGFuc2kgbW9kZSksCisJbGluZXMjNTAsIHVzZT1jb25zMjUsCitjb25zNTAtbXxhbnNpbC1tb25vfGFuc2k4MHg1MC1tb25vfGZyZWVic2QgY29uc29sZSAoNTAtbGluZSBtb25vIGFuc2kgbW9kZSksCisJbGluZXMjNTAsIHVzZT1jb25zMjUtbSwKK2NvbnM2MHxhbnNpODB4NjB8ZnJlZWJzZCBjb25zb2xlICg2MC1saW5lIGFuc2kgbW9kZSksCisJbGluZXMjNjAsIHVzZT1jb25zMjUsCitjb25zNjAtbXxhbnNpODB4NjAtbW9ub3xmcmVlYnNkIGNvbnNvbGUgKDYwLWxpbmUgbW9ubyBhbnNpIG1vZGUpLAorCWxpbmVzIzYwLCB1c2U9Y29uczI1LW0sCitjb25zMjVyfHBjM3J8aWJtcGMzcnxjb25zMjUta29pOC1yfGZyZWVic2QgY29uc29sZSB3L2tvaTgtciBjeXJpbGxpYywKKwlhY3NjPS1cMDMwLl5ZMFwyMTVgXDAwNGFcMjIwZlwyMzRoXDIyMWlcMDI1alwyMDVrXDIwM2xcMjAybVwyMDRuXDIxMnFcMHRcMjA2dVwyMDd2XDIxMXdcMjEweFwyMDF5XDIzMHpcMjMxflwyMjUsCisJdXNlPWNvbnMyNXcsCitjb25zMjVyLW18cGMzci1tfGlibXBjM3ItbW9ub3xjb25zMjUta29pOHItbXxmcmVlYnNkIGNvbnNvbGUgdy9rb2k4LXIgY3lyaWxsaWMgKG1vbm8pLAorCWNvbG9yc0AsIHBhaXJzQCwKKwlvcEAsIHJtdWw9XEVbbSwgc2V0YWJALCBzZXRhZkAsCisJc2dyPVxFWzAlPyVwMSV0OzI7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDszMDsxJTslPyVwNiV0OzElO20sCisJc211bD1cRVs0bSwgdXNlPWNvbnMyNXIsCitjb25zNTByfGNvbnM1MC1rb2k4cnxmcmVlYnNkIGNvbnNvbGUgdy9rb2k4LXIgY3lyaWxsaWMgKDUwIGxpbmVzKSwKKwlsaW5lcyM1MCwgdXNlPWNvbnMyNXIsCitjb25zNTByLW18Y29uczUwLWtvaThyLW18ZnJlZWJzZCBjb25zb2xlIHcva29pOC1yIGN5cmlsbGljICg1MC1saW5lIG1vbm8pLAorCWxpbmVzIzUwLCB1c2U9Y29uczI1ci1tLAorY29uczYwcnxjb25zNjAta29pOHJ8ZnJlZWJzZCBjb25zb2xlIHcva29pOC1yIGN5cmlsbGljICg2MCBsaW5lcyksCisJbGluZXMjNjAsIHVzZT1jb25zMjVyLAorY29uczYwci1tfGNvbnM2MC1rb2k4ci1tfGZyZWVic2QgY29uc29sZSB3L2tvaTgtciBjeXJpbGxpYyAoNjAtbGluZSBtb25vKSwKKwlsaW5lcyM2MCwgdXNlPWNvbnMyNXItbSwKKyMgSVNPIDg4NTktMSBGcmVlQlNEIGNvbnNvbGUKK2NvbnMyNWwxfGNvbnMyNS1pc284ODU5fGZyZWVic2QgY29uc29sZSB3L2lzbyA4ODU5LTEgY2hhcnMsCisJYWNzYz0rXDI1M1wsXDI3My1cMDMwLlwwMzFgXDIwMWFcMjAyZlwyMDdnXDIxMGlcMjQ3alwyMTNrXDIxNGxcMjE1bVwyMTZuXDIxN29cMjIwcFwyMjFxXDIyMnJcMjIzc1wyMjR0XDIyNXVcMjI2dlwyMjd3XDIzMHhcMjMxeVwyMzJ6XDIzM35cMjM3LAorCXVzZT1jb25zMjV3LAorY29uczI1bDEtbXxjb25zMjUtaXNvLW18ZnJlZWJzZCBjb25zb2xlIHcvaXNvIDg4NTktMSBjaGFycyAobW9ubyksCisJY29sb3JzQCwgcGFpcnNALAorCWJvbGRALCBkaW1ALCBvcEAsIHJtdWw9XEVbbSwgc2V0YWJALCBzZXRhZkAsCisJc2dyPVxFWzAlPyVwMSV0OzI7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7bSwKKwlzbXVsPVxFWzRtLCB1c2U9Y29uczI1bDEsCitjb25zNTBsMXxjb25zNTAtaXNvODg1OXxmcmVlYnNkIGNvbnNvbGUgdy9pc28gODg1OS0xIGNoYXJzICg1MCBsaW5lcyksCisJbGluZXMjNTAsIHVzZT1jb25zMjVsMSwKK2NvbnM1MGwxLW18Y29uczUwLWlzby1tfGZyZWVic2QgY29uc29sZSB3L2lzbyA4ODU5LTEgY2hhcnMgKDUwLWxpbmUgbW9ubyksCisJbGluZXMjNTAsIHVzZT1jb25zMjVsMS1tLAorY29uczYwbDF8Y29uczYwLWlzb3xmcmVlYnNkIGNvbnNvbGUgdy9pc28gODg1OS0xIGNoYXJzICg2MCBsaW5lcyksCisJbGluZXMjNjAsIHVzZT1jb25zMjVsMSwKK2NvbnM2MGwxLW18Y29uczYwLWlzby1tfGZyZWVic2QgY29uc29sZSB3L2lzbyA4ODU5LTEgY2hhcnMgKDYwLWxpbmUgbW9ubyksCisJbGluZXMjNjAsIHVzZT1jb25zMjVsMS1tLAorCisjIyMjIDM4NkJTRCBhbmQgQlNEL09TIENvbnNvbGVzCisjCisKKyMgVGhpcyB3YXMgdGhlIG9yaWdpbmFsIDM4NkJTRCBjb25zb2xlIGVudHJ5IChJIHRoaW5rKS4KKyMgU29tZSBwbGFjZXMgaXQncyBuYW1lZCBvbGRwYzN8b2xkaWJtcGMzLgorIyBGcm9tOiBBbGV4IFIuTi4gV2V0bW9yZSA8YXcydEBhbmRyZXcuY211LmVkdT4KK29yaWdwYzN8b3JpZ2libXBjM3xJQk0gUEMgMzg2QlNEIENvbnNvbGUsCisJT1RicywgYW0sIGJ3LCBlbywgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWFjc2M9alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNXFcMzA0dFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2MywKKwlib2xkPVxFWzdtLCBjbGVhcj1cRWMsIGN1YjE9XkgsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSUyZDslcDIlMmRILCBjdXUxPVxFW0EsIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBpbmQ9XEVbUywga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBraG9tZT1cRVtZLCByaT1cRVtULCBybXNvPVxFWzE7MHhcRVsyOzd4LAorCXJtdWw9XEVbMTsweFxFWzI7N3gsIHNncjA9XEVbbVxFWzE7MHhcRVsyOzd4LAorCXNtc289XEVbMTs3eFxFWzI7MHgsIHNtdWw9XEVbMTs3eFxFWzI7MHgsCisKKyMgZGVzY3JpcHRpb24gb2YgQlNELzM4NiBjb25zb2xlIGVtdWxhdG9yIGluIHZlcnNpb24gMS4wIChzdXBwbGllZCBieSBCU0RJKQorb2xkcGMzfG9sZGlibXBjM3xvbGQgSUJNIFBDIEJTRC8zODYgQ29uc29sZSwKKwlPVGJzLCBrbSwKKwlsaW5lcyMyNSwKKwliZWw9XkcsIGJvbGQ9XEVbPTE1RiwgY3I9Xk0sIGN1ZDE9XkosIGRpbT1cRVs9OEYsIGRsMT1cRVtNLAorCWh0PV5JLCBpbDE9XEVbTCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2hvbWU9XEVbSCwga2ljaDE9XEVbTCwga2xsPVxFW0YsCisJa25wPVxFW0csIGtwcD1cRVtJLCBuZWw9Xk1eSiwgc2dyMD1cRVs9UiwKKworIyBEZXNjcmlwdGlvbiBvZiBCU0QvT1MgY29uc29sZSBlbXVsYXRvciBpbiB2ZXJzaW9uIDEuMSwgMi4wLCAyLjEKKyMgTm90ZSwgdGhlIGVtdWxhdG9yIHN1cHBvcnRzIG1hbnkgb2YgdGhlIGFkZGl0aW9uYWwgY29uc29sZSBmZWF0dXJlcworIyBsaXN0ZWQgaW4gdGhlIGlCQ1MyIChlLmcuIGNoYXJhY3Rlci1zZXQgc2VsZWN0aW9uKSB0aG91Z2ggbm90IGFsbAorIyBhcmUgZGVzY3JpYmVkIGhlcmUuICBUaGlzIGVudHJ5IHJlYWxseSBvdWdodCB0byBiZSB1cGdyYWRlZC4KKyMgQWxzbyBub3RlLCB0aGUgY29uc29sZSB3aWxsIGFsc28gd29yayB3aXRoIGZld2VyIGxpbmVzIGFmdGVyIGRvaW5nCisjICJzdHR5IHJvd3MgTk4iLCBlLmcuIHRvIHVzZSAyNCBsaW5lcy4KKyMgKENvbG9yIHN1cHBvcnQgZnJvbSBLZXZpbiBSb3NlbmJlcmcgPGtldmluQGN5YmVycG9ydC5jb20+LCAyIE1heSAxOTk2KQorIyBCdWc6IFRoZSA8b3A+IGNhcGFiaWxpdHkgcmVzZXRzIGF0dHJpYnV0ZXMuCitic2Rvcy1wY3xJQk0gUEMgQlNEL09TIENvbnNvbGUsCisJc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7MSU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzExJTttLAorCXVzZT1ic2Rvcy1wYy1ub2JvbGQsCisKK2JzZG9zLXBjLW5vYm9sZHxCU0QvT1MgUEMgY29uc29sZSB3L28gYm9sZCwKKwl1c2U9a2xvbmUrY29sb3IsIHVzZT1ic2Rvcy1wYy1tLAorCitic2Rvcy1wYy1tfGJzZG9zLXBjLW1vbm98QlNEL09TIFBDIGNvbnNvbGUgbW9ubywKKwlPVGJzLCBhbSwgZW8sIGttLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYmVsPV5HLCBjbGVhcj1cRWMsIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsIGtpY2gxPVxFW0wsCisJa2xsPVxFW0YsIGtucD1cRVtHLCBrcHA9XEVbSSwgbmVsPV5NXkosIHJjPVxFOCwgc2M9XEU3LAorCXNncj1cRVswOzEwJT8lcDEldDs3JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTElO20lPyVwNSV0XEVbPThGJTssCisJdXNlPWtsb25lK3NncjgsCisKKyMgT2xkIG5hbWVzIGZvciBCU0QvT1MgUEMgY29uc29sZSB1c2VkIGluIHJlbGVhc2VzIGJlZm9yZSA0LjEuCitwYzN8QlNEL09TIG9uIHRoZSBQQyBDb25zb2xlLAorCXVzZT1ic2Rvcy1wYy1ub2JvbGQsCitpYm1wYzN8cGMzLWJvbGR8QlNEL09TIG9uIHRoZSBQQyBDb25zb2xlIHdpdGggYm9sZCBpbnN0ZWFkIG9mIHVuZGVybGluZSwKKwl1c2U9YnNkb3MtcGMsCisKKyMgQlNEL09TIG9uIHRoZSBTUEFSQworYnNkb3Mtc3BhcmN8U3VuIFNQQVJDIEJTRC9PUyBDb25zb2xlLAorCXVzZT1zdW4sCisKKyMgQlNEL09TIG9uIHRoZSBQb3dlclBDCitic2Rvcy1wcGN8UG93ZXJQQyBCU0QvT1MgQ29uc29sZSwKKwl1c2U9YnNkb3MtcGMsCisKKyMjIyMgREVDIFZUNTIKKyMgKDxhY3NjPi88cm1hY3M+LzxzbWFjcz4gY2FwYWJpbGl0aWVzIGFyZW4ndCBpbiBERUMncyBvZmZpY2lhbCBlbnRyeSAtLSBlc3IpCisjCisjIEFjdHVhbGx5IChURCBwb2ludGVkIHRoaXMgb3V0IGF0IHRoZSB0aW1lIHRoZSBhY3NjIHN0cmluZyB3YXMgYWRkZWQpOgorIyB2dDUyIHNob3VsZG4ndCBkZWZpbmUgZnVsbCBhY3NjIHNpbmNlIG1vc3Qgb2YgdGhlIGNlbGxzIGRvbid0IG1hdGNoLgorIyBzZWUgdnQxMDAgbWFudWFsIHBhZ2UgQS0zMS4gIFRoaXMgaXMgdGhlIGxpc3QgdGhhdCBkb2VzIG1hdGNoOgorIwlmIGRlZ3JlZQorIwlnIHBsdXMvbWludXMKKyMJaCByaWdodC1hcnJvdworIwlrIGRvd24tYXJyb3cKKyMJbSBzY2FuLTEKKyMJbyBzY2FuLTMKKyMJcSBzY2FuLTUKKyMJcyBzY2FuLTcKKyMgVGhlIGxpbmUtZHJhd2luZyBoYXBwZW5zIHRvIHdvcmsgaW4gc2V2ZXJhbCB0ZXJtaW5hbCBlbXVsYXRvcnMsIGJ1dCBzaG91bGQKKyMgbm90IGJlIHVzZWQgYXMgYSBndWlkZSB0byB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSB2dDUyLiAgTm90ZSBpbiBwYXJ0aWN1bGFyCisjIHRoYXQgdnQ1MiBkb2VzIG5vdCBzdXBwb3J0IGxpbmUtZHJhd2luZyBjaGFyYWN0ZXJzICh0aGUgc2Nhbi1YIHZhbHVlcyByZWZlcgorIyB0byBhIGNydWRlIHBsb3R0aW5nIGZlYXR1cmUpIC1URAordnQ1MnxkZWMgdnQ1MiwKKwlPVGJzLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9ZmZnZ2hob21wb3Fxc3MuaywgYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPV5NLAorCWN1YjE9XEVELCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGVkPVxFSiwKKwllbD1cRUssIGhvbWU9XEVILCBodD1eSSwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBuZWw9Xk1eSiwgcmk9XEVJLCBybWFjcz1cRUcsIHNtYWNzPVxFRiwKKworIyMjIyBERUMgVlQxMDAgYW5kIGNvbXBhdGlibGVzCisjCisjIERFQyB0ZXJtaW5hbHMgZnJvbSB0aGUgdnQxMDAgZm9yd2FyZCBhcmUgY29sbGVjdGVkIGhlcmUuIE9sZGVyIERFQyB0ZXJtaW5hbHMKKyMgYW5kIG1pY3JvIGNvbnNvbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgYG9ic29sZXRlJyBzZWN0aW9uLiAgTW9yZSBkZXRhaWxzIG9uCisjIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgVlQxMDAgYW5kIEFOU0kgWDMuNjQvSVNPIDY0MjkvRUNNQS00OCBtYXkgYmUKKyMgZm91bmQgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KKyMKKyMgRXhjZXB0IHdoZXJlIG5vdGVkLCB0aGVzZSBlbnRyaWVzIGFyZSBERUMncyBvZmZpY2lhbCB0ZXJtaW5mb3MuCisjIENvbnRhY3QgQmlsbCBIZWRiZXJnIDxoZWRiZXJnQGhhbm5haC5lbmV0LmRlYy5jb20+IG9mIFRlcm1pbmFsIFN1cHBvcnQKKyMgRW5naW5lZXJpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBVcGRhdGVkIHRlcm1pbmZvcyBhbmQgdGVybWNhcHMKKyMgYXJlIGtlcHQgYXZhaWxhYmxlIGF0IGZ0cDovL2dhdGVrZWVwZXIuZGVjLmNvbS9wdWIvREVDL3Rlcm1jYXBzLgorIworIyBJbiBPY3RvYmVyIDE5OTUgREVDIHNvbGQgaXRzIHRlcm1pbmFscyBidXNpbmVzcywgaW5jbHVkaW5nIHRoZSBWVCBhbmQgRG9yaW8KKyMgbGluZSBhbmQgdHJhZGVtYXJrLCB0byBTdW5SaXZlciBEYXRhIFN5c3RlbXMuICBTdW5SaXZlciBoYXMgc2luY2UgY2hhbmdlZAorIyBpdHMgbmFtZSB0byBCb3VuZGxlc3MgVGVjaG5vbG9naWVzOyBzZWUgaHR0cDovL3d3dy5ib3VuZGxlc3MuY29tLgorIworCisjIE5PVEU6ICBBbnkgVlQxMDAgZW11bGF0aW9uLCB3aGV0aGVyIGluIGhhcmR3YXJlIG9yIHNvZnR3YXJlLCBhbG1vc3QKKyMgY2VydGFpbmx5IGluY2x1ZGVzIHdoYXQgREVDIGNhbGxlZCB0aGUgYExldmVsIDEgZWRpdGluZyBleHRlbnNpb24nIGNvZGVzOworIyBvbmx5IHRoZSB2ZXJ5IG9sZGVzdCBWVDEwMHMgbGFja2VkIHRoZXNlIGFuZCB0aGVyZSBwcm9iYWJseSBhcmVuJ3QgYW55IG9mCisjIHRob3NlIGxlZnQgYWxpdmUuICBUbyBjYXB0dXJlIHRoZXNlLCB1c2Ugb25lIG9mIHRoZSBWVDEwMiBlbnRyaWVzLgorIworIyBOb3RlIHRoYXQgdGhlIDx4ZW5sPiBnbGl0Y2ggaW4gdnQxMDAgaXMgbm90IHF1aXRlIHRoZSBzYW1lIGFzIG9uIHRoZSBDb25jZXB0LAorIyBzaW5jZSB0aGUgY3Vyc29yIGlzIGxlZnQgaW4gYSBkaWZmZXJlbnQgcG9zaXRpb24gd2hpbGUgaW4gdGhlCisjIHdlaXJkIHN0YXRlIChjb25jZXB0IGF0IGJlZ2lubmluZyBvZiBuZXh0IGxpbmUsIHZ0MTAwIGF0IGVuZAorIyBvZiB0aGlzIGxpbmUpIHNvIGFsbCB2ZXJzaW9ucyBvZiB2aSBiZWZvcmUgMy43IGRvbid0IGhhbmRsZQorIyA8eGVubD4gcmlnaHQgb24gdnQxMDAuIFRoZSBjb3JyZWN0IHdheSB0byBoYW5kbGUgPHhlbmw+IGlzIHdoZW4KKyMgeW91IG91dHB1dCB0aGUgY2hhciBpbiBjb2x1bW4gODAsIGltbWVkaWF0ZWx5IG91dHB1dCBDUiBMRgorIyBhbmQgdGhlbiBhc3N1bWUgeW91IGFyZSBpbiBjb2x1bW4gMSBvZiB0aGUgbmV4dCBsaW5lLiBJZiA8eGVubD4KKyMgaXMgb24sIGFtIHNob3VsZCBiZSBvbiB0b28uCisjCisjIEkgYXNzdW1lIHlvdSBoYXZlIHNtb290aCBzY3JvbGwgb2ZmIG9yIGFyZSBhdCBhIHNsb3cgZW5vdWdoIGJhdWQKKyMgcmF0ZSB0aGF0IGl0IGRvZXNuJ3QgbWF0dGVyICgxMjAwPyBvciBsZXNzKS4gQWxzbyB0aGlzIGFzc3VtZXMKKyMgdGhhdCB5b3Ugc2V0IGF1dG8tbmwgdG8gIm9uIiwgaWYgeW91IHNldCBpdCBvZmYgdXNlIHZ0MTAwLW5hbQorIyBiZWxvdy4KKyMKKyMgVGhlIHBhZGRpbmcgcmVxdWlyZW1lbnRzIGxpc3RlZCBoZXJlIGFyZSBndWVzc2VzLiBJdCBpcyBzdHJvbmdseQorIyByZWNvbW1lbmRlZCB0aGF0IHhvbi94b2ZmIGJlIGVuYWJsZWQsIGFzIHRoaXMgaXMgYXNzdW1lZCBoZXJlLgorIworIyBUaGUgdnQxMDAgdXNlcyA8cnMyPiBhbmQgPHJmPiByYXRoZXIgdGhhbiA8aXMyPi88dGJjPi88aHRzPiBiZWNhdXNlIHRoZQorIyB0YWIgc2V0dGluZ3MgYXJlIGluIG5vbi12b2xhdGlsZSBtZW1vcnkgYW5kIGRvbid0IG5lZWQgdG8gYmUKKyMgcmVzZXQgdXBvbiBsb2dpbi4gQWxzbyBzZXR0aW5nIHRoZSBudW1iZXIgb2YgY29sdW1ucyBnbGl0Y2hlcworIyB0aGUgc2NyZWVuIGFubm95aW5nbHkuIFlvdSBjYW4gdHlwZSAicmVzZXQiIHRvIGdldCB0aGVtIHNldC4KKyMKKyMgVGhlIFZUMTAwIHNlcmllcyB0ZXJtaW5hbHMgaGF2ZSBjdXJzb3IgKCJhcnJvd3MiKSBrZXlzIHdoaWNoIGNhbiBvcGVyYXRlCisjIGluIHR3byBkaWZmZXJlbnQgbW9kZXM6IEN1cnNvciBNb2RlIGFuZCBBcHBsaWNhdGlvbiBNb2RlLiAgQ3Vyc29yIE1vZGUKKyMgaXMgdGhlIHJlc2V0IHN0YXRlLCBhbmQgaXMgYXNzdW1lZCB0byBiZSB0aGUgbm9ybWFsIHN0YXRlLiAgQXBwbGljYXRpb24KKyMgTW9kZSBpcyB0aGUgInNldCIgc3RhdGUuICBJbiBDdXJzb3IgTW9kZSwgdGhlIGN1cnNvciBrZXlzIHRyYW5zbWl0CisjICJFc2MgWyB7Y29kZX0iIHNlcXVlbmNlcywgY29uZm9ybWluZyB0byBBTlNJIHN0YW5kYXJkcy4gIEluIEFwcGxpY2F0aW9uCisjIE1vZGUsIHRoZSBjdXJzb3Iga2V5cyB0cmFuc21pdCAiRXNjIE8gPGNvZGU+IiBzZXF1ZW5jZXMuICBBcHBsaWNhdGlvbiBNb2RlCisjIHdhcyBwcm92aWRlZCBwcmltYXJpbHkgYXMgYW4gYWlkIHRvIHRoZSBwb3J0aW5nIG9mIFZUNTIgYXBwbGljYXRpb25zLiAgSXQgaXMKKyMgYXNzdW1lZCB0aGF0IHRoZSBjdXJzb3Iga2V5cyBhcmUgbm9ybWFsbHkgaW4gQ3Vyc29yIE1vZGUsIGFuZCBleHBlY3RlZCB0aGF0CisjIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHZpIHdpbGwgYWx3YXlzIHRyYW5zbWl0IHRoZSA8c21reD4gc3RyaW5nLiAgVGhlcmVmb3JlLAorIyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBjdXJzb3Iga2V5cyBhcmUgbWFkZSB0byBtYXRjaCB3aGF0IHRoZSB0ZXJtaW5hbAorIyB0cmFuc21pdHMgYWZ0ZXIgdGhlIDxzbWt4PiBzdHJpbmcgaXMgdHJhbnNtaXR0ZWQuICBJZiB0aGUgPHNta3g+IHN0cmluZworIyBpcyBhIG51bGwgc3RyaW5nIG9yIGlzIG5vdCBkZWZpbmVkLCB0aGVuIGN1cnNvciBrZXlzIGFyZSBhc3N1bWVkIHRvIGJlIGluCisjICJDdXJzb3IgTW9kZSIsIGFuZCB0aGUgY3Vyc29yIGtleXMgZGVmaW5pdGlvbnMgc2hvdWxkIG1hdGNoIHRoYXQgYXNzdW1wdGlvbiwKKyMgZWxzZSB0aGUgYXBwbGljYXRpb24gbWF5IGZhaWwuICBJdCBpcyBhbHNvIGV4cGVjdGVkIHRoYXQgYXBwbGljYXRpb25zIHdpbGwKKyMgYWx3YXlzIHRyYW5zbWl0IHRoZSA8cm1reD4gc3RyaW5nIHRvIHRoZSB0ZXJtaW5hbCBiZWZvcmUgdGhleSBleGl0LgorIworIyBUaGUgVlQxMDAgc2VyaWVzIHRlcm1pbmFscyBoYXZlIGFuIGF1eGlsaWFyeSBrZXlwYWQsIGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzCisjIHRoZSAiTnVtZXJpYyBLZXlwYWQiLCBiZWNhdXNlIGl0IGlzIGEgY2x1c3RlciBvZiBudW1lcmljIGFuZCBmdW5jdGlvbiBrZXlzLgorIyBUaGUgTnVtZXJpYyBLZXlwYWQgd2hpY2ggY2FuIG9wZXJhdGUgaW4gdHdvIGRpZmZlcmVudCBtb2RlczogTnVtZXJpYyBNb2RlIGFuZAorIyBBcHBsaWNhdGlvbiBNb2RlLiAgTnVtZXJpYyBNb2RlIGlzIHRoZSByZXNldCBzdGF0ZSwgYW5kIGlzIGFzc3VtZWQgdG8gYmUKKyMgdGhlIG5vcm1hbCBzdGF0ZS4gIEFwcGxpY2F0aW9uIE1vZGUgaXMgdGhlICJzZXQiIHN0YXRlLiAgSW4gTnVtZXJpYyBNb2RlLAorIyB0aGUgbnVtZXJpYyBhbmQgcHVuY3R1YXRpb24ga2V5cyB0cmFuc21pdCBBU0NJSSA3LWJpdCBjaGFyYWN0ZXJzLCBhbmQgdGhlCisjIEVudGVyIGtleSB0cmFuc21pdHMgdGhlIHNhbWUgYXMgdGhlIFJldHVybiBrZXkgKE5vdGU6IHRoZSBSZXR1cm4ga2V5CisjIGNhbiBiZSBjb25maWd1cmVkIHRvIHNlbmQgZWl0aGVyIExGIChcMDE1KSBvciBDUiBMRikuICBJbiBBcHBsaWNhdGlvbiBNb2RlLAorIyBhbGwgdGhlIGtleXBhZCBrZXlzIHRyYW5zbWl0ICJFc2MgTyB7Y29kZX0iIHNlcXVlbmNlcy4gIFRoZSBQRjEgLSBQRjQga2V5cworIyBhbHdheXMgc2VuZCB0aGUgc2FtZSAiRXNjIE8ge2NvZGV9IiBzZXF1ZW5jZXMuICBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGtleXBhZAorIyBpcyBub3JtYWxseSBpbiBOdW1lcmljIE1vZGUuICBJZiBhbiBhcHBsaWNhdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBrZXlwYWQgYmUKKyMgaW4gQXBwbGljYXRpb24gTW9kZSB0aGVuIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHVzZXIsIG9yIHRoZSBhcHBsaWNhdGlvbiwKKyMgd2lsbCBzZXQgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcG9pbnQgdG8gYSB0ZXJtaW5mbyBlbnRyeSB3aGljaCBoYXMKKyMgZGVmaW5lZCB0aGUgPHNta3g+IHN0cmluZyB0byBpbmNsdWRlIHRoZSBjb2RlcyB0aGF0IHN3aXRjaCB0aGUga2V5cGFkIGludG8KKyMgQXBwbGljYXRpb24gTW9kZSwgYW5kIHRoZSB0ZXJtaW5mbyBlbnRyeSB3aWxsIGFsc28gZGVmaW5lIGZ1bmN0aW9uIGtleQorIyBmaWVsZHMgdG8gbWF0Y2ggdGhlIEFwcGxpY2F0aW9uIE1vZGUgY29udHJvbCBjb2Rlcy4gIElmIHRoZSA8c21reD4gc3RyaW5nCisjIGlzIGEgbnVsbCBzdHJpbmcgb3IgaXMgbm90IGRlZmluZWQsIHRoZW4gdGhlIGtleXBhZCBpcyBhc3N1bWVkIHRvIGJlIGluCisjIE51bWVyaWMgTW9kZS4gIElmIHRoZSA8c21reD4gc3RyaW5nIHN3aXRjaGVzIHRoZSBrZXlwYWQgaW50byBBcHBsaWNhdGlvbgorIyBNb2RlLCBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSA8cm1reD4gc3RyaW5nIHdpbGwgY29udGFpbiB0aGUgY29udHJvbCBjb2RlcworIyBuZWNlc3NhcnkgdG8gcmVzZXQgdGhlIGtleXBhZCB0byAiTm9ybWFsIiBtb2RlLCBhbmQgaXQgaXMgYWxzbyBleHBlY3RlZCB0aGF0CisjIGFwcGxpY2F0aW9ucyB3aGljaCB0cmFuc21pdCB0aGUgPHNta3g+IHN0cmluZyB3aWxsIGFsc28gYWx3YXlzIHRyYW5zbWl0IHRoZQorIyA8cm1reD4gc3RyaW5nIHRvIHRoZSB0ZXJtaW5hbCBiZWZvcmUgdGhleSBleGl0LgorIworIyBIZXJlJ3MgYSBkaWFncmFtIG9mIHRoZSBWVDEwMCBrZXlwYWQga2V5cyB3aXRoIHRoZWlyIGJpbmRpbmdzLgorIyBUaGUgdG9wIGxpbmUgaXMgdGhlIG5hbWUgb2YgdGhlIGtleSAoc29tZSBERUMga2V5Ym9hcmRzIGhhdmUgdGhlIGtleXMKKyMgbGFiZWxsZWQgc29tZXdoYXQgZGlmZmVyZW50bHksIGxpa2UgR09MRCBpbnN0ZWFkIG9mIFBGMSwgYnV0IHRoaXMgaXMKKyMgdGhlIG1vc3QgIm9mZmljaWFsIiBuYW1lKS4gIFRoZSBzZWNvbmQgbGluZSBpcyB0aGUgZXNjYXBlIHNlcXVlbmNlIGl0CisjIGdlbmVyYXRlcyBpbiBBcHBsaWNhdGlvbiBLZXlwYWQgbW9kZSAod2hlcmUgIiQiIG1lYW5zIHRoZSBFU0MKKyMgY2hhcmFjdGVyKS4gIFRoZSB0aGlyZCBsaW5lIGNvbnRhaW5zIHR3byBpdGVtcywgZmlyc3QgdGhlIG1hcHBpbmcgb2YKKyMgdGhlIGtleSBpbiB0ZXJtaW5mbywgYW5kIHRoZW4gaW4gdGVybWNhcC4KKyMgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyMgIHwgICBQRjEgICB8ICAgUEYyICAgfCAgIFBGMyAgIHwgICBQRjQgICB8CisjICB8ICAgJE9QICAgfCAgICRPUSAgIHwgICAkT1IgICB8ICAgJE9TICAgfAorIyAgfF9rZjFfX2sxX3xfa2YyX19rMl98X2tmM19fazNffF9rZjRfX2s0X3wKKyMgIHwgICAgNyAgICAgICAgIDggICAgICAgICA5ICAgICAgICAgLSAgICB8CisjICB8ICAgJE93ICAgfCAgICRPeCAgIHwgICAkT3kgICB8ICAgJE9tICAgfAorIyAgfF9rZjlfX2s5X3xfa2YxMF9rO198X2tmMF9fazBffF9fX19fX19fX3wKKyMgIHwgICAgNCAgICB8ICAgIDUgICAgfCAgICA2ICAgIHwgICAgLCAgICB8CisjICB8ICAgJE90ICAgfCAgICRPdSAgIHwgICAkT3YgICB8ICAgJE9sICAgfAorIyAgfF9rZjVfX2s1X3xfa2Y2X19rNl98X2tmN19fazdffF9rZjhfX2s4X3wKKyMgIHwgICAgMSAgICB8ICAgIDIgICAgfCAgICAzICAgIHwgICAgICAgICB8CisjICB8ICAgJE9xICAgfCAgICRPciAgIHwgICAkT3MgICB8ICBlbnRlciAgfAorIyAgfF9rYTFfX0sxX3xfa2IyX19LMl98X2thM19fSzNffCAgJE9NICAgIHwKKyMgIHwgICAgICAgICAwICAgICAgICAgfCAgIC4gICAgIHwgICAgICAgICB8CisjICB8ICAgICAgICAkT3AgICAgICAgIHwgICRPbiAgICB8ICAgICAgICAgfAorIyAgfF9fX2tjMV9fX19fX19LNF9fX198X2tjM19fSzVffF9rZW50X0A4X3wKKyMKKyMgTm90ZSBob3dldmVyLCB0aGF0IHRoZSBhcnJhbmdlbWVudCBvZiB0aGUgNS1rZXkga2ExLWtjMyBkbyBub3QgZm9sbG93IHRoZQorIyB0ZXJtaW5mbyBndWlkZWxpbmVzLiAgVGhhdCBpcyBhIGNvbXByb21pc2UgdXNlZCB0byBhc3NpZ24gdGhlIHJlbWFpbmluZworIyBrZXlzIG9uIHRoZSBrZXlwYWQgdG8ga2Y1LWtmMCwgdXNlZCBvbiBvbGRlciBzeXN0ZW1zIHdpdGggbGVnYWN5IHRlcm1jYXAKKyMgc3VwcG9ydDoKK3Z0MTAwK2tleXBhZHxkZWMgdnQxMDAgbnVtZXJpYyBrZXlwYWQgbm8gZmtleXMsCisJa2ExPVxFT3EsIGthMz1cRU9zLCBrYjI9XEVPciwga2MxPVxFT3AsIGtjMz1cRU9uLAordnQxMDArcGZrZXlzfGRlYyB2dDEwMCBudW1lcmljIGtleXBhZCwKKwlrZW50PVxFT00sIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLAorCXVzZT12dDEwMCtrZXlwYWQsCit2dDEwMCtmbmtleXN8ZGVjIHZ0MTAwIG51bWVyaWMga2V5cGFkLAorCWtmMD1cRU95LCBrZjEwPVxFT3gsIGtmNT1cRU90LCBrZjY9XEVPdSwga2Y3PVxFT3YsIGtmOD1cRU9sLAorCWtmOT1cRU93LCB1c2U9dnQxMDArcGZrZXlzLAorIworIyBBIGJldHRlciBhZGFwdGF0aW9uIHRvIG1vZGVybiBrZXlib2FyZHMgc3VjaCBhcyB0aGUgUEMncywgd2hpY2ggaGF2ZSBhIGRvemVuCisjIGZ1bmN0aW9uIGtleXMgYW5kIHRoZSBrZXlwYWQgMiw0LDYsOCBrZXlzIGFyZSBsYWJlbGVkIHdpdGggYXJyb3dzIGtleXMsIGlzIHRvCisjIHVzZSB0aGUgNS1rZXkgYXJyYW5nZW1lbnQgdG8gbW9kZWwgdGhlIGFycm93IGtleXMgYXMgc3VnZ2VzdGVkIGluIHRoZQorIyB0ZXJtaW5mbyBndWlkZWxpbmVzOgorIyAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworIyAgfCAgIFBGMSAgIHwgICBQRjIgICB8ICAgUEYzICAgfCAgIFBGNCAgIHwKKyMgIHwgICAkT1AgICB8ICAgJE9RICAgfCAgICRPUiAgIHwgICAkT1MgICB8CisjICB8X2tmMV9fazFffF9rZjJfX2syX3xfa2YzX19rM198X2tmNF9fazRffAorIyAgfCAgICA3ICAgICAgICAgOCAgICAgICAgIDkgICAgICAgICAtICAgIHwKKyMgIHwgICAkT3cgICB8ICAgJE94ICAgfCAgICRPeSAgIHwgICAkT20gICB8CisjICB8X2thMV9fSzFffF9fX19fX19fX3xfa2EzX19LM198X19fX19fX19ffAorIyAgfCAgICA0ICAgIHwgICAgNSAgICB8ICAgIDYgICAgfCAgICAsICAgIHwKKyMgIHwgICAkT3QgICB8ICAgJE91ICAgfCAgICRPdiAgIHwgICAkT2wgICB8CisjICB8X19fX19fX19ffF9rYjJfX0syX3xfX19fX19fX198X19fX19fX19ffAorIyAgfCAgICAxICAgIHwgICAgMiAgICB8ICAgIDMgICAgfCAgICAgICAgIHwKKyMgIHwgICAkT3EgICB8ICAgJE9yICAgfCAgICRPcyAgIHwgIGVudGVyICB8CisjICB8X2tjMV9fSzRffF9fX19fX19fX3xfa2MzX19LNV98ICAkT00gICAgfAorIyAgfCAgICAgICAgIDAgICAgICAgICB8ICAgLiAgICAgfCAgICAgICAgIHwKKyMgIHwgICAgICAgICRPcCAgICAgICAgfCAgJE9uICAgIHwgICAgICAgICB8CisjICB8X19fX19fX19fX19fX19fX19fX3xfX19fX19fX198X2tlbnRfQDhffAorIwordnQyMjAra2V5cGFkfGRlYyB2dDIyMCBudW1lcmljIGtleXBhZCwKKwlrYTE9XEVPdywga2EzPVxFT3ksIGtiMj1cRU91LCBrYzE9XEVPcSwga2MzPVxFT3MsIGtlbnQ9XEVPTSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2EyPVxFT3gsIGtiMT1cRU90LAorCWtiMz1cRU92LCBrYzI9XEVPciwKKyMKK3Z0MTAwK2VucXxuY3Vyc2VzIGV4dGVuc2lvbiBmb3IgdnQxMDAtc3R5bGUgRU5RLAorCXU4PVxFWz8xOzJjLCB1c2U9YW5zaStlbnEsCit2dDEwMitlbnF8bmN1cnNlcyBleHRlbnNpb24gZm9yIHZ0MTAyLXN0eWxlIEVOUSwKKwl1OD1cRVs/NmMsIHVzZT1hbnNpK2VucSwKKyMKKyMgQW5kIGhlcmUsIGZvciB0aG9zZSBvZiB5b3Ugd2l0aCBvcnBoYW5lZCBWVDEwMHMgbGFja2luZyBkb2N1bWVudGF0aW9uLCBpcworIyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBzb2Z0IHN3aXRjaGVzIGludm9rZWQgd2hlbiB5b3UgZG8gYFNldCBVcCcuCisjCisjICBTY3JvbGwgMC1KdW1wICAgICAgICAgICAgICAgU2hpZnRlZCAzICAgMC0jCisjICB8ICAgICAgMS1TbW9vdGggICAgICAgICAgICAgfCAgICAgICAgICAgMS1Ccml0aXNoIHBvdW5kIHNpZ24KKyMgIHwgQXV0b3JlcGVhdCAwLU9mZiAgICAgICAgICB8IFdyYXAgQXJvdW5kIDAtT2ZmCisjICB8IHwgICAgICAgICAgMS1PbiAgICAgICAgICAgfCB8ICAgICAgICAgICAxLU9uCisjICB8IHwgU2NyZWVuIDAtRGFyayBCa2cgICAgICAgfCB8IE5ldyBMaW5lIDAtT2ZmCisjICB8IHwgfCAgICAgIDEtTGlnaHQgQmtnICAgICAgfCB8IHwgICAgICAgIDEtT24KKyMgIHwgfCB8IEN1cnNvciAwLVVuZGVybGluZSAgICB8IHwgfCBJbnRlcmxhY2UgMC1PZmYKKyMgIHwgfCB8IHwgICAgICAxLUJsb2NrICAgICAgICB8IHwgfCB8ICAgICAgICAgMS1PbgorIyAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgfCB8IHwKKyMgIDEgMSAwIDEgICAgICAgMSAxIDEgMSAgICAgICAwIDEgMCAwICAgICAgIDAgMCAxIDAgICAgICAgPC0tU3RhbmRhcmQgU2V0dGluZ3MKKyMgICAgICAgICAgICAgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgfCB8IHwKKyMgICAgICAgICAgICAgICAgfCB8IHwgQXV0byBYT04vWE9GRiAwLU9mZiAgIHwgfCB8IFBvd2VyIDAtNjAgSHoKKyMgICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAxLU9uICAgIHwgfCB8ICAgICAgIDEtNTAgSHoKKyMgICAgICAgICAgICAgICAgfCB8IEFuc2kvVlQ1MiAwLVZUNTIgICAgICAgIHwgfCBCaXRzIFBlciBDaGFyLiAwLTcgQml0cworIyAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgIDEtQU5TSSAgICAgICAgfCB8ICAgICAgICAgICAgICAgIDEtOCBCaXRzCisjICAgICAgICAgICAgICAgIHwgS2V5Y2xpY2sgMC1PZmYgICAgICAgICAgICB8IFBhcml0eSAwLU9mZgorIyAgICAgICAgICAgICAgICB8ICAgICAgICAgIDEtT24gICAgICAgICAgICAgfCAgICAgICAgMS1PbgorIyAgICAgICAgICAgICAgICBNYXJnaW4gQmVsbCAwLU9mZiAgICAgICAgICAgUGFyaXR5IFNlbnNlIDAtT2RkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEtT24gICAgICAgICAgICAgICAgICAgICAgICAgMS1FdmVuCisjCisjIFRoZSBmb2xsb3dpbmcgU0VULVVQIG1vZGVzIGFyZSBhc3N1bWVkIGZvciBub3JtYWwgb3BlcmF0aW9uOgorIwlBTlNJX01PREUJQVVUT19YT04vWE9GRl9PTglORVdMSU5FX09GRgk4MF9DT0xVTU5TCisjCVdSQVBfQVJPVU5EX09OICBKVU1QX1NDUk9MTF9PRkYKKyMgT3RoZXIgU0VULVVQIG1vZGVzIG1heSBiZSBzZXQgZm9yIG9wZXJhdG9yIGNvbnZlbmllbmNlIG9yIGNvbW11bmljYXRpb24KKyMgcmVxdWlyZW1lbnRzOyBJIHJlY29tbWVuZAorIwlBVVRPUkVQRUFUX09OCUJMT0NLX0NVUlNPUglNQVJHSU5fQkVMTF9PRkYgICAgU0hJRlRFRF8zXyMKKyMgVW5sZXNzIHlvdSBoYXZlIGEgZ3JhcGhpY3MgYWRkLW9uIHN1Y2ggYXMgRGlnaXRhbCBFbmdpbmVlcmluZydzIFZUNjQwCisjIChhbmQgZXZlbiB0aGVuLCB3aGVuZXZlciBpdCBjYW4gYmUgYXJyYW5nZWQhKSB5b3Ugc2hvdWxkIHNldAorIwlJTlRFUkxBQ0VfT0ZGCisjCisjICh2dDEwMDogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZywgYWxzbyA8T1Ricz4uIC0tIGVzcikKK3Z0MTAwfHZ0MTAwLWFtfGRlYyB2dDEwMCAody9hZHZhbmNlZCB2aWRlbyksCisJT1RicywgYW0sIG1jNWksIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbSiQ8NTA+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDJDwyPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSQ8Mj4sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGVsMT1cRVsxSyQ8Mz4sCisJZW5hY3M9XEUoQlxFKTAsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGluZD1eSiwga2JzPV5ILAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGxmMT1wZjEsCisJbGYyPXBmMiwgbGYzPXBmMywgbGY0PXBmNCwgbWMwPVxFWzBpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwKKwlyYz1cRTgsIHJldj1cRVs3bSQ8Mj4sIHJpPVxFTSQ8NT4sIHJtYWNzPV5PLCBybWFtPVxFWz83bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttJDwyPiwgcm11bD1cRVttJDwyPiwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOyQ8Mj4sCisJc2dyMD1cRVttXDAxNyQ8Mj4sIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sCisJc21zbz1cRVs3bSQ8Mj4sIHNtdWw9XEVbNG0kPDI+LCB0YmM9XEVbM2csCisJdXNlPXZ0MTAwK2Zua2V5cywKK3Z0MTAwbmFtfHZ0MTAwLW5hbXx2dDEwMCBubyBhdXRvbWFyZ2lucywKKwlhbUAsIHhlbmxALCB1c2U9dnQxMDAtYW0sCit2dDEwMC12YnxkZWMgdnQxMDAgKHcvYWR2YW5jZWQgdmlkZW8pICYgbm8gYmVlcCwKKwliZWxALCBmbGFzaD1cRVs/NWhcRVs/NWwsIHVzZT12dDEwMCwKKworIyBPcmRpbmFyeSB2dDEwMCBpbiAxMzIgY29sdW1uICgid2lkZSIpIG1vZGUuCit2dDEwMC13fHZ0MTAwLXctYW18ZGVjIHZ0MTAwIDEzMiBjb2xzICh3L2FkdmFuY2VkIHZpZGVvKSwKKwljb2xzIzEzMiwgbGluZXMjMjQsCisJcnMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz84aCwgdXNlPXZ0MTAwLWFtLAordnQxMDAtdy1uYW18dnQxMDAtbmFtLXd8ZGVjIHZ0MTAwIDEzMiBjb2xzICh3L2FkdmFuY2VkIHZpZGVvIG5vIGF1dG9tYXJnaW4pLAorCWNvbHMjMTMyLCBsaW5lcyMxNCwgdnRALAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/OGgsIHVzZT12dDEwMC1uYW0sCisKKyMgdnQxMDAgd2l0aCBubyBhZHZhbmNlZCB2aWRlby4KK3Z0MTAwLW5hdnx2dDEwMCB3aXRob3V0IGFkdmFuY2VkIHZpZGVvIG9wdGlvbiwKKwl4bWMjMSwKKwlibGlua0AsIGJvbGRALCByZXZALCBybXNvPVxFW20sIHJtdWxALCBzZ3JALCBzZ3IwQCwgc21zbz1cRVs3bSwKKwlzbXVsQCwgdXNlPXZ0MTAwLAordnQxMDAtbmF2LXd8dnQxMDAtdy1uYXZ8ZGVjIHZ0MTAwIDEzMiBjb2xzIDE0IGxpbmVzIChubyBhZHZhbmNlZCB2aWRlbyBvcHRpb24pLAorCWNvbHMjMTMyLCBsaW5lcyMxNCwgdXNlPXZ0MTAwLW5hdiwKKworIyB2dDEwMCB3aXRoIG9uZSBvZiB0aGUgMjQgbGluZXMgdXNlZCBhcyBhIHN0YXR1cyBsaW5lLgorIyBXZSBwdXQgdGhlIHN0YXR1cyBsaW5lIG9uIHRoZSB0b3AuCit2dDEwMC1zfHZ0MTAwLXMtdG9wfHZ0MTAwLXRvcC1zfHZ0MTAwIGZvciB1c2Ugd2l0aCB0b3Agc3lzbGluZSwKKwllc2xvaywgaHMsCisJbGluZXMjMjMsCisJY2xlYXI9XEVbMjsxSFxFW0okPDUwPiwgY3NyPVxFWyVpJWklcDElZDslcDIlZHIsCisJY3VwPVxFWyVpJXAxJXsxfSUrJWQ7JXAyJWRIJDw1PiwgZHNsPVxFN1xFWzE7MjRyXEU4LAorCWZzbD1cRTgsIGhvbWU9XEVbMjsxSCwgaXMyPVxFN1xFWzI7MjRyXEU4LAorCXRzbD1cRTdcRVsxOyVwMSVkSFxFWzFLLCB1c2U9dnQxMDAtYW0sCisKKyMgU3RhdHVzIGxpbmUgYXQgYm90dG9tLgorIyBDbGVhcmluZyB0aGUgc2NyZWVuIHdpbGwgY2xvYmJlciBzdGF0dXMgbGluZS4KK3Z0MTAwLXMtYm90fHZ0MTAwLWJvdC1zfHZ0MTAwIGZvciB1c2Ugd2l0aCBib3R0b20gc3lzbGluZSwKKwllc2xvaywgaHMsCisJbGluZXMjMjMsCisJZHNsPVxFN1xFWzE7MjRyXEU4LCBmc2w9XEU4LCBpczI9XEVbMTsyM3JcRVsyMzsxSCwKKwl0c2w9XEU3XEVbMjQ7JXAxJWRIXEVbMUssIHVzZT12dDEwMC1hbSwKKworIyBNb3N0IG9mIHRoZSBgdnQxMDAnIGVtdWxhdG9ycyBvdXQgdGhlcmUgYWN0dWFsbHkgZW11bGF0ZSBhIHZ0MTAyCisjIFRoaXMgZW50cnkgKG9yIHZ0MTAyLW5zZ3IpIGlzIHByb2JhYmx5IHRoZSByaWdodCB0aGluZyB0byB1c2UgZm9yCisjIHRoZXNlLgordnQxMDJ8ZGVjIHZ0MTAyLAorCWRjaDE9XEVbUCwgZGwxPVxFW00sIGlsMT1cRVtMLCBybWlyPVxFWzRsLCBzbWlyPVxFWzRoLAorCXVzZT12dDEwMCwKK3Z0MTAyLXd8ZGVjIHZ0MTAyIGluIHdpZGUgbW9kZSwKKwljb2xzIzEzMiwKKwlyczM9XEVbPzNoLCB1c2U9dnQxMDIsCisKKyMgTWFueSBicmFpbi1kZWFkIFBDIGNvbW0gcHJvZ3JhbXMgdGhhdCBwcmV0ZW5kIHRvIGJlIGB2dDEwMC1jb21wYXRpYmxlJworIyBmYWlsIHRvIGludGVycHJldCB0aGUgXk8gYW5kIF5OIGVzY2FwZXMgcHJvcGVybHkuICBTeW1wdG9tOiB0aGUgPHNncjA+CisjIHN0cmluZyBpbiB0aGUgY2Fub25pY2FsIHZ0MTAwIGVudHJ5IGFib3ZlIGxlYXZlcyB0aGUgc2NyZWVuIGxpdHRlcmVkCisjIHdpdGggbGl0dGxlICBzbm93Zmxha2Ugb3Igc3RhciBjaGFyYWN0ZXJzIChJQk0gUEMgUk9NIGNoYXJhY3RlciBcMDE3ID0gXk8pCisjIGFmdGVyIGhpZ2hsaWdodCB0dXJub2Zmcy4gIFRoaXMgZW50cnkgc2hvdWxkIGZpeCB0aGF0LCBhbmQgZXZlbiBsZWF2ZQorIyBBQ1Mgc3VwcG9ydCB3b3JraW5nLCBhdCB0aGUgY29zdCBvZiBtYWtpbmcgbXVsdGlwbGUtaGlnaGxpZ2h0IGNoYW5nZXMKKyMgc2xpZ2h0bHkgbW9yZSBleHBlbnNpdmUuCisjIEZyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiBKdWx5IDIyIDE5OTUKK3Z0MTAyLW5zZ3J8dnQxMDIgbm8gc2dyICh1c2UgaWYgeW91IHNlZSBzbm93Zmxha2VzIGFmdGVyIGhpZ2hsaWdodCBjaGFuZ2VzKSwKKwlzZ3JALCBzZ3IwPVxFW20sIHVzZT12dDEwMiwKKworIyBWVDEyNSBHcmFwaGljcyBDUlQuICBDbGVhciBzY3JlZW4gYWxzbyBlcmFzZXMgZ3JhcGhpY3MKKyMgU29tZSB2dDEyNSdzIGNhbWUgY29uZmlndXJlZCB3aXRoIHZ0MTAyIHN1cHBvcnQuCit2dDEyNXx2dDEyNSBncmFwaGljcyB0ZXJtaW5hbCwKKwltaXIsCisJY2xlYXI9XEVbSFxFWzJKXEVQcFMoRSlcRVxcJDw1MD4sIHVzZT12dDEwMCwKKworIyBUaGlzIGlzbid0IGEgREVDIGVudHJ5LCBpdCBjYW1lIGZyb20gVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4uCisjICh2dDEzMTogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZywgYWxzbyA8T1Ricz4gLS0gZXNyKQordnQxMzF8ZGVjIHZ0MTMxLAorCU9UYnMsIGFtLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDIvPiwgYm9sZD1cRVsxbSQ8Mi8+LAorCWNsZWFyPVxFWztIXEVbMkokPDUwLz4sIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDJDwyLz4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1Lz4sIGN1dTE9XEVbQSQ8Mi8+LAorCWVkPVxFW0okPDUwLz4sIGVsPVxFW0skPDMvPiwgaG9tZT1cRVtILCBodD1eSSwKKwlpczI9XEVbMTsyNHJcRVsyNDsxSCwga2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLAorCWtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsCisJa2Y0PVxFT1MsIG5lbD1eTV5KLCByYz1cRTgsIHJldj1cRVs3bSQ8Mi8+LCByaT1cRU0kPDUvPiwKKwlybWFtPVxFWz83aCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSQ8Mi8+LAorCXJtdWw9XEVbbSQ8Mi8+LAorCXJzMT1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywKKwlzZ3IwPVxFW20kPDIvPiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbN20kPDIvPiwgc211bD1cRVs0bSQ8Mi8+LAorCisjIHZ0MTMyIC0gbGlrZSB2dDEwMCBidXQgc2xvd2VyIGFuZCBoYXMgaW5zL2RlbCBsaW5lIGFuZCBzdWNoLgorIyBJJ20gdG9sZCB0aGF0IDxzbWlyPi88cm1pcj4gYXJlIGJhY2t3YXJkcyBpbiB0aGUgdGVybWluYWwgZnJvbSB0aGUKKyMgbWFudWFsIGFuZCBmcm9tIHRoZSBBTlNJIHN0YW5kYXJkLCB0aGlzIGRlc2NyaWJlcyB0aGUgYWN0dWFsCisjIHRlcm1pbmFsLiBJJ3ZlIG5ldmVyIGFjdHVhbGx5IHVzZWQgYSB2dDEzMiBteXNlbGYsIHNvIHRoaXMKKyMgaXMgdW50ZXN0ZWQuCisjCit2dDEzMnxERUMgdnQxMzIsCisJeGVubCwKKwlkY2gxPVxFW1AkPDc+LCBkbDE9XEVbTSQ8OTk+LCBpbDE9XEVbTCQ8OTk+LCBpbmQ9XG4kPDMwPiwKKwlpcD0kPDc+LCBybWlyPVxFWzRoLCBzbWlyPVxFWzRsLCB1c2U9dnQxMDAsCisKKyMgVGhpcyB2dDIyMCBkZXNjcmlwdGlvbiBtYXBzIEY1LS1GOSB0byB0aGUgc2Vjb25kIGJsb2NrIG9mIGZ1bmN0aW9uIGtleXMKKyMgYXQgdGhlIHRvcCBvZiB0aGUga2V5Ym9hcmQuICBUaGUgIkRPIiBrZXkgaXMgdXNlZCBhcyBGMTAgdG8gYXZvaWQgY29uZmxpY3QKKyMgd2l0aCB0aGUga2V5IG1hcmtlZCAoRVNDKSBvbiB0aGUgdnQyMjAuICBTZWUgdnQyMjBkIGZvciBhbiBhbHRlcm5hdGUgbWFwcGluZy4KKyMgUEYxLS1QRjQgYXJlIHVzZWQgYXMgRjEtLUY0LgorIwordnQyMjAtb2xkfHZ0MjAwLW9sZHxERUMgVlQyMjAgaW4gdnQxMDAgZW11bGF0aW9uIG1vZGUsCisJT1RicywgT1RwdCwgYW0sIG1pciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCB2dCMzLAorCU9Ubmw9XkosCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyPiwgYm9sZD1cRVsxbSQ8Mj4sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKJDw1MD4sIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwxMD4sIGN1dTE9XEVbQSwgZGNoMT1cRVtQLAorCWRsMT1cRVtNLCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LCBob21lPVxFW0gsIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCBpbDE9XEVbTCwgaW5kPVxFRCQ8MjAvPiwKKwlpczI9XEVbMTsyNHJcRVsyNDsxSCwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LCBrZW5kPVxFWzR+LCBrZjE9XEVPUCwKKwlrZjEwPVxFWzI5fiwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFWzE3fiwKKwlrZjY9XEVbMTh+LCBrZjc9XEVbMTl+LCBrZjg9XEVbMjB+LCBrZjk9XEVbMjF+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIHJjPVxFOCwKKwlyZXY9XEVbN20kPDI+LCByZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwKKwlyaT1cRU0kPDE0Lz4sIHJtYWNzPVxFKEIkPDQ+LCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVxFW20kPDI+LCBzbWFjcz1cRSgwJDwyPiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyBBIG11Y2ggYmV0dGVyIGRlc2NyaXB0aW9uIG9mIHRoZSBWVDIwMC8yMjA7IHVzZWQgdG8gYmUgdnQyMjAtOAorIyBjaGFuZ2VkIHJtYWNzL3NtYWNzIGZyb20gc2hpZnQtaW4vc2hpZnQtb3V0IHRvIHZ0MjAwLW9sZCdzIGV4cGxpY2l0IEcwL0cxCisjIGRlc2lnbmF0aW9uIHRvIGFjY29tbW9kYXRlIGJ1ZyBpbiBwY3Z0IC1URAordnQyMjB8dnQyMDB8ZGVjIHZ0MjIwLAorCU9UYnMsIGFtLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKTAsCisJZmxhc2g9XEVbPzVoJDwyMDAvPlxFWz81bCwgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwKKwlpY2g9XEVbJXAxJWRALCBpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRVs/N2hcRVs+XEVbPzFoXEUgRlxFWz80bCwga2JzPV5ILCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwKKwlrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LCBrZjI9XEVPUSwKKwlrZjIwPVxFWzM0fiwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtmbmQ9XEVbMX4sIGtobHA9XEVbMjh+LAorCWtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3Jkbz1cRVsyOX4sIGtzbHQ9XEVbNH4sCisJbGYxPXBmMSwgbGYyPXBmMiwgbGYzPXBmMywgbGY0PXBmNCwgbWMwPVxFW2ksIG1jND1cRVs0aSwKKwltYzU9XEVbNWksIG5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1hY3M9XEUoQiQ8ND4sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybXNvPVxFWzI3bSwKKwlybXVsPVxFWzI0bSwgcnMxPVxFWz8zbCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVxFW21cRShCLCBzbWFjcz1cRSgwJDwyPiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAordnQyMjAtd3x2dDIwMC13fERFQyB2dDIyMCBpbiB3aWRlIG1vZGUsCisJY29scyMxMzIsCisJcnMzPVxFWz8zaCwgdXNlPXZ0MjIwLAordnQyMjAtOGJpdHx2dDIyMC04fHZ0MjAwLThiaXR8dnQyMDAtOHxkZWMgdnQyMjAvMjAwIGluIDgtYml0IG1vZGUsCisJT1RicywgYW0sIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cMjMzNW0sIGJvbGQ9XDIzMzFtLCBjbGVhcj1cMjMzSFwyMzNKLCBjcj1eTSwKKwljc3I9XDIzMyVpJXAxJWQ7JXAyJWRyLCBjdWI9XDIzMyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XDIzMyVwMSVkQiwgY3VkMT1eSiwgY3VmPVwyMzMlcDElZEMsIGN1ZjE9XDIzM0MsCisJY3VwPVwyMzMlaSVwMSVkOyVwMiVkSCwgY3V1PVwyMzMlcDElZEEsIGN1dTE9XDIzM0EsCisJZGNoPVwyMzMlcDElZFAsIGRjaDE9XDIzM1AsIGRsPVwyMzMlcDElZE0sIGRsMT1cMjMzTSwKKwllY2g9XDIzMyVwMSVkWCwgZWQ9XDIzM0osIGVsPVwyMzNLLCBlbDE9XDIzMzFLLCBlbmFjcz1cRSkwLAorCWZsYXNoPVwyMzM/NWgkPDIwMC8+XDIzMz81bCwgaG9tZT1cMjMzSCwgaHQ9XkksIGh0cz1cRUgsCisJaWNoPVwyMzMlcDElZEAsIGlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLAorCWlsPVwyMzMlcDElZEwsIGlsMT1cMjMzTCwgaW5kPVxFRCwKKwlpczI9XDIzMz83aFwyMzM+XDIzMz8xaFxFIEZcMjMzPzRsLCBrYnM9XkgsCisJa2N1YjE9XDIzM0QsIGtjdWQxPVwyMzNCLCBrY3VmMT1cMjMzQywga2N1dTE9XDIzM0EsCisJa2YxPVxFT1AsIGtmMTA9XDIzMzIxfiwga2YxMT1cMjMzMjN+LCBrZjEyPVwyMzMyNH4sCisJa2YxMz1cMjMzMjV+LCBrZjE0PVwyMzMyNn4sIGtmMTc9XDIzMzMxfiwga2YxOD1cMjMzMzJ+LAorCWtmMTk9XDIzMzMzfiwga2YyPVxFT1EsIGtmMjA9XDIzMzM0fiwga2YzPVxFT1IsIGtmND1cRU9TLAorCWtmNj1cMjMzMTd+LCBrZjc9XDIzMzE4fiwga2Y4PVwyMzMxOX4sIGtmOT1cMjMzMjB+LAorCWtmbmQ9XDIzMzF+LCBraGxwPVwyMzMyOH4sIGtob21lPVwyMzNILCBraWNoMT1cMjMzMn4sCisJa25wPVwyMzM2fiwga3BwPVwyMzM1fiwga3Jkbz1cMjMzMjl+LCBrc2x0PVwyMzM0fiwgbGYxPXBmMSwKKwlsZjI9cGYyLCBsZjM9cGYzLCBsZjQ9cGY0LCBtYzA9XDIzM2ksIG1jND1cMjMzNGksIG1jNT1cMjMzNWksCisJbmVsPVxFRSwgcmM9XEU4LCByZXY9XDIzMzdtLCByaT1cRU0sIHJtYWNzPVxFKEIsCisJcm1hbT1cMjMzPzdsLCBybWlyPVwyMzM0bCwgcm1zbz1cMjMzMjdtLCBybXVsPVwyMzMyNG0sCisJcnMxPVwyMzM/M2wsIHNjPVxFNywKKwlzZ3I9XDIzMzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTskPDI+LAorCXNncjA9XDIzMzBtXEUoQiwgc21hY3M9XEUoMCwgc21hbT1cMjMzPzdoLCBzbWlyPVwyMzM0aCwKKwlzbXNvPVwyMzM3bSwgc211bD1cMjMzNG0sIHRiYz1cMjMzM2csCisKKyMgdnQyMjBkOgorIyBUaGlzIHZ0MjIwIGRlc2NyaXB0aW9uIHJlZ2FyZHMgRjYtLUYxMCBhcyB0aGUgc2Vjb25kIGJsb2NrIG9mIGZ1bmN0aW9uIGtleXMKKyMgYXQgdGhlIHRvcCBvZiB0aGUga2V5Ym9hcmQuICBUaGlzIG1hcHBpbmcgZm9sbG93cyB0aGUgZGVzY3JpcHRpb24gZ2l2ZW4KKyMgaW4gdGhlIFZUMjIwIFByb2dyYW1tZXIgUmVmZXJlbmNlIE1hbnVhbCBhbmQgYWdyZWVzIHdpdGggdGhlIGxhYmVsaW5nCisjIG9uIHNvbWUgdGVybWluYWxzIHRoYXQgZW11bGF0ZSB0aGUgdnQyMjAuICBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciBhbiBGNS4KKyMgU2VlIHZ0MjIwIGZvciBhbiBhbHRlcm5hdGUgbWFwcGluZy4KKyMKK3Z0MjIwZHxERUMgVlQyMjAgaW4gdnQxMDAgbW9kZSB3aXRoIERFQyBmdW5jdGlvbiBrZXkgbGFiZWxpbmcsCisJa2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sCisJa2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sCisJa2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LCBrZjIwPVxFWzM0fiwga2Y1QCwga2Y2PVxFWzE3fiwKKwlrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCB1c2U9dnQyMjAtb2xkLAorCit2dDIyMC1uYW18djIwMC1uYW18VlQyMjAgaW4gdnQxMDAgbW9kZSB3aXRoIG5vIGF1dG8gbWFyZ2lucywKKwlhbUAsCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83bFxFWz84aCwgdXNlPXZ0MjIwLAorCisjIHZ0MjIwIHRlcm1jYXAgd3JpdHRlbiBUdWUgT2N0IDI1IDIwOjQxOjEwIDE5ODggYnkgQWxleCBMYXR6a28KKyMgKG5vdCBhbiBvZmZpY2lhbCBERUMgZW50cnkhKQorIyBUaGUgcHJvYmxlbSB3aXRoIHJlYWwgdnQyMjAgdGVybWluYWxzIGlzIHRoZXkgZG9uJ3Qgc2VuZCBlc2NhcGVzIHdoZW4gaW4KKyMgaW4gdnQyMjAgbW9kZS4gIFRoaXMgY2FuIGJlIGdvdHRlbiBhcm91bmQgdHdvIHdheXMuICAxPiBkb24ndCBzZW5kCisjIGVzY2FwZXMgb3IgMj4gcHV0IHRoZSB2dDIyMCBpbnRvIHZ0MTAwIG1vZGUgYW5kIHVzZSBhbGwgdGhlIG5pZnR5CisjIGZlYXR1cmVzIG9mIHZ0MTAwIGFkdmFuY2VkIHZpZGVvIHdoaWNoIGl0IHRoZW4gaGFzLgorIworIyBUaGlzIGVudHJ5IHRha2VzIHRoZSB2aWV3IG9mIHB1dHRpbmcgYSB2dDIyMCBpbnRvIHZ0MTAwIG1vZGUgc28KKyMgeW91IGNhbiB1c2UgdGhlIGVzY2FwZSBrZXkgaW4gZW1hY3MgYW5kIGV2ZXJ5dGhpbmcgZWxzZSB3aGljaCBuZWVkcyBpdC4KKyMKKyMgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMgb24gYSBWTVMgbWFjaGluZSBzaW5jZSBWTVMgd2lsbCB0aGluaworIyBpdCBoYXMgYSB2dDIyMCBhbmQgd2lsbCBnZXQgZm91bGVkIHVwIGNvbWluZyBvdXQgb2YgZW1hY3MKKyMKKyMgRnJvbTogQWxleGFuZGVyIExhdHprbyA8bGF0emtvQG1hcnNlbml1cy5ydXRnZXJzLmVkdT4sIDMwIERlYyAxOTk2CisjIChBZGRlZCB2dDEwMCA8cmM+LDxzYz4gdG8gcXVpZXQgYSB0aWMgd2FybmluZyAtLSBlc3IpCit2dDIwMC1qc3x2dDIyMC1qc3xkZWMgdnQyMDAgc2VyaWVzIHdpdGgganVtcCBzY3JvbGwsCisJYW0sCisJY29scyM4MCwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWRjaDE9XEVbUCwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksCisJaWwxPVxFW0wsIGluZD1cRUQsCisJaXMyPVxFWzYxInBcRVtIXEVbPzNsXEVbPzRsXEVbPzFsXEVbPzVsXEVbPzZsXEVbPzdoXEVbPzhoXEVbPzI1aFxFPlxFW20sCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBuZWw9Xk1cRUQsIHJjPVxFOCwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgcmk9XEVNLCBybWRjPSwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20kPDUvPiwgcm11bD1cRVsyNG0sCisJcnMxPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LCBzbWRjPSwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSQ8NS8+LCBzbXVsPVxFWzRtLAorCisjIFRoaXMgd2FzIERFQydzIHZ0MzIwLiAgVXNlIHRoZSBwdXJwb3NlLWJ1aWx0IG9uZSBiZWxvdyBpbnN0ZWFkCisjdnQzMjB8REVDIFZUMzIwIGluIHZ0MTAwIGVtdWxhdGlvbiBtb2RlLAorIwl1c2U9dnQyMjAsCisKKyMgVXNlIHYzMjBuIGZvciBTQ08ncyBMWVJJWC4gIE90aGVyd2lzZSwgdXNlIEFkYW0gVGhvbXBzb24ncyB2dDMyMC1uYW0uCisjCit2dDMyMG5hbXx2MzIwbnxERUMgVlQzMjAgaW4gdnQxMDAgZW11bC4gbW9kZSB3aXRoIE5PIEFVVE8gV1JBUCBtb2RlLAorCWFtQCwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdsXEVbPzhoLCB1c2U9dnQyMjAsCisKKyMgVGhlc2UgZW50cmllcyBhcmUgbm90IERFQydzIG9mZmljaWFsIG9uZXMsIHRoZXkgd2VyZSBwdXJwb3NlLWJ1aWx0IGZvciB0aGUKKyMgVlQzMjAuICBIZXJlIGFyZSB0aGUgZGVzaWduZXIncyBub3RlczoKKyMgPGtlbD4gaXMgZW5kIG9uIGEgUEMga2JkLiAgQWN0dWFsbHkgJ3NlbGVjdCcgb24gYSBWVC4gIE1hcHBlZCB0bworIyAnRXJhc2UgdG8gRW5kIG9mIEZpZWxkJy4uLiBzaW5jZSBub3RoaW5nIHNlZW1zIHRvIHVzZSAnZW5kJyBhbnl3YXlzLi4uCisjIGtob21lIGlzIEhvbWUgb24gYSBQQyBrYmQuICBBY3R1YWxseSAnRklORCcgb24gYSBWVC4KKyMgVGhpbmdzIHRoYXQgdXNlIDxrbnh0PiB1c3VhbGx5IHVzZSB0YWIgYW55d2F5cy4uLiBhbmQgdGhpbmdzIHRoYXQgZG9uJ3QgdXNlCisjIHRhYiB1c3VhbGx5IHVzZSA8a254dD4gaW5zdGVhZC4uLgorIyBrcHJ2IGlzIHNhbWUgYXMgdGFiIC0gQmFja3RhYiBpcyB1c2VsZXNzLi4uCisjIEkgbGVmdCBvdXQgPHNncj4gYmVjYXVzZSBvZiBpdHMgUklESUNVTE9VUyBjb21wbGV4aXR5LAorIyBhbmQgdGhlIHJlc3VsdGluZyBmYWN0IHRoYXQgaXQgY2F1c2VzIHRoZSB0ZXJtY2FwIHRyYW5zbGF0aW9uIG9mIHRoZSBlbnRyeQorIyB0byBTTUFTSCB0aGUgMWstYmFycmllci4uLgorIyBGcm9tOiBBZGFtIFRob21wc29uIDxhdGhvbXBzb0BwYW5nZWEuY2E+IFNlcHQgMTAgMTk5NQorIyAodnQzMjA6IHVuY29tbWVudGVkIDxmc2w+IC0tZXNyKQordnQzMjB8dnQzMDB8ZGVjIHZ0MzIwIDcgYml0IHRlcm1pbmFsLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgd3NsIzgwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgZnNsPVxFWzAkfSwKKwlob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1cRUQsCisJaXMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJa2JzPVwxNzcsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2RjaDE9XEVbM34sIGtlbD1cRVs0fiwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LAorCWtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LAorCWtmMjA9XEVbMzR+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LAorCWtmOT1cRVsyMH4sIGtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrbnh0PV5JLAorCWtwcD1cRVs1fiwga3Bydj1cRVtaLCBrc2x0PVxFWzR+LCBtYzA9XEVbaSwgbWM0PVxFWz80aSwKKwltYzU9XEVbPzVpLCBuZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDMwMCwgcmk9XEVNLCBybWFjcz1cRShCLAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoXEVbMTsyNHJcRVsyNDsxSCwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTskPDI+LAorCXNncjA9XEVbbVxFKEIsIHNtYWNzPVxFKDAsIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdHNsPVxFWzEkfVxFW0hcRVtLLCB1c2U9dnQyMjAra2V5cGFkLAordnQzMjAtbmFtfHZ0MzAwLW5hbXxkZWMgdnQzMjAgNyBiaXQgdGVybWluYWwgd2l0aCBubyBhbSB0byBtYWtlIFNBUyBoYXBweSwKKwlhbUAsCisJaXMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83bFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83bFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJdXNlPXZ0MzIwLAorIyBXZSBoYXZlIHRvIGluaXQgMTMyLWNvbCBtb2RlLCBub3QgODAtY29sIG1vZGUuCit2dDMyMC13fHZ0MzAwLXd8ZGVjIHZ0MzIwIHdpZGUgNyBiaXQgdGVybWluYWwsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJcnMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJdXNlPXZ0MzIwLAordnQzMjAtdy1uYW18dnQzMDAtdy1uYW18ZGVjIHZ0MzIwIHdpZGUgNyBiaXQgdGVybWluYWwgd2l0aCBubyBhbSwKKwlhbUAsCisJaXMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83bFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJcnMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83bFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJdXNlPXZ0MzIwLXcsCisKKyMgVlQzMzAgYW5kIFZUMzQwIC0tIFRoZXNlIGFyZSBSZUdJUyBhbmQgU0lYRUwgZ3JhcGhpY3MgdGVybWluYWxzCisjICAgd2hpY2ggYXJlIHByZXR0eSBtdWNoIGEgc3VwZXJzZXQgb2YgdGhlIFZUMzIwLiAgVGhleSBoYXZlIHRoZQorIyAgIGhvc3Qgd3JpdGFibGUgc3RhdHVzIGxpbmUsIHlldCBhbm90aGVyIGRpZmZlcmVudCBEUkNTIG1hdHJpeCBzaXplLAorIyAgIGFuZCBzdWNoLCBidXQgdGhleSBhZGQgdGhlIERFQyBUZWNobmljYWwgY2hhcmFjdGVyIHNldCwgTXVsdGlwbGUgdGV4dAorIyAgIHBhZ2VzLCBzZWxlY3RhYmxlIGxlbmd0aCBwYWdlcywgYW5kIHRoZSBsaWtlLiAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorIyAgIHRoZSB2dDMzMCBhbmQgdnQzNDAgaXMgdGhhdCB0aGUgbGF0dGVyIGhhcyBvbmx5IDIgcGxhbmVzIGFuZCBhIG1vbm9jaHJvbWUKKyMgICBtb25pdG9yLCB0aGUgZm9ybWVyIGhhcyA0IHBsYW5lcyBhbmQgYSBjb2xvciBtb25pdG9yLiAgVGhlc2UgdGVybWluYWxzCisjICAgc3VwcG9ydCBWVDEzMSBhbmQgQU5TSSBibG9jayBtb2RlLCBidXQgYXMgd2l0aCBtdWNoIG9mIHRoZXNlIHRoaW5ncywKKyMgICB0ZXJtY2FwL3Rlcm1pbmZvIGRvZXNuJ3QgZGVhbCB3aXRoIHRoZXNlIGZlYXR1cmVzLgorIworIyBOb3RlIHRoYXQgdGhpcyBlbnRyeSBpcyBhcmUgc2V0IHVwIGluIHdoYXQgd2FzIHRoZSBzdGFuZGFyZCB3YXkgZm9yIEdOVQorIyBFbWFjcyB2MTggdGVybWluYWwgbW9kZXMgdG8gZGVhbCB3aXRoIHRoZSBjdXJzb3Iga2V5cyBpbiB0aGF0IHRoZSBhcnJvdworIyBrZXlzIHdlcmUgc3dpdGNoZWQgaW50byBhcHBsaWNhdGlvbiBtb2RlIGF0IHRoZSBzYW1lIHRpbWUgdGhlIG51bWVyaWMgcGFkCisjIGlzIHN3aXRjaGVkIGludG8gYXBwbGljYXRpb24gbW9kZS4gIFRoaXMgY2hhbmdlcyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlCisjIGFycm93IGtleXMuICBFbWFjcyB2MTkgaXMgc21hcnRlciBhbmQgbWluZXMgaXRzIGtleXMgZGlyZWN0bHkgb3V0IG9mCisjIHlvdXIgdGVybWNhcCBvciB0ZXJtaW5mbyBlbnRyeSwKKyMKKyMgRnJvbTogRGFuaWVsIEdsYXNzZXIgPGRhZ0BwZXJzb2Z0LnBlcnNvZnQuY29tPiwgMTMgT2N0IDE5OTMKKyMgKHZ0MzQwOiBzdHJpbmcgY2FwYWJpbGl0eSAic2I9XEVbTSIgY29ycmVjdGVkIHRvICJzciI7CisjIGFsc28sIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK3Z0MzQwfGRlYy12dDM0MHx2dDMzMHxkZWMtdnQzMzB8ZGVjIHZ0MzQwIGdyYXBoaWNzIHRlcm1pbmFsIHdpdGggMjQgbGluZSBwYWdlLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsIGNsZWFyPVxFW0hcRVtKLAorCWNub3JtPVxFWz8yNWgsIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBkc2w9XEVbMiR+XHJcRVsxJH1cRVtLXEVbJH0sCisJZWQ9XEVbSiwgZWw9XEVbSywgZmxhc2g9XEVbPzVoXEVbPzVsJDwyMDAvPiwgZnNsPVxFWyR9LAorCWhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPVxFRCwKKwlpczI9XEU8XEUgRlxFPlxFWz8xaFxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjY9XEVbMTd+LAorCWtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGxmMT1wZjEsIGxmMj1wZjIsCisJbGYzPXBmMywgbGY0PXBmNCwgbmVsPV5NXEVELCByYz1cRTgsIHJldj1cRVs3bSwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDMwMCwgcmk9XEVNLCBybWFjcz1cRShCLAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sCisJcm11bD1cRVsyNG0sIHJzMT1cRVs/M2wsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAxJXAzJXwldDs3JTttJT8lcDkldFxFKDAlZVxFKEIlOyQ8Mj4sCisJc2dyMD1cRVttXEUoQiwgc21hY3M9XEUoMCwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEVbMiR+XEVbMSR9XEVbMTslZEgsCisKKyMgREVDIGRvZXNuJ3Qgc3VwcGx5IGEgdnQ0MDAgZGVzY3JpcHRpb24sIHNvIHdlIGFkZCBEYW5pZWwgR2xhc3NlcidzCisjIChvcmlnaW5hbGx5IHdyaXR0ZW4gd2l0aCB2dDQyMCBhcyBpdHMgcHJpbWFyeSBuYW1lLCBhbmQgdXNhYmxlIGZvciBpdCkuCisjCisjIFZUNDAwLzQyMCAtLSBUaGlzIHRlcm1pbmFsIGlzIGEgc3VwZXJzZXQgb2YgdGhlIHZ0MzIwLiAgSXQgYWRkcyB0aGUgbXVsdGlwbGUKKyMgICAgdGV4dCBwYWdlcyBhbmQgbG9uZyB0ZXh0IHBhZ2VzIHdpdGggc2VsZWN0YWJsZSBsZW5ndGggb2YgdGhlIHZ0MzQwLCBhbG9uZworIyAgICB3aXRoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMsIHJlY3Rhbmd1bGFyIGFyZWEgdGV4dCBjb3B5LCBmaWxsLCBhbmQgZXJhc2UKKyMgICAgb3BlcmF0aW9ucywgc2VsZWN0ZWQgcmVnaW9uIGNoYXJhY3RlciBhdHRyaWJ1dGUgY2hhbmdlIG9wZXJhdGlvbnMsCisjICAgIHBhZ2UgbWVtb3J5IGFuZCByZWN0YW5nbGUgY2hlY2tzdW1zLCBpbnNlcnQvZGVsZXRlIGNvbHVtbiwgcmVjZXB0aW9uCisjICAgIG1hY3JvcywgYW5kIG90aGVyIGZlYXR1cmVzIHRvbyBudW1lcm91cyB0byByZW1lbWJlciByaWdodCBub3cuICBURVJNQ0FQCisjICAgIGNhbiBvbmx5IHRha2UgYWR2YW50YWdlIG9mIGEgZmV3IG9mIHRoZXNlIGFkZGVkIGZlYXR1cmVzLgorIworIyBOb3RlIHRoYXQgdGhpcyBlbnRyeSBpcyBhcmUgc2V0IHVwIGluIHdoYXQgd2FzIHRoZSBzdGFuZGFyZCB3YXkgZm9yIEdOVQorIyBFbWFjcyB2MTggdGVybWluYWwgbW9kZXMgdG8gZGVhbCB3aXRoIHRoZSBjdXJzb3Iga2V5cyBpbiB0aGF0IHRoZSBhcnJvdworIyBrZXlzIHdlcmUgc3dpdGNoZWQgaW50byBhcHBsaWNhdGlvbiBtb2RlIGF0IHRoZSBzYW1lIHRpbWUgdGhlIG51bWVyaWMgcGFkCisjIGlzIHN3aXRjaGVkIGludG8gYXBwbGljYXRpb24gbW9kZS4gIFRoaXMgY2hhbmdlcyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlCisjIGFycm93IGtleXMuICBFbWFjcyB2MTkgaXMgc21hcnRlciBhbmQgbWluZXMgaXRzIGtleXMgZGlyZWN0bHkgb3V0IG9mCisjIHlvdXIgdGVybWNhcCBlbnRyeSwKKyMKKyMgRnJvbTogRGFuaWVsIEdsYXNzZXIgPGRhZ0BwZXJzb2Z0LnBlcnNvZnQuY29tPiwgMTMgT2N0IDE5OTMKKyMgKHZ0NDAwOiBzdHJpbmcgY2FwYWJpbGl0eSAiOnNiPVxFW006IiBjb3JyZWN0ZWQgdG8gIjpzcj1cRVtNOiI7CisjIGFsc28sIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK3Z0NDAwfHZ0NDAwLTI0fGRlYy12dDQwMHxkZWMgdnQ0MDAgMjR4ODAgY29sdW1uIGF1dG93cmFwLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0okPDEwLz4sIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWRzbD1cRVsyJH5cclxFWzEkfVxFW0tcRVskfSwgZWQ9XEVbSiQ8MTAvPiwKKwllbD1cRVtLJDw0Lz4sIGZsYXNoPVxFWz81aFxFWz81bCQ8MjAwLz4sIGZzbD1cRVskfSwKKwlob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpczI9XEU8XEUgRlxFPlxFWz8xaFxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7MjRyXEVbMjQ7MUgsCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjY9XEVbMTd+LAorCWtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGxmMT1wZjEsIGxmMj1wZjIsCisJbGYzPXBmMywgbGY0PXBmNCwgbmVsPV5NXEVELCByYz1cRTgsIHJldj1cRVs3bSwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDMwMCwgcmk9XEVNLCBybWFjcz1cRShCLAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sCisJcm11bD1cRVsyNG0sIHJzMT1cRTxcRVs/M2xcRVshcFxFWz83aCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7JDwyPiwKKwlzZ3IwPVxFW21cRShCLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXRzbD1cRVsyJH5cRVsxJH1cRVsxOyVkSCwKKworIyAodnQ0MjA6IEkgcmVtb3ZlZCA8a2YwPiwgaXQgY29sbGlkZWQgd2l0aCA8a2YxMD4uICBJIGFsc28gcmVzdG9yZWQKKyMgYSBtaXNzaW5nIDxzYz4gLS0gZXNyKQordnQ0MjB8REVDIFZUNDIwLAorCWFtLCBtaXIsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbMkokPDUwPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDEwPiwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsCisJZGwxPVxFW00sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGhvbWU9XEVbSCwgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRVsxOzI0clxFWzI0OzFILCBpczM9XEVbPzY3aFxFWzY0OzEicCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbM34sIGtmMT1cRU9QLCBrZjEwPVxFWzI5fiwga2YyPVxFT1EsIGtmMz1cRU9SLAorCWtmND1cRU9TLCBrZjU9XEVbMTd+LCBrZjY9XEVbMTh+LCBrZjc9XEVbMTl+LCBrZjg9XEVbMjB+LAorCWtmOT1cRVsyMX4sIGtmbmQ9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc2x0PVxFWzR+LCByYz1cRTgsIHJldj1cRVs3bSQ8Mj4sCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIHJpPVxFTSwgcm1hY3M9XEUoQiQ8ND4sCisJcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEU+LAorCXJtc2M9XEVbPzA7MHJcRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMz1cRVs/NjdoXEVbNjQ7MSJwLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTskPDI+LAorCXNncjA9XEVbbSQ8Mj4sIHNtYWNzPVxFKDAkPDI+LCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyBERUMgVlQyMjAgYW5kIHVwIHN1cHBvcnQgREVDVURLICh1c2VyLWRlZmluZWQga2V5cykuICBERUNVREsgKGkuZS4sIHBmeCkKKyMgdGFrZXMgdHdvIHBhcmFtZXRlcnMsIHRoZSBrZXkgYW5kIHRoZSBzdHJpbmcuICBUcmFuc2xhdGluZyB0aGUga2V5IGlzCisjIHN0cmFpZ2h0Zm9yd2FyZCAoa2V5cyAxLTUgYXJlIG5vdCBkZWZpbmVkIG9uIHJlYWwgdGVybWluYWxzLCB0aG91Z2ggc29tZQorIyBlbXVsYXRvcnMgZGVmaW5lIHRoZXNlKToKKyMKKyMgICAgICAgICAgICAgICBpZiAoa2V5IDwgMTYpIHRoZW4gIHZhbHVlID0ga2V5OworIyAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA8IDIxKSB0aGVuIHZhbHVlID0ga2V5ICsgMTsKKyMgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPCAyNSkgdGhlbiB2YWx1ZSA9IGtleSArIDI7CisjICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5IDwgMjcpIHRoZW4gdmFsdWUgPSBrZXkgKyAzOworIyAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA8IDMwKSB0aGVuIHZhbHVlID0ga2V5ICsgNDsKKyMgICAgICAgICAgICAgICBlbHNlIHZhbHVlID0ga2V5ICsgNTsKKyMKKyMgVGhlIHN0cmluZyBtdXN0IGJlIHRoZSBoZXhhZGVjaW1hbCBlcXVpdmFsZW50LCBlLmcuLCAiNTA1MjQ5NEUiIGZvciAiUFJJTlQiLgorIyBUaGVyZSdzIG5vIHByb3Zpc2lvbiBpbiB0ZXJtaW5mbyBmb3IgZW1pdHRpbmcgYSBzdHJpbmcgaW4gdGhpcyBmb3JtYXQsIHNvIHRoZQorIyBhcHBsaWNhdGlvbiBoYXMgdG8ga25vdyBpdC4KKyMKK3Z0NDIwcGN8REVDIFZUNDIwIHcvUEMga2V5Ym9hcmQsCisJa2RjaDE9XDE3Nywga2VuZD1cRVs0fiwga2YxPVxFWzExfiwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzExOzJ+LCBrZjE0PVxFWzEyOzJ+LAorCWtmMTU9XEVbMTM7Mn4sIGtmMTY9XEVbMTQ7Mn4sIGtmMTc9XEVbMTU7Mn4sCisJa2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwga2YyPVxFWzEyfiwga2YyMD1cRVsxOTsyfiwKKwlrZjIxPVxFWzIwOzJ+LCBrZjIyPVxFWzIxOzJ+LCBrZjIzPVxFWzIzOzJ+LAorCWtmMjQ9XEVbMjQ7Mn4sIGtmMjU9XEVbMjN+LCBrZjI2PVxFWzI0fiwga2YyNz1cRVsyNX4sCisJa2YyOD1cRVsyNn4sIGtmMjk9XEVbMjh+LCBrZjM9XEVbMTN+LCBrZjMwPVxFWzI5fiwKKwlrZjMxPVxFWzMxfiwga2YzMj1cRVszMn4sIGtmMzM9XEVbMzN+LCBrZjM0PVxFWzM0fiwKKwlrZjM1PVxFWzM1fiwga2YzNj1cRVszNn4sIGtmMzc9XEVbMjM7Mn4sIGtmMzg9XEVbMjQ7Mn4sCisJa2YzOT1cRVsyNTsyfiwga2Y0PVxFWzE0fiwga2Y0MD1cRVsyNjsyfiwga2Y0MT1cRVsyODsyfiwKKwlrZjQyPVxFWzI5OzJ+LCBrZjQzPVxFWzMxOzJ+LCBrZjQ0PVxFWzMyOzJ+LAorCWtmNDU9XEVbMzM7Mn4sIGtmNDY9XEVbMzQ7Mn4sIGtmNDc9XEVbMzU7Mn4sCisJa2Y0OD1cRVszNjsyfiwga2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraG9tZT1cRVtILAorCXBjdHJtPVVTUl9URVJNXDp2dDQyMHBjZG9zXDosCisJcGZ4PVxFUDE7MXwlPyV7MTZ9JXAxJT4ldCV7MH0lZSV7MjF9JXAxJT4ldCV7MX0lZSV7MjV9JXAxJT4ldCV7Mn0lZSV7Mjd9JXAxJT4ldCV7M30lZSV7MzB9JXAxJT4ldCV7NH0lZSV7NX0lOyVwMSUrJWQvJXAyJXNcRVxcLAorCXVzZT12dDQyMCwKKwordnQ0MjBwY2Rvc3xERUMgVlQ0MjAgdy9QQyBmb3IgRE9TIE1lcmdlLAorCWxpbmVzIzI1LAorCWRpc3BjPSU/JXAxJXsxOX0lPSV0XEVcMDIzXDAyMSVlJXAxJXszMn0lPCV0XEUlcDElYyVlJXAxJXsxMjd9JT0ldFxFXDE3NyVlJXAxJWMlOywKKwlwY3RybUAsCisJcm1zYz1cRVs/MDswclxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2dyQCwKKwlzZ3IwPVxFW20sIHNtc2M9XEVbPzE7MnJcRVszNGgsIHVzZT12dDQyMHBjLAorCit2dDQyMGZ8REVDIFZUNDIwIHdpdGggVlQga2JkOyBWVDQwMCBtb2RlOyBGMS1GNSB1c2VkIGFzIEZrZXlzLAorCWtkY2gxPVwxNzcsIGtmMT1cRVsxMX4sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjI9XEVbMTJ+LCBrZjIwPVxFWzM0fiwga2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwKKwlrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFW0gsIGxmMT1cRU9QLCBsZjI9XEVPUSwgbGYzPVxFT1IsIGxmND1cRU9TLAorCXVzZT12dDQyMCwKKwordnQ1MTB8REVDIFZUNTEwLAorCXVzZT12dDQyMCwKK3Z0NTEwcGN8REVDIFZUNTEwIHcvUEMga2V5Ym9hcmQsCisJdXNlPXZ0NDIwcGMsCit2dDUxMHBjZG9zfERFQyBWVDUxMCB3L1BDIGZvciBET1MgTWVyZ2UsCisJdXNlPXZ0NDIwcGNkb3MsCisKKyMgVlQ1MjAvVlQ1MjUKKyMKKyMgVGhlIFZUNTIwIGlzIGEgbW9ub2Nocm9tZSB0ZXh0IHRlcm1pbmFsIGNhcGFibGUgb2YgbWFuYWdpbmcgdXAgdG8KKyMgZm91ciBpbmRlcGVuZGVudCBzZXNzaW9ucyBpbiB0aGUgdGVybWluYWwuICBJdCBoYXMgbXVsdGlwbGUgQU5TSQorIyBlbXVsYXRpb25zIChWVDUyMCwgVlQ0MjAsIFZUMzIwLCBWVDIyMCwgVlQxMDAsIFZUIFBDVGVybSwgU0NPIENvbnNvbGUpCisjIGFuZCBBU0NJSSBlbXVsYXRpb25zIChXWTE2MC82MCwgUENUZXJtLCA1MC81MCssIDE1MC8xMjAsIFRWSSA5NTAsCisjIDkyNSA5MTArLCBBRERTIEEyKS4gIFRoaXMgdGVybWluZm8gZGF0YSBpcyBmb3IgdGhlIEFOU0kgZW11bGF0aW9ucyBvbmx5LgorIworIyBUZXJtaW5hbCBTZXQtVXAgaXMgZW50ZXJlZCBieSBwcmVzc2luZyBbRjNdLCBbQ2FwcyBMb2NrXS9bRjNdIG9yCisjIFtBbHRdL1tQcmludCBTY3JlZW5dIGRlcGVuZGluZyB1cG9uIHdoaWNoIGtleWJvYXJkIGFuZCB3aGljaAorIyB0ZXJtaW5hbCBtb2RlIGlzIGJlaW5nIHVzZWQuICBJZiBTZXQtVXAgaGFzIGJlZW4gZGlzYWJsZWQgb3IKKyMgYXNzaWduZWQgdG8gYW4gdW5rbm93biBrZXksIFNldC1VcCBtYXkgYmUgZW50ZXJlZCBieSBwcmVzc2luZworIyBbRjNdIGFzIHRoZSBmaXJzdCBrZXkgYWZ0ZXIgcG93ZXIgdXAsIHJlZ2FyZGxlc3Mgb2Yga2V5Ym9hcmQgdHlwZS4KKyMgKHZ0NTIwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nLCBhbHNvIDxzYz4gLS0gZXNyKQordnQ1MjB8REVDIFZUNTIwLAorCWFtLCBtaXIsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbMkokPDUwPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDEwPiwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsCisJZGwxPVxFW00sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGhvbWU9XEVbSCwgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRVsxOzI0clxFWzI0OzFILCBpczM9XEVbPzY3aFxFWzY0OzEicCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbM34sIGtmMT1cRU9QLCBrZjEwPVxFWzI5fiwga2YyPVxFT1EsIGtmMz1cRU9SLAorCWtmND1cRU9TLCBrZjU9XEVbMTd+LCBrZjY9XEVbMTh+LCBrZjc9XEVbMTl+LCBrZjg9XEVbMjB+LAorCWtmOT1cRVsyMX4sIGtmbmQ9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc2x0PVxFWzR+LAorCXBmeD1cRVAxOzF8JT8lezE2fSVwMSU+JXQlezB9JWUlezIxfSVwMSU+JXQlezF9JWUlezI1fSVwMSU+JXQlezJ9JWUlezI3fSVwMSU+JXQlezN9JWUlezMwfSVwMSU+JXQlezR9JWUlezV9JTslcDElKyVkLyVwMiVzXEVcXCwKKwlyYz1cRTgsIHJldj1cRVs3bSQ8Mj4sIHJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MzAwLAorCXJpPVxFTSwgcm1hY3M9XEUoQiQ8ND4sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJtc2M9XEVbPzA7MHJcRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMz1cRVs/NjdoXEVbNjQ7MSJwLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTskPDI+LAorCXNncjA9XEVbbSQ8Mj4sIHNtYWNzPVxFKDAkPDI+LCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCisjICh2dDUyNTogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZzsKKyMgcmVtb3ZlZCA8cm1zbz49XEVbbSwgPHJtdWw+PVxFW20sIGFkZGVkIDxzYz4gLS0gZXNyKQordnQ1MjV8REVDIFZUNTI1LAorCWFtLCBtaXIsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbMkokPDUwPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDEwPiwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsCisJZGwxPVxFW00sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGhvbWU9XEVbSCwgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQzMDAsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRVsxOzI0clxFWzI0OzFILCBpczM9XEVbPzY3aFxFWzY0OzEicCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbM34sIGtmMT1cRU9QLCBrZjEwPVxFWzI5fiwga2YyPVxFT1EsIGtmMz1cRU9SLAorCWtmND1cRU9TLCBrZjU9XEVbMTd+LCBrZjY9XEVbMTh+LCBrZjc9XEVbMTl+LCBrZjg9XEVbMjB+LAorCWtmOT1cRVsyMX4sIGtmbmQ9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc2x0PVxFWzR+LAorCXBmeD1cRVAxOzF8JT8lezE2fSVwMSU+JXQlezB9JWUlezIxfSVwMSU+JXQlezF9JWUlezI1fSVwMSU+JXQlezJ9JWUlezI3fSVwMSU+JXQlezN9JWUlezMwfSVwMSU+JXQlezR9JWUlezV9JTslcDElKyVkLyVwMiVzXEVcXCwKKwlyYz1cRTgsIHJldj1cRVs3bSQ8Mj4sIHJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MzAwLAorCXJpPVxFTSwgcm1hY3M9XEUoQiQ8ND4sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJtc2M9XEVbPzA7MHJcRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMz1cRVs/NjdoXEVbNjQ7MSJwLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcRSgwJWVcRShCJTskPDI+LAorCXNncjA9XEVbbSQ8Mj4sIHNtYWNzPVxFKDAkPDI+LCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCisjIyMjIFZUMTAwIGVtdWxhdGlvbnMKKyMKKworIyBKb2huIEhhd2tpbnNvbiA8amhhd2tATUlULkVEVT4gdGVsbHMgdXMgdGhhdCB0aGUgRVdBTiB0ZWxuZXQgZm9yIFdpbmRvd3MKKyMgKHRoZSBiZXN0IFdpbmRvd3MgdGVsbmV0IGFzIG9mIFNlcHRlbWJlciAxOTk1KSBwcmVzZW50cyB0aGUgbmFtZSBgZGVjLXZ0MTAwJworIyB0byB0ZWxuZXRkLiAgIE1pY2hhZWwgRGV1dHNjaG1hbm4gPGxkZXV0c2NoQG1haWwubmV0c2hvcC5uZXQ+IGluZm9ybXMgdXMKKyMgdGhhdCB0aGlzIHdvcmtzIGJlc3Qgd2l0aCBhIHN0b2NrIHZ0MTAwIGVudHJ5LgorZGVjLXZ0MTAwfEVXQU4gdGVsbmV0J3MgdnQxMDAgZW11bGF0aW9uLAorCXVzZT12dDEwMCwKKworIyBGcm9tOiBBZHJpYW4gR2Fyc2lkZSA8OTRhamcyQGVuZy5jYW0uYWMudWs+LCAxOSBOb3YgMTk5NgorZGVjLXZ0MjIwfERPUyB0bnZ0MjAwIHRlcm1pbmFsIGVtdWxhdG9yLAorCWFtQCwgdXNlPXZ0MjIwLAorCisjIFpzdGVtMzQwIGlzIGFuIChJTUhPKSBleGNlbGxlbnQgVlQgZW11bGF0b3IgZm9yIFBDJ3MuICBJIHJlY29tbWVuZCBpdCB0bworIyBhbnlvbmUgd2hvIG5lZWRzIFBDIFZUMzQwIGVtdWxhdGlvbi4gKG9yIGFueXRoaW5nIGJlbG93IHRoYXQgbGV2ZWwsIGZvcgorIyB0aGF0IG1hdHRlciAtLSBERUMncyBBTEwtaW4tMSBzZWVtcyBoYXBweSB3aXRoIGl0LCBhcyBkb2VzIElORk9QTFVTJ3MKKyMgUkRCTSBzeXN0ZW1zLCBpdCBpbmNsdWRlcyBSZUdJUyBhbmQgU2lYZWwgc3VwcG9ydCEgIEknbSBpbXByZXNzZWQuLi4KKyMgSSBjYW4gc2VuZCB0aGUgYWRkcmVzcyBpZiByZXF1ZXN0ZWQuCisjICh6MzQwOiBjaGFuZ2VkIGdhcmJsZWQgXEVbNT9sIHRvIFxFWz81bCwgREVDIHNtb290aCBzY3JvbGwgb2ZmIC0tIGVzcikKKyMgRnJvbTogQWRhbSBUaG9tcHNvbiA8YXRob21wc29AcGFuZ2VhLmNhPiBTZXB0IDEwIDE5OTUKK3ozNDB8enN0ZW0gdnQzNDAgdGVybWluYWwgZW11bGF0b3IgMTMyY29sIDQybGluZSwKKwlsaW5lcyM0MiwKKwlpczI9XEU+XEVbPzNoXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoXEVbMTs0MnJcRVs0MjsxSCwKKwlyczI9XEU+XEVbPzNoXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoXEVbMTs0MnJcRVs0MjsxSCwKKwl1c2U9dnQzMjAtdywKK3ozNDAtbmFtfHpzdGVtIHZ0MzQwIHRlcm1pbmFsIGVtdWxhdG9yIDEzMmNvbCA0MmxpbmUgKG5vIGF1dG9tYXRpYyBtYXJnaW5zKSwKKwlhbUAsCisJaXMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83bFxFWz84aFxFWzE7NDJyXEVbNDI7MUgsCisJcnMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83bFxFWz84aFxFWzE7NDJyXEVbNDI7MUgsCisJdXNlPXozNDAsCisKKyMgQ1JUIGlzIHNoYXJld2FyZS4gIEl0IGltcGxlbWVudHMgc29tZSB4dGVybSBmZWF0dXJlcywgaW5jbHVkaW5nIG1vdXNlLgorY3J0fGNydC12dDIyMHxDUlQgMi4zIGVtdWxhdGluZyBWVDIyMCwKKwliY2UsIG1zZ3IsCisJbmN2QCwKKwlodHM9XEVILCB1c2U9dnQxMDArZW5xLCB1c2U9dnQyMjAsIHVzZT1lY21hK2NvbG9yLAorCisjIFB1VFRZIDAuNTUgKHJlbGVhc2VkIDMgQXVndXN0IDIwMDQpCisjIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vcHV0dHkvCisjCisjIENvbXBhcmluZyB3aXRoIDAuNTEsIHZ0dGVzdCBpcyBtdWNoIGJldHRlciAob25seSBhIGZldyBwcm9ibGVtcyB3aXRoIHRoZQorIyBjdXJzb3IgcG9zaXRpb24gcmVwb3J0cyBhbmQgd3JhcHBpbmcpLgorIworIyBQdVRUWSAwLjUxIChyZWxlYXNlZCAxNCBEZWNlbWJlciAyMDAwKQorIworIyBUaGlzIGVtdWxhdGVzIHZ0MTAwICsgdnQ1MiAocGx1cyBhIGZldyB2dDIyMCBmZWF0dXJlczogIGVjaCwgU1JNLCBERUNUQ0VNLCBhcworIyB3ZWxsIGFzIFNDTyBhbmQgQXRhcmksIGNvbG9yIHBhbGV0dGVzIGZyb20gTGludXggY29uc29sZSkuICBSZWFkaW5nIHRoZSBjb2RlLAorIyBpdCBpcyBpbnRlbmRlZCB0byBiZSBWVDEwMiBwbHVzIHNlbGVjdGVkIGZlYXR1cmVzLiAgQnkgZGVmYXVsdCwgaXQgc2V0cyAkVEVSTQorIyB0byB4dGVybSwgd2hpY2ggaXMgaW5jb3JyZWN0LCBzaW5jZSBzZXZlcmFsIGZlYXR1cmVzIGFyZSBtaXNpbXBsZW1lbnRlZDoKKyMKKyMJQWx0K2tleSBhbHdheXMgc2VuZHMgRVNDK2tleSwgc28gJ2ttJyBjYXBhYmlsaXR5IGlzIHJlbW92ZWQuCisjCisjCUNvbnRyb2wgcmVzcG9uc2VzLCB3cmFwcGluZyBhbmQgdGFicyBhcmUgYnVnZ3ksIGZhaWxpbmcgYSBjb3VwbGUgb2YKKyMJc2NyZWVucyBpbiB2dHRlc3QuCisjCisjCXh0ZXJtIG1vdXNlIHN1cHBvcnQgaXMgbm90IGltcGxlbWVudGVkICh1bnJlbGVhc2UgdmVyc2lvbiBtYXkpLgorIworIyBTZXZlcmFsIGZlYXR1cmVzIHN1Y2ggYXMgYmFja3NwYWNlL2RlbGV0ZSBhcmUgb3B0aW9uYWw7IHRoaXMgZW50cnkgZG9jdW1lbnRzCisjIHRoZSBkZWZhdWx0IGJlaGF2aW9yIC1URAorCitwdXR0eXxQdVRUWSB0ZXJtaW5hbCBlbXVsYXRvciwKKwlhbSwgYmNlLCBidywgY2NjLCBocywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29sb3JzIzgsIGl0IzgsIG5jdiMyMiwgcGFpcnMjNjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVELCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFTSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGlzcGM9JT8lcDElezh9JT0ldFxFJSVHXDM0MlwyMjdcMjMwXEUlJUAlZSVwMSV7MTB9JT0ldFxFJSVHXDM0MlwyMjdcMjMxXEUlJUAlZSVwMSV7MTJ9JT0ldFxFJSVHXDM0MlwyMzFcMFxFJSVAJWUlcDElezEzfSU9JXRcRSUlR1wzNDJcMjMxXDI1MlxFJSVAJWUlcDElezE0fSU9JXRcRSUlR1wzNDJcMjMxXDI1M1xFJSVAJWUlcDElezE1fSU9JXRcRSUlR1wzNDJcMjMwXDI3NFxFJSVAJWUlcDElezI3fSU9JXRcRSUlR1wzNDJcMjA2XDIyMFxFJSVAJWUlcDElezE1NX0lPSV0XEUlJUdcMzQwXDIwMlwyNDJcRSUlQCVlJXAxJWMlOywKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBkc2w9XEVdMDtcMDA3LCBlY2g9XEVbJXAxJWRYLAorCWVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgZW5hY3M9XEUoQlxFKTAsCisJZmxhc2g9XEVbPzVoXEVbPzVsLCBmc2w9XkcsIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLAorCWh0PV5JLCBodHM9XEVILCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJaW5kbj1cRVslcDElZFMsCisJaW5pdGM9XEVdUCVwMSV4JXAyJXsyNTV9JSolezEwMDB9JS8lMDJ4JXAzJXsyNTV9JSolezEwMDB9JS8lMDJ4JXA0JXsyNTV9JSolezEwMDB9JS8lMDJ4LAorCWlzMj1cRTdcRVtyXEVbbVxFWz83aFxFWz8xOzQ7NmxcRVs0bFxFOFxFPlxFXVIsCisJa2IyPVxFW0csIGticz1cMTc3LCBrY2FuPV5DLCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbM34sCisJa2VuZD1cRVs0fiwga2YxPVxFWzExfiwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LAorCWtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LAorCWtmMj1cRVsxMn4sIGtmMjA9XEVbMzR+LCBrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc3BkPV5aLCBuZWw9Xk1eSiwgb2M9XEVdUiwgb3A9XEVbMzk7NDltLCByYz1cRTgsIHJldj1cRVs3bSwKKwlyaT1cRU0sIHJpbj1cRVslcDElZFQsIHJtYWNzPV5PLCBybWFtPVxFWz83bCwKKwlybWN1cD1cRVsySlxFWz80N2wsIHJtaXI9XEVbNGwsIHJtcGNoPVxFWzEwbSwKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMyPVxFPFxFWyJwXEVbNTA7NiJwXEVjXEVbPzNsXEVdUlxFWz8xMDAwbCwKKwlzMGRzPVxFWzEwbSwgczFkcz1cRVsxMW0sIHMyZHM9XEVbMTJtLCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21jdXA9XEVbPzQ3aCwKKwlzbWlyPVxFWzRoLCBzbXBjaD1cRVsxMW0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEVdMDssIHZwYT1cRVslaSVwMSVkZCwgdXNlPXZ0MTAyK2VucSwKK3Z0MTAwLXB1dHR5fFJlc2V0IFB1VFRZIHRvIHB1cmUgdnQxMDAsCisJcnMyPVxFPFxFWyJwXEVjXEVbPzNsXEVdUlxFWzQwInBcRVs2MSJwXEVbNTA7MTsyInAsCisJdXNlPXZ0MTAwLAorIyBwYWxldHRlIGlzIGhhcmRjb2RlZC4uLgorcHV0dHktMjU2Y29sb3J8UHVUVFkgMC41OCB3aXRoIHh0ZXJtIDI1Ni1jb2xvcnMsCisJaW5pdGNALCB1c2U9eHRlcm0rMjU2Y29sb3IsIHVzZT1wdXR0eSwKKworIyBPbmUgb2YgdGhlIGtleWJvYXJkIHNlbGVjdGlvbnMgaXMgIlZUMTAwKyIuCisjIHB0ZXJtICh0aGUgWDExIHBvcnQpIHVzZXMgc2hpZnRlZCBGMS1GMTAgYXMgRjExLUYyMAorcHV0dHktdnQxMDB8VlQxMDArIGtleWJvYXJkIGxheW91dCwKKwlrZjE9XEVPUCwga2YxMD1cRU9ZLCBrZjExPVxFT1osIGtmMTI9XEVPWywga2YyPVxFT1EsCisJa2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVPVCwga2Y2PVxFT1UsIGtmNz1cRU9WLCBrZjg9XEVPVywKKwlrZjk9XEVPWCwgdXNlPXB1dHR5LAorCisjIFRoaXMgZW50cnkgaXMgZm9yIFRlcmEgVGVybSBQcm8gdmVyc2lvbiAyLjMsIGZvciBNUy1XaW5kb3dzIDk1L05UIHdyaXR0ZW4gYnkKKyMgVC4gVGVyYW5pc2hpIGRhdGVkIE1hciAxMCwgMTk5OC4gIEl0IGlzIGEgZnJlZSBzb2Z0d2FyZSB0ZXJtaW5hbCBlbXVsYXRvcgorIyAoY29tbXVuaWNhdGlvbiBwcm9ncmFtKSB3aGljaCBzdXBwb3J0czoKKyMKKyMJLSBTZXJpYWwgcG9ydCBjb25uZWN0aW9ucy4KKyMJLSBUQ1AvSVAgKHRlbG5ldCkgY29ubmVjdGlvbnMuCisjCS0gVlQxMDAgZW11bGF0aW9uLCBhbmQgc2VsZWN0ZWQgVlQyMDAvMzAwIGVtdWxhdGlvbi4KKyMJLSBURUs0MDEwIGVtdWxhdGlvbi4KKyMJLSBGaWxlIHRyYW5zZmVyIHByb3RvY29scyAoS2VybWl0LCBYTU9ERU0sIFpNT0RFTSwgQi1QTFVTIGFuZAorIwkgIFF1aWNrLVZBTikuCisjCS0gU2NyaXB0cyB1c2luZyB0aGUgIlRlcmEgVGVybSBMYW5ndWFnZSIuCisjCS0gSmFwYW5lc2UgYW5kIFJ1c3NpYW4gY2hhcmFjdGVyIHNldHMuCisjCisjIFRoZSBwcm9ncmFtIGRvZXMgbm90IGNvbWUgd2l0aCB0ZXJtaW5mbyBvciB0ZXJtY2FwIGVudHJpZXMuICBIb3dldmVyLCB0aGUKKyMgZW11bGF0aW9uICh0ZXN0aW5nIHdpdGggdnR0ZXN0IGFuZCBuY3Vyc2VzKSBpcyByZWFzb25hYmx5IGNsb3NlIHRvIHZ0MTAwIChubworIyB2dDUyIG9yIGRvdWJsZXNpemUgY2hhcmFjdGVyIHN1cHBvcnQ7IGJsaW5raW5nIGlzIGRvbmUgd2l0aCBjb2xvcikuICBCZXNpZGVzCisjIHRoZSBIUEEsIFZQQSBleHRlbnNpb25zIGl0IGFsc28gaW1wbGVtZW50cyBDUEwgYW5kIENOTC4KKyMKKyMgQWxsIG9mIHRoZSBmdW5jdGlvbiBrZXlzIGNhbiBiZSByZW1hcHBlZC4gIFRoaXMgZGVzY3JpcHRpb24gc2hvd3MgdGhlIGRlZmF1bHQKKyMgbWFwcGluZywgYXMgaW5zdGFsbGVkLiAgQm90aCB2dDEwMCBQRjEtUEY0IGtleXMgYW5kIHF1YXNpLXZ0MjIwIEYxLUY0IGtleXMKKyMgYXJlIHN1cHBvcnRlZC4gIEYxMy1GMjAgYXJlIG9idGFpbmVkIGJ5IHNoaWZ0aW5nIEYzLUYxMC4gIFRoZSBlZGl0aW5nIGtleXBhZAorIyBpcyBsYWlkIG91dCBsaWtlIHZ0MjIwLCByYXRoZXIgdGhhbiB0aGUgZmFjZSBjb2RlcyBvbiB0aGUgUEMga2V5Ym9hcmQsIGkuZSwKKyMJa2ZuZAlJbnNlcnQKKyMJa3NsdAlEZWxldGUKKyMJa2ljaDEJSG9tZQorIwlrZGNoMQlQYWdlVXAKKyMJa3BwCUVuZAorIwlrbnAJUGFnZURvd24KKyMKKyMgQU5TSSBjb2xvcnMgYXJlIGltcGxlbWVudGVkLCBidXQgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdmlkZW8gYXR0cmlidXRlcworIyBleGNlcHQgZm9yIHJldmVyc2UuCisjCisjIE5vIGZvbnRzIGFyZSBzdXBwbGllZCB3aXRoIHRoZSBwcm9ncmFtLCBzbyB0aGUgYWNzYyBzdHJpbmcgaXMgY2hvc2VuIHRvCisjIGNvcnJlc3BvbmQgd2l0aCB0aGUgZGVmYXVsdCBNaWNyb3NvZnQgdGVybWluYWwgZm9udC4KKyMKKyMgVGVyYSBUZXJtIHJlY29nbml6ZXMgc29tZSB4dGVybSBzZXF1ZW5jZXMsIGluY2x1ZGluZyB0aG9zZSBmb3Igc2V0dGluZyBhbmQKKyMgcmV0cmlldmluZyB0aGUgd2luZG93IHRpdGxlLCBhbmQgZm9yIHNldHRpbmcgdGhlIHdpbmRvdyBzaXplIChpLmUuLCB1c2luZworIyAicmVzaXplIC1zIiksIHRob3VnaCBpdCBkb2VzIG5vdCBwYXNzIFNJR1dJTkNIIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB0aGUKKyMgdXNlciByZXNpemVzIHRoZSB3aW5kb3cgd2l0aCB0aGUgbW91c2UuCit0ZXJhdGVybTIuM3xUZXJhIFRlcm0gUHJvLAorCWttLCB4b25ALAorCW5jdiM0MywgdnRALAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGlcMzE2alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cFwzMDRxXDMwNHJcMzA0c190XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzeVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNH5cMzc2LAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLCBjbGVhcj1cRVtIXEVbSiwKKwljbm9ybT1cRVs/MjVoLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZmxhc2g9XEVbPzVoXEVbPzVsJDwyMDAvPiwgaHBhPVxFWyVpJXAxJWRHLAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGtkY2gxPVxFWzN+LCBrZjE9XEVbMTF+LAorCWtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LAorCWtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LAorCWtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyPVxFWzEyfiwga2YyMD1cRVszNH4sCisJa2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwga2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LAorCWtwcD1cRVs1fiwga3NsdD1cRVs0fiwgb3A9XEVbMTAwbSwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLCBzZ3IwPVxFWzBtXDAxNywgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB2cGE9XEVbJWklcDElZGQsIHVzZT12dDEwMCtlbnEsCisJdXNlPWtsb25lK2NvbG9yLCB1c2U9dnQxMDAsCisKKyMgVmVyc2lvbiA0LjU5IGhhcyByZWd1bGFyIHZ0MTAwIGxpbmUtZHJhd2luZyAoc28gaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeQorIyB0byBjaG9vc2UgYSBXaW5kb3dzIE9FTSBmb250KS4KKyMKKyMgVGVzdGluZyB3aXRoIHRhY2s6CisjCS0gaXQgZG9lcyBub3QgaGF2ZSB4ZW5sIChzdXBwcmVzcyB0aGF0KQorIwktIHVuZGVybGluZSBzZWVtcyB0byB3b3JrIHdpdGggY29sb3IgKG1vZGlmeSBuY3YpLgorIyBUZXN0aW5nIHdpdGggdnR0ZXN0OgorIwktIHdyYXBwaW5nIGRpZmZlcnMgZnJvbSB2dDEwMCAobWVudSAxKS4KKyMJLSBpdCByZWNvZ25pemVzIHh0ZXJtJ3MgWDEwIGFuZCBub3JtYWwgbW91c2UgdHJhY2tpbmcsIGJ1dCBub25lIG9mIHRoZQorIwkgIG90aGVyIGZsYXZvcnMuCisjCS0gaXQgcmVjb2duaXplcyB0aGUgZHR0ZXJtIHdpbmRvdyBjb250cm9scyBmb3IgcmVwb3J0aW5nIHNpemUgaW4KKyMJICBjaGFyYWN0ZXJzIGFuZCBwaXhlbHMuCisjCS0gaXQgcGFzc2VzIFNJR1dJTkNILgordGVyYXRlcm00LjU5fFRlcmEgVGVybSBQcm8sCisJYmNlLCB4ZW5sQCwKKwluY3YjNDEsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwlrbW91cz1cRVtNLCB1c2U9dGVyYXRlcm0yLjMsCisKK3RlcmF0ZXJtfFRlcmEgVGVybSwKKwl1c2U9dGVyYXRlcm00LjU5LAorCisjIFRlc3RlZCB3aXRoIFdpbk5UIDQuMCwgdGhlIHRlbG5ldCBhcHBsaWNhdGlvbiBhc3N1bWVzIHRoZSBzY3JlZW5zaXplIGlzCisjIDI1eDgwLiAgVGhpcyBlbnRyeSB1c2VzIHRoZSAnVGVybWluYWwnIGZvbnQsIHRvIGdldCBsaW5lLWRyYXdpbmcgY2hhcmFjdGVycy4KKyMKKyMgT3RoZXIgbm90ZXM6CisjIGEpIEZhaWxzIHRhY2sncyBjdXAgKGN1cnNvci1hZGRyZXNzaW5nKSB0ZXN0LCB0aG91Z2ggY3VwIHdvcmtzIHdlbGwgZW5vdWdoCisjICAgIGZvciBjYXN1YWwgKG9jY2FzaW9uYWwpIHVzZS4gIEFsc28gZmFpbHMgc2V2ZXJhbCBvZiB0aGUgdnR0ZXN0IHNjcmVlbnMsCisjICAgIGJ1dCB0aGF0IGlzIG5vdCB1bnVzdWFsIGZvciB2dDEwMCAiZW11bGF0b3JzIi4KKyMgYikgRG9lcyBub3QgaW1wbGVtZW50IHZ0MTAwIGtleXBhZAorIyBjKSBSZWNvZ25pemVzIGEgc3Vic2V0IG9mIHZ0NTIgY29udHJvbHMuCittcy12dDEwMHxNUyB0ZWxuZXQgaW1pdGF0aW5nIGRlYyB2dDEwMCwKKwlsaW5lcyMyNSwKKwlhY3NjPStcMDIwXCxcMDIxLVwwMzAuXlkwXDMzM2BcMDA0YVwyNjFmXDM3MGdcMzYxaFwyNjBpXDMxNmpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwlrYTFALCBrYTNALCBrYjJALCBrYzFALCBrYzNALCBrZW50QCwga2YwQCwga2YxQCwga2YxMEAsIGtmMkAsIGtmM0AsIGtmNEAsCisJa2Y1QCwga2Y2QCwga2Y3QCwga2Y4QCwga2Y5QCwgdGJjQCwgdXNlPXZ0MTAyK2VucSwgdXNlPXZ0MTAwLAorCisjIFRlc3RlZCB3aXRoIFdpbmRvd3MgMjAwMCwgdGhlIHRlbG5ldCBhcHBsaWNhdGlvbiBydW5zIGluIGEgY29uc29sZSB3aW5kb3csCisjIGFsc28gdXNpbmcgJ1Rlcm1pbmFsJyBmb250LgorIworIyBPdGhlciBub3RlczoKKyMgYSkgVGhpcyB2ZXJzaW9uIGhhcyBubyBmdW5jdGlvbiBrZXlzIG9yIG51bWVyaWMga2V5cGFkLiAgVW5saWtlIHRoZSBvbGRlcgorIyAgICB2ZXJzaW9uLCB0aGUgbnVtZXJpYyBrZXlwYWQgaXMgZW50aXJlbHkgaWdub3JlZC4KKyMgYikgVGhlIHByb2dyYW0gc2V0cyAkVEVSTSB0byAiYW5zaSIsIHdoaWNoIG9mIGNvdXJzZSBpcyBpbmFjY3VyYXRlLgorbXMtdnQxMDAtY29sb3J8dnRudHx3aW5kb3dzIDIwMDAgYW5zaSAoc2ljKSwKKwliY2UsCisJZGNoPVxFWyVwMSVkUCwgaWNoPVxFWyVwMSVkQCwgdXNlPWVjbWErY29sb3IsCisJdXNlPW1zLXZ0MTAwLAorCisjIEJhc2VkIG9uIGNvbW1lbnRzIGZyb20gRmVkZXJpY28gQmlhbmNoaToKKyMKKyMJdnQxMDArIGlzIGJhc2ljYWxseSBhIFZUMTAyLW5vU0dSIHdpdGggQU5TSS5TWVMgY29sb3JzIGFuZCBhIGRpZmZlcmVudAorIwlzY2hlbWUgZm9yIFBGIGtleXMuCisjCisjIGFuZCBQdVRUWSB3aXNobGlzdDoKKyMKKyMJVGhlIG1vZGlmaWVycyBhcmUgcmVwcmVzZW50ZWQgYXMgdGhlIGNvZGVzIGxpc3RlZCBhYm92ZSwgcHJlZml4ZWQgdG8KKyMJdGhlIG5vcm1hbCBzZXF1ZW5jZXMuICBJZiB0aGUgbW9kaWZpZXIgaXMgcHJlc3NlZCBhbG9uZSwgaXRzIHNlcXVlbmNlCisjCWlzIHRyYW5zbWl0dGVkIHR3aWNlIGluIHN1Y2Nlc3Npb24uICBJZiBtdWx0aXBsZSBtb2RpZmllcnMgYXBwbHksCisjCXRoZXkncmUgdHJhbnNtaXR0ZWQgaW4gdGhlIG9yZGVyIHNoaWZ0LCBjb250cm9sLCBhbHQuCisjCisjCVNoaWZ0CVxFXlMKKyMJQWx0CVxFXkEsCisjCUN0cmwJXEVeQywKK21zLXZ0MTAwK3x2dDEwMCt8d2luZG93cyBYUCB2dDEwMCsgKHNpYyksCisJa2RjaDE9XEUtLCBrZW5kPVxFaywga2YxPVxFMSwga2YxMD1cRTAsIGtmMTE9XEUhLCBrZjEyPVxFQCwKKwlrZjEzPVxFXDAyM1xFMSwga2YxND1cRVwwMjNcRTIsIGtmMTU9XEVcMDIzXEUzLAorCWtmMTY9XEVcMDIzXEU0LCBrZjE3PVxFXDAyM1xFNSwga2YxOD1cRVwwMjNcRTYsCisJa2YxOT1cRVwwMjNcRTcsIGtmMj1cRTIsIGtmMjA9XEVcMDIzXEU4LCBrZjIxPVxFXDAyM1xFOSwKKwlrZjIyPVxFXDAyM1xFMCwga2YyMz1cRVwwMjNcRSEsIGtmMjQ9XEVcMDIzXEVALAorCWtmMjU9XEVcMDAzXEUxLCBrZjI2PVxFXDAwM1xFMiwga2YyNz1cRVwwMDNcRTMsCisJa2YyOD1cRVwwMDNcRTQsIGtmMjk9XEVcMDAzXEU1LCBrZjM9XEUzLCBrZjMwPVxFXDAwM1xFNiwKKwlrZjMxPVxFXDAwM1xFNywga2YzMj1cRVwwMDNcRTgsIGtmMzM9XEVcMDAzXEU5LAorCWtmMzQ9XEVcMDAzXEUwLCBrZjM1PVxFXDAwM1xFISwga2YzNj1cRVwwMDNcRUAsCisJa2YzNz1cRVwwMDFcRTEsIGtmMzg9XEVcMDAxXEUyLCBrZjM5PVxFXDAwMVxFMywga2Y0PVxFNCwKKwlrZjQwPVxFXDAwMVxFNCwga2Y0MT1cRVwwMDFcRTUsIGtmNDI9XEVcMDAxXEU2LAorCWtmNDM9XEVcMDAxXEU3LCBrZjQ0PVxFXDAwMVxFOCwga2Y0NT1cRVwwMDFcRTksCisJa2Y0Nj1cRVwwMDFcRTAsIGtmNDc9XEVcMDAxXEUhLCBrZjQ4PVxFXDAwMVxFQCwga2Y1PVxFNSwKKwlrZjY9XEU2LCBrZjc9XEU3LCBrZjg9XEU4LCBrZjk9XEU5LCBraG9tZT1cRWgsIGtpY2gxPVxFKywKKwlrbnA9XEUvLCBrcHA9XEU/LCB1c2U9bXMtdnQxMDAtY29sb3IsCisKK21zLXZ0LXV0Zjh8dnQtdXRmOHxVVEYtOCBmbGF2b3Igb2YgdnQxMDArLAorCXVzZT1tcy12dDEwMCssCisKKyMgYSBtaW5pbWFsIHN1YnNldCBvZiBhIHZ0MTAwIChjb21wYXJlIHdpdGggIm5ld3MtdW5rKS4KK3R0fHRrdGVybXxEb24gTGliZXMnIHRrIHRleHQgd2lkZ2V0IHRlcm1pbmFsIGVtdWxhdG9yLAorCWNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3VmMT1cRVtDLCBjdXA9XEVbJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwgaW5kPV5KLCBrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywKKwlrZjU9XEVPVCwga2Y2PVxFT1UsIGtmNz1cRU9WLCBrZjg9XEVPVywga2Y5PVxFT1gsIHJtc289XEVbbSwKKwlzbXNvPVxFWzdtLAorCisjIyMjIFggdGVybWluYWwgZW11bGF0b3JzCisjCisjIFlvdSBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIC5YZGVmYXVsdHMgdG8gY2hhbmdlIHRoZSB0ZXJtaW5hbCB0eXBlCisjIHNldCBieSB0aGUgeHRlcm1zIHlvdSBzdGFydCB1cCB0byBteS14dGVybToKKyMKKyMgKnRlcm1OYW1lOiAgbXkteHRlcm0KKyMKKyMgU3lzdGVtIGFkbWluaXN0cmF0b3JzIGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgZW50cnkgZm9yIHh0ZXJtIGluc3RhbmNlcworIyBieSBhZGRpbmcgYSBzaW1pbGFyIGxpbmUgdG8gL3Vzci9YMTEvbGliL1gxMS9hcHAtZGVmYXVsdHMvWFRlcm0uICBJbiBlaXRoZXIKKyMgY2FzZSwgeHRlcm0gd2lsbCBkZXRlY3QgYW5kIHJlamVjdCBhbiBpbnZhbGlkIHRlcm1pbmFsIHR5cGUsIGZhbGxpbmcgYmFjaworIyB0byB0aGUgZGVmYXVsdCBvZiB4dGVybS4KKyMKKworIyBYMTAvNi42CTExLzcvODYsIG1pbnVzIGFsdGVybmF0ZSBzY3JlZW4sIHBsdXMgKGNzcikKKyMgKHh0ZXJtOiAiOk1UOiIgY2hhbmdlZCB0byAiOmttOiI7IGFkZGVkIDxzbWFtPi88cm1hbT4gYmFzZWQgb24gaW5pdCBzdHJpbmc7CisjIHJlbW92ZWQgKGhzLCBlc2xvaywgdHNsPVxFWz9FXEVbPyVpJWRULCBmc2w9XEVbP0YsIGRzbD1cRVs/RSkKKyMgYXMgdGhlc2Ugc2VlbSBub3QgdG8gd29yayAtLSBlc3IpCit4MTB0ZXJtfHZzMTAwLXgxMHx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWDEwIHdpbmRvdyBzeXN0ZW0pLAorCU9UYnMsIGFtLCBrbSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjNjUsCisJYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFWzJKLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XkosIGlzMj1cRVxFW21cRVs/N2hcRVs/MTs0bCwga2JzPV5ILAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMT1cRU9QLAorCWtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFtPVxFWz83bCwKKwlybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwgc21reD1cRVs/MWhcRT0sCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKyMgQ29tcGF0aWJsZSB3aXRoIHRoZSBSNSB4dGVybQorIyAoZnJvbSB0aGUgWEZyZWU4NiAzLjIgZGlzdHJpYnV0aW9uLCA8Ymxpbms9QD4gcmVtb3ZlZCkKKyMgYWRkZWQga2hvbWUva2VuZCwgcm1pci9zbWlyLCBybXVsL3NtdWwsIGh0cyBiYXNlZCBvbiB0aGUgUjUgeHRlcm0gY29kZSAtIFRECisjIGNvcnJlY3RlZCB0eXBvcyBpbiByczIgc3RyaW5nIC0gVEQKKyMgYWRkZWQgdTYtdTkgLVRECit4dGVybS1yNXx4dGVybSBSNSB2ZXJzaW9uLAorCU9UYnMsIGFtLCBrbSwgbXNnciwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtkY2gxPVxFWzN+LAorCWtkbDE9XEVbMzF+LCBrZWw9XEVbOH4sIGtlbmQ9XEVbNH4sIGtmMD1cRU9xLCBrZjE9XEVbMTF+LAorCWtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMj1cRVsxMn4sCisJa2YzPVxFWzEzfiwga2Y0PVxFWzE0fiwga2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraG9tZT1cRVsxfiwga2ljaDE9XEVbMn4sCisJa2lsMT1cRVszMH4sIGttb3VzPVxFW00sIGtucD1cRVs2fiwga3BwPVxFWzV+LCByYz1cRTgsCisJcmV2PVxFWzdtLCByaT1cRU0sIHJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sCisJcm11bD1cRVttLAorCXJzMj1cRT5cRVs/MTszOzQ7NTs2bFxFWzRsXEVbPzdoXEVbbVxFW3JcRVsySlxFW0gsCisJc2M9XEU3LAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7bSwKKwlzZ3IwPVxFW20sIHNtaXI9XEVbNGgsIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywgdXNlPXZ0MTAwK2VucSwKKyMgQ29tcGF0aWJsZSB3aXRoIHRoZSBSNiB4dGVybQorIyAoZnJvbSBYRnJlZTg2IDMuMiBkaXN0cmlidXRpb24sIDxhY3NjPiBhbmQgPGl0PiBhZGRlZCwgPGJsaW5rQD4gcmVtb3ZlZCkKKyMgYWRkZWQga2hvbWUva2VuZCwgaHRzIGJhc2VkIG9uIHRoZSBSNiB4dGVybSBjb2RlIC0gVEQKKyMgKGtob21lL2tlbmQgZG8gbm90IGFjdHVhbGx5IHdvcmsgaW4gWDExUjUgb3IgWDExUjYsIGJ1dCBtYW55IHBlb3BsZSB1c2UgdGhpcworIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGVtdWxhdG9ycykuCit4dGVybS1yNnx4dGVybS1vbGR8eHRlcm0gWDExUjYgdmVyc2lvbiwKKwlPVGJzLCBhbSwga20sIG1pciwgbXNnciwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWBgYWFmZmdnaWlqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGVuYWNzPVxFKTAsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLAorCWlzMj1cRVttXEVbPzdoXEVbNGxcRT5cRTdcRVtyXEVbPzE7Mzs0OzZsXEU4LCBrYnM9XkgsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZGNoMT1cRVszfiwga2YxPVxFWzExfiwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LAorCWtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LAorCWtmMj1cRVsxMn4sIGtmMjA9XEVbMzR+LCBrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2ZuZD1cRVsxfiwga2ljaDE9XEVbMn4sIGttb3VzPVxFW00sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWtzbHQ9XEVbNH4sIG1lbWw9XEVsLCBtZW11PVxFbSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWFjcz1eTywgcm1jdXA9XEVbMkpcRVs/NDdsXEU4LCBybWlyPVxFWzRsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XEVbbVxFWz83aFxFWzRsXEU+XEU3XEVbclxFWz8xOzM7NDs2bFxFOCwgc2M9XEU3LAorCXNncjA9XEVbbSwgc21hY3M9Xk4sIHNtY3VwPVxFN1xFWz80N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl1c2U9dnQxMDArZW5xLAorIyBUaGlzIGlzIHRoZSBiYXNlIHh0ZXJtIGVudHJ5IGZvciB0aGUgeHRlcm0gc3VwcGxpZWQgd2l0aCBYRnJlZTg2IDMuMiAmIHVwLgorIyBUaGUgbmFtZSBoYXMgYmVlbiBjaGFuZ2VkIGFuZCBzb21lIGFsaWFzZXMgaGF2ZSBiZWVuIHJlbW92ZWQuCit4dGVybS14Zjg2LXYzMnx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWEZyZWU4NiAzLjIgV2luZG93IFN5c3RlbSksCisJT1RicywgYW0sIGJjZSwga20sIG1pciwgbXNnciwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgbmN2QCwKKwlhY3NjPWBgYWFmZmdnaWlqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgZW5hY3M9XEUoQlxFKTAsCisJZmxhc2g9XEVbPzVoJDwxMDAvPlxFWz81bCwgaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsCisJaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XkosCisJaXMyPVxFN1xFW3JcRVttXEVbPzdoXEVbPzE7Mzs0OzZsXEVbNGxcRThcRT4sCisJa2JlZz1cRU9FLCBrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwga2RjaDE9XDE3Nywga2VuZD1cRU9GLCBrZjE9XEVbMTF+LCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwKKwlrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwKKwlrZjE5PVxFWzMzfiwga2YyPVxFWzEyfiwga2YyMD1cRVszNH4sIGtmMz1cRVsxM34sCisJa2Y0PVxFWzE0fiwga2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwKKwlrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LCBraG9tZT1cRU9ILCBraWNoMT1cRVsyfiwKKwlrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3NsdD1cRVs0fiwgbWVtbD1cRWwsCisJbWVtdT1cRW0sIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLCBybWFtPVxFWz83bCwKKwlybWN1cD1cRVsySlxFWz80N2xcRTgsIHJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LAorCXJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwgcnMxPV5PLAorCXJzMj1cRTdcRVtyXEU4XEVbbVxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU+LCBzYz1cRTcsCisJc2V0Yj1cRVs0JT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorCXNldGY9XEVbMyU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwlzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21jdXA9XEU3XEVbPzQ3aCwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csIHZwYT1cRVslaSVwMSVkZCwgdXNlPXZ0MTAwK2VucSwKKwl1c2U9ZWNtYStjb2xvciwgdXNlPXZ0MjIwK2tleXBhZCwKKworIyBUaGlzIGlzIHRoZSBzdG9jayB4dGVybSBlbnRyeSBzdXBwbGllZCB3aXRoIFhGcmVlODYgMy4zLCB3aGljaCB1c2VzIFZUMTAwCisjIGNvZGVzIGZvciBGMS1GNCBleGNlcHQgd2hpbGUgaW4gVlQyMjAgbW9kZS4KK3h0ZXJtLXhmODYtdjMzfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYRnJlZTg2IDMuMyBXaW5kb3cgU3lzdGVtKSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgdXNlPXh0ZXJtLXhmODYtdjMyLAorCisjIFRoaXMgdmVyc2lvbiB3YXMgcmVsZWFzZWQgaW4gWEZyZWU4NiAzLjMuMyAoTm92ZW1iZXIgMTk5OCkuCisjIEJlc2lkZXMgcHJvdmlkaW5nIHByaW50ZXIgc3VwcG9ydCwgaXQgZXhwbG9pdHMgYSBuZXcgZmVhdHVyZSB0aGF0IGFsbG93cworIyB4dGVybSB0byB1c2UgdGVybWluZm8tYmFzZWQgZGVzY3JpcHRpb25zIHdpdGggdGhlIHRpdGVJbmhpYml0IHJlc291cmNlLgorIyAtLSB0aGUgZGlzdHJpYnV0aW9uIGNvbnRhaW5lZCBpbmNvcnJlY3Qga2hvbWUva2VuZCB2YWx1ZXMgLVRECit4dGVybS14Zjg2LXYzMzN8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFhGcmVlODYgMy4zLjMgV2luZG93IFN5c3RlbSksCisJbWM1aSwKKwlibGluaz1cRVs1bSwgaWNoMUAsIGludmlzPVxFWzhtLAorCWlzMj1cRVshcFxFWz8zOzRsXEVbNGxcRT4sIGtkY2gxPVxFWzN+LCBrZm5kQCwga3NsdEAsCisJbWMwPVxFW2ksIG1jND1cRVs0aSwgbWM1PVxFWzVpLCBybWN1cD1cRVs/MTA0N2xcRVs/MTA0OGwsCisJcnMxPVxFYywgcnMyPVxFWyFwXEVbPzM7NGxcRVs0bFxFPiwKKwlzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc21jdXA9XEVbPzEwNDhoXEVbPzEwNDdoLCB1c2U9eHRlcm0teGY4Ni12MzMsCisKKyMgVGhpcyB2ZXJzaW9uIHdhcyByZWxlYXNlZCBpbiBYRnJlZTg2IDQuMC4KK3h0ZXJtLXhmODYtdjQwfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYRnJlZTg2IDQuMCBXaW5kb3cgU3lzdGVtKSwKKwlucGMsCisJa0RDPVxFWzM7NX4sIGtFTkQ9XEVPNUYsIGtIT009XEVPNUgsIGtJQz1cRVsyOzV+LAorCWtMRlQ9XEVPNUQsIGtOWFQ9XEVbNjs1fiwga1BSVj1cRVs1OzV+LCBrUklUPVxFTzVDLCBrYTFALAorCWthM0AsIGtiMj1cRU9FLCBrYzFALCBrYzNALCBrY2J0PVxFW1osIGtkY2gxPVxFWzN+LCBrZW5kPVxFT0YsCisJa2YxMz1cRU8yUCwga2YxND1cRU8yUSwga2YxNT1cRU8yUiwga2YxNj1cRU8yUywKKwlrZjE3PVxFWzE1OzJ+LCBrZjE4PVxFWzE3OzJ+LCBrZjE5PVxFWzE4OzJ+LAorCWtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisJa2YyMz1cRVsyMzsyfiwga2YyND1cRVsyNDsyfiwga2YyNT1cRU81UCwga2YyNj1cRU81USwKKwlrZjI3PVxFTzVSLCBrZjI4PVxFTzVTLCBrZjI5PVxFWzE1OzV+LCBrZjMwPVxFWzE3OzV+LAorCWtmMzE9XEVbMTg7NX4sIGtmMzI9XEVbMTk7NX4sIGtmMzM9XEVbMjA7NX4sCisJa2YzND1cRVsyMTs1fiwga2YzNT1cRVsyMzs1fiwga2YzNj1cRVsyNDs1fiwga2YzNz1cRU82UCwKKwlrZjM4PVxFTzZRLCBrZjM5PVxFTzZSLCBrZjQwPVxFTzZTLCBrZjQxPVxFWzE1OzZ+LAorCWtmNDI9XEVbMTc7Nn4sIGtmNDM9XEVbMTg7Nn4sIGtmNDQ9XEVbMTk7Nn4sCisJa2Y0NT1cRVsyMDs2fiwga2Y0Nj1cRVsyMTs2fiwga2Y0Nz1cRVsyMzs2fiwKKwlrZjQ4PVxFWzI0OzZ+LCBraG9tZT1cRU9ILCBybWN1cD1cRVs/MTA0OWwsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc21jdXA9XEVbPzEwNDloLCB1c2U9eHRlcm0teGY4Ni12MzMzLAorCisjIFRoaXMgdmVyc2lvbiB3YXMgcmVsZWFzZWQgaW4gWEZyZWU4NiA0LjMuCit4dGVybS14Zjg2LXY0M3x4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWEZyZWU4NiA0LjMgV2luZG93IFN5c3RlbSksCisJa0RDPVxFWzM7Mn4sIGtFTkQ9XEVbMTsyRiwga0hPTT1cRVsxOzJILCBrSUM9XEVbMjsyfiwKKwlrTEZUPVxFWzE7MkQsIGtOWFQ9XEVbNjsyfiwga1BSVj1cRVs1OzJ+LCBrUklUPVxFWzE7MkMsCisJa2JlZ0AsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwl1c2U9eHRlcm0teGY4Ni12NDAsCisKKyMgVGhpcyB2ZXJzaW9uIHdhcyByZWxlYXNlZCBpbiBYRnJlZTg2IDQuNC4KK3h0ZXJtLXhmODYtdjQ0fHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYRnJlZTg2IDQuNCBXaW5kb3cgU3lzdGVtKSwKKwljbm9ybT1cRVs/MTJsXEVbPzI1aCwgY3Z2aXM9XEVbPzEyOzI1aCwgaW5kbj1cRVslcDElZFMsCisJcmluPVxFWyVwMSVkVCwgdXNlPXh0ZXJtLXhmODYtdjQzLAorCit4dGVybS14ZnJlZTg2fHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIChYRnJlZTg2KSwKKwl1c2U9eHRlcm0teGY4Ni12NDQsCisKKyMgVGhpcyB2ZXJzaW9uIHJlZmxlY3RzIHRoZSBjdXJyZW50IHh0ZXJtIGZlYXR1cmVzLgoreHRlcm0tbmV3fG1vZGVybiB4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciwKKwlucGMsCisJaW5kbj1cRVslcDElZFMsIGtEQz1cRVszOzJ+LCBrRU5EPVxFWzE7MkYsIGtIT009XEVbMTsySCwKKwlrSUM9XEVbMjsyfiwga05YVD1cRVs2OzJ+LCBrUFJWPVxFWzU7Mn4sIGtiMj1cRU9FLAorCWtjYnQ9XEVbWiwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZW5kPVxFT0YsIGtlbnQ9XEVPTSwga2hvbWU9XEVPSCwga2ljaDE9XEVbMn4sIGttb3VzPVxFW00sCisJa25wPVxFWzZ+LCBrcHA9XEVbNX4sIHJpbj1cRVslcDElZFQsIHVzZT14dGVybStwY2ZrZXlzLAorCXVzZT14dGVybS1iYXNpYywKKyMKKyMgVGhpcyBmcmFnbWVudCBkZXNjcmliZXMgYXMgbXVjaCBvZiBYRnJlZTg2IHh0ZXJtJ3MgInBjLXN0eWxlIiBmdW5jdGlvbgorIyBrZXlzIGFzIHdpbGwgZml0IGludG8gdGVybWluZm8ncyA2MCBmdW5jdGlvbiBrZXlzLgorIyBGcm9tIGN0bHNlcXMubXM6CisjICAgIENvZGUgICAgIE1vZGlmaWVycworIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAyICAgICAgIFNoaWZ0CisjICAgICAzICAgICAgIEFsdAorIyAgICAgNCAgICAgICBTaGlmdCArIEFsdAorIyAgICAgNSAgICAgICBDb250cm9sCisjICAgICA2ICAgICAgIFNoaWZ0ICsgQ29udHJvbAorIyAgICAgNyAgICAgICBBbHQgKyBDb250cm9sCisjICAgICA4ICAgICAgIFNoaWZ0ICsgQWx0ICsgQ29udHJvbAorIyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBtZXRhIGtleSBtYXkgYWxzbyBiZSB1c2VkIGFzIGEgbW9kaWZpZXIgaW4gdGhpcyBzY2hlbWUsIGFkZGluZyBhbm90aGVyCisjIGJpdCB0byB0aGUgcGFyYW1ldGVyLgoreHRlcm0rcGNma2V5c3xmcmFnbWVudCBmb3IgUEMtc3R5bGUgZmtleXMsCisJdXNlPXh0ZXJtK2FwcCwgdXNlPXh0ZXJtK3BjZjIsIHVzZT14dGVybStwY2MyLAorCXVzZT14dGVybStwY2UyLAorIworeHRlcm0rbm9hcHB8ZnJhZ21lbnQgd2l0aCBjdXJzb3Iga2V5cyBpbiBub3JtYWwgbW9kZSwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZW5kPVxFW0YsCisJa2hvbWU9XEVbSCwKKworeHRlcm0rYXBwfGZyYWdtZW50IHdpdGggY3Vyc29yIGtleXMgaW4gYXBwbGljYXRpb24gbW9kZSwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZW5kPVxFT0YsCisJa2hvbWU9XEVPSCwKKyMKKyMgVGhlICJQQy1zdHlsZSIgbW9kaWZpZXIgc2NoZW1lIHdhcyBpbnRyb2R1Y2VkIGluIHh0ZXJtIHBhdGNoICM5NCAoMTk5OS8zLzI3KQorIyBhbmQgcmV2aXNlZCBpbiBwYXRjaCAjMTY3ICgyMDAyLzgvMjQpLiAgU29tZSBvdGhlciB0ZXJtaW5hbCBlbXVsYXRvcnMgY29waWVkCisjIHRoZSBlYXJsaWVyIHNjaGVtZSwgYXMgbm90ZWQgaW4gdGhlICJ1c2U9IiBjbGF1c2VzIGluIHRoaXMgZmlsZS4KKyMKKyMgVGhlIG9yaWdpbmFsIGFzc2lnbm1lbnRzIGZyb20gcGF0Y2ggIzk0IGZvciBjdXJzb3Ita2V5cyBoYWQgc29tZSB0ZWNobmljYWwKKyMgaXNzdWVzOgorIworIwlBIHBhcmFtZXRlciBmb3IgYSBmdW5jdGlvbi1rZXkgdG8gcmVwcmVzZW50IGEgbW9kaWZpZXIgaXMganVzdCBtb3JlCisjCWJpdHMuICBCdXQgZm9yIGEgY3Vyc29yLWtleSBpdCBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUKKyMJYXBwbGljYXRpb24uICBGb3IgaW5zdGFuY2UsIGVtYWNzIGRlY29kZXMgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiBhCisjCWN1cnNvci1rZXkgYXMgYSByZXBlYXQgY291bnQuCisjCisjCUEgcGFyYW1ldGVyaXplZCBzdHJpbmcgc2hvdWxkIChyZWFsbHkpIG5vdCBiZWdpbiB3aXRoIFNTMyAoXEVPKS4KKyMJUmF0aGVyLCBDU0kgKFxFWykgc2hvdWxkIGJlIHVzZWQuCisjCisjIEZvciB0aGVzZSByZWFzb25zLCB0aGUgb3JpZ2luYWwgYXNzaWdubWVudHMgd2VyZSBkZXByZWNhdGVkLiAgRm9yCisjIGNvbXBhdGliaWxpdHkgcmVhc29ucywgdGhleSBhcmUgc3RpbGwgYXZhaWxhYmxlIGFzIGEgc2V0dGluZyBvZiB4dGVybSdzCisjIG1vZGlmeUN1cnNvcktleXMgcmVzb3VyY2UuICBUaGVzZSBmcmFnbWVudHMgbGlzdCB0aGUgbW9kaWZpZWQgY3Vyc29yLWtleXMKKyMgdGhhdCBtaWdodCBhcHBseSB0byB4dGVybStwY2ZrZXlzIHdpdGggZGlmZmVyZW50IHZhbHVlcyBvZiB0aGF0IHJlc291cmNlLgoreHRlcm0rcGNjM3xmcmFnbWVudCB3aXRoIG1vZGlmeUN1cnNvcktleXM6MywKKwlrTEZUPVxFWz4xOzJELCBrUklUPVxFWz4xOzJDLCBraW5kPVxFWz4xOzJCLAorCWtyaT1cRVs+MTsyQSwga0ROPVxFWz4xOzJCLCBrRE4zPVxFWz4xOzNCLCBrRE40PVxFWz4xOzRCLAorCWtETjU9XEVbPjE7NUIsIGtETjY9XEVbPjE7NkIsIGtETjc9XEVbPjE7N0IsCisJa0xGVDM9XEVbPjE7M0QsIGtMRlQ0PVxFWz4xOzRELCBrTEZUNT1cRVs+MTs1RCwKKwlrTEZUNj1cRVs+MTs2RCwga0xGVDc9XEVbPjE7N0QsIGtSSVQzPVxFWz4xOzNDLAorCWtSSVQ0PVxFWz4xOzRDLCBrUklUNT1cRVs+MTs1Qywga1JJVDY9XEVbPjE7NkMsCisJa1JJVDc9XEVbPjE7N0MsIGtVUD1cRVs+MTsyQSwga1VQMz1cRVs+MTszQSwKKwlrVVA0PVxFWz4xOzRBLCBrVVA1PVxFWz4xOzVBLCBrVVA2PVxFWz4xOzZBLAorCWtVUDc9XEVbPjE7N0EsCisKK3h0ZXJtK3BjYzJ8ZnJhZ21lbnQgd2l0aCBtb2RpZnlDdXJzb3JLZXlzOjIsCisJa0xGVD1cRVsxOzJELCBrUklUPVxFWzE7MkMsIGtpbmQ9XEVbMTsyQiwga3JpPVxFWzE7MkEsCisJa0ROPVxFWzE7MkIsIGtETjM9XEVbMTszQiwga0ROND1cRVsxOzRCLCBrRE41PVxFWzE7NUIsCisJa0RONj1cRVsxOzZCLCBrRE43PVxFWzE7N0IsIGtMRlQzPVxFWzE7M0QsIGtMRlQ0PVxFWzE7NEQsCisJa0xGVDU9XEVbMTs1RCwga0xGVDY9XEVbMTs2RCwga0xGVDc9XEVbMTs3RCwKKwlrUklUMz1cRVsxOzNDLCBrUklUND1cRVsxOzRDLCBrUklUNT1cRVsxOzVDLAorCWtSSVQ2PVxFWzE7NkMsIGtSSVQ3PVxFWzE7N0MsIGtVUD1cRVsxOzJBLCBrVVAzPVxFWzE7M0EsCisJa1VQND1cRVsxOzRBLCBrVVA1PVxFWzE7NUEsIGtVUDY9XEVbMTs2QSwga1VQNz1cRVsxOzdBLAorCit4dGVybStwY2MxfGZyYWdtZW50IHdpdGggbW9kaWZ5Q3Vyc29yS2V5czoxLAorCWtMRlQ9XEVbMkQsIGtSSVQ9XEVbMkMsIGtpbmQ9XEVbMkIsIGtyaT1cRVsyQSwga0ROPVxFWzJCLAorCWtETjM9XEVbM0IsIGtETjQ9XEVbNEIsIGtETjU9XEVbNUIsIGtETjY9XEVbNkIsIGtETjc9XEVbN0IsCisJa0xGVDM9XEVbM0QsIGtMRlQ0PVxFWzRELCBrTEZUNT1cRVs1RCwga0xGVDY9XEVbNkQsCisJa0xGVDc9XEVbN0QsIGtSSVQzPVxFWzNDLCBrUklUND1cRVs0Qywga1JJVDU9XEVbNUMsCisJa1JJVDY9XEVbNkMsIGtSSVQ3PVxFWzdDLCBrVVA9XEVbMkEsIGtVUDM9XEVbM0EsCisJa1VQND1cRVs0QSwga1VQNT1cRVs1QSwga1VQNj1cRVs2QSwga1VQNz1cRVs3QSwKKworeHRlcm0rcGNjMHxmcmFnbWVudCB3aXRoIG1vZGlmeUN1cnNvcktleXM6MCwKKwlrTEZUPVxFTzJELCBrUklUPVxFTzJDLCBraW5kPVxFTzJCLCBrcmk9XEVPMkEsIGtETj1cRU8yQiwKKwlrRE4zPVxFTzNCLCBrRE40PVxFTzRCLCBrRE41PVxFTzVCLCBrRE42PVxFTzZCLCBrRE43PVxFTzdCLAorCWtMRlQzPVxFTzNELCBrTEZUND1cRU80RCwga0xGVDU9XEVPNUQsIGtMRlQ2PVxFTzZELAorCWtMRlQ3PVxFTzdELCBrUklUMz1cRU8zQywga1JJVDQ9XEVPNEMsIGtSSVQ1PVxFTzVDLAorCWtSSVQ2PVxFTzZDLCBrUklUNz1cRU83Qywga1VQPVxFTzJBLCBrVVAzPVxFTzNBLAorCWtVUDQ9XEVPNEEsIGtVUDU9XEVPNUEsIGtVUDY9XEVPNkEsIGtVUDc9XEVPN0EsCisKKyMKKyMgSGVyZSBhcmUgY29ycmVzcG9uZGluZyBmcmFnbWVudHMgZnJvbSB4dGVybSBwYXRjaCAjMjE2OgorIworeHRlcm0rcGNmMHxmcmFnbWVudCB3aXRoIG1vZGlmeUZ1bmN0aW9uS2V5czowLAorCWtmMT1cRU9QLCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LAorCWtmMTM9XEVPMlAsIGtmMTQ9XEVPMlEsIGtmMTU9XEVPMlIsIGtmMTY9XEVPMlMsCisJa2YxNz1cRVsxNTsyfiwga2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwga2YyPVxFT1EsCisJa2YyMD1cRVsxOTsyfiwga2YyMT1cRVsyMDsyfiwga2YyMj1cRVsyMTsyfiwKKwlrZjIzPVxFWzIzOzJ+LCBrZjI0PVxFWzI0OzJ+LCBrZjI1PVxFTzVQLCBrZjI2PVxFTzVRLAorCWtmMjc9XEVPNVIsIGtmMjg9XEVPNVMsIGtmMjk9XEVbMTU7NX4sIGtmMz1cRU9SLAorCWtmMzA9XEVbMTc7NX4sIGtmMzE9XEVbMTg7NX4sIGtmMzI9XEVbMTk7NX4sCisJa2YzMz1cRVsyMDs1fiwga2YzND1cRVsyMTs1fiwga2YzNT1cRVsyMzs1fiwKKwlrZjM2PVxFWzI0OzV+LCBrZjM3PVxFTzZQLCBrZjM4PVxFTzZRLCBrZjM5PVxFTzZSLAorCWtmND1cRU9TLCBrZjQwPVxFTzZTLCBrZjQxPVxFWzE1OzZ+LCBrZjQyPVxFWzE3OzZ+LAorCWtmNDM9XEVbMTg7Nn4sIGtmNDQ9XEVbMTk7Nn4sIGtmNDU9XEVbMjA7Nn4sCisJa2Y0Nj1cRVsyMTs2fiwga2Y0Nz1cRVsyMzs2fiwga2Y0OD1cRVsyNDs2fiwga2Y0OT1cRU8zUCwKKwlrZjU9XEVbMTV+LCBrZjUwPVxFTzNRLCBrZjUxPVxFTzNSLCBrZjUyPVxFTzNTLAorCWtmNTM9XEVbMTU7M34sIGtmNTQ9XEVbMTc7M34sIGtmNTU9XEVbMTg7M34sCisJa2Y1Nj1cRVsxOTszfiwga2Y1Nz1cRVsyMDszfiwga2Y1OD1cRVsyMTszfiwKKwlrZjU5PVxFWzIzOzN+LCBrZjY9XEVbMTd+LCBrZjYwPVxFWzI0OzN+LCBrZjYxPVxFTzRQLAorCWtmNjI9XEVPNFEsIGtmNjM9XEVPNFIsIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisjCit4dGVybStwY2YyfGZyYWdtZW50IHdpdGggbW9kaWZ5RnVuY3Rpb25LZXlzOjIsCisJa2YxPVxFT1AsIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sCisJa2YxMz1cRVsxOzJQLCBrZjE0PVxFWzE7MlEsIGtmMTU9XEVbMTsyUiwga2YxNj1cRVsxOzJTLAorCWtmMTc9XEVbMTU7Mn4sIGtmMTg9XEVbMTc7Mn4sIGtmMTk9XEVbMTg7Mn4sIGtmMj1cRU9RLAorCWtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisJa2YyMz1cRVsyMzsyfiwga2YyND1cRVsyNDsyfiwga2YyNT1cRVsxOzVQLCBrZjI2PVxFWzE7NVEsCisJa2YyNz1cRVsxOzVSLCBrZjI4PVxFWzE7NVMsIGtmMjk9XEVbMTU7NX4sIGtmMz1cRU9SLAorCWtmMzA9XEVbMTc7NX4sIGtmMzE9XEVbMTg7NX4sIGtmMzI9XEVbMTk7NX4sCisJa2YzMz1cRVsyMDs1fiwga2YzND1cRVsyMTs1fiwga2YzNT1cRVsyMzs1fiwKKwlrZjM2PVxFWzI0OzV+LCBrZjM3PVxFWzE7NlAsIGtmMzg9XEVbMTs2USwga2YzOT1cRVsxOzZSLAorCWtmND1cRU9TLCBrZjQwPVxFWzE7NlMsIGtmNDE9XEVbMTU7Nn4sIGtmNDI9XEVbMTc7Nn4sCisJa2Y0Mz1cRVsxODs2fiwga2Y0ND1cRVsxOTs2fiwga2Y0NT1cRVsyMDs2fiwKKwlrZjQ2PVxFWzIxOzZ+LCBrZjQ3PVxFWzIzOzZ+LCBrZjQ4PVxFWzI0OzZ+LAorCWtmNDk9XEVbMTszUCwga2Y1PVxFWzE1fiwga2Y1MD1cRVsxOzNRLCBrZjUxPVxFWzE7M1IsCisJa2Y1Mj1cRVsxOzNTLCBrZjUzPVxFWzE1OzN+LCBrZjU0PVxFWzE3OzN+LAorCWtmNTU9XEVbMTg7M34sIGtmNTY9XEVbMTk7M34sIGtmNTc9XEVbMjA7M34sCisJa2Y1OD1cRVsyMTszfiwga2Y1OT1cRVsyMzszfiwga2Y2PVxFWzE3fiwga2Y2MD1cRVsyNDszfiwKKwlrZjYxPVxFWzE7NFAsIGtmNjI9XEVbMTs0USwga2Y2Mz1cRVsxOzRSLCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisjCisjIENodW5rcyBmcm9tIHh0ZXJtICMyMzA6Cit4dGVybStwY2UyfGZyYWdtZW50IHdpdGggbW9kaWZ5Q3Vyc29yS2V5czoyLAorCWtEQz1cRVszOzJ+LCBrRU5EPVxFWzE7MkYsIGtIT009XEVbMTsySCwga0lDPVxFWzI7Mn4sCisJa05YVD1cRVs2OzJ+LCBrUFJWPVxFWzU7Mn4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sCisJa3BwPVxFWzV+LCBrREMzPVxFWzM7M34sIGtEQzQ9XEVbMzs0fiwga0RDNT1cRVszOzV+LAorCWtEQzY9XEVbMzs2fiwga0RDNz1cRVszOzd+LCBrRU5EMz1cRVsxOzNGLCBrRU5END1cRVsxOzRGLAorCWtFTkQ1PVxFWzE7NUYsIGtFTkQ2PVxFWzE7NkYsIGtFTkQ3PVxFWzE7N0YsCisJa0hPTTM9XEVbMTszSCwga0hPTTQ9XEVbMTs0SCwga0hPTTU9XEVbMTs1SCwKKwlrSE9NNj1cRVsxOzZILCBrSE9NNz1cRVsxOzdILCBrSUMzPVxFWzI7M34sIGtJQzQ9XEVbMjs0fiwKKwlrSUM1PVxFWzI7NX4sIGtJQzY9XEVbMjs2fiwga0lDNz1cRVsyOzd+LCBrTlhUMz1cRVs2OzN+LAorCWtOWFQ0PVxFWzY7NH4sIGtOWFQ1PVxFWzY7NX4sIGtOWFQ2PVxFWzY7Nn4sCisJa05YVDc9XEVbNjs3fiwga1BSVjM9XEVbNTszfiwga1BSVjQ9XEVbNTs0fiwKKwlrUFJWNT1cRVs1OzV+LCBrUFJWNj1cRVs1OzZ+LCBrUFJWNz1cRVs1Ozd+LAorCXVzZT14dGVybStlZGl0LAorCit4dGVybStlZGl0fGZyYWdtZW50IGZvciA2LWtleSBlZGl0aW5nLWtleXBhZCwKKwlrZGNoMT1cRVszfiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCXVzZT14dGVybStwYytlZGl0LAorCit4dGVybStwYytlZGl0fGZyYWdtZW50IGZvciBwYy1zdHlsZSBlZGl0aW5nIGtleXBhZCwKKwlrZW5kPVxFWzR+LCBraG9tZT1cRVsxfiwKKworeHRlcm0rdnQrZWRpdHxmcmFnbWVudCBmb3IgdnQyMjAtc3R5bGUgZWRpdGluZyBrZXlwYWQsCisJa2ZuZD1cRVsxfiwga3NsdD1cRVs0fiwKKworIworIyBUaG9zZSBjaHVua3MgdXNlIHRoZSBuZXctc3R5bGUgKHRoZSB4dGVybSBvbGRGdW5jdGlvbktleXMgcmVzb3VyY2UgaXMgZmFsc2UpLgorIyBBbHRlcm5hdGl2ZWx5LCB0aGUgc2FtZSBzY2hlbWUgd2l0aCBvbGQtc3R5bGUgZnVuY3Rpb24ga2V5cyBhcyBpbiB4dGVybS1yNgorIyBpcyBzaG93biBoZXJlIChiZWNhdXNlIHRoYXQgaXMgdXNlZCBpbiBtcnh2dCBhbmQgbWx0ZXJtKToKK3h0ZXJtK3I2ZjJ8eHRlcm0gd2l0aCBvbGRGdW5jdGlvbktleXMgYW5kIG1vZGlmeUZ1bmN0aW9uS2V5czoyLAorCWtmMT1cRVsxMX4sIGtmMTM9XEVbMTE7Mn4sIGtmMTQ9XEVbMTI7Mn4sIGtmMTU9XEVbMTM7Mn4sCisJa2YxNj1cRVsxNDsyfiwga2YyPVxFWzEyfiwga2YyNT1cRVsxMTs1fiwga2YyNj1cRVsxMjs1fiwKKwlrZjI3PVxFWzEzOzV+LCBrZjI4PVxFWzE0OzV+LCBrZjM9XEVbMTN+LCBrZjM3PVxFWzExOzZ+LAorCWtmMzg9XEVbMTI7Nn4sIGtmMzk9XEVbMTM7Nn4sIGtmND1cRVsxNH4sIGtmNDA9XEVbMTQ7Nn4sCisJa2Y0OT1cRVsxMTszfiwga2Y1MD1cRVsxMjszfiwga2Y1MT1cRVsxMzszfiwKKwlrZjUyPVxFWzE0OzN+LCBrZjYxPVxFWzExOzR+LCBrZjYyPVxFWzEyOzR+LAorCWtmNjM9XEVbMTM7NH4sIHVzZT14dGVybStwY2YyLAorIworIyBUaGlzIGNodW5rIGlzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBWVDIyMC9TdW4vUEMga2V5Ym9hcmQgdmFyaWFudHMuCit4dGVybS1iYXNpY3xtb2Rlcm4geHRlcm0gdGVybWluYWwgZW11bGF0b3IgLSBjb21tb24sCisJT1RicywgYW0sIGJjZSwga20sIG1jNWksIG1pciwgbXNnciwgeGVubCwgQVgsCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBwYWlycyM2NCwKKwlhY3NjPWBgYWFmZmdnaWlqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MTJsXEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MTI7MjVoLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWZsYXNoPVxFWz81aCQ8MTAwLz5cRVs/NWwsIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLAorCWh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLAorCWluZD1eSiwgaW52aXM9XEVbOG0sIGlzMj1cRVshcFxFWz8zOzRsXEVbNGxcRT4sIGticz1eSCwKKwlrbW91cz1cRVtNLCBtYzA9XEVbaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIG1lbWw9XEVsLAorCW1lbXU9XEVtLCBvcD1cRVszOTs0OW0sIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsIHJtY3VwPVxFWz8xMDQ5bCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1tPVxFWz8xMDM0bCwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMT1cRWMsIHJzMj1cRVshcFxFWz8zOzRsXEVbNGxcRT4sIHNjPVxFNywKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNldGI9XEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwlzZXRmPVxFWzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJc2dyPSU/JXA5JXRcRSgwJWVcRShCJTtcRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSwKKwlzZ3IwPVxFKEJcRVttLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwgc21jdXA9XEVbPzEwNDloLAorCXNtaXI9XEVbNGgsIHNta3g9XEVbPzFoXEU9LCBzbW09XEVbPzEwMzRoLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywgdnBhPVxFWyVpJXAxJWRkLCB1c2U9dnQxMDArZW5xLAorCisjIEZyb206IERhdmlkIEouIE1hY0tlbnppZSA8ZGptQHZhLnB1Ym5peC5jb20+LCAxNCBOb3YgMTk5NworIyBJbiByZXRyb3NwZWN0LCBzb21ldGhpbmcgbGlrZSB4dGVybS1yNiB3YXMgaW50ZW5kZWQgaGVyZSAtVEQKK3h0ZXJtLXhpfHh0ZXJtIG9uIFhJIEdyYXBoaWNzIEFjY2VsZXJhdGVkIFggdW5kZXIgQlNEL09TIDMuMSwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwgdXNlPXh0ZXJtLXhmODYtdjMzLAorCisjIFRoaXMgaXMgb25lIG9mIHRoZSB2YXJpYW50cyBvZiBYRnJlZTg2IDMuMyB4dGVybSwgdXBkYXRlZCBmb3IgNC4wIChULkRpY2tleSkKK3h0ZXJtLTE2Y29sb3J8eHRlcm0gd2l0aCAxNiBjb2xvcnMgbGlrZSBhaXh0ZXJtLAorCXVzZT1pYm0rMTZjb2xvciwgdXNlPXh0ZXJtLW5ldywKKworIyBUaGlzIGlzIGEgY29tcGlsZS10aW1lIGZlYXR1cmUgb2YgWEZyZWU4NiB4dGVybSBiZWdpbm5pbmcgd2l0aAorIyBwYXRjaCAjMTExICgxOTk5LzcvMTApIC1URAoreHRlcm0rMjU2Y29sb3J8eHRlcm0gMjU2LWNvbG9yIGZlYXR1cmUsCisJY2NjLAorCWNvbG9ycyMyNTYsIHBhaXJzIzMyNzY3LAorCWluaXRjPVxFXTQ7JXAxJWQ7cmdiXDolcDIlezI1NX0lKiV7MTAwMH0lLyUyLjJYLyVwMyV7MjU1fSUqJXsxMDAwfSUvJTIuMlgvJXA0JXsyNTV9JSolezEwMDB9JS8lMi4yWFxFXFwsCisJc2V0YWI9XEVbJT8lcDElezh9JTwldDQlcDElZCVlJXAxJXsxNn0lPCV0MTAlcDElezh9JS0lZCVlNDg7NTslcDElZCU7bSwKKwlzZXRhZj1cRVslPyVwMSV7OH0lPCV0MyVwMSVkJWUlcDElezE2fSU8JXQ5JXAxJXs4fSUtJWQlZTM4OzU7JXAxJWQlO20sCisJc2V0YkAsIHNldGZALAorCisjIFRoaXMgaXMgYSBjb21waWxlLXRpbWUgZmVhdHVyZSBvZiBYRnJlZTg2IHh0ZXJtIGJlZ2lubmluZyB3aXRoCisjIHBhdGNoICMxMTUgKDE5OTkvOS8xOCkgLVRECisjCisjIE5vdGUgdGhhdCB0aGUgZXNjYXBlIHNlcXVlbmNlcyB1c2VkIGFyZSB0aGUgc2FtZSBhcyBmb3IgMjU2LWNvbG9ycyAtIHh0ZXJtCisjIGhhcyBhIGRpZmZlcmVudCB0YWJsZSBvZiBkZWZhdWx0IGNvbG9yIHJlc291cmNlIHZhbHVlcy4gIElmIGJ1aWx0IGZvcgorIyAyNTYtY29sb3JzLCBpdCBjYW4gc3RpbGwgaGFuZGxlIGFuIDg4LWNvbG9yIHBhbGV0dGUgYnkgdXNpbmcgdGhlIGluaXRjCisjIGNhcGFiaWxpdHkuCisjCisjIEF0IHRoaXMgdGltZSAoMjAwNy83LzE0KSwgZXhjZXB0IGZvciByeHZ0IDIuNy54LCBub25lIG9mIHRoZSBvdGhlciB0ZXJtaW5hbHMKKyMgd2hpY2ggc3VwcG9ydCB0aGUgeHRlcm0rMjU2Y29sb3IgZmVhdHVyZSBzdXBwb3J0IHRoZSBhc3NvY2lhdGVkIGluaXRjCisjIGNhcGFiaWxpdHkuICBTbyBpdCBpcyBjYW5jZWxsZWQgaW4gdGhlIGVudHJpZXMgd2hpY2ggdXNlIHRoaXMgYW5kL29yIHRoZQorIyB4dGVybSsyNTZjb2xvciBibG9jay4KKyMKKyMgVGhlIGRlZmF1bHQgY29sb3IgcGFsZXR0ZSBmb3IgdGhlIDI1Ni0gYW5kIDg4LWNvbG9ycyBhcmUgZGlmZmVyZW50LiAgQQorIyBnaXZlbiBleGVjdXRhYmxlIHdpbGwgaGF2ZSBvbmUgcGFsZXR0ZSAocGVyaGFwcyBjb21waWxlZC1pbikuICBJZiB0aGUgcHJvZ3JhbQorIyBzdXBwb3J0cyB4dGVybSdzIGNvbnRyb2wgc2VxdWVuY2UsIGl0IGNhbiBiZSBwcm9ncmFtbWVkIHVzaW5nIGluaXRjLgoreHRlcm0rODhjb2xvcnx4dGVybSA4OC1jb2xvciBmZWF0dXJlLAorCWNvbG9ycyM4OCwgcGFpcnMjNzc0NCwgdXNlPXh0ZXJtKzI1NmNvbG9yLAorCisjIFRoZXNlIHZhcmlhbnRzIG9mIFhGcmVlODYgMy45LjE2IHh0ZXJtIGFyZSBidWlsdCBhcyBhIGNvbmZpZ3VyZSBvcHRpb24uCit4dGVybS0yNTZjb2xvcnx4dGVybSB3aXRoIDI1NiBjb2xvcnMsCisJdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9eHRlcm0tbmV3LAoreHRlcm0tODhjb2xvcnx4dGVybSB3aXRoIDg4IGNvbG9ycywKKwl1c2U9eHRlcm0rODhjb2xvciwgdXNlPXh0ZXJtLTI1NmNvbG9yLAorCisjIFRoZXNlIHR3byBhcmUgdXNlZCB0byBkZW1vbnN0cmF0ZSB0aGUgYW55LWV2ZW50IG1vdXNlIHN1cHBvcnQsIGkuZS4sIGJ5CisjIHVzaW5nIGFuIGV4dGVuZGVkIG5hbWUgIlhNIiB3aGljaCB0ZWxscyBuY3Vyc2VzIHRvIHB1dCB0aGUgdGVybWluYWwgaW50bworIyBhIHNwZWNpYWwgbW9kZSB3aGVuIGluaXRpYWxpemluZyB0aGUgeHRlcm0gbW91c2UuCit4dGVybS0xMDAyfHRlc3RpbmcgeHRlcm0tbW91c2UsCisJWE09XEVbPzEwMDIlPyVwMSV7MX0lPSV0aCVlbCU7LCB1c2U9eHRlcm0tbmV3LAoreHRlcm0tMTAwM3x0ZXN0aW5nIHh0ZXJtLW1vdXNlLAorCVhNPVxFWz8xMDAzJT8lcDElezF9JT0ldGglZWwlOywgdXNlPXh0ZXJtLW5ldywKKworIyBUaGlzIGlzIGFub3RoZXIgdmFyaWFudCwgZm9yIFhGcmVlODYgNC4wIHh0ZXJtIChULkRpY2tleSkKKyMgVGhpcyBpcyBhbiA4LWJpdCB2ZXJzaW9uIG9mIHh0ZXJtLCB3aGljaCBlbXVsYXRlcyBERUMgdnQyMjAgd2l0aCBBTlNJIGNvbG9yLgorIyBUbyB1c2UgaXQsIHlvdXIgZGVjVGVybWluYWxJRCByZXNvdXJjZSBtdXN0IGJlIHNldCB0byAyMDAgb3IgYWJvdmUuCisjCisjCUhUUwlcRSBICVwyMTAKKyMJUkkJXEUgTQlcMjE1CisjCVNTMwlcRSBPCVwyMTcKKyMJQ1NJCVxFIFsJXDIzMworIworeHRlcm0tOGJpdHx4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciA4LWJpdCBjb250cm9scyAoWCBXaW5kb3cgU3lzdGVtKSwKKwlPVGJzLCBhbSwgYmNlLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCBucGMsIHhlbmwsIEFYLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgcGFpcnMjNjQsCisJYWNzYz1gYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XDIzMzVtLCBib2xkPVwyMzMxbSwgY2J0PVwyMzNaLAorCWNpdmlzPVwyMzM/MjVsLCBjbGVhcj1cMjMzSFwyMzMySiwKKwljbm9ybT1cMjMzPzI1bFwyMzM/MjVoLCBjcj1eTSwgY3NyPVwyMzMlaSVwMSVkOyVwMiVkciwKKwljdWI9XDIzMyVwMSVkRCwgY3ViMT1eSCwgY3VkPVwyMzMlcDElZEIsIGN1ZDE9XkosCisJY3VmPVwyMzMlcDElZEMsIGN1ZjE9XDIzM0MsIGN1cD1cMjMzJWklcDElZDslcDIlZEgsCisJY3V1PVwyMzMlcDElZEEsIGN1dTE9XDIzM0EsIGN2dmlzPVwyMzM/MTI7MjVoLAorCWRjaD1cMjMzJXAxJWRQLCBkY2gxPVwyMzNQLCBkbD1cMjMzJXAxJWRNLCBkbDE9XDIzM00sCisJZWNoPVwyMzMlcDElZFgsIGVkPVwyMzNKLCBlbD1cMjMzSywgZWwxPVwyMzMxSywKKwlmbGFzaD1cMjMzPzVoJDwxMDAvPlwyMzM/NWwsIGhvbWU9XDIzM0gsCisJaHBhPVwyMzMlaSVwMSVkRywgaHQ9XkksIGh0cz1cMjEwLCBpY2g9XDIzMyVwMSVkQCwKKwlpbD1cMjMzJXAxJWRMLCBpbDE9XDIzM0wsIGluZD1eSiwgaW52aXM9XDIzMzhtLAorCWlzMj1cRVs2MiJwXEUgR1wyMzNtXDIzMz83aFxFPlxFN1wyMzM/MTszOzQ7NmxcMjMzNGxcMjMzclxFOCwKKwlrYTE9XDIxN3csIGthMz1cMjE3dSwga2IyPVwyMTd5LCBrYmVnPVwyMTdFLCBrYnM9XkgsCisJa2MxPVwyMTdxLCBrYzM9XDIxN3MsIGtjYnQ9XDIzM1osIGtjdWIxPVwyMTdELCBrY3VkMT1cMjE3QiwKKwlrY3VmMT1cMjE3Qywga2N1dTE9XDIxN0EsIGtkY2gxPVwyMzMzfiwga2VuZD1cMjMzNH4sCisJa2VudD1cMjE3TSwga2YxPVwyMzMxMX4sIGtmMTA9XDIzMzIxfiwga2YxMT1cMjMzMjN+LAorCWtmMTI9XDIzMzI0fiwga2YxMz1cMjMzMjV+LCBrZjE0PVwyMzMyNn4sIGtmMTU9XDIzMzI4fiwKKwlrZjE2PVwyMzMyOX4sIGtmMTc9XDIzMzMxfiwga2YxOD1cMjMzMzJ+LCBrZjE5PVwyMzMzM34sCisJa2YyPVwyMzMxMn4sIGtmMjA9XDIzMzM0fiwga2YzPVwyMzMxM34sIGtmND1cMjMzMTR+LAorCWtmNT1cMjMzMTV+LCBrZjY9XDIzMzE3fiwga2Y3PVwyMzMxOH4sIGtmOD1cMjMzMTl+LAorCWtmOT1cMjMzMjB+LCBraG9tZT1cMjMzMX4sIGtpY2gxPVwyMzMyfiwga21vdXM9XDIzM00sCisJa25wPVwyMzM2fiwga3BwPVwyMzM1fiwgbWMwPVwyMzNpLCBtYzQ9XDIzMzRpLCBtYzU9XDIzMzVpLAorCW1lbWw9XEVsLCBtZW11PVxFbSwgb3A9XDIzMzM5OzQ5bSwgcmM9XEU4LCByZXY9XDIzMzdtLAorCXJpPVwyMTUsIHJtYWNzPVxFKEIsIHJtYW09XDIzMz83bCwgcm1jdXA9XDIzMz8xMDQ5bCwKKwlybWlyPVwyMzM0bCwgcm1reD1cMjMzPzFsXEU+LCBybXNvPVwyMzMyN20sIHJtdWw9XDIzMzI0bSwKKwlyczE9XEVjLAorCXJzMj1cRVs2MiJwXEUgR1wyMzNtXDIzMz83aFxFPlxFN1wyMzM/MTszOzQ7NmxcMjMzNGxcMjMzclxFOCwKKwlzYz1cRTcsIHNldGFiPVwyMzM0JXAxJWRtLCBzZXRhZj1cMjMzMyVwMSVkbSwKKwlzZXRiPVwyMzM0JT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorCXNldGY9XDIzMzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJc2dyPVwyMzMwJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcRSgwJWVcRShCJTssCisJc2dyMD1cMjMzMG1cRShCLCBzbWFjcz1cRSgwLCBzbWFtPVwyMzM/N2gsCisJc21jdXA9XDIzMz8xMDQ5aCwgc21pcj1cMjMzNGgsIHNta3g9XDIzMz8xaFxFPSwKKwlzbXNvPVwyMzM3bSwgc211bD1cMjMzNG0sIHRiYz1cMjMzM2csIHU2PVwyMzNbJWklZDslZFIsCisJdTc9XEVbNm4sIHU4PVwyMzNbPzE7MmMsIHU5PVxFW2MsIHZwYT1cMjMzJWklcDElZGQsCisKK3h0ZXJtLWhwfHh0ZXJtIHdpdGggaHB0ZXJtIGZ1bmN0aW9uIGtleXMsCisJa2Nscj1cRUosIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlrZGNoMT1cRVAsIGtlbmQ9XEVGLCBrZjE9XEVwLCBrZjI9XEVxLCBrZjM9XEVyLCBrZjQ9XEVzLAorCWtmNT1cRXQsIGtmNj1cRXUsIGtmNz1cRXYsIGtmOD1cRXcsIGtob21lPVxFaCwga2ljaDE9XEVRLAorCWtucD1cRVMsIGtwcD1cRVQsIHVzZT14dGVybS1iYXNpYywKKworeHRlcm0tc2NvfHh0ZXJtIHdpdGggU0NPIGZ1bmN0aW9uIGtleXMsCisJa2JlZz1cRVtFLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVwxNzcsIGtlbmQ9XEVbRiwga2YxPVxFW00sIGtmMTA9XEVbViwga2YxMT1cRVtXLAorCWtmMTI9XEVbWCwga2YxMz1cRVtZLCBrZjE0PVxFW1osIGtmMTU9XEVbYSwga2YxNj1cRVtiLAorCWtmMTc9XEVbYywga2YxOD1cRVtkLCBrZjE5PVxFW2UsIGtmMj1cRVtOLCBrZjIwPVxFW2YsCisJa2YyMT1cRVtnLCBrZjIyPVxFW2gsIGtmMjM9XEVbaSwga2YyND1cRVtqLCBrZjI1PVxFW2ssCisJa2YyNj1cRVtsLCBrZjI3PVxFW20sIGtmMjg9XEVbbiwga2YyOT1cRVtvLCBrZjM9XEVbTywKKwlrZjMwPVxFW3AsIGtmMzE9XEVbcSwga2YzMj1cRVtyLCBrZjMzPVxFW3MsIGtmMzQ9XEVbdCwKKwlrZjM1PVxFW3UsIGtmMzY9XEVbdiwga2YzNz1cRVt3LCBrZjM4PVxFW3gsIGtmMzk9XEVbeSwKKwlrZjQ9XEVbUCwga2Y0MD1cRVt6LCBrZjQxPVxFW0AsIGtmNDI9XEVbWywga2Y0Mz1cRVtcXCwKKwlrZjQ0PVxFW10sIGtmNDU9XEVbXF4sIGtmNDY9XEVbXywga2Y0Nz1cRVtgLCBrZjQ4PVxFW3ssCisJa2Y1PVxFW1EsIGtmNj1cRVtSLCBrZjc9XEVbUywga2Y4PVxFW1QsIGtmOT1cRVtVLCBraG9tZT1cRVtILAorCWtpY2gxPVxFW0wsIGttb3VzPVxFWz5NLCBrbnA9XEVbRywga3BwPVxFW0ksCisJdXNlPXh0ZXJtLWJhc2ljLAorCisjIFRoZSB4dGVybS1uZXcgZGVzY3JpcHRpb24gaGFzIGFsbCBvZiB0aGUgZmVhdHVyZXMsIGJ1dCBpcyBub3QgY29tcGxldGVseQorIyBjb21wYXRpYmxlIHdpdGggdnQyMjAuICBJZiB5b3UgYXJlIHVzaW5nIGEgU3VuIG9yIFBDIGtleWJvYXJkLCBzZXQgdGhlCisjIHN1bktleWJvYXJkIHJlc291cmNlIHRvIHRydWU6CisjCSsgbWFwcyB0aGUgZWRpdGluZyBrZXlwYWQKKyMJKyBpbnRlcnByZXRzIGNvbnRyb2wtZnVuY3Rpb24ta2V5IGFzIGEgc2Vjb25kIGFycmF5IG9mIGtleXMsIHNvIGEKKyMJICAxMi1ma2V5IGtleWJvYXJkIGNhbiBzdXBwb3J0IHZ0MjIwJ3MgMjAtZmtleXMuCisjCSsgbWFwcyBudW1lcmljIGtleXBhZCAiKyIgdG8gIiwiLgorIwkrIHVzZXMgREVDLXN0eWxlIGNvbnRyb2wgc2VxdWVuY2VzIGZvciB0aGUgYXBwbGljYXRpb24ga2V5cGFkLgorIworeHRlcm0tdnQyMjB8eHRlcm0gZW11bGF0aW5nIHZ0MjIwLAorCWtjYnQ9XEVbWiwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZW5kPVxFWzR+LCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LAorCWtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LAorCWtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sIGtmMjA9XEVbMzR+LAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwl1c2U9eHRlcm0rYXBwLCB1c2U9eHRlcm0rZWRpdCwgdXNlPXh0ZXJtLWJhc2ljLAorCXVzZT12dDIyMCtrZXlwYWQsCisKK3h0ZXJtLXZ0NTJ8eHRlcm0gZW11bGF0aW5nIGRlYyB2dDUyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPVxFRCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElJyAnJSslYyVwMiUnICclKyVjLCBjdXUxPVxFQSwgZWQ9XEVKLCBlbD1cRUssCisJaG9tZT1cRUgsIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIG5lbD1eTV5KLCByaT1cRUksIHJtYWNzPVxFRywgc21hY3M9XEVGLAorCit4dGVybS1ub2FwcHx4dGVybSB3aXRoIGN1cnNvciBrZXlzIGluIG5vcm1hbCBtb2RlLAorCXJtY3VwQCwgcm1reD1cRT4sIHNtY3VwQCwgc21reD1cRT0sIHVzZT14dGVybStub2FwcCwKKwl1c2U9eHRlcm0sCisKK3h0ZXJtLTI0fHZzMTAwfHh0ZXJtc3x4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciAoWCBXaW5kb3cgU3lzdGVtKSwKKwlsaW5lcyMyNCwgdXNlPXh0ZXJtLW9sZCwKKworIyBUaGlzIGlzIHh0ZXJtIGZvciBuY3Vyc2VzLgoreHRlcm18eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFggV2luZG93IFN5c3RlbSksCisJdXNlPXh0ZXJtLW5ldywKKworIyBUaGVzZSBlbnRyaWVzIGFsbG93IGFjY2VzcyB0byB0aGUgWCB0aXRsZWJhciBhbmQgaWNvbiBuYW1lIGFzIGEgc3RhdHVzIGxpbmUuCisjIE5vdGUgdGhhdCB0d20gKGFuZCBwb3NzaWJseSB3aW5kb3cgbWFuYWdlcnMgZGVzY2VuZGVkIGZyb20gaXQgc3VjaCBhcyB0dnR3bSwKKyMgY3R3bSwgYW5kIHZ0d20pIHRyYWNrIHdpbmRvd3MgYnkgaWNvbi1uYW1lOyB0aHVzLCB5b3UgZG9uJ3Qgd2FudCB0byBtZXNzCisjIHdpdGggaXQuCit4dGVybStzbHxhY2Nlc3MgWCB0aXRsZSBsaW5lIGFuZCBpY29uIG5hbWUsCisJaHMsCisJd3NsIzQwLAorCWRzbD1cRV0wO1wwMDcsIGZzbD1eRywgdHNsPVxFXTA7LCB1c2U9eHRlcm0sCit4dGVybStzbC10d218YWNjZXNzIFggdGl0bGUgbGluZSAocGFjaWZ5IHR3bS1kZXNjZW5kZWQgd2luZG93IG1hbmFnZXJzKSwKKwlocywKKwl3c2wjNDAsCisJZHNsPVxFXTI7XDAwNywgZnNsPV5HLCB0c2w9XEVdMjssIHVzZT14dGVybSwKKworIworIyBUaGUgZm9sbG93aW5nIHh0ZXJtIHZhcmlhbnRzIGRvbid0IGRlcGVuZCBvbiB5b3VyIGJhc2UgdmVyc2lvbgorIworIyB4dGVybSB3aXRoIGJvbGQgaW5zdGVhZCBvZiB1bmRlcmxpbmUKK3h0ZXJtLWJvbGR8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKFgxMVI2IFdpbmRvdyBTeXN0ZW0pIHN0YW5kb3V0IHcvYm9sZCwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzFtLCB1c2U9eHRlcm0tb2xkLAorIyAoa3Rlcm06IHRoaXMgaGFkIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXMgIjpLSjpUWT1hc2NpaToiIC0tIGVzcikKKyMgKGt0ZXJtIHNob3VsZCBub3QgaW52b2tlIERFQyBHcmFwaGljcyBhcyB0aGUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKyMgIC0tIEtlbmppIFJpa2l0YWtlKQorIyAocHJvcGVyIHNldHRpbmcgb2YgZW5hY3MsIHNtYWNzLCBybWFjcyBtYWtlcyBrdGVybSB0byB1c2UgREVDIEdyYXBoaWNzCisjICAtLSBNQVRTVU1PVE8gU2hvamkpCisjIGt0ZXJtIGltcGxlbWVudHMgYWNzYyB2aWEgYnVpbHQtaW4gdGFibGUgb2YgWCBEcmF3YWJsZSdzCitrdGVybXxrdGVybSBrYW5qaSB0ZXJtaW5hbCBlbXVsYXRvciAoWCB3aW5kb3cgc3lzdGVtKSwKKwllc2xvaywgaHMsCisJbmN2QCwKKwlhY3NjPWBgYWFqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh+fiwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGRzbD1cRVs/SCwgZW5hY3M9LCBmc2w9XEVbP0YsCisJa21vdXM9XEVbTSwgcmM9XEU4LCBybWFjcz1cRShCLCBybWFtPVxFWz83bCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTttJT8lcDkldFxFKDAlZVxFKEIlOywKKwlzZ3IwPVxFW21cRShCLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwKKwl0c2w9XEVbP0VcRVs/JWklcDElZFQsIHVzZT14dGVybS1yNiwgdXNlPWVjbWErY29sb3IsCitrdGVybS1jb2xvcnxrdGVybS1jb3xrdGVybSB3aXRoIEFOU0kgY29sb3JzLAorCW5jdkAsIHVzZT1rdGVybSwgdXNlPWVjbWErY29sb3IsCisjIFNlZSB0aGUgbm90ZSBvbiBJQ0gvSUNIMSBWRVJTVVMgUk1JUi9TTUlSIG5lYXIgdGhlIGVuZCBvZiBmaWxlCit4dGVybS1uaWN8eHRlcm0gd2l0aCBpY2gvaWNoMSBzdXBwcmVzc2VkIGZvciBub24tY3Vyc2VzIHByb2dyYW1zLAorCWljaEAsIGljaDFALCB1c2U9eHRlcm0sCisjIEZyb206IE1hcmsgU2hlcHBhcmQgPGtpbWJsZUBtaXN0cmFsLmNvLnVrPiwgNCBNYXkgMTk5NgoreHRlcm0xfHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yIGlnbm9yaW5nIHRoZSBhbHRlcm5hdGUgc2NyZWVuIGJ1ZmZlciwKKwlybWN1cEAsIHNtY3VwQCwgdXNlPXh0ZXJtLAorCisjIFRoaXMgZGVzY3JpYmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgY29sb3JfeHRlcm0sIGFuIHh0ZXJtIHZhcmlhbnQgZnJvbQorIyBiZWZvcmUgRUNNQS02NCBjb2xvciBzdXBwb3J0IHdhcyBmb2xkZWQgaW50byB0aGUgbWFpbi1saW5lIHh0ZXJtIHJlbGVhc2UuCisjIFRoaXMgZW50cnkgaXMgc3RyYWlnaHQgZnJvbSBjb2xvcl94dGVybSdzIG1haW50YWluZXIuCisjIEZyb206IEphY29iIE1hbmRlbHNvbiA8amxtQHVnY3MuY2FsdGVjaC5lZHU+LCAwOSBOb3YgMTk5NgorIyBUaGUgUkVBRE1FJ3Mgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIGFsc28gc2F5IHRoYXQgaXQgc3VwcG9ydHMgU0dSIDIxLCAyNCwgMjUKKyMgYW5kIDI3LCBidXQgdGhleSBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHRlcm1pbmZvIG9yIHRlcm1jYXAuCitjb2xvcl94dGVybXxjeHxjeDEwMHxjb2xvcl94dGVybSBjb2xvciB0ZXJtaW5hbCBlbXVsYXRvciBmb3IgWCwKKwlPVGJzLCBhbSwga20sIG1pciwgbXNnciwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyM2NSwgbmN2QCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKEJcRSkwLCBob21lPVxFW0gsIGh0PV5JLAorCWljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlpczE9XEVbclxFW21cRVs/N2hcRVs/NDs2bFxFWzRsLCBrYnM9XkgsIGtjdWIxPVxFT0QsCisJa2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2VuZD1cRVs4fiwga2YxPVxFWzExfiwKKwlrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjI9XEVbMTJ+LAorCWtmMz1cRVsxM34sIGtmND1cRVsxNH4sIGtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sCisJa2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2hvbWU9XEVbN34sIGtpY2gxPVxFWzJ+LAorCWttb3VzPVxFW00sIGtucD1cRVs2fiwga3BwPVxFWzV+LCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJtYWNzPV5PLCBybWFtPVxFWz83bCwgcm1jdXA9XEU+XEVbPzQxOzFyLCBybWlyPVxFWzRsLAorCXJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEUoQlwwMTdcRVtyXEVbbVxFWzJKXEVbSFxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU8LAorCXNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbMG1cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsCisJc21jdXA9XEVbPzE7NDFzXEVbPzE7NDFoXEU9LCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHVzZT1lY21hK2NvbG9yLCB1c2U9dnQyMjAra2V5cGFkLAorCisjIFRoZSAnbnh0ZXJtJyBkaXN0cmlidXRlZCB3aXRoIFJlZGhhdCBMaW51eCA1LjIgaXMgYSBzbGlnaHQgcmVoYWNrIG9mCisjIHh0ZXJtLXNiX3JpZ2h0LWFuc2ktM2QsIHdoaWNoIGltcGxlbWVudHMgQU5TSSBjb2xvcnMsIGJ1dCBkb2VzIG5vdCBzdXBwb3J0CisjIFNHUiAzOSBvciA0OS4gIFNHUiAwIGRvZXMgcmVzZXQgY29sb3JzIChhbG9uZyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSkuICBUaGlzCisjIGRlc2NyaXB0aW9uIGlzICJjb21wYXRpYmxlIiB3aXRoIGNvbG9yX3h0ZXJtLCByeHZ0IGFuZCBYRnJlZTg2IHh0ZXJtLCBleGNlcHQKKyMgdGhhdCBlYWNoIG9mIHRob3NlIGltcGxlbWVudHMgdGhlIGhvbWUsIGVuZCwgZGVsZXRlIGtleXMgZGlmZmVyZW50bHkuCisjCisjIFJlZGhhdCBMaW51eCA2LnggZGlzdHJpYnV0ZXMgWEZyZWU4NiB4dGVybSBhcyAibnh0ZXJtIiwgd2hpY2ggdXNlcyBiY2UKKyMgY29sb3JzOyBub3RlIHRoYXQgdGhpcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSA1LjIgdmVyc2lvbi4KKyMgY3N3ICgyMDAyLTA1LTE1KTogbWFrZSB4dGVybS1jb2xvciBwcmltYXJ5IGluc3RlYWQgb2Ygbnh0ZXJtLCB0bworIyAgIG1hdGNoIFhGcmVlODYncyB4dGVybS50ZXJtaW5mbyB1c2FnZSBhbmQgcHJldmVudCBjaXJjdWxhciBsaW5rcworeHRlcm0tY29sb3J8bnh0ZXJtfGdlbmVyaWMgY29sb3IgeHRlcm0sCisJbmN2QCwKKwlvcD1cRVttLCB1c2U9eHRlcm0tcjYsIHVzZT1rbG9uZStjb2xvciwKKworIyB0aGlzIGRlc2NyaWJlcyB0aGUgYWxwaGEtdmVyc2lvbiBvZiBHbm9tZSB0ZXJtaW5hbCBzaGlwcGVkIHdpdGggUmVkaGF0IDYuMAorZ25vbWUtcmg2MnxHbm9tZSB0ZXJtaW5hbCwKKwliY2UsCisJa2RjaDE9XDE3Nywga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsCisJdXNlPXh0ZXJtLWNvbG9yLAorCisjIEdOT01FIFRlcm1pbmFsIDEuNC4wLjQgKFJlZGhhdCA3LjIpCisjCisjIFRoaXMgaW1wbGVtZW50cyBhIHN1YnNldCBvZiB2dDEwMiB3aXRoIGEgcmFuZG9tIHNlbGVjdGlvbiBvZiBmZWF0dXJlcyBmcm9tCisjIG90aGVyIHRlcm1pbmFscyBzdWNoIGFzIGNvbG9yIGFuZCBmdW5jdGlvbi1rZXlzLgorIworIyBzaGlmdC1mMSB0byBzaGlmdC1mMTAgYXJlIGYxMSB0byBmMjAKKyMKKyMgTnVtTG9jayBjaGFuZ2VzIHRoZSBhcHBsaWNhdGlvbiBrZXlwYWQgdG8gYXBwcm94aW1hdGUgdnQxMDAga2V5cGFkLCBleGNlcHQKKyMgdGhhdCB0aGVyZSBpcyBubyBlc2NhcGUgc2VxdWVuY2UgbWF0Y2hpbmcgY29tbWEgKCwpLgorIworIyBPdGhlciBkZWZlY3RzIG9ic2VydmVkOgorIwl2dDEwMCBMTk0gbW9kZSBpcyBub3QgaW1wbGVtZW50ZWQuCisjCXZ0MTAwIDgwLzEzMiBjb2x1bW4gbW9kZSBpcyBub3QgaW1wbGVtZW50ZWQuCisjCXZ0MTAwIERFQ0FMTiBpcyBub3QgaW1wbGVtZW50ZWQuCisjCXZ0MTAwIERFQ1NDTk0gbW9kZSBpcyBub3QgaW1wbGVtZW50ZWQsIHNvIGZsYXNoIGRvZXMgbm90IHdvcmsuCisjCXZ0MTAwIFRCQyAodGFiIHJlc2V0KSBpcyBub3QgaW1wbGVtZW50ZWQuCisjCXh0ZXJtIGFsdGVybmF0ZSBzY3JlZW4gY29udHJvbHMgZG8gbm90IHJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uIHByb3Blcmx5CisjCWl0IGhhbmdzIGluIHRhY2sgYWZ0ZXIgcnVubmluZyBmdW5jdGlvbi1rZXlzIHRlc3QuCitnbm9tZS1yaDcyfEdOT01FIFRlcm1pbmFsLAorCWJjZSwga21ALAorCWNpdmlzPVxFWz8yNWwsIGNub3JtPVxFWz8yNWgsIGtkY2gxPVxFWzN+LCBrZjE9XEVPUCwKKwlrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBybWFtPVxFWz83bCwKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVswbVwwMTcsIHNtYW09XEVbPzdoLCB0YmNALCB1c2U9eHRlcm0tY29sb3IsCisKKyMgR05PTUUgVGVybWluYWwgMi4wLjEgKFJlZGhhdCA4LjApCisjCisjIERvY3VtZW50YXRpb24gbm93IGNsYWltcyBpdCBpbXBsZW1lbnRzIHZ0MjIwICh3aGljaCBpcyBkZW1vbnN0cmFibHkgZmFsc2UpLgorIyBIb3dldmVyLCBpdCBkb2VzIGltcGxlbWVudCBFQ0gsIHdoaWNoIGlzIGEgdnQyMjAgZmVhdHVyZS4gIEFuZCB0aGVyZSBhcmUKKyMgd29ya2FibGUgdnQxMDAgTE5NLCBERUNBTE4sIERFQ1NOTSBtb2RlcywgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGRpc3BsYXkKKyMgbW9yZSBvZiBpdHMgYnVncyB1c2luZyB2dHRlc3QuCisjCisjIEhvd2V2ZXIsIG5vdGUgdGhhdCBiY2UgYW5kIG1zZ3IgYXJlIGJyb2tlbiBpbiB0aGlzIHJlbGVhc2UuICBUYWJzICh0YmMgYW5kCisjIGh0cykgYXJlIGJyb2tlbiBhcyB3ZWxsLiAgU29tZXRpbWVzIGZsYXNoIChhcyBpbiB4dGVybS1uZXcpIHdvcmtzLgorIworIyBrZjEgYW5kIGtmMTAgYXJlIG5vdCB0ZXN0ZWQgc2luY2UgdGhleSdyZSBhc3NpZ25lZCAoaGFyZGNvZGVkPykgdG8gbWVudQorIyBvcGVyYXRpb25zLiAgU2hpZnQtdGFiIGdlbmVyYXRlcyBhIGRpc3RpbmN0IHNlcXVlbmNlIHNvIGl0IGNhbiBiZSBhcmd1ZWQKKyMgdGhhdCBpdCBpbXBsZW1lbnRzIGtjYnQuCitnbm9tZS1yaDgwfEdOT01FIFRlcm1pbmFsLAorCWJjZUAsIG1zZ3JALAorCWVjaD1cRVslcDElZFgsIGZsYXNoPVxFWz81aCQ8MTAwLz5cRVs/NWwsIGticz1cMTc3LAorCWtjYnQ9XEVeSSwgb3A9XEVbMzk7NDltLCB1c2U9Z25vbWUtcmg3MiwKKworIyBHTk9NRSBUZXJtaW5hbCAyLjIuMSAoUmVkaGF0IDkuMCkKKyMKKyMgYmNlIGFuZCBtc2dyIGFyZSByZXBhaXJlZC4KK2dub21lLXJoOTB8R05PTUUgVGVybWluYWwsCisJYmNlLCBtc2dyLAorCWhwYT1cRVslaSVwMSVkRywga0RDPVxFWzM7Mn4sIGtMRlQ9XEVPMkQsIGtSSVQ9XEVPMkMsCisJa2IyPVxFW0UsIGtjYnQ9XEVbWiwga2VuZD1cRU9GLCBraG9tZT1cRU9ILCB0YmM9XEVbM2csCisJdnBhPVxFWyVpJXAxJWRkLCB1c2U9eHRlcm0rcGNmMCwgdXNlPXh0ZXJtK3BjZmtleXMsCisJdXNlPWdub21lLXJoODAsCisKKyMgR05PTUUgVGVybWluYWwgMi4xNC4yIChGZWRvcmEgQ29yZSA1KQorIyBFZCBDYXRtdXIgbm90ZXMgdGhhdCBnbm9tZS10ZXJtaW5hbCBoYXMgcmVjb2duaXplZCBzb2Z0LXJlc2V0IHNpbmNlIE1heSAyMDAyLgorZ25vbWUtZmM1fEdOT01FIFRlcm1pbmFsLAorCXJzMT1cRWMsCisJcnMyPVxFN1xFW3JcRThcRVttXEVbPzdoXEVbIXBcRVs/MTszOzQ7NmxcRVs0bFxFPlxFWz8xMDAwbFxFWz8yNWgsCisJdXNlPWFuc2krZW5xLCB1c2U9eHRlcm0rcGNjMCwgdXNlPWdub21lLXJoOTAsCisKKyMgR05PTUUgVGVybWluYWwgMi4xOC4xICgyMDA3IHNuYXBzaG90KQorIworIyBGb3IgYW55ICJyZWNlbnQiIHZlcnNpb24gb2YgZ25vbWUtdGVybWluYWwsIGl0IGlzIGZ1dGlsZSB0byBhdHRlbXB0IHRvCisjIHN1cHBvcnQgbW9kaWZpZXJzIG9uIGN1cnNvci0gYW5kIGtleXBhZCBrZXlzIGJlY2F1c2UgdGhlIHByb2dyYW0gdXN1YWxseQorIyBpcyBoYXJkY29kZWQgdG8gc2V0ICRURVJNIHRvICJ4dGVybSIsIGFuZCBvbiBzdGFydHVwLCBpdCBidWlsZHMgYSBzdWJzZXQKKyMgb2YgdGhlIGtleXMgKHdoaWNoIG1vcmUvbGVzcyBjb3JyZXNwb25kIHRvIHRoZSB0ZXJtY2FwIHZhbHVlcyksIGFuZCB3aWxsCisjIGludGVycHJldCB0aG9zZSBhY2NvcmRpbmcgdG8gdGhlICRURVJNIHZhbHVlLCBidXQgb3RoZXJzIG5vdCBpbiB0aGUKKyMgdGVybWluZm8gYWNjb3JkaW5nIHRvIHNvbWUgY29uc3RhbnRseSBjaGFuZ2luZyBzZXQgb2YgaGFja2VyIGd1aWRlbGluZXMgLVRECitnbm9tZS0yMDA3fEdOT01FIFRlcm1pbmFsIHNuYXBzaG90IDIuMTguMSwKKwl1c2U9eHRlcm0rcGNjMiwgdXNlPWdub21lLWZjNSwKKworIyBHTk9NRSBUZXJtaW5hbCAyLjIyLjMgKDIwMDggc25hcHNob3QpCisjCisjIEluIHZ0dGVzdCwgaXQgY2xhaW1zIHRvIGJlIGEgdnQyMjAgd2l0aCBuYXRpb25hbCByZXBsYWNlbWVudCBjaGFyYWN0ZXItc2V0cywKKyMgYnV0IGFzaWRlIGZyb20gdGhlIGlkZW50aWZpZXIgc3RyaW5nLCBpbXBsZW1lbnRzIG9ubHkgYSBzbWFsbCBmcmFjdGlvbiBvZgorIyB2dDIyMCdzIGJlaGF2aW9yLCB3aGljaCB3aWxsIG1ha2UgaXQgbGVzcyB1c2FibGUgb24gYSBWTVMgc3lzdGVtICh1bmNsZWFyCisjIHdoYXQgdGhlIGludGVudCBvZiB0aGUgZGV2ZWxvcGVyIGlzLCBzaW5jZSB0aGUgTlJDIGZlYXR1cmUgZXhwb3NlZCBpbiB2dHRlc3QKKyMgYnkgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd29yaykuCitnbm9tZS0yMDA4fEdOT01FIFRlcm1pbmFsIHNuYXBzaG90IDIuMjIuMywKKwl1c2U9Z25vbWUrcGNma2V5cywgdXNlPWdub21lLTIwMDcsCisKKyMgR05PTUUgdGVybWluYWwgbWF5IGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgInh0ZXJtIiB0ZXJtaW5mbyB0bworIyBzdXBwbHkga2V5IGluZm9ybWF0aW9uIHdoaWNoIGlzIG5vdCBidWlsdCBpbnRvIHRoZSBwcm9ncmFtLiAgV2l0aCAyLjIyLjMsCisjIHRoaXMgbGlzdCBpcyBidWlsdCBpbnRvIHRoZSBwcm9ncmFtICh3aGljaCBhZGRyZXNzZXMgdGhlIGluYWR2ZXJ0YW50IHVzZSBvZgorIyByYW5kb20gdGVybWluZm8gZGF0YSwgdGhvdWdoIHVzaW5nIGEgc2V0IG9mIHZhbHVlcyB3aGljaCBkb2VzIG5vdCBjb3JyZXNwb25kCisjIHRvIGFueSB0aGF0IHh0ZXJtIHByb2R1Y2VzIC0gc3RpbGwgbm90IHNvbHZpbmcgdGhlIHByb2JsZW0gdGhhdCBHTk9NRQorIyB0ZXJtaW5hbCBoYXJkY29kZXMgdGhlICRURVJNIHZhcmlhYmxlIGFzICJ4dGVybSIpLgorIworIwl0ZXJtaW5mbwltb2RpZmllcgljb2RlCWtleXMKKyMJa2YxMy1rZjI0CXNoaWZ0CQkyCUYxIHRvIEYxMgorIwlrZjI1LWtmMzYJY29udHJvbAkJNQlGMSB0byBGMTIKKyMJa2YzNy1rZjQ4CXNoaWZ0L2NvbnRyb2wJNglGMSB0byBGMTIKKyMJa2Y0OS1rZjYwCWFsdAkJMwlGMSB0byBGMTIKKyMJa2Y2MS1rZjYzCXNoaWZ0LWFsdAk0CUYxIHRvIEYzCisjCisjIFRoZSBwYXJhbWV0ZXJzIHdpdGggXEVPIChTUzMpIGFyZSB0ZWNobmljYWxseSBhbiBlcnJvciwgc2luY2UgU1MzIHNob3VsZCBoYXZlCisjIG5vIHBhcmFtZXRlcnMuICBUaGlzIGFwcGVhcnMgdG8gYmUgcm90ZSBjb3B5aW5nIGJhc2VkIG9uIHh0ZXJtK3BjYzAuCitnbm9tZStwY2ZrZXlzfGdub21lIHZhcmlhdGlvbiBvbiB4dGVybStwY2ZrZXlzLAorCWtmMT1cRU9QLCBrZjEzPVxFTzE7MlAsIGtmMTQ9XEVPMTsyUSwga2YxNT1cRU8xOzJSLAorCWtmMTY9XEVPMTsyUywga2YyPVxFT1EsIGtmMjU9XEVPMTs1UCwga2YyNj1cRU8xOzVRLAorCWtmMjc9XEVPMTs1Uiwga2YyOD1cRU8xOzVTLCBrZjM9XEVPUiwga2YzNz1cRU8xOzZQLAorCWtmMzg9XEVPMTs2USwga2YzOT1cRU8xOzZSLCBrZjQ9XEVPUywga2Y0MD1cRU8xOzZTLAorCWtmNDk9XEVPMTszUCwga2Y1MD1cRU8xOzNRLCBrZjUxPVxFTzE7M1IsIGtmNTI9XEVPMTszUywKKwlrZjYxPVxFTzE7NFAsIGtmNjI9XEVPMTs0USwga2Y2Mz1cRU8xOzRSLAorCXVzZT14dGVybStwY2ZrZXlzLAorCitnbm9tZXxHTk9NRSBUZXJtaW5hbCwKKwl1c2U9Z25vbWUtMjAwOCwKKworIyBwYWxldHRlIGlzIGhhcmRjb2RlZC4uLgorZ25vbWUtMjU2Y29sb3J8R05PTUUgVGVybWluYWwgd2l0aCB4dGVybSAyNTYtY29sb3JzLAorCWluaXRjQCwgdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9Z25vbWUsCisKKyMgWEZDRSBUZXJtaW5hbCAwLjIuNS40YmV0YTIKKyMKKyMgVGhpcyBpcyBiYXNlZCBvbiBzb21lIG9mIHRoZSBzYW1lIHNvdXJjZSBjb2RlLCBlLmcuLCB0aGUgVlRFIGxpYnJhcnksIGFzCisjIGdub21lLXRlcm1pbmFsLCBidXQgaGFzIGZld2VyIGZlYXR1cmVzLCBmYWlscyBtb3JlIHNjcmVlbnMgaW4gdnR0ZXN0LgorIyBTaW5jZSBtb3N0IG9mIHRoZSB0ZXJtaW5mby1yZWxhdGVkIGJlaGF2aW9yIGlzIGR1ZSB0byB0aGUgVlRFIGxpYnJhcnksCisjIHRoZSB0ZXJtaW5mbyBpcyB0aGUgc2FtZSBhcyBnbm9tZS10ZXJtaW5hbC4KK3hmY2V8WGZjZSBUZXJtaW5hbCwKKwl1c2U9Z25vbWUsCisKKyMgTXVsdGktR25vbWUtVGVybWluYWwgMS42LjIKKyMKKyMgVGhpcyBkb2VzIG5vdCB1c2UgVlRFLCBhbmQgZG9lcyBoYXZlIGRpZmZlcmVudCBiZWhhdmlvciAoY29tcGFyZSB4ZmNlIGFuZAorIyBnbm9tZSkuCittZ3R8TXVsdGkgR05PTUUgVGVybWluYWwsCisJaW5kbj1cRVslcDElZFMsIHJpbj1cRVslcDElZFQsIHVzZT14dGVybS14Zjg2LXYzMzMsCisKKyMgVGhpcyBpcyBrdnQgMC0xOC43LCBzaGlwcGVkIHdpdGggUmVkaGF0IDYuMCAodGhvdWdoIHdoZXRoZXIgaXQgc3VwcG9ydHMgYmNlCisjIG9yIG5vdCBpcyBkZWJhdGFibGUpLgora3Z0fEtERSB0ZXJtaW5hbCwKKwliY2UsIGttQCwKKwlrZGNoMT1cMTc3LCBrZW5kPVxFW0YsIGtob21lPVxFW0gsIHVzZT14dGVybS1jb2xvciwKKworIyBLb25zb2xlIDEuMC4xCisjIChmb3JtZXJseSBrbm93biBhcyBrdnQpCisjCisjIFRoaXMgcHJvZ3JhbSBoYXJkY29kZXMgJFRFUk0gdG8gJ3h0ZXJtJywgd2hpY2ggaXMgbm90IGFjY3VyYXRlLiAgSG93ZXZlciwgdG8KKyMgc2ltcGxpZnkgdGhpcyBlbnRyeSAoYW5kIHBvaW50IG91dCB3aHkga29uc29sZSBpc24ndCB4dGVybSksIHdlIGJhc2UgdGhpcyBvbgorIyB4dGVybS1yNi4gIFRoZSBkZWZhdWx0IGtleWJvYXJkIGFwcGVhcnMgdG8gYmUgJ2xpbnV4Jy4KKyMKKyMgTm90ZXM6CisjIGEpIGtvbnNvbGUgaW1wbGVtZW50cyBzZXZlcmFsIGZlYXR1cmVzIGZyb20gWEZyZWU4NiB4dGVybSwgdGhvdWdoIG5vbmUgb2YKKyMgICAgdGhhdCBpcyBkb2N1bWVudGVkIC0gZXhjZXB0IG9mIGNvdXJzZSBpbiBpdHMgc291cmNlIGNvZGUgLSBhcHBhcmVudGx5CisjICAgIGJlY2F1c2UgaXRzIGltcGxlbWVudG9ycyBhcmUgdW5hY2N1c3RvbWVkIHRvIHJlYWRpbmcgZG9jdW1lbnRhdGlvbiAtIGFzCisjICAgIGV2aWRlbmNlZCBieSB0aGUgc3BhcnNlIGFuZCBwb29ybHkgZWRpdGVkIGRvY3VtZW50YXRpb24gZGlzdHJpYnV0ZWQgd2l0aAorIyAgICBrb25zb2xlLiAgU29tZSBmZWF0dXJlcyBzdWNoIGFzIHRoZSAxMDQ5IHByaXZhdGUgbW9kZSBhcmUgcmVjb2duaXplZCBidXQKKyMgICAgaW5jb3JyZWN0bHkgaW1wbGVtZW50ZWQgYXMgYSBkdXBsaWNhdGUgb2YgdGhlIDQ3IHByaXZhdGUgbW9kZS4KKyMgYikgZXZlbiB3aXRoIHRoZSAidnQxMDAgKGhpc3RvcmljYWwpIiBrZXlib2FyZCBzZXR0aW5nLCB0aGUgbnVtZXJpYyBrZXlwYWQKKyMgICAgc2VuZHMgUEMtc3R5bGUgZXNjYXBlcyByYXRoZXIgdGhhbiB2dDEwMC4KKyMgYykgZmFpbHMgdnR0ZXN0IG1lbnUgMyAoVGVzdCBvZiBjaGFyYWN0ZXIgc2V0cykgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9wZXJseQorIyAgICBwYXJzZSBzb21lIGNvbnRyb2wgc2VxdWVuY2VzLiAgQWxzbyBmYWlscyB2dHRlc3QgUHJpbWFyeSBEZXZpY2UgQXR0cmlidXRlcworIyAgICBieSBzZW5kaW5nIGEgYm9ndXMgY29kZSAoaW4gdGhlIHNvdXJjZSBpdCBzYXlzIGl0J3Mgc3VwcG9zZWQgdG8gYmUgYQorIyAgICB2dDIyMCwgd2hpY2ggaXMgZG91Ymx5IGluY29ycmVjdCBiZWNhdXNlIGl0IGRvZXMgbm90IGltcGxlbWVudCB2dDIyMAorIyAgICBjb250cm9sIHNlcXVlbmNlcyBleGNlcHQgZm9yIGEgZmV3IHNwZWNpYWwgY2FzZXMpLiAgVHJlYXQgaXQgYXMgYQorIyAgICBtaWxkbHktYnJva2VuIHZ0MTAyLgorIworIyBVcGRhdGUgZm9yIGtvbnNvbGUgMS4zLjI6CisjICAgIFRoZSAxMDQ5IHByaXZhdGUgbW9kZSB3b3JrcyAoYnV0IHNlZSB0aGUgb3RoZXIgeHRlcm0gc2NyZWVucyBpbiB2dHRlc3QpLgorIyAgICBQcmltYXJ5IERldmljZSBBdHRyaWJ1dGVzIG5vdyByZXR1cm5zIHRoZSBjb2RlIGZvciBhIHZ0MTAwIHdpdGggYWR2YW5jZWQKKyMgICAgdmlkZW8gb3B0aW9uLiAgUGVyaGFwcyB0aGF0J3MgaW50ZW5kZWQgdG8gYmUgYSAibWlsZGx5LWJyb2tlbiB2dDEwMiIuCisjCisjIFVwZGF0ZWQgZm9yIGtvbnNvbGUgMS42LjQ6CisjICAgIGFkZCBrb25zb2xlLXNvbGFyaXMKKyMKKyMgVXBkYXRlZCBmb3Iga29uc29sZSAxLjYuNjoKKyMgICAgYWRkIGNvbnRyb2wta2V5IG1vZGlmaWVycyBmb3IgZnVuY3Rpb24ta2V5cywgZXRjLgorIworIyB2dHRlc3QgbWVudSAxIHNob3dzIHRoYXQgYm90aCBrb25zb2xlIGFuZCBnbm9tZSB0ZXJtaW5hbCBkbyB3cmFwcGluZworIyBkaWZmZXJlbnQgZnJvbSB4dGVybSAoYW5kIHZ0MTAwJ3MpLiAgVGhleSBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGluIHRoaXMKKyMgZGV0YWlsLCBidXQgaXQgaXMgdW5jbGVhciB3aGljaCBjb3BpZXMgdGhlIG90aGVyLgora29uc29sZS1iYXNlfEtERSBjb25zb2xlIHdpbmRvdywKKwliY2UsIGttQCwgbnBjLAorCWJlbEAsIGJsaW5rPVxFWzVtLCBjaXZpcz1cRVs/MjVsLCBjbm9ybT1cRVs/MjVoLAorCWVjaD1cRVslcDElZFgsIGZsYXNoPVxFWz81aCQ8MTAwLz5cRVs/NWwsCisJaHBhPVxFWyVpJXAxJWRHLCBpbmRuPVxFWyVwMSVkUywga2JzPVwxNzcsIGtkY2gxQCwKKwlrZW5kPVxFWzR+LCBrZjFALCBrZjEwQCwga2YxMUAsIGtmMTJALCBrZjEzQCwga2YxNEAsIGtmMTVALCBrZjE2QCwKKwlrZjE3QCwga2YxOEAsIGtmMTlALCBrZjJALCBrZjIwQCwga2YzQCwga2Y0QCwga2Y1QCwga2Y2QCwga2Y3QCwga2Y4QCwKKwlrZjlALCBrZm5kQCwga2hvbWU9XEVbMX4sIGtzbHRALCByaW49XEVbJXAxJWRULCBybWFtPVxFWz83bCwKKwlybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMyPVxFN1xFW3JcRThcRVttXEVbPzdoXEVbPzE7Mzs0OzZsXEVbNGxcRT5cRVs/MTAwMGxcRVs/MjVoLAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbMG1cMDE3LCBzbWFtPVxFWz83aCwgdnBhPVxFWyVpJXAxJWRkLAorCXVzZT1lY21hK2NvbG9yLCB1c2U9eHRlcm0tcjYsCitrb25zb2xlLWxpbnV4fEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIGxpbnV4IGtleWJvYXJkLAorCWtkY2gxPVxFWzN+LCBrZjE9XEVbW0EsIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxM0AsIGtmMTRALCBrZjE1QCwga2YxNkAsIGtmMTdALCBrZjE4QCwga2YxOUAsCisJa2YyPVxFW1tCLCBrZjIwQCwga2YzPVxFW1tDLCBrZjQ9XEVbW0QsIGtmNT1cRVtbRSwKKwlrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCXVzZT1rb25zb2xlLWJhc2UsCitrb25zb2xlLXNvbGFyaXN8S0RFIGNvbnNvbGUgd2luZG93IHdpdGggU29sYXJpcyBrZXlib2FyZCwKKwlrYnM9XkgsIGtlbmQ9XEVbNH4sIGtob21lPVxFWzF+LCB1c2U9a29uc29sZS12dDEwMCwKKyMgS0RFJ3MgIlhGcmVlODYgMy54LngiIGtleWJvYXJkIGlzIGJhc2VkIG9uIHJlYWRpbmcgdGhlIHh0ZXJtIHRlcm1pbmZvIHJhdGhlcgorIyB0aGFuIHRlc3RpbmcgdGhlIGNvZGUuCitrb25zb2xlLXhmM3h8S0RFIGNvbnNvbGUgd2luZG93IHdpdGgga2V5Ym9hcmQgZm9yIFhGcmVlODYgMy54IHh0ZXJtLAorCWtlbmQ9XEVbNH4sIGtob21lPVxFWzF+LCB1c2U9a29uc29sZS12dDEwMCwKKyMgVGhlIHZhbHVlIGZvciBrYnMgcmVmbGVjdHMgbG9jYWwgY3VzdG9taXphdGlvbiByYXRoZXIgdGhhbiB0aGUgc2V0dGluZ3MgdXNlZAorIyBmb3IgWEZyZWU4NiB4dGVybS4KK2tvbnNvbGUteGY0eHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb3IgWEZyZWU4NiA0LnggeHRlcm0sCisJa2VuZD1cRU9GLCBraG9tZT1cRU9ILCB1c2U9a29uc29sZStwY2ZrZXlzLAorCXVzZT1rb25zb2xlLXZ0MTAwLAorIyBLb25zb2xlIGRvZXMgbm90IGltcGxlbWVudCBzaGlmdGVkIGN1cnNvci1rZXlzLgora29uc29sZStwY2ZrZXlzfGtvbnNvbGUgc3Vic2V0IG9mIHh0ZXJtK3BjZmtleXMsCisJa0xGVEAsIGtSSVRALCBrY2J0PVxFW1osIGtpbmRALCBrcmlALCBrRE5ALCBrVVBALCB1c2U9eHRlcm0rcGNjMiwKKwl1c2U9eHRlcm0rcGNmMCwKKyMgS0RFJ3MgInZ0MTAwIiBrZXlib2FyZCBoYXMgbm8gcmVsYXRpb25zaGlwIHRvIGFueSB0ZXJtaW5hbCB0aGF0IERFQyBtYWRlLCBidXQKKyMgaXQgaXMgc3RpbGwgdXNlZnVsIGZvciBkZXJpdmluZyB0aGUgb3RoZXIgZW50cmllcy4KK2tvbnNvbGUtdnQxMDB8S0RFIGNvbnNvbGUgd2luZG93IHdpdGggdnQxMDAgKHNpYykga2V5Ym9hcmQsCisJa2JzPVwxNzcsIGtkY2gxPVxFWzN+LCBrZW5kPVxFW0YsIGtmMT1cRVsxMX4sIGtmMTA9XEVbMjF+LAorCWtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxM0AsIGtmMTRALCBrZjE1QCwga2YxNkAsIGtmMTdALAorCWtmMThALCBrZjE5QCwga2YyPVxFWzEyfiwga2YyMEAsIGtmMz1cRVsxM34sIGtmND1cRVsxNH4sCisJa2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlraG9tZT1cRVtILCB1c2U9a29uc29sZS1iYXNlLAora29uc29sZS12dDQyMHBjfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHZ0NDIwIHBjIGtleWJvYXJkLAorCWticz1eSCwga2RjaDE9XDE3NywgdXNlPWtvbnNvbGUtdnQxMDAsCitrb25zb2xlLTE2Y29sb3J8a2xvbmUgb2YgeHRlcm0tMTZjb2xvciwKKwluY3YjMzIsIHVzZT1pYm0rMTZjb2xvciwgdXNlPWtvbnNvbGUsCisjIG1ha2UgYSBkZWZhdWx0IGVudHJ5IGZvciBrb25zb2xlCitrb25zb2xlfEtERSBjb25zb2xlIHdpbmRvdywKKwl1c2U9a29uc29sZS14ZjR4LAorCisjIHBhbGV0dGUgaXMgaGFyZGNvZGVkLi4uCitrb25zb2xlLTI1NmNvbG9yfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHh0ZXJtIDI1Ni1jb2xvcnMsCisJaW5pdGNALCB1c2U9eHRlcm0rMjU2Y29sb3IsIHVzZT1rb25zb2xlLAorCisjIFRoaXMgaXMgbWx0ZXJtIDIuOS4zJ3MgbWx0ZXJtLnRpLCB3aXRoIHNvbWUgYWRkaXRpb25zL2NvcnJlY3Rpb25zIC1URAorIworIyBJdCBpcyBub21pbmFsbHkgYSB2dDEwMiBlbXVsYXRvciwgd2l0aCBmZWF0dXJlcyBib3Jyb3dlZCBmcm9tIHJ4dnQgYW5kCisjIHh0ZXJtLgorIworIyBUaGUgZnVuY3Rpb24ga2V5cyBhcmUgbnVtYmVyZWQgYmFzZWQgb24gc2hpZnQvY29udHJvbC9hbHQgbW9kaWZpZXJzLCBleGNlcHQKKyMgdGhhdCB0aGUgY29udHJvbC1tb2RpZmllciBpdHNlbGYgaXMgdXNlZCB0byBzcGF3biBhIG5ldyBjb3B5IG9mIG1sdGVybSAodGhlCisjICItUCIgb3B0aW9uKS4gIFNvIGNvbnRyb2wvRjEgdG8gY29udHJvbC9GMTIgbWF5IG5vdCBiZSB1c2FibGUsIGRlcGVuZGluZyBvbgorIyBob3cgaXQgaXMgY29uZmlndXJlZC4KKyMKKyMJCQkJa2YxIHRvIGtmMTIJXEVbMTF+ICAgdG8gXEVbMjR+CisjCXNoaWZ0CQkJa2YxIHRvIGtmMTIJXEVbMTE7Mn4gdG8gXEVbMjQ7Mn4KKyMJYWx0CQkJa2YxIHRvIGtmMTIJXEVbMTE7M34gdG8gXEVbMjQ7M34KKyMJc2hpZnQvYWx0CQlrZjEgdG8ga2YxMglcRVsxMTs0fiB0byBcRVsyNDs0fgorIwljb250cm9sCQkJa2YxIHRvIGtmMTIJXEVbMTE7NX4gdG8gXEVbMjQ7NX4gKG1heWJlKQorIwljb250cm9sL3NoaWZ0CQlrZjEgdG8ga2YxMglcRVsxMTs2fiB0byBcRVsyNDs2fgorIwljb250cm9sL2FsdAkJa2YxIHRvIGtmMTIJXEVbMTE7N34gdG8gXEVbMjQ7N34KKyMJY29udHJvbC9zaGlmdC9hbHQJa2YxIHRvIGtmMTIJXEVbMTE7OH4gdG8gXEVbMjQ7OH4KKyMKK21sdGVybXxtdWx0aSBsaW5ndWFsIHRlcm1pbmFsIGVtdWxhdG9yLAorCWFtLCBlc2xvaywga20sIG1jNWksIG1pciwgbXNnciwgbnBjLCB4ZW5sLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgcGFpcnMjNjQsCisJYWNzYz0wMGBgYWFmZmdnaGhqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgZW5hY3M9LAorCWhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwKKwlpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaW5kbj1cRVslcDElZFMsCisJaXMyPVxFN1xFW3JcRVttXEVbPzdoXEVbPzE7Mzs0OzZsXEVbNGxcRThcRT4sCisJa2JzPVwxNzcsIGtjYnQ9XEVbWiwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywKKwlrY3V1MT1cRU9BLCBrZGNoMT1cRVszfiwga2VuZD1cRU9GLCBrZW50PVxFT00sIGtmbmQ9XEVbMX4sCisJa2hvbWU9XEVPSCwga2ljaDE9XEVbMn4sIGtpbmQ9XEVPMTsyQiwga21vdXM9XEVbTSwKKwlrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3JpPVxFTzE7MkEsIGtzbHQ9XEVbNH4sIG1jMD1cRVtpLAorCW5lbD1cRUUsIG9wPVxFWzM5OzQ5bSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlyaW49XEVbJXAxJWRULCBybWFjcz1cRShCLCBybWFtPVxFWz83bCwgcm1jdXA9XEVbPzEwNDlsLAorCXJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMyPVxFN1xFW3JcRThcRVttXEVbPzdoXEVbPzE7Mzs0OzZsXEVbNGxcRT5cRVs/MTAwMGwsCisJc2M9XEU3LCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTttJT8lcDkldFxFKDAlZVxFKEIlOywKKwlzZ3IwPVxFW21cRShCLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwgc21jdXA9XEVbPzEwNDloLAorCXNtaXI9XEVbNGgsIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVszZywgdTY9XEVbJWklZDslZFIsIHU3PVxFWzZuLCB1OD1cRVs/MTsyYywgdTk9XEVbYywKKwl2cGE9XEVbJWklcDElZGQsIHVzZT1tbHRlcm0rcGNma2V5cywgdXNlPXh0ZXJtK3I2ZjIsCisKKyMgVGhlIGluc2VydC9kZWxldGUvaG9tZS9lbmQga2V5cyBkbyBub3QgcmVzcG9uZCB0byBtb2RpZmllcnMgYmVjYXVzZSBtbHRlcm0KKyMgbG9va3MgaW4gaXRzIHRlcm1jYXAgdG8gZGVjaWRlIHdoaWNoIHN0cmluZyB0byBzZW5kLiAgSWYgaXQgdXNlZCB0ZXJtaW5mbworIyAod2hlbiBhdmFpbGFibGUpLCBpdCBjb3VsZCB1c2UgdGhlIGV4dGVuZGVkIG5hbWVzIGludHJvZHVjZWQgZm9yIHh0ZXJtLgorbWx0ZXJtK3BjZmtleXN8ZnJhZ21lbnQgZm9yIFBDLXN0eWxlIGZrZXlzLAorCWtMRlQ9XEVPMTsyRCwga05YVD1cRVs2OzJ+LCBrUFJWPVxFWzU7Mn4sIGtSSVQ9XEVPMTsyQywKKwlrRE49XEVPMTsyQiwga0ROMz1cRU8xOzNCLCBrRE40PVxFTzE7NEIsIGtETjU9XEVPMTs1QiwKKwlrRE42PVxFTzE7NkIsIGtETjc9XEVPMTs3Qiwga0lDNT1cRVsyOzV+LCBrSUM2PVxFWzI7Nn4sCisJa0xGVDM9XEVPMTszRCwga0xGVDQ9XEVPMTs0RCwga0xGVDU9XEVPMTs1RCwKKwlrTEZUNj1cRU8xOzZELCBrTEZUNz1cRU8xOzdELCBrTlhUNT1cRVs2OzV+LAorCWtOWFQ2PVxFWzY7Nn4sIGtQUlY1PVxFWzU7NX4sIGtQUlY2PVxFWzU7Nn4sCisJa1JJVDM9XEVPMTszQywga1JJVDQ9XEVPMTs0Qywga1JJVDU9XEVPMTs1QywKKwlrUklUNj1cRU8xOzZDLCBrUklUNz1cRU8xOzdDLCBrVVA9XEVPMTsyQSwga1VQMz1cRU8xOzNBLAorCWtVUDQ9XEVPMTs0QSwga1VQNT1cRU8xOzVBLCBrVVA2PVxFTzE7NkEsIGtVUDc9XEVPMTs3QSwKKworIyBGcm9tOiBUaG9tYXMgRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAwNCBPY3QgMTk5NworIyBVcGRhdGVkOiBPZXpndWVyIEtlc2ltIDxrZXNpbUBtYXRoLmZ1LWJlcmxpbi5kZT4gMDIgTm92IDE5OTcKKyMgTm90ZXM6CisjIHJ4dnQgMi4yMWIgdXNlcworIwlzbWFjcz1cRShCXEUpVV5OLCBybWFjcz1cRShCXEUpMF5PLAorIyBidXQgc29tZSBhcHBsaWNhdGlvbnMgZG9uJ3Qgd29yayB3aXRoIHRoYXQuCisjIEl0IGFsc28gaGFzIGFuIEFJWCBleHRlbnNpb24KKyMJYm94Mj1scWt4am13dXZ0biwKKyMgYW5kCisjCWVjaD1cRVslcDElZFgsCisjIGJ1dCB0aGUgbGF0dGVyIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5LgorIworIyBUaGUgZGlzdHJpYnV0ZWQgdGVybWluZm8gc2F5cyBpdCBpbXBsZW1lbnRzIGhwYSBhbmQgdnBhLCBidXQgdGhleSBhcmUgbm90CisjIGltcGxlbWVudGVkIGNvcnJlY3RseSwgdXNpbmcgcmVsYXRpdmUgcmF0aGVyIHRoYW4gYWJzb2x1dGUgcG9zaXRpb25pbmcuCisjCisjIHJ4dnQgaXMgbm9ybWFsbHkgY29uZmlndXJlZCB0byBsb29rIGZvciAieHRlcm0iIG9yICJ4dGVybS1jb2xvciIgYXMgJFRFUk0uCisjIFNpbmNlIHJ4dnQgaXMgbm90IHJlYWxseSBjb21wYXRpYmxlIHdpdGggeHRlcm0sIGl0IHNob3VsZCBiZSBjb25maWd1cmVkIGFzCisjICJyeHZ0IiBvciAicnh2dC1jb2xvciIuCisjCisjIHJlbW92ZWQgZGNoL2RjaDEgYmVjYXVzZSB0aGV5IGFyZSBpbmNvbnNpc3RlbnQgd2l0aCBiY2UvZWNoIC1URAorIyByZW1vdmUga20gYXMgcGVyIHRhY2sgdGVzdCAtVEQKK3J4dnQtYmFzaWN8cnh2dCB0ZXJtaW5hbCBiYXNlIChYIFdpbmRvdyBTeXN0ZW0pLAorCU9UYnMsIGFtLCBiY2UsIGVvLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwllbmFjcz1cRShCXEUpMCwgZmxhc2g9XEVbPzVoXEVbPzVsLCBob21lPVxFW0gsIGh0PV5JLAorCWh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwKKwlpbmQ9XkosIGlzMT1cRVs/NDdsXEU9XEVbPzFsLAorCWlzMj1cRVtyXEVbbVxFWzJKXEVbSFxFWz83aFxFWz8xOzM7NDs2bFxFWzRsLCBrYnM9XkgsCisJa2NidD1cRVtaLCBrbW91cz1cRVtNLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywKKwlybWN1cD1cRVsySlxFWz80N2xcRTgsIHJtaXI9XEVbNGwsIHJta3g9XEU+LCBybXNvPVxFWzI3bSwKKwlybXVsPVxFWzI0bSwKKwlyczE9XEU+XEVbMTszOzQ7NTs2bFxFWz83aFxFW21cRVtyXEVbMkpcRVtILAorCXJzMj1cRVtyXEVbbVxFWzJKXEVbSFxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU+XEVbPzEwMDBsXEVbPzI1aCwKKwlzMGRzPVxFKEIsIHMxZHM9XEUoMCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbMG1cMDE3LCBzbWFjcz1eTiwgc21jdXA9XEU3XEVbPzQ3aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLCB1c2U9dnQxMDArZW5xLAorCXVzZT1yeHZ0K3BjZmtleXMsIHVzZT12dDIyMCtrZXlwYWQsCisjIEtleSBDb2RlcyBmcm9tIHJ4dnQgcmVmZXJlbmNlOgorIworIyBOb3RlOiBTaGlmdCArIEYxLUYxMCBnZW5lcmF0ZXMgRjExLUYyMAorIworIyBGb3IgdGhlIGtleXBhZCwgdXNlIFNoaWZ0IHRvIHRlbXBvcmFyaWx5IG92ZXJyaWRlIEFwcGxpY2F0aW9uLUtleXBhZAorIyBzZXR0aW5nIHVzZSBOdW1fTG9jayB0byB0b2dnbGUgQXBwbGljYXRpb24tS2V5cGFkIHNldHRpbmcgaWYgTnVtX0xvY2sKKyMgaXMgb2ZmLCBlc2NhcGUgc2VxdWVuY2VzIHRvZ2dsZSBBcHBsaWNhdGlvbi1LZXlwYWQgc2V0dGluZy4KKyMgQWxzbyBub3RlIHRoYXQgdmFsdWVzIG9mIEhvbWUsIEVuZCwgRGVsZXRlIG1heSBoYXZlIGJlZW4gY29tcGlsZWQKKyMgZGlmZmVyZW50bHkgb24geW91ciBzeXN0ZW0uCisjCisjICAgICAgICAgICAgICAgICAgIE5vcm1hbCAgICAgICBTaGlmdCAgICAgICAgQ29udHJvbCAgICAgIEN0cmwrU2hpZnQKKyMgIFRhYiAgICAgICAgICAgICAgXkkgICAgICAgICAgIEVTQyBbIFogICAgICBeSSAgICAgICAgICAgRVNDIFsgWgorIyAgQmFja1NwYWNlICAgICAgICBeSCAgICAgICAgICAgXj8gICAgICAgICAgIF4/ICAgICAgICAgICBePworIyAgRmluZCAgICAgICAgICAgICBFU0MgWyAxIH4gICAgRVNDIFsgMSAkICAgIEVTQyBbIDEgXiAgICBFU0MgWyAxIEAKKyMgIEluc2VydCAgICAgICAgICAgRVNDIFsgMiB+ICAgIHBhc3RlICAgICAgICBFU0MgWyAyIF4gICAgRVNDIFsgMiBACisjICBFeGVjdXRlICAgICAgICAgIEVTQyBbIDMgfiAgICBFU0MgWyAzICQgICAgRVNDIFsgMyBeICAgIEVTQyBbIDMgQAorIyAgU2VsZWN0ICAgICAgICAgICBFU0MgWyA0IH4gICAgRVNDIFsgNCAkICAgIEVTQyBbIDQgXiAgICBFU0MgWyA0IEAKKyMgIFByaW9yICAgICAgICAgICAgRVNDIFsgNSB+ICAgIHNjcm9sbC11cCAgICBFU0MgWyA1IF4gICAgRVNDIFsgNSBACisjICBOZXh0ICAgICAgICAgICAgIEVTQyBbIDYgfiAgICBzY3JvbGwtZG93biAgRVNDIFsgNiBeICAgIEVTQyBbIDYgQAorIyAgSG9tZSAgICAgICAgICAgICBFU0MgWyA3IH4gICAgRVNDIFsgNyAkICAgIEVTQyBbIDcgXiAgICBFU0MgWyA3IEAKKyMgIEVuZCAgICAgICAgICAgICAgRVNDIFsgOCB+ICAgIEVTQyBbIDggJCAgICBFU0MgWyA4IF4gICAgRVNDIFsgOCBACisjICBEZWxldGUgICAgICAgICAgIEVTQyBbIDMgfiAgICBFU0MgWyAzICQgICAgRVNDIFsgMyBeICAgIEVTQyBbIDMgQAorIyAgRjEgICAgICAgICAgICAgICBFU0MgWyAxMSB+ICAgRVNDIFsgMjMgfiAgIEVTQyBbIDExIF4gICBFU0MgWyAyMyBeCisjICBGMiAgICAgICAgICAgICAgIEVTQyBbIDEyIH4gICBFU0MgWyAyNCB+ICAgRVNDIFsgMTIgXiAgIEVTQyBbIDI0IF4KKyMgIEYzICAgICAgICAgICAgICAgRVNDIFsgMTMgfiAgIEVTQyBbIDI1IH4gICBFU0MgWyAxMyBeICAgRVNDIFsgMjUgXgorIyAgRjQgICAgICAgICAgICAgICBFU0MgWyAxNCB+ICAgRVNDIFsgMjYgfiAgIEVTQyBbIDE0IF4gICBFU0MgWyAyNiBeCisjICBGNSAgICAgICAgICAgICAgIEVTQyBbIDE1IH4gICBFU0MgWyAyOCB+ICAgRVNDIFsgMTUgXiAgIEVTQyBbIDI4IF4KKyMgIEY2ICAgICAgICAgICAgICAgRVNDIFsgMTcgfiAgIEVTQyBbIDI5IH4gICBFU0MgWyAxNyBeICAgRVNDIFsgMjkgXgorIyAgRjcgICAgICAgICAgICAgICBFU0MgWyAxOCB+ICAgRVNDIFsgMzEgfiAgIEVTQyBbIDE4IF4gICBFU0MgWyAzMSBeCisjICBGOCAgICAgICAgICAgICAgIEVTQyBbIDE5IH4gICBFU0MgWyAzMiB+ICAgRVNDIFsgMTkgXiAgIEVTQyBbIDMyIF4KKyMgIEY5ICAgICAgICAgICAgICAgRVNDIFsgMjAgfiAgIEVTQyBbIDMzIH4gICBFU0MgWyAyMCBeICAgRVNDIFsgMzMgXgorIyAgRjEwICAgICAgICAgICAgICBFU0MgWyAyMSB+ICAgRVNDIFsgMzQgfiAgIEVTQyBbIDIxIF4gICBFU0MgWyAzNCBeCisjICBGMTEgICAgICAgICAgICAgIEVTQyBbIDIzIH4gICBFU0MgWyAyMyAkICAgRVNDIFsgMjMgXiAgIEVTQyBbIDIzIEAKKyMgIEYxMiAgICAgICAgICAgICAgRVNDIFsgMjQgfiAgIEVTQyBbIDI0ICQgICBFU0MgWyAyNCBeICAgRVNDIFsgMjQgQAorIyAgRjEzICAgICAgICAgICAgICBFU0MgWyAyNSB+ICAgRVNDIFsgMjUgJCAgIEVTQyBbIDI1IF4gICBFU0MgWyAyNSBACisjICBGMTQgICAgICAgICAgICAgIEVTQyBbIDI2IH4gICBFU0MgWyAyNiAkICAgRVNDIFsgMjYgXiAgIEVTQyBbIDI2IEAKKyMgIEYxNSAoSGVscCkgICAgICAgRVNDIFsgMjggfiAgIEVTQyBbIDI4ICQgICBFU0MgWyAyOCBeICAgRVNDIFsgMjggQAorIyAgRjE2IChNZW51KSAgICAgICBFU0MgWyAyOSB+ICAgRVNDIFsgMjkgJCAgIEVTQyBbIDI5IF4gICBFU0MgWyAyOSBACisjICBGMTcgICAgICAgICAgICAgIEVTQyBbIDMxIH4gICBFU0MgWyAzMSAkICAgRVNDIFsgMzEgXiAgIEVTQyBbIDMxIEAKKyMgIEYxOCAgICAgICAgICAgICAgRVNDIFsgMzIgfiAgIEVTQyBbIDMyICQgICBFU0MgWyAzMiBeICAgRVNDIFsgMzIgQAorIyAgRjE5ICAgICAgICAgICAgICBFU0MgWyAzMyB+ICAgRVNDIFsgMzMgJCAgIEVTQyBbIDMzIF4gICBFU0MgWyAzMyBACisjICBGMjAgICAgICAgICAgICAgIEVTQyBbIDM0IH4gICBFU0MgWyAzNCAkICAgRVNDIFsgMzQgXiAgIEVTQyBbIDM0IEAKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb24KKyMgIFVwICAgICAgICAgICAgICAgRVNDIFsgQSAgICAgIEVTQyBbIGEgICAgICBFU0MgTyBhICAgICAgRVNDIE8gQQorIyAgRG93biAgICAgICAgICAgICBFU0MgWyBCICAgICAgRVNDIFsgYiAgICAgIEVTQyBPIGIgICAgICBFU0MgTyBCCisjICBSaWdodCAgICAgICAgICAgIEVTQyBbIEMgICAgICBFU0MgWyBjICAgICAgRVNDIE8gYyAgICAgIEVTQyBPIEMKKyMgIExlZnQgICAgICAgICAgICAgRVNDIFsgRCAgICAgIEVTQyBbIGQgICAgICBFU0MgTyBkICAgICAgRVNDIE8gRAorIyAgS1BfRW50ZXIgICAgICAgICBeTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBNCisjICBLUF9GMSAgICAgICAgICAgIEVTQyBPIFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIFAKKyMgIEtQX0YyICAgICAgICAgICAgRVNDIE8gUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gUQorIyAgS1BfRjMgICAgICAgICAgICBFU0MgTyBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBSCisjICBLUF9GNCAgICAgICAgICAgIEVTQyBPIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIFMKKyMgIFhLX0tQX011bHRpcGx5ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gagorIyAgWEtfS1BfQWRkICAgICAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBrCisjICBYS19LUF9TZXBhcmF0b3IgICwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIGwKKyMgIFhLX0tQX1N1YnRyYWN0ICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gbQorIyAgWEtfS1BfRGVjaW1hbCAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBuCisjICBYS19LUF9EaXZpZGUgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIG8KKyMgIFhLX0tQXzAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gcAorIyAgWEtfS1BfMSAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyBxCisjICBYS19LUF8yICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIHIKKyMgIFhLX0tQXzMgICAgICAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gcworIyAgWEtfS1BfNCAgICAgICAgICA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyB0CisjICBYS19LUF81ICAgICAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIHUKKyMgIFhLX0tQXzYgICAgICAgICAgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8gdgorIyAgWEtfS1BfNyAgICAgICAgICA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0MgTyB3CisjICBYS19LUF84ICAgICAgICAgIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTQyBPIHgKKyMgIFhLX0tQXzkgICAgICAgICAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNDIE8geQorIworIyBUaGUgc291cmNlLWNvZGUgZm9yIHJ4dnQgYWN0dWFsbHkgZGVmaW5lcyBtYXBwaW5ncyBmb3IgRjIxLUYzNSwgdXNpbmcKKyMgIkVTQyBbIDM1IH4iIHRvICJFU0MgWyAgNDkgfiIuICBLZXlib2FyZHMgd2l0aCBtb3JlIHRoYW4gMTIgZnVuY3Rpb24ga2V5cworIyBhcmUgcmFyZSwgc28gdGhpcyBlbnRyeSB1c2VzIHRoZSBzaGlmdC0gYW5kIGNvbnRyb2wtbW9kaWZpZXJzIGFzIGluCisjIHh0ZXJtK3BjZmtleXMgdG8gZGVmaW5lIGtleXMgcGFzdCBGMTIuCisjCisjIGtJQyBpcyBub3JtYWxseSBub3QgdXNlZCwgc2luY2Ugcnh2dCBwZXJmb3JtcyBhIHBhc3RlIGZvciB0aGF0IChzaGlmdGVkCisjIGluc2VydCksIHVubGVzcyBwcml2YXRlIG1vZGUgMzUgaXMgc2V0LgorIworIyBrRE4sIGtETjUsIGtETjYsIGV0YyBhcmUgZXh0ZW5zaW9ucyBiYXNlZCBvbiB0aGUgbmFtZXMgZnJvbSB4dGVybStwY2ZrZXlzIC1URAorIyBSZW1vdmVkIGtETjYsIGV0YyAoY29udHJvbCtzaGlmdCkgc2luY2Ugcnh2dCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhpcyAtVEQKK3J4dnQrcGNma2V5c3xmcmFnbWVudCBmb3IgUEMtc3R5bGUgZmtleXMsCisJa0RDPVxFWzMkLCBrRU5EPVxFWzgkLCBrSE9NPVxFWzckLCBrSUM9XEVbMiQsIGtMRlQ9XEVbZCwKKwlrTlhUPVxFWzYkLCBrUFJWPVxFWzUkLCBrUklUPVxFW2MsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbM34sIGtlbD1cRVs4XF4sCisJa2VuZD1cRVs4fiwga2YxPVxFWzExfiwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LAorCWtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LAorCWtmMj1cRVsxMn4sIGtmMjA9XEVbMzR+LCBrZjIxPVxFWzIzJCwga2YyMj1cRVsyNCQsCisJa2YyMz1cRVsxMVxeLCBrZjI0PVxFWzEyXF4sIGtmMjU9XEVbMTNcXiwga2YyNj1cRVsxNFxeLAorCWtmMjc9XEVbMTVcXiwga2YyOD1cRVsxN1xeLCBrZjI5PVxFWzE4XF4sIGtmMz1cRVsxM34sCisJa2YzMD1cRVsxOVxeLCBrZjMxPVxFWzIwXF4sIGtmMzI9XEVbMjFcXiwga2YzMz1cRVsyM1xeLAorCWtmMzQ9XEVbMjRcXiwga2YzNT1cRVsyNVxeLCBrZjM2PVxFWzI2XF4sIGtmMzc9XEVbMjhcXiwKKwlrZjM4PVxFWzI5XF4sIGtmMzk9XEVbMzFcXiwga2Y0PVxFWzE0fiwga2Y0MD1cRVszMlxeLAorCWtmNDE9XEVbMzNcXiwga2Y0Mj1cRVszNFxeLCBrZjQzPVxFWzIzQCwga2Y0ND1cRVsyNEAsCisJa2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlrZm5kPVxFWzF+LCBraG9tZT1cRVs3fiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWtzbHQ9XEVbNH4sIGtEQzU9XEVbM1xeLCBrREM2PVxFWzNALCBrRE49XEVbYiwga0RONT1cRU9iLAorCWtFTkQ1PVxFWzhcXiwga0VORDY9XEVbOEAsIGtIT001PVxFWzdcXiwga0hPTTY9XEVbN0AsCisJa0lDNT1cRVsyXF4sIGtJQzY9XEVbMkAsIGtMRlQ1PVxFT2QsIGtOWFQ1PVxFWzZcXiwKKwlrTlhUNj1cRVs2QCwga1BSVjU9XEVbNVxeLCBrUFJWNj1cRVs1QCwga1JJVDU9XEVPYywKKwlrVVA9XEVbYSwga1VQNT1cRU9hLAorCityeHZ0fHJ4dnQgdGVybWluYWwgZW11bGF0b3IgKFggV2luZG93IFN5c3RlbSksCisJbmN2QCwKKwlocGE9XEVbJWklcDElZEcsIGtmMD1cRVsyMX4sIHNncjA9XEVbbVwwMTcsCisJdnBhPVxFWyVpJXAxJWRkLCB1c2U9cnh2dC1iYXNpYywgdXNlPWVjbWErY29sb3IsCityeHZ0LWNvbG9yfHJ4dnQgdGVybWluYWwgZW11bGF0b3IgKFggV2luZG93IFN5c3RlbSksCisJdXNlPXJ4dnQsCityeHZ0LTI1NmNvbG9yfHJ4dnQgMi43Ljkgd2l0aCB4dGVybSAyNTYtY29sb3JzLAorCXVzZT14dGVybSsyNTZjb2xvciwgdXNlPXJ4dnQsCityeHZ0LTg4Y29sb3J8cnh2dCAyLjcuOSB3aXRoIHh0ZXJtIDg4LWNvbG9ycywKKwl1c2U9eHRlcm0rODhjb2xvciwgdXNlPXJ4dnQsCityeHZ0LXhwbXxyeHZ0IHRlcm1pbmFsIGVtdWxhdG9yIChYIFdpbmRvdyBTeXN0ZW0pLAorCXVzZT1yeHZ0LAorcnh2dC1jeWd3aW58cnh2dCB0ZXJtaW5hbCBlbXVsYXRvciAoWCBXaW5kb3cgU3lzdGVtKSBvbiBjeWd3aW4sCisJYWNzYz0wXDMzMytcMjU3XCxcMjU2LVxeYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwl1c2U9cnh2dCwKK3J4dnQtY3lnd2luLW5hdGl2ZXxyeHZ0IHRlcm1pbmFsIGVtdWxhdG9yIChuYXRpdmUgTVMgV2luZG93IFN5c3RlbSBwb3J0KSBvbiBjeWd3aW4sCisJYWNzYz0wXDMzMytcMjU3XCxcMjU2LVxeYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwflwzNzYsCisJdXNlPXJ4dnQtY3lnd2luLAorCisjIFRoaXMgdmFyaWFudCBpcyBzdXBwb3NlZCB0byB3b3JrIHdpdGggcnh2dCAyLjcuNyB3aGVuIGNvbXBpbGVkIHdpdGgKKyMgTk9fQlJJR0hUQ09MT1IgZGVmaW5lZC4gIHJ4dnQgbmVlZHMgbW9yZSB3b3JrLi4uCityeHZ0LTE2Y29sb3J8eHRlcm0gd2l0aCAxNiBjb2xvcnMgbGlrZSBhaXh0ZXJtLAorCW5jdiMzMiwgdXNlPWlibSsxNmNvbG9yLCB1c2U9cnh2dCwKKworIyBtcnh2dCAwLjUuMworIworIyBtcnh2dCBpcyBiYXNlZCBvbiByeHZ0IDIuNy4xMSwgYnV0IGhhcyBieSBkZWZhdWx0IFhURVJNX0ZLRVlTIGRlZmluZWQsIHdoaWNoCisjIG1ha2VzIGl0cyBmdW5jdGlvbi1rZXlzIGRpZmZlcmVudCBmcm9tIG90aGVyIGZsYXZvcnMgb2Ygcnh2dCAtVEQKK21yeHZ0fG11bHRpdGFiYmVkIHJ4dnQsCisJdXNlPXh0ZXJtK3BjYzIsIHVzZT14dGVybStyNmYyLCB1c2U9cnh2dCwKKworIyBGcm9tOiBNaWNoYWVsIEplbm5pbmdzIDxtZWpAdmFsaW51eC5jb20+CisjCisjIEV0ZXJtIDAuOS4zCisjCisjIHJlbW92ZWQga2YwIHdoaWNoIGNvbmZsaWN0cyB3aXRoIGtmMTAgLVRECisjIHJlbW92ZSBjdnZpcyB3aGljaCBjb25mbGljdHMgd2l0aCBjbm9ybSAtVEQKKyMgRXRlcm0gZG9lcyBub3QgaW1wbGVtZW50IGNvbnRyb2wvc2hpZnQgY3Vyc29yIGtleXMgc3VjaCBhcyBrRE42LCBvciBrUFJWL2tOWFQKKyMgYnV0IGRvZXMgb3RoZXJ3aXNlIGZvbGxvdyB0aGUgcnh2dCtwY2ZrZXlzIG1vZGVsIC1URAorIyByZW1vdmUgbm9ud29ya2luZyBmbGFzaCAtVEQKKyMgcmVtb3ZlIGttIGFzIHBlciB0YWNrIHRlc3QgLVRECitFdGVybXxFdGVybS1jb2xvcnxFdGVybSB3aXRoIHh0ZXJtLXN0eWxlIGNvbG9yIHN1cHBvcnQgKFggV2luZG93IFN5c3RlbSksCisJYW0sIGJjZSwgYncsIGVvLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwlidG5zIzUsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBsbSMwLCBuY3ZALAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBlbmFjcz1cRSkwLAorCWhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwKKwlpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlpczE9XEVbPzQ3bFxFPlxFWz8xbCwKKwlpczI9XEVbclxFW21cRVsySlxFW0hcRVs/N2hcRVs/MTszOzQ7NmxcRVs0bCwga05YVEAsCisJa1BSVkAsIGthMT1cRVs3fiwga2EzPVxFWzV+LCBrYjI9XEVPdSwga2JlZz1cRU91LCBrYnM9XkgsCisJa2MxPVxFWzh+LCBrYzM9XEVbNn4sIGtlbnQ9XEVPTSwga2hscD1cRVsyOH4sIGttb3VzPVxFW00sCisJbWM0PVxFWzRpLCBtYzU9XEVbNWksIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLAorCXJtYW09XEVbPzdsLCBybWN1cD1cRVsySlxFWz80N2xcRTgsIHJtaXI9XEVbNGwsIHJta3g9LAorCXJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEU+XEVbMTszOzQ7NTs2bFxFWz83aFxFW21cRVtyXEVbMkpcRVtILAorCXJzMj1cRVtyXEVbbVxFWzJKXEVbSFxFWz83aFxFWz8xOzM7NDs2bFxFWzRsXEU+XEVbPzEwMDBsXEVbPzI1aCwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtY3VwPVxFN1xFWz80N2gsCisJc21pcj1cRVs0aCwgc21reD0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl2cGE9XEVbJWklcDElZGQsIHVzZT12dDEwMCtlbnEsIHVzZT1yeHZ0K3BjZmtleXMsCisJdXNlPWVjbWErY29sb3IsCisKK0V0ZXJtLTI1NmNvbG9yfEV0ZXJtIHdpdGggeHRlcm0gMjU2LWNvbG9ycywKKwl1c2U9eHRlcm0rMjU2Y29sb3IsIHVzZT1FdGVybSwKKworRXRlcm0tODhjb2xvcnxFdGVybSB3aXRoIDg4IGNvbG9ycywKKwl1c2U9eHRlcm0rODhjb2xvciwgdXNlPUV0ZXJtLAorCisjIEJhc2VkIG9uIHJ4dnQgMi40LjgsIGl0IGhhcyBhIGZldyBkaWZmZXJlbmNlcyBpbiBrZXkgYmluZGluZ3MKK2F0ZXJtfEFmdGVyU3RlcCB0ZXJtaW5hbCwKKwlrYnM9XDE3Nywga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIHVzZT1yeHZ0LAorCisjIHhpdGVybSAgMC41LTUuMgorIyBUaGlzIGlzIG5vdCBiYXNlZCBvbiB4dGVybSdzIHNvdXJjZS4uLgorIyB2dHRlc3Qgc2hvd3Mgc2V2ZXJhbCBwcm9ibGVtcyB3aXRoIGtleWJvYXJkLCBjdXJzb3ItbW92ZW1lbnRzLgorIyBzZWUgYWxzbyBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQveHRlcm0veHRlcm0uZmFxLmh0bWwjYnVnX3hpdGVybQoreGl0ZXJtfGludGVybmF0aW9uYWxpemVkIHRlcm1pbmFsIGVtdWxhdG9yIGZvciBYLAorCWttQCwKKwlrYnM9XDE3Nywga2RjaDE9XEVbM34sIHVzZT1rbG9uZStjb2xvciwgdXNlPXh0ZXJtLXI2LAorCisjIFRoZXNlICh4dGVybWMgYW5kIHh0ZXJtbSkgYXJlIGRpc3RyaWJ1dGVkIHdpdGggU29sYXJpcy4gIFRoZXkgcmVmZXIgdG8gYQorIyB2YXJpYW50IG9mIHh0ZXJtIHdoaWNoIGlzIGFwcGFyZW50bHkgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgYnV0IGFyZSBpbnRlcmVzdGluZworIyBiZWNhdXNlIHRoZXkgaWxsdXN0cmF0ZSBTVnI0IGN1cnNlcyBtb3VzZSBjb250cm9scyAtIFQuRGlja2V5Cit4dGVybW18eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKG1vbm9jcm9tZSksCisJT1RicywgYW0sIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJYnRucyMzLCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbmtALCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVsxRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGVsMT1cRVsxSyQ8Mz4sIGVuYWNzPVxFKEJcRSkwLCBnZXRtPVxFWyVwMSVkWSwKKwlob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFT0QsCisJa2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2VuZD1cRVtZLCBrZjA9XEVPeSwKKwlrZjEwPVxFT1ksIGtmMTE9XEVPWiwga2YxMj1cRU9BLCBrZjU9XEVPVCwga2Y2PVxFT1UsCisJa2Y3PVxFT1YsIGtmOD1cRU9XLCBrZjk9XEVPWCwga2hvbWU9XEVbSCwga21vdXM9XEVbXl8sCisJa25wPVxFW1UsIGtwcD1cRVtWLCByYz1cRTgsIHJlcW1wPVxFWzQ5MlosIHJldj1cRVs3bSwgcmk9XEVNLAorCXJtYWNzPV5PLCBybWN1cD1cRUAwXEVbPzRyLCBybXNvPVxFW20sCisJcnMxPVxFPlxFWzE7Mzs0OzU7NmxcRVs/N2hcRVttXEVbclxFWzJKXEVbSCwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21jdXA9XEVAMFxFWz80c1xFWz80aFxFQDEsCisJc21zbz1cRVs3bSwgdGJjPVxFWzNnLCB1c2U9dnQxMDArZm5rZXlzLAorCit4dGVybWN8eHRlcm0gdGVybWluYWwgZW11bGF0b3IgKGNvbG9yKSwKKwljb2xvcnMjOCwgbmN2IzcsIHBhaXJzIzY0LAorCW9wPVxFWzEwMG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2V0Yj1cRVs0JT8lcDElezF9JT0ldDQlZSVwMSV7M30lPSV0NiVlJXAxJXs0fSU9JXQxJWUlcDElezZ9JT0ldDMlZSVwMSVkJTttLAorCXNldGY9XEVbMyU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwl1c2U9eHRlcm1tLAorCisjIEZyb206IERhdmlkIEouIE1hY0tlbnppZSA8ZGptQHZhLnB1Ym5peC5jb20+IDIwIEFwciAxOTk1CisjIEhlcmUncyBhIHRlcm1jYXAgZW50cnkgSSd2ZSBiZWVuIHVzaW5nIGZvciB4dGVybV9jb2xvciwgd2hpY2ggY29tZXMKKyMgd2l0aCBCU0QvT1MgMi4wLCBhbmQgdGhlIFgxMVI2IGNvbnRyaWIgdGFwZSB0b28gSSB0aGluay4gIEJlc2lkZXMgdGhlCisjIGNvbG9yIHN0dWZmLCBJIGFsc28gaGF2ZSBhIHN0YXR1cyBsaW5lIGRlZmluZWQgYXMgdGhlIHdpbmRvdyBtYW5hZ2VyCisjIHRpdGxlIGJhci4gW0kgaGF2ZSB0cmFuc2xhdGVkIGl0IHRvIHRlcm1pbmZvIC0tIEVTUl0KK3h0ZXJtLXBjb2xvcnx4dGVybSB3aXRoIGNvbG9yIHVzZWQgZm9yIGhpZ2hsaWdodHMgYW5kIHN0YXR1cyBsaW5lLAorCWJvbGQ9XEVbMW1cRVs0M20sIHJldj1cRVs3bVxFWzM0bSwgc21zbz1cRVs3bVxFWzMxbSwKKwlzbXVsPVxFWzRtXEVbNDJtLCB1c2U9eHRlcm0rc2wsIHVzZT14dGVybS1yNiwKKworIyBIUCBzaGlwcyB0aGlzIChIUFVYIDkgYW5kIDEwKSwgZXhjZXB0IGZvciB0aGUgcGIjOTYwMCB3aGljaCB3YXMgbWVyZ2VkIGluCisjIGZyb20gQlNEIHRlcm1jYXAuICAoaHB0ZXJtOiAgYWRkZWQgZW1wdHkgPGFjc2M+LCB3ZSBoYXZlIG5vIGlkZWEgd2hhdCBBQ1MKKyMgY2hhcnMgbG9vayBsaWtlIC0tZXNyKQoraHB0ZXJtfFgtaHB0ZXJtfGhwIFgxMSB0ZXJtaW5hbCBlbXVsYXRvciwKKwlhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzgwLCBsaCMyLCBsaW5lcyMyNCwgbG0jMCwgbHcjOCwgbmxhYiM4LCBwYiM5NjAwLCB4bWMjMCwKKwlhY3NjPSwgYmVsPV5HLCBib2xkPVxFJmRCLCBjYnQ9XEVpLCBjbGVhcj1cRSZhMHkwQ1xFSiwgY3I9Xk0sCisJY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLCBjdXA9XEUmYSVwMSVkeSVwMiVkQywKKwljdXUxPVxFQSwgZGNoMT1cRVAsIGRpbT1cRSZkSCwgZGwxPVxFTSwgZWQ9XEVKJDwxPiwgZWw9XEVLLAorCWhwYT1cRSZhJXAxJWRDLCBodD1eSSwgaHRzPVxFMSwgaWwxPVxFTCwgaW5kPV5KLCBrYnM9XkgsCisJa2Nscj1cRUosIGtjdGFiPVxFMiwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtkY2gxPVxFUCwga2RsMT1cRU0sIGtlZD1cRUosIGtlbD1cRUssIGtmMT1cRXAsCisJa2YyPVxFcSwga2YzPVxFciwga2Y0PVxFcywga2Y1PVxFdCwga2Y2PVxFdSwga2Y3PVxFdiwga2Y4PVxFdywKKwlraG9tZT1cRWgsIGtodHM9XEUxLCBraWNoMT1cRVEsIGtpbDE9XEVMLCBraW5kPVxFUywga2xsPVxFRiwKKwlrbnA9XEVVLCBrcHA9XEVWLCBrcmk9XEVULCBrcm1pcj1cRVIsIGt0YmM9XEUzLCBtZW1sPVxFbCwKKwltZW11PVxFbSwgcGZrZXk9XEUmZiVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGZsb2M9XEUmZjFhJXAxJWRrJXAyJWwlZEwlcDIlcywKKwlwZng9XEUmZjJhJXAxJWRrJXAyJWwlZEwlcDIlcywKKwlwbG49XEUmZiVwMSVkayVwMiVsJWRkMEwlcDIlcywgcmV2PVxFJmRCLCByaT1cRVQsCisJcm1hY3M9Xk8sIHJtaXI9XEVSLCBybWt4PVxFJnMwQSwgcm1sbj1cRSZqQCwgcm1zbz1cRSZkQCwKKwlybXVsPVxFJmRALAorCXNncj1cRSZkJT8lcDcldCV7MTE1fSVjJTslcDElcDMlfCVwNiV8JXsyfSUqJXAyJXs0fSUqJSslcDQlKyVwNSV7OH0lKiUrJXs2NH0lKyVjJT8lcDkldCUnXDAxNiclYyVlJSdcMDE3JyVjJTssCisJc2dyMD1cRSZkQCwgc21hY3M9Xk4sIHNtaXI9XEVRLCBzbWt4PVxFJnMxQSwgc21sbj1cRSZqQiwKKwlzbXNvPVxFJmRKLCBzbXVsPVxFJmRELCB0YmM9XEUzLCB2cGE9XEUmYSVwMSVkWSwKKyMgSFBVWCAxMSBwcm92aWRlcyBhIGNvbG9yIHZlcnNpb24uCitocHRlcm0tY29sb3J8SFAgWDExIHRlcm1pbmFsIGVtdWxhdG9yIHdpdGggY29sb3IsCisJY2NjLAorCWNvbG9ycyM2NCwgcGFpcnMjOCwKKwlob21lPVxFJmEweTBDLAorCWluaXRwPVxFJnYlcDIlZGElcDMlZGIlcDQlZGMlcDUlZHglcDYlZHklcDclZHolcDElZEksCisJb3A9XEUmdjBTLCBzY3A9XEUmdiVwMSVkUywgdXNlPWhwdGVybSwKKworIyBUaGlzIGVudHJ5IGRlc2NyaWJlcyBhbiB4dGVybSB3aXRoIFN1bi1zdHlsZSBmdW5jdGlvbiBrZXlzIGVuYWJsZWQKKyMgdmlhIHRoZSBYIHJlc291cmNlIHNldHRpbmcgInh0ZXJtKnN1bkZ1bmN0aW9uS2V5czp0cnVlIgorIyBUbyB1bmRlcnN0YW5kIDxrZjExPi88a2YxMj4gbm90ZSB0aGF0IEwxLEwyIGFuZCBGMTEsRjEyIGFyZSB0aGUgc2FtZS4KKyMgVGhlIDxrZjEzPi4uLjxrZjIwPiBrZXlzIGFyZSBMMy1MMTAuICBXZSBkb24ndCBzZXQgPGtmMTY9XEVbMTk3ej4KKyMgYmVjYXVzZSB3ZSB3YW50IGl0IHRvIGJlIHNlZW4gYXMgPGtjcHk+LgorIyBUaGUgPGtmMzE+Li4uPGtmNDU+IGtleXMgYXJlIFIxLVIxNS4gIFdlIHRyZWF0IHNvbWUgb2YgdGhlc2UgaW4gYWNjb3JkYW5jZQorIyB3aXRoIHRoZWlyIFN1biBrZXlib2FyZCBsYWJlbHMgaW5zdGVhZC4KKyMgRnJvbTogU2ltb24gSi4gR2VycmF0eSA8c2pnQHplbi52b2lkLm96LmF1PiAxMCBKYW4gMTk5NgoreHRlcm0tc3VufHh0ZXJtIHdpdGggc3VuRnVuY3Rpb25LZXlzIHRydWUsCisJa2IyPVxFWzIxOHosIGtjcHk9XEVbMTk3eiwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwKKwlrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZGNoMT1cRVszeiwga2VuZD1cRVsyMjB6LAorCWtlbnQ9XEVPTSwga2YxPVxFWzIyNHosIGtmMTA9XEVbMjMzeiwga2YxMT1cRVsxOTJ6LAorCWtmMTI9XEVbMTkzeiwga2YxMz1cRVsxOTR6LCBrZjE0PVxFWzE5NXosIGtmMTU9XEVbMTk2eiwKKwlrZjE3PVxFWzE5OHosIGtmMTg9XEVbMTk5eiwga2YxOT1cRVsyMDB6LCBrZjI9XEVbMjI1eiwKKwlrZjIwPVxFWzIwMXosIGtmMz1cRVsyMjZ6LCBrZjMxPVxFWzIwOHosIGtmMzI9XEVbMjA5eiwKKwlrZjMzPVxFWzIxMHosIGtmMzQ9XEVbMjExeiwga2YzNT1cRVsyMTJ6LCBrZjM2PVxFWzIxM3osCisJa2YzOD1cRVsyMTV6LCBrZjQ9XEVbMjI3eiwga2Y0MD1cRVsyMTd6LCBrZjQyPVxFWzIxOXosCisJa2Y0ND1cRVsyMjF6LCBrZjQ1PVxFWzIyMnosIGtmNDY9XEVbMjM0eiwga2Y0Nz1cRVsyMzV6LAorCWtmNT1cRVsyMjh6LCBrZjY9XEVbMjI5eiwga2Y3PVxFWzIzMHosIGtmOD1cRVsyMzF6LAorCWtmOT1cRVsyMzJ6LCBrZm5kPVxFWzIwMHosIGtobHA9XEVbMTk2eiwga2hvbWU9XEVbMjE0eiwKKwlraWNoMT1cRVsyeiwga25wPVxFWzIyMnosIGtwcD1cRVsyMTZ6LCBrdW5kPVxFWzE5NXosCisJdXNlPXh0ZXJtLWJhc2ljLAoreHRlcm1zLXN1bnxzbWFsbCAoODB4MjQpIHh0ZXJtIHdpdGggc3VuRnVuY3Rpb25LZXlzIHRydWUsCisJY29scyM4MCwgbGluZXMjMjQsIHVzZT14dGVybS1zdW4sCisKKyMgVGhpcyBpcyBmb3IgdGhlIGV4dGVuc2libGUgdGVybWluYWwgZW11bGF0b3Igb24gdGhlIFgxMVI2IGNvbnRyaWIgdGFwZS4KKyMgSXQgY29ycmVzcG9uZHMgdG8gZW11J3MgaW50ZXJuYWwgZW11bGF0aW9uOgorIwllbXUgLXRlcm0gZW11CisjIGVtdSdzIGRlZmF1bHQgc2V0cyBURVJNIHRvICJ4dGVybSIsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB3ZWxsIC1URAorIyBmaXhlczogcmVtb3ZlIGJvZ3VzIHJtYWNzL3NtYWNzLCBjaGFuZ2Ugb2MgdG8gb3AsIGFkZCBiY2UsIGFtIC1URAorIyBmaXhlczogYWRkIGNpdmlzLCBjbm9ybSwgc2dyIC1URAorZW11fGVtdSBuYXRpdmUgbW9kZSwKKwlhbSwgYmNlLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xvcnMjMTUsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBwYWlycyM2NCwgdnQjMjAwLAorCWFjc2M9NjFhXDIwMmZcMjYwZzJqXDIxM2tcMjE0bFwyMTVtXDIxNm5cMjE3b1wyMjBxXDIyMnNcMjI0dFwyMjV1XDIyNnZcMjI3d1wyMzB4XDIzMX5cMjQ0LAorCWJlbD1eRywgYmxpbms9XEVXLCBib2xkPVxFVSwgY2l2aXM9XEVaLCBjbGVhcj1cRVBcRUUwOzA7LAorCWNub3JtPVxFYSwgY3I9Xk0sIGNzcj1cRWslcDElZDslcDIlZDssIGN1Yj1cRXEtJXAxJWQ7LAorCWN1YjE9XkgsIGN1ZD1cRXAlcDElZDssIGN1ZDE9XEVCLCBjdWY9XEVxJXAxJWQ7LCBjdWYxPVxFRCwKKwljdXA9XEVFJXAxJWQ7JXAyJWQ7LCBjdXU9XEVwLSVwMSVkOywgY3V1MT1cRUEsCisJZGNoPVxFSSVwMSVkOywgZGNoMT1cRUkxOywgZGw9XEVSJXAxJWQ7LCBkbDE9XEVSMTssCisJZWNoPVxFaiVwMSVkOywgZWQ9XEVOLCBlbD1cRUssIGVsMT1cRUwsIGhvbWU9XEVFMDswOywgaHQ9XkksCisJaHRzPVxFaCwgaWw9XEVRJXAxJWQ7LCBpbDE9XEVRMTssIGluZD1cRUcsCisJaXMyPVxFU1xFcjA7XEVzMDssIGticz1eSCwga2N1YjE9XEVDLCBrY3VkMT1cRUIsIGtjdWYxPVxFRCwKKwlrY3V1MT1cRUEsIGtkY2gxPVwxNzcsIGtlbnQ9Xk0sIGtmMD1cRUYwMCwga2YxPVxFRjAxLAorCWtmMTA9XEVGMTAsIGtmMTE9XEVGMTEsIGtmMTI9XEVGMTIsIGtmMTM9XEVGMTMsIGtmMTQ9XEVGMTQsCisJa2YxNT1cRUYxNSwga2YxNj1cRUYxNiwga2YxNz1cRUYxNywga2YxOD1cRUYxOCwga2YxOT1cRUYxOSwKKwlrZjI9XEVGMDIsIGtmMjA9XEVGMjAsIGtmMz1cRUYwMywga2Y0PVxFRjA0LCBrZjU9XEVGMDUsCisJa2Y2PVxFRjA2LCBrZjc9XEVGMDcsIGtmOD1cRUYwOCwga2Y5PVxFRjA5LCBrZm5kPVxFZmluZCwKKwlraWNoMT1cRWlucywga25wPVxFbmV4dCwga3BwPVxFcHJpb3IsIGtzbHQ9XEVzZWwsCisJb3A9XEVzMDtcRXIwOywgcmV2PVxFVCwgcmk9XEVGLCBybWlyPVxFWCwgcm1zbz1cRVMsIHJtdWw9XEVTLAorCXJzMj1cRVNcRXMwO1xFcjA7LCBzZXRhYj1cRXMlaSVwMSVkOywKKwlzZXRhZj1cRXIlaSVwMSVkOywKKwlzZ3I9XEVTJT8lcDEldFxFVCU7JT8lcDIldFxFViU7JT8lcDMldFxFVCU7JT8lcDQldFxFVyU7JT8lcDYldFxFVSU7LAorCXNncjA9XEVTLCBzbWlyPVxFWSwgc21zbz1cRVQsIHNtdWw9XEVWLCB0YmM9XEVqLAorCisjIHZ0MjIwIFRlcm1pbmZvIGVudHJ5IGZvciB0aGUgRW11IGVtdWxhdGlvbiwgY29ycmVzcG9uZHMgdG8KKyMJZW11IC10ZXJtIHZ0MjIwCisjIHdpdGggTnVtTG9jayBzZXQgKHRvIG1ha2UgdGhlIGtleXBhZCB0cmFuc21pdCBrZjAta2Y5KS4KKyMgZml4ZXM6IGFkZCBhbSwgeGVubCwgY29ycmVjdGVkIHNncjAgLVRECitlbXUtMjIwfEVtdS0yMjAgKHZ0MjAwLTdiaXQgbW9kZSksCisJYW0sIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMjAwLAorCWFjc2M9YWFmZmdnampra2xsbW1ubm9vcXFzc3R0dXV2dnd3eHh+fiwgYmVsPV5HLAorCWJsaW5rPVxFWzA7NW0sIGJvbGQ9XEVbMDsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVsySlxFW0gsIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVsxRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFWzFCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFWzFDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVsxQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFWzFQLCBkbD1cRVslcDElZE0sIGRsMT1cRVsxTSwKKwllZD1cRVswSiwgZWw9XEVbMEssIGVsMT1cRVsxSywgZW5hY3M9XEUpMCwgaG9tZT1cRVtILCBodD1eSSwKKwlodHM9XEVILCBpZj0vdXNyL3NoYXJlL3RhYnNldC92dDMwMCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVsxTCwgaW5kPVxFRCwgaXMyPVxFPlxFWz8xbFxFWz8zbFxFWzRsXEVbPzdoLAorCWticz1eSCwga2NtZD1cRVsyOX4sIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2RjaDE9XEVbM34sIGtlbnQ9XEVPTSwga2YwPVxFT3AsIGtmMT1cRU9xLAorCWtmMTA9XEVPbCwga2YxMT1cRU9tLCBrZjEyPVxFT24sIGtmMTM9XEVPUCwga2YxND1cRU9RLAorCWtmMTU9XEVPUiwga2YxNj1cRU9TLCBrZjI9XEVPciwga2YyNj1cRVsxN34sIGtmMjc9XEVbMTh+LAorCWtmMjg9XEVbMTl+LCBrZjI5PVxFWzIwfiwga2YzPVxFT3MsIGtmMzA9XEVbMjF+LAorCWtmMzQ9XEVbMjZ+LCBrZjM3PVxFWzMxfiwga2YzOD1cRVszMn4sIGtmMzk9XEVbMzN+LAorCWtmND1cRU90LCBrZjQwPVxFWzM0fiwga2Y1PVxFT3UsIGtmNj1cRU92LCBrZjc9XEVPdywKKwlrZjg9XEVPeCwga2Y5PVxFT3ksIGtmbmQ9XEVbMX4sIGtobHA9XEVbMjh+LCBraWNoMT1cRVsyfiwKKwlrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3NsdD1cRVs0fiwgcmM9XEU4LCByZXY9XEVbMDs3bSwKKwlyaT1cRU0sIHJtYWNzPV5PLCBybWN1cD1cRT4sIHJta3g9XEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XEVbNGxcRVszNGxcRVs/MWxcRVs/M2xcRVs/NWxcRVs/N2gsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDsyJTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttLCBzbWFjcz1eTiwgc21jdXA9XEVbPzFsXEU9LCBzbWt4PVxFPSwKKwlzbXNvPVxFWzA7N20sIHNtdWw9XEVbMDs0bSwgdGJjPVxFWzNnLAorIyBBIGNvbW1lcmNpYWwgcHJvZHVjdCwgUmVwb3J0ZWRseSBhIHZlcnNpb24gb2YgWHRlcm0gd2l0aCBhbiBPUEVOIExPT0sgVUksCisjIHByaW50IGludGVyZmFjZSwgQU5TSSBYMy42NCBjb2xvdXIgZXNjYXBlIHNlcXVlbmNlcywgZXRjLiAgTmV3c2dyb3VwIHBvc3RpbmdzCisjIGluZGljYXRlIHRoYXQgaXQgZW11bGF0ZXMgbW9yZSB0aGFuIG9uZSB0ZXJtaW5hbCwgYnV0IGluY29tcGxldGVseS4KKyMKKyMgVGhpcyBpcyBhZGFwdGVkIGZyb20gYSBGcmVlQlNEIGJ1Zy1yZXBvcnQgYnkgRGFuaWVsIFJ1ZHkgPGRjcnVkeUBwYWNiZWxsLm5ldD4KKyMgSXQgaXMgYmFzZWQgb24gdnQxMDIncyBlbnRyeSwgd2l0aCBzb21lIHN1YnRsZSBkaWZmZXJlbmNlcywgYnV0IGFsc28KKyMJaGFzIHN0YXR1cyBsaW5lCisjCXN1cHBvcnRzIEFOU0kgY29sb3JzIChleGNlcHQgZm9yICdvcCcgc3RyaW5nKQorIwlhcHBhcmVudGx5IGltcGxlbWVudHMgYWx0ZXJuYXRlIHNjcmVlbiBsaWtlIHh0ZXJtCisjCWRvZXMgbm90IHVzZSBwYWRkaW5nLCBvZiBjb3Vyc2UuCittdnRlcm18dnYxMDB8U3dpdGNoVGVybSBha2EgbXZURVJNLAorCWFtLCBlc2xvaywgaHMsIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29sb3JzIzgsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBwYWlycyM2NCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZHNsPVxFWz9FLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUskPDM+LCBlbmFjcz1cRShCXEUpMCwKKwlmc2w9XEVbP0YsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjA9XEVPeSwKKwlrZjEwPVxFT3gsIGtmNT1cRU90LCBrZjY9XEVPdSwga2Y3PVxFT3YsIGtmOD1cRU9sLCBrZjk9XEVPdywKKwlvcD1cRVsxMDBtLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywKKwlybWN1cD1cRVsySlxFWz80N2xcRTgsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sCisJcm11bD1cRVttLAorCXJzMj1cRT5cRVsxOzM7NDs1OzZsXEVbPzdoXEVbMTAwbVxFW21cRVtyXEVbMkpcRVtILAorCXNjPVxFNywgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3I9XEVbMCU/JXAxJXA2JXwldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWN1cD1cRTdcRVs/NDdoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisJdHNsPVxFWz9FXEVbPyVpJXAxJWRULCB1c2U9dnQxMDArZm5rZXlzLAorCisjIyMgTVRFUk0KKyMKKyMgVGhpcyBhcHBsaWNhdGlvbiBpcyBhdmFpbGFibGUgYnkgZW1haWwgZnJvbSA8bW91c2VAUm9kZW50cy5Nb250cmVhbC5RQy5DQT4uCisjCisjICJtdGVybSAtdHlwZSBhbnNpIiBzZXRzICRURVJNIHRvICJhbnNpIgorbXRlcm0tYW5zaXxBTlNJIGVtdWxhdGlvbiwKKwlhbSwgYncsIG1pciwgbXNnciwKKwlpdCM4LAorCWFjc2M9YGBhYWZmZ2dpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGltPVxFWzJtLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLAorCWVsPVxFW0ssIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRgLCBodD1eSSwgaWNoMT0sCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFW1MsIGluZG49XEVbJXAxJWRTLAorCWludmlzPVxFWzhtLCBpczI9XEUpMFwwMTcsIGticz1eSCwgbmVsPVxFRSwgcmV2PVxFWzdtLAorCXJpPVxFW1QsIHJpbj1cRVslcDElZFQsIHJtYWNzPV5PLCBybWlyPVxFWzRsLCBybXNvPVxFWzI3bSwKKwlybXVsPVxFWzI0bSwKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttLCBzbWFjcz1eTiwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl2cGE9XEVbJWklcDElZGQsCisjIG10ZXJtIG5vcm1hbGx5IHNldHMgJFRFUk0gdG8gIm10ZXJtIgorbXRlcm18bW91c2Utc3VufERlciBNb3VzZSB0ZXJtLAorCWFtLCBidywgbWlyLAorCWl0IzgsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9Xk4sIGN1ZjE9XlMsCisJY3VwPVwwMDYlcDElZC4lcDIlZC4sIGN1dTE9XlgsIGRjaDE9XlksIGRsMT1eSywgZWQ9XkIsIGVsPV5DLAorCWhvbWU9XlAsIGh0PV5JLCBpbDE9XkEsIGluZD1eVSwga2JzPV5ILCBsbD1eUiwgbmVsPV5NXlUsIHJpPV5XLAorCXJtaXI9Xk8sIHJtc289XlQsIHNtaXI9XlEsIHNtc289XlYsCisjICJtdGVybSAtdHlwZSBkZWNhbnNpIiBzZXRzICRURVJNIHRvICJkZWNhbnNpIgorIworIyBub3RlOiBrZGNoMSwga2ZuZCwga3NsdCBhcmUgaW4gdGhlIHNvdXJjZSBjb2RlLCBidXQgZG8gbm90IHdvcmsgLVRECitkZWNhbnNpfEFOU0kgZW11bGF0aW9uIHdpdGggREVDIGNvbXBhdGliaWxpdHkgaGFja3MsCisJYW0sIG1pciwgbXNnciwgeGVubCwKKwljb2xvcnMjOCwgaXQjOCwgcGFpcnMjNjQsCisJYWNzYz1gYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGVuYWNzPVxFKEJcRSkwLAorCWhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRgLCBodD1eSSwgaWNoMT0sIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPVxFW1MsIGluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs4bSwKKwlpczI9XEUpMFxFW3JcMDE3LCBrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsCisJa2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2RjaDE9XEVbM34sIGtmMT1cRVsxMX4sCisJa2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sCisJa2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sCisJa2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LCBrZjI9XEVbMTJ+LCBrZjIwPVxFWzM0fiwKKwlrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LCBrZjU9XEVbMTV+LCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtmbmQ9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sCisJa3BwPVxFWzV+LCBrc2x0PVxFWzR+LCBuZWw9XEVFLCBvcD1cRVswbSwgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwgcm1hY3M9Xk8sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sIHNjPVxFNywKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW20sIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdTY9XEVbJWklZDslZFIsCisJdTc9XEVbNm4sIHZwYT1cRVslaSVwMSVkZCwKKworIyMjIyBNR1IKKyMKKyMgTUdSIGlzIGEgQmVsbCBMYWJzIHdpbmRvdyBzeXN0ZW0gbGlnaHRlci13ZWlnaHQgdGhhbiBYLgorIyBUaGVzZSBlbnRyaWVzIGRlc2NyaWJlIE1HUidzIHh0ZXJtLWVxdWl2YWxlbnQuCisjIFRoZXkgYXJlIGNvdXJ0ZXN5IG9mIFZpbmNlbnQgQnJvbWFuIDxicm9tYW5Abm9zYy5taWw+IDE0IEphbiAxOTk3CisjCisKK21ncnxCZWxsY29yZSBNR1IgKG5vbiBYKSB3aW5kb3cgc3lzdGVtIHRlcm1pbmFsIGVtdWxhdGlvbiwKKwlhbSwga20sCisJYmVsPV5HLCBib2xkPVxFMm4sIGNpdmlzPVxFOWgsIGNsZWFyPV5MLCBjbm9ybT1cRWgsIGNyPV5NLAorCWNzcj1cRSVwMSVkOyVwMiVkdCwgY3ViMT1eSCwgY3VkMT1cRWYsIGN1ZjE9XEVyLAorCWN1cD1cRSVwMiVkOyVwMSVkTSwgY3V1MT1cRXUsIGN2dmlzPVxFMGgsCisJZGNoPVxFJXAxJWRFJDw1PiwgZGNoMT1cRUUsIGRsPVxFJXAxJWRkJDwzKj4sCisJZGwxPVxFZCQ8Mz4sIGVkPVxFQywgZWw9XEVjLCBoZD1cRTE7MmYsIGh0PV5JLCBodT1cRTE7MnUsCisJaWNoPVxFJXAxJWRBJDw1PiwgaWNoMT1cRUEsIGlsPVxFJXAxJWRhJDwzKj4sCisJaWwxPVxFYSQ8Mz4sIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIG5lbD1eTV5KLCByZXY9XEUxbiwgcm1hbT1cRTVTLAorCXJtc289XEUwbiwgcm11bD1cRTBuLCBzZ3IwPVxFMG4sIHNtYW09XEU1cywgc21zbz1cRTFuLAorCXNtdWw9XEU0biwKK21nci1zdW58TWdyIHdpbmRvdyB3aXRoIFN1biBrZXlib2FyZCwKKwlrYTE9XEVbMjE0eiwga2EzPVxFWzIxNnosIGtiMj1cRVsyMTh6LCBrYzE9XEVbMjIweiwKKwlrYzM9XEVbMjIyeiwga2NweT1cRVsxOTd6LCBrZW5kPVxFWzIyMHosIGtlbnQ9XEVbMjUweiwKKwlrZjE9XEVbMjI0eiwga2YxMD1cRVsyMzN6LCBrZjExPVxFWzIzNHosIGtmMTI9XEVbMjM1eiwKKwlrZjI9XEVbMjI1eiwga2YzPVxFWzIyNnosIGtmND1cRVsyMjd6LCBrZjU9XEVbMjI4eiwKKwlrZjY9XEVbMjI5eiwga2Y3PVxFWzIzMHosIGtmOD1cRVsyMzF6LCBrZjk9XEVbMjMyeiwKKwlrZm5kPVxFWzIwMHosIGtobHA9XEVbMjA3eiwga2hvbWU9XEVbMjE0eiwga25wPVxFWzIyMnosCisJa29wbj1cRVsxOTh6LCBrcHA9XEVbMjE2eiwga3VuZD1cRVsxOTV6LCB1c2U9bWdyLAorbWdyLWxpbnV4fE1nciB3aW5kb3cgd2l0aCBMaW51eCBrZXlib2FyZCwKKwlrYTE9XEVbSCwga2EzPVxFWzV+LCBrYjI9XEVbRywga2MxPVxFW1ksIGtjMz1cRVs2fiwKKwlrZGNoMT1cRVszfiwga2VuZD1cRVs0fiwga2YwPVxFW1tKLCBrZjE9XEVbW0EsIGtmMTA9XEVbMjF+LAorCWtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YyPVxFW1tCLCBrZjM9XEVbW0MsIGtmND1cRVtbRCwKKwlrZjU9XEVbW0UsIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbMX4sIGtucD1cRVs2fiwga3BwPVxFWzV+LCB1c2U9bWdyLAorCisjIyMjIyMjIyBVTklYIFZJUlRVQUwgVEVSTUlOQUxTLCBWSVJUVUFMIENPTlNPTEVTLCBBTkQgVEVMTkVUIENMSUVOVFMKKyMKKworIyBDb2x1bWJ1cyBVTklYIHZpcnR1YWwgdGVybWluYWwuIFRoaXMgdGVybWluYWwgYWxzbyBhcHBlYXJzIGluCisjIFVOSVggNC4wIGFuZCBzdWNjZXNzb3JzIGFzIGxpbmUgZGlzY2lwbGluZSAxICg/KSwgYnV0IGlzCisjIHVuZG9jdW1lbnRlZCBhbmQgZG9lcyBub3QgcmVhbGx5IHdvcmsgcXVpdGUgcmlnaHQuCitjYnVuaXh8Y2IgdW5peCB2aXJ0dWFsIHRlcm1pbmFsLAorCU9UYnMsIGFtLCBkYSwgZGIsCisJY29scyM4MCwgbGluZXMjMjQsIGxtIzAsCisJYmVsPV5HLCBjbGVhcj1cRUwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVHJXAyJWMlcDElYywgY3V1MT1cRUEsIGRjaDE9XEVNLCBkbDE9XEVOLCBlZD1cRUwsCisJZWw9XEVLLCBpY2gxPVxFTywgaWwxPVxFUCwgaW5kPV5KLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2hvbWU9XEVFLCBybXNvPVxFYl5ELCBybXVsPVxFYl5BLAorCXNtc289XEVhXkQsIHNtdWw9XEVhXkEsCisjICh2cmVtb3RlOiByZW1vdmVkIG9ic29sZXRlICI6bmxAOiIgLS0gZXNyKQordnJlbW90ZXx2aXJ0dWFsIHJlbW90ZSB0ZXJtaW5hbCwKKwlhbUAsCisJY29scyM3OSwgdXNlPWNidW5peCwKKworcHR5fDRic2QgcHNldWRvIHRlbGV0eXBlLAorCWN1cD1cRUclcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIHJtc289XEViJCwgcm11bD1cRWIhLAorCXNtc289XEVhJCwgc211bD1cRWEhLCB1c2U9Y2J1bml4LAorCisjIFRoZSBjb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIHRlcm0uZWwgdGVybWluYWwgZW11bGF0aW9uIGluIEdOVSBFbWFjcyAxOS4zMAorZXRlcm18Z251IGVtYWNzIHRlcm0uZWwgdGVybWluYWwgZW11bGF0aW9uLAorCWFtLCBtaXIsIHhlbmwsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgZWwxPVxFWzFLLCBob21lPVxFW0gsIGh0PV5JLCBpY2g9XEVbJXAxJWRALAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgcmV2PVxFWzdtLAorCXJtY3VwPVxFWzJKXEVbPzQ3bFxFOCwgcm1pcj1cRVs0bCwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWN1cD1cRTdcRVs/NDdoLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sCisKKyMgRW50cmllcyBmb3IgdXNlIGJ5IHRoZSBgc2NyZWVuJyBwcm9ncmFtIGJ5IEp1ZXJnZW4gV2VpZ2VydCwKKyMgTWljaGFlbCBTY2hyb2VkZXIsIE9saXZlciBMYXVtYW5uLiAgVGhlIHNjcmVlbiBhbmQKKyMgc2NyZWVuLXcgZW50cmllcyBjYW1lIHdpdGggdmVyc2lvbiAzLjcuMS4gIFRoZSBzY3JlZW4yIGFuZCBzY3JlZW4zIGVudHJpZXMKKyMgY29tZSBmcm9tIFVuaXZlcnNpdHkgb2YgV2lzY29uc2luIGFuZCBtYXkgYmUgb2xkZXIuCisjIChzY3JlZW46IGFkZGVkIDxjbm9ybT4gb24gQU5TSSBtb2RlbCAtLSBlc3IpCisjCisjICdzY3JlZW4nIGRlZmluZXMgZXh0ZW5zaW9ucyB0byB0ZXJtY2FwLiAgU29tZSBhcmUgdXNlZCBpbiBpdHMgdGVybWluYWwKKyMgZGVzY3JpcHRpb246CisjICAgICAgRzAgICAoYm9vbCkgIFRlcm1pbmFsIGNhbiBkZWFsIHdpdGggSVNPIDIwMjIgIGZvbnQgIHNlbGVjdGlvbiBzZXF1ZW5jZXMuCisjICAgICAgQVggICAoYm9vbCkgIERvZXMgIHVuZGVyc3RhbmQgQU5TSSBzZXQgZGVmYXVsdCBmZy9iZyBjb2xvcgorIyAgICAgICAgICAgICAgICAgICAoXEVbMzltIC8gXEVbNDltKS4KKyMgICAgICBTMCAgIChzdHIpICAgU3dpdGNoIGNoYXJzZXQgJ0cwJyB0byB0aGUgc3BlY2lmaWVkIGNoYXJzZXQuCisjICAgICAgRTAgICAoc3RyKSAgIFN3aXRjaCBjaGFyc2V0ICdHMCcgYmFjayB0byBzdGFuZGFyZCBjaGFyc2V0LgorIworIyB0ZXN0ZWQgd2l0aCBzY3JlZW4gMy4wOS4wOAorc2NyZWVufFZUIDEwMC9BTlNJIFgzLjY0IHZpcnR1YWwgdGVybWluYWwsCisJT1RicywgT1RwdCwgYW0sIGttLCBtaXIsIG1zZ3IsIHhlbmwsIEcwLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgcGFpcnMjNjQsCisJYWNzYz0rK1wsXCwtLS4uMDBgYGFhZmZnZ2hoaWlqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWzM0aFxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFTSwKKwljdnZpcz1cRVszNGwsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKEJcRSkwLAorCWZsYXNoPVxFZywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGlzMj1cRSkwLCBrYnM9XkgsIGtjYnQ9XEVbWiwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtkY2gxPVxFWzN+LCBrZW5kPVxFWzR+LCBrZjE9XEVPUCwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbW91cz1cRVtNLCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwluZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1eTywKKwlybWN1cD1cRVs/MTA0OWwsIHJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzIzbSwKKwlybXVsPVxFWzI0bSwgcnMyPVxFY1xFWz8xMDAwbFxFWz8yNWgsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDEldDszJTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21jdXA9XEVbPzEwNDloLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzNtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csIEUwPVxFKEIsCisJUzA9XEUoJXAxJWMsIHVzZT1lY21hK2NvbG9yLAorIyBUaGUgYmNlIGFuZCBzdGF0dXMtbGluZSBlbnRyaWVzIGFyZSBmcm9tIHNjcmVlbiAzLjkuMTMgKGFuZCByZXF1aXJlIHNvbWUKKyMgY2hhbmdlcyB0byAuc2NyZWVucmMpLgorc2NyZWVuLWJjZXxWVCAxMDAvQU5TSSBYMy42NCB2aXJ0dWFsIHRlcm1pbmFsIHdpdGggYmNlLAorCWJjZSwgdXNlPXNjcmVlbiwKK3NjcmVlbi1zfFZUIDEwMC9BTlNJIFgzLjY0IHZpcnR1YWwgdGVybWluYWwgd2l0aCBoYXJkc3RhdHVzIGxpbmUsCisJZHNsPVxFX1xFXFwsIGZzbD1cRVxcLCB0c2w9XEVfLCB1c2U9c2NyZWVuLAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgRW50cmllcyBmb3IgR05VIFNjcmVlbiB3aXRoIDE2IGNvbG9ycy4KKyMgVGhvc2UgdmFyaWF0aW9ucyBwZXJtaXQgdG8gYmVuZWZpdCBmcm9tIDE2IGNvbG9ycyBwYWxldHRlLCBhbmQgZnJvbQorIyBib2xkIGZvbnQgYW5kIGJsaW5rIGF0dHJpYnV0ZSBzZXBhcmF0ZWQgZnJvbSBicmlnaHQgY29sb3JzLiBCdXQgdGhleQorIyBhcmUgbGVzcyBwb3J0YWJsZSB0aGFuIHRoZSBnZW5lcmljICJzY3JlZW4iIDggY29sb3IgZW50cmllczogVGhlaXIKKyMgdXNhZ2UgbWFrZXMgcmVhbCBzZW5zZSBvbmx5IGlmIHRoZSB0ZXJtaW5hbHMgeW91IGF0dGFjaCBhbmQgcmVhdHRhY2gKKyMgZG8gYWxsIHN1cHBvcnQgMTYgY29sb3IgcGFsZXR0ZS4KKworc2NyZWVuLTE2Y29sb3J8R05VIFNjcmVlbiB3aXRoIDE2IGNvbG9ycywKKwl1c2U9aWJtKzE2Y29sb3IsIHVzZT1zY3JlZW4sCisKK3NjcmVlbi0xNmNvbG9yLXN8R05VIFNjcmVlbiB3aXRoIDE2IGNvbG9ycyBhbmQgc3RhdHVzIGxpbmUsCisJdXNlPWlibSsxNmNvbG9yLCB1c2U9c2NyZWVuLXMsCisKK3NjcmVlbi0xNmNvbG9yLWJjZXxHTlUgU2NyZWVuIHdpdGggMTYgY29sb3JzIGFuZCBCQ0UsCisJdXNlPWlibSsxNmNvbG9yLCB1c2U9c2NyZWVuLWJjZSwKKworc2NyZWVuLTE2Y29sb3ItYmNlLXN8R05VIFNjcmVlbiB3aXRoIDE2IGNvbG9ycywgQkNFLCBhbmQgc3RhdHVzIGxpbmUsCisJYmNlLCB1c2U9aWJtKzE2Y29sb3IsIHVzZT1zY3JlZW4tcywKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEVudHJpZXMgZm9yIEdOVSBTY3JlZW4gNC4wMiB3aXRoIC0tZW5hYmxlLWNvbG9yczI1Ni4KKworc2NyZWVuLTI1NmNvbG9yfEdOVSBTY3JlZW4gd2l0aCAyNTYgY29sb3JzLAorCWNjY0AsCisJaW5pdGNALCB1c2U9eHRlcm0rMjU2Y29sb3IsIHVzZT1zY3JlZW4sCisKK3NjcmVlbi0yNTZjb2xvci1zfEdOVSBTY3JlZW4gd2l0aCAyNTYgY29sb3JzIGFuZCBzdGF0dXMgbGluZSwKKwljY2NALAorCWluaXRjQCwgdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9c2NyZWVuLXMsCisKK3NjcmVlbi0yNTZjb2xvci1iY2V8R05VIFNjcmVlbiB3aXRoIDI1NiBjb2xvcnMgYW5kIEJDRSwKKwljY2NALAorCWluaXRjQCwgdXNlPXh0ZXJtKzI1NmNvbG9yLCB1c2U9c2NyZWVuLWJjZSwKKworc2NyZWVuLTI1NmNvbG9yLWJjZS1zfEdOVSBTY3JlZW4gd2l0aCAyNTYgY29sb3JzLCBCQ0UsIGFuZCBzdGF0dXMgbGluZSwKKwliY2UsIGNjY0AsCisJaW5pdGNALCB1c2U9eHRlcm0rMjU2Y29sb3IsIHVzZT1zY3JlZW4tcywKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgUmVhZCB0aGUgZmluZSBtYW5wYWdlOgorIyAgICAgICBXaGVuICBzY3JlZW4gIHRyaWVzICB0byAgZmlndXJlICBvdXQgIGEgIHRlcm1pbmFsIG5hbWUgZm9yCisjICAgICAgIGl0c2VsZiwgaXQgZmlyc3QgbG9va3MgZm9yIGFuIGVudHJ5IG5hbWVkICJzY3JlZW4uPHRlcm0+IiwKKyMgICAgICAgd2hlcmUgIDx0ZXJtPiAgaXMgdGhlIGNvbnRlbnRzIG9mIHlvdXIgJFRFUk0gdmFyaWFibGUuICBJZgorIyAgICAgICBubyBzdWNoIGVudHJ5IGV4aXN0cywgc2NyZWVuIHRyaWVzICJzY3JlZW4iIChvciAic2NyZWVuLXciCisjICAgICAgIGlmIHRoZSB0ZXJtaW5hbCBpcyB3aWRlICgxMzIgY29scyBvciBtb3JlKSkuICBJZiBldmVuIHRoaXMKKyMgICAgICAgZW50cnkgY2Fubm90IGJlIGZvdW5kLCAidnQxMDAiIGlzIHVzZWQgYXMgYSBzdWJzdGl0dXRlLgorIworIyBOb3R3aXRoc3RhbmRpbmcgdGhlIG1hbnBhZ2UsIHNjcmVlbiB1c2VzIGl0cyBvd24gbm90aW9uIG9mIHRoZSB0ZXJtY2FwCisjIGFuZCBzb21lIGtleXMgZnJvbSAic2NyZWVuLjx0ZXJtPiIgYXJlIGlnbm9yZWQuICBIZXJlIGlzIGFuIGVudHJ5IHdoaWNoCisjIGNvdmVycyB0aG9zZSAodGVzdGVkIHdpdGggc2NyZWVuIDQuMDAuMDIpIC1URAorc2NyZWVuK2ZrZXlzfGZ1bmN0aW9uLWtleXMgYWNjb3JkaW5nIHRvIHNjcmVlbiwKKwlrZW5kPVxFWzR+LCBrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2ZuZEAsCisJa2hvbWU9XEVbMX4sIGtzbHRALAorIworIyBIZXJlIGFyZSBhIGZldyBjdXN0b21pemVkIGVudHJpZXMgd2hpY2ggYXJlIHVzZWZ1bCAtVEQKKyMKKyMgTm90ZXM6CisjIChhKQlzY3JlZW4gZG9lcyBub3Qgc3VwcG9ydCBpbnZpcy4KKyMgKGIpCXNjcmVlbidzIGltcGxlbWVudGF0aW9uIG9mIGJ3IGlzIGluY29ycmVjdCBhY2NvcmRpbmcgdG8gdGFjay4KKyMgKGMpCXNjcmVlbiBhcHBlYXJzIHRvIGhhcmRjb2RlIHRoZSBzdHJpbmdzIGZvciBraG9tZS9rZW5kLCBtYWtpbmcgaXQKKyMJbmVjZXNzYXJ5IHRvIG92ZXJyaWRlIHRoZSAidXNlPSIgY2xhdXNlJ3MgdmFsdWVzIChzY3JlZW4rZmtleXMpLgorIyAoZCkJc2NyZWVuIHNldHMgJFRFUk1DQVAgdG8gYSB0ZXJtY2FwLWZvcm1hdHRlZCBjb3B5IG9mIHRoZSAnc2NyZWVuJyBlbnRyeSwKKyMJd2hpY2ggaXMgTk9UIHRoZSBzYW1lIGFzIHRoZSB0ZXJtaW5mbyBzY3JlZW4uPHRlcm0+LgorIyAoZSkJd2hlbiBzY3JlZW4gZmluZHMgb25lIG9mIHRoZXNlIGN1c3RvbWl6ZWQgZW50cmllcywgaXQgc2V0cyAkVEVSTSB0bworIwltYXRjaC4gIEhlbmNlLCBubyAic2NyZWVuLnh0ZXJtIiBlbnRyeSBpcyBwcm92aWRlZCwgc2luY2UgdGhhdCB3b3VsZAorIwljcmVhdGUgaGVhcnRidXJuIGZvciBwZW9wbGUgcnVubmluZyByZW1vdGUgeHRlcm0ncy4KKyMKKyMJeHRlcm0gKC14ZnJlZTg2IG9yIC1yNikgZG9lcyBub3Qgbm9ybWFsbHkgc3VwcG9ydCBrSUMsIGtOWFQgYW5kIGtQUlYKKyMJc2luY2UgdGhlIGRlZmF1bHQgdHJhbnNsYXRpb25zIG92ZXJyaWRlIHRoZSBidWlsdC1pbiBrZXljb2RlCisjCXRyYW5zbGF0aW9uLiAgVGhleSBhcmUgc3VwcHJlc3NlZCBoZXJlIHRvIHNob3cgd2hhdCBpcyB0ZXN0ZWQgYnkgdGFjay4KK3NjcmVlbi54dGVybS14ZnJlZTg2fHNjcmVlbi54dGVybS1uZXd8c2NyZWVuIGN1c3RvbWl6ZWQgZm9yIG1vZGVybiB4dGVybSwKKwliY2VALCBidywKKwlpbnZpc0AsIGtJQ0AsIGtOWFRALCBrUFJWQCwgbWVtbEAsIG1lbXVALAorCXNncj0lPyVwOSV0XEUoMCVlXEUoQiU7XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttLAorCXVzZT1zY3JlZW4rZmtleXMsIHVzZT14dGVybS1uZXcsCisjIHh0ZXJtLXI2IGRvZXMgbm90IHJlYWxseSBzdXBwb3J0IGtob21lL2tlbmQgdW5sZXNzIGl0IGlzIHByb3BwZWQgdXAgYnkKKyMgdGhlIHRyYW5zbGF0aW9ucyByZXNvdXJjZS4KK3NjcmVlbi54dGVybS1yNnxzY3JlZW4gY3VzdG9taXplZCBmb3IgWDExUjYgeHRlcm0sCisJYncsIHVzZT1zY3JlZW4rZmtleXMsIHVzZT14dGVybS1yNiwKKyMgQ29sb3IgYXBwbGljYXRpb25zIHJ1bm5pbmcgaW4gc2NyZWVuIGFuZCBUZXJhVGVybSBkbyBub3QgcGxheSB3ZWxsIHRvZ2V0aGVyCisjIG9uIFNvbGFyaXMgYmVjYXVzZSBTdW4ncyBjdXJzZXMgaW1wbGVtZW50YXRpb24gZ2V0cyBjb25mdXNlZC4KK3NjcmVlbi50ZXJhdGVybXxkaXNhYmxlIG5jdiBpbiB0ZXJhdGVybSwKKwluY3YjMTI3LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGlcMzE2alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cFwzMDRxXDMwNHJcMzA0c190XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzeVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNH5cMzc2LAorCXVzZT1zY3JlZW4rZmtleXMsIHVzZT1zY3JlZW4sCisjIE90aGVyIHRlcm1pbmFscworc2NyZWVuLnJ4dnR8c2NyZWVuIGluIHJ4dnQsCisJYncsCisJY3Z2aXNALCBmbGFzaEAsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwgdXNlPXNjcmVlbitma2V5cywgdXNlPXZ0MTAwK2VucSwKKwl1c2U9cnh2dCtwY2ZrZXlzLCB1c2U9dnQyMjAra2V5cGFkLCB1c2U9c2NyZWVuLAorIyBmaXggdGhlIGJhY2tzcGFjZSBrZXkKK3NjcmVlbi5saW51eHxzY3JlZW4gaW4gbGludXggY29uc29sZSwKKwlidywKKwlrYnM9XDE3Nywga2NidEAsIHVzZT1zY3JlZW4rZmtleXMsIHVzZT1zY3JlZW4sCitzY3JlZW4ubWx0ZXJtfHNjcmVlbiBpbiBtbHRlcm0sCisJdXNlPXNjcmVlbitma2V5cywgdXNlPW1sdGVybSwKKworc2NyZWVuLXd8VlQgMTAwL0FOU0kgWDMuNjQgdmlydHVhbCB0ZXJtaW5hbCB3aXRoIDEzMiBjb2xzLAorCWNvbHMjMTMyLCB1c2U9c2NyZWVuLAorCitzY3JlZW4yfG9sZCBWVCAxMDAvQU5TSSBYMy42NCB2aXJ0dWFsIHRlcm1pbmFsLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNidD1cRVtaLCBjbGVhcj1cRVsySlxFW0gsIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMT0sIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZjA9XEV+LCBrZjE9XEVTLCBrZjI9XEVULCBrZjM9XEVVLCBrZjQ9XEVWLAorCWtmNT1cRVcsIGtmNj1cRVAsIGtmNz1cRVEsIGtmOD1cRVIsIGtmOT1cRTBJLCBraG9tZT1cRUgsCisJbmVsPV5NXkosIHJjPVxFOCwgcmk9XEVNLCBybWlyPVxFWzRsLCBybXNvPVxFWzIzbSwKKwlybXVsPVxFWzI0bSwgcnMxPVxFYywgc2M9XEU3LCBzZ3IwPVxFW20sIHNtaXI9XEVbNGgsCisJc21zbz1cRVszbSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorIyAoc2NyZWVuMzogcmVtb3ZlZCB1bmtub3duICI6eHY6TFA6RzA6IiAtLSBlc3IpCitzY3JlZW4zfG9sZGVyIFZUIDEwMC9BTlNJIFgzLjY0IHZpcnR1YWwgdGVybWluYWwsCisJa20sIG1pciwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0osCisJY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFTSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGlzMj1cRSkwLCBrYnM9XkgsIGtjdWIxPVxFT0QsCisJa2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2YxPVxFT1AsIGtmMj1cRU9RLAorCWtmMz1cRU9SLCBrZjQ9XEVPUywgbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWlyPVxFWzRsLCBybWt4PVxFPiwgcm1zbz1cRVsyM20sIHJtdWw9XEVbMjRtLCByczE9XEVjLAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWlyPVxFWzRoLCBzbWt4PVxFPSwgc21zbz1cRVszbSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csCisKKyMgRnJhbmNlc2NvIFBvdG9ydGkgPEYuUG90b3J0aUBjbnVjZS5jbnIuaXQ+OgorIyBOQ1NBIHRlbG5ldCBpcyBvbmUgb2YgdGhlIG1vc3QgdXNlZCB0ZWxuZXQgY2xpZW50cyBmb3IgdGhlIE1hY2ludG9zaC4gIEl0IGhhcworIyBiZWVuIG1haW50YWluZWQgdW50aWwgcmVjZW50bHkgYnkgdGhlIE5hdGlvbmFsIENlbnRlciBmb3IgU3VwZXJjb21wdXRlcgorIyBBcHBsaWNhdGlvbnMsIGFuZCBpdCBpcyBmZWF0dXJlIHJpY2gsIHN0YWJsZSBhbmQgZnJlZS4gIEl0IGNhbiBiZSBkb3dubG9hZGVkCisjIGZyb20gd3d3Lm5jc2EuZWR1LiAgVGhpcyB0ZXJtaW5mbyBkZXNjcmlwdGlvbiBmaWxlIGlzIGJhc2VkIG9uIHh0ZXJtLXZ0MjIwLAorIyB4dGVybStzbCwgYW5kIHRoZSBkb2NzIGF0IE5DU0EuICBJdCB3b3JrcyB3ZWxsLgorIworIyBOQ1NBIFRlbG5ldCAyLjYgZm9yIE1hY2ludG9zaCBpbiB2dDIyMCA4LWJpdCBlbXVsYXRpb24gbW9kZQorIyBUaGUgdGVybWluYWwgb3B0aW9ucyBzaG91bGQgYmUgc2V0IGFzIGZvbGxvd3M6CisjICAgICAgICAgWHRlcm0gc2VxdWVuY2VzIE9OCisjICAgICAgICAgdXNlIFZUIHdyYXAgbW9kZSBPTgorIyAgICAgICAgIHVzZSBFbWFjcyBhcnJvdyBrZXlzIE9GRgorIyAgICAgICAgIENUUkwtQ09NTkQgaXMgRW1hY3MgbWV0YSBPTgorIyAgICAgICAgIDggYml0IG1vZGUgT04KKyMgICAgICAgICBhbnN3ZXJiYWNrIHN0cmluZzogIm5jc2EtdnQyMjAtOCIKKyMgICAgICAgICBzZXR1cCBrZXlzOiBhbGwgZGlzYWJsZWQKKyMKKyMgQXBwbGljYXRpb24gbW9kZSBpcyBub3QgdXNlZC4KKyMKKyMgT3RoZXIgc3BlY2lhbCBtYXBwaW5nczoKKyMJQXBwbGUJCVZUMjIwCisjCUhFTFAgCQlGaW5kCisjCUhPTUUJCUluc2VydCBoZXJlCisjCVBBR0VVUAkJUmVtb3ZlCisjCURFTAkJU2VsZWN0CisjCUVORAkJUHJldiBTY3JlZW4KKyMJUEFHRURPV04JTmV4dCBTY3JlZW4KKyMKKyMgVGhvdWdoIGl0IHN1cHBvcnRzIEFOU0kgY29sb3IsIE5DU0EgVGVsbmV0IHVzZXMgY29sb3IgdG8gcmVwcmVzZW50IGJsaW5raW5nCisjIHRleHQuCisjCisjIFRoZSBzdGF0dXMtbGluZSBtYW5pcHVsYXRpb24gaXMgYSBtYXBwaW5nIG9mIHRoZSB4dGVybS1jb21wYXRpYmxlIGNvbnRyb2wKKyMgc2VxdWVuY2VzIGZvciBzZXR0aW5nIHRoZSB3aW5kb3ctdGl0bGUuICBTbyB5b3UgbXVzdCB1c2UgdHNsIGFuZCBmc2wgaW4KKyMgcGFpcnMsIHNpbmNlIHRoZSBsYXR0ZXIgZW5kcyB0aGUgc3RyaW5nIHRoYXQgaXMgbG9hZGVkIHRvIHRoZSB3aW5kb3ctdGl0bGUuCituY3NhLW18bmNzYS12dDIyMC04fE5DU0EgVGVsbmV0IDIuNiBmb3IgTWFjaW50b3NoIGluIHZ0MjIwLTggbW9kZSwKKwlhbSwgaHMsIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJYWNzYz1gYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwlkc2w9XEVdMDtcMDA3LCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKTAsCisJZmxhc2g9XEVbPzVoXEVbPzVsLCBmc2w9XkcsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCwgaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxuJDwxNTAqPiwKKwlpczI9XEU3XEVbclxFW21cRVs/N2hcRVs/MTs0OzZsXEVbNGxcRThcRT4sIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzR+LCBrZW5kPVxFWzV+LCBrZjE9XEVbMTd+LCBrZjEwPVxFWzI4fiwKKwlrZjExPVxFWzI5fiwga2YxMj1cRVszMX4sIGtmMTM9XEVbMzJ+LCBrZjE0PVxFWzMzfiwKKwlrZjE1PVxFWzM0fiwga2YyPVxFWzE4LCBrZjM9XEVbMTl+LCBrZjQ9XEVbMjB+LCBrZjU9XEVbMjF+LAorCWtmNj1cRVsyM34sIGtmNz1cRVsyNH4sIGtmOD1cRVsyNX4sIGtmOT1cRVsyNn4sIGtobHA9XEVbMX4sCisJa2hvbWU9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzN+LCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwKKwlyYz1cRTgsIHJldj1cRVs3bSwgcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIHJpPVxFTSwKKwlybWFjcz1cRShCLCBybWFtPVxFWz83bCwgcm1jdXA9XEVbMkpcRTgsIHJtaXI9XEVbNGwsCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRTdcRVtyXEU4XEVbbVxFWz83aFxFWz8xOzQ7NmxcRVs0bFxFPiwgc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDElcDMlfCV0OzclO20lPyVwOSV0XEUoMCVlXEUoQiU7LAorCXNncjA9XEVbbVxFKEIsIHNtYWNzPVxFKDAsIHNtYW09XEVbPzdoLCBzbWN1cD1cRTcsCisJc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLCB0c2w9XEVdMDssCisJdTg9XEVbPzYyOzE7NmMsIHVzZT1hbnNpK2VucSwKK25jc2F8TkNTQSBUZWxuZXQgMi43IGZvciBNYWNpbnRvc2ggaW4gdnQyMjAtOCBtb2RlLAorCXVzZT1uY3NhLW0sIHVzZT1rbG9uZStjb2xvciwKK25jc2EtbnN8TkNTQSBUZWxuZXQgMi43IGZvciBNYWNpbnRvc2ggaW4gdnQyMjAtOCBtb2RlLAorCWhzQCwKKwlkc2xALCBmc2xALCB0c2xALCB1c2U9bmNzYSwKK25jc2EtbS1uc3xOQ1NBIFRlbG5ldCAyLjYgZm9yIE1hY2ludG9zaCBpbiB2dDIyMC04IG1vZGUsCisJaHNALAorCWRzbEAsIGZzbEAsIHRzbEAsIHVzZT1uY3NhLW0sCisjIGFsdGVybmF0ZSAtVEQ6CisjIFRoZSBkb2N1bWVudGVkIGZ1bmN0aW9uLWtleSBtYXBwaW5nIHJlZmVycyB0byB0aGUgQXBwbGUgRXh0ZW5kZWQgS2V5Ym9hcmQKKyMgKGUuZy4sIE5DU0EgVGVsbmV0J3MgRjEgY29ycmVzcG9uZHMgdG8gYSBWVDIyMCBGNikuICBXZSB1c2UgdGhlIFZUMjIwLXN0eWxlCisjIGNvZGVzLCBob3dldmVyLCBzaW5jZSB0aGUgbnVtZXJpYyBrZXlwYWQgKFZUMTAwKSBQRjEtUEY0IGFyZSBhdmFpbGFibGUgb24KKyMgc29tZSBrZXlib2FyZHMgYW5kIG1hbnkgYXBwbGljYXRpb25zIHJlcXVpcmUgdGhlc2UgYXMgRjEtRjQuCisjCituY3NhLXZ0MjIwfE5DU0EgVGVsbmV0IHVzaW5nIHZ0MjIwLWNvbXBhdGlibGUgZnVuY3Rpb24ga2V5cywKKwlrZjE9XEVPUCwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwKKwlrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwKKwlrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LCBrZjI9XEVPUSwKKwlrZjIwPVxFWzM0fiwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIHVzZT1uY3NhLAorCisjIyMjIFBpbG90IFBybyBQYWxtLVRvcAorIworIyBUZXJtY2FwIGZvciBUb3AgR3VuIFRlbG5ldCBhbmQgU1NIIG9uIHRoZSBQYWxtIFBpbG90LgorIyBodHRwOi8vd3d3LmFpL35pYW5nL1RHc3NoLworcGlsb3R8dGd0ZWxuZXR8VG9wIEd1biBUZWxuZXQgb24gdGhlIFBhbG0gUGlsb3QgUHJvZmVzc2lvbmFsLAorCU9UYnMsIGFtLCB4ZW5sLAorCWNvbHMjMzksIGxpbmVzIzE2LAorCWJlbD1eRywgY2xlYXI9XEVjLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdXA9XEVtJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBob21lPVxFbVxzXHMsIGh0PV5JLAorCWluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtucD1eTCwga3BwPV5LLCBuZWw9XEVtflxzLAorCXJtc289XEVCLCBzbXNvPVxFYiwKKworIyBGcm9tOiBGZWRlcmljbyBCaWFuY2hpIDxiaWFuY2hpQHd3dy5hcnRlLnVuaXBpLml0PgorIyBUaGVzZSBlbnRyaWVzIGFyZSBmb3IgdGhlIEVtYmVkZGFibGUgTGludXggS2VybmVsIFN5c3RlbSAoRUxLUykKKyMgcHJvamVjdCAtIGFuIGhlYXZpbHkgc3RyaXBwZWQgZG93biBMaW51eCB0byBiZSBydW4gb24gMTYgYml0CisjIGJveGVzIG9yLCBldmVudHVhbGx5LCB0byBiZSB1c2VkIGluIGVtYmVkZGVkIHN5c3RlbXMgLSBhbmQgaGF2ZSBiZWVuCisjIGFkYXB0ZWQgZnJvbSB0aGUgc3RvY2sgRUxLUyB0ZXJtY2FwLiBUaGUgcHJvamVjdCBpdHNlbGYgbG9va3Mgc3RhbGxlZCwKKyMgYW5kIHRoZSBsYXRlc3QgaW1wcm92ZW1lbnRzIEkga25vdyBvZiBkYXRlIGJhY2sgdG8gTWFyY2ggMjAwMC4KKyMKKyMgVG8gY29wZSB3aXRoIHRoZSBFTEtTIGR1bWIgY29uc29sZSBJIGFkZGVkIGFuICJlbGtzLWdsYXNzdHR5IiBlbnRyeTsKKyMgYXMgYW4gYWRkZWQgYm9udXMsIHRoaXMgZGVhbHMgd2l0aCBhbGwgdGhlIGNhcGFiaWxpdGllcyBjb21tb24gdG8KKyMgYm90aCBWVDUyIGFuZCBBTlNJIChvciwgZXZlbnR1YWxseSwgInNwZWNpYWwiKSBtb2Rlcy4KKworZWxrcy1nbGFzc3R0eXxFTEtTIGdsYXNzLVRUWSBjYXBhYmlsaXRpZXMsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYmVsPV5HLCBjcj1eTSwgaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosCisJbmVsPV5NXkosCisKK2Vsa3MtdnQ1MnxFTEtTIHZ0NTIgY29uc29sZSwKKwljbGVhcj1cRUhcRUosIGN1YjE9XEVELCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGVsPVxFSywKKwlob21lPVxFSCwgdXNlPWVsa3MtZ2xhc3N0dHksCisKK2Vsa3MtYW5zaXxFTEtTIEFOU0kgY29uc29sZSwKKwljbGVhcj1cRVtIXEVbMkosIGN1YjE9XEVbRCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGVsPVxFW0ssIGhvbWU9XEVbSCwKKwlybXNvPVxFW20sIHNtc289XEVbN20sIHVzZT1lbGtzLWdsYXNzdHR5LAorCisjIEFzIGEgbWF0dGVyIG9mIGZhY3QsIEVMS1MgMC4wLjgzIG9uIFBDcyBkZWZhdWx0cyB0byBBTlNJIGVtdWxhdGlvbgorIyBpbnN0ZWFkIG9mIFZUNTIsIGJ1dCB0aGUgImVsa3MiIGVudHJ5IHN0aWxsIHJlZmVycyB0byB0aGUgbGF0dGVyLgorCitlbGtzfGRlZmF1bHQgRUxLUyBjb25zb2xlLAorCXVzZT1lbGtzLXZ0NTIsCisKKyMgUHJvamVjdCBTSUJPIChmb3IgUHNpb24gMyBwYWxtdG9wcykgY29uc29sZSBpcyBpZGVudGljYWwgdG8gdGhlIEVMS1MKKyMgb25lIGJ1dCBpbiBzY3JlZW4gc2l6ZQorCitzaWJvfEVMS1MgU0lCTyBjb25zb2xlLAorCWNvbHMjNjEsIGl0IzgsIGxpbmVzIzIwLCB1c2U9ZWxrcy12dDUyLAorCisjIyMjIyMjIyBDT01NRVJDSUFMIFdPUktTVEFUSU9OIENPTlNPTEVTCisjCisKKyMjIyMgQWxwaGEgY29uc29sZXMKKyMKKworIyBUaGlzIGlzIGZyb20gdGhlIE9TRi8xIFJlbGVhc2UgMS4wIHRlcm1jYXAgZmlsZQorcGNjb25zfHBjY29uc29sZXxBTlNJIChtb3N0bHkpIEFscGhhIFBDIGNvbnNvbGUgdGVybWluYWwgZW11bGF0aW9uLAorCWFtLCB4b24sCisJY29scyM4MCwgbGluZXMjMjUsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVtALCBpbDE9XEVbTCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsCisJbmVsPV5NXkosIHJldj1cRVs3bSwgcm1zbz1cRVttLCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisKKyMjIyMgU3VuIGNvbnNvbGVzCisjCisKKyMgOmlzMTogcmVzZXRzIHNjcm9sbGluZyByZWdpb24gaW4gY2FzZSBhIHByZXZpb3VzIHVzZXIgaGFkIHVzZWQgInRzZXQgdnQxMDAiCitvbGRzdW58U3VuIE1pY3Jvc3lzdGVtcyBXb3Jrc3RhdGlvbiBjb25zb2xlLAorCU9UYnMsIGFtLCBrbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzM0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwKKwlkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGh0PV5JLAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWlzMT1cRVsxciwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2hvbWU9XEVbSCwKKwlybXNvPVxFW20sIHNncjA9XEVbbSwgc21zbz1cRVs3bSwKKyMgRnJvbTogQWxleGFuZGVyIEx1a3lhbm92IDxsYXZAdmlkZW8ueWFycy5mcmVlLm5ldD4sIDE0IE5vdiAxOTk1CisjIDxsaW5lcz4gY2FwYWJpbGl0eSBsYXRlciBjb3JyZWN0ZWQgYnkgSi5ULiBDb25rbGluIDxqdGNAY3lnbnVzLmNvbT4KKyMgU0dSIDEsIDQgYXJlbid0IHN1cHBvcnRlZCAtIHJlbW92ZWQgYm9sZC91bmRlcmxpbmUgKFQuRGlja2V5IDE3IEphbiAxOTk4KQorc3VuLWlsfFN1biBNaWNyb3N5c3RlbXMgY29uc29sZSB3aXRoIHdvcmtpbmcgaW5zZXJ0LWxpbmUsCisJYW0sIGttLCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzM0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsCisJZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBodD1eSSwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlrYjI9XEVbMjE4eiwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtkY2gxPVwxNzcsIGtlbmQ9XEVbMjIweiwga2YxPVxFWzIyNHosCisJa2YxMD1cRVsyMzN6LCBrZjExPVxFWzIzNHosIGtmMTI9XEVbMjM1eiwga2YyPVxFWzIyNXosCisJa2YzPVxFWzIyNnosIGtmND1cRVsyMjd6LCBrZjU9XEVbMjI4eiwga2Y2PVxFWzIyOXosCisJa2Y3PVxFWzIzMHosIGtmOD1cRVsyMzF6LCBrZjk9XEVbMjMyeiwga2hvbWU9XEVbMjE0eiwKKwlrbnA9XEVbMjIyeiwga29wdD1cRVsxOTR6LCBrcHA9XEVbMjE2eiwga3Jlcz1cRVsxOTN6LAorCWt1bmQ9XEVbMTk1eiwgcmV2PVxFWzdtLCBybXNvPVxFW20sIHJtdWxALCByczI9XEVbcywKKwlzZ3I9XEVbMCU/JXAxJXAzJXwldDs3JTttLCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisJdTg9XEVbMXQsIHU5PVxFWzExdCwKKyMgT24gc29tZSB2ZXJzaW9ucyBvZiBDR1NJWCBmcmFtZWJ1ZmZlciBmaXJtd2FyZSAoU3BhcmNTdGF0aW9uIDUpLCA8aWwxPi88aWw+CisjIGZsYWtlIG91dCBvbiB0aGUgbGFzdCBsaW5lLiAgVW5mb3J0dW5hdGVseSwgd2l0aG91dCB0aGVtIHRoZSB0ZXJtaW5hbCBoYXMgbm8KKyMgd2F5IHRvIHNjcm9sbC4KK3N1bi1jZ3NpeHxzdW4tc3M1fFN1biBTcGFyY1N0YXRpb24gNSBjb25zb2xlLAorCWlsQCwgaWwxQCwgdXNlPXN1bi1pbCwKKyMgSWYgeW91IGFyZSB1c2luZyBhbiBTUzUsIGNoYW5nZSB0aGUgc3VuIGRlZmluaXRpb24gdG8gdXNlIHN1bi1zczUuCitzdW58c3VuMXxzdW4yfFN1biBNaWNyb3N5c3RlbXMgSW5jLiB3b3Jrc3RhdGlvbiBjb25zb2xlLAorCXVzZT1zdW4taWwsCisKKyMgRnJvbTogPGpvaG5AdWNicmVub2lyPiAgVHVlIFNlcCAyNCAxMzoxNDo0NCAxOTg1CitzdW4tc3xTdW4gTWljcm9zeXN0ZW1zIFdvcmtzdGF0aW9uIHdpbmRvdyB3aXRoIHN0YXR1cyBsaW5lLAorCWhzLAorCWRzbD1cRV1sXEVcXCwgZnNsPVxFXFwsIHRzbD1cRV1sLCB1c2U9c3VuLAorc3VuLWUtc3xzdW4tcy1lfFN1biBNaWNyb3N5c3RlbXMgV29ya3N0YXRpb24gd2l0aCBzdGF0dXMgaGFja2VkIGZvciBlbWFjcywKKwlocywKKwlkc2w9XEVdbFxFXFwsIGZzbD1cRVxcLCB0c2w9XEVdbCwgdXNlPXN1bi1lLAorc3VuLTQ4fFN1biA0OC1saW5lIHdpbmRvdywKKwljb2xzIzgwLCBsaW5lcyM0OCwgdXNlPXN1biwKK3N1bi0zNHxTdW4gMzQtbGluZSB3aW5kb3csCisJY29scyM4MCwgbGluZXMjMzQsIHVzZT1zdW4sCitzdW4tMjR8U3VuIDI0LWxpbmUgd2luZG93LAorCWNvbHMjODAsIGxpbmVzIzI0LCB1c2U9c3VuLAorc3VuLTE3fFN1biAxNy1saW5lIHdpbmRvdywKKwljb2xzIzgwLCBsaW5lcyMxNywgdXNlPXN1biwKK3N1bi0xMnxTdW4gMTItbGluZSB3aW5kb3csCisJY29scyM4MCwgbGluZXMjMTIsIHVzZT1zdW4sCitzdW4tMXxTdW4gMS1saW5lIHdpbmRvdyBmb3Igc3lzbGluZSwKKwllc2xvaywgaHMsCisJY29scyM4MCwgbGluZXMjMSwKKwlkc2w9XkwsIGZzbD1cRVtLLCB0c2w9Xk0sIHVzZT1zdW4sCitzdW4tZXxzdW4tbmljfHN1bmV8U3VuIE1pY3Jvc3lzdGVtcyBXb3Jrc3RhdGlvbiB3aXRob3V0IGluc2VydCBjaGFyYWN0ZXIsCisJaWNoMUAsIHJtaXJALCBzbWlyQCwgdXNlPXN1biwKK3N1bi1jfHN1bi1jbWR8U3VuIE1pY3Jvc3lzdGVtcyBXb3Jrc3RhdGlvbiBjb25zb2xlIHdpdGggc2Nyb2xsYWJsZSBoaXN0b3J5LAorCWxpbmVzIzM1LAorCXJtY3VwPVxFWz40aCwgc21jdXA9XEVbPjRsLCB1c2U9c3VuLAorc3VuLXR5cGU0fFN1biBXb3Jrc3RhdGlvbiBjb25zb2xlIHdpdGggdHlwZSA0IGtleWJvYXJkLAorCWtjdWIxPVxFWzIxN3osIGtjdWQxPVxFWzIyMXosIGtjdWYxPVxFWzIxOXosCisJa2N1dTE9XEVbMjE1eiwgdXNlPXN1bi1pbCwKKworIyBNb3N0IG9mIHRoZSBjdXJyZW50IHJlZmVyZW5jZXMgdG8gc3VuLWNvbG9yIGFyZSBmcm9tIHVzZXJzIHdvbmRlcmluZyB3aHkgdGhpcworIyBpcyB0aGUgZGVmYXVsdCBvbiBpbnN0YWxsLiAgRGV0YWlscyBmcm9tIHJlYWRpbmcgdGhlIHdzY29ucyBtYW5wYWdlLCBhZGRpbmcKKyMgY3ViLCBldGMuLCBoZXJlIChyYXRoZXIgdGhhbiBpbiB0aGUgYmFzZSBzdW4taWwgZW50cnkpIHNpbmNlIGl0IGlzIG5vdCBjbGVhcgorIyB3aGVuIHRob3NlIHdlcmUgYWRkZWQgLVRECitzdW4tY29sb3J8U3VuIE1pY3Jvc3lzdGVtcyBXb3Jrc3RhdGlvbiBjb25zb2xlIHdpdGggY29sb3Igc3VwcG9ydCAoSUEgc3lzdGVtcyksCisJY29sb3JzIzgsIHBhaXJzIzY0LAorCWN1Yj1cRVslcDElZEQsIGN1ZD1cRVslcDElZEIsIGN1Zj1cRVslcDElZEMsCisJY3V1PVxFWyVwMSVkQSwgaG9tZT1cRVtILCBvcD1cRVttXEVbcCwgc2V0YWI9XEVbNCVwMSVkbSwKKwlzZXRhZj1cRVszJXAxJWRtLAorCXNldGI9XEVbNCU/JXAxJXsxfSU9JXQ0JWUlcDElezN9JT0ldDYlZSVwMSV7NH0lPSV0MSVlJXAxJXs2fSU9JXQzJWUlcDElZCU7bSwKKwlzZXRmPVxFWzMlPyVwMSV7MX0lPSV0NCVlJXAxJXszfSU9JXQ2JWUlcDElezR9JT0ldDElZSVwMSV7Nn0lPSV0MyVlJXAxJWQlO20sCisJdXNlPXN1biwKKworIyMjIyBJcmlzIGNvbnNvbGVzCisjCisKKyMgKHdzaXJpczogdGhpcyBoYWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcworIwk6SFM9XEU3RjI6SEU9XEU3Rjc6XAorIwk6Q1QjMjpDWj0qQmJsYWNrLHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4sKkZ3aGl0ZToKKyMgU2VlIHRoZSBub3RlIG9uIElyaXMgZXh0ZW5zaW9ucyBuZWFyIHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorIyBGaW5hbGx5LCByZW1vdmVkIHN1Ym9wdGltYWwgPGNsZWFyPj1cRUhcRUogYW5kIGFkZGVkIDxjdWQxPiAmCisjIDxmbGFzaD4gZnJvbSBCUkwgLS0gZXNyKQord3NpcmlzfGlyaXM0MHxpcmlzIGVtdWxhdGluZyBhIDQwIGxpbmUgdmlzdWFsIDUwIChhcHByb3hpbWF0ZWx5KSwKKwlPVGJzLCBPVG5jLCBPVHB0LCBhbSwKKwlPVGtuIzMsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzQwLAorCU9Ubmw9XEVCLCBiZWw9XkcsIGNsZWFyPVxFdiwgY25vcm09XEU+LCBjdWIxPV5ILCBjdWQxPVxFQiwKKwljdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsCisJY3Z2aXM9XEU7LCBkaW09XEU3RjIsIGRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLAorCWZsYXNoPVxFN0Y0XEU3QjFcMDEzXEU3RjdcRTdCMCwgaG9tZT1cRUgsIGh0PV5JLCBpbDE9XEVMLAorCWluZD1eSiwgaXMyPVxFN0IwXEU3RjdcRTdDMlxFN1IzLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2YwPVxFMCwga2YxPVxFMSwga2YyPVxFMiwga2YzPVxFMywKKwlrZjQ9XEU0LCBrZjU9XEU1LCBrZjY9XEU2LCBrZjc9XEU3LCBrZjg9XEU4LCBrZjk9XEU5LCByaT1cRUksCisJcm1zbz1cRTBALCBybXVsPVxFN1IzXEUwQCwgc2dyMD1cRTdGNywgc21zbz1cRTlQLAorCXNtdWw9XEU3UjJcRTlQLAorCisjIyMjIE5lV1MgY29uc29sZXMKKyMKKyMgQ29uc29sZSB0ZXJtaW5hbCB3aW5kb3dzIHVuZGVyIHRoZSBOZVdTIChTdW4ncyBEaXNwbGF5IFBvc3RzY3JpcHQgd2luZG93aW5nCisjIGVudmlyb25tZW50KS4gICBOb3RlOiB0aGVzZSBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBTb255J3MgTmV3cyB3b3Jrc3RhdGlvbgorIyBsaW5lLgorIworCisjIEVudHJ5IGZvciBOZVdTJ3MgcHN0ZXJtIGZyb20gRXJpYyBNZXNzaWNrICYgSHVnaCBEYW5pZWwKKyMgKHBzdGVybTogdW5rbm93biAiOnNsPVxFT2w6ZWw9XEVObDoiIHJlbW92ZWQgLS0gZXNyKQorcHN0ZXJtfHBzdGVybS1iYXNpY3xOZVdTIHBzdGVybS04MHgzNCwKKwlPVGJzLCBhbSwgaHMsIGttLCB1bCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzNCwKKwlibGluaz1cRU9iLCBib2xkPVxFT2QsIGNsZWFyPV5MLCBjc3I9XEVFJXAxJWQ7JXAyJWQ7LAorCWN1YjE9XEVULCBjdWQxPVxFUCwgY3VmMT1cRVYsIGN1cD1cRSVwMSVkOyVwMiVkOywgY3V1MT1cRVksCisJZGNoMT1cRUYsIGRsMT1cRUssIGVkPVxFQiwgZWw9XEVDLCBmbGFzaD1cRVosIGZzbD1cRU5sLAorCWhvbWU9XEVSLCBodD1eSSwgaWwxPVxFQSwgaW5kPVxFVywgaXMxPVxFTiosIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwgbGw9XEVVLCByYz1eXCwgcmV2PVxFT3IsCisJcmk9XEVYLCBybWN1cD1cRU50LCBybWlyPVxFTmksIHJtc289XEVObywgcm11bD1cRU51LCBzYz1eXSwKKwlzZ3IwPVxFTiosIHNtY3VwPVxFT3QsIHNtaXI9XEVPaSwgc21zbz1cRU9vLCBzbXVsPVxFT3UsCisJdHNsPVxFT2wsCitwc3Rlcm0tOTZ4NDh8TmVXUyBwc3Rlcm0gOTZ4NDgsCisJY29scyM5NiwgbGluZXMjNDgsIHVzZT1wc3Rlcm0sCitwc3Rlcm0tOTB4Mjh8TmVXUyBwc3Rlcm0gOTB4MjgsCisJY29scyM5MCwgbGluZXMjMjgsIHVzZT1wc3Rlcm0sCitwc3Rlcm0tODB4MjR8TmVXUyBwc3Rlcm0gODB4MjQsCisJY29scyM4MCwgbGluZXMjMjQsIHVzZT1wc3Rlcm0sCisjIFRoaXMgaXMgYSBmYXN0ZXIgdGVybWNhcCBmb3IgcHN0ZXJtLiAgV2FybmluZzogIGlmIHlvdSB1c2UgdGhpcyB0ZXJtY2FwLAorIyBzb21lIGNvbnRyb2wgY2hhcmFjdGVycyB5b3UgdHlwZSB3aWxsIGRvIHN0cmFuZ2UgdGhpbmdzIHRvIHRoZSBzY3JlZW4uCisjIChwc3Rlcm0tZmFzdDogdW5rbm93biAiOnNsPV5PbDplbD1eTmw6IiAtLSBlc3IpCitwc3Rlcm0tZmFzdHxOZVdTIHBzdGVybSBmYXN0IHZlcnNpb24gKGZsYWt5IGN0cmwgY2hhcnMpLAorCU9UYnMsIGFtLCBocywga20sIHVsLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzM0LAorCWJsaW5rPV5PYiwgYm9sZD1eT2QsIGNsZWFyPV5MLCBjc3I9XDAwNSVwMSVkOyVwMiVkOywKKwljdWIxPV5ULCBjdWQxPV5QLCBjdWYxPV5WLCBjdXA9XDAwNCVwMSVkOyVwMiVkOywgY3V1MT1eWSwKKwlkY2gxPV5GLCBkbDE9XkssIGVkPV5CLCBlbD1eQywgZmxhc2g9XlosIGZzbD1eTmwsIGhvbWU9XlIsIGh0PV5JLAorCWlsMT1eQSwgaW5kPV5XLCBpczE9Xk4qLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGxsPV5VLCByYz1eXCwgcmV2PV5Pciwgcmk9XlgsIHJtY3VwPV5OdCwgcm1pcj1eTmksCisJcm1zbz1eTm8sIHJtdWw9Xk51LCBzYz1eXSwgc2dyMD1eTiosIHNtY3VwPV5PdCwgc21pcj1eT2ksCisJc21zbz1eT28sIHNtdWw9Xk91LCB0c2w9Xk9sLAorCisjIyMjIE5lWFQgY29uc29sZXMKKyMKKyMgVXNlIGBnbGFzc3R0eScgZm9yIHRoZSBXb3Jrc3BhY2UgYXBwbGljYXRpb24KKyMKKworIyBGcm9tOiBEYXZlIFdldHplbCA8ZGF2ZUB0dXJib2NhdC5zbmFmdS5kZT4gMjIgRGVjIDE5OTUKK25leHR8TmVYVCBjb25zb2xlLAorCWFtLCB4dCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlbD1cRVtLLCBob21lPVxFW0gsCisJaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLAorCXJtc289XEVbNDsxbSwgc2dyMD1cRVttLCBzbXNvPVxFWzQ7Mm0sCituZXh0c2hlbGx8TmVYVCBTaGVsbCBhcHBsaWNhdGlvbiwKKwlhbSwKKwljb2xzIzgwLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGh0PV5JLCBrYnM9XkgsIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBuZWw9Xk1eSiwKKworIyMjIyBTb255IE5FV1Mgd29ya3N0YXRpb25zCisjCisKKyMgKG5ld3MtdW5rOiB0aGlzIGhhZCA6S0I9bmV3czogLS0gZXNyKQorbmV3cy11bmt8U09OWSBORVdTIHZ0MTAwIGVtdWxhdG9yIGNvbW1vbiBlbnRyeSwKKwlPVGJzLCBPVHB0LCBhbSwgeGVubCwKKwljb2xzIzgwLAorCU9Ubmw9XkosIGJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwKKwljcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwKKwlpczI9XEVbPzdoXEVbPzFsXEVbPzNsXEU3XEU4LCBrYnM9XkgsIGtjdWIxPVxFT0QsCisJa2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2YwPVxFT1ksIGtmMT1cRU9QLAorCWtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9ULCBrZjY9XEVPVSwga2Y3PVxFT1YsCisJa2Y4PVxFT1csIGtmOT1cRU9YLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoXEVbciwgc2M9XEU3LAorCXNncjA9XEVbbSwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisjCisjIChuZXdzLTI5OiB0aGlzIGhhZCA6VFk9YXNjaWk6IC0tZXNyKQorbmV3cy0yOSwKKwlsaW5lcyMyOSwgdXNlPW5ld3MtdW5rLAorIyAobmV3cy0yOS1ldWM6IHRoaXMgaGFkIDpUWT1ldWM6IC0tZXNyKQorbmV3cy0yOS1ldWMsCisJdXNlPW5ld3MtMjksCisjIChuZXdzLTI5LXNqaXM6IHRoaXMgaGFkIDpUWT1zamlzOiAtLWVzcikKK25ld3MtMjktc2ppcywKKwl1c2U9bmV3cy0yOSwKKyMKKyMgKG5ld3MtMzM6IHRoaXMgaGFkIDpUWT1hc2NpaTogLS1lc3IpCituZXdzLTMzLAorCWxpbmVzIzMzLCB1c2U9bmV3cy11bmssCisjIChuZXdzLTMzLWV1YzogdGhpcyBoYWQgOlRZPWV1YzogLS1lc3IpCituZXdzLTMzLWV1YywKKwl1c2U9bmV3cy0zMywKKyMgKG5ld3MtMzMtc2ppczogdGhpcyBoYWQgOlRZPXNqaXM6IC0tZXNyKQorbmV3cy0zMy1zamlzLAorCXVzZT1uZXdzLTMzLAorIworIyAobmV3cy00MjogdGhpcyBoYWQgOlRZPWFzY2lpOiAtLWVzcikKK25ld3MtNDIsCisJbGluZXMjNDIsIHVzZT1uZXdzLXVuaywKKyMgKG5ld3MtNDItZXVjOiB0aGlzIGhhZCA6VFk9ZXVjOiAtLWVzcikKK25ld3MtNDItZXVjLAorCXVzZT1uZXdzLTQyLAorIyAobmV3cy00Mi1zamlzOiB0aGlzIGhhZCA6VFk9c2ppczogLS1lc3IpCituZXdzLTQyLXNqaXMsCisJdXNlPW5ld3MtNDIsCisjCisjCU5FV1MtT1Mgb2xkIHRlcm1jYXAgZW50cnkKKyMKKyMgKG5ld3Mtb2xkLXVuazogdGhpcyBoYWQgOktCPW5ld3M6VFk9c2ppczogLS1lc3IpCituZXdzLW9sZC11bmt8U09OWSBORVdTIHZ0MTAwIGVtdWxhdG9yIGNvbW1vbiBlbnRyeSwKKwlPVGJzLCBPVHB0LCBhbSwgeGVubCwKKwljb2xzIzgwLCB2dCMzLAorCU9Ubmw9XkosIGJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFWztIXEVbMkosCisJY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgaHQ9XkksIGlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCBrYnM9XkgsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2YxPVxFT1AsCisJa2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncjA9XEVbbSwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisjCisjIChud3A1MTI6IHRoaXMgaGFkIDpERT1eSDosIHdoaWNoIEkgdGhpbmsgbWVhbnMgPE9UYnM+IC0tZXNyKQorbndwNTEyfG5ld3N8bndwNTE0fG5ld3M0MHx2dDEwMC1ibXxvbGQgc29ueSB2dDEwMCBlbXVsYXRvciA0MCBsaW5lcywKKwlPVGJzLAorCWxpbmVzIzQwLAorCWlzMj1cRTdcRVtyXEU4XEVFXEVFXEVFXEVNXEVNXEVNXEVbPzdoXEVbPzFsXEVbPzNsXEU3XEVbMTs0MHJcRTgsCisJdXNlPW5ld3Mtb2xkLXVuaywKKyMKKyMgKG53cDUxMi1hOiB0aGlzIGhhZCA6VFk9YXNjaWk6IGFuZCB0aGUgYWxpYXMgdnQxMDAtYm0gLS1lc3IpCitud3A1MTItYXxud3A1MTQtYXxuZXdzLWF8bmV3czQyfG5ld3M0MC1hfHNvbnkgdnQxMDAgZW11bGF0b3IgNDIgbGluZSwKKwlsaW5lcyM0MiwKKwlpczI9XEVbPzdoXEVbPzFsXEVbPzNsXEU3XEVbMTs0MnJcRTgsCisJdXNlPW5ld3Mtb2xkLXVuaywKKyMKKyMgKG53cC01MTItbzogdGhpcyBoYWQgOktCPW53cDQxMDpERT1eSDogIEkgaW50ZXJwcmV0IHRoZSBsYXR0ZXIgYXMgPE9UYnM+LiAtLWVzcikKK253cDUxMi1vfG53cDUxNC1vfG5ld3Mtb3xuZXdzNDAtb3x2dDEwMC1ibS1vfHNvbnkgdnQxMDAgZW11bGF0b3IgNDAgbGluZXMsCisJT1RicywKKwlsaW5lcyM0MCwKKwlpczI9XEU3XEVbclxFOFxFRVxFRVxFRVxFTVxFTVxFTVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7NDByXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChud3A1MTM6IHRoaXMgaGFkIDpERT1eSDogYW5kIHRoZSBhbGlhcyB2dDEwMC1ibSAtLWVzcikKK253cDUxM3xud3A1MTh8bndlNTAxfG5ld3NjYm18bmV3czMxfHNvbnkgdnQxMDAgZW11bGF0b3IgMzMgbGluZXMsCisJT1RicywKKwlsaW5lcyMzMSwKKwlpczI9XEU3XEVbclxFOFxFRVxFRVxFRVxFTVxFTVxFTVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7MzFyXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChud3A1MTMtYTogdGhpcyBoYWQgOlRZPWFzY2lpOiBhbmQgOkRFPV5IOiwgd2hpY2ggSSBpbnRlcnByZXQgYXMgPE9UYnM+OyAtLWVzcikKKyMgYWxzbyB0aGUgYWxpYXMgdnQxMDAtYm0uCitud3A1MTMtYXxud3A1MTgtYXxud2U1MDEtYXxud3AyNTEtYXxuZXdzY2JtLWF8bmV3czMxLWF8bmV3c2NibTMzfG5ld3MzM3xvbGQgc29ueSB2dDEwMCBlbXVsYXRvciAzMyBsaW5lcywKKwlPVGJzLAorCWxpbmVzIzMzLAorCWlzMj1cRTdcRVtyXEU4XEVFXEVFXEVFXEVNXEVNXEVNXEVbPzdoXEVbPzFsXEVbPzNsXEU3XEVbMTszM3JcRTgsCisJdXNlPW5ld3Mtb2xkLXVuaywKKyMKKyMgKG53cDUxMy1vOiBoYWQgOkRFPV5IOiwgSSB0aGluayB0aGF0J3MgPE9UYnM+OyBhbHNvIHRoZSBhbGlhcyB2dDEwMC1ibSAtLWVzcikKK253cDUxMy1vfG53cDUxOC1vfG53ZTUwMS1vfG53cDI1MS1vfG5ld3NjYm0tb3xuZXdzMzEtb3xvbGQgc29ueSB2dDEwMCBlbXVsYXRvciAzMyBsaW5lcywKKwlPVGJzLAorCWxpbmVzIzMxLAorCWlzMj1cRTdcRVtyXEU4XEVFXEVFXEVFXEVNXEVNXEVNXEVbPzdoXEVbPzFsXEVbPzNsXEU3XEVbMTszMXJcRTgsCisJdXNlPW5ld3Mtb2xkLXVuaywKKyMKKyMgKG5ld3MyODogdGhpcyBoYWQgOkRFPV5IOiwgSSB0aGluayB0aGF0J3MgPE9UYnM+LCBhbmQgOktCPW53czEyMDA6IC0tZXNyKQorbmV3czI4fHNvbnkgdnQxMDAgZW11bGF0b3IgMjggbGluZXMsCisJT1RicywKKwlsaW5lcyMyOCwKKwlpczI9XEU3XEVbclxFOFxFRVxFRVxFRVxFTVxFTVxFTVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7MjhyXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChuZXdzMjk6IHRoaXMgaGFkIDpUWT1hc2NpaTpLQj1ud3MxMjAwOlwgLS1lc3IpCituZXdzMjl8bmV3czI4LWF8c29ueSB2dDEwMCBlbXVsYXRvciAyOSBsaW5lcywKKwlsaW5lcyMyOSwKKwlpczI9XEU3XEVbclxFOFxFRVxFRVxFRVxFTVxFTVxFTVxFWz83aFxFWz8xbFxFWz8zbFxFN1xFWzE7MjlyXEU4LAorCXVzZT1uZXdzLW9sZC11bmssCisjCisjIChuZXdzNTExOiB0aGlzIGhhZCA6VFk9c2ppczogLS1lc3IpCitud3A1MTF8bndwLTUxMXxud3AtNTExIHZ0MTAwLAorCU9UYnMsIE9UcHQsIGFtLCB4ZW5sLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFWztIXEVbMkokPDIwLz4sIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSQ8Mi8+LCBkbDE9XEVbTSwKKwllZD1cRVtKJDwzMC8+LCBlbD1cRVtLJDwzLz4sCisJZmxhc2g9XEVbPzVoXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcRVs/NWwsCisJaWwxPVxFW0wsIGlzMj1cRVs/NWxcRVs/MWxcRT5cRVs/N2hcRVs/OGgsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFT1AsIGtmMj1cRU9RLAorCWtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFT1QsIGtmNj1cRSNXLCBraG9tZT1cRVtILAorCXJpPVxFTSQ8NS8+LCBybXNvPVxFW20kPDIvPiwgcm11bD1cRVttJDwyLz4sCisJcnMyPVxFN1xFW3JcRThcRVs/NWxcRVs/MWxcRT5cRVs/N2hcRVs/OGgsCisJc21zbz1cRVs3bSQ8Mi8+LCBzbXVsPVxFWzRtJDwyLz4sCisjIChuZXdzNTE3OiB0aGlzIGhhZCA6VFk9c2ppczouIC0tZXNyKQorbndwNTE3fG53cC01MTd8bndwLTUxNyB2dDIwMCA4MCBjb2xzIDMwIHJvd3MsCisJZXNsb2ssIGhzLAorCWNvbHMjODAsIGxpbmVzIzMwLAorCU9UaTI9XEVbMiR+XG4sIGRzbD1cRVsxJH4sIGZzbD1cRVswJH0sCisJaXMyPVxFN1xFW3JcRThcRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJdHNsPVxFWzEkfVxFWzslZGYsIHVzZT12dDIwMCwKKyMgKG5ld3M1MTctdzogdGhpcyBoYWQgOlRZPXNqaXM6LiAtLWVzcikKK253cDUxNy13fG53cC01MTctd3xud3AtNTE3IHZ0MjAwIDEzMiBjb2xzIDUwIHJvd3MsCisJZXNsb2ssIGhzLAorCWNvbHMjMTMyLCBsaW5lcyM1MCwKKwlPVGkyPVxFWzIkflxuLCBkc2w9XEVbMSR+LCBmc2w9XEVbMCR9LAorCWlzMj1cRTdcRVtyXEU4XEU+XEVbPzNoXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJdHNsPVxFWzEkfVxFWzslZGYsIHVzZT12dDIwMCwKKworIyMjIyBDb21tb24gRGVza3RvcCBFbnZpcm9ubWVudAorIworCisjIFRoaXMgc2hpcHMgd2l0aCBTdW4ncyBDREUgaW4gU29sYXJpcyAyLjUKKyMgQ29ycmVjdGVkIFN1biBBdWcgOSAxOTk4IGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QHZpZGVvLnlhcnMuZnJlZS5uZXQ+CitkdHRlcm18Q0RFIGRlc2t0b3AgdGVybWluYWwsCisJYW0sIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBsbSMwLCBuY3ZALAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZW5hY3M9XEUoQlxFKTAsIGZsYXNoPVxFWz81aCQ8MjAwPlxFWz81bCwgaG9tZT1cRVtILAorCWh0PV5JLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLAorCWluZD1cRUQsIGludmlzPVxFWzhtLCBpczI9XEUgRlxFPlxFWz8xbFxFWz83aFxFWz80NWwsCisJa2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzN+LCBrZjE9XEVbMTF+LCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sCisJa2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwga2YxOT1cRVszM34sCisJa2YyPVxFWzEyfiwga2YyMD1cRVszNH4sIGtmMz1cRVsxM34sIGtmND1cRVsxNH4sCisJa2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWtzbHQ9XEVbNH4sIG5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLAorCXJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybXNvPVxFWzIyOzI3bSwgcm11bD1cRVsyNG0sCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDEldDsyOzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzI7N20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywgdXNlPWVjbWErY29sb3IsCisKKyMjIyMgTm9uLVVuaXggQ29uc29sZXMKKyMKKworIyMjIEVNWCB0ZXJtY2FwLmRhdCBjb21wYXRpYmlsaXR5IG1vZGVzCisjCisjIEtleXBhZDoJSG9tZT1cMEcJVXA9XDBICVByUGFnPVwwSQorIwkJa2ExLGtoCQlrY3V1MQkJa3BwLGthMworIworIwkJTGVmdD1cMEsJNT1cMEwJCVJpZ2h0PVwwTQorIwkJa2N1YjEJCWtiMgkJa2N1ZjEKKyMKKyMJCUVuZD1cME8JCURvd249XDBQCU54UGFnPVwwUQorIwkJa2MxLGtlbmQJa2N1ZDEJCWtjMyxrbnAKKyMKKyMJCUlucz1cMFIJCURlbD1cMFMKKyMJCWtpY2gxCQlrZGNoMQorIworIyBPbiBrZXlib2FyZCB3aXRoIDEyIGZ1bmN0aW9uIGtleXMsCisjCXNoaWZ0ZWQgZi1rZXlzOiBGMTMtRjI0CisjCWNvbnRyb2wgZi1rZXlzOiBGMjUtRjM2CisjCWFsdCBmLWtleXM6ICAgICBGMzctRjQ4CisjIFRoZSBzaGlmdC9jb250cm9sL2FsdCBrZXlzIGRvIG5vdCBtb2RpZnkgZWFjaCBvdGhlciwgYnV0IGFsdCBvdmVycmlkZXMgYm90aCwKKyMgYW5kIGNvbnRyb2wgb3ZlcnJpZGVzIHNoaWZ0LgorIworIyBBbHNvIChwb3NzaWJseSBvbmx5IEVNWCwgc28gd2UgZG9uJ3QgcHV0IGl0IGluIGFuc2kuc3lzLCBldGMpOiBzZXQgdGhlCisjIG5vX2NvbG9yX3ZpZGVvIHRvIGluZm9ybSB0aGUgYXBwbGljYXRpb24gdGhhdCBzdGFuZG91dCgxKSwgdW5kZXJsaW5lKDIpCisjIHJldmVyc2UoNCkgYW5kIGludmlzaWJsZSg2NCkgZG9uJ3Qgd29yayB3aXRoIGNvbG9yLgorZW14LWJhc2V8RE9TIHNwZWNpYWwga2V5cywKKwliY2UsIGJ3LAorCWl0IzgsIG5jdiM3MSwKKwliZWw9XkcsIGthMT1cMEcsIGthMz1cMEksIGtiMj1cMEwsIGticz1eSCwga2MxPVwwTywga2MzPVwwUSwKKwlrY2J0PVwwXk8sIGtjdWIxPVwwSywga2N1ZDE9XDBQLCBrY3VmMT1cME0sIGtjdXUxPVwwSCwKKwlrZGNoMT1cMFMsIGtlbmQ9XDBPLCBrZjE9XDA7LCBrZjEwPVwwRCwga2YxMT1cMFwyMDUsCisJa2YxMj1cMFwyMDYsIGtmMTM9XDBULCBrZjE0PVwwVSwga2YxNT1cMFYsIGtmMTY9XDBXLAorCWtmMTc9XDBYLCBrZjE4PVwwWSwga2YxOT1cMFosIGtmMj1cMDwsIGtmMjA9XDBbLCBrZjIxPVwwXFwsCisJa2YyMj1cMF0sIGtmMjM9XDBcMjA3LCBrZjI0PVwwXDIxMCwga2YyNT1cMFxeLCBrZjI2PVwwXywKKwlrZjI3PVwwYCwga2YyOD1cMGEsIGtmMjk9XDBiLCBrZjM9XDA9LCBrZjMwPVwwYywga2YzMT1cMGQsCisJa2YzMj1cMGUsIGtmMzM9XDBmLCBrZjM0PVwwZywga2YzNT1cMFwyMTEsIGtmMzY9XDBcMjEyLAorCWtmMzc9XDBoLCBrZjM4PVwwaSwga2YzOT1cMGosIGtmND1cMD4sIGtmNDA9XDBrLCBrZjQxPVwwbCwKKwlrZjQyPVwwbSwga2Y0Mz1cMG4sIGtmNDQ9XDBvLCBrZjQ1PVwwcCwga2Y0Nj1cMHEsCisJa2Y0Nz1cMFwyMTMsIGtmNDg9XDBcMjE0LCBrZjU9XDA/LCBrZjY9XDBALCBrZjc9XDBBLCBrZjg9XDBCLAorCWtmOT1cMEMsIGtob21lPVwwRywga2ljaDE9XDBSLCBrbnA9XDBRLCBrcHA9XDBJLAorCXVzZT1hbnNpLnN5cywKKworIyBFeGNlcHQgZm9yIHRoZSAiLWVteCIgc3VmZml4ZXMsIHRoZXNlIGFyZSBhcyBkaXN0cmlidXRlZCB3aXRoIEVNWCAwLjliLAorIyBhIFVuaXgtc3R5bGUgZW52aXJvbm1lbnQgdXNlZCBvbiBPUy8yLiAgKE5vdGUgdGhhdCB0aGUgc3VmZml4IG1ha2VzIHNvbWUKKyMgbmFtZXMgbG9uZ2VyIHRoYW4gMTQgY2hhcmFjdGVycywgdGhlIG5vbWluYWwgbWF4aW11bSkuCisjCisjIFJlbW92ZWQ6IHJtYWNzPVxFWzEwbSwgc21hY3M9XEVbMTFtLCBiZWNhdXNlIE9TLzIgZG9lcyBub3QgaW1wbGVtZW50IGFjcy4KK2Fuc2ktZW14fEFOU0kuU1lTIGNvbG9yLAorCWFtLCBiY2UsIGVvLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjUsIHBhaXJzIzY0LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbMTszMzs0NG1cRVtIXEVbSiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRwLCBlZD1cRVtKLCBlbD1cRVtLLCBmbGFzaD1cRVs/NWhcRVs/NWwsCisJaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbmQ9XkosCisJa2IyPVxFW0csIGticz1eSCwga2YwPVwwRCwga2xsPVwwTywga3NwZD1eWiwgbmVsPV5NXkosCisJcmV2PVxFWzU7Mzc7NDFtLCBybWlyPVxFWzRsLCBybXBjaD1cRVsxMG0sCisJcm1zbz1cRVswOzQ0bVxFWzE7MzNtLCBybXVsPVxFWzA7NDRtXEVbMTszM20sIHJzMT1cRWMsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3IwPVxFWzBtXEVbMTszMzs0NG0sIHNtaXI9XEVbNGgsIHNtcGNoPVxFWzExbSwKKwlzbXNvPVxFWzA7MzE7NDdtLCBzbXVsPVxFWzE7MzE7NDRtLCB0YmM9XEVbM2csIHU4PVxFWz82YywKKwl1OT1cRVtjLCB1c2U9ZW14LWJhc2UsCisjIG5pY2UgY29sb3JzIGZvciBFbWFjcyAod2hpdGUgb24gYmx1ZSwgbW9kZSBsaW5lIHdoaXRlIG9uIGN5YW4pCithbnNpLWNvbG9yLTItZW14fEFOU0kuU1lTIGNvbG9yIDIsCisJY2xlYXI9XEVbMDszNzs0NG1cRVtIXEVbSiwgcmV2PVxFWzE7Mzc7NDZtLAorCXJtc289XEVbMDszNzs0NG0sIHJtdWw9XEVbMDszNzs0NG0sIHJzMT1cRWMsCisJc2V0YWY9XEVbMyVwMSVkbSwgc2dyMD1cRVswOzM3OzQ0bSwgc21zbz1cRVsxOzM3OzQ2bSwKKwlzbXVsPVxFWzE7MzY7NDRtLCB1c2U9YW5zaS1lbXgsCisjIG5pY2UgY29sb3JzIGZvciBFbWFjcyAod2hpdGUgb24gYmxhY2ssIG1vZGUgbGluZSBibGFjayBvbiBjeWFuKQorYW5zaS1jb2xvci0zLWVteHxBTlNJLlNZUyBjb2xvciAzLAorCWNsZWFyPVxFWzA7Mzc7NDBtXEVbSFxFW0osIHJldj1cRVsxOzM3OzQ2bSwKKwlybXNvPVxFWzA7Mzc7NDBtLCBybXVsPVxFWzA7Mzc7NDBtLCByczE9XEVjLAorCXNldGFmPVxFWzMlcDElZG0sIHNncjA9XEVbMDsxMG0sIHNtc289XEVbMTszNzs0Nm0sCisJc211bD1cRVswOzM2OzQwbSwgdXNlPWFuc2ktZW14LAorbW9uby1lbXh8c3R1cGlkIG1vbm9jaHJvbWUgYW5zaSB0ZXJtaW5hbCB3aXRoIG9ubHkgb25lIGtpbmQgb2YgZW1waGFzaXMsCisJYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XEVbSFxFWzJKJDw1MD4sIGN1YjE9XEVbRCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGVsPVxFW0ssIGhvbWU9XEVbSCwKKwlodD1eSSwga2IyPVxFW0csIGticz1eSCwga2N1YjE9XDBLLCBrY3VkMT1cMFAsIGtjdWYxPVwwTSwKKwlrY3V1MT1cMEgsIGtmMD1cMEQsIGtmMT1cMDssIGtmMj1cMDwsIGtmMz1cMD0sIGtmND1cMD4sCisJa2Y1PVwwPywga2Y2PVwwQCwga2Y3PVwwQSwga2Y4PVwwQiwga2Y5PVwwQywga2hvbWU9XDBHLAorCWtpY2gxPVwwUiwga2xsPVwwTywga25wPVwwUSwga3BwPVwwSSwgbmVsPV5NXkosIHJldj1cRVs3bSwKKwlzZ3IwPVxFWzBtLAorCisjIFVzZSB0aGlzIGZvciBjeWd3aW4zMiAodGVzdGVkIHdpdGggYmV0YSAxOS4xKQorIyB1bmRlcmxpbmUgaXMgY29sb3JlZCBicmlnaHQgbWFnZW50YQorIyBzaGlmdGVkIGtmMS1rZjEyIGFyZSBrZjExLWtmMjIKK2N5Z3dpbkIxOXxhbnNpIGVtdWxhdGlvbiBmb3IgY3lnd2luMzIsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVszfiwga2VuZD1cRVs0fiwga2YxPVxFW1tBLCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwKKwlrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwKKwlrZjE5PVxFWzMzfiwga2YyPVxFW1tCLCBrZjIwPVxFWzM0fiwga2YzPVxFW1tDLCBrZjQ9XEVbW0QsCisJa2Y1PVxFW1tFLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIHJtYW1ALCBzbWFtQCwKKwl1c2U9YW5zaS5zeXMsCisKKyMgVXNlIHRoaXMgZm9yIGN5Z3dpbiAodGVzdGVkIHdpdGggdmVyc2lvbiAxLjEuMCkuCisjIEkndmUgY29tYmluZWQgcGNhbnNpIGFuZCBsaW51eC4gIFNvbWUgdmFsdWVzIG9mIGNvdXJzZSB3ZXJlIGRpZmZlcmVudCBhbmQKKyMgSSd2ZSBpbmRpY2F0ZWQgd2hpY2ggb2YgdGhlc2Ugd2VyZSBhbmQgd2hpY2ggSSB1c2VkLgorIyBDaGVlcnMsIGVhcm5pZV9ib3lkQHlhaG9vLmNvbQorIyBzZXZlcmFsIGNoYW5nZXMgYmFzZWQgb24gcnVubmluZyB3aXRoIHRhY2sgYW5kIGNvbXBhcmluZyB3aXRoIG9sZGVyIGVudHJ5IC1URAorIyBtb3JlIGNoYW5nZXMgZnJvbSBjc3c6CisjICAgYWRkICAgIGNidCAgIFtiYWNrdGFiXQorIyAgIHJlbW92ZSBlbyAgICBbZXJhc2Ugb3ZlcnN0cmlrZSB3aXRoIGJsYW5rXQorIyAgIGNoYW5nZSBjbGVhciB3YXMgXEVbSFxFW0ogIG5vdyBcRVsySiAgKGZhc3Rlcj8pCisjICAgcmVtb3ZlIGNvbHMKKyMgICByZW1vdmUgbGluZXMKKyMgICByZW1vdmUgbmN2IzMgW2NvbG9ycyBjb2xsaWRlIHdpdGggaGlnaGxpZ2h0cywgYml0bWFza10gbm90IGFwcGxpY2FibGUKKyMgICAgICAgICAgICAgICAgdG8gTVNET1MgYm94PworIyAgIGFkZCAgICBjdWIgICBbY3Vyc29yIGJhY2sgcGFyYW1dCisjICAgYWRkICAgIGN1ZiAgIFtjdXJzb3IgZm9yd2FyZCBwYXJhbV0KKyMgICBhZGQgICAgY3V1ICAgW2N1cnNvciB1cCBwYXJhbV0KKyMgICBhZGQgICAgY3VkICAgW2N1cnNvciBkb3duIHBhcmFtXQorIyAgIGFkZCAgICBocyAgICBbaGFzIHN0YXR1cyBsaW5lXQorIyAgIGFkZCAgICBmc2wgICBbcmV0dXJuIGZyb20gc3RhdHVzIGxpbmVdCisjICAgYWRkICAgIHRzbCAgIFtnbyB0byBzdGF0dXMgbGluZV0KKyMgICBhZGQgICAgc21hY3MgW1N0YXJ0IGFsdCBjaGFyc2V0XSAobm90IHN1cmUgaWYgdGhpcyB3b3JrcykKKyMgICBhZGQgICAgcm1hY3MgW0VuZCBhbHQgY2hhcnNldF0gICAoZGl0dG8pCisjICAgYWRkICAgIHNtY3VwIFtlbnRlcl9jYV9tb2RlXSAoc2F2ZSBjb25zb2xlOyB0aGFua3MgQ29yaW5uYSkKKyMgICBhZGQgICAgcm1jdXAgW2V4aXRfY2FfbW9kZV0gIChyZXN0b3JlIGNvbnNvbGU7IHRoYW5rcyBDb3Jpbm5hKQorIyAgIGFkZCAgICBrYjIgICBbY2VudGVyIG9mIGtleXBhZF0KKyMgICBhZGQgICAgdTggICAgW3VzZXIgc3RyaW5nIDhdIFxFWz82YworIyAgIGFkZCAgICBlbCAgICBbY2xlYXIgdG8gZW5kIG9mIGxpbmVdIFxFW0sKKyMgTm90ZXM6CisjICAgY25vcm0gW21ha2UgY3Vyc29yIG5vcm1hbF0gbm90IGltcGxlbWVudGVkCisjICAgZmxhc2ggW2ZsYXNoXSBub3QgaW1wbGVtZW50ZWQKKyMgICBibGluayBbYmxpbmtdIG5vdCBpbXBsZW1lbnRlZCB2ZXJ5IHVzZWZ1bGx5IGluIGN5Z3dpbj8gXEVbNW0KKyMgICBkaW0gICBbZGltXSBub3QgaW1wbGVtZW50ZWQgdmVyeSB1c2VmdWxseSBpbiBjeWd3aW4/IFxFWzJtCisjICAgY3ViMSAgW2N1cnNvciBiYWNrIDFdIHR5cGljYWxseSBcRVtELCBidXQgXkggaXMgZmFzdGVyPworIyAgIGtOWFQgIFtzaGlmdGVkIG5leHQga2V5XSBub3QgaW1wbGVtZW50ZWQKKyMgICBrUFJWICBbc2hpZnRlZCBwcmV2IGtleV0gbm90IGltcGxlbWVudGVkCisjICAga2hvbWUgW2hvbWUga2V5XSByZWFsbHkgaXMgXEVbMX4gTk9UIFxFW0gKKyMgICB0YmMgICBbY2xlYXIgdGFiIHN0b3BzXSBub3QgaW1wbGVtZW50ZWQKKyMgICB4ZW5sICBbbmV3bGluZSBpZ25ub3JlZCBhZnRlciA4MCBjb2xzXSBtZXNzZXMgdXAgbGFzdCBsaW5lPyBFaHVkIEthcm5pCisjICAgc21wY2ggW1N0YXJ0IFBDIGNoYXJzZXRdIGlzIFxFWzExbSwgc2FtZSBhcyBzbWFjcworIyAgIHJtcGNoIFtFbmQgUEMgY2hhcnNldF0gaXMgXEVbMTBtLCBzYW1lIGFzIHJtYWNzCisjICAgbWlyICAgW21vdmUgaW4gaW5zZXJ0IG1vZGVdIGZhaWxzIGluIHRhY2s/CisjICAgYmNlICAgW2JhY2sgY29sb3IgZXJhc2VdIGNhdXNlcyBwcm9ibGVtcyB3aXRoIGNoYW5nZSBiYWNrZ3JvdW5kIGNvbG9yPworIyAgIGN2dmlzIFttYWtlIGN1cnNvciB2ZXJ5IHZpc2libGVdIGNhdXNlcyBhIHN0YWNrZHVtcCB3aGVuIHRlc3Rpbmcgd2l0aAorIyAgICAgICAgIHRlc3RjdXJzIHVzaW5nIHRoZSBvdXRwdXQgb3B0aW9uPyBcRVs/MjVoXEVbPzhjCisjICAgY2l2aXMgW21ha2UgY3Vyc29yIGludmlzaWJsZV0gY2F1c2VzIGV2ZXJ5dGhpbmcgdG8gc3RhY2tkdW1wPyBcRVs/MjVsXEVbPzFjCisjICAgZWNoICAgW2VyYXNlIGNoYXJhY3RlcnMgcGFyYW1dIGJyb2tlbiBcRVslcDElZFgKKyMgICBrY2J0ICBbYmFjay10YWIga2V5XSBub3QgaW1wbGVtZW50ZWQgaW4gY3lnd2luPyAgXEVbWgorIworIyAyMDA1LzExLzEyIC1URAorIwlSZW1vdmUgY2J0IHNpbmNlIGl0IGRvZXMgbm90IHdvcmsgaW4gY3VycmVudCBjeWd3aW4KKyMJQWRkICdtaXInIGFuZCAnaW4nIGZsYWdzIGJhc2VkIG9uIHRhY2sKK2N5Z3dpbnxhbnNpIGVtdWxhdGlvbiBmb3IgQ3lnd2luLAorCWFtLCBocywgbWlyLCBtc2dyLCB4b24sCisJY29sb3JzIzgsIGl0IzgsIHBhaXJzIzY0LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwliZWw9XkcsIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwKKwljdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBmc2w9XkcsIGhvbWU9XEVbSCwKKwlocGE9XEVbJWklcDElZEcsIGh0PV5JLCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpbnZpcz1cRVs4bSwga2IyPVxFW0csCisJa2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFWzN+LCBrZW5kPVxFWzR+LCBrZjE9XEVbW0EsIGtmMTA9XEVbMjF+LAorCWtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LAorCWtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LAorCWtmMTk9XEVbMzN+LCBrZjI9XEVbW0IsIGtmMjA9XEVbMzR+LCBrZjM9XEVbW0MsIGtmND1cRVtbRCwKKwlrZjU9XEVbW0UsIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbMX4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3NwZD1eWiwKKwluZWw9Xk1eSiwgb3A9XEVbMzk7NDltLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJtYWNzPVxFWzEwbSwgcm1jdXA9XEVbMkpcRVs/NDdsXEU4LCBybWlyPVxFWzRsLAorCXJtcGNoPVxFWzEwbSwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLCByczE9XEVjXEVdUiwKKwlzYz1cRTcsIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJc2dyPVxFWzA7MTAlPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTslPyVwOSV0OzExJTttLAorCXNncjA9XEVbMDsxMG0sIHNtYWNzPVxFWzExbSwgc21jdXA9XEU3XEVbPzQ3aCwKKwlzbWlyPVxFWzRoLCBzbXBjaD1cRVsxMW0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRzbD1cRV07LAorCXZwYT1cRVslaSVwMSVkZCwgdXNlPXZ0MTAyK2VucSwKKworIyBJJ3ZlIHN1cHBsaWVkIHRoaXMgc28gdGhhdCB5b3UgY2FuIGhlbHAgdGVzdCBuZXcgdmFsdWVzIGFuZCBhZGQgb3RoZXIKKyMgZmVhdHVyZXMuICBDaGVlcnMsIGVhcm5pZV9ib3lkQHlhaG9vLmNvbS4KKyMKKyMgU29tZSBmZWF0dXJlcyBhcmUgZnJvbSBwY2Fuc2kuICBUaGUgb3AgdmFsdWUgaXMgZnJvbSBsaW51eC4gIEZ1bmN0aW9uLWtleXMKKyMgYXJlIGZyb20gbGludXguICBUaGVzZSBoYXZlIGJlZW4gdGVzdGVkIG5vdCB0byBjYXVzZSBwcm9ibGVtcy4gIHhlbmwgd2FzIGluCisjIHRoaXMgbGlzdCwgYnV0IERPRVMgY2F1c2UgcHJvYmxlbXMgc28gaXQgaGFzIGJlZW4gcmVtb3ZlZAorY3lnd2luREJHfERlYnVnIFZlcnNpb24gZm9yIEN5Z3dpbiwKKwlhbSwgZW8sIG1pciwgbXNnciwgeG9uLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgbmN2IzMsIHBhaXJzIzY0LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVvfnBcMzA0cVwzMDRyXDMwNHNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzYzelwzNjJ7XDM0M3xcMzMwfVwyMzR+XDM3NiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0osCisJY25vcm09XEVbPzI1aCwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJZmxhc2g9XEVbPzVoXEVbPzVsJDwyMDAvPiwgaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsCisJaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XkosIGludmlzPVxFWzhtLCBrTlhUPVxFWzYkLCBrUFJWPVxFWzUkLAorCWtiMj1cRVtHLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVszfiwga2VuZD1cRVs0fiwga2YxPVxFW1tBLAorCWtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LAorCWtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LAorCWtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyPVxFW1tCLCBrZjIwPVxFWzM0fiwKKwlrZjM9XEVbW0MsIGtmND1cRVtbRCwga2Y1PVxFW1tFLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwKKwlrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3NwZD1eWiwgbmVsPV5NXkosIG9wPVxFWzM5OzQ5bSwKKwlyYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLCBybWFjcz1cRVsxMG0sIHJtaXI9XEVbNGwsCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMT1cRWNcRV1SLCBzYz1cRTcsCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3I9XEVbMDsxMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglOyU/JXA5JXQ7MTIlO20sCisJc2dyMD1cRVswOzEwbSwgc21hY3M9XEVbMTFtLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVsyZywgdnBhPVxFWyVpJXAxJWRkLCB1c2U9dnQxMDIrZW5xLAorCisjIEtleSBkZWZpbml0aW9uczoKKyMgVGhlIGVuY29kaW5ncyBmb3IgdW5zaGlmdGVkIGFycm93IGtleXMsIEYxLUYxMiwgSG9tZSwgSW5zZXJ0LCBldGMuICBtYXRjaCB0aGUKKyMgZW5jb2RpbmdzIHVzZWQgYnkgb3RoZXIgeDg2IGVudmlyb25tZW50cy4gIEFsbCBvdGhlcnMgYXJlIGludmVudGVkIGZvciBESkdQUC4KKyMgT2RkbHkgZW5vdWdoLCB3aGlsZSBzZXZlcmFsIGNvbWJpbmF0aW9ucyBvZiBtb2RpZmllcnMgYXJlIHRhYnVsYXRlZCwgdGhlcmUgaXMKKyMgbm9uZSBmb3Igc2hpZnRlZCBjdXJzb3Iga2V5cy4KKyMKKyMJRjEJCQlcRVtbQQorIwlGMgkJCVxFW1tCCisjCUYzCQkJXEVbW0MKKyMJRjQJCQlcRVtbRAorIwlGNQkJCVxFW1tFCisjCUY2CQkJXEVbMTd+CisjCUY3CQkJXEVbMTh+CisjCUY4CQkJXEVbMTl+CisjCUY5CQkJXEVbMjB+CisjCUYxMAkJCVxFWzIxfgorIwlGMTEJCQlcRVsyM34KKyMJRjEyCQkJXEVbMjR+CisjCisjCURlbGV0ZQkJCVxFWzN+CisjCURvd24gQXJyb3cJCVxFW0IKKyMJRW5kCQkJXEVbNH4KKyMJSG9tZQkJCVxFWzF+CisjCUluc2VydAkJCVxFWzJ+CisjCUxlZnQgQXJyb3cJCVxFW0QKKyMJUGFnZSBEb3duCQlcRVs2fgorIwlQYWdlIFVwCQkJXEVbNX4KKyMJUmlnaHQgQXJyb3cJCVxFW0MKKyMJVXAgQXJyb3cJCVxFW0EKKyMKKyMJU2hpZnQtRjEJCVxFWzI1fgorIwlTaGlmdC1GMgkJXEVbMjZ+CisjCVNoaWZ0LUYzCQlcRVsyN34KKyMJU2hpZnQtRjQJCVxFWzI4fgorIwlTaGlmdC1GNQkJXEVbMjl+CisjCVNoaWZ0LUY2CQlcRVszMH4KKyMJU2hpZnQtRjcJCVxFWzMxfgorIwlTaGlmdC1GOAkJXEVbMzJ+CisjCVNoaWZ0LUY5CQlcRVszM34KKyMJU2hpZnQtRjEwCQlcRVszNH4KKyMJU2hpZnQtRjExCQlcRVszNX4KKyMJU2hpZnQtRjEyCQlcRVszNn4KKyMKKyMJQ3RybC1GMQkJCVxFWzQ3fgorIwlDdHJsLUYyCQkJXEVbNDh+CisjCUN0cmwtRjMJCQlcRVs0OX4KKyMJQ3RybC1GNAkJCVxFWzUwfgorIwlDdHJsLUY1CQkJXEVbNTF+CisjCUN0cmwtRjYJCQlcRVs1Mn4KKyMJQ3RybC1GNwkJCVxFWzUzfgorIwlDdHJsLUY4CQkJXEVbNTR+CisjCUN0cmwtRjkJCQlcRVs1NX4KKyMJQ3RybC1GMTAJCVxFWzU2fgorIwlDdHJsLUYxMQkJXEVbNTd+CisjCUN0cmwtRjEyCQlcRVs1OH4KKyMKKyMJQ3RybC1EZWxldGUJCVxFWzQzfgorIwlDdHJsLURvd24gQXJyb3cJCVxFWzM4fgorIwlDdHJsLUVuZAkJXEVbNDR+CisjCUN0cmwtSG9tZQkJXEVbNDF+CisjCUN0cmwtSW5zZXJ0CQlcRVs0Mn4KKyMJQ3RybC1MZWZ0IEFycm93CQlcRVszOX4KKyMJQ3RybC1QYWdlIERvd24JCVxFWzQ2fgorIwlDdHJsLVBhZ2UgVXAJCVxFWzQ1fgorIwlDdHJsLVJpZ2h0IEFycm93CVxFWzQwfgorIwlDdHJsLVVwIEFycm93CQlcRVszN34KKyMKKyMJQWx0LUYxCQkJXEVbNTl+CisjCUFsdC1GMgkJCVxFWzYwfgorIwlBbHQtRjMJCQlcRVs2MX4KKyMJQWx0LUY0CQkJXEVbNjJ+CisjCUFsdC1GNQkJCVxFWzYzfgorIwlBbHQtRjYJCQlcRVs2NH4KKyMJQWx0LUY3CQkJXEVbNjV+CisjCUFsdC1GOAkJCVxFWzY2fgorIwlBbHQtRjkJCQlcRVs2N34KKyMJQWx0LUYxMAkJCVxFWzY4fgorIwlBbHQtRjExCQkJXEVbNzl+CisjCUFsdC1GMTIJCQlcRVs4MH4KKyMKKyMJQWx0LURlbGV0ZQkJXEVbNjV+CisjCUFsdC1Eb3duIEFycm93CQlcRVs2MH4KKyMJQWx0LUVuZAkJCVxFWzY2fgorIwlBbHQtSG9tZQkJXEVbNDF+CisjCUFsdC1JbnNlcnQJCVxFWzY0fgorIwlBbHQtTGVmdCBBcnJvdwkJXEVbNjF+CisjCUFsdC1QYWdlIERvd24JCVxFWzY4fgorIwlBbHQtUGFnZSBVcAkJXEVbNjd+CisjCUFsdC1SaWdodCBBcnJvdwkJXEVbNjJ+CisjCUFsdC1VcCBBcnJvdwkJXEVbNTl+CisjCisjIEFsc286CisjCUFsdC1BCQkJXEVbODJ+CisjCUFsdC1CCQkJXEVbODJ+CisjCUFsdC1DCQkJXEVbODN+CisjCUFsdC1ECQkJXEVbODR+CisjCUFsdC1FCQkJXEVbODV+CisjCUFsdC1GCQkJXEVbODZ+CisjCUFsdC1HCQkJXEVbODd+CisjCUFsdC1ICQkJXEVbODh+CisjCUFsdC1JCQkJXEVbODl+CisjCUFsdC1KCQkJXEVbOTB+CisjCUFsdC1LCQkJXEVbOTF+CisjCUFsdC1MCQkJXEVbOTJ+CisjCUFsdC1NCQkJXEVbOTN+CisjCUFsdC1OCQkJXEVbOTR+CisjCUFsdC1PCQkJXEVbOTV+CisjCUFsdC1QCQkJXEVbOTZ+CisjCUFsdC1RCQkJXEVbOTd+CisjCUFsdC1SCQkJXEVbOTh+CisjCUFsdC1TCQkJXEVbOTl+CisjCUFsdC1UCQkJXEVbMTAwfgorIwlBbHQtVQkJCVxFWzEwMX4KKyMJQWx0LVYJCQlcRVsxMDJ+CisjCUFsdC1XCQkJXEVbMTAzfgorIwlBbHQtWAkJCVxFWzEwNH4KKyMJQWx0LVkJCQlcRVsxMDV+CisjCUFsdC1aCQkJXEVbMTA2fgorZGpncHB8YW5zaSBlbXVsYXRpb24gZm9yIERKR1BQIGFscGhhLAorCWFtLCBiY2UsIG1zZ3IsIHhocCwgeG9uLCB4dCwKKwljb2xvcnMjOCwgaXQjOCwgcGFpcnMjNjQsCisJYWNzYz0rXDAyMFwsXDAyMS1cMDMwLl5ZMFwzMzNgXDAwNGFcMjYxZlwzNzBnXDM2MWhcMjYwalwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cFwzMDRxXDMwNHJcMzA0c190XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzeVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNH5cMzc2LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVsxdiwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbdiwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbMnYsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBpY2g9XEVbJXAxJWRALAorCWljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFW1MsCisJaW5kbj1cRVslcDElZFMsIGludmlzPVxFWzhtLCBrYnM9XkgsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbM34sCisJa2VuZD1cRVs0fiwga2YxPVxFW1tBLCBrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sCisJa2YxMj1cRVsyNH4sIGtmMj1cRVtbQiwga2YzPVxFW1tDLCBrZjQ9XEVbW0QsIGtmNT1cRVtbRSwKKwlrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sIG5lbD1eTV5KLAorCW9wPVxFWzM3OzQwbSwgcmV2PVxFWzdtLCByaT1cRVtULCByaW49XEVbJXAxJWRULCBybXNvPVxFW20sCisJc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZ3I9XEVbMCU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSVlOzI1JTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7bSwKKwlzZ3IwPVxFW20sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHZwYT1cRVslaSVwMSVkZCwKKworZGpncHAyMDN8RW50cnkgZm9yIERKR1BQIDIuMDMsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwgbmVsPV5NXkosCisKK2RqZ3BwMjA0fEVudHJ5IGZvciBESkdQUCAyLjA0LAorCU9UYnMsIGFtLCBBWCwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjUsIG5jdiMzLCBwYWlycyM2NCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbMXYsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVt2LCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwKKwljdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsIGN2dmlzPVxFWzJ2LCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywKKwlob21lPVxFW0gsIGh0PV5JLCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCwgaW5kPVxFW1MsIGluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs4bSwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbM34sIGtmMD1cRVsyMX4sIGtmMT1cRVtbQSwga2YxMD1cRVsyMX4sIGtmMj1cRVtbQiwKKwlrZjM9XEVbW0MsIGtmND1cRVtbRCwga2Y1PVxFW1tFLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwKKwlrbGw9XEVbNH4sIGtucD1cRVs2fiwga3BwPVxFWzV+LCBuZWw9Xk1eSiwgcmV2PVxFWzdtLAorCXJpPVxFW1QsIHJpbj1cRVslcDElZFQsIHJtc289XEVbbSwgc2V0YWI9XEVbNCVwMSVkbSwKKwlzZXRhZj1cRVszJXAxJWRtLCBzZ3IwPVxFW20sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMgVGhpcyBpcyB0ZXN0ZWQgdXNpbmcgVS9XaW4ncyB0ZWxuZXQuICBTY3JvbGxpbmcgaXMgb21pdHRlZCBiZWNhdXNlIGl0IGlzCisjIGJ1Z2d5LiAgQW5vdGhlciBvZGQgYnVnIGFwcGVhcnMgd2hlbiBkaXNwbGF5aW5nICJ+IiBpbiBhbHRlcm5hdGUgY2hhcmFjdGVyCisjIHNldCAodGhlIGVtdWxhdG9yIHNwaXRzIG91dCBlcnJvciBtZXNzYWdlcykuICBDb21wYXJlIHdpdGggYXR0NjM4NiAtVEQKK3V3aW58VS9XaW4gMy4yIGNvbnNvbGUsCisJYW0sIGVvLCBpbiwgbXNnciwgeGVubCwgeG9uLAorCWNvbG9ycyM4LCBpdCM4LCBuY3YjNTgsIHBhaXJzIzY0LAorCWFjc2M9K1wwMjBcLFwwMjEtXDAzMC5eWTBcMzMzYFwwMDRhXDI2MWZcMzcwZ1wzNjFoXDI2MGlcMzE2alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cFwzMDRxXDMwNHJcMzA0c190XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzeVwzNjN6XDM2MntcMzQzfFwzMzB9XDIzNH5cMzc2LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWz8yNWgsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sIGVjaD1cRVslcDElZFgsCisJZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVwxNzcsIGtlbmQ9XEVbWSwga2YxPVxFT1AsCisJa2YxMD1cRU9ZLCBrZjExPVxFT1osIGtmMTI9XEVPQSwga2YyPVxFT1EsIGtmMz1cRU9SLAorCWtmND1cRU9TLCBrZjU9XEVPVCwga2Y2PVxFT1UsIGtmNz1cRU9WLCBrZjg9XEVPVywga2Y5PVxFT1gsCisJa2hvbWU9XEVbSCwga2ljaDE9XEVbQCwgbmVsPV5NXkosIG9wPVxFWzM5OzQ5bSwgcmM9XEU4LAorCXJldj1cRVs3bSwgcm1hY3M9XEVbMTBtLCBybWlyPVxFWzRsLCBybXBjaD1cRVsxMG0sCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbbSwgcnMxPVxFY1xFXVIsIHNjPVxFNywKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCBzZ3IwPVxFWzA7MTBtLAorCXNtYWNzPVxFWzExbSwgc21pcj1cRVs0aCwgc21wY2g9XEVbMTFtLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywgdTY9XEVbJWklZDslZFIsIHU3PVxFWzZuLAorCisjIFRoaXMgZW50cnkgZml0cyB0aGUgV2luZG93cyBOVCBjb25zb2xlIHdoZW4gdGhlIF9QT1NJWF9URVJNIGVudmlyb25tZW50CisjIHZhcmlhYmxlIGlzIHNldCB0byAnb24nLiAgV2hpbGUgdGhlIFdpbmRvd3MgTlQgUE9TSVggY29uc29sZSBpcyBzZWxkb20gdXNlZCwKKyMgdGhlIFRlbG5ldCBjbGllbnQgc3VwcGxpZWQgd2l0aCBib3RoIHRoZSBXaW5kb3dzIGZvciBXb3JrR3JvdXAgMy4xMSBUQ1AvSVAKKyMgc3RhY2sgYW5kIHRoZSBXaW4zMiAoaS5lLiwgV2luZG93cyA5NSBhbmQgV2luZG93cyBOVCAzLjEgb3IgbGF0ZXIpIG9wZXJhdGluZworIyBzeXN0ZW1zIGlzIG5vdCwgYW5kIChzdXJwcmlzZSEpIHRoZXkgbWF0Y2ggdmVyeSB3ZWxsLgorIworIyBTZWU6ICBNUyBLbm93bGVkZ2UgQmFzZSBpdGVtIFExMDg1ODEsIGRhdGVkIDEzLU1BWS0xOTk3LCB0aXRsZWQgIlNldHRpbmcgVXAKKyMgVkkgUE9TSVggRWRpdG9yIGZvciBXaW5kb3dzIE5UIDMuMSIuICBUcnVlIHRvIE1pY3Jvc29mdCBmb3JtLCBub3Qgb25seQorIyBhcmUgdGhlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYSBwaWxlIG9mIG1pbmQtbnVtYmluZyBidXJlYXVjcmF0ZXNlLAorIyBidXQgdGhlIHRlcm1jYXAgZW50cnkgaXMgYWN0dWFsbHkgYnJva2VuIGFuZCB1bnVzYWJsZSBhcyBnaXZlbjsgdGhlIDpkbzoKKyMgY2FwYWJpbGl0eSBpcyBtaXNzcGVsbGVkICJkIi4KKyMKKyMgVG8gdXNlIHRoaXMsIHlvdSBuZWVkIHRvIGEgYnVuY2ggb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorIworIyBTRVQgX1BPU0lYX1RFUk09b24KKyMgU0VUIFRFUk09YW5zaQorIyBTRVQgVEVSTUNBUD1sb2NhdGlvbiBvZiB0ZXJtY2FwIGZpbGUgaW4gUE9TSVggZmlsZSBmb3JtYXQKKyMgd2hpY2ggaXMgY2FzZS1zZW5zaXRpdmUuCisjIGUuZy4gU0VUIFRFUk1DQVA9Ly9EL1JFU0tJVDM1L3Bvc2l4L3Rlcm1jYXAKKyMgU0VUIFRNUD0vL0MvVEVNUAorIworIyBJbXBvcnRhbnQgbm90ZTogc2V0dGluZyB0aGUgVE1QIGVudmlyb25tZW50IHZhcmlhYmxlIGluIFBPU0lYIHN0eWxlIHJlbmRlcnMKKyMgaXQgaW5jb21wYXRpYmxlIHdpdGggYSBsb3Qgb2Ygb3RoZXIgYXBwbGljYXRpb25zLCBpbmNsdWRpbmcgVmlzdWFsIEMrKy4gU28KKyMgeW91IHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgY29tbWFuZCB3aW5kb3cganVzdCBmb3IgdmkuIEFsbCB0aGUgb3RoZXIKKyMgdmFyaWFibGVzIG1heSBiZSBwZXJtYW5lbnRseSBzZXQgaW4gdGhlIENvbnRyb2wgUGFuZWxcU3lzdGVtIGFwcGxldC4KKyMKKyMgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSByZXN0cmljdGlvbnMgb2YgdGhpcyBmYWNpbGl0eSBhdAorIyA8aHR0cDovL3d3dy5uZW50dWcub3JnL3VuaXgtdG8tbnQvbnRwb3NpeC5odG0+LgorIworIyBGcm9tOiBGZWRlcmljbyBCaWFuY2hpIDxiaWFuY2hpQG1hZ25hLmNpc2lkLnVuaXBpLml0PiwgMTUgSmFuIDE5OTcKK2Fuc2ktbnR8cHN4X2Fuc2l8TWljcm9zb2Z0IFdpbmRvd3MgTlQgY29uc29sZSBQT1NJWCBBTlNJIG1vZGUsCisJYW0sIGJ3LCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgY2xlYXI9XEVbMkosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBodD1eSSwgaW5kPVxFW1MsIGticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbViwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBuZWw9XHJcRVtTLCByYz1cRVt1LCByZXY9XEVbN20sCisJcmk9XEVbVCwgcm1zbz1cRVttLCBzYz1cRVtzLCBzZ3IwPVxFWzBtLCBzbXNvPVxFWzdtLAorIyBGcm9tOiBqZXdAdmVudXMuc3VucXVlc3QuY29tCisjIERhdGU6IDE5IEZlYiA5MyAyMzo0MTowNyBHTVQKKyMgSGVyZSdzICBhICBjb21iaW5hdGlvbiBvZiAgYW5zaSBhbmQgIHZ0MTAwIHRlcm1jYXAKKyMgZW50cmllcyAgIHRoYXQgIHdvcmtzICBuZWFybHkgICBwZXJmZWN0bHkgIGZvciAgbWUKKyMgKEdhdGV3YXkgMjAwMCBIYW5kYm9vayBhbmQgTWljcm9zb2Z0IFdvcmtzIDMuMCk6CitwY213fFBDIHJ1bm5pbmcgTWljcm9zb2Z0IFdvcmtzLAorCWFtLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDIvPiwgYm9sZD1cRVsxbSQ8Mi8+LAorCWNsZWFyPVxFWztIXEVbMkokPDUwLz4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XEVbQyQ8Mi8+LCBjdXA9XEVbJWklcDElZDslcDIlZEgkPDUvPiwKKwljdXUxPVxFW0EkPDIvPiwgZWQ9XEVbSiQ8NTAvPiwgZWw9XEVbSyQ8My8+LCBob21lPVxFW0gsCisJaHQ9XkksIGh0cz1cRUgkPDIvPiwgaW5kPVxFRCQ8NS8+LCBpczI9XEVbMTsyNHJcRVsyNDsxSCwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIG5lbD1cclxFRCQ8NS8+LAorCXJjPVxFOCwgcmV2PVxFWzdtJDwyLz4sIHJmPS91c3Ivc2hhcmUvbGliL3RhYnNldC92dDEwMCwKKwlyaT1cRU0kPDUvPiwgcm1zbz1cRVttJDwyLz4sIHJtdWw9XEVbbSQ8Mi8+LAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywKKwlzZ3IwPVxFW20kPDIvPiwgc21zbz1cRVs3bSQ8Mi8+LCBzbXVsPVxFWzRtJDwyLz4sCisJdGJjPVxFWzNnJDwyLz4sCisKKyMgRnJvbTogRmVkZXJpY28gQmlhbmNoaQorIyBUaGlzIGlzIHRoZSBlbnRyeSBmb3IgdGhlIE9wZW5OVCB0ZXJtaW5hbC4KKyMgVGhlIG50Y29uc29sZSBuYW1lIGlzIGZvciBiYWNrd2FyZCBjb21wYXRhYmlsaXR5LgorIyBUaGlzIGlzIGZvciBPcGVuTlQgMi4wIGFuZCBsYXRlci4KKyMgTGF0ZXIgT3Blbk5UIHdhcyByZW5hbWVkIHRvIEludGVyaXguCisjCisjIFByZXNlbnRseSBpdCBpcyBkaXN0cmlidXRlZCBieSBNaWNyb3NvZnQgYXMgU2VydmljZXMgRm9yIFVuaXggKFNGVSkuCisjIFRoZSAzLjUgYmV0YSBjb250YWlucyBuY3Vyc2VzIDQuMiAodGhhdCBpcyBoZWFkZXIgZmlsZXMgYW5kIGV4ZWN1dGFibGVzLAorIyB0aGUgZG9jdW1lbnRhdGlvbiBkYXRlcyBmcm9tIDEuOS45ZSkgLVRECisKK2ludGVyaXh8b3Blbm50fG9wZW5udC0yNXxudGNvbnNvbGV8bnRjb25zb2xlLTI1fE9wZW5OVC10ZXJtIGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwlhbSwgYncsIG1zZ3IsCisJY29sb3JzIzgsIGNvbHMjODAsIGxpbmVzIzI1LCBuY3YjMywgcGFpcnMjNjQsCisJYWNzYz1gXDAwNGFcMjYxZlwzNzBnXDM2MWhcMjYwalwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNW9+cVwzMDRyXDM2MnNfdFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2M3lcMzcxelwzNzJ7XDM3M3xcMzc0fVwzNzV+XDM3Ni5cMDMxLVwwMzBcLFwwMjErXlAwXDMzM3BcMzA0clwzMDR5XDM2M3pcMzYye1wzNDN8XDMzMH1cMjM0LAorCWJlbD1eRywgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNsZWFyPVxFWzJKLCBjdWI9XEVbJXAxJWRELAorCWN1YjE9XEVbRCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBodD1eSSwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFW1MsCisJaW5kbj1cRVslcDElZFMsIGticz1eSCwga2NidD1cRVtaLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW00sIGtlbmQ9XEVbVSwga2YwPVxFRkEsCisJa2YxPVxFRjEsIGtmMTA9XEVGQSwga2YxMT1cRUZCLCBrZjEyPVxFRkMsIGtmMTM9XEVGRCwKKwlrZjE0PVxFRkUsIGtmMTU9XEVGRiwga2YxNj1cRUZHLCBrZjE3PVxFRkgsIGtmMTg9XEVGSSwKKwlrZjE5PVxFRkosIGtmMj1cRUYyLCBrZjIwPVxFRkssIGtmMjE9XEVGTCwga2YyMj1cRUZNLAorCWtmMjM9XEVGTiwga2YyND1cRUZPLCBrZjI1PVxFRlAsIGtmMjY9XEVGUSwga2YyNz1cRUZSLAorCWtmMjg9XEVGUywga2YyOT1cRUZULCBrZjM9XEVGMywga2YzMD1cRUZVLCBrZjMxPVxFRlYsCisJa2YzMj1cRUZXLCBrZjMzPVxFRlgsIGtmMzQ9XEVGWSwga2YzNT1cRUZaLCBrZjM2PVxFRmEsCisJa2YzNz1cRUZiLCBrZjM4PVxFRmMsIGtmMzk9XEVGZCwga2Y0PVxFRjQsIGtmNDA9XEVGZSwKKwlrZjQxPVxFRmYsIGtmNDI9XEVGZywga2Y0Mz1cRUZoLCBrZjQ0PVxFRmksIGtmNDU9XEVGaiwKKwlrZjQ2PVxFRmssIGtmNDc9XEVGbSwga2Y0OD1cRUZuLCBrZjQ5PVxFRm8sIGtmNT1cRUY1LAorCWtmNTA9XEVGcCwga2Y1MT1cRUZxLCBrZjUyPVxFRnIsIGtmNTM9XEVGcywga2Y1ND1cRUZ0LAorCWtmNTU9XEVGdSwga2Y1Nj1cRUZ2LCBrZjU3PVxFRncsIGtmNTg9XEVGeCwga2Y1OT1cRUZ5LAorCWtmNj1cRUY2LCBrZjYwPVxFRnosIGtmNjE9XEVGKywga2Y2Mj1cRUYtLAorCWtmNjM9XEVGXDAxNCBrZjY0PVxFRiQsIGtmNz1cRUY3LCBrZjg9XEVGOCwga2Y5PVxFRjksCisJa2ljaDE9XEVbTCwga2xsPVxFW1UsIGtucD1cRVtULCBrcHA9XEVbUywgbGw9XEVbVSwgbmVsPV5NXkosCisJb3A9XEVbbSwgcmM9XEVbdSwgcmV2PVxFWzdtLCByaT1cRVtULCByaW49XEVbJXAxJWRULAorCXJtY3VwPVxFWzJiXEVbdVxyXEVbSywgcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMT1cRWMsCisJc2M9XEVbcywgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwlzZXRiPVxFWyVwMSV7NDB9JSslZG0sIHNldGY9XEVbJXAxJXszMH0lKyVkbSwKKwlzZ3IwPVxFWzBtLCBzbWN1cD1cRVtzXEVbMWIsIHNtc289XEVbMW0sIHNtdWw9XEVbNG0sCisKK29wZW5udC0zNXxudGNvbnNvbGUtMzV8T3Blbk5ULXRlcm0zNSBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjMzUsIHVzZT1vcGVubnQsCisKK29wZW5udC01MHxudGNvbnNvbGUtNTB8T3Blbk5ULXRlcm01MCBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjNTAsIHVzZT1vcGVubnQsCisKK29wZW5udC02MHxudGNvbnNvbGUtNjB8T3Blbk5ULXRlcm02MCBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjNjAsIHVzZT1vcGVubnQsCisKK29wZW5udC0xMDB8bnRjb25zb2xlLTEwMHxPcGVuTlQtdGVybTEwMCBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjMTAwLCB1c2U9b3Blbm50LAorCisjIE9wZW5OVCB3aWRlIHRlcm1pbmFscworb3Blbm50LXd8b3Blbm50LTI1LXd8bnRjb25zb2xlLXd8bnRjb25zb2xlLTI1LXd8T3Blbk5ULXRlcm0tdyBjb21wYXQgd2l0aCBjb2xvciwKKwljb2xzIzEyNSwgdXNlPW9wZW5udCwKKworb3Blbm50LTM1LXd8bnRjb25zb2xlLTM1LXd8T3Blbk5ULXRlcm0zNS13IGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwlsaW5lcyMzNSwgdXNlPW9wZW5udC13LAorCitvcGVubnQtNTAtd3xudGNvbnNvbGUtNTAtd3xPcGVuTlQtdGVybTUwLXcgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzUwLCB1c2U9b3Blbm50LXcsCisKK29wZW5udC02MC13fG50Y29uc29sZS02MC13fE9wZW5OVC10ZXJtNjAtdyBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjNjAsIHVzZT1vcGVubnQtdywKKworb3Blbm50LXctdnR8b3Blbm50LTI1LXctdnR8bnRjb25zb2xlLXctdnR8bnRjb25zb2xlLTI1LXctdnR8T3Blbk5ULXRlcm0tdy12dCBjb21wYXQgd2l0aCBjb2xvciwKKwljb2xzIzEzMiwgdXNlPW9wZW5udCwKKworIyBPcGVuTlQgdGVybWluYWxzIHdpdGggbm8gc21jdXAvcm1jdXAgKG5hbWVzIG1hdGNoIHRlcm1jYXAgZW50cmllcykKK2ludGVyaXgtbnRpfG9wZW5udC1udGl8b3Blbm50LTI1LW50aXxudGNvbnNvbGUtMjUtbnRpfE9wZW5OVC1udGkgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCXJtY3VwQCwgc21jdXBALCB1c2U9b3Blbm50LAorCitvcGVubnQtMzUtbnRpfG50Y29uc29sZS0zNS1udGl8T3Blbk5ULXRlcm0zNS1udGkgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzM1LCB1c2U9b3Blbm50LW50aSwKKworb3Blbm50LTUwLW50aXxudGNvbnNvbGUtNTAtbnRpfE9wZW5OVC10ZXJtNTAtbnRpIGNvbXBhdGlibGUgd2l0aCBjb2xvciwKKwlsaW5lcyM1MCwgdXNlPW9wZW5udC1udGksCisKK29wZW5udC02MC1udGl8bnRjb25zb2xlLTYwLW50aXxPcGVuTlQtdGVybTYwLW50aSBjb21wYXRpYmxlIHdpdGggY29sb3IsCisJbGluZXMjNjAsIHVzZT1vcGVubnQtbnRpLAorCitvcGVubnQtMTAwLW50aXxudGNvbnNvbGUtMTAwLW50aXxPcGVuTlQtdGVybTEwMC1udGkgY29tcGF0aWJsZSB3aXRoIGNvbG9yLAorCWxpbmVzIzEwMCwgdXNlPW9wZW5udC1udGksCisKKyMjIyMjIyMjIENPTU1PTiBURVJNSU5BTCBUWVBFUworIworIyBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRlcm1pbmFsIGNsYXNzZXMgYW5kIG1ha2VyIGJyYW5kcyB0aGF0IGFyZSBzdGlsbAorIyBxdWl0ZSBjb21tb24sIGJ1dCBoYXZlIHByb3ByaWV0YXJ5IGNvbW1hbmQgc2V0cyBub3QgYmxlc3NlZCBieSBBTlNJLgorIworCisjIyMjIEFsdG9zCisjCisjIEFsdG9zIG1hZGUgYSBtb2RlcmF0ZWx5IHN1Y2Nlc3NmdWwgbGluZSBvZiBVTklYIGJveGVzLiAgSW4gMTk5MCB0aGV5IHdlcmUKKyMgYm91Z2h0IG91dCBieSBBY2VyLCBhIG1ham9yIFRhaXdhbmVzZSBtYW51ZmFjdHVyZXIgb2YgUEMtY2xvbmVzLgorIyBBY2VyIGhhcyBhIHdlYiBzaXRlIGF0IGh0dHA6Ly93d3cuYWNlci5jb20uCisjCisjIEFsdG9zIGRlc2NyaXB0aW9ucyBmcm9tIFRlZCBNaXR0ZWxzdGFlZHQgPHRlZG1AYWdvcmEucmFpbi5jb20+IDQgU2VwIDE5OTMKKyMgSGlzIGNvbW1lbnRzIHN1Z2dlc3QgdGhleSB3ZXJlIHNoaXBwZWQgd2l0aCB0aGUgc3lzdGVtLgorIworCisjIChhbHRvczI6IGhhZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzCisjCTpjMD1eQWBccjpjMT1eQWFccjpjMj1eQWJccjpjMz1eQWNccjpcCisjCTpjND1eQWRccjpjNT1eQWVccjpjNj1eQWZccjpjNz1eQWdccjpcCisjCTpjOD1eQWhccjpjOT1eQWlccjpjQT1eQWpccjpjQj1eQWtccjpcCisjCTpjQz1eQWxccjpjRD1eQW1ccjpjRT1eQW5ccjpjRj1eQW9ccjoKKyMJOlhVPV5BcVxyOlhEPV5BclxyOlhSPV5Bc1xyOlhMPV5BdFxyOlwKKyMJOllVPV5BUVxyOllEPV5BUlxyOllSPV5BU1xyOllMPV5BVFxyOlwKKyMJOkhMPV5BUFxyOlNQPVxFW2k6XAorIwk6SVM9XEVbQDpERT1cRVtQOklMPVxFW0w6TlM9XEVbUzpQUz1cRVtUOlwKKyMJOkxPPVxFWzBxOkxDPVxFWzVxOkxMPVxFWzZxOlwKKyMgQ29tcGFyaXNvbiB3aXRoIHRoZSBrKiBjYXBhYmlsaXRpZXMgbWFrZXMgaXQgb2J2aW91cyB0aGF0IHRoZSBjKiB0aGluZ3MgYXJlCisjIHNoaWZ0IGtleXMuICBJIGhhdmUgcmVuYW1lZCB0aGVtIHRvIGtleXMgMzIgYW5kIHVwIGFjY29yZGluZ2x5LiAgQWxzbywKKyMgOnNyOiB3YXMgZ2l2ZW4gYXMgYSBib29sZWFuLS0gZXNyKQorYWx0b3MyfGFsdDJ8YWx0b3MtMnxhbHRvcyBJSSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgeG1jIzAsCisJY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRVsxQiwgY3VmMT1cRVsxQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbMUEsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVtALAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCBpbDE9XEVbTCwgaW5kPV5KLAorCWlzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIGtETD1eQW1cciwKKwlrRU9MPV5BblxyLCBrYnM9XkgsIGtjYnQ9XkFLXHIsIGtjbHI9XkFMXHIsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XkFNXHIsIGtlbD1eQU5cciwKKwlrZjA9XkFJXHIsIGtmMT1eQUBcciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmMzI9XkFgXHIsCisJa2YzMz1eQWFcciwga2YzND1eQWJcciwga2YzNT1eQWNcciwga2YzNj1eQWRcciwga2YzNz1eQWVcciwKKwlrZjM4PV5BZlxyLCBrZjM5PV5BZ1xyLCBrZjQ9XkFDXHIsIGtmNDA9XkFoXHIsIGtmNDE9XkFpXHIsCisJa2Y0Mj1eQWpcciwga2Y0Mz1eQWtcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwKKwlrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9XEVbZiwga2lsMT1eQUpcciwga2luZD1eQU9cciwKKwluZWw9Xk1eSiwgcm1hbT1cRVs/N2wsIHJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sCisJc21hbT1cRVs/N2gsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisjIChhbHRvczM6IGhhZCBleHRlbnNpb24gY2FwYWJpbGl0aWVzCisjCTpjMD1eQWBccjpjMT1eQWFccjpjMj1eQWJccjpjMz1eQWNccjpcCisjCTpjND1eQWRccjpjNT1eQWVccjpjNj1eQWZccjpjNz1eQWdccjpcCisjCTpjOD1eQWhccjpjOT1eQWlccjpjQT1eQWpccjpjQj1eQWtccjpcCisjCTpjQz1eQWxccjpjRD1eQW1ccjpjRT1eQW5ccjpjRj1eQW9ccjoKKyMJOlhVPV5BcVxyOlhEPV5BclxyOlhSPV5Bc1xyOlhMPV5BdFxyOlwKKyMJOkhMPV5BUFxyOlNQPVxFW2k6XAorIwk6SVM9XEVbQDpERT1cRVtQOklMPVxFW0w6TlM9XEVbUzpQUz1cRVtUOlwKK2FsdG9zM3xhbHRvczV8YWx0M3xhbHQ1fGFsdG9zLTN8YWx0b3MtNXxhbHRvcyBJSUkgb3IgViwKKwlibGluaz1cRVs1cCwgcmk9XEVNLCBzZ3IwPVxFW3AsIHVzZT1hbHRvczIsCithbHRvczR8YWx0NHxhbHRvcy00fGFsdG9zIElWLAorCXVzZT13eTUwLAorIyAoYWx0b3M3OiBoYWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllczoKKyMJOkdHIzA6R0k9XEVIODpHRj1cRUg3OlwKKyMJOmMwPV5BYFxyOmMxPV5BYVxyOmMyPV5BYlxyOmMzPV5BY1xyOlwKKyMJOmM0PV5BZFxyOmM1PV5BZVxyOmM2PV5BZlxyOmM3PV5BZ1xyOlwKKyMJOmM4PV5BaFxyOmM5PV5BaVxyOmNBPV5BalxyOmNCPV5Ba1xyOlwKKyMJOmNDPV5BbFxyOmNEPV5BbVxyOmNFPV5BblxyOmNGPV5Bb1xyOgorIyBDb21wYXJpc29uIHdpdGggdGhlIGsqIGNhcGFiaWxpdGllcyBtYWtlcyBpdCBvYnZpb3VzIHRoYXQgdGhlIGMqIHRoaW5ncyBhcmUKKyMgc2hpZnQga2V5cy4gIEkgaGF2ZSByZW5hbWVkIHRoZW0gdG8ga2V5cyAzMiBhbmQgdXAgYWNjb3JkaW5nbHkuICBJIGhhdmUKKyMgYWxzbyBtYWRlIHRoaXMgZW50cnkgcmVsYXRpdmUgdG8gYWRtMTIgaW4gb3JkZXIgdG8gZ2l2ZSBpdCBhbiA8c2dyPi4gVGhlCisjIDxpbnZpcz4gaW1wb3J0ZWQgYnkgdXNlPWFkbStzZ3IgbWF5IHdvcmssIGxldCBtZSBrbm93LiAtLSBlc3IpCithbHRvczd8YWx0N3xhbHRvcyBWSUksCisJYW0sIG1pciwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzAsCisJYWNzYz1qNWszbDJtMW44cVw6dDR1OXY9dzB4NiwgYmxpbms9XEVHMiwgYm9sZD1cRUd0LAorCWNsZWFyPVxFK15eLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkaW09XEVHcCwgZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGhvbWU9Xl4sIGh0PV5JLCBpbDE9XEVFLAorCWluZD1eSiwgaW52aXM9XEVHMSwKKwlpczI9XEVgXDpcRWUoXEVPXEVlNlxFYzQxXEV+NFxFYzIxXEV1XEV+Miwga0RMPV5BbVxyLAorCWtFT0w9XkFuXHIsIGticz1eSCwga2NidD1eQUtcciwga2Nscj1eQUxcciwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XkFNXHIsIGtlbD1eQU5cciwKKwlrZjA9XkFJXHIsIGtmMT1eQUBcciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmMzI9XkFgXHIsCisJa2YzMz1eQWFcciwga2YzND1eQWJcciwga2YzNT1eQWNcciwga2YzNj1eQWRcciwga2YzNz1eQWVcciwKKwlrZjM4PV5BZlxyLCBrZjM5PV5BZ1xyLCBrZjQ9XkFDXHIsIGtmNDA9XkFoXHIsIGtmNDE9XkFpXHIsCisJa2Y0Mj1eQWpcciwga2Y0Mz1eQWtcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwKKwlrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sIGtpbDE9XkFKXHIsIGtpbmQ9XkFPXHIsCisJa25wPVxFSywga3BwPVxFSiwgbWM0PVxFSiwgbWM1PVxFZCMsIG5lbD1eTV5KLCByaT1cRWosCisJcm1pcj1cRXIsIHNtaXI9XEVxLCB1c2U9YWRtK3NnciwKK2FsdG9zN3BjfGFsdDdwY3xhbHRvcyBQQyBWSUksCisJa2VuZD1cRVQsIHVzZT1hbHRvczcsCisKKyMjIyMgSGV3bGV0dC1QYWNrYXJkIChocCkKKyMKKyMJSGV3bGV0dC1QYWNrYXJkCisjCTgwMDAgRm9vdGhpbGxzIEJsdmQKKyMJUm9zZXZpbGxlLCBDQSA5NTc0NworIwlWb3g6IDEtKDkxNiktNzg1LTQzNjMJKFRlY2huaWNhbCByZXNwb25zZSBsaW5lIGZvciBWRFRzKQorIwkgICAgIDEtKDgwMCktNjMzLTM2MDAJKEdlbmVyYWwgY3VzdG9tZXIgc3VwcG9ydCkKKyMKKyMKKyMgQXMgb2YgTWFyY2ggMTk5OCwgSFAgbm8gbG9uZ2VyIGhhcyBhbnkgdGVybWluYWxzIGluIHByb2R1Y3Rpb24uCisjIFRoZSA3MDAgc2VyaWVzICgyMiwgMzIsIDQxLCA0NCwgOTIsIDk0LCA5NiwgOTgpIGlzIHN0aWxsIGJlaW5nCisjIHN1cHBvcnRlZCAodGhleSBzdGlsbCBoYXZlIHBhcnRzKS4gU28gYXJlIHRoZSAyMzkyYSBhbmQgMjM5NGEuCisjIFNlZSB0aGUgV09SS1NUQVRJT04gQ09OU09MRVMgc2VjdGlvbiBmb3IgdGhlIDcwMHMuCisjCisKKyMgR2VuZXJpYyBIUCB0ZXJtaW5hbCAtIHRoaXMgc2hvdWxkIChob3BlZnVsbHkpIHdvcmsgb24gYW55IEhQIHRlcm1pbmFsLgoraHBnZW5lcmljfGhwfGhld2xldHQtcGFja2FyZCBnZW5lcmljIHRlcm1pbmFsLAorCU9UYnMsIE9UcHQsIGFtLCBkYSwgZGIsIG1pciwgeGhwLAorCWNvbHMjODAsIGxpbmVzIzI0LCBsbSMwLCB2dCM2LAorCWJlbD1eRywgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFJmElcDIlZGMlcDElZFkkPDY+LCBjdXUxPVxFQSwgZGNoMT1cRVAsIGRsMT1cRU0sCisJZWQ9XEVKLCBlbD1cRUssIGhwYT1cRSZhJXAxJWRDLCBodD1eSSwgaHRzPVxFMSwgaWwxPVxFTCwKKwlpbmQ9XkosIGticz1eSCwga2NidD1cRWksIHJtaXI9XEVSLCBybXNvPVxFJmRALCBybXVsPVxFJmRALAorCXNncjA9XEUmZEAsIHNtaXI9XEVRLCBzbXNvPVxFJmRKLCBzbXVsPVxFJmRELCB0YmM9XEUzLAorCXZwYT1cRSZhJXAxJWRZLAorCitocDExMHxoZXdsZXR0LXBhY2thcmQgbW9kZWwgMTEwIHBvcnRhYmxlLAorCWxpbmVzIzE2LCB1c2U9aHBnZW5lcmljLAorCitocCtwZmsrY3J8aHAgZnVuY3Rpb24ga2V5cyB3aXRoIENSLAorCWtmMT1cRXBcciwga2YyPVxFcVxyLCBrZjM9XEVyXHIsIGtmND1cRXNcciwga2Y1PVxFdFxyLAorCWtmNj1cRXVcciwga2Y3PVxFdlxyLCBrZjg9XEV3XHIsCisKK2hwK3Bmay1jcnxocCBmdW5jdGlvbiBrZXlzIHcvbyBDUiwKKwlrZjE9XEVwLCBrZjI9XEVxLCBrZjM9XEVyLCBrZjQ9XEVzLCBrZjU9XEV0LCBrZjY9XEV1LCBrZjc9XEV2LAorCWtmOD1cRXcsCisKKyMgVGhlIGhwMjYyMXMgdXNlIHRoZSBzYW1lIGtleXMgZm9yIHRoZSBhcnJvd3MgYW5kIGZ1bmN0aW9uIGtleXMsCisjIGJ1dCBub3Qgc2VwYXJhdGUgZXNjYXBlIHNlcXVlbmNlcy4gVGhlc2UgZGVmaW5pdGlvbnMgYWxsb3cgdGhlCisjIHVzZXIgdG8gdXNlIHRob3NlIGtleXMgYXMgYXJyb3cga2V5cyByYXRoZXIgdGhhbiBhcyBmdW5jdGlvbgorIyBrZXlzLgoraHArcGZrK2Fycm93c3xocCBhbHRlcm5hdGUgYXJyb3cgZGVmaW5pdGlvbnMsCisJa2N1YjE9XEV1XHIsIGtjdWQxPVxFd1xyLCBrY3VmMT1cRXZcciwga2N1dTE9XEV0XHIsIGtmMUAsCisJa2YyQCwga2YzQCwga2Y0QCwga2Y1QCwga2Y2QCwga2Y3QCwga2Y4QCwga2hvbWU9XEVwXHIsIGtpbmQ9XEVyXHIsCisJa2xsPVxFcVxyLCBrcmk9XEVzXHIsCisKK2hwK2Fycm93c3xocCBhcnJvdyBkZWZpbml0aW9ucywKKwlrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFaCwKKwlraW5kPVxFUywga2xsPVxFRiwga3JpPVxFVCwKKworIyBHZW5lcmljIHN0dWZmIGZyb20gdGhlIEhQIDI2Mnggc2VyaWVzCisjCitocDI2Mnh8SFAgMjYyeCB0ZXJtaW5hbHMsCisJeGhwLAorCWJsaW5rPVxFJmRBLCBkY2gxPVxFUCQ8Mj4sIGVkPVxFSiwgaHQ9XDAxMSQ8Mj4sIGluZD1cRVMsCisJaW52aXM9XEUmZFMsIGlwPSQ8Mj4sIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLCBrZWQ9XEVKLCBrZWw9XEVLLCBraG9tZT1cRWgsCisJa2ljaDE9XEVRLCBraWwxPVxFTCwga2luZD1cRVMsIGtucD1cRVUsIGtwcD1cRVYsIGtyaT1cRVQsCisJa3JtaXI9XEVSLCByZXY9XEUmZEIsIHJta3g9XEUmczBBLCBybXNvPVxFJmRALCBybXVsPVxFJmRALAorCXNncj1cRSZkJXs2NH0lPyVwMSV0JXs2Nn0lfCU7JT8lcDIldCV7Njh9JXwlOyU/JXAzJXQlezY2fSV8JTslPyVwNCV0JXs2NX0lfCU7JWMsCisJc2dyMD1cRSZkQCwgc21reD1cRSZzMUEsIHNtc289XEUmZEIsIHNtdWw9XEUmZEQsCisKKyMgTm90ZTogbm8gPGhvbWU+IG9uIEhQcyBzaW5jZSB0aGF0IGhvbWVzIHRvIHRvcCBvZiBtZW1vcnksIG5vdCBzY3JlZW4uCisjIER1ZSB0byBzZXZlcmUgMjYyMSBicmFpbmRhbWFnZSwgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgYXJyb3cga2V5cyB0bworIyB0cmFuc21pdCBhbnl0aGluZyBhdCBhbGwgaXMgdG8gdHVybiBvbiB0aGUgZnVuY3Rpb24ga2V5IGxhYmVscworIyB3aXRoIDxzbWt4PiwgYW5kIGV2ZW4gdGhlbiB0aGUgdXNlciBoYXMgdG8gaG9sZCBkb3duIHNoaWZ0IQorIyBUaGUgZGVmYXVsdCAyNjIxIHR1cm5zIG9mZiB0aGUgbGFiZWxzIGV4Y2VwdCB3aGVuIGl0IGhhcyB0byB0bworIyBlbmFibGUgdGhlIGZ1bmN0aW9uIGtleXMuIElmIHlvdXIgaW5zdGFsbGF0aW9uIHByZWZlcnMgbGFiZWxzCisjIG9uIGFsbCB0aGUgdGltZSwgb3Igb2ZmIGFsbCB0aGUgdGltZSAoYXQgdGhlICJleHBlbnNlIiBvZiB0aGUKKyMgZnVuY3Rpb24ga2V5cyksIHVzZSAyNjIxLW5sIG9yIDI2MjEtd2wuCisjCisjIE5vdGU6IHRoZXJlIGFyZSBuZXdlciBST01zIGZvciAyNjIxJ3MgdGhhdCBhbGxvdyB5b3UgdG8gc2V0CisjIHN0cmFwIEEgc28gdGhlIHJlZ3VsYXIgYXJyb3cga2V5cyB4bWl0IFxFQSwgZXRjLCBhcyB3aXRoIHRoZQorIyAyNjQ1LiBIb3dldmVyLCBldmVuIHdpdGggdGhpcyBzdHJhcCBzZXQsIHRoZSB0ZXJtaW5hbCBzdG9wcworIyB4bWl0dGluZyBpZiB5b3UgcmVzZXQgaXQsIHVudGlsIHlvdSB1bnNldCBhbmQgcmVzZXQgdGhlIHN0cmFwIQorIyBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gc2V0L3Vuc2V0IHRoZSBzdHJhcCB3aXRoIGFuIGVzY2FwZQorIyBzZXF1ZW5jZSwgd2UgZG9uJ3QgdXNlIGl0IGluIHRoZSBkZWZhdWx0LgorIyBJZiB5b3UgbGlrZSwgeW91IGNhbiB1c2UgMjYyMS1iYSAoYnJhaW4tZGFtYWdlZCBhcnJvdyBrZXlzKS4KK2hwMjYyMS1iYXwyNjIxIHcvbmV3IHJvbSBhbmQgc3RyYXAgQSBzZXQsCisJcm1reEAsIHNta3hALCB1c2U9aHArYXJyb3dzLCB1c2U9aHAyNjIxLAorCisjIGhwMjYyMSB3aXRoIGZ1bmN0aW9uIGxhYmVscy4gTW9zdCBvZiB0aGUgdGltZSB0aGV5IGFyZSBvZmYsCisjIGJ1dCBpbnNpZGUgdmksIHRoZSBmdW5jdGlvbiBrZXkgbGFiZWxzIGFwcGVhci4gWW91IGhhdmUgdG8KKyMgaG9sZCBkb3duIHNoaWZ0IHRvIGdldCB0aGVtIHRvIHhtaXQuCitocDI2MjF8aHAyNjIxYXxocDI2MjFBfDI2MjF8MjYyMWF8MjYyMUF8aHAyNjIxLXdsfDI2MjEtd2x8aHAgMjYyMSB3L2xhYmVscywKKwlpczI9XEUmakFcciwgcm1reD1cRSZqQSwgdXNlPWhwMjYyMS1mbCwKK2hwMjYyMS1mbHxocCAyNjIxLAorCXhocEAsIHhvbiwKKwlwYiMxOTIwMCwKKwljYnQ9XEVpLCBjdXA9XEUmYSVwMiVkYyVwMSVkWSwgZGNoMT1cRVAkPDI+LCBodD1cMDExJDwyPiwKKwlpcD0kPDI+LCBpczI9XEUmakBcciwgcm1reD1cRSZqQCwgcm1zbz1cRSZkQCwgcm11bD1cRSZkQCwKKwlzZ3IwPVxFJmRALCBzbWt4PVxFJmpCLCBzbXNvPVxFJmRELCBzbXVsPVxFJmRELAorCXVzZT1ocCtwZmsrY3IsIHVzZT1ocGdlbmVyaWMsCisKKyMgVG8gdXNlIGhwMjYyMXAgcHJpbnRlciwgc2V0ZW52IFRFUk09MjYyMXAsIFBSSU5URVI9MjYxMnAKK2hwMjYyMXB8aHAgMjYyMSB3aXRoIHByaW50ZXIsCisJbWM0PVxFJnAxM0MsIG1jNT1cRSZwMTFDLCB1c2U9aHAyNjIxLAorCitocDI2MjFwLWF8aHAyNjIxcCB3aXRoIGZuIGFzIGFycm93cywKKwl1c2U9aHArcGZrK2Fycm93cywgdXNlPWhwMjYyMXAsCisKKyMgaHAyNjIxIHdpdGggazQ1IGtleWJvYXJkCitocDI2MjEtazQ1fGhwMjYyMWs0NXxrNDV8aHAgMjYyMSB3aXRoIDQ1IGtleWJvYXJkLAorCWticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLAorCWtob21lPVxFaCwgcm1reD1cRSZzMEEsIHNta3g9XEUmczFBLCB1c2U9aHAyNjIxLAorCisjIDI2MjEgdXNpbmcgYWxsIDQ4IGxpbmVzIG9mIG1lbW9yeSwgb25seSAyNCB2aXNpYmxlIGF0IGFueSB0aW1lLgoraHAyNjIxLTQ4fDQ4IGxpbmUgMjYyMSwKKwlsaW5lcyM0OCwKKwljdXA9XEUmYSVwMiVkYyVwMSVkUiwgaG9tZT1cRUgsIHZwYT1cRSZhJXAxJWRSLAorCXVzZT1ocDI2MjEsCisKKyMgMjYyMSB3aXRoIG5vIGxhYmVscyBldmVyLiBBbHNvIHByZXZlbnRzIHZpIGRlbGF5cyBvbiBlc2NhcGUuCitocDI2MjEtbmx8aHAgMjYyMSB3aXRoIG5vIGxhYmVscywKKwlrY3ViMUAsIGtjdWQxQCwga2N1ZjFALCBrY3V1MUAsIGtob21lQCwgcm1reEAsIHNta3hALAorCXVzZT1ocDI2MjEtZmwsCisKKyMgTmVlZGVkIGZvciBVQ0IgQVJQQVZBWCBjb25zb2xlLCBzaW5jZSBsc2ktMTEgZXhwYW5kcyB0YWJzCisjICh3cm9uZykuCisjCitocDI2MjEtbnR8aHAgMjYyMSB3L25vIHRhYnMsCisJaHRALCB1c2U9aHAyNjIxLAorCisjIEhwIDI2MjQgQiB3aXRoIDQgb3IgMTAgcGFnZXMgb2YgbWVtb3J5LgorIworIyBTb21lIGFzc3VtcHRpb25zIGFyZSBtYWRlIHdpdGggdGhpcyBlbnRyeS4gVGhlc2Ugc2V0dGluZ3MgYXJlCisjIE5PVCBzZXQgdXAgYnkgdGhlIGluaXRpYWxpemF0aW9uIHN0cmluZ3MuCisjCisjIFBvcnQgQ29uZmlndXJhdGlvbgorIyAJUmVjdlBhY2U9WG9uL1hvZmYKKyMgCVhtaXRQYWNlPVhvbi9Yb2ZmCisjIAlTdHJpcE51bERlbD1ZZXMKKyMKKyMgVGVybWluYWwgQ29uZmlndXJhdGlvbgorIyAJSW5oSG5kU2hrPVllcworIyAJSW5oREMyPVllcworIyAJWG1pdEZuY3RuKEEpPU5vCisjIAlJbmhFb2xXcnA9Tm8KKyMKKyMgTm90ZTogdGhlIDI2MjQgRE9FUyBoYXZlIGEgdHJ1ZSA8aG9tZT4sIGJlbGlldmUgaXQgb3Igbm90IQorIworIyBUaGUgMjYyNCBoYXMgYW4gImVycm9yIGxpbmUiIHRvIHdoaWNoIG1lc3NhZ2VzIGNhbiBiZSBzZW50LgorIyBUaGlzIGlzIENMT1NFIHRvIHdoYXQgaXMgZXhwZWN0ZWQgZm9yIGEgInN0YXR1cyBsaW5lIi4gSG93ZXZlciwKKyMgYWZ0ZXIgYSBtZXNzYWdlIGlzIHNlbnQgdG8gdGhlICJlcnJvciBsaW5lIiwgdGhlIG5leHQgY2FycmlhZ2UKKyMgcmV0dXJuIGlzIEVBVEVOIGFuZCB0aGUgImVycm9yIGxpbmUiIGlzIHR1cm5lZCBiYWNrIG9mZiBhZ2FpbiEKKyMgU28gSSBndWVzcyB3ZSBjYW4ndCBkZWZpbmUgPGhzPiwgPGVzbG9rPiwgPHdzbD4sIDxkc2w+LCA8ZnNsPiwgPHRzbD4uCisjCisjIFRoaXMgZW50cnkgc3VwcG9ydHMgZW1hY3MgKGFuZCBhbnkgb3RoZXIgcHJvZ3JhbSB0aGF0IHVzZXMgcmF3CisjIG1vZGUpIGF0IDQ4MDAgYmF1ZCBhbmQgbGVzcy4gSSBjb3VsZG4ndCBnZXQgdGhlIHBhZGRpbmcgcmlnaHQKKyMgZm9yIDk2MDAuCisjCisjIChocDI2MjQ6IHJlcGxhY2VkIE5VTCBzZXF1ZW5jZXMgaW4gZmxhc2ggd2l0aCBtYW5kYXRvcnkgcGF1c2VzIC0tIGVzcikKK2hwMjYyNHxocDI2MjRhfGhwMjYyNGJ8aHAyNjI0Yi00cHxIZXdsZXR0IFBhY2thcmQgMjYyNCBCLAorCWRhLCBkYiwKKwlsbSM5NiwKKwlmbGFzaD1cRSZ3MTNGJDw2Ni8+XEUmdzEyRiQ8NjYvPlxFJncxM0YkPDY2Lz5cRSZ3MTJGLAorCXVzZT1ocCtsYWJlbHMsIHVzZT1zY3JocCwKKworIyBUaGlzIGhwMjYyNiBlbnRyeSBkb2VzIG5vdCB1c2UgYW55IG9mIHRoZSBmYW5jeSB3aW5kb3dpbmcgc3R1ZmYKKyMgb2YgdGhlIDI2MjYuCisjCisjIEluZGVlZCwgdGVybWluZm8gZG9lcyBub3QgeWV0IGhhbmRsZSBzdWNoIHN0dWZmLiBTaW5jZSBjaGFuZ2luZworIyBhbnkgd2luZG93IGNsZWFycyBtZW1vcnksIGl0IGlzIHByb2JhYmx5IG5vdCBwb3NzaWJsZSB0byB1c2UKKyMgdGhpcyBmb3Igc2NyZWVuIG9wdC4KKyMKKyMgZWQgaXMgaW5jcmVkaWJseSBzbG93IG1vc3Qgb2YgdGhlIHRpbWUgLSBJIGFtIGd1ZXNzaW5nIGF0IHRoZQorIyBleGFjdCBwYWRkaW5nLiBTaW5jZSB0aGUgdGVybWluYWwgdXNlcyB4b2ZmL3hvbiB0aGlzIGlzIGludGVuZGVkCisjIG9ubHkgZm9yIGNvc3QgY29tcHV0YXRpb24sIHNvIHRoYXQgdGhlIHRlcm1pbmFsIHdpbGwgcHJlZmVyIGVsCisjIG9yIGV2ZW4gZGwxIHdoaWNoIGlzIHByb2JhYmx5IGZhc3RlciEKKyMKKyMgXEVEXEVKXEVDIGhhY2sgZm9yIGVkIGZyb20gRWQgQnJhZGZvcmQgLSBhcHBhcmVudGx5IGVkIGlzIG9ubHkKKyMgZXh0cmEgc2xvdyBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSB3aW5kb3cuCisjCisjIFRoZSBwYWRkaW5nIHByb2JhYmx5IHNob3VsZCBiZSBjaGFuZ2VkLgorIworaHAyNjI2fGhwMjYyNmF8aHAyNjI2cHxocCAyNjI2LAorCWRhLCBkYiwKKwlsbSMwLCBwYiMxOTIwMCwKKwllZD1cRURcRUokPDUwMD5cRUMsIGluZG49XEUmciVwMSVkRCwgaXA9JDw0PiwKKwlpczI9XEUmakBcciwgcmluPVxFJnIlcDElZFUsIHVzZT1ocCtwZmsrY3IsCisJdXNlPWhwK2xhYmVscywgdXNlPXNjcmhwLAorCisjIFRoaXMgZW50cnkgaXMgZm9yIHN5c2xpbmUuIEl0IGFsbG9jYXRlcyBhIDIzIGxpbmUgd2luZG93IHdpdGgKKyMgYSAxMTUgbGluZSB3b3Jrc3BhY2UgZm9yIHJlZ3VsYXIgdXNlLCBhbmQgYSAxIGxpbmUgd2luZG93IGZvcgorIyB0aGUgc3RhdHVzIGxpbmUuCisjCisjIFRoaXMgYXNzdW1lcyBwb3J0IDIgaXMgYmVpbmcgdXNlZC4KKyMgVHVybiBvZmYgaG9yaXpvbnRhbCBsaW5lLCBDcmVhdGUgd3MgIzEgd2l0aCAxMTUgbGluZXMsCisjIENyZWF0ZSB3cyAjMiB3aXRoIDEgbGluZSwgQ3JlYXRlIHdpbmRvdyAjMSBsaW5lcyAxLTIzLAorIyBDcmVhdGUgd2luZG93ICMyIGxpbmVzIDI0LTI0LCBBdHRhY2ggY3Vyc29yIHRvIHdvcmtzcGFjZSAjMS4KKyMgTm90ZSB0aGF0IHRoaXMgY2xlYXJzIHRoZSB0YWJzIHNvIGl0IG11c3QgYmUgZG9uZSBieSB0c2V0IGJlZm9yZQorIyBpdCBzZXRzIHRoZSB0YWJzLgorIworaHAyNjI2LXN8aHAgMjYyNiB1c2luZyBvbmx5IDIzIGxpbmVzLAorCWVzbG9rLCBocywKKwlsaW5lcyMyMywKKwlmc2w9XEUmZEBcRSZ3N2YycDFJXEUmdzRmMUksCisJaXMxPVxFJnEzdDB7MEggXEUmdzBmMTE1bjFJIFxFJncwZjFuMkkgXEUmdzJmMWkwZDB1MjJsMFMgXEUmdzJmMmkwZDIzdTIzbDBTIFxFJnc3ZjJwMUkgXHIsCisJdHNsPVxFJnc3ZjJwMklcRSZ3NGYySVxyXEVLXEUmYSVwMSVkQywgdXNlPWhwMjYyNiwKKyMgRm9yY2UgdGVybWluYWwgYmFjayB0byAyNCBsaW5lcyBhZnRlciBiZWluZyAyMy4KK2hwMjYyNi1uc3xocCAyNjI2IHVzaW5nIGFsbCAyNCBsaW5lcywKKwlpczE9XEUmcTN0MHswSCBcRSZ3MGYxMThuMUkgXEUmdzBmMW4ySSBcRSZ3MmYxaTBkMHUyM2wwUyBcRSZ3M2YySSBcRSZ3N2YycDFJIFxyLAorCXVzZT1ocDI2MjYsCisjIFZhcmlvdXMgZW50cmllcyB1c2VmdWwgZm9yIHNtYWxsIHdpbmRvd3Mgb24gMjYyNi4KK2hwMjYyNi0xMnxoZXdsZXR0LXBhY2thcmQgMjYyNiAxMiBsaW5lcywKKwlsaW5lcyMxMiwgdXNlPWhwMjYyNiwKK2hwMjYyNi0xMng0MHxoZXdsZXR0LXBhY2thcmQgMjYyNiAxMiBsaW5lcyA0MCBjb2x1bW5zLAorCWNvbHMjNDAsIGxpbmVzIzEyLCB1c2U9aHAyNjI2LAoraHAyNjI2LXg0MHxoZXdsZXR0LXBhY2thcmQgMjYyNiA0MCBjb2x1bW5zLAorCWNvbHMjNDAsIHVzZT1ocDI2MjYsCitocDI2MjYtMTItc3xoZXdsZXR0LXBhY2thcmQgMjYyNiAxMSBsaW5lcyBwbHVzIHN0YXR1cywKKwlsaW5lcyMxMSwgdXNlPWhwMjYyNi1zLAorCisjCisjIGhwMjYyNyBjb2xvciB0dWJlcyBmcm9tIFVuaXZlcnNpdHkgb2YgV2lzY29uc2luCisjCitocDI2MjdhLXJldnxocCAyNjI3IHdpdGggcmV2ZXJzZSB2aWRlbyBjb2xvcnMsCisJY3I9Xk0sIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosCisJaXMyPVxFJnYwbTFhMGIwYzF4MXkxejFpMGEwYjFjMXgxeTF6MGkwU1xFJmpAXHJcRTNcciwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwgbmVsPV5NXkosIHJtdWw9XEUmdjBTXEUmZEAsCisJc211bD1cRSZkRFxFJnYxUywgdXNlPWhwMjYyMS1ubCwKK2hwMjYyN2F8aHAgMjYyNyBjb2xvciB0ZXJtaW5hbCB3aXRoIG5vIGxhYmVscywKKwljcj1eTSwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwKKwlpczI9XEUmdjBtMWExYjBjMWkwYTFiMWMyaTFhMGIwYzBpMFNcRSZqQFxyXEUzXHIsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLCBybXNvPVxFJnYwUywKKwlybXVsPVxFJnYwU1xFJmRALCBzbXNvPVxFJnYyUywgc211bD1cRSZkRFxFJnYxUywKKwl1c2U9aHAyNjIxLW5sLAoraHAyNjI3Y3xocCAyNjI3IGNvbG9yIChjeWFuKSB0ZXJtaW5hbCB3aXRoIG5vIGxhYmVscywKKwljcj1eTSwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwKKwlpczI9XEUmdjBtMWEwYjBjMmkxYTFiMGMxaTBhMWIxYzBpMFNcRSZqQFxyXEUzXHIsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLCB1c2U9aHAyNjI3YSwKKworIyBocDI2NDBhIGRvZXNuJ3QgaGF2ZSB0aGUgWSBjdXJzb3IgYWRkcmVzc2luZyBmZWF0dXJlLCBhbmQgQyBpcworIyBtZW1vcnkgcmVsYXRpdmUgaW5zdGVhZCBvZiBzY3JlZW4gcmVsYXRpdmUsIGFzIHdlIG5lZWQuCisjCitocDI2NDBhfGhwIDI2NDBhLAorCWN1cEAsIHJta3hALCBzbWt4QCwgdXNlPWhwMjY0NSwKKworaHAyNjQwYnxocDI2NDRhfGhwIDI2NHggc2VyaWVzLAorCXJta3hALCBzbWt4QCwgdXNlPWhwMjY0NSwKKworIyAoaHAyNjQxYTogcmVtb3ZlZCB1bmtub3duIDpndTogLS0gZXNyKQoraHAyNjQxYXxocDI2NDVhfGhwMjY0N2F8SFAgMjY0P0Egc2VyaWVzIEJSTCBlbnRyeSwKKwlhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRSZhJXAyJTJkYyVwMSUyZFksIGN1dTE9XEVBLCBkY2gxPVxFUCwgZGwxPVxFTSwKKwllZD1cRUosIGVsPVxFSywgaHBhPVxFJmElcDElMmRDLCBodD1eSSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGQsIGlsMT1cRUwsIGluZD1eSiwKKwlpczI9XEVFJDw1MDAvPiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLAorCXJtaXI9XEVSLCBybXNvPVxFJmRALCBzbWlyPVxFUSwgc21zbz1cRSZkQiwKKwl2cGE9XEUmYSVwMSUyZFksCisKKyMgVGhpcyB0ZXJtaW5hbCBzaG91bGQgYmUgdXNlZCBhdCA0ODAwIGJhdWQgb3IgbGVzcy4gSXQgbmVlZHMgcGFkZGluZyBmb3IKKyMgcGxhaW4gY2hhcmFjdGVycyBhdCA5NjAwLCBJIGd1ZXNzZWQgYXQgYW4gYXBwcm9wcmlhdGUgY3IgZGVsYXkuICBJdCByZWFsbHkKKyMgd2FudHMgXkUvXkYgaGFuZHNoYWtpbmcsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB3ZWxsIGV2ZW4gaWYgeW91IHdyaXRlCisjIHNvZnR3YXJlIHRvIHN1cHBvcnQgaXQuCitocDI2NDV8aHA0NXxIUCAyNjQ1IHNlcmllcywKKwlwYiM5NjAwLAorCWJsaW5rPVxFJmRBLCBjcj1cciQ8MjA+LCBkaW09XEUmZEgsIGtjdGFiPVxFMiwga2N1YjE9XEVELAorCWtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtkY2gxPVxFUCwga2RsMT1cRU0sCisJa2VkPVxFSiwga2VsPVxFSywga2hvbWU9XEVoLCBraHRzPVxFMSwga2ljaDE9XEVRLCBraWwxPVxFTCwKKwlraW5kPVxFUywga25wPVxFVSwga3BwPVxFViwga3JpPVxFVCwga3JtaXI9XEVSLCByZXY9XEUmZEIsCisJcm1reD1cRSZzMEEsCisJc2dyPVxFJmQlezY0fSU/JXAxJXQlezY2fSV8JTslPyVwMiV0JXs2OH0lfCU7JT8lcDMldCV7NjZ9JXwlOyU/JXA0JXQlezY1fSV8JTslPyVwNSV0JXs3Mn0lfCU7JT8lcDYldCV7NjZ9JXwlOyVjLAorCXNncjA9XEUmZEAsIHNta3g9XEUmczFBLCBzbXVsPVxFJmRELCB1c2U9aHBnZW5lcmljLAorIyBZb3Ugc2hvdWxkIHVzZSB0aGlzIHRlcm1pbmFsIGF0IDQ4MDAgYmF1ZCBvciBsZXNzLgoraHAyNjQ4fGhwMjY0OGF8SFAgMjY0OGEgZ3JhcGhpY3MgdGVybWluYWwsCisJY2xlYXI9XEVIXEVKJDw1MD4sIGN1cD1cRSZhJXAyJWRjJXAxJWRZJDwyMD4sCisJZGNoMT1cRVAkPDc+LCBpcD0kPDU+LCB1c2U9aHAyNjQ1LAorCisjIFRoZSBIUCAxNTAgdGVybWluYWwgaXMgYSBmYWlybHkgdmFuaWxsYSBIUCB0ZXJtaW5hbCwgd2l0aCB0aGUKKyMgY2xyZW9sIHN0YW5kb3V0IHByb2JsZW0uIEl0IGFsc28gaGFzIGdyYXBoaWNzIGNhcGFiaWxpdGllcyBhbmQKKyMgYSB0b3VjaCBzY3JlZW4sIHdoaWNoIHdlIGRvbid0IGRlc2NyaWJlIGhlcmUuCitocDE1MHxoZXdsZXR0IHBhY2thcmQgTW9kZWwgMTUwLAorCU9UYnMsIHVzZT1ocDI2MjIsCisKKyMgSFAgMjM4MmEgdGVybWluYWxzLCAidGhlIGxpdHRsZSBvbmVzLiIgVGhleSBkb24ndCBoYXZlIGFueQorIyBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBzdXBwb3J0IGFuZCBzZW5kaW5nIG91dCBeTi9eTyB3aWxsCisjIGxlYXZlIHRoZSBzY3JlZW4gYmxhbmsuCitocDIzODJhfGhwMjM4MnxoZXdsZXR0IHBhY2thcmQgMjM4MmEsCisJZGEsIGRiLAorCWxoIzEsIGxtIzQ4LAorCWFjc2NALAorCXBsbj1cRSZmMGElcDElZGslcDIlbCVQYSU/JWdhJXQlZ2ElZCVlMSU7ZDBMJT8lZ2ElISV0ICU7JXAyJXMsCisJcm1hY3NALAorCXNncj1cRSZkJXswfSVQYSU/JXA0JXQlezF9JWdhJSslUGElOyU/JXAxJXAzJXwlcDYlfCV0JXsyfSVnYSUrJVBhJTslPyVwMiVwNiV8JXQlezR9JWdhJSslUGElOyU/JXAxJXA1JXwldCV7OH0lZ2ElKyVQYSU7JT8lcDcldCU/JWdhJXRzJWdhJXs2NH0lKyVlJXs4M30lOyVlJT8lZ2EldCVnYSV7NjR9JSslZSV7NjR9JTslOyVjLAorCXNncjA9XEUmZEAsIHNtYWNzQCwgdXNlPWhwK2xhYmVscywgdXNlPXNjcmhwLAorCitocDI2MjEtYXxocDI2MjFhLWF8aHAyNjIxIHdpdGggZm4gYXMgYXJyb3dzLAorCXVzZT1ocCtwZmsrYXJyb3dzLCB1c2U9aHAyNjIxLWZsLAorCisjIG5ld2VyIGhld2xldHQgcGFja2FyZCB0ZXJtaW5hbHMKKworbmV3aHBrZXlib2FyZHxnZW5lcmljIGVudHJ5IGZvciBIUCBleHRlbmRlZCBrZXlib2FyZCwKKwlrYnM9XkgsIGtjYnQ9XEVpLCBrY2xyPVxFSiwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtkY2gxPVxFUCwga2RsMT1cRU0sIGtlZD1cRUosIGtlbD1cRUssIGtob21lPVxFaCwKKwlraWNoMT1cRVEsIGtpbDE9XEVMLCBraW5kPVxFVCwga2xsPVxFRiwga25wPVxFVSwga3BwPVxFViwKKwlrcmk9XEVTLCBrcm1pcj1cRVIsIHJta3g9XEUmczBBLCBzbWt4PVxFJnMxQSwKKwl1c2U9aHArcGZrLWNyLAorCituZXdocHxnZW5lcmljIGVudHJ5IGZvciBuZXcgaGV3bGV0dCBwYWNrYXJkIHRlcm1pbmFscywKKwlhbSwgYncsIG1pciwgeGhwLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHBiIzQ4MDAsCisJYWNzYz0yWzNAND41STkoXDonSlNLV0xRTUFPI1AkUTtSIVMiVDFVMlY0VzNYXDpZK1oqZEhqR2tUbFJtRm4vcVwsdDV1NnY4dzd4LiwKKwliZWw9XkcsIGJsaW5rPVxFJmRBLCBib2xkPVxFJmRGLCBjYnQ9XEVpLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPVxFQywgY3V1MT1cRUEsIGRjaDE9XEVQJDwyPiwgZGltPVxFJmRILAorCWRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBodD1cMDExJDwyPiwgaHRzPVxFMSwgaWwxPVxFTCwgaW5kPV5KLAorCWludmlzPVxFJmRTLCBpcD0kPDI+LCBpczE9XEUmakIkPDg+LCBuZWw9Xk1eSiwKKwlwZmtleT1cRSZmMGElcDElZGswZCVwMiVsJWRMJXAyJXMsCisJcGZsb2M9XEUmZjFhJXAxJWRrMGQlcDIlbCVkTCVwMiVzLAorCXBmeD1cRSZmMmElcDElZGswZCVwMiVsJWRMJXAyJXMsIHJldj1cRSZkQiwgcmk9XEVULAorCXJtYWNzPV5PLCBybWlyPVxFUiwgcm1zbz1cRSZkQCwgcm11bD1cRSZkQCwgcnMxPVxFZywKKwlzZ3I9XEUmZCV7MH0lUGElPyVwNCV0JXsxfSVnYSUrJVBhJTslPyVwMSVwMyV8JXA2JXwldCV7Mn0lZ2ElKyVQYSU7JT8lcDIlcDYlfCV0JXs0fSVnYSUrJVBhJTslPyVwMSVwNSV8JXQlezh9JWdhJSslUGElOyU/JXA3JXQlPyVnYSV0cyVnYSV7NjR9JSslZSV7ODN9JTslZSU/JWdhJXQlZ2ElezY0fSUrJWUlezY0fSU7JTslYyU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRSZkQFwwMTcsIHNtYWNzPV5OLCBzbWlyPVxFUSwgc21zbz1cRSZkSiwgc211bD1cRSZkRCwKKwl0YmM9XEUzLCB1c2U9bmV3aHBrZXlib2FyZCwKKworbWVtaHB8bWVtb3J5IHJlbGF0aXZlIGFkZHJlc3NpbmcgZm9yIG5ldyBIUCB0dHlzLAorCXZ0IzYsCisJY2xlYXI9XEVIXEVKJDw0MD4sIGN1Yj1cRSZhLSVwMSVkQywgY3VkPVxFJmErJXAxJWRSLAorCWN1Zj1cRSZhKyVwMSVkQywgY3VwPVxFJmElcDElZHIlcDIlZEMsIGN1dT1cRSZhLSVwMSVkUiwKKwlob21lPVxFSCwgaHBhPVxFJmElcDElZEMsIGxsPVxFJmEyM1JcciwKKwltcmN1cD1cRSZhJXAxJWRyJXAyJWRDLCB2cGE9XEUmYSVwMSVkUiwgdXNlPW5ld2hwLAorCitzY3JocHxzY3JlZW4gcmVsYXRpdmUgYWRkcmVzc2luZyBmb3IgbmV3IEhQIHR0eXMsCisJY2xlYXI9XEUmYTBjMFlcRUokPDQwPiwgY3ViPVxFJmEtJXAxJWRDLAorCWN1ZD1cRSZhKyVwMSVkUiwgY3VmPVxFJmErJXAxJWRDLAorCWN1cD1cRSZhJXAxJWR5JXAyJWRDJDwxMD4sIGN1dT1cRSZhLSVwMSVkUiwKKwlob21lPVxFJmEweTBDLCBocGE9XEUmYSVwMSVkQywgbGw9XEUmYTB5MENcRUEsCisJbXJjdXA9XEUmYSVwMSVkciVwMiVkQywgdnBhPVxFJmElcDElZFksIHVzZT1uZXdocCwKKworIyAoaHArbGFiZWxzOiBhZGRlZCBsYWJlbCB2YWx1ZXMgZnJvbSBhIEJSTCB0ZXJtY2FwIC0tIGVzcikKK2hwK2xhYmVsc3wic3RhbmRhcmQiIGxhYmVsIGluZm8gZm9yIG5ldyBIUCB0dHlzLAorCWxoIzIsIGx3IzgsIG5sYWIjOCwKKwlsZjA9ZjEsIGxmMT1mMiwgbGYyPWYzLCBsZjM9ZjQsIGxmND1mNSwgbGY1PWY2LCBsZjY9ZjcsIGxmNz1mOCwKKwlwbG49XEUmZjJhJXAxJWRrJXAyJWwlUGElPyVnYSV0JWdhJWQlZTElO2QwTCU/JWdhJSEldCAlOyVwMiVzLAorCXJtbG49XEUmakAsIHNtbG49XEUmakIsCisKK2hwK3ByaW50ZXJ8InN0YW5kYXJkIiBwcmludGVyIGluZm8gZm9yIEhQIHR0eXMsCisJZmY9XEUmcDR1MEMsIG1jMD1cRUhcRSZwNGRGLCBtYzQ9XEUmcDEzQywgbWM1PVxFJnAxMUMsCisKKworIyBUaGUgbmV3IGhwMjYyMWIgaXMga2luZCBvZiBhIGNyb3NzIGJldHdlZW4gdGhlIG9sZCAyNjIxIGFuZCB0aGUKKyMgbmV3IDI2Mnggc2VyaWVzIG9mIG1hY2hpbmVzLiBJdCBoYXMgZGlwLXN3aXRjaGVkIG9wdGlvbnMuCisjIFRoZSBmaXJtd2FyZSBoYXMgYSBidWcgaW4gaXQgc3VjaCB0aGF0IGlmIHlvdSBnaXZlIGl0IGEgbnVsbAorIyBsZW5ndGggbGFiZWwsIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIGVhdGVuIQoraHAyNjIxYnxocCAyNjIxYiB3aXRoIG9sZCBzdHlsZSBrZXlib2FyZCwKKwlsaCMxLCBsbSM0OCwgbHcjOCwgbmxhYiM4LAorCWtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2hvbWU9XEVoLAorCWtpbmQ9XEVULCBrbGw9XEVGLCBrcmk9XEVTLAorCXBsbj1cRSZmMGElcDElZGslcDIlbCVQYSU/JWdhJXQlZ2ElZCVlMSU7ZDNMJT8lZ2ElISV0JXszMn0lYyU7JXAyJXNcRSV7MTExfSVwMSUrJWNcciwKKwlzbWxuPVxFJmpCLCB1c2U9aHAyNjIxLAorCitocDI2MjFiLXB8aHAgMjYyMWIgd2l0aCBwcmludGVyLAorCXVzZT1ocCtwcmludGVyLCB1c2U9aHAyNjIxYiwKKworIyBocDI2MjFiIC0gbmV3IDI2MjFiIHdpdGggbmV3IGV4dGVuZGVkIGtleWJvYXJkCisjIHRoZXNlIGFyZSBjbG9zZXIgdG8gdGhlIG5ldyAyNnh4IHNlcmllcyB0aGFuIHRoZSBvdGhlciAyNjIxYgoraHAyNjIxYi1reHxocCAyNjIxYiB3aXRoIGV4dGVuZGVkIGtleWJvYXJkLAorCXVzZT1uZXdocGtleWJvYXJkLCB1c2U9aHAyNjIxYiwKKworaHAyNjIxYi1reC1wfGhwIDI2MjFiIHdpdGggbmV3IGtleWJvYXJkICYgcHJpbnRlciwKKwl1c2U9aHArcHJpbnRlciwgdXNlPWhwMjYyMWIta3gsCisKKyMgU29tZSBhc3N1bXB0aW9ucyBhcmUgbWFkZSBpbiB0aGUgZm9sbG93aW5nIGVudHJpZXMuCisjIFRoZXNlIHNldHRpbmdzIGFyZSBOT1Qgc2V0IHVwIGJ5IHRoZSBpbml0aWFsaXphdGlvbiBzdHJpbmdzLgorIworIyAgICBQb3J0IENvbmZpZ3VyYXRpb24KKyMgUmVjdlBhY2U9WG9uL1hvZmYJWG1pdFBhY2U9WG9uL1hvZmYJU3RyaXBOdWxEZWw9WWVzCisjCisjICAgIFRlcm1pbmFsIENvbmZpZ3VyYXRpb24KKyMgSW5oSG5kU2hrKEcpPVllcwlJbmhEQzIoSCk9WWVzCisjIFhtaXRGbmN0bihBKT1ObwkJSW5oRW9sV3JwPU5vCisjCisjCisjIEhwIDI2MjJhICYgaHAyNjIzYSBkaXNwbGF5IGFuZCBncmFwaGljcyB0ZXJtaW5hbHMKKyMKK2hwMjYyMnxocDI2MjJhfGhwIDI2MjIsCisJZGEsIGRiLAorCWxtIzAsIHBiIzE5MjAwLAorCWlzMj1cRSZkakBcciwgdXNlPWhwK3BmaytjciwgdXNlPWhwK2xhYmVscywgdXNlPXNjcmhwLAorCisjIFRoZSAyNjIzIGlzIGEgMjYyMiB3aXRoIGV4dHJhIGdyYXBoaWNzIGhhcmR3YXJlLgoraHAyNjIzfGhwMjYyM2F8aHAgMjYyMywKKwl1c2U9aHAyNjIyLAorCitocDI2MjRiLXB8aHAyNjI0Yi00cC1wfGhld2xldHQgcGFja2FyZCAyNjI0IEIgd2l0aCBwcmludGVyLAorCXVzZT1ocCtwcmludGVyLCB1c2U9aHAyNjI0LAorCisjIFRoZSBoZXdsZXR0IHBhY2thcmQgQiBjYW4gaGF2ZSBhbiBvcHRpb25hbCBleHRyYSA2IHBhZ2VzIG9mIG1lbW9yeS4KK2hwMjYyNC0xMHB8aHAyNjI0YS0xMHB8aHAyNjI0Yi0xMHB8aGV3bGV0dCBwYWNrYXJkIDI2MjQgQiB3LyAxMCBwYWdlcyBvZiBtZW1vcnksCisJbG0jMjQwLCB1c2U9aHAyNjI0LAorCitocDI2MjRiLTEwcC1wfGhld2xldHQgcGFja2FyZCAyNjI0IEIgdy8gZXh0cmEgbWVtb3J5ICYgcHJpbnRlciwKKwlsbSMyNDAsIHVzZT1ocDI2MjRiLXAsCisKKyMgQ29sb3IgbWFuaXB1bGF0aW9ucyBmb3IgSFAgdGVybWluYWxzCitocCtjb2xvcnxocCB3aXRoIGNvbG9ycywKKwljY2MsCisJY29sb3JzIzE2LCBuY3YjMTcsIHBhaXJzIzcsCisJaW5pdHA9XEUmdiU/JXAyJXsxMDAwfSU9JXQxJWUuJXAyJWQlO2ElPyVwMyV7MTAwMH0lPSV0MSVlLiVwMyVkJTtiJT8lcDQlezEwMDB9JT0ldDElZS4lcDQlZCU7YyU/JXA1JXsxMDAwfSU9JXQxJWUuJXA1JWQlO3glPyVwNiV7MTAwMH0lPSV0MSVlLiVwNiVkJTt5JT8lcDclezEwMDB9JT0ldDElZS4lcDclZCU7eiVwMSVkSSwKKwlvYz1cRSZ2MG0xYTFiMWMwSVxFJnYxYTFJXEUmdjFiMklcRSZ2MWExYjNJXEUmdjFjNElcRSZ2MWExYzVJXEUmdjFiMWM2SVxFJnYxeDF5N0ksCisJb3A9XEUmdjBTLCBzY3A9XEUmdiVwMSVkUywKKworIyA8aXMyPiBzZXRzIHRoZSBzY3JlZW4gdG8gYmUgODAgY29sdW1ucyB3aWRlCitocDIzOTdhfGhwMjM5N3xoZXdsZXR0IHBhY2thcmQgMjM5N0EgY29sb3IgdGVybWluYWwsCisJaXMyPVxFJnc2ZjgwWCwgdXNlPW1lbWhwLCB1c2U9aHArbGFiZWxzLCB1c2U9aHArY29sb3IsCisKKyMgIEhQIDcwMC80NCBTZXR1cCBwYXJhbWV0ZXJzOgorIyBUZXJtaW5hbCBNb2RlCQlIUC1QQ3Rlcm0KKyMgSW5oaWJpdCBBdXRvIFdyYXAJTk8KKyMgU3RhdHVzIExpbmUJCUhvc3QgV3JpdGFibGUKKyMgUEMgQ2hhcmFjdGVyIFNldAlZRVMKKyMgVHdlbnR5LUZpdmUgTGluZSBNb2RlCVlFUworIyBYT04vWE9GRgkJQDEyOCBvciA2NCAoc2MpCisjIEtleWNvZGUgTW9kZSAJCU5PICAgb3IgWUVTIChzYykKKyMgQmFja3NwYWNlIEtleQkJQlMgb3IgQlMvREVMCisjCisjIDxpczI+IAlzZXRzIHBjdGVybTsgYXV0b3dyYXA7IDI1IGxpbmVzOyBwYyBjaGFyIHNldDsgcHJvZyBERUwga2V5OworIyBcRVxcPyBkb2VzIG5vdCB0dXJuIG9mZiBrZXljb2RlIG1vZGUKKyMgPHNtc2M+CXNldHMgYWx0ZXJuYXRlIHN0YXJ0L3N0b3A7IGtleWNvZGUgb24KK2hwYW5zaXxocDcwMHxoZXdsZXR0IHBhY2thcmQgNzAwLzQ0IGluIEhQLVBDdGVybSBtb2RlLAorCWFtLCBlbywgeGVubCwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWFjc2M9alwzMzFrXDI3N2xcMzMybVwzMDBuXDMwNXFcMzA0dFwzMDN1XDI2NHZcMzAxd1wzMDJ4XDI2MywKKwliZWw9XkcsIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLCBjbGVhcj1cRVsySlxFW0gsCisJY25vcm09XEVbPzI1aCwgY3I9Xk0sIGN1YjE9XEVbRCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVtALCBpbDE9XEVbTCwKKwlpbmQ9XkosCisJaXMyPVxFWzQ0InBcRVs/N2hcRVs+MTBoXEVbPjEyaFxFUDE7MXwzLzdGXEVcXCwKKwlrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZW5kPVxFWzR+LCBrZjE9XEVbMTd+LCBrZjEwPVxFWzI4fiwKKwlrZjI9XEVbMTh+LCBrZjM9XEVbMTl+LCBrZjQ9XEVbMjB+LCBrZjU9XEVbMjF+LCBrZjY9XEVbMjN+LAorCWtmNz1cRVsyNH4sIGtmOD1cRVsyNX4sIGtmOT1cRVsyNn4sIGtob21lPVxFWzF+LCBrbnA9XEVbNn4sCisJa3BwPVxFWzV+LCBybWFtPVxFWz83bCwKKwlybXNjPVxFWz4xMWxcRVAxKip4MC8xMTsxLzEzXEVbbVxFXFwsIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHNncjA9XEVbbSwgc21hbT1cRVs/N2gsCisJc21zYz1cRVs+MTFoXEVQTyoqeDAvNjU7MS82N1xFXFwkPDI1MD4sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgeG9mZmM9ZywgeG9uYz1lLAorIworIyAoaHAyMzkyOiBjb3BpZWQgPHJtaXI+IGhlcmUgZnJvbSBocGV4IC0tIGVzcikKK2hwMjM5MnwyMzl4IHNlcmllcywKKwljb2xzIzgwLAorCWNidD1cRWksIGN1cD1cRSZhJXAxJWR5JXAyJWRDLCBrZjE9XEVwXHIsIGtmMj1cRXFcciwKKwlrZjM9XEVyXHIsIGtmND1cRXNcciwga2Y1PVxFdFxyLCBrZjY9XEV1XHIsIGtmNz1cRXZcciwKKwlrZjg9XEV3XHIsIGtob21lPVxFaCwga2luZD1cRVUsIGtucD1cRXUsIGtwcD1cRXYsIGtyaT1cRVYsCisJcm1pcj1cRVIsIHJtdWw9XEUmZEAsIHNtaXI9XEVRLCBzbXVsPVxFJmRELCB2cGE9XEUmYSVwMSVkWSwKKwl1c2U9aHBzdWIsCisKK2hwc3VifGhwIHRlcm1pbmFscyAtLSBjYXBhYmlsaXR5IHN1YnNldCwKKwlhbSwgZGEsIGRiLCBtaXIsIHhocCwgeG9uLAorCWxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1dTE9XEVBLCBkY2gxPVxFUCwgZGwxPVxFTSwgZWQ9XEVKLCBlbD1cRUssIGhwYT1cRSZhJXAxJWRDLAorCWh0PV5JLCBpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGlsMT1cRUwsIGluZD1eSiwKKwlpczI9XEUmczFBXEU8XEUmazBcXCwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2hvbWU9XEVoLCBybWt4PVxFJnMwQSwgcm1zbz1cRSZkQCwKKwlzZ3IwPVxFJmRALCBzbWt4PVxFJnMxQSwgc21zbz1cRSZkQiwKKworIyBocGV4OgorIwlNYXkgYmUgdXNlZCBmb3IgbW9zdCAyNCB4IDgwIGhwIHRlcm1pbmFscywKKyMgYnV0IGhhcyBubyBwYWRkaW5nIGFkZGVkLCBzbyBtYXkgYWxsb3cgcnVub3ZlciBpbiBzb21lIHRlcm1pbmFscyBhdCBoaWdoCisjIGJhdWQgcmF0ZXMuICBXaWxsIG5vdCB3b3JrIGZvciBocDI2NDBhIG9yIGhwMjY0MGIgdGVybWluYWxzLCBocDk4eDYgYW5kCisjIGhwOTh4NSB0ZXJtaW5hbCBlbXVsYXRvcnMgb3IgaHA5OHg2IGNvbnNvbGVzLgorIyAJQWRkcyB4eS1jdXJzb3IgYWRkcmVzc2luZywgdmVydGljYWwgY3Vyc29yIGFkZHJlc3NpbmcsIGhvbWUsCisjIGxhc3QgbGluZSwgYW5kIHVuZGVybGluZSBjYXBhYmlsaXRpZXMuCisjCisjIChocGV4OiByZW1vdmVkIG1lbW9yeS1sb2NrIGNhcGFiaWxpdGllcyAiOm1sPVxFbDptdT1cRW06IiwKKyMgbW92ZWQgPHJtaXI+IGhlcmUgZnJvbSBocHN1YiAtLSBlc3IpCitocGV4fGhwIGV4dGVuZGVkIGNhcGFiaWxpdGVzLAorCWNyPV5NLCBjdWQxPV5KLCBjdXA9XEUmYSVwMSVkeSVwMiVkQywgaHQ9XkksIGluZD1eSiwga2JzPV5ILAorCWtjdWIxPV5ILCBrY3VkMT1eSiwgbmVsPV5NXkosIHJtaXI9XEVSLCBybXVsPVxFJmRALCBzbWlyPVxFUSwKKwlzbXVsPVxFJmRELCB2cGE9XEUmYSVwMSVkWSwgdXNlPWhwc3ViLAorCisjIEZyb206IFZpbGxlIFN1bGtvIDxWaWxsZS5TdWxrb0BiaXAuYXRrLnRwby5maT4sIDA1IEF1ZyAxOTk2CitocDJ8aHBleDJ8aGV3bGV0dC1wYWNrYXJkIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBuZXdlciB2ZXJzaW9uLAorCWFtLCBkYSwgZGIsIG1pciwgeGhwLAorCWNvbHMjODAsIGxoIzIsIGxpbmVzIzI0LCBsbSMwLCBsdyM4LCBubGFiIzgsIHhtYyMwLAorCWJlbD1eRywgY2xlYXI9XEUmYTB5MENcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFQiwKKwljdWYxPVxFQywgY3VwPVxFJmElcDElZHklcDIlZEMsIGN1dTE9XEVBLCBkY2gxPVxFUCwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaHBhPVxFJmElcDElZEMsIGh0PV5JLCBodHM9XEUxLAorCWlsMT1cRUwsIGluZD1eSiwga2JzPV5ILCBrY2xyPVxFSiwga2N0YWI9XEUyLCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2RjaDE9XEVQLCBrZGwxPVxFTSwKKwlrZWQ9XEVKLCBrZWw9XEVLLCBrZjE9XEVwLCBrZjI9XEVxLCBrZjM9XEVyLCBrZjQ9XEVzLCBrZjU9XEV0LAorCWtmNj1cRXUsIGtmNz1cRXYsIGtmOD1cRXcsIGtob21lPVxFaCwga2h0cz1cRTEsIGtpY2gxPVxFUSwKKwlraWwxPVxFTCwga2luZD1cRVMsIGtsbD1cRUYsIGtucD1cRVUsIGtwcD1cRVYsIGtyaT1cRVQsCisJa3JtaXI9XEVSLCBrdGJjPVxFMywgbWVtbD1cRWwsIG1lbXU9XEVtLAorCXBma2V5PVxFJmYlcDElZGslcDIlbCVkTCVwMiVzLAorCXBmbG9jPVxFJmYxYSVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGZ4PVxFJmYyYSVwMSVkayVwMiVsJWRMJXAyJXMsCisJcGxuPVxFJmYlcDElZGslcDIlbCVkZDBMJXAyJXMsIHJtaXI9XEVSLCBybWt4PVxFJnMwQSwKKwlybWxuPVxFJmpALCBybXNvPVxFJmRALCBybXVsPVxFJmRALAorCXNncj1cRSZkJT8lcDcldCV7MTE1fSVjJTslcDElcDMlfCVwNiV8JXsyfSUqJXAyJXs0fSUqJSslcDQlKyVwNSV7OH0lKiUrJXs2NH0lKyVjJT8lcDkldCUnXDAxNiclYyVlJSdcMDE3JyVjJTssCisJc2dyMD1cRSZkQCwgc21pcj1cRVEsIHNta3g9XEUmczFBLCBzbWxuPVxFJmpCLCBzbXNvPVxFJmRCLAorCXNtdWw9XEUmZEQsIHRiYz1cRTMsIHZwYT1cRSZhJXAxJWRZLAorCisjIEhQIDIzNiBjb25zb2xlCisjIEZyb206IDxkZGF2aXNAaWMuYmVya2VsZXkuZWR1PgoraHAyMzZ8aHAyMzYgaW50ZXJuYWwgdGVybWluYWwgZW11bGF0b3IsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEVGLCBjbm9ybT1cRURFLCBjdWIxPV5ILAorCWN1cD1cRUUlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGN2dmlzPVxFREIsCisJZGNoMT1cRUosIGRsMT1cRUgsIGVsPVxFSywgaWNoMT1cRUksIGlsMT1cRUcsIHJtc289XEVDSSwKKwlzZ3IwPVxFQ0ksIHNtc289XEVCSSwKKworIyBUaGlzIHdvcmtzIG9uIGEgaHAzMDAgY29uc29sZSBydW5uaW5nIFV0YWggNC4zIEJTRAorIyBGcm9tOiBDcmFpZyBMZXJlcyA8bGVyZXNAb2tlZWZmZS5iZXJrZWxleS5lZHU+CitocDMwMGh8SFAgQ2F0c2V5ZSBjb25zb2xlLAorCU9UYnMsIGFtLCBkYSwgZGIsIG1pciwgeGhwLAorCWNvbHMjMTI4LCBsaW5lcyM1MSwgbG0jMCwgeG1jIzAsCisJYmVsPV5HLCBjYnQ9XEVpLCBjbGVhcj1cRSZhMHkwQ1xFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVCLAorCWN1ZjE9XEVDLCBjdXA9XEUmYSVwMSVkeSVwMiVkQywgY3V1MT1cRUEsIGRjaDE9XEVQLAorCWRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBocGE9XEUmYSVwMSVkQywgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LCBpbDE9XEVMLCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFaCwKKwlybWlyPVxFUiwgcm1reD1cRSZzMEEsIHJtc289XEUmZEAsIHJtdWw9XEUmZEAsIHNncjA9XEUmZEAsCisJc21pcj1cRVEsIHNta3g9XEUmczFBLCBzbXNvPVxFJmRCLCBzbXVsPVxFJmRELCB0YmM9XEUzLAorCXZwYT1cRSZhJXAxJWRZLAorIyBGcm9tOiBHcmVnIENvdWNoIDxncmVnY0Blcm5pZS5iZXJrZWxleS5lZHU+CitocDk4Mzd8aHA5ODcyMHxocDk4NzIxfEhQIDkwMDAvMzAwIHdvcmtzdGF0aW9ucywKKwlPVGJzLCBhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzEyOCwgaXQjOCwgbGluZXMjNDYsIGxtIzAsCisJYmVsPV5HLCBjYnQ9XEVpLCBjbGVhcj1cRSZhMHkwQ1xFSiwgY3ViMT1eSCwgY3VkMT1cRUIsCisJY3VmMT1cRUMsIGN1cD1cRSZhJXAxJWR5JXAyJWRDLCBjdXUxPVxFQSwgZGNoMT1cRVAsCisJZGwxPVxFTSwgZWQ9XEVKLCBlbD1cRUssIGhwYT1cRSZhJXAxJWRDLCBodD1eSSwgaHRzPVxFMSwKKwlpbDE9XEVMLCBpbmQ9XkosIGlzMj1cRSZ2MG0xYjBpJmpALCBrYnM9XkgsIGtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLAorCWtlZD1cRUosIGtlbD1cRUssIGtob21lPVxFaCwga2ljaDE9XEVRLCBraWwxPVxFTCwga25wPVxFVSwKKwlrcHA9XEVWLCBybWlyPVxFUiwgcm1reD1cRSZzMEEsIHJtc289XEUmdjBTLCBybXVsPVxFJmRALAorCXNncjA9XEUmZEAsIHNtaXI9XEVRLCBzbWt4PVxFJnMxQSwgc21zbz1cRSZ2NVMsIHNtdWw9XEUmZEQsCisJdGJjPVxFMywgdnBhPVxFJmElcDElZFksCisjIEhQIDk4NDUgZGVza3RvcCBjb21wdXRlciBmcm9tIEJSTAorIyAoaHA5ODQ1OiByZW1vdmVkIHVua25vd24gY2FwYWJpbGl0eSA6Z3U6IC0tIGVzcikKK2hwOTg0NXxIUCA5ODQ1LAorCU9UYnMsIGFtLCBkYSwgZGIsIGVvLCBtaXIsIHhocCwKKwljb2xzIzgwLCBsaW5lcyMyMSwKKwlPVGJjPVxFRCwgY2xlYXI9XEVIXEVKLCBjdWYxPVxFQywgY3VwPVxFJmElcDIlMmRjJXAxJTJkWSwKKwljdXUxPVxFQSwgZGNoMT1cRVAsIGRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZCwgaWwxPVxFTCwgcm1pcj1cRVIsIHJtc289XEUmZEAsCisJc21pcj1cRVEsIHNtc289XEUmZEIsCisjIEZyb206IENoYXJsZXMgQS4gRmlubmVsbCBvZiBNSVRSRSA8ZmlubmVsbEBtaXRyZS5vcmc+LCBkZXZlbG9wZWQgMDdTRVA5MAorIyAoaHA5ODU1MDogcmVwbGFjZWQgL3Vzci9zaGFyZS90YWJzZXQvOTgzNyB3aXRoIHN0ZCBiZWNhdXNlIDxpdCM4Piw8aHRzPVxFMT47CisjIGFkZGVkIGVtcHR5IDxhY3NjPiB0byBhdm9pZCB3YXJuaW5ncyByZSA8c21hY3M+LzxybWFjcz4gLS1lc3IpCitocDk4NTUwfGhwOTg1NTBhfEhQIDkwMDAgU2VyaWVzIDMwMCBjb2xvciBjb25zb2xlLAorCU9UYnMsIGFtLCBkYSwgZGIsIG1pciwgeGhwLAorCWNvbHMjMTI4LCBpdCM4LCBsaW5lcyM0OSwgbG0jMCwKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRSZkQSwgYm9sZD1cRSZkSiwgY2J0PVxFaSwgY2l2aXM9XEUqZFIsCisJY2xlYXI9XEVIXEVKLCBjbm9ybT1cRSpkUSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRSZhJXAxJWR5JXAyJWRDLCBjdXUxPVxFQSwgZGNoMT1cRVAsIGRpbT1cRSZkSCwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaHBhPVxFJmElcDElZEMsIGh0PV5JLCBodHM9XEUxLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZCwgaWwxPVxFTCwgaW5kPV5KLCBpbnZpcz1cRSZkcywKKwlrYnM9XkgsIGtjbHI9XEVKLCBrY3RhYj1cRTIsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLCBrZWQ9XEVKLCBrZWw9XEVLLCBrZjE9XEVwLAorCWtmMj1cRXEsIGtmMz1cRXIsIGtmND1cRXMsIGtmNT1cRXQsIGtmNj1cRXUsIGtmNz1cRXYsIGtmOD1cRXcsCisJa2hvbWU9XEVoLCBraHRzPVxFMSwga2ljaDE9XEVRLCBraWwxPVxFTCwga2luZD1cRVMsIGtsbD1cRUYsCisJa25wPVxFVSwga3BwPVxFViwga3JpPVxFVCwga3JtaXI9XEVSLCBrdGJjPVxFMywgcmV2PVxFJmRKLAorCXJtYWNzPV5PLCBybWlyPVxFUiwgcm1reD1cRSZzMEEsIHJtc289XEUmZEAsIHJtdWw9XEUmZEAsCisJc2dyMD1cRSZkQCwgc21hY3M9Xk4sIHNtaXI9XEVRLCBzbWt4PVxFJnMxQSwgc21zbz1cRSZkSiwKKwlzbXVsPVxFJmRELCB0YmM9XEUzLCB2cGE9XEUmYSVwMSVkWSwKKyMgRnJvbTogVmljdG9yIER1Y2hvdm5pIDx2aWNAZmluZS5wcmluY2V0b24uZWR1PgorIyAoaHA3MDAtd3k6IHJlbW92ZWQgb2Jzb2xldGUgIjpubD1eSjoiOworIyByZXBsYWNlZCAvdXNyL3NoYXJlL3RhYnNldC9ocDcwMC13eSB3aXRoIHN0ZCBiZWNhdXNlIDxpdCM4Piw8aHRzPVxFMT4gLS0gZXNyKQoraHA3MDAtd3l8SFA3MDAvNDEgZW11bGF0aW5nIHd5c2UzMCwKKwlPVGJzLCBhbSwgYncsIG1pciwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgeG1jIzEsCisJY2J0PVxFSSwgY2xlYXI9XlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5WLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGVkPVxFWSwgZWw9XEVUJDwxMC8+LCBob21lPV5eLCBodD1eSSwgaHRzPVxFMSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGlsMT1cRUUkPDAuNyovPiwKKwlpczE9XEV+IlxFQ1xFclxFKFxFRzBcMDAzXEVgOVxFYDEsIGticz1cMTc3LCBrY2J0PVxFSSwKKwlrY2xyPV5aLCBrY3ViMT1eSCwga2N1ZDE9XlYsIGtjdWYxPV5MLCBrY3V1MT1eSywga2VkPVxFWSwKKwlrZWw9XEVULCBraG9tZT1eXiwga2h0cz1cRUksIGtpY2gxPVxFcSwga3JtaXI9XEVyLCBsbD1eXl5LLAorCXJpPVxFaiwgcm1pcj1cRXIsIHJtc289XEVHMCQ8MTAvPiwgcm11bD1cRUcwJDwxMC8+LAorCXNncjA9XEVHMCQ8MTAvPiwgc21pcj1cRXEsIHNtc289XEVHNCQ8MTAvPiwKKwlzbXVsPVxFRzgkPDEwLz4sIHRiYz1cRTAsIHZwYT1cRVslcDElezMyfSUrJWMsCitocDcwMDkyfGhwNzAwOTJhfGhwNzAwOTJBfEhQIDcwMC85MiwKKwlhbSwgZGEsIGRiLCB4aHAsCisJY29scyM4MCwgbGgjMiwgbGluZXMjMjQsIGxtIzAsIGx3IzgsIG5sYWIjOCwKKwlhY3NjPTBjamdrdGxybWZuL3FcLHQ1dTZ2OHc3eC4sIGJlbD1eRywgYmxpbms9XEUmZEEsCisJYm9sZD1cRSZkQiwgY2J0PVxFaSwgY2xlYXI9XEUmYTB5MENcRUosIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XEVCLCBjdWYxPVxFQywgY3VwPVxFJmElcDElZHklcDIlZEMsIGN1dTE9XEVBLAorCWRjaDE9XEVQLCBkaW09XEUmZEgsIGRsMT1cRU0sIGVsPVxFSywgaHBhPVxFJmElcDElZEMsIGh0PV5JLAorCWh0cz1cRTEsIGlsMT1cRUwsIGticz1eSCwga2Nscj1cRUosIGtjdGFiPVxFMiwga2N1YjE9XEVELAorCWtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtkY2gxPVxFUCwga2RsMT1cRU0sCisJa2VkPVxFSiwga2VsPVxFSywga2YxPVxFcCwga2YyPVxFcSwga2YzPVxFciwga2Y0PVxFcywga2Y1PVxFdCwKKwlrZjY9XEV1LCBrZjc9XEV2LCBrZjg9XEV3LCBraG9tZT1cRWgsIGtodHM9XEUxLCBraWNoMT1cRVEsCisJa2lsMT1cRUwsIGtpbmQ9XEVTLCBrbGw9XEVGLCBrbnA9XEVVLCBrcHA9XEVWLCBrcmk9XEVULAorCWtybWlyPVxFUiwga3RiYz1cRTMsIHJldj1cRSZkQiwgcmk9XEVULCBybWFjcz1eTywgcm1pcj1cRVIsCisJcm1reD1cRSZzMEEsIHJtbG49XEUmakAsIHJtc289XEUmZEAsIHJtdWw9XEUmZEAsCisJc2dyMD1cRSZkQCwgc21hY3M9Xk4sIHNtaXI9XEVRLCBzbWt4PVxFJnMxQSwgc21sbj1cRSZqQiwKKwlzbXNvPVxFJmRKLCBzbXVsPVxFJmRELCB0YmM9XEUzLCB2cGE9XEUmYSVwMSVkWSwKKworYm9iY2F0fHNib2JjYXR8SFAgOTAwMCBtb2RlbCAzMDAgY29uc29sZSwKKwlhbSwgZGEsIGRiLCBtaXIsIHhocCwKKwljb2xzIzEyOCwgaXQjOCwgbGluZXMjNDcsIHhtYyMwLAorCWNidD1cRWksIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEUmYSVwMSVkeSVwMiVkQyQ8Ni8+LCBjdXUxPVxFQSwgZGNoMT1cRVAsCisJZGwxPVxFTSQ8MTAqLz4sIGVkPVxFSiwgZWw9XEVLLCBocGE9XEUmYSVwMSVkQyQ8Ni8+LCBodD1eSSwKKwlpbDE9XEVMJDwxMCovPiwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBraG9tZT1cRWgsIG5lbD1eTV5KLCBybWlyPVxFUiwKKwlybWt4PVxFJnMwQSwgcm1zbz1cRSZkQCwgcm11bD1cRSZkQCwgc2dyMD1cRSZkQCwgc21pcj1cRVEsCisJc21reD1cRSZzMUEsIHNtc289XEUmZEIsIHNtdWw9XEUmZEQsIHZwYT1cRSZhJXAxJWRZJDw2Lz4sCitnYXRvci10fEhQIDkwMDAgbW9kZWwgMjM3IGVtdWxhdGluZyBleHRyYS10YWxsIEFBQSwKKwlsaW5lcyM5NCwgdXNlPWdhdG9yLAorZ2F0b3J8SFAgOTAwMCBtb2RlbCAyMzcgZW11bGF0aW5nIEFBQSwKKwlidywga20sIG1pciwgdWwsCisJY29scyMxMjgsIGl0IzgsIGxpbmVzIzQ3LAorCWJlbD1eRywgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRU0sCisJZGNoPVxFWyVwMSVkUCQ8NC8+LCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSQ8MSovPiwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBocGE9XEVbJWklcDElZGAsCisJaHQ9XkksIGljaD1cRVslcDElZEAkPDQvPiwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwkPDEqLz4sCisJaWwxPVxFW0wsIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwKKwlyZXA9JXAxJWNcRVslcDIlZGIkPDEqLz4sIHJldj1cRVs3bSwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwgc2dyMD1cRVttLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorZ2F0b3ItNTJ8SFAgOTAwMCBtb2RlbCAyMzcgZW11bGF0aW5nIFZUNTIsCisJY29scyMxMjgsIGxpbmVzIzQ3LCB1c2U9dnQ1MiwKK2dhdG9yLTUydHxIUCA5MDAwIG1vZGVsIDIzNyBlbXVsYXRpbmcgZXh0cmEtdGFsbCBWVDUyLAorCWxpbmVzIzk0LCB1c2U9Z2F0b3ItNTIsCisKKyMjIyMgSG9uZXl3ZWxsLUJ1bGwKKyMKKyMgRnJvbTogTWljaGFlbCBIYWFyZHQgPG1pY2hhZWxAZ2FuZGFsZi5tb3JpYT4gMTEgSmFuIDkzCisjCisKKyMgSG9uZXl3ZWxsIEJ1bGwgdGVybWluYWwuICBJdHMgY3Vyc29yIGFuZCBmdW5jdGlvbiBrZXlzIHNlbmQgc2luZ2xlCisjIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgaXQgaGFzIHN0YW5kb3V0L3VuZGVybGluZSBnbGl0Y2guICBNb3N0IHByb2dyYW1zCisjIGRvIG5vdCBsaWtlIHRoZXNlIGZlYXR1cmVzL2J1Z3MuICBWaXN1YWwgYmVsbCBpcyByZWFsaXplZCBieSBmbGFzaGluZyB0aGUKKyMgImtleWJvYXJkIGxvY2tlZCIgTEVELgorZGt1NzAwMy1kdW1ifEhvbmV5d2VsbCBCdWxsIERLVSA3MDAzIGR1bWIgbW9kZSwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwljbGVhcj1eXV5fLCBjcj1eTSwgY3ViMT1eWSwgY3VkMT1eSywgY3VmMT1eWCwKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XlosIGVkPV5fLCBlbD1cRVtLLAorCWZsYXNoPVxFWzJoXEVbMmwsIGhvbWU9Xl0sIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XlksCisJa2N1ZDE9XkssIGtjdWYxPV5YLCBrY3V1MT1eWiwga2hvbWU9Xl0sIG5lbD1eTV5KLAorZGt1NzAwM3xIb25leXdlbGwgQnVsbCBES1UgNzAwMyBhbGwgZmVhdHVyZXMgZGVzY3JpYmVkLAorCW1zZ3IsCisJeG1jIzEsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbN20sIGRpbT1cRVsybSwgcmV2PVxFWzdtLCBybXNvPVxFW20sCisJcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdXNlPWRrdTcwMDMtZHVtYiwKKworIyMjIyBMZWFyLVNpZWdsZXIgKGFkbSkKKyMKKyMgVGhlc2UgZ3V5cyBhcmUgbG9uZyBzaW5jZSBvdXQgb2YgdGhlIHRlcm1pbmFscyBidXNpbmVzcywgYnV0CisjIGluIDE5OTUgbWFueSBjdXJyZW50IHRlcm1pbmFscyBzdGlsbCBoYXZlIGFuIGFkbSB0eXBlIGFzIG9uZSBvZiB0aGVpcgorIyBlbXVsYXRpb25zICh1c3VhbGx5IHRoZWlyIHN0dXBpZGVzdCwgYW5kIHVzdWFsbHkgbGFiZWxlZCBhZG0zLCB0aG91Z2gKKyMgdGhlc2UgYGFkbTMnIGVtdWxhdGlvbnMgbm9ybWFsbHkgaGF2ZSBhZG0zYSsgY2FwYWJpbGl0aWVzKS4KKyMKKyMgV0FSTklORzogU29tZSBlYXJseSBBRE0gdGVybWluYWxzIChpbmNsdWRpbmcgdGhlIEFETTMgYW5kIEFETTUpIGhhZCBhCisjIGBkaWFnbm9zdGljIGZlYXR1cmUnIHRoYXQgc2VuZGluZyB0aGVtIGEgXkcgd2hpbGUgcGluIDIyIChgUmluZyBJbmRpY2F0b3InKQorIyB3YXMgYmVpbmcgaGVsZCB0byBncm91bmQgd291bGQgdHJpZ2dlciBhIHNlbmQgb2YgdGhlIHRvcCBsaW5lIG9uIHRoZSBzY3JlZW4uCisjIEEgcXVpY2sgZml4IG1pZ2h0IGJlIHRvIGRyb3AgYmFjayB0byBhIGNoZWVzeSA0LXdpcmUgY2FibGUgd2l0aCBwaW4gMjIKKyMgaGFuZ2luZyBpbiB0aGUgYWlyLiAoVGhhbmtzIHRvIEVyaWMgRmlzY2hlciwgPGVyaWNAZnVkZ2UudWNoaWNhZ28uZWR1PiwKKyMgZm9yIGNsZWFyaW5nIHVwIHRoaXMgcG9pbnQuKQorCithZG0xYXxhZG0xfGxzaSBhZG0xYSwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFOyQ8MT4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGhvbWU9Xl4sCisJaW5kPV5KLAorYWRtMnxsc2kgYWRtMiwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFOywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGhvbWU9Xl4sIGljaDE9XEVRLCBpbDE9XEVFLCBpbmQ9XkosCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtob21lPV5eLAorIyAoYWRtMzogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5LXlA6IiAtLSBlc3IpCithZG0zfGxzaSBhZG0zLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBpbmQ9XkosCisjIFRoZSBmb2xsb3dpbmcgQURNLTNBIHN3aXRjaCBzZXR0aW5ncyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJU1BBQ0UJCVUvTF9ESVNQCUNMUl9TQ1JOCTI0X0xJTkUKKyMJQ1VSX0NUTAkJTENfRU4JCUFVVE9fTkwJCUZEWAorIyBPdGhlciBzd2l0Y2hlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50cy4gIEkgcmVjb21tZW5kCisjCURJU0FCTEVfS0JfTE9DSwlMT0NBTF9PRkYJMTAzCQkyMDJfT0ZGCisjCUVUWF9PRkYJCUVPVF9PRkYKKyMgTW9zdCBvZiB0aGVzZSB0ZXJtaW5hbHMgcmVxdWlyZWQgYW4gb3B0aW9uIFJPTSB0byBzdXBwb3J0IGxvd2VyIGNhc2UgZGlzcGxheS4KKyMgT3BlbiB0aGUgY2FzZSBhbmQgbG9vayBhdCB0aGUgbW90aGVyYm9hcmQ7IGlmIHlvdSBzZWUgYW4gb3BlbiAyNC1waW4gRElQCisjIHNvY2tldCwgeW91IG1heSBiZSBvdXQgb2YgbHVjay4KKyMKKyMgKGFkbTNhOiBzb21lIGNhcGFiaWxpdGllcyBtZXJnZWQgaW4gZnJvbSBCUmwgZW50cnkgLS0gZXNyKQorYWRtM2F8bHNpIGFkbTNhLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCU9UbWE9XkteUCwgT1RubD1eSiwgYmVsPV5HLCBjbGVhcj1cMDMyJDwxLz4sIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XkosIGN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1eSywgaG9tZT1eXiwgaW5kPV5KLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLAorCWtjdXUxPV5LLCByczI9Xk4sCithZG0zYSt8YWRtM2EgcGx1cywKKwlrYnM9XkgsIHVzZT1hZG0zYSwKKyMgKGFkbTU6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eSGheSmpeS2teTGxeXkg6IiAmIGR1cGxpY2F0ZSAiOmRvPV5KOiIgLS0gZXNyKQorYWRtNXxsc2kgYWRtNSwKKwl4bWMjMSwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBlZD1cRVksIGVsPVxFVCwga2JzPV5ILCBraG9tZT1eXiwKKwlybXNvPVxFRywgc21zbz1cRUcsIHVzZT1hZG0zYSssCisjIEEgbG90IG9mIHRlcm1pbmFscyBvdGhlciB0aGFuIGFkbTExcyB1c2UgdGhlc2UuICBXaGVyZXZlciB5b3Ugc2VlCisjIHVzZT1hZG0rc2dyIHdpdGggc29tZSBvZiBpdHMgY2FwYWJpbGl0aWVzIGRpc2FibGVkLCB0cnkgdGhlCisjIGRpc2FibGVkIG9uZXMuICBUaGV5IG1heSB3ZWxsIHdvcmsgYnV0IG5vdCBoYXZlIGJlZW4gZG9jdW1lbnRlZCBvcgorIyBleHByZXNzZWQgaW4gdGhlIHVzaW5nIGVudHJ5LiAgV2UnZCBsaWtlIHRvIGNvb2sgdXAgYW4gPHNncj4gYnV0IHRoZQorIyA8cm1hY3M+LzxzbWFjcz4gc2VxdWVuY2VzIG9mIHRoZSB1c2luZyBlbnRyaWVzIHZhcnkgdG9vIG11Y2guCithZG0rc2dyfGFkbSBzdHlsZSBoaWdobGlnaHQgY2FwYWJpbGl0aWVzLAorCWludmlzPVxFRzEsIHJldj1cRUc0LCBybXNvPVxFRzAsIHJtdWw9XEVHMCwgc2dyMD1cRUcwLAorCXNtc289XEVHNCwgc211bD1cRUc4LAorIyBMU0kgQURNLTExIGZyb20gR2VvcmdlIFdpbGxpYW0gSGFydHdpZywgSnIuIDxnZW9AQlJMLVRHUi5BUlBBPiB2aWEgQlJMCisjIFN0YXR1cyBsaW5lIGFkZGl0aW9ucyBmcm9tIFN0ZXBoZW4gSi4gTXVpciA8c3RlcGhlbiVjb21wLmxhbmNzLmFjLnVrQHVjbC1jcz4KKyMgPGtob21lPiBmcm9tIDxzdGVwaGVuJWNvbXAubGFuY3MuYWMudWtAdWNsLWNzLmFycGE+LiAgPGNsZWFyPiBjb3VsZCBhbHNvCisjIGJlIF5aLCBhY2NvcmRpbmcgdG8gaGlzIGVudHJ5LgorIyAoYWRtMTE6IDxzbXVsPj1cRUc0IHdhcyBvYnZpb3VzbHkgZXJyb25lb3VzIGJlY2F1c2UgaXQgYWxzbyBzYWlkCisjIDxyZXY+PVxFRzQuICBMb29raW5nIGF0IG90aGVyIEFETXMgY29uZmlybXMgdGhpcyAtLSBlc3IpCithZG0xMXxMU0kgQURNLTExLAorCU9UYnMsIGFtLCBocywKKwlPVGtuIzgsIGNvbHMjODAsIGxpbmVzIzI0LAorCU9Ubmw9XkosIGJlbD1eRywgYmxpbms9XEVHMiwgY2xlYXI9XEUqLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPV5MLCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XkssIGRzbD1cRWgsIGVkPVxFWSwgZWw9XEVULCBmc2w9XEUoXHIsIGhvbWU9Xl4sIGh0PV5JLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtmMT1eQUBcciwKKwlrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwKKwlrZjc9XkFGXHIsIGtmOD1eQUdcciwga2hvbWU9Xl4sIG5lbD1eTV5KLCB0c2w9XEVGXEUpLAorCXVzZT1hZG0rc2dyLAorIyBGcm9tOiBBbmRyZXcgU2NvdHQgQmVhbHMgPGJhbmR5QGxsbC1jcmcuQVJQQT4KKyMgQ29ycmVjdGVkIGJ5IE9sYWYgU2llYmVydCA8cmhpYWx0b0Bwb2xkZXIudWJjLmt1bi5ubD4sIDExIE1heSAxOTk1CisjIFN1cGVydmlzb3IgbW9kZSBpbmZvIGJ5IEFyaSBXdW9sbGUsIDxhd3VvbGxlQGRlbHRhLmh1dC5maT4sIDI3IEF1ZyAxOTk2CisjIChhZG0xMjogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtuOm1hPWpeSmteUF5LXlBsIF5SXkxeTCA6Ii4gIFRoaXMgZm9ybWVybHkgaGFkCisjIDxpczI+PVxFcSBidXQgdGhhdCBsb29rZWQgd3Jvbmc7IHRoaXMgPGlzMj4gaXMgZnJvbSBEYXZlIFlvc3QgPGVzcXVpcmUheW9zdD4KKyMgdmlhIEJSTC4gIFRoYXQgZW50cnkgYXNzZXJ0ZWQgPHhtYyMxPiwgYnV0IEkndmUgbGVmdCB0aGF0IG91dCBiZWNhdXNlCisjIG5laXRoZXIgZWFybGllciBub3IgbGF0ZXIgQURNU3MgaGF2ZSBpdCAtLSBlc3IpCisjCisjIFlvdSB3aWxsIG5lZWQgdG8gZ2V0IGludG8gdGhlIHN1cGVydmlzb3Igc2V0dXAgYmVmb3JlIHlvdSBjYW4gc2V0CisjIGJhdWRyYXRlIGV0Yy4gZm9yIHlvdXIgQURNLTEyKy4gUHJlc3MgU2hpZnQtQ3RybC1TZXR1cCBhbmQgeW91IHNob3VsZAorIyBzZWUgYSBsb3QgbW9yZSBzZXR1cCBvcHRpb25zLgorIworIyBXaGlsZSBpbiBzdXBlcnZpc29yIHNldHVwIHlvdSBjYW4gYWxzbyB1c2UgZm9sbG93aW5nIGNvZGVzOgorIworIyBDdHJsLVAgUGVyc29uYWxpdHkgY2hhcmFjdGVyIHNlbGVjdGlvbnMgKGNvbmZpZ3VyZSBmb3IgZXhhbXBsZSB3aGF0CisjICAgICAgICBhcnJvdyBrZXlzIHNlbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSkKKyMgQ3RybC1UIHRhYnMgMS04MCAgIHVzZSBsZWZ0JnJpZ2h0IHRvIG1vdmUgYW5kIHVwIHRvIHNldCBhbmQKKyMgQ3RybC1WIHRhYnMgODEtMTU4IGRvd24gdG8gY2xlYXIgdGFiLiBTaGlmdC1DdHJsLU0gc2V0cyByaWdodCBtYXJnaW4gYXQgY3Vyc29yCisjIEN0cmwtQiBCaW5hcnkgc2V0dXAgKHByb2JhYmx5IG5vdCBuZWVkZWQuIEkgdGhpbmsgdGhhdCBldmVyeXRoaW5nIGNhbgorIyAgICAgICAgYmUgc2V0IHVzaW5nIG5vcm1hbCBzZXR1cCkKKyMgQ3RybC1BIEFuc3dlcmJhY2sgbW9kZSAoZW50ZXIgYW5zd2VyYmFjayBtZXNzYWdlKQorIyBDdHJsLVUgVXNlciBmcmllbmRseSBtb2RlIChub3JtYWwgc2V0dXApCisjIEN0cmwtRCBEZWZhdWx0cyBlbnRpcmUgc2V0dXAgYW5kIGZ1bmN0aW9uIGtleXMgZnJvbSBFUFJPTSB0YWJsZXMKKyMgQ3RybC1TIFNhdmUgYm90aCBzZXR1cCBhbmQgZnVuY3Rpb25zIGtleXMuIFRha2VzIGZyb20gNiB0byAxMCBzZWNvbmRzLgorIyBDdHJsLVIgUmVhZHMgYm90aCBzZXR1cCBhbmQgZnVuY3Rpb25zIGtleXMgZnJvbSBOVk0uCisjIFNoaWZ0LUN0cmwtWCBVbmxvY2sga2V5Ym9hcmQgYW5kIGNhbmNlbCByZWNlaXZlZCBYLU9GRiBzdGF0dXMKKyMKKyMgQURNLTEyKyBzdXBwb3J0cyBoYXJkd2FyZSBoYW5kc2hha2luZywgYnV0IGl0IGlzIERUUi9DVFMgYXMgb3Bwb3NlZCB0bworIyBSVFMvQ1RTIHVzZWQgbm93YWRheXMgd2l0aCB2aXJ0dWFsbHkgZXZlcnkgbW9kZW0gYW5kIGNvbXB1dGVyLiAxOTIwMAorIyBicHMgd29ya3MgZmluZSB3aXRoIGhhcmR3YXJlIGZsb3cgY29udHJvbC4KKyMKKyMgVGhlIGZvbGxvd2luZyBudWxsLW1vZGVtIGNhYmxlIHNob3VsZCBmaXggdGhpcyBhbmQgZW5hYmxlIHlvdSB0byB1c2UKKyMgUlRTL0NUUyBoYW5kc2hha2luZyAod2hpY2ggTGludXggc3VwcG9ydHMsIHVzZSBDUlRTQ1RTIHNldHRpbmcpLiBBbHNvCisjIHNldCBBRE0tMTIrIGZvciBEVFIgaGFuZHNoYWtpbmcgZnJvbSBzdXBlcnZpc29yIHNldHVwLgorIworIyBQQyBTZXJpYWwgICBBRE0tMTIrCisjICAtLS0tLS0tLSAgIC0tLS0tLS0KKyMgICAgICAgICAyIC0gMworIyAgICAgICAgIDMgLSAyCisjICAgICAgICAgNCAtIDUKKyMgICAgICAgICA1IC0gMjAKKyMgICAgICAgNiw4IC0gNAorIyAgICAgICAgIDcgLSA3CisjICAgICAgICAyMCAtIDYsOAorIworYWRtMTJ8bHNpIGFkbTEyLAorCU9UYnMsIE9UcHQsIGFtLCBtaXIsCisJT1R1ZyMxLCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5aLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCwgaG9tZT1eXiwgaHRzPVxFMSwgaWNoMT1cRVEsIGlsMT1cRUUsCisJaXMyPVxFMCAgICAgICAgXEUxICAgICAgICBcRTEgICAgICAgIFxFMSAgICAgICAgXEUxICAgICAgICBcRTEgICAgICAgIFxFMSAgICAgICAgXEUxICAgICAgICBcRTEsCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtmMD1eQTBcciwga2YxPV5BMVxyLAorCWtmMj1eQTJcciwga2YzPV5BM1xyLCBrZjQ9XkE0XHIsIGtmNT1eQTVcciwga2Y2PV5BNlxyLAorCWtmNz1eQTdcciwga2Y4PV5BOFxyLCBrZjk9XkE5XHIsIHJtaXI9XEVyLCBzbWlyPVxFcSwgdGJjPVxFMCwKKwl1c2U9YWRtK3NnciwKKyMgKGFkbTIwOiByZW1vdmVkIG9ic29sZXRlICI6a24jNzoiIC0tIGVzcikKK2FkbTIwfGxlYXIgc2llZ2xlciBhZG0yMCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1cRUksIGNsZWFyPV5aLCBjcj1eTSwgY3ViMT1eSCwgY3VmMT1eTCwKKwljdXA9XEU9JWklcDIlezMxfSUrJWMlcDElezMxfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGVkPVxFWSwgZWw9XEVULCBob21lPV5eLCBodD1eSSwgaWNoMT1cRVEsIGlsMT1cRUUsCisJa2YxPV5BLCBrZjI9XkIsIGtmMz1eVywga2Y0PV5ELCBrZjU9XkUsIGtmNj1eWCwga2Y3PV5aLCBybXNvPVxFKCwKKwlzZ3IwPVxFKCwgc21zbz1cRSksCithZG0yMXxsZWFyIHNpZWdsZXIgYWRtMjEsCisJeG1jIzEsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgZGNoMT1cRVcsIGRsMT0zMCpcRVIsIGVkPVxFWSwgZWw9XEVULAorCWljaDE9XEVRLCBpbDE9MzAqXEVFLCBpbmQ9XkosIGludmlzQCwga2JzPV5ILCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBraG9tZT1eXiwgdXNlPWFkbStzZ3IsCisJdXNlPWFkbTNhLAorIyAoYWRtMjI6ICI6ZW09OiIgd2FzIGFuIG9idmlvdXMgdHlwbyBmb3IgIjplaT06IjsgYWxzbywKKyMgcmVtb3ZlZCBvYnNvbGV0ZSAiOmtuIzc6bWE9al5Ka15QXkteUGwgXlJeTF5MIDoiOworIyByZW1vdmVkIGJvZ3VzLWxvb2tpbmcgXDIwMCBmcm9tIGJlZm9yZSA8Y3VwPi4gLS0gZXNyKQorYWRtMjJ8bHNpIGFkbTIyLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XEUrLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRXksIGVsPVxFdCwgaG9tZT1eXiwgaHQ9XEVpLCBpY2gxPVxFUSwgaWwxPVxFRSwKKwlpczI9XEUlXDAxNFwwMTRcMDE0XDAxNlwwMDNcMFwwMDNcMDAyXDAwM1wwMDJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtmMT1eQUBcciwKKwlrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwKKwlrZjc9XkFGXHIsIGtob21lPV5eLCBsZjE9RjEsIGxmMj1GMiwgbGYzPUYzLCBsZjQ9RjQsIGxmNT1GNSwKKwlsZjY9RjYsIGxmNz1GNywgcm1zbz1cRSgsIHNncjA9XEUoLCBzbXNvPVxFKSwKKyMgQURNIDMxIERJUCBTd2l0Y2hlcworIworIyBUaGlzIGluZm9ybWF0aW9uIGNvbWVzIGZyb20gdHdvIHZlcnNpb25zIG9mIHRoZSBtYW51YWwgZm9yIHRoZQorIyBMZWFyLVNpZWdsZXIgQURNIDMxLgorIworIyBNYWluIGJvYXJkOgorIyAgICAgICAgICAgICAgICAgIHJlYXIgb2YgY2FzZQorIyAgICstfHx8fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjICAgKyBTMVMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHxTICAgICsKKyMgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fDMgICAgKworIyAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisjICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHxTICAgICAgICsKKyMgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fDQgICAgICAgKworIyAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisjICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyMgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIyAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisjICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyMgKy0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0rCisjICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIyArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFM1IFM2IFM3ICAgICAgICsKKyMgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSA9PSA9PSAgICAgICArCisjICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIyAgICAgICAgICAgIGZyb250IG9mIGNhc2UgKGtleWJvYXJkKQorIworIyAgUzEgLSBEYXRhIFJhdGUgLSBNb2RlbQorIyAgUzIgLSBEYXRhIFJhdGUgLSBQcmludGVyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEYXRhIFJhdGUgICBTZXR0aW5nCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNTAgICAgICAgICAgMCAwIDAgMAorIyA3NSAgICAgICAgICAxIDAgMCAwCisjIDExMCAgICAgICAgIDAgMSAwIDAKKyMgMTM0LjUgICAgICAgMSAxIDAgMAorIyAxNTAgICAgICAgICAwIDAgMSAwCisjIDMwMCAgICAgICAgIDEgMCAxIDAKKyMgNjAwICAgICAgICAgMCAxIDEgMAorIyAxMjAwICAgICAgICAxIDEgMSAwCisjIDE4MDAgICAgICAgIDAgMCAwIDEKKyMgMjAwMCAgICAgICAgMSAwIDAgMQorIyAyNDAwICAgICAgICAwIDEgMCAxCisjIDM2MDAgICAgICAgIDEgMSAwIDEKKyMgNDgwMCAgICAgICAgMCAwIDEgMQorIyA3MjAwICAgICAgICAxIDAgMSAxCisjIDk2MDAgICAgICAgIDAgMSAxIDEKKyMgeCAgICAgICAgICAgMSAxIDEgMQorIworIyBTMyAtIEludGVyZmFjZS9QcmludGVyL0F0dHJpYnV0ZXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByaW50ZXIgQnVzeSBDb250cm9sCisjIHN3MSAgIHN3MiAgIHN3MworIyAtLS0tLS0tLS0tLS0tLS0KKyMgb2ZmICAgb2ZmICAgb2ZmICAgQnVzeSBub3QgYWN0aXZlLCBDRCBkaXNhYmxlZAorIyBvZmYgICBvZmYgICBvbiAgICBCdXN5IG5vdCBhY3RpdmUsIENEIGVuYWJsZWQKKyMgb2ZmICAgb24gICAgb2ZmICAgQnVzeSBhY3RpdmUgb24gSjUtMjAsIENEIGRpc2FibGVkCisjIG9uICAgIG9mZiAgIG9mZiAgIEJ1c3kgYWN0aXZlIG9uIEo1LTE5LCBDRCBkaXNhYmxlZCAtIEZhY3RvcnkgU2V0LgorIyBvbiAgICBvZmYgICBvbiAgICBCdXN5IGFjdGl2ZSBvbiBKNS0xOSwgQ0QgZW5hYmxlZAorIworIyBzdzQgICBVc2VkIGluIGNvbmp1Y3Rpb24gd2l0aCBTNCBmb3IgY29tbSBpbnRlcmZhY2UgY29udHJvbCAtIEZhY3QgMAorIworIyBzdzUgICBTZWNvbmRhcnkgQ2hhbm5lbCBDb250cm9sIChIYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBvbmx5KSAtIEZhY3QgMAorIworIyBzdzYgICBPTiBlbmFibGVzIHByaW50ZXIgQlVTWSBhY3RpdmUgTE9XIC0gRmFjdG9yeSBTZXR0aW5nCisjICAgICAgIE9GRiBlbmFibGVzIHByaW50ZXIgQlVTWSBhY3RpdmUgSElHSCAtIElmIHNldCB0byB0aGlzLCBBRE0zMSBzZW5zZXMKKyMKKyMgc3c3ICAgT04gLSBzdGVhZHkgY3Vyc29yIC0gRmFjdG9yeSBTZXR0aW5nCisjICAgICAgIE9GRiAtIGJsaW5raW5nIGN1cnNvcgorIworIyBzdzggICBPTiBjYXVzZXMgc2VsZWN0ZWQgYXR0cmlidXRlIGNoYXJhY3RlciB0byBiZSBkaXNwbGF5ZWQKKyMgICAgICAgT0ZGIGNhdXNlcyBTUEFDRSB0byBiZSBkaXNwbGF5ZWQgaW5zdGVhZCAtIEZhY3RvcnkgU2V0dGluZworIworIyBTNCAtIEludGVyZmFjZQorIyAtLS0tLS0tLS0tLS0tLQorIyBNb2RlbSBJbnRlcmZhY2UKKyMgUzMgICAgUzQgICAgUzQgICAgUzQgICAgUzQKKyMgc3c0ICAgc3cxICAgc3cyICAgc3czICAgc3c0CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPRkYgICBPTiAgICBPRkYgICBPTiAgICBPRkYgICBFbmFibGUgUlMtMjMyQyBpbnRlcmZhY2UsIERpcmVjdCBDb25uZWN0IGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IExvb3AgZGlzYWJsZWQgLSBGYWN0b3J5IFNldHRpbmcKKyMgT04gICAgT04gICAgT0ZGICAgT04gICAgT0ZGICAgRW5hYmxlIEN1cnJlbnQgTG9vcCBpbnRlcmZhY2UsIERpcmVjdCBDb25uZWN0CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkCisjIE9GRiAgIE9GRiAgIE9OICAgIE9GRiAgIE9OICAgIEVuYWJsZSBEaXJlY3QgQ29ubmVjdCBpbnRlcmZhY2UsIFJTLTIzMkMgYW5kCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgTG9vcCBEaXNhYmxlZAorIworIyBzdzUgICBPTiBkaXNhYmxlcyBkb3Qgc3RyZXRjaGluZyBtb2RlIC0gRmFjdG9yeSBTZXR0aW5nCisjICAgICAgIE9GRiBlbmFibGVzIGRvdCBzdHJldGNoaW5nIG1vZGUKKyMgc3c2ICAgT04gZW5hYmxlcyBibGFua2luZyBmdW5jdGlvbgorIyAgICAgICBPRkYgZW5hYmxlcyB1bmRlcmxpbmUgZnVuY3Rpb24gLSBGYWN0b3J5IFNldHRpbmcKKyMgc3c3ICAgT04gY2F1c2VzIE5VTExTIHRvIGJlIGRpc3BsYXllZCBhcyBOVUxMUworIyAgICAgICBPRkYgY2F1c2VzIE5VTExTIHRvIGJlIGRpc3BsYXllZCBhcyBTUEFDRVMgLSBGYWN0b3J5IFNldHRpbmcKKyMKKyMgUzUgLSBXb3JkIFN0cnVjdHVyZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIHN3MSAgIE9OIGVuYWJsZXMgQlJFQUsga2V5IC0gRmFjdG9yeSBTZXR0aW5nCisjICAgICAgIE9GRiBkaXNhYmxlcyBCUkVBSyBrZXkKKyMgc3cyICAgT04gc2VsZWN0cyA1MEh6IG1vbml0b3IgcmVmcmVzaCByYXRlCisjICAgICAgIE9GRiBzZWxlY3RzIDYwSHogbW9uaXRvciByZWZyZXNoIHJhdGUgLSBGYWN0b3J5IFNldHRpbmcKKyMKKyMgTW9kZW0gUG9ydCBTZWxlY3Rpb24KKyMgc3czICAgc3c0ICAgc3c1CisjIC0tLS0tLS0tLS0tLS0tLQorIyBPTiAgICBPTiAgICBPTiAgICBTZWxlY3RzIDcgREFUQSBiaXRzLCBldmVuIHBhcml0eSwgMiBTVE9QIGJpdHMKKyMgT0ZGICAgT04gICAgT04gICAgU2VsZWN0cyA3IERBVEEgYml0cywgb2RkICBwYXJpdHksIDIgU1RPUCBiaXRzCisjIE9OICAgIE9GRiAgIE9OICAgIFNlbGVjdHMgNyBEQVRBIGJpdHMsIGV2ZW4gcGFyaXR5LCAxIFNUT1AgYml0IC0gRmFjdG9yeSBTZXQuCisjIE9GRiAgIE9GRiAgIE9OICAgIFNlbGVjdHMgNyBEQVRBIGJpdHMsIG9kZCAgcGFyaXR5LCAxIFNUT1AgYml0CisjIE9OICAgIE9OICAgIE9GRiAgIFNlbGVjdHMgOCBEQVRBIGJpdHMsIG5vICAgcGFyaXR5LCAyIFNUT1AgYml0cworIyBPRkYgICBPTiAgICBPRkYgICBTZWxlY3RzIDggREFUQSBiaXRzLCBubyAgIHBhcml0eSwgMSBTVE9QIGJpdAorIyBPTiAgICBPRkYgICBPRkYgICBTZWxlY3RzIDggREFUQSBiaXRzLCBldmVuIHBhcml0eSwgMSBTVE9QIGJpdAorIyBPRkYgICBPRkYgICBPRkYgICBTZWxlY3RzIDggREFUQSBiaXRzLCBvZGQgIHBhcml0eSwgMSBTVE9QIGJpdAorIworIyBzdzYgICBPTiAgc2VuZHMgYml0IDggYSAxIChtYXJrKQorIyAgICAgICBPRkYgc2VuZHMgYml0IDggYXMgMCAoc3BhY2UpIC0gRmFjdG9yeSBTZXR0aW5nCisjIHN3NyAgIE9OICBzZWxlY3RzIEJsb2NrIE1vZGUKKyMgICAgICAgT0ZGIHNlbGVjdHMgQ29udmVyc2F0aW9uIE1vZGUgLSBGYWN0b3J5IFNldHRpbmcKKyMgc3c4ICAgT04gIHNlbGVjdHMgRnVsbCBEdXBsZXggb3BlcmF0aW9uCisjICAgICAgIE9GRiBzZWxlY3RzIEhhbGYgRHVwbGV4IG9wZXJhdGlvbiAtIEZhY3RvcnkgU2V0dGluZworIworIyBTNiAtIFByaW50ZXIKKyMgLS0tLS0tLS0tLS0tCisjIHN3MSwgc3cyLCBzdzYsIHN3NyAgIFJlc2VydmVkIC0gRmFjdG9yeSAwCisjCisjIFByaW50ZXIgUG9ydCBTZWxlY3Rpb24KKyMgc2FtZSBhcyBNb2RlbSBhYm92ZSwgYml0IDggKHdoZW4gOCBEQVRBIGJpdHMpIGlzIGFsd2F5cyA9IDAKKyMKKyMgc3c4ICAgT04gICBlbmFibGVzIFByaW50ZXIgUG9ydAorIyAgICAgICBPRkYgZGlzYWJsZXMgUHJpbnRlciBQb3J0IC0gRmFjdG9yeSBTZXR0aW5nCisjCisjIFM3IC0gUG9sbGluZyBBZGRyZXNzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHN3MS03IEVzdGFibGlzaCBBU0NJSSBjaGFyYWN0ZXIgd2hpY2ggZGVzaWduYXRlcyB0ZXJtaW5hbCBwb2xsaW5nIGFkZHJlc3MKKyMgICAgICAgT04gID0gbG9naWMgMAorIyAgICAgICBPRkYgPSBsb2dpYyAxIC0gRmFjdG9yeSBTZXR0aW5nCisjIHN3OCAgIE9OICAgZW5hYmxlcyBQb2xsaW5nIE9wdGlvbgorIyAgICAgICBPRkYgZGlzYWJsZXMgUG9sbGluZyBPcHRpb24gLSBGYWN0b3J5IFNldHRpbmcKKyMKKyMKKyMgT24gc29tZSBvbGRlciBhZG0zMXMsIFM0IGRvZXMgbm90IGV4aXN0LCBhbmQgUzUtc3c2IGlzIG5vdCBkZWZpbmVkLgorIworIyBUaGlzIGFkbTMxIGVudHJ5IHVzZXMgdW5kZXJsaW5lIGFzIHRoZSBzdGFuZG91dCBtb2RlLgorIyBJZiB0aGUgYWRtMzEgZ2l2ZXMgeW91IHRyb3VibGUgd2l0aCBzdGFuZG91dCBtb2RlLCBjaGVjayB0aGUgRElQIHN3aXRjaCBpbgorIyBwb3NpdGlvbiA2LCBiYW5rIEBjMTEsIDI1JSBmcm9tIGJhY2sgZW5kIG9mIHRoZSBjaXJjdWl0IGJvYXJkLiAgU2hvdWxkIGJlCisjIE9GRi4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggc3dpdGNoLCB5b3UgaGF2ZSBhbiBvbGQgYWRtMzEgYW5kIG11c3QgdXNlIG9hZG0zMS4KKyMgKGFkbTMxOiByZW1vdmVkIG9ic29sZXRlICI6bWE9al5Ka15QXkteUGwgXlJeTF5MIDoiIC0tIGVzcikKK2FkbTMxfGxzaSBhZG0zMSB3aXRoIHN3NiBzZXQgZm9yIHVuZGVybGluZSBtb2RlLAorCU9UYnMsIGFtLCBtaXIsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRSosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGVkPVxFWSwgZWw9XEVULCBob21lPV5eLCBpbDE9XEVFLCBpbmQ9XkosIGlzMj1cRXVcRTAsCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtmMD1eQTBcciwga2YxPV5BMVxyLAorCWtmMj1eQTJcciwga2YzPV5BM1xyLCBrZjQ9XkE0XHIsIGtmNT1eQTVcciwga2Y2PV5BNlxyLAorCWtmNz1eQTdcciwga2Y4PV5BOFxyLCBrZjk9XkE5XHIsIHJtaXI9XEVyLCBybXNvPVxFRzAsCisJcm11bD1cRUcwLCBzZ3IwPVxFRzAsIHNtaXI9XEVxLCBzbXNvPVxFRzEsIHNtdWw9XEVHMSwKK2FkbTMxLW9sZHxvMzF8b2xkIGFkbTMxLAorCXJtdWxALCBzbXNvPVxFRzQsIHNtdWxALCB1c2U9YWRtMzEsCisjIExTSSBBRE0tMzYgZnJvbSBDb2wuIEdlb3JnZSBMLiBTaWNoZXJtYW4gPGdsb3JpYSFjb2xvbmVsPiB2aWEgQlJMCithZG0zNnxMU0kgQURNMzYsCisJT1RicywgT1RwdCwKKwlPVGtuIzQsCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsCisJaXMyPVxFPFxFPlxFWzY7PzI7Pzc7PzhoXEVbNDsyMDs/MTs/Mzs/NDs/NTs/Njs/MTg7PzE5bCwKKwl1c2U9dnQxMDAsCisjIChhZG00MjogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5LXlA6IiAtLSBlc3IpCithZG00Mnxsc2kgYWRtNDIsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1cRTssIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJY3Z2aXM9XEVDXEUzIFxFMygsIGRjaDE9XEVXLCBkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCwgaHQ9XkksCisJaWwxPVxFRSQ8MjcwPiwgaW5kPV5KLCBpbnZpc0AsIGlwPSQ8Nio+LCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkwsIGtjdXUxPV5LLCBraG9tZT1eXiwgcGFkPVwxNzcsIHJtaXI9XEVyLCBybXVsQCwKKwlzbWlyPVxFcSwgc211bEAsIHVzZT1hZG0rc2dyLAorIyBUaGUgZm9sbG93aW5nIHRlcm1jYXAgZm9yIHRoZSBMZWFyIFNpZWdsZXIgQURNLTQyIGxlYXZlcyB0aGUKKyMgInN5c3RlbSBsaW5lIiBhdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4gYmxhbmsgKGZvciB0aG9zZSB3aG8KKyMgZmluZCBpdCBkaXN0cmFjdGluZyBvdGhlcndpc2UpCithZG00Mi1uc3xsc2kgYWRtLTQyIHdpdGggbm8gc3lzdGVtIGxpbmUsCisJY2J0PVxFSVxFRiBcMDExLCBjbGVhcj1cRTtcRUYgXDAxMSwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDw2PlxFRiBcMDExLAorCWRjaDE9XEVXXEVGIFwwMTEsIGRsMT1cRVJcRUYgXDAxMSwgZWQ9XEVZXEVGIFwwMTEsCisJZWw9XEVUXEVGIFwwMTEsIGlsMT1cRUVcRUYgXDAxMSwgcm1pcj1cRXJcRUYgXDAxMSwKKwlzbWlyPVxFcVxFRiBcMDExLCB1c2U9YWRtNDIsCisjIEFETSAxMTc4IHRlcm1pbmFsIC0tIHJhdGhlciBsaWtlIGFuIEFETS00Mi4gIE1hbnVhbCBpcyBkYXRlZCBNYXJjaCAxIDE5ODUuCisjIFRoZSBpbnNlcnQgbW9kZSBvZiB0aGlzIHRlcm1pbmFsIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCdzIGJyb2tlbiBmb3Igb3VyCisjIHB1cnBvc2VzIGluIHRoYXQgaXQgd2lsbCBzaGlmdCB0aGUgcG9zaXRpb24gb2YgZXZlcnkgY2hhcmFjdGVyIG9uIHRoZSBwYWdlLAorIyBub3QganVzdCB0aGUgY3Vyc29yIGxpbmUhCisjIEZyb206IE1pY2hhZWwgRHJpc2NvbGwgPGZlbnJpc0BsaWdodHNwZWVkLm5ldD4gMTAgSnVseSAxOTk2CithZG0xMTc4fDExNzh8bHNpIGFkbTExNzgsCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMxLAorCWJlbD1eRywgYm9sZD1cRSgsIGNidD1cRUksIGNsZWFyPVxFKywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwljdnZpcz1cRUNcRTMgXEUzKCwgZGNoMT1cRVcsIGRsMT1cRVIsIGVkPVxFWSwgZWw9XEVULAorCWhvbWU9Xl4sIGh0PV5JLCBpbDE9XEVFLCBpbmQ9XkosIGlwPSQ8NiovPiwga2JzPV5ILCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwgbmVsPV5NXkosIHBhZD1cMTc3LCByZXY9XEVHNCwgcm1zbz1cRUcwLCBybXVsPVxFRzAsCisJc2dyMD1cRSksIHNtc289XEVHNCwgc211bD1cRUcxLAorCisjIyMjIFByaW1lCisjCisjIFllcywgUHJpbWUgbWFkZSB0ZXJtaW5hbHMuICBUaGVzZSBlbnRyaWVzIHdlcmUgcG9zdGVkIGJ5IEtldmluIEouIEN1bW1pbmdzCisjIDxjdW1taW5nc0BwcmltZXJkLnByaW1lLmNvbT4gb24gMTQgRGVjIDE5OTIgYW5kIGxpZ2h0bHkgZWRpdGVkIGJ5IGVzci4KKyMgUHJpbWUgbWVyZ2VkIHdpdGggQ29tcHV0ZXJWaXNpb24gaW4gdGhlIGxhdGUgMTk4MHM7IHlvdSBjYW4gcmVhY2ggdGhlbSBhdDoKKyMKKyMJQ29tcHV0ZXJWaXNpb24gU2VydmljZXMKKyMJNTAwIE9sZCBDb25uZWN0aWN1dCBQYXRoCisjCUZyYW1pbmdoYW0sIE1hc3MuCisjCisKKyMgU3RhbmRvdXQgbW9kZSBpcyBkaW0gcmV2ZXJzZS12aWRlby4KK3B0MTAwfHB0MjAwfHdyZW58ZmVuaXh8cHJpbWUgcHQxMDAvcHQyMDAsCisJYW0sIGJ3LCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2J0PVxFW1osIGNsZWFyPVxFPywgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRUQsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEUwJXAxJXszM30lKyVjJXAyJXszM30lKyVjLCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVNLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGwxPVxFW00sCisJZWQ9XEVbSlxFW3IsIGVsPVxFW0tcRVt0LCBmbGFzaD1cRSQkPDIwMC8+XEUkUCwKKwlob21lPVxFJEIsIGh0PV5JLCBpbDE9XEVbTFxFW3QsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFJEEsIG5lbD1eTV5KLAorCXJtY3VwPSwgcm1pcj1cRVs0bCwgcm1reD1cRVs+MTNsLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sCisJc21jdXA9XEVbPjFsXEVbPjJsXEVbPjE2bFxFWzRsXEVbPjlsXEVbMjBsXEVbPjNsXEVbPjdoXEVbPjEybFxFWzFRLAorCXNtaXI9XEVbNGgsIHNta3g9XEVbPjEzaCwgc21zbz1cRVsyOzdtLCBzbXVsPVxFWzRtLAorcHQxMDB3fHB0MjAwd3x3cmVud3xmZW5peHd8cHJpbWUgcHQxMDAvcHQyMDAgaW4gMTMyLWNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgdXNlPXB0MTAwLAorcHQyNTB8UHJpbWUgUFQyNTAsCisJcm1zb0AsIHNtc29ALCB1c2U9cHQxMDAsCitwdDI1MHd8UHJpbWUgUFQyNTAgaW4gMTMyLWNvbHVtbiBtb2RlLAorCXJtc29ALCBzbXNvQCwgdXNlPXB0MTAwdywKKworIyMjIyBRdW1lIChxdnQpCisjCisjCVF1bWUsIEluYy4KKyMJMzQ3NS1BIE5vcnRoIDFzdCBTdHJlZXQKKyMJU2FuIEpvc2UgQ0EgOTUxMzQKKyMJVm94OiAoODAwKS00NTctNDQ0NworIwlGYXg6ICg0MDgpLTQ3My0xNTEwCisjCU5ldDogam9zZWRAdGVjaHN1cHAud3lzZS5jb20gKEpvc2UgRCdPbGl2ZWlyYSkKKyMKKyMgUXVtZSB3YXMgYm91Z2h0IGJ5IFd5c2UsIGJ1dCBzdGlsbCAoYXMgb2YgZWFybHkgMTk5NSkgaGFzIGl0cyBvd24gc3VwcG9ydAorIyBncm91cCBhbmQgcHJvZHVjdGlvbiBkaXZpc2lvbi4KKyMKKyMgRGlzY29udGludWVkIFF1bWUgbW9kZWxzOgorIworIyBUaGUgcXZ0MTAxIGFuZCBxdnQxMDIgbGlzdGVkIGhlcmUgYXJlIGxvbmcgb2Jzb2xldGU7IHNvIGlzIHRoZSBxdnQxMDErCisjIGJ1aWx0IHRvIHJlcGxhY2UgdGhlbSwgYW5kIGEgcXZ0MTE5KyB3aGljaCB3YXMgYSAxMDErIHdpdGggYXZhaWxhYmxlIHdpZGUKKyMgbW9kZSAoMTMyIGNvbHVtbnMpLiAgVGhlcmUgd2FzIGEgcXZ0MTAzIHdoaWNoIGFkZGVkIHZ0MTAwL3Z0MTMxIGVtdWxhdGlvbnMKKyMgYW5kIGFuIEFOU0ktY29tcGF0aWJsZSBxdnQyMDMgdGhhdCByZXBsYWNlZCBpdC4gIFF1bWUgc3RhcnRlZCBwcm9kdWNpbmcKKyMgQU5TSS1jb21wYXRpYmxlIHRlcm1pbmFscyB3aXRoIHRoZSBxdnQzMjMgYW5kIHF2dDYxLgorIworIyBDdXJyZW50IFF1bWUgbW9kZWxzIChhcyBvZiBGZWJydWFyeSAxOTk1KToKKyMKKyMgQWxsIGN1cnJlbnQgUXVtZSB0ZXJtaW5hbHMgaGF2ZSBBTlNJLWNvbXBhdGlibGUgb3BlcmF0aW9uIG1vZGVzLgorIyBRdW1lIGlzIHN0aWxsIHByb2R1Y2luZyB0aGUgcXZ0NjIsIHdoaWNoIGZlYXR1cmVzIGVtdWxhdGlvbnMgZm9yIG90aGVyCisjIHBvcHVsYXIgbGluZXMgc3VjaCBhcyBBRERTLCBhbmQgZHVhbC1ob3N0IGNhcGFiaWxpdGllcy4gIFRoZSBxdnQ4MiBpcworIyBkZXNpZ25lZCBmb3IgdXNlIGFzIGEgU0NPIEFOU0kgdGVybWluYWwuICBUaGUgcXZ0NzAgaXMgYSBjb2xvciB0ZXJtaW5hbAorIyB3aXRoIG1hbnkgZW11bGF0aW9ucyBpbmNsdWRpbmcgV3lzZTM3MCwgV3lzZSAzMjUsIGV0Yy4gIFRoZWlyIG5ld2VzdAorIyBtb2RlbCBpcyB0aGUgcXZ0NTIwLCB3aGljaCBpcyB2dDQyMC1jb21wYXRpYmxlLgorIworIyBUaGVyZSBhcmUgc29tZSBhbmNpZW50IHByaW50aW5nIFF1bWUgdGVybWluYWxzIHVuZGVyIGBEYWlzeSBXaGVlbCBQcmludGVycycKKyMKKyMgSWYgeW91IGluaGVyaXQgYSBRdW1lIHdpdGhvdXQgZG9jcywgdHJ5IEN0cmwtU2hpZnQtU2V0dXAgdG8gZW50ZXIgaXRzCisjIHNldHVwIG1vZGUuICBTaGlmdC1zIHNob3VsZCBiZSBhIGNvbmZpZ3VyYXRpb24gc2F2ZSB0byBOVlJBTS4KKworcXZ0MTAxfHF2dDEwOHxxdW1lIHF2dCAxMDEgYW5kIFFWVCAxMDgsCisJeG1jIzEsIHVzZT1xdnQxMDErLAorCisjIFRoaXMgdXNlZCB0byBoYXZlIDxjdnZpcz1cRS4yPiBidXQgbm8gPGNub3JtPiBvciA8Y2l2aXM+LiAgVGhlIEJTRCB0ZXJtY2FwCisjIGZpbGUgaGFkIDxjdnZpcz1cRU00IFwyMDBcMjAwXDIwMD4uICBJJ3ZlIGRvbmUgdGhlIHNhZmUgdGhpbmcgYW5kIHlhbmtlZAorIyBib3RoLiBUaGUgPHJldj4gaXMgZnJvbSBCU0QsIHdoaWNoIGFsc28gY2xhaW1lZCBib2xkPVxFKCBhbmQgZGltPVxFKS4KKyMgV2hhdCBzZWVtcyB0byBiZSBnb2luZyBvbiBoZXJlIGlzIHRoYXQgdGhpcyBlbnRyeSB3YXMgZGVzaWduZWQgc28gdGhhdAorIyB0aGUgbm9ybWFsIGhpZ2hsaWdodCBpcyBib2xkIGFuZCBzdGFuZG91dCBpcyBkaW0gcGx1cyBzb21ldGhpbmcgZWxzZQorIyAocmV2ZXJzZS12aWRlbyBtYXliZT8gIEJ1dCB0aGVuLCBhcmUgdGhlcmUgdHdvIDxyZXY+IHNlcXVlbmNlcz8pCitxdnQxMDErfHF2dDEwMXB8cXVtZSBxdnQgMTAxIFBMVVMgcHJvZHVjdCwKKwlhbSwgYncsIGhzLCB1bCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzAsCisJYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1eWiwgY25vcm09XEUuNCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFVywgZGwxPVxFUiwgZHNsPVxFZ1xFZlxyLCBlZD1cRVksIGVsPVxFVCwKKwlmbGFzaD1cRWIkPDIwMD5cRWQsIGZzbD1eTSwgaG9tZT1eXiwgaHQ9XkksIGh0cz1cRTEsCisJaWNoMT1cRVEsIGlsMT1cRUUsIGluZD1eSiwgaW52aXNALCBrYnM9XkgsIGtjYnQ9XEVJLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGwxPVxFUiwga2VkPVxFWSwga2VsPVxFVCwKKwlrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsCisJa2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsCisJa2hvbWU9Xl4sIGtpY2gxPVxFUSwga2lsMT1cRUUsIG1jND1cRUEsIG1jNT1cRUAsIHJtc289XEUoLAorCXNtc289XEUwUFxFKSwgdGJjPVxFMywgdHNsPVxFZ1xFZiwgdXNlPWFkbStzZ3IsCitxdnQxMDJ8cXVtZSBxdnQgMTAyLAorCWNub3JtPVxFLiwgdXNlPXF2dDEwMSwKKyMgKHF2dDEwMzogYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiBpbml0IHN0cmluZyAtLSBlc3IpCitxdnQxMDN8cXVtZSBxdnQgMTAzLAorCWFtLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsCisJYmVsPV5HLCBibGluaz1cRVs1bSQ8Mj4sIGJvbGQ9XEVbMW0kPDI+LAorCWNsZWFyPVxFW0hcRVsySiQ8NTA+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDJDwyPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSQ8Mj4sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGhvbWU9XEVbSCwgaHQ9XkksCisJaHRzPVxFSCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIHJjPVxFOCwKKwlyZXY9XEVbN20kPDI+LCByaT1cRU0kPDU+LCBybWFtPVxFWz83bCwgcm1reD1cRVs/MWxcRT4sCisJcm1zbz1cRVttJDwyPiwgcm11bD1cRVttJDwyPiwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyPVxFWyU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTttJDwyPiwKKwlzZ3IwPVxFW20kPDI+LCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sCisJc21zbz1cRVs3bSQ8Mj4sIHNtdWw9XEVbNG0kPDI+LCB0YmM9XEVbM2csCitxdnQxMDMtd3xxdW1lIHF2dDEwMyAxMzIgY29scywKKwljb2xzIzEzMiwgbGluZXMjMjQsCisJcnMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz84aCwgdXNlPXF2dDEwMywKK3F2dDExOSt8cXZ0MTE5cHxxdnQxMTl8cXVtZSBxdnQgMTE5IGFuZCAxMTlQTFVTIHRlcm1pbmFscywKKwlhbSwgaHMsIG1pciwgbXNnciwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzAsCisJYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1cRSoxLCBjbm9ybT1cRS40LCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPV5MLCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XkssIGN2dmlzPVxFLjIsIGRjaDE9XEVXLCBkbDE9XEVSLCBkc2w9XEVnXEVmXHIsIGVkPVxFeSwKKwllbD1cRXQsIGZsYXNoPVxFbjAkPDIwMD5cRW4xLCBmc2w9Xk0sIGhvbWU9Xl4sIGh0PV5JLAorCWh0cz1cRTEsIGlsMT1cRUUsIGluZD1eSiwgaXMyPVxFREZcRUNcRUcwXEVyXEUoXEUlRVgsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2YwPV5BSVxyLAorCWtmMT1eQUBcciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLAorCWtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sCisJbWM0PVxFQSwgbWM1PVxFQCwgcmk9XEVKLCBybWlyPVxFciwgc21pcj1cRXEsIHNtdWw9XEVHOCwKKwl0YmM9XEUzLCB0c2w9XEVnXEVmLCB1c2U9YWRtK3NnciwKK3F2dDExOSstMjV8cXZ0MTE5cC0yNXxRVlQgMTE5IFBMVVMgd2l0aCAyNSBkYXRhIGxpbmVzLAorCWxpbmVzIzI1LCB1c2U9cXZ0MTE5KywKK3F2dDExOSstd3xxdnQxMTlwLXd8cXZ0MTE5LXd8UVZUIDExOSBhbmQgMTE5IFBMVVMgaW4gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLAorCWlzMj1cRURGXEVDXEVHMFxFclxFKFxFJVxFWFxFbjQsIHVzZT1xdnQxMTkrLAorcXZ0MTE5Ky0yNS13fHF2dDExOXAtMjUtd3xxdnQxMTktMjUtd3xRVlQgMTE5IGFuZCAxMTkgUExVUyAxMzIgYnkgMjUsCisJbGluZXMjMjUsIHVzZT1xdnQxMTkrLAorcXZ0MjAzfHF2dDIwMyt8cXVtZSBxdnQgMjAzIFBsdXMsCisJZGNoMT1cRVtQJDw3PiwgZGwxPVxFW00kPDk5PiwgaWwxPVxFW0wkPDk5PiwgaW5kPVxuJDwzMD4sCisJaXA9JDw3Piwga2YwPVxFWzI5fiwga2YxPVxFWzE3fiwga2YyPVxFWzE4fiwga2YzPVxFWzE5fiwKKwlrZjQ9XEVbMjB+LCBrZjU9XEVbMjF+LCBrZjY9XEVbMjN+LCBrZjc9XEVbMjR+LCBrZjg9XEVbMjV+LAorCWtmOT1cRVsyOH4sIHJtaXI9XEVbNGwsIHNtaXI9XEVbNGgsIHVzZT1xdnQxMDMsCitxdnQyMDMtd3xxdnQyMDMtdy1hbXxxdW1lIHF2dCAyMDMgUExVUyBpbiAxMzIgY29scyAody9hZHZhbmNlZCB2aWRlbyksCisJY29scyMxMzIsIGxpbmVzIzI0LAorCXJzMj1cRT5cRVs/M2hcRVs/NGxcRVs/NWxcRVs/OGgsIHVzZT1xdnQyMDMsCisjCisjCVNpbmNlIGEgY29tbWFuZCBpcyBwcmVzZW50IGZvciBlbmFibGluZyAyNSBkYXRhIGxpbmVzLAorIwlhIHNwZWNpZmljIHRlcm1pbmZvIGVudHJ5IG1heSBiZSBnZW5lcmF0ZWQgZm9yIHRoZSAyMDMuCisjCUlmIG9uZSBpcyBkZXNpcmVkIGZvciB0aGUgUVZUIDExOSBQTFVTIHRoZW4gMjUgbGluZXMgbXVzdAorIwliZSBzZWxlY3RlZCBpbiB0aGUgc3RhdHVzIGxpbmUgKHNldHVwIGxpbmUgOSkuCisjCitxdnQyMDMtMjV8UVZUIDIwMyBQTFVTIHdpdGggMjUgYnkgODAgY29sdW1uIG1vZGUsCisJY29scyM4MCwgbGluZXMjMjUsCisJaXMyPVxFWz00MGhcRVs/M2wsIHVzZT1xdnQyMDMsCitxdnQyMDMtMjUtd3xRVlQgMjAzIFBMVVMgd2l0aCAyNSBieSAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwgbGluZXMjMjUsCisJcnMyPVxFWz8zaFxFWz00MGgsIHVzZT1xdnQyMDMsCisKKyMjIyMgVGVsZXZpZGVvICh0dmkpCisjCisjCVRlbGVWaWRlbworIwk1NTAgRWFzdCBCcm9rYXcgUm9hZAorIwlQTyBCb3ggNDkwNDggICAgOTUxNjEKKyMJU2FuIEpvc2UgQ0EgOTUxMTIKKyMJVm94OiAoNDA4KS05NTQtODMzMworIwlGYXg6ICg0MDgpLTk1NC0wNjIzCisjCisjCisjIFRoZXNlIHJlcXVpcmUgaW5jcmVkaWJsZSBhbW91bnRzIG9mIHBhZGRpbmcuCisjCisjIEFsbCBvZiB0aGVzZSB0ZXJtaW5hbHMgKDkxMiB0byA5NzAgYW5kIHRoZSB0dmlwdCkgYXJlIGRpc2NvbnRpbnVlZC4gIE5ld2VyCisjIFRlbGV2aWRlbyB0ZXJtaW5hbHMgYXJlIEFOU0kgYW5kIFBDLUFOU0kgY29tcGF0aWJsZS4KKwordHZpODAzfHRlbGV2aWRlbyA4MDMsCisJY2xlYXI9XEUqJDwxMD4sIHVzZT10dmk5NTAsCisKKyMgVmFuaWxsYSB0dmk5MTAgLS0gVy4gR2lzaCA8Y3N3YXJyZW5AdmlvbGV0PiAxMC8yOS84NgorIyBTd2l0Y2ggc2V0dGluZ3MgYXJlOgorIworIyBTMSAgMSAyIDMgNAorIyAgICAgRCBEIEQgRCAgOTYwMAorIyAgICAgRCBEIEQgVSAgICA1MAorIyAgICAgRCBEIFUgRCAgICA3NQorIyAgICAgRCBEIFUgVSAgIDExMAorIyAgICAgRCBVIEQgRCAgIDEzNQorIyAgICAgRCBVIEQgVSAgIDE1MAorIyAgICAgRCBVIFUgRCAgIDMwMAorIyAgICAgRCBVIFUgVSAgIDYwMAorIyAgICAgVSBEIEQgRCAgMTIwMAorIyAgICAgVSBEIEQgVSAgMTgwMAorIyAgICAgVSBEIFUgRCAgMjQwMAorIyAgICAgVSBEIFUgVSAgMzYwMAorIyAgICAgVSBVIEQgRCAgNDgwMAorIyAgICAgVSBVIEQgVSAgNzIwMAorIyAgICAgVSBVIFUgRCAgOTYwMAorIyAgICAgVSBVIFUgVSAxOTIwMAorIworIyBTMSAgNSA2IDcgOAorIyAgICAgVSBEIFggRCAgN04xIChkYXRhIGJpdHMsIHBhcml0eSwgc3RvcCBiaXRzKSAoWCBtZWFucyBpZ25vcmVkKQorIyAgICAgVSBEIFggVSAgN04yCisjICAgICBVIFUgRCBEICA3TzEKKyMgICAgIFUgVSBEIFUgIDdPMgorIyAgICAgVSBVIFUgRCAgN0UxCisjICAgICBVIFUgVSBVICA3RTIKKyMgICAgIEQgRCBYIEQgIDhOMQorIyAgICAgRCBEIFggVSAgOE4yCisjICAgICBEIFUgRCBEICA4TzEKKyMgICAgIEQgVSBVIFUgIDhFMgorIworIyBTMSAgOSAgQXV0b3dyYXAKKyMgICAgIFUgIG9uCisjICAgICBEICBvZmYKKyMKKyMgUzEgMTAgIENSL0xGCisjICAgICBVICBkbyBDUi9MRiB3aGVuIENSIHJlY2VpdmVkCisjICAgICBEICBkbyBDUiB3aGVuIENSIHJlY2VpdmVkCisjCisjIFMyICAxICBNb2RlCisjICAgICBVICBibG9jaworIyAgICAgRCAgY29udmVyc2F0aW9uYWwKKyMKKyMgUzIgIDIgIER1cGxleAorIyAgICAgVSAgaGFsZgorIyAgICAgRCAgZnVsbAorIworIyBTMiAgMyAgSGVydHoKKyMgICAgIFUgIDUwCisjICAgICBEICA2MAorIworIyBTMiAgNCAgRWRpdCBtb2RlCisjICAgICBVICBsb2NhbAorIyAgICAgRCAgZHVwbGV4CisjCisjIFMyICA1ICBDdXJzb3IgdHlwZQorIyAgICAgVSAgdW5kZXJsaW5lCisjICAgICBEICBibG9jaworIworIyBTMiAgNiAgQ3Vyc29yIGRvd24ga2V5CisjICAgICBVICBzZW5kIF5KCisjICAgICBEICBzZW5kIF5WCisjCisjIFMyICA3ICBTY3JlZW4gY29sb3VyCisjICAgICBVICBncmVlbiBvbiBibGFjaworIyAgICAgRCAgYmxhY2sgb24gZ3JlZW4KKyMKKyMgUzIgIDggIERTUiBzdGF0dXMgKHBpbiA2KQorIyAgICAgVSAgZGlzY29ubmVjdGVkCisjICAgICBEICBjb25uZWN0ZWQKKyMKKyMgUzIgIDkgIERDRCBzdGF0dXMgKHBpbiA4KQorIyAgICAgVSAgZGlzY29ubmVjdGVkCisjICAgICBEICBkdXBsZXgKKyMKKyMgUzIgMTAgIERUUiBzdGF0dXMgKHBpbiAyMCkKKyMgICAgIFUgIGRpc2Nvbm5lY3RlZAorIyAgICAgRCAgZHVwbGV4CisjICh0dmk5MTA6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eS2teTGxeUl5MOiI7IGFkZGVkIDxraG9tZT4sIDxjdWIxPiwgPGN1ZDE+LAorIyA8aW5kPiwgPGhwYT4sIDx2cGE+LCA8YW0+LCA8bXNncj4gZnJvbSBTQ08gZW50cnkgLS0gZXNyKQordHZpOTEwfHRlbGV2aWRlbyBtb2RlbCA5MTAsCisJT1RicywgYW0sIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMxLAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XlosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGVkPVxFWSwgZWw9XEVULAorCWhvbWU9XEU9XDAwMVwwMDEsIGhwYT1cRV0lcDElezMyfSUrJWMsIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgaW5kPV5KLCBpbnZpc0AsIGticz1eSCwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2YwPV5BSVxyLCBrZjE9XkFAXHIsCisJa2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsCisJa2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sCisJdnBhPVxFWyVwMSV7MzJ9JSslYywgdXNlPWFkbStzZ3IsCisjIEZyb206IEFsYW4gUi4gUm9nZXJzIDxyb2dlcnMlYWxiYW55QGNzbmV0LXJlbGF5PgorIyBhcyBzdWJzZXF1ZW50bHkgaGFja2VkIG92ZXIgYnkgc29tZW9uZSBhdCBTQ08KKyMgKHR2aTkxMCs6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eS15QXkwgOiIgLS0gZXNyKQorIworIyBIZXJlIGFyZSB0aGUgOTEwKydzIERJUCBzd2l0Y2hlcyAoVSA9IHVwLCBEID0gZG93biwgWCA9IGRvbid0IGNhcmUpOgorIworIyBTMSAgMSAyIDMgNDoKKyMgICAgIEQgRCBEIEQgIDk2MDAgICAgIEQgRCBEIFUgICAgNTAgICAgIEQgRCBVIEQgICAgNzUgICAgIEQgRCBVIFUgICAxMTAKKyMgICAgIEQgVSBEIEQgICAxMzUgICAgIEQgVSBEIFUgICAxNTAgICAgIEQgVSBVIEQgICAzMDAgICAgIEQgVSBVIFUgICA2MDAKKyMgICAgIFUgRCBEIEQgIDEyMDAgICAgIFUgRCBEIFUgIDE4MDAgICAgIFUgRCBVIEQgIDI0MDAgICAgIFUgRCBVIFUgIDM2MDAKKyMgICAgIFUgVSBEIEQgIDQ4MDAgICAgIFUgVSBEIFUgIDcyMDAgICAgIFUgVSBVIEQgIDk2MDAgICAgIFUgVSBVIFUgMTkyMDAKKyMKKyMgUzEgIDUgNiA3IDg6CisjICAgICBVIEQgWCBEICA3TjEgICAgIFUgRCBYIFUgIDdOMiAgICAgVSBVIEQgRCAgN08xICAgICBVIFUgRCBVICA3TzIKKyMgICAgIFUgVSBVIEQgIDdFMSAgICAgVSBVIFUgVSAgN0UyICAgICBEIEQgWCBEICA4TjEgICAgIEQgRCBYIFUgIDhOMgorIyAgICAgRCBVIEQgRCAgOE8xICAgICBEIFUgVSBVICA4RTIKKyMKKyMgUzEgIDkgIEF1dG93cmFwICAgICAgICAgICAgKFUgPSBvbiwgRCA9IG9mZikKKyMgUzEgMTAgIENSL0xGICAgICAgICAgICAgICAgKFUgPSBDUi9MRiBvbiBDUiByZWNlaXZlZCwgRCA9IENSIG9uIENSIHJlY2VpdmVkKQorIyBTMiAgMSAgTW9kZSAgICAgICAgICAgICAgICAoVSA9IGJsb2NrLCBEID0gY29udmVyc2F0aW9uYWwpCisjIFMyICAyICBEdXBsZXggICAgICAgICAgICAgIChVID0gIGhhbGYsIEQgPSBmdWxsKQorIyBTMiAgMyAgSGVydHogICAgICAgICAgICAgICAoVSA9IDUwLCBEID0gNjApCisjIFMyICA0ICBFZGl0IG1vZGUgICAgICAgICAgIChVID0gbG9jYWwsIEQgPSBkdXBsZXgpCisjIFMyICA1ICBDdXJzb3IgdHlwZSAgICAgICAgIChVID0gdW5kZXJsaW5lLCBEID0gYmxvY2spCisjIFMyICA2ICBDdXJzb3IgZG93biBrZXkgICAgIChVID0gc2VuZCBeSiwgRCA9IHNlbmQgXlYpCisjIFMyICA3ICBTY3JlZW4gY29sb3VyICAgICAgIChVID0gZ3JlZW4gb24gYmxhY2ssIEQgPSBibGFjayBvbiBncmVlbikKKyMgUzIgIDggIERTUiBzdGF0dXMgKHBpbiA2KSAgKFUgPSBkaXNjb25uZWN0ZWQsIEQgPSBjb25uZWN0ZWQpCisjIFMyICA5ICBEQ0Qgc3RhdHVzIChwaW4gOCkgIChVID0gZGlzY29ubmVjdGVkLCBEID0gY29ubmVjdGVkKQorIyBTMiAxMCAgRFRSIHN0YXR1cyAocGluIDIwKSAoVSA9IGRpc2Nvbm5lY3RlZCwgRCA9IGNvbm5lY3RlZCkKKyMKK3R2aTkxMCt8dGVsZXZpZGVvIDkxMCssCisJZGNoMT1cRVcsIGRsMT1cRVIkPDMzKj4sIGhvbWU9Xl4sIGljaDE9XEVRLCBpbDE9XEVFJDwzMyo+LAorCWtmMD1eQUBcciwga2YxPV5BQVxyLCBrZjI9XkFCXHIsIGtmMz1eQUNcciwga2Y0PV5BRFxyLAorCWtmNT1eQUVcciwga2Y2PV5BRlxyLCBrZjc9XkFHXHIsIGtmOD1eQUhcciwga2Y5PV5BSVxyLAorCWxsPVxFPTdccywgdXNlPXR2aTkxMCwKKworIyAodHZpOTEyOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkteUF5MIDoiLCBhZGRlZCAgPGZsYXNoPiBhbmQKKyMgPGtob21lPiBmcm9tIEJSTCBlbnRyeSAtLSBlc3IpCit0dmk5MTJ8dHZpOTE0fHR2aTkyMHxvbGQgdGVsZXZpZGVvIDkxMi85MTQvOTIwLAorCU9UYnMsIE9UcHQsIGFtLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMSwKKwliZWw9XkcsIGNsZWFyPV5aLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSJDwzMyo+LCBlZD1cRXksIGVsPVxFVCwgZmxhc2g9XEViJDw1MC8+XEVkLCBob21lPV5eLAorCWh0PV5JLCBodHM9XEUxLCBpY2gxPVxFUSwgaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LAorCWlsMT1cRUUkPDMzKj4sIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZjA9XkFJXHIsIGtmMT1eQUBcciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsCisJa2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsCisJa2Y5PV5BSFxyLCBraG9tZT1eXiwgcm1zbz1cRWssIHJtdWw9XEVtLCBzbXNvPVxFaiwgc211bD1cRWwsCisJdGJjPVxFMywKKyMgV2UgZ290IHNvbWUgbmV3IHR2aTkxMmMgdGVybWluYWxzIHRoYXQgYWN0IHJlYWxseSB3ZWlyZCBvbiB0aGUgcmVndWxhcgorIyB0ZXJtY2FwLCBzbyBvbmUgb2Ygb3VyIGd1cnVzIHdvcmtlZCB0aGlzIHVwLiBTZWVtcyB0aGF0IGN1cnNvcgorIyBhZGRyZXNzaW5nIGlzIGJyb2tlbi4KK3R2aTkxMmNjfHR2aTkxMiBhdCBjb3dlbGwgY29sbGVnZSwKKwljdXBALCB1c2U9dHZpOTEyYywKKworIyB0dml7OTEyLDkyMH1bYmNdIC0gVGVsZVZpZGVvIFRWSS05MTJCL1RWSS05MjBCIGFuZCBUVkktOTEyQy9UVkktOTIwQworIyBGcm9tOiBCZW5qYW1pbiBDLiBXLiBTaXR0bGVyCisjCisjIFNvbWVvbmUgaGFzIHB1dCBhIHNjYW5uZWQgY29weSBvZiB0aGUgbWFudWFsIG9ubGluZSBhdDoKKyMgICAgIGh0dHA6Ly92dDEwMC5uZXQvdGVsZXZpZGVvLzkxMmItb20vCisjCisjIFRoZXNlIHRlcm1pbmFscyB3ZXJlIHByb2R1Y2VkIGNhLiAxOTc5LCBhbmQgaGFkIGEgMTIiIG1vbm9jaHJvbWUKKyMgc2NyZWVuLCBzdXBwb3J0ZWQgNzUtOTYwMCBiYXVkIChubyBoYW5kc2hha2luZyksIG1vbm9jaHJvbWUsIDctYml0CisjIEFTQ0lJLCBhbmQgd2VyZSBnZW5lcmFsbHkgc2ltaWxhciB0byBhZG0zYSBidXQgd2l0aCBhdHRyaWJ1dGVzCisjIChpbmNsdWRpbmcgc29tZSB3aXRoIG1hZ2ljIGNvb2tpZXMpLCBmYW5jeSBoYWxmLWR1cGxleCBtb2RlLCBhbmQKKyMgZGlmZmVyZW50IGJ1Z3MuCisjCisjIFNvbWUgb3BlcmF0aW9ucyByZXFpcmUgdHJ1bHkgaW5jcmVkaWJsZSBhbW91bnRzIG9mIHBhZGRpbmcuIFRoZQorIyBpbnNlcnRfbGluZSAoPGlsMT4pIGFuZCBkZWxldGVfbGluZSAoPGRsMT4pIG9wZXJhdGlvbnMgaW4gcGFydGljdWxhcgorIyBhcmUgc28gc2xvdyBhcyB0byBiZSBuZWFybHkgdW51c2FibGUuCisjCisjIFRoZXJlIG1heSBvciBtYXkgbm90IGhhdmUgYmVlbiBhIHNlcGFyYXRlLCBlYXJsaWVyIHNlcmllcyBvZiA5MTIvOTIwCisjIHRlcm1pbmFscyAod2l0aG91dCB0aGUgIkIiIGFuZCAiQyIgc3VmZml4KTsgSSBoYXZlIG5ldmVyIHNlZW4gb25lLAorIyBhbmQgdGhlIG1hbnVhbCBvbmx5IGRlc2NyaWJlcyB0aGUgIkIiIGFuZCAiQyIgc2VyaWVzLiBUaGUgOTEyIGFuZCA5MjAKKyMgYXJlIHF1aXRlIGRpc3RpbmN0IGZyb20gdGhlIDkxNCBhbmQgOTI0LCB3aGljaCB3ZXJlIG11Y2ggbmljZXIgbm9uLQorIyBtYWdpYy1jb29raWUgdGVybWluYWxzIHNpbWlsYXIgdG8gdGhlIDk1MC4KKyMKKyMgVGhpcyBpcyBhIG5ldyBkZXNjcmlwdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBUZWxlVmlkZW8gdGVybWluYWxzLAorIyBkaXN0aW5ndWlzaGVkIGNoaWVmbHkgYnkgdGhlaXIga2V5Ym9hcmRzOgorIworIyAgIFRWSS05MTJCIC0gdmVyeSBvZGQgbGF5b3V0LCBubyBmdW5jdGlvbiBrZXlzICg4NCBrZXlzKQorIyAgIFRWSS05MjBCIC0gdHlwZXdyaXRlciBsYXlvdXQsIG5vIGZ1bmN0aW9uIGtleXMgKDEwMyBrZXlzKQorIyAgIFRWSS05MTJDIC0gdmVyeSBvZGQgbGF5b3V0LCBmdW5jdGlvbiBrZXlzIEYxLUYxMSAoODIga2V5cykKKyMgICBUVkktOTIwQyAtIHR5cGV3cml0ZXIgbGF5b3V0LCBmdW5jdGlvbiBrZXlzIEYxLUYxMSAoMTAxIGtleXMpCisjCisjIFRvIGNob29zZSBhIHNldHRpbmcgZm9yIHRoZSBURVJNIHZhcmlhYmxlLCBzdGFydCB3aXRoIHRoZSBtb2RlbDoKKyMKKyMgICAgTW9kZWwgIHx8IGJhc2UgbmFtZQorIyAtLS0tLS0tLS0tfHwtLS0tLS0tLS0tLQorIyAgVFZJLTkxMkIgfHwgdHZpOTEyYgorIyAgVFZJLTkxMkMgfHwgdHZpOTEyYworIyAgVFZJLTkyMEIgfHwgdHZpOTIwYgorIyAgVFZJLTkyMEMgfHwgdHZpOTIwYworIworIyBUaGVuIGFkZCBhIHN1ZmZpeCBmcm9tIHRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmluZyBpbnN0YWxsZWQgb3B0aW9ucworIyBhbmQgaG93IHlvdSdkIGxpa2UgdG8gdXNlIHRoZSB0ZXJtaW5hbDoKKyMKKyMgICBVc2UgVmlkZW8gfCBTZWNvbmQgfCBWaXN1YWwgfCAgTWFnaWMgIHwgIFBhZ2UgfHwgZmVhdHVyZQorIyAgQXR0cmlidXRlcyB8ICBQYWdlICB8ICBCZWxsICB8IENvb2tpZXMgfCBQcmludCB8fCBzdWZmaXgKKyMgLS0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tfHwtLS0tLS0tLS0KKyMgICAgICBObyAgICAgfCAgIE5vICAgfCAgTi9BICAgfCAgIE4vQSAgIHwgICBObyAgfHwgLXVuaworIyAgICAgIE5vICAgICB8ICAgTm8gICB8ICBOL0EgICB8ICAgTi9BICAgfCAgWWVzICB8fCAtcAorIyAgICAgIE5vICAgICB8ICBZZXMgICB8ICAgTm8gICB8ICAgTi9BICAgfCAgIE5vICB8fCAtMnAtdW5rCisjICAgICAgTm8gICAgIHwgIFllcyAgIHwgICBObyAgIHwgICBOL0EgICB8ICBZZXMgIHx8IC0ycC1wCisjICAgICAgTm8gICAgIHwgIFllcyAgIHwgIFllcyAgIHwgICBOL0EgICB8ICAgTm8gIHx8IC12Yi11bmsKKyMgICAgICBObyAgICAgfCAgWWVzICAgfCAgWWVzICAgfCAgIE4vQSAgIHwgIFllcyAgfHwgLXZiLXAKKyMgICAgIFllcyAgICAgfCAgIE5vICAgfCAgTi9BICAgfCAgICBObyAgIHwgIE4vQSAgfHwKKyMgICAgIFllcyAgICAgfCAgIE5vICAgfCAgTi9BICAgfCAgIFllcyAgIHwgIE4vQSAgfHwgLW1jCisjICAgICBZZXMgICAgIHwgIFllcyAgIHwgICBObyAgIHwgICAgTm8gICB8ICBOL0EgIHx8IC0ycAorIyAgICAgWWVzICAgICB8ICBZZXMgICB8ICAgTm8gICB8ICAgWWVzICAgfCAgTi9BICB8fCAtMnAtbWMKKyMgICAgIFllcyAgICAgfCAgWWVzICAgfCAgWWVzICAgfCAgICBObyAgIHwgIE4vQSAgfHwgLXZiCisjICAgICBZZXMgICAgIHwgIFllcyAgIHwgIFllcyAgIHwgICBZZXMgICB8ICBOL0EgIHx8IC12Yi1tYworIworIyBTbyBlLmcuIGEgbW9kZWwgOTIwIEMgd2l0aCBzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uLCB2aXN1YWwgYmVsbAorIyBhbmQgbm8gbWFnaWMgY29va2llcyB3b3VsZCBiZSB0dmk5MjBjLXZiOyBhIG1vZGVsIDkxMiBCIHdpdGhvdXQgdGhlCisjIHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb24gYW5kIHVzaW5nIG1hZ2ljIGNvb2tpZXMgd291bGQgYmUKKyMgdHZpOTEyYi1tYworIworIyBQQURESU5HCisjCisjIEF0IDk2MDAgYmF1ZCwgdGhlIHRlcm1pbmFsIGlzIHByb25lIHRvIG92ZXJmbG93IGl0cyBpbnB1dCBidWZmZXIKKyMgZHVyaW5nIGNvbXBsZXggb3BlcmF0aW9ucyAoaW5zZXJ0L2RlbGV0ZQorIyBjaGFyYWN0ZXIvbGluZS9zY3JlZW4vcGFnZSksIGFuZCBpdCBkb2VzIG5vdCBzaWduYWwgdGhpcyBvdmVyIHRoZQorIyBSUzIzMiBjYWJsZS4gVGhlIHR5cGljYWwgc3ltcHRvbSBvZiBhbiBvdmVycnVuIGlzIHRoYXQgdGhlIHRlcm1pbmFsCisjIHN0YXJ0cyBiZWVwaW5nLCBhbmQgb3V0cHV0IGJlY29tZXMgZ2FyYmxlZC4KKyMKKyMgVGhlIHBhZGRpbmcgZGVsYXlzIGluIHRoaXMgdGVybWluZm8gd2VyZSBkZXJpdmVkIHVzaW5nIHRhY2soMSkKKyMgcnVubmluZyBvbiBhIExpbnV4IGJveCBjb25uZWN0ZWQgdG8gYSBUVkktOTIwQyB3aXRoIGEgbGF0ZXItbW9kZWwKKyMgKEE0OUMxLXN0eWxlKSBST00gcnVubmluZyBhdCA5NjAwIGJhdWQsIHNvIHlvdXIgbWlsZWFnZSBtYXkKKyMgdmFyeS4gVGhlIG51bWJlcnMgYmVsb3cgc2VlbSB0byBnaXZlIHRoZSB0ZXJtaW5hbCBlbm91Z2ggdGltZSBzbworIyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcmZsb3cgaXRzIGlucHV0IGJ1ZmZlciBhbmQgc3RhcnQgbG9zaW5nCisjIGNoYXJhY3RlcnMuCisjCisjIEtFWVMKKyMKKyMgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBGVU5DVCBrZXkgb24gYSB0dmk5MTJbYmNdLCB1c2UgdGhlCisjIGNvcnJlc3BvbmRpbmcgdHZpOTIwW2JjXSB0ZXJtaW5mbyB3aXRoIEZVTkNUICsgLi4uIGVxdWl2YWxlbnRzIGZyb20KKyMgdGhlIGZvbGxvd2luZyB0YWJsZSAodGhlc2UgYWxzbyB3b3JrIG9uIHRoZSA5MjAgc2VyaWVzKToKKyMKKyMgVW5zaGlmdGVkIEZ1bmN0aW9uIEtleXM6CisjCisjICBLZXkgfCBjYXBuYW1lfHwgRXF1aXZhbGVudAorIyAtLS0tLXwtLS0tLS0tLXx8LS0tLS0tLS0tLS0tCisjICAgRjEgfCAgPGtmMT4gfHwgRlVOQ1QgKyBACisjICAgRjIgfCAgPGtmMj4gfHwgRlVOQ1QgKyBBCisjICAgRjMgfCAgPGtmMz4gfHwgRlVOQ1QgKyBCCisjICAgRjQgfCAgPGtmND4gfHwgRlVOQ1QgKyBDCisjICAgRjUgfCAgPGtmNT4gfHwgRlVOQ1QgKyBECisjICAgRjYgfCAgPGtmNj4gfHwgRlVOQ1QgKyBFCisjICAgRjcgfCAgPGtmNz4gfHwgRlVOQ1QgKyBGCisjICAgRjggfCAgPGtmOD4gfHwgRlVOQ1QgKyBHCisjICAgRjkgfCAgPGtmOT4gfHwgRlVOQ1QgKyBICisjICBGMTAgfCA8a2YxMD4gfHwgRlVOQ1QgKyBJCisjICBGMTEgfCA8a2YxMT4gfHwgRlVOQ1QgKyBKCisjCisjIFNoaWZ0ZWQgRnVuY3Rpb24gS2V5czoKKyMKKyMgIFNISUZUICsgS2V5IHwgY2FwbmFtZXx8IEVxdWl2YWxlbnQKKyMgLS0tLS0tLS0tLS0tLXwtLS0tLS0tLXx8LS0tLS0tLS0tLS0tCisjICAgU0hJRlQgKyBGMSB8IDxrZjEyPiB8fCBGVU5DVCArIGAKKyMgICBTSElGVCArIEYyIHwgPGtmMTM+IHx8IEZVTkNUICsgYQorIyAgIFNISUZUICsgRjMgfCA8a2YxND4gfHwgRlVOQ1QgKyBiCisjICAgU0hJRlQgKyBGNCB8IDxrZjE1PiB8fCBGVU5DVCArIGMKKyMgICBTSElGVCArIEY1IHwgPGtmMTY+IHx8IEZVTkNUICsgZAorIyAgIFNISUZUICsgRjYgfCA8a2YxNz4gfHwgRlVOQ1QgKyBlCisjICAgU0hJRlQgKyBGNyB8IDxrZjE4PiB8fCBGVU5DVCArIGYKKyMgICBTSElGVCArIEY4IHwgPGtmMTk+IHx8IEZVTkNUICsgZworIyAgIFNISUZUICsgRjkgfCA8a2YyMD4gfHwgRlVOQ1QgKyBoCisjICBTSElGVCArIEYxMCB8IDxrZjIxPiB8fCBGVU5DVCArIGkKKyMgIFNISUZUICsgRjExIHwgPGtmMjI+IHx8IEZVTkNUICsgagorIworIyBQT1JUUyBBTkQgU1dJVENIIFNFVFRJTkdTCisjCisjIEhlcmUgYXJlIHRoZSBzd2l0Y2ggc2V0dGluZ3MgZm9yIHRoZSBUVkktOTEyQi9UVkktOTIwQiBhbmQKKyMgVFZJLTkxMkMvVFZJLTkyMEM6CisjCisjIFMxIChMaW5lKSwgYW5kIFMzIChQcmludGVyKSBiYXVkIHJhdGVzIC0tIHB1dCBvbmUsIGFuZCBvbmx5IG9uZSwgc3dpdGNoIGRvd246CisjIDI6IDk2MDAJMzogNDgwMAkJNDogMjQwMAkJNTogMTIwMAorIyA2OiAgNjAwCTc6ICAzMDAJCTg6ICAxNTAJCTk6ICAgNzUKKyMgMTA6IDExMAorIworIyBTMiBVQVJUL1Rlcm1pbmFsIG9wdGlvbnM6CisjIAkJVXAJCQlEb3duCisjIDE6CQlOb3QgdXNlZAkJTm90IGFsbG93ZWQKKyMgMjoJQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQJICBTdGFuZGFyZCBjaGFyYWN0ZXIgc2V0CisjIDM6CSAgICBGdWxsIGR1cGxleAkJICAgIEhhbGYgZHVwbGV4CisjIDQ6CSAgICA1MCBIeiByZWZyZXNoCSAgICA2MCBIeiByZWZyZXNoCisjIDU6CSAgICAgIE5vIHBhcml0eQkJICAgICBTZW5kIHBhcml0eQorIyA2OgkgICAgIDIgc3RvcCBiaXRzCSAgICAgMSBzdG9wIGJpdAorIyA3OgkgICAgIDggZGF0YSBiaXRzCSAgICAgNyBkYXRhIGJpdHMKKyMgODoJCU5vdCB1c2VkCQlOb3QgYWxsb3dlZCBvbiBSZXYgRSBvciBsb3dlcgorIyA5OgkgICAgIEV2ZW4gcGFyaXR5CSAgICAgT2RkIHBhcml0eQorIyAxMDoJICAgIFN0ZWFkeSBjdXJzb3IJICAgIEJsaW5raW5nIGN1cnNvcgorIyAJKE9uIFJldiBFIG9yIGxvd2VyLCB1c2UgVzI1IGluc3RlYWQgb2Ygc3dpdGNoIDEwLikKKyMKKyMgUzUgVUFSVC9UZXJtaW5hbCBvcHRpb25zOgorIyAJCU9wZW4JCQlDbG9zZWQKKyMgMToJUDMtNiBOb3QgY29ubmVjdGVkCURTUiByZWNlaXZlZCBvbiBQMy02CisjIDI6CVAzLTggTm90IGNvbm5lY3RlZAlEQ0QgcmVjZWl2ZWQgb24gUDMtOAorIworIyAzIE9wZW4sIDQgT3BlbjoJCVAzLTIwIE5vdCBjb25uZWN0ZWQKKyMgMyBPcGVuLCA0IENsb3NlZDoJRFRSIG9uIHdoZW4gdGVybWluYWwgaXMgb24KKyMgMyBDbG9zZWQsIDQgT3BlbjoJRFRSIGlzIGNvbm5lY3RlZCB0byBSVFMKKyMgMyBDbG9zZWQsIDQgQ2xvc2VkOglOb3QgYWxsb3dlZAorIworIyA1IENsb3NlZDoJSERYIHByaW50ZXIgKGhhcmR3YXJlIGNvbnRyb2wpIFJldi4gSyB3aXRoIGV4dGVuc2lvbiBwb3J0IG9mZiwKKyMgCQlhbGwgZGF0YSB0cmFuc21pdHRlZCBvdXQgb2YgdGhlIG1vZGVtIHBvcnQgKFAzKSB3aWxsIGFsc28gYmUKKyMgCQl0cmFuc21pdHRlZCBvdXQgb2YgdGhlIHByaW50ZXIgcG9ydCAoUDQpLgorIworIyA2IE9wZW4sIDcgT3BlbjoJCU5vdCBhbGxvd2VkCisjIDYgT3BlbiwgNyBDbG9zZWQ6CTIwbWEgY3VycmVudCBsb29wIGlucHV0CisjIDYgQ2xvc2VkLCA3IE9wZW46CVJTMjMyIGlucHV0CisjIDYgQ2xvc2VkLCA3IENsb3NlZDoJTm90IGFsbG93ZWQKKyMKKyMgSnVtcGVyIG9wdGlvbnM6CisjIElmIHRoZSBqdW1wZXIgaXMgaW5zdGFsbGVkLCB0aGUgZWZmZWN0IHdpbGwgb2NjdXIgKHRoZSBuZXh0IHRpbWUgdGhlIHRlcm1pbmFsCisjIGlzIHN3aXRjaGVkIG9uKS4KKyMKKyMgUzQvVzMxOglFbmFibGVzIGF1dG9tYXRpYyBMRiB1cG9uIHJlY2VpcHQgb2YgQ1IgZnJvbQorIyAJCXJlbW90ZSBvciBrZXlib2FyZC4KKyMgUzQvVzMyOglFbmFibGVzIHRyYW5zbWlzc2lvbiBvZiBFT1QgYXQgdGhlIGVuZCBvZiBTZW5kLiAgSWYgbm90CisjIAkJaW5zdGFsbGVkLCBhIGNhcnJpYWdlIHJldHVybiBpcyBzZW50LgorIyBTNC9XMzM6CURpc2FibGVzIGF1dG9tYXRpYyBjYXJyaWFnZSByZXR1cm4gaW4gY29sdW1uIDgwLgorIyBTNC9XMzQ6CVNlbGVjdHMgUGFnZSBQcmludCBNb2RlIGFzIGluaXRpYWwgY29uZGl0aW9uLiAgSWYgbm90CisjIAkJaW5zdGFsbGVkLCBFeHRlbnNpb24gTW9kZSBpcyBzZWxlY3RlZC4KKyMKKyMgTk9OLVNUQU5EQVJEIENBUEFCSUxJVElFUworIworIyBTZW5kaW5nIDx1OT4gb3IgPHU3PiByZXR1cm5zIGEgY3Vyc29yIHBvc2l0aW9uIHJlcG9ydCBpbiB0aGUgZm9ybWF0CisjIFlYXHIsIHdoZXJlIFkgYW5kIFggYXJlIGFzIGluIDxjdXA+LiBUaGlzIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4KKyMgPHU4PiBhbmQgPHU2PiwgYnV0IGl0J3Mgbm90IGNsZWFyIGhvdyBvbmUgc2hvdWxkIHdyaXRlIGFuCisjIGFwcHJvcHJpYXRlIHNjYW5mIHN0cmluZywgc2luY2Ugd2UgbmVlZCB0byBzdWJ0cmFjdCAlJyAnIGZyb20gdGhlCisjIGNoYXJhY3RlciBhZnRlciByZWFkaW5nIGl0LiBUaGUgPHU5PiBjYXBhYmlsaXR5IGlzIHVzZWQgYnkgdGFjaygxKQorIyB0byBzeW5jaHJvbml6ZSBkdXJpbmcgcGFkZGluZyB0ZXN0cywgYW5kIHNlZW1zIHRvIHdvcmsgZm9yIHRoYXQKKyMgcHVycG9zZS4KKyMKKyMgVGhpcyBkZXNjcmlwdGlvbiBhbHNvIGluY2x1ZGVzIHRoZSBvYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcworIyBoYXNfaGFyZHdhcmVfdGFicyAoPE9UcHQ+KSBhbmQgYmFja3NwYWNlc193aXRoX2JzICg8T1Ricz4pLgorIworIyBGRUFUVVJFUyBOT1QgWUVUIERFU0NSSUJFRCBJTiBUSElTIFRFUk1JTkZPCisjCisjIFRoZSBGVU5DVCBtb2RpZmllciBhY3R1YWxseSB3b3JrcyB3aXRoIGV2ZXJ5IG5vcm1hbCBrZXkgYnkgc2VuZGluZworIyBeQVhcciwgd2hlcmUgWCBpcyB0aGUgc2VxdWVuY2Ugbm9ybWFsbHkgc2VudCBieSB0aGF0IGtleS4gVGhpcyBpcyBhCisjIHNvcnQgb2YgbWV0YSBrZXkgbm90IGN1cnJlbnRseSBkZXNjcmliYWJsZSBpbiB0ZXJtaW5mby4KKyMKKyMgVGhlcmUgYXJlIHF1aXRlIGEgZmV3IG90aGVyIGtleXMgKGVzcGVjaWFsbHkgb24gdGhlIDkyMCBtb2RlbHMsKSBidXQKKyMgdGhleSBhcmUgZm9yIHRoZSBtb3N0IHBhcnQgb25seSB1c2VmdWwgaW4gYmxvY2sgbW9kZS4KKyMKKyMgVGhlc2UgdGVybWluYWxzIGhhdmUgbG90cyBvZiBmb3JtcyBtYW5pcHVsYXRpb24gZmVhdHVyZXMsIG1haW5seQorIyB1c2VmdWwgaW4gYmxvY2sgbW9kZSwgaW5jbHVkaW5nICJjbGVhciBYIHRvIG51bGxzIiAodnMuICJjbGVhciBYIHRvCisjIHNwYWNlcyI7IG51bGxzIGFyZSBzZW50aW5lbHMgZm9yICJzZW5kIFgiIG9wZXJhdGlvbnMpOyAic2VuZCBYIgorIyBvcGVyYXRpb25zIGZvciB1cGxvYWRpbmcgYWxsIG9yIHBhcnQgb2YgdGhlIHNjcmVlbjsgYW5kIGJsb2NrLW1vZGUKKyMgZWRpdGluZyBrZXlzICh0aGV5IGRvbid0IHNlbmQgZXNjYXBlIHNlcXVlbmNlcywgYnV0IG1hbmlwdWxhdGUgdmlkZW8KKyMgbWVtb3J5IGRpcmVjdGx5KS4gQmxvY2sgbW9kZSBpcyB1c2VkIGZvciBsb2NhbCBlZGl0aW5nLCBhbmQgcHJvdGVjdAorIyBtb2RlIChpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAid3JpdGUgcHJvdGVjdCIgYXR0cmlidXRlLAorIyBhLmsuYS4gaGFsZi1pbnRlbnNpdHkgb3V0c2lkZSBvZiBwcm90ZWN0IG1vZGUpIGlzIHVzZWQgdG8gY29udHJvbAorIyB3aGljaCBwYXJ0cyBvZiB0aGUgc2NyZWVuIGFyZSBlZGl0ZWQvc2VudC9wcmludGVkIChieSA8bWMwPikuCisjCisjIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28gbWFqb3IgZmFtaWxpZXMgb2YgUk9NLCAiZWFybHkiIGFuZAorIyBBNDlCMS9BNDlDMTsgdGhlIG1ham9yIGRpZmZlcmVuY2Ugc2VlbXMgdG8gYmUgdGhhdCB0aGUgbGF0dGVyIFJPTXMKKyMgc3VwcG9ydCBhIGZldyBleHRyYSBlc2NhcGUgc2VxdWVuY2VzIGZvciBtYW5pcHVsYXRpbmcgdGhlIG9mZi1zY3JlZW4KKyMgbWVtb3J5IHBhZ2UsIGFuZCBmb3Igc2VuZGluZyB3aG9sZSBwYWdlcyBiYWNrIHRvIHRoZSBob3N0IChtYWlubHkKKyMgdXNlZnVsIGluIGJsb2NrIG1vZGUuKSBUaGUgZGVzY3JpcHRpb25zIGluIHRoaXMgZmlsZSBkb24ndCB1c2UgYW55CisjIG9mIHRob3NlIHNlcXVlbmNlczogc2V0IGN1cnNvciBwb3NpdGlvbiBpbmNsdWRpbmcgcGFnZSAoXEUtUFlYLAorIyB3aGVyZSBQIGlzIFxzIGZvciBwYWdlIDAgYW5kICEgZm9yIHBhZ2UgMSBbYWN0dWFsbHkgb25seSB0aGUgTFNCIG9mCisjIFAgaXMgdGFrZW4gaW50byBhY2NvdW50LCBzbyBlLmcuIDAgYW5kIDEgd29yayB0b28sXSBhbmQgWSBhbmQgWCBhcmUKKyMgYXMgaW4gPGN1cD4pOyByZWFkIGN1cnNvciBwb3NpdGlvbiAoXEUvKSwgd2hpY2ggaXMgYW5hbG9nb3VzIHRvIDx1OT4KKyMgYW5kIHJldHVybnMgUFlYXHIsIHdoZXJlIFAgaXMgXHMgZm9yIHBhZ2UgMCBvciAhIGZvciBwYWdlIDEsIGFuZCBZWAorIyBhcmUgYXMgaW4gPGN1cD4sIGFuZCBzb21lICJzZW5kIHBhZ2UiIGZlYXR1cmVzIG1haW5seSB1c2VmdWwgZm9yCisjIGZvcm1zIG1hbmlwdWxhdGlvbi4KKyMKKyMgVGhlIGtleWJvYXJkIGVuYWJsZSAoXEUiKSBhbmQgZGlzYWJsZSAoXEUjKSBzZXF1ZW5jZXMgYXJlIHVudXNlZCwKKyMgZXhjZXB0IHRoYXQgYSB0ZXJtaW5hbCByZXNldCAoPGlzMj4pIGVuYWJsZXMgdGhlIGtleWJvYXJkLgorIworIyBBdXRvLWZsaXAgbW9kZSAoXEV2KSBpcyBsaWtlbHkgZmFzdGVyIHRoYW4gdGhlIHNjcm9sbGluZyBtb2RlIChcRXcpCisjIGVuYWJsZWQgaW4gPGlzMj4sIGJ1dCBhdXRvLWZsaXAgaXMgdmVyeSBqYXJyaW5nIHNvIHdlIGRvbid0IHVzZSBpdC4KKyMKKyMgQlVHUworIworIyBBdCBsZWFzdCB1cCB0byB0aGUgQTQ5QjEgYW5kIEE0OUMxIFJPTXMsIHRoZXJlIGFyZSBubyBcRWIgYW5kIFxFZAorIyBzZXF1ZW5jZXMgKEkgaW5mZXIgdGhhdCBpbiBzb21lIFRlbGVWaWRlbyB0ZXJtaW5hbCB0aGV5IG1heSBpbnZlcnQKKyMgYW5kIHVuaW52ZXJ0IHRoZSBkaXNwbGF5KSBzbyB0aGUgPGZsYXNoPiBzZXF1ZW5jZSBnaXZlbiBoZXJlIGlzIGEKKyMgY2hlZXN5IHBhZ2UtZmxpcCBpbnN0ZWFkLgorIworIyBUaGUgYmFja190YWIgKDxjYnQ+KSBzZXF1ZW5jZSAoXEVJKSBkb2Vzbid0IHdvcmsgYWNjb3JkaW5nIHRvCisjIHRhY2soMSksIHNvIGl0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93LgorIworIyBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIGF1dG9fbGVmdF9tYXJnaW4gKDxidz4pIGZsYWcgc2hvdWxkIGJlIHNldAorIyBmb3IgdGhlc2UgdGVybWluYWxzOyB0YWNrIHNheXMgeWVzLCBzbyBpdCBpcyBzZXQgaGVyZSwgYnV0IHRoaXMKKyMgZGlmZmVycyBmcm9tIG90aGVyIGRlc2NyaXB0aW9ucyBJJ3ZlIHNlZW4uCisjCisjIEV4dGVuc2lvbiBwcmludCBtb2RlICg8bWM1PikgZWNob2VzIGFsbCBjaGFyYWN0ZXJzIHRvIHRoZSBwcmludGVyCisjIHBvcnQgW2luIGFkZGl0aW9uIHRvIGRpc3BsYXlpbmcgdGhlbV0gZXhjZXB0IGZvciB0aGUgcGFnZSBwcmludCBtb2RlCisjIHNlcXVlbmNlICg8bWM0Pik7IHRoaXMgaXMgYSBzbGlnaHQgdmlvbGF0aW9uIG9mIHRoZSB0ZXJtaW5mbworIyBkZWZpbml0aW9uIGZvciA8bWM1PiBidXQgSSBkb24ndCBleHBlY3QgaXQgdG8gY2F1c2UgcHJvYmxlbXMuICBXZQorIyByZXNldCB0byBwYWdlIHByaW50IG1vZGUgaW4gPHJzMT4gc2luY2UgaXQgbWF5IGhhdmUgYmVlbiBlbmFibGVkCisjIGFjY2lkZW50YWxseS4KKyMKKyMgVGhlIGRlc2NyaXB0aW9ucyB3aXRoIHBsdXMgc2lnbnMgKCspIGFyZSBidWlsZGluZyBibG9ja3MuCisKK3R2aTkxMmItdW5rfHR2aTkxMmMtdW5rfFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAobm8gYXR0cmlidXRlcyksCisJT1RicywgT1RwdCwgYW0sIGJ3LAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAzMiQ8NTA+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJScgJyUrJWMlcDIlJyAnJSslYywgY3V1MT1eSywgZGNoMT1cRVckPDMwPiwKKwlkbDE9XEVSJDwxKj4kPDEwMD4sIGVkPVxFeSQ8Mio+JDwxMD4sIGVsPVxFVCQ8MTU+LAorCWhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLCBpY2gxPVxFUSQ8MzA+LAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgaWwxPVxFRSQ8MSo+JDwxMDA+LAorCWluZD1cbiQ8MTA+LCBpczI9XEV3XEVBXEUnXEUiXEUoLCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cMTc3LCBrZW50PV5NLCBraG9tZT1eXiwgbWM0PVxFQSwKKwltYzU9XEVALCByczE9XEVrXDAxMFxFbVwwMTBcRXFcMDMyLCB0YmM9XEUzLCB1Nj0lYyVjXHIsCisJdTc9XEU/LCB1OD0lYyVjXHIsIHU5PVxFPywKKworIyBUaGlzIGlzbid0IGluY2x1ZGVkIGluIHRoZSBiYXNpYyBjYXBhYmlsaXRpZXMgYmVjYXVzZSBpdCBpcworIyB0eXBpY2FsbHkgdW51c2FibGUgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgZnVsbCByYW5nZSBvZiB2aWRlbworIyBhdHRyaWJ1dGVzLCBzaW5jZSB0aGUgbWFnaWMgY29va2llIGF0dHJpYnV0ZXMgdHVybiBpbnRvIEFTQ0lJCisjIGNvbnRyb2wgY2hhcmFjdGVycywgYW5kIHRoZSBoYWxmLWludGVuc2l0eSAoInByb3RlY3RlZCIpIGF0dHJpYnV0ZQorIyBjb252ZXJ0cyBhbGwgYWZmZWN0ZWQgY2hhcmFjdGVycyB0byBzcGFjZXMuCisKK3R2aTkxMmIrcHJpbnRlcnxUZWxlVmlkZW8gVFZJLTkxMkIvVFZJLTkyMEIgYW5kIFRWSS05MTJDL1RWSS05MjBDIHBhZ2UgcHJpbnQgc3VwcG9ydCwKKwltYzA9XEVQLAorCisjIFRoaXMgdXNlcyBoYWxmLWludGVuc2l0eSBtb2RlICg8ZGltPikgZm9yIHN0YW5kb3V0ICg8c21zbz4pLCBhbmQKKyMgZXhwb3NlcyBubyBvdGhlciBhdHRyaWJ1dGVzIChoYWxmLWludGVuc2l0eSBpcyB0aGUgb25seSBhdHRyaWJ1dGUKKyMgdGhhdCBkb2VzIG5vdCBnZW5lcmF0ZSBhIG1hZ2ljIGNvb2tpZS4pCisKK3R2aTkxMmIrZGltfFRlbGVWaWRlbyBUVkktOTEyQi9UVkktOTIwQiBhbmQgVFZJLTkxMkMvVFZJLTkyMEMgaGFsZi1pbnRlbnNpdHkgYXR0cmlidXRlIHN1cHBvcnQsCisJbXNnciwKKwlkaW09XEUpLCBybXNvPVxFKCwgc2dyPVxFJT8lcDElcDUlfCV0KSVlKCU7LCBzZ3IwPVxFKCwKKwlzbXNvPVxFKSwKKworIyBGdWxsIG1hZ2ljLWNvb2tpZSBhdHRyaWJ1dGUgc3VwcG9ydCwgd2l0aCBoYWxmLWludGVuc2l0eSByZXZlcnNlCisjIHZpZGVvIGZvciBzdGFuZG91dC4gTm90ZSB0aGF0IHdlIGFkZCBhIHNwYWNlIGluIHRoZSA8ZGltPiBzZXF1ZW5jZQorIyB0byBnaXZlIGEgY29uc2lzdGVudCBtYWdpYy1jb29raWUgY291bnQuIEFsc28gbm90ZSB0aGF0IDxzZ3I+IHVzZXMKKyMgYmFja3NwYWNpbmcgKGluIHRoZSBUVkktc3VwcG9ydGVkIG9yZGVyKSB0byBhcHBseSBhbGwgcmVxdWVzdGVkCisjIGF0dHJpYnV0ZXMgd2l0aCBvbmx5IGEgc2luZ2xlIG1hZ2ljIGNvb2tpZS4KKwordHZpOTEyYittY3xUZWxlVmlkZW8gVFZJLTkxMkIvVFZJLTkyMEIgYW5kIFRWSS05MTJDL1RWSS05MjBDIGZ1bGwgbWFnaWMtY29va2llIGF0dHJpYnV0ZSBzdXBwb3J0LAorCXhtYyMxLAorCWJsaW5rPVxFXF4sIGRpbT1cRSlccywgaW52aXM9XEVfLCByZXY9XEVqLCBybXNvPVxFKFxFaywKKwlybXVsPVxFbSwKKwlzZ3I9XEUlPyVwMSVwNSV8JXQpJWUoJTsgXDAxMFxFJT8lcDElcDMlfCV0aiVlayU7XDAxMFxFJT8lcDIldGwlZW0lO1wwMTBcRSU/JXA3JXRfJWUlPyVwNCV0XF4lZXElOyU7LAorCXNncjA9XEUoXEVrXDAxMFxFbVwwMTBcRXEsIHNtc289XEUpXEVqLCBzbXVsPVxFbCwKKworIyBUaGlzIHVzZXMgdGhlIHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb24gdG8gc2F2ZSAmIHJlc3RvcmUgc2NyZWVuCisjIGNvbnRlbnRzLiBJZiB5b3VyIHRlcm1pbmFsIGlzIG1pc3NpbmcgdGhlIG9wdGlvbiwgdGhpcyBkZXNjcmlwdGlvbgorIyBzaG91bGQgc3RpbGwgd29yaywgYnV0IHRoYXQgaGFzIG5vdCBiZWVuIHRlc3RlZC4KKwordHZpOTEyYisycHxUZWxlVmlkZW8gVFZJLTkxMkIvVFZJLTkyMEIgYW5kIFRWSS05MTJDL1RWSS05MjBDIHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb24gc3VwcG9ydCwKKwlmbGFzaD1cRUskPDEwMD5cRUssIHJtY3VwPVwwMzIkPDUwPlxFS1xFPTdccywKKwlzbWN1cD1cRUtcMDMyJDw1MD5cRShcRWtcMDEwXEVtXDAxMFxFcVwwMzIkPDUwPiwKKworIyBUaGlzIHNpbXVsYXRlcyBmbGFzaGluZyBieSBicmllZmx5IHRvZ2dsaW5nIHRvIHRoZSBvdGhlciBwYWdlCisjIChrbHVkZ2UhKQorCit0dmk5MTJiK3ZifFRlbGVWaWRlbyBUVkktOTEyQi9UVkktOTIwQiBhbmQgVFZJLTkxMkMvVFZJLTkyMEMgc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiAidmlzaWJsZSBiZWxsIiBzdXBwb3J0LAorCWJlbD1cRUskPDEwMD5cRUssIHVzZT10dmk5MTJiKzJwLAorCisjIEZ1bmN0aW9uIGtleXMgKDxrZjEyPiAuLiA8a2YyMj4gYXJlIHNoaWZ0ZWQgPGtmMT4gLi4gPGtmMTE+KQorCit0dmk5MjBiK2ZufFRlbGVWaWRlbyBUVkktOTIwQiBhbmQgVFZJLTkyMEMgZnVuY3Rpb24ga2V5IHN1cHBvcnQsCisJa2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BSlxyLCBrZjEyPV5BYFxyLCBrZjEzPV5BYVxyLAorCWtmMTQ9XkFiXHIsIGtmMTU9XkFjXHIsIGtmMTY9XkFkXHIsIGtmMTc9XkFlXHIsIGtmMTg9XkFmXHIsCisJa2YxOT1eQWdcciwga2YyPV5BQVxyLCBrZjIwPV5BaFxyLCBrZjIxPV5BaVxyLCBrZjIyPV5BalxyLAorCWtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLAorCisjIENvbWJpbmF0aW9ucyBvZiB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzCisKK3R2aTkxMmItMnAtdW5rfHR2aTkxMmMtMnAtdW5rfHR2aTkxMmItdW5rLTJwfHR2aTkxMmMtdW5rLTJwfFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbjsgbm8gYXR0cmlidXRlcyksCisJdXNlPXR2aTkxMmIrMnAsIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi12Yi11bmt8dHZpOTEyYy12Yi11bmt8dHZpOTEyYi11bmstdmJ8dHZpOTEyYy11bmstdmJ8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uICJ2aXNpYmxlIGJlbGwiOyBubyBhdHRyaWJ1dGVzKSwKKwl1c2U9dHZpOTEyYit2YiwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MTJiLXB8dHZpOTEyYy1wfFRlbGVWaWRlbyBUVkktOTEyQiBvciBUVkktOTEyQyAobm8gYXR0cmlidXRlczsgcGFnZSBwcmludCksCisJdXNlPXR2aTkxMmIrcHJpbnRlciwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MTJiLTJwLXB8dHZpOTEyYy0ycC1wfHR2aTkxMmItcC0ycHx0dmk5MTJjLXAtMnB8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uOyBubyBhdHRyaWJ1dGVzOyBwYWdlIHByaW50KSwKKwl1c2U9dHZpOTEyYisycCwgdXNlPXR2aTkxMmIrcHJpbnRlciwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MTJiLXZiLXB8dHZpOTEyYy12Yi1wfHR2aTkxMmItcC12Ynx0dmk5MTJjLXAtdmJ8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uICJ2aXNpYmxlIGJlbGwiOyBubyBhdHRyaWJ1dGVzOyBwYWdlIHByaW50KSwKKwl1c2U9dHZpOTEyYit2YiwgdXNlPXR2aTkxMmIrcHJpbnRlciwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MTJiLTJwfHR2aTkxMmMtMnB8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uOyBoYWxmLWludGVuc2l0eSBhdHRyaWJ1dGUpLAorCXVzZT10dmk5MTJiKzJwLCB1c2U9dHZpOTEyYitkaW0sIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi0ycC1tY3x0dmk5MTJjLTJwLW1jfHR2aTkxMmItbWMtMnB8dHZpOTEyYy1tYy0ycHxUZWxlVmlkZW8gVFZJLTkxMkIgb3IgVFZJLTkxMkMgKHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb247IG1hZ2ljIGNvb2tpZXMpLAorCXVzZT10dmk5MTJiKzJwLCB1c2U9dHZpOTEyYittYywgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MTJiLXZifHR2aTkxMmMtdmJ8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uICJ2aXNpYmxlIGJlbGwiOyBoYWxmLWludGVuc2l0eSBhdHRyaWJ1dGUpLAorCXVzZT10dmk5MTJiK3ZiLCB1c2U9dHZpOTEyYitkaW0sIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTEyYi12Yi1tY3x0dmk5MTJjLXZiLW1jfHR2aTkxMmItbWMtdmJ8dHZpOTEyYy1tYy12YnxUZWxlVmlkZW8gVFZJLTkxMkIgb3IgVFZJLTkxMkMgKHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb24gInZpc2libGUgYmVsbCI7IG1hZ2ljIGNvb2tpZXMpLAorCXVzZT10dmk5MTJiK3ZiLCB1c2U9dHZpOTEyYittYywgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MTJifHR2aTkxMmN8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChoYWxmLWludGVuc2l0eSBhdHRyaWJ1dGUpLAorCXVzZT10dmk5MTJiK2RpbSwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MTJiLW1jfHR2aTkxMmMtbWN8VGVsZVZpZGVvIFRWSS05MTJCIG9yIFRWSS05MTJDIChtYWdpYyBjb29raWVzKSwKKwl1c2U9dHZpOTEyYittYywgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLXVua3x0dmk5MjBjLXVua3xUZWxlVmlkZW8gVFZJLTkyMEIgb3IgVFZJLTkyMEMgKG5vIGF0dHJpYnV0ZXMpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYi11bmssCisKK3R2aTkyMGItMnAtdW5rfHR2aTkyMGMtMnAtdW5rfHR2aTkyMGItdW5rLTJwfHR2aTkyMGMtdW5rLTJwfFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbjsgbm8gYXR0cmlidXRlcyksCisJdXNlPXR2aTkyMGIrZm4sIHVzZT10dmk5MTJiKzJwLCB1c2U9dHZpOTEyYi11bmssCisKK3R2aTkyMGItdmItdW5rfHR2aTkyMGMtdmItdW5rfHR2aTkyMGItdW5rLXZifHR2aTkyMGMtdW5rLXZifFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAoc2Vjb25kIHBhZ2UgbWVtb3J5IG9wdGlvbiAidmlzaWJsZSBiZWxsIjsgbm8gYXR0cmlidXRlcyksCisJdXNlPXR2aTkyMGIrZm4sIHVzZT10dmk5MTJiK3ZiLCB1c2U9dHZpOTEyYi11bmssCisKK3R2aTkyMGItcHx0dmk5MjBjLXB8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChubyBhdHRyaWJ1dGVzOyBwYWdlIHByaW50KSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrcHJpbnRlciwgdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLTJwLXB8dHZpOTIwYy0ycC1wfHR2aTkyMGItcC0ycHx0dmk5MjBjLXAtMnB8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uOyBubyBhdHRyaWJ1dGVzOyBwYWdlIHByaW50KSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrMnAsIHVzZT10dmk5MTJiK3ByaW50ZXIsCisJdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLXZiLXB8dHZpOTIwYy12Yi1wfHR2aTkyMGItcC12Ynx0dmk5MjBjLXAtdmJ8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uICJ2aXNpYmxlIGJlbGwiOyBubyBhdHRyaWJ1dGVzOyBwYWdlIHByaW50KSwKKwl1c2U9dHZpOTIwYitmbiwgdXNlPXR2aTkxMmIrdmIsIHVzZT10dmk5MTJiK3ByaW50ZXIsCisJdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLTJwfHR2aTkyMGMtMnB8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uOyBoYWxmLWludGVuc2l0eSBhdHRyaWJ1dGUpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYisycCwgdXNlPXR2aTkxMmIrZGltLAorCXVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi0ycC1tY3x0dmk5MjBjLTJwLW1jfHR2aTkyMGItbWMtMnB8dHZpOTIwYy1tYy0ycHxUZWxlVmlkZW8gVFZJLTkyMEIgb3IgVFZJLTkyMEMgKHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb247IG1hZ2ljIGNvb2tpZXMpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYisycCwgdXNlPXR2aTkxMmIrbWMsCisJdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBiLXZifHR2aTkyMGMtdmJ8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChzZWNvbmQgcGFnZSBtZW1vcnkgb3B0aW9uICJ2aXNpYmxlIGJlbGwiOyBoYWxmLWludGVuc2l0eSBhdHRyaWJ1dGUpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYit2YiwgdXNlPXR2aTkxMmIrZGltLAorCXVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi12Yi1tY3x0dmk5MjBjLXZiLW1jfHR2aTkyMGItbWMtdmJ8dHZpOTIwYy1tYy12YnxUZWxlVmlkZW8gVFZJLTkyMEIgb3IgVFZJLTkyMEMgKHNlY29uZCBwYWdlIG1lbW9yeSBvcHRpb24gInZpc2libGUgYmVsbCI7IG1hZ2ljIGNvb2tpZXMpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYit2YiwgdXNlPXR2aTkxMmIrbWMsCisJdXNlPXR2aTkxMmItdW5rLAorCit0dmk5MjBifHR2aTkyMGN8VGVsZVZpZGVvIFRWSS05MjBCIG9yIFRWSS05MjBDIChoYWxmLWludGVuc2l0eSBhdHRyaWJ1dGUpLAorCXVzZT10dmk5MjBiK2ZuLCB1c2U9dHZpOTEyYitkaW0sIHVzZT10dmk5MTJiLXVuaywKKwordHZpOTIwYi1tY3x0dmk5MjBjLW1jfFRlbGVWaWRlbyBUVkktOTIwQiBvciBUVkktOTIwQyAobWFnaWMgY29va2llcyksCisJdXNlPXR2aTkyMGIrZm4sIHVzZT10dmk5MTJiK21jLCB1c2U9dHZpOTEyYi11bmssCisKKyMgVGVsZXZpZGVvIDkyMSBhbmQgdmFyaWFudHMKKyMgRnJvbTogVGltIFRoZWlzZW4gPHRpbUBjcy53aXNjLmVkdT4gMjIgU2VwdCAxOTk1CisjICh0dmk5MjE6IHJlbW92ZWQgOmtvPWJ0OiBiZWZvcmUgdHJhbnNsYXRpb24sIEkgc2VlIG5vIGJhY2t0YWIgY2FwOworIyBhbHNvIGFkZGVkIGVtcHR5IDxhY3NjPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZyAtLSBlc3IpCit0dmk5MjF8dGVsZXZpZGVvIG1vZGVsIDkyMSB3aXRoIHN5c2xpbmUgc2FtZSBhcyBwYWdlICYgcmVhbCB2aSBmdW5jdGlvbiwKKwlPVGJzLCBPVHB0LCBhbSwgaHMsIHhlbmwsIHhocCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzAsCisJYWNzYz0sIGNsZWFyPV5aLCBjbm9ybT1cRS4zLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eViwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwzLz4sIGN1dTE9XkssCisJY3Z2aXM9XEUuMiwgZGNoMT1cRVcsIGRsMT1cRVIkPDEqLz4sIGRzbD1cRWZcclxFZywgZWQ9XEVZLAorCWVsPVxFVCwgZnNsPVxFZywgaG9tZT1eXiwgaHQ9XkksIGljaDE9XEVRLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgaWwxPVxFRSwgaW5kPV5KLCBpbnZpc0AsCisJaXMyPVxFbFxFIlxFRjFcRS4zXDAxN1xFQVxFPCwga2JzPV5ILCBrY2xyPV5aLCBrY3ViMT1eSCwKKwlrY3VkMT1eViwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSJDwxKi8+LAorCWtlZD1cRVksIGtlbD1cRVQsIGtpY2gxPVxFUSwga2lsMT1cRUUsIG5lbD1eTV5KLCBybWFjcz1cRSUlLAorCXJtaXI9LCBzbWFjcz1cRSQsIHNtaXI9LCB0c2w9XEVmXEVHMCwgdXNlPWFkbStzZ3IsCisjIHdpdGhvdXQgdGhlIGJlZXBlcgorIyAodHZpOTJCOiByZW1vdmVkIDprbz1idDogYmVmb3JlIHRyYW5zbGF0aW9uLCBJIHNlZSBubyBiYWNrdGFiIGNhcDsKKyMgYWxzbyBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmcgLS0gZXNyKQordHZpOTJCfHRlbGV2aWRlbyBtb2RlbCA5MjEgd2l0aCBzeXNsaW5lIHNhbWUgYXMgcGFnZSAmIHJlYWwgdmkgZnVuY3Rpb24gJiBubyBiZWVwZXIsCisJYW0sIGhzLCB4ZW5sLCB4aHAsCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMwLAorCWFjc2M9LCBjbGVhcj1eWiwgY25vcm09XEUuMywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XlYsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8My8+LCBjdXUxPV5LLAorCWN2dmlzPVxFLjIsIGRjaDE9XEVXLCBkbDE9XEVSJDwxKi8+LCBkc2w9XEVmXHJcRWcsIGVkPVxFWSwKKwllbD1cRVQsIGZsYXNoPVxFYiQ8MjAwLz5cRWQsIGZzbD1cRWcsIGhvbWU9Xl4sIGh0PV5JLAorCWljaDE9XEVRLCBpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsIGlsMT1cRUUsIGluZD1eSiwKKwlpbnZpc0AsIGlzMj1cRWxcRSJcRUYxXEUuM1wwMTdcRUFcRTwsIGticz1eSCwga2Nscj1eWiwKKwlrY3ViMT1eSCwga2N1ZDE9XlYsIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLAorCWtkbDE9XEVSJDwxKi8+LCBrZWQ9XEVZLCBrZWw9XEVULCBraWNoMT1cRVEsIGtpbDE9XEVFLAorCW5lbD1eTV5KLCBybWFjcz1cRSUlLCBzbWFjcz1cRSQsIHRzbD1cRWZcRUcwLCB1c2U9YWRtK3NnciwKKyMgKHR2aTkyRDogcmVtb3ZlZCA6a289YnQ6IGJlZm9yZSB0cmFuc2xhdGlvbiwgSSBzZWUgbm8gYmFja3RhYiBjYXAgLS0gZXNyKQordHZpOTJEfHR2aTkyQiB3aXRoIERUUiBpbnN0ZWFkIG9mIFhPTi9YT0ZGICYgYmV0dGVyIHBhZGRpbmcsCisJZGwxPVxFUiQ8MiovPiwgaWwxPVxFRSQ8MiovPiwKKwlpczI9XEVsXEUiXEVGMVxFLjNcMDE2XEVBXEU8LCBrZGwxPVxFUiQ8MiovPiwKKwlraWwxPVxFRSQ8MiovPiwgdXNlPXR2aTkyQiwKKworIyAodHZpOTI0OiBUaGlzIHVzZWQgdG8gaGF2ZSA8ZHNsPVxFczA+LCA8ZnNsPVwwMzE+LiAgSSBwdXQgdGhlIG5ldyBzdHJpbmdzCisjIGluIGZyb20gYSBCU0QgdGVybWNhcCBmaWxlIGJlY2F1c2UgaXQgbG9va3MgbGlrZSB0aGV5IGRvIHNvbWV0aGluZyB0aGUKKyMgb2xkIG9uZXMgc2tpcCAtLSBlc3IpCit0dmk5MjR8dGVsZXZpZGVvIHR2aTkyNCwKKwlhbSwgYncsIGhzLCBpbiwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwgeG1jIzAsCisJYmVsPV5HLCBibGluaz1cRUcyLCBjYnQ9XEVJLCBjaXZpcz1cRS4wLCBjbGVhcj1cRSowLAorCWNub3JtPVxFLjMsIGNyPV5NLCBjc3I9XEVfJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1YjE9XkgsIGN1ZDE9XlYsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgY3Z2aXM9XEUuMSwKKwlkY2gxPVxFVywgZGwxPVxFUiwgZHNsPVxFczBcRWZcMDMxLCBlZD1cRXksIGVsPVxFdCwKKwlmbGFzaD1cRWIkPDIwMD5cRWQsIGZzbD1cMDMxXEVzMSwgaG9tZT1eXiwgaHQ9XkksIGh0cz1cRTEsCisJaWNoMT1cRVEsIGlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgaWwxPVxFRSwgaW5kPV5KLAorCWludmlzQCwgaXMxPVwwMTdcRSVcRSdcRShcRURGXEVDXEVHMFxFTjBcRXMwXEV2MCwKKwlrYnM9XkgsIGtjbHI9XEUqMCwga2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwga2N1dTE9XkssCisJa2RjaDE9XEVXLCBrZGwxPVxFUiwga2VkPVxFeSwga2VsPVxFdCwga2YwPV5BQFxyLCBrZjE9XkFBXHIsCisJa2YxMD1eQUpcciwga2YxMT1eQUtcciwga2YxMj1eQUxcciwga2YxMz1eQU1cciwga2YxND1eQU5cciwKKwlrZjE1PV5BT1xyLCBrZjI9XkFCXHIsIGtmMz1eQUNcciwga2Y0PV5BRFxyLCBrZjU9XkFFXHIsCisJa2Y2PV5BRlxyLCBrZjc9XkFHXHIsIGtmOD1eQUhcciwga2Y5PV5BSVxyLCBraG9tZT1eXiwKKwlraWNoMT1cRVEsIGtpbDE9XEVFLCBsZjA9RjEsIGxmMT1GMiwgbGYxMD1GMTEsIGxmMj1GMywgbGYzPUY0LAorCWxmND1GNSwgbGY1PUY2LCBsZjY9RjcsIGxmNz1GOCwgbGY4PUY5LCBsZjk9RjEwLAorCXBma2V5PVxFfCVwMSV7NDl9JSslYyVwMiVzXDAzMSwgcmk9XEVqLCB0YmM9XEUzLCB0c2w9XEVmLAorCXVzZT1hZG0rc2dyLAorCisjIFRWSTkyNSBESVAgc3dpdGNoZXMuICBJbiBlYWNoIG9mIHRoZXNlLCBEID0gRG93biBhbmQgVSA9IFVwLAorIworIyBIZXJlIGFyZSB0aGUgc2V0dGluZ3MgZm9yIHRoZSBleHRlcm5hbCAoYmF1ZCkgc3dpdGNoZXMgKFMxKToKKyMKKyMgICAgICAgICAgICAgUG9zaXRpb24JCUJhdWQKKyMgNwk4CTkJMTAJCVtQcmludGVyXQorIyAxCTIJMwk0CQlbTWFpbiBSUzIzMl0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRAlECUQJRAk5NjAwCisjIEQJRAlECVUJICA1MAorIyBECUQJVQlECSAgNzUKKyMgRAlECVUJVQkgMTEwCisjIEQJVQlECUQJIDEzNQorIyBECVUJRAlVCSAxNTAKKyMgRAlVCVUJRAkgMzAwCisjIEQJVQlVCVUJIDYwMAorIyBVCUQJRAlECTEyMDAKKyMgVQlECUQJVQkxODAwCisjIFUJRAlVCUQJMjQwMAorIyBVCUQJVQlVCTM2MDAKKyMgVQlVCUQJRAk0ODAwCisjIFUJVQlECVUJNzIwMAorIyBVCVUJVQlECTk2MDAKKyMgVQlVCVUJVQkxOTIwMAorIworIworIyBTZXR0aW5ncyBmb3Igd29yZCBsZW5ndGggYW5kIHN0b3AtYml0cyAoUzEpCisjCisjICBQb3NpdGlvbglEZXNjcmlwdGlvbgorIyA1CTYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFUJLQk3LWJpdCB3b3JkCisjIEQJLQk4LWJpdCB3b3JkCisjIC0JVQkyIHN0b3AgYml0cworIyAtCUQJMSBzdG9wIGJpdAorIworIworIyBTMiAoZXh0ZXJuYWwpIHNldHRpbmdzCisjCisjIFBvc2l0aW9uCVVwCURuCURlc2NyaXB0aW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDEJCVgJCUxvY2FsIGVkaXQKKyMgCQkJWAlEdXBsZXggZWRpdCAodHJhbnNtaXQgZWRpdGluZyBrZXlzKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAyCQlYCQk5MTIvOTIwIGVtdWxhdGlvbgorIyAJCQlYCTkyNQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAzCQkJWAorIyA0CQkJWAlObyBwYXJpdHkKKyMgNQkJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMwkJCVgKKyMgNAkJCVgJT2RkIHBhcml0eQorIyA1CQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDMJCQlYCisjIDQJCVgJCUV2ZW4gcGFyaXR5CisjIDUJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMwkJWAorIyA0CQkJWAlNYXJrIHBhcml0eQorIyA1CQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDMJCVgKKyMgNAkJWAkJU3BhY2UgcGFyaXR5CisjIDUJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNgkJWAkJV2hpdGUgb24gYmxhY2sgZGlzcGxheQorIyAJCQlYCUJsYWNrIG9uIHdoaXRlIGRpc3BsYXkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNwkJCVgJSGFsZiBEdXBsZXgKKyMgOAkJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNwkJWAkJRnVsbCBEdXBsZXgKKyMgOAkJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNwkJCVgJQmxvY2sgbW9kZQorIyA4CQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDkJCQlYCTUwIEh6CisjIAkJWAkJNjAgSHoKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMTAJCVgJCUNSL0xGIChBdXRvIExGKQorIyAJCQlYCUNSIG9ubHkKKyMKKyMgUzMgKGludGVybmFsIHN3aXRjaCkgc2V0dGluZ3M6CisjCisjIFBvc2l0aW9uCVVwCURuCURlc2NyaXB0aW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDEJCVgJCUtleWNsaWNrIG9mZgorIyAJCQlYCUtleWNsaWNrIG9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDIJCQlYCUVuZ2xpc2gKKyMgMwkJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMgkJCVgJR2VybWFuCisjIDMJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMgkJWAkJRnJlbmNoCisjIDMJCQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDIJCVgJCVNwYW5pc2gKKyMgMwkJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyA0CQkJWAlCbGlua2luZyBibG9jayBjdXJzb3IKKyMgNQkJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNAkJCVgJQmxpbmtpbmcgdW5kZXJsaW5lIGN1cnNvcgorIyA1CQlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDQJCVgJCVN0ZWFkeSBibG9jayBjdXJzb3IKKyMgNQkJCVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgNAkJWAkJU3RlYWR5IHVuZGVybGluZSBjdXJzb3IKKyMgNQkJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyA2CQlYCQlTY3JlZW4gYmxhbmtpbmcgdGltZXIgKE9OKQorIyAJCQlYCVNjcmVlbiBibGFua2luZyB0aW1lciAoT0ZGKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyA3CQlYCQlQYWdlIGF0dHJpYnV0ZXMKKyMgCQkJWAlMaW5lIGF0dHJpYnV0ZXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgOAkJWAkJRENEIGRpc2Nvbm5lY3RlZAorIyAJCQlYCURDRCBjb25uZWN0ZWQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgOQkJWAkJRFNSIGRpc2Nvbm5lY3RlZAorIyAJCQlYCURTUiBjb25uZWN0ZWQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMTAJCVgJCURUUiBEaXNjb25uZWN0ZWQKKyMgCQkJWAlEVFIgY29ubmVjdGVkCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjICh0dmk5MjU6IEJTRCBoYXMgPGNsZWFyPVxFKj4uICBJIGdvdCA8aXMyPiBhbmQgPHJpPiBmcm9tIHRoZXJlIC0tIGVzcikKK3R2aTkyNXx0ZWxldmlkZW8gOTI1LAorCU9UYnMsIGFtLCBidywgaHMsIHVsLAorCWNvbHMjODAsIGxpbmVzIzI0LCB4bWMjMSwKKwliZWw9XkcsIGNidD1cRUksIGNsZWFyPV5aLCBjbm9ybT1cRS40LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eViwKKwljdWYxPV5MLCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLAorCWN2dmlzPVxFLjIsIGRjaDE9XEVXLCBkbDE9XEVSLCBkc2w9XEVoLCBlZD1cRVksIGVsPVxFVCwKKwlmbGFzaD1cRWIkPDIwMD5cRWQsIGZzbD1eTVxFZywgaG9tZT1eXiwgaHQ9XkksIGh0cz1cRTEsCisJaWNoMT1cRVEsIGlsMT1cRUUsIGluZD1eSiwgaW52aXNALCBpczI9XEVsXEUiLCBrYnM9XkgsIGtjbHI9XlosCisJa2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsCisJa2VkPVxFWSwga2VsPVxFVCwga2YwPV5BSVxyLCBrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLAorCWtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLAorCWtmOT1eQUhcciwga2hvbWU9Xl4sIGtpY2gxPVxFUSwga2lsMT1cRUUsIHJpPVxFaiwgdGJjPVxFMywKKwl0c2w9XEVoXEVmLCB1c2U9YWRtK3NnciwKKyMgVGVsZVZpZGVvIDkyNSBmcm9tIE1pdGNoIEJyYWRsZXkgPHN1biF3bWI+IHZpYSBCUkwKKyMgdG8gYXZvaWQgIm1hZ2ljIGNvb2tpZSIgc3RhbmRvdXQgZ2xpdGNoOgordHZpOTI1LWhpfFRlbGVWaWRlbyBNb2RlbCA5MjUgd2l0aCBoYWxmIGludGVuc2l0eSBzdGFuZG91dCBtb2RlLAorCXhtY0AsCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIHJtc289XEUoLCBzbXNvPVxFKSwgdXNlPXR2aTkyNSwKKworIyBGcm9tOiBUb2RkIExpdHdpbiA8bGl0d2luQGxpdHdpbi5qcGwubmFzYS5nb3Y+IDI4IE1heSAxOTkzCisjIE9yaWdpbmFsbHkgVGltIEN1cnJ5LCBVbml2LiBvZiBDZW50cmFsIEZsYS4sIDxkdWtlIXVjZi1jcyF0aW0+IDUvMjEvODIKKyMgZm9yIGFkZGl0aW9uYWwgY2FwYWJpbGl0aWVzLAorIyBUaGUgZm9sbG93aW5nIHR2aSBkZXNjcmlwdGlvbnMgZnJvbSBCOnBqcGhhciBhbmQgdmlydXMhbWlrZQorIyBpcyBmb3IgYWxsIDk1MHMuICBJdCBzZXRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKyMgZnVsbCBkdXBsZXggKFxFREYpCQl3cml0ZSBwcm90ZWN0IG9mZiAoXEUoKQorIyBjb252ZXJzYXRpb24gbW9kZSAoXEVDKQlncmFwaGljcyBtb2RlIG9mZiAoXEUlKQorIyB3aGl0ZSBvbiBibGFjayAoXEVkKQkJYXV0byBwYWdlIGZsaXAgb2ZmIChcRXcpCisjIHR1cm4gb2ZmIHN0YXR1cyBsaW5lIChcRWcpCWNsZWFyIHN0YXR1cyBsaW5lIChcRWZccikKKyMgbm9ybWFsIHZpZGVvIChcRTApCQltb25pdG9yIG1vZGUgb2ZmIChcRVggb3IgXEV1KQorIyBlZGl0IG1vZGUgKFxFcikJCWxvYWQgYmxhbmsgY2hhciB0byBzcGFjZSAoXEVlXDA0MCkKKyMgbGluZSBlZGl0IG1vZGUgKFxFTykJCWVuYWJsZSBidWZmZXIgY29udHJvbCAoXk8pCisjIHByb3RlY3QgbW9kZSBvZmYgKFxFXDA0NykJZHVwbGV4IGVkaXQga2V5cyAoXEVsKQorIyBwcm9ncmFtIHVuc2hpZnRlZCBzZW5kIGtleSB0byBzZW5kIGxpbmUgYWxsIChcRTAxNikKKyMgcHJvZ3JhbSBzaGlmdGVkIHNlbmQga2V5IHRvIHNlbmQgbGluZSB1bnByb3RlY3RlZCAoXEUwMDQpCisjIHNldCB0aGUgZm9sbG93aW5nIHRvIG51bGxzOgorIwlmaWVsZCBkZWxpbWl0ZXIgKFxFeDBcMjAwXDIwMCkKKyMJbGluZSBkZWxpbWl0ZXIgKFxFeDFcMjAwXDIwMCkKKyMJc3RhcnQtcHJvdGVjdGVkIGZpZWxkIGRlbGltaXRlciAoXEV4MlwyMDBcMjAwKQorIwllbmQtcHJvdGVjdGVkIGZpZWxkIGRlbGltaXRlciAoXEV4M1wyMDBcMjAwKQorIyBzZXQgZW5kIG9mIHRleHQgZGVsaW1pdGVyIHRvIGNhcnJpYWdlIHJldHVybi9udWxsIChcRXg0XHJcMjAwKQorIworIyAgICAgICAgICAgICAgICAgICAgIFRWSSA5NTAgU3dpdGNoIFNldHRpbmcgUmVmZXJlbmNlIENoYXJ0cworIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRSAxOgorIworIyAgICAgIFMxICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICAgICA4ICAgICA5ICAgIDEwCisjICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgICAgICAgfCBDb21wdXRlciBCYXVkIFJhdGUgICAgfERhdGEgfFN0b3AgfCBQcmludGVyIEJhdWQgUmF0ZSAgICAgfAorIyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8Qml0cyB8Qml0cyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMgICB8ICBVcCAgfCAgICAgICAgU2VlICAgICAgICAgICAgfCAgNyAgfCAgMiAgfCAgICAgICAgU2VlICAgICAgICAgICAgfAorIyAgICstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjICAgfCBEb3duIHwgICAgICBUQUJMRSAyICAgICAgICAgIHwgIDggIHwgIDEgIHwgICAgICBUQUJMRSAyICAgICAgICAgIHwKKyMgICArLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIworIworIyAgICAgIFMyICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICAgICA4ICAgICA5ICAgIDEwCisjICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLSstLS0tLSstLS0tLSsKKyMgICAgICAgICAgfEVkaXQgfEN1cnNyfCAgICBQYXJpdHkgICAgICAgfFZpZGVvfFRyYW5zbWlzcydufCBIeiAgfENsaWNrfAorIyAgICstLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rCisjICAgfCAgVXAgIHwgRHBseHxCbGlua3wgICAgICBTZWUgICAgICAgIHxHb25Ca3wgICBTZWUgICAgIHwgNjAgIHwgT2ZmIHwKKyMgICArLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKworIyAgIHwgRG93biB8TG9jYWx8U3QnZHl8ICAgIFRBQkxFIDMgICAgICB8Qmtvbkd8ICBDSEFSVCAgICB8IDUwICB8IE9uICB8CisjICAgKy0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLSstLS0tLSstLS0tLSsKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRSAyOgorIworIyAgICAgICAgICAgICArLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rCisjICAgICAgICAgICAgIHwgRGlzcGxheSAgIHwgIDEgIHwgIDIgIHwgIDMgIHwgIDQgIHwgICBCYXVkICAgIHwKKyMgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKyAgICAgICAgICAgfAorIyAgICAgICAgICAgICB8IFByaW50ZXIgICB8ICA3ICB8ICA4ICB8ICA5ICB8IDEwICB8ICAgUmF0ZSAgICB8CisjICAgICAgICAgICAgICstLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLSsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgRCAgfCAgRCAgfCAgRCAgfCAgIDk2MDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBVICB8ICBEICB8ICBEICB8ICBEICB8ICAgICA1MCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIFUgIHwgIEQgIHwgIEQgIHwgICAgIDc1ICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgVSAgfCAgRCAgfCAgRCAgfCAgICAxMTAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBEICB8ICBVICB8ICBEICB8ICAgIDEzNSAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIEQgIHwgIFUgIHwgIEQgIHwgICAgMTUwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgVSAgfCAgVSAgfCAgRCAgfCAgICAzMDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBVICB8ICBVICB8ICBVICB8ICBEICB8ICAgIDYwMCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIEQgIHwgIEQgIHwgIFUgIHwgICAxMjAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgRCAgfCAgRCAgfCAgVSAgfCAgIDE4MDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBVICB8ICBEICB8ICBVICB8ICAgMjQwMCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIFUgIHwgIEQgIHwgIFUgIHwgICAzNjAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgRCAgfCAgVSAgfCAgVSAgfCAgIDQ4MDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBVICB8ICBEICB8ICBVICB8ICBVICB8ICAgNzIwMCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIFUgIHwgIFUgIHwgIFUgIHwgICA5NjAwICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgVSAgfCAgVSAgfCAgVSAgfCAgMTkyMDAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rCisjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEUgMzoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tKworIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzICB8ICA0ICB8ICA1ICB8ICAgUGFyaXR5ICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLSsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgWCAgfCAgWCAgfCAgRCAgfCAgICBOb25lICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBEICB8ICBVICB8ICAgICBPZGQgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgIFUgIHwgIFUgIHwgICAgRXZlbiAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgRCAgfCAgVSAgfCAgICBNYXJrICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBVICB8ICBVICB8ICBVICB8ICAgU3BhY2UgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLSsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYID0gZG9uJ3QgY2FyZQorIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFSVDoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3ICB8ICA4ICB8IENvbW11bmljYXRpb24gICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgRCAgfCAgSGFsZiBEdXBsZXggICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICB8ICBEICB8ICBVICB8ICBGdWxsIER1cGxleCAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFUgIHwgIEQgIHwgICAgIEJsb2NrICAgICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgVSAgfCAgVSAgfCAgICAgTG9jYWwgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisjCisjICh0dmk5NTA6IGVhcmx5IHZlcnNpb25zIGhhZCBvYnNvbGV0ZSAiOm1hPV5Wal5La15IaF5MbF5eSDoiLgorIyBJIGFsc28gaW5zZXJ0ZWQgPGljaDE+IGFuZCA8a2ljaDE+OyB0aGUgOmtvOiBzdHJpbmcgaW5kaWNhdGVkIHRoYXQgPGljaD4KKyMgc2hvdWxkIGJlIHByZXNlbnQgYW5kIGFsbCB0dmkgbmF0aXZlIG1vZGVzIHVzZSB0aGUgc2FtZSBzdHJpbmcgZm9yIHRoaXMuCisjIEZpbmFsbHksIG5vdGUgdGhhdCBCU0QgaGFzIGN1ZDE9XlYuIC0tIGVzcikKK3R2aTk1MHx0ZWxldmlkZW8gOTUwLAorCU9UYnMsIGFtLCBocywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMxLAorCWFjc2M9YlwwMTFjXDAxNGRccmVcbmlcMDEzLCBiZWw9XkcsIGNidD1cRUksIGNsZWFyPVxFKiwKKwljcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBkc2w9XEVnXEVmXHIsIGVkPVxFeSwgZWw9XEV0LCBmbGFzaD1cRWIkPDIwMC8+XEVkLAorCWZzbD1eTSwgaG9tZT1eXiwgaHQ9XkksIGh0cz1cRTEsIGljaDE9XEVRLCBpbDE9XEVFLCBpbmQ9XkosCisJaW52aXNALAorCWlzMj1cRURGXEVDXEVkXEVHMFxFZ1xFclxFT1xFJ1xFKFxFJVxFd1xFWFxFZSBcMDE3XDAxMVxFbFxFMDE2XEUwMDRcRXgwXDBcMFxFeDFcMFwwXEV4MlwwXDBcMDExXEV4M1wwXDBcRXg0XHJcMFxFZlxyLAorCWticz1eSCwga2NidD1cRUksIGtjbHI9XEUqLCBrY3ViMT1eSCwga2N1ZDE9XlYsIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSLCBrZWQ9XEV5LCBrZWw9XEV0LCBrZjA9XkEwXHIsCisJa2YxPV5BQFxyLCBrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsCisJa2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwKKwlraWNoMT1cRVEsIGtpbDE9XEVFLCBtYzQ9XEVhLCBtYzU9XEVgLCByaT1cRWosIHJtYWNzPV5YLAorCXJtaXI9XEVyLCBzbWFjcz1eVSwgc21pcj1cRXEsIHRiYz1cRTMsIHRzbD1cRWdcRWYsCisJdXNlPWFkbStzZ3IsCisjCisjIGlzIGZvciA5NTAgd2l0aCB0d28gcGFnZXMgYWRkcyB0aGUgZm9sbG93aW5nOgorIwlzZXQgNDggbGluZSBwYWdlIChcRVxcMikKKyMJcGxhY2UgY3Vyc29yIGF0IHBhZ2UgMCwgbGluZSAyNCwgY29sdW1uIDEgKFxFLTA3ICkKKyMJc2V0IGxvY2FsIChubyBzZW5kKSBlZGl0IGtleXMgKFxFaykKKyMKKyMgdHdvIHBhZ2UgOTUwIGFkZHMgdGhlIGZvbGxvd2luZzoKKyMJd2hlbiBlbnRlcmluZyBleCwgc2V0IDI0IGxpbmUgcGFnZSAoXEVcXDEpCisjCXdoZW4gZXhpdGluZyBleCwgcmVzZXQgNDggbGluZSBwYWdlIChcRVxcMikKKyMJCQkgcGxhY2UgY3Vyc29yIGF0IDAsMjQsMSAoXEUtMDcgKQorIwlzZXQgZHVwbGV4IChzZW5kKSBlZGl0IGtleXMgKFxFbCkgd2hlbiBlbnRlcmluZyB2aQorIwlzZXQgbG9jYWwgKG5vIHNlbmQpIGVkaXQga2V5cyAoXEVrKSB3aGVuIGV4aXRpbmcgdmkKKyMKK3R2aTk1MC0ycHx0ZWxldmlkZW85NTAgdy8yIHBhZ2VzLAorCWlzMj1cRURGXEVDXEVkXEVHMFxFZ1xFclxFT1xFJ1xFKFxFJVxFd1xFWFxFZSBcMDE3XDAxMVxFa1xFMDE2XEUwMDRcRXgwXDBcMFxFeDFcMFwwXEV4MlwwXDBcMDExXEV4M1wwXDBcRXg0XHJcMFxFXFwyXEUtMDcgXDAxMSwKKwlybWN1cD1cRVxcMlxFLTA3XHMsIHJta3g9XEVrLCBzbWN1cD1cRVxcMVxFLTA3XHMsCisJc21reD1cRWwsIHVzZT10dmk5NTAsCisjCisjIGlzIGZvciA5NTAgd2l0aCBmb3VyIHBhZ2VzIGFkZHMgdGhlIGZvbGxvd2luZzoKKyMJc2V0IDk2IGxpbmUgcGFnZSAoXEVcXDMpCisjCXBsYWNlIGN1cnNvciBhdCBwYWdlIDAsIGxpbmUgMjQsIGNvbHVtbiAxIChcRS0wNyApCisjCisjIGZvdXIgcGFnZSA5NTAgYWRkcyB0aGUgZm9sbG93aW5nOgorIwl3aGVuIGVudGVyaW5nIGV4LCBzZXQgMjQgbGluZSBwYWdlIChcRVxcMSkKKyMJd2hlbiBleGl0aW5nIGV4LCByZXNldCA5NiBsaW5lIHBhZ2UgKFxFXFwzKQorIwkJCSBwbGFjZSBjdXJzb3IgYXQgMCwyNCwxIChcRS0wNyApCisjCit0dmk5NTAtNHB8dGVsZXZpZGVvOTUwIHcvNCBwYWdlcywKKwlpczI9XEVERlxFQ1xFZFxFRzBcRWdcRXJcRU9cRSdcRShcRSVcRXdcRVhcRWUgXDAxN1wwMTFcRWtcRTAxNlxFMDA0XEV4MFwwXDBcRXgxXDBcMFxFeDJcMFwwXDAxMVxFeDNcMFwwXEV4NFxyXDBcRVxcM1xFLTA3IFwwMTEsCisJcm1jdXA9XEVcXDNcRS0wN1xzLCBybWt4PVxFaywgc21jdXA9XEVcXDFcRS0wN1xzLAorCXNta3g9XEVsLCB1c2U9dHZpOTUwLAorIworIyA8aXMyPiBmb3IgcmV2ZXJzZSB2aWRlbyA5NTAgY2hhbmdlcyB0aGUgZm9sbG93aW5nOgorIwlzZXQgcmV2ZXJzZSB2aWRlbyAoXEVkKQorIworIyBzZXQgdmIgYWNjb3JkaW5nbHkgKFxFZCAuLi5kZWxheS4uLiBcRWIpCisjCit0dmk5NTAtcnZ8dGVsZXZpZGVvOTUwIHJldiB2aWRlbywKKwlmbGFzaD1cRWQkPDIwMC8+XEViLAorCWlzMj1cRURGXEVDXEViXEVHMFxFZ1xFclxFT1xFJ1xFKFxFJVxFd1xFWFxFZSBcMDE3XDAxMVxFbFxFMDE2XEUwMDRcRXgwXDBcMFxFeDFcMFwwXEV4MlwwXDBcMDExXEV4M1wwXDBcRXg0XHJcMCwKKwl1c2U9dHZpOTUwLAorCisjIHR2aTk1MC1ydi0ycCB1c2VzIHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzIGZyb20gOTUwLTJwIGFuZCA5NTAtcnYKK3R2aTk1MC1ydi0ycHx0ZWxldmlkZW85NTAgcmV2IHZpZGVvIHcvMiBwYWdlcywKKwlmbGFzaD1cRWQkPDIwMC8+XEViLAorCWlzMj1cRURGXEVDXEViXEVHMFxFZ1xFclxFT1xFJ1xFKFxFJVxFd1xFWFxFZSBcMDE3XDAxMVxFa1xFMDE2XEUwMDRcRXgwXDBcMFxFeDFcMFwwXEV4MlwwXDBcMDExXEV4M1wwXDBcRXg0XHJcMFxFXFwyXEUtMDdccywKKwlybWN1cD1cRVxcMlxFLTA3XHMsIHJta3g9XEVrLCBzbWN1cD1cRVxcMVxFLTA3XHMsCisJc21reD1cRWwsIHVzZT10dmk5NTAsCisKKyMgdHZpOTUwLXJ2IHVzZXMgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXMgZnJvbSA5NTAtNHAgYW5kIDk1MC1ydgordHZpOTUwLXJ2LTRwfHRlbGV2aWRlbzk1MCByZXYgdmlkZW8gdy80IHBhZ2VzLAorCWZsYXNoPVxFZCQ8MjAwLz5cRWIsCisJaXMyPVxFREZcRUNcRWJcRUcwXEVyXEVPXEUnXEUoXEUlXEV3XEVYXEVlIFwwMTdcMDExXEVrXEUwMTZcRTAwNFxFeDBcMFwwXEV4MVwwXDBcRXgyXDBcMFwwMTFcRXgzXDBcMFxFeDRcclwwXEVcXDNcRS0wN1xzLAorCXJtY3VwPVxFXFwzXEUtMDdccywgcm1reD1cRWssIHNtY3VwPVxFXFwxXEUtMDdccywKKwlzbWt4PVxFbCwgdXNlPXR2aTk1MCwKKyMgRnJvbTogQW5kcmVhcyBTdG9sY2tlIDxzdG9sY2tlQGljc2kuYmVya2VsZXkuZWR1PgorIyAodHZpOTU1OiByZW1vdmVkIG9ic29sZXRlICI6bWE6PV5Wal5La15IaF5MbF5eSCI7CisjIHJlbW92ZWQgaW5jb3JyZWN0IChhbmQgb3ZlcnJpZGRlbikgIjpkbz1eSjoiOyBmaXhlZCBicm9rZW4gY29udGludWF0aW9ucyBpbgorIyB0aGUgOnJzOiBzdHJpbmcsIGluc2VydGVkIHRoZSA8aWNoPiBpbXBsaWVkIGJ5IHRoZSB0ZXJtY2FwIDprbzogc3RyaW5nLiAgTm90ZQorIyB0aGUgOmtvOiBzdHJpbmcgaGFkIDpjbDogaW4gaXQsIHdoaWNoIG1lYW5zIHRoYXQgb25lIG9mIHRoZSBvcmlnaW5hbAorIyA8Y2xlYXI9XEUqPiwgPGtjbHI9XEVZPiBoYWQgdG8gYmUgd3Jvbmc7IHNldCA8a2Nscj1cRSo+IGJlY2F1c2UgdGhhdCdzIHdoYXQKKyMgdGhlIDk1MCBoYXMuICAgRmluYWxseSwgY29ycmVjdGVkIHRoZSA8a2VsPiBzdHJpbmcgdG8gbWF0Y2ggdGhlIDk1MCBhbmQgd2hhdAorIyBrbyBpbXBsaWVzIC0tIGVzcikKKyMgSWYgdGhlIEJTRCB0ZXJtY2FwIGZpbGUgd2FzIHJpZ2h0LCA8Y3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYz4gd291bGQKKyMgYWxzbyB3b3JrLgordHZpOTU1fHRlbGV2aWRlbyA5NTUsCisJT1RicywgbWM1aSwgbXNnckAsCisJaXQjOCwgeG1jQCwKKwlhY3NjPTBfYFJqSGtHbEZtRW5Jb1BxS3NRdE11THZPd054SiwgYmxpbms9XEVHMiwKKwljaXZpcz1cRS4wLCBjbm9ybT1cRS4yLCBjdWQxPV5WLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3Z2aXM9XEUuMSwgZGltPVxFWz01aCwgaW5kQCwgaW52aXM9XEVHMSwKKwlpczI9XEVbPTNsXEVGMVxFZFxFRzBcRVs9NWxcRSVcRWwsIGtjdGFiPVxFMiwga2h0cz1cRTEsCisJa25wPVxFSywga3BwPVxFSiwga3JtaXI9XEVRLCBrdGJjPVxFMywgbWMwPVxFUCwgcm1hY3M9XEUlJSwKKwlybWFtPVxFWz03bCwgcm14b249Xk4sCisJcnMxPVxFREZcRUNcRWdcRXJcRU9cRSdcRShcRXdcRVhcRWUgXDAxN1xFMFBcRTZcMFxFMHBcRTRcMFxFZlxyLAorCXNncjA9XEVHMFxFWz01bCwgc21hY3M9XEUkLCBzbWFtPVxFWz03aCwgc214b249Xk8sCisJdXNlPXR2aTk1MCwKK3R2aTk1NS13fDk1NS13fHRlbGV2aWRlbzk1NSB3LzEzMiBjb2xzLAorCWNvbHMjMTMyLAorCWlzMj1cRVs9M2hcRUYxXEVkXEVHMFxFWz01bFxFJVxFbCwgdXNlPXR2aTk1NSwKKyMgdXNlIGhhbGYtaW50ZW5zaXR5IGFzIG5vcm1hbCBtb2RlLCBmdWxsIGludGVuc2l0eSBhcyA8Ym9sZD4KK3R2aTk1NS1oYnw5NTUtaGJ8dGVsZXZpZGVvOTU1IGhhbGYtYnJpZ2h0LAorCWJvbGQ9XEVbPTVsLCBkaW1ALCBpczI9XEVbPTNsXEVGMVxFZFxFRzBcRVs9NWhcRSVcRWwsCisJc2dyMD1cRUcwXEVbPTVoLCB1c2U9dHZpOTU1LAorIyBGcm9tOiBIdW1iZXJ0byBBcHBsZXRvbiA8YmV0b0Bjcy51dGV4YXMuZWR1PiwgODgwNTIxIFVUIEF1c3RpbgorIyAodHZpOTcwOiByZW1vdmVkICI6c2cjMDoiOyByZW1vdmVkIDxybXNvPj1cRVttLCA8cm11bD49XEVbbTsKKyMgYWRkZWQgPGFtPi88Y3NyPi88aG9tZT4vPGhwYT4vPHZwYT4vPHNtY3VwPi88cm1jdXA+IGZyb20gQlJMLgorIyBBY2NvcmRpbmcgdG8gQlJMIHdlIGNvdWxkIGhhdmUgPHJta3g+PVxFPiwgPHNta3g+PVxFPSBidXQgSSdtIG5vdCBzdXJlIHdoYXQKKyMgaXQgZG9lcyB0byB0aGUgZnVuY3Rpb24ga2V5cy4gIEkgZGVkdWNlZCA8cm1hbT4vPHNtYW0+LgorIyBhbHNvIGFkZGVkIGVtcHR5IDxhY3NjPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZywgIC0tIGVzcikKK3R2aTk3MHx0ZWxldmlkZW8gOTcwLAorCU9UYnMsIE9UcHQsIGFtLCBkYSwgZGIsIG1pciwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPSwgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVsySiwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1YjE9XkgsIGN1ZDE9XEVELCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkZiwKKwljdXUxPVxFTSwgY3Z2aXM9XEVbMVEsIGRjaDE9XEVbUCwgZGwxPVxFW00sIGRzbD1cRWdcRWZcciwKKwllZD1cRVtKLCBlbD1cRVtLLCBmbGFzaD1cRVs1bSQ8MjAwLz5cRVttLCBob21lPVxFW0gsCisJaHBhPVxFWyVpJXAxJWRHLCBodD1eSSwgaWwxPVxFW0wsCisJaXMyPVxFPFxFWz8yMWxcRVsxOWhcRVsxUVxFWzEwbFxFWzdsXEVbSFxFWzJKLAorCWticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEU/YSwga2YyPVxFP2IsIGtmMz1cRT9jLCBrZjQ9XEU/ZCwga2Y1PVxFP2UsIGtmNj1cRT9mLAorCWtmNz1cRT9nLCBrZjg9XEU/aCwga2Y5PVxFP2ksIGtob21lPVxFW0gsIHJpPVxFTSwgcm1hY3M9XEUoQiwKKwlybWFtPVxFWz83aCwgcm1jdXA9LCBybWlyPVxFWzRsLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sIHNtYWNzPVxFKEIsIHNtYW09XEVbPzdsLAorCXNtY3VwPVxFWz8yMGxcRVs/N2hcRVsxUSwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB2cGE9XEVbJWklcDElZGQsCit0dmk5NzAtdmJ8dGVsZXZpZGVvIDk3MCB3aXRoIHZpc3VhbCBiZWxsLAorCWZsYXNoPVxFWz81aFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXEVbPzVsLAorCXVzZT10dmk5NzAsCit0dmk5NzAtMnB8dGVsZXZpZGVvIDk3MCB3aXRoIHVzaW5nIDIgcGFnZXMgb2YgbWVtb3J5LAorCXJtY3VwPVxFW0hcRVtKXEVbViwgc21jdXA9XEVbVVxFWz8yMGxcRVs/N2hcRVsxUSwKKwl1c2U9dHZpOTcwLAorIyBXb3JrcyB3aXRoIHZpIGFuZCByb2d1ZS4gIE5PVEU6IEVzYyB2IHNldHMgYXV0b3dyYXAgb24sIEVzYyB1IHNldHMgODAgY2hhcnMKKyMgcGVyIGxpbmUgKHJhdGhlciB0aGFuIDQwKSwgRXNjIEsgY2hvb3NlcyB0aGUgbm9ybWFsIGNoYXJhY3RlciBzZXQuICBOb3Qgc3VyZQorIyBwYWRkaW5nIGlzIG5lZWRlZCwgYnV0IGFkYXB0ZWQgZnJvbSB0aGUgdHZpOTIwYyB0ZXJtY2FwLiAgVGhlIDxzbXNvPiBhbmQKKyMgPHNtdWw+IHN0cmluZ3MgYXJlIGtsdXR6eSwgYnV0IGF0IGxlYXN0IHVzZSBubyBzY3JlZW4gc3BhY2UuCisjICh0dmlwdDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5La15MbF5SXkw6Ii4gIEkgd2lzaCB3ZSBrbmV3IDxybWFtPiwKKyMgaXRzIGFic2VuY2UgbWVhbnMgPHNtYW0+PVxFdiBpc24ndCBzYWZlIHRvIHVzZS4gLS0gZXNyKQorIyBGcm9tOiBHZW5lIFJvY2hsaW4gPGFybXNpc0BhbWJlci5iZXJrZWxleS5lZHU+IDkvMTkvODQuCisjIFRoZSA8ZWQ+LzxrZjA+LzxrZjE+LzxraG9tZT4vPG1jND4sIGFuZCA8bWM1PiBjYXBzIGFyZSBmcm9tIEJSTCwgd2hpY2ggc2F5czoKKyMgRjEgYW5kIEYyIHNob3VsZCBiZSBwcm9ncmFtbWVkIGFzIF5BIGFuZCBeQjsgcmVxdWlyZWQgZm9yIFVOSUZZLgordHZpcHR8dGVsZXZpZGVvIHBlcnNvbmFsIHRlcm1pbmFsLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNidD1cRUksIGNsZWFyPV5aLCBjdWIxPV5ILCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRsMT1cRVIkPDUqPiwKKwllZD1cRVksIGVsPVxFVCwgaG9tZT1eXiwgaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LAorCWlsMT1cRUUkPDUqPiwgaXMyPVxFdlxFdVxFSywga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjA9XkEsIGtmMT1eQiwga2hvbWU9Xl4sIG1jND1eVCwgbWM1PV5SLAorCXJtc289XEVGLCBybXVsPVxFRiwgc21zbz1cRUcxQEFcRUgsIHNtdWw9XEVHMUJAXEVILAorIyBGcm9tOiBOYXRoYW4gUGV0ZXJzb24gPG5hdGhhbkBzY28uY29tPiwgMDMgU2VwIDE5OTYKK3R2aTkwNjV8dGVsZXZpZGVvIDkwNjUsCisJYW0sIGJ3LCBjaHRzLCBocywgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGgjMSwgbGluZXMjMjUsIGxtIzAsIGx3IzksIG1hIzQsIG5sYWIjOCwgdnQjMCwKKwl3bnVtIzAsIHdzbCMzMCwKKwlhY3NjPSdyMF9qaGtnbGZtZW5pb3Bxa3NxdG11bHZvd254aiwgYmVsPV5HLAorCWJsaW5rPVxFRzIsIGJvbGQ9XEVHXCwsIGNidD1cRUksIGNpdmlzPVxFLjAsIGNsZWFyPV5aLAorCWNub3JtPVxFLjMsIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsCisJY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eViwgY3VmPVxFWyVwMSVkQywgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XkssIGN2dmlzPVxFLjIsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVXLCBkaW09XEVHcCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVIsIGRzbD1cRV8zMFxyLCBlY2g9XEVbJXAxJWRALCBlZD1cRVksCisJZWw9XEVULCBmbGFzaD1cRWIkPDE1PlxFZCwgZnNsPV5NLCBob21lPV5eLCBodD1eSSwgaHRzPVxFMSwKKwlpY2g9XEVbJXAxJWRALCBpZj0vdXNyL3NoYXJlL3RhYnNldC9zdGRjcnQsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVFLCBpbmQ9XkosIGluZG49XEVbJXAxJWRTLCBpbnZpcz1cRUcxLAorCWlwPSQ8Mz4sCisJaXMxPVxFIlxFJVxFJ1xFKFxFR0BcRU9cRVhcRVs9NWxcRVs9NmxcRVs9N2hcRWRcRXIsCisJaXMyPVxFRjJcRUcwXEVcXEwsIGlzMz1cRTxcRVs9NGxcRVs9OGgsIGtIT009XEVcc1xzXHMsCisJa2JzPV5ILCBrY2J0PVxFSSwga2N1YjE9XkgsIGtjdWQxPV5WLCBrY3VmMT1eTCwga2N1dTE9XkssCisJa2RjaDE9XEVXLCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTE9XkFKXHIsIGtmMTI9XkFLXHIsCisJa2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsCisJa2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sIGxsPVxFWzI1OzFILAorCW1jMD1cRVswOzBpLCBtYzQ9XEVhLCBtYzU9XEVgLCBuZWw9Xk1eSiwKKwlwZmtleT1cRXwlcDElezQ4fSUrJWMzJXAyJXNcMDMxLAorCXBmbG9jPVxFfCVwMSV7NDh9JSslYzIlcDIlc1wwMzEsCisJcGZ4PVxFfCVwMSV7NDh9JSslYzElcDIlc1wwMzEsCisJcGxuPVxFXyVwMSV7NjN9JSslYyVwMiVzXHIsIHByb3Q9XEUmLAorCXJlcD1cRVslcDIlZGIlcDElYywgcmV2PVxFRzQsCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LCByaT1cRWosIHJpbj1cRVslcDElZFQsCisJcm1hY3M9XEUlJSwgcm1hbT1cRVs9N2wsIHJtY3VwPVxFLjNcRXJcRVsxOzI1clxFWzI1OzBILAorCXJtZGM9XDAsIHJtaXI9XEVyLCBybWxuPVxFWzQ7MXYsIHJtc289XEVHMCwgcm11bD1cRUcwLAorCXJteG9uPV5OLCByczE9XEVDXEVERlxFWzA7MHZcRVs4OzF2XEVbPTY1bCwKKwlyczI9XEUuYlxFWzEwOzIwdlxFWzE0OzF2XEVbMzswdlxFWzc7MHZcRVs9MTEuaFxFWz0xMi5oXEVbPTEzLmhcRVs9MTQuaFxFWz0xNWxcRVs9MjBoXEVbPTYwbFxFWz02MWhcRVs9OWxcRVs9MTBsXEVbPTIxbFxFWz0yM2xcRVs9M2xcRV80MFxFXzUwXEVuXEV3XEVlIFxFeDBcMFwwXEV4MVwwXDBcRXgyXDBcMFxFeDNcMFwwXEV4NFwwXDBcRTEsCisJcnMzPVxFWz0xOWhcRS4zXEU5XEUwT1wwXDBcMFwwXDBcRTBvXDBcMFwwXDBcMFxFMEpcMTc3XDBcMFwwXDAsCisJc2dyPVxFRzAlPyVwMSV0XEVHdCU7JT8lcDIldFxFRzglOyU/JXAzJXRcRUc0JTslPyVwNCV0XEVHMiU7JT8lcDUldFxFR3AlOyU/JXA2JXRcRUdcLCU7JT8lcDcldFxFRzElOyU/JXA5JXRcRSQlZVxFJSUlOywKKwlzZ3IwPVxFRzAsIHNtYWNzPVxFJCwgc21hbT1cRT03aCwgc21jdXA9XEUuMiwgc21kYz1cRXIsCisJc21pcj1cRXEsIHNtbG49XEVbNDsydiwgc21zbz1cRUd0LCBzbXVsPVxFRzgsIHNteG9uPV5PLAorCXRiYz1cRTMsIHRzbD1cRVs0OzF2XEVfMzAsIHVjPVxFRzhcRUcwLAorCisjIyMjIFZpc3VhbCAodmkpCisjCisjIEluIFNlcHRlbWJlciAxOTkzLCBWaXN1YWwgVGVjaG5vbG9neSBvZiBXZXN0Ym9ybywgTWFzc2FjaHVzZXR0cywKKyMgbWVyZ2VkIHdpdGggV2hpdGUgUGluZSBTb2Z0d2FyZSBvZiBOYXNodWEsIE5ldyBIYW1wc2hpcmUuCisjCisjIFdoaXRlIFBpbmUgU29mdHdhcmUgbWF5IGJlIGNvbnRhY3RlZCBhdCArMSA2MDMvODg2LTkwNTAuCisjIE9yIHZpc2l0IFdoaXRlIFBpbmUgb24gdGhlIFdvcmxkIFdpZGUgV2ViIGF0IFVSTCBodHRwOi8vd3d3LndwaW5lLmNvbS4KKyMKKworIyBWaXN1YWwgNTAgZnJvbSBCZWF1IFNoZWtpdGEsIEJUTC1XaGlwcGFueSA8d2h1eGxiIWVqcz4KKyMgUmVjZW50bHkgSSBoYWNrZWQgdG9nZXRoZXIgdGhlIGZvbGxvd2luZyB0ZXJtY2FwIGZvciBWaXN1YWwKKyMgVGVjaG5vbG9neSdzIFZpc3VhbCA1MCB0ZXJtaW5hbC4gSXQncyBhIHNsaWdodCBtb2RpZmljYXRpb24gb2YKKyMgdGhlIHZ0NTIgdGVybWNhcC4KKyMgSXQncyBpbnRlbmRlZCB0byBydW4gd2hlbiB0aGUgVmlzdWFsIDUwIGlzIGluIHZ0NTIgZW11bGF0aW9uIG1vZGUKKyMgKEkga25vdyB3aGF0IHlvdSdyZSB0aGlua2luZzsgaWYgaXQncyBlbXVsYXRpbmcgYSB2dDUyLCB0aGVuIHdoeQorIyBhbm90aGVyIHRlcm1jYXA/IFdlbGwsIGl0IHR1cm5zIG91dCB0aGF0IHRoZSBWaXN1YWwgNTAgY2FuIGhhbmRsZQorIyA8ZGwxPiBhbmQgZGIoPykgYW1vbmcgb3RoZXIgdGhpbmdzLCB3aGljaCB0aGUgdnQ1MiBjYW4ndCkKKyMgVGhlIHRlcm1jYXAgd29ya3MgT0sgZm9yIHRoZSBtb3N0IHBhcnQuIFRoZSBvbmx5IHByb2JsZW0gaXMgb24KKyMgY2hhcmFjdGVyIGluc2VydHMuIFRoZSB3aG9sZSBsaW5lIGdldHMgcGFpbmZ1bGx5IHJlZHJhd24gZm9yIGVhY2gKKyMgY2hhcmFjdGVyIHR5cGVkLiBBbnkgc3VnZ2VzdGlvbnM/CisjIEJlYXUncyBlbnRyeSBpcyBjb21iaW5lZCB3aXRoIHRoZSB2aTUwIGVudHJ5IGZyb20gVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4uCisjIE5vdGUgZXNwZWNpYWxseSB0aGUgPGlsMT4gZnVuY3Rpb24uICA8a2Y0Pi08a2Y2PiBhcmUgcmVhbGx5IGw0LWw2IGluCisjIGRpc2d1aXNlOyA8a2Y3Pi08a2Y5PiBhcmUgcmVhbGx5IGwxLWwzLgordmk1MHx2aXN1YWwgNTAsCisJT1RicywgT1RwdCwgYW0sIGRhLCBkYiwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlPVG5sPV5KLCBiZWw9XkcsIGNidD1cRXokPDQvPiwgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPVxFQiwgY3VmMT1cRUMsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1cRUEsIGRsMT1cRU0kPDMqLz4sIGVkPVxFSiwgZWw9XEVLJDwxNi8+LCBob21lPVxFSCwKKwlodD1eSSwgaWwxPVxFTCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBrZjE9XEVQLCBrZjI9XEVRLCBrZjM9XEVSLCBrZjQ9XEVWLAorCWtmNT1cRUUsIGtmNj1cRV0sIGtmNz1cRUwsIGtmOD1cRXYsIGtmOT1cRU0sIGtob21lPVxFSCwKKwluZWw9Xk1eSiwgcmk9XEVJLCBybXNvPVxFVCwgcm11bD1cRVcsIHNtc289XEVVLCBzbXVsPVxFUywKKyMgdGhpcyBvbmUgd2FzIEJTRCAmIFNDTydzIHZpNTAKK3ZpNTBhZG18dmlzdWFsIDUwIGluIGFkbTNhIG1vZGUsCisJYW0sIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGwxPVxFTSwKKwllZD1cRWssIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBpbDE9XEVMLCBpbmQ9XkosIGticz1eSCwKKwlrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFSCwKKwlybXNvPVxFVCwgc21zbz1cRVUsCisjIEZyb206IEplZmYgU2llZ2FsIDxqYnNAcXVpb3RpeC5jb20+Cit2aTU1fFZpc3VhbCA1NSwKKwlPVGJzLCBhbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVxFdiwgY3NyPVxFXyVwMSV7NjV9JSslYyVwMiV7NjV9JSslYywgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPVxFQSwgZGNoMT1cRXcsIGRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksCisJaWwxPVxFTCwgaXMyPVxFdlxFX0FYXEViXEVXXEU5UFxFVCwga2JzPV5ILCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwgcmk9XEVJLCBybWlyPVxFYiwgcm1zbz1cRVQsCisJc21pcj1cRWEsIHNtc289XEVVLAorCisjIFZpc3VhbCAyMDAgZnJvbSBCUkwKKyMgVGhlIGZvbGxvd2luZyBzd2l0Y2ggc2V0dGluZ3MgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb246CisjCUZVTExfRFVQTEVYCQlTQ1JPTEwJCQlDUgorIwlBVVRPX05FV19MSU5FX09OCVZJU1VBTF8yMDBfRU1VTEFUSU9OX01PREUKKyMgT3RoZXIgc3dpdGNoZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHMuCisjIENoYXJhY3RlciBpbnNlcnRpb24gaXMga2x1ZGdlZCBpbiBvcmRlciB0byBnZXQgYXJvdW5kIHRoZSAiYmVlcCIgbWlzZmVhdHVyZS4KKyMgKFRoaXMgY2FwIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSA8c21pcj4vPHJtaXI+IGlzIG1vcmUgZWZmaWNpZW50IC0tIGVzcikKKyMgU3VwcG9zZWRseSAiNCoiIGRlbGF5cyBzaG91bGQgYmUgdXNlZCBmb3IgPGlsMT4sIDxlZD4sIDxjbGVhcj4sIDxkY2gxPiwKKyMgYW5kIDxkbDE+IHN0cmluZ3MsIGJ1dCB3ZSBzZWVtIHRvIGdldCBhbG9uZyBmaW5lIHdpdGhvdXQgdGhlbS4KK3ZpMjAwfHZpc3VhbCAyMDAsCisJT1RicywgT1RwdCwgYW0sIG1pciwgbXNnciwKKwlPVGtuIzEwLCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPSwgYmVsPV5HLCBjYnQ9XEV6LCBjbGVhcj1cRXYsIGNub3JtPVxFYywgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1cRUMsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1cRUEsIGN2dmlzPVxFZCwgZGNoMT1cRU8sIGRpbT1cRTQsIGRsMT1cRU0sIGVkPVxFeSwKKwllbD1cRXgsIGhvbWU9XEVILCBodD1eSSwgaHRzPVxFMSwgaWwxPVxFTCwgaW5kPV5KLCBpbnZpcz1cRWEsCisJa2JzPV5ILCBrY2xyPVxFdiwga2N0YWI9XEUyLCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2RjaDE9XEVPLCBrZGwxPVxFTSwga2VkPVxFSiwga2VsPVxFdCwga2YwPVxFP3AsCisJa2YxPVxFP3EsIGtmMj1cRT9yLCBrZjM9XEU/cywga2Y0PVxFP3QsIGtmNT1cRT91LCBrZjY9XEU/diwKKwlrZjc9XEU/dywga2Y4PVxFP3gsIGtmOT1cRT95LCBraG9tZT1cRUgsIGtodHM9XEUxLCBraWNoMT1cRWksCisJa2lsMT1cRUwsIGtybWlyPVxFaiwgbWMwPVxFSFxFXSwgbWM0PVxFWCwgbWM1PVxFVywgcmk9XEVJLAorCXJtYWNzPVxFRywgcm1reD1cRT4sIHJtc289XEUzLAorCXJzMT1cRTNcRWJcRWpcRVxFbFxFR1xFY1xFa1xFWCwgc2dyMD1cRTNcRWIsIHNtYWNzPVxFRiwKKwlzbWt4PVxFPSwgc21zbz1cRTQsIHRiYz1cRWcsCisjIFRoZSBvbGRlciBWaXN1YWxzIGRpZG4ndCBjb21lIHdpdGggZnVuY3Rpb24ga2V5cy4gVGhpcyBlbnRyeSB1c2VzCisjIDxzbWt4PiBhbmQgPHJta3g+IHNvIHRoYXQgdGhlIGtleXBhZCBrZXlzIGNhbiBiZSB1c2VkIGFzIGZ1bmN0aW9uIGtleXMuCisjIElmIHlvdXIgdmVyc2lvbiBvZiB2aSBkb2Vzbid0IHN1cHBvcnQgZnVuY3Rpb24ga2V5cyB5b3UgbWF5IHdhbnQKKyMgdG8gdXNlIHZpMjAwLWYuCit2aTIwMC1mfHZpc3VhbCAyMDAgbm8gZnVuY3Rpb24ga2V5cywKKwlpczI9XEUzXEViXEVqXEVcXFxFbFxFR1xFZFxFaywga2YwPVxFP3AsIGtmMT1cRT9xLAorCWtmMj1cRT9yLCBrZjM9XEU/cywga2Y0PVxFP3QsIGtmNT1cRT91LCBrZjY9XEU/diwga2Y3PVxFP3csCisJa2Y4PVxFP3gsIGtmOT1cRT95LCBybWt4PVxFPiwgcm1zb0AsIHNta3g9XEU9LCBzbXNvQCwKKwl1c2U9dmkyMDAsCit2aTIwMC1ydnx2aXN1YWwgMjAwIHJldmVyc2UgdmlkZW8sCisJY25vcm1ALCBjdnZpc0AsIHJpQCwgcm1zbz1cRTMsIHNtc289XEU0LCB1c2U9dmkyMDAsCisKKyMgdGhlIGZ1bmN0aW9uIGtleXMgYXJlIHByb2dyYW1tYWJsZSBidXQgd2UgZG9uJ3QgcmVwcm9ncmFtIHRoZW0gdG8gdGhlaXIKKyMgZGVmYXVsdCB2YWx1ZXMgd2l0aCA8aXMyPiBiZWNhdXNlIHByb2dyYW1taW5nIHRoZW0gaXMgdmVyeSB2ZXJib3NlLiBtYXliZQorIyBhbiBpbml0aWFsaXphdGlvbiBmaWxlIHNob3VsZCBiZSBtYWRlIGZvciB0aGUgMzAwIGFuZCB0aGV5IGNvdWxkIGJlIHN0dWNrCisjIGluIGl0LgorIyAodmkzMDA6IGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gaW5pdCBzdHJpbmcgLS0gZXNyKQordmkzMDB8dmlzdWFsIDMwMCBhbnNpIHgzLjY0LAorCWFtLCBidywgbWlyLCB4ZW5sLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWRjaDE9XEVbUCQ8NDA+LCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwKKwlpbDE9XEVbTCwgaW5kPV5KLAorCWlzMj1cRVs3c1xFWzI7Mzs0OzIwOz81Oz82bFxFWzEyOz83aFxFWzFRXEVbMDsxKERcRVs4cywKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtmMT1cRV9BXEVcXCwga2YyPVxFX0JcRVxcLCBrZjM9XEVfQ1xFXFwsIGtmND1cRV9EXEVcXCwKKwlrZjU9XEVfRVxFXFwsIGtmNj1cRV9GXEVcXCwga2Y3PVxFX0dcRVxcLCBrZjg9XEVfSFxFXFwsCisJa2Y5PVxFX0lcRVxcLCBraG9tZT1cRVtILCByaT1cRU0sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNtc289XEVbMW0sIHNtdWw9XEVbNG0sCisjIHNvbWUgb2YgdGhlIHZpMzAwcyBoYXZlIG9sZGVyIGZpcm13YXJlIHRoYXQgaGFzIHRoZSBjb21tYW5kCisjIHNlcXVlbmNlIGZvciBzZXR0aW5nIGVkaXRpbmcgZXh0ZW50IHJldmVyc2VkLgordmkzMDAtb2xkfHZpc3VhbCAzMDAgd2l0aCBvbGQgZmlybXdhcmUgKHNldCBlZGl0IGV4dGVudCByZXZlcnNlZCksCisJaXMyPVxFWzdzXEVbMjszOzQ7MjA7PzU7PzZsXEVbMTI7PzdoXEVbMlFcRVswOzEoRFxFWzhzLAorCXVzZT12aTMwMCwKKworIyBWaXN1YWwgNTAwIHByb3RvdHlwZSBlbnRyeSBmcm9tIFVuaXZlcnNpdHkgb2YgV2lzY29uc2luLgorIyBUaGUgYmVzdCBwbGFjZSB0byBsb29rIGZvciB0aGUgZXNjYXBlIHNlcXVlbmNlcyBpcyBwYWdlIEExLTEgb2YgdGhlCisjIFZpc3VhbCA1MDAgbWFudWFsLiAgVGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGdpdmVuIGhlcmUgbWF5IGJlCisjIG92ZXJraWxsLCBidXQgaXQgZG9lcyBsZWF2ZSBvdXQgc29tZSBvZiB0aGUgaW5pdGlhbGl6YXRpb25zIHdoaWNoIGNhbgorIyBiZSBkb25lIHdpdGggdGhlIG1lbnVzIGluIHNldC11cCBtb2RlLgorIyBUaGUgOnhwOiBsaW5lIGJlbG93IGlzIHNvIHRoYXQgZW1hY3MgY2FuIHVuZGVyc3RhbmQgdGhlIHBhZGRpbmcgcmVxdWlyZW1lbnRzCisjIG9mIHRoaXMgc2xvdyB0ZXJtaW5hbC4gIDp4cDogaXMgMTAgdGltZSB0aGUgcGFkZGluZyBmYWN0b3IuCisjICh2aTUwMDogcmVtb3ZlZCB1bmtub3duIDp4cCM0OiB0ZXJtY2FwOworIyBhbHNvIGFkZGVkIGVtcHR5IDxhY3NjPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZyAtLSBlc3IpCit2aTUwMHx2aXN1YWwgNTAwLAorCWFtLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzMsCisJYWNzYz0sIGNidD1cRXokPDQvPiwgY2xlYXI9XEV2JDw2Ki8+LCBjcj1eTSwKKwljc3I9XEUoJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdWIxPV5ILCBjdWQxPVxFQiwKKwljdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsCisJZGNoMT1cRU8kPDMqLz4sIGRsMT1cRU0kPDMqLz4sIGVkPVxFeSQ8MyovPiwKKwllbD1cRXgkPDE2Lz4sIGhvbWU9XEVILCBodD1cMDExJDw4Lz4sIGlsMT1cRUxcRXgkPDMqLz4sCisJaW5kPV5KLAorCWlzMj1cRTNcRVwwMDFcRVwwMDdcRVwwMDNcRWtcRUdcRWRcRVhcRWxcRT5cRWJcRVxcLAorCWticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLAorCWtob21lPVxFSCwgbmVsPV5NXkosIHJtYWNzPV5PLCBybWlyPVxFaiwgcm1zbz1cRV5HLAorCXJtdWw9XEVeQywgc21hY3M9Xk4sIHNtaXI9XEVpLCBzbXNvPVxFXkgsIHNtdWw9XEVeRCwKKworIyBUaGUgdmlzdWFsIDU1MCBpcyBhIHZpc3VhbCAzMDAgd2l0aCB0ZWt0cm9uaXggZ3JhcGhpY3MsCisjIGFuZCB3aXRoIDMzIGxpbmVzLiBjbGVhciBzY3JlZW4gaXMgbW9kaWZpZWQgaGVyZSB0bworIyBhbHNvIGNsZWFyIHRoZSBncmFwaGljcy4KK3ZpNTUwfHZpc3VhbCA1NTAgYW5zaSB4My42NCwKKwlsaW5lcyMzMywKKwljbGVhcj1cMDMwXEVbSFxFWzJKLCB1c2U9dmkzMDAsCisKK3ZpNjAzfHZpc3VhbDYwM3x2aXN1YWwgNjAzLAorCWhzLCBtaXIsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZHNsPVxFUDI7MX5cRVxcLCBlZD1cRVtKLCBlbD1cRVtLLCBmc2w9XEVcXCwgaWwxPVxFW0wsCisJaW5kPVxFRCwgaXMxPVxFPlxFWz8zbFxFWz80bFxFWz83aFxFWz84aFxFWzE7MjRyLAorCXJldj1cRVs3bSwgcmk9XEVNLCBybWlyPVxFWzRsLCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJc2dyMD1cRVttLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0c2w9XEVQMn4sCisJdXNlPXZ0MTAwLAorCisjIyMjIFd5c2UgKHd5KQorIworIwlXeXNlIFRlY2hub2xvZ3kKKyMJMzQ3MSBOb3J0aCBGaXJzdCBTdHJlZXQKKyMJU2FuIEpvc2UsIENBIDk1MTM0CisjCVZveDogKDQwOCktNDczLTEyMDAKKyMJRmF4OiAoNDA4KSA0NzMtMTIyMgorIwlXZWI6IGh0dHA6Ly93d3cud3lzZS5jb20KKyMKKyMgV3lzZSBzYWxlcyBjYW4gYmUgcmVhY2hlZCBieSBwaG9uZSBhdCAxLTgwMC1HRVQtV1lTRS4gIFRlY2ggc3VwcG9ydCBpcyBhdAorIyAoODAwKS04MDAtV1lTRSAob3B0aW9uIDUgZ2V0cyB5b3UgYSBodW1hbikuICBUaGVyZSdzIGEgV2ViIHBhZ2UgYXQgdGhlCisjIG9idmlvdXMgYWRkcmVzcywgPGh0dHA6Ly93d3cud3lzZS5jb20+LiAgVGhleSBrZWVwIHRlcm1pbmZvIGVudHJpZXMgYXQKKyMgPGh0dHA6Ly93d3cud3lzZS5jby51ay9zdXBwb3J0L2FwcG5vdGVzL2lkeGFwcG50Lmh0bT4uCisjCisjIFd5c2UgYm91Z2h0IG91dCBMaW5rIFRlY2hub2xvZ3ksIEluYy4gaW4gMTk5MCBhbmQgY2xvc2VkIGl0IGRvd24gaW4gMTk5NS4KKyMgVGhleSBub3cgb3duIHRoZSBRdW1lIGFuZCBBbWRlayBicmFuZHMsIHRvby4gIFNvIHRoZXNlIGFyZSB0aGUgcGVvcGxlIHRvCisjIHRhbGsgd2l0aCBhYm91dCBhbGwgTGluaywgUXVtZSwgYW5kIEFtZGVrIHRlcm1pbmFscy4KKyMKKyMgVGhlc2UgZW50cmllcyBpbmNsdWRlIGEgZmV3IHNtYWxsIGZpeGVzLgorIyBJIGNhbmNlbGVkIHRoZSBiZWwgY2FwYWNpdGllcyBpbiB0aGUgdmIgZW50cmllcy4KKyMgSSBtYWRlIHR3byB0cml2aWFsIHN5bnRheCBmaXhlcyBpbiB0aGUgd3lzZTMwIGVudHJ5LgorIyBJIG1hZGUgc29tZSBlbnRyaWVzIHJlbGF0aXZlIHRvIGFkbStzZ3IuCisjCisjCisjIE5vdGU6IFRoZSB3eXNlNzUsIHd5c2U4NSwgYW5kIHd5c2U5OSBoYXZlIGJlZW4gZGlzY29udGludWVkLgorCisjCSAgIEFsdGhvdWdoIHRoZSBXeXNlIDMwIGNhbiBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgYXR0cmlidXRlCisjCWl0IHJlcXVpcmVzIG1hZ2ljIGNvb2tpZXMgdG8gZG8gc28uICBNYW55IGFwcGxpY2F0aW9ucyBkbyBub3QKKyMJZnVuY3Rpb24gd2VsbCB3aXRoIG1hZ2ljIGNvb2tpZXMuICBUaGUgZm9sbG93aW5nIHRlcm1pbmZvIHVzZXMKKyMJdGhlIHByb3RlY3QgbW9kZSB0byBzdXBwb3J0IG9uZSBhdHRyaWJ1dGUgKGRpbSkgd2l0aG91dCBjb29raWVzLgorIwlJZiBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZSBpcyBuZWVkZWQgdGhlbiB0aGUgd3kzMC1tYyB0ZXJtaW5mbworIwlzaG91bGQgYmUgdXNlZC4KKyMKK3d5MzB8d3lzZTMwfFd5c2UgMzAsCisJYW0sIGJ3LCBocywgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgbGgjMSwgbGluZXMjMjQsIGx3IzgsIG1hIzEsIG5sYWIjOCwgd3NsIzQ1LAorCWFjc2M9MHdhX2hbanVrc2xybXFueHF6dHR1eXZdd3B4diwgYmVsPV5HLCBjYnQ9XEVJLAorCWNpdmlzPVxFYDAsIGNsZWFyPVxFKyQ8ODA+LCBjbm9ybT1cRWAxLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPV5MLCBjdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XkssIGRjaDE9XEVXJDwxMD4sIGRpbT1cRWA3XEUpLCBkbDE9XEVSJDwxPiwKKwlkc2w9XEVGXHIsIGVkPVxFWSQ8ODA+LCBlbD1cRVQsIGZsYXNoPVxFYDgkPDEwMC8+XEVgOSwKKwlmc2w9Xk0sIGhvbWU9Xl4sIGh0PVwwMTEkPDE+LCBodHM9XEUxLCBpbDE9XEVFJDwyPiwKKwlpbmQ9XG4kPDI+LCBpcD0kPDI+LCBpczI9XEUnXEUoXEVcXjNcRWA5XDAxNlwwMjQsCisJa0hPTT1cRXssIGticz1eSCwga2NidD1cRUksIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsCisJa2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsIGtlZD1cRVksIGtlbD1cRVQsIGtlbnQ9XEU3LAorCWtmMT1eQUBcciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLAorCWtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtob21lPV5eLCBraWNoMT1cRVEsCisJa2lsMT1cRUUsIGtucD1cRUssIGtwcD1cRUosIGtycGw9XEVyLCBsbD1eXl5LLCBtYzA9XEVQLCBtYzQ9XlQsCisJbWM1PV5YLCBuZWw9Xk1eSiwgcGZ4PVxFeiVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwbG49XEV6JXAxJXs0N30lKyVjJXAyJXNcciwgcHJvdD1cRWA3XEUpLCByaT1cRWokPDM+LAorCXJtYWNzPVxFSF5DLCBybWlyPVxFciwgcm1sbj1cRUExMSwgcm1zbz1cRSgsCisJc2dyPSU/JXAxJXA1JXA4JXwlfCV0XEVgN1xFKSVlXEUoJTslPyVwOSV0XEVIXDAwMiVlXEVIXDAwMyU7LAorCXNncjA9XEUoXEVIXDAwMywgc21hY3M9XEVIXkIsIHNtaXI9XEVxLCBzbWxuPVxFQTEwLAorCXNtc289XEVgN1xFKSwgdGJjPVxFMCwgdHNsPVxFRiwKKyMKKyMJVGhpcyB0ZXJtaW5hbCBkZXNjcmlwdGlvbiB1c2VzIHRoZSBub24taGlkZGVuIGF0dHJpYnV0ZSBtb2RlCisjCSh3aXRoIG1hZ2ljIGNvb2tpZSkuCisjCisjICh3eTMwLW1jOiBhZGRlZCA8c21jdXA+IHRvIHN1cHByZXNzIHRpYyB3YXJuaW5nIC0tZXNyKQord3kzMC1tY3x3eXNlMzAtbWN8d3lzZSAzMCB3aXRoIG1hZ2ljIGNvb2tpZXMsCisJbXNnckAsCisJbWFALCB4bWMjMSwKKwlibGluaz1cRUcyLCBkaW09XEVHcCwgcHJvdD1cRUcwXEUpLCBybWFjcz1cRUcwXEVIXDAwMywKKwlybWN1cD1cRUcwLCBybXNvPVxFRzAsCisJc2dyPVxFRyV7NDh9JT8lcDIlcDYlfCV0JXs4fSV8JTslPyVwMSVwMyV8JXA2JXwldCV7NH0lfCU7JT8lcDQldCV7Mn0lfCU7JT8lcDElcDUlfCV0JXs2NH0lfCU7JT8lcDcldCV7MX0lfCU7JWMlPyVwOCV0XEUpJWVcRSglOyU/JXA5JXRcRUhcMDAyJWVcRUhcMDAzJTssCisJc2dyMD1cRUcwXEUoXEVIXDAwMywgc21hY3M9XEVHMFxFSFwwMDIsIHNtY3VwPSwKKwlzbXNvPVxFRzQsIHVzZT13eTMwLCB1c2U9YWRtK3NnciwKKyMJVGhlIG1hbmRhdG9yeSBwYXVzZSB1c2VkIGJ5IDxmbGFzaD4gZG9lcyBub3Qgd29yayB3aXRoCisjCW9sZGVyIHZlcnNpb25zIG9mIHRlcm1pbmZvLiAgSWYgeW91IHNlZSB0aGlzIGVmZmVjdCB0aGVuCisjCXVuc2V0IHhvbiBhbmQgZGVsZXRlIHRoZSAvIGZyb20gdGhlIGRlbGF5LgorIwlpLmUuIGNoYW5nZSAkPDEwMC8+IHRvICQ8MTAwPgord3kzMC12Ynx3eXNlMzAtdmJ8d3lzZSAzMCB2aXNpYmxlIGJlbGwsCisJYmVsQCwgdXNlPXd5MzAsCisjCisjCSAgIFRoZSBXeXNlIDUwIGNhbiBzdXBwb3J0IG9uZSBhdHRyaWJ1dGUgKGUuZy4gRGltLCBJbnZlcnNlLAorIwlOb3JtYWwpIHdpdGhvdXQgbWFnaWMgY29va2llcyBieSB1c2luZyB0aGUgcHJvdGVjdCBtb2RlLgorIwlUaGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIHVzZXMgdGhpcyBmZWF0dXJlLCBidXQgd2hlbiBtb3JlCisjCXRoYW4gb25lIGF0dHJpYnV0ZSBpcyBwdXQgb24gdGhlIHNjcmVlbiBhdCBvbmNlLCBhbGwgYXR0cmlidXRlcworIwl3aWxsIGJlIGNoYW5nZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGxhc3QgYXR0cmlidXRlIGdpdmVuLgorIwkgICBUaGUgV3lzZSA1MCBjYW4gc3VwcG9ydCBtb3JlIGF0dHJpYnV0ZXMgd2hlbiB1c2VkIHdpdGggbWFnaWMKKyMJY29va2llcy4gIFRoZSB3eTUwLW1jIHRlcm1pbmFsIGRlc2NyaXB0aW9uIHVzZXMgbWFnaWMgY29va2llcworIwl0byBjb3JyZWN0bHkgaGFuZGxlIG11bHRpcGxlIGF0dHJpYnV0ZXMgb24gYSBzY3JlZW4uCisjCit3eTUwfHd5c2U1MHxXeXNlIDUwLAorCWFtLCBidywgaHMsIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGxoIzEsIGxpbmVzIzI0LCBsdyM4LCBtYSMxLCBubGFiIzgsIHdzbCM0NSwKKwlhY3NjPTB3YV9oW2p1a3Nscm1xbnhxenR0dXl2XXdweHYsIGJlbD1eRywgY2J0PVxFSSwKKwljaXZpcz1cRWAwLCBjbGVhcj1cRSskPDIwPiwgY25vcm09XEVgMSwgY3I9Xk0sIGN1YjE9XkgsCisJY3VkMT1eSiwgY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPV5LLCBkY2gxPVxFVyQ8MT4sIGRpbT1cRWA3XEUpLCBkbDE9XEVSLCBkc2w9XEVGXHIsCisJZWQ9XEVZJDwyMD4sIGVsPVxFVCwgZmxhc2g9XEVgOCQ8MTAwLz5cRWA5LCBmc2w9Xk0sCisJaG9tZT1eXiwgaHQ9XkksIGh0cz1cRTEsIGlsMT1cRUUsIGluZD1cbiQ8Mj4sIGlwPSQ8MT4sCisJaXMxPVxFYFw6XEVgOSQ8MzA+LCBpczI9XDAxNlwwMjRcRSdcRSgsIGtIT009XEV7LCBrYnM9XkgsCisJa2NidD1cRUksIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cRVcsCisJa2RsMT1cRVIsIGtlZD1cRVksIGtlbD1cRVQsIGtlbnQ9XEU3LCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsCisJa2YxMT1eQUpcciwga2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwKKwlrZjE2PV5BT1xyLCBrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsCisJa2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwKKwlraWNoMT1cRVEsIGtpbDE9XEVFLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwga3JwbD1cRXIsCisJbGw9Xl5eSywgbWMwPVxFUCwgbWM0PV5ULCBtYzU9XlgsIG5lbD1eTV5KLAorCXBmeD1cRXolcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGxuPVxFeiVwMSV7NDd9JSslYyVwMiVzXHIsIHByb3Q9XEVgN1xFKSwgcmV2PVxFYDZcRSksCisJcmk9XEVqLCBybWFjcz1cRUheQywgcm1pcj1cRXIsIHJtbG49XEVBMTEsIHJtc289XEUoLAorCXNncj0lPyVwMSVwMyV8JXRcRWA2XEUpJWUlcDUlcDglfCV0XEVgN1xFKSVlXEUoJTslPyVwOSV0XEVIXDAwMiVlXEVIXDAwMyU7LAorCXNncjA9XEUoXEVIXDAwMywgc21hY3M9XEVIXkIsIHNtaXI9XEVxLCBzbWxuPVxFQTEwLAorCXNtc289XEVgNlxFKSwgdGJjPVxFMCwgdHNsPVxFRiwKKyMKKyMJVGhpcyB0ZXJtaW5hbCBkZXNjcmlwdGlvbiB1c2VzIHRoZSBub24taGlkZGVuIGF0dHJpYnV0ZSBtb2RlCisjCSh3aXRoIG1hZ2ljIGNvb2tpZSkuCisjCisjCVRoZSBtYW5kYXRvcnkgcGF1c2UgdXNlZCBieSBmbGFzaCBkb2VzIG5vdCB3b3JrIHdpdGggc29tZQorIwlvbGRlciB2ZXJzaW9ucyBvZiB0ZXJtaW5mby4gIElmIHlvdSBzZWUgdGhpcyBlZmZlY3QgdGhlbgorIwl1bnNldCA8eG9uPiBhbmQgZGVsZXRlIHRoZSAvIGZyb20gdGhlIGRlbGF5LgorIwlpLmUuIGNoYW5nZSAkPDEwMC8+IHRvICQ8MTAwPgorIyAod3k1MC1tYzogYWRkZWQgPHNtY3VwPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZyAtLWVzcikKK3d5NTAtbWN8d3lzZTUwLW1jfHd5c2UgNTAgd2l0aCBtYWdpYyBjb29raWVzLAorCW1zZ3JALAorCW1hQCwgeG1jIzEsCisJYmxpbms9XEVHMiwgZGltPVxFR3AsIHByb3Q9XEVHMFxFKSwgcmV2PVxFRzQsCisJcm1hY3M9XEVHMFxFSFwwMDMsIHJtY3VwPVxFRzAsIHJtc289XEVHMCwKKwlzZ3I9XEVHJXs0OH0lPyVwMiVwNiV8JXQlezh9JXwlOyU/JXAxJXAzJXwlcDYlfCV0JXs0fSV8JTslPyVwNCV0JXsyfSV8JTslPyVwMSVwNSV8JXQlezY0fSV8JTslPyVwNyV0JXsxfSV8JTslYyU/JXA4JXRcRSklZVxFKCU7JT8lcDkldFxFSFwwMDIlZVxFSFwwMDMlOywKKwlzZ3IwPVxFRzBcRShcRUhcMDAzLCBzbWFjcz1cRUcwXEVIXDAwMiwgc21jdXA9LAorCXNtc289XEVHdCwgdXNlPXd5NTAsIHVzZT1hZG0rc2dyLAord3k1MC12Ynx3eXNlNTAtdmJ8d3lzZSA1MCB2aXNpYmxlIGJlbGwsCisJYmVsQCwgdXNlPXd5NTAsCit3eTUwLXd8d3lzZTUwLXd8d3lzZSA1MCAxMzItY29sdW1uLAorCWNvbHMjMTMyLCBsdyM3LCBubGFiIzE2LCB3c2wjOTcsCisJY3VwPVxFYSVpJXAxJWRSJXAyJWRDLCBkY2gxPVxFVyQ8Mj4sIGlzMT1cRWA7XEVgOSQ8MzA+LAorCXVzZT13eTUwLAord3k1MC13dmJ8d3lzZTUwLXd2Ynx3eXNlIDUwIDEzMi1jb2x1bW4gdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTUwLXcsCisKKyMKKyMJVGhlIFd5c2UgMzUwIGlzIGEgV3lzZSA1MCB3aXRoIGNvbG9yLgorIwlVbmZvcnR1bmF0ZWx5IHRoaXMgbWVhbnMgdGhhdCBpdCBoYXMgbWFnaWMgY29va2llcy4KKyMJVGhlIGNvbG9yIGF0dHJpYnV0ZXMgYXJlIGRlc2lnbmVkIHRvIG92ZXJsYXAgdGhlIHJldmVyc2UsIGRpbSBhbmQKKyMJdW5kZXJsaW5lIGF0dHJpYnV0ZXMuICBUaGlzIGlzIG5pY2UgZm9yIG1vbm9jaHJvbWUgYXBwbGljYXRpb25zCisjCWJlY2F1c2UgeW91IGNhbiBtYWtlIHVuZGVybGluZSBzdHVmZiBncmVlbiAob3IgYW55IG90aGVyIGNvbG9yKQorIwlidXQgZm9yIHRydWUgY29sb3IgYXBwbGljYXRpb25zIGl0J3Mgbm90IHNvIGhvdCBiZWNhdXNlIHlvdSBjYW5ub3QKKyMJbWl4IGNvbG9yIHdpdGggcmV2ZXJzZSwgZGltIG9yIHVuZGVybGluZS4KKyMJICAgIFRvIGZ1cnRoZXIgY29tcGxpY2F0ZSB0aGluZ3Mgb25lIG9mIHRoZSBhdHRyaWJ1dGVzIG11c3QgYmUKKyMJYmxhY2sgKGVpdGhlciB0aGUgZm9yZWdyb3VuZCBvciB0aGUgYmFja2dyb3VuZCkuICBJbiByZXZlcnNlIHZpZGVvCisjCXRoZSBiYWNrZ3JvdW5kIGNoYW5nZXMgY29sb3Igd2l0aCBibGFjayBsZXR0ZXJzLiAgSW4gbm9ybWFsIHZpZGVvCisjCXRoZSBmb3JlZ3JvdW5kIGNoYW5nZXMgY29sb3JzIG9uIGEgYmxhY2sgYmFja2dyb3VuZC4KKyMJICAgIFRoaXMgdGVybWluZm8gdXNlcyBzb21lIG9mIHRoZSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIG9mIGN1cnNlcworIwl0byBkaXNwbGF5IGJvdGggY29sb3IgYW5kIGJsaW5rLiAgSW4gdGhlIGZpbmFsIGFuYWx5c2lzIEkgYW0gbm90CisjCXN1cmUgdGhhdCB0aGUgd3kzNTAgcnVucyBiZXR0ZXIgd2l0aCB0aGlzIHRlcm1pbmZvIHRoYW4gaXQgZG9lcworIwl3aXRoIHRoZSB3eTUwIHRlcm1pbmZvICh3aXRoIHVzZXIgYWRqdXN0ZWQgY29sb3JzKS4KKyMKKyMJVGhlIG1hbmRhdG9yeSBwYXVzZSB1c2VkIGJ5IGZsYXNoIGRvZXMgbm90IHdvcmsgd2l0aAorIwlvbGRlciB2ZXJzaW9ucyBvZiB0ZXJtaW5mby4gIElmIHlvdSBzZWUgdGhpcyBlZmZlY3QgdGhlbgorIwl1bnNldCB4b24gYW5kIGRlbGV0ZSB0aGUgLyBmcm9tIHRoZSBkZWxheS4KKyMJaS5lLiBjaGFuZ2UgJDwxMDAvPiB0byAkPDEwMD4KKyMKKyMgQnVnOiBUaGUgPG9wPiBjYXBhYmlsaXR5IHJlc2V0cyBhdHRyaWJ1dGVzLgord3kzNTB8d3lzZTM1MHxXeXNlIDM1MCwKKwlhbSwgYncsIGhzLCBtYzVpLCBtaXIsIHhvbiwKKwljb2xvcnMjOCwgY29scyM4MCwgbGgjMSwgbGluZXMjMjQsIGx3IzgsIG5jdiM1NSwgbmxhYiM4LCBwYWlycyM4LAorCXdzbCM0NSwgeG1jIzEsCisJYWNzYz0wd2FfaFtqdWtzbHJtcW54cXp0dHV5dl13cHh2LCBiZWw9XkcsIGJsaW5rPVxFRzIsCisJY2J0PVxFSSwgY2l2aXM9XEVgMCwgY2xlYXI9XEUrJDwyMD4sIGNub3JtPVxFYDEsIGNyPV5NLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVckPDE+LAorCWRpbT1cRUdwLCBkbDE9XEVSLCBkc2w9XEVGXHIsIGVkPVxFWSQ8MjA+LCBlbD1cRVQsCisJZmxhc2g9XEVgOCQ8MTAwLz5cRWA5LCBmc2w9Xk0sIGhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLAorCWlsMT1cRUUsIGluZD1cbiQ8Mj4sIGlwPSQ8MT4sIGlzMT1cRWBcOlxFYDkkPDMwPiwKKwlpczI9XDAxNlwwMjRcRSdcRSgsIGlzMz1cRSU/LCBrSE9NPVxFeywga2JzPV5ILCBrY2J0PVxFSSwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLCBrZGwxPVxFUiwKKwlrZWQ9XEVZLCBrZWw9XEVULCBrZW50PVxFNywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLAorCWtmMTE9XkFKXHIsIGtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsIGtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsCisJa2YxNj1eQU9cciwga2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLAorCWtmNj1eQUVcciwga2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sCisJa2ljaDE9XEVRLCBraWwxPVxFRSwga25wPVxFSywga3BwPVxFSiwga3BydD1cRVAsIGtycGw9XEVyLAorCWxsPV5eXkssIG1jMD1cRVAsIG1jND1eVCwgbWM1PV5YLCBuZWw9Xk1eSiwgb2M9XEUlPywgb3A9XEVHMCwKKwlwZng9XEV6JXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBsbj1cRXolcDElezQ3fSUrJWMlcDIlc1xyLCBwcm90PVxFRzBcRSksIHJpPVxFaiwKKwlybWFjcz1cRUcwXEVIXDAwMywgcm1pcj1cRXIsIHJtbG49XEVBMTEsIHNldGI9LAorCXNldGY9JT8lcDElezB9JT0ldCV7NzZ9JWUlcDElezF9JT0ldCV7NjR9JWUlcDElezJ9JT0ldCV7OH0lZSVwMSV7M30lPSV0JXs3Mn0lZSVwMSV7NH0lPSV0JXs0fSVlJXAxJXs1fSU9JXQlezY4fSVlJXAxJXs2fSU9JXQlezEyfSVlJXAxJXs3fSU9JXQlezB9JTslUENcRUclZ0MlZ0ElKyV7NDh9JSslYywKKwlzZ3I9JXswfSU/JXA0JXQlezJ9JXwlOyU/JXA3JXQlezF9JXwlOyVQQVxFRyU/JWdDJXQlZ0MlZSV7MH0lPyVwMSV0JXs0fSV8JTslPyVwMiV0JXs4fSV8JTslPyVwMyV0JXs0fSV8JTslPyVwNSV0JXs2NH0lfCU7JTslZ0ElKyV7NDh9JSslYyU/JXA4JXRcRSklZVxFKCU7JT8lcDkldFxFSFwwMDIlZVxFSFwwMDMlOywKKwlzZ3IwPVxFRzBcRShcRUhcMDAzJXswfSVQQSV7MH0lUEMsIHNtYWNzPVxFRzBcRUhcMDAyLAorCXNtaXI9XEVxLCBzbWxuPVxFQTEwLCB0YmM9XEUwLCB0c2w9XEVGLCB1c2U9YWRtK3NnciwKK3d5MzUwLXZifHd5c2UzNTAtdmJ8d3lzZSAzNTAgdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTM1MCwKK3d5MzUwLXd8d3lzZTM1MC13fHd5c2UgMzUwIDEzMi1jb2x1bW4sCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5NywKKwljdXA9XEVhJWklcDElZFIlcDIlZEMsIGRjaDE9XEVXJDwyPiwgaXMxPVxFYDtcRWA5JDwzMD4sCisJdXNlPXd5MzUwLAord3kzNTAtd3ZifHd5c2UzNTAtd3ZifHd5c2UgMzUwIDEzMi1jb2x1bW4gdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTM1MC13LAorIworIwlUaGlzIHRlcm1pbmZvIGRlc2NyaXB0aW9uIGlzIHVudGVzdGVkLgorIwlUaGUgd3lzZTEwMCBlbXVsYXRlcyBhbiBhZG0zMSwgc28gdGhlIGFkbTMxIGVudHJ5IHNob3VsZCB3b3JrLgorIword3kxMDB8d3lzZSAxMDAsCisJaHMsIG1pciwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzEsCisJYmVsPV5HLCBjbGVhcj1cRTssIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRsMT1cRVIsIGRzbD1cRUEzMSwgZWQ9XEVZLCBlbD1cRVQsIGZzbD1eTSwgaWwxPVxFRSwgaW5kPV5KLAorCWludmlzQCwgaXMyPVxFdVxFMCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsCisJa2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBraG9tZT1cRXssCisJcm1pcj1cRXIsIHNtaXI9XEVxLCB0c2w9XEVGLCB1c2U9YWRtK3NnciwKKyMKKyMJVGhlIFd5c2UgMTIwLzE1MCBoYXMgbW9zdCBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIFd5c2UgNjAuCisjCVRoaXMgdGVybWluYWwgZG9lcyBub3QgbmVlZCBwYWRkaW5nIHVwIHRvIDk2MDAgYmF1ZCEKKyMJPG1zZ3I+IHNob3VsZCBiZSBzZXQgYnV0IHRoZSBjbGVhciBzY3JlZW4gZmFpbHMgd2hlbiBpbgorIwlhbHQtY2hhcnNldCBtb2RlLiAgVHJ5IFxFY0Vcc1xzXEUrXHMgaWYgdGhlIHNjcmVlbiBpcyByZWFsbHkgY2xlYXIKKyMJdGhlbiBzZXQgPG1zZ3I+LgorIword3kxMjB8d3lzZTEyMHx3eTE1MHx3eXNlMTUwfFd5c2UgMTIwLzE1MCwKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGgjMSwgbGluZXMjMjQsIGx3IzgsIG5sYWIjOCwgcGIjOTYwMSwgd3NsIzQ1LAorCWFjc2M9Ky9cLC4wW2loYTJmeGdxaDFqWWs/bFptQG5FcUR0Q3U0dkF3QngzeXN6cntjfn4sCisJYmVsPV5HLCBibGluaz1cRUcyLCBjYnQ9XEVJLCBjaXZpcz1cRWAwLCBjbGVhcj1cRSskPDUwPiwKKwljbm9ybT1cRWAxLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVyQ8Nz4sCisJZGltPVxFR3AsIGRsMT1cRVIkPDM+LCBkc2w9XEVGXHIsIGVkPVxFWSQ8NTA+LCBlbD1cRVQkPDQ+LAorCWZsYXNoPVxFYDgkPDEwMC8+XEVgOSwgZnNsPV5NLCBob21lPV5eLCBodD1cMDExJDwxPiwKKwlodHM9XEUxLCBpbDE9XEVFJDwzPiwgaW5kPVxuJDwzPiwgaXA9JDwyPiwgaXMxPVxFY0IwXEVjQzEsCisJaXMyPVxFZCRcRWNEXEUnXEVyXEVIXDAwM1xFZC9cRU9cRWUxXEVkKlxFYEBcRWA5XEVgMVwwMTZcMDI0XEVsLAorCWlzMz1cRXdKXEV3MSQ8MTUwPiwga0hPTT1cRXssIGticz1eSCwga2NidD1cRUksIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsIGtlZD1cRVksCisJa2VsPVxFVCwga2VudD1cRTcsIGtmMT1eQUBcciwga2YxMD1eQUlcciwga2YxMT1eQUpcciwKKwlrZjEyPV5BS1xyLCBrZjEzPV5BTFxyLCBrZjE0PV5BTVxyLCBrZjE1PV5BTlxyLCBrZjE2PV5BT1xyLAorCWtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLAorCWtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCBraWNoMT1cRVEsCisJa2lsMT1cRUUsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLCBrcnBsPVxFciwgbGw9Xl5eSywKKwltYzA9XEVQLCBtYzQ9XlQsIG1jNT1cRWQjLCBuZWw9XHJcbiQ8Mz4sCisJcGZsb2M9XEVaMiVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwZng9XEVaMSVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwbG49XEV6JXAxJXs0N30lKyVjJXAyJXNcciwgcHJvdD1cRSksIHJpPVxFaiQ8Mj4sCisJcm1hY3M9XEVjRCwgcm1hbT1cRWQuLCBybWN1cD1cRXcxLCBybWlyPVxFciwgcm1sbj1cRUExMSwKKwlybXhvbj1cRWMyMCwgcnMxPVxFfiFcRX40JDwzMD4sIHJzMj1cRWVGXEVgXDokPDcwPiwKKwlyczM9XEV3R1xFZSgkPDEwMD4sCisJc2dyPSU/JXA4JXRcRSklZVxFKCU7JT8lcDkldFxFY0UlZVxFY0QlO1xFRyV7NDh9JT8lcDIldCV7OH0lfCU7JT8lcDElcDMlfCVwNiV8JXQlezR9JXwlOyU/JXA0JXQlezJ9JXwlOyU/JXAxJXA1JXwldCV7NjR9JXwlOyU/JXA3JXQlezF9JXwlOyVjLAorCXNncjA9XEUoXEVIXDAwM1xFRzBcRWNELCBzbWFjcz1cRWNFLCBzbWFtPVxFZC8sCisJc21jdXA9XEV3MCwgc21pcj1cRXEsIHNtbG49XEVBMTAsIHNtc289XEVHdCwgc214b249XEVjMjEsCisJdGJjPVxFMCwgdHNsPVxFRiwgdXNlPWFkbStzZ3IsCisjCit3eTEyMC13fHd5c2UxMjAtd3x3eTE1MC13fHd5c2UxNTAtd3x3eXNlIDEyMC8xNTAgMTMyLWNvbHVtbiwKKwljb2xzIzEzMiwgbHcjNywgbmxhYiMxNiwgd3NsIzk3LAorCWN1cD1cRWElaSVwMSVkUiVwMiVkQywgZGNoMT1cRVckPDEyPiwgaXA9JDw0PiwKKwlyczI9XEVgOyQ8NzA+LCB1c2U9d3kxMjAsCisjCit3eTEyMC0yNXx3eXNlMTIwLTI1fHd5MTUwLTI1fHd5c2UxNTAtMjV8d3lzZSAxMjAvMTUwIDgwLWNvbHVtbiAyNS1saW5lcywKKwlsaEAsIGxpbmVzIzI1LCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRXdHXEVlKSQ8MTAwPiwgdXNlPXd5MTIwLAorIword3kxMjAtMjUtd3x3eXNlMTIwLTI1LXd8d3kxNTAtMjUtd3x3eXNlMTUwLTI1LXd8d3lzZSAxMjAvMTUwIDEzMi1jb2x1bW4gMjUtbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDEwMD4sIHVzZT13eTEyMC13LAorIword3kxMjAtdmJ8d3lzZTEyMC12Ynx3eTE1MC12Ynx3eXNlMTUwLXZifFd5c2UgMTIwLzE1MCB2aXNpYmxlIGJlbGwsCisJYmVsQCwgdXNlPXd5MTIwLAorIword3kxMjAtdy12Ynx3eTEyMC13dmJ8d3lzZTEyMC13dmJ8d3kxNTAtdy12Ynx3eXNlMTUwLXctdmJ8V3lzZSAxMjAvMTUwIDEzMi1jb2x1bW4gdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTEyMC13LAorIworIwlUaGUgV3lzZSA2MCBpcyBsaWtlIHRoZSBXeXNlIDUwIGJ1dCB3aXRoIG1vcmUgcGFkZGluZy4KKyMJVGhlIHJlc2V0IHN0cmluZ3MgYXJlIHNsb3cgYW5kIHRoZSBwYWQgdGltZXMgdmVyeSBkZXBlbmRpbmcKKyMJb24gb3RoZXIgcGFyYW1ldGVycyBzdWNoIGFzIGZvbnQgbG9hZGluZy4gIEkgaGF2ZSB0cmllZAorIwl0byBmb2xsb3cgdGhlIGZvbGxvd2luZyBvdXRsaW5lOgorIworIwkJPHJzMT4gLT4gc2V0IHBlcnNvbmFsaXR5CisjCQk8cnMyPiAtPiBzZXQgbnVtYmVyIG9mIGNvbHVtbnMKKyMJCTxyczM+IC0+IHNldCBudW1iZXIgb2YgbGluZXMKKyMJCTxpczE+IC0+IHNlbGVjdCB0aGUgcHJvcGVyIGZvbnQKKyMJCTxpczI+IC0+IGRvIHRoZSBpbml0aWFsaXphdGlvbgorIwkJPGlzMz4gLT4gc2V0IHVwIGRpc3BsYXkgbWVtb3J5ICgyIHBhZ2VzKQorIworIwlUaGUgV3lzZSA2MCdzIHRoYXQgaGF2ZSB2dDEwMCBlbXVsYXRpb24gYXJlIHNsb3dlciB0aGFuIHRoZQorIwlvbGRlciBXeXNlIDYwJ3MuICBUaGlzIGNoYW5nZSBoYXBwZW5lZCBtaWQtMTk4Ny4KKyMJVGhlIGNhcGFiaWxpdGllcyBlZmZlY3RlZCBhcmUgPGRjaDE+IDxkbDE+IDxpbDE+IDxpbmQ+IDxyaT4KKyMKKyMJVGhlIG1ldGEga2V5IGlzIG9ubHkgaGFsZiByaWdodC4gIFRoaXMgdGVybWluYWwgd2lsbCByZXR1cm4gdGhlCisjCWhpZ2ggb3JkZXIgYml0IHNldCB3aGVuIHlvdSBoaXQgQ1RSTC1mdW5jdGlvbl9rZXkKKyMKKyMJSXQgbWF5IGJlIHVzZWZ1bCB0byBhc3NpZ24gdHdvIGZ1bmN0aW9uIGtleXMgd2l0aCB0aGUKKyMJdmFsdWVzICBcRT0oXHMgIGxvb2sgYXQgb2xkIGRhdGEgaW4gcGFnZSAxCisjCSAgICAgICAgXEU9VywgICBsb29rIGF0IGJvdHRvbSBvZiBwYWdlIDEKKyMJd2hlcmUgXHMgaXMgYSBzcGFjZSAoICkuCisjCisjCU5vdGU6CisjCSAgIFRoZSBXeXNlIDYwIHJ1bnMgZmFzdGVyIHdoZW4gdGhlIFhPTi9YT0ZGCisjCSAgIGhhbmRzaGFrZSBpcyB0dXJuZWQgb2ZmLgorIworIyAod3k2MDogd2UgdXNlIFxFeyByYXRoZXIgdGhhbiBeXiBmb3IgaG9tZSAoYm90aCBhcmUgZG9jdW1lbnRlZCkgdG8gYXZvaWQKKyMgYSBidWcgcmVwb3J0ZWQgYnkgUm9iZXJ0IER1bm4sIDxyY2RpaUBpbmxpbmsuY29tPiAtLSBlc3IpCit3eTYwfHd5c2U2MHxXeXNlIDYwLAorCWFtLCBidywgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgbGgjMSwgbGluZXMjMjQsIGx3IzgsIG5sYWIjOCwgd3NsIzQ1LAorCWFjc2M9Ky9cLC4wW2loYTJmeGdxaDFqWWs/bFptQG5FcUR0Q3U0dkF3QngzeXN6cntjfn4sCisJYmVsPV5HLCBibGluaz1cRUcyLCBjYnQ9XEVJLCBjaXZpcz1cRWAwLCBjbGVhcj1cRSskPDEwMD4sCisJY25vcm09XEVgMSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFVyQ8MTE+LCBkY2xrPVxFYGIsIGRpbT1cRUdwLCBkbDE9XEVSJDw1PiwgZHNsPVxFRlxyLAorCWVkPVxFWSQ8MTAwPiwgZWw9XEVULCBmbGFzaD1cRWA4JDwxMDAvPlxFYDksIGZzbD1eTSwKKwlob21lPVxFeywgaHQ9XDAxMSQ8MT4sIGh0cz1cRTEsIGlsMT1cRUUkPDQ+LCBpbmQ9XG4kPDU+LAorCWlwPSQ8Mz4sIGlzMT1cRWNCMFxFY0MxLAorCWlzMj1cRWQkXEVjRFxFJ1xFclxFSFwwMDNcRWQvXEVPXEVlMVxFZCpcRWBAXEVgOVxFYDFcMDE2XDAyNFxFbCwKKwlpczM9XEV3SlxFdzEkPDE1MD4sIGtIT009XEV7LCBrYnM9XkgsIGtjYnQ9XEVJLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cRVcsIGtkbDE9XEVSLCBrZWQ9XEVZLAorCWtlbD1cRVQsIGtlbnQ9XEU3LCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTE9XkFKXHIsCisJa2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwga2YxNj1eQU9cciwKKwlrZjI9XkFBXHIsIGtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwKKwlrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwga2ljaDE9XEVRLAorCWtpbDE9XEVFLCBrbnA9XEVLLCBrcHA9XEVKLCBrcHJ0PVxFUCwga3JwbD1cRXIsIGxsPVxFe15LLAorCW1jMD1cRVAsIG1jND1eVCwgbWM1PVxFZCMsIG5lbD1cclxuJDwzPiwKKwlwZmxvYz1cRVoyJXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBmeD1cRVoxJXAxJXs2M30lKyVjJXAyJXNcMTc3LAorCXBsbj1cRXolcDElezQ3fSUrJWMlcDIlc1xyLCBwcm90PVxFKSwgcmk9XEVqJDw3PiwKKwlybWFjcz1cRWNELCBybWFtPVxFZC4sIHJtY2xrPVxFYGMsIHJtY3VwPVxFdzEsIHJtaXI9XEVyLAorCXJtbG49XEVBMTEsIHJteG9uPVxFYzIwLCByczE9XEV+IVxFfjQkPDE1MD4sCisJcnMyPVxFZUckPDE1MD4sIHJzMz1cRXdHXEVlKCQ8MjAwPiwKKwlzZ3I9JT8lcDgldFxFKSVlXEUoJTslPyVwOSV0XEVjRSVlXEVjRCU7XEVHJXs0OH0lPyVwMiV0JXs4fSV8JTslPyVwMSVwMyV8JXA2JXwldCV7NH0lfCU7JT8lcDQldCV7Mn0lfCU7JT8lcDElcDUlfCV0JXs2NH0lfCU7JT8lcDcldCV7MX0lfCU7JWMsCisJc2dyMD1cRShcRUhcMDAzXEVHMFxFY0QsIHNtYWNzPVxFY0UsIHNtYW09XEVkLywKKwlzbWN1cD1cRXcwLCBzbWlyPVxFcSwgc21sbj1cRUExMCwgc21zbz1cRUd0LCBzbXhvbj1cRWMyMSwKKwl0YmM9XEUwLCB0c2w9XEVGLCB1c2U9YWRtK3NnciwKKyMKK3d5NjAtd3x3eXNlNjAtd3x3eXNlIDYwIDEzMi1jb2x1bW4sCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5NywKKwljdXA9XEVhJWklcDElZFIlcDIlZEMsIGRjaDE9XEVXJDwxNj4sIGlwPSQ8NT4sCisJcnMyPVxFZUYkPDE1MD5cRWA7JDwxNTA+LCB1c2U9d3k2MCwKKyMKK3d5NjAtMjV8d3lzZTYwLTI1fHd5c2UgNjAgODAtY29sdW1uIDI1LWxpbmVzLAorCWxoQCwgbGluZXMjMjUsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFd0dcRWUpJDwyMDA+LCB1c2U9d3k2MCwKK3d5NjAtMjUtd3x3eXNlNjAtMjUtd3x3eXNlIDYwIDEzMi1jb2x1bW4gMjUtbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDIwMD4sIHVzZT13eTYwLXcsCisjCit3eTYwLTQyfHd5c2U2MC00Mnx3eXNlIDYwIDgwLWNvbHVtbiA0Mi1saW5lcywKKwlsaW5lcyM0MiwKKwljbGVhcj1cRSskPDI2MD4sIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDI+LAorCWRjaDE9XEVXJDwxNj4sIGRsMT1cRVIkPDExPiwgZWQ9XEV5JDwyNjA+LCBpbDE9XEVFJDwxMT4sCisJaW5kPVxuJDw5PiwgaXA9JDw1PiwgaXMxPVxFY0IyXEVjQzMsIG5lbD1cclxuJDw2PiwKKwlyaT1cRWokPDEwPiwgcnMzPVxFZSokPDE1MD4sIHVzZT13eTYwLAord3k2MC00Mi13fHd5c2U2MC00Mi13fHd5c2UgNjAgMTMyLWNvbHVtbiA0Mi1saW5lcywKKwljb2xzIzEzMiwgbHcjNywgbmxhYiMxNiwgd3NsIzk3LAorCWNsZWFyPVxFKyQ8MjYwPiwgY3VwPVxFYSVpJXAxJWRSJXAyJWRDJDwyPiwKKwlkY2gxPVxFVyQ8MTk+LCBlZD1cRXkkPDI2MD4sIGhvbWU9XDAzNiQ8Mj4sIGlwPSQ8Nj4sCisJbmVsPVxyXG4kPDExPiwgcnMyPVxFZUYkPDE1MD5cRWA7JDwxNTA+LCB1c2U9d3k2MC00MiwKKyMKK3d5NjAtNDN8d3lzZTYwLTQzfHd5c2UgNjAgODAtY29sdW1uIDQzLWxpbmVzLAorCWxoQCwgbGluZXMjNDMsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFZSskPDE1MD4sIHVzZT13eTYwLTQyLAord3k2MC00My13fHd5c2U2MC00My13fHd5c2UgNjAgMTMyLWNvbHVtbiA0My1saW5lcywKKwlsaEAsIGxpbmVzIzQzLCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRWUrJDwxNTA+LCB1c2U9d3k2MC00Mi13LAorIword3k2MC12Ynx3eXNlNjAtdmJ8V3lzZSA2MCB2aXNpYmxlIGJlbGwsCisJYmVsQCwgdXNlPXd5NjAsCit3eTYwLXctdmJ8d3k2MC13dmJ8d3lzZTYwLXd2YnxXeXNlIDYwIDEzMi1jb2x1bW4gdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTYwLXcsCisKKyMJVGhlIFd5c2UtOTlHVCBsb29rcyBhdCBsb3QgbGlrZSB0aGUgV3lzZSA2MCBleGNlcHQgdGhhdCBpdAorIwlkb2VzIG5vdCBoYXZlIHRoZSA0Mi80MyBsaW5lIG1vZGUuICBJbiB0aGUgV3lzZS02MCB0aGUgImxpbmVzIgorIwlzZXR1cCBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgc2NyZWVuLgorIwlGb3IgdGhlIFd5c2UgOTlHVCB0aGUgImxpbmVzIiBzZXR1cCBwYXJhbWV0ZXIgY29udHJvbHMgdGhlCisjCW51bWJlciBvZiBsaW5lcyBpbiBhIHBhZ2UuICBUaGUgc2NyZWVuIGNhbiBkaXNwbGF5IDI1IGxpbmVzIG1heC4KKyMJICAgIFRoZSBXeXNlLTk5R1QgYWxzbyBoYXMgcGVyc29uYWxpdGllcyBmb3IgdGhlIFZUMjIwIGFuZAorIwlUZWt0cm9uaXggNDAxNC4gIEJ1dCB0aGlzIGhhcyBubyBiZWFyaW5nIG9uIHRoZSBuYXRpdmUgbW9kZS4KKyMKKyMJKG1zZ3IpIHNob3VsZCBiZSBzZXQgYnV0IHRoZSBjbGVhciBzY3JlZW4gZmFpbHMgd2hlbiBpbgorIwlhbHQtY2hhcnNldCBtb2RlLiAgVHJ5IFxFY0Vcc1xzXEUrXHMgaWYgdGhlIHNjcmVlbiBpcyByZWFsbHkgY2xlYXIKKyMJdGhlbiBzZXQgbXNnciwgZWxzZSB1c2UgbXNnckAuCisjCisjCXUwIC0+IGVudGVyIFRla3Ryb25peCBtb2RlCisjCXUxIC0+IGV4aXQgVGVrdHJvbml4IG1vZGUKKyMKK3d5OTlndHx3eXNlOTlndHxXeXNlIDk5Z3QsCisJbXNnckAsCisJY2xlYXI9XEUrJDwxMzA+LCBkY2gxPVxFVyQ8Nz4sIGRsMT1cRVIkPDQ+LCBlZD1cRXkkPDEzMD4sCisJZWw9XEV0JDw1PiwgZmxhc2g9XEVgOCQ8MTAwLz5cRWA5LCBodD1cMDExJDwxPiwKKwlpbDE9XEVFJDw0PiwgaW5kPVxuJDw0PiwgaXA9JDwyPiwgaXMzPVxFdzAkPDIwPiwgbmVsQCwKKwlyaT1cRWokPDM+LCBybWN1cD1cRXcwLCByczI9XEVgXDokPDE1MD4sIHNtY3VwPVxFdzEsCisJdTA9XEV+PlxFOCwgdTE9XEVbNDJoLCB1c2U9d3k2MCwKKyMKK3d5OTlndC13fHd5c2U5OWd0LXd8d3lzZSA5OWd0IDEzMi1jb2x1bW4sCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5NywKKwljbGVhcj1cRSskPDE2MD4sIGN1cD1cRWElaSVwMSVkUiVwMiVkQyQ8Mj4sCisJZGNoMT1cRVckPDk+LCBlZD1cRXkkPDE2MD4sIGlwPSQ8ND4sIHJzMj1cRWA7JDwxNTA+LAorCXVzZT13eTk5Z3QsCisjCit3eTk5Z3QtMjV8d3lzZTk5Z3QtMjV8d3lzZSA5OWd0IDgwLWNvbHVtbiAyNS1saW5lcywKKwlsaEAsIGxpbmVzIzI1LCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMj1cRWBcOiQ8MTUwPiwgcnMzPVxFd0dcRWUpJDwyMDA+LCB1c2U9d3k5OWd0LAorIword3k5OWd0LTI1LXd8d3lzZTk5Z3QtMjUtd3x3eXNlIDk5Z3QgMTMyLWNvbHVtbiAyNS1saW5lcywKKwlsaEAsIGxpbmVzIzI1LCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMj1cRWA7JDwxNTA+LCB1c2U9d3k5OWd0LXcsCisjCit3eTk5Z3QtdmJ8d3lzZTk5Z3QtdmJ8V3lzZSA5OWd0IHZpc2libGUgYmVsbCwKKwliZWxALCB1c2U9d3k5OWd0LAorIword3k5OWd0LXctdmJ8d3k5OWd0LXd2Ynx3eXNlOTlndC13dmJ8V3lzZSA5OWd0IDEzMi1jb2x1bW4gdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTk5Z3QtdywKKworIyBDYW4ndCBzZXQgdGFicyEgT3RoZXIgYnVncyAoQU5TSSBtb2RlIG9ubHkpOgorIyAtIGNhbid0IHJlZGVmaW5lIGZ1bmN0aW9uIGtleXMgKGFueXdheSwga2V5IHJlZGVmaW5pdGlvbiBpbiBBTlNJIG1vZGUKKyMgICBpcyB0b28gbXVjaCBjb21wbGV4IHRvIGJlIGRlc2NyaWJlZCk7CisjIC0gbWV0YSBrZXkgY2FuJ3QgYmUgZGVzY3JpYmVkICh0aGUgdGVybWluYWwgZm9yZ2V0cyBpdCB3aGVuIHJlc2V0KTsKKyMgVGhlIHhvbi14b2ZmIGhhbmRzaGFraW5nIGNhbid0IGJlIGRpc2FibGVkIHdoaWxlIGluIGFuc2kgcGVyc29uYWxpdHksIHNvCisjIGVtYWNzIGNhbid0IHdvcmsgYXQgc3BlZWQgZ3JlYXRlciB0aGFuIDk2MDAgYmF1ZC4gIE5vIHBhZGRpbmcgaXMgbmVlZGVkIGF0CisjIHRoaXMgc3BlZWQuCisjICAgZGNoMSBoYXMgYmVlbiBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgY2F1c2VzIGFubm95aW5nIGdsaXR0ZXJpbmcgd2hlbgorIyB2aSBkZWxldGVzIG9uZSBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgd2l0aCB0YWJzIGluIGl0LgorIyAgIGRjaCBtYWtlcyBzeXNnZW4oMU0pIGhhdmUgYSBob3JyaWJsZSBiZWhhdmlvdXIgd2hlbiBkZWxldGluZworIyBhIHNjcmVlbiBhbmQgbWFrZXMgc2NyZWVuKDEpIGJlaGF2ZSBiYWRseSwgc28gaXQgaXMgZGlzYWJsZWQgdG9vLiBUaGUgbmljZQorIyB0aGluZyBpcyB0aGF0IHZpIGdvZXMgY3JhenkgaWYgc21pci1ybWlyIGFyZSBwcmVzZW50IGFuZCBib3RoIGRjaC1kY2gxIGFyZQorIyBub3QsIHNvIHNtaXIgYW5kIHJtaXIgYXJlIGNvbW1lbnRlZCBvdXQgYXMgd2VsbC4KKyMgRnJvbTogRnJhbmNlc2NvIFBvdG9ydGlgIDxGLlBvdG9ydGlAY251Y2UuY25yLml0PiwgMjQgQXVnIDE5OTgKK3d5OTktYW5zaXxXeXNlIFdZLTk5R1QgaW4gYW5zaSBtb2RlIChpbnQnbCBQQyBrZXlib2FyZCksCisJYW0sIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3Fxc3N0dHV1dnZ3d3h4e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0okPDIwMD4sIGNub3JtPVxFWzM0aFxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCQ8MT4sCisJY3ViMT1cMDEwJDwxPiwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRUQsCisJY3VmPVxFWyVwMSVkQyQ8MT4sIGN1ZjE9XEVbQyQ8MT4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFTSwKKwljdnZpcz1cRVszNGxcRVs/MjVoLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiQ8OCo+LCBlbD1cRVtLJDwxPiwgZWwxPVxFWzFLJDwxPiwKKwllbmFjcz1cRSkwLCBmbGFzaD1cRVs/NWgkPDMwLz5cRVs/NWwsIGhvbWU9XEVbSCwKKwlocGE9XEVbJWklcDElZEcsIGh0PV5JLCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1cbiQ8MT4sIGludmlzPVxFWzhtLAorCWlzMj1cRTdcRVsxclxFOFxFWzI7Mzs0OzEzOzIwOzM0OzM5OzM2bFxFWzEyOzE2OzM0aFxFWz8xOzM7NDs1OzEwOzE4bFxFWz83Ozg7MjVoXEU+XEVbPzVXXEUoQlwwMTdcRVs0aSwKKwlrYnM9XkgsIGtjYnQ9XEVbeiwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywKKwlrY3V1MT1cRU9BLCBrZjE9XEVPUCwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjE3PVxFW0ssIGtmMTg9XEVbMzF+LCBrZjE5PVxFWzMyfiwga2YyPVxFT1EsCisJa2YyMD1cRVszM34sIGtmMjE9XEVbMzR+LCBrZjIyPVxFWzM1fiwga2YyMz1cRVsxfiwKKwlrZjI0PVxFWzJ+LCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRVtNLCBrZjY9XEVbMTd+LAorCWtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGxsPVxFWzI0RSwgbWMwPVxFWz8xOWgsCisJbWM0PVxFWzRpLCBtYzU9XEVbNWksIG5lbD1cRUUsIHByb3Q9XEVbMSJxLCByYz1cRTgsCisJcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xbCwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMj1cRVs2MSJwXEVbNDBoXEVbPzZsXEVbMXJcRVsyOzM7NDsxMzsyMDszNDszOTszNmxcRVsxMjsxNjszNGhcRVs/MTszOzQ7NTsxMDsxOGxcRVs/Nzs4OzI1aFxFPlxFWz81V1xFKEJcMDE3XEVbMjRFXEVbNGksCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJU8ldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDcldDs4JTttXEVbJT8lcDgldDElOyJxJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3XEVbInEsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdnBhPVxFWyVpJXAxJWRkLAorCisjICAgVGhpcyBpcyB0aGUgYW1lcmljYW4gdGVybWluYWwuIEhlcmUgdGFicyB3b3JrIGZpbmUuCisjIEZyb206IEZyYW5jZXNjbyBQb3RvcnRpYCA8Ri5Qb3RvcnRpQGNudWNlLmNuci5pdD4sIDI0IEF1ZyAxOTk4Cit3eTk5YS1hbnNpfFd5c2UgV1ktOTlHVCBpbiBhbnNpIG1vZGUgKFVTIFBDIGtleWJvYXJkKSwKKwlodHM9XEVILCBpczM9XEVbPzVsLCByczM9XEVbPzVsLCB0YmM9XEVbM2csIHVzZT13eTk5LWFuc2ksCisKKyMgVGhpcyB0ZXJtaW5hbCAoZmlybXdhcmUgdmVyc2lvbiAwMikgaGFzIGEgbG90IG9mIGJ1Z3M6CisjIC0gY2FuJ3Qgc2V0IHRhYnM7CisjIC0gb3RoZXIgYnVncyBpbiBBTlNJIG1vZGVzIChzZWUgYWJvdmUpLgorIyBUaGlzIGRlc2NyaXB0aW9uIGRpc2FibGVzIGhhbmRzaGFraW5nIHdoZW4gdXNpbmcgY3VwLiBUaGlzIGlzIGJlY2F1c2UKKyMgR05VIGVtYWNzIGRvZXNuJ3QgbGlrZSBYb24tWG9mZiBoYW5kc2hha2luZy4gVGhpcyBtZWFucyB0aGUgdGVybWluYWwKKyMgY2Fubm90IGJlIHVzZWQgYXQgc3BlZWRzIGdyZWF0ZXIgdGhhbiA5NjAwIGJhdWQsIGJlY2F1c2UgYXQgZ3JlYXRlcgorIyBzcGVlZHMgaGFuZHNoYWtpbmcgaXMgbmVlZGVkIGV2ZW4gZm9yIGNoYXJhY3RlciBzZW5kaW5nLiBJZiB5b3UgdXNlCisjIERUUiBoYW5kc2hha2luZywgeW91IGNhbiB1c2UgZXZlbiBncmVhdGVyIHNwZWVkcy4KKyMgRnJvbTogRnJhbmNlc2NvIFBvdG9ydGlgIDxGLlBvdG9ydGlAY251Y2UuY25yLml0PiwgMjQgQXVnIDE5OTgKK3d5OTlmfHd5OTlmZ3R8d3ktOTlmZ3R8V3lzZSBXWS05OUdUIChpbnQnbCBQQyBrZXlib2FyZCksCisJYW0sIGJ3LCBocywga20sIG1jNWksIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LCB3c2wjNDYsCisJYWNzYz0neCt5Lndpfl92aihrJ2wmbSVuKW85cSpzOHQtdS52XCx3K3g9LCBiZWw9XkcsCisJYmxpbms9XEVHMiwgY2J0PVxFSSwgY2l2aXM9XEVgMCwgY2xlYXI9XEUnXEUoXDAzMiwKKwljbm9ybT1cRWA0XEVgMSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVqLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJY3Z2aXM9XEVgMlxFYDEsIGRjaDE9XEVXLCBkaW09XEVHcCwgZGwxPVxFUiwgZHNsPVxFRlxyLAorCWVkPVxFWSQ8OCo+LCBlbD1cRVQkPDg+LCBlbmFjcz1cRWNAMUokPDIwMDA+LAorCWZsYXNoPVxFXF4xJDwzMC8+XEVcXjAsIGZzbD1eTSwgaG9tZT1eXiwgaHQ9XkksIGlsMT1cRUUsCisJaW5kPV5KLCBpbnZpcz1cRUczLAorCWlzMj1cRXVcRWU2XEVDXEVERlxFYzIxXEVjMzFcRWM2MlxFYzcyXEVlO1wwMTZcRSdcRWVMXEVgOVxFXF4wXEVgMVxFYDRcRWUuXEVgXDpcRWUxXEVHMFxFKFxFZC9cRWU0XEVkKlxFT1xFYElcRXJcRWUiXEVjRFwwMjQsCisJa2ExPV5eLCBrYTM9XEVKLCBrYnM9XkgsIGtjMT1cRVQsIGtjMz1cRUssIGtjYnQ9XEVJLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsCisJa2YxMT1eQUpcciwga2YxMj1eQUtcciwga2YxMz1eQWBcciwga2YxND1eQWFcciwga2YxNT1eQWJcciwKKwlrZjE2PV5BY1xyLCBrZjE3PV5BZFxyLCBrZjE4PV5BZVxyLCBrZjE5PV5BZlxyLCBrZjI9XkFBXHIsCisJa2YyMD1eQWdcciwga2YyMT1eQWhcciwga2YyMj1eQWlcciwga2YyMz1eQWpcciwga2YyND1eQWtcciwKKwlrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsIGtmNz1eQUZcciwKKwlrZjg9XkFHXHIsIGtmOT1eQUhcciwga3BydD1cRVAsIG1jMD1cRVAsIG1jND1eVCwgbWM1PVxFZCMsCisJbmVsPV5fLCBwcm90PVxFKSwgcmV2PVxFRzQsIHJpPVxFaiwgcm1hY3M9XEVjRCwgcm1hbT1cRWQuLAorCXJtY3VwPVxFYzIxXEVjMzEsIHJtaXI9XEVyLCBybXNvPVxFRzAsIHJteG9uPVxFYzIwXEVjMzAsCisJcnMyPVxFdVxFfjRcRWU2XEVDXEVERlxFYzIxXEVjMzFcRWM2MlxFYzcyXEVlO1wwMTZcRSdcRWVMXEVgOVxFXF4wXEVgMVxFYDRcRWUuXEVgXDpcRWUpXEV3XEV3R1xFdzBcRWUxXEVHMFxFKFxFZC9cRWU0XEVkKlxFT1xFYElcRXJcRWUiXEVjQDBCXEVjRFwwMjQsCisJc2dyPVxFKFxFRyV7NDh9JT8lcDElcDMlTyV0JXs0fSUrJTslPyVwMiV0JXs4fSUrJTslPyVwNCV0JXsyfSUrJTslPyVwNSV0JXs2NH0lKyU7JT8lcDcldCV7MX0lKyU7JWMlPyVwOCV0XEUpJTslPyVwOSV0XEVjRSVlXEVjRCU7LAorCXNncjA9XEUoXEVHMCwgc21hY3M9XEVjRSwgc21hbT1cRWQvLCBzbWN1cD1cRWMyMFxFYzMwLAorCXNtaXI9XEVxLCBzbXNvPVxFRzQsIHNteG9uPVxFYzIxXEVjMzEsIHRzbD1cRUYsCisKKyMgVGhpcyBpcyB0aGUgYW1lcmljYW4gdGVybWluYWwuIEhlcmUgdGFicyB3b3JrLgorIyBGcm9tOiBGcmFuY2VzY28gUG90b3J0aWAgPEYuUG90b3J0aUBjbnVjZS5jbnIuaXQ+LCAyNCBBdWcgMTk5OAord3k5OWZhfHd5OTlmZ3RhfHd5LTk5Zmd0YXxXeXNlIFdZLTk5R1QgKFVTIFBDIGtleWJvYXJkKSwKKwlodHM9XEUxLCB0YmM9XEUwLCB1c2U9d3k5OWYsCisKKyMKKyMJVGhlIFd5c2UgMTYwIGlzIGNvbWJpbmF0aW9uIG9mIHRoZSBXWS02MCBhbmQgdGhlIFdZLTk5Z3QuCisjCVRoZSByZXNldCBzdHJpbmdzIGFyZSBzbG93IGFuZCB0aGUgcGFkIHRpbWVzIHZlcnkgZGVwZW5kaW5nCisjCW9uIG90aGVyIHBhcmFtZXRlcnMgc3VjaCBhcyBmb250IGxvYWRpbmcuICBJIGhhdmUgdHJpZWQKKyMJdG8gZm9sbG93IHRoZSBmb2xsb3dpbmcgb3V0bGluZToKKyMKKyMJCTxyczE+IC0+IHNldCBwZXJzb25hbGl0eQorIwkJPHJzMj4gLT4gc2V0IG51bWJlciBvZiBjb2x1bW5zCisjCQk8cnMzPiAtPiBzZXQgbnVtYmVyIG9mIGxpbmVzCisjCQk8aXMxPiAtPiBzZWxlY3QgdGhlIHByb3BlciBmb250CisjCQk8aXMyPiAtPiBkbyB0aGUgaW5pdGlhbGl6YXRpb24KKyMJCTxpczM+IC0+IHNldCB1cCBkaXNwbGF5IG1lbW9yeSAoMiBwYWdlcykKKyMKKyMJVGhlIGRpc3BsYXkgbWVtb3J5IG1heSBiZSB1c2VkIGZvciBlaXRoZXIgdGV4dCBvciBncmFwaGljcy4KKyMJV2hlbiAiRGlzcGxheSBNZW1vcnkgPSBTaGFyZWQiIHRoZSB0ZXJtaW5hbCB3aWxsIGhhdmUgbW9yZSBwYWdlcworIwlidXQgZ2FyYmFnZSBtYXkgYmUgbGVmdCBvbiB0aGUgc2NyZWVuIHdoZW4geW91IHN3aXRjaCBmcm9tCisjCWdyYXBoaWNzIHRvIHRleHQuICBJZiAiRGlzcGxheSBNZW1vcnkgPSBVbnNoYXJlZCIgdGhlbiB0aGUKKyMJdGV4dCBhcmVhIHdpbGwgYmUgb25seSBvbmUgcGFnZSBsb25nLgorIworIyAod3kxNjA6IHdlIHVzZSBcRXsgcmF0aGVyIHRoYW4gXl4gZm9yIGhvbWUgKGJvdGggYXJlIGRvY3VtZW50ZWQpIHRvIGF2b2lkCisjIGEgYnVnIHJlcG9ydGVkIGJ5IFJvYmVydCBEdW5uLCA8cmNkaWlAaW5saW5rLmNvbT4gLS0gZXNyKQord3kxNjB8d3lzZTE2MHxXeXNlIDE2MCwKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGxoIzEsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsIHdzbCMzOCwKKwlhY3NjPSsvXCwuMFtpaGEyZnhncWgxallrP2xabUBuRXFEdEN1NHZBd0J4M3lzenJ7Y35+LAorCWJlbD1eRywgYmxpbms9XEVHMiwgY2J0PVxFSSwgY2l2aXM9XEVgMCwgY2xlYXI9XEUrJDwzMD4sCisJY25vcm09XEVgMSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVckPDU+LAorCWRjbGs9XEVgYiwgZGltPVxFR3AsIGRsMT1cRVIkPDE+LCBkc2w9XEVGXHIsIGVkPVxFWSQ8MzA+LAorCWVsPVxFVCQ8NT4sIGZsYXNoPVxFYDgkPDEwMC8+XEVgOSwgZnNsPV5NLCBob21lPVxFeywgaHQ9XkksCisJaHRzPVxFMSwgaWwxPVxFRSQ8MT4sIGluZD1cbiQ8MT4sIGlwPSQ8Mj4sIGlzMT1cRWNCMFxFY0MxLAorCWlzMj1cRWQkXEVjRFxFJ1xFclxFSFwwMDNcRWQvXEVPXEVlMVxFZCpcRWBAXEVgOVxFYDFcMDE2XDAyNFxFbCwKKwlpczM9XEV3MCQ8MTAwPiwga0hPTT1cRXssIGticz1eSCwga2NidD1cRUksIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsIGtlZD1cRVksCisJa2VsPVxFVCwga2VudD1cRTcsIGtmMT1eQUBcciwga2YxMD1eQUlcciwga2YxMT1eQUpcciwKKwlrZjEyPV5BS1xyLCBrZjEzPV5BTFxyLCBrZjE0PV5BTVxyLCBrZjE1PV5BTlxyLCBrZjE2PV5BT1xyLAorCWtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLAorCWtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCBraWNoMT1cRVEsCisJa2lsMT1cRUUsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLCBrcnBsPVxFciwgbGw9XEV7XkssCisJbWMwPVxFUCwgbWM0PV5ULCBtYzU9XEVkIywgbmVsPVxyXG4kPDE+LAorCXBmbG9jPVxFWjIlcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGZ4PVxFWjElcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGxuPVxFeiVwMSV7NDd9JSslYyVwMiVzXHIsIHByb3Q9XEUpLCByaT1cRWokPDE+LAorCXJtYWNzPVxFY0QsIHJtYW09XEVkLiwgcm1jbGs9XEVgYywgcm1jdXA9XEV3MCwgcm1pcj1cRXIsCisJcm1sbj1cRUExMSwgcm14b249XEVjMjAsIHJzMT1cRX4hXEV+NCQ8NzA+LAorCXJzMj1cRWBcOiQ8MTAwPiwgcnMzPVxFd0dcRWUoJDwxNDA+LAorCXNncj0lPyVwOCV0XEUpJWVcRSglOyU/JXA5JXRcRWNFJWVcRWNEJTtcRUclezQ4fSU/JXAyJXQlezh9JXwlOyU/JXAxJXAzJXwlcDYlfCV0JXs0fSV8JTslPyVwNCV0JXsyfSV8JTslPyVwMSVwNSV8JXQlezY0fSV8JTslPyVwNyV0JXsxfSV8JTslYywKKwlzZ3IwPVxFKFxFSFwwMDNcRUcwXEVjRCwgc21hY3M9XEVjRSwgc21hbT1cRWQvLAorCXNtY3VwPVxFdzEsIHNtaXI9XEVxLCBzbWxuPVxFQTEwLCBzbXNvPVxFR3QsIHNteG9uPVxFYzIxLAorCXRiYz1cRTAsIHRzbD1cRUYsIHVzZT1hZG0rc2dyLAorIword3kxNjAtd3x3eXNlMTYwLXd8d3lzZSAxNjAgMTMyLWNvbHVtbiwKKwljb2xzIzEzMiwgbHcjNywgbmxhYiMxNiwgd3NsIzkwLAorCWN1cD1cRWElaSVwMSVkUiVwMiVkQywgZGNoMT1cRVckPDk+LAorCXJzMj1cRWVGJDwxNTA+XEVgOyQ8MTUwPiwgdXNlPXd5MTYwLAorIword3kxNjAtMjV8d3lzZTE2MC0yNXx3eXNlIDE2MCA4MC1jb2x1bW4gMjUtbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDIwMD4sIHVzZT13eTE2MCwKK3d5MTYwLTI1LXd8d3lzZTE2MC0yNS13fHd5c2UgMTYwIDEzMi1jb2x1bW4gMjUtbGluZXMsCisJbGhALCBsaW5lcyMyNSwgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDIwMD4sIHVzZT13eTE2MC13LAorIword3kxNjAtNDJ8d3lzZTE2MC00Mnx3eXNlIDE2MCA4MC1jb2x1bW4gNDItbGluZXMsCisJbGluZXMjNDIsCisJY2xlYXI9XEUrJDw1MD4sIGRsMT1cRVIkPDI+LCBlZD1cRXkkPDUwPiwgaWwxPVxFRSQ8Mj4sCisJaW5kPVxuJDwyPiwgaXMxPVxFY0IyXEVjQzMsIG5lbD1cclxuJDwyPiwgcmk9XEVqJDwyPiwKKwlyczM9XEVlKiQ8MTUwPiwgdXNlPXd5MTYwLAord3kxNjAtNDItd3x3eXNlMTYwLTQyLXd8d3lzZSAxNjAgMTMyLWNvbHVtbiA0Mi1saW5lcywKKwljb2xzIzEzMiwgbHcjNywgbmxhYiMxNiwgd3NsIzkwLAorCWN1cD1cRWElaSVwMSVkUiVwMiVkQywgZGNoMT1cRVckPDg+LCBpcD0kPDM+LAorCXJzMj1cRWVGJDwxNTA+XEVgOyQ8MTUwPiwgdXNlPXd5MTYwLTQyLAorIword3kxNjAtNDN8d3lzZTE2MC00M3x3eXNlIDE2MCA4MC1jb2x1bW4gNDMtbGluZXMsCisJbGhALCBsaW5lcyM0MywgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEVlKyQ8MTUwPiwgdXNlPXd5MTYwLTQyLAord3kxNjAtNDMtd3x3eXNlMTYwLTQzLXd8d3lzZSAxNjAgMTMyLWNvbHVtbiA0My1saW5lcywKKwlsaEAsIGxpbmVzIzQzLCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRWUrJDwxNTA+LCB1c2U9d3kxNjAtNDItdywKKyMKK3d5MTYwLXZifHd5c2UxNjAtdmJ8V3lzZSAxNjAgdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTE2MCwKK3d5MTYwLXctdmJ8d3kxNjAtd3ZifHd5c2UxNjAtd3ZifFd5c2UgMTYwIDEzMi1jb2x1bW4gdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTE2MC13LAorIworIwlUaGUgV3lzZSA3NSBpcyBhIHZ0MTAwIGxvb2thbGlrZSB3aXRob3V0IGFkdmFuY2VkIHZpZGVvLgorIworIwkgICBUaGUgV3lzZSA3NSBjYW4gc3VwcG9ydCBvbmUgYXR0cmlidXRlIChlLmcuIERpbSwgSW52ZXJzZSwKKyMJVW5kZXJsaW5lKSB3aXRob3V0IG1hZ2ljIGNvb2tpZXMuICBUaGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uCisjCXVzZXMgdGhpcyBjYXBhYmlsaXR5LCBidXQgd2hlbiBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZSBpcworIwlwdXQgb24gdGhlIHNjcmVlbiBhdCBvbmNlLCBhbGwgYXR0cmlidXRlcyB3aWxsIGJlIGNoYW5nZWQKKyMJdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGxhc3QgYXR0cmlidXRlIGdpdmVuLgorIwkgICBUaGUgV3lzZSA3NSBjYW4gc3VwcG9ydCBtb3JlIGF0dHJpYnV0ZXMgd2hlbiB1c2VkIHdpdGggbWFnaWMKKyMJY29va2llcy4gIFRoZSB3eTc1LW1jIHRlcm1pbmFsIGRlc2NyaXB0aW9uIHVzZXMgbWFnaWMgY29va2llcworIwl0byBjb3JyZWN0bHkgaGFuZGxlIG11bHRpcGxlIGF0dHJpYnV0ZXMgb24gYSBzY3JlZW4uCisjCit3eTc1fHd5c2U3NXx3eXNlIDc1LAorCWFtLCBocywgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIG1hIzEsIHBiIzEyMDEsIHdzbCM3OCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsIGNsZWFyPVxFW0hcRVtKJDwzMD4sCisJY25vcm09XEVbPzI1aCwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciQ8Mj4sCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAkPDMqPiwKKwlkY2gxPVxFW1AkPDM+LCBkaW09XEVbMHRcRVsybSwgZGw9XEVbJXAxJWRNJDwxKj4sCisJZGwxPVxFW00sIGRzbD1cRVs+XCxcMDAxXDAwMVxFWz4tXDAwMVwwMDEsCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiQ8MzA+LCBlbD1cRVtLJDwzPiwgZWwxPVxFWzFLJDwzPiwKKwllbmFjcz1cRSkwLCBmbGFzaD1cRVszMGhcRVwsXEVbMzBsJDwyNTA+LCBmc2w9XkEsCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAkPDEqPiwgaWw9XEVbJXAxJWRMJDwyKj4sIGlsMT1cRVtMJDwyPiwKKwlpbmQ9XG4kPDI+LCBpcD0kPDE+LAorCWlzMT1cRVsyOzQ7MjA7MzBsXEVbPzE7MTBsXEVbMTJoXEVbPzc7ODsyNWgsCisJaXMyPVxFPlxFKEJcRSkwXDAxNywgaXMzPVxFW20sIGticz1eSCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGwxPVxFW00sIGtlbD1cRVtLLAorCWtmMT1cRVs/NWksIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sCisJa2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sCisJa2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwga2YyPVxFWz8zaSwKKwlrZjIwPVxFWzM0fiwga2YyMT1cRVszNX4sIGtmMz1cRVsyaSwga2Y0PVxFW0AsIGtmNT1cRVtNLAorCWtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtmbmQ9XEVbMX4sCisJa2hscD1cRVsyOH4sIGtob21lPVxFW0gsIGtpY2gxPVxFW0AsIGtpbDE9XEVbTCwga25wPVxFWzZ+LAorCWtwcD1cRVs1fiwga3BydD1cRVs/NWksIGtzbHQ9XEVbNH4sIG1jMD1cRVswaSwgbWM0PVxFWzRpLAorCW1jNT1cRVs1aSwgcmM9XEU4LCByZXY9XEVbMXRcRVs3bSwgcmk9XEVNJDwyPiwgcm1hY3M9Xk8sCisJcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczE9XEVbMTNsXEVbM2xcRSFwLCByczI9XEVbMzVoXEVbPzNsJDw4MD4sIHJzMz1cRVs/NWwsCisJc2M9XEU3LAorCXNncj0lPyVwNSV0XEVbMHQlOyU/JXAzJXAxJXwldFxFWzF0JTslPyVwMiV0XEVbMnQlOyU/JXA0JXRcRVszdCU7JT8lcDElcDIlcDMlcDQlcDUlfCV8JXwlfCV0XEVbN20lZVxFW20lOyU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFsXEVbPzdoXEU9LCBzbXNvPVxFWzF0XEVbN20sIHNtdWw9XEVbMnRcRVs0bSwKKwl0YmM9XEVbM2csIHRzbD1cRVs+XCxcMDAxLCB1c2U9dnQyMjAra2V5cGFkLAorIworIwlUaGlzIHRlcm1pbmFsIGRlc2NyaXB0aW9uIHVzZXMgdGhlIG5vbi1oaWRkZW4gYXR0cmlidXRlIG1vZGUKKyMJKHdpdGggbWFnaWMgY29va2llKS4KKyMKK3d5NzUtbWN8d3lzZTc1LW1jfHd5c2UgNzUgd2l0aCBtYWdpYyBjb29raWVzLAorCW1zZ3JALAorCW1hQCwgeG1jIzEsCisJYmxpbms9XEVbMnAsIGRpbT1cRVsxcCwgaW52aXM9XEVbNHAsIGlzMz1cRVttXEVbcCwKKwlyZXY9XEVbMTZwLCBybWFjcz1cRVswcFwwMTcsIHJtc289XEVbMHAsIHJtdWw9XEVbMHAsCisJc2dyPVxFWyV7MH0lPyVwMiVwNiV8JXQlezh9JXwlOyU/JXAxJXAzJXwlcDYlfCV0JXsxNn0lfCU7JT8lcDQldCV7Mn0lfCU7JT8lcDElcDUlfCV0JXsxfSV8JTslPyVwNyV0JXs0fSV8JTslZHAlPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbMHBcMDE3LCBzbWFjcz1cRVswcFwwMTYsIHNtc289XEVbMTdwLCBzbXVsPVxFWzhwLAorCXVzZT13eTc1LAord3k3NS12Ynx3eXNlNzUtdmJ8d3lzZSA3NSB3aXRoIHZpc2libGUgYmVsbCwKKwlwYkAsCisJYmVsQCwgdXNlPXd5NzUsCit3eTc1LXd8d3lzZTc1LXd8d3lzZSA3NSBpbiAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsIHdzbCMxMzAsCisJcnMyPVxFWzM1aFxFWz8zaCQ8ODA+LCB1c2U9d3k3NSwKK3d5NzUtd3ZifHd5c2U3NS13dmJ8d3lzZSA3NSB3aXRoIHZpc2libGUgYmVsbCAxMzIgY29sdW1ucywKKwlwYkAsCisJYmVsQCwgdXNlPXd5NzUtdywKKyMKKyMJV3lzZSA4NSBlbXVsYXRpbmcgYSB2dDIyMCA3IGJpdCBtb2RlLgorIwkJMjQgbGluZSBzY3JlZW4gd2l0aCBzdGF0dXMgbGluZS4KKyMKKyMJVGhlIHZ0MjIwIG1vZGUgcGVybWl0cyBtb3JlIGZ1bmN0aW9uIGtleXMgYnV0IGl0IHdpcGVzIG91dAorIwl0aGUgZXNjYXBlIGtleS4gIEkgc3Ryb25nbHkgcmVjb21tZW5kIHRoYXQgPGYxMT4gYmUgc2V0IHRvCisjCWVzY2FwZSAoZXNjKS4KKyMJVGhlIHRlcm1pbmFsIG1heSBoYXZlIHRvIGJlIHNldCBmb3IgOCBkYXRhIGJpdHMgYW5kIDIgc3RvcAorIwliaXRzIGZvciB0aGUgYXJyb3cga2V5cyB0byB3b3JrLgorIwlUaGUgV3lzZSA4NSBydW5zIGZhc3RlciB3aXRoIFhPTi9YT0ZGIGVuYWJsZWQuICBBbHNvIHRoZQorIwk8ZGNoPiBhbmQgPGljaD4gd29yayBiZXN0IHdoZW4gWE9OL1hPRkYgaXMgc2V0LiAgPGljaD4gYW5kCisjCTxkY2g+IGxlYXZlIHRyYXNoIG9uIHRoZSBzY3JlZW4gd2hlbiB1c2VkIHdpdGhvdXQgWE9OL1hPRkYuCisjCit3eTg1fHd5c2U4NXx3eXNlIDg1LAorCWFtLCBocywgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKJDwxMTA+LCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MT4sIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQJDwzKj4sIGRjaDE9XEVbUCQ8Mz4sIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0kPDMqPiwgZGwxPVxFW00kPDM+LCBkc2w9XEVbNDBsLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0okPDExMD4sIGVsPVxFW0skPDE+LCBlbDE9XEVbMUssCisJZW5hY3M9XEUpMCwgZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MzAwPiwKKwlmc2w9XEVbMTsyNHJcRTgsIGhvbWU9XEVbSCwgaHQ9XDAxMSQ8MT4sIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCQ8NCo+LCBpbD1cRVslcDElZEwkPDUqPiwgaWwxPVxFW0wkPDU+LAorCWluZD1cbiQ8Mz4sIGludmlzPVxFWzhtLCBpcD0kPDM+LCBpczE9XEVbNjI7MSJwXEVbPzVXLAorCWlzMj1cRVsyOzQ7MjA7MzBsXEVbPzE7NDsxMDsxNmxcRVsxMmhcRVs/Nzs4OzI1aCQ8MTY+LAorCWlzMz1cRT5cRShCXEUpMFwwMTdcRVttLCBrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbM34sIGtmMTA9XEVbMjF+LAorCWtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LAorCWtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LAorCWtmMTk9XEVbMzN+LCBrZjIwPVxFWzM0fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwKKwlraG9tZT1cRVsyNn4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwKKwlrc2x0PVxFWzR+LCBsZjE9UEYxLCBsZjI9UEYyLCBsZjM9UEYzLCBsZjQ9UEY0LCBtYzA9XEVbMGksCisJbWM0PVxFWzRpLCBtYzU9XEVbNWksIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0kPDM+LAorCXJtYWNzPV5PLCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRT4sIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHJzMT1cRVsxM2xcRVszbFxFIXAsIHJzMj1cRVszNWhcRVs/M2wkPDcwPiwKKwlyczM9XEVbPzVsLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMiV0OzQlOyU/JXAzJXAxJXwldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xbFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXRzbD1cRVs0MGhcRTdcRVsyNTslaSVwMSVkSCwgdXNlPXZ0MjIwK2tleXBhZCwKKyMKKyMJV3lzZSA4NSB3aXRoIHZpc3VhbCBiZWxsLgord3k4NS12Ynx3eXNlODUtdmJ8d3lzZSA4NSB3aXRoIHZpc2libGUgYmVsbCwKKwliZWxALCBmbGFzaD1cRVszMGhcRVwsXEVbMzBsJDwzMDA+LCB1c2U9d3k4NSwKKyMKKyMJV3lzZSA4NSBpbiAxMzItY29sdW1uIG1vZGUuCit3eTg1LXd8d3lzZTg1LXd8d3lzZSA4NSBpbiAxMzItY29sdW1uIG1vZGUsCisJY29scyMxMzIsIHdzbCMxMzIsCisJcnMyPVxFWzM1aFxFWz8zaCQ8NzA+LCB1c2U9d3k4NSwKKyMKKyMJV3lzZSA4NSBpbiAxMzItY29sdW1uIG1vZGUgd2l0aCB2aXN1YWwgYmVsbC4KK3d5ODUtd3ZifHd5c2U4NS13dmJ8d3lzZSA4NSB3aXRoIHZpc2libGUgYmVsbCAxMzItY29sdW1ucywKKwliZWxALCB1c2U9d3k4NS13LAorCisjIEZyb206IEtldmluIFR1cm5lciA8a2V2aW50QGFyYWNuZXQuY29tPiwgMTIgSnVsIDE5OTgKKyMgVGhpcyBjb3BlcyB3aXRoIGFuIGFwcGFyZW50IGZpcm13YXJlIGJ1ZyBpbiB0aGUgd3k4NS4gIEhlIHdyaXRlczoKKyMgIldoYXQgSSBkaWQgd2FzIGNoYW5nZSBsZWF2ZSB0aGUgdGVybWluYWwgY3Vyc29yIGtleXMgc2V0IHRvIE5vcm1hbAorIyAoaW5zdGVhZCBvZiBhcHBsaWNhdGlvbiksIGFuZCBjaGFuZ2UgXEVbIHRvIFwyMzMgZm9yIGFsbCB0aGUga2V5cyBpbgorIyB0ZXJtaW5mby4gQXQgb25lIHBvaW50LCBJIGZvdW5kIHNvbWUgcmVmZXJlbmNlIGluZGljYXRpbmcgdGhhdCB0aGlzCisjIHRlcm1pbmFsIGJ1ZyAobm90IHNlbmRpbmcgXEVbKSB3YXMgYWNrbm93bGVkZ2VkIGJ5IFd5c2UgKHNvIGl0J3Mgbm90IGp1c3QKKyMgbWUpLCBidXQgSSBjYW4ndCBmaW5kIHRoYXQgYW5kIHRoZSBzZXJ2ZXIgdW5kZXIgbXkgYm9va21hcmsgdG8gIld5c2UKKyMgVGVjaG5pY2FsIiBpc24ndCByZXNwb25kaW5nLiAgU28gdGhlcmUncyB0aGUgcXVlc3Rpb24gb2Ygd2V0aGVyIHRoZSB3eTg1CisjIHRlcm1pbmZvIHNob3VsZCByZWZsZWN0IHRoZSBtYW51ZmFjdHVlcidzIGludGVuZGVkIGJlaGF2aW91ciBvZiB0aGUgdGVybWluYWwKKyMgb3IgdGhlIGFjdHVhbC4iCit3eTg1LThiaXR8d3lzZTg1LThiaXR8d3lzZSA4NSBpbiA4LWJpdCBtb2RlLAorCWFtLCBocywgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKJDwxMTA+LCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MT4sIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQJDwzKj4sIGRjaDE9XEVbUCQ8Mz4sIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0kPDMqPiwgZGwxPVxFW00kPDM+LCBkc2w9XEVbNDBsLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0okPDExMD4sIGVsPVxFW0skPDE+LCBlbDE9XEVbMUssCisJZW5hY3M9XEUpMCwgZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MzAwPiwKKwlmc2w9XEVbMTsyNHJcRTgsIGhvbWU9XEVbSCwgaHQ9XDAxMSQ8MT4sIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCQ8NCo+LCBpbD1cRVslcDElZEwkPDUqPiwgaWwxPVxFW0wkPDU+LAorCWluZD1cbiQ8Mz4sIGludmlzPVxFWzhtLCBpcD0kPDM+LCBpczE9XEVbNjI7MSJwXEVbPzVXLAorCWlzMj1cRVsyOzQ7MjA7MzBsXEVbPzE7NDsxMDsxNmxcRVsxMmhcRVs/Nzs4OzI1aCQ8MTY+LAorCWlzMz1cRT5cRShCXEUpMFwwMTdcRVttLCBrYTE9XEVPdywga2EzPVxFT3ksIGtiMj1cRU91LAorCWticz1eSCwga2MxPVxFT3EsIGtjMz1cRU9zLCBrY3ViMT1cMjMzRCwga2N1ZDE9XDIzM0IsCisJa2N1ZjE9XDIzM0MsIGtjdXUxPVwyMzNBLCBrZGNoMT1cMjMzM34sIGtlbnQ9XEVPTSwKKwlrZjE9XEVPUCwga2YxMD1cMjMzMjF+LCBrZjExPVwyMzMyM34sIGtmMTI9XDIzMzI0fiwKKwlrZjEzPVwyMzMyNX4sIGtmMTQ9XDIzMzI2fiwga2YxNT1cMjMzMjh+LCBrZjE2PVwyMzMyOX4sCisJa2YxNz1cMjMzMzF+LCBrZjE4PVwyMzMzMn4sIGtmMTk9XDIzMzMzfiwga2YyPVxFT1EsCisJa2YyMD1cMjMzMzR+LCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNj1cMjMzMTd+LCBrZjc9XDIzMzE4fiwKKwlrZjg9XDIzMzE5fiwga2Y5PVwyMzMyMH4sIGtmbmQ9XDIzMzF+LCBraGxwPVwyMzMyOH4sCisJa2hvbWU9XDIzMzI2fiwga2ljaDE9XDIzMzJ+LCBrbnA9XDIzMzZ+LCBrcHA9XDIzMzV+LAorCWtzbHQ9XDIzMzR+LCBsZjE9UEYxLCBsZjI9UEYyLCBsZjM9UEYzLCBsZjQ9UEY0LCBtYzA9XEVbMGksCisJbWM0PVxFWzRpLCBtYzU9XEVbNWksIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0kPDM+LAorCXJtYWNzPV5PLCBybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRT4sIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHJzMT1cRVsxM2xcRVszbFxFIXAsIHJzMj1cRVszNWhcRVs/M2wkPDcwPiwKKwlyczM9XEVbPzVsLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMiV0OzQlOyU/JXAzJXAxJXwldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglOyttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWxcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEVbNDBoXEU3XEVbMjU7JWklcDElZEgsCisjCisjCVd5c2UgMTg1IGVtdWxhdGluZyBhIHZ0MzIwIDcgYml0IG1vZGUuCisjCisjCVRoaXMgdGVybWluYWwgYWx3YXlzIGRpc3BsYXlzIDI1IGxpbmVzLiAgVGhlc2UgbGluZXMgbWF5IGJlIHVzZWQKKyMJYXMgMjQgZGF0YSBsaW5lcyBhbmQgYSB0ZXJtaW5hbCBzdGF0dXMgbGluZSAodG9wIG9yIGJvdHRvbSkgb3IKKyMJMjUgZGF0YSBsaW5lcy4gIFRoZSA0OCBhbmQgNTAgbGluZSBtb2RlcyBjaGFuZ2UgdGhlIHBhZ2Ugc2l6ZQorIwlhbmQgbm90IHRoZSBudW1iZXIgb2YgbGluZXMgb24gdGhlIHNjcmVlbi4KKyMKKyMJVGhlIENvbXBvc2UgQ2hhcmFjdGVyIGtleSBjYW4gYmUgdXNlZCBhcyBhIG1ldGEga2V5IGlmIGNoYW5nZWQKKyMJYnkgc2V0LXVwLgorIword3kxODV8d3lzZTE4NXx3eXNlIDE4NSwKKwlhbSwgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgd3NsIzgwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0okPDQwPiwgY25vcm09XEVbMzRoXEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyJDwyMD4sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8yNWhcRVszNGwsIGRjaD1cRVslcDElZFAkPDM+LCBkY2gxPVxFW1AkPDM+LAorCWRpbT1cRVsybSwgZGw9XEVbJXAxJWRNJDwyKj4sIGRsMT1cRVtNJDwyPiwKKwlkc2w9XEU3XEVbOTk7MEhcRVtLXEU4LCBlY2g9XEVbJXAxJWRYLCBlZD1cRVtKJDw0MD4sCisJZWw9XEVbSywgZWwxPVxFWzFLLCBlbmFjcz1cRSkwLAorCWZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDEwMD4sIGZzbD1cRVsxOzI0clxFOCwKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwgaHQ9XkksIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCQ8Mj4sIGlsPVxFWyVwMSVkTCQ8Myo+LCBpbDE9XEVbTCQ8Mz4sCisJaW5kPVxuJDwyPiwgaW52aXM9XEVbOG0sIGlwPSQ8ND4sIGlzMT1cRVs/NVcsCisJaXMyPVxFWzI7NDsyMDszMGxcRVs/MTs0OzEwOzE2bFxFWzEyaFxFWz83Ozg7MjVoLAorCWlzMz1cRT5cRShCXEUpMFwwMTdcRVttLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVszfiwga2YxPVxFT1AsCisJa2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sCisJa2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sCisJa2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LCBrZjI9XEVPUSwga2YyMD1cRVszNH4sIGtmMz1cRU9SLAorCWtmND1cRU9TLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtmbmQ9XEVbMX4sIGtobHA9XEVbMjh+LCBraG9tZT1cRVsyNn4sIGtpY2gxPVxFWzJ+LAorCWtucD1cRVs2fiwga3BwPVxFWzV+LCBrc2x0PVxFWzR+LCBsZjE9UEYxLCBsZjI9UEYyLCBsZjM9UEYzLAorCWxmND1QRjQsIG1jMD1cRVswaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJpPVxFTSQ8Mj4sIHJtYWNzPV5PLCBybWFtPVxFWz83bCwgcm1jdXA9XEVbIFIsIHJtaXI9XEVbNGwsCisJcm1reD1cRT4sIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEVbMTNsXEVbM2xcRVxcXEVbNjM7MSJwXEVbIXAsIHJzMj1cRVszNWhcRVs/M2wsCisJcnMzPVxFWz81bFxFWzQ3aFxFWzQwbFxFW3IsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXAyJXQ7NCU7JT8lcDMlcDElfCV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDsyJTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWN1cD1cRVsgUSwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz8xbFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csIHRzbD1cRTdcRVs5OTslaSVwMSVkSCwgdnBhPVxFWyVpJXAxJWRkLAorCXVzZT12dDIyMCtrZXlwYWQsCisjCisjCVd5c2UgMTg1IHdpdGggMjQgZGF0YSBsaW5lcyBhbmQgdG9wIHN0YXR1cyAodGVybWluYWwgc3RhdHVzKQord3kxODUtMjR8d3lzZTE4NS0yNHx3eXNlIDE4NSB3aXRoIDI0IGRhdGEgbGluZXMsCisJaHNALAorCWRzbEAsIGZzbEAsIHJzMz1cRVs/NWxcRVs0N2hcRVs0MGxcRVsxOzI0ciwgdHNsQCwKKwl1c2U9d3kxODUsCisjCisjCVd5c2UgMTg1IHdpdGggdmlzdWFsIGJlbGwuCit3eTE4NS12Ynx3eXNlMTg1LXZifHd5c2UgMTg1K2ZsYXNoLAorCWJlbEAsIHVzZT13eTE4NSwKKyMKKyMJV3lzZSAxODUgaW4gMTMyLWNvbHVtbiBtb2RlLgord3kxODUtd3x3eXNlMTg1LXd8d3lzZSAxODUgaW4gMTMyLWNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWRjaD1cRVslcDElZFAkPDc+LCBkY2gxPVxFW1AkPDc+LCBpY2g9XEVbJXAxJWRAJDw3PiwKKwlpcD0kPDc+LCByczI9XEVbMzVoXEVbPzNoLCB1c2U9d3kxODUsCisjCisjCVd5c2UgMTg1IGluIDEzMi1jb2x1bW4gbW9kZSB3aXRoIHZpc3VhbCBiZWxsLgord3kxODUtd3ZifHd5c2UxODUtd3ZifHd5c2UgMTg1K2ZsYXNoKzEzMiBjb2xzLAorCWJlbEAsIHVzZT13eTE4NS13LAorCisjIHd5MzI1IHRlcm1pbmZvIGVudHJpZXMKKyMgRG9uZSBieSBKb2UgSC4gRGF2aXMgICAgICAgIDMtOS05MgorCisjIGxpbmVzIDI1ICBjb2x1bW5zIDgwCisjCit3eTMyNXx3eXNlMzI1fFd5c2UgZXBjLAorCWFtLCBidywgaHMsIG1jNWksIG1pciwKKwljb2xzIzgwLCBsaCMxLCBsaW5lcyMyNCwgbHcjOCwgbmxhYiM4LCBwYiM5NjAxLCB3c2wjNDUsCisJYWNzYz0rL1wsLjBbaWhhMmZ4Z3FoMWpZaz9sWm1AbkVxRHRDdTR2QXdCeDN5c3pye2N+fiwKKwliZWw9XkcsIGJsaW5rPVxFRzIsIGNidD1cRUksIGNpdmlzPVxFYDAsIGNsZWFyPVxFKyQ8NTA+LAorCWNub3JtPVxFYDEsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXJDw3PiwKKwlkaW09XEVHcCwgZGwxPVxFUiQ8Mz4sIGRzbD1cRUZcciwgZWQ9XEVZJDw1MD4sIGVsPVxFVCQ8ND4sCisJZmxhc2g9XEVgOCQ8MTAwLz5cRWA5LCBmc2w9Xk0sIGhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLAorCWlsMT1cRUUkPDM+LCBpbmQ9XG4kPDM+LCBpcD0kPDI+LCBpczE9XEVjQjBcRWNDMSwKKwlpczI9XEVjRFxFJ1xFclxFSFwwMDNcRWQvXEVPXEVlMVxFZCpcRWBAXEVgOVxFYDFcMDE2XDAyNFxFbCwKKwlpczM9XEV3MCQ8MTY+LCBrSE9NPVxFeywga2JzPV5ILCBrY2J0PVxFSSwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLCBrZGwxPVxFUiwga2VkPVxFWSwKKwlrZWw9XEVULCBrZW50PVxFNywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BSlxyLAorCWtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsIGtmMTQ9XkFNXHIsIGtmMTU9XkFOXHIsIGtmMTY9XkFPXHIsCisJa2YyPV5BQVxyLCBrZjM9XkFCXHIsIGtmND1eQUNcciwga2Y1PV5BRFxyLCBrZjY9XkFFXHIsCisJa2Y3PV5BRlxyLCBrZjg9XkFHXHIsIGtmOT1eQUhcciwga2hvbWU9Xl4sIGtpY2gxPVxFcSwKKwlraWwxPVxFRSwga25wPVxFSywga3BwPVxFSiwga3BydD1cRVAsIGtycGw9XEVyLCBsbD1eXl5LLAorCW1jMD1cRVAsIG1jND1eVCwgbWM1PVxFZCMsCisJcGZsb2M9XEVaMiVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwZng9XEVaMSVwMSV7NjN9JSslYyVwMiVzXDE3NywKKwlwbG49XEV6JXAxJXs0N30lKyVjJXAyJXNcciwgcHJvdD1cRSksIHJpPVxFaiQ8Mj4sCisJcm1hY3M9XEVjRCwgcm1hbT1cRWQuLCBybWN1cD1cRXcwLCBybWlyPVxFciwgcm1sbj1cRUExMSwKKwlyczE9XEV+IVxFfjQkPDMwPiwgcnMyPVxFZUZcRWBcOiQ8NzA+LAorCXJzMz1cRXdHXEVlKCQ8MTAwPiwKKwlzZ3I9JT8lcDgldFxFKSVlXEUoJTslPyVwOSV0XEVjRSVlXEVjRCU7XEVHJXs0OH0lPyVwMiV0JXs4fSV8JTslPyVwMSVwMyV8JXA2JXwldCV7NH0lfCU7JT8lcDQldCV7Mn0lfCU7JT8lcDElcDUlfCV0JXs2NH0lfCU7JT8lcDcldCV7MX0lfCU7JWMsCisJc2dyMD1cRShcRUhcMDAzXEVHMFxFY0QsIHNtYWNzPVxFY0UsIHNtYW09XEVkLywKKwlzbWN1cD1cRXcxLCBzbWlyPVxFcSwgc21sbj1cRUExMCwgc21zbz1cRUd0LCB0YmM9XEUwLAorCXRzbD1cRUYsIHVzZT1hZG0rc2dyLAorCisjCisjIGxpbmVzIDI0ICBjb2x1bW5zIDgwICB2YgorIword3kzMjUtdmJ8d3lzZTMyNS12Ynx3eXNlLTMyNSB3aXRoIHZpc3VhbCBiZWxsLAorCWJlbEAsIHVzZT13eTMyNSwKKworIworIyBsaW5lcyAyNCAgY29sdW1ucyAxMzIKKyMKK3d5MzI1LXd8d3lzZTMyNS13fHd5MzI1dy0yNHx3eXNlLTMyNSBpbiB3aWRlIG1vZGUsCisJY29scyMxMzIsIGx3IzcsIG5sYWIjMTYsIHdzbCM5NywKKwljdXA9XEVhJWklcDElZFIlcDIlZEMsIGRjaDE9XEVXJDwxMj4sIGlwPSQ8ND4sCisJcnMyPVxFYDskPDcwPiwgdXNlPXd5MzI1LAorIworIyBsaW5lcyAyNSAgY29sdW1ucyA4MAorIword3kzMjUtMjV8d3lzZTMyNS0yNXx3eTMyNS04MHx3eXNlLTMyNXx3eXNlLTMyNSAyNSBsaW5lcywKKwlsaEAsIGxpbmVzIzI1LCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRXdHXEVlKSQ8MTAwPiwgdXNlPXd5MzI1LAorIworIyBsaW5lcyAyNSAgY29sdW1ucyAxMzIKKyMKK3d5MzI1LTI1d3x3eXNlMzI1LTI1d3x3eTMyNSAxMzIgY29sdW1ucywKKwlsaEAsIGxpbmVzIzI1LCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRXdHXEVlKSQ8MTAwPiwgdXNlPXd5MzI1LXcsCisjCisjIGxpbmVzIDI1ICBjb2x1bW5zIDEzMiAgdmIKKyMKK3d5MzI1LXctdmJ8d3kzMjUtd3ZifHd5c2UzMjUtd3ZifHd5c2UtMzI1IHdpZGUgbW9kZSByZXZlcnNlIHZpZGVvLAorCWJlbEAsIHVzZT13eTMyNS13LAorCisjCisjIGxpbmVzIDQyICBjb2x1bW5zIDgwCisjCit3eTMyNS00Mnx3eXNlMzI1LTQyfHd5c2UtMzI1IDQyIGxpbmVzLAorCWxoQCwgbGluZXMjNDIsIGx3QCwgbmxhYkAsCisJcGxuQCwgcnMzPVxFd0dcRWUpJDwxMDA+LCB1c2U9d3kzMjUsCisjCisjIGxpbmVzIDQyICBjb2x1bW5zIDEzMgorIword3kzMjUtNDJ3fHd5c2UzMjUtNDJ3fHd5c2UtMzI1IDQyIGxpbmVzIHdpZGUgbW9kZSwKKwlsaEAsIGxpbmVzIzQyLCBsd0AsIG5sYWJALAorCXBsbkAsIHJzMz1cRXdHXEVlKSQ8MTAwPiwgdXNlPXd5MzI1LXcsCisjCisjIGxpbmVzIDQyICBjb2x1bW5zIDEzMiAgdmIKKyMKK3d5MzI1LTQydy12Ynx3eTMyNS00Mnd2Ynx3eXNlLTMyNSA0MiBsaW5lcyB3aWRlIG1vZGUgdmlzdWFsIGJlbGwsCisJYmVsQCwgdXNlPXd5MzI1LXcsCisjCisjIGxpbmVzIDQzICBjb2x1bW5zIDgwCisjCit3eTMyNS00M3x3eXNlMzI1LTQzfHd5c2UtMzI1IDQzIGxpbmVzLAorCWxoQCwgbGluZXMjNDMsIGx3QCwgbmxhYkAsCisJcGxuQCwgdXNlPXd5MzI1LAorIworIyBsaW5lcyA0MyAgY29sdW1ucyAxMzIKKyMKK3d5MzI1LTQzd3x3eXNlMzI1LTQzd3x3eXNlLTMyNSA0MyBsaW5lcyB3aWRlIG1vZGUsCisJbGhALCBsaW5lcyM0MywgbHdALCBubGFiQCwKKwlwbG5ALCByczM9XEV3R1xFZSkkPDEwMD4sIHVzZT13eTMyNS13LAorIworIyBsaW5lcyA0MyAgY29sdW1ucyAxMzIgIHZiCisjCit3eTMyNS00M3ctdmJ8d3kzMjUtNDN3dmJ8d3lzZS0zMjUgNDMgbGluZXMgd2lkZSBtb2RlIHZpc3VhbCBiZWxsLAorCWJlbEAsIHVzZT13eTMyNS13LAorCisjCVd5c2UgMzcwIC0tIDI0IGxpbmUgc2NyZWVuIHdpdGggc3RhdHVzIGxpbmUuCisjCisjCVRoZSB0ZXJtaW5hbCBtYXkgaGF2ZSB0byBiZSBzZXQgZm9yIDggZGF0YSBiaXRzIGFuZCAyIHN0b3AKKyMJYml0cyBmb3IgdGhlIGFycm93IGtleXMgdG8gd29yay4KKyMKKyMJSWYgeW91IGNoYW5nZSBrZXlib2FyZHMgdGhlIHRlcm1pbmFsIHdpbGwgc2VuZCBkaWZmZXJlbnQKKyMJZXNjYXBlIHNlcXVlbmNlcy4KKyMJVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIGlzIGZvciB0aGUgYmFzaWMgdGVybWluYWwgd2l0aG91dAorIwlmdW5jdGlvbiBrZXlzLgorIworIwk8dTA+IC0+IGVudGVyIFRla3Ryb25peCA0MDEwLzQwMTQgbW9kZQorIwk8dTE+IC0+IGV4aXQgIFRla3Ryb25peCA0MDEwLzQwMTQgbW9kZQorIwk8dTI+IC0+IGVudGVyIEFTQ0lJIG1vZGUgKGZyb20gYW55IEFOU0kgbW9kZSkKKyMJPHUzPiAtPiBleGl0ICBBU0NJSSBtb2RlIChnb3RvIG5hdGl2ZSBBTlNJIG1vZGUpCisjCTx1ND4gLT4gZW50ZXIgVGVrIDQyMDcgQU5TSSBtb2RlIChmcm9tIGFueSBBTlNJIG1vZGUpCisjCTx1NT4gLT4gZXhpdCAgVGVrIDQyMDcgbW9kZSAoZ290byBuYXRpdmUgQU5TSSBtb2RlKQorIworIyBCdWc6IFRoZSA8b3A+IGNhcGFiaWxpdHkgcmVzZXRzIGF0dHJpYnV0ZXMuCit3eTM3MC1ua3x3eXNlIDM3MCB3aXRob3V0IGZ1bmN0aW9uIGtleXMsCisJYW0sIGNjYywgaHMsIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbG9ycyM2NCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIG5jdiM0OCwgcGFpcnMjNjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKJDw0MD4sIGNub3JtPVxFWzM0aFxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwxPiwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8yNWhcRVszNGwsIGRjaD1cRVslcDElZFAkPDEqPiwgZGNoMT1cRVtQJDwxPiwKKwlkY2xrPVxFWzMxaCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0kPDIqPiwgZGwxPVxFW00kPDI+LAorCWRzbD1cRVs0MGwsIGVjaD1cRVslcDElZFgkPC4xKj4sIGVkPVxFW0okPDQwPiwKKwllbD1cRVtLJDwxMD4sIGVsMT1cRVsxSyQ8MTI+LCBlbmFjcz1cRSkwLAorCWZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDMwMD4sIGZzbD1cRVsxOzI0clxFOCwKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkYCwgaHQ9XDAxMSQ8MT4sIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCQ8MSo+LCBpbD1cRVslcDElZEwkPDIqPiwgaWwxPVxFW0wkPDI+LAorCWluZD1cbiQ8Mj4sCisJaW5pdGM9XEVbNjY7JXAxJWQ7JT8lcDIlezI1MH0lPCV0JXswfSVlJXAyJXs1MDB9JTwldCV7MTZ9JWUlcDIlezc1MH0lPCV0JXszMn0lZSV7NDh9JTslPyVwMyV7MjUwfSU8JXQlezB9JWUlcDMlezUwMH0lPCV0JXs0fSVlJXAzJXs3NTB9JTwldCV7OH0lZSV7MTJ9JTslPyVwNCV7MjUwfSU8JXQlezB9JWUlcDQlezUwMH0lPCV0JXsxfSVlJXA0JXs3NTB9JTwldCV7Mn0lZSV7M30lOyV7MX0lKyUrJSslZHcsCisJaW52aXM9XEVbOG0sIGlwPSQ8MT4sIGlzMT1cRVs5MDsxInBcRVs/NVckPDY+LAorCWlzMj1cRVsyOzQ7MjA7MzA7NDBsXEVbPzE7MTA7MTZsXEVbMTJoXEVbPzc7ODsyNWgsCisJaXMzPVxFPlwwMTdcRSkwXEUoQlxFWzYzOzB3XEVbbSwgbWMwPVxFWzBpLCBtYzQ9XEVbNGksCisJbWM1PVxFWzVpLAorCW9jPVxFWzYwd1xFWzYzOzB3XEVbNjY7MTs0d1xFWzY2OzI7MTN3XEVbNjY7MzsxNndcRVs2Njs0OzQ5d1xFWzY2OzU7NTF3XEVbNjY7Njs2MXdcRVs2Njs3OzY0dywKKwlvcD1cRVttLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNJDwyPiwgcm1hY3M9Xk8sCisJcm1hbT1cRVs/N2wsIHJtY2xrPVxFWzMxbCwgcm1jdXA9XEVbIFIsIHJtaXI9XEVbNGwsCisJcm1reD1cRT4sIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEVbMTNsXEVbM2xcRSFwXEVbPzRpLCByczI9XEVbMzVoXEVbPzNsJDw4PiwKKwlyczM9XEVbPzVsLCBzYz1cRTcsIHNldGI9XEVbNjI7JXAxJWR3LCBzZXRmPVxFWzYxOyVwMSVkdywKKwlzZ3I9XEVbMCU/JXAyJXQ7NCU7JT8lcDMlcDElfCV0OzclOyU/JXA0JXQ7NSU7JT8lcDUldDsyJTslPyVwNiV0OzElOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWN1cD1cRVsgUSwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz8xbFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csIHRzbD1cRVs0MGxcRVs0MGhcRTdcRVs5OTslaSVwMSVkSCwKKwl1MD1cRVs/MzhoXEU4LCB1MT1cRVs/MzhsXEUpMCwgdTI9XEVbOTI7NTIicCwgdTM9XEV+QiwKKwl1ND1cRVs5Mjs3NiJwLCB1NT1cRSUhMVxFWzkwOzEicCwgdnBhPVxFWyVpJXAxJWRkLAorIworIwlGdW5jdGlvbiBrZXkgc2V0IGZvciB0aGUgQVNDSUkgKHd5LTUwIGNvbXBhdGlibGUpIGtleWJvYXJkCisjCVRoaXMgaXMgdGhlIGRlZmF1bHQgMzcwLgorIword3kzNzB8d3lzZTM3MHx3eTM3MC0xMDFrfFd5c2UgMzcwIHdpdGggMTAxIGtleSBrZXlib2FyZCwKKwlrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywKKwlrY3V1MT1cRVtBLCBrZGNoMT1cRU9RLCBrZGwxPVxFT1EsIGtlbnQ9XEVPTSwga2YxPVxFWz80aSwKKwlrZjEwPVxFWzIxfiwga2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwKKwlrZjE0PVxFWzI2fiwga2YxNT1cRVsyOH4sIGtmMTY9XEVbMjl+LCBrZjI9XEVbPzNpLAorCWtmMz1cRVsyaSwga2Y0PVxFW0AsIGtmNT1cRVtNLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtob21lPVxFW0gsIGtpY2gxPVxFT1AsIGtpbDE9XEVPUCwKKwlrbnA9XEVbVSwga3BwPVxFW1YsIHVzZT13eTM3MC1uaywKKyMKKyMJRnVuY3Rpb24ga2V5IHNldCBmb3IgdGhlIFZULTMyMCAoYW5kIHd5ODUpIGNvbXBhdGlibGUga2V5Ym9hcmQKKyMKK3d5MzcwLTEwNWt8V3lzZSAzNzAgd2l0aCAxMDUga2V5IGtleWJvYXJkLAorCWticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVszfiwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LCBrZjEyPVxFWzI0fiwKKwlrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LCBrZjE2PVxFWzI5fiwKKwlrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LCBrZjIwPVxFWzM0fiwKKwlrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LAorCWtobHA9XEVbMjh+LCBraG9tZT1cRVsyNn4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sCisJa3BwPVxFWzV+LCBrc2x0PVxFWzR+LCBsZjE9UEYxLCBsZjI9UEYyLCBsZjM9UEYzLCBsZjQ9UEY0LAorCXVzZT13eTM3MC1uaywgdXNlPXZ0MjIwK2tleXBhZCwKKyMKKyMJRnVuY3Rpb24ga2V5IHNldCBmb3IgdGhlIFBDIGNvbXBhdGlibGUga2V5Ym9hcmQKKyMKK3d5MzcwLUVQQ3xXeXNlIDM3MCB3aXRoIDEwMiBrZXkga2V5Ym9hcmQsCisJa2JzPV5ILCBrY2J0PVxFW1osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2VuZD1cRVsxfiwga2VudD1cRU9NLCBrZjE9XEVPUCwga2YxMD1cRVsyMX4sCisJa2YxMT1cRVsyM34sIGtmMTI9XEVbMjR+LCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLAorCWtmNT1cRVtNLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LAorCWtob21lPVxFW0gsIGtpY2gxPVxFWzJ+LCBrbnA9XEVbVSwga3BwPVxFW1YsIHVzZT13eTM3MC1uaywKKyMKKyMJV3lzZSAzNzAgd2l0aCB2aXN1YWwgYmVsbC4KK3d5MzcwLXZifFd5c2UgMzcwIHdpdGggdmlzaWJsZSBiZWxsLAorCWJlbEAsIHVzZT13eTM3MCwKKyMKKyMJV3lzZSAzNzAgaW4gMTMyLWNvbHVtbiBtb2RlLgord3kzNzAtd3xXeXNlIDM3MCBpbiAxMzItY29sdW1uIG1vZGUsCisJY29scyMxMzIsIHdzbCMxMzIsCisJcnMyPVxFWzM1aFxFWz8zaCQ8NzA+LCB1c2U9d3kzNzAsCisjCisjCVd5c2UgMzcwIGluIDEzMi1jb2x1bW4gbW9kZSB3aXRoIHZpc3VhbCBiZWxsLgord3kzNzAtd3ZifFd5c2UgMzcwIHdpdGggdmlzaWJsZSBiZWxsIDEzMi1jb2x1bW5zLAorCWZsYXNoPVxFWzMwaFxFXCxcRVszMGwkPDMwMD4sIHVzZT13eTM3MC13LAord3kzNzAtcnZ8V3lzZSAzNzAgcmV2ZXJzZSB2aWRlbywKKwlyczM9XEVbMzJoXEVbPzVoLCB1c2U9d3kzNzAsCisjCisjCVd5c2UgOTlndCBUZWt0cm9uaXggNDAxMC80MDE0IGVtdWxhdG9yLAorIword3k5OWd0LXRla3xXeXNlIDk5Z3QgVGVrdHJvbml4IDQwMTAvNDAxNCBlbXVsYXRvciwKKwlhbSwgb3MsCisJY29scyM3NCwgbGluZXMjMzUsCisJYmVsPV5HLCBjbGVhcj1cRV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1ccywKKwljdXA9XDAzNSV7MzA0MH0lezg5fSVwMSUqJS0lUHklcDIlezU1fSUqJVB4JWd5JXsxMjh9JS8lezMxfSUmJXszMn0lKyVjJWd5JXszfSUmJXs0fSUqJWd4JXszfSUmJSslezk2fSUrJWMlZ3klezAwNH0lLyV7MzF9JSYlezk2fSUrJWMlZ3glezEyOH0lLyV7MzF9JSYlezMyfSUrJWMlZ3glezAwNH0lLyV7MzF9JSYlezY0fSUrJWNcMDM3LAorCWN1dTE9XkssIGZmPV5MLAorCWhkPVwwMzZISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFwwMzcsCisJaG9tZT1eXTdgeCBAXDAzNywKKwlodT1cMDM2RERERERERERERERERERERERERERERERERERERERERERERERERERERERcMDM3LAorCWlzMj1cRTgsIG5lbD1eTV5KLCB1MD1cRX4+XEU4LCB1MT1cRVs0MmgsCisjCisjCVd5c2UgMTYwIFRla3Ryb25peCA0MDEwLzQwMTQgZW11bGF0b3IsCisjCit3eTE2MC10ZWt8V3lzZSAxNjAgVGVrdHJvbml4IDQwMTAvNDAxNCBlbXVsYXRvciwKKwljdXA9XDAzNSV7MzEwM30lezkxfSVwMSUqJS0lUHklcDIlezU1fSUqJVB4JWd5JXsxMjh9JS8lezMxfSUmJXszMn0lKyVjJWd5JXszfSUmJXs0fSUqJWd4JXszfSUmJSslezk2fSUrJWMlZ3klezAwNH0lLyV7MzF9JSYlezk2fSUrJWMlZ3glezEyOH0lLyV7MzF9JSYlezMyfSUrJWMlZ3glezAwNH0lLyV7MzF9JSYlezY0fSUrJWNcMDM3LAorCWhvbWU9Xl04YGcgQFwwMzcsIHVzZT13eTk5Z3QtdGVrLAorIworIwlXeXNlIDM3MCBUZWt0cm9uaXggNDAxMC80MDE0IGVtdWxhdG9yLAorIword3kzNzAtdGVrfFd5c2UgMzcwIFRla3Ryb25peCA0MDEwLzQwMTQgZW11bGF0b3IsCisJYW0sIG9zLAorCWNvbHMjODAsIGxpbmVzIzM2LAorCWJlbD1eRywgY2xlYXI9XEVeTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XHMsCisJY3VwPVwwMzUlezc3NX0lezEwOH0lcDElKiV7NX0lLyUtJVB5JXAyJXs2NH0lKiV7NH0lKyV7NX0lLyVQeCVneSV7MzJ9JS8lezMxfSUmJXszMn0lKyVjJWd5JXszMX0lJiV7OTZ9JSslYyVneCV7MzJ9JS8lezMxfSUmJXszMn0lKyVjJWd4JXszMX0lJiV7NjR9JSslY1wwMzcsCisJY3V1MT1eSywgZmY9XkwsCisJaGQ9XDAzNkhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFwwMzcsCisJaG9tZT1eXThnIEBcMDM3LAorCWh1PVwwMzZEREREREREREREREREREREREREREREREREREREREREREREREREREREXDAzNywKKwlpczI9XEU4LCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkksIGtjdXUxPV5LLAorCW5lbD1eTV5KLCB1MD1cRVs/MzhoXEU4LCB1MT1cRVs/MzhsXEUpMCwKKworIyBWZW5kb3Itc3VwcGxpZWQgV3lzZSBlbnRyaWVzIGVuZCBoZXJlLgorCisjCisjVElUTEU6ICBURVJNSU5GTyBFTlRSWSBXWTUyMAorI0RBVEU6ICAgOC81LzkzCisjIFRoZSBXWTUyMCB0ZXJtaW5mbyBpcyBiYXNlZCBvbiB0aGUgV1kyODUgZW50cnkgcHVibGlzaGVkIG9uIHRoZSBXWVNFCisjIEJCUyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBtb3JlIGZ1bmN0aW9uIGtleXMgYW5kIHNwZWNpYWwga2V5cy4KKyMKKyMgICAgICAgICAgICAgICByczEgLT4gc2V0IHBlcnNvbmFsaXR5CisjICAgICAgICAgICAgICAgcnMyIC0+IHNldCBudW1iZXIgb2YgY29sdW1ucworIyAgICAgICAgICAgICAgIHJzMyAtPiBzZXQgbnVtYmVyIG9mIGxpbmVzCisjICAgICAgICAgICAgICAgaXMxIC0+IHNlbGVjdCB0aGUgcHJvcGVyIGZvbnQKKyMgICAgICAgICAgICAgICBpczIgLT4gZG8gdGhlIGluaXRpYWxpemF0aW9uCisjICAgICAgICAgICAgICAgaXMzIC0+IElmIHRoaXMgc3RyaW5nIGlzIGVtcHR5IHRoZW4gcnMzIGdldHMgc2VudC4KKyMKKyMgICAgICAgV3lzZSA1MjAgZW11bGF0aW5nIGEgdnQ0MjAgNyBiaXQgbW9kZSB3aXRoIGRlZmF1bHQgQU5TSSBrZXlib2FyZAorIyAgICAgICAtIFRoZSBCUyBrZXkgaXMgcHJvZ3JhbW1lZCB0byBnZW5lcmF0ZSBCUyBpbiBzbWN1cCBzaW5jZQorIyAgICAgICAgIGlzMiBkb2Vzbid0IHNlZW0gdG8gd29yay4KKyMgICAgICAgLSBSZW1vdmUgYW5kIHNoaWZ0L1JlbW92ZTogZGVsZXRlIGEgY2hhcmFjdGVyCisjICAgICAgIC0gSW5zZXJ0IDogZW50ZXIgaW5zZXJ0IG1vZGUKKyMgICAgICAgLSBGaW5kICAgOiBkZWxldGUgdG8gZW5kIG9mIGZpbGUKKyMgICAgICAgLSBTZWxlY3QgOiBjbGVhciBhIGxpbmUKKyMgICAgICAgLSBGMTEsIEYxMiwgRjEzOiBzZW5kIGRlZmF1bHQgc2VxdWVuY2VzIChub3QgRVNDLCBCUywgTEYpCisjICAgICAgIC0gRjE0IDogSG9tZSBrZXkKKyMgICAgICAgLSBCb3R0b20gc3RhdHVzIGxpbmUgKGhvc3Qgd3JpdGFibGUgbGluZSkgaXMgdXNlZC4KKyMgICAgICAgLSBzbWt4LHJta3ggYXJlIHJlbW92ZWQgYmVjYXVzZSB0aGlzIHdvdWxkIHB1dCB0aGUgbnVtZXJpYworIyAgICAgICAgIGtleXBhZCBpbiBEZWMgYXBwbGljYXRpb24gbW9kZSB3aGljaCBkb2Vzbid0IHNlZW0gdG8gd29yaworIyAgICAgICAgIHdpdGggU0NPIGFwcGxpY2F0aW9ucy4KKyMKK3d5NTIwfHd5c2U1MjB8d3lzZSA1MjAsCisJYW0sIGhzLCBrbSwgbWM1aSwgbWlyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKJDw0MD4sIGNub3JtPVxFWzM0aFxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciQ8MjA+LCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs/MjVoXEVbMzRsLCBkY2g9XEVbJXAxJWRQJDwzPiwgZGNoMT1cRVtQJDwzMD4sCisJZGltPVxFWzJtLCBkbD1cRVslcDElZE0kPDIqPiwgZGwxPVxFW00kPDI+LCBkc2w9XEVbMCR+LAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0okPDQwPiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWVuYWNzPVxFKTAsIGZzbD1cRVswJH0sIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRgLCBodD1eSSwKKwlodHM9XEVILCBpY2g9XEVbJXAxJWRAJDwyPiwgaWw9XEVbJXAxJWRMJDwzKj4sCisJaWwxPVxFW0wkPDM+LCBpbmQ9XG4kPDI+LCBpbnZpcz1cRVs4bSwgaXA9JDw0PiwgaXMxPVxFWz81VywKKwlpczI9XEVbMjs0OzIwOzMwbFxFWz8xOzQ7MTA7MTZsXEVbMTJoXEVbPzc7ODsyNTs2N2gsCisJaXMzPVxFPlxFKEJcRSkwXDAxN1xFW20sIGticz1eSCwga2NidD1cRVtaLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFWzN+LCBrZWQ9XEVbMX4sCisJa2VsPVxFWzR+LCBrZW50PVxFT00sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjIwPVxFWzM0fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwKKwlrZjk9XEVbMjB+LCBrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwga2hvbWU9XEVbMjZ+LAorCWtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3NsdD1cRVs0fiwgbGYxPVBGMSwKKwlsZjI9UEYyLCBsZjM9UEYzLCBsZjQ9UEY0LCBtYzA9XEVbMGksIG1jND1cRVs0aSwgbWM1PVxFWzVpLAorCXJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0kPDI+LCBybWFjcz1eTywgcm1hbT1cRVs/N2wsCisJcm1jdXA9XEVbIFIsIHJtaXI9XEVbNGwsIHJtc289XEVbbSwgcm11bD1cRVsyNG0sCisJcnMxPVxFWzEzbFxFWzNsXEVcXFxFWzYzOzEicFxFWyFwLCByczI9XEVbMzVoXEVbPzNsLAorCXJzMz1cRVs/NWxcRVs0N2hcRVs0MGxcRVtyLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMiV0OzQlOyU/JXAzJXAxJXwldDs3JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDYldDsxJTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwKKwlzbWN1cD1cRVsgUVxFWz82Nzs4aCwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csIHRzbD1cRVsyJH5cRVsxJH1cRVslaSVwMSVkYCwKKwl2cGE9XEVbJWklcDElZGQsIHVzZT12dDIyMCtrZXlwYWQsCisjCisjICAgICAgIFd5c2UgNTIwIHdpdGggMjQgZGF0YSBsaW5lcyBhbmQgc3RhdHVzICh0ZXJtaW5hbCBzdGF0dXMpCit3eTUyMC0yNHx3eXNlNTIwLTI0fHd5c2UgNTIwIHdpdGggMjQgZGF0YSBsaW5lcywKKwloc0AsCisJZHNsQCwgZnNsQCwgcnMzPVxFWz81bFxFWzQ3aFxFWzQwbFxFWzE7MjRyLCB0c2xALAorCXVzZT13eTUyMCwKKyMKKyMgICAgICAgV3lzZSA1MjAgd2l0aCB2aXN1YWwgYmVsbC4KK3d5NTIwLXZifHd5c2U1MjAtdmJ8d3lzZSA1MjAgd2l0aCB2aXNpYmxlIGJlbGwsCisJZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MTAwPiwgdXNlPXd5NTIwLAorIworIyAgICAgICBXeXNlIDUyMCBpbiAxMzItY29sdW1uIG1vZGUuCit3eTUyMC13fHd5c2U1MjAtd3x3eXNlIDUyMCBpbiAxMzItY29sdW1uIG1vZGUsCisJY29scyMxMzIsIHdzbCMxMzIsCisJZGNoPVxFWyVwMSVkUCQ8Nz4sIGRjaDE9XEVbUCQ8Nz4sIGljaD1cRVslcDElZEAkPDc+LAorCWlwPSQ8Nz4sIHJzMj1cRVszNWhcRVs/M2gsIHVzZT13eTUyMCwKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gMTMyLWNvbHVtbiBtb2RlIHdpdGggdmlzdWFsIGJlbGwuCit3eTUyMC13dmJ8d3lzZTUyMC13dmJ8d3lzZSA1MjAgd2l0aCB2aXNpYmxlIGJlbGwgMTMyLWNvbHVtbnMsCisJZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MTAwPiwgdXNlPXd5NTIwLXcsCisjCisjCisjICAgICAgIFd5c2UgNTIwIGVtdWxhdGluZyBhIHZ0NDIwIDcgYml0IG1vZGUuCisjICAgICAgIFRoZSBERUwga2V5IGlzIHByb2dyYW1tZWQgdG8gZ2VuZXJhdGUgQlMgaW4gaXMyLgorIyAgICAgICBXaXRoIEVQQyBrZXlib2FyZC4KKyMgICAgICAgLSAnRW5kJyBrZXkgd2lsbCBjbGVhciB0aWxsIGVuZCBvZiBsaW5lIG9uIEVQQyBrZXlib2FyZAorIyAgICAgICAtIFNoaWZ0L0VuZCA6IGlnbm9yZWQuCisjICAgICAgIC0gSW5zZXJ0IDogZW50ZXIgaW5zZXJ0IG1vZGUuCisjICAgICAgIC0gRGVsZXRlIDogZGVsZXRlIGEgY2hhcmFjdGVyIChoYXZlIHRvIGNoYW5nZSBpbnRlcnJ1cHQgY2hhcmFjdGVyCisjICAgICAgICAgICAgICAgICAgdG8gQ1RSTC1DOiBzdHR5IGludHIgJ15jJykgZm9yIGl0IHRvIHdvcmsgc2luY2UgdGhlCisjICAgICAgICAgICAgICAgICAgRGVsZXRlIGtleSBzZW5kcyA3RkguCit3eTUyMC1lcGN8d3lzZTUyMC1lcGN8d3lzZSA1MjAgd2l0aCBFUEMga2V5Ym9hcmQsCisJa2RjaDE9XDE3Nywga2VsPVxFWzR+LCBrZW5kPVxFWzR+LCBrZjA9XEVbMjF+LCBrZjE9XEVbMTF+LAorCWtmMj1cRVsxMn4sIGtmMz1cRVsxM34sIGtmND1cRVsxNH4sIGtmNT1cRVsxNX4sIGtob21lPVxFW0gsCisJdXNlPXd5NTIwLAorIworIyAgICAgICBXeXNlIDUyMCB3aXRoIDI0IGRhdGEgbGluZXMgYW5kIHN0YXR1cyAodGVybWluYWwgc3RhdHVzKQorIyAgICAgICB3aXRoIEVQQyBrZXlib2FyZC4KK3d5NTIwLWVwYy0yNHx3eXNlNTIwLXBjLTI0fHd5c2UgNTIwIHdpdGggMjQgZGF0YSBsaW5lcyBhbmQgRVBDIGtleWJvYXJkLAorCWhzQCwKKwlkc2xALCBmc2xALCByczM9XEVbPzVsXEVbNDdoXEVbNDBsXEVbMTsyNHIsIHRzbEAsCisJdXNlPXd5NTIwLWVwYywKKyMKKyMgICAgICAgV3lzZSA1MjAgd2l0aCB2aXN1YWwgYmVsbC4KK3d5NTIwLWVwYy12Ynx3eXNlNTIwLXBjLXZifHd5c2UgNTIwIHdpdGggdmlzaWJsZSBiZWxsIGFuZCBFUEMga2V5Ym9hcmQsCisJZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MTAwPiwgdXNlPXd5NTIwLWVwYywKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gMTMyLWNvbHVtbiBtb2RlLgord3k1MjAtZXBjLXd8d3lzZTUyMC1lcGMtd3x3eXNlIDUyMCBpbiAxMzItY29sdW1uIG1vZGUgd2l0aCBFUEMga2V5Ym9hcmQsCisJY29scyMxMzIsIHdzbCMxMzIsCisJZGNoPVxFWyVwMSVkUCQ8Nz4sIGRjaDE9XEVbUCQ8Nz4sIGljaD1cRVslcDElZEAkPDc+LAorCWlwPSQ8Nz4sIHJzMj1cRVszNWhcRVs/M2gsIHVzZT13eTUyMC1lcGMsCisjCisjICAgICAgIFd5c2UgNTIwIGluIDEzMi1jb2x1bW4gbW9kZSB3aXRoIHZpc3VhbCBiZWxsLgord3k1MjAtZXBjLXd2Ynx3eXNlNTIwLXAtd3ZifHd5c2UgNTIwIHdpdGggdmlzaWJsZSBiZWxsIDEzMi1jb2x1bW5zIGFuZCBFUEMga2V5Ym9hcmQsCisJZmxhc2g9XEVbMzBoXEVcLFxFWzMwbCQ8MTAwPiwgdXNlPXd5NTIwLWVwYy13LAorIworIyAgICAgICBXeXNlIDUyMCBpbiA4MC1jb2x1bW4sIDM2IGxpbmVzCit3eTUyMC0zNnx3eXNlNTIwLTM2fHd5c2UgNTIwIHdpdGggMzYgZGF0YSBsaW5lcywKKwloc0AsCisJbGluZXMjMzYsCisJZHNsQCwgZnNsQCwgcnMzPVxFWz81bFxFWzM2KnxcRVszNnRcRVs0MGxcRVsxOzM2ciwgdHNsQCwKKwl1c2U9d3k1MjAsCisjCisjICAgICAgIFd5c2UgNTIwIGluIDgwLWNvbHVtbiwgNDggbGluZXMKK3d5NTIwLTQ4fHd5c2U1MjAtNDh8d3lzZSA1MjAgd2l0aCA0OCBkYXRhIGxpbmVzLAorCWhzQCwKKwlsaW5lcyM0OCwKKwlkc2xALCBmc2xALCByczM9XEVbPzVsXEVbNDgqfFxFWzQ4dFxFWzQwbFxFWzE7NDhyLCB0c2xALAorCXVzZT13eTUyMCwKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gMTMyLWNvbHVtbiwgMzYgbGluZXMKK3d5NTIwLTM2d3x3eXNlNTIwLTM2d3x3eXNlIDUyMCB3aXRoIDEzMiBjb2x1bW5zIGFuZCAzNiBkYXRhIGxpbmVzLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCXJzMj1cRVs/M2gsCisJcnMzPVxFWz81bFxFWzM2KnxcRVszNnRcRVs0MGxcRVsxOzM2clxFWzEzMiR8LAorCXVzZT13eTUyMC0zNiwKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gMTMyLWNvbHVtbiwgNDggbGluZXMKK3d5NTIwLTQ4d3x3eXNlNTIwLTQ4d3x3eXNlIDUyMCB3aXRoIDQ4IGRhdGEgbGluZXMsCisJY29scyMxMzIsIHdzbCMxMzIsCisJcnMyPVxFWz8zaCwKKwlyczM9XEVbPzVsXEVbNDgqfFxFWzQ4dFxFWzQwbFxFWzE7NDhyXEVbMTMyJHwsCisJdXNlPXd5NTIwLTQ4LAorIworIworIyAgICAgICBXeXNlIDUyMCBpbiA4MC1jb2x1bW4sIDM2IGxpbmVzIHdpdGggRVBDIGtleWJvYXJkCit3eTUyMC0zNnBjfHd5c2U1MjAtMzZwY3x3eXNlIDUyMCB3aXRoIDM2IGRhdGEgbGluZXMgYW5kIEVQQyBrZXlib2FyZCwKKwloc0AsCisJbGluZXMjMzYsCisJZHNsQCwgZnNsQCwgcnMzPVxFWz81bFxFWzM2KnxcRVszNnRcRVs0MGxcRVsxOzM2ciwgdHNsQCwKKwl1c2U9d3k1MjAtZXBjLAorIworIyAgICAgICBXeXNlIDUyMCBpbiA4MC1jb2x1bW4sIDQ4IGxpbmVzIHdpdGggRVBDIGtleWJvYXJkCit3eTUyMC00OHBjfHd5c2U1MjAtNDhwY3x3eXNlIDUyMCB3aXRoIDQ4IGRhdGEgbGluZXMgYW5kIEVQQyBrZXlib2FyZCwKKwloc0AsCisJbGluZXMjNDgsCisJZHNsQCwgZnNsQCwgcnMzPVxFWz81bFxFWzQ4KnxcRVs0OHRcRVs0MGxcRVsxOzQ4ciwgdHNsQCwKKwl1c2U9d3k1MjAtZXBjLAorIworIyAgICAgICBXeXNlIDUyMCBpbiAxMzItY29sdW1uLCAzNiBsaW5lcyB3aXRoIEVQQyBrZXlib2FyZAord3k1MjAtMzZ3cGN8d3lzZTUyMC0zNndwY3x3eXNlIDUyMCB3aXRoIDM2IGRhdGEgbGluZXMgYW5kIEVQQyBrZXlib2FyZCwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlyczI9XEVbPzNoLAorCXJzMz1cRVs/NWxcRVszNip8XEVbMzZ0XEVbNDBsXEVbMTszNnJcRVsxMzIkfCwKKwl1c2U9d3k1MjAtMzZwYywKKyMKKyMgICAgICAgV3lzZSA1MjAgaW4gMTMyLWNvbHVtbiwgNDggbGluZXMgd2l0aCBFUEMga2V5Ym9hcmQKK3d5NTIwLTQ4d3BjfHd5c2U1MjAtNDh3cGN8d3lzZSA1MjAgd2l0aCA0OCBkYXRhIGxpbmVzIGFuZCBFUEMga2V5Ym9hcmQsCisJY29scyMxMzIsIHdzbCMxMzIsCisJcnMyPVxFWz8zaCwKKwlyczM9XEVbPzVsXEVbNDgqfFxFWzQ4dFxFWzQwbFxFWzE7NDhyXEVbMTMyJHwsCisJdXNlPXd5NTIwLTQ4cGMsCisKKyMgRnJvbTogSm9obiBHaWxtb3JlIDxob3B0b2FkIWdudUBsbGwtY3JnLmFycGE+CisjICh3eXNlLXZwOiByZW1vdmVkIDxpZj0vdXNyL3NoYXJlL3RhYnNldC93eXNlLWFkZHM+LCB0aGVyZSdzIG5vIHN1Y2gKKyMgZmlsZSBhbmQgd2UgZG9uJ3Qga25vdyB3aGF0IDxodHM+IGlzIC0tIGVzcikKK3d5c2UtdnB8V3lzZSA1MCBpbiBBRERTIFZpZXdwb2ludCBlbXVsYXRpb24gbW9kZSB3aXRoICJlbmhhbmNlIiBvbiwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eRiwKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5aLCBkY2gxPVxFVywKKwlkbDE9XEVsLCBlZD1cRWssIGVsPVxFSywgaG9tZT1eQSwgaHQ9XkksIGlsMT1cRU0sIGluZD1eSiwKKwlpczI9XEVgXDpcRWA5XDAxN1xFciwga2JzPV5ILCBrY3ViMT1eVSwga2N1ZDE9XkosIGtjdWYxPV5GLAorCWtjdXUxPV5aLCBraG9tZT1eQSwgbGw9XkFeWiwgbmVsPV5NXkosIHJtaXI9XEVyLCBybXNvPV5PLAorCXJtdWw9Xk8sIHJzMT1cRWBcOlxFYDlcMDE3XEVyLCBzZ3IwPV5PLCBzbWlyPVxFcSwgc21zbz1eTiwKKwlzbXVsPV5OLAorCit3eTc1YXB8d3lzZTc1YXB8d3ktNzVhcHx3eXNlLTc1YXB8V3lzZSBXWS03NSBBcHBsaWNhdGlvbnMgYW5kIEN1cnNvciBrZXlwYWQsCisJaXMyPVxFWzE7MjRyXEVbPzEwOzNsXEVbPzE7MjVoXEVbNGxcRVttXEUoQlxFPSwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2hvbWU9XEVPSCwgcm1reD1cRVs/MWxcRT4kPDEwLz4sIHNta3g9XEVbPzFoXEU9JDwxMC8+LAorCXVzZT13eTc1LAorCisjIEZyb206IEVyaWMgRnJldWRlbnRoYWwgPGZyZXVkZW50QGVyaWMudWx0cmEubnl1LmVkdT4KK3d5MTAwcXxXeXNlIDEwMCBmb3IgUXVvdHJvbiwKKwlPVGJzLAorCWNvbHMjODAsIGxpbmVzIzI0LCB4bWMjMSwKKwljYnQ9XEVJLCBjbGVhcj1eWiwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCwgaG9tZT1eXiwgaWwxPVxFRSwgaW52aXNALAorCWlzMj1cRWBcOlwwXEVDXEVERlxFMFxFJ1xFKFxFQTIxLCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkwsIGtjdXUxPV5LLCByaT1cRWosIHJtaXI9XEVyLCBzbWlyPVxFcSwgdXNlPWFkbStzZ3IsCisKKyMjIyMgS2VybWl0IHRlcm1pbmFsIGVtdWxhdGlvbnMKKyMKKyMgT2Jzb2xldGUgS2VybWl0IHZlcnNpb25zIG1heSBiZSBsaXN0ZWQgaW4gdGhlIHNlY3Rpb24gZGVzY3JpYmluZyBvYnNvbGV0ZQorIyBub24tQU5TSSB0ZXJtaW5hbCBlbXVsYXRvcnMgbGF0ZXIgaW4gdGhlIGZpbGUuCisjCisKKyMgS0VSTUlUIHN0YW5kYXJkIGFsbCB2ZXJzaW9ucy4KKyMgU3RyYWlnaHQgYXNjaWkga2V5Ym9hcmQuIDpzcj1cRUk6IG5vdCBhdmFpbC4gbWFueSB2ZXJzaW9ucyArIGJ1ZyBwcm9uZSBpbiB2aS4KKyMgKGtlcm1pdDogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPV5IaF5Kal5La15MbF5eSDoiIC0tIGVzcikKKyMgRnJvbTogZ3JlZyBzbWFsbCA8Z3RzQHBvcHVsaS5iZXJrZWxleS5lZHU+IDktMjUtODQKK2tlcm1pdHxzdGFuZGFyZCBrZXJtaXQsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1cRUUsIGN1YjE9XkgsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBlZD1cRUosCisJZWw9XEVLLCBob21lPVxFSCwgaXMyPUswIFN0YW5kYXJkIEtlcm1pdCAgOS0yNS04NFxuLAorCWtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBraG9tZT1eXiwKK2tlcm1pdC1hbXxzdGFuZGFyZCBrZXJtaXQgcGx1cyBhdXRvLW1hcmdpbiwKKwlhbSwKKwlpczI9SzEgU3RhbmRhcmQgS2VybWl0IHBsdXMgQXV0b21hdGljIE1hcmdpbnNcbiwKKwl1c2U9a2VybWl0LAorIyBJQk1QQyBLZXJtaXQgMS4yLgorIyBCdWdzOiA8ZWQ+LCA8ZWw+OiBkbyBub3Qgd29yayBleGNlcHQgYXQgYmVnaW5uaW5nIG9mIGxpbmUhICA8Y2xlYXI+IGRvZXMKKyMgbm90IHdvcmssIGJ1dCBmYWtlIHdpdGggOmNsPVxFSFxFSiAoc2luY2UgOmNkPVxFSjogd29ya3MgYXQgYmVnaW5uaW5nIG9mCisjIGxpbmUpLgorIyBGcm9tOiBncmVnIHNtYWxsIDxndHNAcG9wdWxpLmJlcmtlbGV5LmVkdT4gOC0zMC04NAorcGNrZXJtaXR8cGNrZXJtaXQxMnxVQ0IgSUJNUEMgS2VybWl0IDEuMiwKKwlhbSwKKwlsaW5lcyMyNSwKKwljbGVhcj1cRUhcRUosIGVkQCwgZWxALAorCWlzMj1LMiBVQ0IgSUJNUEMgS2VybWl0IDEuMiAgOC0zMC04NFxuLCB1c2U9a2VybWl0LAorIyBJQk1QQyBLZXJtaXQgMS4yMAorIyBDYW5ub3QgdXNlIGxpbmUgMjUsIG5vdyBhY3RzIGZ1bm55IGxpa2UgYW5zaSBzcGVjaWFsIHNjcm9sbGluZyByZWdpb24uCisjIEluaXRpYWxpemF0aW9uIG11c3QgZXNjYXBlIGZyb20gdGhhdCByZWdpb24gYnkgY3Vyc29yIHBvc2l0aW9uIHRvIGxpbmUgMjQuCisjIENhbm5vdCB1c2UgY2hhcmFjdGVyIGluc2VydCBiZWNhdXNlIDEuMjAgZ29lcyBjcmF6eSBpZiBpbnNlcnQgYXQgY29sIDgwLgorIyBEb2VzIG5vdCB1c2UgOmFtOiBiZWNhdXNlIGF1dG93cmFwIGlzIGxvc3Qgd2hlbiBrZXJtaXQgZHJvcHBlZCBhbmQgcmVzdGFydGVkLgorIyBGcm9tOiBncmVnIHNtYWxsIDxndHNAcG9wdWxpLmJlcmtlbGV5LmVkdT4gMTItMTktODQKK3Bja2VybWl0MTIwfFVDQiBJQk1QQyBLZXJtaXQgMS4yMCwKKwlpdCM4LCBsaW5lcyMyNCwKKwljdWQxPVxFQiwgY3Z2aXM9XEVPXEVxXEVFSzMsIGRjaDE9XEVOLCBkbDE9XEVNLCBodD1eSSwKKwlpbDE9XEVMLAorCWlzMj1cRU9cRXFcRUpcRVk3IEszIFVDQiBJQk1QQyBLZXJtaXQgMS4yMCAgMTItMTktODRcbiwKKwlybWlyQCwgcm1zbz1cRXEsIHNtaXJALCBzbXNvPVxFcCwgdXNlPWtlcm1pdCwKKyMgTVMtRE9TIEtlcm1pdCAyLjI3IGZvciB0aGUgSUJNUEMKKyMgU3RyYWlnaHQgYXNjaWkga2V5Ym9hcmQuIDpzcj1cRUk6IG5vdCBhdmFpbC4gbWFueSB2ZXJzaW9ucyArIGJ1ZyBwcm9uZSBpbiB2aS4KKyMgQ2Fubm90IHVzZSBsaW5lIDI1LCBub3cgYWN0cyBmdW5ueSBsaWtlIGFuc2kgc3BlY2lhbCBzY3JvbGxpbmcgcmVnaW9uLgorIyBJbml0aWFsaXphdGlvbiBtdXN0IGVzY2FwZSBmcm9tIHRoYXQgcmVnaW9uIGJ5IGN1cnNvciBwb3NpdGlvbiB0byBsaW5lIDI0LgorIyBEb2VzIG5vdCB1c2UgYW06IGJlY2F1c2UgYXV0b3dyYXAgaXMgbG9zdCB3aGVuIGtlcm1pdCBkcm9wcGVkIGFuZCByZXN0YXJ0ZWQuCisjIFJldmVyc2UgdmlkZW8gZm9yIHN0YW5kb3V0IGxpa2UgSDE5LgorIyAobXNrMjI3OiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkhoXkpqXktrXkxsXl5IOiIgLS0gZXNyKQorIyBGcm9tOiBncmVnIHNtYWxsIDxndHNAcG9wdWxpLmJlcmtlbGV5LmVkdT4gMy0xNy04NQorbXNrMjI3fG1za2VybWl0MjI3fE1TLURPUyBLZXJtaXQgMi4yNyBmb3IgdGhlIElCTVBDLAorCU9UYnMsIGFtQCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1cRUUsIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwKKwljdnZpcz1cRU9cRXFcRUdcRXdLNCwgZGNoMT1cRU4sIGRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLAorCWhvbWU9XEVILCBodD1eSSwgaWwxPVxFTCwKKwlpczI9XEVPXEVxXEVHXEV3XEVKXEVZNyBLNCBNUyBLZXJtaXQgMi4yNyBmb3IgdGhlIElCTVBDIDMtMTctODVcbiwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2hvbWU9Xl4sIHJjPVxFaywKKwlybWlyPVxFTywgcm1zbz1cRXEsIHNjPVxFaiwgc21pcj1cRUAsIHNtc289XEVwLAorIyBNUy1ET1MgS2VybWl0IDIuMjcgd2l0aCBhdXRvbWF0aWMgbWFyZ2lucworIyBGcm9tOglncmVnIHNtYWxsIDxndHNAcG9wdWxpLmJlcmtlbGV5LmVkdT4gMy0xNy04NQorbXNrMjI3YW18bXNrZXJtaXQyMjdhbXxVQ0IgTVMtRE9TIEtlcm1pdCAyLjI3IHdpdGggYXV0b21hdGljIG1hcmdpbnMsCisJYW0sCisJY3Z2aXM9XEVPXEVxXEVHXEV2SzUsCisJaXMyPVxFT1xFcVxFR1xFdlxFSlxFWTcgSzUgTVMgS2VybWl0IDIuMjcgK2F1dG9tYXRpYyBtYXJnaW5zIDMtMTctODVcbiwKKwl1c2U9bXNrMjI3LAorIyBNUy1ET1MgS2VybWl0IDIuMjcgVUNCIDIyNy4xNCBmb3IgdGhlIElCTSBQQworIyBBdXRvbWF0aWMgbWFyZ2lucyBub3cgZGVmYXVsdC4gIFVzZSBhbnNpIDxzZ3I+IGZvciBoaWdobGlnaHRzLgorIyBEZWZpbmUgZnVuY3Rpb24ga2V5cy4KKyMgKG1zazIyNzE0OiByZW1vdmVkIG9ic29sZXRlICI6a24jMTA6IiAtLSBlc3IpCisjIEZyb206IGdyZWcgc21hbGwgPGd0c0Bwb3B1bGkuYmVya2VsZXkuZWR1PiAzLTE3LTg1Cittc2syMjcxNHxtc2tlcm1pdDIyNzE0fFVDQiBNUy1ET1MgS2VybWl0IDIuMjcgVUNCIDIyNy4xNCBJQk0gUEMsCisJYW0sCisJYm9sZD1cRVsxbSwgY3Z2aXM9XEVPXEVxXEVHXEV2SzYsCisJaXMyPVxFT1xFcVxFR1xFdlxFSlxFWTcgSzYgTVMgS2VybWl0IDIuMjcgVUNCIDIyNy4xNCBJQk0gUEMgMy0xNy04NVxuLAorCWtmMD1cRTAsIGtmMT1cRTEsIGtmMj1cRTIsIGtmMz1cRTMsIGtmND1cRTQsIGtmNT1cRTUsIGtmNj1cRTYsCisJa2Y3PVxFNywga2Y4PVxFOCwga2Y5PVxFOSwgcmV2PVxFWzdtLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sIHNtc289XEVbMW0sIHNtdWw9XEVbNG0sIHVzZT1tc2tlcm1pdDIyNywKKyMgVGhpcyB3YXMgZGVzaWduZWQgZm9yIGEgVlQzMjAgZW11bGF0b3IsIGJ1dCBpdCBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnQKKyMgYXQgc3VwcG9ydCBmb3IgdGhlIFZUMzIwIGl0c2VsZi4KKyMgUGxlYXNlIHNlbmQgY2hhbmdlcyB3aXRoIGV4cGxhbmF0aW9ucyB0byBidWctZ251LWVtYWNzQHByZXAuYWkubWl0LmVkdS4KKyMgKHZ0MzIwLWszOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK3Z0MzIwLWszfE1TLUtlcm1pdCAzLjAwJ3MgdnQzMjAgZW11bGF0aW9uLAorCWFtLCBlc2xvaywgaHMsIGttLCBtaXIsIG1zZ3IsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjNDksIHBiIzk2MDAsIHZ0IzMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbWRjaD1cRSwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZHNsPVxFWzAkfiwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywKKwlmbGFzaD1cRVs/NWhcRVs/NWxcRVs/NWhcRVs/NWxcRVs/NWhcRVs/NWwsCisJZnNsPVxFWzAkfSwgaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwKKwlpczI9XEU+XEUgRlxFWz8xbFxFWz83aFxFW3JcRVsyJH4sIGticz1eSCwga2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZGwxPVxFWzN+LCBrZjA9XEVbMjF+LAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjY9XEVbMTd+LAorCWtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sCisJa3BwPVxFWzV+LCBtYzA9XEVbMGksIG1jND1cRVs0aSwgbWM1PVxFWzVpLCBuZWw9Xk1eSiwgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCByaW49XEVbJXAxJWRMLCBybWFjcz1cRShCLCBybWFtPVxFWz83bCwKKwlybWlyPVxFWzRsLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLAorCXJzMT1cRShCXEUpQlxFPlxFIEZcRVs0OzIwbFxFWzEyaFxFWz8xOzU7NjszODs0MmxcRVs/NzsyNWhcRVs0aVxFWz80aVxFW21cRVtyXEVbMiR+LAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWFjcz1cRSgwLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXRzbD1cRVsxJH1cclxFW0ssIHZwYT1cRVslaSVwMSVkZCwKKyMgRnJvbTogSm9zZXBoIEdpbCA8eW9naUBjcy51YmMuY2E+IDEzIERlYyAxOTkxCisjIEFDUyBjYXBhYmlsaXRpZXMgZnJvbSBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPiAzMCBNYXkgMTk5NgorIyAoSSByZW1vdmVkIGEgYm9ndXMgYm9vbGVhbiA6bW86IGFuZCBhZGRlZCA8bXNncj4sIDxzbWFtPiwgPHJtYW0+IC0tIGVzcikKK3Z0MzIwLWszMTF8ZGVjIHZ0MzIwIHNlcmllcyBhcyBkZWZpbmVkIGJ5IGtlcm1pdCAzLjExLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVs7SFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwlkc2w9XEVbMiR+XHJcRVsxJH1cRVtLXEVbJH0sIGVkPVxFW0osIGVsPVxFW0ssCisJZmxhc2g9XEVbPzVoXEVbPzVsLCBmc2w9XEVbJH0sIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsCisJaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCQ8My8+LCBpbmQ9XEVELAorCWlzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGhcRVsxOzI0clxFWzI0OzFILAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y2PVxFWzE3fiwKKwlrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBsZjE9cGYxLCBsZjI9cGYyLAorCWxmMz1wZjMsIGxmND1wZjQsIG5lbD1eTVxFRCwgcmM9XEU4LCByZXY9XEVbN20sCisJcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIHJpPVxFTSwgcm1hY3M9Xk8sCisJcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzI3bSwKKwlybXVsPVxFWzI0bSwgcnMxPVxFWz8zbCwgc2M9XEU3LCBzZ3IwPVxFW20sIHNtYWNzPV5OLAorCXNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHRzbD1cRVsyJH5cRVsxJH1cRVsxOyVkSCwKKworIyMjIyMjIyMgTk9OLUFOU0kgVEVSTUlOQUwgRU1VTEFUSU9OUworIworCisjIyMjIEF2YXRhcgorIworIyBUaGVzZSBlbnRyaWVzIGF0dGVtcHQgdG8gZGVzY3JpYmUgQXZhdGFyLCBhIHRlcm1pbmFsIGVtdWxhdGlvbiB1c2VkIHdpdGgKKyMgTVMtRE9TIGJ1bGxldGluLWJvYXJkIHN5c3RlbXMuICBJdCB3YXMgZGVzaWduZWQgdG8gZ2l2ZSBBTlNJLWxpa2UKKyMgY2FwYWJpbGl0aWVzLCBidXQgd2l0aCBjaGVhcGVyIChzaG9ydGVyKSBjb250cm9sIHNlcXVlbmNlcy4gIE1lc3N5IGRlc2lnbiwKKyMgZXhjZXNzaXZlbHkgZGVwZW5kZW50IG9uIFBDIGlkaW9zeW5jcmFjaWVzLCBidXQgYXBwYXJlbnRseSByYXRoZXIgcG9wdWxhcgorIyBpbiB0aGUgQkJTIHdvcmxkLgorIworIyBObyBjb2xvciBzdXBwb3J0LiAgQXZhdGFyIGRvZXNuJ3QgZml0IGVpdGhlciBvZiB0aGUgVGVrdHJvbml4IG9yIEhQIGNvbG9yCisjIG1vZGVscyB0aGF0IHRlcm1pbmZvIGtub3dzIGFib3V0LiAgQW4gQXZhdGFyIGNvbG9yIGF0dHJpYnV0ZSBpcyB0aGUKKyMgbG93IDcgYml0cyBvZiB0aGUgSUJNLVBDIGRpc3BsYXktbWVtb3J5IGF0dHJpYnV0ZS4gIEJsZXRjaC4KKyMKKyMgSSB3cm90ZSB0aGVzZSBlbnRyaWVzIHdoaWxlIGxvb2tpbmcgYXQgdGhlIEF2YXRhciBzcGVjLiAgSSBkb24ndCBoYXZlCisjIHRoZSBmYWNpbGl0aWVzIHRvIHRlc3QgdGhlbS4gIExldCBtZSBrbm93IGlmIHRoZXkgd29yaywgb3IgZG9uJ3QuCisjCisjIEF2YXRhciBlc2NhcGVzIG5vdCB1c2VkIGJ5IHRoZXNlIGVudHJpZXMgKGJlY2F1c2UgbWF5YmUgeW91J3JlIHNtYXJ0ZXIKKyMgYW5kIG1vcmUgbW90aXZhdGVkIHRoYW4gSSBhbSBhbmQgY2FuIGZpZ3VyZSBvdXQgaG93IHRvIHdyYXAgdGVybWluZm8KKyMgYXJvdW5kIHNvbWUgb2YgdGhlbSwgYW5kIGJlY2F1c2UgdGhleSBhcmUgd2VpcmQgZW5vdWdoIHRvIGJlIGZ1bm55KToKKyMJCQkJbGV2ZWwgMDoKKyMgXkwJCS0tIGNsZWFyIHdpbmRvdy9yZXNldCBjdXJyZW50IGF0dHJpYnV0ZSB0byBkZWZhdWx0CisjIF5WXkElcDElYwktLSBzZXQgY3VycmVudCBjb2xvciBhdHRyaWJ1dGUsIHBhcmFtZXRlciBkZWNvZGVzIGFzIGZvbGxvd3M6CisjCisjICAgICAgYml0OiAgICAgICAgIDYgICA1ICAgNCAgIDMgICAyICAgMSAgIDAKKyMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgfCAgIHwgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICArLS0tKy0tLSsgICB8ICAgKy0tLSstLS0rCisjICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICBmb3JlZ3JvdW5kIGNvbG9yCisjICAgICAgICAgICAgICAgICAgICAgICB8ICBmb3JlZ3JvdW5kIGludGVuc2l0eQorIyAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgY29sb3IKKyMJCQkJbGV2ZWwgMCs6CisjIF5WXkolcDElYyVwMiVjJXAzJWMlcDQlYyVwNSVjCS0tIHNjcm9sbCAocDIscDMpIHRvIChwNCxwNSkgdXAgYnkgcDEgbGluZXMKKyMgXlZeSyVwMSVjJXAyJWMlcDMlYyVwNCVjJXA1JWMJLS0gc2Nyb2xsIChwMixwMykgdG8gKHA0LHA1KSBkb3duIGJ5IHAxIGxpbmVzCisjIF5WXkwlcDElYyVwMiVjJXAzJWMJCS0tIGNsZWFyIHAyIGxpbmVzIGFuZCBwMyBjb2xzIHcvYXR0ciAlcDEKKyMgXlZeTSVwMSVjJXAyJWMlcDMlYyVwNCVjCS0tIGZpbGwgcDMgbGluZXMgJiBwNCBjb2xzIHcvY2hhciBwMithdHRyICVwMQorIyAoXlZeTCBhbmQgXlZeTSBzZXQgdGhlIGN1cnJlbnQgYXR0cmlidXRlIGFzIGEgc2lkZS1lZmZlY3QuKQorIyBeViBeWSA8YT4gWy4uLl0gPGM+CS0tIHJlcGVhdCBwYXR0ZXJuLiA8YT4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyMJCQkgICBpbiB0aGUgcGF0dGVybiwgPGM+IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHBhdHRlcm4KKyMJCSAgCSAgIHNob3VsZCBiZSByZXBlYXRlZC4gSWYgZWl0aGVyIHZhbHVlIGlzIDAsIG5vLW9wLgorIwkJCSAgIFRoZSBwYXR0ZXJuIGNhbiBjb250YWluIEF2YXRhciBjb25zb2xlIGNvZGVzLAorIwkJCSAgIGluY2x1ZGluZyBvdGhlciBeViBeWSBwYXR0ZXJucy4KKyMJCQkJbGV2ZWwgMToKKyMgXlZeTwkJLS0gY2xvY2t3aXNlIG1vZGUgb247IHR1cm4gcHJpbnQgZGlyZWN0aW9uIHJpZ2h0IGVhY2ggdGltZSB5b3UKKyMJCSAgIGhpdCBhIHdpbmRvdyBlZGdlICh5ZXMsIHJlYWxseSkuICBUdXJuZWQgb2ZmIGJ5IENSCisjIF5WXlAJCS0tIG5vLW9wCisjIF5WXlElYwktLSBxdWVyeSB0aGUgZHJpdmVyCisjIF5WXlIJCS0tIGRyaXZlciByZXNldAorIyBeVl5TCQktLSBTb3VuZCB0b25lIChQQy1zcGVjaWZpYykKKyMgXlZeVAkJCS0tIGNoYW5nZSBoaWdobGlnaHQgYXQgY3VycmVudCBjdXJzb3IgcG9pdGlvbiB0byAlYworIyBeVl5VJXAxJWMlcDIlYwktLSBoaWdobGlnaHQgd2luZG93IDxhPiB3aXRoIGF0dHJpYnV0ZSA8Yj4KKyMgXlZeViVwMSVjJXAyJWMlcDMlYyVwNCVjJXA1JWMKKyMJCQktLSBkZWZpbmUgd2luZG93CisjCisjIEZyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAxIE5vdiAxOTk1CisjIChUaGUgPGJsaW5rPi88Ym9sZD4vPHJldj4vPHNtYWNzPi88c211bD4vPHNtc28+IGNhcGFiaWxpdGllcyBleGlzdCBvbmx5IHRvCisjIHRlbGwgbmN1cnNlcyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIGhpZ2hsaWdodHMgZXhpc3Q7IGl0IHNob3VsZCB1c2UgPHNncj4sCisjIHdoaWNoIGlzIHRoZSBvbmx5IG1ldGhvZCB0aGF0IHdpbGwgYWN0dWFsbHkgd29yayBmb3IgbXVsdGlwbGUgaGlnaGxpZ2h0cy4pCisjCisjIFVwZGF0ZSBieSBURCAtIDIwMDQ6IGhhbGYgb2YgdGhpcyB3YXMgaW5jb25zaXN0ZW50LiAgRm91bmQgZG9jdW1lbnRhdGlvbgorIyBhbmQgcmVwYWlyZWQgbW9zdCBvZiB0aGUgZGFtYWdlLiAgc2dyMCBpcyBwcm9iYWJseSBpbmNvcnJlY3QsIGJ1dCB0aGUKKyMgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZ2l2ZXMgbm8gY2x1ZXMgZm9yIGEgd29ya2FibGUgc3RyaW5nLgorYXZhdGFyMHxhdmF0YXIgdGVybWluYWwgZW11bGF0b3IgbGV2ZWwgMCwKKwlhbSwgYmNlLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJsaW5rPV5WXkIsIGJvbGQ9XlZeQV5QLCBjcj1eTSwgY3ViMT1eVl5FLCBjdWQxPV5WXkQsCisJY3VmMT1eVl5GLCBjdXA9XDAyNlwwMTAlcDElYyVwMiVjLCBjdXUxPV5WXkMsIGVsPV5WXkcsCisJaW5kPV5KLCBpbnZpcz1eVl5BXDAsIHJlcD1cMDMxJXAxJWMlcDIlYywgcmV2PV5WXkFwLAorCXJtYWNzQCwgcnMyPV5MLAorCXNncj0lPyVwMSVwMiV8JXAzJXwlcDYlfCVwNyV8JXRcMDI2XDAwMSU/JXA3JXQlezEyOH0lZSV7MH0lPyVwMSV0JXsxMTJ9JXwlOyU/JXAyJXQlezF9JXwlOyU/JXAzJXQlezExMn0lfCU7JT8lcDYldCV7MTZ9JXwlOyU7JWMlOyU/JXA0JXRcMDI2XDAwMiU7LAorCXNncjA9XlZeQV5HLCBzbWFjc0AsIHNtc289XlZeQXAsIHNtdWw9XlZeQV5BLAorCXVzZT1rbG9uZSthY3MsCisjIEZyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAxIE5vdiAxOTk1CithdmF0YXIwK3xhdmF0YXIgdGVybWluYWwgZW11bGF0b3IgbGV2ZWwgMCssCisJZGNoMT1eVl5OLCBybWlyPVwwMjZcblwwXDBcMFwwLCBzbWlyPV5WXkksIHVzZT1hdmF0YXIwLAorIyBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gMSBOb3YgMTk5NQorYXZhdGFyfGF2YXRhcjF8YXZhdGFyIHRlcm1pbmFsIGVtdWxhdG9yIGxldmVsIDEsCisJY2l2aXM9XlYnXkIsIGNub3JtPV5WJ15BLCBjdnZpcz1eVl5DLCBkbDE9XlYtLCBpbDE9XlYrLAorCXJtYW09XlYiLCBybWlyPV5WXlAsIHNtYW09XlYkLCB1c2U9YXZhdGFyMCssCisKKyMjIyMgUkJjb21tCisjCisjIFJCQ29tbSBpcyBhIGxlYW4gYW5kIG1lYW4gdGVybWluYWwgZW11bGF0b3Igd3JpdHRlbiBieSB0aGUgSW50ZXJydXB0IExpc3QKKyMgbWFpbnRhaW5lciwgUmFsZiBCcm93bi4gSXQgd2FzIGZhaXJseSBwb3B1bGFyIGluIHRoZSBsYXRlIERPUyB5ZWFycyAoZWFybHkKKyMgJzkwcyksIGVzcGVjaWFsbHkgaW4gdGhlIEJCUyB3b3JsZCwgYW5kIHN0aWxsIGhhcyBzb21lIGxveWFsIHVzZXJzIGR1ZSB0bworIyBpdHMgdmVyeSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB0byBhIGN1dGUgbWFjcm8gbGFuZ3VhZ2UuCityYmNvbW18SUJNIFBDIHdpdGggUkJjb21tIGFuZCBFTUFDUyBrZXliaW5kaW5ncywKKwlhbSwgYncsIG1pciwgbXNnciwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1eTCwgY25vcm09XEVbPzI1aCwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPV5DLCBjdWYxPV5CLAorCWN1cD1cMDM3JXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5eLCBkY2gxPV5XLAorCWRsPVxFWyVwMSVkTSwgZGwxPV5aLCBlY2g9XEVbJXAxJWRYLCBlZD1eRjUsIGVsPV5QXlAsIGh0PV5JLAorCWlsPVxFWyVwMSVkTCwgaWwxPV5LLCBpbmQ9XEVELCBpbnZpcz1cRVs4bSwKKwlpczI9XDAxN1wwMzVcRShCXEUpMFxFWz83aFxFWz8zbFxFWz44Zywga2JzPV5ILAorCWtjdWIxPV5CLCBrY3VkMT1eTiwga2N1ZjE9XkYsIGtjdXUxPV5QLCBraG9tZT1eQSwgbmVsPV5NXEVELAorCXJjPVxFOCwgcmVwPVwwMzAlcDElYyVwMiVjLCByZXY9XlIsIHJpPVxFTSwgcm1jdXA9LCBybWRjPSwKKwlybWlyPV5dLCBybWt4PVxFPiwgcm1zbz1eVSwgcm11bD1eVSwKKwlyczE9XDAxN1xFKEJcRSkwXDAyNVxFWz8zbFxFWz44Zywgc2M9XEU3LCBzZ3IwPVxFW20sCisJc21jdXA9LCBzbWRjPSwgc21pcj1eXCwgc21reD1cRT0sIHNtc289XlIsIHNtdWw9XlQsCityYmNvbW0tbmFtfElCTSBQQyB3aXRoIFJCY29tbSB3aXRob3V0IGF1dG93cmFwLAorCWFtQCwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBodD1eSSwgaW5kPV5KLAorCWlzMj1cMDE3XDAzNVxFKEJcRSkwXEVbPzdsXEVbPzNsXEVbPjhnLCBrYnM9XkgsCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwgdXNlPXJiY29tbSwKK3JiY29tbS13fElCTSBQQyB3aXRoIFJCY29tbSBpbiAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsCisJYmVsPV5HLCBjcj1eTSwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwKKwlpczI9XDAxN1wwMzVcRShCXEUpMFxFWz83aFxFWz8zaFxFWz44Zywga2JzPV5ILAorCWtjdWIxPV5ILCBrY3VkMT1eSiwgbmVsPV5NXkosIHVzZT1yYmNvbW0sCisKKyMjIyMjIyMjIExDRCBESVNQTEFZUworIworCisjIyMjIE1hdHJpeCBPcmJpdGFsCisjIGZyb206IEVyaWMgWi4gQXllcnMgIChlcmljQGFsZS5vcmcpCisjCisjIE1hdHJpeCBPcmJpdGFsIDIweDQgTENEIGRpc3BsYXkKKyMgQ29tbWFuZCBDaGFyYWN0ZXIgaXMgMHhGRSAoZGVjaW1hbCAyNTQsIG9jdGFsIDM3NikKKyMKKyMgT24gdGhpcyBkZXZpY2UsIGN1cnNvciBhZGRyZXNzYWJpbGl0eSBpc24ndCBwb3NzaWJsZS4gIFRoZSBMQ0QgZXhwZWN0czoKKyMgICAgICAweGZlIEcgPGNvbD4gPHJvdz4KKyMgICAgICBmb3IgY3VwOiAlcDEgPT0gcm93IGFuZCAlcDIgaXMgY29sdW1uCisjCisjIFRoaXMgbGluZToKKyMJY3VwPVwzNzZHJXAyJWMlcDElYworIyBMT09LUyBsaWtlIGl0IHdpbGwgd29yaywgYnV0IHNvbWV0aW1lcyBvbmx5IG9uZSBvZiB0aGUgdHdvIG51bWJlcnMgaXMgc2VudC4KKyMgU2VlIHRoZSB0ZXJtaW5mbyAoNSkgbWFucGFnZSBjb21tZW50ZWQgcmVnYXJkaW5nICdUZXJtaW5hbHMgd2hpY2ggdXNlICIlYyInLgorIworIyBBbGFzLCB0aGVyZSBpcyBubyBjdXJzb3IgdXBsaW5lIGNhcGFiaWxpdHkgb24gdGhpcyBkaXNwbGF5LgorIworIyBUaGVzZSBlbnRyaWVzIGFkZCBzb21lICdzYW5pdHkgc3R1ZmYnIHRvIHRoZSBjbGVhciBmdW5jdGlvbi4gIFRoYXQgaXMsIGl0CisjIGRvZXMgYSAnY2xlYXInIGFuZCBhbHNvIHR1cm5zIE9GRiBhdXRvIHNjcm9sbCwgdHVybnMgT04gQXV0byBMaW5lIFdyYXBwaW5nLAorIyBhbmQgdHVybnMgb2ZmIHRoZSBjdXJzb3IgYmxpbmtpbmcgYW5kIHN0dWZmIGxpa2UgdGhhdC4KKyMKKyMgTk9URTogY2FsbGluZyAnYmVlcCcgdHVybnMgb24gdGhlIGJhY2tsaWdodCAoYmVsbCkKKyMgTk9URTogY2FsbGluZyAnZmxhc2gnIHR1cm5zIGl0IG9uIGFuZCBiYWNrIG9mZiAodmlzdWFsIGJlbGwpCisjCitNdHhPcmJ8R2VuZXJpYyBNYXRyaXggT3JiaXRhbCBMQ0QgZGlzcGxheSwKKwliZWw9XDM3NkJeQSwgY2xlYXI9XDM3NlhcMzc2Q1wzNzZSXDM3NktcMzc2VCwKKwljbm9ybT1cMzc2S1wzNzZULCBjdWIxPVwzNzZMLCBjdWYxPVwzNzZNLAorCWZsYXNoPVwzNzZCXDAwMSQ8MjAwPlwzNzZGLCBob21lPVwzNzZILAorTXR4T3JiMjA0fDIweDQgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXksCisJY29scyMyMCwgbGluZXMjNCwgdXNlPU10eE9yYiwKK010eE9yYjE2MnwxNngyIE1hdHJpeCBPcmJpdGFsIExDRCBkaXNwbGF5LAorCWNvbHMjMTYsIGxpbmVzIzIsIHVzZT1NdHhPcmIsCisjIFRoZSBlbmQKKworIyMjIyMjIyMgT0xERVIgVEVSTUlOQUwgVFlQRVMKKyMKKyMgVGhpcyBzZWN0aW9uIGlzIGRldm90ZWQgdG8gb2xkZXIgY29tbWVyY2lhbCB0ZXJtaW5hbCBicmFuZHMgdGhhdCBhcmUgbm93CisjIGRpc2NvbnRpbnVlZCwgYnV0IGtub3duIHRvIGJlIHN0aWxsIGluIHVzZSBvciByZXByZXNlbnRlZCBieSBlbXVsYXRpb25zLgorIworCisjIyMjIEFUJlQgKGF0dCwgdHR5KQorIworIyBUaGlzIHNlY3Rpb24gYWxzbyBpbmNsdWRlcyBUZWxldHlwZS1icmFuZGVkIFZEVHMuCisjCisjIFRoZSBBVCZUL1RlbGV0eXBlIHRlcm1pbmFscyBncm91cCB3YXMgc29sZCB0byBTdW5SaXZlciBEYXRhIFN5c3RlbXMgKG5vdworIyBCb3VuZGxlc3MgVGVjaG5vbG9naWVzKTsgZm9yIGRldGFpbHMsIHNlZSB0aGUgaGVhZGVyIGNvbW1lbnQgb24gdGhlIEFERFMKKyMgc2VjdGlvbi4KKyMKKyMgVGhlc2UgYXJlIEFUJlQncyBvZmZpY2lhbCB0ZXJtaW5mbyBlbnRyaWVzLiAgQWxsLWNhcHMgYWxpYXNlcyBoYXZlIGJlZW4KKyMgcmVtb3ZlZC4KKyMKK2F0dDIzMDB8c3Y4MHxBVCZUIDIzMDAgVmlkZW8gSW5mb3JtYXRpb24gVGVybWluYWwgODAgY29sdW1uIG1vZGUsCisJYW0sIGVvLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGVsMT1cRVsxSywgaG9tZT1cRVtILCBodD1eSSwgaWNoPVxFWyVwMSVkQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGticz1eSCwga2NidD1cRVtaLCBrY2xyPVxFW0osCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwKKwlrZGwxPVxFW00sIGtmMT1cRVsxciwga2YxMD1cRVsxMHIsIGtmMTE9XEVbMTFyLAorCWtmMTI9XEVbMTJyLCBrZjEzPVxFWzEzciwga2YxND1cRVsxNHIsIGtmMTU9XEVbMTVyLAorCWtmMTY9XEVbMTZyLCBrZjI9XEVbMnIsIGtmMz1cRVszciwga2Y0PVxFWzRyLCBrZjU9XEVbNXIsCisJa2Y2PVxFWzZyLCBrZjc9XEVbN3IsIGtmOD1cRVs4ciwga2Y5PVxFWzlyLCBraG9tZT1cRVtILAorCWtpY2gxPVxFW0AsIGtpbDE9XEVbTCwgbWMwPVxFWzBpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwKKwlyZXY9XEVbN20sIHJtaXI9XEVbNGwsIHJtc289XEVbbSwgc2dyMD1cRVttLCBzbWlyPVxFWzRoLAorCXNtc289XEVbN20sCithdHQyMzUwfEFUJlQgMjM1MCBWaWRlbyBJbmZvcm1hdGlvbiBUZXJtaW5hbCA4MCBjb2x1bW4gbW9kZSwKKwltYzBALCBtYzRALCBtYzVALCB1c2U9YXR0MjMwMCwKKworIyBNdXN0IHNldHVwIFJFVFVSTiBLRVkgLSBDUiwgUkVDJ1ZEIExGIC0gSU5ERVguCisjIFNlZW1zIHVwd2FyZCBjb21wYXRpYmxlIHdpdGggdnQxMDAsIHBsdXMgaW5zL2RlbCBsaW5lL2NoYXIuCisjIE9uIHNnciwgdGhlIHByb3RlY3Rpb24gcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisjIE5vIGNoZWNrIGlzIG1hZGUgdG8gbWFrZSBzdXJlIHRoYXQgb25seSAzIHBhcmFtZXRlcnMgYXJlIG91dHB1dC4KKyMgCXN0YW5kb3V0PSByZXZlcnNlICsgaGFsZi1pbnRlbnNpdHkgPSAzIHwgNS4KKyMgCWJvbGQ9IHJldmVyc2UgKyB1bmRlcmxpbmUgPSAyIHwgMy4KKyMgbm90ZSB0aGF0IGhhbGYtYnJpZ2h0IGJsaW5raW5nIGRvZXNuJ3QgbG9vayBkaWZmZXJlbnQgZnJvbSBub3JtYWwgYmxpbmtpbmcuCisjIE5PVEU6eW91IG11c3QgcHJvZ3JhbSB0aGUgZnVuY3Rpb24ga2V5cyBmaXJzdCwgbGFiZWwgc2Vjb25kIQorIyAoYXR0NDQxMDogYSBCU0QgZW50cnkgaGFzIGJlZW4gc2VlbiB3aXRoIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzOgorIyA8aXMyPVxFWz82bD4sIDxrZjE9XEVPYz4sIDxrZjI9XEVPZD4sIDxrZjM9XEVPZT4sIDxrZjQ9XEVPZz4sCisjIDxrZjY9XEVPaD4sIDxrZjc9XEVPaT4sIDxrZjg9XEVPaj4sIC0tIGVzcikKK2F0dDU0MTB2MXxhdHQ0NDEwdjF8dHR5NTQxMHYxfEFUJlQgNDQxMC81NDEwIDgwIGNvbHVtbnMgLSB2ZXJzaW9uIDEsCisJYW0sIGhzLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaCMyLCBsaW5lcyMyNCwgbHcjOCwgbmxhYiM4LCB3c2wjODAsCisJYWNzYz0rK1wsXCwtLS4uMDBgYGFhZmZnZ2hoampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMjs3bSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1cRVtCLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBmc2w9XEU4LCBob21lPVxFW0gsIGh0PV5JLAorCWljaDE9XEVbQCwgaWwxPVxFW0wsIGluZD1eSiwgaW52aXM9XEVbOG0sIGlzMT1cRVs/M2xcRSkwLAorCWlzMz1cRVsxOzAzcSAgIGYxICAgICAgICAgICBcRU9QXEVbMjswM3EgICBmMiAgICAgICAgICAgXEVPUVxFWzM7MDNxICAgZjMgICAgICAgICAgIFxFT1JcRVs0OzAzcSAgIGY0ICAgICAgICAgICBcRU9TXEVbNTswM3EgICBmNSAgICAgICAgICAgXEVPVFxFWzY7MDNxICAgZjYgICAgICAgICAgIFxFT1VcRVs3OzAzcSAgIGY3ICAgICAgICAgICBcRU9WXEVbODswM3EgICBmOCAgICAgICAgICAgXEVPVywKKwlrYnM9XkgsIGtjbHI9XEVbMkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9ULAorCWtmNj1cRU9VLCBrZjc9XEVPViwga2Y4PVxFT1csIGtob21lPVxFW0gsIGtsbD1cRVsyNDsxSCwKKwlsbD1cRVsyNEgsIG5lbD1eTV5KLAorCXBmeD1cRVslcDElMWQ7JXAyJWwlMi4yZHEgICBmJXAxJTFkICAgICAgICAgICAlcDIlcywKKwlwbG49XEVbJXAxJWQ7MDBxJXAyJTotMTZzLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJtYWNzPV5PLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgcnMyPVxFY1xFWz8zbFxFWzI7MHksCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDUlfCV0OzIlOyU/JXAyJXA2JXwldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwlcDYlfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdHNsPVxFN1xFWzI1OyVwMSV7MX0lKyVkSCwKKworYXR0NDQxMHYxLXd8YXR0NTQxMHYxLXd8dHR5NTQxMHYxLXd8QVQmVCA0NDEwLzU0MTAgMTMyIGNvbHVtbnMgLSB2ZXJzaW9uIDEsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMxPVxFWz8zaFxFKTAsIHJzMj1cRWNcRVs/M2hcRVsyOzB5LCB1c2U9YXR0NTQxMHYxLAorCithdHQ0NDEwfGF0dDU0MTB8dHR5NTQxMHxBVCZUIDQ0MTAvNTQxMCA4MCBjb2x1bW5zIC0gdmVyc2lvbiAyLAorCU9UYnMsCisJcGZ4PVxFWyVwMSVkOyVwMiVsJTAyZHEgICBmJXAxJWQgICAgICAgICAgICVwMiVzLAorCXVzZT1hdHQ1NDEwdjEsCisKK2F0dDU0MTAtd3xhdHQ0NDEwLXd8NDQxMC13fHR0eTU0MTAtd3w1NDEwLXd8QVQmVCA0NDEwLzU0MTAgaW4gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMT1cRVs/M2hcRSkwLCByczI9XEVjXEVbPzNoXEVbMjsweSwgdXNlPWF0dDQ0MTAsCisKKyMgNTQxMCBpbiB0ZXJtcyBvZiBhIHZ0MTAwCisjICh2NTQxMDogYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiBpbml0IHN0cmluZyAtLSBlc3IpCit2NTQxMHxhdHQ1NDEwIGluIHRlcm1zIG9mIGEgdnQxMDAsCisJYW0sIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSQ8Mj4sIGJvbGQ9XEVbMW0kPDI+LAorCWNsZWFyPVxFW0hcRVtKJDw1MD4sIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDJDwyPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LCBjdXUxPVxFW0EkPDI+LCBkY2gxPVxFW1AsCisJZGwxPVxFW00sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGVsMT1cRVsxSyQ8Mz4sCisJZW5hY3M9XEUoQlxFKTAsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaDE9XEVbQCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsCisJa2N1dTE9XEVPQSwgcmM9XEU4LCByZXY9XEVbN20kPDI+LCByaT1cRU0kPDU+LCBybWFjcz1eTywKKwlybWFtPVxFWz83bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSQ8Mj4sCisJcm11bD1cRVttJDwyPiwgcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOyQ8Mj4sCisJc2dyMD1cRVttXDAxNyQ8Mj4sIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sCisJc21zbz1cRVsxOzdtJDwyPiwgc211bD1cRVs0bSQ8Mj4sIHRiYz1cRVszZywKKwl1c2U9dnQxMDArZm5rZXlzLAorCisjCisjIFRlbGV0eXBlIE1vZGVsIDU0MjAgLS0gQSBzb3VwZWQgdXAgNTQxMCwgd2l0aCBtdWx0aXBsZSB3aW5kb3dzLAorIyBldmVuISB0aGUgNTQyMCBoYXMgdGhyZWUgbW9kZXM6IHNjcm9sbCwgd2luZG93IG9yIHBhZ2UgbW9kZQorIyB0aGlzIHRlcm1pbmZvIHNob3VsZCB3b3JrIGluIHNjcm9sbCBvciB3aW5kb3cgbW9kZSwgYnV0IGRvZXNuJ3QKKyMgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0uCisjCisjIEhhcyBtZW1vcnkgYmVsb3cgKDIgbGluZXMhKQorIyAzIHBhZ2VzIG9mIG1lbW9yeSAocGx1cyBzb21lIHNwYXJlKQorIyBUaGUgNTQxMCBzZXF1ZW5jZXMgZm9yIDxjdXA+LCA8Y3Z2aXM+LCA8ZGNoPiwgPGRsPiwgPGVjaD4sIDxmbGFzaD4sIDxob21lPiwKKyMgPGhwYT4sIDxodHM+IHdvdWxkIHdvcmsgZm9yIHRoZXNlLCBidXQgdGhlc2Ugd29yayBpbiBib3RoIHNjcm9sbCBhbmQgd2luZG93CisjIG1vZGUuLi4gVW5zZXQgaW5zZXJ0IGNoYXJhY3RlciBzbyBpbnNlcnQgbW9kZSB3b3JrcworIyA8aXMxPiBzZXRzIDgwIGNvbHVtbiBtb2RlLAorIyA8aXMyPiBlc2NhcGUgc2VxdWVuY2U6CisjIDEpIHR1cm4gb2ZmIGFsbCBmb250cworIyAyKSBmdW5jdGlvbiBrZXlzIG9mZiwga2V5Ym9hcmQgbG9jayBvZmYsIGNvbnRyb2wgZGlzcGxheSBvZmYsCisjICAgIGluc2VydCBtb2RlIG9mZiwgZXJhc3VyZSBtb2RlIG9mZiwKKyMgMykgZnVsbCBkdXBsZXgsIG1vbml0b3IgbW9kZSBvZmYsIHNlbmQgZ3JhcGhpY3Mgb2ZmLCBubCBvbiBsZiBvZmYKKyMgNCkgcmVzZXQgb3JpZ2luIG1vZGUKKyMgNSkgc2V0IGxpbmUgd3JhcGFyb3VuZAorIyA2KSBleGl0IGVyYXN1cmUgbW9kZSwgcG9zaXRpb25hbCBhdHRyaWJ1dGUgbW9kZSwgYW5kIGVyYXN1cmUgZXh0ZW50IG1vZGUKKyMgNykgY2xlYXIgbWFyZ2lucworIyA4KSBwcm9ncmFtIEVOVEVSIHRvIHRyYW5zbWl0IF5KLAorIyBXZSB1c2UgXDIxMiB0byBwcm9ncmFtIHRoZSBeSiBiZWNhdXNlIGEgYmFyZSBeSiB3aWxsIGdldCB0cmFuc2xhdGVkIGJ5CisjIFVOSVggaW50byBhIENSL0xGLiBUaGUgZW50ZXIga2V5IGlzIG5lZWRlZCBmb3IgQVQmVCB1T01TLgorIyAgICAgMSAgICAgIDIgICAgICAgICAgICAzICAgICAgICAgICAgICA0ICAgICA1ICAgICA2ICAgIDcgIDgKKyMgPGlzMz4gc2V0IHNjcmVlbiBjb2xvciB0byBibGFjaywKKyMgTm8gcmVwcmVzZW50YXRpb24gaW4gdGVybWluZm8gZm9yIHRoZSBkZWxldGUgd29yZCBrZXk6IGtkdzE9XEVkCisjIEtleSBjYXBhYmlsaXRpZXMgYXNzdW1lIHRoZSBwb3dlci11cCBzZW5kIHNlcXVlbmNlLi4uCisjIFRoaXMgPHJtY3VwPiBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgaXQgaGVscHMgbWF4aW1pemUKKyMgbWVtb3J5IHVzZWZ1bG5lc3M6IDxybWN1cD1cRXo+LAorIyBBbHRlcm5hdGUgc2dyMDoJPHNncjA9XEVbbVxFV15PPiwKKyMgQWx0ZXJuYXRlIHNncjoJPHNncj1cRVslPyVwMSV0Mjs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNSV0OzIlOyU/JXA3JXQ7OCU7bSU/JXA4JXRcRVYlOyU/JXA5JXReTiVlXk8lOz4sCisjIHNta3ggcHJvZ3JhbXMgdGhlIFNZUyBQRiBrZXlzIHRvIHNlbmQgYSBzZXQgc2VxdWVuY2UuCisjIEl0IGFsc28gc2V0cyB1cCBsYWJlbHMgZjEsIGYyLCAuLi4sIGY4LCBhbmQgc2VuZHMgZWRpdCBrZXlzLgorIyBUaGlzIHN0cmluZyBjYXVzZXMgdGhlbSB0byBzZW5kIHRoZSBzdHJpbmdzIDxrZjE+LTxrZjg+CisjIHdoZW4gcHJlc3NlZCBpbiBTWVMgUEYgbW9kZS4KKyMgKGF0dDQ0MTU6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorYXR0NDQxNXx0dHk1NDIwfGF0dDU0MjB8QVQmVCA0NDE1LzU0MjAgODAgY29scywKKwlPVGJzLCBkYiwgbWlyLCB4b24sCisJbGgjMiwgbG0jNzgsIGx3IzgsIG5sYWIjOCwgd3NsIzU1LAorCWNidD1cRVtaLCBjbGVhcj1cRVt4XEVbSiwgY25vcm09XEVbMTE7MGosIGN1Yj1cRVslcDElZEQsCisJY3VkPVxFWyVwMSVkQiwgY3VmPVxFWyVwMSVkQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWR4LAorCWN1dT1cRVslcDElZEEsIGN2dmlzPVxFWzExOzFqLCBkY2g9XEVbJXAxJWRQLAorCWRsPVxFWyVwMSVkTSwgZWNoPVxFWyVwMSVkc1xFWyVwMSVkRCwKKwlmbGFzaD1cRVs/NWgkPDIwMD5cRVs/NWwsIGhvbWU9XEVbeCwKKwlocGE9XEVbJXAxJXsxfSUrJWRHLCBodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpY2gxQCwKKwlpbD1cRVslcDElZEwsIGluZG49XEVbJXAxJWRFLCBpczE9XEVbPzNsJDwxMDA+LAorCWlzMj1cRVttXDAxN1xFWzE7MjszOzQ7NmxcRVsxMjsxMzsxNDsyMGxcRVs/Njs5Nzs5OWxcRVs/N2hcRVs0aVxFeFxFWzIxOzFqXDIxMiwKKwlpczM9XEVbPzVsLCBrYmVnPVxFdCwga2NidD1cRVtaLCBrZGNoMT1cRVtQLCBrZGwxPVxFW00sCisJa2VsPVxFWzJLLCBrZW5kPVxFeiwga2VudD1cRWVudCwga2YxPVxFT2MsIGtmMj1cRU9kLAorCWtmMz1cRU9lLCBrZjQ9XEVPZiwga2Y1PVxFT2csIGtmNj1cRU9oLCBrZjc9XEVPaSwga2Y4PVxFT2osCisJa2ljaDE9XEVbNGgsIGtpbDE9XEVbTCwga2luZD1cRVtULCBrbGw9XEV1LCBrbnA9XEVbVSwKKwlrcHA9XEVbViwga3JpPVxFW1MsIGxmMT1GMSwgbGYyPUYyLCBsZjM9RjMsIGxmND1GNCwgbGY1PUY1LAorCWxmNj1GNiwgbGY3PUY3LCBsZjg9RjgsIGxsPVxFdywgbWMwPVxFWz8yaSwgbWM0PVxFWz85aSwKKwltYzU9XEVbPzRpLCBtcmN1cD1cRVslaSVwMSVkOyVwMiVkdCwKKwlwZng9XEVbJXAxJWQ7JXAyJWwlMDJkcSAgIEYlcDElZCAgICAgICAgICAgJXAyJXMsCisJcGxuPVxFWyVwMSVkOzA7MDswcSVwMiU6LTE2LjE2cywgcHJvdD1cRVYsCisJcmluPVxFWyVwMSVkRiwgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsCisJcm1reD1cRVsxOTswalxFWzIxOzFqXDIxMiwgcm1sbj1cRXwsCisJc2dyPVxFWzAlPyVwMSVwNSV8JXQ7MiU7JT8lcDIlcDYlfCV0OzQlOyU/JXA0JXQ7NSU7JT8lcDMlcDElfCVwNiV8JXQ7NyU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWzE5OzFqXEVbMjE7NGpcRWVudCwgc21sbj1cRX4sIHRiYz1cRVszZywKKwl0c2w9XEU3XEVbMjU7JXAxJXs4fSUrJWRILCB2cGE9XEVbJXAxJXsxfSUrJWRkLAorCXVzZT1hdHQ0NDEwLAorCithdHQ0NDE1LXd8dHR5NTQyMC13fGF0dDU0MjAtd3xBVCZUIDQ0MTUvNTQyMCAxMzIgY29scywKKwljb2xzIzEzMiwgbG0jNTQsIHdzbCM5NywKKwlpczE9XEVbPzNoJDwxMDA+LCB1c2U9YXR0NDQxNSwKKworYXR0NDQxNS1ydnx0dHk1NDIwLXJ2fGF0dDU0MjAtcnZ8QVQmVCA0NDE1LzU0MjAgODAgY29scy9ydiwKKwlmbGFzaD1cRVs/NWwkPDIwMD5cRVs/NWgsIGlzMz1cRVs/NWgsIHVzZT1hdHQ0NDE1LAorCithdHQ0NDE1LXctcnZ8dHR5NTQyMC13LXJ2fGF0dDU0MjAtdy1ydnxBVCZUIDQ0MTUvNTQyMCAxMzIgY29scy9ydiwKKwljb2xzIzEzMiwgbG0jNTQsIHdzbCM5NywKKwlmbGFzaD1cRVs/NWwkPDIwMD5cRVs/NWgsIGlzMT1cRVs/M2gkPDEwMD4sIGlzMz1cRVs/NWgsCisJdXNlPWF0dDQ0MTUsCisKKyMgTm90ZSB0aGF0IHRoaXMgbW9kZSBwZXJtaXRzIHByb2dyYW1taW5nIFVTRVIgUEYgS0VZUyBhbmQgbGFiZWxzCisjIEhvd2V2ZXIsIHdoZW4geW91IHByb2dyYW0gdXNlciBwZiBsYWJlbHMgeW91IGhhdmUgdG8gcmVzZWxlY3QKKyMgdXNlciBwZiBrZXlzIHRvIG1ha2UgdGhlbSBhcHBlYXIhCithdHQ0NDE1K25sfHR0eTU0MjArbmx8YXR0NTQyMCtubHxnZW5lcmljIEFUJlQgNDQxNS81NDIwIGNoYW5nZXMgZm9yIG5vdCBjaGFuZ2luZyBsYWJlbHMsCisJa2YxQCwga2YyQCwga2YzQCwga2Y0QCwga2Y1QCwga2Y2QCwga2Y3QCwga2Y4QCwKKwlwZng9XEVbJXAxJWQ7JXAyJWwlMDJkOzA7MXEgICBGJXAxJWQgICAgICAgICAgICVwMiVzLAorCXBsbj1cRVslcDElZDswOzA7MXElcDIlOi0xNi4xNnMsCisKK2F0dDQ0MTUtbmx8dHR5NTQyMC1ubHxhdHQ1NDIwLW5sfEFUJlQgNDQxNS81NDIwIHdpdGhvdXQgY2hhbmdpbmcgbGFiZWxzLAorCWtmMUAsIGtmMkAsIGtmM0AsIGtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsIHVzZT1hdHQ0NDE1K25sLAorCXVzZT1hdHQ0NDE1LAorCithdHQ0NDE1LXJ2LW5sfHR0eTU0MjAtcnYtbmx8YXR0NTQyMC1ydi1ubHxBVCZUIDQ0MTUvNTQyMCByZXZlcnNlIHZpZGVvIHdpdGhvdXQgY2hhbmdpbmcgbGFiZWxzLAorCWtmMUAsIGtmMkAsIGtmM0AsIGtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsIHVzZT1hdHQ0NDE1K25sLAorCXVzZT1hdHQ0NDE1LXJ2LAorCithdHQ0NDE1LXctbmx8dHR5NTQyMC13LW5sfGF0dDU0MjAtdy1ubHxBVCZUIDQ0MTUvNTQyMCAxMzIgY29scyB3aXRob3V0IGNoYW5naW5nIGxhYmVscywKKwlrZjFALCBrZjJALCBrZjNALCBrZjRALCBrZjVALCBrZjZALCBrZjdALCBrZjhALCB1c2U9YXR0NDQxNStubCwKKwl1c2U9YXR0NDQxNS13LAorCithdHQ0NDE1LXctcnYtbnx0dHk1NDIwLXctcnYtbnxhdHQ1NDIwLXctcnYtbnxBVCZUIDQ0MTUvNTQyMCAxMzIgY29scyByZXZlcnNlIHdpdGhvdXQgY2hhbmdpbmcgbGFiZWxzLAorCWtmMUAsIGtmMkAsIGtmM0AsIGtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsIHVzZT1hdHQ0NDE1K25sLAorCXVzZT1hdHQ0NDE1LXctcnYsCisKK2F0dDU0MjBfMnxBVCZUIDU0MjAgbW9kZWwgMiA4MCBjb2xzLAorCWFtLCBkYiwgaHMsIG1pciwgbXNnciwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzIsIGxpbmVzIzI0LCBsbSM3OCwgbHcjOCwgbmxhYiM4LCB3c2wjNTUsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwlibGluaz1cRVs1bSwgY2J0PVxFWzFaLCBjbGVhcj1cRUhcRUosIGNub3JtPVxFWzExOzBqLAorCWNyPVxFRywgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZDE9XEVbMUIsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbMUMsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdnZpcz1cRVsxMTsxaiwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlY2g9XEVbJXAxJWRzXEVbJXAxJWRELCBlZD1cRVswSiwgZWw9XEVbMEssCisJZWwxPVxFWzFLLCBmbGFzaD1cRVs/NWgkPDIwMD5cRVs/NWwsIGZzbD1cRTgsIGhvbWU9XEVbSCwKKwlocGE9XEVbJXAxJXsxfSUrJWRHLCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwKKwlpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaW5kbj1cRVslcDElZEUsCisJaW52aXM9XEVbOG0sCisJaXMxPVxFWzA7MjNyXEV4XEV5XEVbMjswalxFWzM7M2pcRVs0OzBqXEVbNTswalxFWzY7MGpcRVs3OzBqXEVbODswalxFWzk7MWpcRVsxMDswalxFWzE1OzBqXEVbMTY7MWpcRVsxOTswalxFWzIwOzFqXEVbMjk7MGpcRVsxOzI0ciwKKwlrYmVnPVxFdCwga2JzPV5ILCBrY2J0PVxFW1osIGtjbHI9XEVbMkosIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwga2RsMT1cRVtNLAorCWtlbD1cRVsySywga2VuZD1cRXosIGtlbnQ9XkosIGtmMT1cRU9jLCBrZjI9XEVPZCwga2YzPVxFT2UsCisJa2Y0PVxFT2YsIGtmNT1cRU9nLCBrZjY9XEVPaCwga2Y3PVxFT2ksIGtmOD1cRU9qLCBraG9tZT1cRVtILAorCWtpY2gxPVxFWzRoLCBraWwxPVxFW0wsIGtpbmQ9XEVbVCwga2xsPVxFdSwga25wPVxFW1UsCisJa3BwPVxFW1YsIGtyaT1cRVtTLCBsZjE9RjEsIGxmMj1GMiwgbGYzPUYzLCBsZjQ9RjQsIGxmNT1GNSwKKwlsZjY9RjYsIGxmNz1GNywgbGY4PUY4LCBsbD1cRXcsIG1jMD1cRVs/OzJpLCBtYzQ9XEVbNGksCisJbWM1PVxFWzVpLCBtcmN1cD1cRVslaSVwMSVkOyVwMiVkdCwgbmVsPV5NXkosCisJcGZ4PVxFWyVwMSVkOyVwMiVsJTAyZHEgICBGJXAxJWQgICAgICAgICAgICVwMiVzXEV+LAorCXBsbj1cRVslcDElZDswOzA7MHElcDIlOi0xNi4xNnNcRX4sIHByb3Q9XEVWLCByYz1cRTgsCisJcmV2PVxFWzdtLCByaT1cRU0sIHJpbj1cRVslcDElZEYsIHJtYWNzPV5PLCBybWt4PVxFWzE5OzBqLAorCXJtbG49XEV8LCBybXNvPVxFW20sIHJtdWw9XEVbbSwgcnMyPVxFY1xFWz8zbFxFWzI7MHksCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDUlfCV0OzIlOyU/JXAyJXA2JXwldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwlcDYlfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNta3g9XEVbMTk7MWosIHNtbG49XEV+LAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEU3XEVbMjU7JXAxJXs4fSUrJWRILCB2cGE9XEVbJXAxJXsxfSUrJWRkLAorYXR0NTQyMF8yLXd8QVQmVCA1NDIwIG1vZGVsIDIgaW4gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLAorCWlzMT1cRVswOzIzclxFeFxFeVxFWzI7MGpcRVszOzNqXEVbNDswalxFWzU7MWpcRVs2OzBqXEVbNzswalxFWzg7MGpcRVs5OzFqXEVbMTA7MGpcRVsxNTswalxFWzE2OzFqXEVbMTk7MGpcRVsyMDsxalxFWzI5OzBqXEVbMTsyNHIsCisJdXNlPWF0dDU0MjBfMiwKKworYXR0NDQxOHxhdHQ1NDE4fEFUJlQgNTQxOCA4MCBjb2xzLAorCWFtLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLCBjdWI9XEVbJXAxJWRELAorCWN1YjE9XEVbRCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVsxUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFWzBKLCBlbD1cRVswSywgaG9tZT1cRVtILAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbMUAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFWzFMLCBpbmQ9XkosCisJaXMxPVxFWz8zbCwgaXMyPVxFKTBcRT82bFxFPzVsLCBrY2xyPVxFWyUlLCBrY3ViMT1cRUAsCisJa2N1ZDE9XEVVLCBrY3VmMT1cRUEsIGtjdXUxPVxFUywga2VudD1cRVssIGtmMT1cRVtoLAorCWtmMTA9XEVbbSwga2YxMT1cRVtuLCBrZjEyPVxFW28sIGtmMTM9XEVbSCwga2YxND1cRVtJLAorCWtmMTU9XEVbSiwga2YxOD1cRVtLLCBrZjE5PVxFW0wsIGtmMj1cRVtpLCBrZjIwPVxFW0UsCisJa2YyMT1cRVtfLCBrZjIyPVxFW00sIGtmMjM9XEVbTiwga2YyND1cRVtPLCBrZjM9XEVbaiwKKwlrZjY9XEVbaywga2Y3PVxFW2wsIGtmOD1cRVtmLCBrZjk9XEVbdywga2hvbWU9XEVjLCByYz1cRTgsCisJcmV2PVxFWzdtLCBybWFjcz1eTywgcm1zbz1cRVttLCBybXVsPVxFW20sIHNjPVxFNywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKK2F0dDQ0MTgtd3xhdHQ1NDE4LXd8QVQmVCA1NDE4IDEzMiBjb2xzLAorCWNvbHMjMTMyLAorCWlzMT1cRVs/M2gsIHVzZT1hdHQ1NDE4LAorCithdHQ0NDIwfHR0eTQ0MjB8dGVsZXR5cGUgNDQyMCwKKwlPVGJzLCBkYSwgZGIsIGVvLCBtc2dyLCB1bCwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBsbSM3MiwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9XEVHLCBjdWIxPVxFRCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFUCwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFeiwgaG9tZT1cRUgsIGlsMT1cRUwsIGluZD1cRUhcRU1cRVk3XHMsCisJa2NidD1cRU8sIGtjbHI9XEVKLCBrY3ViMT1eSCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZGNoMT1cRVAsIGtkbDE9XEVNLCBrZjA9XEVVLCBrZjM9XEVALCBraG9tZT1cRUgsCisJa2ljaDE9XEVcXiwga2lsMT1cRUwsIGtpbmQ9XEVTLCBrcmk9XEVULAorCWxmMD1zZWdtZW50IGFkdmFuY2UsIGxmMz1jdXJzb3IgdGFiLCBybWRjQCwgcm1zbz1cRX4sCisJcm11bD1cRVosIHNtZGNALCBzbXNvPVxFfSwgc211bD1cRVxcLAorCisjICBUaGUgZm9sbG93aW5nIGlzIGEgdGVybWluZm8gZW50cnkgZm9yIHRoZSBUZWxldHlwZSA0NDI0CisjICBhc3luY2hyb25vdXMga2V5Ym9hcmQtZGlzcGxheSB0ZXJtaW5hbC4gIEl0IHN1cHBvcnRzCisjICB0aGUgdmkgZWRpdG9yLiAgVGhlIHRlcm1pbmFsIG11c3QgYmUgc2V0IHVwIGFzIGZvbGxvd3MsCisjCisjIAlISUdITElHSFQgREVGSU5JVElPTgkzLVRPTkUKKyMgCURJU1BMQVkgRlVOQ1RJT04JR1JPVVAgSUlJCisjCisjICBUaGUgc2Vjb25kIGVudHJ5IGJlbG93IHByb3ZpZGVzIGxpbWl0ZWQgKGEgbGEgYWRtM2EpCisjICBvcGVyYXRpb24gdW5kZXIgR1JPVVAgSUkuCisjCisjICBUaGlzIG11c3QgYmUgdXNlZCB3aXRoIERJU1BMQVkgRlVOQ1RJT04gR1JPVVAgSSBvciBJSUkKKyMgCWFuZCBISUdITElHSFQgREVGSU5JVElPTiAzLVRPTkUKKyMgVGhlIHRlcm1pbmFsIGhhcyBlaXRoZXIgYm9sZCBvciBibGluaywgZGVwZW5kaW5nIG9uIG9wdGlvbnMKKyMKKyMgKGF0dDQ0MjQ6IGNvbW1lbnRlZCBvdXQgPHNtY3VwPj1cRVsxbSwgd2UgZG9uJ3QgbmVlZCBicmlnaHQgbG9ja2VkIG9uIC0tIGVzcikKK2F0dDQ0MjR8dHR5NDQyNHx0ZWxldHlwZSA0NDI0LAorCU9UYnMsIGFtLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFMywgYm9sZD1cRTMsIGNidD1cRU8sIGNsZWFyPVxFW0hcRVsySiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVQLCBkaW09XEVXLCBkbD1cRVslcDElZE0sIGRsMT1cRU0sCisJZWQ9XEVKLCBlbD1cRXosIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVxeLCBpbD1cRVslcDElZEwsIGlsMT1cRUwsIGluZD1eSiwgaXMyPVxFWzIwbFxFWz83aCwKKwlrYnM9XkgsIGtjbHI9XEVKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLAorCWtob21lPVxFW0gsIG5lbD1cRUUsIHJldj1cRX0sIHJpPVxFVCwgcm1hY3M9XEUoQiwgcm1zbz1cRX4sCisJcm11bD1cRVosCisJc2dyPVxFWyU/JXAxJXQ3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDYldDsxJTslPyVwNiVwNCV8JXQ7NSU7JT8lcDUldDswJTttLAorCXNncjA9XEVYXEV+XEVaXEU0XEUoQiwgc21hY3M9XEUoMCwgc21zbz1cRX0sIHNtdWw9XEVcXCwKKwl0YmM9XEVGLAorCithdHQ0NDI0LTF8dHR5NDQyNC0xfHRlbGV0eXBlIDQ0MjQgaW4gZGlzcGxheSBmdW5jdGlvbiBncm91cCBJLAorCWtjbHJALCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lQCwKKwl1c2U9YXR0NDQyNCwKKworIyBUaGlzIGVudHJ5IGlzIG5vdCBvbmUgb2YgQVQmVCdzIG9mZmljaWFsIG9uZXMsIGl0IHdhcyB0cmFuc2xhdGVkIGZyb20gdGhlCisjIDQuNEJTRCB0ZXJtY2FwIGZpbGUuICBUaGUgaGlnaGxpZ2h0IHN0cmluZ3MgYXJlIGRpZmZlcmVudCBmcm9tIGF0dDQ0MjQuCisjIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGlzIC0tIG9sZGVyIGZpcm13YXJlIHZlcnNpb24sIG1heWJlPworIyBUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBhcmUgdGhlIGNvbW1lbnQgb3JpZ2luYWxseSBhdHRhY2hlZCB0byB0aGUgZW50cnk6CisjIFRoaXMgZW50cnkgYXBwZWFycyB0byBhdm9pZCB0aGUgdG9wIGxpbmUgLSBJIGhhdmUgbm8gaWRlYSB3aHkuCisjIEZyb206IGp3YiBXZWQgTWFyIDMxIDEzOjI1OjA5IDE5ODIgcmVtb3RlIGZyb20gaWh1eHAKK2F0dDQ0MjRtfHR0eTQ0MjRtfHRlbGV0eXBlIDQ0MjRNLAorCWFtLCBkYSwgZGIsIG1pciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyMywKKwliZWw9XkcsIGNsZWFyPVxFWzI7SFxFW0osIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJTJkOyVwMiUyZEhcRVtCLCBjdXUxPVxFW0EsIGRjaDE9XEVQLAorCWRsMT1cRU0sIGVsPVxFW0ssIGh0PV5JLCBpY2gxPVxFXF4sIGlsMT1cRUwsIGluZD1eSiwgaXA9JDwyLz4sCisJaXMyPVxFW21cRVsyOzI0ciwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsCisJa2Y0PVxFT1MsIGtob21lPVxFW0gsIG5lbD1eTV5KLCByaT1cRVQsIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNncjA9XEVbbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyBUaGUgVGVsZXR5cGUgNTQyNSBpcyByZWFsbHkgdmVyc2lvbiAyIG9mIHRoZSBUZWxldHlwZSA1NDIwLiBJdAorIyBpcyBxdWl0ZSBzaW1pbGFyLCBleGNlcHQgZm9yIHNvbWUgbWlub3IgZGlmZmVyZW5jZXMuIE5vIHBhZ2UKKyMgbW9kZSwgZm9yIGV4YW1wbGUsIHNvIGFsbCBvZiB0aGUgPGN1cD4gc2VxdWVuY2VzIHVzZWQgYWJvdmUgaGF2ZQorIyB0byBjaGFuZ2UgYmFjayB0byB3aGF0J3MgYmVpbmcgdXNlZCBmb3IgdGhlIDU0MTAuIE1hbnkgb2YgdGhlCisjIG9wdGlvbiBzZXR0aW5ncyBoYXZlIGNoYW5nZWQgdGhlaXIgbnVtYmVyaW5nIGFzIHdlbGwuCisjCisjIFRoaXMgaGFzIGJlZW4gdGVzdGVkIG9uIGEgcHJlbGltaW5hcnkgbW9kZWwuCisjCisjIChhdHQ1NDI1OiBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCithdHQ1NDI1fHR0eTU0MjV8YXR0NDQyNXxBVCZUIDQ0MjUvNTQyNSwKKwlhbSwgZGEsIGRiLCBocywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGgjMiwgbGluZXMjMjQsIGxtIzc4LCBsdyM4LCBubGFiIzgsIHdzbCM1NSwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMjs3bSwgY2J0PVxFW1osCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWzEyOzBqLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWzEyOzFqLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlY2g9XEVbJXAxJWRzXEVbJXAxJWRELCBlZD1cRVtKLAorCWVsPVxFW0ssIGVsMT1cRVsxSywgZW5hY3M9XEUoQlxFKTAsCisJZmxhc2g9XEVbPzVoJDwyMDA+XEVbPzVsLCBmc2w9XEU4LCBob21lPVxFW0gsCisJaHBhPVxFWyVwMSV7MX0lKyVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpbmRuPVxFWyVwMSVkRSwKKwlpbnZpcz1cRVs4bSwgaXMxPVxFPFxFWz8zbCQ8MTAwPiwKKwlpczI9XEVbbVwwMTdcRVsxOzI7Mzs0OzZsXEVbMTI7MTM7MTQ7MjBsXEVbPzY7OTc7OTlsXEVbPzdoXEVbNGlcRXhcRVsyNTsxalwyMTIsCisJaXMzPVxFWz81bCwga2JlZz1cRXQsIGticz1eSCwga2NidD1cRVtaLCBrY2xyPVxFW0osCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwKKwlrZGwxPVxFW00sIGtlbD1cRVsySywga2VuZD1cRXosIGtlbnQ9XEVlbnQsIGtmMT1cRU9jLAorCWtmMj1cRU9kLCBrZjM9XEVPZSwga2Y0PVxFT2YsIGtmNT1cRU9nLCBrZjY9XEVPaCwga2Y3PVxFT2ksCisJa2Y4PVxFT2osIGtob21lPVxFW0gsIGtpY2gxPVxFWzRoLCBraWwxPVxFW0wsIGtpbmQ9XEVbVCwKKwlrcmk9XEVbUywgbGw9XEVbMjRILCBtYzA9XEVbPzJpLCBtYzQ9XEVbPzlpLCBtYzU9XEVbPzRpLAorCW5lbD1eTV5KLAorCXBmeD1cRVslcDElZDslcDIlbCUwMmRxICAgRiVwMSUxZCAgICAgICAgICAgJXAyJXMsCisJcGxuPVxFWyVwMSVkOzA7MDswcSVwMiU6LTE2LjE2cywgcHJvdD1cRVYsIHJjPVxFOCwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcmluPVxFWyVwMSVkRiwgcm1hY3M9Xk8sIHJtYW09XEVbPzdsLAorCXJtaXI9XEVbNGwsIHJta3g9XEVbMjE7MGpcRVsyNTsxalwyMTIsIHJtbG49XEV8LAorCXJtc289XEVbbSwgcm11bD1cRVttLCByczI9XEVjXEVbPzNsXEVbMjsweSwgc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDUlfCV0OzIlOyU/JXAyJXA2JXwldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwlcDYlfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbMjE7MWpcRVsyNTs0alxFZW50XEV+LCBzbWxuPVxFfiwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHRzbD1cRTdcRVsyNTslcDElezh9JSslZEgsCisJdnBhPVxFWyVwMSV7MX0lKyVkZCwKKworYXR0NTQyNS1ubHx0dHk1NDI1LW5sfGF0dDQ0MjUtbmx8QVQmVCA0NDI1LzU0MjUgODAgY29sdW1ucyBubyBsYWJlbHMsCisJc21reD1cRVsyMTsxalxFWzI1OzRqXEVlbnQsIHVzZT1hdHQ0NDI1LAorCithdHQ1NDI1LXd8YXR0NDQyNS13fHR0eTU0MjUtd3x0ZWxldHlwZSA0NDI1LzU0MjUgaW4gMTMyIGNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCBsbSM1NCwgd3NsIzk3LAorCWlzMT1cRVs/M2gkPDEwMD4sIHVzZT10dHk1NDI1LAorCisjIChhdHQ0NDI2OiBoaXMgaGFkIGJvZ3VzIGNhcGFiaWxpdGllczogOnJpPVxFTTosIDpyaT1cRVsxVTouCisjIEkgYWxzbyBhZGRlZCA8cm1hbT4vPHNtYW0+IC0tIGVzcikKK2F0dDQ0MjZ8dHR5NDQyNnx0ZWxldHlwZSA0NDI2UywKKwlhbSwgZGEsIGRiLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIGxtIzQ4LAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBib2xkPVxFWzVtLCBjbGVhcj1cRVtIXEVbMkpcRVsxVVxFW0hcRVsySlxFWzFWLAorCWNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVAsCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbMEssIGhvbWU9XEVbSCwKKwlocGE9XEVbJXAxJWRHLCBodD1eSSwgaHRzPVxFMSwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVxeLAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFTCwgaW5kPV5KLCBpbmRuPVxFWyVwMSVkUywKKwlpczE9XEVjXEVbPzdoLCBpczI9XEVbbVxFWzE7MjRyLCBrYnM9XkgsIGtjYnQ9XEVPLAorCWtjbHI9XEVbMkosIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFT1QsIGtmNj1cRU9VLAorCWtmNz1cRU9WLCBrZjg9XEVPVywga2hvbWU9XEVbSCwga2xsPVxFWzI0OzFILCBsbD1cRVsyNEgsCisJbmVsPV5NXkosIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRVQsIHJpbj1cRVslcDElZFQsCisJcm1hY3M9XEUoQiwgcm1hbT1cRVs/N2wsIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMj1cRWNcRVs/M2xcRVsyOzB5LCBzYz1cRTcsIHNncjA9XEVbbVxFKEIsIHNtYWNzPVxFKDAsCisJc21hbT1cRVs/N2gsIHNtc289XEVbNW0sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl2cGE9XEVbJXAxJWRkLAorCisjIFRlcm1pbmZvIGVudHJ5IGZvciB0aGUgQVQmVCA1MTAgQSBQZXJzb25hbCBUZXJtaW5hbAorIyBGdW5jdGlvbiBrZXlzIDkgLSAxNiBhcmUgYXZhaWxhYmxlIG9ubHkgYWZ0ZXIgdGhlCisjIHNjcmVlbiBsYWJlbGVkIChzb2Z0IGtleXMvYWN0aW9uIGJsb2NrcykgYXJlIGxhYmVsZWQuICBGdW5jdGlvbiBrZXkKKyMgOSBjb3JyZXNwb25kcyB0byB0aGUgbGVmdG1vc3QgdG91Y2ggdGFyZ2V0IG9uIHRoZSBzY3JlZW4sCisjIGZ1bmN0aW9uIGtleSAxNiBjb3JyZXNwb25kcyB0byB0aGUgcmlnaHRtb3N0LgorIworIyBUaGlzIGVudHJ5IGlzIGJhc2VkIG9uIG9uZSBkb25lIGJ5IEVybmllIFJpY2UgYXQgU3VtbWl0LCBOSiBhbmQKKyMgY2hhbmdlZCBieSBBbm5lIEdhbGx1cCwgU2tva2llLCBJTCwgdHRyZGMhYW5uZQorYXR0NTEwYXxiY3Q1MTBhfEFUJlQgNTEwQSBQZXJzb25hbCBUZXJtaW5hbCwKKwlhbSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGgjMiwgbGluZXMjMjQsIGx3IzcsIG5sYWIjOCwKKwlhY3NjPStnXCxoLWYuZWBiaHJpc2pqa2tsbG1tbm5xcXR0dXV2dnd3eHh7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzI7N20sIGNidD1cRVtaLAorCWNpdmlzPVxFWzExOzB8LCBjbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbMTE7M3wsIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbMUIsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBjdnZpcz1cRVsxMTsyfCwgZGNoPVxFWyVwMSVkUCwKKwlkY2gxPVxFW1AsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbMEosCisJZWw9XEVbMEssIGVsMT1cRVsxSywgZW5hY3M9XEUoQlxFKTEsIGZmPV5MLCBob21lPVxFW0gsIGh0PV5JLAorCWh0cz1cRUgsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaXMxPVxFKEJcRSkxXEVbMmwsCisJaXMzPVxFWzIxOzF8XDIxMiwga0xGVD1cRVt1LCBrUklUPVxFW3YsIGticz1eSCwga2NidD1cRVtaLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9tLAorCWtmMTA9XEVPZCwga2YxMT1cRU9lLCBrZjEyPVxFT2YsIGtmMTM9XEVPZywga2YxND1cRU9oLAorCWtmMTU9XEVPaSwga2YxNj1cRU9qLCBrZjI9XEVPViwga2YzPVxFT3UsIGtmND1cRU5qLCBrZjU9XEVOZSwKKwlrZjY9XEVOZiwga2Y3PVxFTmgsIGtmOD1cRVtILCBrZjk9XEVPYywga2luZD1cRVtTLCBrcmk9XEVbVCwKKwltYzA9XEVbMGksIG1jND1cRVs/OGksIG1jNT1cRVs/NGksIG5lbD1cRUUsCisJcGxuPVxFWyVwMSVkcCVwMiU6LTE2cywgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybWFjcz1eTywgcm1reD1cRVsxOTswfCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA1JXA2JXwldDsyJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDMlcDElfCVwNiV8JXQ7NyU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNta3g9XEVbMTk7MXwsIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCisjIFRlcm1pbmZvIGVudHJ5IGZvciB0aGUgQVQmVCA1MTAgRCBQZXJzb25hbCBUZXJtaW5hbAorIyBGdW5jdGlvbiBrZXlzIDkgdGhyb3VnaCAxNiBhcmUgYWNjZXNzZWQgYnkgYnJpbmdpbmcgdXAgdGhlCisjIHN5c3RlbSBibG9ja3MuCisjIEZ1bmN0aW9uIGtleSA5IGNvcnJlc3BvbmRzIHRvIHRoZSBsZWZ0bW9zdCB0b3VjaCB0YXJnZXQgb24gdGhlIHNjcmVlbiwKKyMgZnVuY3Rpb24ga2V5IDE2IGNvcnJlc3BvbmRzIHRvIHRoZSByaWdodG1vc3QuCisjCisjIFRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHNvZnQga2V5IGxhYmVsaW5nLiAgVGhlc2UgYXJlIGR1ZSB0bworIyBzdHJhbmdlbmVzc2VzIGluIHRoZSBuYXRpdmUgdGVybWluYWwgdGhhdCBhcmUgaW1wb3NzaWJsZSB0bworIyBkZXNjcmliZSBpbiBhIHRlcm1pbmZvLgorYXR0NTEwZHxiY3Q1MTBkfEFUJlQgNTEwRCBQZXJzb25hbCBUZXJtaW5hbCwKKwlhbSwgZGEsIGRiLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaCMyLCBsaW5lcyMyNCwgbG0jNDgsIGx3IzcsIG5sYWIjOCwKKwlhY3NjPStnXCxoLWYuZWBiaHJpc2pqa2tsbG1tbm5xcXR0dXV2dnd3eHh7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzI7N20sIGNidD1cRVtaLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVsxMTszfCwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsCisJY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVsxQiwgY3VmPVxFWyVwMSVkQywKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsIGN2dmlzPVxFWzExOzJ8LCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGltPVxFWzJtLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVswSiwgZWw9XEVbMEssCisJZWwxPVxFWzFLLCBlbmFjcz1cRShCXEUpMSwgZmY9XkwsIGhvbWU9XEVbSCwKKwlocGE9XEVbJXAxJXsxfSUrJWRHLCBodD1eSSwgaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGluZG49XEVbJXAxJWRTLAorCWludmlzPVxFWzhtLCBpczE9XEUoQlxFKTFcRVs1OzB8LCBpczM9XEVbMjE7MXxcMjEyLAorCWtMRlQ9XEVbdSwga1JJVD1cRVt2LCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVPbSwga2YxMD1cRU9kLAorCWtmMTE9XEVPZSwga2YxMj1cRU9mLCBrZjEzPVxFT2csIGtmMTQ9XEVPaCwga2YxNT1cRU9pLAorCWtmMTY9XEVPaiwga2YyPVxFT1YsIGtmMz1cRU91LCBrZjQ9XEVOaiwga2Y1PVxFTmUsIGtmNj1cRU5mLAorCWtmNz1cRU5oLCBrZjg9XEVbSCwga2Y5PVxFT2MsIGtpbmQ9XEVbUywga3JpPVxFW1QsIGxsPVxFIzIsCisJbWMwPVxFWzBpLCBtYzQ9XEVbPzhpLCBtYzU9XEVbPzRpLCBtZ2M9XEVcOiwgbmVsPVxFRSwKKwlwbG49XEVbJXAxJWRwJXAyJTotMTZzLCByYz1cRTgsCisJcmVwPSVwMSVjXEVbJXAyJXsxfSUtJWRiLCByZXY9XEVbN20sIHJpPVxFTSwKKwlyaW49XEVbJXAxJWRULCBybWFjcz1eTywgcm1pcj1cRVs0bCwgcm1reD1cRVsxOTswfCwKKwlybWxuPVxFPCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHJteG9uPVxFWzI5OzF8LAorCXJzMj1cRVs1OzB8LCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNSVwNiV8JXQ7MiU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXAzJXAxJXwlcDYlfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtZ2w9XEU0LCBzbWdyPVxFNSwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWzE5OzF8LCBzbWxuPVxFPywgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwlzbXhvbj1cRVsyOTswfCwgdGJjPVxFWzNnLCB2cGE9XEVbJXAxJXsxfSUrJWRkLAorCisjIChhdHQ1MDA6IEkgbWVyZ2VkIHRoaXMgd2l0aCB0aGUgYXR0NTEzIGVudHJ5LCBhdHQ1MDAganVzdCB1c2VkIGF0dDUxMyAtLSBlc3IpCithdHQ1MDB8YXR0NTEzfEFUJlQgNTEzIHVzaW5nIHBhZ2UgbW9kZSwKKwlhbSwgY2h0cywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGgjMiwgbGluZXMjMjQsIGx3IzgsIG5sYWIjOCwKKwlhY3NjPStnXCxoLWYuZWBiaHJpc2pqa2tsbG1tbm5xcXR0dXV2dnd3eHh7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzI7N20sIGNidD1cRVtaLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVsxMTswfCwgY3I9Xk0sCisJY3NyPSVpXEVbJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVsxMTsxfCwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQJDwxPiwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwllbmFjcz1cRShCXEUpMSwgaG9tZT1cRVtILCBocGE9XEVbJXAxJXsxfSUrJWRHLCBodD1eSSwKKwlodHM9XEVILCBpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJaW5kbj1cRVslcDElZEUsIGludmlzPVxFWzhtLAorCWlzMT1cRT9cRVszOzN8XEVbMTA7MHxcRVsyMTsxfFwyMTJcRVs2OzF8XEVbMXtcRVs/OTlsLAorCWtCRUc9XEVOQiwga0NBTj1cRU9XLCBrQ01EPVxFT1UsIGtDUFk9XEVORCwga0NSVD1cRU9OLAorCWtEQz1cRU5GLCBrREw9XEVORSwga0VORD1cRU5OLCBrRU9MPVxFT0EsIGtFWFQ9XEVPSywKKwlrRk5EPVxFT1gsIGtITFA9XEVPTSwga0hPTT1cRU5NLCBrSUM9XEVOSiwga0xGVD1cRU5LLAorCWtNT1Y9XEVOQywga01TRz1cRU9MLCBrTlhUPVxFTkgsIGtPUFQ9XEVPUiwga1BSVD1cRU9aLAorCWtQUlY9XEVORywga1JETz1cRU9ULCBrUkVTPVxFT1EsIGtSSVQ9XEVOTCwga1JQTD1cRU9ZLAorCWtTQVY9XEVPTywga1NQRD1cRU9QLCBrVU5EPVxFT1MsIGtiZWc9XEU5LCBrYnM9XkgsIGtjYW49XEVPdywKKwlrY2J0PVxFW1osIGtjbG89XEVPViwga2Nscj1cRVtKLCBrY21kPVxFT3UsIGtjcHk9XEVOZCwKKwlrY3J0PVxFT24sIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVOZiwga2RsMT1cRU5lLCBrZWw9XEVPYSwga2VuZD1cRTAsIGtlbnQ9XEVlbnQsCisJa2V4dD1cRU9rLCBrZjE9XEVPYywga2YyPVxFT2QsIGtmMz1cRU9lLCBrZjQ9XEVPZiwga2Y1PVxFT2csCisJa2Y2PVxFT2gsIGtmNz1cRU9pLCBrZjg9XEVPaiwga2ZuZD1cRU94LCBraGxwPVxFT20sCisJa2hvbWU9XEVbSCwga2ljaDE9XEVOaiwga2luZD1cRVtTLCBrbW92PVxFTmMsIGttcms9XEVOaSwKKwlrbXNnPVxFT2wsIGtucD1cRVtVLCBrbnh0PVxFTmgsIGtvcG49XEVPdiwga29wdD1cRU9yLAorCWtwcD1cRVtWLCBrcHJ0PVxFT3osIGtwcnY9XEVOZywga3Jkbz1cRU90LCBrcmVmPVxFT2IsCisJa3Jlcz1cRU9xLCBrcmZyPVxFTmEsIGtyaT1cRVtULCBrcnBsPVxFT3ksIGtyc3Q9XEVPQiwKKwlrc2F2PVxFT28sIGtzbHQ9XEVOSSwga3NwZD1cRU9wLCBrdW5kPVxFT3MsIGxsPVxFIzIsCisJbWMwPVxFWz85OGxcRVswaSwgbWM0PVxFWz85OGxcRVs/OGksIG1jNT1cRVs/OThsXEVbPzRpLAorCW5lbD1cRUUsCisJcGZrZXk9XEVbJXAxJWQ7JXAyJWwlZDszOzBwICAgRiVwMSVkICAgICAgICAgICAlcDIlcywKKwlwZmxvYz1cRVslcDElZDslcDIlbCVkOzI7MHAgICBGJXAxJWQgICAgICAgICAgICVwMiVzLAorCXBmeD1cRVslcDElZDslcDIlbCVkOzE7MHAgICBGJXAxJWQgICAgICAgICAgICVwMiVzLAorCXBsbj1cRVslcDElZHAlcDIlOi0xNnMsIHJjPVxFOCwKKwlyZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJpbj1cRVslcDElZEYsIHJtYWNzPV5PLCBybWlyPVxFWzRsLAorCXJta3g9XEVbMTk7MHxcRVsyMTsxfFwyMTIsIHJtbG49XEU8LCBybXNvPVxFW20sCisJcm11bD1cRVttLAorCXJzMT1cRT9cRVszOzN8XEVbMTA7MHxcRVsyMTsxfFwyMTJcRVs2OzF8XEVbMXtcRVs/OTlsXEVbMjswfFxFWzY7MXxcRVs4OzB8XEVbMTk7MHxcRVsxe1xFWz85OWwsCisJcnMyPVxFWzU7MHwsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXAxJXA1JXwldDsyJTslPyVwMiVwNiV8JXQ7NCU7JT8lcDQldDs1JTslPyVwMyVwMSV8JXA2JXwldDs3JTslPyVwNyV0OzglO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbMTk7MXxcRVsyMTs0fFxFZW50LCBzbWxuPVxFPywgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHZwYT1cRVslcDElezF9JSslZGQsCisKKyMgMDEtMDctODgKKyMgcHJpbnRlciBtdXN0IGJlIHNldCB0byBFTVVMIEFOU0kgdG8gYWNjZXB0IEVTQyBjb2RlcworIyA8Y3V1MT4gc3RvcHMgYXQgdG9wIG1hcmdpbgorIyA8aXMxPiBzZXRzIGNwaSAxMCxscGkgNixmb3JtIDY2LGxlZnQgMSxyaWdodCAxMzIsdG9wIDEsYm90dG9tIDY2LGZvbnQKKyMJYW5kIGFsdCBmb250IGFzY2lpLHdyYXAgb24sdGFicyBjbGVhcmVkCisjIDxpczI+IGRpc2FibGVzIG5ld2xpbmUgb24gTEYsRW1waGFzaXplZCBvZmYKKyMgVGhlIDx1MD4gY2FwYWJpbGl0eSBzZXRzIGZvcm0gbGVuZ3RoCithdHQ1MzEwfGF0dDUzMjB8QVQmVCBNb2RlbCA1MzIxMCBvciA1MzIwIG1hdHJpeCBwcmludGVyLAorCXhocGEsIHh2cGEsCisJYnVmc3ojODE5MiwgY29scyMxMzIsIGNwcyMxMjAsIGl0IzgsIGxpbmVzIzY2LCBvcmMjMTAsCisJb3JoaSMxMDAsIG9ybCMxMiwgb3J2aSM3MiwKKwljcGk9JT8lcDElezEwfSU9JXRcRVt3JWUlcDElezEyfSU9JXRcRVsydyVlJXAxJXs1fSU9JXRcRVs1dyVlJXAxJXsxM30lPSVwMSV7MTR9JT0lTyV0XEVbM3clZSVwMSV7MTZ9JT0lcDElezE3fSU9JU8ldFxFWzR3JWUlcDElezZ9JT0ldFxFWzZ3JWUlcDElezd9JT0ldFxFWzd3JWUlcDElezh9JT0ldFxFWzh3JTssCisJY3I9Xk0sCisJY3NubT0lPyVwMSV7MH0lPSV0dXNhc2NpaSVlJXAxJXsxfSU9JXRlbmdsaXNoJWUlcDElezJ9JT0ldGZpbm5pc2glZSVwMSV7M30lPSV0amFwYW5lc2UlZSVwMSV7NH0lPSV0bm9yd2VnaWFuJWUlcDElezV9JT0ldHN3ZWRpc2glZSVwMSV7Nn0lPSV0Z2VybWFuaWMlZSVwMSV7N30lPSV0ZnJlbmNoJWUlcDElezh9JT0ldGNhbmFkaWFuX2ZyZW5jaCVlJXAxJXs5fSU9JXRpdGFsaWFuJWUlcDElezEwfSU9JXRzcGFuaXNoJWUlcDElezExfSU9JXRsaW5lJWUlcDElezEyfSU9JXRzZWN1cml0eSVlJXAxJXsxM30lPSV0ZWJjZGljJWUlcDElezE0fSU9JXRhcGwlZSVwMSV7MTV9JT0ldG1vc2FpYyU7LAorCWN1ZD1cRVslcDElZGUsIGN1ZDE9XkosIGN1Zj1cRVslcDElZGEsIGN1ZjE9XHMsIGN1dTE9XEVNLAorCWZmPV5MLCBocGE9XEVbJXAxJWRgLCBodD1eSSwgaXMxPVxFYywgaXMyPVxFWzIwbFxyLAorCWxwaT0lPyVwMSV7Mn0lPSV0XEVbNHolZSVwMSV7M30lPSV0XEVbNXolZSVwMSV7NH0lPSV0XEVbNnolZSVwMSV7Nn0lPSV0XEVbeiVlJXAxJXs4fSU9JXRcRVsyeiVlJXAxJXsxMn0lPSV0XEVbM3olOywKKwlyc2htPVxFW20sCisJc2NzPSU/JXAxJXswfSU9JXRcRShCJWUlcDElezF9JT0ldFxFKEElZSVwMSV7Mn0lPSV0XEUoQyVlJXAxJXszfSU9JXRcRShEJWUlcDElezR9JT0ldFxFKEUlZSVwMSV7NX0lPSV0XEUoSCVlJXAxJXs2fSU9JXRcRShLJWUlcDElezd9JT0ldFxFKFIlZSVwMSV7OH0lPSV0XEUoUSVlJXAxJXs5fSU9JXRcRShZJWUlcDElezEwfSU9JXRcRShaJWUlcDElezExfSU9JXRcRSgwJWUlcDElezEyfSU9JXRcRSgxJWUlcDElezEzfSU9JXRcRSgzJWUlcDElezE0fSU9JXRcRSg4JWUlcDElezE1fSU9JXRcRSh9JTssCisJc21nYnA9XEVbOyVwMSVkciwgc21nbHA9XEVbJXsxfSVwMSUrJWRzLAorCXNtZ3JwPVxFWzslezF9JXAxJSslZHMsIHNtZ3RwPVxFWyVwMSVkciwgc3NobT1cRVs1bSwKKwl1MD1cRVslcDElZHQsIHZwYT1cRVslcDElZGQsCisKKyMgVGVsZXR5cGUgNTYyMCwgZmlybXdhcmUgdmVyc2lvbiAxLjEgKDg7NzszKSBvciBlYXJsaWVyIGZyb20gQlJMCisjIFRoZSBmb2xsb3dpbmcgU0VULVVQIG1vZGVzIGFyZSBhc3N1bWVkIGZvciBub3JtYWwgb3BlcmF0aW9uOgorIwlDUl9ERUY9Q1IJTkxfREVGPUlOREVYCURVUExFWD1GVUxMCisjIE90aGVyIFNFVC1VUCBtb2RlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50cy4gIFRoaXMgdGVybWNhcCBkZXNjcmlwdGlvbiBpcyBmb3IgdGhlIFJlc2lkZW50IFRlcm1pbmFsIE1vZGUuCisjIE5vIGRlbGF5cyBzcGVjaWZpZWQ7IHVzZSAic3R0eSBpeG9uIC1peGFueSIgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyBUaGUgQlJMIGVudHJ5IGFsc28gc2FpZDogVU5TQUZFIDpsbD1cRVs3MEg6CithdHQ1NjIwLTF8dHR5NTYyMC0xfGRtZDF8VGVsZXR5cGUgNTYyMCB3aXRoIG9sZCBST01zLAorCWFtLCB4b24sCisJY29scyM4OCwgaXQjOCwgbGluZXMjNzAsIHZ0IzMsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwKKwlkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBodD1eSSwgaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGluZD1eSiwgaW5kbj1cRVslcDElZFMsIGticz1eSCwga2Nscj1cRVsySiwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRVtILAorCWtsbD1cRVs3MDsxSCwgbmVsPV5NXkosIHJjPVxFOCwgcmk9XEVbVCwgcmluPVxFWyVwMSVkVCwKKwlyczE9XEVjLCBzYz1cRTcsCisKKyMgNTYyMCB0ZXJtaW5mbyAgKDIuMCBvciBsYXRlciBST01TIHdpdGggY2hhciBhdHRyaWJ1dGVzKQorIyBUaGUgZm9sbG93aW5nIFNFVC1VUCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJRFVQTEVYPUZVTEwJR0VOX0ZMT1c9T04JTkVXTElORT1JTkRFWAlSRVRVUk49Q1IKKyMgT3RoZXIgU0VULVVQIG1vZGVzIG1heSBiZSBzZXQgZm9yIG9wZXJhdG9yIGNvbnZlbmllbmNlIG9yIGNvbW11bmljYXRpb24KKyMgcmVxdWlyZW1lbnRzLiAgVGhpcyB0ZXJtY2FwIGRlc2NyaXB0aW9uIGlzIGZvciBSZXNpZGVudCBUZXJtaW5hbCBNb2RlLiAgTm8KKyMgZGVsYXlzIGFyZSBzcGVjaWZpZWQ7IHVzZSAic3R0eSBpeG9uIC1peGFueSIgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyBhc3N1bXB0aW9uczogPGluZD4gKHNjcm9sbCBmb3J3YXJkIG9uZSBsaW5lKSBpcyBvbmx5IGRvbmUgYXQgc2NyZWVuIGJvdHRvbQorIyBCZSBhd2FyZSB0aGF0IG9sZGVyIHZlcnNpb25zIG9mIHRoZSBkbWQgaGF2ZSBhIGZpcm13YXJlIGJ1ZyB0aGF0IGFmZmVjdHMKKyMgcGFyYW1ldGVyIGRlZmF1bHRpbmc7IGZvciB0aGlzIHRlcm1pbmFsLCB0aGUgMCBpbiBcRVswbSBpcyBub3Qgb3B0aW9uYWwuCisjIDxtc2dyPiBpcyBmcm9tIGFuIG90aGVyd2lzZSBpbmZlcmlvciBCUkwgZm9yIHRoaXMgdGVybWluYWwuICBUaGF0IGVudHJ5CisjIGFsc28gaGFzIDxsbD49XEVbNzBIIGNvbW1lbnRlZCBvdXQgYW5kIG1hcmtlZCB1bnNhZmUuCisjIEZvciBtb3JlLCBzZWUgdGhlIDU2MjAgRkFRIG1haW50YWluZWQgYnkgRGF2aWQgQnJlbmVtYW4gPGRhdmViQGRndGwuY29tPi4KK2F0dDU2MjB8ZG1kfHR0eTU2MjB8dHR5ZG1kfDU2MjB8NTYyMCB0ZXJtaW5hbCA4OCBjb2x1bW5zLAorCU9UYnMsIGFtLCBtc2dyLCBucGMsIHhvbiwKKwljb2xzIzg4LCBpdCM4LCBsaW5lcyM3MCwKKwliZWw9XkcsIGJvbGQ9XEVbMm0sIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPVxFW0IsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWNoPVxFWyVwMSVkQCwKKwlpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLAorCWluZG49XEVbJXAxJWRTLCBrYnM9XkgsIGtjbHI9XEVbMkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2hvbWU9XEVbSCwga2xsPVxFWzcwOzFILCBuZWw9XkosCisJcGZ4PVxFWyVwMSVkOyVwMiVsJWRxJXAyJXMsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRVtULAorCXJpbj1cRVslcDElZFQsIHJtc289XEVbMG0sIHJtdWw9XEVbMG0sIHJzMT1cRWMsIHNjPVxFNywKKwlzZ3IwPVxFWzBtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorYXR0NTYyMC0yNHx0dHk1NjIwLTI0fGRtZC0yNHx0ZWxldHlwZSBkbWQgNTYyMCBpbiBhIDI0eDgwIGxheWVyLAorCWxpbmVzIzI0LCB1c2U9YXR0NTYyMCwKK2F0dDU2MjAtMzR8dHR5NTYyMC0zNHxkbWQtMzR8dGVsZXR5cGUgZG1kIDU2MjAgaW4gYSAzNHg4MCBsYXllciwKKwlsaW5lcyMzNCwgdXNlPWF0dDU2MjAsCisjIDU2MjAgbGF5ZXIgcnVubmluZyB0aGUgIlMiIHN5c3RlbSdzIGRvd25sb2FkZWQgZ3JhcGhpY3MgaGFuZGxlcjoKK2F0dDU2MjAtc3x0dHk1NjIwLXN8bGF5ZXJ8dml0dHl8NTYyMCBTIGxheWVyLAorCU9UYnMsIE9UcHQsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzcyLAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1cD1cRVklcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9XkssIGRsMT1cRUQsCisJZWw9XEVLLCBmbGFzaD1cRV5HLCBodD1eSSwgaWwxPVxFSSwgaW5kPV5KLCBrYnM9XkgsIGtjbHI9XEVbMkosCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2hvbWU9XEVbSCwKKwlrbGw9XEVbNzA7MUgsCisKKyMgRW50cmllcyBmb3IgPGtmMTU+IHRocnUgPGtmMjg+IHJlZmVyIHRvIHRoZSBzaGlmdGVkIHN5c3RlbSBwZiBrZXlzLgorIworIyBFbnRyaWVzIGZvciA8a2YyOT4gdGhydSA8a2Y0Nj4gcmVmZXIgdG8gdGhlIGFsdGVybmF0ZSBrZXlwYWQgbW9kZQorIyBrZXlzOiAgPSAqIC8gKyA3IDggOSAtIDQgNSA2ICwgMSAyIDMgMCAuIEVOVEVSCithdHQ2MDV8QVQmVCA2MDUgODAgY29sdW1uIDEwMmtleSBrZXlib2FyZCwKKwlhbSwgZW8sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgbHcjOCwgbmxhYiM4LCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0osCisJY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLAorCWRjaDE9XEVbUCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLAorCWVsPVxFW0ssIGVsMT1cRVsxSywgZnNsPVxFOCwgaHQ9XkksIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwKKwlpbDE9XEVbTCwgaW5kPV5KLCBpbnZpcz1cRVs4bSwKKwlpczE9XEVbODswfFxFWz9cRVsxMzsyMGxcRVs/XEVbMTJoLCBpczI9XEVbbVwwMTcsCisJa0xGVD1cRVsgQSwga1JJVD1cRVsgQCwga2JzPV5ILCBrY2J0PVxFW1osIGtjbHI9XEVbMkosCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwKKwlrZGwxPVxFW00sIGtlbmQ9XEVbMjQ7MUgsIGtmMT1cRU9jLCBrZjEwPVxFTnAsIGtmMTE9XEVOcSwKKwlrZjEyPVxFTnIsIGtmMTM9XEVOcywga2YxND1cRU50LCBrZjE1PVxFT0MsIGtmMTY9XEVPRCwKKwlrZjE3PVxFT0UsIGtmMTg9XEVPRiwga2YxOT1cRU9HLCBrZjI9XEVPZCwga2YyMD1cRU9ILAorCWtmMjE9XEVPSSwga2YyMj1cRU9KLCBrZjIzPVxFTk8sIGtmMjQ9XEVOUCwga2YyNT1cRU5RLAorCWtmMjY9XEVOUiwga2YyNz1cRU5TLCBrZjI4PVxFTlQsIGtmMjk9XEVPUCwga2YzPVxFT2UsCisJa2YzMD1cRU9RLCBrZjMxPVxFT1IsIGtmMzI9XEVPUywga2YzMz1cRU93LCBrZjM0PVxFT3gsCisJa2YzNT1cRU95LCBrZjM2PVxFT20sIGtmMzc9XEVPdCwga2YzOD1cRU91LCBrZjM5PVxFT3YsCisJa2Y0PVxFT2YsIGtmNDA9XEVPbCwga2Y0MT1cRU9xLCBrZjQyPVxFT3IsIGtmNDM9XEVPcywKKwlrZjQ0PVxFT3AsIGtmNDU9XEVPbiwga2Y0Nj1cRU9NLCBrZjU9XEVPZywga2Y2PVxFT2gsCisJa2Y3PVxFT2ksIGtmOD1cRU9qLCBrZjk9XEVObywga2hvbWU9XEVbSCwga2ljaDE9XEVbQCwKKwlraWwxPVxFW0wsIGtpbmQ9XEVbUywga25wPVxFW1UsIGtwcD1cRVtWLCBsbD1cRVsyNEgsCisJbWM0PVxFWz80aSwgbWM1PVxFWz81aSwgbmVsPVxFRSwKKwlwZng9XEVbJXAxJWQ7JXAyJWwlMDJkcSAgIEYlcDElMWQgICAgICAgICAgICVwMiVzLAorCXBsbj1cRVslcDElZDswOzA7MHElcDIlOi0xNi4xNnMsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJtYWNzPV5PLCBybWlyPVxFWzRsLCBybWxuPVxFWzJwLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XEVjXEVbPzNsLCBzYz1cRTcsIHNncjA9XEVbbVwwMTcsIHNtYWNzPVxFKTBcMDE2LAorCXNtaXI9XEVbNGgsIHNtbG49XEVbcCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0c2w9XEU3XEVbMjU7JWklcDElZHgsCithdHQ2MDUtcGN8QVRUIDYwNSBpbiBwYyB0ZXJtIG1vZGUsCisJYWNzYz1qXDMzMWtcMjc3bFwzMzJtXDMwMG5cMzA1cVwzMDR0XDMwM3VcMjY0dlwzMDF3XDMwMnhcMjYzLAorCWNidD1cRVtaLCBjdWIxPVxFW0QsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLCBjdXUxPVxFW0EsCisJZGNoMT1cRVtQLCBkbDE9XEVbTSwgaWNoMT1cRVtALCBpbDE9XEVbTCwga2NidD1cRVtaLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsCisJa2RsMT1cRVtNLCBrZW5kPVxFW0YsIGtmMT1cRVtNLCBrZjEwPVxFW1YsIGtmMj1cRVtOLAorCWtmMz1cRVtPLCBrZjQ9XEVbUCwga2Y1PVxFW1EsIGtmNj1cRVtSLCBrZjc9XEVbUywga2Y4PVxFW1QsCisJa2Y5PVxFW1UsIGtob21lPVxFW0gsIGtpY2gxPVxFW0AsIGtucD1cRVtHLCBrcHA9XEVbSSwKKwlybXNjPTQwMFxFWzUwOzB8LCBzbXNjPTI1MFxFWz8xMWxcRVs1MDsxfCwgeG9mZmM9ZywKKwl4b25jPWUsIHVzZT1hdHQ2MDUsCithdHQ2MDUtd3xBVCZUIDYwNS13IDEzMiBjb2x1bW4gMTAyIGtleSBrZXlib2FyZCwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczE9XEVbODswfFxFWz80OzU7MTM7MTVsXEVbMTM7MjBsXEVbPzM7N2hcRVsxMmhcRShCXEUpMCwKKwl1c2U9YXR0NjA1LAorIyAoYXR0NjEwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nLiAgSSBhbHNvCisjIGFkZGVkIDxpbmRuPiBhbmQgPHJpbj4gYmVjYXVzZSB0aGUgQlNEIGZpbGUgc2F5cyB0aGUgYXR0NjE1cyBoYXZlIHRoZW0sCisjIGFuZCB0aGUgNjE1IGlzIGxpa2UgYSA2MTAgd2l0aCBhIGJpZyBrZXlib2FyZCwgYW5kIG1vc3Qgb2YgdGhlaXIgb3RoZXIKKyMgc21hcnQgdGVybWluYWxzIHN1cHBvcnQgdGhlIHNhbWUgc2VxdWVuY2UgLS0gZXNyKQorYXR0NjEwfEFUJlQgNjEwOyA4MCBjb2x1bW47IDk4a2V5IGtleWJvYXJkLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzIsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVs/MjVoXEVbPzEybCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8xMjsyNWgsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwlmbGFzaD1cRVs/NWgkPDIwMD5cRVs/NWwsIGZzbD1cRTgsIGhvbWU9XEVbSCwgaHQ9XkksCisJaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOG0sCisJaXMxPVxFWzg7MHxcRVs/Mzs0OzU7MTM7MTVsXEVbMTM7MjBsXEVbPzdoXEVbMTJoXEUoQlxFKTAsCisJaXMyPVxFW21cMDE3LCBpczM9XEUoQlxFKTAsIGtMRlQ9XEVbIEAsIGtSSVQ9XEVbIEEsIGticz1eSCwKKwlrY2J0PVxFW1osIGtjbHI9XEVbMkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2YxPVxFT2MsIGtmMTA9XEVOcCwga2YxMT1cRU5xLCBrZjEyPVxFTnIsCisJa2YxMz1cRU5zLCBrZjE0PVxFTnQsIGtmMj1cRU9kLCBrZjM9XEVPZSwga2Y0PVxFT2YsIGtmNT1cRU9nLAorCWtmNj1cRU9oLCBrZjc9XEVPaSwga2Y4PVxFT2osIGtmOT1cRU5vLCBraG9tZT1cRVtILAorCWtpbmQ9XEVbUywga3JpPVxFW1QsIGxsPVxFWzI0SCwgbWM0PVxFWz80aSwgbWM1PVxFWz81aSwKKwluZWw9XEVFLAorCXBmeD1cRVslcDElZDslcDIlbCUwMmRxICAgRiVwMSUxZCAgICAgICAgICAgJXAyJXMsCisJcGxuPVxFWyVwMSVkOzA7MDswcSVwMiU6LTE2LjE2cywgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNLCByaW49XEVbJXAxJWRULCBybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsCisJcm1sbj1cRVsycCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMj1cRWNcRVs/M2wsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDUldDsyJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDMlcDElfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNtbG49XEVbcCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdHNsPVxFN1xFWzI1OyVpJXAxJWR4LAorYXR0NjEwLXd8QVQmVCA2MTA7IDEzMiBjb2x1bW47IDk4a2V5IGtleWJvYXJkLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMT1cRVs4OzB8XEVbPzQ7NTsxMzsxNWxcRVsxMzsyMGxcRVs/Mzs3aFxFWzEyaCwKKwl1c2U9YXR0NjEwLAorCithdHQ2MTAtMTAza3xBVCZUIDYxMDsgODAgY29sdW1uOyAxMDNrZXkga2V5Ym9hcmQsCisJa0JFRz1cRU5CLCBrQ0FOPVxFT1csIGtDTUQ9XEVPVSwga0NQWT1cRU5ELCBrQ1JUPVxFT04sCisJa0RDPVxFTkYsIGtETD1cRU5FLCBrRU5EPVxFTk4sIGtFT0w9XEVPQSwga0VYVD1cRU9LLAorCWtGTkQ9XEVPWCwga0hMUD1cRU9NLCBrTU9WPVxFTkMsIGtNU0c9XEVPTCwga05YVD1cRU5ILAorCWtPUFQ9XEVPUiwga1BSVD1cRU9aLCBrUFJWPVxFTkcsIGtSRE89XEVPVCwga1JFUz1cRU9RLAorCWtSUEw9XEVPWSwga1NBVj1cRU9PLCBrU1BEPVxFT1AsIGtVTkQ9XEVPUywga2JlZz1cRTksCisJa2Nhbj1cRU93LCBrY2xvPVxFT1YsIGtjbWQ9XEVPdSwga2NweT1cRU5kLCBrY3J0PVxFT24sCisJa2RjaDE9XEVOZiwga2RsMT1cRU5lLCBrZWw9XEVPYSwga2VuZD1cRTAsIGtlbnQ9Xk0sCisJa2V4dD1cRU9rLCBrZjEwQCwga2YxMUAsIGtmMTJALCBrZjEzQCwga2YxNEAsIGtmOUAsIGtmbmQ9XEVPeCwKKwlraGxwPVxFT20sIGtpY2gxPVxFTmosIGttb3Y9XEVOYywga21yaz1cRU5pLCBrbXNnPVxFT2wsCisJa25wPVxFW1UsIGtueHQ9XEVOaCwga29wbj1cRU92LCBrb3B0PVxFT3IsIGtwcD1cRVtWLAorCWtwcnQ9XEVPeiwga3Bydj1cRU5nLCBrcmRvPVxFT3QsIGtyZWY9XEVPYiwga3Jlcz1cRU9xLAorCWtyZnI9XEVOYSwga3JtaXI9XEVOaiwga3JwbD1cRU95LCBrcnN0PVxFT0IsIGtzYXY9XEVPbywKKwlrc2x0PVxFTkksIGtzcGQ9XEVPcCwga3VuZD1cRU9zLCB1c2U9YXR0NjEwLAorYXR0NjEwLTEwM2std3xBVCZUIDYxMDsgMTMyIGNvbHVtbjsgMTAza2V5IGtleWJvYXJkLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMT1cRVs4OzB8XEVbPzQ7NTsxMzsxNWxcRVsxMzsyMGxcRVs/Mzs3aFxFWzEyaCwKKwl1c2U9YXR0NjEwLTEwM2ssCithdHQ2MTV8QVQmVCA2MTU7IDgwIGNvbHVtbjsgOThrZXkga2V5Ym9hcmQsCisJa0xGVD1cRVsgQSwga1JJVD1cRVsgQCwga2YxNT1cRU9DLCBrZjE2PVxFT0QsIGtmMTc9XEVPRSwKKwlrZjE4PVxFT0YsIGtmMTk9XEVPRywga2YyMD1cRU9ILCBrZjIxPVxFT0ksIGtmMjI9XEVPSiwKKwlrZjIzPVxFTk8sIGtmMjQ9XEVOUCwga2YyNT1cRU5RLCBrZjI2PVxFTlIsIGtmMjc9XEVOUywKKwlrZjI4PVxFTlQsIGtmMjk9XEVPUCwga2YzMD1cRU9RLCBrZjMxPVxFT1IsIGtmMzI9XEVPUywKKwlrZjMzPVxFT3csIGtmMzQ9XEVPeCwga2YzNT1cRU95LCBrZjM2PVxFT20sIGtmMzc9XEVPdCwKKwlrZjM4PVxFT3UsIGtmMzk9XEVPdiwga2Y0MD1cRU9sLCBrZjQxPVxFT3EsIGtmNDI9XEVPciwKKwlrZjQzPVxFT3MsIGtmNDQ9XEVPcCwga2Y0NT1cRU9uLCBrZjQ2PVxFT00sIHVzZT1hdHQ2MTAsCithdHQ2MTUtd3xBVCZUIDYxNTsgMTMyIGNvbHVtbjsgOThrZXkga2V5Ym9hcmQsCisJa0xGVD1cRVsgQSwga1JJVD1cRVsgQCwga2YxNT1cRU9DLCBrZjE2PVxFT0QsIGtmMTc9XEVPRSwKKwlrZjE4PVxFT0YsIGtmMTk9XEVPRywga2YyMD1cRU9ILCBrZjIxPVxFT0ksIGtmMjI9XEVPSiwKKwlrZjIzPVxFTk8sIGtmMjQ9XEVOUCwga2YyNT1cRU5RLCBrZjI2PVxFTlIsIGtmMjc9XEVOUywKKwlrZjI4PVxFTlQsIGtmMjk9XEVPUCwga2YzMD1cRU9RLCBrZjMxPVxFT1IsIGtmMzI9XEVPUywKKwlrZjMzPVxFT3csIGtmMzQ9XEVPeCwga2YzNT1cRU95LCBrZjM2PVxFT20sIGtmMzc9XEVPdCwKKwlrZjM4PVxFT3UsIGtmMzk9XEVPdiwga2Y0MD1cRU9sLCBrZjQxPVxFT3EsIGtmNDI9XEVPciwKKwlrZjQzPVxFT3MsIGtmNDQ9XEVPcCwga2Y0NT1cRU9uLCBrZjQ2PVxFT00sIHVzZT1hdHQ2MTAtdywKK2F0dDYxNS0xMDNrfEFUJlQgNjE1OyA4MCBjb2x1bW47IDEwM2tleSBrZXlib2FyZCwKKwlrTEZUPVxFWyBBLCBrUklUPVxFWyBALCB1c2U9YXR0NjEwLTEwM2ssCithdHQ2MTUtMTAzay13fEFUJlQgNjE1OyAxMzIgY29sdW1uOyAxMDNrZXkga2V5Ym9hcmQsCisJa0xGVD1cRVsgQSwga1JJVD1cRVsgQCwgdXNlPWF0dDYxMC0xMDNrLXcsCisjIChhdHQ2MjA6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgYW5kCisjIDxyaW4+LzxpbmRuPiBmcm9tIGEgQlNEIHRlcm1jYXAgLS0gZXNyKQorYXR0NjIwfEFUJlQgNjIwOyA4MCBjb2x1bW47IDk4a2V5IGtleWJvYXJkLAorCWFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxoIzIsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVs/MjVoXEVbPzEybCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8xMjsyNWgsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwlmbGFzaD1cRVs/NWgkPDIwMD5cRVs/NWwsIGZzbD1cRTgsIGhvbWU9XEVbSCwgaHQ9XkksCisJaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFRCwKKwlpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOG0sCisJaXMxPVxFWzg7MHxcRVs/Mzs0OzU7MTM7MTVsXEVbMTM7MjBsXEVbPzdoXEVbMTJoLAorCWlzMj1cRVttXDAxNywgaXMzPVxFKEJcRSkwLCBrTEZUPVxFWyBBLCBrUklUPVxFWyBALCBrYnM9XkgsCisJa2NidD1cRVtaLCBrY2xyPVxFWzJKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMT1cRU9jLCBrZjEwPVxFTnAsIGtmMTE9XEVOcSwga2YxMj1cRU5yLAorCWtmMTM9XEVOcywga2YxND1cRU50LCBrZjE1PVxFT0MsIGtmMTY9XEVPRCwga2YxNz1cRU9FLAorCWtmMTg9XEVPRiwga2YxOT1cRU9HLCBrZjI9XEVPZCwga2YyMD1cRU9ILCBrZjIxPVxFT0ksCisJa2YyMj1cRU9KLCBrZjIzPVxFTk8sIGtmMjQ9XEVOUCwga2YyNT1cRU5RLCBrZjI2PVxFTlIsCisJa2YyNz1cRU5TLCBrZjI4PVxFTlQsIGtmMjk9XEVPUCwga2YzPVxFT2UsIGtmMzA9XEVPUSwKKwlrZjMxPVxFT1IsIGtmMzI9XEVPUywga2YzMz1cRU93LCBrZjM0PVxFT3gsIGtmMzU9XEVPeSwKKwlrZjM2PVxFT20sIGtmMzc9XEVPdCwga2YzOD1cRU91LCBrZjM5PVxFT3YsIGtmND1cRU9mLAorCWtmNDA9XEVPbCwga2Y0MT1cRU9xLCBrZjQyPVxFT3IsIGtmNDM9XEVPcywga2Y0ND1cRU9wLAorCWtmNDU9XEVPbiwga2Y0Nj1cRU9NLCBrZjU9XEVPZywga2Y2PVxFT2gsIGtmNz1cRU9pLCBrZjg9XEVPaiwKKwlrZjk9XEVObywga2hvbWU9XEVbSCwga2luZD1cRVtTLCBrcmk9XEVbVCwgbGw9XEVbMjRILAorCW1jND1cRVs/NGksIG1jNT1cRVs/NWksIG5lbD1cRUUsCisJcGZ4PVxFWyVwMSVkOyVwMiVsJTAyZHEgICBGJXAxJTFkICAgICAgICAgICAlcDIlcywKKwlwbG49XEVbJXAxJWQ7MDswOzBxJXAyJTotMTYuMTZzLCByYz1cRTgsIHJldj1cRVs3bSwKKwlyaT1cRU0sIHJpbj1cRVslcDElZFQsIHJtYWNzPVxFKEJcMDE3LCBybWFtPVxFWz83bCwKKwlybWlyPVxFWzRsLCBybWxuPVxFWzJwLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XEVjXEVbPzNsLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwNiV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMyVwMSV8JXQ7NyU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cRShCXDAxNywgc21hY3M9XEUpMFwwMTYsIHNtYW09XEVbPzdoLAorCXNtaXI9XEVbNGgsIHNtbG49XEVbcCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0c2w9XEU3XEVbMjU7JWklcDElZHgsCithdHQ2MjAtd3xBVCZUIDYyMDsgMTMyIGNvbHVtbjsgOThrZXkga2V5Ym9hcmQsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMxPVxFWzg7MHxcRVs/NDs1OzEzOzE1bFxFWzEzOzIwbFxFWz8zOzdoXEVbMTJoLAorCXVzZT1hdHQ2MjAsCithdHQ2MjAtMTAza3xBVCZUIDYyMDsgODAgY29sdW1uOyAxMDNrZXkga2V5Ym9hcmQsCisJa0JFRz1cRU5CLCBrQ0FOPVxFT1csIGtDTUQ9XEVPVSwga0NQWT1cRU5ELCBrQ1JUPVxFT04sCisJa0RDPVxFTkYsIGtETD1cRU5FLCBrRU5EPVxFTk4sIGtFT0w9XEVPQSwga0VYVD1cRU9LLAorCWtGTkQ9XEVPWCwga0hMUD1cRU9NLCBrTU9WPVxFTkMsIGtNU0c9XEVPTCwga05YVD1cRU5ILAorCWtPUFQ9XEVPUiwga1BSVD1cRU9aLCBrUFJWPVxFTkcsIGtSRE89XEVPVCwga1JFUz1cRU9RLAorCWtSUEw9XEVPWSwga1NBVj1cRU9PLCBrU1BEPVxFT1AsIGtVTkQ9XEVPUywga2JlZz1cRTksCisJa2Nhbj1cRU93LCBrY2xvPVxFT1YsIGtjbWQ9XEVPdSwga2NweT1cRU5kLCBrY3J0PVxFT24sCisJa2RjaDE9XEVOZiwga2RsMT1cRU5lLCBrZWw9XEVPYSwga2VuZD1cRTAsIGtlbnQ9Xk0sCisJa2V4dD1cRU9rLCBrZjEwQCwga2YxMUAsIGtmMTJALCBrZjEzQCwga2YxNEAsIGtmMTVALCBrZjE2QCwga2YxN0AsCisJa2YxOEAsIGtmMTlALCBrZjIwQCwga2YyMUAsIGtmMjJALCBrZjIzQCwga2YyNEAsIGtmMjVALCBrZjI2QCwga2YyN0AsCisJa2YyOEAsIGtmMjlALCBrZjMwQCwga2YzMUAsIGtmMzJALCBrZjMzQCwga2YzNEAsIGtmMzVALCBrZjM2QCwga2YzN0AsCisJa2YzOEAsIGtmMzlALCBrZjQwQCwga2Y0MUAsIGtmNDJALCBrZjQzQCwga2Y0NEAsIGtmNDVALCBrZjQ2QCwga2Y5QCwKKwlrZm5kPVxFT3gsIGtobHA9XEVPbSwga2ljaDE9XEVOaiwga21vdj1cRU5jLCBrbXJrPVxFTmksCisJa21zZz1cRU9sLCBrbnA9XEVbVSwga254dD1cRU5oLCBrb3BuPVxFT3YsIGtvcHQ9XEVPciwKKwlrcHA9XEVbViwga3BydD1cRU96LCBrcHJ2PVxFTmcsIGtyZG89XEVPdCwga3JlZj1cRU9iLAorCWtyZXM9XEVPcSwga3Jmcj1cRU5hLCBrcm1pcj1cRU5qLCBrcnBsPVxFT3ksIGtyc3Q9XEVPQiwKKwlrc2F2PVxFT28sIGtzbHQ9XEVOSSwga3NwZD1cRU9wLCBrdW5kPVxFT3MsIHVzZT1hdHQ2MjAsCisKK2F0dDYyMC0xMDNrLXd8QVQmVCA2MjA7IDEzMiBjb2x1bW47IDEwM2tleSBrZXlib2FyZCwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczE9XEVbODswfFxFWz80OzU7MTM7MTVsXEVbMTM7MjBsXEVbPzM7N2hcRVsxMmgsCisJdXNlPWF0dDYyMC0xMDNrLAorCisjIEFUJlQgKGZvcm1lcmx5IFRlbGV0eXBlKSA2MzAgTXVsdGktVGFza2luZyBHcmFwaGljcyB0ZXJtaW5hbAorIyBUaGUgZm9sbG93aW5nIFNFVFVQIG1vZGVzIGFyZSBhc3N1bWVkIGZvciBub3JtYWwgb3BlcmF0aW9uOgorIwlMb2NhbF9FY2hvPU9mZglHZW5fRmxvdz1PbglSZXR1cm49Q1IJUmVjZWl2ZWRfTmV3bGluZT1MRgorIwlGb250X1NpemU9TGFyZ2UJCU5vbi1MYXllcnNfV2luZG93X0NvbHM9ODAKKyMJCQkJTm9uLUxheWVyc19XaW5kb3dfUm93cz02MAorIyBPdGhlciBTRVRVUCBtb2RlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50cy4gIFNvbWUgY2FwYWJpbGl0aWVzIGFzc3VtZSBhIHByaW50ZXIgYXR0YWNoZWQgdG8gdGhlIEF1eCBFSUEKKyMgcG9ydC4gIFRoaXMgdGVybWNhcCBkZXNjcmlwdGlvbiBpcyBmb3IgdGhlIEZpeGVkIE5vbi1MYXllcnMgV2luZG93LiAgTm8KKyMgZGVsYXlzIGFyZSBzcGVjaWZpZWQ7IHVzZSAic3R0eSBpeG9uIC1peGFueSIgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyAoYXR0NjMwOiBhZGRlZCA8aWNoMT4sIDxibGluaz4gYW5kIDxkaW0+IGZyb20gYSBCU0QgdGVybWNhcCBmaWxlIC0tIGVzcikKK2F0dDYzMHxBVCZUIDYzMCB3aW5kb3dpbmcgdGVybWluYWwsCisJT1RicywgYW0sIGRhLCBkYiwgbWlyLCBtc2dyLCBucGMsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyM2MCwgbG0jMCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssCisJZWwxPVxFWzFLLCBob21lPVxFW0gsIGh0PV5JLCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFRCwgaW5kbj1cRVslcDElZFMsIGlzMj1cRVttLAorCWticz1eSCwga2NidD1cRVtaLCBrY2xyPVxFWzJKLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVxFW1AsIGtkbDE9XEVbTSwga2VudD1eTSwKKwlrZjEwPVxFTnAsIGtmMTE9XEVOcSwga2YxMj1cRU5yLCBrZjEzPVxFTnMsIGtmMTQ9XEVOdCwKKwlrZjE1PVxFTnUsIGtmMTY9XEVOdiwga2YxNz1cRU53LCBrZjE4PVxFTngsIGtmMTk9XEVOeSwKKwlrZjIwPVxFTnosIGtmMjE9XEVOeywga2YyMj1cRU58LCBrZjIzPVxFTn0sIGtmMjQ9XEVOfiwKKwlrZjk9XEVObywga2hvbWU9XEVbSCwga2ljaDE9XEVbQCwga2lsMT1cRVtMLCBtYzQ9XEVbPzRpLAorCW1jNT1cRVs/NWksIG5lbD1eTV5KLCBwZng9XEVbJXAxJWQ7JXAyJWwlZHElcDIlcywgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCByaW49XEVbJXAxJWRULCBybWlyPVxFWzRsLCBybXNvPVxFW20sCisJcm11bD1cRVttLCByczI9XEVjLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMiV0OzQlOyU/JXAxJXAzJXwlcDQlfCVwNSV8JXQ7NyU7bSwKKwlzZ3IwPVxFW20sIHNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCithdHQ2MzAtMjR8NTYzMC0yNHw1NjMwRE1ELTI0fDYzME1URy0yNHxBVCZUIDYzMCB3aW5kb3dpbmcgdGVybWluYWwgMjQgbGluZXMsCisJbGluZXMjMjQsIHVzZT1hdHQ2MzAsCisKKyMgVGhpcyBpcyB0aGUgYXR0NzAwIGVudHJ5IGZvciA3MDAgbmF0aXZlIGVtdWxhdGlvbiBvZiB0aGUgQVQmVCA3MDAKKyMgdGVybWluYWwuICBDb21tZW50cyBhcmUgcmVsYXRpdmUgdG8gY2hhbmdlcyBmcm9tIHRoZSA2MDVWMiBlbnRyeSBhbmQKKyMgYXR0NzMwIG9uIHdoaWNoIHRoZSBlbnRyeSBpcyBiYXNlZC4gIENvbW1lbnRzIHNob3cgdGhlIHRlcm1pbmZvCisjIGNhcGFiaWxpdHkgbmFtZSwgdGVybWNhcCBuYW1lLCBhbmQgZGVzY3JpcHRpb24uCisjCisjIEhlcmUgaXMgd2hhdCdzIGdvaW5nIG9ubSBpbiB0aGUgaW5pdCBzdHJpbmc6CisjCUVTQyBbIDUwOzR8CXNldCA3MDAgbmF0aXZlIG1vZGUgKHJlYWxseSBpcyA2MDUpCisjIHgJRVNDIFsgNTY7cHN8IAlzZXQgbGluZXMgdG8gMjQ6IHBzPTA7IDQwOiBwcz0xIChwbHVzIHN0YXR1cyBsaW5lKQorIwlFU0MgWyA1MzswfAlzZXQgR2VuRmxvdyB0byBYb24vWG9mZgorIwlFU0MgWyA4IDswfAlzZXQgQ1Igb24gTkwKKyMgeAlFU0MgWyA/IDMgbC9oCXNldCB3b3Jrc3BhY2U6IDgwIGNvbChsKTsgMTMyIGNvbChoKQorIwlFU0MgWyA/IDQgbAlqdW1wIHNjcm9sbAorIwlFU0MgWyA/IDUgbC9oCXZpZGVvOiBub3JtYWwgKGwpOyByZXZlcnNlIChoKQorIwlFU0MgWyA/MTMgbAlMYWJlbHMgb24KKyMJRVNDIFsgPzE1IGwJcGFyaXR5IGNoZWNrID0gbm8KKyMJRVNDIFsgMTMgbAltb25pdG9yIG1vZGUgb2ZmCisjCUVTQyBbIDIwIGwJTEYgb24gTkwgKG5vdCBDUkxGIG9uIE5MKQorIwlFU0MgWyA/IDcgaAlhdXRvd3JhcCBvbgorIwlFU0MgWyAxMiBoCWxvY2FsIGVjaG8gb2ZmCisjCUVTQyAoIEIJCUdPID0gQVNDSUkKKyMJRVNDICkgMAkJRzEgPSBTcGVjaWFsIENoYXIgJiBMaW5lIERyYXdpbmcKKyMJRVNDIFsgPyAzMSBsCVNldCA3IGJpdCBjb250cm9scworIworIyBOb3RlOiBNb3N0IHRlcm1pbmFscywgZXNwZWNpYWxseSB0aGUgNjAwIGZhbWlseSB1c2UgUmV2ZXJzZSBWaWRlbyBmb3IKKyMgc3RhbmRvdXQgbW9kZS4gIERFQyBhbHNvIHVzZXMgcmV2ZXJzZSB2aWRlby4gIFRoZSBWVDEwMCB1c2VzIGJvbGQgaW4gYWRkaXRpb24KKyMgQXNzdW1lIHdlIHNob3VsZCBzdGF5IHdpdGggcmV2ZXJzZSB2aWRlbyBmb3IgNzAuLiAgSG93ZXZlciwgdGhlIDYwNVYyIGV4aXRzCisjIHN0YW5kb3V0IG1vZGUgd2l0aCBcRVttIChhbGwgbm9ybWFsIGF0dHJpYnV0ZXMpLiAgVGhlIDczMCBlbnRyeSBzaW1wbHkKKyMgZXhpdHMgcmV2ZXJzZSB2aWRlbyB3aGljaCB3b3VsZCBsZWF2ZSBvdGhlciBjdXJyZW50IGF0dHJpYnV0ZXMgaW50YWN0LiAgSXQKKyMgd2FzIGFzc3VtZWQgdGhlIDczMCBlbnRyeSB0byBiZSBtb3JlIGNvcnJlY3Qgc28gcm1zbyBoYXMgY2hhbmdlZC4gIFRoZQorIyA2MDVWMiBoYXMgbm8gc2VxdWVuY2VzIHRvIHR1cm4gaW5kaXZpZHVhbCBhdHRyaWJ1dGVzIG9mZiwgdGh1cyBpdHMgc2V0dGluZworIyBhbmQgdGhlIHJtc28vc21zbyBzZXR0aW5ncyBmcm9tIHRoZSA3MzAuCisjCisjIE5vdGU6IEZvciB0aGUgc2FtZSByZWFzb24gYXMgYWJvdmUgaW4gcm1zbyBJIGNoYW5nZWQgZXhpdCB1bmRlci1zY29yZSBtb2RlCisjIHRvIHNwZWNpZmljYWxseSB0dXJuIG9mZiB1bmRlcnNjb3JlLCByYXRoZXIgdGhhbiByZXR1cm4gdG8gYWxsIG5vcm1hbAorIyBhdHRyaWJ1dGVzCisjCisjIE5vdGU6IFRoZSBmb2xsb3dpbmcgcGtleV94bWl0IGlzIHRha2VuIGZyb20gdGhlIDYwNVYyIHdoaWNoIGNvbnRhaW5lZCB0aGUKKyMgY2FwYWJpbGl0eSBhcyBwZnhsLiAgSXQgd2FzIGNoYW5nZWQgaGVyZSB0byBwZnggc2luY2UgcGZ4bAorIyB3aWxsIG9ubHkgY29tcGlsZSBzdWNjZXNzZnVsbHkgd2l0aCBVbml4IDQuMCB0aWMuICBBbHNvIG5vdGUgdGhhdCBwZnggb25seQorIyBhbGxvd3Mgc3RyaW5ncyB0byBiZSBwYXJhbWV0ZXJzIGFuZCBsYWJlbCB2YWx1ZXMgbXVzdCBiZSBwcm9ncmFtbWVkIGFzCisjIGNvbnN0YW50IHN0cmluZ3MuICBTdXBwb3NlZGx5IHRoZSBwZnhsIG9mIFZlcnNpb24gNC4wIGFsbG93cyBib3RoIGxhYmVscworIyBhbmQgc3RyaW5ncyB0byBiZSBwYXJhbWV0ZXJzLiAgVGhlIDYwNVYyIHBmeCBlbnRyeSBzaG91bGQgYmUgZXhhbWluZWQgbGF0ZXIKKyMgaW4gdGhpcyByZWdhcmQuIEZvciByZWZlcmVuY2UgdGhlIDczMCBwZnhsIGVudHJ5IGlzIHNob3duIGhlcmUgZm9yIGNvbXBhcmlzb24KKyMgNzMwIHBmeCBlbnRyeToKKyMgICAgIHBmeGw9XEVbJT8lcDElezI1fSU8JXQlcDElZSVwMSV7MjR9JS0lOyVkOyVwMiVsJTAyZCU/JXAxJXsyNX0lPCV0cVxzXHNccworIyBTWVNcc1xzXHNcc1xzRiVwMSU6LTJkXHNccyVlOzA7M3ElOyVwMiVzLAorIworIyAoZm9yIDQuMCB0aWMpCisjICAgICBwZnhsPVxFWyVwMSVkOyVwMiVsJTAyZHElPyVwMSV7OX0lPCV0ICAgRiVwMSUxZCAgICAgICAgICAgJTslcDIlcywKKyMKKyMgKGZvciA8NC4wIHRpYykKKyMgICAgIHBmeD1cRVslcDElZDslcDIlbCUwMmRxJT8lcDElezl9JTwldCAgIEYlcDElMWQgICAgICAgICAgICU7JXAyJXMsCisjCisjIEZyb20gdGhlIEFUJlQgNzA1IE11bHRpLXRhc2tpbmcgdGVybWluYWwgdXNlcidzIGd1aWRlIFBhZ2UgOC04LDgtOQorIworIyBQb3J0MSBJbnRlcmZhY2UKKyMKKyMgbW9kdWxhciAxMCBwaW4gQ29ubmVjdG9yCisjIExlZnQgc2lkZSAgICAgICBSaWdodCBzaWRlCisjIFBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorIworIyAgICAgICAgS2V5IChub3RjaCkgYXQgYm90dG9tCisjCisjIFBpbiAgICAxIERTUgorIyAgICAgICAgMyBEQ0QKKyMgICAgICAgIDQgRFRSCisjICAgICAgICA1IFNpZyBHcm91bmQKKyMgICAgICAgIDYgUkQKKyMgICAgICAgIDcgU0QKKyMgICAgICAgIDggQ1RTCisjICAgICAgICA5IFJUUworIyAgICAgICAgMTAgRnJhbWUgR3JvdW5kCisjCisjIFRoZSBtYW51YWwgaXMgMTg5IHBhZ2VzIGFuZCBpcyBsb2FkZWQgd2l0aCBkZXRhaWxzIGFib3V0IHRoZSBlc2NhcGUgY29kZXMsCisjIGV0Yy4uLi4uIEF2YWlsYWJsZSBmcm9tIEFUJlQgQ0lDIDgwMC00MzItNjYwMC4uLgorIyBhc2sgZm9yIERvY3VtZW50IG51bWJlciA5OTktMzAwLTY2MC4uCisjCithdHQ3MDB8QVQmVCA3MDAgMjR4ODAgY29sdW1uIGRpc3BsYXkgdy8xMDJrZXkga2V5Ym9hcmQsCisJYW0sIGVzbG9rLCBocywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGgjMiwgbGluZXMjMjQsIGx3IzgsIG5sYWIjOCwgd3NsIzgwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWz8yNWhcRVs/MTJsLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPzEyOzI1aCwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkaW09XEVbMm0sCisJZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWVuYWNzPVxFKEJcRSkwLCBmbGFzaD1cRVs/NWgkPDIwMD5cRVs/NWwsIGZsbj00XCw0LAorCWZzbD1cRTgsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFRCwgaW52aXM9XEVbOG0sCisJaXMyPVxFWzUwOzR8XEVbNTM7MHxcRVs4OzB8XEVbPzQ7MTM7MTVsXEVbMTM7MjBsXEVbPzdoXEVbMTJoXEUoQlxFKTBcRVs/MzFsXEVbMG1cMDE3LAorCWlzMz1cRShCXEUpMCwga0xGVD1cRVsgQSwga1JJVD1cRVsgQCwga2JzPV5ILCBrY2J0PVxFW1osCisJa2Nscj1cRVsySiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cRVtQLCBrZGwxPVxFW00sIGtlbmQ9XEVbMjQ7MUgsIGtmMT1cRU9jLCBrZjEwPVxFTnAsCisJa2YxMT1cRU5xLCBrZjEyPVxFTnIsIGtmMTM9XEVOcywga2YxND1cRU50LCBrZjE1PVxFT0MsCisJa2YxNj1cRU9ELCBrZjE3PVxFT0UsIGtmMTg9XEVPRiwga2YxOT1cRU9HLCBrZjI9XEVPZCwKKwlrZjIwPVxFT0gsIGtmMjE9XEVPSSwga2YyMj1cRU9KLCBrZjIzPVxFTk8sIGtmMjQ9XEVOUCwKKwlrZjI1PVxFTlEsIGtmMjY9XEVOUiwga2YyNz1cRU5TLCBrZjI4PVxFTlQsIGtmMjk9XEVPcSwKKwlrZjM9XEVPZSwga2YzMD1cRU9yLCBrZjMxPVxFT3MsIGtmMzI9XEVPdCwga2YzMz1cRU91LAorCWtmMzQ9XEVPdiwga2YzNT1cRU93LCBrZjM2PVxFT3gsIGtmMzc9XEVPeSwga2YzOD1cRU91LAorCWtmMzk9XEVPdiwga2Y0PVxFT2YsIGtmNDA9XEVPbCwga2Y0MT1cRU9xLCBrZjQyPVxFT3IsCisJa2Y0Mz1cRU9zLCBrZjQ0PVxFT3AsIGtmNDU9XEVPbiwga2Y0Nj1cRU9NLCBrZjU9XEVPZywKKwlrZjY9XEVPaCwga2Y3PVxFT2ksIGtmOD1cRU9qLCBrZjk9XEVObywga2hvbWU9XEVbSCwKKwlraWNoMT1cRVtALCBraWwxPVxFW0wsIGtucD1cRVtVLCBrcHA9XEVbViwgbGw9XEVbMjRILAorCW1jMD1cRVtpLCBtYzQ9XEVbPzRpLCBtYzU9XEVbPzVpLCBuZWw9XEVFLAorCXBmeD1cRVslcDElZDslcDIlbCUwMmRxJT8lcDElezl9JTwldCAgIEYlcDElMWQgICAgICAgICAgICU7JXAyJXMsCisJcGxuPVxFWyVwMSVkOzA7MDswcSVwMiU6LTE2LjE2cywgcmM9XEU4LAorCXJlcD0lcDElY1xFWyVwMiV7MX0lLSVkYiwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLAorCXJtaXI9XEVbNGwsIHJtbG49XEVbMnAsIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlybXhvbj1cRVs1MzszfCwgcnMxPVxFY1xFWz8zOzVsXEVbNTY7MHwsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDUldDsyJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDMlcDElfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtaXI9XEVbNGgsIHNtbG49XEVbcCwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCBzbXhvbj1cRVs1MzswfCwgdGJjPVxFWzNnLAorCXRzbD1cRTdcRVs5OTslaSVwMSVkeCwKKworIyBUaGlzIGVudHJ5IHdhcyBtb2RpZmllZCAzLzEzLzkwIGJ5IEpXRS4KKyMgZml4ZXMgaW5jbHVkZSBhZGRpdGlvbnMgb2YgPGVuYWNzPiwgY29ycmVjdGluZyA8cmVwPiwgYW5kIG1vZGlmaWNhdGlvbgorIyBvZiA8a0hPTT4uICAoU2VlIGNvbW1lbnRzIGJlbG93KQorIyBhdHQ3MzAgaGFzIHN0YXR1cyBsaW5lIG9mIDgwIGNoYXJzCisjIFRoZXNlIHdlcmUgY29tbWVudGVkIG91dDogPGluZG49XEVbJXAxJWRTPiwgPHJpbj1cRVslcDElZFQ+LAorIyB0aGUgPGtmMjU+IGFuZCB1cCBrZXlzIGFyZSB1c2VkIGZvciBzaGlmdGVkIHN5c3RlbSBGa2V5cworIyBOT1RFOiBKV0UgMy8xMy85MCBUaGUgOTgga2V5IGtleWJvYXJkIHRyYW5zbGF0aW9uIGZvciBzaGlmdC9IT01FIGlzCisjIGN1cnJlbnRseSB0aGUgc2FtZSBhcyA8a2hvbWU+ICh1bnNoaWZ0ZWQgSE9NRSBvciBcRVtIKS4gIE9uIHRoZSAxMDIsIDEwMisxCisjIGFuZCAxMjIga2V5IGtleWJvYXJkcywgdGhlIDczMCdzIHRyYW5zbGF0aW9uIGlzIFxFWzJKLiAgRm9yIGNvbnNpc3RlbmN5CisjIDxrSE9NPiBoYXMgYmVlbiBjb21tZW50ZWQgb3V0LiAgVGhlIHVzZXIgY2FuIHVuY29tbWVudCA8a0hPTT4gaWYgdXNpbmcgdGhlCisjIDEwMiwgMTAyKzEsIG9yIDEyMiBrZXkga2V5Ym9hcmRzCisjICAgICAgIGtIT009XEVbMkosCisjIChhdHQ3MzA6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorYXR0NzMwfEFUJlQgNzMwIHdpbmRvd2luZyB0ZXJtaW5hbCwKKwlhbSwgZGEsIGRiLCBlc2xvaywgaHMsIG1pciwgbXNnciwgbnBjLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGgjMiwgbGluZXMjNjAsIGxtIzAsIGx3IzgsIG5sYWIjMjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVs/MjVoXEVbPzEybCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8xMjsyNWgsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywKKwllbmFjcz1cRShCXEUpMCwgZmxhc2g9XEVbPzVoJDwyMDA+XEVbPzVsLCBmc2w9XEU4LAorCWhvbWU9XEVbSCwgaHQ9XkksIGljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsCisJaW5kPVxFRCwgaW52aXM9XEVbOG0sCisJaXMxPVxFWzg7MHxcRVs/Mzs0OzU7MTM7MTVsXEVbMTM7MjBsXEVbPzdoXEVbMTJoXEUoQlxFKUIsCisJaXMyPVxFW21cMDE3LCBpczM9XEUoQlxFKTAsIGtMRlQ9XEVbIEAsIGtSSVQ9XEVbIEEsIGticz1eSCwKKwlrY2J0PVxFW1osIGtjbHI9XEVbMkosIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2YxPVxFT2MsIGtmMTA9XEVOcCwga2YxMT1cRU5xLCBrZjEyPVxFTnIsCisJa2YxMz1cRU5zLCBrZjE0PVxFTnQsIGtmMTU9XEVOdSwga2YxNj1cRU52LCBrZjE3PVxFTncsCisJa2YxOD1cRU54LCBrZjE5PVxFTnksIGtmMj1cRU9kLCBrZjIwPVxFTnosIGtmMjE9XEVOeywKKwlrZjIyPVxFTnwsIGtmMjM9XEVOfSwga2YyND1cRU5+LCBrZjI1PVxFT0MsIGtmMjY9XEVPRCwKKwlrZjI3PVxFT0UsIGtmMjg9XEVPRiwga2YyOT1cRU9HLCBrZjM9XEVPZSwga2YzMD1cRU9ILAorCWtmMzE9XEVPSSwga2YzMj1cRU9KLCBrZjMzPVxFTk8sIGtmMzQ9XEVOUCwga2YzNT1cRU5RLAorCWtmMzY9XEVOUiwga2YzNz1cRU5TLCBrZjM4PVxFTlQsIGtmMzk9XEVPVSwga2Y0PVxFT2YsCisJa2Y0MD1cRU9WLCBrZjQxPVxFT1csIGtmNDI9XEVPWCwga2Y0Mz1cRU9ZLCBrZjQ0PVxFT1osCisJa2Y0NT1cRU9bLCBrZjQ2PVxFT1xzLCBrZjQ3PVxFT10sIGtmNDg9XEVPXF4sIGtmNT1cRU9nLAorCWtmNj1cRU9oLCBrZjc9XEVPaSwga2Y4PVxFT2osIGtmOT1cRU5vLCBraG9tZT1cRVtILAorCWtpY2gxPVxFW0AsIGtpbDE9XEVbTCwga2luZD1cRVtTLCBrcmk9XEVbVCwKKwltYzA9XEVbPzE5aFxFWzBpLCBtYzQ9XEVbPzRpLCBtYzU9XEVbPzVpLCBuZWw9XEVFLAorCXBmeD1cRVslPyVwMSV7MjV9JTwldCVwMSVlJXAxJXsyNH0lLSU7JWQ7JXAyJWwlMDJkJT8lcDElezI1fSU8JXRxICAgU1lTICAgICBGJXAxJTotMmQgICVlOzA7M3ElOyVwMiVzLAorCXBmeGw9XEVbJXAxJWQ7JXAyJWwlMDJkOzA7MHElcDMlOi0xNi4xNnMlcDIlcywKKwlwbG49XEVbJXAxJWQ7MDswOzBxJXAyJTotMTYuMTZzLCByYz1cRTgsCisJcmVwPSVwMSVjXEVbJXAyJXsxfSUtJWRiLCByZXY9XEVbN20sIHJpPVxFTSwgcm1hY3M9Xk8sCisJcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJtbG49XEVbPzEzaCwgcm1zbz1cRVsyN20sCisJcm11bD1cRVsyNG0sIHJteG9uPVxFWz8yMWwsIHJzMj1cRWNcRVs/M2wsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDUldDsyJTslPyVwMiV0OzQlOyU/JXA0JXQ7NSU7JT8lcDMlcDElfCV0OzclOyU/JXA3JXQ7OCU7bSU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVttXDAxNywgc21hY3M9Xk4sIHNtYW09XEVbPzdoLCBzbWlyPVxFWzRoLAorCXNtbG49XEVbPzEzbCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgc214b249XEVbPzIxaCwKKwlzd2lkbT1cRSM2LCB0c2w9XEU3XEVbOyVpJXAxJWR4LAorYXR0NzMwLTQxfDczME1URy00MXxBVCZUIDczMC00MSB3aW5kb3dpbmcgdGVybWluYWwgVmVyc2lvbiwKKwlsaW5lcyM0MSwgdXNlPWF0dDczMCwKK2F0dDczMC0yNHw3MzBNVEctMjR8QVQmVCA3MzAtMjQgd2luZG93aW5nIHRlcm1pbmFsIFZlcnNpb24sCisJbGluZXMjMjQsIHVzZT1hdHQ3MzAsCithdHQ3MzByfDczME1UR3J8QVQmVCA3MzAgcmV2IHZpZGVvIHdpbmRvd2luZyB0ZXJtaW5hbCBWZXJzaW9uLAorCWZsYXNoPVxFWz81bCQ8MjAwPlxFWz81aCwKKwlpczE9XEVbODswfFxFWz8zOzQ7MTM7MTVsXEVbPzVoXEVbMTM7MjBsXEVbPzdoXEVbMTJoXEUoQlxFKUIsCisJdXNlPWF0dDczMCwKK2F0dDczMHItNDF8NzMwTVRHLTQxcnxBVCZUIDczMHItNDEgcmV2IHZpZGVvIHdpbmRvd2luZyB0ZXJtaW5hbCBWZXJzaW9uLAorCWxpbmVzIzQxLCB1c2U9YXR0NzMwciwKK2F0dDczMHItMjR8NzMwTVRHci0yNHxBVCZUIDczMHItMjQgcmV2IHZpZGVvIHdpbmRvd2luZyB0ZXJtaW5hbCBWZXJzaW9uLAorCWxpbmVzIzI0LCB1c2U9YXR0NzMwciwKKworIyBUaGUgZm9sbG93aW5nIHJlcHJlc2VudHMgdGhlIHNjcmVlbiBsYXlvdXQgYWxvbmcgd2l0aCB0aGUgYXNzb2NpYXRlZAorIyBiZXplbCBidXR0b25zIGZvciB0aGUgNTQzMC9wdDUwNSB0ZXJtaW5hbC4gVGhlICJrZiIgZGVzaWduYXRpb25zIGRvCisjIG5vdCBhcHBlYXIgb24gdGhlIHNjcmVlbiBidXQgYXJlIHNob3duIHRvIHJlZmVyZW5jZSB0aGUgYmV6ZWwgYnV0dG9ucy4KKyMgVGhlICJDTUQiLCAiTUFJTCIsIGFuZCAiUkVEUkFXIiBidXR0b25zIGFyZSBzaG93biBpbiB0aGVpciBhcHByb3hpbWF0ZQorIyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgc2NyZWVuLgorIworIworIworIyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyBYWFhYIHwga2YwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmMjQgfCBYWFhYCisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjIFhYWFggfCBrZjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2YyMyB8IFhYWFgKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgWFhYWCB8IGtmMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZjIyIHwgWFhYWAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyBYWFhYIHwga2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmMjEgfCBYWFhYCisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjIFhYWFggfCBrZjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2YyMCB8IFhYWFgKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgWFhYWCB8IGtmNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZjE5IHwgWFhYWAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyBYWFhYIHwga2Y2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmMTggfCBYWFhYCisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjIFhYWFggfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFgKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyMKKyMgICAgICAgICAgWFhYWCAgWFhYWCAgWFhYWCAgWFhYWCAgWFhYWCAgWFhYWCAgWFhYWCAgWFhYWCAgWFhYWCAgWFhYWAorIworIyBOb3RlOiBYWFhYIHJlcHJlc2VudHMgdGhlIHNjcmVlbiBidXR0b25zCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENNRCAgIFJFRFJBVworIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUlMCisjCisjIHZlcnNpb24gMSBub3RlOgorIwlUaGUgY2hhcmFjdGVyIHN0cmluZyBzZW50IGJ5IGtleSAna2YyNicgbWF5IGJlIHVzZXIgcHJvZ3JhbW1hYmxlCisjICAgICAgIHRvIHNlbmQgZWl0aGVyIFxFWzE2cywgb3IgXEVbMjZzLgorIyAgICAgICBUaGUgY2hhcmFjdGVyIHN0cmluZyBzZW50IGJ5IGtleSAna3JmcicgbWF5IGJlIHVzZXIgcHJvZ3JhbW1hYmxlCisjICAgICAgIHRvIHNlbmQgZWl0aGVyIFxFWzE3cywgb3IgXEVbMjdzLgorIworIyBEZXByZXNzaW9uIG9mIHRoZSAiQ01EIiBrZXkgc2VuZHMgICAgXEUhICAgIChrY21kKQorIyBEZXByZXNzaW9uIG9mIHRoZSAiTUFJTCIga2V5IHNlbmRzICAgXEVbMjZzIChrZjI2KQorIyAiUkVEUkFXIiBzYW1lIGFzICJSRUZSRVNIIiAoa3JmcikKKyMKKyMgImtmIiBmdW5jdGlvbnMgYWRkcyBjYXJyaWFnZSByZXR1cm4gdG8gb3V0cHV0IHN0cmluZyBpZiB0ZXJtaW5hbCBpcyBpbgorIyAnbmV3IGxpbmUnIG1vZGUuCisjCisjIFRoZSBmb2xsb3dpbmcgYXJlIGZ1bmN0aW9ucyBub3QgY292ZXJlZCBpbiB0aGUgdGFibGUgYWJvdmU6CisjCisjICAgICAgIFNldCBrZXlib2FyZCBjaGFyYWN0ZXIgKFNLQyk6IFxFUG4xO1BuMncKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMT0gMCBCYWNrIFNwYWNlIGtleQorIyAgICAgICAgICAgICAgICAgICAgICAgUG4xPSAxIEJyZWFrIGtleQorIyAgICAgICAgICAgICAgICAgICAgICAgUG4yPSAgIFByb2dyYW0gY2hhciAoaGV4KQorIworIyAgICAgICBTY3JlZW4gRGVmaW5pdGlvbiAoU0RGKTogXEVbUG4xO1BuMjtQbjM7UG40O1BuNXQKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMT0gICAgIFdpbmRvdyBudW1iZXIgKDEtMzkpCisjICAgICAgICAgICAgICAgICAgICAgICBQbjItUG41PSBZO1g7WTtYIGNvb3JkaW5hdGVzCisjCisjICAgICAgIFNjcmVlbiBTZWxlY3Rpb24gKFNTTCk6IFxFW1BudQorIyAgICAgICAgICAgICAgICAgICAgICAgUG49IFdpbmRvdyBudW1iZXIKKyMKKyMgICAgICAgU2V0IFRlcm1pbmFsIE1vZGVzIChTTSk6IFxFW1BuaAorIyAgICAgICAgICAgICAgICAgICAgICAgUG49IDMgR3JhcGhpY3MgbW9kZQorIyAgICAgICAgICAgICAgICAgICAgICAgUG49ID4gQ3Vyc29yIGJsaW5rCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gPCBFbnRlciBuZXcgbGluZSBtb2RlCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gPSBFbnRlciByZXZlcnNlIGluc2VydC9yZXBsYWNlIG1vZGUKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSA/IEVudGVyIG5vIHNjcm9sbCBtb2RlCisjCisjICAgICAgIFJlc2V0IFRlcm1pbmFsIE1vZGUgKFJNKTogXEVbUG5sCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gMyBFeGl0IGdyYXBoaWNzIG1vZGUKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSA+IEV4aXQgY3Vyc29yIGJsaW5rCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gPCBFeGl0IG5ldyBsaW5lIG1vZGUKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSA9IEV4aXQgcmV2ZXJzZSBpbnNlcnQvcmVwbGFjZSBtb2RlCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gPyBFeGl0IG5vIHNjcm9sbCBtb2RlCisjCisjICAgICAgIFNjcmVlbiBTdGF0dXMgUmVwb3J0IChTU1IpOiBcRVtQbnAKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSAwIFJlcXVlc3QgY3VycmVudCB3aW5kb3cgbnVtYmVyCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gMSBSZXF1ZXN0IGN1cnJlbnQgd2luZG93IGRpbWVuc2lvbnMKKyMKKyMgICAgICAgRGV2aWNlIFN0YXR1cyBSZXBvcnQgKERTUik6IFxFWzZuICAgIFJlcXVlc3QgY3Vyc29yIHBvc2l0aW9uCisjCisjICAgICAgIENhbGwgU3RhdHVzIFJlcG9ydCAoQ1NSKTogXEVbUG52CisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gMCBDYWxsIGZhaWxlZAorIyAgICAgICAgICAgICAgICAgICAgICAgUG49IDEgQ2FsbCBzdWNjZXNzZnVsCisjCisjICAgICAgIFRyYW5zcGFyZW50IEJ1dHRvbiBTdHJpbmcgKFRCUyk6IFxFW1BuMTtQbjI7UG4zO3tzdHJpbmcKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMT0gQnV0dG9uIG51bWJlciB0byBiZSBsb2FkZWQKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMj0gQ2hhcmFjdGVyIGNvdW50IG9mICJzdHJpbmciCisjICAgICAgICAgICAgICAgICAgICAgICBQbjM9IEtleSBtb2RlIGJlaW5nIGxvYWRlZDoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMD0gVW5zaGlmdGVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE9IFNoaWZ0ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMj0gQ29udHJvbAorIyAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nPSBUZXh0IHN0cmluZyAoMTUgY2hhcnMgbWF4KQorIworIyAgICAgICBTY3JlZW4gTnVtYmVyIFJlcG9ydCAoU05SKTogXEVbUG5wCisjICAgICAgICAgICAgICAgICAgICAgICBQbj0gU2NyZWVuIG51bWJlcgorIworIyAgICAgICBTY3JlZW4gRGltZW5zaW9uIFJlcG9ydCAoU0RSKTogXEVbUG4xO1BuMnIKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMT0gTnVtYmVyIG9mIHJvd3MgYXZhaWxhYmxlIGluIHdpbmRvdworIyAgICAgICAgICAgICAgICAgICAgICAgUG4yPSBOdW1iZXIgb2YgY29sdW1ucyBhdmFpbGFibGUgaW4gd2luZG93CisjCisjICAgICAgIEN1cnNvciBQb3NpdGlvbiBSZXBvcnQgKENQUik6IFxFW1BuMTtQbjJSCisjICAgICAgICAgICAgICAgICAgICAgICBQbjE9ICJZIiBQb3NpdGlvbiBvZiBjdXJzb3IKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuMj0gIlgiIFBvc2l0aW9uIG9mIGN1cnNvcgorIworIyAgICAgICBSZXF1ZXN0IEFuc3dlciBCYWNrIChSQUIpOiBcRVtjCisjCisjICAgICAgIEFuc3dlciBCYWNrIFJlc3BvbnNlIChBQlIpOiBcRVs/Oyo7MzA7VlNWCisjICAgICAgICAgICAgICAgICAgICAgICAqPSAgMCBObyBwcmludGVyIGF2YWlsYWJsZQorIyAgICAgICAgICAgICAgICAgICAgICAgKj0gIDIgUHJpbnRlciBhdmFpbGFibGUKKyMgICAgICAgICAgICAgICAgICAgICAgIFY9ICBTb2Z0d2FyZSB2ZXJzaW9uIG51bWJlcgorIyAgICAgICAgICAgICAgICAgICAgICAgU1Y9IFNvZnR3YXJlIHN1YiB2ZXJzaW9uIG51bWJlcgorIwkocHJpbnRlci1hdmFpbGFibGUgZmllbGQgbm90IGRvY3VtZW50ZWQgaW4gdjEpCisjCisjICAgICAgIFNjcmVlbiBBbGlnbm1lbnQgQWlkOiBcRW4KKyMKKyMgICAgICAgQmVsbCAobG93ZXIgcGl0Y2gpOiBcRVt4CisjCisjICAgICAgIERpYWwgUGhvbmUgTnVtYmVyOiBcRVBkc3RyaW5nXAorIyAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nPSBQaG9uZSBudW1iZXIgdG8gYmUgZGlhbGVkCisjCisjICAgICAgIFNldCBQaG9uZSBMYWJlbHM6IFxFUHBzdHJpbmdcCisjICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmc9IExhYmVsIGZvciBwaG9uZSBidXR0b25zCisjCisjICAgICAgIFNldCBDbG9jazogXEVQY2hvdXI7bWludXRlO3NlY29uZFwKKyMKKyMgICAgICAgUG9zaXRpb24gQ2xvY2s6IFxFUHNZO1hcCisjICAgICAgICAgICAgICAgICAgICAgICBZPSAiWSIgY29vcmRpbmF0ZQorIyAgICAgICAgICAgICAgICAgICAgICAgWD0gIlgiIGNvb3JkaW5hdGUKKyMKKyMgICAgICAgRGVsZXRlIENsb2NrOiBcRXByXAorIworIyAgICAgICBQcm9ncmFtbWluZyBUaGUgRnVuY3Rpb24gQnV0dG9uczogXEVQZlBuO3N0cmluZ1wKKyMgICAgICAgICAgICAgICAgICAgICAgIFBuPSBCdXR0b24gbnVtYmVyICgwMC0wNiwgMTgtMjQpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2YwMC1rZjA2LCBrZjE4LWtmMjQpCisjICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmc9IFRleHQgdG8gc2VudCBvbiBidXR0b24gZGVwcmVzc2lvbgorIworIyBUaGUgZm9sbG93aW5nIGluIHZlcnNpb24gMiBvbmx5OgorIworIyAgICAgICBSZXF1ZXN0IEZvciBMb2NhbCBEaXJlY3RvcnkgRGF0YTogXEVQcDEyO1wKKyMKKyMgICAgICAgTG9jYWwgRGlyZWN0b3J5IERhdGEgdG8gaG9zdDogXEVQcDExO0xPQ0FMLi4uRElSRUNUT1JZLi4uREFUQVwKKyMKKyMJUmVxdWVzdCBmb3IgTG9jYWwgRGlyZWN0b3J5IERhdGEgaW4gcHJpbnQgZm9ybWF0OiBcRVBwMTM7XAorIworIwlFbmFibGUgJ1BydCBvbiBMaW5lJyBtb2RlOiBcMDIyIChEQzIpCisjCisjCURpc2FibGUgJ1BydCBvbiBMaW5lJyBtb2RlOiBcMDI0IChEQzQpCisjCisKKyMgMDUtQXVnLTg2OgorIyBUaGUgZm9sbG93aW5nIFRlcm1pbmZvIGVudHJ5IGRlc2NyaWJlcyBmdW5jdGlvbnMgd2hpY2ggYXJlIHN1cHBvcnRlZCBieQorIyB0aGUgQVQmVCA1NDMwL3B0NTA1IHRlcm1pbmFsIHNvZnR3YXJlIHZlcnNpb24gMiBhbmQgbGF0ZXIuCithdHQ1MDV8cHQ1MDV8YXR0NTQzMHxnczU0MzB8QVQmVCBQZXJzb25hbCBUZXJtaW5hbCA1MDUgb3IgNTQzMCBHRVRTRVQgdGVybWluYWwsCisJYW0sIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFWzJKXEVbSCwKKwljbm9ybT1cRVs+bCwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPmgsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlZD1cRVswSiwgZWw9XEVbMEssIGVsMT1cRVsySywgaG9tZT1cRVtILCBodD1eSSwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJaXMxPVxFUHJcXEVbMHVcRVsySlxFWzA7MEhcRVttXEVbM2xcRVs8bFxFWzRsXEVbPmxcRVs9bFxFWz9sLAorCWticz1eSCwga2NtZD1cRSEsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2YwPVxFWzAwcywga2YxPVxFWzAxcywga2YxOD1cRVsxOHMsCisJa2YxOT1cRVsxOXMsIGtmMj1cRVswMnMsIGtmMjA9XEVbMjBzLCBrZjIxPVxFWzIxcywKKwlrZjIyPVxFWzIycywga2YyMz1cRVsyM3MsIGtmMjQ9XEVbMjRzLCBrZjI2PVxFWzI2cywKKwlrZjM9XEVbMDNzLCBrZjQ9XEVbMDRzLCBrZjU9XEVbMDVzLCBrZjY9XEVbMDZzLAorCWtyZnI9XEVbMjdzLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgcmM9XEU4LCByZXY9XEVbN20sCisJcm1hY3M9XEVbMTBtLCBybWFtPVxFWzExOzFqLCBybWlyPVxFWzRsLCBybXNvPVxFW20sCisJcm11bD1cRVttLCByczE9XEVjLCBzYz1cRTcsIHNncjA9XEVbbSwgc21hY3M9XEVbMTFtLAorCXNtYW09XEVbMTE7MGosIHNtaXI9XEVbNGgsIHNtc289XEVbMW0sIHNtdWw9XEVbNG0sCisKKyMgVGhlIGZvbGxvd2luZyBUZXJtaW5mbyBlbnRyeSBkZXNjcmliZXMgZnVuY3Rpb25zIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYnkKKyMgdGhlIEFUJlQgNTQzMC9wdDUwNSB0ZXJtaW5hbCBzb2Z0d2FyZSB2ZXJzaW9uIDEuCithdHQ1MDUtMjR8cHQ1MDUtMjR8Z3M1NDMwLTI0fEFUJlQgUFQ1MDUgb3IgNTQzMCBHRVRTRVQgdmVyc2lvbiAxIDI0IGxpbmVzLAorCWxpbmVzIzI0LAorCW1jNEAsIG1jNUAsIHJjQCwgcm1hbUAsIHNjQCwgc21hbUAsIHVzZT1hdHQ1MDUsCit0dDUwNS0yMnxwdDUwNS0yMnxnczU0MzAtMjJ8QVQmVCBQVDUwNSBvciA1NDMwIEdFVFNFVCB2ZXJzaW9uIDEgMjIgbGluZXMsCisJbGluZXMjMjIsIHVzZT1hdHQ1MDUsCisjCisjIyMjIC0tLS0tLS0tLS0tLS0tLS0tLSBURVJNSU5GTyBGSUxFIENBTiBCRSBTUExJVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIGN1dCBtYXJrIGhlbHBzIG1ha2UgbGlmZSBsZXNzIHBhaW5mdWwgZm9yIHBlb3BsZSBydW5uaW5nIG5jdXJzZXMgdGljCisjIG9uIG1hY2hpbmVzIHdpdGggcmVsYXRpdmVseSBsaXR0bGUgUkFNLiAgVGhlIGZpbGUgY2FuIGJlIGJyb2tlbiBpbiBoYWxmIGhlcmUKKyMgY2xlYW5seSBhbmQgY29tcGlsZWQgaW4gc2VjdGlvbnMgLS0gbm8gYHVzZScgcmVmZXJlbmNlcyBjcm9zcyB0aGlzIGN1dAorIyBnb2luZyBmb3J3YXJkLgorIworCisjIyMjIEFtcGV4IChEaWFsb2d1ZSkKKyMKKyMgWWVzLCB0aGVzZSBhcmUgdGhlIHNhbWUgcGVvcGxlIHdobyBhcmUgYmV0dGVyLWtub3duIGZvciBtYWtpbmcgYXVkaW8tIGFuZAorIyB2aWRlb3RhcGUuICBJJ20gdG9sZCB0aGV5IGFyZSBsb2NhdGVkIGluIFJlZHdvb2QgQ2l0eSwgQ0EuCisjCisKKyMgRnJvbTogPGNib3NnIXVjYnZheCFTUkM6Z2VvcmdlPiBGcmkgU2VwIDExIDIyOjM4OjMyIDE5ODEKKyMgKGFtcGV4ODA6IHNvbWUgY2FwYWJpbGl0aWVzIG1lcmdlZCBpbiBmcm9tIFNDTydzIGVudHJ5IC0tIGVzcikKK2FtcGV4ODB8YTgwfGQ4MHxkaWFsb2d1ZXxkaWFsb2d1ZTgwfGFtcGV4IGRpYWxvZ3VlIDgwLAorCU9UYnMsIGFtLCBidywgdWwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1cRSokPDc1PiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFVywgZGwxPVxFUiQ8NSo+LCBlZD1cRXksIGVsPVxFdCwgaHQ9XkksIGh0cz1cRTEsCisJaWNoMT1cRVEsIGlsMT1cRUUkPDUqPiwgaW5kPV5KLCBpczI9XEVBLCBybXNvPVxFaywgcm11bD1cRW0sCisJc21zbz1cRWosIHNtdWw9XEVsLCB0YmM9XEUzLAorIyBUaGlzIGVudHJ5IHdhcyBmcm9tIHNvbWVib2R5IGFub255bW91cywgVHVlIEF1ZyAgOSAyMDoxMTozNyAxOTgzLCB3aG8gd3JvdGU6CithbXBleDE3NXxhbXBleCBkMTc1LAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEUrLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRXksIGVsPVxFdCwgaG9tZT1eXiwgaWNoMT1cRVEsIGlsMT1cRUUsIGluZD1eSiwKKwlpczI9XEVYXEVBXEVGLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywKKwlrZGNoMT1cRVcsIGtkbDE9XEVSLCBraG9tZT1eXiwga2ljaDE9XEVRLCBraWwxPVxFRSwgbGw9Xl5eSywKKwlybWN1cD1cRUYsIHJtc289XEVrLCBybXVsPVxFbSwgc21jdXA9XEVOLCBzbXNvPVxFaiwgc211bD1cRWwsCisjIE5vIGJhY2tzcGFjZSBrZXkgaW4gdGhlIG1haW4gUVdFUlRZIGNsdXN0ZXIuIEZvcnR1bmF0ZWx5LCBpdCBoYXMgYQorIyBORVdMSU5FL1BBR0Uga2V5IGp1c3QgYWJvdmUgUkVUVVJOIHRoYXQgc2VuZHMgYSBzdHJhbmdlIHNpbmdsZS1jaGFyYWN0ZXIKKyMgY29kZS4gIEdpdmVuIGEgc3VpdGFibGUgVW5peCAob25lIHRoYXQgbGV0cyB5b3Ugc2V0IGFuIGVjaG8tZXJhc2UtYXMtQlMtU1AtQlMKKyMgbW9kZSksIHRoaXMga2V5IGNhbiBiZSB1c2VkIGFzIHRoZSBlcmFzZSBrZXk7IEkgZmluZCBJIGxpa2UgdGhpcy4gQmVjYXVzZQorIyBzb21lIHBlb3BsZSBhbmQgc29tZSBzeXN0ZW1zIG1heSBub3QsIHRoZXJlIGlzIGFub3RoZXIgdGVybWNhcCAoImFtcGV4MTc1IikKKyMgdGhhdCBzdXBwcmVzc2VzIHRoaXMgbGl0dGxlIGVjY2VudHJpY2l0eSBieSBvbWl0dGluZyB0aGUgcmVsZXZhbnQgY2FwYWJpbGl0eS4KK2FtcGV4MTc1LWJ8YW1wZXggZDE3NSB1c2luZyBsZWZ0IGFycm93IGZvciBlcmFzZSwKKwlrYnM9Xl8sIHVzZT1hbXBleDE3NSwKKyMgRnJvbTogUmljaGFyZCBCYXNjb3ZlIDxhdGQhZHNkIXJjYkB1Y2J2YXguYmVya2VsZXkuZWR1PgorIyAoYW1wZXgyMTA6IHJlbW92ZWQgb2Jzb2xldGUgIjprbiMxMDoiIC0tIGVzcikKK2FtcGV4MjEwfGEyMTB8YW1wZXggYTIxMCwKKwlPVGJzLCBhbSwgaHMsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMxLAorCWNidD1cRUksIGNsZWFyPVxFKiwgY3ViMT1eSCwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRXksIGVsPVxFdCwgZmxhc2g9XEVVXEVYXEVVXEVYXEVVXEVYXEVVXEVYLAorCWZzbD1cRS4yLCBob21lPV5eLCBodD1eSSwgaWNoMT1cRVEsCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkLCBpbDE9XEVFLCBpbnZpc0AsCisJaXMyPVxFQ1xFdVxFJ1xFKFxFbFxFQVxFJVxFe1xFLjJcRUcwXEVkXEVuLCBrY3ViMT1eSCwKKwlrY3VkMT1eViwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZjA9XkEwXHIsIGtmMT1eQTFcciwKKwlrZjI9XkEyXHIsIGtmMz1eQTNcciwga2Y0PV5BNFxyLCBrZjU9XkE1XHIsIGtmNj1eQTZcciwKKwlrZjc9XkE3XHIsIGtmOD1eQThcciwga2Y5PV5BOVxyLCBraG9tZT1eXiwKKwl0c2w9XEUuMFxFZ1xFfVxFZiwgdXNlPWFkbStzZ3IsCisjIChhbXBleDIxOTogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZywgYWRkZWQgPGN2dmlzPgorIyBmcm9tIGFtcGV4MjE5dywgYWRkZWQgPGNub3JtPj1cRVs/M2wsIGlycmVzaXN0aWJseSBzdWdnZXN0ZWQgYnkgPGN2dmlzPiwKKyMgYW5kIG1vdmVkIHRoZSBwYWRkaW5nIHRvIGJlICphZnRlciogdGhlIGNhcHMgLS0gZXNyKQorYW1wZXgyMTl8YW1wZXgtMjE5fGFtcDIxOXxBbXBleCB3aXRoIEF1dG9tYXJnaW5zLAorCWhzLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwgY2J0PVxFW1osCisJY2xlYXI9XEVbSFxFWzJKJDw1MD4sIGNub3JtPVxFWz8zbCwgY3I9Xk0sCisJY3NyPSVpXEVbJXAxJTJkOyVwMiUyZHIsIGN1YjE9XkgsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MkPDI+LCBjdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LAorCWN1dTE9XEVbQSQ8Mj4sIGN2dmlzPVxFWz8zaCwgZGltPVxFWzFtLCBlZD1cRVtKJDw1MD4sCisJZWw9XEVbSyQ8Mz4sIGhvbWU9XEVbSCwgaHQ9XkksIGluZD1eSiwKKwlpczI9XEU+XEVbPzFsXEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMD1cRVsyMX4sCisJa2YxPVxFWzd+LCBrZjI9XEVbOH4sIGtmMz1cRVs5fiwga2Y0PVxFWzEwfiwga2Y1PVxFWzExfiwKKwlrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LCBrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraG9tZT1cRVtILAorCXJldj1cRVs3bSwgcmk9XEVNJDw1Piwgcm1hbT1cRVs/N2wsIHJta3g9XEU+LAorCXJtc289XEVbbSQ8Mj4sIHJtdWw9XEVbbSQ8Mj4sIHNncjA9XEVbbSQ8Mj4sIHNtYW09XEVbPzdoLAorCXNta3g9XEU9LCBzbXNvPVxFWzdtJDwyPiwgc211bD1cRVs0bSQ8Mj4sCithbXBleDIxOXd8YW1wZXgtMjE5d3xhbXAyMTl3fEFtcGV4IDEzMiBjb2xzLAorCWNvbHMjMTMyLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBpbmQ9XkosCisJaXMyPVxFPlxFWz8zaFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgdXNlPWFtcGV4MjE5LAorIyAoYW1wZXgyMzI6IHJlbW92ZWQgPGlmPS91c3Ivc2hhcmUvdGFic2V0L2FtcGV4Piwgbm8gZmlsZSBhbmQgbm8gPGh0cz4gLS1lc3IpCithbXBleDIzMnxhbXBleC0yMzJ8QW1wZXggTW9kZWwgMjMyLAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LCB4bWMjMSwKKwljYnQ9XEVJLCBjaXZpcz1cRS4wLCBjbGVhcj1cRSssIGNub3JtPVxFLjQsIGN1YjE9XkgsIGN1ZDE9XlYsCisJY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFVywgZGwxPVxFUiQ8NSovPiwgZWQ9XEVZLCBlbD1cRVQsCisJZmxhc2g9XEViJDwyMDAvPlxFZCwgaHQ9XkksIGljaDE9XEVRLCBpbDE9XEVFJDw1Ki8+LAorCWludmlzQCwgaXMyPVxFZ1xFbCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XlYsIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZjA9XkFAXHIsIGtmMT1eQUFcciwga2YyPV5BQlxyLCBrZjM9XkFDXHIsCisJa2Y0PV5BRFxyLCBrZjU9XkFFXHIsIGtmNj1eQUZcciwga2Y3PV5BR1xyLCBrZjg9XkFIXHIsCisJa2Y5PV5BSVxyLCBraG9tZT1eXiwgdXNlPWFkbStzZ3IsCisjIChhbXBleDogcmVtb3ZlZCA8aWY9L3Vzci9zaGFyZS90YWJzZXQvYW1wLTEzMj4sIG5vIGZpbGUgYW5kIG5vIDxodHM+IC0tIGVzcikKK2FtcGV4MjMyd3xBbXBleCBNb2RlbCAyMzIgLyAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwgbGluZXMjMjQsCisJaXMyPVxFXDAzNEVnXEVsLCB1c2U9YW1wZXgyMzIsCisKKyMjIyMgQW5uIEFyYm9yIChhYSkKKyMKKyMgQW5uIEFyYm9yIG1hZGUgZHJlYW0gdGVybWluYWxzIGZvciBoYWNrZXJzIC0tIGxhcmdlIHNjcmVlbiBzaXplcyBhbmQgaHVnZQorIyBudW1iZXJzIG9mIGZ1bmN0aW9uIGtleXMuICBBdCBsZWFzdCBzb21lIHVzZWQgbW9uaXRvcnMgaW4gcG9ydHJhaXQgbW9kZSwKKyMgYWxsb3dpbmcgdXAgdG8gNzYtY2hhcmFjdGVyIHNjcmVlbiBoZWlnaHRzISAgVGhleSB3ZXJlIHJlYWNoYWJsZSBhdDoKKyMKKyMJQW5uIEFyYm9yIFRlcm1pbmFscworIwk2MTc1IEphY2tzb24gUm9hZAorIwlBbm4gQXJib3IsIE1JIDQ4MTAzCisjCSgzMTMpLTY2My04MDAwCisjCisjIEJ1dCBpbiAxOTk2IHRoZSBwaG9uZSBudW1iZXIgcmVhY2hlcyBzb21lIGtpdHNjaHkgcmV0YWlsIHNob3AsIGFuZCBBbm4gQXJib3IKKyMgY2FuJ3QgYmUgZm91bmQgb24gdGhlIFdlYjsgSSBmZWFyIHRoZXkncmUgbG9uZyBkZWFkLiAgUi5JLlAuCisjCisKKworIyBPcmlnaW5hbGx5IGZyb20gTWlrZSBPJ0JyaWVuQFJhbmQgYW5kIEhvd2FyZCBLYXRzZWZmIGF0IEJlbGwgTGFicy4KKyMgSGlnaGx5IG1vZGlmaWVkIDYvMjIgYnkgTWlrZSBPJ0JyaWVuLgorIyBzcGxpdCBvdXQgaW50byBzZXZlcmFsIGZvciB0aGUgdmFyaW91cyBzY3JlZW4gc2l6ZXMgYnkgZGF2ZS15b3N0QHJhbmQKKyMgTW9kaWZpY2F0aW9ucyBtYWRlIDMvODIgYnkgTWFyayBIb3J0b24KKyMgTW9kaWZpZWQgYnkgVG9tIFF1YXJsZXMgYXQgVUNCIGZvciBncmVhdGVyIGVmZmljaWVuY3kgYW5kIG1vcmUgZGl2ZXJzaXR5CisjIHN0YXR1cyBsaW5lIG1vdmVkIHRvIHRvcCBvZiBzY3JlZW4sIDxmbGFzaD4gcmVtb3ZlZCA1LzgyCisjIFNvbWUgdW5rbm93biBwZXJzb24gYXQgU0NPIHRoZW4gaGFja2VkIHRoZSBpbml0IHN0cmluZ3MgdG8gbWFrZSB0aGVtIG1vcmUKKyMgZWZmaWNpZW50LgorIworIyBhc3N1bWVzIHRoZSBmb2xsb3dpbmcgc2V0dXA6CisjICAgQSBtZW51OiAwMDAwIDEwMTAgIDAwMDEgMDAwMAorIyAgIEIgbWVudTogOTYwMCAgMDEwMCAxMDAwICAwMDAwIDAwMDAgIDEwMDAgMDAwMCAgMTcgIDE5CisjICAgQyBtZW51OiA1NiAgIDY2ICAgMCAgICAwICAgIDk2MDAgIDAxMTAgMTEwMAorIyAgIEQgbWVudTogMDExMCAxMDAxICAgMSAgIDAKKyMKKyMJQnJpZWZseSwgdGhlIHNldHRpbmdzIGFyZSBmb3IgdGhlIGZvbGxvd2luZyBtb2RlczoKKyMJICAgKHZhbHVlcyBhcmUgZm9yIGJpdCBzZXQvY2xlYXIgd2l0aCAqIGluZGljYXRpbmcgb3VyIHByZWZlcmVuY2UKKyMJICAgIGFuZCB0aGUgdmFsdWUgdXNlZCB0byB0ZXN0IHRoZXNlIHRlcm1jYXBzKQorIwlOb3RlIHRoYXQgbWFueSBvZiB0aGVzZSBzZXR0aW5ncyBhcmUgaXJyZWxldmVudCB0byB0aGUgdGVybWluZm8KKyMJYW5kIGFyZSBqdXN0IHNldCB0byB0aGUgZGVmYXVsdCBtb2RlIG9mIHRoZSB0ZXJtaW5hbCBhcyBzaGlwcGVkCisjCWJ5IHRoZSBmYWN0b3J5LgorIworIyBBIG1lbnU6IDAwMDAgMTAxMCAgMDAwMSAwMDAwCisjCUJsb2NrL3VuZGVybGluZSBjdXJzb3IqCisjCWJsaW5raW5nL25vbmJsaW5raW5nIGN1cnNvcioKKyMJa2V5IGNsaWNrL25vIGtleSBjbGljayoKKyMJYmVsbC9ubyBiZWxsIGF0IGNvbHVtbiA3MioKKyMKKyMJa2V5IHBhZCBpcyBjdXJzb3IgY29udHJvbCova2V5IHBhZCBpcyBudW1lcmljCisjCXJldHVybiBhbmQgbGluZSBmZWVkL3JldHVybiBmb3IgPGNyPiBrZXkgKgorIwlyZXBlYXQgYWZ0ZXIgLjUgc2VjKi9ubyByZXBlYXQKKyMJcmVwZWF0IGF0IDI1LzE1IGNoYXJzIHBlciBzZWMuICoKKyMKKyMJaG9sZCBkYXRhIHVudGlsIHBhdXNlIHByZXNzZWQvcHJvY2VzcyBkYXRhIHVubGVzcyBwYXVzZSBwcmVzc2VkKgorIwlzbG93IHNjcm9sbC9ubyBzbG93IHNjcm9sbCoKKyMJSG9sZCBpbiBhcmVhL2Rvbid0IGhvbGQgaW4gYXJlYSoKKyMJZnVuY3Rpb25zIGtleXMgaGF2ZSBkZWZhdWx0Ki9mdW5jdGlvbiBrZXlzIGRpc2FibGVkIG9uIHBvd2VydXAKKyMKKyMJc2hvdy9kb24ndCBzaG93IHBvc2l0aW9uIG9mIGN1cnNvciBkdXJpbmcgcGFnZSB0cmFuc21pdCoKKyMJdW51c2VkCisjCXVudXNlZAorIwl1bnVzZWQKKyMKKyMgQiBtZW51OiA5NjAwICAwMTAwIDEwMDAgIDAwMDAgMDAwMCAgMTAwMCAwMDAwICAxNyAgMTkKKyMJQmF1ZCByYXRlICg5NjAwKikKKyMKKyMJMiBiaXRzIG9mIHBhcml0eSAtIDAwPW9kZCwwMT1ldmVuKiwxMD1zcGFjZSwxMT1tYXJrCisjCTEgc3RvcCBiaXQqLzIgc3RvcCBiaXRzCisjCXBhcml0eSBlcnJvciBkZXRlY3Rpb24gb2ZmKi9vbgorIworIwlrZXlib2FyZCBsb2NhbC9vbiBsaW5lKgorIwloYWxmL2Z1bGwgZHVwbGV4KgorIwlkaXNhYmxlL2RvIG5vdCBkaXNhYmxlIGtleWJvYXJkIGFmdGVyIGRhdGEgdHJhbnNtaXNzaW9uKgorIworIwl0cmFuc21pdCBlbnRpcmUgcGFnZS9zdG9wIHRyYW5zbWlzc2lvbiBhdCBjdXJzb3IqCisjCXRyYW5zZmVyL2RvIG5vdCB0cmFuc2ZlciBwcm90ZWN0ZWQgY2hhcmFjdGVycyoKKyMJdHJhbnNtaXQgYWxsIGNoYXJhY3RlcnMvdHJhbnNtaXQgb25seSBzZWxlY3RlZCBjaGFyYWN0ZXJzKgorIwl0cmFuc21pdCBhbGwgc2VsZWN0ZWQgYXJlYXMvdHJhbnNtaXQgb25seSAxIHNlbGVjdGVkIGFyZWEqCisjCisjCXRyYW5zbWl0L2RvIG5vdCB0cmFuc21pdCBsaW5lIHNlcGFyYXRvcnMgdG8gaG9zdCoKKyMJdHJhbnNtaXQvZG8gbm90IHRyYW5zbWl0IHBhZ2UgdGFiIHN0b3BzIHRhYnMgdG8gaG9zdCoKKyMJdHJhbnNtaXQvZG8gbm90IHRyYW5zbWl0IGNvbHVtbiB0YWIgc3RvcCB0YWJzIHRvIGhvc3QqCisjCXRyYW5zbWl0L2RvIG5vdCB0cmFuc21pdCBncmFwaGljcyBjb250cm9sICh1bmRlcmxpbmUsaW52ZXJzZS4uKSoKKyMKKyMJZW5hYmxlKi9kaXNhYmxlIGF1dG8gWE9OL1hPRkYgY29udHJvbAorIwlyZXF1aXJlL2RvIG5vdCByZXF1aXJlIHJlY2VpcHQgb2YgYSBEQzEgZnJvbSBob3N0IGFmdGVyIGVhY2ggTEYqCisjCXBhdXNlIGtleSBhY3RzIGFzIGEgbWV0YSBrZXkvcGF1c2Uga2V5IGlzIHBhdXNlKgorIwl1bnVzZWQKKyMKKyMJdW51c2VkCisjCXVudXNlZAorIwl1bnVzZWQKKyMJdW51c2VkCisjCisjCVhPTiBjaGFyYWN0ZXIgKDE3KikKKyMJWE9GRiBjaGFyYWN0ZXIgKDE5KikKKyMKKyMgQyBtZW51OiA1NiAgIDY2ICAgMCAgICAwICAgIDk2MDAgIDAxMTAgMTEwMAorIwludW1iZXIgb2YgbGluZXMgdG8gcHJpbnQgZGF0YSBvbiAocHJpbnRlcikgKDU2KikKKyMKKyMJbnVtYmVyIG9mIGxpbmVzIG9uIGEgc2hlZXQgb2YgcGFwZXIgKHByaW50ZXIpICg2NiopCisjCisjCWxlZnQgbWFyZ2luIChwcmludGVyKSAoMCopCisjCisjCW51bWJlciBvZiBwYWQgY2hhcnMgb24gbmV3IGxpbmUgdG8gcHJpbnRlciAoMCopCisjCisjCXByaW50ZXIgYmF1ZCByYXRlICg5NjAwKikKKyMKKyMJcHJpbnRlciBwYXJpdHk6IDAwPW9kZCwwMT1ldmVuKiwxMD1zcGFjZSwxMT1tYXJrCisjCXByaW50ZXIgc3RvcCBiaXRzOiAyKi8xCisjCXByaW50L2RvIG5vdCBwcmludCBndWFyZGVkIGFyZWFzKgorIworIwluZXcgbGluZSBpczogMDE9TEYsMTA9Q1IsMTE9Q1JMRioKKyMJdW51c2VkCisjCXVudXNlZAorIworIyBEIG1lbnU6IDAxMTAgMTAwMSAgIDEgICAwCisjCUxGIGlzIG5ld2xpbmUvTEYgaXMgZG93biBvbmUgbGluZSwgc2FtZSBjb2x1bW4qCisjCXdyYXAgdG8gcHJlY2VkaW5nIGxpbmUgaWYgbW92ZSBsZWZ0IGZyb20gY29sIDEqL2Rvbid0IHdyYXAKKyMJd3JhcCB0byBuZXh0IGxpbmUgaWYgbW92ZSByaWdodCBmcm9tIGNvbCA4MCovZG9uJ3Qgd3JhcAorIwliYWNrc3BhY2UgaXMvaXMgbm90IGRlc3RydWN0aXZlKgorIworIwlkaXNwbGF5Ki9pZ25vcmUgREVMIGNoYXJhY3RlcgorIwlkaXNwbGF5IHdpbGwgbm90L3dpbGwgc2Nyb2xsKgorIwlwYWdlL2NvbHVtbiB0YWIgc3RvcHMqCisjCWVyYXNlIGV2ZXJ5dGhpbmcqL2VyYXNlIHVucHJvdGVjdGVkIG9ubHkKKyMKKyMJZWRpdGluZyBleHRlbnQ6IDA9ZGlzcGxheSwxPWxpbmUqLDI9ZmllbGQsMz1hcmVhCisjCisjCXVudXNlZAorIworCithbm5hcmJvcjQwODB8YWE0MDgwfGFubiBhcmJvciA0MDgwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzQwLAorCWJlbD1eRywgY2xlYXI9XDAxNCQ8Mj4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5fLAorCWN1cD1cMDE3JXAyJXsxMH0lLyV7MTZ9JSolcDIlezEwfSVtJSslYyVwMSU/JXAxJXsxOX0lPiV0JXsxMn0lKyU7JXs2NH0lKyVjLAorCWN1dTE9Xk4sIGhvbWU9XkssIGh0PV5JLCBodHM9Xl1eUDEsIGluZD1eSiwga2JzPV5eLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9Xl8sIGtjdXUxPV5OLCBraG9tZT1eSywgdGJjPV5cXlBeUCwKKworIyBTdHJhbmdlIEFubiBBcmJvciB0ZXJtaW5hbCBmcm9tIEJSTAorYWFzMTkwMXxBbm4gQXJib3IgSzQwODAgdy9TMTkwMSBtb2QsCisJYW0sCisJY29scyM4MCwgbGluZXMjNDAsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9Xl8sIGN1dTE9Xk4sCisJaG9tZT1eSywgaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGxsPV5PXDBjLAorCW5lbD1eTV5KLAorCisjIElmIHlvdSdyZSB1c2luZyB0aGUgR05VIHRlcm1jYXAgbGlicmFyeSwgYWRkCisjCTpjUz1cRVslcDElZDslcDIlZDslcDMlZDslcDQlZHA6CisjIHRvIHRoZXNlIGNhcGFiaWxpdGllcy4gIFRoaXMgaXMgdGhlIG5vbnN0YW5kYXJkIEdOVSB0ZXJtY2FwIHNjcm9sbGluZworIyBjYXBhYmlsaXR5LCBhcmd1bWVudHMgYXJlOgorIyAgIDEuIFRvdGFsIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgc2NyZWVuLgorIyAgIDIuIE51bWJlciBvZiBsaW5lcyBhYm92ZSBkZXNpcmVkIHNjcm9sbCByZWdpb24uCisjICAgMy4gTnVtYmVyIG9mIGxpbmVzIGJlbG93IChvdXRzaWRlIG9mKSBkZXNpcmVkIHNjcm9sbCByZWdpb24uCisjICAgNC4gVG90YWwgbnVtYmVyIG9mIGxpbmVzIG9uIHRoZSBzY3JlZW4sIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisjIFRoZSBnZW5lcmljIEFubiBBcmJvciBlbnRyeSBpcyB0aGUgb25seSBvbmUgdGhhdCB1c2VzIHRoaXMuCithYWErdW5rfGFhYS11bmt8YW5uIGFyYm9yIGFtYmFzc2Fkb3IgKGludGVybmFsIC0gZG9uJ3QgdXNlIHRoaXMgZGlyZWN0bHkpLAorCU9UYnMsIGFtLCBrbSwgbWM1aSwgbWlyLCB4b24sCisJY29scyM4MCwgaXQjOCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwKKwljbGVhcj1cRVtIXEVbSiQ8MTU2PiwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSywgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLJDw1PiwgaG9tZT1cRVtILCBocGE9XEVbJXAxJXsxfSUrJWRHLCBodD1eSSwKKwlodHM9XEVILCBpY2g9XEVbJXAxJWRAJDw0Kj4sIGljaDE9XEVbQCQ8ND4sIGlsPVxFWyVwMSVkTCwKKwlpbDE9XEVbTCQ8Mz4sIGluZD1eSywgaW52aXM9XEVbOG0sIGlzMT1cRVttXEU3XEVbSFxFOVxFOCwKKwlpczM9XEVbMVFcRVs+MjA7MzBsXEVQYCt4fk1cRVxcLCBrYnM9XkgsIGtjYnQ9XEVbWiwKKwlrY2xyPVxFW0osIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsCisJa2RjaDE9XEVbUCwga2RsMT1cRVtNLCBrZjE9XEVPQSwga2YxMD1cRU9KLCBrZjExPVxFT0ssCisJa2YxMj1cRU9MLCBrZjEzPVxFT00sIGtmMTQ9XEVPTiwga2YxNT1cRU9PLCBrZjE2PVxFT1AsCisJa2YxNz1cRU9RLCBrZjE4PVxFT1IsIGtmMTk9XEVPUywga2YyPVxFT0IsIGtmMjA9XEVPVCwKKwlrZjIxPVxFT1UsIGtmMjI9XEVPViwga2YyMz1cRU9XLCBrZjI0PVxFT1gsIGtmMz1cRU9DLAorCWtmND1cRU9ELCBrZjU9XEVPRSwga2Y2PVxFT0YsIGtmNz1cRU9HLCBrZjg9XEVPSCwga2Y5PVxFT0ksCisJa2hvbWU9XEVbSCwga2ljaDE9XEVbQCwga2lsMT1cRVtMLCBrcm1pcj1cRTYsIG1jMD1cRVswaSwKKwltYzQ9XkMsIG1jNT1cRVt2LCBtYzVwPVxFWyVwMSVkdiwgcmM9XEU4LAorCXJlcD0lcDElY1xFWyVwMiV7MX0lLSVkYiwgcmV2PVxFWzdtLAorCXJta3g9XEVQYD55fltbSmA4eHl+W1tBYDR4eX5bW0RgNnh5fltbQ2AyeHl+W1tCXEVcXCwKKwlybW09XEVbPjUybCwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNjPVxFNywKKwlzZ3I9XEVbJT8lcDEldDc7JTslPyVwMiV0NDslOyU/JXAzJXQ3OyU7JT8lcDQldDU7JTslPyVwNiV0MTslO20sCisJc2dyMD1cRVttLAorCXNta3g9XEVQYD56fltbSmA4eHp+W1tBYDR4en5bW0RgNnh6fltbQ2AyeHp+W1tCXEVcXCwKKwlzbW09XEVbPjUyaCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzJnLAorCXZwYT1cRVslcDElezF9JSslZGQsCisKK2FhYStydnxhbm4gYXJib3IgYW1iYXNzYWRvciBpbiByZXZlcnNlIHZpZGVvLAorCWJsaW5rPVxFWzU7N20sIGJvbGQ9XEVbMTs3bSwgaW52aXM9XEVbNzs4bSwKKwlpczE9XEVbN21cRTdcRVtIXEU5XEU4LCByZXY9XEVbbSwgcm1zbz1cRVs3bSwgcm11bD1cRVs3bSwKKwlyczE9XEVbSFxFWzdtXEVbSiQ8MTU2PiwKKwlzZ3I9XEVbJT8lcDElcDMlfCUhJXQ3OyU7JT8lcDIldDQ7JTslPyVwNCV0NTslOyU/JXA2JXQxOyU7JT8lcDcldDg7JTttLAorCXNncjA9XEVbN21cMDE2LCBzbXNvPVxFW20sIHNtdWw9XEVbNDs3bSwKKyMgQW1iYXNzYWRvciB3aXRoIHRoZSBERUMgb3B0aW9uLCBmb3IgcGFydGlhbCB2dDEwMCBjb21wYXRpYmlsaXR5LgorYWFhK2RlY3xhbm4gYXJib3IgYW1iYXNzYWRvciBpbiBkZWMgdnQxMDAgbW9kZSwKKwlhY3NjPWFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBlbmFjcz1cRSgwLCBybWFjcz1eTiwKKwlzZ3I9XEVbJT8lcDElcDMlfCUhJXQ3OyU7JT8lcDIldDQ7JTslPyVwNCV0NTslOyU/JXA2JXQxOyU7JT8lcDcldDg7JTttJT8lcDkldFwwMTclZVwwMTYlOywKKwlzbWFjcz1eTywKK2FhYS0xOHxhbm4gYXJib3IgYW1iYXNzYWRvci8xOCBsaW5lcywKKwlsaW5lcyMxOCwKKwlpczI9XEU3XEVbNjA7MDswOzE4cFxFOCwKKwlybWN1cD1cRVs2MDswOzA7MThwXEVbNjA7MUhcRVtLLCBzbWN1cD1cRVsxODswOzA7MThwLAorCXVzZT1hYWErdW5rLAorYWFhLTE4LXJ2fGFubiBhcmJvciBhbWJhc3NhZG9yLzE4IGxpbmVzK3JldmVyc2UgdmlkZW8sCisJdXNlPWFhYStydiwgdXNlPWFhYS0xOCwKK2FhYS0yMHxhbm4gYXJib3IgYW1iYXNzYWRvci8yMCBsaW5lcywKKwlsaW5lcyMyMCwKKwlpczI9XEU3XEVbNjA7MDswOzIwcFxFOCwKKwlybWN1cD1cRVs2MDswOzA7MjBwXEVbNjA7MUhcRVtLLCBzbWN1cD1cRVsyMDswOzA7MjBwLAorCXVzZT1hYWErdW5rLAorYWFhLTIyfGFubiBhcmJvciBhbWJhc3NhZG9yLzIyIGxpbmVzLAorCWxpbmVzIzIyLAorCWlzMj1cRTdcRVs2MDswOzA7MjJwXEU4LAorCXJtY3VwPVxFWzYwOzA7MDsyMnBcRVs2MDsxSFxFW0ssIHNtY3VwPVxFWzIyOzA7MDsyMnAsCisJdXNlPWFhYSt1bmssCithYWEtMjR8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMjQgbGluZXMsCisJbGluZXMjMjQsCisJaXMyPVxFN1xFWzYwOzA7MDsyNHBcRTgsCisJcm1jdXA9XEVbNjA7MDswOzI0cFxFWzYwOzFIXEVbSywgc21jdXA9XEVbMjQ7MDswOzI0cCwKKwl1c2U9YWFhK3VuaywKK2FhYS0yNC1ydnxhbm4gYXJib3IgYW1iYXNzYWRvci8yNCBsaW5lcytyZXZlcnNlIHZpZGVvLAorCXVzZT1hYWErcnYsIHVzZT1hYWEtMjQsCithYWEtMjZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMjYgbGluZXMsCisJbGluZXMjMjYsCisJaXMyPVxFN1xFWzYwOzA7MDsyNnBcRTgsCisJcm1jdXA9XEVbNjA7MDswOzI2cFxFWzI2OzFIXEVbSywKKwlzbWN1cD1cRVtIXEVbSiQ8MTU2PlxFWzI2OzA7MDsyNnAsIHVzZT1hYWErdW5rLAorYWFhLTI4fGFubiBhcmJvciBhbWJhc3NhZG9yLzI4IGxpbmVzLAorCWxpbmVzIzI4LAorCWlzMj1cRTdcRVs2MDswOzA7MjhwXEU4LAorCXJtY3VwPVxFWzYwOzA7MDsyOHBcRVsyODsxSFxFW0ssCisJc21jdXA9XEVbSFxFW0okPDE1Nj5cRVsyODswOzA7MjhwLCB1c2U9YWFhK3VuaywKK2FhYS0zMC1zfGFhYS1zfGFubiBhcmJvciBhbWJhc3NhZG9yLzMwIGxpbmVzIHcvc3RhdHVzLAorCWVzbG9rLCBocywKKwlsaW5lcyMyOSwKKwlkc2w9XEU3XEVbNjA7MDswOzMwcFxFWzE7MUhcRVtLXEVbSFxFOFxyXG5cRVtLLAorCWZzbD1cRVs+NTFsLCBpczI9XHJcblxFW0FcRTdcRVs2MDsxOzA7MzBwXEU4LAorCXJtY3VwPVxFWzYwOzE7MDszMHBcRVsyOTsxSFxFW0ssCisJc21jdXA9XEVbSFxFW0okPDE1Nj5cRVszMDsxOzA7MzBwXEVbMzA7MUhcRVtLLAorCXRzbD1cRVs+NTFoXEVbMTslcDElZEhcRVsySywgdXNlPWFhYSt1bmssCithYWEtMzAtcy1ydnxhYWEtcy1ydnxhbm4gYXJib3IgYW1iYXNzYWRvci8zMCBsaW5lcytzdGF0dXMrcmV2ZXJzZSB2aWRlbywKKwl1c2U9YWFhK3J2LCB1c2U9YWFhLTMwLXMsCithYWEtcy1jdHh0fGFhYS0zMC1zLWN0eHR8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMzAgbGluZXMrc3RhdHVzK3NhdmUgY29udGV4dCwKKwlybWN1cD1cRVs2MDsxOzA7MzBwXEVbNTk7MUhcRVtLLAorCXNtY3VwPVxFWzMwOzFIXEVbS1xFWzMwOzE7MDszMHAsIHVzZT1hYWEtMzAtcywKK2FhYS1zLXJ2LWN0eHR8YWFhLTMwLXMtcnYtY3R8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMzAgbGluZXMrc3RhdHVzK3NhdmUgY29udGV4dCtyZXZlcnNlIHZpZGVvLAorCXJtY3VwPVxFWzYwOzE7MDszMHBcRVs1OTsxSFxFW0ssCisJc21jdXA9XEVbMzA7MUhcRVtLXEVbMzA7MTswOzMwcCwgdXNlPWFhYS0zMC1zLXJ2LAorYWFhfGFhYS0zMHxhbWJhc3xhbWJhc3NhZG9yfGFubiBhcmJvciBhbWJhc3NhZG9yLzMwIGxpbmVzLAorCWxpbmVzIzMwLAorCWlzMj1cRTdcRVs2MDswOzA7MzBwXEU4LAorCXJtY3VwPVxFWzYwOzA7MDszMHBcRVszMDsxSFxFW0ssCisJc21jdXA9XEVbSFxFW0okPDE1Nj5cRVszMDswOzA7MzBwLCB1c2U9YWFhK3VuaywKK2FhYS0zMC1ydnxhYWEtcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMzAgbGluZXMgaW4gcmV2ZXJzZSB2aWRlbywKKwl1c2U9YWFhK3J2LCB1c2U9YWFhLTMwLAorYWFhLTMwLWN0eHR8YWFhLWN0eHR8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMzAgbGluZXM7IHNhdmluZyBjb250ZXh0LAorCXJtY3VwPVxFWzYwOzA7MDszMHBcRVs2MDsxSFxFW0ssIHNtY3VwPVxFWzMwOzA7MDszMHAsCisJdXNlPWFhYS0zMCwKK2FhYS0zMC1ydi1jdHh0fGFhYS1ydi1jdHh0fGFubiBhcmJvciBhbWJhc3NhZG9yLzMwIGxpbmVzIHJldmVyc2UgdmlkZW87IHNhdmluZyBjb250ZXh0LAorCXJtY3VwPVxFWzYwOzA7MDszMHBcRVs2MDsxSFxFW0ssIHNtY3VwPVxFWzMwOzA7MDszMHAsCisJdXNlPWFhYStydiwgdXNlPWFhYS0zMCwKK2FhYS0zNnxhbm4gYXJib3IgYW1iYXNzYWRvci8zNiBsaW5lcywKKwlsaW5lcyMzNiwKKwlpczI9XEU3XEVbNjA7MDswOzM2cFxFOCwKKwlybWN1cD1cRVs2MDswOzA7MzZwXEVbMzY7MUhcRVtLLAorCXNtY3VwPVxFW0hcRVtKJDwxNTY+XEVbMzY7MDswOzM2cCwgdXNlPWFhYSt1bmssCithYWEtMzYtcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvMzYgbGluZXMrcmV2ZXJzZSB2aWRlbywKKwl1c2U9YWFhK3J2LCB1c2U9YWFhLTM2LAorYWFhLTQwfGFubiBhcmJvciBhbWJhc3NhZG9yLzQwIGxpbmVzLAorCWxpbmVzIzQwLAorCWlzMj1cRTdcRVs2MDswOzA7NDBwXEU4LAorCXJtY3VwPVxFWzYwOzA7MDs0MHBcRVs0MDsxSFxFW0ssCisJc21jdXA9XEVbSFxFW0okPDE1Nj5cRVs0MDswOzA7NDBwLCB1c2U9YWFhK3VuaywKK2FhYS00MC1ydnxhbm4gYXJib3IgYW1iYXNzYWRvci80MCBsaW5lcytyZXZlcnNlIHZpZGVvLAorCXVzZT1hYWErcnYsIHVzZT1hYWEtNDAsCithYWEtNDh8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvNDggbGluZXMsCisJbGluZXMjNDgsCisJaXMyPVxFN1xFWzYwOzA7MDs0OHBcRTgsCisJcm1jdXA9XEVbNjA7MDswOzQ4cFxFWzQ4OzFIXEVbSywKKwlzbWN1cD1cRVtIXEVbSiQ8MTU2PlxFWzQ4OzA7MDs0OHAsIHVzZT1hYWErdW5rLAorYWFhLTQ4LXJ2fGFubiBhcmJvciBhbWJhc3NhZG9yLzQ4IGxpbmVzK3JldmVyc2UgdmlkZW8sCisJdXNlPWFhYStydiwgdXNlPWFhYS00OCwKK2FhYS02MC1zfGFubiBhcmJvciBhbWJhc3NhZG9yLzU5IGxpbmVzK3N0YXR1cywKKwllc2xvaywgaHMsCisJbGluZXMjNTksCisJZHNsPVxFN1xFWzYwOzA7MDs2MHBcRVsxOzFIXEVbS1xFW0hcRThcclxuXEVbSywKKwlmc2w9XEVbPjUxbCwgaXMyPVxyXG5cRVtBXEU3XEVbNjA7MTswOzYwcFxFOCwKKwl0c2w9XEVbPjUxaFxFWzE7JXAxJWRIXEVbMkssIHVzZT1hYWErdW5rLAorYWFhLTYwLXMtcnZ8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvNTkgbGluZXMrc3RhdHVzK3JldmVyc2UgdmlkZW8sCisJdXNlPWFhYStydiwgdXNlPWFhYS02MC1zLAorYWFhLTYwLWRlYy1ydnxhbm4gYXJib3IgYW1iYXNzYWRvci9kZWMgbW9kZSs1OSBsaW5lcytzdGF0dXMrcmV2IHZpZGVvLAorCXVzZT1hYWErZGVjLCB1c2U9YWFhK3J2LCB1c2U9YWFhLTYwLXMsCithYWEtNjB8YW5uIGFyYm9yIGFtYmFzc2Fkb3IvNjAgbGluZXMsCisJbGluZXMjNjAsCisJaXMyPVxFN1xFWzYwOzA7MDs2MHBcRVsxUVxFW21cRVs+MjA7MzBsXEU4LAorCXVzZT1hYWErdW5rLAorYWFhLTYwLXJ2fGFubiBhcmJvciBhbWJhc3NhZG9yLzYwIGxpbmVzK3JldmVyc2UgdmlkZW8sCisJdXNlPWFhYStydiwgdXNlPWFhYS02MCwKK2FhYS1kYnxhbm4gYXJib3IgYW1iYXNzYWRvciAzMC9kZXN0cnVjdGl2ZSBiYWNrc3BhY2UsCisJT1Ric0AsCisJY3ViMT1cRVtELCBpczM9XEVbMVFcRVttXEVbPjIwbFxFWz4zMGgsIHVzZT1hYWEtMzAsCisKK2d1cnV8Z3VydS0zM3xndXJ1K3Vua3xhbm4gYXJib3IgZ3VydS8zMyBsaW5lcyA4MCBjb2xzLAorCWxpbmVzIzMzLAorCWZsYXNoPVxFWz41OWgkPDEwMD5cRVs+NTlsLAorCWlzMj1cRTdcRVsyNTU7MDswOzMzOzgwOzgwcFxFOFxFW0osIGlzMz1cRVs+NTlsLAorCXJtY3VwPVxFWzI1NXBcRVsyNTU7MUhcRVtLLCBzbWN1cD1cRVszM3AsIHVzZT1hYWErdW5rLAorZ3VydStydnxndXJ1IGNoYW5nZXMgZm9yIHJldmVyc2UgdmlkZW8sCisJZmxhc2g9XEVbPjU5bCQ8MTAwPlxFWz41OWgsIGlzMz1cRVs+NTloLAorZ3VydS1ydnxndXJ1LTMzLXJ2fGFubiBhcmJvciBndXJ1LzMzIGxpbmVzK3JldmVyc2UgdmlkZW8sCisJdXNlPWd1cnUrcnYsIHVzZT1ndXJ1LTMzLAorZ3VydStzfGd1cnUgc3RhdHVzIGxpbmUsCisJZXNsb2ssIGhzLAorCWRzbD1cRTdcRVs7MHBcRVsxOzFIXEVbS1xFW0hcRThcclxuXEVbSywgZnNsPVxFWz41MWwsCisJcm1jdXA9XEVbMjU1OzFwXEVbMjU1OzFIXEVbSywgc21jdXA9LAorCXRzbD1cRVs+NTFoXEVbMTslcDElZEhcRVsySywKK2d1cnUtbmN0eHR8Z3VydSB3aXRoIG5vIHNhdmVkIGNvbnRleHQsCisJc21jdXA9XEVbSFxFW0okPDE1Nj5cRVszM3BcRVsyNTU7MUhcRVtLLCB1c2U9Z3VydSwKK2d1cnUtc3xndXJ1LTMzLXN8YW5uIGFyYm9yIGd1cnUvMzMgbGluZXMrc3RhdHVzLAorCWxpbmVzIzMyLAorCWlzMj1cclxuXEVbQVxFN1xFWzI1NTsxOzA7MzM7ODA7ODBwXEU4XEVbSiwKKwlzbWN1cD1cRVszMzsxcFxFWzI1NTsxSFxFW0ssIHVzZT1ndXJ1K3MsIHVzZT1ndXJ1K3VuaywKK2d1cnUtMjR8YW5uIGFyYm9yIGd1cnUgMjQgbGluZXMsCisJY29scyM4MCwgbGluZXMjMjQsCisJaXMyPVxFN1xFWzI1NTswOzA7MjQ7ODA7ODBwXEU4XEVbSiwgc21jdXA9XEVbMjRwLAorCXVzZT1ndXJ1K3VuaywKK2d1cnUtNDR8YW5uIGFyYm9yIGd1cnUgNDQgbGluZXMsCisJY29scyM5NywgbGluZXMjNDQsCisJaXMyPVxFN1xFWzI1NTswOzA7NDQ7OTc7MTAwcFxFOFxFW0osIHNtY3VwPVxFWzQ0cCwKKwl1c2U9Z3VydSt1bmssCitndXJ1LTQ0LXN8YW5uIGFyYm9yIGd1cnUvNDQgbGluZXMrc3RhdHVzLAorCWxpbmVzIzQzLAorCWlzMj1cclxuXEVbQVxFN1xFWzI1NTsxOzA7NDQ7ODA7ODBwXEU4XEVbSiwKKwlzbWN1cD1cRVs0NDsxcFxFWzI1NTsxSFxFW0ssIHVzZT1ndXJ1K3MsIHVzZT1ndXJ1K3VuaywKK2d1cnUtNzZ8Z3VydSB3aXRoIDc2IGxpbmVzIGJ5IDg5IGNvbHMsCisJY29scyM4OSwgbGluZXMjNzYsCisJaXMyPVxFN1xFWzI1NTswOzA7NzY7ODk7MTAwcFxFOFxFW0osIHNtY3VwPVxFWzc2cCwKKwl1c2U9Z3VydSt1bmssCitndXJ1LTc2LXN8YW5uIGFyYm9yIGd1cnUvNzYgbGluZXMrc3RhdHVzLAorCWNvbHMjODksIGxpbmVzIzc1LAorCWlzMj1cclxuXEVbQVxFN1xFWzI1NTsxOzA7NzY7ODk7MTAwcFxFOFxFW0osCisJc21jdXA9XEVbNzY7MXBcRVsyNTU7MUhcRVtLLCB1c2U9Z3VydStzLCB1c2U9Z3VydSt1bmssCitndXJ1LTc2LWxwfGd1cnUtbHB8Z3VydSB3aXRoIHBhZ2UgYmlnZ2VyIHRoYW4gbGluZSBwcmludGVyLAorCWNvbHMjMTM0LCBsaW5lcyM3NiwKKwlpczI9XEU3XEVbMjU1OzA7MDs3NjsxMzQ7MTM0cFxFOFxFW0osIHNtY3VwPVxFWzc2cCwKKwl1c2U9Z3VydSt1bmssCitndXJ1LTc2LXd8Z3VydSA3NiBsaW5lcyBieSAxNzggY29scywKKwljb2xzIzE3OCwgbGluZXMjNzYsCisJaXMyPVxFN1xFWzI1NTswOzA7NzY7MTc4OzE3OHBcRThcRVtKLCBzbWN1cD1cRVs3NnAsCisJdXNlPWd1cnUrdW5rLAorZ3VydS03Ni13LXN8YW5uIGFyYm9yIGd1cnUvNzYgbGluZXMrc3RhdHVzK3dpZGUsCisJY29scyMxNzgsIGxpbmVzIzc1LAorCWlzMj1cclxuXEVbQVxFN1xFWzI1NTsxOzA7NzY7MTc4OzE3OHBcRThcRVtKLAorCXNtY3VwPVxFWzc2OzFwXEVbMjU1OzFIXEVbSywgdXNlPWd1cnUrcywgdXNlPWd1cnUrdW5rLAorZ3VydS03Ni13bXxndXJ1IDc2IGxpbmVzIGJ5IDE3OCBjb2xzIHdpdGggMjU1IGNvbHMgbWVtb3J5LAorCWNvbHMjMTc4LCBsaW5lcyM3NiwKKwlpczI9XEU3XEVbMjU1OzA7MDs3NjsxNzg7MjU1cFxFOFxFW0osIHNtY3VwPVxFWzc2cCwKKwl1c2U9Z3VydSt1bmssCithYWEtcnYtdW5rfGFubiBhcmJvciB1bmtub3duIHR5cGUsCisJbGgjMCwgbHcjMCwgbmxhYiMwLAorCWJsaW5rPVxFWzU7N20sIGJvbGQ9XEVbMTs3bSwgaG9tZT1cRVtILCBpbnZpcz1cRVs3OzhtLAorCWlzMT1cRVs3bVxFN1xFW0hcRTlcRTgsIHJldj1cRVttLCBybXNvPVxFWzdtLCBybXVsPVxFWzdtLAorCXJzMT1cRVtIXEVbN21cRVtKLAorCXNncj1cRVslPyVwMSUhJXQ3OyU7JT8lcDIldDQ7JTslPyVwMyV0NzslOyU/JXA0JXQ1OyU7JT8lcDYldDE7JTslPyVwNyV0ODslO20sCisJc2dyMD1cRVs3bSwgc21zbz1cRVttLCBzbXVsPVxFWzQ7N20sCisKKyMjIyMgQXBwbGllZCBEaWdpdGFsIERhdGEgU3lzdGVtcyAoYWRkcykKKyMKKyMgQUREUyBpdHNlbGYgaXMgbG9uZyBnb25lLiAgQUREUyB3YXMgYm91Z2h0IGJ5IE5DUiwgYW5kIHRoZSBzYW1lIGdyb3VwIG1hZGUKKyMgQUREUyBhbmQgTkNSIHRlcm1pbmFscy4gIFdoZW4gQVQmVCBhbmQgTkNSIG1lcmdlZCwgdGhlIGVuZ2luZWVyaW5nIGZvcgorIyB0ZXJtaW5hbHMgd2FzIG1lcmdlZCBhZ2Fpbi4gIFRoZW4gQVQmVCBzb2xkIHRoZSB0ZXJtaW5hbCBidXNpbmVzcyB0bworIyBTdW5SaXZlciwgd2hpY2ggbGF0ZXIgY2hhbmdlZCBpdHMgIG5hbWUgdG8gQm91bmRsZXNzIFRlY2hub2xvZ2llcy4gIFRoZQorIyBlbmdpbmVlcnMgZnJvbSBUZWxldHlwZSwgQVQmVCB0ZXJtaW5hbHMsIEFERFMsIGFuZCBOQ1IgKHdobyBhcmUgc3RpbGwgdGhlcmUKKyMgYXMgb2YgZWFybHkgMTk5NSkgYXJlIGF0OgorIworIwlCb3VuZGxlc3MgVGVjaG5vbG9naWVzCisjCTEwMCBNYXJjdXMgQm91bGV2YXJkCisjCUhhdXBwYXVnZSwgTlkgMTE3ODgtMzc2MgorIwlWb3g6ICg4MDApLTIzMS01NDQ1CisjCUZheDogKDUxNiktMzQyLTczNzgKKyMJV2ViOiBodHRwOi8vYm91bmRsZXNzLmNvbQorIworIyBUaGVpciB2b2ljZSBtYWlsIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHBsYWNlIGFzICJTdW5SaXZlciAoZm9ybWVybHkgQUREUykiLgorIyBJbiAxOTk1IEJvdW5kbGVzcyBhY3F1aXJlZCBERUMncyB0ZXJtaW5hbHMgYnVzaW5lc3MuCisjCisKKyMgUmVnZW50OiBsb3dlc3QgY29tbW9uIGRlbm9taW5hdG9yLCB3b3JrcyBvbiBhbGwgcmVnZW50cy4KKyMgKHJlZ2VudDogcmVuYW1lZCAiOmJjOiIgdG8gIjpsZToiIC0tIGVzcikKK3JlZ2VudHxBZGRzIFJlZ2VudCBTZXJpZXMsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XlUsIGN1ZDE9XkosIGN1ZjE9XkYsIGN1dTE9XlosCisJaG9tZT1cRVlcc1xzLCBpbmQ9XkosIGxsPV5BLAorIyBSZWdlbnQgMTAwIGhhcyBhIGJ1ZyB3aGVyZSBpZiBjb21wdXRlciBzZW5kcyBlc2NhcGUgd2hlbiB1c2VyIGlzIGhvbGRpbmcKKyMgZG93biBzaGlmdCBrZXkgaXQgZ2V0cyBjb25mdXNlZCwgc28gd2UgYXZvaWQgZXNjYXBlLgorcmVnZW50MTAwfEFkZHMgUmVnZW50IDEwMCwKKwl4bWMjMSwKKwliZWw9XkcsCisJY3VwPVwwMTMlcDElJyAnJSslY1wwMjAlcDIlezEwfSUvJXsxNn0lKiVwMiV7MTB9JW0lKyVjLAorCWtmMD1eQjFcciwga2YxPV5CMlxyLCBrZjI9XkIzXHIsIGtmMz1eQjRcciwga2Y0PV5CNVxyLAorCWtmNT1eQjZcciwga2Y2PV5CN1xyLCBrZjc9XkI4XHIsIGxmMD1GMSwgbGYxPUYyLCBsZjI9RjMsCisJbGYzPUY0LCBsZjQ9RjUsIGxmNT1GNiwgbGY2PUY3LCBsZjc9RjgsIHJtc289XEUwQCwgcm11bD1cRTBALAorCXNncjA9XEUwQCwgc21zbz1cRTBQLCBzbXVsPVxFMGAsIHVzZT1yZWdlbnQsCityZWdlbnQyMHxBZGRzIFJlZ2VudCAyMCwKKwliZWw9XkcsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGVkPVxFaywgZWw9XEVLLAorCXVzZT1yZWdlbnQsCityZWdlbnQyNXxBZGRzIFJlZ2VudCAyNSwKKwliZWw9XkcsIGtjdWIxPV5VLCBrY3VkMT1eSiwga2N1ZjE9XkYsIGtjdXUxPV5aLCBraG9tZT1eQSwKKwl1c2U9cmVnZW50MjAsCityZWdlbnQ0MHxBZGRzIFJlZ2VudCA0MCwKKwl4bWMjMSwKKwliZWw9XkcsIGRsMT1cRWwkPDIqPiwgaWwxPVxFTSQ8Mio+LCBrZjA9XkIxXHIsIGtmMT1eQjJcciwKKwlrZjI9XkIzXHIsIGtmMz1eQjRcciwga2Y0PV5CNVxyLCBrZjU9XkI2XHIsIGtmNj1eQjdcciwKKwlrZjc9XkI4XHIsIGxmMD1GMSwgbGYxPUYyLCBsZjI9RjMsIGxmMz1GNCwgbGY0PUY1LCBsZjU9RjYsCisJbGY2PUY3LCBsZjc9RjgsIHJtc289XEUwQCwgcm11bD1cRTBALCBzZ3IwPVxFMEAsIHNtc289XEUwUCwKKwlzbXVsPVxFMGAsIHVzZT1yZWdlbnQyNSwKK3JlZ2VudDQwK3xBZGRzIFJlZ2VudCA0MCssCisJaXMyPVxFQiwgdXNlPXJlZ2VudDQwLAorcmVnZW50NjB8cmVnZW50MjAwfEFkZHMgUmVnZW50IDYwLAorCWRjaDE9XEVFLCBpczI9XEVWXEVCLCBrZGNoMT1cRUUsIGtpY2gxPVxFRiwga3JtaXI9XEVGLAorCXJtaXI9XEVGLCBybXNvPVxFUlxFMEBcRVYsIHNtaXI9XEVGLCBzbXNvPVxFUlxFMFBcRVYsCisJdXNlPXJlZ2VudDQwKywKKyMgRnJvbTogPGVkd2FyZEBvbnl4LmJlcmtlbGV5LmVkdT4gVGh1IEp1bCAgOSAwOToyNzozMyAxOTgxCisjICh2aWV3cG9pbnQ6IGFkZGVkIDxrY3VmMT4sIGZ1bmN0aW9uIGtleSwgYW5kIDxkbDE+IGNhcGFiaWxpdGllcyAtLSBlc3IpCit2aWV3cG9pbnR8YWRkc3ZpZXdwb2ludHxhZGRzIHZpZXdwb2ludCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjbm9ybT1cMDE3XEUwYCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eRiwgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eWiwKKwljdnZpcz1cMDE3XEUwUCwgZGwxPVxFbCwgZWQ9XEVrJDwxNi4xKj4sIGVsPVxFSyQ8MTY+LAorCWluZD1eSiwgaXMyPVwwMTdcRTBgLCBrY3ViMT1eVSwga2N1ZDE9XkosIGtjdWYxPV5GLCBrY3V1MT1eWiwKKwlrZjA9XkIxLCBrZjI9XkIyLCBrZjM9XkIhLCBrZjQ9XkIiLCBrZjU9XkIjLCBraG9tZT1eQSwgbGw9XkEsCisJcm1zbz1eTywgcm11bD1eTywgc2dyMD1eTywgc21zbz1eTiwgc211bD1eTiwKKyMgU29tZSB2aWV3cG9pbnRzIGhhdmUgYmFkIFJPTXMgdGhhdCBmb28gdXAgb24gXk8KK3NjcmV3cG9pbnR8YWRkcyB2aWV3cG9pbnQgd2l0aCBeTyBidWcsCisJY3Z2aXNALCBybXNvQCwgcm11bEAsIHNtc29ALCBzbXVsQCwgdXNlPXZpZXdwb2ludCwKKworIyBGcm9tOiBKYXkgUy4gUm91bWFuIDxqc3JAZGV4dGVyLm1pLm9yZz4gNSBKdWwgOTIKKyMgVGhlIDxjaXZpcz4vPGNub3JtPi88c2dyPi88c2dyMD4gc3RyaW5ncyB3ZXJlIGFkZGVkIGJ5IEVTUiBmcm9tIHNwZWNzLgorIyBUaGVvcnk7IHRoZSB2cDNhKyB3YW50cyBcRTAlYyB0byBzZXQgaGlnaGxpZ2h0cywgd2hlcmUgbm9ybWFsPTAxMDAwMDAwLAorIyB1bmRlcmxpbmU9MDExMDAwMDAsIHJldj0wMTAxMDAwMCwgYmxpbms9MDEwMDAwMTAsZGltPTAxMDAwMDAxLAorIyBpbnZpcz0wMTAwMDEwMCBhbmQgJWMgaXMgdGhlIGxvZ2ljYWwgb3Igb2YgZGVzaXJlZCBhdHRyaWJ1dGVzLgorIyBUaGVyZSBpcyBhbHNvIGEgYHRhZyBiaXQnIGVuYWJsaW5nIGF0dHJpYnV0ZXMsIHNldCBieSBcRSkgYW5kIHVuc2V0IGJ5IFxFKC4KKyMKKyMgVXBkYXRlIGJ5IFREIC0gMjAwNDoKKyMgQWRhcHRlZCBmcm9tCisjCWh0dHA6Ly93d3cuY3MudXRrLmVkdS9+c2h1Zm9yZC90ZXJtaW5hbC9hZGRzX3ZpZXdwb2ludF9uZXdzLnR4dAorIworIyBDT01NQU5EUyAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJIENPREUKKyMKKyMgQWRkcmVzcywgQWJzb2x1dGUgICAgICAgICAgICAgICBFU0MsPSxyb3csY29sdW1uCisjIEJlZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkVMCisjIEF1eCBQb3J0IEVuYWJsZSAgICAgICAgICAgICAgICAgRVNDLEAKKyMgQXV4IFBvcnQgRGlzYWJsZSAgICAgICAgICAgICAgICBFU0MsQQorIyBCYWNrc3BhY2UgICAgICAgICAgICAgICAgICAgICAgIEJTCisjIEN1cnNvciBiYWNrICAgICAgICAgICAgICAgICAgICAgQlMKKyMgQ3Vyc29yIGRvd24gICAgICAgICAgICAgICAgICAgICBMRgorIyBDdXJzb3IgZm9yd2FyZCAgICAgICAgICAgICAgICAgIEZGCisjIEN1cnNvciBob21lICAgICAgICAgICAgICAgICAgICAgUlMKKyMgQ3Vyc29yIHVwICAgICAgICAgICAgICAgICAgICAgICBWVAorIyBDdXJzb3Igc3VwcmVzcyAgICAgICAgICAgICAgICAgIEVUQgorIyBDdXJzb3IgZW5hYmxlICAgICAgICAgICAgICAgICAgIENBTgorIyBFcmFzZSB0byBlbmQgb2YgbGluZSAgICAgICAgICAgIEVTQyxUCisjIEVyYXNlIHRvIGVuZCBvZiBwYWdlICAgICAgICAgICAgRVNDLFkKKyMgRXJhc2Ugc2NyZWVuICAgICAgICAgICAgICAgICAgICBTVUIKKyMgS2V5Ym9hcmQgbG9jayAgICAgICAgICAgICAgICAgICBTSQorIyBLZXlib2FyZCB1bmxvY2sgICAgICAgICAgICAgICAgIFNPCisjIFJlYWQgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gICAgRVNDLD8KKyMgU2V0IEF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgICBFU0MsMCx4ICAoc2VlIGJlbG93IGZvciB2YWx1ZXMgb2YgeCkKKyMgVGFnIGJpdCByZXNldCAgICAgICAgICAgICAgICAgICBFU0MsKAorIyBUYWcgYml0IHNldCAgICAgICAgICAgICAgICAgICAgIEVTQywpCisjIFRyYW5zcGFyZW50IFByaW50IG9uICAgICAgICAgICAgRVNDLDMKKyMgVHJhbnNwYXJlbnQgUHJpbnQgb2ZmICAgICAgICAgICBFU0MsNAorIworIworIyBBVFRSSUJVVEVTCisjCisjIE5vcm1hbCAgICAgICAgICAgICAgICAgICAgICAgICAgQAkwMTAwCisjIEhhbGYgSW50ZW5zaXR5ICAgICAgICAgICAgICAgICAgQQkwMTAxCisjIEJsaW5raW5nICAgICAgICAgICAgICAgICAgICAgICAgQgkwMTAyCisjIEhhbGYgSW50ZW5zaXR5IEJsaW5raW5nICAgICAgICAgQwkwMTAzCisjIFJldmVyc2UgVmlkZW8gICAgICAgICAgICAgICAgICAgUAkwMTIwCisjIFJldmVyc2UgVmlkZW8gSGFsZiBJbnRlbnNpdHkgICAgUQkwMTIxCisjIFJldmVyc2UgVmlkZW8gQmxpbmtpbmcgICAgICAgICAgUgkwMTIyCisjIFJldmVyc2UgVmlkZW8gSGFsZiBJbnRlbnNpdHkKKyMgICAgQmxpbmtpbmcgICAgICAgICAgICAgICAgICAgICBTCTAxMjMKKyMgVW5kZXJsaW5lZCAgICAgICAgICAgICAgICAgICAgICBgCTAxNDAKKyMgVW5kZXJsaW5lZCBIYWxmIEludGVuc2l0eSAgICAgICBhCTAxNDEKKyMgVW5kZXJsaW5lZCBCbGlua2luZyAgICAgICAgICAgICBiCTAxNDIKKyMgVW5kZXJsaW5lZCBIYWxmIEludGVuc2l0eQorIyAgICBCbGlua2luZyAgICAgICAgICAgICAgICAgICAgIGMJMDE0MworIyBWaWRlbyBzdXBwcmVzcyAgICAgICAgICAgICAgICAgIEQJMDEwNAordnAzYSt8dmlld3BvaW50M2ErfGFkZHMgdmlld3BvaW50IDNhKywKKwlhbSwgYncsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmxpbms9XEUwQlxFKSwgY2l2aXM9XlcsIGNsZWFyPVxFKiQ8ODA+LCBjbm9ybT1eWCwgY3I9Xk0sCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkaW09XEUwQVxFKSwKKwllZD1cRVkkPDgwPiwgZWw9XEVULCBob21lPV5eLCBodD1eSSwgaW5kPV5KLCBpbnZpcz1cRTBEXEUpLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtob21lPV5eLAorCW5lbD1eTV5KLCByZXY9XEUwUFxFKSwgcm1zbz1cRSgsCisJc2dyPSU/JXAxJXAyJXwlcDMlfCVwNCV8JXA1JXwlcDclfCV0XEUwJXs2NH0lPyVwMSV0JXsxN30lfCU7JT8lcDIldCV7MzJ9JXwlOyU/JXAzJXQlezE2fSV8JTslPyVwNCV0JXsyfSV8JTslPyVwNSV0JXsxfSV8JTslYyU/JXA3JXREJTtcRSklZVxFKCU7LAorCXNncjA9XEUoLCBzbXNvPVxFMFFcRSksIHNtdWw9XEUwYFxFKSwKK3ZwNjB8dmlld3BvaW50NjB8YWRkc3ZwNjB8YWRkcyB2aWV3cG9pbnQ2MCwKKwl1c2U9cmVnZW50NDAsCisjCisjIGFkZHMgdmlld3BvaW50IDkwIC0gZnJvbSBjb3JuZWxsCisjIE5vdGU6ICBlbWFjcyBzZW5kcyBlaSBvY2Nhc2lvbmFsbHkgdG8gaW5zdXJlIHRoZSB0ZXJtaW5hbCBpcyBvdXQgb2YKKyMgICAgICAgIGluc2VydCBtb2RlLiBUaGlzIHVuZm9ydHVuYXRlbHkgcHV0cyB0aGUgdmlld3BvaW50OTAgSU4gaW5zZXJ0CisjICAgICAgICBtb2RlLiAgQSBoYWNrIHRvIGdldCBhcm91bmQgdGhpcyBpcyA8aWNoMT1cRUZcc1xFRl5VPi4gIChBbHNvLAorIyAgIC0gICAgOmVpPTppbT06IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgdGVybWNhcCB0cmFuc2xhdGlvbi4pCisjICAgLSAgICA8eGhwPiBpbmRpY2F0ZXMgZ2xpdGNoIHRoYXQgYXR0cmlidXRlcyBzdGljayB0byBsb2NhdGlvbgorIyAgIC0gICAgPG1zZ3I+IG1lYW5zIGl0J3Mgc2FmZSB0byBtb3ZlIGluIHN0YW5kb3V0IG1vZGUKKyMgICAtICAgIDxjbGVhcj1cRUdcRWs+OiBjbGVhcnMgc2NyZWVuIGFuZCB2aXN1YWwgYXR0cmlidXRlcyB3aXRob3V0IGFmZmVjdGluZworIyAgICAgICAgICAgICAgIHRoZSBzdGF0dXMgbGluZQorIyBGdW5jdGlvbiBrZXkgYW5kIGxhYmVsIGNhcGFiaWxpdGllcyBtZXJnZWQgaW4gZnJvbSBTQ08uCit2cDkwfHZpZXdwb2ludDkwfGFkZHMgdmlld3BvaW50IDkwLAorCU9UYnMsIGJ3LCBtc2dyLCB4aHAsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEVHXEVrLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5GLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XlosIGRjaDE9XEVFLAorCWRsMT1cRWwsIGVkPVxFaywgZWw9XEVLLCBob21lPVxFWVxzXHMsIGh0PV5JLAorCWljaDE9XEVGIFxFRlwwMjUsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eVSwga2N1ZDE9XkosCisJa2N1ZjE9XkYsIGtjdXUxPV5aLCBrZjA9XkIxXHIsIGtmMT1eQjJcciwga2YxMD1eQjtcciwKKwlrZjI9XkIzXHIsIGtmMz1eQjRcciwga2Y0PV5CNVxyLCBrZjU9XkI2XHIsIGtmNj1eQjdcciwKKwlrZjc9XkI4XHIsIGtmOD1eQjlcciwga2Y5PV5CXDpcciwga2hvbWU9XkEsIGxmMD1GMSwgbGYxPUYyLAorCWxmMTA9RjExLCBsZjI9RjMsIGxmMz1GNCwgbGY0PUY1LCBsZjU9RjYsIGxmNj1GNywgbGY3PUY4LCBsZjg9RjksCisJbGY5PUYxMCwgbGw9XkEsIHJtc289XEVSXEUwQFxFViwgcm11bD1cRVJcRTBAXEVWLAorCXNncjA9XEVSXEUwQFxFViwgc21zbz1cRVJcRTBRXEVWLCBzbXVsPVxFUlxFMGBcRVYsCisjIE5vdGU6IGlmIHJldHVybiBhY3RzIHdlaXJkIG9uIGE5ODAsIGNoZWNrIGludGVybmFsIHN3aXRjaCAjMgorIyBvbiB0aGUgdG9wIGNoaXAgb24gdGhlIENPTlRST0wgcGMgYm9hcmQuCithZGRzOTgwfGE5ODB8YWRkcyBjb25zdWwgOTgwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAxNCQ8MT5cMDEzQCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1cRV5FMDEsIGN1cD1cMDEzJXAxJXs2NH0lKyVjXEVcMDA1JXAyJTJkLAorCWRsMT1cRVwwMTckPDEzPiwgaWwxPVxFXDAxNiQ8MTM+LCBpbmQ9XkosIGtmMD1cRTAsIGtmMT1cRTEsCisJa2YyPVxFMiwga2YzPVxFMywga2Y0PVxFNCwga2Y1PVxFNSwga2Y2PVxFNiwga2Y3PVxFNywga2Y4PVxFOCwKKwlrZjk9XEU5LCBybXNvPV5PLCBzZ3IwPV5PLCBzbXNvPV5ZXl5eTiwKKworIyMjIyBDLiBJdG9oIEVsZWN0cm9uaWNzCisjCisjIEFzIG9mIDE5OTUgdGhlc2UgcGVvcGxlIG5vIGxvbmdlciBtYWtlIHRlcm1pbmFscyAodGhleSdyZSBzdGlsbCBpbiB0aGUKKyMgcHJpbnRlciBidXNpbmVzcykuICBUaGVpciB0ZXJtaW5hbHMgd2VyZSBhbGwgY2xvbmVzIG9mIHRoZSBERUMgVlQgc2VyaWVzLgorIyBUaGV5J3JlIGxvY2F0ZWQgaW4gT3JhbmdlIENvdW50eSwgQ0EuCisjCisKKyMgQ0lUIDgwICAtIHZ0LTUyIGVtdWxhdG9yLCB0aGUgdGVybWNhcCBoYXMgYmVlbiBtb2RpZmllZCB0byByZW1vdmUKKyMgICAgICAgICAgIHRoZSBkZWxheSB0aW1lcyBhbmQgZG8gYW4gYXV0byB0YWIgc2V0IHJhdGhlciB0aGFuIHRoZSBpbmRpcmVjdAorIyAgICAgICAgICAgZmlsZSB1c2VkIGluIHZ0MTAwLgorY2l0ODB8Y2l0LTgwfGNpdG9oIDgwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPVxFW0hcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJTJkOyVwMiUyZEgsIGN1dTE9XEVbQSwgZWQ9XEVKLCBlbD1cRUssIGZmPV5MLAorCWluZD1eSiwgaXMyPVxFPiwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywKKwlrY3V1MT1cRU9BLCBybWt4PVxFWz8xbFxFPiwgc21reD1cRVs/MWhcRT0sCisjIEZyb206IFRpbSBXb29kIDxtdHhpbnUhc3liYXNlIXRpbT4gRnJpIFNlcCAyNyAwOTozOToxMiBQRFQgMTk4NQorIyAoY2l0MTAxOiBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIGluaXQgc3RyaW5nLCBtZXJnZWQgdGhpcyB3aXRoIGMxMDEgLS0gZXNyKQorY2l0MTAxfGNpdGN8Qy5pdG9oIGZhc3QgdnQxMDAsCisJT1RicywgYW0sIHhlbmwsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFW1ZcRTgsIGN1YjE9XkgsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgY3Z2aXM9XEU3XEVbVSwKKwlkY2gxPVxFW1AsIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLAorCWZsYXNoPVxFWz81aCQ8MjAwLz5cRVs/NWwsIGljaDE9XEVbQCwgaWwxPVxFW0wsCisJaXMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzNnXEVbPjVnLAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJcm1hbT1cRVs/N2wsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sIHNtYW09XEVbPzdoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorIyBDSUUgVGVybWluYWxzIENJVC0xMDFlIGZyb20gR2VvZmYgS3Vlbm5pbmcgPGNhbGxhbiFnZW9mZj4gdmlhIEJSTAorIyBUaGUgZm9sbG93aW5nIHRlcm1jYXAgZW50cnkgd2FzIGNyZWF0ZWQgZnJvbSB0aGUgQ2FsbGFuIGNkMTAwIGVudHJ5LiAgVGhlCisjIGxhc3QgdHdvIGxpbmVzICh3aXRoIHRoZSBjYXBhYmlsaXRpZXMgaW4gY2FwcykgYXJlIHVzZWQgYnkgUk0tY29ib2wgdG8gYWxsb3cKKyMgZnVsbCBzZWxlY3Rpb24gb2YgY29tYmluYXRpb25zIG9mIHJldmVyc2UgdmlkZW8sIHVuZGVybGluZSwgYW5kIGJsaW5rLgorIyAoY2l0MTAxZTogcmVtb3ZlZCB1bmtub3duIDpmMD1cRU9wOmYxPVxFT3E6ZjI9XEVPcjpmMz1cRU9zOmY0PVxFT3Q6ZjU9XEVPdTpcCisjIGY2PVxFT3Y6Zjc9XEVPdzpmOD1cRU94OmY5PVxFT3k6QUI9XEVbMDs1bTpBTD1cRVttOkFSPVxFWzA7N206QVM9XEVbMDs1OzdtOlwKKyMgOk5CPVxFWzA7MTs1bTpOTT1cRVswOzFtOk5SPVxFWzA7MTs3bTpOUz1cRVswOzE7NTs3bTogLS0gZXNyKQorY2l0MTAxZXxDLiBJdG9oIENJVC0xMDFlLAorCU9UYnMsIE9UcHQsIGFtLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz0sIGNsZWFyPVxFW0hcRVtKLCBjbm9ybT0sIGNzcj1cRVslaSVwMSUyZDslcDIlMmRyLAorCWN1ZDE9XEVbQiwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRVtBLAorCWN2dmlzPVxFWz8xbFxFWz80bFxFWz83aCwgZGNoMT1cRVtQLCBkbDE9XEVbTSwgZWQ9XEVbSiwKKwllbD1cRVtLLCBpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgaWwxPVxFW0wsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YwPVxFT1QsCisJa2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtmNT1cRU9tLCBrZjY9XEVPbCwKKwlrZjc9XEVPTSwga2Y4PVxFT24sIHJjPVxFOCwgcmk9XEVNLCBybWFjcz1eTywgcm1pcj1cRVs0bCwKKwlybWt4PVxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sIHNjPVxFNywgc21hY3M9Xk4sIHNtaXI9XEVbNGgsCisJc21reD1cRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisjIEZyb206IERhdmlkIFMuIExhd3llciwgSnVuZSAxOTk3OgorIyBUaGUgQ0lUIDEwMS1lIHdhcyBtYWRlIGluIEphcGFuIGluIDE5ODMtNCBhbmQgaW1wb3J0ZWQgYnkgQ0lFCisjIFRlcm1pbmFscyBpbiBJcnZpbmUsIENBLiAgSXQgd2FzIHBhcnQgb2YgQ0lUT0ggRWxlY3Ryb25pY3MuICBJbiB0aGUKKyMgbGF0ZSAxOTgwJ3MgQ0lUIFRlcm1pbmFscyB3ZW50IG91dCBvZiBidXNpbmVzcy4KKyMgVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgdGhlIGluaXRpYWxpemF0aW9uIHN0cmluZyBpcz0uLi4gKGJ5IGludm9raW5nCisjIHRzZXQgb3Igc2V0dGVybSBldGMuKSBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtaW5hbCBoYXMgYmVlbiBtYW51YWxseSBzZXQKKyMgdXAgKGFuZCB0aGUgc2V0dXAgc2F2ZWQgd2l0aCBeUykgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgdGVybWNhcC4gIFRvIGJlCisjIGNvbXBhdGlibGUgaXQgc2hvdWxkIGJlIGluIEFOU0kgbW9kZSAobm90IFZUNTIpLiAgIEEgc2V0LXVwIHRoYXQKKyMgd29ya3MgaXMgdG8gc2V0IGFsbCB0aGUgbWFudWFsbHkgc2V0YWJsZSBzdHVmZiB0byBmYWN0b3J5IGRlZmF1bHRzCisjIGJ5IHByZXNzaW5nIF5EIGluIHNldC11cCBtb2RlLiAgVGhlbiBpbmNyZXNlIHRoZSBicmlnaG5lc3Mgd2l0aCB0aGUKKyMgdXAtYXJyb3cga2V5IHNpbmNlIHRoZSBmYWN0b3J5IGRlZmF1bHQgd2lsbCBsaWtlbHkgYmUgZGltIG9uIGFuIG9sZAorIyB0ZXJtaW5hbC4gIFRoZW4gY2hhbmdlIGFueSBvcHRpb25zIHlvdSB3YW50IChwcm92aWRlZCB0aGF0IHRoZXkgYXJlCisjIGNvbXBhdGlibGUgd2l0aCB0aGUgdGVybWNhcCkuICBGb3IgbXkgdGVybWluYWwgSSBzZXQ6IFNjcmVlbgorIyBCYWNrZ3JvdW5kOiBsaWdodDsgS2V5Y2xpY2tzOiBzaWxlbnQ7IEF1dG8gd3JhcGFyb3VuZDogb247IENSVCBzYXZlcjoKKyMgb24uICBJIGFsc28gc2V0IHVwIG1pbmUgZm9yIHBhcml0eSAoYnV0IHlvdSBtYXkgbm90IG5lZWQgaXQpLiAgVGhlbgorIyBzYXZlIHRoZSBzZXR1cCB3aXRoIF5TLgorIyAoY2l0MTAxZS1ydjogYWRkZWQgZW1wdHkgPHJtY3VwPiB0byBzdXBwcmVzcyBhIHRpYyB3YXJuaW5nLiAtLWVzcikKK2NpdDEwMWUtcnZ8Q2l0b2ggQ0lULTEwMWUgKHNldHMgcmV2ZXJzZSB2aWRlbyksCisJYW0sIGVvLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlPVG5sPVxFTSwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osCisJY2l2aXM9XEVbMXYsIGNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVswOzM7NHYsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVszOzV2LCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgZmxhc2g9XEVbPzVsXEVbPzVoJDwyMDAvPiwKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGluZG49XEVbJXAxJWRTLAorCWlzMj1cRTxcRT5cRVs/MWxcRVs/M2xcRVs/NGxcRVs/NWhcRVs/N2hcRVs/OGhcRVszZ1xFWz41Z1xFKEJcRVttXEVbMjBsXEVbMTsyNHJcRVsyNDsxSCwKKwlrYnM9XDE3Nywga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgbmVsPVxFRSwgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCByaW49XEVbJXAxJWRULCBybWN1cD0sIHJtaXI9XEVbNGwsCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHJzMT1cRWNcRVs/N2hcRVs+NWcsIHNjPVxFNywKKwlzZ3IwPVxFW20sIHNtY3VwPVxFWz41Z1xFWz83aFxFWz81aCwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHU2PVxFWyVpJXAxJWQ7JXAyJWRSLAorCXU3PVxFWzZuLCB1OD1cRVs/NmMsIHU5PVxFW2MsCitjaXQxMDFlLW58Q0lULTEwMWUgdy9vIGFtLAorCWFtQCwKKwljdnZpcz1cRVs/MWxcRVs/NGxcRVs/N2wsIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCXVzZT1jaXQxMDFlLAorY2l0MTAxZS0xMzJ8Q0lULTEwMWUgd2l0aCAxMzIgY29scywKKwljb2xzIzEzMiwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwgdXNlPWNpdDEwMWUsCitjaXQxMDFlLW4xMzJ8Q0lULTEwMWUgd2l0aCAxMzIgY29scyB3L28gYW0sCisJYW1ALAorCWNvbHMjMTMyLAorCWN2dmlzPVxFWz8xbFxFWz80bFxFWz83bCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosCisJdXNlPWNpdDEwMWUsCisjIENJRSBUZXJtaW5hbHMgQ0lULTUwMCBmcm9tIEJSTAorIyBUaGUgZm9sbG93aW5nIFNFVC1VUCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJR0VORVJBVEVfWE9OL1hPRkY6WUVTCURVUExFWDpGVUxMCQlORVdMSU5FOk9GRgorIwlBVVRPV1JBUDpPTgkJTU9ERTpBTlNJCQlTQ1JFRU5fTEVOR1RIOjY0X0xJTkVTCisjCURTUExZX0NOVFJMX0NPREVTP05PCVBBR0VfV0lEVEg6ODAJCUVESVRfTU9ERTpPRkYKKyMgT3RoZXIgU0VULVVQIG1vZGVzIG1heSBiZSBzZXQgZm9yIG9wZXJhdG9yIGNvbnZlbmllbmNlIG9yIGNvbW11bmljYXRpb24KKyMgcmVxdWlyZW1lbnRzLgorIyBIYXJkd2FyZSB0YWJzIGFyZSBhc3N1bWVkIHRvIGJlIHNldCBldmVyeSA4IGNvbHVtbnM7IHRoZXkgY2FuIGJlIHNldCB1cAorIyBieSB0aGUgInJlc2V0IiwgInRzZXQiLCBvciAidGFicyIgdXRpbGl0aWVzLiAgTm8gZGVsYXlzIGFyZSBzcGVjaWZpZWQ7IHVzZQorIyAic3R0eSBpeG9uIC1peGFueSIgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyAoY2l0NTAwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK2NpdDUwMHxDSUUgVGVybWluYWxzIENJVC01MDAsCisJT1RicywgT1RwdCwgbWlyLCBtc2dyLCB4b24sCisJT1RrbiMxMCwgY29scyM4MCwgaXQjOCwgbGluZXMjNjQsIHZ0IzMsCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLAorCWNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllZD1cRUosIGVsPVxFSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XkosIGlzMj1cRTxcRSkwLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N1YjE9XEVPRCwKKwlrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZGNoMT1cRVtQLCBrZGwxPVxFW00sCisJa2VkPVxFSiwga2VsPVxFSywga2YwPVxFT1AsIGtmMT1cRU9RLCBrZjI9XEVPUiwga2YzPVxFT1MsCisJa2Y0PVxFT1UsIGtmNT1cRU9WLCBrZjY9XEVPVywga2Y3PVxFT1gsIGtmOD1cRU9ZLCBrZjk9XEVPWiwKKwlraG9tZT1cRVtILCBraWNoMT1cRVs0aCwga2lsMT1cRVtMLCBrcm1pcj1cRVs0bCwgbGYwPVBGMSwKKwlsZjE9UEYyLCBsZjI9UEYzLCBsZjM9UEY0LCBsZjQ9RjE1LCBsZjU9RjE2LCBsZjY9RjE3LCBsZjc9RjE4LAorCWxmOD1GMTksIGxmOT1GMjAsIGxsPVxFWzY0SCwgbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNLCBybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LAorCXJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMT1cRTxcRTJcRVsyMGxcRVs/NmxcRVtyXEVbbVxFW3FcRShCXDAxN1xFKTBcRT4sCisJc2M9XEU3LCBzZ3IwPVxFW20sIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCisjIEMuIEl0b2ggcHJpbnRlcnMgYmVnaW4gaGVyZQorY2l0b2h8Y2k4NTEwfDg1MTB8Yy5pdG9oIDg1MTBhLAorCWNvbHMjODAsIGl0IzgsCisJYm9sZD1cRSEsIGN1YjFALAorCWlzMj1cRSgwMDlcLDAxN1wsMDI1XCwwMzNcLDA0MVwsMDQ5XCwwNTdcLDA2NVwsMDczLiwKKwlyZXA9XEVSJXAyJTAzZCVwMSVjLCByaT1cRXIsIHJtdWw9XEVZLCBzZ3IwPVxFIlxFWSwKKwlzbXVsPVxFWCwgdXNlPWxwciwKK2NpdG9oLXBpY2F8Y2l0b2ggaW4gcGljYSwKKwlpczE9XEVOLCB1c2U9Y2l0b2gsCitjaXRvaC1lbGl0ZXxjaXRvaCBpbiBlbGl0ZSwKKwljb2xzIzk2LAorCWlzMT1cRUUsCisJaXMyPVxFKDAwOVwsMDE3XCwwMjVcLDAzM1wsMDQxXCwwNDlcLDA1N1wsMDY1XCwwNzNcLDA4MVwsMDg5LiwKKwl1c2U9Y2l0b2gsCitjaXRvaC1jb21wfGNpdG9oIGluIGNvbXByZXNzZWQsCisJY29scyMxMzYsCisJaXMxPVxFUSwKKwlpczI9XEUoMDA5XCwwMTdcLDAyNVwsMDMzXCwwNDFcLDA0OVwsMDU3XCwwNjVcLDA3M1wsMDgxXCwwODlcLDA5N1wsMTA1XCwxMTNcLDEyMVwsMTI5LiwKKwl1c2U9Y2l0b2gsCisjIGNpdG9oIGhhcyBpbmZpbml0ZSBjb2xzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBscCBldmVyIGluc2VydGluZyBcblx0KiouCitjaXRvaC1wcm9wfGNpdG9oLXBzfGlwc3xjaXRvaCBpbiBwcm9wb3J0aW9uYWwgc3BhY2luZyBtb2RlLAorCWNvbHMjMzI3NjcsCisJaXMxPVxFUCwgdXNlPWNpdG9oLAorY2l0b2gtNmxwaXxjaXRvaCBpbiA2IGxpbmVzIHBlciBpbmNoIG1vZGUsCisJaXMzPVxFQSwgdXNlPWNpdG9oLAorY2l0b2gtOGxwaXxjaXRvaCBpbiA4IGxpbmVzIHBlciBpbmNoIG1vZGUsCisJbGluZXMjODgsCisJaXMzPVxFQiwgdXNlPWNpdG9oLAorCisjIyMjIENvbnRyb2wgRGF0YSAoY2RjKQorIworCitjZGM0NTZ8Y2RjIDQ1NiB0ZXJtaW5hbCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5ZXlgsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRTElcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XlosIGRsMT1cRUosIGVkPV5YLAorCWVsPV5WLCBob21lPV5ZLCBpbDE9XEVMLCBpbmQ9XkosCisKKyMgQXNzb3J0ZWQgQ0RDIHRlcm1pbmFscyBmcm9tIEJSTCAoaW1wcm92ZW1lbnRzIGJ5IERBRyAmIEZlcmQgQnJ1bmRpY2spCitjZGM3MjF8Q0RDIFZpa2luZywKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1eTCwgY3VmMT1eWCwgY3VwPVwwMDIlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsCisJY3V1MT1eVywgZWw9XkssIGhvbWU9XlksIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkksCisJa2N1dTE9XlcsIGtob21lPV5ZLAorY2RjNzIxbGx8Q0RDIFZpa2luZ2xsLAorCU9UYnMsIGFtLAorCWNvbHMjMTMyLCBsaW5lcyMyNCwKKwljbGVhcj1eTCwgY3VmMT1eWCwgY3VwPVwwMDIlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsCisJY3V1MT1eVywgZWw9XkssIGhvbWU9XlksIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkksCisJa2N1dTE9XlcsIGtob21lPV5ZLAorIyAoY2RjNzUyOiB0aGUgQlJMIGVudHJ5IGhhZCA6bGw9XEUxICBeWjogY29tbWVudGVkIG91dAorY2RjNzUyfENEQyA3NTIsCisJT1RicywgYW0sIGJ3LCB4aHAsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cMDMwXEUxXHNccywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlUsCisJY3VwPVxFMSVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eWiwgZWw9XlYsCisJaG9tZT1cRTFcc1xzLCBpbmQ9XkosIGxsPV5ZLCByczE9XEUxICBcMDMwXDAwMlwwMDNcMDE3LAorIyBDREMgNzU2CisjIFRoZSBmb2xsb3dpbmcgc3dpdGNoL2tleSBzZXR0aW5ncyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJOTYgY2hhcnMJU0NST0xMCQlGVUxMIGR1cGxleAlub3QgQkxPQ0sKKyMgT3RoZXIgc3dpdGNoZXMgbWF5IGJlIHNldCBhY2NvcmRpbmcgdG8gY29tbXVuaWNhdGlvbiByZXF1aXJlbWVudHMuCisjIEluc2VydC9kZWxldGUtY2hhcmFjdGVyIGNhbm5vdCBiZSB1c2VkLCBhcyB0aGUgd2hvbGUgZGlzcGxheSBpcyBhZmZlY3RlZC4KKyMgInNvIiAmICJzZSIgYXJlIGNvbW1lbnRlZCBvdXQgdW50aWwgam92ZSBoYW5kbGVzICJzZyIgY29ycmVjdGx5LgorY2RjNzU2fENEQyA3NTYsCisJT1RicywgYW0sIGJ3LAorCU9Ua24jMTAsIGNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XlleWCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlUsCisJY3VwPVxFMSVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eWiwKKwlkbDE9XEVKJDw2Ki8+LCBlZD1eWCwgZWw9XlYsIGhvbWU9XlksIGlsMT1cRUwkPDYqLz4sIGluZD1eSiwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XlUsIGtjdXUxPV5aLCBrZGNoMT1cRUksCisJa2RsMT1cRUwsIGtlZD1eWCwga2VsPV5WLCBrZjA9XEVBLCBrZjE9XEVCLCBrZjI9XEVDLCBrZjM9XEVELAorCWtmND1cRUUsIGtmNT1cRUYsIGtmNj1cRUcsIGtmNz1cRUgsIGtmOD1cRWEsIGtmOT1cRWIsIGtob21lPV5ZLAorCWtodHM9Xk8sIGtpY2gxPVxFSywga2lsMT1cRUwsIGxmMD1GMSwgbGYxPUYyLCBsZjI9RjMsIGxmMz1GNCwKKwlsZjQ9RjUsIGxmNT1GNiwgbGY2PUY3LCBsZjc9RjgsIGxmOD1GOSwgbGY5PUYxMCwgbGw9XlleWiwKKwlyczE9XDAzMVwwMzBcMDAyXDAwM1wwMTcsCisjCisjIENEQyA3MjEgZnJvbSBSb2JlcnQgVmlkdXlhLCBHYS4gVGVjaC4gPGlobnA0IWdhdGVjaCFnaXRweXIhcm9iZXJ0PiB2aWEgQlJMLgorIworIyBQYXJ0IG9mIHRoZSBsb25nIGluaXRpYWxpemF0aW9uIHN0cmluZyBkZWZpbmVzIHRoZSAiRE9XTiIga2V5IHRvIHRoZSBsZWZ0CisjIG9mIHRoZSB0YWIga2V5IHRvIHNlbmQgYW4gRVNDLiAgVGhlIHJlYWwgRVNDIGtleSBpcyBwb3NpdGlvbmVkIHdheSBvdXQKKyMgaW4gcmlnaHQgZmllbGQuCisjCisjIFRoZSB0ZXJtY2FwIHdvbid0IHdvcmsgaW4gMTMyIGNvbHVtbiBtb2RlIGR1ZSB0byB0aGUgd2F5IGl0IGl0IG1vdmVzIHRoZQorIyBjdXJzb3IuICBUZXJtY2FwIGRvZXNuJ3QgaGF2ZSB0aGUgY2FwYWJpbGl0eSAoYXMgZmFyIGFzIEkgY291bGQgdGVsbCkgdG8KKyMgaGFuZGxlIHRoZSA3MjEgaW4gMTMyIGNvbHVtbiBtb2RlLgorIworIyAoY2RjNzIxOiBjaGFuZ2VkIDpyaTogdG8gOnNyOiAtLSBlc3IpCitjZGM3MjEtZXNjfENvbnRyb2wgRGF0YSA3MjEsCisJT1RicywgT1RwdCwgYW0sIGJ3LCBtc2dyLCB4b24sCisJT1RrbiMxMCwgY29scyM4MCwgaXQjOCwgbGluZXMjMzAsCisJYmVsPV5HLCBibGluaz1eTiwgY2J0PV5eXkssIGNsZWFyPV5MLCBjdWIxPV5ILCBjdWQxPV5aLAorCWN1ZjE9XlgsIGN1cD1cMDAyJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5XLAorCWRjaDE9Xl5OLCBkaW09XlwsIGRsMT1eXlEsIGVkPV5eUCwgZWw9XkssIGhvbWU9XlksIGh0cz1eXl5SVywKKwlpY2gxPV5eTywgaWwxPV5eUiwgaW5kPVwwMzZXID1cMDM2VSwgaW52aXM9Xl5eUlssCisJaXMyPVwwMzZcMDIyQlwwMDNcMDM2XDAzNVwwMTdcMDIyXDAyNVwwMzVcMDM2RVwwMzZcMDIySFwwMzZcMDIySlwwMzZcMDIyTFwwMzZcMDIyTlwwMzZcMDIyUFwwMzZcMDIyUVwwMzZcMDIyXDAzNlwwMjJcXlwwMzZcMDIyYlwwMzZcMDIyaVwwMzZXID1cMDM2XDAyMlpcMDM2XDAxMUMxLWAgYCFrL28sCisJa2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XlosIGtjdWYxPV5YLCBrY3V1MT1eVywga2YwPV5ecSwKKwlrZjE9Xl5yLCBrZjI9Xl5zLCBrZjM9Xl50LCBrZjQ9Xl51LCBrZjU9Xl52LCBrZjY9Xl53LCBrZjc9Xl54LAorCWtmOD1eXnksIGtmOT1eXnosIGtob21lPV5ZLCBsbD1eQiA9LCByZXY9Xl5ELAorCXJpPVwwMzZXID1cMDM2Viwgcm1pcj0sIHJta3g9Xl5eUmwsIHJtc289Xl5FLCBybXVsPV5dLAorCXNncjA9XDAxN1wwMjVcMDM1XDAzNkVcMDM2XDAyMlxcLCBzbWlyPSwgc21reD1eXl5SaywKKwlzbXNvPV5eRCwgc211bD1eXCwgdGJjPV5eXlJZLAorCisjIyMjIEdldHJvbmljcworIworIyBHZXRyb25pY3MgaXMgYSBEdXRjaCBlbGVjdHJvbmljcyBjb21wYW55IHRoYXQgYXQgb25lIHRpbWUgd2FzIGNhbGxlZAorIyBgR2V2ZWtlJyBhbmQgbWFkZSBhc3luYyB0ZXJtaW5hbHM7IGJ1dCAoYWNjb3JkaW5nIHRvIHRoZSBjb21wYW55IGl0c2VsZiEpCisjIHRoZXkndmUgbG9zdCBhbGwgdGhlaXIgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY29tbWFuZCBzZXQuICBUaGUgaGFyZHdhcmUKKyMgZG9jdW1lbnRhdGlvbiBzdWdnZXN0cyB0aGUgdGVybWluYWxzIHdlcmUgYWN0dWFsbHkgbWFudWZhY3R1cmVkIGJ5IGEKKyMgVGFpd2FuZXNlIGVsZWN0cm9uaWNzIGNvbXBhbnkgbmFtZWQgQ2FsLUNvbXAuICBUaGVyZSBhcmUga25vd24KKyMgdG8gaGF2ZSBiZWVuIGF0IGxlYXN0IHR3byBtb2RlbHMsIHRoZSAzMyBhbmQgdGhlIDUwLgorIworCisjIFRoZSA1MCBzZWVtcyB0byBiZSBhIHRvcCBlbmQgdnQyMjAgY2xvbmUsIHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgaGlnaGVyCisjIHNjcmVlbiByZXNvbHV0aW9uLCBhIGxhcmdlciBzY3JlZW4sIGF0IGxlYXN0IDEgcGFnZSBvZiBtZW1vcnkgYWJvdmUgYW5kCisjIGJlbG93IHRoZSBzY3JlZW4sIGFwcGFyZW50bHkgcGFnZXMgb2YgbWVtb3J5IHJpZ2h0IGFuZCBsZWZ0IG9mIHRoZSBzY3JlZW4KKyMgd2hpY2ggY2FuIGJlIHBhbm5lZCwgYW5kIGFib3V0IDc1IGZ1bmN0aW9uIGtleXMgKDE1IGZ1bmN0aW9uIGtleXMgeCBub3JtYWwsCisjIHNoaWZ0LCBjb250cm9sLCBmdW5jIEEsIGZ1bmMgQikuIEl0IGFsc28gaGFzIG1vcmUgc2V0dXAgcG9zc2liaWxpdGllcyB0aGFuCisjIHRoZSB2dDIyMC4gVGhlIG1vbml0b3IgY2FzZSBpcyBkYXRlZCBOb3ZlbWJlciAxOTc4IGFuZCB0aGUga2V5Ym9hcmQgY2FzZSBpcworIyBNYXkgMTk4Mi4KKyMKKyMgVGhlIHZ0MTAwIGVtdWxhdGlvbiB3b3JrcyBhcyBpcy4gIFRoZSBlbnRyeSBiZWxvdyBkZXNjcmliZXMgdGhlIHJhdGhlcgorIyBub24tY29uZm9ybWFudCAoYnV0IG1vcmUgZmVhdHVyZWZ1bCkgQU5TSSBtb2RlLgorIworIyBGcm9tOiBTdGVwaGVuIFBldGVyc29uIDxzdHZAdXRyZWNodC5vdy5ubD4sIDI3IE1heSAxOTk1Cit2aXNhNTB8Z2V2ZWtlIHZpc2EgNTAgdGVybWluYWwgaW4gYW5zaSA4MCBjaGFyYWN0ZXIgbW9kZSwKKwlidywgbWlyLCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWFjc2M9MF9hYWZmZ2doIGpqa2tsbG1tbm5vb3Fxc3N0dHV1dnZ3d3h4LCBiZWw9XkcsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbMkosIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFgsIGRjaDE9XEVbWCwgZGltPVxFWzJtLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGZsYXNoPVxFWz81aFxFWz81bCwgaG9tZT1cRVtILAorCWhwYT1cRVslaSVwMSVkRywgaHQ9XkksIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwKKwlpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosIGludmlzPVxFWzhtLAorCWlzMj1cRTA7Mm1cRVsxOzI1clxFWzI1OzFIXEVbPzNsXEVbPzdoXEVbPzhoLAorCWthMT1cRVtmLCBrYTM9XEVPUSwga2IyPVxFT1AsIGticz1eSCwga2MxPVxFT1IsIGtjMz1cRU9TLAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0EsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtkY2gxPVwxNzcsCisJa2RsMT1cRU9TLCBrZjA9XEUwMTAsIGtmMT1cRTAwMSwga2YxMD1cRTAxMSwga2YyPVxFMDAyLAorCWtmMz1cRTAwMywga2Y0PVxFMDA0LCBrZjU9XEUwMDUsIGtmNj1cRTAwNiwga2Y3PVxFMDA3LAorCWtmOD1cRTAwOCwga2Y5PVxFMDA5LCBraG9tZT1cRVtmLCBsZjI9QSBkZWxldGUgY2hhciwKKwlsZjM9QSBpbnNlcnQgbGluZSwgbGY0PUEgZGVsZXRlIGxpbmUsIGxmNT1BIGNsZWFyLAorCWxmNj1BIGNlIG9mL2NmIGduLCBsZjc9QSBwcmludCwgbGY4PUEgb24tbGluZSwKKwlsZjk9QSBmdW5jbDA9QSBzZW5kLCBuZWw9Xk1eSiwgcmV2PVxFWzdtLCBybWFjcz1cRVszbCwKKwlybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRT4sIHJtc289XEVbMDsybSwKKwlybXVsPVxFWzBtLCBzZ3IwPVxFWzA7Mm0sIHNtYWNzPVxFM2gsIHNtYW09XEU/N2gsCisJc21pcj1cRVs0aCwgc21reD1cRT0sIHNtc289XEVbMjs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXZwYT1cRVslaSVwMSVkZCwKKworIyMjIyBIdW1hbiBEZXNpZ25lZCBTeXN0ZW1zIChDb25jZXB0KQorIworIwlIdW1hbiBEZXNpZ25lZCBTeXN0ZW1zCisjCTQwMCBGZWhsZXkgRHJpdmUKKyMJS2luZyBvZiBQcnVzc2lhLCBQQSAxOTQwNgorIwlWb3g6ICg2MTApLTI3Ny04MzAwCisjCUZheDogKDYxMCktMjc1LTU3MzkKKyMJTmV0OiBzdXBwb3J0QGhkcy5jb20KKyMKKyMgSm9obiBNYXJ0aW4gPGpvaG5AaGRzLmNvbT4gaXMgdGhlaXIgdGVybWNhcCBleHBlcnQuICBUaGV5J3JlIG1vc3RseSBvdXQgb2YKKyMgdGhlIGNoYXJhY3Rlci10ZXJtaW5hbCBidXNpbmVzcyBub3cgKDE5OTUpIGFuZCBtYWtpbmcgWCB0ZXJtaW5hbHMuICBJbgorIyBwYXJ0aWN1bGFyLCB0aGUgd2hvbGUgYENvbmNlcHQnIGxpbmUgZGVzY3JpYmVkIGhlcmUgd2FzIGRpc2NvbnRpbnVlZCBsb25nCisjIGFnby4KKyMKKworIyBGcm9tOiA8dmF4MTM1IWhwaz4gIFNhdCBKdW4gMjcgMDc6NDE6MjAgMTk4MQorIyBFeHRlbnNpdmUgY2hhbmdlcyB0byBjMTA4IGJ5IGFycGF2YXg6ZXJpYyBGZWIgMTk4MgorIyBTb21lIHVua25vd24gcGVyc29uIGF0IFNDTyB0aGVuIHRyYW5zbGF0ZWQgaXQgdG8gdGVybWluZm8uCisjCisjIFRoZXJlIHNlZW0gdG8gYmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBDMTA4IFBST01TCisjICh3aXRoIGJ1ZyBmaXhlcyBpbiBpdHMgWi04MCBwcm9ncmFtKS4KKyMKKyMgVGhlIGZpcnN0IG9uZSB0aGF0IHdlIGhhZCB3b3VsZCBsb2NrIG91dCB0aGUga2V5Ym9hcmQgb2YgeW91CisjIHNlbnQgbG90cyBvZiBzaG9ydCBsaW5lcyAobGlrZSAvdXNyL2RpY3Qvd29yZHMpIGF0IDk2MDAgYmF1ZC4KKyMgVHJ5IHRoYXQgb24geW91ciBDMTA4IGFuZCBzZWUgaWYgaXQgc2VuZHMgYSBeUyB3aGVuIHlvdSB0eXBlIGl0LgorIyBJZiBzbywgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gb2YgdGhlIFBST01zLgorIworIyBZb3Ugc2hvdWxkIGNvbmZpZ3VyZSB0aGUgQzEwOCB0byBzZW5kIF5TL15RIGJlZm9yZSBydW5uaW5nIHRoaXMuCisjIEl0IGlzIG11Y2ggZmFzdGVyIChhdCA5NjAwIGJhdWQpIHRoYW4gdGhlIGMxMDAgYmVjYXVzZSB0aGUgZGVsYXlzCisjIGFyZSBub3QgZml4ZWQuCisjIG5ldyBzdGF0dXMgbGluZSBkaXNwbGF5IGVudHJpZXMgZm9yIGMxMDgtOHA6CisjIDxpczM+IC0gaW5pdCBzdHIgIzMgLSBzZXR1cCB0ZXJtIGZvciBzdGF0dXMgZGlzcGxheSAtCisjIHNldCBwcm9ncmFtbWVyIG1vZGUsIHNlbGVjdCB3aW5kb3cgMiwgZGVmaW5lIHdpbmRvdyBhdCBsYXN0CisjIGxpbmUgb2YgbWVtb3J5LCBzZXQgYmtnbmQgc3RhdCBtZXNnIHRoZXJlLCBzZWxlY3Qgd2luZG93IDAuCisjCisjIDx0c2w+IC0gdG8gc3RhdHVzIGxpbmUgLSBzZWxlY3Qgd2luZG93IDIsIGhvbWUgY3Vyc29yLCBlcmFzZSB0bworIyBlbmQtb2Ytd2luZG93LCAxLzIgYnJpZ2h0IG9uLCBnb3RvKGxpbmUjMCwgY29sIz8pCisjCisjIDxmc2w+IC0gZnJvbSBzdGF0dXMgbGluZSAtIDEvMiBicmlnaHQgb2ZmLCBzZWxlY3Qgd2luZG93IDAKKyMKKyMgPGRzbD4gLSBkaXNhYmxlIHN0YXR1cyBkaXNwbGF5IC0gc2V0IGJrZ25kIHN0YXR1cyBtZXNnIHdpdGgKKyMgaWxsZWdhbCB3aW5kb3cgIworIworIyBUaGVyZSBhcmUgcHJvYmFibHkgbW9yZSBmdW5jdGlvbiBrZXlzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGJ1dAorIyBJIGRvbid0IGtub3cgd2hhdCB0aGV5IGFyZS4KKyMKKyMgTm8gZGVsYXlzIG5lZWRlZCBvbiBjMTA4IGJlY2F1c2Ugb2YgXlMvXlEgaGFuZHNoYWtpbmcKKyMKK2MxMDh8Y29uY2VwdDEwOHxjMTA4LThwfGNvbmNlcHQxMDgtOHB8Y29uY2VwdCAxMDggdy84IHBhZ2VzLAorCWlzMz1cRVVcRSB6IlxFdlwwMDFcMTc3ICFwXEUgOyJcRSB6IFxFdiAgXDAwMVwxNzdwXEVwXG4sCisJcm1jdXA9XEV2ICBcMDAxXDE3N3BcRXBcclxuLCB1c2U9YzEwOC00cCwKK2MxMDgtNHB8Y29uY2VwdDEwOC00cHxjb25jZXB0IDEwOCB3LzQgcGFnZXMsCisJT1RicywgZXNsb2ssIGhzLCB4b24sCisJcGJALAorCWFjc2M9akVrVGxcXG1NcUx4VSwgY25vcm09XEV3LCBjcj1eTSwKKwljdXA9XEVhJXAxJT8lcDElezk1fSU+JXRcMDAxJXs5Nn0lLSU7JXszMn0lKyVjJXAyJT8lcDIlezk1fSU+JXRcMDAxJXs5Nn0lLSU7JXszMn0lKyVjLAorCWN2dmlzPVxFVywgZGNoMT1cRSAxJDwxNio+LCBkc2w9XEUgO1wxNzcsIGZzbD1cRWVcRSB6XHMsCisJaW5kPV5KLCBpczE9XEVLXEUhXEUgRiwKKwlpczM9XEVVXEUgeiJcRXZcMTc3ICFwXEUgOyJcRSB6IFxFdiAgXDAwMSBwXEVwXG4sCisJcm1hY3M9XEVqXHMsIHJtY3VwPVxFdiAgXDAwMSBwXEVwXHJcbiwgc21hY3M9XEVqISwKKwlzbWN1cD1cRVVcRXYgIDhwXEVwXHJcRVwwMjUsCisJdHNsPVxFIHoiXEU/XEVcMDA1XEVFXEVhICUrXHMsIHVzZT1jMTAwLAorYzEwOC1ydnxjMTA4LXJ2LThwfGNvbmNlcHQgMTA4IHcvOCBwYWdlcyBpbiByZXZlcnNlIHZpZGVvLAorCXJtY3VwPVxFdiAgXDAwMiBwXEVwXHJcbiwgc21jdXA9XEVVXEV2ICA4cFxFcFxyLAorCXVzZT1jMTA4LXJ2LTRwLAorYzEwOC1ydi00cHxjb25jZXB0MTA4cnY0cHxjb25jZXB0IDEwOCB3LzQgcGFnZXMgaW4gcmV2ZXJzZSB2aWRlbywKKwlmbGFzaD1cRUskPDIwMD5cRWssIGlzMT1cRWssIHJtc289XEVlLCBzbXNvPVxFRSwKKwl1c2U9YzEwOC00cCwKK2MxMDgtd3xjMTA4LXctOHB8Y29uY2VwdDEwOC13LTh8Y29uY2VwdDEwOC13OHB8Y29uY2VwdCAxMDggdy84IHBhZ2VzIGluIHdpZGUgbW9kZSwKKwljb2xzIzEzMiwKKwlpczE9XEUgRlxFIiwgcm1jdXA9XEV2ICBeQTBcMDAxRFxFcFxyXG4sCisJc21jdXA9XEVVXEV2ICA4XDAwMURcRXBcciwgdXNlPWMxMDgtOHAsCisKKyMgQ29uY2VwdCAxMDA6CisjIFRoZXNlIGhhdmUgb25seSB3aW5kb3cgcmVsYXRpdmUgY3Vyc29yIGFkZHJlc3NpbmcsIG5vdCBzY3JlZW4KKyMgcmVsYXRpdmUuIFRvIGdldCBpdCB0byB3b3JrIHJpZ2h0IGhlcmUsIHNtY3VwL3JtY3VwICh3aGljaAorIyB3ZXJlIGludmVudGVkIGZvciB0aGUgY29uY2VwdCkgbG9jayB5b3UgaW50byBhIG9uZSBwYWdlCisjIHdpbmRvdyBmb3Igc2NyZWVuIHN0eWxlIHByb2dyYW1zLgorIworIyBUbyBnZXQgb3V0IG9mIHRoZSBvbmUgcGFnZSB3aW5kb3csIHdlIHVzZSBhIGNsZXZlciB0cmljazoKKyMgd2Ugc2V0IHRoZSB3aW5kb3cgc2l6ZSB0byB6ZXJvICgiXEV2ICAgICIgaW4gcm1jdXApIHdoaWNoIHRoZQorIyB0ZXJtaW5hbCByZWNvZ25pemVzIGFzIGFuIGVycm9yIGFuZCByZXNldHMgdGhlIHdpbmRvdyB0byBhbGwKKyMgb2YgbWVtb3J5LgorIworIyBUaGlzIHRyaWNrIHdvcmtzIG9uIGMxMDAgYnV0IGRvZXMgbm90IG9uIGMxMDgsIHNpZ2guCisjCisjIFNvbWUgdHR5IGRyaXZlcnMgdXNlIGNyMyBmb3IgY29uY2VwdCwgb3RoZXJzIHVzZSBubDMsIGhlbmNlCisjIHRoZSBkZWxheXMgb24gY3IgYW5kIGluZCBiZWxvdy4gVGhpcyBwYWRkaW5nIGlzIG9ubHkgbmVlZGVkIGF0CisjIDk2MDAgYmF1ZCBhbmQgdXAuICBPbmUgb3IgdGhlIG90aGVyIGlzIGNvbW1lbnRlZCBvdXQgZGVwZW5kaW5nIG9uCisjIGxvY2FsIGNvbnZlbnRpb25zLgorIworIyAyIG1zIHBhZGRpbmcgb24gPHJtY3VwPiBpc24ndCBhbHdheXMgZW5vdWdoLiA2IHdvcmtzIGZpbmUuIE1heWJlCisjIGxlc3MgdGhhbiA2IGJ1dCBtb3JlIHRoYW4gMiB3aWxsIHdvcmsuCisjCisjIE5vdGU6IGNhbid0IHVzZSBmdW5jdGlvbiBrZXlzIGY3LWYxMCBiZWNhdXNlIHRoZXkgYXJlCisjIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYXJyb3cga2V5cyAoISksIGFsc28sIGRlbCBjaGFyIGFuZAorIyBjbGVhciBlb2wgdXNlIHhvbi94b2ZmIHNvIHRoZXkgcHJvYmFibHkgd29uJ3Qgd29yayB2ZXJ5IHdlbGwuCisjCisjIEFsc28gbm90ZSB0aGF0IHdlIGRvbid0IGRlZmluZSBpbnNydC9kZWwgY2hhci9kZWxsaW5lL2VvcC9zZW5kCisjIGJlY2F1c2UgdGhleSBkb24ndCB0cmFuc21pdCB1bmxlc3Mgd2UgcmVzZXQgdGhlbSAtIEkgZmlndXJlZAorIyBpdCB3YXMgYSBiYWQgaWRlYSB0byBjbG9iYmVyIHRoZWlyIGRlZmluaXRpb25zLgorIworIyBUaGUgPG1jNT4gc2VxdWVuY2UgY2hhbmdlcyB0aGUgZXNjYXBlIGNoYXJhY3RlciB0byBeXiBzbyB0aGF0CisjIGVzY2FwZXMgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcHJpbnRlci4gT25seSB0cm91YmxlCisjIGlzIHRoYXQgXl4gd29uJ3QgYmUgLSBeXiB3YXMgY2hvc2VuIHRvIGJlIHVubGlrZWx5LgorIyBVbmZvcnR1bmF0ZWx5LCBpZiB5b3UncmUgc2VuZGluZyByYXN0ZXIgYml0cyB0aHJvdWdoIHRvIGJlCisjIHBsb3R0ZWQsIGFueSBjaGFyYWN0ZXIgeW91IGNob29zZSB3aWxsIGJlIGxpa2VseSwgc28gd2UgbG9zZS4KKyMKKyMgXEVRIlxFWSheVyAoc2VuZCBhbnl0aGluZyBmcm9tIHByaW50ZXIgdG8gaG9zdCwgZm9yIHhvbi94b2ZmKQorIyBjYW5ub3QgYmUgIyBpbiBpczIgYmVjYXVzZSBpdCB3aWxsIGhhbmcgYSBjMTAwIHdpdGggbm8gcHJpbnRlcgorIyBpZiBzZW50IHR3aWNlLgorYzEwMHxjb25jZXB0MTAwfGNvbmNlcHR8YzEwNHxjMTAwLTRwfGhkcyBjb25jZXB0IDEwMCwKKwlPVGJzLCBhbSwgZW8sIG1pciwgdWwsIHhlbmwsCisJY29scyM4MCwgbGluZXMjMjQsIHBiIzk2MDAsIHZ0IzgsCisJYmVsPV5HLCBibGluaz1cRUMsIGNsZWFyPVxFP1xFXDAwNSQ8Mio+LCBjcj0kPDk+XHIsCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRT0sCisJY3VwPVxFYSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRTssCisJZGNoMT1cRVwwMjEkPDE2Kj4sIGRpbT1cRUUsIGRsMT1cRVwwMDIkPDMqPiwKKwllZD1cRVwwMDUkPDE2Kj4sIGVsPVxFXDAyNSQ8MTY+LCBmbGFzaD1cRWskPDIwMD5cRUssCisJaHQ9XDAxMSQ8OD4sIGlsMT1cRVwwMjIkPDMqPiwgaW5kPV5KLCBpbnZpcz1cRUgsIGlwPSQ8MTYqPiwKKwlpczE9XEVLLAorCWlzMj1cRVVcRWZcRTdcRTVcRThcRWxcRU5IXEVcMFxFbyZcMFxFbydcRVxFbyFcMFxFXDAwNyFcRVwwMTBBQCBcRTQjXDoiXEVcOmFcRTQjOyJcRVw6YlxFNCM8IlxFXDpjLAorCWlzMz1cRXYgICAgJDw2PlxFcFxuLCBrYnM9XkgsIGtjYnQ9XEUnLCBrY3RhYj1cRV8sCisJa2N1YjE9XEU+LCBrY3VkMT1cRTwsIGtjdWYxPVxFPSwga2N1dTE9XEU7LCBrZGNoMT1cRV5RLAorCWtkbDE9XEVeQiwga2VkPVxFXkMsIGtlbD1cRV5TLCBrZjE9XEU1LCBrZjI9XEU2LCBrZjM9XEU3LAorCWtmND1cRTgsIGtmNT1cRTksIGtmNj1cRVw6YSwga2Y3PVxFXDpiLCBrZjg9XEVcOmMsIGtob21lPVxFPywKKwlraHRzPVxFXSwga2ljaDE9XEVeUCwga2lsMT1cRV5SLCBraW5kPVxFWywga25wPVxFLSwga3BwPVxFLiwKKwlrcmk9XEVcXCwga3JtaXI9XEVcMCwgbWM0PVwwMzZvIFxFXEVRIVxFWVBcMDI3LAorCW1jNT1cRVEiXEVZKFwwMjdcRVlEXEVvIFwwMzYsIHByb3Q9XEVJLAorCXJlcD1cRXIlcDElYyVwMiV7MzJ9JSslYyQ8LjIqPiwgcmV2PVxFRCwKKwlybWN1cD1cRXYgICAgJDw2PlxFcFxyXG4sIHJtaXI9XEVcc1xzLCBybWt4PVxFeCwKKwlybXNvPVxFZCwgcm11bD1cRWcsIHNncjA9XEVOQCwKKwlzbWN1cD1cRVVcRXYgIDhwXEVwXHJcRVwwMjUkPDE2Piwgc21pcj1cRV5QLCBzbWt4PVxFWCwKKwlzbXNvPVxFRCwgc211bD1cRUcsCitjMTAwLXJ2fGMxMDAtcnYtNHB8Y29uY2VwdDEwMC1ydnxjMTAwIHJldiB2aWRlbywKKwljbm9ybUAsIGN2dmlzQCwgZmxhc2g9XEVLJDwyMDA+XEVrLCBpczE9XEVrLCBybXNvPVxFZSwKKwlzbXNvPVxFRSwgdXNlPWMxMDAsCitvYzEwMHxvY29uY2VwdHxjMTAwLTFwfG9sZCAxIHBhZ2UgY29uY2VwdCAxMDAsCisJaW4sCisJaXMzQCwgdXNlPWMxMDAsCisKKyMgRnJvbTogV2FsdGVyIFNrb3Jza2kgPHdhbHRAZ2VuZXRpY3MxLkpNUC5USlUuRURVPiwgMTYtb2N0LTE5OTYuCisjIExvdHMgb2Ygbm90ZXMsIG9yaWdpbmFsbHkgaW5saW5lLCBidXQgbmN1cnNlcyBkb2Vzbid0IGdyb2sgdGhhdC4KKyMKKyMgYW06IAlub3QgYXZhaWxhYmxlIGluIHBvd2VyIG9uIG1vZGUsIGJ1dCB0dXJuZWQgb24gd2l0aCBcRVs9MTA3OzIwN2ggaW4KKyMJaXMyPS4gIEFsc28sIFxFPTEyNGwgaW4gaXMyPSBjb3VsZCBoYXZlIGJlZW4gdXNlZCB0byBwcmV2ZW50IG5lZWRpbmcKKyMJdG8gc3BlY2lmeSB4ZW5sOiwgYnV0IHRoYXQgd291bGQgaGF2ZSByZW5kZXJlZCB0aGUgbGFzdCBzcGFjZSBvbiB0aGUKKyMJbGFzdCBsaW5lIHVzZWxlc3MuCisjIGJ3OglOb3QgYXZhaWxhYmxlIGluIHBvd2VyIG9uIG1vZGUsIGJ1dCB0dXJuZWQgb24gd2l0aCBcRVs9MTA3OzIwN2ggaW4KKyMJaXMyPS4KKyMgY2xlYXI6IENvdWxkIGJlIGRvbmUgd2l0aCBcRVsySiBhbG9uZSwgZXhjZXB0IHRoYXQgdmkgKGFuZCBwcm9iYWJseSBtb3N0CisjCW90aGVyIHByb2dyYW1zKSBhc3N1bWUgdGhhdCB0aGlzIGFsc28gaG9tZXMgdGhlIGN1cnNvci4KKyMgZHNsOglHbyB0byB3aW5kb3cgMiwgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSwgdXNlIGEgbGluZSBmZWVkIHRvCisjCXNjcm9sbCB0aGUgd2luZG93LCBhbmQgZ28gYmFjayB0byB3aW5kb3cgMS4KKyMgaXMyOgl0aGUgc3RyaW5nIG1heSBjYXVzZSBhIHdhcm5pbmcgdG8gYmUgaXNzdWVkIGJ5IHRpYyB0aGF0IGl0CisjCWZvdW5kIGEgdmVyeSBsb25nIGxpbmUgYW5kIHRoYXQgaXQgc3VzcGVjdHMgdGhhdCBhIGNvbW1hIGlzIG1pc3NpbmcKKyMJc29tZXdoZXJlLiAgVGhpcyB3YXJuaW5nIGNhbiBiZSBpZ25vcmVkICh1bmxlc3MgaXQgY29tZXMgdXAgbW9yZSB0aGFuCisjCW9uY2UpLiAgVGhlIGluaXRpYWxpemF0aW9uIHN0cmluZyBjb250YWlucyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorIworIwkgW1NldHVwIG1vZGUgaXRlbXMgY2hhbmdlZCBmcm9tIGZhY3RvcnkgZGVmYXVsdHM6XQorIwkJXEUpMAkJCXNldCBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCB0bworIwkJCQkJCWdyYXBoaWNzCisjCQleTwkJCXNldCBjaGFyYWN0ZXIgc2V0IHRvIGRlZmF1bHQKKyMJIFtJbiBjYXNlIGl0IHdhc24ndF0KKyMJCVxFW20JCQl0dXJuIG9mZiBhbGwgYXR0cmlidXRlcworIwkgW0luIGNhc2UgdGhleSB3ZXJlbid0IG9mZl0KKyMJCVxFWz0xMDc7CQljdXJzb3Igd3JhcCBhbmQKKyMJCQkyMDdoCQkJY2hhcmFjdGVyIHdyYXAgb24KKyMJCVxFWzkwOzN1CQlzZXQgRmtleSBkZWZpbml0aW9ucyB0byAidHJhbnNtaXQiCisjCQkJCQkJZGVmYXVsdHMKKyMJCVxFWzkyOzN1CQlzZXQgY3Vyc29yIGtleSBkZWZpbml0aW9ucyB0bworIwkJCQkJCSJ0cmFuc21pdCIgZGVmYXVsdHMKKyMJCVxFWzQzOzF1CQlzZXQgc2hpZnQgRjEzIHRvIHRyYW5zbWl0Li4uCisjCQlcMTc3XEUkUFwxNzcKKyMJCVxFWzQ0OzF1CQlzZXQgc2hpZnQgRjE0IHRvIHRyYW5zbWl0Li4uCisjCQkJXDE3N1xFJFFcMTc3CisjCQlcRVs0NTsxdQkJc2V0IHNoaWZ0IEYxNSB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSRSXDE3NworIwkJXEVbNDY7MXUJCXNldCBzaGlmdCBGMTYgdG8gdHJhbnNtaXQuLi4KKyMJCQlcMTc3XEUkU1wxNzcKKyMJCVxFWzIwMDsxdQkJc2V0IHNoaWZ0IHVwIHRvIHRyYW5zbWl0Li4uCisjCQkJXDE3N1xFJEFcMTc3CisjCQlcRVsyMDE7MXUJCXNldCBzaGlmdCBkb3duIHRvIHRyYW5zbWl0Li4uCisjCQkJXDE3N1xFJEJcMTc3CisjCQlcRVsyMDI7MXUJCXNldCBzaGlmdCByaWdodCB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSRDXDE3NworIwkJXEVbMjAzOzF1CQlzZXQgc2hpZnQgbGVmdCB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSREXDE3NworIwkJXEVbMjA0OzF1CQlzZXQgc2hpZnQgaG9tZSB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSRIXDE3NworIwkJXEVbMjEyOzF1CQlzZXQgYmFja3RhYiB0byB0cmFuc21pdC4uLgorIwkJCVwxNzdcRSRJXDE3NworIwkJXEVbMjEzOzF1CQlzZXQgc2hpZnQgYmFja3NwYWNlIHRvIHRyYW5zbWl0Li4uCisjCQkJXDE3N1xFJF5IXDE3NworIwkJXEVbMjE0OzF1CQlzZXQgc2hpZnQgZGVsIHRvIHRyYW5zbWl0Li4uCisjCQkJIlxFJFwxNzciCisjCSBbTmVjZXNzYXJ5IGl0ZW1zIG5vdCBtZW50aW9uZWQgaW4gc2V0dXAgbW9kZTpdCisjCQlcRVsyIXcJCQltb3ZlIHRvIHdpbmRvdyAyCisjCQlcRVsyNTsyNXcJCWRlZmluZSB3aW5kb3cgYXMgbGluZSAyNSBvZiBtZW1vcnkKKyMJCVxFWyF3CQkJbW92ZSB0byB3aW5kb3cgMQorIwkJXEVbMip3CQkJc2hvdyBjdXJyZW50IGxpbmUgb2Ygd2luZG93IDIgYXMKKyMJCQkJCQlzdGF0dXMgbGluZQorIwkJXEVbMit4CQkJc2V0IG1ldGEga2V5IHRvIHVzZSBoaWdoIGJpdAorIwkJXEVbOzMrfQkJCW1vdmUgdW5kZXJsaW5lIHRvIGJvdHRvbSBvZiBjaGFyYWN0ZXIKKyMKKyMJQWxsIEZrZXlzIGFyZSBzZXQgdG8gdGhlaXIgZGVmYXVsdCB0cmFuc21pdCBkZWZpbml0aW9ucyB3aXRoIFxFWzkwOzN1CisjCWluIGlzMj0uICBJTVBPUlRBTlQ6ICB0byB1c2UgdGhpcyB0ZXJtaW5hbCBkZWZpbml0aW9uLCB0aGUgInF1aXQiIHN0dHkKKyMJc2V0dGluZyBNVVNUIGJlIHJlZGVmaW5lZCBvciBkZWFjdGl2YXRlZCwgYmVjYXVzZSB0aGUgZGVmYXVsdCBpcworIwljb250YWluZWQgaW4gYWxtb3N0IGFsbCBvZiB0aGlzIHRlcm1pbmFsJ3MgRmtleSBzdHJpbmdzISAgSWYgZm9yIHNvbWUKKyMJcmVhc29uICJxdWl0IiBjYW5ub3QgYmUgYWx0ZXJlZCwgdGhlIEZrZXlzIGNhbiwgYnV0IGl0IHdvdWxkIGJlCisjCW5lY2Vzc2FyeSB0byBjaGFuZ2UgXnwgdG8gXl0gaW4gYWxsIG9mIHRoZXNlIGRlZmluaXRpb25zLCBhbmQgYWRkCisjCVxFWzI7MDI5IXQgdG8gaXMyLgorIyBsaW5lczogaXMgc2V0IHRvIDI0IGJlY2F1c2UgdGhpcyB0ZXJtaW5hbCByZWZ1c2VzIHRvIHRyZWF0IHRoZSAyNXRoCisjCWxpbmUgbm9ybWFsbHkuCisjIGxsOglOb3QgYXZhaWxhYmxlIGluIHBvd2VyIG9uIG1vZGUsIGJ1dCB0dXJuZWQgb24gd2l0aCBcRVs9MTA3OzIwN2ggaW4KKyMJaXMyPS4KKyMgbG06CVBvaW50bGVzcywgZ2l2ZW4gdGhhdCB0aGlzIGRlZmluaXRpb24gbG9ja3MgYSBzaW5nbGUgc2NyZWVuIG9mCisjCW1lbW9yeSBpbnRvIHZpZXcsIGJ1dCB3aGF0IHRoZSBoZXkuLi4KKyMgcm1zbzogQ291bGQgdXNlIFxFWzE7NyF7IHRvIHR1cm4gb2ZmIG9ubHkgYm9sZCBhbmQgcmV2ZXJzZSAobGVhdmluZyBhbnkKKyMJb3RoZXIgYXR0cmlidXRlcyBhbG9uZSksIGJ1dCBzb21lIHByb2dyYW1zIGV4cGVjdCB0aGlzIHRvIHR1cm4gb2ZmCisjCWV2ZXJ5dGhpbmcuCisjIHJtdWw6IENvdWxkIHVzZSBcRVs0IXsgdG8gdHVybiBvZmYgb25seSB1bmRlcmxpbmUgKGxlYXZpbmcgYW55IG90aGVyCisjCWF0dHJpYnV0ZXMgYWxvbmUpLCBidXQgc29tZSBwcm9ncmFtcyBleHBlY3QgdGhpcyB0byB0dXJuIG9mZgorIwlldmVyeXRoaW5nLgorIyBzZ3I6CUF0dHJpYnV0ZXMgYXJlIHNldCBvbiB0aGlzIHRlcm1pbmFsIHdpdGggdGhlIHN0cmluZyBcRVsgZm9sbG93ZWQgYnkKKyMJYSBsaXN0IG9mIGF0dHJpYnV0ZSBjb2RlIG51bWJlcnMgKGluIGRlY2ltYWwsIHNlcGFyYXRlZCBieQorIwlzZW1pY29sb25zKSwgZm9sbG93ZWQgYnkgdGhlIGNoYXJhY3RlciBtLiAgVGhlIGF0dHJpYnV0ZSBjb2RlCisjCW51bWJlcnMgYXJlOgorIwkJICAxIGZvciBib2xkOworIwkJICAyIGZvciBkaW0gKHdoaWNoIGlzIGlnbm9yZWQgaW4gcG93ZXIgb24gbW9kZSk7CisjCQkgIDQgZm9yIHVuZGVybGluZTsKKyMJCSAgNSBmb3IgYmxpbmtpbmc7CisjCQkgIDcgZm9yIGludmVyc2U7CisjCQkgIDggZm9yIG5vdCBkaXNwbGF5YWJsZTsgYW5kCisjCQk9OTkgZm9yIHByb3RlY3RlZCAoZXhjZXB0IHRoYXQgdGhlcmUgYXJlIHN0cmFuZ2Ugc2lkZQorIwkJZWZmZWN0cyB0byBwcm90ZWN0ZWQgY2hhcmFjdGVycyB3aGljaCBtYWtlIHRoZW0gaW5hZHZpc2FibGUpLgorIwkgVGhlIG1hcHBpbmcgb2YgdGVybWluZm8gcGFyYW1ldGVycyB0byBhdHRyaWJ1dGVzIGlzIGFzIGZvbGxvd3M6CisjCQklcDEgKHN0YW5kb3V0KSA9IGJvbGQgYW5kIGludmVyc2UgdG9nZXRoZXI7CisjCQklcDIgKHVuZGVybGluZSkgPSB1bmRlcmxpbmU7CisjCQklcDMgKHJldmVyc2UpID0gaW52ZXJzZTsKKyMJCSVwNCAoYmxpbmspID0gYmxpbmtpbmc7CisjCQklcDUgKGRpbSkgaXMgaWdub3JlZDsKKyMJCSVwNiAoYm9sZCkgPSBib2xkOworIwkJJXA3IChpbnZpc2libGUpID0gbm90IGRpc3BsYXlhYmxlOworIwkJJXA4IChwcm90ZWN0ZWQpIGlzIGlnbm9yZWQ7IGFuZAorIwkJJXA5IChhbHQgY2hhciBzZXQpID0gYWx0IGNoYXIgc2V0LgorIwkgVGhlIGNvZGUgdG8gZG8gdGhpcyBpczoKKyMJCVxFWzAJCU9VVFBVVAlcRVswCisjCQklPyVwMSVwNiVPCUlGCShzdGFuZG91dDsgYm9sZCkgT1IKKyMJCSV0OzEJCVRIRU4JT1VUUFVUCTsxCisjCQklOwkJRU5ESUYKKyMJCSU/JXAyCQlJRgl1bmRlcmxpbmUKKyMJCSV0OzQJCVRIRU4JT1VUUFVUCTs0CisjCQklOwkJRU5ESUYKKyMJCSU/JXA0CQlJRglibGluaworIwkJJXQ7NQkJVEhFTglPVVRQVVQJOzUKKyMJCSU7CQlFTkRJRgorIwkJJT8lcDElcDMlTwlJRgkoc3RhbmRvdXQ7IHJldmVyc2UpIE9SCisjCQkldDs3CQlUSEVOCU9VVFBVVAk7NworIwkJJTsJCUVORElGCisjCQklPyVwNwkJSUYJaW52aXNpYmxlCisjCQkldDs4CQlUSEVOCU9VVFBVVAk7OAorIwkJJTsJCUVORElGCisjCQltCQlPVVRQVVQJbQorIwkJJT8lcDkJCUlGCWFsdGNoYXJzZXQKKyMJCSV0Xk4JCVRIRU4JT1VUUFVUCV5OCisjCQklZV5PCQlFTFNFCU9VVFBVVAleTworIwkJJTsJCUVORElGCisjIHNncjA6IEV2ZXJ5dGhpbmcgaXMgdHVybmVkIG9mZiAoaW5jbHVkaW5nIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0KSwgc2luY2UKKyMJdGhlcmUgaXMgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCBpdCBpcyB0aGF0IHRoZSBwcm9ncmFtIHdhbnRzIHR1cm5lZAorIwlvZmYuCisjIHNtdWw6IFRoZSAidW5kZXJsaW5lIiBhdHRyaWJ1dGUgaXMgcmVjb25maWd1cmFibGUgdG8gYW4gb3ZlcmxpbmUgb3IKKyMJc3RyaWtldGhydSwgb3IgKGFzIGRvbmUgd2l0aCBcRVs7Myt9IGluIGlzMj0pLCB0byBhIGxpbmUgYXQgdGhlIHRydWUKKyMJYm90dG9tIG9mIHRoZSBjaGFyYWN0ZXIgY2VsbC4gIFRoaXMgd2FzIGRvbmUgdG8gYWxsb3cgZm9yIG1vcmUgcmVhZGFibGUKKyMJdW5kZXJsaW5lZCBjaGFyYWN0ZXJzLCBhbmQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuCisjCXVuZGVybGluZWQgc3BhY2UsIGFuIHVuZGVyc2NvcmUsIGFuZCBhbiB1bmRlcmxpbmVkIHVuZGVyc2NvcmUuCisjIHhlbmw6IFRlcm1pbmFsIGNhbiBiZSBjb25maWd1cmVkIHRvIG5vdCBuZWVkIHRoaXMsIGJ1dCB0aGlzICJnbGl0Y2giCisjCWJlaGF2aW9yIGlzIGFjdHVhbGx5IHByZWZlcmFibGUgd2l0aCBhdXRvd3JhcCB0ZXJtaW5hbHMuCisjCisjIFBhcmFtZXRlcnMga2YzMT0gdGhydSBrZjUzPSBhY3R1YWxseSBjb250YWluIHRoZSBzdHJpbmdzIHNlbnQgYnkgdGhlIHNoaWZ0ZWQKKyMgRmtleXMuICBUaGVyZSBhcmUgbm8gcGFyYW1ldGVycyBmb3Igc2hpZnRlZCBGa2V5cyBpbiB0ZXJtaW5mby4gIFRoZSBpczIKKyMgc3RyaW5nIG1vZGlmaWVzIHRoZSAnTycgaW4ga2Y0MyB0byBrZjQ2IHRvIGEgJyQnLgorIworIyBrY2J0IHdhcyBvcmlnaW5hbGx5IF5JIGJ1dCByZWRlZmluZWQgaW4gaXMyPS4KKyMga0hPTSB3YXMgXEVbSCBvcmlnaW5hbGx5IGJ1dCByZWRlZmluZWQgaW4gaXMyPSwgYXMgd2VyZSBhIG51bWJlciBvZgorIyBvdGhlciBrZXlzLgorIyBrREMgd2FzIG9yaWdpbmFsbHkgXDE3NyBidXQgcmVkZWZpbmVkIGluIGlzMj0uCisjCisjIGticzoJU2hpZnQgd2FzIGFsc28gXkggb3JpZ2luYWxseSBidXQgcmVkZWZpbmVkIGFzIFxFJF5IIGluIGlzMj0uCisjIHRzbDoJR28gdG8gd2luZG93IDIsIHRoZW4gZG8gYW4gaHBhPS4KKyMKKyMtLS0tLS0tIGZsYXNoPVxFWzg7MyF9XkdcRVszOzMhfQorIy0tLS0tLS0gZmxhc2g9XEVbPzVoJDwxMDA+XEVbPzVsCisjIFRoZXJlIGFyZSB0d28gd2F5cyB0byBmbGFzaCB0aGUgc2NyZWVuLCBib3RoIG9mIHdoaWNoIGhhdmUgdGhlaXIgZHJhd2JhY2tzLgorIyBUaGUgZmlyc3QgaXMgdG8gc2V0IHRoZSBiZWxsIG1vZGUgdG8gdmlkZW8sIHRyYW5zbWl0IGEgYmVsbCBjaGFyYWN0ZXIsIGFuZAorIyBzZXQgdGhlIGJlbGwgbW9kZSBiYWNrIC0gYnV0IHRvIHdoYXQ/ICBUaGVyZSBpcyBubyB3YXkgb2Yga25vd2luZyB3aGF0IHRoZQorIyB1c2VyJ3Mgb2xkIGJlbGwgc2V0dGluZyB3YXMgYmVmb3JlIHdlIG1lc3NlZCB3aXRoIGl0LiAgV29yc2UsIHRoZSBjb21tYW5kIHRvCisjIHNldCB0aGUgYmVsbCBtb2RlIGFsc28gc2V0cyB0aGUga2V5IGNsaWNrIHZvbHVtZSwgYW5kIHRoZXJlIGlzIG5vIHdheSB0byBzYXkKKyMgImxlYXZlIHRoYXQgYWxvbmUiLCBvciB0byBrbm93IHdoYXQgaXQncyBzZXQgdG8sIGVpdGhlci4KKyMgVGhlIHNlY29uZCB3YXkgdG8gZG8gYSBmbGFzaCBpcyB0byBzZXQgdGhlIHNjcmVlbiB0byBpbnZlcnNlIHZpZGVvLCBwYWQgZm9yIGEKKyMgdGVudGggb2YgYSBzZWNvbmQsIGFuZCBzZXQgaXQgYmFjayAtIGJ1dCBsaWtlIGJlZm9yZSwgdGhlcmUncyBubyB3YXkgdG8ga25vdworIyB0aGF0IHRoZSBzY3JlZW4gd2Fzbid0IEFMUkVBRFkgaW4gaW52ZXJzZSB2aWRlbywgb3IgdGhhdCB0aGUgdXNlciBtYXkgcHJlZmVyCisjIGl0IHRoYXQgd2F5LiAgVGhlIHBvaW50IGlzIG1vb3QgYW55d2F5LCBzaW5jZSB2aSAoYW5kIHByb2JhYmx5IG90aGVyCisjIHByb2dyYW1zKSBhc3N1bWUgdGhhdCBieSBkZWZpbmluZyBmbGFzaD0sIHlvdSB3YW50IHRoZSBjb21wdXRlciB0byB1c2UgaXQKKyMgSU5TVEVBRCBvZiBiZWw9LCByYXRoZXIgdGhhbiBhcyBhIHNlY29uZGFyeSB0eXBlIG9mIHNpZ25hbC4KKyMKKyMtLS0tLS0tIGN2dmlzPVxFWyt7CisjIFRoZSBpcyB0aGUgcG93ZXIgb24gc2V0dGluZywgd2hpY2ggaXMgYWxzbyBhcyB2aXNpYmxlIGFzIHRoZSBjdXJzb3IKKyMgZ2V0cy4KKyMtLS0tLS0tICB3aW5kPVxFWyVpJXAxJWQ7JXAyJWQ7JXAzJXsxfSUrJWQ7JXA0JXsxfSUrJWR3CisjIFdpbmRvd2luZyBpcyBwb3NzaWJsZSwgYnV0IG5vdCBkZWZpbmVkIGhlcmUgYmVjYXVzZSBpdCBpcyBhbHNvIHVzZWQgdG8KKyMgZW11bGF0ZSBzdGF0dXMgbGluZSBmdW5jdGlvbnMuICBBbGxvd2luZyBhIHByb2dyYW0gdG8gc2V0IGEgd2luZG93IGNvdWxkCisjIGNsb2JiZXIgdGhlIHN0YXR1cyBsaW5lIG9yIHJlbmRlciBpdCB1bnVzYWJsZS4gIFRoZXJlIGlzIGFkZGl0aW9uYWwgbWVtb3J5LAorIyBidXQgc2NyZWVuIHNjcm9sbCBmdW5jdGlvbnMgYXJlIGRlc3RydWN0aXZlIGFuZCBkbyBub3QgbWFrZSB1c2Ugb2YgaXQuCisjCisjLS0tLS0tLSAgIGRpbT0JCQlOb3QgYXZhaWxhYmxlIGluIHBvd2VyIG9uIG1vZGUuCisjIFlvdSBoYXZlIGEgY2hvaWNlIG9mIGRlZmluaW5nIGxvdyBpbnRlbnNpdHkgY2hhcmFjdGVycyBhcyAiaGFsZiBicmlnaHQiIGFuZAorIyBoaWdoIGludGVuc2l0eSBhcyAibm9ybWFsIiwgb3IgZGVmaW5pbmcgbG93IGFzICJub3JtYWwiIGFuZCBoaWdoIGFzICJib2xkIi4KKyMgTm8gbWF0dGVyIHdoaWNoIHlvdSBjaG9vc2UsIG9ubHkgb25lIG9mIGVpdGhlciAiaGFsZiBicmlnaHQiIG9yICJib2xkIiBpcworIyBhdmFpbGFibGUgYXQgYW55IHRpbWUsIHNvIHRha2luZyB0aGUgdGltZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpcworIyBwb2ludGxlc3MuCisjCisjLS0tLS0tLSAgcHJvdD1cRVs9MDs5OW0KKyMgTm90IGRlZmluZWQsIGJlY2F1c2UgaXQgYXBwZWFycyB0byBoYXZlIHNvbWUgc3RyYW5nZSBzaWRlIGVmZmVjdHMuCisjLS0tLS0tLSBwZmtleT0lPyVwMSV7MjR9JTwlcDElezMwfSU+JXAxJXs1NH0lPCVBJU8ldFxFWyVwMSVkdVwxNzclcDIlc1wxNzclOworIy0tLS0tLS0gcGZsb2M9JT8lcDElezI0fSU8JXAxJXszMH0lPiVwMSV7NTR9JTwlQSVPJXRcRVslcDElZHVcMTc3JXAyJXNcMTc3JTsKKyMtLS0tLS0tICAgcGZ4PSU/JXAxJXsyNH0lPCVwMSV7MzB9JT4lcDElezU0fSU8JUElTyV0XEVbJXAxJWQ7MXVcMTc3JXAyJXNcMTc3JTsKKyMJIEF2YWlsYWJsZSwgYnV0IG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBwcm9ncmFtcyBpcyBpbmFkdmlzYWJsZS4KKyMJIFRoZSBjb2RlIHRvIGRvIHRoaXMgaXM6CisjCQklPyVwMSV7MjR9JTwJSUYJKChrZXk7IDI0KSA8OworIwkJJXAxJXszMH0lPgkJICgoa2V5OyAzMCkgPjsKKyMJCSVwMSV7NTR9JTwJCSAgKGtleTsgNTQpIDwKKyMJCSVBCQkJICkgQU5ECisjCQklTwkJICAJKSBPUgorIwkgW3RoYXQgaXMsICJJRiBrZXkgPCAyNCBPUiAoa2V5ID4gMzAgQU5EIGtleSA8IDU0KSIsXQorIwkJJXRcRVsJCVRIRU4JT1VUUFVUCVxFWworIwkJJXAxJWQJCQlPVVRQVVQJKGtleSkgYXMgZGVjaW1hbAorIwkgW25leHQgbGluZSBhcHBsaWVzIHRvIHBmeCBvbmx5XQorIwkJOzEJCQlPVVRQVVQJOzEKKyMJCXUJCQlPVVRQVVQJdQorIwkJXDE3NwkJCU9VVFBVVAlcMTc3CisjCQklcDIlcwkJCU9VVFBVVAkoc3RyaW5nKSBhcyBzdHJpbmcKKyMJCVwxNzcJCQlPVVRQVVQJXDE3NworIwkgW0RFTCBjaG9zZW4gYXMgZGVsaW1pdGVyLCBidXQgY291bGQgYmUgYW55IGNoYXJhY3Rlcl0KKyMJIFtpbXBsaWVkOgkJRUxTRQlkbyBub3RoaW5nXQorIwkJJTsJCUVORElGCisjCisjLS0tLS0tLSAgIHJzMj0KKyMgTm90IGRlZmluZWQgc2luY2UgYW55dGhpbmcgaXQgbWlnaHQgZG8gY291bGQgYmUgZG9uZSBmYXN0ZXIgYW5kIGVhc2llciB3aXRoCisjIGVpdGhlciBNZXRhLVNoaWZ0LVJlc2V0IG9yIHRoZSBtYWluIHBvd2VyIHN3aXRjaC4KKyMKKyMtLS0tLS0tICBzbWt4PVxFWzEhegorIy0tLS0tLS0gIHJta3g9XEVbIXoKKyMgVGhlc2Ugc2VxdWVuY2VzIGFwcGx5IHRvIHRoZSBjdXJzb3IgYW5kIHNldHVwIGtleXMgb25seSwgbm90IHRvIHRoZQorIyBudW1lcmljIGtleXBhZC4gIEJ1dCBpdCBkb2Vzbid0IG1hdHRlciBhbnl3YXksIHNpbmNlIG1ha2luZyB0aGVzZQorIyBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgaXMgaW5hZHZpc2FibGUuCisjIEZvciB0aGUga2V5IGRlZmluaXRpb25zIGJlbG93LCBhbGwgc2VxdWVuY2VzIGJlZ2lubmluZyB3aXRoIFxFJCBhcmUKKyMgY3VzdG9tIGFuZCBwcm9ncmFtbWVkIGludG8gdGhlIHRlcm1pbmFsIHZpYSBpczIuICBcRSQgYWxzbyBoYXMgbm8KKyMgbWVhbmluZyB0byBhbnkgb3RoZXIgdGVybWluYWwuCisjCisjLS0tLS0tLSBjbWRjaD1cRVs7JXAxJWQhdAorIyBBdmFpbGFibGUsIGJ1dCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIHByb2dyYW1zIGlzIGluYWR2aXNhYmxlLgorIy0tLS0tLS0gc214b249XEVbMSpxCisjIEF2YWlsYWJsZSwgYnV0IG1ha2luZyBpdCBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgaXMgaW5hZHZpc2FibGUuCisjIFRlcm1pbmFsIHdpbGwgc2VuZCBYT04vWE9GRiBvbiBidWZmZXIgb3ZlcmZsb3cuCisjLS0tLS0tLSBybXhvbj1cRVsqcQorIyBBdmFpbGFibGUsIGJ1dCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIHByb2dyYW1zIGlzIGluYWR2aXNhYmxlLgorIyBUZXJtaW5hbCB3aWxsIG5vdCBub3RpZnkgb24gYnVmZmVyIG92ZXJmbG93LgorIy0tLS0tLS0gICBzbW09XEVbMit4CisjLS0tLS0tLSAgIHJtbT1cRVsreAorIyBBdmFpbGFibGUsIGJ1dCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgaXMgaW5hZHZpc2FibGUuCisjCisjIFByaW50aW5nOgorIwkgSXQncyBub3QgbWFkZSBjbGVhciBpbiB0aGUgbWFudWFscywgYnV0IGJhc2VkIG9uIG90aGVyIGFuc2kvdnQgdHlwZQorIwkgdGVybWluYWxzLCBpdCdzIGEgZ29vZCBndWVzcyB0aGF0IHRoaXMgdGVybWluYWwgaXMgY2FwYWJsZSBvZiBib3RoCisjCSAidHJhbnNwYXJlbnQgcHJpbnQiICh3aGljaCBkb2Vzbid0IGNvcHkgZGF0YSB0byB0aGUgc2NyZWVuLCBhbmQKKyMJIHRoZXJlZm9yZSBuZWVkcyBtYzVpOiBzcGVjaWZpZWQgdG8gc2F5IHNvKSBhbmQgImF1eGlsbGlhcnkgcHJpbnQiCisjCSAod2hpY2ggZG9lcyBkdXBsaWNhdGUgcHJpbnRlZCBkYXRhIG9uIHRoZSBzY3JlZW4sIGluIHdoaWNoIGNhc2UgbWM0PQorIwkgYW5kIG1jNT0gc2hvdWxkIHVzZSB0aGUgXEVbPzRpIGFuZCBcRVs/NWkgc3RyaW5ncyBpbnN0ZWFkKS4KKworaGRzMjAwfEh1bWFuIERlc2lnbmVkIFN5c3RlbXMgSERTMjAwLAorCWFtLCBidywgZXNsb2ssIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIGxtIzAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3Fxc3N0dHV1dnZ3d3h4fn4sIGJlbD1eRywKKwlibGluaz1cRVswOzVtLCBib2xkPVxFWzA7MW0sIGNidD1cRVtaLCBjaXZpcz1cRVs2K3ssCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFWyt7LCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZHNsPVxFWzIhd1xyXG5cRVshdywgZWQ9XEVbSiwgZWw9XEVbSywgZWwxPVxFWzFLLAorCWZzbD1cRVshdywgaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsCisJaW52aXM9XEVbMDs4bSwKKwlpczI9XEUpMFwwMTdcRVttXEVbPTEwNzsyMDdoXEVbOTA7M3VcRVs5MjszdVxFWzQzOzF1XDE3N1xFJFBcMTc3XEVbNDQ7MXVcMTc3XEUkUVwxNzdcRVs0NTsxdVwxNzdcRSRSXDE3N1xFWzQ2OzF1XDE3N1xFJFNcMTc3XEVbMjAwOzF1XDE3N1xFJEFcMTc3XEVbMjAxOzF1XDE3N1xFJEJcMTc3XEVbMjAyOzF1XDE3N1xFJENcMTc3XEVbMjAzOzF1XDE3N1xFJERcMTc3XEVbMjA0OzF1XDE3N1xFJEhcMTc3XEVbMjEyOzF1XDE3N1xFJElcMTc3XEVbMjEzOzF1XDE3N1xFJFwwMTBcMTc3XEVbMjE0OzF1IlxFJFwxNzciXEVbMiF3XEVbMjU7MjV3XEVbIXdcRVsyKndcRVsyK3hcRVs7Myt9LAorCWtEQz1cRSRcMTc3LCBrSE9NPVxFJEgsIGtMRlQ9XEUkRCwga1JJVD1cRSRDLCBrYnM9XkgsCisJa2NidD1cRSRJLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVwxNzcsIGtlbnQ9Xk0sIGtmMT1eXDAwMVxyLCBrZjEwPV5cMDEwXHIsCisJa2YxMT1eXDAxMVxyLCBrZjEyPV5cMDEyXHIsIGtmMTM9XEVPUCwga2YxND1cRU9RLAorCWtmMTU9XEVPUiwga2YxNj1cRU9TLCBrZjE3PV5cMDE3XHIsIGtmMTg9XlwwMThcciwKKwlrZjE5PV5cMDE5XHIsIGtmMj1eXDAwMlxyLCBrZjIwPV5cMDIwXHIsIGtmMjE9XlwwMjFcciwKKwlrZjIyPV5cMDIyXHIsIGtmMjM9XlwwMjNcciwga2YzPV5cMDAzXHIsIGtmMzE9XlwwMzFcciwKKwlrZjMyPV5cMDMyXHIsIGtmMzM9XlwwMzNcciwga2YzND1eXDAzNFxyLCBrZjM1PV5cMDM1XHIsCisJa2YzNj1eXDAzNlxyLCBrZjM3PV5cMDM3XHIsIGtmMzg9XlwwMzhcciwga2YzOT1eXDAzOVxyLAorCWtmND1eXDAwNFxyLCBrZjQwPV5cMDQwXHIsIGtmNDE9XlwwNDFcciwga2Y0Mj1eXDA0MlxyLAorCWtmNDM9XEUkUCwga2Y0ND1cRSRRLCBrZjQ1PVxFJFIsIGtmNDY9XEUkUywga2Y0Nz1eXDA0N1xyLAorCWtmNDg9XlwwNDhcciwga2Y0OT1eXDA0OVxyLCBrZjU9XlwwMDVcciwga2Y1MD1eXDA1MFxyLAorCWtmNTE9XlwwNTFcciwga2Y1Mj1eXDA1MlxyLCBrZjUzPV5cMDUzXHIsIGtmNj1eXDAwNlxyLAorCWtmNz1eXDAwN1xyLCBrZjg9XlwwMDhcciwga2Y5PV5cMDA5XHIsIGtob21lPVxFW0gsCisJa2luZD1cRVtULCBrbnA9XEVbVSwga3BwPVxFW1YsIGtyaT1cRVtTLCBsbD1cRVtIXEVbQSwKKwltYzA9XEVbaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksIG5lbD1cRVtFLCByYz1cRTgsCisJcmV2PVxFWzA7N20sIHJpPVxFTSwgcm1hY3M9Xk8sIHJtaXI9XEVbNGwsIHJtc289XEVbbVwwMTcsCisJcm11bD1cRVttXDAxNywgc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlTyV0OzElOyU/JXAyJXQ7NCU7JT8lcDQldDs1JTslPyVwMSVwMyVPJXQ7NyU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21pcj1cRVs0aCwgc21zbz1cRVswOzE7N20sCisJc211bD1cRVswOzRtLCB0YmM9XEVbM2csIHRzbD1cRVsyIXdcRVslaSVwMSVkRywKKwl2cGE9XEVbJWklcDElZGQsCisKKyMgPGh0PiB0aHJvdWdoIDxlbD4gaW5jbHVkZWQgdG8gc3BlY2lmeSBwYWRkaW5nIG5lZWRlZCBpbiByYXcgbW9kZS4KKyMgKGF2dC1uczogYWRkZWQgZW1wdHkgPGFjc2M+IHRvIHN1cHByZXNzIGEgdGljIHdhcm5pbmcgLS1lc3IpCithdnQtbnN8Y29uY2VwdCBhdnQgbm8gc3RhdHVzIGxpbmUsCisJT1RicywgYW0sIGVvLCBtaXIsIHVsLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIGxtIzE5MiwKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osCisJY2xlYXI9XEVbSFxFW0okPDM4PiwgY25vcm09XEVbPTExOWwsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPTExOWgsIGRjaDE9XEVbUCwgZGltPVxFWzEheywgZGw9XEVbJXAxJWRNJDw0Kj4sCisJZGwxPVxFW00kPDQ+LCBlZD1cRVtKJDw5Nj4sIGVsPVxFW0skPDY+LCBob21lPVxFW0gsCisJaHBhPVxFWyVwMSV7MX0lKyVkRywgaHQ9XDAxMSQ8ND4sIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwkPDQqPiwgaWwxPVxFW0wkPDQ+LCBpbmQ9XG4kPDg+LAorCWludmlzPVxFWzhtLCBpcD0kPDQ+LCBpczE9XEVbPTEwM2xcRVs9MjA1bCwKKwlpczI9XEVbMSpxXEVbMiF0XEVbNyF0XEVbPTQ7MTAxOzExOTsxMjJsXEVbPTEwNzsxMTg7MjA3aFxFKTFcRVsxUVxFV1xFWyF5XEVbIXpcRT5cRVswXDowXDozMiFyXEVbMCp3XEVbd1xFMlxyXG5cRVsyOzI3IXQsCisJa2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtkY2gxPVxFXkJcciwga2VkPVxFXkRcciwga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywga2hvbWU9XEVbSCwga2ljaDE9XEVeQVxyLCBraWwxPVxFXkNcciwgbGw9XEVbMjRILAorCW1jMD1cRVswaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksCisJcGZsb2M9XEVbJXAxJWQ7MHUjJXAyJXMjLCBwZng9XEVbJXAxJWQ7MXUjJXAyJXMjLAorCXByb3Q9XEVbOTltLCByYz1cRTgsIHJlcD0lcDElY1xFWyVwMiV7MX0lLSVkYiwgcmV2PVxFWzdtLAorCXJpPVxFTSQ8ND4sIHJtYWNzPVwwMTYkPDE+LCBybWN1cD1cRVt3XEUyXHJcbiwKKwlybWlyPVxFWzRsLCBybWt4PVxFWyF6XEVbMDsydSwgcm1zbz1cRVs3IXssIHJtdWw9XEVbNCF7LAorCXNjPVxFNywKKwlzZ3I9XEVbJT8lcDEldDc7JTslPyVwMiV0NDslOyU/JXAzJXQ3OyU7JT8lcDQldDU7JTslPyVwNiV0MTslO20sCisJc2dyMD1cRVttLCBzbWFjcz1cMDE3JDwxPiwgc21jdXA9XEVbPTRsXEVbMTsyNHdcRTJcciwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWzEhelxFWzA7M3UsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzJnLCB2cGE9XEVbJXAxJXsxfSUrJWRkLAorYXZ0LXJ2LW5zfGNvbmNlcHQgYXZ0IGluIHJldmVyc2UgdmlkZW8gbW9kZS9ubyBzdGF0dXMgbGluZSwKKwlmbGFzaD1cRVs9MjA1bCQ8MjAwPlxFWz0yMDVoLCBpczE9XEVbPTEwM2xcRVs9MjA1aCwKKwl1c2U9YXZ0LW5zLAorYXZ0LXctbnN8Y29uY2VwdCBhdnQgaW4gMTMyIGNvbHVtbiBtb2RlL25vIHN0YXR1cyBsaW5lLAorCWlzMT1cRVs9MTAzaFxFWz0yMDVsLCBzbWN1cD1cRVtIXEVbMTsyNDsxOzEzMncsCisJdXNlPWF2dC1ucywKK2F2dC13LXJ2LW5zfGNvbmNlcHQgYXZ0IGluIDEzMiBjb2x1bW4gbW9kZS9ubyBzdGF0dXMgbGluZS9yZXZlcnNlIHZpZGVvLAorCWZsYXNoPVxFWz0yMDVsJDwyMDA+XEVbPTIwNWgsIGlzMT1cRVs9MTAzaFxFWz0yMDVoLAorCXNtY3VwPVxFW0hcRVsxOzI0OzE7MTMydywgdXNlPWF2dC1ucywKKworIyBDb25jZXB0IEFWVCB3aXRoIHN0YXR1cyBsaW5lLiBXZSBnZXQgdGhlIHN0YXR1cyBsaW5lIHVzaW5nIHRoZQorIyAiQmFja2dyb3VuZCBzdGF0dXMgbGluZSIgZmVhdHVyZSBvZiB0aGUgdGVybWluYWwuIFdlIHN3aXBlIHRoZQorIyBmaXJzdCBsaW5lIG9mIG1lbW9yeSBpbiB3aW5kb3cgMiBmb3IgdGhlIHN0YXR1cyBsaW5lLCBrZWVwaW5nCisjIDE5MSBsaW5lcyBvZiBtZW1vcnkgYW5kIDI0IHNjcmVlbiBsaW5lcyBmb3IgcmVndWxhciB1c2UuCisjIFRoZSBmaXJzdCBsaW5lIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgbGFzdCBzbyB0aGF0IHRoaXMgd29ya3MKKyMgb24gYm90aCA0IGFuZCA4IHBhZ2UgQVZUcy4gKE5vdGUgdGhlIGxtIzE5MSBvciAxOTIgLSB0aGlzCisjIGFzc3VtZXMgYW4gOCBwYWdlIEFWVCBidXQgbG0gaXNuJ3QgY3VycmVudGx5IHVzZWQgYW55d2hlcmUuKQorIworYXZ0K3N8Y29uY2VwdCBhdnQgc3RhdHVzIGxpbmUgY2hhbmdlcywKKwllc2xvaywgaHMsCisJbG0jMTkxLAorCWRzbD1cRVswKncsIGZzbD1cRVsxOzEhdywKKwlpczM9XEVbMndcRVsyIXdcRVsxOzE7MTs4MHdcRVtIXEVbMip3XEVbMSF3XEUyXHJcbiwKKwlybWN1cD1cRVsyd1xFMlxyXG4sIHNtY3VwPVxFWzI7MjV3XEUyXHIsCisJdHNsPVxFWzI7MSF3XEVbOyVwMSVkSFxFWzJLLAorYXZ0fGF2dC1zfGNvbmNlcHQtYXZ0fGF2dCB3LzgwIGNvbHVtbnMsCisJdXNlPWF2dCtzLCB1c2U9YXZ0LW5zLAorYXZ0LXJ2fGF2dC1ydi1zfGF2dCByZXZlcnNlIHZpZGVvIHcvc2wsCisJZmxhc2g9XEVbPTIwNWwkPDIwMD5cRVs9MjA1aCwgaXMxPVxFWz0xMDNsXEVbPTIwNWgsCisJdXNlPWF2dCtzLCB1c2U9YXZ0LW5zLAorYXZ0LXd8YXZ0LXctc3xjb25jZXB0IGF2dCAxMzIgY29scytzdGF0dXMsCisJaXMxPVxFWz0xMDNoXEVbPTIwNWwsIHNtY3VwPVxFW0hcRVsxOzI0OzE7MTMydywKKwl1c2U9YXZ0K3MsIHVzZT1hdnQtbnMsCithdnQtdy1ydnxhdnQtdy1ydi1zfGF2dCB3aWRlK3N0YXR1cytydiwKKwlmbGFzaD1cRVs9MjA1bCQ8MjAwPlxFWz0yMDVoLCBpczE9XEVbPTEwM2hcRVs9MjA1aCwKKwlzbWN1cD1cRVtIXEVbMTsyNDsxOzEzMncsIHVzZT1hdnQrcywgdXNlPWF2dC1ucywKKworIyMjIyBDb250ZWwgQnVzaW5lc3MgU3lzdGVtcy4KKyMKKworIyBDb250ZWwgYzMwMCBhbmQgYzMyMCB0ZXJtaW5hbHMuCitjb250ZWwzMDB8Y29udGVsMzIwfGMzMDB8Q29udGVsIEJ1c2luZXNzIFN5c3RlbXMgQy0zMDAgb3IgQy0zMjAsCisJYW0sIGluLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMxLAorCWJlbD1eRywgY2xlYXI9XEVLLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWCVwMSV7MzJ9JSslY1xFWSVwMiV7MzJ9JSslYywgY3V1MT1cRUEsCisJZGNoMT1cRU8kPDUuNSo+LCBkbDE9XEVNJDw1LjUqPiwgZWQ9XEVKJDw1LjUqPiwKKwllbD1cRUkkPDUuNT4sIGZsYXNoPVwwMjBcMDAyJDwyMDAvPlwwMjBcMDAzLCBob21lPVxFSCwKKwlodHM9XEUxLCBpY2gxPVxFTiwgaWwxPVxFTCQ8NS41Kj4sIGluZD1eSiwgaXA9JDw1LjUqPiwKKwlrYnM9XkgsIGtmMD1cRVJKLCBrZjE9XEVSQSwga2YyPVxFUkIsIGtmMz1cRVJDLCBrZjQ9XEVSRCwKKwlrZjU9XEVSRSwga2Y2PVxFUkYsIGtmNz1cRVJHLCBrZjg9XEVSSCwga2Y5PVxFUkksIGxsPVxFSFxFQSwKKwlybXNvPVxFIVwwLCBzZ3IwPVxFIVwwLCBzbXNvPVxFIVxyLCB0YmM9XEUzLAorIyBDb250ZWwgYzMwMSBhbmQgYzMyMSB0ZXJtaW5hbHMuCitjb250ZWwzMDF8Y29udGVsMzIxfGMzMDF8YzMyMXxDb250ZWwgQnVzaW5lc3MgU3lzdGVtcyBDLTMwMSBvciBDLTMyMSwKKwlmbGFzaEAsIGljaDFALCBpcEAsIHJtc289XEUhXDAkPDIwPiwgc21zbz1cRSFcciQ8MjA+LAorCXVzZT1jb250ZWwzMDAsCisKKyMjIyMgRGF0YSBHZW5lcmFsIChkZykKKyMKKyMgQWNjb3JkaW5nIHRvIEphbWVzIENhcmxzb24gPGNhcmxzb25AeHlsb2dpY3MuY29tPiB3cml0aW5nIGluIEphbnVhcnkgMTk5NSwKKyMgdGhlIHRlcm1pbmFscyBncm91cCBhdCBEYXRhIEdlbmVyYWwgd2FzIHNodXQgZG93biBpbiAxOTkxOyBhbGwgdGhlc2UKKyMgdGVybWluYWxzIGhhdmUgdGh1cyBiZWVuIGRpc2NvbnRpbnVlZC4KKyMKKyMgREcgdGVybWluYWxzIGhhdmUgZnVuY3Rpb24ga2V5cyB0aGF0IHJlc3BvbmQgdG8gdGhlIFNISUZUIGFuZCBDVFJMIGtleXMsCisjIGUuZy4sIFNISUZULUYxIGdlbmVyYXRlcyBhIGRpZmZlcmVudCBjb2RlIGZyb20gRjEuICBUbyBudW1iZXIgdGhlIGtleXMKKyMgc2VxdWVudGlhbGx5LCBmaXJzdCB0aGUgdW5tb2RpZmllZCBrZXkgY29kZXMgYXJlIGxpc3RlZCBhcyBGMSB0aHJvdWdoIEYxNS4KKyMgVGhlbiB0aGVpciBTSElGVCB2ZXJzaW9ucyBhcmUgbGlzdGVkIGFzIEYxNiB0aHJvdWdoIEYzMCwgdGhlaXIgQ1RSTCB2ZXJzaW9ucworIyBhcmUgbGlzdGVkIGFzIEYzMSB0aHJvdWdoIEY0NSwgYW5kIHRoZWlyIENUUkwtU0hJRlQgdmVyc2lvbnMgYXJlIGxpc3RlZCBhcworIyBGNDYgdGhyb3VnaCBGNjAuICBUaGlzIGlzIGRvbmUgaW4gdGhlIHByaXZhdGUgImluY2x1ZGVzIiBiZWxvdyB3aG9zZSBuYW1lcworIyBzdGFydCB3aXRoICJkZ2tleXMrIi4KKyMKKyMgREcgdGVybWluYWxzIGdlbmVyYWxseSBzdXBwb3J0IDggYml0IGNoYXJhY3RlcnMuICBGb3IgZWFjaCBvZiB0aGVzZSB0ZXJtaW5hbHMKKyMgdHdvIGRlc2NyaXB0aW9ucyBhcmUgc3VwcGxpZWQ6CisjCTEpIEEgZGVmYXVsdCBkZXNjcmlwdGlvbiBmb3IgOCBiaXRzL2NoYXJhY3RlciBjb21tdW5pY2F0aW9ucywgd2hpY2gKKyMJICAgdXNlcyB0aGUgZGVmYXVsdCBERyBpbnRlcm5hdGlvbmFsIGNoYXJhY3RlciBzZXQgYW5kIGtleWJvYXJkIGNvZGVzLgorIwkyKSBBIGRlc2NyaXB0aW9uIHdpdGggc3VmZml4ICItN2IiIGZvciA3IGJpdHMvY2hhcmFjdGVyIGNvbW11bmljYXRpb25zLgorIwkgICBUaGlzIGRlc2NyaXB0aW9uIG11c3QgdXNlIHRoZSBOT04tREVGQVVMVCBuYXRpdmUga2V5Ym9hcmQgbGFuZ3VhZ2UuCisKKyMgVW5tb2RpZmllZCBma2V5cyAoa2YxLWtmMTEpLCBTaGlmdCBma2V5cyAoa2YxMi1rZjIyKSwgQ3RybCBma2V5cyAoa2YyMy1rZjMzKSwKKyMgQ3RybC9TaGlmdCBmZGtleXMgKGtmMzQta2Y0NCkuCisKK2Rna2V5cys4YnxQcml2YXRlIGVudHJ5IGRlc2NyaWJpbmcgREcgdGVybWluYWwgOC1iaXQgQU5TSSBtb2RlIHNwZWNpYWwga2V5cywKKwlrYTE9XDIzMzAyMHosIGthMz1cMjMzMDIxeiwga2MxPVwyMzMwMjJ6LCBrYzM9XDIzMzAyM3osCisJa2Nscj1cMjMzMkosIGtjdWIxPVwyMzNELCBrY3VkMT1cMjMzQiwga2N1ZjE9XDIzM0MsCisJa2N1dTE9XDIzM0EsIGtlbD1cMjMzSywga2YxPVwyMzMwMDF6LCBrZjEwPVwyMzMwMTB6LAorCWtmMTE9XDIzMzAxMXosIGtmMTI9XDIzMzAxMnosIGtmMTM9XDIzMzAxM3osCisJa2YxND1cMjMzMDE0eiwga2YxNT1cMjMzMDAweiwga2YxNj1cMjMzMTAxeiwKKwlrZjE3PVwyMzMxMDJ6LCBrZjE4PVwyMzMxMDN6LCBrZjE5PVwyMzMxMDR6LAorCWtmMj1cMjMzMDAyeiwga2YyMD1cMjMzMTA1eiwga2YyMT1cMjMzMTA2eiwKKwlrZjIyPVwyMzMxMDd6LCBrZjIzPVwyMzMxMDh6LCBrZjI0PVwyMzMxMDl6LAorCWtmMjU9XDIzMzExMHosIGtmMjY9XDIzMzExMXosIGtmMjc9XDIzMzExMnosCisJa2YyOD1cMjMzMTEzeiwga2YyOT1cMjMzMTE0eiwga2YzPVwyMzMwMDN6LAorCWtmMzA9XDIzMzEwMHosIGtmMzE9XDIzMzIwMXosIGtmMzI9XDIzMzIwMnosCisJa2YzMz1cMjMzMjAzeiwga2YzND1cMjMzMjA0eiwga2YzNT1cMjMzMjA1eiwKKwlrZjM2PVwyMzMyMDZ6LCBrZjM3PVwyMzMyMDd6LCBrZjM4PVwyMzMyMDh6LAorCWtmMzk9XDIzMzIwOXosIGtmND1cMjMzMDA0eiwga2Y0MD1cMjMzMjEweiwKKwlrZjQxPVwyMzMyMTF6LCBrZjQyPVwyMzMyMTJ6LCBrZjQzPVwyMzMyMTN6LAorCWtmNDQ9XDIzMzIxNHosIGtmNDU9XDIzMzIwMHosIGtmNDY9XDIzMzMwMXosCisJa2Y0Nz1cMjMzMzAyeiwga2Y0OD1cMjMzMzAzeiwga2Y0OT1cMjMzMzA0eiwKKwlrZjU9XDIzMzAwNXosIGtmNTA9XDIzMzMwNXosIGtmNTE9XDIzMzMwNnosCisJa2Y1Mj1cMjMzMzA3eiwga2Y1Mz1cMjMzMzA4eiwga2Y1ND1cMjMzMzA5eiwKKwlrZjU1PVwyMzMzMTB6LCBrZjU2PVwyMzMzMTF6LCBrZjU3PVwyMzMzMTJ6LAorCWtmNTg9XDIzMzMxM3osIGtmNTk9XDIzMzMxNHosIGtmNj1cMjMzMDA2eiwKKwlrZjYwPVwyMzMzMDB6LCBrZjc9XDIzMzAwN3osIGtmOD1cMjMzMDA4eiwga2Y5PVwyMzMwMDl6LAorCWtob21lPVwyMzNILCBrcHJ0PVwyMzNpLAorCitkZ2tleXMrN2J8UHJpdmF0ZSBlbnRyeSBkZXNjcmliaW5nIERHIHRlcm1pbmFsIDctYml0IEFOU0kgbW9kZSBzcGVjaWFsIGtleXMsCisJa2ExPVxFWzAyMHosIGthMz1cRVswMjF6LCBrYzE9XEVbMDIyeiwga2MzPVxFWzAyM3osCisJa2Nscj1cRVsySiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZWw9XEVbSywga2YxPVxFWzAwMXosIGtmMTA9XEVbMDEweiwga2YxMT1cRVswMTF6LAorCWtmMTI9XEVbMDEyeiwga2YxMz1cRVswMTN6LCBrZjE0PVxFWzAxNHosIGtmMTU9XEVbMDAweiwKKwlrZjE2PVxFWzEwMXosIGtmMTc9XEVbMTAyeiwga2YxOD1cRVsxMDN6LCBrZjE5PVxFWzEwNHosCisJa2YyPVxFWzAwMnosIGtmMjA9XEVbMTA1eiwga2YyMT1cRVsxMDZ6LCBrZjIyPVxFWzEwN3osCisJa2YyMz1cRVsxMDh6LCBrZjI0PVxFWzEwOXosIGtmMjU9XEVbMTEweiwga2YyNj1cRVsxMTF6LAorCWtmMjc9XEVbMTEyeiwga2YyOD1cRVsxMTN6LCBrZjI5PVxFWzExNHosIGtmMz1cRVswMDN6LAorCWtmMzA9XEVbMTAweiwga2YzMT1cRVsyMDF6LCBrZjMyPVxFWzIwMnosIGtmMzM9XEVbMjAzeiwKKwlrZjM0PVxFWzIwNHosIGtmMzU9XEVbMjA1eiwga2YzNj1cRVsyMDZ6LCBrZjM3PVxFWzIwN3osCisJa2YzOD1cRVsyMDh6LCBrZjM5PVxFWzIwOXosIGtmND1cRVswMDR6LCBrZjQwPVxFWzIxMHosCisJa2Y0MT1cRVsyMTF6LCBrZjQyPVxFWzIxMnosIGtmNDM9XEVbMjEzeiwga2Y0ND1cRVsyMTR6LAorCWtmNDU9XEVbMjAweiwga2Y0Nj1cRVszMDF6LCBrZjQ3PVxFWzMwMnosIGtmNDg9XEVbMzAzeiwKKwlrZjQ5PVxFWzMwNHosIGtmNT1cRVswMDV6LCBrZjUwPVxFWzMwNXosIGtmNTE9XEVbMzA2eiwKKwlrZjUyPVxFWzMwN3osIGtmNTM9XEVbMzA4eiwga2Y1ND1cRVszMDl6LCBrZjU1PVxFWzMxMHosCisJa2Y1Nj1cRVszMTF6LCBrZjU3PVxFWzMxMnosIGtmNTg9XEVbMzEzeiwga2Y1OT1cRVszMTR6LAorCWtmNj1cRVswMDZ6LCBrZjYwPVxFWzMwMHosIGtmNz1cRVswMDd6LCBrZjg9XEVbMDA4eiwKKwlrZjk9XEVbMDA5eiwga2hvbWU9XEVbSCwga3BydD1cRVtpLAorCitkZ2tleXMrMTF8UHJpdmF0ZSBlbnRyeSBkZXNjcmliaW5nIDExIG1pbmltYWwtc3Vic2V0IERHIG1vZGUgc3BlY2lhbCBrZXlzLAorCWtjbHI9XkwsIGtjdWIxPV5ZLCBrY3VkMT1eWiwga2N1ZjE9XlgsIGtjdXUxPV5XLCBrZWw9XkssCisJa2YxPV5ecSwga2YxMD1eXnosIGtmMTE9Xl57LCBrZjEyPV5eYSwga2YxMz1eXmIsIGtmMTQ9Xl5jLAorCWtmMTU9Xl5kLCBrZjE2PV5eZSwga2YxNz1eXmYsIGtmMTg9Xl5nLCBrZjE5PV5eaCwga2YyPV5eciwKKwlrZjIwPV5eaSwga2YyMT1eXmosIGtmMjI9Xl5rLCBrZjIzPV5eMSwga2YyND1eXjIsIGtmMjU9Xl4zLAorCWtmMjY9Xl40LCBrZjI3PV5eNSwga2YyOD1eXjYsIGtmMjk9Xl43LCBrZjM9Xl5zLCBrZjMwPV5eOCwKKwlrZjMxPV5eOSwga2YzMj1eXlw6LCBrZjMzPV5eOywga2YzND1eXiEsIGtmMzU9Xl4iLCBrZjM2PV5eIywKKwlrZjM3PV5eJCwga2YzOD1eXiUlLCBrZjM5PV5eJiwga2Y0PV5edCwga2Y0MD1eXicsIGtmNDE9Xl4oLAorCWtmNDI9Xl4pLCBrZjQzPV5eKiwga2Y0ND1eXissIGtmNT1eXnUsIGtmNj1eXnYsIGtmNz1eXncsCisJa2Y4PV5eeCwga2Y5PV5eeSwga2hvbWU9XkgsCisKK2Rna2V5cysxNXxQcml2YXRlIGVudHJ5IGRlc2NyaWJpbmcgMTUgREcgbW9kZSBzcGVjaWFsIGtleXMsCisJa0hPTT1eXl5ILCBrTEZUPV5eXlksIGtSSVQ9Xl5eWCwga2ExPV5eXFwsIGthMz1eXl0sIGtjMT1eXlxeLAorCWtjMz1eXl8sIGtmMT1eXnEsIGtmMTA9Xl56LCBrZjExPV5eeywga2YxMj1eXnwsIGtmMTM9Xl59LAorCWtmMTQ9Xl5+LCBrZjE1PV5ecCwga2YxNj1eXmEsIGtmMTc9Xl5iLCBrZjE4PV5eYywga2YxOT1eXmQsCisJa2YyPV5eciwga2YyMD1eXmUsIGtmMjE9Xl5mLCBrZjIyPV5eZywga2YyMz1eXmgsIGtmMjQ9Xl5pLAorCWtmMjU9Xl5qLCBrZjI2PV5eaywga2YyNz1eXmwsIGtmMjg9Xl5tLCBrZjI5PV5ebiwga2YzPV5ecywKKwlrZjMwPV5eYCwga2YzMT1eXjEsIGtmMzI9Xl4yLCBrZjMzPV5eMywga2YzND1eXjQsIGtmMzU9Xl41LAorCWtmMzY9Xl42LCBrZjM3PV5eNywga2YzOD1eXjgsIGtmMzk9Xl45LCBrZjQ9Xl50LCBrZjQwPV5eXDosCisJa2Y0MT1eXjssIGtmNDI9Xl48LCBrZjQzPV5ePSwga2Y0ND1eXj4sIGtmNDU9Xl4wLCBrZjQ2PV5eISwKKwlrZjQ3PV5eIiwga2Y0OD1eXiMsIGtmNDk9Xl4kLCBrZjU9Xl51LCBrZjUwPV5eJSUsIGtmNTE9Xl4mLAorCWtmNTI9Xl4nLCBrZjUzPV5eKCwga2Y1ND1eXiksIGtmNTU9Xl4qLCBrZjU2PV5eKywga2Y1Nz1eXlwsLAorCWtmNTg9Xl4tLCBrZjU5PV5eLiwga2Y2PV5ediwga2Y2MD1eXlxzLCBrZjc9Xl53LCBrZjg9Xl54LAorCWtmOT1eXnksCisKKyMgRGF0YSBHZW5lcmFsIGNvbG9yIHRlcm1pbmFscyB1c2UgdGhlICJUZWt0cm9uaXgiIGNvbG9yIG1vZGVsLiAgVGhlIHRvdGFsCisjIG51bWJlciBvZiBjb2xvcnMgdmFyaWVzIHdpdGggdGhlIHRlcm1pbmFsIG1vZGVsLCBhcyBkb2VzIHN1cHBvcnQgZm9yCisjIGF0dHJpYnV0ZXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbG9yLgorCisjIFJlbW92ZWQgdTcsIHU4IGRlZmluaXRpb25zIHNpbmNlIHRoZXkgY29uZmxpY3Qgd2l0aCB0YWNrOgorIwkJUHJlc2VydmUgdXNlci1kZWZpbmVkIGNvbG9ycyBpbiBhdCBsZWFzdCBzb21lIGNhc2VzLgorIwl1Nz1eXkZoLAorIwkJRGVmYXVsdCBpcyBBQ00gbW9kZS4KKyMJdTg9Xl5GfTIwXl5GaV5eRn0yMSwKKyMKK2RndW5peCtmaXhlZHxGaXhlZCBjb2xvciBpbmZvIGZvciBERyBENDMwQyB0ZXJtaW5hbHMgaW4gREctVU5JWCBtb2RlLAorCWJjZSwKKwljb2xvcnMjMTYsIG5jdiM1MywgcGFpcnMjMjU2LAorCW9wPVwwMzZBZFwwMzZCZCwKKwlzZXRhYj1cMDM2QiVwMSU/JXAxJXs4fSU8JXQlezJ9JSYlPyVwMSV7MX0lJiV0JXs0fSV8JTslPyVwMSV7NH0lJiV0JXsxfSV8JTslOyV7NDh9JSslYywKKwlzZXRhZj1cMDM2QSVwMSU/JXAxJXs4fSU8JXQlezJ9JSYlPyVwMSV7MX0lJiV0JXs0fSV8JTslPyVwMSV7NH0lJiV0JXsxfSV8JTslOyV7NDh9JSslYywKKwlzZXRiPVwwMzZCJXAxJXs0OH0lKyVjLCBzZXRmPVwwMzZBJXAxJXs0OH0lKyVjLAorCitkZytmaXhlZHxGaXhlZCBjb2xvciBpbmZvIGZvciBERyBENDMwQyB0ZXJtaW5hbHMgaW4gREcgbW9kZSwKKwl1c2U9ZGd1bml4K2ZpeGVkLAorCisjIFZpZGVvIGF0dHJpYnV0ZXMgYXJlIGNvb3JkaW5hdGVkIHVzaW5nIHN0YXRpYyB2YXJpYWJsZXMgc2V0IGJ5ICJzZ3IiLCB0aGVuCisjIGNoZWNrZWQgYnkgIm9wIiwgInNldGFbYmZdIiwgYW5kICJzZXRbYmZdIiB0byByZWZyZXNoIHRoZSBhdHRyaWJ1dGUgc2V0dGluZ3MuCisjIChEPWRpbSwgVT11bmRlcmxpbmUsIEI9YmxpbmssIFI9cmV2ZXJzZS4pCitkZytjb2xvcjh8Q29sb3IgaW5mbyBmb3IgRGF0YSBHZW5lcmFsIEQyMjAgYW5kIEQyMzBDIHRlcm1pbmFscyBpbiBBTlNJIG1vZGUsCisJYmNlLAorCWNvbG9ycyM4LCBuY3YjMTYsIHBhaXJzIzY0LAorCW9wPVxFWyU/JWdEJXQyOyU7JT8lZ1UldDQ7JTslPyVnQiV0NTslOyU/JWdSJXQ3OyU7bSwKKwlzZXRhYj1cRVs0JXAxJWQlPyVnRCV0OzIlOyU/JWdVJXQ7NCU7JT8lZ0IldDs1JTslPyVnUiV0OzclO20sCisJc2V0YWY9XEVbMyVwMSVkJT8lZ0QldDsyJTslPyVnVSV0OzQlOyU/JWdCJXQ7NSU7JT8lZ1IldDs3JTttLAorCXNldGI9XEVbNCVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyVkJT8lZ0QldDsyJTslPyVnVSV0OzQlOyU/JWdCJXQ7NSU7JT8lZ1IldDs3JTttLAorCXNldGY9XEVbMyVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyVkJT8lZ0QldDsyJTslPyVnVSV0OzQlOyU/JWdCJXQ7NSU7JT8lZ1IldDs3JTttLAorCitkZytjb2xvcnxDb2xvciBpbmZvIGZvciBEYXRhIEdlbmVyYWwgRDQ3MEMgdGVybWluYWxzIGluIEFOU0kgbW9kZSwKKwljb2xvcnMjMTYsIG5jdiM1MywgcGFpcnMjMjU2LAorCXNldGFiPVxFWyU/JXAxJXs4fSU8JXQ0JXAxJWU9JXAxJXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JTslZCU/JWdEJXQ7MiU7JT8lZ1UldDs0JTslPyVnQiV0OzUlOyU/JWdSJXQ7NyU7bSwKKwlzZXRhZj1cRVslPyVwMSV7OH0lPCV0MyVwMSVlPCVwMSV7Mn0lJiU/JXAxJXsxfSUmJXQlezR9JXwlOyU/JXAxJXs0fSUmJXQlezF9JXwlOyU7JWQlPyVnRCV0OzIlOyU/JWdVJXQ7NCU7JT8lZ0IldDs1JTslPyVnUiV0OzclO20sCisJc2V0Yj1cRVslPyVwMSV7OH0lPCV0NCVlPSU7JXAxJXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JWQlPyVnRCV0OzIlOyU/JWdVJXQ7NCU7JT8lZ0IldDs1JTslPyVnUiV0OzclO20sCisJc2V0Zj1cRVslPyVwMSV7OH0lPCV0MyVlPCU7JXAxJXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JWQlPyVnRCV0OzIlOyU/JWdVJXQ7NCU7JT8lZ0IldDs1JTslPyVnUiV0OzclO20sCisJdXNlPWRnK2NvbG9yOCwKKworZGdtb2RlK2NvbG9yOHxDb2xvciBpbmZvIGZvciBEYXRhIEdlbmVyYWwgRDIyMC9EMjMwQyB0ZXJtaW5hbHMgaW4gREcgbW9kZSwKKwliY2UsCisJY29sb3JzIzgsIG5jdiMxNiwgcGFpcnMjNjQsCisJb3A9XDAzNkFkXDAzNkJkLAorCXNldGFiPVwwMzZCJXAxJXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JXs0OH0lKyVjLAorCXNldGFmPVwwMzZBJXAxJXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JXs0OH0lKyVjLAorCXNldGI9XDAzNkIlcDElezQ4fSUrJWMsIHNldGY9XDAzNkElcDElezQ4fSUrJWMsCisKK2RnbW9kZStjb2xvcnxDb2xvciBpbmZvIGZvciBEYXRhIEdlbmVyYWwgRDQ3MEMgdGVybWluYWxzIGluIERHIG1vZGUsCisJY29sb3JzIzE2LCBwYWlycyMyNTYsCisJc2V0YWI9XDAzNkIlcDElPyVwMSV7OH0lPCV0JXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JTslezQ4fSUrJWMsCisJc2V0YWY9XDAzNkElcDElPyVwMSV7OH0lPCV0JXsyfSUmJT8lcDElezF9JSYldCV7NH0lfCU7JT8lcDElezR9JSYldCV7MX0lfCU7JTslezQ4fSUrJWMsCisJdXNlPWRnbW9kZStjb2xvcjgsCisKK2RndW5peCtjY2N8Q29uZmlndXJhYmxlIGNvbG9yIGluZm8gZm9yIERHIEQ0MzBDIHRlcm1pbmFscyBpbiBERy1VTklYIG1vZGUsCisJYmNlLCBjY2MsCisJY29sb3JzIzUyLCBuY3YjNTMsIHBhaXJzIzI2LAorCWluaXRwPVwwMzZSRzAlcDElMDJYJXAyJXsyNTZ9JSolezEwMDF9JS8lMDJYJXAzJXsyNTZ9JSolezEwMDF9JS8lMDJYJXA0JXsyNTZ9JSolezEwMDF9JS8lMDJYJXA1JXsyNTZ9JSolezEwMDF9JS8lMDJYJXA2JXsyNTZ9JSolezEwMDF9JS8lMDJYJXA3JXsyNTZ9JSolezEwMDF9JS8lMDJYLAorCW9jPVwwMzZSRzAxQTAwRkYwMDAwMDAwMFwwMzZSRzAxQjAwMDAwMDAwRkYwMFwwMzZSRzAxQzAwN0YwMDAwMDAwMFwwMzZSRzAxRDAwMDAwMDAwN0YwMCwKKwlvcD1cMDM2UkY0ODMxQVwwMzZSRjJFMzFCXDAzNlJGMUQzMUNcMDM2UkYzRjMxRCwKKwlzY3A9XDAzNlJHMiVwMSUwMlgsCisKKyMgQ29sb3JzIGFyZSBpbiB0aGUgb3JkZXI6ICBub3JtYWwsIHJldmVyc2UsIGRpbSwgZGltICsgcmV2ZXJzZS4KK2RnK2NjY3xDb25maWd1cmFibGUgY29sb3IgaW5mbyBmb3IgREcgRDQzMEMgdGVybWluYWxzIGluIERHIG1vZGUsCisJYmNlLCBjY2MsCisJY29sb3JzIzUyLCBuY3YjNTMsIHBhaXJzIzI2LAorCWluaXRwPVwwMzZSRzAlcDElezE2fSUvJXs0OH0lKyVjJXAxJXsxNn0lbSV7NDh9JSslYyVwMiV7MjU2fSUqJXsxMDAxfSUvJVBhJWdhJXsxNn0lLyV7NDh9JSslYyVnYSV7MTZ9JW0lezQ4fSUrJWMlcDMlezI1Nn0lKiV7MTAwMX0lLyVQYSVnYSV7MTZ9JS8lezQ4fSUrJWMlZ2ElezE2fSVtJXs0OH0lKyVjJXA0JXsyNTZ9JSolezEwMDF9JS8lUGElZ2ElezE2fSUvJXs0OH0lKyVjJWdhJXsxNn0lbSV7NDh9JSslYyVwNSV7MjU2fSUqJXsxMDAxfSUvJVBhJWdhJXsxNn0lLyV7NDh9JSslYyVnYSV7MTZ9JW0lezQ4fSUrJWMlcDYlezI1Nn0lKiV7MTAwMX0lLyVQYSVnYSV7MTZ9JS8lezQ4fSUrJWMlZ2ElezE2fSVtJXs0OH0lKyVjJXA3JXsyNTZ9JSolezEwMDF9JS8lUGElZ2ElezE2fSUvJXs0OH0lKyVjJWdhJXsxNn0lbSV7NDh9JSslYywKKwlvYz1cMDM2UkcwMVw6MDA/PzAwMDAwMDAwXDAzNlJHMDE7MDAwMDAwMDA/PzAwXDAzNlJHMDE8MDA3PzAwMDAwMDAwXDAzNlJHMDE9MDAwMDAwMDA3PzAwLAorCW9wPVwwMzZSRjQ4MzFcOlwwMzZSRjI+MzE7XDAzNlJGMT0zMTxcMDM2UkYzPzMxPSwKKwlzY3A9XDAzNlJHMiVwMSV7MTZ9JS8lezQ4fSUrJWMlcDElezE2fSVtJXs0OH0lKyVjLAorCisjIFRoZSBnZW5lcmljIERHIHRlcm1pbmFsIHR5cGUgKGFuIDgtYml0LWNsZWFuIHN1YnNldCBvZiB0aGUgNjA1MykKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDEgc2V0czoKKyMJXlIJCS0gdmVydGljYWwgc2Nyb2xsaW5nIGVuYWJsZWQKKyMJXkMJCS0gYmxpbmtpbmcgZW5hYmxlZAorZGctZ2VuZXJpY3xHZW5lcmljIERhdGEgR2VuZXJhbCB0ZXJtaW5hbCBpbiBERyBtb2RlLAorCWFtLCBidywgbXNnciwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgYmxpbms9Xk4sIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eWSwgY3VkMT1eWiwgY3VmMT1eWCwKKwljdXA9XDAyMCVwMiVjJXAxJWMsIGN1dTE9XlcsIGRpbT1eXCwgZWw9XkssIGluZD1eSiwgaXMxPV5SXkMsCisJbWMwPV5RLCBuZWw9XkosIHJtc289Xl0sIHJtdWw9XlUsIHNncjA9Xk9eVV5dLCBzbXNvPV5cLAorCXNtdWw9XlQsIHVzZT1kZ2tleXMrMTEsCisKKyMgQWNjb3JkaW5nIHRvIHRoZSA0LjRCU0QgdGVybWNhcCBmaWxlLCB0aGUgZGcyMDAgPGN1cD4gc2hvdWxkIGJlIHRoZQorIyB0ZXJtY2FwIGVxdWl2YWxlbnQgb2YgXDAyMCVwMiV7MTI4fSUrJWMlcDElezEyOH0lKyVjIChpbiB0ZXJtY2FwCisjIG5vdGF0aW9uIHRoYXQncyAiXlAlciUrXDIwMCUrXDIwMCIpLiAgVGhvc2UgXDIwMHMgYXJlIHN1c3BpY2lvdXMsCisjIG1heWJlIHRoZXkgd2VyZSBvcmlnaW5hbGx5IG51bHMgKHdoaWNoIHdvdWxkIGZpdCkuCisKK2RnMjAwfGRhdGEgZ2VuZXJhbCBkYXNoZXIgMjAwLAorCU9UYnMsIGFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eWSwgY3VkMT1eWiwgY3VmMT1eWCwKKwljdXA9XDAyMCVwMiVjJXAxJWMsIGN1dTE9XlcsIGVsPV5LLCBob21lPV5ILCBpbmQ9XkosCisJa2N1YjE9XlksIGtjdWQxPV5aLCBrY3VmMT1eWCwga2N1dTE9XlcsIGtmMD1eXnosIGtmMT1eXnEsCisJa2YyPV5eciwga2YzPV5ecywga2Y0PV5edCwga2Y1PV5edSwga2Y2PV5ediwga2Y3PV5edywga2Y4PV5eeCwKKwlrZjk9Xl55LCBraG9tZT1eSCwgbGYwPWYxMCwgbmVsPV5KLCBybXNvPV5eRSwgcm11bD1eVSwKKwlzbXNvPV5eRCwgc211bD1eVCwKKworIyBEYXRhIEdlbmVyYWwgMjEwLzIxMSAoYW5kIDQxMD8pCWZyb20gTGVlIFBlYXJzb24gKHVtaWNoIWxwKSB2aWEgQlJMCitkZzIxMHxkZy1hbnNpfERhdGEgR2VuZXJhbCAyMTAvMjExLAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCU9Ubmw9XEVbQiwgY2xlYXI9XEVbMkosIGN1ZDE9XEVbQiwgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dTE9XEVbQSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsCisJbmVsPVxyXEVbSFxFW0Fcbiwgcm1zbz1cRVswO20sIHJtdWw9XEVbMDttLCBzbXNvPVxFWzc7bSwKKwlzbXVsPVxFWzQ7bSwKKyMgRnJvbTogUGV0ZXIgTi4gV2FuIDxpaG5wNCFnYXRlY2ghZ2Fjc3Ihd2FuPgorIyBjb3VydGVzeSBvZiBDYXJsb3MgUnVjYWxkZSBvZiBWYW50YWdlIFNvZnR3YXJlLCBJbmMuCisjIChkZzIxMTogdGhpcyBoYWQgPGN1cD1cMDIwJXIlLiU+Liwgd2hpY2ggd2FzIGFuIGFuY2llbnQgdGVybWNhcCBoYW5nb3Zlci4KKyMgSSBzdXNwZWN0IHRoZSBkMjAwIGZ1bmN0aW9uIGtleXMgYWN0dWFsbHkgd29yayBvbiB0aGUgZGcyMTEsIGNoZWNrIGl0IG91dC4pCitkZzIxMXxEYXRhIEdlbmVyYWwgZDIxMSwKKwljbm9ybT1eTCwgY3Z2aXM9XkxeUiwgaHQ9XkksIGluZEAsIGticz1eWSwga2YwQCwga2YxQCwga2YyQCwga2YzQCwKKwlrZjRALCBrZjVALCBrZjZALCBrZjdALCBrZjhALCBrZjlALCBsZjBALCBuZWw9Xk1eWiwgcm1jdXA9XkwsCisJcm1zbz1cMDM2RSQ8XDAvPiwgc21jdXA9XkxeUiwgc21zbz1cMDM2RCQ8NS8+LCB1c2U9ZGcyMDAsCisKKyMgZGc0NTAgZnJvbSBDb3JuZWxsIChub3Qgb2ZmaWNpYWwpCitkZzQ1MHxkZzYxMzR8ZGF0YSBnZW5lcmFsIDYxMzQsCisJY3ViMUAsIGN1ZjE9XlgsIHVzZT1kZzIwMCwKKworIyBOb3Qgb2ZmaWNpYWwuLi4KKyMgTm90ZTogbGVzc2VyIERhc2hlciB0ZXJtaW5hbHMgd2lsbCBub3Qgd29yayB3aXRoIHZpIGJlY2F1c2UgdmkgaW5zaXN0cyB1cG9uCisjIGhhdmluZyBhIGNvbW1hbmQgdG8gbW92ZSBzdHJhaWdodCBkb3duIGZyb20gYW55IHBvc2l0aW9uIG9uIHRoZSBib3R0b20gbGluZQorIyBhbmQgc2Nyb2xsIHRoZSBzY3JlZW4gdXAsIG9yIGEgZGlyZWN0IHZlcnRpY2FsIHNjcm9sbCBjb21tYW5kLiAgVGhlIDQ2MCBhbmQKKyMgYWJvdmUgaGF2ZSBib3RoLCB0aGUgRDIxMC8yMTEsIGZvciBpbnN0YW5jZSwgaGFzIG5laXRoZXIuICBXZSBtdXN0IHVzZSBBTlNJCisjIG1vZGUgcmF0aGVyIHRoYW4gREcgbW9kZSBiZWNhdXNlIHN0YW5kYXJkIFVOSVggdHR5IGRyaXZlcnMgYXNzdW1lIHRoYXQgXkggaXMKKyMgYmFja3NwYWNlIG9uIGFsbCB0ZXJtaW5hbHMuICBUaGlzIGlzIG5vdCBzbyBpbiBERyBtb2RlLgorIyAoZGc0NjAtYW5zaTogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtuIzY6IjsgYWxzbyByZW1vdmVkICI6bXU9XEVXOiIsIG9uIHRoZQorIyBncm91bmRzIHRoYXQgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgIjptbDoiCisjIGZpeGVkIGdhcmJsZWQgIjprOT1cRVswMFw6ejoiIGNhcGFiaWxpdHkgLS0gZXNyKQorZGc0NjAtYW5zaXxEYXRhIEdlbmVyYWwgRGFzaGVyIDQ2MCBpbiBBTlNJLW1vZGUsCisJT1RicywgYW0sIG1zZ3IsIHVsLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCU9Ubmw9XEVELCBibGluaz1cRVs1bSwgY2xlYXI9XEVbMkosIGN1YjE9XkgsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSUyZDslcDIlMmRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwKKwlkaW09XEVbMm0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWljaDE9XEVbQCwgaWwxPVxFW0wsIGluZD1cRVtTLCBpczI9Xl5GQCwga2JzPVxFW0QsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjA9XEVbMDAxeiwga2YxPVxFWzAwMnosIGtmMj1cRVswMDN6LCBrZjM9XEVbMDA0eiwKKwlrZjQ9XEVbMDA1eiwga2Y1PVxFWzAwNnosIGtmNj1cRVswMDd6LCBrZjc9XEVbMDA4eiwKKwlrZjg9XEVbMDA5eiwga2Y5PVxFWzAxMHosIGtob21lPVxFW0gsIGxmMD1mMSwgbGYxPWYyLCBsZjI9ZjMsCisJbGYzPWY0LCBsZjQ9ZjUsIGxmNT1mNiwgbGY2PWY3LCBsZjc9ZjgsIGxmOT1mMTAsIHJldj1cRVs3bSwKKwlyaT1cRVtULCBybXNvPVxFW20sIHJtdWw9XEVbMDUsIHNncjA9XEVbbSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorIyBGcm9tOiBXYXluZSBUaHJvb3AgPG1jbmMhcnRpLXNlbCFydHA0NyF0aHJvb3B3PiAobm90IG9mZmljaWFsKQorIyBEYXRhIEdlbmVyYWwgNjA1eAorIyBPdWdodCB0byB3b3JrIGZvciBhIE1vZGVsIDYyNDIsIFR5cGUgRDIxMCBhcyB3ZWxsIGFzIGEgNjA1eC4KKyMgTm90ZSB0aGF0IHRoZSBjdXJzb3ItZG93biBrZXkgdHJhbnNtaXRzIF5aLiAgSm9iIGNvbnRyb2wgdXNlcnMsIGJld2FyZSEKKyMgVGhpcyBhbHNvIG1hdGNoZXMgYSBwb3N0ZWQgZGVzY3JpcHRpb24gb2Ygc29tZXRoaW5nIGNhbGxlZCBhIGBEYXNoZXIgMTAwJworIyBzbyB0aGVyZSdzIGEgZGcxMDAgYWxpYXMgaGVyZS4KKyMgKGRnNjA1MzogdGhlIDQuNEJTRCBmaWxlIGhhZCA8Y3ViMT1eSD4sIDxjdWQxPV5KPiwgPGN1ZjE9XlM+LiAtLSBlc3IpCitkZzYwNTMtb2xkfGRnMTAwfGRhdGEgZ2VuZXJhbCA2MDUzLAorCU9UYnMsIGFtLCBidywgdWwsCisJY29scyM4MCwgbGluZXMjMjQsCisJT1RiYz1eWSwgYmVsPV5HLCBjbGVhcj1eTCwgY25vcm09XkwsIGNyPV5NLCBjdWIxPV5ZLCBjdWQxPV5aLAorCWN1ZjE9XlgsIGN1cD1cMDIwJXAyJWMlcDElYywgY3V1MT1eVywgY3Z2aXM9XkxeUiwgZWw9XkssCisJaG9tZT1eSCwgaHQ9XkksIGlzMj1eUiwga2JzPV5ZLCBrY3ViMT1eWSwga2N1ZDE9XlosIGtjdWYxPV5YLAorCWtjdXUxPV5XLCBrZjA9Xl5xLCBrZjE9Xl5yLCBrZjI9Xl5zLCBrZjM9Xl50LCBrZjQ9Xl51LCBrZjU9Xl52LAorCWtmNj1eXncsIGtmNz1eXngsIGtmOD1eXnksIGtmOT1eXnosIGtob21lPV5ILCBybWN1cD1eTCwKKwlybXNvPVwwXl5FLCBybXVsPV5VLCBzbWN1cD1eTF5SLCBzbXNvPVwwXDBcMFwwXDBcMDM2RCwKKwlzbXVsPV5ULAorCisjIChTb21lIHBlcmZvcm1hbmNlIGNhbiBiZSBnYWluZWQgb3ZlciB0aGUgZ2VuZXJpYyBERyB0ZXJtaW5hbCB0eXBlKQorZGc2MDUzfDYwNTN8NjA1My1kZ3xkZzYwNXh8NjA1eHw2MDV4LWRnfGQyfGQyLWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgNjA1MywKKwl4b25ALAorCWhvbWU9XlBcMFwwLCBsbD1eUFwwXlcsIHVzZT1kZy1nZW5lcmljLAorCisjIExpa2UgNjA1MywgYnV0IGFkZHMgcmV2ZXJzZSB2aWRlbyBhbmQgbW9yZSBrZXlwYWQgYW5kIGZ1bmN0aW9uIGtleXMuCitkMjAwfGQyMDAtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjAwLAorCWJvbGQ9Xl5EXlQsIGhvbWVALCBsbEAsIHJldj1eXkQsIHJtc289Xl5FXl0sCisJc2dyPVwwMzYlPyVwMSVwMyV8JXA2JXwldEQlZUUlOyU/JXAyJXA2JXwldFwwMjQlZVwwMjUlOyU/JXA0JXRcMDE2JWVcMDE3JTslPyVwMSVwNSV8JXRcMDM0JWVcMDM1JTssCisJc2dyMD1cMDE3XDAyNVwwMzVcMDM2RSwgc21zbz1eXkReXCwgdXNlPWRna2V5cysxNSwKKwl1c2U9ZGc2MDUzLAorCisjIERBU0hFUiBEMjEwIHNlcmllcyB0ZXJtaW5hbHMgaW4gQU5TSSBtb2RlLgorIwlSZXZlcnNlIHZpZGVvLCBubyBpbnNlcnQvZGVsZXRlIGNoYXJhY3Rlci9saW5lLCA3IGJpdHMvY2hhcmFjdGVyIG9ubHkuCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAxIHNldHM6CisjCTwwCQktIHNjcm9sbGluZyBlbmFibGVkCisjCTwxCQktIGJsaW5rIGVuYWJsZWQKKyMJPDQJCS0gcHJpbnQgY2hhcmFjdGVycyByZWdhcmRsZXNzIG9mIGF0dHJpYnV0ZXMKK2QyMTB8ZDIxNHxEYXRhIEdlbmVyYWwgREFTSEVSIEQyMTAgc2VyaWVzLAorCWFtLCBidywgbXNnciwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbNDs3bSwgY2xlYXI9XEVbMkosIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRpbT1cRVsybSwgZWQ9XEVbSiwgZWw9XEVbSywKKwllbDE9XEVbMUssIGhvbWU9XEVbSCwgaW5kPV5KLCBpczE9XEVbPDA7PDE7PDRsLAorCWxsPVxFW0hcRVtBLCBuZWw9XkosIHJldj1cRVs3bSwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyPVxFWyU/JXAxJXAzJXwlcDYlfCV0NzslOyU/JXA0JXQ1OyU7JT8lcDIlcDYlfCV0NDslOyU/JXAxJXA1JXwldDI7JTttLAorCXNncjA9XEVbbSwgc21zbz1cRVsyOzdtLCBzbXVsPVxFWzRtLCB1c2U9ZGdrZXlzKzdiLAorCisjIERBU0hFUiBEMjEwIHNlcmllcyB0ZXJtaW5hbHMgaW4gREcgbW9kZS4KKyMgTGlrZSBEMjAwLCBidXQgYWRkcyBjbGVhciB0byBlbmQtb2Ytc2NyZWVuIGFuZCBuZWVkcyBYT04vWE9GRi4KK2QyMTAtZGd8ZDIxNC1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQyMTAgc2VyaWVzIGluIERHIG1vZGUsCisJeG9uLAorCWVkPV5eRkYsIHVzZT1kMjAwLWRnLAorCisjIERBU0hFUiBEMjExIHNlcmllcyB0ZXJtaW5hbHMgaW4gQU5TSSBtb2RlLgorIyBMaWtlIHRoZSBEMjEwLCBidXQgd2l0aCA4LWJpdCBjaGFyYWN0ZXJzIGFuZCBsb2NhbCBwcmludGVyIHN1cHBvcnQuCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAyIHNldHM6CisjCVxFWzI7MTsxOzF2CisjCQkyOzEJLSA4IGJpdCBvcGVyYXRpb25zCisjCQkxOzEJLSA4IGJpdCAoaW50ZXJuYXRpb25hbCkga2V5Ym9hcmQgbGFuZ3VhZ2UKKyMJXEUoQgkJLSBkZWZhdWx0IHByaW1hcnkgY2hhcmFjdGVyIHNldCAoVS5TLiBBU0NJSSkKKyMJXEUpNAkJLSBkZWZhdWx0IHNlY29uZGFyeSBjaGFyYWN0ZXIgc2V0IChpbnRlcm5hdGlvbmFsKQorIwleTwkJLSBwcmltYXJ5IGNoYXJhY3RlciBzZXQKKyMKK2QyMTF8ZDIxNXxEYXRhIEdlbmVyYWwgREFTSEVSIEQyMTEgc2VyaWVzLAorCWttLAorCWlzMj1cRVsyOzE7MTsxdlxFKEJcRSk0XDAxNywgbWMwPVxFW2ksIHVzZT1kZ2tleXMrOGIsCisJdXNlPWQyMTAsCisKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDIgc2V0czoKKyMJXEVbMjswOzE7MHYKKyMJCTI7MAktIDcgYml0IG9wZXJhdGlvbnMKKyMJCTE7MAktIDcgYml0IChuYXRpdmUpIGtleWJvYXJkIGxhbmd1YWdlCisjCVxFKDAJCS0gZGVmYXVsdCBjaGFyYWN0ZXIgc2V0ICh0aGUga2V5Ym9hcmQgbmF0aXZlIGxhbmd1YWdlKQorIwleTwkJLSBwcmltYXJ5IGNoYXJhY3RlciBzZXQKK2QyMTEtN2J8ZDIxNS03YnxEYXRhIEdlbmVyYWwgREFTSEVSIEQyMTEgc2VyaWVzIGluIDcgYml0IG1vZGUsCisJa21ALAorCWlzMj1cRVsyOzA7MTswdlxFKDBcMDE3LCB1c2U9ZGdrZXlzKzdiLCB1c2U9ZDIxMSwKKworIyBMaWtlIHRoZSBEMjEwIHNlcmllcywgYnV0IGFkZHMgc3VwcG9ydCBmb3IgOC1iaXQgY2hhcmFjdGVycy4KKyMKKyMgUmVzZXQgc3RyaW5nIDIgc2V0czoKKyMJXl5OCS0gc2Vjb25kYXJ5IGNoYXJhY3RlciBzZXQKKyMJXl5GUzA+CS0gOCBiaXQgaW50ZXJuYXRpb25hbCBjaGFyYWN0ZXIgc2V0CisjCV5eTwktIHByaW1hcnkgY2hhcmFjdGVyIHNldAorIwleXkZTMDAJLSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgKG1hdGNoaW5nIHRoZSBuYXRpdmUga2V5Ym9hcmQgbGFuZ3VhZ2UpCisjCitkMjExLWRnfGQyMTUtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjExIHNlcmllcyBpbiBERyBtb2RlLAorCWttLAorCXJzMj1cMDM2TlwwMzZGUzA+XDAzNk9cMDM2RlMwMCwgdXNlPWQyMTAtZGcsCisKK2QyMTYtZGd8ZDIxNmUtZGd8ZDIxNitkZ3xkMjE2ZStkZ3xkMjE3LWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgRDIxNiBzZXJpZXMgaW4gREcgbW9kZSwKKwl1c2U9ZDIxMS1kZywKKworIyBFbmhhbmNlZCBERyBtb2RlIHdpdGggY2hhbmdlcyB0byBiZSBtb3JlIFVOSVggY29tcGF0aWJsZS4KK2QyMTYtdW5peHxkMjE2ZS11bml4fGQyMTYrfGQyMTZlK3xEYXRhIEdlbmVyYWwgREFTSEVSIEQyMTYrIGluIERHLVVOSVggbW9kZSwKKwltYzVpLAorCWl0IzgsCisJYWNzYz1hXDE3N2okayJsIW0jbilxK3QndSZ2KHcleCosIGJsaW5rPV5eUEksCisJY2xlYXI9Xl5QSCwgY3ViMT1eXlBELCBjdWQxPV5eUEIsIGN1ZjE9Xl5QQywgY3V1MT1eXlBBLAorCWVsPV5eUEUsIGhvbWU9Xl5QRiwgaHBhPVwwMjAlcDElY1wxNzcsIGh0PV5JLCBpbmQ9XkosCisJaXMxPVwwMjJcMDAzXDAzNlBAMSwgaXMzPVwwMzZGejAsIGtIT009Xl5QZiwga0xGVD1eXlBkLAorCWtQUlQ9Xl5QMSwga1JJVD1eXlBjLCBrY2xyPV5eUEgsIGtjdWIxPV5eUEQsIGtjdWQxPV5eUEIsCisJa2N1ZjE9Xl5QQywga2N1dTE9Xl5QQSwga2VsPV5eUEUsIGtob21lPV5eUEYsIGtwcnQ9Xl5QMCwKKwltYzA9XDAzNkY/OSwgbWM0PV5eRmEsIG1jNT1eXkZgLCBybWFjcz1cMDM2RlMwMCwKKwlyczI9XDAzNk5cMDM2RlMwRVwwMzZPXDAzNkZTMDAsCisJc2dyPVwwMzYlPyVwMSVwMyV8JXA2JXwldEQlZUUlOyU/JXAyJXA2JXwldFwwMjQlZVwwMjUlO1wwMzZQJT8lcDQldEklZUolOyU/JXAxJXA1JXwldFwwMzQlZVwwMzUlO1wwMzZGUyU/JXA5JXQxMSVlMDAlOywKKwlzZ3IwPVwwMzZQSlwwMjVcMDM1XDAzNkVcMDM2RlMwMCwgc21hY3M9XDAzNkZTMTEsCisJdnBhPVwwMjBcMTc3JXAxJWMsIHVzZT1kZ2tleXMrMTUsIHVzZT1kMjE2LWRnLAorZDIxNi11bml4LTI1fGQyMTYrMjV8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjE2KyBpbiBERy1VTklYIG1vZGUgd2l0aCAyNSBsaW5lcywKKwlsaW5lcyMyNSwKKwlpczM9XDAzNkZ6MiwgdXNlPWQyMTYrLAorCitkMjE3LXVuaXh8RGF0YSBHZW5lcmFsIERBU0hFUiBEMjE3IGluIERHLVVOSVggbW9kZSwKKwl1c2U9ZDIxNi11bml4LAorZDIxNy11bml4LTI1fERhdGEgR2VuZXJhbCBEQVNIRVIgRDIxNyBpbiBERy1VTklYIG1vZGUgd2l0aCAyNSBsaW5lcywKKwl1c2U9ZDIxNi11bml4LTI1LAorCisjIERBU0hFUiBEMjIwIGNvbG9yIHRlcm1pbmFsIGluIEFOU0kgbW9kZS4KKyMgTGlrZSB0aGUgRDQ3MEMgYnV0IHdpdGggZmV3ZXIgY29sb3JzIGFuZCBzY3JlZW4gZWRpdGluZyBmZWF0dXJlcy4KKyMKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDEgc2V0czoKKyMJXEVbPDA7PDE7PDRsCisjCQk8MAktIHNjcm9sbGluZyBlbmFibGVkCisjCQk8MQktIGJsaW5rIGVuYWJsZWQKKyMJCTw0CS0gcHJpbnQgY2hhcmFjdGVycyByZWdhcmRsZXNzIG9mIGF0dHJpYnV0ZXMKKyMJXEVbbQkJLSBhbGwgYXR0cmlidXRlcyBvZmYKKyMgUmVzZXQgc3RyaW5nIDEgc2V0czoKKyMJXEVjCQktIGluaXRpYWwgbW9kZSBkZWZhdWx0cyAoUklTKQorIworZDIyMHxEYXRhIEdlbmVyYWwgREFTSEVSIEQyMjAsCisJbWM1aUAsCisJZGxALCBkbDFALCBpbEAsIGlsMUAsIGlzMT1cRVs8MDs8MTs8NGxcRVttLCBtYzRALCBtYzVALCByczE9XEVjLAorCXVzZT1kZytjb2xvcjgsIHVzZT1kNDcwYywKKworZDIyMC03YnxEYXRhIEdlbmVyYWwgREFTSEVSIEQyMjAgaW4gNyBiaXQgbW9kZSwKKwltYzVpQCwKKwlkbEAsIGRsMUAsIGlsQCwgaWwxQCwgaXMxPVxFWzwwOzwxOzw0bFxFW20sIG1jNEAsIG1jNUAsIHJzMT1cRWMsCisJdXNlPWRnK2NvbG9yOCwgdXNlPWQ0NzBjLTdiLAorCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAzIHNldHM6CisjCS0gZGVmYXVsdCBjdXJzb3IgKHNvbGlkIHJlY3RhbmdsZSkKKyMgUmVzZXQgc3RyaW5nIDIgc2V0czoKKyMJXl5OICAgICAtIHNlY29uZGFyeSBjaGFyYWN0ZXIgc2V0CisjCV5eRlMwPiAgLSA4IGJpdCBpbnRlcm5hdGlvbmFsIGNoYXJhY3RlciBzZXQKKyMJXl5PICAgICAtIHByaW1hcnkgY2hhcmFjdGVyIHNldAorIyAgICAgICBeXkZTMDAgIC0gZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IChtYXRjaGluZyB0aGUgbmF0aXZlIGtleWJvYXJkIGxhbmd1YWdlKQorIworZDIyMC1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQyMjAgY29sb3IgdGVybWluYWwgaW4gREcgbW9kZSwKKwltYzVpQCwKKwlkbDFALCBob21lQCwgaWwxQCwgaXMyQCwgaXMzPVwwMzZGUTIsIGxsQCwgbWM0QCwgbWM1QCwgcnMxQCwKKwlyczI9XDAzNk5cMDM2RlMwPlwwMzZPXDAzNkZTMDAsIHVzZT1kZ21vZGUrY29sb3I4LAorCXVzZT1kNDcwYy1kZywKKworIyBEQVNIRVIgRDIzMEMgY29sb3IgdGVybWluYWwgaW4gQU5TSSBtb2RlLgorIyBMaWtlIHRoZSBEMjIwIGJ1dCB3aXRoIG1pbm9yIEFOU0kgY29tcGF0aWJpbGl0eSBpbXByb3ZlbWVudHMuCisjCitkMjMwY3xkMjMwfERhdGEgR2VuZXJhbCBEQVNIRVIgRDIzMEMsCisJYmxpbms9XEVbNTs1MG0sIGJvbGQ9XEVbNDs3OzUwbSwgZGltPVxFWzI7NTBtLCBuZWw9Xk1eSiwKKwlyZXY9XEVbNzs1MG0sIHJta3g9XEVbMjsxdiwgcm1zbz1cRVs1MG0sIHJtdWw9XEVbNTBtLAorCXNncj1cRVs1MCU/JXAxJXAzJXwlcDYlfCV0OzclezF9JWUlezB9JTslUFIlPyVwNCV0OzUlezF9JWUlezB9JTslUEIlPyVwMiVwNiV8JXQ7NCV7MX0lZSV7MH0lOyVQVSU/JXAxJXA1JXwldDsyJXsxfSVlJXswfSU7JVBEbVxFKSU/JXA5JXQ2XDAxNiVlNFwwMTclOywKKwlzZ3IwPVxFWzUwbVxFKTRcMDE3LCBzbWt4PVxFWzI7MHYsIHNtc289XEVbMjs3OzUwbSwKKwlzbXVsPVxFWzQ7NTBtLCB1c2U9ZGdrZXlzKzdiLCB1c2U9ZDIyMCwKKworZDIzMGMtZGd8ZDIzMC1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQyMzBDIGluIERHIG1vZGUsCisJdXNlPWQyMjAtZGcsCisKKyMgREFTSEVSIEQ0MDAvRDQ1MCBzZXJpZXMgdGVybWluYWxzLgorIyBUaGVzZSBhZGQgaW50ZWxsaWdlbnQgZmVhdHVyZXMgbGlrZSBpbnNlcnQvZGVsZXRlIHRvIHRoZSBEMjAwIHNlcmllcy4KKyMKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDIgc2V0czoKKyMJXl5GUTIJCS0gZGVmYXVsdCBjdXJzb3IgKHNvbGlkIHJlY3RhbmdsZSkKKyMJXl5GVwkJLSBjaGFyYWN0ZXIgcHJvdGVjdGlvbiBkaXNhYmxlZAorIwleXkZKCQktIG5vcm1hbCAoODAgY29sdW1uKSBtb2RlCisjCV5eRlxeCQktIGhvcml6b250YWwgc2Nyb2xsaW5nIGVuYWJsZWQgKGZvciBhbGlnbm1lbnQpCisjCV5eRlgwMDQ/CS0gbWFyZ2lucyBhdCBjb2x1bW5zIDAgYW5kIDc5CisjCV5eRl0JCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZGlzYWJsZWQKKyMJXl5PCQktIHByaW1hcnkgY2hhcmFjdGVyIHNldAorIwleXkZTMDAJCS0gZGVmYXVsdCBjaGFyYWN0ZXIgc2V0ICh0aGUga2V5Ym9hcmQgbmF0aXZlIGxhbmd1YWdlKQorIwktIChzaG91bGQgcmVzZXQgc2Nyb2xsaW5nIHJlZ2lvbnMsIGJ1dCB0aGF0IGdsaXRjaGVzIHRoZSBzY3JlZW4pCisjIFJlc2V0IHN0cmluZyAxIHNldHM6CisjCV5eRkEJCS0gYWxsIHRlcm1pbmFsIGRlZmF1bHRzIGV4Y2VwdCBzY3JvbGwgcmF0ZQorIyBSZXNldCBzdHJpbmcgMiBzZXRzOgorIwleXkZdCQktIGhvcml6b250YWwgc2Nyb2xsaW5nIGRpc2FibGVkCisjCV5eRlQwCQktIGp1bXAgc2Nyb2xsaW5nCisjCitkNDAwfGQ0MDAtZGd8ZDQ1MHxkNDUwLWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQwMC9ENDUwIHNlcmllcywKKwltYzVpLAorCWFjc2M9aiRrImwhbSNuKXErdCd1JnYodyV4KiwgY2l2aXM9XDAzNkZRMCwKKwljbm9ybT1cMDM2RlEyLCBkY2gxPV5eSywgZGwxPV5eRkksCisJZW5hY3M9XDAzNk5cMDM2RlMxMVwwMzZPLCBob21lPV5eRkcsIGhwYT1cMDIwJXAxJWNcMTc3LAorCWljaDE9Xl5KLCBpbDE9Xl5GSCwKKwlpczI9XDAzNkZRMlwwMzZGV1wwMzZGSlwwMzZGXF5cMDM2RlgwMDQ/XDAzNkZdXDAzNk9cMDM2RlMwMCwKKwlsbD1cMDM2RkdcMDI3LCBtYzQ9Xl5GYSwgbWM1PV5eRmAsIHJpPV5eSSwgcm1hY3M9Xl5PLAorCXJzMT1eXkZBLCByczI9XDAzNkZdXDAzNkZUMCwKKwlzZ3I9XDAzNiU/JXAxJXAzJXwlcDYlfCV0RCVlRSU7JT8lcDIlcDYlfCV0XDAyNCVlXDAyNSU7JT8lcDQldFwwMTYlZVwwMTclOyU/JXAxJXA1JXwldFwwMzQlZVwwMzUlO1wwMzYlPyVwOSV0TiVlTyU7LAorCXNncjA9XDAxN1wwMjVcMDM1XDAzNkVcMDM2Tywgc21hY3M9Xl5OLAorCXZwYT1cMDIwXDE3NyVwMSVjLCB1c2U9ZDIxMC1kZywKKworIyBEQVNIRVIgRDQxMC9ENDYwIHNlcmllcyB0ZXJtaW5hbHMgaW4gQU5TSSBtb2RlLgorIyBUaGVzZSBhZGQgYSBsYXJnZSBudW1iZXIgb2YgaW50ZWxsaWdlbnQgdGVybWluYWwgZmVhdHVyZXMuCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAxIHNldHM6CisjCVxFWzwwOzwxOzwyOzw0bAorIwkJPDAJLSBzY3JvbGxpbmcgZW5hYmxlZAorIwkJPDEJLSBibGluayBlbmFibGVkCisjCQk8MgktIGhvcml6b250YWwgc2Nyb2xsaW5nIGVuYWJsZWQgKGZvciBhbGlnbm1lbnQpCisjCQk8NAktIHByaW50IGNoYXJhY3RlcnMgcmVnYXJkbGVzcyBvZiBhdHRyaWJ1dGVzCisjCVxFWzU7MHYJCS0gbm9ybWFsICg4MCBjb2x1bW4pIG1vZGUKKyMJXEVbMTsxOzgwdwktIG1hcmdpbnMgYXQgY29sdW1ucyAxIGFuZCA4MAorIwlcRVsxOzY7PDJoCisjCQkxCS0gcHJpbnQgYWxsIGNoYXJhY3RlcnMgZXZlbiBpZiBwcm90ZWN0ZWQKKyMJCTYJLSBjaGFyYWN0ZXIgcHJvdGVjdGlvbiBkaXNhYmxlZAorIwkJPDIJLSBob3Jpem9udGFsIHNjcm9sbGluZyBkaXNhYmxlZAorIwktIChzaG91bGQgcmVzZXQgc2Nyb2xsaW5nIHJlZ2lvbnMsIGJ1dCB0aGF0IGdsaXRjaGVzIHRoZSBzY3JlZW4pCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAyIHNldHM6CisjCVxFWzM7MjsyOzE7MTsxdgorIwkJMzsyCS0gZGVmYXVsdCBjdXJzb3IgKHNvbGlkIHJlY3RhbmdsZSkKKyMJCTI7MQktIDggYml0IG9wZXJhdGlvbnMKKyMJCTE7MQktIGludGVybmF0aW9uYWwga2V5Ym9hcmQgbGFuZ3VhZ2UKKyMJXEUoQgkJLSBkZWZhdWx0IHByaW1hcnkgY2hhcmFjdGVyIHNldCAoVS5TLiBBU0NJSSkKKyMJXEUpNAkJLSBkZWZhdWx0IHNlY29uZGFyeSBjaGFyYWN0ZXIgc2V0IChpbnRlcm5hdGlvbmFsKQorIwleTwkJLSBwcmltYXJ5IGNoYXJhY3RlciBzZXQKKyMKKyMJUmVzZXQgc3RyaW5nIDEgc2V0czoKKyMJXEVjCQktIGluaXRpYWwgbW9kZSBkZWZhdWx0cyAoUklTKQorIwlcRVs8MmgJCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZGlzYWJsZWQKKyMKKyMgUmVzZXQgc3RyaW5nIDIgc2V0czoKKyMJXEVbNDswOzI7MTsxOzF2CisjCQk0OzAJLSBqdW1wIHNjcm9sbGluZworIwkJMjsxCS0gOCBiaXQgb3BlcmF0aW9ucworIwkJMTsxCS0gOCBiaXQgKGludGVybmF0aW9uYWwpIGtleWJvYXJkIGxhbmd1YWdlCisjCVxFKEIJCS0gZGVmYXVsdCBwcmltYXJ5IGNoYXJhY3RlciBzZXQgKFUuUy4gQVNDSUkpCisjCVxFKTQJCS0gZGVmYXVsdCBzZWNvbmRhcnkgY2hhcmFjdGVyIHNldCAoaW50ZXJuYXRpb25hbCkKKyMKK2Q0MTB8ZDQxMXxkNDYwfGQ0NjF8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEwL0Q0NjAgc2VyaWVzLAorCW1jNWksCisJYWNzYz1qJGsibCFtI24pcSt0J3Umdih3JXgqLCBjaXZpcz1cRVszOzB2LAorCWNub3JtPVxFWzM7MnYsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsCisJaXMxPVxFWzwwOzwxOzwyOzw0bFxFWzU7MHZcRVsxOzE7ODB3XEVbMTs2OzwyaCwKKwlpczI9XEVbMzsyOzI7MTsxOzF2XEUoQlxFKTRcMDE3LCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwKKwlyaT1cRU0sIHJtYWNzPVxFKTRcMDE3LCByczE9XEVjXEVbPDJoLAorCXJzMj1cRVs0OzA7MjsxOzE7MXZcRShCXEUpNCwKKwlzZ3I9XEVbJT8lcDElcDMlfCVwNiV8JXQ3OyU7JT8lcDQldDU7JTslPyVwMiVwNiV8JXQ0OyU7JT8lcDElcDUlfCV0MjslO21cRSklPyVwOSV0NlwwMTYlZTRcMDE3JTssCisJc2dyMD1cRVttXEUpNFwwMTcsIHNtYWNzPVxFKTZcMDE2LCB1c2U9ZDIxMSwKKworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMiBzZXRzOgorIwlcRVszOzI7MjswOzE7MHYKKyMJCTM7MgktIGRlZmF1bHQgY3Vyc29yIChzb2xpZCByZWN0YW5nbGUpCisjCQkyOzAJLSA3IGJpdCBvcGVyYXRpb25zCisjCQkxOzAJLSA3IGJpdCAobmF0aXZlKSBrZXlib2FyZCBsYW5ndWFnZQorIwlcRSgwCQktIGRlZmF1bHQgY2hhcmFjdGVyIHNldCAodGhlIGtleWJvYXJkIG5hdGl2ZSBsYW5ndWFnZSkKKyMJXk8JCS0gcHJpbWFyeSBjaGFyYWN0ZXIgc2V0CisjCisjIFJlc2V0IHN0cmluZyAyIHNldHM6CisjCVxFWzQ7MDsyOzA7MTswdgorIwkJNDswCS0ganVtcCBzY3JvbGxpbmcKKyMJCTI7MAktIDcgYml0IG9wZXJhdGlvbnMKKyMJCTE7MAktIDcgYml0IChuYXRpdmUpIGtleWJvYXJkIGxhbmd1YWdlCisjCVxFKDAJCS0gZGVmYXVsdCBjaGFyYWN0ZXIgc2V0ICh0aGUga2V5Ym9hcmQgbmF0aXZlIGxhbmd1YWdlKQorIworZDQxMC03YnxkNDExLTdifGQ0NjAtN2J8ZDQ2MS03YnxEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTAvRDQ2MCBzZXJpZXMgaW4gNyBiaXQgbW9kZSwKKwlrbUAsCisJZW5hY3M9XEUpNiwgaXMyPVxFWzM7MjsyOzA7MTswdlxFKDBcMDE3LCBybWFjcz1eTywKKwlyczI9XEVbNDswOzI7MDsxOzB2XEUoMCwKKwlzZ3I9XEVbJT8lcDElcDMlfCVwNiV8JXQ3OyU7JT8lcDQldDU7JTslPyVwMiVwNiV8JXQ0OyU7JT8lcDElcDUlfCV0MjslO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XEVbbVwwMTcsIHNtYWNzPV5OLCB1c2U9ZGdrZXlzKzdiLCB1c2U9ZDQxMCwKKworZDQxMC1kZ3xkNDYwLWRnfGQ0MTEtZGd8ZDQ2MS1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTAvRDQ2MCBzZXJpZXMgaW4gREcgbW9kZSwKKwlrbSwKKwllbmFjc0AsIHJtYWNzPVwwMzZGUzAwLAorCXNncj1cMDM2JT8lcDElcDMlfCVwNiV8JXREJWVFJTslPyVwMiVwNiV8JXRcMDI0JWVcMDI1JTslPyVwNCV0XDAxNiVlXDAxNyU7JT8lcDElcDUlfCV0XDAzNCVlXDAzNSU7XDAzNkZTJT8lcDkldDExJWUwMCU7LAorCXNncjA9XDAxN1wwMjVcMDM1XDAzNkVcMDM2RlMwMCwgc21hY3M9XDAzNkZTMTEsCisJdXNlPWQ0MDAtZGcsCisKKyMgREFTSEVSIEQ0MTAvRDQ2MCBzZXJpZXMgdGVybWluYWxzIGluIHdpZGUgKDEyNiBjb2x1bW5zKSBBTlNJIG1vZGUuCisjCisjIEluaXRpYWxpemF0aW9uIHN0cmluZyAxIHNldHM6CisjCVxFWzwwOzwxOzwyOzw0bAorIwkJPDAJLSBzY3JvbGxpbmcgZW5hYmxlZAorIwkJPDEJLSBibGluayBlbmFibGVkCisjCQk8MgktIGhvcml6b250YWwgc2Nyb2xsaW5nIGVuYWJsZWQgKGZvciBhbGlnbm1lbnQpCisjCQk8NAktIHByaW50IGNoYXJhY3RlcnMgcmVnYXJkbGVzcyBvZiBhdHRyaWJ1dGVzCisjCVxFWzU7MXYJCS0gY29tcHJlc3NlZCAoMTM1IGNvbHVtbikgbW9kZQorIwlcRVsxOzE7MTI2CS0gbWFyZ2lucyBhdCBjb2x1bW5zIDEgYW5kIDEyNgorIwlcRVsxOzY7PDJoCisjCQkxCS0gcHJpbnQgYWxsIGNoYXJhY3RlcnMgZXZlbiBpZiBwcm90ZWN0ZWQKKyMJCTYJLSBjaGFyYWN0ZXIgcHJvdGVjdGlvbiBkaXNhYmxlZAorIwkJPDIJLSBob3Jpem9udGFsIHNjcm9sbGluZyBkaXNhYmxlZAorIwktIChzaG91bGQgcmVzZXQgc2Nyb2xsaW5nIHJlZ2lvbnMsIGJ1dCB0aGF0IGdsaXRjaGVzIHRoZSBzY3JlZW4pCisjCisjIFJlc2V0IHN0cmluZyAxIHNldHM6CisjCVxFYwkJLSBpbml0aWFsIG1vZGUgZGVmYXVsdHMgKFJJUykKKyMJXEVbNTsxdgkJLSBjb21wcmVzc2VkICgxMzUgY29sdW1uKSBtb2RlCisjCVxFWzE7MTsxMjZ3CS0gbWFyZ2lucyBhdCBjb2x1bW5zIDEgYW5kIDEyNgorIwlcRVs8MmgJCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZGlzYWJsZWQKKyMKK2Q0MTAtd3xkNDExLXd8ZDQ2MC13fGQ0NjEtd3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTAvRDQ2MCBzZXJpZXMgaW4gd2lkZSBtb2RlLAorCWNvbHMjMTI2LAorCWlzMT1cRVs8MDs8MTs8Mjs8NGxcRVs1OzF2XEVbMTsxOzEyNndcRVsxOzY7PDJoLAorCXJzMT1cRWNcRVs1OzF2XEVbMTsxOzEyNndcRVs8MmgsIHVzZT1kNDEwLAorCitkNDEwLTdiLXd8ZDQxMS03Yi13fGQ0NjAtN2Itd3xkNDYxLTdiLXd8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEwL0Q0NjAgc2VyaWVzIGluIHdpZGUgNyBiaXQgbW9kZSwKKwljb2xzIzEyNiwKKwlpczE9XEVbPDA7PDE7PDI7PDRsXEVbNTsxdlxFWzE7MTsxMjZ3XEVbMTs2OzwyaCwKKwlyczE9XEVjXEVbNTsxdlxFWzE7MTsxMjZ3XEVbPDJoLCB1c2U9ZDQxMC03YiwKKworZDQxMi1kZ3xkNDYyLWRnfGQ0NjJlLWRnfGQ0MTIrZGd8ZDQ2MitkZ3xkNDEzLWRnfGQ0NjMtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEyL0Q0NjIgc2VyaWVzIGluIERHIG1vZGUsCisJdXNlPWQ0MTAtZGcsCisKKyMgVGhlc2UgYWRkIGludGVsbGlnZW50IGZlYXR1cmVzIGxpa2Ugc2Nyb2xsaW5nIHJlZ2lvbnMuCitkNDEyLXVuaXh8ZDQ2Mi11bml4fGQ0MTIrfGQ0NjIrfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMisvRDQ2Misgc2VyaWVzIGluIFVuaXggbW9kZSwKKwljaXZpcz1cMDM2RlEwLCBjbGVhcj1eXkZFLCBjbm9ybT1cMDM2RlE1LAorCWN1cD1cMDM2RlAlcDIlMi4yWCVwMSUyLjJYLCBkY2gxPV5eSywgZGwxPV5eRkksCisJaG9tZT1eXkZHLCBocGE9XDAzNkZQJXAxJTIuMlhGRiwgaWNoMT1eXkosIGlsMT1eXkZILAorCWlzMj1cMDM2RlE1XDAzNkZXXDAzNkZKXDAzNkZcXlwwMzZGWDAwNEZcMDM2T1wwMzZGUzAwLAorCWxsPVwwMzZGR1wwMzZQQSwgbWMwPV5BLCByYz1cMDM2Rn0xMSwgcmk9Xl5JLAorCXJzMT1cMDM2RkFcMDM2RlQwLCByczI9XDAzNlBAMSwgc2M9XDAzNkZ9MTAsCisJdnBhPVwwMzZGUEZGJXAxJTIuMlgsCisJd2luZD1cMDM2RkIlPyVwMSV0JXAxJTIuMlgwJTslcDIlcDElLSV7MX0lKyUyLjJYMCU/JXsyM30lcDIlPiV0MDAwJTtcMDM2RlglcDMlMi4yWCVwNCUyLjJYLAorCXVzZT1kMjE2KywKK2Q0MTItdW5peC13fGQ0NjItdW5peC13fGQ0MTIrd3xkNDYyK3d8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEyKy9ENDYyKyBzZXJpZXMgaW4gd2lkZSBVbml4IG1vZGUsCisJY29scyMxMzIsCisJaXMyPVwwMzZGUTVcMDM2RldcMDM2RktcMDM2RlxeXDAzNkZYMDA4M1wwMzZPXDAzNkZTMDAsCisJcnMyPVwwMzZQQDFcMDM2RktcMDM2RlgwMDgzLAorCXdpbmQ9XDAzNkZCJT8lcDEldCVwMSUyLjJYMSU7JXAyJXAxJS0lezF9JSslMi4yWDElPyV7MjN9JXAyJT4ldDAwMSU7XDAzNkZYJXAzJTIuMlglcDQlMi4yWCwKKwl1c2U9ZDQxMi11bml4LAorZDQxMi11bml4LTI1fGQ0NjItdW5peC0yNXxkNDEyKzI1fGQ0NjIrMjV8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEyKy9ENDYyKyBzZXJpZXMgaW4gVW5peCBtb2RlIHdpdGggMjUgbGluZXMsCisJbGluZXMjMjUsCisJaXMzPVwwMzZGejIsCisJd2luZD1cMDM2RkIlPyVwMSV0JXAxJTIuMlgwJTslcDIlcDElLSV7MX0lKyUyLjJYMCU/JXsyNH0lcDIlPiV0MDAwJTtcMDM2RlglcDMlMi4yWCVwNCUyLjJYLAorCXVzZT1kNDYyKywKK2Q0MTItdW5peC1zfGQ0NjItdW5peC1zfGQ0MTIrc3xkNDYyK3N8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEyKy9ENDYyKyBpbiBVbml4IG1vZGUgd2l0aCBzdGF0dXMgbGluZSwKKwllc2xvaywgaHMsCisJY2xlYXI9XDAzNkZHXDAzNlBILCBmc2w9XDAzNkZ9MDFcMDIyLAorCWlzMz1cMDM2RnoyXDAzNkZ9MDBcMDM2RkIxODAwMDBcMDM2Rn0wMSwgbGxALAorCXRzbD1cMDM2Rn0wMFwwMzZGUCVwMSUyLjJYMThcMDM2UEcsCisJd2luZD1cMDM2RkIlPyVwMSV0JXAxJTIuMlgwJTslcDIlcDElLSV7MX0lKyUyLjJYMCU/JXsyM30lcDIlPiV0JXsyM30lcDIlLSUyLjJYMCU7MDAwXDAzNkZYJXAzJTIuMlglcDQlMi4yWCwKKwl1c2U9ZDQ2MissCisKKyMJUmVsYXRpdmUgY3Vyc29yIG1vdGlvbnMgYXJlIGNvbmZpbmVkIHRvIHRoZSBjdXJyZW50IHdpbmRvdywKKyMJd2hpY2ggaXMgbm90IHdoYXQgdGhlIHNjcm9sbGluZyByZWdpb24gc3BlY2lmaWNhdGlvbiBleHBlY3RzLgorIwlUaHVzLCByZWxhdGl2ZSB2ZXJ0aWNhbCBjdXJzb3IgcG9zaXRpb25pbmcgbXVzdCBiZSBkZWxldGVkLgorZDQxMi11bml4LXNyfGQ0NjItdW5peC1zcnxkNDEyK3NyfGQ0NjIrc3J8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEyKy9ENDYyKyBpbiBVbml4IG1vZGUgd2l0aCBzY3JvbGxpbmcgcmVnaW9uLAorCWNzcj1cMDM2RkIlPyVwMSV0JXAxJTIuMlgwJTslcDIlcDElLSV7MX0lKyUyLjJYMCU/JXsyM30lcDIlPiV0MDAwJTssCisJY3VkMUAsIGN1dTFALCBsbEAsIHVzZT1kNDYyKywKKworZDQxMy11bml4fGQ0NjMtdW5peHxEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTMvRDQ2MyBzZXJpZXMgaW4gREctVU5JWCBtb2RlLAorCXVzZT1kNDEyLXVuaXgsCitkNDEzLXVuaXgtd3xkNDYzLXVuaXgtd3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTMvRDQ2MyBzZXJpZXMgaW4gd2lkZSBERy1VTklYIG1vZGUsCisJdXNlPWQ0MTItdW5peC13LAorZDQxMy11bml4LTI1fGQ0NjMtdW5peC0yNXxEYXRhIEdlbmVyYWwgREFTSEVSIEQ0MTMvRDQ2MyBzZXJpZXMgaW4gREctVU5JWCBtb2RlIHdpdGggMjUgbGluZXMsCisJdXNlPWQ0MTItdW5peC0yNSwKK2Q0MTMtdW5peC1zfGQ0NjMtdW5peC1zfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQxMy9ENDYzIGluIERHLVVOSVggbW9kZSB3aXRoIHN0YXR1cyBsaW5lLAorCXVzZT1kNDEyLXVuaXgtcywKK2Q0MTMtdW5peC1zcnxkNDYzLXVuaXgtc3J8RGF0YSBHZW5lcmFsIERBU0hFUiBENDEzL0Q0NjMgaW4gREctVU5JWCBtb2RlIHdpdGggc2Nyb2xsaW5nIHJlZ2lvbiwKKwl1c2U9ZDQxMi11bml4LXNyLAorCitkNDE0LXVuaXh8ZDQ2NC11bml4fERhdGEgR2VuZXJhbCBENDE0L0Q0NjQgaW4gREctVU5JWCBtb2RlLAorCXVzZT1kNDEzLXVuaXgsCitkNDE0LXVuaXgtd3xkNDY0LXVuaXgtd3xEYXRhIEdlbmVyYWwgRDQxNC9ENDY0IGluIHdpZGUgREctVU5JWCBtb2RlLAorCXVzZT1kNDEzLXVuaXgtdywKK2Q0MTQtdW5peC0yNXxkNDY0LXVuaXgtMjV8RGF0YSBHZW5lcmFsIEQ0MTQvRDQ2NCBpbiBERy1VTklYIG1vZGUgd2l0aCAyNSBsaW5lcywKKwl1c2U9ZDQxMy11bml4LTI1LAorZDQxNC11bml4LXN8ZDQ2NC11bml4LXN8RGF0YSBHZW5lcmFsIEQ0MTQvRDQ2NCBpbiBERy1VTklYIG1vZGUgd2l0aCBzdGF0dXMgbGluZSwKKwl1c2U9ZDQxMy11bml4LXMsCitkNDE0LXVuaXgtc3J8ZDQ2NC11bml4LXNyfERhdGEgR2VuZXJhbCBENDE0L0Q0NjQgaW4gREctVU5JWCBtb2RlIHdpdGggc2Nyb2xsaW5nIHJlZ2lvbiwKKwl1c2U9ZDQxMy11bml4LXNyLAorCitkNDMwYy1kZ3xkNDMwLWRnfERhdGEgR2VuZXJhbCBENDMwQyBpbiBERyBtb2RlLAorCXVzZT1kNDEzLWRnLCB1c2U9ZGcrZml4ZWQsCitkNDMwYy1kZy1jY2N8ZDQzMC1kZy1jY2N8RGF0YSBHZW5lcmFsIEQ0MzBDIGluIERHIG1vZGUgd2l0aCBjb25maWd1cmFibGUgY29sb3JzLAorCXVzZT1kNDEzLWRnLCB1c2U9ZGcrY2NjLAorCitkNDMwYy11bml4fGQ0MzAtdW5peHxEYXRhIEdlbmVyYWwgRDQzMEMgaW4gREctVU5JWCBtb2RlLAorCXVzZT1kNDEzLXVuaXgsIHVzZT1kZ3VuaXgrZml4ZWQsCitkNDMwYy11bml4LXd8ZDQzMC11bml4LXd8RGF0YSBHZW5lcmFsIEQ0MzBDIGluIHdpZGUgREctVU5JWCBtb2RlLAorCXVzZT1kNDEzLXVuaXgtdywgdXNlPWRndW5peCtmaXhlZCwKK2Q0MzBjLXVuaXgtMjV8ZDQzMC11bml4LTI1fERhdGEgR2VuZXJhbCBENDMwQyBpbiBERy1VTklYIG1vZGUgd2l0aCAyNSBsaW5lcywKKwl1c2U9ZDQxMy11bml4LTI1LCB1c2U9ZGd1bml4K2ZpeGVkLAorZDQzMGMtdW5peC1zfGQ0MzAtdW5peC1zfERhdGEgR2VuZXJhbCBENDMwQyBpbiBERy1VTklYIG1vZGUgd2l0aCBzdGF0dXMgbGluZSwKKwl1c2U9ZDQxMy11bml4LXMsIHVzZT1kZ3VuaXgrZml4ZWQsCitkNDMwYy11bml4LXNyfGQ0MzAtdW5peC1zcnxEYXRhIEdlbmVyYWwgRDQzMEMgaW4gREctVU5JWCBtb2RlIHdpdGggc2Nyb2xsaW5nIHJlZ2lvbiwKKwl1c2U9ZDQxMy11bml4LXNyLCB1c2U9ZGd1bml4K2ZpeGVkLAorZDQzMGMtdW5peC1jY2N8ZDQzMC11bml4LWNjY3xEYXRhIEdlbmVyYWwgRDQzMEMgaW4gREctVU5JWCBtb2RlIHdpdGggY29uZmlndXJhYmxlIGNvbG9ycywKKwl1c2U9ZDQxMy11bml4LCB1c2U9ZGd1bml4K2NjYywKK2Q0MzBjLXVuaXgtdy1jY2N8ZDQzMC11bml4LXctY2NjfERhdGEgR2VuZXJhbCBENDMwQyBpbiB3aWRlIERHLVVOSVggbW9kZSB3aXRoIGNvbmZpZ3VyYWJsZSBjb2xvcnMsCisJdXNlPWQ0MTMtdW5peC13LCB1c2U9ZGd1bml4K2NjYywKK2Q0MzBjLXVuaXgtMjUtY2NjfGQ0MzAtdW5peC0yNS1jY2N8RGF0YSBHZW5lcmFsIEQ0MzBDIGluIERHLVVOSVggbW9kZSB3aXRoIDI1IGxpbmVzIGFuZCBjb25maWd1cmFibGUgY29sb3JzLAorCXVzZT1kNDEzLXVuaXgtMjUsIHVzZT1kZ3VuaXgrY2NjLAorZDQzMGMtdW5peC1zLWNjY3xkNDMwLXVuaXgtcy1jY2N8RGF0YSBHZW5lcmFsIEQ0MzBDIGluIERHLVVOSVggbW9kZSB3aXRoIHN0YXR1cyBsaW5lIGFuZCBjb25maWd1cmFibGUgY29sb3JzLAorCXVzZT1kNDEzLXVuaXgtcywgdXNlPWRndW5peCtjY2MsCitkNDMwYy11bml4LXNyLWNjY3xkNDMwLXVuaXgtc3ItY2NjfERhdGEgR2VuZXJhbCBENDMwQyBpbiBERy1VTklYIG1vZGUgd2l0aCBzY3JvbGxpbmcgcmVnaW9uIGFuZCBjb25maWd1cmFibGUgY29sb3JzLAorCXVzZT1kNDEzLXVuaXgtc3IsIHVzZT1kZ3VuaXgrY2NjLAorCisjIERBU0hFUiBENDcwQyBjb2xvciB0ZXJtaW5hbCBpbiBBTlNJIG1vZGUuCisjIExpa2UgdGhlIEQ0NjAgYnV0IHdpdGggMTYgY29sb3JzIGFuZCB3aXRob3V0IGEgY29tcHJlc3NlZCBtb2RlLgorIworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMSBzZXRzOgorIwlcRVs8MDs8MTs8Mjs8NGwKKyMJCTwwCS0gc2Nyb2xsaW5nIGVuYWJsZWQKKyMJCTwxCS0gYmxpbmsgZW5hYmxlZAorIwkJPDIJLSBob3Jpem9udGFsIHNjcm9sbGluZyBlbmFibGVkIChmb3IgYWxpZ25tZW50KQorIwkJPDQJLSBwcmludCBjaGFyYWN0ZXJzIHJlZ2FyZGxlc3Mgb2YgYXR0cmlidXRlcworIwlcRVsxOzE7ODB3CS0gbWFyZ2lucyBhdCBjb2x1bW5zIDEgYW5kIDgwCisjCVxFWzE7Njs8MmgKKyMJCTEJLSBwcmludCBhbGwgY2hhcmFjdGVycyBldmVuIGlmIHByb3RlY3RlZAorIwkJNgktIGNoYXJhY3RlciBwcm90ZWN0aW9uIGRpc2FibGVkCisjCQk8MgktIGhvcml6b250YWwgc2Nyb2xsaW5nIGRpc2FibGVkCisjCS0gKHNob3VsZCByZXNldCBzY3JvbGxpbmcgcmVnaW9ucywgYnV0IHRoYXQgZ2xpdGNoZXMgdGhlIHNjcmVlbikKKyMKK2Q0NzBjfGQ0NzB8RGF0YSBHZW5lcmFsIERBU0hFUiBENDcwQywKKwlpczE9XEVbPDA7PDE7PDI7PDRsXEVbMTsxOzgwd1xFWzE7Njs8MmgsCisJc2dyPVxFWyU/JXAxJXAzJXwlcDYlfCV0NzslezF9JWUlezB9JTslUFIlPyVwNCV0NTslezF9JWUlezB9JTslUEIlPyVwMiVwNiV8JXQ0OyV7MX0lZSV7MH0lOyVQVSU/JXAxJXA1JXwldDI7JXsxfSVlJXswfSU7JVBEbVxFKSU/JXA5JXQ2XDAxNiVlNFwwMTclOywKKwl1c2U9ZGcrY29sb3IsIHVzZT1kNDYwLAorCitkNDcwYy03YnxkNDcwLTdifERhdGEgR2VuZXJhbCBEQVNIRVIgRDQ3MEMgaW4gNyBiaXQgbW9kZSwKKwlpczE9XEVbPDA7PDE7PDI7PDRsXEVbMTsxOzgwd1xFWzE7Njs8MmgsCisJc2dyPVxFWyU/JXAxJXAzJXwlcDYlfCV0NzslezF9JWUlezB9JTslUFIlPyVwNCV0NTslezF9JWUlezB9JTslUEIlPyVwMiVwNiV8JXQ0OyV7MX0lZSV7MH0lOyVQVSU/JXAxJXA1JXwldDI7JXsxfSVlJXswfSU7JVBEbSU/JXA5JXRcMDE2JWVcMDE3JTssCisJdXNlPWRnK2NvbG9yLCB1c2U9ZDQ2MC03YiwKKworIyBJbml0aWFsaXphdGlvbiBzdHJpbmcgMiBzZXRzOgorIwleXkZRMgkJLSBkZWZhdWx0IGN1cnNvciAoc29saWQgcmVjdGFuZ2xlKQorIwleXkZXCQktIGNoYXJhY3RlciBwcm90ZWN0aW9uIGRpc2FibGVkCisjCV5eRlxeCQktIGhvcml6b250YWwgc2Nyb2xsaW5nIGVuYWJsZWQgKGZvciBhbGlnbm1lbnQpCisjCV5eRlgwMDQ/CS0gbWFyZ2lucyBhdCBjb2x1bW5zIDAgYW5kIDc5CisjCV5eRl0JCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZGlzYWJsZWQKKyMJXl5PCQktIHByaW1hcnkgY2hhcmFjdGVyIHNldAorIwleXkZTMDAJCS0gZGVmYXVsdCBjaGFyYWN0ZXIgc2V0ICh0aGUga2V5Ym9hcmQgbmF0aXZlIGxhbmd1YWdlKQorIwktIChzaG91bGQgcmVzZXQgc2Nyb2xsaW5nIHJlZ2lvbnMsIGJ1dCB0aGF0IGdsaXRjaGVzIHRoZSBzY3JlZW4pCisjCitkNDcwYy1kZ3xkNDcwLWRnfERhdGEgR2VuZXJhbCBEQVNIRVIgRDQ3MEMgaW4gREcgbW9kZSwKKwlpczI9XDAzNkZRMlwwMzZGV1wwMzZGXF5cMDM2RlgwMDQ/XDAzNkZdXDAzNk9cMDM2RlMwMCwKKwl1c2U9ZGdtb2RlK2NvbG9yLCB1c2U9ZDQ2MC1kZywKKworIyBEQVNIRVIgRDU1NSB0ZXJtaW5hbCBpbiBBTlNJIG1vZGUuCisjIExpa2UgYSBENDExLCBidXQgaGFzIGFuIGludGVncmF0ZWQgcGhvbmUuCitkNTU1fERhdGEgR2VuZXJhbCBEQVNIRVIgRDU1NSwKKwl1c2U9ZDQxMSwKK2Q1NTUtN2J8RGF0YSBHZW5lcmFsIERBU0hFUiBENTU1IGluIDctYml0IG1vZGUsCisJdXNlPWQ0MTEtN2IsCitkNTU1LXd8RGF0YSBHZW5lcmFsIERBU0hFUiBENTU1IGluIHdpZGUgbW9kZSwKKwl1c2U9ZDQxMS13LAorZDU1NS03Yi13fERhdGEgR2VuZXJhbCBEQVNIRVIgRDU1NSBpbiB3aWRlIDctYml0IG1vZGUsCisJdXNlPWQ0MTEtN2ItdywKK2Q1NTUtZGd8RGF0YSBHZW5lcmFsIERBU0hFUiBENTU1IHNlcmllcyBpbiBERyBtb2RlLAorCXVzZT1kNDExLWRnLAorCisjIERBU0hFUiBENTc3IHRlcm1pbmFsIGluIEFOU0kgbW9kZS4KKyMgTGlrZSBhIEQ0MTEsIGJ1dCBhY3RzIGFzIGEga2V5Ym9hcmQgZm9yIHNlcmlhbCBwcmludGVycyAoIktTUiIgbW9kZXMpLgorZDU3N3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NzcsCisJdXNlPWQ0MTEsCitkNTc3LTdifERhdGEgR2VuZXJhbCBEQVNIRVIgRDU3NyBpbiA3LWJpdCBtb2RlLAorCXVzZT1kNDExLTdiLAorZDU3Ny13fERhdGEgR2VuZXJhbCBEQVNIRVIgRDU3NyBpbiB3aWRlIG1vZGUsCisJdXNlPWQ0MTEtdywKK2Q1NzctN2Itd3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NzcgaW4gd2lkZSA3LWJpdCBtb2RlLAorCXVzZT1kNDExLTdiLXcsCisKK2Q1NzctZGd8ZDU3OC1kZ3xEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NzcvRDU3OCBzZXJpZXMgaW4gREcgbW9kZSwKKwl1c2U9ZDQxMS1kZywKKworIyBEQVNIRVIgRDU3OCB0ZXJtaW5hbC4KKyMgTGlrZSBhIEQ1NzcsIGJ1dCB3aXRob3V0IGNvbXByZXNzZWQgbW9kZTsgbGlrZSBhIEQ0NzBDIGluIHRoaXMgcmVzcGVjdC4KKyMKKyMgSW5pdGlhbGl6YXRpb24gc3RyaW5nIDEgc2V0czoKKyMJXEVbPDA7PDE7PDI7PDRsCisjCQk8MAktIHNjcm9sbGluZyBlbmFibGVkCisjCQk8MQktIGJsaW5rIGVuYWJsZWQKKyMJCTwyCS0gaG9yaXpvbnRhbCBzY3JvbGxpbmcgZW5hYmxlZCAoZm9yIGFsaWdubWVudCkKKyMJCTw0CS0gcHJpbnQgY2hhcmFjdGVycyByZWdhcmRsZXNzIG9mIGF0dHJpYnV0ZXMKKyMJXEVbMTsxOzgwdwktIG1hcmdpbnMgYXQgY29sdW1ucyAxIGFuZCA4MAorIwlcRVsxOzY7PDJoCisjCQkxCS0gcHJpbnQgYWxsIGNoYXJhY3RlcnMgZXZlbiBpZiBwcm90ZWN0ZWQKKyMJCTYJLSBjaGFyYWN0ZXIgcHJvdGVjdGlvbiBkaXNhYmxlZAorIwkJPDIJLSBob3Jpem9udGFsIHNjcm9sbGluZyBkaXNhYmxlZAorIwktIChzaG91bGQgcmVzZXQgc2Nyb2xsaW5nIHJlZ2lvbnMsIGJ1dCB0aGF0IGdsaXRjaGVzIHRoZSBzY3JlZW4pCisjCitkNTc4fERhdGEgR2VuZXJhbCBEQVNIRVIgRDU3OCwKKwlpczE9XEVbPDA7PDE7PDI7PDRsXEVbMTsxOzgwd1xFWzE7Njs8MmgsIHVzZT1kNTc3LAorZDU3OC03YnxEYXRhIEdlbmVyYWwgREFTSEVSIEQ1NzggaW4gNy1iaXQgbW9kZSwKKwlpczE9XEVbPDA7PDE7PDI7PDRsXEVbMTsxOzgwd1xFWzE7Njs8MmgsIHVzZT1kNTc3LTdiLAorCisjIyMjIERhdGFtZWRpYSAoZG0pCisjCisjIERhdGFtZWRpYSB3YXMgaGVhZHF1YXJ0ZXJlZCBpbiBOYXNodWEsIE5ldyBIYW1wc2hpcmUgdW50aWwgaXQgd2VudAorIyBvdXQgb2YgYnVzaW5lc3MgaW4gMTk5MywgYnV0IHRoZSBJRCBwbGF0ZXMgb24gdGhlIHRlcm1pbmFscyByZWZlcnJlZAorIyB0byB0aGUgZmFjdG9yeSBpbiBQZW5uc2F1a2VuLCBOSi4gIFRoZSBmYWN0b3J5IHdhcyBzb2xkIHRvIGEgUENCIGJvYXJkCisjIG1hbnVmYWN0dXJlciB3aGljaCB0aHJldyBvdXQgYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZXJtaW5hbHMuCisjCisKK2NzMTB8Y29sb3JzY2FufERhdGFtZWRpYSBDb2xvciBTY2FuIDEwLAorCW1zZ3IsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElMDJkOyVwMiUwMmRILCBjdXUxPVxFW0EsIGVkPVxFW0osIGVsPVxFW0ssCisJaW5kPV5KLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCitjczEwLXd8RGF0YW1lZGlhIENvbG9yIFNjYW4gMTAgd2l0aCAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwKKwljdXA9XEVbJWklcDElMDJkOyVwMiUwM2RILCB1c2U9Y3MxMCwKKworIyAoZG0xNTIwOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XlwgXl9eUF5ZSDoiIC0tIGVzcikKK2RtMTUyMHxkbTE1MjF8ZGF0YW1lZGlhIDE1MjAsCisJT1RicywgYW0sIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlwsCisJY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sIGVkPV5LLCBlbD1eXSwKKwlob21lPV5ZLCBodD1eSSwgaW5kPV5KLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5cLCBrY3V1MT1eXywKKwlraG9tZT1eWSwKKyMgZG0yNTAwOiB0aGlzIHRlcm1pbmFsIGhhcyBib3RoIDxpY2g+IGFuZCA8c21pcj4uIEFwcGxpY2F0aW9ucyB1c2luZworIyB0ZXJtY2FwL3Rlcm1pbmZvIGRpcmVjdGx5IChyYXRoZXIgdGhhbiB0aHJvdWdoIG5jdXJzZXMpIG1pZ2h0IGJlIGNvbmZ1c2VkLgorZG0yNTAwfGRhdGFtZWRpYTI1MDB8ZGF0YW1lZGlhIDI1MDAsCisJT1RicywgT1RuYywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5eXl5cMTc3LCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5cLAorCWN1cD1cMDE0JXAyJXs5Nn0lXiVjJXAxJXs5Nn0lXiVjLCBjdXUxPV5aLAorCWRjaDE9XDAyMFwwMTBcMDMwXDAzNSQ8MTAqPiwKKwlkbDE9XDAyMFwwMzJcMDMwXDAzNSQ8MTAqPiwgZWw9XlcsIGhvbWU9XkIsCisJaWNoMT1cMDIwXDAzNFwwMzBcMDM1JDwxMCo+LAorCWlsMT1cMDIwXG5cMDMwXDAzNVwwMzBcMDM1JDwxNT4sIGluZD1eSiwgcGFkPVwzNzcsCisJcm1kYz1eWF5dLCBybWlyPVwzNzdcMzc3XDAzMFwwMzUkPDEwPiwgcm1zbz1eWF5dLAorCXNtZGM9XlAsIHNtaXI9XlAsIHNtc289Xk4sCisjIGRtY2hhdCBpcyBsaWtlIERNMjUwMCwgYnV0IERPRVMgbmVlZCAiYWxsIHRoYXQgcGFkZGluZyIgKGpjbSAxLzMxLzgyKQorIyBhbHNvLCBoYXMgYSBtZXRhLWtleS4KKyMgRnJvbTogPGdvbGRiZXJnZXJAc3UtY3NsaS5hcnBhPgorIyAoZG1jaGF0OiAiOk1UOiIgY2hhbmdlZCB0byAiOmttOiIgLS0gZXNyKQorZG1jaGF0fGRtY2hhdCB2ZXJzaW9uIG9mIGRhdGFtZWRpYSAyNTAwLAorCWttLAorCWRsMT1cMDIwXDAzMlwwMzBcMDM1JDwyLz4sCisJaWwxPVwwMjBcblwwMzBcMDM1XDAzMFwwMzUkPDEqLz4sIHVzZT1kbTI1MDAsCisjIChkbTMwMjU6ICI6TVQ6IiBjaGFuZ2VkIHRvICI6a206IiAtLSBlc3IpCitkbTMwMjV8ZGF0YW1lZGlhIDMwMjVhLAorCU9UYnMsIGttLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVNJDwyPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9XEVBLAorCWRjaDE9XDAxMCQ8Nj4sIGRsMT1cRVBcRUFcRVEkPDEzMD4sIGVkPVxFSiQ8Mj4sIGVsPVxFSywKKwlob21lPVxFSCwgaHQ9XkksIGlsMT1cRVBcblxFUSQ8MTMwPiwgaW5kPV5KLCBpcD0kPDY+LAorCWlzMj1cRVFcRVVcRVYsIHJtZGM9XEVRLCBybWlyPVxFUSwgcm1zbz1cRU8wLCBzbWRjPVxFUCwKKwlzbWlyPVxFUCwgc21zbz1cRU8xLAorZG0zMDQ1fGRhdGFtZWRpYSAzMDQ1YSwKKwlPVGJzLCBhbSwgZW8sIGttQCwgdWwsIHhlbmwsCisJZGNoMT1cRUIkPDY+LCBkbDFALCBpbDFALCBpczI9XEVVXEVWLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlrZjA9XEV5XHIsIGtmMT1cRXBcciwga2YyPVxFcVxyLCBrZjM9XEVyXHIsIGtmND1cRXNcciwKKwlrZjU9XEV0XHIsIGtmNj1cRXVcciwga2Y3PVxFdlxyLCBrZjg9XEV3XHIsIGtmOT1cRXhcciwKKwlraG9tZT1cRUgsIHBhZD1cMTc3LCBybWRjQCwgcm1pcj1cRVAsIHJtc29ALCBzbWRjQCwgc21zb0AsCisJdXNlPWRtMzAyNSwKKyMgRGF0YW1lZGlhIERUODAgc29mdCBzd2l0Y2hlczoKKyMgMQkwPUp1bXAgIDE9U21vb3RoCisjIAlBdXRvcmVwZWF0IAkwPW9mZiAgMT1vbgorIyAJU2NyZWVuCQkwPURhcmsgMT1saWdodAorIyAJQ3Vyc29yCQkwPXUvbCAgMT1ibG9jaworIworIyAyCU1hcmdpbiBCZWxsCTA9b2ZmICAxPW9uCisjIAlLZXljbGljawkwPW9mZiAgMT1vbgorIyAJQW5zaS9WVDUyCTA9VlQ1MiAxPUFuc2kKKyMgCVhvbi9Yb2ZmCTA9T2ZmICAxPU9uCisjCisjIDMJU2hpZnQzCQkwPUhhc2ggMT1VSyBQb3VuZAorIyAJV3JhcAkJMD1PZmYgIDE9T24KKyMgCU5ld2xpbmUJCTA9T2ZmICAxPU9uCisjIAlJbnRlcmxhY2UJMD1PZmYgIDE9T24KKyMKKyMgNAlQYXJpdHkJCTA9T2RkICAxPUV2ZW4KKyMgCVBhcml0eQkJMD1PZmYgIDE9T24KKyMgCUJpdHMvQ2hhcgkwPTcgICAgMT04CisjIAlQb3dlcgkJMD02MEh6IDE9NTBIegorIworIyA1CUxpbmUgSW50ZXJmYWNlICAwPUVJQSAgMT1Mb29wCisjIAlBdXggSW50ZXJmYWNlICAgMD1FSUEgIDE9TG9vcAorIyAJTG9jYWwgQ29weSAgICAJMD1PZmYgIDE9T24KKyMgCVNwYXJlCisjCisjIDYJQXV4IFBhcml0eQkwPU9kZCAgMT1FdmVuCisjIAlBdXggUGFyaXR5CTA9T2ZmICAxPU9uCisjIAlBdXggQml0cy9DaGFyICAgMD03ICAgIDE9OAorIyAJQ1JUIFNhdmVyCTA9T2ZmICAxPU9uCisjIGRtODAvMSBpcyBhIHZ0MTAwIGxvb2thbGlrZSwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBuZWVkIGFueSBwYWRkaW5nLgorZG04MHxkbWR0ODB8ZHQ4MHxkYXRhbWVkaWEgZHQ4MC8xLAorCWNsZWFyPVxFWzJKXEVbSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD0laVxFWyVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlZD1cRVtKLCBlbD1cRVtLLAorCWhvbWU9XEVbSCwgbWMwPVxFWzBpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgcmk9XEVNLAorCXJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdXNlPXZ0MTAwLAorIyBleGNlcHQgaW4gMTMyIGNvbHVtbiBtb2RlLCB3aGVyZSBpdCBuZWVkcyBhIGxpdHRsZSBwYWRkaW5nLgorIyBUaGlzIGlzIHN0aWxsIGxlc3MgcGFkZGluZyB0aGFuIHRoZSB2dDEwMCwgYW5kIHlvdSBjYW4gYWx3YXlzIHR1cm4gb24KKyMgdGhlIF5TL15RIGhhbmRzaGFraW5nLCBzbyB5b3UgY2FuIHVzZSB2dDEwMCBmbGF2b3JzIGZvciB0aGluZ3MgbGlrZQorIyByZXZlcnNlIHZpZGVvLgorZG04MHd8ZG1kdDgwd3xkdDgwd3xkYXRhbWVkaWEgZHQ4MC8xIGluIDEzMiBjaGFyIG1vZGUsCisJY29scyMxMzIsCisJY2xlYXI9XEVbSFxFWzJKJDw1MC8+LCBjdWQxPV5KLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8NS8+LCBjdXUxPVxFW0EkPDUvPiwKKwllZD1cRVswSiQ8MjAvPiwgZWw9XEVbMEskPDIwLz4sIHVzZT1kbTgwLAorIyBGcm9tOiBBZGFtIFRob21wc29uIDxhdGhvbXBzb0BwYW5nZWEuY2E+IFNlcHQgMTAgMTk5NQorZHQ4MC1zYXN8RGF0YW1lZGlhIERUODAzL0RUWCBmb3IgU0FTIHVzYWdlLAorCWFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlhY3NjPWBgYTFmeGdxaDBqWWs/bFptQG5Fb29wcHFEcnJzc3RDdTR2QXdCeDN5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sCisJY3NyPVxFPSVwMSV7MzJ9JSslYyV7MzJ9JWNcRSMxXEU9JXAyJXszMn0lKyVjJXszMn0lY1xFIzIsCisJY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XlwsCisJY3VwPVxFPSVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXywgZGwxPVxFTSwgZWQ9XkssCisJZWw9Xl0sIGZmPV5MLCBob21lPV5ZLCBodD1eSSwgaHRzPVxFJzEsIGlsMT1cRUwsIGluZD1cRUIsCisJaXMyPVxFKTBcRTxcRVBcRScwXEUkMiwga2Nscj1eTCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5cLCBrY3V1MT1eXywga2VkPV5LLCBrZWw9Xl0sIGtob21lPV5ZLCBtYzQ9Xk8sIG1jNT1eTiwKKwlyZXY9XEUkMlwwMDQsIHJpPVxFSSwgcm1hY3M9XEVHLCBybXNvPV5YLCBzZ3IwPV5YLCBzbWFjcz1cRUYsCisJc21zbz1cRSQyXDAwNCwgdGJjPVxFJzAsCisKKyMgRGF0YW1lZGlhIEV4Y2VsIDYyLCA2NCBmcm9tIEdvdWxkL1NFTCBVVFgvMzIgdmlhIEJSTAorIyBUaGVzZSBhcmVuJ3QgZW5kLWFsbCBFeGNlbCB0ZXJtY2FwczsgYnV0IGRvIGluc2VydC9kZWxldGUgY2hhci9saW5lCisjIGFuZCBuYW1lIHNvbWUgb2YgdGhlIGV4dHJhIGZ1bmN0aW9uIGtleXMuICAoTWlrZSBGZWxkbWFuIGNjdmF4YSFmZWxkbWFuKQorIyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaGFzIGJlZW4gYmVudCBzb21ld2hhdCwgd2l0aCB0aGUgdXNlIG9mIEU/ICh3aGVyZQorIyBFIGlzIGZvciAnRXhjZWwnKSBhcyAjIGEgbmFtZS4gIFRoaXMgd2FzIGRvbmUgdG8gZGlzdGluZ3Vpc2ggdGhlIGVudHJpZXMKKyMgZnJvbSB0aGUgb3RoZXIgRGF0YW1lZGlhcyBpbiB1c2UgaGVyZSwgYW5kIHlldCB0byBhc3NvY2lhdGUgYSBtb2RlbCBvZgorIyB0aGUgRXhjZWwgdGVybWluYWxzIHdpdGggdGhlIHJlZ3VsYXIgZGF0YW1lZGlhIHRlcm1pbmFscyB0aGF0IHNoYXJlCisjIG1ham9yIGNoYXJhY3RlcmlzdGljcy4KK2V4Y2VsNjJ8ZXhjZWw2NHxkYXRhbWVkaWEgRXhjZWwgNjIsCisJZGNoMT1cRVtQLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2Y1PVxFT3UsIGtmNj1cRU92LAorCWtmNz1cRU93LCBrZjg9XEVPeCwga2Y5PVxFT3ksIHJtaXI9XEVbNGwsIHNtaXI9XEVbNGgsCisJdXNlPWR0ODAsCitleGNlbDYyLXd8ZXhjZWw2NC13fGRhdGFtZWRpYSBFeGNlbCA2MiBpbiAxMzIgY2hhciBtb2RlLAorCWRjaDE9XEVbUCwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIGtmNT1cRU91LCBrZjY9XEVPdiwKKwlrZjc9XEVPdywga2Y4PVxFT3gsIGtmOT1cRU95LCBybWlyPVxFWzRsLCBzbWlyPVxFWzRoLAorCXVzZT1kdDgwdywKK2V4Y2VsNjItcnZ8ZXhjZWw2NC1ydnxkYXRhbWVkaWEgRXhjZWwgNjIgaW4gcmV2ZXJzZSB2aWRlbyBtb2RlLAorCWRjaDE9XEVbUCwgZmxhc2g9XEVbPzVsXEVbPzVoLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwKKwlrZjU9XEVPdSwga2Y2PVxFT3YsIGtmNz1cRU93LCBrZjg9XEVPeCwga2Y5PVxFT3ksIHJtaXI9XEVbNGwsCisJc21pcj1cRVs0aCwgdXNlPWR0ODAsCisKKyMjIyMgRmFsY28KKyMKKyMJRmFsY28gRGF0YSBQcm9kdWN0cworIwk0NDAgUG90cmVybyBBdmVudWUKKyMJU3Vubnl2YWxlLCBDQSA5NDA4NjQtMTk2CisjCVZveDogKDgwMCktMzI1LTI2NDgKKyMJRmF4OiAoNDA4KS03NDUtNzg2MAorIwlOZXQ6IHRlY2hzdXBAY2hhcm0uc3lzLmZhbGNvLmNvbQorIworIyBDdXJyZW50IEZhbGNvIG1vZGVscyBhcyBvZiAxOTk1IGFyZSBnZW5lcmFsbHkgQU5TSS1jb21wYXRpYmxlIGFuZCBzdXBwb3J0CisjIGVtdWxhdGlvbnMgb2YgREVDIFZULXNlcmllcywgV3lzZSwgYW5kIFRlbGV2aWRlbyB0eXBlcy4KKyMKKworIyBUZXN0IHZlcnNpb24gZm9yIEZhbGNvIHRzLTEuIFNlZSA8YXJwYXZheC5oaWNrbWFuQHVjYj4gZm9yIGluZm8KKyMgVGhpcyB0ZXJtaW5hbCB3YXMgcmVsZWFzZWQgYXJvdW5kIDE5ODMgYW5kIHdhcyBkaXNjb250aW51ZWQgbG9uZyBhZ28uCisjIFRoZSBzdGFuZG91dCBhbmQgdW5kZXJsaW5lIGhpZ2hsaWdodHMgYXJlIHRoZSBzYW1lLgorZmFsY298dHMxfHRzLTF8ZmFsY28gdHMtMSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFKiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVRcRUcwXDAxMCwgaG9tZT1eXiwgaHQ9XkksIGlsMT1cRUUsCisJaW5kPV5KLCBpczI9XEV1XEUzLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywKKwlrZjA9XkEwXHIsIHJtaXI9XEVyLCBybXNvPVxFZzAsIHJtdWw9XEVnMCwgc2dyMD1cRWcwLAorCXNtaXI9XEVxLCBzbXNvPVxFZzEsIHNtdWw9XEVnMSwKK2ZhbGNvLXB8dHMxcHx0cy0xcHxmYWxjbyB0cy0xIHdpdGggcGFnaW5nIG9wdGlvbiwKKwlPVGJzLCBhbSwgZGEsIGRiLCBtaXIsIG1zZ3IsIHVsLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XEUqLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRVtBLAorCWRjaDE9XEVXLCBkbDE9XEVSLCBlZD1cRVksIGVsPVxFVFxFRzBcMDEwXEVnMCwgaHQ9XkksCisJaWwxPVxFRSwgaW5kPV5KLCBpczI9XEVaXEUzXEVfYywga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBraG9tZT1cRVtILCBybWN1cD1cRV9iLCBybWlyPVxFciwKKwlybXNvPVxFZzAsIHJtdWw9XEVnMCwgc2dyMD1cRWcwLCBzbWN1cD1cRV9kLCBzbWlyPVxFcSwKKwlzbXNvPVxFZzQsIHNtdWw9XEVnMSwKKyMgKHRzMTAwOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nIC0tIGVzcikKK3RzMTAwfHRzMTAwLXNwfGZhbGNvIHRzMTAwLXNwLAorCWFtLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbSiQ8NTA+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDJDwyPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSQ8Mj4sIGRjaDE9XEV+VywgZGwxPVxFflIsIGVkPVxFW0okPDUwPiwKKwllbD1cRVtLJDwzPiwgZWwxPVxFWzFLJDwzPiwgZW5hY3M9XEUoQlxFKTAsIGhvbWU9XEVbSCwKKwlodD1eSSwgaHRzPVxFSCwgaWNoMT1cRX5RLCBpbDE9XEV+RSwgaW5kPV5KLCBpczE9XEV+KVxFfmVhLAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlyYz1cRTgsIHJldj1cRVs3bSQ8Mj4sIHJpPVxFTSQ8NT4sIHJtYWNzPV5PLCBybWFtPVxFWz83bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttJDwyPiwgcm11bD1cRVttJDwyPiwKKwlyczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOyQ8Mj4sCisJc2dyMD1cRVttXDAxNyQ8Mj4sIHNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sCisJc21zbz1cRVsxOzdtJDwyPiwgc211bD1cRVs0bSQ8Mj4sIHRiYz1cRVszZywKKwl1c2U9dnQxMDArZm5rZXlzLAordHMxMDAtY3R4dHxmYWxjbyB0cy0xMDAgc2F2aW5nIGNvbnRleHQsCisJcm1jdXA9XEV+X2IsIHNtY3VwPVxFfl9kXEVbMkosIHVzZT10czEwMCwKKworIyMjIyBGbG9yaWRhIENvbXB1dGVyIEdyYXBoaWNzCisjCisKKyMgRmxvcmlkYSBDb21wdXRlciBHcmFwaGljcyBCZWFjb24gU3lzdGVtLCB1c2luZyB0ZXJtaW5hbCBlbXVsYXRvciBwcm9ncmFtCisjICJob3N0LmNvbSIsIGFzIHByb3ZpZGVkIGJ5IEZDRy4gIFRoaXMgZGVzY3JpcHRpb24gaXMgZm9yIGFuIGVhcmx5IHJlbGVhc2UKKyMgb2YgdGhlICJob3N0IiBwcm9ncmFtLiAgS25vd24gYnVnOiA8ZWQ+IGNsZWFycyB0aGUgd2hvbGUgc2NyZWVuLCBzbyBpdCdzCisjIGNvbW1lbnRlZCBvdXQuCisKKyMgRnJvbTogRGF2aWQgQnJ5YW50IDxjYm9zZyFkamI+IDEvNy84MworYmVhY29ufEZDRyBCZWFjb24gU3lzdGVtLAorCWFtLCBkYSwgZGIsCisJY29scyM4MCwgbGluZXMjMzIsCisJYmVsPVxFU1RBUlRcclxFMzdcclxFRU5EXHIkPDE+LAorCWJsaW5rPVxFU1RBUlRcclxFNjFcLDFcclxFRU5EXHIsIGNsZWFyPVxFWiQ8MTA+LCBjcj1eTSwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFViwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwyMD4sIGN1dTE9XEVVLAorCWRjaDE9XEVXLCBkbDE9XEVSLCBlbD1cRVQsIGhvbWU9XEVIJDwxMD4sIGljaDE9XEVRLCBpbDE9XEVFLAorCWluZD1eSiwgcmV2PVxFU1RBUlRcclxFNTlcLDFcclxFRU5EXHIsIHJtY3VwPSwKKwlybXNvPVxFU1RBUlRcclxFNzBcLDBcclxFRU5EXHIkPDIwPiwKKwlybXVsPVxFU1RBUlRcclxFNjBcLDBcclxFRU5EXHIsCisJc2dyMD1cRVNUQVJUXHJcRTc4XHJcRTcwXCwwXHJcRUVORFxyJDwyMD4sCisJc21jdXA9XEVTVEFSVFxyXEUyXCwwXHJcRTEyXHJcRUVORFxyJDwxMD4sCisJc21zbz1cRVNUQVJUXHJcRTcwXCw2XHJcRUVORFxyJDwyMD4sCisJc211bD1cRVNUQVJUXHJcRTYwXCwxXHJcRUVORFxyLAorCisjIyMjIEZsdWtlCisjCisKKyMgVGhlIGYxNzIwYSBkaWZmZXJlbmNlcyBmcm9tIEFOU0k6IG5vIGF1dG8gbWFyZ2luLCBkZXN0cnVjdGl2ZQorIyB0YWJzLCAjIG9mIGxpbmVzLCBmdW5ueSBoaWdobGlnaHRpbmcgYW5kIHVuZGVybGluaW5nCitmMTcyMHxmMTcyMGF8Zmx1a2UgMTcyMEEsCisJeHQsCisJY29scyM4MCwgbGluZXMjMTYsIHhtYyMxLAorCWJlbD1eRywgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGVkPVxFW0osCisJZWw9XEVbSywgaW5kPVxFRCwgaXMyPVxFW0hcRVsySiwga2N1YjE9Xl8sIGtjdWQxPV5dLAorCWtjdWYxPV5eLCBrY3V1MT1eXCwgcmk9XEVNLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLAorCXNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKKyMjIyMgTGliZXJ0eSBFbGVjdHJvbmljcyAoRnJlZWRvbSkKKyMKKyMJTGliZXJ0eSBFbGVjdHJvbmljcworIwk0ODA4OSBGcmVtb250IEJsdmQKKyMJRnJlbW9udCBDQSA5NDUzOAorIwlWb3g6ICg1MTApLTYyMy02MDAwCisjCUZheDogKDUxMCktNjIzLTcwMjEKKworIyBGcm9tOiA8ZmFsZXR0aUBiZXJrZWxleS5lZHU+CisjIChmMTAwOiBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgYSB0aWMgd2FybmluZzsKKyMgbWFkZSB0aGlzIHJlbGF0aXZlIHRvIGFkbStzZ3IgLS0gbm90ZSB0aGF0IDxpbnZpcz4gaXNuJ3QKKyMga25vd24gdG8gd29yayBmb3IgZjEwMCBidXQgZG9lcyBvbiB0aGUgZjExMC4gLS1lc3IpCitmMTAwfGZyZWVkb218ZnJlZWRvbTEwMHxmcmVlZG9tIG1vZGVsIDEwMCwKKwlPVGJzLCBhbSwgYncsIGhzLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlhY3NjPSwgYmVsPV5HLCBjYnQ9XEVJLCBjbGVhcj1eWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFVywgZGwxPVxFUiQ8MTEuNSo+LCBkc2w9XEVnXEVmXHIsIGVkPVxFWSwgZWw9XEVULAorCWZsYXNoPVxFYiQ8MjAwPlxFZCwgZnNsPV5NLCBob21lPV5eLCBocGE9XEVdJXAxJXszMn0lKyVjLAorCWh0PV5JLCBodHM9XEUxLCBpbDE9XEVFJDw4LjUqPiwgaW5kPV5KLCBpcD0kPDY+LAorCWlzMj1cRWdcRWZcclxFZCwga2JzPV5ILCBrY2J0PVxFSSwga2N1YjE9XkgsIGtjdWQxPV5WLAorCWtjdWYxPV5MLCBrY3V1MT1eSywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjI9XkFBXHIsCisJa2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCByaT1cRWosIHJtYWNzPVxFJCwgcm1pcj1cRXIsCisJc21hY3M9XEUlJSwgc21pcj1cRXEsIHRiYz1cRTMsIHRzbD1cRWdcRWYsCisJdnBhPVxFWyVwMSV7MzJ9JSslYywgdXNlPWFkbStzZ3IsCitmMTAwLXJ2fGZyZWVkb20tcnZ8ZnJlZWRvbSAxMDAgaW4gcmV2ZXJzZSB2aWRlbywKKwlmbGFzaD1cRWQkPDIwMD5cRWIsIGlzMj1cRWdcRWZcclxFYiwgdXNlPWYxMDAsCisjIFRoZSBmMTEwIGFuZCBmMjAwIGhhdmUgcHJvYmxlbXMgd2l0aCB2aSgxKS4gIFRoZXkgdXNlIHRoZSBeVgorIyBjb2RlIGZvciB0aGUgZG93biBjdXJzb3Iga2V5LiBXaGVuIGtjdWQxIGlzIGRlZmluZWQgaW4gdGVybWluZm8KKyMgYXMgXlYsIHRoZSBDb250cm9sIENoYXJhY3RlciBRdW90aW5nIGNhcGFiaWxpdHkgKF5WIGluIGluc2VydCBtb2RlKQorIyBpcyBsb3N0ISBJdCBjYW5ub3QgYmUgcmVtYXBwZWQgaW4gdmkgYmVjYXVzZSBpdCBpcyBuZWNlc3NhcnkgdG8gZW50ZXIKKyMgYSBeViB0byB0byBxdW90ZSB0aGUgXlYgdGhhdCBpcyBiZWluZyByZW1hcHBlZCEhIQorIworIyBmMTEwL2YyMDAgdXNlcnMgd2lsbCBoYXZlIHRvIGRlY2lkZSB3aGV0aGVyCisjIHRvIGxvc2UgdGhlIGRvd24gY3Vyc29yIGtleSBvciB0aGUgcXVvdGluZyBjYXBhYmlsaXR5LiBXZSB3aWxsIG9wdAorIyBpbml0aWFsbHkgZm9yIGxlYXZpbmcgdGhlIHF1b3RpbmcgY2FwYWJpbGl0eSBvdXQsIHNpbmNlIHVzZSBvZiBWSQorIyBpcyBub3QgZ2VuZXJhbGx5IGFwcGxpY2FibGUgdG8gbW9zdCBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMKKyMgKGYxMTA6IGFkZGVkIDxodD4sIDxraG9tZT4gJiA8a2NidD4gZnJvbSBmMTAwIC0tIGVzcikKK2YxMTB8ZnJlZWRvbTExMHxMaWJlcnR5IEZyZWVkb20gMTEwLAorCWJ3QCwgZXNsb2ssCisJaXQjOCwgd3NsIzgwLAorCWJsaW5rPVxFRzIsIGJvbGQ9XEVHMCwgY2l2aXM9XEUuMSwgY25vcm09XEUuMiwgY3VkMT1eViwKKwlkaW09XEVHQCwgZGwxPVxFUiwgZHNsPVxFZlxyLCBmbGFzaD1cRWIkPDIwMC8+XEVkLCBpbDE9XEVFLAorCWlwQCwgaXMyQCwga2Nscj1eXiwga2RjaDE9XEVXLCBrZGwxPVxFUiwga2VkPVxFWSwga2VsPVxFVCwKKwlrZjA9XkFJXHIsIGtmMTBALCBraWNoMT1cRVEsIGtpbDE9XEVFLCBtYzQ9XEVhLCBtYzU9XEVgLAorCXJpPVxFSiwgcm1hY3M9XEUlJSwgcm1pcj1cRXJcRU8sIHNtYWNzPVxFJCwgc21pcj1cRU9cRXEsCisJc21zbz1cRUc8LCB0c2w9XEVmLCB1c2U9ZjEwMCwKK2YxMTAtMTR8TGliZXJ0eSBGcmVlZG9tIDExMCAxNGluY2gsCisJZGNoMUAsIHVzZT1mMTEwLAorZjExMC13fExpYmVydHkgRnJlZWRvbSAxMTAgLSAxMzIgY29scywKKwljb2xzIzEzMiwgdXNlPWYxMTAsCitmMTEwLTE0d3xMaWJlcnR5IEZyZWVkb20gMTEwIDE0aW4vMTMyIGNvbHMsCisJY29scyMxMzIsCisJZGNoMUAsIHVzZT1mMTEwLAorIyAoZjIwMDogYWRkZWQgPGFjc2M+IHRvIHN1cHByZXNzIHRpYyB3YXJuaW5ncyByZSA8c21hY3M+LzxybWFjcz4gLS1lc3IpCitmMjAwfGZyZWVkb20yMDB8TGliZXJ0eSBGcmVlZG9tIDIwMCwKKwlPVGJzLCBhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgd3NsIzgwLAorCWFjc2M9LCBiZWw9XkcsIGJsaW5rPVxFRzIsIGJvbGQ9XEVHMCwgY2J0PVxFSSwgY2l2aXM9XEUuMCwKKwljbGVhcj1eWiwgY25vcm09XEUuMSwgY3I9Xk0sCisJY3NyPVxFbTAlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1YjE9XkgsIGN1ZDE9XlYsCisJY3VmMT1eTCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywKKwlkY2gxPVxFVywgZGltPVxFR0AsIGRsMT1cRVIsIGRzbD1cRWZcciwgZWQ9XEVZLCBlbD1cRVQsCisJZmxhc2g9XEVvJDwyMDAvPlxFbiwgZnNsPV5NLCBob21lPV5eLAorCWhwYT1cRV0lcDElezMyfSUrJWMsIGh0cz1cRTEsIGlsMT1cRUUsIGluZD1eSiwga2JzPV5ILAorCWtjbHI9Xl4sIGtjdWIxPV5ILCBrY3VkMT1eViwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZGNoMT1cRVcsCisJa2RsMT1cRVIsIGtlZD1cRVksIGtlbD1cRVQsIGtmMD1eQUlcciwga2YxPV5BQFxyLCBrZjI9XkFBXHIsCisJa2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtpY2gxPVxFUSwga2lsMT1cRUUsIG1jND1cRWEsIG1jNT1cRWAsCisJcmk9XEVKLCBybWFjcz1cRSUlLCBybWlyPVxFciwgc21hY3M9XEUkLCBzbWlyPVxFcSwgc21zbz1cRUc8LAorCXRiYz1cRTMsIHRzbD1cRWYsIHZwYT1cRVslcDElezMyfSUrJWMsIHVzZT1hZG0rc2dyLAorZjIwMC13fExpYmVydHkgRnJlZWRvbSAyMDAgLSAxMzIgY29scywKKwljb2xzIzEzMiwgdXNlPWYyMDAsCisjIFRoZSBmMjAwIGhhcyB0aGUgYWJpbGl0eSB0byByZXByb2dyYW0gdGhlIGRvd24gY3Vyc29yIGtleS4gVGhlIGtleSBpcworIyByZXByb2dyYW1tZWQgdG8gXkogKGxpbmVmZWVkKS4gVGhpcyB2YWx1ZSBpcyByZW1lbWJlcmVkIGluIG5vbi12b2xhdGlsZSBSQU0sCisjIHNvIHBvd2VyaW5nIHRoZSB0ZXJtaW5hbCBvZmYgYW5kIG9uIHdpbGwgbm90IGNhdXNlIHRoZSBjaGFuZ2UgdG8gYmUgbG9zdC4KK2YyMDB2aXxMaWJlcnR5IEZyZWVkb20gMjAwIGZvciB2aSwKKwlmbGFzaD1cRWIkPDIwMC8+XEVkLCBrY3VkMT1eSiwgdXNlPWYyMDAsCitmMjAwdmktd3xMaWJlcnR5IEZyZWVkb20gMjAwIC0gMTMyIGNvbHMgZm9yIHZpLAorCWNvbHMjMTMyLCB1c2U9ZjIwMHZpLAorCisjIyMjIEdyYXBoT24gKGdvKQorIworIwlHcmFwaG9uIENvcnBvcmF0aW9uCisjCTU0NCBEaXZpc2lvbiBTdHJlZXQKKyMJQ2FtcGJlbGwsIENBIDk1MDA4CisjCVZveDogKDQwOCktMzcwLTQwODAKKyMJRmF4OiAoNDA4KS0zNzAtNTA0NworIwlOZXQ6IHRyb3lAZ3JhcGhvbi5jb20gKFRyb3kgTW9ycmlzb24pCisjCisjCisjIFRoZSBnbzE0MCBhbmQgZ28yMjUgaGF2ZSBiZWVuIGRpc2NvbnRpbnVlZC4gIEdyYXBoT24gbm93IG1ha2VzIFggdGVybWluYWxzLAorIyBpbmNsdWRpbmcgb25lIG9kZCBoeWJyaWQgdGhhdCBzdGFydHMgb3V0IGxpZmUgb24gcG93ZXItdXAgYXMgYSBjaGFyYWN0ZXIKKyMgdGVybWluYWwsIHRoYW4gY2FuIGJlIHN3aXRjaGVkIHRvIFggZ3JhcGhpY3MgbW9kZSAoZHJpdmVuIG92ZXIgdGhlIHNlcmlhbAorIyBsaW5lKSBieSBhbiBlc2NhcGUgc2VxdWVuY2UuICBObyBpbmZvIG9uIHRoaXMgYmVhc3QgeWV0LgorIyAoZ28xNDA6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorZ28xNDB8Z3JhcGhvbiBnby0xNDAsCisJT1RicywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1cRVtIXEVbMkokPDEwLz4sIGN1YjE9XkgsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFW0okPDEwLz4sIGVsPVxFW0ssIGh0PV5JLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCBpbDE9XEVbTCwKKwlpczI9XEU8XEU9XEVbPzNsXEVbPzdsXEUoQlxFW0pcRTdcRVs7clxFOFxFW21cRVtxLAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMT1cRU9QLAorCWtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtob21lPVxFW0gsIHJpPVxFTSwKKwlybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHNncjA9XEVbbSwgc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCitnbzE0MHd8Z3JhcGhvbiBnby0xNDAgaW4gMTMyIGNvbHVtbiBtb2RlLAorCWFtLAorCWNvbHMjMTMyLAorCWlzMj1cRTxcRT1cRVs/M2hcRVs/N2hcRShCXEVbSlxFN1xFWztyXEU4XEVbbVxFW3EsCisJdXNlPWdvMTQwLAorIyBIYWNrZWQgdXAgdnQyMDAgdGVybWNhcCB0byBoYW5kbGUgR08tMjI1L1ZUMjIwCisjIEZyb206IDxlZG1AbnduZXh1cy5XQS5DT00+CisjIChnbzIyNTogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCitnbzIyNXxnby0yMjV8R3JhcGhvbiAyMjUsCisJT1RicywgYW0sIG1pciwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwgdnQjMywKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWwxPVxFW0wsIGluZD1cRUQsCisJaXMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRU9QLAorCWtmMj1cRU9RLCBrZjM9XEVPUiwga2Y0PVxFT1MsIGtob21lPVxFW0gsIHJjPVxFOCwgcmV2PVxFWzdtLAorCXJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCByaT1cRU0sIHJtYW09XEVbPzdsLAorCXJtY3VwPVxFWyFwXEVbPzdoXEVbMjsxOzEjdywgcm1pcj1cRVs0bCwgcm1reD1cRT4sCisJcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLCByczE9XEVbIXBcRVs/N2hcRVsyOzE7MSN3LAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWFtPVxFWz83aCwgc21jdXA9XEVbMjswI3dcRVsxOzI1ciwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyMjIyBIYXJyaXMgKEJlZWhpdmUpCisjCisjIEJsZXRjaC4gIFRoZXNlIGd1eXMgc2hhcmVkIHRoZSBUZXJtaW5hbCBCcmFpbiBEYW1hZ2UgbGF1cmVscyB3aXRoIEhhemVsdGluZS4KKyMgVGhlaXIgdGVybWluYWwgZ3JvdXAgaXMgYW5jaWVudCBoaXN0b3J5IG5vdyAoMTk5NSkgdGhvdWdoIHRoZSBwYXJlbnQKKyMgY29tcGFueSBpcyBzdGlsbCBpbiBidXNpbmVzcy4KKyMKKworIyBCZWVoaXZlIGRvY3VtZW50YXRpb24gaXMgdW5kYXRlZCBhbmQgbWFya2VkIFByZWxpbWluYXJ5IGFuZCBoYXMgbm8gZmlndXJlcworIyBzbyB3ZSBtdXN0IGhhdmUgZWFybHkgU3VwZXJiZWUyIChNb2RlbCA2MDAsIGFjY29yZGluZyB0byBwaG9uZSBjb252ZXJzYXRpb24KKyMgd2l0aCBtZnIuKS4gSXQgaGFzIHByb3ZlZCByZWxpYWJsZSBleGNlcHQgZm9yIHNvbWUgbWlzc2luZyBwYWRkaW5nCisjIChub3RhYmx5IGFmdGVyIFxFSyBhbmQgPG5sPiBhdCBib3R0b20gb2Ygc2NyZWVuKS4KKyMKKyMgVGhlIGtleSBpZGVhIGlzIHRoYXQgQUVQIG1vZGUgaXMgcG9pc29uIGZvciA8Y3VwPiAmIHRoYXQgVVMncyBpbgorIyB0aGUgbG9jYWwgbWVtb3J5IHNob3VsZCBiZSBhdm9pZGVkIGxpa2UgdGhlIHBsYWd1ZS4gVGhhdCBtZWFucworIyB0aGF0IHRoZSAyMDQ4IGNoYXJhY3RlciBsb2NhbCBidWZmZXIgaXMgdXNlZCBhcyAyNSBsaW5lcyBvZiA4MAorIyBjaGFyYWN0ZXJzLCBwZXJpb2QuIE5vIHNjcm9sbGluZyBsb2NhbCBtZW1vcnksIGZvbGtzLiBJdCBhbHNvCisjIGFwcGVhcnMgdGhhdCB3ZSBjYW5ub3QgdXNlIG5ha2VkIElOUyBMSU5FIGZlYXR1cmUgc2luY2UgaXQgdXNlcworIyBVUy4gVGhlIHNiaSBmYWtlcyA8aWwxPiB3aXRoIGFuIDgwLXNwYWNlIGluc2VydCB0aGF0IG1heSBiZSB0b28KKyMgc2xvdyBhdCBsb3cgc3BlZWRzOyBhbHNvIHNwYWNlcyBnZXQgY29udmVydGVkIHRvIFwwNDAgd2hpY2ggaXMKKyMgdG9vIGxvbmcgZm9yIHNvbWUgcHJvZ3JhbXMgKG5vdCB2aSkuICBERUwgTElORSBpcyBvayBidXQgc2xvdy4KKyMKKyMgVGhlIDxubD4gc3RyaW5nIGlzIGRlc2lnbmVkIGZvciBsYXN0IGxpbmUgb2Ygc2NyZWVuIE9OTFk7IGN1cCB0bworIyAyNXRoIGxpbmUgY29ycmVjdHMgdGhlIG1vdGlvbiBpbmhlcmVudCBpbiBzY3JvbGxpbmcgdG8gUGFnZSAxLgorIworIyBUaGVyZSBpcyBvbmUgdW5kZXJzdG9vZCBidWcuIEl0IGlzIHRoYXQgdGhlIHNjcmVlbiBhcHBlYXJzIHRvCisjIHBvcCB0byBhIG5ldyAoYmxhbmspIHBhZ2UgYWZ0ZXIgYSA8bmVsPiwgb3IgbGVhdmUgYSBoYWxmLWxpbmUKKyMgZWxsaXBzaXMgdG8gYSBxdWFkIHRoYXQgaXMgdGhlIGV4dHJhIDQ4IG1lbW9yeSBsb2NhdGlvbnMuIFRoZQorIyBkYXRhIHJlY2VpdmVkIGlzIGR1bXBlZCBpbnRvIG1lbW9yeSBidXQgbm90IGRpc3BsYXllZC4gIE5vdCB0bworIyB3b3JyeSBpZiA8Y3VwPiBpcyBiZWluZyB1c2VkOyB0aGUgbGluZXMgbm90IGRpc3BsYXllZCB3aWxsIGJlLAorIyB3aGVuZXZlciB0aGUgY3Vyc29yIGlzIG1vdmVkIHVwIHRoZXJlLiBTaW5jZSA8Y3VwPiBpcyBhZGRyZXNzZWQKKyMgcmVsYXRpdmUgdG8gTUVNT1JZIG9mIHdpbmRvdywgbm90aGluZyBpcyBsb3N0OyBidXQgYmV3YXJlIG9mCisjIHJlbGF0aXZlIGN1cnNvciBtb3Rpb24gKDxjdXUxPiw8Y3VkMT4sPGN1ZjE+LDxjdWIxPikuIFJlY29tbWVuZGVkLAorIyB0aGVyZWZvcmUsIGlzIHNldGVudiBNT1JFIC1jIC4KKyMKKyMgV0FSTklORzogTm90IGFsbCBmZWF0dXJlcyB0ZXN0ZWQuCisjCisjIFRpbWluZ3MgYXJlIGFzc2VtYmxlZCBmcm9tIDMgc291cmNlcy4gU29tZSB0aW1pbmdzIG1heSByZWZsZWN0CisjIFNCMi9Nb2RlbCAzMDAgdGhhdCB3ZXJlIHVzZWQgaWYgbW9yZSBjb25zZXJ2YXRpdmUuCisjIFRlc3RlZCBvbiBhIE1vZGVsIDYwMCBhdCAxMjAwIGFuZCA5NjAwIGJkLgorIworIyBUaGUgQkFDS1NQQUNFa2Igb3B0aW9uIGlzIGN1dGUuIFRoZSBORVdMSU5FIGtleSwgc28gY2xldmVybHkKKyMgcGxhY2VkIG9uIHRoZSBrZXlib2FyZCBhbmQgdXNlbGVzcyBiZWNhdXNlIG9mIEFFUCwgaXMgbWFkZQorIyBpbnRvIGEgYmFja3NwYWNlIGtleS4gSW4gdXNlIEVTQyBtdXN0IGJlIHByZXNzZWQgdHdpY2UgKHRvIHNlbmQpCisjIGFuZCBzZW5kaW5nIF5DIG11c3QgYmUgcHJlZml4ZWQgYnkgRVNDIHRvIGF2b2lkIHRoYXQgd2VpcmQKKyMgdHJhbnNtaXQgbW9kZSBhc3NvY2lhdGVkIHdpdGggRU5URVIga2V5LgorIworIyBJRiBURVJNSU5BTCBFVkVSIEdPRVMgQ0FUQVRPTklDIHdpdGggdGhlIGN1cnNvciBidXp6aW5nIGFjcm9zcworIyB0aGUgc2NyZWVuLCB0aGVuIGl0IGhhcyBkcm9wcGVkIGludG8gRU5URVIgbW9kZTsgaGl0CisjIFJFU0VULS1PTkxJTkUtLSF0c2V0LgorIworIyBBcyBkZWxpdmVyZWQgdGhpcyBtYWNoaW5lIGhhcyBhIEZBVEFMIGZlYXR1cmUgdGhhdCB3aWxsIHRocm93CisjIGl0IGludG8gdGhhdCBzdHJhbmdlIHRyYW5zbWl0IHN0YXRlIChTUE9XKSBpZiB0aGUgc3BhY2UgYmFyIGlzCisjIGhpdCBhZnRlciBhIENSIGlzIHJlY2VpdmVkLCBidXQgYmVmb3JlIHJlY2VpdmluZyBhIExGIChvciBhCisjIGZldyBvdGhlcnMpLgorIworIyBUaGUgY2lyY3VpdHMgTVVTVCBiZSBtb2RpZmllZCB0byBlbGltaW5hdGUgdGhlIFNQT1cgbGF0Y2guCisjIFRoaXMgaXMgZG9uZSBieSBzdHJhcHBpbmcgb24gY2hpcCBBNDYgb2YgdGhlIEkvTyBib2FyZDsgY3V0CisjIHRoZSBwLmMuIGNvbm5lY3Rpb24gdG8gUGluIDUgYW5kIHN0cmFwIFBpbiA1IHRvIFBpbiA4IG9mIHRoYXQKKyMgY2hpcC4gVGhpcyBtb2QgaGFzIGJlZW4gY2hlY2tlZCBvdXQgb24gYSBNb2QgNjAwIG9mIFN1cGVyYmVlIElJLgorIyBXaXRoIHRoaXMgbW9kaWZpY2F0aW9uIGFic3VyZGx5IGhpZ2ggdGltaW5ncyBvbiBjciBhcmUKKyMgdW5uZWNlc3NhcnkuCisjCisjIE5PVEUgV0VMTCB0aGF0IHRoZSByZWFyIHBhbmVsIHN3aXRjaCBzaG91bGQgYmUgc2V0IHRvIENSL0xGLAorIyBub3QgQUVQIQorIworc2IxfGJlZWhpdmUgc3VwZXJiZWUsCisJT1RicywgYW0sIGJ3LCBkYSwgZGIsIG1pciwgdWwsIHhzYiwKKwljb2xzIzgwLCBsaW5lcyMyNSwgeG1jIzEsCisJYmVsPV5HLCBjYnQ9XEVgJDw2NTA+LCBjbGVhcj1cRUgkPDE+XEVKJDwzPiwgY3I9JDwxPlxyLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDJDwzPiwgY3VwPVxFRiVwMiUwM2QlcDElMDNkLAorCWN1dTE9XEVBJDwzPiwgZGNoMT1cRVAkPDM+LCBkbDE9XEVNJDwxMDA+LCBlZD1cRUokPDM+LAorCWVsPVxFSyQ8Mz4sIGhvbWU9XEVIJDwxPiwgaHQ9XkksIGh0cz1cRTEsCisJaWwxPVxFTlxFTCQ8Mz5cRVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxFUCQ8Mz4gXEVPXEVSXEVBJDwzPiwKKwlpbmQ9XkosIGlzMj1cRUUkPDM+XEVYXEVaXEVPXEViXEVnXEVSLCBrYnM9Xl8sIGtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBrZGwxPVxFTSwga2VkPVxFSiwga2VsPVxFSywKKwlrZjA9XEUyLCBrZjE9XEVwLCBrZjI9XEVxLCBrZjM9XEVyLCBrZjQ9XEVzLCBrZjU9XEV0LCBrZjY9XEV1LAorCWtmNz1cRXYsIGtmOD1cRXcsIGtmOT1cRTEsIGtob21lPVxFSCwga2ljaDE9XEVRXEVPLAorCWtybWlyPVxFUiwgbGYwPVRBQiBDTEVBUiwgbGY5PVRBQiBTRVQsIHJtY3VwPSwgcm1pcj1cRVIsCisJcm1zbz1cRV8zLCBybXVsPVxFXzMsIHNncjA9XEVfMywgc21jdXA9XEVPLCBzbWlyPVxFUVxFTywKKwlzbXNvPVxFXzEsIHNtdWw9XEVfMCwgdGJjPVxFMywKK3NiaXxzdXBlcmJlZXxiZWVoaXZlIHN1cGVyYmVlIGF0IEluZGlhbmEgVS4sCisJeHNiLAorCWNyPVxyJDwxPiwgaWwxPTFcRU5cRUwkPDk+XEVRIFxFUCQ8OT4gXEVPXEVSXEVBLAorCXVzZT1zYjEsCisjIEFsdGVybmF0ZSAob2xkZXIpIGRlc2NyaXB0aW9uIG9mIFN1cGVyYmVlIC0gZjE9ZXNjYXBlLCBmMj1eQy4KKyMgTm90ZTogdGhlcmUgYXJlIGF0IGxlYXN0IDMga2luZHMgb2Ygc3VwZXJiZWVzIGluIHRoZSB3b3JsZC4gIFRoZSBzYjEKKyMgaG9sZHMgb250byBlc2NhcGVzIGFuZCBib3RjaGVzIF5DJ3MuICBUaGUgc2IyIGlzIHRoZSBiZXN0IG9mIHRoZSAzLgorIyBUaGUgc2IzIHB1dHMgZ2FyYmFnZSBvbiB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4gd2hlbiB5b3Ugc2Nyb2xsIHdpdGgKKyMgdGhlIHN3aXRjaCBpbiB0aGUgYmFjayBzZXQgdG8gQ1JMRiBpbnN0ZWFkIG9mIEFFUC4gIFRoaXMgZGVzY3JpcHRpb24KKyMgaXMgdGVzdGVkIG9uIHRoZSBzYjIgYnV0IHNob3VsZCB3b3JrIG9uIGFsbCB3aXRoIGVpdGhlciBzd2l0Y2ggc2V0dGluZy4KKyMgVGhlIGYxL2YyIGJ1c2luZXNzIGlzIGZvciB0aGUgc2IxIGFuZCB0aGUgPHhzYj4gY2FuIGJlIHRha2VuIG91dCBmb3IKKyMgdGhlIG90aGVyIHR3byBpZiB5b3Ugd2FudCB0byB0cnkgdG8gaGl0IHRoYXQgdGlueSBlc2NhcGUga2V5LgorIyBUaGlzIGRlc2NyaXB0aW9uIGlzIHRyaWNreTogYmVpbmcgYWJsZSB0byB1c2UgY3VwIGRlcGVuZHMgb24gdGhlcmUgYmVpbmcKKyMgMjA0OCBieXRlcyBvZiBtZW1vcnkgYW5kIHRoZSBoYWlyeSA8bmw+IHN0cmluZy4KK3N1cGVyYmVlLXhzYnxiZWVoaXZlIHN1cGVyIGJlZSwKKwlhbSwgZGEsIGRiLCB4c2IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJY2xlYXI9XEVIXEVKJDwzPiwgY25vcm09XkosIGNyPVxyJDwxMDAwPiwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFQywgY3VwPVxFRiVwMiUzZCVwMSUzZCwgY3V1MT1cRUEkPDM+LAorCWRjaDE9XEVQJDwzPiwgZGwxPVxFTSQ8MTAwPiwgZWQ9XEVKJDwzPiwgZWw9XEVLJDwzPiwKKwlob21lPVxFSCwgaHQ9XkksIGh0cz1cRTEsCisJaW5kPVxuXDBcMFwwXG5cMFwwXDBcRUFcRUtcMFwwXDBcRVRcRVQsIGlzMj1cRUhcRUosCisJa2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBrZjE9XEVwLCBrZjI9XEVxLAorCWtmMz1cRXIsIGtmND1cRXMsIGtmNT1cRXQsIGtmNj1cRXUsIGtmNz1cRXYsIGtmOD1cRXcsCisJa2hvbWU9XEVILCBybXNvPVxFXzMsIHNncjA9XEVfMywgc21zbz1cRV8xLCB0YmM9XEUzLAorIyBUaGlzIGxvc2VzIG9uIGxpbmVzID4gODAgY2hhcnMgbG9uZywgdXNlIGF0IHlvdXIgb3duIHJpc2sKK3N1cGVyYmVlaWN8c3VwZXIgYmVlIHdpdGggaW5zZXJ0IGNoYXIsCisJaWNoMT0sIHJtaXI9XEVSLCBzbWlyPVxFUSwgdXNlPXN1cGVyYmVlLXhzYiwKK3NiMnxzYjN8Zml4ZWQgc3VwZXJiZWUsCisJeHNiQCwgdXNlPXN1cGVyYmVlLAorCisjIyMjICBCZWVoaXZlIE1lZGljYWwgRWxlY3Ryb25pY3MKKyMKKyMgU3RldmUgU2V5bW91ciA8c3JzZXltb3VyQG1pbmRzcHJpbmcuY29tPiB3cml0ZXMgKFdlZCwgMDMgRmViIDE5OTkpOgorIyBSZWdhcmRpbmcgeW91ciBxdWVzdGlvbiB0aG91Z2g7IEJlZWhpdmUgdGVybWluYWxzIHdlcmVuJ3QgbWFkZSBieSBIYXJyaXMuCisjIFRoZXkgd2VyZSBtYWRlIGJ5IEJlZWhpdmUgTWVkaWNhbCBFbGVjdHJvbmljcyBpbiBVdGFoLiBUaGV5IHdlbnQgb3V0IG9mCisjIGJ1c2luZXNzIGluIHRoZSBlYXJseSAnODBzLgorIworIyAoT0ssIHRoZW4sIEkgZG9uJ3Qga25vdyB3aHkgYSBjb3VwbGUgb2YgdGhlc2Ugc2F5ICJoYXJyaXMgYmVlaGl2ZSIuKQorIworCisjIFJlcG9ydHMgYXJlIHRoYXQgbW9zdCBvZiB0aGVzZSBCZWVoaXZlIGVudHJpZXMgKGV4Y2VwdCBzdXBlcmJlZSkgaGF2ZSBub3QKKyMgYmVlbiB0ZXN0ZWQgYW5kIGRvIG5vdCB3b3JrIHJpZ2h0LiAgPHJtc28+IGlzIGEgdHJvdWJsZSBzcG90LiAgQmUgd2FybmVkLgorCisjIChiZWU6IDxpY2gxPiB3YXMgZW1wdHksIHdoaWNoIGlzIG9idmlvdXNseSBib2d1cyAtLSBlc3IpCitiZWVoaXZlfGJlZXxoYXJyaXMgYmVlaGl2ZSwKKwlPVGJzLCBhbSwgbWlyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNidD1cRT4sIGNsZWFyPVxFRSwgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRUYlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFUCwKKwlkbDE9XEVNLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGlsMT1cRUwsIGticz1eSCwga2NidD1cRT4sCisJa2Nscj1cRUUsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwKKwlrZGNoMT1cRVAsIGtkbDE9XEVNLCBrZWw9XEVLLCBraG9tZT1cRUgsIGtpY2gxPVxFUSwga2lsMT1cRUwsCisJa3JtaXI9XEVALCBybWlyPVxFQCwgcm1zbz1cRWRALCBybXVsPVxFZEAsIHNncjA9XEVkQCwKKwlzbWlyPVxFUSwgc21zbz1cRWRQLCBzbXVsPVxFZGAsCisjIHNldCB0YWIgaXMgXkYsIGNsZWFyIChvbmUpIHRhYiBpcyBeViwgbm8gd2F5IHRvIGNsZWFyIGFsbCB0YWJzLgorIyBnb29kIGdyaWVmIC0gZG9lcyB0aGlzIGVudHJ5IG1ha2UgOnNnOi86dWc6IHdoZW4gaXQgZG9lc24ndCBoYXZlIHRvPworIyBsb29rIGF0IHRob3NlIHNwYWNlcyBpbiA8cm1zbz4vPHNtc28+LiAgU2VlbXMgc3RyYW5nZSB0byBtZS4uLgorIyAoYmVlaGl2ZTogPGlmPS91c3Ivc2hhcmUvdGFic2V0L2JlZWhpdmU+IHJlbW92ZWQsIG5vIHN1Y2ggZmlsZS4gIElmIHlvdQorIyByZWFsbHkgY2FyZSwgY29vayB1cCBvbmUgdXNpbmcgXkYgLS0gZXNyKQorYmVlaGl2ZTN8YmgzbXxiZWVoaXZlSUlJbXxoYXJyaXMgYmVlaGl2ZSAzbSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyMCwKKwliZWw9XkcsIGNsZWFyPV5FXlIsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLCBjdXUxPV5LLAorCWRsMT1cMDIxJDwzNTA+LCBlZD1eUiwgZWw9XlAsIGhvbWU9XkUsIGh0PV5JLCBodHM9XkYsCisJaWwxPVwwMjMkPDE2MD4sIGluZD1eSiwgbGw9XkVeSywgcm1zbz1cc15fLCBzbXNvPV5dXHMsCitiZWVoaXZlNHxiaDR8YmVlaGl2ZSA0LAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVFLCBjcj1eTSwgY3ViMT1cRUQsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1dTE9XEVBLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGluZD1eSiwKKyMgVGhlcmUgd2FzIGFuIGVhcmx5IEF1c3RyYWxpYW4ga2l0LWJ1aWx0IGNvbXB1dGVyIGNhbGxlZCBhICJNaWNyb2JlZSIuCisjIEl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgdGhpcyBpcyBmb3Igb25lIG9mIHRob3NlIG9yIGZvciBhIHJlbGF0aXZlCisjIG9mIHRoZSBCZWVoaXZlLgorbWljcm9ifG1pY3JvYmVlfG1pY3JvIGJlZSBzZXJpZXMsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUUsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVGJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZWQ9XEVKLAorCWVsPVxFSywgaHQ9XkksIGluZD1eSiwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtmMT1cRXAsIGtmMj1cRXEsIGtmMz1cRXIsIGtmND1cRXMsIGtmNT1cRXQsCisJa2Y2PVxFdSwga2Y3PVxFdiwga2Y4PVxFdywga2Y5PVxFeCwga2hvbWU9XEVILCBybXNvPVxFZEAsCisJcm11bD1cRWRALCBzZ3IwPVxFZEAsIHNtc289XHNcRWRQLCBzbXVsPVxFZGAsCisKKyMgODY3NSwgODY4NiwgYW5kIGJlZSBmcm9tIEN5cnVzIFJhaG1hbgorIyAoODY3NTogY2hhbmdlZCBrMTAsIGsxMS4uLmsxNiB0byBrOywgRjEuLi5GNiAtLSBlc3IpCitoYTg2NzV8aGFycmlzIDg2NzUsCisJaXMyPVxFU1xFI1xFKlxFaFxFbVxFP1xFMVxFOVxFQFxFWFxFVSwga2YxPV5GLAorCWtmMTA9XEVkLCBrZjExPV5XLCBrZjEyPVxFUiwga2YxMz1cRUUsIGtmMTQ9XEVJLCBrZjE1PVxFaSwKKwlrZjE2PVxFZywga2YyPV5QLCBrZjM9Xk4sIGtmND1eViwga2Y1PV5KLCBrZjY9XlQsIGtmNz1eSCwKKwlrZjg9XDE3Nywga2Y5PVxFZSwgdXNlPWJlZSwKKyMgKDg2ODY6IGNoYW5nZWQgazEwLCBrMTEuLi5rMTYgdG8gazssIEYxLi4uRjY7IGZpeGVkIGJyb2tlbiBjb250aW51YXRpb24KKyMgaW4gOmlzOiAtLSBlc3IpCitoYTg2ODZ8aGFycmlzIDg2ODYsCisJaXMyPVxFU1xFI1xFKlxFaFxFbVxFP1xFMVxFOVxFQFxFWFxFVVxFIipaMDFcRSI4RjM1MDIxQjdDODMjXEUiOEY0NTAyMUI3RDgzI1xFIjhGNTUwMjFCN0U4MyNcRSI4RjY1MDIxQjdGODMjXEUiOEY3NTAyMUI3MzgzI1xFIjhGODUxQkQ3I1xFIjhGOTUwMjFCNzA4MyNcRSI4RkE1MDIxQjcxODMjXEUiOEZCNTAyMUI3MjgzIywKKwlrZjE9XDAwMlxFcFwwMDMsIGtmMTA9XEVqLCBrZjExPVxFVywga2YxMj1cMDAyXEV7XDAwMywKKwlrZjEzPVwwMDJcRXxcMDAzLCBrZjE0PVwwMDJcRX1cMDAzLCBrZjE1PVwwMDJcRX5cMDAzLAorCWtmMTY9XDAwMlxFXDE3N1wwMDMsIGtmMj1cMDAyXEVxXDAwMywga2YzPVwwMDJcRXJcMDAzLAorCWtmND1cMDAyXEVzXDAwMywga2Y1PVxFMywga2Y2PVxFSSwga2Y3PVxFUiwga2Y4PVxFSiwga2Y5PVxFKCwKKwl1c2U9YmVlLAorCisjIyMjIEhhemVsdGluZQorIworIyBIYXplbHRpbmUgYXBwZWFycyB0byBiZSBvdXQgb2YgdGhlIHRlcm1pbmFsIGJ1c2luZXNzIGFzIG9mIDE5OTUuICBUaGVzZQorIyBndXlzIHdlcmUgY28tb3duZXJzIG9mIHRoZSBUZXJtaW5hbCBCcmFpbiBEYW1hZ2UgSGFsbCBPZiBGYW1lIGFsb25nIHdpdGgKKyMgSGFycmlzLiBUaGV5IGhhdmUgYSBoYXplbHRpbmUuY29tIGRvbWFpbiAoYnV0IG5vIHdlYiBwYWdlIHRoZXJlICkgYW5kIGNhbgorIyBiZSByZWFjaGVkIGF0OgorIworIwlIYXplbHRpbmUKKyMJNDUwIEVhc3QgUHVsYXNraSBSb2FkCisjCUdyZWVubGF3biwgTmV3IFlvcmsgMTE3NDAKKyMKKyMgQXMgbGF0ZSBhcyAxOTkzLCBtYW51YWxzIGZvciB0aGUgdGVybWluYWwgcHJvZHVjdCBsaW5lIGNvdWxkIHN0aWxsIGJlCisjIHB1cmNoYXNlZCBmcm9tOgorIworIwlUUlcgQ3VzdG9tZXIgU2VydmljZSBEaXZpc2lvbgorIwkxNSBMYXcgRHJpdmUKKyMJUC5PLiBCb3ggMjA3NgorIwlGYWlyZmllbGQsIE5KIDA3MDA3LTIwNzgKKyMKKyMgVGhleSdyZSBub3cgKDE5OTgpIGEgc3Vic2lkaWFyeSBvZiBHZW5lcmFsIEVsZWN0cmljLCBvcGVyYXRpbmcgdW5kZXIgdGhlCisjIG1hcnF1ZSAiR0VDLU1hcmNvbmkgSGF6ZWx0aW5lIiBhbmQgZG9pbmcgbWlsaXRhcnkgYXZpb25pY3MuICBXZWIgcGFnZQorIyBhdCA8aHR0cDovL3d3dy5nZWMuY29tL2NwZC8xbmNwZC5odG0jMS41NT4uCisjCisKKyMgU2luY2UgPGN1ZjE+IGlzIGJsYW5rLCB3aGVuIHlvdSB3YW50IHRvIGVyYXNlIHNvbWV0aGluZyB5b3UKKyMgYXJlIG91dCBvZiBsdWNrLiAgWW91IHdpbGwgaGF2ZSB0byBkbyBeTCdzIGEgbG90IHRvCisjIHJlZHJhdyB0aGUgc2NyZWVuLiAgaDEwMDAgaXMgdW50ZXN0ZWQuICBJdCBkb2Vzbid0IHdvcmsgaW4KKyMgdmkgLSB0aGlzIHRlcm1pbmFsIGlzIHRvbyBkdW1iIGZvciBldmVuIHZpLiAgKFRoZSBjb2RlIGlzCisjIHRoZXJlIGJ1dCBpdCBpc24ndCBkZWJ1Z2dlZCBmb3IgdGhpcyBjYXNlLikKK2h6MTAwMHxoYXplbHRpbmUgMTAwMCwKKwlPVGJzLAorCWNvbHMjODAsIGxpbmVzIzEyLAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxzLCBob21lPV5LLAorCWluZD1eSiwKKyMgRnJvbTogPGNib3NnIXVjYnZheCFwdXItZWUhY2luY3khY2hyaXM+IFRodSBBdWcgMjAgMDk6MDk6MTggMTk4MQoraHoxNDIwfGhhemVsdGluZSAxNDIwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVeXCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlAsCisJY3VwPVxFXDAyMSVwMiVjJXAxJXszMn0lKyVjLCBjdXUxPVxFXkwsIGRsMT1cRV5TLAorCWVkPVxFXlgsIGVsPVxFXk8sIGh0PV5OLCBpbDE9XEVeWiwgaW5kPV5KLCBybXNvPVxFXlksCisJc21zbz1cRV5fLAorIyBOZXcgInNhZmUiIGN1cnNvciBtb3ZlbWVudCAoMTEvODcpIGZyb20gPGNnc0B1bWQ1LnVtZC5lZHU+LiAgUHJldmVudHMKKyMgZnJlYWtvdXQgd2l0aCBvdXQtb2YtcmFuZ2UgYXJncyBhbmQgdG4zMjcwLiAgTm8gaHogc2luY2UgaXQgbmVlZHMgdG8KKyMgcmVjZWl2ZSB0aWxkZXMuCitoejE1MDB8aGF6ZWx0aW5lIDE1MDAsCisJT1RicywgYW0sIGh6LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9fl5cLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1+XkssIGN1ZjE9XlAsCisJY3VwPX5cMDIxJXAyJXAyJT8lezMwfSU+JXQlezMyfSUrJTslezk2fSUrJWMlcDElezk2fSUrJWMsCisJY3V1MT1+XkwsIGRsMT1+XDAyMyQ8NDA+LCBlZD1+XDAzMCQ8MTA+LCBlbD1+Xk8sIGhvbWU9fl5SLAorCWlsMT1+XDAzMiQ8NDA+LCBpbmQ9XkosIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XlAsCisJa2N1dTE9fl5MLCBraG9tZT1+XlIsIHJtc289fl5ZLCBzbXNvPX5eXywKKyMgaDE1MTAgYXNzdW1lZCB0byBiZSBpbiBzYW5lIGVzY2FwZSBtb2RlLiAgRWxzZSB1c2UgaDE1MDAuCisjIChoMTUxMDogZWFybHkgdmVyc2lvbnMgb2YgdGhpcyBlbnRyeSBhcHBhcmVudGx5IGhhZCAiPHJtc289XEVeXz4sCisjIDxzbXNvPVxFXlk+LCBidXQgdGhlc2UgY2FwcyB3ZXJlIGNvbW1lbnRlZCBvdXQgaW4gOC4zOyBhbHNvLAorIyByZW1vdmVkIGluY29ycmVjdCBhbmQgb3ZlcnJpZGRlbiAiOmRvPV5KOiIgLS0gZXNyKQoraHoxNTEwfGhhemVsdGluZSAxNTEwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVeXCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVeSywgY3VmMT1eUCwKKwljdXA9XEVcMDIxJXAyJWMlcDElYywgY3V1MT1cRV5MLCBkbDE9XEVeUywgZWQ9XEVeWCwKKwllbD1cRV5PLCBpbDE9XEVeWiwgaW5kPV5KLAorIyBIYXplbHRpbmUgMTUyMAorIyBUaGUgZm9sbG93aW5nIHN3aXRjaCBzZXR0aW5ncyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJRlVMTAkJQ1IJCVUvTF9DQVNFCUVTQ0FQRQorIwlGT1JNQVRfT0ZGCUVPTV9BX09GRglFT01fQl9PRkYJV1JBUEFST1VORF9PTgorIyBPdGhlciBzd2l0Y2hlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50cy4KK2h6MTUyMHxIYXplbHRpbmUgMTUyMCwKKwlPVGJzLCBhbSwgYncsIG1zZ3IsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBib2xkPVxFXl8sIGNsZWFyPVxFXlwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XlAsIGN1cD1cRVwwMjElcDIlYyVwMSVjLCBjdXUxPVxFXkwsIGRsMT1cRV5TLAorCWVkPVxFXlgsIGVsPVxFXk8sIGhvbWU9XEVeUiwgaWwxPVxFXlosIGluZD1eSiwga2JzPV5ILAorCWtjbHI9XEVeXCwga2N1YjE9XkgsIGtjdWQxPVxFXkssIGtjdWYxPV5QLCBrY3V1MT1cRV5MLAorCWtkbDE9XEVeUywga2VkPVxFXlgsIGtlbD1cRV5PLCBraG9tZT1cRV5SLCBraWwxPVxFXlosCisJcm1zbz1cRV5ZLCByczE9XEUkXEVcMDA1XEU/XEVcMDMxLCBzZ3IwPVxFXlksIHNtc289XEVeXywKKyMgVGhpcyB2ZXJzaW9uIHdvcmtzIHdpdGggdGhlIGVzY2FwZSBzd2l0Y2ggb2ZmCisjIChoMTUyMDogcmVtb3ZlZCBpbmNvcnJlY3QgYW5kIG92ZXJyaWRkZW4gIjpkbz1eSjoiIC0tIGVzcikKK2h6MTUyMC1ub2VzY3xoYXplbHRpbmUgMTUyMCwKKwlhbSwgaHosCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1+XlwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPX5eSywgY3VmMT1eUCwKKwljdXA9flwwMjElcDIlYyVwMSVjJDwxPiwgY3V1MT1+XkwsIGRsMT1+XlMsIGVkPX5eWCwgZWw9fl5PLAorCWhvbWU9fl5SLCBpbDE9fl5aLCBpbmQ9XkosIHJtc289fl5ZLCBzbXNvPX5eXywKKyMgTm90ZTogdGhlIGgxNTUyIGFwcGVhcnMgdG8gYmUgdGhlIGZpcnN0IEhhemVsdGluZSB0ZXJtaW5hbCB3aGljaAorIyBpcyBub3QgYnJhaW5kYW1hZ2VkLiAgSXQgaGFzIHRpbGRlcyBhbmQgYmFja3ByaW1lcyBhbmQgZXZlcnl0aGluZyEKKyMgQmUgc3VyZSB0aGUgYXV0byBsZi9jciBzd2l0Y2ggaXMgc2V0IHRvIGNyLgoraHoxNTUyfGhhemVsdGluZSAxNTUyLAorCU9UYnMsCisJY3VkMT1eSiwgZGwxPVxFTywgaWwxPVxFRSwga2YxPVxFUCwga2YyPVxFUSwga2YzPVxFUiwgbGYxPWJsdWUsCisJbGYyPXJlZCwgbGYzPWdyZWVuLCB1c2U9dnQ1MiwKK2h6MTU1Mi1ydnxoYXplbHRpbmUgMTU1MiByZXZlcnNlIHZpZGVvLAorCWN1ZDE9XkosIHJtc289XEVULCBzbXNvPVxFUywgdXNlPWh6MTU1MiwKKyMgTm90ZTogaDIwMDAgd29uJ3Qgd29yayB3ZWxsIGJlY2F1c2Ugb2YgYSBjbGFzaCBiZXR3ZWVuIHVwcGVyIGNhc2UgYW5kIH4ncy4KK2h6MjAwMHxoYXplbHRpbmUgMjAwMCwKKwlPVGJzLCBPVG5jLCBhbSwKKwljb2xzIzc0LCBsaW5lcyMyNywKKwliZWw9XkcsIGNsZWFyPX5cMDM0JDw2PiwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdXA9flwwMjElcDIlYyVwMSVjLCBkbDE9flwwMjMkPDY+LCBob21lPX5eUiwKKwlpbDE9flwwMzIkPDY+LCBpbmQ9XkosIHBhZD1cMTc3LAorIyBEYXRlOiBGcmkgSnVsIDIzIDEwOjI3OjUzIDE5ODIuICBTb21lIHVua25vd24gcGVyc29uIHdyb3RlOgorIyBJIHRlc3RlZCB0aGlzIHRlcm1jYXAgZW50cnkgZm9yIHRoZSBIYXplbHRpbmUgRXNwcml0IHdpdGggdmkuIEl0IHNlZW1zCisjIHRvIHdvcmsgb2suIFRoZXJlIGlzIG9uZSBwcm9ibGVtIHRob3VnaCBpZiBvbmUgdHlwZXMgYSBsb3Qgb2YgZ2FyYmFnZQorIyBjaGFyYWN0ZXJzIHZlcnkgZmFzdCB2aSBzZWVtcyBub3QgYWJsZSB0byBrZWVwIHVwIGFuZCBoYW5ncyB3aGlsZSB0cnlpbmcKKyMgdG8gaW5zZXJ0LiBUaGF0J3MgaW4gaW5zZXJ0IG1vZGUgd2hpbGUgdHJ5aW5nIHRvIGluc2VydCBpbiB0aGUgbWlkZGxlIG9mCisjIGEgbGluZS4gSXQgbWlnaHQgYmUgYmVjYXVzZSB0aGUgRXNwcml0IGRvZXNuJ3QgaGF2ZSBpbnNlcnQgY2hhciBhbmQgZGVsZXRlCisjIGNoYXIgYXMgYSBidWlsdCBpbiBmdW5jdGlvbi4gVmkgaGFzIHRvIGRlbGV0ZSB0byBlbmQgb2YgbGluZSBhbmQgdGhlbgorIyByZWRyYXcgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuCitlc3ByaXR8SGF6ZWx0aW5lIEVzcHJpdCBJLAorCU9UYnMsIGFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1cRV5ULCBjbGVhcj1cRV5cLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRV5LLAorCWN1ZjE9XlAsIGN1cD1cRVwwMjElcDIlYyVwMSVjLCBjdXUxPVxFXkwsIGRsMT1cRV5TLAorCWVkPVxFXlcsIGVsPVxFXk8sIGhvbWU9XEVeUiwgaWwxPVxFXlosIGluZD1eSiwgaXMyPVxFPywga2JzPV5ILAorCWtjdWIxPV5ILCBrY3VkMT1cRV5LLCBrY3VmMT1eUCwga2N1dTE9XEVeTCwga2YwPV5CMF5KLAorCWtmMT1eQjFeSiwga2YyPV5CMl5KLCBrZjM9XkIzXkosIGtmND1eQjReSiwga2Y1PV5CNV5KLAorCWtmNj1eQjZeSiwga2Y3PV5CN15KLCBrZjg9XkI4XkosIGtmOT1eQjleSiwga2hvbWU9XEVeUiwKKwlsZjA9MCwgbGYxPTEsIGxmMj0yLCBsZjM9MywgbGY0PTQsIGxmNT01LCBsZjY9NiwgbGY3PTcsIGxmOD04LCBsZjk9OSwKKwlybWt4PVxFPiwgcm1zbz1cRV5ZLCBzbWt4PVxFPCwgc21zbz1cRV5fLAorZXNwcml0LWFtfGhhemVsdGluZSBlc3ByaXQgYXV0by1tYXJnaW4sCisJYW0sIHVzZT1lc3ByaXQsCisjIEhhemVsdGluZSBNb2R1bGFyLTEgZnJvbSBDbGlmZiBTaGFja2VsdG9uIDxpdHR2YXghaXR0cmFsIXNoYWNrZWx0PiB2aWEgQlJMCisjIFZpIGl0IHNlZW1zIGFsd2F5cyB3YW50cyB0byBzZW5kIGEgY29udHJvbCBKIGZvciAiZG8iIGFuZCBpdCB0dXJuZWQgb3V0CisjIHRoYXQgdGhlIHRlcm1pbmFsIHdvdWxkIHdvcmsgc29tZXdoYXQgaWYgdGhlIGF1dG8gTEYvQ1Igd2FzIHR1cm5lZCBvZmYuCisjIChobW9kMTogcmVtb3ZlZCA6ZG49fl5LOiAtLSBlc3IpCitobW9kMXxIYXplbHRpbmUgTW9kdWxhciAxLAorCU9UYnMsIGFtLCBoeiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1+XlQsIGNsZWFyPX5eXCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9fl5LLCBjdWYxPV5QLAorCWN1cD1+XDAyMSVwMiVjJXAxJWMsIGN1dTE9fl5MLCBkbDE9fl5TLCBob21lPX5eUiwgaWwxPX5eWiwKKwlpbmQ9XkosIGtjdWIxPV5ILCBrY3VkMT1+XkssIGtjdWYxPV5QLCBrY3V1MT1+XkwsIGtob21lPX5eUiwKKwlyYz1+XlEsIHJtc289fl5ZLCBzYz1+XkUsIHNncjA9fl5ZLCBzbXNvPX5eXywKKyMKKyMgSGF6ZWx0aW5lIEV4ZWN1dGl2ZSA4MCBNb2RlbCAzMCAoMTU1ND8pCisjCWZyb20gIFdpbGwgTWFydGluIDxjb250cm9sQEFMTVNBLTEuQVJQQT4gdmlhIEJSTAorIyBMaWtlIFZUMTAwLCBleGNlcHQgZm9yIGRpZmZlcmVudCAiYW0iIGJlaGF2aW9yLgoraGF6ZWx8ZXhlYzgwfGg4MHxoZTgwfEhhemVsdGluZSBFeGVjdXRpdmUgODAsCisJT1RicywgT1RwdCwgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsCisJT1RubD1eSiwgYmVsPV5HLCBibGluaz1cRVs1bSQ8Mi8+LCBib2xkPVxFWzFtJDwyLz4sCisJY2xlYXI9XEVbO0hcRVsySiQ8NTAvPiwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFW0MkPDIvPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDUvPiwgY3V1MT1cRVtBJDwyLz4sCisJZWQ9XEVbSiQ8NTAvPiwgZWw9XEVbSyQ8My8+LCBob21lPVxFW0gsIGh0PV5JLAorCWlzMj1cRVsxOzI0clxFWzI0OzFILCBrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsCisJa2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywgcmM9XEU4LCByZXY9XEVbN20kPDIvPiwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgcmk9XEVNJDw1Lz4sCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSQ8Mi8+LCBybXVsPVxFW20kPDIvPiwKKwlyczE9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLCBzYz1cRTcsCisJc2dyMD1cRVttJDwyLz4sIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtJDwyLz4sCisJc211bD1cRVs0bSQ8Mi8+LAorCisjIyMjIElCTQorIworCitpYm0zMjd4fGxpbmUgbW9kZSBJQk0gMzI3MCBzdHlsZSwKKwlnbiwKKwljbGVhcj1eTV5KLCBlbD1eTSwgaG9tZT1eTSwKKworaWJtMzEwMXxpMzEwMXxJQk0gMzEwMS0xMCwKKwlPVGJzLCBhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVLLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGVkPVxFSiwKKwllbD1cRUksIGhvbWU9XEVILCBodHM9XEUwLCBpbmQ9XkosIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCBuZWw9Xk1eSiwgdGJjPVxFSCwKK2libTMxNTF8SUJNIDMxNTEgZGlzcGxheSwKKwlpczI9XEUgUywgcm1hY3M9XEU+Qiwgcm1jdXA9XEU+QiwgcnMyPVxFIFMsIHMwZHM9XEU+QiwKKwlzZ3I9XEU0JXs2NH0lPyVwMSV0JXs2NX0lfCU7JT8lcDIldCV7NjZ9JXwlOyU/JXAzJXQlezY1fSV8JTslPyVwNCV0JXs2OH0lfCU7JT8lcDUldCV7NjR9JXwlOyU/JXA2JXQlezcyfSV8JTslPyVwNyV0JXs4MH0lfCU7JWMlPyVwOSV0XEU+QSVlXEU+QiU7LAorCXNncjA9XEU0QFxFPkIsIHNtYWNzPVxFPkEsIHNtY3VwPVxFPkIsIHVzZT1pYm0zMTYyLAorIyBGcm9tOiBNYXJrIEVhc3RlciA8bWFya2VAZnNpLXNzZC5jc2cuc3NkLmZzaS5jb20+IDI5IE9jdCAxOTkyCisjIHJlbW92ZWQga2VuZCwga25wLCBrcHAgLVRECitpYm0zMTYxfGlibTMxNjN8d3k2MC0zMTZYfHd5c2U2MC0zMTZYfElCTSAzMTYxLzMxNjMgZGlzcGxheSwKKwlPVGJzLCBhbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9alwzNTJrXDM1M2xcMzU0bVwzNTVuXDM1NnFcMzYxdFwzNjR1XDM2NXZcMzY2d1wzNjd4XDM3MCwKKwliZWw9XkcsIGJsaW5rPVxFNEQsIGJvbGQ9XEU0SCwgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1cRUQsCisJY3VkMT1cRUIsIGN1ZjE9XEVDLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XEVBLCBkY2gxPVxFUSwgZGwxPVxFTywgZWQ9XEVKLCBlbD1cRUksIGhvbWU9XEVILCBpbmQ9XkosCisJaW52aXM9XEU0UCwga2JzPV5ILCBrY2J0PVxFMiwga2Nscj1cRUxcciwga2N0YWI9XEUxLAorCWtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2RjaDE9XEVRLAorCWtkbDE9XEVPLCBrZWQ9XEVKLCBrZWw9XEVJLCBrZjE9XEVhXHIsIGtmMTA9XEVqXHIsCisJa2YxMT1cRWtcciwga2YxMj1cRWxcciwga2YxMz1cRSFhXHIsIGtmMTQ9XEUhYlxyLAorCWtmMTU9XEUhY1xyLCBrZjE2PVxFIWRcciwga2YxNz1cRSFlXHIsIGtmMTg9XEUhZlxyLAorCWtmMTk9XEUhZ1xyLCBrZjI9XEViXHIsIGtmMjA9XEUhaFxyLCBrZjIxPVxFIWlcciwKKwlrZjIyPVxFIWpcciwga2YyMz1cRSFrXHIsIGtmMjQ9XEUhbFxyLCBrZjM9XEVjXHIsCisJa2Y0PVxFZFxyLCBrZjU9XEVlXHIsIGtmNj1cRWZcciwga2Y3PVxFZ1xyLCBrZjg9XEVoXHIsCisJa2Y5PVxFaVxyLCBraG9tZT1cRUgsIGtodHM9XEUwLCBraWNoMT1cRVAgXDAxMCwga2lsMT1cRU4sCisJa3RiYz1cRSAxLCBtYzQ9XlBeVCwgbWM1PV5QXlIsIHJldj1cRTRBLCBybWN1cD1cRT5BLAorCXJtc289XEU0QCwgcm11bD1cRTRALAorCXNncj1cRTQlezY0fSU/JXAxJXQlezY1fSV8JTslPyVwMiV0JXs2Nn0lfCU7JT8lcDMldCV7NjV9JXwlOyU/JXA0JXQlezY4fSV8JTslPyVwNSV0JXs2NH0lfCU7JT8lcDYldCV7NzJ9JXwlOyU/JXA3JXQlezgwfSV8JTslYyU/JXA5JXRcRT5BJWVcRTxAJTssCisJc2dyMD1cRTRAXEU8QCwgc21jdXA9XEU+QSwgc21zbz1cRTRBLCBzbXVsPVxFNEIsCisKK2libTMxNjEtQ3xJQk0gMzE2MS1DIE5MUyB0ZXJtaW5hbCB1c2luZyBjYXJ0cmlkZ2UsCisJcm1jdXA9XEU+QiwgczBkcz1cRT5CLCBzMWRzPVxFPkEsIHNtY3VwPVxFPkIsIHVzZT1pYm0zMTYxLAoraWJtMzE2MnxJQk0gMzE2MiBkaXNwbGF5LAorCWJsaW5rPVxFNCRhLCBib2xkPVxFNChhLCBpbDE9XEVOLCBpbnZpcz1cRTQwYSwgcmV2PVxFNCFhLAorCXJtc289XEU0PmIsIHJtdWw9XEU0PWIsIHNncjA9XEU0QCwgc21zbz1cRTQhYSwgc211bD1cRTQiYSwKKwl1c2U9aWJtMzE2MS1DLAorCisjIFRoaXMgcmVhbGx5IHNob3VsZCBub3QgdXNlIHNldGFiL3NldGFmLCBidXQgaXQgaXMgY2xlYXIgdGhhdCB0aGUKKyMgb3JpZ2luYWwgdGVybWluZm8gZG9lcyBub3QgdG9nZ2xlIHJlZC9ibHVlIGNvbG9ycyBhcyBpbiBzZXRiL3NldGYuCitpYm0zMTY0fGkzMTY0fElCTSAzMTY0LAorCW1zZ3IsCisJY29sb3JzIzgsIHBhaXJzIzY0LAorCW9wPVxFNCAiQCwgcm1jdXA9XEUhOShOXEU+QiwgczBkcz1cRT5CLCBzMWRzPVxFPkEsCisJc2V0YWI9XEU0ICAlcDElezY0fSUrJWMsCisJc2V0YWY9XEU0JT8lcDEldCAlcDElezMyfSUrJWMlZSEnJTtALAorCXNtY3VwPVxFITkvTlxFPkIsIHVzZT1pYm0zMTYxLAorCitpYm01MTUxfHd5NjAtQVR8d3lzZTYwLUFUfElCTSA1MTUxIE1vbm9jaHJvbWUgZGlzcGxheSwKKwlhbSwgYncsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwlhY3NjPWpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVxXDMwNHRcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjMsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFW0osIGNyPV5NLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILAorCWhwYT1cRVslaSVwMSVkRywgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPVxFW1MsCisJaW5kbj1cRVslcDElZFMsIGludmlzPVxFWzhtLCBpczI9XEVjLCBrYnM9XkgsIGtjYnQ9XEVbWiwKKwlrY2xyPVxFWzE0NHEsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsCisJa2N1dTE9XEVbQSwga2RjaDE9XEVbUCwga2VkPVxFWzE0OHEsIGtlbD1cRVsxNDJxLAorCWtlbmQ9XEVbMTQ2cSwga2YxPVxFWzAwMXEsIGtmMTA9XEVbMDEwcSwga2YxMT1cRVswMTFxLAorCWtmMTI9XEVbMDEycSwga2YxMz1cRVswMTNxLCBrZjE0PVxFWzAxNHEsIGtmMTU9XEVbMDE1cSwKKwlrZjE2PVxFWzAxNnEsIGtmMTc9XEVbMDE3cSwga2YxOD1cRVswMThxLCBrZjE5PVxFWzAxOXEsCisJa2YyPVxFWzAwMnEsIGtmMjA9XEVbMDIwcSwga2YyMT1cRVswMjFxLCBrZjIyPVxFWzAyMnEsCisJa2YyMz1cRVswMjNxLCBrZjI0PVxFWzAyNHEsIGtmMjU9XEVbMDI1cSwga2YyNj1cRVswMjZxLAorCWtmMjc9XEVbMDI3cSwga2YyOD1cRVswMjhxLCBrZjI5PVxFWzAyOXEsIGtmMz1cRVswMDNxLAorCWtmMzA9XEVbMDMwcSwga2YzMT1cRVswMzFxLCBrZjMyPVxFWzAzMnEsIGtmMzM9XEVbMDMzcSwKKwlrZjM0PVxFWzAzNHEsIGtmMzU9XEVbMDM1cSwga2YzNj1cRVswMzZxLCBrZjQ9XEVbMDA0cSwKKwlrZjU9XEVbMDA1cSwga2Y2PVxFWzAwNnEsIGtmNz1cRVswMDdxLCBrZjg9XEVbMDA4cSwKKwlrZjk9XEVbMDA5cSwga2hvbWU9XEVbSCwga2ljaDE9XEVbMTM5cSwga2lsMT1cRVsxNDBxLAorCWtpbmQ9XEVbMTUxcSwga25wPVxFWzE1NHEsIGtwcD1cRVsxNTBxLCBrcmk9XEVbMTU1cSwKKwlrcm1pcj1cRVs0bCwgcmV2PVxFWzdtLCByaT1cRVtULCByaW49XEVbJXAxJWRULCBybWlyPVxFWzRsLAorCXJtc289XEVbbSwgcm11bD1cRVttLCByczI9XEVjLAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTttLAorCXNncjA9XEVbMG0sIHNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisKK2libWFlZHxJQk0gRXhwZXJpbWVudGFsIGRpc3BsYXksCisJT1RicywgYW0sIGVvLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzUyLAorCWNsZWFyPVxFSFxFSywgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFUSwKKwlkbDE9XEVPLCBlZD1cRUosIGVsPVxFSSwgZmxhc2g9XEVHLCBob21lPVxFSCwgaHQ9XkksIGljaDE9XEVQLAorCWlsMT1cRU4sIGticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLAorCXJtc289XEUwLCBzZ3IwPVxFMCwgc21zbz1cRTAsCitpYm0tYXBsfGFwbHxJQk0gYXBsIHRlcm1pbmFsIHNpbXVsYXRvciwKKwlsaW5lcyMyNSwgdXNlPWRtMTUyMCwKKyMgKGlibW1vbm86IHRoaXMgaGFkIGFuIHVua25vd24gYHNiJyBib29sZWFuLCBJIGNoYW5nZWQgaXQgdG8gYGJzJy4KKyMgQWxzbyBpdCBoYWQgIjpJMD1mMTA6IiB3aGljaCBwcmV0dHkgb2J2aW91c2x5IHNob3VsZCBiZSAibDA9ZjEwIiAtLSBlc3IpCitpYm1tb25vfElCTSB3b3Jrc3RhdGlvbiBtb25vY2hyb21lLAorCWVzbG9rLCBocywKKwlib2xkPVxFWiwgZGwxPVxFTSwgZHNsPVxFalxFWTggXEVJXEVrLCBmc2w9XEVrLCBpbDE9XEVMLAorCWludmlzPVxFRlxFZjA7XEViMDssIGticz1eSCwga2YwPVxFPCwga2YxPVxFUywga2YyPVxFVCwKKwlrZjM9XEVVLCBrZjQ9XEVWLCBrZjU9XEVXLCBrZjY9XEVQLCBrZjc9XEVRLCBrZjg9XEVSLCBrZjk9XEVZLAorCWtob21lPVxFSCwga2ljaDE9XDAsIGtpbmQ9XEVFLCBrbnA9XEVFLCBrcHA9XEVnLCBrcmk9XEVHLAorCWxmMD1mMTAsIHJldj1cRXAsIHJpPVxFQSwgcm1zbz1cRXosIHJtdWw9XEV3LAorCXNncjA9XEV3XEVxXEV6XEVCLCBzbXNvPVxFWiwgc211bD1cRVcsIHRzbD1cRWpcRVk4JSsgXEVvLAorCXVzZT1pYm0zMTAxLAoraWJtZWdhfElCTSBFbmhhbmNlZCBDb2xvciBEaXNwbGF5LAorCWNyPV5NLCBjdWQxPV5KLCBodD1eSSwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwKKwluZWw9Xk1eSiwgdXNlPWlibW1vbm8sCisjIFRoaXMgY29sb3Igc2NoZW1lIGlzIGFzc3VtZWQgaW4gc29tZSByZWNlbnQgSUJNIHRlcm1pbmFsIGRlc2NyaXB0aW9ucworIyAoZ3JlZW4gb24gYmxhY2ssIGVtdWxhdGVkIG9uIGEgMTYtY29sb3IgdGVybWluYWwpLgoraWJtK2NvbG9yfElCTSBjb2xvciBkZWZpbml0aW9ucywKKwljb2xvcnMjOCwgbmN2IzMsIHBhaXJzIzY0LAorCW9wPVxFWzMybVxFWzQwbSwKKwlzZXRiPVxFWyU/JXAxJXswfSU9JXQ0MG0lZSVwMSV7MX0lPSV0NDFtJWUlcDElezJ9JT0ldDQybSVlJXAxJXszfSU9JXQ0M20lZSVwMSV7NH0lPSV0NDRtJWUlcDElezV9JT0ldDQ1bSVlJXAxJXs2fSU9JXQ0Nm0lZSVwMSV7N30lPSV0MTA3bSU7LAorCXNldGY9XEVbJT8lcDElezB9JT0ldDMwbSVlJXAxJXsxfSU9JXQzMW0lZSVwMSV7Mn0lPSV0MzJtJWUlcDElezN9JT0ldDMzbSVlJXAxJXs0fSU9JXQzNG0lZSVwMSV7NX0lPSV0MzVtJWUlcDElezZ9JT0ldDM2bSVlJXAxJXs3fSU9JXQ5N20lOywKK2libSsxNmNvbG9yfElCTSBhaXh0ZXJtIGNvbG9yIGRlZmluaXRpb25zLAorCWNvbG9ycyMxNiwgcGFpcnMjMjU2LAorCXNldGFiPVxFWyU/JXAxJXs4fSU8JXQlcDElezQwfSUrJWUlcDElezkyfSUrJTslZG0sCisJc2V0YWY9XEVbJT8lcDElezh9JTwldCVwMSV7MzB9JSslZSVwMSV7ODJ9JSslOyVkbSwKKwlzZXRiPSVwMSV7OH0lLyV7Nn0lKiV7NH0lK1xFWyVkJXAxJXs4fSVtJVBhJT8lZ2ElezF9JT0ldDQlZSVnYSV7M30lPSV0NiVlJWdhJXs0fSU9JXQxJWUlZ2ElezZ9JT0ldDMlZSVnYSVkJTttLAorCXNldGY9JXAxJXs4fSUvJXs2fSUqJXszfSUrXEVbJWQlcDElezh9JW0lUGElPyVnYSV7MX0lPSV0NCVlJWdhJXszfSU9JXQ2JWUlZ2ElezR9JT0ldDElZSVnYSV7Nn0lPSV0MyVlJWdhJWQlO20sCitpYm01MTU0fElCTSA1MTU0IENvbG9yIGRpc3BsYXksCisJY29sb3JzIzgsIG5jdkAsIHBhaXJzIzY0LAorCWJvbGRALCBzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCB1c2U9aWJtNTE1MSwKKwl1c2U9aWJtK2NvbG9yLAoraWJtZWdhLWN8aWJtNTE1NC1jfElCTSBFbmhhbmNlZCBDb2xvciBEaXNwbGF5IHdpdGggc3RhbmRvdXQgYW5kIHVuZGVybGluZSwKKwlybXNvPVxFQiwgcm11bD1cRUIsIHNtc289XEVGXEVmMzssIHNtdWw9XEVGXEVmMjssCisJdXNlPWlibW1vbm8sCitpYm12Z2EtY3xJQk0gVkdBIGRpc3BsYXkgY29sb3IgdGVybWNhcCwKKwljcj1eTSwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosCisJbmVsPV5NXkosIHVzZT1pYm1lZ2EtYywKK2libXZnYXxJQk0gVkdBIGRpc3BsYXksCisJY3I9Xk0sIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCW5lbD1eTV5KLCB1c2U9aWJtZWdhLAorIyBpYm1hcGEqIGFuZCBpYm1tb25vIGVudHJpZXMgY29tZSBmcm9tIEFDSVMgNC4zIGRpc3RyaWJ1dGlvbgorcnRwY3xpYm1hcGExNnxJQk0gNjE1NSBFeHRlbmRlZCBNb25vY2hyb21lIEdyYXBoaWNzIERpc3BsYXksCisJbGluZXMjMzIsCisJZHNsPVxFalxFWUAgXEVJXEVrLCB0c2w9XEVqXEVZQCUrIFxFbywgdXNlPWlibW1vbm8sCitpYm02MTU1fElCTSA2MTU1IEJsYWNrICYgV2hpdGUgZGlzcGxheSwKKwlibGlua0AsIGJvbGRALCB1c2U9aWJtNTE1MSwKKyMgQWR2YW5jZWQgTW9ub2Nocm9tZSAoNjE1MykgYW5kIENvbG9yICg2MTU0KSBHcmFwaGljcyBEaXNwbGF5OgoraWJtYXBhOGN8aWJtYXBhOHxJQk0gNjE1NCBBZHZhbmNlZCBHcmFwaGljcyBEaXNwbGF5LAorCWxpbmVzIzMxLAorCWRzbD1cRWpcRVk/IFxFSVxFaywgdHNsPVxFalxFWT8lKyBcRW8sIHVzZT1pYm1tb25vLAoraWJtYXBhOGMtY3xpYm02MTU0LWN8SUJNIDYxNTQgQWR2YW5jZWQgQ29sb3IgR3JhcGhpY3MgRGlzcGxheSwKKwlsaW5lcyMzMSwKKwlkaW09XEVGXEVmNzssIGRzbD1cRWpcRVk/IFxFSVxFaywgdHNsPVxFalxFWT8lKyBcRW8sCisJdXNlPWlibWVnYS1jLAoraWJtNjE1NHxJQk0gNjE1NCBDb2xvciBkaXNwbGF5cywKKwlibGlua0AsIGJvbGQ9XEVbMTJtLCBzMGRzPVxFWzEwbSwgczFkcz1cRVsxMW0sIHMyZHM9XEVbMTJtLAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MTIlO20sCisJc2dyMD1cRVswOzEwbSwgdXNlPWlibTUxNTQsCitpYm02MTUzfElCTSA2MTUzIEJsYWNrICYgV2hpdGUgZGlzcGxheSwKKwlibGlua0AsIGJvbGQ9XEVbMTJtLCBzMGRzPVxFWzEwbSwgczFkcz1cRVsxMW0sIHMyZHM9XEVbMTJtLAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MTIlO20sCisJc2dyMD1cRVswOzEwbSwgdXNlPWlibTUxNTEsCitpYm02MTUzLTkwfElCTSA2MTUzIEJsYWNrICYgV2hpdGUgZGlzcGxheSwKKwljb2xzIzkwLCBsaW5lcyMzNiwKKwlibGlua0AsIGJvbGRALCB1c2U9aWJtNTE1MSwKK2libTYxNTMtNDB8SUJNIDYxNTMgQmxhY2sgJiBXaGl0ZSBkaXNwbGF5LAorCWNvbHMjNDAsIGxpbmVzIzEyLCB1c2U9aWJtNjE1My05MCwKK2libTg1MTJ8aWJtODUxM3xJQk0gY29sb3IgVkdBIFRlcm1pbmFsLAorCWFtLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjUsCisJYWNzYz1qamtrbGxtbW5ucXF0dHV1dnZ3d3h4LCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwKKwljbGVhcj1cRVtIXEVbSiwgY3ViMT1cRVtELCBjdWQxPV5KLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBpbD1cRVslcDElZEwsCisJaWwxPVxFW0wsIGlzMj1cRWJcRVttXDAxN1xFWz83aCwga2N1ZDE9XEVbQiwga2N1dTE9XEVbQSwKKwlrZjA9XEVbMDEwcSwga2YxPVxFWzAwMXEsIGtmMj1cRVswMDJxLCBrZjM9XEVbMDAzcSwKKwlrZjQ9XEVbMDA0cSwga2Y1PVxFWzAwNXEsIGtmNj1cRVswMDZxLCBrZjc9XEVbMDA3cSwKKwlrZjg9XEVbMDA4cSwga2Y5PVxFWzAwOXEsIGtob21lPVxFW0gsIHJjPVxFW3UsIHJldj1cRVs3bSwKKwlybWFjcz1eTywgcm1hbT1cRVs/N2wsIHJtY3VwPVxFWzIwaCwgcm1kYz1cRVs0bCwKKwlybWlyPVxFWzRsLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczE9XEViXEVbbVwwMTdcRVs/N2hcRVtIXEVbSiwgc2M9XEVbcywgc2dyMD1cRVttLAorCXNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21jdXA9XEVbMjA7NGxcRVs/N2hcRWIsCisJc21kYz1cRVs0aCwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl1c2U9aWJtODUwMywKK2hmdC1jfEhGVCB3aXRoIENvbG9yLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwlhY3NjPWpqa2tsbG1tbm5xcXR0dXV2dnd3eHgsIHMwZHM9XEUoQiwgczFkcz1cRSgwLAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sIHNncjA9XEVbMG1cRShCLAorCXVzZT1pYm01MTUxLCB1c2U9aWJtK2NvbG9yLAoraGZ0LWMtb2xkfEhGVCB3aXRoIENvbG9yIFBDODUwLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwlzZXRhYj1cRVs0JXAxJWRtLCBzZXRhZj1cRVszJXAxJWRtLCB1c2U9aWJtNTE1MSwKKwl1c2U9aWJtK2NvbG9yLAoraGZ0LW9sZHxBSVdTIEhpZ2ggRnVuY3Rpb24gVGVybWluYWwsCisJYW0sIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsCisJaHQ9XkksIGljaDE9XEVbQCwgaWwxPVxFW0wsIGluZD1eSiwgaW52aXM9XEVbOG0sIGticz1eSCwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtmMT1cRVswMDFxLCBrZjI9XEVbMDAycSwga2YzPVxFWzAwM3EsIGtmND1cRVswMDRxLAorCWtmNT1cRVswMDVxLCBrZjY9XEVbMDA2cSwga2Y3PVxFWzAwN3EsIGtmOD1cRVswMDhxLAorCWtmOT1cRVswMDlxLCBraG9tZT1cRVtILCBrbnA9XEVbMTUzcSwga3BwPVxFWzE1OXEsCisJa3RiYz1cRVswMTBxLCByZXY9XEVbN20sIHJtaXI9XEU2LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sIHNtaXI9XEU2LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB1c2U9aWJtK2NvbG9yLAoraWJtLXN5c3RlbTF8c3lzdGVtMXxpYm0gc3lzdGVtLzEgY29tcHV0ZXIsCisJYW0sIHh0LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XlosIGN1YjE9XkgsIGN1ZjE9XlwsCisJY3VwPVwwMDUlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9Xl4sIGhvbWU9XkssCisJaW5kPV5KLAorIyAgICAgICBsZnQtcGM4NTAgOiBJQk0gTG93IEZ1bmN0aW9uIFRlcm1pbmFsIERldmljZQorIyAgICBsZnQgInN1cHBvcnRzIiB1bmRlcmxpbmUsIGJvbGQsIGFuZCBibGluayBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgbGZ0IGNvZGUKKyMgICAgc2V0cyBhbGwgdGhlIHJpZ2h0IGJpdHMuICBIT1dFVkVSLCBkZXBlbmRpbmcgdXBvbiB0aGUgYWRhcHRlciwgdGhlc2UKKyMgICAgYXR0cmlidXRlcyBtYXkgb3IgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBkcml2ZXIuCitsZnR8bGZ0LXBjODUwfExGVC1QQzg1MHxJQk0gTEZUIFBDODUwIERldmljZSwKKwlhbSwgYncsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwlhY3NjPWpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVxXDMwNHRcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjMsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNsZWFyPVxFW0hcRVtKLAorCWNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVjaD1cRVslcDElZFgsIGVkPVxFWzJKLCBlbD1cRVswSywKKwlob21lPVxFW0gsIGhwYT1cRVslaSVwMSVkRywgaWNoPVxFWyVwMSVkQCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XEVELCBpbmRuPVxFWyVwMSVkUywgaW52aXM9XEVbOG0sIGlzMj1cRWMsCisJa2JzPV5ILCBrY2J0PVxFW1osIGtjbHI9XEVbMTQ0cSwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtQLCBrZWQ9XEVbMTQ4cSwKKwlrZWw9XEVbMTQycSwga2VuZD1cRVsxNDZxLCBrZjE9XEVbMDAxcSwga2YxMD1cRVswMTBxLAorCWtmMTE9XEVbMDExcSwga2YxMj1cRVswMTJxLCBrZjEzPVxFWzAxM3EsIGtmMTQ9XEVbMDE0cSwKKwlrZjE1PVxFWzAxNXEsIGtmMTY9XEVbMDE2cSwga2YxNz1cRVswMTdxLCBrZjE4PVxFWzAxOHEsCisJa2YxOT1cRVswMTlxLCBrZjI9XEVbMDAycSwga2YyMD1cRVswMjBxLCBrZjIxPVxFWzAyMXEsCisJa2YyMj1cRVswMjJxLCBrZjIzPVxFWzAyM3EsIGtmMjQ9XEVbMDI0cSwga2YyNT1cRVswMjVxLAorCWtmMjY9XEVbMDI2cSwga2YyNz1cRVswMjdxLCBrZjI4PVxFWzAyOHEsIGtmMjk9XEVbMDI5cSwKKwlrZjM9XEVbMDAzcSwga2YzMD1cRVswMzBxLCBrZjMxPVxFWzAzMXEsIGtmMzI9XEVbMDMycSwKKwlrZjMzPVxFWzAzM3EsIGtmMzQ9XEVbMDM0cSwga2YzNT1cRVswMzVxLCBrZjM2PVxFWzAzNnEsCisJa2Y0PVxFWzAwNHEsIGtmNT1cRVswMDVxLCBrZjY9XEVbMDA2cSwga2Y3PVxFWzAwN3EsCisJa2Y4PVxFWzAwOHEsIGtmOT1cRVswMDlxLCBraG9tZT1cRVtILCBraWNoMT1cRVsxMzlxLAorCWtpbDE9XEVbMTQwcSwga2luZD1cRVsxNTFxLCBrbnA9XEVbMTU0cSwga3BwPVxFWzE1MHEsCisJa3JpPVxFWzE1NXEsIGtybWlyPVxFWzRsLCByZXY9XEVbN20sIHJpPVxFTCwgcmluPVxFWyVwMSVkVCwKKwlybWFjcz1cRShCLCBybWlyPVxFWzRsLCBybXNvPVxFWzBtLCBybXVsPVxFWzBtLCByczI9XEVjLAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7JT8lcDcldDs4JTttJT8lcDkldFxFKDAlZVxFKEIlOywKKwlzZ3IwPVxFWzBtLCBzbWFjcz1cRSgwLCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCXRiYz1cRVszZywKK2libTUwODF8aGZ0fElCTSBNZWdhcGVsIENvbG9yIGRpc3BsYXksCisJYWNzYz1qamtrbGxtbW5ucXF0dHV1dnZ3d3h4LCBibGlua0AsIGJvbGRALCBzMGRzPVxFKEIsCisJczFkcz1cRSgwLCBzZ3IwPVxFWzBtXEUoQiwgdXNlPWlibTUxNTQsCitpYm01MDgxLWN8aWJtbXBlbC1jfElCTSA1MDgxIDEwMjR4MTAyNCAyNTYvNDA5NiBNZWdhcGVsIGVuaGFuY2VkIGNvbG9yIGRpc3BsYXksCisJZXNsb2ssIGhzLAorCWxpbmVzIzMzLAorCWRzbD1cRWpcRVlBIFxFSVxFaywgZnNsPVxFaywgdHNsPVxFalxFWUElKyBcRW8sCisJdXNlPWlibWVnYS1jLAoraWJtODUwM3xpYm04NTA3fGlibTg2MDR8SUJNIDg1MDMgQiAmIFcgVkdBIGRpc3BsYXksCisJdXNlPWhmdC1jLAoraWJtODUxNHxJQk0gODUxNC9hIGNvbG9yIFZHQSBkaXNwbGF5LAorCWVzbG9rLCBocywKKwlkc2w9XEVqXEVZSSBcRUlcRWssIGZzbD1cRWssIHRzbD1cRWpcRVlJJSsgXEVvLCB1c2U9aGZ0LAoraWJtODUxNC1jfElCTSA4NTE0IGNvbG9yIGRpc3BsYXkgd2l0aCBzdGFuZG91dCBhbmQgdW5kZXJsaW5lLAorCWVzbG9rLCBocywKKwlsaW5lcyM0MSwKKwljcj1eTSwgY3VkMT1eSiwgZHNsPVxFalxFWUkgXEVJXEVrLCBmc2w9XEVrLCBodD1eSSwgaW5kPV5KLAorCWticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBuZWw9Xk1eSiwgdHNsPVxFalxFWUklKyBcRW8sCisJdXNlPWlibWVnYS1jLAorCisjCisjIEFJWCBlbnRyaWVzLiAgSUJNIHNoaXBzIHRoZXNlIHdpdGggQUlYIDMuMi41LgorIyAtLSBhZGRlZCByYywgc2MgYmFzZWQgb24gbWFucGFnZSAtVEQKKyMgTm90ZSB0aGF0IHdlIGNvdWxkIHVzZSBpYm0rMTZjb2xvciwgYnV0IHRoYXQgaXMgbm90IGhvdyBJQk0gZGVmaW5lcyB0aGlzIG9uZS4KK2FpeHRlcm18SUJNIEFpeHRlcm0gVGVybWluYWwgRW11bGF0b3IsCisJZXNsb2ssIGhzLAorCWFjc2M9ampra2xsbW1ubnFxdHR1dXZ2d3d4eCwgYm9sZD1cRVsxbSwgZHNsPVxFWz9FLAorCWZzbD1cRVs/RiwgcmM9XEU4LCByaUAsIHMwZHM9XEUoQiwgczFkcz1cRSgwLCBzYz1cRTcsCisJc2dyPVxFWyU/JXAxJXQ7NyU7JT8lcDIldDs0JTslPyVwMyV0OzclOyU/JXA0JXQ7NSU7JT8lcDYldDsxJTslPyVwNyV0OzglO20lPyVwOSV0XEUoMCVlXEUoQiU7LAorCXNncjA9XEVbMDsxMG1cRShCLCB0c2w9XEVbPyVwMSVkVCwgdXNlPWlibTYxNTQsCithaXh0ZXJtLW18SUJNIEFJWHRlcm0gTW9ub2Nocm9tZSBUZXJtaW5hbCBFbXVsYXRvciwKKwllc2xvaywgaHMsCisJYWNzYz1qamtrbGxtbW5ucXF0dHV1dnZ3d3h4LCBib2xkPVxFWzFtLCBkc2w9XEVbP0UsCisJZnNsPVxFWz9GLCByaUAsIHMwZHM9XEUoQiwgczFkcz1cRSgwLAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7bSwKKwlzZ3IwPVxFWzA7MTBtXEUoQiwgdHNsPVxFWz8lcDElZFQsIHVzZT1pYm02MTUzLAorYWl4dGVybS1tLW9sZHxvbGQgSUJNIEFJWHRlcm0gTW9ub2Nocm9tZSBUZXJtaW5hbCBFbXVsYXRvciwKKwllc2xvaywgaHMsCisJYm9sZD1cRVsxbSwgZHNsPVxFWz9FLCBmc2w9XEVbP0YsIHJpQCwKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20sCisJdHNsPVxFWz8lcDElZFQsIHVzZT1pYm02MTUzLAoramFpeHRlcm18SUJNIEthbmppIEFpeHRlcm0gVGVybWluYWwgRWVtdWxhdG9yLAorCWFjc2NALCB1c2U9YWl4dGVybSwKK2phaXh0ZXJtLW18SUJNIEthbmppIEFJWHRlcm0gTW9ub2Nocm9tZSBUZXJtaW5hbCBFbXVsYXRvciwKKwlhY3NjQCwgdXNlPWFpeHRlcm0tbSwKKworIyBUaGlzIGZsYXZvciBpcyBhZGFwdGVkIGZyb20geHRlcm0sIGluIHR1cm4gZnJvbSBhaXh0ZXJtIGRvY3VtZW50YXRpb24gLVRECithaXh0ZXJtLTE2Y29sb3J8SUJNIEFpeHRlcm0gVGVybWluYWwgRW11bGF0b3Igd2l0aCAxNiBjb2xvcnMsCisJdXNlPWlibSsxNmNvbG9yLCB1c2U9YWl4dGVybSwKKworIyMjIyBJbmZvdG9uL0dlbmVyYWwgVGVybWluYWwgQ29ycC4KKyMKKworIyBndDEwMCBzb3VuZHMgbGlrZSBzb21ldGhpbmcgREVDIHdvdWxkIGNvbWUgb3V0IHdpdGguICBMZXQncyBob3BlIHRoZXkgZG9uJ3QuCitpMTAwfGd0MTAwfGd0MTAwYXxHZW5lcmFsIFRlcm1pbmFsIDEwMEEgKGZvcm1lcmx5IEluZm90b24gMTAwKSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFZiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1cRUEsIGRsMT1cRU0sCisJZWQ9XEVKLCBlbD1cRUssIGZsYXNoPVxFYiQ8MjAwLz5cRWEsIGhvbWU9XEVILCBpbDE9XEVMLAorCWluZD1eSiwgcm1zbz1cRWEsIHNtc289XEViLAoraTQwMHxpbmZvdG9uIDQwMCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwliZWw9XkcsIGNsZWFyPVxFWzJKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSUzZDslcDIlM2RILCBjdXUxPVxFW0EsCisJZGNoMT1cRVs0aFxFWzJRXEVbUFxFWzRsXEVbMFEsIGRsMT1cRVtNLCBlbD1cRVtOLAorCWlsMT1cRVtMLCBpbmQ9XkosIHJtaXI9XEVbNGxcRVswUSwgc21pcj1cRVs0aFxFWzJRLAorIyAoYWRkcmluZm86IHJlbW92ZWQgb2Jzb2xldGUgIjpiYz1eWjoiIC0tIGVzcikKK2FkZHJpbmZvLAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5aLCBjdWQxPV5KLCBjdWYxPV5ZLAorCWN1cD1cMDM3JXAxJWMlcDIlYywgY3V1MT1eXCwgZWQ9XkssIGhvbWU9XkgsIGluZD1eSiwgbGw9XkheXCwKKyMgKGluZm90b246IHVzZWQgdG8gaGF2ZSB0aGUgbm8tb3BzIDxsaCMwPiwgPGx3IzA+LCA8bmxhYiMwPiAtLSBlc3IpCitpbmZvdG9uLAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5aLCBjdWQxPV5KLCBjdWYxPV5ZLCBjdXUxPV5cLAorCWVkPV5LLCBpbmQ9XkosIGxsPV5IXlwsCisKKyMgVGhlIElDTDY0MDIgd2FzIGFjdHVhbGx5IHRoZSBLb2t1c2FpIERpc3BsYXkgU3lzdGVtIDY0MDIuCisjIFRoZSA2NDA0IHdhcyB0aGUgS0RTNzM3MiAoY29sb3IgdmVyc2lvbiBvZiB0aGUgNjQwMikuCisjCisjIElDTDY0MDQgY29udHJvbCBjb2RlcyBmb2xsb3c6CisjCisjY29kZSAgICAgICAgICAgIGZ1bmN0aW9uCisjfn5+fn5+fn5+fn4gICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyNjdHJsLUEgICAgICAgICAgc2V0IFNPTSBwb3NpdGlvbiBhdCBjdXJzb3IgcG9zaXRpb24KKyNjdHJsLUcgICAgICAgICAgQmVsbAorI2N0cmwtSCAgICAgICAgICBCYWNrc3BhY2UKKyNjdHJsLUkgICAgICAgICAgSG9yaXogdGFiCisjY3RybC1KICAgICAgICAgIExpbmVmZWVkCisjY3RybC1LICAgICAgICAgIEN1cnNvciB1cAorI2N0cmwtTCAgICAgICAgICBDdXJzb3IgcmlnaHQKKyNjdHJsLU0gICAgICAgICAgQ2FycmlhZ2UgcmV0dXJuCisjY3RybC1OICAgICAgICAgIERpc2FibGUgeG9uL3hvZmYgdG8gaG9zdAorI2N0cmwtTyAgICAgICAgICBFbmFibGUgeG9uL3hvZmYgdG8gaG9zdAorI2N0cmwtUiAgICAgICAgICBFbmFibGUgYmlkaXJlY3Rpb25hbCBtb2RlCisjY3RybC1UICAgICAgICAgIERpc2FibGUgYmlkaXJlY3Rpb25hbCBtb2RlCisjY3RybC1WICAgICAgICAgIEN1cnNvciBkb3duCisjY3RybC1aICAgICAgICAgIENsZWFyIHVucHJvdGVjdGVkIGRhdGEgdG8gaW5zZXJ0IGNoYXIKKyNjdHJsLV4gICAgICAgICAgQ3Vyc29yIGhvbWUKKyNjdHJsLV8gICAgICAgICAgTmV3bGluZQorIworI0VTQyAgICAgICAgICAgICBsZWFkLWluIGNoYXIgZm9yIG11bHRpcGxlIGNoYXJhY3RlciBjb21tYW5kCisjCisjRVNDIHNwYWNlIFIgICAgIGV4ZWN1dGUgcG93ZXIgb24gc2VxdWVuY2UKKyNFU0MgISBwMSBwMiAgICAgZGVmaW5lIHNjcm9sbCByZWdpb246CisjICAgICAgICAgICAgICAgIHAxID0gc2Nyb2xsIHRvcCAgICBsaW5lOiAgMjBoIC0gMzdoCisjICAgICAgICAgICAgICAgIHAxID0gc2Nyb2xsIGJvdHRvbSBsaW5lOiAgMjBoIC0gMzdoCisjRVNDICIgICAgICAgICAgIHVubG9jayBrZXlib2FyZAorI0VTQyAjICAgICAgICAgICBsb2NrIGtleWJvYXJkCisjRVNDICQgICAgICAgICAgIFNlbWktZ3JhcGhpY3MgbW9kZSBvbgorI0VTQyAlICAgICAgICAgICBTZW1pLWdyYXBoaWNzIG1vZGUgb2ZmCisjRVNDICYgICAgICAgICAgIHByb3RlY3QgbW9kZSBvbgorI0VTQyAnICAgICAgICAgICBwcm90ZWN0IG1vZGUgb2ZmCisjRVNDICggICAgICAgICAgIHdyaXRlIHByb3RlY3QgbW9kZSBvZmYgKGZ1bGwgaW50ZW5zaXR5KQorI0VTQyApICAgICAgICAgICB3cml0ZSBwcm90ZWN0IG1vZGUgb24gKGhhbGYgaW50ZW5zaXR5KQorIworI0VTQyAqICAgICAgICAgICBjbGVhciBzY3JlZW4KKyNFU0MgKyAgICAgICAgICAgY2xlYXIgdW5wcm90ZWN0ZWQgZGF0YSB0byBpbnNlcnQgY2hhcgorI0VTQyAsICAgICAgICAgICBjbGVhciB1bnByb3RlY3RlZCBkYXRhIHRvIGhhbGYgaW50ZW5zaXR5IHNwYWNlcworI0VTQyAtIHAxIHAyIHAzIHA0ICAgICBhZGRyZXNzIGN1cnNvciB0byBwYWdlLCByb3csIGNvbHVtbjoKKyMgICAgICAgICAgICAgICAgICAgICAgcDEgPSBwYWdlIG51bWJlciAgMCAtIDMKKyMgICAgICAgICAgICAgICAgICAgICAgcDIgPSByb3cgICAgICAgICAgMjBoIC0gN2ZoCisjICAgICAgICAgICAgICAgICAgICAgIHAzID0gY29sdW1uIChsbykgIDIwaCAtIDdmaAorIyAgICAgICAgICAgICAgICAgICAgICBwNCA9IGNvbHVtbiAoaGkpICAyMGggLSAyMWggKG9ubHkgMTMyIGNvbCkKKyNFU0MgLiBwMSAgICAgICAgc2V0IGN1cnNvciBzdHlsZToKKyMgICAgICAgICAgICAgICAgcDEgPSAwICBpbnZpc2libGUgY3Vyc29yCisjICAgICAgICAgICAgICAgIHAxID0gMSAgYmxvY2sgYmxpbmtpbmcgY3Vyc29yCisjICAgICAgICAgICAgICAgIHAxID0gMiAgYmxvY2sgc3RlYWR5IGN1cnNvcgorIyAgICAgICAgICAgICAgICBwMSA9IDMgIHVuZGVybGluZSBibGlua2luZyBjdXJzb3IKKyMgICAgICAgICAgICAgICAgcDEgPSA0ICB1bmRlcmxpbmUgc3RlYWR5IGN1cnNvcgorI0VTQyAvICAgICAgICAgICB0cmFuc21pdCBjdXJzb3IgbG9jYXRpb24gKHBhZ2UsIHJvdywgY29sdW1uKQorI0VTQyAwIHAxIHAyIHAzIHA0ICAgICBwcm9ncmFtIGVkaXQga2V5OgorIyAgICAgICAgICAgICAgICAgICAgICBwMSA9IGVkaXQga2V5IGNvZGU6ICdAJy0nUycsICdgJy0ncycKKyMgICAgICAgICAgICAgICAgICAgICAgcDIgcDMgcDQgPSBwcm9ncmFtIGRhdGEgKDMgYnl0ZXMpCisjCisjRVNDIDEgICAgICAgICAgIHNldCB0YWIKKyNFU0MgMiAgICAgICAgICAgY2xlYXIgdGFiIGF0IGN1cnNvcgorI0VTQyAzICAgICAgICAgICBjbGVhciBhbGwgdGFicworI0VTQyA0ICAgICAgICAgICBzZW5kIHVucHJvdGVjdCBsaW5lIHRvIGN1cnNvcgorI0VTQyA1ICAgICAgICAgICBzZW5kIHVucHJvdGVjdCBwYWdlIHRvIGN1cnNvcgorI0VTQyA2ICAgICAgICAgICBzZW5kIGxpbmUgdG8gY3Vyc29yCisjRVNDIDcgICAgICAgICAgIHNlbmQgcGFnZSB0byBjdXJzb3IKKyNFU0MgOCBuICAgICAgICAgc2V0IHNjcm9sbCBtb2RlOgorIyAgICAgICAgICAgICAgICBuID0gMCAgIHNldCBqdW1wIHNjcm9sbAorIyAgICAgICAgICAgICAgICBuID0gMSAgIHNldCBzbW9vdGggc2Nyb2xsCisjRVNDIDkgbiAgICAgICAgIGNvbnRyb2wgZGlzcGxheToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBkaXNwbGF5IG9mZgorIyAgICAgICAgICAgICAgICBuID0gMSAgIGRpc3BsYXkgb24KKyNFU0MgOiAgICAgICAgICAgY2xlYXIgdW5wcm90ZWN0ZWQgZGF0YSB0byBudWxsCisjRVNDIDsgICAgICAgICAgIGNsZWFyIHVucHJvdGVjdGVkIGRhdGEgdG8gaW5zZXJ0IGNoYXIKKyMKKyNFU0MgPCAgICAgICAgICAga2V5Y2xpY2sgb24KKyNFU0MgPSBwMSBwMiAgICAgYWRkcmVzcyBjdXJzb3IgdG8gcm93LCBjb2x1bW4KKyMgICAgICAgICAgICAgICAgcDEgPSByb3cgICAgICAgICAgMjBoIC0gN2ZoCisjICAgICAgICAgICAgICAgIHAyID0gY29sdW1uIChsbykgIDIwaCAtIDdmaAorIyAgICAgICAgICAgICAgICBwMyA9IGNvbHVtbiAoaGkpICAyMGggLSAyMWggKG9ubHkgMTMyIGNvbCkKKyNFU0MgPiAgICAgICAgICAga2V5Y2xpY2sgb2ZmCisjRVNDID8gICAgICAgICAgIHRyYW5zbWl0IGN1cnNvciBsb2NhdGlvbiAocm93LCBjb2x1bW4pCisjCisjRVNDIEAgICAgICAgICAgIGNvcHkgcHJpbnQgbW9kZSBvbgorI0VTQyBBICAgICAgICAgICBjb3B5IHByaW50IG1vZGUgb2ZmCisjRVNDIEIgICAgICAgICAgIGJsb2NrIG1vZGUgb24KKyNFU0MgQyAgICAgICAgICAgYmxvY2sgbW9kZSBvZmYgKGNvbnZlcnNhdGlvbiBtb2RlKQorI0VTQyBEIEYgICAgICAgICBzZXQgZnVsbCBkdXBsZXgKKyNFU0MgRCBIICAgICAgICAgc2V0IGhhbGYgZHVwbGV4CisjRVNDIEUgICAgICAgICAgIGxpbmUgaW5zZXJ0CisjRVNDIEYgcDEgcDIgICAgIHNldCBwYWdlIGNvbG91ciAocDEgPSBmL2dybmQsIHAyID0gYi9ncm5kKQorIyAgICAgICAgICAgICAgICAwID0gYmxhY2ssIDEgPSByZWQsICAgICAyID0gZ3JlZW4sIDMgPSB5ZWxsb3cKKyMgICAgICAgICAgICAgICAgNCA9IGJsdWUsICA1ID0gbWFnZW50YSwgNiA9IGN5YW4sICA3ID0gd2hpdGUKKyNFU0MgRyBuICAgICAgICAgc2V0IHNlcmlhbCBmaWVsZCBhdHRyaWJ1dGUgKG4gPSAzMGggLSAzRmgpCisjRVNDIEggbiAgICAgICAgIGZ1bGwgZ3JhcGhpY3MgbW9kZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgIGV4aXQgZnVsbCBncmFwaGljcyBtb2RlCisjICAgICAgICAgICAgICAgIG4gPSAxICBlbnRlciBmdWxsIGdyYXBoaWNzIG1vZGUKKyNFU0MgSSAgICAgICAgICAgYmFjayB0YWIKKyNFU0MgSiAgICAgICAgICAgYmFjayBwYWdlCisjRVNDIEsgICAgICAgICAgIGZvcndhcmQgcGFnZQorIworI0VTQyBMICAgICAgICAgICB1bmZvcm1hdHRlZCBwYWdlIHByaW50CisjRVNDIE0gTCAgICAgICAgIG1vdmUgd2luZG93IGxlZnQgICgxMzIgY29sIG1vZGUgb25seSkKKyNFU0MgTSBSICAgICAgICAgbW92ZSB3aW5kb3cgcmlnaHQgKDEzMiBjb2wgbW9kZSBvbmx5KQorI0VTQyBOICAgICAgICAgICBzZXQgcGFnZSBlZGl0IChjbGVhciBsaW5lIGVkaXQpCisjRVNDIE8gICAgICAgICAgIHNldCBsaW5lIGVkaXQgKGNsZWFyIHBhZ2UgZWRpdCkKKyNFU0MgUCAgICAgICAgICAgZm9ybWF0dGVkIHBhZ2UgcHJpbnQKKyNFU0MgUSAgICAgICAgICAgY2hhcmFjdGVyIGluc2VydAorI0VTQyBSICAgICAgICAgICBsaW5lIGRlbGV0ZQorI0VTQyBTICAgICAgICAgICBzZW5kIG1lc3NhZ2UgdW5wcm90ZWN0ZWQgb25seQorI0VTQyBUICAgICAgICAgICBlcmFzZSBsaW5lIHRvIGluc2VydCBjaGFyCisjRVNDIFUgICAgICAgICAgIHNldCBtb25pdG9yIG1vZGUgICAoc2VlIEVTQyBYLCBFU0MgdSkKKyMKKyNFU0MgViBuICAgICAgICAgc2VsZWN0IHZpZGVvIGF0dHJpYnV0ZSBtb2RlOgorIyAgICAgICAgICAgICAgICBuID0gMCAgIHNlcmlhbCBmaWVsZCBhdHRyaWJ1dGUgbW9kZQorIyAgICAgICAgICAgICAgICBuID0gMSAgIHBhcmFsbGVsIGNoYXJhY3RlciBhdHRyaWJ1dGUgbW9kZQorI0VTQyBWIDIgbiAgICAgICBkZWZpbmUgbGluZSBhdHRyaWJ1dGU6CisjICAgICAgICAgICAgICAgIG4gPSAwICAgc2luZ2xlIHdpZHRoIHNpbmdsZSBoZWlnaHQKKyMgICAgICAgICAgICAgICAgbiA9IDEgICBzaW5nbGUgd2lkdGggZG91YmxlIGhlaWdodAorIyAgICAgICAgICAgICAgICBuID0gMiAgIGRvdWJsZSB3aWR0aCBzaW5nbGUgaGVpZ2h0CisjICAgICAgICAgICAgICAgIG4gPSAzICAgZG91YmxlIHdpZHRoIGRvdWJsZSBoZWlnaHQKKyNFU0MgViAzIG4gICAgICAgc2VsZWN0IGNoYXJhY3RlciBmb250OgorIyAgICAgICAgICAgICAgICBuID0gMCAgIHN5c3RlbSBmb250CisjICAgICAgICAgICAgICAgIG4gPSAxICAgdXNlciBkZWZpbmVkIGZvbnQKKyNFU0MgViA0IG4gICAgICAgc2VsZWN0IHNjcmVlbiBtb2RlOgorIyAgICAgICAgICAgICAgICBuID0gMCAgIHBhZ2Ugc2NyZWVuIG1vZGUKKyMgICAgICAgICAgICAgICAgbiA9IDEgICB2aXJ0dWFsIHNjcmVlbiBtb2RlCisjRVNDIFYgNSBuICAgICAgIGNvbnRyb2wgbW91c2UgbW9kZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBkaXNhYmxlIG1vdXNlCisjICAgICAgICAgICAgICAgIG4gPSAxICAgZW5hYmxlIHNhbXBsZSBtb2RlCisjICAgICAgICAgICAgICAgIG4gPSAyICAgc2VuZCBtb3VzZSBpbmZvcm1hdGlvbgorIyAgICAgICAgICAgICAgICBuID0gMyAgIGVuYWJsZSByZXF1ZXN0IG1vZGUKKyNFU0MgVyAgICAgICAgICAgY2hhcmFjdGVyIGRlbGV0ZQorI0VTQyBYICAgICAgICAgICBjbGVhciBtb25pdG9yIG1vZGUgKHNlZSBFU0MgVSwgRVNDIHUpCisjRVNDIFkgICAgICAgICAgIGVyYXNlIHBhZ2UgdG8gaW5zZXJ0IGNoYXIKKyMKKyNFU0MgWiBuICAgICAgICAgc2VuZCB1c2VyL3N0YXR1cyBsaW5lOgorIyAgICAgICAgICAgICAgICBuID0gMCAgIHNlbmQgdXNlciBsaW5lCisjICAgICAgICAgICAgICAgIG4gPSAxICAgc2VuZCBzdGF0dXMgbGluZQorIyAgICAgICAgICAgICAgICBuID0gMiAgIHNlbmQgdGVybWluYWwgSUQKKyNFU0MgWyBwMSBwMiBwMyAgc2V0IGNoYXJhY3RlciBhdHRyaWJ1dGUgKHBhcmFsbGVsIGNoYXIgbW9kZSk6CisjICAgICAgICAgICAgICAgIHAxOiAwID0gbm9ybWFsCisjICAgICAgICAgICAgICAgICAgICAxID0gYmxhbmsKKyMgICAgICAgICAgICAgICAgICAgIDIgPSBibGluaworIyAgICAgICAgICAgICAgICAgICAgMyA9IGJsaW5rIGJsYW5rICg9IGJsYW5rKQorIyAgICAgICAgICAgICAgICAgICAgNCA9IHJldmVyc2UKKyMgICAgICAgICAgICAgICAgICAgIDUgPSByZXZlcnNlIGJsYW5rCisjICAgICAgICAgICAgICAgICAgICA2ID0gcmV2ZXJzZSBibGluaworIyAgICAgICAgICAgICAgICAgICAgNyA9IHJldmVyc2UgYmxpbmsgYmxhbmsgKD0gcmV2ZXJzZSBibGFuaykKKyMgICAgICAgICAgICAgICAgICAgIDggPSB1bmRlcmxpbmUKKyMgICAgICAgICAgICAgICAgICAgIDkgPSB1bmRlcmxpbmUgYmxhbmsKKyMgICAgICAgICAgICAgICAgICAgIDogPSB1bmRlcmxpbmUgYmxpbmsKKyMgICAgICAgICAgICAgICAgICAgIDsgPSB1bmRlcmxpbmUgYmxpbmsgYmxhbmsKKyMgICAgICAgICAgICAgICAgICAgIDwgPSByZXZlcnNlIHVuZGVybGluZQorIyAgICAgICAgICAgICAgICAgICAgPSA9IHJldmVyc2UgdW5kZXJsaW5lIGJsYW5rCisjICAgICAgICAgICAgICAgICAgICA+ID0gcmV2ZXJzZSB1bmRlcmxpbmUgYmxpbmsKKyMgICAgICAgICAgICAgICAgICAgID8gPSByZXZlcnNlIHVuZGVybGluZSBibGluayBibGFuaworIyAgICAgICAgICAgICAgICBwMiwgcDM6IGYvZ3JuZCwgYi9ncm5kIGNvbG91cgorIyAgICAgICAgICAgICAgICAoc2VlIEVTQyBGIGZvciBjb2xvdXJzKQorIyAgICAgICAgICAgICAgICB1c2UgWlogZm9yIG1vbm8sIGVnLgorIyAgICAgICAgICAgICAgICAgICAgRVNDIFsgMCBaIFogZm9yIG5vcm1hbAorIyAgICAgICAgICAgICAgICAgICAgRVNDIFsgNCBaIFogZm9yIGludmVyc2UgZXRjLgorIworI0VTQyBcIG4gICAgICAgICBzZXQgcGFnZSBzaXplOgorIyAgICAgICAgICAgICAgICBuID0gMSAgIDI0IGxpbmVzL3BhZ2UKKyMgICAgICAgICAgICAgICAgbiA9IDIgICA0OCBsaW5lcy9wYWdlCisjICAgICAgICAgICAgICAgIG4gPSAzICAgNzIgbGluZXMvcGFnZQorIyAgICAgICAgICAgICAgICBuID0gNCAgIDk2IGxpbmVzL3BhZ2UKKyNFU0MgXSBuICAgICAgICAgc2V0IFdvcmRzdGFyIG1vZGU6CisjICAgICAgICAgICAgICAgIG4gPSAwICAgbm9ybWFsIChLRFM3MzcyKSBtb2RlCisjICAgICAgICAgICAgICAgIG4gPSAxICAgV29yZHN0YXIgbW9kZQorIworI0VTQyBiICAgICAgICAgICBzZXQgZm9yZWdyb3VuZCBjb2xvdXIgc2NyZWVuCisjCisjRVNDIGMgbiAgICAgICAgIGVudGVyIHNlbGYtdGVzdCBtb2RlOgorIyAgICAgICAgICAgICAgICBuID0gMCAgIGV4aXQgc2VsZiB0ZXN0IG1vZGUKKyMgICAgICAgICAgICAgICAgbiA9IDEgICBST00gdGVzdAorIyAgICAgICAgICAgICAgICBuID0gMiAgIFJBTSB0ZXN0CisjICAgICAgICAgICAgICAgIG4gPSAzICAgTlZSQU0gdGVzdAorIyAgICAgICAgICAgICAgICBuID0gNCAgIHNjcmVlbiBkaXNwbGF5IHRlc3QKKyMgICAgICAgICAgICAgICAgbiA9IDUgICBtYWluL3ByaW50ZXIgcG9ydCB0ZXN0CisjICAgICAgICAgICAgICAgIG4gPSA2ICAgbW91c2UgcG9ydCB0ZXN0CisjICAgICAgICAgICAgICAgIG4gPSA3ICAgZ3JhcGhpY3MgYm9hcmQgdGVzdAorIyAgICAgICAgICAgICAgICBuID0gOCAgIGdyYXBoaWNzIG1lbW9yeSB0ZXN0CisjICAgICAgICAgICAgICAgIG4gPSA5ICAgZGlzcGxheSBhbGwgJ0UnCisjICAgICAgICAgICAgICAgIG4gPSA6ICAgZGlzcGxheSBhbGwgJ0gnCisjRVNDIGQgICAgICAgICAgIHNldCBiYWNrZ3JvdW5kIGNvbG91ciBzY3JlZW4KKyMKKyNFU0MgZSBuICAgICAgICAgcHJvZ3JhbSBpbnNlcnQgY2hhciAobiA9IGluc2VydCBjaGFyKQorI0VTQyBmIHRleHQgQ1IgICBsb2FkIHVzZXIgc3RhdHVzIGxpbmUgd2l0aCAndGV4dCcKKyMKKyNFU0MgZyAgICAgICAgICAgZGlzcGxheSB1c2VyIHN0YXR1cyBsaW5lIG9uIDI1dGggbGluZQorI0VTQyBoICAgICAgICAgICBkaXNwbGF5IHN5c3RlbSBzdGF0dXMgbGluZSBvbiAyNXRoIGxpbmUKKyNFU0MgaSAgICAgICAgICAgdGFiCisjRVNDIGogICAgICAgICAgIHJldmVyc2UgbGluZWZlZWQKKyNFU0MgayBuICAgICAgICAgZHVwbGV4L2xvY2FsIGVkaXQgbW9kZToKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBkdXBsZXggZWRpdCBtb2RlCisjICAgICAgICAgICAgICAgIG4gPSAxICAgbG9jYWwgZWRpdCBtb2RlCisjRVNDIGwgbiAgICAgICAgIHNlbGVjdCB2aXJ0dWFsIHNjcmVlbjoKKyMgICAgICAgICAgICAgICAgbiA9IDAgICBzY3JlZW4gMQorIyAgICAgICAgICAgICAgICBuID0gMSAgIHNjcmVlbiAyCisjRVNDIG0gICAgICAgICAgIHNhdmUgY3VycmVudCBjb25maWcgdG8gTlZSQU0KKyNFU0MgbiBwMSAgICAgICAgc2VsZWN0IGRpc3BsYXkgc2NyZWVuOgorIyAgICAgICAgICAgICAgICBwMSA9IDAgIHNjcmVlbiAxCisjICAgICAgICAgICAgICAgIHAxID0gMSAgc2NyZWVuIDIKKyMgICAgICAgICAgICAgICAgcDEgPSAyICBzY3JlZW4gMworIyAgICAgICAgICAgICAgICBwMSA9IDMgIHNjcmVlbiA0CisjRVNDIG8gcDEgcDIgICAgIHNldCBjaGFyYWN0ZXJzL2xpbmUgYW5kIGF0dHJpYnV0ZToKKyMgICAgICAgICAgICAgICAgcDEgPSAwICA4MCBjaGFycy9saW5lCisjCisjRVNDIG8gcDEgcDIgICAgIHNldCBjaGFyYWN0ZXJzL2xpbmUgYW5kIGF0dHJpYnV0ZToKKyMgICAgICAgICAgICAgICAgcDEgPSAwICA4MCBjaGFycy9saW5lCisjICAgICAgICAgICAgICAgIHAxID0gMSAgMTMyIGNoYXJzL2xpbmUKKyMgICAgICAgICAgICAgICAgcDIgPSAwICBzaW5nbGUgd2lkdGggc2luZ2xlIGhlaWdodAorIyAgICAgICAgICAgICAgICBwMiA9IDEgIHNpbmdsZSB3aWR0aCBkb3VibGUgaGVpZ2h0CisjICAgICAgICAgICAgICAgIHAyID0gMiAgZG91YmxlIHdpZHRoIHNpbmdsZSBoZWlnaHQKKyMgICAgICAgICAgICAgICAgcDIgPSAzICBkb3VibGUgd2lkdGggZG91YmxlIGhlaWdodAorIworI0VTQyBxICAgICAgICAgICBpbnNlcnQgbW9kZSBvbgorI0VTQyByICAgICAgICAgICBlZGl0IG1vZGUgb24KKyNFU0MgcyAgICAgICAgICAgc2VuZCBtZXNzYWdlIGFsbAorI0VTQyB0ICAgICAgICAgICBlcmFzZSBsaW5lIHRvIG51bGwKKyNFU0MgdSAgICAgICAgICAgY2xlYXIgbW9uaXRvciBtb2RlIChzZWUgRVNDIFUsIEVTQyBYKQorI0VTQyB2ICAgICAgICAgICBhdXRvcGFnZSBtb2RlIG9uCisjRVNDIHcgICAgICAgICAgIGF1dG9wYWdlIG1vZGUgb2ZmCisjRVNDIHggcDEgcDIgcDMgIGRlZmluZSBkZWxpbWl0ZXIgY29kZS4uLgorI0VTQyB5ICAgICAgICAgICBlcmFzZSBwYWdlIHRvIG51bGwKKyMKKyNFU0MgeiAyIHAxIHAyIHAzIHA0ICAgZHJhdyBxdWFkcmFuZ2xlOgorIyAgICAgICAgICAgICAgICAgICAgICBwMSA9IHN0YXJ0aW5nIHJvdworIyAgICAgICAgICAgICAgICAgICAgICBwMiA9IHN0YXJ0aW5nIGNvbHVtbgorIyAgICAgICAgICAgICAgICAgICAgICBwMyA9IGVuZCByb3cKKyMgICAgICAgICAgICAgICAgICAgICAgcDQgPSBlbmQgY29sdW1uCisjCisjRVNDIHsgcDEgcDIgcDMgcDQgICAgIGNvbmZpZ3VyZSBtYWluIHBvcnQKKyMgICAgICAgICAgICAgICAgICAgICAgKGJhdWQsIHN0b3AgYml0cywgcGFyaXR5LCB3b3JkIGxlbmd0aCkKKyMKKyNFU0MgfCBwMSBwMiB0ZXh0IEN0cmwtWSAgICBwcm9ncmFtIGZ1bmN0aW9uIGtleSB3aXRoICd0ZXh0JzoKKyMgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IGZ1bmN0aW9uIGtleSBjb2RlOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEnIC0gJzsnICBub3JtYWwgZjEtIGYxMQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwnIC0gJ0YnICBzaGlmdGVkIGYxIC0gZjExCisjICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBwcm9ncmFtIG1vZGU6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gRkRYCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gTE9DCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gSERYCisjICAgICAgICAgICAgICAgICAgICAgICAgQ3RybC1ZID0gdGVybWluYXRvcgorIyAgICAgICAgICAgICAgICAgICAgICAgICh1c2UgQ3RybC1QIHRvIGVzY2FwZSBeUCwgXlkgKQorIworI0VTQyB9IHAxIHAyIHAzIHA0ICAgICBjb25maWd1cmUgcHJpbnRlciBwb3J0CisjICAgICAgICAgICAgICAgICAgICAgIChiYXVkLCBzdG9wIGJpdHMsIHBhcml0eSwgd29yZCBsZW5ndGgpCisjRVNDIH4gICAgICAgICAgIHNlbmQgc3lzdGVtIHN0YXR1cworIworIyBDb2RlcyBhbmQgaW5mbyBmcm9tIFBldGVyIERpc2RhbGUgPHBldGVAcGRsbWFpbC5kZW1vbi5jby51az4gMTIgTWF5IDE5OTcKKyMKKyMgRW50cnkgaXMgYnkgZXNyIGdvaW5nIHNvbGVseSBvbiBhYm92ZSBpbmZvcm1hdGlvbiBhbmQgaXMgVU5URVNURUQuCisjIFRoaXMgYWN0dWFsbHkgbG9va3MgYSBsb3QgbGlrZSBhIFRlbGV2aWRlbyA5eHguCisjIFRoaXMgZW50cnkgdXNlcyBwYWdlIDAgYW5kIGlzIG1vbm9jaHJvbWU7IEknbSBub3QgYnJhdmUgZW5vdWdoIHRvIHRyeQorIyB0byBtYWtlIGNvbG9yIHdvcmsgd2l0aG91dCBhIHRlc3QgdGVybWluYWwuICBUaGUgPGFtPiBjYXBhYmlsaXR5IGlzIGEgZ3Vlc3MuCisjIFRoZSBpbml0aWFsaXphdGlvbiBzdHJpbmcgc2V0cyBjb252ZXJzYXRpb24gbW9kZSwgYmxpbmtpbmcgdW5kZXJsaW5lIGN1cnNvciwKKyMgZnVsbCBkdXBsZXgsIHBhcmFsbGVsIGF0dHJpYnV0ZSBtb2RlLCBkaXNwbGF5IHVzZXIgc3RhdHVzIGxpbmUsIHdoaXRlCisjIGZvcmVncm91bmQsIGJsYWNrIGJhY2tncm91bmQsIG5vcm1hbCBoaWdobGlnaHQuCisjCitpY2w2NDA0fGtkczczNzJ8aWNsNjQwMnxrZHM2NDAyfElDTCA2NDA0IGFrYSBLb2t1c2FpIERpc3BsYXkgU3lzdGVtcyA3MzcyLAorCU9UYnMsIGFtLCBocywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzJaWiwgY2J0PVxFSSwgY2l2aXM9XEUuMCwgY2xlYXI9XEUqLAorCWNub3JtPVxFLjMsIGNyPV5NLAorCWNzcj1cRSElKyVwMSV7MzJ9JSslcDIlezMyfSBjdWQxPVwwMjYsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7ODB9JW0lezMyfSUrJWMlcDIlezgwfSU+JXszMn0lKyVjLAorCWN1dTE9XkssIGN2dmlzPVxFLjEsIGRjaDE9XEVXLCBkbDE9XEVSLCBob21lPV5eLCBodD1eSSwKKwlodHM9XEUxLCBpbDE9XEVFLCBpbnZpcz1cRVsxWlosCisJaXMxPVxFQ1xFLjNcRURGXEVWMVxFZ1xFWzBaWiwgbmVsPV5fLCByZXY9XEVbNFpaLAorCXJtaXI9XEVyLCBybXNvPVxFWyVnaCV7NH0lXiVQaCVnaCVkWlosCisJcm11bD1cRVslZ2glezh9JV4lUGglZ2glZFpaLCByczI9XEVvMSwKKwlzZ3I9XEVbJXswfSU/JXAxJXQlezR9JXwlOyU/JXAyJXQlezh9JXwlOyU/JXAzJXQlezR9JXwlOyU/JXA0JXQlezJ9JXwlOyU/JXA3JXQlezF9JXwlO1paLAorCXNncjA9XEVbMFpaLCBzbWlyPVxFcSwgc21zbz1cRVs4WlosIHNtdWw9XEVbOFpaLCB0YmM9XEUzLAoraWNsNjQwNC13fGtkczczNzItd3xJQ0wgNjQwNCBha2EgS29rdXNhaSBEaXNwbGF5IFN5c3RlbXMgNzM3MiAxMzIgY29scywKKwlyczI9XEVvMSwgdXNlPWljbDY0MDQsCisKKyMjIyMgSW50ZXJhY3RpdmUgU3lzdGVtcyBDb3JwCisjCisjIElTQyB1c2VkIHRvIHNlbGwgT0VNZWQgYW5kIGN1c3RvbWl6ZWQgaGFyZHdhcmUgdG8gc3VwcG9ydCBJU0MgVU5JWC4KKyMgSVNDIFVOSVggc3RpbGwgZXhpc3RzIGluIDE5OTUsIGJ1dCBJU0MgaXRzZWxmIGlzIG5vIG1vcmU7IHRoZXkgZ290CisjIGJvdWdodCBvdXQgYnkgU3VuLgorIworCisjIEZyb206IDxjaXRoZXAhZXJpYz4gIFdlZCBTZXAgMTYgMDg6MDY6NDQgMTk4MQorIyAoaW50ZXh0OiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkteUF5SXkxeTCA6OmJjPV5fOiIsIGFsc28gdGhlCisjICI6bGU9Xl86IiBsYXRlciBvdmVycmlkZGVuIC0tIGVzcikKK2ludGV4dHxJbnRlcmFjdGl2ZSBTeXN0ZW1zIENvcnBvcmF0aW9uIG1vZGlmaWVkIG93bCAxMjAwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB4bWMjMSwKKwliZWw9XkcsIGNidD1eWSwgY2xlYXI9XDAxNCQ8MTMyPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eXiwgY3VwPVwwMTclcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XlwsCisJZGNoMT1cMDIyJDw1LjUqPiwgZGwxPVwwMjEkPDUuNSo+LCBlZD1cMDI2SiQ8NS41Kj4sCisJZWw9XktwXlIsIGh0PV5JLCBpbDE9XDAyMCQ8NS41Kj4sIGluZD1eSiwgaXA9JDw1LjUqPiwga2JzPV5ILAorCWtjdWIxPV5fLCBrY3VkMT1eSiwga2N1ZjE9Xl4sIGtjdXUxPV5cLCBrZjA9XlZKXHIsIGtmMT1eVkFcciwKKwlrZjI9XlZCXHIsIGtmMz1eVkNcciwga2Y0PV5WRFxyLCBrZjU9XlZFXHIsIGtmNj1eVkZcciwKKwlrZjc9XlZHXHIsIGtmOD1eVkhcciwga2Y5PV5WSVxyLCBraG9tZT1eWiwgcm1pcj1eVjwsCisJcm1reD1eVjksIHJtc289XlYjXHMsIHNtaXI9XlY7LCBzbWt4PVwwMzZcOlwyNjRcMDI2JSUsCisJc21zbz1eViRcLCwKK2ludGV4dDJ8aW50ZXh0aWl8SU5URVJBQ1RJVkUgbW9kaWZpZWQgb3dsIDEyNTEsCisJYW0sIGJ3LCB1bCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzAsCisJYmVsPV5HLCBjYnQ9XEVbWiwgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwgY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywKKwlmbGFzaD1cRVs7Ozs7Ozs7OzsyOzt1JDwyMDAvPlxFWzs7Ozs7Ozs7OzE7O3UsCisJaHBhPVxFWyVwMSV7MX0lKyVkRywgaHQ9XkksIGljaDE9XEVbQCwgaWwxPVxFW0wsIGluZD1cRVtTLAorCWticz1eSCwga2N1YjE9XEVEXHIsIGtjdWQxPVxFQlxyLCBrY3VmMT1cRUNcciwga2N1dTE9XEVBXHIsCisJa2YwPVxFQFxyLCBrZjE9XEVQXHIsIGtmMj1cRVFcciwga2YzPVxFU1xyLCBrZjQ9XEVUXHIsCisJa2Y1PVxFVVxyLCBrZjY9XEVWXHIsIGtmNz1cRVdcciwga2Y4PVxFWFxyLCBrZjk9XEVZXHIsCisJa2hvbWU9XEVSXHIsIGxmMD1SRUZSU0gsIGxmMT1ERUwgQ0gsIGxmMj1UQUJTRVQsIGxmMz1HT1RPLAorCWxmND0rUEFHRSwgbGY1PStTUkNILCBsZjY9LVBBR0UsIGxmNz0tU1JDSCwgbGY4PUxFRlQsCisJbGY5PVJJR0hULCByaT1cRVtULCBybXNvPVxFWzIgRCwgcm11bD1cRVsyIEQsIHNtc289XEVbNiBELAorCXNtdWw9XEVbMTggRCwKKworIyMjIyBLaW10cm9uIChhYm0sIGt0KQorIworIyBLaW10cm9uIHNlZW1zIHRvIGJlIGhpc3RvcnksIGJ1dCBhcyBNYXJjaCAxOTk4IHRoZXNlIHBlb3BsZSBhcmUgc3RpbGwKKyMgb2ZmZXJpbmcgcmVwYWlyIHNlcnZpY2VzIGZvciBLaW10cm9uIGVxdWlwbWVudDoKKyMKKyMgICAgQ29tL1BhaXIgTW9uaXRvciBTZXJ2aWNlCisjICAgIDExMDUgTi4gQ2xpZmYgQXZlLgorIyAgICBTaW91eCBGYWxscywgU291dGggRGFrb3RhIDU3MTAzCisjCisjICAgIFdBVFMgdm9pY2U6ICAxLTgwMC8zOTgtNDk0NgorIyAgICBQT1RTICAgZmF4OiArMSA2MDUvMzM4LTg3MDkKKyMgICAgUE9UUyB2b2ljZTogKzEgNjA1LzMzOC05NjUwCisjICAgICAgICAgRW1haWw6IDxjb21wYWlyQHNkLmN5YmVybmV4Lm5ldD4KKyMgIEludGVybmV0L1dlYjogPGh0dHA6Ly93d3cuY29tLXBhaXIuY29tPgorIworIyBLaW10cm9uIGVudHJpZXMgaW5jbHVkZSAodW5kb2N1bWVudGVkKSBjb2RlcyBmb3I6IGVudGVyIGRpbSBtb2RlLAorIyBlbnRlciBib2xkIG1vZGUsIGVudGVyIHJldmVyc2UgbW9kZSwgdHVybiBvZmYgYWxsIGF0dHJpYnV0ZXMuCisjCisKKyMgS2ltdHJvbiBBQk0gODUgYWRkZWQgYnkgRHVhbCBTeXN0ZW1zCisjIChhYm04NTogcmVtb3ZlZCBkdXBsaWNhdGVkICI6a2Q9Xko6IiAtLSBlc3IpCithYm04NXxLaW10cm9uIEFCTSA4NSwKKwlPVGJzLCBhbSwgYncsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMxLAorCWNidD1cRUksIGNsZWFyPVxFKiwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRXksIGVsPVxFdCwgaHQ9XkksCisJaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkY3J0LCBpbDE9XEVFLAorCWlzMj1cRUNcRVhcRWdcRW5cRSVcRXJcRShcRWtcRW1cRXEsIGticz1eSCwga2N1YjE9XkgsCisJa2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2hvbWU9Xl4sIHJtaXI9XEVyLCBybXNvPVxFaywKKwlybXVsPVxFbSwgc21pcj1cRVEsIHNtc289XEVqLCBzbXVsPVxFbCwKKyMgS2ltdHJvbiBBQk0gODVIIGFkZGVkIGJ5IER1YWwgU3lzdGVtcy4KKyMgU29tZSBub3RlcyBhYm91dCB0aGUgYWJtODVoIGVudHJpZXM6CisjIDEpIHRoZXJlIGFyZSBzZXZlcmFsIGZpcm13YXJlIHJldnMgb2YgODVIIGluIHRoZSB3b3JsZC4gVXNlIGFibTg1aC1vbGQgZm9yCisjICAgIGZpcm13YXJlIHJldnMgcHJpb3IgdG8gU1A1MQorIyAyKSBNYWtlIHN1cmUgdG8gdXNlIGFibTg1aCBlbnRyeSBpZiB0aGUgdGVybWluYWwgaXMgaW4gODVoIG1vZGUgYW5kIHRoZQorIyAgICBhYm04NWUgZW50cnkgaWYgaXQgaXMgaW4gdHZpOTIwIGVtdWxhdGlvbiBtb2RlLiBUaGV5IGFyZSBpbmNvbXBhdGlibGUKKyMgICAgaW4gc29tZSBwbGFjZXMgYW5kIE5PVCBzb2Z0d2FyZSBzZXR0YWJsZSBpLmUuLCA8aXMyPiBjYW4ndCBmaXggaXQpCisjIDMpIEluIDg1aCBtb2RlLCB0aGUgYXJyb3cga2V5cyBhbmQgc3BlY2lhbCBmdW5jdGlvbnMgdHJhbnNtaXQgd2hlbgorIyAgICB0aGUgdGVybWluYWwgaXMgaW4gZHVwLWVkaXQsIGFuZCB3b3JrIG9ubHkgbG9jYWxseSBpbiBsb2NhbC1lZGl0LgorIyAgICBWaSB3b24ndCBzd2FsbG93IGBkZWwgY2hhcicgZm9yIGluc3RhbmNlLCBidXQgPHNtY3VwPiB0dXJucyBvbgorIyAgICBkdXAtZWRpdCBhbnl3YXkgc28gdGhhdCB0aGUgYXJyb3cga2V5cyB3aWxsIHdvcmsgcmlnaHQuIElmIHRoZQorIyAgICBhcnJvdyBrZXlzIGRvbid0IHdvcmsgdGhlIHdheSB5b3UgbGlrZSwgY2hhbmdlIDxzbWN1cD4sIDxybWN1cD4sIGFuZAorIyAgICA8aXMyPi4gIE5vdGUgdGhhdCA5MjBFIG1vZGUgZG9lcyBub3QgaGF2ZSBzb2Z0d2FyZSBjb21tYW5kcyB0byB0b2dnbGUKKyMgICAgYmV0d2VlbiBkdXAgYW5kIGxvY2FsIGVkaXQsIHNvIHlvdSBnZXQgd2hhdGV2ZXIgd2FzIHNldCBsYXN0IG9uIHRoZQorIyAgICB0ZXJtaW5hbC4KKyMgNCkgPGZsYXNoPiBhdHRyaWJ1dGUgaXMgbmljZSwgYnV0IHNlZW1zIHRvbyBzbG93IHRvIHdvcmsgY29ycmVjdGx5CisjICAgIChcRWI8cGFkPlxFZCkKKyMgNSkgTWFrZSBzdXJlIGBoaWRkZW4nIGF0dHJpYnV0ZXMgYXJlIHNlbGVjdGVkLiBJZiBgZW1iZWRkZWQnIGF0dHJpYnV0ZXMKKyMgICAgYXJlIHNlbGVjdGVkLCB0aGUgPHhtY0A+IGVudHJ5IHNob3VsZCBiZSByZW1vdmVkLgorIyA2KSBhdXRvIG5ldy1saW5lIHNob3VsZCBiZSBvbiAoc2VsZWN0YWJsZSBmcm9tIHNldHVwIG1vZGUgb25seSkKKyMKKyMgRnJvbTogRXJpayBGYWlyIDxmYWlyQHVjYmFycGE+ICBTdW4gT2N0IDI3IDA3OjIxOjA1IDE5ODUKK2FibTg1aHxLaW10cm9uIEFCTSA4NUggbmF0aXZlIG1vZGUsCisJaHMsCisJeG1jQCwKKwliZWw9XkcsIGNub3JtPVxFLjQsIGN2dmlzPVxFLjIsIGRpbT1cRSksIGRzbD1cRWUsIGZsYXNoQCwKKwlmc2w9Xk0sIGludmlzQCwKKwlpczI9XEVDXEVOXEVYXDAyNFwwMTZcRUFcRWFcRSVcRTlcRWVcRXJcRW5cRSJcRX1cRSdcRShcRWZcclxFRzBcRWRcRS40XEVsLAorCWtjdWQxPV5WLCBzZ3IwPVxFKFxFRzAsIHNtaXI9XEVaLCB0c2w9XEVnXEVmLCB1c2U9YWRtK3NnciwKKwl1c2U9YWJtODUsCithYm04NWV8S2ltdHJvbiBBQk0gODVIIGluIDkyMEUgbW9kZSwKKwl4bWNALAorCWJlbD1eRywgZGltPVxFKSwgZmxhc2hALAorCWlzMj1cRUNcRVhcRUFcRSVcRTlcRWVcRXJcRW5cRSJcRX1cRSdcRShcRWZcclxFa1xFcVxFbSwKKwlyZXY9XEVqLCBzZ3IwPVxFKFxFaywgc21pcj1cRVosIHVzZT1hYm04NSwKK2FibTg1aC1vbGR8b2FibTg1aHxvODVofEtpbXRyb24gQUJNIDg1SCB3aXRoIG9sZCBmaXJtd2FyZSByZXYuLAorCXhtY0AsCisJYmVsPV5HLCBkaW09XEUpLAorCWlzMj1cRX1cRUNcRVhcRWVcRW5cRSVcRXJcRShcRWtcRW1cRXFcRWRcRVRcRUNcRTlcRUYsCisJcmV2PVxFaiwgc2dyMD1cRShcRWssIHNtaXI9XEVaLCB1c2U9YWJtODUsCisjIEZyb206IDxtYWxtYW5AYmJuLXZheC5hcnBhPgorIyAoa3Q3OiByZW1vdmVkIG9ic29sZXRlIDptYT1eVl5KXkwgOiIgLS0gZXNyKQora3Q3fGtpbXRyb24gbW9kZWwga3QtNywKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljYnQ9XEVJLCBjbGVhcj1eWiwgY3ViMT1eSCwgY3VkMT1eViwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFVywKKwlkbDE9XEVSLCBlZD1cRVksIGVsPVxFVCwgZnNsPVxFZywgaG9tZT1eXiwgaHQ9XkksIGljaDE9XEVRLAorCWlmPS91c3Ivc2hhcmUvdGFic2V0L3N0ZGNydCwgaWwxPVxFRSwgaW52aXNALCBpczI9XEVsXEUiLAorCWticz1eSCwga2NidD1cRUksIGtjbHI9XlosIGtjdWIxPV5ILCBrY3VkMT1eViwga2N1ZjE9XkwsCisJa2N1dTE9XkssIGtkY2gxPVxFVywga2RsMT1cRVIsIGtlZD1cRVksIGtlbD1cRVQsIGtmMD1eQUlcciwKKwlrZjE9XkFAXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwKKwlrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLAorCWtpY2gxPVxFUSwga2lsMT1cRUUsIHRzbD1cRWYsIHVzZT1hZG0rc2dyLAorIyBSZW5hbWVkIFRCPV5JIHRvIDp0YTosIEJFPV5HIHRvIDpibDosIEJTPV5IIHRvIDprYjosIE4gdG8gOmtTOiAoYmFzZWQgb24gdGhlCisjIG90aGVyIGt0NyBlbnRyeSBhbmQgdGhlIGFkamFjZW50IGtleSBjYXBhYmlsaXRpZXMpLiAgUmVtb3ZlZCBFRSB3aGljaCBpcworIyBpZGVudGljYWwgdG8gOm1oOi4gIFJlbW92ZWQgOkVTPVxFR0Q6IHdoaWNoIGlzIHNvbWUga2luZCBvZiBoaWdobGlnaHQKKyMgYnV0IHdlIGNhbid0IGZpZ3VyZSBvdXQgd2hhdC4KK2t0N2l4fGtpbXRyb24gbW9kZWwga3QtNyBvciA3MCBpbiBJWCBtb2RlLAorCWFtLCBidywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwlhY3NjPWpZaz9sWm1AbkVxRHQ0dUN2QXdCeDMsIGJlbD1eRywgYmxpbms9XEVHMiwgY2J0PVxFSSwKKwljaXZpcz1cRS4wLCBjbGVhcj1cRSosIGNub3JtPVxFLjMsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5WLAorCWN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssCisJZGNoMT1cRVcsIGRpbT1cRUdALCBkbDE9XEVSLCBkc2w9XEVmXHIsIGVkPVxFWSwgZWw9XEVULCBmc2w9Xk0sCisJaG9tZT1eXiwgaHQ9XkksIGljaDE9XEVRLCBpbDE9XEVFLCBpbmQ9XkosCisJaXMyPVxFRzBcRSBzXDAxN1xFfiwga2JzPV5ILCBrY2J0PVxFSSwga2Nscj1cRSosCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RsMT1cRVIsCisJa2VkPVxFWSwga2VsPVxFVCwga2VuZD1cRVksIGtmMD1eQUlcciwga2YxPV5BQFxyLCBrZjI9XkFBXHIsCisJa2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCBraWNoMT1cRVEsIGtpbDE9XEVFLCBrbnA9XEVKLAorCW5lbD1eTV5KLCBwdWxzZT1cRUssIHJtYWNzPVxFJSUsIHJtaXI9LCBybXNvPVxFRzAsIHJtdWw9XEVHMCwKKwlzZ3IwPVxFRzAsIHNtYWNzPVxFJCwgc21pcj0sIHNtc289XEVHNCwgc211bD1cRUc4LCB0c2w9XEVmLAorCisjIyMjIE1pY3JvZGF0YS9NRElTCisjCisjIFRoaXMgd2FzIGEgbGluZSBvZiB0ZXJtaW5hbHMgbWFkZSBieSBNY0Rvbm5lbGwtRG91Z2xhcyBJbmZvcm1hdGlvbiBTeXN0ZW1zLgorIyBUaGVzZSBlbnRyaWVzIGNvbWUgZGlyZWN0IGZyb20gTURJUyBkb2N1bWVudGF0aW9uLiAgSSBoYXZlIGVkaXRlZCB0aGVtIG9ubHkKKyMgdG8gbW92ZSBwcmltYXJ5IG5hbWVzIG9mIHRoZSBmb3JtIHBbMC05XSAqIHRvIGFsaWFzZXMsIGFuZCB0byBjb21tZW50IG91dAorIyA8cm1hY3M+LzxzbWFjcz4gaW4gYSBjb3VwbGUgb2YgZW50cmllcyB3aXRob3V0IDxhY3NjPiBzdHJpbmdzLiAgSSBoYXZlCisjIGFsc28gcmVtb3ZlZCB0aGUgY2hhbmdlIGhpc3Rvcnk7IHRoZSBsYXN0IHZlcnNpb24gaW5kaWNhdGVzIHRoaXMgaXMKKyMgdmVyc2lvbiA0LjMgYnkgQS5CYXJrdXMsIFNlcHRlbWJlciAxOTkwIChlYXJsaWVzdCBlbnRyeSBpcyBPY3RvYmVyIDE5ODkpLgorIworCisjIE1jRG9ubmVsbCBJbmZvcm1hdGlvbiBTeXN0ZW1zIFRlcm1pbmFsIEZhbWlseSBIaXN0b3J5CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFByaXNtLTEsIFByaXNtLTIgYW5kIFA5OToKKyMgICAgICAgQW5jaWVudCBNaWNyb2RhdGEgYW5kIENNQyB0ZXJtaW5hbHMsIHZhZ3VlbHkgbGlrZSBBZGRzIFJlZ2VudCAyNS4KKyMKKyMgUHJpc20tNCBhbmQgUHJpc20tNToKKyMgICAgICAgU2xpZ2h0bHkgbGVzcyBhbmNpZW50IHJhbmdlIG9mIE1pY3JvZGF0YSB0ZXJtaW5hbHMuIEZvbGxvdy1vbiBmcm9tCisjICAgICAgIFByaXNtLTIsIGJ1dCB3aXRoIG1hbnkgZW5oYW5jZW1lbnRzLiBQNSBoYXMgZWlnaHQgZGlzcGxheSBwYWdlcy4KKyMKKyMgUHJpc20tNjoKKyMgICAgICAgQSBzcGVjaWFsIHRlcm1pbmFsIGZvciB1c2Ugd2l0aCBsaWJyYXJ5IHN5c3RlbXMsIHByaW1hcmlseSBpbiBHZXJtYW55LgorIyAgICAgICBMaW1pdGVkIG51bWJlcnMuIFNpbWlsYXIgZnVuY3Rpb25hbGl0eSB0byBQNSAoZXhjZXB0IGF0dHJpYnV0ZXM/KS4KKyMKKyMgUHJpc20tNywgUHJpc20tOCBhbmQgUHJpc20tOToKKyMgICAgICAgTW9yZSByZWNlbnQgcmFuZ2Ugb2YgTURJUyB0ZXJtaW5hbHMsIGluIHdoaWNoIFA3IGFuZCBQOAorIyAgICAgICByZXBsYWNlIHRoZSBQNCAmIFA1LCB3aXRoIGFkZGVkIGZ1bmN0aW9uYWxpdHksIGFuZCBQOSBpcyB0aGUgZmxhZ3NoaXAuCisjICAgICAgIFRoZSBQOSBoYXMgdHdvIGVtdWxhdGlvbiBtb2RlcyAtIFA4IGFuZCBBTlNJIC0gYW5kIGluY2x1ZGVzIGEKKyMgICAgICAgbGFyZ2UgbnVtYmVyIG9mIHRoZSBERUMgVlQyMjAgY29udHJvbCBzZXF1ZW5jZXMuIEJvdGgKKyMgICAgICAgUDggYW5kIFA5IHN1cHBvcnQgODBjLzI0bG4vOHBnIGFuZCAxMzJjbC8yNGxpLzRwZyBmb3JtYXRzLgorIworIyBQcmlzbS0xMiBhbmQgUHJpc20tMTQ6CisjICAgICAgIExhdGVzdCByYW5nZSwgZnVuY3Rpb25hbGx5IHZlcnkgc2ltaWxhciB0byB0aGUgUDkuICBUaGUgUDE0IGhhcyBhCisjICAgICAgIGJsYWNrLW9uLXdoaXRlIG92ZXJzY2FubmluZyBzY3JlZW4uCisjCisjIFRoZSB0ZXJtaW5mbyBkZWZpbml0aW9ucyBnaXZlbiBoZXJlIGFyZToKKyMKKyMgcDIgICAgICAtIFByaXNtLTIgKG9yIFByaXNtLTEgb3IgUDk5KS4KKyMKKyMgcDQgICAgICAtIFByaXNtLTQgKGFuZCBvbGRlciBQN3MgJiBQOHMpLgorIyBwNSAgICAgIC0gUHJpc20tNSAob3IgUHJpc20tNikuCisjCisjIHA3ICAgICAgLSBQcmlzbS03LgorIyBwOCAgICAgIC0gUHJpc20tOCAoaW4gbmF0aW9uYWwgb3IgbXVsdGluYXRpb25hbCBtb2RlKS4KKyMgcDgtdyAgICAtIDEzMiBjb2x1bW4gdmVyc2lvbiBvZiBwOC4KKyMgcDkgICAgICAtIFByaXNtLTkgaW4gQU5TSSBtb2RlLgorIyBwOS13ICAgIC0gMTMyIGNvbHVtbiB2ZXJzaW9uIG9mIHA5LgorIyBwOS04ICAgIC0gUHJpc20tOSBpbiBQcmlzbS04IGVtdWxhdGlvbiBtb2RlLgorIyBwOS04LXcgIC0gQXMgcDktOCwgYnV0IHdpdGggMTMyIGNvbHVtbnMuCisjCisjIHAxMiAgICAgLSBQcmlzbS0xMiBpbiBBTlNJIG1vZGUuCisjIHAxMi13ICAgLSAxMzIgY29sdW1uIHZlcnNpb24gb2YgcDEyLgorIyBwMTItbSAgIC0gUHJpc20tMTIgaW4gTURDIGVtdWxhdGlvbiBtb2RlLgorIyBwMTItbS13IC0gQXMgcDEyLW0sIGJ1dCB3aXRoIDEzMiBjb2x1bW5zLgorIyBwMTQgICAgIC0gUHJpc20tMTQgaW4gQU5TSSBtb2RlLgorIyBwMTQtdyAgIC0gMTMyIGNvbHVtbiB2ZXJzaW9uIG9mIHAxNC4KKyMgcDE0LW0gICAtIFByaXNtLTE0IGluIE1EQyBlbXVsYXRpb24gbW9kZS4KKyMgcDE0LW0tdyAtIEFzIHAxNC1tLCBidXQgd2l0aCAxMzIgY29sdW1ucy4KKyMKKyMgcDI6IFByaXNtLTIKKyMgLS0tLS0tLS0tLS0KKyMKKyMgSW5jbHVkZXMgUHJpc20tMSBhbmQgYmFzaWMgUDk5IHdpdGhvdXQgU1Agb3IgTVAgbG9hZGVkLgorIyBUaGUgc2ltcGxlc3QgZm9ybSBvZiBQcmlzbS10eXBlIHRlcm1pbmFsLgorIyBCYXNpYyBjdXJzb3IgbW92ZW1lbnQgYW5kIGNsZWFyaW5nIG9wZXJhdGlvbnMgb25seS4KKyMgTm8gdmlkZW8gYXR0cmlidXRlcy4KKyMgTm90ZXM6CisjICBIb3Jpem9udGFsIGN1cnNvciBxdWFsaWZpZXJzIG9mIE5VTCwgWE9OIGFuZCBYT0ZGIGFyZSBtYXBwZWQgdG8gdGhlIG5leHQKKyMgIHZhbHVlIHVwLCBmb2xsb3dlZCBieSBiYWNrc3BhY2UuCisjCitwcmlzbTJ8TURDIFByaXNtLTIsCisJYW0sIGJ3LCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAxNCQ8MjA+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eRiwKKwljdXA9XDAxMyVwMSV7MzJ9JSslY1wwMjAlcDIlezEwfSUvJXsxNn0lKiVwMiV7MTB9JW0lKyVQYyU/JXsxN30lZ2MlPSV7MTl9JWdjJT0lfCVnYyUhJXwldCV7MX0lZ2MlKyVjJXs4fSVlJWdjJTslYywKKwljdXUxPV5aLCBlZD1cRUosIGVsPVxFSywgaG9tZT1eQSwKKwlocGE9XDAyMCVwMSV7MTB9JS8lezE2fSUqJXAxJXsxMH0lbSUrJVBjJT8lezE3fSVnYyU9JXsxOX0lZ2MlPSV8JWdjJSElfCV0JXsxfSVnYyUrJWMlezh9JWUlZ2MlOyVjLAorCWluZD1eSiwga2JzPV5ILCBraG9tZT1eQSwgdnBhPVwwMTMlcDElezMyfSUrJWMsCisKKyMgcDQ6IFByaXNtLTQKKyMgLS0tLS0tLS0tLS0KKyMKKyMgSW5jbHVkZXMgZWFybHkgdmVyc2lvbnMgb2YgUDcgJiBQOC4KKyMgQmFzaWMgZmFtaWx5IGRlZmluaXRpb24gZm9yIG1vc3QgUHJpc21zIChleGNlcHQgUDIgYW5kIFA5IEFOU0kpLgorIyBOb3RlczoKKyMgIEhvcml6b250YWwgY3Vyc29yIHF1YWxpZmllcnMgb2YgTlVMLCBYT04gYW5kIFhPRkYgYXJlIG1hcHBlZCB0byB0aGUgbmV4dAorIyAgdmFsdWUgdXAsIGZvbGxvd2VkIGJ5IGJhY2tzcGFjZS4KKyMgIEN1cnNvciBrZXkgZGVmaW5pdGlvbnMgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgaW50ZXJmZXJlIHdpdGggdmkgYW5kIGNzaCBrZXlzLgorIworcHJpc200fHA0fFA0fE1EQyBQcmlzbS00LAorCWFtLCBidywgaHMsIG1jNWksIG1zZ3IsCisJY29scyM4MCwgbGluZXMjMjQsIHdzbCM3MiwgeG1jIzEsCisJYmVsPV5HLCBibGluaz1eQ0IsIGNpdmlzPV5dXDM0NCwgY2xlYXI9XDAxNCQ8MjA+LAorCWNub3JtPV5dXDM0MiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkYsCisJY3VwPVwwMTMlcDElezMyfSUrJWNcMDIwJXAyJXsxMH0lLyV7MTZ9JSolcDIlezEwfSVtJSslUGMlPyV7MTd9JWdjJT0lezE5fSVnYyU9JXwlZ2MlISV8JXQlezF9JWdjJSslYyV7OH0lZSVnYyU7JWMsCisJY3V1MT1eWiwgZGltPV5DQSwgZHNsPVwwMzVcMzQzXDAzNVwzNDUsIGVkPVxFSiwgZWw9XEVLLAorCWZzbD1eXVwzNDUsIGhvbWU9XkEsCisJaHBhPVwwMjAlcDElezEwfSUvJXsxNn0lKiVwMSV7MTB9JW0lKyVQYyU/JXsxN30lZ2MlPSV7MTl9JWdjJT0lfCVnYyUhJXwldCV7MX0lZ2MlKyVjJXs4fSVlJWdjJTslYywKKwlpbmQ9XkosIGludmlzPV5DSCwga2JzPV5ILCBraG9tZT1eQSwgbWMwPVxFVSwgbWM0PVxFVCwgbWM1PVxFUiwKKwlyZXY9XkNELCBybXNvPV5DXHMsIHJtdWw9XkNccywKKwlzZ3I9XDAwMyV7NjR9JT8lcDElcDMlfCV0JXs0fSUrJTslPyVwMiV0JXsxNn0lKyU7JT8lcDQldCV7Mn0lKyU7JT8lcDUldCV7MX0lKyU7JT8lcDcldCV7OH0lKyU7JWMlPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNncjA9XkNccywgc21zbz1eQ0QsIHNtdWw9XkNQLCB0c2w9Xl1cMzQzLAorCXZwYT1cMDEzJXAxJXszMn0lKyVjLAorCisjIHA1OiBQcmlzbS01CisjIC0tLS0tLS0tLS0tCisjCisjIFNhbWUgZGVmaW5pdGlvbiBhcyBwNC4gSW5jbHVkZXMgUHJpc20tNiAobm90IHRlc3RlZCEpLgorIyBEb2VzIG5vdCB1c2UgYW55IG11bHRpLXBhZ2UgZmVhdHVyZXMuCisjCitwcmlzbTV8cDV8UDV8TURDIFByaXNtLTUsCisJdXNlPXA0LAorCisjIHA3OiBQcmlzbS03CisjIC0tLS0tLS0tLS0tCisjCisjIFNpbWlsYXIgZGVmaW5pdGlvbiB0byBwNC4gVXNlcyBBTlNJIGN1cnNvciBtb3Rpb24gdG8gYXZvaWQgbmV0d29yayBwcm9ibGVtcy4KKyMgTm90ZXM6CisjICBVc2UgcDQgZm9yIHZlcnkgZWFybHkgbW9kZWxzIG9mIFA3LgorIyAgUmV2LWluZGV4IHJlbW92ZWQ7IGNhbid0IHNlbmQgbnVsbHMgdG8gdGVybWluYWwgaW4gOC1iaXQgbW9kZXMuCisjCitwcmlzbTd8cDd8UDd8TURDIFByaXNtLTcsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBocGFALCB2cGFALCB1c2U9cDQsCisKKyMgcDg6IFByaXNtLTgKKyMgLS0tLS0tLS0tLS0KKyMKKyMgU2ltaWxhciBkZWZpbml0aW9uIHRvIHA3LiBVc2VzIEFOU0kgY3Vyc29yIG1vdGlvbiB0byBhdm9pZCBuZXR3b3JrIHByb2JsZW1zLgorIyBTdXBwb3J0cyBuYXRpb25hbCBhbmQgbXVsdGluYXRpb25hbCBjaGFyYWN0ZXIgc2V0cy4KKyMgTm90ZXM6CisjICBBbHRlcm5hdGUgY2hhciBzZXQgb3BlcmF0aW9ucyBvbmx5IHdvcmsgaW4gbXVsdGluYXRpb25hbCBtb2RlLgorIyAgVXNlIHA0IGZvciB2ZXJ5IGVhcmx5IG1vZGVscyBvZiBQOC4KKyMgIFJldi1pbmRleCByZW1vdmVkOyBjYW4ndCBzZW5kIG51bGxzIHRvIHRlcm1pbmFsIGluIDgtYml0IG1vZGVzLgorIyAoZXNyOiBjb21tZW50ZWQgb3V0IDxzbWFjcz4vPHJtYWNzPiBiZWNhdXNlIHRoZXJlJ3Mgbm8gPGFjc2M+KQorIworcHJpc204fHA4fFA4fE1EQyBQcmlzbS04LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgaHBhPVxFWyVpJXAxJWRgLCBpczI9XEVbPDEyaCwKKwl2cGE9XEVbJWklcDElZGQsIHVzZT1wNCwKKworIyBwOC13OiBQcmlzbS04IGluIDEzMiBjb2x1bW4gbW9kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyAnV2lkZScgdmVyc2lvbiBvZiBwOC4KKyMgTm90ZXM6CisjICBSZXYtaW5kZXggcmVtb3ZlZDsgY2FuJ3Qgc2VuZCBudWxscyB0byB0ZXJtaW5hbCBpbiA4LWJpdCBtb2Rlcy4KKyMKK3ByaXNtOC13fHA4LXd8UDgtV3xNREMgUHJpc20tOCBpbiAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsCisJaXMyPVxFWzwxMmhcRVs8MTRoLCB1c2U9cDgsCisKKyMgcDk6IFByaXNtLTkgaW4gQU5TSSBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhlICJmbGFnc2hpcCIgbW9kZWwgb2YgdGhpcyBnZW5lcmF0aW9uIG9mIHRlcm1pbmFscy4KKyMgQU5TSSBYMy42NCAoSVNPIDY0MjkpIHN0YW5kYXJkIHNlcXVlbmNlcywgcGx1cyBtYW55IERFQyBWVDIyMCBvbmVzLgorIyBOb3RlczoKKyMgIFRhYnMgb25seSByZXNldCBieSAicmVzZXQiLiBPdGhlcndpc2UgYXNzdW1lcyBkZWZhdWx0ICg4IGNvbHMpLgorIyAgRml4ZXMgdG8gZGVhbCB3aXRoIHRlcm1pbmFsIGZpcm13YXJlIGJ1Z3M6CisjICAuICdyaScgdXNlcyBpbnNlcnQtbGluZSBzaW5jZSByZXYgaW5kZXggZG9lc24ndCBhbHdheXMKKyMgIC4gJ3NncjAnIGhhcyBleHRyYSAnMCcgc2luY2UgZXNjW20gZmFpbHMKKyMgIC4gJ2ZzbCcgJiAnZHNsJyB1c2UgaWxsZWdhbCBjaGFyIHNpbmNlIGNyIGlzIGFjdGlvbmVkIHdyb25nIG9uIGxpbmUgMjUKKyMgIE5vdCBjb3ZlcmVkIGluIHRoZSBjdXJyZW50IGRlZmluaXRpb246CisjICAuIExhYmVscworIyAgLiBQcm9ncmFtbWluZyBGbiBrZXlzCisjICAuIEdyYXBoaWMgY2hhcmFjdGVycyAoZGVmYXVsdHMgY29ycmVjdGx5IHRvIHZ0MTAwKQorIyAgLiBQYWRkaW5nIHZhbHVlcyAoc2V0cyB4b24pCisjIChlc3I6IGNvbW1lbnRlZCBvdXQgPHNtYWNzPi88cm1hY3M+IGJlY2F1c2UgdGhlcmUncyBubyA8YWNzYz4pCisjCitwcmlzbTl8cDl8UDl8TURDIFByaXNtLTkgaW4gQU5TSUkgbW9kZSwKKwlhbSwgYncsIGhzLCBtYzVpLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsIHdzbCM3MiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwgY2l2aXM9XEVbPDRsLAorCWNsZWFyPV5MLCBjbm9ybT1cRVs8NGgsIGNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZCUldiwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGRzbD1cRVslfVwwMjQsIGVjaD1cRVslcDElZFgsCisJZWQ9XEVbSiQ8MTA+LCBlbD1cRVtLLCBmc2w9XlQsIGhvbWU9XEVbSCwgaHBhPVxFWyVpJXAxJWRgLAorCWh0PV5JLCBodHM9XEVILCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XkosCisJaXMyPVxFWyZwXEVbPDEybFxFIEYsIGticz1eSCwga2Nscj1eTCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVbMTF+LAorCWtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LAorCWtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LAorCWtmMTg9XEVbMzJ+LCBrZjI9XEVbMTJ+LCBrZjM9XEVbMTN+LCBrZjQ9XEVbMTR+LAorCWtmNT1cRVsxNX4sIGtmNj1cRVsxN34sIGtmNz1cRVsxOH4sIGtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sCisJa2hvbWU9XEVbSCwgbWMwPVxFW2ksIG1jND1cRVs0aSwgbWM1PVxFWzVpLCBuZWw9Xk1eSiwKKwlwcm90PVxFWzMyJXssIHJjPVxFWyV6LCByZXA9XEVbJXAyJWRiJXAxJWMsIHJldj1cRVs3bSwKKwlyaT1cRVtMLCBybWlyPVxFWzRsLCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMyPVxFWyZwXEVbPDEybFxFIEZcRVszZ1xFWzk7MTc7MjU7MzM7NDE7NDk7NTc7NjU7NzMgTiwKKwlzYz1cRVsleSwKKwlzZ3I9XEVbJXswfSU/JXAxJXAzJXwldCV7N30lKyU7JT8lcDIldCV7Mn0lKyU7JT8lcDQldCV7NX0lKyU7JT8lcDYldCV7MX0lKyU7bSU/JXA4JXRcRVslezMyfSUrJWQlJXslOyU/JXA5JXRcMDE2JWVcMDE3JTssCisJc2dyMD1cRVswbVwwMTcsIHNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzJnLCB0c2w9XEVbJWklcDElZCUlfSwgdnBhPVxFWyVpJXAxJWRkLAorCisjIHA5LXc6IFByaXNtLTkgaW4gMTMyIGNvbHVtbiBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjICdXaWRlJyB2ZXJzaW9uIG9mIHA5LgorIworcHJpc205LXd8cDktd3xQOS1XfE1EQyBQcmlzbS05IGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwKKwlpczI9XEVbJnBcRVs8MTJsXEUgRlxFWzwxNGgsCisJcnMyPVxFWyZwXEVbPDEybFxFIEZcRVs8MTRoLCB1c2U9cDksCisKKyMgcDktODogUHJpc20tOSBpbiBQOCBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBQOSB0ZXJtaW5hbCBpbiBQOCBlbXVsYXRpb24gbW9kZS4KKyMgU2ltaWxhciB0byBwOCBkZWZpbml0aW9uLgorIyBJbnNlcnRpb24gYW5kIGRlbGV0aW9uIG9wZXJhdGlvbnMgcG9zc2libGUuCisjCitwcmlzbTktOHxwOS04fFA5LTh8TURDIFByaXNtLTkgaW4gUDggbW9kZSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCB1c2U9cDgsCisKKyMgcDktOC13OiBQcmlzbS05IGluIFA4IGFuZCAxMzIgY29sdW1uIG1vZGVzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBQOSB0ZXJtaW5hbCBpbiBQOCBlbXVsYXRpb24gbW9kZSBhbmQgMTMyIGNvbHVtbiBtb2RlLgorIworcHJpc205LTgtd3xwOS04LXd8UDktOC1XfE1EQyBQcmlzbS05IGluIFByaXNtIDggZW11bGF0aW9uIGFuZCAxMzIgY29sdW1uIG1vZGUsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgdXNlPXA4LXcsCisKKyMgcDEyOiBQcmlzbS0xMiBpbiBBTlNJIG1vZGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFNlZSBwOSBkZWZpbml0aW9uLgorIworcHJpc20xMnxwMTJ8UDEyfE1EQyBQcmlzbS0xMiBpbiBBTlNJIG1vZGUsCisJdXNlPXA5LAorCisjIHAxMi13OiBQcmlzbS0xMiBpbiAxMzIgY29sdW1uIG1vZGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyAnV2lkZScgdmVyc2lvbiBvZiBwMTIuCisjCitwcmlzbTEyLXd8cDEyLXd8UDEyLVd8TURDIFByaXNtLTEyIGluIDEzMiBjb2x1bW4gbW9kZSwKKwl1c2U9cDktdywKKworIyBwMTItbTogUHJpc20tMTIgaW4gTURDIGVtdWxhdGlvbiBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgUDEyIHRlcm1pbmFsIGluIE1EQyBlbXVsYXRpb24gbW9kZS4KKyMgU2ltaWxhciB0byBwOCBkZWZpbml0aW9uLgorIyBJbnNlcnRpb24gYW5kIGRlbGV0aW9uIG9wZXJhdGlvbnMgcG9zc2libGUuCisjCitwcmlzbTEyLW18cDEyLW18UDEyLU18TURDIFByaXNtLTEyIGluIE1EQyBlbXVsYXRpb24gbW9kZSwKKwl1c2U9cDktOCwKKworIyBwMTItbS13OiBQcmlzbS0xMiBpbiBNREMgZW11bGF0aW9uIGFuZCAxMzIgY29sdW1uIG1vZGVzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgUDEyIHRlcm1pbmFsIGluIE1EQyBlbXVsYXRpb24gbW9kZSBhbmQgMTMyIGNvbHVtbiBtb2RlLgorIworcHJpc20xMi1tLXd8cDEyLW0td3xQMTItTS1XfE1EQyBQcmlzbS0xMiBpbiBNREMgZW11bGF0aW9uIGFuZCAxMzIgY29sdW1uIG1vZGUsCisJdXNlPXA5LTgtdywKKworIyBwMTQ6IFByaXNtLTE0IGluIEFOU0lJIG1vZGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFNlZSBwOSBkZWZpbml0aW9uLgorIworcHJpc20xNHxwMTR8UDE0fE1EQyBQcmlzbS0xNCBpbiBBTlNJSSBtb2RlLAorCXVzZT1wOSwKKworIyBwMTQtdzogUHJpc20tMTQgaW4gMTMyIGNvbHVtbiBtb2RlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgJ1dpZGUnIHZlcnNpb24gb2YgcDE0LgorIworcHJpc20xNC13fHAxNC13fFAxNC1XfE1EQyBQcmlzbS0xNCBpbiAxMzIgY29sdW1uIG1vZGUsCisJdXNlPXA5LXcsCisKKyMgcDE0LW06IFByaXNtLTE0IGluIE1EQyBlbXVsYXRpb24gbW9kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFAxNCB0ZXJtaW5hbCBpbiBNREMgZW11bGF0aW9uIG1vZGUuCisjIFNpbWlsYXIgdG8gcDggZGVmaW5pdGlvbi4KKyMgSW5zZXJ0aW9uIGFuZCBkZWxldGlvbiBvcGVyYXRpb25zIHBvc3NpYmxlLgorIworcHJpc20xNC1tfHAxNC1tfFAxNC1NfE1EQyBQcmlzbS0xNCBpbiBNREMgZW11bGF0aW9uIG1vZGUsCisJdXNlPXA5LTgsCisKKyMgcDE0LW0tdzogUHJpc20tMTQgaW4gTURDIGVtdWxhdGlvbiBhbmQgMTMyIGNvbHVtbiBtb2RlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFAxNCB0ZXJtaW5hbCBpbiBNREMgZW11bGF0aW9uIG1vZGUgYW5kIDEzMiBjb2x1bW4gbW9kZS4KKyMKK3ByaXNtMTQtbS13fHAxNC1tLXd8UDE0LU0tV3xNREMgUHJpc20tMTQgaW4gTURDIGVtdWxhdGlvbiBhbmQgMTMyIGNvbHVtbiBtb2RlLAorCXVzZT1wOS04LXcsCisKKyMgRW5kIG9mIE1jRG9ubmVsbCBJbmZvcm1hdGlvbiBTeXN0ZW1zIFByaXNtIGRlZmluaXRpb25zCisKKyMgVGhlc2UgdGhpbmdzIHdlcmUgcG9wdWxhciBpbiB0aGUgUGljayBkYXRhYmFzZSBjb21tdW5pdHkgYXQgb25lIHRpbWUKKyMgRnJvbTogR2VvcmdlIExhbmQgPGdlb3JnZWxhbmRAYW9sLmNvbT4gMjQgU2VwIDE5OTYKK3A4Z2x8cHJpc204Z2x8TWNEb25uZWxsLURvdWdsYXMgUHJpc20tOCBhbHRlcm5hdGUgZGVmaW5pdGlvbiwKKwlhbSwgYncsIGhzLCBtaXIsCisJY29scyM4MCwgbGluZXMjMjQsIG1hIzEsIHdzbCM3OCwgeG1jIzEsCisJYmVsPV5HLCBibGluaz1eQ0IsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eVSwgY3VkMT1eSiwgY3VmMT1eRiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XlosIGRjaDE9XHNeSCwgZGltPV5DQSwgZGwxPV5QLAorCWVkPVxFSiwgZWw9XEVLLCBob21lPV5BLCBpbmQ9XkosIGludmlzPV5DSCwga2JzPV5ILCBrY3ViMT1eVSwKKwlrY3VkMT1eSiwga2N1ZjE9XkYsIGtjdXUxPV5aLCBrZGNoMT1cc15ILCBrZGwxPV5QLCBrZWQ9XEVKLAorCWtlbD1cRUssIGtmMT1eQUBcciwga2YxMD1eQUlcciwga2YxMj1eQUpcciwga2YxMz1eQUtcciwKKwlrZjE0PV5BTFxyLCBrZjE1PV5BTVxyLCBrZjE2PV5BTlxyLCBrZjE3PV5BT1xyLCBrZjI9XkFBXHIsCisJa2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5BLCBsZjE9RjEsIGxmMTA9RjEwLCBsZjI9RjIsCisJbGYzPUYzLCBsZjQ9RjQsIGxmNT1GNSwgbGY2PUY2LCBsZjc9RjcsIGxmOD1GOCwgbGY5PUY5LCBuZWw9XkpeTSwKKwlwYWQ9XDAsIHJldj1eQ0QsIHJtc289XkNccywgcm11bD1eQ1xzLCBzZ3IwPV5DXHMsIHNtc289XkNFLAorCXNtdWw9XkMwLAorCisjIyMjIE1pY3JvdGVybSAoYWN0LCBtaW1lKQorIworIyBUaGUgbWltZTEgZW50cmllcyByZWZlciB0byB0aGUgTWljcm90ZXJtIE1pbWUgSSBvciBNaW1lIElJLgorIyBUaGUgZGVmYXVsdCBtaW1lIGlzIGFzc3VtZWQgdG8gYmUgaW4gZW5oYW5jZWQgYWN0IGl2IG1vZGUuCisjCisKKyMgTmV3ICJzYWZlIiBjdXJzb3IgbW92ZW1lbnQgKDUvODcpIGZyb20gPHJldXNzQHVtZDUudW1kLmVkdT4uICBQcmV2ZW50cworIyBmcmVha291dCB3aXRoIG91dC1vZi1yYW5nZSBhcmdzIG9uIFN5dGVrIG11bHRpcGxleG9ycy4gIE5vIDxzbXNvPV5OPiBhbmQKKyMgPHJtc289Xk4+IHNpbmNlICBpdCBnZXRzIGNvbmZ1c2VkIGFuZCBpdCdzIHRvbyBkaW0gYW55d2F5LiAgTm8gPGljaDE+CisjIHNpbmNlIFN5dGVrIGluc2lzdHMgXlMgbWVhbnMgeG9mZi4KKyMgKGFjdDQ6IGZvdW5kICI6aWM9Ml5TOmVpPTppbT06aXA9LjEqXlY6IiBjb21tZW50ZWQgb3V0IGluIDguMyAtLSBlc3IpCithY3Q0fG1pY3JvdGVybXxtaWNyb3Rlcm0gYWN0IGl2LAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAxNCQ8MTIvPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkssIGN1ZjE9XlgsCisJY3VwPVwwMjQlcDElezI0fSUrJWMlcDIlcDIlPyV7NDd9JT4ldCV7NDh9JSslOyV7ODB9JSslYywKKwljdXUxPV5aLCBkY2gxPVwwMDQkPC4xKi8+LCBkbDE9XDAyNyQ8Mi4zKi8+LAorCWVkPVwwMzckPDIuMiovPiwgZWw9XDAzNiQ8LjEqLz4sIGhvbWU9Xl0sCisJaWwxPVwwMDE8Mi4zKi8+LCBpbmQ9XkosIGtjdWIxPV5ILCBrY3VkMT1eSywga2N1ZjE9XlgsCisJa2N1dTE9XlosCisjIFRoZSBwYWRkaW5nIG9uIDpzcjogYW5kIDp0YTogZm9yIGFjdDUgYW5kIG1pbWUgaXMgYSBndWVzcyBhbmQgbm90IGZpbmFsLgorIyBUaGUgYWN0IDUgaGFzIGhhcmR3YXJlIHRhYnMsIGJ1dCB0aGV5IGFyZSBpbiBjb2x1bW5zIDgsIDE2LCAyNCwgMzIsIDQxICghKS4uLgorIyAobWljcm90ZXJtNTogcmVtb3ZlZCBvYnNvbGV0ZSAiOm1hPT1eWl5QXlhsXktqOiIgLS0gZXNyKQorYWN0NXxtaWNyb3Rlcm01fG1pY3JvdGVybSBhY3QgdiwKKwlrY3ViMT1eSCwga2N1ZDE9XkssIGtjdWYxPV5YLCBrY3V1MT1eWiwgcmk9XEVIJDwzPiwgdWM9XkhcRUEsCisJdXNlPWFjdDQsCisjIE1pbWVzIHVzaW5nIGJyaWdodG5lc3MgZm9yIHN0YW5kb3V0LiAgSGFsZiBicmlnaHQgaXMgcmVhbGx5IGRpbSB1bmxlc3MKKyMgeW91IHR1cm4gdXAgdGhlIGJyaWdodG5lc3Mgc28gZmFyIHRoYXQgbGluZXMgc2hvdyB1cCBvbiB0aGUgc2NyZWVuLgorbWltZS1mYnxmdWxsIGJyaWdodCBtaW1lMSwKKwlpczI9XlNcRSwgcm1zbz1eUywgc21zbz1eWSwgdXNlPW1pbWUsCittaW1lLWhifGhhbGYgYnJpZ2h0IG1pbWUxLAorCWlzMj1eWVxFLCBybXNvPV5ZLCBzbXNvPV5TLCB1c2U9bWltZSwKKyMgKG1pbWU6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eWCBeS15KXlpeUDoiOyByZW1vdmVkICI6ZG89Xks6IiB0aGF0IG92ZXJyb2RlCisjIHRoZSBtb3JlIHBsYXVzaWJsZSAiOmRvPV5KOiIgLS0gZXNyKQorIyB1YyB3YXMgYXQgb25lIHRpbWUgZGlzYWJsZWQgdG8gZ2V0IGFyb3VuZCBhIGN1cnNlcyBidWcsIGJlIHdhcnkgb2YgaXQKK21pbWV8bWltZTF8bWltZTJ8bWltZWl8bWltZWlpfG1pY3JvdGVybSBtaW1lMSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjOSwKKwliZWw9XkcsIGNsZWFyPV5dXkMsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5YLAorCWN1cD1cMDI0JXAxJXsyNH0lKyVjJXAyJXAyJT8lezMyfSU+JXQlezQ4fSUrJTslezgwfSUrJWMsCisJY3V1MT1eWiwgZGwxPVwwMjckPDgwPiwgZWQ9Xl8sIGVsPV5eLCBob21lPV5dLCBodD1cMDExJDwyPiwKKwlpbDE9XDAwMSQ8ODA+LCBpbmQ9XkosIGlzMj1eU1xFXlEsIGtjdWIxPV5ILCBrY3VkMT1eSywKKwlrY3VmMT1eWCwga2N1dTE9XlosIHJpPVwwMjIkPDM+LCB1Yz1eVSwKKyMgVGhlc2UgdGVybWNhcHMgKGZvciBtaW1lMmEpIHB1dCB0aGUgdGVybWluYWwgaW4gbG93IGludGVuc2l0eSBtb2RlCisjIHNpbmNlIGhpZ2ggaW50ZW5zaXR5IG1vZGUgaXMgc28gb2Jub3hpb3VzLgorbWltZTJhLXN8bWljcm90ZXJtIG1pbWUyYSAoZW11bGF0aW5nIGFuIGVuaGFuY2VkIHNvcm9jIGlxMTIwKSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUksIGRjaDE9XEVELAorCWRsMT1cMDI3JDwyMCo+LCBlZD1cRUokPDIwKj4sIGVsPVxFSywgaG9tZT1eXiwKKwlpbDE9XDAwMSQ8MjAqPiwgaW5kPV5KLCBpcD0kPDI+LCBpczI9XEUpLCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkwsIGtjdXUxPV5LLCByaT1cRUksIHJtaXI9XlosIHJtc289XEU7LCBybXVsPVxFNywKKwlzbWlyPVxFRSwgc21zbz1cRVw6LCBzbXVsPVxFNiwKKyMgVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1vZGUgKGJ1dCBeWCBjYW4ndCBiZSB1c2VkIGFzIGEga2lsbCBjaGFyYWN0ZXIpCittaW1lMmF8bWltZTJhLXZ8bWljcm90ZXJtIG1pbWUyYSAoZW11bGF0aW5nIGFuIGVuaGFuY2VkIHZ0NTIpLAorCU9UYnMsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1eTiwKKwlkbDE9XDAyNyQ8MjAqPiwgZWQ9XEVRJDwyMCo+LCBlbD1cRVAsIGhvbWU9XEVILCBodD1eSSwKKwlpbDE9XDAwMSQ8MjAqPiwgaW5kPV5KLCBpcD0kPDI+LCBpczI9XlksIGtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCByaT1cRUEsIHJtaXI9XlosIHJtc289XEU5LAorCXJtdWw9XEU1LCBzbWlyPV5PLCBzbXNvPVxFOCwgc211bD1cRTQsCisjIChtaW1lM2E6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eWCBeS15KXlpeUDoiIC0tIGVzcikKK21pbWUzYXxtaW1lMSBlbXVsYXRpbmcgM2EsCisJYW1ALAorCWtjdWIxPV5ILCBrY3VkMT1eSywga2N1ZjE9XlgsIGtjdXUxPV5aLCB1c2U9YWRtM2EsCittaW1lM2F4fG1pbWUtM2F4fG1pbWUxIGVtdWxhdGluZyBlbmhhbmNlZCAzYSwKKwlpdCM4LAorCWRsMT1cMDI3JDw4MD4sIGVkPV5fLCBlbD1eWCwgaHQ9XDAxMSQ8Mz4sIGlsMT1cMDAxJDw4MD4sCisJdXNlPW1pbWUzYSwKKyMgV2VkIE1hciAgOSAxODo1MzoyMSAxOTgzCisjIFdlIHJ1biBvdXIgdGVybWluYWxzIGF0IDI0MDAgYmF1ZCwgc28gdGhlcmUgbWlnaHQgYmUgc29tZSB0aW1pbmcgcHJvYmxlbXMgYXQKKyMgaGlnaGVyIHNwZWVkcy4gVGhlIG1ham9yIGltcHJvdmVtZW50cyBpbiB0aGlzIG1vZGVsIGFyZSB0aGUgdGVybWluYWwgbm93CisjIHNjcm9sbHMgZG93biBhbmQgaW5zZXJ0IG1vZGUgd29ya3Mgd2l0aG91dCByZWRyYXdpbmcgdGhlIHJlc3Qgb2YgdGhlIGxpbmUKKyMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IuIFRoaXMgaXMgZG9uZSB3aXRoIGEgYml0IG9mIGEga2x1ZGdlIHVzaW5nIHRoZQorIyBleGl0IGdyYXBoaWNzIG1vZGUgdG8gZ2V0IG91dCBvZiBpbnNlcnQsIGJ1dCBpdCBkb2VzIG5vdCBhcHBlYXIgdG8gaHVydAorIyBhbnl0aGluZyB3aGVuIHVzaW5nIHZpIGF0IGxlYXN0LiBJZiB5b3UgaGF2ZSBzb21lIHVzZXJzIHVzaW5nIGFjdDRzIHdpdGgKKyMgcHJvZ3JhbXMgdGhhdCB1c2UgY3Vyc2VzIGFuZCBncmFwaGljcyBtb2RlIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLgorbWltZTMxNHxtbTMxNHxtaW1lIDMxNCwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1eTCwgY3ViMT1eSCwgY3VmMT1eWCwgY3VwPVwwMjQlcDElYyVwMiVjLCBjdXUxPV5aLAorCWRjaDE9XkQsIGRsMT1eVywgZWQ9Xl8sIGVsPV5eLCBob21lPV5dLCBodD1eSSwgaWwxPV5BLCBrY3ViMT1eSCwKKwlrY3VkMT1eSywga2N1ZjE9XlgsIGtjdXUxPV5aLCBybWlyPV5WLCBzbWlyPV5TLAorIyBNaWNyb3Rlcm0gbWltZSAzNDAgZnJvbSBVbml2ZXJzaXR5IG9mIFdpc2NvbnNpbgorbW0zNDB8bWltZTM0MHxtaW1lIDM0MCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1cMDMyJDwxMi8+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLAorCWRjaDE9XEUjJDwyLjEqLz4sIGRsMT1cRVYkPDQ5LjYvPiwgZWQ9XDAzNyQ8MiovPiwKKwllbD1cRUwkPDIuMS8+LCBodD1eSSwgaWwxPVxFVSQ8NDYvPiwgaW5kPV5KLCBpczI9XEVcLCwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1dTE9XkssIG5lbD1eTV5KLAorIyBUaGlzIGNhbWUgZnJvbSBVbml2ZXJzaXR5IG9mIFdpc2NvbnNpbiBtYXJrZWQgImFzdHJvIHRlcm1jYXAgZm9yIGpvb3NzIi4KKyMgKG10NDUyMC1ydjogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtuIzQ6IiBhbmQgaW5jb3JyZWN0ICI6cmk9XEVbQzoiOworIyBhbHNvIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCittdDQ1MjAtcnZ8bWljcm8tdGVybSA0NTIwIHJldmVyc2UgdmlkZW8sCisJYW0sIGhzLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVswVlxFOCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJY3Z2aXM9XEU3XEVbMFUsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBmbGFzaD1cRVs/NWwkPDIwMC8+XEVbPzVoLAorCWZzbD1cRVs/NWxcRVs/NWgsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsCisJaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVtMLCBpbmQ9XEVELAorCWlzMj1cRShCXEVbMmxcRT5cRVsyMGxcRVs/M2xcRVs/NWhcRVs/N2hcRVsxOzI0clxFWzI0OzFIXEVbSFxFW0osCisJa2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBraG9tZT1cRVtILAorCWxsPVxFWzI0OzFILCBuZWw9XEVFLCByYz1cRTgsIHJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLAorCXJpPVxFTSwgcm1hbT1cRVs/N2wsIHJtc289XEVbMG0sIHJtdWw9XEVbMjRtLAorCXJzMT1cRShCXEVbMmxcRT5cRVsyMGxcRVs/M2xcRVs/NWhcRVs/N2hcRVtIXEVbSiwKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21hbT1cRVs/N2gsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFW2csIHRzbD1cRVsyNTsxSCwKKworIyBGcmkgQXVnICA1IDA4OjExOjU3IDE5ODMKKyMgVGhpcyBlbnRyeSB3b3JrcyBmb3IgdGhlIGVyZ28gNDAwMCB3aXRoIHRoZSBmb2xsb3dpbmcgc2V0dXBzOgorIyBhbnNpLHdyYXBhcm91bmQsbmV3bGluZSBkaXNhYmxlZCwgeG9uL3hvZmYgZGlzYWJsZWQgaW4gYm90aAorIyBzZXR1cCBhICYgYy4KKyMKKyMgV0FSTklORyEhISBUaGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgRVJHTyA0MDAwIG1pY3JvY29kZQorIyBCZSBhZHZpc2VkIHRoYXQgdmVyeSBlYXJseSB2ZXJzaW9ucyBETyBOT1QgV09SSyBSSUdIVCAhIQorIyBNaWNyb3Rlcm0gZG9lcyBoYXZlIGEgUk9NIGV4Y2hhbmdlIHByb2dyYW0tIHVzZSBpdCBvciBsb3NlIGJpZworIyAoZXJnbzQwMDogYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorZXJnbzQwMDB8bWljcm90ZXJtIGVyZ28gNDAwMCwKKwlkYSwgZGIsIG1zZ3IsCisJY29scyM4MCwgbGluZXMjNjYsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbMkokPDgwPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWRjaDE9XEVbMVAkPDgwPiwgZGwxPVxFWzFNJDw1Kj4sIGVkPVxFWzBKJDwxNT4sCisJZWw9XEVbMEskPDEzPiwgaHQ9XkksIGlsMT1cRVsxTCQ8NSo+LCBpbmQ9XEVEJDwyMCo+LAorCWlzMj1cRTxcRT1cRVs/MWxcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgkPDMwMD4sCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFT1AsCisJa2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgbGYxPXBmMSwgbGYyPXBmMiwgbGYzPXBmMywKKwlsZjQ9cGY0LCByaT1cRU0kPDIwKj4sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJta3g9XEU9JDw0Piwgcm1zbz1cRVttJDwyMD4sIHNncjA9XEVbbSQ8MjA+LAorCXNtYW09XEVbPzdtLCBzbWlyPVxFWzRoJDw2Piwgc21reD1cRT0kPDQ+LAorCXNtc289XEVbN20kPDIwPiwKKworIyMjIyBOQ1IKKyMKKyMgTkNSJ3MgdGVybWluYWwgZ3JvdXAgd2FzIG1lcmdlZCB3aXRoIEFUJlQncyB3aGVuIEFUJlQgYm91Z2h0IHRoZSBjb21wYW55LgorIyBGb3Igd2hhdCBoYXBwZW5lZCB0byB0aGF0IGdyb3VwLCBzZWUgdGhlIEFERFMgc2VjdGlvbi4KKyMKKyMgVGhlcmUgaXMgYW4gTkNSNDEwMyB0ZXJtaW5hbCB0aGF0J3MganVzdCBhIHJlLWJhZGdlZCBXeXNlLTUwLgorIworCisjIFRoZSBmb2xsb3dpbmcgdmVuZG9yLXN1cHBsaWVkIHRlcm1jYXBzIHdlcmUgY2FwdHVyZWQgZnJvbSB0aGUgQm91bmRsZXNzCisjIFRlY2hub2xvZ2llcyBzaXRlLCA4IE1hcmNoIDE5OTguICBJIHJlbW92ZWQgYWxsLXVwcGVyLWNhc2UgbmFtZXMgdGhhdCB3ZXJlCisjIGlkZW50aWNhbCwgZXhjZXB0IGZvciBjYXNlLCB0byBsb3dlci1jYXNlIG9uZXMuICBJIGFsc28gdW5jb21tZW50ZWQgdGhlIGFjc2MKKyMgY2FwYWJpbGl0aWVzLlgKKyMKKyMgVGhlIEludGVjb2xvciBlbXVsYXRpb24gb2YgdGhlIE5DUiAyOTAwLzI2MEMgY29sb3IgdGVybWluYWwgaXMgYmFzaWNhbGx5IGEKKyMgREVDIHZ0MjAwLzMwMCB3aXRoIGNvbG9yIGNhcGFiaWxpdGllcyBhZGRlZC4KK25jcjI2MGludGFufE5DUiBJbnRlY29sb3IgZW11bGF0aW9uIG9mIHRoZSAyOTAwXzI2MEMgd2l0aCBhbiBBTlNJIGtleWJvYXJkLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwlvcD1cRVswbSwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwl1c2U9bmNyMjYwdnQzMDBhbiwKKyMgVGhlIEludGVjb2xvciBlbXVsYXRpb24gb2YgdGhlIE5DUiAyOTAwLzI2MEMgY29sb3IgdGVybWluYWwgaXMgYmFzaWNhbGx5IGEKKyMgREVDIHZ0MjAwLzMwMCB3aXRoIGNvbG9yIGNhcGFiaWxpdGllcyBhZGRlZC4KK25jcjI2MGludHdhbnxOQ1IgSW50ZWNvbG9yIGVtdWxhdGlvbiBvZiB0aGUgMjkwMF8yNjBDIHdpdGggYW4gQU5TSSBrZXlib2FyZCwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJb3A9XEVbMG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJdXNlPW5jcjI2MHZ0MzAwd2FuLAorIyBUaGUgSW50ZWNvbG9yIGVtdWxhdGlvbiBvZiB0aGUgTkNSIDI5MDAvMjYwQyBjb2xvciB0ZXJtaW5hbCBpcyBiYXNpY2FsbHkgYQorIyBERUMgdnQyMDAvMzAwIHdpdGggY29sb3IgY2FwYWJpbGl0aWVzIGFkZGVkLgorbmNyMjYwaW50cHB8TkNSIEludGVjb2xvciBlbXVsYXRpb24gb2YgdGhlIDI5MDBfMjYwQyB3aXRoIGEgUEMrIGtleWJvYXJkLAorCWNvbG9ycyM4LCBwYWlycyM2NCwKKwlvcD1cRVswbSwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKwl1c2U9bmNyMjYwdnQzMDBwcCwKKyMgVGhlIEludGVjb2xvciBlbXVsYXRpb24gb2YgdGhlIE5DUiAyOTAwLzI2MEMgY29sb3IgdGVybWluYWwgaXMgYmFzaWNseSBhCisjIERFQyB2dDIwMC8zMDAgd2l0aCBjb2xvciBjYXBhYmlsaXRpZXMgYWRkZWQuCituY3IyNjBpbnR3cHB8TkNSIEludGVjb2xvciBlbXVsYXRpb24gb2YgdGhlIDI5MDBfMjYwQyB3aXRoIGEgUEMrIGtleWJvYXJkIGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xvcnMjOCwgcGFpcnMjNjQsCisJb3A9XEVbMG0sIHNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sCisJdXNlPW5jcjI2MHZ0MzAwd3BwLAorIyBUaGlzIGRlZmluaXRpb24gZm9yIFZpZXdQb2ludCBzdXBwb3J0cyBzZXZlcmFsIGF0dHJpYnV0ZXMuICBUaGlzIG1lYW5zCisjIHRoYXQgaXQgaGFzIG1hZ2ljIGNvb2tpZXMgKGV4dHJhIHNwYWNlcyB3aGVyZSB0aGUgYXR0cmlidXRlcyBiZWdpbikuCisjIFNvbWUgYXBwbGljYXRpb25zIGRvIG5vdCBmdW5jdGlvbiB3ZWxsIHdpdGggbWFnaWMgY29va2llcy4gIFRoZSBTeXN0ZW0KKyMgQWRtaW5pc3RyYXRvcidzIFNoZWxsIGluIE5DUiBVbml4IFNWUjQgMS4wMyBpcyBvbmUgc3VjaCBhcHBsaWNhdGlvbi4KKyMgSWYgc3VwcG9ydGluZyB2YXJpb3VzIGF0dHJpYnV0ZXMgaXMgbm90IHZpdGFsLCAneG1jIzEnIGFuZCB0aGUgZXh0cmEKKyMgYXR0cmlidXRlcyBjYW4gYmUgcmVtb3ZlZC4KKyMgTWFwcGluZyB0byBBU0NJSSBjaGFyYWN0ZXIgc2V0ICgnYWNzYycgY2FwYWJpbGl0eSkgY2FuIGFsc28gYmUKKyMgcmVzdG9yZWQgaWYgbmVlZGVkLgorbmNyMjYwdnBwcHxOQ1IgMjkwMF8yNjAgdmlld3BvaW50LAorCWFtLCBidywgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgbmxhYiMzMiwgeG1jIzEsCisJYWNzYz0wN2E/aDtqNWszbDJtMW44cVw6dDR1OXY9dzB4NiwgYmVsPV5HLCBibGluaz1cRUcyLAorCWNidD1cRUksIGNpdmlzPVxFYDAsIGNsZWFyPVwwMTQkPDQwPiwgY25vcm09XEVgNSwKKwljcj1cciQ8Mj4sIGN1YjE9XDAxMCQ8Mj4sIGN1ZDE9XG4kPDI+LCBjdWYxPVwwMDYkPDI+LAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDU+LCBjdXUxPVwwMzIkPDI+LAorCWRjaDE9XEVXJDwyPiwgZGltPVxFR3AsIGRsMT1cRWwkPDI+LCBkc2w9XEVgYywgZWQ9XEVrJDwyPiwKKwllbD1cRUskPDI+LCBmc2w9Xk0sIGhvbWU9XDAzNiQ8Mj4sIGh0PV5JLCBodHM9XEUxLAorCWlsMT1cRU0kPDI+LCBpbmQ9XG4kPDI+LCBpbnZpcz1cRUcxLAorCWlzMj1cRWU2XEV+JSQ8MTAwPlxFK1xFYFw6XEVkL1xFYDFcRU9cRWU0XEVjQDBAXEVjQDFBXEVjQjBcRWNDMVxFZTckPDEwMD4sCisJa0RDPVxFbCwga0VORD1cRWssIGtIT009XkEsIGtQUlQ9XEU3LCBrUklUPV5GLCBrYTE9XkEsIGthMz1cRUosCisJa2JzPV5ILCBrYzE9XEVULCBrYzM9XEVKLCBrY3ViMT1eVSwga2N1ZDE9XkosIGtjdWYxPV5GLAorCWtjdXUxPV5aLCBrZGNoMT1cRVcsIGtlbmQ9XEVLLCBrZjE9XkIxXHIsIGtmMTA9XkJcOlxyLAorCWtmMTE9XkI7XHIsIGtmMTI9XkI8XHIsIGtmMTM9XkI9XHIsIGtmMTQ9XkI+XHIsIGtmMTU9XkI/XHIsCisJa2YxNj1eQkBcciwga2YxNz1eQiFcciwga2YxOD1eQiJcciwga2YxOT1eQiNcciwga2YyPV5CMlxyLAorCWtmMjA9XkIkXHIsIGtmMjE9XDAwMiVeTSwga2YyMj1eQiZcciwga2YyMz1eQidcciwKKwlrZjI0PV5CKFxyLCBrZjI1PV5CKVxyLCBrZjI2PV5CKlxyLCBrZjI3PV5CK1xyLAorCWtmMjg9XkJcLFxyLCBrZjI5PV5CLVxyLCBrZjM9XkIzXHIsIGtmMzA9XkIuXHIsIGtmMzE9XkIvXHIsCisJa2YzMj1eQjBcciwga2Y0PV5CNFxyLCBrZjU9XkI1XHIsIGtmNj1eQjZcciwga2Y3PV5CN1xyLAorCWtmOD1eQjhcciwga2Y5PV5COVxyLCBraG9tZT1eQSwga2ljaDE9XEVxLCBrbnA9XEVKLCBrcHA9XEVKLAorCWtwcnQ9XEVQLCBsbD1cMDAxJDw1PiwgbWMwPVxFUCQ8MTAwPiwgbWM0PV5ULCBtYzU9XlIsCisJbXJjdXA9XEV3QCVwMSV7NDh9JSslYyVwMiV7MzJ9JSslYyVwMyV7MzJ9JSslYyQ8NT4sCisJbmVsPVwwMzckPDI+LCByZXY9XEVHNCwgcmk9XEVqJDwyPiwgcm1hY3M9XEVjQjBcRUhcMDAzLAorCXJtaXI9XEVyLCBybXNvPVxFRzAsIHJtdWw9XEVHMCwgcm14b249XEVjMjAsCisJcnMyPVxFZTZcRX4lJDwxMDA+XEUrXEVgXDpcRWQvXEVgMVxFT1xFZTRcRWNAMEBcRWNAMUFcRWNCMFxFY0MxXEVlNyQ8MTAwPiwKKwlzZ3IwPVxFRzBcRUhcMDAzLCBzbWFjcz1cRWNCMVxFSFwwMDIsIHNtaXI9XEVxLAorCXNtc289XEVHNCwgc211bD1cRUc4LCBzbXhvbj1cRWMyMSwgdHNsPVxFRiwKK25jcjI2MHZwd3BwfE5DUiAyOTAwXzI2MCB2aWV3cG9pbnQgd2lkZSBtb2RlLAorCWNvbHMjMTMyLAorCWN1cD1cRWElaSVwMSVkUiVwMiVkQyQ8MzA+LAorCWlzMj1cRWU2XEV+JSQ8MTAwPlxFK1xFYDtcRWQvXEVgMVxFT1xFZTRcRWNAMEBcRWNAMUFcRWNCMFxFY0MxXEVlNyQ8MTAwPiwKKwlyczI9XEVlNlxFfiUkPDEwMD5cRStcRWA7XEVkL1xFYDFcRU9cRWU0XEVjQDBAXEVjQDFBXEVjQjBcRWNDMVxFZTckPDEwMD4sCisJdXNlPW5jcjI2MHZwcHAsCituY3IyNjB2dDEwMGFufE5DUiAyOTAwXzI2MCB2dDEwMCB3aXRoIGFuc2kga3liZCwKKwlhbSwgaHMsIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LCBubGFiIzMyLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29xcXNzdHR1dXZ2d3d4eH5+LCBiZWw9XkcsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbMkpcRVsxOzFIJDwyMD4sIGNub3JtPVxFWz8yNWgsIGNyPVxyJDwxPiwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQkPDU+LAorCWN1YjE9XEVbRCQ8NT4sIGN1ZD1cRVslcDElZEIkPDU+LCBjdWQxPVxFW0IkPDU+LAorCWN1Zj1cRVslcDElZEMkPDU+LCBjdWYxPVxFW0MkPDU+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MTA+LCBjdXU9XEVbJXAxJWRBJDw1PiwKKwljdXUxPVxFW0EkPDU+LCBkY2g9XEVbJXAxJWRQJDw1PiwgZGNoMT1cRVsxUCQ8NT4sCisJZGw9XEVbJXAxJWRNJDw1PiwgZGwxPVxFW00kPDU+LCBkc2w9XEVbMCR+XEVbMSR+LAorCWVjaD1cRVslcDElZFgsIGVkPVxFWzBKJDw1PiwgZWw9XEVbMEskPDM+LCBlbDE9XEVbMUskPDM+LAorCWZzbD1cRVswJH0sIGhvbWU9XEVbSCQ8MT4sIGhwYT1cRVslcDElZEckPDQwPiwgaHQ9XkksCisJaHRzPVxFSCwgaWNoPVxFWyVwMSVkQCQ8NT4sIGlsPVxFWyVwMSVkTCQ8NT4sCisJaWwxPVxFW0wkPDU+LCBpbmQ9XEVEJDw1PiwgaW5kbj1cRVslcDElZEUkPDU+LAorCWludmlzPVxFWzhtLAorCWlzMj1cRVshcFxFWz83OzE5OzY3aFxFWz8xOzM7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtkY2gxPVxFWzN+LCBrZm5kPVxFWzF+LCBraGxwPVxFWzI4fiwga2ljaDE9XEVbMn4sCisJa25wPVxFWzZ+LCBrcHA9XEVbNX4sIGtyZG89XEVbMjl+LCBrc2x0PVxFWzR+LCBuZWw9XEVFJDw1PiwKKwlyYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNJDw1Piwgcm1hY3M9Xk8sIHJtaXI9XEVbNGwsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbMG0sIHJtdWw9XEVbMG0sCisJcnMyPVxFWyFwXEVbPzc7MTk7NjdoXEVbPzE7Mzs0bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOyQ8MjA+LAorCXNncjA9XEVbMG1cMDE3JDwyMD4sIHNtYWNzPV5OLCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzE7N20sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwl0c2w9XEVbMiR+XEVbMSR9LCB2cGE9XEVbJXAxJWRkJDw0MD4sIHVzZT12dDIyMCtrZXlwYWQsCituY3IyNjB2dDEwMHdhbnxOQ1IgMjkwMF8yNjAgdnQxMDAgd2lkZSBtb2RlIGFuc2kga3liZCwKKwljb2xzIzEzMiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDMwPiwKKwlpczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz8xOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCXJzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzE7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJdXNlPW5jcjI2MHZ0MTAwYW4sCituY3IyNjB2dDEwMHBwfE5DUiAyOTAwXzI2MCB2dDEwMCB3aXRoIFBDKyBreWJkLAorCWlzMj1cRVshcFxFWz83OzE5OzY3aFxFWz8xOzM7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJa2ExPVxFW0gsIGthMz1cRU91LCBrYjI9XEVbViwga2MzPVxFW1UsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbNH4sCisJa2VuZD1cRVs1fiwga2hvbWU9XEVbMn4sIGtpY2gxPVxFWzF+LCBrbnA9XEVbNn4sIGtwcD1cRVszfiwKKwlsZjE9cGYxLCBsZjI9cGYyLCBsZjM9cGYzLCBsZjQ9cGY0LCBybWt4PVxFPiwKKwlyczI9XEVbIXBcRVs/NzsxOTs2N2hcRVs/MTszOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCXNta3g9XEU9LCB1c2U9bmNyMjYwdnQxMDBhbiwKK25jcjI2MHZ0MTAwd3BwfE5DUiAyOTAwXzI2MCB2dDEwMCB3aWRlIG1vZGUgcGMrICBreWJkLAorCWNvbHMjMTMyLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MzA+LAorCWlzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzE7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJcnMyPVxFWyFwXEVbPzM7NzsxOTs2N2hcRVs/MTs0bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwl1c2U9bmNyMjYwdnQxMDBwcCwKK25jcjI2MHZ0MjAwYW58TkNSIDI5MDBfMjYwIHZ0MjAwIHdpdGggYW5zaSBreWJkLAorCWFtLCBocywgbWlyLCBtc2dyLCB4ZW5sLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIG5sYWIjMzIsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3Fxc3N0dHV1dnZ3d3h4fn4sIGJlbD1eRywKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVsySlxFWzE7MUgkPDIwPiwgY25vcm09XEVbPzI1aCwgY3I9XHIkPDE+LAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciQ8NT4sIGN1Yj1cRVslcDElZEQkPDU+LAorCWN1YjE9XEVbRCQ8NT4sIGN1ZD1cRVslcDElZEIkPDU+LCBjdWQxPVxFW0IkPDU+LAorCWN1Zj1cRVslcDElZEMkPDU+LCBjdWYxPVxFW0MkPDU+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MTA+LCBjdXU9XEVbJXAxJWRBJDw1PiwKKwljdXUxPVxFW0EkPDU+LCBkY2g9XEVbJXAxJWRQJDw1PiwgZGNoMT1cRVsxUCQ8NT4sCisJZGw9XEVbJXAxJWRNJDw1PiwgZGwxPVxFW00kPDU+LCBkc2w9XEVbMCR+XEVbMSR+LAorCWVjaD1cRVslcDElZFgkPDU+LCBlZD1cRVswSiwgZWw9XEVbMEskPDU+LCBlbDE9XEVbMUskPDU+LAorCWZzbD1cRVswJH0sIGhvbWU9XEVbSCwgaHBhPVxFWyVwMSVkRyQ8NDA+LCBodD1eSSwgaHRzPVxFSCwKKwlpY2g9XEVbJXAxJWRAJDw1PiwgaWw9XEVbJXAxJWRMJDw1PiwgaWwxPVxFW0wkPDU+LAorCWluZD1cRUQkPDU+LCBpbmRuPVxFWyVwMSVkRSQ8NT4sIGludmlzPVxFWzhtLAorCWlzMj1cRVshcFxFWz83OzE5OzY3aFxFWz8xOzM7NGxcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtkY2gxPVxFWzN+LCBrZjA9XEVPeSwga2YxMD1cRVsyMX4sIGtmMTE9XEVbMjN+LAorCWtmMTI9XEVbMjR+LCBrZjEzPVxFWzI1fiwga2YxND1cRVsyNn4sIGtmMTU9XEVbMjh+LAorCWtmMTY9XEVbMjl+LCBrZjE3PVxFWzMxfiwga2YxOD1cRVszMn4sIGtmMTk9XEVbMzN+LAorCWtmMj1cRU9RLCBrZjIwPVxFWzM0fiwga2YyMT1cRVszMX4sIGtmMjI9XEVbMzJ+LAorCWtmMjM9XEVbMzN+LCBrZjI0PVxFWzM0fiwga2YyNT1cRVszNX4sIGtmMjY9XEVbMX4sCisJa2YyNz1cRVsyfiwga2YyOD1cRVszfiwga2YyOT1cRVs0fiwga2YzPVxFT1IsIGtmMzA9XEVbNX4sCisJa2YzMT1cRVs2fiwga2YzMj1cRVs3fiwga2YzMz1cRVs4fiwga2YzND1cRVs5fiwKKwlrZjM1PVxFWzEwfiwga2Y0PVxFT1MsIGtmNT1cRVtNLCBrZjY9XEVbMTd+LCBrZjc9XEVbMTh+LAorCWtmOD1cRVsxOX4sIGtmOT1cRVsyMH4sIGtmbmQ9XEVbMX4sIGtobHA9XEVbMjh+LAorCWtpY2gxPVxFWzJ+LCBrbnA9XEVbNn4sIGtwcD1cRVs1fiwga3Jkbz1cRVsyOX4sIGtzbHQ9XEVbNH4sCisJbWMwPVxFW2ksIG1jND1cRVs0aSwgbWM1PVxFWzVpLCBuZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwKKwlyaT1cRU0kPDU+LCBybWFjcz1cMDE3JDwyMD4sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sCisJcnMyPVxFWyFwXEVbPzc7MTk7NjdoXEVbPzE7Mzs0bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOyQ8MjA+LAorCXNncjA9XEVbMG1cMDE3JDwyMD4sIHNtYWNzPVwwMTYkPDIwPiwgc21hbT1cRVs/N2gsCisJc21pcj1cRVs0aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEVbMiR+XEVbMSR9LCB2cGE9XEVbJXAxJWRkJDw0MD4sCisJdXNlPXZ0MjIwK2tleXBhZCwKK25jcjI2MHZ0MjAwd2FufE5DUiAyOTAwXzI2MCB2dDIwMCB3aWRlIG1vZGUgYW5zaSBreWJkLAorCWNvbHMjMTMyLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MzA+LAorCWlzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIJDwyMDA+LAorCXJzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIJDwyMDA+LAorCXVzZT1uY3IyNjB2dDIwMGFuLAorbmNyMjYwdnQyMDBwcHxOQ1IgMjkwMF8yNjAgdnQyMDAgd2l0aCBwYysga3liZCwKKwlrYTE9XEVbSCwga2EzPVxFT3UsIGtiMj1cRVtWLCBrYzM9XEVbVSwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVs0fiwKKwlrZW5kPVxFWzF+LCBraG9tZT1cRVtILCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJbGYxPXBmMSwgbGYyPXBmMiwgbGYzPXBmMywgbGY0PXBmNCwgcm1reD1cRT4sIHNta3g9XEU9LAorCXVzZT1uY3IyNjB2dDIwMGFuLAorbmNyMjYwdnQyMDB3cHB8TkNSIDI5MDBfMjYwIHZ0MjAwIHdpZGUgbW9kZSBwYysgIGt5YmQsCisJY29scyMxMzIsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwzMD4sCisJaXMyPVxFWyFwXEVbPzM7NzsxOTs2N2hcRVs/MTs0bFxFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlyczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz8xOzRsXEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCXVzZT1uY3IyNjB2dDIwMHBwLAorbmNyMjYwdnQzMDBhbnxOQ1IgMjkwMF8yNjAgdnQzMDAgd2l0aCBhbnNpIGt5YmQsCisJYW0sIGhzLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgbmxhYiMzMiwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcXFzc3R0dXV2dnd3eHh+fiwgYmVsPV5HLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFWzJKXEVbMTsxSCQ8MjA+LCBjbm9ybT1cRVs/MjVoLCBjcj1cciQ8MT4sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyJDw1PiwgY3ViPVxFWyVwMSVkRCQ8NT4sCisJY3ViMT1cRVtEJDw1PiwgY3VkPVxFWyVwMSVkQiQ8NT4sIGN1ZDE9XEVbQiQ8NT4sCisJY3VmPVxFWyVwMSVkQyQ8NT4sIGN1ZjE9XEVbQyQ8NT4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDwxMD4sIGN1dT1cRVslcDElZEEkPDU+LAorCWN1dTE9XEVbQSQ8NT4sIGRjaD1cRVslcDElZFAkPDU+LCBkY2gxPVxFWzFQJDw1PiwKKwlkbD1cRVslcDElZE0kPDU+LCBkbDE9XEVbTSQ8NT4sIGRzbD1cRVswJH5cRVsxJH4sCisJZWNoPVxFWyVwMSVkWCQ8NT4sIGVkPVxFWzBKLCBlbD1cRVswSyQ8NT4sIGVsMT1cRVsxSyQ8NT4sCisJZnNsPVxFWzAkfSwgaG9tZT1cRVtILCBocGE9XEVbJXAxJWRHJDw0MD4sIGh0PV5JLCBodHM9XEVILAorCWljaD1cRVslcDElZEAkPDU+LCBpbD1cRVslcDElZEwkPDU+LCBpbDE9XEVbTCQ8NT4sCisJaW5kPVxFRCQ8NT4sIGluZG49XEVbJXAxJWRFJDw1PiwgaW52aXM9XEVbOG0sCisJaXMyPVxFWyFwXEVbPzc7MTk7NjdoXEVbPzE7Mzs0bFxFWzE7MCV3XEUoQlxFKTBcMDE3XEVbMkpcRVsxOzFIXEU+JDwyMDA+LAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZGNoMT1cRVszfiwga2YwPVxFT3ksIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwKKwlrZjEyPVxFWzI0fiwga2YxMz1cRVsyNX4sIGtmMTQ9XEVbMjZ+LCBrZjE1PVxFWzI4fiwKKwlrZjE2PVxFWzI5fiwga2YxNz1cRVszMX4sIGtmMTg9XEVbMzJ+LCBrZjE5PVxFWzMzfiwKKwlrZjIwPVxFWzM0fiwga2YyMT1cRVszMX4sIGtmMjI9XEVbMzJ+LCBrZjIzPVxFWzMzfiwKKwlrZjI0PVxFWzM0fiwga2YyNT1cRVszNX4sIGtmMjY9XEVbMX4sIGtmMjc9XEVbMn4sCisJa2YyOD1cRVszfiwga2YyOT1cRVs0fiwga2YzMD1cRVs1fiwga2YzMT1cRVs2fiwga2YzMj1cRVs3fiwKKwlrZjMzPVxFWzh+LCBrZjM0PVxFWzl+LCBrZjM1PVxFWzEwfiwga2Y1PVxFW00sIGtmNj1cRVsxN34sCisJa2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2ZuZD1cRVsxfiwKKwlraGxwPVxFWzI4fiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWtyZG89XEVbMjl+LCBrc2x0PVxFWzR+LCBtYzA9XEVbaSwgbWM0PVxFWzRpLCBtYzU9XEVbNWksCisJbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSQ8NT4sIHJtYWNzPVwwMTckPDIwPiwKKwlybWFtPVxFWz83bCwgcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbMjdtLAorCXJtdWw9XEVbMjRtLAorCXJzMj1cRVshcFxFWz83OzE5OzY3aFxFWz8xOzM7NGxcRVsxOzAld1xFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOyQ8MjA+LAorCXNncjA9XEVbMG1cMDE3JDwyMD4sIHNtYWNzPVwwMTYkPDIwPiwgc21hbT1cRVs/N2gsCisJc21pcj1cRVs0aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCisJdGJjPVxFWzNnLCB0c2w9XEVbMiR+XEVbMSR9LCB2cGE9XEVbJXAxJWRkJDw0MD4sCisJdXNlPXZ0MjIwK2tleXBhZCwKK25jcjI2MHZ0MzAwd2FufE5DUiAyOTAwXzI2MCB2dDMwMCB3aWRlIG1vZGUgYW5zaSBreWJkLAorCWNvbHMjMTMyLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MzA+LAorCWlzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzRsXEVbMTswJXdcRShCXEUpMFwwMTdcRVsySlxFWzE7MUgkPDIwMD4sCisJcnMyPVxFWyFwXEVbPzM7NzsxOTs2N2hcRVs/NGxcRVsxOzAld1xFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSCQ8MjAwPiwKKwl1c2U9bmNyMjYwdnQzMDBhbiwKK25jcjI2MHZ0MzAwcHB8TkNSIDI5MDBfMjYwIHZ0MzAwIHdpdGggcGMrIGt5YmQsCisJa2ExPVxFW0gsIGthMz1cRU91LCBrYjI9XEVbViwga2MzPVxFW1UsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbNH4sCisJa2VuZD1cRVsxfiwga2hvbWU9XEVbSCwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWxmMT1wZjEsIGxmMj1wZjIsIGxmMz1wZjMsIGxmND1wZjQsIHJta3g9XEU+LCBzbWt4PVxFPSwKKwl1c2U9bmNyMjYwdnQzMDBhbiwKK05DUjI2MFZUMzAwV1BQfG5jcjI2MHZ0MzAwd3BwfE5DUiAyOTAwXzI2MCB2dDMwMCB3aWRlIG1vZGUgcGMrICBreWJkLAorCWNvbHMjMTMyLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8MzA+LAorCWlzMj1cRVshcFxFWz8zOzc7MTk7NjdoXEVbPzE7NGxcRVsxOzAld1xFKEJcRSkwXDAxN1xFWzJKXEVbMTsxSFxFPiQ8MjAwPiwKKwlyczI9XEVbIXBcRVs/Mzs3OzE5OzY3aFxFWz8xOzRsXEVbMTswJXdcRShCXEUpMFwwMTdcRVsySlxFWzE7MUhcRT4kPDIwMD4sCisJdXNlPW5jcjI2MHZ0MzAwcHAsCisjIFRoaXMgdGVybWluZm8gZmlsZSBjb250YWlucyBjb2xvciBjYXBhYmlsaXRpZXMgZm9yIHRoZSBXeXNlMzI1IGVtdWxhdGlvbiBvZgorIyB0aGUgTkNSIDI5MDAvMjYwQyBjb2xvciB0ZXJtaW5hbC4gIEJlY2F1c2Ugb2YgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29tbWFuZAorIyAoZXNjYXBlIHNlcXVlbmNlKSB1c2VkIHRvIHNldCBjb2xvciBhdHRyaWJ1dGVzLCBvbmUgb2YgdGhlIGZvcmUvYmFja2dyb3VuZAorIyBjb2xvcnMgbXVzdCBiZSBwcmVzZXQgdG8gYSBnaXZlbiB2YWx1ZS4gSSBoYXZlIHNldCB0aGUgYmFja2dyb3VuZCBjb2xvciB0bworIyBibGFjay4gIFRoZSB1c2VyIGNhbiBjaGFuZ2UgdGhpcyBzZXR1cCBieSBhbHRlcmluZyB0aGUgbGFzdCBzZWN0aW9uIG9mIHRoZQorIyAnc2V0ZicgZGVmaW5pdGlvbi4gIFRoZSBlc2NhcGUgc2VxdWVuY2UgdG8gc2V0IGNvbG9yIGF0dHJpYnV0ZXMgaXMKKyMJCUVTQyBkIHkgPGZvcmVncm91bmRfY29sb3I+IDxiYWNrZ3JvdW5kX2NvbG9yPiAxCisjIEluIGFkZGl0aW9uLCB0aGUgYmFja2dyb3VuZCBjb2xvciBjYW4gYmUgY2hhbmdlZCB0aHJvdWdoIHRoZSBkZXNrIGFjY2Vzc29yaWVzLgorIyBUaGUgY2FwYWJsaXRpeSAnb3AnIHNldHMgY29sb3JzIHRvIGdyZWVuIG9uIGJsYWNrIChkZWZhdWx0IGNvbWJpbmF0aW9uKS4KKyMKKyMgTk9URTogIFRoZSBOQ1IgVW5peCBTeXN0ZW0gQWRtaW5pc3RyYXRvcidzIFNoZWxsIHdpbGwgbm90IGZ1bmN0aW9uIHByb3Blcmx5CisjIAkgICAgaWYgdGhlICdwYWlycycgY2FwYWJpbGl0eSBpcyBkZWZpbmVkLiBVbi1Db21tZW50IHRoZSAncGFpcnMnCisjCSAgICBjYXBhYmlsaXR5IGFuZCByZWNvbXBpbGUgaWYgeW91IHdpc2ggdG8gaGF2ZSBpdCBpbmNsdWRlZC4KKyMKK25jcjI2MHd5MzI1cHB8TkNSIDI5MDBfMjYwIHd5c2UgMzI1LAorCWFtLCBidywgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xvcnMjMTYsIGNvbHMjODAsIGxpbmVzIzI0LCBuY3YjMzMsIG5sYWIjMzIsCisJYWNzYz0wN2E/aDtqNWszbDJtMW44cVw6dDR1OXY9dzB4NiwgYmVsPV5HLCBibGluaz1cRUcyLAorCWNidD1cRUksIGNpdmlzPVxFYDAsIGNsZWFyPVxFKiQ8MTA+LCBjbm9ybT1cRWAxLCBjcj1eTSwKKwljdWIxPVwwMTAkPDU+LCBjdWQxPVxuJDw1PiwgY3VmMT1cMDE0JDw1PiwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwxMD4sIGN1dTE9XDAxMyQ8NT4sCisJY3Z2aXM9XEVgNSwgZGNoMT1cRVckPDUwPiwgZGwxPVxFUiQ8NT4sIGRzbD1cRWBjLAorCWVkPVxFeSQ8NT4sIGVsPVxFdCQ8NT4sIGZzbD1eTSwgaG9tZT1cMDM2JDw1PiwgaHQ9XkksCisJaHRzPVxFMSwgaWwxPVxFRSQ8NT4sIGluZD1cbiQ8NT4sIGludmlzPVxFRzEsCisJaXMyPVxFZTZcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgXDpcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDEwMD4sCisJa0RDPVxFUiwga0VORD1cRVksIGtIT009XEV7LCBrTlhUPVxFSywga1BSVD1cRTcsIGtQUlY9XEVKLAorCWtSSVQ9XkwsIGthMT1eXiwga2IyPVxFSiwga2JzPV5ILCBrYzE9XEVULCBrYzM9XEVLLCBrY2J0PVxFSSwKKwlrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLCBrZW5kPVxFVCwKKwlrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTE9XkFKXHIsIGtmMTI9XkFLXHIsIGtmMTM9XkFMXHIsCisJa2YxND1eQU1cciwga2YxNT1eQU5cciwga2YxNj1eQU9cciwga2YxNz1eQWBcciwga2YxOD1eQWFcciwKKwlrZjE5PV5BYlxyLCBrZjI9XkFBXHIsIGtmMjA9XkFjXHIsIGtmMjE9XkFkXHIsIGtmMjI9XkFlXHIsCisJa2YyMz1eQWZcciwga2YyND1eQWdcciwga2YyNT1eQWhcciwga2YyNj1eQWlcciwga2YyNz1eQWpcciwKKwlrZjI4PV5Ba1xyLCBrZjI5PV5BbFxyLCBrZjM9XkFCXHIsIGtmMzA9XkFtXHIsIGtmMzE9XkFuXHIsCisJa2YzMj1eQW9cciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwga2ljaDE9XEVxLCBrbnA9XEVLLCBrcHA9XEVKLAorCWtwcnQ9XEVQLCBtYzA9XEVQLCBtYzQ9XlQsIG1jNT1eUiwKKwltcmN1cD1cRXdAJXAxJXs0OH0lKyVjJXAyJXszMn0lKyVjJXAzJXszMn0lKyVjJDwxMD4sCisJbmVsPVwwMzckPDU+LCByZXY9XEVHNCwgcmk9XEVqJDw1Piwgcm1hY3M9XEVIXDAwM1xFY0IwLAorCXJtYW09XEVkLiwgcm1pcj1cRXIsIHJtc289XEVHMCwgcm11bD1cRUcwLCBybXhvbj1cRWMyMCwKKwlyczI9XEVlNlxFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWBcOlxFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwlzZXRiPVxzLAorCXNldGY9JT8lcDElezB9JT0ldCV7NDl9JWUlcDElezF9JT0ldCV7NTB9JWUlcDElezJ9JT0ldCV7NTF9JWUlcDElezN9JT0ldCV7NTJ9JWUlcDElezR9JT0ldCV7NTN9JWUlcDElezV9JT0ldCV7NTR9JWUlcDElezZ9JT0ldCV7NTV9JWUlcDElezd9JT0ldCV7NjR9JWUlcDElezh9JT0ldCV7NTd9JWUlcDElezl9JT0ldCV7NTh9JWUlcDElezEwfSU9JXQlezU5fSVlJXAxJXsxMX0lPSV0JXs2MH0lZSVwMSV7MTJ9JT0ldCV7NjF9JWUlcDElezEzfSU9JXQlezYyfSVlJXAxJXsxNH0lPSV0JXs2M30lZSVwMSV7MTV9JT0ldCV7NTZ9JTtcRWR5JWMxMSQ8MTAwPiwKKwlzZ3IwPVxFRzBcRWNCMFxFY0QkPDE1Piwgc21hY3M9XEVIXDAwMlxFY0IxLCBzbWFtPVxFZC8sCisJc21pcj1cRXEsIHNtc289XEVHdCwgc211bD1cRUc4LCBzbXhvbj1cRWMyMSwgdGJjPVxFMCwKKwl0c2w9XEVGLAorbmNyMjYwd3kzMjV3cHB8TkNSIDI5MDBfMjYwIHd5c2UgMzI1IHdpZGUgbW9kZSwKKwljb2xzIzEzMiwKKwljdXA9XEVhJWklcDElZFIlcDIlZEMkPDMwPiwKKwlpczI9XEVlNlxFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWA7XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCXJzMj1cRWU2XEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYDtcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDEwMD4sCisJdXNlPW5jcjI2MHd5MzI1cHAsCisjIFRoaXMgZGVmaW5pdGlvbiBmb3IgV3lzZSAzNTAgc3VwcG9ydHMgc2V2ZXJhbCBhdHRyaWJ1dGVzLiAgVGhpcyBtZWFucworIyB0aGF0IGl0IGhhcyBtYWdpYyBjb29raWVzIChleHRyYSBzcGFjZXMgd2hlcmUgdGhlIGF0dHJpYnV0ZXMgYmVnaW4pLgorIyBTb21lIGFwcGxpY2F0aW9ucyBkbyBub3QgZnVuY3Rpb24gd2VsbCB3aXRoIG1hZ2ljIGNvb2tpZXMuICBUaGUgU3lzdGVtCisjIEFkbWluaXN0cmF0b3IncyBTaGVsbCBpbiBOQ1IgVW5peCBTVlI0IDEuMDMgaXMgb25lIHN1Y2ggYXBwbGljYXRpb24uCisjIElmIHN1cHBvcnRpbmcgdmFyaW91cyBhdHRyaWJ1dGVzIGlzIG5vdCB2aXRhbCwgJ3htYyMxJyBhbmQgdGhlIGV4dHJhCisjIGF0dHJpYnV0ZXMgY2FuIGJlIHJlbW92ZWQuCisjIE1hcHBpbmcgdG8gQVNDSUkgY2hhcmFjdGVyIHNldCAoJ2Fjc2MnIGNhcGFiaWxpdHkpIGNhbiBhbHNvIGJlCisjIHJlc3RvcmVkIGlmIG5lZWRlZC4KKyMgSW4gYWRkaXRpb24sIGNvbG9yIGNhcGFiaWxpdGllcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhpcyBmaWxlLiAgVGhlIGRyYXdiYWNrLAorIyBob3dldmVyLCBpcyB0aGF0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGhhcyB0byBiZSBibGFjay4gIFRoZSBmb3JlZ3JvdW5kIGNvbG9ycworIyBhcmUgbnVtYmVyZWQgMCB0aHJvdWdoIDE1LgorIworIyBOT1RFOiAgVGhlIE5DUiBVbml4IFN5c3RlbSBBZG1pbmlzdHJhdG9yJ3MgU2hlbGwgZG9lcyBub3QgZnVuY3Rpb24gcHJvcGVybHkKKyMgCSAgICB3aXRoIHRoZSAncGFpcnMnIGNhcGFiaWxpdHkgZGVmaW5lZCBhcyBiZWxvdy4gIElmIHlvdSB3aXNoIHRvCisjCSAgICBoYXZlIGl0IGluY2x1ZGVkLCBVbi1jb21tZW50IGl0IGFuZCByZWNvbXBpbGUgKHVzaW5nICd0aWMnKS4KKyMKK25jcjI2MHd5MzUwcHB8TkNSIDI5MDBfMjYwIHd5c2UgMzUwLAorCWFtLCBidywgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xvcnMjMTYsIGNvbHMjODAsIGxpbmVzIzI0LCBuY3YjMzMsIG5sYWIjMzIsIHBhaXJzIzE2LCB4bWMjMSwKKwlhY3NjPTA3YT9oO2o1azNsMm0xbjhxXDp0NHU5dj13MHg2LCBiZWw9XkcsIGJsaW5rPVxFRzIsCisJY2J0PVxFSSwgY2l2aXM9XEVgMCwgY2xlYXI9XEUrJDwyMD4sIGNub3JtPVxFYDEsIGNyPV5NLAorCWN1YjE9XDAxMCQ8NT4sIGN1ZDE9XG4kPDU+LCBjdWYxPVwwMTQkPDU+LAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDQwPiwgY3V1MT1cMDEzJDw1PiwKKwljdnZpcz1cRWA1LCBkY2gxPVxFVyQ8NTA+LCBkaW09XEVHcCwgZGwxPVxFUiQ8NT4sIGRzbD1cRWBjLAorCWVkPVxFeSQ8NT4sIGVsPVxFdCQ8NT4sIGZzbD1eTSwgaG9tZT1cMDM2JDwxMD4sIGh0PV5JLAorCWh0cz1cRTEsIGlsMT1cRUUkPDU+LCBpbmQ9XG4kPDU+LCBpbnZpcz1cRUcxLAorCWlzMj1cRWU2XEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYFw6XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCWtEQz1cRVIsIGtFTkQ9XEVZLCBrSE9NPVxFeywga1BSVD1cRTcsIGtSSVQ9XkwsIGthMT1eXiwga2JzPV5ILAorCWtjMT1cRVQsIGtjMz1cRUssIGtjYnQ9XEVJLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZGNoMT1cRVcsIGtlbmQ9XEVULCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsCisJa2YxMT1eQUpcciwga2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwKKwlrZjE2PV5BT1xyLCBrZjE3PV5BYFxyLCBrZjE4PV5BYVxyLCBrZjE5PV5BYlxyLCBrZjI9XkFBXHIsCisJa2YyMD1eQWNcciwga2YyMT1eQWRcciwga2YyMj1eQWVcciwga2YyMz1eQWZcciwga2YyND1eQWdcciwKKwlrZjI1PV5BaFxyLCBrZjI2PV5BaVxyLCBrZjI3PV5BalxyLCBrZjI4PV5Ba1xyLCBrZjI5PV5BbFxyLAorCWtmMz1eQUJcciwga2YzMD1eQW1cciwga2YzMT1eQW5cciwga2YzMj1eQW9cciwga2Y0PV5BQ1xyLAorCWtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLAorCWtob21lPV5eLCBraWNoMT1cRXEsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLAorCW1jMD1cRVAkPDEwPiwgbWM0PV5ULCBtYzU9XlIsCisJbXJjdXA9XEV3QCVwMSV7NDh9JSslYyVwMiV7MzJ9JSslYyVwMyV7MzJ9JSslYyQ8MjA+LAorCW5lbD1cMDM3JDw1PiwgcmV2PVxFRzQsIHJpPVxFaiQ8NT4sIHJtYWNzPVxFSFwwMDNcRWNCMCwKKwlybWFtPVxFZC4sIHJtaXI9XEVyLCBybXNvPVxFRzAsIHJtdWw9XEVHMCwgcm14b249XEVjMjAsCisJcnMyPVxFZTZcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgXDpcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDEwMD4sCisJc2V0Yj1ccywKKwlzZXRmPSU/JXAxJXswfSU9JXQlezQ5fSVlJXAxJXsxfSU9JXQlezUwfSVlJXAxJXsyfSU9JXQlezUxfSVlJXAxJXszfSU9JXQlezUyfSVlJXAxJXs0fSU9JXQlezUzfSVlJXAxJXs1fSU9JXQlezU0fSVlJXAxJXs2fSU9JXQlezU1fSVlJXAxJXs3fSU9JXQlezEwMn0lZSVwMSV7OH0lPSV0JXs5N30lZSVwMSV7OX0lPSV0JXs5OH0lZSVwMSV7MTB9JT0ldCV7OTl9JWUlcDElezExfSU9JXQlezEwMX0lZSVwMSV7MTJ9JT0ldCV7MTA2fSVlJXAxJXsxM30lPSV0JXsxMTB9JWUlcDElezE0fSU9JXQlezExMX0lZSVwMSV7MTV9JT0ldCV7NTZ9JTtcRW0wJWMkPDEwMD4sCisJc2dyMD1cRUcwXEVIXDAwM1xFY0QsIHNtYWNzPVxFSFwwMDJcRWNCMSwgc21hbT1cRWQvLAorCXNtaXI9XEVxLCBzbXNvPVxFR3QsIHNtdWw9XEVHOCwgc214b249XEVjMjEsIHRiYz1cRTAsCisJdHNsPVxFRiwKK25jcjI2MHd5MzUwd3BwfE5DUiAyOTAwXzI2MCB3eXNlIDM1MCB3aWRlIG1vZGUsCisJY29scyMxMzIsCisJY3VwPVxFYSVpJXAxJWRSJXAyJWRDJDwzMD4sCisJaXMyPVxFZTZcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgO1xFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MjAwPiwKKwlyczI9XEVlNlxFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWA7XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwyMDA+LAorCXVzZT1uY3IyNjB3eTM1MHBwLAorIyBUaGlzIGRlZmluaXRpb24gZm9yIFd5c2UgNTArIHN1cHBvcnRzIHNldmVyYWwgYXR0cmlidXRlcy4gIFRoaXMgbWVhbnMKKyMgdGhhdCBpdCBoYXMgbWFnaWMgY29va2llcyAoZXh0cmEgc3BhY2VzIHdoZXJlIHRoZSBhdHRyaWJ1dGVzIGJlZ2luKS4KKyMgU29tZSBhcHBsaWNhdGlvbnMgZG8gbm90IGZ1bmN0aW9uIHdlbGwgd2l0aCBtYWdpYyBjb29raWVzLiAgVGhlIFN5c3RlbQorIyBBZG1pbmlzdHJhdG9yJ3MgU2hlbGwgaW4gTkNSIFVuaXggU1ZSNCAxLjAzIGlzIG9uZSBzdWNoIGFwcGxpY2F0aW9uLgorIyBJZiBzdXBwb3J0aW5nIHZhcmlvdXMgYXR0cmlidXRlcyBpcyBub3Qgdml0YWwsICd4bWMjMScgYW5kIHRoZSBleHRyYQorIyBhdHRyaWJ1dGVzIGNhbiBiZSByZW1vdmVkLgorIyBNYXBwaW5nIHRvIEFTQ0lJIGNoYXJhY3RlciBzZXQgKCdhY3NjJyBjYXBhYmlsaXR5KSBjYW4gYWxzbyBiZQorIyByZXN0b3JlZCBpZiBuZWVkZWQuCisjIChuY3IyNjB3eTUwK3BwOiBvcmlnaW5hbGx5IGNvbnRhaW5lZCBjb21tZW50ZWQtb3V0CisjIDxhY3NjPWo1azNsMm0xbjhxOnQ0dTl2PXcweDY+LCBhcyB3ZWxsIGFzIHRoZSBjb21tZW50ZWQtb3V0IG9uZSB0aGVyZSAtLSBlc3IpCituY3IyNjB3eTUwK3BwfE5DUiAyOTAwXzI2MCB3eXNlIDUwKywKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIG5sYWIjMzIsIHhtYyMxLAorCWFjc2M9MHdhX2hbanVrc2xybXFueHF6dHR1eXZdd3B4diwgYmVsPV5HLCBibGluaz1cRUcyLAorCWNidD1cRUkkPDU+LCBjaXZpcz1cRWAwLCBjbGVhcj1cRSskPDIwPiwgY25vcm09XEVgMSwgY3I9Xk0sCisJY3ViMT1cMDEwJDw1PiwgY3VkMT1cbiQ8NT4sIGN1ZjE9XDAxNCQ8NT4sCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8MzA+LCBjdXUxPVwwMTMkPDU+LAorCWN2dmlzPVxFYDUsIGRjaDE9XEVXJDw1MD4sIGRpbT1cRUdwLCBkbDE9XEVSJDw1PiwgZHNsPVxFYGMsCisJZWQ9XEVZJDw1PiwgZWw9XEVUJDw1PiwgZnNsPV5NLCBob21lPVwwMzYkPDEwPiwKKwlodD1cMDExJDw1PiwgaHRzPVxFMSQ8NT4sIGlsMT1cRUUkPDU+LCBpbmQ9XG4kPDU+LAorCWludmlzPVxFRzEsCisJaXMyPVxFZTZcRX4iJDwxMDA+XEUrXEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYFw6XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCWtEQz1cRVIsIGtFTkQ9XEVZLCBrSE9NPVxFeywga1BSVD1cRTcsIGtSSVQ9XkwsIGthMT1eXiwga2JzPV5ILAorCWtjMT1cRVQsIGtjMz1cRUssIGtjYnQ9XEVJLCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLAorCWtjdXUxPV5LLCBrZGNoMT1cRVcsIGtlbmQ9XEVULCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsCisJa2YxMT1eQUpcciwga2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwKKwlrZjE2PV5BT1xyLCBrZjE3PV5BYFxyLCBrZjE4PV5BYVxyLCBrZjE5PV5BYlxyLCBrZjI9XkFBXHIsCisJa2YyMD1eQWNcciwga2YyMT1eQWRcciwga2YyMj1eQWVcciwga2YyMz1eQWZcciwga2YyND1eQWdcciwKKwlrZjI1PV5BaFxyLCBrZjI2PV5BaVxyLCBrZjI3PV5BalxyLCBrZjI4PV5Ba1xyLCBrZjI5PV5BbFxyLAorCWtmMz1eQUJcciwga2YzMD1eQW1cciwga2YzMT1eQW5cciwga2YzMj1eQW9cciwga2Y0PV5BQ1xyLAorCWtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLAorCWtob21lPV5eLCBraWNoMT1cRXEsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLAorCW1jMD1cRVAkPDEwPiwgbWM0PV5ULCBtYzU9XlIsCisJbXJjdXA9XEV3QCVwMSV7NDh9JSslYyVwMiV7MzJ9JSslYyVwMyV7MzJ9JSslYyQ8MTA+LAorCW5lbD1cMDM3JDw1PiwgcmV2PVxFRzQsIHJpPVxFaiQ8NT4sIHJtYWNzPVxFSF5DLCBybWFtPVxFZC4sCisJcm1pcj1cRXIsIHJtc289XEVHMCwgcm11bD1cRUcwLCBybXhvbj1cRWMyMCwKKwlyczI9XEVlNlxFfiIkPDEwMD5cRStcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgXDpcRWBAXEV+IVxFIlxFZTRcRXhAXEVgOVxFZTckPDEwMD4sCisJc2dyMD1cRUcwXEVIXDAwMyQ8MTU+LCBzbWFjcz1cRUheQiwgc21hbT1cRWQvLCBzbWlyPVxFcSwKKwlzbXNvPVxFR3QsIHNtdWw9XEVHOCwgc214b249XEVjMjEsIHRiYz1cRTAkPDU+LCB0c2w9XEVGLAorbmNyMjYwd3k1MCt3cHB8TkNSIDI5MDBfMjYwIHd5c2UgNTArIHdpZGUgbW9kZSwKKwljb2xzIzEzMiwKKwljdXA9XEVhJWklcDElZFIlcDIlZEMkPDMwPiwKKwlpczI9XEVlNlxFfiIkPDEwMD5cRStcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgO1xFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MjAwPiwKKwlyczI9XEVlNlxFfiIkPDEwMD5cRStcRWQvXEVlMVxFZCpcRXJcRU9cRWAxXEVgO1xFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MjAwPiwKKwl1c2U9bmNyMjYwd3k1MCtwcCwKK25jcjI2MHd5NjBwcHxOQ1IgMjkwMF8yNjAgd3lzZSA2MCwKKwlhbSwgYncsIGhzLCBrbSwgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsIG5sYWIjMzIsCisJYWNzYz0wN2E/aDtqNWszbDJtMW44cVw6dDR1OXY9dzB4NiwgYmVsPV5HLCBibGluaz1cRUcyLAorCWNidD1cRUkkPDE1PiwgY2l2aXM9XEVgMCwgY2xlYXI9XEUqJDwxMDA+LCBjbm9ybT1cRWAxLAorCWNyPV5NLCBjdWIxPVwwMTAkPDU+LCBjdWQxPVxuJDw1PiwgY3VmMT1cMDE0JDw1PiwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwxMD4sIGN1dTE9XDAxMyQ8NT4sCisJY3Z2aXM9XEVgNSwgZGNoMT1cRVckPDUwPiwgZGwxPVxFUiQ8NT4sIGRzbD1cRWBjLAorCWVkPVxFeSQ8NT4sIGVsPVxFdCQ8NT4sIGZzbD1eTSwgaG9tZT1cMDM2JDwyNT4sCisJaHQ9XDAxMSQ8MTU+LCBodHM9XEUxJDwxNT4sIGlsMT1cRUUkPDU+LCBpbmQ9XG4kPDU+LAorCWludmlzPVxFRzEsCisJaXMyPVxFZTZcRX40JDwxMDA+XEUrXEVkL1xFZTFcRWQqXEVyXEVPXEVgMVxFYFw6XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCWtEQz1cRVIsIGtFTkQ9XEVZLCBrSE9NPVxFeywga05YVD1cRUssIGtQUlQ9XEU3LCBrUFJWPVxFSiwKKwlrUklUPV5MLCBrYTE9Xl4sIGtiMj1cRUosIGticz1eSCwga2MxPVxFVCwga2MzPVxFSywKKwlrY2J0PVxFSSQ8MTU+LCBrY3ViMT1eSCwga2N1ZDE9XkosIGtjdWYxPV5MLCBrY3V1MT1eSywKKwlrZGNoMT1cRVcsIGtlbmQ9XEVULCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTE9XkFKXHIsCisJa2YxMj1eQUtcciwga2YxMz1eQUxcciwga2YxND1eQU1cciwga2YxNT1eQU5cciwga2YxNj1eQU9cciwKKwlrZjE3PV5BYFxyLCBrZjE4PV5BYVxyLCBrZjE5PV5BYlxyLCBrZjI9XkFBXHIsIGtmMjA9XkFjXHIsCisJa2YyMT1eQWRcciwga2YyMj1eQWVcciwga2YyMz1eQWZcciwga2YyND1eQWdcciwga2YyNT1eQWhcciwKKwlrZjI2PV5BaVxyLCBrZjI3PV5BalxyLCBrZjI4PV5Ba1xyLCBrZjI5PV5BbFxyLCBrZjM9XkFCXHIsCisJa2YzMD1eQW1cciwga2YzMT1eQW5cciwga2YzMj1eQW9cciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsCisJa2Y2PV5BRVxyLCBrZjc9XkFGXHIsIGtmOD1eQUdcciwga2Y5PV5BSFxyLCBraG9tZT1eXiwKKwlraWNoMT1cRXEsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLCBtYzA9XEVQLCBtYzQ9XlQsIG1jNT1eUiwKKwltcmN1cD1cRXdAJXAxJXs0OH0lKyVjJXAyJXszMn0lKyVjJXAzJXszMn0lKyVjJDwzMD4sCisJbmVsPVwwMzckPDU+LCByZXY9XEVHNCwgcmk9XEVqJDw1Piwgcm1hY3M9XEVIXkMsIHJtYW09XEVkLiwKKwlybWlyPVxFciwgcm1zbz1cRUcwLCBybXVsPVxFRzAsIHJteG9uPVxFYzIwLAorCXJzMj1cRWU2XEV+NCQ8MTAwPlxFK1xFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWBcOlxFYEBcRX4hXEUiXEVlNFxFeEBcRWA5XEVlNyQ8MTAwPiwKKwlzZ3IwPVxFRzBcRWNCMFxFY0QkPDE1Piwgc21hY3M9XEVIXkIsIHNtYW09XEVkLywKKwlzbWlyPVxFcSwgc21zbz1cRUd0LCBzbXVsPVxFRzgsIHNteG9uPVxFYzIxLCB0YmM9XEUwJDwxNT4sCisJdHNsPVxFRiwKK25jcjI2MHd5NjB3cHB8TkNSIDI5MDBfMjYwIHd5c2UgNjAgd2lkZSBtb2RlLAorCWNvbHMjMTMyLAorCWN1cD1cRWElaSVwMSVkUiVwMiVkQyQ8MzA+LAorCWlzMj1cRWU2XEV+NCQ8MTAwPlxFK1xFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWA7XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCXJzMj1cRWU2XEV+NCQ8MTAwPlxFK1xFZC9cRWUxXEVkKlxFclxFT1xFYDFcRWA7XEVgQFxFfiFcRSJcRWU0XEV4QFxFYDlcRWU3JDwxMDA+LAorCXVzZT1uY3IyNjB3eTYwcHAsCituY3IxNjB2cHBwfE5DUiAyOTAwXzE2MCB2aWV3cG9pbnQsCisJdXNlPW5jcjI2MHZwcHAsCituY3IxNjB2cHdwcHxOQ1IgMjkwMF8xNjAgdmlld3BvaW50IHdpZGUgbW9kZSwKKwl1c2U9bmNyMjYwdnB3cHAsCituY3IxNjB2dDEwMGFufE5DUiAyOTAwXzE2MCB2dDEwMCB3aXRoIGFuc2kga3liZCwKKwl1c2U9bmNyMjYwdnQxMDBhbiwKK25jcjE2MHZ0MTAwcHB8TkNSIDI5MDBfMTYwIHZ0MTAwIHdpdGggUEMrIGt5YmQsCisJdXNlPW5jcjI2MHZ0MTAwcHAsCituY3IxNjB2dDEwMHdhbnxOQ1IgMjkwMF8xNjAgdnQxMDAgd2lkZSBtb2RlIGFuc2kga3liZCwKKwl1c2U9bmNyMjYwdnQxMDB3YW4sCituY3IxNjB2dDEwMHdwcHxOQ1IgMjkwMF8xNjAgdnQxMDAgd2lkZSBtb2RlIHBjKyAga3liZCwKKwl1c2U9bmNyMjYwdnQxMDB3cHAsCituY3IxNjB2dDIwMGFufE5DUiAyOTAwXzE2MCB2dDIwMCB3aXRoIGFuc2kga3liZCwKKwl1c2U9bmNyMjYwdnQyMDBhbiwKK25jcjE2MHZ0MjAwcHB8TkNSIDI5MDBfMTYwIHZ0MjAwIHdpdGggcGMrIGt5YmQsCisJdXNlPW5jcjI2MHZ0MjAwcHAsCituY3IxNjB2dDIwMHdhbnxOQ1IgMjkwMF8xNjAgdnQyMDAgd2lkZSBtb2RlIGFuc2kga3liZCwKKwl1c2U9bmNyMjYwdnQyMDB3YW4sCituY3IxNjB2dDIwMHdwcHxOQ1IgMjkwMF8xNjAgdnQyMDAgd2lkZSBtb2RlIHBjKyAga3liZCwKKwl1c2U9bmNyMjYwdnQyMDB3cHAsCituY3IxNjB2dDMwMGFufE5DUiAyOTAwXzE2MCB2dDMwMCB3aXRoIGFuc2kga3liZCwKKwl1c2U9bmNyMjYwdnQzMDBhbiwKK25jcjE2MHZ0MzAwcHB8TkNSIDI5MDBfMTYwIHZ0MzAwIHdpdGggcGMrIGt5YmQsCisJdXNlPW5jcjI2MHZ0MzAwcHAsCituY3IxNjB2dDMwMHdhbnxOQ1IgMjkwMF8xNjAgdnQzMDAgd2lkZSBtb2RlIGFuc2kga3liZCwKKwl1c2U9bmNyMjYwdnQzMDB3YW4sCituY3IxNjB2dDMwMHdwcHxOQ1IgMjkwMF8xNjAgdnQzMDAgd2lkZSBtb2RlIHBjKyAga3liZCwKKwl1c2U9bmNyMjYwdnQzMDB3cHAsCituY3IxNjB3eTUwK3BwfE5DUiAyOTAwXzE2MCB3eXNlIDUwKywKKwl1c2U9bmNyMjYwd3k1MCtwcCwKK25jcjE2MHd5NTArd3BwfE5DUiAyOTAwXzE2MCB3eXNlIDUwKyB3aWRlIG1vZGUsCisJdXNlPW5jcjI2MHd5NTArd3BwLAorbmNyMTYwd3k2MHBwfE5DUiAyOTAwXzE2MCB3eXNlIDYwLAorCXVzZT1uY3IyNjB3eTYwcHAsCituY3IxNjB3eTYwd3BwfE5DUiAyOTAwXzE2MCB3eXNlIDYwIHdpZGUgbW9kZSwKKwl1c2U9bmNyMjYwd3k2MHdwcCwKK25jcnZ0MTAwYW58bmNydnQxMDBwcHxOQ1IgdnQxMDAgZm9yIHRoZSAyOTAwIHRlcm1pbmFsLAorCWFtLCBocywgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIG5sYWIjMzIsCisJYWNzYz1gYGFhZmZnZ2hoaWlqamtrbGxtbW5ucXF0dHV1dnZ3d3h4eXl6en5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDMwPiwgYm9sZD1cRVsxbSQ8MzA+LAorCWNsZWFyPVxFWzJKXEVbMTsxSCQ8MzAwPiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyJDwxMDA+LCBjdWI9XEVbJXAxJWREJDwzMD4sCisJY3ViMT1cRVtEJDwyPiwgY3VkPVxFWyVwMSVkQiQ8MzA+LCBjdWQxPVxFW0IkPDI+LAorCWN1Zj1cRVslcDElZEMkPDMwPiwgY3VmMT1cRVtDJDwyPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDEwMD4sIGN1dT1cRVslcDElZEEkPDMwPiwKKwljdXUxPVxFW0EkPDI+LCBkY2g9XEVbJXAxJWRQJDw0MD4sIGRjaDE9XEVbMVAkPDEwPiwKKwlkbD1cRVslcDElZE0kPDcwPiwgZGwxPVxFW00kPDQwPiwgZHNsPVxFWzMxbCQ8MjU+LAorCWVkPVxFWzBKJDwzMDA+LCBlbD1cRVswSyQ8MzA+LCBlbDE9XEVbMUskPDMwPiwKKwllbmFjcz1cRShCXEUpMCQ8NDA+LCBmc2w9MSQ8MTA+LCBob21lPVxFW0gkPDI+JDw4MD4sCisJaHQ9XkksIGh0cz1cRUgsIGlsPVxFWyVwMSVkTCQ8ODA+LCBpbDE9XEVbQlxFW0wkPDgwPiwKKwlpbmQ9XEVELAorCWlzMj1cRVsxMmhcRVs/MTBsXEUlLzBuXEVbUFwwMzFcRVs/M2xcRShCXEUpMCQ8MjAwPiwKKwlrTEZUPVxFW0QsIGtSSVQ9XEVbQywga2ExPVxFW0gsIGticz1eSCwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZW50PV5NLCBrZjE9XEVPUCwKKwlrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBtYzA9XEVbaSQ8MTAwPiwgbmVsPVxFRSwKKwlyYz1cRTgsIHJldj1cRVs3bSQ8MzA+LCByaT1cRU0kPDUwPiwgcm1hY3M9XDAxNyQ8OTA+LAorCXJtaXI9XEVbNGwkPDgwPiwgcm1zbz1cRVswbSQ8MzA+LCBybXVsPVxFWzBtJDwzMD4sCisJcnMyPVxFY1xFWzEyOzMxaFxFWz8zOzQ7NTsxMGxcRVs/Njs3OzE5OzI1aFxFWzMzOzM0bFxFWzBtXEUoQlxFKTBcRSUvMG5cRVtQXDAzMSQ8MjAwPiwKKwlzYz1cRTcsCisJc2dyPVxFWzAlPyVwMSVwNiV8JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOyQ8MTAwPiwKKwlzZ3IwPVwwMTdcRVswbSQ8MTIwPiwgc21hY3M9XDAxNiQ8OTA+LCBzbWlyPVxFWzRoJDw4MD4sCisJc21zbz1cRVs3bSQ8MzA+LCBzbXVsPVxFWzRtJDwzMD4sIHRiYz1cRVszZyQ8NDA+LAorCXRzbD1cRVs+KzEkPDcwPiwKK25jcnZ0MTAwd2FufE5DUlZUMTAwV1BQfG5jcnZ0MTAwd3BwfE5DUiBWVDEwMCBlbXVsYXRpb24gb2YgdGhlIDI5MDAgdGVybWluYWwsCisJY29scyMxMzIsCisJaXMyPVxFWzEyaFxFWz8xMGxcRSUvMG5cRVtQXDAzMVxFWz8zaFxFKEJcRSkwJDwyMDA+LAorCXJzMj1cRWNcRVsxMjszMWhcRVs/NDs1OzEwbFxFPzM7Njs3OzE5OzI1aFxFWzMzOzM0bFxFWzBtXEUoQlxFKTBcRSUvMG5cRVtQXDAzMSQ8MjAwPiwKKwl1c2U9bmNydnQxMDBhbiwKKyMKKyMgVmVuZG9yLXN1cHBsaWVkIE5DUiB0ZXJtY2FwcyBlbmQgaGVyZQorCisjIE5DUjc5MDAgRElQIHN3aXRjaGVzOgorIworIyBTd2l0Y2ggQToKKyMgMS00IC0gQmF1ZCBSYXRlCisjIDUgICAtIFBhcml0eSAoT2RkL0V2ZW4pCisjIDYgICAtIERvbid0IFNlbmQgb3IgRG8gU2VuZCBTcGFjZXMKKyMgNyAgIC0gUGFyaXR5IEVuYWJsZQorIyA4ICAgLSBTdG9wIEJpdHMgKE9uZS9Ud28pCisjCisjIFN3aXRjaCBCOgorIyAxICAgLSBVcHBlci9Mb3dlciBTaGlmdAorIyAyICAgLSBUeXBld3JpdGVyIFNoaWZ0CisjIDMgICAtIEhhbGYgRHVwbGV4IC8gRnVsbCBEdXBsZXgKKyMgNCAgIC0gTGlnaHQvRGFyayBCYWNrZ3JvdW5kCisjIDUtNiAtIENhcnJpYWdlIFJldHVybiBXaXRob3V0IC8gV2l0aCBMaW5lIEZlZWQKKyMgNyAgIC0gRXh0ZW5kZWQgTW9kZQorIyA4ICAgLSBTdXBwcmVzcyBLZXlib2FyZCBEaXNwbGF5CisjCisjIFN3aXRjaCBDOgorIyAxICAgLSBFbmQgb2YgbGluZSBlbnRyeSBkaXNhYmxlZC9lbmFibGVkCisjIDIgICAtIENvbnZlcnNhdGlvbmFsIG1vZGUgLyAoTG9jYWw/KSBNb2RlCisjIDMgICAtIENvbnRyb2wgY2hhcmFjdGVycyBkaXNwbGF5ZWQgLyBub3QgZGlzcGxheWVkCisjIDQgICAtICgyLXdpcmU/KSAvIDQtd2lyZSBjb21tdW5pY2F0aW9ucworIyA1ICAgLSBSVFMgb24gYW5kIG9mZiBmb3IgZWFjaCBjaGFyYWN0ZXIKKyMgNiAgIC0gKDUwSHo/KSAvIDYwIEh6CisjIDcgICAtIEV4aXQgYWZ0ZXIgbGV2ZWwgemVybyBkaWFnbm9zdGljcworIyA4ICAgLSBSUy0yMzIgaW50ZXJmYWNlCisjCisjIFN3aXRjaCBEOgorIyAxICAgLSBSZXZlcnNlIENoYW5uZWwgKHllcyAvIG5vKQorIyAyICAgLSBNYW51YWwgYW5zd2VyIChubyAvIHllcykKKyMgMy00IC0gQ3Vyc29yIGFwcGVhcmFuY2UKKyMgNSAgIC0gQ29tbXVuaWNhdGlvbiBSYXRlCisjIDYgICAtIEVuYWJsZSAvIERpc2FibGUgRVhUIHR1cm5vZmYKKyMgNyAgIC0gRW5hYmxlIC8gRGlzYWJsZSBDUiB0dXJub2ZmCisjIDggICAtIEVuYWJsZSAvIERpc2FibGUgYmFja3NwYWNlCisjCisjIFNpbmNlIGVhY2ggYXR0cmlidXRlIHBhcmFtZXRlciBpcyAwIG9yIDEsIHdlIHNoaWZ0IGVhY2ggYXR0cmlidXRlIChzdGFuZG91dCwKKyMgcmV2ZXJzZSwgYmxpbmssIGRpbSwgYW5kIHVuZGVybGluZSkgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBiaXRzIChieQorIyBtdWx0aXBseWluZyB0aGUgMCBvciAxIGJ5IGEgY29ycmVjdCBmYWN0b3IgdG8gc2hpZnQpIHNvIHRoZSBiaWFzIGNoYXJhY3RlciwKKyMgJ0AnIGlzIChlZmZlY3RpdmVseSkgIm9yImVkIHdpdGggZWFjaCBhdHRyaWJ1dGUgdG8gZ2VuZXJhdGUgdGhlIHByb3BlciB0aGlyZAorIyBjaGFyYWN0ZXIgaW4gdGhlIDxFU0M+MCBzZXF1ZW5jZS4gIFRoZSA8c2dyPiBzdHJpbmcgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nCisjIGVxdWF0aW9uOgorIworIyAoKCgoKCdAJyArIFA1KSB8IChQNCA8PCAxKSkgfCAoUDMgPDwgMykpIHwgKFAyIDw8IDQpKSB8IChwMSAqIDE3KSkgICAgPT4KKyMgKCgoKCgnQCcgKyBQNSkgKyAoUDQgPDwgMSkpICsgKFAzIDw8IDMpKSArIChQMiA8PCA0KSkgKyAocDEgKiAxNykpCisjCisjCVdoZXJlOiAgUDEgPD09PiBTdGFuZG91dCBhdHRyaWJ1dGUgcGFyYW1ldGVyCisjCQlQMiA8PT0+IFVuZGVybGluZSBhdHRyaWJ1dGUgcGFyYW1ldGVyCisjCQlQMyA8PT0+IFJldmVyc2UgYXR0cmlidXRlIHBhcmFtZXRlcgorIwkJUDQgPD09PiBCbGluayBhdHRyaWJ1dGUgcGFyYW1ldGVyCisjCQlQNSA8PT0+IERpbSBhdHRyaWJ1dGUgcGFyYW1ldGVyCisjIEZyb20gPHJvb3RAZ29saWF0aC51bi5hdGxhbnRhZ2EuTkNSLkNPTT4sIGluaXQgc3RyaW5nIGhhY2tlZCBieSBTQ08uCituY3I3OTAwaXxuY3I3OTAwfG5jciA3OTAwIG1vZGVsIDEsCisJYW0sIGJ3LCB1bCwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzEsCisJYmVsPV5HLCBibGluaz1cRTBCLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkYsCisJY3VwPVxFMSVwMiVjJXAxJWMsIGN1dTE9XlosIGRpbT1cRTBBLCBlZD1cRWssIGVsPVxFSywgaW5kPV5KLAorCWlzMj1cRTBAXDAxMFxFM1xFNFxFNywga2N1YjE9XlUsIGtjdWQxPV5KLCBrY3VmMT1eRiwKKwlrY3V1MT1eWiwga2hvbWU9XkEsIGxsPV5BLCBtYzQ9XlQsIG1jNT1eUiwgcmV2PVxFMFAsIHJtc289XEUwQCwKKwlybXVsPVxFMEAsCisJc2dyPVxFMCVwNSV7NjR9JSslcDQlezJ9JSolKyVwMyV7MTZ9JSolKyVwMiV7MzJ9JSolKyVwMSV7MTd9JSolKyVjLAorCXNncjA9XEUwQCwgc21zbz1cRTBRLCBzbXVsPVxFMGAsCituY3I3OTAwaXZ8bmNyIDc5MDAgbW9kZWwgNCwKKwlhbSwgYncsIGVzbG9rLCBocywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdXA9XDAxMyVwMSV7NjR9JSslY1xFXDAwNSVwMiUwMmQsIGRsMT1cRV5PLCBkc2w9XEV5MSwKKwlmc2w9XEVrXEV5NSwgaG9tZT1cMDEzQFxFXkUwMCwgaWwxPVxFXk4sIGluZD1eSiwga2JzPV5ILAorCWtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2YxPVxFUywga2YyPVxFVCwKKwlrZjM9XEVVLCBrZjQ9XEVWLCBrZjU9XEVXLCBrZjY9XEVQLCBrZjc9XEVRLCBrZjg9XEVSLAorCWtob21lPVxFSCwgbGY2PWJsdWUsIGxmNz1yZWQsIGxmOD13aGl0ZSwgbmVsPV5NXkosCisJdHNsPVxFalxFeDVcRXgxXEVZOCVwMSV7MzJ9JSslY1xFbywKKyMgV2FybmluZzogVGhpcyB0ZXJtaW5hbCB3aWxsIGxvY2sgb3V0IHRoZSBrZXlib2FyZCB3aGVuIGl0IHJlY2VpdmVzIGEgQ1RSTC1ELgorIwkgICBUaGUgdXNlciBjYW4gZW50ZXIgYSBDVFJMLUIgdG8gZ2V0IG91dCBvZiB0aGlzIGxvY2tlZCBzdGF0ZS4KKyMgSW4gPGhwYT4sIHdlIHdhbnQgdG8gb3V0cHV0IHRoZSBjaGFyYWN0ZXIgZ2l2ZW4gYnkgdGhlIGZvcm11bGE6CisjCQkoKGNvbCAvIDEwKSAqIDE2KSArIChjb2wgJSAxMCkJCXdoZXJlICJjb2wiIGlzICJwMSIKK25jcjc5MDF8bmNyIDc5MDEgbW9kZWwsCisJYW0sIGJ3LCB1bCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFMEIsIGNpdmlzPV5XLCBjbGVhcj1eTCwgY25vcm09XlgsIGNyPV5NLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkYsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eWiwgZGltPVxFMEEsCisJZWQ9XEVrLCBlbD1cRUssCisJaHBhPVwwMjAlcDElezEwfSUvJXsxNn0lKiVwMSV7MTB9JW0lKyVjLCBpbmQ9XkosCisJaXMyPVxFNF5PLCBrY2xyPV5MLCBrY3ViMT1eVSwga2N1ZDE9XkosIGtjdWYxPV5GLCBrY3V1MT1eWiwKKwlraG9tZT1eSCwgbGw9XkEsIG1jND1eVCwgbWM1PV5SLCByZXY9XEUwUCwgcm1zbz1eTywgcm11bD1eTywKKwlzZ3I9XEUwJXA1JXs2NH0lKyVwNCV7Mn0lKiUrJXAzJXsxNn0lKiUrJXAyJXszMn0lKiUrJXAxJXsxN30lKiUrJWNcMDE2LAorCXNncjA9Xk8sIHNtc289XEUwUVwwMTYsIHNtdWw9XEUwYFwwMTYsCisJdnBhPVwwMTMlcDElezY0fSUrJWMsCisKKyMgTmV3YnVyeSBEYXRhIFJlY29yZGluZyBMaW1pdGVkIChOZXdidXJ5IERhdGEpCisjCisjIEhhdmUgYmVlbiBtYW51ZmFjdHVyaW5nIGFuZCByZXNlbGxpbmcgIHZhcmlvdXMgcGVyaXBoZXJhbHMgZm9yIGEgbG9uZyB0aW1lCisjIFRoZXkgZG9uJ3QgbWFrZSB0ZXJtaW5hbHMgYW55bW9yZSwgYnV0IGFyZSBzdGlsbCBpbiBidXNpbmVzcyAoaW4gMjAwNykuCisjIFRoZWlyIGUtbWFpbCBhZGRyZXNzIGlzIGF0IG5kc2FsZXNAbmV3YnVyeWRhdGEuY28udWsKKyMgYW5kIHRoZWlyIHBvc3QgYWRkcmVzcyBpczoKKyMKKyMgTmV3YnVyeSBEYXRhIFJlY29yZGluZyBMdGQsCisjIFByZW1pZXIgUGFyaywgUm9hZCBPbmUsCisjIFdpbnNmb3JkLCBDaGVzaGlyZSwgQ1c3IDNQVAorIworIyBUaGVpciB0ZWNobmljYWwgc3VwcG9ydCBpcyBzdGlsbCBnb29kLCB0aGV5IHNlbnQgbWUgZm9yIGZyZWUgYSBwcmludGVkIGNvcHkKKyMgb2YgdGhlIDk1MDAgdXNlciBtYW51YWwgYW5kIEkgZ290IGl0IGp1c3QgMSB3ZWVrIGFmdGVyIEkgZmlyc3QgY29udGFjdGVkIHRoZW0KKyMgKGluIDIwMDUpIQorCisjIE5EUiA5NTAwCisjIE1hbnVmYWN0dXJlZCBpbiB0aGUgZWFybHkvbWlkIGVpZ2h0aWVzLCBiZWhhdmVzIGFsbW9zdCB0aGUgc2FtZSBhcyBhCisjIFRlbGV2aWRlbyA5NTAuICBUYWtlIGEgOTUwLCBjaGFuZ2UgaXRzIGNhYmluZXQgZm9yIGEgbW9yZSA4MHMtaXNoIG9uZSAoYnV0CisjIGtlZXAgdGhlIHNhbWUga2V5Ym9hcmQgbGF5b3V0KSwgYWRkIGFuIG9wdGlvbmFsIDI1LWxpbmUgbW9kZSwgcmVwbGFjZSB0aGUgRElQCisjIHN3aXRjaGVzIHdpdGggYSBtZW51IGFuZCByZW1vdmUgdGhlICJsb2NrIGxpbmUiIGZlYXR1cmUgKEVTQyAhICAxIGFuZCBFU0MgISAKKyMgMiksIGhlcmUgaXMgdGhlIE5EUiA5NTAwLiAgRXZlbiB0aGUgbGluZS1sb2NrLCBhbGJlaXQgZGlzYWJsZWQsIGlzCisjIHJlY29nbml6ZWQ6ICBpZiB5b3UgdHlwZSBpbiAiRVNDICEiLCB0aGUgbmV4dCAodGhpcmQpIGNoYXJhY3RlciBpcyBub3QKKyMgZWNob2VkLCBzaG93aW5nIHRoYXQgdGhlIHRlcm1pbmFsIHdhcyBhY3R1YWxseSB3YWl0aW5nIGZvciBhIHBhcmFtZXRlciEKK25kcjk1MDB8bmQ5NTAwfE5ld2J1cnkgRGF0YSA5NTAwLAorCWFtLCBidywgaHMsIG1jNWksIG1pciwgbXNnciwgdWwsIHhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgd3NsIzc5LAorCWFjc2M9cUtuSW1BakR3TnVMdE12T2xCa0N4SiwgYmVsPV5HLCBjYnQ9XEVJLCBjaXZpcz1cRS4wLAorCWNsZWFyPVxFOywgY25vcm09XEUuMSwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XlYsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGltPVxFKSwgZGwxPVxFUiwgZHNsPVxFaCwgZWQ9XEVZLCBlbD1cRVQsCisJZmxhc2g9XEViJDw1MC8+XEVkLCBmc2w9Xk0sIGhvbWU9Xl4sIGh0PV5JLCBodHM9XEUxLAorCWljaDE9XEVRLCBpbDE9XEVFLCBpbmQ9XkosIGlzMj1cRXdcRSdcRURGXEVsXEVyXEVPLAorCWtEQz1cRXIsIGtETD1cRU8sIGtFT0w9XEV0LCBrSUM9XEVxLCBrY2J0PVxFSSwga2Nscj1eWiwKKwlrY3ViMT1eSCwga2N1ZDE9XlYsIGtjdWYxPV5MLCBrY3V1MT1eSywga2RjaDE9XEVXLCBrZGwxPVxFUiwKKwlrZWQ9XEVZLCBrZWw9XEVULCBrZW50PV5NLCBrZjE9XkFAXHIsIGtmMTA9XkFJXHIsIGtmMTE9XkFKXHIsCisJa2YxMj1eQWBcciwga2YxMz1eQWFcciwga2YxND1eQWJcciwga2YxNT1eQWNcciwga2YxNj1eQWRcciwKKwlrZjE3PV5BZVxyLCBrZjE4PV5BZlxyLCBrZjE5PV5BZ1xyLCBrZjI9XkFBXHIsIGtmMjA9XkFoXHIsCisJa2YyMT1eQWlcciwga2YyMj1eQWpcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwKKwlrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLAorCWtpY2gxPVxFUSwga2lsMT1cRUUsIGtwcnQ9XEVQLCBtYzQ9XEVhLCBtYzU9XEVgLCBuZWw9Xl8sCisJcGZsb2M9XEV8JXs0OH0lcDElKyVjMiVwMlwwMzEsCisJcGZ4PVxFfCV7NDh9JXAxJSslYzElcDJcMDMxLCBwcm90PVxFKSwgcmk9XEVqLAorCXJtYWNzPVxFJSUsIHJtaXI9XEVyLCBybXNvPVxFKCwgcm14b249Xk4sCisJc2dyPVxFJSVcRSglPyVwMSVwNSVwOCV8JXwldFxFKSU7JT8lcDkldFxFJCU7LAorCXNncjA9XEVHMFxFJSVcRSgsIHNtYWNzPVxFJCwgc21pcj1cRXEsIHNtc289XEUpLCBzbXhvbj1eTywKKwl0YmM9XEUzLCB0c2w9XEVnXEVmXDAxMSVwMSV7MzJ9JSslYywgLmticz1eSCwKKworbmRyOTUwMC1ubHxORFIgOTUwMCB3aXRoIG5vIHN0YXR1cyBsaW5lLAorCWhzQCwKKwl3c2xALAorCWRzbEAsIGZzbEAsIHRzbEAsIHVzZT1uZHI5NTAwLAorCituZHI5NTAwLTI1fE5EUiA5NTAwIHdpdGggMjV0aCBsaW5lIGVuYWJsZWQsCisJbGluZXMjMjUsIHVzZT1uZHI5NTAwLAorCituZHI5NTAwLTI1LW5sfE5EUiA5NTAwIHdpdGggMjUgbGluZXMgYW5kIG5vIHN0YXR1cyBsaW5lLAorCWxpbmVzIzI1LCB1c2U9bmRyOTUwMC1ubCwKKworbmRyOTUwMC1tY3xORFIgOTUwMCB3aXRoIG1hZ2ljIGNvb2tpZXMgKGVuYWJsZXMgdW5kZXJsaW5lIGludmVyc2UgdmlkZW8gaW52aXNpYmxlIGFuZCBibGluayksCisJbXNnckAsCisJeG1jIzEsCisJYmxpbms9XEVHMiwgaW52aXM9XEVHMSwgcmV2PVxFRzQsIHJtc289XEVHMCwgcm11bD1cRUcwLAorCXNncj1cRSUlXEUoJT8lcDUlcDglfCV0XEUpJTslPyVwOSV0XEUkJTtcRUclezQ4fSU/JXA3JXQlezF9JSslOyU/JXA0JXQlezJ9JSslOyU/JXAzJXAxJXwldCV7NH0lKyU7JT8lcDIldCV7OH0lKyU7JWMsCisJc2dyMD1cRUcwXEUlJVxFKCwgc21zbz1cRUc0LCBzbXVsPVxFRzgsIHVzZT1uZHI5NTAwLAorCituZHI5NTAwLTI1LW1jfE5EUiA1MDAgd2l0aCAyNSBsaW5lcyBhbmQgbWFnaWMgY29va2llcywKKwlsaW5lcyMyNSwgdXNlPW5kcjk1MDAtbWMsCisKK25kcjk1MDAtbWMtbmx8TkRSIDk1MDAgd2l0aCBtYWdpYyBjb29raWVzIGFuZCBubyBzdGF0dXMgbGluZSwKKwloc0AsCisJd3NsQCwKKwlkc2xALCBmc2xALCB0c2xALCB1c2U9bmRyOTUwMC1tYywKKworbmRyOTUwMC0yNS1tYy1ubHxORFIgOTUwMCB3aXRoIDI1IGxpbmVzIGFuZCBtYWdpYyBjb29raWVzIGFuZCBubyBzdGF0dXMgbGluZSwKKwlsaW5lcyMyNSwgdXNlPW5kcjk1MDAtbWMtbmwsCisKKyMjIyMgUGVya2luLUVsbWVyIChPd2wpCisjCisjIFRoZXNlIGFyZSBvZmZpY2lhbCB0ZXJtaW5mbyBlbnRyaWVzIGZyb20gd2l0aGluIFBlcmtpbi1FbG1lci4KKyMKKworYmFudGFtfHBlNTUwfHBlNjEwMHxwZXJraW4gZWxtZXIgNTUwLAorCU9UYnMsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUskPDIwPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVglcDElezMyfSUrJWNcRVklcDIlezMyfSUrJWMsIGN1dTE9XEVBLAorCWVsPVxFSSQ8MjA+LCBob21lPVxFSCwgaW5kPV5KLCBsbD1cRUhcRUEsCitmb3h8cGUxMTAwfHBlcmtpbiBlbG1lciAxMTAwLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVIXEVKJDwxMzI+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFQywgY3VwPVxFWCVwMSV7MzJ9JSslY1xFWSVwMiV7MzJ9JSslYywgY3V1MT1cRUEsCisJZWQ9XEVKJDw1LjUqPiwgZWw9XEVJLCBmbGFzaD1cMDIwXDAwMiQ8MjAwLz5cMDIwXDAwMywKKwlob21lPVxFSCwgaHRzPVxFMSwgaW5kPV5KLCBsbD1cRUhcRUEsIHRiYz1cRTMsCitvd2x8cGUxMjAwfHBlcmtpbiBlbG1lciAxMjAwLAorCU9UYnMsIGFtLCBpbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiQ8MTMyPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1cRUMsIGN1cD1cRVglcDElezMyfSUrJWNcRVklcDIlezMyfSUrJWMsIGN1dTE9XEVBLAorCWRjaDE9XEVPJDw1LjUqPiwgZGwxPVxFTSQ8NS41Kj4sIGVkPVxFSiQ8NS41Kj4sCisJZWw9XEVJJDw1LjU+LCBmbGFzaD1cMDIwXDAwMiQ8MjAwLz5cMDIwXDAwMywgaG9tZT1cRUgsCisJaHRzPVxFMSwgaWNoMT1cRU4sIGlsMT1cRUwkPDUuNSo+LCBpbmQ9XkosIGlwPSQ8NS41Kj4sCisJa2JzPV5ILCBrZjA9XEVSSiwga2YxPVxFUkEsIGtmMj1cRVJCLCBrZjM9XEVSQywga2Y0PVxFUkQsCisJa2Y1PVxFUkUsIGtmNj1cRVJGLCBrZjc9XEVSRywga2Y4PVxFUkgsIGtmOT1cRVJJLCBsbD1cRUhcRUEsCisJcm1zbz1cRSFcMCwgc2dyMD1cRSFcMCwgc21zbz1cRSFeSCwgdGJjPVxFMywKK3BlMTI1MXxwZTYzMDB8cGU2MzEyfHBlcmtpbiBlbG1lciAxMjUxLAorCWFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCBwYiMzMDAsIHZ0IzgsIHhtYyMxLAorCWJlbD1eRywgY2xlYXI9XEVLJDwzMzI+LCBjcj1eTSwgY3ViMT1cRUQsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVYJXAxJXszMn0lKyVjXEVZJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwKKwllZD1cRUokPDIwKj4sIGVsPVxFSSQ8MTAqPiwgaG9tZT1cRUgsIGh0cz1cRTEsIGluZD1eSiwKKwlrZjA9XEVSQSwga2YxPVxFUkIsIGtmMTA9XEVSSywga2YyPVxFUkMsIGtmMz1cRVJELCBrZjQ9XEVSRSwKKwlrZjU9XEVSRiwga2Y2PVxFUkcsIGtmNz1cRVJILCBrZjg9XEVSSSwga2Y5PVxFUkosIHRiYz1cRTMsCisjIChwZTcwMDBtOiB0aGlzIGhhZAorIyAJcm11bD1cRSFcMCwgc211bD1cRSFcMDQwLAorIyB3aGljaCBpcyBwcm9iYWJseSB3cm9uZywgaXQgY29sbGlkZXMgd2l0aCBrZjAKK3BlNzAwMG18cGVya2luIGVsbWVyIDcwMDAgc2VyaWVzIG1vbm9jaHJvbWUgbW9uaXRvciwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNidD1cRSFZLCBjbGVhcj1cRUssIGNyPV5NLCBjdWIxPVxFRCwgY3VkMT1cRUIsCisJY3VmMT1cRUMsIGN1cD1cRVMlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLAorCWVkPVxFSiwgZWw9XEVJLCBob21lPVxFSCwgaW5kPV5KLAorCWlzMT1cRSFcMFxFVyAgN29cRWdmXEVTN1xzLCBrYnM9XkgsIGtjdWIxPVxFIVYsCisJa2N1ZDE9XEUhVSwga2N1ZjE9XEUhVywga2N1dTE9XEUhVCwga2YwPVxFIVwwLCBrZjE9XEUhXkEsCisJa2YxMD1cRSFeSiwga2YyPVxFIV5CLCBrZjM9XEUhXkMsIGtmND1cRSFeRCwga2Y1PVxFIV5FLAorCWtmNj1cRSFeRiwga2Y3PVxFIV5HLCBrZjg9XEUhXkgsIGtmOT1cRSFeSSwga2hvbWU9XEUhUywKKwlsbD1cRVM3XHMsIHJpPVxFUiwKK3BlNzAwMGN8cGVya2luIGVsbWVyIDcwMDAgc2VyaWVzIGNvbG91ciBtb25pdG9yLAorCWlzMT1cRSFcMFxFVyAgN29cRWdmXEViMFxFYzdcRVM3XHMsIHJtc289XEViMCwKKwlybXVsPVxFIVwwLCBzbXNvPVxFYjIsIHNtdWw9XEUhXHMsIHVzZT1wZTcwMDBtLAorCisjIyMjIFNwZXJyeSBVbml2YWMKKyMKKyMgU3BlcnJ5IFVuaXZhYyBoYXMgbWVyZ2VkIHdpdGggQnVycm91Z2hzIHRvIGZvcm0gVW5pc3lzLgorIworCisjIFRoaXMgZW50cnkgaXMgZm9yIHRoZSBTcGVycnkgVVRTMzAgdGVybWluYWwgcnVubmluZyB0aGUgVFRZCisjIHV0aWxpdHkgdW5kZXIgY29udHJvbCBvZiBDUC9NIFBsdXMgMVIxLiBUaGUgZnVuY3Rpb25hbGl0eQorIyBwcm92aWRlZCBpcyBjb21wYXJhYmxlIHRvIHRoZSBERUMgdnQxMDAuCisjICh1dHMzMDogSSBhZGRlZCA8cm1hbT4vPHNtYW0+IGJhc2VkIG9uIHRoZSBpbml0IHN0cmluZyAtLSBlc3IpCit1dHMzMHxzcGVycnkgdXRzMzAgd2l0aCBjcC9tQDFSMSwKKwlhbSwgYncsIGhzLAorCWNvbHMjODAsIGxpbmVzIzI0LCB3c2wjNDAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVIsIGNsZWFyPV5MLAorCWNub3JtPVxFUywgY3I9Xk0sIGNzcj1cRVUlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRUIsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRUMsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVNLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFTCwgZWQ9XEVbSiwgZWw9XEVbSywgZnNsPV5NLCBob21lPVxFW0gsCisJaHQ9XkksIGljaD1cRVslcDElZEAsIGljaDE9XEVPLCBpbD1cRVslcDElZEwsIGlsMT1cRU4sCisJaW5kPV5KLCBpbmRuPVxFWyVwMSVkQiwgaXMyPVxFW1UgN1xFWzI0OzFILCBrYnM9XkgsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwga2hvbWU9XEVbSCwKKwlyYz1cRVgsIHJldj1cRVs3bSwgcmY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsIHJpPVxFSSwKKwlyaW49XEVbJXAxJWRBLCBybWFjcz1cRWQsIHJtYW09XEVbPzdsLCBybXNvPVxFW20sCisJcm11bD1cRVttLCByczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoLAorCXNjPVxFVywgc2dyMD1cRVttLCBzbWFjcz1cRUYsIHNtYW09XEVbPzdtLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRzbD1cRV0sIHVjPVxFUEIsCisKKyMjIyMgVGFuZGVtCisjCisjIFRhbmRlbSBidWlsZHMgdGhlc2UgdGhpbmdzIGZvciB1c2Ugd2l0aCBpdHMgbGluZSBvZiBmYXVsdC10b2xlcmFudAorIyB0cmFuc2FjdGlvbi1wcm9jZXNzaW5nIGNvbXB1dGVycy4gIFRoZXkgYXJlbid0IGdlbmVyYWxseSBhdmFpbGFibGUKKyMgb24gdGhlIG1lcmNoYW50IG1hcmtldCwgYW5kIHNvIGFyZSBmYWlybHkgdW5jb21tb24uCisjCisKK3RhbmRlbTY1MTB8YWRtM2EgcmVwYWNrYWdlZCBieSBUYW5kZW0sCisJdXNlPWFkbTNhLAorCisjIEEgZnVubnkgc2VyaWVzIG9mIHRlcm1pbmFsIHRoYXQgVEFOREVNIHVzZXMuICBUaGUgYWN0dWFsIG1vZGVsIG51bWJlcnMKKyMgaGF2ZSBhIGZvdXJ0aCBkaWdpdCBhZnRlciA2NTMgdGhhdCBkZXNpZ25hdGVzIG1pbm9yIHZhcmlhbnRzLiAgVGhlc2UgYXJlCisjIG5hdGl2ZWx5IGJsb2NrLW1vZGUgYW5kIHJhdGhlciB1Z2x5LCBidXQgdGhleSBoYXZlIGEgY2hhcmFjdGVyIG1vZGUgd2hpY2gKKyMgdGhpcyBkb3VidGxlc3MoPykgZXhwbG9pdHMuICBUaGVyZSBpcyBhIDY1MjAgdGhhdCBpcyBzbGlnaHRseSBkdW1iZXIuCisjICh0YW5kZW02NTM6IGhhZCAiOnNiPVxFUzoiLCBwcm9iYWJseSBzb21lb25lJ3MgbWlzdGFrZSBmb3Igc2Y7IGFsc28sCisjIHJlbW92ZWQgPGlmPS91c3Ivc2hhcmUvdGFic2V0L3RhbmRlbTY1Mz4sIG5vIHN1Y2ggZmlsZSAtLSBlc3IpCit0YW5kZW02NTN8dDY1M3h8VGFuZGVtIDY1M3ggbXVsdGlwYWdlIHRlcm1pbmFsLAorCU9UYnMsIGFtLCBkYSwgZGIsIGhzLAorCWNvbHMjODAsIGxpbmVzIzI0LCB3c2wjNjQsIHhtYyMxLAorCWNsZWFyPVxFSSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVwwMjMlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkc2w9XEVvXHIsCisJZWQ9XEVKLCBlbD1cRUssIGZzbD1eTSwgaG9tZT1cRUgsIGluZD1cRVMsIHJpPVxFVCwgcm1zbz1cRTZccywKKwlybXVsPVxFNlxzLCBzZ3IwPVxFNlxzLCBzbXNvPVxFNiQsIHNtdWw9XEU2MCwgdHNsPVxFbywKKworIyMjIyBUYW5keS9SYWRpbyBTaGFjaworIworIyBUYW5keSBoYXMgYSBsaW5lIG9mIFZEVHMgZGlzdGluY3QgZnJvbSBpdHMgbWljcm9jb21wdXRlcnMuCisjCisKK2RtdGVybXxkZXNrbWF0ZSB0ZXJtaW5hbCwKKwlhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjaXZpcz1cRUc1LCBjbGVhcj1cRWosIGNub3JtPVxFRzYsIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XEVCLCBjdWYxPVxFQywgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPVxFQSwgZGNoMT1cRVMsIGRsMT1cRVIsIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksCisJaWNoMT1cRVEsIGlsMT1cRVAsIGluZD1cRVgsIGludmlzQCwga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtmMD1cRTEsIGtmMT1cRTIsIGtmMj1cRTMsIGtmMz1cRTQsCisJa2Y0PVxFNSwga2Y1PVxFNiwga2Y2PVxFNywga2Y3PVxFOCwga2Y4PVxFOSwga2Y5PVxFMCwKKwlraG9tZT1cRUgsIGxmMD1mMSwgbGYxPWYyLCBsZjI9ZjMsIGxmMz1mNCwgbGY0PWY1LCBsZjU9ZjYsCisJbGY2PWY3LCBsZjc9ZjgsIGxmOD1mOSwgbGY5PWYxMCwgbGw9XEVFLCBybXVsQCwgc211bEAsCisJdXNlPWFkbStzZ3IsCitkdDEwMHxkdC0xMDB8VGFuZHkgRFQtMTAwIHRlcm1pbmFsLAorCXhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzEsCisJYWNzYz1qamtrbGxtbW5ucXF0dHV1dnZ3d3h4LCBiZWw9XkcsIGNpdmlzPVxFWz8yNWwsCisJY2xlYXI9XEVbSFxFWzJKLCBjbm9ybT1cRVs/MjVoLCBjcj1eTSwKKwljc3I9XEVbJXAxJTJkOyVwMiUyZHIsIGN1YjE9XkgsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cMDEwXEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoMT1cRVtQLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBpY2gxPVxFW0AsCisJaWwxPVxFW0wsIGluZD1eSiwgaXMyPVxFWz8zbFxFKTBcRShCLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMT1cRVs/M2ksCisJa2YxMD1cRVs/NWksIGtmMj1cRVsyaSwga2YzPVxFW0AsIGtmND1cRVtNLCBrZjU9XEVbMTd+LAorCWtmNj1cRVsxOH4sIGtmNz1cRVsxOX4sIGtmOD1cRVsyMH4sIGtmOT1cRVsyMX4sIGtob21lPVxFW0gsCisJa25wPVxFWzI5fiwga3BwPVxFWzI4fiwgbGYxPWYxLCBsZjI9ZjIsIGxmMz1mMywgbGY0PWY0LCBsZjU9ZjUsCisJbGY2PWY2LCBsZjc9ZjcsIGxmOD1mOCwgcmk9XEVNLCBybWFjcz1eTywgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWFjcz1eTiwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKK2R0MTAwd3xkdC0xMDB3fFRhbmR5IERULTEwMCB0ZXJtaW5hbCAod2lkZSBtb2RlKSwKKwljb2xzIzEzMiwgdXNlPWR0MTAwLAorZHQxMTB8VGFuZHkgRFQtMTEwIGVtdWxhdGluZyBhbnNpLAorCXhvbiwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlhY3NjPWpqa2tsbG1tbm5xcXR0dXV2dnd3eHgsIGJlbD1eRywgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbMkosIGNub3JtPVxFWz8yNWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1cRVswQiwgY3VmMT1cRVtDLAorCWN1cD1cMDEwXEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbMEEsIGRjaDE9XEVbMFAsCisJZGwxPVxFWzBNLCBlZD1cRVswSiwgZWw9XEVbMEssIGVuYWNzPVxFKEJcRSkwLCBob21lPVxFW0gsCisJaHQ9XkksIGljaDE9XEVbMEAsIGlsMT1cRVswTCwgaW5kPV5KLCBpczI9XEVbPzNsXEUpMFxFKEIsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2VuZD1cRVtLLAorCWtmMT1cRVsxfiwga2YxMD1cRVsxMH4sIGtmMj1cRVsyfiwga2YzPVxFWzN+LCBrZjQ9XEVbNH4sCisJa2Y1PVxFWzV+LCBrZjY9XEVbNn4sIGtmNz1cRVs3fiwga2Y4PVxFWzh+LCBrZjk9XEVbOX4sCisJa2hvbWU9XEVbRywga2ljaDE9XEVbQCwga25wPVxFWzI2fiwga3BwPVxFWzI1fiwgbGYwPWYxLAorCWxmMT1mMiwgbGYyPWYzLCBsZjM9ZjQsIGxmND1mNSwgbGY1PWY2LCBsZjY9ZjcsIGxmNz1mOCwgbGY4PWY5LAorCWxmOT1mMTAsIHJpPVxFTSwgcm1hY3M9Xk8sIHJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sCisJc21hY3M9Xk4sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCitwdDIxMHxUUlMtODAgUFQtMjEwIHByaW50aW5nIHRlcm1pbmFsLAorCWhjLCBvcywKKwljb2xzIzgwLAorCWJlbD1eRywgY3I9Xk0sIGN1ZDE9XkosIGluZD1eSiwKKworIyMjIyBUZWt0cm9uaXggKHRlaykKKyMKKyMgVGVrdHJvbml4IHR1YmVzIGFyZSBncmFwaGljcyB0ZXJtaW5hbHMuICBNb3N0IG9mIHRoZW0gdXNlIG1vZGlmaWVkCisjIG9zY2lsbG9zY29wZSB0ZWNobm9sb2d5IGluY29ycG9yYXRpbmcgYSBsb25nLXBlcnNpc3RlbmNlIGdyZWVuIHBob3NwaG9yLAorIyBhbmQgc3VwcG9ydCB2ZWN0b3IgZ3JhcGhpY3Mgb24gYSBtYWluIHNjcmVlbiB3aXRoIGFuIGF0dGFjaGVkICJkaWFsb2d1ZQorIyBhcmVhIiBmb3IgaW50ZXJhY3RpdmUgdGV4dC4KKyMKKwordGVrfHRlazQwMTJ8dGVrdHJvbml4IDQwMTIsCisJT1Ricywgb3MsCisJY29scyM3NSwgbGluZXMjMzUsCisJYmVsPV5HLCBjbGVhcj1cRVwwMTQkPDEwMDA+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwlmZj1cMDE0JDwxMDAwPiwgaXMyPVxFXk8sCisjICh0ZWs0MDEzOiBhZGRlZCA8YWNzYz4gdG8gc3VwcHJlc3MgdGljIHdhcm5pbmdzIHJlIDxzbWFjcz4vPHJtYWNzPiAtLWVzcikKK3RlazQwMTN8dGVrdHJvbml4IDQwMTMsCisJYWNzYz0sIHJtYWNzPVxFXk8sIHNtYWNzPVxFXk4sIHVzZT10ZWs0MDEyLAordGVrNDAxNHx0ZWt0cm9uaXggNDAxNCwKKwljb2xzIzgxLCBsaW5lcyMzOCwKKwlpczI9XEVcMDE3XEU5LCB1c2U9dGVrNDAxMiwKKyMgKHRlazQwMTU6IGFkZGVkIDxhY3NjPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZ3MgcmUgPHNtYWNzPi88cm1hY3M+IC0tZXNyKQordGVrNDAxNXx0ZWt0cm9uaXggNDAxNSwKKwlhY3NjPSwgcm1hY3M9XEVeTywgc21hY3M9XEVeTiwgdXNlPXRlazQwMTQsCit0ZWs0MDE0LXNtfHRla3Ryb25peCA0MDE0IGluIHNtYWxsIGZvbnQsCisJY29scyMxMjEsIGxpbmVzIzU4LAorCWlzMj1cRVwwMTdcRVw6LCB1c2U9dGVrNDAxNCwKKyMgKHRlazQwMTUtc206IGFkZGVkIDxhY3NjPiB0byBzdXBwcmVzcyB0aWMgd2FybmluZ3MgcmUgPHNtYWNzPi88cm1hY3M+IC0tZXNyKQordGVrNDAxNS1zbXx0ZWt0cm9uaXggNDAxNSBpbiBzbWFsbCBmb250LAorCWFjc2M9LCBybWFjcz1cRV5PLCBzbWFjcz1cRV5OLCB1c2U9dGVrNDAxNC1zbSwKKyMgVGVrdHJvbml4IDQwMjMgZnJvbSBBbmRyZXcgS2xvc3NuZXIgPG9yY2EhYW5kcmV3LnRla3Ryb25peEBjc25ldC1yZWxheT4KKyMKKyMgWW91IG5lZWQgdG8gaGF2ZSAic3R0eSBubDIiIGluIGVmZmVjdC4gIFNvbWUgdmVyc2lvbnMgb2YgdHNldCgxKSBrbm93CisjIGhvdyB0byBzZXQgaXQgZm9yIHlvdS4KKyMKKyMgSXQncyBnb3QgdGhlIE1hZ2ljIENvb2tpZSBwcm9ibGVtIGFyb3VuZCBzdGFuZC1vdXQgbW9kZS4gIElmIHlvdSBjYW4ndAorIyBsaXZlIHdpdGggTWFnaWMgQ29va2llLCByZW1vdmUgdGhlIDpzbzogYW5kIDpzZTogZmllbGRzIGFuZCBkbyB3aXRob3V0CisjIHJldmVyc2UgdmlkZW8uICBJZiB5b3UgbGlrZSByZXZlcnNlIHZpZGVvIHN0YW5kLW91dCBtb2RlIGJ1dCBkb24ndCB3YW50CisjIGl0IHRvIGZsYXNoLCBjaGFuZ2UgdGhlIGxldHRlciAnSCcgdG8gJ1AnIGluIHRoZSA6c286IGZpZWxkLgordGVrNDAyM3x0ZWt0cm9uaXggNDAyMywKKwlPVGJzLCBhbSwKKwlPVGROIzQsIGNvbHMjODAsIGxpbmVzIzI0LCB2dCM0LCB4bWMjMSwKKwlPVG5sPV5KLCBiZWw9XkcsIGNsZWFyPVxFXDAxNCQ8NC8+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPV5JLCBjdXA9XDAzNCVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywga2JzPV5ILAorCXJtc289Xl9ALCBzbXNvPV5fUCwKKyMgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgcnVuIHRoZSA0MDI1IGF0IDQ4MDAgYmF1ZCBvciBsZXNzOworIyB2YXJpb3VzIGJ1Z3MgaW4gdGhlIHRlcm1pbmFsIGFwcGVhciBhdCA5NjAwLiAgSXQgd2VkZ2VzIGF0IHRoZQorIyBib3R0b20gb2YgbWVtb3J5ICh0cnkgImNhdCAvdXNyL2RpY3Qvd29yZHMiKTsgXlMgYW5kIF5RIHR5cGVkCisjIG9uIGtleWJvYXJkIGRvbid0IHdvcmsuICBZb3UgaGF2ZSB0byBoaXQgQlJFQUsgdHdpY2UgdG8gZ2V0CisjIG9uZSBicmVhayBhdCBhbnkgc3BlZWQgLSB0aGlzIGlzIGEgZG9jdW1lbnRlZCBmZWF0dXJlLgorIyBDYW4ndCB1c2UgY3Vyc29yIG1vdGlvbiBiZWNhdXNlIGl0J3MgbWVtb3J5IHJlbGF0aXZlLCBhbmQKKyMgYmVjYXVzZSBpdCBvbmx5IHdvcmtzIGluIHRoZSB3b3Jrc3BhY2UsIG5vdCB0aGUgbW9uaXRvci4KKyMgU2FtZSBmb3IgaG9tZS4gTGlrZXdpc2UsIHN0YW5kb3V0IG9ubHkgd29ya3MgaW4gdGhlIHdvcmtzcGFjZS4KKyMKKyMgPGVsPiB3YXMgY29tbWVudGVkIG91dCBzaW5jZSB2aSBhbmQgcm9ndWUgc2VlbSB0byB3b3JrIGJldHRlcgorIyBzaW11bGF0aW5nIGl0IHdpdGggbG90cyBvZiBzcGFjZXMhCisjCisjIDxpbDE+IGFuZCA8aWw+IGhhZCAxNDVtcyBvZiBwYWRkaW5nLCBidXQgdGhhdCBzbG93ZWQgZG93biB2aSdzIF5VCisjIGFuZCBkaWRuJ3Qgc2VlbSBuZWNlc3NhcnkuCisjCit0ZWs0MDI0fHRlazQwMjV8dGVrNDAyN3x0ZWt0cm9uaXggNDAyNC80MDI1LzQwMjcsCisJT1RicywgYW0sIGRhLCBkYiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzNCwgbG0jMCwKKwliZWw9XkcsIGNsZWFyPVwwMzdlcmFcclxuXG4sIGNtZGNoPV5fLCBjcj1eTSwKKwljdWI9XDAzN2xlZiAlcDElZFxyLCBjdWIxPV5ILCBjdWQ9XDAzN2RvdyAlcDElZFxyLAorCWN1ZDE9XkZeSiwgY3VmPVwwMzdyaWcgJXAxJWRcciwgY3VmMT1cMDM3cmlnXHIsCisJY3V1PVwwMzd1cCAlcDElZFxyLCBjdXUxPV5LLCBkY2gxPVwwMzdkY2hcciwKKwlkbD1cMDM3ZGxpICVwMSVkXHJcMDA2LCBkbDE9XDAzN2RsaVxyXDAwNiwKKwllZD1cMDM3ZGxpIDUwXHIsIGh0PV5JLCBpY2gxPVwwMzdpY2hcciBcMDEwLAorCWlsPVwwMzd1cFxyXDAzN2lsaSAlcDElZFxyLCBpbDE9XDAzN3VwXHJcMDM3aWxpXHIsCisJaW5kPV5GXkosCisJaXMyPSFjb20gMzFcclxuXDAzN3N0byA5IDE3IDI1IDMzIDQxIDQ5IDU3IDY1IDczXHIsCisJcm1reD1cMDM3bGVhIHAyXHJcMDM3bGVhIHA0XHJcMDM3bGVhIHA2XHJcMDM3bGVhIHA4XHJcMDM3bGVhIGY1XHIsCisJc21reD1cMDM3bGVhIHA0IC9oL1xyXDAzN2xlYSBwOCAvay9cclwwMzdsZWEgcDYgLyAvXHJcMDM3bGVhIHAyIC9qL1xyXDAzN2xlYSBmNSAvSC9cciwKK3RlazQwMjUtMTd8dGVrIDQwMjUgMTcgbGluZSB3aW5kb3csCisJbGluZXMjMTcsIHVzZT10ZWs0MDI1LAordGVrNDAyNS0xNy13c3x0ZWsgNDAyNSAxNyBsaW5lIHdpbmRvdyBpbiB3b3Jrc3BhY2UsCisJaXMyPSFjb20gMzFcclxuXDAzN3N0byA5IDE3IDI1IDMzIDQxIDQ5IDU3IDY1IDczXHJcMDM3d29yIDE3XHJcMDM3bW9uIDE3XHIsCisJcm1jdXA9XDAzN21vbiBoXHIsIHJtc289XDAzN2F0dCBzXHIsIHNtY3VwPVwwMzd3b3IgaFxyLAorCXNtc289XDAzN2F0dCBlXHIsIHVzZT10ZWs0MDI1LTE3LAordGVrNDAyNS1leHx0ZWs0MDI3LWV4fHRlayA0MDI1LzQwMjcgdy8hLAorCWlzMj1cMDM3Y29tIDMzXHJcbiFzdG8gOSAxNyAyNSAzMyA0MSA0OSA1NyA2NSA3M1xyLAorCXJtY3VwPVwwMzdjb20gMzNcciwgc21jdXA9IWNvbSAzMVxyLCB1c2U9dGVrNDAyNSwKKyMgVGVrdHJvbml4IDQwMjVhCisjIEZyb206IERvdWcgR3d5biA8Z3d5bkBicmwtc21va2UuQVJQQT4KKyMgVGhlIGZvbGxvd2luZyBzdGF0dXMgbW9kZXMgYXJlIGFzc3VtZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24gKHJlcGxhY2UgdGhlCisjIGluaXRpYWwgIiEiIGJ5IHdoYXRldmVyIHRoZSBjdXJyZW50IGNvbW1hbmQgY2hhcmFjdGVyIGlzKToKKyMJIUNPTSAyOQkJCSMgTk9URTogY2hhbmdlcyBjb21tYW5kIGNoYXJhY3RlciB0byBHUyAoXl0pCisjCV5dRFVQCisjCV5dRUNIIFIKKyMJXl1FT0wKKyMJXl1SU1MgVAorIwleXVNOTyBOCisjCV5dU1RPIDkgMTcgMjUgMzMgNDEgNDkgNTcgNjUgNzMKKyMgT3RoZXIgbW9kZXMgbWF5IGJlIHNldCBhY2NvcmRpbmcgdG8gY29tbXVuaWNhdGlvbiByZXF1aXJlbWVudHMuCisjIElmIHRoZSBjb21tYW5kIGNoYXJhY3RlciBpcyBpbmFkdmVydGVudGx5IGNoYW5nZWQsIHRlcm1jYXAgY2FuJ3QgcmVzdG9yZSBpdC4KKyMgSW5zZXJ0LWNoYXJhY3RlciBjYW5ub3QgYmUgbWFkZSB0byB3b3JrIG9uIGJvdGggdG9wIGFuZCBib3R0b20gcm93cy4KKyMgQ2xlYXItdG8tZW5kLW9mLWRpc3BsYXkgZW11bGF0aW9uIHZpYSAhRExJIDk4OCBpcyB0b28gZ3JvdHR5IHRvIHVzZSwgYWxhcy4KKyMgVGhlcmUgYWxzbyBzZWVtcyB0byBiZSBhIHByb2JsZW0gd2l0aCB2ZXJ0aWNhbCBtb3Rpb24sIHBlcmhhcHMgaW52b2x2aW5nCisjIGRlbGV0ZS9pbnNlcnQtbGluZSwgZm9sbG93aW5nIGEgdHlwZWQgY2FycmlhZ2UgcmV0dXJuLiAgVGhpcyB0ZXJtaW5hbCBzdWNrcy4KKyMgRGVsYXlzIG5vdCBzcGVjaWZpZWQ7IHVzZSAic3R0eSBpeG9uIC1peGFueSIgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyAodGVrNDAyNWE6IHJlbW92ZWQgb2Jzb2xldGUgIjp4eDoiLiBUaGlzIG1heSBtZWFuIHRoZSB0ZWs0MDI1YSBlbnRyeSB3b24ndAorIyB3b3JrIGFueSBtb3JlLiAtLSBlc3IpCit0ZWs0MDI1YXxUZWt0cm9uaXggNDAyNUEsCisJT1RicywgT1RwdCwgYW0sIGJ3LCBkYSwgZGIsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzNCwKKwliZWw9XkcsIGNidD1cMDM1YmFjOywgY2xlYXI9XDAzNWVyYTtcblwwMzVydXA7LCBjbWRjaD1eXSwKKwljcj1eTSwgY3ViPVwwMzVsZWYgJXAxJWQ7LCBjdWIxPV5ILCBjdWQ9XDAzNWRvdyAlcDElZDssCisJY3VkMT1eSiwgY3VmPVwwMzVyaWcgJXAxJWQ7LCBjdWYxPVwwMzVyaWc7LAorCWN1dT1cMDM1dXAgJXAxJWQ7LCBjdXUxPV5LLCBkY2g9XDAzNWRjaCAlcDElZDssCisJZGNoMT1cMDM1ZGNoOywgZGw9XDAzNWRsaSAlcDElZDssIGRsMT1cMDM1ZGxpOywKKwllbD1cMDM1ZGNoIDgwOywgaHBhPVxyXDAzNXJpZyAlcDElZDssIGh0PV5JLAorCWlsMT1cMDEzXDAzNWlsaTssIGluZD1eSiwgaW5kbj1cMDM1ZG93ICVwMSVkOywKKwlyczI9IWNvbSAyOVwwMzVkZWwgMFwwMzVyc3MgdFwwMzVidWZcMDM1YnVmIG5cMDM1Y2xlXDAzNWRpc1wwMzVkdXBcMDM1ZWNoIHJcMDM1ZW9sXDAzNWVyYSBnXDAzNWZvciBuXDAzNXBhZCAyMDNcMDM1cGFkIDIwOVwwMzVzbm8gblwwMzVzdG8gOSAxNyAyNSAzMyA0MSA0OSA1NyA2NSA3M1wwMzV3b3IgMDssCisJdGJjPVwwMzVzdG87LAorIyBGcm9tOiBjYm9zZyF0ZWtsYWJzIWRhdmVtIFdlZCBTZXAgMTYgMjE6MTE6NDEgMTk4MQorIyBIZXJlJ3MgdGhlIGNvbW1hbmQgZmlsZSB0aGF0IEkgdXNlIHRvIGdldCByb2d1ZSB0byB3b3JrIG9uIHRoZSA0MDI1LgorIyBJdCBzaG91bGQgd29yayB3aXRoIGFueSBwcm9ncmFtIHVzaW5nIHRoZSBvbGQgY3Vyc2VzIChlLmcuIGl0IGJldHRlcgorIyBub3QgdHJ5IHRvIHNjcm9sbCwgb3IgY3Vyc29yIGFkZHJlc3Npbmcgd29uJ3Qgd29yay4gIEFsc28sIHlvdSBjYW4ndAorIyBzZWUgdGhlIGN1cnNvci4pCisjIChUaGlzICJsZWFybnMiIHRoZSBhcnJvdyBrZXlzIGZvciByb2d1ZS4gSSBoYXZlIGFkYXB0ZWQgaXQgZm9yIHRlcm1jYXAgLSBtcmgpCit0ZWs0MDI1LWNyfHRlayA0MDI1IGZvciBjdXJzZXMgYW5kIHJvZ3VlLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzMzLAorCWNsZWFyPVwwMzdlcmE7LCBjdWIxPV5ILCBjdWQxPV5GXkosIGN1ZjE9XDAzN3JpZzssCisJY3VwPVwwMzdqdW0laSVwMSVkXCwlcDIlZDssIGN1dTE9XkssIGh0PV5JLCBpbmQ9XkZeSiwKKwlpczI9IWNvbSAzMVxyXG5cMDM3c3RvIDkgMTcgMjUgMzMgNDEgNDkgNTcgNjUgNzNcciwKKwlybWN1cD1cMDM3d29yIDAsIHNtY3VwPVwwMzd3b3IgMzNoLAorIyBuZXh0IHR3byBsaW5lcyBjb21tZW50ZWQgb3V0IHNpbmNlIGN1cnNlcyBvbmx5IGFsbG93cyAxMjggY2hhcnMsIHNpZ2guCisjCTp0aT1cMDM3bGVhIHAxL2IvXDAzN2xlYSBwMi9qL1wwMzdsZWEgcDMvbi9cMDM3bGVhIHA0L2gvXDAzN2xlYSBwNS8gL1wwMzdsZWEgcDYvbC9cMDM3bGVhIHA3L3kvXDAzN2xlYSBwOC9rL1wwMzdsZWEgcDkvdS9cMDM3bGVhIHAuL2YvXDAzN2xlYSBwdC9gZXJhIHcvMTNcMDM3bGVhIHAwL3MvXDAzN3dvciAzM2g6XAorIwk6dGU9XDAzN2xlYSBwMVwwMzdsZWEgcDJcMDM3bGVhIHAzXDAzN2xlYSBwNFwwMzdsZWEgcHRcMDM3bGVhIHA1XDAzN2xlYSBwNlwwMzdsZWEgcDdcMDM3bGVhIHA4XDAzN2xlYSBwOS9sYS8xM1wwMzdsZWEgcC5cMDM3bGVhIHAwXDAzN3dvciAwOgordGVrNDAyNWV4fDQwMjVleHw0MDI3ZXh8dGVrIDQwMjUgdy8hLAorCWlzMj1cMDM3Y29tIDMzXHJcbiFzdG8gOVwsMTdcLDI1XCwzM1wsNDFcLDQ5XCw1N1wsNjVcLDczXHIsCisJcm1jdXA9XDAzN2NvbSAzM1xyLCBzbWN1cD0hY29tIDMxXHIsIHVzZT10ZWs0MDI1LAordGVrNDEwNXx0ZWt0cm9uaXggNDEwNSwKKwlPVGJzLCBhbSwgbWlyLCBtc2dyLCB1bCwgeGVubCwgeHQsCisJY29scyM3OSwgaXQjOCwgbGluZXMjMjksCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XEVbPTM7PDdtLCBib2xkPVxFWz03Ozw0bSwgY2J0PVxFW1osCisJY2xlYXI9XEVbMkpcRVtILCBjcj1eTSwgY3VkMT1cRVsxQiwgY3VmMT1cRVsxQywKKwljdXA9XEVbJWklcDElMmQ7JXAyJTJkSCwgY3V1MT1cRVsxQSwgZGNoMT1cRVsxUCwKKwlkaW09XEVbPTE7PDZtLCBkbDE9XEVbMU0sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksCisJaWwxPVxFWzFMLCBpbmQ9XEVbUywgaW52aXM9XEVbPTY7PDUsIGlzMT1cRSUhMVxFW20sCisJaXMyPVxFJSExXEVbPzYxNDFcRVttLCBrYnM9XkgsIGtjdWIxPVxFWzFELCBrY3VkMT1cRVsxQiwKKwlrY3VmMT1cRVsxQywga2N1dTE9XEVbMUEsIHJldj1cRVs9MTs8M20sIHJpPVxFW1QsCisJcm1hY3M9XEVbbSwgcm1jdXA9LCBybWlyPVxFWzRsLCBybXNvPVxFWz0wOzwxbSwKKwlybXVsPVxFWz0wOzwxbSwgc2dyMD1cRVs9MDs8MW0sIHNtYWNzPVxFWzFtLAorCXNtY3VwPVxFJSExXEVbPzZsXEVbMkosIHNtaXI9XEVbNGgsIHNtc289XEVbPTI7PDNtLAorCXNtdWw9XEVbPTU7PDJtLCB0YmM9XEVbMWcsCisKKyMgKHRlazQxMDUtMzA6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQordGVrNDEwNS0zMHw0MDE1IGVtdWxhdGluZyAzMCBsaW5lIHZ0MTAwLAorCWFtLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzMCwgdnQjMywKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWJlbD1eRywgYmxpbms9XEVbNW0kPDI+LCBib2xkPVxFWzFtJDwyPiwKKwljbGVhcj1cRVtIXEVbSiQ8NTA+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDJDwyPiwKKwljdXA9XEVbJWklcDElZDslcDIlZEgkPDU+LCBjdXU9XEVbJXAxJWRBLAorCWN1dTE9XEVbQSQ8Mj4sIGVkPVxFW0okPDUwPiwgZWw9XEVbSyQ8Mz4sIGVsMT1cRVsxSyQ8Mz4sCisJZW5hY3M9XEUoQlxFKTAsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGluZD1eSiwga2JzPV5ILAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIHJjPVxFOCwKKwlyZXY9XEVbN20kPDI+LCByaT1cRU0kPDU+LCBybWFjcz1eTywgcm1hbT1cRVs/N2wsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSQ8Mj4sIHJtdWw9XEVbbSQ8Mj4sCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncj1cRVswJT8lcDElcDYlfCV0OzElOyU/JXAyJXQ7NCU7JT8lcDElcDMlfCV0OzclOyU/JXA0JXQ7NSU7bSU/JXA5JXRcMDE2JWVcMDE3JTskPDI+LAorCXNncjA9XEVbbVwwMTckPDI+LCBzbWFjcz1eTiwgc21hbT1cRVs/N2gsIHNta3g9XEVbPzFoXEU9LAorCXNtc289XEVbMTs3bSQ8Mj4sIHNtdWw9XEVbNG0kPDI+LCB0YmM9XEVbM2csCisJdXNlPXZ0MTAwK2Zua2V5cywKKworIyBUZWt0cm9uaXggNDEwNSBmcm9tIEJSTAorIyBUaGUgZm9sbG93aW5nIHNldHVwIG1vZGVzIGFyZSBhc3N1bWVkIGZvciBub3JtYWwgb3BlcmF0aW9uOgorIwlDT0RFIGFuc2kJCUNSTEYgbm8JCQlEQUJVRkZFUiAxNDEKKyMJREFFTkFCTEUgeWVzCQlEQUxJTkVTIDMwCQlEQU1PREUgcmVwbGFjZQorIwlEQVZJU0lCSUxJVFkgeWVzCUVDSE8gbm8JCQlFRElUTUFSR0lOUyAxIDMwCisjCUZMQUdHSU5HIGlucHV0CQlJTlNFUlRSRVBMQUNFIHJlcGxhY2UJTEZDUiBubworIwlPUklHSU5NT0RFIHJlbGF0aXZlCVBST01QVE1PREUgbm8JCVNFTEVDVENIQVJTRVQgRzAgQgorIwlTRUxFQ1RDSEFSU0VUIEcxIDAJVEFCUyAtMgorIyBPdGhlciBzZXR1cCBtb2RlcyBtYXkgYmUgc2V0IGZvciBvcGVyYXRvciBjb252ZW5pZW5jZSBvciBjb21tdW5pY2F0aW9uCisjIHJlcXVpcmVtZW50czsgSSByZWNvbW1lbmQKKyMJQUNVUlNPUiAxIDAJCUFVVE9SRVBFQVQgeWVzCQlBVVRPV1JBUCB5ZXMKKyMJQllQQVNTQ0FOQ0VMIDxMRj4JQ1VSU09SS0VZTU9ERSBubwlEQUlOREVYIDEgMCAwCisjCUVPRlNUUklORyAnJwkJRU9MU1RSSU5HIDxDUj4JCUVPTUNIQVJTIDxDUj4gPE5VPgorIwlHQU1PREUgb3ZlcnN0cmlrZQlHQ1VSU09SIDAgMTAwIDAJCUdTUEVFRCAxMCAxCisjCUlHTk9SRURFTCBubwkJS0VZRVhDSEFSIDxETD4JCU5WREVGSU5FIC01MyAiPE5VPiIKKyMJUFJPTVBUU1RSSU5HICcnCQlRVUVVRVNJWkUgMjQ2MAkJV0lORE9XIDAgMCA0MDk1IDMxMzIKKyMJWE1UREVMQVkgMAorIyBhbmQgZmFjdG9yeSBjb2xvciBtYXBzLiAgQWZ0ZXIgc2V0dGluZyB0aGVzZSBtb2Rlcywgc2F2ZSB0aGVtIHdpdGggTlZTQVZFLiBObworIyBkZWxheXMgYXJlIHNwZWNpZmllZDsgdXNlICJzdHR5IGl4b24gLWl4YW55IiB0byBlbmFibGUgREMzL0RDMSBmbG93IGNvbnRyb2whCisjICJJQyIgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCAiaW0iICYgImVpIi4KKyMgInRlazQxMDVhIiBpcyBqdXN0IGEgZ3Vlc3M6Cit0ZWs0MTA1YXxUZWt0cm9uaXggNDEwNSwKKwlPVGJzLCBPVHB0LCBtc2dyLCB4b24sCisJT1RrbiM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMzMCwgdnQjMywKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osCisJY2l2aXM9XEUlITBcRVREMDBcRSUhMSwgY2xlYXI9XEVbSFxFW0osCisJY25vcm09XEUlITBcRVREMTBcRSUhMSwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVNLCBjdnZpcz1cRSUhMFxFVEQ3MFxFJSExLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLCBkbDE9XEVbTSwKKwllY2g9XEVbJXAxJWRYLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaW5kbj1cRVslcDElZFMsIGlzMj1cRSUhMSwKKwlrYnM9XkgsIGtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsCisJa2YwPVxFT0EsIGtmMT1cRU9CLCBrZjI9XEVPQywga2YzPVxFT0QsIGtmND1cRU9QLCBrZjU9XEVPUSwKKwlrZjY9XEVPUiwga2Y3PVxFT1MsIGxmMD1GMSwgbGYxPUYyLCBsZjI9RjMsIGxmMz1GNCwgbGY0PUY1LAorCWxmNT1GNiwgbGY2PUY4LCBsbD1cRVszMDtILCBuZWw9XEVFLCByYz1cRTgsIHJldj1cRVs3bSwgcmk9XEVNLAorCXJpbj1cRVslcDElZFQsIHJtYWNzPV5PLCBybWN1cD1cRSUhMFxFTEJIPVxFJSExLAorCXJtaXI9XEVbNGwsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczI9XDAzMFxFJSEwXEVLQ1xFXDAxNFxFS1IwXEVLRjBcRU5NMFxFTEJIPVxFVEY4MDAwMDEwRjQwXEVMSTEwMFxFTExBPlxFTE0wXEVLRTBcRU5GMVxFS1MwXEVORDBcRSUhMVxFY1xFWz8zOzVsXEVbPzc7OGhcRVtyXEVbbVxFPiwKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21hY3M9Xk4sIHNtY3VwPVxFWz82bCwgc21pcj1cRVs0aCwKKwlzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCisjCisjIFRla3Ryb25peCA0MTA2LzQxMDcvNDEwOSBmcm9tIEJSTAorIyBUaGUgZm9sbG93aW5nIHNldHVwIG1vZGVzIGFyZSBhc3N1bWVkIGZvciBub3JtYWwgb3BlcmF0aW9uOgorIwlDT0RFIGFuc2kJCUNPTFVNTk1PREUgODAJCUNSTEYgbm8KKyMJREFCVUZGRVIgMTQxCQlEQUVOQUJMRSB5ZXMJCURBTElORVMgMzIKKyMJREFNT0RFIHJlcGxhY2UJCURBVklTSUJJTElUWSB5ZXMJRUNITyBubworIwlFRElUTUFSR0lOUyAxIDMyCUZMQUdHSU5HIGlucHV0CQlJTlNFUlRSRVBMQUNFIHJlcGxhY2UKKyMJTEZDUiBubwkJCUxPQ0tLRVlCT0FSRCBubwkJT1JJR0lOTU9ERSByZWxhdGl2ZQorIwlQUk9NUFRNT0RFIG5vCQlTRUxFQ1RDSEFSU0VUIEcwIEIJU0VMRUNUQ0hBUlNFVCBHMSAwCisjCVRBQlMgLTIKKyMgT3RoZXIgc2V0dXAgbW9kZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHM7IEkgcmVjb21tZW5kCisjCUFDVVJTT1IgMSAwCQlBVVRPUkVQRUFUIHllcwkJQVVUT1dSQVAgeWVzCisjCUJZUEFTU0NBTkNFTCA8TEY+CUNVUlNPUktFWU1PREUgbm8JREFJTkRFWCAxIDAgMAorIwlFT0ZTVFJJTkcgJycJCUVPTFNUUklORyA8Q1I+CQlFT01DSEFSUyA8Q1I+IDxOVT4KKyMJR0FNT0RFIG92ZXJzdHJpa2UJR0NVUlNPUiAwIDEwMCAwCQlHU1BFRUQgOSAzCisjCUlHTk9SRURFTCBubwkJS0VZRVhDSEFSIDxETD4JCU5WREVGSU5FIC01MyAiPE5VPiIKKyMJUFJPTVBUU1RSSU5HICcnCQlRVUVVRVNJWkUgMjYyMAkJV0lORE9XIDAgMCA0MDk1IDMxMzIKKyMJWE1UREVMQVkgMAorIyBhbmQgZmFjdG9yeSBjb2xvciBtYXBzLiAgQWZ0ZXIgc2V0dGluZyB0aGVzZSBtb2Rlcywgc2F2ZSB0aGVtIHdpdGggTlZTQVZFLiAgTm8KKyMgZGVsYXlzIGFyZSBzcGVjaWZpZWQ7IHVzZSAic3R0eSBpeG9uIC1peGFueSIgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyAiSUMiIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggImltIiAmICJlaSIuCit0ZWs0MTA2YnJsfHRlazQxMDdicmx8dGVrNDEwOWJybHxUZWt0cm9uaXggNDEwNiA0MTA3IG9yIDQxMDksCisJbXNnciwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzMyLCB2dCMzLAorCWFjc2M9LCBiZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwKKwljaXZpcz1cRSUhMFxFVEQwMFxFJSExLCBjbGVhcj1cRVtIXEVbSiwKKwljbm9ybT1cRSUhMFxFVEQxMFxFJSExLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XkosCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRU0sIGN2dmlzPVxFJSEwXEVURDcwXEUlITEsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsCisJaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLCBpbmRuPVxFWyVwMSVkUywgaXMyPVxFJSExLAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZjA9XEVPQSwga2YxPVxFT0IsIGtmMj1cRU9DLCBrZjM9XEVPRCwga2Y0PVxFT1AsIGtmNT1cRU9RLAorCWtmNj1cRU9SLCBrZjc9XEVPUywgbGYwPUYxLCBsZjE9RjIsIGxmMj1GMywgbGYzPUY0LCBsZjQ9RjUsCisJbGY1PUY2LCBsZjY9RjgsIGxsPVxFWzMyO0gsIG5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sCisJcmluPVxFWyVwMSVkVCwgcm1hY3M9Xk8sIHJtY3VwPVxFJSEwXEVMQkg9XEUlITEsCisJcm1pcj1cRVs0bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMT1cMDMwXEUlITBcRUtDXEVcMDE0XEVLUjBcRUtGMFxFTk0wXEVMQkg9XEVURjgwMDAwMTBGNDBcRUxJMTAwXEVMTEIwXEVMTTBcRUtFMFxFTkYxXEVLUzBcRU5EMFxFUkUwXEUlITFcRWNcRVs/Mzs1bFxFWz83OzhoXEVbclxFW21cRT4sCisJc2M9XEU3LCBzZ3IwPVxFW20sIHNtYWNzPV5OLCBzbWN1cD1cRVs/NmwsIHNtaXI9XEVbNGgsCisJc21reD1cRVs/MWhcRT0sIHNtc289XEVbNzs0Mm0sIHNtdWw9XEVbNG0sIHRiYz1cRVszZywKKwordGVrNDEwN3x0ZWs0MTA5fHRla3Ryb25peCB0ZXJtaW5hbHMgNDEwNyA0MTA5LAorCU9UYnMsIGFtLCBtaXIsIG1zZ3IsIHVsLCB4ZW5sLCB4dCwKKwljb2xzIzc5LCBpdCM4LCBsaW5lcyMyOSwKKwliZWw9XkcsIGJsaW5rPVxFJSExXEVbNW0kPDI+XEUlITAsCisJYm9sZD1cRSUhMVxFWzFtJDwyPlxFJSEwLCBjbGVhcj1cRUxaLCBjbm9ybT1cRSUhMCwgY3I9Xk0sCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGN2dmlzPVxFJSEzLAorCWRpbT1cRSUhMVxFWzwwbSQ8Mj5cRSUhMCwgZWQ9XEVKLCBlbD1cRUssIGh0PV5JLCBpbmQ9XkosCisJa2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsCisJcmV2PVxFJSExXEVbN20kPDI+XEUlMCwgcmk9XEVJLAorCXJtc289XEUlITFcRVttJDwyPlxFJSEwLCBybXVsPVxFJSExXEVbbSQ8Mj5cRSUhMCwKKwlzZ3I9XEUlJSExXEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20kPDI+XEUlJSEwLAorCXNncjA9XEUlITFcRVttJDwyPlxFJSEwLCBzbXNvPVxFJSExXEVbNzs1bSQ8Mj5cRSUhMCwKKwlzbXVsPVxFJSExXEVbNG0kPDI+XEUlITAsCisjIFRla3Ryb25peCA0MjA3IHdpdGggc3lzbGluZS4gIEluIHRoZSBhbmNlc3RyYWwgdGVybWNhcCBmaWxlIHRoaXMgd2FzIDQxMDctczsKKyMgc2VlIHRoZSBub3RlIGF0dGFjaGVkIHRvIHRlazQyMDcuCit0ZWs0MjA3LXN8VGVrdHJvbml4IDQyMDcgd2l0aCBzeXNsaW5lIGJ1dCBubyBtZW1vcnksCisJZXNsb2ssIGhzLAorCWRzbD1cRTdcRVs/NmxcRVsyS1xFWz82aFxFOCwgZnNsPVxFWz82aFxFOCwKKwlpczE9XEUlITFcRVsyOzMyclxFWzEzMkRcRVsyZ1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFW0osCisJaXMyPVxFN1xFWz82bFxFWzJLXEVbPzZoXEU4LAorCXRzbD1cRTdcRVs/NmxcRVsyS1xFWzslaSVkZiwgdXNlPXRlazQxMDcsCisKKyMgVGhlIDQxMTAgc2VyaWVzIG1heSBiZSBhIHdvbmRlcmZ1bCBncmFwaGljcyBzZXJpZXMsIGJ1dCB0aGV5IG1ha2UgdGhlIDQwMjUKKyMgbG9vayBnb29kIGZvciBzY3JlZW4gZWRpdGluZy4gIEluIHRoZSBkaWFsb2cgYXJlYSwgeW91IGNhbid0IG1vdmUgdGhlIGN1cnNvcgorIyBvZmYgdGhlIGJvdHRvbSBsaW5lLiAgT3V0IG9mIHRoZSBkaWFsb2cgYXJlYSwgXksgbW92ZXMgaXQgdXAsIGJ1dCB0aGVyZQorIyBpcyBubyB3YXkgdG8gc2Nyb2xsLgorIworIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBmbG9wcHkgZm9yIGZyZWUgZnJvbSBUZWsgdGhhdCBtYWtlcyB0aGUKKyMgNDExMiBlbXVsYXRlIHRoZSB2dDUyICh1c2UgdGhlIHZ0NTIgdGVybWNhcCkuIFRoZXJlIGlzIGFsc28KKyMgYW4gZXhwZWN0ZWQgZW5oYW5jZW1lbnQgdGhhdCB3aWxsIHVzZSBBTlNJIHN0YW5kYXJkIHNlcXVlbmNlcy4KKyMKKyMgNDExMiBpbiBub24tZGlhbG9nIGFyZWEgcHJldGVuZGluZyB0byBzY3JvbGwuIEl0IHJlYWxseSB3cmFwcworIyBidXQgdmkgaXMgc2FpZCB0byB3b3JrIChtb3JlIG9yIGxlc3MpIGluIHRoaXMgbW9kZS4KKyMKKyMgJ3ZpJyB3b3JrcyByZWFzb25hYmx5IHdlbGwgd2l0aCB0aGlzIGVudHJ5LgorIworb3RlazQxMTJ8bzQxMTItbmR8b3RlazQxMTN8b3RlazQxMTR8b2xkIHRla3Ryb25peCA0MTEwIHNlcmllcywKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMzNCwKKwliZWw9XkcsIGNsZWFyPVxFXkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdXUxPV5LLCBpbmQ9XkosCisJcm1jdXA9XEVLQTFcRUxWMSwgc21jdXA9XEVLQTBcRUxWMFxFTUcwLAorIyBUaGUgNDExMiB3aXRoIHRoZSBBTlNJIGNvbXBhdGliaWxpdHkgZW5oYW5jZW1lbnQKK3RlazQxMTJ8dGVrNDExNHx0ZWt0cm9uaXggNDExMCBzZXJpZXMsCisJT1RicywgYW0sIGRiLAorCWNvbHMjODAsIGxpbmVzIzM0LAorCWNidD1cRVtaLCBjbGVhcj1cRVsySlxFWzA7MEgsIGN1YjE9XkgsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVNLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFWzBKLCBlbD1cRVswSywgaWNoMT1cRVtALCBpbDE9XEVbTCwKKwlpbmQ9XEU3XEVbMDswSFxFW01cRTgsIGlzMj1cRTMhMSwgcmk9XEU3XEVbMDswSFxFW0xcRTgsCisJcm1zbz1cRVttLCBybXVsPVxFW20sIHNncjA9XEVbbSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKK3RlazQxMTItbmR8NDExMiBub3QgaW4gZGlhbG9nIGFyZWEsCisJT1RucywKKwljdXUxPV5LLCB1c2U9dGVrNDExMiwKK3RlazQxMTItNXw0MTEyIGluIDUgbGluZSBkaWFsb2cgYXJlYSwKKwlsaW5lcyM1LCB1c2U9dGVrNDExMiwKKyMgKHRlazQxMTM6IHRoaXMgdXNlZCB0byBoYXZlICI8Y3VmMT1cTE0xXHNcTE0wPiIsIHNvbWVvbmUncyBtaXN0YWtlOworIyByZW1vdmVkICI8c21hY3M9XEVeTj4sIDxybWFjcz1cRV5PPiIsIHdoaWNoIGhhZCBiZWVuIGNvbW1lbnRlZCBvdXQgaW4gOC4zLgorIyBOb3RlLCB0aGUgITAgYW5kICExIHNlcXVlbmNlcyBpbiA8cm1jdXA+LzxzbWN1cD4vPGNub3JtPi88Y2l2aXM+IHdlcmUKKyMgcHJldmlvdXNseSBcMDQxMCBhbmQgXDA0MTEgc2VxdWVuY2VzLi4uSSBkb24ndCAqdGhpbmsqIHRoZXkgd2VyZSBzdXBwb3NlZAorIyB0byBiZSA0LWRpZ2l0IG9jdGFsIC0tIGVzcikKK3RlazQxMTN8dGVrdHJvbml4IDQxMTMgY29sb3IgZ3JhcGhpY3Mgd2l0aCA1IGxpbmUgZGlhbG9nIGFyZWEsCisJT1RicywgYW0sIGRhLCBlbywKKwljb2xzIzgwLCBsaW5lcyM1LAorCWNsZWFyPVxFTFosIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVMTTEgXEVMTTAsCisJZmxhc2g9XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQkE0XEVSQjAsCisJaXMyPVxFS0ExXEVMTDVcRUxWMFxFTFYxLCB1Yz1cMDEwXEVMTTFfXEVMTTAsCit0ZWs0MTEzLTM0fHRla3Ryb25peCA0MTEzIGNvbG9yIGdyYXBoaWNzIHdpdGggMzQgbGluZSBkaWFsb2cgYXJlYSwKKwlsaW5lcyMzNCwKKwlpczI9XEVLQTFcRUxMQjJcRUxWMFxFTFYxLCB1c2U9dGVrNDExMywKKyMgOm5zOiBsZWZ0IG9mZiB0byBhbGxvdyB2aSB2aXN1YWwgbW9kZS4gQVBMIGZvbnQgKDphcz1cRV5OOi86YWU9XEVeTzopIG5vdAorIyBzdXBwb3J0ZWQgaGVyZS4gOnVjOiBpcyBzbG93LCBidXQgbG9va3MgbmljZS4gU3VnZ2VzdCBzZXRlbnYgTU9SRSAtdXAgLgorIyA6dmI6IG5lZWRzIGVub3VnaCBkZWxheSB0byBsZXQgeW91IHNlZSB0aGUgYmFja2dyb3VuZCBjb2xvciBiZWluZyB0b2dnbGVkLgordGVrNDExMy1uZHx0ZWt0cm9uaXggNDExMyBjb2xvciBncmFwaGljcyB3aXRoIG5vIGRpYWxvZyBhcmVhLAorCU9UYnMsIGFtLCBlbywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMzNCwKKwljbGVhcj1cRV5MLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5JLCBjdXUxPV5LLAorCWN2dmlzPVxFTFpcRUtBMCwKKwlmbGFzaD1cRVJCQTRcRVJCQTRcRVJCQTRcRVJCQTRcRVJCQTRcRVJCQTRcRVJCQTRcRVJCQTRcRVJCQTRcRVJCQTRcRVJCMCwKKwlob21lPVxFTEY3bFwxNzcgQCwgaHQ9XkksIGlzMj1cRUxaXEVLQTBcRUxGN2xcMTc3IEAsCisJbGw9XEVMRiBobCBALCBybXNvPVxFTVQxLCBzbXNvPVxFTVQyLCB1Yz1cMDEwXEVNRzFfXEVNRzAsCisjIFRoaXMgZW50cnkgaXMgZnJvbSBUZWsuIEluYy4gIChCcmlhbiBCaWVobCkKKyMgKHRlazQxMTU6IDpiYzogcmVuYW1lZCB0byA6bGU6LCA8cm1hbT4vPHNtYW0+IGFkZGVkIGJhc2VkIG9uIGluaXQgc3RyaW5nIC0tIGVzcikKK290ZWs0MTE1fFRla3Ryb25peCA0MTE1LAorCU9UYnMsIGFtLCBkYSwgZGIsIGVvLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzM0LAorCWNidD1cRVtaLCBjbGVhcj1cRVtIXEVbMkosCisJY25vcm09XEUlITBcRUxCRzhcRSUhMVxFWzM0OzFILCBjdWIxPVxFW0QsIGN1ZDE9XEVbQiwKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLAorCWN2dmlzPVxFJSEwXEVMQkIyXEUlITEsIGRjaDE9XEVbUCwgZGwxPVxFW00sIGVkPVxFW0osCisJZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWY9L3Vzci9zaGFyZS90YWJzZXQvdnQxMDAsCisJaWwxPVxFW0wsCisJaXMyPVxFJSEwXEUlXDAxNFxFTFYwXEVLQTFcRUxCQjJcRU5VQD1cRUxMQjJcRUxNMFxFTFYxXEVLWUE/XEUlITFcRVs8MWxcRVs/N2hcRVs/OGhcRVszNDsxSFxFWzM0QlxFW20sCisJa2JzPV5ILCByaT1cRU0sIHJtYW09XEVbPzdsLAorCXJtY3VwPVxFJSEwXEVMQkc4XEUlITFcRVszNDsxSFxFW0osIHJtaXI9XEVbNGwsCisJcm1reD1cRT4sIHJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtYW09XEVbPzdoLAorCXNtY3VwPVxFJSEwXEVMQkIyXEUlITEsIHNtaXI9XEVbNGgsIHNta3g9XEU9LCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sCit0ZWs0MTE1fG5ld2VyIHRla3Ryb25peCA0MTE1IGVudHJ5IHdpdGggbW9yZSBBTlNJIGNhcGFiaWxpdGllcywKKwlhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzM0LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbSiwKKwljcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGhwYT1cRVslcDElezF9JSslZEcsCisJaHQ9XkksIGh0cz1cRUgsIGljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XkosIGludmlzPVxFWzhtLCBrYnM9XkgsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2hvbWU9XEVbSCwKKwlyZXA9JXAxJWNcRVslcDIlezF9JS0lZGIsIHJldj1cRVs3bSwgcm1hbT1cRVs/N2wsCisJcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyPVxFWyU/JXAxJXQ3OyU7JT8lcDIldDQ7JTslPyVwMyV0NzslOyU/JXA0JXQ1OyU7JT8lcDYldDE7JTttLAorCXNncjA9XEVbbSwgc21hbT1cRVs/N2gsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRiYz1cRVsyZywKKwl2cGE9XEVbJXAxJXsxfSUrJWRkLAorIyBUaGUgdGVrNDEyNSBlbXVsYXRlcyBhIHZ0MTAwIGluY29ycmVjdGx5IC0gdGhlIHNjcm9sbGluZyByZWdpb24KKyMgY29tbWFuZCBpcyBpZ25vcmVkLiAgVGhlIGZvbGxvd2luZyBlbnRyeSByZXBsYWNlcyA8Y3NyPiB3aXRoIHRoZSBuZWVkZWQKKyMgPGlsPiwgPGlsPiwgYW5kIDxzbWlyPjsgcmVtb3ZlcyBzb21lIGN1cnNvciBwYWQgY29tbWFuZHMgdGhhdCB0aGUgdGVrNDEyNQorIyBjaG9rZXMgb247IGFuZCBhZGRzIGEgbG90IG9mIGluaXRpYWxpemF0aW9uIGZvciB0aGUgdGVrIGRpYWxvZyBhcmVhLgorIyBOb3RlIHRoYXQgdGhpcyBlbnRyeSB1c2VzIGFsbCAzNCBsaW5lcyBhbmQgc2V0cyB0aGUgY3Vyc29yIGNvbG9yIHRvIGdyZWVuLgorIyBTdGV2ZSBKYWNvYnNvbiA4Lzg1CisjICh0ZWs0MTI1OiB0aGVyZSB3ZXJlIHR3byAiXCEicyBpbiB0aGUgaXMgdGhhdCBJIHJlcGxhY2VkIHdpdGggIlxFISI7CisjIGNvbW1lbnRlZCBvdXQsIDxzbWlyPj1cRTEgYmVjYXVzZSB0aGVyZSdzIG5vIDxybWlyPiAgLS0gZXNyKQordGVrNDEyNXx0ZWt0cm9uaXggNDEyNSwKKwlsaW5lcyMzNCwKKwljc3JALCBkbDE9XEVbMU0sIGlsMT1cRVsxTCwKKwlpczI9XEUlXEUhMFxFUUQxXEVVWDAzXEVLQVxFTEJCMlxFTENFMFxFTEkxMDBcRUxKMlxFTExCMlxFTE0wXEVMUzFcRUxYMDBcRUxWMVxFJVxFITFcRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJcmNALCBzY0AsIHNta3g9XEU9LCB1c2U9dnQxMDAsCisKKyMgRnJvbTogPGpjb2tlckB1Y2JpYz4KKyMgKHRlazQyMDc6IFRoaXMgd2FzIHRoZSB0ZXJtY2FwIGZpbGUncyBlbnRyeSBmb3IgdGhlIDQxMDcvNDIwNywgYnV0IFNDTworIyBzdXBwbGllZCBhbm90aGVyLCBsZXNzIGNhcGFibGUgNDEwNyBlbnRyeS4gIFNvIHdlJ2xsIHVzZSB0aGF0IGZvciA0MTA3IGFuZAorIyBub3RlIHRoYXQgaWYgamNva2VyIHdhc24ndCBjb25mdXNlZCB5b3UgbWF5IGJlIGFibGUgdG8gdXNlIHRoaXMgb25lLgorIyBJIG1lcmdlZCBpbiA8bXNncj4sPGluZD4sPHJpPiw8aW52aXM+LDx0YmM+IGZyb20gYSBCUkwgZW50cnkgLS0gZXNyKQordGVrNDIwN3xUZWt0cm9uaXggNDIwNyBncmFwaGljcyB0ZXJtaW5hbCB3aXRoIG1lbW9yeSwKKwlhbSwgYncsIG1pciwgbXNnciwgdWwsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzIsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNidD1cRVtaLCBjbGVhcj1cRVtIXEVbSiQ8MTU2Lz4sCisJY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1MT1cRU0sIGRjaDE9XEVbUCQ8NC8+LCBkbDE9XEVbTSQ8My8+LCBlZD1cRVtKLAorCWVsPVxFW0skPDUvPiwgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVtAJDw0Lz4sCisJaWwxPVxFW0wkPDMvPiwgaW5kPVxFW1MsIGludmlzPVxFWz02Ozw1LAorCWlzMj1cRSUhMFxFTEJQMFxFJSExXEVbSFxFWzJnXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbOENcRUhcRVs4Q1xFSFxFWzhDXEVIXEVbSiwKKwlrY3ViMT1cRVtELCBrY3VkMT1cRUQsIGtjdWYxPVxFW0MsIGtjdXUxPVxFTSwga2hvbWU9XEVbSCwKKwlyZXY9XEVbN20sIHJpPVxFW1QsCisJcm1jdXA9XEVbPzZoXEUlITBcRUxCUDBcRSUhMVxFWzMyOzFmLCBybXNvPVxFW20sCisJcm11bD1cRVttLCBzZ3IwPVxFW20sIHNtY3VwPVxFWz82bFxFW0hcRVtKLCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVsxZywKKworIyBGcm9tOiA8Y2Fyb2x5bkBkYWxpLmJlcmtlbGV5LmVkdT4gIFRodSBPY3QgMzEgMTI6NTQ6MjcgMTk4NQorIyAodGVrNDQwNDogVGhlcmUgd2FzIGEgIlwhIiBpbiA8c21jdXA+IHRoYXQgSSByZXBsYWNlZCB3aXRoICJcRSEiLgorIyBUYWIgaGFkIGJlZW4gZ2l2ZW4gYXMgXEUySSx0aGF0IG11c3QgYmUgdGhlIHRhYi1zZXQgY2FwYWJpbGl0eSAtLSBlc3IpCit0ZWs0NDA0fHRla3Ryb25peCA0NDA0LAorCU9UYnMsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMzIsCisJYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVsySiwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoMT1cRVtQLCBkbDE9XEVbMU0sCisJZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFWzJJLCBpbDE9XEVbMUwsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwgcmM9XEU4LAorCXJtY3VwPVxFWzE7MUhcRVswSlxFWz82aFxFWz8xbCwgcm1pcj1cRVs0bCwKKwlybWt4PVxFWz8xaCwgcm1zbz1cRVsyN20sIHJtdWw9XEVbbSwgc2M9XEU3LCBzZ3IwPVxFW20sCisJc21jdXA9XEUlXEUhMVxFWzE7MzJyXEVbPzZsXEU+LCBzbWlyPVxFWzRoLAorCXNta3g9XEVbPzFsLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIyBTb21lIHVua25vd24gcGVyc29uIHdyb3RlOgorIyBJIGFkZGVkIHRoZSBpcyBzdHJpbmcgLSBzdHJhaWdodCBVbml4IGhhcyBFU0MgOyBpbiB0aGUgbG9naW4KKyMgc3RyaW5nIHdoaWNoIHNldHMgYSBjdDg1MDAgaW50byBtb25pdG9yIG1vZGUgKGFrYSA0MDI1IHNub29weQorIyBtb2RlKS4gVGhlIGlzIHN0cmluZyBoZXJlIGNsZWFucyB1cCBhIGZldyB0aGluZ3MgKGJ1dCBub3QKKyMgZXZlcnl0aGluZykuCitjdDg1MDB8dGVrdHJvbml4IGN0ODUwMCwKKwlhbSwgYncsIGRhLCBkYiwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwliZWw9XkcsIGNidD1cRV5JLCBjbGVhcj1cRV5FLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKKwljdWYxPVxFUywgY3VwPVxFfCVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRVIsCisJZGNoMT1cRV5dLCBkbDE9XEVeTSwgZWQ9XEVeVSwgZWw9XEVeVCwgaHQ9XkksIGljaDE9XEVeXCwKKwlpbDE9XEVeTCwgaW5kPV5KLCBpczI9XDAzN1xFWlxFaywgcmk9XEVeQSwgcm1zbz1cRVxzLAorCXJtdWw9XEVccywgc2dyMD1cRVxzLCBzbXNvPVxFJCwgc211bD1cRSEsCisKKyMgVGVrdHJvbml4IDQyMDUgdGVybWluYWwuCisjCisjIGFtIGlzIG5vdCBkZWZpbmVkIGJlY2F1c2UgdGhlIHdyYXAgYXJvdW5kIG9jY3VycyBub3Qgd2hlbiB0aGUgY2hhci4KKyMgaXMgcGxhY2VkIGluIHRoZSA4MCd0aCBjb2x1bW4sIGJ1dCB3aGVuIHdlIGFyZSBhdHRlbXB0aW5nIHRvIHR5cGUKKyMgdGhlIDgxJ3N0IGNoYXJhY3RlciBvbiB0aGUgbGluZS4gIChlc3I6IGhtbSwgdGhpcyBpcyBsaWtlIHRoZSB2dDEwMAorIyB2ZXJzaW9uIG9mIHhlbmwsIHBlcmhhcHMgYW0gKyB4ZW5sIHdvdWxkIHdvcmshKQorIworIyBCb2xkLCBkaW0sIGFuZCBzdGFuZG91dCBhcmUgc2ltdWxhdGVkIGJ5IGNvbG9ycyBhbmQgdGh1cyBub3QgYWxsb3dlZAorIyB3aXRoIGNvbG9ycy4gIFRoZSB0ZWt0cm9uaXggY29sb3IgdGFibGUgaXMgbWFwcGVkIGludG8gdGhlIFJHQiBjb2xvcgorIyB0YWJsZSBieSBzZXRmL3NldGIuIEFsbCBjb2xvcnMgYXJlIHJlc2V0IHRvIGZhY3Rvcnkgc3BlY2lmaWNhdGlvbnMgYnkgb2MuCisjIFRoZSA8aW5pdGM+IGNhcCB1c2VzIFJHQiBub3RhdGlvbiB0byBkZWZpbmUgY29sb3JzLiAgZm9yIGFyZ3VtZW50cyAxLTMgdGhlCisjIGludGVydmFsICgwLTEwMDApIGlzIGJyb2tlbiBpbnRvIDggc21hbGxlciBzdWItaW50ZXJ2YWxzICgxMjUpLiAgRWFjaCBzdWItCisjIGludGVydmFsIHRoZW4gbWFwcyBpbnRvIHByZS1kZWZpbmVkIHZhbHVlLgordGVrNDIwNXx0ZWt0cm9uaXggNDIwNSwKKwljY2MsIG1pciwgbXNnciwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMzAsIG5jdiM0OSwgcGFpcnMjNjMsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWz03Ozw0bSwgY2J0PVxFW1osCisJY2xlYXI9XEVbMkpcRVtILCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1cRVtELAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaDE9XEVbMVAsIGRpbT1cRVs9MTs8Nm0sIGRsMT1cRVsxTSwgZWNoPVxFJXAxJWRYLAorCWVkPVxFW0osIGVsPVxFW0ssIGVsMT1cRVsxSywgZW5hY3M9XEUpMCwgaG9tZT1cRVtILCBodD1eSSwKKwlpY2g9XEVbJXAxJWRALCBpbD1cRVslcDElZEwsIGlsMT1cRVsxTCwgaW5kPVxFRCwKKwlpbml0Yz1cRSUlITBcRVRGNCU/JXAxJXswfSU9JXQwJWUlcDElezF9JT0ldDQlZSVwMSV7Mn0lPSV0MyVlJXAxJXszfSU9JXQ1JWUlcDElezR9JT0ldDIlZSVwMSV7NX0lPSV0NiVlJXAxJXs2fSU9JXQ3JWUxJTslPyVwMiV7MTI1fSU8JXQwJWUlcDIlezI1MH0lPCV0QTIlZSVwMiV7Mzc1fSU8JXRBPyVlJXAyJXs1MDB9JTwldEM4JWUlcDIlezYyNX0lPCV0RDQlZSVwMiV7NzUwfSU8JXRFMSVlJXAyJXs4NzV9JTwldEVcOiVlRjQlOyU/JXAzJXsxMjV9JTwldDAlZSVwMyV7MjUwfSU8JXRBMiVlJXAzJXszNzV9JTwldEE/JWUlcDMlezUwMH0lPCV0QzglZSVwMyV7NjI1fSU8JXRENCVlJXAzJXs3NTB9JTwldEUxJWUlcDMlezg3NX0lPCV0RVw6JWVGNCU7JT8lcDQlezEyNX0lPCV0MCVlJXA0JXsyNTB9JTwldEEyJWUlcDQlezM3NX0lPCV0QT8lZSVwNCV7NTAwfSU8JXRDOCVlJXA0JXs2MjV9JTwldEQ0JWUlcDQlezc1MH0lPCV0RTElZSVwNCV7ODc1fSU8JXRFXDolZUY0JTtcRSUlITEsCisJaW52aXM9XEVbPTY7PDUsIGlzMT1cRSUhMFxFVE0xXEUlITFcRVttLCBrYnM9XkgsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YwPVxFT0EsCisJa2YxPVxFT0IsIGtmMj1cRU9DLCBrZjM9XEVPRCwga2Y0PVxFUCwga2Y1PVxFUSwga2Y2PVxFUiwKKwlrZjc9XEVTLAorCW9jPVxFJSEwXEVURkIwMDAwMDFGNEY0RjQyRjQwMDMwRjQwNEE0QzxGNDUwRjRGNDZGNDBGNDdGNEY0MFxFJSExLAorCW9wPVxFWzM5OzQwbSwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLCBybWN1cD0sCisJcm1pcj1cRVs0bCwgcm1zbz1cRVs9MDs8MW0sIHJtdWw9XEVbMjRtLAorCXNldGI9XEVbPSU/JXAxJXswfSU9JXQwbSVlJXAxJXsxfSU9JXQ0bSVlJXAxJXsyfSU9JXQzbSVlJXAxJXszfSU9JXQ1bSVlJXAxJXs0fSU9JXQybSVlJXAxJXs1fSU9JXQ2bSVlJXAxJXs2fSU9JXQ3bSVlMW0lOywKKwlzZXRmPVxFWzwlPyVwMSV7MH0lPSV0MG0lZSVwMSV7MX0lPSV0NG0lZSVwMSV7Mn0lPSV0M20lZSVwMSV7M30lPSV0NW0lZSVwMSV7NH0lPSV0Mm0lZSVwMSV7NX0lPSV0Nm0lZSVwMSV7Nn0lPSV0N20lZTFtJTssCisJc2dyMD1cRVs9MDs8MW1cRVsyNDsyNTsyN21cMDE3LCBzbWFjcz1eTiwKKwlzbWN1cD1cRSUlITFcRVs/NmxcRVsySiwgc21pcj1cRVs0aCwgc21zbz1cRVs9Mjs8M20sCisJc211bD1cRVs0bSwgdGJjPVxFWzFnLAorCisjIyMjIFRlbGV0eXBlICh0dHkpCisjCisjIFRoZXNlIGFyZSB0aGUgaGFyZGNvcHkgVGVsZXR5cGVzIGZyb20gYmVmb3JlIEFUJlQgYm91Z2h0IHRoZSBjb21wYW55LAorIyBjbGF0dGVyaW5nIGVsZWN0cm9tZWNoYW5pY2FsIGRpbm9zYXVycyBpbiBCYWtlbGl0ZSBjYXNlcyB0aGF0IHByaW50ZWQgb24KKyMgcHVscHkgeWVsbG93IHJvbGwgcGFwZXIuICBJZiB5b3UgcmVtZW1iZXIgdGhlc2UgeW91IGdvIGJhY2sgYSB3YXlzLgorIyBUZWxldHlwZS1icmFuZGVkIFZEVHMgYXJlIGxpc3RlZCBpbiB0aGUgQVQmVCBzZWN0aW9uLgorIworIyBUaGUgZWFybGllc3QgVU5JWGVzIHdlcmUgZGVzaWduZWQgdG8gdXNlIHRoZXNlIGNsdW5rZXJzOyBucm9mZiBhbmQgYSBmZXcKKyMgb3RoZXIgcHJvZ3JhbXMgc3RpbGwgZGVmYXVsdCB0byBlbWl0dGluZyBjb2RlcyBmb3IgdGhlIE1vZGVsIDM3LgorIworCit0dHkzM3x0dHkzNXxtb2RlbCAzMyBvciAzNSB0ZWxldHlwZSwKKwloYywgb3MsIHhvbiwKKwljb2xzIzcyLAorCWJlbD1eRywgY3I9Xk0sIGN1ZDE9XkosIGluZD1eSiwKK3R0eTM3fG1vZGVsIDM3IHRlbGV0eXBlLAorCU9UYnMsIGhjLCBvcywgeG9uLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1dTE9XEU3LCBoZD1cRTksIGh1PVxFOCwKKwlpbmQ9XkosCisKKyMgVGhlcmUgYXJlIGtub3duIHRvIGJlIGF0IGxlYXN0IHRocmVlIGZsYXZvcnMgb2YgdGhlIHR0eTQwLCBhbGwgc2VlbSBtb3JlCisjIGxpa2UgSUJNIGhhbGYgZHVwbGV4IGZvcm1zIGZpbGxlcnMgdGhhbiBBU0NJSSB0ZXJtaW5hbHMuICBUaGV5IGhhdmUgbG90cyBvZgorIyBhd2Z1bCBicmFpbmRhbWFnZSwgc3VjaCBhcyBwcmludGluZyBhIHZpc2libGUgbmV3bGluZSBpbmRpY2F0b3IgYWZ0ZXIgZWFjaAorIyBuZXdsaW5lLiAgVGhlIDQwLTEgaXMgYSBoYWxmIGR1cGxleCB0ZXJtaW5hbCBhbmQgaXMgaG9wZWxlc3MuICBUaGUgNDAtMiBpcworIyBicmFpbmRhbWFnZWQgYnV0IGhhcyBob3BlIGFuZCBpcyBkZXNjcmliZWQgaGVyZS4gIFRoZSA0MC00IGlzIGEgMzI3MAorIyBsb29rYWxpa2UgYW5kIGJleW9uZCBob3BlLiAgVGhlIHRlcm1pbmFsIGhhcyB2aXNpYmxlIGJlbGwgYnV0IEkgZG9uJ3Qga25vdworIyBpdCAtIGl0J3MgbnVsbCBoZXJlIHRvIHByZXZlbnQgaXQgZnJvbSBzaG93aW5nIHRoZSBCTCBjaGFyYWN0ZXIuCisjIFRoZXJlIGlzIGFuIFxFRyBpbiA8bmw+IGJlY2F1c2Ugb2YgYSBidWcgaW4gb2xkIHZpIChpZiBzdHR5IHNheXMgeW91IGhhdmUKKyMgYSAibmV3bGluZSIgc3R5bGUgdGVybWluYWwgKC1jcm1vZGUpIHZpIGZpZ3VyZXMgYWxsIGl0IG5lZWRzIGlzIG5sCisjIHRvIGdldCBjcmxmLCBldmVuIGlmIDxjcj4gaXMgbm90IF5NLikKKyMgKHR0eTQwOiByZW1vdmVkIG9ic29sZXRlICI6bmw9XEVHXEVCOiIsIGl0J3MganVzdCBkbytjciAtLSBlc3IpCit0dHk0MHxkczQwfGRzNDAtMnxkYXRhc3BlZWQ0MHx0ZWxldHlwZSBkYXRhc3BlZWQgNDAvMiwKKwlPVGJzLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEVIJDwyMD5cRUokPDgwPiwgY3I9XEVHLCBjdWIxPV5ILCBjdWQxPVxFQiwKKwljdWYxPVxFQywgY3V1MT1cRTcsIGRjaDE9XEVQJDw1MD4sIGRsMT1cRU0kPDUwPiwKKwllZD1cRUokPDc1PiwgaG9tZT1cRUgkPDEwPiwgaHQ9XEVAJDwxMD4sIGh0cz1cRTEsCisJaWNoMT1cRVxeJDw1MD4sIGlsMT1cRUwkPDUwPiwgaW5kPVxFUyQ8MjA+LCBrYnM9Xl0sCisJa2N1YjE9XkgsIG1jND1eVCwgbWM1PVwwMjIkPDIwMDA+LCByaT1cRVQkPDEwPiwgcm1zbz1cRTQsCisJcnMyPVwwMjNcRVIkPDYwPiwgc21zbz1cRTMsIHRiYz1cRUhcRTIkPDgwPiwKK3R0eTQzfG1vZGVsIDQzIHRlbGV0eXBlLAorCU9UYnMsIGFtLCBoYywgb3MsIHhvbiwKKwljb2xzIzEzMiwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBpbmQ9XkosIGticz1eSCwKKworIyMjIyBUeW1zaGFyZQorIworCisjIFlvdSBjYW4gYWRkIDxpczI9XEU8PiB0byBwdXQgdGhpcyA0MC1jb2x1bW4gbW9kZSwgdGhvdWdoIEkgY2FuJ3QKKyMgZm9yIHRoZSBsaWZlIG9mIG1lIHRoaW5rIHdoeSBhbnlvbmUgd291bGQgd2FudCB0by4KK3NjYW5zZXR8c2M0MTB8c2M0MTV8VHltc2hhcmUgU2NhbiBTZXQsCisJYW0sIGJ3LCBtc2dyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWFjc2M9aiVrNGw8bS1xXCx4NSwgYmVsPV5HLCBjbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XkosIGN1ZjE9XkksIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1eSywgZWQ9XEVKLCBlbD1cRUssIGhvbWU9XEVILCBpbmQ9XkosIGtjdWIxPVxFRCwKKwlrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLCBtYzA9XEU7MywgbWM0PVxFOzAsCisJbWM1PVxFOzAsIHJjPV5DLCBybWFjcz1eTywgcnMxPVxFPiwgc2M9XkIsIHNtYWNzPV5OLAorCisjIyMjIFZvbGtlci1DcmFpZyAodmMpCisjCisjIElmIHlvdSBzYXcgYSBCeXRlIE1hZ2F6aW5lIGNvdmVyIHdpdGggYSB0ZXJtaW5hbCBvbiBpdCBkdXJpbmcgdGhlIGVhcmx5CisjIDE5ODBzLCBpdCB3YXMgcHJvYmFibHkgb25lIG9mIHRoZXNlLiAgQ2FybCBIZWxtZXJzIGxpa2VkIHRoZW0gYmVjYXVzZQorIyB0aGV5IGNvdWxkIGNyYW5rIDE5LjIgYW5kIHdlcmUgY2hlYXAgKHRoYXQgaXMsIGhlIGxpa2VkIHRoZW0gdW50aWwgaGUgdHJpZWQKKyMgdG8gcHJvZ3JhbSBvbmUuLi4pCisjCisKKyMgTWlzc2luZyBpbiB2YzMwM2EgYW5kIHZjMzAzIGRlc2NyaXB0aW9uczogIHRoZXkgc2Nyb2xsIDIgbGluZXMgYXQgYSB0aW1lCisjIGV2ZXJ5IG90aGVyIGxpbmVmZWVkLgordmMzMDN8dmMxMDN8dmMyMDN8dm9sa2VyLWNyYWlnIDMwMywKKwlPVGJzLCBPVG5zLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDQwPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkksCisJY3V1MT1eTiwgaG9tZT1cMDEzJDw0MD4sIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkksCisJa2N1dTE9Xk4sIGxsPVwwMTckPDE+VywKK3ZjMzAzYXx2YzQwM2F8dm9sa2VyLWNyYWlnIDMwM2EsCisJY2xlYXI9XDAzMCQ8NDA+LCBjdWYxPV5VLCBjdXUxPV5aLCBlbD1cMDI2JDwyMD4sCisJaG9tZT1cMDMxJDw0MD4sIGtjdWYxPV5VLCBrY3V1MT1eWiwgbGw9XlAsIHVzZT12YzMwMywKKyMgKHZjNDA0OiByZW1vdmVkIG9ic29sZXRlICI6bWE9XlpeUF5VIDoiIC0tIGVzcikKK3ZjNDA0fHZvbGtlci1jcmFpZyA0MDQsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cMDMwJDw0MD4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5VLAorCWN1cD1cMDIwJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5aLAorCWVkPVwwMjckPDQwPiwgZWw9XDAyNiQ8MjA+LCBob21lPVwwMzEkPDQwPiwgaW5kPV5KLAorCWtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XlUsIGtjdXUxPV5aLAordmM0MDQtc3x2b2xrZXItY3JhaWcgNDA0IHcvc3RhbmRvdXQgbW9kZSwKKwljdWQxPV5KLCBybXNvPV5PLCBzbXNvPV5OLCB1c2U9dmM0MDQsCisjIEZyb206IDx3b2xmZ2FuZ0Bjcy5zZnUuY2E+CisjICh2YzQxNDogbWVyZ2VkIGluIGN1cC9kbDEvaG9tZSBmcm9tIGFuIG9sZCB2YzQxNGgtbm94b24pCit2YzQxNHx2YzQxNGh8Vm9sa2VyLUNyYWlnIDQxNEggaW4gc2FuZSBlc2NhcGUgbW9kZS4sCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEVcMDM0JDw0MD4sIGN1ZDE9XEVeSywgY3VmMT1eUCwKKwljdXA9XEVcMDIxJXAyJWMlcDElYyQ8NDA+LCBjdXUxPVxFXkwsIGRjaDE9XEUzLAorCWRsMT1cRVwwMjMkPDQwPiwgZWQ9XEVeWCwgZWw9XEVcMDE3JDwxMC8+LCBob21lPVxFXlIsCisJaWNoMT1cRVw6LCBpbDE9XEVcMDMyJDw0MD4sIGtjdWIxPV5ILCBrY3VkMT1cRV5LLCBrY3VmMT1eUCwKKwlrY3V1MT1cRV5MLCBrZjA9XEVBLCBrZjE9XEVCLCBrZjI9XEVDLCBrZjM9XEVELCBrZjQ9XEVFLAorCWtmNT1cRUYsIGtmNj1cRUcsIGtmNz1cRUgsIGtob21lPVxFXlIsIGxmMD1QRjEsIGxmMT1QRjIsCisJbGYyPVBGMywgbGYzPVBGNCwgbGY0PVBGNSwgbGY1PVBGNiwgbGY2PVBGNywgbGY3PVBGOCwKKwlybXNvPVxFXl8sIHNtc289XEVeWSwKK3ZjNDE1fHZvbGtlci1jcmFpZyA0MTUsCisJY2xlYXI9XkwsIHVzZT12YzQwNCwKKworIyMjIyMjIyMgT0JTT0xFVEUgUEVSU09OQUwtTUlDUk8gQ09OU09MRVMgQU5EIEVNVUxBVElPTlMKKyMKKworIyMjIyBJQk0gUEMgYW5kIGNsb25lcworIworCisjIFRoZSBwY3Bsb3QgSUJNLVBDIHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtIGlzIHJlYWxseSBtZXNzZWQgdXAuIEl0IGlzCisjIHN1cHBvc2VkIHRvIGVtdWxhdGUgYSB2dC0xMDAsIGJ1dCBlbXVsYXRlcyB0aGUgd3JhcGFyb3VuZCBidWcgaW5jb3JyZWN0bHksCisjIGRvZXNuJ3Qgc3VwcG9ydCBzY3JvbGxpbmcgcmVnaW9ucywgaWdub3JlcyBhZGQgbGluZSBjb21tYW5kcywgYW5kIGlnbm9yZXMKKyMgZGVsZXRlIGxpbmUgY29tbWFuZHMuIENvbnNlcXVlbnRseSwgdGhlIHJlc3VsdGluZyBiZWhhdmlvciBsb29rcyBsaWtlIGEKKyMgY3J1ZGUgYWRtM2EtdHlwZSB0ZXJtaW5hbC4KKyMgU3RldmUgSmFjb2Jzb24gOC84NQorcGNwbG90fHBjLXBsb3QgdGVybWluYWwgZW11bGF0aW9uIHByb2dyYW0sCisJeGVubEAsCisJY3NyQCwgZGxALCBkbDFALCBpbEAsIGlsMUAsIHJjQCwgc2NALCB1c2U9dnQxMDAsCisjIEtheVBybyBJSSBmcm9tIFJpY2hhcmQgRyBUdXJuZXIgPHJ0dXJuZXIgYXQgRGFyY29tLUhxLkFSUEE+CisjIEkndmUgZm91bmQgdGhhdCBteSBLYXlQcm8gSUksIHJ1bm5pbmcgTURNNzMwLCBjb250aW51ZXMgdG8gZW11bGF0ZSBhbgorIyBBRE0tM0EgdGVybWluYWwsIGp1c3QgbGlrZSBJIHdhcyBydW5uaW5nIFRFUk0uQ09NLiBPbiBvdXIgNC4yIFVOSVgKKyMgc3lzdGVtIHRoZSBmb2xsb3dpbmcgdGVybWNhcCBlbnRyeSB3b3JrcyB3ZWxsOgorIyBJIGhhdmUgbm90aWNlZCBhIGNvdXBsZSBvZiBtaW5vciBnbGl0Y2hlcywgYnV0IG5vdGhpbmcgSSBjYW4ndCB3b3JrCisjIGFyb3VuZC4gKEkgYWRkZWQgdHdvIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBCUkwgZW50cnkgLS0gZXNyKQora2F5cHJvfGtheXBybzJ8a2F5cHJvIElJLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAzMiQ8MS8+LCBjcj1eTSwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkbDE9XEVSLCBlZD1eVywKKwllbD1eWCwgaG9tZT1eXiwgaWwxPVxFRSwgaW5kPV5KLCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLAorCisjIEZyb20gSUJNLCBUaHUgTWF5ICA1IDE5OjM1OjI3IDE5ODMKKyMgKGlibXBjOiBjb21tZW50ZWQgb3V0IDxzbWlyPj1cMjAwUiBiZWNhdXNlIHdlIGRvbid0IGtub3cgPHJtaXI+IC0tIGVzcikKK2libS1wY3xpYm01MDUxfDUwNTF8SUJNIFBlcnNvbmFsIENvbXB1dGVyIChubyBBTlNJLlNZUyksCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTF5LLCBjcj1eTV5eLCBjdWIxPV5dLCBjdWQxPV5KLCBjdWYxPV5cLAorCWN1dTE9Xl4sIGhvbWU9XkssIGluZD1cbiQ8MTA+LCBrY3VkMT1eXywKKworaWJtcGN8d3k2MC1QQ3x3eXNlNjAtUEN8SUJNIFBDL1hUIHJ1bm5pbmcgUEMvSVgsCisJT1RicywgYW0sIGJ3LCBlbywgaHMsIGttLCBtc2dyLCB1bCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWpcMzMxa1wyNzdsXDMzMm1cMzAwblwzMDVxXDMwNHRcMzAzdVwyNjR2XDMwMXdcMzAyeFwyNjMsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVjLCBjcj1eTSwKKwljdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGVjaD1cRVslcDElZFgsIGVkPVxFW0osIGVsPVxFW0ssCisJaG9tZT1cRVtILCBocGE9XEVbJWklcDElZEcsIGluZD1cRVtTXEVbQiwKKwlpbmRuPVxFWyVwMSVkU1xFWyVwMSVkQiwgaW52aXM9XEVbMzA7NDBtLCBrYnM9XkgsCisJa2NidD1eXSwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZGNoMT1cMTc3LCBrZW5kPVxFW1ksIGtmMT1cMjQwLCBrZjEwPVwyNTEsIGtmMj1cMjQxLAorCWtmMz1cMjQyLCBrZjQ9XDI0Mywga2Y1PVwyNDQsIGtmNj1cMjQ1LCBrZjc9XDI0Niwga2Y4PVwyNDcsCisJa2Y5PVwyNTAsIGtob21lPVxFW0gsIGtpY2gxPVxFW15ILCBrbnA9XEVbVSwga3BwPVxFW1YsCisJbGw9XEVbMjQ7MUgsIG5lbD1eTSwgcmV2PVxFWzdtLCByaT1cRVtUXEVbQSwKKwlyaW49XEVbJXAxJWRUXEVbJXAxJWRBLCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3I9XEVbJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20sCisJc2dyMD1cRVttLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCisjIyMjIEFwcGxlIElJCisjCisjIEFwcGxlIElJIGZpcm13YXJlIGNvbnNvbGUgZmlyc3QsIHRoZW4gdmFyaW91cyA4MC1jb2x1bW4gY2FyZHMgYW5kCisjIHRlcm1pbmFsIGVtdWxhdG9ycy4gIEZvciB0d28gY2VudHMgSSdkIHRvc3MgYWxsIHRoZXNlIGluIHRoZSBVRk8gZmlsZQorIyBhbG9uZyB3aXRoIHRoZSA0MC1jb2x1bW4gYXBwbGUgZW50cmllcy4KKyMKKworIyBGcm9tOiBicnNtaXRoQHVtbi1jcy5jcy51bW4uZWR1IChCcmlhbiBSLiBTbWl0aCkgdmlhIEJSTAorIwknaXQjOCcgdGVsbHMgVU5JWCB0aGF0IHlvdSBoYXZlIHRhYnMgZXZlcnkgOCBjb2x1bW5zLiAgVGhpcyBpcyBhCisjCQlmdW5jdGlvbiBvZiBUSUMsIG5vdCB0aGUgZmlybXdhcmUuCisjCVRoZSBjbGVhciBrZXkgb24gYSBJSWdzIHdpbGwgZG8gc29tZXRoaW5nIGxpa2UgY2xlYXItc2NyZWVuLAorIwkJZGVwZW5kaW5nIG9uIHdoYXQgeW91J3JlIGluLgorYXBwbGVJSWdzfGFwcGxlSUllfGFwcGxlSUljfEFwcGxlIDgwIGNvbHVtbiBmaXJtd2FyZSBpbnRlcmZhY2UsCisJT1RicywgYW0sIGJ3LCBlbywgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eXCwKKwljdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXywgZWQ9XkssIGVsPV5dLAorCWhvbWU9XlksIGh0PV5JLCBpbmQ9XlcsIGticz1eSCwga2Nscj1eWCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5VLCBrY3V1MT1eSywga2RjaDE9XDE3NywgbmVsPV5NXlcsIHJpPV5WLCBybXNvPV5OLAorCXNtc289Xk8sCisjIEFwcGxlIC8vZSB3aXRoIDgwLWNvbHVtbiBjYXJkLCBlbnRyeSBmcm9tIEJSTAorIyBUaGUgbW9kZW0gaW50ZXJmYWNlIGlzIHBlcm1pdHRlZCB0byBkaXNjYXJkIExGIChtYXliZSBEQzEpLCBvdGhlcndpc2UKKyMgcGFzc2luZyBjaGFyYWN0ZXJzIHRvIHRoZSA4MC1jb2x1bW4gZmlybXdhcmUgdmlhIENPVVQgKFBSIzMgYXNzdW1lZCkuCisjIEF1dG8td3JhcCBkb2VzIG5vdCB3b3JrIHJpZ2h0IGR1ZSB0byBuZXdsaW5lIHNjcm9sbGluZyBkZWxheSwgd2hpY2ggYWxzbworIyByZXF1aXJlcyB0aGF0IHlvdSBzZXQgInN0dHkgY3IyIi4KKyMgTm90ZTogQ3Vyc29yIGFkZHJlc3NpbmcgaXMgb25seSBhdmFpbGFibGUgdmlhIHRoZSBQYXNjYWwgVjEuMSBlbnRyeSwKKyMgbm90IHZpYSB0aGUgQkFTSUMgUFIjMyBob29rLiAgQWxsIHRoaXMgbm9uc2Vuc2UgY2FuIGJlIGF2b2lkZWQgb25seSBieQorIyB1c2luZyBhIHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtIGluc3RlYWQgb2YgdGhlIGJ1aWx0LWluIGZpcm13YXJlLgorYXBwbGUyZXxBcHBsZSAvL2UsCisJYncsIG1zZ3IsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cMDE0JDwxMDAvPiwgY3ViMT1eSCwgY3VkMT1eSiwgY3V1MT1eXywKKwllZD1cMDEzJDw0Ki8+LCBlbD1cMDM1JDw0Lz4sIGhvbWU9XlksIGh0PV5JLCBpbmQ9XlcsCisJaXMyPV5SXk4sIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eVSwga2N1dTE9XkssCisJbmVsPVxyJDwxMDAvPiwgcmV2PV5PLCByaT1eViwgcm1zbz1eTiwgcnMxPV5SXk4sIHNncjA9Xk4sCisJc21zbz1eTywKKyMgbWN2YXghdnU0NCF2dTQ1IXdpbGNrZSB1c2VzIHRoZSAiYXAiIGVudHJ5IHRvZ2V0aGVyIHdpdGggQXNjaWkgRXhwcmVzcyBQcm8KKyMgNC4yMCwgd2l0aCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgdGVybWluYWxzIGJvdGggb24gMCwgZW11bGF0aW9uIE9uLgorYXBwbGUyZS1wfEFwcGxlIC8vZSB2aWEgUGFzY2FsLAorCWN1cD1cMDM2JXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBrYnM9XkgsIGtjdWIxPV5ILAorCWtjdWQxPV5KLCB1c2U9YXBwbGUyZSwKKyMgKEFTQ0lJIEV4cHJlc3MpIE1vdXNlVGFsayAiU3RhbmRhcmQgQXBwbGUgLy8iIGVtdWxhdGlvbiBmcm9tIEJSTAorIyBFbmFibGUgREMzL0RDMSBmbG93IGNvbnRyb2wgd2l0aCAic3R0eSBpeG9uIC1peGFueSIuCithcHBsZS1hZXxBU0NJSSBFeHByZXNzLAorCU9UYnMsIGFtLCBidywgbXNnciwgbnhvbiwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWJlbD1cMDA3JDw1MDAvPiwgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5VLAorCWN1cD1cMDM2JXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5fLCBlZD1eSywgZWw9Xl0sCisJaG9tZT1eWSwgaW5kPV5XLCBpczI9XlJeTiwga2Nscj1eWCwga2N1YjE9XkgsIGtjdWQxPV5KLAorCWtjdWYxPV5VLCBrY3V1MT1eSywgcmV2PV5PLCByaT1eViwgcm1zbz1eTiwgcnMxPV5SXk4sIHNncjA9Xk4sCisJc21zbz1eTywKK2FwcGxlSUl8YXBwbGUgaWkgcGx1cywKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1eTCwgY25vcm09XlRDMiwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eXCwKKwljdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXywgY3Z2aXM9XlRDNiwKKwllZD1eSywgZWw9Xl0sIGZsYXNoPVwwMjRHMSQ8MjAwLz5cMDI0VDEsIGhvbWU9XEVeWSwgaHQ9XkksCisJaXMyPVwwMjRUMVwwMTYsIGtjdWQxPV5KLCBrY3VmMT1eVSwgcm1zbz1eTiwgc2dyMD1eTiwKKwlzbXNvPV5PLAorIyBPcmlnaW5hbGx5IGJ5IEdhcnkgRm9yZCAyMU5PVjgzCisjIEZyb206IDxlZTE3OGFjaSVzZGNjN0BTRENTVkFYLkFSUEE+ICBGcmkgT2N0IDExIDIxOjI3OjAwIDE5ODUKK2FwcGxlLTgwfGFwcGxlIElJIHdpdGggc21hcnRlcm0gODAgY29sLAorCU9UYnMsIGFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljYnQ9XlIsIGNsZWFyPVwwMTQkPDEwKi8+LCBjcj1cciQ8MTAqLz4sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eXCwgY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sCisJZWQ9XDAxMyQ8MTAqLz4sIGVsPVwwMzUkPDEwLz4sIGhvbWU9XlksCithcHBsZS1zb3JvY3xhcHBsZSBlbXVsYXRpbmcgc29yb2MgMTIwLAorCWFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEUqJDwzMDA+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBlZD1cRVksIGVsPVxFVCwKKwlob21lPV5eLCBpbmQ9XkosIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLAorIyBGcm9tIFBldGVyIEhhcnJpc29uLCBDb21wdXRlciBHcmFwaGljcyBMYWIsIFNhbiBGcmFuY2lzY28KKyMgICB1Y2J2YXghdWNzZm1pcyFoYXJyaXNvbiAgLi4uLi51dWNwCisjICAgdWNidmF4IXVjc2ZtaXMhaGFycmlzb25AQkVSS0VMRVkgICAuLi4uLi4uQVJQQQorIyAiVGhlc2UgdHdvIHdvcmsuICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgaW52ZXJzZSB2aWRlbyBjaGlwIGZvciB0aGUKKyMgQXBwbGUgd2l0aCB2aWRleCB0aGVuIHJlbW92ZSB0aGUgOnNvOiBhbmQgOnNlOiBmaWVsZHMuIgorIyAoYXBwbGUtdmlkZXg6IHRoaXMgdXNlZCB0byBiZSBjYWxsZWQgRGFsZUFwcGxlIC0tIGVzcikKK2FwcGxlLXZpZGV4fEFwcGxlIHdpdGggdmlkZXggdmlkZW90ZXJtIDgwIGNvbHVtbiBib2FyZCB3aXRoIGludmVyc2UgdmlkZW8sCisJT1RicywgYW0sIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XDAxNCQ8MzAwLz4sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XlwsCisJY3VwPVwwMzYlcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9Xl8sIGVkPV5LLCBlbD1eXSwKKwlob21lPV5ZLCBodD1eSSwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eVSwga2hvbWU9XlksCisJcm1zbz1eWjIsIHNncjA9XloyLCBzbXNvPV5aMywKKyMgTXkgc3lzdGVtIFtmb3IgcmVmZXJlbmNlXSA6IEFwcGxlIF1bKywgNjRLLCBVbHRyYXRlcm0gZGlzcGxheSBjYXJkLAorIwkJCSAgICAgIEFwcGxlIENhdCBdWyAyMTIgbW9kZW0sICsgbW9yZSBhbGwKKyMJCQkgICAgICBjb250cm9sbGVkIGJ5IEFTQ0lJIEV4cHJlc3M6IFByby4KKyMgRnJvbSBEYXZlIFNoYXZlciA8aXN1Y3MxIXNoYXZlcj4KK2FwcGxlLXV0ZXJtLXZifFZpZGV4IFVsdHJhdGVybSBmb3IgQXBwbGUgbWljcm9zIHdpdGggVmlzaWJsZSBCZWxsLAorCU9UYnMsIGFtLCBlbywgeHQsCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz0sIGNsZWFyPV5MLCBjdWYxPV5cLAorCWN1cD1cMDM2JXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPV5fLCBlZD1eSywgZWw9Xl0sCisJZmxhc2g9XlczNV5XMDYsIGhvbWU9XlksCisJaXMyPV5WNF5XMDZcMDE3XHJWaXNpYmxlIEJlbGwgSW5zdGFsbGVkLlwwMTZcclxuLAorCXJtc289Xk4sIHNtc289Xk8sCithcHBsZS11dGVybXxVbHRyYXRlcm0gZm9yIEFwcGxlIG1pY3JvcywKKwlPVGJzLCBhbSwgZW8sIHh0LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWFjc2M9LCBjbGVhcj1eTCwgY3VmMT1eXCwKKwljdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXywgZWQ9XkssIGVsPV5dLAorCWhvbWU9XlksIGlzMj1eVjReVzA2XDAxNiwgcm1zbz1eTiwgc21zbz1eTywKKyMgZnJvbSB0cndyYmEhYndvbmcgKEJyYWRsZXkgVy4gV29uZyk6CisjCisjIFRoaXMgZW50cnkgYXNzdW1lcyB0aGF0IHlvdSBhcmUgdXNpbmcgYW4gYXBwbGUgd2l0aCB0aGUgVUNTRCBQYXNjYWwKKyMgbGFuZ3VhZ2UgY2FyZC4gIFNZU1RFTS5NSVNDSU5GTyBpcyBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoYXQKKyMgc3VwcGxpZWQgd2l0aCB0aGUgc3RhbmRhcmQgYXBwbGUgZXhjZXB0IHRoYXQgc2NyZWVud2lkdGggc2hvdWxkIGJlIHNldAorIyB1c2luZyBTRVRVUCB0byA4MCBjb2x1bW5zLiAgTm90ZSB0aGF0IHRoZSByaWdodCBhcnJvdyBpbiBub3QgbWFwcGVkIGluCisjIHRoaXMgdGVybWNhcCBlbnRyeS4gIFRoaXMgaXMgYmVjYXVzZSB0aGF0IGtleSwgb24gdGhlIEFwcGxlLCB0cmFuc21pdHMKKyMgYSBeVSBhbmQgd291bGQgdGh1cyBwcmVlbXB0IHRoZSBtb3JlIHVzZWZ1bCAidXAiIGZ1bmN0aW9uIG9mIHZpLgorIworIyBITUggMi8yMy84MQorYXBwbGU4MHB8ODAtY29sdW1uIGFwcGxlIHdpdGggUGFzY2FsIGNhcmQsCisJYW0sIGJ3LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWNsZWFyPV5ZXkwsIGN1ZjE9XlxcOiwKKwljdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1eXywgZWQ9XkssIGVsPV5dLAorCWhvbWU9XlksIGtjdWIxPV5ILAorIworIyBBcHBsZSBJSSsgZXF1aXBwZWQgd2l0aCBWaWRleCA4MCBjb2x1bW4gY2FyZAorIworIyBUZXJtaW5mbyBmcm9tIGlobnA0IWlodTFnIWRqYzEgKERhdmUgQ2hyaXN0ZW5zZW4pIHZpYSBCUkw7CisjIG1hbnVhbGx5IGNvbnZlcnRlZCBieSBEIEEgR3d5bgorIworIyBETyBOT1QgdXNlIGFueSB0ZXJtaW5hbCBlbXVsYXRpb24gd2l0aCB0aGlzIGRhdGEgYmFzZSwgaXQgd29ya3MgZGlyZWN0bHkKKyMgd2l0aCB0aGUgVmlkZXggY2FyZC4gIFRoaXMgaGFzIGJlZW4gdGVzdGVkIHdpdGggdmkgMTIwMCBiYXVkIGFuZCB3b3JrcyBmaW5lLgorIworIyBUaGlzIHdvcmtzIGdyZWF0IGZvciB2aSwgZXhjZXB0IEkndmUgbm90aWNlZCBpbiBwcmUtUjIsIF5VIHdpbGwgc2Nyb2xsIGJhY2sKKyMgMSBzY3JlZW4sIHdoaWxlIGluIFIyIF5VIGRvZXNuJ3QuCisjIEZvciBpbnZlcnNlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGFkZDoKKyMJPHNtYWNzPj1eTzo8cm1hY3M+PV5OOgorIyAoYXBwbGUtdjogYWRkZWQgaXQjOCAtLSBlc3IpCithcHBsZS12aWRleDJ8QXBwbGUgSUkrIHcvIFZpZGV4IGNhcmQgKHNpbWlsYXIgdG8gRGF0YW1lZGlhIGgxNTIwKSwKKwlhbSwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XDAwNyQ8MTAwLz4sIGNsZWFyPVwwMTQkPDE2Ki8+LCBjcj1eTSwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPV5cLCBjdXA9XDAzNiVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywKKwljdXUxPV5fLCBlZD1cMDEzJDwxNiovPiwgZWw9Xl0sIGhvbWU9XlksIGh0PVwwMTEkPDgvPiwKKwlpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eXCwga2N1dTE9Xl8sCisJa2hvbWU9XlksIHJtc289XloyLCBzbXNvPV5aMywKK2FwcGxlLXZpZGV4M3x2YXBwbGV8QXBwbGUgSUkgd2l0aCA4MCBjb2wgY2FyZCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1cRXYsIGN1ZjE9XEVDLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XEVBLCBlbD1cRXgsIGhvbWU9XEVILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2YwPVxFUCwga2YxPVxFUSwga2YyPVxFUiwga2YzPVxFXHMsIGtmND1cRSEsCisJa2Y1PVxFIiwga2Y2PVxFIywga2Y3PVxFJCwga2Y4PVxFJSUsIGtmOT1cRSYsIGtob21lPVxFSCwKKyNGcm9tOiBkZWN2YXghY2Jvc2dkIWNiZGtjMSFtd3cgTWlrZSBXYXJyZW4gdmlhIEJSTAorYWVwcm98QXBwbGUgSUkrIHJ1bm5pbmcgQVNDSUkgRXhwcmVzcyBQcm8tLXZ0NTIsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1cMDE0JDwzMDAvPiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGVkPVxFSiwKKwllbD1cRUssIGhvbWU9XEVILAorIyBVQ1NEIGFkZGl0aW9uOiBZZXQgYW5vdGhlciB0ZXJtY2FwIGZyb20gQnJpYW4gS2FudG9yJ3MgTWljcm8gTXVuZ2VyIEZhY3RvcnkKK2FwcGxlLXZtODB8YXAtdm04MHxhcHBsZSB3aXRoIHZpZXdtYXgtODAsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1cMDE0JDwzMDAvPiwgY3VmMT1eXFw6LAorCWN1cD1cMDM2JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjJDwxMDAvPiwgY3V1MT1eXywKKwllZD1cMDEzJDwzMDAvPiwgZWw9Xl0sIGhvbWU9XDAzMSQ8MjAwLz4sCisKKyMjIyMgQXBwbGUgTGlzYSAmIE1hY2ludG9zaAorIworCisjIChsaXNhOiBjaGFuZ2VkIDxjdnZpcz4gdG8gPGNub3JtPiAtLSBlc3IpCitsaXNhfGFwcGxlIGxpc2EgY29uc29sZSBkaXNwbGF5IChibGFjayBvbiB3aGl0ZSksCisJT1RicywgYW0sIGVvLCBtc2dyLAorCWNvbHMjODgsIGl0IzgsIGxpbmVzIzMyLAorCWFjc2M9amRrY2xmbWVuYnFhdHR1dnZ1d3N4YCwgY2l2aXM9XEVbNWgsIGNsZWFyPV5MLAorCWNub3JtPVxFWzVsLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoMT1cRVtQLCBkbDE9XEVbTSwKKwllZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBpY2gxPVxFW0AsIGlsMT1cRVtMLAorCWlzMj1cRT5cRVttXDAxNCwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIHJtYWNzPVxFWzEwbSwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJc2dyMD1cRVttLCBzbWFjcz1cRVsxMW0sIHNtc289XEVbN20sIHNtdWw9XEVbNG0sCitsaXN3YnxhcHBsZSBsaXNhIGNvbnNvbGUgZGlzcGxheSAod2hpdGUgb24gYmxhY2spLAorCWlzMj1cRT5cRVswOzdtXDAxNCwgcm1zbz1cRVswOzdtLCBybXVsPVxFWzA7N20sCisJc21zbz1cRVttLCBzbXVsPVxFWzRtLCB1c2U9bGlzYSwKKworIyBsaXNhdGVybSBmcm9tIHVseXNzZXMhZ2FtbWEhZXBzaWxvbiFtYjJjIWplZCAoSm9obiBFLiBEdW5jYW4gSUlJKSB2aWEgQlJMOworIyA8aXMyPiByZXZpc2VkIGJ5IEZlcmQgQnJ1bmRpY2sgPGZzYnJuQEJSTC5BUlBBPgorIworIyBUaGVzZSBlbnRyaWVzIGFzc3VtZSB0aGF0IHRoZSAnQXV0byBXcmFwYXJvdW5kJyBpcyBlbmFibGVkLgorIyBYb24tWG9mZiBmbG93IGNvbnRyb2wgc2hvdWxkIGFsc28gYmUgZW5hYmxlZC4KKyMKKyMgVGhlIHZ0MTAwIHVzZXMgOnJzMjogYW5kIDpyZjogcmF0aGVyIHRoYW4gOmlzMjovOnRiYzovOmh0czogYmVjYXVzZSB0aGUgdGFiCisjIHNldHRpbmdzIGFyZSBpbiBub24tdm9sYXRpbGUgbWVtb3J5IGFuZCBkb24ndCBuZWVkIHRvIGJlIHJlc2V0IHVwb24gbG9naW4uCisjIEFsc28gc2V0dGluZyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZ2xpdGNoZXMgdGhlIHNjcmVlbiBhbm5veWluZ2x5LgorIyBZb3UgY2FuIHR5cGUgInJlc2V0IiB0byBnZXQgdGhlbSBzZXQuCisjCitsaXNhdGVybXxBcHBsZSBMaXNhIG9yIExpc2EvMiBydW5uaW5nIExpc2FUZXJtIHZ0MTAwIGVtdWxhdGlvbiwKKwlPVGJzLCBPVHB0LCBhbSwgeGVubCwgeG9uLAorCU9Ua24jNCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHZ0IzMsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBlZD1cRVtKLAorCWVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMD1cRU9QLCBrZjE9XEVPUSwKKwlrZjI9XEVPUiwga2YzPVxFT1MsIGxmMD1GMSwgbGYxPUYyLCBsZjI9RjMsIGxmMz1GNCwgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVxFPlxFWz8xbFxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aFxFWzE7MjRyLAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csCisjIExpc2F0ZXJtIGluIDEzMiBjb2x1bW4gKCJ3aWRlIikgbW9kZS4KK2xpc2F0ZXJtLXd8QXBwbGUgTGlzYSB3aXRoIExpc2F0ZXJtIGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwKKwlrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwgdXNlPWxpc2F0ZXJtLAorIyBBbHRob3VnaCBNYWNUZXJtaW5hbCBoYXMgaW5zZXJ0L2RlbGV0ZSBsaW5lLCBpdCBpcyBjb21tZW50ZWQgb3V0IGhlcmUKKyMgc2luY2UgaXQgaXMgbXVjaCBmYXN0ZXIgYW5kIGNsZWFuZXIgdG8gdXNlIHRoZSAibG9jayBzY3JvbGxpbmcgcmVnaW9uIgorIyBtZXRob2Qgb2YgaW5zZXJ0aW5nIGFuZCBkZWxldGluZyBsaW5lcyBkdWUgdG8gdGhlIE1hY1Rlcm1pbmFsIGltcGxlbWVudGF0aW9uLgorIyBBbHNvLCB0aGUgIkluc2VydC9kZWxldGUgY2giIHN0cmluZ3MgaGF2ZSBhbiBleHRyYSBjaGFyYWN0ZXIgYXBwZW5kZWQgdG8gdGhlbQorIyBkdWUgdG8gYSBidWcgaW4gTWFjVGVybWluYWwgVjEuMS4gIEJsaW5rIGlzIGRpc2FibGVkIHNpbmNlIGl0IGlzIG5vdAorIyBzdXBwb3J0ZWQgYnkgTWFjVGVybWluYWwuCittYWN8bWFjaW50b3NofE1hY2ludG9zaCB3aXRoIE1hY1Rlcm1pbmFsLAorCXhlbmwsCisJT1RkTiMzMCwKKwlibGlua0AsIGRjaDE9XEVbUCQ8Ny8+LCBpY2gxPVxFW0AkPDkvPiwgaXA9JDw3Lz4sIHVzZT1saXNhLAorIyBMaXNhdGVybSBpbiAxMzIgY29sdW1uICgid2lkZSIpIG1vZGUuCittYWMtd3xtYWN0ZXJtaW5hbC13fEFwcGxlIE1hY2ludG9zaCB3aXRoIE1hY3Rlcm1pbmFsIGluIDEzMiBjb2x1bW4gbW9kZSwKKwljb2xzIzEzMiwgdXNlPW1hYywKKworIyBUaGUgQXBwS2l0IFRlcm1pbmFsLmFwcCBkZXNjcmlwdGlvbnMgYWxsIGhhdmUgbmFtZXMgYmVnaW5uaW5nIHdpdGgKKyMgIm5zdGVybSIuIE5vdGUgdGhhdCB0aGUgc3RhdHVzbGluZSAoLXMpIHZlcnNpb25zIHVzZSB0aGUgd2luZG93CisjIHRpdGxlYmFyIGFzIGEgcGhvbnkgc3RhdHVzIGxpbmUsIGFuZCBtYXkgcHJvZHVjZSB3YXJuaW5ncyBkdXJpbmcKKyMgY29tcGlsYXRpb24gYXMgYSByZXN1bHQgKCJ0c2wgdXNlcyAwIHBhcmFtZXRlcnMsIGV4cGVjdGVkIDEiLikgSWdub3JlCisjIHRoZXNlIHdhcm5pbmdzLCBvciBldmVuIGlnbm9yZSB0aGVzZSBlbnRyaWVzIGVudGlyZWx5LiBBcHBzIHdoaWNoCisjIG5lZWQgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBvciBkbyBvdGhlciBmYW5jeSBzdHVmZiBpbnNpZGUgdGhlIHN0YXR1cworIyBsaW5lIHdvbid0IHdvcmsgd2l0aCB0aGVzZSBlbnRyaWVzLiBUaGV5J3JlIHByaW1hcmlseSB1c2VmdWwgZm9yCisjIHByb2dyYW1zIGxpa2UgUGluZSB3aGljaCBwcm92aWRlIHNpbXBsZSBub3RpZmljYXRpb25zIGluIHRoZSBzdGF0dXMKKyMgbGluZS4gUGxlYXNlIG5vdGUgdGhhdCBub24tQVNDSUkgY2hhcmFjdGVycyBkb24ndCB3b3JrIHJpZ2h0IGluIHRoZQorIyBzdGF0dXMgbGluZSwgc2luY2UgVGVybWluYWwuYXBwIGluY29ycmVjdGx5IGludGVycHJldHMgdGhlaXIgVW5pY29kZQorIyBjb2RlcG9pbnRzIGFzIE1hY1JvbWFuIGNvZGVwb2ludHMuCisjCisjICogUmVuYW1lZCB0aGUgQXBwS2l0IFRlcm1pbmFsLmFwcCBlbnRyeSBmcm9tICJBcHBsZV9UZXJtaW5hbCIgdG8KKyMgICAibnN0ZXJtIiB0byBjb21wbHkgd2l0aCB0aGUgbmFtZSBsZW5ndGggYW5kIGNhc2UgY29udmVudGlvbnMgYW5kCisjICAgbGltaXRhdGlvbnMgb2YgdmFyaW91cyBzb2Z0d2FyZSBwYWNrYWdlcyBbbm90YWJseSBTb2xhcmlzIHRlcm1pbmZvCisjICAgYW5kIFVOSVguXSBBIHNpbmdsZSBBcHBsZV9UZXJtaW5hbCBhbGlhcyBpcyByZXRhaW5lZCBmb3IKKyMgICBiYWNrd2FyZHMtY29tcGF0YmlsaXR5LgorIworIyAqIEFkZGVkIGZ1bmN0aW9uIGtleSBzdXBwb3J0IChGMS1GNCkuIFRoZXNlIG9ubHkgd29yayBpbiBUZXJtaW5hbC5hcHAKKyMgICB2ZXJzaW9uIDUxLCBob3BlZnVsbHkgdGhlIGNhcGFiaWxpdGllcyB3b24ndCBjYXVzZSBwcm9ibGVtcyBmb3IgcGVvcGxlCisjICAgdXNpbmcgdmVyc2lvbiA0MS4KKyMKKyMgKiBBZGRlZCAiZnVsbCBjb2xvciIgKC1jKSBlbnRyaWVzIHdoaWNoIHN1cHBvcnQgdGhlIDE2LWNvbG9yIG1vZGUgaW4KKyMgICB2ZXJzaW9uIDUxLgorIworIyAqIEJ5IGRlZmF1bHQsIHZlcnNpb24gNTEgdXNlcyBVVEYtOCBlbmNvZGluZyB3aXRoIGJyb2tlbiBhbHRjaGFyc2V0CisjICAgc3VwcG9ydCwgc28gIkFTQ0lJIiAoLTcpIGVudHJpZXMgd2l0aG91dCBhbHRjaGFyc2V0IHN1cHBvcnQgd2VyZQorIyAgIGFkZGVkLgorCisjIG5zdGVybSAtIEFwcEtpdCBUZXJtaW5hbC5hcHAKKyMKKyMgQXBwbGUncyBNYWMgT1MgWCBpbmNsdWRlcyBhIFRlcm1pbmFsLmFwcCBkZXJpdmVkIGZyb20gdGhlIG9sZCBOZVhUCisjIFRlcm1pbmFsLmFwcC4gSXQgaXMgYSBwYXJ0aWFsIFZUMTAwIGVtdWxhdGlvbiB3aXRoIHNvbWUgeHRlcm0tbGlrZQorIyBleHRlbnNpb25zLiBUaGlzIHRlcm1pbmZvIHdhcyB3cml0dGVuIHRvIGRlc2NyaWJlIHZlcnNpb25zIDQxCisjIChzaGlwcGVkIHdpdGggTWFjIE9TIFggdmVyc2lvbiAxMC4wKSBhbmQgNTEgKHNoaXBwZWQgd2l0aCBNYWMgT1MgWAorIyB2ZXJzaW9uIDEwLjEpIG9mIFRlcm1pbmFsLmFwcC4KKyMKKyMgVGVybWluYWwuYXBwIHJ1bnMgdW5kZXIgdGhlIE1hYyBPUyBYIFF1YXJ0eiB3aW5kb3dpbmcgc3lzdGVtIChhbmQKKyMgb3RoZXIgQXBwS2l0LXN1cHBvcnRlZCB3aW5kb3dpbmcgc3lzdGVtcy4pICBPbiB0aGUgTWFjIE9TIFggbWFjaGluZSBJCisjIHVzZSwgdGhlIGV4ZWN1dGFibGUgZm9yIFRlcm1pbmFsLmFwcCBpczoKKyMgL0FwcGxpY2F0aW9ucy9VdGlsaXRpZXMvVGVybWluYWwuYXBwL0NvbnRlbnRzL01hY09TL1Rlcm1pbmFsCisjCisjIElmIHlvdSdyZSBsb29raW5nIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmdWxsLXNjcmVlbiBzeXN0ZW0KKyMgY29uc29sZSB3aGljaCBydW5zIHVuZGVyIEFwcGxlJ3MgRGFyd2luIG9wZXJhdGluZyBzeXN0ZW0gb24gUG93ZXJQQworIyBwbGF0Zm9ybXMsIHNlZSB0aGUgInhudXBwYyIgZW50cnkgaW5zdGVhZC4KKyMKKyMgVGhlcmUgd2VyZSBubyBmdW5jdGlvbiBrZXlzIGluIHZlcnNpb24gNDEuIEluIHZlcnNpb24gNTEsIHRoZXJlIGFyZQorIyBmb3VyIHdvcmtpbmcgZnVuY3Rpb24ga2V5cyAoRjEsIEYyLCBGMyBhbmQgRjQuKSBUaGUgZnVuY3Rpb24ga2V5cworIyBhcmUgaW5jbHVkZWQgaW4gYWxsIG9mIHRoZXNlIGVudHJpZXMuCisjCisjIEl0IGRvZXMgbm90IHN1cHBvcnQgbW91c2UgcG9pbnRlciBwb3NpdGlvbiByZXBvcnRpbmcuIFVuZGVyIHNvbWUKKyMgY2lyY3Vtc3RhbmNlcyB0aGUgY3Vyc29yIGNhbiBiZSBwb3NpdGlvbmVkIHVzaW5nIG9wdGlvbi1jbGljazsgdGhpcworIyB3b3JrcyBieSBjb21wYXJpbmcgdGhlIGN1cnNvciBwb3NpdGlvbiBhbmQgdGhlIHNlbGVjdGVkIHBvc2l0aW9uLAorIyBhbmQgc2ltdWxhdGluZyBlbm91Z2ggY3Vyc29yLWtleSBwcmVzc2VzIHRvIG1vdmUgdGhlIGN1cnNvciB0byB0aGUKKyMgc2VsZWN0ZWQgcG9zaXRpb24uIFRoaXMgdGVjaG5pcXVlIGZhaWxzIGluIGFsbCBidXQgdGhlIHNpbXBsZXN0CisjIGFwcGxpY2F0aW9ucy4KKyMKKyMgSXQgcHJvdmlkZXMgcGFydGlhbCBBTlNJIGNvbG9yIHN1cHBvcnQgKGJhY2tncm91bmQgY29sb3JzIGludGVyYWN0ZWQKKyMgYmFkbHkgd2l0aCBib2xkIGluIHZlcnNpb24gNDEsIHRob3VnaCwgYXMgcmVmbGVjdGVkIGluIDpuY3Y6LikgVGhlCisjIG1vbm9jaHJvbWUgKC1tKSBlbnRyaWVzIGFyZSB1c2VmdWwgaWYgeW91J3ZlIGRpc2FibGVkIGNvbG9yIHN1cHBvcnQKKyMgb3IgdXNlIGEgbW9ub2Nocm9tZSBtb25pdG9yLiBUaGUgZnVsbCBjb2xvciAoLWMpIGVudHJpZXMgYXJlIHVzZWZ1bAorIyBpbiB2ZXJzaW9uIDUxLCB3aGljaCBkb2Vzbid0IGV4aGliaXQgdGhlIGJhY2tncm91bmQgY29sb3IgYnVnLiBUaGV5CisjIGFsc28gZW5hYmxlIGFuIHh0ZXJtLWNvbXBhdGlibGUgMTYtY29sb3IgbW9kZS4KKyMKKyMgVGhlIGNvbmZpZ3VyYWJsZSB0aXRsZWJhciBpcyBzZXQgdXNpbmcgeHRlcm0tY29tcGF0aWJsZSBzZXF1ZW5jZXM7CisjIGl0IGlzIHVzZWQgYXMgYSBzdGF0dXMgYmFyIGluIHRoZSBzdGF0dXNsaW5lICgtcykgZW50cmllcy4gSXRzIHdpZHRoCisjIGRlcGVuZHMgb24gZm9udCBzaXplcyBhbmQgd2luZG93IHNpemVzLCBidXQgNTAgY2hhcmFjdGVycyBzZWVtcyB0bworIyBiZSB0aGUgZGVmYXVsdCBmb3IgYW4gODB4MjQgd2luZG93LgorIworIyBUaGUgTWFjUm9tYW4gY2hhcmFjdGVyIGVuY29kaW5nIGlzIHVzZWQgZm9yIHNvbWUgb2YgdGhlIGFsdGVybmF0ZQorIyBjaGFyYWN0ZXJzIGluIHRoZSAiTWFjUm9tYW4iIGVudHJpZXM7IHRoZSAiQVNDSUkiICgtNykgZW50cmllcworIyBkaXNhYmxlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IHN1cHBvcnQgZW50aXJlbHksIGFuZCB0aGUgIlZUMTAwIgorIyAoLWFjcykgZW50cmllcyByZWx5IGluc3RlYWQgb24gVGVybWluYWwuYXBwJ3Mgb3duIGJ1Z2d5IFZUMTAwCisjIGdyYXBoaWNzIGVtdWxhdGlvbiwgd2hpY2ggc2VlbXMgdG8gdGhpbmsgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpcworIyB0aGUgb2xkIE5lWFQgY2hhcnNldCBpbnN0ZWFkIG9mIE1hY1JvbWFuLiBUaGUgIkFTQ0lJIiAoLTcpIGVudHJpZXMKKyMgYXJlIHVzZWZ1bCBpbiBUZXJtaW5hbC5hcHAgdmVyc2lvbiA1MSwgd2hpY2ggc3VwcG9ydHMgVVRGLTggYW5kCisjIG90aGVyIEFTQ0lJLWNvbXBhdGlibGUgY2hhcmFjdGVyIGVuY29kaW5ncyBidXQgZG9lcyBub3QgY29ycmVjdGx5CisjIGltcGxlbWVudCBWVDEwMCBncmFwaGljczsgb25jZSBWVDEwMCBncmFwaGljcyBhcmUgY29ycmVjdGx5CisjIGltcGxlbWVudGVkIGluIFRlcm1pbmFsLmFwcCwgdGhlICJWVDEwMCIgKC1hY3MpIGVudHJpZXMgc2hvdWxkIGJlCisjIHVzYWJsZSBpbiBhbnkgQVNDSUktY29tcGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2RpbmcgW2V4Y2VwdCBwZXJoYXBzCisjIGluIFVURi04LCB3aGVyZSBzb21lIGV4cGVydHMgYXJndWUgZm9yIGRpc2FsbG93aW5nIGFsdGVybmF0ZQorIyBjaGFyYWN0ZXJzIGVudGlyZWx5Ll0KKyMKKyMgVGVybWluYWwuYXBwIHJlcG9ydHMgInZ0MTAwIiBhcyB0aGUgdGVybWluYWwgdHlwZSwgYnV0IGV4cG9ydHMKKyMgc2V2ZXJhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggbWF5IGFpZCBkZXRlY3Rpb24gaW4gYSBzaGVsbAorIyBwcm9maWxlIChpLmUuIC5wcm9maWxlIG9yIC5sb2dpbik6CisjCisjIFRFUk09dnQxMDAKKyMgVEVSTV9QUk9HUkFNPUFwcGxlX1Rlcm1pbmFsCisjIFRFUk1fUFJPR1JBTV9WRVJTSU9OPTQxICAgICAgIyBpbiBUZXJtaW5hbC5hcHAgdmVyc2lvbiA0MQorIyBURVJNX1BST0dSQU1fVkVSU0lPTj01MSAgICAgICMgaW4gVGVybWluYWwuYXBwIHZlcnNpb24gNTEKKyMKKyMgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgQm91cm5lIHNoZWxsIHNjcmlwdCB3b3VsZCBkZXRlY3QgdGhlCisjIGNvcnJlY3QgdGVybWluYWwgdHlwZToKKyMKKyMgaWYgWyA6IiRURVJNIiA9IDoidnQxMDAiIC1hIDoiJFRFUk1fUFJPR1JBTSIgPSA6IkFwcGxlX1Rlcm1pbmFsIiBdCisjIHRoZW4KKyMgICAgIGV4cG9ydCBURVJNCisjICAgICBpZiBbIDoiJFRFUk1fUFJPR1JBTV9WRVJTSU9OIiA9IDo0MSBdCisjICAgICB0aGVuCisjICAgICAgICAgVEVSTT0ibnN0ZXJtIgorIyAgICAgZWxzZQorIyAgICAgICAgIFRFUk09Im5zdGVybS1jLTciCisjICAgICBmaQorIyBmaQorIworIyBJbiBhIEMgc2hlbGwgZGVyaXZhdGl2ZSwgdGhpcyB3b3VsZCBiZSBhY2NvbXBsaXNoZWQgYnk6CisjCisjIGlmICggJD9URVJNICYmICQ/VEVSTV9QUk9HUkFNICYmICQ/VEVSTV9QUk9HUkFNX1ZFUlNJT04pIHRoZW4KKyMgICAgIGlmICggOiIkVEVSTSIgPT0gOiJ2dDEwMCIgJiYgOiIkVEVSTV9QUk9HUkFNIiA9PSA6IkFwcGxlX1Rlcm1pbmFsIiApIHRoZW4KKyMgICAgICAgICAgaWYgKCA6IiRURVJNX1BST0dSQU1fVkVSU0lPTiIgPT0gOjQxICkgdGhlbgorIyAgICAgICAgICAgICAgc2V0ZW52IFRFUk0gIm5zdGVybSIKKyMgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgc2V0ZW52IFRFUk0gIm5zdGVybS1jLTciCisjICAgICAgICAgIGVuZGlmCisjICAgICBlbmRpZgorIyBlbmRpZgorCisjIFRoZSAnKycgZW50cmllcyBhcmUgYnVpbGRpbmcgYmxvY2tzCituc3Rlcm0rN3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgYmFzaWMgY2FwYWJpbGl0aWVzIHcvQVNDSUkgY2hhcnNldCwKKwlhbSwgYncsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBlbDE9XEVbMUssCisJaG9tZT1cRVtILCBodD1eSSwgaHRzPVxFSCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWticz1cMTc3LCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtlbnQ9XEVPTSwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwgcm1hbT1cRVs/N2wsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttLAorCXJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsIHNjPVxFNywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttLAorCXNncjA9XEVbbVwwMTcsIHNtYW09XEVbPzdoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHVzZT12dDEwMCtlbnEsIHVzZT12dDEwMCtwZmtleXMsCisKK25zdGVybSthY3N8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIGJhc2ljIGNhcGFiaWxpdGllcyB3L1ZUMTAwIGFsdGVybmF0ZS1jaGFyc2V0LAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJZW5hY3M9XEUoQlxFKTAsIHJtYWNzPV5PLAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTslPyVwNCV0OzUlO20lPyVwOSV0XDAxNiVlXDAxNyU7LAorCXNtYWNzPV5OLCB1c2U9bnN0ZXJtKzcsCisKK25zdGVybSttYWN8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIGJhc2ljIGNhcGFiaWxpdGllcyB3L01hY1JvbWFuIGFsdGVybmF0ZS1jaGFyc2V0LAorCWFjc2M9MCNgXDMyN2FcOmZcMjQxZ1wyNjFoI2lcMzYwampra2xsbW1ubm9cMzcwcFwzNzBxXDMyMXJyc3N0dHV1dnZ3d3h4eVwyNjJ6XDI2M3tcMjcxfFwyNTV9XDI0M35cMjQ1K1wzMzUtXDM2NlwsXDMzNC5cMzc3LAorCWVuYWNzPVxFKEJcRSkwLCBybWFjcz1eTywKKwlzZ3I9XEVbMCU/JXA2JXQ7MSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7JT8lcDQldDs1JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzbWFjcz1eTiwgdXNlPW5zdGVybSs3LAorCituc3Rlcm0rc3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgc3RhdHVzLWxpbmUgKHdpbmRvdyB0aXRsZWJhcikgc3VwcG9ydCwKKwlocywKKwl3c2wjNTAsCisJZHNsPVxFXTI7XDAwNywgZnNsPV5HLCB0c2w9XEVdMjssCisKK25zdGVybStjfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjUxKyBmdWxsIGNvbG9yIHN1cHBvcnQgKGluY2x1ZGluZyAxNiBjb2xvcnMpLAorCW9wPVxFWzBtLCB1c2U9aWJtKzE2Y29sb3IsCisKK25zdGVybStjNDF8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDEgY29sb3Igc3VwcG9ydCwKKwljb2xvcnMjOCwgbmN2IzM3LCBwYWlycyM2NCwKKwlvcD1cRVswbSwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKworIyBUaGVzZSBhcmUgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiB0aGUgYnVpbGRpbmcgYmxvY2tzCisKKyMgQVNDSUkgY2hhcnNldCAoLTcpCituc3Rlcm0tbS03fG5zdGVybS03LW18QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvQVNDSUkgY2hhcnNldCAobW9ub2Nocm9tZSksCisJdXNlPW5zdGVybSs3LAorCituc3Rlcm0tbS1zLTd8bnN0ZXJtLTctbS1zfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyB3L0FTQ0lJIGNoYXJzZXQgKG1vbm9jaHJvbWUgdy9zdGF0dXNsaW5lKSwKKwl1c2U9bnN0ZXJtK3MsIHVzZT1uc3Rlcm0rNywKKworbnN0ZXJtLTd8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvQVNDSUkgY2hhcnNldCAoY29sb3IpLAorCXVzZT1uc3Rlcm0rYzQxLCB1c2U9bnN0ZXJtKzcsCisKK25zdGVybS03LWN8bnN0ZXJtLWMtN3xBcHBLaXQgVGVybWluYWwuYXBwIHY1MSsgdy9BU0NJSSBjaGFyc2V0IChmdWxsIGNvbG9yKSwKKwl1c2U9bnN0ZXJtK2MsIHVzZT1uc3Rlcm0rNywKKworbnN0ZXJtLXMtN3xuc3Rlcm0tNy1zfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyB3L0FTQ0lJIGNoYXJzZXQgKGNvbG9yIHcvc3RhdHVzbGluZSksCisJdXNlPW5zdGVybStzLCB1c2U9bnN0ZXJtK2M0MSwgdXNlPW5zdGVybSs3LAorCituc3Rlcm0tYy1zLTd8bnN0ZXJtLTctYy1zfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjUxKyB3L0FTQ0lJIGNoYXJzZXQgKGZ1bGwgY29sb3Igdy9zdGF0dXNsaW5lKSwKKwl1c2U9bnN0ZXJtK3MsIHVzZT1uc3Rlcm0rYywgdXNlPW5zdGVybSs3LAorCisjIFZUMTAwIGFsdGVybmF0ZS1jaGFyc2V0ICgtYWNzKQorbnN0ZXJtLW0tYWNzfG5zdGVybS1hY3MtbXxBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9WVDEwMCBhbHRlcm5hdGUtY2hhcnNldCAobW9ub2Nocm9tZSksCisJdXNlPW5zdGVybSthY3MsCisKK25zdGVybS1tLXMtYWNzfG5zdGVybS1hY3MtbS1zfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjQxKyB3L1ZUMTAwIGFsdGVybmF0ZS1jaGFyc2V0IChtb25vY2hyb21lIHcvc3RhdHVzbGluZSksCisJdXNlPW5zdGVybStzLCB1c2U9bnN0ZXJtK2FjcywKKworbnN0ZXJtLWFjc3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9WVDEwMCBhbHRlcm5hdGUtY2hhcnNldCAoY29sb3IpLAorCXVzZT1uc3Rlcm0rYzQxLCB1c2U9bnN0ZXJtK2FjcywKKworbnN0ZXJtLWMtYWNzfG5zdGVybS1hY3MtY3xBcHBLaXQgVGVybWluYWwuYXBwIHY1MSsgdy9WVDEwMCBhbHRlcm5hdGUtY2hhcnNldCAoZnVsbCBjb2xvciksCisJdXNlPW5zdGVybStjLCB1c2U9bnN0ZXJtK2FjcywKKworbnN0ZXJtLXMtYWNzfG5zdGVybS1hY3Mtc3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9WVDEwMCBhbHRlcm5hdGUtY2hhcnNldCAoY29sb3Igdy9zdGF0dXNsaW5lKSwKKwl1c2U9bnN0ZXJtK3MsIHVzZT1uc3Rlcm0rYzQxLCB1c2U9bnN0ZXJtK2FjcywKKworbnN0ZXJtLWMtcy1hY3N8bnN0ZXJtLWFjcy1jLXN8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NTErIHcvVlQxMDAgYWx0ZXJuYXRlLWNoYXJzZXQgKGZ1bGwgY29sb3Igdy9zdGF0dXNsaW5lKSwKKwl1c2U9bnN0ZXJtK3MsIHVzZT1uc3Rlcm0rYywgdXNlPW5zdGVybSthY3MsCisKKyMgTWFjUm9tYW4gY2hhcnNldAorbnN0ZXJtLW18QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvTWFjUm9tYW4gY2hhcnNldCAobW9ub2Nocm9tZSksCisJdXNlPW5zdGVybSttYWMsCisKK25zdGVybS1tLXN8QXBwS2l0IFRlcm1pbmFsLmFwcCB2NDErIHcvTWFjUm9tYW4gY2hhcnNldCAobW9ub2Nocm9tZSB3L3N0YXR1c2xpbmUpLAorCXVzZT1uc3Rlcm0rcywgdXNlPW5zdGVybSttYWMsCisKK25zdGVybXxBcHBsZV9UZXJtaW5hbHxBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9NYWNSb21hbiBjaGFyc2V0IChjb2xvciksCisJdXNlPW5zdGVybStjNDEsIHVzZT1uc3Rlcm0rbWFjLAorCituc3Rlcm0tY3xBcHBLaXQgVGVybWluYWwuYXBwIHY1MSsgdy9NYWNSb21hbiBjaGFyc2V0IChmdWxsIGNvbG9yKSwKKwl1c2U9bnN0ZXJtK2MsIHVzZT1uc3Rlcm0rbWFjLAorCituc3Rlcm0tc3xBcHBLaXQgVGVybWluYWwuYXBwIHY0MSsgdy9NYWNSb21hbiBjaGFyc2V0IChjb2xvciB3L3N0YXR1c2xpbmUpLAorCXVzZT1uc3Rlcm0rcywgdXNlPW5zdGVybStjNDEsIHVzZT1uc3Rlcm0rbWFjLAorCituc3Rlcm0tYy1zfEFwcEtpdCBUZXJtaW5hbC5hcHAgdjUxKyB3L01hY1JvbWFuIGNoYXJzZXQgKGZ1bGwgY29sb3Igdy9zdGF0dXNsaW5lKSwKKwl1c2U9bnN0ZXJtK3MsIHVzZT1uc3Rlcm0rYywgdXNlPW5zdGVybSttYWMsCisKKworIyBUaGlzIGVudHJ5IGlzIGJhc2VkIG9uIG5ld3Nncm91cCBjb21tZW50cyBieSBBbGFpbiBCZW5jaCwgQ2hyaXN0aWFuIEViZXJ0LAorIyBhbmQgRCBQIFNjaHJlYmVyIGNvbXBhcmluZyB0byBuc3Rlcm0tYy1zLWFjcy4KKyMKKyMgRCBQIFNjaHJlYmVyIG5vdGVzIHRoYXQgJFRFUk0gY2FuIGJlIHNldCBpbiBUZXJtaW5hbC5hcHAsIGUuZy4sCisjCWRlZmF1bHRzIHdyaXRlIGNvbS5hcHBsZS5UZXJtaW5hbCBUZXJtQ2FwU3RyaW5nIG5zdGVybS1jLXMtYWNzCisjIGFuZCB0aGF0IGl0IGlzIG5vdCBzZXQgaW4gVGVybWluYWwncyBwcmVmZXJlbmNlcyBkaWFsb2cuCituc3Rlcm0tMTZjb2xvcnxBcHBLaXQgVGVybWluYWwuYXBwIHYxMDAuMS44IHdpdGggTWFjT1MgWCAxMC4zLjksCisJa2RjaDE9XEVbM34sIGtmMTA9XEVbMjF+LCBrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sCisJa2Y1PVxFWzE1fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwKKwlrbnA9XEVbNn4sIGtwcD1cRVs1fiwgdXNlPW5zdGVybS1jLXMtYWNzLAorCisjIHhudXBwYyAtIERhcndpbiBQb3dlclBDIENvbnNvbGUgKGEuay5hLiAiZGFyd2luIikKKyMKKyMgT24gUG93ZXJQQyBwbGF0Zm9ybXMsIEFwcGxlJ3MgRGFyd2luIG9wZXJhdGluZyBzeXN0ZW0gdXNlcyBhCisjIGZ1bGwtc2NyZWVuIHN5c3RlbSBjb25zb2xlIGRlcml2ZWQgZnJvbSBhIE5ldEJTRCBmcmFtZWJ1ZmZlcgorIyBjb25zb2xlLiBJdCBpcyBhbiBBTlNJLXN0eWxlIHRlcm1pbmFsLCBhbmQgaXMgbm90IHJlYWxseSBWVC0xMDAKKyMgY29tcGF0aWJsZS4KKyMKKyMgVW5kZXIgTWFjIE9TIFgsIHRoaXMgaXMgdGhlIHN5c3RlbSBjb25zb2xlIGRyaXZlciB1c2VkIHdoaWxlIGluCisjIHNpbmdsZS11c2VyIG1vZGUgW3JlYWNoYWJsZSBieSBob2xkaW5nIGRvd24gQ29tbWFuZC1TIGR1cmluZyB0aGUKKyMgYm9vdCBwcm9jZXNzXSBhbmQgd2hlbiBsb2dnZWQgaW4gdXNpbmcgY29uc29sZSBtb2RlIFtyZWFjaGFibGUgYnkKKyMgdHlwaW5nICI+Y29uc29sZSIgYXQgdGhlIGdyYXBoaWNhbCBsb2dpbiBwcm9tcHQuXQorIworIyBJZiB5b3UncmUgbG9va2luZyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgVGVybWluYWwuYXBwIHRlcm1pbmFsCisjIGVtdWxhdG9yIHdoaWNoIHJ1bnMgdW5kZXIgdGhlIE1hYyBPUyBYIFF1YXJ0eiB3aW5kb3dpbmcgc3lzdGVtIChhbmQKKyMgb3RoZXIgQXBwS2l0LXN1cHBvcnRlZCB3aW5kb3dpbmcgc3lzdGVtcywpIHNlZSB0aGUgIm5zdGVybSIKKyMgZW50cnkgaW5zdGVhZC4KKyMKKyMgTk9URTogVW5kZXIgTWFjIE9TIFggdmVyc2lvbiAxMC4xLCB0aGUgZGVmYXVsdCBsb2dpbiB3aW5kb3cgZG9lcyBub3QKKyMgcHJvbXB0IGZvciB1c2VyIG5hbWUsIGluc3RlYWQgcmVxdWlyaW5nIGFuIGljb24gdG8gYmUgc2VsZWN0ZWQgZnJvbQorIyBhIGxpc3Qgb2Yga25vd24gdXNlcnMuIFNpbmNlIHRoZSBzcGVjaWFsICI+Y29uc29sZSIgbG9naW4gaXMgbm90IGluCisjIHRoaXMgbGlzdCwgeW91IG11c3QgbWFrZSBvbmUgb2YgdHdvIGNoYW5nZXMgaW4gdGhlIExvZ2luIFdpbmRvdworIyBwYW5lbCBvZiB0aGUgTG9naW4gc2VjdGlvbiBvZiBTeXN0ZW0gUHJlZnMgdG8gbWFrZSB0aGUgc3BlY2lhbAorIyAiPmNvbnNvbGUiIGxvZ2luIGFjY2Vzc2libGUuIFRoZSBmaXJzdCBvcHRpb24gaXMgdG8gZW5hYmxlICdTaG93CisjICJPdGhlciBVc2VyIiBpbiBsaXN0IGZvciBuZXR3b3JrIHVzZXJzJywgd2hpY2ggd2lsbCBhZGQgYSBzcGVjaWFsCisjICJPdGhlci4uLiIgaWNvbiB0byB0aGUgZ3JhcGhpY2FsIGxvZ2luIHBhbmVsLiBTZWxlY3RpbmcgIk90aGVyLi4uIgorIyB3aWxsIHByZXNlbnQgdGhlIHJlZ3VsYXIgZ3JhcGhpY2FsIGxvZ2luIHByb21wdC4gVGhlIHNlY29uZCBvcHRpb24KKyMgaXMgdG8gY2hhbmdlIHRoZSAnRGlzcGxheSBMb2dpbiBXaW5kb3cgYXM6JyBzZXR0aW5nIHRvICdOYW1lIGFuZAorIyBwYXNzd29yZCBlbnRyeSBmaWVsZHMnLCB3aGljaCByZXBsYWNlcyB0aGUgbG9naW4gcGFuZWwgd2l0aCBhCisjIGdyYXBoaWNhbCBsb2dpbiBwcm9tcHQuCisjCisjIFRoZXJlIGFyZSBubyBmdW5jdGlvbiBrZXlzLCBhdCBsZWFzdCBub3QgaW4gRGFyd2luIDEuMy4KKyMKKyMgSXQgaGFzIG5vIG1vdXNlIHN1cHBvcnQuCisjCisjIEl0IGhhcyBmdWxsIEFOU0kgY29sb3Igc3VwcG9ydCwgYW5kIGNvbG9yIGNvbWJpbmVzIGNvcnJlY3RseSB3aXRoCisjIGFsbCB0aHJlZSBzdXBwb3J0ZWQgYXR0cmlidXRlczogYm9sZCwgaW52ZXJzZS12aWRlbyBhbmQgdW5kZXJsaW5lLgorIyBIb3dldmVyLCBib2xkIGNvbG9yZWQgdGV4dCBpcyBhbG1vc3QgdW5yZWFkYWJsZSAoYm9sZGluZyBpcworIyBhY2NvbXBsaXNoZWQgdXNpbmcgc2hpZnRpbmcgYW5kIG9yLWluZywgYW5kIGxvb2tzIHNtZWFyZWQpIHNvIGJvbGQKKyMgaGFzIGJlZW4gZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBvZiBjb2xvci1jb21wYXRpYmxlIGF0dHJpYnV0ZXMKKyMgW3VzaW5nIChuY3YpXS4gVGhlIG1vbm9jaHJvbWUgZW50cnkgKC1tKSBpcyB1c2VmdWwgaWYgeW91IHVzZSBhCisjIG1vbm9jaHJvbWUgbW9uaXRvci4KKyMKKyMgVGhlcmUgaXMgb25lIHNlcmlvdXMgYnVnIHdpdGggdGhpcyB0ZXJtaW5hbCBlbXVsYXRpb24ncyBjb2xvcgorIyBzdXBwb3J0OiByZXBvc2l0aW9uaW5nIHRoZSBjdXJzb3Igb250byBhIGNlbGwgd2l0aCBub24tbWF0Y2hpbmcKKyMgY29sb3JzIG9ibGl0ZXJhdGVzIHRoYXQgY2VsbCdzIGNvbnRlbnRzLCByZXBsYWNpbmcgaXQgd2l0aCBhIGJsYW5rCisjIGFuZCBkaXNwbGF5aW5nIGEgY29sb3JlZCBjdXJzb3IgaW4gdGhlICJjdXJyZW50IiBjb2xvcnMuIFRoZXJlIGlzCisjIG5vIGNvbXBsZXRlIHdvcmthcm91bmQgYXQgcHJlc2VudCBbb3RoZXIgdGhhbiB1c2luZyB0aGUgbW9ub2Nocm9tZQorIyAoLW0pIGVudHJpZXMsXSBidXQgcmVtb3ZpbmcgdGhlIChtc2dyKSBjYXBhYmlsaXR5IHNlZW1lZCB0byBoZWxwLgorIworIyBUaGUgInN0YW5kb3V0IiBjaG9zZW4gd2FzIHNpbXBsZSByZXZlcnNlLXZpZGVvLCBhbHRob3VnaCBhIGNvbG9yZnVsCisjIHN0YW5kb3V0IG1pZ2h0IGJlIG1vcmUgYWVzdGhldGljYWxseSBwbGVhc2luZy4gU2ltaWxhcmx5LCB0aGUgYm9sZAorIyBjaG9zZW4gaXMgdGhlIHRlcm1pbmFsJ3Mgb3duIHNtZWFyZWQgYm9sZCwgYWx0aG91Z2ggYSBzaW1wbGUKKyMgY29sb3ItY2hhbmdlIG1pZ2h0IGJlIG1vcmUgcmVhZGFibGUuIFRoZSBjb2xvci1ib2xkICgtYikgZW50cmllcworIyB1c2VzIG1hZ2VudGEgY29sb3JlZCB0ZXh0IGZvciBib2xkaW5nIGluc3RlYWQuIFRoZSBmYW5jeSBjb2xvciAoLWYKKyMgYW5kIC1mMikgZW50cmllcyB1c2UgY29sb3IgZm9yIGJvbGQsIHN0YW5kb3V0IGFuZCB1bmRlcmxpbmVkIHRleHQKKyMgKHVuZGVybGluZWQgdGV4dCBpcyBzdGlsbCB1bmRlcmxpbmVkLCB0aG91Z2guKQorIworIyBBcHBhcmVudGx5IHRoZSB0ZXJtaW5hbCBlbXVsYXRvciBkb2VzIHN1cHBvcnQgYSBWVC0xMDAtc3R5bGUKKyMgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQsIGJ1dCBhbGwgdGhlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisjIHBvc2l0aW9ucyBoYXZlIGJlZW4gbGVmdCBibGFuayBpbiB0aGUgZm9udC4gRm9yIHRoaXMgcmVhc29uLCBubworIyBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoaXMKKyMgZGVzY3JpcHRpb24uIFRoZSBjb25zb2xlIGRyaXZlciBhcHBlYXJzIHRvIGJlIEFTQ0lJLW9ubHksIHNvIChlbmFjcykKKyMgaGFzIGJlZW4gZXhjbHVkZWQgW2FsdGhvdWdoIHRoZSBWVC0xMDAgc2VxdWVuY2UgZG9lcyB3b3JrLl0KKyMKKyMgVGhlIGRlZmF1bHQgTWFjIE9TIFggYW5kIERhcndpbiBpbnN0YWxsYXRpb24gcmVwb3J0cyAidnQxMDAiIGFzIHRoZQorIyB0ZXJtaW5hbCB0eXBlLCBhbmQgZXhwb3J0cyBubyBoZWxwZnVsIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVG8gZml4CisjIHRoaXMsIGNoYW5nZSB0aGUgImNvbnNvbGUiIGVudHJ5IGluIC9ldGMvdHR5cyBmcm9tICJ2dDEwMCIgdG8KKyMgInhudXBwYy1XeEgiLCB3aGVyZSBXIGFuZCBIIGFyZSB0aGUgY2hhcmFjdGVyIGRpbWVuc2lvbnMgb2YgeW91cgorIyBjb25zb2xlIChzZWUgYmVsb3cuKQorIworIyBUaGUgZm9udCB1c2VkIGJ5IHRoZSB0ZXJtaW5hbCBlbXVsYXRvciBpcyBhcHBhcmVudGx5IG9uZSBvcmlnaW5hbGx5CisjIGRyYXduIGJ5IEthLVBpbmcgWWVlLCBhbmQgdXNlcyA4eDE2LXBpeGVsIGNoYXJhY3RlcnMuIFRoaXMKKyMgZmlsZSBpbmNsdWRlcyBkZXNjcmlwdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgZ2VvbWV0cmllczoKKyMKKyMgICAgIFBpeGVscyAgICAgICAgQ2hhcmFjdGVycyAgIEVudHJ5IE5hbWUgKGFwcGVuZCAtbSBmb3IgbW9ub2Nocm9tZSkKKyMgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgNjQweDQwMCAgICAgICA4MHgyNSAgICAgICAgeG51cHBjLTgweDI1CisjICAgICA2NDB4NDgwICAgICAgIDgweDMwICAgICAgICB4bnVwcGMtODB4MzAKKyMgICAgIDcyMHg0ODAgICAgICAgOTB4MzAgICAgICAgIHhudXBwYy05MHgzMAorIyAgICAgODAweDYwMCAgICAgICAxMDB4MzcgICAgICAgeG51cHBjLTEwMHgzNworIyAgICAgODk2eDYwMCAgICAgICAxMTJ4MzcgICAgICAgeG51cHBjLTExMngzNworIyAgICAgMTAyNHg2NDAgICAgICAxMjh4NDAgICAgICAgeG51cHBjLTEyOHg0MAorIyAgICAgMTAyNHg3NjggICAgICAxMjh4NDggICAgICAgeG51cHBjLTEyOHg0OAorIyAgICAgMTE1Mng3NjggICAgICAxNDR4NDggICAgICAgeG51cHBjLTE0NHg0OAorIyAgICAgMTI4MHgxMDI0ICAgICAxNjB4NjQgICAgICAgeG51cHBjLTE2MHg2NAorIyAgICAgMTYwMHgxMDI0ICAgICAyMDB4NjQgICAgICAgeG51cHBjLTIwMHg2NAorIyAgICAgMTYwMHgxMjAwICAgICAyMDB4NzUgICAgICAgeG51cHBjLTIwMHg3NQorIyAgICAgMjA0OHgxNTM2ICAgICAyNTZ4OTYgICAgICAgeG51cHBjLTI1Nng5NgorIworIyBUaGUgYmFzaWMgInhudXBwYyIgZW50cnkgaW5jbHVkZXMgbm8gc2l6ZSBpbmZvcm1hdGlvbiwgYW5kIHRoZQorIyBlbXVsYXRvciBpbmNsdWRlcyBubyByZXBvcnRpbmcgY2FwYWJpbGl0eSwgc28geW91J2xsIGJlIGF0IHRoZSBtZXJjeQorIyBvZiB0aGUgVFRZIGRldmljZSAod2hpY2ggcmVwb3J0cyBpbmNvcnJlY3RseSBvbiBteSBoYXJkd2FyZS4pIFRoZQorIyBjb2xvci1ib2xkIGVudHJpZXMgZG8gbm90IGluY2x1ZGUgc2l6ZSBpbmZvcm1hdGlvbi4KKworIyBUaGUgJysnIGVudHJpZXMgYXJlIGJ1aWxkaW5nIGJsb2NrcworeG51cHBjK2Jhc2ljfERhcndpbiBQb3dlclBDIENvbnNvbGUgYmFzaWMgY2FwYWJpbGl0aWVzLAorCWFtLCBiY2UsIG1pciwgeGVubCwKKwlpdCM4LAorCWJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVtKLCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZHNsPVxFXTI7XDAwNywgZWQ9XEVbSiwgZWw9XEVbSywKKwllbDE9XEVbMUssIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGluZD1eSiwga2JzPVwxNzcsCisJa2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwgcmM9XEU4LAorCXJldj1cRVs3bSwgcmk9XEVNLCBybWFtPVxFWz83bCwgcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHJzMj1cRT5cRVs/M2xcRVs/NGxcRVs/NWxcRVs/N2hcRVs/OGgsCisJc2M9XEU3LAorCXNncj1cRVswJT8lcDYldDsxJTslPyVwMiV0OzQlOyU/JXAxJXAzJXwldDs3JTttLAorCXNncjA9XEVbbVwwMTcsIHNtYW09XEVbPzdoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csIHVzZT12dDEwMCtrZXlwYWQsCisKK3hudXBwYytjfERhcndpbiBQb3dlclBDIENvbnNvbGUgQU5TSSBjb2xvciBzdXBwb3J0LAorCWNvbG9ycyM4LCBuY3YjMzIsIHBhaXJzIzY0LAorCW9wPVxFWzM3OzQwbSwgc2V0YWI9XEVbNCVwMSVkbSwgc2V0YWY9XEVbMyVwMSVkbSwKKworeG51cHBjK2J8RGFyd2luIFBvd2VyUEMgQ29uc29sZSBjb2xvci1ib2xkIHN1cHBvcnQsCisJbmN2IzMyLAorCWJvbGQ9XEVbMzVtLAorCXNncj1cRVswJT8lcDYldDszNSU7JT8lcDIldDs0JTslPyVwMSVwMyV8JXQ7NyU7bSwKKwl1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMrZnxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIGZhbmN5IGNvbG9yIHN1cHBvcnQsCisJbmN2IzM1LAorCXNncj1cRVswJT8lcDYldDszNSU7JT8lcDIldDszNjs0JTslPyVwMSV0OzMzOzQ0JTslPyVwMyV0OzclO20sCisJc21zbz1cRVszMzs0NG0sIHNtdWw9XEVbMzY7NG0sIHVzZT14bnVwcGMrYiwKKworeG51cHBjK2YyfERhcndpbiBQb3dlclBDIENvbnNvbGUgYWx0ZXJuYXRlIGZhbmN5IGNvbG9yIHN1cHBvcnQsCisJbmN2IzM1LAorCWJvbGQ9XEVbMzNtLAorCXNncj1cRVswJT8lcDYldDszMyU7JT8lcDIldDszNCU7JT8lcDEldDszMTs0NyU7JT8lcDMldDs3JTttLAorCXNtc289XEVbMzE7NDdtLCBzbXVsPVxFWzM0bSwgdXNlPXhudXBwYytiYXNpYywKKworIyBCdWlsZGluZyBibG9ja3MgZm9yIHNwZWNpZmljIHNjcmVlbiBzaXplcworeG51cHBjKzgweDI1fERhcndpbiBQb3dlclBDIENvbnNvbGUgODB4MjUgc3VwcG9ydCAoNjQweDQwMCBwaXhlbHMpLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCit4bnVwcGMrODB4MzB8RGFyd2luIFBvd2VyUEMgQ29uc29sZSA4MHgzMCBzdXBwb3J0ICg2NDB4NDgwIHBpeGVscyksCisJY29scyM4MCwgbGluZXMjMzAsCisKK3hudXBwYys5MHgzMHxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIDkweDMwIHN1cHBvcnQgKDcyMHg0ODAgcGl4ZWxzKSwKKwljb2xzIzkwLCBsaW5lcyMzMCwKKworeG51cHBjKzEwMHgzN3xEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIDEwMHgzNyBzdXBwb3J0ICg4MDB4NjAwIHBpeGVscyksCisJY29scyMxMDAsIGxpbmVzIzM3LAorCit4bnVwcGMrMTEyeDM3fERhcndpbiBQb3dlclBDIENvbnNvbGUgMTEyeDM3IHN1cHBvcnQgKDg5Nng2MDAgcGl4ZWxzKSwKKwljb2xzIzExMiwgbGluZXMjMzcsCisKK3hudXBwYysxMjh4NDB8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAxMjh4NDAgc3VwcG9ydCAoMTAyNHg2NDAgcGl4ZWxzKSwKKwljb2xzIzEyOCwgbGluZXMjNDAsCisKK3hudXBwYysxMjh4NDh8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAxMjh4NDggc3VwcG9ydCAoMTAyNHg3NjggcGl4ZWxzKSwKKwljb2xzIzEyOCwgbGluZXMjNDgsCisKK3hudXBwYysxNDR4NDh8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAxNDR4NDggc3VwcG9ydCAoMTE1Mng3NjggcGl4ZWxzKSwKKwljb2xzIzE0NCwgbGluZXMjNDgsCisKK3hudXBwYysxNjB4NjR8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAxNjB4NjQgc3VwcG9ydCAoMTI4MHgxMDI0IHBpeGVscyksCisJY29scyMxNjAsIGxpbmVzIzY0LAorCit4bnVwcGMrMjAweDY0fERhcndpbiBQb3dlclBDIENvbnNvbGUgMjAweDY0IHN1cHBvcnQgKDE2MDB4MTAyNCBwaXhlbHMpLAorCWNvbHMjMjAwLCBsaW5lcyM2NCwKKworeG51cHBjKzIwMHg3NXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIDIwMHg3NSBzdXBwb3J0ICgxNjAweDEyMDAgcGl4ZWxzKSwKKwljb2xzIzIwMCwgbGluZXMjNzUsCisKK3hudXBwYysyNTZ4OTZ8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAyNTZ4OTYgc3VwcG9ydCAoMjA0OHgxNTM2IHBpeGVscyksCisJY29scyMyNTYsIGxpbmVzIzk2LAorCisjIFRoZXNlIGFyZSBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIHRoZSBidWlsZGluZyBibG9ja3MKKworeG51cHBjLW18ZGFyd2luLW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSksCisJdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjfGRhcndpbnxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvciksCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtbS1ifGRhcndpbi1tLWJ8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSB3L2NvbG9yLWJvbGQpLAorCXVzZT14bnVwcGMrYiwKKworeG51cHBjLWJ8ZGFyd2luLWJ8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3Igdy9jb2xvci1ib2xkKSwKKwl1c2U9eG51cHBjK2IsIHVzZT14bnVwcGMrYywKKworeG51cHBjLW0tZnxkYXJ3aW4tbS1mfERhcndpbiBQb3dlclBDIENvbnNvbGUgKGZhbmN5IG1vbm9jaHJvbWUpLAorCXVzZT14bnVwcGMrZiwKKworeG51cHBjLWZ8ZGFyd2luLWZ8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoZmFuY3kgY29sb3IpLAorCXVzZT14bnVwcGMrZiwgdXNlPXhudXBwYytjLAorCit4bnVwcGMtbS1mMnxkYXJ3aW4tbS1mMnxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChhbHRlcm5hdGUgZmFuY3kgbW9ub2Nocm9tZSksCisJdXNlPXhudXBwYytmMiwKKworeG51cHBjLWYyfGRhcndpbi1mMnxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChhbHRlcm5hdGUgZmFuY3kgY29sb3IpLAorCXVzZT14bnVwcGMrZjIsIHVzZT14bnVwcGMrYywKKworIyBDb21iaW5hdGlvbnMgZm9yIHNwZWNpZmljIHNjcmVlbiBzaXplcworeG51cHBjLTgweDI1LW18ZGFyd2luLTgweDI1LW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgODB4MjUsCisJdXNlPXhudXBwYys4MHgyNSwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTgweDI1fGRhcndpbi04MHgyNXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgODB4MjUsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzgweDI1LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtODB4MzAtbXxkYXJ3aW4tODB4MzAtbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSA4MHgzMCwKKwl1c2U9eG51cHBjKzgweDMwLCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtODB4MzB8ZGFyd2luLTgweDMwfERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSA4MHgzMCwKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrODB4MzAsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy05MHgzMC1tfGRhcndpbi05MHgzMC1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDkweDMwLAorCXVzZT14bnVwcGMrOTB4MzAsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy05MHgzMHxkYXJ3aW4tOTB4MzB8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDkweDMwLAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYys5MHgzMCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTEwMHgzNy1tfGRhcndpbi0xMDB4MzctbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSAxMDB4MzcsCisJdXNlPXhudXBwYysxMDB4MzcsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xMDB4Mzd8ZGFyd2luLTEwMHgzN3xEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgMTAweDM3LAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYysxMDB4MzcsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xMTJ4MzctbXxkYXJ3aW4tMTEyeDM3LW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgMTEyeDM3LAorCXVzZT14bnVwcGMrMTEyeDM3LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTEyeDM3fGRhcndpbi0xMTJ4Mzd8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDExMngzNywKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrMTEyeDM3LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTI4eDQwLW18ZGFyd2luLTEyOHg0MC1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDEyOHg0MCwKKwl1c2U9eG51cHBjKzEyOHg0MCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTEyOHg0MHxkYXJ3aW4tMTI4eDQwfERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSAxMjh4NDAsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzEyOHg0MCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTEyOHg0OC1tfGRhcndpbi0xMjh4NDgtbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSAxMjh4NDgsCisJdXNlPXhudXBwYysxMjh4NDgsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xMjh4NDh8ZGFyd2luLTEyOHg0OHxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgMTI4eDQ4LAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYysxMjh4NDgsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0xNDR4NDgtbXxkYXJ3aW4tMTQ0eDQ4LW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgMTQ0eDQ4LAorCXVzZT14bnVwcGMrMTQ0eDQ4LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTQ0eDQ4fGRhcndpbi0xNDR4NDh8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDE0NHg0OCwKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrMTQ0eDQ4LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMTYweDY0LW18ZGFyd2luLTE2MHg2NC1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDE2MHg2NCwKKwl1c2U9eG51cHBjKzE2MHg2NCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTE2MHg2NHxkYXJ3aW4tMTYweDY0fERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSAxNjB4NjQsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzE2MHg2NCwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTIwMHg2NC1tfGRhcndpbi0yMDB4NjQtbXxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChtb25vY2hyb21lKSAyMDB4NjQsCisJdXNlPXhudXBwYysyMDB4NjQsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0yMDB4NjR8ZGFyd2luLTIwMHg2NHxEYXJ3aW4gUG93ZXJQQyBDb25zb2xlIChjb2xvcikgMjAweDY0LAorCXVzZT14bnVwcGMrYywgdXNlPXhudXBwYysyMDB4NjQsIHVzZT14bnVwcGMrYmFzaWMsCisKK3hudXBwYy0yMDB4NzUtbXxkYXJ3aW4tMjAweDc1LW18RGFyd2luIFBvd2VyUEMgQ29uc29sZSAobW9ub2Nocm9tZSkgMjAweDc1LAorCXVzZT14bnVwcGMrMjAweDc1LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMjAweDc1fGRhcndpbi0yMDB4NzV8RGFyd2luIFBvd2VyUEMgQ29uc29sZSAoY29sb3IpIDIwMHg3NSwKKwl1c2U9eG51cHBjK2MsIHVzZT14bnVwcGMrMjAweDc1LCB1c2U9eG51cHBjK2Jhc2ljLAorCit4bnVwcGMtMjU2eDk2LW18ZGFyd2luLTI1Nng5Ni1tfERhcndpbiBQb3dlclBDIENvbnNvbGUgKG1vbm9jaHJvbWUpIDI1Nng5NiwKKwl1c2U9eG51cHBjKzI1Nng5NiwgdXNlPXhudXBwYytiYXNpYywKKworeG51cHBjLTI1Nng5NnxkYXJ3aW4tMjU2eDk2fERhcndpbiBQb3dlclBDIENvbnNvbGUgKGNvbG9yKSAyNTZ4OTYsCisJdXNlPXhudXBwYytjLCB1c2U9eG51cHBjKzI1Nng5NiwgdXNlPXhudXBwYytiYXNpYywKKworIyMjIyBSYWRpbyBTaGFjay9UYW5keQorIworCisjIChjb2NvMzogVGhpcyBoYWQgInRhIiB1c2VkIGluY29ycmVjdGx5IGFzIGEgYm9vbGVhbiBhbmQgYmwgZ2l2ZW4gYXMgImJsIzciLgorIyBJIHJlYWQgdGhlc2UgYXMgbWlzdGFrZXMgZm9yICI6aXQjODoiIGFuZCAiOmJsPVwwMDc6IiByZXNwZWN0aXZlbHkgLS0gZXNyKQorIyBGcm9tOiA8e3Bicm93bixjdGx9QG9jZi5iZXJrZWxleS5lZHU+IDEyIE1hciA5MAorY29jbzN8b3M5TElJfFRhbmR5IENvQ28zIDI0KjgwIE9TOSBMZXZlbCBJSSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPV5fIiwgYm9sZD1cRVw6XkEsIGNpdmlzPV5FXHMsCisJY2xlYXI9XDAxNCQ8NSovPiwgY25vcm09XkUhLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5GLAorCWN1cD1cMDAyJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjJDwyLz4sIGN1dTE9XkksCisJZGwxPV5fMSwgZWQ9XkssIGVsPV5ELCBob21lPV5BLCBpbDE9Xl8wLCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkksIGtjdXUxPV5MLCByZXY9Xl9ccywgcm1zbz1eXyEsIHJtdWw9Xl8jLAorCXNncjA9XDAzNyFcRVw6XDAsIHNtc289Xl9ccywgc211bD1eXyIsCisjICh0cnMyOiByZW1vdmVkIG9ic29sZXRlICI6bmw9Xl86IiAtLSBlc3IpCit0cnMyfHRyc0lJfHRyczgwSUl8UmFkaW8gU2hhY2sgTW9kZWwgSUkgdXNpbmcgUCZUIENQL00sCisJT1RicywgYW0sIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9Xl8sIGN1ZjE9Xl0sCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eXiwgZGwxPV5LLCBlZD1eQiwKKwllbD1eQSwgaG9tZT1eRiwgaHQ9XkksIGlsMT1eRCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPV5cLAorCWtjdWQxPV5fLCBrY3VmMT1eXSwga2N1dTE9Xl4sIHJtc289Xk8sIHNncjA9Xk8sIHNtc289Xk4sCisjIEZyb206IEtldmluIEJyYXVuc2RvcmYgPGtzYkBtZW50b3IuY2MucHVyZHVlLmVkdT4KKyMgKFRoaXMgaGFkIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXMKKyMJOkJOPVxFWz8zM2g6QkY9XEVbPzMzbDpVQz1cRVtfIHE6QkM9XEVbXDE3NyBxOlwKKyMJOkNOPVxFUkM6Q0Y9XEVSYzpOUj1cRVJEOk5NPVxFUkA6CisjIEkgYWxzbyBkZWxldGVkIHRoZSB1bm5lY2Vzc2FyeSAiOmtuIzI6IiwgIjpzZyMwOiIgLS0gZXNyKQordHJzMTZ8dHJzLTgwIG1vZGVsIDE2IGNvbnNvbGUsCisJT1RicywgYW0sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1qYWtgbF9tYnF1dmV3Y3hzLCBiZWw9XkcsIGNpdmlzPVxFUmMsIGNsZWFyPV5MLAorCWNub3JtPVxFUkMsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFQiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRjaDE9XEVRLAorCWRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGljaDE9XEVQLCBpbDE9XEVMLAorCWluZD1eSiwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsCisJa2YwPV5BLCBrZjE9XkIsIGtmMj1eRCwga2YzPV5MLCBrZjQ9XlUsIGtmNT1eUCwga2Y2PV5OLCBrZjc9XlMsCisJa2hvbWU9XlcsIGxmMD1mMSwgbGYxPWYyLCBsZjI9ZjMsIGxmMz1mNCwgbGY0PWY1LCBsZjU9ZjYsIGxmNj1mNywKKwlsZjc9ZjgsIG1jND1cRV0rLCBtYzU9XEVdPSwgcm1hY3M9XEVSZywgcm1zbz1cRVJALCBzZ3IwPVxFUkAsCisJc21hY3M9XEVSRywgc21zbz1cRVJELAorCisjIyMjIEF0YXJpIFNUCisjCisKKyMgRnJvbTogU2ltc29uIEwuIEdhcmZpbmtlbCA8c2ltc29uZ0BtZWRpYS1sYWIubWl0LmVkdT4KK2F0YXJpfGF0YXJpIHN0LAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWNsZWFyPVxFSFxFSiwgY3ViMT1cRUQsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGwxPVxFTSwKKwllZD1cRUosIGVsPVxFSywgaHQ9XkksIGlsMT1cRUwsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLAorCWtjdWYxPVxFQywga2N1dTE9XEVBLCByaT1cRUksIHJtc289XEVxLCBzZ3IwPVxFcSwgc21zbz1cRXAsCisjIFVuaVRlcm0gdGVybWluYWwgcHJvZ3JhbSBmb3IgdGhlIEF0YXJpIFNUOiAgNDktbGluZSBWVDIyMCBlbXVsYXRpb24gbW9kZQorIyBGcm9tOiBQYXVsIE0uIEFva2kgPGFva2lAdWNidmF4LmJlcmtlbGV5LmVkdT4KK3VuaXRlcm18dW5pdGVybTQ5fFVuaVRlcm0gVlQyMjAgZW11bGF0b3Igd2l0aCA0OSBsaW5lcywKKwlsaW5lcyM0OSwKKwlpczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzdoXEVbPzhoXEVbMTs0OXJcRVs0OTsxSCwKKwl1c2U9dnQyMjAsCisjIE1pTlQgVlQ1MiBlbXVsYXRpb24uIDgwIGNvbHVtbnMsIDI1IHJvd3MuCisjIE1pTlQgaXMgTm93IFRPUywgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2hpY2ggY29tZXMgd2l0aCBhbGwgQXRhcmlzIG5vdworIyAobWFpbmx5IEF0YXJpIEZhbGNvbikuIFRoaXMgdGVybWNhcCBpcyBmb3IgdGhlIFZUNTIgZW11bGF0aW9uIHlvdSBnZXQKKyMgdW5kZXIgdGNzaC96c2gvYmFzaC9zaC9rc2gvYXNoL2NzaCB3aGVuIHlvdSBydW4gTWlOVCBpbiBgY29uc29sZScgbW9kZQorIyBGcm9tOiBQZXIgUGVyc3NvbiA8cHBAZ251LmFpLm1pdC5lZHU+LCAyNyBGZWIgMTk5Ngorc3Q1MnxBdGFyaSBTVCB3aXRoIFZUNTIgZW11bGF0aW9uLAorCWFtLCBrbSwKKwljb2xzIzgwLCBsaW5lcyMyNSwKKwliZWw9XkcsIGNpdmlzPVxFZiwgY2xlYXI9XEVIXEVKLCBjbm9ybT1cRWUsIGNyPV5NLCBjdWIxPVxFRCwKKwljdWQxPVxFQiwgY3VmMT1cRUMsIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsCisJY3V1MT1cRUEsIGRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGlsMT1cRUwsCisJaW5kPV5KLCBrYTE9XEUjNywga2EzPVxFIzUsIGtiMj1cRSM5LCBrYnM9XkgsIGtjMT1cRSMxLAorCWtjMz1cRSMzLCBrY2xyPVxFIzcsIGtjdWIxPVxFI0ssIGtjdWQxPVxFI1AsIGtjdWYxPVxFI00sCisJa2N1dTE9XEUjSCwga2YwPVxFI0QsIGtmMT1cRSM7LCBrZjI9XEUjPCwga2YzPVxFIz0sIGtmND1cRSM+LAorCWtmNT1cRSM/LCBrZjY9XEUjQCwga2Y3PVxFI0EsIGtmOD1cRSNCLCBrZjk9XEUjQywga2hvbWU9XEUjRywKKwlraWwxPVxFI1IsIGtpbmQ9XEUjMiwga3JpPVxFIzgsIGxmMD1mMTAsIG5lbD1eTV5KLCByYz1cRWssCisJcmk9XEVJLCBybWN1cD0sIHJtc289XEVxLCByczE9XEV6X1xFYkBcRWNBLCBzYz1cRWosIHNncjA9XEVxLAorCXNtY3VwPVxFZSwgc21zbz1cRXAsCisKKyMjIyMgQ29tbW9kb3JlIEJ1c2luZXNzIE1hY2hpbmVzCisjCisjIEZvcm1lcmx5IGxvY2F0ZWQgaW4gV2VzdCBDaGVzdGVyLCBQQTsgd2VudCBzcGVjdGFjdWxhcmx5IGJ1c3QgaW4gMTk5NAorIyBhZnRlciB5ZWFycyBvZiBzaGFreSBlbmdpbmVlcmluZyBhbmQgZWdyZWdpb3VzIG1pc21hbmFnZW1lbnQuICBNYWRlIG9uZQorIyByZWFsbHkgbmljZSBtYWNoaW5lICh0aGUgQW1pZ2EpIGFuZCBib2F0bG9hZHMgb2YgbmFzdHkgb25lcyAoUEVULCBDLTY0LAorIyBDLTEyOCwgVklDLTIwKS4gIFRoZSBDLTY0IGlzIHNhaWQgdG8gaGF2ZSBiZWVuIHRoZSBtb3N0IHBvcHVsYXIgbWFjaGluZQorIyBldmVyIChtb3N0IHVuaXRzIHNvbGQpOyB0aGV5IGNhbiBzdGlsbCBiZSBmb3VuZCBnYXRoZXJpbmcgZHVzdCBpbiBjbG9zZXRzCisjIGV2ZXJ5d2hlcmUuCisjCisKKyMgRnJvbTogS2VudCBQb2xrIDxrZW50QHN3cmluZGUubmRlLnN3cmkuZWR1PiwgMzAgTWF5IDkwCisjIEFkZGVkIGEgZmV3IG1vcmUgZW50cmllcywgY29udmVydGVkIGNhcmV0LXR5cGUgY29udHJvbCBzZXF1ZW5jZSAoXngpIGVudHJpZXMKKyMgdG8gJ1wweHgnIGVudHJpZXMgc2luY2UgYSBjb3VwbGUgb2YgcGVvcGxlIG1lbnRpb25lZCBsb3NpbmcgJ154JyBzZXF1ZW5jZXMuCisjIENvcnJlY3Rpb25zIGJ5IFR5IFNhcm5hIDx0c2FybmFAZW5kaWNvci5jb20+LCBTYXQgRmViIDI4IDE4OjU1OjE1IDE5OTgKKyMKKyMgOmFzOiwgOmFlOgkJCVN1cHBvcnQgZm9yIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0cy4KKyMgOnZlPVxFW1wwNDBwOnZpPVxFW1wwNjBcMDQwcDoJY3Vyc29yIHZpc2libGUvaW52aXNpYmxlLgorIyA6eG46ICB2dDEwMCBrbHVkZ2luZXNzIGF0IGNvbHVtbiA4MC9ORVdMSU5FIGlnbm9yZSBhZnRlciA4MCBjb2xzKENvbmNlcHQpCisjICAgICBUaGlzIG9uZSBhcHBlYXJzIHRvIGZpeCBhIHByb2JsZW0gSSBhbHdheXMgaGFkIHdpdGggYSBsaW5lIGVuZGluZworIyAgICAgYXQgJ3dpZHRoKzEnIChJIHRoaW5rKSBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUgaW4gdmkuIFRoZSBibGFuaworIyAgICAgbGluZSB0ZW5kZWQgdG8gZGlzYXBwZWFyIGFuZCByZWFwcGVhciBkZXBlbmRpbmcgb24gaG93IHRoZSBzY3JlZW4KKyMgICAgIHdhcyByZWZyZXNoZWQuIE5vdGUgdGhhdCB0aGlzIGlzIHByb2JhYmx5IG5lZWRlZCBvbmx5IGlmIHlvdSB1c2UKKyMgICAgIHNvbWV0aGluZyBsaWtlIGEgRG5ldCBGdGVybSB3aXRoIHRoZSB3aW5kb3cgc2l6ZWQgdG8gc29tZSBwZWN1bGlhcgorIyAgICAgZGltZW5zaW9uIGxhcmdlciB0aGFuIDgwIGNvbHVtbnMuCisjIDprMD1cRTl+OgltYXAgRjEwIHRvIGswIC0gY291bGQgaGF2ZSBGMC05IC0+IGswLTksIGJ1dCAuLi4gRjEwIHdhcyAnazsnCisjIChhbWlnYTogcmVtb3ZlZCBvYnNvbGV0ZSA6a24jMTA6LAorIyBhbHNvIGFkZGVkIGVtcHR5IDxhY3NjPiB0byBzdXBwcmVzcyBhIHdhcm5pbmcgLS1lc3IpCithbWlnYXxBbWlnYSBBTlNJLAorCU9UYnMsIGFtLCBidywgeGVubCwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRVs3OzJtLCBib2xkPVxFWzFtLCBjYnQ9XEVbWiwKKwljaXZpcz1cRVswIHAsIGNsZWFyPVxFW0hcRVtKLCBjbm9ybT1cRVsgcCwgY3ViPVxFWyVwMSVkRCwKKwljdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywKKwljdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwgZGltPVxFWzJtLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwKKwlpY2g9XEVbJXAxJWRALCBpY2gxPVxFW0AsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRVtTLAorCWluZG49XEVbJXAxJWRTLCBpbnZpcz1cRVs4bSwgaXMyPVxFWzIwbCwga2JzPV5ILAorCWtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMD1cRVs5fiwKKwlrZjE9XEVbMH4sIGtmMj1cRVsxfiwga2YzPVxFWzJ+LCBrZjQ9XEVbM34sIGtmNT1cRVs0fiwKKwlrZjY9XEVbNX4sIGtmNz1cRVs2fiwga2Y4PVxFWzd+LCBrZjk9XEVbOH4sIHJldj1cRVs3bSwKKwlyaT1cRVtULCByaW49XEVbJXAxJWRULCBybWFjcz1eTywgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVxFYywgc2dyMD1cRVttLCBzbWFjcz1eTiwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyBGcm9tOiBIYW5zIFZlcmt1aWwgPGhhbnNAd3lzdC5ob2JieS5ubD4sIDQgRGVjIDE5OTUKKyMgKGFtaWdhOiBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgYSB3YXJuaW5nLgorIyBJJ20gdG9sZCB0aGlzIGVudHJ5IHNjcmV3cyB1cCBiYWRseSB3aXRoIEFTMjI1LCB0aGUgQW1pZ2EKKyMgVENQL0lQIHBhY2thZ2Ugb25jZSBmcm9tIENvbW1vZG9yZSwgYW5kIG5vdyBzb2xkIGJ5IEludGVyV29ya3MuLS1lc3IpCithbWlnYS1ofEhhbnMgVmVya3VpbCdzIEFtaWdhIEFOU0ksCisJT1RicywgYncsIG1zZ3IsCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz0sIGJlbD1eRywgYmxpbms9XDIzMzc7Mm0sIGJvbGQ9XDIzMzFtLCBjYnQ9XDIzM1osCisJY2l2aXM9XDIzMzAgcCwgY2xlYXI9XDIzM0hcMjMzSiwgY25vcm09XDIzMyBwLCBjcj1eTSwKKwljdWI9XDIzMyVwMSVkRCwgY3ViMT1cMjMzRCwgY3VkPVwyMzMlcDElZEIsIGN1ZDE9XDIzM0IsCisJY3VmPVwyMzMlcDElZEMsIGN1ZjE9XDIzM0MsIGN1cD1cMjMzJWklcDElZDslcDIlZEgsCisJY3V1PVwyMzMlcDElZEEsIGN1dTE9XDIzM0EsIGRjaD1cMjMzJXAxJWRQLCBkY2gxPVwyMzNQLAorCWRpbT1cMjMzMm0sIGVjaD1cMjMzJXAxJWRQLCBlZD1cMjMzSiwgZWw9XDIzM0ssIGZsYXNoPV5HLAorCWhvbWU9XDIzM0gsIGh0PV5JLCBpY2g9XDIzMyVwMSVkQCwgaWNoMT1cMjMzQCwgaW5kPVwyMzNTLAorCWluZG49XDIzMyVwMSVkUywgaW52aXM9XDIzMzhtLCBpczI9XDIzMzIwbCwga2JzPV5ILAorCWtjdWIxPVwyMzNELCBrY3VkMT1cMjMzQiwga2N1ZjE9XDIzM0MsIGtjdXUxPVwyMzNBLAorCWtkY2gxPVwxNzcsIGtmMD1cMjMzOX4sIGtmMT1cMjMzMH4sIGtmMj1cMjMzMX4sIGtmMz1cMjMzMn4sCisJa2Y0PVwyMzMzfiwga2Y1PVwyMzM0fiwga2Y2PVwyMzM1fiwga2Y3PVwyMzM2fiwga2Y4PVwyMzM3fiwKKwlrZjk9XDIzMzh+LCBuZWw9XDIzM0JcciwgcmV2PVwyMzM3bSwgcmk9XDIzM1QsCisJcmluPVwyMzMlcDElZFQsIHJtYWNzPV5PLCBybWN1cD1cMjMzPzdoLCBybXNvPVwyMzMwbSwKKwlybXVsPVwyMzMwbSwgcnMxPVxFYywgc2dyMD1cMjMzMG0sIHNtYWNzPV5OLCBzbWN1cD1cMjMzPzdsLAorCXNtc289XDIzMzdtLCBzbXVsPVwyMzM0bSwKKworIyBGcm9tOiBIZW5uaW5nICdGYXJvdWwnIFBldGVycyA8RmFyb3VsQGJleW9uZC5rbi1icmVtZW4uZGU+LCAyNSBTZXAgMTk5OQorIworIyBQYXZlbCBGZWRpbiBhZGRlZAorIwlIb21lICAgIFNoaWZ0K0xlZnQKKyMJRW5kICAgICBTaGlmdCtSaWdodAorIwlQZ1VwICAgIFNoaWZ0K1VwCisjCVBnRG4gICAgU2hpZnQrRG93bgorYW1pZ2EtOGJpdHxBbWlnYSBBTlNJIHVzaW5nIDgtYml0IGNvbnRyb2xzLAorCWFjc2M9LCBkbD1cMjMzJXAxJWRNLCBkbDE9XDIzM00sIGlsPVwyMzMlcDElZEwsIGlsMT1cMjMzTCwKKwlpbmQ9XDIwNCwgaW5kbkAsIGtlbmQ9XDIzMyBALCBraG9tZT1cMjMzIEEsIGtucD1cMjMzUywKKwlrcHA9XDIzM1QsIHJpPVwyMTUsIHJpbkAsIHVzZT1hbWlnYS1oLAorCisjIEZyb206IFJ1ZWRpZ2VyIEt1aGxtYW5uIDx0ZXJtaW5mb0BydWVkaWdlci1rdWhsbWFubi5kZT4sIDE4IEp1bCAyMDAwCisjIHJlcXVpcmVzIHVzZSBvZiBhcHByb3ByaWF0ZSBwcmVmZXJlbmNlcyBzZXR0aW5ncy4KK2FtaWdhLXZuY3xBbWlnYSB1c2luZyBWTkMgY29uc29sZSAoYmxhY2sgb24gbGlnaHQgZ3JheSksCisJYW0sIGRhLCBkYiwgbXNnciwgbmRzY3IsCisJYnRucyMxLCBjb2xvcnMjMTYsIGNvbHMjODAsIGxpbmVzIzI0LCBsbSMwLCBuY3YjMCwgcGFpcnMjMjU2LAorCWJlbD1eRywgYmxpbms9XEVbNzsybSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbMHAsCisJY2xlYXI9XEVbSFxFW0osIGNub3JtPVxFW3BcRVs+PzZsLCBjcj1eTSwKKwljc3I9XEVbJWklcDElZDslcDIlZHIsIGN1Yj1cRVslcDElZEQsIGN1YjE9XEVbRCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwljdnZpcz1cRVs+PzZoLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsIGRpbT1cRVsybSwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVsxTSwgZWQ9XEVbSiwgZWw9XEVbSywgZmxhc2g9XkcsCisJaWNoPVxFWyVwMSVkQCwgaWNoMT1cRVtALCBpbD1cRVslcDElZEwsIGlsMT1cRVsxTCwgaW5kPVxFRCwKKwlpbmRuPVxFWyVwMSVkUywgaW52aXM9XEU4bSwKKwlpczI9XEVbPj8yOzE4bFxFWz4/MjY7PzY7MjA7Pj8xNTs/Nzs+PzIyOz4/OGgsCisJa2JzPV5ILCBrY2J0PVwyMzNaLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtkY2gxPVwxNzcsIGtmMD1cRVs5fiwga2YxPVxFWzB+LCBrZjI9XEVbMX4sCisJa2YzPVxFWzJ+LCBrZjQ9XEVbM34sIGtmNT1cRVs0fiwga2Y2PVxFWzV+LCBrZjc9XEVbNn4sCisJa2Y4PVxFWzd+LCBrZjk9XEVbOH4sIGtobHA9XEVbP34sIGtob21lPVxFWzQ0fiwga2xsPVxFWzQ1fiwKKwlrbW91cz1cRVtNLCBrbnA9XEVbNDJ+LCBrcHA9XEVbNDF+LCBuZWw9XEVFLCBvYz1cRVswbSwKKwlyZXY9XEVbN20sIHJpPVxFTSwgcmluPVxFWyVwMSVkVCwgcm1jdXA9XEVbPzdoXEVbclxFW0osCisJcm1reD1cRVs/MWwsIHJtc289XEVbMjFtLCBybXVsPVxFWzI0bSwgcnMxPVxFYywKKwlyczI9XEVbPj8yOzE4bFxFWz4/MjY7PzY7MjA7Pj8xNTs/Nzs+PzIyOz4/OGgsCisJc2V0YWI9XEVbJT8lcDElezh9JT4ldCUnRiclcDElKyVkJWU0JXAxJWQlO20sCisJc2V0YWY9XEVbJT8lcDElezh9JT4ldCUnMiclcDElKyVkJWUzJXAxJWQlO20sCisJc2dyMD1cRVswbVwwMTdcRVszMDs4NTs+MTVtLCBzbWN1cD1cRVs/N2gsIHNta3g9XEVbPzFoLAorCXNtc289XEVbMW0sIHNtdWw9XEVbNG0sCisKKyMgTW9ycGhPUyBvbiBHZW5lc2kgUGVnYXNvcworIyBCeSBQYXZlbCBGZWRpbiA8c29uaWNfYW1pZ2FAcmFtYmxlci5ydT4KK21vcnBob3MsCisJYWNzYz0sIGRsPVwyMzMlcDElZE0sIGRsMT1cMjMzTSwgaWw9XDIzMyVwMSVkTCwgaWwxPVwyMzNMLAorCWluZD1cMjA0LCBpbmRuQCwga2VuZD1cMjMzNDV+LCBrZjExPVwyMzMyMH4sIGtmMTI9XDIzMzIxfiwKKwlraG9tZT1cMjMzNDR+LCBraWNoMT1cMjMzNDB+LCBrbnA9XDIzMzQyfiwga3BwPVwyMzM0MX4sCisJcmk9XDIxNSwgcmluQCwgdXNlPWFtaWdhLWgsCisKKyMgQ29tbW9kb3JlIEItMTI4IG1pY3JvY29tcHV0ZXIgZnJvbSBEb3VnIFR5cm9sIDxkZXRASEVMLUFDRS5BUlBBPgorIyAJSSdtIHRyeWluZyB0byB3cml0ZSBhIHRlcm1jYXAgZm9yIGEgY29tbW9kb3JlIGItMTI4LCBhbmQgSSdtCisjIGhhdmluZyBhIGxpdHRsZSB0cm91YmxlLiBJJ3ZlIGhhZCB0byBtYXAgbW9zdCBvZiBteSBjb250cm9sIGNoYXJhY3RlcnMKKyMgdG8gc29tZXRoaW5nIHRoYXQgdW5peCB3aWxsIGFjY2VwdCAobXkgZGVsZXRlLWNoYXIgaXMgYSBjdHJsLXQsIGV0YyksCisjIGFuZCBjcmVhdGUgc29tZSBmdW5jdGlvbnMgKGxpa2UgY20pLCBidXQgdGhhdHMgbGlmZS4KKyMgCVRoZSBwcm9ibGVtIGlzIHdpdGggdGhlIGFycm93IGtleXMgLSByaWdodCwgYW5kIHVwIHdvcmsgZmluZSwgYnV0CisjIGxlZnQgZGVsZXRlcyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGFuZCBkb3duIEkganVzdCBjYW4ndCBmaWd1cmUgb3V0LgorIyBKb3ZlIGtub3dzIHdoYXQgSSB3YW50LCBidXQgSSBkb24ndCBrbm93IHdoYXQgaXQncyBzZW5kaW5nIHRvIG1lIChpdAorIyBpc24ndCB0aGF0cyBib3VuZCB0byBuZXh0LWxpbmUgaW4gam92ZSkuCisjIAlBbnlib2R5IGdvdCBhbnkgaWRlYXM/IEhlcmUncyBteSB0ZXJtY2FwLgorIyBEQUcgLS0gSSBjaGFuZ2VkIGhpcyAiXm4iIGVudHJpZXMgdG8gIlxuIjsgc2VlIGlmIHRoYXQgd29ya3MuCisjCitjb21tb2RvcmV8Yi0xMjh8Q29tbW9kb3JlIEItMTI4IG1pY3JvLAorCWFtLCBidywKKwlPVGROIzIwLCBjb2xzIzgwLCBsaW5lcyMyNCwgcGIjMTUwLAorCU9UYmM9XkgsIE9Ubmw9Xk0sIGNsZWFyPVxFXDAwNiQ8MTAvPiwgY3I9Xk0sIGN1ZDE9XkosCisJY3VmMT1eRiwgY3VwPVxFXDAxMyVwMSUyZFwsJXAyJTJkXCwkPDIwLz4sIGN1dTE9XlAsCisJZGNoMT1cMTc3JDwxMCovPiwgZGwxPVxFZCQ8MTAqLz4sIGVsPVxFcSQ8MTAvPiwKKwlob21lPVxFXkUsIGh0PVwwMTEkPDUvPiwgaWNoMT1cRVxuJDw1Lz4sIGlsMT1cRWkkPDEwLz4sCisJa2N1YjE9XkIsIGtjdWQxPV5KLCBrY3VmMT1eRiwga2N1dTE9XlAsIGtob21lPVxFXkUsIHJtaXI9LAorCXNtaXI9LAorCisjIyMjIE5vcnRoIFN0YXIKKyMKKyMgTm9ydGggU3RhciBBZHZhbnRhZ2UgZnJvbSBMdC4gRmlja2llIDxicmwtaWJkIWZpY2tpZT4gdmlhIEJSTAorbm9ydGhzdGFyfE5vcnRoIFN0YXIgQWR2YW50YWdlLAorCU9UYnMsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XDAwNCQ8MjAwLz4sCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8MS8+LCBlZD1cMDE3JDwyMDAvPiwKKwllbD1cMDE2JDwyMDAvPiwgaG9tZT1cMDM0XDAzMiQ8MjAwLz4sCisKKyMjIyMgT3Nib3JuZQorIworIyBUaHUgSnVsICA3IDAzOjU1OjE2IDE5ODMKKyMKKyMgQXMgYW4gYXNpZGUsIGJlIGNhcmVmdWw7IGl0IG1heSBzb3VuZCBsaWtlIGFuIGFub21hbHkgb24gdGhlCisjIE9zYm9ybmUsIGJ1dCB3aXRoIHRoZSA4MC1jb2x1bW4gdXBncmFkZSwgaXQncyB0b28gZWFzeSB0bworIyBlbnRlciBsaW5lcyA+ODAgY29sdW1ucyEKKyMKKyMgSSd2ZSBhbHJlYWR5IGhhZCBzZXZlcmFsIGNvbW1lbnRzLi4uCisjIFRoZSBPc2Jvcm5lLTEgd2l0aCB0aGUgODAtY29sIG9wdGlvbiBpcyBjYXBhYmxlIG9mIGJlaW5nCisjIDUyLCA4MCwgb3IgMTA0IGNoYXJhY3RlcnMgd2lkZTsgZGVmYXVsdCB0byA4MCBmb3IgY29tcGF0aWJpbGl0eQorIyB3aXRoIG1vc3Qgc3lzdGVtcy4KKyMKKyMgVGhlIHRhYiBpcyBkZXN0cnVjdGl2ZSBvbiB0aGUgT3p6aWU7IG1ha2Ugc3VyZSB0byAnc3R0eSAtdGFicycuCitvc2Jvcm5lLXd8b3Nib3JuZTEtd3xvc2Jvcm5lIEkgaW4gMTA0LWNvbHVtbiBtb2RlLAorCW1zZ3IsIHVsLCB4dCwKKwljb2xzIzEwNCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWw9XEVULCBpY2gxPVxFUSwgaWwxPVxFRSwgaW5kPV5KLCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkwsIGtjdXUxPV5LLCBybXNvPVxFKCwgcm11bD1cRW0sIHNtc289XEUpLCBzbXVsPVxFbCwKKyMgT3Nib3JuZSBJCWZyb20gcHRzZmEhcmhjIChSb2JlcnQgQ29oZW4pIHZpYSBCUkwKK29zYm9ybmV8b3Nib3JuZTF8b3Nib3JuZSBJIGluIDgwLWNvbHVtbiBtb2RlLAorCU9UYnMsIGFtLCBtaXIsIG1zZ3IsIHVsLCB4aHAsCisJT1RkQiM0LCBjb2xzIzgwLCBsaW5lcyMyNCwKKwljbGVhcj1eWiwgY3ViMT1cMDEwJDw0PiwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLAorCWRjaDE9XEVXJDw0Lz4sIGRsMT1cRVIsIGVsPVxFVCwgaWwxPVxFRSwgaXMyPV5aLCBrYnM9XkgsCisJa2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIHJtaXI9LCBybXNvPVxFKSwKKwlybXVsPVxFbSwgc21pcj1cRVEsIHNtc289XEUoLCBzbXVsPVxFbCwKKyMKKyMgT3Nib3JuZSBFeGVjdXRpdmUgZGVmaW5pdGlvbiBmcm9tIEJSTAorIyBTaW1pbGFyIHRvIHR2aTkyMAorIyBBZGRlZCBieSBEYXZpZCBNaWxsaWdhbiBhbmQgVG9tIFNtaXRoIChTTVUpCitvc2V4ZWN8T3Nib3JuZSBleGVjdXRpdmUsCisJT1RicywgYW0sCisJT1R1ZyMxLCBjb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzEsCisJT1RubD1eSiwgYmVsPV5HLCBjbGVhcj1eWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZGNoMT1cRVcsCisJZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGhvbWU9Xl4sIGh0cz1cRTEsIGljaDE9XEVRLCBpbDE9XEVFLAorCWlzMj1cRXFcRWtcRW1cRUFcRXgwLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsCisJa2N1dTE9XkssIGtmMD1eQUBcciwga2YxPV5BQVxyLCBrZjI9XkFCXHIsIGtmMz1eQUNcciwKKwlrZjQ9XkFEXHIsIGtmNT1eQUVcciwga2Y2PV5BRlxyLCBrZjc9XkFHXHIsIGtmOD1eQUhcciwKKwlrZjk9XkFJXHIsIHJtaXI9LCBybXNvPVxFaywgcm11bD1cRW0sIHNtaXI9LCBzbXNvPVxFaiwKKwlzbXVsPVxFbCwgdGJjPVxFMywKKworIyMjIyBDb25zb2xlIHR5cGVzIGZvciBvYnNvbGV0ZSBVTklYIGNsb25lcworIworIyBDb2hlcmVudCwgTWluaXgsIFZlbml4LCBhbmQgc2V2ZXJhbCBsZXNzZXIta25vd24ga2luIHdlcmUgT1NzIGZvciA4MDg4CisjIG1hY2hpbmVzIHRoYXQgdHJpZWQgdG8gZW11bGF0ZSB0aGUgVU5JWCBsb29rJ24nZmVlbC4gIENvaGVyZW50IGFuZCBWZW5peAorIyB3ZXJlIGNvbW1lcmNpYWwsIE1pbml4IGFuIGVkdWNhdGlvbmFsIHRvb2wgc29sZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgYm9vay4KKyMgTWVtb3J5LXNlZ21lbnRhdGlvbiBsaW1pdHMgYW5kIGEgc3Ryb25nIHRlbmRlbmN5IHRvIGxvb2sgbGlrZSBWNyBsb25nIGFmdGVyCisjIGl0IHdhcyBvYnNvbGV0ZSBtYWRlIGFsbCB0aHJlZSBwcmV0dHkgbGFtZS4gIFZlbml4IGNyb2FrZWQgZWFybHkuICBDb2hlcmVudAorIyBhbmQgTWluaXggd2VyZSBwb3J0ZWQgdG8gMzItYml0IEludGVsIGJveGVzLCBvbmx5IHRvIGJlIHJ1biBvdmVyIGJ5IGEKKyMgc3RlYW1yb2xsZXIgbmFtZWQgYExpbnV4JyAod2hpY2gsIHRvIGJlIGZhaXIsIHRyYWNlcyBzb21lIGxpbmVhZ2UgdG8gTWluaXgpLgorIyBDb2hlcmVudCdzIHZlbmRvciwgdGhlIE1hcmsgV2lsbGlhbXMgQ29tcGFueSwgd2VudCBiZWxseS11cCBpbiAxOTk0LiAgVGhlcmUKKyMgYXJlIGFsc28sIEknbSB0b2xkLCBNaW5peCBwb3J0cyB0aGF0IHJhbiBvbiBBbWlnYSBhbmQgQXRhcmkgbWFjaGluZXMgYW5kCisjIGV2ZW4gYXMgc2luZ2xlIHByb2Nlc3NlcyB1bmRlciBTdW5PUyBhbmQgdGhlIE1hY2ludG9zaCBPUy4KKyMKKworIyBUaGlzIGlzIHRoZSBlbnRyeSBwcm92aWRlZCB3aXRoIG1pbml4IDEuNy40LCB3aXRoIGJvZ3VzIDpyaTogcmVtb3ZlZC4KK21pbml4fG1pbml4IGNvbnNvbGUgKHYxLjcpLAorCWFtLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVswSiwgY3I9Xk0sCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFWzBKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWlzMj1cRVswbSwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMD1cRVtZLCBrZjE9XEVbViwga2YyPVxFW1UsIGtmMz1cRVtULCBrZjQ9XEVbUywKKwlrZjU9XEVbRywga2hvbWU9XEVbSCwgbGYwPUVuZCwgbGYxPVBnVXAsIGxmMj1QZ0RuLCBsZjM9TnVtICssCisJbGY0PU51bSAtLCBsZjU9TnVtIDUsIG5lbD1eTV5KLCByZXY9XEVbN20sIHJpPVxFTSwKKwlybXNvPVxFWzBtLCBybXVsPVxFWzBtLCBzZ3IwPVxFWzBtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIyBDb3JyZWN0ZWQgSmFuIDE0LCAxOTk3IGJ5IFZpbmNlbnQgQnJvbWFuIDxicm9tYW5Abm9zYy5taWw+CittaW5peC1vbGR8bWluaXggY29uc29sZSAodjEuNSksCisJeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgYmxpbms9XEVbNW0sIGJvbGQ9XEVbMW0sIGNsZWFyPVxFW0hcRVswSiwgY3I9Xk0sCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLAorCWN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILAorCWN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFWzBKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWticz1eSCwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwKKwlrZjA9XEVbWSwga2YxPVxFW1YsIGtmMj1cRVtVLCBrZjM9XEVbVCwga2Y0PVxFW1MsIGtmNT1cRVtHLAorCWtob21lPVxFW0gsIG5lbD1eTV5KLCByZXY9XEVbN20sIHJpPVxFTSwgcm1zbz1cRVswbSwKKwlybXVsPVxFWzBtLCBzZ3IwPVxFWzBtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIyBUaGUgbGluZXdyYXAgb3B0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYnkgZWRpdGluZyAvdXNyL2luY2x1ZGUvbWluaXgvY29uZmlnLmgKKyMgYmVmb3JlIHJlY29tcGlsaW5nIHRoZSBtaW5peCAxLjUga2VybmVsLgorbWluaXgtb2xkLWFtfG1pbml4IGNvbnNvbGUgd2l0aCBsaW5ld3JhcCwKKwlhbSwgdXNlPW1pbml4LW9sZCwKKworcGMtbWluaXh8bWluaXggY29uc29sZSBvbiBhbiBJbnRlbCBib3gsCisJdXNlPWtsb25lK2FjcywgdXNlPW1pbml4LAorCisjIEFjY29yZGluZyB0byB0aGUgQ29oZXJlbnQgMi4zIG1hbnVhbCwgdGhlIFBDIGNvbnNvbGUgaXMgc2ltaWxhcgorIyB0byBhIHoxOS4gVGhlIGRpZmZlcmVuY2VzIHNlZW0gdG8gYmUgKDEpIDI1IGxpbmVzLCAoMikgbm8gc3RhdHVzCisjIGxpbmUsICgzKSBzdGFuZG91dCBpcyBicm9rZW4sICg0KSBpbnMvZGVsIGxpbmUgaXMgYnJva2VuLCAoNSkKKyMgaGFzIGJsaW5raW5nIGFuZCBib2xkLgorcGMtY29oZXJlbnR8cGN6MTl8Y29oZXJlbnR8SUJNIFBDIGNvbnNvbGUgcnVubmluZyBDb2hlcmVudCwKKwlhbSwgbWlyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI1LAorCWJlbD1eRywgY2xlYXI9XEVFLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFTiwKKwllZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XEVELAorCWtjdWQxPVxFQiwga2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtob21lPVxFSCwgcmk9XEVJLCBybWlyPVxFTywKKwlybXNvPVxFcSwgc2dyMD1cRXEsIHNtaXI9XEVALCBzbXNvPVxFcCwKKworIyBBY2NvcmRpbmcgdG8gdGhlIFZlbml4IDEuMSBtYW51YWwsIHRoZSBQQyBjb25zb2xlIGlzIHNpbWlsYXIKKyMgdG8gYSBERUMgdnQ1Mi4gIERpZmZlcmVuY2VzIHNlZW0gdG8gYmUgKDEpIGFycm93IGtleXMgc2VuZAorIyBkaWZmZXJlbnQgc3RyaW5ncywgKDIpIGVuaGFuY2VkIHN0YW5kb3V0LCAoMykgYWRkZWQgaW5zZXJ0L2RlbGV0ZSBsaW5lLgorIyBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBpdCBkb2Vzbid0IGhhdmUgYXV0b21hdGljIG1hcmdpbnMuCisjIFRoZXJlIGFyZSBvdGhlciBrZXlzIChmMS1mMTAsIGtwcCwga25wLCBrY2J0LCBraWNoMSwga2RjaDEpIGJ1dCB0aGV5CisjIG5vdCBkZXNjcmliZWQgaGVyZSBiZWNhdXNlIHRoaXMgZGVyaXZlcyBmcm9tIGFuIG9sZCB0ZXJtY2FwIGVudHJ5LgorcGMtdmVuaXh8dmVuaXh8SUJNIFBDIGNvbnNvbGUgcnVubmluZyBWZW5peCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBkbDE9XEVNLAorCWVkPVxFSiwgZWw9XEVLLCBodD1eSSwgaWwxPVxFTCwgaW5kPV5KLCBrYnM9XkgsIGtjdWIxPVxFSywKKwlrY3VkMT1cRVAsIGtjdWYxPVxFTSwga2N1dTE9XEVILCBraG9tZT1cRUcsIHJpPVxFSSwKKworIyMjIyBNaXNjZWxsYW5lb3VzIG1pY3JvY29tcHV0ZXIgY29uc29sZXMKKyMKKyMgSWYgeW91IGtub3cgYW55dGhpbmcgbW9yZSBhYm91dCBhbnkgb2YgdGhlc2UsIHBsZWFzZSB0ZWxsIG1lLgorIworCisjIFRoZSBNQUkgQmFzaWMgRm91ciBjb21wdXRlciB3YXMgb2Jzb2xldGUgYXQgdGhlIGVuZCBvZiB0aGUgMTk4MHMuCisjIEl0IG1heSBiZSB1c2VkIGFzIGEgdGVybWluYWwgYnkgcHV0dGluZyBpdCBpbiAibGluZSIgbW9kZSBhcyBzZWVuIG9uCisjIG9uZSBvZiB0aGUgc3RhdHVzIGxpbmVzLgorIyBJbml0aWFsaXphdGlvbiBpcyBzaW1pbGFyIHRvIENJVDgwLiA8aXMyPiB3aWxsIHNldCBBTlNJIG1vZGUgZm9yIHlvdS4KKyMgSGFyZHdhcmUgdGFicyBzZXQgYnkgPGlmPiBhdCA4LXNwYWNpbmcuICBBdXRvIGxpbmUgd3JhcCBjYXVzZXMgZ2xpdGNoZXMgc28KKyMgd3JhcCBtb2RlIGlzIHJlc2V0IGJ5IDxjdnZpcz4uICBVc2luZyA8aW5kPj1cRVtTIGNhdXNlZCBlcnJvcnMgc28gSQorIyB1c2VkIFxFRCBpbnN0ZWFkLgorIyBGcm9tOiBiZjM0N0BsYWZuLm9yZyAoRGF2aWQgTGF3eWVyKSwgMjggSnVuIDE5OTcKK21haXxiYXNpYzR8TUFJIEJhc2ljIEZvdXIgaW4gYW5zaSBtb2RlLAorCWFtLCBkYSwgZGIsIG1pciwgbXNnciwKKwljb2xzIzgyLCBpdCM4LCBsaW5lcyMyNSwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1eXV5fLCBjbm9ybT1cRVs/N2gsCisJY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eWCwKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XlosIGN2dmlzPVxFWz83bCwgZGNoMT1cRVsxUCwKKwlkbDE9XEVbTSwgZWQ9Xl8sIGVsPV5eLCBob21lPV5dLCBodD1eSSwKKwlpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgaWwxPVxFW0wsIGluZD1cRUQsCisJaXMyPVxFPlxFWz8xaFxFWz83aFxFWz81bFwwMTdcRShCXEVbbVxFWzIwbFxFWzE7MjRyXEVbMjQ7MUgsCisJa2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLAorCWtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBrZjU9XEVPVCwga2Y2PVxFT1UsCisJa2Y3PVxFT1YsIGtmOD1cRU9XLCBuZWw9Xk1cRUQsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRVtULAorCXJtaXI9XEVbNGwsIHJtc289XEVbbSwgcm11bD1cRVttLCBzYz1cRTcsIHNncjA9XEVbbSwKKwlzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIyBiYXNpcyBmcm9tIFBldGVyIEhhcnJpc29uLCBDb21wdXRlciBHcmFwaGljcyBMYWIsIFNhbiBGcmFuY2lzY28KKyMgICB1Y2J2YXghdWNzZm1pcyFoYXJyaXNvbiAuLi51dWNwIC8gdWNidmF4IXVjc2ZtaXMhaGFycmlzb25AQkVSS0VMRVkgLi4uQVJQQQorIworIyBPbiBTYXQsIDcgQXVnIDE5OTksIFRvcnN0ZW4gSmVyemVtYmVjayA8dG9qZUBuaWdodGluZ2FsZS5tcy5zdWIub3JnPiB3cm90ZToKKyMgVGhlIEJhc2lzIDEwOCB3YXMgYSBBcHBsZSBJSSBjbG9uZSwgbWFudWZhY3R1cmVkIGJ5IHRoZSAiQmFzaXMKKyMgTWlrcm9jb21wdXRlciBHbWJIIiBpbiBNdW5zdGVyLCBHZXJtYW55ICh0aGUgY29tcGFueSBzdGlsbCBleGlzdHMgdG9kYXksCisjIGFib3V0IDEsNSBrbSBmcm9tIHdoZXJlIEkgbGl2ZSwgYnV0IGRvZXNuJ3QgYnVpbGQgb3duIGNvbXB1dGVycyBhbnkKKyMgbW9yZSkuIEEgQmFzaXMgMTA4IGZlYXR1cmVkIGEgcmVhbGx5IGhlYXZ5IChjYXN0IGFsdW1pbml1bT8pIGNhc2UsIHdhcworIyBlcXVpcHBlZCB3aXRoIG9uZSBvciB0d28gNS4yNSIgZGlzayBkcml2ZXMsIGhhZCBhIG1vbm9jaHJvbWUgYW5kIGNvbG91cgorIyB2aWRlbyBvdXRwdXQgZm9yIGEgVFYgc2V0IG9yIGEgZGVkaWNhdGVkIG1vbml0b3IgYW5kIHNldmVyYWwgc2xvdHMgZm9yCisjIEFwcGxlIElJIGNhcmRzLiBCYXNpcyAxMDggd2VyZSBxdWl0ZSBwb3B1bGFyIGF0IGdlcm1hbiBzY2hvb2xzIGJlZm9yZQorIyB0aGUgYWR2ZW50IG9mIHRoZSBJQk0gUEMuIFRoZXkgcnVuLCBmb3IgZXhhbXBsZSwgdGhlIFVDU0QgUGFzY2FsCisjIGRldmVsb3BtZW50IHN5c3RlbSAod2hpY2ggSSB1c2VkIGV2ZW4gaW4gMTk5MyB0byBwcm9ncmFtIHRoZSBzdGVlcmluZworIyBhbmQgZGF0YSByZWNvcmRpbmcgZm9yIG91ciBzY2hvb2wncyBleHBlcmltZW50YWwgc29sYXIgcGFuZWwgOiksIEFwcGxlIERPUworIyBvciBDUC9NLgorIyAoYmFzaXM6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eS15QXlJeTF5MIDpubD01MDAwKl5KOiIgLS0gZXNyKQorYmFzaXN8QkFTSVMxMDggY29tcHV0ZXIgd2l0aCB0ZXJtaW5hbCB0cmFuc2xhdGlvbiB0YWJsZSBhY3RpdmUsCisJY2xlYXI9XEUqJDwzMDAvPiwgY3VkMT1cbiQ8NTAwMC8+LCBlZD1cRVksIGVsPVxFVCwga2JzPV5ILAorCWtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBybXNvPVxFKSwgc2dyMD1cRSksCisJc21zbz1cRSgsIHVzZT1hZG0zYSwKKyMgbHVuYSdzIEJNQyB0ZXJtaW5hbCBlbXVsYXRvcgorbHVuYXxsdW5hNjhrfExVTkE2OEsgQml0bWFwIGNvbnNvbGUsCisJY29scyM4OCwgbGluZXMjNDYsIHVzZT1hbnNpLW1pbmksCittZWdhdGVrfHBlZ2FzdXMgd29ya3N0YXRpb24gdGVybWluYWwgZW11bGF0b3IsCisJYW0sIG9zLAorCWNvbHMjODMsIGxpbmVzIzYwLAorIyBUaGUgWGVyb3ggODIwIHdhcyBhIFo4MCBtaWNybyB3aXRoIGEgc25henp5IFhFUk9YIFBBUkMtZGVyaXZlZAorIyBpbnRlcmZhY2UgKHByZS1NYWNpbnRvc2ggYnkgc2V2ZXJhbCB5ZWFycykgdGhhdCB3ZW50IG5vd2hlcmUuCit4ZXJveDgyMHx4ODIwfFhlcm94IDgyMCwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPTFeWiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZWQ9XlEsIGVsPV5YLAorCWhvbWU9Xl4sIGluZD1eSiwKKworIyMjIyBWaWRlb3RleCBhbmQgdGVsZXRleHQKKyMKKworIyBcRVw6MX0Jc3dpdGNoIHRvIHRlJ2xlJ2luZm9ybWF0aXF1ZSBtb2RlIChhc2NpaSB0ZXJtaW5hbC9JU08gNjQyOSkKKyMgXEVbPzNsCTgwIGNvbHVtbnMKKyMgXEVbPzRsCXNjcm9sbGluZyBvbgorIyBcRVsxMmgJbG9jYWwgZWNobyBvZmYKKyMgXEVjCQlyZXNldDogRzAgVS5TLiBjaGFyc2V0ICh0byBnZXQgIyxALHssfSwuLi4pLCA4MCBjb2xzLCBjbGVhciBzY3JlZW4KKyMgXEUpMAkJRzEgREVDIHNldCAobGluZSBncmFwaGljcykKKyMKKyMgRnJvbTogSWdvciBUYW1pdGVnYW1hIDxpZ29yQHBwcDE0OTMtZnQudGVhc2VyLmZyPiwgMTggSmFuIDE5OTcKK20yLW5hbXxtaW5pdGVsfG1pbml0ZWwtMnxtaW5pdGVsLTItbmFtfEZyYW5jZSBUZWxlY29tIE1pbml0ZWwgMiBtb2RlIHRlJ2xlJ2luZm9ybWF0aXF1ZSwKKwlPVGJzLCBlc2xvaywgaHMsIHhlbmwsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM3MiwgeG1jIzAsCisJYWNzYz1hYWZmZ2dqamtrbGxtbW5ub29xcXNzdHR1dXZ2d3d4eCwgYmVsPV5HLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs8MWgsIGNsZWFyPVxFW0hcRVtKLAorCWNub3JtPVxFWzwxbCwgY3I9Xk0sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwKKwljdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsIGN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBmbGFzaD1eRywgZnNsPV5KLAorCWhvbWU9XEVbSCwgaHQ9XkksIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1eSiwgaXA9JDw3Lz4sCisJaXMxPVxFXDoxfVxFY1xFWz80bFxFWzEyaCwgaXMyPVxFY1xFWzEyaFxFKTAsCisJaXMzPVxFWz8zbCBrYnM9XDAxMCwga2Nscj1cRVsySiwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtQLCBrZGwxPVxFW00sIGtmMD1cRU9wLAorCWtmMT1cRU9xLCBrZjEwPVxFT3AsIGtmMj1cRU9yLCBrZjM9XEVPcywga2Y0PVxFT3QsIGtmNT1cRU91LAorCWtmNj1cRU92LCBrZjc9XEVPdywga2Y4PVxFT3gsIGtmOT1cRU95LCBraG9tZT1cRVtILAorCWtpY2gxPVxFWzRoLCBraWwxPVxFWzRsLCBrbnA9XEVPbiwga3BwPVxFT1IsIGxsPVxFWzI0OzgwSCwKKwltYzA9XEVbaSwgbmVsPV5NXkosIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLAorCXJtaXI9XEVbNGwsIHJtc289XEVbMjdtLCBybXVsPVxFWzI0bSwKKwlyczE9XEVjXEVbPzRsXEVbMTJoLCByczI9XEVjXEUpMCwgc2M9XEU3LCBzZ3IwPVxFW20sCisJc21hY3M9Xk4sIHNtaXI9XEVbNGgsIHNtc289XEVbN20sIHNtdWw9XEVbNG0sIHRzbD1eX0BBLAorCXU2PVxFWyVpJWQ7JWRSLCB1Nz1cRVs2biwKKworIyBGcm9tOiBBbGV4YW5kcmUgTW9udGFyb24gPGNhbmFsQG15Z2FsZS5vcmc+LCAxOCBKdW4gMTk5OAorIworbWluaXRlbDF8bWluaXRlbCAxLAorCWFtLCBidywgZXNsb2ssIGhzLCBoeiwgbXNnciwKKwljb2xvcnMjOCwgY29scyM0MCwgbGluZXMjMjQsIHBhaXJzIzgsCisJYWNzYz0rLlwsXCwuL2YwZzEsIGJlbD1eRywgYmxpbms9XEVILCBjaXZpcz1eVCwgY2xlYXI9XkwsCisJY25vcm09XlEsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5JLAorCWN1cD1cMDM3JXAxJXs2NX0lKyVjJXAyJXs2NX0lKyVjLCBjdXUxPV5LLCBlbD1eWCwKKwllbmFjcz1eWSwgZnNsPV5KLCBob21lPV5eLCBpbmQ9XkosCisJaXMyPVxFO2BaUVxFXDppQ1xFXDppRVwwMjEsIG5lbD1eTV5KLCBvcD1cRUcsCisJcmVwPSVwMSVjXDAyMiVwMiV7NjN9JSslYywgcmV2PVxFXSwgcmk9XkssIHJtc289XEVcXCwKKwlzZXRmPVxFJT8lcDElezF9JT0ldEQlZSVwMSV7M30lPSV0RiVlJXAxJXs0fSU9JXRBJWUlcDElezZ9JT0ldEMlZSVwMSV7NjR9JSslYyU7LAorCXNncj0lPyVwMSV0XEVdJTslPyVwMyV0XEVdJTslPyVwNCV0XEVIJTssCisJc2dyMD1cRUlcRVxcLCBzbXNvPVxFXSwgdHNsPVwwMzdAJXAxJXs2NX0lKyVjLAorIyBpczI9Rm5jdCBURSwgRm5jdCBNUiwgRm5jdCBDTSBldCBwb3VyIGZpbmlyOiBjdXJzZXVyIE9OLgorbWluaXRlbDFifG1pbml0ZWwgMS1iaXN0YW5kYXJkIChpbiA0MGNvbHMgbW9kZSksCisJbWlyLAorCWN1Yj1cRVslcDElZEQsIGN1ZD1cRVslcDElZEIsIGN1Zj1cRVslcDElZEMsCisJY3V1PVxFWyVwMSVkQSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZGwxPVxFW00sIGVkPVxFW0osIGVsMT1cRVsxSywgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwKKwlpczE9XEU7aVlBXEU7allDLCBrY2xyPVxFWzJKLCBrY3RhYj1eSSwga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtQLCBrZGwxPVxFW00sCisJa2VsPV5YLCBraG9tZT1cRVtILCBraWNoMT1cRVs0aCwga2lsMT1cRVtMLCBybWlyPVxFWzRsLAorCXNtaXI9XEVbNGgsIHNta3g9XEU7aVlBXEU7allDLCB1c2U9bWluaXRlbDEsCisjIDxybWt4PiBwb3NhaXQgZGVzIHByb2JsZW1lcyAobG9nb3V0IGVuIHNvcnRhbnQgZGUgdmkpLgorbWluaXRlbDFiLTgwfG1pbml0ZWwgMS1iaXN0YW5kYXJkIChzdGFuZGFyZCB0ZWxlaW5mb3JtYXRpcXVlKSwKKwlhbUAsIGJ3QCwgaHpALAorCWNvbG9yc0AsIGNvbHMjODAsIGl0IzgsIHBhaXJzQCwKKwlibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XDAzN0BBXDAyNFxuLAorCWNsZWFyPVxFW0hcRVsySiwgY25vcm09XDAzN0BBXDAyMVxuLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGVsPVxFW0ssIGhvbWU9XEVbSCwKKwlodD1eSSwgaW5kPVxFRCwgaXMxQCwgaXMyQCwga2VudD1cRU9NLCBrZjA9XEVPcCwga2YxPVxFT3EsCisJa2YyPVxFT3IsIGtmMz1cRU9zLCBrZjQ9XEVPdCwga2Y1PVxFT3UsIGtmNj1cRU92LCBrZjc9XEVPdywKKwlrZjg9XEVPeCwga2Y5PVxFT3ksIG5lbD1cRUUsIG9wQCwgcmM9XEU4LCByZXBALCByZXY9XEVbN20sCisJcmk9XEVNLCBybWt4QCwgcm1zbz1cRVsyN20sIHJtdWw9XEVbMjRtLCBzYz1cRTcsIHNldGZALAorCXNncj1cRVslPyVwMSV0NzslOyU/JXAyJXQ0OyU7JT8lcDMldDc7JTslPyVwNCV0NTslOyU/JXA2JXQxOyU7bSwKKwlzZ3IwPVxFW20sIHNta3hALCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLCB1c2U9bWluaXRlbDFiLAorCisjIyMjIyMjIyBPQlNPTEVURSBWRFQgVFlQRVMKKyMKKyMgVGhlc2UgdGVybWluYWxzIGFyZSAqbG9uZyogZGVhZCAtLSB0aGVzZSBlbnRyaWVzIGFyZSByZXRhaW5lZCBmb3IKKyMgaGlzdG9yaWNhbCBpbnRlcmVzdCBvbmx5LgorCisjIyMjIEFtdGVrIEJ1c2luZXNzIE1hY2hpbmVzCisjCisKKyMgKGFibTgwOiBlYXJseSB2ZXJzaW9ucyBvZiB0aGlzIGVudHJ5IGFwcGFyZW50bHkgaGFkICI6c2U9XEVeXzpzbz1cRV5ZIiwKKyMgYnV0IHRoZXNlIGNhcHMgd2VyZSBjb21tZW50ZWQgb3V0IGluIDguMzsgYWxzbywgcmVtb3ZlZCBvdmVycmlkZGVuCisjICI6ZG89Xko6IiAtLSBlc3IpCithYm04MHxhbXRlayBidXNpbmVzcyBtYWNoaW5lcyA4MCwKKwlPVGJzLCBhbSwgYncsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2J0PV5ULCBjbGVhcj1cRV5cLCBjdWIxPV5ILCBjdWQxPVxFXkssIGN1ZjE9XlAsCisJY3VwPVxFXDAyMSVwMiV7MzJ9JSslYyVwMSV7MzJ9JSslYywgY3V1MT1cRV5MLAorCWRsMT1cRV5TLCBlZD1cRV5YLCBlbD1cRV5PLCBob21lPVxFXlIsIGlsMT1cRV5aLAorCisjIyMjIEJlbGwgTGFicyBibGl0IHRlcm1pbmFscworIworIyBUaGVzZSB3ZXJlIEFUJlQncyBvZmZpY2lhbCBlbnRyaWVzLiAgVGhlIDU2MjAgRkFRIG1haW50YWluZWQgYnkKKyMgRGF2aWQgQnJlbmVtYW4gPGRhdmViQGRndGwuY29tPiBoYXMgdGhpcyB0byBzYXk6CisjCisjICBBY3R1YWxseSwgaW4gdGhlIGJlZ2lubmluZyB3YXMgdGhlIEplcnEsIGFuZCB0aGUgSmVycSB3YXMgd2hpdGUgd2l0aCBhCisjICBncmVlbiBmYWNlLCBhbmQgTG9jYW50aGkgYW5kIFBpa2UgbG9va2VkIHVwb24gdGhlIEplcnEgYW5kIHNhaWQgdGhlIEplcnEKKyMgIHdhcyBnb29kLiAgQnV0IGxvLCB1cG9uIHRoZSBob3Jpem9uIGxvb21lZCBhIG1pZ2h0eSBtYW5hZ2VtZW50LXR5cGUgcGVyc29uCisjICAoa25vd24gbm93IG9ubHkgYnkgdGhlIGluaXRpYWxzIFZQKSB3aG8gc2FpZCwgdGhlIG1pZ2h0eSBKZXJxIG11c3Qgc3RheQorIyAgYWxvbmUsIGFuZCBjb3VsZCBub3QgZ28gZm9ydGggaW50byB0aGUgd29ybGQuIFNvIExvY2FudGhpIGFuZCBQaWtlIHB1dCB0aGUKKyMgIEplcnEgdG8gc2xlZXAsIGNsb25lZCBpdHMgcGFydHMsIGFuZCB0aGUgQmxpdCB3YXMgYnJvdWdodCBmb3J0aCB1bnRvIHRoZQorIyAgd29ybGQuIEFuZCB0aGUgSmVycSBsaXZlZCB0aGUgcmVzdCBvZiBpdHMgZGF5cyBpbiByZXNlYXJjaCwgYnV0IG5ldmVyCisjICBzdHJheWVkIGZyb20gdGhvc2UgcGF0aHMuCisjCisjICBJbiBhbGwgc2VyaW91c25lc3MsIHRoZSBCbGl0IHdhcyBvcmlnaW5hbGx5IGtub3duIGFzIHRoZSBKZXJxLCBidXQgd2hlbgorIyAgaXQgc3RhcnRlZCB0byBiZSBzaG93biBvdXRzaWRlIG9mIHRoZSBoYWxscyBvZiB0aGUgQmVsbCBMYWJzIFJlc2VhcmNoCisjICBvcmdhbml6YXRpb24sIHRoZSBtYW5hZ2VtZW50IHBvd2VycyB0aGF0IGJlIGRlY2lkZWQgdGhhdCB0aGUgbmFtZSBjb3VsZAorIyAgbm90IHJlbWFpbi4gU28gaXQgd2FzIHJlbmFtZWQgdG8gYmUgQmxpdC4gVGhpcyB3YXMgaW4gbGF0ZSAxOTgxLgorIworIyAoVGhlIEFUJlQgNTYyMCB3YXMgdGhlIGNvbW1lcmNpYWxpemVkIEJsaXQuICBJdHMgc3VjY2Vzc29ycyB3ZXJlIHRoZSA2MzAsCisjIDczMCwgYW5kIDczMCsuKQorIworCitibGl0fGplcnF8YmxpdCBydW5uaW5nIHRlbGV0eXBlIHJvbSwKKwlhbSwgZW8sIHVsLCB4b24sCisJY29scyM4NywgaXQjOCwgbGluZXMjNzIsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XEVELCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPVxFQSwKKwlkY2g9XEVlJXAxJXszMn0lKyVjLCBkY2gxPVxFZSEsIGRsPVxFRSVwMSV7MzJ9JSslYywKKwlkbDE9XEVFISwgZWw9XEVLLCBodD1eSSwgaWNoPVxFZiVwMSV7MzJ9JSslYywgaWNoMT1cRWYhLAorCWlsPVxFRiVwMSV7MzJ9JSslYywgaWwxPVxFRiEsIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2YxPVxFeCwga2YyPVxFeSwga2YzPVxFeiwKKworIyAoY2JibGl0OiBoZXJlJ3MgYSBCU0QgdGVybWNhcCB0aGF0IHNheXMgPGN1ZDE9XEVHPiAtLSBlc3IpCitjYmJsaXR8Zml4dGVybXxibGl0IHJ1bm5pbmcgY29sdW1idXMgY29kZSwKKwljb2xzIzg4LAorCWVkPVxFSiwgZmxhc2g9XEVeRywgaWNoMUAsIG1jND1eVCwgbWM1PV5SLCBtYzVwPVxFUCVwMSUwM2QsCisJcm1pcj1cRVIsIHJtc289XEVWISwgcm11bD1cRVYiLCBzbWlyPVxFUSwgc21zbz1cRVUhLAorCXNtdWw9XEVVIiwgdXNlPWJsaXQsCisKK29ibGl0fG9qZXJxfGZpcnN0IHZlcnNpb24gb2YgYmxpdCByb20sCisJYW0sIGRhLCBkYiwgZW8sIG1pciwgdWwsIHhvbiwKKwljb2xzIzg4LCBpdCM4LCBsaW5lcyM3MiwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1cRUQsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDIlezMyfSUrJWMlcDElezMyfSUrJWMsIGN1dTE9XEVBLCBkY2gxPVxFTywKKwlkbD1cRWUlcDElezMyfSUrJWMsIGRsMT1cRUUsIGVkPVxFSiwgZWw9XEVLLCBmbGFzaD1cRV5HLAorCWh0PV5JLCBpbD1cRWYlcDElezMyfSUrJWMsIGlsMT1cRUYsIGluZD1eSiwga2JzPV5ILCBybWlyPVxFUiwKKwlzbWlyPVxFUSwKKworIyMjIyBCb2x0LCBCZXJhbmVrICYgTmV3bWFuIChiYm4pCisjCisjIFRoZSBCaXRHcmFwaCB3YXMgYSBwcm9kdWN0IG9mIHRoZSBub3ctZGVmdW5jdCBCQk4gQ29tcHV0ZXIgQ29ycG9yYXRpb24uCisjIFRoZSBwYXJlbnQgY29tcGFueSwgYmVzdCBrbm93biBhcyB0aGUgYXJjaGl0ZWN0cyBvZiB0aGUgSW50ZXJuZXQsIGlzCisjIHN0aWxsIGFyb3VuZC4KKyMKKyMgSmVmZiBEZWxQYXBhIDxkcEB3b3JsZC5zdGQuY29tPiB3cml0ZXM6CisjIFRoZSBiaXRncmFwaCB3YXMgYSBsYXJnZSB3aGl0ZSBib3ggdGhhdCBjb250YWluZWQgYSBtb25vY2hyb21lIGJpdG1hcAorIyBkaXNwbGF5LCBhbmQgYSA2ODAwMCB0byBydW4gaXQuICBZb3UgY291bGQgZG93bmxvYWQgY29kZSBhbmQgcnVuIGl0IG9uCisjIHRoZSBjcHUsIGl0IGhhZCAxMjhrYiAoSSB0aGluaykgb2YgbWVtb3J5LiAgSSB1c2VkIG9uZSBpbiB0aGUgbGF0ZQorIyA3MCdzLCBzdXJlIGJlYXQgYSB2dDEwMC4gIEl0IGhhZCBvbmUgc3RyYW5nZSBmZWF0dXJlIHRobyAtLSBpdCB1c2VkCisjIHRoZSBjcHUgdG8gYml0Ymx0IHBpeGVscyB0byBzY3JvbGwsIGl0IHRvb2sgbG9uZ2VyIHRoYW4gdGhlIHJlZnJlc2gKKyMgcmF0ZSwgYW5kIGxvb2tlZCBsaWtlIGEgcnViYmVyIHNoZWV0IHN0cmV0Y2hpbmcsIHRoZW4gc25hcHBpbmcKKyMgdXB3YXJkcy4gIEl0IGhhZCBldmVyeXRoaW5nIHRoZSBlYXJseSBtYWMgaGFkLCBleGNlcHQgYSBmbG9wcHkgZHJpdmUgYQorIyBzbWFsbCBzY3JlZW4gKGl0IGhhZCBhIDE3IiBjcmlzcCBiZWF1dHkpIGFuZCBhIHJlYWwgT1MuIFRoZXkgKEJvbHQKKyMgQmVyYW5layBhbmQgTmV1bWFuKSBzb2xkIGF0IG1vc3QgYSBmZXcgaHVuZHJlZCBvZiB0aGVtIHRvIHRoZSByZWFsCisjIHdvcmxkLiAgRE9EIG1heSBoYXZlIGJvdWdodCBtb3JlLi4uCisjCisKKyMgRW50cmllcyBmb3IgdGhlIEJpdEdyYXBoIHRlcm1pbmFscy4gIFRoZSBwcm9ibGVtCisjIHdpdGggc2Nyb2xsaW5nIGluIHZpIGNhbiBvbmx5IGJlIGZpeGVkIGJ5IGdldHRpbmcgQkJOIHRvIHB1dAorIyBzbWFydGVyIHNjcm9sbCBsb2dpYyBpbiB0aGUgdGVybWluYWwgb3IgY2hhbmdpbmcgdmkgb3IgcGFkZGluZworIyBzY3JvbGxzIHdpdGggYWJvdXQgNTAwIG1zIGRlbGF5LgorIworIyBJIGFsd2F5cyB0aG91Z2h0IHRoZSBwcm9ibGVtIHdhcyByZWxhdGVkIHRvIHRoZSB0ZXJtaW5hbAorIyBjb3VudGluZyBuZXdsaW5lcyBpbiBpdHMgaW5wdXQgYnVmZmVyIGJlZm9yZSBzY3JvbGxpbmcgYW5kCisjIHRoZW4gbW92aW5nIHRoZSBzY3JlZW4gdGhhdCBtdWNoLiBUaGVuIHZpIGNvbWVzIGFsb25nIGFuZAorIyBwYWludHMgbGluZXMgaW4gb24gdGhlIGJvdHRvbSBsaW5lIG9mIHRoZSBzY3JlZW4sIHNvIHlvdSBnZXQKKyMgdGhpcyBiaWcgd2hpdGUgZ2FwLgorCitiaXRncmFwaHxiZzIuMG52fGJnMy4xMG52fGJibiBiaXRncmFwaCAyLjAgb3IgbGF0ZXIgKG5vcm1hbCB2aWRlbyksCisJZmxhc2g9XEVbPzVoJDwyMDAvPlxFWz81bCwgaXMyPVxFPlxFWz81bFxFWz83aCwKKwl1c2U9YmcyLjAsCitiZzIuMHJ2fGJnMy4xMHJ2fGJibiBiaXRncmFwaCAyLjAgKHJldmVyc2UgdmlkZW8pLAorCWZsYXNoPVxFWz81bCQ8MjAwLz5cRVs/NWgsIGlzMj1cRT5cRVs/NWhcRVs/N2gsCisJdXNlPWJnMi4wLAorYmcyLjB8YmczLjEwfGJibiBiaXRncmFwaCAyLjAgb3IgbGF0ZXIgKG5vIGluaXQpLAorCU9UYnMsIHhlbmwsCisJY29scyM4NSwgbGluZXMjNjQsCisJYmVsPV5HLCBjbGVhcj1cRVtIXEVbSiQ8MTUwPiwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWIxPV5ILCBjdWQxPVxFW0IsIGN1ZjE9XEVbQywKKwljdXA9JWlcRVslcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGwxPVxFW00kPDIqPiwKKwllZD1cRVtKJDwxNTA+LCBlbD1cRVtLJDwyPiwgaHQ9XkksIGlsMT1cRVtMJDwyKj4sCisJaW5kPVxuJDwyODA+LCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLAorCWtjdXUxPVxFW0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBsZjE9UEYxLAorCWxmMj1QRjIsIGxmMz1QRjMsIGxmND1QRjQsIHJjPVxFOCwgcm1reD1cRT4sIHJtc289XEVbbSwgc2M9XEU3LAorCXNncjA9XEVbbSwgc21reD1cRT0sIHNtc289XEVbN20sCisKK2JnMS4yNXJ2fGJibiBiaXRncmFwaCAxLjI1IChyZXZlcnNlIHZpZGVvKSwKKwlmbGFzaD1cRVs/NWwkPDIwMC8+XEVbPzVoLCBpczI9XEU+XEVbPzVoXEVbPzdoLAorCXVzZT1iZzEuMjUsCitiZzEuMjVudnxiYm4gYml0Z3JhcGggMS4yNSAobm9ybWFsIHZpZGVvKSwKKwlmbGFzaD1cRVs/NWgkPDIwMC8+XEVbPzVsLCBpczI9XEU+XEVbPzVsXEVbPzdoLAorCXVzZT1iZzEuMjUsCisjIChiZzEuMjU6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorYmcxLjI1fGJibiBiaXRncmFwaCAxLjI1LAorCWNvbHMjODUsIGxpbmVzIzY0LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFW0okPDE1MD4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDLCBjdXA9JWlcRVslcDElZDslcDIlZEgsIGN1dTE9XEVbQSwKKwlkbDE9XEVbTSQ8Mio+LCBlZD1cRVtKJDwxNTA+LCBlbD1cRVtLJDwyPiwgaHQ9XkksCisJaWwxPVxFW0wkPDIqPiwgaW5kPVxuJDwyODA+LCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwKKwlrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2YxPVxFUCwga2YyPVxFUSwga2YzPVxFUiwga2Y0PVxFUywKKwlsZjE9UEYxLCBsZjI9UEYyLCBsZjM9UEYzLCBsZjQ9UEY0LCBsbD1cRVs2NDsxSCwgcm1hbT1cRVs/N2wsCisJcm1reD1cRT4sIHJtc289XEVbbSwgc2dyMD1cRVttLCBzbWFtPVxFWz83aCwgc21reD1cRT0sCisJc21zbz1cRVs3bSwKKworIyMjIyBCdWxsIChicSwgZGt1LCB2aXApCisjCisjIChBZGFwdGVkIGZvciB0ZXJtaW5mbzsgQUlYIGV4dGVuc2lvbiBjYXBhYmlsaXRpZXMgdHJhbnNsYXRlZCAtLSBlc3IpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKKyMgQlVMTCBRVUVTVEFSIDIxMCBgU0RQJyB0ZXJtaW5hbHMgZW11bGF0aW9uICMKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKKyMKKyMgRGVzY3JpcHRpb24gd3JpdHRlbiBieSBSLksuU2F1bmRlcnMgKEJ1bGwgVHJhbnNhYykKKyMKKyMgTW9kaWZpY2F0aW9ucyB3cml0dGVuIGJ5IEYuIEdpcmFyZCAoQnVsbCBNVFMpCisjCQkxOS0wNS04NyBWMDIuMDAuMDEKKyMJCTE3LTEyLTg3IFYwMi4wMC4wMgorIwkJMTUtMDktODkgVjAyLjAwLjA1CisjCisjCVR5cGljYWwgdGVjaG5pY2FsIHNlbGVjdGlvbnMgRjEgKG1vZGVzIFNEUC9ST0xMKToKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB8ICAgMDEgICAwMiAgIDAzICAgMDQgICAwNSAgIDA2ICAgMDcgICAwOCAgIDA5ICAgMTAgICB8CisjIHwgIDEwMTAgMDAxMSAxMDEwIDAxMTAgMDExMCAwMDAxIDAxMDAgMDAwMCAwMDAwIDAwMDAgIHwKKyMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyB8ICAgMTEgICAxMiAgIDEzICAgMTQgICAxNSAgIDE2ICAgMTcgICAxOCAgIDE5ICAgMjAgICB8CisjIHwgIDAwMDAgMDExMCAxMDA/IDAwMDAgMDAwMCAwMDAwIDAwMDEgMDAwMCAwMDAwIDAwMDEgIHwKKyMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyB8ICAgMjEgICAyMiAgIDIzICAgMjQgICAyNSAgIDI2ICAgMjcgICAyOCAgIDI5ICAgMzAgICB8CisjIHwgIDAwMTEgMDAwMCAwMDAxIDEwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgIHwKKyMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyB8ICAgMzEgICAzMiAgIDMzICAgMzQgICAzNSAgIDM2ICAgMzcgICAzOCAgIDM5ICAgNDAgICB8CisjIHwgIDEwMTAgMDAxMSAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgIHwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwlUeXBpY2FsIGZpcm13YXJlIGlkZW50aWZpY2F0aW9uIEY1ICJldGF0IDYiOgorIyAgUDI4Ny4wMi4wNGIJKEFaRVJUWSkKKyMgIFAyOTcuMTEuMDQJKDI0LXBpbjogMjczMikJb3IgUDc5OC4xMS4wNAkoMjgtcGluOiAyNzY0KQorIyAgUDI5OC4wMy4wMwkobW9ub2Nocm9tZSkJb3IgUDM3NC4wMy4wMgkoY29sb3VyKQorIworIwlTTSBTRFAgbW9kZSAoVklQIGNvbW1hbmQpOgleW1s/PWgKKyMJUklTIChlcmFzZXMgc2NyZWVuKToJCV5bYworIwlETUkgZGlzYWJsZSBrZXlib2FyZDoJCV5bYAorIwlTTSBkb3VibGUgcmVuZGl0aW9uIG1vZGU6CV5bWz8+aAorIwlSTSBzb2xpY2l0ZWQgc3RhdHVzIG1vZGU6CV5bWzVsCisjCVJNIGNoYXJhY3RlciBtb2RlOgkJXltbPmwKKyMJUk0gZWNob3BsZXggbW9kZToJCV5bWzEybAorIwlSTSBjb2x1bW4gdGFiIG1vZGU6CQleW1sxOGwKKyMJUk0gZm9yYmlkIFNTMiBrZXlib2FyZCBtb2RlOgleW1s/PGwKKyMJU00gc2Nyb2xsIG1vZGU6CQkJXltbPWgKKyMJRkNGIGVuYWJsZSBYT04vWE9GRjoJCV5bUDFzXltcCisjCU1UTCBzZWxlY3QgZW5kIG1zZyBjaGFyYWN0ZXI6CV5bW15XcAorIwlFTUkgZW5hYmxlIGtleWJvYXJkOgkJXltiCisjCVJJUyByZXRvdXIgZXRhdCBpbml0aWFsOgleW2MKKyMJZW5hYmxlIEZDIGtleXBhZDoJCV5bWz88aCwKKyMJTVBXIG1hcCBzdGF0dXMgbGluZSB3aW5kb3c6CV5bUFk5OTo5OF5bXAorIwlTQ1Agc2VsZWN0IHN0YXR1cyBsaW5lOgkJXltbMDs5OHYKKyMJRUQgZXJhc2UgZW50aXJlIHBhcnRpdGlvbjoJXltbMkoKKyMJU0NQIHNlbGVjdCBtYWluIHBhcnRpdGlvbjoJXltbdgorIwlTTSBjaGFyYWN0ZXIgaW5zZXJ0aW9uIG1vZGU6CV5bWzRoCisjCVJNIGNoYXJhY3RlciByZXBsYWNlbWVudCBtb2RlOgleW1s0bAorIwlDT08gY3Vyc29yIG9uOgkJCV5bW3IKKyMJQ09PIGN1cnNvciBvZmY6CQkJXltbMXIKKyMJU0dSIGRpbSAodHVycXVvaXNlKSByZXYgYXR0cjoJXltbMjs3bQorIwlTR1IgRGF0YSBub3JtYWwgYXR0cjoJCV5bW20KKyMJU08gTGluZS1ncmFwaGljIG1vZGUgT046CV5OCisjCVNJIExpbmUtZ3JhcGhpYyBtb2RlIE9GRjoJXk8KKyMJTUMgc3RhcnQgcm91dGluZyB0byBwcmludGVyOgleW1s1aQorIwlNQyBzdG9wIHJvdXRpbmcgdG8gcHJpbnRlcjoJXk1eW1s0aQorIworCisjIFRoaXMgZW50cnkgY292ZXJzIHRoZSBmb2xsb3dpbmcgdGVybWluYWxzOgorIyBka3U3MTAyLCB0d3MyMTAyLCBhbmQgdHdzIG1vZGVscyAyMTA1IHRvIDIxMTIKK3R3cy1nZW5lcmljfGRrdTcxMDJ8QnVsbCBRdWVzdGFyIHR3cyB0ZXJtaW5hbHMsCisJYW0sIGVzbG9rLCBocywgbWlyLCBtc2dyLCB4ZW5sLCB4aHBALCB4b24sCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHdzbCM4MCwKKwlhY3NjPWBgYWFmZmdnailrXCxsJm0jbi9vb3BwcSpycnNzdCd1LXYrdy54JXl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzA7NW0sIGNidD1cRVtaLCBjaXZpcz1cRVsxciwgY2xlYXI9XEVbMkosCisJY25vcm09XEVbciwgY3I9Xk0sIGN1Yj1cRVslcDElZEQsIGN1YjE9XkgsIGN1ZD1cRVslcDElZEIsCisJY3VkMT1eSiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZGYsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLCBkY2g9XEVbJXAxJWRQLCBkY2gxPVxFW1AsCisJZGltPVxFWzA7Mm0sIGRsPVxFWyVwMSVkTSwgZGwxPVxFW00sCisJZHNsPVxFUFk5OVw6OThcRVxcXEVbMDs5OHZcRVsySlxFW3YsIGVkPVxFW0osIGVsPVxFW0ssCisJZnNsPVxFW3YsIGhvbWU9XEVbSCwgaHQ9XEVbSSwgaHRzPVxFSCwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XkosIGludmlzPVxFWzA7OG0sCisJaXMxPVxFWz89aFxFY1xFYFxFWz8+aFxFUFk5OVw6OThcRVxcLAorCWlzMj1cRVs1Oz47MTI7MTg7PzxsXEVbPWhcRVAxc1xFXFxcRVtcMDI3cCwKKwlpczM9XEViXEVbPzxoLCBrYnM9XkgsIGtjYnQ9XEVbWiwga2N0YWI9XEVbZywga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVtQLCBrZGwxPVxFW00sCisJa2VkPVxFW0osIGtlbD1cRVtLLCBrZjE9XEVbMXVcMDI3LCBrZjI9XEVbMnVcMDI3LAorCWtmMz1cRVszdVwwMjcsIGtmND1cRVs0dVwwMjcsIGtmNT1cRVs1dVwwMjcsCisJa2Y2PVxFWzZ1XDAyNywga2Y3PVxFWzd1XDAyNywga2Y4PVxFWzh1XDAyNywga2hvbWU9XEVbSCwKKwlraHRzPVxFSCwga2lsMT1cRVtMLCBrcm1pcj1cRVs0bCwgbGw9XEVbSFxFW0EsIG1jMD1cRVswaSwKKwltYzQ9XHJcRVs0aSwgbWM1PVxFWzVpLCByZXY9XEVbMDs3bSwgcm1hY3M9Xk8sCisJcm1jdXA9XEVbMDs5OHZcRVsySlxFW3YsIHJtaXI9XEVbNGwsIHJtc289XEVbbSwKKwlybXVsPVxFW20sIHJzMj1cRVs/PWhcRWMsIHMwZHM9Xk8sIHMxZHM9Xk4sCisJc2dyPVxFWzAlPyVwMSVwMyV8JXQ7NyU7JT8lcDIldDs0JTslPyVwNCV0OzUlOyU/JXA1JXQ7MiU7JT8lcDcldDs4JTttJT8lcDkldFwwMTYlZVwwMTclOywKKwlzZ3IwPVxFW21cMDE3LCBzbWFjcz1eTiwgc21jdXA9XEVbPz5oXEVQWTk5XDo5OFxFXFwsCisJc21pcj1cRVs0aCwgc21zbz1cRVswOzdtLCBzbXVsPVxFWzA7NG0sIHRiYz1cRVsyZywKKwl0c2w9XEVQWTk5XDo5OFxFXFxcRVswOzk4dlxFWzI7N20sCit0d3MyMTAyLXNuYXxka3U3MTAyLXNuYXxCVUxMIFF1ZXN0YXIgdHdzMjEwMiBmb3IgU05BLAorCWRzbD1cRVswOzk4dlxFWzJKXEVbdiwgZnNsPVxFW3YsIGlzMz1cRWIsIHRzbD1cRVswOzk4diwKKwl1c2U9dHdzLWdlbmVyaWMsCit0d3MyMTAzfHhka3V8QlVMTCBRdWVzdGFyIHR3czIxMDMsCisJaHQ9XkksIHVzZT10d3MtZ2VuZXJpYywKK3R3czIxMDMtc25hfGRrdTcxMDMtc25hfEJVTEwgUXVlc3RhciB0d3MyMTAzIGZvciBTTkEsCisJaHQ9XkksIHVzZT10d3MyMTAyLXNuYSwKK2RrdTcxMDItb2xkfEJVTEwgUXVlc3RhciAyMDAgREtVNzEwMiAobWljcm9jb2RlIHZlcnNpb24gPCA2KSwKKwljbGVhcj1cRVsySlxFW0gsIGN1cEAsIGRsQCwgZGwxQCwKKwlkc2w9XEVQWTk5XDo5OFxFXFxcRVswOzk4dlxFWzJKXEVbSFxFW3YsIGVsPVxFW0tcRVttLAorCWlsQCwgaWwxQCwgdHNsPVxFUFk5OVw6OThcRVxcXEVbMDs5OHZcRVtIXEVbMjs3bSwKKwl1c2U9dHdzLWdlbmVyaWMsCitka3U3MjAyfEJVTEwgUXVlc3RhciAyMDAgREtVNzIwMiAoY29sb3VyL2NoYXJhY3RlciBhdHRyaWJ1dGVzKSwKKwlibGluaz1cRVswOzI7NG0sIGRpbT1cRVswOzVtLCBodD1eSSwgaXMzPVxFWz8zaFxFYiwKKwlzbXNvPVxFWzA7NDs1OzdtLCBzbXVsPVxFWzA7Mm0sIHVzZT10d3MtZ2VuZXJpYywKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKKyMgQlVMTCBRVUVTVEFSIDMwMyAmIDMxMCBgREVDIFZUIDMyMCcgdGVybWluYWxzIGVtdWxhdGlvbiAjCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworIworIyBEZXNjcmlwdGlvbiB3cml0dGVuIGJ5IEouIFN0YWVyY2sgKEJVTEwgU0EpCisjICAgICAgIENvcHlyaWdodCAoYykgMTk4OSBCVUxMIFNBCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICBUaGlzIGVudHJ5IGlzIHVzZWQgZm9yIHRlcm1pbmFscyB3aXRoIHZ0MzIwIGVtdWxhdGlvbiBtb2RlCisjICBhbmQgZm9sbG93aW5nIHNldC11cCA6CisjICAgIDggYml0IElTTyBMYXRpbiBDaGFyYWN0ZXIgU2V0IChJU08gODg1OS0xKSwKKyMgICAgNyBiaXQgQ29udHJvbCBDaGFyYWN0ZXJzLAorIyAgICA4MCBjb2x1bW5zIHNjcmVlbi4KKyMgIEhlcmVhZnRlciBhcmUgc29tZSBERUMgdnQgdGVybWluYWxzJyBjb21tYW5kcy4gKHZhbGlkIG9uIHZ0MjAwIGFuZCAzMDApCisjICBUaGV5IGFyZSB1c2VkIGluIHN0cmluZyBjYXBhYmlsaXRpZXMgd2l0aCB2dDIyMC0zMjAgZW11bGF0aW9uIG1vZGUuCisjICBJbiB0aGUgZm9sbG93aW5nIERFQyBkZWZpbml0aW9ucywgdHdvIGtpbmRzIG9mIHRlcm1pbmZvIGRhdGFiYXNlcyBhcmUKKyMgICAgcHJvdmlkZWQgOgorIyAgICAxLiB0aGUgZmlyc3Qgd2l0aCBDb21tYW5kIFNlcXVlbmNlIEludHJvZHVjZXIgc3RhcnRpbmcgd2l0aCBlc2NhcGUKKyMgICAgICAgc2VxdWVuY2UgaW4gNyBiaXRzIGNoYXJhY3RlcnMgZXguIEVTQyBbIDogMiBjaGFycy4gaW4gNy1iaXQgbW9kZS4KKyMgICAgMi4gdGhlIHNlY29uZCB3aXRoIENvbW1hbmQgU2VxdWVuY2UgSW50cm9kdWNlciBzdGFydGluZyB3aXRoIGVzY2FwZQorIyAgICAgICBzZXF1ZW5jZSBpbiA4IGJpdHMgY2hhcmFjdGVycyBleC4gRVNDIFsgOiAxIGNoYXIuICdDU0knID14OUIuCisjCVNvZnQgVGVybWluYWwgUmVzZXQJCWVzYyBbICEgcAorIwlSSVMgKGVyYXNlcyBzY3JlZW4pOgkJZXNjIGMKKyMJREVDS1BOTSBudW1lcmljIGtleXBhZCBtb2RlOgllc2MgPgorIwlERUNLUEFNIGFwcGxpYy4ga2V5cGFkIG1vZGU6CWVzYyA9CisjCURFQ1NUQk0gU2Nyb2xsaW5nIHJlZ2lvbjoJZXNjIFsgcgorIwlTQ1Mgc2VsZWN0IEcwID0gVVM6CQllc2MgKCBCCisjCVNDUyBzZWxlY3QgRzEgPSBsaW5lLWdyYXBoaWM6CWVzYyApIDAKKyMJU2VsZWN0IDctYml0IEMxIGNvbnRyb2xzOgllc2Mgc3AgRgorIwlTZWxlY3QgOC1iaXQgQzEgY29udHJvbHM6CWVzYyBzcCBHCisjCVNlbGVjdCBjdXJzb3IgaG9tZToJCWVzYyBbICBICisjCVNlbGVjdCBlcmFzZSBzY3JlZW46CQllc2MgWyAgSgorIwlTTSBLQU0gbG9jayBrZXlib2FyZDoJCWVzYyBbIDIgaAorIwlSTSBLQU0gdW5sb2NrIGtleWJvYXJkOgkJZXNjIFsgMiBsCisjCVNNIFNSTSBsb2NhbCBlY2hvIG9mZjoJCWVzYyBbIDEgMiBoCisjCVJNIFNSTSBsb2NhbCBlY2hvIG9uOgkJZXNjIFsgMSAyIGwKKyMJU00gTE5NIE5ldyBsaW5lIDoJCWVzYyBbIDIgMCBoCisjCVJNIExOTSByZXR1cm4gPSBDUiBvbmx5Ogllc2MgWyAyIDAgbAorIwlTTSBERUNDS00gY3Vyc29yIGtleXMgbW9kZToJZXNjIFsgPyAxIGgKKyMJUk0gREVDQ0tNIGFwcGxpLiBrZXlzIG1vZGU6CWVzYyBbID8gMSBsCisjCVNNIERFQ0FOTSBBTlNJIG1vZGUgb246CQllc2MgWyA/IDIgaAorIwlSTSBERUNBTk0gQU5TSSBtb2RlIG9mZjoJZXNjIFsgPyAyIGwKKyMJU00gREVDQ09MTSAxMzItY29sdW1uIHNjcmVlbjoJZXNjIFsgPyAzIGgKKyMJUk0gREVDQ09MTSA4MC1jb2x1bW4gc2NyZWVuOgllc2MgWyA/IDMgbAorIwlTTSBERUNTQ0xNIFNtb290aCBzY3JvbGw6CWVzYyBbID8gNCBoCisjCVJNIERFQ1NDTE0gSnVtcCBzY3JvbGw6CQllc2MgWyA/IDQgbAorIwlTTSBERUNTQ05NIHNjcmVlbiBsaWdodCBiYWNrZ3IuCWVzYyBbID8gNSBoCisjCVJNIERFQ1NDTk0gc2NyZWVuIGRhcmsgYmFja2dyLgllc2MgWyA/IDUgbAorIwlTTSBERUNPTSBtb3ZlIHdpdGhpbiBtYXJnaW5zOgllc2MgWyA/IDYgaAorIwlSTSBERUNPTSBtb3ZlIG91dHNpZGUgbWFyZ2luczoJZXNjIFsgPyA2IGwKKyMJU00gREVDQVdNIGF1dG8gcmlnaHQgbWFyZ2luOgllc2MgWyA/IDcgaAorIwlSTSBERUNBV00gYXV0byByaWdodCBtYXJnaW46CWVzYyBbID8gNyBsCisjCVNNIERFQ0FSTSBhdXRvIHJlcGVhdDoJCWVzYyBbID8gOCBoCisjCVJNIERFQ0FSTSBhdXRvIHJlcGVhdDoJCWVzYyBbID8gOCBsCisjCURFQ1NBU0QgU2VsZWN0IGFjdGl2ZSBtYWluOgllc2MgWyAwICQgfQorIwlERUNTQVNEIFNlbGVjdCBhY3RpdmUgc3RhdHVzOgllc2MgWyAxICQgfQorIwlERUNTU0RUIFNlbGVjdCBzdGF0dXMgbm9uZToJZXNjIFsgMCAkIH4KKyMJREVDU1NEVCBTZWxlY3Qgc3RhdHVzIGluZGljLjoJZXNjIFsgMSAkIH4KKyMJREVDU1NEVCBTZWxlY3Qgc3RhdHVzIGhvc3Qtd3I6CWVzYyBbIDIgJCB+CisjCVNNIERFQ1RDRU0gVmlzaWJsZSBjdXJzb3I6CWVzYyBbID8gMiA1IGgKKyMJUk0gREVDVENFTSBJbnZpc2libGUgY3Vyc29yOgllc2MgWyA/IDIgNSBsCisjCVNNIERFQ05DUk0gNyBiaXRzIE5DUiBzZXQ6CWVzYyBbID8gNCAyIGgKKyMJUk0gREVDTkNSTSBNdWx0aSBvciBJU08gbGF0aW46CWVzYyBbID8gNCAyIGwKKyMJU00gREVDTktNIG51bWVyaWMga2V5cGFkIG1vZGU6CWVzYyBbID8gNiA2IGgKKyMJUk0gREVDTktNIG51bWVyaWMga2V5cGFkIGFwcGwuOgllc2MgWyA/IDYgNiBsCisjCVNNIERFQ0tCVU0gY2xhdmllciBpbmZvcm1hdGlxdWUJZXNjIFsgPyA2IDggaAorIwlSTSBERUNLQlVNIGNsYXZpZXIgYnVyZWF1dGlxdWU6CWVzYyBbID8gNiA4IGwKKyMJREVDU0NMIHZ0MzAwIG1vZGUgOC1iaXQgY3RybDoJZXNjIFsgNiAzICIgcAorIyBvcglERUNTQ0wgdnQzMDAgbW9kZSA4LWJpdCBjdHJsOgllc2MgWyA2IDMgOyAwICIgcAorIyBvcglERUNTQ0wgdnQzMDAgbW9kZSA4LWJpdCBjdHJsOgllc2MgWyA2IDMgOyAyICIgcAorIwlERUNTQ0wgdnQzMDAgbW9kZSA3LWJpdCBjdHJsOgllc2MgWyA2IDMgOyAxICIgcAorIwlDaGFyLiBhbmQgTGluZSBhdHRyaWJ1dGVzOgllc2MgWyBQcyAuLi4gUHMgbQorIyB3aXRoOiAgMCBBbGwgb2ZmLCAxIEJvbGQsIDQgVW5kZXJsaW5lLCA1IEJsaW5raW5nLCA3IFJldmVyc2UKKyMgYW5kIDogMjIgQm9sZCBvZmYsIDI0IFVuZGVybGluZSBvZmYsIDI1IEJsaW5raW5nIG9mZiwgMjcgUmV2ZXJzZSBvZmYKKyMKKworIyBUaGlzIGVudHJ5IGNvdmVycyBCUTMwMywgQlEzMDYsIEJRMzEwLCBRMzAzLCBRMzA2LCBRMzEwCiticTMwMHxCdWxsIHZ0MzIwIElTTyBMYXRpbiAxIDgwIGNvbHVtbnMgdGVybWluYWwsCisJYW0sIGVvLCBlc2xvaywgaHMsIGttLCBtYzVpLCBtaXIsIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywgd3NsIzgwLAorCWFjc2M9YGBhYWZmZ2dqamtrbGxtbW5ub29wcHFxcnJzc3R0dXV2dnd3eHh5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPzI1bCwKKwljbGVhcj1cRVtIXEVbSiwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPVxFW0QsCisJY3VkPVxFWyVwMSVkQiwgY3VkMT1cRVtCLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsCisJZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sIGRsMT1cRVtNLAorCWRzbD1cRVsxJH1cRVsyJH5cblxFWzAkfSwgZWNoPVxFWyVwMSVkWCwgZWQ9XEVbSiwKKwllbD1cRVtLLCBlbDE9XEVbMUssIGVuYWNzPVxFKEJcRSkwLAorCWZsYXNoPVxFWz81aCQ8NTA+XEVbPzVsLCBmc2w9XEVbMCR9LCBob21lPVxFW0gsIGh0PV5JLAorCWh0cz1cRUgsIGljaD1cRVslcDElZEAsIGlsPVxFWyVwMSVkTCwgaWwxPVxFW0wsIGluZD1cRUQsCisJaXMxPVxFWzYzOzEicFxFWzJoLAorCWlzMj1cRVs/MmhcRVs/M2xcRVs/NWxcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBGXEVbPzQybFxFWz80bCwKKwlpczM9XEVbMCR9XEVbPzI1aFxFWzJsXEVbSFxFW0osIGthMT1cRU93LCBrYTM9XEVPeSwKKwlrYjI9XEVPdSwga2JzPV5ILCBrYzE9XEVPcSwga2MzPVxFT3MsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbM34sIGtmMT1cRU9QLCBrZjEwPVxFWzIxfiwKKwlrZjExPVxFWzIzfiwga2YxMj1cRVsyNH4sIGtmMTM9XEVbMjV+LCBrZjE0PVxFWzI2fiwKKwlrZjE1PVxFWzI4fiwga2YxNj1cRVsyOX4sIGtmMTc9XEVbMzF+LCBrZjE4PVxFWzMyfiwKKwlrZjE5PVxFWzMzfiwga2YyPVxFT1EsIGtmMjA9XEVbMzR+LCBrZjM9XEVPUiwga2Y0PVxFT1MsCisJa2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwga2Y4PVxFWzE5fiwga2Y5PVxFWzIwfiwga2ZuZD1cRVsxfiwKKwlraGxwPVxFWzI4fiwga2ljaDE9XEVbMn4sIGtucD1cRVs2fiwga3BwPVxFWzV+LAorCWtyZG89XEVbMjl+LCBrc2x0PVxFWzR+LCBsZjE9cGYxLCBsZjI9cGYyLCBsZjM9cGYzLCBsZjQ9cGY0LAorCW1jMD1cRVtpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgbmVsPVxFRSwgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNLCBybWFjcz1cRShCLCBybWFtPVxFWz83bCwgcm1jdXA9XEVbPzdoLCBybWlyPVxFWzRsLAorCXJta3g9XEVbPzFsXEU+LCBybXNvPVxFWzI3bSwgcm11bD1cRVsyNG0sIHJzMT1cRVshcCwKKwlyczI9XEVbPzNsLCBzMGRzPVxFKEIsIHMxZHM9XEUoMCwgc2M9XEU3LAorCXNncj1cRVslPyVwMSV0OzclOyU/JXAyJXQ7NCU7JT8lcDMldDs3JTslPyVwNCV0OzUlOyU/JXA2JXQ7MSU7bSU/JXA5JXRcRSgwJWVcRShCJTssCisJc2dyMD1cRVswbVxFKEIsIHNtYWNzPVxFKDAsIHNtYW09XEVbPzdoLAorCXNtY3VwPVxFWz83bFxFWz8xbFxFKEIsIHNtaXI9XEVbNGgsIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLCB0c2w9XEVbMSR9XEVbMiR+LAorYnEzMDAtcnZ8QnVsbCB2dDMyMCByZXZlcnNlIDgwIGNvbHVtbnMsCisJZmxhc2g9XEVbPzVsJDw1MD5cRVs/NWgsCisJaXMyPVxFWz8yaFxFWz8zbFxFWz81aFxFWz83aFxFWz84aFxFPlxFWz8xbFxFIEZcRVs/NDJsXEVbPzRsLAorCXVzZT1icTMwMCwKK2JxMzAwLXd8QnVsbCB2dDMyMCAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczI9XEVbPzJoXEVbPzNoXEVbPzVsXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgRlxFWz80MmxcRVs/NGwsCisJcnMyPVxFWz8zaCwgdXNlPWJxMzAwLAorYnEzMDAtdy1ydnxCdWxsIHZ0MzIwIHJldmVyc2UgbW9kZSAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlmbGFzaD1cRVs/NWwkPDUwPlxFWz81aCwKKwlpczI9XEVbPzJoXEVbPzNoXEVbPzVoXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgRlxFWz80MmxcRVs/NGwsCisJcnMyPVxFWz8zaCwgdXNlPWJxMzAwLAorCisjICBUaGlzIGVudHJ5IGlzIHVzZWQgZm9yIHRlcm1pbmFscyB3aXRoIHZ0MzIwIGVtdWxhdGlvbiBtb2RlCisjICBhbmQgZm9sbG93aW5nIHNldC11cCA6CisjICAgIDggYml0IElTTyBMYXRpbiBDaGFyYWN0ZXIgU2V0IChJU08gODg1OS0xKSwKKyMgICAgOCBiaXQgQ29udHJvbCBDaGFyYWN0ZXJzLCAoQ1NJIGNvZGVkIGFzIHg5QiBmb3IgRVNDIFspCisjICAgIDgwIGNvbHVtbnMgc2NyZWVuLgorIwlTb2Z0IFRlcm1pbmFsIFJlc2V0CQljc2kgISBwCisjCVJJUyAoZXJhc2VzIHNjcmVlbik6CQllc2MgYworIwlERUNLUE5NIG51bWVyaWMga2V5cGFkIG1vZGU6CWVzYyA+CisjCURFQ0tQQU0gYXBwbGljLiBrZXlwYWQgbW9kZToJZXNjID0KKyMJREVDU1RCTSBTY3JvbGxpbmcgcmVnaW9uOgllc2MgWyByCisjCVNDUyBzZWxlY3QgRzAgPSBVUzoJCWVzYyAoIEIKKyMJU0NTIHNlbGVjdCBHMSA9IGxpbmUtZ3JhcGhpYzoJZXNjICkgMAorIwlTZWxlY3QgNy1iaXQgQzEgY29udHJvbHM6CWVzYyBzcCBGCisjCVNlbGVjdCA4LWJpdCBDMSBjb250cm9sczoJZXNjIHNwIEcKKyMJU2VsZWN0IGN1cnNvciBob21lOgkJY3NpIEgKKyMJU2VsZWN0IGVyYXNlIHNjcmVlbjoJCWNzaSBKCisjCVNNIEtBTSBsb2NrIGtleWJvYXJkOgkJY3NpIDIgaAorIwlSTSBLQU0gdW5sb2NrIGtleWJvYXJkOgkJY3NpIDIgbAorIwlTTSBTUk0gbG9jYWwgZWNobyBvZmY6CQljc2kgMSAyIGgKKyMJUk0gU1JNIGxvY2FsIGVjaG8gb246CQljc2kgMSAyIGwKKyMJU00gTE5NIE5ldyBsaW5lIDoJCWNzaSAyIDAgaAorIwlSTSBMTk0gcmV0dXJuID0gQ1Igb25seToJY3NpIDIgMCBsCisjCVNNIERFQ0NLTSBjdXJzb3Iga2V5cyBtb2RlOgljc2kgPyAxIGgKKyMJUk0gREVDQ0tNIGFwcGxpLiBrZXlzIG1vZGU6CWNzaSA/IDEgbAorIwlTTSBERUNBTk0gQU5TSSBtb2RlIG9uOgkJY3NpID8gMiBoCisjCVJNIERFQ0FOTSBBTlNJIG1vZGUgb2ZmOgljc2kgPyAyIGwKKyMJU00gREVDQ09MTSAxMzItY29sdW1uIHNjcmVlbjoJY3NpID8gMyBoCisjCVJNIERFQ0NPTE0gODAtY29sdW1uIHNjcmVlbjoJY3NpID8gMyBsCisjCVNNIERFQ1NDTE0gU21vb3RoIHNjcm9sbDoJY3NpID8gNCBoCisjCVJNIERFQ1NDTE0gSnVtcCBzY3JvbGw6CQljc2kgPyA0IGwKKyMJU00gREVDU0NOTSBzY3JlZW4gbGlnaHQgYmFja2dyLgljc2kgPyA1IGgKKyMJUk0gREVDU0NOTSBzY3JlZW4gZGFyayBiYWNrZ3IuCWNzaSA/IDUgbAorIwlTTSBERUNPTSBtb3ZlIHdpdGhpbiBtYXJnaW5zOgljc2kgPyA2IGgKKyMJUk0gREVDT00gbW92ZSBvdXRzaWRlIG1hcmdpbnM6CWNzaSA/IDYgbAorIwlTTSBERUNBV00gYXV0byByaWdodCBtYXJnaW46CWNzaSA/IDcgaAorIwlSTSBERUNBV00gYXV0byByaWdodCBtYXJnaW46CWNzaSA/IDcgbAorIwlTTSBERUNBUk0gYXV0byByZXBlYXQ6CQljc2kgPyA4IGgKKyMJUk0gREVDQVJNIGF1dG8gcmVwZWF0OgkJY3NpID8gOCBsCisjCURFQ1NBU0QgU2VsZWN0IGFjdGl2ZSBtYWluOgljc2kgMCAkIH0KKyMJREVDU0FTRCBTZWxlY3QgYWN0aXZlIHN0YXR1czoJY3NpIDEgJCB9CisjCURFQ1NTRFQgU2VsZWN0IHN0YXR1cyBub25lOgljc2kgMCAkIH4KKyMJREVDU1NEVCBTZWxlY3Qgc3RhdHVzIGluZGljLjoJY3NpIDEgJCB+CisjCURFQ1NTRFQgU2VsZWN0IHN0YXR1cyBob3N0LXdyOgljc2kgMiAkIH4KKyMJU00gREVDVENFTSBWaXNpYmxlIGN1cnNvcjoJY3NpID8gMiA1IGgKKyMJUk0gREVDVENFTSBJbnZpc2libGUgY3Vyc29yOgljc2kgPyAyIDUgbAorIwlTTSBERUNOQ1JNIDcgYml0cyBOQ1Igc2V0Ogljc2kgPyA0IDIgaAorIwlSTSBERUNOQ1JNIE11bHRpIG9yIElTTyBsYXRpbjoJY3NpID8gNCAyIGwKKyMJREVDU0NMIHZ0MzAwIG1vZGUgOC1iaXQgY3RybDoJY3NpIDYgMyAiIHAKKyMgb3IJREVDU0NMIHZ0MzAwIG1vZGUgOC1iaXQgY3RybDoJY3NpIDYgMyA7IDAgIiBwCisjCURFQ1NDTCB2dDMwMCBtb2RlIDctYml0IGN0cmw6CWNzaSA2IDMgOyAxICIgcAorIwlDaGFyLiBhbmQgTGluZSBhdHRyaWJ1dGVzOgljc2kgUHMgLi4uIFBzIG0KKyMgd2l0aDogIDAgQWxsIG9mZiwgMSBCb2xkLCA0IFVuZGVybGluZSwgNSBCbGlua2luZywgNyBSZXZlcnNlCisjIGFuZCA6IDIyIEJvbGQgb2ZmLCAyNCBVbmRlcmxpbmUgb2ZmLCAyNSBCbGlua2luZyBvZmYsIDI3IFJldmVyc2Ugb2ZmCisjIChicTMwMC04OiA8Y3ViMT4sPGN1ZjE+LDxjdXUxPiw8Y3VkMT4sPGRsMT4sPGlsMT4gdG8gZ2V0IHVuZGVyIDEwMjQgLS1lc3IpCiticTMwMC04fEJ1bGwgdnQzMjAgZnVsbCA4IGJpdHMgODAgY29sdW1ucywKKwlhbSwgZW8sIGVzbG9rLCBocywga20sIG1jNWksIG1pciwgbXNnciwgeGVubCwgeG9uLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLCB3c2wjODAsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVwyMzM1bSwgYm9sZD1cMjMzMW0sIGNpdmlzPVwyMzM/MjVsLAorCWNsZWFyPVwyMzNIXDIzM0osIGNub3JtPVwyMzM/MjVoLCBjcj1eTSwKKwljc3I9XDIzMyVpJXAxJWQ7JXAyJWRyLCBjdWI9XDIzMyVwMSVkRCwgY3VkPVwyMzMlcDElZEIsCisJY3VmPVwyMzMlcDElZEMsIGN1cD1cMjMzJWklcDElZDslcDIlZEgsIGN1dT1cMjMzJXAxJWRBLAorCWRjaD1cMjMzJXAxJWRQLCBkY2gxPVwyMzNQLCBkbD1cMjMzJXAxJWRNLAorCWRzbD1cMjMzMSR9XDIzMzIkflxuXDIzMzAkfSwgZWNoPVwyMzMlcDElZFgsIGVkPVwyMzNKLAorCWVsPVwyMzNLLCBlbDE9XDIzMzFLLCBlbmFjcz1cRShCXEUpMCwKKwlmbGFzaD1cMjMzPzVoJDw1MD5cMjMzPzVsLCBmc2w9XDIzMzAkfSwgaG9tZT1cMjMzSCwKKwlodD1eSSwgaHRzPVxFSCwgaWNoPVwyMzMlcDElZEAsIGlsPVwyMzMlcDElZEwsIGluZD1cRUQsCisJaXMxPVxFWzYzOzIicFxFWzJoLAorCWlzMj1cRVs/MmhcRVs/M2xcRVs/NWxcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBHXEVbPzQybFxFWz80bCwKKwlpczM9XDIzMzAkfVwyMzM/MjVoXDIzMzJsXDIzM0hcMjMzSiwga2ExPVwyMTd3LAorCWthMz1cMjE3eSwga2IyPVwyMTd1LCBrYnM9XkgsIGtjMT1cMjE3cSwga2MzPVwyMTdzLAorCWtjdWIxPVwyMzNELCBrY3VkMT1cMjMzQiwga2N1ZjE9XDIzM0MsIGtjdXUxPVwyMzNBLAorCWtkY2gxPVwyMzMzfiwga2YxPVwyMTdQLCBrZjEwPVwyMzMyMX4sIGtmMTE9XDIzMzIzfiwKKwlrZjEyPVwyMzMyNH4sIGtmMTM9XDIzMzI1fiwga2YxND1cMjMzMjZ+LCBrZjE1PVwyMzMyOH4sCisJa2YxNj1cMjMzMjl+LCBrZjE3PVwyMzMzMX4sIGtmMTg9XDIzMzMyfiwga2YxOT1cMjMzMzN+LAorCWtmMj1cMjE3USwga2YyMD1cMjMzMzR+LCBrZjM9XDIxN1IsIGtmND1cMjE3Uywga2Y2PVwyMzMxN34sCisJa2Y3PVwyMzMxOH4sIGtmOD1cMjMzMTl+LCBrZjk9XDIzMzIwfiwga2ZuZD1cMjMzMX4sCisJa2hscD1cMjMzMjh+LCBraWNoMT1cMjMzMn4sIGtucD1cMjMzNn4sIGtwcD1cMjMzNX4sCisJa3Jkbz1cMjMzMjl+LCBrc2x0PVwyMzM0fiwgbGYxPXBmMSwgbGYyPXBmMiwgbGYzPXBmMywKKwlsZjQ9cGY0LCBtYzA9XDIzM2ksIG1jND1cMjMzNGksIG1jNT1cMjMzNWksIG5lbD1cRUUsIHJjPVxFOCwKKwlyZXY9XDIzMzdtLCByaT1cRU0sIHJtYWNzPV5PLCBybWFtPVwyMzM/N2wsIHJtY3VwPVwyMzM/N2gsCisJcm1pcj1cMjMzNGwsIHJta3g9XDIzMz8xbFxFPiwgcm1zbz1cMjMzMjdtLCBybXVsPVwyMzMyNG0sCisJcnMxPVxFWyFwLCByczI9XEVbPzNsLCBzMGRzPVxFKEIsIHMxZHM9XEUoMCwgc2M9XEU3LAorCXNncj1cMjMzJT8lcDEldDs3JTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20lPyVwOSV0XEUoMCVlXEUoQiU7LAorCXNncjA9XDIzMzBtXEUoQiwgc21hY3M9Xk4sIHNtYW09XDIzMz83aCwKKwlzbWN1cD1cMjMzPzdsXDIzMz8xbFxFKEIsIHNtaXI9XDIzMzRoLCBzbXNvPVwyMzM3bSwKKwlzbXVsPVwyMzM0bSwgdGJjPVwyMzMzZywgdHNsPVwyMzMxJH1cMjMzMiR+LAorYnEzMDAtOHJ2fEJ1bGwgdnQzMjAgOC1iaXQgcmV2ZXJzZSBtb2RlIDgwIGNvbHVtbnMsCisJZmxhc2g9XDIzMz81bCQ8NTA+XDIzMz81aCwKKwlpczI9XEVbPzJoXEVbPzNsXEVbPzVoXEVbPzdoXEVbPzhoXEU+XEVbPzFsXEUgR1xFWz80MmxcRVs/NGwsCisJdXNlPWJxMzAwLTgsCiticTMwMC04d3xCdWxsIHZ0MzIwIDgtYml0IDEzMiBjb2x1bW5zLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMj1cRVs/MmhcRVs/M2hcRVs/NWxcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBHXEVbPzQybFxFWz80bCwKKwlyczI9XDIzMz8zaCwgdXNlPWJxMzAwLTgsCiticTMwMC13LThydnxCdWxsIHZ0MzIwIDgtYml0IHJldmVyc2UgbW9kZSAxMzIgY29sdW1ucywKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlmbGFzaD1cMjMzPzVsJDw1MD5cMjMzPzVoLAorCWlzMj1cRVs/MmhcRVs/M2hcRVs/NWhcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBHXEVbPzQybFxFWz80bCwKKwlyczI9XDIzMz8zaCwgdXNlPWJxMzAwLTgsCisKKyMgIFRoaXMgZW50cnkgaXMgdXNlZCBmb3IgdGVybWluYWxzIHdpdGggdnQzMjAgZW11bGF0aW9uIG1vZGUKKyMgIGEgMTAyIGtleXMga2V5Ym9hcmQgKFBDIHNjYW5jb2RlICEpIGFuZCBmb2xsb3dpbmcgc2V0LXVwIDoKKyMgICAgOCBiaXQgSVNPIExhdGluIENoYXJhY3RlciBTZXQgKElTTyA4ODU5LTEpLAorIyAgICA3IGJpdCBDb250cm9sIENoYXJhY3RlcnMsCisjICAgIDgwIGNvbHVtbnMgc2NyZWVuLgorYnEzMDAtcGN8UXVlc3RhciAzMDMgd2l0aCBQQyBrZXlib2FyZCBJU08gTGF0aW4gMSA4MCBjb2x1bW5zLAorCWticz1eSCwga2RjaDE9XEVbM34sIGtlbmQ9XEVbNH4sIGtmMT1cRVsxN34sIGtmMTA9XEVbMjh+LAorCWtmMTE9XEVbMjl+LCBrZjEyPVxFWzMxfiwga2YxM0AsIGtmMTRALCBrZjE1QCwga2YxNkAsIGtmMTdALAorCWtmMThALCBrZjE5QCwga2YyPVxFWzE4fiwga2YyMEAsIGtmMz1cRVsxOX4sIGtmND1cRVsyMH4sCisJa2Y1PVxFWzIxfiwga2Y2PVxFWzIzfiwga2Y3PVxFWzI0fiwga2Y4PVxFWzI1fiwga2Y5PVxFWzI2fiwKKwlrZm5kQCwga2hscEAsIGtob21lPVxFWzF+LCBraWNoMT1cRVsyfiwga25wPVxFWzZ+LCBrcHA9XEVbNX4sCisJa3Jkb0AsIGtzbHRALCBsZjFALCBsZjJALCBsZjNALCBsZjRALCB1c2U9YnEzMDAsCiticTMwMC1wYy1ydnxRdWVzdGFyIDMwMyB3aXRoIFBDIGtleWJvYXJkIHJldmVyc2UgbW9kZSA4MCBjb2x1bW5zLAorCWZsYXNoPVxFWz81bCQ8NTA+XEVbPzVoLAorCWlzMj1cRVs/MmhcRVs/M2xcRVs/NWhcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBGXEVbPzQybFxFWz80bCwKKwl1c2U9YnEzMDAtcGMsCiticTMwMC1wYy13fFF1ZXN0YXIgMzAzIHdpdGggUEMga2V5Ym9hcmQgMTMyIGNvbHVtbnMgdGVybWluYWwsCisJY29scyMxMzIsIHdzbCMxMzIsCisJaXMyPVxFWz8yaFxFWz8zaFxFWz81bFxFWz83aFxFWz84aFxFPlxFWz8xbFxFIEZcRVs/NDJsXEVbPzRsLAorCXJzMj1cRVs/M2gsIHVzZT1icTMwMC1wYywKK2JxMzAwLXBjLXctcnZ8UXVlc3RhciAzMDMgd2l0aCBQQyBrZXlib2FyZCByZXZlcnNlIG1vZGUgMTMyIGNvbHVtbnMsCisJY29scyMxMzIsIHdzbCMxMzIsCisJZmxhc2g9XEVbPzVsJDw1MD5cRVs/NWgsCisJaXMyPVxFWz8yaFxFWz8zaFxFWz81aFxFWz83aFxFWz84aFxFPlxFWz8xbFxFIEZcRVs/NDJsXEVbPzRsLAorCXJzMj1cRVs/M2gsIHVzZT1icTMwMC1wYywKKyMgICAgOCBiaXQgSVNPIExhdGluIENoYXJhY3RlciBTZXQgKElTTyA4ODU5LTEpLAorIyAgICA4IGJpdCBDb250cm9sIENoYXJhY3RlcnMsCisjICAgIDgwIGNvbHVtbnMgc2NyZWVuLgorYnEzMDAtOC1wY3xRMzA2LTgtcGN8UXVlc3RhciAzMDMgd2l0aCBQQyBrZXlib2FyZCBpbiBmdWxsIDggYml0cyA4MCBjb2x1bW5zLAorCWticz1eSCwga2RjaDE9XDIzMzN+LCBrZW5kPVwyMzM0fiwga2YxPVwyMzMxN34sCisJa2YxMD1cMjMzMjh+LCBrZjExPVwyMzMyOX4sIGtmMTI9XDIzMzMxfiwga2YxM0AsIGtmMTRALAorCWtmMTVALCBrZjE2QCwga2YxN0AsIGtmMThALCBrZjE5QCwga2YyPVwyMzMxOH4sIGtmMjBALAorCWtmMz1cMjMzMTl+LCBrZjQ9XDIzMzIwfiwga2Y1PVwyMzMyMX4sIGtmNj1cMjMzMjN+LAorCWtmNz1cMjMzMjR+LCBrZjg9XDIzMzI1fiwga2Y5PVwyMzMyNn4sIGtmbmRALCBraGxwQCwKKwlraG9tZT1cMjMzMX4sIGtpY2gxPVwyMzMyfiwga25wPVwyMzM2fiwga3BwPVwyMzM1fiwga3Jkb0AsCisJa3NsdEAsIGxmMUAsIGxmMkAsIGxmM0AsIGxmNEAsIHVzZT1icTMwMC04LAorYnEzMDAtOC1wYy1ydnxRdWVzdGFyIDMwMyB3aXRoIFBDIGtleWJvYXJkIGZ1bGwgOCBiaXRzIHJldmVyc2UgbW9kZSA4MCBjb2x1bW5zLAorCWZsYXNoPVxFWz81bCQ8NTA+XEVbPzVoLAorCWlzMj1cRVs/MmhcRVs/M2xcRVs/NWhcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBHXEVbPzQybFxFWz80bCwKKwl1c2U9YnEzMDAtOC1wYywKK2JxMzAwLTgtcGMtd3xRdWVzdGFyIDMwMyB3aXRoIFBDIGtleWJvYXJkIGZ1bGwgOCBiaXRzIDEzMiBjb2x1bW5zLAorCWNvbHMjMTMyLCB3c2wjMTMyLAorCWlzMj1cRVs/MmhcRVs/M2hcRVs/NWxcRVs/N2hcRVs/OGhcRT5cRVs/MWxcRSBHXEVbPzQybFxFWz80bCwKKwlyczI9XEVbPzNoLCB1c2U9YnEzMDAtOC1wYywKK2JxMzAwLTgtcGMtdy1ydnxRdWVzdGFyIDMwMyB3aXRoIFBDIGtleWJvYXJkIGZ1bGwgOCBiaXRzIHJldmVyc2UgMTMyIGNvbHVtbnMsCisJY29scyMxMzIsIHdzbCMxMzIsCisJZmxhc2g9XEVbPzVsJDw1MD5cRVs/NWgsCisJaXMyPVxFWz8yaFxFWz8zaFxFWz81aFxFWz83aFxFWz84aFxFPlxFWz8xbFxFIEdcRVs/NDJsXEVbPzRsLAorCXJzMj1cRVs/M2gsIHVzZT1icTMwMC04LXBjLAorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworIyBCVUxMIFFVRVNUQVIgMzEwIGBWSVAgNzgwMC84ODAwJyB0ZXJtaW5hbHMgZW11bGF0aW9uICMKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCisKKyMgbm9ybWFsIG1vZGUsIDggYml0cywgODAgY29sdW1ucyB0ZXJtaW5hbC4KKyMJUkVTIHJlc2V0IDoJCQleW2UKKyMJUklTIHJlc2V0IGluaXRpYWwgc3RhdGU6CV5bYworIwlCTEUgYmVsbCBlbmFibGUJCQleW2gKKyMJQkxEIGJlbGwgZGlzYWJsZQkJXltnCisjCUNBTVMgY2hhci4gYXR0ci4gbW9kZSBzZXQJXltbRAorIwlDQU1SIGNoYXIuIGF0dHIuIG1vZGUgcmVzZXQJXltbRworIwlDTFIgY2xlYXIJCQleW2AKKyMJS0JVIGtleWJvYXJkIHVubG9jayAoc2V0KQleW1tXCisjCUtCTCBrZXlib2FyZCBsb2NrIChyZXNldCkJXltbWAorIwlDTSAgY2hhcmFjdGVyIG1vZGUgKGFzeW5jLikgCV5baworIwlORVAgbm9uIGVjaG9wbGV4IG1vZGUgKGJ5IGhvc3QpCV5bbAorIwlFUCAgZWNob3BsZXggbW9kZSAoYnkgaG9zdCkgCV5bbQorIwlJTSAgaW5zZXJ0IG1vZGUgc2V0CQleW1tJCisjCUlNICBpbnNlcnQgbW9kZSByZXNldCAJCV5bW0oKKyMJUk1TIHJvbGwgbW9kZSBzZXQgCQleW3IKKyMJUk1SIHJvbGwgbW9kZSByZXNldCAJCV5bcQorIwlTTTc4IHNldCBtb2RlIHZpcDc4MDAJIAleW1sxcQorIwlTRCAgc2Nyb2xsIHVwICAJKDcyIGxpbmVzKSAJXltbMHMKKyMJU0QgIHNjcm9sbCBkb3duCSg3MiBsaW5lcykgCV5bWzFzCisjCVJCTSBibG9jayBtb2RlIHJlc2V0CQleW1tFCisjCVNMUyBzdGF0dXMgbGluZSBzZXQgCQleW3cKKyMJU0xSIHN0YXR1cyBsaW5lIHJlc2V0IAkJXlt2CisjCVNMTCBzdGF0dXMgbGluZSBsb2NrIAkJXltPCisjCUxHUyBMaW5lLWdyYXBoaWMgbW9kZSBzZXQgCV5bRworIwlMR1IgTGluZS1ncmFwaGljIG1vZGUgcmVzZXQgCV5bRgorIwlUQkMgdGFiIGNsZWFyIChhdCBjdXJzb3IgcG9zLikJXltbZworIwlUQkkgdGFiIGluaXRpYWxpemUgCQleW1tOCisjCVRCUyB0YWIgc2V0IChhdCBjdXJzb3IgcG9zLikJXltwCisjCVBEUyAgcHJpbnQgZGF0YSBzcGFjZQkJXltbMHAKKyMJUEhEICBwcmludCBob3N0IGRhdGEgCQleW1szcAorIwlQRFQgIHByaW50IGRhdGEgdGVybWluYXRvcgleW1s8cAorIwlQUkVTIHByaW50IGFkYXB0ZXIgcmVzZXQJXltbMnAKKyMJU1NQUiBtdWx0aS1wYXJ0LiByZXNldAkJXltbPD51CisjCVNTUDAgcGFydGl0aW9uIDAgc2V0CQleW1swMHUKKyMJU1NQMSBwYXJ0aXRpb24gbiBmb3JtYXQgMSAJXltbUG5QblNUUklOR3UKKyMJU1NQMiBwYXJ0aXRpb24gbiBmb3JtYXQgMiAJXltbUG5QblNUUklOR3UKKyMJU1NQMyBwYXJ0aXRpb24gbiBmb3JtYXQgMyAJXltbUG5QbnUKKyMJQVRSIGF0dHJpYnV0ZSAodmlzdWFsKQorIwkgICAgYmxpbmsgOgkJCV5bc0IKKyMJICAgIGRpbSA6CQkJXltzTAorIwkgICAgaGlkZSAoYmxhbmspIDoJCV5bc0gKKyMJICAgIHJlc3RvcmUgOgkJCV5bc1IKKyMJICAgIGludmVyc2UgdmlkZW8gOgkJXltzSQorIwkgICAgcHJvdC4gOgkJCV5bc1AKKyMJICAgIHVuZGVybGluZSA6CQkJXltzXworIwkgICAgcmVzZXQgOgkJCV57CisjCisjIFRoaXMgY292ZXJzIHRoZSB2aXA3ODAwIGFuZCBCUTMxNTUtdmlwNzgwMAordmlwfEJ1bGwgUXVlc3RhciAzMTU1LTc4MDAsCisJYW0sIGVzbG9rLCBocywga20sIG1jNWksIG1zZ3IsIHhlbmwsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywgd3NsIzgwLAorCWFjc2M9MHBqZGtibGFtY25rcWl0Z3Vmdmh3ZXhqLCBiZWw9XkcsIGJsaW5rPVxFc0IsCisJY2J0PVxFW1osIGNsZWFyPVxFYCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVslaSVwMSUwM2QlcDIlMDNkZiwgY3V1MT1cRUEsIGRjaDE9XEVbUCwgZGltPVxFc0wsCisJZGwxPVxFW00sIGRzbD1cRXYsIGVkPVxFSiwgZWw9XEVLLAorCWZsYXNoPVwwMDckPDgwPlwwMDckPDgwPlwwMDcsIGZzbD1cRU8sIGhvbWU9XEVILCBodD1eSSwKKwlodHM9XEVwLCBpY2gxPVxFW0ksIGluZD1eSiwgaW52aXM9XEVzSCwKKwlpczI9XEVbMDB1XEVbPD4wMDEwMDEwMjQwODAwMjQwODB1XEVbMDF1LAorCWlzMz1cRXJcRVtXXEVgLCBrSE9NPVxFSCwga0xGVD1cRW8sIGtSSVQ9XEV1LCBrYnM9XkgsCisJa2NidD1cRVtaLCBrY2xyPVxFYCwga2N0YWI9XEVbZywga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtkY2gxPVxFW1AsIGtkbDE9XEVbTSwga2VkPVxFSiwKKwlrZWw9XEVLLCBrZjE9XEUwLCBrZjEwPVxFVCwga2YxMT1cRVxcLCBrZjEyPVxFXF4sIGtmMTNALCBrZjE0QCwKKwlrZjE1QCwga2YxNkAsIGtmMTdALCBrZjE4QCwga2YxOUAsIGtmMj1cRTIsIGtmMjBALCBrZjIxPVxFMSwKKwlrZjIyPVxFNSwga2YyMz1cRTcsIGtmMjQ9XEU5LCBrZjI1PVxFOywga2YyNj1cRT0sIGtmMjc9XEU/LAorCWtmMjg9XEVRLCBrZjI5PVxFUywga2YzPVxFNiwga2YzMD1cRVYsIGtmMzE9XEVdLCBrZjMyPVxFXywKKwlrZjQ9XEU4LCBrZjU9XEVcOiwga2Y2PVxFPCwga2Y3PVxFPiwga2Y4PVxFUCwga2Y5PVxFUiwKKwlraG9tZT1cRUgsIGtodHM9XEVwLCBraWNoMT1cRVtJLCBraWwxPVxFW0wsIGtpbmQ9XEVbMHMsCisJa2xsPVxFSFxFQSwga3JpPVxFWzFzLCBrcm1pcj1cRVtKLCBrdGJjPVxFW04sIGxmMT1wZjEsCisJbGYyPXBmMiwgbGYzPXBmMywgbGY0PXBmNCwgbGw9XEVIXEVBLCBtYzA9XEVbMHAsIG1jND1cRVs8cCwKKwltYzU9XEVbM3AsIG5lbD1eTSwgcHJvdD1cRXNQLCByZXY9XEVzSSwKKwlyaT1cRUFcRUpcRUhcRVtMJDwxMD4sIHJtYWNzPVxFRiwgcm1pcj1cRVtKLCBybXNvPVxFc1IsCisJcm11bD1cRXNSLCByczE9XEVjLCByczI9XEVbRywgczBkcz1cRUYsIHMxZHM9XEVHLAorCXNncjA9XEVzUlxFc1VcRUYsIHNtYWNzPVxFRywgc21pcj1cRVtJLCBzbXNvPVxFc0ksCisJc211bD1cRXNfLCB0YmM9XEVbTiwgdHNsPVxFdywKKyMgbm9ybWFsIHNjcmVlbiwgOCBiaXRzLCAxMzIgY29sdW1ucyB0ZXJtaW5hbC4KK3ZpcC13fHZpcDc4MDAtd3xRMzEwLXZpcC13fFEzMTAtdmlwLXctYW18UXVlc3RhciAzMTU1LXZpcDc4MDAgd2lkZSwKKwljb2xzIzEzMiwgd3NsIzEzMiwKKwlpczI9XEVbMDB1XEVbPD4wMDEwMDEwMjQxMzIwMjQxMzJ1XEVbMDF1LCB1c2U9dmlwLAordmlwLUh8dmlwNzgwMC1IfFEzMTAtdmlwLUh8UTMxMC12aXAtSC1hbXxRdWVzdGFyIDMxNTUtdmlwNzgwMCA3MiBsaW5lcywKKwlsaW5lcyM3MiwKKwlpczI9XEVbMDB1XEVbPD4wMDEwMDEwMjQwODAwNzIwODB1XEVbMDF1LCB1c2U9dmlwLAordmlwLUh3fHZpcDc4MDAtSHd8UTMxMC12aXAtSHd8UXVlc3RhciAzMTU1LXZpcDc4MDAgd2lkZSA3MiBsaW5lcywKKwljb2xzIzEzMiwgbGluZXMjNzIsIHdzbCMxMzIsCisJaXMyPVxFWzAwdVxFWzw+MDAxMDAxMDI0MTMyMDcyMTMydVxFWzAxdSwgdXNlPXZpcCwKKworIyMjIyBDaHJvbWF0aWNzCisjCisKKyMgSSBoYXZlIHB1dCB0aGUgbG9uZyBzdHJpbmdzIGluIDxzbWN1cD4vPHJtY3VwPi4gVGkgc2V0cyB1cCBhIHdpbmRvdworIyB0aGF0IGlzIHNtYWxsZXIgdGhhbiB0aGUgc2NyZWVuLCBhbmQgcHV0cyB1cCBhIHdhcm5pbmcgbWVzc2FnZQorIyBvdXRzaWRlIHRoZSB3aW5kb3cuIFRlIGVyYXNlcyB0aGUgd2FybmluZyBtZXNzYWdlLCBwdXRzIHRoZQorIyB3aW5kb3cgYmFjayB0byBiZSB0aGUgd2hvbGUgc2NyZWVuLCBhbmQgcHV0cyB0aGUgY3Vyc29yIGF0IGp1c3QKKyMgYmVsb3cgdGhlIHNtYWxsIHdpbmRvdy4gSSBkZWZpbmVkIDxjbm9ybT4gYW5kIDxjaXZpcz4gdG8gcmVhbGx5IHR1cm4KKyMgdGhlIGN1cnNvciBvbiBhbmQgb2ZmLCBidXQgSSBoYXZlIHRha2VuIHRoaXMgb3V0IHNpbmNlIEkgZG9uJ3QKKyMgbGlrZSB0aGUgY3Vyc29yIGJlaW5nIHR1cm5lZCBvZmYgd2hlbiB2aSBleGl0cy4KK2NnNzkwMHxjaHJvbWF0aWNzfGNocm9tYXRpY3MgNzkwMCwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyM0MCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eXSwKKwljdXA9XDAwMU0lcDIlZFwsJXAxJWRcLCwgY3V1MT1eSywgZGNoMT1eQTwxLCBkbDE9XkE8MiwKKwllZD1eQWwsIGVsPV5BYCwgaG9tZT1eXCwgaWNoMT1eQT4xLCBpbDE9XkE+MiwgaW5kPV5KLCBsbD1eQXwsCisJcm1jdXA9XDAwMVcwXCw0MFwsODVcLDQ4XCxcMDE0XDAwMVcwXCwwXCw4NVwsNDhcLFwwMDFNMFwsNDBcLCwKKwlybXNvPVwwMDFDMVwsXDAwMWMyXCwsCisJc21jdXA9XDAwMVAwXDAwMU8xXDAwMVIxXDAwMUM0XCxcMDAxYzBcLFwwMTRcMDAxTTBcLDQyXCxXQVJOSU5HIERPVUJMRSBFTlRFUiBFU0NBUEUgYW5kIFwwMjVcMDAxQzFcLFwwMDFjMlwsXDAwMVcwXCwwXCw3OVwsMzlcLCwKKwlzbXNvPVwwMDFDNFwsXDAwMWM3XCwsIHVjPVwwMDFcMDAxX1wwMDFcMCwKKworIyMjIyBDb21wdXRlciBBdXRvbWF0aW9uCisjCisKK2NhMjI4NTF8Y29tcHV0ZXIgYXV0b21hdGlvbiAyMjg1MSwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMTQkPDg+LCBjcj1eTSwgY3ViMT1eVSwgY3VkMT1eSiwgY3VmMT1eSSwKKwljdXA9XDAwMiVpJXAxJWMlcDIlYywgY3V1MT1eViwgZWQ9XlwsIGVsPV5dLCBob21lPV5eLCBpbmQ9XkosCisJa2N1YjE9XlUsIGtjdWQxPV5XLCBrY3V1MT1eViwga2hvbWU9Xl4sCisKKyMjIyMgQ3liZXJuZXgKKyMKKworIyBUaGlzIGVudHJ5IGhhcyBjb3JyZWN0IHBhZGRpbmcgYW5kIHRoZSB1bmRvY3VtZW50ZWQgInJpIiBjYXBhYmlsaXR5CitjeWI4M3x4bDgzfGN5YmVybmV4IHhsLTgzLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XDAxNCQ8NjI+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eSSwKKwljdXA9XDAyNyVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eTiwKKwllZD1cMDIwJDw2Mj4sIGVsPVwwMTckPDM+LCBob21lPV5LLCBpbmQ9XkosIGtjdWIxPV5ILAorCWtjdWQxPV5KLCBrY3VmMT1eSSwga2N1dTE9Xk4sIHJpPV5OLAorIyAobWRsMTEwOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XlpeUDoiIGFuZCBvdmVycmlkZGVuICI6Y2Q9MTQ1Xk5BXlc6IiAtLSBlc3IpCitjeWIxMTB8bWRsMTEwfGN5YmVybmV4IG1kbC0xMTAsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cMDMwJDw3MD4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5VLAorCWN1cD1cMDIwJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5aLAorCWRjaDE9XDAxNkFcMDM2JDwzLjU+LCBkbDE9XDAxNkFcMDE2XDAzNiQ8NDA+LAorCWVkPVwwMTZAXDAyNiQ8Nj4sIGVsPVwwMTZAXDAyNiQ8MTQ1PiwgaG9tZT1eWSwKKwlodD1cMDExJDw0Mz4sIGljaDE9XDAxNkFcMDM1JDwzLjU+LAorCWlsMT1cMDE2QVwwMTZcMDM1JDw2NT4sIGluZD1eSiwgcm1zbz1eTkcsIHNtc289Xk5GLAorCisjIyMjIERhdGFwb2ludAorIworIyBEYXRhcG9pbnQgaXMgZ29uZS4gIFRoZXkgdXNlZCB0byBiZSBoZWFkcXVhcnRlcmVkIGluIFRleGFzLgorIyBUaGV5IGNyZWF0ZWQgQVJDbmV0LCBhbiBFdGhlcm5ldCBjb21wZXRpdG9yIHRoYXQgZmxvdXJpc2hlZCBmb3IgYSB3aGlsZQorIyBpbiB0aGUgZWFybHkgMTk4MHMgYmVmb3JlIDNDT00gZ290IHdpc2UgYW5kIGN1dCBpdHMgcHJpY2VzLiAgVGhlIHNlcnZpY2UKKyMgc2lkZSBvZiBEYXRhcG9pbnQgc3RpbGwgbGl2ZXMgKDE5OTUpIGluIHRoZSBmb3JtIG9mIEludGVsb2dpYyBUcmFjZS4KKyMKKworZHAzMzYwfGRhdGFwb2ludHxkYXRhcG9pbnQgMzM2MCwKKwlPVGJzLCBhbSwKKwljb2xzIzgyLCBsaW5lcyMyNSwKKwliZWw9XkcsIGNsZWFyPV5dXl8sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5YLCBjdXUxPV5aLAorCWVkPV5fLCBlbD1eXiwgaG9tZT1eXSwgaW5kPV5KLAorCisjIEZyb206IEphbiBXaWxsZW0gU3R1bXBlbCA8ancuc3R1bXBlbEBpbnRlci5ubC5uZXQ+LCAxMSBNYXkgMTk5NworIyBUaGUgRGF0YXBvaW50IDgyNDIgV29ya3N0YXRpb24gd2FzIHNvbGQgYXQgbGVhc3QgYmV0d2VlbiAxOTg1CisjIGFuZCAxOTg5LiBUbyBtYWtlIHRoZSB0ZXJtaW5hbCB3b3JrIHdpdGggdGhpcyBlbnRyeSwgcHJlc3MKKyMgQ09OVFJPTC1JTlQtSU5UIHRvIHRha2UgdGhlIHRlcm1pbmFsIG9mZi1saW5lLCBhbmQgdHlwZSAob3B0KS4KKyMgU2V0IHRoZSBvcHRpb25zIEFVVE8gUk9MTCwgUk9MTCBETiwgYW5kIEVTQyBLQkQgb24sIGFuZCBBVVRPCisjIENSL0xGIG9mZi4gVXNlIGNvbnRyb2wtc2hpZnQtW10gYXMgZXNjYXBlIGtleSwgY29udHJvbC1JIGFzIHRhYiwKKyMgc2hpZnQtRjEgdG8gc2hpZnQtRjUgYXMgRjYgdG8gRjEwICh1bnNoaWZ0ZWQgRjEgdG8gRjUgYXJlIGluCisjIGZhY3QgdW51c2FibGUgYmVjYXVzZSB0aGUgc3RyaW5ncyBzZW50IGJ5IHRoZSB0ZXJtaW5hbCBjb25mbGljdAorIyB3aXRoIG90aGVyIGtleXMpLgorIyBUaGUgdGVybWluYWwgaXMgY2FwYWJsZSBvZiBkaXNwbGF5aW5nICJib3ggZHJhdyIgY2hhcmFjdGVycy4KKyMgRm9yIGVhY2ggZ3JhcGhpYyBjaGFyYWN0ZXIgeW91IG11c3Qgc2VuZCAyIEVTQydzIChcRVxFKSBmb2xsb3dlZAorIyBieSBhIGNvbnRyb2wgY2hhcmFjdGVyIGFzIGZvbGxvd3M6CisjICAgICAgICAgY2hhcmFjdGVyICAgICAgICBtZWFuaW5nCisjICAgICAgICAgPT09PT09PT09ICAgICAgICA9PT09PT09CisjICAgICAgICAgY3RybC1FICAgICAgICAgICB0b3AgdGVlCisjICAgICAgICAgY3RybC1GICAgICAgICAgICByaWdodCB0ZWUKKyMgICAgICAgICBjdHJsLUcgICAgICAgICAgIGJvdHRvbSB0ZWUKKyMgICAgICAgICBjdHJsLUggICAgICAgICAgIGxlZnQgdGVlCisjICAgICAgICAgY3RybC1JICAgICAgICAgICBjcm9zcworIyAgICAgICAgIGN0cmwtSiAgICAgICAgICAgdG9wIGxlZnQgY29ybmVyCisjICAgICAgICAgY3RybC1LICAgICAgICAgICB0b3AgcmlnaHQgY29ybmVyCisjICAgICAgICAgY3RybC1MICAgICAgICAgICBib3R0b20gbGVmdCBjb3JuZXIKKyMgICAgICAgICBjdHJsLU0gICAgICAgICAgIGJvdHRvbSByaWdodCBjb3JuZXIKKyMgICAgICAgICBjdHJsLU4gICAgICAgICAgIGhvcml6b250YWwgbGluZQorIyAgICAgICAgIGN0cmwtTyAgICAgICAgICAgdmVydGljYWwgbGluZQorIyBVbmZvcnR1bmF0ZWx5IHRoaXMgY2Fubm90IGJlIGZpdHRlZCBpbnRvIHRoZSB0ZXJtY2FwL3Rlcm1pbmZvCisjIGRlc2NyaXB0aW9uIHNjaGVtZS4KK2RwODI0MnxkYXRhcG9pbnQgODI0MiwKKwltc2dyLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWJlbD1eRywgY2l2aXM9XlksIGNsZWFyPVwwMjVcRVwwMDRcMDI3XDAzMCwgY25vcm09XlgsCisJY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VwPVwwMTElcDIlJ1wwJyUrJWMlcDElJ1wwJyUrJWMsIGRsMT1cRV5aLCBlZD1eVywgZWw9XlYsCisJaG9tZT1eVSwgaHQ9XkksIGlsMT1cRV5ULCBpbmQ9XkMsCisJaXMxPVxFXDAxNFxFXDAxNlwwXDIzMFwwXDMxN1wwMjVcMDI3XDAzMFxFXDAwNCwKKwlrYnM9XkgsIGtjdWIxPV5ELCBrY3VkMT1eQiwga2N1ZjE9XkYsIGtjdXUxPV5FLCBrZjE9XkdcRWUsCisJa2YxMD1cRUtcRWEsIGtmMj1eSVxFZCwga2YzPV5KXEVjLCBrZjQ9XkpcRWIsIGtmNT1eU1xFYSwKKwlrZjY9XEVPXEVlLCBrZjc9XEVOXEVkLCBrZjg9XEVNXEVjLCBrZjk9XEVMXEViLCBuZWw9Xk1eSiwKKwlyZXA9XEVcMDIzJXAxJWMlcDIlYywgcmk9XkssIHJtc289XEVeRCwgcm11bD1cRV5ELAorCXJzMT1cRVwwMTRcRVwwMTZcMFwyMzBcMFwzMTdcMDI1XDAyN1wwMzBcRVwwMDQsCisJc21zbz1cRV5FLCBzbXVsPVxFXkYsCisJd2luZD1cRVwwMTRcRVwwMTYlcDElJ1wwJyUrJWMlcDIlJ1wwJyUrJWMlcDMlJ1wwJyUrJWMlcDQlJ1wwJyUrJWNcMDI1LAorCisjIyMjIERFQyB0ZXJtaW5hbHMgKE9ic29sZXRlIHR5cGVzOiBERUN3cml0ZXIgYW5kIHZ0NDAvNDIvNTApCisjCisjIFRoZXNlIGVudHJpZXMgYXJlIERFQydzIG9mZmljaWFsIHRlcm1pbmZvcyBmb3IgaXRzIG9sZGVyIHRlcm1pbmFscy4KKyMgQ29udGFjdCBCaWxsIEhlZGJlcmcgPGhlZGJlcmdAaGFubmFoLmVuZXQuZGVjLmNvbT4gb2YgVGVybWluYWwgU3VwcG9ydAorIyBFbmdpbmVlcmluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFVwZGF0ZWQgdGVybWluZm9zIGFuZCB0ZXJtY2FwcworIyBhcmUga2VwdCBhdmFpbGFibGUgYXQgZnRwOi8vZ2F0ZWtlZXBlci5kZWMuY29tL3B1Yi9ERUMvdGVybWNhcHMuCisjCisKK2d0NDB8ZGVjIGd0NDAsCisJT1Ricywgb3MsCisJY29scyM3MiwgbGluZXMjMzAsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKK2d0NDJ8ZGVjIGd0NDIsCisJT1Ricywgb3MsCisJY29scyM3MiwgbGluZXMjNDAsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwKK3Z0NTB8ZGVjIHZ0NTAsCisJT1RicywKKwljb2xzIzgwLCBsaW5lcyMxMiwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1dTE9XEVBLCBlZD1cRUosIGVsPVxFSywgaHQ9XkksIGluZD1eSiwKK3Z0NTBofGRlYyB2dDUwaCwKKwlPVGJzLAorCWNvbHMjODAsIGxpbmVzIzEyLAorCWJlbD1eRywgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGVkPVxFSiwKKwllbD1cRUssIGh0PV5JLCBpbmQ9XkosIHJpPVxFSSwKKyMgKHZ0NjE6IHRoZXJlJ3MgYSBCU0QgdGVybWNhcCB0aGF0IGNsYWltcyA8ZGwxPVxFUGQ+LCA8aWwxPVxFUGYuPiA8a2JzPV5IPikKK3Z0NjF8dnQtNjF8dnQ2MS41fGRlYyB2dDYxLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVIXEVKJDwxMjA+LCBjcj1cciQ8MjA+LCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XEVDJDwyMD4sIGN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDIwPiwKKwljdXUxPVxFQSQ8MjA+LCBlZD1cRUokPDEyMD4sIGVsPVxFSyQ8NzA+LCBodD1eSSwKKwlpbmQ9XG4kPDIwPiwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywga2N1dTE9XEVBLAorCXJpPVxFJDwyMD5JLAorCisjIFRoZSBnaWdpIGRvZXMgc3RhbmRvdXQgd2l0aCByZWQhCisjIChnaWdpOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nLCBjb3JyZWN0ZWQgY3ViMSAtLSBlc3IpCitnaWdpfHZrMTAwfGRlYyBnaWdpIGdyYXBoaWNzIHRlcm1pbmFsLAorCU9UYnMsIGFtLCB4ZW5sLAorCWNvbHMjODQsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5KLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGVkPVxFW0osCisJZWw9XEVbSywgaHQ9XkksIGluZD1eSiwKKwlpczI9XEU+XEVbPzNsXEVbPzRsXEVbPzVsXEVbPzIwbFxFWz83aFxFWz84aCwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjE9XEVPUCwKKwlrZjI9XEVPUSwga2YzPVxFT1IsIGtmND1cRU9TLCBraG9tZT1cRVtILCByaT1cRU0sCisJcm1hbT1cRVs/N2wsIHJta3g9XEVbPzFsXEU+LCBybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlzZ3IwPVxFW20sIHNtYW09XEVbPzdoLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3OzMxbSwKKwlzbXVsPVxFWzRtLAorCisjIERFQyBQUk8tMzUwIGNvbnNvbGUgKFZUMjIwLXN0eWxlKS4gIFRoZSAzNTAgd2FzIERFQydzIGF0dGVtcHQgdG8gcHJvZHVjZQorIyBhIFBDIGRpZmZlcmVudGlhdGVkIGZyb20gdGhlIElCTSBjbG9uZXMuICBJdCB3YXMgYSB0b3RhbCwgbHVkaWNyb3VzLAorIyBncm9zc2x5LW92ZXJwcmljZWQgZmFpbHVyZSAoYW1vbmcgb3RoZXIgdGhpbmdzLCBERUMncyBPUyBkaWRuJ3QgaW5jbHVkZQorIyBhIGZvcm1hdCBwcm9ncmFtLCBzbyB5b3UgaGFkIHRvIGJ1eSBwcmUtZm9ybWF0dGVkIGZsb3BwaWVzIGZyb20gREVDIGF0CisjIGEgaGVmdHkgcHJlbWl1bSEpLgorcHJvMzUwfGRlY3Byb3xkZWMgcHJvIGNvbnNvbGUsCisJT1RicywKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWBgYWFmZmdnampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+LAorCWNsZWFyPVxFSFxFSiwgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBlZD1cRUosCisJZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsCisJa2N1dTE9XEVBLCBrZjA9XEVFLCBrZjE9XEVGLCBrZjI9XEVHLCBrZjM9XEVILCBrZjQ9XEVJLAorCWtmNT1cRUosIGtmNj1cRWksIGtmNz1cRWosIGtob21lPVxFSCwgcmk9XEVJLCBybWFjcz1cRUcsCisJcm1zbz1cRV5OLCBybXVsPVxFXkMsIHNtYWNzPVxFRiwgc21zbz1cRV5ILCBzbXVsPVxFXkQsCisKK2R3MXxkZWN3cml0ZXIgSSwKKwlPVGJzLCBoYywgb3MsCisJY29scyM3MiwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBpbmQ9XkosCitkdzJ8ZGVjd3JpdGVyfGR3fGRlY3dyaXRlciBJSSwKKwlPVGJzLCBoYywgb3MsCisJY29scyMxMzIsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgaW5kPV5KLCBrYnM9XkgsCisjIFxFKEIJCVVzZSBVLlMuIGNoYXJhY3RlciBzZXQgKG90aGVyd2lzZSAjID0+IGJyaXRpc2ggcG91bmQgISkKKyMgXEVbMjBsCURpc2FibGUgImxpbmVmZWVkIG5ld2xpbmUiIG1vZGUgKGVsc2UgcHV0cyBcciBhZnRlciBcbixcZixcdikKKyMgXEVbdyAgIAkxMCBjaGFyL2luIHBpdGNoCisjIFxFWzE7MTMyCWZ1bGwgd2lkdGggaG9yaXpvbnRhbCBtYXJnaW5zCisjIFxFWzJnCQljbGVhciBhbGwgdGFiIHN0b3BzCisjIFxFW3oJCTYgbGluZXMvaW4KKyMgXEVbNjZ0CTY2IGxpbmVzL3BhZ2UgKGZvciBcZikKKyMgXEVbMTs2NnIJZnVsbCB2ZXJ0aWNhbCBwYWdlIGNhbiBiZSBwcmludGVkCisjIFxFWzRnCQljbGVhciB2ZXJ0aWNhbCB0YWIgc3RvcHMKKyMgXEU+CQlkaXNhYmxlIGFsdGVybmF0ZSBrZXlwYWQgbW9kZSAoc28gaXQgdHJhbnNtaXRzIG51bWJlcnMhKQorIyBcRVslaSVwMSVkdQlzZXQgdGFiIHN0b3AgYXQgY29sdW1uICVkIChvcmlnaW4gPT0gMSkKKyMJCShGdWxsIHN5bnRheCBpcyBcRVtuO247bjtuO247Li4uO251IHdoZXJlIGVhY2ggJ24nIGlzCisjCQlhIHRhYiBzdG9wKQorIworIyAgICAgICBUaGUgZHczIGRvZXMgc3RhbmRvdXQgd2l0aCB3aWRlIGNoYXJhY3RlcnMuCisjCitkdzN8bGExMjB8ZGVjd3JpdGVyIElJSSwKKwlPVGJzLCBoYywgb3MsCisJY29scyMxMzIsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgaHQ9XkksIGluZD1eSiwKKwlpczE9XEUoQlxFWzIwbFxFW3dcRVswOzEzMnNcRVsyZ1xFW3pcRVs2NnRcRVsxOzY2clxFWzRnXEU+LAorCWlzMj1cRVs5OzE3OzI1OzMzOzQxOzQ5OzU3OzY1OzczOzgxOzg5Ozk3OzEwNTsxMTM7MTIxOzEyOXVcciwKKwlrYnM9XkgsIHJtc289XEVbdywgc2dyMD1cRVt3LCBzbXNvPVxFWzZ3LAorZHc0fGRlY3dyaXRlciBJViwKKwlPVGJzLCBhbSwgaGMsIG9zLAorCWNvbHMjMTMyLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosIGlzMj1cRWMsIGticz1eSCwKKwlrZjA9XEVPUCwga2YxPVxFT1EsIGtmMj1cRU9SLCBrZjM9XEVPUywKKworIyBUaGVzZSBhcmVuJ3Qgb2ZmaWNpYWwKK2xuMDN8ZGVjIGxuMDMgbGFzZXIgcHJpbnRlciwKKwloYywKKwljb2xzIzgwLCBsaW5lcyM2NiwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBoZD1cRUssIGh0PV5JLCBodT1cRUwsIGluZD1eSiwgbmVsPV5NXkosCisJcm1zbz1cRVsyMm0sIHJtdWw9XEVbMjRtLCBzZ3IwPVxFW20sIHNtc289XEVbMW0sCisJc211bD1cRVs0bSwKK2xuMDMtd3xkZWMgbG4wMyBsYXNlciBwcmludGVyIDEzMiBjb2xzLAorCWNvbHMjMTMyLAorCWJlbD1eRywgY3I9Xk0sIGN1ZDE9XkosIGh0PV5JLCBpbmQ9XkosIGticz1eSCwga2N1YjE9XkgsCisJa2N1ZDE9XkosIG5lbD1eTV5KLCB1c2U9bG4wMywKKworIyMjIyBEZWx0YSBEYXRhIChkZCkKKyMKKworIyBVbnRlc3RlZC4gVGhlIGN1cCBzZXF1ZW5jZSBpcyBoYWlyeSBlbm91Z2ggdGhhdCBpdCBwcm9iYWJseSBuZWVkcyB3b3JrLgorIyBUaGUgaWRlYSBpcyBjdHJsKE8pLCBkZChyb3cpLCBkZChjb2wpLCB3aGVyZSBkZCh4KSBpcyB4IC0gMiooeCUxNikgKyAnOScuCisjIFRoZXJlIGFyZSBCU0QtZGVyaXZlZCB0ZXJtY2FwIGVudHJpZXMgZmxvYXRpbmcgYXJvdW5kIGZvciB0aGlzIHB1cHB5CisjIHRoYXQgYXJlICpjZXJ0YWlubHkqIHdyb25nLgorZGVsdGF8ZGQ1MDAwfGRlbHRhIGRhdGEgNTAwMCwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBsaW5lcyMyNywKKwliZWw9XkcsIGNsZWFyPV5OUiwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eWSwKKwljdXA9XDAxNyVwMSVwMSV7MTZ9JW0lezJ9JSolLSV7NTd9JSslYyVwMiVwMiV7MTZ9JW0lezJ9JSolLSV7NTd9JSslYywKKwljdXUxPV5aLCBkY2gxPV5OViwgZWw9Xk5VLCBob21lPV5OUSwgaW5kPV5KLAorCisjIyMjIERpZ2l0YWwgRGF0YSBSZXNlYXJjaCAoZGRyKQorIworCisjIChkZHI6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQorZGRyfHJlYnVzMzE4MHxkZHIzMTgwfFJlYnVzL0REUiAzMTgwIHZ0MTAwIGVtdWxhdG9yLAorCU9UYnMsIGFtLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LCB2dCMzLAorCWJsaW5rPVxFWzVtJDwyLz4sIGJvbGQ9XEVbMW0kPDIvPiwKKwljbGVhcj1cRVtIXEVbMkokPDUwLz4sIGNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViMT1eSCwKKwljdWQxPV5KLCBjdWYxPVxFW0MkPDIvPiwgY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1Lz4sCisJY3V1MT1cRVtBJDwyLz4sIGVkPVxFW0okPDUwLz4sIGVsPVxFW0skPDMvPiwgaG9tZT1cRVtILAorCWh0PV5JLCBpbmQ9XEVEJDw1Lz4sIGlzMj1cRVsxOzI0clxFWzI0OzFILCBrYnM9XkgsCisJa2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFT1AsCisJa2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgcmM9XEU4LCByZXY9XEVbN20kPDIvPiwKKwlyZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgcmk9XEVNJDw1Lz4sIHJtYW09XEVbN2wsCisJcm1reD1cRVs/MWxcRT4sIHJtc289XEVbbSwgcm11bD1cRVttJDwyLz4sCisJcnMxPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2M9XEU3LAorCXNncjA9XEVbbSQ8Mi8+LCBzbWFtPVxFWzdsLCBzbWt4PVxFWz8xaFxFPSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtJDwyLz4sCisKKyMjIyMgRXZhbnMgJiBTdXRoZXJsYW5kCisjCisKKyMgSm9uIExlZWNoIDxsZWVjaEBjcy51bmMuZWR1PiB0ZWxscyB1czoKKyMgVGhlIHBzMzAwIHdhcyB0aGUgRXZhbnMgJiBTdXRoZXJsYW5kIFBpY3R1cmUgU3lzdGVtIDMwMCwgYSBoaWdoCisjIHBlcmZvcm1hbmNlIDNEIHZlY3RvciBncmFwaGljcyBzeXN0ZW0gd2l0aCBhIGJ1bmNoIG9mIHNwZWNpYWxpemVkIGhhcmR3YXJlLgorIyBBcHByb3hpbWF0ZSBkYXRlIG9mIHJlbGVhc2Ugd2FzIDE5ODIgKGVhcmx5IDgwcywgYW55d2F5KSwgYW5kIGl0IGhhZCBzZXZlcmFsCisjIGV2b2x1dGlvbnMgaW5jbHVkaW5nIChsaW1pdGVkKSBjb2xvciB2ZXJzaW9ucyBzdWNoIGFzIHRoZSBQUzMzMEMuIFBTMzAwcworIyB3ZXJlIGVmZmVjdGl2ZWx5IG9ic29sZXRlIGJ5IHRoZSBsYXRlIDgwcywgcmVwbGFjZWQgYnkgcmFzdGVyIGdyYXBoaWNzCisjIHN5c3RlbXMsIGFsdGhvdWdoIHNwZWNpYWxpemVkIGFwcGxpY2F0aW9ucyBsaWtlIG1vbGVjdWxhciBtb2RlbGxpbmcKKyMgaHVuZyBvbnRvIHRoZW0gZm9yIGEgd2hpbGUgbG9uZ2VyLiAgQUZBSUsgYWxsIEUmUyB2ZWN0b3IgZ3JhcGhpY3Mgc3lzdGVtcworIyBhcmUgb3V0IG9mIHByb2R1Y3Rpb24sIHRob3VnaCBvZiBjb3Vyc2UgRSZTIGlzIHZlcnkgbXVjaCBhbGl2ZSAoaW4gMTk5NikuCisjIChwczMwMDogY2hhbmdlZCAiOnB0QDoiIHRvICJpdEAiIC0tIGVzcikKKyMKK3BzMzAwfFBpY3R1cmUgU3lzdGVtIDMwMCwKKwl4dCwKKwlpdEAsCisJcm1zb0AsIHJtdWxALCBzbXNvQCwgc211bEAsIHVzZT12dDEwMCwKKworIyMjIyBHZW5lcmFsIEVsZWN0cmljIChnZSkKKyMKKwordGVybWluZXQxMjAwfHRlcm1pbmV0MzAwfHRuMTIwMHx0bjMwMHx0ZXJtaW5ldHxHRSB0ZXJtaW5ldCAxMjAwLAorCU9UYnMsIGhjLCBvcywKKwljb2xzIzEyMCwKKwliZWw9XkcsIGNyPV5NLCBjdWQxPV5KLCBpbmQ9XkosCisKKyMjIyMgSGVhdGhraXQvWmVuaXRoCisjCisKKyMgSGVyZSBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBIMTkgRElQIHN3aXRjaGVzOgorIworIyBTNDAxCisjIDAtMyA9IGJhdWQgcmF0ZSBhcyBmb2xsb3dzOgorIworIyAgICAgICAgIDMgICAgICAgMiAgICAgICAxICAgICAgIDAKKyMJLS0tCS0tLQktLS0JLS0tCisjICAgICAgICAgMCAgICAgICAwICAgICAgIDEgICAgICAgMSAgICAgICAzMDAgYmF1ZAorIyAgICAgICAgIDAgICAgICAgMSAgICAgICAwICAgICAgIDEgICAgICAgMTIwMCBiYXVkCisjICAgICAgICAgMSAgICAgICAwICAgICAgIDAgICAgICAgMCAgICAgICAyNDAwIGJhdWQKKyMgICAgICAgICAxICAgICAgIDAgICAgICAgMSAgICAgICAwICAgICAgIDQ4MDAgYmF1ZAorIyAgICAgICAgIDEgICAgICAgMSAgICAgICAwICAgICAgIDAgICAgICAgOTYwMCBiYXVkCisjICAgICAgICAgMSAgICAgICAxICAgICAgIDAgICAgICAgMSAgICAgICAxOS4ySyBiYXVkCisjCisjIDQgPSBwYXJpdHkgKDAgPSBubyBwYXJpdHkpCisjIDUgPSBldmVuIHBhcml0eSAoMCA9IG9kZCBwYXJpdHkpCisjIDYgPSBzdGljayBwYXJpdHkgKDAgPSBub3JtYWwgcGFyaXR5KQorIyA3ID0gZnVsbCBkdXBsZXggKDAgPSBoYWxmIGR1cGxleCkKKyMKKyMgUzQwMgorIyAwID0gYmxvY2sgY3Vyc29yICgwID0gdW5kZXJzY29yZSBjdXJzb3IpCisjIDEgPSBubyBrZXkgY2xpY2sgKDAgPSBrZXljbGljaykKKyMgMiA9IHdyYXAgYXQgZW5kIG9mIGxpbmUgKDAgPSBubyB3cmFwKQorIyAzID0gYXV0byBMRiBvbiBDUiAoMCA9IG5vIExGIG9uIENSKQorIyA0ID0gYXV0byBDUiBvbiBMRiAoMCA9IG5vIENSIG9uIExGKQorIyA1ID0gQU5TSSBtb2RlICgwID0gVlQ1MiBtb2RlKQorIyA2ID0ga2V5cGFkIHNoaWZ0ZWQgKDAgPSBrZXlwYWQgdW5zaGlmdGVkKQorIyA3ID0gNTBIeiByZWZyZXNoICgxID0gNjBIeiByZWZyZXNoKQorIworIyBGYWN0b3J5IERlZmF1bHQgc2V0dGluZ3MgYXJlIGFzIGZvbGxvd3M6CisjICAgICAgICAgIDcgNiA1IDQgMyAyIDEgMAorIyBTNDAxICAgICAxIDAgMCAwIDEgMSAwIDAKKyMgUzQwMiAgICAgMCAwIDAgMCAwIDAgMCAwCisjIChoMTk6IEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmc7CisjIGFsc28gYWRkZWQgZW1wdHkgPGFjc2M+IHRvIHN1cHByZXNzIGEgdGljIHdhcm5pbmcgLS0gZXNyKQoraDE5LWF8aDE5YXxoZWF0aC1hbnNpfGhlYXRoa2l0LWF8aGVhdGhraXQgaDE5IGFuc2kgbW9kZSwKKwlPVGJzLCBhbSwgbWlyLCBtc2dyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9LCBiZWw9XkcsIGNsZWFyPVxFWzJKLCBjbm9ybT1cRVs+NGwsIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XEVbMUIsIGN1ZjE9XEVbMUMsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXUxPVxFWzFBLCBjdnZpcz1cRVs+NGgsIGRjaDE9XEVbMVAsIGRsMT1cRVsxTSQ8MSo+LAorCWVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksIGlsMT1cRVsxTCQ8MSo+LCBpbmQ9XkosCisJaXMyPVxFPFxFWz4xOzI7Mzs0OzU7Njs3Ozg7OWxcRVttXEVbMTFtXEVbPzdoLAorCWticz1eSCwga2N1YjE9XEVbMUQsIGtjdWQxPVxFWzFCLCBrY3VmMT1cRVsxQywga2N1dTE9XEVbMUEsCisJa2YxPVxFT1MsIGtmMj1cRU9ULCBrZjM9XEVPVSwga2Y0PVxFT1YsIGtmNT1cRU9XLCBrZjY9XEVPUCwKKwlrZjc9XEVPUSwga2Y4PVxFT1IsIGtob21lPVxFW0gsIGxmNj1ibHVlLCBsZjc9cmVkLCBsZjg9d2hpdGUsCisJcmk9XEVNLCBybWFjcz1cRVsxMW0sIHJtYW09XEVbPzdsLCBybWlyPVxFWzRsLCBybXNvPVxFW20sCisJc21hY3M9XEVbMTBtLCBzbWFtPVxFWz83aCwgc21pcj1cRVs0aCwgc21zbz1cRVs3bSwKK2gxOS1ic3xoZWF0aGtpdCB3L2tleXBhZCBzaGlmdGVkLAorCXJta3g9XEV1LCBzbWt4PVxFdCwgdXNlPWgxOS1iLAoraDE5LXVzfGgxOXVzfGgxOS1zbXVsfGhlYXRoa2l0IHcva2V5cGFkIHNoaWZ0ZWQvdW5kZXJzY29yZSBjdXJzb3IsCisJcm1reD1cRXUsIHNta3g9XEV0LCB1c2U9aDE5LXUsCisjIChoMTk6IG1lcmdlZCBpbiA8aXA+IGZyb20gQlNESSBocDE5LWUgZW50cnk+OworIyBhbHNvIGFkZGVkIGVtcHR5IDxhY3NjPiB0byBzdXBwcmVzcyBhIHRpYyB3YXJuaW5nIC0tZXNyKQorIyBGcm9tOiBUaW0gUGllcmNlIDx0d3BAc2tlcHNpcy5jb20+LCAyMyBGZWIgMTk5OAorIyBUaW0gdGVsbHMgdXMgdGhhdDoKKyMgSSBoYXZlIGFuIG9sZCBaZW5pdGgtMTkgdGVybWluYWwgYXQgaG9tZSB0aGF0IHN0aWxsIGdldHMgYSBsb3Qgb2YgdXNlLgorIyBUaGlzIHRlcm1pbmFsIHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBmYW1vdXMgaW5zZXJ0LW1vZGUgcGFkZGluZyBsb3NzYWdlCisjIHRoYXQgaGFzIGJlZW4gYWNrbm93bGVkZ2VkIGZvciB0aGUgWjI5IHRlcm1pbmFsLiAgRW1hY3MgaXMgbmVhcmx5CisjIHVudXNhYmxlIG9uIHRoaXMgYm94LCBzaW5jZSBldmVuIGEgaGFsZi1zY3JvbGwgdXAgb3IgZG93biB0aGUgd2luZG93CisjIGNhdXNlcyBmbGFtaW5nIHRlcm1pbmFsIGRlYXRoLgorIworIyBPbiB0aGUgWjE5LCB0aGUgb25seSB3YXkgSSBoYXZlIGZvdW5kIGFyb3VuZCB0aGlzIHByb2JsZW0gaXMgdG8gcmVtb3ZlCisjIHRoZSA6YWw6IGFuZCA6ZGw6IGVudHJpZXMgZW50aXJlbHkuICBObyBhbW91bnQgb2YgZXh0cmEgcGFkZGluZyB3aWxsCisjIGhlbHAgKEkgaGF2ZSB0cmllZCB1cCB0byAyMDAwMCkuICBSZW1vdmluZyA8aWwxPVxFTCQ+IGFuZCA8ZGwxPVxFTSQ+CisjIG1ha2VzIEVtYWNzIGEgbGl0dGxlIHNsb3dlciwgYnV0IGl0IHJlbWFpbnMgaW4gdGhlIGxhbmQgb2YgdGhlIGxpdmluZy4KKyMgQmlnIHdpbi4KK2gxOXxoZWF0aHxoMTktYnxoZWF0aGtpdHxoZWF0aC0xOXx6MTl8emVuaXRofGhlYXRoa2l0IGgxOSwKKwlPVGJzLCBhbSwgZXNsb2ssIGhzLCBtaXIsIG1zZ3IsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1+XF54YHFhbmJrY2pkbWVsZmdnK2hhaS5rd3N1dHZ1dHZvenN7LCBiZWw9XkcsCisJY2xlYXI9XEVFLCBjbm9ybT1cRXk0LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVBLCBjdnZpcz1cRXg0LAorCWRjaDE9XEVOLCBlZD1cRUosIGVsPVxFSywgZnNsPVxFa1xFeTUsIGhvbWU9XEVILCBodD1eSSwgaW5kPV5KLAorCWlwPTwxLjUvPiwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2YxPVxFUywga2YyPVxFVCwga2YzPVxFVSwga2Y0PVxFViwga2Y1PVxFVywKKwlrZjY9XEVQLCBrZjc9XEVRLCBrZjg9XEVSLCBraG9tZT1cRUgsIGxmNj1ibHVlLCBsZjc9cmVkLAorCWxmOD13aGl0ZSwgcmk9XEVJLCBybWFjcz1cRUcsIHJtaXI9XEVPLCBybXNvPVxFcSwgc21hY3M9XEVGLAorCXNtaXI9XEVALCBzbXNvPVxFcCwgdHNsPVxFalxFeDVcRVk4JXAxJXszMn0lKyVjXEVvXEVvLAoraDE5LXV8aGVhdGhraXQgd2l0aCB1bmRlcnNjb3JlIGN1cnNvciwKKwljbm9ybUAsIGN2dmlzQCwgdXNlPWgxOS1iLAoraDE5LWd8aDE5Z3xoZWF0aGtpdCB3L2Jsb2NrIGN1cnNvciwKKwljbm9ybT1cRXg0LCBjdnZpc0AsIHVzZT1oMTktYiwKK2FsdG8taDE5fGFsdG9oMTl8YWx0b2hlYXRofGFsdG8taGVhdGh8YWx0byBlbXVsYXRpbmcgaGVhdGhraXQgaDE5LAorCWxpbmVzIzYwLAorCWRsMT1cRU0sIGlsMT1cRUwsIHVzZT1oMTksCisKKyMgVGhlIG1ham9yIHByb2JsZW0gd2l0aCB0aGUgWjI5IGlzIHRoYXQgaXQgcmVxdWlyZXMgbW9yZSBwYWRkaW5nIHRoYW4gdGhlIFoxOS4KKyMKKyMgVGhlIHByb2JsZW0gd2l0aCBkZWNsYXJpbmcgYW4gSDE5IHRvIGJlIHN5bm9ueW1vdXMgd2l0aCBhIFoyOSBpcyB0aGF0CisjIGl0IG5lZWRzIG1vcmUgcGFkZGluZy4gSXQgZXNwZWNpYWxseSBsb3NlcyBpZiBhIHByb2dyYW0gYXR0ZW1wdHMKKyMgdG8gcHV0IHRoZSBaMjkgaW50byBpbnNlcnQgbW9kZSBhbmQgaW5zZXJ0IHRleHQgYXQgOTYwMCBiYXVkLiBJdAorIyBldmVuIGxvc2VzIHdvcnNlIGlmIHRoZSBwcm9ncmFtIGF0dGVtcHRzIHRvIGluc2VydCB0YWJzIGF0IDk2MDAKKyMgYmF1ZC4gQWRkaW5nIHBhZGRpbmcgdG8gdGV4dCB0aGF0IGlzIGluc2VydGVkIGxvc2VzIGJlY2F1c2UgaW4KKyMgb3JkZXIgdG8gbWFrZSB0aGUgWjI5IG5vdCBkaWUsIG9uZSBtdXN0IGFkZCBzbyBtdWNoIHBhZGRpbmcgdGhhdAorIyB3aGVuZXZlciB0aGUgcHJvZ3JhbSB0cmllcyB0byB1c2UgaW5zZXJ0IG1vZGUsIHRoZSBlZmZlY3RpdmUKKyMgcmF0ZSBpcyBhYm91dCAxMTAgYmF1ZC4KKyMKKyMgV2hhdCBwcm9ncmFtIHdvdWxkIHdhbnQgdG8gcHV0IHRoZSB0ZXJtaW5hbCBpbnRvIGluc2VydCBtb2RlCisjIGFuZCBzaG92ZSBzdHVmZiBhdCBpdCBhdCA5NjAwIGJhdWQgeW91IGFzaz8KKyMKKyMgRW1hY3MuIEVtYWNzIHNlZW1zIHRvIHdhbnQgdG8gZG8gdGhlIG1hdGhlbWF0aWNhbGx5IG9wdGltYWwKKyMgdGhpbmcgaW4gZG9pbmcgYSByZWRpc3BsYXkgcmF0aGVyIHRoYW4gdGhlIHByYWN0aWNhbCB0aGluZy4KKyMgV2hlbiBpdCBpcyBhYm91dCB0byBvdXRwdXQgYSBsaW5lIG9uIHRvcCBvZiBhIGxpbmUgdGhhdCBpcworIyBhbHJlYWR5IG9uIHRoZSBzY3JlZW4sIGluc3RlYWQgb2YganVzdCBraWxsaW5nIHRvIHRoZSBlbmQgb2YKKyMgdGhlIGxpbmUgYW5kIG91dHB1dHRpbmcgdGhlIG5ldyBsaW5lLCBpdCBjb21wYXJlcyB0aGUgb2xkIGxpbmUKKyMgYW5kIHRoZSBuZXcgbGluZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBzaW1pbGFyaXRpZXMsIGl0CisjIGNvbnN0cnVjdHMgdGhlIG5ldyBsaW5lIGJ5IGRlbGV0aW5nIHRoZSB0ZXh0IG9uIHRoZSBvbGQgbGluZQorIyBvbiB0aGUgdGVybWluYWwgdGhhdCBpcyBhbHJlYWR5IHRoZXJlIGFuZCB0aGVuIGluc2VydGluZyBuZXcKKyMgdGV4dCBpbnRvIHRoZSBsaW5lIHRvIHRyYW5zZm9ybSBpdCBpbnRvIHRoZSBuZXcgbGluZSB0aGF0IGlzCisjIHRvIGJlIGRpc3BsYXllZC4gVGhlIFoyOSBkb2VzIG5vdCByZWFjdCBraW5kbHkgdG8gdGhpcy4KKyMKKyMgQnV0IGRvbid0IGNyeSBmb3IgdG9vIGxvbmcuLi4uIFRoZXJlIGlzIGEgc29sdXRpb24uIFlvdSBjYW4gbWFrZQorIyBhIHRlcm1jYXAgZW50cnkgZm9yIHRoZSBaMjkgdGhhdCBzYXlzIHRoZSBaMjkgaGFzIG5vIGluc2VydCBtb2RlLgorIyBUaGVuIEVtYWNzIGNhbm5vdCB1c2UgaXQuICJPaCwgbm8sIGJ1dCBub3cgaW5zZXJ0aW5nIGludG8gYQorIyBsaW5lIHdpbGwgYmUgcmVhbGx5IHNsb3ciLCB5b3Ugc2F5LiBXZWxsIHRoZXJlIGlzIGEgc29ydCBvZiBhCisjIHNvbHV0aW9uIHRvIHRoYXQgdG9vLiBUaGVyZSBpcyBhbiBpbnNlcnQgY2hhcmFjdGVyIG9wdGlvbiBvbgorIyB0aGUgWjI5IHRoYXQgd2lsbCBpbnNlcnQgb25lIGNoYXJhY3Rlci4gVW5mb3J0dW5hdGVseSwgaXQKKyMgaW52b2x2ZXMgcHV0dGluZyB0aGUgdGVybWluYWwgaW50byBhbnNpIG1vZGUsIGluc2VydGluZyB0aGUKKyMgY2hhcmFjdGVyLCBhbmQgY2hhbmdpbmcgaXQgYmFjayB0byBIMTkgbW9kZS4gQWxsIHRoaXMgdGFrZXMgMTIKKyMgY2hhcmFjdGVycy4gUHJldHR5IGV4cGVuc2l2ZSB0byBpbnNlcnQgb25lIGNoYXJhY3RlciwgYnV0IGl0CisjIHdvcmtzLiBFaXRoZXIgRW1hY3MgZG9lc24ndCB0cnkgdG8gdXNlIGl0cyBpbnNlcnRpbmcgaGFjayB3aGVuCisjIGl0J3Mgb25seSBnaXZlbiBhbiBpbnNlcnQgY2hhcmFjdGVyIGFiaWxpdHkgb3IgdGhlIFoyOSBkb2Vzbid0CisjIHJlcXVpcmUgcGFkZGluZyB3aXRoIHRoaXMgKHRoZSBmb3JtZXIgaXMgcHJvYmFibHkgbW9yZSBsaWtlbHksCisjIGJ1dCBJIGhhdmVuJ3QgY2hlY2tlZCBpdCBvdXQpLgorIyAoejI5OiBhZGRlZCBlbXB0eSA8YWNzYz4gdG8gc3VwcHJlc3MgYSB0aWMgd2FybmluZywgbWVyZ2VkIGluCisjIHN0YXR1cyBsaW5lIGNhcGFiaWxpdGllcyBmcm9tIEJSTCBlbnRyeSAtLWVzcikKK3oyOXx6ZW5pdGgyOXx6MjlifHplbml0aCB6MjliLAorCU9UYnMsIE9UcHQsIGFtLCBlc2xvaywgaHMsIG1pciwgbXNnciwKKwlPVGtuIzEwLCBjb2xzIzgwLCBsaW5lcyMyNCwKKwlPVGJjPVxFRCwgYWNzYz0sIGJlbD1eRywgY2J0PVxFLSwgY2xlYXI9XEVFJDwxND4sIGNub3JtPVxFeTQsCisJY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFJDwxPkEsCisJY3Z2aXM9XEV4NCwgZGNoMT1cRU4kPDAuMSo+LCBkbDE9XEVNJDwxLz4sIGRzbD1cRXkxLAorCWVkPVxFSiQ8MTQ+LCBlbD1cRUskPDE+LCBmc2w9XEVrXEV5NSwgaG9tZT1cRUgsIGh0PV5JLAorCWljaDE9XEU8XEVbMUBcRVs/MmgkPDE+LCBpbDE9XEVMJDwxLz4sIGluZD1cbiQ8Mj4sCisJaXMyPVxFPFxFWz8yaFxFdiwga2JzPV5ILCBrY3ViMT1cRUQsIGtjdWQxPVxFQiwga2N1ZjE9XEVDLAorCWtjdXUxPVxFQSwga2YwPVxFfiwga2YxPVxFUywga2YyPVxFVCwga2YzPVxFVSwga2Y0PVxFViwKKwlrZjU9XEVXLCBrZjY9XEVQLCBrZjc9XEVRLCBrZjg9XEVSLCBrZjk9XEUwSSwga2hvbWU9XEVILAorCWxmMD1ob21lLCByaT1cRUkkPDIvPiwgcm1hY3M9XEVGLCBybWlyPVxFTywgcm1zbz1cRXEsCisJcm11bD1cRXMwLCBzbWFjcz1cRUcsIHNtaXI9XEVALCBzbXNvPVxFcCwgc211bD1cRXM4LAorCXRzbD1cRWpcRXg1XEV4MVxFWTglKyBcRW8sCisjIHoyOSBpbiBhbnNpIG1vZGUuIEFzc3VtZXMgdGhhdCB0aGUgY3Vyc29yIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLCBhbmQgdGhhdAorIyB0aGUgd29ybGQgaXMgc3RhYmxlLiA8cnMxPiBjYXVzZXMgdGhlIHRlcm1pbmFsIHRvIGJlIHJlc2V0IHRvIHRoZSBzdGF0ZQorIyBpbmRpY2F0ZWQgYnkgdGhlIG5hbWUuIGtjIC0+IGtleSBjbGljaywgbmtjIC0+IG5vIGtleSBjbGljaywgdWMgLT4gdW5kZXJzY29yZQorIyBjdXJzb3IsIGJjIC0+IGJsb2NrIGN1cnNvci4KKyMgRnJvbTogTWlrZSBNZXllcnMKKyMgKHoyOWE6IHJlcGxhY2VkIG5vbmV4aXN0ZW50IDxpZj0vdXNyL3NoYXJlL3RhYnNldC96ZW5pdGgyOT4gYmVmYXVzZSA8aHRzPgorIyBsb29rcyB2dDEwMC1jb21wYXRpYmxlIC0tIGVzcikKK3oyOWF8ejI5YS1rYy1iY3xoMjlhLWtjLWJjfGhlYXRoL3plbml0aCAyOSBpbiBhbnNpIG1vZGUsCisJT1RicywgT1RwdCwgYW0sIGVzbG9rLCBocywgbWlyLCBtc2dyLAorCU9Ua24jMTAsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCU9UYmM9XEVELCBiZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzJtLCBjbGVhcj1cRVsySiwKKwljcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsIGN1dTE9XEVbQSwKKwlkY2g9XEVbJXAxJWRQLCBkY2gxPVxFWzFQLCBkaW09XEVbMm0sIGRsPVxFWyVwMSVkTSwKKwlkc2w9XEVbPjFsLCBlZD1cRVtKLCBlbD1cRVtLLCBmc2w9XEVbdVxFWz41bCwgaG9tZT1cRVtILAorCWh0PV5JLCBodHM9XEVILCBpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwgaWw9XEVbJXAxJWRMLAorCWluZD1cRUQsIGticz1eSCwga2Nscj1cRVtKLCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLAorCWtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtlZD1cRVtKLCBrZjA9XEVbfiwga2YxPVxFT1MsCisJa2YyPVxFT1QsIGtmMz1cRU9VLCBrZjQ9XEVPViwga2Y1PVxFT1csIGtmNj1cRU9QLCBrZjc9XEVPUSwKKwlrZjg9XEVPUiwga2Y5PVxFT1gsIGtob21lPVxFW0gsIGxmMD1oZWxwLCBtYzA9XEUjNywKKwluZWw9Xk1cRUQsIHJjPVxFW3IsIHJldj1cRVs3bSwgcmk9XEVNLCBybWN1cD1cRVs/N2gsCisJcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVxFPFxFWzE7MjRyXEVbMjQ7MUhcRVs/N2hcRVs+NGhcRVs+MTsyOzM7NTs2Ozc7ODs5bFxFW21cRVsxMW0sCisJc2M9XEVbcywgc2dyMD1cRVttLCBzbWN1cD1cRVs/N2wsIHNtc289XEVbNzsybSwgc211bD1cRVs0bSwKKwl0YmM9XEVbM2csIHRzbD1cRVtzXEVbPjU7MWhcRVsyNTslaSVkSFxFWzFLLAorejI5YS1rYy11Y3xoMjlhLWtjLXVjfHoyOSBhbnNpIG1vZGUgd2l0aCBrZXlja2ljayBhbmQgdW5kZXJzY29yZSBjdXJzb3IsCisJcnMxPVxFPFxFWzE7MjRyXEVbMjQ7MUhcRVs/N2hcRVs+MTsyOzM7NDs1OzY7Nzs4OzlsXEVbbVxFWzExbSwKKwl1c2U9ejI5YSwKK3oyOWEtbmtjLWJjfGgyOWEtbmtjLWJjfHoyOSBhbnNpIG1vZGUgd2l0aCBibG9jayBjdXJzb3IgYW5kIG5vIGtleWNsaWNrLAorCXJzMT1cRTxcRVsxOzI0clxFWzI0OzFIXEVbPzdoXEVbPjI7NGhcRVs+MTszOzU7Njs3Ozg7OWxcRVttXEVbMTFtLAorCXVzZT16MjlhLAorejI5YS1ua2MtdWN8aDI5YS1ua2MtdWN8ejI5IGFuc2kgbW9kZSB3aXRoIHVuZGVyc2NvcmUgY3Vyc29yIGFuZCBubyBrZXljbGljaywKKwlyczE9XEU8XEVbMTsyNHJcRVsyNDsxSFxFWz83aFxFWz4yaFxFWz4xOzM7NDs1OzY7Nzs4OzlsXEVbbVxFWzExbSwKKwl1c2U9ejI5YSwKKyMgRnJvbTogSmVmZiBCYXJ0aWcgPGplZmZiQGRvbnQuZG9pdC53aXNjLmVkdT4gMzEgTWFyIDE5OTUKK3ozOS1hfHozOWF8emVuaXRoMzktYXx6ZW5pdGgzOS1hbnNpfFplbml0aCAzOSBpbiBBTlNJIG1vZGUsCisJYW0sIGVzbG9rLCBocywgbWM1aSwgbWlyLCBtc2dyLCB4b24sCisJY29scyM4MCwgbGluZXMjMjQsCisJYWNzYz0wYWBgYWFmZmdnampra2xsbW1ubm9vcXFzc3R0dXV2dnd3eHh+fiwgYmVsPV5HLAorCWJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjYnQ9XEVbMVosIGNpdmlzPVxFWz41aCwKKwljbGVhcj1cRVsySlxFW0gsIGNub3JtPVxFWz41bCwgY3I9Xk0sCisJY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XEVbQiwgY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWRjaD1cRVslcDElZFAsIGRjaDE9XEVbMVAsIGRpbT1cRVsybSwgZGw9XEVbJXAxJWRNLAorCWRsMT1cRVsxTSwgZHNsPVxFWz4xbCwgZWQ9XEVbMEosIGVsPVxFWzBLLCBlbDE9XEVbMUssCisJZnNsPVxFW3UsIGhvbWU9XEVbSCwgaHQ9XkksIGh0cz1cRUgsIGlsPVxFWyVwMSVkTCwgaWwxPVxFWzFMLAorCWluZD1eSiwgaXMyPVxFPFxFWz4xOzM7NTs2OzdsXEVbMG1cRVsySiwga2ExPVxFT3csCisJa2EzPVxFT3UsIGtiMj1cRU95LCBrYnM9XkgsIGtjMT1cRU9xLCBrYzM9XEVPcywga2N1YjE9XEVbRCwKKwlrY3VkMT1cRVtCLCBrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZWQ9XEVbSiwga2YxPVxFT1MsCisJa2YyPVxFT1QsIGtmMz1cRU9VLCBrZjQ9XEVPViwga2Y1PVxFT1csIGtmNj1cRU9QLCBrZjc9XEVPUSwKKwlrZjg9XEVPUiwga2Y5PVxFT1gsIGtobHA9XEVbfiwga2hvbWU9XEVbSCwgbGw9XEVbMjQ7MUgsCisJbWMwPVxFWz8xOWhcRVtpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgcmM9XEVbdSwgcmV2PVxFWzdtLAorCXJtYWNzPVxFKEIsIHJtaXI9XEVbNGwsIHJta3g9XEVbPjdsLCBybXNvPVxFWzBtLAorCXJtdWw9XEVbMG0sIHJzMj1cRTxcRWNcMCwgc2M9XEVbcywgc2dyMD1cRVswbSwgc21hY3M9XEUoMCwKKwlzbWlyPVxFWzRoLCBzbWt4PVxFWz43aCwgc21zbz1cRVs3bSwgc211bD1cRVs0bSwgdGJjPVxFWzNnLAorCXRzbD1cRVtzXEVbPjFoXEVbMjU7JWklcDElZEgsCisKKyMgRnJvbTogQnJhZCBCcmFobXMgPEJyYWhtc0BVU0MtRUNMQz4KK3oxMDB8aDEwMHx6MTEwfHotMTAwfGgtMTAwfGhlYXRoL3plbml0aCB6LTEwMCBwYyB3aXRoIGNvbG9yIG1vbml0b3IsCisJY25vcm09XEV5NFxFbTcwLCBjdnZpcz1cRXg0XEVtNzEsIHVzZT16MTAwYncsCisjICh6MTAwYnc6IHJlbW92ZWQgb2Jzb2xldGUgIjprbiMxMDoiLCBhZGRlZCBlbXB0eSA8YWNzYz4gLS0gZXNyKQorejEwMGJ3fGgxMDBid3x6MTEwYnd8ei0xMDBid3xoLTEwMGJ3fGhlYXRoL3plbml0aCB6LTEwMCBwYywKKwlPVGJzLCBPVHB0LCBtaXIsIG1zZ3IsCisJT1RrbiMxMCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYWNzYz1+XF54YHFhbmJrY2pkbWVsZmdnK2hhaS5rd3N1dHZ1dHZvenN7LAorCWNsZWFyPVxFRSQ8NSovPiwgY25vcm09XEV5NCwgY3ViMT1eSCwgY3VkMT1cRUIsIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDEqLz4sIGN1dTE9XEVBLAorCWN2dmlzPVxFeDQsIGRjaDE9XEVOJDwxKi8+LCBkbDE9XEVNJDw1Ki8+LCBlZD1cRUosIGVsPVxFSywKKwlob21lPVxFSCwgaHQ9XkksIGlsMT1cRUwkPDUqLz4sIGticz1eSCwga2N1YjE9XEVELCBrY3VkMT1cRUIsCisJa2N1ZjE9XEVDLCBrY3V1MT1cRUEsIGtmMD1cRUosIGtmMT1cRVMsIGtmMj1cRVQsIGtmMz1cRVUsCisJa2Y0PVxFViwga2Y1PVxFVywga2Y2PVxFUCwga2Y3PVxFUSwga2Y4PVxFUiwga2Y5PVxFT0ksCisJa2hvbWU9XEVILCByaT1cRUksIHJtYWNzPVxFRywgcm1pcj1cRU8sIHJtc289XEVxLCBzbWFjcz1cRUYsCisJc21pcj1cRUAsIHNtc289XEVwLAorcDE5fGgxOS1iIHdpdGggaWwxL2RsMSwKKwlkbDE9XEVNJDwyKi8+LCBpbDE9XEVMJDwyKi8+LCB1c2U9aDE5LWIsCisjIEZyb206IDx1Y3NjYyFCLmZpYXRsdXhAdWNidmF4LmJlcmtlbGV5LmVkdT4KKyMgKHp0eDogcmVtb3ZlZCBkdXBsaWNhdGUgOnNyOiAtLSBlc3IpCit6dHh8enR4MTF8enQtMXxodHgxMXx6dHgtMS1hfHp0eC0xMCBvciAxMSwKKwlPVGJzLCBhbSwgZXNsb2ssIGhzLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVxFRSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRsMT1cRU0sCisJZHNsPVxFeTEsIGVkPVxFSiwgZWw9XEVLLCBmc2w9XEVrXEV5NSwgaG9tZT1cRUgsIGh0PV5JLAorCWlsMT1cRUwsIGlzMj1cRWpcRUhcRXFcRWtcRXZcRXkxXEV5NVxFR1xFeThcRXk5XEV5PiwKKwlrYnM9XkgsIGtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2YwPVxFUywKKwlrZjE9XEVCLCBrZjI9XEVVLCBrZjM9XEVWLCBrZjQ9XEVXLCBrZjU9XEVQLCBrZjY9XEVRLCBrZjc9XEVSLAorCXJpPVxFSSwgcm1zbz1cRXEsIHJtdWw9XEVxLCBzbXNvPVxFczUsIHNtdWw9XEVzMiwKKwl0c2w9XEVqXEV4NVxFeDFcRVk4JSsgXEVvLAorCisjIyMjIElNUyBJbnRlcm5hdGlvbmFsIChpbXMpCisjCisjIFRoZXJlIHdhcyBhIGNvbXBhbnkgY2FsbGVkIElNUyBJbnRlcm5hdGlvbmFsIGxvY2F0ZWQgaW4gQ2Fyc29uIENpdHksCisjIE5ldmFkYSwgdGhhdCBmbG91cmlzaGVkIGZyb20gdGhlIG1pZC03MHMgdG8gbWlkLTgwcy4gIFRoZXkgbWFkZSBTLTEwMAorIyBidXMvWjgwIGhhcmR3YXJlIGFuZCBhIGxpbmUgb2YgdGVybWluYWxzIGNhbGxlZCBVbHRpbWFzLgorIworCisjIEZyb206IEVyaWsgRmFpciA8ZmFpckB1Y2JhcnBhLmJlcmtlbGV5LmVkdT4gIFN1biBPY3QgMjcgMDc6MjE6MDUgMTk4NQoraW1zOTUwLWJ8YmFyZSBpbXM5NTAgbm8gaW5pdCBzdHJpbmcsCisJaXMyQCwgdXNlPWltczk1MCwKKyMgKGltczk1MDogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtvQDoiIC0tIGVzcikKK2ltczk1MHxpbXMgdGVsZXZpZGVvIDk1MCBlbXVsYXRpb24sCisJeGVubEAsCisJZmxhc2hALCBrYnNALCBrY3ViMUAsIGtjdWQxQCwga2N1ZjFALCBrY3V1MUAsIGtmMEAsIGtmMUAsIGtmMkAsIGtmM0AsCisJa2Y0QCwga2Y1QCwga2Y2QCwga2Y3QCwga2Y4QCwga2Y5QCwga2hvbWVALCB1c2U9dHZpOTUwLAorIyAoaW1zOTUwLXJ2OiByZW1vdmVkIG9ic29sZXRlICI6a29AOiIgLS0gZXNyKQoraW1zOTUwLXJ2fGltcyB0dmk5NTAgcmV2IHZpZGVvLAorCXhlbmxALAorCWZsYXNoQCwga2JzQCwga2N1YjFALCBrY3VkMUAsIGtjdWYxQCwga2N1dTFALCBrZjBALCBrZjFALCBrZjJALCBrZjNALAorCWtmNEAsIGtmNUAsIGtmNkAsIGtmN0AsIGtmOEAsIGtmOUAsIGtob21lQCwgdXNlPXR2aTk1MC1ydiwKK2ltcy1hbnNpfHVsdGltYTJ8dWx0aW1hSUl8SU1TIFVsdGltYSBJSSwKKwlPVGJzLCBhbSwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwljbGVhcj1cRVtIXEVbMkosIGN1YjE9XkgsIGN1ZDE9XEVELAorCWN1cD1cRVslaSVwMSUyZDslcDIlMmRILCBjdXUxPVxFTSwgZWQ9XEVbMEosIGVsPVxFWzBLLAorCWh0PV5JLCBpZj0vdXNyL3NoYXJlL3RhYnNldC92dDEwMCwKKwlpczI9XEVbbVxFWz4xNGxcRVs/MTs/NTsyMGxcRT5cRVsxbVxyLCBrY3ViMT1cRVtELAorCWtjdWQxPVxFW0IsIGtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtob21lPVxFW0gsIHJpPVxFTSwKKwlybXNvPVxFW21cRVsxbSwgcm11bD1cRVttXEVbMW0sIHNncjA9XEVbbSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLAorCisjIyMjIEludGVydGVjIERhdGEgU3lzdGVtcworIworIyBJIHRoaW5rIHRoaXMgY29tcGFueSBpcyBsb25nIGRlYWQgYXMgb2YgMTk5NS4gIFRoZXkgbWFkZSBhbiBlYXJseSBDUC9NCisjIG1pY3JvIGNhbGxlZCB0aGUgIkludGVydGVjIFN1cGVyYnJhaW4iIHRoYXQgd2FzIG1vZGVyYXRlbHkgcG9wdWxhciwKKyMgdGhlbiBzYW5rIG91dCBvZiBzaWdodC4KKyMKKworc3VwZXJicmFpbnxpbnRlcnRlYyBzdXBlcmJyYWluLAorCU9UYnMsIGFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlPVGJjPV5VLCBiZWw9XkcsIGNsZWFyPVwwMTQkPDUqPiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosCisJY3VmMT1eRiwgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYyQ8MjA+LCBjdXUxPV5LLAorCWVkPVxFfms8MTAqPiwgZWw9XEV+SyQ8MTU+LCBodD1eSSwgaW5kPV5KLCBrY3ViMT1eVSwKKwlrY3VkMT1eSiwga2N1ZjE9XkYsIGtjdXUxPV5LLCBybWN1cD1eTCwgc21jdXA9XkwsCisjIChpbnRlcnR1YmU6IGEgR291bGQgZW50cnkgdmlhIEJSTCBhc3NlcnRlZCBzbXVsPVxFMEAkPDIwMC8+LAorIyBybXVsPVxFMEEkPDIwMC8+OyBteSBndWVzcyBpcyB0aGUgaGlnaGxpZ2h0IGxldHRlciBpcyBiaXQtY29kZWQgbGlrZSBhbiBBRE0sCisjIGFuZCB0aGUgcmV2ZXJzZSBpcyBhY3R1YWxseSB0cnVlLiAgVHJ5IGl0LiAtLSBlc3IpCitpbnRlcnR1YmV8aW50ZXJ0ZWN8SW50ZXJ0ZWMgSW50ZXJUdWJlLAorCU9UYnMsIGFtLAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5GLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDUwPiwgY3V1MT1eWiwgaG9tZT1eQSwKKwlpbmQ9XkosIHJtc289XEUwQCwgc21zbz1cRTBQLAorIyBUaGUgaW50ZXJ0dWJlIDIgaGFzIHRoZSAiZnVsbCBkdXBsZXgiIHByb2JsZW0gbGlrZSB0aGUgdGVrIDQwMjU6IGlmIHlvdQorIyBhcmUgdHlwaW5nIGFuZCBhIGNvbW1hbmQgY29tZXMgaW4sIHRoZSBrZXlzdHJva2VzIHlvdSB0eXBlIGdldCBpbnRlcnNwZXJzZWQKKyMgd2l0aCB0aGUgY29tbWFuZCBhbmQgaXQgbWVzc2VzIHVwCitpbnRlcnR1YmUyfGludGVydGVjIGRhdGEgc3lzdGVtcyBpbnRlcnR1YmUgMiwKKwlPVGJzLAorCWN1cD1cMDE2JXAxJWNcMDIwJXAyJXsxMH0lLyV7MTZ9JSolcDIlezEwfSVtJSslYywKKwllbD1cRUssIGhwYT1cMDIwJXAxJXsxMH0lLyV7MTZ9JSolcDElezEwfSVtJSslYywKKwlsbD1eS15YXHIsIHZwYT1cMDEzJXAxJWMsIHVzZT1pbnRlcnR1YmUsCisKKyMjIyMgSXRoYWNhIEludGVyc3lzdGVtcworIworIyBUaGlzIGNvbXBhbnkgbWFkZSBTMTAwLWJ1cyBwZXJzb25hbCBjb21wdXRlcnMgbG9uZyBhZ28gaW4gdGhlIHByZS1JQk0tUEMKKyMgcGFzdC4gIFRoZXkgdXNlZCB0byBiZSByZWFjaGFibGUgYXQ6CisjCisjCUl0aGFjYSBJbnRlcnN5c3RlbXMKKyMJMTY1MCBIYW5zaGF3IFJvYWQKKyMJSXRoYWNhLCBOZXcgWW9yayAxNDg1MAorIworIyBIb3dldmVyLCB0aGUgb3V0Zml0IHdlbnQgYmFua3J1cHQgeWVhcnMgYWdvLgorIworCisjIFRoZSBHcmFwaG9zIElJSSB3YXMgYSBjb2xvciBncmFwaGljcyB0ZXJtaW5hbCBmcm9tIEl0aGFjYSBJbnRlcnN5c3RlbXMuCisjIFRoZXNlIGVudHJpZXMgd2VyZSB3cml0dGVuIChvcmlnaW5hbGx5IGluIHRlcm1jYXAgc3ludGF4KSBieSBCcmlhbiBZYW5kZWxsCisjIDx5YW5kZWxsQHN0YXQud2lzYy5lZHU+IGFuZCBNaWtlIE1leWVyIDxtaWtlbUBzdGF0Lndpc2MuZWR1PiBhdCB0aGUKKyMgVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4uCisKKyMgKGdyYXBob3M6IHJlbW92ZWQgb2Jzb2xldGUgYW5kIHN5bnRhY3RpY2FsbHkgaW5jb3JyZWN0IDprbj00OiwKKyMgcmVtb3ZlZCA8aWY9L3Vzci9zaGFyZS90YWJzZXQvaW5pdC5ncmFwaG9zPiBhbmQKKyMgPHJmPS91c3Ivc2hhcmUvdGFic2V0L2luaXQuZ3JhcGhvcz4gbm8gc3VjaCBmaWxlICYgbm8gPGh0cz4gLS0gZXNyKQorZ3JhcGhvc3xncmFwaG9zIElJSSwKKwlhbSwgbWlyLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVxFW0hcRVsySiwgY25vcm09XEV6NTY7MjswOzB6XEV6NzN6XEV6NDsxOzF6LAorCWNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILCBjdWQ9XEVbJXAxJWRCLCBjdWQxPVxFW0IsCisJY3VmPVxFWyVwMSVkQywgY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsCisJY3V1PVxFWyVwMSVkQSwgY3V1MT1cRVtBLAorCWN2dmlzPVxFejQ7MjsxelxFejU2OzI7ODA7MjR6LCBkY2gxPVxFW1AsIGRsPVxFWyVwMSVkTSwKKwlkbDE9XEVbTSwgZWQ9XEVbSiwgZWw9XEVbSywgaG9tZT1cRVtILCBodD1eSSwgaWw9XEVbJXAxJWRMLAorCWlsMT1cRVtMLCBpbmQ9XEVELCBrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFT1AsIGtmMj1cRU9RLCBrZjM9XEVPUiwKKwlrZjQ9XEVPUywga2hvbWU9XEVbSCwgbmVsPV5NXEVELCByYz1cRTgsIHJpPVxFTSwgcm1kYz1cRVs0bCwKKwlybWlyPVxFWzRsLCBybXNvPVxFW20sIHNjPVxFNywgc2dyMD1cRVttLCBzbWRjPVxFWzRoLAorCXNtaXI9XEVbNGgsIHNtc289XEVbN20sCitncmFwaG9zLTMwfGdyYXBob3MgSUlJIHdpdGggMzAgbGluZXMsCisJbGluZXMjMzAsCisJY3Z2aXM9XEV6NDsyOzF6XEV6NTY7Mjs4MDszMHosIHVzZT1ncmFwaG9zLAorCisjIyMjIE1vZGdyYXBoCisjCisjIFRoZXNlIHBlb3BsZSB1c2VkIHRvIGJlIHJlYWNoYWJsZSBhdDoKKyMKKyMJTW9kZ3JhcGgsIEluYworIwkxMzkzIE1haW4gU3RyZWV0LAorIwlXYWx0aGFtLCBNQSAwMjE1NAorIwlWb3g6ICg2MTcpLTg5MC01Nzk2LgorIworIyBIb3dldmVyLCBpZiB5b3UgY2FsbCB0aGF0IG51bWJlciB0b2RheSB5b3UnbGwgZ2V0IGFuIGluc3VyYW5jZSBjb21wYW55LgorIyBJIGhhdmUgbWFpbCBmcm9tICJNaWNoYWVsIEJlcm1hbiwgVi5QLiBTYWxlcywgTW9kZ3JhcGgiIGRhdGVkCisjIDI2IEZlYiAxOTk3IHRoYXQgc2F5czoKKyMKKyMgTW9kZ3JhcGggR1gtMTAwMCwgcmVwbGFjZWQgYnkgR1gtMjAwMC4gIEJvdGggYXJlIG91dCBvZiBwcm9kdWN0aW9uLCBoYXZlIGJlZW4KKyMgZm9yIH43IHllYXJzLiAgTW9kZ3JhcGggc3RpbGwgaW4gYnVzaW5lc3MuICBQcm9kdWN0cyBhcmUgcnVnZ2VkIGxhcHRvcCBhbmQKKyMgcG9ydGFibGUgUEMncyBhbmQgc3BlY2lhbGl6ZWQgQ1JUIGFuZCBMQ0QgbW9uaXRvcnMgKHJ1Z2dlZCwgcmFjay1tb3VudAorIyBwYW5lbC1tb3VudCBldGMpLiAgSSBjYW4gYmUgZW1haWxlZCBhdCBzb25mb3VyQGFvbC5jb20KKyMKKyMgUGV0ZXIgRC4gU21pdGggPHBkc21pdGhAbmJibi5jb20+IG5vdGVzIHRoYXQgaGlzIG1vZGdyYXBoIG1hbnVhbCB3YXMKKyMgZGF0ZWQgMTk4NC4gIEFjY29yZGluZyB0byB0aGUgbWFudWFsLCBpdCBmZWF0dXJlZCBUZWsgNDAxMC80MDE0CisjIGdyYXBoaWNzIGFuZCBERUMgVlQxMDAvVlQ1MiArIEFETS0zQSBlbXVsYXRpb24gd2l0aCBhIFZUMjIwLXN0eWxlIGtleWJvYXJkLgorIworCittb2RncmFwaHxtb2QyNHxtb2RncmFwaCB0ZXJtaW5hbCBlbXVsYXRpbmcgdnQxMDAsCisJeGVubEAsCisJY29scyM4MCwgbGluZXMjMjQsCisJY3Z2aXM9XEVcXjk7MHNcRVxeNzsxcywKKwlpczI9XEVcXjk7MHNcRVxeNzsxc1xFWzNnXEVcXjExOzlzXEVcXjExOzE3c1xFXF4xMTsyNXNcRVxeMTE7MzNzXEVcXjExOzQxc1xFXF4xMTs0OXNcRVxeMTE7NTdzXEVcXjExOzY1c1xFXF4xMTs3M3NcRVxeMTE7ODFzXEVcXjExOzg5cywKKwlyZkAsIHJpPVxFTVxFW0skPDUvPiwgdXNlPXZ0MTAwLAorIyBUaGUgR1gtMTAwMCBtYW51YWwgaXMgZGF0ZWQgMTk4NC4gIFRoaXMgbG9va3MgcmF0aGVyIGxpa2UgYSBWVC01Mi4KK21vZGdyYXBoMnxtb2RncmFwaCBneC0xMDAwIDgweDI0IHdpdGgga2V5cGFkIG5vdCBlbmFibGVkLAorCWFtLCBkYSwgZGIsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XEVIXEVKJDw1MC8+LCBjdWIxPV5ILCBjdWYxPVxFQyQ8Mi8+LAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDUvPiwgY3V1MT1cRUEkPDIvPiwKKwllZD1cRUokPDUwLz4sIGVsPVxFSyQ8My8+LCBodD1eSSwKKwlpczI9XEU8XEVcXjU7MnNcRVxeNzsxc1xFWzNnXEVcXjExOzlzXEVcXjExOzE3c1xFXF4xMTsyNXNcRVxeMTE7MzNzXEVcXjExOzQxc1xFXF4xMTs0OXNcRVxeMTE7NTdzXEVcXjExOzY1c1xFXF4xMTs3M3NcRVxeMTE7ODFzXEVcXjExOzg5c1xFXF4xMjswc1xFXF4xNDsyc1xFXF4xNTs5c1xFXF4yNTsxc1xFXF45OzFzXEVcXjI3OzEsCisJcmk9XEVJJDw1Lz4sCisjCisjIE1vZGdyYXBoIGZyb20gTmFuY3kgTC4gQ2lkZXIgPG5hbmN5Y0BicmwtdGJkPgorIyBCVUcgTk9URSBmcm9tIEJhcmJhcmEgRS4gUmluZ2VycyA8YmFyYkBicmwtdGJkPjoKKyMgSWYgd2Ugc2V0IFRFUk09dnQxMDAsIGFuZCBzZXQgdGhlIE1vZGdyYXBoIHNjcmVlbiB0byAyNCBsaW5lcywgc2V0dGluZyBhCisjIG1hcmsgYW5kIHVzaW5nIGRlbGV0ZS10by1raWxsYnVmZmVyIHdvcmsgY29ycmVjdGx5LiAgSG93ZXZlciwgd2Ugd291bGQKKyMgbGlrZSBub3JtYWwgbW9kZSBvZiBvcGVyYXRpb24gdG8gYmUgdXNpbmcgYSBNb2RncmFwaCB3aXRoIDQ4IGxpbmUgc2V0dGluZy4KKyMgSWYgd2Ugc2V0IFRFUk09bW9kICh3aGljaCBpcyBhIHZhbGlkIGVudHJ5IGluIHRlcm1jYXAgd2l0aCA0OCBsaW5lcykKKyMgdGhlIHNldHRpbmcgbWFyayBhbmQgZGVsZXRlLXRvLWtpbGxidWZmZXIgcmVzdWx0cyBpbiB0aGUgZGVsZXRpb24gb2Ygb25seQorIyB0aGUgbGluZSB0aGUgbWFyayBpcyBzZXQgb24uCisjIFdlJ3ZlIGRpc2NvdmVyZWQgdGhhdCB0aGUgZGVsZXRlLXRvLWtpbGxidWZmZXIgd29ya3MgY29ycmVjdGx5CisjIHdpdGggVEVSTT1tb2QgYW5kIHNjcmVlbiBzZXQgdG8gODB4NDggYnV0IGl0J3Mgbm90IG9idmlvdXMuICBPbmx5CisjIHRoZSBmaXJzdCBsaW5lIGRpc2FwcGVhcnMgYnV0IGEgY3RybC1sIHNob3dzIHRoYXQgaXQgZGlkIHdvcmsKKyMgY29ycmVjdGx5LgorbW9kZ3JhcGg0OHxtb2R8TW9kZ3JhcGggdy80OCBsaW5lcywKKwlPVGJzLCBPVHB0LCBhbSwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyM0OCwgdnQjMywKKwlPVG5sPV5KLCBiZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVs7SFxFWzJKLAorCWNyPV5NLCBjc3I9XEVbJWklcDElZDslcDIlZHIsIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQywKKwljdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZWQ9XEVbSiwgZWw9XEVbSywKKwlmbGFzaD1cRVs/NWhcRVswcVxFWzE7MnFcRVs/NWxcRVswcVxFWzQ7M3EsCisJaG9tZT1cRVtILCBodD1eSSwgaXMyPVxFPFxFWzE7NDhyXEVbMHFcRVszOzRxXEU9XEVbPzFoLAorCWticz1eSCwga2N1YjE9XEVPRCwga2N1ZDE9XEVPQiwga2N1ZjE9XEVPQywga2N1dTE9XEVPQSwKKwlrZjE9XEVPUCwga2YyPVxFT1EsIGtmMz1cRU9SLCBrZjQ9XEVPUywgcmM9XEU4LCByZXY9XEVbN20sCisJcmk9XEVNLCBybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVxFPVxFWzBxXEU+LCBzYz1cRTcsIHNncjA9XEVbbSwgc21reD1cRVs/MWhcRT0sCisJc21zbz1cRVs3bSwgc211bD1cRVs0bSwKKworIyMjIyBNb3Jyb3cgRGVzaWducworIworIyBUaGlzIHdhcyBHZW9yZ2UgTW9ycm93J3MgY29tcGFueS4gIFRoZXkgc3RhcnRlZCBpbiB0aGUgbGF0ZSAxOTcwcyBtYWtpbmcKKyMgUzEwMC1idXMgbWFjaGluZXMuICBUaGV5IHVzZWQgdG8gYmUgcmVhY2hhYmxlIGF0OgorIworIyAgICAgICAgTW9ycm93CisjICAgICAgICA2MDAgTWNDb3JtaWNrIFN0LgorIyAgICAgICAgU2FuIExlYW5kcm8sIENBIDk0NTc3CisjCisjIGJ1dCB0aGV5J3JlIGxvbmcgZ29uZSBub3cgKDE5OTUpLgorIworCisjIFRoZSBtdDcwIHRlcm1pbmFsIHdhcyBzaGlwcGVkIHdpdGggdGhlIE1vcnJvdyBNRC0zIG1pY3JvY29tcHV0ZXIuCisjIEplZmYncyBzcGVjaW1lbiB3YXMgZGF0ZWQgSnVuZSAxOTg0LgorIyBGcm9tOiBKZWZmIFdpZWxhbmQgPHdpZWxhbmRAYWNuLnB1cmR1ZS5lZHU+IDI0IEZlYiAxOTk1CittdDcwfG10LTcwfE1vcnJvdyBNRC03MDsgbmF0aXZlIE1vcnJvdyBtb2RlLAorCWFtLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPSt6XCx7LXgueU9pYHxqR2tGbEVtRG5IcUp0THVLdk53TXhJLCBiZWw9XkcsCisJY2J0PVxFSSwgY2l2aXM9XEUiMCwgY2xlYXI9XlosIGNub3JtPVxFIjIsIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XkosIGN1ZjE9XkwsIGN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMkPDE+LAorCWN1dTE9XkssIGRjaDE9XEVXLCBkaW09XEVHMiwgZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQkPDEwPiwKKwlmbGFzaD1cRUsxJDwyMDA+XEVLMCwgaG9tZT1eXiwgaHQ9XkksIGljaDE9XEVRLCBpbDE9XEVFLAorCWluZD1eSiwgaW52aXNALCBpczE9XEUiMlxFRzBcRV0sIGticz1eSCwga2NidD1eQV5aXHIsCisJa2Nscj1eQW5cciwga2N1YjE9XkFMXHIsIGtjdWQxPV5BS1xyLCBrY3VmMT1eQU1cciwKKwlrY3V1MT1eQUpcciwga2RjaDE9XDE3Nywga2YxPV5BQFxyLCBrZjEwPV5BSVxyLCBrZjExPV5BYFxyLAorCWtmMTI9XkFhXHIsIGtmMTM9XkFiXHIsIGtmMTQ9XkFjXHIsIGtmMTU9XkFkXHIsIGtmMTY9XkFlXHIsCisJa2YxNz1eQWZcciwga2YxOD1eQWdcciwga2YxOT1eQWhcciwga2YyPV5BQVxyLCBrZjIwPV5BaVxyLAorCWtmMz1eQUJcciwga2Y0PV5BQ1xyLCBrZjU9XkFEXHIsIGtmNj1eQUVcciwga2Y3PV5BRlxyLAorCWtmOD1eQUdcciwga2Y5PV5BSFxyLCBraGxwPV5BT1xyLCBraG9tZT1eQU5cciwgbmVsPV5fLAorCXJtYWNzPVxFJSUsIHJtY3VwPSwgc21hY3M9XEUkLCBzbWN1cD1cRSIyXEVHMFxFXSwKKwlzbXVsPVxFRzEsIHRiYz1cRTAsIHVzZT1hZG0rc2dyLAorCisjIyMjIE1vdG9yb2xhCisjCisKKyMgTW90b3JvbGEgRVhPUnRlcm0gMTU1CWZyb20ge2RlY3ZheCwgaWhucDR9IXBoaWxhYnMhc2JjcyFtZWdhZCFzZXRoIHZpYSBCUkwKKyMgKFNldGggSCBaaXJpbikKK2V4MTU1fE1vdG9yb2xhIEV4b3J0ZXJtIDE1NSwKKwlPVGJzLCBhbSwgYncsCisJT1RrbiM1LCBPVHVnIzEsIGNvbHMjODAsIGxpbmVzIzI0LAorCWNidD1cRVssIGNsZWFyPVxFWCwgY3VkMT1cRUIsIGN1ZjE9XEVELAorCWN1cD1cRUUlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGVkPVxFVCwgZWw9XEVVLAorCWhvbWU9XEVALCBodD1cRVosIGticz1eSCwga2NidD1cRVssIGtjbHI9XEVYLCBrY3ViMT1eSCwKKwlrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLCBrZWQ9XEVULCBrZWw9XEVVLCBraG9tZT1cRUAsCisJcm1zbz1cRWNcRUQsIHJtdWw9XEVnXEVELCBzbXNvPVxFYlxFRCwgc211bD1cRWZcRUQsCisKKyMjIyMgT21yb24KKyMKKyMgVGhpcyBjb21wYW55IGlzIHN0aWxsIGFyb3VuZCBpbiAxOTk1LCBtYW51ZmFjdHVyaW5nIHBvaW50LW9mLXNhbGUgc3lzdGVtcy4KKworb21yb258T21yb24gODAyNUFHLAorCU9UYnMsIGFtLCBkYSwgZGIsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywgY3V1MT1cRUEsCisJY3Z2aXM9XEVOLCBkY2gxPVxFUCwgZGwxPVxFTSwgZWQ9XEVSLCBlbD1cRUssIGhvbWU9XEVILAorCWlsMT1cRUwsIGluZD1cRVMsIHJpPVxFVCwgcm1zbz1cRTQsIHNtc289XEVmLAorCisjIyMjIFJhbXRlaworIworIyBSYW10ZWsgd2FzIGEgdmVuZG9yIG9mIGhpZ2gtZW5kIGdyYXBoaWNzIHRlcm1pbmFscyBhcm91bmQgMTk3OS0xOTgzOyB0aGV5CisjIHdlcmUgY29tcGV0aXRpb24gZm9yIHRoaW5ncyBsaWtlIHRoZSBUZWt0cm9uaWNzIDQwMjUuCisjCisKKyMgUmFtdGVrIDYyMjEgZnJvbSBCUkwsIHByb2JhYmx5IGJ5IERvdWcgR3d5bgorIyBUaGUgZm9sbG93aW5nIFNFVC1VUCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJVU5ERVJMSU5FX0NVUlNPUglBTlNJX01PREUJQVVUT19YT04vWE9GRl9PTgorIwlORVdMSU5FX09GRgkJODBfQ09MVU1OUworIyBPdGhlciBTRVQtVVAgbW9kZXMgbWF5IGJlIHNldCBmb3Igb3BlcmF0b3IgY29udmVuaWVuY2Ugb3IgY29tbXVuaWNhdGlvbgorIyByZXF1aXJlbWVudHM7IEkgcmVjb21tZW5kCisjCVNNT09USF9TQ1JPTEwJQVVUT19SRVBFQVRfT04JM18jX1NISUZURUQJV1JBUF9BUk9VTkRfT04KKyMgSGFyZHdhcmUgdGFicyBhcmUgYXNzdW1lZCB0byBiZSBldmVyeSA4IGNvbHVtbnM7IHRoZXkgY2FuIGJlIHNldCB1cCBieSB0aGUKKyMgInJlc2V0IiwgInRzZXQiLCBvciAidGFicyIgdXRpbGl0aWVzICh1c2UgcnQ2MjIxLXcsIDE2MCBjb2x1bW5zLCBmb3IgdGhpcykuCisjIE5vdGUgdGhhdCB0aGUgQ29udHJvbC1FIGtleSBpcyB1c2VsZXNzIG9uIHRoaXMgYnJhaW4tZGFtYWdlZCB0ZXJtaW5hbC4gIE5vCisjIGRlbGF5cyBhcmUgc3BlY2lmaWVkOyB1c2UgInN0dHkgaXhvbiAtaXhhbnkiIHRvIGVuYWJsZSBEQzMvREMxIGZsb3cgY29udHJvbCEKK3J0NjIyMXxSYW10ZWsgNjIyMSA4MHgyNCwKKwlPVGJzLCBPVHB0LCBtc2dyLCB4b24sCisJT1RrbiM0LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywKKwlhY3NjPSwgYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2l2aXM9XEVbPjVsLAorCWNsZWFyPVxFWzE7MUhcRVtKLCBjbm9ybT1cRVs+NWhcRVs+OWgsIGNyPV5NLAorCWNzcj1cRVslaSVwMSVkOyVwMiVkciwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwKKwljdWQ9XEVbJXAxJWRCLCBjdWQxPV5LLCBjdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXU9XEVbJXAxJWRBLCBjdXUxPVxFTSwKKwljdnZpcz1cRVs+N2hcRVs+OWwsIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbMTsxSCwgaHQ9XkksCisJaHRzPVxFSCwgaW5kPV5KLCBpczI9XEUpMCwga2JzPV5ILCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMD1cRU9QLCBrZjE9XEVPUSwga2YyPVxFT1IsCisJa2YzPVxFT1MsIGxmMD1QRjEsIGxmMT1QRjIsIGxmMj1QRjMsIGxmMz1QRjQsIGxsPVxFWzI0OzFILAorCW5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCByaT1cRU0sIHJtYWNzPV5PLCBybWt4PVxFPiwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwKKwlyczE9XEVbMXdcRVs+MzdtXEVbPjM5bVxFWzF2XEVbMjBsXEVbPzNsXEVbPzZsXEVbPjVoXEVbPjZoXEVbPjdoXEVbPjhsXEVbPjloXEVbPjEwbFxFWzE7MjRyXEVbbVxFW3FcRShCXDAxN1xFKTBcRSM1XEU+LAorCXNjPVxFNywgc2dyMD1cRVttLCBzbWFjcz1eTiwgc21reD1cRT0sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLAorIyBbVE8gRE86IENoZWNrIG91dDogc2hvcnQgZm9ybXMgb2YgaG8vY2wgYW5kIGxsOyByZXNldCAoXEVjKV0uCitydDYyMjEtd3xSYW10ZWsgNjIyMSAxNjB4NDgsCisJY29scyMxNjAsIGxpbmVzIzQ4LAorCWxsPVxFWzQ4OzFILCB1c2U9cnQ2MjIxLAorCisjIyMjIFJDQQorIworCisjIFJDQSBWUDMzMDEgb3IgVlAzNTAxCityY2F8cmNhIHZwMzMwMS92cDM1MDEsCisJT1RicywKKwljb2xzIzQwLCBsaW5lcyMyNCwKKwljbGVhcj1eTCwgY3VmMT1eVSwgY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPV5LLCBob21lPV5aLCBybXNvPVxFXEVTMCwgc21zbz1cRVxFUzEsCisKKworIyMjIyBTZWxhbmFyCisjCisKKyMgU2VsYW5hciBIaVJFWi0xMDAgZnJvbSBCUkwsIHByb2JhYmx5IGJ5IERvdWcgR3d5bgorIyBUaGUgZm9sbG93aW5nIFNFVC1VUCBtb2RlcyBhcmUgYXNzdW1lZCBmb3Igbm9ybWFsIG9wZXJhdGlvbjoKKyMJU0VUX0RFRkFVTFRfVEFCUwk0OF9MSU5FUwkJODBfQ09MVU1OUworIwlPTkxJTkUJCQlBTlNJCQkJQ1VSU09SX1ZJU0lCTEUKKyMJVlQxMDJfQVVUT19XUkFQX09OCVZUMTAyX05FV0xJTkVfT0ZGCVZUMTAyX01PTklUT1JfTU9ERV9PRkYKKyMJTE9DQUxfRUNIT19PRkYJCVVTX0NIQVJfU0VUCQlXUFNfVEVSTUlOQUxfRElTQUJMRUQKKyMJQ1BVX0FVVE9fWE9OL1hPRkZfRU5BQkxFRAkJCVBSSU5UX0ZVTExfU0NSRUVOCisjIEZvciB1c2Ugd2l0aCBncmFwaGljcyBzb2Z0d2FyZSwgYWxsIGdyYXBoaWNzIG1vZGVzIHNob3VsZCBiZSBzZXQgdG8gZmFjdG9yeQorIyBkZWZhdWx0LiAgT3RoZXIgU0VULVVQIG1vZGVzIG1heSBiZSBzZXQgZm9yIG9wZXJhdG9yIGNvbnZlbmllbmNlIG9yCisjIGNvbW11bmljYXRpb24gcmVxdWlyZW1lbnRzLiAgTm8gZGVsYXlzIGFyZSBzcGVjaWZpZWQ7IHVzZSAic3R0eSBpeG9uIC1peGFueSIKKyMgdG8gZW5hYmxlIERDMy9EQzEgZmxvdyBjb250cm9sIQorIyBJIGNvbW1lbnRlZCBvdXQgdGhlIHNjcm9sbGluZyBjYXBhYmlsaXRpZXMgc2luY2UgdGhleSBhcmUgdG9vIHNsb3cuCitoaXJlejEwMHxTZWxhbmFyIEhpUkVaLTEwMCwKKwlPVGJzLCBPVHB0LCBtaXIsIG1zZ3IsIHhvbiwKKwlPVGtuIzQsIGNvbHMjODAsIGl0IzgsIGxpbmVzIzQ4LCB2dCMzLAorCWFjc2M9LCBiZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwKKwljcj1eTSwgY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFTSwgZGNoPVxFWyVwMSVkUCwgZGNoMT1cRVtQLAorCWRsPVxFWyVwMSVkTSwgZGwxPVxFW00sIGVkPVxFW0osIGVsPVxFW0ssIGhvbWU9XEVbSCwgaHQ9XkksCisJaHRzPVxFSCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaXMyPVxFPFxFKTAsIGticz1eSCwKKwlrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLCBrY3VmMT1cRU9DLCBrY3V1MT1cRU9BLCBrZjA9XEVPUCwKKwlrZjE9XEVPUSwga2YyPVxFT1IsIGtmMz1cRU9TLCBsZjA9UEYxLCBsZjE9UEYyLCBsZjI9UEYzLAorCWxmMz1QRjQsIGxsPVxFWzQ4SCwgbWMwPVxFW2ksIG1jND1cRVs0aVxFWz80aSwKKwltYzU9XEVbPzVpXEVbNWksIG5lbD1cRUUsIHJjPVxFOCwgcmV2PVxFWzdtLCBybWFjcz1eTywKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttLCBybXVsPVxFW20sCisJcnMxPVwwMzBcRTJcRTxcRVs0aVxFWz80aVxFWzEyaFxFWzI7NDsyMGxcRVs/MDs3aFxFWz8xOzM7NjsxOWxcRVtyXEVbbVxFKEJcMDE3XEUpMFxFPiwKKwlzYz1cRTcsIHNncjA9XEVbbSwgc21hY3M9Xk4sIHNta3g9XEVbPzFoXEU9LCBzbXNvPVxFWzdtLAorCXNtdWw9XEVbNG0sIHRiYz1cRVszZywKK2hpcmV6MTAwLXd8U2VsYW5hciBIaVJFWi0xMDAgaW4gMTMyLWNvbHVtbiBtb2RlLAorCWNvbHMjMTMyLCB1c2U9aGlyZXoxMDAsCisKKyMjIyMgU2lnbmV0aWNzCisjCisKKyMgRnJvbSBVbml2ZXJzaXR5IG9mIFdpc2NvbnNpbgordnNjfFNpZ25ldGljcyBWc2MgVmlkZW8gZHJpdmVyIGJ5IFJNQywKKwlhbSwgbXNnciwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNiwKKwljbGVhcj1cRVs7SFxFWzJKJDw1MC8+LCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBlbD1cRVtLLCBob21lPVxFW0gsCisJaHQ9XkksIGluZD1eSiwga2JzPV5ILCBrY3ViMT1eSCwga2N1ZDE9XkosIG5lbD1eTV5KLCByZXY9Xl9ccywKKwlybXNvPV5fISwgcm11bD1eXyMsIHNncjA9Xl8hLCBzbXNvPV5fXHMsIHNtdWw9Xl8iLAorCisjIyMjIFNvcm9jCisjCisjIEFsYW4gRnJpc2JpZSA8ZnJpc2JpZUBmbHlpbmctZGlzay5jb20+IHdyaXRlczoKKyMKKyMgQXMgeW91IG1heSByZWNhbGwsIHRoZSBTb3JvYyBsb2dvIGNvbnNpc3RlZCBvZiB0aGVpciBuYW1lLAorIyB3aXRoIHRoZSBsZXR0ZXIgIlMiIHN1cGVyaW1wb3NlZCBvdmVyIGFuIG9kZCBkZXNpZ24uICAgVGhpcworIyBjb25zaXN0ZWQgb2YgYSBjaXJjbGUgd2l0aCBhIHNsaWdodGx5IHNtYWxsZXIgMTUgZGVncmVlIChhcHByb3guKQorIyB3ZWRnZSB3aXRoIHJvdW5kZWQgY29ybmVycyBpbnNpZGUgaXQuICAgVGhlIGNvbG9yIHdhcyBzb3J0IG9mCisjIGEgbWV0YWxsaWMgZ29sZC95ZWxsb3cuCisjCisjIElmIEkgaGFkIGJlZW4gbW9yZSBvZiBhIGJlZXIgZHJpbmtlciBpdCBtaWdodCBoYXZlIGJlZW4gb2J2aW91cworIyB0byBtZSwgYnV0IGl0IHRvb2sgYSBjbHVlIGZyb20gdGhlaXIgc2VydmljZSBkZXBhcnRtZW50IHRvIG1ha2UKKyMgbWUgZXhjbGFpbSwgIk9mIGNvdXJzZSEiICAgVGhlIGNpcmN1bGFyIG9iamVjdCB3YXMgdGhlIHRvcCBvZgorIyBhIGJlZXIgY2FuICh0aGUgb2xkIHJlbW92YWJsZSBwb3AtdG9wIHN0eWxlKSBhbmQgIlNvcm9jIiB3YXMgYW4KKyMgYW5hZ3JhbSBmb3IgIkNvb3JzIi4KKyMKKyMgSSBjYW4ganVzdCBpbWFnaW5lIHRoZSBmb3VuZGVycyBvZiB0aGUgY29tcGFueSBzaXR0aW5nIGFyb3VuZAorIyBvbmUgZXZlbmluZywgdG9zc2luZyBiYWNrIGEgZmV3IGFuZCB0cnlpbmcgdG8gZGVjaWRlIHdoYXQgdG8KKyMgY2FsbCB0aGVpciBuZXcgY29tcGFueSBhbmQgd2hhdCB0byB1c2UgZm9yIGEgbG9nby4KKyMKKworIyAoc29yb2MxMjA6IHJlbW92ZWQgb2Jzb2xldGUgIjptYT1eS15QXlJeTF5MIDoiIC0tIGVzcikKK3Nvcm9jMTIwfGlxMTIwfHNvcm9jfHNvcm9jIGlxMTIwLAorCWNsZWFyPVxFKiQ8Mj4sIGN1ZDE9XkosIGVkPVxFWSwgZWw9XEVULCBrY3ViMT1eSCwga2N1ZDE9XkosCisJa2N1ZjE9XkwsIGtjdXUxPV5LLCB1c2U9YWRtM2EsCitzb3JvYzE0MHxpcTE0MHxzb3JvYyBpcTE0MCwKKwlPVGJzLCBhbSwgbWlyLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2J0PVxFSSwgY2xlYXI9XEUrLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1eTCwKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBkY2gxPVxFdywKKwlkbDE9XEVyJDwuNyo+LCBlZD1cRXksIGVsPVxFdCwgaG9tZT1eXiwgaWwxPVxFZSQ8MSo+LCBpbmQ9XkosCisJa2JzPV5ILCBrY3VmMT1eTCwga2N1dTE9XkssIGtmMD1eQTBcciwga2YxPV5BQFxyLCBrZjI9XkFBXHIsCisJa2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwga2Y2PV5BRVxyLCBrZjc9XkFGXHIsCisJa2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLCBsbD1eXl5LLCBybWlyPVxFOCwKKwlybXNvPVxFXDE3Nywgcm11bD1cRV5BLCBzbWlyPVxFOSwgc21zbz1cRVwxNzcsIHNtdWw9XEVeQSwKKworIyMjIyBTb3V0aHdlc3QgVGVjaG5pY2FsIFByb2R1Y3RzCisjCisjIFRoZXNlIGd1eXMgbWFkZSBhbiBlYXJseSBwZXJzb25hbCBtaWNybyBjYWxsZWQgdGhlIE02ODAwLgorIyBUaGUgY3Q4MiB3YXMgcHJvYmFibHkgaXRzIGNvbnNvbGUgdGVybWluYWwuCisjCisKKyMgKHN3dHA6IHJlbW92ZWQgb2Jzb2xldGUgIjpiYz1eRDoiIC0tIGVzcikKK3N3dHB8Y3Q4Mnxzb3V0aHdlc3QgdGVjaG5pY2FsIHByb2R1Y3RzIGN0ODIsCisJYW0sCisJY29scyM4MiwgbGluZXMjMjAsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkQsIGN1ZDE9XkosIGN1ZjE9XlMsCisJY3VwPVwwMTMlcDIlYyVwMSVjLCBjdXUxPV5BLCBkY2gxPV5cXkgsIGRsMT1eWiwgZWQ9XlYsIGVsPV5GLAorCWhvbWU9XlAsIGljaDE9XlxeWCwgaWwxPV5cXlksIGluZD1eTiwKKwlpczI9XDAzNFwwMjJcMDM2XDAyM1wwMzZcMDA0XDAzNVwwMjdcMDExXDAyM1wwMzZcMDM1XDAzNlwwMTdcMDM1XDAyN1wwMjJcMDExLAorCWxsPV5DLCByaT1eTywgcm1zbz1eXl5GLCBzbXNvPV5eXlYsCisKKyMjIyMgU3luZXJ0ZWsKKyMKKyMgQm9iIE1hbnNvbiA8bWFuc29uQHBhdHR5ci5hY3Mub2hpby1zdGF0ZS5lZHU+IHdyaXRlcyAoMjggQXByIDE5OTUpOgorIworIyBTeW5lcnRlayB1c2VkIHRvIG1ha2UgSUNzLCB2YXJpb3VzIDY1MDItYmFzZWQgc2luZ2xlLWJvYXJkIHByb2Nlc3MKKyMgY29udHJvbCBhbmQgaG9iYnlpc3QgY29tcHV0ZXJzLCBhbmQgYXNzb3J0ZWQgcGVyaXBoZXJhbHMgaW5jbHVkaW5nIGEKKyMgc2VyaWVzIG9mIHNtYWxsIGluZXhwZW5zaXZlIHRlcm1pbmFscyAoSSB0aGluayB0aGV5IHdlcmUgb25lIG9mIHRoZQorIyBmaXJzdCB0byBoYXZlIGEgInRlcm1pbmFsLW9uLWEta2V5Ym9hcmQiLCB3aGVyZSB0aGUgdGVybWluYWwgaXRzZWxmCisjIHdhcyBvbmx5IHNsaWdodGx5IGxhcmdlciB0aGFuIHRoZSBrZXlib2FyZCkuCisjCisjIFRoZXkgYXBwYXJlbnRseSBoYWQgYSBLVE0tMSBtb2RlbCwgd2hpY2ggSSd2ZSBuZXZlciBzZWVuLiBUaGUgS1RNLTIvNDAKKyMgd2FzIGEgNDB4MjQgdGVybWluYWwgdGhhdCBjb3VsZCBjb25uZWN0IHRvIGEgc3RhbmRhcmQgVFYgdGhyb3VnaCBhCisjIHZpZGVvIG1vZHVsYXRvci4gIFRoZSBLVE0tMi84MCB3YXMgdGhlIDgwLWNvbHVtbiB2ZXJzaW9uICh0aGUgMi80MAorIyBjb3VsZCBiZSB1cGdyYWRlZCB0byB0aGUgMi84MCBieSBhZGRpbmcgMiAyMTE0IFNSQU1zIGFuZCBhIG5ldyBST00pLgorIyBJIGhhdmUgYSBLVE0tMi84MCBzdGlsbCBpbiB3b3JraW5nIG9yZGVyLiAgVGhlIEtUTS0ycyBoYWQgZnVsbHkKKyMgc29ja2V0ZWQgcGFydHMsIHVzZWQgMiA2NTA3cywgYSA2NTMyIGFzIGtleWJvYXJkIHNjYW5uZXIsIGEgcHJvZ3JhbQorIyBST00gYW5kIDIgUk9NcyBhcyBjaGFyYWN0ZXIgZ2VuZXJhdG9ycy4gVGhleSB3ZXJlIGluY3JlZGlibHkgc2ltcGxlLAorIyBhbmQgSSd2ZSBuZXZlciBoYWQgYW55IHByb2JsZW1zIHdpdGggbWluZSAod2l0bmVzcyB0aGUgZmFjdCB0aGF0IG1pbmUKKyMgd2FzIG1hZGUgaW4gMTk4MSBhbmQgaXMgc3RpbGwgd29ya2luZyBncmVhdC4uLiBJJ3ZlIGJsb3duIHRoZSB2aWRlbworIyBvdXRwdXQgdHJhbnNpc3RvciBhIGNvdXBsZSBvZiB0aW1lcywgYnV0IGl0J3MgYSAyTjIyMjIgOi0pCisjCisjIFRoZSBLVE0tMyAod2hpY2ggaXMgd2hhdCBpcyBsaXN0ZWQgaW4gdGhlIHRlcm1pbmZvIGZpbGUpIHdhcyB0aGVpcgorIyBhdHRlbXB0IGF0IHB1dHRpbmcgYSBLVE0tMiBpbiBhIGJveCAoYW5kIHNvbWUgbW9kZWxzIGNhbWUgd2l0aCBhCisjIENSVCkuIEl0IHdhc24ndCBtdWNoIGRpZmZlcmVudCBmcm9tIHRoZSBLVE0tMiBoYXJkd2FyZS13aXNlLCBidXQgdGhlCisjIGNvbnRyb2wgYW5kIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHZlcnkgZGlmZmVyZW50LiBUaGUgS1RNLTMgd2FzIGFsd2F5cworIyByZWFsIGJyb2tlbiwgYXQgbGVhc3QgYWNjb3JkaW5nIHRvIHRoZSBmb2xrcyBJJ3ZlIHRhbGtlZCB0byBhYm91dCBpdC4KKyMKKyMgVGhlIHBhZGRpbmcgaW4gdGhlIGVudHJ5IGlzIHByb2JhYmx5IG9mZi0tdGhlc2UgdGVybWluYWxzIHdlcmUgdmVyeQorIyBzbG93IChpdCB0YWtlcyBsaWtlIDEwMG1zIGZvciB0aGUgS1RNLTIgdG8gY2xlYXIgdGhlIHNjcmVlbi4uLikgQW5kCisjIGFueW9uZSB3aXRoIGFueSBzYW5pdHkgcmVwbGFjZWQgdGhlIFJPTXMgd2l0aCBzb21ldGhpbmcgdGhhdCBwcm92aWRlZAorIyBhIHJlYXNvbmFibGUgc3Vic2V0IG9mIFZUMTAwIGZ1bmN0aW9uYWxpdHksIHNpbmNlIHRoZSB1c3VhbCBST01zIHdlcmUKKyMgb2J2aW91c2x5IHZlcnkgcHJpbWl0aXZlLi4uIG9oLCB5b3UgY291bGQgZ2V0IGFuIHVwZ3JhZGVkIFJPTSBmcm9tCisjIFN5bmVydGVrIGZvciBzb21lIGluY3JlZGlibGUgYW1vdW50IG9mIG1vbmV5LCBidXQgd2hhdCBoYWNrZXIgd2l0aCBhbgorIyBFUFJPTSBidXJuZXIgd291bGQgZG8gdGhhdD8gOikKKyMKKyMgU29ycnkgSSBkb24ndCBoYXZlIGFueSBjb250YWN0IGluZm87IEkgYmVsaWV2ZSB0aGV5IHdlcmUgbG9jYXRlZCBpbgorIyBTdW5ueXZhbGUsIGFuZCBJJ20gZmFpcmx5IHN1cmUgdGhleSBhcmUgc3RpbGwgbWFudWZhY3R1cmluZyBJQ3MKKyMgKHRoZXkndmUgZ29uZSB0byBBU0lDcyBhbmQgRlBHQXMpLCBidXQgSSBkb3VidCB0aGV5J3JlIGluIHRoZSBjb21wdXRlcgorIyBidXNpbmVzcyB0aGVzZSBkYXlzLgorIworCisjIFRlc3RlZCwgc2VlbXMgdG8gd29yayBmaW5lIHdpdGggdmkuCitzeW5lcnRla3xrdG18c3luZXJ0ZWszODB8c3luZXJ0ZWsga3RtIDMvODAgdHViZWxlc3MgdGVybWluYWwsCisJYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XlosIGN1YjE9XkgsIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1eSywgZWQ9XEVKLCBlbD1cRUssCisKKyMjIyMgVGFiIE9mZmljZSBQcm9kdWN0cworIworIwlUQUIgUHJvZHVjdHMgQ28uIC0gUGFsbyBBbHRvLCBDYWxpZm9ybmlhCisjCUVsZWN0cm9uaWMgT2ZmaWNlIFByb2R1Y3RzLAorIwkxNDUxIENhbGlmb3JuaWEgQXZlbnVlIDk0MzA0CisjCisjIEkgdGhpbmsgdGhleSdyZSBvdXQgb2YgYnVzaW5lc3MuCisjCisKKyMgVGhlIHRhYiAxMzIgdXNlcyB4b24veG9mZiwgc28gbm8gcGFkZGluZyBuZWVkZWQuCisjIDxzbWt4Pi88cm1reD4gaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggYXJyb3cga2V5cy4KKyMgPGlzMj4gc2V0cyA4MCBjb2wgbW9kZSwgbm9ybWFsIHZpZGVvLCBhdXRvd3JhcCBvbiAoZm9yIDxhbT4pLgorIyBTZWVtcyB0byBiZSBubyB3YXkgdG8gZ2V0IHJpZCBvZiBzdGF0dXMgbGluZS4KKyMgVGhlIG1hbnVhbCBmb3IgdGhpcyBwdXBweSB3YXMgZGF0ZWQgSnVuZSAxOTgxLiAgSXQgY2xhaW1zIHRvIGJlIFZUNTItCisjIGNvbXBhdGlibGUgYnV0IGxvb2tzIG1vcmUgdnQxMDAtbGlrZS4KK3RhYjEzMnx0YWJ8dGFiMTMyLTE1fHRhYiAxMzIvMTUsCisJZGEsIGRiLAorCU9UZE5ALCBjb2xzIzgwLCBsaW5lcyMyNCwgbG0jOTYsCisJY3VkMT1eSiwgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWlsMT1cRVtMLCBpczI9XEVbPzdoXEVbPzNsXEVbPzVsLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdXUxPVxFW0EsIHJtaXI9XEVbNGwsIHJta3hALCBzbWlyPVxFWzRoLCBzbWt4QCwgdXNlPXZ0MTAwLAordGFiMTMyLXd8dGFiMTMyIGluIHdpZGUgbW9kZSwKKwljb2xzIzEzMiwKKwlpczI9XEVbPzdoXEVbPzNoXEVbPzVsLCB1c2U9dGFiMTMyLAordGFiMTMyLXJ2fHRhYjEzMiBpbiByZXZlcnNlLXZpZGVvIG1vZGUsCisJaXMyPVxFWz83aFxFWz8zbFxFWz81aCwgdXNlPXRhYjEzMiwKK3RhYjEzMi13LXJ2fHRhYjEzMiBpbiByZXZlcnNlLXZpZGVvL3dpZGUgbW9kZSwKKwlpczI9XEVbPzdoXEVbPzNoXEVbPzVoLCB1c2U9dGFiMTMyLXcsCisKKworIyMjIyBUZWxlcmF5CisjCisjCVJlc2VhcmNoIEluY29ycG9yYXRlZAorIwk2NDI1IEZseWluZyBDbG91ZCBEcml2ZQorIwlFZGVuIFByYWlyaWUsIE1OIDU1MzQ0CisjCVZveDogKDYxMiktOTQxLTMzMDAKKyMKKyMgVGhlIFRlbGVyYXkgdGVybWluYWxzIHdlcmUgYWxsIGRpc2NvbnRpbnVlZCBpbiAxOTkyLTkzLiAgUkkgc3RpbGwgc2VydmljZXMKKyMgYW5kIHJlcGFpcnMgdGhlc2UgYmVhc3RzLCBidXQgbm8gbG9uZ2VyIG1hbnVmYWN0dXJlcyB0aGVtLiAgVGhlIFRlbGVyYXkKKyMgcGVvcGxlIGJlbGlldmUgdGhhdCBhbGwgdGhlIHR5cGVzIGxpc3RlZCBiZWxvdyBhcmUgdmVyeSByYXJlIG5vdyAoMTk5NSkuCisjIFRoZXJlIHdhcyBhIG5ld2VyIGxpbmUgb2YgVGVsZXJheXMgKE1vZGVsIDcsIE1vZGVsIDIwLCBNb2RlbCAzMCwgYW5kCisjIE1vZGVsIDEwMCkgdGhhdCB3ZXJlIEFOU0ktY29tcGF0aWJsZS4KKyMKKyMgTm90ZSB0d28gdGhpbmdzIGNhbGxlZCAidGVsZXJheSIuICBSZW9yZGVyIHNob3VsZCBtb3ZlIHRoZSBjb21tb24gb25lCisjIHRvIHRoZSBmcm9udCBpZiB5b3UgaGF2ZSBlaXRoZXIuICBBIGR1bWIgdGVsZXJheSB3aXRoIHRoZSBjdXJzb3Igc3R1Y2sKKyMgb24gdGhlIGJvdHRvbSBhbmQgbm8gb2J2aW91cyBtb2RlbCBudW1iZXIgaXMgcHJvYmFibHkgYSAzNzAwLgorIworCit0MzcwMHxkdW1iIHRlbGVyYXkgMzcwMCwKKwlPVGJzLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XkwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBpbmQ9XkosCit0MzgwMHx0ZWxlcmF5IDM4MDAgc2VyaWVzLAorCU9UYnMsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVDLAorCWN1cD1cRVklcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGVkPVxFSiwgZWw9XEVLLAorCWhvbWU9XEVILCBodD1eSSwgaW5kPV5KLCBsbD1cRVk3XHMsCit0MTA2MXx0ZWxlcmF5fHRlbGVyYXkgMTA2MSwKKwlPVGJzLCBhbSwga20sIHhocCwgeHQsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMxLAorCWJlbD1eRywgY2xlYXI9XDAxNCQ8MT4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRVEsCisJZGwxPVxFTSQ8Mio+LCBlZD1cRUokPDE+LCBlbD1cRUssIGhvbWU9XEVILCBodD1eSSwgaHRzPVxFRiwKKwlpY2gxPVxFUCwgaWwxPVxFTCQ8Mio+LCBpbmQ9XkosIGlwPSQ8MC40Kj4sCisJaXMyPVxFZVxFVTAxXloxXEVWXEVVMDJeWjJcRVZcRVUwM15aM1xFVlxFVTA0Xlo0XEVWXEVVMDVeWjVcRVZcRVUwNl5aNlxFVlxFVTA3Xlo3XEVWXEVVMDheWjhcRVZcRWYsCisJa2YxPV5aMSwga2YyPV5aMiwga2YzPV5aMywga2Y0PV5aNCwga2Y1PV5aNSwga2Y2PV5aNiwga2Y3PV5aNywKKwlrZjg9Xlo4LCBybXNvPVxFUkAsIHJtdWw9XEVSQCwgc21zbz1cc1xFUkQsIHNtdWw9XEVSSCwKKwl0YmM9XEVHLAordDEwNjFmfHRlbGVyYXkgMTA2MSB3aXRoIGZhc3QgUFJPTXMsCisJZGwxPVxFTSwgaWwxPVxFTCwgaXBALCB1c2U9dDEwNjEsCisjICJUZWxlcmF5IEFycGEgU3BlY2lhbCIsIG9mZmljaWFsbHkgZGVzaWduYXRlZCBhcworIyAiVGVsZXJheSBBcnBhIG5ldHdvcmsgbW9kZWwgMTAiIHdpdGggIlNwZWNpYWwgZmVhdHVyZSA3MjAiLgorIyBUaGlzIGlzIHRoZSBuZXcgKDE5ODEpIGZhc3QgbWljcm9jb2RlIHVwZGF0aW5nIHRoZSBvbGRlciAiYXJwYSIgcHJvbXMKKyMgKHdoaWNoIGdhdmUgbWV0YS1rZXkgYW5kIHByb2dyYW1tYWJsZS1meG4ga2V5cykuICA3MjAgaXMgbXVjaCBtdWNoIGZhc3RlciwKKyMgY29udmVydHMgdGhlIGtleXBhZCB0byBwcm9ncmFtbWFibGUgZnVuY3Rpb24ga2V5cywgYW5kIGhhcyBvdGhlciBnb29kaWVzLgorIyBTdGFuZG91dCBtb2RlIGlzIHN0aWxsIGJyb2tlbiAobWFnaWMgY29va2llLCBldGMpIHNvIGlzIHN1cHByZXNzZWQgYXMgbm8KKyMgcHJvZ3JhbXMgaGFuZGxlIHN1Y2ggbG9zc2FnZSBwcm9wZXJseS4KKyMgTm90ZTogdGhpcyBpcyBOT1QgdGhlIG9sZCB0ZXJtY2FwJ3MgInQxMDYxZiB3aXRoIGZhc3QgcHJvbXMuIgorIyBGcm9tOiBKLiBMZXByZWF1IDxsZXByZWF1QHV0YWgtY3M+IFR1ZSBGZWIgIDEgMDY6Mzk6MzcgMTk4MywgVW5pdiBvZiBVdGFoCisjICh0MTA6IHJlbW92ZWQgb3ZlcnJpZGRlbiAiOnNvQDpzZUA6dXNAOnVlQDoiIC0tIGVzcikKK3QxMHx0ZWxlcmF5IDEwIHNwZWNpYWwsCisJT1Ricywga20sIHhocCwgeHQsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHhtYyMyLAorCWNsZWFyPVxFaiQ8MzAvPiwgY3ViMT1eSCwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRjaDE9XEVRLAorCWRsMT1cRU0sIGVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGljaDE9XEVQLCBpbDE9XEVMLAorCWluZD1cRXEsIHBhZD1cMCwgcmk9XEVwLCBybXNvPVxFUkAsIHJtdWw9XEVSQCwgc21zbz1cRVJELAorCXNtdWw9XEVSSCwKKyMgdGVsZXJheSAxNiAtIG1hcCB0aGUgYXJyb3cga2V5cyBmb3Igdmkvcm9ndWUsIHNoaWZ0ZWQgdG8gdXAvZG93biBwYWdlLCBhbmQKKyMgYmFjay9mb3J0aCB3b3Jkcy4gUHV0IHRoZSBmdW5jdGlvbiBrZXlzIChmMS1mMTApIHdoZXJlIHRoZXkgY2FuIGJlCisjIGZvdW5kLCBhbmQgdHVybiBvZmYgdGhlIG90aGVyIG1hZ2ljIGtleXMgYWxvbmcgdGhlIHRvcCByb3csIGV4Y2VwdAorIyBmb3IgbGluZS9sb2NhbC4gRG8gdGhlIG1hZ2ljIGFwcHJvcHJpYXRlIHRvIG1ha2UgdGhlIHBhZ2Ugc2hpZnRzIHdvcmsuCisjIEFsc28gdG9nZ2xlIF5TL15RIGZvciB0aG9zZSBvZiB1cyB3aG8gdXNlIEVtYWNzLgordDE2fHRlbGVyYXkgMTYsCisJYW0sIGRhLCBkYiwgbWlyLCB4aHAsIHh0LAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgY2xlYXI9XEVbSFxFWzJKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1cRVtCLAorCWN1ZjE9XEVbQywgY3VwPSVpXEVbJXAxJWQ7JXAyJWRmLCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwKKwlkbDE9XEVbTSwgZWQ9XEVbMEosIGVsPVxFWzBLLCBob21lPVxFW0gsIGh0PV5JLCBpbDE9XEVbTCwKKwlpbmQ9XkosIGtmMT1eWjEsIGtmMTA9XlowLCBrZjI9XloyLCBrZjM9XlozLCBrZjQ9Xlo0LCBrZjU9Xlo1LAorCWtmNj1eWjYsIGtmNz1eWjcsIGtmOD1eWjgsIGtmOT1eWjksIHJpPVxFW1QsCisJcm1jdXA9XEVbVlxFWzI0OzFmXEVbPzM4aCwgcm1pcj1cRVs0bCwgcm1zbz1cRVttLAorCXJtdWw9XEVbbSwgc2dyMD1cRVttLCBzbWN1cD1cRVtVXEVbPzM4bCwgc21pcj1cRVs0aCwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorCisjIyMjIFRleGFzIEluc3RydW1lbnRzICh0aSkKKyMKKworIyBUaGUgU2lsZW50IDcwMCB3YXMgc28gY2FsbGVkIGJlY2F1c2UgaXQgd2FzIGJ1aWx0IGFyb3VuZCBhIHF1aWV0IHRoZXJtYWwKKyMgcHJpbnRlci4gIEl0IHdhcyBwb3J0YWJsZSwgZXF1aXBwZWQgd2l0aCBhbiBhY291c3RpYyBjb3VwbGVyLCBhbmQgcHJldHR5CisjIG5lYXQgZm9yIGl0cyBkYXkuCit0aTcwMHx0aTczM3x0aTczNXx0aTc0NXx0aTgwMHx0aSBzaWxlbnQgNzAwLzczMy83MzUvNzQ1IG9yIG9tbmkgODAwLAorCU9UYnMsIGhjLCBvcywKKwljb2xzIzgwLAorCWJlbD1eRywgY3I9XHIkPDE2Mj4sIGN1YjE9XkgsIGN1ZDE9XkosIGluZD1eSiwKKworIworIyBUZXhhcyBJbnN0cnVtZW50cyA5MTYgVkRUIDcgYml0IGNvbnRyb2wgbW9kZQorIwordGk5MTZ8dGk5MTYtMjIwLTd8VGV4YXMgSW5zdHJ1bWVudHMgOTE2IFZEVCA4ODU5LzEgdnQyMjAgbW9kZSA3IGJpdCBDVFJMLAorCWRhLCBkYiwgaW4sIG1zZ3IsCisJY2J0PVxFW1osIGNpdmlzPVxFWz8yNWwsIGNsZWFyPVxFW0hcRVsySiQ8Nj4sCisJY25vcm09XEVbPzI1aCwgY3ViPVxFWyVwMSVkRCwgY3VkPVxFWyVwMSVkQiwKKwljdWY9XEVbJXAxJWRDLCBjdXA9XEVbJXAxJWklcDElZDslcDIlZEgsIGN1dT1cRVslcDElZEEsCisJZGNoPVxFWyVwMSVkUCQ8MjUwPiwgZGNoMT1cRVtQLCBkbD1cRVslcDElZE0sCisJZWNoPVxFWyVwMSVkWCQ8MjA+LCBlZD1cRVtKJDw2PiwgZWw9XEVbMEssIGVsMT1cRVsxSywKKwllbmFjcz1cRShCXEUpMCwgZmY9XkwsIGZsYXNoPVxFWz81aFxFWz81bCQ8Nj4sCisJaHBhPVxFWyVwMSV7MX0lKyVkRywgaHRzPVxFWzBXLCBpY2g9XEVbJXAxJWRAJDwyNTA+LAorCWlsPVxFWyVwMSVkTCQ8MzY+LCBpcD0kPDEwPiwgaXMyPVxFWzE7MjRyXEVbMjQ7MUgsCisJa2NtZD1cRVsyOX4sIGtkY2gxPVxFW1AsIGtlbnQ9XkosIGtmMT1cRVsxN34sIGtmMTA9XEVbMjh+LAorCWtmMTE9XEVbMjl+LCBrZjEyPVxFWzMxfiwga2YyPVxFWzE4fiwga2YzPVxFWzE5fiwKKwlrZjQ9XEVbMjB+LCBrZjU9XEVbMjF+LCBrZjY9XEVbMjN+LCBrZjc9XEVbMjR+LCBrZjg9XEVbMjV+LAorCWtmOT1cRVsyNn4sIGtob21lPVxFW0gsIGtpY2gxPVxFW0AsIGtucD1cRVtTLCBrcHA9XEVbVCwKKwlrcHJ0PV5YLCBwcm90PVxFJiwgcm1hY3M9XDAxNyQ8Mj4sIHJzMj1cRVshcCwgc2dyQCwKKwlzbWFjcz1cMDE2JDwyPiwgdGJjPVxFWzNnLCB2cGE9XEVbJXAxJXsxfSUrJWRkLAorCXVzZT12dDIyMCwKKyMKKyMgVGV4YXMgSW5zdHJ1bWVudHMgOTE2IFZEVCA4IGJpdCBjb250cm9sIG1vZGUKKyMKK3RpOTE2LTh8dGk5MTYtMjIwLTh8VGV4YXMgSW5zdHJ1bWVudHMgOTE2IFZEVCA4ODU5LzEgOCB2dDIyMCBtb2RlIGJpdCBDVFJMLAorCWtjbWQ9XDIzMzI5fiwga2N1YjE9XDIzM0QsIGtjdWQxPVwyMzNCLCBrY3VmMT1cMjMzQywKKwlrY3V1MT1cMjMzQSwga2RjaDE9XDIzM1AsIGtlbnQ9XkosIGtmMT1cMjMzMTd+LAorCWtmMTA9XDIzMzI4fiwga2YxMT1cMjMzMjl+LCBrZjEyPVwyMzMzMX4sIGtmMj1cMjMzMTh+LAorCWtmMz1cMjMzMTl+LCBrZjQ9XDIzMzIwfiwga2Y1PVwyMzMyMX4sIGtmNj1cMjMzMjN+LAorCWtmNz1cMjMzMjR+LCBrZjg9XDIzMzI1fiwga2Y5PVwyMzMyNn4sIGtob21lPVwyMzNILAorCWtpY2gxPVwyMzNALCBrbnA9XDIzM1MsIGtwcD1cMjMzVCwga3BydD1eWCwgdXNlPXRpOTE2LAorIworIyBUZXhhcyBJbnN0cnVtZW50cyA5MTYgVkRUIDg4NTkvMSA3IGJpdCBjb250cm9sIDEzMiBjb2x1bW4gbW9kZQorIwordGk5MTYtMTMyfFRleGFzIEluc3RydW1lbnRzIDkxNiBWRFQgdnQyMjAgMTMyIGNvbHVtbiwKKwljb2xzIzEzMiwgdXNlPXRpOTE2LAorIworIyBUZXhhcyBJbnN0cnVtZW50cyA5MTYgVkRUIDg4NTkvMSA4IGJpdCBjb250cm9sIDEzMiBjb2x1bW4gbW9kZQorIwordGk5MTYtOC0xMzJ8VGV4YXMgSW5zdHJ1bWVudHMgOTE2IFZEVCA4LWJpdCB2dDIyMCAxMzIgY29sdW1uLAorCWNvbHMjMTMyLCB1c2U9dGk5MTYtOCwKK3RpOTI0fFRleGFzIEluc3RydW1lbnRzIDkyNCBWRFQgODg1OS8xIDcgYml0IENUUkwsCisJT1RicywgYW0sIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFWzJKXEVbSCwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPSVpXEVbJXAxJWQ7JXAyJWRyLCBjdWIxPVxFW0QsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD0laVxFWyVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBjdnZpcz1cRVs/MzFoLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWlsMT1cRVtMLCBpbmQ9XEVELCBrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9XEVbUCwga2YxPVxFT1AsIGtmMj1cRU9RLAorCWtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFWzE2fiwga2Y2PVxFWzE3fiwga2Y3PVxFWzE4fiwKKwlrZjg9XEVbMTl+LCBrZjk9XEVbMjB+LCBraWNoMT1cRVtALCByYz1cRTgsIHJldj1cRVs3bSwKKwlyaT1cRU0sIHJtc289XEVbbSwgcm11bD1cRVttLCBzYz1cRTcsIHNncjA9XEVbbSwgc21zbz1cRVs3bSwKKwlzbXVsPVxFWzRtLCB0YmM9XEVbM2csCit0aTkyNC04fFRleGFzIEluc3RydW1lbnRzIDkyNCBWRFQgODg1OS8xIDggYml0IENUUkwsCisJYW0sIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjaXZpcz1cRVs/MjVsLAorCWNsZWFyPVxFWzJKXEVbSCwgY25vcm09XEVbPzI1aCwgY3I9Xk0sCisJY3NyPSVpXEVbJXAxJWQ7JXAyJWRyLCBjdWIxPVxFW0QsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD0laVxFWyVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBjdnZpcz1cRVs/MzFoLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWlsMT1cRVtMLCBpbmQ9XEVELCBrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2RjaDE9UCQ8XDIzMz4sIGtmMT1QJDxcMjE3PiwKKwlrZjI9USQ8XDIxNz4sIGtmMz1SJDxcMjE3Piwga2Y0PVMkPFwyMTc+LCBrZjU9fiQ8XDIzMzE2PiwKKwlrZjY9fiQ8XDIzMzE3Piwga2Y3PX4kPFwyMzMxOD4sIGtmOD1+JDxcMjMzMTk+LAorCWtmOT1+JDxcMjMzMjA+LCBraWNoMT1AJDxcMjMzPiwgcmM9XEU4LCByZXY9XEVbN20sIHJpPVxFTSwKKwlybXNvPVxFW20sIHJtdWw9XEVbbSwgc2M9XEU3LCBzZ3IwPVxFW20sIHNtc289XEVbN20sCisJc211bD1cRVs0bSwgdGJjPVxFWzNnLAordGk5MjR3fFRleGFzIEluc3RydW1lbnRzIDkyNCBWRFQgNyBiaXQgLSAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsIHVzZT10aTkyNCwKK3RpOTI0LTh3fFRleGFzIEluc3RydW1lbnRzIDkyNCBWRFQgOCBiaXQgLSAxMzIgY29sdW1uIG1vZGUsCisJY29scyMxMzIsIHVzZT10aTkyNC04LAordGk5MzF8VGV4YXMgSW5zdHJ1bWVudHMgOTMxIFZEVCwKKwlPVGJzLCBhbSwgeG9uLAorCWNvbHMjODAsIGxpbmVzIzI0LAorCWJlbD1eRywgYmxpbms9XEU0UCwgY2xlYXI9XEVMLCBjbm9ybT1cRTRALCBjcj1eTSwgY3ViMT1cRUQsCisJY3VkMT1cRUIsIGN1ZjE9XEVDLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLAorCWN1dTE9XEVBLCBkY2gxPVxFUSwgZGwxPVxFTywgZWQ9XEVKLCBlbD1cRUksIGhvbWU9XEVILAorCWljaDE9XEVSXEVQXEVNLCBpbDE9XEVOLCBpbmQ9XEVhLCBpbnZpcz1cRTRILAorCWlzMj1cRUdCXEUoQEJAQFxFKSwga2N1YjE9XEVELCBrY3VkMT1cRUIsIGtjdWYxPVxFQywKKwlrY3V1MT1cRUEsIGtkY2gxPVxFUSwga2RsMT1cRU8sIGtmMT1cRWkxLCBrZjI9XEVpMiwga2YzPVxFaTMsCisJa2Y0PVxFaTQsIGtmNT1cRWk1LCBrZjY9XEVpNiwga2Y3PVxFaTcsIGtmOD1cRWk4LCBrZjk9XEVpOSwKKwlraWNoMT1cRVAsIGtpbDE9XEVOLCByZXY9XEU0Qiwgcmk9XEViLCBybXNvPVxFNEAsIHJtdWw9XEU0QCwKKwlzZ3IwPVxFNEAsIHNtc289XEU0QSwgc211bD1cRTRELAordGk5MjZ8VGV4YXMgSW5zdHJ1bWVudHMgOTI2IFZEVCA4ODU5LzEgNyBiaXQgQ1RSTCwKKwljc3JALCBpbmQ9XEVbMVMsIHJpPVxFWzFULCB1c2U9dGk5MjQsCisjICh0aTkyNi04OiBJIGNvcnJlY3RlZCB0aGlzIGZyb20gdGhlIGJyb2tlbiBTQ08gZW50cnkgLS0gZXNyKQordGk5MjYtOHxUZXhhcyBJbnN0cnVtZW50cyA5MjYgVkRUIDg4NTkvMSA4IGJpdCBDVFJMLAorCWNzckAsIGluZD1cMjMzMVMsIHJpPVwyMzMxVCwgdXNlPXRpOTI0LTgsCit0aV9hbnNpfGJhc2ljIGVudHJ5IGZvciB0aTkyOCwKKwlhbSwgYmNlLCBlbywgeGVubCwgeG9uLAorCWNvbG9ycyM4LCBjb2xzIzgwLCBpdCM4LCBsaW5lcyMyNSwgcGFpcnMjNjQsCisJYmVsPV5HLCBibGluaz1cRVs1bSwgYm9sZD1cRVsxbSwgY2J0PVxFW1osIGNsZWFyPVxFWzJKXEVbSCwKKwljcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLCBjdWIxPV5ILCBjdWQxPVxFW0IsCisJY3VmMT1cRVtDLCBjdXA9XEVbJWklcDElZDslcDIlZEgsIGN1dTE9XEVbQSwgZGNoMT1cRVtQLAorCWRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLCBpY2gxPVxFW0AsCisJaWwxPVxFW0wsIGluZD1cRVtTLCBrYnM9XkgsIGtjdWIxPVxFW0QsIGtjdWQxPVxFW0IsCisJa2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2VuZD1cRVtGLCBrZjA9XEVbViwga2YxPVxFW00sCisJa2YyPVxFW04sIGtmMz1cRVtPLCBrZjQ9XEVbUCwga2Y1PVxFW1EsIGtmNj1cRVtSLCBrZjc9XEVbUywKKwlrZjg9XEVbVCwga2Y5PVxFW1UsIGtob21lPVxFW0gsIGtucD1cRVtHLCBrcHA9XEVbSSwKKwlvcD1cRVszNzs0MG0sIHJpPVxFW1QsIHJtc289XEVbbSwgcm11bD1cRVttLAorCXNldGFiPVxFWzQlcDElZG0sIHNldGFmPVxFWzMlcDElZG0sIHNncjA9XEVbbSwKKwlzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIworIyAgICAgICA5MjggVkRUIDcgYml0IGNvbnRyb2wgbW9kZQorIwordGk5Mjh8VGV4YXMgSW5zdHJ1bWVudHMgOTI4IFZEVCA4ODU5LzEgNyBiaXQgQ1RSTCwKKwlrZGNoMT1cRVtQLCBrZW5kPVxFXzFcRVxcLCBrZW50PVxFWzh+LCBrZjE9XEVbMTd+LAorCWtmMTA9XEVbMjh+LCBrZjExPVxFWzI5fiwga2YxMj1cRVszMX4sIGtmMTM9XEVbMzJ+LAorCWtmMTU9XEVbMzR+LCBrZjI9XEVbMTh+LCBrZjM9XEVbMTl+LCBrZjQ9XEVbMjB+LAorCWtmNT1cRVsyMX4sIGtmNj1cRVsyM34sIGtmNz1cRVsyNH4sIGtmOD1cRVsyNX4sIGtmOT1cRVsyNn4sCisJa2ljaDE9XEVbQCwga25wPVxFW1MsIGtwcD1cRVtULCBrcHJ0PVxFWzM1fiwgdXNlPXRpX2Fuc2ksCisjCisjICAgICAgIDkyOCBWRFQgOCBiaXQgY29udHJvbCBtb2RlCisjCit0aTkyOC04fFRleGFzIEluc3RydW1lbnRzIDkyOCBWRFQgODg1OS8xIDggYml0IENUUkwsCisJa2RjaDE9XDIzM1AsIGtlbmQ9XDIzNzFcMjM0LCBrZW50PVwyMzM4fiwga2YxPVwyMzMxN34sCisJa2YxMD1cMjMzMjh+LCBrZjExPVwyMzMyOX4sIGtmMTI9XDIzMzMxfiwga2YxMz1cMjMzMzJ+LAorCWtmMTU9XDIzMzM0fiwga2YyPVwyMzMxOH4sIGtmMz1cMjMzMTl+LCBrZjQ9XDIzMzIwfiwKKwlrZjU9XDIzMzIxfiwga2Y2PVwyMzMyM34sIGtmNz1cMjMzMjR+LCBrZjg9XDIzMzI1fiwKKwlrZjk9XDIzMzI2fiwga2hvbWU9XDIzM0gsIGtpY2gxPVwyMzNALCBrbnA9XDIzM1MsCisJa3BwPVwyMzNULCBrcHJ0PVwyMzMzNX4sIHVzZT10aV9hbnNpLAorCisjIyMjIFplbnRlYyAoemVuKQorIworCisjICh6ZW4zMDogcmVtb3ZlZCBvYnNvbGV0ZSA6bWE9XkwgXlJeTF5LXlA6LiAgVGhpcyBlbnRyeSBvcmlnaW5hbGx5CisjIGhhZCBqdXN0IDxzbXNvPj1cRUc2IHdoaWNoIEkgdGhpbmsgbWVhbnMgc3RhbmRvdXQgd2FzIHN1cHBvc2VkIHRvIGJlCisjIGRpbS1yZXZlcnNlIHVzaW5nIEFETTEyLXN0eWxlIGF0dHJpYnV0ZXMuIEFETTEyIDxzbXVsPi88cm11bD4gYW5kCisjIDxpbnZpcz4gbWlnaHQgd29yay0tIGVzcikKK3plbjMwfHozMHx6ZW50ZWMgMzAsCisJT1RicywgYW0sIG1pciwgdWwsCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1cRSosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cRT0lcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XkssIGRjaDE9XEVXLAorCWRpbT1cRUcyLCBkbDE9XEVSJDwxLjUqPiwgZWQ9XEVZLCBlbD1cRVQkPDEuMCo+LCBob21lPV5eLAorCWlsMT1cRUUkPDEuNSo+LCBpbmQ9XkosIHJtaXI9XEVyLCBybXVsQCwgc21pcj1cRXEsIHNtc289XEVHNiwKKwlzbXVsQCwgdXNlPWFkbStzZ3IsCisjICh6ZW41MDogdGhpcyBoYWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcworIwk6QlM9XlU6Q0w9XlY6Q1I9XkI6CisjIFVLL0RLL1JLL0xLL0hNIHdlcmUgc29tZW9uZSdzIGFsaWFzZXMgZm9yIGt1L2tkL2tsL2tyL2toLAorIyB3aGljaCB3ZXJlIGFsc28gaW4gdGhlIG9yaWdpbmFsIGVudHJ5IC0tIGVzcikKKyMgKHplbjUwOiByZW1vdmVkIG9ic29sZXRlICI6bWE9XkhoXkxsXkpqXktrOiIgLS0gZXNyKQoremVuNTB8ejUwfHplbnRlYyB6ZXBoeXIsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsIHhtYyMxLAorCWNsZWFyPVxFKywgY3ViMT1eSCwgY3VwPVxFPSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywKKwljdXUxPV5LLCBkY2gxPVxFVywgZGwxPVxFUiwgZWQ9XEVZLCBlbD1cRVQsIGljaDE9XEVRLCBpbDE9XEVFLAorCWludmlzQCwga2N1YjE9XkgsIGtjdWQxPV5KLCBrY3VmMT1eTCwga2N1dTE9XkssIGtob21lPV5eLAorCXJtdWxALCBzbXVsQCwgdXNlPWFkbStzZ3IsCisKKyMgQ0NJIDQ1NzQgKE9mZmljZSBQb3dlcikgZnJvbSBXaWxsIE1hcnRpbiA8d21hcnRpbkBCUkwuQVJQQT4gdmlhIEJSTAorY2NpfGNjaTF8ejgwMDF8emVuODAwMXxDQ0kgQ3VzdG9tIFplbnRlYyA4MDAxLAorCU9UYnMsIGFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwlibGluaz1cRU0iLCBjbGVhcj1cRUhcRUosIGNub3JtPVxFUCwKKwljc3I9XEVSJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XEVDLCBjdXA9XEVZJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwKKwljdnZpcz1cRUZcRVFcRU0gXEVSIDcsIGRpbT1cRU0hLCBlZD1cRUosIGVsPVxFSywgaG9tZT1cRUgsCisJaW52aXM9XEVNKCwgaXMyPVxFTSBcRUZcRVRcRVBcRVIgNywga2JzPV5ILCBrY3ViMT1cRUQsCisJa2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2hvbWU9XEVILCBtYzQ9XlQsIG1jNT1eUiwKKwlyZXY9XEVNJCwgcmk9XEVJLCBybXNvPVxFTVxzLCBybXVsPVxFTVxzLCBzZ3IwPVxFTVxzLAorCXNtc289XEVNJCwgc211bD1cRU0wLAorCisjIyMjIyMjIyBPQlNPTEVURSBVTklYIENPTlNPTEVTCisjCisKKyMjIyMgQXBvbGxvIGNvbnNvbGVzCisjCisjIEFwb2xsbyBnb3QgYm91Z2h0IGJ5IEhld2xldHQtUGFja2FyZC4gIFRoZSBBcG9sbG8gd29ya3N0YXRpb25zIGFyZQorIyBsYWJlbGVkIEhQNzAwcyBub3cuCisjCisKKyMgRnJvbTogR2FyeSBEYXJsYW5kIDxnb29kbWFuY0BnYXJuZXQuYmVya2VsZXkuZWR1PgorYXBvbGxvfGFwb2xsbyBjb25zb2xlLAorCU9UYnMsIGFtLCBtaXIsCisJY29scyM4OCwgbGluZXMjNTMsCisJY2xlYXI9XkwsIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEVNJXAxJXszMn0lKyVjJXAyJWQpLCBjdXUxPVxFQSwgZGNoMT1cRVAsIGRsMT1cRUwsCisJZWQ9XEVKLCBlbD1cRUssIGhwYT1cRU4lcDElZCwgaWwxPVxFSSwgaW5kPVxFRSwgcmk9XEVELAorCXJtY3VwPVxFWCwgcm1pcj1cRVIsIHJtc289XEVULCBybXVsPVxFViwgc21jdXA9XEVXLCBzbWlyPVxFUSwKKwlzbXNvPVxFUywgc211bD1cRVUsIHZwYT1cRU8rXHMsCisKKyMgV2UgZG9uJ3Qga25vdyB3aGV0aGVyIG9yIG5vdCB0aGUgYXBvbGxvIGd1eXMgcmVwbGljYXRlZCBERUMncyBmaXJtd2FyZSBidWcKKyMgaW4gdGhlIFZUMTMyIHRoYXQgcmV2ZXJzZWQgPHJtaXI+LzxzbWlyPi4gIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIGRpc2FibGUKKyMgYm90aCB0aGVzZSBjYXBhYmlsaXRpZXMuCithcG9sbG9fMTVQfGFwb2xsbyAxNSBpbmNoIGRpc3BsYXksCisJcm1pckAsIHNtaXJALCB1c2U9dnQxMzIsCithcG9sbG9fMTlMfGFwb2xsbyAxOSBpbmNoIGRpc3BsYXksCisJcm1pckAsIHNtaXJALCB1c2U9dnQxMzIsCithcG9sbG9fY29sb3J8YXBvbGxvIGNvbG9yIGRpc3BsYXksCisJcm1pckAsIHNtaXJALCB1c2U9dnQxMzIsCisKKyMjIyMgQ29udmVyZ2VudCBUZWNobm9sb2d5CisjCisjIEJ1cnJvdWdocyBib3VnaHQgQ29udmVyZ2VudCBzaG9ydGx5IGJlZm9yZSBpdCBtZXJnZWQgd2l0aCBVbml2YWMuCisjIENUT1MgaXMgKEkgYmVsaWV2ZSkgZGVhZC4gIFByb2JhYmx5IHRoZSBhd3MgaXMgdG9vICh0aGlzIGVudHJ5IGRhdGVzCisjIGZyb20gMTk5MSBvciBlYXJsaWVyKS4KKyMKKworIyBDb252ZXJnZW50IEFXUyB3b3Jrc3RhdGlvbiBmcm9tIEdvdWxkL1NFTCBVVFgvMzIgdmlhIEJSTAorIyAoYXdzOiByZW1vdmVkIHVua25vd24gOmRuPV5LOiAtLSBlc3IpCithd3N8Q29udmVyZ2VudCBUZWNobm9sb2dpZXMgQVdTIHdvcmtzdGF0aW9uIHVuZGVyIFVUWCBhbmQgWGVuaXgsCisJYW0sCisJT1R1ZyMwLCBjb2xzIzgwLCBsaW5lcyMyOCwgeG1jIzAsCisJT1RiYz1eSCwgT1RtYT1cMDE2aFwwMTNqXDAwMWtcMDIybFwwMDJtLCBPVG5sPV5KLCBhY3NjPSwKKwljbGVhcj1eTCwgY3VkMT1eSywgY3VmMT1eUiwgY3VwPVxFQyVwMiVjJXAxJWMsIGN1dTE9XkEsCisJZGNoMT1cRURDLCBkbDE9XEVETCwgZWQ9XEVFRiwgZWw9XEVFTCwgaHBhPVxFSCVwMSVjLAorCWljaDE9XEVJQywgaWwxPVxFSUwsIGluZD1cRVNVLCBrYnM9XkgsIGtjdWIxPV5OLCBrY3VkMT1eSywKKwlrY3VmMT1eUiwga2N1dTE9XkEsIHJpPVxFU0QsIHJtYWNzPVxFQUFGLCBybXNvPVxFQVJGLAorCXJtdWw9XEVBVUYsIHNtYWNzPVxFQUFOLCBzbXNvPVxFQVJOLCBzbXVsPVxFQVVOLAorCXZwYT1cRVYlcDElYywKK2F3c2N8Q29udmVyZ2VudCBUZWNobm9sb2dpZXMgQVdTIHdvcmtzdGF0aW9uIHVuZGVyIENUT1MsCisJYW0sCisJT1R1ZyMwLCBjb2xzIzgwLCBsaW5lcyMyNCwgeG1jIzAsCisJT1RiYz1eTiwgT1RtYT1cMDE2aFwwMTNqXDAwMWtcMDIybFwwMDJtLCBhY3NjPSwgY2xlYXI9XkwsCisJY3VkMT1eSywgY3VmMT1eUiwgY3VwPVxFQyVwMiVjJXAxJWMsIGN1dTE9XkEsIGVkPVxFRUYsCisJZWw9XEVFTCwga2JzPV5ILCBrY3ViMT1eTiwga2N1ZDE9XkssIGtjdWYxPV5SLCBrY3V1MT1eQSwKKwlybWFjcz1cRUFBRiwgcm1zbz1cRUFBLCBybXVsPVxFQUEsIHNtYWNzPVxFQUFOLCBzbXNvPVxFQUUsCisJc211bD1cRUFDLAorCisjIyMjIERFQyBjb25zb2xlcworIworCisjIFRoZSBNaWNyb1ZheCBjb25zb2xlLiAgVGltIFRoZWlzZW4gPHRpbUBjcy53aXNjLmVkdT4gd3JpdGVzOgorIyBUaGUgZGlnaXRhbCB1VmF4IElJJ3MgaGFkIGEgZ3JhcGhpYyBkaXNwbGF5IGNhbGxlZCBhIHFkc3MuICBJdCB3YXMKKyMgc3VwcG9zZWQgdG8gYmUgYSBoaWdoIHBlcmZvcm1hbmNlIGdyYXBoaWMgYWNjZWxlcmF0b3IsIGJ1dCBpdCB3YXMKKyMgbGF0ZSB0byBtYXJrZXQgYW5kIGJhcmVseSBhcHBlYXJlZCBiZWZvcmUgZmFzdGVyIGR1bWIgZnJhbWUgYnVmZmVycworIyBhcHBlYXJlZC4gIEkgaGF2ZSBvbmx5IHVzZWQgdGhpcyBkaXNwbGF5IHdoaWxlIHJ1bm5pbmcgWDExLiAgSG93ZXZlciwKKyMgZHVyaW5nIGJvb3R1cCwgaXQgd2FzIGluIHRleHQgbW9kZSwgYW5kIHByb2JhYmx5IGhhZCBhIHRlcm1pbmFsIGVtdWxhdG9yCisjIHdpdGhpbiBpdC4gIEFuZCB0aGF0IGlzIHdoYXQgeW91ciB0ZXJtY2FwIGVudHJ5IGlzIGZvci4gIEluIGdyYXBoaWNzCisjIG1vZGUgdGhlIHNjcmVlbiBzaXplIGlzIDEwMjR4ODY0IHBpeGVscy4KK3Fkc3N8cWRjb25zfHFkc3MgZ2xhc3MgdHR5LAorCU9UYnMsIGFtLAorCWNvbHMjMTI4LCBsaW5lcyM1NywKKwljbGVhcj1cMDMyJDwxLz4sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsCisJY3VwPVxFPSVwMSVjJXAyJWMsIGN1dTE9XkssCisKKyMjIyMgRm9ydHVuZSBTeXN0ZW1zIGNvbnNvbGVzCisjCisjIEZvcnR1bmUgbWFkZSBhIGxpbmUgb2YgNjhLLWJhc2VkIFVOSVggYm94ZXMgdGhhdCB3ZXJlIHByZXR0eSBuaWZ0eQorIyBpbiB0aGVpciBkYXk7IEkgKGVzcikgdXNlZCBvbmUgbXlzZWxmIGZvciBhIHllYXIgb3Igc28gYXJvdW5kIDE5ODQuCisjIFRoZXkgaGFkIG5vIGdyYXBoaWNzLCB0aG91Z2gsIGFuZCBjb3VsZG4ndCBjb21wZXRlIGFnYWluc3QgU3VucyBhbmQKKyMgdGhlIGxpa2UuICBSLkkuUC4KKyMKKworIyBGcm9tOiBSb2JlcnQgTmF0aGFuc29uIDxjMTYwLTNicEBDb3JhbD4gdmlhIHR1dCAgIFdlZCBPY3QgNSwgMTk4MworIyAoVGhpcyBoYWQgZXh0ZW5zaW9uIGNhcGFiaWxpdGllcworIwk6cnY9XEVIOnJlPVxFSTpyZz0wOkdHPTA6XAorIwk6Q089XEVcXDpXTD1eQWFccjpXUj1eQWJccjpDTD1eQWNccjpDUj1eQWRccjpETD1eQWVccjpSRj1eQWZccjpcCisjCTpSQz1eQWdccjpDVz1eQWhccjpOVT1eQWpccjpFTj1eQWtccjpITT1eQWw6UEw9XkFtXHI6XAorIwk6UFU9XkFuXHI6UEQ9XkFvXHI6UFI9XkFwXHI6SFA9XkFAXHI6UlQ9XkFxXHI6VEI9XHI6Q049XDE3NzpNUD1cRStGOgorIyBJdCBoYWQgYm90aCAiOmJzOiIgYW5kICI6YnM9Xkg6IjsgSSByZW1vdmVkIHRoZSBsYXR0ZXIuICBBbHNvLCBpdCBoYWQKKyMgIjpzZz0wOiIgYW5kICI6dWc9MDoiOyBldmlkZW50bHkgdGhlIGNvbXBvc2VyIHdhcyB0cnlpbmcgKHVubmVjZXNzYXJpbHkpCisjIHRvIGZvcmNlIGJvdGggbWFnaWMgY29va2llIGdsaXRjaGVzIG9mZi4gIE9uY2UgdXBvbiBhIHRpbWUsIEkKKyMgdXNlZCBhIEZvcnR1bmUgbXlzZWxmLCBzbyBJIGtub3cgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZm9ybSBeQVthLXpdXHIgYXJlCisjIGZ1bmN0aW9uIGtleXM7IHRodXMgdGhlICJBbCIgdmFsdWUgZm9yIEhNIHdhcyBjZXJ0YWlubHkgYW4gZXJyb3IuICBJIHJlbmFtZWQKKyMgRU4vUEQvUFUvQ08vQ0YvUlQgYWNjb3JkaW5nIHRvIHRoZSBYRU5JWC9UQyBtYXBwaW5ncywgYnV0IG5vdCBITS9ETC9SRi9SQy4KKyMgSSB0aGluayA6cnY6IGFuZCA6cmU6IGFyZSBzdGFydC9lbmQgcmV2ZXJzZSB2aWRlbyBhbmQgOnJnOiBpcyBhIG5vbmV4aXN0ZW50CisjICJyZXZlcnNlLXZpZGVvLWdsaXRjaCIgY2FwYWJpbGl0eTsgSSBoYXZlIHB1dCA6cnY6IGFuZCA6cmU6IGluIHdpdGggc3RhbmRhcmQKKyMgbmFtZXMgYmVsb3cuICBJJ3ZlIHJlbW92ZWQgb2Jzb2xldGUgIjpubD01Xko6IiBhcyB0aGVyZSBpcyBhIDpkbzogLS0gZXNyKQorZm9zfGZvcnR1bmV8Rm9ydHVuZSBzeXN0ZW0sCisJT1RicywgYW0sIGJ3LAorCWNvbHMjODAsIGxpbmVzIzI1LAorCWFjc2M9aiprKGwgbSJxJnYldyN4LSwgYmVsPV5HLCBibGluaz1cRU4sIGNpdmlzPVxFXSwKKwljbGVhcj1cMDE0JDwyMD4sIGNub3JtPVxFXFwsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPVxuJDwzPiwKKwljdXA9XDAzNEMlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XDAxMyQ8Mz4sCisJY3Z2aXM9XEVcOiwgZGNoMT1cMDM0VyQ8NT4sIGRsMT1cMDM0UiQ8MTU+LAorCWVkPVwwMzRZJDwzKj4sIGVsPV5cWiwgaG9tZT1cMDM2JDwxMD4sIGh0PV5aLAorCWljaDE9XDAzNFEkPDU+LCBpbDE9XDAzNEUkPDE1PiwgaW5kPV5KLCBpczI9Xl8uLiwga2JzPV5ILAorCWtjdWIxPV5Bd1xyLCBrY3VkMT1eQXlcciwga2N1ZjE9XkF6XHIsIGtjdXUxPV5BeFxyLAorCWtlbmQ9XkFrXHIsIGtlbnQ9XkFxLCBrZjE9XkFhXHIsIGtmMj1eQWJcciwga2YzPV5BY1xyLAorCWtmND1eQWRcciwga2Y1PV5BZVxyLCBrZjY9XkFmXHIsIGtmNz1eQWdcciwga2Y4PV5BaFxyLAorCWtob21lPV5BP1xyLCBrbnA9XkFvXHIsIGtwcD1eQW5cciwgbmVsPV5NXkosIHJldj1cRUgsCisJcm1hY3M9Xk8sIHJtc289XlxJYCwgcm11bD1eXElQLCBzZ3IwPVxFSSwgc21hY3M9XEVvLAorCXNtc289XlxIYCwgc211bD1eXEhQLAorCisjIyMjIE1hc3Njb21wIGNvbnNvbGVzCisjCisjIE1hc3Njb21wIGhhcyBnb25lIG91dCBvZiBidXNpbmVzcy4gIFRoZWlyIHByb2R1Y3QgbGluZSB3YXMgcHVyY2hhc2VkIGJ5CisjIGNvbWFueSBpbiBHZW9yZ2lhIChVUykgY2FsbGVkICJYUyBJbnRlcm5hdGlvbmFsIiwgcGFydHMgYW5kIHNlcnZpY2UgbWF5CisjIHN0aWxsIGJlIGF2YWlsYWJsZSB0aHJvdWdoIHRoZW0uCisjCisKKyMgKG1hc3Njb21wOiAiOk1UOiIgY2hhbmdlZCB0byAiOmttOiI7ICAtLSBlc3IpCittYXNzY29tcHxtYXNzY29tcCB3b3Jrc3RhdGlvbiBjb25zb2xlLAorCU9UYnMsIGttLCBtaXIsCisJY29scyM4MCwgaXQjOCwgbGluZXMjMjQsCisJY2xlYXI9XEVbMkosIGN1YjE9XkgsIGN1ZDE9XEVbQiwgY3VmMT1cRVtDLAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCwgY3V1MT1cRVtBLCBkY2gxPVxFW1AsIGRsMT1cRVtNLAorCWVkPVxFW0osIGVsPVxFW0ssIGh0PV5JLCBpbDE9XEVbTCwgaXMyPVxFR2NcRUdiXEVHdywga2JzPV5ILAorCWtjdWIxPVxFT0QsIGtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIHJtaXI9XEVbNGwsCisJcm1zbz1cRVttLCBybXVsPVxFR2F1LCBzbWlyPVxFWzRoLCBzbXNvPVxFWzdtLCBzbXVsPVxFR3UsCittYXNzY29tcDF8bWFzc2NvbXAgbGFyZ2Ugc2NyZWVuIHZlcnNpb24gMSwKKwljb2xzIzEwNCwgbGluZXMjMzYsIHVzZT1tYXNzY29tcCwKK21hc3Njb21wMnxtYXNzY29tcCBsYXJnZSBzY3JlZW4gdmVyc2lvbiAyLAorCWNvbHMjNjQsIGxpbmVzIzIxLCB1c2U9bWFzc2NvbXAsCisKKyMjIyMjIyMjIE9USEVSIE9CU09MRVRFIFRZUEVTCisjCisjIFRoZXNlIHRlcm1pbmFscyBhcmUgKmxvbmcqIGRlYWQgLS0gdGhlc2UgZW50cmllcyBhcmUgcmV0YWluZWQgZm9yCisjIGhpc3RvcmljYWwgaW50ZXJlc3Qgb25seS4KKyMKKworIyMjIyBPYnNvbGV0ZSBub24tQU5TSSBzb2Z0d2FyZSBlbXVsYXRpb25zCisjCisKKyMgQ1RSTSB0ZXJtaW5hbCBlbXVsYXRvcgorIyAxLiB1bmRlcmxpbmluZyBpcyBub3QgYWxsb3dlZCB3aXRoIGNvbG9yczogZmlyc3QsIGlzIGlzIHNpbXVsYXRlZCBieQorIyBibGFjayBvbiB3aGl0ZSwgc2Vjb25kLCBpdCBkaXNhYmxlcyBiYWNrZ3JvdW5kIGNvbG9yIG1hbmlwdWxhdGlvbnMuCisjIDIuIEJMSU5LSU5HLCBSRVZFUlNFIGFuZCBCT0xEIGFyZSBhbGxvd2VkIHdpdGggY29sb3JzLAorIyBzbyB3ZSBoYXZlIHRvIHNhdmUgdGhlaXIgc3RhdHVzIGluIHRoZSBzdGF0aWMgcmVnaXN0ZXJzIEEsIEIgYW5kIEgKKyMgcmVzcGVjdGl2ZWx5LCB0byBiZSBhYmxlIHRvIHJlc3RvcmUgdGhlbSB3aGVuIGNvbG9yIGNoYW5nZXMKKyMgKGJlY2F1c2UgYW55IGNvbG9yIGNoYW5nZSB0dXJucyBvZmYgQUxMIGF0dHJpYnV0ZXMpCisjIDMuIDxib2xkPiBhbmQgPHJldj4gc2VxdWVuY2VzIGFsdGVybmF0ZSBtb2RlcywKKyMgcmF0aGVyIHRoYW4gc2ltcGx5ICBlbnRlcmluZyB0aGVtLiAgVGh1cyB3ZSBoYXZlIHRvIGNoZWNrIHRoZQorIyBzdGF0aWMgcmVnaXN0ZXIgQiBhbmQgSCB0byBkZXRlcm1pbmUgdGhlIHN0YXR1cywgYmVmb3JlIHNlbmRpbmcgdGhlCisjIGVzY2FwZSBzZXF1ZW5jZS4KKyMgNC4gPHNncjA+IG5vdyBtdXN0IHNldCB0aGUgc3RhdHVzIG9mIGFsbCAzIHJlZ2lzdGVyIChBLEIsSCkgdG8gemVybworIyBhbmQgdGhlbiByZXNldCBjb2xvcnMKKyMgNS4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHByb3RlY3QgbW9kZSB3b3VsZCBiYWRseSBwZW5hbGl6ZSB0aGUgcGVyZm9ybWFuY2UuCisjIHdlIHdvdWxkIGhhdmUgdG8gdXNlIFxFJmJuIHNlcXVlbmNlIHRvIHR1cm4gb2ZmIGNvbG9ycyAoYXMgd2VsbCBhcyBhbGwKKyMgb3RoZXIgYXR0cmlidXRlcyksIGFuZCBrZWVwIHRoZSBzdGF0dXMgb2YgcHJvdGVjdCBtb2RlIGluIHlldCBhbm90aGVyCisjIHN0YXRpYyB2YXJpYWJsZS4gIElmIHNvbWVvbmUgcmVhbGx5IG5lZWRzIHRoaXMgbW9kZSwgdGhleSB3b3VsZCBoYXZlIHRvCisjIGNyZWF0ZSBhbm90aGVyIHRlcm1pbmZvIGVudHJ5LgorIyA2LiBvcmlnaW5hbCBjb2xvci1wYWlyIGlzIHdoaXRlIG9uIGJsYWNrLgorIyBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgY29sb3JzIGludG8gc3RhdGljIHJlZ2lzdGVycworIyA3LiBzZXQgZm9yZWdyb3VuZCBjb2xvci4gIGl0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHMuCisjICAgMSkgdHVybiBvZmYgYWxsIGF0dHJpYnV0ZXMKKyMgICAyKSB0dXJuIG9uIHRoZSBiYWNrZ3JvdW5kIGFuZCB2aWRlbyBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBiZWVuIHR1cm5lZAorIyAgICAgIG9uIGJlZm9yZSAodGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gc3RhdGljIHJlZ2lzdGVycyBYLFksWixBLEIsSCxEKS4KKyMgICAzKSB0dXJuIG9uIGZvcmVncm91bmQgYXR0cmlidXRlcworIyAgIDQpIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGZvcmVncm91bmQgaW50byBVLFYsVyBzdGF0aWMgcmVnaXN0ZXJzCisjIDguIHR1cm4gb24gYmFja2dyb3VuZDogc2ltaWxhciB0byB0dXJuIG9uIGZvcmVncm91bmQgYWJvdmUKK2N0cm18QyB0ZXJtaW5hbCBlbXVsYXRvciwKKwlhbSwgYmNlLCB4b24sCisJY29sb3JzIzgsIGNvbHMjODAsIGxoIzAsIGxpbmVzIzI0LCBsbSMwLCBsdyMwLCBuY3YjMiwgbmxhYiMwLAorCXBhaXJzIzYzLCBwYiMxOTIwMCwgdnQjNiwKKwliZWw9XkcsIGJsaW5rPVxFJmRBJXsxfSVQQSwKKwlib2xkPSU/JWdIJXswfSU9JXRcRSZkSCV7MX0lUEglOywgY2J0PVxFaSwKKwljbGVhcj1cRUhcRUosIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEUmYSVwMiVkYyVwMSVkWSwgY3V1MT1cRUEsIGRjaDE9XEVQJDwyPiwgZGwxPVxFTSwKKwllZD1cRUosIGVsPVxFSywgaHBhPVxFJmElcDElZEMsIGh0PVwwMTEkPDI+LCBodHM9XEUxLAorCWlsMT1cRUwsIGluZD1eSiwgaXA9JDwyPiwgaXMyPVxFJmpBXHIsIGticz1eSCwga2N1YjE9XEV1XHIsCisJa2N1ZDE9XEV3XHIsIGtjdWYxPVxFdlxyLCBrY3V1MT1cRXRcciwga2YxPVxFcFxyLAorCWtmMj1cRXFcciwga2YzPVxFclxyLCBrZjQ9XEVzXHIsIGtmNT1cRXRcciwga2Y2PVxFdVxyLAorCWtmNz1cRXZcciwga2Y4PVxFd1xyLCBraG9tZT1cRXBcciwKKwlvcD1cRSZiblxFJmJCXEUmYkdcRSZiUiV7MH0lUFglezB9JVBZJXswfSVQWiV7MX0lUFclezF9JVBWJXsxfSVQVSwKKwlyZXY9JT8lZ0IlezB9JT0ldFxFJmRCJXsxfSVQQiU7LCBybWlyPVxFUiwgcm1reD1cRSZqQSwKKwlzZXRiPVxFJmJuJT8lZ0EldFxFJmRBJTslPyVnQiV0XEUmZEIlOyU/JWdIJXRcRSZkSCU7JT8lZ1UldFxFJmJSJTslPyVnViV0XEUmYkclOyU/JWdXJXRcRSZiQiU7JT8lcDElezF9JSYldFxFJmJiJXsxfSVlJXswfSU7JVBaJT8lcDElezJ9JSYldFxFJmJnJXsxfSVlJXswfSU7JVBZJT8lcDElezR9JSYldFxFJmJyJXsxfSVlJXswfSU7JVBYLAorCXNldGY9XEUmYm4lPyVnQSV0XEUmZEElOyU/JWdCJXRcRSZkQiU7JT8lZ0gldFxFJmRIJTslPyVnWCV0XEUmYnIlOyU/JWdZJXRcRSZiZyU7JT8lZ1oldFxFJmJiJTslPyVwMSV7MX0lJiV0XEUmYkIlezF9JWUlezB9JTslUFclPyVwMSV7Mn0lJiV0XEUmYkclezF9JWUlezB9JTslUFYlPyVwMSV7NH0lJiV0XEUmYlIlezF9JWUlezB9JTslUFUsCisJc2dyPVxFJmRAJXswfSVQQSV7MH0lUEIlezB9JVBEJXswfSVQSCU/JXAxJXAzJXA1JXwlfCV0XEUmZEIlezF9JVBCJTslPyVwNCV0XEUmZEElezF9JVBBJTslPyVwNiV0XEUmZEglezF9JVBIJTslPyVwMiV0XEUmZEQlOywKKwlzZ3IwPVxFJmRAJXswfSVQQSV7MH0lUEIlezB9JVBILCBzbWlyPVxFUSwgc21reD1cRSZqQiwKKwlzbXNvPVxFJmRELCBzbXVsPVxFJmRELCB0YmM9XEUzLCB2cGE9XEUmYSVwMSVkWSwKKworIyBnczYzMDAgLSBjYW4ndCB1c2UgYmx1ZSBmb3JlZ3JvdW5kLCBpdCBjbGFzaGVzIHdpdGggdW5kZXJsaW5lOworIyBpdCdzIHNpbXVsYXRlZCB3aXRoIGN5YW4KKyMgQnVnOiBUaGUgPG9wPiBjYXBhYmlsaXR5IHByb2JhYmx5IHJlc2V0cyBhdHRyaWJ1dGVzLgorIyAoZ3M2MzAwOiBjb21tZW50ZWQgb3V0IDxybWxuPiAobm8gPHNtbG4+KSAtLWVzcikKK2dzNjMwMHxlbW90c3xBVCZUIFBDNjMwMCB3aXRoIEVNT1RTIHRlcm1pbmFsIGVtdWxhdG9yLAorCWFtLCBiY2UsIG1zZ3IsIHhvbiwKKwljb2xvcnMjOCwgY29scyM4MCwgaXQjOCwgbGluZXMjMjQsIHBhaXJzIzYzLAorCWFjc2M9KytcLFwsLS0uLmBgYWFmZmdnaGhpaWpqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGJsaW5rPVxFWzVtLCBib2xkPVxFWzFtLCBjbGVhcj1cRVtIXEVbSiwgY3I9Xk0sCisJY3ViPVxFWyVwMSVkRCwgY3ViMT1eSCwgY3VkPVxFWyVwMSVkQiwgY3VkMT1eSiwKKwljdWY9XEVbJXAxJWRDLCBjdWYxPVxFW0MsIGN1cD1cRVslaSVwMSVkOyVwMiVkSCwKKwljdXU9XEVbJXAxJWRBLCBjdXUxPVxFW0EsIGRjaD1cRVslcDElZFAsIGRjaDE9XEVbUCwKKwlkbD1cRVslcDElZE0sIGRsMT1cRVtNLCBlZD1cRVtKLCBlbD1cRVtLLCBob21lPVxFW0gsIGh0PV5JLAorCWljaD1cRVslcDElZEAsIGljaDE9XEVbQCwgaWw9XEVbJXAxJWRMLCBpbDE9XEVbTCwgaW5kPV5KLAorCWlzMj1cRVttLCBrYnM9XkgsIGtjYnQ9XlJeSSwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZjE9XEVbMHMsIGtmMj1cRVsyNHMsIGtmMz1cRVsxcywKKwlrZjQ9XEVbMjNzLCBrZjU9XEVbMnMsIGtmNj1cRVsyMnMsIGtmNz1cRVszcywga2Y4PVxFWzIxcywKKwlraG9tZT1cRVtILCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwgb3A9XEVbPzttLCByZXY9XEVbN20sCisJcmk9XEVbTCwgcm1hY3M9XEVbMTBtLCByczE9XEVjLCBzZXRiPVxFWz87JXAxJWRtLAorCXNldGY9XEVbPyU/JXAxJXswfSU9JXQwJWUlcDElezF9JT0ldDIlZSVwMSV7MX0lLSVkJTttLAorCXNncjA9XEVbbVxFWzEwbSwgc21hY3M9XEVbMTFtLCBzbXNvPVxFWzFtLCBzbXVsPVxFWzRtLAorCisjIEZyb206IDxlYXJsZUBzbWVhZ29sLlVVQ1A+IDI5IE9jdCA4NSAwNTo0MDoxOCBHTVQKKyMgTVMtS2VybWl0IHdpdGggSGVhdGgtMTkgZW11bGF0aW9uIG1vZGUgZW5hYmxlZAorIyAoaDE5azogY2hhbmdlZCAiOnB0QDoiIHRvICI6aXRAIgoraDE5a3xoMTlrZXJtaXR8aGVhdGhraXQgZW11bGF0aW9uIHByb3ZpZGVkIGJ5IEtlcm1pdCAobm8gYXV0byBtYXJnaW4pLAorCWFtQCwgZGEsIGRiLCB4dCwKKwlpdEAsCisJaHRALCB1c2U9aDE5LXUsCisKKyMgQXBwbGUgTWFjaW50b3NoIHdpdGggVmVyc2F0ZXJtLCBhIHRlcm1pbmFsIGVtdWxhdG9yIGRpc3RyaWJ1dGVkIGJ5IFN5bmVyZ3kKKyMgU29mdHdhcmUgKGZvcm1lcmx5IFBlcmlwaGVyYWxzIENvbXB1dGVycyAmIFN1cHBsaWVzLCBJbmMpIG9mCisjIDI0NTcgUGVya2lvbWVuIEF2ZS4sIFJlYWRpbmcsIFBBIDE5NjA2LCAxLTgwMC04NzYtODM3Ni4gIFRoZXkgY2FuCisjIGFsc28gYmUgcmVhY2hlZCBhdCBzdXBwb3J0QHN5bmVyZ3kuY29tLgordmVyc2F0ZXJtfHZlcnNhdGVybSB2dDEwMCBlbXVsYXRvciBmb3IgdGhlIG1hY2ludG9zaCwKKwlhbSwgeGVubCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwliZWw9XkcsIGJsaW5rPVxFWzVtJDwyLz4sIGJvbGQ9XEVbMW0kPDIvPiwKKwljbGVhcj1cRVs7SFxFWzJKJDw1MC8+LCBjcj1eTSwgY3NyPVxFWyVpJXAxJWQ7JXAyJWRyLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XEVbQyQ8Mi8+LAorCWN1cD1cRVslaSVwMSVkOyVwMiVkSCQ8NS8+LCBjdXUxPVxFW0EkPDIvPiwKKwlkY2gxPVxFWzFQJDw3Lz4sIGRsMT1cRVsxTSQ8OS8+LCBlZD1cRVtKJDw1MC8+LAorCWVsPVxFW0skPDMvPiwgaG9tZT1cRVtILCBodD1eSSwgaWNoMT1cRVsxQCQ8Ny8+LAorCWlsMT1cRVsxTCQ8OS8+LCBpczI9XEVbMTsyNHJcRVsyNDsxSCwga2JzPV5ILCBrY3ViMT1cRU9ELAorCWtjdWQxPVxFT0IsIGtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIGtmMT1cRU9QLCBrZjI9XEVPUSwKKwlrZjM9XEVPUiwga2Y0PVxFT1MsIG5lbD1eTV5KLCByYz1cRTgsIHJldj1cRVs3bSQ8Mi8+LAorCXJmPS91c3Ivc2hhcmUvdGFic2V0L3Z0MTAwLCByaT1cRU0kPDUvPiwKKwlybWt4PVxFPlxFWz8xbCwgcm1zbz1cRVttJDwyLz4sIHJtdWw9XEVbbSQ8Mi8+LCByczE9XEU+LAorCXNjPVxFNywgc2dyMD1cRVttJDwyLz4sIHNta3g9XEU9XEVbPzFoLCBzbXNvPVxFWzdtJDwyLz4sCisJc211bD1cRVs0bSQ8Mi8+LAorCisjIEZyb206IFJpY2sgVGhvbWFzIDxpaG5wNCFidGx1bml4IXJidD4KKyMgKHh0YWxrOiBJIGFkZGVkIDxybWFtPi88c21hbT4gYmFzZWQgb24gdGhlIGluaXQgc3RyaW5nLgoreHRhbGt8SUJNIFBDIHdpdGggeHRhbGsgY29tbXVuaWNhdGlvbiBwcm9ncmFtICh2ZXJzaW9ucyB1cCB0byAzLjQpLAorCWFtLCBtaXIsIG1zZ3IsIHhvbiwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwgdnQjMywgeG1jIzEsCisJYWNzYz1gYGFhZmZnZ2pqa2tsbG1tbm5vb3BwcXFycnNzdHR1dXZ2d3d4eHl5enp7e3x8fX1+fiwKKwliZWw9XkcsIGNsZWFyPVxFW0hcRVtKJDw1MD4sIGNyPV5NLCBjdWI9XEVbJXAxJWRELCBjdWIxPV5ILAorCWN1ZD1cRVslcDElZEIsIGN1ZDE9XkosIGN1Zj1cRVslcDElZEMsIGN1ZjE9XEVbQyQ8Mj4sCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRIJDw1PiwgY3V1PVxFWyVwMSVkQSwKKwljdXUxPVxFW0EkPDI+LCBkbDE9XEVbTSQ8OTk+LCBlZD1cRVtKJDw1MD4sIGVsPVxFW0skPDM+LAorCWVsMT1cRVsxSyQ8Mz4sIGVuYWNzPVxFKEJcRSkwLCBob21lPVxFW0gsIGh0PV5JLCBodHM9XEVILAorCWlsMT1cRVtMJDw5OT4sIGluZD1eSiwga2JzPV5ILCBrY3ViMT1cRU9ELCBrY3VkMT1cRU9CLAorCWtjdWYxPVxFT0MsIGtjdXUxPVxFT0EsIHJpPVxFTSQ8NT4sIHJtYWNzPV5PLCBybWFtPVxFWz83bCwKKwlybWt4PVxFWz8xbFxFPiwgcm1zbz1cRVttXHMsCisJcnMyPVxFPlxFWz8zbFxFWz80bFxFWz81bFxFWz83aFxFWz84aCwgc2dyMD1cRVttLAorCXNtYWNzPV5OLCBzbWFtPVxFWz83aCwgc21reD1cRVs/MWhcRT0sIHNtc289XEVbN21ccywKKwl0YmM9XEVbM2csIHVzZT12dDEwMCtmbmtleXMsCisKKyMgVGhlIG9mZmljaWFsIFBDIHRlcm1pbmFsIGVtdWxhdG9yIHByb2dyYW0gb2YgdGhlIEFUJlQgUHJvZHVjdCBDZW50ZXJzLgorIyBOb3RlIC0gaW5zZXJ0IG1vZGUgY29tbWVudGVkIG91dCAtIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIG9uIEFUJlQgUEMuCitzaW10ZXJtfGF0dHBjIHJ1bm5pbmcgc2ltdGVybSwKKwlhbSwKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVxFSFxFSiwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XEVCLCBjdWYxPVxFQywKKwljdXA9XEU9JXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRVIsCisJZGwxPVxFTSwgZWQ9XEVKLCBlbD1cRUssIGhvbWU9XEVILCBpbDE9XEVMLCBpbmQ9XkosIHJtY3VwPVxFVkUsCisJcm1zbz1cRSZkQCwgc2dyMD1cRSZkQCwgc21jdXA9XEVWUywgc21zbz1cRSZkQiwKKworIyMjIyBEYWlzeSB3aGVlbCBwcmludGVycworIworIyBUaGlzIHNlY3Rpb24gY29sbGVjdHMgRGlhYmxvLCBEVEMsIFhlcm94LCBRdW1lLCBhbmQgb3RoZXIgZGFpc3kKKyMgd2hlZWwgdGVybWluYWxzLiAgVGhlc2UgYXJlIG5vdyBsYXJnZWx5IG9ic29sZXRlLgorIworCisjIChkaWFibG8xNjIwOiByZW1vdmVkIDxpZj0vdXNyL3NoYXJlL3RhYnNldC94ZXJveDE3MjA+LCBubyBzdWNoIGZpbGUgLS0gZXNyKQorZGlhYmxvMTYyMHxkaWFibG8xNzIwfGRpYWJsbzQ1MHxpcHNpfGRpYWJsbyAxNjIwLAorCWhjLCBvcywKKwljb2xzIzEzMiwgaXQjOCwKKwljdWIxPV5ILCBjdWQxPV5KLCBjdXUxPVxFXkosIGhkPVxFRCwgaHBhPVxFXDAxMSVpJXAxJWMsCisJaHQ9XkksIGh0cz1cRTEsIGh1PVxFVSwga2JzPV5ILCB0YmM9XEUyLAorZGlhYmxvMTYyMC1tOHxkaWFibG8xNjQwLW04fGRpYWJsbyAxNjIwIHcvOCBjb2x1bW4gbGVmdCBtYXJnaW4sCisJY29scyMxMjQsCisJaXMyPVxyICAgICAgICBcRTksIHVzZT1kaWFibG8xNjIwLAorIyAoZGlhYmxvMTY0MDogcmVtb3ZlZCA8aWY9L3Vzci9zaGFyZS90YWJzZXQveGVyb3gxNzMwPiwgbm8gc3VjaCBmaWxlIC0tIGVzcikKK2RpYWJsbzE2NDB8ZGlhYmxvMTczMHxkaWFibG8xNzQwfGRpYWJsbzYzMHx4MTcwMHxkaWFibG98eGVyb3h8ZGlhYmxvIDE2NDAsCisJYmVsPV5HLCBybXNvPVxFJiwgcm11bD1cRVIsIHNtc289XEVXLCBzbXVsPVxFRSwKKwl1c2U9ZGlhYmxvMTYyMCwKKyMgKGRpYWJsbzE2NDAtbG06IHJlbW92ZWQgPGlmPS91c3Ivc2hhcmUvdGFic2V0L3hlcm94MTczMC1sbT4sIG5vIHN1Y2gKKyMgZmlsZSAtLSBlc3IpCitkaWFibG8xNjQwLWxtfGRpYWJsby1sbXx4ZXJveC1sbXxkaWFibG8gMTY0MCB3aXRoIGluZGVudGVkIGxlZnQgbWFyZ2luLAorCWNvbHMjMTI0LAorCXJtc289XEUmLCBybXVsPVxFUiwgc21zbz1cRVcsIHNtdWw9XEVFLCB1c2U9ZGlhYmxvMTYyMCwKK2RpYWJsbzE3NDAtbG18NjMwLWxtfDE3MzAtbG18eDE3MDAtbG18ZGlhYmxvIDE3NDAgcHJpbnRlciwKKwl1c2U9ZGlhYmxvMTY0MC1sbSwKKyMgRFRDIDM4MiB3aXRoIFZEVS4gIEhhcyBubyA8ZWQ+IHNvIHdlIGZha2UgaXQgd2l0aCA8ZWw+LiAgU3RhbmRvdXQKKyMgPHNtc289XlBcc1wwMDJeUEY+IHdvcmtzIGJ1dCB3b24ndCBnbyBhd2F5IHdpdGhvdXQgZHluYW1pdGUgPHJtc289XlBcc1wwPi4KKyMgVGhlIHRlcm1pbmFsIGhhcyB0YWJzLCBidXQgSSdtIGdldHRpbmcgdGlyZWQgb2YgZmlnaHRpbmcgdGhlIGJyYWluZGFtYWdlLgorIyBJZiBubyB0YWIgaXMgc2V0IG9yIHRoZSB0ZXJtaW5hbCdzIGluIGEgYmFkIG1vb2QsIGl0IGdsaXRjaGVzIHRoZSBzY3JlZW4KKyMgYXJvdW5kIGFsbCBvZiBtZW1vcnkuICBOb3RlIHRoYXQgcmV0dXJuIHB1dHMgYSBibGFuayAoImEgcmV0dXJuIGNoYXJhY3RlciIpCisjIGluIHRoZSBzcGFjZSB0aGUgY3Vyc29yIHdhcyBhdCwgc28gd2UgdXNlIF5QIHJldHVybiAoYW5kIHRodXMgXlAgbmV3bGluZSBmb3IKKyMgbmV3bGluZSkuICBOb3RlIGFsc28gdGhhdCBpZiB5b3UgdHVybiBvZmYgOnB0OiBhbmQgbGV0IFVuaXggZXhwYW5kIHRhYnMsCisjIGN1cnNlcyB3b24ndCB3b3JrIChzb21lIG9sZCBCU0QgdmVyc2lvbnMpIGJlY2F1c2UgaXQgZG9lc24ndCBjbGVhciB0aGlzIGJpdCwKKyMgYW5kIGN1cnNvciBhZGRyZXNzaW5nIHNlbmRzIGEgdGFiIGZvciByb3cvY29sdW1uIDkuICBXaGF0IGEgbG9zaW5nIHRlcm1pbmFsIQorIyBJIGhhdmUgYmVlbiB1bmFibGUgdG8gZ2V0IHRhYnMgc2V0IGluIGFsbCA5NiBsaW5lcyAtIGl0IGFsd2F5cyBsZWF2ZXMgYXQKKyMgbGVhc3Qgb25lIGxpbmUgd2l0aCBubyB0YWJzIGluIGl0LCBhbmQgb25jZSB5b3UgdGFiIHRocm91Z2ggdGhhdCBsaW5lLAorIyBpdCBjb21wbGV0ZWx5IHdlaXJkcyBvdXQuCisjIChkdGMzODI6IGNoYW5nZSA8cm1jdXA+IHRvIDxzbWN1cD4gLS0gaXQgIGp1c3QgZG9lcyBhIGNsZWFyIC0tZXNyKQorZHRjMzgyfERUQyAzODIsCisJYW0sIGRhLCBkYiwgeGhwLAorCWNvbHMjODAsIGxpbmVzIzI0LCBsbSM5NiwKKwliZWw9XkcsIGNsZWFyPVwwMjBcMDM1JDwyMD4sIGNub3JtPV5QYiwgY3I9XlBeTSwgY3ViMT1eSCwKKwljdWYxPV5QUiwgY3VwPVwwMjBcMDIxJXAyJWMlcDElYywgY3V1MT1eUF5MLCBjdnZpcz1eUEIsCisJZGNoMT1eWCwgZGwxPV5QXlMsIGVkPVwwMjBcMDI1XDAyMFwwMjNcMDIwXDAyMywgZWw9XlBeVSwKKwlob21lPV5QXlIsIGlsMT1eUF5aLCBpbmQ9XkosIHBhZD1cMTc3LCBybWN1cD0sIHJtaXI9XlBpLAorCXJtdWw9XlAgXDAsIHNtY3VwPVwwMjBcMDM1JDwyMD4sIHNtaXI9XlBJLCBzbXVsPV5QIF5QLAorZHRjMzAwc3xEVEMgMzAwcywKKwloYywgb3MsCisJY29scyMxMzIsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3V1MT1eWiwgZmY9XkwsIGhkPVxFaCwgaHQ9XkksCisJaHRzPVxFMSwgaHU9XEVILCBpbmQ9XkosIGticz1eSCwgdGJjPVxFMywKK2dzaXxteXN0ZXJ5IGdzaSB0ZXJtaW5hbCwKKwloYywgb3MsCisJY29scyMxMzIsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3V1MT1eWiwgaGQ9XEVoLCBodD1eSSwgaHU9XEVILAorCWluZD1eSiwKK2FqODMwfGFqODMyfGFqfGFuZGVyc29uIGphY29ic29uLAorCWhjLCBvcywKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdXUxPVxFNywgaGQ9XEU5LCBodT1cRTgsCisJaW5kPV5KLAorIyBGcm9tOiBDaHJpcyBUb3JlayA8Y2hyaXNAZ3lyZS51bWQuZWR1PiBUaHUsIDcgTm92IDg1IDE4OjIxOjU4IEVTVAorYWo1MTB8QW5kZXJzb24tSmFjb2Jzb24gbW9kZWwgNTEwLAorCWFtLCBtaXIsCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XkwsIGN1YjE9XkgsIGN1ZjE9XEVYLAorCWN1cD1cRSMlcDElezMyfSUrJWMlcDIlezMyfSUrJWMsIGN1dTE9XEVZLAorCWRjaDE9LjEqXEUnRCwgZGwxPVxFJkQkPDIqLz4sIGVkPVxFJ1AsIGVsPVxFJ0wsIGljaDE9LAorCWlsMT1cRSZJJDwyKi8+LCBpcD0kPC4xKi8+LCBrY3ViMT1cRVcsIGtjdWQxPVxFWiwKKwlrY3VmMT1cRVgsIGtjdXUxPVxFWSwgcGFkPVwxNzcsIHJtY3VwPVxFIk4sIHJtaXI9XEUnSiwKKwlybXNvPVxFIkksIHJtdWw9XEUiVSwgc21jdXA9XEUiTiwgc21pcj1cRSdJLCBzbXNvPVxFIkksCisJc211bD1cRSJVLAorIyBGcm9tOiA8Y2Jvc2chdWNidmF4IXB1ci1lZSFjaW5jeSFjaHJpcz4gVGh1IEF1ZyAyMCAwOTowOToxOCAxOTgxCisjIFRoaXMgaXMgaW5jb21wbGV0ZSwgYnV0IGl0J3MgYSBzdGFydC4KK25lYzU1MjB8bmVjfHNwaW53cml0ZXJ8bmVjIDU1MjAsCisJaGMsIG9zLAorCWNvbHMjMTMyLCBpdCM4LAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1dTE9XEU5LCBmZj1eTCwKKwloZD1cRV1zXG5cRV1XLCBodD1eSSwgaHRzPVxFMSwgaHU9XEVdc1xFOVxFXVcsIGluZD1eSiwKKwlrYnM9XkgsIHRiYz1cRTMsCitxdW1lNXxxdW1lfFF1bWUgU3ByaW50IDUsCisJaGMsIG9zLAorCWNvbHMjODAsIGl0IzgsCisJYmVsPV5HLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3V1MT1eWiwgZmY9XkwsIGhkPVxFaCwgaHQ9XkksCisJaHRzPVxFMSwgaHU9XEVILCBpbmQ9XkosIGticz1eSCwgdGJjPVxFMywKKyMgSSBzdXNwZWN0IHRoZSB4ZXJveCAxNzIwIGlzIHRoZSBzYW1lIGFzIHRoZSBkaWFibG8gMTYyMC4KK3hlcm94MTcyMHx4MTcyMHx4MTc1MHx4ZXJveCAxNzIwLAorCWhjLCBvcywKKwljb2xzIzEzMiwgaXQjOCwKKwliZWw9XkcsIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBmZj1eTCwgaHQ9XkksIGh0cz1cRTEsIGluZD1eSiwKKwl0YmM9XEUyLAorCisjIyMjIE1pc2NlbGxhbmVvdXMgb2Jzb2xldGUgdGVybWluYWxzLCBtYW51ZmFjdHVyZXJzIHVua25vd24KKyMKKyMgSWYgeW91IGhhdmUgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIChsaWtlLCBhIG1hbnVmYWN0dXJlcidzIG5hbWUsCisjIGFuZCBhIGRhdGUgb24gdGhlIHNlcmlhbC1udW1iZXIgcGxhdGUpIHBsZWFzZSBzZW5kIGl0IQorCitjYWQ2OC0zfGNnYzN8Y2FkNjggYmFzaWMgbW9uaXRvciB0cmFuc3BhcmVudCBtb2RlIHNpemUgMyBjaGFycywKKwlPVGJzLCBhbSwKKwljb2xzIzczLCBsaW5lcyMzNiwKKwljbGVhcj1eWiwgY3ViMT1eSCwgY3VmMT1eTCwgY3V1MT1eSywgaG9tZT1eXiwKK2NhZDY4LTJ8Y2djMnxjYWQ2OCBiYXNpYyBtb25pdG9yIHRyYW5zcGFyZW50IG1vZGUgc2l6ZSAyIGNoYXJzLAorCU9UYnMsIGFtLAorCWNvbHMjODUsIGxpbmVzIzM5LAorCWNsZWFyPV5aLCBjdWIxPV5ILCBjdWYxPV5MLCBjdXUxPV5LLCBob21lPV5eLCBrY3ViMT1cRTMsCisJa2N1ZDE9XEUyLCBrY3VmMT1cRTQsIGtjdXUxPVxFMSwga2YxPVxFNSwga2YyPVxFNiwga2YzPVxFNywKKwlrZjQ9XEU4LCBybXNvPVxFbV5DLCBzbXNvPVxFbV5MLAorY29wczEwfGNvcHN8Y29wcy0xMHxjb3BzIDEwLAorCWFtLCBidywKKwljb2xzIzgwLCBsaW5lcyMyNCwKKwliZWw9XkcsIGNsZWFyPVwwMzAkPDMwLz4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPV5MLAorCWN1cD1cMDIwJXAxJXszMn0lKyVjJXAyJXszMn0lKyVjLCBjdXUxPV5LLCBlZD1eVywgZWw9XlYsCisJaW5kPV5KLCBrYnM9XkgsIGtjdWIxPV5ILCBrY3VkMT1eSiwga2N1ZjE9XkwsIGtjdXUxPV5LLAorCWtob21lPV5ZLAorIyAoZDEzMjogcmVtb3ZlZCBkdXBsaWNhdGUgOmljPVxFNTosCisjIG1lcmdlZCBpbiBjYXBhYmlsaXRpZXMgZnJvbSBhIEJSTCBlbnRyeSAtLSBlc3IpCitkMTMyfGRhdGFncmFwaGl4fGRhdGFncmFwaGl4IDEzMmEsCisJZGEsIGRiLCBpbiwKKwljb2xzIzgwLCBsaW5lcyMzMCwKKwliZWw9XkcsIGNsZWFyPV5MLCBjbm9ybT1cRW1cRW4sIGNyPV5NLCBjdWIxPV5ILCBjdWQxPV5KLAorCWN1ZjE9XEVMLCBjdXA9XEU4JWklcDElM2QlcDIlM2QsIGN1dTE9XEVLLCBjdnZpcz1cRXgsCisJZGNoMT1cRTYsIGhvbWU9XEVULCBodD1eSSwgaWNoMT1cRTUsIGlsMT1cRTMsIGluZD1eSiwga2JzPV5ILAorCWtjdWIxPV5ILCBrY3VkMT1eSiwgbmVsPV5NXkosIHJpPVxFdywKKyMgVGhlIGQ4MDAgd2FzIGFuIGVhcmx5IHBvcnRhYmxlIHRlcm1pbmFsIGZyb20gYy4xOTg0LTg1IHRoYXQgbG9va2VkIGEgbG90CisjIGxpa2UgdGhlIG9yaWdpbmFsIENvbXBhcSBgbHVuY2hib3gnIHBvcnRhYmxlIChidXQgbm8gaGFuZGxlKS4gIEl0IGhhZCBhIHZ0MjIwCisjIG1vZGUgKHdoaWNoIGlzIHdoYXQgdGhpcyBlbnRyeSBsb29rcyBsaWtlKSBhbmQgc2V2ZXJhbCBvdGhlciBsZXNzZXIta25vd24KKyMgZW11bGF0aW9ucy4KK2Q4MDB8RGlyZWN0IDgwMC9BLAorCU9UYnMsIGFtLCBkYSwgZGIsIG1zZ3IsIHhocCwKKwljb2xzIzgwLCBpdCM4LCBsaW5lcyMyNCwKKwlhY3NjPWBgYTFmeGdxaDBqWWs/bFptQG5Fb29wcHFEcnJzc3RDdTR2QXdCeDN5eXp6e3t8fH19fn4sCisJYmVsPV5HLCBjbGVhcj1cRVsxOzFIXEVbMkosIGNub3JtPVxFWz4xMmgsIGNyPV5NLCBjdWIxPV5ILAorCWN1ZDE9XkosIGN1ZjE9XEVbQywgY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsCisJY3Z2aXM9XEVbPjEybCwgZWQ9XEVbSiwgZWw9XEVbSywgaHQ9XkksIGluZD1cRUQsIGtjdWIxPVxFW0QsCisJa2N1ZDE9XEVbQiwga2N1ZjE9XEVbQywga2N1dTE9XEVbQSwga2YxPVxFT1AsIGtmMj1cRU9RLAorCWtmMz1cRU9SLCBrZjQ9XEVPUywga2Y1PVxFT1QsIGtmNj1cRU9VLCBrZjc9XEVPViwga2Y4PVxFT1csCisJcmk9XEVNLCBybWFjcz1cRVttLCBybXNvPVxFW20sIHJtdWw9XEVbbSwgc2dyMD1cRVttLAorCXNtYWNzPVxFWzFtLCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorZGlnaWxvZ3xkaWdpbG9nIDMzMywKKwlPVGJzLAorCWNvbHMjODAsIGxpbmVzIzE2LAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkksIGN1dTE9Xk8sIGVsPV5YLAorCWhvbWU9Xk4sIGluZD1eSiwKKyMgVGhlIERXSyB3YXMgYSB0ZXJtaW5hbCBtYW51ZmFjdHVyZWQgaW4gdGhlIFNvdmlldCBVbmlvbiBjLjE5ODYKK2R3a3xkd2stdnR8ZHdrIHRlcm1pbmFsLAorCWFtLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWFjc2M9K1xeXCxRLVMuTTBcMTc3YCthXDpmJ2cjaCNpI2pYa0NsSm1Gbk5vfnFVc190RXVQdlxcd0t4V35fLAorCWJlbD1eRywgY2xlYXI9XEVIXEVKLCBjcj1eTSwgY3ViMT1eSCwgY3VkMT1eSiwgY3VmMT1cRUMsCisJY3VwPVxFWSVwMSV7MzJ9JSslYyVwMiV7MzJ9JSslYywgY3V1MT1cRUEsIGRjaDE9XEVQLAorCWVkPVxFSiwgZWw9XEVLLCBob21lPVxFSCwgaHQ9XkksIGljaDE9XEVRLCBpbmQ9XkosIGticz1cMTc3LAorCWtjdWIxPVxFRCwga2N1ZDE9XEVCLCBrY3VmMT1cRUMsIGtjdXUxPVxFQSwga2RjaDE9XEVlLAorCWtmMT1cRWYxLCBrZjEwPVxFZjAsIGtmMj1cRWYyLCBrZjM9XEVmMywga2Y0PVxFZjQsIGtmNT1cRWY1LAorCWtmNj1cRWY2LCBrZjc9XEVmNywga2Y4PVxFZjgsIGtmOT1cRWY5LCBraWNoMT1cRWQsIGtucD1cRWgsCisJa3BwPVxFZywgbmVsPV5NXkosIHJldj1cRVQsIHJpPVxFUywgcm1hY3M9XEVHLCBybXNvPVxFWCwKKwlzZ3IwPVxFWCwgc21hY3M9XEVGLCBzbXNvPVxFVCwKK2VudjIzMHxlbnZpc2lvbjIzMHxlbnZpc2lvbiAyMzAgZ3JhcGhpY3MgdGVybWluYWwsCisJeGVubEAsCisJbWMwPVxFWzBpLCBtYzQ9XEVbNGksIG1jNT1cRVs1aSwKKwlzZ3I9XEVbJT8lcDEldDsxJTslPyVwMiV0OzQlOyU/JXAzJXQ7NyU7JT8lcDQldDs1JTslPyVwNiV0OzElO20kPDI+LAorCXVzZT12dDEwMCwKKyMgVGhlc2UgZXhlY3Vwb3J0cyB3ZXJlIGltcGFjdC1wcmludGVyIHR0eXMgd2l0aCBhIDMwLSBvciBtYXliZSAxNS1jcHMgYWNvdXN0aWMKKyMgY291cGxlciBhdHRhY2hlZCwgdGhlIHdob2xlIHJpZyBmaXR0aW5nIGluIGEgc3VpdGNhc2UgYW5kIG1vcmUgb3IgbGVzcworIyBwb3J0YWJsZS4gIEhvdCBzdHVmZiBmb3IgYy4xOTc3IDotKSAtLSBlc3IKK2VwNDh8ZXA0MDgwfGV4ZWN1cG9ydCA0MDgwLAorCU9UYnMsIGFtLCBvcywKKwljb2xzIzgwLAorCWJlbD1eRywgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGhkPV5cLCBodT1eXiwgaW5kPV5KLAorZXA0MHxlcDQwMDB8ZXhlY3Vwb3J0IDQwMDAsCisJY29scyMxMzYsIHVzZT1lcDQwODAsCisjIEFkYW0gVGhvbXBzb24gPGF0aG9tcHNvQHBhbmdlYS5jYT4gdGVsbHMgdXM6CisjIEluZm9ybWVyIHNlcmllcyAtIHRoZXNlIGFyZSBhbGwgcG9ydGFibGUgdW5pdHMsIHJlc2VtYmxpbmcgb2xkZXIKKyMgYXV0b21hdGljIGJyZWFkLWJha2luZyBtYWNoaW5lcy4gIFRoZSB0ZXJtaW5hbCBsb29rcyBsaWtlIGEgYGNsYW1zaGVsbCcKKyMgZGVzaWduLCBidXQgaXNuJ3QuICBUaGUgc3RydWN0dXJlIGlzIHNpbWlsYXIgdG8gdGhlIERpcmVjdCB0ZXJtaW5hbHMsCisjIGJ1dCBvbmx5IGhhbGYgdGhlIHdpZHRoLiAgVGhlIGVudGlyZSB1bml0IGlzIG9ubHkgYWJvdXQgMTAiIHdpZGUuCisjIEl0IGZlYXR1cmVzIGFuIDgiIHNjcmVlbiAoNiIgb3IgNyIgaWYgeW91IGhhdmUgY29sb3IhKSwgYW5kIGFuIDkieDYiCisjIGtleWJvYXJkLiAgQWxsIHRoZSBrZXlzIGFyZSBjcmFtbWVkIHRvZ2V0aGVyLCBtdWNoIGxpa2Ugc29tZSBsYXB0b3AKKyMgUENzIHRvZGF5LCBidXQgcGVyaGFwcyBsZXNzIHdlbGwgb3JnYW5pemVkLi4uYWxsIHRoZXNlIHVuaXRzIGhhdmUgYQorIyBiZXdpbGRlcmluZyBhcnJheSBvZiBwbHVncyBvbiB0aGUgYmFjaywgaW5jbHVkaW5nIGEgYnVpbHQtaW4gbW9kZW0uCisjIFRoZSAzMDUgd2FzIGEgY29sb3IgdmVyc2lvbiBvZiB0aGUgMzA0OyB0aGUgMzA2IGFuZCAzMDcgd2VyZSBtb25vIGFuZAorIyBjb2xvciB0ZXJtaW5hbHMgYnVpbHQgZm9yIElCTSBiaXN5bmMgcHJvdG9jb2xzLgorIyBGcm9tOiBQYXVsIExlb25kaXMgPHVubGxhYkBhbWJlci5iZXJrZWxleS5lZHU+CitpZm1yfEluZm9ybWVyIEQzMDQsCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJY2xlYXI9XEVaLCBjdWIxPV5ILCBjdWQxPV5KLCBjdWYxPVxFQywKKwljdXA9XEVZJXAyJXszMn0lKyVjJXAxJXszMn0lKyVjLCBjdXUxPVxFQSwgZGNoMT1cRVxcLAorCWVkPVxFLywgZWw9XEVRLCBob21lPVxFSCwgaWNoMT1cRVssIHJpPVxFbiwgcm1zbz1cRUssIHNncjA9XEVLLAorCXNtc289XEVKLAorIyBFbnRyeSBsYXJnZWx5IGJhc2VkIG9uIHd5NjAgYW5kIGhhcyB0aGUgZmVhdHVyZXMgb2Ygd3k2MGFrLgorb3B1czNuMSt8RXNwcml0IE9wdXMzbjErIGluIHd5NjAgbW9kZSB3aXRoIEFOU0kgYXJyb3cga2V5cywKKwlhbSwgYncsIGhzLCBrbSwgbWlyLCBtc2dyLCB1bCwgeG9uLAorCWNvbHMjODAsIGxoIzEsIGxpbmVzIzI0LCBsdyM4LCBubGFiIzgsIHdzbCM4MCwKKwlhY3NjPTB3YV9oW2p1a3Nscm1xbnhxenR0dXl2XXdweHYsIGJlbD1eRywgYmxpbms9XEVHMiwKKwljYnQ9XEVJLCBjaXZpcz1cRWAwLCBjbGVhcj1cRSokPDEwMD4sIGNub3JtPVxFYDEsIGNyPV5NLAorCWN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9XkwsIGN1cD1cRWElaSVwMSVkUiVwMiVkQywgY3V1MT1eSywKKwlkY2gxPVxFVyQ8MTE+LCBkaW09XEVHcCwgZGwxPVxFUiQ8NT4sIGRzbD1cRXooXHIsCisJZWQ9XEVZJDwxMDA+LCBlbD1cRVQsIGZzbD1eTSwgaG9tZT1cMDM2JDwyPiwgaHQ9XDAxMSQ8NT4sCisJaHRzPVxFMSwgaWY9L3Vzci9zaGFyZS90YWJzZXQvc3RkLCBpbDE9XEVFJDw0PiwgaW5kPV5KLAorCWlwPSQ8Mz4sCisJaXMyPVxFYFw6XEVlKFxFT1xFZTZcRWM0MVxFfjRcRWMyMVxFZC9cRXp6JlxFW0FcMTc3XEV6eidcRVtCXDE3N1xFenooXEVbRFwxNzdcRXp6KVxFW0NcMTc3XEV6ejxcRVtRXDE3N1xFenpgXEVbRlwxNzdcRUExKlxFWkgxMiwKKwlrSE9NPVxFeywga2JzPV5ILCBrY2J0PVxFSSwga2N1YjE9XEVbRCwga2N1ZDE9XEVbQiwKKwlrY3VmMT1cRVtDLCBrY3V1MT1cRVtBLCBrZGNoMT1cRVcsIGtkbDE9XEVSLCBrZWQ9XEVZLAorCWtlbD1cRVQsIGtlbmQ9XEVbRiwga2VudD1cRTcsIGtmMT1eQUBcciwga2YxMD1eQUlcciwKKwlrZjExPV5BSlxyLCBrZjEyPV5BS1xyLCBrZjEzPV5BTFxyLCBrZjE0PV5BTVxyLCBrZjE1PV5BTlxyLAorCWtmMTY9XkFPXHIsIGtmMj1eQUFcciwga2YzPV5BQlxyLCBrZjQ9XkFDXHIsIGtmNT1eQURcciwKKwlrZjY9XkFFXHIsIGtmNz1eQUZcciwga2Y4PV5BR1xyLCBrZjk9XkFIXHIsIGtob21lPV5eLAorCWtpY2gxPVxFUSwga2lsMT1cRUUsIGtucD1cRUssIGtwcD1cRUosIGtwcnQ9XEVQLCBrcnBsPVxFciwKKwltYzA9XEVQLCBtYzQ9XlQsIG1jNT1eUiwgbmVsPVxyXG4kPDM+LAorCXBmbG9jPVxFWjIlcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGZ4PVxFWjElcDElezYzfSUrJWMlcDIlc1wxNzcsCisJcGxuPVxFeiVwMSV7NDd9JSslYyVwMiVzXHIsIHByb3Q9XEUpLCByaT1cRWokPDc+LAorCXJtYWNzPVxFSF5DLCBybWFtPVxFZC4sIHJtY3VwPSwgcm1pcj1cRXIsIHJtbG49XEVBMTEsCisJcm14b249XEVjMjAsIHJzMT1cRX4hXEV+NCQ8MTUwPiwgcnMyPVxFZUYkPDE1MD4sCisJcnMzPVxFd0dcRWUoJDwxNTA+LAorCXNncj0lPyVwOCV0XEUpJWVcRSglOyU/JXA5JXRcRUhcMDAyJWVcRUhcMDAzJTtcRUclezQ4fSU/JXAyJXA2JXwldCV7OH0lfCU7JT8lcDElcDMlfCVwNiV8JXQlezR9JXwlOyU/JXA0JXQlezJ9JXwlOyU/JXAxJXA1JXwldCV7NjR9JXwlOyU/JXA3JXQlezF9JXwlOyVjLAorCXNncjA9XEUoXEVIXDAwM1xFRzBcRWNELCBzbWFjcz1cRUheQiwgc21hbT1cRWQvLAorCXNtY3VwPVxFenomXEVbQVwxNzdcRXp6J1xFW0JcMTc3XEV6eihcRVtEXDE3N1xFenopXEVbQ1wxNzdcRXp6PFxFW1FcMTc3LAorCXNtaXI9XEVxLCBzbWxuPVxFQTEwLCBzbXhvbj1cRWMyMSwgdGJjPVxFMCwgdHNsPVxFeigsCisJdWM9XEVHOFxFRzAsIHVzZT1hZG0rc2dyLAordGVsZXRlY3xUZWxldGVjIERhdGFzY3JlZW4sCisJT1RicywgYW0sCisJY29scyM4MCwgbGluZXMjMjQsCisJYmVsPV5HLCBjbGVhcj1eTCwgY3I9Xk0sIGN1YjE9XkgsIGN1ZDE9XkosIGN1ZjE9Xl8sIGN1dTE9XkssCisJaG9tZT1eXiwgaW5kPV5KLAorIyBGcm9tOiBNYXJrIERvcm5mZWxkIDxyb213YUB1Y2J2YXguYmVya2VsZXkuZWR1PgorIyBUaGlzIGRlc2NyaXB0aW9uIGlzIGZvciB0aGUgTEFOUEFSIFRlY2hub2xvZ2llcyBWSVNJT04gMzIyMAorIyB0ZXJtaW5hbCBmcm9tIDE5ODQvODUuICBUaGUgZnVuY3Rpb24ga2V5IGRlZmluaXRpb25zIGswLWs1IHJlcHJlc2VudCB0aGUKKyMgZWRpdCBrZXlwYWQ6IEZJTkQsIElOU0VSVCBIRVJFLCBSRU1PVkUsIFNFTEVDVCwgUFJFViBTQ1JFRU4sCisjIE5FWFQgU0NSRUVOLiBUaGUga2V5IGRlZmluaXRpb25zIGs2LWs5IHJlcHJlc2VudCB0aGUgUEYxIHRvIFBGNCBrZXlzLgorIworIyBLZW5uZXRoIFJhbmRlbGwgPGtlbnJAZGF0YW1ldHJpY3MuY29tPiB3cml0ZXMgb24gMzEgRGVjIDE5OTg6CisjIEkgaGFkIGEgY291cGxlIG9mIHNjb3BlcyAoMzIyMSkgbGlrZSB0aGlzIG9uY2Ugd2hlcmUgSSB1c2VkIHRvIHdvcmssIGFyb3VuZAorIyB0aGUgMTk4NyB0aW1lIGZyYW1lIGlmIG1lbW9yeSBzZXJ2ZXMgbWUgY29ycmVjdGx5LiAgVGhlc2Ugc2NvcGVzIHdlcmUgbWFkZQorIyBieSBhbiBvdXRmaXQgY2FsbGVkIExBTlBBUiBUZWNobm9sb2dpZXMsIGFuZCB3ZXJlIG1lYW50IHRvIG1lIERFQyBWVCAyMjAKKyMgY29tcGF0aWJsZS4gIFRoZSAzMjIwIHdhcyBhIHBsYWluIHRleHQgdGVybWluYWwgbGlrZSB0aGUgVlQtMjIwLCB0aGUgMzIyMQorIyB3YXMgYSBsaWtlIHRoZSBWVC0yNDAgKG1vbm9jaHJvbWUgd2l0aCBSZWdpcyArIFNpeGVsIGdyYXBoaWNzKSwgYW5kIHRoZSAzMjIyCisjIHdhcyBsaWtlIHRoZSBWVC0yNDEgKGNvbG9yIHdpdGggUmVnaXMgKyBTaXhlbCBHcmFwaGljcykuICBUaGVzZSB0ZXJtaW5hbHMKKyMgKDMyMjEpIGNvc3QgYWJvdXQgJDE1MDAgZWFjaCwgYW5kIG9uZSB3YXMgYWx3YXlzIGJyb2tlbiAtLSBoYWQgdG8gYmUgc2VudAorIyBiYWNrIHRvIHRoZSBzaG9wIGZvciByZXBhaXJzLgorIyBUaGUgb25seSByZWFsIGFkdmFudGFnZSB0aGVzZSBzY29wZXMgaGFkIG92ZXIgdGhlIFZULTI0MCdzIHdlcmU6CisjIDEpIFRoZXkgd2VyZSBmYXN0ZXIgaW4gdGhlIFJlZ2lzIGRpc3BsYXksIG9yIGF0IGxlYXN0IHRoZSBvbmVzIEkgZGlkCisjIDIpIFRoZXkgaGFkIGEgaGFuZHkgZGVidWdnaW5nIGZlYXR1cmUgd2hlcmUgeW91IGNvdWxkIHNwbGl0LXNjcmVlbiB0aGUKKyMgc2NvcGUsIHRoZSBncmFwaGljcyB3b3VsZCBhcHBlYXIgb24gdGhlIHRvcCwgYW5kIHRoZSBSRUdJUyBjb21tYW5kcyB3b3VsZAorIyBhcHBlYXIgb24gdGhlIGJvdHRvbS4gIEkgZG9uJ3QgcmVtZW1iZXIgdGhlIFZULTI0MHMgYmVpbmcgYWJsZSB0byBkbyB0aGF0LgorIyBJIHdvdWxkIHN3ZWFyIHRoYXQgTEFOUEFSIFRlY2hub2xvZ2llcyB3YXMgaW4gTUEgc29tZXBsYWNlLCBidXQgc2luY2UgSQorIyBkb24ndCB3b3JrIGF0IHRoZSBzYW1lIHBsYWNlIGFueW1vcmUsIGFuZCB0aG9zZSB0ZXJtaW5hbHMgYW5kIG1hbnVhbHMgd2VyZQorIyBsb25nIHNpbmNlIGp1bmtlZCwgSSBjYW5ub3QgYmUgYW55IG1vcmUgc3VyZSB0aGFuIHRoYXQuCisjCisjICh2MzIyMDogcmVtb3ZlZCBvYnNvbGV0ZSAiOmtuIzEwOiIsCisjIEkgYWRkZWQgPHJtYW0+LzxzbWFtPiBiYXNlZCBvbiB0aGUgaW5pdCBzdHJpbmcgLS0gZXNyKQordjMyMjB8TEFOUEFSIFZpc2lvbiBJSSBtb2RlbCAzMjIwLzMyMjEvMzIyMiwKKwlPVGJzLCBhbSwgbWlyLCB4ZW5sLAorCWNvbHMjODAsIGl0IzgsIGxpbmVzIzI0LAorCWNsZWFyPVxFW0hcRVtKLCBjdWIxPV5ILCBjdWYxPVxFW0MsCisJY3VwPVxFWyVpJXAxJWQ7JXAyJWRILCBjdXUxPVxFW0EsIGRjaDE9XEVbUCwgZGwxPVxFW00sCisJZWQ9XEVbSiwgZWw9XEVbSywgaHQ9XkksIGlsMT1cRVtMLAorCWlzMj1cRT5cRVs/M2xcRVs/N2hcRVs/OGhcRVtwLCBrY3ViMT1cRVtELCBrY3VkMT1cRVtCLAorCWtjdWYxPVxFW0MsIGtjdXUxPVxFW0EsIGtmMD1cRVsxfiwga2YxPVxFWzJ+LCBrZjI9XEVbM34sCisJa2YzPVxFWzR+LCBrZjQ9XEVbNX4sIGtmNT1cRVs2fiwga2Y2PVxFW09QLCBrZjc9XEVbT1EsCisJa2Y4PVxFW09SLCBrZjk9XEVbT1MsIGtob21lPVxFW0gsIHJpPVxFTSwgcm1hbT1cRVs/N2wsCisJcm1pcj1cRVs0bCwgcm1reD1cRT4sIHJtc289XEVbbSwgcm11bD1cRVttLCBzZ3IwPVxFW20sCisJc21hbT1cRVs/N2gsIHNtaXI9XEVbNGgsIHNta3g9XEU9LCBzbXNvPVxFWzdtLCBzbXVsPVxFWzRtLAorIyMjIyMjIyMgSUNIL0lDSDEgVkVSU1VTIFJNSVIvU01JUgorIworIyBTb21lIG5vbi1jdXJzZXMgYXBwbGljYXRpb25zIGdldCBjb25mdXNlZCBpZiBib3RoIGljaC9pY2gxIGFuZCBybWlyL3NtaXIKKyMgYXJlIHByZXNlbnQ7IHRoZSBzeW1wdG9tIGlzIGRvdWJsZWQgY2hhcmFjdGVycyBpbiBhbiB1cGRhdGUgdXNpbmcgaW5zZXJ0LgorIyBUaGVzZSBhcHBsaWNhdGlvbnMgYXJlIHRlY2huaWNhbGx5IGNvcnJlY3Q7IGluIGJvdGggNC4zQlNEIHRlcm1jYXAgYW5kCisjIHRlcm1pbmZvLCB5b3UncmUgbm90IGFjdHVhbGx5IHN1cHBvc2VkIHRvIHNwZWNpZnkgYm90aCBpY2gvaWNoMSBhbmQgcm1pci9zbWlyCisjIHVubGVzcyB0aGUgdGVybWluYWwgbmVlZHMgYm90aC4gIFRvIG15IGtub3dsZWRnZSwgbm8gdGVybWluYWwgc3RpbGwgaW4gdGhpcworIyBmaWxlIHJlcXVpcmVzIGJvdGggb3RoZXIgdGhhbiB0aGUgdmVyeSBvYnNvbGV0ZSBkbTI1MDAuCisjCisjIEZvciBuY3Vyc2VzLWJhc2VkIGFwcGxpY2F0aW9ucyB0aGlzIGlzIG5vdCBhIHByb2JsZW0sIGFzIG5jdXJzZXMgdXNlcworIyBvbmUgb3IgdGhlIG90aGVyIGFzIGFwcHJvcHJpYXRlIGJ1dCBuZXZlciBtaXhlcyB0aGUgdHdvLiAgVGhlcmVmb3JlIHdlCisjIGhhdmUgbm90IGNvcnJlY3RlZCBlbnRyaWVzIGxpa2UgYGxpbnV4JyBhbmQgYHh0ZXJtJyB0aGF0IHNwZWNpZnkgYm90aC4KKyMgSWYgeW91IHNlZSBkb3VibGVkIGNoYXJhY3RlcnMgZnJvbSB0aGVzZSwgdXNlIHRoZSBsaW51eC1uaWMgYW5kIHh0ZXJtLW5pYworIyBlbnRyaWVzIHRoYXQgc3VwcHJlc3MgaWNoL2ljaDEuICBBbmQgdXBncmFkZSB0byBuY3Vyc2VzIQorIworCisjIyMjIyMjIyBWVDEwMC9BTlNJL0lTTyA2NDI5L0VDTUEtNDgvUEMtVEVSTSBURVJNSU5BTCBTVEFOREFSRFMKKyMKKyMgQU5TSSBYMy42NCBoYXMgYmVlbiB3aXRoZHJhd24gYW5kIHJlcGxhY2VkIGJ5IEVDTUEtNDguICBUaGUgSVNPIDY0MjkgYW5kCisjIEVDTUEtNDggc3RhbmRhcmRzIGFyZSBzYWlkIHRvIGJlIGFsbW9zdCBpZGVudGljYWwsIGJ1dCBhcmUgbm90IHRoZSBzYW1lCisjIGFzIFgzLjY0ICh0aG91Z2ggZm9yIHByYWN0aWNhbCBwdXJwb3NlcyB0aGV5IGFyZSBjbG9zZSBzdXBlcnNldHMgb2YgaXQpLgorIworIyBZb3UgY2FuIG9idGFpbiBFQ01BLTQ4IGZvciBmcmVlIGJ5IHNlbmRpbmcgZW1haWwgdG8gaGVscGRlc2tAZWNtYS5jaAorIyByZXF1ZXN0aW5nIHRoZSBzdGFuZGFyZChzKSB5b3Ugd2FudCAoaS5lLiBFQ01BLTQ4LCAiQ29udHJvbCBGdW5jdGlvbnMgZm9yCisjIENvZGVkIENoYXJhY3RlciBTZXRzIiksIGluY2x1ZGUgeW91ciBzbmFpbC1tYWlsIGFkZHJlc3MsIGFuZCB5b3Ugc2hvdWxkCisjIHJlY2VpdmUgdGhlIGRvY3VtZW50IGluIGR1ZSBjb3Vyc2UuICBEb24ndCBleHBlY3QgYW4gZW1haWwgYWNrbm93bGVkZ2VtZW50LgorIworIyBSZWxhdGVkIHN0YW5kYXJkcyBpbmNsdWRlICJYMy40LTE5Nzc6IEFtZXJpY2FuIE5hdGlvbmFsIFN0YW5kYXJkIENvZGUgZm9yCisjIEluZm9ybWF0aW9uIEludGVyY2hhbmdlIiAodGhlIEFTQ0lJIHN0YW5kYXJkKSBhbmQgIlgzLjQxLjE5NzQ6CisjIENvZGUtRXh0ZW5zaW9uIFRlY2huaXF1ZXMgZm9yIFVzZSB3aXRoIHRoZSA3LUJpdCBDb2RlZCBDaGFyYWN0ZXIgU2V0IG9mCisjIEFtZXJpY2FuIE5hdGlvbmFsIFN0YW5kYXJkIGZvciBJbmZvcm1hdGlvbiBJbnRlcmNoYW5nZS4iICBJIGJlbGlldmUgKGJ1dAorIyBhbSBub3QgY2VydGFpbikgdGhhdCB0aGVzZSBhcmUgZWZmZWN0aXZlbHkgaWRlbnRpY2FsIHRvIEVDTUEtNiBhbmQgRUNNQS0zNQorIyByZXNwZWN0aXZlbHkuCisjCisKKyMjIyMgVlQxMDAvQU5TSS9FQ01BLTQ4CisjCisjIEFOU0kgU3RhbmRhcmQgKFgzLjY0KSBDb250cm9sIFNlcXVlbmNlcyBmb3IgVmlkZW8gVGVybWluYWxzIGFuZCBQZXJpcGhlcmFscworIyBhbmQgRUNNQS00OCBDb250cm9sIEZ1bmN0aW9ucyBmb3IgQ29kZWQgQ2hhcmFjdGVyIFNldHMuCisjCisjIE11Y2ggb2YgdGhlIGNvbnRlbnQgb2YgdGhpcyBjb21tZW50IGlzIGFkYXB0ZWQgZnJvbSBhIHRhYmxlIHByZXBhcmVkIGJ5CisjIFJpY2hhcmQgU2h1Zm9yZCwgYmFzZWQgb24gYSAxOTg0IEJ5dGUgYXJ0aWNsZS4gIFRlcm1pbmZvIGNvcnJlc3BvbmRlbmNlcywKKyMgZGlzY3Vzc2lvbiBvZiBzb21lIHRlcm1pbmZvLXJlbGF0ZWQgaXNzdWVzLCBhbmQgdXBkYXRlcyB0byBjYXB0dXJlIEVDTUEtNDgKKyMgaGF2ZSBiZWVuIGFkZGVkLiAgQ29udHJvbCBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIEVDTUEtNDggb25seSBhcmUgdGFnZ2VkCisjIHdpdGggKiBhZnRlciB0aGVpciBuYW1lcy4KKyMKKyMgVGhlIHRhYmxlIGlzIGEgY29tcGxldGUgbGlzdCBvZiB0aGUgZGVmaW5lZCBBTlNJIFgzLjY0L0VDTUEtNDggY29udHJvbAorIyBzZXF1ZW5jZXMuICBJbiB0aGUgbWFpbiB0YWJsZSwgXEUgc3RhbmRzIGZvciBhbiBlc2NhcGUgKFwwMzMpIGNoYXJhY3RlciwKKyMgU1BDIGZvciBzcGFjZS4gIFBuIHN0YW5kcyBmb3IgYSBzaW5nbGUgbnVtZXJpYyBwYXJhbWV0ZXIgdG8gYmUgaW5zZXJ0ZWQKKyMgaW4gZGVjaW1hbCBBU0NJSS4gIFBzIHN0YW5kcyBmb3IgYSBsaXN0IG9mIHN1Y2ggcGFyYW1ldGVycyBzZXBhcmF0ZWQgYnkKKyMgc2VtaWNvbG9ucy4gIFBhcmFtZXRlciBtZWFuaW5ncyBmb3IgbW9zdCBwYXJhbWV0cml6ZWQgc2VxdWVuY2VzIGFyZQorIyBkZWNyaWJlZCBpbiB0aGUgbm90ZXMuCisjCisjIFNlcXVlbmNlICAgICBTZXF1ZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyICAgb3IKKyMgTW5lbW9uaWMgICAgIE5hbWUgICAgICAgICAgICAgIFNlcXVlbmNlICAgICAgICAgICBWYWx1ZSAgICAgIE1vZGUgICB0ZXJtaW5mbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBUEMgIEFwcGxpY2F0biBQcm9ncmFtIENvbW1hbmQgXEUgXyAgICAgICAgICAgICAgICAtICAgICAgICAgRGVsaW0gIC0KKyMgQkVMICBCZWxsICogICAgICAgICAgICAgICAgICAgIF5HICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICBiZWwKKyMgQlBIICBCcmVhayBQZXJtaXR0ZWQgSGVyZSAqICAgIFxFIEIgICAgICAgICAgICAgICAgLSAgICAgICAgICogICAgICAtCisjIEJTICAgQmFja3BhY2UgKiAgICAgICAgICAgICAgICBeSCAgICAgICAgICAgICAgICAgIC0gICAgICAgICBFRiAgICAgLQorIyBDQU4gIENhbmNlbCAqICAgICAgICAgICAgICAgICAgXlggICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0gICAoQSkKKyMgQ0JUICBDdXJzb3IgQmFja3dhcmQgVGFiICAgICAgIFxFIFsgUG4gWiAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBjYnQKKyMgQ0NIICBDYW5jZWwgUHJldmlvdXMgQ2hhcmFjdGVyIFxFIFQgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIENIQSAgQ3Vyc29yIEhvcml6bnRhbCBBYnNvbHV0ZSBcRSBbIFBuIEcgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgaHBhIChCKQorIyBDSFQgIEN1cnNvciBIb3Jpem9udGFsIFRhYiAgICAgXEUgWyBQbiBJICAgICAgICAgICAxICAgICAgICAgZUYgICAgIHRhYiAoQykKKyMgQ01EICBDb2RpbmcgTWV0aG9kIERlbGltaXRlciAqIFxFCisjIENOTCAgQ3Vyc29yIE5leHQgTGluZSAgICAgICAgICBcRSBbIFBuIEUgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgbmVsIChEKQorIyBDUEwgIEN1cnNvciBQcmVjZWRpbmcgTGluZSAgICAgXEUgWyBQbiBGICAgICAgICAgICAxICAgICAgICAgZUYgICAgIC0KKyMgQ1BSICBDdXJzb3IgUG9zaXRpb24gUmVwb3J0ICAgIFxFIFsgUG4gOyBQbiBSICAgICAgMSwgMSAgICAgIC0gICAgICAtICAgKEUpCisjIENTSSAgQ29udHJvbCBTZXF1ZW5jZSBJbnRybyAgICBcRSBbICAgICAgICAgICAgICAgIC0gICAgICAgICBJbnRybyAgLQorIyBDVEMgIEN1cnNvciBUYWJ1bGF0aW9uIENvbnRyb2wgXEUgWyBQcyBXICAgICAgICAgICAwICAgICAgICAgZUYgICAgIC0gICAoRikKKyMgQ1VCICBDdXJzb3IgQmFja3dhcmQgICAgICAgICAgIFxFIFsgUG4gRCAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBjdWIKKyMgQ1VEICBDdXJzb3IgRG93biAgICAgICAgICAgICAgIFxFIFsgUG4gQiAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBjdWQKKyMgQ1VGICBDdXJzb3IgRm9yd2FyZCAgICAgICAgICAgIFxFIFsgUG4gQyAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBjdWYKKyMgQ1VQICBDdXJzb3IgUG9zaXRpb24gICAgICAgICAgIFxFIFsgUG4gOyBQbiBIICAgICAgMSwgMSAgICAgIGVGICAgICBjdXAgKEcpCisjIENVVSAgQ3Vyc29yIFVwICAgICAgICAgICAgICAgICBcRSBbIFBuIEEgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgY3V1CisjIENWVCAgQ3Vyc29yIFZlcnRpY2FsIFRhYiAgICAgICBcRSBbIFBuIFkgICAgICAgICAgIC0gICAgICAgICBlRiAgICAgLSAgIChIKQorIyBEQSAgIERldmljZSBBdHRyaWJ1dGVzICAgICAgICAgXEUgWyBQbiBjICAgICAgICAgICAwICAgICAgICAgLSAgICAgIC0KKyMgREFRICBEZWZpbmUgQXJlYSBRdWFsaWZpY2F0aW9uIFxFIFsgUHMgbyAgICAgICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIERDSCAgRGVsZXRlIENoYXJhY3RlciAgICAgICAgICBcRSBbIFBuIFAgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgZGNoCisjIERDUyAgRGV2aWNlIENvbnRyb2wgU3RyaW5nICAgICBcRSBQICAgICAgICAgICAgICAgIC0gICAgICAgICBEZWxpbSAgLQorIyBETCAgIERlbGV0ZSBMaW5lICAgICAgICAgICAgICAgXEUgWyBQbiBNICAgICAgICAgICAxICAgICAgICAgZUYgICAgIGRsCisjIERMRSAgRGF0YSBMaW5rIEVzY2FwZSAqICAgICAgICBeUCAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBETUkgIERpc2FibGUgTWFudWFsIElucHV0ICAgICAgXEUgXCAgICAgICAgICAgICAgICAtICAgICAgICAgRnMgICAgIC0KKyMgRFNSICBEZXZpY2UgU3RhdHVzIFJlcG9ydCAgICAgIFxFIFsgUHMgbiAgICAgICAgICAgMCAgICAgICAgIC0gICAgICAtICAgKEkpCisjIERUQSAgRGltZW5zaW9uIFRleHQgQXJlYSAqICAgICBcRSBbIFBuIDsgUG4gU1BDIFQgIC0gICAgICAgICBQQyAgICAgLQorIyBFQSAgIEVyYXNlIGluIEFyZWEgICAgICAgICAgICAgXEUgWyBQcyBPICAgICAgICAgICAwICAgICAgICAgZUYgICAgIC0gICAoSikKKyMgRUNIICBFcmFzZSBDaGFyYWN0ZXIgICAgICAgICAgIFxFIFsgUG4gWCAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBlY2gKKyMgRUQgICBFcmFzZSBpbiBEaXNwbGF5ICAgICAgICAgIFxFIFsgUHMgSiAgICAgICAgICAgMCAgICAgICAgIGVGICAgICBlZCAgKEopCisjIEVGICAgRXJhc2UgaW4gRmllbGQgICAgICAgICAgICBcRSBbIFBzIE4gICAgICAgICAgIDAgICAgICAgICBlRiAgICAgLQorIyBFTCAgIEVyYXNlIGluIExpbmUgICAgICAgICAgICAgXEUgWyBQcyBLICAgICAgICAgICAwICAgICAgICAgZUYgICAgIGVsICAoSikKKyMgRU0gICBFbmQgb2YgTWVkaXVtICogICAgICAgICAgIF5ZICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIEVNSSAgRW5hYmxlIE1hbnVhbCBJbnB1dCAgICAgICBcRSBiICAgICAgICAgICAgICAgICAgICAgICAgICBGcyAgICAgLQorIyBFTlEgIEVucXVpcmUgICAgICAgICAgICAgICAgICAgXkUgICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgRU9UICBFbmQgT2YgVHJhbnNtaXNzaW9uICAgICAgIF5EICAgICAgICAgICAgICAgICAgLSAgICAgICAgICogICAgICAtCisjIEVQQSAgRW5kIG9mIFByb3RlY3RlZCBBcmVhICAgICBcRSBXICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLSAgIChLKQorIyBFU0EgIEVuZCBvZiBTZWxlY3RlZCBBcmVhICAgICAgXEUgRyAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgRVNDICBFc2NhcGUgICAgICAgICAgICAgICAgICAgIF5bICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIEVUQiAgRW5kIFRyYW5zbWlzc2lvbiBCbG9jayAgICBeVyAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBFVFggIEVuZCBvZiBUZXh0ICAgICAgICAgICAgICAgXkMgICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgRkYgICBGb3JtIEZlZWQgICAgICAgICAgICAgICAgIF5MICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIEZOSyAgRnVuY3Rpb24gS2V5ICogICAgICAgICAgICBcRSBbIFBuIFNQQyBXICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBHQ0MgIEdyYXBoaWMgQ2hhciBDb21iaW5hdGlvbiogXEUgWyBQbiA7IFBuIFNQQyBCICAtICAgICAgICAgLSAgICAgIC0KKyMgRk5UICBGb250IFNlbGVjdGlvbiAgICAgICAgICAgIFxFIFsgUG4gOyBQbiBTUEMgRCAgMCwgMCAgICAgIEZFICAgICAtCisjIEdTTSAgR3JhcGhpYyBTaXplIE1vZGlmeSAgICAgICBcRSBbIFBuIDsgUG4gU1BDIEIgIDEwMCwgMTAwICBGRSAgICAgLSAgIChMKQorIyBHU1MgIEdyYXBoaWMgU2l6ZSBTZWxlY3Rpb24gICAgXEUgWyBQbiBTUEMgQyAgICAgICBub25lICAgICAgRkUgICAgIC0KKyMgSFBBICBIb3J6IFBvc2l0aW9uIEFic29sdXRlICAgIFxFIFsgUG4gYCAgICAgICAgICAgMSAgICAgICAgIEZFICAgICAtICAgKEIpCisjIEhQQiAgQ2hhciBQb3NpdGlvbiBCYWNrd2FyZCAgICBcRSBbIGogICAgICAgICAgICAgIDEgICAgICAgICBGRSAgICAgLQorIyBIUFIgIEhvcnogUG9zaXRpb24gUmVsYXRpdmUgICAgXEUgWyBQbiBhICAgICAgICAgICAxICAgICAgICAgRkUgICAgIC0gICAoTSkKKyMgSFQgICBIb3Jpem9udGFsIFRhYiAqICAgICAgICAgIF5JICAgICAgICAgICAgICAgICAgLSAgICAgICAgIEZFICAgICAtICAgKE4pCisjIEhUSiAgSG9yeiBUYWIgdy9KdXN0aWZpY2F0aW9uICBcRSBJICAgICAgICAgICAgICAgIC0gICAgICAgICBGRSAgICAgLQorIyBIVFMgIEhvcml6b250YWwgVGFiIFNldCAgICAgICAgXEUgSCAgICAgICAgICAgICAgICAtICAgICAgICAgRkUgICAgIGh0cworIyBIVlAgIEhvcnogJiBWZXJ0aWNhbCBQb3NpdGlvbiAgXEUgWyBQbiA7IFBuIGYgICAgICAxLCAxICAgICAgRkUgICAgIC0gICAoRykKKyMgSUNIICBJbnNlcnQgQ2hhcmFjdGVyICAgICAgICAgIFxFIFsgUG4gQCAgICAgICAgICAgMSAgICAgICAgIGVGICAgICBpY2gKKyMgSURDUyBJRCBEZXZpY2UgQ29udHJvbCBTdHJpbmcgIFxFIFsgU1BDIE8gICAgICAgICAgLSAgICAgICAgICogICAgICAtCisjIElHUyAgSUQgR3JhcGhpYyBTdWJyZXBlcnRvaXJlICBcRSBbIFNQQyBNICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBJTCAgIEluc2VydCBMaW5lICAgICAgICAgICAgICAgXEUgWyBQbiBMICAgICAgICAgICAxICAgICAgICAgZUYgICAgIGlsCisjIElORCAgSW5kZXggICAgICAgICAgICAgICAgICAgICBcRSBEICAgICAgICAgICAgICAgIC0gICAgICAgICBGRSAgICAgLQorIyBJTlQgIEludGVycnVwdCAgICAgICAgICAgICAgICAgXEUgYSAgICAgICAgICAgICAgICAtICAgICAgICAgRnMgICAgIC0KKyMgSkZZICBKdXN0aWZ5ICAgICAgICAgICAgICAgICAgIFxFIFsgUHMgU1BDIEYgICAgICAgMCAgICAgICAgIEZFICAgICAtCisjIElTMSAgSW5mbyBTZXBhcmF0b3IgIzEgKiAgICAgICBeXyAgICAgICAgICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBJUzIgIEluZm8gU2VwYXJhdG9yICMxICogICAgICAgXl4gICAgICAgICAgICAgICAgICAtICAgICAgICAgKiAgICAgIC0KKyMgSVMzICBJbmZvIFNlcGFyYXRvciAjMSAqICAgICAgIF5dICAgICAgICAgICAgICAgICAgLSAgICAgICAgICogICAgICAtCisjIElTNCAgSW5mbyBTZXBhcmF0b3IgIzEgKiAgICAgICBeXCAgICAgICAgICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBMRiAgIExpbmUgRmVlZCAgICAgICAgICAgICAgICAgXkogICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgTFMxUiBMb2NraW5nIFNoaWZ0IFJpZ2h0IDEgKiAgIFxFIH4gICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIExTMiAgTG9ja2luZyBTaGlmdCAyICogICAgICAgICBcRSBuICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBMUzJSIExvY2tpbmcgU2hpZnQgUmlnaHQgMiAqICAgXEUgfSAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgTFMzICBMb2NraW5nIFNoaWZ0IDMgKiAgICAgICAgIFxFIG8gICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIExTM1IgTG9ja2luZyBTaGlmdCBSaWdodCAzICogICBcRSB8ICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBNQyAgIE1lZGlhIENvcHkgICAgICAgICAgICAgICAgXEUgWyBQcyBpICAgICAgICAgICAwICAgICAgICAgLSAgICAgIC0gICAoUykKKyMgTVcgICBNZXNzYWdlIFdhaXRpbmcgICAgICAgICAgIFxFIFUgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIE5BSyAgTmVnYXRpdmUgQWNrbm93bGVkZ2UgKiAgICBeVSAgICAgICAgICAgICAgICAgIC0gICAgICAgICAqICAgICAgLQorIyBOQkggIE5vIEJyZWFrIEhlcmUgKiAgICAgICAgICAgXEUgQyAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgTkVMICBOZXh0IExpbmUgICAgICAgICAgICAgICAgIFxFIEUgICAgICAgICAgICAgICAgLSAgICAgICAgIEZFICAgICBuZWwgKEQpCisjIE5QICAgTmV4dCBQYWdlICAgICAgICAgICAgICAgICBcRSBbIFBuIFUgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgLQorIyBOVUwgIE51bGwgKiAgICAgICAgICAgICAgICAgICAgXkAgICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgT1NDICBPcGVyYXRpbmcgU3lzdGVtIENvbW1hbmQgIFxFIF0gICAgICAgICAgICAgICAgLSAgICAgICAgIERlbGltICAtCisjIFBFQyAgUHJlcy4gRXhwYW5kL0NvbnRyYWN0ICogICBcRSBQbiBTUEMgWiAgICAgICAgIDAgICAgICAgICAtICAgICAgLQorIyBQRlMgIFBhZ2UgRm9ybWF0IFNlbGVjdGlvbiAqICAgXEUgUG4gU1BDIEogICAgICAgICAwICAgICAgICAgLSAgICAgIC0KKyMgUExEICBQYXJ0aWFsIExpbmUgRG93biAgICAgICAgIFxFIEsgICAgICAgICAgICAgICAgLSAgICAgICAgIEZFICAgICAtICAgKFQpCisjIFBMVSAgUGFydGlhbCBMaW5lIFVwICAgICAgICAgICBcRSBMICAgICAgICAgICAgICAgIC0gICAgICAgICBGRSAgICAgLSAgIChVKQorIyBQTSAgIFByaXZhY3kgTWVzc2FnZSAgICAgICAgICAgXEUgXiAgICAgICAgICAgICAgICAtICAgICAgICAgRGVsaW0gIC0KKyMgUFAgICBQcmVjZWRpbmcgUGFnZSAgICAgICAgICAgIFxFIFsgUG4gViAgICAgICAgICAgMSAgICAgICAgIGVGICAgICAtCisjIFBQQSAgUGFnZSBQb3NpdGlvbiBBYnNvbHV0ZSAqICBcRSBbIFBuIFNQQyBQICAgICAgIDEgICAgICAgICBGRSAgICAgLQorIyBQUEIgIFBhZ2UgUG9zaXRpb24gQmFja3dhcmQgKiAgXEUgWyBQbiBTUEMgUiAgICAgICAxICAgICAgICAgRkUgICAgIC0KKyMgUFBSICBQYWdlIFBvc2l0aW9uIEZvcndhcmQgKiAgIFxFIFsgUG4gU1BDIFEgICAgICAgMSAgICAgICAgIEZFICAgICAtCisjIFBUWCAgUGFyYWxsZWwgVGV4dHMgKiAgICAgICAgICBcRSBbIFwgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBQVTEgIFByaXZhdGUgVXNlIDEgICAgICAgICAgICAgXEUgUSAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgUFUyICBQcml2YXRlIFVzZSAyICAgICAgICAgICAgIFxFIFIgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFFVQUQgVHlwb2dyYXBoaWMgUXVhZGRpbmcgICAgICBcRSBbIFBzIFNQQyBIICAgICAgIDAgICAgICAgICBGRSAgICAgLQorIyBSRVAgIFJlcGVhdCBDaGFyIG9yIENvbnRyb2wgICAgXEUgWyBQbiBiICAgICAgICAgICAxICAgICAgICAgLSAgICAgIHJlcAorIyBSSSAgIFJldmVyc2UgSW5kZXggICAgICAgICAgICAgXEUgTSAgICAgICAgICAgICAgICAtICAgICAgICAgRkUgICAgIC0gICAoVikKKyMgUklTICBSZXNldCB0byBJbml0aWFsIFN0YXRlICAgIFxFIGMgICAgICAgICAgICAgICAgLSAgICAgICAgIEZzICAgICAtCisjIFJNICAgUmVzZXQgTW9kZSAqICAgICAgICAgICAgICBcRSBbIFBzIGwgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLSAgIChXKQorIyBTQUNTIFNldCBBZGQuIENoYXIuIFNlcC4gKiAgICAgXEUgWyBQbiBTUEMgLyAgICAgICAwICAgICAgICAgLSAgICAgIC0KKyMgU0FQViBTZWwuIEFsdC4gUHJlc2VudC4gVmFyLiAqIFxFIFsgUHMgU1BDIF0gICAgICAgMCAgICAgICAgIC0gICAgICAtICAgKFgpCisjIFNDSSAgU2luZ2xlLUNoYXIgSW50cm9kdWNlciAgICBcRSBaICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTQ08gIFNlbC4gQ2hhci4gT3JpZW50YXRpb24gKiAgXEUgWyBQbiA7IFBuIFNQQyBrICAtICAgICAgICAgLSAgICAgIC0KKyMgU0NTICBTZXQgQ2hhci4gU3BhY2luZyAqICAgICAgIFxFIFsgUG4gU1BDIGcgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNEICAgU2Nyb2xsIERvd24gICAgICAgICAgICAgICBcRSBbIFBuIFQgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgcmluCisjIFNEUyAgU3RhcnQgRGlyZWN0ZWQgU3RyaW5nICogICBcRSBbIFBuIF0gICAgICAgICAgIDEgICAgICAgICAtICAgICAgLQorIyBTRUUgIFNlbGVjdCBFZGl0aW5nIEV4dGVudCAgICAgXEUgWyBQcyBRICAgICAgICAgICAwICAgICAgICAgLSAgICAgIC0gICAoWSkKKyMgU0VGICBTaGVldCBFamVjdCAmIEZlZWQgKiAgICAgIFxFIFsgUHMgOyBQcyBTUEMgWSAgMCwwICAgICAgIC0gICAgICAtCisjIFNHUiAgU2VsZWN0IEdyYXBoaWMgUmVuZGl0aW9uICBcRSBbIFBzIG0gICAgICAgICAgIDAgICAgICAgICBGRSAgICAgc2dyIChPKQorIyBTSFMgIFNlbGVjdCBDaGFyLiBTcGFjaW5nICogICAgXEUgWyBQcyBTUEMgSyAgICAgICAwICAgICAgICAgLSAgICAgIC0KKyMgU0kgICBTaGlmdCBJbiAgICAgICAgICAgICAgICAgIF5PICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtICAgKFApCisjIFNJTUQgU2VsLiBJbXAuIE1vdmUgRGlyZWN0LiAqICBcRSBbIFBzIF4gICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTTCAgIFNjcm9sbCBMZWZ0ICAgICAgICAgICAgICAgXEUgWyBQbiBTUEMgQCAgICAgICAxICAgICAgICAgZUYgICAgIC0KKyMgU0xIICBTZXQgTGluZSBIb21lICogICAgICAgICAgIFxFIFsgUG4gU1BDIFUgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNMTCAgU2V0IExpbmUgTGltaXQgKiAgICAgICAgICBcRSBbIFBuIFNQQyBWICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTTFMgIFNldCBMaW5lIFNwYWNpbmcgKiAgICAgICAgXEUgWyBQbiBTUEMgaCAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU00gICBTZWxlY3QgTW9kZSAgICAgICAgICAgICAgIFxFIFsgUHMgaCAgICAgICAgICAgbm9uZSAgICAgIC0gICAgICAtICAgKFcpCisjIFNPICAgU2hpZnQgT3V0ICAgICAgICAgICAgICAgICBeTiAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLSAgIChRKQorIyBTT0ggIFN0YXJ0IE9mIEhlYWRpbmcgKiAgICAgICAgXkEgICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU09TICBTdGFydCBvZiBTdHJpbmcgKiAgICAgICAgIFxFIFggICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNQQSAgU3RhcnQgb2YgUHJvdGVjdGVkIEFyZWEgICBcRSBWICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLSAgIChaKQorIyBTUEQgIFNlbGVjdCBQcmVzLiBEaXJlY3Rpb24gKiAgXEUgWyBQcyA7IFBzIFNQQyBTICAwLDAgICAgICAgLSAgICAgIC0KKyMgU1BIICBTZXQgUGFnZSBIb21lICogICAgICAgICAgIFxFIFsgUHMgU1BDIEcgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNQSSAgU3BhY2luZyBJbmNyZW1lbnQgICAgICAgICBcRSBbIFBuIDsgUG4gU1BDIEcgIG5vbmUgICAgICBGRSAgICAgLQorIyBTUEwgIFNldCBQYWdlIExpbWl0ICogICAgICAgICAgXEUgWyBQcyBTUEMgaiAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU1BRUiBTZXQgUHIuIFF1YWwuICYgUmFwaWQuICogIFxFIFsgUHMgU1BDIFggICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIFNSICAgU2Nyb2xsIFJpZ2h0ICAgICAgICAgICAgICBcRSBbIFBuIFNQQyBBICAgICAgIDEgICAgICAgICBlRiAgICAgLQorIyBTUkNTIFNldCBSZWR1Y2VkIENoYXIuIFNlcC4gKiAgXEUgWyBQbiBTUEMgZiAgICAgICAwICAgICAgICAgLSAgICAgIC0KKyMgU1JTICBTdGFydCBSZXZlcnNlZCBTdHJpbmcgKiAgIFxFIFsgUHMgWyAgICAgICAgICAgMCAgICAgICAgIC0gICAgICAtCisjIFNTQSAgU3RhcnQgb2YgU2VsZWN0ZWQgQXJlYSAgICBcRSBGICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTU1UgIFNlbGVjdCBTaXplIFVuaXQgKiAgICAgICAgXEUgWyBQbiBTUEMgSSAgICAgICAwICAgICAgICAgLSAgICAgIC0KKyMgU1NXICBTZXQgU3BhY2UgV2lkdGggKiAgICAgICAgIFxFIFsgUG4gU1BDIFsgICAgICAgbm9uZSAgICAgIC0gICAgICAtCisjIFNTMiAgU2luZ2xlIFNoaWZ0IDIgKEcyIHNldCkgICBcRSBOICAgICAgICAgICAgICAgIC0gICAgICAgICBJbnRybyAgLQorIyBTUzMgIFNpbmdsZSBTaGlmdCAzIChHMyBzZXQpICAgXEUgTyAgICAgICAgICAgICAgICAtICAgICAgICAgSW50cm8gIC0KKyMgU1QgICBTdHJpbmcgVGVybWluYXRvciAgICAgICAgIFxFIFwgICAgICAgICAgICAgICAgLSAgICAgICAgIERlbGltICAtCisjIFNUQUIgU2VsZWN0aXZlIFRhYnVsYXRpb24gKiAgICBcRSBbIFBuIFNQQyBeICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBTVFMgIFNldCBUcmFuc21pdCBTdGF0ZSAgICAgICAgXEUgUyAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU1RYICBTdGFydCBwZiBUZXh0ICogICAgICAgICAgIF5CICAgICAgICAgICAgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFNVICAgU2Nyb2xsIFVwICAgICAgICAgICAgICAgICBcRSBbIFBuIFMgICAgICAgICAgIDEgICAgICAgICBlRiAgICAgaW5kbgorIyBTVUIgIFN1YnN0aXR1dGUgKiAgICAgICAgICAgICAgXlogICAgICAgICAgICAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgU1ZTICBTZWxlY3QgTGluZSBTcGFjaW5nICogICAgIFxFIFsgUG4gU1BDIFwgICAgICAgMSAgICAgICAgIC0gICAgICAtCisjIFNZTiAgU3luY2hyb25vdXMgSWRsZSAqICAgICAgICBeRiAgICAgICAgICAgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBUQUMgIFRhYnVsLiBBbGlnbmVkIENlbnRlcmVkICogXEUgWyBQbiBTUEMgYiAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgVEFMRSBUYWJ1bC4gQWwuIExlYWRpbmcgRWRnZSAqIFxFIFsgUG4gU1BDIGEgICAgICAgLSAgICAgICAgIC0gICAgICAtCisjIFRBVEUgVGFidWwuIEFsLiBUcmFpbGluZyBFZGdlKiBcRSBbIFBuIFNQQyBgICAgICAgIC0gICAgICAgICAtICAgICAgLQorIyBUQkMgIFRhYiBDbGVhciAgICAgICAgICAgICAgICAgXEUgWyBQcyBnICAgICAgICAgICAwICAgICAgICAgRkUgICAgIHRiYworIyBUQ0MgIFRhYnVsLiBDZW50ZXJlZCBvbiBDaGFyICogXEUgWyBQbiBTUEMgYyAgICAgICAtICAgICAgICAgLSAgICAgIC0KKyMgVFNSICBUYWJ1bGF0aW9uIFN0b3AgUmVtb3ZlICAqIFxFIFsgUG4gU1BDIGQgICAgICAgLSAgICAgICAgIEZFICAgICAtCisjIFRTUyAgVGhpbiBTcGFjZSBTcGVjaWZpY2F0aW9uICBcRSBbIFBuIFNDIEUgICAgICAgIG5vbmUgICAgICBGRSAgICAgLQorIyBWUEEgIFZlcnQuIFBvc2l0aW9uIEFic29sdXRlICAgXEUgWyBQbiBkICAgICAgICAgICAxICAgICAgICAgRkUgICAgIHZwYQorIyBWUEIgIExpbmUgUG9zaXRpb24gQmFja3dhcmQgKiAgXEUgWyBQbiBrICAgICAgICAgICAxICAgICAgICAgRkUgICAgIC0KKyMgVlBSICBWZXJ0LiBQb3NpdGlvbiBSZWxhdGl2ZSAgIFxFIFsgUG4gZSAgICAgICAgICAgMSAgICAgICAgIEZFICAgICAtICAgKFIpCisjIFZUICAgVmVydGljYWwgVGFidWxhdGlvbiAqICAgICBeSyAgICAgICAgICAgICAgICAgIC0gICAgICAgICBGRSAgICAgLQorIyBWVFMgIFZlcnRpY2FsIFRhYnVsYXRpb24gU2V0ICAgXEUgSiAgICAgICAgICAgICAgICAtICAgICAgICAgRkUgICAgIC0KKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE5vdGVzOgorIworIyBTb21lIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgbGlzdGVkIGluIHRoZSBFQ01BLTQ4IHN0YW5kYXJkIHdpdGhvdXQKKyMgYmVpbmcgYXNzaWduZWQgZnVuY3Rpb25zIHJlbGV2YW50IHRvIHRlcm1pbmFsIGNvbnRyb2wgdGhlcmUgKHRoZXkKKyMgcmVmZXJyZWQgdG8gb3RoZXIgc3RhbmRhcmRzIHN1Y2ggYXMgSVNPIDE3NDUgb3IgRUNNQS0zNSkuICBUaGV5IGFyZSBsaXN0ZWQKKyMgaGVyZSBhbnl3YXkgZm9yIGNvbXBsZXRlbmVzcy4KKyMKKyMgKEEpIEVDTUEtNDggY2FsbHMgdGhpcyAiQ2FuY2VsQ2hhcmFjdGVyIiBidXQgcmV0YWlucyB0aGUgQ0NIIGFiYnJldmlhdGlvbi4KKyMKKyMgKEIpIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgY29uZnVzaW9uIGFicm9hZCBiZXR3ZWVuIENIQSBhbmQgSFBBLiAgTW9zdAorIyBgQU5TSScgdGVybWluYWxzIGFjY2VwdCB0aGUgQ0hBIHNlcXVlbmNlLCBub3QgdGhlIEhQQS4gYnV0IHRlcm1pbmZvIGNhbGxzCisjIHRoZSBjYXBhYmlsaXR5IChocGEpLiAgRUNNQS00OCBjYWxscyB0aGlzICJDdXJzb3IgQ2hhcmFjdGVyIEFic29sdXRlIiBidXQKKyMgcHJlc2VydmVkIHRoZSBDSEEgYWJicmV2aWF0aW9uLgorIworIyAoQykgQ0hUIGNvcnJlc3BvbmRzIHRvIHRlcm1pbmZvICh0YWIpLiAgVXN1YWxseSBpdCBoYXMgdGhlIHZhbHVlIF5JLgorIyBPY2Nhc2lvbmFsbHkgKGFzIG9uLCBmb3IgZXhhbXBsZSwgY2VydGFpbiBIUCB0ZXJtaW5hbHMpIHRoaXMgaGFzIHRoZSBIVEoKKyMgdmFsdWUuICBFQ01BLTQ4IGNhbGxzIHRoaXMgIkN1cnNvciBGb3J3YXJkIFRhYnVsYXRpb24iIGJ1dCBwcmVzZXJ2ZWQgdGhlCisjIENIVCBhYmJyZXZpYXRpb24uCisjCisjIChEKSB0ZXJtaW5mbyAobmVsKSBpcyB1c3VhbGx5IFxyXG4gcmF0aGVyIHRoYW4gQU5TSSBcRUUuCisjCisjIChFKSBFQ01BLTQ4IGNhbGxzIHRoaXMgIkFjdGl2ZSBQb3NpdGlvbiBSZXBvcnQiIGJ1dCBwcmVzZXJ2ZXMgdGhlIENQUgorIyBhYmJyZXZpYXRpb24uCisjCisjIChGKSBDVEMgcGFyYW1ldGVyIHZhbHVlczogMCA9IHNldCBjaGFyIHRhYiwgMSA9IHNldCBsaW5lIHRhYiwgMiA9IGNsZWFyCisjIGNoYXIgdGFiLCAzID0gY2xlYXIgbGluZSB0YWIsIDQgPSBjbGVhciBhbGwgY2hhciB0YWJzIG9uIGN1cnJlbnQgbGluZSwKKyMgNSA9IGNsZWFyIGFsbCBjaGFyIHRhYnMsIDYgPSBjbGVhciBhbGwgbGluZSB0YWJzLgorIworIyAoRykgQ1VQIGFuZCBIVlAgYXJlIGlkZW50aWNhbCBpbiBlZmZlY3QuICBTb21lIEFOU0kuU1lTIHZlcnNpb25zIGFjY2VwdAorIyBIVlAsIGJ1dCBhbHdheXMgYWxsb3cgQ1VQIGFzIGFuIGFsdGVybmF0ZS4gIEVDTUEtNDggY2FsbHMgSFZQICJDaGFyYWN0ZXIKKyMgUG9zaXRpb24gQWJzb2x1dGUiIGJ1dCByZXRhaW5zIHRoZSBIVlAgYWJicmV2aWF0aW9uLgorIworIyAoSCkgRUNNQSBjYWxscyB0aGlzICJDdXJzb3IgTGluZSBUYWJ1bGF0aW9uIiBidXQgcHJlc2VydmVzIHRoZSBDVlQKKyMgYWJicmV2aWF0aW9uLgorIworIyAoSSkgRFNSIHBhcmFtZXRlciB2YWx1ZXM6IDAgPSByZWFkeSwgMSA9IGJ1c3ksIDIgPSBidXN5LCB3aWxsIHNlbmQgRFNSCisjIGxhdGVyLCAzID0gbWFsZnVuY3Rpb24sIDQgPSBtYWxmdW5jdGlvbiwgd2lsbCBzZW5kIERTUiBsYXRlciwgNSA9IHJlcXVlc3QKKyMgRFNSLCA2ID0gcmVxdWVzdCBDUFIgcmVzcG9uc2UuCisjCisjIChKKSBFQ01BIGNhbGxzIEVEICJFcmFzZSBJbiBQYWdlIi4gRUEvRUQvRUwgcGFyYW1ldGVyczogMCA9IGNsZWFyIHRvIGVuZCwKKyMgMSA9IGNsZWFyIGZyb20gYmVnaW5uaW5nLCAyID0gY2xlYXIuCisjCisjIChLKSBFQ01BIGNhbGxzIHRoaXMgIkVuZCBvZiBHdWFyZGVkIEFyZWEiIGJ1dCBwcmVzZXJ2ZXMgdGhlIEVQQSBhYmJyZXZpYXRpb24uCisjCisjIChMKSBUaGUgR1NNIHBhcmFtZXRlcnMgYXJlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHBhcmFtZXRlcnMgdG8gc2NhbGUgYnkuCisjCisjIChNKSBTb21lIEFOU0kuU1lTIHZlcnNpb25zIGFjY2VwdCBIUFIsIGJ1dCBtb3JlIGNvbW1vbmx5IGBBTlNJJyB0ZXJtaW5hbHMKKyMgdXNlIENVRiBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgaWdub3JlIEhQUi4gIEVDTUEtNDggY2FsbHMgdGhpcyAiQ2hhcmFjdGVyCisjIFBvc2l0aW9uIFJlbGF0aXZlIiBidXQgcmV0YWlucyB0aGUgSFBSIGFiYnJldmlhdGlvbi4KKyMKKyMgKE4pIEVDTUEtNDggY2FsbHMgdGhpcyAiQ2hhcmFjdGVyIFRhYnVsYXRpb24iIGJ1dCByZXRhaW5zIHRoZSBIVAorIyBhYmJyZXZpYXRpb24uCisjCisjIChPKSBTR1IgcGFyYW1ldGVyIHZhbHVlczogMCA9IGRlZmF1bHQgbW9kZSAoYXR0cmlidXRlcyBvZmYpLCAxID0gYm9sZCwKKyMgMiA9IGRpbSwgMyA9IGl0YWxpY2l6ZWQsIDQgPSB1bmRlcmxpbmVkLCA1ID0gc2xvdyBibGluaywgNiA9IGZhc3QgYmxpbmssCisjIDcgPSByZXZlcnNlIHZpZGVvLCA4ID0gaW52aXNpYmxlLCA5ID0gY3Jvc3NlZC1vdXQgKG1hcmtlZCBmb3IgZGVsZXRpb24pLAorIyAxMCA9IHByaW1hcnkgZm9udCwgMTAgKyBuIChuIGluIDEuLjkpID0gbnRoIGFsdGVybmF0aXZlIGZvbnQsIDIwID0gRnJha3R1ciwKKyMgMjEgPSBkb3VibGUgdW5kZXJsaW5lLCAyMiA9IHR1cm4gb2ZmIDIsIDIzID0gdHVybiBvZmYgMywgMjQgPSB0dXJuIG9mZiA0LAorIyAyNSA9IHR1cm4gb2ZmIDUsIDI2ID0gcHJvcG9ydGlvbmFsIHNwYWNpbmcsIDI3ID0gdHVybiBvZmYgNywgMjggPSB0dXJuIG9mZgorIyA4LCAyOSA9IHR1cm4gb2ZmIDksIDMwID0gYmxhY2sgZmcsIDMxID0gcmVkIGZnLCAzMiA9IGdyZWVuIGZnLCAzMyA9IHllbGxvdworIyBmZywgMzQgPSBibHVlIGZnLCAzNSA9IG1hZ2VudGEgZmcsIDM2ID0gY3lhbiBmZywgMzcgPSB3aGl0ZSBmZywgMzggPSBzZXQKKyMgZmcgY29sb3IgYXMgaW4gQ0NJVCBULjQxNiwgMzkgPSBzZXQgZGVmYXVsdCBmZyBjb2xvciwgNDAgPSBibGFjayBiZworIyA0MSA9IHJlZCBiZywgNDIgPSBncmVlbiBiZywgNDMgPSB5ZWxsb3cgYmcsIDQ0ID0gYmx1ZSBiZywgNDUgPSBtYWdlbnRhIGJnLAorIyA0NiA9IGN5YW4gYmcsIDQ3ID0gd2hpdGUgYmcsIDQ4ID0gc2V0IGJnIGNvbG9yIGFzIGluIENDSVQgVC40MTYsIDM5ID0gc2V0CisjIGRlZmF1bHQgYmcgY29sb3IsIDUwID0gdHVybiBvZmYgMjYsIDUxID0gZnJhbWVkLCA1MiA9IGVuY2lyY2xlZCwgNTMgPQorIyBvdmVybGluZWQsIDU0ID0gdHVybiBvZmYgNTEgJiA1MiwgNTUgPSBub3Qgb3ZlcmxpbmVkLCA1Ni01OSA9IHJlc2VydmVkLAorIyA2MS02NSA9IHZhcmlhYmxlIGhpZ2hsaWdodHMgZm9yIGlkZW9ncmFtcy4KKyMKKyMgKFApIFNJIGlzIGFsc28gY2FsbGVkIExTTywgTG9ja2luZyBTaGlmdCBaZXJvLgorIworIyAoUSkgU0kgaXMgYWxzbyBjYWxsZWQgTFMxLCBMb2NraW5nIFNoaWZ0IE9uZS4KKyMKKyMgKFIpIFNvbWUgQU5TSS5TWVMgdmVyc2lvbnMgYWNjZXB0IFZQUiwgYnV0IG1vcmUgY29tbW9ubHkgYEFOU0knIHRlcm1pbmFscworIyB1c2UgQ1VEIGZvciB0aGlzIGZ1bmN0aW9uIGFuZCBpZ25vcmUgVlBSLiAgRUNNQSBjYWxscyBpdCBgTGluZSBQb3NpdGlvbgorIyBBYnNvbHV0ZScgYnV0IHJldGFpbnMgdGhlIFZQQSBhYmJyZXZpYXRpb24uCisjCisjIChTKSBNQyBwYXJhbWV0ZXJzOiAwID0gc3RhcnQgeGZlciB0byBwcmltYXJ5IGF1eCBkZXZpY2UsIDEgPSBzdGFydCB4ZmVyIGZyb20KKyMgcHJpbWFyeSBhdXggZGV2aWNlLCAyID0gc3RhcnQgeGZlciB0byBzZWNvbmRhcnkgYXV4IGRldmljZSwgMyA9IHN0YXJ0IHhmZXIKKyMgZnJvbSBzZWNvbmRhcnkgYXV4IGRldmljZSwgNCA9IHN0b3AgcmVsYXkgdG8gcHJpbWFyeSBhdXggZGV2aWNlLCA1ID0KKyMgc3RhcnQgcmVsYXkgdG8gcHJpbWFyeSBhdXggZGV2aWNlLCA2ID0gc3RvcCByZWxheSB0byBzZWNvbmRhcnkgYXV4IGRldmljZSwKKyMgNyA9IHN0YXJ0IHJlbGF5IHRvIHNlY29uZGFyeSBhdXggZGV2aWNlLgorIworIyAoVCkgRUNNQS00OCBjYWxscyB0aGlzICJQYXJ0aWFsIExpbmUgRm9yd2FyZCIgYnV0IHJldGFpbnMgdGhlIFBMRAorIyBhYmJyZXZpYXRpb24uCisjCisjIChVKSBFQ01BLTQ4IGNhbGxzIHRoaXMgIlBhcnRpYWwgTGluZSBCYWNrd2FyZCIgYnV0IHJldGFpbnMgdGhlIFBMVQorIyBhYmJyZXZpYXRpb24uCisjCisjIChWKSBFQ01BLTQ4IGNhbGxzIHRoaXMgIlJldmVyc2UgTGluZSBGZWVkIiBidXQgcmV0YWlucyB0aGUgUkkgYWJicmV2aWF0aW9uLgorIworIyAoVykgUk0vU00gbW9kZXMgYXJlIGFzIGZvbGxvd3M6IDEgPSBHdWFyZGVkIEFyZWEgVHJhbnNmZXIgTW9kZSAoR0FUTSksCisjIDIgPSBLZXlib2FyZCBBY3Rpb24gTW9kZSAoS0FNKSwgMyA9IENvbnRyb2wgUmVwcmVzZW50YXRpb24gTW9kZSAoQ1JNKSwKKyMgNCA9IEluc2VydGlvbiBSZXBsYWNlbWVudCBNb2RlLCA1ID0gU3RhdHVzIFJlcG9ydCBUcmFuc2ZlciBNb2RlIChTUlRNKSwKKyMgNiA9IEVyYXN1cmUgTW9kZSAoRVJNKSwgNyA9IExpbmUgRWRpdGluZyBNb2RlIChMRU0pLCA4ID0gQmktRGlyZWN0aW9uYWwKKyMgU3VwcG9ydCBNb2RlIChCRFNNKSwgOSA9IERldmljZSBDb21wb25lbnQgU2VsZWN0IE1vZGUgKERDU00pLAorIyAxMCA9IENoYXJhY3RlciBFZGl0aW5nIE1vZGUgKEhFTSksIDExID0gUG9zaXRpb25pbmcgVW5pdCBNb2RlIChQVU0pLAorIyAxMiA9IFNlbmQvUmVjZWl2ZSBNb2RlLCAxMyA9IEZvcm1hdCBFZmZlY3RvciBBY3Rpb24gTW9kZSAoRkVBTSksCisjIDE0ID0gRm9ybWF0IEVmZmVjdG9yIFRyYW5zZmVyIE1vZGUgKEZFVE0pLCAxNSA9IE11bHRpcGxlIEFyZWEgVHJhbnNmZXIKKyMgTW9kZSAoTUFUTSksIDE2ID0gVHJhbnNmZXIgVGVybWluYXRpb24gTW9kZSwgMTcgPSBTZWxlY3RlZCBBcmVhIFRyYW5zZmVyCisjIE1vZGUsIDE4ID0gVGFidWxhdGlvbiBTdG9wIE1vZGUsIDE5ID0gRWRpdGluZyBCb3VuZGFyeSBNb2RlLCAyMCA9IExpbmUgRmVlZAorIyBOZXcgTGluZSBNb2RlIChMRi9OTCksIEdyYXBoaWMgUmVuZGl0aW9uIENvbWJpbmF0aW9uIE1vZGUgKEdSQ00pLCAyMiA9CisjIFplcm8gRGVmYXVsdCBNb2RlIChaRE0pLiAgVGhlIEVCTSBhbmQgTEYvTkwgbW9kZXMgaGF2ZSBhY3R1YWxseSBiZWVuIHJlbW92ZWQKKyMgZnJvbSBFQ01BLTQ4J3MgNXRoIGVkaXRpb24gYnV0IGFyZSBsaXN0ZWQgaGVyZSBmb3IgcmVmZXJlbmNlLgorIworIyAoWCkgU2VsZWN0IEFsdGVybmF0ZSBQcmVzZW50YXRpb24gVmFyaWFudHMgaXMgdXNlZCBvbmx5IGZvciBub24tTGF0aW4KKyMgYWxwaGFiZXRzLgorIworIyAoWSkgIlNlbGVjdCBFZGl0aW5nIEV4dGVudCIgKFNFRSkgd2FzIEFOU0kgIlNlbGVjdCBFZGl0IEV4dGVudCBNb2RlIiAoU0VNKS4KKyMKKyMgKFopIEVDTUEtNDggY2FsbHMgdGhpcyAiU3RhcnQgb2YgR3VhcmRlZCBBcmVhIiBidXQgcmV0YWlucyB0aGUgU1BBCisjIGFiYnJldmlhdGlvbi4KKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEFiYnJldmlhdGlvbnM6CisjCisjIEludHJvICBhbiBJbnRyb2R1Y2VyIG9mIHNvbWUga2luZCBvZiBkZWZpbmVkIHNlcXVlbmNlOyB0aGUgbm9ybWFsIDctYml0CisjICAgICAgICBYMy42NCBDb250cm9sIFNlcXVlbmNlIEludHJvZHVjZXIgaXMgdGhlIHR3byBjaGFyYWN0ZXJzICJFc2NhcGUgWyIKKyMKKyMgRGVsaW0gIGEgRGVsaW1pdGVyCisjCisjIHgveSAgICBpZGVudGlmaWVzIGEgY2hhcmFjdGVyIGJ5IHBvc2l0aW9uIGluIHRoZSBBU0NJSSB0YWJsZSAoY29sdW1uL3JvdykKKyMKKyMgZUYgICAgIGVkaXRvciBmdW5jdGlvbiAoc2VlIGV4cGxhbmF0aW9uKQorIworIyBGRSAgICAgZm9ybWF0IGVmZmVjdG9yIChzZWUgZXhwbGFuYXRpb24pCisjCisjIEYgICAgICBpcyBhIEZpbmFsIGNoYXJhY3RlciBpbgorIyAgICAgICAgICAgICBhbiBFc2NhcGUgc2VxdWVuY2UgKEYgZnJvbSAzLzAgdG8gNy8xNCBpbiB0aGUgQVNDSUkgdGFibGUpCisjICAgICAgICAgICAgIGEgY29udHJvbCBzZXF1ZW5jZSAoRiBmcm9tIDQvMCB0byA3LzE0KQorIworIyBHcyAgICAgaXMgYSBncmFwaGljIGNoYXJhY3RlciBhcHBlYXJpbmcgaW4gc3RyaW5ncyAoR3MgcmFuZ2VzIGZyb20KKyMgICAgICAgIDIvMCB0byA3LzE0KSBpbiB0aGUgQVNDSUkgdGFibGUKKyMKKyMgQ2UgICAgIGlzIGEgY29udHJvbCByZXByZXNlbnRlZCBhcyBhIHNpbmdsZSBiaXQgY29tYmluYXRpb24gaW4gdGhlIEMxIHNldAorIyAgICAgICAgb2YgY29udHJvbHMgaW4gYW4gOC1iaXQgY2hhcmFjdGVyIHNldAorIworIyBDMCAgICAgdGhlIGZhbWlsaWFyIHNldCBvZiA3LWJpdCBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMKKyMKKyMgQzEgICAgIHJvdWdobHksIHRoZSBzZXQgb2YgY29udHJvbCBjaGFycyBhdmFpbGFibGUgb25seSBpbiA4LWJpdCBzeXN0ZW1zLgorIyAgICAgICAgVGhpcyBpcyB0b28gY29tcGxpY2F0ZWQgdG8gZXhwbGFpbiBmdWxseSBoZXJlLCBzbyByZWFkIEppbSBGbGVtaW5nJ3MKKyMgICAgICAgIGFydGljbGUgaW4gdGhlIEZlYnJ1YXJ5IDE5ODMgQllURSwgZXNwZWNpYWxseSBwYWdlcyAyMTQgdGhyb3VnaCAyMjQuCisjCisjIEZlICAgICBpcyBhIEZpbmFsIGNoYXJhY3RlciBvZiBhIDItY2hhcmFjdGVyIEVzY2FwZSBzZXF1ZW5jZSB0aGF0IGhhcyBhbgorIyAgICAgICAgZXF1aXZhbGVudCByZXByZXNlbnRhdGlvbiBpbiBhbiA4LWJpdCBlbnZpcm9ubWVudCBhcyBhIENlLXR5cGUKKyMgICAgICAgIChGZSByYW5nZXMgZnJvbSA0LzAgdG8gNS8xNSkKKyMKKyMgRnMgICAgIGlzIGEgRmluYWwgY2hhcmFjdGVyIG9mIGEgMi1jaGFyYWN0ZXIgRXNjYXBlIHNlcXVlbmNlIHRoYXQgaXMKKyMgICAgICAgIHN0YW5kYXJkaXplZCBpbnRlcm5hdGlvbmFsbHkgd2l0aCBpZGVudGljYWwgcmVwcmVzZW50YXRpb24gaW4gNy1iaXQKKyMgICAgICAgIGFuZCA4LWJpdCBlbnZpcm9ubWVudHMgYW5kIGlzIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50bHkKKyMgICAgICAgIGRlc2lnbmF0ZWQgQzAgYW5kIEMxIGNvbnRyb2wgc2V0cyAoRnMgcmFuZ2VzIGZyb20gNi8wIHRvIDcvMTQpCisjCisjIEkgICAgICBpcyBhbiBJbnRlcm1lZGlhdGUgY2hhcmFjdGVyIGZyb20gMi8wIHRvIDIvMTUgKGluY2x1c2l2ZSkgaW4gdGhlCisjICAgICAgICBBU0NJSSB0YWJsZQorIworIyBQICAgICAgaXMgYSBwYXJhbWV0ZXIgY2hhcmFjdGVyIGZyb20gMy8wIHRvIDMvMTUgKGluY2x1c2l2ZSkgaW4gdGhlIEFTQ0lJCisjICAgICAgICB0YWJsZQorIworIyBQbiAgICAgaXMgYSBudW1lcmljIHBhcmFtZXRlciBpbiBhIGNvbnRyb2wgc2VxdWVuY2UsIGEgc3RyaW5nIG9mIHplcm8gb3IKKyMgICAgICAgIG1vcmUgY2hhcmFjdGVycyByYW5naW5nIGZyb20gMy8wIHRvIDMvOSBpbiB0aGUgQVNDSUkgdGFibGUKKyMKKyMgUHMgICAgIGlzIGEgdmFyaWFibGUgbnVtYmVyIG9mIHNlbGVjdGl2ZSBwYXJhbWV0ZXJzIGluIGEgY29udHJvbCBzZXF1ZW5jZQorIyAgICAgICAgd2l0aCBlYWNoIHNlbGVjdGl2ZSBwYXJhbWV0ZXIgc2VwYXJhdGVkIGZyb20gdGhlIG90aGVyIGJ5IHRoZSBjb2RlCisjICAgICAgICAzLzExICh3aGljaCB1c3VhbGx5IHJlcHJlc2VudHMgYSBzZW1pY29sb24pOyBQcyByYW5nZXMgZnJvbQorIyAgICAgICAgMy8wIHRvIDMvOSBhbmQgaW5jbHVkZXMgMy8xMQorIworIyAqICAgICAgTm90IHJlbGV2YW50IHRvIHRlcm1pbmFsIGNvbnRyb2wsIGxpc3RlZCBmb3IgY29tcGxldGVuZXNzIG9ubHkuCisjCisjIEZvcm1hdCBFZmZlY3RvcnMgdmVyc3VzIEVkaXRvciBGdW5jdGlvbnMKKyMKKyMgQSBmb3JtYXQgZWZmZWN0b3Igc3BlY2lmaWVzIGhvdyBmb2xsb3dpbmcgb3V0cHV0IGlzIHRvIGJlIGRpc3BsYXllZC4KKyMgQW4gZWRpdG9yIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gbW9kaWZ5IHRoZSBkaXNwbGF5LiAgSW5mb3JtYWxseQorIyBmb3JtYXQgZWZmZWN0b3JzIG1heSBiZSBkZXN0cnVjdGl2ZTsgZm9ybWF0IGVmZmVjdG9ycyBzaG91bGQgbm90IGJlLgorIworIyBGb3IgaW5zdGFuY2UsIGEgZm9ybWF0IGVmZmVjdG9yIHRoYXQgbW92ZXMgdGhlICJhY3RpdmUgcG9zaXRpb24iICh0aGUKKyMgY3Vyc29yIG9yIGVxdWl2YWxlbnQpIG9uZSBzcGFjZSB0byB0aGUgbGVmdCB3b3VsZCBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0bworIyBjcmVhdGUgYW4gb3ZlcnN0cmlrZSwgYSBjb21wb3VuZCBjaGFyYWN0ZXIgbWFkZSBvZiB0d28gc3RhbmRhcmQgY2hhcmFjdGVycworIyBvdmVybGFpZC4gQ29udHJvbC1ILCB0aGUgQmFja3NwYWNlIGNoYXJhY3RlciwgaXMgYWN0dWFsbHkgc3VwcG9zZWQgdG8gYmUgYQorIyBmb3JtYXQgZWZmZWN0b3IsIHNvIHlvdSBjYW4gZG8gdGhpcy4gQnV0IG1hbnkgc3lzdGVtcyB1c2UgaXQgaW4gYQorIyBub25zdGFuZGFyZCBmYXNoaW9uLCBhcyBhbiBlZGl0b3IgZnVuY3Rpb24sIGRlbGV0aW5nIHRoZSBjaGFyYWN0ZXIgdG8gdGhlCisjIGxlZnQgb2YgdGhlIGN1cnNvciBhbmQgbW92aW5nIHRoZSBjdXJzb3IgbGVmdC4gV2hlbiBDb250cm9sLUggaXMgYXNzdW1lZCB0bworIyBiZSBhbiBlZGl0b3IgZnVuY3Rpb24sIHlvdSBjYW5ub3QgcHJlZGljdCB3aGV0aGVyIGl0cyB1c2Ugd2lsbCBjcmVhdGUgYW4KKyMgb3ZlcnN0cmlrZSB1bmxlc3MgeW91IGFsc28ga25vdyB3aGV0aGVyIHRoZSBvdXRwdXQgZGV2aWNlIGlzIGluIGFuICJpbnNlcnQKKyMgbW9kZSIgb3IgYW4gIm92ZXJ3cml0ZSBtb2RlIi4gV2hlbiBDb250cm9sLUggaXMgdXNlZCBhcyBhIGZvcm1hdCBlZmZlY3RvciwKKyMgaXRzIGVmZmVjdCBjYW4gYWx3YXlzIGJlIHByZWRpY3RlZC4gVGhlIGZhbWlsaWFyIGNoYXJhY3RlcnMgY2FycmlhZ2UKKyMgcmV0dXJuLCBsaW5lZmVlZCwgZm9ybWZlZWQsIGV0Yy4sIGFyZSBkZWZpbmVkIGFzIGZvcm1hdCBlZmZlY3RvcnMuCisjCisjIE5PVEVTIE9OIFRIRSBERUMgVlQxMDAgSU1QTEVNRU5UQVRJT04KKyMKKyMgQ29udHJvbCBzZXF1ZW5jZXMgaW1wbGVtZW50ZWQgaW4gdGhlIFZUMTAwIGFyZSBhcyBmb2xsb3dzOgorIworIyAgICAgIENQUiwgQ1VCLCBDVUQsIENVRiwgQ1VQLCBDVVUsIERBLCBEU1IsIEVELCBFTCwgSFRTLCBIVlAsIElORCwKKyMgICAgICBMTk0sIE5FTCwgUkksIFJJUywgUk0sIFNHUiwgU00sIFRCQworIworIyBwbHVzIHNldmVyYWwgcHJpdmF0ZSBERUMgY29tbWFuZHMuCisjCisjIEVyYXNpbmcgcGFydHMgb2YgdGhlIGRpc3BsYXkgKEVMIGFuZCBFRCkgaW4gdGhlIFZUMTAwIGlzIHBlcmZvcm1lZCB0aHVzOgorIworIyAgICAgIEVyYXNlIGZyb20gY3Vyc29yIHRvIGVuZCBvZiBsaW5lICAgICAgICAgICBFc2MgWyAwIEsgICAgb3IgRXNjIFsgSworIyAgICAgIEVyYXNlIGZyb20gYmVnaW5uaW5nIG9mIGxpbmUgdG8gY3Vyc29yICAgICBFc2MgWyAxIEsKKyMgICAgICBFcmFzZSBsaW5lIGNvbnRhaW5pbmcgY3Vyc29yICAgICAgICAgICAgICAgRXNjIFsgMiBLCisjICAgICAgRXJhc2UgZnJvbSBjdXJzb3IgdG8gZW5kIG9mIHNjcmVlbiAgICAgICAgIEVzYyBbIDAgSiAgICBvciBFc2MgWyBKCisjICAgICAgRXJhc2UgZnJvbSBiZWdpbm5pbmcgb2Ygc2NyZWVuIHRvIGN1cnNvciAgIEVzYyBbIDEgSgorIyAgICAgIEVyYXNlIGVudGlyZSBzY3JlZW4gICAgICAgICAgICAgICAgICAgICAgICBFc2MgWyAyIEoKKyMKKyMgU29tZSBicmFpbi1kYW1hZ2VkIHRlcm1pbmFsL2VtdWxhdG9ycyByZXNwb25kIHRvIEVzYyBbIEogYXMgaWYgaXQgd2VyZQorIyBFc2MgWyAyIEosIGJ1dCB0aGlzIGlzIHdyb25nOyB0aGUgZGVmYXVsdCBpcyAwLgorIworIyBUaGUgVlQxMDAgcmVzcG9uZHMgdG8gcmVjZWl2aW5nIHRoZSBEQSAoRGV2aWNlIEF0dHJpYnV0ZXMpIGNvbnRyb2wKKyMKKyMgICAgICBFc2MgWyBjICAgIChvciBFc2MgWyAwIGMpCisjCisjIGJ5IHRyYW5zbWl0dGluZyB0aGUgc2VxdWVuY2UKKyMKKyMgICAgICBFc2MgWyA/IGwgOyBQcyBjCisjCisjIHdoZXJlIFBzIGlzIGEgY2hhcmFjdGVyIHRoYXQgZGVzY3JpYmVzIGluc3RhbGxlZCBvcHRpb25zLgorIworIyBUaGUgVlQxMDAncyBjdXJzb3IgbG9jYXRpb24gY2FuIGJlIHJlYWQgd2l0aCB0aGUgRFNSIChEZXZpY2UgU3RhdHVzCisjIFJlcG9ydCkgY29udHJvbAorIworIyAgICAgIEVzYyBbIDYgbgorIworIyBUaGUgVlQxMDAgcmVwb3J0cyBieSB0cmFuc21pdHRpbmcgdGhlIENQUiBzZXF1ZW5jZQorIworIyAgICAgIEVzYyBbIFBsIDsgUGMgUgorIworIyB3aGVyZSBQbCBpcyB0aGUgbGluZSBudW1iZXIgYW5kIFBjIGlzIHRoZSBjb2x1bW4gbnVtYmVyIChpbiBkZWNpbWFsKS4KKyMKKyMgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBERUMgVlQxMDAgaXMgZG9jdW1lbnQgRUstVlQxMDAtVUctMDAzLgorCisjIyMjIEFOU0kuU1lTCisjCisjIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sb3IgYW5kIGF0dHJpYnV0ZSBjb250cm9scyBzdXBwb3J0ZWQgaW4gdGhlCisjIHRoZSBBTlNJLlNZUyBkcml2ZXIgdW5kZXIgTVMtRE9TLiAgTW9zdCBjb25zb2xlIGRyaXZlcnMgYW5kIEFOU0kKKyMgdGVybWluYWwgZW11bGF0b3JzIGZvciBJbnRlbCBib3hlcyBvYmV5IHRoZXNlLiAgVGhleSBhcmUgYSBwcm9wZXIgc3Vic2V0CisjIG9mIHRoZSBFQ01BLTQ4IGVzY2FwZXMuCisjCisjIDAJYWxsIGF0dHJpYnV0ZXMgb2ZmCisjIDEJZm9yZWdyb3VuZCBicmlnaHQKKyMgNAl1bmRlcnNjb3JlIG9uCisjIDUJYmxpbmsgb24vYmFja2dyb3VuZCBicmlnaHQgKG5vdCByZWxpYWJsZSB3aXRoIGJyb3duKQorIyA3CXJldmVyc2UtdmlkZW8KKyMgOAlzZXQgYmxhbmsgKG5vbi1kaXNwbGF5KQorIyAxMAlzZXQgcHJpbWFyeSBmb250CisjIDExCXNldCBmaXJzdCBhbHRlcm5hdGUgZm9udCAob24gUENzLCBkaXNwbGF5IFJPTSBjaGFyYWN0ZXJzIDEtMzEpCisjIDEyCXNldCBzZWNvbmQgYWx0ZXJuYXRlIGZvbnQgKG9uIFBDcywgZGlzcGxheSBJQk0gaGlnaC1oYWxmIGNoYXJzKQorIworIwkJCUNvbG9yIGF0dHJpYnV0ZSBzZXRzCisjIDNuCXNldCBmb3JlZ3JvdW5kIGNvbG9yICAgICAgIC8gMD1ibGFjaywgMT1yZWQsICAgICAyPWdyZWVuLCAzPWJyb3duLAorIyA0bglzZXQgYmFja2dyb3VuZCBjb2xvciAgICAgICBcIDQ9Ymx1ZSwgIDU9bWFnZW50YSwgNj1jeWFuLCAgNz13aGl0ZQorIyBCcmlnaHQgYmxhY2sgYmVjb21lcyBncmF5LiAgQnJpZ2h0IGJyb3duIGJlY29tZXMgeWVsbG93LAorIyBUaGVzZSBjb2luY2lkZSB3aXRoIHRoZSBwcmVzY3JpcHRpb25zIG9mIHRoZSBJU08gNjQyOS9FQ01BLTQ4IHN0YW5kYXJkLgorIworIyAqIElmIHRoZSA1IGF0dHJpYnV0ZSBpcyBvbiBhbmQgeW91IHNldCBhIGJhY2tncm91bmQgY29sb3IgKDQwLTQ3KSBpdCBpcworIyAgIHN1cHBvc2VkIHRvIGVuYWJsZSBicmlnaHQgYmFja2dyb3VuZC4KKyMKKyMgKiBNYW55IFZHQSBjYXJkcyAoc3VjaCBhcyB0aGUgUGFyYWRpc2UgYW5kIGNvbXBhdGlibGVzKSBkbyB0aGUgd3JvbmcgdGhpbmcKKyMgICB3aGVuIHlvdSB0cnkgdG8gc2V0IGEgImJyaWdodCBicm93biIgKHllbGxvdykgYmFja2dyb3VuZCB3aXRoIGF0dHJpYnV0ZQorIyAgIDUgKHlvdSBnZXQgYSBibGlua2luZyB5ZWxsb3cgZm9yZWdyb3VuZCBpbnN0ZWFkKS4gIEEgZmV3IGRpc3BsYXlzCisjICAgKGluY2x1ZGluZyB0aGUgU3lzdGVtIFYgY29uc29sZSkgc3VwcG9ydCBhbiBhdHRyaWJ1dGUgNiB0aGF0IHVuZG9lcyB0aGlzCisjICAgYnJhaW5kYW1hZ2UgKHRoaXMgaXMgcmVxdWlyZWQgYnkgaUJDUzIpLgorIworIyAqIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgQU5TSS5TWVMgaGF2ZSBhIGJ1ZyB0aGF0IGNhdXNlcyB0aGVtcyB0byByZXF1aXJlCisjICAgRVNDIFsgUG4gayBhcyBFTCByYXRoZXIgdGhhbiB0aGUgQU5TSSBFU0MgWyBQbiBLLiAgKFRoaXMgaXMgbm90IEVDTUEtNDgKKyMgICBjb21wYXRpYmxlLikKKworIyMjIyBJbnRlbCBCaW5hcnkgQ29tcGF0aWJpbGl0eSBTdGFuZGFyZAorIworIyBGb3IgY29tcGFyaXNvbiwgaGVyZSBhcmUgdGhlIGNhcGFiaWxpdGllcyBpbXBsaWVkIGJ5IHRoZSBJbnRlbCBCaW5hcnkKKyMgQ29tcGF0aWJpbGl0eSBTdGFuZGFyZCBmb3IgVU5JWCBzeXN0ZW1zIChJbnRlbCBvcmRlciBudW1iZXIgNDY4MzY2LTAwMSkuCisjIFRoZXNlIHJlY29tbWVuZGF0aW9ucyBhcmUgb3B0aW9uYWwuICBJQkNTMiBhbGxvd3MgdGhlIGxlYWRpbmcgZXNjYXBlIHRvCisjIGJlIGVpdGhlciB0aGUgNy1iaXQgXEVbIG9yIDgtYml0IFwwMjMzIGludHJvZHVjZXIsIGluIGFjY29yZGFuY2Ugd2l0aAorIyB0aGUgQU5TSSBYLjM2NC9JU08gNjQyOS9FQ01BLTQ4IHN0YW5kYXJkLiAgSGVyZSBhcmUgdGhlIGlCQ1MyIGNhcGFiaWxpdGllcworIyAoYXMgZGVzY3JpYmVkIGluIGZpZ3VyZSA5LTMgb2YgdGhlIHN0YW5kYXJkKS4gIFRob3NlIGV4cHJlc3NlZCBpbiB0aGUgaWJjczIKKyMgdGVybWluZm8gZW50cnkgYXJlIGZvbGxvd2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2FwYWJpbGl0eSBpbiBwYXJlbnM6CisjCisjCUNTSSA8bj5rCQlkaXNhYmxlIChuPTApIG9yIGVuYWJsZSAobj0xKSBrZXljbGljaworIwlDU0kgMmggICAJCWxvY2sga2V5Ym9hcmQKKyMJQ1NJIDJpICAJCXNlbmQgc2NyZWVuIGFzIGlucHV0CisjCUNTSSAybCAgCQl1bmxvY2sga2V5Ym9hcmQKKyMJQ1NJIDZtICAJCWVuYWJsZSBiYWNrZ3JvdW5kIGNvbG9yIGludGVuc2l0eQorIwlDU0kgPDAtMj5jCQlyZXNlcnZlZAorIwlDU0kgPDAtNTk+bQkJc2VsZWN0IGdyYXBoaWMgcmVuZGl0aW9uCisjCUNTSSA8bj47PG0+SAkoY3VwKQljdXJzb3IgdG8gbGluZSBuIGFuZCBjb2x1bW4gbQorIwlDU0kgPG4+OzxtPmYJCWN1cnNvciB0byBsaW5lIG4gYW5kIGNvbHVtbiBtCisjCUNTSSA8bj5ACShpY2gpCWluc2VydCBjaGFyYWN0ZXJzCisjCUNTSSA8bj5BCShjdXUpCWN1cnNvciB1cCBuIGxpbmVzCisjCUNTSSA8bj5CCShjdWQpCWN1cnNvciBkb3duIG4gbGluZXMKKyMJQ1NJIDxuPkMJKGN1dSkJY3Vyc29yIHJpZ2h0IG4gY2hhcmFjdGVycworIwlDU0kgPG4+RAkoY3VkKQljdXJzb3IgbGVmdCBuIGNoYXJhY3RlcnMKKyMJQ1NJIDxuPkUJCWN1cnNvciBkb3duIG4gbGluZXMgYW5kIGluIGZpcnN0IGNvbHVtbgorIwlDU0kgPG4+RgkJY3Vyc29yIHVwIG4gbGluZXMgYW5kIGluIGZpcnN0IGNvbHVtbgorIwlDU0kgPG4+RwkoaHBhKQlwb3NpdGlvbiBjdXJzb3IgYXQgY29sdW1uIG4tMQorIwlDU0kgPG4+SgkoZWQpCWVyYXNlIGluIGRpc3BsYXkKKyMJQ1NJIDxuPksJKGVsKQllcmFzZSBpbiBsaW5lCisjCUNTSSA8bj5MCShpbCkJaW5zZXJ0IGxpbmUocykKKyMJQ1NJIDxuPlAJKGRjaCkJZGVsZXRlIGNoYXJhY3RlcnMKKyMJQ1NJIDxuPlMJKGluZG4pCXNjcm9sbCB1cCBuIGxpbmVzCisjCUNTSSA8bj5UCShyaW4pCXNjcm9sbCBkb3duIG4gbGluZXMKKyMJQ1NJIDxuPlgJKGVjaCkJZXJhc2UgY2hhcmFjdGVycworIwlDU0kgPG4+WgkoY2J0KQliYWNrIHVwIG4gdGFiIHN0b3BzCisjCUNTSSA8bj5gCQljdXJzb3IgdG8gY29sdW1uIG4gb24gbGluZQorIwlDU0kgPG4+YQkoY3V1KQljdXJzb3IgcmlnaHQgbiBjaGFyYWN0ZXJzCisjCUNTSSA8bj5kCSh2cGEpCWN1cnNvciB0byBsaW5lIG4KKyMJQ1NJIDxuPmUJCWN1cnNvciBkb3duIG4gbGluZXMgYW5kIGluIGZpcnN0IGNvbHVtbgorIwlDU0kgPG4+ZwkoY2J0KQljbGVhciBhbGwgdGFicworIwlDU0kgPG4+egkJbWFrZSB2aXJ0dWFsIHRlcm1pbmFsIG4gYWN0aXZlCisjCUNTSSA/N2ggCShzbWFtKQl0dXJuIGF1dG9tYXJnaW4gb24KKyMJQ1NJID83bCAJKHJtYW0pCXR1cm4gYXV0b21hcmdpbiBvZmYKKyMJQ1NJIHMgICAgIAkJc2F2ZSBjdXJzb3IgcG9zaXRpb24KKyMJQ1NJIHUgICAJCXJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uIHRvIHNhdmVkIHZhbHVlCisjCUNTSSA9PGM+QQkJc2V0IG92ZXJzY2FuIGNvbG9yCisjCUNTSSA9PGM+RgkJc2V0IG5vcm1hbCBmb3JlZ3JvdW5kIGNvbG9yCisjCUNTSSA9PGM+RwkJc2V0IG5vcm1hbCBiYWNrZ3JvdW5kIGNvbG9yCisjCUNTSSA9PGM+SAkJc2V0IHJldmVyc2UgZm9yZWdyb3VuZCBjb2xvcgorIwlDU0kgPTxjPkkJCXNldCByZXZlcnNlIGZvcmVncm91bmQgY29sb3IKKyMJQ1NJID08Yz5KCQlzZXQgZ3JhcGhpYyBmb3JlZ3JvdW5kIGNvbG9yCisjCUNTSSA9PGM+SwkJc2V0IGdyYXBoaWMgZm9yZWdyb3VuZCBjb2xvcgorIwlDU0kgPTxuPmcJKGRpc3BjKSBkaXNwbGF5IG4gZnJvbSBhbHRlcm5hdGUgZ3JhcGhpY3MgY2hhcmFjdGVyIHNldAorIwlDU0kgPTxwPjs8ZD5CCQlzZXQgYmVsbCBwYXJhbWV0ZXJzCisjCUNTSSA9PHM+OzxlPkMJCXNldCBjdXJzb3IgcGFyYW1ldGVycworIwlDU0kgPTx4PkQJCWVuYWJsZS9kaXNhYmxlIGludGVuc2l0eSBvZiBiYWNrZ3JvdW5kIGNvbG9yCisjCUNTSSA9PHg+RQkJc2V0L2NsZWFyIGJsaW5rIHZzLiBib2xkIGJhY2tncm91bmQKKyMJQ1NJIDcgICAgIAkoc2MpCShzYykgc2F2ZSBjdXJzb3IgcG9zaXRpb24KKyMJQ1NJIDggICAJKHJjKQkocmMpIHJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uIHRvIHNhdmVkIHZhbHVlCisjCUNTSSBICQkoaHRzKQkoaHRzKSBzZXQgdGFiIHN0b3AKKyMJQ1NJIFE8bj48c3RyaW5nPglkZWZpbmUgZnVuY3Rpb24ga2V5IHN0cmluZworIwkJCQkoc3RyaW5nIG11c3QgYmVnaW4gYW5kIGVuZCB3aXRoIGRlbGltaXRlciBjaGFyKQorIwlDU0kgYyAgIAkoY2xlYXIpIGNsZWFyIHNjcmVlbgorIworIyBUaGUgbGFjayBvZiBhbnkgc3BlY2lmaWNhdGlvbiBmb3IgYXR0cmlidXRlcyBpbiBTR1IgKGFtb25nIG90aGVyIHRoaW5ncykKKyMgbWFrZXMgdGhpcyBhIHdyZXRjaGVkbHkgd2VhayBzdGFuZGFyZC4gVGhlIHRhYmxlIGFib3ZlIGlzIGxpdGVyYWxseQorIyBldmVyeXRoaW5nIGlCU0MyIGhhcyB0byBzYXkgYWJvdXQgdGVybWluYWwgZXNjYXBlIHNlcXVlbmNlczsgdGhlcmUgaXMKKyMgbm8gZnVydGhlciBkaXNjdXNzaW9uIG9mIHRoZWlyIG1lYW5pbmcgb3IgaG93IHRvIHNldCB0aGUgcGFyYW1ldGVycworIyBpbiB0aGVzZSBzZXF1ZW5jZXMgYXQgYWxsLgorIworCisjIyMjIyMjIyBOT05TVEFOREFSRCBDQVBBQklMSVRZIFRSQU5TTEFUSU9OUyBVU0VEIElOIFRISVMgRklMRQorIworIyBUaGUgaGlzdG9yaWNhbCB0ZXJtY2FwIGZpbGUgZW50cmllcyB3ZXJlIHdyaXR0ZW4gcHJpbWFyaWx5IGluIDQuNEJTRCB0ZXJtY2FwLgorIyBUaGUgNC40QlNEIHRlcm1jYXAgc2V0IHdhcyBzdWJzdGFudGlhbGx5IGxhcmdlciB0aGFuIHRoZSBvcmlnaW5hbCA0LjFCU0Qgc2V0LAorIyB3aXRoIHRoZSBleHRlbnNpb24gbmFtZXMgY2hvc2VuIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHRlcm1jYXAgbmFtZXMKKyMgYXNzaWduZWQgaW4gU3lzdGVtIFYgdGVybWluZm8uICBUaGVyZSBhcmUgc29tZSB2YXJpYW50IGV4dGVuc2lvbiBzZXRzIG91dAorIyB0aGVyZS4gIFdlIHRyeSB0byBkZXNjcmliZSB0aGVtIGhlcmUuCisjCisjIFhFTklYIGV4dGVuc2lvbnM6CisjCisjIFRoZSBYRU5JWCBleHRlbnNpb25zIGluY2x1ZGUgYSBzZXQgb2YgZnVuY3Rpb24ta2V5IGNhcGFiaWxpdGllcyBhcyBmb2xsb3dzOgorIworIyAgICAgICBjb2RlCVhFTklYIHZhcmlhYmxlIG5hbWUJdGVybWluZm8gbmFtZQluYW1lIGNsYXNoZXM/CisjCS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCUNMCWtleV9jaGFyX2xlZnQKKyMJQ1IJa2V5X2NoYXJfcmlnaHQKKyMJQ1cJa2V5X2NoYW5nZV93aW5kb3cJCQljcmVhdGVfd2luZG93CisjCUVOCWtleV9lbmQgICAgICAgICAgCWtlbmQKKyMJSE0Ja2V5X2hvbWUJCWtob21lCisjCUhQCT8/CisjCUxECWtleV9kZWxldGVfbGluZSAgCWtkbDEKKyMJTEYJa2V5X2xpbmVmZWVkICAgICAJCQlsYWJlbF9vZmYKKyMJTlUJa2V5X25leHRfdW5sb2NrZWRfY2VsbAorIwlQRAlrZXlfcGFnZV9kb3duICAgCWtucAorIwlQTAk/PworIwlQTglzdGFydF9wcmludAkJbWM1CisjCVBSCT8/CisjCVBTCXN0b3BfcHJpbnQJCW1jNAorIwlQVQlrZXlfcGFnZV91cCAgICAgCWtwcAkJcHVsc2UKKyMJUkMJa2V5X3JlY2FsYwkJCQlyZW1vdmVfY2xvY2sKKyMJUkYJa2V5X3RvZ2dsZV9yZWYJCQkJcmVxX2Zvcl9pbnB1dAorIwlSVAlrZXlfcmV0dXJuICAgICAgCWtlbnQKKyMJVVAJa2V5X3VwX2Fycm93ICAgICAgICAgICAJa2N1dTEgICAJcGFybV91cF9jdXJzb3IKKyMJV0wJa2V5X3dvcmRfbGVmdAorIwlXUglrZXlfd29yZF9yaWdodAorIworIyBUaGUgWEVOSVggZXh0ZW5zaW9ucyBhbHNvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXItc2V0IGFuZCBoaWdobGlnaHQKKyMgY2FwYWJpbGl0aWVzOgorIworIwlYRU5JWAl0ZXJtaW5mbwlmdW5jdGlvbgorIwktLS0tLQktLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJR1MJc21hY3MJCXN0YXJ0IGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisjCUdFCXJtYWNzCQllbmQgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKyMJR0cJCQk6YXM6LzphZTogZ2xpdGNoIChhbmFsb2dvdXMgdG8gOnNnOi86dWc6KQorIwlibwlibGluawkJYmVnaW4gYmxpbmsgKG5vdCB1c2VkIGluIC9ldGMvdGVybWNhcCkKKyMJYmUJCQllbmQgYmxpbmsgKG5vdCB1c2VkIGluIC9ldGMvdGVybWNhcCkKKyMJYmIJCQlibGluayBnbGl0Y2ggIChub3QgdXNlZCBpbiAvZXRjL3Rlcm1jYXApCisjCWl0CWRpbQkJYmVnaW4gZGltIChub3QgdXNlZCBpbiAvZXRjL3Rlcm1jYXApCisjCWllCQkJZW5kIGRpbSAobm90IHVzZWQgaW4gL2V0Yy90ZXJtY2FwKQorIwlpZwkJCWRpbSBnbGl0Y2ggIChub3QgdXNlZCBpbiAvZXRjL3Rlcm1jYXApCisjCisjIEZpbmFsbHksIFhFTklYIGFsc28gdXNlZCB0aGUgZm9sbG93aW5nIGZvcm1zLWRyYXdpbmcgY2FwYWJpbGl0aWVzOgorIworIwlzaW5nbGUJZG91YmxlICB0eXBlICAgICAgICAgICAgIEFTQ0lJIGFwcHJveGltYXRpb24KKyMJLS0tLS0tCS0tLS0tLQktLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJR1YJR3YJdmVydGljYWwgbGluZSAgICAgICAgICAgICB8CisjCUdICUd2CWhvcml6b250YWwgbGluZSAgICAgICAtICAgXworIwlHMQlHNQl0b3AgcmlnaHQgY29ybmVyICAgICAgIF8gICB8CisjCUcyCUc2CXRvcCBsZWZ0IGNvcm5lciAgICAgICB8CisjCUczCUc3CWJvdHRvbSBsZWZ0IGNvcm5lciAgICAgICAgIHxfCisjCUc0CUc4CWJvdHRvbSByaWdodCBjb3JuZXIgICBffAorIwlHRAlHZAlkb3duLXRpY2sgY2hhcmFjdGVyICAgICAgICBUCisjCUdMCUdsCWxlZnQtdGljayBjaGFyYWN0ZXIgICAtfAorIwlHUglHcglyaWdodC10aWNrIGNoYXJhY3RlciAgICAgICB8LQorIwlHQwlHYwltaWRkbGUgaW50ZXJzZWN0aW9uICAgLXwtCisjCUdVCUd1CXVwLXRpY2sgY2hhcmFjdGVyICAgICAgICAgIF98XworIworIyBUaGVzZSB3ZXJlIGludmVudGVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBJQk0gUEMgUk9NIGNoYXJhY3RlciBzZXQuICBPbmUKKyMgY2FuIGNvbXBvc2UgYW4gYWNzYyBzdHJpbmcgZnJvbSB0aGUgc2luZ2xlLXdpZHRoIGNoYXJhY3RlcnMgYXMgZm9sbG93cworIwkiantHNH1re0cxfWx7RzJ9bXtHM31xe0dIfXh7R1Z9dHtHUn11e0dMfXZ7R1V9d3tHRH1ue0dDfSIKKyMgV2hlbiB0cmFuc2xhdGluZyBhIHRlcm1jYXAgZmlsZSwgbmN1cnNlcyB0aWMgd2lsbCBkbyB0aGlzIGF1dG9tYXRpY2FsbHkuCisjIFRoZSBkb3VibGUgZm9ybXMgY2hhcmFjdGVycyBkb24ndCBmaXQgdGhlIFNWcjQgdGVybWluZm8gbW9kZWwuCisjCisjIEFUJlQgRXh0ZW5zaW9uczoKKyMKKyMgVGhlIG9sZCBBVCZUIDU0MTAsIDU0MjAsIDU0MjUsIHBjNjMwMHBsdXMsIDYxMCwgYW5kIHM0IGVudHJpZXMgdXNlZCBhIHNldCBvZgorIyBub25zdGFuZGFyZCBjYXBhYmlsaXRpZXMuICBJdHMgc2lnbmF0dXJlIGlzIHRoZSBLTSBjYXBhYmlsaXR5LCB1c2VkIHRvIG5hbWUKKyMgc29tZSBzb3J0IG9mIGtleW1hcCBmaWxlLiAgRUUsIEJPLCBDSSwgQ1YsIFhTLCBEUywgRkwgYW5kIEZFIGFyZSBpbiB0aGlzCisjIHNldC4gIENvbW1lbnRzIGluIHRoZSBvcmlnaW5hbCwgYW5kIGEgbGl0dGxlIGNyb3NzLWNoZWNraW5nIHdpdGggb3RoZXIgQVQmVAorIyBkb2N1bWVudGF0aW9uLCBzZWVtIHRvIGVzdGFibGlzaCB0aGF0IEJPPTptcjogKHN0YXJ0IHJldmVyc2UgdmlkZW8pLCBEUz06bWg6CisjIChzdGFydCBkaW0pLCBYUz06bWs6IChzZWN1cmUvaW52aXNpYmxlIG1vZGUpLCBFRT06bWU6IChlbmQgaGlnaGxpZ2h0cyksCisjIEZMPTpMTzogKGVuYWJsZSBzb2Z0IGxhYmVscyksIEZFPTpMRjogKGRpc2FibGUgc29mdCBsYWJlbHMpLCBDST06dmk6IChtYWtlCisjIGN1cnNvciBpbnZpc2libGUpLCBhbmQgQ1Y9OnZlOiAobWFrZSBjdXJzb3Igbm9ybWFsKS4KKyMKKyMgSFAgRXh0ZW5zaW9ucworIworIyBUaGUgSFAgbGlicmFyeSAoYXMgb2YgbWlkLTE5OTUsIHRoZWlyIHRlcm0uaCBmaWxlIHZlcnNpb24gNzAuMSkgYXBwZWFycyB0bworIyBoYXZlIHRoZSBTeXN0ZW0gViBjYXBhYmlsaXRpZXMgdXAgdG8gU1ZyMSBsZXZlbC4gIEFmdGVyIHRoYXQsIGl0IHN1cHBvcnRzCisjIHR3byBub25zdGFuZGFyZCBjYXBzIG1lbWwgYW5kIG1lbXUgY29ycmVzcG9uZGluZyB0byB0aGUgb2xkIHRlcm1jYXAgOm1sOiwKKyMgOm11OiBjYXBhYmlsaXRpZXMuICBBZnRlciB0aGF0LCBpdCBzdXBwb3J0cyBjYXBzIHBsYWJfbm9ybSwgbGFiZWxfb24sCisjIGxhYmVsX29mZiwgYW5kIGtleV9mMTEuLmtleV9mNjMgY2FwYWJpbGl0aWVzIGxpa2UgU1ZyNCdzLiAgVGhpcyBtYWtlcyB0aGUKKyMgSFAgYmluYXJ5IGZvcm1hdCBpbmNvbXBhdGlibGUgd2l0aCBTVnI0J3MuCisjCisjIElCTSBFeHRlbnNpb25zCisjCisjIFRoZXJlIGlzIGEgc2V0IG9mIG5vbnN0YW5kYXJkIHRlcm1pbmZvcyB1c2VkIGJ5IElCTSdzIEFJWCBvcGVyYXRpbmcgc3lzdGVtLgorIyBUaGUgQUlYIHRlcm1pbmZvIGxpYnJhcnkgZGl2ZXJnZWQgZnJvbSBTVnIxIHRlcm1pbmZvLCBhbmQgcmVwbGFjZXMgYWxsCisjIGNhcGFiaWxpdGllcyBmb2xsb3dpbmcgcHJ0cl9ub24gd2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgY2FwYWJpbHRpZXM6CisjIGJveFsxMl0sIGJhdHRbMTJdLCBjb2xiWzAxMjM0NTY3ODldLCBjb2xmWzAxMjM0NTY3ODldLCBmWzAxMjM0NTY3XSwga2J0YWIsCisjIGtkbywga2NtZCwga2Nwbiwga2VuZCwga2hscCwga25sLCBrbnBuLCBrcHBuLCBrcHBuLCBrcXVpdCwga3NlbCwga3NjbCwga3NjciwKKyMga3RhYiwga21wZlsxMjM0NTY3ODldLCBhcHN0ciwga3NmMS4ua3NmMTAsIGtmMTEuLi5rZjYzLCBrYWN0LCB0b3BsLCBidG1sLAorIyBydmVydCwgbHZlcnQuICAgU29tZSBvZiB0aGVzZSBhcmUgaWRlbnRpY2FsIHRvIFhQRzQvU1ZyNCBlcXVpdmFsZW50czoKKyMga2NtZCwga2VuZCwga2hscCwgYW5kIGtmMTEuLi5rZjYzLiAgVHdvIG90aGVycyAoa2J0YWIgYW5kIGtzZWwpIGNhbiBiZQorIyByZW5hbWVkICh0byBrY2J0IGFuZCBrc2x0KS4gIFRoZSBwbGFjZXMgaW4gdGhlIGJveFsxMl0gY2FwYWJpbGl0aWVzCisjIGNvcnJlc3BvbmQgdG8gYWNzYyBjaGFycywgaGVyZSBpcyB0aGUgbWFwcGluZzoKKyMKKyMJYm94MVswXSAgPSBBQ1NfVUxDT1JORVIKKyMJYm94MVsxXSAgPSBBQ1NfSExJTkUKKyMJYm94MVsyXSAgPSBBQ1NfVVJDT1JORVIKKyMJYm94MVszXSAgPSBBQ1NfVkxJTkUKKyMJYm94MVs0XSAgPSBBQ1NfTFJDT1JORVIKKyMJYm94MVs1XSAgPSBBQ1NfTExDT1JORVIKKyMJYm94MVs2XSAgPSBBQ1NfVFRFRQorIwlib3gxWzddICA9IEFDU19SVEVFCisjCWJveDFbOF0gID0gQUNTX0JURUUKKyMJYm94MVs5XSAgPSBBQ1NfTFRFRQorIwlib3gxWzEwXSA9IEFDU19QTFVTCisjCisjIFRoZSBib3gyIGNoYXJhY3RlcnMgYXJlIHRoZSBkb3VibGUtbGluZSB2ZXJzaW9ucyBvZiB0aGVzZSBmb3JtcyBncmFwaGljcy4KKyMgVGhlIEFJWCBiaW5hcnkgdGVybWluZm8gZm9ybWF0IGlzIGluY29tcGF0aWJsZSB3aXRoIFNWcjQncy4KKyMKKyMgSXJpcyBjb25zb2xlIGV4dGVuc2lvbnM6CisjCisjIEhTIGlzIGhhbGYtaW50ZW5zaXR5IHN0YXJ0OyBIRSBpcyBoYWxmLWludGVuc2l0eSBlbmQKKyMgQ1QgaXMgY29sb3IgdGVybWluYWwgdHlwZSAoZm9yIEN1cnNlcyAmIHJvZ3VlKQorIyBDUCBpcyBjb2xvciBjaGFuZ2UgZXNjYXBlIHNlcXVlbmNlCisjIENaIGFyZSBjb2xvciBuYW1lcyAoZm9yIEN1cnNlcyAmIHJvZ3VlKQorIworIyBUaGUgbmN1cnNlcyB0aWMgdXRpbGl0eSByZWNvZ25pemVzIEhTIGFzIGFuIGFsaWFzIGZvciBtaCA8ZGltPi4KKyMKKyMgVEMgRXh0ZW5zaW9uczoKKyMKKyMgVGhlcmUgaXMgYSBzZXQgb2YgZXh0ZW5kZWQgdGVybWNhcHMgYXNzb2NpYXRlZCB3aXRoIHNvbWV0aGluZworIyBjYWxsZWQgdGhlICJUZXJtaW5hbCBDb250cm9sIiBvciBUQyBwYWNrYWdlIGNyZWF0ZWQgYnkgTWFpblN0cmVhbSBTeXN0ZW1zLAorIyBXaW5maWVsZCBLYW5zYXMuICBUaGlzIG9uZSBhbHNvIHVzZXMgR1MvR0UgZm9yIGFzL2FlLCBhbmQgYWxzbyB1c2VzCisjIENGIGZvciBjaXZpcyBhbmQgQ08gZm9yIGN2dmlzLiAgRmluYWxseSwgdGhleSBkZWZpbmUgYSBib29sZWFuIDpjdDoKKyMgdGhhdCBmbGFncyBjb2xvciB0ZXJtaW5hbHMuCisjCisjIyMjIyMjIyBDSEFOR0UgSElTVE9SWQorIworIyBUaGUgbGFzdCAvZXRjL3Rlcm1jYXAgdmVyc2lvbiBtYWludGFpbmVkIGJ5IEpvaG4gS3VuemUgd2FzIDguMywgZGF0ZWQgOC81Lzk0LgorIyBSZWxlYXNlcyA5IGFuZCB1cCBhcmUgbWFpbnRhaW5lZCBieSBFcmljIFMuIFJheW1vbmQgYXMgcGFydCBvZiB0aGUgbmN1cnNlcworIyBwcm9qZWN0LgorIworIyBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHByZXNlbnQgaW4gSm9obiBLdW56ZSdzCisjIGxhc3QgdmVyc2lvbiBvZiB0aGUgdGVybWNhcCBtYXN0ZXIgZmlsZSwgZXhjZXB0IGFzIG5vdGVkIGluIHRoZSBjaGFuZ2UKKyMgY29tbWVudHMgYXQgZW5kIG9mIGZpbGUuICBTb21lIGluZm9ybWF0aW9uIGFib3V0IHZlcnkgYW5jaWVudCBvYnNvbGV0ZQorIyBjYXBhYmlsaXRpZXMgaGFzIGJlZW4gbW92ZWQgdG8gY29tbWVudHMuICBTb21lIGFsbC1udW1lcmljIG5hbWVzIG9mIG9sZGVyCisjIHRlcm1pbmFscyBoYXZlIGJlZW4gcmV0aXJlZC4KKyMKKyMgSSBjaGFuZ2VkIDpNVDogdG8gOmttOiAodGhlIDQuNEJTRCBuYW1lKSBldmVyeXdoZXJlLiAgSSBjb21tZW50ZWQgb3V0IHNvbWUKKyMgY2FwYWJpbGl0aWVzIChFUCwgZEYsIGRULCBkViwga24sIG1hLCBtbCwgbXUsIHhyLCB4eCkgdGhhdCBhcmUgbm8gbG9uZ2VyCisjIHVzZWQgYnkgQlNEIGN1cnNlcy4KKyMKKyMgVGhlIDkuMS4wIHZlcnNpb24gb2YgdGhpcyBmaWxlIHdhcyB0cmFuc2xhdGVkIGZyb20gbXkgbGlnaHRseS1lZGl0ZWQgY29weSBvZgorIyA4LjMsIHRoZW4gbWVjaGFuaWNhbGx5IGNoZWNrZWQgYWdhaW5zdCA4LjMgdXNpbmcgRW1hY3MgTGlzcCBjb2RlIHdyaXR0ZW4gZm9yCisjIHRoZSBwdXJwb3NlLiAgVW5sZXNzIHRoZSBuY3Vyc2VzIHRpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIExpc3AgY29kZSB3ZXJlCisjIG1ha2luZyBwZXJmZWN0bHkgc3luY2hyb25pemVkIG1pc3Rha2VzIHdoaWNoIEkgdGhlbiBmYWlsZWQgdG8gY2F0Y2ggYnkKKyMgZXllYmFsbCwgdGhlIHRyYW5zbGF0aW9uIHdhcyBjb3JyZWN0IGFuZCBwZXJmZWN0bHkgaW5mb3JtYXRpb24tcHJlc2VydmluZy4KKyMKKyMgTWFqb3IgdmVyc2lvbiBudW1iZXIgYnVtcHMgY29ycmVzcG9uZCB0byBtYWpvciB2ZXJzaW9uIGNoYW5nZXMgaW4gbmN1cnNlcy4KKyMKKyMgSGVyZSBpcyBhIGxvZyBvZiB0aGUgY2hhbmdlcyBzaW5jZSB0aGVuOgorIworIyA5LjEuMCAoV2VkIEZlYiAgMSAwNDo1MDozMiBFU1QgMTk5NSk6CisjCSogRmlyc3QgdGVybWluZm8gbWFzdGVyIHRyYW5zbGF0ZWQgZnJvbSA4LjMuCisjIDkuMi4wIChXZWQgRmViICAxIDEyOjIxOjQ1IEVTVCAxOTk1KToKKyMJKiBSZXBsYWNlZCBXeXNlIGVudHJpZXMgd2l0aCB1cGRhdGVkIGVudHJpZXMgc3VwcGxpZWQgYnkgdmVuZG9yLgorIworIyA5LjMuMCAoTW9uIEZlYiAgNiAxOToxNDo0MCBFU1QgMTk5NSk6CisjCSogQWRkZWQgY29udGFjdCAmIHN0YXR1cyBpbmZvIGZyb20gRy4gQ2xhcmsgQnJvd24gPGNsYXJrQHNzc2kuY29tPi4KKyMgOS4zLjEgKFR1ZSBGZWIgIDcgMTI6MDA6MjQgRVNUIDE5OTUpOgorIwkqIEJldHRlciBYRU5JWCBrZXljYXAgdHJhbnNsYXRpb24uICBEZXNjcmliZSBUQyB0ZXJtY2Fwcy4KKyMJKiBDb250YWN0IGFuZCBoaXN0b3J5IGluZm8gc3VwcGxpZWQgYnkgUXVtZS4KKyMgOS4zLjIgKFNhdCBGZWIgMTEgMjM6NDA6MDIgRVNUIDE5OTUpOgorIwkqIFJhaWRlZCB0aGUgU2h1Zm9yZCBGVFAgc2l0ZSBmb3IgcmVjZW50IHRlcm1jYXBzL3Rlcm1pbmZvcy4KKyMJKiBBZGRlZCBpbmZvcm1hdGlvbiBvbiBYMy42NCBhbmQgVlQxMDAgc3RhbmRhcmQgZXNjYXBlIHNlcXVlbmNlcy4KKyMgOS4zLjMgKE1vbiBGZWIgMTMgMTI6MjY6MTUgRVNUIDE5OTUpOgorIwkqIEFkZGVkIGEgY29ycmVjdCBYMTFSNiB4dGVybSBlbnRyeS4KKyMJKiBGaXhlZCB0ZXJtaW5mbyB0cmFuc2xhdGlvbnMgb2YgcGFkZGluZy4KKyMgOS4zLjQgKFdlZCBGZWIgMjIgMTk6Mjc6MzQgRVNUIDE5OTUpOgorIwkqIEFkZGVkIGNvcnJlY3QgYWNzYy9zbWFjcy9ybWFjcyBzdHJpbmdzIGZvciB2dDEwMCBhbmQgeHRlcm0uCisjCSogQWRkZWQgdTYvdTcvdTgvdTkgY2FwYWJpbGl0aWVzLgorIwkqIEFkZGVkIFBDVlQgZW50cnkuCisjIDkuMy41IChUaHUgRmViIDIzIDA5OjM3OjEyIEVTVCAxOTk1KToKKyMJKiBFbWFjcyB1c2VzIDpzbzosIG5vdCA6bXI6LCBmb3IgaXRzIG1vZGUgbGluZS4gIEZpeCBsaW51eCBlbnRyeQorIwkgIHRvIHVzZSByZXZlcnNlLXZpZGVvIHN0YW5kb3V0IHNvIEVtYWNzIHdpbGwgbG9vayByaWdodC4KKyMJKiBBZGRlZCBlbDEgY2FwYWJpbGl0eSB0byBhbnNpLgorIwkqIEFkZGVkIHNtYWNzL3JtYWNzIHRvIGFuc2kuc3lzLgorIworIyA5LjQuMCAoU2F0IEZlYiAyNSAxNjo0MzoyNSBFU1QgMTk5NSk6CisjCSogTmV3IG10NzAgZW50cnkuCisjCSogQWRkZWQgQ09QWVJJR0hUUyBBTkQgT1RIRVIgREVMVVNJT05TLgorIwkqIEFkZGVkIEFUJlQgMjN4eCAmIDUwMC81MTMsIHZ0MjIwIGFuZCB2dDQyMCwgb3B1czNuMSssIG5ldHJvbmljcworIwkgIHNtYXJ0dmlkICYgc21hcnRlcm0sIGFtcGV4IDE3NSAmIDIxOSAmIDIzMiwKKyMJICBlbnYyMzAsIGZhbGNvIHRzMTAwLCBmbHVrZSwgaW50ZXJ0dWJlLCBzdXBlcmJyYWluLCBuY3I3OTAxLCB2aWMyMCwKKyMJICBvenppZSwgdHJzMjAwLCB0cjYwMCwgVGFuZHkgJiBUZXhhcyBJbnN0cnVtZW50cyBWRFRzLCBpbnRleHQyLAorIwkgIHNjcmV3cG9pbnQsIGZ2aWV3cG9pbnQsIENvbnRlbCBCdXNpbmVzcyBTeXN0ZW1zLCBEYXRhbWVkaWEgQ29sb3JzY2FuLAorIwkgIGFkbTM2LCBtaW1lMzE0LCBlcmdvNDAwMCwgY2EyMjg1MS4gIFJlcGxhY2VkIGF0dDczMDAsIGVzcHJpdCwgZGQ1NTAwLgorIwkqIFJlcGxhY2VkIHRoZSBQZXJraW4tRWxtZXIgZW50cmllcyB3aXRoIHZlbmRvcidzIG9mZmljaWFsIG9uZXMuCisjCSogUmVzdG9yZWQgdGhlIG9sZCBtaW5pbWFsLWFuc2kgZW50cnksIGx1bmEgbmVlZHMgaXQuCisjCSogRml4ZWQgc29tZSBpbmNvcnJlY3QgaXAgYW5kIHByb3BvcnRpb25hbC1wYWRkaW5nIHRyYW5zbGF0aW9ucy4KKyMgOS40LjEgKE1vbiBGZWIgMjcgMTQ6MTg6MzMgRVNUIDE5OTUpOgorIwkqIEZpeCBsaW51eCAmIEFUMzg2IHNnciBzdHJpbmdzIHRvIGRvIEFfQUxUQ0hBUlNFVCB0dXJub2ZmIGNvcnJlY3RseS4KKyMJKiBNYWtlIHRoZSB4dGVybSBlbnRyeSA2NSBsaW5lcyBhZ2FpbjsgY3JlYXRlIHh0ZXJtMjUgYW5kIHh0ZXJtMjQKKyMJICB0byBmb3JjZSBhIHBhcnRpY3VsYXIgaGVpZ2h0LgorIwkqIEFkZGVkIGJlZWhpdmU0IGFuZCByZW9yZ2FuaXplZCBvdGhlciBIYXJyaXMgZW50cmllcy4KKyMgOS40LjIgKFRodSBNYXIgIDkgMDE6NDU6NDQgRVNUIDE5OTUpOgorIwkqIE1lcmdlZCBpbiBERUMncyBvZmZpY2lhbCBlbnRyaWVzIGZvciBpdHMgdGVybWluYWxzLiAgVGhlIG9ubHkgb2xkCisjCSAgZW50cnkgSSBrZXB0IHdhcyBEb3VnIEd3eW4ncyBhbHRlcm5hdGUgdnQxMDAgKGFzIHZ0MTAwLWF2bykuCisjCSogUmVwbGFjZWQgdGhlIHRyYW5zbGF0ZWQgQkJOIEJpdGdyYXBoIGVudHJpZXMgd2l0aCBwdXJwb3NlLWJ1aWx0CisjCSAgb25lcyBmcm9tIEFUJlQncyBTVnIzLgorIwkqIFJlcGxhY2VkIHRoZSBBVCZUIGVudHJpZXMgd2l0aCBBVCZUJ3Mgb2ZmaWNpYWwgdGVybWluZm9zLgorIwkqIEFkZGVkIHRlbGVyYXkgMTYsIHZjNDE1LCBjb3BzMTAuCisjCSogTWVyZ2VkIGluIG1hbnkgaW5kaXZpZHVhbCBjYXBhYmlsaXRpZXMgZnJvbSBTQ08gdGVybWluZm8gZmlsZXMuCisjIDkuNC4zIChNb24gTWFyIDEzIDAyOjM3OjUzIEVTVCAxOTk1KToKKyMJKiBUeXBvIGZpeGVzLgorIwkqIENoYW5nZSBsaW51eCBlbnRyeSBzbyBBX1BST1RFQ1QgZW5hYmxlcyBJQk0tUEMgUk9NIGNoYXJhY3RlcnMuCisjIDkuNC40IChNb24gTWFyIDI3IDEyOjMyOjM1IEVTVCAxOTk1KToKKyMJKiBBZGRlZCB0dHkzNSwgQW5uIEFyYm9yIEd1cnUgc2VyaWVzLiB2aTMwMCBhbmQgNTUwLCBjZzc5MDAsIHR2aTgwMywKKyMJICBwdDIxMCwgaWJtMzE2NCwgSUJNIFN5c3RlbSAxLCBjdHJtLCBUeW1zaGFyZSBzY2Fuc2V0LCBkdDIwMCwgYWRtMjEsCisjCSAgc2ltdGVybSwgY2l0b2ggYW5kIHZhcmlhbnRzLgorIwkqIFJlcGxhY2VkIHNvbCBlbnRyeSB3aXRoIHNvbDEgYW5kIHNvbDIuCisjCSogUmVwbGFjZWQgUXVtZSBRVlQgYW5kIEZyZWVkb20tc2VyaWVzIGVudHJpZXMgd2l0aCBwdXJwb3NlLWJ1aWx0CisjCSAgdGVybWluZm8gZW50cmllcy4KKyMJKiBFbmhhbmNlZCB2dDIyMCwgdHZpOTEwLCB0dmk5MjQsIGhwdGVybSwgaHAyNjQ1LCBhZG00MiwgdGVrCisjCSAgYW5kIGRnMjAwIGVudHJpZXMgdXNpbmcgY2FwcyBmcm9tIGZyb20gU0NPLgorIwkqIEFkZGVkIHRoZSB1c3VhbCBzZXQgb2YgZnVuY3Rpb24ta2V5IG1hcHBpbmdzIHRvIEFOU0kgZW50cnkuCisjCSogQ29ycmVjdGVkIHh0ZXJtJ3MgZnVuY3Rpb24ta2V5IGNhcGFiaWxpdGllcy4KKyMgOS40LjUgKFR1ZSBNYXIgMjggMTQ6Mjc6NDkgRVNUIDE5OTUpOgorIwkqIEZpeCBpbiB4dGVybSBlbnRyeSwgY3ViIGFuZCBjdWQgYXJlIG5vdCByZWxpYWJsZSB1bmRlciBYMTFSNi4KKyMgOS40LjYgKFRodSBNYXIgMzAgMTQ6NTI6MTUgRVNUIDE5OTUpOgorIwkqIEZpeCBpbiB4dGVybSBlbnRyeSwgZ2V0IHRoZSBhcnJvdyBrZXlzIHJpZ2h0LgorIwkqIENoYW5nZSBzb21lIFwwIGVzY2FwZXMgdG8gXDIwMC4KKyMgOS40LjcgKFR1ZSBBcHIgIDQgMTE6Mjc6MTEgRURUIDE5OTUpCisjCSogQWRkZWQgYXBwbGUgKFZpZGV4IGNhcmQpLCBhZG0xYSwgb2FkbTMxLgorIwkqIEZpeGVkIG1hbGZvcm1lZCBhbXBleCBjc3IuCisjCSogRml4ZWQgYWN0NCwgY3liMTEwOyB0aGV5IGhhZCBvbGQtc3R5bGUgcHJlZml4IHBhZGRpbmcgbGVmdCBpbi4KKyMJKiBDaGFuZ2VkIG1hbmRhdG9yeSB0byBhZHZpc29yeSBwYWRkaW5nIGluIG1hbnkgZW50cmllcy4KKyMJKiBSZXBsYWNlZCBIUCBlbnRyaWVzIHVwIHRvIGhwc3ViIHdpdGggcHVycG9zZS1idWlsdCBvbmVzLgorIwkqIEJsYW5rIHJtaXIvc21pci9ybWRjL3NtZGMgY2FwYWJpbGl0aWVzIHJlbW92ZWQuCisjCSogU21hbGwgZml4ZXMgbWVyZ2VkIGluIGZyb20gU0NPIGVudHJpZXMgZm9yIGxwciwgZm9zLCB0dmk5MTArLCB0dmk5MjQuCisjIDkuNC44IChGcmkgQXByICA3IDA5OjM2OjM0IEVEVCAxOTkpOgorIwkqIFJlcGxhY2VkIHRoZSBBbm4gQXJib3IgZW50cmllcyB3aXRoIFNDTydzLCB0aGUgaW5pdCBzdHJpbmdzIGFyZQorIwkgIG1vcmUgZWZmaWNpZW50IChidXQgdGhlIGVudHJpZXMgb3RoZXJ3aXNlIGlkZW50aWNhbCkuCisjCSogQWRkZWQgZGcyMTEgZnJvbSBTaHVmb3JkIGFyY2hpdmUuCisjCSogQWRkZWQgc3luZXJ0ZWssIGFwcGxlLXNvcm9jLCBpYm1wYywgcGMtdmVuaXgsIHBjLWNvaGVyZW50LCB4dGFsaywKKyMJICBhZG00Mi1ubCwgcGM1MiwgZ3M2MzAwLCB4ZXJveDgyMCwgdXRzMzAuCisjCSogUHVsbCBTQ08ncyBwYWRkaW5nIGludG8gdmkyMDAgZW50cnkuCisjCSogSW1wcm92ZWQgY2FwYWJpbGl0aWVzIGZvciB0dmk0MTA3IGFuZCBvdGhlciBUZWxldmlkZW8gYW5kIFZpZXdwb2ludAorIwkgIGVudHJpZXMgbWVyZ2VkIGluIGZyb20gU0NPJ3MgZGVzY3JpcHRpb25zLgorIwkqIEZpeGVkIG9sZC1zdHlsZSBwcmVmaXggcGFkZGluZyBvbiB6ZW41MCwgaDE1MDAuCisjCSogTW92ZWQgb2xkIHN1cGVyYmVlIGVudHJ5IHRvIHN1cGVyYmVlLXhzYiwgcHVsbGVkIGluIG5ldyBzdXBlcmJlZQorIwkgIGVudHJ5IGZyb20gU0NPJ3MgZGVzY3JpcHRpb24uCisjCSogUmVvcmdhbml6ZWQgdGhlIHNwZWNpYWwgZW50cmllcy4KKyMJKiBBZGRlZCBsbSMwIHRvIGNidW5peCBhbmQgdmlydHVhbCBlbnRyaWVzLgorIworIyA5LjUuMCAoTW9uIEFwciAxMCAxMTozMDowMCBFRFQgMTk5NSk6CisjCSogUmVzdG9yZWQgY2RjNDU2dHN0LgorIwkqIEZpeGVkIHNiMSBlbnRyeSwgU0NPIGVycm9uZW91c2x5IGxlZnQgb3V0IHRoZSB4c2IgZ2xpdGNoLgorIwkqIEFkZGVkIG1lZ2F0ZWssIGJlYWNvbiwgbWljcm9raXQuCisjCSogRnJlZXplIGZvciBuY3Vyc2VzLTEuOSByZWxlYXNlLgorIyA5LjUuMSAoRnJpIEFwciAyMSAxMjo0Njo0MiBFRFQgMTk5NSk6CisjCSogQWRkZWQgaGlzdG9yaWNhbCBkYXRhIGZvciBUQUIuCisjCSogQ29tbWVudCBmaXhlcyBmcm9tIERhdmlkIE1hY0tlbnppZS4KKyMJKiBBZGRlZCB0aGUgbmV3IEJTREkgcGMzIGVudHJ5LgorIyA5LjUuMiAoVHVlIEFwciAyNSAxNzoyNzo1MiBFRFQgMTk5NSkKKyMJKiBBIGNoYW5nZSBpbiB0aGUgdGljIC1DIGxvZ2ljIG5vdyBlbnN1cmVzIHRoYXQgYWxsIGVudHJpZXMgaW4KKyMJICB0aGUgdGVybWNhcCB0cmFuc2xhdGlvbiB3aWxsIGZpdCBpbiA8IDEwMjQgYnl0ZXMuCisjCSogQWRkZWQgYGJvYmNhdCcgYW5kIGBnYXRvcicgSFAgY29uc29sZXMgYW5kIHRoZSBOdSBtYWNoaW5lIGVudHJpZXMKKyMJICBmcm9tIEdOVSB0ZXJtY2FwIGZpbGUuICBUaGlzIG1lcmdlcyBpbiBhbGwgdGhlaXIgbG9jYWwgaW5mb3JtYXRpb24uCisjIDkuNS4zIChUdWUgQXByIDI1IDIyOjI4OjEzIEVEVCAxOTk1KQorIwkqIENoYW5nZWQgdGljIC1DIGxvZ2ljIHRvIGR1bXAgYWxsIGNhcGFiaWxpdGllcyB1c2VkIGJ5IEdOVSB0ZXJtY2FwLgorIwkqIEFkZGVkIHdhcm5pbmdzIGFib3V0IGVudHJpZXMgd2l0aCBsb25nIHRyYW5zbGF0aW9ucyAocmVzdG9yaW5nCisjCSAgYWxsIHRoZSBHTlUgdGVybWNhcHMgcHVzaGVzIGEgZmV3IG92ZXIgdGhlIGVkZ2UpLgorIyA5LjUuNCAoV2VkIEFwciAyNiAxNTozNTowOSBFRFQgMTk5NSkKKyMJKiBZZXQgYW5vdGhlciB0aWMgY2hhbmdlLCBhbmQgYSBjb3VwbGUgb2YgZW50cnkgdHdlYWtzLCB0byByZWR1Y2UgdGhlCisjCSAgbnVtYmVyIG9mIGxvbmcgKD4gMTAyNCkgdGVybWNhcCB0cmFuc2xhdGlvbnMgYmFjayB0byAwLgorIworIyA5LjYuMCAoTW9uIE1heSAgMSAxMDozNTo1NCBFRFQgMTk5NSkKKyMJKiBBZGRlZCBrZjEzLWtmMjAgdG8gTGludXggZW50cnkuCisjCSogUmVndWxhcml6ZSBQcmltZSB0ZXJtaW5hbCBuYW1lcy4KKyMJKiBIaXN0b3JpY2FsIGRhdGEgb24gU3luZXJ0ZWsuCisjCSogRnJlZXplIGZvciBuY3Vyc2VzLTEuOS4xLgorIyA5LjYuMSAoU2F0IE1heSAgNiAwMjowMDo1MiBFRFQgMTk5NSk6CisjCSogQWRkZWQgdHJ1ZSB4dGVybS1jb2xvciBlbnRyeSwgcmVuYW1lZCBkam0ncyBwc2V1ZG8tY29sb3IgZW50cnkuCisjCSogRWxpbWluYXRlIHdoaXRlc3BhY2UgaW4gc2hvcnQgbmFtZSBmaWVsZHMsIHRoaXMgdGFua3Mgc29tZSBzY3JpcHRzLgorIwkqIE5hbWUgZmllbGQgY2hhbmdlcyB0byBzaG9ydGVuIHNvbWUgbG9uZyBlbnRyaWVzLgorIwkqIFRlcm1jYXAgdHJhbnNsYXRpb24gbm93IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGVtcHR5IHJtaXIvc21pcgorIwkgIHdoZW4gaWNoMS9pY2ggaXMgcHJlc2VudCAoY29wZXMgd2l0aCBhbiBhbmNpZW50IHZpIGJ1ZykuCisjCSogQWRkZWQgYHNjcmVlbicgZW50cmllcyBmcm9tIEZTRidzIHNjcmVlbi0zLjYuMi4KKyMJKiBBZGRlZCBsaW51eC1uaWMgYW5kIHh0ZXJtLW5pYyBlbnRyaWVzLgorIyA5LjYuMiAoU2F0IE1heSAgNiAxNzowMDo1NSBFRFQgMTk5NSk6CisjCSogQ2hhbmdlIGxpbnV4IGVudHJ5IHRvIHVzZSBzbWFjcz1cRVsxMW0gYW5kIGhhdmUgYW4gZXhwbGljaXQgYWNzYywKKyMJICBlbGltaW5hdGluZyBzb21lIHNwZWNpYWwtY2FzZSBjb2RlIGluIG5jdXJzZXMuCisjCisjIDkuNy4wIChUdWUgTWF5ICA5IDE4OjAzOjEyIEVEVCAxOTk1KToKKyMJKiBBZGRlZCB2dDMyMC1rMywgcnN2aWR0eCBmcm9tIHRoZSBFbWFjcyB0ZXJtY2FwLmRhdCBmaWxlLiAgSSB0aGluaworIwkgIHRoYXQgY2FwdHVyZXMgZXZlcnl0aGluZyB1bmlxdWUgZnJvbSBpdC4KKyMJKiBBZGRlZCByZW9yZGVyIHNjcmlwdCBnZW5lcmF0b3IuCisjCSogRnJlZXplIGZvciBuY3Vyc2VzIDEuOS4yIHJlbGVhc2UuCisjIDkuNy4xIChUaHUgSnVuIDI5IDA5OjM1OjIyIEVEVCAxOTk1KToKKyMJKiBBZGRlZCBTZWFuIEZhcmxleSdzIGtzcGQsIGZsYXNoLCByczEgY2FwYWJpbGl0aWVzIGZvciBsaW51eC4KKyMJKiBBZGRlZCBPbGFmIFNpZWJlcnQncyBjb3JyZWN0aW9ucyBmb3IgYWRtMTIuCisjCSogYW5zaS1wYy1jb2xvciBub3cgaW5jbHVkZXMgdGhlIGNvbG9ycyBhbmQgcGFpcnMgY2Fwcywgc28gdGhhdAorIwkgIGVudHJpZXMgd2hpY2ggdXNlIGl0IHdpbGwgaW5oZXJpdCB0aGVtIGF1dG9tYXRpY2FsbHkuCisjCSogVGhlIGxpbnV4IGVudHJ5IGNhbiBub3cgcmVjb2duaXplIHRoZSBjZW50ZXIgKGtleXBhZCA1KSBrZXkuCisjCSogUmVtb3ZlZCBzb21lIGp1bmsgdGhhdCBmb3VuZCBpdHMgd2F5IGludG8gTGludXggYWNzYy4KKyMKKyMgOS44LjAgKEZyaSBKdWwgIDcgMDQ6NDY6NTcgRURUIDE5OTUpOgorIwkqIEFkZCA1MCUgY3V0IG1hcmsgYXMgYSBkZXNwZXJhdGUgaGFjayB0byByZWR1Y2UgdGljJ3MgY29yZSB1c2FnZS4KKyMJKiB4dGVybSBkb2Vzbid0IHRyeSB0byB1c2UgYXBwbGljYXRpb24ga2V5cGFkIG1vZGUgYW55IG1vcmUuCisjCSogRnJlZXplIGZvciBuY3Vyc2VzLTEuOS4zIHJlbGVhc2UuCisjIDkuOC4xIChUaHUgSnVsIDE5IDE3OjAyOjEyIEVEVCAxOTk1KToKKyMJKiBBZGRlZCBjb3JyZWN0ZWQgc3VuIGVudHJ5IGZyb20gdmVuZG9yLgorIwkqIEFkZGVkIGNzciBjYXBhYmlsaXR5IHRvIGxpbnV4IGVudHJ5LgorIwkqIFBldGVyIFdlbW0gc2F5cyB0aGUgYXQzODYgaHBhIHNob3VsZCBiZSBcRVslaSVwMSVkRywgbm90IFxFWyVwMSVkRy4KKyMJKiBBZGRlZCB2dDEwMi1uc2dyIHRvIGNvcGUgd2l0aCBzdHVwaWQgSUJNIFBDIGBWVDEwMCcgZW11bGF0b3JzLgorIwkqIFNvbWUgY29tbWVudGVkLW91dCBjYXBzIGluIGxvbmcgZW50cmllcyBjb21lIGJhY2sgaW4sIG15IGNvZGUKKyMJICBmb3IgY29tcHV0aW5nIHN0cmluZy10YWJsZSBsZW5ndGhzIGhhZCBhIGJ1ZyBpbiBpdC4KKyMJKiBwY2Fuc2kgc2VyaWVzIG1vZGlmaWVkIHRvIGZpdCBjb21tLXByb2dyYW0gcmVhbGl0eSBiZXR0ZXIuCisjIDkuOC4yIChTYXQgU2VwICA5IDIzOjM1OjAwIEVEVCAxOTk1KToKKyMJKiBCU0QvT1MgYWN0dWFsbHkgc2hpcHMgdGhlIGlibXBjMyBib2xkIGVudHJ5IGFzIGl0cyBjb25zb2xlLgorIwkqIENvcnJlY3Qgc29tZSBiYWQgYWxpYXNlcyBpbiB0aGUgcGNhbnNpIHNlcmllcworIwkqIEFkZGVkIGVudHJ5IGZvciBRTlggY29uc29sZS4KKyMJKiBDbGVhbiB1cCBkdXBsaWNhdGUgbG9uZyBuYW1lcyBmb3IgdXNlIHdpdGggNC40IGxpYnJhcnkuCisjCSogQ2hhbmdlIHZ0MTAwIHN0YW5kb3V0IHRvIGJlIG5vcm1hbCByZXZlcnNlIHZpZGUsIG5vdCBicmlnaHQgcmV2ZXJzZTsKKyMJICB0aGlzIG1ha2VzIHRoZSBFbWFjcyBzdGF0dXMgbGluZSBsb29rIGJldHRlci4KKyMgOS44LjMgKFN1biBTZXAgMTAgMTM6MDc6MzQgRURUIDE5OTUpOgorIwkqIEFkZGVkIEFkYW0gVGhvbXBzb24ncyBWVDMyMCBlbnRyaWVzLCBhbHNvIGhpcyBkdHgtc2FzIGFuZCB6MzQwLgorIwkqIE1pbm9yIHN1cmdlcnksIG1vc3RseSBvbiBuYW1lIHN0cmluZ3MsIHRvIHNob3J0ZW4gdGVybWNhcCB2ZXJzaW9uLgorIworIyA5LjkuMCAoU2F0IFNlcCAxNiAyMzowMzo0OCBFRFQgMTk5NSk6CisjCSogQWRkZWQgZGVjLXZ0MTAwIGZvciB1c2Ugd2l0aCB0aGUgRVdBTiBlbXVsYXRvci4KKyMJKiBBZGRlZCBrbW91cyB0byB4dGVybSBmb3IgdXNlIHdpdGggeHRlcm0ncyBtb3VzZS10cmFja2luZyBmYWNpbGl0eS4KKyMJKiBGcmVlemUgZm9yIDEuOS41IGFscGhhIHJlbGVhc2UuCisjIDkuOS4xIChXZWQgU2VwIDIwIDEzOjQ2OjA5IEVEVCAxOTk1KToKKyMJKiBDaGFuZ2VkIHh0ZXJtIGxpbmVzIHRvIDI0LCB0aGUgWDExUjYgZGVmYXVsdC4KKyMgOS45LjIgKFNhdCBTZXAgMjMgMjE6Mjk6MjEgRURUIDE5OTUpOgorIwkqIEFkZGVkIDcgbmV3bHkgZGlzY292ZXJlZCwgdW5kb2N1bWVudGVkIGFjc2MgY2hhcmFjdGVycyB0byBsaW51eAorIwkgIGVudHJ5ICh0aGUgcHJ5ent8fSBjaGFyYWN0ZXJzKS4KKyMJKiBuY3Vyc2VzIG5vIGxvbmdlciBzdGVhbHMgQV9QUk9URUNULiAgU2ltcGxpZnkgbGludXggc2dyIGFjY29yZGluZ2x5LgorIwkqIENvcnJlY3QgdHdvIHR5cG9zIGluIHRoZSB4dGVybSBlbnRyaWVzIGludHJvZHVjZWQgaW4gOS45LjEuCisjCSogSSBmaW5hbGx5IGZpZ3VyZWQgb3V0IGhvdyB0byB0cmFuc2xhdGUga28gY2FwYWJpbGl0aWVzLiAgRG9uZS4KKyMJKiBBZGRlZCB0dmk5MjEgZW50cmllcyBmcm9tIFRpbSBUaGVpc2VuLgorIwkqIENsZWFudXA6IGRnZDIxMSAtPiBkZzIxMSwgYWRtNDItbmwgLT4gYWRtNDItbnNsLgorIwkqIFJlbW92ZWQgbXlzdGVyeSB0ZWMgZW50cnksIGl0IHdhcyBuZWl0aGVyIGludGVyZXN0aW5nIG5vciB1c2VmdWwuCisjCSogc2hvcnRlbmVkIGFsdG9zMywgcXZ0MjAzLCB0dmk5MTArLCB0dmk5MkQsIHR2aTkyMS1nLCB0dmk5NTUsIHZpMjAwLWYsCisjCSAgdmkzMDAtc3MsIGF0dDUwNS0yNCwgY29udGVsMzAxLCBkbTMwNDUsIGYyMDB2aSwgcGU3MDAwYywgdmMzMDNhLAorIwkgIHRyczIwMCwgd2luZDI2LCB3aW5kNDAsIHdpbmQ1MCwgY2RjNDU2dHN0LCBka3U3MDAzLCBmMTEwLCBkZzIxMSwKKyMJICBieSBtYWtpbmcgdGhlbSByZWxhdGl2ZSB0byB1c2UgY2FwYWJpbGl0aWVzCisjCSogQWRkZWQgY3VmMT1eTCB0byB0dmk5MjUgZnJvbSBkZWxldGVkIHZhcmlhbnQgdHZpOTI1YS4KKyMJKiBmaXhlZCBjdXAgaW4gYWRtMjIgZW50cnkgYW5kIHBhcmFtZXRyaXplZCBzdHJpbmdzIGluIHZ0MzIwLWszLgorIwkqIGFkZGVkIGl0IzggdG8gZW50cmllcyB0aGF0IHVzZWQgdG8gaGF2ZSA6cHQ6IC0tIHR2aTkxMiwgdmkyMDAsCisjCSAgYW1wZXg4MCwKKyMJKiBUcmFuc2xhdGUgYWxsIGhvbWU9XEVbO0ggY2FwYWJpbGl0aWVzIHRvIGhvbWU9XEVbSCwgdGhleSdyZQorIwkgIGVxdWl2YWxlbnQuCisjCSogVHJhbnNsYXRlIFxFWzBtIC0+IFxFW20gaW4gW3JzXW1zbywgW3JzXW11bCwgYW5kIGluaXQgc3RyaW5ncyBvZgorIwkgIHZ0MTAwIGFuZCBBTlNJLWxpa2UgdGVybWluYWxzLgorIyA5LjkuMyAoVHVlIFNlcCAyNiAyMDoxMToxNSBFRFQgMTk5NSk6CisjCSogQWRkZWQgaXQjOCBhbmQgaHQ9XHQgdG8gKmFsbCogZW50cmllcyB3aXRoIDpwdDo7IHRoZSBuY3Vyc2VzIHRpYworIwkgIGRvZXMgdGhpcyBub3csIHRvby4KKyMJKiBmdmlld3BvaW50IGlzIGdvbmUsIGl0IGR1cGxpY2F0ZWQgc2NyZXdwb2ludC4KKyMJKiBBZGRlZCBocDI2MjcsIGdyYXBob3MsIGdyYXBob3MtMzAsIGhwZXgsIGlibWVnYSwgaWJtODUxNCwgaWJtODUxNC1jLAorIwkgIGlibXZnYSwgaWJtdmdhLWMsIG1pbml4LCBtbTM0MCwgbXQ0NTIwLXJ2LCBzY3JlZW4yLCBzY3JlZW4zLAorIwkgIHZlcnNhdGVybSwgdmk1MDAsIHZzYywgdnQxMzEsIHZ0MzQwLCB2dDQwMCBlbnRyaWVzIGZyb20gVVcuCisjCSAgVGhlIFVXIHZpNTAgcmVwbGFjZXMgdGhlIG9sZCBvbmUsIHdoaWNoIGJlY29tZXMgdmk1MGFkbSwKKyMJKiBObyBtb3JlIGVtYmVkZGVkIGNvbW1hcyBpbiBuYW1lIGZpZWxkcy4KKyMKKyMgOS4xMC4wIChXZWQgT2N0ICA0IDE1OjM5OjM3IEVEVCAxOTk1KToKKyMJKiBYRU5JWCBmb3JtcyBjaGFyYWN0ZXJzIGluIGZvcywgdHJzMTYsIHNjb2Fuc2kgYmVjb21lIGFjc2Mgc3RyaW5ncywKKyMJKiBJbnRyb2R1Y2VkIGtsb25lKyogZW50cmllcyBmb3IgZGVzY3JpYmluZyBJbnRlbC1jb25zb2xlIGJlaGF2aW9yLgorIwkqIExpbnV4IGticyBpcyBkZWZhdWx0LW1hcHBlZCB0byBkZWxldGUgZm9yIHNvbWUgYnJhaW4tZGVhZCByZWFzb24uCisjCSogLW5zbCAtPiAtbnMuICBUaGUgLXBwIHN5bnRheCBpcyBvYnNvbGV0ZS4KKyMJKiBFbGltaW5hdGUgW0EtWl0qIHByaW1hcmllcyBpbiBhY2NvcmRhbmNlIHdpdGggU1ZyNCB0ZXJtaW5mbyBkb2NzLgorIwkqIE1ha2UgeHRlcm0gZW50cnkgZG8gYXBwbGljYXRpb24ta2V5cGFkIG1vZGUgYWdhaW4uICBJIGdvdCBjb21wbGFpbnRzCisjCSAgdGhhdCBpdCB3YXMgbWVzc2luZyB1cCBzb21lb25lJ3MgMzI3MCBlbXVsYXRvci4KKyMJKiBBZGRlZCBzb21lIGxvbmduYW1lIGZpZWxkcyBpbiBvcmRlciB0byBhdm9pZCB3YXJuaW5nIG1lc3NhZ2VzIGZyb20KKyMJICBvbGRlciB0aWMgaW1wbGVtZW50YXRpb25zLgorIwkqIEFjY29yZGluZyB0byBjdGxzZXFzLm1zLCB4dGVybSBoYXMgYSBmdWxsIHZ0MTAwIGdyYXBoaWNzIHNldC4gIFVzZQorIwkgIGl0ISAoVGhpcyBnaXZlcyB1cyBwaSwgZ3JlYXRlciB0aGFuLCBsZXNzIHRoYW4sIGFuZCBhIGZldyBtb3JlLikKKyMJKiBGcmVlemUgZm9yIG5jdXJzZXMtMS45LjYgcmVsZWFzZS4KKyMgOS4xMC4xIChTYXQgT2N0IDIxIDIyOjE4OjA5IEVEVCAxOTk1KToKKyMJKiBBZGQgeG9uIHRvIGEgbnVtYmVyIG9mIGNvbnNvbGUgZW50cmllcywgdGhleSdyZSBtZW1vcnktbWFwcGVkIGFuZAorIwkgIGRvbid0IG5lZWQgcGFkZGluZy4KKyMJKiBDb3JyZWN0IHRoZSB1c2UgZGVwZW5kZW5jaWVzIGluIHRoZSBhbnNpIHNlcmllcy4KKyMJKiBIYW5kLXRyYW5zbGF0ZSBtb3JlIFhFTklYIGNhcGFiaWxpdGllcy4KKyMJKiBBZGRlZCBocHRlcm0gZW50cnkgZm9yIEhQJ3MgWCB0ZXJtaW5hbCBlbXVsYXRvci4KKyMJKiBBZGRlZCBhaXh0ZXJtIGVudHJpZXMuCisjCSogU2hvcnRlbmVkIGZvdXIgbmFtZXMgc28gZXZlcnl0aGluZyBmaXRzIGluIDE0IGNoYXJzLgorIworIyA5LjExLjAgKFRodSBOb3YgIDIgMTc6Mjk6MzUgRVNUIDE5OTUpOgorIwkqIEFkZGVkIGliY3MyIGVudHJ5IGFuZCBpbmZvIG9uIGlCQ1MyIHN0YW5kYXJkLgorIwkqIENvcnJlY3RlZCBocGEvdnBhIGluIGxpbnV4IGVudHJ5LiAgVGhleSBzdGlsbCBmYWlsIHRoZSB3b3JtIHRlc3QuCisjCSogV2UgY2FuIGhhbmRsZSB0aGUgSFAgbWVtbC9tZW11IGNhcGFiaWxpdHkgbm93LgorIwkqIEFkZGVkIHNtYWNzIHRvIGtsb25lIGVudHJpZXMsIGp1c3QgYXMgZG9jdW1lbnRhdGlvbi4KKyMJKiBDYXJyZWN0ZWQgYW5zaS5zeXMgYW5kIGNpdC01MDAgZW50cmllcy4KKyMJKiBBZGRlZCB6MzksIHZ0MzIwLWszMTEsIHYyMjBjLCBhbmQgYXZhdGFyIGVudHJpZXMuCisjCSogTWFrZSBwY2Fuc2kgdXNlIHRoZSBhbnNpLnN5cyBpbnZpcyBjYXBhYmlsaXR5LgorIwkqIEFkZGVkIERJUCBzd2l0Y2ggZGVzY3JpcHRpb25zIGZvciB2dDEwMCwgYWRtMzEsIHR2aTkxMCwgdHZpOTIwYywKKyMJICB0dmk5MjUsIHR2aTk1MCwgZHQ4MCwgbmNyNzkwMGksIGgxOS4KKyMJKiBYMy42NCBoYXMgYmVlbiB3aXRoZHJhd24sIGNoYW5nZSBzb21lIHJlZmVyZW5jZXMuCisjCSogUmVtb3ZlZCBmdW5jdGlvbiBrZXlzIGZyb20gYW5zaS1tIGVudHJ5LgorIwkqIENvcnJlY3RlZCBhbnNpLnN5cyBlbnRyeS4KKyMJKiBGcmVlemUgZm9yIG5jdXJzZXMtMS45LjcgcmVsZWFzZS4KKyMgOS4xMS4xIChUdWUgTm92ICA2IDE4OjE4OjM4IEVTVCAxOTk1KToKKyMJKiBBZGRlZCBybWFtL3NtYW0gY2FwYWJpbGl0aWVzIHRvIG1hbnkgZW50cmllcyBiYXNlZCBvbiBpbml0IHN0cmluZ3MuCisjCSogQWRkZWQgY29ycmVjdCBocGEvdnBhIHRvIGxpbnV4LgorIwkqIFJlZHVjZWQgc2V2ZXJhbCBlbnRyaWVzIHJlbGF0aXZlIHRvIHZ0NTIuCisjIDkuMTEuMiAoVHVlIE5vdiAgNyAwMDoyMTowNiBFU1QgMTk5NSk6CisjCSogRXhpbGVkIHNvbWUgdXR0ZXJseSB1bmlkZW50aWZpYWJsZSBjdXN0b20gYW5kIGhvbWVicmV3IHR5cGVzIHRvIHRoZQorIwkgIFVGTyBmaWxlOyBhbHNvLCBvYnNvbGV0ZSBzbWFsbC1zY3JlZW4gaGFyZHdhcmU7IGFsc28sIGVudHJpZXMgd2hpY2gKKyMJICBsb29rIGZsYXQtb3V0IGluY29ycmVjdCwgZ2FyYmxlZCwgb3IgcmVkdW5kYW50LiAgVGhlc2UgaW5jbHVkZSB0aGUKKyMJICBmb2xsb3dpbmcgZW50cmllczogY2FybG9jaywgY2RjNDU2dHN0LCBtaWNyb2tpdCwgcWRzcywgcmFtdGVrLCB0ZWMsCisjCSAgdGVjNDAwLCB0ZWM1MDAsIHViZWxsLCB3aW5kLCB3aW5kMTYsIHdpbmQ0MCwgd2luZDUwLCBwbGFzbWEsIGFnaWxlLAorIwkgIGFwcGxlLCBiY2gsIGRhbGVibGl0LCBudWN0ZXJtLCB0dHl3aWxsaWFtcywgbnV0ZXJtaW5hbCwgbnUyNCwgYm51LAorIwkgIGZudSwgbnVuaXgtMzAsIG51bml4LTYxLCBleGlkeSwgZXgzMDAwLCBzZXhpZHksIHBjNTIsIHNhbnlvNTUsCisjCSAgeXRlcm0xMCwgeXRlcm0xMSwgeXRlcm0xMG5hdCwgYWVkLCBhZWQtdWNiLCBjb21wdWNvbG9yLCBjb21wdWNvbG9yMiwKKyMJICB2aWMyMCwgZGcxLCBhY3Q1cywgbmV0eCwgc21hcnR2aWQsIHNtYXJ0ZXJtLCBzb2wsIHNvbDIsIGR0MjAwLAorIwkgIHRyczgwLCB0cnMxMDAsIHRyczIwMCwgdHJzNjAwLCB4aXRleCwgcnN2aWR0eCwgdmlkLCBhdHQyMzAwLXg0MCwKKyMJICBhdHQyMzUwLXg0MCwgYXR0NDQxMC1uZmssIGF0dDU0MTAtbnMsIG90dHk1NDEwLCBhdHQ1NDI1LW5sLXcsCisjCSAgdHR5NTQyNS1maywgdHR5NTQyNS13LWZrLCBjaXRhLCBjMTA4LW5hLCBjMTA4LXJ2LW5hLCBjMTAwLXJ2LW5hLAorIwkgIGMxMDgtbmEtYWNzLCBjMTA4LXJ2LW5hLWFjcywgaW1zOTUwLW5zLCBpbmZvdG9uS0FTLCBuY3I3OTAwaS1uYSwKKyMJICByZWdlbnQ2MG5hLCBzY2Fuc2V0LW4sIHR2aTkyMS1nLCB0dmk5MjVuLCB0dmk5MjV2Ym4sIHR2aTkyNXZiLAorIwkgIHZjNDA0LW5hLCB2YzQwNC1zLW5hLCB2dDQyMG5hbSwgdnQ0MjBmLW5hbSwgdnQ0MjBwYy1uYW0sIHZ0NTEwbmFtLAorIwkgIHZ0NTEwcGMtbmFtLCB2dDUyMG5hbSwgdnQ1MjVuYW0sIHh0ZXJtMjUsIHh0ZXJtNTAsIHh0ZXJtNjUsIHh0ZXJtcy4KKyMJKiBDb3JyZWN0ZWQgcGN2dDI1aCBhcyBzdWdnZXN0ZWQgYnkgQnJpYW4gQy4gR3JheXNvbgorIwkgIDxiZ3JheXNvbkBwaW5lLmVjZS51dGV4YXMuZWR1Pi4KKyMgOS4xMS4zIChUaHUgTm92ICA5IDEyOjE0OjQwIEVTVCAxOTk1KToKKyMJKiBBZGRlZCBrc3BkPVxFW1AsIGtjYnQ9XEVbWiwgdG8gbGludXggZW50cnksIGNoYW5nZWQga2JzIGJhY2sgdG8gXkguCisjCSogQWRkZWQga2VudD1cRU9NIHRvIHh0ZXJtIGVudHJ5LgorIworIyA5LjExLjQgKEZyaSBOb3YgMTAgMDg6MzE6MzUgRVNUIDE5OTUpOgorIwkqIENvcnJlY3RlZCBnaWdpIGVudHJ5LgorIwkqIFJlc3RvcmVkIGN1Zi9jdWQxIHRvIHh0ZXJtLCB0aGVpciBhcHBhcmVudCBidWdnaW5lc3Mgd2FzIGR1ZSB0bworIwkgIGJhZCBocGEvdnBhIGNhcGFiaWxpdGllcy4KKyMJKiBDb3JyZWN0ZWQgZmxhc2ggc3RyaW5ncyB0byBoYXZlIGEgdW5pZm9ybSBkZWxheSBvZiAuMiBzZWMuICBObworIwkgIG1vcmUgc3BlZWQtZGVwZW5kZW50IE5VTC1wYWRkaW5nIQorIwkqIHRlcm1pbmZvIGNhcGFiaWxpdGllcyBpbiBjb21tZW50cyBicmFja2V0ZWQgd2l0aCA8Pi4KKyMgOS4xMS41IChGcmkgTm92IDEwIDE1OjM1OjAyIEVTVCAxOTk1KToKKyMJKiBSZXBsYWNlZCBwY3Z0IHdpdGggdGhlIDMuMzEgcGN2dCBlbnRyaWVzLgorIwkqIEZyZWV6ZSBmb3IgMS45LjdhLgorIyA5LjExLjYgKE1vbiBOb3YgMTMgMTA6MjA6MjQgRVNUIDE5OTUpOgorIwkqIEFkZGVkIGVtdSBlbnRyeSBmcm9tIHRoZSBYMTFSNiBjb250cmliIHRhcGUgc291cmNlcy4KKyMKKyMgOS4xMi4wIChXZWQgTm92IDI5IDA0OjIyOjI1IEVTVCAxOTk1KToKKyMJKiBJbXByb3ZlZCBpcmlzLWFuc2kgYW5kIHN1biBlbnRyaWVzLgorIwkqIE1vcmUgZmxhc2ggc3RyaW5nIGltcHJvdmVtZW50cy4KKyMJKiBDb3JyZWN0ZWQgd3kxNjAgJiB3eTE2MCBhcyBzdWdnZXN0ZWQgYnkgUm9iZXJ0IER1bm4KKyMJKiBBZGRlZCBkaW0gdG8gYXQzODYuCisjCSogUmVjb25jaWxlZCBwYzMgYW5kIGlibXBjMyB3aXRoIHRoZSBCU0RJIHRlcm1jYXAgZmlsZS4gIEtlaXRoIHNheXMKKyMJICBoZSdzIHJlYWR5IHRvIHN0YXJ0IHVzaW5nIHRoZSB0ZXJtY2FwIGdlbmVyYXRlZCBmcm9tIHRoaXMgb25lLgorIwkqIEFkZGVkIHZ0MTAyLXcsIHZ0MjIwLXcsIHh0ZXJtLWJvbGQsIHd5c2UtdnAsIHd5NzVhcCwgYXR0NDQyNG0sCisjCSAgbG4wMywgbG5vMy13LCBoMTktZywgejI5YSosIHFkc3MuICBNYWRlIHZ0MjAwIGFuIGFsaWFzIG9mIHZ0MjIwLgorIwkqIEltcHJvdmVkIGhwdGVybSwgYXBvbGxvIGNvbnNvbGVzLCBmb3MsIHF2dDEwMSwgdHZpOTI0LiB0dmk5MjUsCisjCSAgYXR0NjEwLCBhdHQ2MjAsIGF0dDYzMCwKKyMJKiBDaGFuZ2VkIGhhemVsdGluZSBuYW1lIHByZWZpeCBmcm9tIGggdG8gaHouCisjCSogU2VudCB0NTAwIHRvIHRoZSBVRkkgZmlsZS4KKyMJKiBJIHRoaW5rIHdlJ3ZlIHN1Y2tlZCBhbGwgdGhlIGp1aWNlIG91dCBvZiBCU0RJJ3MgdGVybWNhcCBmaWxlIG5vdy4KKyMJKiBGcmVlemUgZm9yIG5jdXJzZXMgMS45LjggcmVsZWFzZQorIyA5LjEyLjEgKFRodSBOb3YgMzAgMDM6MTQ6MDYgRVNUIDE5OTUpCisjCSogVW5mcmVlemUsIGxpbnV4IGticyBuZWVkZWQgdG8gYmUgZml4ZWQuCisjCSogVGltIFRoZWlzZW4gcGlubmVkIGRvd24gYSBidWcgaW4gdGhlIERNRCBmaXJtd2FyZS4KKyMgOS4xMi4yIChUaHUgTm92IDMwIDE5OjA4OjU1IEVTVCAxOTk1KToKKyMJKiBGaXhlcyB0byBhbnNpIGFuZCBrbG9uZSBjYXBhYmlsaXRpZXMgKHRoYW5rIHlvdSwgQWFyb24gVWNrbykuCisjCSAgKFRoZSBicm9rZW4gb25lcyBoYWQgYmVlbiBzaGFkb3dlZCBieSBzZ3IuKQorIyA5LjEyLjMgKFRodSBEZWMgIDcgMTc6NDc6MjIgRVNUIDE5OTUpOgorIwkqIEFkZGVkIGRvY3VtZW50YXRpb24gb24gRUNNQS00OCBzdGFuZGFyZC4KKyMJKiBOZXcgQW1pZ2EgZW50cnkuCisjIDkuMTIuNCAoVGh1IERlYyAxNCAwNDoxNjozOSBFU1QgMTk5NSk6CisjCSogTW9yZSBFQ01BLTQ4IHN0dWZmCisjCSogQ29ycmVjdGVkIHR5cG8gaW4gbWluaXggZW50cnksIGFkZGVkIHBjLW1pbml4LgorIwkqIENvcnJlY3RlZCBraG9tZS9rZW5kIGluIHh0ZXJtICh0aGFuayB5b3UgYWdhaW4sIEFhcm9uIFVja28pLgorIwkqIEFkZGVkIHJ4dnQgZW50cnkuCisjCSogQWRkZWQgMS4zLnggY29sb3ItY2hhbmdlIGNhcGFiaWxpdGllcyB0byBsaW51eCBlbnRyeS4KKyMgOS4xMi41IChUdWUgRGVjIDE5IDAwOjIyOjEwIEVTVCAxOTk1KToKKyMJKiBDb3JyZWN0ZWQgcnh2dCBlbnRyeSBraG9tZS9rZW5kLgorIwkqIENvcnJlY3RlZCBsaW51eCBjb2xvciBjaGFuZ2UgY2FwYWJpbGl0aWVzLgorIwkqIE5lWFQgZW50cmllcyBmcm9tIERhdmUgV2V0emVsLgorIwkqIENsZWFuZWQgdXAgaWYgYW5kIHJmIGZpbGUgbmFtZXMgKGFsbCBpbiAvdXNyL3NoYXJlIG5vdykuCisjCSogQ2hhbmdlZCBsaW51eCBvcCBjYXBhYmlsaXR5IHRvIGF2b2lkIHNjcmV3aW5nIHVwIGEgYmFja2dyb3VuZCBjb2xvcgorIwkgIHBhaXIgc2V0IGJ5IHNldHRlcm0uCisjIDkuMTIuNiAoV2VkIEZlYiAgNyAxNjoxNDozNSBFU1QgMTk5Nik6CisjCSogQWRkZWQgeHRlcm0tc3VuLgorIyA5LjEyLjcgKEZyaSBGZWIgIDkgMTM6Mjc6MzUgRVNUIDE5OTYpOgorIwkqIEFkZGVkIHZpc2E1MC4KKyMKKyMgOS4xMy4wIChTdW4gTWFyIDEwIDAwOjEzOjA4IEVTVCAxOTk2KToKKyMJKiBBbm90aGVyIHN3ZWVwIHRocm91Z2ggdGhlIFNodWZvcmQgYXJjaGl2ZSBsb29raW5nIGZvciBuZXcgaW5mby4KKyMJKiBBZGRlZCBkZzEwMCBhbGlhcyB0byBkZzYwNTMgYmFzZWQgb24gYSBjb21wLnRlcm1pbmFscyBwb3N0aW5nLgorIyAJKiBBZGRlZCBzdDUyIGZyb20gUGVyIFBlcnNzb24uCisjCSogQWRkZWQgZXRlcm0gZnJvbSB0aGUgR05VIEVtYWNzIDE5LjMwIGRpc3RyaWJ1dGlvbi4KKyMJKiBGcmVlemUgZm9yIDEuOS45LgorIyA5LjEzLjEgKEZyaSBNYXIgMjkgMTQ6MDY6NDYgRVNUIDE5OTYpOgorIwkqIEZyZWVCU0QgY29uc29sZSBlbnRyaWVzIGZyb20gQW5kcmV3IENoZXJub3YuCisjCSogUmVtb3ZlZCBkdXBsaWNhdGUgQXRhcmkgc3Q1MiBuYW1lLgorIyA5LjEzLjIgKFR1ZSBNYXkgIDcgMTY6MTA6MDYgRURUIDE5OTYpCisjCSogeHRlcm0gZG9lc24ndCBhY3R1YWxseSBoYXZlIEFDU19CTE9DSy4KKyMJKiBDaGFuZ2Uga2xvbmUrY29sb3Igc2V0Zi9zZXRiIHRvIHNpbXBsZXIgZm9ybXMgdGhhdCBjYW4gYmUKKyMJICB0cmFuc2xhdGVkIGludG8gdGVybWNhcC4KKyMJKiBBZGRlZCB4dGVybTEuCisjCSogUmVtb3ZlZCBtZWNoYW5pY2FsbHktZ2VuZXJhdGVkIGp1bmsgY2FwYWJpbGl0aWVzIGZyb20gY29ucyogZW50cmllcy4KKyMJKiBBZGRlZCBjb2xvciBzdXBwb3J0IHRvIGJzZG9zLgorIyA5LjEzLjMgKFRodSBNYXkgIDkgMTA6MzU6NTEgRURUIDE5OTYpOgorIwkqIEFkZGVkIFd5c2UgNTIwIGVudHJpZXMgZnJvbSBXbS4gUmFuZG9scGggRnJhbmtsaW4gPHdyZkBlY3NlLnJwaS5lZHU+LgorIwkqIENyZWF0ZWQgZWNtYStjb2xvciwgbGludXggY2FuIHVzZSBpdC4gIEFsc28gYWRkZWQgZWNoIHRvIGxpbnV4LgorIwkqIFRlYWNoIHh0ZXJtIGFib3V0IG1vcmUga2V5cy4gQWRkIFRob21hcyBEaWNrZXkncyAzLjEuMkUgdXBkYXRlcy4KKyMJKiBBZGQgZGVzY3JpcHRpb25zIHRvIEZyZWVCU0QgY29uc29sZSBlbnRyaWVzLiAgQWxzbyBzaG9ydGVuCisjCSAgc29tZSBhbGlhc2VzIHRvIDw9IDE0IGNoYXJzIGZvciBwb3J0YWJpbGl0eS4KKyMJKiBBZGRlZCB4NjhrIGNvbnNvbGUKKyMJKiBBZGRlZCBPVGJzIHRvIHNldmVyYWwgVlQtc2VyaWVzIGVudHJpZXMuCisjIDkuMTMuNCAoV2VkIE1heSAyMiAxMDo1NDowOSBFRFQgMTk5Nik6CisjCSogc2NyZWVuIGVudHJ5IHVwZGF0ZSBmb3IgMy43LjEgZnJvbSBNaWNoYWVsIEFsYW4gRG9ybWFuLgorIyA5LjEzLjUgKFdlZCBKdW4gIDUgMTE6MjI6NDEgRURUIDE5OTYpOgorIwkqIGt0ZXJtIGNvcnJlY3Rpb24gZHVlIHRvIEtlbmppIFJpa2l0YWtlLgorIwkqIEFDUyBjb3JyZWN0aW9uIGluIHZ0MzIwLWtsbCBkdWUgdG8gUGhpbGxpcHBlIERlIE11eXRlci4KKyMgOS4xMy42IChTdW4gSnVuIDE2IDE1OjAxOjA3IEVEVCAxOTk2KToKKyMJKiBTdW4gY29uc29sZSBlbnRyeSBjb3JyZWN0aW9uIGZyb20gSi5ULiBDb25rbGluLgorIwkqIENoYW5nZWQgYWxsIERFQyBWVDMwMCBhbmQgdXAgdGVybWluYWxzIHRvIHVzZSBWVDMwMCB0YWIgc2V0CisjIDkuMTMuNyAoTW9uIEp1bCAgOCAyMDoxNDozMiBFRFQgMTk5Nik6CisjCSogQWRkZWQgc211bCB0byBsaW51eCBlbnRyeSAod2UgbmV2ZXIgbm90aWNlZCBpdCB3YXMgbWlzc2luZworIwkgIGJlY2F1c2Ugb2Ygc2dyISkuCisjCSogQWRkZWQgcm1sbiB0byBocCtsYWJlbHMgKGRlZHVjZWQgZnJvbSBvdGhlciBIUCBlbnRyaWVzKS4KKyMJKiBBZGRlZCB2dDEwMCBhY3NjIGNhcGFiaWxpdHkgdG8gdnQyMjAsIHZ0MzQwLCB2dDQwMCwgZDgwMCwgZHQ4MC1zYXMsCisjCSAgcHJvMzUwLCBhdHQ3MzAwLCA1NDIwXzIsIGF0dDQ0MTgsIGF0dDQ0MjQsIGF0dDQ0MjYsIGF0dDUwNSwgdnQzMjAtazMuCisjCSogQ29ycmVjdGVkIHZ0MjIwIGFjc2MuCisjCSogVGhlIGtsb25lK3NnciBhbmQga2xvbmUrc2dyLWR1bWIgZW50cmllcyBub3cgdXNlIGtsb25lK2FjczsKKyMJICB0aGlzIGNvcnJlc3BvbmRzIHRvIHJlYWxpdHkgYW5kIGhlbHBzIHByZXZlbnQgc29tZSB0aWMgd2FybmluZ3MuCisjCSogQWRkZWQgc2dyMCB0byBjMTAxLCBwY2l4LCB2dDEwMC1uYXYsIHNjcmVlbjIsIG9sZHN1biwgbmV4dCwgYWx0b3MyLAorIwkgIGhwZ2VuZXJpYywgaHBhbnNpLCBocHN1YiwgaHAyMzYsIGhwNzAwLXd5LCBib2JjYXQsIGRrdTcwMDMsIGFkbTExLAorIwkgIGFkbTEyLCBhZG0yMCwgYWRtMjEsIGFkbTIyLCBhZG0zMSwgYWRtMzYsIGFkbTQyLCBwdDEwMCwgcHQyMDAsCisjCSAgcXZ0MTAxLCB0dmk5MTAsIHR2aTkyMSwgdHZpOTJCLCB0dmk5MjUsIHR2aTk1MCwgdHZpOTcwLCB3eTMwLW1jLAorIwkgIHd5NTAtbWMsIHd5MTAwLCB3eXNlLXZwLCBhbXBleDIzMiwgcmVnZW50MTAwLCB2aWV3cG9pbnQsIHZwOTAsCisjCSAgYWRkczk4MCwgY2l0MTAxLCBjaXQ1MDAsIGNvbnRlbDMwMCwgY3MxMCwgZG04MCwgZmFsY28sIGZhbGNvLXAsCisjCSAgZjE3MjBhLCBnbzE0MCwgc2IxLCBzdXBlcmJlZWljLCBtaWNyb2IsIGlibTg1MTIsIGt0NywgZXJnbzQwMDAsCisjCSAgb3dsLCB1dHMzMCwgZG10ZXJtLCBkdDEwMCwgZHQxMDAsIGR0MTEwLCBhcHBsZUlJLCBhcHBsZS12aWRleCwKKyMJICBsaXNhLCB0cnNJSSwgYXRhcmksIHN0NTIsIHBjLWNvaGVyZW50LCBiYXNpcywgbTItbWFuLCBiZzIuMCwgYmcxLjI1LAorIwkgIGR3MywgbG4wMywgaW1zLWFuc2ksIGdyYXBob3MsIHQxNiwgemVuMzAsIHh0YWxrLCBzaW10ZXJtLCBkODAwLAorIwkgIGlmbXIsIHYzMjIwLCB3eTEwMHEsIHRhbmRlbTY1MywgaWJtYWVkLgorIwkqIEFkZGVkIERXSyB0ZXJtaW5hbCBkZXNjcmlwdGlvbi4KKyMgOS4xMy44IChXZWQgSnVsIDEwIDExOjQ1OjIxIEVEVCAxOTk2KToKKyMJKiBNYW55IGVudHJpZXMgbm93IGhhdmUgaGlnaGxpZ2h0cyBpbmhlcml0ZWQgZnJvbSBhZG0rc2dyLgorIwkqIHh0ZXJtIGVudHJ5IG5vdyBjb3JyZXNwb25kcyB0byBYRnJlZTg2IDMuMS4yRSwgd2l0aCBjb2xvci4KKyMJKiB4dGl0bGUgYW5kIHh0aXRsZS10d20gZW5hYmxlIGFjY2VzcyB0byB0aGUgWCBzdGF0dXMgbGluZS4KKyMJKiBBZGRlZCBsaW51eC0xLjMuNiBjb2xvciBwYWxldHRlIGNhcHMgaW4gY29udmVudGlvbmFsIGZvcm1hdC4KKyMJKiBBZGRlZCBhZG0xMTc4IHRlcm1pbmFsLgorIwkqIE1vdmUgZm9zIGFuZCBhcG9sbG8gdGVybWluYWxzIHRvIG9ic29sZXRlIGNhdGVnb3J5LgorIwkqIEFoYSEgVGhlIEJSTCB0ZXJtaW5hbHMgZmlsZSB0b2xkIHVzIHdoYXQgdGhlIElyaXMgZXh0ZW5zaW9ucyBtZWFuLgorIwkqIEFkZGVkLCBmcm9tIHRoZSBCUkwgdGVybWNhcCBmaWxlOiBydDYyMjEsIHJ0NjIyMS13LCBub3J0aHN0YXIsCisjCSAgY29tbW9kb3JlLCBjZGM3MjEtZXNjLCBleGNlbDYyLCBvc2V4ZWMuICBSZXBsYWNlZCBmcm9tIHRoZSBCUkwgZmlsZToKKyMJICBjaXQ1MDAsIGFkbTExLgorIyA5LjEzLjkgKE1vbiBKdWwgMTUgMDA6MzI6NTEgRURUIDE5OTYpOgorIwkqIEFkZGVkLCBmcm9tIHRoZSBCUkwgdGVybWNhcCBmaWxlOiBjZGM3MjEsIGNkYzcyMWwsIGNkYzc1MiwgY2RjNzU2LAorIwkgIGF3cywgYXdzYywgemVudGVjODAwMSwgbW9kZ3JhcGg0OCwgcmNhIHZwMzMwMS92cDM1MDEsIGV4MTU1LgorIwkqIENvcnJlY3RlZCwgZnJvbSBCUkwgdGVybWNhcCBmaWxlOiB2aTUwLgorIwkqIEJldHRlciByeHZ0IGVudHJ5ICYgY29ycmVjdGVkIHh0ZXJtIGVudHJpZXMgZnJvbSBUaG9tYXMgRGlja2V5LgorIyA5LjEzLjEwIChNb24gSnVsIDE1IDEyOjIwOjEzIEVEVCAxOTk2KToKKyMJKiBBZGRlZCBmcm9tIEJSTDogY2l0MTAxZSAmIHZhcmlhbnRzLCBobW9kMSwgdmkyMDAsIGFuc2k3NywgYXR0NTYyMC0xLAorIwkgIGF0dDU2MjAtcywgYXR0NTYyMC1zLCBkZzIxMCwgYWFzMTkwMSwgaHoxNTIwLCBocDk4NDUsIG9zYm9ybmUKKyMJICAob2xkIG9zYm9ybmUgbW92ZWQgdG8gb3Nib3JuZS13KSwgdHZpOTcwLXZiLCB0dmk5NzAtMnAsIHR2aTkyNS1oaSwKKyMJICB0ZWs0MTA1YnJsLCB0ZWs0MTA2YnJsLCB0ZWs0MTA3YnJsLHRlazQxMDlicmwsIGhhemVsLCBhZXBybywKKyMJICBhcHBsZTQwcCwgYXBwbGU4MHAsIGFwcGxlSUlncywgYXBwbGUyZSwgYXBwbGUyZS1wLCBhcHBsZS1hZS4KKyMJKiBQYWlyZWQtYXR0cmlidXRlIGZpeGVzIHRvIHZhcmlvdXMgdGVybWluYWxzLgorIwkqIFN1biBlbnRyeSBjb3JyZWN0aW9ucyBmcm9tIEEuIEx1a3lhbm92ICYgR2VydC1KYW4gVm9ucy4KKyMJKiB4dGVybSBlbnRyeSBjb3JyZWN0aW9ucyBmcm9tIFRob21hcyBEaWNrZXkuCisjIDkuMTMuMTEgKFR1ZSBKdWwgMzAgMTY6NDI6NTggRURUIDE5OTYpOgorIwkqIEFkZGVkIHQ5MTYgZW50cnksIHRyYW5zbGF0ZWQgZnJvbSBhIHRlcm1jYXAgaW4gU0NPJ3Mgc3VwcG9ydCBhcmVhLgorIwkqIE5ldyBxbnggZW50cnkgZnJvbSBNaWNoYWVsIEh1bnRlci4KKyMgOS4xMy4xMiAoTW9uIEF1ZyAgNSAxNDozMToxMSBFRFQgMTk5Nik6CisjCSogQWRkZWQgaHBleDIgZnJvbSBWaWxsZSBTdWxrby4KKyMJKiBGaXhlZCBhIGJ1ZyB0aGF0IHJhbiB0aGUgcW54IGFuZCBwY3Z0WFggdG9nZXRoZXIuCisjIDkuMTMuMTMgKEZyaSBBdWcgIDkgMDE6MTY6MTcgRURUIDE5OTYpOgorIwkqIEFkZGVkIGR0dGVybSBlbnRyeSBmcm9tIFNvbGFyaXMgQ0RFLgorIyA5LjEzLjE0IChUdWUgU2VwIDEwIDE1OjMxOjU2IEVEVCAxOTk2KToKKyMJKiBjb3JyZWN0ZWQgcGFpcnMjOCB0eXBvIGluIGR0dGVybSBlbnRyeS4KKyMJKiBhZGRlZCB0dmk5MDY1LgorIyA5LjEzLjE1IChTdW4gU2VwIDE1IDAyOjQ3OjA1IEVEVCAxOTk2KToKKyMJKiB1cGRhdGVkIHh0ZXJtIGVudHJ5IHRvIGNvdmVyIDMuMS4yRSdzIG5ldyBmZWF0dXJlcy4KKyMgOS4xMy4xNiAoVHVlIFNlcCAyNCAxMjo0Nzo0MyBFRFQgMTk5Nik6CisjCSogQWRkZWQgbmV3IG1pbml4IGVudHJ5CisjCSogUmVtb3ZlZCBhbGlhc2VzIG9mIHRoZSBmb3JtIF5bMC05XSogZm9yIG9ic29sZXRlIHRlcm1pbmFscy4KKyMJKiBDb21tZW50ZWQgb3V0IGxpbnV4LW9sZCwgbm9ib2R5J3MgdXNpbmcgcHJlLTEuMiBrZXJuZWxzIG5vdy4KKyMgOS4xMy4xNyAoRnJpIFNlcCAyNyAxMzoyNTozOCBFRFQgMTk5Nik6CisjCSogQWRkZWQgUHJpc20gZW50cmllcyBhbmQga3Q3aXguCisjCSogQ2F1dGlvbiBub3RlcyBhYm91dCBFV0FOIGFuZCB0YWJzZXQgZmlsZXMuCisjCSogQ2hhbmdlZCAvdXNyL2xpYi90YWJzZXQgLT4gL3Vzci9zaGFyZS90YWJzZXQuCisjCSogQWRkZWQgYWNzYy9ybWFjcy9zbWFjcyB0byB2dDUyLgorIyA5LjEzLjE4IChNb24gT2N0IDI4IDEzOjI0OjU5IEVTVCAxOTk2KToKKyMJKiBNZXJnZWQgaW4gVGhvbWFzIERpY2tleSdzIHJlb3JnYW5pemF0aW9uIG9mIHRoZSB4dGVybSBlbnRyaWVzOworIwkgIGFkZGVkIHRlY2huaWNhbCBjb3JyZWN0aW9ucyB0byBhdm9pZCB3YXJuaW5nIG1lc3NhZ2VzLgorIyA5LjEzLjE5IChTYXQgTm92IDE2IDE2OjA1OjQ5IEVTVCAxOTk2KToKKyMJKiBBZGRlZCBybXNvPVxFWzI3bSBpbiBMaW51eCBlbnRyeS4KKyMJKiBBZGRlZCBrb2k4LXIgc3VwcG9ydCBmb3IgTGludXggY29uc29sZS4KKyMJKiBSZXBsYWNlIHh0ZXJtIGVudHJpZXMgd2l0aCBjYW5vbmljYWwgb25lcyBmcm9tIFhGcmVlODYgMy4yLgorIyA5LjEzLjIwIChTdW4gTm92IDE3IDIzOjAyOjUxIEVTVCAxOTk2KToKKyMJKiBBZGRlZCBjb2xvcl94dGVybSBmcm9tIEphY29iIE1hbmRlbHNvbgorIyA5LjEzLjIxIChNb24gTm92IDE4IDEyOjQzOjQyIEVTVCAxOTk2KToKKyMJKiBCYWNrIG9mZiB0aGUgeHRlcm0gZW50cnkgdG8gdXNlIHI2IGFzIGEgYmFzZS4KKyMgOS4xMy4yMiAoU2F0IE5vdiAzMCAxMTo1MTozMSBFU1QgMTk5Nik6CisjCSogQWRkZWQgZGVjLXZ0MjIwIGF0IEFkcmlhbiBHYXJzaWRlJ3MgcmVxdWVzdC4KKyMKKyMtKG9yaWdpbmFsLWNoYW5nZWxvZy0xOTk2LzEyLzI5LXRvLTE5OTgvMDIvMjgtYnktVEQpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIDEwLjEuMCAoU3VuIERlYyAyOSAwMjozNjozMSBFU1QgMTk5Nik6IHdpdGhkcmF3bgorIwkqIE1pbm9yIGNvcnJlY3Rpb25zIHRvIHh0ZXJtIGVudHJpZXMuCisjCSogUmVwbGFjZWQgRVdBTiB0ZWxuZXQgZW50cnkuCisjCSogRHJvcHBlZCB0aGUgcmVvcmRlciBzY3JpcHQgZ2VuZXJhdG9yLiAgSXQgd2FzIGEgZm9zc2lsLgorIyA5LjEzLjIzIChGcmkgRmViIDIxIDE2OjM2OjA2IEVTVCAxOTk3KToKKyMJKiBSZXBsYWNlZCBtaW5pdGVsLTIgZW50cnkuCisjCSogQWRkZWQgTUdSLCBhbnNpLW50LgorIyA5LjEzLjI0IChTdW4gRmViIDIzIDIwOjU1OjIzIEVTVCAxOTk3KToKKyMJKiBUaG9yc3RlbiBMb2NrZXJ0IGFkZGVkIHRlcm1jYXAgYGJzJyB0byBhIGxvdCBvZiB0eXBlcywgd29ya2luZyBmcm9tCisjCSAgdGhlIDQuNEJTRCBMaXRlMiBmaWxlLgorIworIyAxMC4xLjEgKFNhdCBNYXkgIDMgMjE6NDE6MjcgRURUIDE5OTcpOgorIwkqIFVzZSBzZXRhZi9zZXRhYiBjb25zaXN0ZW50bHkgd2l0aCBTVnI0LgorIwkqIFJlbW92ZSBlY2gsIGVsMSBmcm9tIGNvbnMyNXcsIHRoZXkgZG8gbm90IHdvcmsgaW4gRnJlZUJTRCAyLjEuNQorIyAxMC4xLjIgKFNhdCBNYXkgMjQgMjE6MTA6NTcgRURUIDE5OTcpCisjCSogdXBkYXRlIHh0ZXJtLXhmODYtdjMyIHRvIG1hdGNoIFhGcmVlODYgMy4yQSAoY2hhbmdlcyBGMS1GNCkKKyMJKiBhZGQgeHRlcm0tMTZjb2xvciwgZm9yIFhGcmVlODYgMy4zCisjIDEwLjEuMyAoU2F0IE1heSAzMSAxMjoyMTowNSBFRFQgMTk5NykKKyMJKiBjb3JyZWN0IHR5cG8gaW4gZW11CisjCSogY29ycmVjdCB0eXBvIGluIHZ0MTAyLXcgKFJvYmVydCBXdWVzdCkKKyMJKiBtYWtlIG5ldyBlbnRyeSB4dGVybS14Zjg2LXYzMywgcmVzdG9yZWQgeHRlcm0teGY4Ni12MzIuCisjIDEwLjEuNCAoU3VuIEp1biAxNSAwODoyOTowNSBFRFQgMTk5NykKKyMJKiByZW1vdmUgZWNoIGNhcGFiaWxpdHkgZnJvbSByeHZ0IChpdCBkb2VzIHRoZSB3cm9uZyB0aGluZykKKyMgMTAuMS41IChTYXQgSnVuIDI4IDIxOjM0OjM2IEVEVCAxOTk3KQorIwkqIHJlbW92ZSBzcHVyaW91cyBuZXdsaW5lcyBmcm9tIHNldmVyYWwgZW50cmllcyAoaHArY29sb3IsIHd5NTAsCisjCSAgd3kzNTAsIHd5MzcwLW5rLCB3eTk5Z3QtdGVrLCB3eTM3MC10ZWssIGlibTMxNjEsIHRlazQyMDUsIGN0cm0sCisjCSAgZ3M2MzAwKQorIyAxMC4xLjYgKFNhdCBKdWwgIDUgMTU6MDg6MTYgRURUIDE5OTcpCisjCSogY29ycmVjdCBybXNvIGNhcGFiaWxpdHkgb2Ygd3k1MC1tYworIyAxMC4xLjcgKFNhdCBKdWwgMTIgMjA6MDU6NTUgRURUIDE5OTcpCisjCSogYWRkIGNidCB0byB4dGVybS14Zjg2LXYzMgorIwkqIGRpc2VudGFuZ2xlIHNvbWUgZW50cmllcyBmcm9tICd4dGVybScsIHByZWZlcnJpbmcgeHRlcm0tcjYgaW4gY2FzZQorIwkgICd4dGVybScgaXMgZGVyaXZlZCBmcm9tIHh0ZXJtLXhmODYtdjMyLCB3aGljaCBpbXBsZW1lbnRzIGVjaCBhbmQKKyMJICBvdGhlciBjYXBhYmlsaXRpZXMgbm90IGluIHh0ZXJtLXI2LgorIwkqIHJlbW92ZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBmcm9tIGt0ZXJtIGVudHJ5LgorIyAxMC4xLjggKFNhdCBBdWcgIDIgMTg6NDM6MTggRURUIDE5OTcpCisjCSogY29ycmVjdCBhY3NjIGVudHJpZXMgZm9yIEFDU19MQU5URVJOLCB3aGljaCBpcyAnaScsIG5vdCAnSScuCisjIDEwLjEuOSAoU2F0IEF1ZyAyMyAxNzo1NDozOCBFRFQgMTk5NykKKyMJKiBhZGQgeHRlcm0tOGJpdCBlbnRyeS4KKyMgMTAuMS4xMCAoU2F0IE9jdCAgNCAxODoxNzoxMyBFRFQgMTk5NykKKyMJKiByZXBhaXIgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgZWFybHkgdmVyc2lvbiBvZiB0aWMgcmVwbGFjZWQgXCwgd2l0aCBcXFwsCisjCSogbWFrZSBhY3NjIGVudHJpZXMgY2Fub25pY2FsIGZvcm0gKHNvcnRlZCwgdW5pcSkuCisjCSogbW9kaWZ5IGFjc2MgZW50cmllcyBmb3IgbGludXgsIGxpbnV4LWtvaTgKKyMJKiBuZXcgcnh2dCBlbnRyeSwgZnJvbSBjb3JyZWN0ZWQgY29weSBvZiBkaXN0cmlidXRpb24gaW4gcnh2dCAyLjIxYgorIwkqIGFkZCBjb2xvciwgbW91c2Ugc3VwcG9ydCB0byBrdGVybS4KKyMgMTAuMS4xMSAoU2F0IE9jdCAxMSAxNDo1NzoxMCBFRFQgMTk5NykKKyMJKiBjb3JyZWN0IHd5MTIwIHNteG9uL3RiYyBjYXBhYmlsaXRpZXMgd2hpY2ggd2VyZSBzdHVjayB0b2dldGhlci4KKyMgMTAuMS4xMiAoU2F0IE9jdCAxOCAxNzozODo0MSBFRFQgMTk5NykKKyMJKiBhZGQgZW50cnkgZm9yIHh0ZXJtLXhmODYtdjM5dAorIyAxMC4xLjEzIChTYXQgTm92ICA4IDEzOjQzOjMzIEVTVCAxOTk3KQorIwkqIGFkZCB1OCx1OSB0byBzdW4taWwgZGVzY3JpcHRpb24KKyMgMTAuMS4xNCAoU2F0IE5vdiAyMiAxOTo1OTowMyBFU1QgMTk5NykKKyMJKiBhZGQgdnQyMjAtanMsIHBpbG90LCByYmNvbW0sIGRhdGFwb2ludCBlbnRyaWVzIGZyb20gZXNyJ3MgMjctanVuLTk3CisjCSAgdmVyc2lvbi4KKyMJKiBhZGQgaGRzMjAwIGRlc2NyaXB0aW9uIChXYWx0ZXIgU2tvcnNraSkKKyMJKiBhZGQgRU1YIDAuOWIgZGVzY3JpcHRpb25zCisjCSogY29ycmVjdCBybXNvL3Ntc28gY2FwYWJpbGl0aWVzIGluIHd5MzAtbWMgYW5kIHd5NTAtbWMgKERhbmllbCBXZWF2ZXIpCisjCSogcmVuYW1lIHhocHRlcm0gYmFjayB0byBocHRlcm0uCisjIDEwLjEuMTUgKFNhdCBOb3YgMjkgMTk6MjE6NTkgRVNUIDE5OTcpCisjCSogY2hhbmdlIGluaXRjIGluIGxpbnV4LWMtbmMgdG8gdXNlIDAuLjEwMDAgcmFuZ2UuCisjIDEwLjEuMTYgKFNhdCBEZWMgMTMgMTk6NDE6NTkgRVNUIDE5OTcpCisjCSogcmVtb3ZlIGhwYS92cGEgZnJvbSByeHZ0LCB3aGljaCBpbXBsZW1lbnRzIHRoZW0gaW5jb3JyZWN0bHkuCisjCSogYWRkIHNncjAgZm9yIHJ4dnQuCisjCSogcmVtb3ZlIGJvZ3VzIHNtYWNzL3JtYWNzIGZyb20gRU1YIGRlc2NyaXB0aW9ucy4KKyMgMTAuMS4xNyAoU2F0IERlYyAyMCAxNzo1NDoxMCBFU1QgMTk5NykKKyMJKiByZXZpc2VkIGVudHJ5IGZvciBhdHQ3MzAwCisjIDEwLjEuMTggKFNhdCBKYW4gIDMgMTc6NTg6NDkgRVNUIDE5OTgpCisjCSogdXNlIFwwIHJhdGhlciB0aGFuIFwyMDAuCisjCSogcmVuYW1lIHJ4dnQtY29sb3IgdG8gcnh2dCB0byBtYXRjaCByeHZ0IDIuNC41IGRpc3RyaWJ1dGlvbi4KKyMgMTAuMS4xOSAoU2F0IEphbiAxNyAxNDoyNDo1NyBFU1QgMTk5OCkKKyMJKiBjaGFuZ2UgeHRlcm0gKHh0ZXJtLXhmODYtdjQwKSwgeHRlcm0tOGJpdCByczEgdG8gdXNlIGhhcmQgcmVzZXQuCisjCSogcmVuYW1lIHh0ZXJtLXhmODYtdjM5dCB0byB4dGVybS14Zjg2LXY0MAorIwkqIHJlbW92ZSBib2xkL3VuZGVybGluZSBmcm9tIHN1biBjb25zb2xlIGVudHJpZXMgc2luY2UgdGhleSdyZSBub3QKKyMJICBpbXBsZW1lbnRlZC4KKyMgMTAuMS4yMCAoU2F0IEphbiAyNCAxMTowMjo1MSBFU1QgMTk5OCkKKyMJKiBhZGQgYmV0ZXJtIGVudHJ5IChGcmVkIEZpc2gpCisjCSogYWRkIGlyaXgtY29sb3IveHdzaCBlbnRyeS4KKyMJKiB0dXJuIG5jdiBvZmYgZm9yIGxpbnV4LgorIyAxMC4xLjIxIChTYXQgSmFuIDMxIDE3OjM5OjE2IEVTVCAxOTk4KQorIwkqIHNldCBuY3YgZm9yIEZyZWVCU0QgY29uc29sZSAodHJlYXQgY29sb3JzIHdpdGggcmV2ZXJzZSBzcGVjaWFsbHkpLgorIwkqIHJlbW92ZSBzZ3Igc3RyaW5nIGZyb20gcW54IGJhc2VkIG9uIHJlcG9ydCBieSBYaWFvZGFuIFRhbmcKKyMgMTAuMS4yMiAoV2VkIEZlYiAxMSAxODo0MDoxMiBFU1QgMTk5OCkKKyMJKiByZW1vdmUgc3B1cmlvdXMgY29tbWFzIGZyb20gZGVzY3JpcHRpb25zCisjCSogY29ycmVjdCB4dGVybS04Yml0IHRvIG1hdGNoIFhGcmVlODYgMy45QWQgRjEtRjQuCisjIDEwLjEuMjMgKFNhdCBGZWIgMjggMTc6NDg6MzggRVNUIDE5OTgpCisjCSogYWRkIGxpbnV4LWtvaThyIHRvIHJlcGxhY2UgbGludXgta29pOCAod2hpY2ggdXNlcyBhIGNvcnJ1cHQgYWNzYywKKyMJICBhcHBhcmVudGx5IGJhc2VkIG9uIGNwLTg2NikuCisjCisjLShyZXBsYWNlZC1jaGFuZ2Vsb2ctMTk5OC8wMi8yOC1ieS1FU1IpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyA5LjEzLjIzIChGcmkgRmViIDIxIDE2OjM2OjA2IEVTVCAxOTk3KToKKyMJKiBSZXBsYWNlZCBtaW5pdGVsLTIgZW50cnkuCisjCSogQWRkZWQgTUdSLCBhbnNpLW50LgorIwkqIE1pbm9yIGNvcnJlY3Rpb25zIHRvIHh0ZXJtIGVudHJpZXMuCisjCSogUmVwbGFjZWQgRVdBTiB0ZWxuZXQgZW50cnkuCisjCSogRHJvcHBlZCB0aGUgcmVvcmRlciBzY3JpcHQgZ2VuZXJhdG9yLiAgSXQgd2FzIGEgZm9zc2lsLgorIyA5LjEzLjI0IChTdW4gRmViIDIzIDIwOjU1OjIzIEVTVCAxOTk3KToKKyMJKiBUaG9yc3RlbiBMb2NrZXJ0IGFkZGVkIHRlcm1jYXAgYGJzJyB0byBhIGxvdCBvZiB0eXBlcywgd29ya2luZyBmcm9tCisjCSAgdGhlIDQuNEJTRCBMaXRlMiBmaWxlLgorIyA5LjEzLjI1IChGcmkgSnVuIDIwIDEyOjMzOjM2IEVEVCAxOTk3KToKKyMJKiBBZGRlZCBEYXRhcG9pbnQgODI0MiwgcGlsb3QsIGFuc2lfcHN4LCByYmNvbW0sIHZ0MjIwanMuCisjCSogVXBkYXRlZCBpcmlzLWFuc2k7IGNvcnJlY3RlZCB2dDEwMi13LgorIwkqIFN3aXRjaCBiYXNlIHh0ZXJtIGVudHJ5IHRvIDMuMyBsZXZlbC4KKyMgOS4xMy4yNiAoTW9uIEp1biAzMCAyMjo0NTo0NSBFRFQgMTk5NykKKyMJKiBBZGRlZCBiYXNpYzQuCisjCSogUmVtb3ZlZCBybWlyL3NtaXIgZnJvbSB0djkyQi4KKyMKKyMgMTAuMi4wIChTYXQgRmViIDI4IDEyOjQ3OjM2IEVTVCAxOTk4KToKKyMJKiBhZGQgaGRzMjAwIGRlc2NyaXB0aW9uIChXYWx0ZXIgU2tvcnNraSkKKyMJKiBhZGQgYmV0ZXJtIGVudHJ5IChGcmVkIEZpc2gpCisjCSogYWRkIFRob21hcyBEaWNrZXkncyB4dGVybS14Zjg2LXY0MCwgeHRlcm0tOGJpdCwgeHRlcm0tMTZjb2xvciwKKyMJICBpcmlzLWNvbG9yIGVudHJpZXMuCisjCSogYWRkIGVteCBlbnRyaWVzLgorIwkqIFJlcGxhY2VkIHVuaXhwYyBlbnRyeSB3aXRoIEJlbmphbWluIFNpdHRsZXIncyBjb3JyZWN0ZWQgdmVyc2lvbi4KKyMJKiBSZXBsYWNlZCB4dGVybS9yeHZ0L2VtdS9zeXNjb25zIGVudHJpZXMgd2l0aCBUaG9tYXMgRGlja2V5J3MKKyMJICB2ZXJzaW9ucy4KKyMJKiByZW1vdmUgc2dyIHN0cmluZyBmcm9tIHFueCBiYXNlZCBvbiByZXBvcnQgYnkgWGlhb2RhbiBUYW5nCisjCSogQWRkZWQgdTgvdTksIHJlbW92ZWQgcm11bC9zbXVsIGZyb20gc3VuLWlsLgorIwkqIDQuMiB0aWMgZGlzcGxheXMgXDAgcmF0aGVyIHRoYW4gXDIwMC4KKyMJKiBhZGQgbGludXgta29pOHIgdG8gcmVwbGFjZSBsaW51eC1rb2k4ICh3aGljaCB1c2VzIGEgY29ycnVwdCBhY3NjLAorIwkgIGFwcGFyZW50bHkgYmFzZWQgb24gY3AtODY2KS4KKyMJKiBNZXJnZWQgaW4gUGF2ZWwgUm9za2luJ3MgYWNzYyBmb3IgbGludXgta29pOAorIwkqIENvcnJlY3RlZCBzb21lIGVycm9uZW91cyBcXCdzIHRvIFwuCisjCSogNC4yIG5jdXJzZXMgaGFzIGJlZW4gY2hhbmdlZCB0byB1c2Ugc2V0YWYvc2V0YWIsIGNvbnNpc3RlbnQgdy9TeXNWLgorIwkqIElJIC0+IGlpIGluIHBjdnRYWCwgc2NyZWVuLCB4dGVybS4KKyMJKiBSZW1vdmVkIFxuIGNoYXJzIGZvbGxvd2luZyBBTlNJIGVzY2FwZXMgaW4gc2dyICYgZnJpZW5kcy4KKyMJKiBVcGRhdGVkIFd5c2UgZW50cmllcy4KKyMJKiBoMTkgY29ycmVjdGlvbnMgZnJvbSBUaW0gUGllcmNlLgorIwkqIE5vdGVkIHRoYXQgdGhlIGRtMjUwMCBoYXMgYm90aCBpY2ggYW5kIHNtaXIuCisjCSogYWRkZWQgcGNjb25zIGZvciB0aGUgQWxwaGEgdW5kZXIgT1NGLzEuCisjCSogQWRkZWQgU29ueSBORVdTIHdvcmtzdGF0aW9uIGVudHJpZXMgYW5kIGNpdDEwMWUtcnYuCisjCSogUmV2ZXJ0ZWQgYGFtaWdhJzsgdG8gS2VudCBQb2xrJ3MgdmVyc2lvbiwgYXMgSSdtIHRvbGQKKyMJICB0aGUgVmVya3VpbCBlbnRyeSBtZXNzZXMgdXAgd2l0aCBBbWlnYSBUZWxuZXQuCisjIDEwLjIuMSAoU3VuIE1hciAgOCAxODozMjowNCBFU1QgMTk5OCk6CisjCSogQ29ycmVjdGVkIGF0dHJpYnV0aW9ucyBpbiAxMC4yLjAgcmVsZWFzZSBub3Rlcy4KKyMJKiBTY2FubmVkIHRoZSBTaHVmb3JkIGFyY2hpdmUgZm9yIG5ldyB0ZXJtaW5mb3MgYW5kIGluZm9ybWF0aW9uLgorIwkqIFJlbW92ZWQgc2dyIGZyb20gcW54IGVudHJ5IChUaG9tYXMgRGlja2V5KS4KKyMJKiBBZGRlZCBlbnRyaWVzIGZvciBJQ0wgYW5kIEtva3VzYWkgRGF0YSBTeXN0ZW1zIHRlcm1pbmFscy4KKyMJKiBJbmNvcnBvcmF0ZWQgTkNSIHRlcm1pbmZvcyBmcm9tIHRoZSBCb3VuZGxlc3MgVGVjaG5vbG9neSBGVFAgc2l0ZS4KKyMJKiBJbmNvcnBvcmF0ZWQgYXR0NzAwIGZyb20gdGhlIEJvdW5kbGVzcyBUZWNobm9sb2d5IEZUUCBzaXRlLgorIwkqIE1pc2NlbGxhbmVvdXMgY29udGFjdC1hZGRyZXNzIGFuZCBXZWItcGFnZSB1cGRhdGVzLgorIworIy0oY2hhbmdlbG9nLWJlZ2lubmluZy1uY3Vyc2VzLTQuMiktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgMTk5OC81LzkKKyMJKiBhZGQgbnh0ZXJtIGFuZCB4dGVybS1jb2xvciB0ZXJtaW5mbyBkZXNjcmlwdGlvbiAocmVxdWVzdCBieSBDcmlzdGlhbgorIwkgIEdhZnRvbiA8Z2FmdG9uQHJlZGhhdC5jb20+KS4KKyMJKiBtb2RpZnkgcnh2dCB0ZXJtaW5mbyBkZXNjcmlwdGlvbiB0byBjbGVhciBhbHRlcm5hdGUgc2NyZWVuIGJlZm9yZQorIwkgIHN3aXRjaGluZyBiYWNrIHRvIG5vcm1hbCBzY3JlZW4sIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYXBwbGljYXRpb25zCisjCSAgd2hpY2ggdXNlIHh0ZXJtIChyZXBvcnRlZCBieSBNYW5vaiBLYXNpY2hhaW51bGEgPG1hbm9qa0Bpby5jb20+KS4KKyMJKiBtb2RpZnkgbGludXggdGVybWluZm8gZGVzY3JpcHRpb24gdG8gcmVzZXQgY29sb3IgcGFsZXR0ZSAocmVwb3J0ZWQKKyMJICBieSBUZWxmb3JkIFRlbmR5cyA8dGVsZm9yZEBlbmcudXRzLmVkdS5hdT4pLgorIworIyAxOTk4LzcvNAorIwkqIG1lcmdlIGNoYW5nZXMgZnJvbSBjdXJyZW50IFhGcmVlODYgeHRlcm0gdGVybWluZm8gZGVzY3JpcHRpb25zLgorIworIyAxOTk4LzcvMjUKKyMJKiBBZGRlZCBtaW5pdGVsMSBlbnRyaWVzIGZyb20gQWxleGFuZGVyIE1vbnRhcm9uLgorIwkqIEFkZGVkIHFueHQyIGZyb20gRmVkZXJpY28gQmlhbmNoaS4KKyMJKiBBZGRlZCBhcm0xMDAgdGVybWluZm8gZW50cmllcyBmcm9tIERhdmUgTWlsbGVuLgorIworIyAxOTk4LzgvNgorIwkqIEFkZGVkIG5jc2EgdGVsbmV0IGVudHJpZXMgZnJvbSBGcmFuY2VzY28gUG90b3J0aQorIworIyAxOTk4LzgvMTUKKyMJKiBtb2RpZnkgbmNzYSB0ZWxuZXQgZW50cnkgdG8gcmVmbGVjdCBjb2xvciwgb3RoZXIgY2FwYWJpbGl0aWVzIGJhc2VkIG9uCisjCSAgZXhhbWluYXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlIC0gVC5EaWNrZXkuCisjCisjIDE5OTgvOC8yMgorIwkqIENvcnJlY3RlZCBzb21lIGVycm9uZW91cyBcXCdzIHRvIFwgKGV0ZXJtLCBvc2Jvcm5lKSAtIFRELgorIworIyAxOTk4LzgvMjkKKyMJKiBBZGRlZCBGcmFuY2VzY28gUG90b3J0aSdzIHR1bmVkIFd5c2UgOTkgZW50cmllcy4KKyMJKiBkdHRlcm0gZW5hY3MgY29ycmVjdGlvbiBmcm9tIEFsZXhhbmRlciBWLiBMdWt5YW5vdi4KKyMJKiBBZGQgbmNzYS1ucywgbmNzYS1tLW5zIGFuZCBuY3NhLW0gZW50cmllcyBmcm9tIGVzciB2ZXJzaW9uLgorIwkqIGNvcnJlY3QgYSB0eXBvIGluIGljbDY0MDQgZW50cnkuCisjCSogYWRkIHh0ZXJtbSBhbmQgeHRlcm1jCisjCisjIDE5OTgvOS8yNgorIwkqIGZvcm1hdCBtb3N0ICUnY2hhcicgc2VxdWVuY2VzIHRvICV7bnVtYmVyfQorIwkqIGFkYXB0IElCTSBBSVggMy4yLjUgdGVybWluZm8gLSBULkRpY2tleQorIwkqIG1lcmdlIERhdGEgR2VuZXJhbCB0ZXJtaW5mbyBmcm9tIEhhc3VmaW4gPGhhc3VmaW5AdmlkbmV0Lm5ldD4gLSBURAorIworIyAxOTk4LzEwLzEwCisjCSogdXBkYXRlIHh0ZXJtLXhmcmVlODYgdG8gY3VycmVudCAocGF0Y2ggODQpLCBmb3IgaXMyL3JzMiBjaGFuZ2VzIC0gVEQKKyMJKiBjb3JyZWN0IGluaXRpYWxpemF0aW9uIHN0cmluZyBpbiB4dGVybS1yNSwgYWRkIG1pc2Mgb3RoZXIgZmVhdHVyZXMKKyMJICB0byBjb3JyZXNwb25kIHdpdGggeHRlcm0gcGF0Y2ggODQgLSBURAorIworIyAxOTk4LzEyLzE5CisjCSogdXBkYXRlIHh0ZXJtLXhmcmVlODYgdG8gY3VycmVudCAocGF0Y2ggOTApLCBzbWN1ci9ybWN1ciBjaGFuZ2VzIC0gVEQKKyMJKiBhZGQgTWF0aGV3IFZlcm5vbidzIG1hY2ggY29uc29sZSBlbnRyaWVzCisjCSogY29ycmVjdGlvbnMgZm9yIG5jc2EgZnVuY3Rpb24ta2V5cyAocmVwb3J0IGJ5IExhcnJ5IFZpcmRlbikKKyMKKyMgMTk5OC8xMi8xOQorIwkqIGNoYW5nZSBsaW51eCB0byB1c2UgbmN2IzIsIHNpbmNlIHVuZGVybGluZSBkb2VzIG5vdCB3b3JrIHdpdGggY29sb3IgLSBURAorIworIyAxOTk5LzEvOQorIwkqIGFkZCBrYnQgdG8gaXJpcy1hbnNpLCBkb2N1bWVudCBvdGhlciBzaGlmdC9jb250cm9sIGZ1bmN0aW9ua2V5cyAtIFRECisjCSogY29ycmVjdCBpcmlzLWFuc2kgYW5kIGlyaXMtYW5zaS1hcCB3aXRoIHJlc3BlY3QgdG8gbm9ybWFsIHZzIGtleXBhZAorIwkgIGFwcGxpY2F0aW9uIG1vZGVzLCBjaGFuZ2Uga2VudCB0byB1c2UgdGhlIGNvcnJlY3Qga2V5cGFkIGNvZGUgLSBURAorIworIyAxOTk5LzEvMTAKKyMJKiBhZGQgZW50cnkgZm9yIFRlcmEgVGVybSAtIFRECisjCisjIDE5OTkvMS8yMworIwkqIG1pbm9yIGltcHJvdmVtZW50cyBmb3IgdGVyYXRlcm0gZW50cnkgLSBURAorIwkqIHJlbmFtZSBzZXZlcmFsIGVudHJpZXMgdXNlZCBieSBCU0RJOiBic2RvcyB0byBic2Rvcy1wYy1ub2JvbGQsCisjCSAgYW5kIGJzZG9zLWJvbGQgdG8gYnNkb3MtcGMgKEplZmZyZXkgQyBIb25pZykKKyMKKyMgMTk5OS8yLzIwCisjCSogcmVzb2x2ZSBhbWJpZ3VpdHkgb2Yga2VuZC9rbGwva3NsdCBhbmQga2hvbWUva2ZuZC9raWNoMSBzdHJpbmdzIGluCisjCSAgeHRlcm0gYW5kIG5jc2EgZW50cmllcyBieSByZW1vdmluZyB0aGUgdW5uZWVkZWQgb25lcy4gIE5vdGUgdGhhdAorIwkgIHNvbWUgZW50cmllcyB3aWxsIHJldHVybiBrZW5kICYga2hvbWUgdmVyc3VzIGtzbHQgYW5kIGtmbmQsIGZvcgorIwkgIFBDLXN0eWxlIGtleWJvYXJkcyB2ZXJzdXMgc3RyaWN0IHZ0MjIwIGNvbXBhdGlibGl0eSAtIFRECisjCisjIDE5OTkvMy8xMworIwkqIGFkanVzdCB4dGVybS14ZnJlZTg2IGtob21lL2tlbmQgdG8gbWF0Y2ggZGVmYXVsdCBQQy1zdHlsZSBrZXlib2FyZAorIwkgIHRhYmxlcyAtIFRECisjCSogYWRkICdjcnQnIGVudHJ5IC0gVEQKKyMJKiBjb3JyZWN0IHR5cG9zIGluICdsaW51eC1jJyBlbnRyeSAtIFRECisjCisjIDE5OTkvMy8xNAorIwkqIHVwZGF0ZSBlbnRyaWVzIGZvciBCU0QvT1MgY29uc29sZSB0byB1c2Uga2xvbmUrc2dyIGFuZCBrbG9uZStjb2xvcgorIwkgIChKZWZmcmV5IEMgSG9uaWcpCisjCisjIDE5OTkvMy8yNworIwkqIGFkanVzdCB4dGVybS14ZnJlZTg2IG1pc2NlbGxhbmVvdXMga2V5cGFkIGtleXMsIGFzIHBlciBwYXRjaCAjOTQgLSBURC4KKyMKKyMgMTk5OS80LzEwCisjCSogYWRkIGxpbnV4LWxhdCwgZnJvbSBSZWRIYXQgcGF0Y2hlcyB0byBuY3Vyc2VzIDQuMgorIworIyAxOTk5LzQvMTcKKyMJKiBhZGQgY29tcGxldGUgc2V0IG9mIGRlZmF1bHQgZnVuY3Rpb24ta2V5IGRlZmluaXRpb25zIGZvciBzY29hbnNpIC0gVEQuCisjCisjIDE5OTkvNy8zCisjCSogYWRkIGNub3JtLCBjdnZpcyBmb3IgTGludXggMi4yIGtlcm5lbHMKKyMKKyMgMTk5OS83LzI0CisjCSogYWRkIGttb3VzIHRvIHh0ZXJtLXI1IC1URAorIwkqIGNvcnJlY3QgZW50cmllcyB4dGVybStzbCBhbmQgeHRlcm0rc2wtdHdtLCB3aGljaCB3ZXJlIG1pc3NpbmcgdGhlCisjCSAgcGFyZW50ICJ1c2UiIGNsYXVzZSAtVEQKKyMKKyMgMTk5OS83LzMxCisjCSogY29ycmVjdGVkIGNub3JtLCBhZGRlZCBlbDEgaW4gJ3NjcmVlbicgZGVzY3JpcHRpb24gLVRECisjCisjIDE5OTkvOC8xNAorIwkqIGFkZCBtcy12dDEwMCAtVEQKKyMKKyMgMTk5OS84LzIxCisjCSogY29ycmVjdGlvbnMgdG8gYmV0ZXJtIGVudHJ5IC1URAorIworIyAxOTk5LzgvMjgKKyMJKiBhZGQgY3lnd2luIGVudHJ5IC1URAorIworIyAxOTk5LzkvNAorIwkqIG1pbm9yIGNvcnJlY3Rpb25zIGZvciBiZXRlcm0gZW50cnkgLVRECisjCisjIDE5OTkvOS8xOAorIwkqIGFkZCBhY3NjIHN0cmluZyB0byBIUCA3MDA5MiB0ZXJtaW5mbyBlbnRyeSAtSm9lcmcgV3Vuc2NoCisjCisjIDE5OTkvOS8yNQorIwkqIGFkZCBhbWlnYS04Yml0IGVudHJ5CisjCSogYWRkIGNvbnNvbGUgZW50cmllcyBmcm9tIE5ldEJTRDogb2Zjb25zLCB3c3Z0MjUsIHdzdnQyNW0sIHJjb25zLAorIwkgIHJjb25zLWNvbG9yLCBiYXNlZCBvbgorIwkgIGZ0cDovL2Z0cC5uZXRic2Qub3JnL3B1Yi9OZXRCU0QvTmV0QlNELWN1cnJlbnQvc3JjL3NoYXJlL3Rlcm1jYXAvdGVybWNhcC5zcmMKKyMJKiBhZGQgYWxpYXMgZm9yIGlyaXMtYW5zaS1uZXQKKyMKKyMgMTk5OS8xMC8yCisjCSogY29ycmVjdGVkIHNjb2Fuc2kgZW50cnkncyBhY3NjLCBzb21lIGZ1bmN0aW9uIGtleXMsIGFkZCBjb2xvciAtVEQKKyMKKyMgMTk5OS8xMC8yMworIwkqIGFkZCBjbm9ybSwgY3Z2aXMgdG8gY29uczI1dywgYW5kIG1vZGlmeSBuY3YgdG8gYWRkICdkaW0nIC1URAorIwkqIHJlb3JkZXIgbmNzYSBlbnRyaWVzIHRvIG1ha2UgbmNzYS12dDIyMCB1c2UgdGhlIGFsdGVybmF0ZSBmdW5jdGlvbgorIwkgIGtleSBtYXBwaW5nLCBsZWF2aW5nIFBvdG9ydGkncyBlbnRyaWVzIG1vcmUgbGlrZSBoZSBuYW1lZCB0aGVtIC1URAorIwkqIHJlbW92ZSBlbnRlci9leGl0IGFtLW1vZGUgZnJvbSBjeWd3aW4gLVRECisjCisjIDE5OTkvMTAvMzAKKyMJKiBjb3JyZWN0IHR5cG9zIGluIHNldmVyYWwgZW50cmllcyAobWlzc2luZyAnWycgZnJvbSBDU0kpOgorIwkgIG1nci1zdW4sIG5jc2EtbSwgdnQzMjAtazMsIGF0dDUwNSwgYXZ0LW5zLCBhcyB3ZWxsIGFzIHNtaXIvcm1pcgorIwkgIHN0cmluZ3MgZm9yIGF2dC1ucyAtVEQKKyMJKiBhZGQgJ2RpbScgdG8gbmN2IG1hc2sgZm9yIGxpbnV4IChyZXBvcnQgYnkgS2xhdXMgV2VpZGUpLgorIworIyAxOTk5LzExLzI3CisjCSogY29ycmVjdCBrZjEta2Y0IGluIHh0ZXJtLXI2IHdoaWNoIHdlcmUgdnQxMDAtc3R5bGUgUEYxLVBGNCAtVEQKKyMJKiBhZGQgaHRzIHRvIHh0ZXJtLXI2LCBhbmQgdTYtdTkgdG8geHRlcm0tcjUgLVRECisjCSogYWRkIHh0ZXJtLTg4Y29sb3IgYW5kIHh0ZXJtLTI1NmNvbG9yIC1URAorIworIyAxOTk5LzEyLzQKKyMJKiBhZGQgIm9ic29sZXRlIiB0ZXJtY2FwIHN0cmluZ3MgLVRECisjCSogYWRkIGt2dCBhbmQgZ25vbWUgZW50cmllcyAtVEQKKyMKKyMgMTk5OS8xMi8xMQorIwkqIGNvcnJlY3QgY3VwIHN0cmluZyBmb3IgcmVnZW50MTAwIC1URAorIworIyAyMDAwLzEvMQorIwkqIHVwZGF0ZSBtYWNoLCBhZGQgbWFjaC1jb2xvciBiYXNlZCBvbiBEZWJpYW4gZGlmZnMgZm9yIG5jdXJzZXMgNS4wIC1URAorIwkqIGFkZCBlbnRyaWVzIGZvciB4dGVybS1ocCwgeHRlcm0tdnQyMjAsIHh0ZXJtLXZ0NTIgYW5kIHh0ZXJtLW5vYXBwIC1URAorIwkqIGNoYW5nZSBPVHJzIGNhcGFiaWxpdGllcyB0byByczIgLVRECisjCSogYWRkIG9ic29sZXRlIGFuZCBleHRlbmRlZCBjYXBhYmlsaXRpZXMgdG8gJ3NjcmVlbicgLVRECisjCisjIDIwMDAvMS81CisjCSogcmVtb3ZlIGtmMCBmcm9tIHJ4dnQsIHZ0NTIwLCB2dDUyNSBhbmQgaWJtNTE1MSBzaW5jZSBpdCBjb25mbGljdHMKKyMJICB3aXRoIGtmMTAgLVRECisjCSogdXBkYXRlZCB4dGVybS14Zjg2LXY0MCwgbWFraW5nIGtkY2gxIGNvcnJlc3BvbmQgdG8gdnQyMjAgJ1JlbW92ZScsCisjCSAgYW5kIGFkZGluZyBrY2J0IC1URAorIworIyAyMDAwLzEvMTIKKyMJKiByZW1vdmUgaW5jb3JyZWN0IGtob21lL2tlbmQgZnJvbSB4dGVybS14Zjg2LXYzMzMsIHdoaWNoIHdhcyBiYXNlZCBvbgorIwkgIG5vbnN0YW5kYXJkIHJlc291cmNlIHNldHRpbmdzIC1URAorIworIyAyMDAwLzIvMjYKKyMJKiBtaW5vciBmaXhlcyBmb3IgeHRlcm0tKiwgYmFzZWQgb24gRGViaWFuICM1ODUzMCAtVEQKKyMKKyMgMjAwMC8zLzQKKyMJKiBhZGQgc2V2ZXJhbCB0ZXJtaW5hbCB0eXBlcyBmcm9tIGVzcidzICIxMS4wIiwgYXMgd2VsbCBhcyBjb21tZW50cy4KKyMJICBicTMwMCosIGRrdTcxMDItb2xkLCBka3U3MjAyLCBoZnQsIGxmdCwgcGNtdywgcG1jb25zLCB0d3MqLCB2aXAqLAorIwkgIHZ0MjIwLThiaXQsIHZ0MjIwLW9sZCwgd3k4NS04Yml0CisjCisjIDIwMDAvMy8xOAorIwkqIGFkZCBzZXZlcmFsIHRlcm1pbmFsIHR5cGVzIGZyb20gZXNyJ3MgIjExLjAuMSIgKGFuc2ktKikuCisjCSogdXBkYXRlIE9UeHggY2FwYWJpbGl0aWVzIGZvciBjaGFuZ2VzIG9uIDIwMDAvMy80LgorIwkqIHJldmVydCBwYXJ0IG9mIHZ0MjIwIGNoYW5nZSAocmVxdWVzdCBieSBUb2RkIEMgTWlsbGVyIGZvciBPcGVuQlNEKQorIworIyAyMDAwLzMvMjYKKyMJKiBtb3ZlIHNjcmVlbidzIEFYIGV4dGVuc2lvbiB0byBlY21hK2NvbG9yLCBtb2RpZnkgc2V2ZXJhbCBlbnRyaWVzIHRvCisjCSAgdXNlIHRoYXQsIGFkanVzdGluZyBuY3YgYXMgbmVlZGVkIC1URAorIworIyAyMDAwLzQvOAorIwkqIGFkZCBic2Rvcy1wYy1tLCBic2Rvcy1wYy1tb25vIChKZWZmcmV5IEMgSG9uaWcpCisjCSogY29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiBlbnRyeSBuYW1lOiBicTMwMC1ydiB3YXMgZ2l2ZW4gYXMgYmczMDAtcnYKKyMJICBpbiBlc3IncyB2ZXJzaW9uLgorIworIyAyMDAwLzQvMTUKKyMJKiBhZGQgY3VkLCBlY2gsIGV0Yy4sIHRvIGJldGVybSBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIFJpY28gVHVkb3IgLVRECisjCSogY29ycmVjdCBjb2xvciBkZWZpbml0aW9uIGZvciBpYm0zMTY0LCBtYWtlIG1pbm9yIGNoYW5nZXMgdG8gb3RoZXIKKyMJICBJQk0gdGVybWluYWwgZGVmaW5pdGlvbnMgYmFzZWQgb24gcmVjZW50IHRlcm1pbmZvIGRlc2NyaXB0aW9ucyAtVEQKKyMKKyMgMjAwMC80LzIyCisjCSogYWRkIG1ndGVybSwgZnJvbSBOZXRCU0QgLVRECisjCSogYWRkIGFsaWFzIHN1bi1jZ3NpeCBmb3Igc3VuLXNzNSBhcyBwZXIgTmV0QlNECisjCSogY2hhbmdlIGNvbnMyNXcgdG8gdXNlIHJzMiBmb3IgcmVzZXQgcmF0aGVyIHRoYW4gcnMxIC1URAorIwkqIGFkZCByYy9zYyB0byBhaXh0ZXJtIGJhc2VkIG9uIG1hbnBhZ2UgLVRECisjCisjIDIwMDAvNS8xMworIwkqIHJlbW92ZSBuY3YgZnJvbSB4dGVybS0xNmNvbG9yLCB4dGVybS0yNTZjb2xvcgorIworIyAyMDAwLzYvMTAKKyMJKiBhZGQga21vdXMgY2FwYWJpbGl0eSB0byBsaW51eCB0byB1c2UgSm9lcmcgU2Nob2VuJ3MgZ3BtIHBhdGNoLgorIworIyAyMDAwLzcvMQorIwkqIGFkZCBFdGVybSAoTWljaGFlbCBKZW5uaW5ncykKKyMKKyMgMjAwMC0wNy0xOAorIyAgICAgICAqIGFkZCBhbWlnYS12bmMgZW50cnkuCisjCisjIDIwMDAtMDgtMTIKKyMJKiBjb3JyZWN0IGRlc2NyaXB0aW9uIG9mIFRvcCBHdW4gVGVsbmV0LgorIwkqIGFkZCBrdGVybS1jb2xvcgorIworIyAyMDAwLTA4LTI2CisjCSogYWRkIHFhbnNpKiBlbnRyaWVzIGZyb20gUU5YIGZ0cCBzaXRlLgorIworIyAyMDAwLTA5LTE2CisjCSogYWRkIE1hdHJpeCBPcmJpdGFsIGVudHJpZXMgYnkgRXJpYyBaLiBBeWVycykuCisjCSogYWRkIHh0ZXJtLWJhc2ljLCB4dGVybS1zY28gZW50cmllcywgdXBkYXRlIHJlbGF0ZWQgZW50cmllcyB0byBYRnJlZTg2CisjCSAgNC4wLjFjIC1URAorIworIyAyMDAwLTA5LTE3CisjCSogYWRkIFMwLCBFMCBleHRlbnNpb25zIHRvIHNjcmVlbidzIGVudHJ5IC1URAorIworIyAyMDAwLTA5LTIzCisjCSogc2V2ZXJhbCBjb3JyZWN0aW9ucyBiYXNlZCBvbiB0aWMncyBuZXcgcGFyYW1ldGVyLWNoZWNraW5nIGNvZGUgLVRECisjCSogbW9kaWZ5IHh0ZXJtLXI2IGFuZCBzaW1pbGFyIHJzMiBzZXF1ZW5jZXMgd2hpY2ggaGFkIFxFNy4uLlxFOAorIwkgIGJyYWNrZXRpbmcgc2VxdWVuY2VzIHRoYXQgcmVzZXQgdmlkZW8gYXR0cmlidXRlcyAoXEU4IHdvdWxkIHJlc3RvcmUKKyMJICB0aGVtKSAtVEQKKyMKKyMgMjAwMC0xMS0xMQorIwkqIHJlbmFtZSBjeWd3aW4gdG8gY3lnd2luQjE5LCBhZGFwdCBuZXdlciBlbnRyeSBmcm9tIEVhcm5pZSBCb3lkIC1URAorIworIyAyMDAwLTEyLTE2CisjCSogaW1wcm92ZWQgc2NvYW5zaSwgYmFzZWQgb24gU0NPIG1hbi1wYWdlLCBhbmQgdGVzdGluZyBjb25zb2xlLAorIwkgIHNjb3Rlcm0gd2l0aCB0YWNrIC1URAorIworIyAyMDAxLTAxLTI3CisjCSogbW9kaWZ5IGt0ZXJtIHRvIHVzZSBhY3NjIHZpYSBTQ1MgY29udHJvbHMuCisjCisjIDIwMDEtMDItMTAKKyMJKiBzY3JlZW4gMy45LjggYWxsb3dzIHh0ZXJtIG1vdXNlIGNvbnRyb2xzIHRvIHBhc3MtdGhyb3VnaAorIworIyAyMDAxLTAzLTExCisjCSogcmVtb3ZlIHNwdXJpb3VzICIlfCIgZnJvbSBzb21lIHh0ZXJtIGVudHJpZXMuCisjCisjIDIwMDEtMDMtMzEKKyMJKiBtb2RpZnkgJ3NjcmVlbicga2hvbWUva2VuZCB0byBtYXRjaCBzY3JlZW4gMy4wOS4wOAorIwkqIGFkZCBleGFtcGxlcyBvZiAnc2NyZWVuJyBjdXN0b21pemF0aW9uIChzY3JlZW4ueHRlcm0teGZyZWU4NiwKKyMJICBzY3JlZW4ueHRlcm0tcjYsIHNjcmVlbi50ZXJhdGVybSkgLVRECisjCisjIDIwMDEtMDQtMTQKKyMJKiBjb3JyZWN0IGRlZmluaXRpb25zIG9mIHNoaWZ0ZWQgZWRpdGluZyBrZXlzIGZvciB4dGVybS14ZnJlZTg2IC1URAorIwkqIGFkZCAiQXBwbGVfVGVybWluYWwiIGVudHJpZXMgLUJlbmphbWluIFNpdHRsZXIKKyMJKiByZW1vdmUgdGltZS1kZWxheXMgZnJvbSAiQXBwbGVfVGVybWluYWwiIGVudHJpZXMgLVRECisjCSogbWFrZSBzZ3IgZW50cmllcyB0aW1lLWRlbGF5cyBjb25zaXN0ZW50IHdpdGggaW5kaXZpZHVhbCBjYXBzIC1URAorIworIyAyMDAxLTA1LTA1CisjCSogY29ycmVjdGVkL3VwZGF0ZWQgc2NyZWVuLnh0ZXJtLXhmcmVlODYKKyMKKyMgMjAwMS0wNS0xOQorIwkqIEVMS1MgZGVzY3JpcHRpb25zLCBmcm9tIEZlZGVyaWNvIEJpYW5jaGkKKyMJKiBhZGQgdTYgKENTUikgdG8gRXRlcm0gKE1pY2hhZWwgSmVubmluZ3MpLgorIworIyAyMDAxLTA3LTIxCisjCSogcmVuYW1lZCAiQXBwbGVfVGVybWluYWwiIGVudHJpZXMgdG8gIm5zdGVybSIgdG8gd29yayB3aXRoIFNvbGFyaXMncworIwkgIHRpYyB3aGljaCBoYW5kbGVzIG5hbWVzIG5vIGxvbmdlciB0aGFuIDE0IGNoYXJhY3RlcnMuICBBZGQKKyMJICBjb3JyZXNwb25kaW5nIGRlc2NyaXB0aW9ucyBmb3IgdGhlIERhcndpbiBQb3dlclBDIGNvbnNvbGUgbmFtZWQKKyMJICAieG51cHBjIiAtQmVuamFtaW4gU2l0dGxlcgorIworIyAyMDAxLTA5LTAxCisjCSogY2hhbmdlIGticyBpbiBtYWNoIGVudHJpZXMgdG8gXj8gKE1hcmN1cyBCcmlua21hbm4pLgorIworIyAyMDAxLTExLTE3CisjCSogYWRkICJwdXR0eSIgZW50cnkgLVRECisjCSogdXBkYXRlZCAiQXBwbGVfVGVybWluYWwiIGVudHJpZXMgLUJlbmphbWluIFNpdHRsZXIKKyMKKyMgMjAwMS0xMS0yNAorIwkqIGFkZCBtcy12dDEwMC1jb2xvciBlbnRyeSAtVEQKKyMJKiBhZGQgImtvbnNvbGUiIGVudHJpZXMgLVRECisjCisjIDIwMDEtMTItMDgKKyMJKiB1cGRhdGUgZ25vbWUgZW50cnkgdG8gUmVkaGF0IDcuMiAtVEQKKyMKKyMgMjAwMi0wNS0yNQorIwkqIGFkZCBrZjEzLWtmNDggc3RyaW5ncyB0byBjb25zMjV3IC1URAorIwkqIGFkZCBwY3Z0MjUtY29sb3IgZW50cnkgLVRECisjCSogY2hhbmdlZCBhIGZldyAvdXNyL2xpYi90YWJzZXQgLT4gL3Vzci9zaGFyZS90YWJzZXQuCisjCSogaW1wcm92ZSBzb21lIGZlYXR1cmVzIG9mIHNjb2Fuc2kgZW50cnkgYmFzZWQgb24gU0NPJ3MgdmVyc2lvbiAtVEQKKyMJKiBhZGQgc2NvYW5zaS1uZXcgZW50cnkgY29ycmVzcG9uZGluZyB0byBPcGVuU2VydmVyIDUuMC42CisjCisjIDIwMDItMDYtMTUKKyMJKiBhZGQga2NidCB0byBzY3JlZW4gZW50cnkgLVRECisjCisjIDIwMDItMDYtMjIKKyMJKiBhZGQgcnh2dC0xNmNvbG9yLCBpYm0rMTZjb2xvciwgbXZ0ZXJtIGVudHJpZXMgLVRECisjCisjIDIwMDItMDktMjgKKyMJKiBzcGxpdCBvdXQgbGludXgtYmFzaWMgZW50cnksIG1ha2luZyBsaW51eC1jIGluaGVyaXQgZnJvbSB0aGF0LCBhbmQKKyMJICBpbiB0dXJuIGxpbnV4ICh3aXRoIGNub3JtLCBldGMpIGluaGVyaXQgZnJvbSBsaW51eC1jLW5jIHRvIHJlZmxlY3QKKyMJICB0aGUgaGlzdG9yeSBvZiB0aGlzIGNvbnNvbGUgdHlwZSAtVEQKKyMJKiBzY2FsZWQgdGhlIGxpbnV4LWMgdGVybWluZm8gZW50cnkgdG8gbWF0Y2ggbGludXgtYy1uYywgaS5lLiwgdGhlCisjCSAgci9nL2IgcGFyYW1ldGVycyBvZiBpbml0YyBhcmUgaW4gdGhlIHJhbmdlIDAgdG8gMTAwMCAtVEQKKyMKKyMgMjAwMi0xMC0wNQorIwkqIG1pbm9yIGZpeCBmb3Igc2NhbGUtZmFjdG9yIG9mIGxpbnV4LWMgYW5kIGxpbnV4LWMtbmMgLVRECisjCisjIDIwMDItMTEtMDkKKyMJKiBzcGxpdC1vdXQgdnQxMDAra2V5cGFkIGFuZCB2dDIyMCtrZXlwYWQsIGZpeCBpbnRlcmNoYW5nZWQga2EzL2tiMgorIwkgIGluIHRoZSBsYXR0ZXIgLVRECisjCisjIDIwMDItMTEtMTYKKyMJKiBhZGQgZW50cmllcyBmb3IgbXRlcm0gKG10ZXJtLCBtdGVybS1hbnNpLCBkZWNhbnNpKSAtVEQKKyMJKiBuY3IyNjB3eTM1MHBwIGhhcyBvbmx5IDE2IGNvbG9yIHBhaXJzIC1URAorIwkqIGFkZCBzdW4tdHlwZTQgZnJvbSBOZXRCU0QgLVRECisjCSogdXBkYXRlIHh0ZXJtLXhmcmVlODYgdG8gY3VycmVudCAocGF0Y2ggMTcwKSAtVEQKKyMJKiBhZGQgc2NyZWVuLWJjZSwgc2NyZWVuLXMgZW50cmllcyAtVEQKKyMJKiBhZGQgeHRlcm0tMTAwMiwgeHRlcm0tMTAwMyBlbnRyaWVzIC1URAorIworIyAyMDAzLTAxLTExCisjCSogdXBkYXRlIGhvbWVwYWdlIGZvciBUb3AgR3VuIFRlbG5ldC9TU0gKKyMKKyMgMjAwMy0wMS0yNQorIwkqIHJlZHVjZSBkdXBsaWNhdGlvbiBpbiBlbXggZW50cmllcywgYWRkZWQgZW14LWJhc2UgLVRECisjCisjIDIwMDMtMDUtMjQKKyMJKiBjb3JyZWN0ZWQgYWNzIGZvciBzY3JlZW4udGVyYXRlcm0gLVRECisjCSogYWRkIHRrdGVybSBlbnRyeSAtVEQKKyMKKyMgMjAwMy0wNy0xNQorIwkqIGN5Z3dpbiBjaGFuZ2VzIGZyb20gQ2hhcmxlcyBXaWxzb246CisjCSAgbWlzYy90ZXJtaW5mby5zcmMgKG54dGVybXx4dGVybS1jb2xvcik6IG1ha2UgeHRlcm0tY29sb3IKKyMJICBwcmltYXJ5IGluc3RlYWQgb2Ygbnh0ZXJtLCB0byBtYXRjaCBYRnJlZTg2J3MgeHRlcm0udGVybWluZm8KKyMJICB1c2FnZSBhbmQgdG8gcHJldmVudCBjaXJjdWxhciBsaW5rcy4KKyMJICAocnh2dCk6IGFkZCBhZGRpdGlvbmFsIGNvZGVzIGZyb20gcnh2dC5vcmcuCisjCSAgKHJ4dnQtY29sb3IpOiBuZXcgYWxpYXMKKyMJICAocnh2dC14cG0pOiBuZXcgYWxpYXMKKyMJICAocnh2dC1jeWd3aW4pOiBsaWtlIHJ4dnQsIGJ1dCB3aXRoIHNwZWNpYWwgYWNzYyBjb2Rlcy4KKyMJICAocnh2dC1jeWd3aW4tbmF0aXZlKTogZGl0dG8uICByeHZ0IG1heSBiZSBydW4gdW5kZXIgWFdpbmRvd3MsIG9yCisjCSAgd2l0aCBhICJuYXRpdmUiIE1TV2luIEdVSS4gIEVhY2ggdGFrZXMgZGlmZmVyZW50IGFjc2MgY29kZXMsCisjCSAgd2hpY2ggYXJlIGJvdGggZGlmZmVyZW50IGZyb20gdGhlICJub3JtYWwiIHJ4dnQncyBhY3NjLgorIwkgIChjeWd3aW4pOiBjeWd3aW4taW4tY21kLmV4ZSB3aW5kb3cuICBMb3RzIG9mIGZpeGVzLgorIwkgIChjeWd3aW5EQkcpOiBkaXR0by4KKyMKKyMgMjAwMy0wOS0yNworIwkqIHVwZGF0ZSBnbm9tZSB0ZXJtaW5hbCBlbnRyaWVzIC1URAorIworIyAyMDAzLTEwLTA0CisjCSogYWRkIGVudHJpZXMgZm9yIGRqZ3BwIDIuMDMgYW5kIDIuMDQgLVRECisjCisjIDIwMDMtMTAtMjUKKyMJKiBhZGQgYWxpYXMgZm9yIHZ0bnQgLVRECisjCSogdXBkYXRlIHh0ZXJtLXhmcmVlODYgZm9yIFhGcmVlODYgNC40IC1URAorIworIyAyMDAzLTExLTIyCisjCSogYWRkIGxpbnV4LXZ0IChBbmRyZXkgViBMdWt5YW5vdikKKyMKKyMgMjAwMy0xMi0yMAorIwkqIGFkZCBzY3JlZW4ubGludXggLVRECisjCisjIDIwMDQtMDEtMTAKKyMJKiByZXZpc2VkL2ltcHJvdmVkIGVudHJpZXMgZm9yIHR2aTkxMmIsIHR2aTkyMGIgKEJlbmphbWluIFNpdHRsZXIpCisjCisjIDIwMDQtMDEtMTcKKyMJKiBhZGQgT3Blbk5UL0ludGVyaXgvU0ZVIGVudHJpZXMgKEZlZGVyaWNvIEJpYW5jaGkpCisjCSogYWRkIHZ0MTAwKyBhbmQgdnQtdXRmOCBlbnRyaWVzIC1URAorIwkqIGFkZCB1d2luIGVudHJ5IC1URAorIworIyAyMDA0LTAzLTI3CisjCSogYWRkIHNnciBzdHJpbmdzIHRvIHNldmVyYWwgY29tbW9uIGVudHJpZXMgbGFja2luZyB0aGVtLCBlLmcuLAorIwkgIHNjcmVlbiwgdG8gbWFrZSB0aGUgZW50cmllcyBtb3JlIHBvcnRhYmxlIC1URAorIwkqIHJlbW92ZSBjdnZpcyBmcm9tIHJ4dnQgZW50cnksIHNpbmNlIGl0IGlzIHRoZSBzYW1lIGFzIGNub3JtIC1URAorIwkqIHNpbWlsYXIgZml4dXBzIGZvciBjdnZpcy9jbm9ybSB2YXJpb3VzIGVudHJpZXMgLVRECisjCisjIDIwMDQtMDUtMjIKKyMJKiByZW1vdmUgJ25jdicgZnJvbSB4dGVybS0yNTZjb2xvciAocGF0Y2ggMTg4KSAtVEQKKyMKKyMgMjAwNC0wNi0yNgorIwkqIGFkZCBtbHRlcm0gLVRECisjCSogYWRkIHh0ZXJtLXhmODYtdjQ0IC1URAorIwkqIG1vZGlmeSB4dGVybS1uZXcgYWthIHh0ZXJtLXhmcmVlODYgdG8gYWNjb21tb2RhdGUgbHVpdCwgd2hpY2ggcmVsaWVzCisjCSAgb24gRzEgYmVpbmcgdXNlZCB2aWEgYW4gSVNPLTIwMjIgZXNjYXBlIHNlcXVlbmNlIChyZXBvcnQgYnkKKyMJICBKdWxpdXN6IENocm9ib2N6ZWspIC1URAorIwkqIGFkZCAnaHVyZCcgZW50cnkgLVRECisjCisjIDIwMDQtMDctMDMKKyMJKiBtYWtlIHh0ZXJtLXhmODYtdjQzIGRlcml2ZWQgZnJvbSB4dGVybS14Zjg2LXY0MCByYXRoZXIgdGhhbgorIwkgIHh0ZXJtLWJhc2ljIC1URAorIwkqIGFsaWduIHdpdGggeHRlcm0gIzE5MidzIHVzZSBvZiB4dGVybS1uZXcgLVRECisjCSogdXBkYXRlIHh0ZXJtLW5ldyBhbmQgeHRlcm0tOGJpdCBmb3IgY3Z2aXMvY25vcm0gc3RyaW5ncyAtVEQKKyMJKiBtYWtlIHh0ZXJtLW5ldyB0aGUgZGVmYXVsdCAieHRlcm0iIC1URAorIworIyAyMDA0LTA3LTEwCisjCSogbWlub3IgZml4ZXMgZm9yIGVtdSAtVEQKKyMJKiBhZGQgZW11LTIyMAorIwkqIGFkZCBybWFtL3NtYW0gdG8gbGludXggKFRyZXZvciBWYW4gQnJlbWVuKQorIwkqIGNoYW5nZSB3eXNlIGFjc2Mgc3RyaW5ncyB0byB1c2UgJ2knIG1hcCByYXRoZXIgdGhhbiAnSScgLVRECisjCSogZml4ZXMgZm9yIGF2YXRhcjAgLVRECisjCSogZml4ZXMgZm9yIHZwM2ErIC1URAorIworIyAyMDA0LTA3LTE3CisjCSogYWRkIHh0ZXJtLXBjLWZrZXlzIC1URAorIwkqIHJldmlldy91cGRhdGUgZ25vbWUgYW5kIGdub21lLXJoOTAgZW50cmllcyAocHJvbXB0ZWQgYnkKKyMJICBSZWRoYXQgQnVnemlsbGEgIzEyMjgxNSkgLVRECisjCSogcmV2aWV3L3VwZGF0ZSBrb25zb2xlIGVudHJpZXMgLVRECisjCSogYWRkIHNnciwgY29ycmVjdCBzZ3IwIGZvciBrdGVybSBhbmQgbWx0ZXJtIC1URAorIwkqIGNvcnJlY3QgdHNsIHN0cmluZyBpbiBrdGVybSAtVEQKKyMKKyMgMjAwNC0wNy0yNAorIwkqIG1ha2UgbmNzYS1tIHJtYWNzL3NtYWNzIGNvbnNpc3RlbnQgd2l0aCBzZ3IgLVRECisjCSogYWRkIHNnciwgcmMvc2MgYW5kIGVjaCB0byBzeXNjb25zIGVudHJpZXMgLVRECisjCSogYWRkIGZ1bmN0aW9uLWtleXMgdG8gZGVjYW5zaSAtVEQKKyMJKiBhZGQgc2dyIHRvIG10ZXJtLWFuc2kgLVRECisjCSogYWRkIHNnciwgY2l2aXMsIGNub3JtIHRvIGVtdSAtVEQKKyMJKiBjb3JyZWN0L3NpbXBsaWZ5IGN1cCBpbiBhZGRyaW5mbyAtVEQKKyMJKiBjb3JyZWN0aW9ucyBmb3IgZ25vbWUgYW5kIGtvbnNvbGUgZW50cmllcworIwkgIChSZWRoYXQgQnVnemlsbGEgIzEyMjgxNSkgLUhhbnMgZGUgR29lZGUKKyMJKiBtb2RpZnkgREVDIGVudHJpZXMgKHZ0MjIwLCBldGMpLCB0byBhZGQgc2dyIHN0cmluZywgYW5kIHRvIHVzZQorIwkgIElTTy0yMDIyIHN0cmluZ3MgZm9yIHJtYWNzL3NtYWNzIC1URAorIworIyAyMDA0LTA3LTMxCisjCSogcmVuYW1lIHh0ZXJtLXBjLWZrZXlzIHRvIHh0ZXJtK3BjZmtleXMgLVRECisjCisjIDIwMDQtMDgtMDcKKyMJKiBpbXByb3ZlZCBwdXR0eSBlbnRyeSAtUm9iZXJ0IGRlIEJhdGgKKyMKKyMgMjAwNC0wOC0xNAorIwkqIHJlbW92ZSBkY2gvZGNoMSBmcm9tIHJ4dnQgYmVjYXVzZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpbmNvbnNpc3RlbnRseQorIwkgIHdpdGggdGhlIGNvbW1vbiB1c2FnZSBvZiBiY2UvZWNoIC1URAorIwkqIHJlbW92ZSBraG9tZSBmcm9tIHZ0MjIwICh2dDIyMCdzIGhhdmUgbm8gaG9tZSBrZXkpIC1URAorIwkqIGFkZCByeHZ0K3BjZmtleXMgLVRECisjCisjIDIwMDQtMDgtMjEKKyMJKiBtb2RpZnkgc2V2ZXJhbCBlbnRyaWVzIHRvIGVuc3VyZSB4dGVybSBtb3VzZSBhbmQgY3Vyc29yIHZpc2liaWxpdHkKKyMJICBhcmUgcmVzZXQgaW4gcnMyIHN0cmluZzogIGh1cmQsIHB1dHR5LCBnbm9tZSwga29uc29sZS1iYXNlLCBtbHRlcm0sCisjCSAgRXRlcm0sIHNjcmVlbi4gIChUaGUgeHRlcm0gZW50cmllcyBhcmUgbGVmdCBhbG9uZSAtIG9sZCBvbmVzIGZvcgorIwkgIGNvbXBhdGliaWxpdHksIGFuZCB0aGUgbmV3IG9uZXMgZG8gbm90IHJlcXVpcmUgdGhpcyBjaGFuZ2UpIC1URAorIworIyAyMDA0LTA4LTI4CisjCSogYWRkIG1vcnBob3MgZW50cnkgLVBhdmVsIEZlZGluCisjCSogbW9kaWZ5IGFtaWdhLThiaXQgdG8gYWRkIGtob21lL2tlbmQva25wL2twcCAtUGF2ZWwgRmVkaW4KKyMJKiBjb3JyZWN0ZWQgXEVbNT9sIHRvIFxFWz81bCBpbiB2dDMyMCBlbnRyaWVzIC1URAorIworIyAyMDA0LTExLTIwCisjCSogdXBkYXRlIHdzdnQyNSBlbnRyeSAtVEQKKyMKKyMgMjAwNS0wMS0yOQorIwkqIHVwZGF0ZSBwYWlycyBmb3IgeHRlcm0tODhjb2xvciBhbmQgeHRlcm0tMjU2Y29sb3IgdG8gcmVmbGVjdCB0aGUKKyMJICBuY3Vyc2VzIGV4dGVuZGVkLWNvbG9yIHN1cHBvcnQgLVRECisjCisjIDIwMDUtMDItMjYKKyMJKiBtb2RpZnkgc2dyL3NncjAgaW4geHRlcm0tbmV3IHRvIGltcHJvdmUgdGdldGVudCdzIGRlcml2ZWQgIm1lIiAtVEQKKyMJKiBhZGQgYWl4dGVybS0xNmNvbG9yIHRvIGRlbW9uc3RyYXRlIDE2LWNvbG9yIGNhcGFiaWxpdHkgLVRECisjCisjIDIwMDUtMDQtMjMKKyMJKiBhZGQgbWVkaWEtY29weSB0byB2dDEwMCAtVEQKKyMJKiBjb3JyZWN0ZWQgYWNzYyBzdHJpbmcgZm9yIHZ0NTIgLVRECisjCisjIDIwMDUtMDQtMzAKKyMJKiBhZGQga1VQLCBrRE4gKHVzZXItZGVmaW5lZCBzaGlmdGVkIHVwL2Rvd24gYXJyb3cpIGRlZmluaXRpb25zIGZvcgorIwkgIHh0ZXJtLW5ldyAtVEQKKyMJKiBhZGQga1VQNSwga1VQNiwgZXRjLiwgZm9yIHh0ZXJtLW5ldyBhbmQgcnh2dCAtVEQKKyMKKyMgMjAwNS0wNS0wNworIwkqIHJlLWNvcnJlY3RlZCBhY3NjIHN0cmluZyBmb3IgdnQ1MiAtVEQKKyMKKyMgMjAwNS0wNS0yOAorIwkqIGNvcnJlY3RlZCBzdW4taWwgc2dyIHN0cmluZyB3aGljaCByZWZlcnJlZCB0byBib2xkIGFuZCB1bmRlcmxpbmUgLVRECisjCSogYWRkIHN1bi1jb2xvciBlbnRyeSAtVEQKKyMKKyMgMjAwNS0wNy0yMworIwkqIG1vZGlmeSBzZ3IwIGluIHNldmVyYWwgZW50cmllcyB0byByZXNldCBhbHRlcm5hdGUtY2hhcnNldCBhcyBpbiB0aGUKKyMJICBzZ3Igc3RyaW5nIC1URAorIwkqIG1vZGlmeSBzZ3Igc3RyaW5nIG9mIHByaXNtOSB0byBiZXR0ZXIgbWF0Y2ggdGhlIGluZGl2aWR1YWwKKyMJICBhdHRyaWJ1dGVzIC1URAorIworIyAyMDA1LTEwLTE1CisjCSogY29ycmVjdCBvcmRlciBvZiB1c2U9IGluIHJ4dnQtYmFzaWMgLVRECisjCisjIDIwMDUtMTAtMjYKKyMJKiB1c2Uga2luZC9rcmkgYXMgc2hpZnRlZCB1cC9kb3duIGN1cnNvciBrZXlzIGZvciB4dGVybS1uZXcgLVRECisjCisjIDIwMDUtMTEtMTIKKyMJKiBvdGhlciBtaW5vciBmaXhlcyB0byBjeWd3aW4gYmFzZWQgb24gdGFjayAtVEQKKyMJKiBjb3JyZWN0IHNtYWNzIGluIGN5Z3dpbiAocmVwb3J0IGJ5IEJhdXJ6aGFuIElzbWFndWxvdikuCisjCisjIDIwMDYtMDItMTgKKyMJKiBhZGQgbnN0ZXJtLTE2Y29sb3IgZW50cnkgLVRECisjCSogcmVtb3ZlIG5jdiBmbGFnIGZyb20geHRlcm0tMTZjb2xvciAtVEQKKyMJKiByZW1vdmUgc2V0Zi9zZXRiIGZyb20geHRlcm0tMjU2Y29sb3IgdG8gbWF0Y2ggeHRlcm0gIzIwOSAtVEQKKyMJKiB1cGRhdGUgbWx0ZXJtIGVudHJ5IHRvIDIuOS4yIC1URAorIworIyAyMDA2LTAyLTI1CisjCSogZml4ZXMgdG8gbWFrZSBuc3Rlcm0tMTZjb2xvciBtYXRjaCByZXBvcnQKKyMJICBieSBDaHJpc3RpYW4gRWJlcnQgLUFsYWluIEJlbmNoCisjCisjIDIwMDYtMDQtMjIKKyMJKiBhZGQgeHRlcm0rMjU2Y29sb3IgYnVpbGRpbmcgYmxvY2sgLVRECisjCSogYWRkIGdub21lLTI1NmNvbG9yLCBwdXR0eS0yNTZjb2xvciwgcnh2dC0yNTZjb2xvciAtVEQKKyMKKyMgMjAwNi0wNS0wNgorIwkqIGFkZCBocHRlcm0tY29sb3IgLVRECisjCisjIDIwMDYtMDYtMjQKKyMJKiBhZGQgeHRlcm0rcGNjMCwgeHRlcm0rcGNjMSwgeHRlcm0rcGNjMiwgeHRlcm0rcGNjMyAtVEQKKyMJKiBhZGQgZ25vbWUtZmM1IChwcm9tcHRlZCBieSBHZW5Ub28gIzEyMjU2NikgLVRECisjCSogcmVtb3ZlIG9ic29sZXRlL21pc2xlYWRpbmcgY29tbWVudHMgYWJvdXQga2NidCBvbiBMaW51eCAtQWxhaW4gQmVuY2gKKyMJKiBpbXByb3ZlIHh0ZXJtLTI1NmNvbG9yIGJ5IGNvbWJpbmluZyB0aGUgaWJtKzE2Y29sb3Igc2V0YWYvc2V0YWIKKyMJICBzdHJpbmdzIHdpdGggU0dSIDQ4LiAgVGhlIHNldGYvc2V0YiBzdHJpbmdzIGFsc28gYXJlIGNhbmNlbGxlZCBoZXJlCisjCSAgcmF0aGVyIHRoYW4gb21pdHRlZCBzbyBkZXJpdmVkIGVudHJpZXMgd2lsbCBjYW5jZWwgdGhvc2UgYWxzbyAtQWxhaW4KKyMJICBCZW5jaAorIworIyAyMDA2LTA3LTAxCisjCSogYWRkIHNvbWUgbm90ZXMgcmVnYXJkaW5nIGNvcHlyaWdodCB0byB0ZXJtaW5mby5zcmMgLVRECisjCSogdXNlIHJ4dnQrcGNma2V5cyBpbiBFdGVybSAtVEQKKyMJKiByZW1vdmUga20gYW5kIGZsYXNoIGZyb20gZ25vbWUsIEV0ZXJtIGFuZCByeHZ0IHNpbmNlIHRoZXkgZG8gbm90IHdvcmsKKyMJICBhcyBvbmUgd291bGQgZXhwZWN0IChrbSBzZW5kcyBFU0MgcmF0aGVyIHRoYW4gc2V0dGluZyB0aGUgOHRoIGJpdAorIwkgIG9mIHRoZSBrZXkpIC1URAorIwkqIGFkZC91c2UgYW5zaStlbnEsIHZ0MTAwK2VucSBhbmQgdnQxMDIrZW5xIC1URAorIwkqIGFkZCBrb25zb2xlLXNvbGFyaXMgLVRECisjCisjIDIwMDYtMDctMjIKKyMJKiB1cGRhdGUgeHRlcm0tc3VuIGFuZCB4dGVybS1zY28gZW50cmllcyB0byBtYXRjaCB4dGVybSAjMjE2IC1URAorIwkqIG1vZGlmeSBpczIvcnMyIHN0cmluZ3MgZm9yIHh0ZXJtLXI2IGFzIHBlciBmaXggaW4geHRlcm0gIzE0OCAtVEQKKyMJKiBtb2RpZnkgeHRlcm0tMjQgdG8gaW5oZXJpdCBmcm9tICJ4dGVybSIgLVRECisjCSogYWRkIHhpdGVybSBlbnRyeSAtVEQKKyMJKiBhZGQgcHV0dHktdnQxMDAgZW50cnkgLVRECisjCSogY29ycmVjdGVkIHNwZWxsaW5nIG9mIE1pY2hhZWwgQSBEb3JtYW4ncyBuYW1lLCBwcm9tcHRlZCBieQorIwkgIGh0dHA6Ly93d3cuYWR2b2dhdG8ub3JnL3BlcnNvbi9tZG9ybWFuL2RpYXJ5Lmh0bWwgLVRECisjCisjIDIwMDYtMDgtMDUKKyMJKiBhZGQgeHRlcm0rcGNmMCwgeHRlcm0rcGNmMiBmcm9tIHh0ZXJtICMyMTYgLVRECisjCSogdXBkYXRlIHh0ZXJtK3BjZmtleXMgdG8gbWF0Y2ggeHRlcm0gIzIxNiAtVEQKKyMKKyMgMjAwNi0wOC0xNworIwkqIG1ha2UgZGVzY3JpcHRpb25zIG9mIHh0ZXJtIGVudHJpZXMgY29uc2lzdGVudCB3aXRoIGl0cyB0ZXJtaW5mbyAtVEQKKyMKKyMgMjAwNi0wOC0yNgorIwkqIGFkZCB4ZmNlLCBtZ3QgLVRECisjCisjIDIwMDYtMDktMDIKKyMJKiBjb3JyZWN0IGFjc2Mgc3RyaW5nIGluIGt0ZXJtIC1URAorIworIyAyMDA2LTA5LTA5CisjCSogYWRkIGtvbiBlbnRyeSAtVEQKKyMJKiByZW1vdmUgaW52aXMgZnJvbSBsaW51eCBhbmQgcmVsYXRlZCBlbnRyaWVzLCBhZGQga2xvbmUrc2dyOCBmb3IgdGhvc2UKKyMJICB0aGF0IGltcGxlbWVudCB0aGUgZmVhdHVyZSAob3IgaGF2ZSBub3QgYmVlbiBzaG93biB0byBsYWNrIGl0KSAtVEQKKyMKKyMgMjAwNi0wOS0yMworIwkqIGFkZCBrYTIsIGtiMSwga2IzLCBrYzIgdG8gdnQyMjAta2V5cGFkIGFzIGFuIGV4dGVuc2lvbiAtVEQKKyMJKiBtaW5vciBpbXByb3ZlbWVudHMgdG8gcnh2dCtwY2ZrZXlzIC1URAorIworIyAyMDA2LTA5LTMwCisjCSogZml4IGEgZmV3IHR5cG9zIGluIGlmL3RoZW4vZWxzZSBleHByZXNzaW9ucyAtVEQKKyMKKyMgMjAwNi0xMC0wNworIwkqIGFkZCBzZXZlcmFsIEdOVSBTY3JlZW4gdmFyaWF0aW9ucyB3aXRoIDE2LSBhbmQgMjU2LWNvbG9ycywgYW5kCisjCSAgc3RhdHVzIGxpbmUgKEFsYWluIEJlbmNoKS4KKyMKKyMgMjAwNy0wMy0wMworIwkqIGFkZCBOZXdidXJ5IERhdGEgZW50cmllcyAoSmVhbi1DaGFybGVzIEJpbGxhdWQpLgorIworIyAyMDA3LTA2LTEwCisjCSogY29ycmVjdGVkIHh0ZXJtK3BjZjIgbW9kaWZpZXJzIGZvciBGMS1GNCwgbWF0Y2ggeHRlcm0gIzIyNiAtVEQKKyMKKyMgMjAwNy0wNy0xNAorIwkqIHJlc3RvcmUgc2VjdGlvbiBvZiBwcmUtbmN1cnNlcy00LjIgY2hhbmdlbG9nIHRvIGZpeCBhdHRyaWJ1dGlvbiAtVEQKKyMJKiBhZGQga29uc29sZS0yNTZjb2xvciBlbnRyeSAtVEQKKyMKKyMgMjAwNy0wOC0xOAorIwkqIGFkZCA5dGVybSBlbnRyeSAocmVxdWVzdCBieSBKdWhhcGVra2EgVG9sdmFuZW4pIC1URAorIworIyAyMDA3LTEwLTEzCisjCSogY29ycmVjdCBrSUMgaW4gcnh2dCtwY2ZrZXlzIChwcm9tcHRlZCBieSBEZWJpYW4gIzQ0NjQ0NCkgLVRECisjCSogYWRkIHNoaWZ0LWNvbnRyb2wtIGFuZCBjb250cm9sLW1vZGlmaWVkIGtleXMgZm9yIHJ4dnQgZWRpdGluZworIwkgIGtleXBhZCAtVEQKKyMJKiB1cGRhdGUgbWx0ZXJtIGVudHJ5IHRvIDIuOS4zIC1URAorIwkqIGFkZCBtbHRlcm0rcGNma2V5cyAtVEQKKyMKKyMgMjAwNy0xMC0yMAorIwkqIG1vdmUga0xGVCwga1JJVCwga2luZCBhbmQga3JpIGNhcGFiaWxpdGllcyBmcm9tIHh0ZXJtLW5ldyB0bworIwkgIHh0ZXJtK3BjYzAsIGV0Yy4sIHRvIG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgYnVpbGRpbmcgYmxvY2tzIHJlZmxlY3QKKyMJICB4dGVybSdzIGNhcGFiaWxpdGllcyAtVEQKKyMJKiBhZGQgbXJ4dnQgZW50cnkgLVRECisjCSogYWRkIHh0ZXJtK3I2ZjIsIHVzZSBpbiBtbHRlcm0gYW5kIG1yeHZ0IGVudHJpZXMgLVRECisjCisjIDIwMDctMTEtMDMKKyMJKiBjb3JyZWN0IGFjc2Mgc3RyaW5ncyBmb3IgaDE5IGFuZCB6MTAwIChCZW5qYW1pbiBTaXR0bGVyKQorIworIyAyMDA3LTExLTExCisjCSogdXNlIHh0ZXJtLXhmODYtdjQ0IGZvciAieHRlcm0teGZyZWU4NiIsIHJlZmxlY3RpbmcgY2hhbmdlcyB0bworIwkgIHh0ZXJtIHN0YXJ0aW5nIHdpdGggcGF0Y2ggIzIxNiAtVEQKKyMJKiBtYWtlIGxlZ2FjeSB4dGVybSBlbnRyaWVzIHN1Y2ggYXMgeHRlcm0tMjQgaW5oZXJpdCBmcm9tIHh0ZXJtLW9sZCwKKyMJICB0byBtYXRjaCB4dGVybSAjMjMwIC1URAorIwkqIGV4dGVuZCB4dGVybStwY2NYIGVudHJpZXMgdG8gbWF0Y2ggeHRlcm0gIzIzMCAtVEQKKyMJKiBhZGQgeHRlcm0rYXBwLCB4dGVybStub2FwcCwgZnJvbSB4dGVybSAjMjMwIC1URAorIwkqIGFkZC91c2UgeHRlcm0rcGNlMiBmcm9tIHh0ZXJtICMyMzAsIGluIHh0ZXJtK3BjZmtleXMgLVRECisjCisjIDIwMDgtMDQtMTkKKyMJKiBhZGQgc2NyZWVuLnJ4dnQgLVRECisjCisjIDIwMDgtMDQtMjgKKyMJKiBhZGQgc2NyZWVuK2ZrZXlzIChwcm9tcHRlZCBieSBEZWJpYW4gIyA0NzgwOTQpIC1URAorIworIyAyMDA4LTA2LTI4CisjCSogYWRkIHNjcmVlbi5tbHRlcm0gLVRECisjCSogaW1wcm92ZSBtbHRlcm0gYW5kIG1sdGVybStwY2ZrZXlzIC1URAorIworIyAyMDA4LTA4LTIzCisjCSogYWRkIEV0ZXJtLTI1NmNvbG9yLCBFdGVybS04OGNvbG9yIC1URAorIwkqIGFkZCByeHZ0LTg4Y29sb3IgLVRECisjCisjIDIwMDgtMTAtMTIKKyMJKiBhZGQgdGVyYXRlcm00LjU5IGVudHJ5LCB1c2UgdGhhdCBhcyBwcmltYXJ5IHRlcmF0ZXJtIGVudHJ5LCByZW5hbWUKKyMJICBvcmlnaW5hbCB0byB0ZXJhdGVybTIuMyAtVEQKKyMJKiB1cGRhdGUgImdub21lIiB0byAyLjIyLjMgLVRECisjCSogdXBkYXRlICJrb25zb2xlIiB0byAxLjYuNiAtVEQKKyMJKiBhZGQgImF0ZXJtIiAtVEQKKyMJKiBhZGQgImxpbnV4Mi42LjI2IiAtVEQKKyMKKyMgVGhlIGZvbGxvd2luZyBzZXRzIGVkaXQgbW9kZXMgZm9yIEdOVSBFTUFDUy4KKyMgTG9jYWwgVmFyaWFibGVzOgorIyBmaWxsLXByZWZpeDoiXHQiCisjIGZpbGwtY29sdW1uOjc1CisjIGNvbW1lbnQtY29sdW1uOjAKKyMgY29tbWVudC1zdGFydC1za2lwOiJeIysiCisjIGNvbW1lbnQtc3RhcnQ6IiMgIgorIyBjb21waWxlLWNvbW1hbmQ6InRpYyAtYyB0ZXJtaW5mby5tYXN0ZXIiCisjIEVuZDoKKyMjIyMjIyMjIFNIQU5USUghICBTSEFOVElIISAgU0hBTlRJSCEKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21rLTB0aC5hd2sgYi9uY3Vyc2VzLTUuNy9tay0wdGguYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTFjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tay0wdGguYXdrCkBAIC0wLDAgKzEsMTA5IEBACisjICRJZDogbWstMHRoLmF3ayx2IDEuMTcgMjAwNS8wMS8yMiAxNjozMTo0MCB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk2LDE5OTcKKyMKKyMgR2VuZXJhdGUgbGlzdCBvZiBzb3VyY2VzIGZvciBhIGxpYnJhcnksIHRvZ2V0aGVyIHdpdGggbGludC9saW50bGliIHJ1bGVzCisjCisjIFZhcmlhYmxlczoKKyMJbGlibmFtZSAobGlicmFyeSBuYW1lLCBlLmcuLCAibmN1cnNlcyIsICJwYW5lbCIsICJmb3JtcyIsICJtZW51cyIpCisjCXN1YnNldHMgKGlzIHVzZWQgaGVyZSB0byBkZWNpZGUgaWYgd2lkZS1jaGFyYWN0ZXIgY29kZSBpcyB1c2VkKQorIworQkVHSU4JeworCQl1c2luZyA9IDA7CisJCWZvdW5kID0gMDsKKwl9CisJIS9eW0AjXS8geworCQlpZiAodXNpbmcgPT0gMCkKKwkJeworCQkJcHJpbnQgICIiCisJCQlwcmludCAgIiMgZ2VuZXJhdGVkIGJ5IG1rLTB0aC5hd2siCisJCQlwcmludGYgIiMgICBsaWJuYW1lOiAgICAlc1xuIiwgbGlibmFtZQorCQkJcHJpbnRmICIjICAgc3Vic2V0czogICAgJXNcbiIsIHN1YnNldHMKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIuU1VGRklYRVM6IC5jIC5jYyAuaCAuaSAuaWkiCisJCQlwcmludCAgIi5jLmkgOiIKKwkJCXByaW50ZiAiXHQkKENQUCkgJChDUFBGTEFHUykgJDwgPiRAXG4iCisJCQlwcmludCAgIi5jYy5paSA6IgorCQkJcHJpbnRmICJcdCQoQ1BQKSAkKENQUEZMQUdTKSAkPCA+JEBcbiIKKwkJCXByaW50ICAiLmguaSA6IgorCQkJcHJpbnRmICJcdCQoQ1BQKSAkKENQUEZMQUdTKSAkPCA+JEBcbiIKKwkJCXByaW50ICAiIgorCQkJdXNpbmcgPSAxOworCQl9CisJCWlmICggJDAgIT0gIiIgJiYgJDEgIT0gImxpbmtfdGVzdCIgKQorCQl7CisJCQlpZiAoIGZvdW5kID09IDAgKQorCQkJeworCQkJCWlmICggc3Vic2V0cyB+IC93aWRlY2hhci8gKQorCQkJCQl3aWRlY2hhciA9IDE7CisJCQkJZWxzZQorCQkJCQl3aWRlY2hhciA9IDA7CisJCQkJcHJpbnRmICJDX1NSQyA9IgorCQkJCWlmICggJDIgPT0gImxpYiIgKQorCQkJCQlmb3VuZCA9IDEKKwkJCQllbHNlCisJCQkJCWZvdW5kID0gMgorCQkJfQorCQkJaWYgKCBsaWJuYW1lID09ICJjKysiIHx8IGxpYm5hbWUgPT0gImMrK3ciICkgeworCQkJCXByaW50ZiAiIFxcXG5cdCVzLyVzLmNjIiwgJDMsICQxCisJCQl9IGVsc2UgaWYgKCB3aWRlY2hhciA9PSAxIHx8ICQzICE9ICIkKHdpZGUpIiApIHsKKwkJCQlwcmludGYgIiBcXFxuXHQlcy8lcy5jIiwgJDMsICQxCisJCQl9CisJCX0KKwl9CitFTkQJeworCQlwcmludCAgIiIKKwkJaWYgKCBmb3VuZCA9PSAxICkKKwkJeworCQkJcHJpbnQgICIiCisJCQlwcmludGYgIiMgUHJvZHVjaW5nIGxsaWItbCVzIGlzIHRpbWUtY29uc3VtaW5nLCBzbyB0aGVyZSdzIG5vIGRpcmVjdC1kZXBlbmRlbmN5IGZvclxuIiwgbGlibmFtZQorCQkJcHJpbnQgICIjIGl0IGluIHRoZSBsaW50bGliIHJ1bGUuICBXZSdsbCBvbmx5IHJlbW92ZSBpbiB0aGUgY2xlYW5lc3Qgc2V0dXAuIgorCQkJcHJpbnQgICJjbGVhbiA6OiIKKwkJCXByaW50ZiAiXHRybSAtZiBsbGliLWwlcy4qXG4iLCBsaWJuYW1lCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAicmVhbGNsZWFuIDo6IgorCQkJcHJpbnRmICJcdHJtIC1mIGxsaWItbCVzXG4iLCBsaWJuYW1lCisJCQlwcmludCAgIiIKKwkJCXByaW50ZiAibGxpYi1sJXMgOiAkKENfU1JDKVxuIiwgbGlibmFtZQorCQkJcHJpbnRmICJcdGNwcm90byAtYSAtbCAtRE5DVVJTRVNfRU5BQkxFX1NUREJPT0xfSD0wIC1ETElOVCAkKENQUEZMQUdTKSAkKENfU1JDKSA+JEBcbiIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJsaW50bGliIDoiCisJCQlwcmludGYgIlx0c2ggJChzcmNkaXIpLy4uL21pc2MvbWFrZWxsaWIgJXMgJChDUFBGTEFHUykiLCBsaWJuYW1lCisJCQlwcmludCAiIgorCQkJcHJpbnQgImxpbnQgOiIKKwkJCXByaW50ICJcdCQoTElOVCkgJChMSU5UX09QVFMpICQoQ1BQRkxBR1MpICQoQ19TUkMpICQoTElOVF9MSUJTKSIKKwkJfQorCQllbHNlCisJCXsKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJsaW50bGliIDoiCisJCQlwcmludCAgIlx0QGVjaG8gbm8gYWN0aW9uIG5lZWRlZCIKKwkJfQorCX0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21rLTFzdC5hd2sgYi9uY3Vyc2VzLTUuNy9tay0xc3QuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjU0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tay0xc3QuYXdrCkBAIC0wLDAgKzEsNDc0IEBACisjICRJZDogbWstMXN0LmF3ayx2IDEuNzggMjAwNy8wMy8yNCAyMjoxMDo1NSB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5CisjCisjIEdlbmVyYXRlIGxpc3Qgb2Ygb2JqZWN0cyBmb3IgYSBnaXZlbiBtb2RlbCBsaWJyYXJ5CisjIFZhcmlhYmxlczoKKyMJbmFtZQkJICAobGlicmFyeSBuYW1lLCBlLmcuLCAibmN1cnNlcyIsICJwYW5lbCIsICJmb3JtcyIsICJtZW51cyIpCisjCXRyYWNlcwkJICAoImFsbCIgb3IgIkRFQlVHIiwgdG8gY29udHJvbCB3aGV0aGVyIHRyYWNpbmcgaXMgY29tcGlsZWQgaW4pCisjCU1PREVMCQkgIChlLmcuLCAiREVCVUciLCB1cHBlcmNhc2U7IHRvdXBwZXIgaXMgbm90IHBvcnRhYmxlKQorIwltb2RlbAkJICAoZGlyZWN0b3J5IGludG8gd2hpY2ggd2UgY29tcGlsZSwgZS5nLiwgIm9iaiIpCisjCXByZWZpeAkJICAoZS5nLiwgImxpYiIsIGZvciBVbml4LXN0eWxlIGxpYnJhcmllcykKKyMJc3VmZml4CQkgIChlLmcuLCAiX2cuYSIsIGZvciBkZWJ1ZyBsaWJyYXJpZXMpCisjCXN1YnNldAkJICAoIm5vbmUiLCAiYmFzZSIsICJiYXNlK2V4dF9mdW5jcyIgb3IgInRlcm1saWIiLCBldGMuKQorIwlTaGxpYlZlcgkgICgicmVsIiwgImFiaSIgb3IgImF1dG8iLCB0byBhdWdtZW50IERvTGlua3MgdmFyaWFibGUpCisjCVNobGliVmVySW5maXggKCJ5ZXMiIG9yICJubyIsIGRldGVybWluZXMgbG9jYXRpb24gb2YgdmVyc2lvbiAjKQorIyAgIFRlcm1saWJSb290ICAgKCJ0aW5mbyIgb3Igb3RoZXIgcm9vdCBmb3IgbGlidGVybS5zbykKKyMgICBUZXJtbGliU3VmZml4ICgiLnNvIiBvciBvdGhlciBzdWZmaXggZm9yIGxpYnRlcm0uc28pCisjCVJlTGluawkJICAoInllcyIsIG9yICJubyIsIGZsYWcgdG8gcmVidWlsZCBzaGFyZWQgbGlicyBvbiBpbnN0YWxsKQorIwlEb0xpbmtzCQkgICgieWVzIiwgInJldmVyc2UiIG9yICJubyIsIGZsYWcgdG8gYWRkIHN5bWJvbGljIGxpbmtzKQorIwlybVNvTG9jcwkgICgieWVzIiBvciAibm8iLCBmbGFnIHRvIGFkZCBleHRyYSBjbGVhbiB0YXJnZXQpCisjCWxkY29uZmlnCSAgKHBhdGggZm9yIHRoaXMgdG9vbCwgaWYgdXNlZCkKKyMJb3ZlcndyaXRlCSAgKCJ5ZXMiIG9yICJubyIsIGZsYWcgdG8gYWRkIGxpbmsgdG8gbGliY3Vyc2VzLmEKKyMJZGVwZW5kCQkgIChvcHRpb25hbCBkZXBlbmRlbmNpZXMgZm9yIGFsbCBvYmplY3RzLCBlLmcsIG5jdXJzZXNfY2ZnLmgpCisjCWhvc3QJCSAgKGNyb3NzLWNvbXBpbGUgaG9zdCwgaWYgYW55KQorIworIyBOb3RlczoKKyMJQ0xJWHMgbmF3ayBkb2VzIG5vdCBsaWtlIHVuZGVyc2NvcmVzIGluIGNvbW1hbmQtbGluZSB2YXJpYWJsZSBuYW1lcy4KKyMJTWl4ZWQtY2FzZSB2YXJpYWJsZSBuYW1lcyBhcmUgb2suCisjCUhQL1VYIHJlcXVpcmVzIHNoYXJlZCBsaWJyYXJpZXMgdG8gaGF2ZSBleGVjdXRhYmxlIHBlcm1pc3Npb25zLgorIworZnVuY3Rpb24gaXNfdGljbGliKCkgeworCQlyZXR1cm4gKCBzdWJzZXQgfiAvXnRpY2xpYiQvICk7CisJfQorZnVuY3Rpb24gaXNfdGVybWxpYigpIHsKKwkJcmV0dXJuICggc3Vic2V0IH4gL14odGljbGliXCspP3Rlcm1saWIoXCtleHRfdGluZm8pPyQvICk7CisJfQorIyBzZWUgbGliX25hbWUKK2Z1bmN0aW9uIGxpYl9uYW1lX29mKGFfbmFtZSkgeworCQlyZXR1cm4gc3ByaW50ZigiJXMlcyVzIiwgcHJlZml4LCBhX25hbWUsIHN1ZmZpeCkKKwl9CisjIHNlZSBpbXBfbmFtZQorZnVuY3Rpb24gaW1wX25hbWVfb2YoYV9uYW1lKSB7CisJCWlmIChTaGxpYlZlckluZml4ID09ICJjeWdkbGwiKSB7CisJCQlyZXN1bHQgPSBzcHJpbnRmKCIlcyVzJXMuYSIsIHByZWZpeCwgYV9uYW1lLCBzdWZmaXgpOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gIiI7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisjIHNlZSBhYmlfbmFtZQorZnVuY3Rpb24gYWJpX25hbWVfb2YoYV9uYW1lKSB7CisJCWlmIChTaGxpYlZlckluZml4ID09ICJjeWdkbGwiKSB7CisJCQlyZXN1bHQgPSBzcHJpbnRmKCIlcyVzJChBQklfVkVSU0lPTiklcyIsICJjeWciLCBhX25hbWUsIHN1ZmZpeCk7CisJCX0gZWxzZSBpZiAoU2hsaWJWZXJJbmZpeCA9PSAieWVzIikgeworCQkJcmVzdWx0ID0gc3ByaW50ZigiJXMlcy4kKEFCSV9WRVJTSU9OKSVzIiwgcHJlZml4LCBhX25hbWUsIHN1ZmZpeCk7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBzcHJpbnRmKCIlcy4kKEFCSV9WRVJTSU9OKSIsIGxpYl9uYW1lX29mKGFfbmFtZSkpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorIyBzZWUgcmVsX25hbWUKK2Z1bmN0aW9uIHJlbF9uYW1lX29mKGFfbmFtZSkgeworCQlpZiAoU2hsaWJWZXJJbmZpeCA9PSAiY3lnZGxsIikgeworCQkJcmVzdWx0ID0gc3ByaW50ZigiJXMlcyQoUkVMX1ZFUlNJT04pJXMiLCAiY3lnIiwgYV9uYW1lLCBzdWZmaXgpOworCQl9IGVsc2UgaWYgKFNobGliVmVySW5maXggPT0gInllcyIpIHsKKwkJCXJlc3VsdCA9IHNwcmludGYoIiVzJXMuJChSRUxfVkVSU0lPTiklcyIsIHByZWZpeCwgYV9uYW1lLCBzdWZmaXgpOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gc3ByaW50ZigiJXMuJChSRUxfVkVSU0lPTikiLCBsaWJfbmFtZV9vZihhX25hbWUpKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKyMgc2VlIGVuZF9uYW1lCitmdW5jdGlvbiBlbmRfbmFtZV9vZihhX25hbWUpIHsKKwkJaWYgKCBNT0RFTCAhPSAiU0hBUkVEIiApIHsKKwkJCXJlc3VsdCA9IGxpYl9uYW1lX29mKGFfbmFtZSk7CisJCX0gZWxzZSBpZiAoIERvTGlua3MgPT0gInJldmVyc2UiKSB7CisJCQlyZXN1bHQgPSBsaWJfbmFtZV9vZihhX25hbWUpOworCQl9IGVsc2UgeworCQkJaWYgKCBTaGxpYlZlciA9PSAicmVsIiApIHsKKwkJCQlyZXN1bHQgPSByZWxfbmFtZV9vZihhX25hbWUpOworCQkJfSBlbHNlIGlmICggU2hsaWJWZXIgPT0gImFiaSIgfHwgU2hsaWJWZXIgPT0gImN5Z2RsbCIgKSB7CisJCQkJcmVzdWx0ID0gYWJpX25hbWVfb2YoYV9uYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJcmVzdWx0ID0gbGliX25hbWVfb2YoYV9uYW1lKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmVzdWx0CisJfQorZnVuY3Rpb24gc3ltbGluayhzcmMsZHN0KSB7CisJCWlmICggc3JjICE9IGRzdCApIHsKKwkJCXByaW50ZiAicm0gLWYgJXM7ICIsIGRzdAorCQkJcHJpbnRmICIkKExOX1MpICVzICVzOyAiLCBzcmMsIGRzdAorCQl9CisJfQorZnVuY3Rpb24gcm1saW5rKGRpcmVjdG9yeSwgZHN0KSB7CisJCXByaW50ZiAiXHQtcm0gLWYgJXMvJXNcbiIsIGRpcmVjdG9yeSwgZHN0CisJfQorZnVuY3Rpb24gcmVtb3ZlbGlua3MoZGlyZWN0b3J5KSB7CisJCXJtbGluayhkaXJlY3RvcnksIGVuZF9uYW1lKTsKKwkJaWYgKCBEb0xpbmtzID09ICJyZXZlcnNlIiApIHsKKwkJCWlmICggU2hsaWJWZXIgPT0gInJlbCIgKSB7CisJCQkJcm1saW5rKGRpcmVjdG9yeSwgYWJpX25hbWUpOworCQkJCXJtbGluayhkaXJlY3RvcnksIHJlbF9uYW1lKTsKKwkJCX0gZWxzZSBpZiAoIFNobGliVmVyID09ICJhYmkiICkgeworCQkJCXJtbGluayhkaXJlY3RvcnksIGFiaV9uYW1lKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICggU2hsaWJWZXIgPT0gInJlbCIgKSB7CisJCQkJcm1saW5rKGRpcmVjdG9yeSwgYWJpX25hbWUpOworCQkJCXJtbGluayhkaXJlY3RvcnksIGxpYl9uYW1lKTsKKwkJCX0gZWxzZSBpZiAoIFNobGliVmVyID09ICJhYmkiICkgeworCQkJCXJtbGluayhkaXJlY3RvcnksIGxpYl9uYW1lKTsKKwkJCX0KKwkJfQorCX0KK2Z1bmN0aW9uIG1ha2Vfc2hsaWIob2Jqcywgc2hsaWJfbGlzdCkgeworCQlwcmludGYgIlx0JChNS19TSEFSRURfTElCKSAkKCVzX09CSlMpICQoJXMpICQoTERGTEFHUylcbiIsIG9ianMsIHNobGliX2xpc3QKKwl9CitmdW5jdGlvbiBzaGFyZWRsaW5rcyhkaXJlY3RvcnkpIHsKKwkJaWYgKCBTaGxpYlZlciAhPSAiYXV0byIgJiYgU2hsaWJWZXIgIT0gImN5Z2RsbCIgKSB7CisJCQlwcmludGYgIlx0Y2QgJXMgJiYgKCIsIGRpcmVjdG9yeQorCQkJaWYgKCBEb0xpbmtzID09ICJyZXZlcnNlIiApIHsKKwkJCQlpZiAoIFNobGliVmVyID09ICJyZWwiICkgeworCQkJCQlzeW1saW5rKGxpYl9uYW1lLCBhYmlfbmFtZSk7CisJCQkJCXN5bWxpbmsoYWJpX25hbWUsIHJlbF9uYW1lKTsKKwkJCQl9IGVsc2UgaWYgKCBTaGxpYlZlciA9PSAiYWJpIiApIHsKKwkJCQkJc3ltbGluayhsaWJfbmFtZSwgYWJpX25hbWUpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCBTaGxpYlZlciA9PSAicmVsIiApIHsKKwkJCQkJc3ltbGluayhyZWxfbmFtZSwgYWJpX25hbWUpOworCQkJCQlzeW1saW5rKGFiaV9uYW1lLCBsaWJfbmFtZSk7CisJCQkJfSBlbHNlIGlmICggU2hsaWJWZXIgPT0gImFiaSIgKSB7CisJCQkJCXN5bWxpbmsoYWJpX25hbWUsIGxpYl9uYW1lKTsKKwkJCQl9CisJCQl9CisJCQlwcmludGYgIilcbiIKKwkJfQorCX0KKyMgdGVybWxpYiBtYXkgYmUgbmFtZWQgZXhwbGljaXRseSB2aWEgIi0td2l0aC10ZXJtbGliPVhYWCIsIHdoaWNoIG92ZXJyaWRlcworIyBhbnkgc3VmZml4LiAgVGVtcG9yYXJpbHkgb3ZlcnJpZGUgInN1ZmZpeCIgdG8gYWNjb3VudCBmb3IgdGhpcy4KK2Z1bmN0aW9uIHRlcm1saWJfZW5kX29mKCkgeworCXRlcm1saWJfc2F2ZV9zdWZmaXggPSBzdWZmaXg7CisJc3VmZml4ID0gVGVybWxpYlN1ZmZpeDsKKwl0ZXJtbGliX3RlbXBfcmVzdWx0ID0gZW5kX25hbWVfb2YoVGVybWxpYlJvb3QpOworCXN1ZmZpeCA9IHRlcm1saWJfc2F2ZV9zdWZmaXg7CisJcmV0dXJuIHRlcm1saWJfdGVtcF9yZXN1bHQ7Cit9CitmdW5jdGlvbiBzaGxpYl9idWlsZChkaXJlY3RvcnkpIHsKKwkJZHN0X2xpYnMgPSBzcHJpbnRmKCIlcy8lcyIsIGRpcmVjdG9yeSwgZW5kX25hbWUpOworCQlwcmludGYgIiVzIDogXFxcbiIsIGRzdF9saWJzCisJCXByaW50ZiAiXHRcdCVzIFxcXG4iLCBkaXJlY3RvcnkKKwkJaWYgKHN1YnNldCB+IC9eYmFzZS8gfHwgc3Vic2V0ID09ICJ0aWNsaWIiICkgeworCQkJc2F2ZV9zdWZmaXggPSBzdWZmaXgKKwkJCXN1YigvXlteLl1cLi8sIi4iLHN1ZmZpeCkKKwkJCWlmIChkaXJlY3RvcnkgIT0gIi4uL2xpYiIpIHsKKwkJCQlwcmludGYgIlx0XHQlcy8lcyBcXFxuIiwgIi4uL2xpYiIsIHRlcm1saWJfZW5kX29mKCk7CisJCQl9CisJCQlwcmludGYgIlx0XHQlcy8lcyBcXFxuIiwgZGlyZWN0b3J5LCB0ZXJtbGliX2VuZF9vZigpOworCQkJc3VmZml4ID0gc2F2ZV9zdWZmaXgKKwkJfQorCQlwcmludGYgIlx0XHQkKCVzX09CSlMpXG4iLCBPQkpTCisJCXByaW50ZiAiXHRAZWNobyBsaW5raW5nICRAXG4iCisJCWlmICggaXNfdGljbGliKCkgKSB7CisJCQltYWtlX3NobGliKE9CSlMsICJUSUNTX0xJU1QiKQorCQl9IGVsc2UgaWYgKCBpc190ZXJtbGliKCkgKSB7CisJCQltYWtlX3NobGliKE9CSlMsICJUSU5GT19MSVNUIikKKwkJfSBlbHNlIHsKKwkJCW1ha2Vfc2hsaWIoT0JKUywgIlNITElCX0xJU1QiKQorCQl9CisJCXNoYXJlZGxpbmtzKGRpcmVjdG9yeSkKKwl9CitmdW5jdGlvbiBzaGxpYl9pbnN0YWxsKGRpcmVjdG9yeSkgeworCQlzcmNfbGliMSA9IHNwcmludGYoIi4uL2xpYi8lcyIsIGVuZF9uYW1lKTsKKwkJZHN0X2xpYjEgPSBzcHJpbnRmKCIlcy8lcyIsIGRpcmVjdG9yeSwgZW5kX25hbWUpOworCQlwcmludGYgIiVzIDogXFxcbiIsIGRzdF9saWIxCisJCXByaW50ZiAiXHRcdCVzIFxcXG4iLCBkaXJlY3RvcnkKKwkJcHJpbnRmICJcdFx0JXNcbiIsIHNyY19saWIxCisJCXByaW50ZiAiXHRAZWNobyBpbnN0YWxsaW5nICRAXG4iCisJCXByaW50ZiAiXHQkKElOU1RBTExfTElCKSAlcyAlc1xuIiwgc3JjX2xpYjEsIGRzdF9saWIxOworCQlzaGFyZWRsaW5rcyhkaXJlY3RvcnkpCisJfQorZnVuY3Rpb24gaW5zdGFsbF9kbGwoZGlyZWN0b3J5LGZpbGVuYW1lKSB7CisJCXNyY19uYW1lID0gc3ByaW50ZigiLi4vbGliLyVzIiwgZmlsZW5hbWUpOworCQlkc3RfbmFtZSA9IHNwcmludGYoIiQoREVTVERJUiklcy8lcyIsIGRpcmVjdG9yeSwgZmlsZW5hbWUpOworCQlwcmludGYgIlx0QGVjaG8gaW5zdGFsbGluZyAlcyBhcyAlc1xuIiwgc3JjX25hbWUsIGRzdF9uYW1lCisJCWlmICggZGlyZWN0b3J5ID09ICIkKGJpbmRpcikiICkgeworCQkJcHJvZ3JhbSA9ICIkKElOU1RBTEwpIC1tIDc1NSI7CisJCX0gZWxzZSB7CisJCQlwcm9ncmFtID0gIiQoSU5TVEFMTF9MSUIpIjsKKwkJfQorCQlwcmludGYgIlx0JXMgJXMgJXNcbiIsIHByb2dyYW0sIHNyY19uYW1lLCBkc3RfbmFtZQorCX0KK0JFR0lOCXsKKwkJZm91bmQgPSAwCisJCXVzaW5nID0gMAorCX0KKwkvXkAvIHsKKwkJdXNpbmcgPSAwCisJCWlmIChzdWJzZXQgPT0gIm5vbmUiKSB7CisJCQl1c2luZyA9IDEKKwkJfSBlbHNlIGlmIChpbmRleChzdWJzZXQsJDIpID4gMCkgeworCQkJaWYgKHVzaW5nID09IDApIHsKKwkJCQlpZiAoZm91bmQgPT0gMCkgeworCQkJCQlwcmludCAgIiIKKwkJCQkJcHJpbnRmICIjIGdlbmVyYXRlZCBieSBtay0xc3QuYXdrIChzdWJzZXQ9JXMpXG4iLCBzdWJzZXQKKwkJCQkJcHJpbnRmICIjICBuYW1lOiAgICAgICAgICAlc1xuIiwgbmFtZSAKKwkJCQkJcHJpbnRmICIjICB0cmFjZXM6ICAgICAgICAlc1xuIiwgdHJhY2VzIAorCQkJCQlwcmludGYgIiMgIE1PREVMOiAgICAgICAgICVzXG4iLCBNT0RFTCAKKwkJCQkJcHJpbnRmICIjICBtb2RlbDogICAgICAgICAlc1xuIiwgbW9kZWwgCisJCQkJCXByaW50ZiAiIyAgcHJlZml4OiAgICAgICAgJXNcbiIsIHByZWZpeCAKKwkJCQkJcHJpbnRmICIjICBzdWZmaXg6ICAgICAgICAlc1xuIiwgc3VmZml4IAorCQkJCQlwcmludGYgIiMgIHN1YnNldDogICAgICAgICVzXG4iLCBzdWJzZXQgCisJCQkJCXByaW50ZiAiIyAgU2hsaWJWZXI6ICAgICAgJXNcbiIsIFNobGliVmVyIAorCQkJCQlwcmludGYgIiMgIFNobGliVmVySW5maXg6ICVzXG4iLCBTaGxpYlZlckluZml4IAorCQkJCQlwcmludGYgIiMgIFRlcm1saWJSb290OiAgICVzXG4iLCBUZXJtbGliUm9vdCAKKwkJCQkJcHJpbnRmICIjICBUZXJtbGliU3VmZml4OiAlc1xuIiwgVGVybWxpYlN1ZmZpeCAKKwkJCQkJcHJpbnRmICIjICBSZUxpbms6ICAgICAgICAlc1xuIiwgUmVMaW5rIAorCQkJCQlwcmludGYgIiMgIERvTGlua3M6ICAgICAgICVzXG4iLCBEb0xpbmtzIAorCQkJCQlwcmludGYgIiMgIHJtU29Mb2NzOiAgICAgICVzXG4iLCBybVNvTG9jcyAKKwkJCQkJcHJpbnRmICIjICBsZGNvbmZpZzogICAgICAlc1xuIiwgbGRjb25maWcgCisJCQkJCXByaW50ZiAiIyAgb3ZlcndyaXRlOiAgICAgJXNcbiIsIG92ZXJ3cml0ZSAKKwkJCQkJcHJpbnRmICIjICBkZXBlbmQ6ICAgICAgICAlc1xuIiwgZGVwZW5kIAorCQkJCQlwcmludGYgIiMgIGhvc3Q6ICAgICAgICAgICVzXG4iLCBob3N0IAorCQkJCQlwcmludCAgIiIKKwkJCQl9CisJCQkJdXNpbmcgPSAxCisJCQl9CisJCQlpZiAoIGlzX3RpY2xpYigpICkgeworCQkJCU9CSlMgID0gTU9ERUwgIl9QIgorCQkJfSBlbHNlIGlmICggaXNfdGVybWxpYigpICkgeworCQkJCU9CSlMgID0gTU9ERUwgIl9UIgorCQkJfSBlbHNlIHsKKwkJCQlPQkpTICA9IE1PREVMCisJCQl9CisJCX0KKwl9CisJL15bQCNdLyB7CisJCW5leHQKKwl9CisJJDEgfiAvdHJhY2UvIHsKKwkJaWYgKHRyYWNlcyAhPSAiYWxsIiAmJiB0cmFjZXMgIT0gTU9ERUwgJiYgJDEgIT0gImxpYl90cmFjZSIpCisJCQluZXh0CisJfQorCXsKKwkJaWYgKHVzaW5nIFwKKwkJICYmICggJDEgIT0gImxpbmtfdGVzdCIgKSBcCisJCSAmJiAoICQyID09ICJsaWIiIFwKKwkJICAgfHwgJDIgPT0gInByb2dzIiBcCisJCSAgIHx8ICQyID09ICJjKysiIFwKKwkJICAgfHwgJDIgPT0gInRhY2siICkpCisJCXsKKwkJCWlmICggZm91bmQgPT0gMCApCisJCQl7CisJCQkJcHJpbnRmICIlc19PQkpTID0iLCBPQkpTCisJCQkJaWYgKCAkMiA9PSAibGliIiApCisJCQkJCWZvdW5kID0gMQorCQkJCWVsc2UKKwkJCQkJZm91bmQgPSAyCisJCQl9CisJCQlwcmludGYgIiBcXFxuXHQuLi8lcy8lcyRvIiwgbW9kZWwsICQxCisJCX0KKwl9CitFTkQJeworCQlwcmludCAgIiIKKwkJaWYgKCBmb3VuZCAhPSAwICkKKwkJeworCQkJcHJpbnRmICJcbiQoJXNfT0JKUykgOiAlc1xuIiwgT0JKUywgZGVwZW5kCisJCX0KKwkJaWYgKCBmb3VuZCA9PSAxICkKKwkJeworCQkJcHJpbnQgICIiCisJCQlsaWJfbmFtZSA9IGxpYl9uYW1lX29mKG5hbWUpOworCQkJaWYgKCBNT0RFTCA9PSAiU0hBUkVEIiApCisJCQl7CisJCQkJYWJpX25hbWUgPSBhYmlfbmFtZV9vZihuYW1lKTsKKwkJCQlyZWxfbmFtZSA9IHJlbF9uYW1lX29mKG5hbWUpOworCQkJCWltcF9uYW1lID0gaW1wX25hbWVfb2YobmFtZSk7CisJCQkJZW5kX25hbWUgPSBlbmRfbmFtZV9vZihuYW1lKTsKKworCQkJCXNobGliX2J1aWxkKCIuLi9saWIiKQorCisJCQkJcHJpbnQgICIiCisJCQkJcHJpbnQgICJpbnN0YWxsIFxcIgorCQkJCXByaW50ICAiaW5zdGFsbC5saWJzIFxcIgorCisJCQkJaWYgKCBTaGxpYlZlciA9PSAiY3lnZGxsIiApIHsKKworCQkJCQlkc3RfZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpICQoREVTVERJUikkKGxpYmRpcikiOworCQkJCQlwcmludGYgImluc3RhbGwuJXMgOjogJXMgJChMSUJSQVJJRVMpXG4iLCBuYW1lLCBkc3RfZGlycworCQkJCQlpbnN0YWxsX2RsbCgiJChiaW5kaXIpIixlbmRfbmFtZSk7CisJCQkJCWluc3RhbGxfZGxsKCIkKGxpYmRpcikiLGltcF9uYW1lKTsKKworCQkJCX0gZWxzZSB7CisKKwkJCQkJbGliX2RpciA9ICIkKERFU1RESVIpJChsaWJkaXIpIjsKKwkJCQkJcHJpbnRmICJpbnN0YWxsLiVzIDo6ICVzLyVzXG4iLCBuYW1lLCBsaWJfZGlyLCBlbmRfbmFtZQorCQkJCQlwcmludCAiIgorCQkJCQlpZiAoIFJlTGluayA9PSAieWVzIiApIHsKKwkJCQkJCXNobGliX2J1aWxkKGxpYl9kaXIpCisJCQkJCX0gZWxzZSB7CisJCQkJCQlzaGxpYl9pbnN0YWxsKGxpYl9kaXIpCisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoIG92ZXJ3cml0ZSA9PSAieWVzIiAmJiBuYW1lID09ICJuY3Vyc2VzIiApCisJCQkJeworCQkJCQlpZiAoIFNobGliVmVyID09ICJjeWdkbGwiICkgeworCQkJCQkJb3ZyX25hbWUgPSBzcHJpbnRmKCJsaWJjdXJzZXMlcy5hIiwgc3VmZml4KQorCQkJCQkJcHJpbnRmICJcdEBlY2hvIGxpbmtpbmcgJXMgdG8gJXNcbiIsIGltcF9uYW1lLCBvdnJfbmFtZQorCQkJCQkJcHJpbnRmICJcdGNkICQoREVTVERJUikkKGxpYmRpcikgJiYgKHJtIC1mICVzOyAkKExOX1MpICVzICVzOyApXG4iLCBvdnJfbmFtZSwgaW1wX25hbWUsIG92cl9uYW1lCisJCQkJCX0gZWxzZSB7CisJCQkJCQlvdnJfbmFtZSA9IHNwcmludGYoImxpYmN1cnNlcyVzIiwgc3VmZml4KQorCQkJCQkJcHJpbnRmICJcdEBlY2hvIGxpbmtpbmcgJXMgdG8gJXNcbiIsIGVuZF9uYW1lLCBvdnJfbmFtZQorCQkJCQkJcHJpbnRmICJcdGNkICQoREVTVERJUikkKGxpYmRpcikgJiYgKHJtIC1mICVzOyAkKExOX1MpICVzICVzOyApXG4iLCBvdnJfbmFtZSwgZW5kX25hbWUsIG92cl9uYW1lCisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKCBsZGNvbmZpZyAhPSAiIiAmJiBsZGNvbmZpZyAhPSAiOiIgKSB7CisJCQkJCXByaW50ZiAiXHQtIHRlc3QgLXogXCIkKERFU1RESVIpXCIgJiYgJXNcbiIsIGxkY29uZmlnCisJCQkJfQorCQkJCXByaW50ICAiIgorCQkJCXByaW50ICAidW5pbnN0YWxsIFxcIgorCQkJCXByaW50ICAidW5pbnN0YWxsLmxpYnMgXFwiCisJCQkJcHJpbnRmICJ1bmluc3RhbGwuJXMgOjpcbiIsIG5hbWUKKwkJCQlpZiAoIFNobGliVmVyID09ICJjeWdkbGwiICkgeworCisJCQkJCXByaW50ZiAiXHRAZWNobyB1bmluc3RhbGxpbmcgJChERVNURElSKSQoYmluZGlyKS8lc1xuIiwgZW5kX25hbWUKKwkJCQkJcHJpbnRmICJcdC1Acm0gLWYgJChERVNURElSKSQoYmluZGlyKS8lc1xuIiwgZW5kX25hbWUKKworCQkJCQlwcmludGYgIlx0QGVjaG8gdW5pbnN0YWxsaW5nICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGltcF9uYW1lCisJCQkJCXByaW50ZiAiXHQtQHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGltcF9uYW1lCisKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGYgIlx0QGVjaG8gdW5pbnN0YWxsaW5nICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGVuZF9uYW1lCisJCQkJCXJlbW92ZWxpbmtzKCIkKERFU1RESVIpJChsaWJkaXIpIikKKwkJCQkJaWYgKCBvdmVyd3JpdGUgPT0gInllcyIgJiYgbmFtZSA9PSAibmN1cnNlcyIgKQorCQkJCQl7CisJCQkJCQlpZiAoIFNobGliVmVyID09ICJjeWdkbGwiICkgeworCQkJCQkJCW92cl9uYW1lID0gc3ByaW50ZigibGliY3Vyc2VzJXMuYSIsIHN1ZmZpeCkKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJb3ZyX25hbWUgPSBzcHJpbnRmKCJsaWJjdXJzZXMlcyIsIHN1ZmZpeCkKKwkJCQkJCX0KKwkJCQkJCXByaW50ZiAiXHQtQHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIG92cl9uYW1lCisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKCBybVNvTG9jcyA9PSAieWVzIiApIHsKKwkJCQkJcHJpbnQgICIiCisJCQkJCXByaW50ICAibW9zdGx5Y2xlYW4gXFwiCisJCQkJCXByaW50ICAiY2xlYW4gOjoiCisJCQkJCXByaW50ZiAiXHQtQHJtIC1mIHNvX2xvY2F0aW9uc1xuIgorCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKCBNT0RFTCA9PSAiTElCVE9PTCIgKQorCQkJeworCQkJCWlmICggJDIgPT0gImMrKyIgKSB7CisJCQkJCWNvbXBpbGU9IkNYWCIKKwkJCQl9IGVsc2UgeworCQkJCQljb21waWxlPSJDQyIKKwkJCQl9CisJCQkJZW5kX25hbWUgPSBsaWJfbmFtZTsKKwkJCQlwcmludGYgIi4uL2xpYi8lcyA6ICQoJXNfT0JKUylcbiIsIGxpYl9uYW1lLCBPQkpTCisJCQkJcHJpbnRmICJcdGNkIC4uL2xpYiAmJiAkKExJQlRPT0xfTElOSykgJCglcykgLW8gJXMgJCglc19PQkpTOiRvPS5sbykgLXJwYXRoICQoREVTVERJUikkKGxpYmRpcikgLXZlcnNpb24taW5mbyAkKE5DVVJTRVNfTUFKT1IpOiQoTkNVUlNFU19NSU5PUikgJChTSExJQl9MSVNUKVxuIiwgY29tcGlsZSwgbGliX25hbWUsIE9CSlMKKwkJCQlwcmludCAgIiIKKwkJCQlwcmludCAgImluc3RhbGwgXFwiCisJCQkJcHJpbnQgICJpbnN0YWxsLmxpYnMgXFwiCisJCQkJcHJpbnRmICJpbnN0YWxsLiVzIDo6ICQoREVTVERJUikkKGxpYmRpcikgLi4vbGliLyVzXG4iLCBuYW1lLCBsaWJfbmFtZQorCQkJCXByaW50ZiAiXHRAZWNobyBpbnN0YWxsaW5nIC4uL2xpYi8lcyBhcyAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBsaWJfbmFtZSwgbGliX25hbWUKKwkJCQlwcmludGYgIlx0Y2QgLi4vbGliOyAkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMKSAlcyAkKERFU1RESVIpJChsaWJkaXIpXG4iLCBsaWJfbmFtZQorCQkJCXByaW50ICAiIgorCQkJCXByaW50ICAidW5pbnN0YWxsIFxcIgorCQkJCXByaW50ICAidW5pbnN0YWxsLmxpYnMgXFwiCisJCQkJcHJpbnRmICJ1bmluc3RhbGwuJXMgOjpcbiIsIG5hbWUKKwkJCQlwcmludGYgIlx0QGVjaG8gdW5pbnN0YWxsaW5nICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGxpYl9uYW1lCisJCQkJcHJpbnRmICJcdC1AJChMSUJUT09MX1VOSU5TVEFMTCkgcm0gLWYgJChERVNURElSKSQobGliZGlyKS8lc1xuIiwgbGliX25hbWUKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQllbmRfbmFtZSA9IGxpYl9uYW1lOworCQkJCXByaW50ZiAiLi4vbGliLyVzIDogJCglc19PQkpTKVxuIiwgbGliX25hbWUsIE9CSlMKKwkJCQlwcmludGYgIlx0JChBUikgJChBUl9PUFRTKSAkQCAkP1xuIgorCQkJCXByaW50ZiAiXHQkKFJBTkxJQikgJEBcbiIKKwkJCQlpZiAoIGhvc3QgPT0gInZ4d29ya3MiICkKKwkJCQl7CisJCQkJCXByaW50ZiAiXHQkKExEKSAkKExEX09QVFMpICQ/IC1vICQoQDouYT0kbylcbiIKKwkJCQl9CisJCQkJcHJpbnQgICIiCisJCQkJcHJpbnQgICJpbnN0YWxsIFxcIgorCQkJCXByaW50ICAiaW5zdGFsbC5saWJzIFxcIgorCQkJCXByaW50ZiAiaW5zdGFsbC4lcyA6OiAkKERFU1RESVIpJChsaWJkaXIpIC4uL2xpYi8lc1xuIiwgbmFtZSwgbGliX25hbWUKKwkJCQlwcmludGYgIlx0QGVjaG8gaW5zdGFsbGluZyAuLi9saWIvJXMgYXMgJChERVNURElSKSQobGliZGlyKS8lc1xuIiwgbGliX25hbWUsIGxpYl9uYW1lCisJCQkJcHJpbnRmICJcdCQoSU5TVEFMTF9EQVRBKSAuLi9saWIvJXMgJChERVNURElSKSQobGliZGlyKS8lc1xuIiwgbGliX25hbWUsIGxpYl9uYW1lCisJCQkJaWYgKCBvdmVyd3JpdGUgPT0gInllcyIgJiYgbGliX25hbWUgPT0gImxpYm5jdXJzZXMuYSIgKQorCQkJCXsKKwkJCQkJcHJpbnRmICJcdEBlY2hvIGxpbmtpbmcgbGliY3Vyc2VzLmEgdG8gbGlibmN1cnNlcy5hXG4iCisJCQkJCXByaW50ZiAiXHQtQHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliY3Vyc2VzLmFcbiIKKwkJCQkJcHJpbnRmICJcdChjZCAkKERFU1RESVIpJChsaWJkaXIpICYmICQoTE5fUykgbGlibmN1cnNlcy5hIGxpYmN1cnNlcy5hKVxuIgorCQkJCX0KKwkJCQlwcmludGYgIlx0JChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvJXNcbiIsIGxpYl9uYW1lCisJCQkJaWYgKCBob3N0ID09ICJ2eHdvcmtzIiApCisJCQkJeworCQkJCQlwcmludGYgIlx0QGVjaG8gaW5zdGFsbGluZyAuLi9saWIvbGliJXMkbyBhcyAkKERFU1RESVIpJChsaWJkaXIpL2xpYiVzJG9cbiIsIG5hbWUsIG5hbWUKKwkJCQkJcHJpbnRmICJcdCQoSU5TVEFMTF9EQVRBKSAuLi9saWIvbGliJXMkbyAkKERFU1RESVIpJChsaWJkaXIpL2xpYiVzJG9cbiIsIG5hbWUsIG5hbWUKKwkJCQl9CisJCQkJcHJpbnQgICIiCisJCQkJcHJpbnQgICJ1bmluc3RhbGwgXFwiCisJCQkJcHJpbnQgICJ1bmluc3RhbGwubGlicyBcXCIKKwkJCQlwcmludGYgInVuaW5zdGFsbC4lcyA6OlxuIiwgbmFtZQorCQkJCXByaW50ZiAiXHRAZWNobyB1bmluc3RhbGxpbmcgJChERVNURElSKSQobGliZGlyKS8lc1xuIiwgbGliX25hbWUKKwkJCQlwcmludGYgIlx0LUBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyVzXG4iLCBsaWJfbmFtZQorCQkJCWlmICggb3ZlcndyaXRlID09ICJ5ZXMiICYmIGxpYl9uYW1lID09ICJsaWJuY3Vyc2VzLmEiICkKKwkJCQl7CisJCQkJCXByaW50ZiAiXHRAZWNobyBsaW5raW5nIGxpYmN1cnNlcy5hIHRvIGxpYm5jdXJzZXMuYVxuIgorCQkJCQlwcmludGYgIlx0LUBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmN1cnNlcy5hXG4iCisJCQkJfQorCQkJCWlmICggaG9zdCA9PSAidnh3b3JrcyIgKQorCQkJCXsKKwkJCQkJcHJpbnRmICJcdEBlY2hvIHVuaW5zdGFsbGluZyAkKERFU1RESVIpJChsaWJkaXIpL2xpYiVzJG9cbiIsIG5hbWUKKwkJCQkJcHJpbnRmICJcdC1Acm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWIlcyRvXG4iLCBuYW1lCisJCQkJfQorCQkJfQorCQkJcHJpbnQgIiIKKwkJCXByaW50ICJjbGVhbiA6OiIKKwkJCXJlbW92ZWxpbmtzKCIuLi9saWIiKTsKKwkJCXByaW50ICIiCisJCQlwcmludCAibW9zdGx5Y2xlYW46OiIKKwkJCXByaW50ZiAiXHQtcm0gLWYgJCglc19PQkpTKVxuIiwgT0JKUworCQkJaWYgKCBNT0RFTCA9PSAiTElCVE9PTCIgKSB7CisJCQkJcHJpbnRmICJcdC0kKExJQlRPT0xfQ0xFQU4pIHJtIC1mICQoJXNfT0JKUzokbz0ubG8pXG4iLCBPQkpTCisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIGZvdW5kID09IDIgKQorCQl7CisJCQlwcmludCAiIgorCQkJcHJpbnQgIm1vc3RseWNsZWFuOjoiCisJCQlwcmludGYgIlx0LXJtIC1mICQoJXNfT0JKUylcbiIsIE9CSlMKKwkJCWlmICggTU9ERUwgPT0gIkxJQlRPT0wiICkgeworCQkJCXByaW50ZiAiXHQtJChMSUJUT09MX0NMRUFOKSBybSAtZiAkKCVzX09CSlM6JG89LmxvKVxuIiwgT0JKUworCQkJfQorCQkJcHJpbnQgIiIKKwkJCXByaW50ICJjbGVhbiA6OiIKKwkJCXByaW50ZiAiXHQtcm0gLWYgJCglc19PQkpTKVxuIiwgT0JKUworCQkJaWYgKCBNT0RFTCA9PSAiTElCVE9PTCIgKSB7CisJCQkJcHJpbnRmICJcdC0kKExJQlRPT0xfQ0xFQU4pIHJtIC1mICQoJXNfT0JKUzokbz0ubG8pXG4iLCBPQkpTCisJCQl9CisJCX0KKwl9CisjIHZpbGU6dHM9NCBzdz00CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9tay0ybmQuYXdrIGIvbmN1cnNlcy01LjcvbWstMm5kLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjYzNzYzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbWstMm5kLmF3awpAQCAtMCwwICsxLDE0NiBAQAorIyAkSWQ6IG1rLTJuZC5hd2ssdiAxLjE5IDIwMDUvMDEvMjIgMTY6MzA6MDQgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQorIworIyBHZW5lcmF0ZSBjb21waWxlLXJ1bGVzIGZvciB0aGUgbW9kdWxlcyB0aGF0IHdlIGFyZSB1c2luZyBpbiBsaWJyYXJpZXMgb3IKKyMgcHJvZ3JhbXMuICBXZSBhcmUgbGlzdGluZyB0aGVtIGV4cGxpY2l0bHkgYmVjYXVzZSB3ZSBoYXZlIHR1cm5lZCBvZmYgdGhlCisjIHN1ZmZpeCBydWxlcyAodG8gZm9yY2UgY29tcGlsYXRpb24gd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MpLiAgV2UgY291bGQgdXNlCisjIG1ha2UtcmVjdXJzaW9uIGJ1dCB0aGF0IHdvdWxkIHJlc3VsdCBpbiBtYWtlZmlsZXMgdGhhdCBhcmUgdXNlbGVzcyBmb3IKKyMgZGV2ZWxvcG1lbnQuCisjCisjIFZhcmlhYmxlczoKKyMJbW9kZWwgZGlyZWN0b3J5IGludG8gd2hpY2ggb2JqZWN0cyBhcmUgY29tcGlsZWQuCisjCU1PREVMICh1cHBlcmNhc2UgdmVyc2lvbiBvZiAibW9kZWwiOyB0b3VwcGVyIGlzIG5vdCBwb3J0YWJsZSkKKyMJZWNobyAoeWVzIGlmZiB3ZSB3aWxsIHNob3cgdGhlICQoQ0MpIGxpbmVzKQorIwlzdWJzZXQgKCJub25lIiwgImJhc2UiLCAiYmFzZStleHRfZnVuY3MiIG9yICJ0ZXJtbGliIikKKyMJY3JlbmFtZXMgKCJ5ZXMiIG9yICJubyIsIGZsYWcgdG8gY29udHJvbCB3aGV0aGVyIC1jICYgLW8gb3B0aW9ucyBhcmUgdXNlZCkKKyMJY3h4cmVuYW1lcyAoInllcyIgb3IgIm5vIiwgZmxhZyB0byBjb250cm9sIHdoZXRoZXIgLWMgJiAtbyBvcHRpb25zIGFyZSB1c2VkKQorIwl0cmFjZXMgKCJhbGwiIG9yICJERUJVRyIsIHRvIGNvbnRyb2wgd2hldGhlciB0cmFjaW5nIGlzIGNvbXBpbGVkIGluKQorIwlzcmNkaXIgaXMgZXhwYW5kZWQgd2hlbiAiY29uZmlndXJlIC0tc3JjZGlyIiB3YXMgdXNlZAorIworIyBGaWVsZHMgaW4gc3JjL21vZHVsZXM6CisjCSQxID0gbW9kdWxlIG5hbWUKKyMJJDIgPSBwcm9nc3xsaWJ8YysrCisjCSQzID0gc291cmNlLWRpcmVjdG9yeQorIworIyBGaWVsZHMgaW4gc3JjL21vZHVsZXMgcGFzdCAkMyBhcmUgZGVwZW5kZW5jaWVzCisjCitCRUdJTgl7CisJCWZvdW5kID0gMAorCQl1c2luZyA9IDAKKwl9CisJL15ALyB7CisJCXVzaW5nID0gMAorCQlpZiAoc3Vic2V0ID09ICJub25lIikgeworCQkJdXNpbmcgPSAxCisJCX0gZWxzZSBpZiAoaW5kZXgoc3Vic2V0LCQyKSA+IDApIHsKKwkJCWlmICh1c2luZyA9PSAwKSB7CisJCQkJaWYgKGZvdW5kID09IDApIHsKKwkJCQkJcHJpbnQgICIiCisJCQkJCXByaW50ICAiIyBnZW5lcmF0ZWQgYnkgbWstMm5kLmF3ayIKKwkJCQkJcHJpbnRmICIjICAgbW9kZWw6ICAgICAgJXNcbiIsIG1vZGVsCisJCQkJCXByaW50ZiAiIyAgIE1PREVMOiAgICAgICVzXG4iLCBNT0RFTAorCQkJCQlwcmludGYgIiMgICBlY2hvOiAgICAgICAlc1xuIiwgZWNobyAKKwkJCQkJcHJpbnRmICIjICAgc3Vic2V0OiAgICAgJXNcbiIsIHN1YnNldAorCQkJCQlwcmludGYgIiMgICBjcmVuYW1lczogICAlc1xuIiwgY3JlbmFtZXMKKwkJCQkJcHJpbnRmICIjICAgY3h4cmVuYW1lczogJXNcbiIsIGN4eHJlbmFtZXMKKwkJCQkJcHJpbnRmICIjICAgdHJhY2VzOiAgICAgJXNcbiIsIHRyYWNlcworCQkJCQlwcmludGYgIiMgICBzcmNkaXI6ICAgICAlc1xuIiwgc3JjZGlyCisJCQkJfQorCQkJCXVzaW5nID0gMQorCQkJfQorCQl9CisJfQorCS9eW0AjXS8geworCQluZXh0CisJfQorCSQxIH4gL3RyYWNlLyB7CisJCWlmICh0cmFjZXMgIT0gImFsbCIgJiYgdHJhY2VzICE9IE1PREVMICYmICQxICE9ICJsaWJfdHJhY2UiKQorCQkJbmV4dAorCX0KKwl7CisJCWlmICgkMCAhPSAiIiBcCisJCSAmJiB1c2luZyAhPSAwKSB7CisJCQlmb3VuZCA9IDEKKwkJCWlmICggJDEgIT0gIiIgKSB7CisJCQkJcHJpbnQgICIiCisJCQkJaWYgKCAkMiA9PSAiYysrIiApIHsKKwkJCQkJY29tcGlsZT0iQ1hYIgorCQkJCQlzdWZmaXg9Ii5jYyIKKwkJCQkJdXNlX2Nfbz1jeHhyZW5hbWVzCisJCQkJfSBlbHNlIHsKKwkJCQkJY29tcGlsZT0iQ0MiCisJCQkJCXN1ZmZpeD0iLmMiCisJCQkJCXVzZV9jX289Y3JlbmFtZXMKKwkJCQl9CisJCQkJcHJpbnRmICIuLi8lcy8lcyRvIDpcdCVzLyVzJXMiLCBtb2RlbCwgJDEsICQzLCAkMSwgc3VmZml4CisJCQkJZm9yIChuID0gNDsgbiA8PSBORjsgbisrKSBwcmludGYgIiBcXFxuXHRcdFx0JXMiLCAkbgorCQkJCXByaW50ICAiIgorCQkJCWlmICggZWNobyA9PSAieWVzIiApCisJCQkJCWF0c2lnbj0iIgorCQkJCWVsc2UgeworCQkJCQlhdHNpZ249IkAiCisJCQkJCXByaW50ZiAiXHRAZWNobyAnY29tcGlsaW5nICVzICglcyknXG4iLCAkMSwgbW9kZWwKKwkJCQl9CisJCQkJcHJpbnRmICJcdCVzIiwgYXRzaWduOworCQkJCWlmICggdXNlX2NfbyAhPSAieWVzIiApIHsKKwkJCQkJcHJpbnRmICJjZCAuLi8lczsgIiwgbW9kZWw7CisJCQkJfQorCQkJCSMgVGhlIGNob2ljZSBoZXJlIGlzIGJldHdlZW4KKwkJCQkjCWJhc2UrZXh0X2Z1bmNzIGFuZAorCQkJCSMJdGVybWxpYitleHRfdGluZm8KKwkJCQkjIGJ1dCB0aGV5IG1heSBhcHBlYXIgaW4gdGhlIHNhbWUgdmFsdWUuCisJCQkJaWYgKCBzdWJzZXQgfiAvYmFzZS8gKSB7CisJCQkJCW15Y2ZsYWdzPSIiCisJCQkJfSBlbHNlIGlmICggc3Vic2V0IH4gL3Rlcm1saWIvICkgeworCQkJCQlteWNmbGFncz0iIC1EVVNFX1RFUk1MSUIiCisJCQkJfQorCQkJCXByaW50ZiAiJChMSUJUT09MX0NPTVBJTEUpICQoJXMpICQoQ0ZMQUdTXyVzKSVzIC1jICIsIGNvbXBpbGUsIE1PREVMLCBteWNmbGFncworCQkJCWlmICggJDMgPT0gIi4iIHx8IHNyY2RpciA9PSAiLiIgKSB7CisJCQkJCWRpciA9ICQzICIvIgorCQkJCQlzdWIoIl5cXCRcXChzcmNkaXJcXCkvIiwiIixkaXIpOworCQkJCQlzdWIoIl5cXC4vIiwiIixkaXIpOworCQkJCQlwcmludGYgIi4uLyVzLyVzJXMlcyIsIG5hbWUsIGRpciwgJDEsIHN1ZmZpeAorCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ZiAiJXMvJXMlcyIsICQzLCAkMSwgc3VmZml4CisJCQkJfQorCQkJCWlmICggdXNlX2NfbyA9PSAieWVzIiApIHsKKwkJCQkJcHJpbnRmICIgLW8gLi4vJXMvJXMkbyIsIG1vZGVsLCAkMQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmICIlcyIsICQxCisJCQkJZm9yIChuID0gMjsgbiA8PSBORjsgbisrKSBwcmludGYgIiAlcyIsICRuCisJCQl9CisJCQlwcmludCAgIiIKKwkJfQorCX0KK0VORAl7CisJCXByaW50ICAiIgorCX0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L21rLWhkci5hd2sgYi9uY3Vyc2VzLTUuNy9tay1oZHIuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNmJlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9tay1oZHIuYXdrCkBAIC0wLDAgKzEsMTA3IEBACisjICRJZDogbWstaGRyLmF3ayx2IDEuMiAyMDA3LzAzLzMxIDE1OjQ4OjQ1IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMjAwNworIworIyBHZW5lcmF0ZSBpbnN0YWxsL3VuaW5zdGFsbCBydWxlcyBmb3IgaGVhZGVyIGZpbGVzCisjIFZhcmlhYmxlczoKKyMJc3Vic2V0CSAgKCJub25lIiwgImJhc2UiLCAiYmFzZStleHRfZnVuY3MiIG9yICJ0ZXJtbGliIiwgZXRjLikKKyMJY29tcGF0CSAgKCJ5ZXMiIG9yICJubyIsIGZsYWcgdG8gYWRkIGxpbmsgdG8gY3Vyc2VzLmgKKyMKK2Z1bmN0aW9uIGJhc2VuYW1lKHBhdGgpIHsKKwlzdWIoL14uKlwvLywiIixwYXRoKQorCXJldHVybiBwYXRoOworfQorQkVHSU4JeworCQlmb3VuZCA9IDAKKwkJdXNpbmcgPSAxCisJCWNvdW50ID0gMAorCX0KKwkvXkAvIHsKKwkJdXNpbmcgPSAwCisJCWlmIChzdWJzZXQgPT0gIm5vbmUiKSB7CisJCQl1c2luZyA9IDEKKwkJfSBlbHNlIGlmIChpbmRleChzdWJzZXQsJDIpID4gMCkgeworCQkJdXNpbmcgPSAxCisJCX0gZWxzZSB7CisJCQl1c2luZyA9IDAKKwkJfQorCX0KKwkvXltAI10vIHsKKwkJbmV4dAorCX0KKwl7CisJCWlmICh1c2luZyAmJiBORiAhPSAwKSB7CisJCQlpZiAoZm91bmQgPT0gMCkgeworCQkJCXByaW50ICAiIgorCQkJCXByaW50ICAiIyBnZW5lcmF0ZWQgYnkgbWstaGRyLmF3ayIKKwkJCQlwcmludGYgIiMgIHN1YnNldDogICAgICVzXG4iLCBzdWJzZXQgCisJCQkJcHJpbnRmICIjICBjb21wYXQ6ICAgICAlc1xuIiwgY29tcGF0IAorCQkJCXByaW50ICAiIgorCQkJCWZvdW5kID0gMQorCQkJfQorCQkJZGF0YVtjb3VudF0gPSAkMQorCQkJY291bnQgPSBjb3VudCArIDEKKwkJfQorCX0KK0VORAl7CisJCWlmICggY291bnQgPiAwICkKKwkJeworCQkJcHJpbnQgIiR7REVTVERJUn0ke2luY2x1ZGVkaXJ9IDoiCisJCQlwcmludCAiCXNoICR7c3JjZGlyfS8uLi9ta2RpcnMuc2ggJEAiCisJCQlwcmludCAiIgorCQkJcHJpbnQgImluc3RhbGwgXFwiCisJCQlwcmludCAiaW5zdGFsbC5saWJzIFxcIgorCQkJcHJpbnQgImluc3RhbGwuaW5jbHVkZXMgOjogJHtBVVRPX1NSQ30gJHtERVNURElSfSR7aW5jbHVkZWRpcn0gXFwiCisKKwkJCWZvciAoaSA9IDA7IGkgPCBjb3VudCAtIDE7ICsraSkgeworCQkJCXByaW50ZiAiCQklcyBcXFxuIiwgZGF0YVtpXQorCQkJfQorCQkJcHJpbnRmICIJCSVzXG4iLCBkYXRhW2NvdW50IC0gMV0KKworCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJCQlwcmludGYgIglAIChjZCAke0RFU1RESVJ9JHtpbmNsdWRlZGlyfSAmJiBybSAtZiAlcykgOyAuLi9oZWFkZXJzLnNoICR7SU5TVEFMTF9EQVRBfSAke0RFU1RESVJ9JHtpbmNsdWRlZGlyfSAke3NyY2Rpcn0gJXNcbiIsIGJhc2VuYW1lKGRhdGFbaV0pLCBkYXRhW2ldCisJCQkJaWYgKGRhdGFbaV0gPT0gImN1cnNlcy5oIiAmJiBjb21wYXQgPT0gInllcyIpIHsKKwkJCQkJcHJpbnRmICIJQCAoY2QgJHtERVNURElSfSR7aW5jbHVkZWRpcn0gJiYgcm0gLWYgbmN1cnNlcy5oICYmICR7TE5fU30gJXMgbmN1cnNlcy5oKVxuIiwgZGF0YVtpXQorCQkJCX0KKwkJCX0KKwkJCXByaW50ICIiCisJCQlwcmludCAidW5pbnN0YWxsIFxcIgorCQkJcHJpbnQgInVuaW5zdGFsbC5saWJzIFxcIgorCQkJcHJpbnQgInVuaW5zdGFsbC5pbmNsdWRlcyA6OiIKKworCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJCQlwcmludGYgIgktQCAoY2QgJHtERVNURElSfSR7aW5jbHVkZWRpcn0gJiYgcm0gLWYgJXMpXG4iLCBiYXNlbmFtZShkYXRhW2ldKQorCQkJCWlmIChkYXRhW2ldID09ICJjdXJzZXMuaCIgJiYgY29tcGF0ID09ICJ5ZXMiKSB7CisJCQkJCXByaW50ZiAiCS1AIChjZCAke0RFU1RESVJ9JHtpbmNsdWRlZGlyfSAmJiBybSAtZiBuY3Vyc2VzLmgpXG4iCisJCQkJfQorCQkJfQorCQl9CisJfQorIyB2aWxlOnRzPTQgc3c9NApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbWtkaXJzLnNoIGIvbmN1cnNlcy01LjcvbWtkaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU5ZmMzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9ta2RpcnMuc2gKQEAgLTAsMCArMSw1MSBAQAorIyEgL2Jpbi9zaAorIyAkSWQ6IG1rZGlycy5zaCx2IDEuNSAyMDA3LzAzLzI1IDIyOjI5OjQ2IHRvbSBFeHAgJAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBta2luc3RhbGxkaXJzIC0tLSBtYWtlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKyMgQXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisjIENyZWF0ZWQ6IDE5OTMtMDUtMTYKKyMgTGFzdCBtb2RpZmllZDogMTk5NC0wMy0yNQorIyBQdWJsaWMgZG9tYWluCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VycnN0YXR1cz0wCit1bWFzayAwMjIKKworZm9yIGZpbGUgaW4gJHsxKyIkQCJ9IDsgZG8KKyAgIHNldCBmbm9yZCBgZWNobyAiOiRmaWxlIiB8IHNlZCAtbmUgJ3MvXjpcLy8jLztzL146Ly87cy9cLy8gL2c7cy9eIy9cLy87cCdgCisgICBzaGlmdAorCisgICBwYXRoY29tcD0KKyAgIGZvciBkIGluICR7MSsiJEAifSA7IGRvCisgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKyAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgIC0qICkgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICAgZXNhYworCisgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiIDE+JjIKKyAgICAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXTogKQorICAgICAgICAgICAgOzsgICAgICAgICAgICAgICAjIERPU0lTSCBzeXN0ZW1zCisgICAgICAgICAgKiApCisgICAgICAgICAgICBta2RpciAiJHBhdGhjb21wIgorICAgICAgICAgICAgZXJyc3RhdHVzPSQ/CisgICAgICAgICAgICBpZiB0ZXN0ICRlcnJzdGF0dXMgIT0gMAorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIyBtYXkgaGF2ZSBmYWlsZWQgaWYgaW52b2tlZCBpbiBhIHBhcmFsbGVsICJtYWtlIC1qIyBpbnN0YWxsIgorICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJHBhdGhjb21wIgorICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgZXJyc3RhdHVzPTAKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICBmaQorCisgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorICAgZG9uZQorZG9uZQorCitleGl0ICRlcnJzdGF0dXMKKworIyBta2luc3RhbGxkaXJzIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9NYWtlZmlsZS5pbiBiL25jdXJzZXMtNS43L25jdXJzZXMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4Zjc5ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyODQgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuMTEzIDIwMDgvMTAvMTggMTQ6MTE6NTQgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LW9uCisjCisjIE1ha2VmaWxlIGZvciBuY3Vyc2VzIHNvdXJjZSBjb2RlLgorIworIyBUaGlzIG1ha2VzIHRoZSBmb2xsb3dpbmc6CisjCXByb2dyYW1zCisjCWluY2x1ZGVzCisjCWxpYnJhcmllcyAobm9ybWFsL2RlYnVnL3Byb2ZpbGUvc2hhcmVkKQorIworIyBUaGUgdmFyaWFibGUgJ3NyY2RpcicgcmVmZXJzIHRvIHRoZSBzb3VyY2UtZGlzdHJpYnV0aW9uLCBhbmQgY2FuIGJlIHNldCB3aXRoCisjIHRoZSBjb25maWd1cmUgc2NyaXB0IGJ5ICItLXNyY2Rpcj1ESVIiLgorIworIyBUaGUgcnVsZXMgYXJlIG9yZ2FuaXplZCB0byBwcm9kdWNlIHRoZSBsaWJyYXJpZXMgZm9yIHRoZSBjb25maWd1cmVkIG1vZGVscywKKyMgYW5kIHRoZSBwcm9ncmFtcyB3aXRoIHRoZSBjb25maWd1cmVkIGRlZmF1bHQgbW9kZWwuCisKKyMgdHVybiBvZmYgX2FsbF8gc3VmZml4IHJ1bGVzOyB3ZSdsbCBnZW5lcmF0ZSBvdXIgb3duCisuU1VGRklYRVM6CisKK1NIRUxMCQk9IC9iaW4vc2gKK1RISVMJCT0gTWFrZWZpbGUKKworQ0ZfTUZMQUdTIAk9IEBjZl9jdl9tYWtlZmxhZ3NACitAU0VUX01BS0VACisKK3gJCT0gQEVYRUVYVEAKK28JCT0gLkBPQkpFWFRACisKK01PREVMCQk9IEBERlRfTFdSX01PREVMQAorREVTVERJUgkJPSBAREVTVERJUkAKK3RvcF9zcmNkaXIJPSBAdG9wX3NyY2RpckAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorbGliZGlyCQk9IEBsaWJkaXJACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACitkYXRhZGlyCQk9IEBkYXRhZGlyQAorCitMSUJUT09MCQk9IEBMSUJUT09MQAorTElCVE9PTF9DTEVBTgk9IEBMSUJfQ0xFQU5ACitMSUJUT09MX0NPTVBJTEUJPSBATElCX0NPTVBJTEVACitMSUJUT09MX0xJTksJPSBATElCX0xJTktACitMSUJUT09MX0lOU1RBTEwJPSBATElCX0lOU1RBTExACitMSUJUT09MX1VOSU5TVEFMTCA9IEBMSUJfVU5JTlNUQUxMQAorCitJTlNUQUxMCQk9IEBJTlNUQUxMQAorSU5TVEFMTF9MSUIJPSBASU5TVEFMTEAgQElOU1RBTExfTElCQAorSU5TVEFMTF9QUk9HCT0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK0FSCQk9IEBBUkAKK0FSX09QVFMJCT0gQEFSX09QVFNACitBV0sJCT0gQEFXS0AKK0xECQk9IEBMREAKK0xOX1MJCT0gQExOX1NACisKK0NDCQk9IEBDQ0AKK0NQUAkJPSBAQ1BQQAorQ0ZMQUdTCQk9IEBDRkxBR1NACisKK0lOQ0RJUgkJPSAkKHNyY2RpcikvLi4vaW5jbHVkZQorQ1BQRkxBR1MJPSAtREhBVkVfQ09ORklHX0ggLUkuLi9uY3Vyc2VzIC1JJChzcmNkaXIpIEBDUFBGTEFHU0AKKworQ0NGTEFHUwkJPSAkKENQUEZMQUdTKSAkKENGTEFHUykKKworQlVJTERfQ1BQRkxBR1MJPSAtSS4uL2luY2x1ZGUgQEJVSUxEX0NQUEZMQUdTQAorQlVJTERfQ0MJPSBAQlVJTERfQ0NACitCVUlMRF9DQ0ZMQUdTCT0gLURIQVZFX0NPTkZJR19IIC1JLi4vbmN1cnNlcyAtSSQoc3JjZGlyKSAtSSQoSU5DRElSKSAkKEJVSUxEX0NQUEZMQUdTKSBAQlVJTERfQ0ZMQUdTQAorQlVJTERfTERGTEFHUwk9IEBCVUlMRF9MREZMQUdTQAorQlVJTERfTElCUwk9IEBCVUlMRF9MSUJTQAorCisjIFRoZSBleGVjdXRhYmxlcyBidWlsdCBpbiB0aGlzIGRpcmVjdG9yeSBhcmUgdXNlZCBmb3IgZ2VuZXJhdGluZyBzb3VyY2UgdGhhdAorIyBpcyBjb21waWxlZCBpbnRvIHRoZSBidWlsZCwgb3IgYXJlIHRlc3QtcHJvZ3JhbXMgdGhhdCBhcmUgbm90IGluc3RhbGxlZC4KKworQlVJTERfRVhFRVhUCT0gQEJVSUxEX0VYRUVYVEAKK3gJCT0gQFBST0dfRVhUQAorCitDRkxBR1NfTElCVE9PTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDQ19HX09QVEAgLURUUkFDRQorQ0ZMQUdTX1BST0ZJTEUJPSAkKENDRkxBR1MpIC1wZworQ0ZMQUdTX1NIQVJFRAk9ICQoQ0NGTEFHUykgQENDX1NIQVJFRF9PUFRTQAorCitDRkxBR1NfREVGQVVMVAk9ICQoQ0ZMQUdTX0BERlRfVVBSX01PREVMQCkKKworTElOSwkJPSAkKExJQlRPT0wpCitMREZMQUdTCQk9IEBMREZMQUdTQCBATERfTU9ERUxAIEBMSUJTQAorCitTSExJQl9ESVJTCT0gLUwuLi9saWIKK1NITElCX0xJU1QJPSAkKFNITElCX0RJUlMpIEBTSExJQl9MSVNUQAorVElORk9fTElTVAk9ICQoU0hMSUJfRElSUykgQFRJTkZPX0xJU1RACitUSUNTX0xJU1QJPSAkKFNITElCX0RJUlMpIEBUSUNTX0xJU1RACisKK01LX1NIQVJFRF9MSUIJPSBATUtfU0hBUkVEX0xJQkAKKworTkNVUlNFU19NQUpPUgk9IEBOQ1VSU0VTX01BSk9SQAorTkNVUlNFU19NSU5PUgk9IEBOQ1VSU0VTX01JTk9SQAorUkVMX1ZFUlNJT04JPSBAY2ZfY3ZfcmVsX3ZlcnNpb25ACitBQklfVkVSU0lPTgk9IEBjZl9jdl9hYmlfdmVyc2lvbkAKKworUkFOTElCCQk9IEBMSUJfUFJFUEAKKworTElCUkFSSUVTCT0gQExJQlNfVE9fTUFLRUAKKworTElOVAkJPSBATElOVEAKK0xJTlRfT1BUUwk9IEBMSU5UX09QVFNACitMSU5UX0xJQlMJPSAtbG5jdXJzZXMgQExJQlNACisKK0ZBTExCQUNLX0xJU1QJPSBARkFMTEJBQ0tfTElTVEAKKworVVNFX0JJR19TVFJJTkdTCT0gQFVTRV9CSUdfU1RSSU5HU0AKK1RFUk1JTkZPX0NBUFMJPSAkKHRvcF9zcmNkaXIpL2luY2x1ZGUvQFRFUk1JTkZPX0NBUFNACisKK0FVVE9fU1JDID0gXAorCS4vY29kZXMuYyBcCisJLi9jb21wX2NhcHRhYi5jIFwKKwkuL2V4cGFuZGVkLmMgXAorCS4vZmFsbGJhY2suYyBcCisJLi9saWJfZ2VuLmMgXAorCS4vbGliX2tleW5hbWUuYyBcCisJLi9saW5rX3Rlc3QuYyBcCisJLi9uYW1lcy5jIFwKKwkuL3VuY3RybC5jIFwKKwlpbml0X2tleXRyeS5oIFwKKwlrZXlzLmxpc3QKKworVEVTVF9ERVBTCT0gLi4vbGliL0BMSUJfUFJFRklYQG5jdXJzZXNAREZUX0RFUF9TVUZGSVhACitURVNUX0FSR1MJPSBATERGTEFHU19TVEFUSUNAIEBURVNUX0FSR1NAIEBMREZMQUdTX1NIQVJFREAgCitURVNUX0xERkxBR1MJPSBATERfTU9ERUxAICQoVEVTVF9BUkdTKSBATElCU0AgQExPQ0FMX0xERkxBR1NAIEBMREZMQUdTQAorCitURVNUX1BST0dTID0gXAorCWNhcHRvaW5mbyR4IFwKKwloYXJkc2Nyb2xsJHggXAorCWxpbmtfdGVzdCR4IFwKKwloYXNobWFwJHggXAorCWxpYl9tdmN1ciR4CisKK2Jhc2UJPSAkKHNyY2RpcikvYmFzZQorc2VyaWFsCT0gJChzcmNkaXIpL3R0eQordGluZm8JPSAkKHNyY2RpcikvdGluZm8KK3RyYWNlCT0gJChzcmNkaXIpL3RyYWNlCit3aWRlCT0gJChzcmNkaXIpL3dpZGVjaGFyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithbGwgXAorbGlicyA6OgkJJChBVVRPX1NSQykgLi4vbGliICQoTElCUkFSSUVTKQorCitzb3VyY2VzOgkkKEFVVE9fU1JDKQorCiskKERFU1RESVIpJChiaW5kaXIpIFwKKyQoREVTVERJUikkKGxpYmRpcikgOgorCXNoICQoc3JjZGlyKS8uLi9ta2RpcnMuc2ggJEAKKworLi4vbGliIDogOyBta2RpciAkQAorCisuL2ZhbGxiYWNrLmMgOiAkKHRpbmZvKS9NS2ZhbGxiYWNrLnNoCisJc2ggLWUgJCh0aW5mbykvTUtmYWxsYmFjay5zaCBAVEVSTUlORk9AIEBURVJNSU5GT19TUkNAICQoRkFMTEJBQ0tfTElTVCkgPiRACisKKy4vbGliX2dlbi5jIDogJChiYXNlKS9NS2xpYl9nZW4uc2ggLi4vaW5jbHVkZS9jdXJzZXMuaAorCXNoIC1lICQoYmFzZSkvTUtsaWJfZ2VuLnNoICIkKENQUCkgJChDUFBGTEFHUykiICIkKEFXSykiIGdlbmVyYXRlZCA8Li4vaW5jbHVkZS9jdXJzZXMuaCA+JEAKKworaW5pdF9rZXl0cnkuaDogbWFrZV9rZXlzJChCVUlMRF9FWEVFWFQpIGtleXMubGlzdAorCS4vbWFrZV9rZXlzJChCVUlMRF9FWEVFWFQpIGtleXMubGlzdCA+ICRACisKK2tleXMubGlzdCA6CSQodGluZm8pL01La2V5c19saXN0LnNoCisJQVdLPSQoQVdLKSBzaCAkKHRpbmZvKS9NS2tleXNfbGlzdC5zaCAkKFRFUk1JTkZPX0NBUFMpIHwgc29ydCA+JEAKKworbWFrZV9rZXlzJChCVUlMRF9FWEVFWFQpIDogXAorCQkkKHRpbmZvKS9tYWtlX2tleXMuYyBcCisJCW5hbWVzLmMKKwkkKEJVSUxEX0NDKSAtbyAkQCAkKEJVSUxEX0NDRkxBR1MpICQodGluZm8pL21ha2Vfa2V5cy5jICQoQlVJTERfTERGTEFHUykgJChCVUlMRF9MSUJTKQorCittYWtlX2hhc2gkKEJVSUxEX0VYRUVYVCkgOiBcCisJCSQodGluZm8pL2NvbXBfaGFzaC5jIFwKKwkJLi4vaW5jbHVkZS9oYXNoc2l6ZS5oCisJJChCVUlMRF9DQykgLW8gJEAgJChCVUlMRF9DQ0ZMQUdTKSAtRE1BSU5fUFJPR1JBTSAkKHRpbmZvKS9jb21wX2hhc2guYyAkKEJVSUxEX0xERkxBR1MpICQoQlVJTERfTElCUykKKworLi9leHBhbmRlZC5jIDogJChzZXJpYWwpL01LZXhwYW5kZWQuc2gKKwlzaCAtZSAkKHNlcmlhbCkvTUtleHBhbmRlZC5zaCAiJChDUFApIiAkKENQUEZMQUdTKSA+ICRACisKKy4vY29tcF9jYXB0YWIuYzogXAorCQltYWtlX2hhc2gkKEJVSUxEX0VYRUVYVCkgXAorCQkuLi9pbmNsdWRlL2hhc2hzaXplLmggXAorCQkkKHRpbmZvKS9NS2NhcHRhYi5zaCBcCisJCSQodGluZm8pL01LY2FwdGFiLmF3aworCXNoIC1lICQodGluZm8pL01LY2FwdGFiLnNoICQoQVdLKSAkKFVTRV9CSUdfU1RSSU5HUykgJCh0aW5mbykvTUtjYXB0YWIuYXdrICQoc3JjZGlyKS8uLi9pbmNsdWRlL0BURVJNSU5GT19DQVBTQCA+ICRACisKKy4vbGliX2tleW5hbWUuYzoga2V5cy5saXN0ICQoYmFzZSkvTUtrZXluYW1lLmF3aworCSQoQVdLKSAtZiAkKGJhc2UpL01La2V5bmFtZS5hd2sgYmlnc3RyaW5ncz0kKFVTRV9CSUdfU1RSSU5HUykga2V5cy5saXN0ID4gJEAKKworLi9jb2Rlcy5jOiAkKHRpbmZvKS9NS2NvZGVzLmF3aworCSQoQVdLKSAtZiAkKHRpbmZvKS9NS2NvZGVzLmF3ayBiaWdzdHJpbmdzPSQoVVNFX0JJR19TVFJJTkdTKSAkKHNyY2RpcikvLi4vaW5jbHVkZS9AVEVSTUlORk9fQ0FQU0AgPiRACisKKy4vbmFtZXMuYzogJCh0aW5mbykvTUtuYW1lcy5hd2sKKwkkKEFXSykgLWYgJCh0aW5mbykvTUtuYW1lcy5hd2sgYmlnc3RyaW5ncz0kKFVTRV9CSUdfU1RSSU5HUykgJChzcmNkaXIpLy4uL2luY2x1ZGUvQFRFUk1JTkZPX0NBUFNAID4kQAorCisuL3VuY3RybC5jOiAkKGJhc2UpL01LdW5jdHJsLmF3aworCWVjaG8gfCAkKEFXSykgLWYgJChiYXNlKS9NS3VuY3RybC5hd2sgYmlnc3RyaW5ncz0kKFVTRV9CSUdfU1RSSU5HUykgPiRACisKK3RhZ3M6CisJY3RhZ3MgKi5bY2hdICovKi5bY2hdCisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUzoKK0BNQUtFX1VQUEVSX1RBR1NACWV0YWdzICouW2NoXSAqLyouW2NoXQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UKKwktcm0gLWYgJChURVNUX1BST0dTKQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCS1ybSAtZiAkKEFVVE9fU1JDKQorCS1ybSAtZiBtYWtlX2tleXMkKEJVSUxEX0VYRUVYVCkKKwktcm0gLWYgbWFrZV9oYXNoJChCVUlMRF9FWEVFWFQpCisJLXJtIC1yZiAubGlicworCitkaXN0Y2xlYW4gOjogY2xlYW4KKwktcm0gLWYgTWFrZWZpbGUKKworcmVhbGNsZWFuIDo6IGRpc3RjbGVhbgorCisjIFRoZXNlIHJ1bGVzIGFyZSB1c2VkIHRvIGFsbG93ICJtYWtlIC1uIiB0byB3b3JrIG9uIGEgY2xlYW4gZGlyZWN0b3J5LXRyZWUKKy4uL2luY2x1ZGUvaGFzaHNpemUuaCBcCisuLi9pbmNsdWRlL3BhcmFtZXRyaXplZC5oIFwKKy4uL2luY2x1ZGUvdGVybS5oIDoKKwljZCAuLi9pbmNsdWRlOyAkKE1BS0UpICQoQ0ZfTUZMQUdTKQorCisjIFRoZXNlIHJ1bGVzIGJ1aWxkIHRlc3QtcHJvZ3JhbXMgZm9yIHRoZSBtb2R1bGVzIHRoYXQgaGF2ZSB0ZXN0LWRyaXZlcnMKK3Rlc3RfcHJvZ3MgOiAkKFRFU1RfUFJPR1MpCisKKy4vbGlua190ZXN0LmMgOiAkKGJhc2UpL01LbGliX2dlbi5zaCAuLi9pbmNsdWRlL2N1cnNlcy5oCisJc2ggLWUgJChiYXNlKS9NS2xpYl9nZW4uc2ggIiQoQ1BQKSAkKENQUEZMQUdTKSIgIiQoQVdLKSIgaW1wbGVtZW50ZWQgPC4uL2luY2x1ZGUvY3Vyc2VzLmggPiRACisKK2NhcHRvaW5mbyR4IDogJCh0aW5mbykvY2FwdG9pbmZvLmMgJChURVNUX0RFUFMpCisJQEVDSE9fTElOS0AgJChMSUJUT09MX0xJTkspIC1vICRAICQoQ0ZMQUdTX0RFRkFVTFQpIC1ETUFJTiAkKHRpbmZvKS9jYXB0b2luZm8uYyAkKFRFU1RfTERGTEFHUykKKworaGFyZHNjcm9sbCR4IDogJChzZXJpYWwpL2hhcmRzY3JvbGwuYyAkKFRFU1RfREVQUykKKwlARUNIT19MSU5LQCAkKExJQlRPT0xfTElOSykgLW8gJEAgJChDRkxBR1NfREVGQVVMVCkgLURTQ1JPTExERUJVRyAkKHNlcmlhbCkvaGFyZHNjcm9sbC5jICQoVEVTVF9MREZMQUdTKQorCitoYXNobWFwJHggOiAkKHNlcmlhbCkvaGFzaG1hcC5jICQoc2VyaWFsKS9oYXJkc2Nyb2xsLmMgJChURVNUX0RFUFMpCisJQEVDSE9fTElOS0AgJChMSUJUT09MX0xJTkspIC1vICRAICQoQ0ZMQUdTX0RFRkFVTFQpIC1ESEFTSERFQlVHICQoc2VyaWFsKS9oYXNobWFwLmMgJChzZXJpYWwpL2hhcmRzY3JvbGwuYyAkKFRFU1RfTERGTEFHUykKKworbGliX212Y3VyJHggOiAkKHNlcmlhbCkvbGliX212Y3VyLmMgJChURVNUX0RFUFMpIFwKKwkJLi4vQERGVF9PQkpfU1VCRElSQC9kdW1wX2VudHJ5JG8KKwlARUNIT19MSU5LQCAkKExJQlRPT0xfTElOSykgLW8gJEAgJChDRkxBR1NfREVGQVVMVCkgLUROQ1VSU0VTX1RFU1QgLUkkKHNlcmlhbCkvLi4vLi4vcHJvZ3MgJChzZXJpYWwpL2xpYl9tdmN1ci5jIC4uL0BERlRfT0JKX1NVQkRJUkAvZHVtcF9lbnRyeSRvICQoVEVTVF9MREZMQUdTKQorCitsaW5rX3Rlc3QkeCA6IC4vbGlua190ZXN0LmMgJChURVNUX0RFUFMpIFwKKwkJLi4vQERGVF9PQkpfU1VCRElSQC9saW5rX3Rlc3QkbworCUBFQ0hPX0xJTktAICQoQ0MpIC1vICRAICQoQ0ZMQUdTX0RFRkFVTFQpIC4uL0BERlRfT0JKX1NVQkRJUkAvbGlua190ZXN0JG8gJChURVNUX0xERkxBR1MpCisKKy4uL0BERlRfT0JKX1NVQkRJUkAvZHVtcF9lbnRyeSRvOgorCWNkIC4uL3Byb2dzICYmICQoTUFLRSkgLi4vQERGVF9PQkpfU1VCRElSQC9kdW1wX2VudHJ5JG8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9SRUFETUUgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjBhYTViCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9SRUFETUUKQEAgLTAsMCArMSwzMSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUsdiAxLjkgMjAwNi8wNC8yMiAyMjoxOTozNyB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZvciBkaXNjdXNzaW9uIG9mIHRoZSBwYWNrYWdlIGludGVybmFscywgc2VlIGhhY2tndWlkZS5odG1sIGluIHRoZSBkb2MvaHRtbAorZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9SRUFETUUuSVogYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL1JFQURNRS5JWgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODIwNmNkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9SRUFETUUuSVoKQEAgLTAsMCArMSw5NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAyMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUuSVosdiAxLjIgMjAwNi8wNC8yMiAyMzoxMzowNSB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGlzIHRoZSBwYXRjaC4gIEkgZGlkIG5vIHRlc3Rpbmcgd2hhdHNvZXZlciB3aXRoIGV2ZW50IHdhdGNoaW5nCityZXF1ZXN0cyBwcmVzZW50IChJIG5lZWQgc29tZSBhcHBsaWNhdGlvbnMgd2hpY2ggZXhlcnNpemUgdGhpcyBiZWZvcmUKK3RoaXMsIHByb2JhYmx5IGx5bnggOy0pLCBidXQgdGhlIGNvZGUgbG9va3Mgd29ya2luZyAidGhlIG5vcm1hbCB3YXkiLgorCitJIGhhZCBubyB3YXkgdG8gdGVzdCB0aGF0IHRoZSBwb2xsKCkgYnJhbmNoIGNvbXBpbGVzL3dvcmtzLi4uCisKK0hlcmUgaXMgdGhlIEFQSTogCisKKyopIHR3byBuZXcgZnVuY3Rpb25zIHdnZXRjaF9ldmVudHMoKSB3Z2V0c3Rybl9ldmVudCgpIGFyZSBpbnRyb2R1Y2VkLAorICAgd2hpY2ggYWxsb3cgYW4gZXZlbnQtd2F0Y2ggc3BlY2lmaWNhdGlvbiBnaXZlbiBhcyB0aGUgbGFzdCBhcmd1bWVudDsKKworKikgaWYgdGhlIGxhc3QgYXJndW1lbnQgaXMgTlVMTCwgdGhleSBiZWhhdmUgYXMgd2dldGNoKCkgYW5kCisgICB3Z2V0c3RybigpIChURVNURUQhKTsKKworKikgdGhlIGV2ZW50IHNwZWNpZmljYXRpb24gaXMgYSBwb2ludGVyIHRvIF9uY19ldmVudGxpc3QsIHdoaWNoCisgICBjb250YWlucyBib29ra2VlcGluZyBlbGVtZW50cyAoY291bnQgYW5kIHRoZSBzdW1tYXJ5IG9mIHJlc3VsdHMpLAorICAgYW5kIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIF9uY19ldmVudDsKKworKikgZWFjaCBfbmNfZXZlbnQgaXMgYSB0eXBlZCB1bmlvbiwgd2l0aCB0d28gdHlwZXMgc3VwcG9ydGVkICJhcworICAgc2hpcHBlZCI6IF9OQ19FVkVOVF9USU1FT1VUX01TRUMsIF9OQ19FVkVOVF9GSUxFLiAgRm9yCisgICBfTkNfRVZFTlRfRklMRSB0aGUgZmllbGRzIGFyZSBmZCwgZmxhZywgYW5kIHRoZSBvdXRwdXQgZmllbGQuCisKKyopIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnICJhcyBzaGlwcGVkIiBpcyBfTkNfRVZFTlRfRklMRV9SRUFEQUJMRS4KKyAgIElmIHRoZSBmaWxlIHdhcyBmb3VuZCByZWFkYWJsZSwgdGhlIHJldHVybiBmaWVsZCBpcyBzZXQgdG8gdGhpcywKKyAgIG90aGVyd2lzZSB0byAwOworCisqKSBJZiB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIEtFWV9FVkVOVCwgdGhpcyBtZWFucyB0aGF0IHRoZSByZXR1cm4KKyAgIGZpZWxkcyBpbiBib3RoIHRoZSBfbmNfZXZlbnRsaXN0IGFuZCBfbmNfZXZlbnQgc3RydWN0dXJlcyBtYWtlCisgICBzZW5zZS4gIFRoZSBmaWVsZCByZXN1bHRfZmxhZ3Mgb2YgX25jX2V2ZW50bGlzdCBtYXkgaGF2ZSBhCisgICBjb21iaW5hdGlvbiBvZiBiaXRzIF9OQ19FVkVOVF9USU1FT1VUX01TRUMgYW5kIF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFCisgICBzZXQ7CisKKyopIFRoZSB0aW1lb3V0X21zZWMgZmllbGQgb2YgX05DX0VWRU5UX1RJTUVPVVRfTVNFQyBfbmNfZXZlbnQncyBpcworICAgdXBkYXRlZCBvbiByZXR1cm4sIGV2ZW4gaWYgdGhlIHJldHVybiBpcyBub3QgS0VZX0VWRU5ULiAgSG93ZXZlciwKKyAgIHRoZSBjaGFuZ2UgaW4gdGhlIHZhbHVlIHJlcHJlc2VudHMgb25seSB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4KKyAgIHdhaXRpbmcgZm9yIGV2ZW50cywgbm90IHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCBib29ra2VlcGluZzsKKworKikgdGhlIHJldHVybiBLRVlfRVZFTlQgb2Ygd2dldHN0cm5fZXZlbnQoKSBtZWFucyB0aGF0IHRoZSBvdXRwdXQKKyAgIHN0cmluZyBpbmNsdWRlcyB0aGUgdXNlciBpbnB1dCB0eXBlZCBzbyBmYXIsIGJ1dCB0aGUgdXNlciBkaWQgbm90IGhhdmUKKyAgIGEgY2hhbmNlIHRvIHByZXNzIEVOVEVSIChvciB3aGF0ZXZlcikuICBUaGlzIGNhbGwgc2hvdWxkIGJlCisgICByZXBlYXRlZCAod2l0aCAic2hpZnRlZCIgcG9pbnRlciB0byBhIGJ1ZmZlciwgb2YgY291cnNlKSB0bworICAgY29tcGxldGUgdGhlIGlucHV0OworCisqKSBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBleHRlbnNpb24gY2FuIGJlIGNoZWNrZWQgdmlhIGluc3BlY3RpbmcKKyAgICNpZmRlZiBOQ1VSU0VTX0VWRU5UX1ZFUlNJT04uICBUaGlzIHN5bWJvbCBpcyBub3QgZGVmaW5lZCBvbiBCZU9TLAorICAgc2luY2UgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgdGhpcyBvbiBCZU9TLgorCitLbm93biBpc3N1ZXM6ICBjYWxscyBpbnRlcnJ1cHRlZCBieSBLRVlfRVZFTlQgcmVzZXQgdGhlIEVTQ0RFTEFZCit0aW1lci4gIFRoaXMgaXMgbm90IGVudGlyZWx5IG5ldywgc2luY2Ugb3RoZXIgc3ludGhldGljIGV2ZW50cyBiZWhhdmUKK3RoZSBzYW1lIChzZWUgImlmIChjaCA+PSBLRVlfTUlOKSIgYnJhbmNoIG9mIGtnZXRjaCgpKS4gIEhvd2V2ZXIsCitLRVlfRVZFTlQgbWF5IGJlIGdlbmVyYXRlZCBpbiBhIGNvbnRpbnVvdXMgc3RyZWFtIChzYXksIHdoZW4KK2Rvd25sb2FkaW5nIGEgZmlsZSksIHRodXMgdGhpcyBtYXkgYmUgbW9yZSBpbXBvcnRhbnQgdGhhbiB3aXRoIG90aGVyCitzeW50aGV0aWMga2V5cy4gIEFuIGFkZGl0aW9uYWwgZmllbGQgaW4gd2luZG93IHN0cnVjdHVyZSB3aGljaCBrZWVwcwordGltZXN0YW1wIG9mIHRoZSBmaXJzdCByYXcga2V5IGluIHRoZSBxdWV1ZSBtYXkgYmUgbmVlZGVkIHRvCitjaXJjdW12ZW50IHRoaXMuCisKK0Fub3RoZXIgcG9zc2libGUgaXNzdWU6IEtFWV9FVkVOVCBoYXMgYSBwcmVmZXJlbmNlIG92ZXIgYSB1c2VyIGlucHV0LAorc28gYSBzdHJlYW0gb2YgS0VZX0VWRU5UJ3MgY2FuIG1ha2UgaW5wdXQgaGFyZC4gIE1heWJlIHVzZQorcmVzdWx0X2ZsYWdzIGFzIGluIGlucHV0IHBhcmFtZXRlciB0b28sIHdoaWNoIHNwZWNpZmllcyB3aGV0aGVyIHRoZQordXNlciBpbnB1dCBzaG91bGQgaGF2ZSBoaWdoZXIgcHJlY2VkZW5jZT8KKworQWxzbzogSSB0b29rIGFuIG9wcG9ydHVuaXR5IHRvIGRvY3VtZW50IGtnZXRjaCgpIGJldHRlci4KKworRW5qb3ksCitJbHlhCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL1NpZ0FjdGlvbi5oIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9TaWdBY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZkZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9TaWdBY3Rpb24uaApAQCAtMCwwICsxLDEwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAkSWQ6IFNpZ0FjdGlvbi5oLHYgMS44IDIwMDUvMDgvMDYgMjA6MDU6MzIgdG9tIEV4cCAkCisgKgorICogVGhpcyBmaWxlIGV4aXN0cyB0byBoYW5kbGUgbm9uLVBPU0lYIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSA8dW5pc3RkLmg+LAorICogYW5kIHVzdWFsbHkgbm8gc2lnYWN0aW9uKCkgbm9yIDx0ZXJtaW9zLmg+CisgKi8KKworI2lmbmRlZiBfU0lHQUNUSU9OX0gKKyNkZWZpbmUgX1NJR0FDVElPTl9ICisKKyNpZm5kZWYgSEFWRV9TSUdBQ1RJT04KKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TSUdWRUMKKyNkZWZpbmUgSEFWRV9TSUdWRUMgMAorI2VuZGlmCisKKyNpZiBIQVZFX1NJR0FDVElPTgorCisjaWYgIUhBVkVfVFlQRV9TSUdBQ1RJT04KK3R5cGVkZWYgc3RydWN0IHNpZ2FjdGlvbiBzaWdhY3Rpb25fdDsKKyNlbmRpZgorCisjZWxzZQkvKiAhSEFWRV9TSUdBQ1RJT04gKi8KKworI2lmIEhBVkVfU0lHVkVDCisKKyN1bmRlZiAgU0lHX0JMT0NLCisjZGVmaW5lIFNJR19CTE9DSyAgICAgICAwMAorCisjdW5kZWYgIFNJR19VTkJMT0NLCisjZGVmaW5lIFNJR19VTkJMT0NLICAgICAwMQorCisjdW5kZWYgIFNJR19TRVRNQVNLCisjZGVmaW5lIFNJR19TRVRNQVNLICAgICAwMgorCisgCS8qCisJICogPGJzZC9zaWduYWwuaD4gaXMgaW4gdGhlIExpbnV4IDEuMi44ICsgZ2NjIDIuNy4wIGNvbmZpZ3VyYXRpb24sCisJICogYW5kIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyB0aGlzIGhlYWRlciBmaWxlLgorCSAqLworI2lmIEhBVkVfQlNEX1NJR05BTF9ICisjaW5jbHVkZSA8YnNkL3NpZ25hbC5oPgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHNpZ3ZlYyBzaWdhY3Rpb25fdDsKKworI2RlZmluZSBzaWdzZXRfdCBfbmNfc2lnc2V0X3QKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKworI3VuZGVmICBzYV9tYXNrCisjZGVmaW5lIHNhX21hc2sgc3ZfbWFzaworI3VuZGVmICBzYV9oYW5kbGVyCisjZGVmaW5lIHNhX2hhbmRsZXIgc3ZfaGFuZGxlcgorI3VuZGVmICBzYV9mbGFncworI2RlZmluZSBzYV9mbGFncyBzdl9mbGFncworCisjdW5kZWYgIHNpZ2FjdGlvbgorI2RlZmluZSBzaWdhY3Rpb24gICBfbmNfc2lnYWN0aW9uCisjdW5kZWYgIHNpZ3Byb2NtYXNrCisjZGVmaW5lIHNpZ3Byb2NtYXNrIF9uY19zaWdwcm9jbWFzaworI3VuZGVmICBzaWdlbXB0eXNldAorI2RlZmluZSBzaWdlbXB0eXNldCBfbmNfc2lnZW1wdHlzZXQKKyN1bmRlZiAgc2lnc3VzcGVuZAorI2RlZmluZSBzaWdzdXNwZW5kICBfbmNfc2lnc3VzcGVuZAorI3VuZGVmICBzaWdkZWxzZXQKKyNkZWZpbmUgc2lnZGVsc2V0ICAgX25jX3NpZ2RlbHNldAorI3VuZGVmICBzaWdhZGRzZXQKKyNkZWZpbmUgc2lnYWRkc2V0ICAgX25jX3NpZ2FkZHNldAorCisvKiB0dHkvbGliX3RzdHAuYyBpcyB0aGUgb25seSB1c2VyICovCisjaW5jbHVkZSA8YmFzZS9zaWdhY3Rpb24uYz4KKworI2VuZGlmIC8qIEhBVkVfU0lHVkVDICovCisjZW5kaWYgLyogSEFWRV9TSUdBQ1RJT04gKi8KKyNlbmRpZiAvKiAhZGVmaW5lZChfU0lHQUNUSU9OX0gpICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvTUtrZXluYW1lLmF3ayBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9NS2tleW5hbWUuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNWJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvTUtrZXluYW1lLmF3awpAQCAtMCwwICsxLDE2MSBAQAorIyAkSWQ6IE1La2V5bmFtZS5hd2ssdiAxLjQwIDIwMDgvMDcvMTIgMTg6NDA6MDAgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitCRUdJTiB7CisJcHJpbnQgIi8qIGdlbmVyYXRlZCBieSBNS2tleW5hbWUuYXdrICovIgorCXByaW50ICIiCisJcHJpbnQgIiNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPiIKKwlwcmludCAiI2luY2x1ZGUgPHRpYy5oPiIKKwlwcmludCAiI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4iCisJcHJpbnQgIiIKKwlmaXJzdCA9IDE7Cit9CisKKy9eW14jXS8geworCQlpZiAoYmlnc3RyaW5ncykgeworCQkJaWYgKGZpcnN0KSAgeworCQkJCXByaW50ICJzdHJ1Y3Qga24geyBzaG9ydCBvZmZzZXQ7IGludCBjb2RlOyB9OyIKKwkJCQlwcmludCAic3RhdGljIGNvbnN0IHN0cnVjdCBrbiBfbmNfa2V5X25hbWVzW10gPSB7IgorCQkJfQorCQkJcHJpbnRmICJcdHsgJWQsICVzIH0sXG4iLCBvZmZzZXQsICQxCisJCQlvZmZzZXQgKz0gbGVuZ3RoKCQxKSArIDEKKwkJCW5hbWVzID0gbmFtZXMiXG5cdFwiIiQxIlxcMFwiIgorCQl9IGVsc2UgeworCQkJaWYgKGZpcnN0KSB7CisJCQkJcHJpbnQgInN0cnVjdCBrbiB7IGNvbnN0IGNoYXIgKm5hbWU7IGludCBjb2RlOyB9OyIKKwkJCQlwcmludCAic3RhdGljIGNvbnN0IHN0cnVjdCBrbiBfbmNfa2V5X25hbWVzW10gPSB7IgorCQkJfQorCQkJcHJpbnRmICJcdHsgXCIlc1wiLCAlcyB9LFxuIiwgJDEsICQxOworCQl9CisJCWZpcnN0ID0gMDsKKwl9CisKK0VORCB7CisJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJcHJpbnRmICJcdHsgLTEsIDAgfX07XG4iCisJCXByaW50ICIiCisJCXByaW50ICJzdGF0aWMgY29uc3QgY2hhciBrZXlfbmFtZXNbXSA9ICJuYW1lcyI7IgorCX0gZWxzZSB7CisJCXByaW50ZiAiXHR7IDAsIDAgfX07XG4iCisJfQorCXByaW50ICIiCisJcHJpbnQgIiNkZWZpbmUgU0laRU9GX1RBQkxFIDI1NiIKKwlwcmludCAiI2RlZmluZSBNeVRhYmxlIF9uY19nbG9iYWxzLmtleW5hbWVfdGFibGUiCisJcHJpbnQgIiIKKwlwcmludCAiTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCBjaGFyICopIF9uY19rZXluYW1lIChTQ1JFRU4gKnNwLCBpbnQgYykiCisJcHJpbnQgInsiCisJcHJpbnQgIglpbnQgaTsiCisJcHJpbnQgIgljaGFyIG5hbWVbMjBdOyIKKwlwcmludCAiCWNoYXIgKnA7IgorCXByaW50ICIJTkNVUlNFU19DT05TVCBjaGFyICpyZXN1bHQgPSAwOyIKKwlwcmludCAiIgorCXByaW50ICIJaWYgKGMgPT0gLTEpIHsiCisJcHJpbnQgIgkJcmVzdWx0ID0gXCItMVwiOyIKKwlwcmludCAiCX0gZWxzZSB7IgorCWlmIChiaWdzdHJpbmdzKSB7CisJCXByaW50ICIJCWZvciAoaSA9IDA7IF9uY19rZXlfbmFtZXNbaV0ub2Zmc2V0ICE9IC0xOyBpKyspIHsiCisJCXByaW50ICIJCQlpZiAoX25jX2tleV9uYW1lc1tpXS5jb2RlID09IGMpIHsiCisJCXByaW50ICIJCQkJcmVzdWx0ID0gKE5DVVJTRVNfQ09OU1QgY2hhciAqKWtleV9uYW1lcyArIF9uY19rZXlfbmFtZXNbaV0ub2Zmc2V0OyIKKwkJcHJpbnQgIgkJCQlicmVhazsiCisJCXByaW50ICIJCQl9IgorCQlwcmludCAiCQl9IgorCX0gZWxzZSB7CisJCXByaW50ICIJCWZvciAoaSA9IDA7IF9uY19rZXlfbmFtZXNbaV0ubmFtZSAhPSAwOyBpKyspIHsiCisJCXByaW50ICIJCQlpZiAoX25jX2tleV9uYW1lc1tpXS5jb2RlID09IGMpIHsiCisJCXByaW50ICIJCQkJcmVzdWx0ID0gKE5DVVJTRVNfQ09OU1QgY2hhciAqKV9uY19rZXlfbmFtZXNbaV0ubmFtZTsiCisJCXByaW50ICIJCQkJYnJlYWs7IgorCQlwcmludCAiCQkJfSIKKwkJcHJpbnQgIgkJfSIKKwl9CisJcHJpbnQgIiIKKwlwcmludCAiCQlpZiAocmVzdWx0ID09IDAgJiYgKGMgPj0gMCAmJiBjIDwgU0laRU9GX1RBQkxFKSkgeyIKKwlwcmludCAiCQkJaWYgKE15VGFibGUgPT0gMCkiCisJcHJpbnQgIgkJCQlNeVRhYmxlID0gdHlwZUNhbGxvYyhjaGFyICosIFNJWkVPRl9UQUJMRSk7IgorCXByaW50ICIJCQlpZiAoTXlUYWJsZSAhPSAwKSB7IgorCXByaW50ICIJCQkJaWYgKE15VGFibGVbY10gPT0gMCkgeyIKKwlwcmludCAiCQkJCQlpbnQgY2MgPSBjOyIKKwlwcmludCAiCQkJCQlwID0gbmFtZTsiCisJcHJpbnQgIgkJCQkJaWYgKGNjID49IDEyOCAmJiAoc3AgPT0gMCB8fCBzcC0+X3VzZV9tZXRhKSkgeyIKKwlwcmludCAiCQkJCQkJc3RyY3B5KHAsIFwiTS1cIik7IgorCXByaW50ICIJCQkJCQlwICs9IDI7IgorCXByaW50ICIJCQkJCQljYyAtPSAxMjg7IgorCXByaW50ICIJCQkJCX0iCisJcHJpbnQgIgkJCQkJaWYgKGNjIDwgMzIpIgorCXByaW50ICIJCQkJCQlzcHJpbnRmKHAsIFwiXiVjXCIsIGNjICsgJ0AnKTsiCisJcHJpbnQgIgkJCQkJZWxzZSBpZiAoY2MgPT0gMTI3KSIKKwlwcmludCAiCQkJCQkJc3RyY3B5KHAsIFwiXj9cIik7IgorCXByaW50ICIJCQkJCWVsc2UiCisJcHJpbnQgIgkJCQkJCXNwcmludGYocCwgXCIlY1wiLCBjYyk7IgorCXByaW50ICIJCQkJCU15VGFibGVbY10gPSBzdHJkdXAobmFtZSk7IgorCXByaW50ICIJCQkJfSIKKwlwcmludCAiCQkJCXJlc3VsdCA9IE15VGFibGVbY107IgorCXByaW50ICIJCQl9IgorCXByaW50ICIjaWYgTkNVUlNFU19FWFRfRlVOQ1MgJiYgTkNVUlNFU19YTkFNRVMiCisJcHJpbnQgIgkJfSBlbHNlIGlmIChyZXN1bHQgPT0gMCAmJiBjdXJfdGVybSAhPSAwKSB7IgorCXByaW50ICIJCQlpbnQgaiwgazsiCisJcHJpbnQgIgkJCWNoYXIgKiBib3VuZDsiCisJcHJpbnQgIgkJCVRFUk1UWVBFICp0cCA9ICYoY3VyX3Rlcm0tPnR5cGUpOyIKKwlwcmludCAiCQkJaW50IHNhdmVfdHJhY2UgPSBfbmNfdHJhY2luZzsiCisJcHJpbnQgIiIKKwlwcmludCAiCQkJX25jX3RyYWNpbmcgPSAwOwkvKiBwcmV2ZW50IHJlY3Vyc2lvbiB2aWEga2V5Ym91bmQoKSAqLyIKKwlwcmludCAiCQkJZm9yIChqID0gMDsgKGJvdW5kID0ga2V5Ym91bmQoYywgaikpICE9IDA7ICsraikgeyIKKwlwcmludCAiCQkJCWZvcihrID0gU1RSQ09VTlQ7IGsgPCAoaW50KSBOVU1fU1RSSU5HUyh0cCk7ICBrKyspIHsiCisJcHJpbnQgIgkJCQkJaWYgKHRwLT5TdHJpbmdzW2tdICE9IDAgJiYgIXN0cmNtcChib3VuZCwgdHAtPlN0cmluZ3Nba10pKSB7IgorCXByaW50ICIJCQkJCQlyZXN1bHQgPSBFeHRTdHJuYW1lKHRwLCBrLCBzdHJuYW1lcyk7IgorCXByaW50ICIJCQkJCQlicmVhazsiCisJcHJpbnQgIgkJCQkJfSIKKwlwcmludCAiCQkJCX0iCisJcHJpbnQgIgkJCQlmcmVlKGJvdW5kKTsiCisJcHJpbnQgIgkJCQlpZiAocmVzdWx0ICE9IDApIgorCXByaW50ICIJCQkJCWJyZWFrOyIKKwlwcmludCAiCQkJfSIKKwlwcmludCAiCQkJX25jX3RyYWNpbmcgPSBzYXZlX3RyYWNlOyIKKwlwcmludCAiI2VuZGlmIgorCXByaW50ICIJCX0iCisJcHJpbnQgIgl9IgorCXByaW50ICIJcmV0dXJuIHJlc3VsdDsiCisJcHJpbnQgIn0iCisJcHJpbnQgIiIKKwlwcmludCAiTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCBjaGFyICopIGtleW5hbWUgKGludCBjKSIKKwlwcmludCAieyIKKwlwcmludCAiXHRyZXR1cm4gX25jX2tleW5hbWUoU1AsIGMpOyIKKwlwcmludCAifSIKKwlwcmludCAiIgorCXByaW50ICIjaWYgTk9fTEVBS1MiCisJcHJpbnQgInZvaWQgX25jX2tleW5hbWVfbGVha3Modm9pZCkiCisJcHJpbnQgInsiCisJcHJpbnQgIglpbnQgajsiCisJcHJpbnQgIglpZiAoTXlUYWJsZSAhPSAwKSB7IgorCXByaW50ICIJCWZvciAoaiA9IDA7IGogPCBTSVpFT0ZfVEFCTEU7ICsraikgeyIKKwlwcmludCAiCQkJRnJlZUlmTmVlZGVkKE15VGFibGVbal0pOyIKKwlwcmludCAiCQl9IgorCXByaW50ICIJCUZyZWVBbmROdWxsKE15VGFibGUpOyIKKwlwcmludCAiCX0iCisJcHJpbnQgIn0iCisJcHJpbnQgIiNlbmRpZiAvKiBOT19MRUFLUyAqLyIKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9NS2xpYl9nZW4uc2ggYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvTUtsaWJfZ2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5ODRlODUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvTUtsaWJfZ2VuLnNoCkBAIC0wLDAgKzEsNDI5IEBACisjIS9iaW4vc2gKKyMKKyMgTUtsaWJfZ2VuLnNoIC0tIGdlbmVyYXRlIHNvdXJjZXMgZnJvbSBjdXJzZXMuaCBtYWNybyBkZWZpbml0aW9ucworIworIyAoJElkOiBNS2xpYl9nZW4uc2gsdiAxLjM0IDIwMDgvMDgvMzAgMTk6MjA6NTAgdG9tIEV4cCAkKQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGUgWFNJIEN1cnNlcyBzdGFuZGFyZCByZXF1aXJlcyBhbGwgY3Vyc2VzIGVudHJ5IHBvaW50cyB0byBleGlzdCBhcworIyBmdW5jdGlvbnMsIGV2ZW4gdGhvdWdoIG1hbnkgZGVmaW5pdGlvbnMgd291bGQgbm9ybWFsbHkgYmUgc2hhZG93ZWQKKyMgYnkgbWFjcm9zLiAgUmF0aGVyIHRoYW4gaGFuZC1oYWNrIGFsbCB0aGF0IGNvZGUsIHdlIGFjdHVhbGx5CisjIGdlbmVyYXRlIGZ1bmN0aW9ucyBmcm9tIHRoZSBtYWNyb3MuCisjCisjIFRoaXMgc2NyaXB0IGFjY2VwdHMgYSBmaWxlIG9mIHByb3RvdHlwZXMgb24gc3RhbmRhcmQgaW5wdXQuICBJdCBkaXNjYXJkcworIyBhbnkgdGhhdCBkb24ndCBoYXZlIGEgYGdlbmVyYXRlZCcgY29tbWVudCBhdHRhY2hlZC4gSXQgdGhlbiBwYXJzZXMgZWFjaAorIyBwcm90b3R5cGUgKHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCBub25lIG9mIHRoZSBtYWNyb3MgdGFrZSBmdW5jdGlvbgorIyBwb2ludGVyIG9yIGFycmF5IGFyZ3VtZW50cykgYW5kIGdlbmVyYXRlcyBDIHNvdXJjZSBmcm9tIGl0LgorIworIyBIZXJlIGlzIHdoYXQgdGhlIHBpcGVsaW5lIHN0YWdlcyBhcmUgZG9pbmc6CisjCisjIDEuIHNlZDogZXh0cmFjdCBwcm90b3R5cGVzIG9mIGdlbmVyYXRlZCBmdW5jdGlvbnMKKyMgMi4gc2VkOiBkZWNvcmF0ZSBwcm90b3R5cGVzIHdpdGggZ2VuZXJhdGVkIGFyZ3VtZW50cyBhMS4gYTIsLi4uegorIyAzLiBhd2s6IGdlbmVyYXRlIHRoZSBjYWxscyB3aXRoIGFyZ3MgbWF0Y2hpbmcgdGhlIGZvcm1hbHMKKyMgNC4gc2VkOiBwcmVmaXggZnVuY3Rpb24gbmFtZXMgaW4gcHJvdG90eXBlcyBzbyB0aGUgcHJlcHJvY2Vzc29yIHdvbid0IGV4cGFuZAorIyAgICAgICAgIHRoZW0uCisjIDUuIGNwcDogbWFjcm8tZXhwYW5kIHRoZSBmaWxlIHNvIHRoZSBtYWNybyBjYWxscyB0dXJuIGludG8gQyBjYWxscworIyA2LiBhd2s6IHN0cmlwIHRoZSBleHBhbnNpb24ganVuayBvZmYgdGhlIGZyb250IGFuZCBhZGQgdGhlIG5ldyBoZWFkZXIKKyMgNy4gc2VkOiBzcXVlZXplIHNwYWNlcywgc3RyaXAgb2ZmIGdlbl8gcHJlZml4LCBjcmVhdGUgbmVlZGVkICN1bmRlZgorIworCisjIGtlZXAgdGhlIGVkaXRpbmcgaW5kZXBlbmRlbnQgb2YgbG9jYWxlOgoraWYgdGVzdCAiJHtMQU5HVUFHRStzZXR9IiAgICA9IHNldDsgdGhlbiBMQU5HVUFHRT1DOyAgICBleHBvcnQgTEFOR1VBR0U7ICAgIGZpCitpZiB0ZXN0ICIke0xBTkcrc2V0fSIgICAgICAgID0gc2V0OyB0aGVuIExBTkc9QzsgICAgICAgIGV4cG9ydCBMQU5HOyAgICAgICAgZmkKK2lmIHRlc3QgIiR7TENfQUxMK3NldH0iICAgICAgPSBzZXQ7IHRoZW4gTENfQUxMPUM7ICAgICAgZXhwb3J0IExDX0FMTDsgICAgICBmaQoraWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCitpZiB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICAgID0gc2V0OyB0aGVuIExDX0NUWVBFPUM7ICAgIGV4cG9ydCBMQ19DVFlQRTsgICAgZmkKK2lmIHRlc3QgIiR7TENfQ09MTEFURStzZXR9IiAgPSBzZXQ7IHRoZW4gTENfQ09MTEFURT1DOyAgZXhwb3J0IExDX0NPTExBVEU7ICBmaQorCitwcmVwcm9jZXNzb3I9IiQxIC1ETkNVUlNFU19JTlRFUk5BTFMgLUkuLi9pbmNsdWRlIgorQVdLPSIkMiIKK1VTRT0iJDMiCisKK1BJRD0kJAorRUQxPXNlZDFfJHtQSUR9LnNlZAorRUQyPXNlZDJfJHtQSUR9LnNlZAorRUQzPXNlZDNfJHtQSUR9LnNlZAorRUQ0PXNlZDRfJHtQSUR9LnNlZAorQVcxPWF3azFfJHtQSUR9LmF3aworQVcyPWF3azJfJHtQSUR9LmF3aworVE1QPWdlbl9fJHtQSUR9LmMKK3RyYXAgInJtIC1mICRFRDEgJEVEMiAkRUQzICRFRDQgJEFXMSAkQVcyICRUTVAiIDAgMSAyIDUgMTUKKworQUxMPSRVU0UKK2lmIHRlc3QgIiRVU0UiID0gaW1wbGVtZW50ZWQgOyB0aGVuCisJQ0FMTD0iY2FsbF8iCisJY2F0ID4kRUQxIDw8RU9GMQorL15leHRlcm4uKmltcGxlbWVudGVkL3sKKwloCisJcy9eLippbXBsZW1lbnRlZDpcKFteIAkqXSpcKS4qL1BfUE9VTkRDaWZfVVNFX1wxX1NVUFBPUlQvcAorCWcKKwlzL15leHRlcm4gXChbXjtdKlwpOy4qL1wxL3AKKwlnCisJcy9eLippbXBsZW1lbnRlZDpcKFteIAkqXSpcKS4qL1BfUE9VTkRDZW5kaWYvcAorfQorL15leHRlcm4uKmdlbmVyYXRlZC97CisJaAorCXMvXi4qZ2VuZXJhdGVkOlwoW14gCSpdKlwpLiovUF9QT1VORENpZl9VU0VfXDFfU1VQUE9SVC9wCisJZworCXMvXmV4dGVybiBcKFteO10qXCk7LiovXDEvcAorCWcKKwlzL14uKmdlbmVyYXRlZDpcKFteIAkqXSpcKS4qL1BfUE9VTkRDZW5kaWYvcAorfQorRU9GMQorZWxzZQorCUNBTEw9IiIKKwljYXQgPiRFRDEgPDxFT0YxCisvXmV4dGVybi4qJHtBTEx9L3sKKwloCisJcy9eLioke0FMTH06XChbXiAJKl0qXCkuKi9QX1BPVU5EQ2lmX1VTRV9cMV9TVVBQT1JUL3AKKwlnCisJcy9eZXh0ZXJuIFwoW147XSpcKTsuKi9cMS9wCisJZworCXMvXi4qJHtBTEx9OlwoW14gCSpdKlwpLiovUF9QT1VORENlbmRpZi9wCit9CitFT0YxCitmaQorCitjYXQgPiRFRDIgPDxFT0YyCisvXlBfL2IgbmMKKy8odm9pZCkvYiBuYworCXMvLC8gYTElIC8KKwlzLywvIGEyJSAvCisJcy8sLyBhMyUgLworCXMvLC8gYTQlIC8KKwlzLywvIGE1JSAvCisJcy8sLyBhNiUgLworCXMvLC8gYTclIC8KKwlzLywvIGE4JSAvCisJcy8sLyBhOSUgLworCXMvLC8gYTEwJSAvCisJcy8sLyBhMTElIC8KKwlzLywvIGExMiUgLworCXMvLC8gYTEzJSAvCisJcy8sLyBhMTQlIC8KKwlzLywvIGExNSUgLworCXMvKi8gKiAvZworCXMvJS8gLCAvZworCXMvKS8geikvCisJcy9cLlwuXC4geikvLi4uKS8KKzpuYworCXMvKC8gKCAvCisJcy8pLyApLworRU9GMgorCitjYXQgPiRFRDMgPDxFT0YzCisvXlBfL3sKKwlzL15QX1BPVU5EQ2lmXy8jaWYgLworCXMvXlBfUE9VTkRDZW5kaWYvI2VuZGlmLworCXMvXlBfLy8KKwliIGRvbmUKK30KKwlzLwkJKi8gL2cKKwlzLyAgKi8gL2cKKwlzLyAsLywvZworCXMvKCAvKC9nCisJcy8gKS8pL2cKKwlzLyBnZW5fLyAvCisJcy9eTV8vI3VuZGVmIC8KKwlzL15bIAldKkBbIAldKkBbIAldKi8JLworOmRvbmUKK0VPRjMKKworaWYgdGVzdCAiJFVTRSIgPSBnZW5lcmF0ZWQgOyB0aGVuCitjYXQgPiRFRDQgPDxFT0YKKwlzL15cKC4qXCkgXCguKlwpIChcKC4qXCkpXCQvTkNVUlNFU19FWFBPUlQoXDEpIFwyIChcMykvCitFT0YKK2Vsc2UKK2NhdCA+JEVENCA8PEVPRgorL15cKC4qXCkgXCguKlwpIChcKC4qXCkpXCQvIHsKKwloCisJcy9eXCguKlwpIFwoLipcKSAoXCguKlwpKVwkL2V4dGVybiBcMSBjYWxsX1wyIChcMyk7LworCXAKKwlnCisJcy9eXCguKlwpIFwoLipcKSAoXCguKlwpKVwkL1wxIGNhbGxfXDIgKFwzKS8KKwl9CitFT0YKK2ZpCisKK2NhdCA+JEFXMSA8PFxFT0YxCitCRUdJTgl7CisJCXNraXA9MDsKKwl9CisvXlBfUE9VTkRDaWYvIHsKKwkJcHJpbnQgIlxuIgorCQlwcmludCAkMAorCQlza2lwPTA7Cit9CisvXlBfUE9VTkRDZW5kaWYvIHsKKwkJcHJpbnQgJDAKKwkJc2tpcD0xOworfQorJDAgIX4gL15QXy8geworCWlmIChza2lwKQorCQlwcmludCAiXG4iCisJc2tpcD0xOworCisJZmlyc3Q9JDEKKwlmb3IgKGkgPSAxOyBpIDw9IE5GOyBpKyspIHsKKwkJaWYgKCAkaSAhPSAiTkNVUlNFU19DT05TVCIgKSB7CisJCQlmaXJzdCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzZWNvbmQgPSBmaXJzdCArIDE7CisJaWYgKCAkZmlyc3QgPT0gImNodHlwZSIgKSB7CisJCXJldHVyblR5cGUgPSAiQ2hhciI7CisJfSBlbHNlIGlmICggJGZpcnN0ID09ICJTQ1JFRU4iICkgeworCQlyZXR1cm5UeXBlID0gIlNQIjsKKwl9IGVsc2UgaWYgKCAkZmlyc3QgPT0gIldJTkRPVyIgKSB7CisJCXJldHVyblR5cGUgPSAiV2luIjsKKwl9IGVsc2UgaWYgKCAkZmlyc3QgPT0gImF0dHJfdCIgfHwgJHNlY29uZCA9PSAiYXR0cnNldCIgfHwgJHNlY29uZCA9PSAic3RhbmRvdXQiIHx8ICRzZWNvbmQgPT0gInN0YW5kZW5kIiB8fCAkc2Vjb25kID09ICJ3YXR0cnNldCIgfHwgJHNlY29uZCA9PSAid3N0YW5kb3V0IiB8fCAkc2Vjb25kID09ICJ3c3RhbmRlbmQiICkgeworCQlyZXR1cm5UeXBlID0gIkF0dHIiOworCX0gZWxzZSBpZiAoICRmaXJzdCA9PSAiYm9vbCIgfHwgJGZpcnN0ID09ICJOQ1VSU0VTX0JPT0wiICkgeworCQlyZXR1cm5UeXBlID0gIkJvb2wiOworCX0gZWxzZSBpZiAoICRzZWNvbmQgPT0gIioiICkgeworCQlyZXR1cm5UeXBlID0gIlB0ciI7CisJfSBlbHNlIHsKKwkJcmV0dXJuVHlwZSA9ICJDb2RlIjsKKwl9CisJbXlmdW5jID0gc2Vjb25kOworCWZvciAoaSA9IHNlY29uZDsgaSA8PSBORjsgaSsrKSB7CisJCWlmICgkaSAhPSAiKiIpIHsKKwkJCW15ZnVuYyA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodXNpbmcgPT0gImdlbmVyYXRlZCIpIHsKKwkJcHJpbnQgIk1fIiAkbXlmdW5jCisJfQorCXByaW50ICQwOworCXByaW50ICJ7IjsKKwlhcmdjb3VudCA9IDE7CisJY2hlY2sgPSBORiAtIDE7CisJaWYgKCRjaGVjayA9PSAidm9pZCIpCisJCWFyZ2NvdW50ID0gMDsKKwlpZiAoYXJnY291bnQgIT0gMCkgeworCQlmb3IgKGkgPSAxOyBpIDw9IE5GOyBpKyspCisJCQlpZiAoJGkgPT0gIiwiKQorCQkJCWFyZ2NvdW50Kys7CisJfQorCisJIyBzdXBwcmVzcyB0cmFjZS1jb2RlIGZvciBmdW5jdGlvbnMgdGhhdCB3ZSBjYW5ub3QgZG8gcHJvcGVybHkgaGVyZSwKKwkjIHNpbmNlIHRoZXkgcmV0dXJuIGRhdGEuCisJZG90cmFjZSA9IDE7CisJaWYgKCRteWZ1bmMgfiAvaW5uc3RyLykKKwkJZG90cmFjZSA9IDA7CisJaWYgKCRteWZ1bmMgfiAvaW5ud3N0ci8pCisJCWRvdHJhY2UgPSAwOworCisJIyB3b3JrYXJvdW5kIGZ1bmN0aW9ucyB0aGF0IHdlIGRvIG5vdCBwYXJzZSBwcm9wZXJseQorCWlmICgkbXlmdW5jIH4gL3JpcG9mZmxpbmUvKSB7CisJCWRvdHJhY2UgPSAwOworCQlhcmdjb3VudCA9IDI7CisJfQorCWlmICgkbXlmdW5jIH4gL3d1bmN0cmwvKSB7CisJCWRvdHJhY2UgPSAwOworCX0KKworCWNhbGwgPSAiQEBUKChUX0NBTExFRChcIiIKKwlhcmdzID0gIiIKKwljb21tYSA9ICIiCisJbnVtID0gMDsKKwlwb2ludGVyID0gMDsKKwl2YV9saXN0ID0gMDsKKwl2YXJhcmdzID0gMDsKKwlhcmd0eXBlID0gIiIKKwlmb3IgKGkgPSBteWZ1bmM7IGkgPD0gTkY7IGkrKykgeworCQljaCA9ICRpOworCQlpZiAoIGNoID09ICIqIiApCisJCQlwb2ludGVyID0gMTsKKwkJZWxzZSBpZiAoIGNoID09ICJ2YV9saXN0IiApCisJCQl2YV9saXN0ID0gMTsKKwkJZWxzZSBpZiAoIGNoID09ICIuLi4iICkKKwkJCXZhcmFyZ3MgPSAxOworCQllbHNlIGlmICggY2ggPT0gImNoYXIiICkKKwkJCWFyZ3R5cGUgPSAiY2hhciI7CisJCWVsc2UgaWYgKCBjaCA9PSAiaW50IiApCisJCQlhcmd0eXBlID0gImludCI7CisJCWVsc2UgaWYgKCBjaCA9PSAic2hvcnQiICkKKwkJCWFyZ3R5cGUgPSAic2hvcnQiOworCQllbHNlIGlmICggY2ggPT0gImNodHlwZSIgKQorCQkJYXJndHlwZSA9ICJjaHR5cGUiOworCQllbHNlIGlmICggY2ggPT0gImF0dHJfdCIgfHwgY2ggPT0gIk5DVVJTRVNfQVRUUl9UIiApCisJCQlhcmd0eXBlID0gImF0dHIiOworCisJCWlmICggY2ggPT0gIiwiIHx8IGNoID09ICIpIiApIHsKKwkJCWlmICh2YV9saXN0KSB7CisJCQkJY2FsbCA9IGNhbGwgIiVzIgorCQkJfSBlbHNlIGlmICh2YXJhcmdzKSB7CisJCQkJY2FsbCA9IGNhbGwgIiVzIgorCQkJfSBlbHNlIGlmIChwb2ludGVyKSB7CisJCQkJaWYgKCBhcmd0eXBlID09ICJjaGFyIiApIHsKKwkJCQkJY2FsbCA9IGNhbGwgIiVzIgorCQkJCQljb21tYSA9IGNvbW1hICJfbmNfdmlzYnVmMigiIG51bSAiLCIKKwkJCQkJcG9pbnRlciA9IDA7CisJCQkJfSBlbHNlCisJCQkJCWNhbGwgPSBjYWxsICIlcCIKKwkJCX0gZWxzZSBpZiAoYXJnY291bnQgIT0gMCkgeworCQkJCWlmICggYXJndHlwZSA9PSAiaW50IiB8fCBhcmd0eXBlID09ICJzaG9ydCIgKSB7CisJCQkJCWNhbGwgPSBjYWxsICIlZCIKKwkJCQkJYXJndHlwZSA9ICIiCisJCQkJfSBlbHNlIGlmICggYXJndHlwZSAhPSAiIiApIHsKKwkJCQkJY2FsbCA9IGNhbGwgIiVzIgorCQkJCQljb21tYSA9IGNvbW1hICJfdHJhY2UiIGFyZ3R5cGUgIjIoIiBudW0gIiwiCisJCQkJfSBlbHNlIHsKKwkJCQkJY2FsbCA9IGNhbGwgIiUjbHgiCisJCQkJCWNvbW1hID0gY29tbWEgIihsb25nKSIKKwkJCQl9CisJCQl9CisJCQlpZiAoY2ggPT0gIiwiKSB7CisJCQkJYXJncyA9IGFyZ3MgY29tbWEgImEiICsrbnVtOworCQkJfSBlbHNlIGlmICggYXJnY291bnQgIT0gMCApIHsKKwkJCQlpZiAoIHZhX2xpc3QgKSB7CisJCQkJCWFyZ3MgPSBhcmdzIGNvbW1hICJcInZhX2xpc3RcIiIKKwkJCQl9IGVsc2UgaWYgKCB2YXJhcmdzICkgeworCQkJCQlhcmdzID0gYXJncyBjb21tYSAiXCIuLi5cIiIKKwkJCQl9IGVsc2UgeworCQkJCQlhcmdzID0gYXJncyBjb21tYSAieiIKKwkJCQl9CisJCQl9CisJCQljYWxsID0gY2FsbCBjaAorCQkJaWYgKHBvaW50ZXIgPT0gMCAmJiBhcmdjb3VudCAhPSAwICYmIGFyZ3R5cGUgIT0gIiIgKQorCQkJCWFyZ3MgPSBhcmdzICIpIgorCQkJaWYgKGFyZ3MgIT0gIiIpCisJCQkJY29tbWEgPSAiLCAiCisJCQlwb2ludGVyID0gMDsKKwkJCWFyZ3R5cGUgPSAiIgorCQl9CisJCWlmICggaSA9PSAyIHx8IGNoID09ICIoIiApCisJCQljYWxsID0gY2FsbCBjaAorCX0KKwljYWxsID0gY2FsbCAiXCIpIgorCWlmIChhcmdzICE9ICIiKQorCQljYWxsID0gY2FsbCAiLCAiIGFyZ3MKKwljYWxsID0gY2FsbCAiKSk7ICIKKworCWlmIChkb3RyYWNlKQorCQlwcmludGYgIiVzIiwgY2FsbAorCisJaWYgKG1hdGNoKCQwLCAiXnZvaWQiKSkKKwkJY2FsbCA9ICIiCisJZWxzZSBpZiAoZG90cmFjZSkKKwkJY2FsbCA9IHNwcmludGYoInJldHVybiVzKCAiLCByZXR1cm5UeXBlKTsKKwllbHNlCisJCWNhbGwgPSAiQEByZXR1cm4gIjsKKworCWNhbGwgPSBjYWxsICRteWZ1bmMgIigiOworCWZvciAoaSA9IDE7IGkgPCBhcmdjb3VudDsgaSsrKSB7CisJCWlmIChpICE9IDEpCisJCQljYWxsID0gY2FsbCAiLCAiOworCQljYWxsID0gY2FsbCAiYSIgaTsKKwl9CisJaWYgKCBhcmdjb3VudCAhPSAwICYmICRjaGVjayAhPSAiLi4uIiApIHsKKwkJaWYgKGFyZ2NvdW50ICE9IDEpCisJCQljYWxsID0gY2FsbCAiLCAiOworCQljYWxsID0gY2FsbCAieiI7CisJfQorCWlmICghbWF0Y2goJDAsICJedm9pZCIpKQorCQljYWxsID0gY2FsbCAiKSAiOworCWlmIChkb3RyYWNlKQorCQljYWxsID0gY2FsbCAiKSI7CisJcHJpbnQgY2FsbCAiOyIKKworCWlmIChtYXRjaCgkMCwgIl52b2lkIikpCisJCXByaW50ICJAQHJldHVyblZvaWQ7IgorCXByaW50ICJ9IjsKK30KK0VPRjEKKworY2F0ID4kQVcyIDw8RU9GMQorQkVHSU4JCXsKKwkJcHJpbnQgIi8qIgorCQlwcmludCAiICogRE8gTk9UIEVESVQgVEhJUyBGSUxFIEJZIEhBTkQhIgorCQlwcmludGYgIiAqIEl0IGlzIGdlbmVyYXRlZCBieSAkMCAlcy5cbiIsICIkVVNFIgorCQlpZiAoICIkVVNFIiA9PSAiZ2VuZXJhdGVkIiApIHsKKwkJCXByaW50ICIgKiIKKwkJCXByaW50ICIgKiBUaGlzIGlzIGEgZmlsZSBvZiB0cml2aWFsIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgZnJvbSBtYWNybyIKKwkJCXByaW50ICIgKiBkZWZpbml0aW9ucyBpbiBjdXJzZXMuaCB0byBzYXRpc2Z5IHRoZSBYU0kgQ3Vyc2VzIHJlcXVpcmVtZW50IgorCQkJcHJpbnQgIiAqIHRoYXQgZXZlcnkgbWFjcm8gYWxzbyBleGlzdCBhcyBhIGNhbGxhYmxlIGZ1bmN0aW9uLiIKKwkJCXByaW50ICIgKiIKKwkJCXByaW50ICIgKiBJdCB3aWxsIG5ldmVyIGJlIGxpbmtlZCB1bmxlc3MgeW91IGNhbGwgb25lIG9mIHRoZSBlbnRyeSIKKwkJCXByaW50ICIgKiBwb2ludHMgd2l0aCBpdHMgbm9ybWFsIG1hY3JvIGRlZmluaXRpb24gZGlzYWJsZWQuICBJbiB0aGF0IgorCQkJcHJpbnQgIiAqIGNhc2UsIGlmIHlvdSBoYXZlIG5vIHNoYXJlZCBsaWJyYXJpZXMsIGl0IHdpbGwgaW5kaXJlY3RseSIKKwkJCXByaW50ICIgKiBwdWxsIG1vc3Qgb2YgdGhlIHJlc3Qgb2YgdGhlIGxpYnJhcnkgaW50byB5b3VyIGxpbmsgaW1hZ2UuIgorCQl9CisJCXByaW50ICIgKi8iCisJCXByaW50ICIjZGVmaW5lIE5DVVJTRVNfQVRUUl9UIGludCIKKwkJcHJpbnQgIiNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPiIKKwkJcHJpbnQgIiIKKwkJfQorL15ERUNMQVJBVElPTlMvCXtzdGFydCA9IDE7IG5leHQ7fQorCQl7aWYgKHN0YXJ0KSBwcmludCBcJDA7fQorRU5ECQl7CisJCWlmICggIiRVU0UiICE9ICJnZW5lcmF0ZWQiICkgeworCQkJcHJpbnQgImludCBtYWluKHZvaWQpIHsgcmV0dXJuIDA7IH0iCisJCX0KKwkJfQorRU9GMQorCitjYXQgPiRUTVAgPDxFT0YKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorI3VuZGVmIE5DVVJTRVNfTk9NQUNST1MKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKworREVDTEFSQVRJT05TCisKK0VPRgorCitzZWQgLW4gLWYgJEVEMSBcCit8IHNlZCAtZSAncy9OQ1VSU0VTX0VYUE9SVChcKC4qXCkpIFwoLipcKSAoXCguKlwpKS9cMSBcMihcMykvJyBcCit8IHNlZCAtZiAkRUQyIFwKK3wgJEFXSyAtZiAkQVcxIHVzaW5nPSRVU0UgXAorfCBzZWQgXAorCS1lICdzLyBbIF0qJC8vZycgXAorCS1lICdzL15cKFthLXpBLVpfXVthLXpBLVpfXSpbICpdKlwpL1wxIGdlbl8vJyBcCisJLWUgJ3MvZ2VuXyQvLycgXAorCS1lICdzLyAgLyAvZycgPj4kVE1QCisKKyRwcmVwcm9jZXNzb3IgJFRNUCAyPi9kZXYvbnVsbCBcCit8IHNlZCBcCisJLWUgJ3MvICAvIC9nJyBcCisJLWUgJ3MvXiAvLycgXAorCS1lICdzL19Cb29sL05DVVJTRVNfQk9PTC9nJyBcCit8ICRBV0sgLWYgJEFXMiBcCit8IHNlZCAtZiAkRUQzIFwKK3wgc2VkIFwKKwktZSAncy9eLipUX0NBTExFRC4qcmV0dXJuQ29kZSggXChbYS16XS4qKSBcKSk7LwlyZXR1cm4gXDE7LycgXAorCS1lICdzL14uKlRfQ0FMTEVELipyZXR1cm5Db2RlKCBcKCh3bW92ZS4qKSBcKSk7LwlyZXR1cm4gXDE7LycgXAorCS1lICdzL2dlbl8vLycgXAorCS1lICdzL15bIAldKiMvIy8nIFwKKwktZSAnLyNpZGVudC9kJyBcCisJLWUgJy8jbGluZS9kJyBcCit8IHNlZCAtZiAkRUQ0CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvTUt1bmN0cmwuYXdrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL01LdW5jdHJsLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZiZWVjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL01LdW5jdHJsLmF3awpAQCAtMCwwICsxLDE5MiBAQAorIyAkSWQ6IE1LdW5jdHJsLmF3ayx2IDEuMjMgMjAwOC8xMC8wNCAyMTo0MDoyNCB0b20gRXhwICQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICgxOTk3LW9uKQorIworCitCRUdJTgl7CisJCXByaW50ICIvKiBnZW5lcmF0ZWQgYnkgTUt1bmN0cmwuYXdrICovIgorCQlwcmludCAiIgorCQlwcmludCAiI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+IgorCQlwcmludCAiI2luY2x1ZGUgPGN0eXBlLmg+IgorCQlwcmludCAiIgorCQlwcmludCAiI2lmIFVTRV9XSURFQ19TVVBQT1JUIgorCQlwcmludCAiI2lmIEhBVkVfV0NUWVBFX0giCisJCXByaW50ICIjaW5jbHVkZSA8d2N0eXBlLmg+IgorCQlwcmludCAiI2VuZGlmIgorCQlwcmludCAiI2VuZGlmIgorCQlwcmludCAiIgorCQlwcmludCAiI3VuZGVmIHVuY3RybCIKKwkJcHJpbnQgIiIKKwl9CitFTkQJeworCQlwcmludCAiTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCBjaGFyICopIF9uY191bmN0cmwgKFNDUkVFTiAqc3AsIGNodHlwZSBjaCkiCisJCXByaW50ICJ7IgorCisJCWJsb2I9IiIKKwkJb2Zmc2V0PTAKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJCXByaW50ZiAic3RhdGljIGNvbnN0IHNob3J0IHVuY3RybF90YWJsZVtdID0geyIKKwkJfSBlbHNlIHsKKwkJCXByaW50ZiAic3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHVuY3RybF90YWJsZVtdID0geyIKKwkJfQorCQlmb3IgKCBjaCA9IDA7IGNoIDwgMjU2OyBjaCsrICkgeworCQkJZ2FwID0gIiwiCisJCQlwYXJ0PSIiCisJCQlpZiAoKGNoICUgOCkgPT0gMCkgeworCQkJCXByaW50ZiAiXG4gICAgIgorCQkJCWlmIChjaCAhPSAwKQorCQkJCQlibG9iID0gYmxvYiAiXCIiCisJCQkJYmxvYiA9IGJsb2IgIlxuICAgIFwiIgorCQkJfQorCQkJaWYgKGJpZ3N0cmluZ3MpCisJCQkJcHJpbnRmICIlNGQlcyIsIG9mZnNldCwgZ2FwOworCQkJaWYgKGNoIDwgMzIpIHsKKwkJCQlwYXJ0ID0gc3ByaW50ZiAoIl5cXCUwM28iLCBjaCArIDY0KTsKKwkJCQlvZmZzZXQgPSBvZmZzZXQgKyAzOworCQkJfSBlbHNlIGlmIChjaCA9PSAxMjcpIHsKKwkJCQlwYXJ0ID0gIl4/IjsKKwkJCQlvZmZzZXQgPSBvZmZzZXQgKyAzOworCQkJfSBlbHNlIGlmIChjaCA+PSAxMjggJiYgY2ggPCAxNjApIHsKKwkJCQlwYXJ0ID0gc3ByaW50ZigiflxcJTAzbyIsIGNoIC0gNjQpOworCQkJCW9mZnNldCA9IG9mZnNldCArIDM7CisJCQl9IGVsc2UgaWYgKGNoID09IDI1NSkgeworCQkJCXBhcnQgPSAifj8iOworCQkJCW9mZnNldCA9IG9mZnNldCArIDM7CisJCQl9IGVsc2UgaWYgKGNoID49IDE2MCkgeworCQkJCXBhcnQgPSBzcHJpbnRmKCJNLVxcJTAzbyIsIGNoIC0gMTI4KTsKKwkJCQlvZmZzZXQgPSBvZmZzZXQgKyA0OworCQkJfSBlbHNlIHsKKwkJCQlnYXAgPSBnYXAgIiAiCisJCQkJcGFydCA9IHNwcmludGYoIlxcJTAzbyIsIGNoKTsKKwkJCQlvZmZzZXQgPSBvZmZzZXQgKyAyOworCQkJfQorCQkJaWYgKGNoID09IDI1NSkKKwkJCQlnYXAgPSAiXG4iCisJCQllbHNlIGlmICgoKGNoICsgMSkgJSA4KSAhPSAwKQorCQkJCWdhcCA9IGdhcCAiICIKKwkJCWlmIChiaWdzdHJpbmdzKSB7CisJCQkJYmxvYiA9IGJsb2IgcGFydCAiXFwwIjsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmICJcIiVzXCIlcyIsIHBhcnQsIGdhcAorCQkJfQorCQl9CisJCXByaW50ICJ9OyIKKwkJYmxvYiA9IGJsb2IgIlwiIjsKKworCQlwcmludCAiIgorCQlwcmludGYgIiNpZiBOQ1VSU0VTX0VYVF9GVU5DU1xuIjsKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJCWJsb2IgPSBibG9iICJcbi8qIHByaW50YWJsZSB2YWx1ZXMgaW4gMTI4LTI1NSByYW5nZSAqLyIKKwkJCXByaW50ZiAic3RhdGljIGNvbnN0IHNob3J0IHVuY3RybF9jMVtdID0geyIKKwkJfSBlbHNlIHsKKwkJCXByaW50ZiAic3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHVuY3RybF9jMVtdID0geyIKKwkJfQorCQlmb3IgKCBjaCA9IDEyODsgY2ggPCAyNTY7IGNoKysgKSB7CisJCQlnYXAgPSAiLCIKKwkJCWlmICgoY2ggJSA4KSA9PSAwKSB7CisJCQkJaWYgKGNoICE9IDEyOCkKKwkJCQkJYmxvYiA9IGJsb2IgIlwiIgorCQkJCXByaW50ZiAiXG4gICAgIgorCQkJCWJsb2IgPSBibG9iICJcbiAgICBcIiIKKwkJCX0KKwkJCWlmIChiaWdzdHJpbmdzKSB7CisJCQkJcHJpbnRmICIlNGQlcyIsIG9mZnNldCwgZ2FwOworCQkJCXBhcnQgPSBzcHJpbnRmKCJcXCUwM29cXDAiLCBjaCk7CisJCQkJYmxvYiA9IGJsb2IgcGFydAorCQkJCW9mZnNldCA9IG9mZnNldCArIDI7CisJCQkJaWYgKCgoY2ggKyAxKSAlIDgpICE9IDApCisJCQkJCWdhcCA9IGdhcCAiICIKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNoID49IDEyOCkgeworCQkJCQlwcmludGYgIlwiXFwlMDNvXCIiLCBjaAorCQkJCQlnYXAgPSBnYXAgIiAiCisJCQkJfQorCQkJCWlmIChjaCA9PSAyNTUpCisJCQkJCWdhcCA9ICJcbiIKKwkJCQllbHNlIGlmICgoKGNoICsgMSkgJSA4KSAhPSAwKQorCQkJCQlnYXAgPSBnYXAgIiAiCisJCQkJcHJpbnRmICIlcyIsIGdhcAorCQkJfQorCQl9CisJCXByaW50ICJ9OyIKKwkJcHJpbnQgIiNlbmRpZiAvKiBOQ1VSU0VTX0VYVF9GVU5DUyAqLyIKKwkJYmxvYiA9IGJsb2IgIlwiXG4iCisKKwkJcHJpbnQgIiIKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJCXByaW50ICJzdGF0aWMgY29uc3QgY2hhciB1bmN0cmxfYmxvYltdID0gImJsb2IiOyIKKwkJCXByaW50ICIiCisJCQlzdHJpbmduYW1lID0gInVuY3RybF9ibG9iICsgdW5jdHJsIgorCQl9IGVsc2UgeworCQkJc3RyaW5nbmFtZSA9ICJ1bmN0cmwiCisJCX0KKwkJcHJpbnQgICJcdGludCBjaGVjayA9IENoQ2hhck9mKGNoKTsiCisJCXByaW50ICAiXHRjb25zdCBjaGFyICpyZXN1bHQ7IgorCQlwcmludCAgIiIKKwkJcHJpbnQgICJcdGlmIChjaGVjayA+PSAwICYmIGNoZWNrIDwgKGludClTSVpFT0YodW5jdHJsX3RhYmxlKSkgeyIKKwkJcHJpbnQgICIjaWYgTkNVUlNFU19FWFRfRlVOQ1MiCisJCXByaW50ICAiXHRcdGlmICgoc3AgIT0gMCkiCisJCXByaW50ICAiXHRcdCAmJiAoc3AtPl9sZWdhY3lfY29kaW5nID4gMSkiCisJCXByaW50ICAiXHRcdCAmJiAoY2hlY2sgPj0gMTI4KSIKKwkJcHJpbnQgICJcdFx0ICYmIChjaGVjayA8IDE2MCkpIgorCQlwcmludGYgIlx0XHRcdHJlc3VsdCA9ICVzX2MxW2NoZWNrIC0gMTI4XTtcbiIsIHN0cmluZ25hbWU7CisJCXByaW50ICAiXHRcdGVsc2UiCisJCXByaW50ICAiI2lmIFVTRV9XSURFQ19TVVBQT1JUIgorCQlwcmludCAgIlx0XHRpZiAoKGNoZWNrID49IDE2MCkiCisJCXByaW50ICAiXHRcdCAmJiAoY2hlY2sgPCAyNTYpIgorCQlwcmludCAgIlx0XHQgJiYgKChzcCAhPSAwKSIKKwkJcHJpbnQgICJcdFx0ICAmJiAoKHNwLT5fbGVnYWN5X2NvZGluZyA+IDApIgorCQlwcmludCAgIlx0XHQgICB8fCAoc3AtPl9sZWdhY3lfY29kaW5nID09IDAiCisJCXByaW50ICAiXHRcdCAgICAgICAmJiAoaXNwcmludChjaGVjaykgfHwgaXN3cHJpbnQoY2hlY2spKSkpKSkiCisJCXByaW50ZiAiXHRcdFx0cmVzdWx0ID0gJXNfYzFbY2hlY2sgLSAxMjhdO1xuIiwgc3RyaW5nbmFtZTsKKwkJcHJpbnQgICJcdFx0ZWxzZSIKKwkJcHJpbnQgICIjZWxzZSIKKwkJcHJpbnQgICJcdFx0aWYgKChjaGVjayA+PSAxNjApIgorCQlwcmludCAgIlx0XHQgJiYgKGNoZWNrIDwgMjU2KSIKKwkJcHJpbnQgICJcdFx0ICYmICgoc3AgIT0gMCkiCisJCXByaW50ICAiXHRcdCAgJiYgKChzcC0+X2xlZ2FjeV9jb2RpbmcgPiAwKSIKKwkJcHJpbnQgICJcdFx0ICAgfHwgKHNwLT5fbGVnYWN5X2NvZGluZyA9PSAwIgorCQlwcmludCAgIlx0XHQgICAgICAgJiYgaXNwcmludChjaGVjaykpKSkpIgorCQlwcmludGYgIlx0XHRcdHJlc3VsdCA9ICVzX2MxW2NoZWNrIC0gMTI4XTtcbiIsIHN0cmluZ25hbWU7CisJCXByaW50ICAiXHRcdGVsc2UiCisJCXByaW50ICAiI2VuZGlmIC8qIFVTRV9XSURFQ19TVVBQT1JUICovIgorCQlwcmludCAgIiNlbmRpZiAvKiBOQ1VSU0VTX0VYVF9GVU5DUyAqLyIKKwkJcHJpbnRmICJcdFx0XHRyZXN1bHQgPSAlc190YWJsZVtjaGVja107XG4iLCBzdHJpbmduYW1lOworCQlwcmludCAgIlx0fSBlbHNlIHsiCisJCXByaW50ICAiXHRcdHJlc3VsdCA9IDA7IgorCQlwcmludCAgIlx0fSIKKwkJcHJpbnQgICJcdHJldHVybiAoTkNVUlNFU19DT05TVCBjaGFyICopcmVzdWx0OyIKKwkJcHJpbnQgICJ9IgorCQlwcmludCAgIiIKKwkJcHJpbnQgICJOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgdW5jdHJsIChjaHR5cGUgY2gpIgorCQlwcmludCAgInsiCisJCXByaW50ICAiXHRyZXR1cm4gX25jX3VuY3RybChTUCwgY2gpOyIKKwkJcHJpbnQgICJ9IgorCX0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9SRUFETUUgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzdlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvUkVBRE1FCkBAIC0wLDAgKzEsMzUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogUkVBRE1FLHYgMS4yIDIwMDYvMDQvMjIgMjI6MTk6MzcgdG9tIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmdW5jdGlvbnMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIHRoZSBnZW5lcmljIChub3QgZGV2aWNlLXNwZWNpZmljKSBtb2R1bGVzCitvZiBuY3Vyc2VzLgorCitBcyBhIHJ1bGUsIHRoZXNlIG1vZHVsZXMgc2hvdWxkIG5vdCBkZXBlbmQgZGlyZWN0bHkgb24gdGVybS5oIHJlZmVyZW5jZXMgYW5kCithc3NvY2lhdGVkIHRlcm1pbmZvIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZXMuCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvZGVmaW5lX2tleS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2RlZmluZV9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDU4MTVmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2RlZmluZV9rZXkuYwpAQCAtMCwwICsxLDcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgMTk5Ny1vbiAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGRlZmluZV9rZXkuYyx2IDEuMTMgMjAwNi8xMi8zMCAyMzoyMzozMSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitkZWZpbmVfa2V5KGNvbnN0IGNoYXIgKnN0ciwgaW50IGtleWNvZGUpCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiZGVmaW5lX2tleSglcywlZCkiKSwgX25jX3Zpc2J1ZihzdHIpLCBrZXljb2RlKSk7CisgICAgaWYgKFNQID09IDApIHsKKwljb2RlID0gRVJSOworICAgIH0gZWxzZSBpZiAoa2V5Y29kZSA+IDApIHsKKwl1bnNpZ25lZCB1a2V5ID0gKHVuc2lnbmVkKSBrZXljb2RlOworCisJaWYgKHN0ciAhPSAwKSB7CisJICAgIGRlZmluZV9rZXkoc3RyLCAwKTsKKwl9IGVsc2UgaWYgKGhhc19rZXkoa2V5Y29kZSkpIHsKKwkgICAgd2hpbGUgKF9uY19yZW1vdmVfa2V5KCYoU1AtPl9rZXl0cnkpLCB1a2V5KSkKKwkJY29kZSA9IE9LOworCX0KKwlpZiAoc3RyICE9IDApIHsKKwkgICAgaWYgKGtleV9kZWZpbmVkKHN0cikgPT0gMCkgeworCQlpZiAoX25jX2FkZF90b190cnkoJihTUC0+X2tleXRyeSksIHN0ciwgdWtleSkgPT0gT0spIHsKKwkJICAgIGNvZGUgPSBPSzsKKwkJfSBlbHNlIHsKKwkJICAgIGNvZGUgPSBFUlI7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJY29kZSA9IEVSUjsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCXdoaWxlIChfbmNfcmVtb3ZlX3N0cmluZygmKFNQLT5fa2V5dHJ5KSwgc3RyKSkKKwkgICAgY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2tleV9kZWZpbmVkLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2Uva2V5X2RlZmluZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTlhZDgyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2tleV9kZWZpbmVkLmMKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXksIDIwMDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBrZXlfZGVmaW5lZC5jLHYgMS42IDIwMDYvMTIvMzAgMjM6MjI6NTUgdG9tIEV4cCAkIikKKworc3RhdGljIGludAorZmluZF9kZWZpbml0aW9uKFRSSUVTICogdHJlZSwgY29uc3QgY2hhciAqc3RyKQoreworICAgIFRSSUVTICpwdHI7CisgICAgaW50IHJlc3VsdCA9IE9LOworCisgICAgaWYgKHN0ciAhPSAwICYmICpzdHIgIT0gJ1wwJykgeworCWZvciAocHRyID0gdHJlZTsgcHRyICE9IDA7IHB0ciA9IHB0ci0+c2libGluZykgeworCSAgICBpZiAoVUNoYXIoKnN0cikgPT0gVUNoYXIocHRyLT5jaCkpIHsKKwkJaWYgKHN0clsxXSA9PSAnXDAnICYmIHB0ci0+Y2hpbGQgIT0gMCkgeworCQkgICAgcmVzdWx0ID0gRVJSOworCQl9IGVsc2UgaWYgKChyZXN1bHQgPSBmaW5kX2RlZmluaXRpb24ocHRyLT5jaGlsZCwgc3RyICsgMSkpCisJCQkgICA9PSBPSykgeworCQkgICAgcmVzdWx0ID0gcHRyLT52YWx1ZTsKKwkJfSBlbHNlIGlmIChzdHJbMV0gPT0gJ1wwJykgeworCQkgICAgcmVzdWx0ID0gRVJSOworCQl9CisJICAgIH0KKwkgICAgaWYgKHJlc3VsdCAhPSBPSykKKwkJYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gKHJlc3VsdCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBrZXljb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nLiAgSWYgbm9uZSBpcyBmb3VuZCwKKyAqIHJldHVybiBPSy4gIElmIHRoZSBzdHJpbmcgaXMgb25seSBhIHByZWZpeCB0byBvdGhlciBzdHJpbmdzLCByZXR1cm4gRVJSLgorICogT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGtleWNvZGUncyB2YWx1ZSAobmVpdGhlciBPSy9FUlIpLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitrZXlfZGVmaW5lZChjb25zdCBjaGFyICpzdHIpCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgia2V5X2RlZmluZWQoJXMpIiksIF9uY192aXNidWYoc3RyKSkpOworICAgIGlmIChTUCAhPSAwICYmIHN0ciAhPSAwKSB7CisJY29kZSA9IGZpbmRfZGVmaW5pdGlvbihTUC0+X2tleXRyeSwgc3RyKTsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2tleWJvdW5kLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2Uva2V5Ym91bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTk1NzE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2tleWJvdW5kLmMKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgIDE5OTktb24gICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBrZXlib3VuZC5jLHYgMS43IDIwMDYvMDYvMTcgMTg6MTk6MjQgdG9tIEV4cCAkIikKKworLyoKKyAqIFJldHVybnMgdGhlIGNvdW50J3RoIHN0cmluZyBkZWZpbml0aW9uIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIGdpdmVuIGtleWNvZGUuICBUaGUgcmVzdWx0IGlzIG1hbGxvYydkLCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK2tleWJvdW5kKGludCBjb2RlLCBpbnQgY291bnQpCit7CisgICAgY2hhciAqcmVzdWx0ID0gMDsKKworICAgIFQoKFRfQ0FMTEVEKCJrZXlib3VuZCglZCwlZCkiKSwgY29kZSwgY291bnQpKTsKKyAgICBpZiAoU1AgIT0gMCAmJiBjb2RlID49IDApIHsKKwlyZXN1bHQgPSBfbmNfZXhwYW5kX3RyeShTUC0+X2tleXRyeSwgKHVuc2lnbmVkKSBjb2RlLCAmY291bnQsIDApOworICAgIH0KKyAgICByZXR1cm5QdHIocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9rZXlvay5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2tleW9rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4OTg4YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9rZXlvay5jCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgMTk5Ny1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDoga2V5b2suYyx2IDEuNyAyMDA2LzEyLzMwIDE2OjIyOjMzIHRvbSBFeHAgJCIpCisKKy8qCisgKiBFbmFibGUgKG9yIGRpc2FibGUpIG5jdXJzZXMnIGludGVycHJldGF0aW9uIG9mIGEga2V5Y29kZSBieSBhZGRpbmcgKG9yCisgKiByZW1vdmluZykgdGhlIGNvcnJlc3BvbmRpbmcgJ3RyaWVzJyBlbnRyeS4KKyAqCisgKiBEbyB0aGlzIGJ5IHN0b3JpbmcgYSBzZWNvbmQgdHJlZSBvZiB0cmllcywgd2hpY2ggcmVjb3JkcyB0aGUgZGlzYWJsZWQga2V5cy4gCisgKiBUaGUgc2ltcGxlc3Qgd2F5IHRvIGNvcHkgaXMgdG8gbWFrZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgc3RyaW5nICh3aXRoCisgKiBudWxscyBzZXQgdG8gMDIwMCksIHRoZW4gdXNlIHRoYXQgdG8gcmVpbnNlcnQgdGhlIHN0cmluZyBpbnRvIHRoZQorICogY29ycmVzcG9uZGluZyB0cmVlLgorICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2tleW9rKGludCBjLCBib29sIGZsYWcpCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBjaGFyICpzOworCisgICAgVCgoVF9DQUxMRUQoImtleW9rKCVkLCVkKSIpLCBjLCBmbGFnKSk7CisgICAgaWYgKGMgPj0gMCkgeworCXVuc2lnbmVkIGNoID0gKHVuc2lnbmVkKSBjOworCWlmIChmbGFnKSB7CisJICAgIHdoaWxlICgocyA9IF9uY19leHBhbmRfdHJ5KFNQLT5fa2V5X29rLCBjaCwgJmNvdW50LCAwKSkgIT0gMAorCQkgICAmJiBfbmNfcmVtb3ZlX2tleSgmKFNQLT5fa2V5X29rKSwgY2gpKSB7CisJCWNvZGUgPSBfbmNfYWRkX3RvX3RyeSgmKFNQLT5fa2V5dHJ5KSwgcywgY2gpOworCQlmcmVlKHMpOworCQljb3VudCA9IDA7CisJCWlmIChjb2RlICE9IE9LKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICB3aGlsZSAoKHMgPSBfbmNfZXhwYW5kX3RyeShTUC0+X2tleXRyeSwgY2gsICZjb3VudCwgMCkpICE9IDAKKwkJICAgJiYgX25jX3JlbW92ZV9rZXkoJihTUC0+X2tleXRyeSksIGNoKSkgeworCQljb2RlID0gX25jX2FkZF90b190cnkoJihTUC0+X2tleV9vayksIHMsIGNoKTsKKwkJZnJlZShzKTsKKwkJY291bnQgPSAwOworCQlpZiAoY29kZSAhPSBPSykKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xlZ2FjeV9jb2RpbmcuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9sZWdhY3lfY29kaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyZjE2MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9sZWdhY3lfY29kaW5nLmMKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsZWdhY3lfY29kaW5nLmMsdiAxLjIgMjAwNS8xMi8xNyAyMzozODoxNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit1c2VfbGVnYWN5X2NvZGluZyhpbnQgbGV2ZWwpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ1c2VfbGVnYWN5X2NvZGluZyglZCkiKSwgbGV2ZWwpKTsKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAyICYmIFNQICE9IDApIHsKKwlyZXN1bHQgPSBTUC0+X2xlZ2FjeV9jb2Rpbmc7CisJU1AtPl9sZWdhY3lfY29kaW5nID0gbGV2ZWw7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYWRkY2guYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYWRkY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGE5N2EwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9hZGRjaC5jCkBAIC0wLDAgKzEsNTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2FkZGNoLmMKKyoqCisqKglUaGUgcm91dGluZSB3YWRkY2goKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2FkZGNoLmMsdiAxLjExMyAyMDA4LzA4LzE2IDE5OjIwOjA0IHRvbSBFeHAgJCIpCisKK3N0YXRpYyBjb25zdCBOQ1VSU0VTX0NIX1QgYmxhbmtjaGFyID0gTmV3Q2hhcihCTEFOS19URVhUKTsKKworLyoKKyAqIFVnbHkgbWljcm90d2Vha2luZyBhbGVydC4gIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIHRvIGVuZCBvZiBtb2R1bGUgaXMKKyAqIGxpa2VseSB0byBiZSBzcGVlZC1jcml0aWNhbCAtLSBwcm9maWxpbmcgZGF0YSBzdXJlIHNheXMgaXQgaXMhCisgKiBNb3N0IG9mIHRoZSBpbXBvcnRhbnQgc2NyZWVuLXBhaW50aW5nIGZ1bmN0aW9ucyBhcmUgc2hlbGxzIGFyb3VuZAorICogd2FkZGNoKCkuICBTbyB3ZSBtYWtlIGV2ZXJ5IGVmZm9ydCB0byByZWR1Y2UgZnVuY3Rpb24tY2FsbCBvdmVyaGVhZAorICogYnkgaW5saW5pbmcgc3R1ZmYsIGV2ZW4gYXQgdGhlIGNvc3Qgb2YgbWFraW5nIHdyYXBwZWQgY29waWVzIGZvcgorICogZXhwb3J0LiAgQWxzbyB3ZSBzdXBwbHkgc29tZSBpbnRlcm5hbCB2ZXJzaW9ucyB0aGF0IGRvbid0IGNhbGwgdGhlCisgKiB3aW5kb3cgc3luYyBob29rLCBmb3IgdXNlIGJ5IHN0cmluZy1wdXQgZnVuY3Rpb25zLgorICovCisKKy8qIFJldHVybiBiaXQgbWFzayBmb3IgY2xlYXJpbmcgY29sb3IgcGFpciBudW1iZXIgaWYgZ2l2ZW4gY2ggaGFzIGNvbG9yICovCisjZGVmaW5lIENPTE9SX01BU0soY2gpICh+KGF0dHJfdCkoKGNoKSAmIEFfQ09MT1IgPyBBX0NPTE9SIDogMCkpCisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBOQ1VSU0VTX0NIX1QKK3JlbmRlcl9jaGFyKFdJTkRPVyAqd2luLCBOQ1VSU0VTX0NIX1QgY2gpCisvKiBjb21wdXRlIGEgcmVuZGl0aW9uIG9mIHRoZSBnaXZlbiBjaGFyIGNvcnJlY3QgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgKi8KK3sKKyAgICBhdHRyX3QgYSA9IFdJTkRPV19BVFRSUyh3aW4pOworICAgIGludCBwYWlyID0gR2V0UGFpcihjaCk7CisKKyAgICBpZiAoSVNCTEFOSyhjaCkKKwkmJiBBdHRyT2YoY2gpID09IEFfTk9STUFMCisJJiYgcGFpciA9PSAwKSB7CisJLyogY29sb3IvcGFpciBpbiBhdHRycyBoYXMgcHJlY2VkZW5jZSBvdmVyIGJrZ3JuZCAqLworCWNoID0gd2luLT5fbmNfYmtnZDsKKwlTZXRBdHRyKGNoLCBhIHwgQXR0ck9mKHdpbi0+X25jX2JrZ2QpKTsKKwlpZiAoKHBhaXIgPSBHRVRfV0lORE9XX1BBSVIod2luKSkgPT0gMCkKKwkgICAgcGFpciA9IEdldFBhaXIod2luLT5fbmNfYmtnZCk7CisJU2V0UGFpcihjaCwgcGFpcik7CisgICAgfSBlbHNlIHsKKwkvKiBjb2xvciBpbiBhdHRycyBoYXMgcHJlY2VkZW5jZSBvdmVyIGJrZ3JuZCAqLworCWEgfD0gQXR0ck9mKHdpbi0+X25jX2JrZ2QpICYgQ09MT1JfTUFTSyhhKTsKKwkvKiBjb2xvciBpbiBjaCBoYXMgcHJlY2VkZW5jZSAqLworCWlmIChwYWlyID09IDApIHsKKwkgICAgaWYgKChwYWlyID0gR0VUX1dJTkRPV19QQUlSKHdpbikpID09IDApCisJCXBhaXIgPSBHZXRQYWlyKHdpbi0+X25jX2JrZ2QpOworCX0KKyNpZiAwCisJaWYgKHBhaXIgPiAyNTUpIHsKKwkgICAgTkNVUlNFU19DSF9UIGZpeG1lID0gY2g7CisJICAgIFNldFBhaXIoZml4bWUsIHBhaXIpOworCX0KKyNlbmRpZgorCUFkZEF0dHIoY2gsIChhICYgQ09MT1JfTUFTSyhBdHRyT2YoY2gpKSkpOworCVNldFBhaXIoY2gsIHBhaXIpOworICAgIH0KKworICAgIFRSKFRSQUNFX1ZJUlRQVVQsCisgICAgICAgKCJyZW5kZXJfY2hhciBia2cgJXMgKCVkKSwgYXR0cnMgJXMgKCVkKSAtPiBjaCAlcyAoJWQpIiwKKwlfdHJhY2VjaF90MigxLCBDSFJFRih3aW4tPl9uY19ia2dkKSksCisJR2V0UGFpcih3aW4tPl9uY19ia2dkKSwKKwlfdHJhY2VhdHRyKFdJTkRPV19BVFRSUyh3aW4pKSwKKwlHRVRfV0lORE9XX1BBSVIod2luKSwKKwlfdHJhY2VjaF90MigzLCBDSFJFRihjaCkpLAorCUdldFBhaXIoY2gpKSk7CisKKyAgICByZXR1cm4gKGNoKTsKK30KKworTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DSF9UKQorX25jX3JlbmRlcihXSU5ET1cgKndpbiwgTkNVUlNFU19DSF9UIGNoKQorLyogbWFrZSByZW5kZXJfY2hhcigpIHZpc2libGUgd2hpbGUgc3RpbGwgYWxsb3dpbmcgdXMgdG8gaW5saW5lIGl0IGJlbG93ICovCit7CisgICAgcmV0dXJuIHJlbmRlcl9jaGFyKHdpbiwgY2gpOworfQorCisvKiBjaGVjayBpZiBwb3NpdGlvbiBpcyBsZWdhbDsgaWYgbm90LCByZXR1cm4gZXJyb3IgKi8KKyNpZm5kZWYgTkRFQlVHCQkJLyogdHJlYXQgdGhpcyBsaWtlIGFuIGFzc2VydGlvbiAqLworI2RlZmluZSBDSEVDS19QT1NJVElPTih3aW4sIHgsIHkpIFwKKwlpZiAoeSA+IHdpbi0+X21heHkgXAorCSB8fCB4ID4gd2luLT5fbWF4eCBcCisJIHx8IHkgPCAwIFwKKwkgfHwgeCA8IDApIHsgXAorCQlUUihUUkFDRV9WSVJUUFVULCAoIkFsZXJ0ISBXaW49JXAgX2N1cnggPSAlZCwgX2N1cnkgPSAlZCAiIFwKKwkJCQkgICAiKF9tYXh4ID0gJWQsIF9tYXh5ID0gJWQpIiwgd2luLCB4LCB5LCBcCisJCQkJICAgd2luLT5fbWF4eCwgd2luLT5fbWF4eSkpOyBcCisJCXJldHVybihFUlIpOyBcCisJfQorI2Vsc2UKKyNkZWZpbmUgQ0hFQ0tfUE9TSVRJT04od2luLCB4LCB5KQkvKiBub3RoaW5nICovCisjZW5kaWYKKworc3RhdGljIGJvb2wKK25ld2xpbmVfZm9yY2VzX3Njcm9sbChXSU5ET1cgKndpbiwgTkNVUlNFU19TSVpFX1QgKiB5cG9zKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBpZiAoKnlwb3MgPj0gd2luLT5fcmVndG9wICYmICp5cG9zID09IHdpbi0+X3JlZ2JvdHRvbSkgeworCSp5cG9zID0gd2luLT5fcmVnYm90dG9tOworCXJlc3VsdCA9IFRSVUU7CisgICAgfSBlbHNlIHsKKwkqeXBvcyArPSAxOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVGhlIF9XUkFQUEVEIGZsYWcgaXMgdXNlZnVsIG9ubHkgZm9yIHRlbGxpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB3ZSd2ZSBqdXN0CisgKiB3cmFwcGVkIHRoZSBjdXJzb3IuICBXZSBkb24ndCBkbyBhbnl0aGluZyB3aXRoIHRoaXMgZmxhZyBleGNlcHQgc2V0IGl0IHdoZW4KKyAqIHdyYXBwaW5nLCBhbmQgY2xlYXIgaXQgd2hlbmV2ZXIgd2UgbW92ZSB0aGUgY3Vyc29yLiAgSWYgd2UgdHJ5IHRvIHdyYXAgYXQKKyAqIHRoZSBsb3dlci1yaWdodCBjb3JuZXIgb2YgYSB3aW5kb3csIHdlIGNhbm5vdCBtb3ZlIHRoZSBjdXJzb3IgKHNpbmNlIHRoYXQKKyAqIHdvdWxkbid0IGJlIGxlZ2FsKS4gIFNvIHdlIHJldHVybiBhbiBlcnJvciAod2hpY2ggaXMgd2hhdCBTVnI0IGRvZXMpLiAKKyAqIFVubGlrZSBTVnI0LCB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGFkZCBhIGNoYXJhY3RlciB0byB0aGUgbG93ZXItcmlnaHQgY29ybmVyCisgKiAoU29sYXJpcyAyLjYgZG9lcyB0aGlzIGFsc28sIGhvd2V2ZXIpLgorICovCitzdGF0aWMgaW50Cit3cmFwX3RvX25leHRfbGluZShXSU5ET1cgKndpbikKK3sKKyAgICB3aW4tPl9mbGFncyB8PSBfV1JBUFBFRDsKKyAgICBpZiAobmV3bGluZV9mb3JjZXNfc2Nyb2xsKHdpbiwgJih3aW4tPl9jdXJ5KSkpIHsKKwl3aW4tPl9jdXJ4ID0gd2luLT5fbWF4eDsKKwlpZiAoIXdpbi0+X3Njcm9sbCkKKwkgICAgcmV0dXJuIChFUlIpOworCXNjcm9sbCh3aW4pOworICAgIH0KKyAgICB3aW4tPl9jdXJ4ID0gMDsKKyAgICByZXR1cm4gKE9LKTsKK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitzdGF0aWMgaW50IHdhZGRjaF9saXRlcmFsKFdJTkRPVyAqLCBOQ1VSU0VTX0NIX1QpOworLyoKKyAqIEZpbGwgdGhlIGdpdmVuIG51bWJlciBvZiBjZWxscyB3aXRoIGJsYW5rcyB1c2luZyB0aGUgY3VycmVudCBiYWNrZ3JvdW5kCisgKiByZW5kaXRpb24uICBUaGlzIHNhdmVzL3Jlc3RvcmVzIHRoZSBjdXJyZW50IHgtcG9zaXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitmaWxsX2NlbGxzKFdJTkRPVyAqd2luLCBpbnQgY291bnQpCit7CisgICAgTkNVUlNFU19DSF9UIGJsYW5rID0gYmxhbmtjaGFyOworICAgIGludCBzYXZlX3ggPSB3aW4tPl9jdXJ4OworICAgIGludCBzYXZlX3kgPSB3aW4tPl9jdXJ5OworCisgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7CisJaWYgKHdhZGRjaF9saXRlcmFsKHdpbiwgYmxhbmspID09IEVSUikKKwkgICAgYnJlYWs7CisgICAgfQorICAgIHdpbi0+X2N1cnggPSBzYXZlX3g7CisgICAgd2luLT5fY3VyeSA9IHNhdmVfeTsKK30KKyNlbmRpZgorCisvKgorICogQnVpbGQgdXAgdGhlIGJ5dGVzIGZvciBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIsIHJldHVybmluZyB0aGUgbGVuZ3RoIHdoZW4KKyAqIGNvbXBsZXRlIChhIHBvc2l0aXZlIG51bWJlciksIC0xIGZvciBlcnJvciBhbmQgLTIgZm9yIGluY29tcGxldGUuCisgKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2J1aWxkX3djaChXSU5ET1cgKndpbiwgQVJHX0NIX1QgY2gpCit7CisgICAgY2hhciAqYnVmZmVyID0gV0lORE9XX0VYVCh3aW4sIGFkZGNoX3dvcmspOworICAgIGludCBsZW47CisgICAgaW50IHggPSB3aW4tPl9jdXJ4OworICAgIGludCB5ID0gd2luLT5fY3VyeTsKKyAgICBtYnN0YXRlX3Qgc3RhdGU7CisgICAgd2NoYXJfdCByZXN1bHQ7CisKKyAgICBpZiAoKFdJTkRPV19FWFQod2luLCBhZGRjaF91c2VkKSAhPSAwKSAmJgorCShXSU5ET1dfRVhUKHdpbiwgYWRkY2hfeCkgIT0geCB8fAorCSBXSU5ET1dfRVhUKHdpbiwgYWRkY2hfeSkgIT0geSkpIHsKKwkvKiBkaXNjYXJkIHRoZSBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIgKi8KKwlXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgPSAwOworCVRSKFRSQUNFX1ZJUlRQVVQsCisJICAgKCJBbGVydCBkaXNjYXJkZWQgbXVsdGlieXRlIG9uIG1vdmUgKCVkLCVkKSAtPiAoJWQsJWQpIiwKKwkgICAgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3kpLCBXSU5ET1dfRVhUKHdpbiwgYWRkY2hfeCksCisJICAgIHksIHgpKTsKKyAgICB9CisgICAgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3gpID0geDsKKyAgICBXSU5ET1dfRVhUKHdpbiwgYWRkY2hfeSkgPSB5OworCisgICAgaW5pdF9tYihzdGF0ZSk7CisgICAgYnVmZmVyW1dJTkRPV19FWFQod2luLCBhZGRjaF91c2VkKV0gPSAoY2hhcikgQ2hhck9mKENIREVSRUYoY2gpKTsKKyAgICBXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgKz0gMTsKKyAgICBidWZmZXJbV0lORE9XX0VYVCh3aW4sIGFkZGNoX3VzZWQpXSA9ICdcMCc7CisgICAgaWYgKChsZW4gPSBtYnJ0b3djKCZyZXN1bHQsCisJCSAgICAgICBidWZmZXIsCisJCSAgICAgICBXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCksICZzdGF0ZSkpID4gMCkgeworCWF0dHJfdCBhdHRycyA9IEF0dHJPZihDSERFUkVGKGNoKSk7CisJaWZfRVhUX0NPTE9SUyhpbnQgcGFpciA9IEdldFBhaXIoQ0hERVJFRihjaCkpKTsKKwlTZXRDaGFyKENIREVSRUYoY2gpLCByZXN1bHQsIGF0dHJzKTsKKwlpZl9FWFRfQ09MT1JTKFNldFBhaXIoQ0hERVJFRihjaCksIHBhaXIpKTsKKwlXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgPSAwOworICAgIH0gZWxzZSBpZiAobGVuID09IC0xKSB7CisJLyoKKwkgKiBBbiBlcnJvciBvY2N1cnJlZC4gIFdlIGNvdWxkIGVpdGhlciBkaXNjYXJkIGV2ZXJ5dGhpbmcsCisJICogb3IgYXNzdW1lIHRoYXQgdGhlIGVycm9yIHdhcyBpbiB0aGUgcHJldmlvdXMgaW5wdXQuCisJICogVHJ5IHRoZSBsYXR0ZXIuCisJICovCisJVFIoVFJBQ0VfVklSVFBVVCwgKCJBbGVydCEgbWJydG93YyByZXR1cm5zIGVycm9yIikpOworCS8qIGhhbmRsZSB0aGlzIHdpdGggdW5jdHJsKCkgKi8KKwlXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgPSAwOworICAgIH0KKyAgICByZXR1cm4gbGVuOworfQorI2VuZGlmIC8qIFVTRV9XSURFQ19TVVBQT1JUICovCisKK3N0YXRpYworI2lmICFVU0VfV0lERUNfU1VQUE9SVAkJLyogY2Fubm90IGJlIGlubGluZSBpZiBpdCBpcyByZWN1cnNpdmUgKi8KK05DVVJTRVNfSU5MSU5FCisjZW5kaWYKK2ludAord2FkZGNoX2xpdGVyYWwoV0lORE9XICp3aW4sIE5DVVJTRVNfQ0hfVCBjaCkKK3sKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBzdHJ1Y3QgbGRhdCAqbGluZTsKKworICAgIHggPSB3aW4tPl9jdXJ4OworICAgIHkgPSB3aW4tPl9jdXJ5OworCisgICAgQ0hFQ0tfUE9TSVRJT04od2luLCB4LCB5KTsKKworICAgIGNoID0gcmVuZGVyX2NoYXIod2luLCBjaCk7CisKKyAgICBsaW5lID0gd2luLT5fbGluZSArIHk7CisKKyAgICBDSEFOR0VEX0NFTEwobGluZSwgeCk7CisKKyAgICAvKgorICAgICAqIEJ1aWxkIHVwIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIHVudGlsIHdlIGhhdmUgYSB3aWRlLWNoYXJhY3Rlci4KKyAgICAgKi8KKyAgICBpZl9XSURFQyh7CisJaWYgKFdJTkRPV19FWFQod2luLCBhZGRjaF91c2VkKSAhPSAwIHx8ICFDaGFyYWJsZShjaCkpIHsKKwkgICAgaW50IGxlbiA9IF9uY19idWlsZF93Y2god2luLCBDSFJFRihjaCkpOworCisJICAgIGlmIChsZW4gPj0gLTEpIHsKKwkJLyogaGFuZGxlIEVJTFNFUSAqLworCQlpZiAoaXM4Yml0cyhDaGFyT2YoY2gpKSkgeworCQkgICAgY29uc3QgY2hhciAqcyA9IHVuY3RybCgoY2h0eXBlKSBDaGFyT2YoY2gpKTsKKwkJICAgIGlmIChzWzFdICE9IDApIHsKKwkJCXJldHVybiB3YWRkc3RyKHdpbiwgcyk7CisJCSAgICB9CisJCX0KKwkJaWYgKGxlbiA9PSAtMSkKKwkJICAgIHJldHVybiB3YWRkY2god2luLCAnICcpOworCSAgICB9IGVsc2UgeworCQlyZXR1cm4gT0s7CisJICAgIH0KKwl9CisgICAgfSk7CisKKyAgICAvKgorICAgICAqIE5vbi1zcGFjaW5nIGNoYXJhY3RlcnMgYXJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IGNlbGwuCisgICAgICoKKyAgICAgKiBTcGFjaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgd2lkZXIgdGhhbiBvbmUgY29sdW1uIHJlcXVpcmUgc29tZSBkaXNwbGF5CisgICAgICogYWRqdXN0bWVudHMuCisgICAgICovCisgICAgaWZfV0lERUMoeworCWludCBsZW4gPSB3Y3dpZHRoKENoYXJPZihjaCkpOworCWludCBpOworCWludCBqOworCXdjaGFyX3QgKmNoYXJzOworCisJaWYgKGxlbiA9PSAwKSB7CQkvKiBub24tc3BhY2luZyAqLworCSAgICBpZiAoKHggPiAwICYmIHkgPj0gMCkKKwkJfHwgKHdpbi0+X21heHggPj0gMCAmJiB3aW4tPl9jdXJ5ID49IDEpKSB7CisJCWlmICh4ID4gMCAmJiB5ID49IDApCisJCSAgICBjaGFycyA9ICh3aW4tPl9saW5lW3ldLnRleHRbeCAtIDFdLmNoYXJzKTsKKwkJZWxzZQorCQkgICAgY2hhcnMgPSAod2luLT5fbGluZVt5IC0gMV0udGV4dFt3aW4tPl9tYXh4XS5jaGFycyk7CisJCWZvciAoaSA9IDA7IGkgPCBDQ0hBUldfTUFYOyArK2kpIHsKKwkJICAgIGlmIChjaGFyc1tpXSA9PSAwKSB7CisJCQlUUihUUkFDRV9WSVJUUFVULAorCQkJICAgKCJhZGRlZCBub24tc3BhY2luZyAlZDogJXgiLAorCQkJICAgIHgsIChpbnQpIENoYXJPZihjaCkpKTsKKwkJCWNoYXJzW2ldID0gQ2hhck9mKGNoKTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZ290byB0ZXN0d3JhcHBpbmc7CisJfSBlbHNlIGlmIChsZW4gPiAxKSB7CS8qIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzICovCisJICAgIC8qCisJICAgICAqIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXIgd2lsbCBmaXQgb24gdGhlIGN1cnJlbnQgbGluZS4gIElmIGl0IGRvZXMKKwkgICAgICogbm90IGZpdCwgZmlsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIHdpdGggYmxhbmtzLiAgYW5kCisJICAgICAqIG1vdmUgdG8gdGhlIG5leHQgbGluZS4KKwkgICAgICovCisJICAgIGlmIChsZW4gPiB3aW4tPl9tYXh4ICsgMSkgeworCQlUUihUUkFDRV9WSVJUUFVULCAoImNoYXJhY3RlciB3aWxsIG5vdCBmaXQiKSk7CisJCXJldHVybiBFUlI7CisJICAgIH0gZWxzZSBpZiAoeCArIGxlbiA+IHdpbi0+X21heHggKyAxKSB7CisJCWludCBjb3VudCA9IHdpbi0+X21heHggKyAxIC0geDsKKwkJVFIoVFJBQ0VfVklSVFBVVCwgKCJmaWxsICVkIHJlbWFpbmluZyBjZWxscyIsIGNvdW50KSk7CisJCWZpbGxfY2VsbHMod2luLCBjb3VudCk7CisJCWlmICh3cmFwX3RvX25leHRfbGluZSh3aW4pID09IEVSUikKKwkJICAgIHJldHVybiBFUlI7CisJCXggPSB3aW4tPl9jdXJ4OworCQl5ID0gd2luLT5fY3VyeTsKKwkgICAgfQorCSAgICAvKgorCSAgICAgKiBDaGVjayBmb3IgY2VsbHMgd2hpY2ggYXJlIG9ycGhhbmVkIGJ5IGFkZGluZyB0aGlzIGNoYXJhY3Rlciwgc2V0CisJICAgICAqIHRob3NlIHRvIGJsYW5rcy4KKwkgICAgICoKKwkgICAgICogRklYTUU6IHRoaXMgYWN0dWFsbHkgY291bGQgZmlsbCBqLWkgY2VsbHMsIG1vcmUgY29tcGxpY2F0ZWQgdG8KKwkgICAgICogc2V0dXAgdGhvdWdoLgorCSAgICAgKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisJCWlmIChpc1dpZGVjQmFzZSh3aW4tPl9saW5lW3ldLnRleHRbeCArIGldKSkgeworCQkgICAgYnJlYWs7CisJCX0gZWxzZSBpZiAoaXNXaWRlY0V4dCh3aW4tPl9saW5lW3ldLnRleHRbeCArIGldKSkgeworCQkgICAgZm9yIChqID0gaTsgeCArIGogPD0gd2luLT5fbWF4eDsgKytqKSB7CisJCQlpZiAoIWlzV2lkZWNFeHQod2luLT5fbGluZVt5XS50ZXh0W3ggKyBqXSkpIHsKKwkJCSAgICBUUihUUkFDRV9WSVJUUFVULCAoImZpbGwgJWQgb3JwaGFuIGNlbGxzIiwgaikpOworCQkJICAgIGZpbGxfY2VsbHMod2luLCBqKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogRmluYWxseSwgYWRkIHRoZSBjZWxscyBmb3IgdGhpcyBjaGFyYWN0ZXIuCisJICAgICAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKwkJTkNVUlNFU19DSF9UIHZhbHVlID0gY2g7CisJCVNldFdpZGVjRXh0KHZhbHVlLCBpKTsKKwkJVFIoVFJBQ0VfVklSVFBVVCwgKCJtdWx0aWNvbHVtbiAlZDolZCAoJWQsJWQpIiwKKwkJCQkgICBpICsgMSwgbGVuLAorCQkJCSAgIHdpbi0+X2JlZ3kgKyB5LCB3aW4tPl9iZWd4ICsgeCkpOworCQlsaW5lLT50ZXh0W3hdID0gdmFsdWU7CisJCUNIQU5HRURfQ0VMTChsaW5lLCB4KTsKKwkJKyt4OworCSAgICB9CisJICAgIGdvdG8gdGVzdHdyYXBwaW5nOworCX0KKyAgICB9KTsKKworICAgIC8qCisgICAgICogU2luZ2xlLWNvbHVtbiBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIGxpbmUtPnRleHRbeCsrXSA9IGNoOworICAgIC8qCisgICAgICogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgZm9yIHdpZGUtY2hhcmFjdGVycy4KKyAgICAgKi8KKyAgICBpZl9XSURFQygKKyAgdGVzdHdyYXBwaW5nOgorICAgICk7CisKKyAgICBUUihUUkFDRV9WSVJUUFVULCAoImNlbGwgKCVsZCwgJWxkLi4lZCkgPSAlcyIsCisJCSAgICAgICAobG9uZykgd2luLT5fY3VyeSwgKGxvbmcpIHdpbi0+X2N1cngsIHggLSAxLAorCQkgICAgICAgX3RyYWNlY2hfdChDSFJFRihjaCkpKSk7CisKKyAgICBpZiAoeCA+IHdpbi0+X21heHgpIHsKKwlyZXR1cm4gd3JhcF90b19uZXh0X2xpbmUod2luKTsKKyAgICB9CisgICAgd2luLT5fY3VyeCA9IHg7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgaW50Cit3YWRkY2hfbm9zeW5jKFdJTkRPVyAqd2luLCBjb25zdCBOQ1VSU0VTX0NIX1QgY2gpCisvKiB0aGUgd29ya2hvcnNlIGZ1bmN0aW9uIC0tIGFkZCBhIGNoYXJhY3RlciB0byB0aGUgZ2l2ZW4gd2luZG93ICovCit7CisgICAgTkNVUlNFU19TSVpFX1QgeCwgeTsKKyAgICBjaHR5cGUgdCA9IENoYXJPZihjaCk7CisgICAgY29uc3QgY2hhciAqcyA9IHVuY3RybCh0KTsKKworICAgIC8qCisgICAgICogSWYgd2UgYXJlIHVzaW5nIHRoZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCwgZm9yZ2V0IGFib3V0IGxvY2FsZS4KKyAgICAgKiBPdGhlcndpc2UsIGlmIHVuY3RybCgpIHJldHVybnMgYSBzaW5nbGUtY2hhcmFjdGVyIG9yIHRoZSBsb2NhbGUKKyAgICAgKiBjbGFpbXMgdGhlIGNvZGUgaXMgcHJpbnRhYmxlLCB0cmVhdCBpdCB0aGF0IHdheS4KKyAgICAgKi8KKyAgICBpZiAoKEF0dHJPZihjaCkgJiBBX0FMVENIQVJTRVQpCisJfHwgKAorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJICAgICAgIChTUCAhPSAwICYmIFNQLT5fbGVnYWN5X2NvZGluZykgJiYKKyNlbmRpZgorCSAgICAgICBzWzFdID09IDAKKwkpCisJfHwgKAorCSAgICAgICBpc3ByaW50KHQpCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkgICAgICAgfHwgKChTUCA9PSAwIHx8ICFTUC0+X2xlZ2FjeV9jb2RpbmcpICYmCisJCSAgIChXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkKKwkJICAgIHx8ICFfbmNfaXNfY2hhcmFibGUoQ2hhck9mKGNoKSkpKQorI2VuZGlmCisJKSkKKwlyZXR1cm4gd2FkZGNoX2xpdGVyYWwod2luLCBjaCk7CisKKyAgICAvKgorICAgICAqIEhhbmRsZSBjYXJyaWFnZSBjb250cm9sIGFuZCBvdGhlciBjb2RlcyB0aGF0IGFyZSBub3QgcHJpbnRhYmxlLCBvciBhcmUKKyAgICAgKiBrbm93biB0byBleHBhbmQgdG8gbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIHVuY3RybCgpLgorICAgICAqLworICAgIHggPSB3aW4tPl9jdXJ4OworICAgIHkgPSB3aW4tPl9jdXJ5OworCisgICAgc3dpdGNoICh0KSB7CisgICAgY2FzZSAnXHQnOgorCXggKz0gKFRBQlNJWkUgLSAoeCAlIFRBQlNJWkUpKTsKKworCS8qCisJICogU3BhY2UtZmlsbCB0aGUgdGFiIG9uIHRoZSBib3R0b20gbGluZSBzbyB0aGF0IHdlJ2xsIGdldCB0aGUKKwkgKiAiY29ycmVjdCIgY3Vyc29yIHBvc2l0aW9uLgorCSAqLworCWlmICgoIXdpbi0+X3Njcm9sbCAmJiAoeSA9PSB3aW4tPl9yZWdib3R0b20pKQorCSAgICB8fCAoeCA8PSB3aW4tPl9tYXh4KSkgeworCSAgICBOQ1VSU0VTX0NIX1QgYmxhbmsgPSBibGFua2NoYXI7CisJICAgIEFkZEF0dHIoYmxhbmssIEF0dHJPZihjaCkpOworCSAgICB3aGlsZSAod2luLT5fY3VyeCA8IHgpIHsKKwkJaWYgKHdhZGRjaF9saXRlcmFsKHdpbiwgYmxhbmspID09IEVSUikKKwkJICAgIHJldHVybiAoRVJSKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9IGVsc2UgeworCSAgICB3Y2xydG9lb2wod2luKTsKKwkgICAgd2luLT5fZmxhZ3MgfD0gX1dSQVBQRUQ7CisJICAgIGlmIChuZXdsaW5lX2ZvcmNlc19zY3JvbGwod2luLCAmeSkpIHsKKwkJeCA9IHdpbi0+X21heHg7CisJCWlmICh3aW4tPl9zY3JvbGwpIHsKKwkJICAgIHNjcm9sbCh3aW4pOworCQkgICAgeCA9IDA7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJeCA9IDA7CisJICAgIH0KKwl9CisJYnJlYWs7CisgICAgY2FzZSAnXG4nOgorCXdjbHJ0b2VvbCh3aW4pOworCWlmIChuZXdsaW5lX2ZvcmNlc19zY3JvbGwod2luLCAmeSkpIHsKKwkgICAgaWYgKHdpbi0+X3Njcm9sbCkKKwkJc2Nyb2xsKHdpbik7CisJICAgIGVsc2UKKwkJcmV0dXJuIChFUlIpOworCX0KKwkvKiBGQUxMVEhSVSAqLworICAgIGNhc2UgJ1xyJzoKKwl4ID0gMDsKKwl3aW4tPl9mbGFncyAmPSB+X1dSQVBQRUQ7CisJYnJlYWs7CisgICAgY2FzZSAnXGInOgorCWlmICh4ID09IDApCisJICAgIHJldHVybiAoT0spOworCXgtLTsKKwl3aW4tPl9mbGFncyAmPSB+X1dSQVBQRUQ7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwl3aGlsZSAoKnMpIHsKKwkgICAgTkNVUlNFU19DSF9UIHNjaDsKKwkgICAgU2V0Q2hhcihzY2gsICpzKyssIEF0dHJPZihjaCkpOworCSAgICBpZl9FWFRfQ09MT1JTKFNldFBhaXIoc2NoLCBHZXRQYWlyKGNoKSkpOworCSAgICBpZiAod2FkZGNoX2xpdGVyYWwod2luLCBzY2gpID09IEVSUikKKwkJcmV0dXJuIEVSUjsKKwl9CisJcmV0dXJuIChPSyk7CisgICAgfQorCisgICAgd2luLT5fY3VyeCA9IHg7CisgICAgd2luLT5fY3VyeSA9IHk7CisKKyAgICByZXR1cm4gKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3dhZGRjaF9ub3N5bmMoV0lORE9XICp3aW4sIGNvbnN0IE5DVVJTRVNfQ0hfVCBjKQorLyogZXhwb3J0IGNvcHkgb2Ygd2FkZGNoX25vc3luYygpIHNvIHRoZSBzdHJpbmctcHV0IGZ1bmN0aW9ucyBjYW4gdXNlIGl0ICovCit7CisgICAgcmV0dXJuICh3YWRkY2hfbm9zeW5jKHdpbiwgYykpOworfQorCisvKgorICogVGhlIHZlcnNpb25zIGJlbG93IGNhbGwgX25jX3N5bmNob29rKCkuICBXZSB3YW50ZWQgdG8gYXZvaWQgdGhpcyBpbiB0aGUKKyAqIHZlcnNpb24gZXhwb3J0ZWQgZm9yIHN0cmluZyBwdXRzOyB0aGV5J2xsIGNhbGwgX25jX3N5bmNob29rIG9uY2UgYXQgZW5kCisgKiBvZiBydW4uCisgKi8KKworLyogVGhlc2UgYXJlIGFjdHVhbCBlbnRyeSBwb2ludHMgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQord2FkZGNoKFdJTkRPVyAqd2luLCBjb25zdCBjaHR5cGUgY2gpCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgTkNVUlNFU19DSF9UIHdjaDsKKyAgICBTZXRDaGFyMih3Y2gsIGNoKTsKKworICAgIFRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9DQ0FMTFMsIChUX0NBTExFRCgid2FkZGNoKCVwLCAlcykiKSwgd2luLAorCQkJCSAgICAgIF90cmFjZWNodHlwZShjaCkpKTsKKworICAgIGlmICh3aW4gJiYgKHdhZGRjaF9ub3N5bmMod2luLCB3Y2gpICE9IEVSUikpIHsKKwlfbmNfc3luY2hvb2sod2luKTsKKwljb2RlID0gT0s7CisgICAgfQorCisgICAgVFIoVFJBQ0VfVklSVFBVVCB8IFRSQUNFX0NDQUxMUywgKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2VjaG9jaGFyKFdJTkRPVyAqd2luLCBjb25zdCBjaHR5cGUgY2gpCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgTkNVUlNFU19DSF9UIHdjaDsKKyAgICBTZXRDaGFyMih3Y2gsIGNoKTsKKworICAgIFRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9DQ0FMTFMsIChUX0NBTExFRCgid2VjaG9jaGFyKCVwLCAlcykiKSwgd2luLAorCQkJCSAgICAgIF90cmFjZWNodHlwZShjaCkpKTsKKworICAgIGlmICh3aW4gJiYgKHdhZGRjaF9ub3N5bmMod2luLCB3Y2gpICE9IEVSUikpIHsKKwlib29sIHNhdmVfaW1tZWQgPSB3aW4tPl9pbW1lZDsKKwl3aW4tPl9pbW1lZCA9IFRSVUU7CisJX25jX3N5bmNob29rKHdpbik7CisJd2luLT5faW1tZWQgPSBzYXZlX2ltbWVkOworCWNvZGUgPSBPSzsKKyAgICB9CisgICAgVFIoVFJBQ0VfVklSVFBVVCB8IFRSQUNFX0NDQUxMUywgKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYWRkc3RyLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2FkZHN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2EwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2FkZHN0ci5jCkBAIC0wLDAgKzEsMjQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIFJld3JpdHRlbiAyMDAxLTIwMDQgdG8gc3VwcG9ydCB3aWRlLWNoYXJhY3RlcnMgYnkgICAgICAgICAgICAgICAgICAgICAgICoKKyAqCVN2ZW4gVmVyZG9vbGFlZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoJVGhvbWFzIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9hZGRzdHIuYworKgorKioJVGhlIHJvdXRpbmVzIHdhZGRuc3RyKCksIHdhZGRjaG5zdHIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9hZGRzdHIuYyx2IDEuNDggMjAwNy8xMC8xMyAxOTo1Njo1NyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3YWRkbnN0cihXSU5ET1cgKndpbiwgY29uc3QgY2hhciAqYXN0ciwgaW50IG4pCit7CisgICAgY29uc3QgY2hhciAqc3RyID0gYXN0cjsKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3YWRkbnN0ciglcCwlcywlZCkiKSwgd2luLCBfbmNfdmlzYnVmbihhc3RyLCBuKSwgbikpOworCisgICAgaWYgKHdpbiAmJiAoc3RyICE9IDApKSB7CisJVFIoVFJBQ0VfVklSVFBVVCB8IFRSQUNFX0FUVFJTLAorCSAgICgiLi4uIGN1cnJlbnQgJXMiLCBfdHJhY2VhdHRyKFdJTkRPV19BVFRSUyh3aW4pKSkpOworCWNvZGUgPSBPSzsKKwlpZiAobiA8IDApCisJICAgIG4gPSAoaW50KSBzdHJsZW4oYXN0cik7CisKKwlUUihUUkFDRV9WSVJUUFVULCAoInN0ciBpcyBub3QgbnVsbCwgbGVuZ3RoID0gJWQiLCBuKSk7CisJd2hpbGUgKChuLS0gPiAwKSAmJiAoKnN0ciAhPSAnXDAnKSkgeworCSAgICBOQ1VSU0VTX0NIX1QgY2g7CisJICAgIFRSKFRSQUNFX1ZJUlRQVVQsICgiKnN0ciA9ICUjbyIsIFVDaGFyKCpzdHIpKSk7CisJICAgIFNldENoYXIoY2gsIFVDaGFyKCpzdHIrKyksIEFfTk9STUFMKTsKKwkgICAgaWYgKF9uY193YWRkY2hfbm9zeW5jKHdpbiwgY2gpID09IEVSUikgeworCQljb2RlID0gRVJSOworCQlicmVhazsKKwkgICAgfQorCX0KKwlfbmNfc3luY2hvb2sod2luKTsKKyAgICB9CisgICAgVFIoVFJBQ0VfVklSVFBVVCwgKCJ3YWRkbnN0ciByZXR1cm5zICVkIiwgY29kZSkpOworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dhZGRjaG5zdHIoV0lORE9XICp3aW4sIGNvbnN0IGNodHlwZSAqYXN0ciwgaW50IG4pCit7CisgICAgTkNVUlNFU19TSVpFX1QgeSwgeDsKKyAgICBpbnQgY29kZSA9IE9LOworICAgIGludCBpOworICAgIHN0cnVjdCBsZGF0ICpsaW5lOworCisgICAgVCgoVF9DQUxMRUQoIndhZGRjaG5zdHIoJXAsJXAsJWQpIiksIHdpbiwgYXN0ciwgbikpOworCisgICAgaWYgKCF3aW4pCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgeSA9IHdpbi0+X2N1cnk7CisgICAgeCA9IHdpbi0+X2N1cng7CisgICAgaWYgKG4gPCAwKSB7CisJY29uc3QgY2h0eXBlICpzdHI7CisJbiA9IDA7CisJZm9yIChzdHIgPSAoY29uc3QgY2h0eXBlICopIGFzdHI7ICpzdHIgIT0gMDsgc3RyKyspCisJICAgIG4rKzsKKyAgICB9CisgICAgaWYgKG4gPiB3aW4tPl9tYXh4IC0geCArIDEpCisJbiA9IHdpbi0+X21heHggLSB4ICsgMTsKKyAgICBpZiAobiA9PSAwKQorCXJldHVybkNvZGUoY29kZSk7CisKKyAgICBsaW5lID0gJih3aW4tPl9saW5lW3ldKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbiAmJiBDaENoYXJPZihhc3RyW2ldKSAhPSAnXDAnOyArK2kpIHsKKwlTZXRDaGFyMihsaW5lLT50ZXh0W2kgKyB4XSwgYXN0cltpXSk7CisgICAgfQorICAgIENIQU5HRURfUkFOR0UobGluZSwgeCwgeCArIG4gLSAxKTsKKworICAgIF9uY19zeW5jaG9vayh3aW4pOworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfd2Noc3RybGVuKGNvbnN0IGNjaGFyX3QgKnMpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgd2hpbGUgKENoYXJPZihzW3Jlc3VsdF0pICE9IEwnXDAnKSB7CisJcmVzdWx0Kys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dhZGRfd2NobnN0cihXSU5ET1cgKndpbiwgY29uc3QgY2NoYXJfdCAqYXN0ciwgaW50IG4pCit7CisgICAgc3RhdGljIGNvbnN0IE5DVVJTRVNfQ0hfVCBibGFuayA9IE5ld0NoYXIoQkxBTktfVEVYVCk7CisgICAgTkNVUlNFU19TSVpFX1QgeTsKKyAgICBOQ1VSU0VTX1NJWkVfVCB4OworICAgIGludCBjb2RlID0gT0s7CisgICAgc3RydWN0IGxkYXQgKmxpbmU7CisgICAgaW50IGksIGosIHN0YXJ0LCBsZW4sIGVuZDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3YWRkX3djaG5zdHIoJXAsJXMsJWQpIiksIHdpbiwgX25jX3Zpc2NidWYoYXN0ciwgbiksIG4pKTsKKworICAgIGlmICghd2luKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIHkgPSB3aW4tPl9jdXJ5OworICAgIHggPSB3aW4tPl9jdXJ4OworICAgIGlmIChuIDwgMCkgeworCW4gPSBfbmNfd2Noc3RybGVuKGFzdHIpOworICAgIH0KKyAgICBpZiAobiA+IHdpbi0+X21heHggLSB4ICsgMSkKKwluID0gd2luLT5fbWF4eCAtIHggKyAxOworICAgIGlmIChuID09IDApCisJcmV0dXJuQ29kZShjb2RlKTsKKworICAgIGxpbmUgPSAmKHdpbi0+X2xpbmVbeV0pOworICAgIHN0YXJ0ID0geDsKKyAgICBlbmQgPSB4ICsgbiAtIDE7CisKKyAgICAvKgorICAgICAqIFJlc2V0IG9ycGhhbmVkIGNlbGxzIG9mIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzIHRoYXQgZXh0ZW5kIHVwIHRvIHRoZQorICAgICAqIG5ldyBzdHJpbmcncyBsb2NhdGlvbiB0byBibGFua3MuCisgICAgICovCisgICAgaWYgKHggPiAwICYmIGlzV2lkZWNFeHQobGluZS0+dGV4dFt4XSkpIHsKKwlmb3IgKGkgPSAwOyBpIDw9IHg7ICsraSkgeworCSAgICBpZiAoIWlzV2lkZWNFeHQobGluZS0+dGV4dFt4IC0gaV0pKSB7CisJCS8qIG11c3QgYmUgaXNXaWRlY0Jhc2UoKSAqLworCQlzdGFydCAtPSBpOworCQl3aGlsZSAoaSA+IDApIHsKKwkJICAgIGxpbmUtPnRleHRbeCAtIGktLV0gPSBfbmNfcmVuZGVyKHdpbiwgYmxhbmspOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogQ29weSB0aGUgbmV3IHN0cmluZyB0byB0aGUgd2luZG93LgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBuICYmIENoYXJPZihhc3RyW2ldKSAhPSBMJ1wwJyAmJiB4IDw9IHdpbi0+X21heHg7ICsraSkgeworCWlmIChpc1dpZGVjRXh0KGFzdHJbaV0pKQorCSAgICBjb250aW51ZTsKKworCWxlbiA9IHdjd2lkdGgoQ2hhck9mKGFzdHJbaV0pKTsKKworCWlmICh4ICsgbGVuIC0gMSA8PSB3aW4tPl9tYXh4KSB7CisJICAgIGxpbmUtPnRleHRbeF0gPSBfbmNfcmVuZGVyKHdpbiwgYXN0cltpXSk7CisJICAgIGlmIChsZW4gPiAxKSB7CisJCWZvciAoaiA9IDA7IGogPCBsZW47ICsraikgeworCQkgICAgaWYgKGogIT0gMCkgeworCQkJbGluZS0+dGV4dFt4ICsgal0gPSBsaW5lLT50ZXh0W3hdOworCQkgICAgfQorCQkgICAgU2V0V2lkZWNFeHQobGluZS0+dGV4dFt4ICsgal0sIGopOworCQl9CisJICAgIH0KKwkgICAgeCArPSBsZW47CisJICAgIGVuZCArPSBsZW4gLSAxOworCX0gZWxzZSB7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCBvcnBoYW5lZCBjZWxscyBvZiBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycyB3aGljaCBsaWUgYWZ0ZXIgdGhlIG5ldworICAgICAqIHN0cmluZyB0byBibGFua3MuCisgICAgICovCisgICAgd2hpbGUgKHggPD0gd2luLT5fbWF4eCAmJiBpc1dpZGVjRXh0KGxpbmUtPnRleHRbeF0pKSB7CisJbGluZS0+dGV4dFt4XSA9IF9uY19yZW5kZXIod2luLCBibGFuayk7CisJKytlbmQ7CisJKyt4OworICAgIH0KKyAgICBDSEFOR0VEX1JBTkdFKGxpbmUsIHN0YXJ0LCBlbmQpOworCisgICAgX25jX3N5bmNob29rKHdpbik7CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2FkZG53c3RyKFdJTkRPVyAqd2luLCBjb25zdCB3Y2hhcl90ICpzdHIsIGludCBuKQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIndhZGRud3N0ciglcCwlcywlZCkiKSwgd2luLCBfbmNfdmlzd2J1Zm4oc3RyLCBuKSwgbikpOworCisgICAgaWYgKHdpbiAmJiAoc3RyICE9IDApKSB7CisJVFIoVFJBQ0VfVklSVFBVVCB8IFRSQUNFX0FUVFJTLAorCSAgICgiLi4uIGN1cnJlbnQgJXMiLCBfdHJhY2VhdHRyKFdJTkRPV19BVFRSUyh3aW4pKSkpOworCWNvZGUgPSBPSzsKKwlpZiAobiA8IDApCisJICAgIG4gPSAoaW50KSB3Y3NsZW4oc3RyKTsKKworCVRSKFRSQUNFX1ZJUlRQVVQsICgic3RyIGlzIG5vdCBudWxsLCBsZW5ndGggPSAlZCIsIG4pKTsKKwl3aGlsZSAoKG4tLSA+IDApICYmICgqc3RyICE9IEwoJ1wwJykpKSB7CisJICAgIE5DVVJTRVNfQ0hfVCBjaDsKKwkgICAgVFIoVFJBQ0VfVklSVFBVVCwgKCIqc3RyWzBdID0gJSNseCIsICh1bnNpZ25lZCBsb25nKSAqc3RyKSk7CisJICAgIFNldENoYXIoY2gsICpzdHIrKywgQV9OT1JNQUwpOworCSAgICBpZiAod2FkZF93Y2god2luLCAmY2gpID09IEVSUikgeworCQljb2RlID0gRVJSOworCQlicmVhazsKKwkgICAgfQorCX0KKwlfbmNfc3luY2hvb2sod2luKTsKKyAgICB9CisgICAgVFIoVFJBQ0VfVklSVFBVVCwgKCJ3YWRkbndzdHIgcmV0dXJucyAlZCIsIGNvZGUpKTsKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYmVlcC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9iZWVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3OGYyNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYmVlcC5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWJlZXAuYworICoKKyAqCVRoZSByb3V0aW5lIGJlZXAoKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogYmVlcCwgZmxhc2ggKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9iZWVwLmMsdiAxLjEwIDIwMDUvMDQvMDkgMTU6MjA6MDQgdG9tIEV4cCAkIikKKworLyoKKyAqCWJlZXAoKQorICoKKyAqCVNvdW5kIHRoZSBjdXJyZW50IHRlcm1pbmFsJ3MgYXVkaWJsZSBiZWxsIGlmIGl0IGhhcyBvbmUuICAgSWYgbm90LAorICoJZmxhc2ggdGhlIHNjcmVlbiBpZiBwb3NzaWJsZS4KKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorYmVlcCh2b2lkKQoreworICAgIGludCByZXMgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiYmVlcCgpIikpKTsKKworICAgIC8qIEZJWE1FOiBzaG91bGQgbWFrZSBzdXJlIHRoYXQgd2UgYXJlIG5vdCBpbiBhbHRjaGFyIG1vZGUgKi8KKyAgICBpZiAoY3VyX3Rlcm0gPT0gMCkgeworCXJlcyA9IEVSUjsKKyAgICB9IGVsc2UgaWYgKGJlbGwpIHsKKwlUUFVUU19UUkFDRSgiYmVsbCIpOworCXJlcyA9IHB1dHAoYmVsbCk7CisJX25jX2ZsdXNoKCk7CisgICAgfSBlbHNlIGlmIChmbGFzaF9zY3JlZW4pIHsKKwlUUFVUU19UUkFDRSgiZmxhc2hfc2NyZWVuIik7CisJcmVzID0gcHV0cChmbGFzaF9zY3JlZW4pOworCV9uY19mbHVzaCgpOworICAgIH0KKworICAgIHJldHVybkNvZGUocmVzKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYmtnZC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9ia2dkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5ZTBjNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYmtnZC5jCkBAIC0wLDAgKzEsMTU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgMTk5NyAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogU3ZlbiBWZXJkb29sYWVnZSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfYmtnZC5jLHYgMS4zNiAyMDA4LzAzLzIzIDAwOjA5OjE0IHRvbSBFeHAgJCIpCisKKy8qCisgKiBTZXQgdGhlIHdpbmRvdydzIGJhY2tncm91bmQgaW5mb3JtYXRpb24uCisgKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorTkNVUlNFU19FWFBPUlQodm9pZCkKKyNlbHNlCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorI2VuZGlmCit3Ymtncm5kc2V0KFdJTkRPVyAqd2luLCBjb25zdCBBUkdfQ0hfVCBjaCkKK3sKKyAgICBUKChUX0NBTExFRCgid2JrZ2RzZXQoJXAsJXMpIiksIHdpbiwgX3RyYWNlY2hfdChjaCkpKTsKKworICAgIGlmICh3aW4pIHsKKwlhdHRyX3Qgb2ZmID0gQXR0ck9mKHdpbi0+X25jX2JrZ2QpOworCWF0dHJfdCBvbiA9IEF0dHJPZihDSERFUkVGKGNoKSk7CisKKwl0b2dnbGVfYXR0cl9vZmYoV0lORE9XX0FUVFJTKHdpbiksIG9mZik7CisJdG9nZ2xlX2F0dHJfb24oV0lORE9XX0FUVFJTKHdpbiksIG9uKTsKKworI2lmIE5DVVJTRVNfRVhUX0NPTE9SUworCXsKKwkgICAgaW50IHBhaXI7CisKKwkgICAgaWYgKChwYWlyID0gR2V0UGFpcih3aW4tPl9uY19ia2dkKSkgIT0gMCkKKwkJU0VUX1dJTkRPV19QQUlSKHdpbiwgMCk7CisJICAgIGlmICgocGFpciA9IEdldFBhaXIoQ0hERVJFRihjaCkpKSAhPSAwKQorCQlTRVRfV0lORE9XX1BBSVIod2luLCBwYWlyKTsKKwl9CisjZW5kaWYKKworCWlmIChDaGFyT2YoQ0hERVJFRihjaCkpID09IEwoJ1wwJykpIHsKKwkgICAgU2V0Q2hhcih3aW4tPl9uY19ia2dkLCBCTEFOS19URVhULCBBdHRyT2YoQ0hERVJFRihjaCkpKTsKKwkgICAgaWZfRVhUX0NPTE9SUyhTZXRQYWlyKHdpbi0+X25jX2JrZ2QsIEdldFBhaXIoQ0hERVJFRihjaCkpKSk7CisJfSBlbHNlIHsKKwkgICAgd2luLT5fbmNfYmtnZCA9IENIREVSRUYoY2gpOworCX0KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCS8qCisJICogSWYgd2UncmUgY29tcGlsZWQgZm9yIHdpZGUtY2hhcmFjdGVyIHN1cHBvcnQsIF9ia2dybmQgaXMgdGhlCisJICogcHJlZmVycmVkIGxvY2F0aW9uIGZvciB0aGUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBzaW5jZSBpdCBzdG9yZXMKKwkgKiBtb3JlIHRoYW4gX2JrZ2QuICBVcGRhdGUgX2JrZ2QgZWFjaCB0aW1lIHdlIG1vZGlmeSBfYmtncm5kLCBzbyB0aGUKKwkgKiBtYWNybyBnZXRia2dkKCkgd2lsbCB3b3JrLgorCSAqLworCXsKKwkgICAgY2NoYXJfdCB3Y2g7CisJICAgIGludCB0bXA7CisKKwkgICAgd2dldGJrZ3JuZCh3aW4sICZ3Y2gpOworCSAgICB0bXAgPSBfbmNfdG9fY2hhcigod2ludF90KSBDaGFyT2Yod2NoKSk7CisKKwkgICAgd2luLT5fYmtnZCA9ICgoKHRtcCA9PSBFT0YpID8gJyAnIDogKGNodHlwZSkgdG1wKQorCQkJICB8IChBdHRyT2Yod2NoKSAmIEFMTF9CVVRfQ09MT1IpCisJCQkgIHwgQ09MT1JfUEFJUihHRVRfV0lORE9XX1BBSVIod2luKSkpOworCX0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm5Wb2lkOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQord2JrZ2RzZXQoV0lORE9XICp3aW4sIGNodHlwZSBjaCkKK3sKKyAgICBOQ1VSU0VTX0NIX1Qgd2NoOworICAgIFNldENoYXIyKHdjaCwgY2gpOworICAgIHdia2dybmRzZXQod2luLCBDSFJFRih3Y2gpKTsKK30KKworLyoKKyAqIFNldCB0aGUgd2luZG93J3MgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgYXBwbHkgaXQgdG8gZWFjaCBjZWxsLgorICovCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK05DVVJTRVNfRVhQT1JUKGludCkKKyNlbHNlCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgaW50CisjdW5kZWYgd2JrZ3JuZAorI2VuZGlmCit3Ymtncm5kKFdJTkRPVyAqd2luLCBjb25zdCBBUkdfQ0hfVCBjaCkKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKyAgICBpbnQgeCwgeTsKKyAgICBOQ1VSU0VTX0NIX1QgbmV3X2JrZ2QgPSBDSERFUkVGKGNoKTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3YmtnZCglcCwlcykiKSwgd2luLCBfdHJhY2VjaF90KGNoKSkpOworCisgICAgaWYgKHdpbikgeworCU5DVVJTRVNfQ0hfVCBvbGRfYmtncm5kOworCXdnZXRia2dybmQod2luLCAmb2xkX2JrZ3JuZCk7CisKKwl3Ymtncm5kc2V0KHdpbiwgQ0hSRUYobmV3X2JrZ2QpKTsKKwl3YXR0cnNldCh3aW4sIEF0dHJPZih3aW4tPl9uY19ia2dkKSk7CisKKwlmb3IgKHkgPSAwOyB5IDw9IHdpbi0+X21heHk7IHkrKykgeworCSAgICBmb3IgKHggPSAwOyB4IDw9IHdpbi0+X21heHg7IHgrKykgeworCQlpZiAoQ2hhckVxKHdpbi0+X2xpbmVbeV0udGV4dFt4XSwgb2xkX2JrZ3JuZCkpIHsKKwkJICAgIHdpbi0+X2xpbmVbeV0udGV4dFt4XSA9IHdpbi0+X25jX2JrZ2Q7CisJCX0gZWxzZSB7CisJCSAgICBOQ1VSU0VTX0NIX1Qgd2NoID0gd2luLT5fbGluZVt5XS50ZXh0W3hdOworCQkgICAgUmVtQXR0cih3Y2gsICh+KEFfQUxUQ0hBUlNFVCB8IEFfQ0hBUlRFWFQpKSk7CisJCSAgICB3aW4tPl9saW5lW3ldLnRleHRbeF0gPSBfbmNfcmVuZGVyKHdpbiwgd2NoKTsKKwkJfQorCSAgICB9CisJfQorCXRvdWNod2luKHdpbik7CisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3YmtnZChXSU5ET1cgKndpbiwgY2h0eXBlIGNoKQoreworICAgIE5DVVJTRVNfQ0hfVCB3Y2g7CisgICAgU2V0Q2hhcjIod2NoLCBjaCk7CisgICAgcmV0dXJuIHdia2dybmQod2luLCBDSFJFRih3Y2gpKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfYm94LmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2JveC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Y2ZjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2JveC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogU3ZlbiBWZXJkb29sYWVnZSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2JveC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2JvcmRlcigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2JveC5jLHYgMS4yMiAyMDA1LzExLzI2IDE1OjM5OjQyIHRvbSBFeHAgJCIpCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorc3RhdGljIE5DVVJTRVNfSU5MSU5FIGNodHlwZQorX215X3JlbmRlcihXSU5ET1cgKndpbiwgY2h0eXBlIGNoKQoreworICAgIE5DVVJTRVNfQ0hfVCB3Y2g7CisgICAgU2V0Q2hhcjIod2NoLCBjaCk7CisgICAgd2NoID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisgICAgcmV0dXJuIENoYXJPZih3Y2gpIHwgQXR0ck9mKHdjaCk7Cit9CisjZGVmaW5lIFJFTkRFUl9XSVRIX0RFRkFVTFQoY2gsZGVmKSB3ICMjIGNoID0gX215X3JlbmRlcih3aW4sIChjaCA9PSAwKSA/IGRlZiA6IGNoKQorI2Vsc2UKKyNkZWZpbmUgUkVOREVSX1dJVEhfREVGQVVMVChjaCxkZWYpIHcgIyMgY2ggPSBfbmNfcmVuZGVyKHdpbiwgKGNoID09IDApID8gZGVmIDogY2gpCisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQoaW50KQord2JvcmRlcihXSU5ET1cgKndpbiwKKwljaHR5cGUgbHMsIGNodHlwZSBycywKKwljaHR5cGUgdHMsIGNodHlwZSBicywKKwljaHR5cGUgdGwsIGNodHlwZSB0ciwKKwljaHR5cGUgYmwsIGNodHlwZSBicikKK3sKKyAgICBOQ1VSU0VTX1NJWkVfVCBpOworICAgIE5DVVJTRVNfU0laRV9UIGVuZHgsIGVuZHk7CisgICAgY2h0eXBlIHdscywgd3JzLCB3dHMsIHdicywgd3RsLCB3dHIsIHdibCwgd2JyOworCisgICAgVCgoVF9DQUxMRUQoIndib3JkZXIoJXAsJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMpIiksCisgICAgICAgd2luLAorICAgICAgIF90cmFjZWNodHlwZTIoMSwgbHMpLAorICAgICAgIF90cmFjZWNodHlwZTIoMiwgcnMpLAorICAgICAgIF90cmFjZWNodHlwZTIoMywgdHMpLAorICAgICAgIF90cmFjZWNodHlwZTIoNCwgYnMpLAorICAgICAgIF90cmFjZWNodHlwZTIoNSwgdGwpLAorICAgICAgIF90cmFjZWNodHlwZTIoNiwgdHIpLAorICAgICAgIF90cmFjZWNodHlwZTIoNywgYmwpLAorICAgICAgIF90cmFjZWNodHlwZTIoOCwgYnIpKSk7CisKKyAgICBpZiAoIXdpbikKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGxzLCBBQ1NfVkxJTkUpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQocnMsIEFDU19WTElORSk7CisgICAgUkVOREVSX1dJVEhfREVGQVVMVCh0cywgQUNTX0hMSU5FKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGJzLCBBQ1NfSExJTkUpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQodGwsIEFDU19VTENPUk5FUik7CisgICAgUkVOREVSX1dJVEhfREVGQVVMVCh0ciwgQUNTX1VSQ09STkVSKTsKKyAgICBSRU5ERVJfV0lUSF9ERUZBVUxUKGJsLCBBQ1NfTExDT1JORVIpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQoYnIsIEFDU19MUkNPUk5FUik7CisKKyAgICBUKCgidXNpbmcgJXMsICVzLCAlcywgJXMsICVzLCAlcywgJXMsICVzIiwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDEsIHdscyksCisgICAgICAgX3RyYWNlY2h0eXBlMigyLCB3cnMpLAorICAgICAgIF90cmFjZWNodHlwZTIoMywgd3RzKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDQsIHdicyksCisgICAgICAgX3RyYWNlY2h0eXBlMig1LCB3dGwpLAorICAgICAgIF90cmFjZWNodHlwZTIoNiwgd3RyKSwKKyAgICAgICBfdHJhY2VjaHR5cGUyKDcsIHdibCksCisgICAgICAgX3RyYWNlY2h0eXBlMig4LCB3YnIpKSk7CisKKyAgICBlbmR4ID0gd2luLT5fbWF4eDsKKyAgICBlbmR5ID0gd2luLT5fbWF4eTsKKworICAgIGZvciAoaSA9IDA7IGkgPD0gZW5keDsgaSsrKSB7CisJU2V0Q2hhcjIod2luLT5fbGluZVswXS50ZXh0W2ldLCB3dHMpOworCVNldENoYXIyKHdpbi0+X2xpbmVbZW5keV0udGV4dFtpXSwgd2JzKTsKKyAgICB9CisgICAgd2luLT5fbGluZVtlbmR5XS5maXJzdGNoYXIgPSB3aW4tPl9saW5lWzBdLmZpcnN0Y2hhciA9IDA7CisgICAgd2luLT5fbGluZVtlbmR5XS5sYXN0Y2hhciA9IHdpbi0+X2xpbmVbMF0ubGFzdGNoYXIgPSBlbmR4OworCisgICAgZm9yIChpID0gMDsgaSA8PSBlbmR5OyBpKyspIHsKKwlTZXRDaGFyMih3aW4tPl9saW5lW2ldLnRleHRbMF0sIHdscyk7CisJU2V0Q2hhcjIod2luLT5fbGluZVtpXS50ZXh0W2VuZHhdLCB3cnMpOworCXdpbi0+X2xpbmVbaV0uZmlyc3RjaGFyID0gMDsKKwl3aW4tPl9saW5lW2ldLmxhc3RjaGFyID0gZW5keDsKKyAgICB9CisgICAgU2V0Q2hhcjIod2luLT5fbGluZVswXS50ZXh0WzBdLCB3dGwpOworICAgIFNldENoYXIyKHdpbi0+X2xpbmVbMF0udGV4dFtlbmR4XSwgd3RyKTsKKyAgICBTZXRDaGFyMih3aW4tPl9saW5lW2VuZHldLnRleHRbMF0sIHdibCk7CisgICAgU2V0Q2hhcjIod2luLT5fbGluZVtlbmR5XS50ZXh0W2VuZHhdLCB3YnIpOworCisgICAgX25jX3N5bmNob29rKHdpbik7CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NoZ2F0LmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NoZ2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllZWZhNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfY2hnYXQuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBTdmVuIFZlcmRvb2xhZWdlICAgICAgICAgICAgICAgICAgICAgICAgMjAwMSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDUgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2NoZ2F0LmMKKyoqCisqKglUaGUgcm91dGluZSB3Y2hnYXQoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9jaGdhdC5jLHYgMS43IDIwMDYvMDcvMTUgMjI6MDc6MTEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2NoZ2F0KFdJTkRPVyAqd2luLCBpbnQgbiwgYXR0cl90IGF0dHIsIHNob3J0IGNvbG9yLCBjb25zdCB2b2lkICpvcHRzIEdDQ19VTlVTRUQpCit7CisgICAgaW50IGk7CisKKyAgICBUKChUX0NBTExFRCgid2NoZ2F0KCVwLCVkLCVzLCVkKSIpLCB3aW4sIG4sIF90cmFjZWF0dHIoYXR0ciksIGNvbG9yKSk7CisKKyAgICBpZiAod2luKSB7CisJc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbd2luLT5fY3VyeV0pOworCisJdG9nZ2xlX2F0dHJfb24oYXR0ciwgQ09MT1JfUEFJUihjb2xvcikpOworCisJZm9yIChpID0gd2luLT5fY3VyeDsgaSA8PSB3aW4tPl9tYXh4ICYmIChuID09IC0xIHx8IChuLS0gPiAwKSk7IGkrKykgeworCSAgICBTZXRBdHRyKGxpbmUtPnRleHRbaV0sIGF0dHIpOworCSAgICBTZXRQYWlyKGxpbmUtPnRleHRbaV0sIGNvbG9yKTsKKwkgICAgQ0hBTkdFRF9DRUxMKGxpbmUsIGkpOworCX0KKworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfY2xlYXIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfY2xlYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGI0ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9jbGVhci5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2NsZWFyLmMKKyoqCisqKglUaGUgcm91dGluZSB3Y2xlYXIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9jbGVhci5jLHYgMS43IDIwMDAvMTIvMTAgMDI6NDM6MjYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2NsZWFyKFdJTkRPVyAqd2luKQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIndjbGVhciglcCkiKSwgd2luKSk7CisKKyAgICBpZiAoKGNvZGUgPSB3ZXJhc2Uod2luKSkgIT0gRVJSKQorCXdpbi0+X2NsZWFyID0gVFJVRTsKKworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NsZWFyb2suYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfY2xlYXJvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NsZWFyb2suYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9jbGVhcm9rLmMKKyoqCisqKglUaGUgcm91dGluZSBjbGVhcm9rLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2NsZWFyb2suYyx2IDEuNCAyMDAwLzEyLzEwIDAyOjQzOjI2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2NsZWFyb2soV0lORE9XICp3aW4sIGJvb2wgZmxhZykKK3sKKyAgICBUKChUX0NBTExFRCgiY2xlYXJvayglcCwlZCkiKSwgd2luLCBmbGFnKSk7CisKKyAgICBpZiAod2luKSB7CisJd2luLT5fY2xlYXIgPSBmbGFnOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfY2xyYm90LmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NscmJvdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTk2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NscmJvdC5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2NscmJvdC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2NscnRvYm90KCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfY2xyYm90LmMsdiAxLjIwIDIwMDYvMTAvMTQgMjA6NDM6MzEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2NscnRvYm90KFdJTkRPVyAqd2luKQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIndjbHJ0b2JvdCglcCkiKSwgd2luKSk7CisKKyAgICBpZiAod2luKSB7CisJTkNVUlNFU19TSVpFX1QgeTsKKwlOQ1VSU0VTX1NJWkVfVCBzdGFydHggPSB3aW4tPl9jdXJ4OworCU5DVVJTRVNfQ0hfVCBibGFuayA9IHdpbi0+X25jX2JrZ2Q7CisKKwlUKCgiY2xlYXJpbmcgZnJvbSB5ID0gJWxkIHRvIHkgPSAlbGQgd2l0aCBtYXh4ID0gICVsZCIsCisJICAgKGxvbmcpIHdpbi0+X2N1cnksIChsb25nKSB3aW4tPl9tYXh5LCAobG9uZykgd2luLT5fbWF4eCkpOworCisJZm9yICh5ID0gd2luLT5fY3VyeTsgeSA8PSB3aW4tPl9tYXh5OyB5KyspIHsKKwkgICAgc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbeV0pOworCSAgICBOQ1VSU0VTX0NIX1QgKnB0ciA9ICYobGluZS0+dGV4dFtzdGFydHhdKTsKKwkgICAgTkNVUlNFU19DSF9UICplbmQgPSAmKGxpbmUtPnRleHRbd2luLT5fbWF4eF0pOworCisJICAgIENIQU5HRURfVE9fRU9MKGxpbmUsIHN0YXJ0eCwgd2luLT5fbWF4eCk7CisKKwkgICAgd2hpbGUgKHB0ciA8PSBlbmQpCisJCSpwdHIrKyA9IGJsYW5rOworCisJICAgIHN0YXJ0eCA9IDA7CisJfQorCV9uY19zeW5jaG9vayh3aW4pOworCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfY2xyZW9sLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NscmVvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NmViZDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NscmVvbC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMTk5OSwyMDAwLDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2NscmVvbC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2NscnRvZW9sKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfY2xyZW9sLmMsdiAxLjIxIDIwMDEvMTIvMTkgMDE6MDY6MDQgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2NscnRvZW9sKFdJTkRPVyAqd2luKQoreworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIndjbHJ0b2VvbCglcCkiKSwgd2luKSk7CisKKyAgICBpZiAod2luKSB7CisJTkNVUlNFU19DSF9UIGJsYW5rOworCU5DVVJTRVNfQ0hfVCAqcHRyLCAqZW5kOworCXN0cnVjdCBsZGF0ICpsaW5lOworCU5DVVJTRVNfU0laRV9UIHkgPSB3aW4tPl9jdXJ5OworCU5DVVJTRVNfU0laRV9UIHggPSB3aW4tPl9jdXJ4OworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGp1c3Qgd3JhcHBlZCB0aGUgY3Vyc29yLCB0aGUgY2xlYXIgYXBwbGllcyB0byB0aGUKKwkgKiBuZXcgbGluZSwgdW5sZXNzIHdlIGFyZSBhdCB0aGUgbG93ZXIgcmlnaHQgY29ybmVyLgorCSAqLworCWlmICgod2luLT5fZmxhZ3MgJiBfV1JBUFBFRCkgIT0gMAorCSAgICAmJiB5IDwgd2luLT5fbWF4eSkgeworCSAgICB3aW4tPl9mbGFncyAmPSB+X1dSQVBQRUQ7CisJfQorCisJLyoKKwkgKiBUaGVyZSdzIG5vIHBvaW50IGluIGNsZWFyaW5nIGlmIHdlJ3JlIG5vdCBvbiBhIGxlZ2FsCisJICogcG9zaXRpb24sIGVpdGhlci4KKwkgKi8KKwlpZiAoKHdpbi0+X2ZsYWdzICYgX1dSQVBQRUQpICE9IDAKKwkgICAgfHwgeSA+IHdpbi0+X21heHkKKwkgICAgfHwgeCA+IHdpbi0+X21heHgpCisJICAgIHJldHVybkNvZGUoRVJSKTsKKworCWJsYW5rID0gd2luLT5fbmNfYmtnZDsKKwlsaW5lID0gJndpbi0+X2xpbmVbeV07CisJQ0hBTkdFRF9UT19FT0wobGluZSwgeCwgd2luLT5fbWF4eCk7CisKKwlwdHIgPSAmKGxpbmUtPnRleHRbeF0pOworCWVuZCA9ICYobGluZS0+dGV4dFt3aW4tPl9tYXh4XSk7CisKKwl3aGlsZSAocHRyIDw9IGVuZCkKKwkgICAgKnB0cisrID0gYmxhbms7CisKKwlfbmNfc3luY2hvb2sod2luKTsKKwljb2RlID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NvbG9yLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NvbG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhZTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfY29sb3IuYwpAQCAtMCwwICsxLDU5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBsaWJfY29sb3IuYworICoKKyAqIEhhbmRsZXMgY29sb3IgZW11bGF0aW9uIG9mIFNZUyBWIGN1cnNlcworICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGVybS5oPgorI2luY2x1ZGUgPHRpYy5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2NvbG9yLmMsdiAxLjg1IDIwMDcvMDQvMDcgMTc6MDc6MjggdG9tIEV4cCAkIikKKworLyoKKyAqIFRoZXNlIHNob3VsZCBiZSBzY3JlZW4gc3RydWN0dXJlIG1lbWJlcnMuICBUaGV5IG5lZWQgdG8gYmUgZ2xvYmFscyBmb3IKKyAqIGhpc3RvcmljYWwgcmVhc29ucy4gIFNvIHdlIGFzc2lnbiB0aGVtIGluIHN0YXJ0X2NvbG9yKCkgYW5kIGFsc28gaW4KKyAqIHNldF90ZXJtKCkncyBzY3JlZW4tc3dpdGNoaW5nIGxvZ2ljLgorICovCisjaWYgVVNFX1JFRU5UUkFOVAorTkNVUlNFU19FWFBPUlQoaW50KQorTkNVUlNFU19QVUJMSUNfVkFSKENPTE9SX1BBSVJTKSAodm9pZCkKK3sKKyAgICByZXR1cm4gU1AgPyBTUC0+X3BhaXJfY291bnQgOiAtMTsKK30KK05DVVJTRVNfRVhQT1JUKGludCkKK05DVVJTRVNfUFVCTElDX1ZBUihDT0xPUlMpICh2b2lkKQoreworICAgIHJldHVybiBTUCA/IFNQLT5fY29sb3JfY291bnQgOiAtMTsKK30KKyNlbHNlCitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBDT0xPUl9QQUlSUyA9IDA7CitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBDT0xPUlMgPSAwOworI2VuZGlmCisKKyNkZWZpbmUgREFUQShyLGcsYikge3IsZyxiLCAwLDAsMCwgMH0KKworI2RlZmluZSBUWVBFX0NBTExPQyh0eXBlLGVsdHMpIHR5cGVDYWxsb2ModHlwZSwgKHVuc2lnbmVkKShlbHRzKSkKKworI2RlZmluZSBNQVhfUEFMRVRURQk4CisKKyNkZWZpbmUgT2tDb2xvckhpKG4pCSgoKG4pIDwgQ09MT1JTKSAmJiAoKG4pIDwgbWF4X2NvbG9ycykpCisjZGVmaW5lIEluUGFsZXR0ZShuKQkoKG4pID49IDAgJiYgKG4pIDwgTUFYX1BBTEVUVEUpCisKKy8qCisgKiBHaXZlbiBhIFJHQiByYW5nZSBvZiAwLi4xMDAwLCB3ZSdsbCBub3JtYWxseSBzZXQgdGhlIGluZGl2aWR1YWwgdmFsdWVzCisgKiB0byBhYm91dCAyLzMgb2YgdGhlIG1heGltdW0sIGxlYXZpbmcgZnVsbC1yYW5nZSBmb3IgYm9sZC9icmlnaHQgY29sb3JzLgorICovCisjZGVmaW5lIFJHQl9PTiAgNjgwCisjZGVmaW5lIFJHQl9PRkYgMAorLyogKklOREVOVC1PRkYqICovCitzdGF0aWMgY29uc3QgY29sb3JfdCBjZ2FfcGFsZXR0ZVtdID0KK3sKKyAgICAvKiAgUiAgICAgICAgICAgICAgIEcgICAgICAgICAgICAgICBCICovCisgICAgREFUQShSR0JfT0ZGLAlSR0JfT0ZGLAlSR0JfT0ZGKSwJLyogQ09MT1JfQkxBQ0sgKi8KKyAgICBEQVRBKFJHQl9PTiwJUkdCX09GRiwJUkdCX09GRiksCS8qIENPTE9SX1JFRCAqLworICAgIERBVEEoUkdCX09GRiwJUkdCX09OLAkJUkdCX09GRiksCS8qIENPTE9SX0dSRUVOICovCisgICAgREFUQShSR0JfT04sCVJHQl9PTiwJCVJHQl9PRkYpLAkvKiBDT0xPUl9ZRUxMT1cgKi8KKyAgICBEQVRBKFJHQl9PRkYsCVJHQl9PRkYsCVJHQl9PTiksCS8qIENPTE9SX0JMVUUgKi8KKyAgICBEQVRBKFJHQl9PTiwJUkdCX09GRiwJUkdCX09OKSwJLyogQ09MT1JfTUFHRU5UQSAqLworICAgIERBVEEoUkdCX09GRiwJUkdCX09OLAkJUkdCX09OKSwJLyogQ09MT1JfQ1lBTiAqLworICAgIERBVEEoUkdCX09OLAlSR0JfT04sCQlSR0JfT04pLAkvKiBDT0xPUl9XSElURSAqLworfTsKKworc3RhdGljIGNvbnN0IGNvbG9yX3QgaGxzX3BhbGV0dGVbXSA9Cit7CisgICAgLyogIAlIICAgICAgIEwgICAgICAgUyAqLworICAgIERBVEEoCTAsCTAsCTApLAkJLyogQ09MT1JfQkxBQ0sgKi8KKyAgICBEQVRBKAkxMjAsCTUwLAkxMDApLAkJLyogQ09MT1JfUkVEICovCisgICAgREFUQSgJMjQwLAk1MCwJMTAwKSwJCS8qIENPTE9SX0dSRUVOICovCisgICAgREFUQSgJMTgwLAk1MCwJMTAwKSwJCS8qIENPTE9SX1lFTExPVyAqLworICAgIERBVEEoCTMzMCwJNTAsCTEwMCksCQkvKiBDT0xPUl9CTFVFICovCisgICAgREFUQSgJNjAsCTUwLAkxMDApLAkJLyogQ09MT1JfTUFHRU5UQSAqLworICAgIERBVEEoCTMwMCwJNTAsCTEwMCksCQkvKiBDT0xPUl9DWUFOICovCisgICAgREFUQSgJMCwJNTAsCTEwMCksCQkvKiBDT0xPUl9XSElURSAqLworfTsKKy8qICpJTkRFTlQtT04qICovCisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworLyoKKyAqIFRoZXNlIGFyZSBjYWxsZWQgZnJvbSBfbmNfZG9fY29sb3IoKSwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbQorICogdmlkYXR0ciAtIHNvIHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQgU1AgbWF5IGJlIG51bGwuCisgKi8KK3N0YXRpYyBpbnQKK2RlZmF1bHRfZmcodm9pZCkKK3sKKyAgICByZXR1cm4gKFNQICE9IDApID8gU1AtPl9kZWZhdWx0X2ZnIDogQ09MT1JfV0hJVEU7Cit9CisKK3N0YXRpYyBpbnQKK2RlZmF1bHRfYmcodm9pZCkKK3sKKyAgICByZXR1cm4gU1AgIT0gMCA/IFNQLT5fZGVmYXVsdF9iZyA6IENPTE9SX0JMQUNLOworfQorI2Vsc2UKKyNkZWZpbmUgZGVmYXVsdF9mZygpIENPTE9SX1dISVRFCisjZGVmaW5lIGRlZmF1bHRfYmcoKSBDT0xPUl9CTEFDSworI2VuZGlmCisKKy8qCisgKiBTVnI0IGN1cnNlcyBpcyBrbm93biB0byBpbnRlcmNoYW5nZSBjb2xvciBjb2RlcyAoMSw0KSBhbmQgKDMsNiksIHBvc3NpYmx5CisgKiB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggYSBwcmUtQU5TSSBzY2hlbWUuICBUaGUgc2FtZSBzY2hlbWUgaXMKKyAqIGFsc28gdXNlZCBpbiB0aGUgRnJlZUJTRCBzeXNjb25zLgorICovCitzdGF0aWMgaW50Cit0b2dnbGVkX2NvbG9ycyhpbnQgYykKK3sKKyAgICBpZiAoYyA8IDE2KSB7CisJc3RhdGljIGNvbnN0IGludCB0YWJsZVtdID0KKwl7MCwgNCwgMiwgNiwgMSwgNSwgMywgNywKKwkgOCwgMTIsIDEwLCAxNCwgOSwgMTMsIDExLCAxNX07CisJYyA9IHRhYmxlW2NdOworICAgIH0KKyAgICByZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQKK3NldF9iYWNrZ3JvdW5kX2NvbG9yKGludCBiZywgaW50ICgqb3V0YykgKGludCkpCit7CisgICAgaWYgKHNldF9hX2JhY2tncm91bmQpIHsKKwlUUFVUU19UUkFDRSgic2V0X2FfYmFja2dyb3VuZCIpOworCXRwdXRzKFRQQVJNXzEoc2V0X2FfYmFja2dyb3VuZCwgYmcpLCAxLCBvdXRjKTsKKyAgICB9IGVsc2UgeworCVRQVVRTX1RSQUNFKCJzZXRfYmFja2dyb3VuZCIpOworCXRwdXRzKFRQQVJNXzEoc2V0X2JhY2tncm91bmQsIHRvZ2dsZWRfY29sb3JzKGJnKSksIDEsIG91dGMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3NldF9mb3JlZ3JvdW5kX2NvbG9yKGludCBmZywgaW50ICgqb3V0YykgKGludCkpCit7CisgICAgaWYgKHNldF9hX2ZvcmVncm91bmQpIHsKKwlUUFVUU19UUkFDRSgic2V0X2FfZm9yZWdyb3VuZCIpOworCXRwdXRzKFRQQVJNXzEoc2V0X2FfZm9yZWdyb3VuZCwgZmcpLCAxLCBvdXRjKTsKKyAgICB9IGVsc2UgeworCVRQVVRTX1RSQUNFKCJzZXRfZm9yZWdyb3VuZCIpOworCXRwdXRzKFRQQVJNXzEoc2V0X2ZvcmVncm91bmQsIHRvZ2dsZWRfY29sb3JzKGZnKSksIDEsIG91dGMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2luaXRfY29sb3JfdGFibGUodm9pZCkKK3sKKyAgICBjb25zdCBjb2xvcl90ICp0cDsKKyAgICBpbnQgbjsKKworICAgIHRwID0gKGh1ZV9saWdodG5lc3Nfc2F0dXJhdGlvbikgPyBobHNfcGFsZXR0ZSA6IGNnYV9wYWxldHRlOworICAgIGZvciAobiA9IDA7IG4gPCBDT0xPUlM7IG4rKykgeworCWlmIChJblBhbGV0dGUobikpIHsKKwkgICAgU1AtPl9jb2xvcl90YWJsZVtuXSA9IHRwW25dOworCX0gZWxzZSB7CisJICAgIFNQLT5fY29sb3JfdGFibGVbbl0gPSB0cFtuICUgTUFYX1BBTEVUVEVdOworCSAgICBpZiAoaHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uKSB7CisJCVNQLT5fY29sb3JfdGFibGVbbl0uZ3JlZW4gPSAxMDA7CisJICAgIH0gZWxzZSB7CisJCWlmIChTUC0+X2NvbG9yX3RhYmxlW25dLnJlZCkKKwkJICAgIFNQLT5fY29sb3JfdGFibGVbbl0ucmVkID0gMTAwMDsKKwkJaWYgKFNQLT5fY29sb3JfdGFibGVbbl0uZ3JlZW4pCisJCSAgICBTUC0+X2NvbG9yX3RhYmxlW25dLmdyZWVuID0gMTAwMDsKKwkJaWYgKFNQLT5fY29sb3JfdGFibGVbbl0uYmx1ZSkKKwkJICAgIFNQLT5fY29sb3JfdGFibGVbbl0uYmx1ZSA9IDEwMDA7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKgorICogUmVzZXQgdGhlIGNvbG9yIHBhaXIsIGUuZy4sIHRvIHdoYXRldmVyIGNvbG9yIHBhaXIgMCBpcy4KKyAqLworc3RhdGljIGJvb2wKK3Jlc2V0X2NvbG9yX3BhaXIodm9pZCkKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaWYgKG9yaWdfcGFpciAhPSAwKSB7CisJVFBVVFNfVFJBQ0UoIm9yaWdfcGFpciIpOworCXB1dHAob3JpZ19wYWlyKTsKKwlyZXN1bHQgPSBUUlVFOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmVzZXQgY29sb3IgcGFpcnMgYW5kIGRlZmluaXRpb25zLiAgQWN0dWFsbHkgd2UgZG8gYm90aCBtb3JlIHRvIGFjY29tbW9kYXRlCisgKiBiYWRseS13cml0dGVuIHRlcm1pbmFsIGRlc2NyaXB0aW9ucyB0aGFuIGZvciB0aGUgcmVsYXRpdmVseSByYXJlIGNhc2Ugd2hlcmUKKyAqIHNvbWVvbmUgaGFzIGNoYW5nZWQgdGhlIGNvbG9yIGRlZmluaXRpb25zLgorICovCitib29sCitfbmNfcmVzZXRfY29sb3JzKHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IEZBTFNFOworCisgICAgVCgoVF9DQUxMRUQoIl9uY19yZXNldF9jb2xvcnMoKSIpKSk7CisgICAgaWYgKFNQLT5fY29sb3JfZGVmcyA+IDApCisJU1AtPl9jb2xvcl9kZWZzID0gLShTUC0+X2NvbG9yX2RlZnMpOworCisgICAgaWYgKHJlc2V0X2NvbG9yX3BhaXIoKSkKKwlyZXN1bHQgPSBUUlVFOworICAgIGlmIChvcmlnX2NvbG9ycyAhPSAwKSB7CisJVFBVVFNfVFJBQ0UoIm9yaWdfY29sb3JzIik7CisJcHV0cChvcmlnX2NvbG9ycyk7CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuQm9vbChyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzdGFydF9jb2xvcih2b2lkKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgic3RhcnRfY29sb3IoKSIpKSk7CisKKyAgICBpZiAoU1AgPT0gMCkgeworCXJlc3VsdCA9IEVSUjsKKyAgICB9IGVsc2UgaWYgKFNQLT5fY29sb3JvbikgeworCXJlc3VsdCA9IE9LOworICAgIH0gZWxzZSB7CisKKwlpZiAocmVzZXRfY29sb3JfcGFpcigpICE9IFRSVUUpIHsKKwkgICAgc2V0X2ZvcmVncm91bmRfY29sb3IoZGVmYXVsdF9mZygpLCBfbmNfb3V0Y2gpOworCSAgICBzZXRfYmFja2dyb3VuZF9jb2xvcihkZWZhdWx0X2JnKCksIF9uY19vdXRjaCk7CisJfQorCisJaWYgKG1heF9wYWlycyA+IDAgJiYgbWF4X2NvbG9ycyA+IDApIHsKKwkgICAgU1AtPl9wYWlyX2NvdW50ID0gbWF4X3BhaXJzOworCSAgICBTUC0+X2NvbG9yX2NvdW50ID0gbWF4X2NvbG9yczsKKyNpZiAhVVNFX1JFRU5UUkFOVAorCSAgICBDT0xPUl9QQUlSUyA9IG1heF9wYWlyczsKKwkgICAgQ09MT1JTID0gbWF4X2NvbG9yczsKKyNlbmRpZgorCisJICAgIGlmICgoU1AtPl9jb2xvcl9wYWlycyA9IFRZUEVfQ0FMTE9DKGNvbG9ycGFpcl90LAorCQkJCQkJbWF4X3BhaXJzKSkgIT0gMCkgeworCQlpZiAoKFNQLT5fY29sb3JfdGFibGUgPSBUWVBFX0NBTExPQyhjb2xvcl90LAorCQkJCQkJICAgIG1heF9jb2xvcnMpKSAhPSAwKSB7CisJCSAgICBTUC0+X2NvbG9yX3BhaXJzWzBdID0gUEFJUl9PRihkZWZhdWx0X2ZnKCksIGRlZmF1bHRfYmcoKSk7CisJCSAgICBpbml0X2NvbG9yX3RhYmxlKCk7CisKKwkJICAgIFQoKCJzdGFydGVkIGNvbG9yOiBDT0xPUlMgPSAlZCwgQ09MT1JfUEFJUlMgPSAlZCIsCisJCSAgICAgICBDT0xPUlMsIENPTE9SX1BBSVJTKSk7CisKKwkJICAgIFNQLT5fY29sb3JvbiA9IDE7CisJCSAgICByZXN1bHQgPSBPSzsKKwkJfSBlbHNlIGlmIChTUC0+X2NvbG9yX3BhaXJzICE9IDApIHsKKwkJICAgIEZyZWVBbmROdWxsKFNQLT5fY29sb3JfcGFpcnMpOworCQl9CisJICAgIH0KKwl9IGVsc2UgeworCSAgICByZXN1bHQgPSBPSzsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IERhbmllbCBXZWF2ZXIgPGRhbndAem55eC5jb20+ICovCitzdGF0aWMgdm9pZAorcmdiMmhscyhzaG9ydCByLCBzaG9ydCBnLCBzaG9ydCBiLCBzaG9ydCAqaCwgc2hvcnQgKmwsIHNob3J0ICpzKQorLyogY29udmVydCBSR0IgdG8gSExTIHN5c3RlbSAqLworeworICAgIHNob3J0IG1pbiwgbWF4LCB0OworCisgICAgaWYgKChtaW4gPSBnIDwgciA/IGcgOiByKSA+IGIpCisJbWluID0gYjsKKyAgICBpZiAoKG1heCA9IGcgPiByID8gZyA6IHIpIDwgYikKKwltYXggPSBiOworCisgICAgLyogY2FsY3VsYXRlIGxpZ2h0bmVzcyAqLworICAgICpsID0gKG1pbiArIG1heCkgLyAyMDsKKworICAgIGlmIChtaW4gPT0gbWF4KSB7CQkvKiBibGFjaywgd2hpdGUgYW5kIGFsbCBzaGFkZXMgb2YgZ3JheSAqLworCSpoID0gMDsKKwkqcyA9IDA7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qIGNhbGN1bGF0ZSBzYXR1cmF0aW9uICovCisgICAgaWYgKCpsIDwgNTApCisJKnMgPSAoKG1heCAtIG1pbikgKiAxMDApIC8gKG1heCArIG1pbik7CisgICAgZWxzZQorCSpzID0gKChtYXggLSBtaW4pICogMTAwKSAvICgyMDAwIC0gbWF4IC0gbWluKTsKKworICAgIC8qIGNhbGN1bGF0ZSBodWUgKi8KKyAgICBpZiAociA9PSBtYXgpCisJdCA9IDEyMCArICgoZyAtIGIpICogNjApIC8gKG1heCAtIG1pbik7CisgICAgZWxzZSBpZiAoZyA9PSBtYXgpCisJdCA9IDI0MCArICgoYiAtIHIpICogNjApIC8gKG1heCAtIG1pbik7CisgICAgZWxzZQorCXQgPSAzNjAgKyAoKHIgLSBnKSAqIDYwKSAvIChtYXggLSBtaW4pOworCisgICAgKmggPSB0ICUgMzYwOworfQorCisvKgorICogRXh0ZW5zaW9uICgxOTk3LzEvMTgpIC0gQWxsb3cgbmVnYXRpdmUgZi9iIHZhbHVlcyB0byBzZXQgZGVmYXVsdCBjb2xvcgorICogdmFsdWVzLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitpbml0X3BhaXIoc2hvcnQgcGFpciwgc2hvcnQgZiwgc2hvcnQgYikKK3sKKyAgICBjb2xvcnBhaXJfdCByZXN1bHQ7CisKKyAgICBUKChUX0NBTExFRCgiaW5pdF9wYWlyKCVkLCVkLCVkKSIpLCBwYWlyLCBmLCBiKSk7CisKKyAgICBpZiAoKHBhaXIgPCAwKSB8fCAocGFpciA+PSBDT0xPUl9QQUlSUykgfHwgU1AgPT0gMCB8fCAhU1AtPl9jb2xvcm9uKQorCXJldHVybkNvZGUoRVJSKTsKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICAgIGlmIChTUC0+X2RlZmF1bHRfY29sb3IpIHsKKwlpZiAoZiA8IDApCisJICAgIGYgPSBDT0xPUl9ERUZBVUxUOworCWlmIChiIDwgMCkKKwkgICAgYiA9IENPTE9SX0RFRkFVTFQ7CisJaWYgKCFPa0NvbG9ySGkoZikgJiYgIWlzRGVmYXVsdENvbG9yKGYpKQorCSAgICByZXR1cm5Db2RlKEVSUik7CisJaWYgKCFPa0NvbG9ySGkoYikgJiYgIWlzRGVmYXVsdENvbG9yKGIpKQorCSAgICByZXR1cm5Db2RlKEVSUik7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisJaWYgKChmIDwgMCkgfHwgIU9rQ29sb3JIaShmKQorCSAgICB8fCAoYiA8IDApIHx8ICFPa0NvbG9ySGkoYikKKwkgICAgfHwgKHBhaXIgPCAxKSkKKwkgICAgcmV0dXJuQ29kZShFUlIpOworICAgIH0KKworICAgIC8qCisgICAgICogV2hlbiBhIHBhaXIncyBjb250ZW50IGlzIGNoYW5nZWQsIHJlcGxhY2UgaXRzIGNvbG9ycyAoaWYgcGFpciB3YXMKKyAgICAgKiBpbml0aWFsaXplZCBiZWZvcmUgYSBzY3JlZW4gdXBkYXRlIGlzIHBlcmZvcm1lZCByZXBsYWNpbmcgb3JpZ2luYWwKKyAgICAgKiBwYWlyIGNvbG9ycyB3aXRoIHRoZSBuZXcgb25lcykuCisgICAgICovCisgICAgcmVzdWx0ID0gUEFJUl9PRihmLCBiKTsKKyAgICBpZiAoU1AtPl9jb2xvcl9wYWlyc1twYWlyXSAhPSAwCisJJiYgU1AtPl9jb2xvcl9wYWlyc1twYWlyXSAhPSByZXN1bHQpIHsKKwlpbnQgeSwgeDsKKworCWZvciAoeSA9IDA7IHkgPD0gY3Vyc2NyLT5fbWF4eTsgeSsrKSB7CisJICAgIHN0cnVjdCBsZGF0ICpwdHIgPSAmKGN1cnNjci0+X2xpbmVbeV0pOworCSAgICBib29sIGNoYW5nZWQgPSBGQUxTRTsKKwkgICAgZm9yICh4ID0gMDsgeCA8PSBjdXJzY3ItPl9tYXh4OyB4KyspIHsKKwkJaWYgKEdldFBhaXIocHRyLT50ZXh0W3hdKSA9PSBwYWlyKSB7CisJCSAgICAvKiBTZXQgdGhlIG9sZCBjZWxsIHRvIHplcm8gdG8gZW5zdXJlIGl0IHdpbGwgYmUKKwkJICAgICAgIHVwZGF0ZWQgb24gdGhlIG5leHQgZG91cGRhdGUoKSAqLworCQkgICAgU2V0Q2hhcihwdHItPnRleHRbeF0sIDAsIDApOworCQkgICAgQ0hBTkdFRF9DRUxMKHB0ciwgeCk7CisJCSAgICBjaGFuZ2VkID0gVFJVRTsKKwkJfQorCSAgICB9CisJICAgIGlmIChjaGFuZ2VkKQorCQlfbmNfbWFrZV9vbGRoYXNoKHkpOworCX0KKyAgICB9CisgICAgU1AtPl9jb2xvcl9wYWlyc1twYWlyXSA9IHJlc3VsdDsKKyAgICBpZiAoR0VUX1NDUkVFTl9QQUlSKFNQKSA9PSBwYWlyKQorCVNFVF9TQ1JFRU5fUEFJUihTUCwgKGNodHlwZSkgKH4wKSk7CS8qIGZvcmNlIGF0dHJpYnV0ZSB1cGRhdGUgKi8KKworICAgIGlmIChpbml0aWFsaXplX3BhaXIgJiYgSW5QYWxldHRlKGYpICYmIEluUGFsZXR0ZShiKSkgeworCWNvbnN0IGNvbG9yX3QgKnRwID0gaHVlX2xpZ2h0bmVzc19zYXR1cmF0aW9uID8gaGxzX3BhbGV0dGUgOiBjZ2FfcGFsZXR0ZTsKKworCVRSKFRSQUNFX0FUVFJTLAorCSAgICgiaW5pdGlhbGl6aW5nIHBhaXI6IHBhaXIgPSAlZCwgZmc9KCVkLCVkLCVkKSwgYmc9KCVkLCVkLCVkKSIsCisJICAgIHBhaXIsCisJICAgIHRwW2ZdLnJlZCwgdHBbZl0uZ3JlZW4sIHRwW2ZdLmJsdWUsCisJICAgIHRwW2JdLnJlZCwgdHBbYl0uZ3JlZW4sIHRwW2JdLmJsdWUpKTsKKworCVRQVVRTX1RSQUNFKCJpbml0aWFsaXplX3BhaXIiKTsKKwlwdXRwKFRQQVJNXzcoaW5pdGlhbGl6ZV9wYWlyLAorCQkgICAgIHBhaXIsCisJCSAgICAgdHBbZl0ucmVkLCB0cFtmXS5ncmVlbiwgdHBbZl0uYmx1ZSwKKwkJICAgICB0cFtiXS5yZWQsIHRwW2JdLmdyZWVuLCB0cFtiXS5ibHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKKyNkZWZpbmUgb2tSR0IobikgKChuKSA+PSAwICYmIChuKSA8PSAxMDAwKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitpbml0X2NvbG9yKHNob3J0IGNvbG9yLCBzaG9ydCByLCBzaG9ydCBnLCBzaG9ydCBiKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiaW5pdF9jb2xvciglZCwlZCwlZCwlZCkiKSwgY29sb3IsIHIsIGcsIGIpKTsKKworICAgIGlmIChpbml0aWFsaXplX2NvbG9yICE9IE5VTEwKKwkmJiBTUCAhPSAwCisJJiYgU1AtPl9jb2xvcm9uCisJJiYgKGNvbG9yID49IDAgJiYgT2tDb2xvckhpKGNvbG9yKSkKKwkmJiAob2tSR0IocikgJiYgb2tSR0IoZykgJiYgb2tSR0IoYikpKSB7CisKKwlTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5pbml0ID0gMTsKKwlTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5yID0gcjsKKwlTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5nID0gZzsKKwlTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5iID0gYjsKKworCWlmIChodWVfbGlnaHRuZXNzX3NhdHVyYXRpb24pIHsKKwkgICAgcmdiMmhscyhyLCBnLCBiLAorCQkgICAgJlNQLT5fY29sb3JfdGFibGVbY29sb3JdLnJlZCwKKwkJICAgICZTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5ncmVlbiwKKwkJICAgICZTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5ibHVlKTsKKwl9IGVsc2UgeworCSAgICBTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5yZWQgPSByOworCSAgICBTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5ncmVlbiA9IGc7CisJICAgIFNQLT5fY29sb3JfdGFibGVbY29sb3JdLmJsdWUgPSBiOworCX0KKworCVRQVVRTX1RSQUNFKCJpbml0aWFsaXplX2NvbG9yIik7CisJcHV0cChUUEFSTV80KGluaXRpYWxpemVfY29sb3IsIGNvbG9yLCByLCBnLCBiKSk7CisJU1AtPl9jb2xvcl9kZWZzID0gbWF4KGNvbG9yICsgMSwgU1AtPl9jb2xvcl9kZWZzKTsKKwlyZXN1bHQgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQorY2FuX2NoYW5nZV9jb2xvcih2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJjYW5fY2hhbmdlX2NvbG9yKCkiKSkpOworICAgIHJldHVybkNvZGUoKGNhbl9jaGFuZ2UgIT0gMCkgPyBUUlVFIDogRkFMU0UpOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQoraGFzX2NvbG9ycyh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJoYXNfY29sb3JzKCkiKSkpOworICAgIHJldHVybkNvZGUoKFZBTElEX05VTUVSSUMobWF4X2NvbG9ycykgJiYgVkFMSURfTlVNRVJJQyhtYXhfcGFpcnMpCisJCSYmICgoKHNldF9mb3JlZ3JvdW5kICE9IE5VTEwpCisJCSAgICAgJiYgKHNldF9iYWNrZ3JvdW5kICE9IE5VTEwpKQorCQkgICAgfHwgKChzZXRfYV9mb3JlZ3JvdW5kICE9IE5VTEwpCisJCQkmJiAoc2V0X2FfYmFja2dyb3VuZCAhPSBOVUxMKSkKKwkJICAgIHx8IHNldF9jb2xvcl9wYWlyKSkgPyBUUlVFIDogRkFMU0UpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitjb2xvcl9jb250ZW50KHNob3J0IGNvbG9yLCBzaG9ydCAqciwgc2hvcnQgKmcsIHNob3J0ICpiKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBUKChUX0NBTExFRCgiY29sb3JfY29udGVudCglZCwlcCwlcCwlcCkiKSwgY29sb3IsIHIsIGcsIGIpKTsKKyAgICBpZiAoY29sb3IgPCAwIHx8ICFPa0NvbG9ySGkoY29sb3IpIHx8IFNQID09IDAgfHwgIVNQLT5fY29sb3JvbikgeworCXJlc3VsdCA9IEVSUjsKKyAgICB9IGVsc2UgeworCU5DVVJTRVNfQ09MT1JfVCBjX3IgPSBTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5yZWQ7CisJTkNVUlNFU19DT0xPUl9UIGNfZyA9IFNQLT5fY29sb3JfdGFibGVbY29sb3JdLmdyZWVuOworCU5DVVJTRVNfQ09MT1JfVCBjX2IgPSBTUC0+X2NvbG9yX3RhYmxlW2NvbG9yXS5ibHVlOworCisJaWYgKHIpCisJICAgICpyID0gY19yOworCWlmIChnKQorCSAgICAqZyA9IGNfZzsKKwlpZiAoYikKKwkgICAgKmIgPSBjX2I7CisKKwlUUihUUkFDRV9BVFRSUywgKCIuLi5jb2xvcl9jb250ZW50KCVkLCVkLCVkLCVkKSIsCisJCQkgY29sb3IsIGNfciwgY19nLCBjX2IpKTsKKwlyZXN1bHQgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwYWlyX2NvbnRlbnQoc2hvcnQgcGFpciwgc2hvcnQgKmYsIHNob3J0ICpiKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBUKChUX0NBTExFRCgicGFpcl9jb250ZW50KCVkLCVwLCVwKSIpLCBwYWlyLCBmLCBiKSk7CisKKyAgICBpZiAoKHBhaXIgPCAwKSB8fCAocGFpciA+PSBDT0xPUl9QQUlSUykgfHwgU1AgPT0gMCB8fCAhU1AtPl9jb2xvcm9uKSB7CisJcmVzdWx0ID0gRVJSOworICAgIH0gZWxzZSB7CisJTkNVUlNFU19DT0xPUl9UIGZnID0gKChTUC0+X2NvbG9yX3BhaXJzW3BhaXJdID4+IENfU0hJRlQpICYgQ19NQVNLKTsKKwlOQ1VSU0VTX0NPTE9SX1QgYmcgPSAoU1AtPl9jb2xvcl9wYWlyc1twYWlyXSAmIENfTUFTSyk7CisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworCWlmIChmZyA9PSBDT0xPUl9ERUZBVUxUKQorCSAgICBmZyA9IC0xOworCWlmIChiZyA9PSBDT0xPUl9ERUZBVUxUKQorCSAgICBiZyA9IC0xOworI2VuZGlmCisKKwlpZiAoZikKKwkgICAgKmYgPSBmZzsKKwlpZiAoYikKKwkgICAgKmIgPSBiZzsKKworCVRSKFRSQUNFX0FUVFJTLCAoIi4uLnBhaXJfY29udGVudCglZCwlZCwlZCkiLCBwYWlyLCBmZywgYmcpKTsKKwlyZXN1bHQgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2RvX2NvbG9yKHNob3J0IG9sZF9wYWlyLCBzaG9ydCBwYWlyLCBib29sIHJldmVyc2UsIGludCAoKm91dGMpIChpbnQpKQoreworICAgIE5DVVJTRVNfQ09MT1JfVCBmZyA9IENPTE9SX0RFRkFVTFQ7CisgICAgTkNVUlNFU19DT0xPUl9UIGJnID0gQ09MT1JfREVGQVVMVDsKKyAgICBOQ1VSU0VTX0NPTE9SX1Qgb2xkX2ZnLCBvbGRfYmc7CisKKyAgICBpZiAocGFpciA8IDAgfHwgcGFpciA+PSBDT0xPUl9QQUlSUykgeworCXJldHVybjsKKyAgICB9IGVsc2UgaWYgKHBhaXIgIT0gMCkgeworCWlmIChzZXRfY29sb3JfcGFpcikgeworCSAgICBUUFVUU19UUkFDRSgic2V0X2NvbG9yX3BhaXIiKTsKKwkgICAgdHB1dHMoVFBBUk1fMShzZXRfY29sb3JfcGFpciwgcGFpciksIDEsIG91dGMpOworCSAgICByZXR1cm47CisJfSBlbHNlIGlmIChTUCAhPSAwKSB7CisJICAgIHBhaXJfY29udGVudCgoc2hvcnQpIHBhaXIsICZmZywgJmJnKTsKKwl9CisgICAgfQorCisgICAgaWYgKG9sZF9wYWlyID49IDAKKwkmJiBTUCAhPSAwCisJJiYgcGFpcl9jb250ZW50KG9sZF9wYWlyLCAmb2xkX2ZnLCAmb2xkX2JnKSAhPSBFUlIpIHsKKwlpZiAoKGlzRGVmYXVsdENvbG9yKGZnKSAmJiAhaXNEZWZhdWx0Q29sb3Iob2xkX2ZnKSkKKwkgICAgfHwgKGlzRGVmYXVsdENvbG9yKGJnKSAmJiAhaXNEZWZhdWx0Q29sb3Iob2xkX2JnKSkpIHsKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworCSAgICAvKgorCSAgICAgKiBBIG1pbm9yIG9wdGltaXphdGlvbiAtIGJ1dCBleHRlbnNpb24uICBJZiAiQVgiIGlzIHNwZWNpZmllZCBpbgorCSAgICAgKiB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24sIHRyZWF0IGl0IGFzIHNjcmVlbidzIGluZGljYXRvciBvZiBFQ01BCisJICAgICAqIFNHUiAzOSBhbmQgU0dSIDQ5LCBhbmQgYXNzdW1lIHRoZSB0d28gc2VxdWVuY2VzIGFyZSBpbmRlcGVuZGVudC4KKwkgICAgICovCisJICAgIGlmIChTUC0+X2hhc19zZ3JfMzlfNDkKKwkJJiYgaXNEZWZhdWx0Q29sb3Iob2xkX2JnKQorCQkmJiAhaXNEZWZhdWx0Q29sb3Iob2xkX2ZnKSkgeworCQl0cHV0cygiXDAzM1szOW0iLCAxLCBvdXRjKTsKKwkgICAgfSBlbHNlIGlmIChTUC0+X2hhc19zZ3JfMzlfNDkKKwkJICAgICAgICYmIGlzRGVmYXVsdENvbG9yKG9sZF9mZykKKwkJICAgICAgICYmICFpc0RlZmF1bHRDb2xvcihvbGRfYmcpKSB7CisJCXRwdXRzKCJcMDMzWzQ5bSIsIDEsIG91dGMpOworCSAgICB9IGVsc2UKKyNlbmRpZgorCQlyZXNldF9jb2xvcl9wYWlyKCk7CisJfQorICAgIH0gZWxzZSB7CisJcmVzZXRfY29sb3JfcGFpcigpOworCWlmIChvbGRfcGFpciA8IDApCisJICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICAgIGlmIChpc0RlZmF1bHRDb2xvcihmZykpCisJZmcgPSBkZWZhdWx0X2ZnKCk7CisgICAgaWYgKGlzRGVmYXVsdENvbG9yKGJnKSkKKwliZyA9IGRlZmF1bHRfYmcoKTsKKyNlbmRpZgorCisgICAgaWYgKHJldmVyc2UpIHsKKwlOQ1VSU0VTX0NPTE9SX1QgeHggPSBmZzsKKwlmZyA9IGJnOworCWJnID0geHg7CisgICAgfQorCisgICAgVFIoVFJBQ0VfQVRUUlMsICgic2V0dGluZyBjb2xvcnM6IHBhaXIgPSAlZCwgZmcgPSAlZCwgYmcgPSAlZCIsIHBhaXIsCisJCSAgICAgZmcsIGJnKSk7CisKKyAgICBpZiAoIWlzRGVmYXVsdENvbG9yKGZnKSkgeworCXNldF9mb3JlZ3JvdW5kX2NvbG9yKGZnLCBvdXRjKTsKKyAgICB9CisgICAgaWYgKCFpc0RlZmF1bHRDb2xvcihiZykpIHsKKwlzZXRfYmFja2dyb3VuZF9jb2xvcihiZywgb3V0Yyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9jb2xvcnNldC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9jb2xvcnNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NzNjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2NvbG9yc2V0LmMKQEAgLTAsMCArMSw2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IEp1ZXJnZW4gUGZlaWZlciwgIDE5OTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5LCAyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfY29sb3JzZXQuYworKioKKyoqCVRoZSByb3V0aW5lIHdjb2xvcl9zZXQoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2NvbG9yc2V0LmMsdiAxLjExIDIwMDUvMDEvMjkgMjE6NDA6NTEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2NvbG9yX3NldChXSU5ET1cgKndpbiwgc2hvcnQgY29sb3JfcGFpcl9udW1iZXIsIHZvaWQgKm9wdHMpCit7CisgICAgVCgoVF9DQUxMRUQoIndjb2xvcl9zZXQoJXAsJWQpIiksIHdpbiwgY29sb3JfcGFpcl9udW1iZXIpKTsKKyAgICBpZiAod2luCisJJiYgIW9wdHMKKwkmJiAoY29sb3JfcGFpcl9udW1iZXIgPj0gMCkKKwkmJiAoY29sb3JfcGFpcl9udW1iZXIgPCBDT0xPUl9QQUlSUykpIHsKKwlUUihUUkFDRV9BVFRSUywgKCIuLi4gY3VycmVudCAlbGQiLCAobG9uZykgR0VUX1dJTkRPV19QQUlSKHdpbikpKTsKKwlTRVRfV0lORE9XX1BBSVIod2luLCBjb2xvcl9wYWlyX251bWJlcik7CisJaWZfRVhUX0NPTE9SUyh3aW4tPl9jb2xvciA9IGNvbG9yX3BhaXJfbnVtYmVyKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2RlbGNoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2RlbGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzMGYyZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZGVsY2guYwpAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAsMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9kZWxjaC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2RlbGNoKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZGVsY2guYyx2IDEuMTIgMjAwMS8xMi8xOSAwMTowNjowOSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3ZGVsY2goV0lORE9XICp3aW4pCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgid2RlbGNoKCVwKSIpLCB3aW4pKTsKKworICAgIGlmICh3aW4pIHsKKwlOQ1VSU0VTX0NIX1QgYmxhbmsgPSB3aW4tPl9uY19ia2dkOworCXN0cnVjdCBsZGF0ICpsaW5lID0gJih3aW4tPl9saW5lW3dpbi0+X2N1cnldKTsKKwlOQ1VSU0VTX0NIX1QgKmVuZCA9ICYobGluZS0+dGV4dFt3aW4tPl9tYXh4XSk7CisJTkNVUlNFU19DSF9UICp0ZW1wMiA9ICYobGluZS0+dGV4dFt3aW4tPl9jdXJ4ICsgMV0pOworCU5DVVJTRVNfQ0hfVCAqdGVtcDEgPSB0ZW1wMiAtIDE7CisKKwlDSEFOR0VEX1RPX0VPTChsaW5lLCB3aW4tPl9jdXJ4LCB3aW4tPl9tYXh4KTsKKwl3aGlsZSAodGVtcDEgPCBlbmQpCisJICAgICp0ZW1wMSsrID0gKnRlbXAyKys7CisKKwkqdGVtcDEgPSBibGFuazsKKworCV9uY19zeW5jaG9vayh3aW4pOworCWNvZGUgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZGVsd2luLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2RlbHdpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MmM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2RlbHdpbi5jCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2RlbHdpbi5jCisqKgorKioJVGhlIHJvdXRpbmUgZGVsd2luKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZGVsd2luLmMsdiAxLjE3IDIwMDgvMDYvMDcgMTQ6MTA6NTYgdG9tIEV4cCAkIikKKworc3RhdGljIGJvb2wKK2Nhbm5vdF9kZWxldGUoV0lORE9XICp3aW4pCit7CisgICAgV0lORE9XTElTVCAqcDsKKyAgICBib29sIHJlc3VsdCA9IFRSVUU7CisKKyAgICBmb3IgKGVhY2hfd2luZG93KHApKSB7CisJaWYgKCYocC0+d2luKSA9PSB3aW4pIHsKKwkgICAgcmVzdWx0ID0gRkFMU0U7CisJfSBlbHNlIGlmICgocC0+d2luLl9mbGFncyAmIF9TVUJXSU4pICE9IDAKKwkJICAgJiYgcC0+d2luLl9wYXJlbnQgPT0gd2luKSB7CisJICAgIHJlc3VsdCA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVsd2luKFdJTkRPVyAqd2luKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiZGVsd2luKCVwKSIpLCB3aW4pKTsKKworICAgIGlmIChfbmNfdHJ5X2dsb2JhbChjdXJzZXMpID09IDApIHsKKwlpZiAod2luID09IDAKKwkgICAgfHwgY2Fubm90X2RlbGV0ZSh3aW4pKSB7CisJICAgIHJlc3VsdCA9IEVSUjsKKwl9IGVsc2UgeworCisJICAgIGlmICh3aW4tPl9mbGFncyAmIF9TVUJXSU4pCisJCXRvdWNod2luKHdpbi0+X3BhcmVudCk7CisJICAgIGVsc2UgaWYgKGN1cnNjciAhPSAwKQorCQl0b3VjaHdpbihjdXJzY3IpOworCisJICAgIHJlc3VsdCA9IF9uY19mcmVld2luKHdpbik7CisJfQorCV9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZGZ0X2ZnYmcuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZGZ0X2ZnYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTUzYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9kZnRfZmdiZy5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9kZnRfZmdiZy5jLHYgMS4xOCAyMDA1LzExLzI2IDIwOjAzOjM4IHRvbSBFeHAgJCIpCisKKy8qCisgKiBNb2RpZnkgdGhlIGJlaGF2aW9yIG9mIGNvbG9yLXBhaXIgMCBzbyB0aGF0IHRoZSBsaWJyYXJ5IGRvZXNuJ3QgYXNzdW1lIHRoYXQKKyAqIGl0IGlzIHdoaXRlIG9uIGJsYWNrLiAgVGhpcyBpcyBhbiBleHRlbnNpb24gdG8gWFNJIGN1cnNlcy4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQordXNlX2RlZmF1bHRfY29sb3JzKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoInVzZV9kZWZhdWx0X2NvbG9ycygpIikpKTsKKyAgICByZXR1cm5Db2RlKGFzc3VtZV9kZWZhdWx0X2NvbG9ycygtMSwgLTEpKTsKK30KKworLyoKKyAqIE1vZGlmeSB0aGUgYmVoYXZpb3Igb2YgY29sb3ItcGFpciAwIHNvIHRoYXQgdGhlIGxpYnJhcnkgYXNzdW1lcyB0aGF0IGl0CisgKiBpcyBzb21ldGhpbmcgc3BlY2lmaWMsIHBvc3NpYmx5IG5vdCB3aGl0ZSBvbiBibGFjay4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorYXNzdW1lX2RlZmF1bHRfY29sb3JzKGludCBmZywgaW50IGJnKQoreworICAgIFQoKFRfQ0FMTEVEKCJhc3N1bWVfZGVmYXVsdF9jb2xvcnMoJWQsJWQpIiksIGZnLCBiZykpOworCisgICAgaWYgKCFvcmlnX3BhaXIgJiYgIW9yaWdfY29sb3JzKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGlmIChpbml0aWFsaXplX3BhaXIpCS8qIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzICovCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgU1AtPl9kZWZhdWx0X2NvbG9yID0gaXNEZWZhdWx0Q29sb3IoZmcpIHx8IGlzRGVmYXVsdENvbG9yKGJnKTsKKyAgICBTUC0+X2hhc19zZ3JfMzlfNDkgPSAodGlnZXRmbGFnKCJBWCIpID09IFRSVUUpOworICAgIFNQLT5fZGVmYXVsdF9mZyA9IGlzRGVmYXVsdENvbG9yKGZnKSA/IENPTE9SX0RFRkFVTFQgOiAoZmcgJiBDX01BU0spOworICAgIFNQLT5fZGVmYXVsdF9iZyA9IGlzRGVmYXVsdENvbG9yKGJnKSA/IENPTE9SX0RFRkFVTFQgOiAoYmcgJiBDX01BU0spOworICAgIGlmIChTUC0+X2NvbG9yX3BhaXJzICE9IDApIHsKKwlib29sIHNhdmUgPSBTUC0+X2RlZmF1bHRfY29sb3I7CisJU1AtPl9kZWZhdWx0X2NvbG9yID0gVFJVRTsKKwlpbml0X3BhaXIoMCwgKHNob3J0KSBmZywgKHNob3J0KSBiZyk7CisJU1AtPl9kZWZhdWx0X2NvbG9yID0gc2F2ZTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2VjaG8uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZWNoby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNDQ3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2VjaG8uYwpAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWVjaG8uYworICoKKyAqCVJvdXRpbmVzOgorICoJCWVjaG8oKQorICoJCW5vZWNobygpCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2VjaG8uYyx2IDEuNSAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2VjaG8odm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgiZWNobygpIikpKTsKKyAgICBTUC0+X2VjaG8gPSBUUlVFOworICAgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitub2VjaG8odm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgibm9lY2hvKCkiKSkpOworICAgIFNQLT5fZWNobyA9IEZBTFNFOworICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9lbmR3aW4uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZW5kd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2NjI4NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZW5kd2luLmMKQEAgLTAsMCArMSw2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfZW5kd2luLmMKKyoqCisqKglUaGUgcm91dGluZSBlbmR3aW4oKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZW5kd2luLmMsdiAxLjE5IDIwMDAvMTIvMTAgMDI6NDM6MjcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorZW5kd2luKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoImVuZHdpbigpIikpKTsKKworICAgIGlmIChTUCkgeworCVNQLT5fZW5kd2luID0gVFJVRTsKKwlTUC0+X21vdXNlX3dyYXAoU1ApOworCV9uY19zY3JlZW5fd3JhcCgpOworCV9uY19tdmN1cl93cmFwKCk7CS8qIHdyYXAgdXAgY3Vyc29yIGFkZHJlc3NpbmcgKi8KKwlyZXR1cm5Db2RlKHJlc2V0X3NoZWxsX21vZGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9lcmFzZS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9lcmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjZlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2VyYXNlLmMKQEAgLTAsMCArMSw5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwLDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2VyYXNlLmMKKyoqCisqKglUaGUgcm91dGluZSB3ZXJhc2UoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9lcmFzZS5jLHYgMS4xNiAyMDA1LzEwLzMwIDAwOjM2OjM2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dlcmFzZShXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKyAgICBpbnQgeTsKKyAgICBOQ1VSU0VTX0NIX1QgYmxhbms7CisgICAgTkNVUlNFU19DSF9UICpzcCwgKmVuZCwgKnN0YXJ0OworCisgICAgVCgoVF9DQUxMRUQoIndlcmFzZSglcCkiKSwgd2luKSk7CisKKyAgICBpZiAod2luKSB7CisJYmxhbmsgPSB3aW4tPl9uY19ia2dkOworCWZvciAoeSA9IDA7IHkgPD0gd2luLT5fbWF4eTsgeSsrKSB7CisJICAgIHN0YXJ0ID0gd2luLT5fbGluZVt5XS50ZXh0OworCSAgICBlbmQgPSAmc3RhcnRbd2luLT5fbWF4eF07CisKKwkgICAgLyoKKwkgICAgICogSWYgdGhpcyBpcyBhIGRlcml2ZWQgd2luZG93LCB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZQorCSAgICAgKiBhIG11bHRpY29sdW1uIGNoYXJhY3RlciBleHRlbmRzIGludG8gdGhlIHdpbmRvdyB0aGF0IHdlIGFyZQorCSAgICAgKiBlcmFzaW5nLgorCSAgICAgKi8KKwkgICAgaWZfV0lERUMoeworCQlpZiAoaXNXaWRlY0V4dChzdGFydFswXSkpIHsKKwkJICAgIGludCB4ID0gKHdpbi0+X3BhcmVudCAhPSAwKSA/ICh3aW4tPl9iZWd4KSA6IDA7CisJCSAgICB3aGlsZSAoeC0tID4gMCkgeworCQkJaWYgKGlzV2lkZWNCYXNlKHN0YXJ0Wy0xXSkpIHsKKwkJCSAgICAtLXN0YXJ0OworCQkJICAgIGJyZWFrOworCQkJfQorCQkJLS1zdGFydDsKKwkJICAgIH0KKwkJfQorCSAgICB9KTsKKworCSAgICBmb3IgKHNwID0gc3RhcnQ7IHNwIDw9IGVuZDsgc3ArKykKKwkJKnNwID0gYmxhbms7CisKKwkgICAgd2luLT5fbGluZVt5XS5maXJzdGNoYXIgPSAwOworCSAgICB3aW4tPl9saW5lW3ldLmxhc3RjaGFyID0gd2luLT5fbWF4eDsKKwl9CisJd2luLT5fY3VyeCA9IHdpbi0+X2N1cnkgPSAwOworCXdpbi0+X2ZsYWdzICY9IH5fV1JBUFBFRDsKKwlfbmNfc3luY2hvb2sod2luKTsKKwljb2RlID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2ZsYXNoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiMDIyYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZmxhc2guYwpAQCAtMCwwICsxLDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWZsYXNoLmMKKyAqCisgKglUaGUgcm91dGluZSBmbGFzaCgpLgorICoKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBiZWVwLCBmbGFzaCAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX2ZsYXNoLmMsdiAxLjYgMjAwMC8xMi8xMCAwMjo0MzoyNyB0b20gRXhwICQiKQorCisvKgorICoJZmxhc2goKQorICoKKyAqCUZsYXNoIHRoZSBjdXJyZW50IHRlcm1pbmFsJ3Mgc2NyZWVuIGlmIHBvc3NpYmxlLiAgIElmIG5vdCwKKyAqCXNvdW5kIHRoZSBhdWRpYmxlIGJlbGwgaWYgb25lIGV4aXN0cy4KKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorZmxhc2godm9pZCkKK3sKKyAgICBpbnQgcmVzID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImZsYXNoKCkiKSkpOworCisgICAgLyogRklYTUU6IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB3ZSBhcmUgbm90IGluIGFsdGNoYXIgbW9kZSAqLworICAgIGlmIChmbGFzaF9zY3JlZW4pIHsKKwlUUFVUU19UUkFDRSgiZmxhc2hfc2NyZWVuIik7CisJcmVzID0gcHV0cChmbGFzaF9zY3JlZW4pOworCV9uY19mbHVzaCgpOworICAgIH0gZWxzZSBpZiAoYmVsbCkgeworCVRQVVRTX1RSQUNFKCJiZWxsIik7CisJcmVzID0gcHV0cChiZWxsKTsKKwlfbmNfZmx1c2goKTsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlKHJlcyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2ZyZWVhbGwuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZnJlZWFsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDAyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2ZyZWVhbGwuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorI2luY2x1ZGUgPHRpYy5oPgorCisjaWYgSEFWRV9OQ19GUkVFQUxMCisKKyNpZiBIQVZFX0xJQkRCTUFMTE9DCitleHRlcm4gaW50IG1hbGxvY19lcnJmZDsJLyogRklYTUUgKi8KKyNlbmRpZgorCitNT0RVTEVfSUQoIiRJZDogbGliX2ZyZWVhbGwuYyx2IDEuNTQgMjAwOC8wOS8yNyAxMzowOTo1NyB0b20gRXhwICQiKQorCisvKgorICogRnJlZSBhbGwgbmN1cnNlcyBkYXRhLiAgVGhpcyBpcyB1c2VkIGZvciB0ZXN0aW5nIG9ubHkgKHRoZXJlJ3Mgbm8gcHJhY3RpY2FsCisgKiB1c2UgZm9yIGl0IGFzIGFuIGV4dGVuc2lvbikuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfZnJlZWFsbCh2b2lkKQoreworICAgIFdJTkRPV0xJU1QgKnAsICpxOworICAgIHN0YXRpYyB2YV9saXN0IGVtcHR5X3ZhOworCisgICAgVCgoVF9DQUxMRUQoIl9uY19mcmVlYWxsKCkiKSkpOworI2lmIE5PX0xFQUtTCisgICAgaWYgKFNQICE9IDApIHsKKwlpZiAoU1AtPl9vbGRudW1fbGlzdCAhPSAwKSB7CisJICAgIEZyZWVBbmROdWxsKFNQLT5fb2xkbnVtX2xpc3QpOworCX0KKwlpZiAoU1AtPl9wYW5lbEhvb2suZGVzdHJveSAhPSAwKSB7CisJICAgIFNQLT5fcGFuZWxIb29rLmRlc3Ryb3koU1AtPl9wYW5lbEhvb2suc3Rkc2NyX3BzZXVkb19wYW5lbCk7CisJfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChTUCAhPSAwKSB7CisJX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKwl3aGlsZSAoX25jX3dpbmRvd3MgIT0gMCkgeworCSAgICBib29sIGRlbGV0ZWQgPSBGQUxTRTsKKworCSAgICAvKiBEZWxldGUgb25seSB3aW5kb3dzIHRoYXQncmUgbm90IGEgcGFyZW50ICovCisJICAgIGZvciAoZWFjaF93aW5kb3cocCkpIHsKKwkJYm9vbCBmb3VuZCA9IEZBTFNFOworCisJCWZvciAoZWFjaF93aW5kb3cocSkpIHsKKwkJICAgIGlmICgocCAhPSBxKQorCQkJJiYgKHEtPndpbi5fZmxhZ3MgJiBfU1VCV0lOKQorCQkJJiYgKCYocC0+d2luKSA9PSBxLT53aW4uX3BhcmVudCkpIHsKKwkJCWZvdW5kID0gVFJVRTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisKKwkJaWYgKCFmb3VuZCkgeworCQkgICAgaWYgKGRlbHdpbigmKHAtPndpbikpICE9IEVSUikKKwkJCWRlbGV0ZWQgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIERvbid0IGNvbnRpbnVlIHRvIGxvb3AgaWYgdGhlIGxpc3QgaXMgdHJhc2hlZC4KKwkgICAgICovCisJICAgIGlmICghZGVsZXRlZCkKKwkJYnJlYWs7CisJfQorCWRlbHNjcmVlbihTUCk7CisJX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICB9CisgICAgaWYgKGN1cl90ZXJtICE9IDApCisJZGVsX2N1cnRlcm0oY3VyX3Rlcm0pOworCisgICAgKHZvaWQpIF9uY19wcmludGZfc3RyaW5nKDAsIGVtcHR5X3ZhKTsKKyNpZmRlZiBUUkFDRQorICAgICh2b2lkKSBfbmNfdHJhY2VfYnVmKC0xLCAwKTsKKyNlbmRpZgorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgRnJlZUlmTmVlZGVkKF9uY193YWNzKTsKKyNlbmRpZgorICAgIF9uY19sZWFrc190aW5mbygpOworCisjaWYgSEFWRV9MSUJEQk1BTExPQworICAgIG1hbGxvY19kdW1wKG1hbGxvY19lcnJmZCk7CisjZWxpZiBIQVZFX0xJQkRNQUxMT0MKKyNlbGlmIEhBVkVfTElCTVBBVFJPTAorICAgIF9fbXBfc3VtbWFyeSgpOworI2VsaWYgSEFWRV9QVVJJRlkKKyAgICBwdXJpZnlfYWxsX2ludXNlKCk7CisjZW5kaWYKKyAgICByZXR1cm5Wb2lkOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVfYW5kX2V4aXQoaW50IGNvZGUpCit7CisgICAgY2hhciAqbGFzdF9zZXRidWYgPSAoU1AgIT0gMCkgPyBTUC0+X3NldGJ1ZiA6IDA7CisKKyAgICBfbmNfZnJlZWFsbCgpOworI2lmZGVmIFRSQUNFCisgICAgdHJhY2UoMCk7CQkJLyogY2xvc2UgdHJhY2UgZmlsZSwgZnJlZWluZyBpdHMgc2V0YnVmICovCisgICAgeworCXN0YXRpYyB2YV9saXN0IGZha2U7CisJZnJlZShfbmNfdmFyYXJncygiPyIsIGZha2UpKTsKKyAgICB9CisjZW5kaWYKKyAgICBmY2xvc2Uoc3Rkb3V0KTsKKyAgICBGcmVlSWZOZWVkZWQobGFzdF9zZXRidWYpOworICAgIGV4aXQoY29kZSk7Cit9CisKKyNlbHNlCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVhbGwodm9pZCkKK3sKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19mcmVlX2FuZF9leGl0KGludCBjb2RlKQoreworICAgIGlmIChTUCkKKwlkZWxzY3JlZW4oU1ApOworICAgIGlmIChjdXJfdGVybSAhPSAwKQorCWRlbF9jdXJ0ZXJtKGN1cl90ZXJtKTsKKyAgICBleGl0KGNvZGUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2dldGNoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2dldGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4MTJiZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfZ2V0Y2guYwpAQCAtMCwwICsxLDY2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2dldGNoLmMKKyoqCisqKglUaGUgcm91dGluZSBnZXRjaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2dldGNoLmMsdiAxLjk5IDIwMDgvMDkvMjAgMTk6NDY6MTMgdG9tIEV4cCAkIikKKworI2luY2x1ZGUgPGZpZm9fZGVmcy5oPgorCisjaWYgVVNFX1JFRU5UUkFOVAorI2RlZmluZSBHZXRFc2NkZWxheShzcCkgKHNwKS0+X0VTQ0RFTEFZCitOQ1VSU0VTX0VYUE9SVChpbnQpCitOQ1VSU0VTX1BVQkxJQ19WQVIoRVNDREVMQVkpICh2b2lkKQoreworICAgIHJldHVybiBTUCA/IEdldEVzY2RlbGF5KFNQKSA6IDEwMDA7Cit9CisjZWxzZQorI2RlZmluZSBHZXRFc2NkZWxheShzcCkgRVNDREVMQVkKK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpCitFU0NERUxBWSA9IDEwMDA7CQkvKiBtYXggaW50ZXJ2YWwgYmV0dy4gY2hhcnMgaW4gZnVua2V5cywgaW4gbWlsbGlzZWNzICovCisjZW5kaWYKKworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfZXNjZGVsYXkoaW50IHZhbHVlKQoreworICAgIGludCBjb2RlID0gT0s7CisjaWYgVVNFX1JFRU5UUkFOVAorICAgIGlmIChTUCkgeworCVNQLT5fRVNDREVMQVkgPSB2YWx1ZTsKKyAgICB9IGVsc2UgeworCWNvZGUgPSBFUlI7CisgICAgfQorI2Vsc2UKKyAgICBFU0NERUxBWSA9IHZhbHVlOworI2VuZGlmCisgICAgcmV0dXJuIGNvZGU7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorX25jX3VzZV9tZXRhKFdJTkRPVyAqd2luKQoreworICAgIFNDUkVFTiAqc3AgPSBfbmNfc2NyZWVuX29mKHdpbik7CisgICAgcmV0dXJuIChzcCA/IHNwLT5fdXNlX21ldGEgOiAwKTsKK30KKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworI2RlZmluZSBUV0FJVF9NQVNLIDcKKyNlbHNlCisjZGVmaW5lIFRXQUlUX01BU0sgMworI2VuZGlmCisKKy8qCisgKiBDaGVjayBmb3IgbW91c2UgYWN0aXZpdHksIHJldHVybmluZyBub256ZXJvIGlmIHdlIGZpbmQgYW55LgorICovCitzdGF0aWMgaW50CitjaGVja19tb3VzZV9hY3Rpdml0eShTQ1JFRU4gKnNwLCBpbnQgZGVsYXkgRVZFTlRMSVNUXzJuZChfbmNfZXZlbnRsaXN0ICogZXZsKSkKK3sKKyAgICBpbnQgcmM7CisKKyNpZiBVU0VfU1lTTU9VU0UKKyAgICBpZiAoKHNwLT5fbW91c2VfdHlwZSA9PSBNX1NZU01PVVNFKQorCSYmIChzcC0+X3N5c21vdXNlX2hlYWQgPCBzcC0+X3N5c21vdXNlX3RhaWwpKSB7CisJcmV0dXJuIDI7CisgICAgfQorI2VuZGlmCisgICAgcmMgPSBfbmNfdGltZWRfd2FpdChzcCwgVFdBSVRfTUFTSywgZGVsYXksIChpbnQgKikgMCBFVkVOVExJU1RfMm5kKGV2bCkpOworI2lmIFVTRV9TWVNNT1VTRQorICAgIGlmICgoc3AtPl9tb3VzZV90eXBlID09IE1fU1lTTU9VU0UpCisJJiYgKHNwLT5fc3lzbW91c2VfaGVhZCA8IHNwLT5fc3lzbW91c2VfdGFpbCkKKwkmJiAocmMgPT0gMCkKKwkmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisJcmMgfD0gMjsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBpbnQKK2ZpZm9fcGVlayhTQ1JFRU4gKnNwKQoreworICAgIGludCBjaCA9IHNwLT5fZmlmb1twZWVrXTsKKyAgICBUUihUUkFDRV9JRVZFTlQsICgicGVla2luZyBhdCAlZCIsIHBlZWspKTsKKworICAgIHBfaW5jKCk7CisgICAgcmV0dXJuIGNoOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgaW50CitmaWZvX3B1bGwoU0NSRUVOICpzcCkKK3sKKyAgICBpbnQgY2g7CisgICAgY2ggPSBzcC0+X2ZpZm9baGVhZF07CisgICAgVFIoVFJBQ0VfSUVWRU5ULCAoInB1bGxpbmcgJXMgZnJvbSAlZCIsIF9uY190cmFjZWNoYXIoc3AsIGNoKSwgaGVhZCkpOworCisgICAgaWYgKHBlZWsgPT0gaGVhZCkgeworCWhfaW5jKCk7CisJcGVlayA9IGhlYWQ7CisgICAgfSBlbHNlCisJaF9pbmMoKTsKKworI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfSUVWRU5UKSkgeworCV9uY19maWZvX2R1bXAoc3ApOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGNoOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgaW50CitmaWZvX3B1c2goU0NSRUVOICpzcCBFVkVOVExJU1RfMm5kKF9uY19ldmVudGxpc3QgKiBldmwpKQoreworICAgIGludCBuOworICAgIGludCBjaCA9IDA7CisgICAgaW50IG1hc2sgPSAwOworCisgICAgKHZvaWQpIG1hc2s7CisgICAgaWYgKHRhaWwgPT0gLTEpCisJcmV0dXJuIEVSUjsKKworI2lmZGVmIEhJREVfRUlOVFIKKyAgYWdhaW46CisgICAgZXJybm8gPSAwOworI2VuZGlmCisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBpZiAoZXZsCisjaWYgVVNFX0dQTV9TVVBQT1JUIHx8IFVTRV9FTVhfTU9VU0UgfHwgVVNFX1NZU01PVVNFCisJfHwgKHNwLT5fbW91c2VfZmQgPj0gMCkKKyNlbmRpZgorCSkgeworCW1hc2sgPSBjaGVja19tb3VzZV9hY3Rpdml0eShzcCwgLTEgRVZFTlRMSVNUXzJuZChldmwpKTsKKyAgICB9IGVsc2UKKwltYXNrID0gMDsKKworICAgIGlmIChtYXNrICYgNCkgeworCVQoKCJmaWZvX3B1c2g6IHVuZ2V0Y2ggS0VZX0VWRU5UIikpOworCV9uY191bmdldGNoKHNwLCBLRVlfRVZFTlQpOworCXJldHVybiBLRVlfRVZFTlQ7CisgICAgfQorI2VsaWYgVVNFX0dQTV9TVVBQT1JUIHx8IFVTRV9FTVhfTU9VU0UgfHwgVVNFX1NZU01PVVNFCisgICAgaWYgKHNwLT5fbW91c2VfZmQgPj0gMCkgeworCW1hc2sgPSBjaGVja19tb3VzZV9hY3Rpdml0eShzcCwgLTEgRVZFTlRMSVNUXzJuZChldmwpKTsKKyAgICB9CisjZW5kaWYKKworI2lmIFVTRV9HUE1fU1VQUE9SVCB8fCBVU0VfRU1YX01PVVNFCisgICAgaWYgKChzcC0+X21vdXNlX2ZkID49IDApICYmIChtYXNrICYgMikpIHsKKwlzcC0+X21vdXNlX2V2ZW50KHNwKTsKKwljaCA9IEtFWV9NT1VTRTsKKwluID0gMTsKKyAgICB9IGVsc2UKKyNlbmRpZgorI2lmIFVTRV9TWVNNT1VTRQorCWlmICgoc3AtPl9tb3VzZV90eXBlID09IE1fU1lTTU9VU0UpCisJICAgICYmIChzcC0+X3N5c21vdXNlX2hlYWQgPCBzcC0+X3N5c21vdXNlX3RhaWwpKSB7CisJc3AtPl9tb3VzZV9ldmVudChzcCk7CisJY2ggPSBLRVlfTU9VU0U7CisJbiA9IDE7CisgICAgfSBlbHNlIGlmICgoc3AtPl9tb3VzZV90eXBlID09IE1fU1lTTU9VU0UpCisJICAgICAgICYmIChtYXNrIDw9IDApICYmIGVycm5vID09IEVJTlRSKSB7CisJc3AtPl9tb3VzZV9ldmVudChzcCk7CisJY2ggPSBLRVlfTU9VU0U7CisJbiA9IDE7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CQkJCS8qIENhbiBibG9jay4uLiAqLworCXVuc2lnbmVkIGNoYXIgYzIgPSAwOworCW4gPSByZWFkKHNwLT5faWZkLCAmYzIsIDEpOworCWNoID0gYzI7CisgICAgfQorCisjaWZkZWYgSElERV9FSU5UUgorICAgIC8qCisgICAgICogVW5kZXIgU3lzdGVtIFYgY3Vyc2VzIHdpdGggbm9uLXJlc3RhcnRpbmcgc2lnbmFscywgZ2V0Y2goKSByZXR1cm5zCisgICAgICogd2l0aCB2YWx1ZSBFUlIgd2hlbiBhIGhhbmRsZWQgc2lnbmFsIGtlZXBzIGl0IGZyb20gY29tcGxldGluZy4KKyAgICAgKiBJZiBzaWduYWxzIHJlc3RhcnQgc3lzdGVtIGNhbGxzLCBPVE9ILCB0aGUgc2lnbmFsIGlzIGludmlzaWJsZQorICAgICAqIGV4Y2VwdCB0byBpdHMgaGFuZGxlci4KKyAgICAgKgorICAgICAqIFdlIGRvbid0IHdhbnQgdGhpcyBkaWZmZXJlbmNlIHRvIHNob3cuICBUaGlzIHBpZWNlIG9mIGNvZGUKKyAgICAgKiB0cmllcyB0byBtYWtlIGl0IGxvb2sgbGlrZSB3ZSBhbHdheXMgaGF2ZSByZXN0YXJ0aW5nIHNpZ25hbHMuCisgICAgICovCisgICAgaWYgKG4gPD0gMCAmJiBlcnJubyA9PSBFSU5UUikKKwlnb3RvIGFnYWluOworI2VuZGlmCisKKyAgICBpZiAoKG4gPT0gLTEpIHx8IChuID09IDApKSB7CisJVFIoVFJBQ0VfSUVWRU5ULCAoInJlYWQoJWQsJmNoLDEpPSVkLCBlcnJubz0lZCIsIHNwLT5faWZkLCBuLCBlcnJubykpOworCWNoID0gRVJSOworICAgIH0KKyAgICBUUihUUkFDRV9JRVZFTlQsICgicmVhZCAlZCBjaGFyYWN0ZXJzIiwgbikpOworCisgICAgc3AtPl9maWZvW3RhaWxdID0gY2g7CisgICAgc3AtPl9maWZvaG9sZCA9IDA7CisgICAgaWYgKGhlYWQgPT0gLTEpCisJaGVhZCA9IHBlZWsgPSB0YWlsOworICAgIHRfaW5jKCk7CisgICAgVFIoVFJBQ0VfSUVWRU5ULCAoInB1c2hlZCAlcyBhdCAlZCIsIF9uY190cmFjZWNoYXIoc3AsIGNoKSwgdGFpbCkpOworI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfSUVWRU5UKSkgeworCV9uY19maWZvX2R1bXAoc3ApOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGNoOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorZmlmb19jbGVhcihTQ1JFRU4gKnNwKQoreworICAgIG1lbXNldChzcC0+X2ZpZm8sIDAsIHNpemVvZihzcC0+X2ZpZm8pKTsKKyAgICBoZWFkID0gLTE7CisgICAgdGFpbCA9IHBlZWsgPSAwOworfQorCitzdGF0aWMgaW50IGtnZXRjaChTQ1JFRU4gKkVWRU5UTElTVF8ybmQoX25jX2V2ZW50bGlzdCAqIGV2bCkpOworCitzdGF0aWMgdm9pZAorcmVjdXJfd3JlZnJlc2goV0lORE9XICp3aW4pCit7CisjaWZkZWYgVVNFX1BUSFJFQURTCisgICAgU0NSRUVOICpzcCA9IF9uY19zY3JlZW5fb2Yod2luKTsKKyAgICBpZiAoX25jX3VzZV9wdGhyZWFkcyAmJiBzcCAhPSBTUCkgeworCVNDUkVFTiAqc2F2ZV9TUDsKKworCS8qIHRlbXBvcmFyaWx5IHN3aXRjaCB0byB0aGUgd2luZG93J3Mgc2NyZWVuIHRvIGNoZWNrL3JlZnJlc2ggKi8KKwlfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKwlzYXZlX1NQID0gU1A7CisJX25jX3NldF9zY3JlZW4oc3ApOworCXJlY3VyX3dyZWZyZXNoKHdpbik7CisJX25jX3NldF9zY3JlZW4oc2F2ZV9TUCk7CisJX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorCWlmICgoaXNfd2ludG91Y2hlZCh3aW4pIHx8ICh3aW4tPl9mbGFncyAmIF9IQVNNT1ZFRCkpCisJICAgICYmICEod2luLT5fZmxhZ3MgJiBfSVNQQUQpKSB7CisJd3JlZnJlc2god2luKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK3JlY3VyX3dnZXRuc3RyKFdJTkRPVyAqd2luLCBjaGFyICpidWYpCit7CisgICAgU0NSRUVOICpzcCA9IF9uY19zY3JlZW5fb2Yod2luKTsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoc3AgIT0gMCkgeworI2lmZGVmIFVTRV9QVEhSRUFEUworCWlmIChfbmNfdXNlX3B0aHJlYWRzICYmIHNwICE9IFNQKSB7CisJICAgIFNDUkVFTiAqc2F2ZV9TUDsKKworCSAgICAvKiB0ZW1wb3JhcmlseSBzd2l0Y2ggdG8gdGhlIHdpbmRvdydzIHNjcmVlbiB0byBnZXQgY29va2VkIGlucHV0ICovCisJICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCSAgICBzYXZlX1NQID0gU1A7CisJICAgIF9uY19zZXRfc2NyZWVuKHNwKTsKKwkgICAgcmMgPSByZWN1cl93Z2V0bnN0cih3aW4sIGJ1Zik7CisJICAgIF9uY19zZXRfc2NyZWVuKHNhdmVfU1ApOworCSAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworCX0gZWxzZQorI2VuZGlmCisJeworCSAgICBzcC0+X2NhbGxlZF93Z2V0Y2ggPSBUUlVFOworCSAgICByYyA9IHdnZXRuc3RyKHdpbiwgYnVmLCBNQVhDT0xVTU5TKTsKKwkgICAgc3AtPl9jYWxsZWRfd2dldGNoID0gRkFMU0U7CisJfQorICAgIH0gZWxzZSB7CisJcmMgPSBFUlI7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3dnZXRjaChXSU5ET1cgKndpbiwKKwkgICB1bnNpZ25lZCBsb25nICpyZXN1bHQsCisJICAgaW50IHVzZV9tZXRhCisJICAgRVZFTlRMSVNUXzJuZChfbmNfZXZlbnRsaXN0ICogZXZsKSkKK3sKKyAgICBTQ1JFRU4gKnNwOworICAgIGludCBjaDsKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBsb25nIGV2ZW50X2RlbGF5ID0gLTE7CisjZW5kaWYKKworICAgIFQoKFRfQ0FMTEVEKCJfbmNfd2dldGNoKCVwKSIpLCB3aW4pKTsKKworICAgICpyZXN1bHQgPSAwOworCisgICAgc3AgPSBfbmNfc2NyZWVuX29mKHdpbik7CisgICAgaWYgKHdpbiA9PSAwIHx8IHNwID09IDApIHsKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfQorCisgICAgaWYgKGNvb2tlZF9rZXlfaW5fZmlmbygpKSB7CisJcmVjdXJfd3JlZnJlc2god2luKTsKKwkqcmVzdWx0ID0gZmlmb19wdWxsKHNwKTsKKwlyZXR1cm5Db2RlKCpyZXN1bHQgPj0gS0VZX01JTiA/IEtFWV9DT0RFX1lFUyA6IE9LKTsKKyAgICB9CisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKGV2bCAmJiAoZXZsLT5jb3VudCA9PSAwKSkKKwlldmwgPSBOVUxMOworICAgIGV2ZW50X2RlbGF5ID0gX25jX2V2ZW50bGlzdF90aW1lb3V0KGV2bCk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogSGFuZGxlIGNvb2tlZCBtb2RlLiAgR3JhYiBhIHN0cmluZyBmcm9tIHRoZSBzY3JlZW4sCisgICAgICogc3R1ZmYgaXRzIGNvbnRlbnRzIGluIHRoZSBGSUZPIHF1ZXVlLCBhbmQgcG9wIG9mZgorICAgICAqIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gcmV0dXJuIGl0LgorICAgICAqLworICAgIGlmIChoZWFkID09IC0xICYmCisJIXNwLT5fbm90dHkgJiYKKwkhc3AtPl9yYXcgJiYKKwkhc3AtPl9jYnJlYWsgJiYKKwkhc3AtPl9jYWxsZWRfd2dldGNoKSB7CisJY2hhciBidWZbTUFYQ09MVU1OU10sICpidWZwOworCWludCByYzsKKworCVRSKFRSQUNFX0lFVkVOVCwgKCJmaWxsaW5nIHF1ZXVlIGluIGNvb2tlZCBtb2RlIikpOworCisJcmMgPSByZWN1cl93Z2V0bnN0cih3aW4sIGJ1Zik7CisKKwkvKiB1bmdldGNoIGluIHJldmVyc2Ugb3JkZXIgKi8KKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKwlpZiAocmMgIT0gS0VZX0VWRU5UKQorI2VuZGlmCisJICAgIF9uY191bmdldGNoKHNwLCAnXG4nKTsKKwlmb3IgKGJ1ZnAgPSBidWYgKyBzdHJsZW4oYnVmKTsgYnVmcCA+IGJ1ZjsgYnVmcC0tKQorCSAgICBfbmNfdW5nZXRjaChzcCwgYnVmcFstMV0pOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisJLyogUmV0dXJuIGl0IGZpcnN0ICovCisJaWYgKHJjID09IEtFWV9FVkVOVCkgeworCSAgICAqcmVzdWx0ID0gcmM7CisJfSBlbHNlCisjZW5kaWYKKwkgICAgKnJlc3VsdCA9IGZpZm9fcHVsbChzcCk7CisJcmV0dXJuQ29kZSgqcmVzdWx0ID49IEtFWV9NSU4gPyBLRVlfQ09ERV9ZRVMgOiBPSyk7CisgICAgfQorCisgICAgaWYgKHdpbi0+X3VzZV9rZXlwYWQgIT0gc3AtPl9rZXlwYWRfb24pCisJX25jX2tleXBhZChzcCwgd2luLT5fdXNlX2tleXBhZCk7CisKKyAgICByZWN1cl93cmVmcmVzaCh3aW4pOworCisgICAgaWYgKHdpbi0+X25vdGltZW91dCB8fCAod2luLT5fZGVsYXkgPj0gMCkgfHwgKHNwLT5fY2JyZWFrID4gMSkpIHsKKwlpZiAoaGVhZCA9PSAtMSkgewkvKiBmaWZvIGlzIGVtcHR5ICovCisJICAgIGludCBkZWxheTsKKwkgICAgaW50IHJjOworCisJICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJ0aW1lZCBkZWxheSBpbiB3Z2V0Y2goKSIpKTsKKwkgICAgaWYgKHNwLT5fY2JyZWFrID4gMSkKKwkJZGVsYXkgPSAoc3AtPl9jYnJlYWsgLSAxKSAqIDEwMDsKKwkgICAgZWxzZQorCQlkZWxheSA9IHdpbi0+X2RlbGF5OworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisJICAgIGlmIChldmVudF9kZWxheSA+PSAwICYmIGRlbGF5ID4gZXZlbnRfZGVsYXkpCisJCWRlbGF5ID0gZXZlbnRfZGVsYXk7CisjZW5kaWYKKworCSAgICBUUihUUkFDRV9JRVZFTlQsICgiZGVsYXkgaXMgJWQgbWlsbGlzZWNvbmRzIiwgZGVsYXkpKTsKKworCSAgICByYyA9IGNoZWNrX21vdXNlX2FjdGl2aXR5KHNwLCBkZWxheSBFVkVOVExJU1RfMm5kKGV2bCkpOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisJICAgIGlmIChyYyAmIDQpIHsKKwkJKnJlc3VsdCA9IEtFWV9FVkVOVDsKKwkJcmV0dXJuQ29kZShLRVlfQ09ERV9ZRVMpOworCSAgICB9CisjZW5kaWYKKwkgICAgaWYgKCFyYykgeworCQlyZXR1cm5Db2RlKEVSUik7CisJICAgIH0KKwl9CisJLyogZWxzZSBnbyBvbiB0byByZWFkIGRhdGEgYXZhaWxhYmxlICovCisgICAgfQorCisgICAgaWYgKHdpbi0+X3VzZV9rZXlwYWQpIHsKKwkvKgorCSAqIFRoaXMgaXMgdHJpY2t5LiAgV2Ugb25seSB3YW50IHRvIGdldCBzcGVjaWFsLWtleQorCSAqIGV2ZW50cyBvbmUgYXQgYSB0aW1lLiAgQnV0IHdlIHdhbnQgdG8gYWNjdW11bGF0ZQorCSAqIG1vdXNlIGV2ZW50cyB1bnRpbCBlaXRoZXIgKGEpIHRoZSBtb3VzZSBsb2dpYyB0ZWxscworCSAqIHVzIGl0J3MgcGlja2VkIHVwIGEgY29tcGxldGUgZ2VzdHVyZSwgb3IgKGIpCisJICogdGhlcmUncyBhIGRldGVjdGFibGUgdGltZSBsYXBzZSBhZnRlciBvbmUuCisJICoKKwkgKiBOb3RlOiBpZiB0aGUgbW91c2UgY29kZSBzdGFydHMgZmFpbGluZyB0byBjb21wb3NlCisJICogcHJlc3MvcmVsZWFzZSBldmVudHMgaW50byBjbGlja3MsIHlvdSBzaG91bGQgcHJvYmFibHkKKwkgKiBpbmNyZWFzZSB0aGUgd2FpdCB3aXRoIG1vdXNlaW50ZXJ2YWwoKS4KKwkgKi8KKwlpbnQgcnVuY291bnQgPSAwOworCWludCByYzsKKworCWRvIHsKKwkgICAgY2ggPSBrZ2V0Y2goc3AgRVZFTlRMSVNUXzJuZChldmwpKTsKKwkgICAgaWYgKGNoID09IEtFWV9NT1VTRSkgeworCQkrK3J1bmNvdW50OworCQlpZiAoc3AtPl9tb3VzZV9pbmxpbmUoc3ApKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHNwLT5fbWF4Y2xpY2sgPCAwKQorCQlicmVhazsKKwl9IHdoaWxlCisJICAgIChjaCA9PSBLRVlfTU9VU0UKKwkgICAgICYmICgoKHJjID0gY2hlY2tfbW91c2VfYWN0aXZpdHkoc3AsIHNwLT5fbWF4Y2xpY2sKKwkJCQkJICAgICBFVkVOVExJU1RfMm5kKGV2bCkpKSAhPSAwCisJCSAgJiYgIShyYyAmIDQpKQorCQkgfHwgIXNwLT5fbW91c2VfcGFyc2Uoc3AsIHJ1bmNvdW50KSkpOworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworCWlmICgocmMgJiA0KSAmJiAhY2ggPT0gS0VZX0VWRU5UKSB7CisJICAgIF9uY191bmdldGNoKHNwLCBjaCk7CisJICAgIGNoID0gS0VZX0VWRU5UOworCX0KKyNlbmRpZgorCWlmIChydW5jb3VudCA+IDAgJiYgY2ggIT0gS0VZX01PVVNFKSB7CisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisJICAgIC8qIG1vdXNlIGV2ZW50IHNlcXVlbmNlIGVuZGVkIGJ5IGFuIGV2ZW50LCByZXBvcnQgZXZlbnQgKi8KKwkgICAgaWYgKGNoID09IEtFWV9FVkVOVCkgeworCQlfbmNfdW5nZXRjaChzcCwgS0VZX01PVVNFKTsJLyogRklYTUUgVGhpcyBpbnRlcnJ1cHRzIGEgZ2VzdHVyZS4uLiAqLworCSAgICB9IGVsc2UKKyNlbmRpZgorCSAgICB7CisJCS8qIG1vdXNlIGV2ZW50IHNlcXVlbmNlIGVuZGVkIGJ5IGtleXN0cm9rZSwgc3RvcmUga2V5c3Ryb2tlICovCisJCV9uY191bmdldGNoKHNwLCBjaCk7CisJCWNoID0gS0VZX01PVVNFOworCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJaWYgKGhlYWQgPT0gLTEpCisJICAgIGZpZm9fcHVzaChzcCBFVkVOVExJU1RfMm5kKGV2bCkpOworCWNoID0gZmlmb19wdWxsKHNwKTsKKyAgICB9CisKKyAgICBpZiAoY2ggPT0gRVJSKSB7CisjaWYgVVNFX1NJWkVDSEFOR0UKKwlpZiAoX25jX2hhbmRsZV9zaWd3aW5jaChzcCkpIHsKKwkgICAgX25jX3VwZGF0ZV9zY3JlZW5zaXplKHNwKTsKKwkgICAgLyogcmVzaXpldGVybSBjYW4gcHVzaCBLRVlfUkVTSVpFICovCisJICAgIGlmIChjb29rZWRfa2V5X2luX2ZpZm8oKSkgeworCQkqcmVzdWx0ID0gZmlmb19wdWxsKHNwKTsKKwkJcmV0dXJuQ29kZSgqcmVzdWx0ID49IEtFWV9NSU4gPyBLRVlfQ09ERV9ZRVMgOiBPSyk7CisJICAgIH0KKwl9CisjZW5kaWYKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiBlY2hvKCkgaXMgaW4gZWZmZWN0LCBkaXNwbGF5IHRoZSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgKiBrZXkgb24gdGhlIHNjcmVlbi4gIENhcnJpYWdlIHJldHVybiBhbmQgYmFja3NwYWNlIGFyZSB0cmVhdGVkCisgICAgICogc3BlY2lhbGx5IGJ5IFNvbGFyaXMgY3Vyc2VzOgorICAgICAqCisgICAgICogSWYgY2FycmlhZ2UgcmV0dXJuIGlzIGRlZmluZWQgYXMgYSBmdW5jdGlvbiBrZXkgaW4gdGhlCisgICAgICogdGVybWluZm8sIGUuZy4sIGtlbnQsIHRoZW4gU29sYXJpcyBtYXkgcmV0dXJuIGVpdGhlciBeSiAob3IgXk0KKyAgICAgKiBpZiBub25sKCkgaXMgc2V0KSBvciBLRVlfRU5URVIgZGVwZW5kaW5nIG9uIHRoZSBlY2hvKCkgbW9kZS4gCisgICAgICogV2UgZWNobyBiZWZvcmUgdHJhbnNsYXRpbmcgY2FycmlhZ2UgcmV0dXJuIGJhc2VkIG9uIG5vbmwoKSwKKyAgICAgKiBzaW5jZSB0aGUgdmlzdWFsIHJlc3VsdCBzaW1wbHkgbW92ZXMgdGhlIGN1cnNvciB0byBjb2x1bW4gMC4KKyAgICAgKgorICAgICAqIEJhY2tzcGFjZSBpcyBhIGRpZmZlcmVudCBtYXR0ZXIuICBTb2xhcmlzIGN1cnNlcyBkb2VzIG5vdAorICAgICAqIHRyYW5zbGF0ZSBpdCB0byBLRVlfQkFDS1NQQUNFIGlmIGticz1eSC4gIFRoaXMgZG9lcyBub3QgZGVwZW5kCisgICAgICogb24gdGhlIHN0dHkgbW9kZXMsIGJ1dCBhcHBlYXJzIHRvIGJlIGEgaGFyZGNvZGVkIHNwZWNpYWwgY2FzZS4KKyAgICAgKiBUaGlzIGlzIGEgZGlmZmVyZW5jZSBmcm9tIG5jdXJzZXMsIHdoaWNoIHVzZXMgdGhlIHRlcm1pbmZvIGVudHJ5LgorICAgICAqIEhvd2V2ZXIsIHdlIHByb3ZpZGUgdGhlIHNhbWUgdmlzdWFsIHJlc3VsdCBhcyBTb2xhcmlzLCBtb3ZpbmcgdGhlCisgICAgICogY3Vyc29yIHRvIHRoZSBsZWZ0LgorICAgICAqLworICAgIGlmIChzcC0+X2VjaG8gJiYgISh3aW4tPl9mbGFncyAmIF9JU1BBRCkpIHsKKwljaHR5cGUgYmFja3VwID0gKGNoID09IEtFWV9CQUNLU1BBQ0UpID8gJ1xiJyA6IGNoOworCWlmIChiYWNrdXAgPCBLRVlfTUlOKQorCSAgICB3ZWNob2NoYXIod2luLCBiYWNrdXApOworICAgIH0KKworICAgIC8qCisgICAgICogU2ltdWxhdGUgSUNSTkwgbW9kZQorICAgICAqLworICAgIGlmICgoY2ggPT0gJ1xyJykgJiYgc3AtPl9ubCkKKwljaCA9ICdcbic7CisKKyAgICAvKiBTdHJpcCA4dGgtYml0IGlmIHNvIGRlc2lyZWQuICBXZSBkbyB0aGlzIG9ubHkgZm9yIGNoYXJhY3RlcnMgdGhhdAorICAgICAqIGFyZSBpbiB0aGUgcmFuZ2UgMTI4LTI1NSwgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggdGVybWluYWxzCisgICAgICogdGhhdCBkaXNwbGF5IG9ubHkgNy1iaXQgY2hhcmFjdGVycy4gIE5vdGUgdGhhdCAnY2gnIG1heSBiZSBhCisgICAgICogZnVuY3Rpb24ga2V5IGF0IHRoaXMgcG9pbnQsIHNvIHdlIG11c3RuJ3Qgc3RyaXAgX3Rob3NlXy4KKyAgICAgKi8KKyAgICBpZiAoIXVzZV9tZXRhKQorCWlmICgoY2ggPCBLRVlfTUlOKSAmJiAoY2ggJiAweDgwKSkKKwkgICAgY2ggJj0gMHg3ZjsKKworICAgIFQoKCJ3Z2V0Y2ggcmV0dXJuaW5nIDogJXMiLCBfbmNfdHJhY2VjaGFyKHNwLCBjaCkpKTsKKworICAgICpyZXN1bHQgPSBjaDsKKyAgICByZXR1cm5Db2RlKGNoID49IEtFWV9NSU4gPyBLRVlfQ09ERV9ZRVMgOiBPSyk7Cit9CisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKK05DVVJTRVNfRVhQT1JUKGludCkKK3dnZXRjaF9ldmVudHMoV0lORE9XICp3aW4sIF9uY19ldmVudGxpc3QgKiBldmwpCit7CisgICAgaW50IGNvZGU7CisgICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Z2V0Y2hfZXZlbnRzKCVwLCVwKSIpLCB3aW4sIGV2bCkpOworICAgIGNvZGUgPSBfbmNfd2dldGNoKHdpbiwKKwkJICAgICAgJnZhbHVlLAorCQkgICAgICBfbmNfdXNlX21ldGEod2luKQorCQkgICAgICBFVkVOVExJU1RfMm5kKGV2bCkpOworICAgIGlmIChjb2RlICE9IEVSUikKKwljb2RlID0gdmFsdWU7CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3Z2V0Y2goV0lORE9XICp3aW4pCit7CisgICAgaW50IGNvZGU7CisgICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Z2V0Y2goJXApIiksIHdpbikpOworICAgIGNvZGUgPSBfbmNfd2dldGNoKHdpbiwKKwkJICAgICAgJnZhbHVlLAorCQkgICAgICBfbmNfdXNlX21ldGEod2luKQorCQkgICAgICBFVkVOVExJU1RfMm5kKChfbmNfZXZlbnRsaXN0ICopIDApKTsKKyAgICBpZiAoY29kZSAhPSBFUlIpCisJY29kZSA9IHZhbHVlOworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKKy8qCisqKiAgICAgIGludAorKiogICAgICBrZ2V0Y2goKQorKioKKyoqICAgICAgR2V0IGFuIGlucHV0IGNoYXJhY3RlciwgYnV0IHRha2UgY2FyZSBvZiBrZXlwYWQgc2VxdWVuY2VzLCByZXR1cm5pbmcKKyoqICAgICAgYW4gYXBwcm9wcmlhdGUgY29kZSB3aGVuIG9uZSBtYXRjaGVzIHRoZSBpbnB1dC4gIEFmdGVyIGVhY2ggY2hhcmFjdGVyCisqKiAgICAgIGlzIHJlY2VpdmVkLCBzZXQgYW4gYWxhcm0gY2FsbCBiYXNlZCBvbiBFU0NERUxBWS4gIElmIG5vIG1vcmUgb2YgdGhlCisqKiAgICAgIHNlcXVlbmNlIGlzIHJlY2VpdmVkIGJ5IHRoZSB0aW1lIHRoZSBhbGFybSBnb2VzIG9mZiwgcGFzcyB0aHJvdWdoCisqKiAgICAgIHRoZSBzZXF1ZW5jZSBnb3R0ZW4gc28gZmFyLgorKioKKyoqCVRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gY29va2VkIGtleXMgaW4gcXVldWUuCisqKgkodGhhdCBpcyBoZWFkPT0tMSB8fCBwZWVrPT1oZWFkKQorKioKKyovCisKK3N0YXRpYyBpbnQKK2tnZXRjaChTQ1JFRU4gKnNwIEVWRU5UTElTVF8ybmQoX25jX2V2ZW50bGlzdCAqIGV2bCkpCit7CisgICAgVFJJRVMgKnB0cjsKKyAgICBpbnQgY2ggPSAwOworICAgIGludCB0aW1lbGVmdCA9IEdldEVzY2RlbGF5KHNwKTsKKworICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJrZ2V0Y2goKSBjYWxsZWQiKSk7CisKKyAgICBwdHIgPSBzcC0+X2tleXRyeTsKKworICAgIGZvciAoOzspIHsKKwlpZiAoY29va2VkX2tleV9pbl9maWZvKCkgJiYgc3AtPl9maWZvW2hlYWRdID49IEtFWV9NSU4pIHsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmICghcmF3X2tleV9pbl9maWZvKCkpIHsKKwkgICAgY2ggPSBmaWZvX3B1c2goc3AgRVZFTlRMSVNUXzJuZChldmwpKTsKKwkgICAgaWYgKGNoID09IEVSUikgeworCQlwZWVrID0gaGVhZDsJLyogdGhlIGtleXMgc3RheSB1bmludGVycHJldGVkICovCisJCXJldHVybiBFUlI7CisJICAgIH0KKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKwkgICAgZWxzZSBpZiAoY2ggPT0gS0VZX0VWRU5UKSB7CisJCXBlZWsgPSBoZWFkOwkvKiB0aGUga2V5cyBzdGF5IHVuaW50ZXJwcmV0ZWQgKi8KKwkJcmV0dXJuIGZpZm9fcHVsbChzcCk7CS8qIFJlbW92ZSBLRVlfRVZFTlQgZnJvbSB0aGUgcXVldWUgKi8KKwkgICAgfQorI2VuZGlmCisJfQorCisJY2ggPSBmaWZvX3BlZWsoc3ApOworCWlmIChjaCA+PSBLRVlfTUlOKSB7CisJICAgIC8qIElmIG5vdCBmaXJzdCBpbiBxdWV1ZSwgc29tZWJvZHkgcHV0IHRoaXMga2V5IHRoZXJlIG9uIHB1cnBvc2UgaW4KKwkgICAgICogZW1lcmdlbmN5LiAgQ29uc2lkZXIgaXQgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIHVuZmluaXNoZWQKKwkgICAgICoga2V5c2VxdWVuY2Ugd2UgYXJlIHBhcnNpbmcuCisJICAgICAqLworCSAgICBwZWVrID0gaGVhZDsKKwkgICAgLyogYXNzdW1lIHRoZSBrZXkgaXMgdGhlIGxhc3QgaW4gZmlmbyAqLworCSAgICB0X2RlYygpOwkJLyogcmVtb3ZlIHRoZSBrZXkgKi8KKwkgICAgcmV0dXJuIGNoOworCX0KKworCVRSKFRSQUNFX0lFVkVOVCwgKCJjaDogJXMiLCBfbmNfdHJhY2VjaGFyKHNwLCAodW5zaWduZWQgY2hhcikgY2gpKSk7CisJd2hpbGUgKChwdHIgIT0gTlVMTCkgJiYgKHB0ci0+Y2ggIT0gKHVuc2lnbmVkIGNoYXIpIGNoKSkKKwkgICAgcHRyID0gcHRyLT5zaWJsaW5nOworCisJaWYgKHB0ciA9PSBOVUxMKSB7CisJICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJwdHIgaXMgbnVsbCIpKTsKKwkgICAgYnJlYWs7CisJfQorCVRSKFRSQUNFX0lFVkVOVCwgKCJwdHI9JXAsIGNoPSVkLCB2YWx1ZT0lZCIsCisJCQkgIHB0ciwgcHRyLT5jaCwgcHRyLT52YWx1ZSkpOworCisJaWYgKHB0ci0+dmFsdWUgIT0gMCkgewkvKiBzZXF1ZW5jZSB0ZXJtaW5hdGVkICovCisJICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJlbmQgb2Ygc2VxdWVuY2UiKSk7CisJICAgIGlmIChwZWVrID09IHRhaWwpCisJCWZpZm9fY2xlYXIoc3ApOworCSAgICBlbHNlCisJCWhlYWQgPSBwZWVrOworCSAgICByZXR1cm4gKHB0ci0+dmFsdWUpOworCX0KKworCXB0ciA9IHB0ci0+Y2hpbGQ7CisKKwlpZiAoIXJhd19rZXlfaW5fZmlmbygpKSB7CisJICAgIGludCByYzsKKworCSAgICBUUihUUkFDRV9JRVZFTlQsICgid2FpdGluZyBmb3IgcmVzdCBvZiBzZXF1ZW5jZSIpKTsKKwkgICAgcmMgPSBjaGVja19tb3VzZV9hY3Rpdml0eShzcCwgdGltZWxlZnQgRVZFTlRMSVNUXzJuZChldmwpKTsKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKwkgICAgaWYgKHJjICYgNCkgeworCQlUUihUUkFDRV9JRVZFTlQsICgiaW50ZXJydXB0ZWQgYnkgYSB1c2VyIGV2ZW50IikpOworCQkvKiBGSVhNRSBTaG91bGQgaGF2ZSBwcmVzZXJ2ZWQgcmVtYWluZGVyIHRpbWVsZWZ0IGZvciByZXVzZS4uLiAqLworCQlwZWVrID0gaGVhZDsJLyogUmVzdGFydCBpbnRlcnByZXRpbmcgbGF0ZXIgKi8KKwkJcmV0dXJuIEtFWV9FVkVOVDsKKwkgICAgfQorI2VuZGlmCisJICAgIGlmICghcmMpIHsKKwkJVFIoVFJBQ0VfSUVWRU5ULCAoInJhbiBvdXQgb2YgdGltZSIpKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIGNoID0gZmlmb19wdWxsKHNwKTsKKyAgICBwZWVrID0gaGVhZDsKKyAgICByZXR1cm4gY2g7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2dldHN0ci5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9nZXRzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTdkZjAzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9nZXRzdHIuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfZ2V0c3RyLmMKKyoqCisqKglUaGUgcm91dGluZSB3Z2V0c3RyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2dldHN0ci5jLHYgMS4yNyAyMDA4LzA4LzE2IDE5OjIwOjA0IHRvbSBFeHAgJCIpCisKKy8qCisgKiBUaGlzIHdpcGVzIG91dCB0aGUgbGFzdCBjaGFyYWN0ZXIsIG5vIG1hdHRlciB3aGV0aGVyIGl0IHdhcyBhIHRhYiwgY29udHJvbAorICogb3Igb3RoZXIgY2hhcmFjdGVyLCBhbmQgaGFuZGxlcyByZXZlcnNlIHdyYXBhcm91bmQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1dpcGVPdXQoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqZmlyc3QsIGNoYXIgKmxhc3QsIGJvb2wgZWNob2VkKQoreworICAgIGlmIChsYXN0ID4gZmlyc3QpIHsKKwkqLS1sYXN0ID0gJ1wwJzsKKwlpZiAoZWNob2VkKSB7CisJICAgIGludCB5MSA9IHdpbi0+X2N1cnk7CisJICAgIGludCB4MSA9IHdpbi0+X2N1cng7CisKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwkgICAgd2FkZHN0cih3aW4sIGZpcnN0KTsKKwkgICAgZ2V0eXgod2luLCB5LCB4KTsKKwkgICAgd2hpbGUgKHdpbi0+X2N1cnkgPCB5MQorCQkgICB8fCAod2luLT5fY3VyeSA9PSB5MSAmJiB3aW4tPl9jdXJ4IDwgeDEpKQorCQl3YWRkY2god2luLCAoY2h0eXBlKSAnICcpOworCisJICAgIHdtb3ZlKHdpbiwgeSwgeCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gbGFzdDsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2dldG5zdHJfZXZlbnRzKFdJTkRPVyAqd2luLAorCQljaGFyICpzdHIsCisJCWludCBtYXhsZW4sCisJCUVWRU5UTElTVF8xc3QoX25jX2V2ZW50bGlzdCAqIGV2bCkpCit7CisgICAgU0NSRUVOICpzcCA9IF9uY19zY3JlZW5fb2Yod2luKTsKKyAgICBUVFkgYnVmOworICAgIGJvb2wgb2xkbmwsIG9sZGVjaG8sIG9sZHJhdywgb2xkY2JyZWFrOworICAgIGNoYXIgZXJhc2VjOworICAgIGNoYXIga2lsbGM7CisgICAgY2hhciAqb2xkc3RyOworICAgIGludCBjaDsKKyAgICBpbnQgeSwgeDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Z2V0bnN0ciglcCwlcCwgJWQpIiksIHdpbiwgc3RyLCBtYXhsZW4pKTsKKworICAgIGlmICghd2luKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIF9uY19nZXRfdHR5X21vZGUoJmJ1Zik7CisKKyAgICBvbGRubCA9IHNwLT5fbmw7CisgICAgb2xkZWNobyA9IHNwLT5fZWNobzsKKyAgICBvbGRyYXcgPSBzcC0+X3JhdzsKKyAgICBvbGRjYnJlYWsgPSBzcC0+X2NicmVhazsKKyAgICBubCgpOworICAgIG5vZWNobygpOworICAgIG5vcmF3KCk7CisgICAgY2JyZWFrKCk7CisKKyAgICBlcmFzZWMgPSBlcmFzZWNoYXIoKTsKKyAgICBraWxsYyA9IGtpbGxjaGFyKCk7CisKKyAgICBvbGRzdHIgPSBzdHI7CisgICAgZ2V0eXgod2luLCB5LCB4KTsKKworICAgIGlmIChpc193aW50b3VjaGVkKHdpbikgfHwgKHdpbi0+X2ZsYWdzICYgX0hBU01PVkVEKSkKKwl3cmVmcmVzaCh3aW4pOworCisgICAgd2hpbGUgKChjaCA9IHdnZXRjaF9ldmVudHMod2luLCBldmwpKSAhPSBFUlIpIHsKKwkvKgorCSAqIFNvbWUgdGVybWluYWxzICh0aGUgV3lzZS01MCBpcyB0aGUgbW9zdCBjb21tb24pIGdlbmVyYXRlCisJICogYSBcbiBmcm9tIHRoZSBkb3duLWFycm93IGtleS4gIFdpdGggdGhpcyBsb2dpYywgaXQncyB0aGUKKwkgKiB1c2VyJ3MgY2hvaWNlIHdoZXRoZXIgdG8gc2V0IGtjdWQ9XG4gZm9yIHdnZXRjaCgpOworCSAqIHRlcm1pbmF0aW5nICpnZXRzdHIoKSB3aXRoIFxuIHNob3VsZCB3b3JrIGVpdGhlciB3YXkuCisJICovCisJaWYgKGNoID09ICdcbicKKwkgICAgfHwgY2ggPT0gJ1xyJworCSAgICB8fCBjaCA9PSBLRVlfRE9XTgorCSAgICB8fCBjaCA9PSBLRVlfRU5URVIpIHsKKwkgICAgaWYgKG9sZGVjaG8gPT0gVFJVRQorCQkmJiB3aW4tPl9jdXJ5ID09IHdpbi0+X21heHkKKwkJJiYgd2luLT5fc2Nyb2xsKQorCQl3ZWNob2NoYXIod2luLCAoY2h0eXBlKSAnXG4nKTsKKwkgICAgYnJlYWs7CisJfQorI2lmZGVmIEtFWV9FVkVOVAorCWlmIChjaCA9PSBLRVlfRVZFTlQpCisJICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgS0VZX1JFU0laRQorCWlmIChjaCA9PSBLRVlfUkVTSVpFKQorCSAgICBicmVhazsKKyNlbmRpZgorCWlmIChjaCA9PSBlcmFzZWMgfHwgY2ggPT0gS0VZX0xFRlQgfHwgY2ggPT0gS0VZX0JBQ0tTUEFDRSkgeworCSAgICBpZiAoc3RyID4gb2xkc3RyKSB7CisJCXN0ciA9IFdpcGVPdXQod2luLCB5LCB4LCBvbGRzdHIsIHN0ciwgb2xkZWNobyk7CisJICAgIH0KKwl9IGVsc2UgaWYgKGNoID09IGtpbGxjKSB7CisJICAgIHdoaWxlIChzdHIgPiBvbGRzdHIpIHsKKwkJc3RyID0gV2lwZU91dCh3aW4sIHksIHgsIG9sZHN0ciwgc3RyLCBvbGRlY2hvKTsKKwkgICAgfQorCX0gZWxzZSBpZiAoY2ggPj0gS0VZX01JTgorCQkgICB8fCAobWF4bGVuID49IDAgJiYgc3RyIC0gb2xkc3RyID49IG1heGxlbikpIHsKKwkgICAgYmVlcCgpOworCX0gZWxzZSB7CisJICAgICpzdHIrKyA9IChjaGFyKSBjaDsKKwkgICAgaWYgKG9sZGVjaG8gPT0gVFJVRSkgeworCQlpbnQgb2xkeSA9IHdpbi0+X2N1cnk7CisJCWlmICh3YWRkY2god2luLCAoY2h0eXBlKSBjaCkgPT0gRVJSKSB7CisJCSAgICAvKgorCQkgICAgICogV2UgY2FuJ3QgcmVhbGx5IHVzZSB0aGUgbG93ZXItcmlnaHQKKwkJICAgICAqIGNvcm5lciBmb3IgaW5wdXQsIHNpbmNlIGl0J2xsIG1lc3MKKwkJICAgICAqIHVwIGJvb2trZWVwaW5nIGZvciBlcmFzZXMuCisJCSAgICAgKi8KKwkJICAgIHdpbi0+X2ZsYWdzICY9IH5fV1JBUFBFRDsKKwkJICAgIHdhZGRjaCh3aW4sIChjaHR5cGUpICcgJyk7CisJCSAgICBzdHIgPSBXaXBlT3V0KHdpbiwgeSwgeCwgb2xkc3RyLCBzdHIsIG9sZGVjaG8pOworCQkgICAgY29udGludWU7CisJCX0gZWxzZSBpZiAod2luLT5fZmxhZ3MgJiBfV1JBUFBFRCkgeworCQkgICAgLyoKKwkJICAgICAqIElmIHRoZSBsYXN0IHdhZGRjaCBmb3JjZWQgYSB3cmFwICYKKwkJICAgICAqIHNjcm9sbCwgYWRqdXN0IG91ciByZWZlcmVuY2UgcG9pbnQKKwkJICAgICAqIGZvciBlcmFzdXJlcy4KKwkJICAgICAqLworCQkgICAgaWYgKHdpbi0+X3Njcm9sbAorCQkJJiYgb2xkeSA9PSB3aW4tPl9tYXh5CisJCQkmJiB3aW4tPl9jdXJ5ID09IHdpbi0+X21heHkpIHsKKwkJCWlmICgtLXkgPD0gMCkgeworCQkJICAgIHkgPSAwOworCQkJfQorCQkgICAgfQorCQkgICAgd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworCQl9CisJCXdyZWZyZXNoKHdpbik7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgd2luLT5fY3VyeCA9IDA7CisgICAgd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworICAgIGlmICh3aW4tPl9jdXJ5IDwgd2luLT5fbWF4eSkKKwl3aW4tPl9jdXJ5Kys7CisgICAgd3JlZnJlc2god2luKTsKKworICAgIC8qIFJlc3RvcmUgd2l0aCBhIHNpbmdsZSBJL08gY2FsbCwgdG8gZml4IG1pbm9yIGFzeW1tZXRyeSBiZXR3ZWVuCisgICAgICogcmF3L25vcmF3LCBldGMuCisgICAgICovCisgICAgc3AtPl9ubCA9IG9sZG5sOworICAgIHNwLT5fZWNobyA9IG9sZGVjaG87CisgICAgc3AtPl9yYXcgPSBvbGRyYXc7CisgICAgc3AtPl9jYnJlYWsgPSBvbGRjYnJlYWs7CisKKyAgICBfbmNfc2V0X3R0eV9tb2RlKCZidWYpOworCisgICAgKnN0ciA9ICdcMCc7CisgICAgaWYgKGNoID09IEVSUikKKwlyZXR1cm5Db2RlKGNoKTsKKworICAgIFQoKCJ3Z2V0bnN0ciByZXR1cm5zICVzIiwgX25jX3Zpc2J1ZihvbGRzdHIpKSk7CisKKyNpZmRlZiBLRVlfRVZFTlQKKyAgICBpZiAoY2ggPT0gS0VZX0VWRU5UKQorCXJldHVybkNvZGUoY2gpOworI2VuZGlmCisjaWZkZWYgS0VZX1JFU0laRQorICAgIGlmIChjaCA9PSBLRVlfUkVTSVpFKQorCXJldHVybkNvZGUoY2gpOworI2VuZGlmCisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworTkNVUlNFU19FWFBPUlQoaW50KQord2dldG5zdHIoV0lORE9XICp3aW4sIGNoYXIgKnN0ciwgaW50IG1heGxlbikKK3sKKyAgICByZXR1cm5Db2RlKHdnZXRuc3RyX2V2ZW50cyh3aW4sCisJCQkgICAgICAgc3RyLAorCQkJICAgICAgIG1heGxlbiwKKwkJCSAgICAgICBFVkVOVExJU1RfMXN0KChfbmNfZXZlbnRsaXN0ICopIDApKSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaGxpbmUuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaGxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWYyY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9obGluZS5jCkBAIC0wLDAgKzEsODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2hsaW5lLmMKKyoqCisqKglUaGUgcm91dGluZSB3aGxpbmUoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9obGluZS5jLHYgMS4xMSAyMDA2LzAzLzExIDIxOjUyOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dobGluZShXSU5ET1cgKndpbiwgY2h0eXBlIGNoLCBpbnQgbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKyAgICBOQ1VSU0VTX1NJWkVfVCBzdGFydDsKKyAgICBOQ1VSU0VTX1NJWkVfVCBlbmQ7CisKKyAgICBUKChUX0NBTExFRCgid2hsaW5lKCVwLCVzLCVkKSIpLCB3aW4sIF90cmFjZWNodHlwZShjaCksIG4pKTsKKworICAgIGlmICh3aW4pIHsKKwlzdHJ1Y3QgbGRhdCAqbGluZSA9ICYod2luLT5fbGluZVt3aW4tPl9jdXJ5XSk7CisJTkNVUlNFU19DSF9UIHdjaDsKKworCXN0YXJ0ID0gd2luLT5fY3VyeDsKKwllbmQgPSBzdGFydCArIG4gLSAxOworCWlmIChlbmQgPiB3aW4tPl9tYXh4KQorCSAgICBlbmQgPSB3aW4tPl9tYXh4OworCisJQ0hBTkdFRF9SQU5HRShsaW5lLCBzdGFydCwgZW5kKTsKKworCWlmIChjaCA9PSAwKQorCSAgICBTZXRDaGFyMih3Y2gsIEFDU19ITElORSk7CisJZWxzZQorCSAgICBTZXRDaGFyMih3Y2gsIGNoKTsKKwl3Y2ggPSBfbmNfcmVuZGVyKHdpbiwgd2NoKTsKKworCXdoaWxlIChlbmQgPj0gc3RhcnQpIHsKKwkgICAgbGluZS0+dGV4dFtlbmRdID0gd2NoOworCSAgICBlbmQtLTsKKwl9CisKKwlfbmNfc3luY2hvb2sod2luKTsKKwljb2RlID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2ltbWVkb2suYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaW1tZWRvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTg4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2ltbWVkb2suYwpAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbW1lZG9rLmMKKyoqCisqKglUaGUgcm91dGluZSBpbW1lZG9rLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2ltbWVkb2suYyx2IDEuNCAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitpbW1lZG9rKFdJTkRPVyAqd2luLCBib29sIGZsYWcpCit7CisgICAgVCgoVF9DQUxMRUQoImltbWVkb2soJXAsJWQpIiksIHdpbiwgZmxhZykpOworCisgICAgaWYgKHdpbikKKwl3aW4tPl9pbW1lZCA9IGZsYWc7CisKKyAgICByZXR1cm5Wb2lkOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9pbmNoc3RyLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luY2hzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmYwMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9pbmNoc3RyLmMKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwLDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaW5jaHN0ci5jCisqKgorKioJVGhlIHJvdXRpbmUgd2luY2huc3RyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5jaHN0ci5jLHYgMS4xMCAyMDAxLzA2LzAyIDIzOjM3OjU4IHNraW1vIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2luY2huc3RyKFdJTkRPVyAqd2luLCBjaHR5cGUgKiBzdHIsIGludCBuKQoreworICAgIGludCBpID0gMDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3aW5jaG5zdHIoJXAsJXAsJWQpIiksIHdpbiwgc3RyLCBuKSk7CisKKyAgICBpZiAoIXN0cikKKwlyZXR1cm5Db2RlKDApOworCisgICAgaWYgKHdpbikgeworCWZvciAoOyAobiA8IDAgfHwgKGkgPCBuKSkgJiYgKHdpbi0+X2N1cnggKyBpIDw9IHdpbi0+X21heHgpOyBpKyspCisJICAgIHN0cltpXSA9CisJCUNoYXJPZih3aW4tPl9saW5lW3dpbi0+X2N1cnldLnRleHRbd2luLT5fY3VyeCArIGldKSB8CisJCUF0dHJPZih3aW4tPl9saW5lW3dpbi0+X2N1cnldLnRleHRbd2luLT5fY3VyeCArIGldKTsKKyAgICB9CisgICAgc3RyW2ldID0gKGNodHlwZSkgMDsKKworICAgIHJldHVybkNvZGUoaSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luaXRzY3IuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaW5pdHNjci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmVmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luaXRzY3IuYwpAQCAtMCwwICsxLDk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni0yMDAzICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaW5pdHNjci5jCisqKgorKioJVGhlIHJvdXRpbmVzIGluaXRzY3IoKSwgYW5kIHRlcm1uYW1lKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpZiBIQVZFX1NZU19URVJNSU9fSAorI2luY2x1ZGUgPHN5cy90ZXJtaW8uaD4JCS8qIG5lZWRlZCBmb3IgSVNDICovCisjZW5kaWYKKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9pbml0c2NyLmMsdiAxLjM4IDIwMDgvMDgvMTYgMjE6MjA6NDggV2VybmVyLkZpbmsgRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK2luaXRzY3Iodm9pZCkKK3sKKyAgICBXSU5ET1cgKnJlc3VsdDsKKworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqbmFtZTsKKworICAgIFNUQVJUX1RSQUNFKCk7CisgICAgVCgoVF9DQUxMRUQoImluaXRzY3IoKSIpKSk7CisKKyAgICBfbmNfaW5pdF9wdGhyZWFkcygpOworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgLyogUG9ydGFibGUgYXBwbGljYXRpb25zIG11c3Qgbm90IGNhbGwgaW5pdHNjcigpIG1vcmUgdGhhbiBvbmNlICovCisgICAgaWYgKCFfbmNfZ2xvYmFscy5pbml0X3NjcmVlbikgeworCV9uY19nbG9iYWxzLmluaXRfc2NyZWVuID0gVFJVRTsKKworCWlmICgobmFtZSA9IGdldGVudigiVEVSTSIpKSA9PSAwCisJICAgIHx8ICpuYW1lID09ICdcMCcpCisJICAgIG5hbWUgPSAidW5rbm93biI7CisjaWZkZWYgX19DWUdXSU5fXworCS8qCisJICogMjAwMi85LzIxCisJICogV29yayBhcm91bmQgYSBidWcgaW4gQ3lnd2luLiAgRnVsbC1zY3JlZW4gc3VicHJvY2Vzc2VzIHJ1biBmcm9tCisJICogYmFzaCwgaW4gdHVybiBzcGF3bmVkIGZyb20gYW5vdGhlciBmdWxsLXNjcmVlbiBwcm9jZXNzLCB3aWxsIGR1bXAKKwkgKiBjb3JlIHdoZW4gYXR0ZW1wdGluZyB0byB3cml0ZSB0byBzdGRvdXQuICBPcGVuaW5nIC9kZXYvdHR5CisJICogZXhwbGljaXRseSBzZWVtcyB0byBmaXggdGhlIHByb2JsZW0uCisJICovCisJaWYgKGlzYXR0eShmaWxlbm8oc3Rkb3V0KSkpIHsKKwkgICAgRklMRSAqZnAgPSBmb3BlbigiL2Rldi90dHkiLCAidyIpOworCSAgICBpZiAoZnAgIT0gMCAmJiBpc2F0dHkoZmlsZW5vKGZwKSkpIHsKKwkJZmNsb3NlKHN0ZG91dCk7CisJCWR1cDIoZmlsZW5vKGZwKSwgU1RET1VUX0ZJTEVOTyk7CisJCXN0ZG91dCA9IGZkb3BlbihTVERPVVRfRklMRU5PLCAidyIpOworCSAgICB9CisJfQorI2VuZGlmCisJaWYgKG5ld3Rlcm0obmFtZSwgc3Rkb3V0LCBzdGRpbikgPT0gMCkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgdGVybWluYWw6ICVzLlxuIiwgbmFtZSk7CisJICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiBkZWZfc2hlbGxfbW9kZSAtIGRvbmUgaW4gbmV3dGVybS9fbmNfc2V0dXBzY3JlZW4gKi8KKwlkZWZfcHJvZ19tb2RlKCk7CisgICAgfQorICAgIHJlc3VsdCA9IHN0ZHNjcjsKKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgcmV0dXJuV2luKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luc2NoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luc2NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE2NmVhNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaW5zY2guYwpAQCAtMCwwICsxLDE1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogU3ZlbiBWZXJkb29sYWVnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbnNjaC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2luc2NoKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9pbnNjaC5jLHYgMS4yNSAyMDA4LzAyLzAzIDAwOjE0OjM3IHRvbSBFeHAgJCIpCisKKy8qCisgKiBJbnNlcnQgdGhlIGdpdmVuIGNoYXJhY3RlciwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgbG9jYXRpb24gdG8gc2ltcGxpZnkKKyAqIGluc2VydGluZyBhIHN0cmluZy4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2luc2VydF9jaChXSU5ET1cgKndpbiwgY2h0eXBlIGNoKQoreworICAgIGludCBjb2RlID0gT0s7CisgICAgTkNVUlNFU19DSF9UIHdjaDsKKyAgICBpbnQgY291bnQ7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpzOworCisgICAgc3dpdGNoIChjaCkgeworICAgIGNhc2UgJ1x0JzoKKwlmb3IgKGNvdW50ID0gKFRBQlNJWkUgLSAod2luLT5fY3VyeCAlIFRBQlNJWkUpKTsgY291bnQgPiAwOyBjb3VudC0tKSB7CisJICAgIGlmICgoY29kZSA9IF9uY19pbnNlcnRfY2god2luLCAnICcpKSAhPSBPSykKKwkJYnJlYWs7CisJfQorCWJyZWFrOworICAgIGNhc2UgJ1xuJzoKKyAgICBjYXNlICdccic6CisgICAgY2FzZSAnXGInOgorCVNldENoYXIyKHdjaCwgY2gpOworCV9uY193YWRkY2hfbm9zeW5jKHdpbiwgd2NoKTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCWlmICgKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSAgICAgICBXSU5ET1dfRVhUKHdpbiwgYWRkY2hfdXNlZCkgPT0gMCAmJgorI2VuZGlmCisJICAgICAgIGlzOGJpdHMoQ2hDaGFyT2YoY2gpKSAmJgorCSAgICAgICBpc3ByaW50KENoQ2hhck9mKGNoKSkpIHsKKwkgICAgaWYgKHdpbi0+X2N1cnggPD0gd2luLT5fbWF4eCkgeworCQlzdHJ1Y3QgbGRhdCAqbGluZSA9ICYod2luLT5fbGluZVt3aW4tPl9jdXJ5XSk7CisJCU5DVVJTRVNfQ0hfVCAqZW5kID0gJihsaW5lLT50ZXh0W3dpbi0+X2N1cnhdKTsKKwkJTkNVUlNFU19DSF9UICp0ZW1wMSA9ICYobGluZS0+dGV4dFt3aW4tPl9tYXh4XSk7CisJCU5DVVJTRVNfQ0hfVCAqdGVtcDIgPSB0ZW1wMSAtIDE7CisKKwkJU2V0Q2hhcjIod2NoLCBjaCk7CisKKwkJQ0hBTkdFRF9UT19FT0wobGluZSwgd2luLT5fY3VyeCwgd2luLT5fbWF4eCk7CisJCXdoaWxlICh0ZW1wMSA+IGVuZCkKKwkJICAgICp0ZW1wMS0tID0gKnRlbXAyLS07CisKKwkJKnRlbXAxID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisJCXdpbi0+X2N1cngrKzsKKwkgICAgfQorCX0gZWxzZSBpZiAoaXM4Yml0cyhDaENoYXJPZihjaCkpICYmIGlzY250cmwoQ2hDaGFyT2YoY2gpKSkgeworCSAgICBzID0gdW5jdHJsKENoQ2hhck9mKGNoKSk7CisJICAgIHdoaWxlICgqcyAhPSAnXDAnKSB7CisJCWNvZGUgPSBfbmNfaW5zZXJ0X2NoKHdpbiwgQ2hBdHRyT2YoY2gpIHwgVUNoYXIoKnMpKTsKKwkJaWYgKGNvZGUgIT0gT0spCisJCSAgICBicmVhazsKKwkJKytzOworCSAgICB9CisJfQorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJZWxzZSB7CisJICAgIC8qCisJICAgICAqIEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBoZXJlCisJICAgICAqLworCSAgICBTZXRDaGFyMih3Y2gsIGNoKTsKKwkgICAgd2NoID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisJICAgIGNvdW50ID0gX25jX2J1aWxkX3djaCh3aW4sICZ3Y2gpOworCSAgICBpZiAoY291bnQgPiAwKSB7CisJCWNvZGUgPSB3aW5zX3djaCh3aW4sICZ3Y2gpOworCSAgICB9IGVsc2UgaWYgKGNvdW50ID09IC0xKSB7CisJCS8qIGhhbmRsZSBFSUxTRVEgKi8KKwkJaWYgKGlzOGJpdHMoY2gpKSB7CisJCSAgICBzID0gdW5jdHJsKENoQ2hhck9mKGNoKSk7CisJCSAgICB3aGlsZSAoKnMgIT0gJ1wwJykgeworCQkJY29kZSA9IF9uY19pbnNlcnRfY2god2luLCBDaEF0dHJPZihjaCkgfCBVQ2hhcigqcykpOworCQkJaWYgKGNvZGUgIT0gT0spCisJCQkgICAgYnJlYWs7CisJCQkrK3M7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBjb2RlID0gRVJSOworCQl9CisJICAgIH0KKwl9CisjZW5kaWYKKwlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dpbnNjaChXSU5ET1cgKndpbiwgY2h0eXBlIGMpCit7CisgICAgTkNVUlNFU19TSVpFX1Qgb3k7CisgICAgTkNVUlNFU19TSVpFX1Qgb3g7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgid2luc2NoKCVwLCAlcykiKSwgd2luLCBfdHJhY2VjaHR5cGUoYykpKTsKKworICAgIGlmICh3aW4gIT0gMCkgeworCW95ID0gd2luLT5fY3VyeTsKKwlveCA9IHdpbi0+X2N1cng7CisKKwljb2RlID0gX25jX2luc2VydF9jaCh3aW4sIGMpOworCisJd2luLT5fY3VyeCA9IG94OworCXdpbi0+X2N1cnkgPSBveTsKKwlfbmNfc3luY2hvb2sod2luKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaW5zZGVsLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luc2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MmM2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luc2RlbC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2luc2RlbC5jCisqKgorKioJVGhlIHJvdXRpbmUgd2luc2RlbGxuKHdpbiwgbikuCisqKiAgcG9zaXRpdmUgbiBpbnNlcnQgbiBsaW5lcyBhYm92ZSBjdXJyZW50IGxpbmUKKyoqICBuZWdhdGl2ZSBuIGRlbGV0ZSBuIGxpbmVzIHN0YXJ0aW5nIGZyb20gY3VycmVudCBsaW5lCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5zZGVsLmMsdiAxLjEyIDIwMDMvMDcvMjYgMjI6NDA6MDYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2luc2RlbGxuKFdJTkRPVyAqd2luLCBpbnQgbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3aW5zZGVsbG4oJXAsJWQpIiksIHdpbiwgbikpOworCisgICAgaWYgKHdpbikgeworCWlmIChuICE9IDApIHsKKwkgICAgX25jX3Njcm9sbF93aW5kb3cod2luLCAtbiwgd2luLT5fY3VyeSwgd2luLT5fbWF4eSwKKwkJCSAgICAgIHdpbi0+X25jX2JrZ2QpOworCSAgICBfbmNfc3luY2hvb2sod2luKTsKKwl9CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9pbnNuc3RyLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luc25zdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmRkZmRlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9pbnNuc3RyLmMKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbnNuc3RyLmMKKyoqCisqKglUaGUgcm91dGluZSB3aW5zbnN0cigpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5zbnN0ci5jLHYgMS4xIDIwMDQvMDIvMjggMjM6NDQ6NTYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord2luc25zdHIoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKnMsIGludCBuKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIE5DVVJTRVNfU0laRV9UIG95OworICAgIE5DVVJTRVNfU0laRV9UIG94OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHM7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3A7CisKKyAgICBUKChUX0NBTExFRCgid2luc25zdHIoJXAsJXMsJWQpIiksIHdpbiwgX25jX3Zpc2J1Zm4ocywgbiksIG4pKTsKKworICAgIGlmICh3aW4gIT0gMCAmJiBzdHIgIT0gMCkgeworCW95ID0gd2luLT5fY3VyeTsKKwlveCA9IHdpbi0+X2N1cng7CisJZm9yIChjcCA9IHN0cjsgKmNwICYmIChuIDw9IDAgfHwgKGNwIC0gc3RyKSA8IG4pOyBjcCsrKSB7CisJICAgIF9uY19pbnNlcnRfY2god2luLCAoY2h0eXBlKSBVQ2hhcigqY3ApKTsKKwl9CisJd2luLT5fY3VyeCA9IG94OworCXdpbi0+X2N1cnkgPSBveTsKKwlfbmNfc3luY2hvb2sod2luKTsKKwljb2RlID0gT0s7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luc3RyLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2luc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiMjk0OQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaW5zdHIuYwpAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2luc3RyLmMKKyoqCisqKglUaGUgcm91dGluZSB3aW5uc3RyKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5zdHIuYyx2IDEuMTYgMjAwNy8wNy8yMSAyMDoxODoxMCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aW5uc3RyKFdJTkRPVyAqd2luLCBjaGFyICpzdHIsIGludCBuKQoreworICAgIGludCBpID0gMCwgcm93LCBjb2w7CisKKyAgICBUKChUX0NBTExFRCgid2lubnN0ciglcCwlcCwlZCkiKSwgd2luLCBzdHIsIG4pKTsKKworICAgIGlmICghc3RyKQorCXJldHVybkNvZGUoMCk7CisKKyAgICBpZiAod2luKSB7CisJZ2V0eXgod2luLCByb3csIGNvbCk7CisKKwlpZiAobiA8IDApCisJICAgIG4gPSB3aW4tPl9tYXh4IC0gd2luLT5fY3VyeCArIDE7CisKKwlmb3IgKDsgaSA8IG47KSB7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkgICAgY2NoYXJfdCAqY2VsbCA9ICYod2luLT5fbGluZVtyb3ddLnRleHRbY29sXSk7CisJICAgIHdjaGFyX3QgKndjaDsKKwkgICAgYXR0cl90IGF0dHJzOworCSAgICBzaG9ydCBwYWlyOworCSAgICBpbnQgbjI7CisJICAgIGJvb2wgZG9uZSA9IEZBTFNFOworCSAgICBtYnN0YXRlX3Qgc3RhdGU7CisJICAgIHNpemVfdCBpMywgbjM7CisJICAgIGNoYXIgKnRtcDsKKworCSAgICBpZiAoIWlzV2lkZWNFeHQoKmNlbGwpKSB7CisJCW4yID0gZ2V0Y2NoYXIoY2VsbCwgMCwgMCwgMCwgMCk7CisJCWlmIChuMiA+IDAKKwkJICAgICYmICh3Y2ggPSB0eXBlQ2FsbG9jKHdjaGFyX3QsICh1bnNpZ25lZCkgbjIgKyAxKSkgIT0gMCkgeworCQkgICAgaWYgKGdldGNjaGFyKGNlbGwsIHdjaCwgJmF0dHJzLCAmcGFpciwgMCkgPT0gT0spIHsKKworCQkJaW5pdF9tYihzdGF0ZSk7CisJCQluMyA9IHdjc3RvbWJzKDAsIHdjaCwgMCk7CisJCQlpZiAoaXNFSUxTRVEobjMpIHx8IChuMyA9PSAwKSkgeworCQkJICAgIDsKKwkJCX0gZWxzZSBpZiAoKGludCkgKG4zICsgaSkgPiBuKSB7CisJCQkgICAgZG9uZSA9IFRSVUU7CisJCQl9IGVsc2UgaWYgKCh0bXAgPSB0eXBlQ2FsbG9jKGNoYXIsIG4zICsgMTApKSA9PSAwKSB7CisJCQkgICAgZG9uZSA9IFRSVUU7CisJCQl9IGVsc2UgeworCQkJICAgIGluaXRfbWIoc3RhdGUpOworCQkJICAgIHdjc3RvbWJzKHRtcCwgd2NoLCBuMyk7CisJCQkgICAgZm9yIChpMyA9IDA7IGkzIDwgbjM7ICsraTMpCisJCQkJc3RyW2krK10gPSB0bXBbaTNdOworCQkJICAgIGZyZWUodG1wKTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGZyZWUod2NoKTsKKwkJICAgIGlmIChkb25lKQorCQkJYnJlYWs7CisJCX0KKwkgICAgfQorI2Vsc2UKKwkgICAgc3RyW2krK10gPSAoY2hhcikgQ2hhck9mKHdpbi0+X2xpbmVbcm93XS50ZXh0W2NvbF0pOworI2VuZGlmCisJICAgIGlmICgrK2NvbCA+IHdpbi0+X21heHgpIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHN0cltpXSA9ICdcMCc7CQkvKiBTVnI0IGRvZXMgbm90IHNlZW0gdG8gY291bnQgdGhlIG51bGwgKi8KKyAgICBUKCgid2lubnN0ciByZXR1cm5zICVzIiwgX25jX3Zpc2J1ZihzdHIpKSk7CisgICAgcmV0dXJuQ29kZShpKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaXNlbmR3aW4uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfaXNlbmR3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM3ZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9pc2VuZHdpbi5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2VuZHdpbi5jCisqKgorKioJVGhlIHJvdXRpbmUgZW5kd2luKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaXNlbmR3aW4uYyx2IDEuNiAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGJvb2wpCitpc2VuZHdpbih2b2lkKQoreworICAgIGlmIChTUCA9PSBOVUxMKQorCXJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gU1AtPl9lbmR3aW47Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2xlYXZlb2suYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfbGVhdmVvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDA5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX2xlYXZlb2suYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9sZWF2ZW9rLmMKKyoqCisqKglUaGUgcm91dGluZSBsZWF2ZW9rLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2xlYXZlb2suYyx2IDEuNSAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2xlYXZlb2soV0lORE9XICp3aW4sIGJvb2wgZmxhZykKK3sKKyAgICBUKChUX0NBTExFRCgibGVhdmVvayglcCwlZCkiKSwgd2luLCBmbGFnKSk7CisKKyAgICBpZiAod2luKSB7CisJd2luLT5fbGVhdmVvayA9IGZsYWc7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9tb3VzZS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9tb3VzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZjI5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX21vdXNlLmMKQEAgLTAsMCArMSwxNDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIG1vZHVsZSBpcyBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBuY3Vyc2VzJ3MgaW50ZXJmYWNlIHRvIHBvaW50aW5nCisgKiBkZXZpY2VzLgorICoKKyAqIFRoZSBwcmltYXJ5IG1ldGhvZCB1c2VkIGlzIHh0ZXJtJ3MgaW50ZXJuYWwgbW91c2UtdHJhY2tpbmcgZmFjaWxpdHkuCisgKiBBZGRpdGlvbmFsIG1ldGhvZHMgZGVwZW5kIG9uIHRoZSBwbGF0Zm9ybToKKyAqCUFsZXNzYW5kcm8gUnViaW5pJ3MgR1BNIHNlcnZlciAoTGludXgpCisgKglzeXNtb3VzZSAoRnJlZUJTRCkKKyAqCXNwZWNpYWwtcHVycG9zZSBtb3VzZSBpbnRlcmZhY2UgZm9yIE9TLzIgRU1YLgorICoKKyAqIE5vdGVzIGZvciBpbXBsZW1lbnRvcnMgb2YgbmV3IG1vdXNlLWludGVyZmFjZSBtZXRob2RzOgorICoKKyAqIFRoZSBjb2RlIGlzIGxvZ2ljYWxseSBzcGxpdCBpbnRvIGEgbG93ZXIgbGV2ZWwgdGhhdCBhY2NlcHRzIGV2ZW50IHJlcG9ydHMKKyAqIGluIGEgZGV2aWNlLWRlcGVuZGVudCBmb3JtYXQgYW5kIGFuIHVwcGVyIGxldmVsIHRoYXQgcGFyc2VzIG1vdXNlIGdlc3R1cmVzCisgKiBhbmQgZmlsdGVycyBldmVudHMuICBUaGUgbWVkaWF0aW5nIGRhdGEgc3RydWN0dXJlIGlzIGEgY2lyY3VsYXIgcXVldWUgb2YKKyAqIE1FVkVOVCBzdHJ1Y3R1cmVzLgorICoKKyAqIEZ1bmN0aW9uYWxseSwgdGhlIGxvd2VyIGxldmVsJ3Mgam9iIGlzIHRvIHBpY2sgdXAgcHJpbWl0aXZlIGV2ZW50cyBhbmQKKyAqIHB1dCB0aGVtIG9uIHRoZSBjaXJjdWxhciBxdWV1ZS4gIFRoaXMgY2FuIGhhcHBlbiBpbiBvbmUgb2YgdHdvIHdheXM6CisgKiBlaXRoZXIgKGEpIF9uY19tb3VzZV9ldmVudCgpIGRldGVjdHMgYSBzZXJpZXMgb2YgaW5jb21pbmcgbW91c2UgcmVwb3J0cworICogYW5kIHF1ZXVlcyB0aGVtLCBvciAoYikgY29kZSBpbiBsaWJfZ2V0Y2guYyBkZXRlY3RzIHRoZSBrbW91cyBwcmVmaXggaW4KKyAqIHRoZSBrZXlib2FyZCBpbnB1dCBzdHJlYW0gYW5kIGNhbGxzIF9uY19tb3VzZV9pbmxpbmUgdG8gcXVldWUgdXAgYSBzZXJpZXMKKyAqIG9mIGFkamFjZW50IG1vdXNlIHJlcG9ydHMuCisgKgorICogSW4gZWl0aGVyIGNhc2UsIF9uY19tb3VzZV9wYXJzZSgpIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHNlcmllcyBpcworICogYWNjZXB0ZWQgdG8gcGFyc2UgdGhlIGRpZ2VzdGVkIG1vdXNlIHJlcG9ydHMgKGxvdy1sZXZlbCBNRVZFTlRzKSBpbnRvCisgKiBhIGdlc3R1cmUgKGEgaGlnaC1sZXZlbCBvciBjb21wb3NpdGUgTUVWRU5UKS4KKyAqCisgKiBEb24ndCBiZSB0b28gc2h5IGFib3V0IGFkZGluZyBuZXcgZXZlbnQgdHlwZXMgb3IgbW9kaWZpZXJzLCBpZiB5b3UgY2FuIGZpbmQKKyAqIHJvb20gZm9yIHRoZW0gaW4gdGhlIDMyLWJpdCBtYXNrLiAgVGhlIEFQSSBpcyB3cml0dGVuIHNvIHRoYXQgdXNlcnMgZ2V0CisgKiBmZWVkYmFjayBvbiB3aGljaCB0aGVvcmV0aWNhbCBldmVudCB0eXBlcyB0aGV5IHdvbid0IHNlZSB3aGVuIHRoZXkgY2FsbAorICogbW91c2VtYXNrLiBUaGVyZSdzIG9uZSBiaXQgcGVyIGJ1dHRvbiAodGhlIFJFU0VSVkVEX0VWRU5UIGJpdCkgbm90IGJlaW5nCisgKiB1c2VkIHlldCwgYW5kIGEgY291cGxlIG9mIGJpdHMgb3BlbiBhdCB0aGUgaGlnaCBlbmQuCisgKi8KKworI2lmZGVmIF9fRU1YX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjICBkZWZpbmUgIElOQ0xfRE9TCisjICBkZWZpbmUgIElOQ0xfVklPCisjICBkZWZpbmUgIElOQ0xfS0JECisjICBkZWZpbmUgIElOQ0xfTU9VCisjICBkZWZpbmUgIElOQ0xfRE9TUFJPQ0VTUworIyAgaW5jbHVkZSA8b3MyLmg+CQkvKiBOZWVkIHRvIGluY2x1ZGUgYmVmb3JlIHRoZSBvdGhlcnMgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9tb3VzZS5jLHYgMS4xMDIgMjAwOC8xMC8xOCAyMTo0ODo1NSB0b20gRXhwICQiKQorCisjaW5jbHVkZSA8dGVybS5oPgorI2luY2x1ZGUgPHRpYy5oPgorCisjaWYgVVNFX0dQTV9TVVBQT1JUCisjaW5jbHVkZSA8bGludXgva2V5Ym9hcmQuaD4JLyogZGVmaW5lcyBLR18qIG1hY3JvcyAqLworCisjaWZkZWYgSEFWRV9MSUJETAorLyogdXNlIGR5bmFtaWMgbG9hZGVyIHRvIGF2b2lkIGxpbmthZ2UgZGVwZW5kZW5jeSAqLworI2luY2x1ZGUgPGRsZmNuLmg+CisKKyNpZmRlZiBSVExEX05PVworI2RlZmluZSBteV9SVExEIFJUTERfTk9XCisjZWxzZQorI2lmZGVmIFJUTERfTEFaWQorI2RlZmluZSBteV9SVExEIFJUTERfTEFaWQorI2Vsc2UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorI2VuZGlmCQkJCS8qIFJUTERfTk9XICovCisjZW5kaWYJCQkJLyogSEFWRV9MSUJETCAqLworCisjZW5kaWYJCQkJLyogVVNFX0dQTV9TVVBQT1JUICovCisKKyNpZiBVU0VfU1lTTU9VU0UKKyN1bmRlZiBidXR0b25zCQkJLyogc3ltYm9sIGNvbmZsaWN0IGluIGNvbnNpby5oICovCisjdW5kZWYgbW91c2VfaW5mbwkJLyogc3ltYm9sIGNvbmZsaWN0IGluIGNvbnNpby5oICovCisjaW5jbHVkZSA8b3NyZWxkYXRlLmg+CisjaWYgKF9fRnJlZUJTRF92ZXJzaW9uID49IDQwMDAxNykKKyNpbmNsdWRlIDxzeXMvY29uc2lvLmg+CisjaW5jbHVkZSA8c3lzL2ZiaW8uaD4KKyNlbHNlCisjaW5jbHVkZSA8bWFjaGluZS9jb25zb2xlLmg+CisjZW5kaWYKKyNlbmRpZgkJCQkvKiB1c2VfU1lTTU9VU0UgKi8KKworI2RlZmluZSBNWV9UUkFDRSBUUkFDRV9JQ0FMTFN8VFJBQ0VfSUVWRU5UCisKKyNkZWZpbmUJTUFTS19SRUxFQVNFKHgpCQlOQ1VSU0VTX01PVVNFX01BU0soeCwgMDAxKQorI2RlZmluZQlNQVNLX1BSRVNTKHgpCQlOQ1VSU0VTX01PVVNFX01BU0soeCwgMDAyKQorI2RlZmluZQlNQVNLX0NMSUNLKHgpCQlOQ1VSU0VTX01PVVNFX01BU0soeCwgMDA0KQorI2RlZmluZQlNQVNLX0RPVUJMRV9DTElDSyh4KQlOQ1VSU0VTX01PVVNFX01BU0soeCwgMDEwKQorI2RlZmluZQlNQVNLX1RSSVBMRV9DTElDSyh4KQlOQ1VSU0VTX01PVVNFX01BU0soeCwgMDIwKQorI2RlZmluZQlNQVNLX1JFU0VSVkVEX0VWRU5UKHgpCU5DVVJTRVNfTU9VU0VfTUFTSyh4LCAwNDApCisKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorI2RlZmluZSBCVVRUT05fQ0xJQ0tFRCAgICAgICAgKEJVVFRPTjFfQ0xJQ0tFRCAgICAgICAgfCBCVVRUT04yX0NMSUNLRUQgICAgICAgIHwgQlVUVE9OM19DTElDS0VEICAgICAgICB8IEJVVFRPTjRfQ0xJQ0tFRCkKKyNkZWZpbmUgQlVUVE9OX1BSRVNTRUQgICAgICAgIChCVVRUT04xX1BSRVNTRUQgICAgICAgIHwgQlVUVE9OMl9QUkVTU0VEICAgICAgICB8IEJVVFRPTjNfUFJFU1NFRCAgICAgICAgfCBCVVRUT040X1BSRVNTRUQpCisjZGVmaW5lIEJVVFRPTl9SRUxFQVNFRCAgICAgICAoQlVUVE9OMV9SRUxFQVNFRCAgICAgICB8IEJVVFRPTjJfUkVMRUFTRUQgICAgICAgfCBCVVRUT04zX1JFTEVBU0VEICAgICAgIHwgQlVUVE9ONF9SRUxFQVNFRCkKKyNkZWZpbmUgQlVUVE9OX0RPVUJMRV9DTElDS0VEIChCVVRUT04xX0RPVUJMRV9DTElDS0VEIHwgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCB8IEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQgfCBCVVRUT040X0RPVUJMRV9DTElDS0VEKQorI2RlZmluZSBCVVRUT05fVFJJUExFX0NMSUNLRUQgKEJVVFRPTjFfVFJJUExFX0NMSUNLRUQgfCBCVVRUT04yX1RSSVBMRV9DTElDS0VEIHwgQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCB8IEJVVFRPTjRfVFJJUExFX0NMSUNLRUQpCisjZGVmaW5lIE1BWF9CVVRUT05TICA0CisjZWxzZQorI2RlZmluZSBCVVRUT05fQ0xJQ0tFRCAgICAgICAgKEJVVFRPTjFfQ0xJQ0tFRCAgICAgICAgfCBCVVRUT04yX0NMSUNLRUQgICAgICAgIHwgQlVUVE9OM19DTElDS0VEICAgICAgICB8IEJVVFRPTjRfQ0xJQ0tFRCAgICAgICAgfCBCVVRUT041X0NMSUNLRUQpCisjZGVmaW5lIEJVVFRPTl9QUkVTU0VEICAgICAgICAoQlVUVE9OMV9QUkVTU0VEICAgICAgICB8IEJVVFRPTjJfUFJFU1NFRCAgICAgICAgfCBCVVRUT04zX1BSRVNTRUQgICAgICAgIHwgQlVUVE9ONF9QUkVTU0VEICAgICAgICB8IEJVVFRPTjVfUFJFU1NFRCkKKyNkZWZpbmUgQlVUVE9OX1JFTEVBU0VEICAgICAgIChCVVRUT04xX1JFTEVBU0VEICAgICAgIHwgQlVUVE9OMl9SRUxFQVNFRCAgICAgICB8IEJVVFRPTjNfUkVMRUFTRUQgICAgICAgfCBCVVRUT040X1JFTEVBU0VEICAgICAgIHwgQlVUVE9ONV9SRUxFQVNFRCkKKyNkZWZpbmUgQlVUVE9OX0RPVUJMRV9DTElDS0VEIChCVVRUT04xX0RPVUJMRV9DTElDS0VEIHwgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCB8IEJVVFRPTjNfRE9VQkxFX0NMSUNLRUQgfCBCVVRUT040X0RPVUJMRV9DTElDS0VEIHwgQlVUVE9ONV9ET1VCTEVfQ0xJQ0tFRCkKKyNkZWZpbmUgQlVUVE9OX1RSSVBMRV9DTElDS0VEIChCVVRUT04xX1RSSVBMRV9DTElDS0VEIHwgQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCB8IEJVVFRPTjNfVFJJUExFX0NMSUNLRUQgfCBCVVRUT040X1RSSVBMRV9DTElDS0VEIHwgQlVUVE9ONV9UUklQTEVfQ0xJQ0tFRCkKKyNkZWZpbmUgTUFYX0JVVFRPTlMgIDUKKyNlbmRpZgorCisjZGVmaW5lIElOVkFMSURfRVZFTlQJLTEKKyNkZWZpbmUgTk9STUFMX0VWRU5UCTAKKworI2lmIFVTRV9HUE1fU1VQUE9SVAorCisjaWZuZGVmIExJQkdQTV9TT05BTUUKKyNkZWZpbmUgTElCR1BNX1NPTkFNRSAibGliZ3BtLnNvIgorI2VuZGlmCisKKyNkZWZpbmUgR0VUX0RMU1lNKG5hbWUpIChteV8jI25hbWUgPSAoVFlQRV8jI25hbWUpIGRsc3ltKFNQLT5fZGxvcGVuX2dwbSwgI25hbWUpKQorCisjZW5kaWYJCQkJLyogVVNFX0dQTV9TVVBQT1JUICovCisKK3N0YXRpYyBib29sIF9uY19tb3VzZV9wYXJzZShTQ1JFRU4gKiwgaW50KTsKK3N0YXRpYyB2b2lkIF9uY19tb3VzZV9yZXN1bWUoU0NSRUVOICopOworc3RhdGljIHZvaWQgX25jX21vdXNlX3dyYXAoU0NSRUVOICopOworCisvKiBtYWludGFpbiBhIGNpcmN1bGFyIGxpc3Qgb2YgbW91c2UgZXZlbnRzICovCisKKyNkZWZpbmUgRmlyc3RFVihzcCkJKChzcCktPl9tb3VzZV9ldmVudHMpCisjZGVmaW5lIExhc3RFVihzcCkJKChzcCktPl9tb3VzZV9ldmVudHMgKyBFVl9NQVggLSAxKQorCisjdW5kZWYgIE5FWFQKKyNkZWZpbmUgTkVYVChlcCkJKChlcCA+PSBMYXN0RVYoc3ApKSBcCisJCQkgPyBGaXJzdEVWKHNwKSBcCisJCQkgOiBlcCArIDEpCisKKyN1bmRlZiAgUFJFVgorI2RlZmluZSBQUkVWKGVwKQkoKGVwIDw9IEZpcnN0RVYoc3ApKSBcCisJCQkgPyBMYXN0RVYoc3ApIFwKKwkJCSA6IGVwIC0gMSkKKworI2RlZmluZSBJbmRleEVWKHNwLCBlcCkJKGVwIC0gRmlyc3RFVihzcCkpCisKKyNkZWZpbmUgUnVuUGFyYW1zKHNwLCBldmVudHAsIHJ1bnApIFwKKwkJKGxvbmcpIEluZGV4RVYoc3AsIHJ1bnApLCBcCisJCShsb25nKSAoSW5kZXhFVihzcCwgZXZlbnRwKSArIChFVl9NQVggLSAxKSkgJSBFVl9NQVgKKworI2lmZGVmIFRSQUNFCitzdGF0aWMgdm9pZAorX3RyYWNlX3Nsb3QoU0NSRUVOICpzcCwgY29uc3QgY2hhciAqdGFnKQoreworICAgIE1FVkVOVCAqZXA7CisKKyAgICBfdHJhY2VmKHRhZyk7CisKKyAgICBmb3IgKGVwID0gRmlyc3RFVihzcCk7IGVwIDw9IExhc3RFVihzcCk7IGVwKyspCisJX3RyYWNlZigibW91c2UgZXZlbnQgcXVldWUgc2xvdCAlbGQgPSAlcyIsCisJCShsb25nKSBJbmRleEVWKHNwLCBlcCksCisJCV9uY190cmFjZW1vdXNlKHNwLCBlcCkpOworfQorI2VuZGlmCisKKyNpZiBVU0VfRU1YX01PVVNFCisKKyMgIGRlZmluZSBUT1BfUk9XICAgICAgICAgIDAKKyMgIGRlZmluZSBMRUZUX0NPTCAgICAgICAgIDAKKworIyAgZGVmaW5lIE1fRkQoc3ApIHNwLT5fbW91c2VfZmQKKworc3RhdGljIHZvaWQKK3dyaXRlX2V2ZW50KFNDUkVFTiAqc3AsIGludCBkb3duLCBpbnQgYnV0dG9uLCBpbnQgeCwgaW50IHkpCit7CisgICAgY2hhciBidWZbNl07CisgICAgdW5zaWduZWQgbG9uZyBpZ25vcmU7CisKKyAgICBzdHJuY3B5KGJ1Ziwga2V5X21vdXNlLCAzKTsJLyogc2hvdWxkIGJlICJcMDMzW00iICovCisgICAgYnVmWzNdID0gJyAnICsgKGJ1dHRvbiAtIDEpICsgKGRvd24gPyAwIDogMHg0MCk7CisgICAgYnVmWzRdID0gJyAnICsgeCAtIExFRlRfQ09MICsgMTsKKyAgICBidWZbNV0gPSAnICcgKyB5IC0gVE9QX1JPVyArIDE7CisgICAgRG9zV3JpdGUoc3AtPl9lbXhtb3VzZV93ZmQsIGJ1ZiwgNiwgJmlnbm9yZSk7Cit9CisKK3N0YXRpYyB2b2lkCittb3VzZV9zZXJ2ZXIodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKyAgICBTQ1JFRU4gKnNwID0gKFNDUkVFTiAqKSBwYXJhbTsKKyAgICB1bnNpZ25lZCBzaG9ydCBmV2FpdCA9IE1PVV9XQUlUOworICAgIC8qIE5PUFRSUkVDVCBtb3VydCA9IHsgMCwwLDI0LDc5IH07ICovCisgICAgTU9VRVZFTlRJTkZPIG1vdWV2OworICAgIEhNT1UgaG1vdTsKKyAgICB1bnNpZ25lZCBzaG9ydCBtYXNrID0gTU9VU0VfQk4xX0RPV04gfCBNT1VTRV9CTjJfRE9XTiB8IE1PVVNFX0JOM19ET1dOOworICAgIGludCBuYnV0dG9ucyA9IDM7CisgICAgaW50IG9sZHN0YXRlID0gMDsKKyAgICBjaGFyIGVycls4MF07CisgICAgdW5zaWduZWQgbG9uZyByYzsKKworICAgIC8qIG9wZW4gdGhlIGhhbmRsZSBmb3IgdGhlIG1vdXNlICovCisgICAgaWYgKE1vdU9wZW4oTlVMTCwgJmhtb3UpID09IDApIHsKKwlyYyA9IE1vdVNldEV2ZW50TWFzaygmbWFzaywgaG1vdSk7CisJaWYgKHJjKSB7CQkvKiByZXRyeSB3aXRoIDIgYnV0dG9ucyAqLworCSAgICBtYXNrID0gTU9VU0VfQk4xX0RPV04gfCBNT1VTRV9CTjJfRE9XTjsKKwkgICAgcmMgPSBNb3VTZXRFdmVudE1hc2soJm1hc2ssIGhtb3UpOworCSAgICBuYnV0dG9ucyA9IDI7CisJfQorCWlmIChyYyA9PSAwICYmIE1vdURyYXdQdHIoaG1vdSkgPT0gMCkgeworCSAgICBmb3IgKDs7KSB7CisJCS8qIHNpdCBhbmQgd2FpdCBvbiB0aGUgZXZlbnQgcXVldWUgKi8KKwkJcmMgPSBNb3VSZWFkRXZlbnRRdWUoJm1vdWV2LCAmZldhaXQsIGhtb3UpOworCQlpZiAocmMpIHsKKwkJICAgIHNwcmludGYoZXJyLCAiRXJyb3IgcmVhZGluZyBtb3VzZSBxdWV1ZSwgcmM9JWx1LlxyXG4iLCByYyk7CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAoIXNwLT5fZW14bW91c2VfYWN0aXZhdGVkKQorCQkgICAgZ290byBmaW5pc2g7CisKKwkJLyoKKwkJICogT1MvMiBudW1iZXJzIGEgMy1idXR0b24gbW91c2UgaW5jb25zaXN0ZW50bHkgZnJvbSBvdGhlcgorCQkgKiBwbGF0Zm9ybXM6CisJCSAqICAgICAgMSA9IGxlZnQKKwkJICogICAgICAyID0gcmlnaHQKKwkJICogICAgICAzID0gbWlkZGxlLgorCQkgKi8KKwkJaWYgKChtb3Vldi5mcyBeIG9sZHN0YXRlKSAmIE1PVVNFX0JOMV9ET1dOKQorCQkgICAgd3JpdGVfZXZlbnQoc3AsIG1vdWV2LmZzICYgTU9VU0VfQk4xX0RPV04sCisJCQkJc3AtPl9lbXhtb3VzZV9idXR0b25zWzFdLCBtb3Vldi5jb2wsIG1vdWV2LnJvdyk7CisJCWlmICgobW91ZXYuZnMgXiBvbGRzdGF0ZSkgJiBNT1VTRV9CTjJfRE9XTikKKwkJICAgIHdyaXRlX2V2ZW50KHNwLCBtb3Vldi5mcyAmIE1PVVNFX0JOMl9ET1dOLAorCQkJCXNwLT5fZW14bW91c2VfYnV0dG9uc1szXSwgbW91ZXYuY29sLCBtb3Vldi5yb3cpOworCQlpZiAoKG1vdWV2LmZzIF4gb2xkc3RhdGUpICYgTU9VU0VfQk4zX0RPV04pCisJCSAgICB3cml0ZV9ldmVudChzcCwgbW91ZXYuZnMgJiBNT1VTRV9CTjNfRE9XTiwKKwkJCQlzcC0+X2VteG1vdXNlX2J1dHRvbnNbMl0sIG1vdWV2LmNvbCwgbW91ZXYucm93KTsKKworCSAgICAgIGZpbmlzaDoKKwkJb2xkc3RhdGUgPSBtb3Vldi5mczsKKwkgICAgfQorCX0gZWxzZQorCSAgICBzcHJpbnRmKGVyciwgIkVycm9yIHNldHRpbmcgZXZlbnQgbWFzaywgYnV0dG9ucz0lZCwgcmM9JWx1LlxyXG4iLAorCQkgICAgbmJ1dHRvbnMsIHJjKTsKKworCURvc1dyaXRlKDIsIGVyciwgc3RybGVuKGVyciksICZyYyk7CisJTW91Q2xvc2UoaG1vdSk7CisgICAgfQorICAgIERvc0V4aXQoRVhJVF9USFJFQUQsIDBMKTsKK30KKworI2VuZGlmIC8qIFVTRV9FTVhfTU9VU0UgKi8KKworI2lmIFVTRV9TWVNNT1VTRQorc3RhdGljIHZvaWQKK3N5c21vdXNlX3NlcnZlcihTQ1JFRU4gKnNwKQoreworICAgIHN0cnVjdCBtb3VzZV9pbmZvIHRoZV9tb3VzZTsKKyAgICBNRVZFTlQgKndvcms7CisKKyAgICB0aGVfbW91c2Uub3BlcmF0aW9uID0gTU9VU0VfR0VUSU5GTzsKKyAgICBpZiAoc3AgIT0gMAorCSYmIHNwLT5fbW91c2VfZmQgPj0gMAorCSYmIHNwLT5fc3lzbW91c2VfdGFpbCA8IEZJRk9fU0laRQorCSYmIGlvY3RsKHNwLT5fbW91c2VfZmQsIENPTlNfTU9VU0VDVEwsICZ0aGVfbW91c2UpICE9IC0xKSB7CisKKwlpZiAoc3AtPl9zeXNtb3VzZV9oZWFkID4gc3AtPl9zeXNtb3VzZV90YWlsKSB7CisJICAgIHNwLT5fc3lzbW91c2VfdGFpbCA9IDA7CisJICAgIHNwLT5fc3lzbW91c2VfaGVhZCA9IDA7CisJfQorCXdvcmsgPSAmKHNwLT5fc3lzbW91c2VfZmlmb1tzcC0+X3N5c21vdXNlX3RhaWxdKTsKKwltZW1zZXQod29yaywgMCwgc2l6ZW9mKCp3b3JrKSk7CisJd29yay0+aWQgPSBOT1JNQUxfRVZFTlQ7CS8qIHRoZXJlJ3Mgb25seSBvbmUgbW91c2UuLi4gKi8KKworCXNwLT5fc3lzbW91c2Vfb2xkX2J1dHRvbnMgPSBzcC0+X3N5c21vdXNlX25ld19idXR0b25zOworCXNwLT5fc3lzbW91c2VfbmV3X2J1dHRvbnMgPSB0aGVfbW91c2UudS5kYXRhLmJ1dHRvbnMgJiAweDc7CisKKwlpZiAoc3AtPl9zeXNtb3VzZV9uZXdfYnV0dG9ucykgeworCSAgICBpZiAoc3AtPl9zeXNtb3VzZV9uZXdfYnV0dG9ucyAmIDEpCisJCXdvcmstPmJzdGF0ZSB8PSBCVVRUT04xX1BSRVNTRUQ7CisJICAgIGlmIChzcC0+X3N5c21vdXNlX25ld19idXR0b25zICYgMikKKwkJd29yay0+YnN0YXRlIHw9IEJVVFRPTjJfUFJFU1NFRDsKKwkgICAgaWYgKHNwLT5fc3lzbW91c2VfbmV3X2J1dHRvbnMgJiA0KQorCQl3b3JrLT5ic3RhdGUgfD0gQlVUVE9OM19QUkVTU0VEOworCX0gZWxzZSB7CisJICAgIGlmIChzcC0+X3N5c21vdXNlX29sZF9idXR0b25zICYgMSkKKwkJd29yay0+YnN0YXRlIHw9IEJVVFRPTjFfUkVMRUFTRUQ7CisJICAgIGlmIChzcC0+X3N5c21vdXNlX29sZF9idXR0b25zICYgMikKKwkJd29yay0+YnN0YXRlIHw9IEJVVFRPTjJfUkVMRUFTRUQ7CisJICAgIGlmIChzcC0+X3N5c21vdXNlX29sZF9idXR0b25zICYgNCkKKwkJd29yay0+YnN0YXRlIHw9IEJVVFRPTjNfUkVMRUFTRUQ7CisJfQorCisJLyogZm9yIGNvc21ldGljIGJ1ZyBpbiBzeXNjb25zLmMgb24gRnJlZUJTRCAzLlszNF0gKi8KKwl0aGVfbW91c2Uub3BlcmF0aW9uID0gTU9VU0VfSElERTsKKwlpb2N0bChzcC0+X21vdXNlX2ZkLCBDT05TX01PVVNFQ1RMLCAmdGhlX21vdXNlKTsKKwl0aGVfbW91c2Uub3BlcmF0aW9uID0gTU9VU0VfU0hPVzsKKwlpb2N0bChzcC0+X21vdXNlX2ZkLCBDT05TX01PVVNFQ1RMLCAmdGhlX21vdXNlKTsKKworCS8qCisJICogV2UncmUgb25seSBpbnRlcmVzdGVkIGlmIHRoZSBidXR0b24gaXMgcHJlc3NlZCBvciByZWxlYXNlZC4KKwkgKiBGSVhNRTogaW1wbGVtZW50IGNvbnRpbnVvdXMgZXZlbnQtdHJhY2tpbmcuCisJICovCisJaWYgKHNwLT5fc3lzbW91c2VfbmV3X2J1dHRvbnMgIT0gc3AtPl9zeXNtb3VzZV9vbGRfYnV0dG9ucykgeworCSAgICBzcC0+X3N5c21vdXNlX3RhaWwgKz0gMTsKKwl9CisJd29yay0+eCA9IHRoZV9tb3VzZS51LmRhdGEueCAvIHNwLT5fc3lzbW91c2VfY2hhcl93aWR0aDsKKwl3b3JrLT55ID0gdGhlX21vdXNlLnUuZGF0YS55IC8gc3AtPl9zeXNtb3VzZV9jaGFyX2hlaWdodDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfc3lzbW91c2UoaW50IHNpZyBHQ0NfVU5VU0VEKQoreworICAgIHN5c21vdXNlX3NlcnZlcihTUCk7Cit9CisjZW5kaWYgLyogVVNFX1NZU01PVVNFICovCisKK3N0YXRpYyB2b2lkCitpbml0X3h0ZXJtX21vdXNlKFNDUkVFTiAqc3ApCit7CisgICAgc3AtPl9tb3VzZV90eXBlID0gTV9YVEVSTTsKKyAgICBzcC0+X21vdXNlX3h0ZXJtY2FwID0gdGlnZXRzdHIoIlhNIik7CisgICAgaWYgKCFWQUxJRF9TVFJJTkcoc3AtPl9tb3VzZV94dGVybWNhcCkpCisJc3AtPl9tb3VzZV94dGVybWNhcCA9ICJcMDMzWz8xMDAwJT8lcDElezF9JT0ldGglZWwlOyI7Cit9CisKK3N0YXRpYyB2b2lkCitlbmFibGVfeHRlcm1fbW91c2UoU0NSRUVOICpzcCwgaW50IGVuYWJsZSkKK3sKKyNpZiBVU0VfRU1YX01PVVNFCisgICAgc3AtPl9lbXhtb3VzZV9hY3RpdmF0ZWQgPSBlbmFibGU7CisjZWxzZQorICAgIHB1dHAoVFBBUk1fMShzcC0+X21vdXNlX3h0ZXJtY2FwLCBlbmFibGUpKTsKKyNlbmRpZgorICAgIHNwLT5fbW91c2VfYWN0aXZlID0gZW5hYmxlOworfQorCisjaWYgVVNFX0dQTV9TVVBQT1JUCitzdGF0aWMgYm9vbAorYWxsb3dfZ3BtX21vdXNlKHZvaWQpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIC8qIEdQTSBkb2VzIHByaW50ZidzIHdpdGhvdXQgY2hlY2tpbmcgaWYgc3Rkb3V0IGlzIGEgdGVybWluYWwgKi8KKyAgICBpZiAoaXNhdHR5KGZpbGVubyhzdGRvdXQpKSkgeworCWNoYXIgKmxpc3QgPSBnZXRlbnYoIk5DVVJTRVNfR1BNX1RFUk1TIik7CisJY2hhciAqZW52ID0gZ2V0ZW52KCJURVJNIik7CisJaWYgKGxpc3QgIT0gMCkgeworCSAgICBpZiAoZW52ICE9IDApIHsKKwkJcmVzdWx0ID0gX25jX25hbWVfbWF0Y2gobGlzdCwgZW52LCAifDoiKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIC8qIEdQTSBjaGVja3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgJFRFUk0gdmFyaWFibGUgdG8gZGVjaWRlIGlmIGl0CisJICAgICAqIHNob3VsZCBwYXNzIHh0ZXJtIGV2ZW50cyB0aHJvdWdoLiAgVGhlcmUgaXMgbm8gcmVhbCBhZHZhbnRhZ2UgaW4KKwkgICAgICogYWxsb3dpbmcgR1BNIHRvIGRvIHRoaXMuICBSZWNlbnQgdmVyc2lvbnMgcmVsYXggdGhhdCBjaGVjaywgYW5kCisJICAgICAqIHByZXRlbmQgdGhhdCBHUE0gY2FuIHdvcmsgd2l0aCBhbnkgdGVybWluYWwgaGF2aW5nIHRoZSBrbW91cworCSAgICAgKiBjYXBhYmlsaXR5LiAgUGVyaGFwcyB0aGF0IHdvcmtzIGZvciBzb21lb25lLiAgSWYgc28sIHRoZXkgY2FuCisJICAgICAqIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgKGFib3ZlKS4KKwkgICAgICovCisJICAgIGlmIChlbnYgIT0gMCAmJiBzdHJzdHIoZW52LCAibGludXgiKSAhPSAwKSB7CisJCXJlc3VsdCA9IFRSVUU7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZmRlZiBIQVZFX0xJQkRMCitzdGF0aWMgdm9pZAordW5sb2FkX2dwbV9saWJyYXJ5KFNDUkVFTiAqc3ApCit7CisgICAgaWYgKFNQLT5fZGxvcGVuX2dwbSAhPSAwKSB7CisJVCgoInVubG9hZCBHUE0gbGlicmFyeSIpKTsKKwlzcC0+X21vdXNlX2dwbV9sb2FkZWQgPSBGQUxTRTsKKwlzcC0+X21vdXNlX2ZkID0gLTE7CisJZGxjbG9zZShzcC0+X2Rsb3Blbl9ncG0pOworCXNwLT5fZGxvcGVuX2dwbSA9IDA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbG9hZF9ncG1fbGlicmFyeShTQ1JFRU4gKnNwKQoreworICAgIHNwLT5fbW91c2VfZ3BtX2ZvdW5kID0gRkFMU0U7CisgICAgaWYgKChzcC0+X2Rsb3Blbl9ncG0gPSBkbG9wZW4oTElCR1BNX1NPTkFNRSwgbXlfUlRMRCkpICE9IDApIHsKKwlpZiAoR0VUX0RMU1lNKGdwbV9mZCkgPT0gMCB8fAorCSAgICBHRVRfRExTWU0oR3BtX09wZW4pID09IDAgfHwKKwkgICAgR0VUX0RMU1lNKEdwbV9DbG9zZSkgPT0gMCB8fAorCSAgICBHRVRfRExTWU0oR3BtX0dldEV2ZW50KSA9PSAwKSB7CisJICAgIFQoKCJHUE0gaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlcyIsIGRsZXJyb3IoKSkpOworCSAgICB1bmxvYWRfZ3BtX2xpYnJhcnkoc3ApOworCX0gZWxzZSB7CisJICAgIHNwLT5fbW91c2VfZ3BtX2ZvdW5kID0gVFJVRTsKKwkgICAgc3AtPl9tb3VzZV9ncG1fbG9hZGVkID0gVFJVRTsKKwl9CisgICAgfQorfQorI2VuZGlmCisKK3N0YXRpYyBib29sCitlbmFibGVfZ3BtX21vdXNlKFNDUkVFTiAqc3AsIGJvb2wgZW5hYmxlKQoreworICAgIGJvb2wgcmVzdWx0OworCisgICAgVCgoVF9DQUxMRUQoImVuYWJsZV9ncG1fbW91c2UoJWQpIiksIGVuYWJsZSkpOworCisgICAgaWYgKGVuYWJsZSAmJiAhc3AtPl9tb3VzZV9hY3RpdmUpIHsKKyNpZmRlZiBIQVZFX0xJQkRMCisJaWYgKHNwLT5fbW91c2VfZ3BtX2ZvdW5kICYmICFzcC0+X21vdXNlX2dwbV9sb2FkZWQpIHsKKwkgICAgbG9hZF9ncG1fbGlicmFyeShzcCk7CisJfQorI2VuZGlmCisJaWYgKHNwLT5fbW91c2VfZ3BtX2xvYWRlZCkgeworCSAgICAvKiBHUE06IGluaXRpYWxpemUgY29ubmVjdGlvbiB0byBncG0gc2VydmVyICovCisJICAgIHNwLT5fbW91c2VfZ3BtX2Nvbm5lY3QuZXZlbnRNYXNrID0gR1BNX0RPV04gfCBHUE1fVVA7CisJICAgIHNwLT5fbW91c2VfZ3BtX2Nvbm5lY3QuZGVmYXVsdE1hc2sgPQorCQkodW5zaWduZWQgc2hvcnQpICh+KHNwLT5fbW91c2VfZ3BtX2Nvbm5lY3QuZXZlbnRNYXNrIHwgR1BNX0hBUkQpKTsKKwkgICAgc3AtPl9tb3VzZV9ncG1fY29ubmVjdC5taW5Nb2QgPSAwOworCSAgICBzcC0+X21vdXNlX2dwbV9jb25uZWN0Lm1heE1vZCA9CisJCSh1bnNpZ25lZCBzaG9ydCkgKH4oKDEgPDwgS0dfU0hJRlQpIHwKKwkJCQkgICAgKDEgPDwgS0dfU0hJRlRMKSB8CisJCQkJICAgICgxIDw8IEtHX1NISUZUUikpKTsKKwkgICAgLyoKKwkgICAgICogTm90ZTogR1BNIGhhcmRjb2RlcyBcRVs/MTAwMXMgYW5kIFxFWz8xMDAwaCBkdXJpbmcgaXRzIG9wZW4uCisJICAgICAqIFRoZSBmb3JtZXIgaXMgcmVjb2duaXplZCBieSB3c2NvbnMgKFN1bk9TKSwgYW5kIHRoZSBsYXR0ZXIgYnkKKwkgICAgICogeHRlcm0uICBUaG9zZSB3aWxsIG5vdCBzaG93IHVwIGluIG5jdXJzZXMnIHRyYWNlcy4KKwkgICAgICovCisJICAgIHJlc3VsdCA9IChteV9HcG1fT3Blbigmc3AtPl9tb3VzZV9ncG1fY29ubmVjdCwgMCkgPj0gMCk7CisJfSBlbHNlIHsKKwkgICAgcmVzdWx0ID0gRkFMU0U7CisJfQorCXNwLT5fbW91c2VfYWN0aXZlID0gcmVzdWx0OworCVQoKCJHUE0gb3BlbiAlcyIsIHJlc3VsdCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIpKTsKKyAgICB9IGVsc2UgeworCWlmICghZW5hYmxlICYmIHNwLT5fbW91c2VfYWN0aXZlKSB7CisJICAgIC8qIEdQTTogY2xvc2UgY29ubmVjdGlvbiB0byBncG0gc2VydmVyICovCisJICAgIG15X0dwbV9DbG9zZSgpOworCSAgICBzcC0+X21vdXNlX2FjdGl2ZSA9IEZBTFNFOworCSAgICBUKCgiR1BNIGNsb3NlZCIpKTsKKwl9CisJcmVzdWx0ID0gZW5hYmxlOworICAgIH0KKyNpZmRlZiBIQVZFX0xJQkRMCisgICAgaWYgKCFyZXN1bHQpIHsKKwl1bmxvYWRfZ3BtX2xpYnJhcnkoc3ApOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybkJvb2wocmVzdWx0KTsKK30KKyNlbmRpZiAvKiBVU0VfR1BNX1NVUFBPUlQgKi8KKworI2RlZmluZSB4dGVybV9rbW91cyAiXDAzM1tNIgorCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV9tb3VzZXR5cGUoU0NSRUVOICpzcCkKK3sKKyAgICBUKChUX0NBTExFRCgiaW5pdGlhbGl6ZV9tb3VzZXR5cGUoKSIpKSk7CisKKyAgICAvKiBUcnkgZ3BtIGZpcnN0LCBiZWNhdXNlIGdwbSBtYXkgYmUgY29uZmlndXJlZCB0byBydW4gaW4geHRlcm0gKi8KKyNpZiBVU0VfR1BNX1NVUFBPUlQKKyAgICBpZiAoYWxsb3dfZ3BtX21vdXNlKCkpIHsKKwlpZiAoIXNwLT5fbW91c2VfZ3BtX2xvYWRlZCkgeworI2lmZGVmIEhBVkVfTElCREwKKwkgICAgbG9hZF9ncG1fbGlicmFyeShzcCk7CisjZWxzZSAvKiAhSEFWRV9MSUJETCAqLworCSAgICBzcC0+X21vdXNlX2dwbV9mb3VuZCA9IFRSVUU7CisJICAgIHNwLT5fbW91c2VfZ3BtX2xvYWRlZCA9IFRSVUU7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIFRoZSBncG1fZmQgZmlsZS1kZXNjcmlwdG9yIG1heSBiZSBuZWdhdGl2ZSAoeHRlcm0pLiAgU28gd2UgaGF2ZSB0bworCSAqIG1haW50YWluIG91ciBub3Rpb24gb2Ygd2hldGhlciB0aGUgbW91c2UgY29ubmVjdGlvbiBpcyBhY3RpdmUKKwkgKiB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGUtZGVzY3JpcHRvci4KKwkgKi8KKwlpZiAoc3AtPl9tb3VzZV9ncG1fZm91bmQgJiYgZW5hYmxlX2dwbV9tb3VzZShzcCwgVFJVRSkpIHsKKwkgICAgc3AtPl9tb3VzZV90eXBlID0gTV9HUE07CisJICAgIHNwLT5fbW91c2VfZmQgPSAqKG15X2dwbV9mZCk7CisJICAgIFQoKCJHUE0gbW91c2VfZmQgJWQiLCBzcC0+X21vdXNlX2ZkKSk7CisJICAgIHJldHVyblZvaWQ7CisJfQorICAgIH0KKyNlbmRpZiAvKiBVU0VfR1BNX1NVUFBPUlQgKi8KKworICAgIC8qIE9TLzIgVklPICovCisjaWYgVVNFX0VNWF9NT1VTRQorICAgIGlmICghc3AtPl9lbXhtb3VzZV90aHJlYWQKKwkmJiBzdHJzdHIoY3VyX3Rlcm0tPnR5cGUudGVybV9uYW1lcywgInh0ZXJtIikgPT0gMAorCSYmIGtleV9tb3VzZSkgeworCWludCBoYW5kbGVzWzJdOworCisJaWYgKHBpcGUoaGFuZGxlcykgPCAwKSB7CisJICAgIHBlcnJvcigibW91c2UgcGlwZSBlcnJvciIpOworCSAgICByZXR1cm5Wb2lkOworCX0gZWxzZSB7CisJICAgIGludCByYzsKKworCSAgICBpZiAoIXNwLT5fZW14bW91c2VfYnV0dG9uc1swXSkgeworCQljaGFyICpzID0gZ2V0ZW52KCJNT1VTRV9CVVRUT05TXzEyMyIpOworCisJCXNwLT5fZW14bW91c2VfYnV0dG9uc1swXSA9IDE7CisJCWlmIChzICYmIHN0cmxlbihzKSA+PSAzKSB7CisJCSAgICBzcC0+X2VteG1vdXNlX2J1dHRvbnNbMV0gPSBzWzBdIC0gJzAnOworCQkgICAgc3AtPl9lbXhtb3VzZV9idXR0b25zWzJdID0gc1sxXSAtICcwJzsKKwkJICAgIHNwLT5fZW14bW91c2VfYnV0dG9uc1szXSA9IHNbMl0gLSAnMCc7CisJCX0gZWxzZSB7CisJCSAgICBzcC0+X2VteG1vdXNlX2J1dHRvbnNbMV0gPSAxOworCQkgICAgc3AtPl9lbXhtb3VzZV9idXR0b25zWzJdID0gMzsKKwkJICAgIHNwLT5fZW14bW91c2VfYnV0dG9uc1szXSA9IDI7CisJCX0KKwkgICAgfQorCSAgICBzcC0+X2VteG1vdXNlX3dmZCA9IGhhbmRsZXNbMV07CisJICAgIE1fRkQoc3ApID0gaGFuZGxlc1swXTsKKwkgICAgLyogTmVlZGVkPyAqLworCSAgICBzZXRtb2RlKGhhbmRsZXNbMF0sIE9fQklOQVJZKTsKKwkgICAgc2V0bW9kZShoYW5kbGVzWzFdLCBPX0JJTkFSWSk7CisJICAgIC8qIERvIG5vdCB1c2UgQ1JUIGZ1bmN0aW9ucywgd2UgbWF5IHNpbmdsZS10aHJlYWRlZC4gKi8KKwkgICAgcmMgPSBEb3NDcmVhdGVUaHJlYWQoKHVuc2lnbmVkIGxvbmcgKikgJnNwLT5fZW14bW91c2VfdGhyZWFkLAorCQkJCSBtb3VzZV9zZXJ2ZXIsIChsb25nKSBzcCwgMCwgODE5Mik7CisJICAgIGlmIChyYykgeworCQlwcmludGYoIm1vdXNlIHRocmVhZCBlcnJvciAlZD0lI3giLCByYywgcmMpOworCSAgICB9IGVsc2UgeworCQlzcC0+X21vdXNlX3R5cGUgPSBNX1hURVJNOworCSAgICB9CisJICAgIHJldHVyblZvaWQ7CisJfQorICAgIH0KKyNlbmRpZiAvKiBVU0VfRU1YX01PVVNFICovCisKKyNpZiBVU0VfU1lTTU9VU0UKKyAgICB7CisJc3RydWN0IG1vdXNlX2luZm8gdGhlX21vdXNlOworCWNoYXIgKnRoZV9kZXZpY2UgPSAwOworCisJaWYgKGlzYXR0eShzcC0+X2lmZCkpCisJICAgIHRoZV9kZXZpY2UgPSB0dHluYW1lKHNwLT5faWZkKTsKKwlpZiAodGhlX2RldmljZSA9PSAwKQorCSAgICB0aGVfZGV2aWNlID0gIi9kZXYvdHR5IjsKKworCXNwLT5fbW91c2VfZmQgPSBvcGVuKHRoZV9kZXZpY2UsIE9fUkRXUik7CisKKwlpZiAoc3AtPl9tb3VzZV9mZCA+PSAwKSB7CisJICAgIC8qCisJICAgICAqIHN5c21vdXNlIGRvZXMgbm90IGhhdmUgYSB1c2FibGUgdXNlciBpbnRlcmZhY2UgZm9yIG9idGFpbmluZworCSAgICAgKiBtb3VzZSBldmVudHMuICBUaGUgbG9naWNhbCB3YXkgdG8gcHJvY2VlZCAocmVhZGluZyBkYXRhIG9uIGEKKwkgICAgICogc3RyZWFtKSBvbmx5IHdvcmtzIGlmIG9uZSBvcGVucyB0aGUgZGV2aWNlIGFzIHJvb3QuICBFdmVuIGluCisJICAgICAqIHRoYXQgbW9kZSwgY2FyZWZ1bCBleGFtaW5hdGlvbiBzaG93cyB3ZSBsb3NlIGV2ZW50cworCSAgICAgKiBvY2Nhc2lvbmFsbHkuICBUaGUgaW50ZXJmYWNlIHByb3ZpZGVkIGZvciB1c2VyIHByb2dyYW1zIGlzIHRvCisJICAgICAqIGVzdGFibGlzaCBhIHNpZ25hbCBoYW5kbGVyLiAgcmVhbGx5LgorCSAgICAgKgorCSAgICAgKiBUYWtlIG92ZXIgU0lHVVNSMiBmb3IgdGhpcyBwdXJwb3NlIHNpbmNlIFNJR1VTUjEgaXMgbW9yZQorCSAgICAgKiBsaWtlbHkgdG8gYmUgdXNlZCBieSBhbiBhcHBsaWNhdGlvbi4gIGdldGNoKCkgd2lsbCBoYXZlIHRvCisJICAgICAqIGhhbmRsZSB0aGUgbWlzbGVhZGluZyBFSU5UUidzLgorCSAgICAgKi8KKwkgICAgc2lnbmFsKFNJR1VTUjIsIFNJR19JR04pOworCSAgICB0aGVfbW91c2Uub3BlcmF0aW9uID0gTU9VU0VfTU9ERTsKKwkgICAgdGhlX21vdXNlLnUubW9kZS5tb2RlID0gMDsKKwkgICAgdGhlX21vdXNlLnUubW9kZS5zaWduYWwgPSBTSUdVU1IyOworCSAgICBpZiAoaW9jdGwoc3AtPl9tb3VzZV9mZCwgQ09OU19NT1VTRUNUTCwgJnRoZV9tb3VzZSkgIT0gLTEpIHsKKwkJc2lnbmFsKFNJR1VTUjIsIGhhbmRsZV9zeXNtb3VzZSk7CisJCXRoZV9tb3VzZS5vcGVyYXRpb24gPSBNT1VTRV9TSE9XOworCQlpb2N0bChzcC0+X21vdXNlX2ZkLCBDT05TX01PVVNFQ1RMLCAmdGhlX21vdXNlKTsKKworI2lmIGRlZmluZWQoRkJJT19NT0RFSU5GTykgfHwgZGVmaW5lZChDT05TX01PREVJTkZPKQkvKiBGcmVlQlNEID4gMi54ICovCisJCXsKKyNpZm5kZWYgRkJJT19HRVRNT0RFCQkvKiBGcmVlQlNEIDMueCAqLworI2RlZmluZSBGQklPX0dFVE1PREUgICAgQ09OU19HRVQKKyNkZWZpbmUgRkJJT19NT0RFSU5GTyAgIENPTlNfTU9ERUlORk8KKyNlbmRpZiAvKiBGQklPX0dFVE1PREUgKi8KKwkJICAgIHZpZGVvX2luZm9fdCB0aGVfdmlkZW87CisKKwkJICAgIGlmIChpb2N0bChzcC0+X21vdXNlX2ZkLAorCQkJICAgICAgRkJJT19HRVRNT0RFLAorCQkJICAgICAgJnRoZV92aWRlby52aV9tb2RlKSAhPSAtMQorCQkJJiYgaW9jdGwoc3AtPl9tb3VzZV9mZCwKKwkJCQkgRkJJT19NT0RFSU5GTywKKwkJCQkgJnRoZV92aWRlbykgIT0gLTEpIHsKKwkJCXNwLT5fc3lzbW91c2VfY2hhcl93aWR0aCA9IHRoZV92aWRlby52aV9jd2lkdGg7CisJCQlzcC0+X3N5c21vdXNlX2NoYXJfaGVpZ2h0ID0gdGhlX3ZpZGVvLnZpX2NoZWlnaHQ7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBkZWZpbmVkKEZCSU9fTU9ERUlORk8pIHx8IGRlZmluZWQoQ09OU19NT0RFSU5GTykgKi8KKworCQlpZiAoc3AtPl9zeXNtb3VzZV9jaGFyX3dpZHRoIDw9IDApCisJCSAgICBzcC0+X3N5c21vdXNlX2NoYXJfd2lkdGggPSA4OworCQlpZiAoc3AtPl9zeXNtb3VzZV9jaGFyX2hlaWdodCA8PSAwKQorCQkgICAgc3AtPl9zeXNtb3VzZV9jaGFyX2hlaWdodCA9IDE2OworCQlzcC0+X21vdXNlX3R5cGUgPSBNX1NZU01PVVNFOworCQlyZXR1cm5Wb2lkOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBVU0VfU1lTTU9VU0UgKi8KKworICAgIC8qIHdlIGtub3cgaG93IHRvIHJlY29nbml6ZSBtb3VzZSBldmVudHMgdW5kZXIgInh0ZXJtIiAqLworICAgIGlmIChrZXlfbW91c2UgIT0gMCkgeworCWlmICghc3RyY21wKGtleV9tb3VzZSwgeHRlcm1fa21vdXMpCisJICAgIHx8IHN0cnN0cihjdXJfdGVybS0+dHlwZS50ZXJtX25hbWVzLCAieHRlcm0iKSAhPSAwKSB7CisJICAgIGluaXRfeHRlcm1fbW91c2Uoc3ApOworCX0KKyAgICB9IGVsc2UgaWYgKHN0cnN0cihjdXJfdGVybS0+dHlwZS50ZXJtX25hbWVzLCAieHRlcm0iKSAhPSAwKSB7CisJaWYgKF9uY19hZGRfdG9fdHJ5KCYoc3AtPl9rZXl0cnkpLCB4dGVybV9rbW91cywgS0VZX01PVVNFKSA9PSBPSykKKwkgICAgaW5pdF94dGVybV9tb3VzZShzcCk7CisgICAgfQorICAgIHJldHVyblZvaWQ7Cit9CisKK3N0YXRpYyBib29sCitfbmNfbW91c2VfaW5pdChTQ1JFRU4gKnNwKQorLyogaW5pdGlhbGl6ZSB0aGUgbW91c2UgKi8KK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworICAgIGludCBpOworCisgICAgaWYgKHNwICE9IDApIHsKKwlpZiAoIXNwLT5fbW91c2VfaW5pdGlhbGl6ZWQpIHsKKwkgICAgc3AtPl9tb3VzZV9pbml0aWFsaXplZCA9IFRSVUU7CisKKwkgICAgVFIoTVlfVFJBQ0UsICgiX25jX21vdXNlX2luaXQoKSBjYWxsZWQiKSk7CisKKwkgICAgc3AtPl9tb3VzZV9ldmVudHAgPSBGaXJzdEVWKHNwKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IEVWX01BWDsgaSsrKQorCQlzcC0+X21vdXNlX2V2ZW50c1tpXS5pZCA9IElOVkFMSURfRVZFTlQ7CisKKwkgICAgaW5pdGlhbGl6ZV9tb3VzZXR5cGUoc3ApOworCisJICAgIFQoKCJfbmNfbW91c2VfaW5pdCgpIHNldCBtb3VzZXR5cGUgdG8gJWQiLCBzcC0+X21vdXNlX3R5cGUpKTsKKwl9CisJcmVzdWx0ID0gc3AtPl9tb3VzZV9pbml0aWFsaXplZDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFF1ZXJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhIHBlbmRpbmcgbW91c2UgZXZlbnQuICBUaGlzIGlzIGNhbGxlZCBmcm9tCisgKiBmaWZvX3B1c2goKSBpbiBsaWJfZ2V0Y2guYworICovCitzdGF0aWMgYm9vbAorX25jX21vdXNlX2V2ZW50KFNDUkVFTiAqc3AgR0NDX1VOVVNFRCkKK3sKKyAgICBNRVZFTlQgKmV2ZW50cCA9IHNwLT5fbW91c2VfZXZlbnRwOworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICAodm9pZCkgZXZlbnRwOworCisgICAgc3dpdGNoIChzcC0+X21vdXNlX3R5cGUpIHsKKyAgICBjYXNlIE1fWFRFUk06CisJLyogeHRlcm06IG5ldmVyIGhhdmUgdG8gcXVlcnksIG1vdXNlIGV2ZW50cyBhcmUgaW4gdGhlIGtleWJvYXJkIHN0cmVhbSAqLworI2lmIFVTRV9FTVhfTU9VU0UKKwl7CisJICAgIGNoYXIga2J1ZlszXTsKKworCSAgICBpbnQgaSwgcmVzID0gcmVhZChNX0ZEKHNwKSwgJmtidWYsIDMpOwkvKiBFYXQgdGhlIHByZWZpeCAqLworCSAgICBpZiAocmVzICE9IDMpCisJCXByaW50ZigiR290ICVkIGNoYXJzIGluc3RlYWQgb2YgMyBmb3IgcHJlZml4LlxuIiwgcmVzKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IHJlczsgaSsrKSB7CisJCWlmIChrYnVmW2ldICE9IGtleV9tb3VzZVtpXSkKKwkJICAgIHByaW50ZigiR290IGNoYXIgJWQgaW5zdGVhZCBvZiAlZCBmb3IgcHJlZml4LlxuIiwKKwkJCSAgIChpbnQpIGtidWZbaV0sIChpbnQpIGtleV9tb3VzZVtpXSk7CisJICAgIH0KKwkgICAgcmVzdWx0ID0gVFJVRTsKKwl9CisjZW5kaWYgLyogVVNFX0VNWF9NT1VTRSAqLworCWJyZWFrOworCisjaWYgVVNFX0dQTV9TVVBQT1JUCisgICAgY2FzZSBNX0dQTToKKwl7CisJICAgIC8qIHF1ZXJ5IHNlcnZlciBmb3IgZXZlbnQsIHJldHVybiBUUlVFIGlmIHdlIGZpbmQgb25lICovCisJICAgIEdwbV9FdmVudCBldjsKKworCSAgICBpZiAobXlfR3BtX0dldEV2ZW50KCZldikgPT0gMSkgeworCQkvKiB0aGVyZSdzIG9ubHkgb25lIG1vdXNlLi4uICovCisJCWV2ZW50cC0+aWQgPSBOT1JNQUxfRVZFTlQ7CisKKwkJZXZlbnRwLT5ic3RhdGUgPSAwOworCQlzd2l0Y2ggKGV2LnR5cGUgJiAweDBmKSB7CisJCWNhc2UgKEdQTV9ET1dOKToKKwkJICAgIGlmIChldi5idXR0b25zICYgR1BNX0JfTEVGVCkKKwkJCWV2ZW50cC0+YnN0YXRlIHw9IEJVVFRPTjFfUFJFU1NFRDsKKwkJICAgIGlmIChldi5idXR0b25zICYgR1BNX0JfTUlERExFKQorCQkJZXZlbnRwLT5ic3RhdGUgfD0gQlVUVE9OMl9QUkVTU0VEOworCQkgICAgaWYgKGV2LmJ1dHRvbnMgJiBHUE1fQl9SSUdIVCkKKwkJCWV2ZW50cC0+YnN0YXRlIHw9IEJVVFRPTjNfUFJFU1NFRDsKKwkJICAgIGJyZWFrOworCQljYXNlIChHUE1fVVApOgorCQkgICAgaWYgKGV2LmJ1dHRvbnMgJiBHUE1fQl9MRUZUKQorCQkJZXZlbnRwLT5ic3RhdGUgfD0gQlVUVE9OMV9SRUxFQVNFRDsKKwkJICAgIGlmIChldi5idXR0b25zICYgR1BNX0JfTUlERExFKQorCQkJZXZlbnRwLT5ic3RhdGUgfD0gQlVUVE9OMl9SRUxFQVNFRDsKKwkJICAgIGlmIChldi5idXR0b25zICYgR1BNX0JfUklHSFQpCisJCQlldmVudHAtPmJzdGF0ZSB8PSBCVVRUT04zX1JFTEVBU0VEOworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICBicmVhazsKKwkJfQorCisJCWV2ZW50cC0+eCA9IGV2LnggLSAxOworCQlldmVudHAtPnkgPSBldi55IC0gMTsKKwkJZXZlbnRwLT56ID0gMDsKKworCQkvKiBidW1wIHRoZSBuZXh0LWZyZWUgcG9pbnRlciBpbnRvIHRoZSBjaXJjdWxhciBsaXN0ICovCisJCXNwLT5fbW91c2VfZXZlbnRwID0gZXZlbnRwID0gTkVYVChldmVudHApOworCQlyZXN1bHQgPSBUUlVFOworCSAgICB9CisJfQorCWJyZWFrOworI2VuZGlmCisKKyNpZiBVU0VfU1lTTU9VU0UKKyAgICBjYXNlIE1fU1lTTU9VU0U6CisJaWYgKHNwLT5fc3lzbW91c2VfaGVhZCA8IHNwLT5fc3lzbW91c2VfdGFpbCkgeworCSAgICAqZXZlbnRwID0gc3AtPl9zeXNtb3VzZV9maWZvW3NwLT5fc3lzbW91c2VfaGVhZF07CisKKwkgICAgLyoKKwkgICAgICogUG9pbnQgdGhlIGZpZm8taGVhZCB0byB0aGUgbmV4dCBwb3NzaWJsZSBsb2NhdGlvbi4gIElmIHRoZXJlCisJICAgICAqIGFyZSBub25lLCByZXNldCB0aGUgaW5kaWNlcy4gIFRoaXMgbWF5IGJlIGludGVycnVwdGVkIGJ5IHRoZQorCSAgICAgKiBzaWduYWwgaGFuZGxlciwgZG9pbmcgZXNzZW50aWFsbHkgdGhlIHNhbWUgcmVzZXQuCisJICAgICAqLworCSAgICBzcC0+X3N5c21vdXNlX2hlYWQgKz0gMTsKKwkgICAgaWYgKHNwLT5fc3lzbW91c2VfaGVhZCA9PSBzcC0+X3N5c21vdXNlX3RhaWwpIHsKKwkJc3AtPl9zeXNtb3VzZV90YWlsID0gMDsKKwkJc3AtPl9zeXNtb3VzZV9oZWFkID0gMDsKKwkgICAgfQorCisJICAgIC8qIGJ1bXAgdGhlIG5leHQtZnJlZSBwb2ludGVyIGludG8gdGhlIGNpcmN1bGFyIGxpc3QgKi8KKwkgICAgc3AtPl9tb3VzZV9ldmVudHAgPSBldmVudHAgPSBORVhUKGV2ZW50cCk7CisJICAgIHJlc3VsdCA9IFRSVUU7CisJfQorCWJyZWFrOworI2VuZGlmIC8qIFVTRV9TWVNNT1VTRSAqLworCisgICAgY2FzZSBNX05PTkU6CisJYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsJCS8qIHRydWUgaWYgd2UgZm91bmQgYW4gZXZlbnQgKi8KK30KKworc3RhdGljIGJvb2wKK19uY19tb3VzZV9pbmxpbmUoU0NSRUVOICpzcCkKKy8qIG1vdXNlIHJlcG9ydCByZWNlaXZlZCBpbiB0aGUga2V5Ym9hcmQgc3RyZWFtIC0tIHBhcnNlIGl0cyBpbmZvICovCit7CisgICAgaW50IGI7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICBNRVZFTlQgKmV2ZW50cCA9IHNwLT5fbW91c2VfZXZlbnRwOworCisgICAgVFIoTVlfVFJBQ0UsICgiX25jX21vdXNlX2lubGluZSgpIGNhbGxlZCIpKTsKKworICAgIGlmIChzcC0+X21vdXNlX3R5cGUgPT0gTV9YVEVSTSkgeworCXVuc2lnbmVkIGNoYXIga2J1Zls0XTsKKwltbWFza190IHByZXY7CisJc2l6ZV90IGdyYWJiZWQ7CisJaW50IHJlczsKKworCS8qIFRoaXMgY29kZSByZXF1aXJlcyB0aGF0IHlvdXIgeHRlcm0gZW50cnkgY29udGFpbiB0aGUga21vdXMKKwkgKiBjYXBhYmlsaXR5IGFuZCB0aGF0IGl0IGJlIHNldCB0byB0aGUgXEVbTSBkb2N1bWVudGVkIGluIHRoZQorCSAqIFh0ZXJtIENvbnRyb2wgU2VxdWVuY2VzIHJlZmVyZW5jZS4gIFRoaXMgaXMgaG93IHdlCisJICogYXJyYW5nZSBmb3IgbW91c2UgZXZlbnRzIHRvIGJlIHJlcG9ydGVkIHZpYSBhIEtFWV9NT1VTRQorCSAqIHJldHVybiB2YWx1ZSBmcm9tIHdnZXRjaCgpLiAgQWZ0ZXIgdGhpcyB2YWx1ZSBpcyByZWNlaXZlZCwKKwkgKiBfbmNfbW91c2VfaW5saW5lKCkgZ2V0cyBjYWxsZWQgYW5kIGlzIGltbWVkaWF0ZWx5CisJICogcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlIG1vdXNlIHN0YXR1cyBpbmZvcm1hdGlvbgorCSAqIGZvbGxvd2luZyB0aGUgcHJlZml4LgorCSAqCisJICogVGhlIGZvbGxvd2luZyBxdW90ZXMgZnJvbSB0aGUgY3RybHNlcXMubXMgZG9jdW1lbnQgaW4gdGhlCisJICogWCBkaXN0cmlidXRpb24sIGRlc2NyaWJpbmcgdGhlIFggbW91c2UgdHJhY2tpbmcgZmVhdHVyZToKKwkgKgorCSAqIFBhcmFtZXRlcnMgZm9yIGFsbCBtb3VzZSB0cmFja2luZyBlc2NhcGUgc2VxdWVuY2VzCisJICogZ2VuZXJhdGVkIGJ5IHh0ZXJtIGVuY29kZSBudW1lcmljIHBhcmFtZXRlcnMgaW4gYSBzaW5nbGUKKwkgKiBjaGFyYWN0ZXIgYXMgdmFsdWUrMDQwLiAgRm9yIGV4YW1wbGUsICEgIGlzIDEuCisJICoKKwkgKiBPbiBidXR0b24gcHJlc3Mgb3IgcmVsZWFzZSwgeHRlcm0gc2VuZHMgRVNDIFsgTSBDYkN4Q3kuCisJICogVGhlIGxvdyB0d28gYml0cyBvZiBDYiBlbmNvZGUgYnV0dG9uIGluZm9ybWF0aW9uOiAwPU1CMQorCSAqIHByZXNzZWQsIDE9TUIyIHByZXNzZWQsIDI9TUIzIHByZXNzZWQsIDM9cmVsZWFzZS4gIFRoZQorCSAqIHVwcGVyIGJpdHMgZW5jb2RlIHdoYXQgbW9kaWZpZXJzIHdlcmUgZG93biB3aGVuIHRoZQorCSAqIGJ1dHRvbiB3YXMgcHJlc3NlZCBhbmQgYXJlIGFkZGVkIHRvZ2V0aGVyLiAgND1TaGlmdCwKKwkgKiA4PU1ldGEsIDE2PUNvbnRyb2wuICBDeCBhbmQgQ3kgYXJlIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGVzCisJICogb2YgdGhlIG1vdXNlIGV2ZW50LiAgVGhlIHVwcGVyIGxlZnQgY29ybmVyIGlzICgxLDEpLgorCSAqCisJICogKEVuZCBxdW90ZSkgIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB3ZSd2ZSBlYXRlbiB0aGUKKwkgKiBrZXkgcHJlZml4LiAgRllJLCB0aGUgbG9vcCBiZWxvdyBpcyBuZWNlc3NhcnkgYmVjYXVzZQorCSAqIG1vdXNlIGNsaWNrIGluZm8gaXNuJ3QgZ3VhcmFudGVlZCB0byBwcmVzZW50IGFzIGEKKwkgKiBzaW5nbGUgY2xpc3QgaXRlbS4KKwkgKgorCSAqIFdoZWVsIG1pY2UgbWF5IHJldHVybiBidXR0b25zIDQgYW5kIDUgd2hlbiB0aGUgd2hlZWwgaXMgdHVybmVkLgorCSAqIFdlIGVuY29kZSB0aG9zZSBhcyBidXR0b24gcHJlc3Nlcy4KKwkgKi8KKwlmb3IgKGdyYWJiZWQgPSAwOyBncmFiYmVkIDwgMzsgZ3JhYmJlZCArPSAoc2l6ZV90KSByZXMpIHsKKworCSAgICAvKiBGb3IgVklPIG1vdXNlIHdlIGFkZCBleHRyYSBiaXQgNjQgdG8gZGlzYW1iaWd1YXRlIGJ1dHRvbi11cC4gKi8KKyNpZiBVU0VfRU1YX01PVVNFCisJICAgIHJlcyA9IHJlYWQoTV9GRChzcCkgPj0gMCA/IE1fRkQoc3ApIDogc3AtPl9pZmQsICZrYnVmLCAzKTsKKyNlbHNlCisJICAgIHJlcyA9IHJlYWQoc3AtPl9pZmQsIGtidWYgKyBncmFiYmVkLCAzIC0gZ3JhYmJlZCk7CisjZW5kaWYKKwkgICAgaWYgKHJlcyA9PSAtMSkKKwkJYnJlYWs7CisJfQorCWtidWZbM10gPSAnXDAnOworCisJVFIoVFJBQ0VfSUVWRU5ULAorCSAgICgiX25jX21vdXNlX2lubGluZSBzZWVzIHRoZSBmb2xsb3dpbmcgeHRlcm0gZGF0YTogJyVzJyIsIGtidWYpKTsKKworCS8qIHRoZXJlJ3Mgb25seSBvbmUgbW91c2UuLi4gKi8KKwlldmVudHAtPmlkID0gTk9STUFMX0VWRU5UOworCisJLyogcHJvY2Vzc2luZyBjb2RlIGdvZXMgaGVyZSAqLworCWV2ZW50cC0+YnN0YXRlID0gMDsKKwlwcmV2ID0gUFJFVihldmVudHApLT5ic3RhdGU7CisKKyNpZiBVU0VfRU1YX01PVVNFCisjZGVmaW5lIFBSRVNTX1BPU0lUSU9OKG4pIFwKKwlldmVudHAtPmJzdGF0ZSA9IE1BU0tfUFJFU1Mobik7IFwKKwlpZiAoa2J1ZlswXSAmIDB4NDApIFwKKwkgICAgZXZlbnRwLT5ic3RhdGUgPSBNQVNLX1JFTEVBU0UobikKKyNlbHNlCisjZGVmaW5lIFBSRVNTX1BPU0lUSU9OKG4pIFwKKwlldmVudHAtPmJzdGF0ZSA9IChtbWFza190KSAocHJldiAmIE1BU0tfUFJFU1MobikgXAorCQkJCSAgICA/IFJFUE9SVF9NT1VTRV9QT1NJVElPTiBcCisJCQkJICAgIDogTUFTS19QUkVTUyhuKSkKKyNlbmRpZgorCisJc3dpdGNoIChrYnVmWzBdICYgMHgzKSB7CisJY2FzZSAweDA6CisJICAgIGlmIChrYnVmWzBdICYgNjQpCisJCWV2ZW50cC0+YnN0YXRlID0gTUFTS19QUkVTUyg0KTsKKwkgICAgZWxzZQorCQlQUkVTU19QT1NJVElPTigxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIDB4MToKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMgorCSAgICBpZiAoa2J1ZlswXSAmIDY0KQorCQlldmVudHAtPmJzdGF0ZSA9IE1BU0tfUFJFU1MoNSk7CisJICAgIGVsc2UKKyNlbmRpZgorCQlQUkVTU19QT1NJVElPTigyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIDB4MjoKKwkgICAgUFJFU1NfUE9TSVRJT04oMyk7CisJICAgIGJyZWFrOworCisJY2FzZSAweDM6CisJICAgIC8qCisJICAgICAqIFJlbGVhc2UgZXZlbnRzIGFyZW4ndCByZXBvcnRlZCBmb3IgaW5kaXZpZHVhbCBidXR0b25zLCBqdXN0IGZvcgorCSAgICAgKiB0aGUgYnV0dG9uIHNldCBhcyBhIHdob2xlLiAgSG93ZXZlciwgYmVjYXVzZSB0aGVyZSBhcmUgbm9ybWFsbHkKKwkgICAgICogbm8gbW91c2UgZXZlbnRzIHVuZGVyIHh0ZXJtIHRoYXQgaW50ZXJ2ZW5lIGJldHdlZW4gcHJlc3MgYW5kCisJICAgICAqIHJlbGVhc2UsIHdlIGNhbiBpbmZlciB0aGUgYnV0dG9uIGFjdHVhbGx5IHJlbGVhc2VkIGJ5IGxvb2tpbmcgYXQKKwkgICAgICogdGhlIHByZXZpb3VzIGV2ZW50LgorCSAgICAgKi8KKwkgICAgaWYgKHByZXYgJiAoQlVUVE9OX1BSRVNTRUQgfCBCVVRUT05fUkVMRUFTRUQpKSB7CisJCWV2ZW50cC0+YnN0YXRlID0gQlVUVE9OX1JFTEVBU0VEOworCQlmb3IgKGIgPSAxOyBiIDw9IE1BWF9CVVRUT05TOyArK2IpIHsKKwkJICAgIGlmICghKHByZXYgJiBNQVNLX1BSRVNTKGIpKSkKKwkJCWV2ZW50cC0+YnN0YXRlICY9IH5NQVNLX1JFTEVBU0UoYik7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJLyoKKwkJICogWEZyZWU4NiB4dGVybSB3aWxsIHJldHVybiBhIHN0cmVhbSBvZiByZWxlYXNlLWV2ZW50cyB0bworCQkgKiBsZXQgdGhlIGFwcGxpY2F0aW9uIGtub3cgd2hlcmUgdGhlIG1vdXNlIGlzIGdvaW5nLCBpZiB0aGUKKwkJICogcHJpdmF0ZSBtb2RlIDEwMDIgb3IgMTAwMyBpcyBlbmFibGVkLgorCQkgKi8KKwkJZXZlbnRwLT5ic3RhdGUgPSBSRVBPUlRfTU9VU0VfUE9TSVRJT047CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCXJlc3VsdCA9IChldmVudHAtPmJzdGF0ZSAmIFJFUE9SVF9NT1VTRV9QT1NJVElPTikgPyBUUlVFIDogRkFMU0U7CisKKwlpZiAoa2J1ZlswXSAmIDQpIHsKKwkgICAgZXZlbnRwLT5ic3RhdGUgfD0gQlVUVE9OX1NISUZUOworCX0KKwlpZiAoa2J1ZlswXSAmIDgpIHsKKwkgICAgZXZlbnRwLT5ic3RhdGUgfD0gQlVUVE9OX0FMVDsKKwl9CisJaWYgKGtidWZbMF0gJiAxNikgeworCSAgICBldmVudHAtPmJzdGF0ZSB8PSBCVVRUT05fQ1RSTDsKKwl9CisKKwlldmVudHAtPnggPSAoa2J1ZlsxXSAtICcgJykgLSAxOworCWV2ZW50cC0+eSA9IChrYnVmWzJdIC0gJyAnKSAtIDE7CisJVFIoTVlfVFJBQ0UsCisJICAgKCJfbmNfbW91c2VfaW5saW5lOiBwcmltaXRpdmUgbW91c2UtZXZlbnQgJXMgaGFzIHNsb3QgJWxkIiwKKwkgICAgX25jX3RyYWNlbW91c2Uoc3AsIGV2ZW50cCksCisJICAgIChsb25nKSBJbmRleEVWKHNwLCBldmVudHApKSk7CisKKwkvKiBidW1wIHRoZSBuZXh0LWZyZWUgcG9pbnRlciBpbnRvIHRoZSBjaXJjdWxhciBsaXN0ICovCisJc3AtPl9tb3VzZV9ldmVudHAgPSBORVhUKGV2ZW50cCk7CisjaWYgMAkJCQkvKiB0aGlzIHJldHVybiB3b3VsZCBiZSBuZWVkZWQgZm9yIFFOWCdzIG1vZHMgdG8gbGliX2dldGNoLmMgKi8KKwlyZXR1cm4gKFRSVUUpOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIChyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAorbW91c2VfYWN0aXZhdGUoU0NSRUVOICpzcCwgYm9vbCBvbikKK3sKKyAgICBpZiAoIW9uICYmICFzcC0+X21vdXNlX2luaXRpYWxpemVkKQorCXJldHVybjsKKworICAgIGlmICghX25jX21vdXNlX2luaXQoc3ApKQorCXJldHVybjsKKworICAgIGlmIChvbikgeworCisJc3dpdGNoIChzcC0+X21vdXNlX3R5cGUpIHsKKwljYXNlIE1fWFRFUk06CisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKwkgICAga2V5b2soS0VZX01PVVNFLCBvbik7CisjZW5kaWYKKwkgICAgVFBVVFNfVFJBQ0UoInh0ZXJtIG1vdXNlIGluaXRpYWxpemF0aW9uIik7CisJICAgIGVuYWJsZV94dGVybV9tb3VzZShzcCwgMSk7CisJICAgIGJyZWFrOworI2lmIFVTRV9HUE1fU1VQUE9SVAorCWNhc2UgTV9HUE06CisJICAgIGlmIChlbmFibGVfZ3BtX21vdXNlKHNwLCBUUlVFKSkgeworCQlzcC0+X21vdXNlX2ZkID0gKihteV9ncG1fZmQpOworCQlUKCgiR1BNIG1vdXNlX2ZkICVkIiwgc3AtPl9tb3VzZV9mZCkpOworCSAgICB9CisJICAgIGJyZWFrOworI2VuZGlmCisjaWYgVVNFX1NZU01PVVNFCisJY2FzZSBNX1NZU01PVVNFOgorCSAgICBzaWduYWwoU0lHVVNSMiwgaGFuZGxlX3N5c21vdXNlKTsKKwkgICAgc3AtPl9tb3VzZV9hY3RpdmUgPSBUUlVFOworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgTV9OT05FOgorCSAgICByZXR1cm47CisJfQorCS8qIE1ha2UgcnVudGltZSBiaW5kaW5nIHRvIGN1dCBkb3duIG9uIG9iamVjdCBzaXplIG9mIGFwcGxpY2F0aW9ucyB0aGF0CisJICogZG8gbm90IHVzZSB0aGUgbW91c2UgKGUuZy4sICdjbGVhcicpLgorCSAqLworCXNwLT5fbW91c2VfZXZlbnQgPSBfbmNfbW91c2VfZXZlbnQ7CisJc3AtPl9tb3VzZV9pbmxpbmUgPSBfbmNfbW91c2VfaW5saW5lOworCXNwLT5fbW91c2VfcGFyc2UgPSBfbmNfbW91c2VfcGFyc2U7CisJc3AtPl9tb3VzZV9yZXN1bWUgPSBfbmNfbW91c2VfcmVzdW1lOworCXNwLT5fbW91c2Vfd3JhcCA9IF9uY19tb3VzZV93cmFwOworICAgIH0gZWxzZSB7CisKKwlzd2l0Y2ggKHNwLT5fbW91c2VfdHlwZSkgeworCWNhc2UgTV9YVEVSTToKKwkgICAgVFBVVFNfVFJBQ0UoInh0ZXJtIG1vdXNlIGRlaW5pdGlhbGl6YXRpb24iKTsKKwkgICAgZW5hYmxlX3h0ZXJtX21vdXNlKHNwLCAwKTsKKwkgICAgYnJlYWs7CisjaWYgVVNFX0dQTV9TVVBQT1JUCisJY2FzZSBNX0dQTToKKwkgICAgZW5hYmxlX2dwbV9tb3VzZShzcCwgRkFMU0UpOworCSAgICBicmVhazsKKyNlbmRpZgorI2lmIFVTRV9TWVNNT1VTRQorCWNhc2UgTV9TWVNNT1VTRToKKwkgICAgc2lnbmFsKFNJR1VTUjIsIFNJR19JR04pOworCSAgICBzcC0+X21vdXNlX2FjdGl2ZSA9IEZBTFNFOworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgTV9OT05FOgorCSAgICByZXR1cm47CisJfQorICAgIH0KKyAgICBfbmNfZmx1c2goKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGV2aWNlLWluZGVwZW5kZW50IGNvZGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBib29sCitfbmNfbW91c2VfcGFyc2UoU0NSRUVOICpzcCwgaW50IHJ1bmNvdW50KQorLyogcGFyc2UgYSBydW4gb2YgYXRvbWljIG1vdXNlIGV2ZW50cyBpbnRvIGEgZ2VzdHVyZSAqLworeworICAgIE1FVkVOVCAqZXZlbnRwID0gc3AtPl9tb3VzZV9ldmVudHA7CisgICAgTUVWRU5UICplcCwgKnJ1bnAsICpuZXh0LCAqcHJldiA9IFBSRVYoZXZlbnRwKTsKKyAgICBpbnQgbjsKKyAgICBpbnQgYjsKKyAgICBib29sIG1lcmdlOworCisgICAgVFIoTVlfVFJBQ0UsICgiX25jX21vdXNlX3BhcnNlKCVkKSBjYWxsZWQiLCBydW5jb3VudCkpOworCisgICAgLyoKKyAgICAgKiBXaGVuIHdlIGVudGVyIHRoaXMgcm91dGluZSwgdGhlIGV2ZW50IGxpc3QgbmV4dC1mcmVlIHBvaW50ZXIKKyAgICAgKiBwb2ludHMganVzdCBwYXN0IGEgcnVuIG9mIG1vdXNlIGV2ZW50cyB0aGF0IHdlIGtub3cgd2VyZSBzZXBhcmF0ZWQKKyAgICAgKiBpbiB0aW1lIGJ5IGxlc3MgdGhhbiB0aGUgY3JpdGljYWwgY2xpY2sgaW50ZXJ2YWwuIFRoZSBqb2Igb2YgdGhpcworICAgICAqIHJvdXRpbmUgaXMgdG8gY29sbGFwc2UgdGhpcyBydW4gaW50byBhIHNpbmdsZSBoaWdoZXItbGV2ZWwgZXZlbnQKKyAgICAgKiBvciBnZXN0dXJlLgorICAgICAqCisgICAgICogV2UgYWNjb21wbGlzaCB0aGlzIGluIHR3byBwYXNzZXMuICBUaGUgZmlyc3QgcGFzcyBtZXJnZXMgcHJlc3MvcmVsZWFzZQorICAgICAqIHBhaXJzIGludG8gY2xpY2sgZXZlbnRzLiAgVGhlIHNlY29uZCBtZXJnZXMgcnVucyBvZiBjbGljayBldmVudHMgaW50bworICAgICAqIGRvdWJsZSBvciB0cmlwbGUtY2xpY2sgZXZlbnRzLgorICAgICAqCisgICAgICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBydW4gbWF5IG5vdCByZXNvbHZlIHRvIGEgc2luZ2xlIGV2ZW50IChmb3IKKyAgICAgKiBleGFtcGxlLCBpZiB0aGUgdXNlciBxdWFkcnVwbGUtY2xpY2tzKS4gIElmIHNvLCBsZWFkaW5nIGV2ZW50cworICAgICAqIGluIHRoZSBydW4gYXJlIGlnbm9yZWQuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgdGhpcyByb3V0aW5lIGlzIGluZGVwZW5kZW50IG9mIHRoZSBmb3JtYXQgb2YgdGhlIHNwZWNpZmljCisgICAgICogZm9ybWF0IG9mIHRoZSBwb2ludGluZy1kZXZpY2UncyByZXBvcnRzLiAgV2UgY2FuIHVzZSBpdCB0byBwYXJzZQorICAgICAqIGdlc3R1cmVzIG9uIGFueXRoaW5nIHRoYXQgcmVwb3J0cyBwcmVzcy9yZWxlYXNlIGV2ZW50cyBvbiBhIHBlci0KKyAgICAgKiBidXR0b24gYmFzaXMsIGFzIGxvbmcgYXMgdGhlIGRldmljZS1kZXBlbmRlbnQgbW91c2UgY29kZSBwdXRzIHN0dWZmCisgICAgICogb24gdGhlIHF1ZXVlIGluIE1FVkVOVCBmb3JtYXQuCisgICAgICovCisgICAgaWYgKHJ1bmNvdW50ID09IDEpIHsKKwlUUihNWV9UUkFDRSwKKwkgICAoIl9uY19tb3VzZV9wYXJzZTogcmV0dXJuaW5nIHNpbXBsZSBtb3VzZSBldmVudCAlcyBhdCBzbG90ICVsZCIsCisJICAgIF9uY190cmFjZW1vdXNlKHNwLCBwcmV2KSwKKwkgICAgKGxvbmcpIEluZGV4RVYoc3AsIHByZXYpKSk7CisJcmV0dXJuIChwcmV2LT5pZCA+PSBOT1JNQUxfRVZFTlQpCisJICAgID8gKChwcmV2LT5ic3RhdGUgJiBzcC0+X21vdXNlX21hc2spID8gVFJVRSA6IEZBTFNFKQorCSAgICA6IEZBTFNFOworICAgIH0KKworICAgIC8qIGZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBydW4gKi8KKyAgICBydW5wID0gZXZlbnRwOworICAgIGZvciAobiA9IHJ1bmNvdW50OyBuID4gMDsgbi0tKSB7CisJcnVucCA9IFBSRVYocnVucCk7CisgICAgfQorCisjaWZkZWYgVFJBQ0UKKyAgICBpZiAoVVNFX1RSQUNFRihUUkFDRV9JRVZFTlQpKSB7CisJX3RyYWNlX3Nsb3Qoc3AsICJiZWZvcmUgbW91c2UgcHJlc3MvcmVsZWFzZSBtZXJnZToiKTsKKwlfdHJhY2VmKCJfbmNfbW91c2VfcGFyc2U6IHJ1biBzdGFydHMgYXQgJWxkLCBlbmRzIGF0ICVsZCwgY291bnQgJWQiLAorCQlSdW5QYXJhbXMoc3AsIGV2ZW50cCwgcnVucCksCisJCXJ1bmNvdW50KTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgLyogZmlyc3QgcGFzczsgbWVyZ2UgcHJlc3MvcmVsZWFzZSBwYWlycyAqLworICAgIGRvIHsKKwltZXJnZSA9IEZBTFNFOworCWZvciAoZXAgPSBydW5wOyAobmV4dCA9IE5FWFQoZXApKSAhPSBldmVudHA7IGVwID0gbmV4dCkgeworCisjZGVmaW5lIE1BU0tfQ0hBTkdFRCh4KSAoIShlcC0+YnN0YXRlICYgTUFTS19QUkVTUyh4KSkgXAorCQkgICAgICA9PSAhKG5leHQtPmJzdGF0ZSAmIE1BU0tfUkVMRUFTRSh4KSkpCisKKwkgICAgaWYgKGVwLT54ID09IG5leHQtPnggJiYgZXAtPnkgPT0gbmV4dC0+eQorCQkmJiAoZXAtPmJzdGF0ZSAmIEJVVFRPTl9QUkVTU0VEKQorCQkmJiBNQVNLX0NIQU5HRUQoMSkKKwkJJiYgTUFTS19DSEFOR0VEKDIpCisJCSYmIE1BU0tfQ0hBTkdFRCgzKQorCQkmJiBNQVNLX0NIQU5HRUQoNCkKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMgorCQkmJiBNQVNLX0NIQU5HRUQoNSkKKyNlbmRpZgorCQkpIHsKKwkJZm9yIChiID0gMTsgYiA8PSBNQVhfQlVUVE9OUzsgKytiKSB7CisJCSAgICBpZiAoKHNwLT5fbW91c2VfbWFzayAmIE1BU0tfQ0xJQ0soYikpCisJCQkmJiAoZXAtPmJzdGF0ZSAmIE1BU0tfUFJFU1MoYikpKSB7CisJCQllcC0+YnN0YXRlICY9IH5NQVNLX1BSRVNTKGIpOworCQkJZXAtPmJzdGF0ZSB8PSBNQVNLX0NMSUNLKGIpOworCQkJbWVyZ2UgPSBUUlVFOworCQkgICAgfQorCQl9CisJCWlmIChtZXJnZSkKKwkJICAgIG5leHQtPmlkID0gSU5WQUxJRF9FVkVOVDsKKwkgICAgfQorCX0KKyAgICB9IHdoaWxlCisJKG1lcmdlKTsKKworI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfSUVWRU5UKSkgeworCV90cmFjZV9zbG90KHNwLCAiYmVmb3JlIG1vdXNlIGNsaWNrIG1lcmdlOiIpOworCV90cmFjZWYoIl9uY19tb3VzZV9wYXJzZTogcnVuIHN0YXJ0cyBhdCAlbGQsIGVuZHMgYXQgJWxkLCBjb3VudCAlZCIsCisJCVJ1blBhcmFtcyhzcCwgZXZlbnRwLCBydW5wKSwKKwkJcnVuY291bnQpOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICAvKgorICAgICAqIFNlY29uZCBwYXNzOyBtZXJnZSBjbGljayBydW5zLiAgQXQgdGhpcyBwb2ludCwgY2xpY2sgZXZlbnRzIGFyZQorICAgICAqIGVhY2ggZm9sbG93ZWQgYnkgb25lIGludmFsaWQgZXZlbnQuIFdlIG1lcmdlIGNsaWNrIGV2ZW50cworICAgICAqIGZvcndhcmQgaW4gdGhlIHF1ZXVlLgorICAgICAqCisgICAgICogTk9URTogVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhpcyBkZXNpZ24hICBJZiB0aGUgYXBwbGljYXRpb24KKyAgICAgKiBhbGxvd3MgZW5vdWdoIGNsaWNrIGV2ZW50cyB0byBwaWxlIHVwIGluIHRoZSBjaXJjdWxhciBxdWV1ZSBzbworICAgICAqIHRoZXkgd3JhcCBhcm91bmQsIGl0IHdpbGwgY2hlZXJmdWxseSBtZXJnZSB0aGUgbmV3ZXN0IGZvcndhcmQKKyAgICAgKiBpbnRvIHRoZSBvbGRlc3QsIGNyZWF0aW5nIGEgYm9ndXMgZG91YmxlY2xpY2sgYW5kIGNvbmZ1c2luZworICAgICAqIHRoZSBxdWV1ZS10cmF2ZXJzYWwgbG9naWMgcmF0aGVyIGJhZGx5LiAgR2VuZXJhbGx5IHRoaXMgd29uJ3QKKyAgICAgKiBoYXBwZW4sIGJlY2F1c2UgY2FsbGluZyBnZXRtb3VzZSgpIG1hcmtzIG9sZCBldmVudHMgaW52YWxpZCBhbmQKKyAgICAgKiBpbmVsaWdpYmxlIGZvciBtZXJnZXMuICBUaGUgdHJ1ZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gd291bGQKKyAgICAgKiBiZSB0byB0aW1lc3RhbXAgZWFjaCBNRVZFTlQgYW5kIHBlcmZvcm0gdGhlIG9idmlvdXMgc2FuaXR5IGNoZWNrLAorICAgICAqIGJ1dCB0aGUgdGltZXIgZWxlbWVudCB3b3VsZCBoYXZlIHRvIGhhdmUgc3ViLXNlY29uZCByZXNvbHV0aW9uLAorICAgICAqIHdoaWNoIHdvdWxkIGdldCB1cyBpbnRvIHBvcnRhYmlsaXR5IHRyb3VibGUuCisgICAgICovCisgICAgZG8geworCU1FVkVOVCAqZm9sbG93ZXI7CisKKwltZXJnZSA9IEZBTFNFOworCWZvciAoZXAgPSBydW5wOyAobmV4dCA9IE5FWFQoZXApKSAhPSBldmVudHA7IGVwID0gbmV4dCkKKwkgICAgaWYgKGVwLT5pZCAhPSBJTlZBTElEX0VWRU5UKSB7CisJCWlmIChuZXh0LT5pZCAhPSBJTlZBTElEX0VWRU5UKQorCQkgICAgY29udGludWU7CisJCWZvbGxvd2VyID0gTkVYVChuZXh0KTsKKwkJaWYgKGZvbGxvd2VyLT5pZCA9PSBJTlZBTElEX0VWRU5UKQorCQkgICAgY29udGludWU7CisKKwkJLyogbWVyZ2UgY2xpY2sgZXZlbnRzIGZvcndhcmQgKi8KKwkJaWYgKChlcC0+YnN0YXRlICYgQlVUVE9OX0NMSUNLRUQpCisJCSAgICAmJiAoZm9sbG93ZXItPmJzdGF0ZSAmIEJVVFRPTl9DTElDS0VEKSkgeworCQkgICAgZm9yIChiID0gMTsgYiA8PSBNQVhfQlVUVE9OUzsgKytiKSB7CisJCQlpZiAoKHNwLT5fbW91c2VfbWFzayAmIE1BU0tfRE9VQkxFX0NMSUNLKGIpKQorCQkJICAgICYmIChmb2xsb3dlci0+YnN0YXRlICYgTUFTS19DTElDSyhiKSkpIHsKKwkJCSAgICBmb2xsb3dlci0+YnN0YXRlICY9IH5NQVNLX0NMSUNLKGIpOworCQkJICAgIGZvbGxvd2VyLT5ic3RhdGUgfD0gTUFTS19ET1VCTEVfQ0xJQ0soYik7CisJCQkgICAgbWVyZ2UgPSBUUlVFOworCQkJfQorCQkgICAgfQorCQkgICAgaWYgKG1lcmdlKQorCQkJZXAtPmlkID0gSU5WQUxJRF9FVkVOVDsKKwkJfQorCisJCS8qIG1lcmdlIGRvdWJsZS1jbGljayBldmVudHMgZm9yd2FyZCAqLworCQlpZiAoKGVwLT5ic3RhdGUgJiBCVVRUT05fRE9VQkxFX0NMSUNLRUQpCisJCSAgICAmJiAoZm9sbG93ZXItPmJzdGF0ZSAmIEJVVFRPTl9DTElDS0VEKSkgeworCQkgICAgZm9yIChiID0gMTsgYiA8PSBNQVhfQlVUVE9OUzsgKytiKSB7CisJCQlpZiAoKHNwLT5fbW91c2VfbWFzayAmIE1BU0tfVFJJUExFX0NMSUNLKGIpKQorCQkJICAgICYmIChmb2xsb3dlci0+YnN0YXRlICYgTUFTS19DTElDSyhiKSkpIHsKKwkJCSAgICBmb2xsb3dlci0+YnN0YXRlICY9IH5NQVNLX0NMSUNLKGIpOworCQkJICAgIGZvbGxvd2VyLT5ic3RhdGUgfD0gTUFTS19UUklQTEVfQ0xJQ0soYik7CisJCQkgICAgbWVyZ2UgPSBUUlVFOworCQkJfQorCQkgICAgfQorCQkgICAgaWYgKG1lcmdlKQorCQkJZXAtPmlkID0gSU5WQUxJRF9FVkVOVDsKKwkJfQorCSAgICB9CisgICAgfSB3aGlsZQorCShtZXJnZSk7CisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX0lFVkVOVCkpIHsKKwlfdHJhY2Vfc2xvdChzcCwgImJlZm9yZSBtb3VzZSBldmVudCBxdWV1ZSBjb21wYWN0aW9uOiIpOworCV90cmFjZWYoIl9uY19tb3VzZV9wYXJzZTogcnVuIHN0YXJ0cyBhdCAlbGQsIGVuZHMgYXQgJWxkLCBjb3VudCAlZCIsCisJCVJ1blBhcmFtcyhzcCwgZXZlbnRwLCBydW5wKSwKKwkJcnVuY291bnQpOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICAvKgorICAgICAqIE5vdyB0cnkgdG8gdGhyb3cgYXdheSB0cmFpbGluZyBldmVudHMgZmxhZ2dlZCBpbnZhbGlkLCBvciB0aGF0CisgICAgICogZG9uJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgZXZlbnQgbWFzay4KKyAgICAgKi8KKyAgICBmb3IgKDsgcnVuY291bnQ7IHByZXYgPSBQUkVWKGV2ZW50cCksIHJ1bmNvdW50LS0pCisJaWYgKHByZXYtPmlkID09IElOVkFMSURfRVZFTlQgfHwgIShwcmV2LT5ic3RhdGUgJiBzcC0+X21vdXNlX21hc2spKSB7CisJICAgIHNwLT5fbW91c2VfZXZlbnRwID0gZXZlbnRwID0gcHJldjsKKwl9CisjaWZkZWYgVFJBQ0UKKyAgICBpZiAoVVNFX1RSQUNFRihUUkFDRV9JRVZFTlQpKSB7CisJX3RyYWNlX3Nsb3Qoc3AsICJhZnRlciBtb3VzZSBldmVudCBxdWV1ZSBjb21wYWN0aW9uOiIpOworCV90cmFjZWYoIl9uY19tb3VzZV9wYXJzZTogcnVuIHN0YXJ0cyBhdCAlbGQsIGVuZHMgYXQgJWxkLCBjb3VudCAlZCIsCisJCVJ1blBhcmFtcyhzcCwgZXZlbnRwLCBydW5wKSwKKwkJcnVuY291bnQpOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorICAgIGZvciAoZXAgPSBydW5wOyBlcCAhPSBldmVudHA7IGVwID0gTkVYVChlcCkpCisJaWYgKGVwLT5pZCAhPSBJTlZBTElEX0VWRU5UKQorCSAgICBUUihNWV9UUkFDRSwKKwkgICAgICAgKCJfbmNfbW91c2VfcGFyc2U6IHJldHVybmluZyBjb21wb3NpdGUgbW91c2UgZXZlbnQgJXMgYXQgc2xvdCAlbGQiLAorCQlfbmNfdHJhY2Vtb3VzZShzcCwgZXApLAorCQkobG9uZykgSW5kZXhFVihzcCwgZXApKSk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIC8qIGFmdGVyIGFsbCB0aGlzLCBkbyB3ZSBoYXZlIGEgdmFsaWQgZXZlbnQ/ICovCisgICAgcmV0dXJuIChQUkVWKGV2ZW50cCktPmlkICE9IElOVkFMSURfRVZFTlQpOworfQorCitzdGF0aWMgdm9pZAorX25jX21vdXNlX3dyYXAoU0NSRUVOICpzcCkKKy8qIHJlbGVhc2UgbW91c2UgLS0gY2FsbGVkIGJ5IGVuZHdpbigpIGJlZm9yZSBzaGVsbG91dC9leGl0ICovCit7CisgICAgVFIoTVlfVFJBQ0UsICgiX25jX21vdXNlX3dyYXAoKSBjYWxsZWQiKSk7CisKKyAgICBzd2l0Y2ggKHNwLT5fbW91c2VfdHlwZSkgeworICAgIGNhc2UgTV9YVEVSTToKKwlpZiAoc3AtPl9tb3VzZV9tYXNrKQorCSAgICBtb3VzZV9hY3RpdmF0ZShzcCwgRkFMU0UpOworCWJyZWFrOworI2lmIFVTRV9HUE1fU1VQUE9SVAorCS8qIEdQTTogcGFzcyBhbGwgbW91c2UgZXZlbnRzIHRvIG5leHQgY2xpZW50ICovCisgICAgY2FzZSBNX0dQTToKKwlpZiAoc3AtPl9tb3VzZV9tYXNrKQorCSAgICBtb3VzZV9hY3RpdmF0ZShzcCwgRkFMU0UpOworCWJyZWFrOworI2VuZGlmCisjaWYgVVNFX1NZU01PVVNFCisgICAgY2FzZSBNX1NZU01PVVNFOgorCW1vdXNlX2FjdGl2YXRlKHNwLCBGQUxTRSk7CisJYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIE1fTk9ORToKKwlicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfbmNfbW91c2VfcmVzdW1lKFNDUkVFTiAqc3ApCisvKiByZS1jb25uZWN0IHRvIG1vdXNlIC0tIGNhbGxlZCBieSBkb3VwZGF0ZSgpIGFmdGVyIHNoZWxsb3V0ICovCit7CisgICAgVFIoTVlfVFJBQ0UsICgiX25jX21vdXNlX3Jlc3VtZSgpIGNhbGxlZCIpKTsKKworICAgIHN3aXRjaCAoc3AtPl9tb3VzZV90eXBlKSB7CisgICAgY2FzZSBNX1hURVJNOgorCS8qIHh0ZXJtOiByZS1lbmFibGUgcmVwb3J0aW5nICovCisJaWYgKHNwLT5fbW91c2VfbWFzaykKKwkgICAgbW91c2VfYWN0aXZhdGUoc3AsIFRSVUUpOworCWJyZWFrOworCisjaWYgVVNFX0dQTV9TVVBQT1JUCisgICAgY2FzZSBNX0dQTToKKwkvKiBHUE06IHJlY2xhaW0gb3VyIGV2ZW50IHNldCAqLworCWlmIChzcC0+X21vdXNlX21hc2spCisJICAgIG1vdXNlX2FjdGl2YXRlKHNwLCBUUlVFKTsKKwlicmVhazsKKyNlbmRpZgorCisjaWYgVVNFX1NZU01PVVNFCisgICAgY2FzZSBNX1NZU01PVVNFOgorCW1vdXNlX2FjdGl2YXRlKHNwLCBUUlVFKTsKKwlicmVhazsKKyNlbmRpZgorICAgIGNhc2UgTV9OT05FOgorCWJyZWFrOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW91c2UgaW50ZXJmYWNlIGVudHJ5IHBvaW50cyBmb3IgdGhlIEFQSQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorX25jX2dldG1vdXNlKFNDUkVFTiAqc3AsIE1FVkVOVCAqIGFldmVudCkKK3sKKyAgICBUKChUX0NBTExFRCgiZ2V0bW91c2UoJXApIiksIGFldmVudCkpOworCisgICAgaWYgKChhZXZlbnQgIT0gMCkgJiYgKHNwICE9IDApICYmIChzcC0+X21vdXNlX3R5cGUgIT0gTV9OT05FKSkgeworCU1FVkVOVCAqZXZlbnRwID0gc3AtPl9tb3VzZV9ldmVudHA7CisJLyogY29tcHV0ZSB0aGUgY3VycmVudC1ldmVudCBwb2ludGVyICovCisJTUVWRU5UICpwcmV2ID0gUFJFVihldmVudHApOworCisJLyogY29weSB0aGUgZXZlbnQgd2UgZmluZCB0aGVyZSAqLworCSphZXZlbnQgPSAqcHJldjsKKworCVRSKFRSQUNFX0lFVkVOVCwgKCJnZXRtb3VzZTogcmV0dXJuaW5nIGV2ZW50ICVzIGZyb20gc2xvdCAlbGQiLAorCQkJICBfbmNfdHJhY2Vtb3VzZShzcCwgcHJldiksCisJCQkgIChsb25nKSBJbmRleEVWKHNwLCBwcmV2KSkpOworCisJcHJldi0+aWQgPSBJTlZBTElEX0VWRU5UOwkvKiBzbyB0aGUgcXVldWUgc2xvdCBiZWNvbWVzIGZyZWUgKi8KKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShFUlIpOworfQorCisvKiBncmFiIGEgY29weSBvZiB0aGUgY3VycmVudCBtb3VzZSBldmVudCAqLworTkNVUlNFU19FWFBPUlQoaW50KQorZ2V0bW91c2UoTUVWRU5UICogYWV2ZW50KQoreworICAgIHJldHVybiBfbmNfZ2V0bW91c2UoU1AsIGFldmVudCk7Cit9CisKK3N0YXRpYyBpbnQKK19uY191bmdldG1vdXNlKFNDUkVFTiAqc3AsIE1FVkVOVCAqIGFldmVudCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoInVuZ2V0bW91c2UoJXApIiksIGFldmVudCkpOworCisgICAgaWYgKGFldmVudCAhPSAwICYmIHNwICE9IDApIHsKKwlNRVZFTlQgKmV2ZW50cCA9IHNwLT5fbW91c2VfZXZlbnRwOworCisJLyogc3RpY2sgdGhlIGdpdmVuIGV2ZW50IGluIHRoZSBuZXh0LWZyZWUgc2xvdCAqLworCSpldmVudHAgPSAqYWV2ZW50OworCisJLyogYnVtcCB0aGUgbmV4dC1mcmVlIHBvaW50ZXIgaW50byB0aGUgY2lyY3VsYXIgbGlzdCAqLworCXNwLT5fbW91c2VfZXZlbnRwID0gTkVYVChldmVudHApOworCisJLyogcHVzaCBiYWNrIHRoZSBub3RpZmljYXRpb24gZXZlbnQgb24gdGhlIGtleWJvYXJkIHF1ZXVlICovCisJcmVzdWx0ID0gX25jX3VuZ2V0Y2goc3AsIEtFWV9NT1VTRSk7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyogZW5xdWV1ZSBhIHN5bnRoZXNpemVkIG1vdXNlIGV2ZW50IHRvIGJlIHNlZW4gYnkgdGhlIG5leHQgd2dldGNoKCkgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3VuZ2V0bW91c2UoTUVWRU5UICogYWV2ZW50KQoreworICAgIHJldHVybiBfbmNfdW5nZXRtb3VzZShTUCwgYWV2ZW50KTsKK30KKworTkNVUlNFU19FWFBPUlQobW1hc2tfdCkKK21vdXNlbWFzayhtbWFza190IG5ld21hc2ssIG1tYXNrX3QgKiBvbGRtYXNrKQorLyogc2V0IHRoZSBtb3VzZSBldmVudCBtYXNrICovCit7CisgICAgbW1hc2tfdCByZXN1bHQgPSAwOworCisgICAgVCgoVF9DQUxMRUQoIm1vdXNlbWFzayglI2x4LCVwKSIpLCAodW5zaWduZWQgbG9uZykgbmV3bWFzaywgb2xkbWFzaykpOworCisgICAgaWYgKFNQICE9IDApIHsKKwlpZiAob2xkbWFzaykKKwkgICAgKm9sZG1hc2sgPSBTUC0+X21vdXNlX21hc2s7CisKKwlpZiAobmV3bWFzayB8fCBTUC0+X21vdXNlX2luaXRpYWxpemVkKSB7CisJICAgIF9uY19tb3VzZV9pbml0KFNQKTsKKwkgICAgaWYgKFNQLT5fbW91c2VfdHlwZSAhPSBNX05PTkUpIHsKKwkJcmVzdWx0ID0gbmV3bWFzayAmCisJCSAgICAoUkVQT1JUX01PVVNFX1BPU0lUSU9OCisJCSAgICAgfCBCVVRUT05fQUxUCisJCSAgICAgfCBCVVRUT05fQ1RSTAorCQkgICAgIHwgQlVUVE9OX1NISUZUCisJCSAgICAgfCBCVVRUT05fUFJFU1NFRAorCQkgICAgIHwgQlVUVE9OX1JFTEVBU0VECisJCSAgICAgfCBCVVRUT05fQ0xJQ0tFRAorCQkgICAgIHwgQlVUVE9OX0RPVUJMRV9DTElDS0VECisJCSAgICAgfCBCVVRUT05fVFJJUExFX0NMSUNLRUQpOworCisJCW1vdXNlX2FjdGl2YXRlKFNQLCAoYm9vbCkgKHJlc3VsdCAhPSAwKSk7CisKKwkJU1AtPl9tb3VzZV9tYXNrID0gcmVzdWx0OworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm5CaXRzKHJlc3VsdCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGJvb2wpCit3ZW5jbG9zZShjb25zdCBXSU5ET1cgKndpbiwgaW50IHksIGludCB4KQorLyogY2hlY2sgdG8gc2VlIGlmIGdpdmVuIHdpbmRvdyBlbmNsb3NlcyBnaXZlbiBzY3JlZW4gbG9jYXRpb24gKi8KK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgVCgoVF9DQUxMRUQoIndlbmNsb3NlKCVwLCVkLCVkKSIpLCB3aW4sIHksIHgpKTsKKworICAgIGlmICh3aW4gIT0gMCkgeworCXkgLT0gd2luLT5feW9mZnNldDsKKwlyZXN1bHQgPSAoKHdpbi0+X2JlZ3kgPD0geSAmJgorCQkgICB3aW4tPl9iZWd4IDw9IHggJiYKKwkJICAgKHdpbi0+X2JlZ3ggKyB3aW4tPl9tYXh4KSA+PSB4ICYmCisJCSAgICh3aW4tPl9iZWd5ICsgd2luLT5fbWF4eSkgPj0geSkgPyBUUlVFIDogRkFMU0UpOworICAgIH0KKyAgICByZXR1cm5Cb29sKHJlc3VsdCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK21vdXNlaW50ZXJ2YWwoaW50IG1heGNsaWNrKQorLyogc2V0IHRoZSBtYXhpbXVtIG1vdXNlIGludGVydmFsIHdpdGhpbiB3aGljaCB0byByZWNvZ25pemUgYSBjbGljayAqLworeworICAgIGludCBvbGR2YWw7CisKKyAgICBUKChUX0NBTExFRCgibW91c2VpbnRlcnZhbCglZCkiKSwgbWF4Y2xpY2spKTsKKworICAgIGlmIChTUCAhPSAwKSB7CisJb2xkdmFsID0gU1AtPl9tYXhjbGljazsKKwlpZiAobWF4Y2xpY2sgPj0gMCkKKwkgICAgU1AtPl9tYXhjbGljayA9IG1heGNsaWNrOworICAgIH0gZWxzZSB7CisJb2xkdmFsID0gREVGQVVMVF9NQVhDTElDSzsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlKG9sZHZhbCk7Cit9CisKKy8qIFRoaXMgbWF5IGJlIHVzZWQgYnkgb3RoZXIgcm91dGluZXMgdG8gYXNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIG1vdXNlCisgICBzdXBwb3J0ICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfaGFzX21vdXNlKHZvaWQpCit7CisgICAgcmV0dXJuIChTUC0+X21vdXNlX3R5cGUgPT0gTV9OT05FID8gMCA6IDEpOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQord21vdXNlX3RyYWZvKGNvbnN0IFdJTkRPVyAqd2luLCBpbnQgKnBZLCBpbnQgKnBYLCBib29sIHRvX3NjcmVlbikKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgVCgoVF9DQUxMRUQoIndtb3VzZV90cmFmbyglcCwlcCwlcCwlZCkiKSwgd2luLCBwWSwgcFgsIHRvX3NjcmVlbikpOworCisgICAgaWYgKHdpbiAmJiBwWSAmJiBwWCkgeworCWludCB5ID0gKnBZOworCWludCB4ID0gKnBYOworCisJaWYgKHRvX3NjcmVlbikgeworCSAgICB5ICs9IHdpbi0+X2JlZ3kgKyB3aW4tPl95b2Zmc2V0OworCSAgICB4ICs9IHdpbi0+X2JlZ3g7CisJICAgIGlmICh3ZW5jbG9zZSh3aW4sIHksIHgpKQorCQlyZXN1bHQgPSBUUlVFOworCX0gZWxzZSB7CisJICAgIGlmICh3ZW5jbG9zZSh3aW4sIHksIHgpKSB7CisJCXkgLT0gKHdpbi0+X2JlZ3kgKyB3aW4tPl95b2Zmc2V0KTsKKwkJeCAtPSB3aW4tPl9iZWd4OworCQlyZXN1bHQgPSBUUlVFOworCSAgICB9CisJfQorCWlmIChyZXN1bHQpIHsKKwkgICAgKnBYID0geDsKKwkgICAgKnBZID0geTsKKwl9CisgICAgfQorICAgIHJldHVybkJvb2wocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfbW92ZS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9tb3ZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyYzQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfbW92ZS5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9tb3ZlLmMKKyoqCisqKglUaGUgcm91dGluZSB3bW92ZSgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX21vdmUuYyx2IDEuMTIgMjAwNC8xMi8wNCAyMTo1MDowNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3bW92ZShXSU5ET1cgKndpbiwgaW50IHksIGludCB4KQoreworICAgIFQoKFRfQ0FMTEVEKCJ3bW92ZSglcCwlZCwlZCkiKSwgd2luLCB5LCB4KSk7CisKKyAgICBpZiAoTEVHQUxZWCh3aW4sIHksIHgpKSB7CisJd2luLT5fY3VyeCA9IChOQ1VSU0VTX1NJWkVfVCkgeDsKKwl3aW4tPl9jdXJ5ID0gKE5DVVJTRVNfU0laRV9UKSB5OworCisJd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworCXdpbi0+X2ZsYWdzIHw9IF9IQVNNT1ZFRDsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX212d2luLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX212d2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkYWQ0YQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfbXZ3aW4uYwpAQCAtMCwwICsxLDExNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfbXZ3aW4uYworKioKKyoqCVRoZSByb3V0aW5lIG12d2luKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfbXZ3aW4uYyx2IDEuMTQgMjAwNi8wMi8yNSAyMjo1Mzo0NiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCittdndpbihXSU5ET1cgKndpbiwgaW50IGJ5LCBpbnQgYngpCit7CisgICAgVCgoVF9DQUxMRUQoIm12d2luKCVwLCVkLCVkKSIpLCB3aW4sIGJ5LCBieCkpOworCisgICAgaWYgKCF3aW4gfHwgKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICAvKgorICAgICAqIG12d2luKCkgc2hvdWxkIG9ubHkgbW9kaWZ5IHRoZSBpbmRpY2VzLiAgU2VlIHRlc3QvZGVtb19tZW51cy5jIGFuZAorICAgICAqIHRlc3QvbW92ZXdpbmRvdy5jIGZvciBleGFtcGxlcy4KKyAgICAgKi8KKyNpZiAwCisgICAgLyogQ29weWluZyBzdWJ3aW5kb3dzIGlzIGFsbG93ZWQsIGJ1dCBpdCBpcyBleHBlbnNpdmUuLi4gKi8KKyAgICBpZiAod2luLT5fZmxhZ3MgJiBfU1VCV0lOKSB7CisJaW50IGVyciA9IEVSUjsKKwlXSU5ET1cgKnBhcmVudCA9IHdpbi0+X3BhcmVudDsKKwlpZiAocGFyZW50KSB7CQkvKiBOb3cgY29tZXMgdGhlIGNvbXBsaWNhdGVkIGFuZCBjb3N0bHkgcGFydCwgeW91IHNob3VsZCByZWFsbHkKKwkJCQkgKiB0cnkgdG8gYXZvaWQgdG8gbW92ZSBzdWJ3aW5kb3dzLiBCZWNhdXNlIGEgc3Vid2luZG93IHNoYXJlcworCQkJCSAqIHRoZSB0ZXh0IGJ1ZmZlcnMgd2l0aCBpdHMgcGFyZW50LCBvbmUgY2FuJ3QgZG8gYSBzaW1wbGUKKwkJCQkgKiBtZW1tb3ZlIG9mIHRoZSB0ZXh0IGJ1ZmZlcnMuIE9uZSBoYXMgdG8gY3JlYXRlIGEgY29weSwgdGhlbgorCQkJCSAqIHRvIHJlbG9jYXRlIHRoZSBzdWJ3aW5kb3cgYW5kIHRoZW4gdG8gZG8gYSBjb3B5LgorCQkJCSAqLworCSAgICBpZiAoKGJ5IC0gcGFyZW50LT5fYmVneSA9PSB3aW4tPl9wYXJ5KSAmJgorCQkoYnggLSBwYXJlbnQtPl9iZWd4ID09IHdpbi0+X3BhcngpKQorCQllcnIgPSBPSzsJLyogd2UgZG9uJ3QgYWN0dWFsbHkgbW92ZSAqLworCSAgICBlbHNlIHsKKwkJV0lORE9XICpjbG9uZSA9IGR1cHdpbih3aW4pOworCQlpZiAoY2xvbmUpIHsKKwkJICAgIC8qIG5vdyB3ZSBoYXZlIHRoZSBjbG9uZSwgc28gcmVsb2NhdGUgd2luICovCisKKwkJICAgIHdlcmFzZSh3aW4pOwkvKiBFcmFzZSB0aGUgb3JpZ2luYWwgcGxhY2UgICAgICovCisJCSAgICAvKiBmaWxsIHdpdGggcGFyZW50cyBiYWNrZ3JvdW5kICovCisJCSAgICB3Ymtncm5kKHdpbiwgQ0hSRUYocGFyZW50LT5fbmNfYmtnZCkpOworCQkgICAgd3N5bmN1cCh3aW4pOwkvKiBUZWxsIHRoZSBwYXJlbnQocykgICAgICAgICAgICovCisKKwkJICAgIGVyciA9IG12ZGVyd2luKHdpbiwKKwkJCQkgICBieSAtIHBhcmVudC0+X2JlZ3ksCisJCQkJICAgYnggLSBwYXJlbnQtPl9iZWd4KTsKKwkJICAgIGlmIChlcnIgIT0gRVJSKSB7CisJCQllcnIgPSBjb3B5d2luKGNsb25lLCB3aW4sCisJCQkJICAgICAgMCwgMCwgMCwgMCwgd2luLT5fbWF4eSwgd2luLT5fbWF4eCwgMCk7CisJCQlpZiAoRVJSICE9IGVycikKKwkJCSAgICB3c3luY3VwKHdpbik7CisJCSAgICB9CisJCSAgICBpZiAoRVJSID09IGRlbHdpbihjbG9uZSkpCisJCQllcnIgPSBFUlI7CisJCX0KKwkgICAgfQorCX0KKwlyZXR1cm5Db2RlKGVycik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoYnkgKyB3aW4tPl9tYXh5ID4gc2NyZWVuX2xpbmVzIC0gMQorCXx8IGJ4ICsgd2luLT5fbWF4eCA+IHNjcmVlbl9jb2x1bW5zIC0gMQorCXx8IGJ5IDwgMAorCXx8IGJ4IDwgMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICAvKgorICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB3aW5kb3cgaXMgbW92ZWQsIHRvdWNoIHRoZSB3aW5kb3cncyBjb250ZW50cyBzbworICAgICAqIHRoYXQgYSBmb2xsb3dpbmcgY2FsbCB0byAnd3JlZnJlc2goKScgd2lsbCBwYWludCB0aGUgd2luZG93IGF0IHRoZQorICAgICAqIG5ldyBsb2NhdGlvbi4gIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHRoZSBjYWxsZXIgaGFzIHJlZnJlc2hlZCBhbm90aGVyCisgICAgICogd2luZG93IGF0IHRoZSBzYW1lIGxvY2F0aW9uLCB0aGF0IHRoaXMgb25lIHdpbGwgYmUgZGlzcGxheWVkLgorICAgICAqLworICAgIHdpbi0+X2JlZ3kgPSBieTsKKyAgICB3aW4tPl9iZWd4ID0gYng7CisgICAgcmV0dXJuQ29kZSh0b3VjaHdpbih3aW4pKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfbmV3dGVybS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9uZXd0ZXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5ODJiOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfbmV3dGVybS5jCkBAIC0wLDAgKzEsMjM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfbmV3dGVybS5jCisqKgorKioJVGhlIG5ld3Rlcm0oKSBmdW5jdGlvbi4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2lmIFNWUjRfVEVSTUlPICYmICFkZWZpbmVkKF9QT1NJWF9TT1VSQ0UpCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgorCisjaW5jbHVkZSA8dGVybS5oPgkJLyogY2xlYXJfc2NyZWVuLCBjdXAgJiBmcmllbmRzLCBjdXJfdGVybSAqLworI2luY2x1ZGUgPHRpYy5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX25ld3Rlcm0uYyx2IDEuNzMgMjAwOC8wOC8xNiAyMToyMDo0OCBXZXJuZXIuRmluayBFeHAgJCIpCisKKyNpZm5kZWYgT05MQ1IJCQkvKiBBbGxvd3MgY29tcGlsYXRpb24gdW5kZXIgdGhlIFFOWCA0LjIgT1MgKi8KKyNkZWZpbmUgT05MQ1IgMAorI2VuZGlmCisKKy8qCisgKiBTVnI0L1hTSSBDdXJzZXMgc3BlY2lmeSB0aGF0IGhhcmR3YXJlIGVjaG8gaXMgdHVybmVkIG9mZiBpbiBpbml0c2NyLCBhbmQgbm90CisgKiByZXN0b3JlZCBkdXJpbmcgdGhlIGN1cnNlcyBzZXNzaW9uLiAgVGhlIGxpYnJhcnkgc2ltdWxhdGVzIGVjaG8gaW4gc29mdHdhcmUuCisgKiAoVGhlIGJlaGF2aW9yIGlzIHVuc3BlY2lmaWVkIGlmIHRoZSBhcHBsaWNhdGlvbiBlbmFibGVzIGhhcmR3YXJlIGVjaG8pLgorICoKKyAqIFRoZSBuZXd0ZXJtIGZ1bmN0aW9uIGFsc28gaW5pdGlhbGl6ZXMgdGVybWluYWwgc2V0dGluZ3MsIGFuZCBzaW5jZSBpbml0c2NyCisgKiBpcyBzdXBwb3NlZCB0byBiZWhhdmUgYXMgaWYgaXQgY2FsbHMgbmV3dGVybSwgd2UgZG8gaXQgaGVyZS4KKyAqLworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorX25jX2luaXRzY3Iodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgLyogZm9yIGV4dGVuZGVkIFhQRzQgY29uZm9ybWFuY2UgcmVxdWlyZXMgY2JyZWFrKCkgYXQgdGhpcyBwb2ludCAqLworICAgIC8qIChTVnI0IGN1cnNlcyBkb2VzIHRoaXMgYW55d2F5KSAqLworICAgIGlmIChjYnJlYWsoKSA9PSBPSykgeworCVRUWSBidWY7CisKKwlidWYgPSBjdXJfdGVybS0+TnR0eWI7CisjaWZkZWYgVEVSTUlPUworCWJ1Zi5jX2xmbGFnICY9IH4oRUNITyB8IEVDSE9OTCk7CisJYnVmLmNfaWZsYWcgJj0gfihJQ1JOTCB8IElOTENSIHwgSUdOQ1IpOworCWJ1Zi5jX29mbGFnICY9IH4oT05MQ1IpOworI2VsaWYgSEFWRV9TR1RUWV9ICisJYnVmLnNnX2ZsYWdzICY9IH4oRUNITyB8IENSTU9EKTsKKyNlbHNlCisJbWVtc2V0KCZidWYsIDAsIHNpemVvZihidWYpKTsKKyNlbmRpZgorCWlmICgocmVzdWx0ID0gX25jX3NldF90dHlfbW9kZSgmYnVmKSkgPT0gT0spCisJICAgIGN1cl90ZXJtLT5OdHR5YiA9IGJ1ZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGZpbHRlcigpIGhhcyB0byBiZSBjYWxsZWQgYmVmb3JlIGVpdGhlciBpbml0c2NyKCkgb3IgbmV3dGVybSgpLCBzbyB0aGVyZSBpcworICogYXBwYXJlbnRseSBubyB3YXkgdG8gbWFrZSB0aGlzIGZsYWcgYXBwbHkgdG8gc29tZSB0ZXJtaW5hbHMgYW5kIG5vdCBvdGhlcnMsCisgKiBhc2lkZSBmcm9tIHBvc3NpYmx5IGRlbGF5aW5nIGEgZmlsdGVyKCkgY2FsbCB1bnRpbCBzb21lIHRlcm1pbmFscyBoYXZlIGJlZW4KKyAqIGluaXRpYWxpemVkLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorZmlsdGVyKHZvaWQpCit7CisgICAgU1RBUlRfVFJBQ0UoKTsKKyAgICBUKChUX0NBTExFRCgiZmlsdGVyIikpKTsKKyAgICBfbmNfcHJlc2NyZWVuLmZpbHRlcl9tb2RlID0gVFJVRTsKKyAgICByZXR1cm5Wb2lkOworfQorCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKy8qCisgKiBBbiBleHRlbnNpb24sIGFsbG93aW5nIHRoZSBhcHBsaWNhdGlvbiB0byBvcGVuIGEgbmV3IHNjcmVlbiB3aXRob3V0CisgKiByZXF1aXJpbmcgaXQgdG8gYWxzbyBiZSBmaWx0ZXJlZC4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK25vZmlsdGVyKHZvaWQpCit7CisgICAgU1RBUlRfVFJBQ0UoKTsKKyAgICBUKChUX0NBTExFRCgibm9maWx0ZXIiKSkpOworICAgIF9uY19wcmVzY3JlZW4uZmlsdGVyX21vZGUgPSBGQUxTRTsKKyAgICByZXR1cm5Wb2lkOworfQorI2VuZGlmCisKK05DVVJTRVNfRVhQT1JUKFNDUkVFTiAqKQorbmV3dGVybShOQ1VSU0VTX0NPTlNUIGNoYXIgKm5hbWUsIEZJTEUgKm9mcCwgRklMRSAqaWZwKQoreworICAgIGludCB2YWx1ZTsKKyAgICBpbnQgZXJycmV0OworICAgIFNDUkVFTiAqY3VycmVudDsKKyAgICBTQ1JFRU4gKnJlc3VsdCA9IDA7CisgICAgVEVSTUlOQUwgKml0c190ZXJtOworCisgICAgU1RBUlRfVFJBQ0UoKTsKKyAgICBUKChUX0NBTExFRCgibmV3dGVybShcIiVzXCIsJXAsJXApIiksIG5hbWUsIG9mcCwgaWZwKSk7CisKKyAgICBfbmNfaW5pdF9wdGhyZWFkcygpOworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgY3VycmVudCA9IFNQOworICAgIGl0c190ZXJtID0gKFNQID8gU1AtPl90ZXJtIDogMCk7CisKKyAgICAvKiB0aGlzIGxvYWRzIHRoZSBjYXBhYmlsaXR5IGVudHJ5LCB0aGVuIHNldHMgTElORVMgYW5kIENPTFMgKi8KKyAgICBpZiAoc2V0dXB0ZXJtKG5hbWUsIGZpbGVubyhvZnApLCAmZXJycmV0KSAhPSBFUlIpIHsKKwlpbnQgc2xrX2Zvcm1hdCA9IF9uY19nbG9iYWxzLnNsa19mb3JtYXQ7CisKKwkvKgorCSAqIFRoaXMgYWN0dWFsbHkgYWxsb2NhdGVzIHRoZSBzY3JlZW4gc3RydWN0dXJlLCBhbmQgc2F2ZXMgdGhlIG9yaWdpbmFsCisJICogdGVybWluYWwgc2V0dGluZ3MuCisJICovCisJX25jX3NldF9zY3JlZW4oMCk7CisKKwkvKiBhbGxvdyB1c2VyIHRvIHNldCBtYXhpbXVtIGVzY2FwZSBkZWxheSBmcm9tIHRoZSBlbnZpcm9ubWVudCAqLworCWlmICgodmFsdWUgPSBfbmNfZ2V0ZW52X251bSgiRVNDREVMQVkiKSkgPj0gMCkgeworCSAgICBzZXRfZXNjZGVsYXkodmFsdWUpOworCX0KKworCWlmIChfbmNfc2V0dXBzY3JlZW4oTElORVMsCisJCQkgICAgQ09MUywKKwkJCSAgICBvZnAsCisJCQkgICAgX25jX3ByZXNjcmVlbi5maWx0ZXJfbW9kZSwKKwkJCSAgICBzbGtfZm9ybWF0KSA9PSBFUlIpIHsKKwkgICAgX25jX3NldF9zY3JlZW4oY3VycmVudCk7CisJICAgIHJlc3VsdCA9IDA7CisJfSBlbHNlIHsKKwkgICAgYXNzZXJ0KFNQICE9IDApOworCSAgICAvKgorCSAgICAgKiBJbiBzZXR1cHRlcm0oKSB3ZSBkaWQgYSBzZXRfY3VydGVybSgpLCBidXQgaXQgd2FzIGJlZm9yZSB3ZSBzZXQKKwkgICAgICogU1AuICBTbyB0aGUgImN1cnJlbnQiIHNjcmVlbidzIHRlcm1pbmFsIHBvaW50ZXIgd2FzIG92ZXJ3cml0dGVuCisJICAgICAqIHdpdGggYSBkaWZmZXJlbnQgdGVybWluYWwuICBMYXRlciwgaW4gX25jX3NldHVwc2NyZWVuKCksIHdlIHNldAorCSAgICAgKiBTUCBhbmQgdGhlIHRlcm1pbmFsIHBvaW50ZXIgaW4gdGhlIG5ldyBzY3JlZW4uCisJICAgICAqCisJICAgICAqIFJlc3RvcmUgdGhlIHRlcm1pbmFsLXBvaW50ZXIgZm9yIHRoZSBwcmUtZXhpc3Rpbmcgc2NyZWVuLCBpZgorCSAgICAgKiBhbnkuCisJICAgICAqLworCSAgICBpZiAoY3VycmVudCkKKwkJY3VycmVudC0+X3Rlcm0gPSBpdHNfdGVybTsKKworCSAgICAvKiBpZiB0aGUgdGVybWluYWwgdHlwZSBoYXMgcmVhbCBzb2Z0IGxhYmVscywgc2V0IHRob3NlIHVwICovCisJICAgIGlmIChzbGtfZm9ybWF0ICYmIG51bV9sYWJlbHMgPiAwICYmIFNMS19TVERGTVQoc2xrX2Zvcm1hdCkpCisJCV9uY19zbGtfaW5pdGlhbGl6ZShzdGRzY3IsIENPTFMpOworCisJICAgIFNQLT5faWZkID0gZmlsZW5vKGlmcCk7CisJICAgIHR5cGVhaGVhZChmaWxlbm8oaWZwKSk7CisjaWZkZWYgVEVSTUlPUworCSAgICBTUC0+X3VzZV9tZXRhID0gKChjdXJfdGVybS0+T3R0eWIuY19jZmxhZyAmIENTSVpFKSA9PSBDUzggJiYKKwkJCSAgICAgIShjdXJfdGVybS0+T3R0eWIuY19pZmxhZyAmIElTVFJJUCkpOworI2Vsc2UKKwkgICAgU1AtPl91c2VfbWV0YSA9IEZBTFNFOworI2VuZGlmCisJICAgIFNQLT5fZW5kd2luID0gRkFMU0U7CisKKwkgICAgLyoKKwkgICAgICogQ2hlY2sgd2hldGhlciB3ZSBjYW4gb3B0aW1pemUgc2Nyb2xsaW5nIHVuZGVyIGR1bWIgdGVybWluYWxzIGluCisJICAgICAqIGNhc2Ugd2UgZG8gbm90IGhhdmUgYW55IG9mIHRoZXNlIGNhcGFiaWxpdGllcywgc2Nyb2xsaW5nCisJICAgICAqIG9wdGltaXphdGlvbiB3aWxsIGJlIHVzZWxlc3MuCisJICAgICAqLworCSAgICBTUC0+X3Njcm9sbGluZyA9ICgoc2Nyb2xsX2ZvcndhcmQgJiYgc2Nyb2xsX3JldmVyc2UpIHx8CisJCQkgICAgICAoKHBhcm1fcmluZGV4IHx8CisJCQkJcGFybV9pbnNlcnRfbGluZSB8fAorCQkJCWluc2VydF9saW5lKSAmJgorCQkJICAgICAgIChwYXJtX2luZGV4IHx8CisJCQkJcGFybV9kZWxldGVfbGluZSB8fAorCQkJCWRlbGV0ZV9saW5lKSkpOworCisJICAgIGJhdWRyYXRlKCk7CQkvKiBzZXRzIGEgZmllbGQgaW4gdGhlIFNQIHN0cnVjdHVyZSAqLworCisJICAgIFNQLT5fa2V5dHJ5ID0gMDsKKworCSAgICAvKgorCSAgICAgKiBDaGVjayBmb3IgbWlzbWF0Y2hlZCBncmFwaGljLXJlbmRpdGlvbiBjYXBhYmlsaXRpZXMuICBNb3N0IFNWcjQKKwkgICAgICogdGVybWluZm8gdHJlZXMgY29udGFpbiBlbnRyaWVzIHRoYXQgaGF2ZSBybXVsIG9yIHJtc28gZXF1YXRlZCB0bworCSAgICAgKiBzZ3IwIChTb2xhcmlzIGN1cnNlcyBjb3BlcyB3aXRoIHRob3NlIGVudHJpZXMpLiAgV2UgZG8gdGhpcyBvbmx5CisJICAgICAqIGZvciBjdXJzZXMsIHNpbmNlIG1hbnkgdGVybWNhcCBhcHBsaWNhdGlvbnMgYXNzdW1lIHRoYXQKKwkgICAgICogc21zby9ybXNvIGFuZCBzbXVsL3JtdWwgYXJlIHBhaXJlZCwgYW5kIHdpbGwgbm90IGZ1bmN0aW9uCisJICAgICAqIHByb3Blcmx5IGlmIHdlIHJlbW92ZSBybXNvIG9yIHJtdWwuICBDdXJzZXMgYXBwbGljYXRpb25zCisJICAgICAqIHNob3VsZG4ndCBiZSBsb29raW5nIGF0IHRoaXMgZGV0YWlsLgorCSAgICAgKi8KKyNkZWZpbmUgU0dSMF9URVNUKG1vZGUpIChtb2RlICE9IDApICYmIChleGl0X2F0dHJpYnV0ZV9tb2RlID09IDAgfHwgc3RyY21wKG1vZGUsIGV4aXRfYXR0cmlidXRlX21vZGUpKQorCSAgICBTUC0+X3VzZV9ybXNvID0gU0dSMF9URVNUKGV4aXRfc3RhbmRvdXRfbW9kZSk7CisJICAgIFNQLT5fdXNlX3JtdWwgPSBTR1IwX1RFU1QoZXhpdF91bmRlcmxpbmVfbW9kZSk7CisKKwkgICAgLyogY29tcHV0ZSBtb3ZlbWVudCBjb3N0cyBzbyB3ZSBjYW4gZG8gYmV0dGVyIG1vdmUgb3B0aW1pemF0aW9uICovCisJICAgIF9uY19tdmN1cl9pbml0KCk7CisKKwkgICAgLyogaW5pdGlhbGl6ZSB0ZXJtaW5hbCB0byBhIHNhbmUgc3RhdGUgKi8KKwkgICAgX25jX3NjcmVlbl9pbml0KCk7CisKKwkgICAgLyogSW5pdGlhbGl6ZSB0aGUgdGVybWluYWwgbGluZSBzZXR0aW5ncy4gKi8KKwkgICAgX25jX2luaXRzY3IoKTsKKworCSAgICBfbmNfc2lnbmFsX2hhbmRsZXIoVFJVRSk7CisKKwkgICAgcmVzdWx0ID0gU1A7CisJfQorICAgIH0KKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIHJldHVyblNQKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX25ld3dpbi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9uZXd3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdlODNhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9uZXd3aW4uYwpAQCAtMCwwICsxLDMzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX25ld3dpbi5jCisqKgorKioJVGhlIHJvdXRpbmVzIG5ld3dpbigpLCBzdWJ3aW4oKSBhbmQgdGhlaXIgZGVwZW5kZW50CisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfbmV3d2luLmMsdiAxLjUyIDIwMDgvMDYvMDcgMTM6NTg6MDkgdG9tIEV4cCAkIikKKworI2RlZmluZSB3aW5kb3dfaXMobmFtZSkgKChzcCktPl8jI25hbWUgPT0gd2luKQorCisjaWYgVVNFX1JFRU5UUkFOVAorI2RlZmluZSByZW1vdmVfd2luZG93KG5hbWUpIFwKKwkJc3AtPl8jI25hbWUgPSAwCisjZWxzZQorI2RlZmluZSByZW1vdmVfd2luZG93KG5hbWUpIFwKKwkJc3AtPl8jI25hbWUgPSAwOyBcCisJCWlmICh3aW4gPT0gbmFtZSkgXAorCQkgICAgbmFtZSA9IDAKKyNlbmRpZgorCitzdGF0aWMgdm9pZAorcmVtb3ZlX3dpbmRvd19mcm9tX3NjcmVlbihXSU5ET1cgKndpbikKK3sKKyAgICBTQ1JFRU4gKnNwOworCisgICAgZm9yIChlYWNoX3NjcmVlbihzcCkpIHsKKwlpZiAod2luZG93X2lzKGN1cnNjcikpIHsKKwkgICAgcmVtb3ZlX3dpbmRvdyhjdXJzY3IpOworCSAgICBicmVhazsKKwl9IGVsc2UgaWYgKHdpbmRvd19pcyhzdGRzY3IpKSB7CisJICAgIHJlbW92ZV93aW5kb3coc3Rkc2NyKTsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmICh3aW5kb3dfaXMobmV3c2NyKSkgeworCSAgICByZW1vdmVfd2luZG93KG5ld3Njcik7CisJICAgIGJyZWFrOworCX0KKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19mcmVld2luKFdJTkRPVyAqd2luKQoreworICAgIFdJTkRPV0xJU1QgKnAsICpxOworICAgIGludCBpOworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiX25jX2ZyZWV3aW4oJXApIiksIHdpbikpOworCisgICAgaWYgKHdpbiAhPSAwKSB7CisJaWYgKF9uY190cnlfZ2xvYmFsKGN1cnNlcykgPT0gMCkgeworCSAgICBxID0gMDsKKwkgICAgZm9yIChlYWNoX3dpbmRvdyhwKSkgeworCQlpZiAoJihwLT53aW4pID09IHdpbikgeworCQkgICAgcmVtb3ZlX3dpbmRvd19mcm9tX3NjcmVlbih3aW4pOworCQkgICAgaWYgKHEgPT0gMCkKKwkJCV9uY193aW5kb3dzID0gcC0+bmV4dDsKKwkJICAgIGVsc2UKKwkJCXEtPm5leHQgPSBwLT5uZXh0OworCisJCSAgICBpZiAoISh3aW4tPl9mbGFncyAmIF9TVUJXSU4pKSB7CisJCQlmb3IgKGkgPSAwOyBpIDw9IHdpbi0+X21heHk7IGkrKykKKwkJCSAgICBGcmVlSWZOZWVkZWQod2luLT5fbGluZVtpXS50ZXh0KTsKKwkJICAgIH0KKwkJICAgIGZyZWUod2luLT5fbGluZSk7CisJCSAgICBmcmVlKHApOworCisJCSAgICByZXN1bHQgPSBPSzsKKwkJICAgIFQoKCIuLi5kZWxldGVkIHdpbj0lcCIsIHdpbikpOworCQkgICAgYnJlYWs7CisJCX0KKwkJcSA9IHA7CisJICAgIH0KKwkgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCituZXd3aW4oaW50IG51bV9saW5lcywgaW50IG51bV9jb2x1bW5zLCBpbnQgYmVneSwgaW50IGJlZ3gpCit7CisgICAgV0lORE9XICp3aW47CisgICAgTkNVUlNFU19DSF9UICpwdHI7CisgICAgaW50IGk7CisKKyAgICBUKChUX0NBTExFRCgibmV3d2luKCVkLCVkLCVkLCVkKSIpLCBudW1fbGluZXMsIG51bV9jb2x1bW5zLCBiZWd5LCBiZWd4KSk7CisKKyAgICBpZiAoYmVneSA8IDAgfHwgYmVneCA8IDAgfHwgbnVtX2xpbmVzIDwgMCB8fCBudW1fY29sdW1ucyA8IDApCisJcmV0dXJuV2luKDApOworCisgICAgaWYgKG51bV9saW5lcyA9PSAwKQorCW51bV9saW5lcyA9IFNQLT5fbGluZXNfYXZhaWwgLSBiZWd5OworICAgIGlmIChudW1fY29sdW1ucyA9PSAwKQorCW51bV9jb2x1bW5zID0gc2NyZWVuX2NvbHVtbnMgLSBiZWd4OworCisgICAgaWYgKCh3aW4gPSBfbmNfbWFrZW5ldyhudW1fbGluZXMsIG51bV9jb2x1bW5zLCBiZWd5LCBiZWd4LCAwKSkgPT0gMCkKKwlyZXR1cm5XaW4oMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2xpbmVzOyBpKyspIHsKKwl3aW4tPl9saW5lW2ldLnRleHQgPSB0eXBlQ2FsbG9jKE5DVVJTRVNfQ0hfVCwgKHVuc2lnbmVkKSBudW1fY29sdW1ucyk7CisJaWYgKHdpbi0+X2xpbmVbaV0udGV4dCA9PSAwKSB7CisJICAgICh2b2lkKSBfbmNfZnJlZXdpbih3aW4pOworCSAgICByZXR1cm5XaW4oMCk7CisJfQorCWZvciAocHRyID0gd2luLT5fbGluZVtpXS50ZXh0OworCSAgICAgcHRyIDwgd2luLT5fbGluZVtpXS50ZXh0ICsgbnVtX2NvbHVtbnM7CisJICAgICBwdHIrKykKKwkgICAgU2V0Q2hhcigqcHRyLCBCTEFOS19URVhULCBCTEFOS19BVFRSKTsKKyAgICB9CisKKyAgICByZXR1cm5XaW4od2luKTsKK30KKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitkZXJ3aW4oV0lORE9XICpvcmlnLCBpbnQgbnVtX2xpbmVzLCBpbnQgbnVtX2NvbHVtbnMsIGludCBiZWd5LCBpbnQgYmVneCkKK3sKKyAgICBXSU5ET1cgKndpbjsKKyAgICBpbnQgaTsKKyAgICBpbnQgZmxhZ3MgPSBfU1VCV0lOOworCisgICAgVCgoVF9DQUxMRUQoImRlcndpbiglcCwlZCwlZCwlZCwlZCkiKSwgb3JpZywgbnVtX2xpbmVzLCBudW1fY29sdW1ucywKKyAgICAgICBiZWd5LCBiZWd4KSk7CisKKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSB3aW5kb3cgZml0cyBpbnNpZGUgdGhlIG9yaWdpbmFsIG9uZQorICAgICAqLworICAgIGlmIChiZWd5IDwgMCB8fCBiZWd4IDwgMCB8fCBvcmlnID09IDAgfHwgbnVtX2xpbmVzIDwgMCB8fCBudW1fY29sdW1ucyA8IDApCisJcmV0dXJuV2luKDApOworICAgIGlmIChiZWd5ICsgbnVtX2xpbmVzID4gb3JpZy0+X21heHkgKyAxCisJfHwgYmVneCArIG51bV9jb2x1bW5zID4gb3JpZy0+X21heHggKyAxKQorCXJldHVybldpbigwKTsKKworICAgIGlmIChudW1fbGluZXMgPT0gMCkKKwludW1fbGluZXMgPSBvcmlnLT5fbWF4eSArIDEgLSBiZWd5OworCisgICAgaWYgKG51bV9jb2x1bW5zID09IDApCisJbnVtX2NvbHVtbnMgPSBvcmlnLT5fbWF4eCArIDEgLSBiZWd4OworCisgICAgaWYgKG9yaWctPl9mbGFncyAmIF9JU1BBRCkKKwlmbGFncyB8PSBfSVNQQUQ7CisKKyAgICBpZiAoKHdpbiA9IF9uY19tYWtlbmV3KG51bV9saW5lcywgbnVtX2NvbHVtbnMsIG9yaWctPl9iZWd5ICsgYmVneSwKKwkJCSAgIG9yaWctPl9iZWd4ICsgYmVneCwgZmxhZ3MpKSA9PSAwKQorCXJldHVybldpbigwKTsKKworICAgIHdpbi0+X3BhcnkgPSBiZWd5OworICAgIHdpbi0+X3BhcnggPSBiZWd4OworICAgIFdJTkRPV19BVFRSUyh3aW4pID0gV0lORE9XX0FUVFJTKG9yaWcpOworICAgIHdpbi0+X25jX2JrZ2QgPSBvcmlnLT5fbmNfYmtnZDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbGluZXM7IGkrKykKKwl3aW4tPl9saW5lW2ldLnRleHQgPSAmb3JpZy0+X2xpbmVbYmVneSsrXS50ZXh0W2JlZ3hdOworCisgICAgd2luLT5fcGFyZW50ID0gb3JpZzsKKworICAgIHJldHVybldpbih3aW4pOworfQorCitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK3N1YndpbihXSU5ET1cgKncsIGludCBsLCBpbnQgYywgaW50IHksIGludCB4KQoreworICAgIFQoKFRfQ0FMTEVEKCJzdWJ3aW4oJXAsICVkLCAlZCwgJWQsICVkKSIpLCB3LCBsLCBjLCB5LCB4KSk7CisgICAgVCgoInBhcmVudCBoYXMgYmVneSA9ICVsZCwgYmVneCA9ICVsZCIsIChsb25nKSB3LT5fYmVneSwgKGxvbmcpIHctPl9iZWd4KSk7CisKKyAgICByZXR1cm5XaW4oZGVyd2luKHcsIGwsIGMsIHkgLSB3LT5fYmVneSwgeCAtIHctPl9iZWd4KSk7Cit9CisKK3N0YXRpYyBib29sCitkaW1lbnNpb25fbGltaXQoaW50IHZhbHVlKQoreworICAgIE5DVVJTRVNfU0laRV9UIHRlc3QgPSB2YWx1ZTsKKyAgICByZXR1cm4gKHRlc3QgPT0gdmFsdWUgJiYgdmFsdWUgPiAwKTsKK30KKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitfbmNfbWFrZW5ldyhpbnQgbnVtX2xpbmVzLCBpbnQgbnVtX2NvbHVtbnMsIGludCBiZWd5LCBpbnQgYmVneCwgaW50IGZsYWdzKQoreworICAgIGludCBpOworICAgIFdJTkRPV0xJU1QgKndwOworICAgIFdJTkRPVyAqd2luOworICAgIGJvb2wgaXNfcGFkID0gKGZsYWdzICYgX0lTUEFEKTsKKworICAgIFQoKFRfQ0FMTEVEKCJfbmNfbWFrZW5ldyglZCwlZCwlZCwlZCkiKSwgbnVtX2xpbmVzLCBudW1fY29sdW1ucywgYmVneSwgYmVneCkpOworCisgICAgaWYgKFNQID09IDApCisJcmV0dXJuV2luKDApOworCisgICAgaWYgKCFkaW1lbnNpb25fbGltaXQobnVtX2xpbmVzKSB8fCAhZGltZW5zaW9uX2xpbWl0KG51bV9jb2x1bW5zKSkKKwlyZXR1cm5XaW4oMCk7CisKKyAgICBpZiAoKHdwID0gdHlwZUNhbGxvYyhXSU5ET1dMSVNULCAxKSkgPT0gMCkKKwlyZXR1cm5XaW4oMCk7CisKKyAgICB3aW4gPSAmKHdwLT53aW4pOworCisgICAgaWYgKCh3aW4tPl9saW5lID0gdHlwZUNhbGxvYyhzdHJ1Y3QgbGRhdCwgKCh1bnNpZ25lZCkgbnVtX2xpbmVzKSkpID09IDApIHsKKwlmcmVlKHdpbik7CisJcmV0dXJuV2luKDApOworICAgIH0KKworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgd2luLT5fY3VyeCA9IDA7CisgICAgd2luLT5fY3VyeSA9IDA7CisgICAgd2luLT5fbWF4eSA9IG51bV9saW5lcyAtIDE7CisgICAgd2luLT5fbWF4eCA9IG51bV9jb2x1bW5zIC0gMTsKKyAgICB3aW4tPl9iZWd5ID0gYmVneTsKKyAgICB3aW4tPl9iZWd4ID0gYmVneDsKKyAgICB3aW4tPl95b2Zmc2V0ID0gU1AtPl90b3BzdG9sZW47CisKKyAgICB3aW4tPl9mbGFncyA9IGZsYWdzOworICAgIFdJTkRPV19BVFRSUyh3aW4pID0gQV9OT1JNQUw7CisgICAgU2V0Q2hhcih3aW4tPl9uY19ia2dkLCBCTEFOS19URVhULCBCTEFOS19BVFRSKTsKKworICAgIHdpbi0+X2NsZWFyID0gaXNfcGFkID8gRkFMU0UgOiAobnVtX2xpbmVzID09IHNjcmVlbl9saW5lcworCQkJCSAgICAmJiBudW1fY29sdW1ucyA9PSBzY3JlZW5fY29sdW1ucyk7CisgICAgd2luLT5faWRsb2sgPSBGQUxTRTsKKyAgICB3aW4tPl9pZGNvayA9IFRSVUU7CisgICAgd2luLT5fc2Nyb2xsID0gRkFMU0U7CisgICAgd2luLT5fbGVhdmVvayA9IEZBTFNFOworICAgIHdpbi0+X3VzZV9rZXlwYWQgPSBGQUxTRTsKKyAgICB3aW4tPl9kZWxheSA9IC0xOworICAgIHdpbi0+X2ltbWVkID0gRkFMU0U7CisgICAgd2luLT5fc3luYyA9IDA7CisgICAgd2luLT5fcGFyeCA9IC0xOworICAgIHdpbi0+X3BhcnkgPSAtMTsKKyAgICB3aW4tPl9wYXJlbnQgPSAwOworCisgICAgd2luLT5fcmVndG9wID0gMDsKKyAgICB3aW4tPl9yZWdib3R0b20gPSBudW1fbGluZXMgLSAxOworCisgICAgd2luLT5fcGFkLl9wYWRfeSA9IC0xOworICAgIHdpbi0+X3BhZC5fcGFkX3ggPSAtMTsKKyAgICB3aW4tPl9wYWQuX3BhZF90b3AgPSAtMTsKKyAgICB3aW4tPl9wYWQuX3BhZF9ib3R0b20gPSAtMTsKKyAgICB3aW4tPl9wYWQuX3BhZF9sZWZ0ID0gLTE7CisgICAgd2luLT5fcGFkLl9wYWRfcmlnaHQgPSAtMTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbGluZXM7IGkrKykgeworCS8qCisJICogVGhpcyB1c2VkIHRvIGRvCisJICoKKwkgKiB3aW4tPl9saW5lW2ldLmZpcnN0Y2hhciA9IHdpbi0+X2xpbmVbaV0ubGFzdGNoYXIgPSBfTk9DSEFOR0U7CisJICoKKwkgKiB3aGljaCBtYXJrcyB0aGUgd2hvbGUgd2luZG93IHVuY2hhbmdlZC4gIFRoYXQncyBob3cKKwkgKiBTVnIxIGN1cnNlcyBkaWQgaXQsIGJ1dCBTVnI0IGN1cnNlcyBtYXJrcyB0aGUgd2hvbGUgbmV3CisJICogd2luZG93IGNoYW5nZWQuCisJICoKKwkgKiBXaXRoIHRoZSBvbGQgU1ZyMS1saWtlIGNvZGUsIHNheSB5b3UgaGF2ZSBzdGRzY3IgZnVsbCBvZgorCSAqIGNoYXJhY3RlcnMsIHRoZW4gY3JlYXRlIGEgbmV3IHdpbmRvdyB3aXRoIG5ld3dpbigpLAorCSAqIHRoZW4gZG8gYSBwcmludHcod2luLCAiZm9vICAgICAgICAiKTssIHRoZSB0cmFpbGluZyBzcGFjZXMgYXJlCisJICogY29tcGxldGVseSBpZ25vcmVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVmcmVzaGVzLiAgU28sIHlvdQorCSAqIGdldCAiZm9vanVua2p1bmsiIG9uIHRoZSBzY3JlZW4gaW5zdGVhZCBvZiAiZm9vICAgICAgICAiIGFzCisJICogeW91IGFjdHVhbGx5IGludGVuZGVkLgorCSAqCisJICogU1ZyNCBkb2Vzbid0IGRvIHRoaXMuICBJbnN0ZWFkIHRoZSBzcGFjZXMgYXJlIGFjdHVhbGx5IHdyaXR0ZW4uCisJICogU28gdGhhdCdzIGhvdyB3ZSB3YW50IG5jdXJzZXMgdG8gYmVoYXZlLgorCSAqLworCXdpbi0+X2xpbmVbaV0uZmlyc3RjaGFyID0gMDsKKwl3aW4tPl9saW5lW2ldLmxhc3RjaGFyID0gbnVtX2NvbHVtbnMgLSAxOworCisJaWZfVVNFX1NDUk9MTF9ISU5UUyh3aW4tPl9saW5lW2ldLm9sZGluZGV4ID0gaSk7CisgICAgfQorCisgICAgaWYgKCFpc19wYWQgJiYgKGJlZ3ggKyBudW1fY29sdW1ucyA9PSBzY3JlZW5fY29sdW1ucykpIHsKKwl3aW4tPl9mbGFncyB8PSBfRU5ETElORTsKKworCWlmIChiZWd4ID09IDAgJiYgbnVtX2xpbmVzID09IHNjcmVlbl9saW5lcyAmJiBiZWd5ID09IDApCisJICAgIHdpbi0+X2ZsYWdzIHw9IF9GVUxMV0lOOworCisJaWYgKGJlZ3kgKyBudW1fbGluZXMgPT0gc2NyZWVuX2xpbmVzKQorCSAgICB3aW4tPl9mbGFncyB8PSBfU0NST0xMV0lOOworICAgIH0KKworICAgIHdwLT5uZXh0ID0gX25jX3dpbmRvd3M7CisgICAgd3AtPnNjcmVlbiA9IFNQOworICAgIF9uY193aW5kb3dzID0gd3A7CisKKyAgICBUKChUX0NSRUFURSgid2luZG93ICVwIiksIHdpbikpOworCisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICByZXR1cm5XaW4od2luKTsKK30KKworLyoKKyAqIHdnZXRjaCgpIGFuZCBvdGhlciBmdW5jdGlvbnMgd2l0aCBhIFdJTkRPVyogcGFyYW1ldGVyIG1heSB1c2UgYSBTQ1JFRU4qCisgKiBpbnRlcm5hbGx5LCBhbmQgaXQgaXMgdXNlZnVsIHRvIGFsbG93IHRob3NlIHRvIGJlIGludm9rZWQgd2l0aG91dCBzd2l0Y2hpbmcKKyAqIFNDUkVFTidzLCBlLmcuLCBmb3IgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLgorICovCitOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikKK19uY19zY3JlZW5fb2YoV0lORE9XICp3aW4pCit7CisgICAgU0NSRUVOICpzcCA9IDA7CisKKyAgICBpZiAod2luICE9IDApIHsKKwlXSU5ET1dMSVNUICp3cCA9IChXSU5ET1dMSVNUICopIHdpbjsKKwlzcCA9IHdwLT5zY3JlZW47CisgICAgfQorICAgIHJldHVybiAoc3ApOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9ubC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9ubC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTE1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX25sLmMKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwxOTk5LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglubC5jCisgKgorICoJUm91dGluZXM6CisgKgkJbmwoKQorICoJCW5vbmwoKQorICoKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9ubC5jLHYgMS44IDIwMDAvMTIvMTAgMDI6NDM6MjcgdG9tIEV4cCAkIikKKworI2lmZGVmIF9fRU1YX18KKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKK05DVVJTRVNfRVhQT1JUKGludCkKK25sKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoIm5sKCkiKSkpOworCisgICAgU1AtPl9ubCA9IFRSVUU7CisKKyNpZmRlZiBfX0VNWF9fCisgICAgX25jX2ZsdXNoKCk7CisgICAgX2ZzZXRtb2RlKE5DX09VVFBVVCwgInQiKTsKKyNlbmRpZgorCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK25vbmwodm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgibm9ubCgpIikpKTsKKworICAgIFNQLT5fbmwgPSBGQUxTRTsKKworI2lmZGVmIF9fRU1YX18KKyAgICBfbmNfZmx1c2goKTsKKyAgICBfZnNldG1vZGUoTkNfT1VUUFVULCAiYiIpOworI2VuZGlmCisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfb3ZlcmxheS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9vdmVybGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5ZThlNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfb3ZlcmxheS5jCkBAIC0wLDAgKzEsMjA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9vdmVybGF5LmMKKyoqCisqKglUaGUgcm91dGluZXMgb3ZlcmxheSgpLCBjb3B5d2luKCksIGFuZCBvdmVyd3JpdGUoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9vdmVybGF5LmMsdiAxLjI3IDIwMDgvMDYvMDcgMjM6MzA6MzQgdG9tIEV4cCAkIikKKworc3RhdGljIGludAorb3ZlcmxhcChjb25zdCBXSU5ET1cgKmNvbnN0IHNyYywgV0lORE9XICpjb25zdCBkc3QsIGludCBjb25zdCBmbGFnKQoreworICAgIGludCByYyA9IEVSUjsKKyAgICBpbnQgc3gxLCBzeTEsIHN4Miwgc3kyOworICAgIGludCBkeDEsIGR5MSwgZHgyLCBkeTI7CisgICAgaW50IHNtaW5yb3csIHNtaW5jb2w7CisgICAgaW50IGRtaW5yb3csIGRtaW5jb2w7CisgICAgaW50IGRtYXhyb3csIGRtYXhjb2w7CisKKyAgICBUKChUX0NBTExFRCgib3ZlcmxhcCglcCwlcCwlZCkiKSwgc3JjLCBkc3QsIGZsYWcpKTsKKworICAgIGlmIChzcmMgIT0gMCAmJiBkc3QgIT0gMCkgeworCV9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisJVCgoInNyYyA6IGJlZ3kgJWxkLCBiZWd4ICVsZCwgbWF4eSAlbGQsIG1heHggJWxkIiwKKwkgICAobG9uZykgc3JjLT5fYmVneSwKKwkgICAobG9uZykgc3JjLT5fYmVneCwKKwkgICAobG9uZykgc3JjLT5fbWF4eSwKKwkgICAobG9uZykgc3JjLT5fbWF4eCkpOworCVQoKCJkc3QgOiBiZWd5ICVsZCwgYmVneCAlbGQsIG1heHkgJWxkLCBtYXh4ICVsZCIsCisJICAgKGxvbmcpIGRzdC0+X2JlZ3ksCisJICAgKGxvbmcpIGRzdC0+X2JlZ3gsCisJICAgKGxvbmcpIGRzdC0+X21heHksCisJICAgKGxvbmcpIGRzdC0+X21heHgpKTsKKworCXN4MSA9IHNyYy0+X2JlZ3g7CisJc3kxID0gc3JjLT5fYmVneTsKKwlzeDIgPSBzeDEgKyBzcmMtPl9tYXh4OworCXN5MiA9IHN5MSArIHNyYy0+X21heHk7CisKKwlkeDEgPSBkc3QtPl9iZWd4OworCWR5MSA9IGRzdC0+X2JlZ3k7CisJZHgyID0gZHgxICsgZHN0LT5fbWF4eDsKKwlkeTIgPSBkeTEgKyBkc3QtPl9tYXh5OworCisJaWYgKGR4MiA+PSBzeDEgJiYgZHgxIDw9IHN4MiAmJiBkeTIgPj0gc3kxICYmIGR5MSA8PSBzeTIpIHsKKwkgICAgc21pbnJvdyA9IG1heChzeTEsIGR5MSkgLSBzeTE7CisJICAgIHNtaW5jb2wgPSBtYXgoc3gxLCBkeDEpIC0gc3gxOworCSAgICBkbWlucm93ID0gbWF4KHN5MSwgZHkxKSAtIGR5MTsKKwkgICAgZG1pbmNvbCA9IG1heChzeDEsIGR4MSkgLSBkeDE7CisJICAgIGRtYXhyb3cgPSBtaW4oc3kyLCBkeTIpIC0gZHkxOworCSAgICBkbWF4Y29sID0gbWluKHN4MiwgZHgyKSAtIGR4MTsKKworCSAgICByYyA9IGNvcHl3aW4oc3JjLCBkc3QsCisJCQkgc21pbnJvdywgc21pbmNvbCwKKwkJCSBkbWlucm93LCBkbWluY29sLAorCQkJIGRtYXhyb3csIGRtYXhjb2wsCisJCQkgZmxhZyk7CisJfQorCV9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgfQorICAgIHJldHVybkNvZGUocmMpOworfQorCisvKgorKioKKyoqCW92ZXJsYXkod2luMSwgd2luMikKKyoqCisqKgorKioJb3ZlcmxheSgpIHdyaXRlcyB0aGUgb3ZlcmxhcHBpbmcgYXJlYSBvZiB3aW4xIGJlaGluZCB3aW4yCisqKglvbiB3aW4yIG5vbi1kZXN0cnVjdGl2ZWx5LgorKioKKyoqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitvdmVybGF5KGNvbnN0IFdJTkRPVyAqd2luMSwgV0lORE9XICp3aW4yKQoreworICAgIFQoKFRfQ0FMTEVEKCJvdmVybGF5KCVwLCVwKSIpLCB3aW4xLCB3aW4yKSk7CisgICAgcmV0dXJuQ29kZShvdmVybGFwKHdpbjEsIHdpbjIsIFRSVUUpKTsKK30KKworLyoKKyoqCisqKglvdmVyd3JpdGUod2luMSwgd2luMikKKyoqCisqKgorKioJb3ZlcndyaXRlKCkgd3JpdGVzIHRoZSBvdmVybGFwcGluZyBhcmVhIG9mIHdpbjEgYmVoaW5kIHdpbjIKKyoqCW9uIHdpbjIgZGVzdHJ1Y3RpdmVseS4KKyoqCisqKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorb3ZlcndyaXRlKGNvbnN0IFdJTkRPVyAqd2luMSwgV0lORE9XICp3aW4yKQoreworICAgIFQoKFRfQ0FMTEVEKCJvdmVyd3JpdGUoJXAsJXApIiksIHdpbjEsIHdpbjIpKTsKKyAgICByZXR1cm5Db2RlKG92ZXJsYXAod2luMSwgd2luMiwgRkFMU0UpKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorY29weXdpbihjb25zdCBXSU5ET1cgKnNyYywgV0lORE9XICpkc3QsCisJaW50IHNtaW5yb3csIGludCBzbWluY29sLAorCWludCBkbWlucm93LCBpbnQgZG1pbmNvbCwKKwlpbnQgZG1heHJvdywgaW50IGRtYXhjb2wsCisJaW50IG92ZXIpCit7CisgICAgaW50IHJjID0gRVJSOworICAgIGludCBzeCwgc3ksIGR4LCBkeTsKKyAgICBib29sIHRvdWNoZWQ7CisgICAgYXR0cl90IGJrOworICAgIGF0dHJfdCBtYXNrOworCisgICAgVCgoVF9DQUxMRUQoImNvcHl3aW4oJXAsICVwLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCkiKSwKKyAgICAgICBzcmMsIGRzdCwgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbCwgb3ZlcikpOworCisgICAgaWYgKHNyYyAmJiBkc3QpIHsKKwlfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKworCWJrID0gQXR0ck9mKGRzdC0+X25jX2JrZ2QpOworCW1hc2sgPSB+KGF0dHJfdCkgKChiayAmIEFfQ09MT1IpID8gQV9DT0xPUiA6IDApOworCisJLyogbWFrZSBzdXJlIHJlY3RhbmdsZSBleGlzdHMgaW4gc291cmNlICovCisJaWYgKChzbWlucm93ICsgZG1heHJvdyAtIGRtaW5yb3cpIDw9IChzcmMtPl9tYXh5ICsgMSkgJiYKKwkgICAgKHNtaW5jb2wgKyBkbWF4Y29sIC0gZG1pbmNvbCkgPD0gKHNyYy0+X21heHggKyAxKSkgeworCisJICAgIFQoKCJyZWN0YW5nbGUgZXhpc3RzIGluIHNvdXJjZSIpKTsKKworCSAgICAvKiBtYWtlIHN1cmUgcmVjdGFuZ2xlIGZpdHMgaW4gZGVzdGluYXRpb24gKi8KKwkgICAgaWYgKGRtYXhyb3cgPD0gZHN0LT5fbWF4eSAmJiBkbWF4Y29sIDw9IGRzdC0+X21heHgpIHsKKworCQlUKCgicmVjdGFuZ2xlIGZpdHMgaW4gZGVzdGluYXRpb24iKSk7CisKKwkJZm9yIChkeSA9IGRtaW5yb3csIHN5ID0gc21pbnJvdzsKKwkJICAgICBkeSA8PSBkbWF4cm93OworCQkgICAgIHN5KyssIGR5KyspIHsKKworCQkgICAgdG91Y2hlZCA9IEZBTFNFOworCQkgICAgZm9yIChkeCA9IGRtaW5jb2wsIHN4ID0gc21pbmNvbDsKKwkJCSBkeCA8PSBkbWF4Y29sOworCQkJIHN4KyssIGR4KyspIHsKKwkJCWlmIChvdmVyKSB7CisJCQkgICAgaWYgKChDaGFyT2Yoc3JjLT5fbGluZVtzeV0udGV4dFtzeF0pICE9IEwoJyAnKSkgJiYKKwkJCQkoIUNoYXJFcShkc3QtPl9saW5lW2R5XS50ZXh0W2R4XSwKKwkJCQkJIHNyYy0+X2xpbmVbc3ldLnRleHRbc3hdKSkpIHsKKwkJCQlkc3QtPl9saW5lW2R5XS50ZXh0W2R4XSA9CisJCQkJICAgIHNyYy0+X2xpbmVbc3ldLnRleHRbc3hdOworCQkJCVNldEF0dHIoZHN0LT5fbGluZVtkeV0udGV4dFtkeF0sCisJCQkJCSgoQXR0ck9mKHNyYy0+X2xpbmVbc3ldLnRleHRbc3hdKSAmCisJCQkJCSAgbWFzaykgfCBiaykpOworCQkJCXRvdWNoZWQgPSBUUlVFOworCQkJICAgIH0KKwkJCX0gZWxzZSB7CisJCQkgICAgaWYgKCFDaGFyRXEoZHN0LT5fbGluZVtkeV0udGV4dFtkeF0sCisJCQkJCXNyYy0+X2xpbmVbc3ldLnRleHRbc3hdKSkgeworCQkJCWRzdC0+X2xpbmVbZHldLnRleHRbZHhdID0KKwkJCQkgICAgc3JjLT5fbGluZVtzeV0udGV4dFtzeF07CisJCQkJdG91Y2hlZCA9IFRSVUU7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQkgICAgaWYgKHRvdWNoZWQpIHsKKwkJCXRvdWNobGluZShkc3QsIGRtaW5yb3csIChkbWF4cm93IC0gZG1pbnJvdyArIDEpKTsKKwkJICAgIH0KKwkJfQorCQlUKCgiZmluaXNoZWQgY29weXdpbiIpKTsKKwkJcmMgPSBPSzsKKwkgICAgfQorCX0KKwlfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJjKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfcGFkLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3BhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYWQ5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3BhZC5jCkBAIC0wLDAgKzEsMzIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogbGliX3BhZC5jCisgKiBuZXdwYWQJLS0gY3JlYXRlIGEgbmV3IHBhZAorICogcG5vdXRyZWZyZXNoIC0tIHJlZnJlc2ggYSBwYWQsIG5vIHVwZGF0ZQorICogcGVjaG9jaGFyCS0tIGFkZCBhIGNoYXIgdG8gYSBwYWQgYW5kIHJlZnJlc2gKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9wYWQuYyx2IDEuNDEgMjAwNi8xMC8xNCAyMDo0NzoxMyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK25ld3BhZChpbnQgbCwgaW50IGMpCit7CisgICAgV0lORE9XICp3aW47CisgICAgTkNVUlNFU19DSF9UICpwdHI7CisgICAgaW50IGk7CisKKyAgICBUKChUX0NBTExFRCgibmV3cGFkKCVkLCAlZCkiKSwgbCwgYykpOworCisgICAgaWYgKGwgPD0gMCB8fCBjIDw9IDApCisJcmV0dXJuV2luKDApOworCisgICAgaWYgKCh3aW4gPSBfbmNfbWFrZW5ldyhsLCBjLCAwLCAwLCBfSVNQQUQpKSA9PSBOVUxMKQorCXJldHVybldpbigwKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHsKKwlpZl9VU0VfU0NST0xMX0hJTlRTKHdpbi0+X2xpbmVbaV0ub2xkaW5kZXggPSBfTkVXSU5ERVgpOworCWlmICgod2luLT5fbGluZVtpXS50ZXh0ID0gdHlwZUNhbGxvYyhOQ1VSU0VTX0NIX1QsICgoc2l6ZV90KSBjKSkpID09IDApIHsKKwkgICAgKHZvaWQpIF9uY19mcmVld2luKHdpbik7CisJICAgIHJldHVybldpbigwKTsKKwl9CisJZm9yIChwdHIgPSB3aW4tPl9saW5lW2ldLnRleHQ7IHB0ciA8IHdpbi0+X2xpbmVbaV0udGV4dCArIGM7IHB0cisrKQorCSAgICBTZXRDaGFyKCpwdHIsIEJMQU5LX1RFWFQsIEJMQU5LX0FUVFIpOworICAgIH0KKworICAgIHJldHVybldpbih3aW4pOworfQorCitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK3N1YnBhZChXSU5ET1cgKm9yaWcsIGludCBsLCBpbnQgYywgaW50IGJlZ3ksIGludCBiZWd4KQoreworICAgIFdJTkRPVyAqd2luID0gKFdJTkRPVyAqKSAwOworCisgICAgVCgoVF9DQUxMRUQoInN1YnBhZCglZCwgJWQpIiksIGwsIGMpKTsKKworICAgIGlmIChvcmlnKSB7CisJaWYgKCEob3JpZy0+X2ZsYWdzICYgX0lTUEFEKQorCSAgICB8fCAoKHdpbiA9IGRlcndpbihvcmlnLCBsLCBjLCBiZWd5LCBiZWd4KSkgPT0gTlVMTCkpCisJICAgIHJldHVybldpbigwKTsKKyAgICB9CisgICAgcmV0dXJuV2luKHdpbik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3ByZWZyZXNoKFdJTkRPVyAqd2luLAorCSBpbnQgcG1pbnJvdywKKwkgaW50IHBtaW5jb2wsCisJIGludCBzbWlucm93LAorCSBpbnQgc21pbmNvbCwKKwkgaW50IHNtYXhyb3csCisJIGludCBzbWF4Y29sKQoreworICAgIFQoKFRfQ0FMTEVEKCJwcmVmcmVzaCgpIikpKTsKKyAgICBpZiAocG5vdXRyZWZyZXNoKHdpbiwgcG1pbnJvdywgcG1pbmNvbCwgc21pbnJvdywgc21pbmNvbCwgc21heHJvdywKKwkJICAgICBzbWF4Y29sKSAhPSBFUlIKKwkmJiBkb3VwZGF0ZSgpICE9IEVSUikgeworCXJldHVybkNvZGUoT0spOworICAgIH0KKyAgICByZXR1cm5Db2RlKEVSUik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Bub3V0cmVmcmVzaChXSU5ET1cgKndpbiwKKwkgICAgIGludCBwbWlucm93LAorCSAgICAgaW50IHBtaW5jb2wsCisJICAgICBpbnQgc21pbnJvdywKKwkgICAgIGludCBzbWluY29sLAorCSAgICAgaW50IHNtYXhyb3csCisJICAgICBpbnQgc21heGNvbCkKK3sKKyAgICBOQ1VSU0VTX1NJWkVfVCBpLCBqOworICAgIE5DVVJTRVNfU0laRV9UIG0sIG47CisgICAgTkNVUlNFU19TSVpFX1QgcG1heHJvdzsKKyAgICBOQ1VSU0VTX1NJWkVfVCBwbWF4Y29sOworCisjaWYgVVNFX1NDUk9MTF9ISU5UUworICAgIGNvbnN0IGludCBteV9sZW4gPSAyOwkvKiBwYXJhbWV0ZXJpemUgdGhlIHRocmVzaG9sZCBmb3IgaGFyZHNjcm9sbCAqLworICAgIE5DVVJTRVNfU0laRV9UIGRpc3BsYWNlZDsKKyAgICBib29sIHdpZGU7CisjZW5kaWYKKworICAgIFQoKFRfQ0FMTEVEKCJwbm91dHJlZnJlc2goJXAsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQpIiksCisgICAgICAgd2luLCBwbWlucm93LCBwbWluY29sLCBzbWlucm93LCBzbWluY29sLCBzbWF4cm93LCBzbWF4Y29sKSk7CisKKyAgICBpZiAod2luID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgaWYgKCEod2luLT5fZmxhZ3MgJiBfSVNQQUQpKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIC8qIG5lZ2F0aXZlIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgemVybyAqLworICAgIGlmIChwbWlucm93IDwgMCkKKwlwbWlucm93ID0gMDsKKyAgICBpZiAocG1pbmNvbCA8IDApCisJcG1pbmNvbCA9IDA7CisgICAgaWYgKHNtaW5yb3cgPCAwKQorCXNtaW5yb3cgPSAwOworICAgIGlmIChzbWluY29sIDwgMCkKKwlzbWluY29sID0gMDsKKworICAgIHBtYXhyb3cgPSBwbWlucm93ICsgc21heHJvdyAtIHNtaW5yb3c7CisgICAgcG1heGNvbCA9IHBtaW5jb2wgKyBzbWF4Y29sIC0gc21pbmNvbDsKKworICAgIFQoKCIgcG1pbnJvdyArIHNtYXhyb3cgLSBzbWlucm93ICVsZCwgd2luLT5fbWF4eSAlbGQiLAorICAgICAgIChsb25nKSBwbWF4cm93LCAobG9uZykgd2luLT5fbWF4eSkpOworICAgIFQoKCIgcG1pbmNvbCArIHNtYXhjb2wgLSBzbWluY29sICVsZCwgd2luLT5fbWF4eCAlbGQiLAorICAgICAgIChsb25nKSBwbWF4Y29sLCAobG9uZykgd2luLT5fbWF4eCkpOworCisgICAgLyoKKyAgICAgKiBUcmltIHRoZSBjYWxsZXIncyBzY3JlZW4gc2l6ZSBiYWNrIHRvIHRoZSBhY3R1YWwgbGltaXRzLgorICAgICAqLworICAgIGlmIChwbWF4cm93ID4gd2luLT5fbWF4eSkgeworCXNtYXhyb3cgLT0gKHBtYXhyb3cgLSB3aW4tPl9tYXh5KTsKKwlwbWF4cm93ID0gcG1pbnJvdyArIHNtYXhyb3cgLSBzbWlucm93OworICAgIH0KKyAgICBpZiAocG1heGNvbCA+IHdpbi0+X21heHgpIHsKKwlzbWF4Y29sIC09IChwbWF4Y29sIC0gd2luLT5fbWF4eCk7CisJcG1heGNvbCA9IHBtaW5jb2wgKyBzbWF4Y29sIC0gc21pbmNvbDsKKyAgICB9CisKKyAgICBpZiAoc21heHJvdyA+PSBzY3JlZW5fbGluZXMKKwl8fCBzbWF4Y29sID49IHNjcmVlbl9jb2x1bW5zCisJfHwgc21pbnJvdyA+IHNtYXhyb3cKKwl8fCBzbWluY29sID4gc21heGNvbCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBUKCgicGFkIGJlaW5nIHJlZnJlc2hlZCIpKTsKKworI2lmIFVTRV9TQ1JPTExfSElOVFMKKyAgICBpZiAod2luLT5fcGFkLl9wYWRfeSA+PSAwKSB7CisJZGlzcGxhY2VkID0gcG1pbnJvdyAtIHdpbi0+X3BhZC5fcGFkX3kKKwkgICAgLSAoc21pbnJvdyAtIHdpbi0+X3BhZC5fcGFkX3RvcCk7CisJVCgoInBhZCBiZWluZyBzaGlmdGVkIGJ5ICVkIGxpbmUocykiLCBkaXNwbGFjZWQpKTsKKyAgICB9IGVsc2UKKwlkaXNwbGFjZWQgPSAwOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEZvciBwdXJlIGVmZmljaWVuY3ksIHdlJ2Qgd2FudCB0byB0cmFuc2ZlciBzY3JvbGxpbmcgaW5mb3JtYXRpb24KKyAgICAgKiBmcm9tIHRoZSBwYWQgdG8gbmV3c2NyIHdoZW5ldmVyIHRoZSB3aW5kb3cgaXMgd2lkZSBlbm91Z2ggdGhhdAorICAgICAqIGl0cyB1cGRhdGUgd2lsbCBkb21pbmF0ZSB0aGUgY29zdCBvZiB0aGUgdXBkYXRlIGZvciB0aGUgaG9yaXpvbnRhbAorICAgICAqIGJhbmQgb2YgbmV3c2NyIHRoYXQgaXQgb2NjdXBpZXMuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIHRocmVzaG9sZAorICAgICAqIHRlbmRzIHRvIGJlIGNvbXBsZXggdG8gZXN0aW1hdGUsIGFuZCBpbiBhbnkgY2FzZSBzY3JvbGxpbmcgdGhlCisgICAgICogd2hvbGUgYmFuZCBhbmQgcmV3cml0aW5nIHRoZSBwYXJ0cyBvdXRzaWRlIHdpbidzIGltYWdlIHdvdWxkIGxvb2sKKyAgICAgKiByZWFsbHkgdWdseS4gIFNvLiAgV2hhdCB3ZSBkbyBpcyBjb25zaWRlciB0aGUgcGFkICJ3aWRlIiBpZiBpdAorICAgICAqIGVpdGhlciAoYSkgb2NjdXBpZXMgdGhlIHdob2xlIHdpZHRoIG9mIG5ld3Njciwgb3IgKGIpIG9jY3VwaWVzCisgICAgICogYWxsIGJ1dCBhdCBtb3N0IG9uZSBjb2x1bW4gb24gZWl0aGVyIHZlcnRpY2FsIGVkZ2Ugb2YgdGhlIHNjcmVlbgorICAgICAqICh0aGlzIGNhdGVycyB0byBmdXNzeSBwZW9wbGUgd2hvIHB1dCBib3hlcyBhcm91bmQgZnVsbC1zY3JlZW4KKyAgICAgKiB3aW5kb3dzKS4gIE5vdGUgdGhhdCBjaGFuZ2luZyB0aGlzIGZvcm11bGEgd2lsbCBub3QgYnJlYWsgYW55IGNvZGUsCisgICAgICogbWVyZWx5IGNoYW5nZSB0aGUgY29zdHMgb2YgdmFyaW91cyB1cGRhdGUgY2FzZXMuCisgICAgICovCisjaWYgVVNFX1NDUk9MTF9ISU5UUworICAgIHdpZGUgPSAoc21pbmNvbCA8IG15X2xlbiAmJiBzbWF4Y29sID4gKG5ld3Njci0+X21heHggLSBteV9sZW4pKTsKKyNlbmRpZgorCisgICAgZm9yIChpID0gcG1pbnJvdywgbSA9IHNtaW5yb3cgKyB3aW4tPl95b2Zmc2V0OworCSBpIDw9IHBtYXhyb3cgJiYgbSA8PSBuZXdzY3ItPl9tYXh5OworCSBpKyssIG0rKykgeworCXJlZ2lzdGVyIHN0cnVjdCBsZGF0ICpubGluZSA9ICZuZXdzY3ItPl9saW5lW21dOworCXJlZ2lzdGVyIHN0cnVjdCBsZGF0ICpvbGluZSA9ICZ3aW4tPl9saW5lW2ldOworCWZvciAoaiA9IHBtaW5jb2wsIG4gPSBzbWluY29sOyBqIDw9IHBtYXhjb2w7IGorKywgbisrKSB7CisJICAgIE5DVVJTRVNfQ0hfVCBjaCA9IG9saW5lLT50ZXh0W2pdOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJICAgIC8qCisJICAgICAqIFNwZWNpYWwgY2FzZSBmb3IgbGVmdG1vc3QgY2hhcmFjdGVyIG9mIHRoZSBkaXNwbGF5ZWQgYXJlYS4KKwkgICAgICogT25seSBoYWxmIG9mIGEgZG91YmxlLXdpZHRoIGNoYXJhY3RlciBtYXkgYmUgdmlzaWJsZS4KKwkgICAgICovCisJICAgIGlmIChqID09IHBtaW5jb2wKKwkJJiYgaiA+IDAKKwkJJiYgaXNXaWRlY0V4dChjaCkpIHsKKwkJU2V0Q2hhcihjaCwgTCgnICcpLCBBdHRyT2Yob2xpbmUtPnRleHRbaiAtIDFdKSk7CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAoIUNoYXJFcShjaCwgbmxpbmUtPnRleHRbbl0pKSB7CisJCW5saW5lLT50ZXh0W25dID0gY2g7CisJCUNIQU5HRURfQ0VMTChubGluZSwgbik7CisJICAgIH0KKwl9CisKKyNpZiBVU0VfU0NST0xMX0hJTlRTCisJaWYgKHdpZGUpIHsKKwkgICAgaW50IG5pbmQgPSBtICsgZGlzcGxhY2VkOworCSAgICBpZiAob2xpbmUtPm9sZGluZGV4IDwgMAorCQl8fCBuaW5kIDwgc21pbnJvdworCQl8fCBuaW5kID4gc21heHJvdykgeworCQluaW5kID0gX05FV0lOREVYOworCSAgICB9IGVsc2UgaWYgKGRpc3BsYWNlZCkgeworCQlyZWdpc3RlciBzdHJ1Y3QgbGRhdCAqcGxpbmUgPSAmY3Vyc2NyLT5fbGluZVtuaW5kXTsKKwkJZm9yIChqID0gMDsgaiA8PSBteV9sZW47IGorKykgeworCQkgICAgaW50IGsgPSBuZXdzY3ItPl9tYXh4IC0gajsKKwkJICAgIGlmIChwbGluZS0+dGV4dFtqXSAhPSBubGluZS0+dGV4dFtqXQorCQkJfHwgcGxpbmUtPnRleHRba10gIT0gbmxpbmUtPnRleHRba10pIHsKKwkJCW5pbmQgPSBfTkVXSU5ERVg7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgICAgbmxpbmUtPm9sZGluZGV4ID0gbmluZDsKKwl9CisjZW5kaWYgLyogVVNFX1NDUk9MTF9ISU5UUyAqLworCW9saW5lLT5maXJzdGNoYXIgPSBvbGluZS0+bGFzdGNoYXIgPSBfTk9DSEFOR0U7CisJaWZfVVNFX1NDUk9MTF9ISU5UUyhvbGluZS0+b2xkaW5kZXggPSBpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENsZWFuIHVwIGRlYnJpcyBmcm9tIHNjcm9sbGluZyBvciByZXNpemluZyB0aGUgcGFkLCBzbyB3ZSBkbyBub3QKKyAgICAgKiBhY2NpZGVudGFsbHkgcGljayB1cCB0aGUgaW5kZXggdmFsdWUgZHVyaW5nIHRoZSBuZXh0IGNhbGwgdG8gdGhpcworICAgICAqIHByb2NlZHVyZS4gIFRoZSBvbmx5IHJvd3MgdGhhdCBzaG91bGQgaGF2ZSBhbiBpbmRleCB2YWx1ZSBhcmUgdGhvc2UKKyAgICAgKiB0aGF0IGFyZSBkaXNwbGF5ZWQgZHVyaW5nIHRoaXMgY3ljbGUuCisgICAgICovCisjaWYgVVNFX1NDUk9MTF9ISU5UUworICAgIGZvciAoaSA9IHBtaW5yb3cgLSAxOyAoaSA+PSAwKSAmJiAod2luLT5fbGluZVtpXS5vbGRpbmRleCA+PSAwKTsgaS0tKQorCXdpbi0+X2xpbmVbaV0ub2xkaW5kZXggPSBfTkVXSU5ERVg7CisgICAgZm9yIChpID0gcG1heHJvdyArIDE7IChpIDw9IHdpbi0+X21heHkpCisJICYmICh3aW4tPl9saW5lW2ldLm9sZGluZGV4ID49IDApOyBpKyspCisJd2luLT5fbGluZVtpXS5vbGRpbmRleCA9IF9ORVdJTkRFWDsKKyNlbmRpZgorCisgICAgd2luLT5fYmVneCA9IHNtaW5jb2w7CisgICAgd2luLT5fYmVneSA9IHNtaW5yb3c7CisKKyAgICBpZiAod2luLT5fY2xlYXIpIHsKKwl3aW4tPl9jbGVhciA9IEZBTFNFOworCW5ld3Njci0+X2NsZWFyID0gVFJVRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFVzZSB0aGUgcGFkJ3MgY3VycmVudCBwb3NpdGlvbiwgaWYgaXQgd2lsbCBiZSB2aXNpYmxlLgorICAgICAqIElmIG5vdCwgZG9uJ3QgZG8gYW55dGhpbmc7IGl0J3Mgbm90IGFuIGVycm9yLgorICAgICAqLworICAgIGlmICh3aW4tPl9sZWF2ZW9rID09IEZBTFNFCisJJiYgd2luLT5fY3VyeSA+PSBwbWlucm93CisJJiYgd2luLT5fY3VyeCA+PSBwbWluY29sCisJJiYgd2luLT5fY3VyeSA8PSBwbWF4cm93CisJJiYgd2luLT5fY3VyeCA8PSBwbWF4Y29sKSB7CisJbmV3c2NyLT5fY3VyeSA9IHdpbi0+X2N1cnkgLSBwbWlucm93ICsgd2luLT5fYmVneSArIHdpbi0+X3lvZmZzZXQ7CisJbmV3c2NyLT5fY3VyeCA9IHdpbi0+X2N1cnggLSBwbWluY29sICsgd2luLT5fYmVneDsKKyAgICB9CisgICAgbmV3c2NyLT5fbGVhdmVvayA9IHdpbi0+X2xlYXZlb2s7CisgICAgd2luLT5fZmxhZ3MgJj0gfl9IQVNNT1ZFRDsKKworICAgIC8qCisgICAgICogVXBkYXRlIG91ciBjYWNoZSBvZiB0aGUgbGluZS1udW1iZXJzIHRoYXQgd2UgZGlzcGxheWVkIGZyb20gdGhlIHBhZC4KKyAgICAgKiBXZSB3aWxsIHVzZSB0aGlzIG9uIHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB0byBkZXJpdmUKKyAgICAgKiB2YWx1ZXMgdG8gc3R1ZmYgaW50byAnb2xkaW5kZXhbXScgLS0gZm9yIHNjcm9sbGluZyBvcHRpbWl6YXRpb24uCisgICAgICovCisgICAgd2luLT5fcGFkLl9wYWRfeSA9IHBtaW5yb3c7CisgICAgd2luLT5fcGFkLl9wYWRfeCA9IHBtaW5jb2w7CisgICAgd2luLT5fcGFkLl9wYWRfdG9wID0gc21pbnJvdzsKKyAgICB3aW4tPl9wYWQuX3BhZF9sZWZ0ID0gc21pbmNvbDsKKyAgICB3aW4tPl9wYWQuX3BhZF9ib3R0b20gPSBzbWF4cm93OworICAgIHdpbi0+X3BhZC5fcGFkX3JpZ2h0ID0gc21heGNvbDsKKworICAgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwZWNob2NoYXIoV0lORE9XICpwYWQsIGNvbnN0IGNodHlwZSBjaCkKK3sKKyAgICBUKChUX0NBTExFRCgicGVjaG9jaGFyKCVwLCAlcykiKSwgcGFkLCBfdHJhY2VjaHR5cGUoY2gpKSk7CisKKyAgICBpZiAocGFkID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgaWYgKCEocGFkLT5fZmxhZ3MgJiBfSVNQQUQpKQorCXJldHVybkNvZGUod2VjaG9jaGFyKHBhZCwgY2gpKTsKKworICAgIHdhZGRjaChwYWQsIGNoKTsKKyAgICBwcmVmcmVzaChwYWQsIHBhZC0+X3BhZC5fcGFkX3ksCisJICAgICBwYWQtPl9wYWQuX3BhZF94LAorCSAgICAgcGFkLT5fcGFkLl9wYWRfdG9wLAorCSAgICAgcGFkLT5fcGFkLl9wYWRfbGVmdCwKKwkgICAgIHBhZC0+X3BhZC5fcGFkX2JvdHRvbSwKKwkgICAgIHBhZC0+X3BhZC5fcGFkX3JpZ2h0KTsKKworICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9wcmludHcuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfcHJpbnR3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJhZTkyMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfcHJpbnR3LmMKQEAgLTAsMCArMSwxMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfcHJpbnR3LmMKKyoqCisqKglUaGUgcm91dGluZXMgcHJpbnR3KCksIHdwcmludHcoKSBhbmQgZnJpZW5kcy4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9wcmludHcuYyx2IDEuMTggMjAwNi8xMi8xNyAxOToyMTozOSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwcmludHcoY29uc3QgY2hhciAqZm10LC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3A7CisgICAgaW50IGNvZGU7CisKKyNpZmRlZiBUUkFDRQorICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgVCgoVF9DQUxMRUQoInByaW50dyglcyVzKSIpLAorICAgICAgIF9uY192aXNidWYoZm10KSwgX25jX3ZhcmFyZ3MoZm10LCBhcmdwKSkpOworICAgIHZhX2VuZChhcmdwKTsKKyNlbmRpZgorCisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICBjb2RlID0gdndwcmludHcoc3Rkc2NyLCBmbXQsIGFyZ3ApOworICAgIHZhX2VuZChhcmdwKTsKKworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dwcmludHcoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworICAgIGludCBjb2RlOworCisjaWZkZWYgVFJBQ0UKKyAgICB2YV9zdGFydChhcmdwLCBmbXQpOworICAgIFQoKFRfQ0FMTEVEKCJ3cHJpbnR3KCVwLCVzJXMpIiksCisgICAgICAgd2luLCBfbmNfdmlzYnVmKGZtdCksIF9uY192YXJhcmdzKGZtdCwgYXJncCkpKTsKKyAgICB2YV9lbmQoYXJncCk7CisjZW5kaWYKKworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgY29kZSA9IHZ3cHJpbnR3KHdpbiwgZm10LCBhcmdwKTsKKyAgICB2YV9lbmQoYXJncCk7CisKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCittdnByaW50dyhpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworICAgIGludCBjb2RlOworCisjaWZkZWYgVFJBQ0UKKyAgICB2YV9zdGFydChhcmdwLCBmbXQpOworICAgIFQoKFRfQ0FMTEVEKCJtdnByaW50dyglZCwlZCwlcyVzKSIpLAorICAgICAgIHksIHgsIF9uY192aXNidWYoZm10KSwgX25jX3ZhcmFyZ3MoZm10LCBhcmdwKSkpOworICAgIHZhX2VuZChhcmdwKTsKKyNlbmRpZgorCisgICAgaWYgKChjb2RlID0gbW92ZSh5LCB4KSkgIT0gRVJSKSB7CisJdmFfc3RhcnQoYXJncCwgZm10KTsKKwljb2RlID0gdndwcmludHcoc3Rkc2NyLCBmbXQsIGFyZ3ApOworCXZhX2VuZChhcmdwKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbXZ3cHJpbnR3KFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworICAgIGludCBjb2RlOworCisjaWZkZWYgVFJBQ0UKKyAgICB2YV9zdGFydChhcmdwLCBmbXQpOworICAgIFQoKFRfQ0FMTEVEKCJtdndwcmludHcoJWQsJWQsJXAsJXMlcykiKSwKKyAgICAgICB5LCB4LCB3aW4sIF9uY192aXNidWYoZm10KSwgX25jX3ZhcmFyZ3MoZm10LCBhcmdwKSkpOworICAgIHZhX2VuZChhcmdwKTsKKyNlbmRpZgorCisgICAgaWYgKChjb2RlID0gd21vdmUod2luLCB5LCB4KSkgIT0gRVJSKSB7CisJdmFfc3RhcnQoYXJncCwgZm10KTsKKwljb2RlID0gdndwcmludHcod2luLCBmbXQsIGFyZ3ApOworCXZhX2VuZChhcmdwKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQordndwcmludHcoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdwKQoreworICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQgY29kZSA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJ2d3ByaW50dyglcCwlcyx2YV9saXN0KSIpLCB3aW4sIF9uY192aXNidWYoZm10KSkpOworCisgICAgaWYgKChidWYgPSBfbmNfcHJpbnRmX3N0cmluZyhmbXQsIGFyZ3ApKSAhPSAwKSB7CisJY29kZSA9IHdhZGRzdHIod2luLCBidWYpOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9yZWRyYXdsbi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9yZWRyYXdsbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMDkwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3JlZHJhd2xuLmMKQEAgLTAsMCArMSw4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9yZWRyYXdsbi5jCisgKgorICoJVGhlIHJvdXRpbmUgd3JlZHJhd2xuKCkuCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3JlZHJhd2xuLmMsdiAxLjEyIDIwMDcvMTAvMTMgMjA6MDg6NTYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord3JlZHJhd2xuKFdJTkRPVyAqd2luLCBpbnQgYmVnLCBpbnQgbnVtKQoreworICAgIGludCBpOworICAgIGludCBlbmQ7CisgICAgc2l6ZV90IGxlbjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3cmVkcmF3bG4oJXAsJWQsJWQpIiksIHdpbiwgYmVnLCBudW0pKTsKKworICAgIGlmICh3aW4gPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBpZiAoYmVnIDwgMCkKKwliZWcgPSAwOworCisgICAgaWYgKHRvdWNobGluZSh3aW4sIGJlZywgbnVtKSA9PSBFUlIpCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgaWYgKHRvdWNobGluZShjdXJzY3IsIGJlZyArIHdpbi0+X2JlZ3ksIG51bSkgPT0gRVJSKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGVuZCA9IGJlZyArIG51bTsKKyAgICBpZiAoZW5kID4gY3Vyc2NyLT5fbWF4eSArIDEpCisJZW5kID0gY3Vyc2NyLT5fbWF4eSArIDE7CisgICAgaWYgKGVuZCA+IHdpbi0+X21heHkgKyAxKQorCWVuZCA9IHdpbi0+X21heHkgKyAxOworCisgICAgbGVuID0gKHdpbi0+X21heHggKyAxKTsKKyAgICBpZiAobGVuID4gKHNpemVfdCkgKGN1cnNjci0+X21heHggKyAxKSkKKwlsZW4gPSAoc2l6ZV90KSAoY3Vyc2NyLT5fbWF4eCArIDEpOworICAgIGxlbiAqPSBzaXplb2YoY3Vyc2NyLT5fbGluZVswXS50ZXh0WzBdKTsKKworICAgIGZvciAoaSA9IGJlZzsgaSA8IGVuZDsgaSsrKSB7CisJaW50IGNyb3cgPSBpICsgd2luLT5fYmVneTsKKworCW1lbXNldChjdXJzY3ItPl9saW5lW2Nyb3ddLnRleHQgKyB3aW4tPl9iZWd4LCAwLCBsZW4pOworCV9uY19tYWtlX29sZGhhc2goY3Jvdyk7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3JlZnJlc2guYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfcmVmcmVzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOWNhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3JlZnJlc2guYwpAQCAtMCwwICsxLDI4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3JlZnJlc2guYworICoKKyAqCVRoZSByb3V0aW5lcyB3cmVmcmVzaCgpIGFuZCB3bm91dHJlZnJlc2goKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfcmVmcmVzaC5jLHYgMS40MSAyMDA3LzA5LzI5IDIwOjM5OjM0IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dyZWZyZXNoKFdJTkRPVyAqd2luKQoreworICAgIGludCBjb2RlOworCisgICAgVCgoVF9DQUxMRUQoIndyZWZyZXNoKCVwKSIpLCB3aW4pKTsKKworICAgIGlmICh3aW4gPT0gMCkgeworCWNvZGUgPSBFUlI7CisgICAgfSBlbHNlIGlmICh3aW4gPT0gY3Vyc2NyKSB7CisJY3Vyc2NyLT5fY2xlYXIgPSBUUlVFOworCWNvZGUgPSBkb3VwZGF0ZSgpOworICAgIH0gZWxzZSBpZiAoKGNvZGUgPSB3bm91dHJlZnJlc2god2luKSkgPT0gT0spIHsKKwlpZiAod2luLT5fY2xlYXIpCisJICAgIG5ld3Njci0+X2NsZWFyID0gVFJVRTsKKwljb2RlID0gZG91cGRhdGUoKTsKKwkvKgorCSAqIFJlc2V0IHRoZSBjbGVhcm9rKCkgZmxhZyBpbiBjYXNlIGl0IHdhcyBzZXQgZm9yIHRoZSBzcGVjaWFsCisJICogY2FzZSBpbiBoYXJkc2Nyb2xsLmMgKGlmIHdlIGRvbid0IHJlc2V0IGl0IGhlcmUsIHdlJ2xsIGdldCAyCisJICogcmVmcmVzaGVzIGJlY2F1c2UgdGhlIGZsYWcgaXMgY29waWVkIGZyb20gc3Rkc2NyIHRvIG5ld3NjcikuCisJICogUmVzZXR0aW5nIHRoZSBmbGFnIHNob3VsZG4ndCBkbyBhbnkgaGFybSwgYW55d2F5LgorCSAqLworCXdpbi0+X2NsZWFyID0gRkFMU0U7CisgICAgfQorICAgIHJldHVybkNvZGUoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dub3V0cmVmcmVzaChXSU5ET1cgKndpbikKK3sKKyAgICBOQ1VSU0VTX1NJWkVfVCBsaW1pdF94OworICAgIE5DVVJTRVNfU0laRV9UIHNyY19yb3csIHNyY19jb2w7CisgICAgTkNVUlNFU19TSVpFX1QgYmVneDsKKyAgICBOQ1VSU0VTX1NJWkVfVCBiZWd5OworICAgIE5DVVJTRVNfU0laRV9UIGRzdF9yb3csIGRzdF9jb2w7CisjaWYgVVNFX1NDUk9MTF9ISU5UUworICAgIGJvb2wgd2lkZTsKKyNlbmRpZgorCisgICAgVCgoVF9DQUxMRUQoIndub3V0cmVmcmVzaCglcCkiKSwgd2luKSk7CisjaWZkZWYgVFJBQ0UKKyAgICBpZiAoVVNFX1RSQUNFRihUUkFDRV9VUERBVEUpKSB7CisJX3RyYWNlZHVtcCgiLi4ud2luIiwgd2luKTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgLyoKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYnJlYWsgYmFkbHkgaWYgd2UgdHJ5IHRvIHJlZnJlc2ggYSBwYWQuCisgICAgICovCisgICAgaWYgKCh3aW4gPT0gMCkKKwl8fCAod2luLT5fZmxhZ3MgJiBfSVNQQUQpKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIC8qIHB1dCB0aGVtIGhlcmUgc28gIndpbiA9PSAwIiB3b24ndCBicmVhayBvdXIgY29kZSAqLworICAgIGJlZ3ggPSB3aW4tPl9iZWd4OworICAgIGJlZ3kgPSB3aW4tPl9iZWd5OworCisgICAgbmV3c2NyLT5fbmNfYmtnZCA9IHdpbi0+X25jX2JrZ2Q7CisgICAgV0lORE9XX0FUVFJTKG5ld3NjcikgPSBXSU5ET1dfQVRUUlMod2luKTsKKworICAgIC8qIG1lcmdlIGluIGNoYW5nZSBpbmZvcm1hdGlvbiBmcm9tIGFsbCBzdWJ3aW5kb3dzIG9mIHRoaXMgd2luZG93ICovCisgICAgd3N5bmNkb3duKHdpbik7CisKKyNpZiBVU0VfU0NST0xMX0hJTlRTCisgICAgLyoKKyAgICAgKiBGb3IgcHVyZSBlZmZpY2llbmN5LCB3ZSdkIHdhbnQgdG8gdHJhbnNmZXIgc2Nyb2xsaW5nIGluZm9ybWF0aW9uCisgICAgICogZnJvbSB0aGUgd2luZG93IHRvIG5ld3NjciB3aGVuZXZlciB0aGUgd2luZG93IGlzIHdpZGUgZW5vdWdoIHRoYXQKKyAgICAgKiBpdHMgdXBkYXRlIHdpbGwgZG9taW5hdGUgdGhlIGNvc3Qgb2YgdGhlIHVwZGF0ZSBmb3IgdGhlIGhvcml6b250YWwKKyAgICAgKiBiYW5kIG9mIG5ld3NjciB0aGF0IGl0IG9jY3VwaWVzLiAgVW5mb3J0dW5hdGVseSwgdGhpcyB0aHJlc2hvbGQKKyAgICAgKiB0ZW5kcyB0byBiZSBjb21wbGV4IHRvIGVzdGltYXRlLCBhbmQgaW4gYW55IGNhc2Ugc2Nyb2xsaW5nIHRoZQorICAgICAqIHdob2xlIGJhbmQgYW5kIHJld3JpdGluZyB0aGUgcGFydHMgb3V0c2lkZSB3aW4ncyBpbWFnZSB3b3VsZCBsb29rCisgICAgICogcmVhbGx5IHVnbHkuICBTby4gIFdoYXQgd2UgZG8gaXMgY29uc2lkZXIgdGhlIHdpbmRvdyAid2lkZSIgaWYgaXQKKyAgICAgKiBlaXRoZXIgKGEpIG9jY3VwaWVzIHRoZSB3aG9sZSB3aWR0aCBvZiBuZXdzY3IsIG9yIChiKSBvY2N1cGllcworICAgICAqIGFsbCBidXQgYXQgbW9zdCBvbmUgY29sdW1uIG9uIGVpdGhlciB2ZXJ0aWNhbCBlZGdlIG9mIHRoZSBzY3JlZW4KKyAgICAgKiAodGhpcyBjYXRlcnMgdG8gZnVzc3kgcGVvcGxlIHdobyBwdXQgYm94ZXMgYXJvdW5kIGZ1bGwtc2NyZWVuCisgICAgICogd2luZG93cykuICBOb3RlIHRoYXQgY2hhbmdpbmcgdGhpcyBmb3JtdWxhIHdpbGwgbm90IGJyZWFrIGFueSBjb2RlLAorICAgICAqIG1lcmVseSBjaGFuZ2UgdGhlIGNvc3RzIG9mIHZhcmlvdXMgdXBkYXRlIGNhc2VzLgorICAgICAqLworICAgIHdpZGUgPSAoYmVneCA8PSAxICYmIHdpbi0+X21heHggPj0gKG5ld3Njci0+X21heHggLSAxKSk7CisjZW5kaWYKKworICAgIHdpbi0+X2ZsYWdzICY9IH5fSEFTTU9WRUQ7CisKKyAgICAvKgorICAgICAqIE1pY3JvdHdlYWtpbmcgYWxlcnQhICBUaGlzIGRvdWJsZSBsb29wIGlzIG9uZSBvZiB0aGUgZ2VudWluZQorICAgICAqIGhvdCBzcG90cyBpbiB0aGUgY29kZS4gIEV2ZW4gZ2NjIGRvZXNuJ3Qgc2VlbSB0byBkbyBlbm91Z2gKKyAgICAgKiBjb21tb24tc3ViZXhwcmVzc2lvbiBjaHVua2luZyB0byBtYWtlIGl0IHJlYWxseSB0ZW5zZSwKKyAgICAgKiBzbyB3ZSdsbCBmb3JjZSB0aGUgaXNzdWUuCisgICAgICovCisKKyAgICAvKiBsaW1pdChkc3RfY29sKSAqLworICAgIGxpbWl0X3ggPSB3aW4tPl9tYXh4OworICAgIC8qIGxpbWl0KHNyY19jb2wpICovCisgICAgaWYgKGxpbWl0X3ggPiBuZXdzY3ItPl9tYXh4IC0gYmVneCkKKwlsaW1pdF94ID0gbmV3c2NyLT5fbWF4eCAtIGJlZ3g7CisKKyAgICBmb3IgKHNyY19yb3cgPSAwLCBkc3Rfcm93ID0gYmVneSArIHdpbi0+X3lvZmZzZXQ7CisJIHNyY19yb3cgPD0gd2luLT5fbWF4eSAmJiBkc3Rfcm93IDw9IG5ld3Njci0+X21heHk7CisJIHNyY19yb3crKywgZHN0X3JvdysrKSB7CisJcmVnaXN0ZXIgc3RydWN0IGxkYXQgKm5saW5lID0gJm5ld3Njci0+X2xpbmVbZHN0X3Jvd107CisJcmVnaXN0ZXIgc3RydWN0IGxkYXQgKm9saW5lID0gJndpbi0+X2xpbmVbc3JjX3Jvd107CisKKwlpZiAob2xpbmUtPmZpcnN0Y2hhciAhPSBfTk9DSEFOR0UpIHsKKwkgICAgaW50IGxhc3Rfc3JjID0gb2xpbmUtPmxhc3RjaGFyOworCisJICAgIGlmIChsYXN0X3NyYyA+IGxpbWl0X3gpCisJCWxhc3Rfc3JjID0gbGltaXRfeDsKKworCSAgICBzcmNfY29sID0gb2xpbmUtPmZpcnN0Y2hhcjsKKwkgICAgZHN0X2NvbCA9IHNyY19jb2wgKyBiZWd4OworCisJICAgIGlmX1dJREVDKHsKKwkJcmVnaXN0ZXIgaW50IGo7CisKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgd2Ugd2lsbCBjb3B5IGNvbXBsZXRlIG11bHRpLWNvbHVtbiBjaGFyYWN0ZXJzCisJCSAqIG9uIHRoZSBsZWZ0LWJvdW5kYXJ5LgorCQkgKi8KKwkJaWYgKGlzV2lkZWNFeHQob2xpbmUtPnRleHRbc3JjX2NvbF0pKSB7CisJCSAgICBqID0gMSArIGRzdF9jb2wgLSBXaWRlY0V4dChvbGluZS0+dGV4dFtzcmNfY29sXSk7CisJCSAgICBpZiAoaiA8IDApCisJCQlqID0gMDsKKwkJICAgIGlmIChkc3RfY29sID4gaikgeworCQkJc3JjX2NvbCAtPSAoZHN0X2NvbCAtIGopOworCQkJZHN0X2NvbCA9IGo7CisJCSAgICB9CisJCX0KKworCQkvKgorCQkgKiBFbnN1cmUgdGhhdCB3ZSB3aWxsIGNvcHkgY29tcGxldGUgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMKKwkJICogb24gdGhlIHJpZ2h0LWJvdW5kYXJ5LgorCQkgKi8KKwkJaiA9IGxhc3Rfc3JjOworCQlpZiAoV2lkZWNFeHQob2xpbmUtPnRleHRbal0pKSB7CisJCSAgICArK2o7CisJCSAgICB3aGlsZSAoaiA8PSBsaW1pdF94KSB7CisJCQlpZiAoaXNXaWRlY0Jhc2Uob2xpbmUtPnRleHRbal0pKSB7CisJCQkgICAgYnJlYWs7CisJCQl9IGVsc2UgeworCQkJICAgIGxhc3Rfc3JjID0gajsKKwkJCX0KKwkJCSsrajsKKwkJICAgIH0KKwkJfQorCSAgICB9KTsKKworCSAgICBpZl9XSURFQyh7CisJCXN0YXRpYyBjY2hhcl90IGJsYW5rID0gQkxBTks7CisJCWludCBsYXN0X2RzdCA9IGJlZ3ggKyAoKGxhc3Rfc3JjIDwgd2luLT5fbWF4eCkKKwkJCQkgICAgICAgPyBsYXN0X3NyYworCQkJCSAgICAgICA6IHdpbi0+X21heHgpOworCQlpbnQgZml4X2xlZnQgPSBkc3RfY29sOworCQlpbnQgZml4X3JpZ2h0ID0gbGFzdF9kc3Q7CisJCXJlZ2lzdGVyIGludCBqOworCisJCS8qCisJCSAqIENoZWNrIGZvciBib3VuZGFyeSBjYXNlcyB3aGVyZSB3ZSBtYXkgb3ZlcndyaXRlIHBhcnQgb2YgYQorCQkgKiBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyLiAgRm9yIHRob3NlLCB3aXBlIHRoZSByZW1haW5kZXIgb2YKKwkJICogdGhlIGNoYXJhY3RlciB0byBibGFua3MuCisJCSAqLworCQlqID0gZHN0X2NvbDsKKwkJaWYgKGlzV2lkZWNFeHQobmxpbmUtPnRleHRbal0pKSB7CisJCSAgICAvKgorCQkgICAgICogT24gdGhlIGxlZnQsIHdlIG9ubHkgY2FyZSBhYm91dCBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycworCQkgICAgICogdGhhdCBleHRlbmQgaW50byB0aGUgY2hhbmdlZCByZWdpb24uCisJCSAgICAgKi8KKwkJICAgIGZpeF9sZWZ0ID0gMSArIGogLSBXaWRlY0V4dChubGluZS0+dGV4dFtqXSk7CisJCSAgICBpZiAoZml4X2xlZnQgPCAwKQorCQkJZml4X2xlZnQgPSAwOwkvKiBvbmx5IGlmIGNlbGwgaXMgY29ycnVwdCAqLworCQl9CisKKwkJaiA9IGxhc3RfZHN0OworCQlpZiAoV2lkZWNFeHQobmxpbmUtPnRleHRbal0pICE9IDApIHsKKwkJICAgIC8qCisJCSAgICAgKiBPbiB0aGUgcmlnaHQsIGFueSBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyIGlzIGEgcHJvYmxlbSwKKwkJICAgICAqIHVubGVzcyBpdCBoYXBwZW5zIHRvIGJlIGNvbnRhaW5lZCBpbiB0aGUgY2hhbmdlLCBhbmQKKwkJICAgICAqIGVuZGluZyBhdCB0aGUgcmlnaHQgYm91bmRhcnkgb2YgdGhlIGNoYW5nZS4gIFRoZQorCQkgICAgICogY29tcHV0YXRpb24gZm9yICdmaXhfbGVmdCcgYWNjb3VudHMgZm9yIHRoZSBsZWZ0LXNpZGUgb2YKKwkJICAgICAqIHRoaXMgY2hhcmFjdGVyLiAgRmluZCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIuCisJCSAgICAgKi8KKwkJICAgICsrajsKKwkJICAgIHdoaWxlIChqIDw9IG5ld3Njci0+X21heHggJiYgaXNXaWRlY0V4dChubGluZS0+dGV4dFtqXSkpIHsKKwkJCWZpeF9yaWdodCA9IGorKzsKKwkJICAgIH0KKwkJfQorCisJCS8qCisJCSAqIFRoZSBhbmFseXNpcyBpcyBzaW1wbGVyIGlmIHdlIGRvIHRoZSBjbGVhcmluZyBhZnRlcndhcmRzLgorCQkgKiBEbyB0aGF0IG5vdy4KKwkJICovCisJCWlmIChmaXhfbGVmdCA8IGRzdF9jb2wgfHwgZml4X3JpZ2h0ID4gbGFzdF9kc3QpIHsKKwkJICAgIGZvciAoaiA9IGZpeF9sZWZ0OyBqIDw9IGZpeF9yaWdodDsgKytqKSB7CisJCQlubGluZS0+dGV4dFtqXSA9IGJsYW5rOworCQkJQ0hBTkdFRF9DRUxMKG5saW5lLCBqKTsKKwkJICAgIH0KKwkJfQorCSAgICB9KTsKKworCSAgICAvKgorCSAgICAgKiBDb3B5IHRoZSBjaGFuZ2VkIHRleHQuCisJICAgICAqLworCSAgICBmb3IgKDsgc3JjX2NvbCA8PSBsYXN0X3NyYzsgc3JjX2NvbCsrLCBkc3RfY29sKyspIHsKKwkJaWYgKCFDaGFyRXEob2xpbmUtPnRleHRbc3JjX2NvbF0sIG5saW5lLT50ZXh0W2RzdF9jb2xdKSkgeworCQkgICAgbmxpbmUtPnRleHRbZHN0X2NvbF0gPSBvbGluZS0+dGV4dFtzcmNfY29sXTsKKwkJICAgIENIQU5HRURfQ0VMTChubGluZSwgZHN0X2NvbCk7CisJCX0KKwkgICAgfQorCisJfQorI2lmIFVTRV9TQ1JPTExfSElOVFMKKwlpZiAod2lkZSkgeworCSAgICBpbnQgb2luZCA9IG9saW5lLT5vbGRpbmRleDsKKworCSAgICBubGluZS0+b2xkaW5kZXggPSAoKG9pbmQgPT0gX05FV0lOREVYKQorCQkJICAgICAgID8gX05FV0lOREVYCisJCQkgICAgICAgOiAoYmVneSArIG9pbmQgKyB3aW4tPl95b2Zmc2V0KSk7CisJfQorI2VuZGlmIC8qIFVTRV9TQ1JPTExfSElOVFMgKi8KKworCW9saW5lLT5maXJzdGNoYXIgPSBvbGluZS0+bGFzdGNoYXIgPSBfTk9DSEFOR0U7CisJaWZfVVNFX1NDUk9MTF9ISU5UUyhvbGluZS0+b2xkaW5kZXggPSBzcmNfcm93KTsKKyAgICB9CisKKyAgICBpZiAod2luLT5fY2xlYXIpIHsKKwl3aW4tPl9jbGVhciA9IEZBTFNFOworCW5ld3Njci0+X2NsZWFyID0gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoIXdpbi0+X2xlYXZlb2spIHsKKwluZXdzY3ItPl9jdXJ5ID0gd2luLT5fY3VyeSArIHdpbi0+X2JlZ3kgKyB3aW4tPl95b2Zmc2V0OworCW5ld3Njci0+X2N1cnggPSB3aW4tPl9jdXJ4ICsgd2luLT5fYmVneDsKKyAgICB9CisgICAgbmV3c2NyLT5fbGVhdmVvayA9IHdpbi0+X2xlYXZlb2s7CisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChVU0VfVFJBQ0VGKFRSQUNFX1VQREFURSkpIHsKKwlfdHJhY2VkdW1wKCJuZXdzY3IiLCBuZXdzY3IpOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmIC8qIFRSQUNFICovCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Jlc3RhcnQuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfcmVzdGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzcwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Jlc3RhcnQuYwpAQCAtMCwwICsxLDk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUZXJtaW5mby1vbmx5IHRlcm1pbmFsIHNldHVwIHJvdXRpbmVzOgorICoKKyAqCQlpbnQgcmVzdGFydHRlcm0oY29uc3QgY2hhciAqLCBpbnQsIGludCAqKQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaWYgU1ZSNF9URVJNSU8gJiYgIWRlZmluZWQoX1BPU0lYX1NPVVJDRSkKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmCisKKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBsaW5lcywgY29sdW1ucywgY3VyX3Rlcm0gKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9yZXN0YXJ0LmMsdiAxLjEwIDIwMDgvMDYvMjEgMTc6MzE6MjIgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorcmVzdGFydHRlcm0oTkNVUlNFU19DT05TVCBjaGFyICp0ZXJtcCwgaW50IGZpbGVudW0sIGludCAqZXJycmV0KQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBUKChUX0NBTExFRCgicmVzdGFydHRlcm0oJXMsJWQsJXApIiksIHRlcm1wLCBmaWxlbnVtLCBlcnJyZXQpKTsKKworICAgIGlmIChzZXR1cHRlcm0odGVybXAsIGZpbGVudW0sIGVycnJldCkgIT0gT0spIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfSBlbHNlIGlmIChTUCAhPSAwKSB7CisJaW50IHNhdmVlY2hvID0gU1AtPl9lY2hvOworCWludCBzYXZlY2JyZWFrID0gU1AtPl9jYnJlYWs7CisJaW50IHNhdmVyYXcgPSBTUC0+X3JhdzsKKwlpbnQgc2F2ZW5sID0gU1AtPl9ubDsKKworCWlmIChzYXZlZWNobykKKwkgICAgZWNobygpOworCWVsc2UKKwkgICAgbm9lY2hvKCk7CisKKwlpZiAoc2F2ZWNicmVhaykgeworCSAgICBjYnJlYWsoKTsKKwkgICAgbm9yYXcoKTsKKwl9IGVsc2UgaWYgKHNhdmVyYXcpIHsKKwkgICAgbm9jYnJlYWsoKTsKKwkgICAgcmF3KCk7CisJfSBlbHNlIHsKKwkgICAgbm9jYnJlYWsoKTsKKwkgICAgbm9yYXcoKTsKKwl9CisJaWYgKHNhdmVubCkKKwkgICAgbmwoKTsKKwllbHNlCisJICAgIG5vbmwoKTsKKworCXJlc2V0X3Byb2dfbW9kZSgpOworCisjaWYgVVNFX1NJWkVDSEFOR0UKKwlfbmNfdXBkYXRlX3NjcmVlbnNpemUoU1ApOworI2VuZGlmCisKKwlyZXN1bHQgPSBPSzsKKyAgICB9IGVsc2UgeworCXJlc3VsdCA9IEVSUjsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zY2Fudy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zY2Fudy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTVhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3NjYW53LmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCwyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3NjYW53LmMKKyoqCisqKglUaGUgcm91dGluZXMgc2NhbncoKSwgd3NjYW53KCkgYW5kIGZyaWVuZHMuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2NhbncuYyx2IDEuMTEgMjAwMS8wNi8zMCAyMzozOTo0MSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit2d3NjYW53KFdJTkRPVyAqd2luLCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdwKQoreworICAgIGNoYXIgYnVmW0JVRlNJWl07CisKKyAgICBpZiAod2dldG5zdHIod2luLCBidWYsIHNpemVvZihidWYpIC0gMSkgPT0gRVJSKQorCXJldHVybiAoRVJSKTsKKworICAgIHJldHVybiAodnNzY2FuZihidWYsIGZtdCwgYXJncCkpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzY2FudyhOQ1VSU0VTX0NPTlNUIGNoYXIgKmZtdCwuLi4pCit7CisgICAgaW50IGNvZGU7CisgICAgdmFfbGlzdCBhcDsKKworICAgIFQoKCJzY2FudyhcIiVzXCIsLi4uKSBjYWxsZWQiLCBmbXQpKTsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIGNvZGUgPSB2d3NjYW53KHN0ZHNjciwgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICByZXR1cm4gKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3c2NhbncoV0lORE9XICp3aW4sIE5DVVJTRVNfQ09OU1QgY2hhciAqZm10LC4uLikKK3sKKyAgICBpbnQgY29kZTsKKyAgICB2YV9saXN0IGFwOworCisgICAgVCgoIndzY2FudyglcCxcIiVzXCIsLi4uKSBjYWxsZWQiLCB3aW4sIGZtdCkpOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgY29kZSA9IHZ3c2Nhbncod2luLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIHJldHVybiAoY29kZSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK212c2NhbncoaW50IHksIGludCB4LCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmZtdCwuLi4pCit7CisgICAgaW50IGNvZGU7CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIGNvZGUgPSAobW92ZSh5LCB4KSA9PSBPSykgPyB2d3NjYW53KHN0ZHNjciwgZm10LCBhcCkgOiBFUlI7CisgICAgdmFfZW5kKGFwKTsKKyAgICByZXR1cm4gKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCittdndzY2FudyhXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmZtdCwuLi4pCit7CisgICAgaW50IGNvZGU7CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIGNvZGUgPSAod21vdmUod2luLCB5LCB4KSA9PSBPSykgPyB2d3NjYW53KHdpbiwgZm10LCBhcCkgOiBFUlI7CisgICAgdmFfZW5kKGFwKTsKKyAgICByZXR1cm4gKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zY3JlZW4uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhNThlYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2NyZWVuLmMKQEAgLTAsMCArMSwyMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2IG9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2NyZWVuLmMsdiAxLjMxIDIwMDgvMDgvMTYgMTk6MDU6MzcgdG9tIEV4cCAkIikKKworI2RlZmluZSBNQVhfU0laRSAweDNmZmYJCS8qIDE2ayBpcyBiaWcgZW5vdWdoIGZvciBhIHdpbmRvdyBvciBwYWQgKi8KKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitnZXR3aW4oRklMRSAqZmlsZXApCit7CisgICAgV0lORE9XIHRtcCwgKm53aW47CisgICAgaW50IG47CisKKyAgICBUKChUX0NBTExFRCgiZ2V0d2luKCVwKSIpLCBmaWxlcCkpOworCisgICAgY2xlYXJlcnIoZmlsZXApOworICAgICh2b2lkKSBmcmVhZCgmdG1wLCBzaXplb2YoV0lORE9XKSwgMSwgZmlsZXApOworICAgIGlmIChmZXJyb3IoZmlsZXApCisJfHwgdG1wLl9tYXh5ID09IDAKKwl8fCB0bXAuX21heHkgPiBNQVhfU0laRQorCXx8IHRtcC5fbWF4eCA9PSAwCisJfHwgdG1wLl9tYXh4ID4gTUFYX1NJWkUpCisJcmV0dXJuV2luKDApOworCisgICAgaWYgKHRtcC5fZmxhZ3MgJiBfSVNQQUQpIHsKKwlud2luID0gbmV3cGFkKHRtcC5fbWF4eSArIDEsIHRtcC5fbWF4eCArIDEpOworICAgIH0gZWxzZSB7CisJbndpbiA9IG5ld3dpbih0bXAuX21heHkgKyAxLCB0bXAuX21heHggKyAxLCAwLCAwKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlIGRlbGliZXJhdGVseSBkbyBub3QgcmVzdG9yZSB0aGUgX3BhcngsIF9wYXJ5LCBvciBfcGFyZW50CisgICAgICogZmllbGRzLCBiZWNhdXNlIHRoZSB3aW5kb3cgaGllcmFyY2h5IHdpdGhpbiB3aGljaCB0aGV5CisgICAgICogbWFkZSBzZW5zZSBpcyBwcm9iYWJseSBnb25lLgorICAgICAqLworICAgIGlmIChud2luICE9IDApIHsKKwlud2luLT5fY3VyeCA9IHRtcC5fY3VyeDsKKwlud2luLT5fY3VyeSA9IHRtcC5fY3VyeTsKKwlud2luLT5fbWF4eSA9IHRtcC5fbWF4eTsKKwlud2luLT5fbWF4eCA9IHRtcC5fbWF4eDsKKwlud2luLT5fYmVneSA9IHRtcC5fYmVneTsKKwlud2luLT5fYmVneCA9IHRtcC5fYmVneDsKKwlud2luLT5feW9mZnNldCA9IHRtcC5feW9mZnNldDsKKwlud2luLT5fZmxhZ3MgPSB0bXAuX2ZsYWdzICYgfihfU1VCV0lOKTsKKworCVdJTkRPV19BVFRSUyhud2luKSA9IFdJTkRPV19BVFRSUygmdG1wKTsKKwlud2luLT5fbmNfYmtnZCA9IHRtcC5fbmNfYmtnZDsKKworCW53aW4tPl9ub3RpbWVvdXQgPSB0bXAuX25vdGltZW91dDsKKwlud2luLT5fY2xlYXIgPSB0bXAuX2NsZWFyOworCW53aW4tPl9sZWF2ZW9rID0gdG1wLl9sZWF2ZW9rOworCW53aW4tPl9pZGxvayA9IHRtcC5faWRsb2s7CisJbndpbi0+X2lkY29rID0gdG1wLl9pZGNvazsKKwlud2luLT5faW1tZWQgPSB0bXAuX2ltbWVkOworCW53aW4tPl9zY3JvbGwgPSB0bXAuX3Njcm9sbDsKKwlud2luLT5fc3luYyA9IHRtcC5fc3luYzsKKwlud2luLT5fdXNlX2tleXBhZCA9IHRtcC5fdXNlX2tleXBhZDsKKwlud2luLT5fZGVsYXkgPSB0bXAuX2RlbGF5OworCisJbndpbi0+X3JlZ3RvcCA9IHRtcC5fcmVndG9wOworCW53aW4tPl9yZWdib3R0b20gPSB0bXAuX3JlZ2JvdHRvbTsKKworCWlmICh0bXAuX2ZsYWdzICYgX0lTUEFEKQorCSAgICBud2luLT5fcGFkID0gdG1wLl9wYWQ7CisKKwlmb3IgKG4gPSAwOyBuIDw9IG53aW4tPl9tYXh5OyBuKyspIHsKKwkgICAgY2xlYXJlcnIoZmlsZXApOworCSAgICAodm9pZCkgZnJlYWQobndpbi0+X2xpbmVbbl0udGV4dCwKKwkJCSBzaXplb2YoTkNVUlNFU19DSF9UKSwKKwkJCSAoc2l6ZV90KSAobndpbi0+X21heHggKyAxKSwKKwkJCSBmaWxlcCk7CisJICAgIGlmIChmZXJyb3IoZmlsZXApKSB7CisJCWRlbHdpbihud2luKTsKKwkJcmV0dXJuV2luKDApOworCSAgICB9CisJfQorCXRvdWNod2luKG53aW4pOworICAgIH0KKyAgICByZXR1cm5XaW4obndpbik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3B1dHdpbihXSU5ET1cgKndpbiwgRklMRSAqZmlsZXApCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgaW50IG47CisKKyAgICBUKChUX0NBTExFRCgicHV0d2luKCVwLCVwKSIpLCB3aW4sIGZpbGVwKSk7CisKKyAgICBpZiAod2luICE9IDApIHsKKwlzaXplX3QgbGVuID0gKHNpemVfdCkgKHdpbi0+X21heHggKyAxKTsKKworCWNsZWFyZXJyKGZpbGVwKTsKKwlpZiAoZndyaXRlKHdpbiwgc2l6ZW9mKFdJTkRPVyksIDEsIGZpbGVwKSAhPSAxCisJICAgIHx8IGZlcnJvcihmaWxlcCkpCisJICAgICAgcmV0dXJuQ29kZShjb2RlKTsKKworCWZvciAobiA9IDA7IG4gPD0gd2luLT5fbWF4eTsgbisrKSB7CisJICAgIGlmIChmd3JpdGUod2luLT5fbGluZVtuXS50ZXh0LAorCQkgICAgICAgc2l6ZW9mKE5DVVJTRVNfQ0hfVCksIGxlbiwgZmlsZXApICE9IGxlbgorCQl8fCBmZXJyb3IoZmlsZXApKSB7CisJCXJldHVybkNvZGUoY29kZSk7CisJICAgIH0KKwl9CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzY3JfcmVzdG9yZShjb25zdCBjaGFyICpmaWxlKQoreworICAgIEZJTEUgKmZwID0gMDsKKworICAgIFQoKFRfQ0FMTEVEKCJzY3JfcmVzdG9yZSglcykiKSwgX25jX3Zpc2J1ZihmaWxlKSkpOworCisgICAgaWYgKF9uY19hY2Nlc3MoZmlsZSwgUl9PSykgPCAwCisJfHwgKGZwID0gZm9wZW4oZmlsZSwgInJiIikpID09IDApIHsKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfSBlbHNlIHsKKwlkZWx3aW4obmV3c2NyKTsKKwlTUC0+X25ld3NjciA9IGdldHdpbihmcCk7CisjaWYgIVVTRV9SRUVOVFJBTlQKKwluZXdzY3IgPSBTUC0+X25ld3NjcjsKKyNlbmRpZgorCSh2b2lkKSBmY2xvc2UoZnApOworCXJldHVybkNvZGUoT0spOworICAgIH0KK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorc2NyX2R1bXAoY29uc3QgY2hhciAqZmlsZSkKK3sKKyAgICBGSUxFICpmcCA9IDA7CisKKyAgICBUKChUX0NBTExFRCgic2NyX2R1bXAoJXMpIiksIF9uY192aXNidWYoZmlsZSkpKTsKKworICAgIGlmIChfbmNfYWNjZXNzKGZpbGUsIFdfT0spIDwgMAorCXx8IChmcCA9IGZvcGVuKGZpbGUsICJ3YiIpKSA9PSAwKSB7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0gZWxzZSB7CisJKHZvaWQpIHB1dHdpbihuZXdzY3IsIGZwKTsKKwkodm9pZCkgZmNsb3NlKGZwKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Njcl9pbml0KGNvbnN0IGNoYXIgKmZpbGUpCit7CisgICAgRklMRSAqZnAgPSAwOworCisgICAgVCgoVF9DQUxMRUQoInNjcl9pbml0KCVzKSIpLCBfbmNfdmlzYnVmKGZpbGUpKSk7CisKKyAgICBpZiAoZXhpdF9jYV9tb2RlICYmIG5vbl9yZXZfcm1jdXApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgaWYgKF9uY19hY2Nlc3MoZmlsZSwgUl9PSykgPCAwCisJfHwgKGZwID0gZm9wZW4oZmlsZSwgInJiIikpID09IDApIHsKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfSBlbHNlIHsKKwlkZWx3aW4oY3Vyc2NyKTsKKwlTUC0+X2N1cnNjciA9IGdldHdpbihmcCk7CisjaWYgIVVTRV9SRUVOVFJBTlQKKwljdXJzY3IgPSBTUC0+X2N1cnNjcjsKKyNlbmRpZgorCSh2b2lkKSBmY2xvc2UoZnApOworCXJldHVybkNvZGUoT0spOworICAgIH0KK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorc2NyX3NldChjb25zdCBjaGFyICpmaWxlKQoreworICAgIFQoKFRfQ0FMTEVEKCJzY3Jfc2V0KCVzKSIpLCBfbmNfdmlzYnVmKGZpbGUpKSk7CisKKyAgICBpZiAoc2NyX2luaXQoZmlsZSkgPT0gRVJSKSB7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0gZWxzZSB7CisJZGVsd2luKG5ld3Njcik7CisJU1AtPl9uZXdzY3IgPSBkdXB3aW4oY3Vyc2NyKTsKKyNpZiAhVVNFX1JFRU5UUkFOVAorCW5ld3NjciA9IFNQLT5fbmV3c2NyOworI2VuZGlmCisJcmV0dXJuQ29kZShPSyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zY3JvbGwuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2Nyb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4NWJkNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2Nyb2xsLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYtMjAwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9zY3JvbGwuYworKioKKyoqCVRoZSByb3V0aW5lIHdzY3JsKHdpbiwgbikuCisqKiAgcG9zaXRpdmUgbiBzY3JvbGwgdGhlIHdpbmRvdyB1cCAoaWUuIG1vdmUgbGluZXMgZG93bikKKyoqICBuZWdhdGl2ZSBuIHNjcm9sbCB0aGUgd2luZG93IGRvd24gKGllLiBtb3ZlIGxpbmVzIHVwKQorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Njcm9sbC5jLHYgMS4yNiAyMDA2LzEwLzE0IDIwOjQ2OjA4IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2Nyb2xsX3dpbmRvdyhXSU5ET1cgKndpbiwKKwkJICBpbnQgY29uc3QgbiwKKwkJICBOQ1VSU0VTX1NJWkVfVCBjb25zdCB0b3AsCisJCSAgTkNVUlNFU19TSVpFX1QgY29uc3QgYm90dG9tLAorCQkgIE5DVVJTRVNfQ0hfVCBibGFuaykKK3sKKyAgICBpbnQgbGltaXQ7CisgICAgaW50IGxpbmU7CisgICAgaW50IGo7CisgICAgc2l6ZV90IHRvX2NvcHkgPSAoc2l6ZV90KSAoc2l6ZW9mKE5DVVJTRVNfQ0hfVCkgKiAod2luLT5fbWF4eCArIDEpKTsKKworICAgIFRSKFRSQUNFX01PVkUsICgiX25jX3Njcm9sbF93aW5kb3coJXAsICVkLCAlbGQsICVsZCkiLAorCQkgICAgd2luLCBuLCAobG9uZykgdG9wLCAobG9uZykgYm90dG9tKSk7CisKKyAgICBpZiAodG9wIDwgMAorCXx8IGJvdHRvbSA8IHRvcAorCXx8IGJvdHRvbSA+IHdpbi0+X21heHkpIHsKKwlUUihUUkFDRV9NT1ZFLCAoIm5vdGhpbmcgdG8gc2Nyb2xsIikpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoaXMgdXNlZCB0byBkbyBhIGxpbmUtdGV4dCBwb2ludGVyLXNodWZmbGUgaW5zdGVhZCBvZiB0ZXh0IGNvcGllcy4KKyAgICAgKiBUaGF0IChhKSBkb2Vzbid0IHdvcmsgd2hlbiB0aGUgd2luZG93IGlzIGRlcml2ZWQgYW5kIGRvZXNuJ3QgaGF2ZQorICAgICAqIGl0cyBvd24gc3RvcmFnZSwgKGIpIGRvZXNuJ3Qgc2F2ZSB5b3UgYSBsb3Qgb24gbW9kZXJuIG1hY2hpbmVzCisgICAgICogYW55d2F5LiAgWW91ciB0eXBpY2FsIG1lbWNweSBpbXBsZW1lbnRhdGlvbnMgYXJlIGNvZGVkIGluCisgICAgICogYXNzZW1ibGVyIHVzaW5nIGEgdGlnaHQgQkxUIGxvb3A7IGZvciB0aGUgc2l6ZSBvZiBjb3BpZXMgd2UncmUKKyAgICAgKiB0YWxraW5nIGhlcmUsIHRoZSB0b3RhbCBleGVjdXRpb24gdGltZSBpcyBkb21pbmF0ZWQgYnkgdGhlIG9uZS10aW1lCisgICAgICogc2V0dXAgY29zdC4gIFNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHRyeWluZyB0byBiZSBleGNlc3NpdmVseQorICAgICAqIGNsZXZlciAtLSBlc3IuCisgICAgICovCisKKyAgICAvKiBzaGlmdCBuIGxpbmVzIGRvd253YXJkcyAqLworICAgIGlmIChuIDwgMCkgeworCWxpbWl0ID0gdG9wIC0gbjsKKwlmb3IgKGxpbmUgPSBib3R0b207IGxpbmUgPj0gbGltaXQgJiYgbGluZSA+PSAwOyBsaW5lLS0pIHsKKwkgICAgVFIoVFJBQ0VfTU9WRSwgKCIuLi5jb3B5aW5nICVkIHRvICVkIiwgbGluZSArIG4sIGxpbmUpKTsKKwkgICAgbWVtY3B5KHdpbi0+X2xpbmVbbGluZV0udGV4dCwKKwkJICAgd2luLT5fbGluZVtsaW5lICsgbl0udGV4dCwKKwkJICAgdG9fY29weSk7CisJICAgIGlmX1VTRV9TQ1JPTExfSElOVFMod2luLT5fbGluZVtsaW5lXS5vbGRpbmRleCA9CisJCQkJd2luLT5fbGluZVtsaW5lICsgbl0ub2xkaW5kZXgpOworCX0KKwlmb3IgKGxpbmUgPSB0b3A7IGxpbmUgPCBsaW1pdCAmJiBsaW5lIDw9IHdpbi0+X21heHk7IGxpbmUrKykgeworCSAgICBUUihUUkFDRV9NT1ZFLCAoIi4uLmZpbGxpbmcgJWQiLCBsaW5lKSk7CisJICAgIGZvciAoaiA9IDA7IGogPD0gd2luLT5fbWF4eDsgaisrKQorCQl3aW4tPl9saW5lW2xpbmVdLnRleHRbal0gPSBibGFuazsKKwkgICAgaWZfVVNFX1NDUk9MTF9ISU5UUyh3aW4tPl9saW5lW2xpbmVdLm9sZGluZGV4ID0gX05FV0lOREVYKTsKKwl9CisgICAgfQorCisgICAgLyogc2hpZnQgbiBsaW5lcyB1cHdhcmRzICovCisgICAgaWYgKG4gPiAwKSB7CisJbGltaXQgPSBib3R0b20gLSBuOworCWZvciAobGluZSA9IHRvcDsgbGluZSA8PSBsaW1pdCAmJiBsaW5lIDw9IHdpbi0+X21heHk7IGxpbmUrKykgeworCSAgICBtZW1jcHkod2luLT5fbGluZVtsaW5lXS50ZXh0LAorCQkgICB3aW4tPl9saW5lW2xpbmUgKyBuXS50ZXh0LAorCQkgICB0b19jb3B5KTsKKwkgICAgaWZfVVNFX1NDUk9MTF9ISU5UUyh3aW4tPl9saW5lW2xpbmVdLm9sZGluZGV4ID0KKwkJCQl3aW4tPl9saW5lW2xpbmUgKyBuXS5vbGRpbmRleCk7CisJfQorCWZvciAobGluZSA9IGJvdHRvbTsgbGluZSA+IGxpbWl0ICYmIGxpbmUgPj0gMDsgbGluZS0tKSB7CisJICAgIGZvciAoaiA9IDA7IGogPD0gd2luLT5fbWF4eDsgaisrKQorCQl3aW4tPl9saW5lW2xpbmVdLnRleHRbal0gPSBibGFuazsKKwkgICAgaWZfVVNFX1NDUk9MTF9ISU5UUyh3aW4tPl9saW5lW2xpbmVdLm9sZGluZGV4ID0gX05FV0lOREVYKTsKKwl9CisgICAgfQorICAgIHRvdWNobGluZSh3aW4sIHRvcCwgYm90dG9tIC0gdG9wICsgMSk7CisKKyAgICBpZl9XSURFQyh7CisJaWYgKFdJTkRPV19FWFQod2luLCBhZGRjaF91c2VkKSAhPSAwKSB7CisJICAgIGludCBuZXh0ID0gV0lORE9XX0VYVCh3aW4sIGFkZGNoX3kpICsgbjsKKwkgICAgaWYgKG5leHQgPCAwIHx8IG5leHQgPiB3aW4tPl9tYXh5KSB7CisJCVRSKFRSQUNFX1ZJUlRQVVQsCisJCSAgICgiQWxlcnQgZGlzY2FyZGVkIG11bHRpYnl0ZSBvbiBzY3JvbGwiKSk7CisJCVdJTkRPV19FWFQod2luLCBhZGRjaF95KSA9IDA7CisJICAgIH0gZWxzZSB7CisJCVRSKFRSQUNFX1ZJUlRQVVQsICgic2Nyb2xsZWQgd29ya2luZyBwb3NpdGlvbiB0byAlZCwlZCIsCisJCQkJICAgV0lORE9XX0VYVCh3aW4sIGFkZGNoX3kpLAorCQkJCSAgIFdJTkRPV19FWFQod2luLCBhZGRjaF94KSkpOworCQlXSU5ET1dfRVhUKHdpbiwgYWRkY2hfeSkgPSBuZXh0OworCSAgICB9CisJfQorICAgIH0pCit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dzY3JsKFdJTkRPVyAqd2luLCBpbnQgbikKK3sKKyAgICBUKChUX0NBTExFRCgid3NjcmwoJXAsJWQpIiksIHdpbiwgbikpOworCisgICAgaWYgKCF3aW4gfHwgIXdpbi0+X3Njcm9sbCkgeworCVRSKFRSQUNFX01PVkUsICgiLi4uc2Nyb2xsb2sgaXMgZmFsc2UiKSk7CisJcmV0dXJuQ29kZShFUlIpOworICAgIH0KKworICAgIGlmIChuICE9IDApIHsKKwlfbmNfc2Nyb2xsX3dpbmRvdyh3aW4sIG4sIHdpbi0+X3JlZ3RvcCwgd2luLT5fcmVnYm90dG9tLCB3aW4tPl9uY19ia2dkKTsKKwlfbmNfc3luY2hvb2sod2luKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Njcm9sbG9rLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Njcm9sbG9rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiMzAyNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2Nyb2xsb2suYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9zY3JvbGxvay5jCisqKgorKioJVGhlIHJvdXRpbmUgc2Nyb2xsb2suCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2Nyb2xsb2suYyx2IDEuNCAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Njcm9sbG9rKFdJTkRPVyAqd2luLCBib29sIGZsYWcpCit7CisgICAgVCgoVF9DQUxMRUQoInNjcm9sbG9rKCVwLCVkKSIpLCB3aW4sIGZsYWcpKTsKKworICAgIGlmICh3aW4pIHsKKwl3aW4tPl9zY3JvbGwgPSBmbGFnOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2NycmVnLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3NjcnJlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWQ2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3NjcnJlZy5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3NjcnJlZy5jCisqKgorKioJVGhlIHJvdXRpbmUgd3NldHNjcnJlZygpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3NjcnJlZy5jLHYgMS4xMCAyMDAwLzEyLzEwIDAyOjQzOjI3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dzZXRzY3JyZWcoV0lORE9XICp3aW4sIGludCB0b3AsIGludCBib3R0b20pCit7CisgICAgVCgoVF9DQUxMRUQoIndzZXRzY3JyZWcoJXAsJWQsJWQpIiksIHdpbiwgdG9wLCBib3R0b20pKTsKKworICAgIGlmICh3aW4gJiYKKwl0b3AgPj0gMCAmJiB0b3AgPD0gd2luLT5fbWF4eSAmJgorCWJvdHRvbSA+PSAwICYmIGJvdHRvbSA8PSB3aW4tPl9tYXh5ICYmCisJYm90dG9tID4gdG9wKSB7CisJd2luLT5fcmVndG9wID0gKE5DVVJTRVNfU0laRV9UKSB0b3A7CisJd2luLT5fcmVnYm90dG9tID0gKE5DVVJTRVNfU0laRV9UKSBib3R0b207CisKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3NldF90ZXJtLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3NldF90ZXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmNDMyYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2V0X3Rlcm0uYwpAQCAtMCwwICsxLDY0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3NldF90ZXJtLmMKKyoqCisqKglUaGUgcm91dGluZSBzZXRfdGVybSgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGVybS5oPgkJLyogY3VyX3Rlcm0gKi8KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zZXRfdGVybS5jLHYgMS4xMTcgMjAwOC8wOC8wNCAxODoxMToxMiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikKK3NldF90ZXJtKFNDUkVFTiAqc2NyZWVucCkKK3sKKyAgICBTQ1JFRU4gKm9sZFNQOworICAgIFNDUkVFTiAqbmV3U1A7CisKKyAgICBUKChUX0NBTExFRCgic2V0X3Rlcm0oJXApIiksIHNjcmVlbnApKTsKKworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgb2xkU1AgPSBTUDsKKyAgICBfbmNfc2V0X3NjcmVlbihzY3JlZW5wKTsKKyAgICBuZXdTUCA9IFNQOworCisgICAgaWYgKG5ld1NQICE9IDApIHsKKwlzZXRfY3VydGVybShuZXdTUC0+X3Rlcm0pOworI2lmICFVU0VfUkVFTlRSQU5UCisJY3Vyc2NyID0gbmV3U1AtPl9jdXJzY3I7CisJbmV3c2NyID0gbmV3U1AtPl9uZXdzY3I7CisJc3Rkc2NyID0gbmV3U1AtPl9zdGRzY3I7CisJQ09MT1JTID0gbmV3U1AtPl9jb2xvcl9jb3VudDsKKwlDT0xPUl9QQUlSUyA9IG5ld1NQLT5fcGFpcl9jb3VudDsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisJc2V0X2N1cnRlcm0oMCk7CisjaWYgIVVTRV9SRUVOVFJBTlQKKwljdXJzY3IgPSAwOworCW5ld3NjciA9IDA7CisJc3Rkc2NyID0gMDsKKwlDT0xPUlMgPSAwOworCUNPTE9SX1BBSVJTID0gMDsKKyNlbmRpZgorICAgIH0KKworICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKyAgICBUKChUX1JFVFVSTigiJXAiKSwgb2xkU1ApKTsKKyAgICByZXR1cm4gKG9sZFNQKTsKK30KKworc3RhdGljIHZvaWQKK19uY19mcmVlX2tleXRyeShUUklFUyAqIGt0KQoreworICAgIGlmIChrdCAhPSAwKSB7CisJX25jX2ZyZWVfa2V5dHJ5KGt0LT5jaGlsZCk7CisJX25jX2ZyZWVfa2V5dHJ5KGt0LT5zaWJsaW5nKTsKKwlmcmVlKGt0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sCitkZWxpbmtfc2NyZWVuKFNDUkVFTiAqc3ApCit7CisgICAgU0NSRUVOICpsYXN0ID0gMDsKKyAgICBTQ1JFRU4gKnRlbXA7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKworICAgIGZvciAoZWFjaF9zY3JlZW4odGVtcCkpIHsKKwlpZiAodGVtcCA9PSBzcCkgeworCSAgICBpZiAobGFzdCkKKwkJbGFzdCA9IHNwLT5fbmV4dF9zY3JlZW47CisJICAgIGVsc2UKKwkJX25jX3NjcmVlbl9jaGFpbiA9IHNwLT5fbmV4dF9zY3JlZW47CisJICAgIHJlc3VsdCA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKwlsYXN0ID0gdGVtcDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEZyZWUgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBTQ1JFRU4gc3AuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitkZWxzY3JlZW4oU0NSRUVOICpzcCkKK3sKKyAgICBpbnQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJkZWxzY3JlZW4oJXApIiksIHNwKSk7CisKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICBpZiAoZGVsaW5rX3NjcmVlbihzcCkpIHsKKworCSh2b2lkKSBfbmNfZnJlZXdpbihzcC0+X2N1cnNjcik7CisJKHZvaWQpIF9uY19mcmVld2luKHNwLT5fbmV3c2NyKTsKKwkodm9pZCkgX25jX2ZyZWV3aW4oc3AtPl9zdGRzY3IpOworCisJaWYgKHNwLT5fc2xrICE9IDApIHsKKwkgICAgaWYgKHNwLT5fc2xrLT5lbnQgIT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPl9zbGstPmxhYmNudDsgKytpKSB7CisJCSAgICBGcmVlSWZOZWVkZWQoc3AtPl9zbGstPmVudFtpXS5lbnRfdGV4dCk7CisJCSAgICBGcmVlSWZOZWVkZWQoc3AtPl9zbGstPmVudFtpXS5mb3JtX3RleHQpOworCQl9CisJCWZyZWUoc3AtPl9zbGstPmVudCk7CisJICAgIH0KKwkgICAgZnJlZShzcC0+X3Nsayk7CisJICAgIHNwLT5fc2xrID0gMDsKKwl9CisKKwlfbmNfZnJlZV9rZXl0cnkoc3AtPl9rZXl0cnkpOworCXNwLT5fa2V5dHJ5ID0gMDsKKworCV9uY19mcmVlX2tleXRyeShzcC0+X2tleV9vayk7CisJc3AtPl9rZXlfb2sgPSAwOworCisJRnJlZUlmTmVlZGVkKHNwLT5fY3VycmVudF9hdHRyKTsKKworCUZyZWVJZk5lZWRlZChzcC0+X2NvbG9yX3RhYmxlKTsKKwlGcmVlSWZOZWVkZWQoc3AtPl9jb2xvcl9wYWlycyk7CisKKwlGcmVlSWZOZWVkZWQoc3AtPm9sZGhhc2gpOworCUZyZWVJZk5lZWRlZChzcC0+bmV3aGFzaCk7CisJRnJlZUlmTmVlZGVkKHNwLT5oYXNodGFiKTsKKworCUZyZWVJZk5lZWRlZChzcC0+X2Fjc19tYXApOworCUZyZWVJZk5lZWRlZChzcC0+X3NjcmVlbl9hY3NfbWFwKTsKKworCS8qCisJICogSWYgdGhlIGFzc29jaWF0ZWQgb3V0cHV0IHN0cmVhbSBoYXMgYmVlbiBjbG9zZWQsIHdlIGNhbiBkaXNjYXJkIHRoZQorCSAqIHNldC1idWZmZXIuICBMaW1pdCB0aGUgZXJyb3IgY2hlY2sgdG8gRUJBREYsIHNpbmNlIGZmbHVzaCBtYXkgZmFpbAorCSAqIGZvciBvdGhlciByZWFzb25zIHRoYW4gdHJ5aW5nIHRvIG9wZXJhdGUgdXBvbiBhIGNsb3NlZCBzdHJlYW0uCisJICovCisJaWYgKHNwLT5fb2ZwICE9IDAKKwkgICAgJiYgc3AtPl9zZXRidWYgIT0gMAorCSAgICAmJiBmZmx1c2goc3AtPl9vZnApICE9IDAKKwkgICAgJiYgZXJybm8gPT0gRUJBREYpIHsKKwkgICAgZnJlZShzcC0+X3NldGJ1Zik7CisJfQorCisJZGVsX2N1cnRlcm0oc3AtPl90ZXJtKTsKKwlmcmVlKHNwKTsKKworCS8qCisJICogSWYgdGhpcyB3YXMgdGhlIGN1cnJlbnQgc2NyZWVuLCByZXNldCBldmVyeXRoaW5nIHRoYXQgdGhlCisJICogYXBwbGljYXRpb24gbWlnaHQgdHJ5IHRvIHVzZSAoZXhjZXB0IGN1cl90ZXJtLCB3aGljaCBtYXkgaGF2ZQorCSAqIG11bHRpcGxlIHJlZmVyZW5jZXMgaW4gZGlmZmVyZW50IHNjcmVlbnMpLgorCSAqLworCWlmIChzcCA9PSBTUCkgeworI2lmICFVU0VfUkVFTlRSQU5UCisJICAgIGN1cnNjciA9IDA7CisJICAgIG5ld3NjciA9IDA7CisJICAgIHN0ZHNjciA9IDA7CisJICAgIENPTE9SUyA9IDA7CisJICAgIENPTE9SX1BBSVJTID0gMDsKKyNlbmRpZgorCSAgICBfbmNfc2V0X3NjcmVlbigwKTsKKwl9CisgICAgfQorICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKyAgICByZXR1cm5Wb2lkOworfQorCitzdGF0aWMgYm9vbAorbm9fbW91c2VfZXZlbnQoU0NSRUVOICpzcCBHQ0NfVU5VU0VEKQoreworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGJvb2wKK25vX21vdXNlX2lubGluZShTQ1JFRU4gKnNwIEdDQ19VTlVTRUQpCit7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgYm9vbAorbm9fbW91c2VfcGFyc2UoU0NSRUVOICpzcCBHQ0NfVU5VU0VELCBpbnQgY29kZSBHQ0NfVU5VU0VEKQoreworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorbm9fbW91c2VfcmVzdW1lKFNDUkVFTiAqc3AgR0NDX1VOVVNFRCkKK3sKK30KKworc3RhdGljIHZvaWQKK25vX21vdXNlX3dyYXAoU0NSRUVOICpzcCBHQ0NfVU5VU0VEKQoreworfQorCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MgJiYgVVNFX0NPTE9SRkdCRworc3RhdGljIGNoYXIgKgorZXh0cmFjdF9mZ2JnKGNoYXIgKnNyYywgaW50ICpyZXN1bHQpCit7CisgICAgY2hhciAqZHN0ID0gMDsKKyAgICBsb25nIHZhbHVlID0gc3RydG9sKHNyYywgJmRzdCwgMCk7CisKKyAgICBpZiAoZHN0ID09IDApIHsKKwlkc3QgPSBzcmM7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAwKSB7CisJKnJlc3VsdCA9IHZhbHVlOworICAgIH0KKyAgICB3aGlsZSAoKmRzdCAhPSAwICYmICpkc3QgIT0gJzsnKQorCWRzdCsrOworICAgIGlmICgqZHN0ID09ICc7JykKKwlkc3QrKzsKKyAgICByZXR1cm4gZHN0OworfQorI2VuZGlmCisKKy8qIE9TLWluZGVwZW5kZW50IHNjcmVlbiBpbml0aWFsaXphdGlvbnMgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19zZXR1cHNjcmVlbihpbnQgc2xpbmVzIEdDQ19VTlVTRUQsCisJCWludCBzY29sdW1ucyBHQ0NfVU5VU0VELAorCQlGSUxFICpvdXRwdXQsCisJCWJvb2wgZmlsdGVyZWQsCisJCWludCBzbGtfZm9ybWF0KQoreworICAgIGNoYXIgKmVudjsKKyAgICBpbnQgYm90dG9tX3N0b2xlbiA9IDA7CisgICAgYm9vbCBzdXBwb3J0X2Nvb2tpZXMgPSBVU0VfWE1DX1NVUFBPUlQ7CisgICAgcmlwb2ZmX3QgKnJvcDsKKworICAgIFQoKFRfQ0FMTEVEKCJfbmNfc2V0dXBzY3JlZW4oJWQsICVkLCAlcCwgJWQsICVkKSIpLAorICAgICAgIHNsaW5lcywgc2NvbHVtbnMsIG91dHB1dCwgZmlsdGVyZWQsIHNsa19mb3JtYXQpKTsKKworICAgIGFzc2VydChTUCA9PSAwKTsJCS8qIGhhcyBiZWVuIHJlc2V0IGluIG5ld3Rlcm0oKSAhICovCisgICAgaWYgKCFfbmNfYWxsb2Nfc2NyZWVuKCkKKwl8fCAoKFNQLT5fYWNzX21hcCA9IHR5cGVDYWxsb2MoY2h0eXBlLCBBQ1NfTEVOKSkgPT0gMCkKKwl8fCAoKFNQLT5fc2NyZWVuX2Fjc19tYXAgPSB0eXBlQ2FsbG9jKGJvb2wsIEFDU19MRU4pKSA9PSAwKSkgeworCXJldHVybkNvZGUoRVJSKTsKKyAgICB9CisKKyAgICBUKCgiY3JlYXRlZCBTUCAlcCIsIFNQKSk7CisgICAgU1AtPl9uZXh0X3NjcmVlbiA9IF9uY19zY3JlZW5fY2hhaW47CisgICAgX25jX3NjcmVlbl9jaGFpbiA9IFNQOworCisgICAgaWYgKChTUC0+X2N1cnJlbnRfYXR0ciA9IHR5cGVDYWxsb2MoTkNVUlNFU19DSF9ULCAxKSkgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICAvKgorICAgICAqIFdlIHNob3VsZCBhbHdheXMgY2hlY2sgdGhlIHNjcmVlbnNpemUsIGp1c3QgaW4gY2FzZS4KKyAgICAgKi8KKyAgICBfbmNfZ2V0X3NjcmVlbnNpemUoU1AsICZzbGluZXMsICZzY29sdW1ucyk7CisgICAgU0VUX0xJTkVTKHNsaW5lcyk7CisgICAgU0VUX0NPTFMoc2NvbHVtbnMpOworICAgIFQoKFRfQ1JFQVRFKCJzY3JlZW4gJXMgJWR4JWQiKSwgdGVybW5hbWUoKSwgTElORVMsIENPTFMpKTsKKworICAgIFNQLT5fZmlsdGVyZWQgPSBmaWx0ZXJlZDsKKworICAgIC8qIGltcGxlbWVudCBmaWx0ZXIgbW9kZSAqLworICAgIGlmIChmaWx0ZXJlZCkgeworCXNsaW5lcyA9IDE7CisJU0VUX0xJTkVTKHNsaW5lcyk7CisJY2xlYXJfc2NyZWVuID0gMDsKKwljdXJzb3JfZG93biA9IHBhcm1fZG93bl9jdXJzb3IgPSAwOworCWN1cnNvcl9hZGRyZXNzID0gMDsKKwljdXJzb3JfdXAgPSBwYXJtX3VwX2N1cnNvciA9IDA7CisJcm93X2FkZHJlc3MgPSAwOworCisJY3Vyc29yX2hvbWUgPSBjYXJyaWFnZV9yZXR1cm47CisJVCgoImZpbHRlciBzY3JlZW5zaXplICVkeCVkIiwgTElORVMsIENPTFMpKTsKKyAgICB9CisjaWZkZWYgX19ESkdQUF9fCisgICAgVCgoInNldHRpbmcgb3V0cHV0IG1vZGUgdG8gYmluYXJ5IikpOworICAgIGZmbHVzaChvdXRwdXQpOworICAgIHNldG1vZGUob3V0cHV0LCBPX0JJTkFSWSk7CisjZW5kaWYKKyAgICBfbmNfc2V0X2J1ZmZlcihvdXRwdXQsIFRSVUUpOworICAgIFNQLT5fdGVybSA9IGN1cl90ZXJtOworICAgIFNQLT5fbGluZXMgPSBzbGluZXM7CisgICAgU1AtPl9saW5lc19hdmFpbCA9IHNsaW5lczsKKyAgICBTUC0+X2NvbHVtbnMgPSBzY29sdW1uczsKKyAgICBTUC0+X2N1cnNyb3cgPSAtMTsKKyAgICBTUC0+X2N1cnNjb2wgPSAtMTsKKyAgICBTUC0+X25sID0gVFJVRTsKKyAgICBTUC0+X3JhdyA9IEZBTFNFOworICAgIFNQLT5fY2JyZWFrID0gMDsKKyAgICBTUC0+X2VjaG8gPSBUUlVFOworICAgIFNQLT5fZmlmb2hlYWQgPSAtMTsKKyAgICBTUC0+X2VuZHdpbiA9IFRSVUU7CisgICAgU1AtPl9vZnAgPSBvdXRwdXQ7CisgICAgU1AtPl9jdXJzb3IgPSAtMTsJCS8qIGNhbm5vdCBrbm93IHJlYWwgY3Vyc29yIHNoYXBlICovCisKKyAgICBTZXROb1BhZGRpbmcoU1ApOworCisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICBTUC0+X2RlZmF1bHRfY29sb3IgPSBGQUxTRTsKKyAgICBTUC0+X2hhc19zZ3JfMzlfNDkgPSBGQUxTRTsKKworICAgIC8qCisgICAgICogU2V0IG91ciBhc3N1bXB0aW9uIG9mIHRoZSB0ZXJtaW5hbCdzIGRlZmF1bHQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZAorICAgICAqIGNvbG9ycy4gIFRoZSBjdXJzX2NvbG9yIG1hbi1wYWdlIHN0YXRlcyB0aGF0IHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUKKyAgICAgKiBiYWNrZ3JvdW5kIGlzIGJsYWNrLiAgVGhlIG9yaWdpbiBvZiB0aGlzIGFzc3VtcHRpb24gYXBwZWFycyB0byBiZQorICAgICAqIHRlcm1pbmFscyB0aGF0IGRpc3BsYXllZCBjb2xvcmVkIHRleHQsIGJ1dCBubyBjb2xvcmVkIGJhY2tncm91bmRzLCBlLmcuLAorICAgICAqIHRoZSBmaXJzdCBjb2xvcmVkIHRlcm1pbmFscyBhcm91bmQgMTk4MC4gIE1vcmUgcmVjZW50IG9uZXMgd2l0aCBiZXR0ZXIKKyAgICAgKiB0ZWNobm9sb2d5IGNhbiBkaXNwbGF5IG5vdCBvbmx5IGNvbG9yZWQgYmFja2dyb3VuZHMsIGJ1dCBhbGwKKyAgICAgKiBjb21iaW5hdGlvbnMuICBTbyBhIHRlcm1pbmFsIG1pZ2h0IGJlIHNvbWV0aGluZyBvdGhlciB0aGFuICJ3aGl0ZSIgb24KKyAgICAgKiBibGFjayAoZ3JlZW4vYmxhY2sgbG9va3MgbW9ub2Nocm9tZSB0b28pLCBidXQgYmxhY2sgb24gd2hpdGUgb3IgZXZlbgorICAgICAqIG9uIGl2b3J5LgorICAgICAqCisgICAgICogV2hpdGUtb24tYmxhY2sgaXMgdGhlIHNpbXBsZXN0IHRoaW5nIHRvIHVzZSBmb3IgbW9ub2Nocm9tZS4gIEFsbW9zdAorICAgICAqIGFsbCBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgY29sb3IgcGFpbnQgYm90aCB0ZXh0IGFuZCBiYWNrZ3JvdW5kLCBzbworICAgICAqIHRoZSBkaXN0aW5jdGlvbiBpcyBtb290LiAgQnV0IGEgZmV3IGRvIG5vdCAtIHdoaWNoIGlzIHdoeSB3ZSBsZWF2ZSB0aGlzCisgICAgICogY29uZmlndXJhYmxlIChhIGJldHRlciBzb2x1dGlvbiBpcyB0byB1c2UgYXNzdW1lX2RlZmF1bHRfY29sb3JzKCkgZm9yCisgICAgICogdGhlIHJhcmUgYXBwbGljYXRpb25zIHRoYXQgZG8gcmVxdWlyZSB0aGF0IHNvcnQgb2YgYXBwZWFyYW5jZSwgc2luY2UKKyAgICAgKiBpcyBhcHBlYXJzIHRoYXQgbW9yZSB1c2VycyBleHBlY3QgdG8gYmUgYWJsZSB0byBtYWtlIGEgd2hpdGUtb24tYmxhY2sKKyAgICAgKiBvciBibGFjay1vbi13aGl0ZSBkaXNwbGF5IHVuZGVyIGNvbnRyb2wgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYW4gbm90KS4KKyAgICAgKi8KKyNpZmRlZiBVU0VfQVNTVU1FRF9DT0xPUgorICAgIFNQLT5fZGVmYXVsdF9mZyA9IENPTE9SX1dISVRFOworICAgIFNQLT5fZGVmYXVsdF9iZyA9IENPTE9SX0JMQUNLOworI2Vsc2UKKyAgICBTUC0+X2RlZmF1bHRfZmcgPSBDX01BU0s7CisgICAgU1AtPl9kZWZhdWx0X2JnID0gQ19NQVNLOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIEFsbG93IHRob3NlIGFzc3VtZWQvZGVmYXVsdCBjb2xvciBhc3N1bXB0aW9ucyB0byBiZSBvdmVycmlkZGVuIGF0CisgICAgICogcnVudGltZToKKyAgICAgKi8KKyAgICBpZiAoKGVudiA9IGdldGVudigiTkNVUlNFU19BU1NVTUVEX0NPTE9SUyIpKSAhPSAwKSB7CisJaW50IGZnLCBiZzsKKwljaGFyIHNlcDEsIHNlcDI7CisJaW50IGNvdW50ID0gc3NjYW5mKGVudiwgIiVkJWMlZCVjIiwgJmZnLCAmc2VwMSwgJmJnLCAmc2VwMik7CisJaWYgKGNvdW50ID49IDEpIHsKKwkgICAgU1AtPl9kZWZhdWx0X2ZnID0gKGZnID49IDAgJiYgZmcgPCBtYXhfY29sb3JzKSA/IGZnIDogQ19NQVNLOworCSAgICBpZiAoY291bnQgPj0gMykgeworCQlTUC0+X2RlZmF1bHRfYmcgPSAoYmcgPj0gMCAmJiBiZyA8IG1heF9jb2xvcnMpID8gYmcgOiBDX01BU0s7CisJICAgIH0KKwkgICAgVFIoVFJBQ0VfQ0hBUlBVVCB8IFRSQUNFX01PVkUsCisJICAgICAgICgiZnJvbSBlbnZpcm9ubWVudCBhc3N1bWVkIGZnPSVkLCBiZz0lZCIsCisJCVNQLT5fZGVmYXVsdF9mZywKKwkJU1AtPl9kZWZhdWx0X2JnKSk7CisJfQorICAgIH0KKyNpZiBVU0VfQ09MT1JGR0JHCisgICAgLyoKKyAgICAgKiBJZiByeHZ0J3MgJENPTE9SRkdCRyB2YXJpYWJsZSBpcyBzZXQsIHVzZSBpdCB0byBzcGVjaWZ5IHRoZSBhc3N1bWVkCisgICAgICogZGVmYXVsdCBjb2xvcnMuICBOb3RlIHRoYXQgcnh2dCAobWlzKXVzZXMgYm9sZCBjb2xvcnMsIGVxdWF0aW5nIGEgYm9sZAorICAgICAqIGNvbG9yIHRvIHRoYXQgdmFsdWUgcGx1cyA4LiAgV2UnbGwgb25seSB1c2UgdGhlIG5vbi1ib2xkIGNvbG9yIGZvciBub3cgLQorICAgICAqIGRlY2lkZSBsYXRlciBpZiBpdCBpcyB3b3J0aCBoYXZpbmcgZGVmYXVsdCBhdHRyaWJ1dGVzIGFzIHdlbGwuCisgICAgICovCisgICAgaWYgKGdldGVudigiQ09MT1JGR0JHIikgIT0gMCkgeworCWNoYXIgKnAgPSBnZXRlbnYoIkNPTE9SRkdCRyIpOworCVRSKFRSQUNFX0NIQVJQVVQgfCBUUkFDRV9NT1ZFLCAoImRlY29kaW5nIENPTE9SRkdCRyAlcyIsIHApKTsKKwlwID0gZXh0cmFjdF9mZ2JnKHAsICYoU1AtPl9kZWZhdWx0X2ZnKSk7CisJcCA9IGV4dHJhY3RfZmdiZyhwLCAmKFNQLT5fZGVmYXVsdF9iZykpOworCWlmICgqcCkJCQkvKiBhc3N1bWUgcnh2dCB3YXMgY29tcGlsZWQgd2l0aCB4cG0gc3VwcG9ydCAqLworCSAgICBwID0gZXh0cmFjdF9mZ2JnKHAsICYoU1AtPl9kZWZhdWx0X2JnKSk7CisJVFIoVFJBQ0VfQ0hBUlBVVCB8IFRSQUNFX01PVkUsICgiZGVjb2RlZCBmZz0lZCwgYmc9JWQiLAorCQkJCQlTUC0+X2RlZmF1bHRfZmcsIFNQLT5fZGVmYXVsdF9iZykpOworCWlmIChTUC0+X2RlZmF1bHRfZmcgPj0gbWF4X2NvbG9ycykgeworCSAgICBpZiAoc2V0X2FfZm9yZWdyb3VuZCAhPSBBQlNFTlRfU1RSSU5HCisJCSYmICFzdHJjbXAoc2V0X2FfZm9yZWdyb3VuZCwgIlwwMzNbMyVwMSVkbSIpKSB7CisJCXNldF9hX2ZvcmVncm91bmQgPSAiXDAzM1szJT8lcDElezh9JT4ldDklZSVwMSVkJTttIjsKKwkgICAgfSBlbHNlIHsKKwkJU1AtPl9kZWZhdWx0X2ZnICU9IG1heF9jb2xvcnM7CisJICAgIH0KKwl9CisJaWYgKFNQLT5fZGVmYXVsdF9iZyA+PSBtYXhfY29sb3JzKSB7CisJICAgIGlmIChzZXRfYV9iYWNrZ3JvdW5kICE9IEFCU0VOVF9TVFJJTkcKKwkJJiYgIXN0cmNtcChzZXRfYV9iYWNrZ3JvdW5kLCAiXDAzM1s0JXAxJWRtIikpIHsKKwkJc2V0X2FfYmFja2dyb3VuZCA9ICJcMDMzWzQlPyVwMSV7OH0lPiV0OSVlJXAxJWQlO20iOworCSAgICB9IGVsc2UgeworCQlTUC0+X2RlZmF1bHRfYmcgJT0gbWF4X2NvbG9yczsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKyNlbmRpZiAvKiBOQ1VSU0VTX0VYVF9GVU5DUyAqLworCisgICAgU1AtPl9tYXhjbGljayA9IERFRkFVTFRfTUFYQ0xJQ0s7CisgICAgU1AtPl9tb3VzZV9ldmVudCA9IG5vX21vdXNlX2V2ZW50OworICAgIFNQLT5fbW91c2VfaW5saW5lID0gbm9fbW91c2VfaW5saW5lOworICAgIFNQLT5fbW91c2VfcGFyc2UgPSBub19tb3VzZV9wYXJzZTsKKyAgICBTUC0+X21vdXNlX3Jlc3VtZSA9IG5vX21vdXNlX3Jlc3VtZTsKKyAgICBTUC0+X21vdXNlX3dyYXAgPSBub19tb3VzZV93cmFwOworICAgIFNQLT5fbW91c2VfZmQgPSAtMTsKKworICAgIC8qCisgICAgICogSWYgd2UndmUgbm8gbWFnaWMgY29va2llIHN1cHBvcnQsIHdlIHN1cHByZXNzIGF0dHJpYnV0ZXMgdGhhdCB4bWMgd291bGQKKyAgICAgKiBhZmZlY3QsIGkuZS4sIHRoZSBhdHRyaWJ1dGVzIHRoYXQgYWZmZWN0IHRoZSByZW5kaXRpb24gb2YgYSBzcGFjZS4KKyAgICAgKi8KKyAgICBTUC0+X29rX2F0dHJpYnV0ZXMgPSB0ZXJtYXR0cnMoKTsKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJU1AtPl9va19hdHRyaWJ1dGVzIHw9IEFfQ09MT1I7CisgICAgfQorI2lmIFVTRV9YTUNfU1VQUE9SVAorICAgIC8qCisgICAgICogSWYgd2UgaGF2ZSBubyBtYWdpYy1jb29raWUgc3VwcG9ydCBjb21waWxlZC1pbiwgb3IgaWYgaXQgaXMgc3VwcHJlc3NlZAorICAgICAqIGluIHRoZSBlbnZpcm9ubWVudCwgcmVzZXQgdGhlIHN1cHBvcnQtZmxhZy4KKyAgICAgKi8KKyAgICBpZiAobWFnaWNfY29va2llX2dsaXRjaCA+PSAwKSB7CisJaWYgKGdldGVudigiTkNVUlNFU19OT19NQUdJQ19DT09LSUUiKSAhPSAwKSB7CisJICAgIHN1cHBvcnRfY29va2llcyA9IEZBTFNFOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmICghc3VwcG9ydF9jb29raWVzICYmIG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPj0gMCkgeworCVQoKCJ3aWxsIGRpc2FibGUgYXR0cmlidXRlcyB0byB3b3JrIHcvbyBtYWdpYyBjb29raWVzIikpOworICAgIH0KKworICAgIGlmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCkgewkvKiB0dmksIHd5c2UgKi8KKworCVNQLT5feG1jX3RyaWdnZXJzID0gU1AtPl9va19hdHRyaWJ1dGVzICYgKAorCQkJCQkJICAgICBBX1NUQU5ET1VUIHwKKwkJCQkJCSAgICAgQV9VTkRFUkxJTkUgfAorCQkJCQkJICAgICBBX1JFVkVSU0UgfAorCQkJCQkJICAgICBBX0JMSU5LIHwKKwkJCQkJCSAgICAgQV9ESU0gfAorCQkJCQkJICAgICBBX0JPTEQgfAorCQkJCQkJICAgICBBX0lOVklTIHwKKwkJCQkJCSAgICAgQV9QUk9URUNUCisJICAgICk7CisjaWYgMAorCS8qCisJICogV2UgInNob3VsZCIgdHJlYXQgY29sb3JzIGFzIGFuIGF0dHJpYnV0ZS4gIFRoZSB3eXNlMzUwIChhbmQgaXRzCisJICogY2xvbmVzKSBhcHBlYXIgdG8gYmUgdGhlIG9ubHkgb25lcyB0aGF0IGhhdmUgYm90aCBjb2xvcnMgYW5kIG1hZ2ljCisJICogY29va2llcy4KKwkgKi8KKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJICAgIFNQLT5feG1jX3RyaWdnZXJzIHw9IEFfQ09MT1I7CisJfQorI2VuZGlmCisJU1AtPl94bWNfc3VwcHJlc3MgPSBTUC0+X3htY190cmlnZ2VycyAmIChjaHR5cGUpIH4oQV9CT0xEKTsKKworCVQoKCJtYWdpYyBjb29raWUgYXR0cmlidXRlcyAlcyIsIF90cmFjZWF0dHIoU1AtPl94bWNfc3VwcHJlc3MpKSk7CisJLyoKKwkgKiBTdXBwb3J0aW5nIGxpbmUtZHJhd2luZyBtYXkgYmUgcG9zc2libGUuICBCdXQgbWFrZSB0aGUgcmVndWxhcgorCSAqIHZpZGVvIGF0dHJpYnV0ZXMgd29yayBmaXJzdC4KKwkgKi8KKwlhY3NfY2hhcnMgPSBBQlNFTlRfU1RSSU5HOworCWVuYV9hY3MgPSBBQlNFTlRfU1RSSU5HOworCWVudGVyX2FsdF9jaGFyc2V0X21vZGUgPSBBQlNFTlRfU1RSSU5HOworCWV4aXRfYWx0X2NoYXJzZXRfbW9kZSA9IEFCU0VOVF9TVFJJTkc7CisjaWYgVVNFX1hNQ19TVVBQT1JUCisJLyoKKwkgKiBUbyBrZWVwIHRoZSBjb29raWUgc3VwcG9ydCBzaW1wbGUsIHN1cHByZXNzIGFsbCBvZiB0aGUgb3B0aW1pemF0aW9uCisJICogaG9va3MgZXhjZXB0IGZvciBjbGVhcl9zY3JlZW4gYW5kIHRoZSBjdXJzb3IgYWRkcmVzc2luZy4KKwkgKi8KKwlpZiAoc3VwcG9ydF9jb29raWVzKSB7CisJICAgIGNscl9lb2wgPSBBQlNFTlRfU1RSSU5HOworCSAgICBjbHJfZW9zID0gQUJTRU5UX1NUUklORzsKKwkgICAgc2V0X2F0dHJpYnV0ZXMgPSBBQlNFTlRfU1RSSU5HOworCX0KKyNlbmRpZgorICAgIH0gZWxzZSBpZiAobWFnaWNfY29va2llX2dsaXRjaCA9PSAwKSB7CS8qIGhwdGVybSAqLworICAgIH0KKworICAgIC8qCisgICAgICogSWYgbWFnaWMgY29va2llcyBhcmUgbm90IHN1cHBvcnRlZCwgY2FuY2VsIHRoZSBzdHJpbmdzIHRoYXQgc2V0CisgICAgICogdmlkZW8gYXR0cmlidXRlcy4KKyAgICAgKi8KKyAgICBpZiAoIXN1cHBvcnRfY29va2llcyAmJiBtYWdpY19jb29raWVfZ2xpdGNoID49IDApIHsKKwltYWdpY19jb29raWVfZ2xpdGNoID0gQUJTRU5UX05VTUVSSUM7CisJc2V0X2F0dHJpYnV0ZXMgPSBBQlNFTlRfU1RSSU5HOworCWVudGVyX2JsaW5rX21vZGUgPSBBQlNFTlRfU1RSSU5HOworCWVudGVyX2JvbGRfbW9kZSA9IEFCU0VOVF9TVFJJTkc7CisJZW50ZXJfZGltX21vZGUgPSBBQlNFTlRfU1RSSU5HOworCWVudGVyX3JldmVyc2VfbW9kZSA9IEFCU0VOVF9TVFJJTkc7CisJZW50ZXJfc3RhbmRvdXRfbW9kZSA9IEFCU0VOVF9TVFJJTkc7CisJZW50ZXJfdW5kZXJsaW5lX21vZGUgPSBBQlNFTlRfU1RSSU5HOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgbm9ybWFsIGFjcyBiZWZvcmUgd2lkZSwgc2luY2Ugd2UgdXNlIG1hcHBpbmcgaW4gdGhlIGxhdHRlciAqLworI2lmICFVU0VfV0lERUNfU1VQUE9SVAorICAgIGlmIChfbmNfdW5pY29kZV9sb2NhbGUoKSAmJiBfbmNfbG9jYWxlX2JyZWFrc19hY3MoY3VyX3Rlcm0pKSB7CisJYWNzX2NoYXJzID0gTlVMTDsKKwllbmFfYWNzID0gTlVMTDsKKwllbnRlcl9hbHRfY2hhcnNldF9tb2RlID0gTlVMTDsKKwlleGl0X2FsdF9jaGFyc2V0X21vZGUgPSBOVUxMOworCXNldF9hdHRyaWJ1dGVzID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKyAgICBfbmNfaW5pdF9hY3MoKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIF9uY19pbml0X3dhY3MoKTsKKworICAgIFNQLT5fc2NyZWVuX2Fjc19maXggPSAoX25jX3VuaWNvZGVfbG9jYWxlKCkKKwkJCSAgICYmIF9uY19sb2NhbGVfYnJlYWtzX2FjcyhjdXJfdGVybSkpOworI2VuZGlmCisgICAgZW52ID0gX25jX2dldF9sb2NhbGUoKTsKKyAgICBTUC0+X2xlZ2FjeV9jb2RpbmcgPSAoKGVudiA9PSAwKQorCQkJICB8fCAhc3RyY21wKGVudiwgIkMiKQorCQkJICB8fCAhc3RyY21wKGVudiwgIlBPU0lYIikpOworICAgIFQoKCJsZWdhY3ktY29kaW5nICVkIiwgU1AtPl9sZWdhY3lfY29kaW5nKSk7CisKKyAgICBfbmNfaWRjb2sgPSBUUlVFOworICAgIF9uY19pZGxvayA9IEZBTFNFOworCisgICAgU1AtPm9sZGhhc2ggPSAwOworICAgIFNQLT5uZXdoYXNoID0gMDsKKworICAgIFQoKCJjcmVhdGluZyBuZXdzY3IiKSk7CisgICAgaWYgKChTUC0+X25ld3NjciA9IG5ld3dpbihzbGluZXMsIHNjb2x1bW5zLCAwLCAwKSkgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBUKCgiY3JlYXRpbmcgY3Vyc2NyIikpOworICAgIGlmICgoU1AtPl9jdXJzY3IgPSBuZXd3aW4oc2xpbmVzLCBzY29sdW1ucywgMCwgMCkpID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisjaWYgIVVTRV9SRUVOVFJBTlQKKyAgICBuZXdzY3IgPSBTUC0+X25ld3NjcjsKKyAgICBjdXJzY3IgPSBTUC0+X2N1cnNjcjsKKyNlbmRpZgorI2lmIFVTRV9TSVpFQ0hBTkdFCisgICAgU1AtPl9yZXNpemUgPSByZXNpemV0ZXJtOworI2VuZGlmCisKKyAgICBuZXdzY3ItPl9jbGVhciA9IFRSVUU7CisgICAgY3Vyc2NyLT5fY2xlYXIgPSBGQUxTRTsKKworICAgIGRlZl9zaGVsbF9tb2RlKCk7CisgICAgZGVmX3Byb2dfbW9kZSgpOworCisgICAgZm9yIChyb3AgPSByaXBvZmZfc3RhY2s7CisJIHJvcCAhPSByaXBvZmZfc3AgJiYgKHJvcCAtIHJpcG9mZl9zdGFjaykgPCBOX1JJUFM7CisJIHJvcCsrKSB7CisKKwkvKiBJZiB3ZSBtdXN0IHNpbXVsYXRlIHNvZnQgbGFiZWxzLCBncmFiIG9mZiB0aGUgbGluZSB0byBiZSB1c2VkLgorCSAgIFdlIGFzc3VtZSB0aGF0IHdlIG11c3Qgc2ltdWxhdGUsIGlmIGl0IGlzIG5vbmUgb2YgdGhlIHN0YW5kYXJkCisJICAgZm9ybWF0cyAoNC00IG9yIDMtMi0zKSBmb3Igd2hpY2ggdGhlcmUgbWF5IGJlIHNvbWUgaGFyZHdhcmUKKwkgICBzdXBwb3J0LiAqLworCWlmIChyb3AtPmhvb2sgPT0gX25jX3Nsa19pbml0aWFsaXplKQorCSAgICBpZiAoIShudW1fbGFiZWxzIDw9IDAgfHwgIVNMS19TVERGTVQoc2xrX2Zvcm1hdCkpKQorCQljb250aW51ZTsKKwlpZiAocm9wLT5ob29rKSB7CisJICAgIGludCBjb3VudDsKKwkgICAgV0lORE9XICp3OworCisJICAgIGNvdW50ID0gKHJvcC0+bGluZSA8IDApID8gLXJvcC0+bGluZSA6IHJvcC0+bGluZTsKKwkgICAgVCgoInJpcHBpbmcgb2ZmICVpIGxpbmVzIGF0ICVzIiwgY291bnQsCisJICAgICAgICgocm9wLT5saW5lIDwgMCkKKwkJPyAiYm90dG9tIgorCQk6ICJ0b3AiKSkpOworCisJICAgIHcgPSBuZXd3aW4oY291bnQsIHNjb2x1bW5zLAorCQkgICAgICAgKChyb3AtPmxpbmUgPCAwKQorCQkJPyBTUC0+X2xpbmVzX2F2YWlsIC0gY291bnQKKwkJCTogMCksCisJCSAgICAgICAwKTsKKwkgICAgaWYgKHcpIHsKKwkJcm9wLT53aW4gPSB3OworCQlyb3AtPmhvb2sodywgc2NvbHVtbnMpOworCSAgICB9IGVsc2UgeworCQlyZXR1cm5Db2RlKEVSUik7CisJICAgIH0KKwkgICAgaWYgKHJvcC0+bGluZSA8IDApCisJCWJvdHRvbV9zdG9sZW4gKz0gY291bnQ7CisJICAgIGVsc2UKKwkJU1AtPl90b3BzdG9sZW4gKz0gY291bnQ7CisJICAgIFNQLT5fbGluZXNfYXZhaWwgLT0gY291bnQ7CisJfQorICAgIH0KKyAgICAvKiByZXNldCB0aGUgc3RhY2sgKi8KKyAgICByaXBvZmZfc3AgPSByaXBvZmZfc3RhY2s7CisKKyAgICBUKCgiY3JlYXRpbmcgc3Rkc2NyIikpOworICAgIGFzc2VydCgoU1AtPl9saW5lc19hdmFpbCArIFNQLT5fdG9wc3RvbGVuICsgYm90dG9tX3N0b2xlbikgPT0gc2xpbmVzKTsKKyAgICBpZiAoKFNQLT5fc3Rkc2NyID0gbmV3d2luKFNQLT5fbGluZXNfYXZhaWwsIHNjb2x1bW5zLCAwLCAwKSkgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBTRVRfTElORVMoU1AtPl9saW5lc19hdmFpbCk7CisjaWYgIVVTRV9SRUVOVFJBTlQKKyAgICBzdGRzY3IgPSBTUC0+X3N0ZHNjcjsKKyNlbmRpZgorCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKKy8qCisgKiBUaGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaW50ZXJwcmV0cyBsaW5lIGFzIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gcmlwCisgKiBvZmYgZnJvbSB0aGUgdG9wIG9yIGJvdHRvbS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3JpcG9mZmxpbmUoaW50IGxpbmUsIGludCAoKmluaXQpIChXSU5ET1cgKiwgaW50KSkKK3sKKyAgICBUKChUX0NBTExFRCgiX25jX3JpcG9mZmxpbmUoJWQsICVwKSIpLCBsaW5lLCBpbml0KSk7CisKKyAgICBpZiAobGluZSAhPSAwKSB7CisKKwlpZiAocmlwb2ZmX3NwID09IDApCisJICAgIHJpcG9mZl9zcCA9IHJpcG9mZl9zdGFjazsKKwlpZiAocmlwb2ZmX3NwID49IHJpcG9mZl9zdGFjayArIE5fUklQUykKKwkgICAgcmV0dXJuQ29kZShFUlIpOworCisJcmlwb2ZmX3NwLT5saW5lID0gbGluZTsKKwlyaXBvZmZfc3AtPmhvb2sgPSBpbml0OworCXJpcG9mZl9zcCsrOworICAgIH0KKworICAgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCityaXBvZmZsaW5lKGludCBsaW5lLCBpbnQgKCppbml0KSAoV0lORE9XICosIGludCkpCit7CisgICAgU1RBUlRfVFJBQ0UoKTsKKyAgICBUKChUX0NBTExFRCgicmlwb2ZmbGluZSglZCwlcCkiKSwgbGluZSwgaW5pdCkpOworCisgICAgaWYgKGxpbmUgPT0gMCkKKwlyZXR1cm5Db2RlKE9LKTsKKworICAgIHJldHVybkNvZGUoX25jX3JpcG9mZmxpbmUoKGxpbmUgPCAwKSA/IC0xIDogMSwgaW5pdCkpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGsuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyZjdlNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrLmMKQEAgLTAsMCArMSwxOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgR2VyaGFyZCBGdWVybmtyYW56ICAgICAgICAgICAgICAgICAgICAgIDE5OTMgKG9yaWdpbmFsKSAgICAgICAgICoKKyAqICAgICAgICAgIFpleWQgTS4gQmVuLUhhbGltICAgICAgICAgICAgICAgICAgICAgICAxOTkyLDE5OTUgKHNpYykgICAgICAgICAqCisgKiAgICAgICAgICBFcmljIFMuIFJheW1vbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgSnVlcmdlbiBQZmVpZmVyICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgIFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGsuYworICoJU29mdCBrZXkgcm91dGluZXMuCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIG51bV9sYWJlbHMsIGxhYmVsXyosIHBsYWJfbm9ybSAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsay5jLHYgMS4zNSAyMDA4LzA5LzI3IDE0OjA3OjMzIGp1ZXJnZW4gRXhwICQiKQorCisvKgorICogRnJlZSBhbnkgbWVtb3J5IHJlbGF0ZWQgdG8gc29mdCBsYWJlbHMsIHJldHVybiBhbiBlcnJvci4KKyAqLworc3RhdGljIGludAorc2xrX2ZhaWxlZCh2b2lkKQoreworICAgIGlmIChTUC0+X3NsaykgeworCUZyZWVJZk5lZWRlZChTUC0+X3Nsay0+ZW50KTsKKwlmcmVlKFNQLT5fc2xrKTsKKwlTUC0+X3NsayA9IChTTEsgKikgMDsKKyAgICB9CisgICAgcmV0dXJuIEVSUjsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc29mdCBsYWJlbHMuCisgKiBDYWxsZWQgZnJvbSBuZXd0ZXJtKCkKKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3Nsa19pbml0aWFsaXplKFdJTkRPVyAqc3R3aW4sIGludCBjb2xzKQoreworICAgIGludCBpLCB4OworICAgIGludCByZXMgPSBPSzsKKyAgICB1bnNpZ25lZCBtYXhfbGVuZ3RoOworCisgICAgVCgoVF9DQUxMRUQoIl9uY19zbGtfaW5pdGlhbGl6ZSgpIikpKTsKKworICAgIGlmIChTUC0+X3NsaykgewkJLyogd2UgZGlkIHRoaXMgYWxyZWFkeSwgc28gc2ltcGx5IHJldHVybiAqLworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZSBpZiAoKFNQLT5fc2xrID0gdHlwZUNhbGxvYyhTTEssIDEpKSA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIFNQLT5fc2xrLT5lbnQgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSB1c2UgY29sb3JzLCB2aWRwdXRzKCkgd2lsbCBzdXBwcmVzcyB2aWRlbyBhdHRyaWJ1dGVzIHRoYXQgY29uZmxpY3QKKyAgICAgKiB3aXRoIGNvbG9ycy4gIEluIHRoYXQgY2FzZSwgd2UncmUgc3RpbGwgZ3VhcmFudGVlZCB0aGF0ICJyZXZlcnNlIiB3b3VsZAorICAgICAqIHdvcmsuCisgICAgICovCisgICAgaWYgKChub19jb2xvcl92aWRlbyAmIDEpID09IDApCisJU2V0QXR0cihTUC0+X3Nsay0+YXR0ciwgQV9TVEFORE9VVCk7CisgICAgZWxzZQorCVNldEF0dHIoU1AtPl9zbGstPmF0dHIsIEFfUkVWRVJTRSk7CisKKyAgICBTUC0+X3Nsay0+bWF4bGFiID0gKChudW1fbGFiZWxzID4gMCkKKwkJCT8gbnVtX2xhYmVscworCQkJOiBNQVhfU0tFWShfbmNfZ2xvYmFscy5zbGtfZm9ybWF0KSk7CisgICAgU1AtPl9zbGstPm1heGxlbiA9ICgobnVtX2xhYmVscyA+IDApCisJCQk/IGxhYmVsX3dpZHRoICogbGFiZWxfaGVpZ2h0CisJCQk6IE1BWF9TS0VZX0xFTihfbmNfZ2xvYmFscy5zbGtfZm9ybWF0KSk7CisgICAgU1AtPl9zbGstPmxhYmNudCA9ICgoU1AtPl9zbGstPm1heGxhYiA8IE1BWF9TS0VZKF9uY19nbG9iYWxzLnNsa19mb3JtYXQpKQorCQkJPyBNQVhfU0tFWShfbmNfZ2xvYmFscy5zbGtfZm9ybWF0KQorCQkJOiBTUC0+X3Nsay0+bWF4bGFiKTsKKworICAgIGlmIChTUC0+X3Nsay0+bWF4bGVuIDw9IDAKKwl8fCBTUC0+X3Nsay0+bGFiY250IDw9IDAKKwl8fCAoU1AtPl9zbGstPmVudCA9IHR5cGVDYWxsb2Moc2xrX2VudCwKKwkJCQkgICAgICAgKHVuc2lnbmVkKSBTUC0+X3Nsay0+bGFiY250KSkgPT0gTlVMTCkKKwlyZXR1cm5Db2RlKHNsa19mYWlsZWQoKSk7CisKKyAgICBtYXhfbGVuZ3RoID0gU1AtPl9zbGstPm1heGxlbjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgU1AtPl9zbGstPmxhYmNudDsgaSsrKSB7CisJc2l6ZV90IHVzZWQgPSBtYXhfbGVuZ3RoICsgMTsKKworCWlmICgoU1AtPl9zbGstPmVudFtpXS5lbnRfdGV4dCA9IChjaGFyICopIF9uY19kb2FsbG9jKDAsIHVzZWQpKSA9PSAwKQorCSAgICByZXR1cm5Db2RlKHNsa19mYWlsZWQoKSk7CisJbWVtc2V0KFNQLT5fc2xrLT5lbnRbaV0uZW50X3RleHQsIDAsIHVzZWQpOworCisJaWYgKChTUC0+X3Nsay0+ZW50W2ldLmZvcm1fdGV4dCA9IChjaGFyICopIF9uY19kb2FsbG9jKDAsIHVzZWQpKSA9PSAwKQorCSAgICByZXR1cm5Db2RlKHNsa19mYWlsZWQoKSk7CisJbWVtc2V0KFNQLT5fc2xrLT5lbnRbaV0uZm9ybV90ZXh0LCAwLCB1c2VkKTsKKworCW1lbXNldChTUC0+X3Nsay0+ZW50W2ldLmZvcm1fdGV4dCwgJyAnLCBtYXhfbGVuZ3RoKTsKKwlTUC0+X3Nsay0+ZW50W2ldLnZpc2libGUgPSAoY2hhcikgKGkgPCBTUC0+X3Nsay0+bWF4bGFiKTsKKyAgICB9CisgICAgaWYgKF9uY19nbG9iYWxzLnNsa19mb3JtYXQgPj0gMykgewkvKiBQQyBzdHlsZSAqLworCWludCBnYXAgPSAoY29scyAtIDMgKiAoMyArIDQgKiBtYXhfbGVuZ3RoKSkgLyAyOworCisJaWYgKGdhcCA8IDEpCisJICAgIGdhcCA9IDE7CisKKwlmb3IgKGkgPSB4ID0gMDsgaSA8IFNQLT5fc2xrLT5tYXhsYWI7IGkrKykgeworCSAgICBTUC0+X3Nsay0+ZW50W2ldLmVudF94ID0geDsKKwkgICAgeCArPSBtYXhfbGVuZ3RoOworCSAgICB4ICs9IChpID09IDMgfHwgaSA9PSA3KSA/IGdhcCA6IDE7CisJfQorICAgIH0gZWxzZSB7CisJaWYgKF9uY19nbG9iYWxzLnNsa19mb3JtYXQgPT0gMikgewkvKiA0LTQgKi8KKwkgICAgaW50IGdhcCA9IGNvbHMgLSAoU1AtPl9zbGstPm1heGxhYiAqIG1heF9sZW5ndGgpIC0gNjsKKworCSAgICBpZiAoZ2FwIDwgMSkKKwkJZ2FwID0gMTsKKwkgICAgZm9yIChpID0geCA9IDA7IGkgPCBTUC0+X3Nsay0+bWF4bGFiOyBpKyspIHsKKwkJU1AtPl9zbGstPmVudFtpXS5lbnRfeCA9IHg7CisJCXggKz0gbWF4X2xlbmd0aDsKKwkJeCArPSAoaSA9PSAzKSA/IGdhcCA6IDE7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiAoX25jX2dsb2JhbHMuc2xrX2Zvcm1hdCA9PSAxKSB7CS8qIDEgLT4gMy0yLTMgKi8KKwkJaW50IGdhcCA9IChjb2xzIC0gKFNQLT5fc2xrLT5tYXhsYWIgKiBtYXhfbGVuZ3RoKSAtIDUpCisJCS8gMjsKKworCQlpZiAoZ2FwIDwgMSkKKwkJICAgIGdhcCA9IDE7CisJCWZvciAoaSA9IHggPSAwOyBpIDwgU1AtPl9zbGstPm1heGxhYjsgaSsrKSB7CisJCSAgICBTUC0+X3Nsay0+ZW50W2ldLmVudF94ID0geDsKKwkJICAgIHggKz0gbWF4X2xlbmd0aDsKKwkJICAgIHggKz0gKGkgPT0gMiB8fCBpID09IDQpID8gZ2FwIDogMTsKKwkJfQorCSAgICB9IGVsc2UKKwkJcmV0dXJuQ29kZShzbGtfZmFpbGVkKCkpOworCX0KKyAgICB9CisgICAgU1AtPl9zbGstPmRpcnR5ID0gVFJVRTsKKyAgICBpZiAoKFNQLT5fc2xrLT53aW4gPSBzdHdpbikgPT0gTlVMTCkgeworCXJldHVybkNvZGUoc2xrX2ZhaWxlZCgpKTsKKyAgICB9CisKKyAgICAvKiBXZSBub3cgcmVzZXQgdGhlIGZvcm1hdCBzbyB0aGF0IHRoZSBuZXh0IG5ld3Rlcm0gaGFzIGFnYWluCisgICAgICogcGVyIGRlZmF1bHQgbm8gU0xLIGtleXMgYW5kIG1heSBjYWxsIHNsa19pbml0IGFnYWluIHRvCisgICAgICogZGVmaW5lIGEgbmV3IGxheW91dC4gKGp1ZXJnZW4gMDMtTWFyLTE5OTkpCisgICAgICovCisgICAgU1AtPnNsa19mb3JtYXQgPSBfbmNfZ2xvYmFscy5zbGtfZm9ybWF0OworICAgIF9uY19nbG9iYWxzLnNsa19mb3JtYXQgPSAwOworICAgIHJldHVybkNvZGUocmVzKTsKK30KKworLyoKKyAqIFJlc3RvcmUgdGhlIHNvZnQgbGFiZWxzIG9uIHRoZSBzY3JlZW4uCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19yZXN0b3JlKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19yZXN0b3JlKCkiKSkpOworCisgICAgaWYgKFNQLT5fc2xrID09IE5VTEwpCisJcmV0dXJuIChFUlIpOworICAgIFNQLT5fc2xrLT5oaWRkZW4gPSBGQUxTRTsKKyAgICBTUC0+X3Nsay0+ZGlydHkgPSBUUlVFOworCisgICAgcmV0dXJuQ29kZShzbGtfcmVmcmVzaCgpKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrYXRyX3NldC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzNjE2YgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrYXRyX3NldC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogIFRob21hcyBFLiBEaWNrZXkgMjAwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa2F0cl9zZXQuYworICoJU29mdCBrZXkgcm91dGluZXMuCisgKglTZXQgdGhlIGxhYmVsJ3MgYXR0cmlidXRlcworICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGthdHJfc2V0LmMsdiAxLjEwIDIwMDUvMDEvMjggMjE6MTE6NTMgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX2F0dHJfc2V0KGNvbnN0IGF0dHJfdCBhdHRyLCBzaG9ydCBjb2xvcl9wYWlyX251bWJlciwgdm9pZCAqb3B0cykKK3sKKyAgICBUKChUX0NBTExFRCgic2xrX2F0dHJfc2V0KCVzLCVkKSIpLCBfdHJhY2VhdHRyKGF0dHIpLCBjb2xvcl9wYWlyX251bWJlcikpOworCisgICAgaWYgKFNQICE9IDAgJiYgU1AtPl9zbGsgIT0gMCAmJiAhb3B0cyAmJgorCWNvbG9yX3BhaXJfbnVtYmVyID49IDAgJiYgY29sb3JfcGFpcl9udW1iZXIgPCBDT0xPUl9QQUlSUykgeworCVRSKFRSQUNFX0FUVFJTLCAoIi4uLiBjdXJyZW50ICVzIiwgX3RyYWNlY2hfdChDSFJFRihTUC0+X3Nsay0+YXR0cikpKSk7CisJU2V0QXR0cihTUC0+X3Nsay0+YXR0ciwgYXR0cik7CisJaWYgKGNvbG9yX3BhaXJfbnVtYmVyID4gMCkgeworCSAgICBTZXRQYWlyKFNQLT5fc2xrLT5hdHRyLCBjb2xvcl9wYWlyX251bWJlcik7CisJfQorCVRSKFRSQUNFX0FUVFJTLCAoIm5ldyBhdHRyaWJ1dGUgaXMgJXMiLCBfdHJhY2VjaF90KENIUkVGKFNQLT5fc2xrLT5hdHRyKSkpKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cm9mLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cm9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiNGMzYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrYXRyb2YuYwpAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6ICBUaG9tYXMgRS4gRGlja2V5IDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGthdHJvZi5jCisgKglTb2Z0IGtleSByb3V0aW5lcy4KKyAqICAgICAgU3dpdGNoIG9mZiBsYWJlbHMgYXR0cmlidXRlcworICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGthdHJvZi5jLHYgMS44IDIwMDUvMDEvMDggMjM6MDE6MzIgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX2F0dHJvZmYoY29uc3QgY2h0eXBlIGF0dHIpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19hdHRyb2ZmKCVzKSIpLCBfdHJhY2VhdHRyKGF0dHIpKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBTUC0+X3NsayAhPSAwKSB7CisJVFIoVFJBQ0VfQVRUUlMsICgiLi4uIGN1cnJlbnQgJXMiLCBfdHJhY2VjaF90KENIUkVGKFNQLT5fc2xrLT5hdHRyKSkpKTsKKwlSZW1BdHRyKFNQLT5fc2xrLT5hdHRyLCBhdHRyKTsKKwlpZiAoKGF0dHIgJiBBX0NPTE9SKSAhPSAwKSB7CisJICAgIFNldFBhaXIoU1AtPl9zbGstPmF0dHIsIDApOworCX0KKwlUUihUUkFDRV9BVFRSUywgKCJuZXcgYXR0cmlidXRlIGlzICVzIiwgX3RyYWNlY2hfdChDSFJFRihTUC0+X3Nsay0+YXR0cikpKSk7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJvbi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYWRkODYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cm9uLmMKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiAgVGhvbWFzIEUuIERpY2tleSAyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrYXRyb24uYworICoJU29mdCBrZXkgcm91dGluZXMuCisgKiAgICAgIFN3aXRjaCBvbiBsYWJlbHMgYXR0cmlidXRlcworICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGthdHJvbi5jLHYgMS44IDIwMDUvMDEvMDggMjM6MDI6MDEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX2F0dHJvbihjb25zdCBjaHR5cGUgYXR0cikKK3sKKyAgICBUKChUX0NBTExFRCgic2xrX2F0dHJvbiglcykiKSwgX3RyYWNlYXR0cihhdHRyKSkpOworCisgICAgaWYgKFNQICE9IDAgJiYgU1AtPl9zbGsgIT0gMCkgeworCVRSKFRSQUNFX0FUVFJTLCAoIi4uLiBjdXJyZW50ICVzIiwgX3RyYWNlY2hfdChDSFJFRihTUC0+X3Nsay0+YXR0cikpKSk7CisJQWRkQXR0cihTUC0+X3Nsay0+YXR0ciwgYXR0cik7CisJaWYgKChhdHRyICYgQV9DT0xPUikgIT0gMCkgeworCSAgICBTZXRQYWlyKFNQLT5fc2xrLT5hdHRyLCBQQUlSX05VTUJFUihhdHRyKSk7CisJfQorCVRSKFRSQUNFX0FUVFJTLCAoIm5ldyBhdHRyaWJ1dGUgaXMgJXMiLCBfdHJhY2VjaF90KENIUkVGKFNQLT5fc2xrLT5hdHRyKSkpKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0cnNldC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGE5OTgxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGthdHJzZXQuYwpAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6ICBUaG9tYXMgRS4gRGlja2V5IDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGthdHJzZXQuYworICoJU29mdCBrZXkgcm91dGluZXMuCisgKiAgICAgIFNldCB0aGUgbGFiZWxzIGF0dHJpYnV0ZXMKKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrYXRyc2V0LmMsdiAxLjcgMjAwNS8wMS8wOCAyMTo0Njo0NyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzbGtfYXR0cnNldChjb25zdCBjaHR5cGUgYXR0cikKK3sKKyAgICBUKChUX0NBTExFRCgic2xrX2F0dHJzZXQoJXMpIiksIF90cmFjZWF0dHIoYXR0cikpKTsKKworICAgIGlmIChTUCAhPSAwICYmIFNQLT5fc2xrICE9IDApIHsKKwlTZXRBdHRyKFNQLT5fc2xrLT5hdHRyLCBhdHRyKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0dHIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhODJlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Nsa2F0dHIuYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6ICBUaG9tYXMgRS4gRGlja2V5IDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGthdHRyLmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICogICAgICBGZXRjaCB0aGUgbGFiZWxzIGF0dHJpYnV0ZXMKKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrYXR0ci5jLHYgMS42IDIwMDUvMDEvMDggMjE6NDQ6MjggdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoYXR0cl90KQorc2xrX2F0dHIodm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgic2xrX2F0dHIoKSIpKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBTUC0+X3NsayAhPSAwKSB7CisJYXR0cl90IHJlc3VsdCA9IEF0dHJPZihTUC0+X3Nsay0+YXR0cikgJiBBTExfQlVUX0NPTE9SOworCWludCBwYWlyID0gR2V0UGFpcihTUC0+X3Nsay0+YXR0cik7CisKKwlyZXN1bHQgfD0gQ09MT1JfUEFJUihwYWlyKTsKKwlyZXR1cm5BdHRyKHJlc3VsdCk7CisgICAgfSBlbHNlCisJcmV0dXJuQXR0cigwKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrY2xlYXIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrY2xlYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZjZWVhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGtjbGVhci5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEp1ZXJnZW4gUGZlaWZlciAgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LTE5OTkgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrY2xlYXIuYworICoJU29mdCBrZXkgcm91dGluZXMuCisgKiAgICAgIFJlbW92ZSBzb2Z0IGxhYmVscyBmcm9tIHRoZSBzY3JlZW4uCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa2NsZWFyLmMsdiAxLjEwIDIwMDcvMTIvMjkgMTc6NTE6NDcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX2NsZWFyKHZvaWQpCit7CisgICAgaW50IHJjID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoInNsa19jbGVhcigpIikpKTsKKworICAgIGlmIChTUCAhPSBOVUxMICYmIFNQLT5fc2xrICE9IE5VTEwpIHsKKwlTUC0+X3Nsay0+aGlkZGVuID0gVFJVRTsKKwkvKiBGb3Igc2ltdWxhdGVkIFNMSydzIGl0IGxvb2tzIG11Y2ggbW9yZSBuYXR1cmFsIHRvCisJICAgaW5oZXJpdCB0aG9zZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHN0YW5kYXJkIHNjcmVlbiAqLworCVNQLT5fc2xrLT53aW4tPl9uY19ia2dkID0gc3Rkc2NyLT5fbmNfYmtnZDsKKwlXSU5ET1dfQVRUUlMoU1AtPl9zbGstPndpbikgPSBXSU5ET1dfQVRUUlMoc3Rkc2NyKTsKKwlpZiAoU1AtPl9zbGstPndpbiA9PSBzdGRzY3IpIHsKKwkgICAgcmMgPSBPSzsKKwl9IGVsc2UgeworCSAgICB3ZXJhc2UoU1AtPl9zbGstPndpbik7CisJICAgIHJjID0gd3JlZnJlc2goU1AtPl9zbGstPndpbik7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKHJjKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrY29sb3IuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrY29sb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjc3YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGtjb2xvci5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogIFRob21hcyBFLiBEaWNrZXkgMjAwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa2NvbG9yLmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICoJU2V0IHRoZSBsYWJlbCdzIGNvbG9yCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa2NvbG9yLmMsdiAxLjEyIDIwMDUvMDEvMjggMjE6MTE6NTMgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX2NvbG9yKHNob3J0IGNvbG9yX3BhaXJfbnVtYmVyKQoreworICAgIFQoKFRfQ0FMTEVEKCJzbGtfY29sb3IoJWQpIiksIGNvbG9yX3BhaXJfbnVtYmVyKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBTUC0+X3NsayAhPSAwICYmCisJY29sb3JfcGFpcl9udW1iZXIgPj0gMCAmJiBjb2xvcl9wYWlyX251bWJlciA8IENPTE9SX1BBSVJTKSB7CisJVFIoVFJBQ0VfQVRUUlMsICgiLi4uIGN1cnJlbnQgaXMgJXMiLCBfdHJhY2VjaF90KENIUkVGKFNQLT5fc2xrLT5hdHRyKSkpKTsKKwlTZXRQYWlyKFNQLT5fc2xrLT5hdHRyLCBjb2xvcl9wYWlyX251bWJlcik7CisJVFIoVFJBQ0VfQVRUUlMsICgibmV3IGF0dHJpYnV0ZSBpcyAlcyIsIF90cmFjZWNoX3QoQ0hSRUYoU1AtPl9zbGstPmF0dHIpKSkpOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xraW5pdC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGtpbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0MDEwOQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xraW5pdC5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9zbGtpbml0LmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICogICAgICBJbml0aWFsaXplIHNvZnQgbGFiZWxzLiAgQ2FsbGVkIGJ5IHRoZSB1c2VyIGJlZm9yZSBpbml0c2NyKCkuCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Nsa2luaXQuYyx2IDEuNyAyMDA4LzAxLzEyIDIwOjIzOjM5IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19pbml0KGludCBmb3JtYXQpCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgic2xrX2luaXQoJWQpIiksIGZvcm1hdCkpOworICAgIGlmIChmb3JtYXQgPj0gMCAmJiBmb3JtYXQgPD0gMyAmJiAhX25jX2dsb2JhbHMuc2xrX2Zvcm1hdCkgeworCV9uY19nbG9iYWxzLnNsa19mb3JtYXQgPSAxICsgZm9ybWF0OworCWNvZGUgPSBfbmNfcmlwb2ZmbGluZSgtU0xLX0xJTkVTKF9uY19nbG9iYWxzLnNsa19mb3JtYXQpLCBfbmNfc2xrX2luaXRpYWxpemUpOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGtsYWIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrbGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiYjRhYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrbGFiLmMKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrbGFiLmMKKyAqCVNvZnQga2V5IHJvdXRpbmVzLgorICogICAgICBGZXRjaCB0aGUgbGFiZWwgdGV4dC4KKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrbGFiLmMsdiAxLjcgMjAwMy8wMy8yOSAyMjo1Mzo0OCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitzbGtfbGFiZWwoaW50IG4pCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19sYWJlbCglZCkiKSwgbikpOworCisgICAgaWYgKFNQID09IE5VTEwgfHwgU1AtPl9zbGsgPT0gTlVMTCB8fCBuIDwgMSB8fCBuID4gU1AtPl9zbGstPmxhYmNudCkKKwlyZXR1cm5QdHIoMCk7CisgICAgcmV0dXJuUHRyKFNQLT5fc2xrLT5lbnRbbiAtIDFdLmVudF90ZXh0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrcmVmci5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGtyZWZyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxYmViYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrcmVmci5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa3JlZnIuYworICoJV3JpdGUgU0xLIHdpbmRvdyB0byB0aGUgKHZpcnR1YWwpIHNjcmVlbi4KKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogbnVtX2xhYmVscywgbGFiZWxfKiwgcGxhYl9ub3JtICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrcmVmci5jLHYgMS4xNyAyMDA4LzA5LzI3IDE0OjA3OjUzIGp1ZXJnZW4gRXhwICQiKQorCisvKgorICogUGFpbnQgdGhlIGluZm8gbGluZSBmb3IgdGhlIFBDIHN0eWxlIFNMSyBlbXVsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitzbGtfcGFpbnRfaW5mbyhXSU5ET1cgKndpbikKK3sKKyAgICBTQ1JFRU4gKnNwID0gX25jX3NjcmVlbl9vZih3aW4pOworCisgICAgaWYgKHdpbiAmJiBzcCAmJiAoc3AtPnNsa19mb3JtYXQgPT0gNCkpIHsKKwlpbnQgaTsKKworCW12d2hsaW5lKHdpbiwgMCwgMCwgMCwgZ2V0bWF4eCh3aW4pKTsKKwl3bW92ZSh3aW4sIDAsIDApOworCisJZm9yIChpID0gMDsgaSA8IHNwLT5fc2xrLT5tYXhsYWI7IGkrKykgeworCSAgICBtdndwcmludHcod2luLCAwLCBzcC0+X3Nsay0+ZW50W2ldLmVudF94LCAiRiVkIiwgaSArIDEpOworCX0KKyAgICB9Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgc29mdCBsYWJlbHMgdG8gdGhlIHNvZnQta2V5IHdpbmRvdy4KKyAqLworc3RhdGljIHZvaWQKK3Nsa19pbnRlcm5fcmVmcmVzaChTTEsgKiBzbGspCit7CisgICAgaW50IGk7CisgICAgaW50IGZtdCA9IFNQLT5zbGtfZm9ybWF0OworCisgICAgZm9yIChpID0gMDsgaSA8IHNsay0+bGFiY250OyBpKyspIHsKKwlpZiAoc2xrLT5kaXJ0eSB8fCBzbGstPmVudFtpXS5kaXJ0eSkgeworCSAgICBpZiAoc2xrLT5lbnRbaV0udmlzaWJsZSkgeworCQlpZiAobnVtX2xhYmVscyA+IDAgJiYgU0xLX1NUREZNVChmbXQpKSB7CisJCSAgICBpZiAoaSA8IG51bV9sYWJlbHMpIHsKKwkJCVRQVVRTX1RSQUNFKCJwbGFiX25vcm0iKTsKKwkJCXB1dHAoVFBBUk1fMihwbGFiX25vcm0sIGkgKyAxLCBzbGstPmVudFtpXS5mb3JtX3RleHQpKTsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGlmIChmbXQgPT0gNCkKKwkJCXNsa19wYWludF9pbmZvKHNsay0+d2luKTsKKwkJICAgIHdtb3ZlKHNsay0+d2luLCBTTEtfTElORVMoZm10KSAtIDEsIHNsay0+ZW50W2ldLmVudF94KTsKKwkJICAgIGlmIChTUC0+X3NsaykgeworCQkJd2F0dHJzZXQoc2xrLT53aW4sIEF0dHJPZihTUC0+X3Nsay0+YXR0cikpOworCQkgICAgfQorCQkgICAgd2FkZHN0cihzbGstPndpbiwgc2xrLT5lbnRbaV0uZm9ybV90ZXh0KTsKKwkJICAgIC8qIGlmIHdlIHNpbXVsYXRlIFNMSydzLCBpdCdzIGxvb2tpbmcgbXVjaCBtb3JlCisJCSAgICAgICBuYXR1cmFsIHRvIHVzZSB0aGUgY3VycmVudCBBVFRSSUJVVEUgYWxzbworCQkgICAgICAgZm9yIHRoZSBsYWJlbCB3aW5kb3cgKi8KKwkJICAgIHdhdHRyc2V0KHNsay0+d2luLCBXSU5ET1dfQVRUUlMoc3Rkc2NyKSk7CisJCX0KKwkgICAgfQorCSAgICBzbGstPmVudFtpXS5kaXJ0eSA9IEZBTFNFOworCX0KKyAgICB9CisgICAgc2xrLT5kaXJ0eSA9IEZBTFNFOworCisgICAgaWYgKG51bV9sYWJlbHMgPiAwKSB7CisJaWYgKHNsay0+aGlkZGVuKSB7CisJICAgIFRQVVRTX1RSQUNFKCJsYWJlbF9vZmYiKTsKKwkgICAgcHV0cChsYWJlbF9vZmYpOworCX0gZWxzZSB7CisJICAgIFRQVVRTX1RSQUNFKCJsYWJlbF9vbiIpOworCSAgICBwdXRwKGxhYmVsX29uKTsKKwl9CisgICAgfQorfQorCisvKgorICogUmVmcmVzaCB0aGUgc29mdCBsYWJlbHMuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19ub3V0cmVmcmVzaCh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJzbGtfbm91dHJlZnJlc2goKSIpKSk7CisKKyAgICBpZiAoU1AgPT0gTlVMTCB8fCBTUC0+X3NsayA9PSBOVUxMKQorCXJldHVybkNvZGUoRVJSKTsKKyAgICBpZiAoU1AtPl9zbGstPmhpZGRlbikKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICBzbGtfaW50ZXJuX3JlZnJlc2goU1AtPl9zbGspOworCisgICAgcmV0dXJuQ29kZSh3bm91dHJlZnJlc2goU1AtPl9zbGstPndpbikpOworfQorCisvKgorICogUmVmcmVzaCB0aGUgc29mdCBsYWJlbHMuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa19yZWZyZXNoKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa19yZWZyZXNoKCkiKSkpOworCisgICAgaWYgKFNQID09IE5VTEwgfHwgU1AtPl9zbGsgPT0gTlVMTCkKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgaWYgKFNQLT5fc2xrLT5oaWRkZW4pCisJcmV0dXJuQ29kZShPSyk7CisgICAgc2xrX2ludGVybl9yZWZyZXNoKFNQLT5fc2xrKTsKKworICAgIHJldHVybkNvZGUod3JlZnJlc2goU1AtPl9zbGstPndpbikpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGtzZXQuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5Zjg4ZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfc2xrc2V0LmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBKdWVyZ2VuIFBmZWlmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa3NldC5jCisgKiAgICAgIFNldCBzb2Z0IGxhYmVsIHRleHQuCisgKi8KKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2lmIEhBVkVfV0NUWVBFX0gKKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKyNlbmRpZgorI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiBsaWJfc2xrc2V0LmMsdiAxLjE3IDIwMDcvMTAvMTMgMjA6MDg6NDYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX3NldChpbnQgaSwgY29uc3QgY2hhciAqYXN0ciwgaW50IGZvcm1hdCkKK3sKKyAgICBTTEsgKnNsazsKKyAgICBpbnQgb2Zmc2V0OworICAgIGludCBudW1jaHJzOworICAgIGludCBudW1jb2xzOworICAgIGludCBsaW1pdDsKKyAgICBjb25zdCBjaGFyICpzdHIgPSBhc3RyOworICAgIGNvbnN0IGNoYXIgKnA7CisKKyAgICBUKChUX0NBTExFRCgic2xrX3NldCglZCwgXCIlc1wiLCAlZCkiKSwgaSwgc3RyLCBmb3JtYXQpKTsKKworICAgIGlmIChTUCA9PSAwCisJfHwgKHNsayA9IFNQLT5fc2xrKSA9PSAwCisJfHwgaSA8IDEKKwl8fCBpID4gc2xrLT5sYWJjbnQKKwl8fCBmb3JtYXQgPCAwCisJfHwgZm9ybWF0ID4gMikKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorCXN0ciA9ICIiOworICAgIC0taTsJCQkvKiBBZGp1c3QgbnVtYmVyaW5nIG9mIGxhYmVscyAqLworCisgICAgbGltaXQgPSBNQVhfU0tFWV9MRU4oU1AtPnNsa19mb3JtYXQpOworICAgIHdoaWxlIChpc3NwYWNlKFVDaGFyKCpzdHIpKSkKKwlzdHIrKzsJCQkvKiBza2lwIG92ZXIgbGVhZGluZyBzcGFjZXMgICovCisgICAgcCA9IHN0cjsKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgbnVtY29scyA9IDA7CisgICAgd2hpbGUgKCpwICE9IDApIHsKKwltYnN0YXRlX3Qgc3RhdGU7CisJd2NoYXJfdCB3YzsKKwlzaXplX3QgbmVlZDsKKworCWluaXRfbWIoc3RhdGUpOworCW5lZWQgPSBtYnJ0b3djKDAsIHAsIHN0cmxlbihwKSwgJnN0YXRlKTsKKwlpZiAobmVlZCA9PSAoc2l6ZV90KSAtMSkKKwkgICAgYnJlYWs7CisJbWJydG93Yygmd2MsIHAsIG5lZWQsICZzdGF0ZSk7CisJaWYgKCFpc3dwcmludCgod2ludF90KSB3YykpCisJICAgIGJyZWFrOworCWlmICh3Y3dpZHRoKHdjKSArIG51bWNvbHMgPiBsaW1pdCkKKwkgICAgYnJlYWs7CisJbnVtY29scyArPSB3Y3dpZHRoKHdjKTsKKwlwICs9IG5lZWQ7CisgICAgfQorICAgIG51bWNocnMgPSAocCAtIHN0cik7CisjZWxzZQorICAgIHdoaWxlIChpc3ByaW50KFVDaGFyKCpwKSkpCisJcCsrOwkJCS8qIFRoZSBmaXJzdCBub24tcHJpbnQgc3RvcHMgKi8KKworICAgIG51bWNvbHMgPSAocCAtIHN0cik7CisgICAgaWYgKG51bWNvbHMgPiBsaW1pdCkKKwludW1jb2xzID0gbGltaXQ7CisgICAgbnVtY2hycyA9IG51bWNvbHM7CisjZW5kaWYKKworICAgIEZyZWVJZk5lZWRlZChzbGstPmVudFtpXS5lbnRfdGV4dCk7CisgICAgaWYgKChzbGstPmVudFtpXS5lbnRfdGV4dCA9IHN0cmR1cChzdHIpKSA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKyAgICBzbGstPmVudFtpXS5lbnRfdGV4dFtudW1jaHJzXSA9ICdcMCc7CisKKyAgICBpZiAoKHNsay0+ZW50W2ldLmZvcm1fdGV4dCA9IChjaGFyICopIF9uY19kb2FsbG9jKHNsay0+ZW50W2ldLmZvcm1fdGV4dCwKKwkJCQkJCSAgICAgICh1bnNpZ25lZCkgKGxpbWl0ICsKKwkJCQkJCQkJICBudW1jaHJzICsgMSkpCisJKSA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIDA6CQkJLyogbGVmdC1qdXN0aWZpZWQgKi8KKwlvZmZzZXQgPSAwOworCWJyZWFrOworICAgIGNhc2UgMToJCQkvKiBjZW50ZXJlZCAqLworCW9mZnNldCA9IChsaW1pdCAtIG51bWNvbHMpIC8gMjsKKwlicmVhazsKKyAgICBjYXNlIDI6CQkJLyogcmlnaHQtanVzdGlmaWVkICovCisJb2Zmc2V0ID0gbGltaXQgLSBudW1jb2xzOworCWJyZWFrOworICAgIH0KKyAgICBpZiAob2Zmc2V0IDw9IDApCisJb2Zmc2V0ID0gMDsKKyAgICBlbHNlCisJbWVtc2V0KHNsay0+ZW50W2ldLmZvcm1fdGV4dCwgJyAnLCAodW5zaWduZWQpIG9mZnNldCk7CisKKyAgICBtZW1jcHkoc2xrLT5lbnRbaV0uZm9ybV90ZXh0ICsgb2Zmc2V0LAorCSAgIHNsay0+ZW50W2ldLmVudF90ZXh0LAorCSAgICh1bnNpZ25lZCkgbnVtY2hycyk7CisKKyAgICBpZiAob2Zmc2V0IDwgbGltaXQpIHsKKwltZW1zZXQoc2xrLT5lbnRbaV0uZm9ybV90ZXh0ICsgb2Zmc2V0ICsgbnVtY2hycywKKwkgICAgICAgJyAnLAorCSAgICAgICAodW5zaWduZWQpIChsaW1pdCAtIChvZmZzZXQgKyBudW1jb2xzKSkpOworICAgIH0KKworICAgIHNsay0+ZW50W2ldLmZvcm1fdGV4dFtudW1jaHJzIC0gbnVtY29scyArIGxpbWl0XSA9IDA7CisgICAgc2xrLT5lbnRbaV0uZGlydHkgPSBUUlVFOworICAgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGt0b3VjaC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl9zbGt0b3VjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYjVkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3Nsa3RvdWNoLmMKQEAgLTAsMCArMSw1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OCwyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfc2xrdG91Y2guYworICoJU29mdCBrZXkgcm91dGluZXMuCisgKiAgICAgIEZvcmNlIHRoZSBjb2RlIHRvIGJlbGlldmUgdGhhdCB0aGUgc29mdCBrZXlzIGhhdmUgYmVlbiBjaGFuZ2VkLgorICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGt0b3VjaC5jLHYgMS41IDIwMDAvMTIvMTAgMDI6NDM6MjcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2xrX3RvdWNoKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoInNsa190b3VjaCgpIikpKTsKKworICAgIGlmIChTUCA9PSBOVUxMIHx8IFNQLT5fc2xrID09IE5VTEwpCisJcmV0dXJuQ29kZShFUlIpOworICAgIFNQLT5fc2xrLT5kaXJ0eSA9IFRSVUU7CisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfdG91Y2guYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfdG91Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWMyMWYyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl90b3VjaC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3RvdWNoLmMKKyoqCisqKgkgICBUaGUgcm91dGluZXMJdW50b3VjaHdpbigpLAorKioJCQl3dG91Y2hsbigpLAorKioJCQlpc19saW5ldG91Y2hlZCgpCisqKgkJCWlzX3dpbnRvdWNoZWQoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90b3VjaC5jLHYgMS45IDIwMDAvMTIvMTAgMDI6NDM6MjcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK2lzX2xpbmV0b3VjaGVkKFdJTkRPVyAqd2luLCBpbnQgbGluZSkKK3sKKyAgICBUKChUX0NBTExFRCgiaXNfbGluZXRvdWNoZWQoJXAsJWQpIiksIHdpbiwgbGluZSkpOworCisgICAgLyogWFNJIGRvZXNuJ3QgZGVmaW5lIGFueSBlcnJvciAqLworICAgIGlmICghd2luIHx8IChsaW5lID4gd2luLT5fbWF4eSkgfHwgKGxpbmUgPCAwKSkKKwlyZXR1cm5Db2RlKChib29sKSBFUlIpOworCisgICAgcmV0dXJuQ29kZSh3aW4tPl9saW5lW2xpbmVdLmZpcnN0Y2hhciAhPSBfTk9DSEFOR0UgPyBUUlVFIDogRkFMU0UpOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQoraXNfd2ludG91Y2hlZChXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJpc193aW50b3VjaGVkKCVwKSIpLCB3aW4pKTsKKworICAgIGlmICh3aW4pCisJZm9yIChpID0gMDsgaSA8PSB3aW4tPl9tYXh5OyBpKyspCisJICAgIGlmICh3aW4tPl9saW5lW2ldLmZpcnN0Y2hhciAhPSBfTk9DSEFOR0UpCisJCXJldHVybkNvZGUoVFJVRSk7CisgICAgcmV0dXJuQ29kZShGQUxTRSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3d0b3VjaGxuKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IG4sIGludCBjaGFuZ2VkKQoreworICAgIGludCBpOworCisgICAgVCgoVF9DQUxMRUQoInd0b3VjaGxuKCVwLCVkLCVkLCVkKSIpLCB3aW4sIHksIG4sIGNoYW5nZWQpKTsKKworICAgIGlmICghd2luIHx8IChuIDwgMCkgfHwgKHkgPCAwKSB8fCAoeSA+IHdpbi0+X21heHkpKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIGZvciAoaSA9IHk7IGkgPCB5ICsgbjsgaSsrKSB7CisJaWYgKGkgPiB3aW4tPl9tYXh5KQorCSAgICBicmVhazsKKwl3aW4tPl9saW5lW2ldLmZpcnN0Y2hhciA9IGNoYW5nZWQgPyAwIDogX05PQ0hBTkdFOworCXdpbi0+X2xpbmVbaV0ubGFzdGNoYXIgPSBjaGFuZ2VkID8gd2luLT5fbWF4eCA6IF9OT0NIQU5HRTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3VuZ2V0Y2guYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfdW5nZXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDJmODYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3VuZ2V0Y2guYwpAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfdW5nZXRjaC5jCisqKgorKioJVGhlIHJvdXRpbmUgdW5nZXRjaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3VuZ2V0Y2guYyx2IDEuMTEgMjAwOC8wNS8zMSAxNjo0NDo1NCB0b20gRXhwICQiKQorCisjaW5jbHVkZSA8Zmlmb19kZWZzLmg+CisKKyNpZmRlZiBUUkFDRQorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19maWZvX2R1bXAoU0NSRUVOICpzcCkKK3sKKyAgICBpbnQgaTsKKyAgICBUKCgiaGVhZCA9ICVkLCB0YWlsID0gJWQsIHBlZWsgPSAlZCIsIGhlYWQsIHRhaWwsIHBlZWspKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwlUKCgiY2hhciAlZCA9ICVzIiwgaSwgX25jX3RyYWNlY2hhcihzcCwgc3AtPl9maWZvW2ldKSkpOworfQorI2VuZGlmIC8qIFRSQUNFICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY191bmdldGNoKFNDUkVFTiAqc3AsIGludCBjaCkKK3sKKyAgICBpbnQgcmMgPSBFUlI7CisKKyAgICBpZiAodGFpbCAhPSAtMSkgeworCWlmIChoZWFkID09IC0xKSB7CisJICAgIGhlYWQgPSAwOworCSAgICB0X2luYygpOworCSAgICBwZWVrID0gdGFpbDsJLyogbm8gcmF3IGtleXMgKi8KKwl9IGVsc2UKKwkgICAgaF9kZWMoKTsKKworCXNwLT5fZmlmb1toZWFkXSA9IGNoOworCVQoKCJ1bmdldGNoICVzIG9rIiwgX25jX3RyYWNlY2hhcihzcCwgY2gpKSk7CisjaWZkZWYgVFJBQ0UKKwlpZiAoVVNFX1RSQUNFRihUUkFDRV9JRVZFTlQpKSB7CisJICAgIF9uY19maWZvX2R1bXAoc3ApOworCSAgICBfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworCX0KKyNlbmRpZgorCXJjID0gT0s7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQordW5nZXRjaChpbnQgY2gpCit7CisgICAgVCgoVF9DQUxMRUQoInVuZ2V0Y2goJXMpIiksIF9uY190cmFjZWNoYXIoU1AsIGNoKSkpOworICAgIHJldHVybkNvZGUoX25jX3VuZ2V0Y2goU1AsIGNoKSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3ZsaW5lLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3ZsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyNTM3ZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfdmxpbmUuYwpAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl92bGluZS5jCisqKgorKioJVGhlIHJvdXRpbmUgd3ZsaW5lKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdmxpbmUuYyx2IDEuMTAgMjAwNi8wMy8xMSAyMTo1MjoxOSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3dmxpbmUoV0lORE9XICp3aW4sIGNodHlwZSBjaCwgaW50IG4pCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgTkNVUlNFU19TSVpFX1Qgcm93LCBjb2w7CisgICAgTkNVUlNFU19TSVpFX1QgZW5kOworCisgICAgVCgoVF9DQUxMRUQoInd2bGluZSglcCwlcywlZCkiKSwgd2luLCBfdHJhY2VjaHR5cGUoY2gpLCBuKSk7CisKKyAgICBpZiAod2luKSB7CisJTkNVUlNFU19DSF9UIHdjaDsKKwlyb3cgPSB3aW4tPl9jdXJ5OworCWNvbCA9IHdpbi0+X2N1cng7CisJZW5kID0gcm93ICsgbiAtIDE7CisJaWYgKGVuZCA+IHdpbi0+X21heHkpCisJICAgIGVuZCA9IHdpbi0+X21heHk7CisKKwlpZiAoY2ggPT0gMCkKKwkgICAgU2V0Q2hhcjIod2NoLCBBQ1NfVkxJTkUpOworCWVsc2UKKwkgICAgU2V0Q2hhcjIod2NoLCBjaCk7CisJd2NoID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisKKwl3aGlsZSAoZW5kID49IHJvdykgeworCSAgICBzdHJ1Y3QgbGRhdCAqbGluZSA9ICYod2luLT5fbGluZVtlbmRdKTsKKwkgICAgbGluZS0+dGV4dFtjb2xdID0gd2NoOworCSAgICBDSEFOR0VEX0NFTEwobGluZSwgY29sKTsKKwkgICAgZW5kLS07CisJfQorCisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl93YXR0cm9mZi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl93YXR0cm9mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMjAyMGUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3dhdHRyb2ZmLmMKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3dhdHRyb2ZmLmMKKyoqCisqKglUaGUgcm91dGluZSB3YXR0cl9vZmYoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3dhdHRyb2ZmLmMsdiAxLjkgMjAwNi8wNS8yNyAxOTozMDozMyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3YXR0cl9vZmYoV0lORE9XICp3aW4sIGF0dHJfdCBhdCwgdm9pZCAqb3B0cyBHQ0NfVU5VU0VEKQoreworICAgIFQoKFRfQ0FMTEVEKCJ3YXR0cl9vZmYoJXAsJXMpIiksIHdpbiwgX3RyYWNlYXR0cihhdCkpKTsKKyAgICBpZiAod2luKSB7CisJVCgoIi4uLiBjdXJyZW50ICVzICglZCkiLAorCSAgIF90cmFjZWF0dHIoV0lORE9XX0FUVFJTKHdpbikpLAorCSAgIEdFVF9XSU5ET1dfUEFJUih3aW4pKSk7CisKKwlpZl9FWFRfQ09MT1JTKHsKKwkgICAgaWYgKGF0ICYgQV9DT0xPUikKKwkJd2luLT5fY29sb3IgPSAwOworCX0pOworCXRvZ2dsZV9hdHRyX29mZihXSU5ET1dfQVRUUlMod2luKSwgYXQpOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfd2F0dHJvbi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl93YXR0cm9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxN2Q5NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfd2F0dHJvbi5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl93YXR0cm9uLmMKKyoqCisqKglUaGUgcm91dGluZXMgd2F0dHJfb24oKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3dhdHRyb24uYyx2IDEuOSAyMDA2LzA1LzI3IDE5OjMwOjQ2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dhdHRyX29uKFdJTkRPVyAqd2luLCBhdHRyX3QgYXQsIHZvaWQgKm9wdHMgR0NDX1VOVVNFRCkKK3sKKyAgICBUKChUX0NBTExFRCgid2F0dHJfb24oJXAsJXMpIiksIHdpbiwgX3RyYWNlYXR0cihhdCkpKTsKKyAgICBpZiAod2luICE9IDApIHsKKwlUKCgiLi4uIGN1cnJlbnQgJXMgKCVkKSIsCisJICAgX3RyYWNlYXR0cihXSU5ET1dfQVRUUlMod2luKSksCisJICAgR0VUX1dJTkRPV19QQUlSKHdpbikpKTsKKworCWlmX0VYVF9DT0xPUlMoeworCSAgICBpZiAoYXQgJiBBX0NPTE9SKQorCQl3aW4tPl9jb2xvciA9IFBBSVJfTlVNQkVSKGF0KTsKKwl9KTsKKwl0b2dnbGVfYXR0cl9vbihXSU5ET1dfQVRUUlMod2luKSwgYXQpOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfd2luY2guYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9saWJfd2luY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGRhOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl93aW5jaC5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCwyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk4ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfd2luY2guYworKioKKyoqCVRoZSByb3V0aW5lIHdpbmNoKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfd2luY2guYyx2IDEuNSAyMDAxLzA2LzAyIDIzOjQyOjA4IHNraW1vIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoY2h0eXBlKQord2luY2goV0lORE9XICp3aW4pCit7CisgICAgVCgoVF9DQUxMRUQoIndpbmNoKCVwKSIpLCB3aW4pKTsKKyAgICBpZiAod2luICE9IDApIHsKKwlyZXR1cm5DaGFyKENoYXJPZih3aW4tPl9saW5lW3dpbi0+X2N1cnldLnRleHRbd2luLT5fY3VyeF0pIHwKKwkJICAgQXR0ck9mKHdpbi0+X2xpbmVbd2luLT5fY3VyeV0udGV4dFt3aW4tPl9jdXJ4XSkpOworICAgIH0gZWxzZSB7CisJcmV0dXJuQ2hhcigwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbGliX3dpbmRvdy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl93aW5kb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzIzNmUyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL2xpYl93aW5kb3cuYwpAQCAtMCwwICsxLDI1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfd2luZG93LmMKKyoqCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfd2luZG93LmMsdiAxLjI1IDIwMDgvMDYvMDcgMTQ6MTI6NTYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zeW5jaG9vayhXSU5ET1cgKndpbikKKy8qIGhvb2sgdG8gYmUgY2FsbGVkIGFmdGVyIGVhY2ggd2luZG93IGNoYW5nZSAqLworeworICAgIGlmICh3aW4tPl9pbW1lZCkKKwl3cmVmcmVzaCh3aW4pOworICAgIGlmICh3aW4tPl9zeW5jKQorCXdzeW5jdXAod2luKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbXZkZXJ3aW4oV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkKKy8qIG1vdmUgYSBkZXJpdmVkIHdpbmRvdyAqLworeworICAgIFdJTkRPVyAqb3JpZzsKKyAgICBpbnQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJtdmRlcndpbiglcCwlZCwlZCkiKSwgd2luLCB5LCB4KSk7CisKKyAgICBpZiAod2luICYmIChvcmlnID0gd2luLT5fcGFyZW50KSkgeworCWlmICh3aW4tPl9wYXJ4ID09IHggJiYgd2luLT5fcGFyeSA9PSB5KQorCSAgICByZXR1cm5Db2RlKE9LKTsKKwlpZiAoeCA8IDAgfHwgeSA8IDApCisJICAgIHJldHVybkNvZGUoRVJSKTsKKwlpZiAoKHggKyBnZXRtYXh4KHdpbikgPiBnZXRtYXh4KG9yaWcpKSB8fAorCSAgICAoeSArIGdldG1heHkod2luKSA+IGdldG1heHkob3JpZykpKQorCSAgICByZXR1cm5Db2RlKEVSUik7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworICAgIHdzeW5jdXAod2luKTsKKyAgICB3aW4tPl9wYXJ4ID0geDsKKyAgICB3aW4tPl9wYXJ5ID0geTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZ2V0bWF4eSh3aW4pOyBpKyspCisJd2luLT5fbGluZVtpXS50ZXh0ID0gJihvcmlnLT5fbGluZVt5KytdLnRleHRbeF0pOworICAgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzeW5jb2soV0lORE9XICp3aW4sIGJvb2wgYmYpCisvKiBlbmFibGUvZGlzYWJsZSBhdXRvbWF0aWMgd3N5bmN1cCgpIG9uIGVhY2ggY2hhbmdlIHRvIHdpbmRvdyAqLworeworICAgIFQoKFRfQ0FMTEVEKCJzeW5jb2soJXAsJWQpIiksIHdpbiwgYmYpKTsKKworICAgIGlmICh3aW4pIHsKKwl3aW4tPl9zeW5jID0gYmY7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlCisJcmV0dXJuQ29kZShFUlIpOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQord3N5bmN1cChXSU5ET1cgKndpbikKKy8qIG1hcmsgY2hhbmdlZCBldmVyeSBjZWxsIGluIHdpbidzIGFuY2VzdG9ycyB0aGF0IGlzIGNoYW5nZWQgaW4gd2luICovCisvKiBSZXdyaXR0ZW4gYnkgSi4gUGZlaWZlciwgMS1BcHItOTYgKGRvbid0IGV2ZW4gdGhpbmsgdGhhdC4uLikgICAgICAqLworeworICAgIFdJTkRPVyAqd3A7CisKKyAgICBUKChUX0NBTExFRCgid3N5bmN1cCglcCkiKSwgd2luKSk7CisgICAgaWYgKHdpbiAmJiB3aW4tPl9wYXJlbnQpIHsKKwlmb3IgKHdwID0gd2luOyB3cC0+X3BhcmVudDsgd3AgPSB3cC0+X3BhcmVudCkgeworCSAgICBpbnQgeTsKKwkgICAgV0lORE9XICpwcCA9IHdwLT5fcGFyZW50OworCisJICAgIGFzc2VydCgod3AtPl9wYXJ5IDw9IHBwLT5fbWF4eSkgJiYKKwkJICAgKCh3cC0+X3BhcnkgKyB3cC0+X21heHkpIDw9IHBwLT5fbWF4eSkpOworCisJICAgIGZvciAoeSA9IDA7IHkgPD0gd3AtPl9tYXh5OyB5KyspIHsKKwkJaW50IGxlZnQgPSB3cC0+X2xpbmVbeV0uZmlyc3RjaGFyOworCQlpZiAobGVmdCA+PSAwKSB7CS8qIGxpbmUgaXMgdG91Y2hlZCAqLworCQkgICAgc3RydWN0IGxkYXQgKmxpbmUgPSAmKHBwLT5fbGluZVt3cC0+X3BhcnkgKyB5XSk7CisJCSAgICAvKiBsZWZ0ICYgcmlnaHQgY2hhcmFjdGVyIGluIHBhcmVudCB3aW5kb3cgY29vcmRpbmF0ZXMgKi8KKwkJICAgIGludCByaWdodCA9IHdwLT5fbGluZVt5XS5sYXN0Y2hhciArIHdwLT5fcGFyeDsKKwkJICAgIGxlZnQgKz0gd3AtPl9wYXJ4OworCisJCSAgICBDSEFOR0VEX1JBTkdFKGxpbmUsIGxlZnQsIHJpZ2h0KTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm5Wb2lkOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQord3N5bmNkb3duKFdJTkRPVyAqd2luKQorLyogbWFyayBjaGFuZ2VkIGV2ZXJ5IGNlbGwgaW4gd2luIHRoYXQgaXMgY2hhbmdlZCBpbiBhbnkgb2YgaXRzIGFuY2VzdG9ycyAqLworLyogUmV3cml0dGVuIGJ5IEouIFBmZWlmZXIsIDEtQXByLTk2IChkb24ndCBldmVuIHRoaW5rIHRoYXQuLi4pICAgICAgICAgICAqLworeworICAgIFQoKFRfQ0FMTEVEKCJ3c3luY2Rvd24oJXApIiksIHdpbikpOworCisgICAgaWYgKHdpbiAmJiB3aW4tPl9wYXJlbnQpIHsKKwlXSU5ET1cgKnBwID0gd2luLT5fcGFyZW50OworCWludCB5OworCisJLyogVGhpcyByZWN1cnNpb24gZ3VhcmFudGVlcywgdGhhdCB0aGUgY2hhbmdlcyBhcmUgcHJvcGFnYXRlZCBkb3duLQorCSAgIHdhcmRzIGZyb20gdGhlIHJvb3QgdG8gb3VyIGRpcmVjdCBwYXJlbnQuICovCisJd3N5bmNkb3duKHBwKTsKKworCS8qIGFuZCBub3cgd2Ugb25seSBoYXZlIHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlcyBmcm9tIG91ciBkaXJlY3QKKwkgICBwYXJlbnQsIGlmIHRoZXJlIGFyZSBhbnkuICovCisJYXNzZXJ0KCh3aW4tPl9wYXJ5IDw9IHBwLT5fbWF4eSkgJiYKKwkgICAgICAgKCh3aW4tPl9wYXJ5ICsgd2luLT5fbWF4eSkgPD0gcHAtPl9tYXh5KSk7CisKKwlmb3IgKHkgPSAwOyB5IDw9IHdpbi0+X21heHk7IHkrKykgeworCSAgICBpZiAocHAtPl9saW5lW3dpbi0+X3BhcnkgKyB5XS5maXJzdGNoYXIgPj0gMCkgewkvKiBwYXJlbnQgY2hhbmdlZCAqLworCQlzdHJ1Y3QgbGRhdCAqbGluZSA9ICYod2luLT5fbGluZVt5XSk7CisJCS8qIGxlZnQgYW5kIHJpZ2h0IGNoYXJhY3RlciBpbiBjaGlsZCBjb29yZGluYXRlcyAqLworCQlpbnQgbGVmdCA9IHBwLT5fbGluZVt3aW4tPl9wYXJ5ICsgeV0uZmlyc3RjaGFyIC0gd2luLT5fcGFyeDsKKwkJaW50IHJpZ2h0ID0gcHAtPl9saW5lW3dpbi0+X3BhcnkgKyB5XS5sYXN0Y2hhciAtIHdpbi0+X3Bhcng7CisJCS8qIFRoZSBjaGFuZ2UgbWF5IGJlIG91dHNpZGUgdGhlIGNoaWxkJ3MgcmFuZ2UgKi8KKwkJaWYgKGxlZnQgPCAwKQorCQkgICAgbGVmdCA9IDA7CisJCWlmIChyaWdodCA+IHdpbi0+X21heHgpCisJCSAgICByaWdodCA9IHdpbi0+X21heHg7CisJCUNIQU5HRURfUkFOR0UobGluZSwgbGVmdCwgcmlnaHQpOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm5Wb2lkOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQord2N1cnN5bmN1cChXSU5ET1cgKndpbikKKy8qIHN5bmMgdGhlIGN1cnNvciBpbiBhbGwgZGVyaXZlZCB3aW5kb3dzIHRvIGl0cyB2YWx1ZSBpbiB0aGUgYmFzZSB3aW5kb3cgKi8KK3sKKyAgICBXSU5ET1cgKndwOworCisgICAgVCgoVF9DQUxMRUQoIndjdXJzeW5jdXAoJXApIiksIHdpbikpOworICAgIGZvciAod3AgPSB3aW47IHdwICYmIHdwLT5fcGFyZW50OyB3cCA9IHdwLT5fcGFyZW50KSB7CisJd21vdmUod3AtPl9wYXJlbnQsIHdwLT5fcGFyeSArIHdwLT5fY3VyeSwgd3AtPl9wYXJ4ICsgd3AtPl9jdXJ4KTsKKyAgICB9CisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitkdXB3aW4oV0lORE9XICp3aW4pCisvKiBtYWtlIGFuIGV4YWN0IGR1cGxpY2F0ZSBvZiB0aGUgZ2l2ZW4gd2luZG93ICovCit7CisgICAgV0lORE9XICpud2luID0gMDsKKyAgICBzaXplX3QgbGluZXNpemU7CisgICAgaW50IGk7CisKKyAgICBUKChUX0NBTExFRCgiZHVwd2luKCVwKSIpLCB3aW4pKTsKKworICAgIGlmICh3aW4gIT0gMCkgeworCisJX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisJaWYgKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSB7CisJICAgIG53aW4gPSBuZXdwYWQod2luLT5fbWF4eSArIDEsCisJCQkgIHdpbi0+X21heHggKyAxKTsKKwl9IGVsc2UgeworCSAgICBud2luID0gbmV3d2luKHdpbi0+X21heHkgKyAxLAorCQkJICB3aW4tPl9tYXh4ICsgMSwKKwkJCSAgd2luLT5fYmVneSwKKwkJCSAgd2luLT5fYmVneCk7CisJfQorCisJaWYgKG53aW4gIT0gMCkgeworCisJICAgIG53aW4tPl9jdXJ4ID0gd2luLT5fY3VyeDsKKwkgICAgbndpbi0+X2N1cnkgPSB3aW4tPl9jdXJ5OworCSAgICBud2luLT5fbWF4eSA9IHdpbi0+X21heHk7CisJICAgIG53aW4tPl9tYXh4ID0gd2luLT5fbWF4eDsKKwkgICAgbndpbi0+X2JlZ3kgPSB3aW4tPl9iZWd5OworCSAgICBud2luLT5fYmVneCA9IHdpbi0+X2JlZ3g7CisJICAgIG53aW4tPl95b2Zmc2V0ID0gd2luLT5feW9mZnNldDsKKworCSAgICBud2luLT5fZmxhZ3MgPSB3aW4tPl9mbGFncyAmIH5fU1VCV0lOOworCSAgICAvKiBEdWUgdG8gdGhlIHVzZSBvZiBuZXd3aW4oKSwgdGhlIGNsb25lIGlzIG5vdCBhIHN1YndpbmRvdy4KKwkgICAgICogVGhlIHRleHQgaXMgcmVhbGx5IGNvcGllZCBpbnRvIHRoZSBjbG9uZS4KKwkgICAgICovCisKKwkgICAgV0lORE9XX0FUVFJTKG53aW4pID0gV0lORE9XX0FUVFJTKHdpbik7CisJICAgIG53aW4tPl9uY19ia2dkID0gd2luLT5fbmNfYmtnZDsKKworCSAgICBud2luLT5fbm90aW1lb3V0ID0gd2luLT5fbm90aW1lb3V0OworCSAgICBud2luLT5fY2xlYXIgPSB3aW4tPl9jbGVhcjsKKwkgICAgbndpbi0+X2xlYXZlb2sgPSB3aW4tPl9sZWF2ZW9rOworCSAgICBud2luLT5fc2Nyb2xsID0gd2luLT5fc2Nyb2xsOworCSAgICBud2luLT5faWRsb2sgPSB3aW4tPl9pZGxvazsKKwkgICAgbndpbi0+X2lkY29rID0gd2luLT5faWRjb2s7CisJICAgIG53aW4tPl9pbW1lZCA9IHdpbi0+X2ltbWVkOworCSAgICBud2luLT5fc3luYyA9IHdpbi0+X3N5bmM7CisJICAgIG53aW4tPl91c2Vfa2V5cGFkID0gd2luLT5fdXNlX2tleXBhZDsKKwkgICAgbndpbi0+X2RlbGF5ID0gd2luLT5fZGVsYXk7CisKKwkgICAgbndpbi0+X3BhcnggPSAwOworCSAgICBud2luLT5fcGFyeSA9IDA7CisJICAgIG53aW4tPl9wYXJlbnQgPSAoV0lORE9XICopIDA7CisJICAgIC8qIFNlZSBhYm92ZTogdGhlIGNsb25lIGlzbid0IGEgc3Vid2luZG93ISAqLworCisJICAgIG53aW4tPl9yZWd0b3AgPSB3aW4tPl9yZWd0b3A7CisJICAgIG53aW4tPl9yZWdib3R0b20gPSB3aW4tPl9yZWdib3R0b207CisKKwkgICAgaWYgKHdpbi0+X2ZsYWdzICYgX0lTUEFEKQorCQlud2luLT5fcGFkID0gd2luLT5fcGFkOworCisJICAgIGxpbmVzaXplID0gKHdpbi0+X21heHggKyAxKSAqIHNpemVvZihOQ1VSU0VTX0NIX1QpOworCSAgICBmb3IgKGkgPSAwOyBpIDw9IG53aW4tPl9tYXh5OyBpKyspIHsKKwkJbWVtY3B5KG53aW4tPl9saW5lW2ldLnRleHQsIHdpbi0+X2xpbmVbaV0udGV4dCwgbGluZXNpemUpOworCQlud2luLT5fbGluZVtpXS5maXJzdGNoYXIgPSB3aW4tPl9saW5lW2ldLmZpcnN0Y2hhcjsKKwkJbndpbi0+X2xpbmVbaV0ubGFzdGNoYXIgPSB3aW4tPl9saW5lW2ldLmxhc3RjaGFyOworCSAgICB9CisJfQorCV9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgfQorICAgIHJldHVybldpbihud2luKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9tZW1tb3ZlLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbWVtbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2FkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbWVtbW92ZS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbWVtbW92ZS5jLHYgMS41IDIwMDcvMDgvMTEgMTc6MTI6NDMgdG9tIEV4cCAkIikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTggICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIFVTRV9NWV9NRU1NT1ZFCisjZGVmaW5lIERTVCAoKGNoYXIgKilzMSkKKyNkZWZpbmUgU1JDICgoY29uc3QgY2hhciAqKXMyKQorTkNVUlNFU19FWFBPUlQodm9pZCAqKQorX25jX21lbW1vdmUodm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBzaXplX3QgbikKK3sKKyAgICBpZiAobiAhPSAwKSB7CisJaWYgKChEU1QgKyBuID4gU1JDKSAmJiAoU1JDICsgbiA+IERTVCkpIHsKKwkgICAgc3RhdGljIGNoYXIgKmJmcjsKKwkgICAgc3RhdGljIHNpemVfdCBsZW5ndGg7CisJICAgIHJlZ2lzdGVyIHNpemVfdCBqOworCSAgICBpZiAobGVuZ3RoIDwgbikgeworCQlsZW5ndGggPSAobiAqIDMpIC8gMjsKKwkJYmZyID0gdHlwZVJlYWxsb2MoY2hhciwgbGVuZ3RoLCBiZnIpOworCSAgICB9CisJICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspCisJCWJmcltqXSA9IFNSQ1tqXTsKKwkgICAgczIgPSBiZnI7CisJfQorCXdoaWxlIChuLS0gIT0gMCkKKwkgICAgRFNUW25dID0gU1JDW25dOworICAgIH0KKyAgICByZXR1cm4gczE7Cit9CisjZWxzZQorZXh0ZXJuCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX21lbW1vdmUodm9pZCk7CQkvKiBxdWlldCdzIGdjYyB3YXJuaW5nICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX21lbW1vdmUodm9pZCkKK3sKK30JCQkJLyogbm9uZW1wdHkgZm9yIHN0cmljdCBBTlNJIGNvbXBpbGVycyAqLworI2VuZGlmIC8qIFVTRV9NWV9NRU1NT1ZFICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbmNfcGFuZWwuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9uY19wYW5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YmZiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvbmNfcGFuZWwuYwpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IG5jX3BhbmVsLmMsdiAxLjQgMjAwMC8xMi8xMCAwMjo0MzoyOCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChzdHJ1Y3QgcGFuZWxob29rICopCitfbmNfcGFuZWxob29rKHZvaWQpCit7CisgICAgcmV0dXJuIChTUCA/ICYoU1AtPl9wYW5lbEhvb2spIDogTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvcmVzaXpldGVybS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL3Jlc2l6ZXRlcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTRjZmMzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL3Jlc2l6ZXRlcm0uYwpAQCAtMCwwICsxLDQ1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBjdXJzZXMgbGlicmFyeS4gIEl0IHByb3ZpZGVzIGNhbGxlcnMgd2l0aCBhIGhvb2sKKyAqIGludG8gdGhlIE5DVVJTRVMgZGF0YSB0byByZXNpemUgd2luZG93cywgcHJpbWFyaWx5IGZvciB1c2UgYnkgcHJvZ3JhbXMKKyAqIHJ1bm5pbmcgaW4gYW4gWCBXaW5kb3cgdGVybWluYWwgKGUuZy4sIHh0ZXJtKS4gIEkgYWJzdHJhY3RlZCB0aGlzIG1vZHVsZQorICogZnJvbSBteSBhcHBsaWNhdGlvbiBsaWJyYXJ5IGZvciBOQ1VSU0VTIGJlY2F1c2UgaXQgbXVzdCBiZSBjb21waWxlZCB3aXRoCisgKiB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgLS0gVC5EaWNrZXkgMTk5NS83LzQuCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogcmVzaXpldGVybS5jLHYgMS4zNCAyMDA4LzA2LzA3IDEzOjU4OjQwIHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgc3RvbGVuX2xpbmVzIChzY3JlZW5fbGluZXMgLSBTUC0+X2xpbmVzX2F2YWlsKQorCisvKgorICogSWYgd2UncmUgdHJ5aW5nIHRvIGJlIHJlZW50cmFudCwgZG8gbm90IHdhbnQgYW55IGxvY2FsIHN0YXRpY3MuCisgKi8KKyNpZiBVU0VfUkVFTlRSQU5UCisjZGVmaW5lIEVYVFJBX0FSR1MgLCAgICAgQ3VyTGluZXMsICAgICBDdXJDb2xzCisjZGVmaW5lIEVYVFJBX0RDTFMgLCBpbnQgQ3VyTGluZXMsIGludCBDdXJDb2xzCisjZWxzZQorc3RhdGljIGludCBjdXJyZW50X2xpbmVzOworc3RhdGljIGludCBjdXJyZW50X2NvbHM7CisjZGVmaW5lIEN1ckxpbmVzIGN1cnJlbnRfbGluZXMKKyNkZWZpbmUgQ3VyQ29scyAgY3VycmVudF9jb2xzCisjZGVmaW5lIEVYVFJBX0FSR1MJCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgRVhUUkFfRENMUwkJLyogbm90aGluZyAqLworI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorc3RhdGljIHZvaWQKK3Nob3dfd2luZG93X3NpemVzKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgV0lORE9XTElTVCAqd3A7CisKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICBfdHJhY2VmKCIlcyByZXNpemluZzogJTJkIHggJTJkICglMmQgeCAlMmQpIiwgbmFtZSwgTElORVMsIENPTFMsCisJICAgIHNjcmVlbl9saW5lcywgc2NyZWVuX2NvbHVtbnMpOworICAgIGZvciAoZWFjaF93aW5kb3cod3ApKSB7CisJX3RyYWNlZigiICB3aW5kb3cgJXAgaXMgJTJsZCB4ICUybGQgYXQgJTJsZCwlMmxkIiwKKwkJJih3cC0+d2luKSwKKwkJKGxvbmcpIHdwLT53aW4uX21heHkgKyAxLAorCQkobG9uZykgd3AtPndpbi5fbWF4eCArIDEsCisJCShsb25nKSB3cC0+d2luLl9iZWd5LAorCQkobG9uZykgd3AtPndpbi5fYmVneCk7CisgICAgfQorICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaCB0aGUgaW50ZXJuYWwgdGVybWluYWwKKyAqIHN0cnVjdHVyZSdzIHNpemUuCisgKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitpc190ZXJtX3Jlc2l6ZWQoaW50IFRvTGluZXMsIGludCBUb0NvbHMpCit7CisgICAgVCgoVF9DQUxMRUQoImlzX3Rlcm1fcmVzaXplZCglZCwgJWQpIiksIFRvTGluZXMsIFRvQ29scykpOworICAgIHJldHVybkNvZGUoVG9MaW5lcyA+IDAKKwkgICAgICAgJiYgVG9Db2xzID4gMAorCSAgICAgICAmJiAoVG9MaW5lcyAhPSBzY3JlZW5fbGluZXMKKwkJICAgfHwgVG9Db2xzICE9IHNjcmVlbl9jb2x1bW5zKSk7Cit9CisKKy8qCisgKi8KK3N0YXRpYyByaXBvZmZfdCAqCityaXBwZWRfd2luZG93KFdJTkRPVyAqd2luKQoreworICAgIHJpcG9mZl90ICpyZXN1bHQgPSAwOworICAgIHJpcG9mZl90ICpyb3A7CisKKyAgICBpZiAod2luICE9IDApIHsKKwlmb3IgKGVhY2hfcmlwb2ZmKHJvcCkpIHsKKwkgICAgaWYgKHJvcC0+d2luID09IHdpbiAmJiByb3AtPmxpbmUgIT0gMCkgeworCQlyZXN1bHQgPSByb3A7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIGJvdHRvbSBmb3IgdGhlIGJlZ2lubmluZyBvZiBhIHJpcHBlZAorICogb2ZmIHdpbmRvdy4KKyAqLworc3RhdGljIGludAorcmlwcGVkX2JvdHRvbShXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICByaXBvZmZfdCAqcm9wOworCisgICAgaWYgKHdpbiAhPSAwKSB7CisJZm9yIChlYWNoX3JpcG9mZihyb3ApKSB7CisJICAgIGlmIChyb3AtPmxpbmUgPCAwKSB7CisJCXJlc3VsdCAtPSByb3AtPmxpbmU7CisJCWlmIChyb3AtPndpbiA9PSB3aW4pIHsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsZXZlbHMgb2YgY2hpbGQtd2luZG93cyB1bmRlciB0aGUgY3VycmVudCB3aW5kb3cuCisgKi8KK3N0YXRpYyBpbnQKK2NoaWxkX2RlcHRoKFdJTkRPVyAqY21wKQoreworICAgIGludCBkZXB0aCA9IDA7CisKKyAgICBpZiAoY21wICE9IDApIHsKKwlXSU5ET1dMSVNUICp3cDsKKworCWZvciAoZWFjaF93aW5kb3cod3ApKSB7CisJICAgIFdJTkRPVyAqdHN0ID0gJih3cC0+d2luKTsKKwkgICAgaWYgKHRzdC0+X3BhcmVudCA9PSBjbXApIHsKKwkJZGVwdGggPSAxICsgY2hpbGRfZGVwdGgodHN0KTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBkZXB0aDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxldmVscyBvZiBwYXJlbnQtd2luZG93cyBhYm92ZSB0aGUgY3VycmVudCB3aW5kb3cuCisgKi8KK3N0YXRpYyBpbnQKK3BhcmVudF9kZXB0aChXSU5ET1cgKmNtcCkKK3sKKyAgICBpbnQgZGVwdGggPSAwOworCisgICAgaWYgKGNtcCAhPSAwKSB7CisJV0lORE9XICp0c3Q7CisJd2hpbGUgKCh0c3QgPSBjbXAtPl9wYXJlbnQpICE9IDApIHsKKwkgICAgKytkZXB0aDsKKwkgICAgY21wID0gdHN0OworCX0KKyAgICB9CisgICAgcmV0dXJuIGRlcHRoOworfQorCisvKgorICogRklYTUU6IG11c3QgYWRqdXN0IHBvc2l0aW9uIHNvIGl0J3Mgd2l0aGluIHRoZSBwYXJlbnQhCisgKi8KK3N0YXRpYyBpbnQKK2FkanVzdF93aW5kb3coV0lORE9XICp3aW4sIGludCBUb0xpbmVzLCBpbnQgVG9Db2xzLCBpbnQgc3RvbGVuIEVYVFJBX0RDTFMpCit7CisgICAgaW50IHJlc3VsdDsKKyAgICBpbnQgYm90dG9tID0gQ3VyTGluZXMgKyBTUC0+X3RvcHN0b2xlbiAtIHN0b2xlbjsKKyAgICBpbnQgbXlMaW5lcyA9IHdpbi0+X21heHkgKyAxOworICAgIGludCBteUNvbHMgPSB3aW4tPl9tYXh4ICsgMTsKKyAgICByaXBvZmZfdCAqcm9wID0gcmlwcGVkX3dpbmRvdyh3aW4pOworCisgICAgVCgoVF9DQUxMRUQoImFkanVzdF93aW5kb3coJXAsJWQsJWQpJXMgZGVwdGggJWQvJWQgY3VycmVudGx5ICVsZHglbGQgYXQgJWxkLCVsZCIpLAorICAgICAgIHdpbiwgVG9MaW5lcywgVG9Db2xzLAorICAgICAgIChyb3AgIT0gMCkgPyAiIChyaXApIiA6ICIiLAorICAgICAgIHBhcmVudF9kZXB0aCh3aW4pLAorICAgICAgIGNoaWxkX2RlcHRoKHdpbiksCisgICAgICAgKGxvbmcpIGdldG1heHkod2luKSwgKGxvbmcpIGdldG1heHgod2luKSwKKyAgICAgICAobG9uZykgZ2V0YmVneSh3aW4pICsgd2luLT5feW9mZnNldCwgKGxvbmcpIGdldGJlZ3god2luKSkpOworCisgICAgaWYgKHJvcCAhPSAwICYmIHJvcC0+bGluZSA8IDApIHsKKwkvKgorCSAqIElmIGl0IGlzIGEgcmlwcGVkLW9mZiB3aW5kb3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLCBzaW1wbHkKKwkgKiBtb3ZlIGl0IHRvIHRoZSBzYW1lIHJlbGF0aXZlIHBvc2l0aW9uLgorCSAqLworCXdpbi0+X2JlZ3kgPSBUb0xpbmVzIC0gcmlwcGVkX2JvdHRvbSh3aW4pIC0gMCAtIHdpbi0+X3lvZmZzZXQ7CisgICAgfSBlbHNlIGlmICh3aW4tPl9iZWd5ID49IGJvdHRvbSkgeworCS8qCisJICogSWYgaXQgaXMgYmVsb3cgdGhlIGJvdHRvbSBvZiB0aGUgbmV3IHNjcmVlbiwgbW92ZSB1cCBieSB0aGUgc2FtZQorCSAqIGFtb3VudCB0aGF0IHRoZSBzY3JlZW4gc2hyYW5rLgorCSAqLworCXdpbi0+X2JlZ3kgKz0gKFRvTGluZXMgLSBDdXJMaW5lcyk7CisgICAgfSBlbHNlIHsKKwlpZiAobXlMaW5lcyA9PSAoQ3VyTGluZXMgLSBzdG9sZW4pCisJICAgICYmIFRvTGluZXMgIT0gQ3VyTGluZXMpIHsKKwkgICAgbXlMaW5lcyA9IFRvTGluZXMgLSBzdG9sZW47CisJfSBlbHNlIGlmIChteUxpbmVzID09IEN1ckxpbmVzCisJCSAgICYmIFRvTGluZXMgIT0gQ3VyTGluZXMpIHsKKwkgICAgbXlMaW5lcyA9IFRvTGluZXM7CisJfQorICAgIH0KKworICAgIGlmIChteUxpbmVzID4gVG9MaW5lcykgeworCW15TGluZXMgPSBUb0xpbmVzOworICAgIH0KKworICAgIGlmIChteUNvbHMgPiBUb0NvbHMpCisJbXlDb2xzID0gVG9Db2xzOworCisgICAgaWYgKG15Q29scyA9PSBDdXJDb2xzCisJJiYgVG9Db2xzICE9IEN1ckNvbHMpCisJbXlDb2xzID0gVG9Db2xzOworCisgICAgcmVzdWx0ID0gd3Jlc2l6ZSh3aW4sIG15TGluZXMsIG15Q29scyk7CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCisvKgorICogSWYgd2UncmUgZGVjcmVhc2luZyBzaXplLCByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHdpbmRvd3MgdGhhdCBoYXZlIG5vCisgKiBjaGlsZHJlbiwgZGVjcmVhc2UgdGhvc2UgdG8gZml0LCB0aGVuIGRlY3JlYXNlIHRoZSBjb250YWluaW5nIHdpbmRvdywgZXRjLgorICovCitzdGF0aWMgaW50CitkZWNyZWFzZV9zaXplKGludCBUb0xpbmVzLCBpbnQgVG9Db2xzLCBpbnQgc3RvbGVuIEVYVFJBX0RDTFMpCit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBpbnQgZGVwdGggPSAwOworICAgIFdJTkRPV0xJU1QgKndwOworCisgICAgVCgoVF9DQUxMRUQoImRlY3JlYXNlX3NpemUoJWQsICVkKSIpLCBUb0xpbmVzLCBUb0NvbHMpKTsKKworICAgIGRvIHsKKwlmb3VuZCA9IEZBTFNFOworCVRSKFRSQUNFX1VQREFURSwgKCJkZWNyZWFzaW5nIHNpemUgb2Ygd2luZG93cyB0byAlZHglZCwgZGVwdGg9JWQiLAorCQkJICBUb0xpbmVzLCBUb0NvbHMsIGRlcHRoKSk7CisJZm9yIChlYWNoX3dpbmRvdyh3cCkpIHsKKwkgICAgV0lORE9XICp3aW4gPSAmKHdwLT53aW4pOworCisJICAgIGlmICghKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSkgeworCQlpZiAoY2hpbGRfZGVwdGgod2luKSA9PSBkZXB0aCkgeworCQkgICAgZm91bmQgPSBUUlVFOworCQkgICAgaWYgKGFkanVzdF93aW5kb3cod2luLCBUb0xpbmVzLCBUb0NvbHMsCisJCQkJICAgICAgc3RvbGVuIEVYVFJBX0FSR1MpICE9IE9LKQorCQkJcmV0dXJuQ29kZShFUlIpOworCQl9CisJICAgIH0KKwl9CisJKytkZXB0aDsKKyAgICB9IHdoaWxlIChmb3VuZCk7CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKKy8qCisgKiBJZiB3ZSdyZSBpbmNyZWFzaW5nIHNpemUsIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3Igd2luZG93cyB0aGF0IGhhdmUgbm8KKyAqIHBhcmVudCwgaW5jcmVhc2UgdGhvc2UgdG8gZml0LCB0aGVuIGluY3JlYXNlIHRoZSBjb250YWluZWQgd2luZG93LCBldGMuCisgKi8KK3N0YXRpYyBpbnQKK2luY3JlYXNlX3NpemUoaW50IFRvTGluZXMsIGludCBUb0NvbHMsIGludCBzdG9sZW4gRVhUUkFfRENMUykKK3sKKyAgICBib29sIGZvdW5kOworICAgIGludCBkZXB0aCA9IDA7CisgICAgV0lORE9XTElTVCAqd3A7CisKKyAgICBUKChUX0NBTExFRCgiaW5jcmVhc2Vfc2l6ZSglZCwgJWQpIiksIFRvTGluZXMsIFRvQ29scykpOworCisgICAgZG8geworCWZvdW5kID0gRkFMU0U7CisJVFIoVFJBQ0VfVVBEQVRFLCAoImluY3JlYXNpbmcgc2l6ZSBvZiB3aW5kb3dzIHRvICVkeCVkLCBkZXB0aD0lZCIsCisJCQkgIFRvTGluZXMsIFRvQ29scywgZGVwdGgpKTsKKwlmb3IgKGVhY2hfd2luZG93KHdwKSkgeworCSAgICBXSU5ET1cgKndpbiA9ICYod3AtPndpbik7CisKKwkgICAgaWYgKCEod2luLT5fZmxhZ3MgJiBfSVNQQUQpKSB7CisJCWlmIChwYXJlbnRfZGVwdGgod2luKSA9PSBkZXB0aCkgeworCQkgICAgZm91bmQgPSBUUlVFOworCQkgICAgaWYgKGFkanVzdF93aW5kb3cod2luLCBUb0xpbmVzLCBUb0NvbHMsCisJCQkJICAgICAgc3RvbGVuIEVYVFJBX0FSR1MpICE9IE9LKQorCQkJcmV0dXJuQ29kZShFUlIpOworCQl9CisJICAgIH0KKwl9CisJKytkZXB0aDsKKyAgICB9IHdoaWxlIChmb3VuZCk7CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWxsb2NhdGVzIE5DVVJTRVMgd2luZG93IHN0cnVjdHVyZXMsIHdpdGggbm8gc2lkZS1lZmZlY3RzCisgKiBzdWNoIGFzIHVuZ2V0Y2goKS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorcmVzaXplX3Rlcm0oaW50IFRvTGluZXMsIGludCBUb0NvbHMpCit7CisgICAgaW50IHJlc3VsdCA9IE9LIEVYVFJBX0FSR1M7CisgICAgaW50IHdhc19zdG9sZW47CisKKyAgICBUKChUX0NBTExFRCgicmVzaXplX3Rlcm0oJWQsJWQpIG9sZCglZCwlZCkiKSwKKyAgICAgICBUb0xpbmVzLCBUb0NvbHMsCisgICAgICAgc2NyZWVuX2xpbmVzLCBzY3JlZW5fY29sdW1ucykpOworCisgICAgaWYgKFNQID09IDApIHsKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfQorCisgICAgX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKyAgICB3YXNfc3RvbGVuID0gKHNjcmVlbl9saW5lcyAtIFNQLT5fbGluZXNfYXZhaWwpOworICAgIGlmIChpc190ZXJtX3Jlc2l6ZWQoVG9MaW5lcywgVG9Db2xzKSkgeworCWludCBteUxpbmVzID0gQ3VyTGluZXMgPSBzY3JlZW5fbGluZXM7CisJaW50IG15Q29scyA9IEN1ckNvbHMgPSBzY3JlZW5fY29sdW1uczsKKworI2lmZGVmIFRSQUNFCisJaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVVBEQVRFKSkgeworCSAgICBzaG93X3dpbmRvd19zaXplcygiYmVmb3JlIik7CisJICAgIF9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisJfQorI2VuZGlmCisJaWYgKFRvTGluZXMgPiBzY3JlZW5fbGluZXMpIHsKKwkgICAgaW5jcmVhc2Vfc2l6ZShteUxpbmVzID0gVG9MaW5lcywgbXlDb2xzLCB3YXNfc3RvbGVuIEVYVFJBX0FSR1MpOworCSAgICBDdXJMaW5lcyA9IG15TGluZXM7CisJICAgIEN1ckNvbHMgPSBteUNvbHM7CisJfQorCisJaWYgKFRvQ29scyA+IHNjcmVlbl9jb2x1bW5zKSB7CisJICAgIGluY3JlYXNlX3NpemUobXlMaW5lcywgbXlDb2xzID0gVG9Db2xzLCB3YXNfc3RvbGVuIEVYVFJBX0FSR1MpOworCSAgICBDdXJMaW5lcyA9IG15TGluZXM7CisJICAgIEN1ckNvbHMgPSBteUNvbHM7CisJfQorCisJaWYgKFRvTGluZXMgPCBteUxpbmVzIHx8CisJICAgIFRvQ29scyA8IG15Q29scykgeworCSAgICBkZWNyZWFzZV9zaXplKFRvTGluZXMsIFRvQ29scywgd2FzX3N0b2xlbiBFWFRSQV9BUkdTKTsKKwl9CisKKwlzY3JlZW5fbGluZXMgPSBsaW5lcyA9IFRvTGluZXM7CisJc2NyZWVuX2NvbHVtbnMgPSBjb2x1bW5zID0gVG9Db2xzOworCisJU1AtPl9saW5lc19hdmFpbCA9IGxpbmVzIC0gd2FzX3N0b2xlbjsKKworCWlmIChTUC0+b2xkaGFzaCkgeworCSAgICBGcmVlQW5kTnVsbChTUC0+b2xkaGFzaCk7CisJfQorCWlmIChTUC0+bmV3aGFzaCkgeworCSAgICBGcmVlQW5kTnVsbChTUC0+bmV3aGFzaCk7CisJfQorI2lmZGVmIFRSQUNFCisJaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVVBEQVRFKSkgeworCSAgICBTRVRfTElORVMoVG9MaW5lcyAtIHdhc19zdG9sZW4pOworCSAgICBTRVRfQ09MUyhUb0NvbHMpOworCSAgICBzaG93X3dpbmRvd19zaXplcygiYWZ0ZXIiKTsKKwkgICAgX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKwl9CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFsd2F5cyB1cGRhdGUgTElORVMsIHRvIGFsbG93IGZvciBjYWxsIGZyb20gbGliX2RvdXBkYXRlLmMgd2hpY2gKKyAgICAgKiBuZWVkcyB0byBoYXZlIHRoZSBjb3VudCBhZGp1c3RlZCBieSB0aGUgc3RvbGVuIChyaXBwZWQgb2ZmKSBsaW5lcy4KKyAgICAgKi8KKyAgICBTRVRfTElORVMoVG9MaW5lcyAtIHdhc19zdG9sZW4pOworICAgIFNFVF9DT0xTKFRvQ29scyk7CisKKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFsbG9jYXRlcyBOQ1VSU0VTIHdpbmRvdyBzdHJ1Y3R1cmVzLiAgSXQgaXMgaW52b2tlZCBpbgorICogcmVzcG9uc2UgdG8gYSBTSUdXSU5DSCBpbnRlcnJ1cHQuICBPdGhlciB1c2VyLWRlZmluZWQgd2luZG93cyBtYXkgYWxzbyBuZWVkCisgKiB0byBiZSByZWFsbG9jYXRlZC4KKyAqCisgKiBCZWNhdXNlIHRoaXMgcGVyZm9ybXMgbWVtb3J5IGFsbG9jYXRpb24sIGl0IHNob3VsZCBub3QgKGluIGdlbmVyYWwpIGJlCisgKiBpbnZva2VkIGRpcmVjdGx5IGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCityZXNpemV0ZXJtKGludCBUb0xpbmVzLCBpbnQgVG9Db2xzKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgicmVzaXpldGVybSglZCwlZCkgb2xkKCVkLCVkKSIpLAorICAgICAgIFRvTGluZXMsIFRvQ29scywKKyAgICAgICBzY3JlZW5fbGluZXMsIHNjcmVlbl9jb2x1bW5zKSk7CisKKyAgICBpZiAoU1AgIT0gMCkgeworCXJlc3VsdCA9IE9LOworCVNQLT5fc2lnX3dpbmNoID0gRkFMU0U7CisKKwlpZiAoaXNfdGVybV9yZXNpemVkKFRvTGluZXMsIFRvQ29scykpIHsKKyNpZiBVU0VfU0lHV0lOQ0gKKwkgICAgcmlwb2ZmX3QgKnJvcDsKKwkgICAgYm9vbCBzbGtfdmlzaWJsZSA9IChTUCAhPSAwCisJCQkJJiYgU1AtPl9zbGsgIT0gMAorCQkJCSYmICEoU1AtPl9zbGstPmhpZGRlbikpOworCisJICAgIGlmIChzbGtfdmlzaWJsZSkgeworCQlzbGtfY2xlYXIoKTsKKwkgICAgfQorI2VuZGlmCisJICAgIHJlc3VsdCA9IHJlc2l6ZV90ZXJtKFRvTGluZXMsIFRvQ29scyk7CisKKyNpZiBVU0VfU0lHV0lOQ0gKKwkgICAgX25jX3VuZ2V0Y2goU1AsIEtFWV9SRVNJWkUpOwkvKiBzbyBhcHBsaWNhdGlvbiBjYW4ga25vdyB0aGlzICovCisJICAgIGNsZWFyb2soY3Vyc2NyLCBUUlVFKTsJLyogc2NyZWVuIGNvbnRlbnRzIGFyZSB1bmtub3duICovCisKKwkgICAgLyogcmlwcGVkLW9mZiBsaW5lcyBhcmUgYSBzcGVjaWFsIGNhc2U6IGlmIHdlIGRpZCBub3QgbGVuZ3RoZW4KKwkgICAgICogdGhlbSwgd2UgaGF2ZW4ndCBtb3ZlZCB0aGVtIGVpdGhlci4gIHJlcGFpbnQgdGhlbSwgdG9vLgorCSAgICAgKgorCSAgICAgKiBmb3IgdGhlIHJlc3QgLSBzdGRzY3IgYW5kIG90aGVyIHdpbmRvd3MgLSB0aGUgY2xpZW50IGhhcyB0bworCSAgICAgKiBkZWNpZGUgd2hpY2ggdG8gcmVwYWludCwgc2luY2Ugd2l0aG91dCBwYW5lbHMsIG5jdXJzZXMgZG9lcworCSAgICAgKiBub3Qga25vdyB3aGljaCBhcmUgcmVhbGx5IG9uIHRvcC4KKwkgICAgICovCisJICAgIGZvciAoZWFjaF9yaXBvZmYocm9wKSkgeworCQlpZiAocm9wLT53aW4gIT0gc3Rkc2NyCisJCSAgICAmJiByb3AtPndpbiAhPSAwCisJCSAgICAmJiByb3AtPmxpbmUgPCAwKSB7CisKKwkJICAgIGlmIChyb3AtPmhvb2sgIT0gX25jX3Nsa19pbml0aWFsaXplKSB7CisJCQl0b3VjaHdpbihyb3AtPndpbik7CisJCQl3bm91dHJlZnJlc2gocm9wLT53aW4pOworCQkgICAgfQorCQl9CisJICAgIH0KKworCSAgICAvKiBzb2Z0LWtleXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB3ZSBfa25vd18gaG93IHRvIHJlcGFpbnQgdGhlbSAqLworCSAgICBpZiAoc2xrX3Zpc2libGUpIHsKKwkJc2xrX3Jlc3RvcmUoKTsKKwkJc2xrX3RvdWNoKCk7CisKKwkJc2xrX3JlZnJlc2goKTsKKwkgICAgfQorI2VuZGlmCisJfQorICAgIH0KKworICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9zYWZlX3NwcmludGYuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9zYWZlX3NwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmM1ZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL3NhZmVfc3ByaW50Zi5jCkBAIC0wLDAgKzEsMjY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogc2FmZV9zcHJpbnRmLmMsdiAxLjIwIDIwMDcvMDQvMjEgMjI6Mjg6MDYgdG9tIEV4cCAkIikKKworI2lmIFVTRV9TQUZFX1NQUklOVEYKKwordHlwZWRlZiBlbnVtIHsKKyAgICBGbGFncywgV2lkdGgsIFByZWMsIFR5cGUsIEZvcm1hdAorfSBQUklOVEY7CisKKyNkZWZpbmUgVkFfSU5UR1IodHlwZSkgaXZhbCA9IHZhX2FyZyhhcCwgdHlwZSkKKyNkZWZpbmUgVkFfRkxPQVQodHlwZSkgZnZhbCA9IHZhX2FyZyhhcCwgdHlwZSkKKyNkZWZpbmUgVkFfUE9JTlQodHlwZSkgcHZhbCA9ICh2b2lkICopdmFfYXJnKGFwLCB0eXBlKQorCisvKgorICogU2NhbiBhIHZhcmlhYmxlLWFyZ3VtZW50IGxpc3QgZm9yIHByaW50ZiB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgorICogY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGVtaXR0ZWQuCisgKi8KK3N0YXRpYyBpbnQKK19uY19wcmludGZfbGVuZ3RoKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gQlVGU0laOworICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICBjaGFyICpmb3JtYXQ7CisgICAgaW50IGxlbiA9IDA7CisgICAgc2l6ZV90IGZtdF9sZW47CisgICAgY2hhciBmbXRfYXJnW0JVRlNJWl07CisKKyAgICBpZiAoZm10ID09IDAgfHwgKmZtdCA9PSAnXDAnKQorCXJldHVybiAwOworICAgIGZtdF9sZW4gPSBzdHJsZW4oZm10KSArIDE7CisgICAgaWYgKChmb3JtYXQgPSB0eXBlTWFsbG9jKGNoYXIsIGZtdF9sZW4pKSA9PSAwKQorCSAgcmV0dXJuIC0xOworICAgIGlmICgoYnVmZmVyID0gdHlwZU1hbGxvYyhjaGFyLCBsZW5ndGgpKSA9PSAwKSB7CisJZnJlZShmb3JtYXQpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICB3aGlsZSAoKmZtdCAhPSAnXDAnKSB7CisJaWYgKCpmbXQgPT0gJyUnKSB7CisJICAgIHN0YXRpYyBjaGFyIGR1bW15W10gPSAiIjsKKwkgICAgUFJJTlRGIHN0YXRlID0gRmxhZ3M7CisJICAgIGNoYXIgKnB2YWwgPSBkdW1teTsJLyogYXZvaWQgY29uc3QtY2FzdCAqLworCSAgICBkb3VibGUgZnZhbCA9IDAuMDsKKwkgICAgaW50IGRvbmUgPSBGQUxTRTsKKwkgICAgaW50IGl2YWwgPSAwOworCSAgICBpbnQgcHJlYyA9IC0xOworCSAgICBpbnQgdHlwZSA9IDA7CisJICAgIGludCB1c2VkID0gMDsKKwkgICAgaW50IHdpZHRoID0gLTE7CisJICAgIHNpemVfdCBmID0gMDsKKworCSAgICBmb3JtYXRbZisrXSA9ICpmbXQ7CisJICAgIHdoaWxlICgqKytmbXQgIT0gJ1wwJyAmJiBsZW4gPj0gMCAmJiAhZG9uZSkgeworCQlmb3JtYXRbZisrXSA9ICpmbXQ7CisKKwkJaWYgKGlzZGlnaXQoVUNoYXIoKmZtdCkpKSB7CisJCSAgICBpbnQgbnVtID0gKmZtdCAtICcwJzsKKwkJICAgIGlmIChzdGF0ZSA9PSBGbGFncyAmJiBudW0gIT0gMCkKKwkJCXN0YXRlID0gV2lkdGg7CisJCSAgICBpZiAoc3RhdGUgPT0gV2lkdGgpIHsKKwkJCWlmICh3aWR0aCA8IDApCisJCQkgICAgd2lkdGggPSAwOworCQkJd2lkdGggPSAod2lkdGggKiAxMCkgKyBudW07CisJCSAgICB9IGVsc2UgaWYgKHN0YXRlID09IFByZWMpIHsKKwkJCWlmIChwcmVjIDwgMCkKKwkJCSAgICBwcmVjID0gMDsKKwkJCXByZWMgPSAocHJlYyAqIDEwKSArIG51bTsKKwkJICAgIH0KKwkJfSBlbHNlIGlmICgqZm10ID09ICcqJykgeworCQkgICAgVkFfSU5UR1IoaW50KTsKKwkJICAgIGlmIChzdGF0ZSA9PSBGbGFncykKKwkJCXN0YXRlID0gV2lkdGg7CisJCSAgICBpZiAoc3RhdGUgPT0gV2lkdGgpIHsKKwkJCXdpZHRoID0gaXZhbDsKKwkJICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gUHJlYykgeworCQkJcHJlYyA9IGl2YWw7CisJCSAgICB9CisJCSAgICBzcHJpbnRmKGZtdF9hcmcsICIlZCIsIGl2YWwpOworCQkgICAgZm10X2xlbiArPSBzdHJsZW4oZm10X2FyZyk7CisJCSAgICBpZiAoKGZvcm1hdCA9IHJlYWxsb2MoZm9ybWF0LCBmbXRfbGVuKSkgPT0gMCkgeworCQkJcmV0dXJuIC0xOworCQkgICAgfQorCQkgICAgc3RyY3B5KCZmb3JtYXRbLS1mXSwgZm10X2FyZyk7CisJCSAgICBmID0gc3RybGVuKGZvcm1hdCk7CisJCX0gZWxzZSBpZiAoaXNhbHBoYShVQ2hhcigqZm10KSkpIHsKKwkJICAgIGRvbmUgPSBUUlVFOworCQkgICAgc3dpdGNoICgqZm10KSB7CisJCSAgICBjYXNlICdaJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ2gnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnbCc6CS8qIEZBTExUSFJVICovCisJCQlkb25lID0gRkFMU0U7CisJCQl0eXBlID0gKmZtdDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnaSc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdkJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ3UnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAneCc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdYJzoJLyogRkFMTFRIUlUgKi8KKwkJCWlmICh0eXBlID09ICdsJykKKwkJCSAgICBWQV9JTlRHUihsb25nKTsKKwkJCWVsc2UgaWYgKHR5cGUgPT0gJ1onKQorCQkJICAgIFZBX0lOVEdSKHNpemVfdCk7CisJCQllbHNlCisJCQkgICAgVkFfSU5UR1IoaW50KTsKKwkJCXVzZWQgPSAnaSc7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ2YnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnZSc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdFJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ2cnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnRyc6CS8qIEZBTExUSFJVICovCisJCQlWQV9GTE9BVChkb3VibGUpOworCQkJdXNlZCA9ICdmJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnYyc6CisJCQlWQV9JTlRHUihpbnQpOworCQkJdXNlZCA9ICdpJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAncyc6CisJCQlWQV9QT0lOVChjaGFyICopOworCQkJaWYgKHByZWMgPCAwKQorCQkJICAgIHByZWMgPSBzdHJsZW4ocHZhbCk7CisJCQlpZiAocHJlYyA+IChpbnQpIGxlbmd0aCkgeworCQkJICAgIGxlbmd0aCA9IGxlbmd0aCArIHByZWM7CisJCQkgICAgYnVmZmVyID0gdHlwZVJlYWxsb2MoY2hhciwgbGVuZ3RoLCBidWZmZXIpOworCQkJICAgIGlmIChidWZmZXIgPT0gMCkgeworCQkJCWZyZWUoZm9ybWF0KTsKKwkJCQlyZXR1cm4gLTE7CisJCQkgICAgfQorCQkJfQorCQkJdXNlZCA9ICdwJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAncCc6CisJCQlWQV9QT0lOVCh2b2lkICopOworCQkJdXNlZCA9ICdwJzsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnbic6CisJCQlWQV9QT0lOVChpbnQgKik7CisJCQl1c2VkID0gMDsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJCWJyZWFrOworCQkgICAgfQorCQl9IGVsc2UgaWYgKCpmbXQgPT0gJy4nKSB7CisJCSAgICBzdGF0ZSA9IFByZWM7CisJCX0gZWxzZSBpZiAoKmZtdCA9PSAnJScpIHsKKwkJICAgIGRvbmUgPSBUUlVFOworCQkgICAgdXNlZCA9ICdwJzsKKwkJfQorCSAgICB9CisJICAgIGZvcm1hdFtmXSA9ICdcMCc7CisJICAgIHN3aXRjaCAodXNlZCkgeworCSAgICBjYXNlICdpJzoKKwkJc3ByaW50ZihidWZmZXIsIGZvcm1hdCwgaXZhbCk7CisJCWJyZWFrOworCSAgICBjYXNlICdmJzoKKwkJc3ByaW50ZihidWZmZXIsIGZvcm1hdCwgZnZhbCk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlzcHJpbnRmKGJ1ZmZlciwgZm9ybWF0LCBwdmFsKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgbGVuICs9IChpbnQpIHN0cmxlbihidWZmZXIpOworCX0gZWxzZSB7CisJICAgIGZtdCsrOworCSAgICBsZW4rKzsKKwl9CisgICAgfQorCisgICAgZnJlZShidWZmZXIpOworICAgIGZyZWUoZm9ybWF0KTsKKyAgICByZXR1cm4gbGVuOworfQorI2VuZGlmCisKKyNkZWZpbmUgbXlfYnVmZmVyIF9uY19nbG9iYWxzLnNhZmVwcmludF9idWYKKyNkZWZpbmUgbXlfbGVuZ3RoIF9uY19nbG9iYWxzLnNhZmVwcmludF91c2VkCisKKy8qCisgKiBXcmFwcGVyIGZvciB2c3ByaW50ZiB0aGF0IGFsbG9jYXRlcyBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdC4KKyAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX3ByaW50Zl9zdHJpbmcoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoZm10ICE9IDApIHsKKyNpZiBVU0VfU0FGRV9TUFJJTlRGCisJaW50IGxlbiA9IF9uY19wcmludGZfbGVuZ3RoKGZtdCwgYXApOworCisJaWYgKChpbnQpIG15X2xlbmd0aCA8IGxlbiArIDEpIHsKKwkgICAgbXlfbGVuZ3RoID0gMiAqIChsZW4gKyAxKTsKKwkgICAgbXlfYnVmZmVyID0gdHlwZVJlYWxsb2MoY2hhciwgbXlfbGVuZ3RoLCBteV9idWZmZXIpOworCX0KKwlpZiAobXlfYnVmZmVyICE9IDApIHsKKwkgICAgKm15X2J1ZmZlciA9ICdcMCc7CisJICAgIGlmIChsZW4gPj0gMCkgeworCQl2c3ByaW50ZihteV9idWZmZXIsIGZtdCwgYXApOworCSAgICB9CisJICAgIHJlc3VsdCA9IG15X2J1ZmZlcjsKKwl9CisjZWxzZQorI2RlZmluZSBNeUNvbHMgX25jX2dsb2JhbHMuc2FmZXByaW50X2NvbHMKKyNkZWZpbmUgTXlSb3dzIF9uY19nbG9iYWxzLnNhZmVwcmludF9yb3dzCisKKwlpZiAoc2NyZWVuX2xpbmVzID4gTXlSb3dzIHx8IHNjcmVlbl9jb2x1bW5zID4gTXlDb2xzKSB7CisJICAgIGlmIChzY3JlZW5fbGluZXMgPiBNeVJvd3MpCisJCU15Um93cyA9IHNjcmVlbl9saW5lczsKKwkgICAgaWYgKHNjcmVlbl9jb2x1bW5zID4gTXlDb2xzKQorCQlNeUNvbHMgPSBzY3JlZW5fY29sdW1uczsKKwkgICAgbXlfbGVuZ3RoID0gKE15Um93cyAqIChNeUNvbHMgKyAxKSkgKyAxOworCSAgICBteV9idWZmZXIgPSB0eXBlUmVhbGxvYyhjaGFyLCBteV9sZW5ndGgsIG15X2J1ZmZlcik7CisJfQorCisJaWYgKG15X2J1ZmZlciAhPSAwKSB7CisjIGlmIEhBVkVfVlNOUFJJTlRGCisJICAgIHZzbnByaW50ZihteV9idWZmZXIsIG15X2xlbmd0aCwgZm10LCBhcCk7CS8qIEdOVSBleHRlbnNpb24gKi8KKyMgZWxzZQorCSAgICB2c3ByaW50ZihteV9idWZmZXIsIGZtdCwgYXApOwkvKiBBTlNJICovCisjIGVuZGlmCisJICAgIHJlc3VsdCA9IG15X2J1ZmZlcjsKKwl9CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKG15X2J1ZmZlciAhPSAwKSB7CS8qIHNlZSBfbmNfZnJlZWFsbCgpICovCisJZnJlZShteV9idWZmZXIpOworCW15X2J1ZmZlciA9IDA7CisJbXlfbGVuZ3RoID0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9zaWdhY3Rpb24uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS9zaWdhY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjQ0MmUwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL3NpZ2FjdGlvbi5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LTIwMDMgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmaWxlIHByb3ZpZGVzIHNpZ2FjdGlvbigpIGVtdWxhdGlvbiB1c2luZyBzaWd2ZWMoKSAqLworLyogVXNlIG9ubHkgaWYgdGhpcyBpcyBub24gUE9TSVggc3lzdGVtICovCisKK01PRFVMRV9JRCgiJElkOiBzaWdhY3Rpb24uYyx2IDEuMTQgMjAwMy8xMi8wNyAwMTowNjo1MiB0b20gRXhwICQiKQorCitzdGF0aWMgaW50CitfbmNfc2lnYWN0aW9uKGludCBzaWcsIHNpZ2FjdGlvbl90ICogc2lnYWN0LCBzaWdhY3Rpb25fdCAqIG9zaWdhY3QpCit7CisgICAgcmV0dXJuIHNpZ3ZlYyhzaWcsIHNpZ2FjdCwgb3NpZ2FjdCk7Cit9CisKK3N0YXRpYyBpbnQKK19uY19zaWdlbXB0eXNldChzaWdzZXRfdCAqIG1hc2spCit7CisgICAgKm1hc2sgPSAwOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfbmNfc2lncHJvY21hc2soaW50IG1vZGUsIHNpZ3NldF90ICogbWFzaywgc2lnc2V0X3QgKiBvbWFzaykKK3sKKyAgICBzaWdzZXRfdCBjdXJyZW50ID0gc2lnc2V0bWFzaygwKTsKKworICAgIGlmIChvbWFzaykKKwkqb21hc2sgPSBjdXJyZW50OworCisgICAgaWYgKG1vZGUgPT0gU0lHX0JMT0NLKQorCWN1cnJlbnQgfD0gKm1hc2s7CisgICAgZWxzZSBpZiAobW9kZSA9PSBTSUdfVU5CTE9DSykKKwljdXJyZW50ICY9IH4qbWFzazsKKyAgICBlbHNlIGlmIChtb2RlID09IFNJR19TRVRNQVNLKQorCWN1cnJlbnQgPSAqbWFzazsKKworICAgIHNpZ3NldG1hc2soY3VycmVudCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19uY19zaWdhZGRzZXQoc2lnc2V0X3QgKiBtYXNrLCBpbnQgc2lnKQoreworICAgICptYXNrIHw9IHNpZ21hc2soc2lnKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogbm90IHVzZWQgaW4gbGliX3RzdHAuYyAqLworI2lmIDAKK3N0YXRpYyBpbnQKK19uY19zaWdzdXNwZW5kKHNpZ3NldF90ICogbWFzaykKK3sKKyAgICByZXR1cm4gc2lncGF1c2UoKm1hc2spOworfQorCitzdGF0aWMgaW50CitfbmNfc2lnZGVsc2V0KHNpZ3NldF90ICogbWFzaywgaW50IHNpZykKK3sKKyAgICAqbWFzayAmPSB+c2lnbWFzayhzaWcpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfbmNfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKiBtYXNrLCBpbnQgc2lnKQoreworICAgIHJldHVybiAoKm1hc2sgJiBzaWdtYXNrKHNpZykpICE9IDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS90cmllcy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL3RyaWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNjNjNwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS90cmllcy5jCkBAIC0wLDAgKzEsMTQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5NyAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJdHJpZXMuYworKioKKyoqCUZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIHRyZWUgb2YgcGFydGlhbC1jb21wbGV0aW9ucyBmb3Iga2V5Y29kZXMuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiB0cmllcy5jLHYgMS4yNyAyMDA4LzA4LzE2IDE5OjIyOjU1IHRvbSBFeHAgJCIpCisKKy8qCisgKiBFeHBhbmQgYSBrZXljb2RlIGludG8gdGhlIHN0cmluZyB0aGF0IGl0IGNvcnJlc3BvbmRzIHRvLCByZXR1cm5pbmcgbnVsbCBpZgorICogbm8gbWF0Y2ggd2FzIGZvdW5kLCBvdGhlcndpc2UgYWxsb2NhdGluZyBhIHN0cmluZyBvZiB0aGUgcmVzdWx0LgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfZXhwYW5kX3RyeShUUklFUyAqIHRyZWUsIHVuc2lnbmVkIGNvZGUsIGludCAqY291bnQsIHNpemVfdCBsZW4pCit7CisgICAgVFJJRVMgKnB0ciA9IHRyZWU7CisgICAgY2hhciAqcmVzdWx0ID0gMDsKKworICAgIGlmIChjb2RlICE9IDApIHsKKwl3aGlsZSAocHRyICE9IDApIHsKKwkgICAgaWYgKChyZXN1bHQgPSBfbmNfZXhwYW5kX3RyeShwdHItPmNoaWxkLCBjb2RlLCBjb3VudCwgbGVuICsgMSkpCisJCSE9IDApIHsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHB0ci0+dmFsdWUgPT0gY29kZSkgeworCQkqY291bnQgLT0gMTsKKwkJaWYgKCpjb3VudCA9PSAtMSkgeworCQkgICAgcmVzdWx0ID0gdHlwZUNhbGxvYyhjaGFyLCBsZW4gKyAyKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgcHRyID0gcHRyLT5zaWJsaW5nOworCX0KKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAwKSB7CisJaWYgKHB0ciAhPSAwICYmIChyZXN1bHRbbGVuXSA9IChjaGFyKSBwdHItPmNoKSA9PSAwKQorCSAgICAqKCh1bnNpZ25lZCBjaGFyICopIChyZXN1bHQgKyBsZW4pKSA9IDEyODsKKyNpZmRlZiBUUkFDRQorCWlmIChsZW4gPT0gMCAmJiBVU0VfVFJBQ0VGKFRSQUNFX01BWElNVU0pKSB7CisJICAgIF90cmFjZWYoImV4cGFuZF9rZXkgJXMgJXMiLCBfbmNfdHJhY2VjaGFyKFNQLCBjb2RlKSwgX25jX3Zpc2J1ZihyZXN1bHQpKTsKKwkgICAgX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJlbW92ZSBhIGNvZGUgZnJvbSB0aGUgc3BlY2lmaWVkIHRyZWUsIGZyZWVpbmcgdGhlIHVudXNlZCBub2Rlcy4gIFJldHVybnMKKyAqIHRydWUgaWYgdGhlIGNvZGUgd2FzIGZvdW5kL3JlbW92ZWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZW1vdmVfa2V5KFRSSUVTICoqIHRyZWUsIHVuc2lnbmVkIGNvZGUpCit7CisgICAgVCgoVF9DQUxMRUQoIl9uY19yZW1vdmVfa2V5KCVwLCVkKSIpLCB0cmVlLCBjb2RlKSk7CisKKyAgICBpZiAoY29kZSA9PSAwKQorCXJldHVybkNvZGUoRkFMU0UpOworCisgICAgd2hpbGUgKCp0cmVlICE9IDApIHsKKwlpZiAoX25jX3JlbW92ZV9rZXkoJigqdHJlZSktPmNoaWxkLCBjb2RlKSkgeworCSAgICByZXR1cm5Db2RlKFRSVUUpOworCX0KKwlpZiAoKCp0cmVlKS0+dmFsdWUgPT0gY29kZSkgeworCSAgICBpZiAoKCp0cmVlKS0+Y2hpbGQpIHsKKwkJLyogZG9uJ3QgY3V0IHRoZSB3aG9sZSBzdWItdHJlZSAqLworCQkoKnRyZWUpLT52YWx1ZSA9IDA7CisJICAgIH0gZWxzZSB7CisJCVRSSUVTICp0b19mcmVlID0gKnRyZWU7CisJCSp0cmVlID0gKCp0cmVlKS0+c2libGluZzsKKwkJZnJlZSh0b19mcmVlKTsKKwkgICAgfQorCSAgICByZXR1cm5Db2RlKFRSVUUpOworCX0KKwl0cmVlID0gJigqdHJlZSktPnNpYmxpbmc7CisgICAgfQorICAgIHJldHVybkNvZGUoRkFMU0UpOworfQorCisvKgorICogUmVtb3ZlIGEgc3RyaW5nIGZyb20gdGhlIHNwZWNpZmllZCB0cmVlLCBmcmVlaW5nIHRoZSB1bnVzZWQgbm9kZXMuICBSZXR1cm5zCisgKiB0cnVlIGlmIHRoZSBzdHJpbmcgd2FzIGZvdW5kL3JlbW92ZWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZW1vdmVfc3RyaW5nKFRSSUVTICoqIHRyZWUsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICBUKChUX0NBTExFRCgiX25jX3JlbW92ZV9zdHJpbmcoJXAsJXMpIiksIHRyZWUsIF9uY192aXNidWYoc3RyaW5nKSkpOworCisgICAgaWYgKHN0cmluZyA9PSAwIHx8ICpzdHJpbmcgPT0gMCkKKwlyZXR1cm5Db2RlKEZBTFNFKTsKKworICAgIHdoaWxlICgqdHJlZSAhPSAwKSB7CisJaWYgKFVDaGFyKCgqdHJlZSktPmNoKSA9PSBVQ2hhcigqc3RyaW5nKSkgeworCSAgICBpZiAoc3RyaW5nWzFdICE9IDApCisJCXJldHVybkNvZGUoX25jX3JlbW92ZV9zdHJpbmcoJigqdHJlZSktPmNoaWxkLCBzdHJpbmcgKyAxKSk7CisJICAgIGlmICgoKnRyZWUpLT5jaGlsZCA9PSAwKSB7CisJCVRSSUVTICp0b19mcmVlID0gKnRyZWU7CisJCSp0cmVlID0gKCp0cmVlKS0+c2libGluZzsKKwkJZnJlZSh0b19mcmVlKTsKKwkJcmV0dXJuQ29kZShUUlVFKTsKKwkgICAgfSBlbHNlIHsKKwkJcmV0dXJuQ29kZShGQUxTRSk7CisJICAgIH0KKwl9CisJdHJlZSA9ICYoKnRyZWUpLT5zaWJsaW5nOworICAgIH0KKyAgICByZXR1cm5Db2RlKEZBTFNFKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS91c2Vfd2luZG93LmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvdXNlX3dpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDA4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvdXNlX3dpbmRvdy5jCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMjAwNyAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogdXNlX3dpbmRvdy5jLHYgMS44IDIwMDgvMDYvMDcgMTQ6MTM6NDYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQordXNlX3dpbmRvdyhXSU5ET1cgKndpbiwgTkNVUlNFU19XSU5ET1dfQ0IgZnVuYywgdm9pZCAqZGF0YSkKK3sKKyAgICBpbnQgY29kZSA9IE9LOworCisgICAgVCgoVF9DQUxMRUQoInVzZV93aW5kb3coJXAsJXAsJXApIiksIHdpbiwgZnVuYywgZGF0YSkpOworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIGNvZGUgPSBmdW5jKHdpbiwgZGF0YSk7CisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIHJldHVybkNvZGUoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvdmVyc2lvbi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjgzOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9iYXNlL3ZlcnNpb24uYwpAQCAtMCwwICsxLDQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OSAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHZlcnNpb24uYyx2IDEuNiAyMDA1LzAxLzAyIDAxOjIzOjU0IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK2N1cnNlc192ZXJzaW9uKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoImN1cnNlc192ZXJzaW9uKCkiKSkpOworICAgIHJldHVybkNQdHIoIm5jdXJzZXMgIiBOQ1VSU0VTX1ZFUlNJT05fU1RSSU5HKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS92c3NjYW5mLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvdnNzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjUzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2UvdnNzY2FuZi5jCkBAIC0wLDAgKzEsMzU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFN0YXRlLW1hY2hpbmUgZmFsbGJhY2sgd3JpdHRlbiBieSBUaG9tYXMgRS4gRGlja2V5IDIwMDIgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQgdG8gc3VwcG9ydCB2d3NjYW53CisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpZiAhSEFWRV9WU1NDQU5GCisKK01PRFVMRV9JRCgiJElkOiB2c3NjYW5mLmMsdiAxLjE4IDIwMDQvMDQvMDMgMjA6Mjc6MDIgdG9tIEV4cCAkIikKKworI2lmICEoSEFWRV9WRlNDQU5GIHx8IEhBVkVfX0RPU0NBTikKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNkZWZpbmUgTF9TUVVBUkUgJ1snCisjZGVmaW5lIFJfU1FVQVJFICddJworCit0eXBlZGVmIGVudW0geworICAgIGNVbmtub3duCisgICAgLGNFcnJvcgkJCS8qIGFueXRoaW5nIHRoYXQgaXNuJ3QgQU5TSSAqLworICAgICxjQXNzaWduZWQKKyAgICAsY0NoYXIKKyAgICAsY0ludAorICAgICxjRmxvYXQKKyAgICAsY0RvdWJsZQorICAgICxjUG9pbnRlcgorICAgICxjTG9uZworICAgICxjU2hvcnQKKyAgICAsY1JhbmdlCisgICAgLGNTdHJpbmcKK30gQ2h1bmtUeXBlOworCit0eXBlZGVmIGVudW0geworICAgIG9Vbmtub3duCisgICAgLG9TaG9ydAorICAgICxvTG9uZworfSBPdGhlclR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgICAgc1Vua25vd24KKyAgICAsc1BlcmNlbnQJCQkvKiBsYXN0IHdhcyAnJScgYmVnaW5uaW5nIGEgZm9ybWF0ICovCisgICAgLHNOb3JtYWwJCQkvKiAuLi5zb21ld2hlcmUgaW4gdGhlIG1pZGRsZSAqLworICAgICxzTGVmdAkJCS8qIGxhc3Qgd2FzIGxlZnQgc3F1YXJlIGJyYWNrZXQgYmVnaW5uaW5nIGEgcmFuZ2UgKi8KKyAgICAsc1JhbmdlCQkJLyogLi4uc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgKi8KKyAgICAsc0ZpbmFsCQkJLyogbGFzdCBmaW5pc2hlZCBhIGZvcm1hdCAqLworfSBTY2FuU3RhdGU7CisKK3N0YXRpYyBDaHVua1R5cGUKK2ZpbmFsX2NoKGludCBjaCwgT3RoZXJUeXBlIG90aGVyKQoreworICAgIENodW5rVHlwZSByZXN1bHQgPSBjVW5rbm93bjsKKworICAgIHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlICdjJzoKKwlpZiAob3RoZXIgPT0gb1Vua25vd24pCisJICAgIHJlc3VsdCA9IGNDaGFyOworCWVsc2UKKwkgICAgcmVzdWx0ID0gY0Vycm9yOworCWJyZWFrOworICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ2knOgorICAgIGNhc2UgJ1gnOgorICAgIGNhc2UgJ3gnOgorCXN3aXRjaCAob3RoZXIpIHsKKwljYXNlIG9Vbmtub3duOgorCSAgICByZXN1bHQgPSBjSW50OworCSAgICBicmVhazsKKwljYXNlIG9TaG9ydDoKKwkgICAgcmVzdWx0ID0gY1Nob3J0OworCSAgICBicmVhazsKKwljYXNlIG9Mb25nOgorCSAgICByZXN1bHQgPSBjTG9uZzsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOworICAgIGNhc2UgJ0UnOgorICAgIGNhc2UgJ2UnOgorICAgIGNhc2UgJ2YnOgorICAgIGNhc2UgJ2cnOgorCXN3aXRjaCAob3RoZXIpIHsKKwljYXNlIG9Vbmtub3duOgorCSAgICByZXN1bHQgPSBjRmxvYXQ7CisJICAgIGJyZWFrOworCWNhc2Ugb1Nob3J0OgorCSAgICByZXN1bHQgPSBjRXJyb3I7CisJICAgIGJyZWFrOworCWNhc2Ugb0xvbmc6CisJICAgIHJlc3VsdCA9IGNEb3VibGU7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKKyAgICBjYXNlICduJzoKKwlpZiAob3RoZXIgPT0gb1Vua25vd24pCisJICAgIHJlc3VsdCA9IGNBc3NpZ25lZDsKKwllbHNlCisJICAgIHJlc3VsdCA9IGNFcnJvcjsKKwlicmVhazsKKyAgICBjYXNlICdwJzoKKwlpZiAob3RoZXIgPT0gb1Vua25vd24pCisJICAgIHJlc3VsdCA9IGNQb2ludGVyOworCWVsc2UKKwkgICAgcmVzdWx0ID0gY0Vycm9yOworCWJyZWFrOworICAgIGNhc2UgJ3MnOgorCWlmIChvdGhlciA9PSBvVW5rbm93bikKKwkgICAgcmVzdWx0ID0gY1N0cmluZzsKKwllbHNlCisJICAgIHJlc3VsdCA9IGNFcnJvcjsKKwlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE90aGVyVHlwZQorb3RoZXJfY2goaW50IGNoKQoreworICAgIE90aGVyVHlwZSByZXN1bHQgPSBvVW5rbm93bjsKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAnaCc6CisJcmVzdWx0ID0gb1Nob3J0OworCWJyZWFrOworICAgIGNhc2UgJ2wnOgorCXJlc3VsdCA9IG9Mb25nOworCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy8qVkFSQVJHUzIqLworTkNVUlNFU19FWFBPUlQoaW50KQordnNzY2FuZihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkKK3sKKyNpZiBIQVZFX1ZGU0NBTkYgfHwgSEFWRV9fRE9TQ0FOCisgICAgLyoKKyAgICAgKiBUaGlzIGNvZGUgc2hvdWxkIHdvcmsgb24gYW55dGhpbmcgZGVzY2VuZGVkIGZyb20gQVQmVCBTVnIxLgorICAgICAqLworICAgIEZJTEUgc3RyYnVmOworCisgICAgc3RyYnVmLl9mbGFnID0gX0lPUkVBRDsKKyAgICBzdHJidWYuX3B0ciA9IHN0cmJ1Zi5fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKyAgICBzdHJidWYuX2NudCA9IHN0cmxlbihzdHIpOworICAgIHN0cmJ1Zi5fZmlsZSA9IF9ORklMRTsKKworI2lmIEhBVkVfVkZTQ0FORgorICAgIHJldHVybiAodmZzY2FuZigmc3RyYnVmLCBmb3JtYXQsIGFwKSk7CisjZWxzZQorICAgIHJldHVybiAoX2Rvc2Nhbigmc3RyYnVmLCBmb3JtYXQsIGFwKSk7CisjZW5kaWYKKyNlbHNlCisgICAgc3RhdGljIGludCBjYW5fY29udmVydCA9IC0xOworCisgICAgaW50IGFzc2lnbmVkID0gMDsKKyAgICBpbnQgY29uc3VtZWQgPSAwOworCisgICAgVCgoVF9DQUxMRUQoInZzc2NhbmYoJXMsJXMsLi4uKSIpLAorICAgICAgIF9uY192aXNidWYyKDEsIHN0ciksCisgICAgICAgX25jX3Zpc2J1ZjIoMiwgZm9ybWF0KSkpOworCisgICAgLyoKKyAgICAgKiBUaGlzIHJlbGllcyBvbiBoYXZpbmcgYSB3b3JraW5nICIlbiIgZm9ybWF0IGNvbnZlcnNpb24uICBDaGVjayBpZiBpdAorICAgICAqIHdvcmtzLiAgT25seSB2ZXJ5IG9sZCBDIGxpYnJhcmllcyBkbyBub3Qgc3VwcG9ydCBpdC4KKyAgICAgKgorICAgICAqIEZJWE1FOiBtb3ZlIHRoaXMgY2hlY2sgaW50byB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgICAgKi8KKyAgICBpZiAoY2FuX2NvbnZlcnQgPCAwKSB7CisJaW50IGNoZWNrMTsKKwlpbnQgY2hlY2syOworCWlmIChzc2NhbmYoIjEyMyIsICIlZCVuIiwgJmNoZWNrMSwgJmNoZWNrMikgPiAwCisJICAgICYmIGNoZWNrMSA9PSAxMjMKKwkgICAgJiYgY2hlY2syID09IDMpIHsKKwkgICAgY2FuX2NvbnZlcnQgPSAxOworCX0gZWxzZSB7CisJICAgIGNhbl9jb252ZXJ0ID0gMDsKKwl9CisgICAgfQorCisgICAgaWYgKGNhbl9jb252ZXJ0KSB7CisJc2l6ZV90IGxlbl9mbXQgPSBzdHJsZW4oZm9ybWF0KSArIDMyOworCWNoYXIgKm15X2ZtdCA9IG1hbGxvYyhsZW5fZm10KTsKKwlDaHVua1R5cGUgY2h1bmssIGN0ZXN0OworCU90aGVyVHlwZSBvdGhlciwgb3Rlc3Q7CisJU2NhblN0YXRlIHN0YXRlOworCXVuc2lnbmVkIG47CisJaW50IGVhdGVuOworCXZvaWQgKnBvaW50ZXI7CisKKwlpZiAobXlfZm10ICE9IDApIHsKKwkgICAgLyoKKwkgICAgICogU3BsaXQgdGhlIG9yaWdpbmFsIGZvcm1hdCBpbnRvIGNodW5rcywgYWRkaW5nIGEgIiVuIiB0byB0aGUgZW5kCisJICAgICAqIG9mIGVhY2ggKGV4Y2VwdCBvZiBjb3Vyc2UgaWYgaXQgdXNlZCAlbiksIGFuZCB1c2UgdGhhdAorCSAgICAgKiBpbmZvcm1hdGlvbiB0byBkZWNpZGUgd2hlcmUgdG8gc3RhcnQgc2Nhbm5pbmcgdGhlIG5leHQgY2h1bmsuCisJICAgICAqCisJICAgICAqIEZJWE1FOiAgZG9lcyAlbiBjb3VudCBieXRlcyBvciBjaGFyYWN0ZXJzPyAgSWYgdGhlIGxhdHRlciwgdGhpcworCSAgICAgKiB3aWxsIHJlcXVpcmUgZnVydGhlciB3b3JrIGZvciBtdWx0aWJ5dGUgc3RyaW5ncy4KKwkgICAgICovCisJICAgIHdoaWxlICgqZm9ybWF0ICE9ICdcMCcpIHsKKwkJLyogZmluZCBhIGNodW5rICovCisJCXN0YXRlID0gc1Vua25vd247CisJCWNodW5rID0gY1Vua25vd247CisJCW90aGVyID0gb1Vua25vd247CisJCXBvaW50ZXIgPSAwOworCQlmb3IgKG4gPSAwOyBmb3JtYXRbbl0gIT0gMCAmJiBzdGF0ZSAhPSBzRmluYWw7ICsrbikgeworCQkgICAgbXlfZm10W25dID0gZm9ybWF0W25dOworCQkgICAgc3dpdGNoIChzdGF0ZSkgeworCQkgICAgY2FzZSBzVW5rbm93bjoKKwkJCWlmIChmb3JtYXRbbl0gPT0gJyUnKQorCQkJICAgIHN0YXRlID0gc1BlcmNlbnQ7CisJCQlicmVhazsKKwkJICAgIGNhc2Ugc1BlcmNlbnQ6CisJCQlpZiAoZm9ybWF0W25dID09ICclJykgeworCQkJICAgIHN0YXRlID0gc1Vua25vd247CisJCQl9IGVsc2UgaWYgKGZvcm1hdFtuXSA9PSBMX1NRVUFSRSkgeworCQkJICAgIHN0YXRlID0gc0xlZnQ7CisJCQl9IGVsc2UgeworCQkJICAgIHN0YXRlID0gc05vcm1hbDsKKwkJCSAgICAtLW47CisJCQl9CisJCQlicmVhazsKKwkJICAgIGNhc2Ugc0xlZnQ6CisJCQlzdGF0ZSA9IHNSYW5nZTsKKwkJCWlmIChmb3JtYXRbbl0gPT0gJ14nKSB7CisJCQkgICAgKytuOworCQkJICAgIG15X2ZtdFtuXSA9IGZvcm1hdFtuXTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgY2FzZSBzUmFuZ2U6CisJCQlpZiAoZm9ybWF0W25dID09IFJfU1FVQVJFKSB7CisJCQkgICAgc3RhdGUgPSBzRmluYWw7CisJCQkgICAgY2h1bmsgPSBjUmFuZ2U7CisJCQl9CisJCQlicmVhazsKKwkJICAgIGNhc2Ugc05vcm1hbDoKKwkJCWlmIChmb3JtYXRbbl0gPT0gJyonKSB7CisJCQkgICAgc3RhdGUgPSBzVW5rbm93bjsKKwkJCX0gZWxzZSB7CisJCQkgICAgaWYgKChjdGVzdCA9IGZpbmFsX2NoKGZvcm1hdFtuXSwgb3RoZXIpKSAhPSBjVW5rbm93bikgeworCQkJCXN0YXRlID0gc0ZpbmFsOworCQkJCWNodW5rID0gY3Rlc3Q7CisJCQkgICAgfSBlbHNlIGlmICgob3Rlc3QgPSBvdGhlcl9jaChmb3JtYXRbbl0pKSAhPSBvVW5rbm93bikgeworCQkJCW90aGVyID0gb3Rlc3Q7CisJCQkgICAgfSBlbHNlIGlmIChpc2FscGhhKFVDaGFyKGZvcm1hdFtuXSkpKSB7CisJCQkJc3RhdGUgPSBzRmluYWw7CisJCQkJY2h1bmsgPSBjRXJyb3I7CisJCQkgICAgfQorCQkJfQorCQkJYnJlYWs7CisJCSAgICBjYXNlIHNGaW5hbDoKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCW15X2ZtdFtuXSA9ICdcMCc7CisJCWZvcm1hdCArPSBuOworCisJCWlmIChjaHVuayA9PSBjVW5rbm93bgorCQkgICAgfHwgY2h1bmsgPT0gY0Vycm9yKSB7CisJCSAgICBpZiAoYXNzaWduZWQgPT0gMCkKKwkJCWFzc2lnbmVkID0gRU9GOworCQkgICAgYnJlYWs7CisJCX0KKworCQkvKiBhZGQgJW4sIGlmIHRoZSBmb3JtYXQgd2FzIG5vdCB0aGF0ICovCisJCWlmIChjaHVuayAhPSBjQXNzaWduZWQpIHsKKwkJICAgIHN0cmNhdChteV9mbXQsICIlbiIpOworCQl9CisKKwkJc3dpdGNoIChjaHVuaykgeworCQljYXNlIGNBc3NpZ25lZDoKKwkJICAgIHN0cmNhdChteV9mbXQsICIlbiIpOworCQkgICAgcG9pbnRlciA9ICZlYXRlbjsKKwkJICAgIGJyZWFrOworCQljYXNlIGNJbnQ6CisJCSAgICBwb2ludGVyID0gdmFfYXJnKGFwLCBpbnQgKik7CisJCSAgICBicmVhazsKKwkJY2FzZSBjU2hvcnQ6CisJCSAgICBwb2ludGVyID0gdmFfYXJnKGFwLCBzaG9ydCAqKTsKKwkJICAgIGJyZWFrOworCQljYXNlIGNGbG9hdDoKKwkJICAgIHBvaW50ZXIgPSB2YV9hcmcoYXAsIGZsb2F0ICopOworCQkgICAgYnJlYWs7CisJCWNhc2UgY0RvdWJsZToKKwkJICAgIHBvaW50ZXIgPSB2YV9hcmcoYXAsIGRvdWJsZSAqKTsKKwkJICAgIGJyZWFrOworCQljYXNlIGNMb25nOgorCQkgICAgcG9pbnRlciA9IHZhX2FyZyhhcCwgbG9uZyAqKTsKKwkJICAgIGJyZWFrOworCQljYXNlIGNQb2ludGVyOgorCQkgICAgcG9pbnRlciA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKKwkJICAgIGJyZWFrOworCQljYXNlIGNDaGFyOgorCQljYXNlIGNSYW5nZToKKwkJY2FzZSBjU3RyaW5nOgorCQkgICAgcG9pbnRlciA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJICAgIGJyZWFrOworCQljYXNlIGNFcnJvcjoKKwkJY2FzZSBjVW5rbm93bjoKKwkJICAgIGJyZWFrOworCQl9CisJCS8qIGRvIHRoZSBjb252ZXJzaW9uICovCisJCVQoKCIuLi5jb252ZXJ0aW5nIGNodW5rICMlZCB0eXBlICVkKCVzLCVzKSIsCisJCSAgIGFzc2lnbmVkICsgMSwgY2h1bmssCisJCSAgIF9uY192aXNidWYyKDEsIHN0ciArIGNvbnN1bWVkKSwKKwkJICAgX25jX3Zpc2J1ZjIoMiwgbXlfZm10KSkpOworCQlpZiAoc3NjYW5mKHN0ciArIGNvbnN1bWVkLCBteV9mbXQsIHBvaW50ZXIsICZlYXRlbikgPiAwKQorCQkgICAgY29uc3VtZWQgKz0gZWF0ZW47CisJCWVsc2UKKwkJICAgIGJyZWFrOworCQkrK2Fzc2lnbmVkOworCSAgICB9CisJICAgIGZyZWUobXlfZm10KTsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUoYXNzaWduZWQpOworI2VuZGlmCit9CisjZWxzZQorZXh0ZXJuCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3Zzc2NhbmYodm9pZCk7CQkvKiBxdWlldCdzIGdjYyB3YXJuaW5nICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3Zzc2NhbmYodm9pZCkKK3sKK30JCQkJLyogbm9uZW1wdHkgZm9yIHN0cmljdCBBTlNJIGNvbXBpbGVycyAqLworI2VuZGlmIC8qICFIQVZFX1ZTU0NBTkYgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvYmFzZS93cmVzaXplLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2Uvd3Jlc2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NjA4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2Jhc2Uvd3Jlc2l6ZS5jCkBAIC0wLDAgKzEsMjQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LTIwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHdyZXNpemUuYyx2IDEuMjkgMjAwOC8wNi8wNyAxMzo1OTowMSB0b20gRXhwICQiKQorCitzdGF0aWMgaW50CitjbGVhbnVwX2xpbmVzKHN0cnVjdCBsZGF0ICpkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIHdoaWxlICgtLWxlbmd0aCA+PSAwKQorCWZyZWUoZGF0YVtsZW5ndGhdLnRleHQpOworICAgIGZyZWUoZGF0YSk7CisgICAgcmV0dXJuIEVSUjsKK30KKworLyoKKyAqIElmIHdlIGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGxkYXQgc3RydWN0cywgd2Ugd2lsbCBoYXZlIHRvIHJlcGFpciBwb2ludGVycworICogdXNlZCBpbiBzdWJ3aW5kb3dzLgorICovCitzdGF0aWMgdm9pZAorcmVwYWlyX3N1YndpbmRvd3MoV0lORE9XICpjbXApCit7CisgICAgV0lORE9XTElTVCAqd3A7CisgICAgc3RydWN0IGxkYXQgKnBsaW5lID0gY21wLT5fbGluZTsKKyAgICBpbnQgcm93OworCisgICAgX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisKKyAgICBmb3IgKGVhY2hfd2luZG93KHdwKSkgeworCVdJTkRPVyAqdHN0ID0gJih3cC0+d2luKTsKKworCWlmICh0c3QtPl9wYXJlbnQgPT0gY21wKSB7CisKKwkgICAgaWYgKHRzdC0+X3BhcnkgPiBjbXAtPl9tYXh5KQorCQl0c3QtPl9wYXJ5ID0gY21wLT5fbWF4eTsKKwkgICAgaWYgKHRzdC0+X3BhcnggPiBjbXAtPl9tYXh4KQorCQl0c3QtPl9wYXJ4ID0gY21wLT5fbWF4eDsKKworCSAgICBpZiAodHN0LT5fbWF4eSArIHRzdC0+X3BhcnkgPiBjbXAtPl9tYXh5KQorCQl0c3QtPl9tYXh5ID0gY21wLT5fbWF4eSAtIHRzdC0+X3Bhcnk7CisJICAgIGlmICh0c3QtPl9tYXh4ICsgdHN0LT5fcGFyeCA+IGNtcC0+X21heHgpCisJCXRzdC0+X21heHggPSBjbXAtPl9tYXh4IC0gdHN0LT5fcGFyeDsKKworCSAgICBmb3IgKHJvdyA9IDA7IHJvdyA8PSB0c3QtPl9tYXh5OyArK3JvdykgeworCQl0c3QtPl9saW5lW3Jvd10udGV4dCA9ICZwbGluZVt0c3QtPl9wYXJ5ICsgcm93XS50ZXh0W3RzdC0+X3BhcnhdOworCSAgICB9CisJICAgIHJlcGFpcl9zdWJ3aW5kb3dzKHRzdCk7CisJfQorICAgIH0KKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworfQorCisvKgorICogUmVhbGxvY2F0ZSBhIGN1cnNlcyBXSU5ET1cgc3RydWN0IHRvIGVpdGhlciBzaHJpbmsgb3IgZ3JvdyB0byB0aGUgc3BlY2lmaWVkCisgKiBuZXcgbGluZXMvY29sdW1ucy4gIElmIGl0IGdyb3dzLCB0aGUgbmV3IGNoYXJhY3RlciBjZWxscyBhcmUgZmlsbGVkIHdpdGgKKyAqIGJsYW5rcy4gIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgcmVwYWludGluZyB0aGUgYmxhbmsgYXJlYS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQord3Jlc2l6ZShXSU5ET1cgKndpbiwgaW50IFRvTGluZXMsIGludCBUb0NvbHMpCit7CisgICAgaW50IGNvbCwgcm93LCBzaXplX3gsIHNpemVfeTsKKyAgICBzdHJ1Y3QgbGRhdCAqcGxpbmU7CisgICAgc3RydWN0IGxkYXQgKm5ld19saW5lcyA9IDA7CisKKyNpZmRlZiBUUkFDRQorICAgIFQoKFRfQ0FMTEVEKCJ3cmVzaXplKCVwLCVkLCVkKSIpLCB3aW4sIFRvTGluZXMsIFRvQ29scykpOworICAgIGlmICh3aW4pIHsKKwlUUihUUkFDRV9VUERBVEUsICgiLi4uYmVnICglbGQsICVsZCksIG1heCglbGQsJWxkKSwgcmVnKCVsZCwlbGQpIiwKKwkJCSAgKGxvbmcpIHdpbi0+X2JlZ3ksIChsb25nKSB3aW4tPl9iZWd4LAorCQkJICAobG9uZykgd2luLT5fbWF4eSwgKGxvbmcpIHdpbi0+X21heHgsCisJCQkgIChsb25nKSB3aW4tPl9yZWd0b3AsIChsb25nKSB3aW4tPl9yZWdib3R0b20pKTsKKwlpZiAoVVNFX1RSQUNFRihUUkFDRV9VUERBVEUpKSB7CisJICAgIF90cmFjZWR1bXAoIi4uLmJlZm9yZSIsIHdpbik7CisJICAgIF9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCF3aW4gfHwgLS1Ub0xpbmVzIDwgMCB8fCAtLVRvQ29scyA8IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgc2l6ZV94ID0gd2luLT5fbWF4eDsKKyAgICBzaXplX3kgPSB3aW4tPl9tYXh5OworCisgICAgaWYgKFRvTGluZXMgPT0gc2l6ZV95CisJJiYgVG9Db2xzID09IHNpemVfeCkKKwlyZXR1cm5Db2RlKE9LKTsKKworICAgIGlmICgod2luLT5fZmxhZ3MgJiBfU1VCV0lOKSkgeworCS8qCisJICogQ2hlY2sgaWYgdGhlIG5ldyBsaW1pdHMgd2lsbCBmaXQgaW50byB0aGUgcGFyZW50IHdpbmRvdydzIHNpemUuICBJZgorCSAqIG5vdCwgZG8gbm90IHJlc2l6ZS4gIFdlIGNvdWxkIGFkanVzdCB0aGUgbG9jYXRpb24gb2YgdGhlIHN1YndpbmRvdywKKwkgKiBidXQgdGhlIGFwcGxpY2F0aW9uIG1heSBub3QgbGlrZSB0aGF0LgorCSAqLworCWlmICh3aW4tPl9wYXJ5ICsgVG9MaW5lcyA+IHdpbi0+X3BhcmVudC0+X21heHkKKwkgICAgfHwgd2luLT5fcGFyeCArIFRvQ29scyA+IHdpbi0+X3BhcmVudC0+X21heHgpIHsKKwkgICAgcmV0dXJuQ29kZShFUlIpOworCX0KKwlwbGluZSA9IHdpbi0+X3BhcmVudC0+X2xpbmU7CisgICAgfSBlbHNlIHsKKwlwbGluZSA9IDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBuZXcgbWVtb3J5IGFzIG5lZWRlZC4gIERvIHRoZSBhbGxvY2F0aW9ucyB3aXRob3V0IG1vZGlmeWluZworICAgICAqIHRoZSBvcmlnaW5hbCB3aW5kb3csIGluIGNhc2UgYW4gYWxsb2NhdGlvbiBmYWlscy4gIEFsd2F5cyBhbGxvY2F0ZQorICAgICAqIChhdCBsZWFzdCB0ZW1wb3JhcmlseSkgdGhlIGFycmF5IHBvaW50aW5nIHRvIHRoZSBpbmRpdmlkdWFsIGxpbmVzLgorICAgICAqLworICAgIG5ld19saW5lcyA9IHR5cGVDYWxsb2Moc3RydWN0IGxkYXQsICh1bnNpZ25lZCkgKFRvTGluZXMgKyAxKSk7CisgICAgaWYgKG5ld19saW5lcyA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworICAgIC8qCisgICAgICogRm9yIGVhY2ggbGluZSBpbiB0aGUgdGFyZ2V0LCBhbGxvY2F0ZSBvciBhZGp1c3QgcG9pbnRlcnMgZm9yIHRoZQorICAgICAqIGNvcnJlc3BvbmRpbmcgdGV4dCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyBhIHdpbmRvdyBvciBhCisgICAgICogc3Vid2luZG93LgorICAgICAqLworICAgIGZvciAocm93ID0gMDsgcm93IDw9IFRvTGluZXM7ICsrcm93KSB7CisJaW50IGJlZ2luID0gKHJvdyA+IHNpemVfeSkgPyAwIDogKHNpemVfeCArIDEpOworCWludCBlbmQgPSBUb0NvbHM7CisJTkNVUlNFU19DSF9UICpzOworCisJaWYgKCEod2luLT5fZmxhZ3MgJiBfU1VCV0lOKSkgeworCSAgICBpZiAocm93IDw9IHNpemVfeSkgeworCQlpZiAoVG9Db2xzICE9IHNpemVfeCkgeworCQkgICAgaWYgKChzID0gdHlwZU1hbGxvYyhOQ1VSU0VTX0NIX1QsIFRvQ29scyArIDEpKSA9PSAwKQorCQkJcmV0dXJuQ29kZShjbGVhbnVwX2xpbmVzKG5ld19saW5lcywgcm93KSk7CisJCSAgICBmb3IgKGNvbCA9IDA7IGNvbCA8PSBUb0NvbHM7ICsrY29sKSB7CisJCQlzW2NvbF0gPSAoY29sIDw9IHNpemVfeAorCQkJCSAgPyB3aW4tPl9saW5lW3Jvd10udGV4dFtjb2xdCisJCQkJICA6IHdpbi0+X25jX2JrZ2QpOworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgcyA9IHdpbi0+X2xpbmVbcm93XS50ZXh0OworCQl9CisJICAgIH0gZWxzZSB7CisJCWlmICgocyA9IHR5cGVNYWxsb2MoTkNVUlNFU19DSF9ULCBUb0NvbHMgKyAxKSkgPT0gMCkKKwkJICAgIHJldHVybkNvZGUoY2xlYW51cF9saW5lcyhuZXdfbGluZXMsIHJvdykpOworCQlmb3IgKGNvbCA9IDA7IGNvbCA8PSBUb0NvbHM7ICsrY29sKQorCQkgICAgc1tjb2xdID0gd2luLT5fbmNfYmtnZDsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHMgPSAmcGxpbmVbd2luLT5fcGFyeSArIHJvd10udGV4dFt3aW4tPl9wYXJ4XTsKKwl9CisKKwlpZl9VU0VfU0NST0xMX0hJTlRTKG5ld19saW5lc1tyb3ddLm9sZGluZGV4ID0gcm93KTsKKwlpZiAocm93IDw9IHNpemVfeSkgeworCSAgICBuZXdfbGluZXNbcm93XS5maXJzdGNoYXIgPSB3aW4tPl9saW5lW3Jvd10uZmlyc3RjaGFyOworCSAgICBuZXdfbGluZXNbcm93XS5sYXN0Y2hhciA9IHdpbi0+X2xpbmVbcm93XS5sYXN0Y2hhcjsKKwl9CisJaWYgKChUb0NvbHMgIT0gc2l6ZV94KSB8fCAocm93ID4gc2l6ZV95KSkgeworCSAgICBpZiAoZW5kID49IGJlZ2luKSB7CS8qIGdyb3dpbmcgKi8KKwkJaWYgKG5ld19saW5lc1tyb3ddLmZpcnN0Y2hhciA8IGJlZ2luKQorCQkgICAgbmV3X2xpbmVzW3Jvd10uZmlyc3RjaGFyID0gYmVnaW47CisJICAgIH0gZWxzZSB7CQkvKiBzaHJpbmtpbmcgKi8KKwkJbmV3X2xpbmVzW3Jvd10uZmlyc3RjaGFyID0gMDsKKwkgICAgfQorCSAgICBuZXdfbGluZXNbcm93XS5sYXN0Y2hhciA9IFRvQ29sczsKKwl9CisJbmV3X2xpbmVzW3Jvd10udGV4dCA9IHM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBEaXNwb3NlIG9mIHVud2FudGVkIG1lbW9yeS4KKyAgICAgKi8KKyAgICBpZiAoISh3aW4tPl9mbGFncyAmIF9TVUJXSU4pKSB7CisJaWYgKFRvQ29scyA9PSBzaXplX3gpIHsKKwkgICAgZm9yIChyb3cgPSBUb0xpbmVzICsgMTsgcm93IDw9IHNpemVfeTsgcm93KyspIHsKKwkJZnJlZSh3aW4tPl9saW5lW3Jvd10udGV4dCk7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBmb3IgKHJvdyA9IDA7IHJvdyA8PSBzaXplX3k7IHJvdysrKSB7CisJCWZyZWUod2luLT5fbGluZVtyb3ddLnRleHQpOworCSAgICB9CisJfQorICAgIH0KKworICAgIGZyZWUod2luLT5fbGluZSk7CisgICAgd2luLT5fbGluZSA9IG5ld19saW5lczsKKworICAgIC8qCisgICAgICogRmluYWxseSwgYWRqdXN0IHRoZSBwYXJhbWV0ZXJzIHNob3dpbmcgc2NyZWVuIHNpemUgYW5kIGN1cnNvcgorICAgICAqIHBvc2l0aW9uOgorICAgICAqLworICAgIHdpbi0+X21heHggPSBUb0NvbHM7CisgICAgd2luLT5fbWF4eSA9IFRvTGluZXM7CisKKyAgICBpZiAod2luLT5fcmVndG9wID4gd2luLT5fbWF4eSkKKwl3aW4tPl9yZWd0b3AgPSB3aW4tPl9tYXh5OworICAgIGlmICh3aW4tPl9yZWdib3R0b20gPiB3aW4tPl9tYXh5CisJfHwgd2luLT5fcmVnYm90dG9tID09IHNpemVfeSkKKwl3aW4tPl9yZWdib3R0b20gPSB3aW4tPl9tYXh5OworCisgICAgaWYgKHdpbi0+X2N1cnggPiB3aW4tPl9tYXh4KQorCXdpbi0+X2N1cnggPSB3aW4tPl9tYXh4OworICAgIGlmICh3aW4tPl9jdXJ5ID4gd2luLT5fbWF4eSkKKwl3aW4tPl9jdXJ5ID0gd2luLT5fbWF4eTsKKworICAgIC8qCisgICAgICogQ2hlY2sgZm9yIHN1YndpbmRvd3Mgb2YgdGhpcyBvbmUsIGFuZCByZWFkanVzdCBwb2ludGVycyB0byBvdXIgdGV4dCwKKyAgICAgKiBpZiBuZWVkZWQuCisgICAgICovCisgICAgcmVwYWlyX3N1YndpbmRvd3Mod2luKTsKKworI2lmZGVmIFRSQUNFCisgICAgVFIoVFJBQ0VfVVBEQVRFLCAoIi4uLmJlZyAoJWxkLCAlbGQpLCBtYXgoJWxkLCVsZCksIHJlZyglbGQsJWxkKSIsCisJCSAgICAgIChsb25nKSB3aW4tPl9iZWd5LCAobG9uZykgd2luLT5fYmVneCwKKwkJICAgICAgKGxvbmcpIHdpbi0+X21heHksIChsb25nKSB3aW4tPl9tYXh4LAorCQkgICAgICAobG9uZykgd2luLT5fcmVndG9wLCAobG9uZykgd2luLT5fcmVnYm90dG9tKSk7CisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVVBEQVRFKSkgeworCV90cmFjZWR1bXAoIi4uLmFmdGVyOiIsIHdpbik7CisJX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvY3Vyc2VzLnByaXYuaCBiL25jdXJzZXMtNS43L25jdXJzZXMvY3Vyc2VzLnByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWUxMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9jdXJzZXMucHJpdi5oCkBAIC0wLDAgKzEsMTcyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qCisgKiAkSWQ6IGN1cnNlcy5wcml2LmgsdiAxLjM5NCAyMDA4LzEwLzA0IDIxOjM3OjQ1IHRvbSBFeHAgJAorICoKKyAqCWN1cnNlcy5wcml2LmgKKyAqCisgKglIZWFkZXIgZmlsZSBmb3IgY3Vyc2VzIGxpYnJhcnkgb2JqZWN0cyB3aGljaCBhcmUgcHJpdmF0ZSB0bworICoJdGhlIGxpYnJhcnkuCisgKgorICovCisKKyNpZm5kZWYgQ1VSU0VTX1BSSVZfSAorI2RlZmluZSBDVVJTRVNfUFJJVl9IIDEKKworI2luY2x1ZGUgPG5jdXJzZXNfZGxsLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPG5jdXJzZXNfY2ZnLmg+CisKKyNpZiBVU0VfUkNTX0lEUworI2RlZmluZSBNT0RVTEVfSUQoaWQpIHN0YXRpYyBjb25zdCBjaGFyIElkZW50W10gPSBpZDsKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9JRChpZCkgLypub3RoaW5nKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmIEhBVkVfU1lTX0JTRFRZUEVTX0gKKyNpbmNsdWRlIDxzeXMvYnNkdHlwZXMuaD4JLyogbmVlZGVkIGZvciBJU0MgKi8KKyNlbmRpZgorCisjaWYgSEFWRV9MSU1JVFNfSAorIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbGlmIEhBVkVfU1lTX1BBUkFNX0gKKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZuZGVmIFBBVEhfTUFYCisjIGlmIGRlZmluZWQoX1BPU0lYX1BBVEhfTUFYKQorIyAgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorIyBlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKKyMgIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisjIGVsc2UKKyMgIGRlZmluZSBQQVRIX01BWCAyNTUJLyogdGhlIFBvc2l4IG1pbmltdW0gcGF0aC1zaXplICovCisjIGVuZGlmCisjZW5kaWYKKworI2lmIERFQ0xfRVJSTk8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKworI2luY2x1ZGUgPG5jX3BhbmVsLmg+CisKKy8qIFNvbWUgc3lzdGVtcyBoYXZlIGEgYnJva2VuICdzZWxlY3QoKScsIGJ1dCB3b3JrYWJsZSAncG9sbCgpJy4gIFVzZSB0aGF0ICovCisjaWYgSEFWRV9XT1JLSU5HX1BPTEwKKyNkZWZpbmUgVVNFX0ZVTkNfUE9MTCAxCisjaWYgSEFWRV9QT0xMX0gKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIFVTRV9GVU5DX1BPTEwgMAorI2VuZGlmCisKKy8qIGluY2x1ZGUgc2lnbmFsLmggYmVmb3JlIGN1cnNlcy5oIHRvIHdvcmstYXJvdW5kIGRlZmVjdCBpbiBnbGliYyAyLjEuMyAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorCisvKiBBbGVzc2FuZHJvIFJ1YmluaSdzIEdQTSAoZ2VuZXJhbC1wdXJwb3NlIG1vdXNlKSAqLworI2lmIEhBVkVfTElCR1BNICYmIEhBVkVfR1BNX0gKKyNkZWZpbmUgVVNFX0dQTV9TVVBQT1JUIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9HUE1fU1VQUE9SVCAwCisjZW5kaWYKKworLyogUU5YIG1vdXNlIHN1cHBvcnQgKi8KKyNpZiBkZWZpbmVkKF9fUU5YX18pICYmICFkZWZpbmVkKF9fUU5YTlRPX18pCisjZGVmaW5lIFVTRV9RTlhfTU9VU0UgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1FOWF9NT1VTRSAwCisjZW5kaWYKKworLyogRU1YIG1vdXNlIHN1cHBvcnQgKi8KKyNpZmRlZiBfX0VNWF9fCisjZGVmaW5lIFVTRV9FTVhfTU9VU0UgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX0VNWF9NT1VTRSAwCisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX01BWENMSUNLIDE2NgorI2RlZmluZSBFVl9NQVgJCTgJLyogc2l6ZSBvZiBtb3VzZSBjaXJjdWxhciBldmVudCBxdWV1ZSAqLworCisvKgorICogSWYgd2UgZG9uJ3QgaGF2ZSBzaWduYWxzIHRvIHN1cHBvcnQgaXQsIGRvbid0IGFkZCBhIHNpZ3dpbmNoIGhhbmRsZXIuCisgKiBJbiBhbnkgY2FzZSwgcmVzaXppbmcgaXMgYW4gZXh0ZW5kZWQgZmVhdHVyZS4gIFVzZSBpdCBpZiB3ZSd2ZSBnb3QgaXQuCisgKi8KKyNpZiAhTkNVUlNFU19FWFRfRlVOQ1MKKyN1bmRlZiBIQVZFX1NJWkVDSEFOR0UKKyNkZWZpbmUgSEFWRV9TSVpFQ0hBTkdFIDAKKyNlbmRpZgorCisjaWYgSEFWRV9TSVpFQ0hBTkdFICYmIFVTRV9TSUdXSU5DSCAmJiBkZWZpbmVkKFNJR1dJTkNIKQorI2RlZmluZSBVU0VfU0laRUNIQU5HRSAxCisjZWxzZQorI2RlZmluZSBVU0VfU0laRUNIQU5HRSAwCisjdW5kZWYgVVNFX1NJR1dJTkNICisjZGVmaW5lIFVTRV9TSUdXSU5DSCAwCisjZW5kaWYKKworLyoKKyAqIElmIGRlc2lyZWQsIG9uZSBjYW4gY29uZmlndXJlIHRoaXMsIGRpc2FibGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdAorICogcG9pbnQgdG8gY3VzdG9tIHRlcm1pbmZvL3Rlcm1jYXAgbG9jYXRpb25zLgorICovCisjaWZkZWYgVVNFX1JPT1RfRU5WSVJPTgorI2RlZmluZSB1c2VfdGVybWluZm9fdmFycygpIDEKKyNlbHNlCisjZGVmaW5lIHVzZV90ZXJtaW5mb192YXJzKCkgX25jX2Vudl9hY2Nlc3MoKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX2Vudl9hY2Nlc3MgKHZvaWQpOworI2VuZGlmCisKKy8qCisgKiBOb3QgYWxsIHBsYXRmb3JtcyBoYXZlIG1lbW1vdmU7IHNvbWUgaGF2ZSBhbiBlcXVpdmFsZW50IGJjb3B5LiAgKFNvbWUgbWF5CisgKiBoYXZlIG5laXRoZXIpLgorICovCisjaWYgVVNFX09LX0JDT1BZCisjZGVmaW5lIG1lbW1vdmUoZCxzLG4pIGJjb3B5KHMsZCxuKQorI2VsaWYgVVNFX01ZX01FTU1PVkUKKyNkZWZpbmUgbWVtbW92ZShkLHMsbikgX25jX21lbW1vdmUoZCxzLG4pCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCAqKSBfbmNfbWVtbW92ZSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CisjZW5kaWYKKworLyoKKyAqIFNjcm9sbCBoaW50cyBhcmUgdXNlbGVzcyB3aGVuIGhhc2htYXAgaXMgdXNlZAorICovCisjaWYgIVVTRV9TQ1JPTExfSElOVFMKKyNpZiAhVVNFX0hBU0hNQVAKKyNkZWZpbmUgVVNFX1NDUk9MTF9ISU5UUyAxCisjZWxzZQorI2RlZmluZSBVU0VfU0NST0xMX0hJTlRTIDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBVU0VfU0NST0xMX0hJTlRTCisjZGVmaW5lIGlmX1VTRV9TQ1JPTExfSElOVFMoc3RtdCkgc3RtdAorI2Vsc2UKKyNkZWZpbmUgaWZfVVNFX1NDUk9MTF9ISU5UUyhzdG10KSAvKm5vdGhpbmcqLworI2VuZGlmCisKKy8qCisgKiBOb3RlOiAgaHQvY2J0IGV4cGFuc2lvbiBmbGFrZXMgb3V0IHJhbmRvbWx5IHVuZGVyIExpbnV4IDEuMS40NywgYnV0IG9ubHkKKyAqIHdoZW4gd2UncmUgdGhyb3dpbmcgY29udHJvbCBjb2RlcyBhdCB0aGUgc2NyZWVuIGF0IGhpZ2ggdm9sdW1lLiAgVG8gc2VlCisgKiB0aGlzLCByZS1lbmFibGUgVVNFX0hBUkRfVEFCUyBhbmQgcnVuIHdvcm0gZm9yIGEgd2hpbGUuICBPdGhlciBzeXN0ZW1zCisgKiBwcm9iYWJseSBkb24ndCB3YW50IHRvIGRlZmluZSB0aGlzIGVpdGhlciBkdWUgdG8gdW5jZXJ0YWludGllcyBhYm91dCB0YWIKKyAqIGRlbGF5cyBhbmQgZXhwYW5zaW9uIGluIHJhdyBtb2RlLgorICovCisKKyNkZWZpbmUgVFJJRVMgc3RydWN0IHRyaWVzCit0eXBlZGVmIFRSSUVTIHsKKwlUUklFUyAgICAqY2hpbGQ7ICAgICAgICAgICAgLyogcHRyIHRvIGNoaWxkLiAgTlVMTCBpZiBub25lICAgICAgICAgICovCisJVFJJRVMgICAgKnNpYmxpbmc7ICAgICAgICAgIC8qIHB0ciB0byBzaWJsaW5nLiAgTlVMTCBpZiBub25lICAgICAgICAqLworCXVuc2lnbmVkIGNoYXIgICAgY2g7ICAgICAgICAvKiBjaGFyYWN0ZXIgYXQgdGhpcyBub2RlICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBzaG9ydCAgIHZhbHVlOyAgICAgLyogY29kZSBvZiBzdHJpbmcgc28gZmFyLiAgMCBpZiBub25lLiAgICovCisjdW5kZWYgVFJJRVMKK30gVFJJRVM7CisKKy8qCisgKiBDb21tb24vdHJvdWJsZXNvbWUgY2hhcmFjdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgU3RyaW5nT2YoY2gpIHtjaCwgMH0KKworI2RlZmluZSBMX0JSQUNFICd7JworI2RlZmluZSBSX0JSQUNFICd9JworI2RlZmluZSBTX1FVT1RFICdcJycKKyNkZWZpbmUgRF9RVU9URSAnIicKKworI2RlZmluZSBWVF9BQ1NDICJgYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+IgorCisvKgorICogU3RydWN0dXJlIGZvciBwYWxldHRlIHRhYmxlcworICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgc2hvcnQgcmVkLCBncmVlbiwgYmx1ZTsJLyogd2hhdCBjb2xvcl9jb250ZW50KCkgcmV0dXJucyAqLworICAgIHNob3J0IHIsIGcsIGI7CQkvKiBwYXJhbXMgdG8gaW5pdF9jb2xvcigpICovCisgICAgaW50IGluaXQ7CQkJLyogdHJ1ZSBpZiB3ZSBjYWxsZWQgaW5pdF9jb2xvcigpICovCit9Citjb2xvcl90OworCisjZGVmaW5lIE1BWENPTFVNTlMgICAgMTM1CisjZGVmaW5lIE1BWExJTkVTICAgICAgNjYKKyNkZWZpbmUgRklGT19TSVpFICAgICBNQVhDT0xVTU5TKzIgIC8qIGZvciBub2NicmVhayBtb2RlIGlucHV0ICovCisKKyNkZWZpbmUgQUNTX0xFTiAgICAgICAxMjgKKworI2RlZmluZSBXSU5ET1dMSVNUIHN0cnVjdCBfd2luX2xpc3QKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIF9uY19ia2dkICAgIF9ia2dybmQKKyNlbHNlCisjdW5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2RlZmluZSBfbmNfYmtnZCAgICBfYmtnZAorI2RlZmluZSB3Z2V0Ymtncm5kKHdpbiwgd2NoKQkqd2NoID0gd2luLT5fYmtnZAorI2RlZmluZSB3Ymtncm5kCSAgICB3YmtnZAorI2VuZGlmCisKKyN1bmRlZiBOQ1VSU0VTX09QQVFVRQorI2RlZmluZSBOQ1VSU0VTX0lOVEVSTkFMUyAxCisjZGVmaW5lIE5DVVJTRVNfT1BBUVVFIDAKKworI2luY2x1ZGUgPGN1cnNlcy5oPgkvKiB3ZSdsbCB1c2UgLUlwYXRoIGRpcmVjdGl2ZSB0byBnZXQgdGhlIHJpZ2h0IG9uZSEgKi8KKyNpbmNsdWRlIDx0ZXJtLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorI2luY2x1ZGUgPG5jX3RwYXJtLmg+CisKKyNpZiBOQ1VSU0VTX0VYVF9DT0xPUlMgJiYgVVNFX1dJREVDX1NVUFBPUlQKKyNkZWZpbmUgaWZfRVhUX0NPTE9SUyhzdG10KQlzdG10CisjZGVmaW5lIE5ldFBhaXIodmFsdWUscCkJKHZhbHVlKS5leHRfY29sb3IgPSAocCksIFwKKwkJCQlBdHRyT2YodmFsdWUpICY9IEFMTF9CVVRfQ09MT1IsIFwKKwkJCQlBdHRyT2YodmFsdWUpIHw9IChBX0NPTE9SICYgQ09MT1JfUEFJUigocCA+IDI1NSkgPyAyNTUgOiBwKSkKKyNkZWZpbmUgU2V0UGFpcih2YWx1ZSxwKQkodmFsdWUpLmV4dF9jb2xvciA9IChwKQorI2RlZmluZSBHZXRQYWlyKHZhbHVlKQkJKHZhbHVlKS5leHRfY29sb3IKKyNkZWZpbmUgdW5Db2xvcihuKQkJKEF0dHJPZihuKSAmIEFMTF9CVVRfQ09MT1IpCisjZGVmaW5lIEdFVF9XSU5ET1dfUEFJUih3KQkodyktPl9jb2xvcgorI2RlZmluZSBTRVRfV0lORE9XX1BBSVIodyxwKQkodyktPl9jb2xvciA9IChwKQorI2RlZmluZSBTYW1lQXR0ck9mKGEsYikJCShBdHRyT2YoYSkgPT0gQXR0ck9mKGIpICYmIEdldFBhaXIoYSkgPT0gR2V0UGFpcihiKSkKKyNkZWZpbmUgVklEQVRUUihhdHRyLCBwYWlyKQl2aWRfYXR0cihhdHRyLCBwYWlyLCAwKQorI2Vsc2UKKyNkZWZpbmUgaWZfRVhUX0NPTE9SUyhzdG10KQkvKiBub3RoaW5nICovCisjZGVmaW5lIFNldFBhaXIodmFsdWUscCkJUmVtQXR0cih2YWx1ZSwgQV9DT0xPUiksIFwKKwkJCQlTZXRBdHRyKHZhbHVlLCBBdHRyT2YodmFsdWUpIHwgKEFfQ09MT1IgJiBDT0xPUl9QQUlSKHApKSkKKyNkZWZpbmUgR2V0UGFpcih2YWx1ZSkJCVBBSVJfTlVNQkVSKEF0dHJPZih2YWx1ZSkpCisjZGVmaW5lIHVuQ29sb3IobikJCShBdHRyT2YobikgJiBBTExfQlVUX0NPTE9SKQorI2RlZmluZSBHRVRfV0lORE9XX1BBSVIodykJUEFJUl9OVU1CRVIoV0lORE9XX0FUVFJTKHcpKQorI2RlZmluZSBTRVRfV0lORE9XX1BBSVIodyxwKQlXSU5ET1dfQVRUUlModykgJj0gQUxMX0JVVF9DT0xPUiwgXAorCQkJCVdJTkRPV19BVFRSUyh3KSB8PSAoQV9DT0xPUiAmIENPTE9SX1BBSVIocCkpCisjZGVmaW5lIFNhbWVBdHRyT2YoYSxiKQkJKEF0dHJPZihhKSA9PSBBdHRyT2YoYikpCisjZGVmaW5lIFZJREFUVFIoYXR0ciwgcGFpcikJdmlkYXR0cihhdHRyKQorI2VuZGlmCisKKyNpZiBOQ1VSU0VTX05PX1BBRERJTkcKKyNkZWZpbmUgR2V0Tm9QYWRkaW5nKHNwKQkoKHNwKSA/IChzcCktPl9ub19wYWRkaW5nIDogX25jX3ByZXNjcmVlbi5fbm9fcGFkZGluZykKKyNkZWZpbmUgU2V0Tm9QYWRkaW5nKHNwKQlfbmNfc2V0X25vX3BhZGRpbmcoc3ApCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NldF9ub19wYWRkaW5nKFNDUkVFTiAqKTsKKyNlbHNlCisjZGVmaW5lIEdldE5vUGFkZGluZyhzcCkJRkFMU0UKKyNkZWZpbmUgU2V0Tm9QYWRkaW5nKHNwKQkvKm5vdGhpbmcqLworI2VuZGlmCisKKyNkZWZpbmUgV0lORE9XX0FUVFJTKHcpCQkoKHcpLT5fYXR0cnMpCisKKyNkZWZpbmUgU0NSRUVOX0FUVFJTKHMpCQkoKigocyktPl9jdXJyZW50X2F0dHIpKQorI2RlZmluZSBHRVRfU0NSRUVOX1BBSVIocykJR2V0UGFpcihTQ1JFRU5fQVRUUlMocykpCisjZGVmaW5lIFNFVF9TQ1JFRU5fUEFJUihzLHApCVNldFBhaXIoU0NSRUVOX0FUVFJTKHMpLCBwKQorCisjaWYgVVNFX1JFRU5UUkFOVAorTkNVUlNFU19FWFBPUlQoaW50ICopIF9uY19wdHJfTGluZXMgKHZvaWQpOworTkNVUlNFU19FWFBPUlQoaW50ICopIF9uY19wdHJfQ29scyAodm9pZCk7CisjZGVmaW5lIHB0ckxpbmVzKCkgKFNQID8gJihTUC0+X0xJTkVTKSA6ICYoX25jX3ByZXNjcmVlbi5fTElORVMpKQorI2RlZmluZSBwdHJDb2xzKCkgIChTUCA/ICYoU1AtPl9DT0xTKSAgOiAmKF9uY19wcmVzY3JlZW4uX0NPTFMpKQorI2RlZmluZSBTRVRfTElORVModmFsdWUpICpfbmNfcHRyX0xpbmVzKCkgPSB2YWx1ZQorI2RlZmluZSBTRVRfQ09MUyh2YWx1ZSkgICpfbmNfcHRyX0NvbHMoKSA9IHZhbHVlCisjZWxzZQorI2RlZmluZSBwdHJMaW5lcygpICZMSU5FUworI2RlZmluZSBwdHJDb2xzKCkgICZDT0xTCisjZGVmaW5lIFNFVF9MSU5FUyh2YWx1ZSkgTElORVMgPSB2YWx1ZQorI2RlZmluZSBTRVRfQ09MUyh2YWx1ZSkgIENPTFMgPSB2YWx1ZQorI2VuZGlmCisKKyNkZWZpbmUgVFJfTVVURVgoZGF0YSkgX3RyYWNlZigiJXNAJWQ6IG1lOiUwOGxYIENPVU5UOiUydS8lMmQvJTZkLyUyZC8lcyU5dTogIiAjZGF0YSwgXAorCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkgICAgKHVuc2lnbmVkIGxvbmcpIChwdGhyZWFkX3NlbGYoKSksIFwKKwkgICAgZGF0YS5fX2RhdGEuX19sb2NrLCBcCisJICAgIGRhdGEuX19kYXRhLl9fY291bnQsIFwKKwkgICAgZGF0YS5fX2RhdGEuX19vd25lciwgXAorCSAgICBkYXRhLl9fZGF0YS5fX2tpbmQsIFwKKwkgICAgKGRhdGEuX19kYXRhLl9fbnVzZXJzID4gNSkgPyAiIE9PUFMgIiA6ICIiLCBcCisJICAgIGRhdGEuX19kYXRhLl9fbnVzZXJzKQorI2RlZmluZSBUUl9HTE9CQUxfTVVURVgobmFtZSkgVFJfTVVURVgoX25jX2dsb2JhbHMubXV0ZXhfIyNuYW1lKQorCisjaWZkZWYgVVNFX1BUSFJFQURTCisKKyNpZiBVU0VfUkVFTlRSQU5UCisjaW5jbHVkZSA8cHRocmVhZC5oPgorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19pbml0X3B0aHJlYWRzKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19tdXRleF9pbml0KHB0aHJlYWRfbXV0ZXhfdCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19tdXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90ICopOworI2RlZmluZSBfbmNfbG9ja19nbG9iYWwobmFtZSkJX25jX211dGV4X2xvY2soJl9uY19nbG9iYWxzLm11dGV4XyMjbmFtZSkKKyNkZWZpbmUgX25jX3RyeV9nbG9iYWwobmFtZSkgICAgX25jX211dGV4X3RyeWxvY2soJl9uY19nbG9iYWxzLm11dGV4XyMjbmFtZSkKKyNkZWZpbmUgX25jX3VubG9ja19nbG9iYWwobmFtZSkJX25jX211dGV4X3VubG9jaygmX25jX2dsb2JhbHMubXV0ZXhfIyNuYW1lKQorCisjZWxzZQorI2Vycm9yIFBPU0lYIHRocmVhZHMgcmVxdWlyZXMgLS1lbmFibGUtcmVlbnRyYW50IG9wdGlvbgorI2VuZGlmCisKKyNpZiBVU0VfV0VBS19TWU1CT0xTCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGlmIGRlZmluZWQgX19VU0VfSVNPQzk5CisjICAgIGRlZmluZSBfY2F0X3ByYWdtYShleHApCV9QcmFnbWEoI2V4cCkKKyMgICAgZGVmaW5lIF93ZWFrX3ByYWdtYShleHApCV9jYXRfcHJhZ21hKHdlYWsgbmFtZSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF93ZWFrX3ByYWdtYShleHApCisjICBlbmRpZgorIyAgZGVmaW5lIF9kZWNsYXJlKG5hbWUpCV9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9fdHlwZW9mX18obmFtZSkgbmFtZQorIyAgZGVmaW5lIHdlYWtfc3ltYm9sKG5hbWUpCV93ZWFrX3ByYWdtYShuYW1lKSBfZGVjbGFyZShuYW1lKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyMgIGlmIFVTRV9XRUFLX1NZTUJPTFMKK3dlYWtfc3ltYm9sKHB0aHJlYWRfc2lnbWFzayk7Cit3ZWFrX3N5bWJvbChwdGhyZWFkX3NlbGYpOword2Vha19zeW1ib2wocHRocmVhZF9lcXVhbCk7Cit3ZWFrX3N5bWJvbChwdGhyZWFkX211dGV4X2luaXQpOword2Vha19zeW1ib2wocHRocmVhZF9tdXRleF9sb2NrKTsKK3dlYWtfc3ltYm9sKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKTsKK3dlYWtfc3ltYm9sKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayk7Cit3ZWFrX3N5bWJvbChwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKTsKK3dlYWtfc3ltYm9sKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3NpZ3Byb2NtYXNrKGludCwgY29uc3Qgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKik7CisjICAgIHVuZGVmICBzaWdwcm9jbWFzaworIyAgICBkZWZpbmUgc2lncHJvY21hc2sgX25jX3NpZ3Byb2NtYXNrCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX05BTk9TTEVFUAorI3VuZGVmIEhBVkVfTkFOT1NMRUVQCisjZGVmaW5lIEhBVkVfTkFOT1NMRUVQIDAJLyogbmFub3NsZWVwIHN1c3BlbmRzIGFsbCB0aHJlYWRzICovCisjZW5kaWYKKworI2Vsc2UgLyogIVVTRV9QVEhSRUFEUyAqLworCisjZGVmaW5lIF9uY19pbml0X3B0aHJlYWRzKCkJLyogbm90aGluZyAqLworI2RlZmluZSBfbmNfbXV0ZXhfaW5pdChvYmopCS8qIG5vdGhpbmcgKi8KKworI2RlZmluZSBfbmNfbG9ja19nbG9iYWwobmFtZSkJLyogbm90aGluZyAqLworI2RlZmluZSBfbmNfdHJ5X2dsb2JhbChuYW1lKSAgICAwCisjZGVmaW5lIF9uY191bmxvY2tfZ2xvYmFsKG5hbWUpCS8qIG5vdGhpbmcgKi8KKworI2VuZGlmIC8qIFVTRV9QVEhSRUFEUyAqLworCisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyMgZGVmaW5lIFBSRUNJU0VfR0VUVElNRSAxCisjIGRlZmluZSBUaW1lVHlwZSBzdHJ1Y3QgdGltZXZhbAorI2Vsc2UKKyMgZGVmaW5lIFBSRUNJU0VfR0VUVElNRSAwCisjIGRlZmluZSBUaW1lVHlwZSB0aW1lX3QKKyNlbmRpZgorCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGNvbG9yIHBhaXJzCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgY29sb3JwYWlyX3Q7CS8qIHR5cGUgYmlnIGVub3VnaCB0byBzdG9yZSBQQUlSX09GKCkgKi8KKyNkZWZpbmUgQ19TSElGVCA5CQkvKiB3ZSBuZWVkIG1vcmUgYml0cyB0aGFuIHRoZXJlIGFyZSBjb2xvcnMgKi8KKyNkZWZpbmUgQ19NQVNLCQkJKCgxIDw8IENfU0hJRlQpIC0gMSkKKyNkZWZpbmUgUEFJUl9PRihmZywgYmcpCQkoKCgoZmcpICYgQ19NQVNLKSA8PCBDX1NISUZUKSB8ICgoYmcpICYgQ19NQVNLKSkKKyNkZWZpbmUgaXNEZWZhdWx0Q29sb3IoYykJKChjKSA+PSBDT0xPUl9ERUZBVUxUIHx8IChjKSA8IDApCisKKyNkZWZpbmUgQ09MT1JfREVGQVVMVAkJQ19NQVNLCisKKyNpZiBkZWZpbmVkKFVTRV9URVJNTElCKSAmJiAhZGVmaW5lZChORUVEX05DVVJTRVNfQ0hfVCkKKworI3VuZGVmIE5DVVJTRVNfQ0hfVAkJLyogdGhpcyBpcyBub3QgYSB0ZXJtbGliIGZlYXR1cmUgKi8KKyNkZWZpbmUgTkNVUlNFU19DSF9UIHZvaWQJLyogLi4uYnV0IHdlIG5lZWQgYSBwb2ludGVyIGluIFNDUkVFTiAqLworCisjZW5kaWYJLyogVVNFX1RFUk1MSUIgKi8KKworI2lmbmRlZiBVU0VfVEVSTUxJQgorc3RydWN0IGxkYXQKK3sKKwlOQ1VSU0VTX0NIX1QJKnRleHQ7CQkvKiB0ZXh0IG9mIHRoZSBsaW5lICovCisJTkNVUlNFU19TSVpFX1QJZmlyc3RjaGFyOwkvKiBmaXJzdCBjaGFuZ2VkIGNoYXJhY3RlciBpbiB0aGUgbGluZSAqLworCU5DVVJTRVNfU0laRV9UCWxhc3RjaGFyOwkvKiBsYXN0IGNoYW5nZWQgY2hhcmFjdGVyIGluIHRoZSBsaW5lICovCisJTkNVUlNFU19TSVpFX1QJb2xkaW5kZXg7CS8qIGluZGV4IG9mIHRoZSBsaW5lIGF0IGxhc3QgdXBkYXRlICovCit9OworI2VuZGlmCS8qIFVTRV9URVJNTElCICovCisKK3R5cGVkZWYgZW51bSB7CisJTV9YVEVSTQk9IC0xCQkvKiB1c2UgeHRlcm0ncyBtb3VzZSB0cmFja2luZz8gKi8KKwksTV9OT05FID0gMAkJLyogbm8gbW91c2UgZGV2aWNlICovCisjaWYgVVNFX0dQTV9TVVBQT1JUCisJLE1fR1BNCQkJLyogdXNlIEdQTSAqLworI2VuZGlmCisjaWYgVVNFX1NZU01PVVNFCisJLE1fU1lTTU9VU0UJCS8qIEZyZWVCU0Qgc3lzbW91c2Ugb24gY29uc29sZSAqLworI2VuZGlmCit9IE1vdXNlVHlwZTsKKworLyoKKyAqIFN0cnVjdHVyZXMgZm9yIHNjcm9sbGluZy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBoYXNodmFsOworCWludCBvbGRjb3VudCwgbmV3Y291bnQ7CisJaW50IG9sZGluZGV4LCBuZXdpbmRleDsKK30gSEFTSE1BUDsKKworLyoKKyAqIFN0cnVjdHVyZXMgZm9yIHNvZnQgbGFiZWxzLgorICovCisKK3N0cnVjdCBfU0xLOworCisjaWZuZGVmIFVTRV9URVJNTElCCisKK3R5cGVkZWYgc3RydWN0Cit7CisJY2hhciAqZW50X3RleHQ7CQkvKiB0ZXh0IGZvciB0aGUgbGFiZWwgKi8KKwljaGFyICpmb3JtX3RleHQ7CS8qIGZvcm1hdHRlZCB0ZXh0IChsZWZ0L2NlbnRlci8uLi4pICovCisJaW50IGVudF94OwkJLyogeCBjb29yZGluYXRlIG9mIHRoaXMgZmllbGQgKi8KKwljaGFyIGRpcnR5OwkJLyogdGhpcyBsYWJlbCBoYXMgY2hhbmdlZCAqLworCWNoYXIgdmlzaWJsZTsJCS8qIGZpZWxkIGlzIHZpc2libGUgKi8KK30gc2xrX2VudDsKKwordHlwZWRlZiBzdHJ1Y3QgX1NMSyB7CisJY2hhciBkaXJ0eTsJCS8qIGFsbCBsYWJlbHMgaGF2ZSBjaGFuZ2VkICovCisJY2hhciBoaWRkZW47CQkvKiBzb2Z0IGxhYmVscyBhcmUgaGlkZGVuICovCisJV0lORE9XICp3aW47CisJc2xrX2VudCAqZW50OworCXNob3J0ICBtYXhsYWI7CQkvKiBudW1iZXIgb2YgYXZhaWxhYmxlIGxhYmVscyAqLworCXNob3J0ICBsYWJjbnQ7CQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIGxhYmVscyAqLworCXNob3J0ICBtYXhsZW47CQkvKiBsZW5ndGggb2YgbGFiZWxzICovCisJTkNVUlNFU19DSF9UIGF0dHI7CS8qIHNvZnQgbGFiZWwgYXR0cmlidXRlICovCit9IFNMSzsKKworI2VuZGlmCS8qIFVTRV9URVJNTElCICovCisKK3R5cGVkZWYJc3RydWN0IHsKKwlXSU5ET1cgKndpbjsJCS8qIHRoZSB3aW5kb3cgdXNlZCBpbiB0aGUgaG9vayAgICAgICovCisJaW50CWxpbmU7CQkvKiBsaW5lcyB0byB0YWtlLCA8IDAgPT4gZnJvbSBib3R0b20qLworCWludAkoKmhvb2spKFdJTkRPVyAqLCBpbnQpOyAvKiBjYWxsYmFjayBmb3IgdXNlcgkgICAgKi8KK30gcmlwb2ZmX3Q7CisKKyNpZiBVU0VfR1BNX1NVUFBPUlQKKyN1bmRlZiBidXR0b25zCQkJLyogdGVybS5oIGRlZmluZXMgdGhpcywgYW5kIGdwbSB1c2VzIGl0ISAqLworI2luY2x1ZGUgPGdwbS5oPgorCisjaWZkZWYgSEFWRV9MSUJETAorLyogbGluayBkeW5hbWljYWxseSB0byBHUE0gKi8KK3R5cGVkZWYgaW50ICpUWVBFX2dwbV9mZDsKK3R5cGVkZWYgaW50ICgqVFlQRV9HcG1fT3BlbikgKEdwbV9Db25uZWN0ICosIGludCk7Cit0eXBlZGVmIGludCAoKlRZUEVfR3BtX0Nsb3NlKSAodm9pZCk7Cit0eXBlZGVmIGludCAoKlRZUEVfR3BtX0dldEV2ZW50KSAoR3BtX0V2ZW50ICopOworCisjZGVmaW5lIG15X2dwbV9mZCAgICAgICBTUC0+X21vdXNlX2dwbV9mZAorI2RlZmluZSBteV9HcG1fT3BlbiAgICAgU1AtPl9tb3VzZV9HcG1fT3BlbgorI2RlZmluZSBteV9HcG1fQ2xvc2UgICAgU1AtPl9tb3VzZV9HcG1fQ2xvc2UKKyNkZWZpbmUgbXlfR3BtX0dldEV2ZW50IFNQLT5fbW91c2VfR3BtX0dldEV2ZW50CisjZWxzZQorLyogbGluayBzdGF0aWNhbGx5IHRvIEdQTSAqLworI2RlZmluZSBteV9ncG1fZmQgICAgICAgJmdwbV9mZAorI2RlZmluZSBteV9HcG1fT3BlbiAgICAgR3BtX09wZW4KKyNkZWZpbmUgbXlfR3BtX0Nsb3NlICAgIEdwbV9DbG9zZQorI2RlZmluZSBteV9HcG1fR2V0RXZlbnQgR3BtX0dldEV2ZW50CisjZW5kaWYgLyogSEFWRV9MSUJETCAqLworI2VuZGlmIC8qIFVTRV9HUE1fU1VQUE9SVCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbG9uZyBzZXF1ZW5jZTsKKyAgICBib29sIGxhc3RfdXNlZDsKKyAgICBjaGFyICpmaXhfc2dyMDsJCS8qIHRoaXMgaG9sZHMgdGhlIGZpbHRlcmVkIHNncjAgc3RyaW5nICovCisgICAgY2hhciAqbGFzdF9idWZwOwkJLyogaGVscCB3aXRoIGZpeF9zZ3IwIGxlYWsgKi8KKyAgICBURVJNSU5BTCAqbGFzdF90ZXJtOworfSBUR0VURU5UX0NBQ0hFOworCisjZGVmaW5lIFRHRVRFTlRfTUFYIDQKKworLyoKKyAqIFN0YXRlIG9mIHRwYXJtKCkuCisgKi8KKyNkZWZpbmUgU1RBQ0tTSVpFIDIwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bmlvbiB7CisJCWludAludW07CisJCWNoYXIJKnN0cjsKKwl9IGRhdGE7CisJYm9vbCBudW1fdHlwZTsKK30gU1RBQ0tfRlJBTUU7CisKKyNkZWZpbmUgTlVNX1ZBUlMgMjYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIFRSQUNFCisJY29uc3QgY2hhcgkqdG5hbWU7CisjZW5kaWYKKwljb25zdCBjaGFyCSp0cGFyYW1fYmFzZTsKKworCVNUQUNLX0ZSQU1FCXN0YWNrW1NUQUNLU0laRV07CisJaW50CQlzdGFja19wdHI7CisKKwljaGFyCQkqb3V0X2J1ZmY7CisJc2l6ZV90CQlvdXRfc2l6ZTsKKwlzaXplX3QJCW91dF91c2VkOworCisJY2hhcgkJKmZtdF9idWZmOworCXNpemVfdAkJZm10X3NpemU7CisKKwlpbnQJCWR5bmFtaWNfdmFyW05VTV9WQVJTXTsKKwlpbnQJCXN0YXRpY192YXJzW05VTV9WQVJTXTsKK30gVFBBUk1fU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICp0ZXh0OworICAgIHNpemVfdCBzaXplOworfSBUUkFDRUJVRjsKKworLyoKKyAqIFRoZSBmaWxlc3lzdGVtIGRhdGFiYXNlIG5vcm1hbGx5IHVzZXMgYSBzaW5nbGUtbGV0dGVyIGZvciB0aGUgbG93ZXIgbGV2ZWwKKyAqIG9mIGRpcmVjdG9yaWVzLiAgVXNlIGEgaGV4YWRlY2ltYWwgY29kZSBmb3IgZmlsZXN5c3RlbXMgd2hpY2ggZG8gbm90CisgKiBwcmVzZXJ2ZSBtaXhlZC1jYXNlIG5hbWVzLgorICovCisjaWYgTUlYRURDQVNFX0ZJTEVOQU1FUworI2RlZmluZSBMRUFGX0ZNVCAiJWMiCisjZWxzZQorI2RlZmluZSBMRUFGX0ZNVCAiJTAyeCIKKyNlbmRpZgorCisvKgorICogVFJBQ0VNU0VfRk1UIGlzIG5vIGxvbmdlciB0aGFuIDgwIGNvbHVtbnMsIHRoZXJlIGFyZSA1IG51bWJlcnMgdGhhdAorICogY291bGQgYXQgbW9zdCBoYXZlIDEwIGRpZ2l0cywgYW5kIHRoZSBtYXNrIGNvbnRhaW5zIG5vIG1vcmUgdGhhbiAzMiBiaXRzCisgKiB3aXRoIGVhY2ggYml0IHJlcHJlc2VudGluZyBsZXNzIHRoYW4gMTUgY2hhcmFjdGVycy4gIFVzdWFsbHkgdGhlIHdob2xlCisgKiBzdHJpbmcgaXMgbGVzcyB0aGFuIDgwIGNvbHVtbnMsIGJ1dCB0aGlzIGJ1ZmZlciBzaXplIGlzIGFuIGFic29sdXRlCisgKiBsaW1pdC4KKyAqLworI2RlZmluZSBUUkFDRU1TRV9NQVgJKDgwICsgKDUgKiAxMCkgKyAoMzIgKiAxNSkpCisjZGVmaW5lIFRSQUNFTVNFX0ZNVAkiaWQgJTJkICBhdCAoJTJkLCAlMmQsICUyZCkgc3RhdGUgJTRseCA9IHsiIC8qIH0gKi8KKworLyoKKyAqIEdsb2JhbCBkYXRhIHdoaWNoIGlzIG5vdCBzcGVjaWZpYyB0byBhIHNjcmVlbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCVNJR19BVE9NSUNfVAloYXZlX3NpZ3dpbmNoOworCVNJR19BVE9NSUNfVAljbGVhbnVwX25lc3RlZDsKKworCWJvb2wJCWluaXRfc2lnbmFsczsKKwlib29sCQlpbml0X3NjcmVlbjsKKworCWNvbnN0IGNoYXIJKmNvbXBfc291cmNlbmFtZTsKKwljaGFyCQkqY29tcF90ZXJtdHlwZTsKKworCWJvb2wJCWhhdmVfdGljX2RpcmVjdG9yeTsKKwlib29sCQlrZWVwX3RpY19kaXJlY3Rvcnk7CisJY29uc3QgY2hhcgkqdGljX2RpcmVjdG9yeTsKKworCWNoYXIJCSpkYmlfbGlzdDsKKwlpbnQJCWRiaV9zaXplOworCisJY2hhcgkJKmZpcnN0X25hbWU7CisJY2hhcgkJKiprZXluYW1lX3RhYmxlOworCisJaW50CQlzbGtfZm9ybWF0OworCisJY2hhcgkJKnNhZmVwcmludF9idWY7CisJc2l6ZV90CQlzYWZlcHJpbnRfdXNlZDsKKworCVRHRVRFTlRfQ0FDSEUJdGdldGVudF9jYWNoZVtUR0VURU5UX01BWF07CisJaW50CQl0Z2V0ZW50X2luZGV4OworCWxvbmcJCXRnZXRlbnRfc2VxdWVuY2U7CisKKwlXSU5ET1dMSVNUCSpfbmNfd2luZG93bGlzdDsKKyNkZWZpbmUgX25jX3dpbmRvd3MJX25jX2dsb2JhbHMuX25jX3dpbmRvd2xpc3QKKworI2lmIFVTRV9IT01FX1RFUk1JTkZPCisJY2hhcgkJKmhvbWVfdGVybWluZm87CisjZW5kaWYKKworI2lmICFVU0VfU0FGRV9TUFJJTlRGCisJaW50CQlzYWZlcHJpbnRfY29sczsKKwlpbnQJCXNhZmVwcmludF9yb3dzOworI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorCWJvb2wJCWluaXRfdHJhY2U7CisJY2hhcgkJdHJhY2VfZm5hbWVbUEFUSF9NQVhdOworCWludAkJdHJhY2VfbGV2ZWw7CisJRklMRQkJKnRyYWNlX2ZwOworCisJY2hhcgkJKnRyYWNlYXJnX2J1ZjsKKwlzaXplX3QJCXRyYWNlYXJnX3VzZWQ7CisKKwlUUkFDRUJVRgkqdHJhY2VidWZfcHRyOworCXNpemVfdAkJdHJhY2VidWZfdXNlZDsKKworCWNoYXIJCXRyYWNlY2hyX2J1Zls0MF07CisKKwljaGFyCQkqdHJhY2VkbXBfYnVmOworCXNpemVfdAkJdHJhY2VkbXBfdXNlZDsKKworCXVuc2lnbmVkIGNoYXIJKnRyYWNldHJ5X2J1ZjsKKwlzaXplX3QJCXRyYWNldHJ5X3VzZWQ7CisKKwljaGFyCQl0cmFjZWF0cl9jb2xvcl9idWZbMl1bODBdOworCWludAkJdHJhY2VhdHJfY29sb3Jfc2VsOworCWludAkJdHJhY2VhdHJfY29sb3JfbGFzdDsKKworI2VuZGlmCS8qIFRSQUNFICovCisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKwlwdGhyZWFkX211dGV4X3QJbXV0ZXhfY3Vyc2VzOworCXB0aHJlYWRfbXV0ZXhfdAltdXRleF90c3RfdHJhY2VmOworCXB0aHJlYWRfbXV0ZXhfdAltdXRleF90cmFjZWY7CisJaW50CQluZXN0ZWRfdHJhY2VmOworCWludAkJdXNlX3B0aHJlYWRzOworI2RlZmluZSBfbmNfdXNlX3B0aHJlYWRzCV9uY19nbG9iYWxzLnVzZV9wdGhyZWFkcworI2VuZGlmCit9IE5DVVJTRVNfR0xPQkFMUzsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0dMT0JBTFMpIF9uY19nbG9iYWxzOworCisjZGVmaW5lIE5fUklQUyA1CisKKy8qCisgKiBHbG9iYWwgZGF0YSB3aGljaCBjYW4gYmUgc3dlcHQgdXAgaW50byBhIFNDUkVFTiB3aGVuIG9uZSBpcyBjcmVhdGVkLgorICogSXQgbWF5IGJlIG1vZGlmaWVkIGJlZm9yZSB0aGUgbmV4dCBTQ1JFRU4gaXMgY3JlYXRlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWJvb2wJCXVzZV9lbnY7CisJYm9vbAkJZmlsdGVyX21vZGU7CisJYXR0cl90CQlwcmV2aW91c19hdHRyOworCXJpcG9mZl90CXJpcHBlZG9mZltOX1JJUFNdOworCXJpcG9mZl90CSpyc3A7CisJVFBBUk1fU1RBVEUJdHBhcm1fc3RhdGU7CisJVFRZCQkqc2F2ZWRfdHR5OwkvKiBzYXZldHR5L3Jlc2V0dHkgaW5mb3JtYXRpb24JICAgICovCisjaWYgTkNVUlNFU19OT19QQURESU5HCisJYm9vbAkJX25vX3BhZGRpbmc7CS8qIGZsYWcgdG8gc2V0IGlmIHBhZGRpbmcgZGlzYWJsZWQgICovCisjZW5kaWYKKyNpZiBCUk9LRU5fTElOS0VSIHx8IFVTRV9SRUVOVFJBTlQKKwljaHR5cGUJCSpyZWFsX2Fjc19tYXA7CisJaW50CQlfTElORVM7CisJaW50CQlfQ09MUzsKKwlURVJNSU5BTAkqX2N1cl90ZXJtOworI2lmZGVmIFRSQUNFCisJbG9uZwkJX291dGNoYXJzOworCWNvbnN0IGNoYXIJKl90cHV0c190cmFjZTsKKyNlbmRpZgorI2VuZGlmCit9IE5DVVJTRVNfUFJFU0NSRUVOOworCisjZGVmaW5lIHJpcG9mZl9zcAlfbmNfcHJlc2NyZWVuLnJzcAorI2RlZmluZSByaXBvZmZfc3RhY2sJX25jX3ByZXNjcmVlbi5yaXBwZWRvZmYKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX1BSRVNDUkVFTikgX25jX3ByZXNjcmVlbjsKKworLyoKKyAqIFRoZSBTQ1JFRU4gc3RydWN0dXJlLgorICovCisKK3N0cnVjdCBzY3JlZW4geworCWludAkJX2lmZDsJCS8qIGlucHV0IGZpbGUgcHRyIGZvciBzY3JlZW4JICAgICovCisJRklMRQkJKl9vZnA7CQkvKiBvdXRwdXQgZmlsZSBwdHIgZm9yIHNjcmVlbgkgICAgKi8KKwljaGFyCQkqX3NldGJ1ZjsJLyogYnVmZmVyZWQgSS9PIGZvciBvdXRwdXQJICAgICovCisJYm9vbAkJX2ZpbHRlcmVkOwkvKiBmaWx0ZXIoKSB3YXMgY2FsbGVkCQkgICAgKi8KKwlib29sCQlfYnVmZmVyZWQ7CS8qIHNldHZidWYgdXNlcyBfc2V0YnVmIGRhdGEJICAgICovCisJaW50CQlfY2hlY2tmZDsJLyogZmlsZWRlc2MgZm9yIHR5cGVhaGVhZCBjaGVjawkgICAgKi8KKwlURVJNSU5BTAkqX3Rlcm07CQkvKiB0ZXJtaW5hbCB0eXBlIGluZm9ybWF0aW9uCSAgICAqLworCVRUWQkJX3NhdmVkX3R0eTsJLyogc2F2ZXR0eS9yZXNldHR5IGluZm9ybWF0aW9uCSAgICAqLworCU5DVVJTRVNfU0laRV9UCV9saW5lczsJCS8qIHNjcmVlbiBsaW5lcwkJCSAgICAqLworCU5DVVJTRVNfU0laRV9UCV9jb2x1bW5zOwkvKiBzY3JlZW4gY29sdW1ucwkJICAgICovCisKKwlOQ1VSU0VTX1NJWkVfVAlfbGluZXNfYXZhaWw7CS8qIGxpbmVzIGF2YWlsYWJsZSBmb3Igc3Rkc2NyCSAgICAqLworCU5DVVJTRVNfU0laRV9UCV90b3BzdG9sZW47CS8qIGxpbmVzIHN0b2xlbiBmcm9tIHRvcAkgICAgKi8KKworCVdJTkRPVwkJKl9jdXJzY3I7CS8qIGN1cnJlbnQgc2NyZWVuCQkgICAgKi8KKwlXSU5ET1cJCSpfbmV3c2NyOwkvKiB2aXJ0dWFsIHNjcmVlbiB0byBiZSB1cGRhdGVkIHRvICAqLworCVdJTkRPVwkJKl9zdGRzY3I7CS8qIHNjcmVlbidzIGZ1bGwtd2luZG93IGNvbnRleHQJICAgICovCisKKwlUUklFUwkJKl9rZXl0cnk7CS8qICJUcnkiIGZvciB1c2Ugd2l0aCBrZXlwYWQgbW9kZSAgICovCisJVFJJRVMJCSpfa2V5X29rOwkvKiBEaXNhYmxlZCBrZXlzIHZpYSBrZXlvaygsRkFMU0UpICAqLworCWJvb2wJCV90cmllZDsJCS8qIGtleXBhZCBtb2RlIHdhcyBpbml0aWFsaXplZAkgICAgKi8KKwlib29sCQlfa2V5cGFkX29uOwkvKiBrZXlwYWQgbW9kZSBpcyBjdXJyZW50bHkgb24JICAgICovCisKKwlib29sCQlfY2FsbGVkX3dnZXRjaDsJLyogY2hlY2sgZm9yIHJlY3Vyc2lvbiBpbiB3Z2V0Y2goKSAgKi8KKwlpbnQJCV9maWZvW0ZJRk9fU0laRV07CS8qIGlucHV0IHB1c2gtYmFjayBidWZmZXIgICAqLworCXNob3J0CQlfZmlmb2hlYWQsCS8qIGhlYWQgb2YgZmlmbyBxdWV1ZQkJICAgICovCisJCQlfZmlmb3RhaWwsCS8qIHRhaWwgb2YgZmlmbyBxdWV1ZQkJICAgICovCisJCQlfZmlmb3BlZWssCS8qIHdoZXJlIHRvIHBlZWsgZm9yIG5leHQgY2hhcgkgICAgKi8KKwkJCV9maWZvaG9sZDsJLyogc2V0IGlmIGJyZWFrb3V0IG1hcmtlZAkgICAgKi8KKworCWludAkJX2VuZHdpbjsJLyogYXJlIHdlIG91dCBvZiB3aW5kb3cgbW9kZT8JICAgICovCisJTkNVUlNFU19DSF9UCSpfY3VycmVudF9hdHRyOyAvKiBob2xkcyBjdXJyZW50IGF0dHJpYnV0ZXMgc2V0CSAgICAqLworCWludAkJX2NvbG9yb247CS8qIGlzIGNvbG9yIGVuYWJsZWQ/CQkgICAgKi8KKwlpbnQJCV9jb2xvcl9kZWZzOwkvKiBhcmUgY29sb3JzIG1vZGlmaWVkCQkgICAgKi8KKwlpbnQJCV9jdXJzb3I7CS8qIHZpc2liaWxpdHkgb2YgdGhlIGN1cnNvcgkgICAgKi8KKwlpbnQJCV9jdXJzcm93OwkvKiBwaHlzaWNhbCBjdXJzb3Igcm93CQkgICAgKi8KKwlpbnQJCV9jdXJzY29sOwkvKiBwaHlzaWNhbCBjdXJzb3IgY29sdW1uCSAgICAqLworCWJvb2wJCV9ub3R0eTsJCS8qIHRydWUgaWYgd2UgY2Fubm90IHN3aXRjaCBub24tdHR5ICovCisJaW50CQlfbmw7CQkvKiBUcnVlIGlmIE5MIC0+IENSL05MIGlzIG9uCSAgICAqLworCWludAkJX3JhdzsJCS8qIFRydWUgaWYgaW4gcmF3IG1vZGUJCSAgICAqLworCWludAkJX2NicmVhazsJLyogMSBpZiBpbiBjYnJlYWsgbW9kZQkJICAgICovCisJCQkJCS8qID4gMSBpZiBpbiBoYWxmZGVsYXkgbW9kZQkgICAgKi8KKwlpbnQJCV9lY2hvOwkJLyogVHJ1ZSBpZiBlY2hvIG9uCQkgICAgKi8KKwlpbnQJCV91c2VfbWV0YTsJLyogdXNlIHRoZSBtZXRhIGtleT8JCSAgICAqLworCXN0cnVjdCBfU0xLCSpfc2xrOwkJLyogcHRyIHRvIHNvZnQga2V5IHN0cnVjdCAvIE5VTEwgICAgKi8KKwlpbnQJCXNsa19mb3JtYXQ7CS8qIHNlbGVjdGVkIGZvcm1hdCBmb3IgdGhpcyBzY3JlZW4gICovCisJLyogY3Vyc29yIG1vdmVtZW50IGNvc3RzOyB1bml0cyBhcmUgMTB0aHMgb2YgbWlsbGlzZWNvbmRzICovCisjaWYgTkNVUlNFU19OT19QQURESU5HCisJYm9vbAkJX25vX3BhZGRpbmc7CS8qIGZsYWcgdG8gc2V0IGlmIHBhZGRpbmcgZGlzYWJsZWQgICovCisjZW5kaWYKKwlpbnQJCV9jaGFyX3BhZGRpbmc7CS8qIGNvc3Qgb2YgY2hhcmFjdGVyIHB1dAkgICAgKi8KKwlpbnQJCV9jcl9jb3N0OwkvKiBjb3N0IG9mIChjYXJyaWFnZV9yZXR1cm4pCSAgICAqLworCWludAkJX2N1cF9jb3N0OwkvKiBjb3N0IG9mIChjdXJzb3JfYWRkcmVzcykJICAgICovCisJaW50CQlfaG9tZV9jb3N0OwkvKiBjb3N0IG9mIChjdXJzb3JfaG9tZSkJICAgICovCisJaW50CQlfbGxfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX3RvX2xsKQkgICAgKi8KKyNpZiBVU0VfSEFSRF9UQUJTCisJaW50CQlfaHRfY29zdDsJLyogY29zdCBvZiAodGFiKQkJICAgICovCisJaW50CQlfY2J0X2Nvc3Q7CS8qIGNvc3Qgb2YgKGJhY2t0YWIpCQkgICAgKi8KKyNlbmRpZiAvKiBVU0VfSEFSRF9UQUJTICovCisJaW50CQlfY3ViMV9jb3N0OwkvKiBjb3N0IG9mIChjdXJzb3JfbGVmdCkJICAgICovCisJaW50CQlfY3VmMV9jb3N0OwkvKiBjb3N0IG9mIChjdXJzb3JfcmlnaHQpCSAgICAqLworCWludAkJX2N1ZDFfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX2Rvd24pCSAgICAqLworCWludAkJX2N1dTFfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX3VwKQkJICAgICovCisJaW50CQlfY3ViX2Nvc3Q7CS8qIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX2xlZnQpCSAgICAqLworCWludAkJX2N1Zl9jb3N0OwkvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl9yaWdodCkJICAgICovCisJaW50CQlfY3VkX2Nvc3Q7CS8qIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX2Rvd24pCSAgICAqLworCWludAkJX2N1dV9jb3N0OwkvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl91cCkJICAgICovCisJaW50CQlfaHBhX2Nvc3Q7CS8qIGNvc3Qgb2YgKGNvbHVtbl9hZGRyZXNzKQkgICAgKi8KKwlpbnQJCV92cGFfY29zdDsJLyogY29zdCBvZiAocm93X2FkZHJlc3MpCSAgICAqLworCS8qIHVzZWQgaW4gdHR5X3VwZGF0ZS5jLCBtdXN0IGJlIGNoYXJzICovCisJaW50CQlfZWRfY29zdDsJLyogY29zdCBvZiAoY2xyX2VvcykJCSAgICAqLworCWludAkJX2VsX2Nvc3Q7CS8qIGNvc3Qgb2YgKGNscl9lb2wpCQkgICAgKi8KKwlpbnQJCV9lbDFfY29zdDsJLyogY29zdCBvZiAoY2xyX2JvbCkJCSAgICAqLworCWludAkJX2RjaDFfY29zdDsJLyogY29zdCBvZiAoZGVsZXRlX2NoYXJhY3RlcikJICAgICovCisJaW50CQlfaWNoMV9jb3N0OwkvKiBjb3N0IG9mIChpbnNlcnRfY2hhcmFjdGVyKQkgICAgKi8KKwlpbnQJCV9kY2hfY29zdDsJLyogY29zdCBvZiAocGFybV9kY2gpCQkgICAgKi8KKwlpbnQJCV9pY2hfY29zdDsJLyogY29zdCBvZiAocGFybV9pY2gpCQkgICAgKi8KKwlpbnQJCV9lY2hfY29zdDsJLyogY29zdCBvZiAoZXJhc2VfY2hhcnMpCSAgICAqLworCWludAkJX3JlcF9jb3N0OwkvKiBjb3N0IG9mIChyZXBlYXRfY2hhcikJICAgICovCisJaW50CQlfaHBhX2NoX2Nvc3Q7CS8qIGNvc3Qgb2YgKGNvbHVtbl9hZGRyZXNzKQkgICAgKi8KKwlpbnQJCV9jdXBfY2hfY29zdDsJLyogY29zdCBvZiAoY3Vyc29yX2FkZHJlc3MpCSAgICAqLworCWludAkJX2N1Zl9jaF9jb3N0OwkvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl9yaWdodCkJICAgICovCisJaW50CQlfaW5saW5lX2Nvc3Q7CS8qIGNvc3Qgb2YgaW5saW5lLW1vdmUJCSAgICAqLworCWludAkJX3NtaXJfY29zdDsJLyogY29zdCBvZiAoZW50ZXJfaW5zZXJ0X21vZGUpCSAgICAqLworCWludAkJX3JtaXJfY29zdDsJLyogY29zdCBvZiAoZXhpdF9pbnNlcnRfbW9kZSkJICAgICovCisJaW50CQlfaXBfY29zdDsJLyogY29zdCBvZiAoaW5zZXJ0X3BhZGRpbmcpCSAgICAqLworCS8qIHVzZWQgaW4gbGliX212Y3VyLmMgKi8KKwljaGFyICoJCV9hZGRyZXNzX2N1cnNvcjsKKwkvKiB1c2VkIGluIHR0eV91cGRhdGUuYyAqLworCWludAkJX3Njcm9sbGluZzsJLyogMSBpZiB0ZXJtaW5hbCdzIHNtYXJ0IGVub3VnaCB0byAgKi8KKworCS8qIHVzZWQgaW4gbGliX2NvbG9yLmMgKi8KKwljb2xvcl90CQkqX2NvbG9yX3RhYmxlOwkvKiBzY3JlZW4ncyBjb2xvciBwYWxldHRlCSAgICAgKi8KKwlpbnQJCV9jb2xvcl9jb3VudDsJLyogY291bnQgb2YgY29sb3JzIGluIHBhbGV0dGUJICAgICAqLworCWNvbG9ycGFpcl90CSpfY29sb3JfcGFpcnM7CS8qIHNjcmVlbidzIGNvbG9yIHBhaXIgbGlzdAkgICAgICovCisJaW50CQlfcGFpcl9jb3VudDsJLyogY291bnQgb2YgY29sb3IgcGFpcnMJCSAgICAgKi8KKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworCWJvb2wJCV9kZWZhdWx0X2NvbG9yOyAvKiB1c2UgZGVmYXVsdCBjb2xvcnMJCSAgICAgKi8KKwlib29sCQlfaGFzX3Nncl8zOV80OTsgLyogaGFzIEVDTUEgZGVmYXVsdCBjb2xvciBzdXBwb3J0ICAgICovCisJaW50CQlfZGVmYXVsdF9mZzsJLyogYXNzdW1lZCBkZWZhdWx0IGZvcmVncm91bmQJICAgICAqLworCWludAkJX2RlZmF1bHRfYmc7CS8qIGFzc3VtZWQgZGVmYXVsdCBiYWNrZ3JvdW5kCSAgICAgKi8KKyNlbmRpZgorCWNodHlwZQkJX29rX2F0dHJpYnV0ZXM7IC8qIHZhbGlkIGF0dHJpYnV0ZXMgZm9yIHRlcm1pbmFsICAgICAqLworCWNodHlwZQkJX3htY19zdXBwcmVzczsJLyogYXR0cmlidXRlcyB0byBzdXBwcmVzcyBpZiB4bWMgICAgICovCisJY2h0eXBlCQlfeG1jX3RyaWdnZXJzOwkvKiBhdHRyaWJ1dGVzIHRvIHByb2Nlc3MgaWYgeG1jCSAgICAgKi8KKwljaHR5cGUgKglfYWNzX21hcDsJLyogdGhlIHJlYWwgYWx0ZXJuYXRlLWNoYXJzZXQgbWFwICAgICovCisJYm9vbCAqCQlfc2NyZWVuX2Fjc19tYXA7CisKKworCS8qIHVzZWQgaW4gbGliX3ZpZGF0dHIuYyAqLworCWJvb2wJCV91c2Vfcm1zbzsJLyogdHJ1ZSBpZiB3ZSBtYXkgdXNlICdybXNvJwkgICAgICovCisJYm9vbAkJX3VzZV9ybXVsOwkvKiB0cnVlIGlmIHdlIG1heSB1c2UgJ3JtdWwnCSAgICAgKi8KKworCS8qCisJICogVGhlc2UgZGF0YSBjb3JyZXNwb25kIHRvIHRoZSBzdGF0ZSBvZiB0aGUgaWRjb2soKSBhbmQgaWRsb2soKQorCSAqIGZ1bmN0aW9ucy4gIEEgY2F2ZWF0IGlzIGluIG9yZGVyIGhlcmU6ICB0aGUgWFNJIGFuZCBTVnI0CisJICogZG9jdW1lbnRhdGlvbiBzcGVjaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFwcGx5IHRvIHRoZSB3aW5kb3cgd2hpY2gKKwkgKiBpcyBnaXZlbiBhcyBhbiBhcmd1bWVudC4gIEhvd2V2ZXIsIG5jdXJzZXMgaW1wbGVtZW50cyB0aGlzIGxvZ2ljCisJICogb25seSBmb3IgdGhlIG5ld3Njci9jdXJzY3IgdXBkYXRlIHByb2Nlc3MsIF9ub3RfIHBlci13aW5kb3cuCisJICovCisJYm9vbAkJX25jX3NwX2lkbG9rOworCWJvb2wJCV9uY19zcF9pZGNvazsKKyNkZWZpbmUgX25jX2lkbG9rIFNQLT5fbmNfc3BfaWRsb2sKKyNkZWZpbmUgX25jX2lkY29rIFNQLT5fbmNfc3BfaWRjb2sKKworCS8qCisJICogVGhlc2UgYXJlIHRoZSBkYXRhIHRoYXQgc3VwcG9ydCB0aGUgbW91c2UgaW50ZXJmYWNlLgorCSAqLworCWJvb2wJCV9tb3VzZV9pbml0aWFsaXplZDsKKwlNb3VzZVR5cGUJX21vdXNlX3R5cGU7CisJaW50CQlfbWF4Y2xpY2s7CisJYm9vbAkJKCpfbW91c2VfZXZlbnQpIChTQ1JFRU4gKik7CisJYm9vbAkJKCpfbW91c2VfaW5saW5lKShTQ1JFRU4gKik7CisJYm9vbAkJKCpfbW91c2VfcGFyc2UpIChTQ1JFRU4gKiwgaW50KTsKKwl2b2lkCQkoKl9tb3VzZV9yZXN1bWUpKFNDUkVFTiAqKTsKKwl2b2lkCQkoKl9tb3VzZV93cmFwKQkoU0NSRUVOICopOworCWludAkJX21vdXNlX2ZkOwkvKiBmaWxlLWRlc2NyaXB0b3IsIGlmIGFueSAqLworCWJvb2wJCV9tb3VzZV9hY3RpdmU7CS8qIHRydWUgaWYgaW5pdGlhbGl6ZWQgKi8KKwltbWFza190CQlfbW91c2VfbWFzazsKKwlOQ1VSU0VTX0NPTlNUIGNoYXIgKl9tb3VzZV94dGVybWNhcDsgLyogc3RyaW5nIHRvIGVuYWJsZS9kaXNhYmxlIG1vdXNlICovCisJTUVWRU5UCQlfbW91c2VfZXZlbnRzW0VWX01BWF07CS8qIGhvbGQgdGhlIGxhc3QgbW91c2UgZXZlbnQgc2VlbiAqLworCU1FVkVOVAkJKl9tb3VzZV9ldmVudHA7CS8qIG5leHQgZnJlZSBzbG90IGluIGV2ZW50IHF1ZXVlICovCisKKyNpZiBVU0VfR1BNX1NVUFBPUlQKKwlib29sCQlfbW91c2VfZ3BtX2xvYWRlZDsKKwlib29sCQlfbW91c2VfZ3BtX2ZvdW5kOworI2lmZGVmIEhBVkVfTElCREwKKwl2b2lkCQkqX2Rsb3Blbl9ncG07CisJVFlQRV9ncG1fZmQJX21vdXNlX2dwbV9mZDsKKwlUWVBFX0dwbV9PcGVuCV9tb3VzZV9HcG1fT3BlbjsKKwlUWVBFX0dwbV9DbG9zZQlfbW91c2VfR3BtX0Nsb3NlOworCVRZUEVfR3BtX0dldEV2ZW50IF9tb3VzZV9HcG1fR2V0RXZlbnQ7CisjZW5kaWYKKwlHcG1fQ29ubmVjdAlfbW91c2VfZ3BtX2Nvbm5lY3Q7CisjZW5kaWYgLyogVVNFX0dQTV9TVVBQT1JUICovCisKKyNpZiBVU0VfRU1YX01PVVNFCisJaW50CQlfZW14bW91c2Vfd2ZkOworCWludAkJX2VteG1vdXNlX3RocmVhZDsKKwlpbnQJCV9lbXhtb3VzZV9hY3RpdmF0ZWQ7CisJY2hhcgkJX2VteG1vdXNlX2J1dHRvbnNbNF07CisjZW5kaWYKKworI2lmIFVTRV9TWVNNT1VTRQorCU1FVkVOVAkJX3N5c21vdXNlX2ZpZm9bRklGT19TSVpFXTsKKwlpbnQJCV9zeXNtb3VzZV9oZWFkOworCWludAkJX3N5c21vdXNlX3RhaWw7CisJaW50CQlfc3lzbW91c2VfY2hhcl93aWR0aDsJLyogY2hhcmFjdGVyIHdpZHRoICovCisJaW50CQlfc3lzbW91c2VfY2hhcl9oZWlnaHQ7CS8qIGNoYXJhY3RlciBoZWlnaHQgKi8KKwlpbnQJCV9zeXNtb3VzZV9vbGRfYnV0dG9uczsKKwlpbnQJCV9zeXNtb3VzZV9uZXdfYnV0dG9uczsKKyNlbmRpZgorCisJLyoKKwkgKiBUaGlzIHN1cHBvcnRzIGF1dG9tYXRpYyByZXNpemluZworCSAqLworI2lmIFVTRV9TSVpFQ0hBTkdFCisJaW50CQkoKl9yZXNpemUpKGludCxpbnQpOworI2VuZGlmCisKKwkvKgorCSAqIFRoZXNlIGFyZSBkYXRhIHRoYXQgc3VwcG9ydCB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIHRoZSBwYW5lbCBzdGFjayBvbiBhbgorCSAqIHBlciBzY3JlZW4gYmFzaXMuCisJICovCisJc3RydWN0IHBhbmVsaG9vayBfcGFuZWxIb29rOworCisJYm9vbAkJX3NpZ193aW5jaDsKKwlTQ1JFRU4JCSpfbmV4dF9zY3JlZW47CisKKwkvKiBoYXNoZXMgZm9yIG9sZCBhbmQgbmV3IGxpbmVzICovCisJdW5zaWduZWQgbG9uZwkqb2xkaGFzaCwgKm5ld2hhc2g7CisJSEFTSE1BUAkJKmhhc2h0YWI7CisJaW50CQloYXNodGFiX2xlbjsKKwlpbnQJCSpfb2xkbnVtX2xpc3Q7CisJaW50CQlfb2xkbnVtX3NpemU7CisKKwlib29sCQlfY2xlYW51cDsJLyogY2xlYW51cCBhZnRlciBpbnQvcXVpdCBzaWduYWwgKi8KKwlpbnQJCSgqX291dGNoKShpbnQpOyAvKiBvdXRwdXQgaGFuZGxlciBpZiBub3QgcHV0YyAqLworCisJaW50CQlfbGVnYWN5X2NvZGluZzsJLyogc2VlIHVzZV9sZWdhY3lfY29kaW5nKCkgKi8KKworI2lmIFVTRV9SRUVOVFJBTlQKKwljaGFyCQlfdHR5dHlwZVtOQU1FU0laRV07CisJaW50CQlfRVNDREVMQVk7CisJaW50CQlfVEFCU0laRTsKKwlpbnQJCV9MSU5FUzsKKwlpbnQJCV9DT0xTOworI2lmZGVmIFRSQUNFCisJbG9uZwkJX291dGNoYXJzOworCWNvbnN0IGNoYXIJKl90cHV0c190cmFjZTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorCWNoYXIJCXRyYWNlY2hyX2J1Zls0MF07CisJY2hhcgkJdHJhY2Vtc2VfYnVmW1RSQUNFTVNFX01BWF07CisjZW5kaWYKKwkvKgorCSAqIG5jdXJzZXMvbmN1cnNlc3cgYXJlIHRoZSBzYW1lIHVwIHRvIHRoaXMgcG9pbnQuCisJICovCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkvKiByZWNlbnQgdmVyc2lvbnMgb2YgJ3NjcmVlbicgaGF2ZSBwYXJ0aWFsbHktd29ya2luZyBzdXBwb3J0IGZvcgorCSAqIFVURi04LCBidXQgZG8gbm90IHBlcm1pdCBBQ1MgYXQgdGhlIHNhbWUgdGltZSAoc2VlIHR0eV91cGRhdGUuYykuCisJICovCisJYm9vbAkJX3NjcmVlbl9hY3NfZml4OworI2VuZGlmCit9OworCitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKFNDUkVFTiAqKSBfbmNfc2NyZWVuX2NoYWluOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihTSUdfQVRPTUlDX1QpIF9uY19oYXZlX3NpZ3dpbmNoOworCisJV0lORE9XTElTVCB7CisJV0lORE9XCXdpbjsJCS8qIGZpcnN0LCBzbyBXSU5ET1dfRVhUKCkgd29ya3MgKi8KKwlXSU5ET1dMSVNUICpuZXh0OworCVNDUkVFTiAqc2NyZWVuOwkJLyogc2NyZWVuIGNvbnRhaW5pbmcgdGhlIHdpbmRvdyAqLworI2lmZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKwljaGFyIGFkZGNoX3dvcmtbKE1CX0xFTl9NQVggKiA5KSArIDFdOworCXVuc2lnbmVkIGFkZGNoX3VzZWQ7CS8qIG51bWJlciBvZiBieXRlcyBpbiBhZGRjaF93b3JrW10gKi8KKwlpbnQgYWRkY2hfeDsJCS8qIHgtcG9zaXRpb24gZm9yIGFkZGNoX3dvcmtbXSAqLworCWludCBhZGRjaF95OwkJLyogeS1wb3NpdGlvbiBmb3IgYWRkY2hfd29ya1tdICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgV0lORE9XX0VYVCh3aW4sZmllbGQpICgoKFdJTkRPV0xJU1QgKikod2luKSktPmZpZWxkKQorCisvKiB1c3VhbGx5IGluIDxsaW1pdHMuaD4gKi8KKyNpZm5kZWYgVUNIQVJfTUFYCisjZGVmaW5lIFVDSEFSX01BWCAyNTUKKyNlbmRpZgorCisvKiBUaGUgdGVybWluZm8gc291cmNlIGlzIGFzc3VtZWQgdG8gYmUgNy1iaXQgQVNDSUkgKi8KKyNkZWZpbmUgaXM3Yml0cyhjKQkoKHVuc2lnbmVkKShjKSA8IDEyOCkKKworLyogQ2hlY2tzIGZvciBpc3ByaW50KCkgc2hvdWxkIGJlIGRvbmUgb24gOC1iaXQgY2hhcmFjdGVycyAobm9uLXdpZGUpICovCisjZGVmaW5lIGlzOGJpdHMoYykJKCh1bnNpZ25lZCkoYykgPD0gVUNIQVJfTUFYKQorCisjaWZuZGVmIG1pbgorI2RlZmluZSBtaW4oYSxiKQkoKGEpID4gKGIpICA/ICAoYikgIDogIChhKSkKKyNlbmRpZgorCisjaWZuZGVmIG1heAorI2RlZmluZSBtYXgoYSxiKQkoKGEpIDwgKGIpICA/ICAoYikgIDogIChhKSkKKyNlbmRpZgorCisvKiB1c3VhbGx5IGluIDx1bmlzdGQuaD4gKi8KKyNpZm5kZWYgU1RESU5fRklMRU5PCisjZGVmaW5lIFNURElOX0ZJTEVOTyAwCisjZW5kaWYKKworI2lmbmRlZiBTVERPVVRfRklMRU5PCisjZGVmaW5lIFNURE9VVF9GSUxFTk8gMQorI2VuZGlmCisKKyNpZm5kZWYgU1RERVJSX0ZJTEVOTworI2RlZmluZSBTVERFUlJfRklMRU5PIDIKKyNlbmRpZgorCisjaWZuZGVmIEVYSVRfU1VDQ0VTUworI2RlZmluZSBFWElUX1NVQ0NFU1MgMAorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFCisjZGVmaW5lIEVYSVRfRkFJTFVSRSAxCisjZW5kaWYKKworI2lmbmRlZiBSX09LCisjZGVmaW5lCVJfT0sJNAkJLyogVGVzdCBmb3IgcmVhZCBwZXJtaXNzaW9uLiAgKi8KKyNlbmRpZgorI2lmbmRlZiBXX09LCisjZGVmaW5lCVdfT0sJMgkJLyogVGVzdCBmb3Igd3JpdGUgcGVybWlzc2lvbi4gICovCisjZW5kaWYKKyNpZm5kZWYgWF9PSworI2RlZmluZQlYX09LCTEJCS8qIFRlc3QgZm9yIGV4ZWN1dGUgcGVybWlzc2lvbi4gICovCisjZW5kaWYKKyNpZm5kZWYgRl9PSworI2RlZmluZQlGX09LCTAJCS8qIFRlc3QgZm9yIGV4aXN0ZW5jZS4gICovCisjZW5kaWYKKworI2lmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CQkvKiBtYXkgZGVmaW5lIE9fQklOQVJZCSovCisjZW5kaWYKKworI2lmbmRlZiBPX0JJTkFSWQorI2RlZmluZSBPX0JJTkFSWSAwCisjZW5kaWYKKworI2lmZGVmIFRSQUNFCisjaWYgVVNFX1JFRU5UUkFOVAorI2RlZmluZSBDT1VOVF9PVVRDSEFSUyhuKSBfbmNfY291bnRfb3V0Y2hhcnMobik7CisjZWxzZQorI2RlZmluZSBDT1VOVF9PVVRDSEFSUyhuKSBfbmNfb3V0Y2hhcnMgKz0gKG4pOworI2VuZGlmCisjZWxzZQorI2RlZmluZSBDT1VOVF9PVVRDSEFSUyhuKSAvKiBub3RoaW5nICovCisjZW5kaWYKKworI2RlZmluZSBSRVNFVF9PVVRDSEFSUygpIENPVU5UX09VVENIQVJTKC1fbmNfb3V0Y2hhcnMpCisKKyNkZWZpbmUgVUNoYXIoYykJKCh1bnNpZ25lZCBjaGFyKShjKSkKKyNkZWZpbmUgQ2hDaGFyT2YoYykJKChjKSAmIChjaHR5cGUpQV9DSEFSVEVYVCkKKyNkZWZpbmUgQ2hBdHRyT2YoYykJKChjKSAmIChjaHR5cGUpQV9BVFRSSUJVVEVTKQorCisjaWZuZGVmIE1CX0xFTl9NQVgKKyNkZWZpbmUgTUJfTEVOX01BWCA4IC8qIHNob3VsZCBiZSA+PSBNQl9DVVJfTUFYLCBidXQgdGhhdCBtYXkgYmUgYSBmdW5jdGlvbiAqLworI2VuZGlmCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVCAvKiB7ICovCisjZGVmaW5lIGlzRUlMU0VRKHN0YXR1cykgKCgoc2l6ZV90KXN0YXR1cyA9PSAoc2l6ZV90KS0xKSAmJiAoZXJybm8gPT0gRUlMU0VRKSkKKworI2RlZmluZSBpbml0X21iKHN0YXRlKQltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKQorCisjaWYgTkNVUlNFU19FWFRfQ09MT1JTCisjZGVmaW5lIE51bENvbG9yCSwgMAorI2Vsc2UKKyNkZWZpbmUgTnVsQ29sb3IJLyogbm90aGluZyAqLworI2VuZGlmCisKKyNkZWZpbmUgTnVsQ2hhcgkJMCwwLDAsMAkvKiBGSVhNRTogc2VlIENDSEFSV19NQVggKi8KKyNkZWZpbmUgQ2hhck9mKGMpCSgoYykuY2hhcnNbMF0pCisjZGVmaW5lIEF0dHJPZihjKQkoKGMpLmF0dHIpCisKKyNkZWZpbmUgQWRkQXR0cihjLGEpCUF0dHJPZihjKSB8PSAgKChhKSAmIEFfQVRUUklCVVRFUykKKyNkZWZpbmUgUmVtQXR0cihjLGEpCUF0dHJPZihjKSAmPSB+KChhKSAmIEFfQVRUUklCVVRFUykKKyNkZWZpbmUgU2V0QXR0cihjLGEpCUF0dHJPZihjKSA9ICAgKChhKSAmIEFfQVRUUklCVVRFUykgfCBXaWRlY0V4dChjKQorCisjZGVmaW5lIE5ld0NoYXIyKGMsYSkJeyBhLCB7IGMsIE51bENoYXIgfSBOdWxDb2xvciB9CisjZGVmaW5lIE5ld0NoYXIoY2gpCU5ld0NoYXIyKENoQ2hhck9mKGNoKSwgQ2hBdHRyT2YoY2gpKQorCisjaWYgQ0NIQVJXX01BWCA9PSA1CisjZGVmaW5lIENoYXJFcShhLGIpCSgoKGEpLmF0dHIgPT0gKGIpLmF0dHIpIFwKKwkJICAgICAgICYmIChhKS5jaGFyc1swXSA9PSAoYikuY2hhcnNbMF0gXAorCQkgICAgICAgJiYgKGEpLmNoYXJzWzFdID09IChiKS5jaGFyc1sxXSBcCisJCSAgICAgICAmJiAoYSkuY2hhcnNbMl0gPT0gKGIpLmNoYXJzWzJdIFwKKwkJICAgICAgICYmIChhKS5jaGFyc1szXSA9PSAoYikuY2hhcnNbM10gXAorCQkgICAgICAgJiYgKGEpLmNoYXJzWzRdID09IChiKS5jaGFyc1s0XSBcCisJCQlpZl9FWFRfQ09MT1JTKCYmIChhKS5leHRfY29sb3IgPT0gKGIpLmV4dF9jb2xvcikpCisjZWxzZQorI2RlZmluZSBDaGFyRXEoYSxiKQkoIW1lbWNtcCgmKGEpLCAmKGIpLCBzaXplb2YoYSkpKQorI2VuZGlmCisKKyNkZWZpbmUgU2V0Q2hhcihjaCxjLGEpIGRvIHsJCQkJCQkJICAgIFwKKwkJCSAgICBOQ1VSU0VTX0NIX1QgKl9jcCA9ICZjaDsJCQkJICAgIFwKKwkJCSAgICBtZW1zZXQoX2NwLCAwLCBzaXplb2YoY2gpKTsJCQkJICAgIFwKKwkJCSAgICBfY3AtPmNoYXJzWzBdID0gKGMpOwkJCQkJICAgIFwKKwkJCSAgICBfY3AtPmF0dHIgPSAoYSk7CQkJCQkgICAgXAorCQkJICAgIGlmX0VYVF9DT0xPUlMoU2V0UGFpcihjaCwgUEFJUl9OVU1CRVIoYSkpKTsJCSAgICBcCisJCQl9IHdoaWxlICgwKQorI2RlZmluZSBDSFJFRih3Y2gpCSgmd2NoKQorI2RlZmluZSBDSERFUkVGKHdjaCkJKCp3Y2gpCisjZGVmaW5lIEFSR19DSF9UCU5DVVJTRVNfQ0hfVCAqCisjZGVmaW5lIENBUkdfQ0hfVAljb25zdCBOQ1VSU0VTX0NIX1QgKgorI2RlZmluZSBQVVRDX0RBVEEJY2hhciBQVVRDX2J1ZltNQl9MRU5fTUFYXTsgaW50IFBVVENfaSwgUFVUQ19uOyBcCisJCQltYnN0YXRlX3QgUFVUX3N0OyB3Y2hhcl90IFBVVENfY2gKKyNkZWZpbmUgUFVUQ19JTklUCWluaXRfbWIgKFBVVF9zdCkKKyNkZWZpbmUgUFVUQyhjaCxiKQlkbyB7IGlmKCFpc1dpZGVjRXh0KGNoKSkgewkJCQkgICAgXAorCQkJaWYgKENoYXJhYmxlKGNoKSkgewkJCQkJICAgIFwKKwkJCSAgICBmcHV0YyhDaGFyT2YoY2gpLCBiKTsJCQkJICAgIFwKKwkJCSAgICBDT1VOVF9PVVRDSEFSUygxKTsJCQkJCSAgICBcCisJCQl9IGVsc2UgewkJCQkJCSAgICBcCisJCQkgICAgUFVUQ19JTklUOwkJCQkJCSAgICBcCisJCQkgICAgZm9yIChQVVRDX2kgPSAwOyBQVVRDX2kgPCBDQ0hBUldfTUFYOyArK1BVVENfaSkgewkgICAgXAorCQkJCVBVVENfY2ggPSAoY2gpLmNoYXJzW1BVVENfaV07CQkJICAgIFwKKwkJCQlpZiAoUFVUQ19jaCA9PSBMJ1wwJykJCQkJICAgIFwKKwkJCQkgICAgYnJlYWs7CQkJCQkgICAgXAorCQkJCVBVVENfbiA9IHdjcnRvbWIoUFVUQ19idWYsCQkJICAgIFwKKwkJCQkJCSAoY2gpLmNoYXJzW1BVVENfaV0sICZQVVRfc3QpOwkgICAgXAorCQkJCWlmIChQVVRDX24gPD0gMCkgewkJCQkgICAgXAorCQkJCSAgICBpZiAoUFVUQ19jaCAmJiBpczhiaXRzKFBVVENfY2gpICYmIFBVVENfaSA9PSAwKSBcCisJCQkJCXB1dGMoUFVUQ19jaCxiKTsJCQkgICAgXAorCQkJCSAgICBicmVhazsJCQkJCSAgICBcCisJCQkJfQkJCQkJCSAgICBcCisJCQkJZndyaXRlKFBVVENfYnVmLCAodW5zaWduZWQpIFBVVENfbiwgMSwgYik7CSAgICBcCisJCQkgICAgfQkJCQkJCQkgICAgXAorCQkJICAgIENPVU5UX09VVENIQVJTKFBVVENfaSk7CQkJCSAgICBcCisJCQl9IH0gfSB3aGlsZSAoMCkKKworI2RlZmluZSBCTEFOSwkJTmV3Q2hhcjIoJyAnLCBXQV9OT1JNQUwpCisjZGVmaW5lIFpFUk9TCQlOZXdDaGFyMignXDAnLCBXQV9OT1JNQUwpCisjZGVmaW5lIElTQkxBTksoY2gpCSgoY2gpLmNoYXJzWzBdID09IEwnICcgJiYgKGNoKS5jaGFyc1sxXSA9PSBMJ1wwJykKKworCS8qCisJICogV2lkZSBjaGFyYWN0ZXJzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgQV9DSEFSVEVYVCBtYXNrIG9mCisJICogYXR0cl90J3MgYnV0IGFuIGFwcGxpY2F0aW9uIG1pZ2h0IGhhdmUgc2V0IGEgbmFycm93IGNoYXJhY3RlciB0aGVyZS4KKwkgKiBCdXQgZXZlbiBpbiB0aGF0IGNhc2UsIGl0IHdvdWxkIG9ubHkgYmUgYSBwcmludGFibGUgY2hhcmFjdGVyLCBvcgorCSAqIHplcm8uICBPdGhlcndpc2Ugd2UgY2FuIHVzZSB0aG9zZSBiaXRzIHRvIHRlbGwgaWYgYSBjZWxsIGlzIHRoZQorCSAqIGZpcnN0IG9yIGV4dGVuc2lvbiBwYXJ0IG9mIGEgd2lkZSBjaGFyYWN0ZXIuCisJICovCisjZGVmaW5lIFdpZGVjRXh0KGNoKQkoQXR0ck9mKGNoKSAmIEFfQ0hBUlRFWFQpCisjZGVmaW5lIGlzV2lkZWNCYXNlKGNoKQkoV2lkZWNFeHQoY2gpID09IDEpCisjZGVmaW5lIGlzV2lkZWNFeHQoY2gpCShXaWRlY0V4dChjaCkgPiAxICYmIFdpZGVjRXh0KGNoKSA8IDMyKQorI2RlZmluZSBTZXRXaWRlY0V4dChkc3QsIGV4dCkJQXR0ck9mKGRzdCkgJj0gfkFfQ0hBUlRFWFQsCQlcCisJCQkJQXR0ck9mKGRzdCkgfD0gKGV4dCArIDEpCisKKyNkZWZpbmUgaWZfV0lERUMoY29kZSkgIGNvZGUKKyNkZWZpbmUgQ2hhcmFibGUoY2gpCSgoU1AgIT0gMCAmJiBTUC0+X2xlZ2FjeV9jb2RpbmcpCQlcCisJCQkgfHwgKEF0dHJPZihjaCkgJiBBX0FMVENIQVJTRVQpCQkJXAorCQkJIHx8ICghaXNXaWRlY0V4dChjaCkgJiYJCQkJXAorCQkJICAgICAoY2gpLmNoYXJzWzFdID09IEwnXDAnICYmCQkJXAorCQkJICAgICBfbmNfaXNfY2hhcmFibGUoQ2hhck9mKGNoKSkpKQorCisjZGVmaW5lIEwoY2gpCQlMICMjIGNoCisjZWxzZSAvKiB9eyAqLworI2RlZmluZSBDaGFyT2YoYykJQ2hDaGFyT2YoYykKKyNkZWZpbmUgQXR0ck9mKGMpCUNoQXR0ck9mKGMpCisjZGVmaW5lIEFkZEF0dHIoYyxhKQljIHw9IChhKQorI2RlZmluZSBSZW1BdHRyKGMsYSkJYyAmPSB+KChhKSAmIEFfQVRUUklCVVRFUykKKyNkZWZpbmUgU2V0QXR0cihjLGEpCWMgPSAoKGMpICYgfkFfQVRUUklCVVRFUykgfCAoYSkKKyNkZWZpbmUgTmV3Q2hhcihjaCkJKGNoKQorI2RlZmluZSBOZXdDaGFyMihjLGEpCSgoYykgfCAoYSkpCisjZGVmaW5lIENoYXJFcShhLGIpCSgoYSkgPT0gKGIpKQorI2RlZmluZSBTZXRDaGFyKGNoLGMsYSkJY2ggPSAoYykgfCAoYSkKKyNkZWZpbmUgQ0hSRUYod2NoKQl3Y2gKKyNkZWZpbmUgQ0hERVJFRih3Y2gpCXdjaAorI2RlZmluZSBBUkdfQ0hfVAlOQ1VSU0VTX0NIX1QKKyNkZWZpbmUgQ0FSR19DSF9UCU5DVVJTRVNfQ0hfVAorI2RlZmluZSBQVVRDX0RBVEEJaW50IGRhdGEgPSAwCisjZGVmaW5lIFBVVEMoY2gsYikJZG8geyBkYXRhID0gQ2hhck9mKGNoKTsgcHV0YyhkYXRhLGIpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEJMQU5LCQkoJyAnfEFfTk9STUFMKQorI2RlZmluZSBaRVJPUwkJKCdcMCd8QV9OT1JNQUwpCisjZGVmaW5lIElTQkxBTksoY2gpCShDaGFyT2YoY2gpID09ICcgJykKKworI2RlZmluZSBpc1dpZGVjRXh0KGNoKQkoMCkKKyNkZWZpbmUgaWZfV0lERUMoY29kZSkgLyogbm90aGluZyAqLworCisjZGVmaW5lIEwoY2gpCQljaAorI2VuZGlmIC8qIH0gKi8KKworI2RlZmluZSBBdHRyT2ZEKGNoKQlBdHRyT2YoQ0hERVJFRihjaCkpCisjZGVmaW5lIENoYXJPZkQoY2gpCUNoYXJPZihDSERFUkVGKGNoKSkKKyNkZWZpbmUgU2V0Q2hhcjIod2NoLGNoKSAgICBTZXRDaGFyKHdjaCxDaENoYXJPZihjaCksQ2hBdHRyT2YoY2gpKQorCisjZGVmaW5lIEJMQU5LX0FUVFIJQV9OT1JNQUwKKyNkZWZpbmUgQkxBTktfVEVYVAlMKCcgJykKKworI2RlZmluZSBDSEFOR0VEICAgICAtMQorCisjZGVmaW5lIExFR0FMWVgodywgeSwgeCkgXAorCSAgICAgICgodykgIT0gMCAmJiBcCisJCSgoeCkgPj0gMCAmJiAoeCkgPD0gKHcpLT5fbWF4eCAmJiBcCisJCSAoeSkgPj0gMCAmJiAoeSkgPD0gKHcpLT5fbWF4eSkpCisKKyNkZWZpbmUgQ0hBTkdFRF9DRUxMKGxpbmUsY29sKSBcCisJaWYgKGxpbmUtPmZpcnN0Y2hhciA9PSBfTk9DSEFOR0UpIFwKKwkJbGluZS0+Zmlyc3RjaGFyID0gbGluZS0+bGFzdGNoYXIgPSBjb2w7IFwKKwllbHNlIGlmICgoY29sKSA8IGxpbmUtPmZpcnN0Y2hhcikgXAorCQlsaW5lLT5maXJzdGNoYXIgPSBjb2w7IFwKKwllbHNlIGlmICgoY29sKSA+IGxpbmUtPmxhc3RjaGFyKSBcCisJCWxpbmUtPmxhc3RjaGFyID0gY29sCisKKyNkZWZpbmUgQ0hBTkdFRF9SQU5HRShsaW5lLHN0YXJ0LGVuZCkgXAorCWlmIChsaW5lLT5maXJzdGNoYXIgPT0gX05PQ0hBTkdFIFwKKwkgfHwgbGluZS0+Zmlyc3RjaGFyID4gKHN0YXJ0KSkgXAorCQlsaW5lLT5maXJzdGNoYXIgPSBzdGFydDsgXAorCWlmIChsaW5lLT5sYXN0Y2hhciA9PSBfTk9DSEFOR0UgXAorCSB8fCBsaW5lLT5sYXN0Y2hhciA8IChlbmQpKSBcCisJCWxpbmUtPmxhc3RjaGFyID0gZW5kCisKKyNkZWZpbmUgQ0hBTkdFRF9UT19FT0wobGluZSxzdGFydCxlbmQpIFwKKwlpZiAobGluZS0+Zmlyc3RjaGFyID09IF9OT0NIQU5HRSBcCisJIHx8IGxpbmUtPmZpcnN0Y2hhciA+IChzdGFydCkpIFwKKwkJbGluZS0+Zmlyc3RjaGFyID0gc3RhcnQ7IFwKKwlsaW5lLT5sYXN0Y2hhciA9IGVuZAorCisjZGVmaW5lIFNJWkVPRih2KSAoc2l6ZW9mKHYpL3NpemVvZih2WzBdKSkKKworI2RlZmluZSBGcmVlSWZOZWVkZWQocCkgIGlmICgocCkgIT0gMCkgZnJlZShwKQorCisvKiBGcmVlQW5kTnVsbCgpIGlzIG5vdCBhIGNvbW1hLXNlcGFyYXRlZCBleHByZXNzaW9uIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAqIGRvIG5vdCBhY2NlcHQgYSBtaXh0dXJlIG9mIHZvaWQgd2l0aCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgRnJlZUFuZE51bGwocCkgICBmcmVlKHApOyBwID0gMAorCisjaW5jbHVkZSA8bmNfYWxsb2MuaD4KKworLyoKKyAqIFRUWSBiaXQgZGVmaW5pdGlvbiBmb3IgY29udmVydGluZyB0YWJzIHRvIHNwYWNlcy4KKyAqLworI2lmZGVmIFRBQjMKKyMgZGVmaW5lIE9GTEFHU19UQUJTIFRBQjMJLyogUE9TSVggc3BlY2lmaWVzIFRBQjMgKi8KKyNlbHNlCisjIGlmZGVmIFhUQUJTCisjICBkZWZpbmUgT0ZMQUdTX1RBQlMgWFRBQlMJLyogWFRBQlMgaXMgdXN1YWxseSB0aGUgInNhbWUiICovCisjIGVsc2UKKyMgIGlmZGVmIE9YVEFCUworIyAgIGRlZmluZSBPRkxBR1NfVEFCUyBPWFRBQlMJLyogdGhlIHRyYWRpdGlvbmFsIEJTRCBlcXVpdmFsZW50ICovCisjICBlbHNlCisjICAgZGVmaW5lIE9GTEFHU19UQUJTIDAKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFN0YW5kYXJkaXplL3NpbXBsaWZ5IGNvbW1vbiBsb29wcworICovCisjZGVmaW5lIGVhY2hfc2NyZWVuKHApIHAgPSBfbmNfc2NyZWVuX2NoYWluOyBwICE9IDA7IHAgPSAocCktPl9uZXh0X3NjcmVlbgorI2RlZmluZSBlYWNoX3dpbmRvdyhwKSBwID0gX25jX3dpbmRvd3M7IHAgIT0gMDsgcCA9IChwKS0+bmV4dAorI2RlZmluZSBlYWNoX3JpcG9mZihwKSBwID0gcmlwb2ZmX3N0YWNrOyAocCAtIHJpcG9mZl9zdGFjaykgPCBOX1JJUFM7ICsrcAorCisvKgorICogUHJlZml4ZXMgZm9yIGNhbGwvcmV0dXJuIHBvaW50cyBvZiBsaWJyYXJ5IGZ1bmN0aW9uIHRyYWNlcy4gIFdlIHVzZSB0aGVzZSB0bworICogaW5zdHJ1bWVudCB0aGUgcHVibGljIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZSB0cmFjZXMgY2FuIGJlIGVhc2lseSB0cmFuc2Zvcm1lZAorICogaW50byByZWdyZXNzaW9uIHNjcmlwdHMuCisgKi8KKyNkZWZpbmUgVF9DQUxMRUQoZm10KSAiY2FsbGVkIHsiIGZtdAorI2RlZmluZSBUX0NSRUFURShmbXQpICJjcmVhdGUgOiIgZm10CisjZGVmaW5lIFRfUkVUVVJOKGZtdCkgInJldHVybiB9IiBmbXQKKworI2lmZGVmIFRSQUNFCisKKyNpZiBVU0VfUkVFTlRSQU5UCisjZGVmaW5lIFRQVVRTX1RSQUNFKHMpCV9uY19zZXRfdHB1dHNfdHJhY2Uocyk7CisjZWxzZQorI2RlZmluZSBUUFVUU19UUkFDRShzKQlfbmNfdHB1dHNfdHJhY2UgPSBzOworI2VuZGlmCisKKyNkZWZpbmUgU1RBUlRfVFJBQ0UoKSBcCisJaWYgKChfbmNfdHJhY2luZyAmIFRSQUNFX01BWElNVU0pID09IDApIHsgXAorCSAgICBpbnQgdCA9IF9uY19nZXRlbnZfbnVtKCJOQ1VSU0VTX1RSQUNFIik7IFwKKwkgICAgaWYgKHQgPj0gMCkgXAorCQl0cmFjZSgodW5zaWduZWQpIHQpOyBcCisJfQorCisvKgorICogTWFueSBvZiB0aGUgX3RyYWNlZigpIGNhbGxzIHVzZSBzdGF0aWMgYnVmZmVyczsgbG9jayB0aGUgdHJhY2Ugc3RhdGUgYmVmb3JlCisgKiB0cnlpbmcgdG8gZmlsbCB0aGVtLgorICovCisjaWYgVVNFX1JFRU5UUkFOVAorI2RlZmluZSBVU0VfVFJBQ0VGKG1hc2spIF9uY191c2VfdHJhY2VmKG1hc2spCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KQlfbmNfdXNlX3RyYWNlZiAodW5zaWduZWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpCV9uY19sb2NrZWRfdHJhY2VmIChjb25zdCBjaGFyICosIC4uLikgR0NDX1BSSU5URkxJS0UoMSwyKTsKKyNlbHNlCisjZGVmaW5lIFVTRV9UUkFDRUYobWFzaykgKF9uY190cmFjaW5nICYgKG1hc2spKQorI2RlZmluZSBfbmNfbG9ja2VkX3RyYWNlZiBfdHJhY2VmCisjZW5kaWYKKworI2RlZmluZSBUUihuLCBhKQlpZiAoVVNFX1RSQUNFRihuKSkgX25jX2xvY2tlZF90cmFjZWYgYQorI2RlZmluZSBUKGEpCQlUUihUUkFDRV9DQUxMUywgYSkKKyNkZWZpbmUgVFJBQ0VfUkVUVVJOKHZhbHVlLHR5cGUpIHJldHVybiBfbmNfcmV0cmFjZV8jI3R5cGUodmFsdWUpCisKKyNkZWZpbmUgcmV0dXJuQXR0cihjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxhdHRyX3QpCisjZGVmaW5lIHJldHVybkJpdHMoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsdW5zaWduZWQpCisjZGVmaW5lIHJldHVybkJvb2woY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsYm9vbCkKKyNkZWZpbmUgcmV0dXJuQ1B0cihjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxjcHRyKQorI2RlZmluZSByZXR1cm5DVm9pZFB0cihjb2RlKQlUUkFDRV9SRVRVUk4oY29kZSxjdm9pZF9wdHIpCisjZGVmaW5lIHJldHVybkNoYXIoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUsY2h0eXBlKQorI2RlZmluZSByZXR1cm5Db2RlKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLGludCkKKyNkZWZpbmUgcmV0dXJuUHRyKGNvZGUpCQlUUkFDRV9SRVRVUk4oY29kZSxwdHIpCisjZGVmaW5lIHJldHVyblNQKGNvZGUpCQlUUkFDRV9SRVRVUk4oY29kZSxzcCkKKyNkZWZpbmUgcmV0dXJuVm9pZAkJVCgoVF9SRVRVUk4oIiIpKSk7IHJldHVybgorI2RlZmluZSByZXR1cm5Wb2lkUHRyKGNvZGUpCVRSQUNFX1JFVFVSTihjb2RlLHZvaWRfcHRyKQorI2RlZmluZSByZXR1cm5XaW4oY29kZSkJCVRSQUNFX1JFVFVSTihjb2RlLHdpbikKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQk9PTCkgICAgIF9uY19yZXRyYWNlX2Jvb2wgKE5DVVJTRVNfQk9PTCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoTkNVUlNFU19DT05TVCB2b2lkICopIF9uY19yZXRyYWNlX2N2b2lkX3B0ciAoTkNVUlNFU19DT05TVCB2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFNDUkVFTiAqKSAgICAgICAgIF9uY19yZXRyYWNlX3NwIChTQ1JFRU4gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoV0lORE9XICopICAgICAgICAgX25jX3JldHJhY2Vfd2luIChXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYXR0cl90KSAgICAgICAgICAgX25jX3JldHJhY2VfYXR0cl90IChhdHRyX3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgICAgICAgICAgIF9uY19yZXRyYWNlX3B0ciAoY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopICAgICAgICAgICBfbmNfdHJhY2VfdHR5bW9kZShUVFkgKnR0eSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSAgICAgICAgICAgX25jX3ZhcmFyZ3MgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2h0eXBlKSAgICAgICAgICAgX25jX3JldHJhY2VfY2h0eXBlIChjaHR5cGUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgICAgIF9uY19hbHRjaGFyc2V0X25hbWUoYXR0cl90LCBjaHR5cGUpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgICAgIF9uY19yZXRyYWNlX2NwdHIgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgICAgICAgICAgX25jX3JldHJhY2VfaW50IChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHVuc2lnbmVkKSAgICAgICAgIF9uY19yZXRyYWNlX3Vuc2lnbmVkICh1bnNpZ25lZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCAqKSAgICAgICAgICAgX25jX3JldHJhY2Vfdm9pZF9wdHIgKHZvaWQgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgICAgICAgICAgICAgX25jX2ZpZm9fZHVtcCAoU0NSRUVOICopOworCisjaWYgVVNFX1JFRU5UUkFOVAorTkNVUlNFU19XUkFQUEVEX1ZBUihsb25nLCBfbmNfb3V0Y2hhcnMpOworTkNVUlNFU19XUkFQUEVEX1ZBUihjb25zdCBjaGFyICosIF9uY190cHV0c190cmFjZSk7CisjZGVmaW5lIF9uY19vdXRjaGFycyAgICAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoX25jX291dGNoYXJzKCkpCisjZGVmaW5lIF9uY190cHV0c190cmFjZSAgICBOQ1VSU0VTX1BVQkxJQ19WQVIoX25jX3RwdXRzX3RyYWNlKCkpCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkJCV9uY19zZXRfdHB1dHNfdHJhY2UgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkJCV9uY19jb3VudF9vdXRjaGFycyAobG9uZyk7CisjZWxzZQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihjb25zdCBjaGFyICopIF9uY190cHV0c190cmFjZTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIobG9uZykgICAgICAgICBfbmNfb3V0Y2hhcnM7CisjZW5kaWYKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUih1bnNpZ25lZCkgICAgIF9uY190cmFjaW5nOworCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXN3YnVmMiAoaW50LCBjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc3didWZuIChjb25zdCB3Y2hhcl90ICosIGludCk7CisjZW5kaWYKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc2NidWYyIChpbnQsIGNvbnN0IE5DVVJTRVNfQ0hfVCAqLCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc2NidWYgKGNvbnN0IE5DVVJTRVNfQ0hfVCAqLCBpbnQpOworCisjZWxzZSAvKiAhVFJBQ0UgKi8KKworI2RlZmluZSBTVEFSVF9UUkFDRSgpIC8qIG5vdGhpbmcgKi8KKworI2RlZmluZSBUKGEpCisjZGVmaW5lIFRSKG4sIGEpCisjZGVmaW5lIFRQVVRTX1RSQUNFKHMpCisKKyNkZWZpbmUgcmV0dXJuQXR0cihjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5CaXRzKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkJvb2woY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuQ1B0cihjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5DVm9pZFB0cihjb2RlKQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5DaGFyKGNvZGUpCXJldHVybiBjb2RlCisjZGVmaW5lIHJldHVybkNvZGUoY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuUHRyKGNvZGUpCQlyZXR1cm4gY29kZQorI2RlZmluZSByZXR1cm5TUChjb2RlKQkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuVm9pZAkJcmV0dXJuCisjZGVmaW5lIHJldHVyblZvaWRQdHIoY29kZSkJcmV0dXJuIGNvZGUKKyNkZWZpbmUgcmV0dXJuV2luKGNvZGUpCQlyZXR1cm4gY29kZQorCisjZW5kaWYgLyogVFJBQ0UvIVRSQUNFICovCisKKy8qCisgKiBSZXR1cm4tY29kZXMgZm9yIHRnZXRlbnQoKSBhbmQgZnJpZW5kcy4KKyAqLworI2RlZmluZSBUR0VURU5UX1lFUyAgMQkJLyogZW50cnkgaXMgZm91bmQgKi8KKyNkZWZpbmUgVEdFVEVOVF9OTyAgIDAJCS8qIGVudHJ5IGlzIG5vdCBmb3VuZCAqLworI2RlZmluZSBUR0VURU5UX0VSUiAtMQkJLyogYW4gZXJyb3Igb2NjdXJyZWQgKi8KKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikgX25jX3Zpc2J1ZjIgKGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopIF9uY192aXNidWZuIChjb25zdCBjaGFyICosIGludCk7CisKKyNkZWZpbmUgRU1QVFlfTU9EVUxFKG5hbWUpIFwKK2V4dGVybglOQ1VSU0VTX0VYUE9SVCh2b2lkKSBuYW1lICh2b2lkKTsgXAorCU5DVVJTRVNfRVhQT1JUKHZvaWQpIG5hbWUgKHZvaWQpIHsgfQorCisjZGVmaW5lIEFMTF9CVVRfQ09MT1IgKChjaHR5cGUpfihBX0NPTE9SKSkKKyNkZWZpbmUgTk9OQkxBTktfQVRUUiAoQV9OT1JNQUx8QV9CT0xEfEFfRElNfEFfQkxJTkspCisjZGVmaW5lIFhNQ19DSEFOR0VTKGMpICgoYykgJiBTUC0+X3htY19zdXBwcmVzcykKKworI2RlZmluZSB0b2dnbGVfYXR0cl9vbihTLGF0KSB7XAorICAgaWYgKFBBSVJfTlVNQkVSKGF0KSA+IDApIHtcCisgICAgICAoUykgPSAoKFMpICYgQUxMX0JVVF9DT0xPUikgfCAoYXQpO1wKKyAgIH0gZWxzZSB7XAorICAgICAgKFMpIHw9IChhdCk7XAorICAgfVwKKyAgIFRSKFRSQUNFX0FUVFJTLCAoIm5ldyBhdHRyaWJ1dGUgaXMgJXMiLCBfdHJhY2VhdHRyKChTKSkpKTt9CisKKworI2RlZmluZSB0b2dnbGVfYXR0cl9vZmYoUyxhdCkge1wKKyAgIGlmIChQQUlSX05VTUJFUihhdCkgPiAwKSB7XAorICAgICAgKFMpICY9IH4oYXR8QV9DT0xPUik7XAorICAgfSBlbHNlIHtcCisgICAgICAoUykgJj0gfihhdCk7XAorICAgfVwKKyAgIFRSKFRSQUNFX0FUVFJTLCAoIm5ldyBhdHRyaWJ1dGUgaXMgJXMiLCBfdHJhY2VhdHRyKChTKSkpKTt9CisKKyNkZWZpbmUgRGVsQ2hhckNvc3QoY291bnQpIFwKKwkJKChwYXJtX2RjaCAhPSAwKSBcCisJCT8gU1AtPl9kY2hfY29zdCBcCisJCTogKChkZWxldGVfY2hhcmFjdGVyICE9IDApIFwKKwkJCT8gKFNQLT5fZGNoMV9jb3N0ICogY291bnQpIFwKKwkJCTogSU5GSU5JVFkpKQorCisjZGVmaW5lIEluc0NoYXJDb3N0KGNvdW50KSBcCisJCSgocGFybV9pY2ggIT0gMCkgXAorCQk/IFNQLT5faWNoX2Nvc3QgXAorCQk6ICgoZW50ZXJfaW5zZXJ0X21vZGUgJiYgZXhpdF9pbnNlcnRfbW9kZSkgXAorCQkgID8gU1AtPl9zbWlyX2Nvc3QgKyBTUC0+X3JtaXJfY29zdCArIChTUC0+X2lwX2Nvc3QgKiBjb3VudCkgXAorCQkgIDogKChpbnNlcnRfY2hhcmFjdGVyICE9IDApIFwKKwkJICAgID8gKChTUC0+X2ljaDFfY29zdCArIFNQLT5faXBfY29zdCkgKiBjb3VudCkgXAorCQkgICAgOiBJTkZJTklUWSkpKQorCisjaWYgVVNFX1hNQ19TVVBQT1JUCisjZGVmaW5lIFVwZGF0ZUF0dHJzKGMpCWlmICghU2FtZUF0dHJPZihTQ1JFRU5fQVRUUlMoU1ApLCBjKSkgeyBcCisJCQkJYXR0cl90IGNoZyA9IEF0dHJPZihTQ1JFRU5fQVRUUlMoU1ApKTsgXAorCQkJCVZJREFUVFIoQXR0ck9mKGMpLCBHZXRQYWlyKGMpKTsgXAorCQkJCWlmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCBcCisJCQkJICYmIFhNQ19DSEFOR0VTKChjaGcgXiBBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSkpKSkgeyBcCisJCQkJCVQoKCIlcyBAJWQgYmVmb3JlIGdsaXRjaCAlZCwlZCIsIFwKKwkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgXAorCQkJCQkJU1AtPl9jdXJzcm93LCBcCisJCQkJCQlTUC0+X2N1cnNjb2wpKTsgXAorCQkJCQlfbmNfZG9feG1jX2dsaXRjaChjaGcpOyBcCisJCQkJfSBcCisJCQl9CisjZWxzZQorI2RlZmluZSBVcGRhdGVBdHRycyhjKQlpZiAoIVNhbWVBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSwgYykpIFwKKwkJCQlWSURBVFRSKEF0dHJPZihjKSwgR2V0UGFpcihjKSk7CisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyB0byBtYWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHRvIGltcGxlbWVudCB3Z2V0Y2hfZXZlbnRzKCkKKyAqLworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworI2RlZmluZSBFVkVOVExJU1RfMHRoKHBhcmFtKSBwYXJhbQorI2RlZmluZSBFVkVOVExJU1RfMXN0KHBhcmFtKSBwYXJhbQorI2RlZmluZSBFVkVOVExJU1RfMm5kKHBhcmFtKSAsIHBhcmFtCisjZWxzZQorI2RlZmluZSBFVkVOVExJU1RfMHRoKHBhcmFtKSB2b2lkCisjZGVmaW5lIEVWRU5UTElTVF8xc3QocGFyYW0pIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgRVZFTlRMSVNUXzJuZChwYXJhbSkgLyogbm90aGluZyAqLworI2VuZGlmCisKKyNpZiBOQ1VSU0VTX0VYUEFOREVEICYmIE5DVVJTRVNfRVhUX0ZVTkNTCisKKyN1bmRlZiAgdG9nZ2xlX2F0dHJfb24KKyNkZWZpbmUgdG9nZ2xlX2F0dHJfb24oUyxhdCkgX25jX3RvZ2dsZV9hdHRyX29uKCYoUyksIGF0KQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190b2dnbGVfYXR0cl9vbiAoYXR0cl90ICosIGF0dHJfdCk7CisKKyN1bmRlZiAgdG9nZ2xlX2F0dHJfb2ZmCisjZGVmaW5lIHRvZ2dsZV9hdHRyX29mZihTLGF0KSBfbmNfdG9nZ2xlX2F0dHJfb2ZmKCYoUyksIGF0KQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190b2dnbGVfYXR0cl9vZmYgKGF0dHJfdCAqLCBhdHRyX3QpOworCisjdW5kZWYgIERlbENoYXJDb3N0CisjZGVmaW5lIERlbENoYXJDb3N0KGNvdW50KSBfbmNfRGVsQ2hhckNvc3QoY291bnQpCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfRGVsQ2hhckNvc3QgKGludCk7CisKKyN1bmRlZiAgSW5zQ2hhckNvc3QKKyNkZWZpbmUgSW5zQ2hhckNvc3QoY291bnQpIF9uY19JbnNDaGFyQ29zdChjb3VudCkKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19JbnNDaGFyQ29zdCAoaW50KTsKKworI3VuZGVmICBVcGRhdGVBdHRycworI2RlZmluZSBVcGRhdGVBdHRycyhjKSBfbmNfVXBkYXRlQXR0cnMoYykKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfVXBkYXRlQXR0cnMgKE5DVVJTRVNfQ0hfVCk7CisKKyNlbHNlCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZXhwYW5kZWQgKHZvaWQpOworCisjZW5kaWYKKworI2lmICFOQ1VSU0VTX0VYVF9GVU5DUworI2RlZmluZSBzZXRfZXNjZGVsYXkodmFsdWUpIEVTQ0RFTEFZID0gdmFsdWUKKyNlbmRpZgorCisjaWYgIUhBVkVfR0VUQ1dECisjZGVmaW5lIGdldGN3ZChidWYsbGVuKSBnZXR3ZChidWYpCisjZW5kaWYKKworLyogY2hhcmFibGUuYyAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX2lzX2NoYXJhYmxlKHdjaGFyX3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3RvX2NoYXIod2ludF90KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh3aW50X3QpIF9uY190b193aWRlY2hhcihpbnQpOworI2VuZGlmCisKKy8qIGNvbXBfY2FwdGFiLmMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzaG9ydAludGVfbmFtZTsJLyogb2Zmc2V0IG9mIG5hbWUgdG8gaGFzaCBvbiAqLworCWludAludGVfdHlwZTsJLyogQk9PTEVBTiwgTlVNQkVSIG9yIFNUUklORyAqLworCXNob3J0CW50ZV9pbmRleDsJLyogaW5kZXggb2YgYXNzb2NpYXRlZCB2YXJpYWJsZSBpbiBpdHMgYXJyYXkgKi8KKwlzaG9ydAludGVfbGluazsJLyogaW5kZXggaW4gdGFibGUgb2YgbmV4dCBoYXNoLCBvciAtMSAqLworfSBuYW1lX3RhYmxlX2RhdGE7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJc2hvcnQJZnJvbTsKKwlzaG9ydAl0bzsKKwlzaG9ydAlzb3VyY2U7Cit9IGFsaWFzX3RhYmxlX2RhdGE7CisKKy8qIGRvdXBkYXRlLmMgKi8KKyNpZiBVU0VfWE1DX1NVUFBPUlQKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZG9feG1jX2dsaXRjaCAoYXR0cl90KTsKKyNlbmRpZgorCisvKiBoYXJkc2Nyb2xsLmMgKi8KKyNpZiBkZWZpbmVkKFRSQUNFKSB8fCBkZWZpbmVkKFNDUk9MTERFQlVHKSB8fCBkZWZpbmVkKEhBU0hERUJVRykKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbGluZWR1bXAgKHZvaWQpOworI2VuZGlmCisKKy8qIGxpYl9hY3MuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19pbml0X2FjcyAodm9pZCk7CS8qIGNvcnJlc3BvbmRzIHRvIHRyYWRpdGlvbmFsICdpbml0X2FjcygpJyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX21zZWNfY29zdCAoY29uc3QgY2hhciAqY29uc3QsIGludCk7ICAvKiB1c2VkIGJ5ICd0YWNrJyBwcm9ncmFtICovCisKKy8qIGxpYl9hZGRjaC5jICovCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK05DVVJTRVNfRVhQT1JUKGludCkgX25jX2J1aWxkX3djaChXSU5ET1cgKndpbiwgQVJHX0NIX1QgY2gpOworI2VuZGlmCisKKy8qIGxpYl9hZGRzdHIuYyAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUICYmICFkZWZpbmVkKFVTRV9URVJNTElCKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3djaHN0cmxlbihjb25zdCBjY2hhcl90ICopOworI2VuZGlmCisKKy8qIGxpYl9jb2xvci5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3Jlc2V0X2NvbG9ycyh2b2lkKTsKKworLyogbGliX2dldGNoLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY193Z2V0Y2goV0lORE9XICosIHVuc2lnbmVkIGxvbmcgKiwgaW50IEVWRU5UTElTVF8ybmQoX25jX2V2ZW50bGlzdCAqKSk7CisKKy8qIGxpYl9pbnNjaC5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfaW5zZXJ0X2NoKFdJTkRPVyAqLCBjaHR5cGUpOworCisvKiBsaWJfbXZjdXIuYyAqLworI2RlZmluZSBJTkZJTklUWQkxMDAwMDAwCS8qIGNvc3Q6IHRvbyBoaWdoIHRvIHVzZSAqLworCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX212Y3VyX2luaXQgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19tdmN1cl9yZXN1bWUgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19tdmN1cl93cmFwICh2b2lkKTsKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3Njcm9sbG4gKGludCwgaW50LCBpbnQsIGludCk7CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc2NyZWVuX2luaXQgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zY3JlZW5fcmVzdW1lICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc2NyZWVuX3dyYXAgKHZvaWQpOworCisvKiBsaWJfbW91c2UuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX2hhc19tb3VzZSAodm9pZCk7CisKKy8qIGxpYl9tdmN1ci5jICovCisjZGVmaW5lIElORklOSVRZCTEwMDAwMDAJLyogY29zdDogdG9vIGhpZ2ggdG8gdXNlICovCisjZGVmaW5lIEJBVURCWVRFCTkJLyogOSA9IDcgYml0cyArIDEgcGFyaXR5ICsgMSBzdG9wICovCisKKy8qIGxpYl9zZXR1cC5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfZ2V0X2xvY2FsZSh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY191bmljb2RlX2xvY2FsZSh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19sb2NhbGVfYnJlYWtzX2FjcyhURVJNSU5BTCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19zZXR1cHRlcm0oTkNVUlNFU19DT05TVCBjaGFyICosIGludCwgaW50ICosIGJvb2wpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19nZXRfc2NyZWVuc2l6ZShTQ1JFRU4gKiwgaW50ICosIGludCAqKTsKKworLyogbGliX3RzdHAuYyAqLworI2lmIFVTRV9TSUdXSU5DSAorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX2hhbmRsZV9zaWd3aW5jaChTQ1JFRU4gKik7CisjZWxzZQorI2RlZmluZSBfbmNfaGFuZGxlX3NpZ3dpbmNoKGEpIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisvKiBsaWJfdW5nZXRjaC5jICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfdW5nZXRjaCAoU0NSRUVOICosIGludCk7CisKKy8qIGxpYl93YWNzLmMgKi8KKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19pbml0X3dhY3Modm9pZCk7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgKnNfaGVhZDsJLyogYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgKG1heSBiZSBudWxsKSAqLworICAgIGNoYXIgKnNfdGFpbDsJLyogZW5kIG9mIHRoZSBzdHJpbmcgKG1heSBiZSBudWxsKSAqLworICAgIHNpemVfdCBzX3NpemU7CS8qIGN1cnJlbnQgcmVtYWluaW5nIHNpemUgYXZhaWxhYmxlICovCisgICAgc2l6ZV90IHNfaW5pdDsJLyogdG90YWwgc2l6ZSBhdmFpbGFibGUgKi8KK30gc3RyaW5nX2Rlc2M7CisKKy8qIHN0cmluZ3MuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHN0cmluZ19kZXNjICopIF9uY19zdHJfaW5pdCAoc3RyaW5nX2Rlc2MgKiwgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHN0cmluZ19kZXNjICopIF9uY19zdHJfbnVsbCAoc3RyaW5nX2Rlc2MgKiwgc2l6ZV90KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChzdHJpbmdfZGVzYyAqKSBfbmNfc3RyX2NvcHkgKHN0cmluZ19kZXNjICosIHN0cmluZ19kZXNjICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19zYWZlX3N0cmNhdCAoc3RyaW5nX2Rlc2MgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfc2FmZV9zdHJjcHkgKHN0cmluZ19kZXNjICosIGNvbnN0IGNoYXIgKik7CisKKyNpZiAhSEFWRV9TVFJTVFIKKyNkZWZpbmUgc3Ryc3RyIF9uY19zdHJzdHIKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChjaGFyICopIF9uY19zdHJzdHIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisvKiBzYWZlX3NwcmludGYuYyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3ByaW50Zl9zdHJpbmcgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKy8qIHRyaWVzLmMgKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19hZGRfdG9fdHJ5IChUUklFUyAqKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfZXhwYW5kX3RyeSAoVFJJRVMgKiwgdW5zaWduZWQsIGludCAqLCBzaXplX3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3JlbW92ZV9rZXkgKFRSSUVTICoqLCB1bnNpZ25lZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmVtb3ZlX3N0cmluZyAoVFJJRVMgKiosIGNvbnN0IGNoYXIgKik7CisKKy8qIGVsc2V3aGVyZSAuLi4gKi8KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChFTlRSWSAqKSBfbmNfZGVsaW5rX2VudHJ5IChFTlRSWSAqLCBURVJNVFlQRSAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgX25jX2tleW5hbWUgKFNDUkVFTiAqLCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1QgY2hhciAqKSBfbmNfdW5jdHJsIChTQ1JFRU4gKiwgY2h0eXBlKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikgX25jX3NjcmVlbl9vZiAoV0lORE9XICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKSBfbmNfbWFrZW5ldyAoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3RyYWNlX2J1ZiAoaW50LCBzaXplX3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3RyYWNlX2J1ZmNhdCAoaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGNoYXIgKikgX25jX3RyYWNlY2hhciAoU0NSRUVOICosIGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoY2hhciAqKSBfbmNfdHJhY2Vtb3VzZSAoU0NSRUVOICosIE1FVkVOVCBjb25zdCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19hY2Nlc3MgKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19iYXVkcmF0ZSAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19mcmVld2luIChXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfZ2V0ZW52X251bSAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19rZXlwYWQgKFNDUkVFTiAqLCBib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19vc3BlZWQgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfb3V0Y2ggKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSBfbmNfcmVhZF90ZXJtY2FwX2VudHJ5IChjb25zdCBjaGFyICpjb25zdCwgVEVSTVRZUEUgKmNvbnN0KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19zZXR1cHNjcmVlbiAoaW50LCBpbnQsIEZJTEUgKiwgYm9vbCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY190aW1lZF93YWl0IChTQ1JFRU4gKiwgaW50LCBpbnQsIGludCAqIEVWRU5UTElTVF8ybmQoX25jX2V2ZW50bGlzdCAqKSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2RvX2NvbG9yIChzaG9ydCwgc2hvcnQsIGJvb2wsIGludCAoKikoaW50KSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZsdXNoICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZnJlZV9hbmRfZXhpdCAoaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfZnJlZV9lbnRyeSAoRU5UUlkgKiwgVEVSTVRZUEUgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2ZyZWVhbGwgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19oYXNoX21hcCAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2luaXRfa2V5dHJ5IChTQ1JFRU4gKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2tlZXBfdGljX2RpciAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfbWFrZV9vbGRoYXNoIChpbnQgaSk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3Njcm9sbF9vbGRoYXNoIChpbnQgbiwgaW50IHRvcCwgaW50IGJvdCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3Njcm9sbF9vcHRpbWl6ZSAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NldF9idWZmZXIgKEZJTEUgKiwgYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NpZ25hbF9oYW5kbGVyIChib29sKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfc3luY2hvb2sgKFdJTkRPVyAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdHJhY2VfdHJpZXMgKFRSSUVTICopOworCisjaWYgTk9fTEVBS1MKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfYWxsb2NfZW50cnlfbGVha3Modm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2NhcHRvaW5mb19sZWFrcyh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfY29kZXNfbGVha3Modm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2NvbXBfY2FwdGFiX2xlYWtzKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19jb21wX3NjYW5fbGVha3Modm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2tleW5hbWVfbGVha3Modm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX25hbWVzX2xlYWtzKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190Z2V0ZW50X2xlYWtzKHZvaWQpOworI2VuZGlmCisKKyNpZm5kZWYgVVNFX1RFUk1MSUIKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NIX1QpIF9uY19yZW5kZXIgKFdJTkRPVyAqLCBOQ1VSU0VTX0NIX1QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3dhZGRjaF9ub3N5bmMgKFdJTkRPVyAqLCBjb25zdCBOQ1VSU0VTX0NIX1QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19zY3JvbGxfd2luZG93IChXSU5ET1cgKiwgaW50IGNvbnN0LCBOQ1VSU0VTX1NJWkVfVCBjb25zdCwgTkNVUlNFU19TSVpFX1QgY29uc3QsIE5DVVJTRVNfQ0hfVCk7CisjZW5kaWYKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUICYmICFkZWZpbmVkKFVTRV9URVJNTElCKQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHNpemVfdCkgX25jX3djcnRvbWIgKGNoYXIgKiwgd2NoYXJfdCwgbWJzdGF0ZV90ICopOworI2VuZGlmCisKKyNpZiBVU0VfU0laRUNIQU5HRQorZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY191cGRhdGVfc2NyZWVuc2l6ZSAoU0NSRUVOICopOworI2VuZGlmCisKKyNpZiBIQVZFX1JFU0laRVRFUk0KK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfcmVzaXplX21hcmdpbnMgKFdJTkRPVyAqKTsKKyNlbHNlCisjZGVmaW5lIF9uY19yZXNpemVfbWFyZ2lucyh3cCkgLyogbm90aGluZyAqLworI2VuZGlmCisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19ldmVudGxpc3RfdGltZW91dChfbmNfZXZlbnRsaXN0ICopOworI2Vsc2UKKyNkZWZpbmUgd2dldGNoX2V2ZW50cyh3aW4sIGV2bCkgd2dldGNoKHdpbikKKyNkZWZpbmUgd2dldG5zdHJfZXZlbnRzKHdpbiwgc3RyLCBtYXhsZW4sIGV2bCkgd2dldG5zdHIod2luLCBzdHIsIG1heGxlbikKKyNlbmRpZgorCisvKgorICogTm90IGV2ZXJ5b25lIGhhcyB2c3NjYW5mKCksIGJ1dCB3ZSdkIGxpa2UgdG8gdXNlIGl0IGZvciBzY2FudygpLgorICovCisjaWYgIUhBVkVfVlNTQ0FORgorZXh0ZXJuIGludCB2c3NjYW5mKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IF9fYXJnKTsKKyNlbmRpZgorCisvKiBzY3JvbGwgaW5kaWNlcyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihpbnQgKikgX25jX29sZG51bXM7CisKKyNkZWZpbmUgVVNFX1NFVEJVRl8wIDAKKworI2RlZmluZSBOQ19CVUZGRVJFRChmbGFnKSBfbmNfc2V0X2J1ZmZlcihTUC0+X29mcCwgZmxhZykKKworI2RlZmluZSBOQ19PVVRQVVQgKChTUCAhPSAwKSA/IFNQLT5fb2ZwIDogc3Rkb3V0KQorCisvKgorICogT24gc3lzdGVtcyB3aXRoIGEgYnJva2VuIGxpbmtlciwgZGVmaW5lICdTUCcgYXMgYSBmdW5jdGlvbiB0byBmb3JjZSB0aGUKKyAqIGxpbmtlciB0byBwdWxsIGluIHRoZSBkYXRhLW9ubHkgbW9kdWxlIHdpdGggJ1NQJy4KKyAqLworI2lmIEJST0tFTl9MSU5LRVIKKyNkZWZpbmUgU1AgX25jX3NjcmVlbigpCitleHRlcm4gTkNVUlNFU19FWFBPUlQoU0NSRUVOICopIF9uY19zY3JlZW4gKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX2FsbG9jX3NjcmVlbiAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3NldF9zY3JlZW4gKFNDUkVFTiAqKTsKKyNlbHNlCisvKiBjdXJyZW50IHNjcmVlbiBpcyBwcml2YXRlIGRhdGE7IGF2b2lkIHBvc3NpYmxlIGxpbmtpbmcgY29uZmxpY3RzIHRvbyAqLworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihTQ1JFRU4gKikgU1A7CisjZGVmaW5lIF9uY19hbGxvY19zY3JlZW4oKSAoKFNQID0gdHlwZUNhbGxvYyhTQ1JFRU4sIDEpKSAhPSAwKQorI2RlZmluZSBfbmNfc2V0X3NjcmVlbihzcCkgU1AgPSBzcAorI2VuZGlmCisKKy8qCisgKiBXZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgbGluZXMgb3IgY29sdW1ucyBjYXBhYmlsaXRpZXMgaW50ZXJuYWxseSwgYmVjYXVzZQorICogaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgbXVsdGlwbGUgc2NyZWVucyB1bmRlciBYLCBpdCdzIHF1aXRlIHBvc3NpYmxlCisgKiB0aGV5IGNvdWxkIGFsbCBoYXZlIHR5cGUgeHRlcm0gYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzISAgU28uLi4KKyAqLworI2RlZmluZSBzY3JlZW5fbGluZXMJU1AtPl9saW5lcworI2RlZmluZSBzY3JlZW5fY29sdW1ucwlTUC0+X2NvbHVtbnMKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgX25jX3Nsa19pbml0aWFsaXplIChXSU5ET1cgKiwgaW50KTsKKworLyoKKyAqIFNvbWUgY29uc3RhbnRzIHJlbGF0ZWQgdG8gU0xLJ3MKKyAqLworI2RlZmluZSBNQVhfU0tFWV9PTEQJICAgOAkvKiBjb3VudCBvZiBzb2Z0IGtleXMgKi8KKyNkZWZpbmUgTUFYX1NLRVlfTEVOX09MRCAgIDgJLyogbWF4IGxlbmd0aCBvZiBzb2Z0IGtleSB0ZXh0ICovCisjZGVmaW5lIE1BWF9TS0VZX1BDICAgICAgIDEyICAgIC8qIFRoaXMgaXMgd2hhdCBtb3N0IFBDJ3MgaGF2ZSAqLworI2RlZmluZSBNQVhfU0tFWV9MRU5fUEMgICAgNQorCisvKiBNYWNybyB0byBjaGVjayB3aGV0aGVyIG9yIG5vdCB3ZSB1c2UgYSBzdGFuZGFyZCBmb3JtYXQgKi8KKyNkZWZpbmUgU0xLX1NUREZNVChmbXQpIChmbXQgPCAzKQorLyogTWFjcm8gdG8gZGV0ZXJtaW5lIGhlaWdodCBvZiBsYWJlbCB3aW5kb3cgKi8KKyNkZWZpbmUgU0xLX0xJTkVTKGZtdCkgIChTTEtfU1RERk1UKGZtdCkgPyAxIDogKChmbXQpIC0gMikpCisKKyNkZWZpbmUgTUFYX1NLRVkoZm10KSAgICAgKFNMS19TVERGTVQoZm10KT8gTUFYX1NLRVlfT0xEIDogTUFYX1NLRVlfUEMpCisjZGVmaW5lIE1BWF9TS0VZX0xFTihmbXQpIChTTEtfU1RERk1UKGZtdCk/IE1BWF9TS0VZX0xFTl9PTEQgOiBNQVhfU0tFWV9MRU5fUEMpCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19yaXBvZmZsaW5lIChpbnQgbGluZSwgaW50ICgqaW5pdCkoV0lORE9XICosaW50KSk7CisKKy8qCisgKiBDb21tb24gZXJyb3IgbWVzc2FnZXMKKyAqLworI2RlZmluZSBNU0dfTk9fTUVNT1JZICJPdXQgb2YgbWVtb3J5IgorI2RlZmluZSBNU0dfTk9fSU5QVVRTICJQcmVtYXR1cmUgRU9GIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogQ1VSU0VTX1BSSVZfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9maWZvX2RlZnMuaCBiL25jdXJzZXMtNS43L25jdXJzZXMvZmlmb19kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5YWUyMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvZmlmb19kZWZzLmgKQEAgLTAsMCArMSw1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb21tb24gbWFjcm9zIGZvciBsaWJfZ2V0Y2guYywgbGliX3VuZ2V0Y2guYworICoKKyAqICRJZDogZmlmb19kZWZzLmgsdiAxLjYgMjAwOC8wNi8yOCAxNTo1MjozMiB0b20gRXhwICQKKyAqLworCisjaWZuZGVmIEZJRk9fREVGU19ICisjZGVmaW5lIEZJRk9fREVGU19IIDEKKworI2RlZmluZSBoZWFkCXNwLT5fZmlmb2hlYWQKKyNkZWZpbmUgdGFpbAlzcC0+X2ZpZm90YWlsCisvKiBwZWVrIHBvaW50cyB0byBuZXh0IHVuaW50ZXJwcmV0ZWQgY2hhcmFjdGVyICovCisjZGVmaW5lIHBlZWsJc3AtPl9maWZvcGVlaworCisjZGVmaW5lIGhfaW5jKCkgeyBoZWFkID09IEZJRk9fU0laRS0xID8gaGVhZCA9IDAgOiBoZWFkKys7IGlmIChoZWFkID09IHRhaWwpIGhlYWQgPSAtMSwgdGFpbCA9IDA7fQorI2RlZmluZSBoX2RlYygpIHsgaGVhZCA9PSAwID8gaGVhZCA9IEZJRk9fU0laRS0xIDogaGVhZC0tOyBpZiAoaGVhZCA9PSB0YWlsKSB0YWlsID0gLTE7fQorI2RlZmluZSB0X2luYygpIHsgdGFpbCA9PSBGSUZPX1NJWkUtMSA/IHRhaWwgPSAwIDogdGFpbCsrOyBpZiAodGFpbCA9PSBoZWFkKSB0YWlsID0gLTE7fQorI2RlZmluZSB0X2RlYygpIHsgdGFpbCA9PSAwID8gdGFpbCA9IEZJRk9fU0laRS0xIDogdGFpbC0tOyBpZiAoaGVhZCA9PSB0YWlsKSBmaWZvX2NsZWFyKHNwKTt9CisjZGVmaW5lIHBfaW5jKCkgeyBwZWVrID09IEZJRk9fU0laRS0xID8gcGVlayA9IDAgOiBwZWVrKys7fQorCisjZGVmaW5lIGNvb2tlZF9rZXlfaW5fZmlmbygpCSgoaGVhZCAhPSAtMSkgJiYgKHBlZWsgIT0gaGVhZCkpCisjZGVmaW5lIHJhd19rZXlfaW5fZmlmbygpCSgoaGVhZCAhPSAtMSkgJiYgKHBlZWsgIT0gdGFpbCkpCisKKyN1bmRlZiBISURFX0VJTlRSCisKKyNlbmRpZiAvKiBGSUZPX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9sbGliLWxuY3Vyc2VzIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9sbGliLWxuY3Vyc2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMGUzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2xsaWItbG5jdXJzZXMKQEAgLTAsMCArMSwzNDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LTIwMDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTElOVExJQlJBUlkgKi8KKworLyogLi90dHkvaGFyZHNjcm9sbC5jICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjdW5kZWYgX25jX29sZG51bXMKK2ludAkqX25jX29sZG51bXM7CisKKyN1bmRlZiBfbmNfc2Nyb2xsX29wdGltaXplCit2b2lkCV9uY19zY3JvbGxfb3B0aW1pemUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19saW5lZHVtcAordm9pZAlfbmNfbGluZWR1bXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90dHkvaGFzaG1hcC5jICovCisKKyNpbmNsdWRlIDx0ZXJtLmg+CisKKyN1bmRlZiBfbmNfaGFzaF9tYXAKK3ZvaWQJX25jX2hhc2hfbWFwKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbWFrZV9vbGRoYXNoCit2b2lkCV9uY19tYWtlX29sZGhhc2goCisJCWludAlpKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3Njcm9sbF9vbGRoYXNoCit2b2lkCV9uY19zY3JvbGxfb2xkaGFzaCgKKwkJaW50CW4sIAorCQlpbnQJdG9wLCAKKwkJaW50CWJvdCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9hZGRjaC5jICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjdW5kZWYgX25jX3JlbmRlcgorY2h0eXBlCV9uY19yZW5kZXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBfbmNfd2FkZGNoX25vc3luYworaW50CV9uY193YWRkY2hfbm9zeW5jKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNodHlwZSBjKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2gKK2ludAl3YWRkY2goCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3ZWNob2NoYXIKK2ludAl3ZWNob2NoYXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYWRkc3RyLmMgKi8KKworI3VuZGVmIHdhZGRuc3RyCitpbnQJd2FkZG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqYXN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2huc3RyCitpbnQJd2FkZGNobnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgKmFzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2JlZXAuYyAqLworCisjdW5kZWYgYmVlcAoraW50CWJlZXAodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2JrZ2QuYyAqLworCisjdW5kZWYgd2JrZ2RzZXQKK3ZvaWQJd2JrZ2RzZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd2JrZ2QKK2ludAl3YmtnZCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9ib3guYyAqLworCisjdW5kZWYgd2JvcmRlcgoraW50CXdib3JkZXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWxzLCAKKwkJY2h0eXBlCXJzLCAKKwkJY2h0eXBlCXRzLCAKKwkJY2h0eXBlCWJzLCAKKwkJY2h0eXBlCXRsLCAKKwkJY2h0eXBlCXRyLCAKKwkJY2h0eXBlCWJsLCAKKwkJY2h0eXBlCWJyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2hnYXQuYyAqLworCisjdW5kZWYgd2NoZ2F0CitpbnQJd2NoZ2F0KAorCQlXSU5ET1cJKndpbiwgCisJCWludAluLCAKKwkJYXR0cl90CWF0dHIsIAorCQlzaG9ydAljb2xvciwgCisJCWNvbnN0IHZvaWQgKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jbGVhci5jICovCisKKyN1bmRlZiB3Y2xlYXIKK2ludAl3Y2xlYXIoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xlYXJvay5jICovCisKKyN1bmRlZiBjbGVhcm9rCitpbnQJY2xlYXJvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NscmJvdC5jICovCisKKyN1bmRlZiB3Y2xydG9ib3QKK2ludAl3Y2xydG9ib3QoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xyZW9sLmMgKi8KKworI3VuZGVmIHdjbHJ0b2VvbAoraW50CXdjbHJ0b2VvbCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jb2xvci5jICovCisKKyNpbmNsdWRlIDx0aWMuaD4KKworI3VuZGVmIENPTE9SX1BBSVJTCitpbnQJQ09MT1JfUEFJUlM7CisjdW5kZWYgQ09MT1JTCitpbnQJQ09MT1JTOworCisjdW5kZWYgX25jX3Jlc2V0X2NvbG9ycworTkNVUlNFU19CT09MIF9uY19yZXNldF9jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgc3RhcnRfY29sb3IKK2ludAlzdGFydF9jb2xvcih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbml0X3BhaXIKK2ludAlpbml0X3BhaXIoCisJCXNob3J0CXBhaXIsIAorCQlzaG9ydAlmLCAKKwkJc2hvcnQJYikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5pdF9jb2xvcgoraW50CWluaXRfY29sb3IoCisJCXNob3J0CWNvbG9yLCAKKwkJc2hvcnQJciwgCisJCXNob3J0CWcsIAorCQlzaG9ydAliKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjYW5fY2hhbmdlX2NvbG9yCitOQ1VSU0VTX0JPT0wgY2FuX2NoYW5nZV9jb2xvcih2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBoYXNfY29sb3JzCitOQ1VSU0VTX0JPT0wgaGFzX2NvbG9ycyh2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBjb2xvcl9jb250ZW50CitpbnQJY29sb3JfY29udGVudCgKKwkJc2hvcnQJY29sb3IsIAorCQlzaG9ydAkqciwgCisJCXNob3J0CSpnLCAKKwkJc2hvcnQJKmIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBhaXJfY29udGVudAoraW50CXBhaXJfY29udGVudCgKKwkJc2hvcnQJcGFpciwgCisJCXNob3J0CSpmLCAKKwkJc2hvcnQJKmIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19kb19jb2xvcgordm9pZAlfbmNfZG9fY29sb3IoCisJCXNob3J0CW9sZF9wYWlyLCAKKwkJc2hvcnQJcGFpciwgCisJCU5DVVJTRVNfQk9PTCByZXZlcnNlLCAKKwkJaW50CSgqb3V0YykoCisJCWludAlwMSkpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfY29sb3JzZXQuYyAqLworCisjdW5kZWYgd2NvbG9yX3NldAoraW50CXdjb2xvcl9zZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJc2hvcnQJY29sb3JfcGFpcl9udW1iZXIsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZGVsY2guYyAqLworCisjdW5kZWYgd2RlbGNoCitpbnQJd2RlbGNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2RlbHdpbi5jICovCisKKyN1bmRlZiBkZWx3aW4KK2ludAlkZWx3aW4oCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZWNoby5jICovCisKKyN1bmRlZiBlY2hvCitpbnQJZWNobyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2VjaG8KK2ludAlub2VjaG8odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2VuZHdpbi5jICovCisKKyN1bmRlZiBlbmR3aW4KK2ludAllbmR3aW4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2VyYXNlLmMgKi8KKworI3VuZGVmIHdlcmFzZQoraW50CXdlcmFzZSgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9mbGFzaC5jICovCisKKyN1bmRlZiBmbGFzaAoraW50CWZsYXNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9saWJfZ2VuLmMgKi8KKworI3VuZGVmIGFkZGNoCitpbnQJYWRkY2goCisJCWNvbnN0IGNodHlwZSB6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRjaG5zdHIKK2ludAlhZGRjaG5zdHIoCisJCWNvbnN0IGNodHlwZSAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkY2hzdHIKK2ludAlhZGRjaHN0cigKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRuc3RyCitpbnQJYWRkbnN0cigKKwkJY29uc3QgY2hhciAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkc3RyCitpbnQJYWRkc3RyKAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyb2ZmCitpbnQJYXR0cm9mZigKKwkJTkNVUlNFU19BVFRSX1QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cm9uCitpbnQJYXR0cm9uKAorCQlOQ1VSU0VTX0FUVFJfVAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyc2V0CitpbnQJYXR0cnNldCgKKwkJTkNVUlNFU19BVFRSX1QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cl9nZXQKK2ludAlhdHRyX2dldCgKKwkJYXR0cl90CSphMSwgCisJCXNob3J0CSphMiwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfb2ZmCitpbnQJYXR0cl9vZmYoCisJCWF0dHJfdAlhMSwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfb24KK2ludAlhdHRyX29uKAorCQlhdHRyX3QJYTEsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX3NldAoraW50CWF0dHJfc2V0KAorCQlhdHRyX3QJYTEsIAorCQlzaG9ydAlhMiwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJrZ2QKK2ludAlia2dkKAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYmtnZHNldAordm9pZAlia2dkc2V0KAorCQljaHR5cGUJeikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGJvcmRlcgoraW50CWJvcmRlcigKKwkJY2h0eXBlCWExLCAKKwkJY2h0eXBlCWEyLCAKKwkJY2h0eXBlCWEzLCAKKwkJY2h0eXBlCWE0LCAKKwkJY2h0eXBlCWE1LCAKKwkJY2h0eXBlCWE2LCAKKwkJY2h0eXBlCWE3LCAKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJveAoraW50CWJveCgKKwkJV0lORE9XCSphMSwgCisJCWNodHlwZQlhMiwgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjaGdhdAoraW50CWNoZ2F0KAorCQlpbnQJYTEsIAorCQlhdHRyX3QJYTIsIAorCQlzaG9ydAlhMywgCisJCWNvbnN0IHZvaWQgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNsZWFyCitpbnQJY2xlYXIodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2xydG9ib3QKK2ludAljbHJ0b2JvdCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjbHJ0b2VvbAoraW50CWNscnRvZW9sKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNvbG9yX3NldAoraW50CWNvbG9yX3NldCgKKwkJc2hvcnQJYTEsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBDT0xPUl9QQUlSCitpbnQJQ09MT1JfUEFJUigKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlbGNoCitpbnQJZGVsY2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVsZXRlbG4KK2ludAlkZWxldGVsbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBlY2hvY2hhcgoraW50CWVjaG9jaGFyKAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZXJhc2UKK2ludAllcmFzZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRia2dkCitjaHR5cGUJZ2V0YmtnZCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBnZXRjaAoraW50CWdldGNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldG5zdHIKK2ludAlnZXRuc3RyKAorCQljaGFyCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRzdHIKK2ludAlnZXRzdHIoCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGhsaW5lCitpbnQJaGxpbmUoCisJCWNodHlwZQlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbmNoCitjaHR5cGUJaW5jaCh2b2lkKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBpbmNobnN0cgoraW50CWluY2huc3RyKAorCQljaHR5cGUJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluY2hzdHIKK2ludAlpbmNoc3RyKAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGlubnN0cgoraW50CWlubnN0cigKKwkJY2hhcgkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zY2gKK2ludAlpbnNjaCgKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc2RlbGxuCitpbnQJaW5zZGVsbG4oCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNlcnRsbgoraW50CWluc2VydGxuKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc25zdHIKK2ludAlpbnNuc3RyKAorCQljb25zdCBjaGFyICphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNzdHIKK2ludAlpbnNzdHIoCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc3RyCitpbnQJaW5zdHIoCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1vdmUKK2ludAltb3ZlKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRjaAoraW50CW12YWRkY2goCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNodHlwZSB6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZGNobnN0cgoraW50CW12YWRkY2huc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaHR5cGUgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkY2hzdHIKK2ludAltdmFkZGNoc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaHR5cGUgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkbnN0cgoraW50CW12YWRkbnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2hhciAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRzdHIKK2ludAltdmFkZHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZjaGdhdAoraW50CW12Y2hnYXQoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWF0dHJfdAlhNCwgCisJCXNob3J0CWE1LCAKKwkJY29uc3Qgdm9pZCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZkZWxjaAoraW50CW12ZGVsY2goCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmdldGNoCitpbnQJbXZnZXRjaCgKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0bnN0cgoraW50CW12Z2V0bnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRzdHIKK2ludAltdmdldHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZobGluZQoraW50CW12aGxpbmUoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQlhMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluY2gKK2NodHlwZQltdmluY2goCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBtdmluY2huc3RyCitpbnQJbXZpbmNobnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2h0eXBlCSphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluY2hzdHIKK2ludAltdmluY2hzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbm5zdHIKK2ludAltdmlubnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNjaAoraW50CW12aW5zY2goCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc25zdHIKK2ludAltdmluc25zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zc3RyCitpbnQJbXZpbnNzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zdHIKK2ludAltdmluc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdnZsaW5lCitpbnQJbXZ2bGluZSgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2h0eXBlCWEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZGNoCitpbnQJbXZ3YWRkY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkY2huc3RyCitpbnQJbXZ3YWRkY2huc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2h0eXBlICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRjaHN0cgoraW50CW12d2FkZGNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRuc3RyCitpbnQJbXZ3YWRkbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNoYXIgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZHN0cgoraW50CW12d2FkZHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2NoZ2F0CitpbnQJbXZ3Y2hnYXQoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQlpbnQJYTQsIAorCQlhdHRyX3QJYTUsIAorCQlzaG9ydAlhNiwgCisJCWNvbnN0IHZvaWQgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2RlbGNoCitpbnQJbXZ3ZGVsY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0Y2gKK2ludAltdndnZXRjaCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndnZXRuc3RyCitpbnQJbXZ3Z2V0bnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldHN0cgoraW50CW12d2dldHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2hsaW5lCitpbnQJbXZ3aGxpbmUoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5jaAorY2h0eXBlCW12d2luY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5jaG5zdHIKK2ludAltdndpbmNobnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNodHlwZQkqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5jaHN0cgoraW50CW12d2luY2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2lubnN0cgoraW50CW12d2lubnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc2NoCitpbnQJbXZ3aW5zY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zbnN0cgoraW50CW12d2luc25zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnNzdHIKK2ludAltdndpbnNzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnN0cgoraW50CW12d2luc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3dmxpbmUKK2ludAltdnd2bGluZSgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNodHlwZQlhNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBQQUlSX05VTUJFUgoraW50CVBBSVJfTlVNQkVSKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVkcmF3d2luCitpbnQJcmVkcmF3d2luKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlZnJlc2gKK2ludAlyZWZyZXNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcmwKK2ludAlzY3JsKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2Nyb2xsCitpbnQJc2Nyb2xsKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldHNjcnJlZworaW50CXNldHNjcnJlZygKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHN0YW5kb3V0CitpbnQJc3RhbmRvdXQodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc3RhbmRlbmQKK2ludAlzdGFuZGVuZCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0aW1lb3V0Cit2b2lkCXRpbWVvdXQoCisJCWludAl6KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgdG91Y2hsaW5lCitpbnQJdG91Y2hsaW5lKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRvdWNod2luCitpbnQJdG91Y2h3aW4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW50b3VjaHdpbgoraW50CXVudG91Y2h3aW4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdmxpbmUKK2ludAl2bGluZSgKKwkJY2h0eXBlCWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZ3X3ByaW50dworaW50CXZ3X3ByaW50dygKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNoYXIgKmEyLCAKKwkJdmFfbGlzdAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2d19zY2FudworaW50CXZ3X3NjYW53KAorCQlXSU5ET1cJKmExLCAKKwkJY2hhcgkqYTIsIAorCQl2YV9saXN0CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRjaHN0cgoraW50CXdhZGRjaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZHN0cgoraW50CXdhZGRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cm9uCitpbnQJd2F0dHJvbigKKwkJV0lORE9XCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cm9mZgoraW50CXdhdHRyb2ZmKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyc2V0CitpbnQJd2F0dHJzZXQoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJfZ2V0CitpbnQJd2F0dHJfZ2V0KAorCQlXSU5ET1cJKmExLCAKKwkJYXR0cl90CSphMiwgCisJCXNob3J0CSphMywgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyX3NldAoraW50CXdhdHRyX3NldCgKKwkJV0lORE9XCSphMSwgCisJCWF0dHJfdAlhMiwgCisJCXNob3J0CWEzLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2RlbGV0ZWxuCitpbnQJd2RlbGV0ZWxuKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRzdHIKK2ludAl3Z2V0c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luY2hzdHIKK2ludAl3aW5jaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNodHlwZQkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc2VydGxuCitpbnQJd2luc2VydGxuKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNzdHIKK2ludAl3aW5zc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc3RyCitpbnQJd2luc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3N0YW5kb3V0CitpbnQJd3N0YW5kb3V0KAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzdGFuZGVuZAoraW50CXdzdGFuZGVuZCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRhdHRycworaW50CWdldGF0dHJzKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGN1cngKK2ludAlnZXRjdXJ4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGN1cnkKK2ludAlnZXRjdXJ5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGJlZ3gKK2ludAlnZXRiZWd4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGJlZ3kKK2ludAlnZXRiZWd5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldG1heHgKK2ludAlnZXRtYXh4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldG1heHkKK2ludAlnZXRtYXh5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldHBhcngKK2ludAlnZXRwYXJ4KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldHBhcnkKK2ludAlnZXRwYXJ5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRwYXJlbnQKK1dJTkRPVwkqd2dldHBhcmVudCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgaXNfY2xlYXJlZAorTkNVUlNFU19CT09MIGlzX2NsZWFyZWQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfaWRjb2sKK05DVVJTRVNfQk9PTCBpc19pZGNvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19pZGxvaworTkNVUlNFU19CT09MIGlzX2lkbG9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2ltbWVkb2sKK05DVVJTRVNfQk9PTCBpc19pbW1lZG9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2tleXBhZAorTkNVUlNFU19CT09MIGlzX2tleXBhZCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19sZWF2ZW9rCitOQ1VSU0VTX0JPT0wgaXNfbGVhdmVvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19ub2RlbGF5CitOQ1VSU0VTX0JPT0wgaXNfbm9kZWxheSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19ub3RpbWVvdXQKK05DVVJTRVNfQk9PTCBpc19ub3RpbWVvdXQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfc2Nyb2xsb2sKK05DVVJTRVNfQk9PTCBpc19zY3JvbGxvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19zeW5jb2sKK05DVVJTRVNfQk9PTCBpc19zeW5jb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgd2dldHNjcnJlZworaW50CXdnZXRzY3JyZWcoCisJCWNvbnN0IFdJTkRPVyAqYTEsIAorCQlpbnQJKmEyLCAKKwkJaW50CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtb3VzZV90cmFmbworTkNVUlNFU19CT09MIG1vdXNlX3RyYWZvKAorCQlpbnQJKmExLCAKKwkJaW50CSphMiwgCisJCU5DVVJTRVNfQk9PTCB6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZ2V0Y2guYyAqLworCisjaW5jbHVkZSA8Zmlmb19kZWZzLmg+CisKKyN1bmRlZiBFU0NERUxBWQoraW50CUVTQ0RFTEFZOworCisjdW5kZWYgc2V0X2VzY2RlbGF5CitpbnQJc2V0X2VzY2RlbGF5KAorCQlpbnQJdmFsdWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY193Z2V0Y2gKK2ludAlfbmNfd2dldGNoKAorCQlXSU5ET1cJKndpbiwgCisJCXVuc2lnbmVkIGxvbmcgKnJlc3VsdCwgCisJCWludAl1c2VfbWV0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2dldGNoCitpbnQJd2dldGNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2dldHN0ci5jICovCisKKyN1bmRlZiB3Z2V0bnN0cgoraW50CXdnZXRuc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKnN0ciwgCisJCWludAltYXhsZW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9obGluZS5jICovCisKKyN1bmRlZiB3aGxpbmUKK2ludAl3aGxpbmUoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbW1lZG9rLmMgKi8KKworI3VuZGVmIGltbWVkb2sKK3ZvaWQJaW1tZWRvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9pbmNoc3RyLmMgKi8KKworI3VuZGVmIHdpbmNobnN0cgoraW50CXdpbmNobnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJKnN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5pdHNjci5jICovCisKKyN1bmRlZiBpbml0c2NyCitXSU5ET1cJKmluaXRzY3Iodm9pZCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnNjaC5jICovCisKKyN1bmRlZiBfbmNfaW5zZXJ0X2NoCitpbnQJX25jX2luc2VydF9jaCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNjaAoraW50CXdpbnNjaCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJYykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc2RlbC5jICovCisKKyN1bmRlZiB3aW5zZGVsbG4KK2ludAl3aW5zZGVsbG4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnNuc3RyLmMgKi8KKworI3VuZGVmIHdpbnNuc3RyCitpbnQJd2luc25zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqcywgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zdHIuYyAqLworCisjdW5kZWYgd2lubnN0cgoraW50CXdpbm5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pc2VuZHdpbi5jICovCisKKyN1bmRlZiBpc2VuZHdpbgorTkNVUlNFU19CT09MIGlzZW5kd2luKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9sZWF2ZW9rLmMgKi8KKworI3VuZGVmIGxlYXZlb2sKK2ludAlsZWF2ZW9rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbW91c2UuYyAqLworCisjdW5kZWYgZ2V0bW91c2UKK2ludAlnZXRtb3VzZSgKKwkJTUVWRU5UCSphZXZlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVuZ2V0bW91c2UKK2ludAl1bmdldG1vdXNlKAorCQlNRVZFTlQJKmFldmVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbW91c2VtYXNrCittbWFza190CW1vdXNlbWFzaygKKwkJbW1hc2tfdAluZXdtYXNrLCAKKwkJbW1hc2tfdAkqb2xkbWFzaykKKwkJeyByZXR1cm4oKihtbWFza190ICopMCk7IH0KKworI3VuZGVmIHdlbmNsb3NlCitOQ1VSU0VTX0JPT0wgd2VuY2xvc2UoCisJCWNvbnN0IFdJTkRPVyAqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgbW91c2VpbnRlcnZhbAoraW50CW1vdXNlaW50ZXJ2YWwoCisJCWludAltYXhjbGljaykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2hhc19tb3VzZQoraW50CV9uY19oYXNfbW91c2Uodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd21vdXNlX3RyYWZvCitOQ1VSU0VTX0JPT0wgd21vdXNlX3RyYWZvKAorCQljb25zdCBXSU5ET1cgKndpbiwgCisJCWludAkqcFksIAorCQlpbnQJKnBYLCAKKwkJTkNVUlNFU19CT09MIHRvX3NjcmVlbikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX21vdmUuYyAqLworCisjdW5kZWYgd21vdmUKK2ludAl3bW92ZSgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHR5L2xpYl9tdmN1ci5jICovCisKKyN1bmRlZiBfbmNfbXNlY19jb3N0CitpbnQJX25jX21zZWNfY29zdCgKKwkJY29uc3QgY2hhciAqY29uc3QgY2FwLCAKKwkJaW50CWFmZmNudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX212Y3VyX3Jlc3VtZQordm9pZAlfbmNfbXZjdXJfcmVzdW1lKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbXZjdXJfaW5pdAordm9pZAlfbmNfbXZjdXJfaW5pdCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX212Y3VyX3dyYXAKK3ZvaWQJX25jX212Y3VyX3dyYXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG12Y3VyCitpbnQJbXZjdXIoCisJCWludAl5b2xkLCAKKwkJaW50CXhvbGQsIAorCQlpbnQJeW5ldywgCisJCWludAl4bmV3KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfb3B0aW1pemVfZW5hYmxlCitpbnQJX25jX29wdGltaXplX2VuYWJsZTsKKworLyogLi9iYXNlL2xpYl9tdndpbi5jICovCisKKyN1bmRlZiBtdndpbgoraW50CW12d2luKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlieSwgCisJCWludAlieCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX25ld3Rlcm0uYyAqLworCisjdW5kZWYgZmlsdGVyCit2b2lkCWZpbHRlcih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbm9maWx0ZXIKK3ZvaWQJbm9maWx0ZXIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG5ld3Rlcm0KK1NDUkVFTgkqbmV3dGVybSgKKwkJY2hhcgkqbmFtZSwgCisJCUZJTEUJKm9mcCwgCisJCUZJTEUJKmlmcCkKKwkJeyByZXR1cm4oKihTQ1JFRU4gKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9uZXd3aW4uYyAqLworCisjdW5kZWYgX25jX2ZyZWV3aW4KK2ludAlfbmNfZnJlZXdpbigKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5ld3dpbgorV0lORE9XCSpuZXd3aW4oCisJCWludAludW1fbGluZXMsIAorCQlpbnQJbnVtX2NvbHVtbnMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgZGVyd2luCitXSU5ET1cJKmRlcndpbigKKwkJV0lORE9XCSpvcmlnLCAKKwkJaW50CW51bV9saW5lcywgCisJCWludAludW1fY29sdW1ucywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBzdWJ3aW4KK1dJTkRPVwkqc3Vid2luKAorCQlXSU5ET1cJKncsIAorCQlpbnQJbCwgCisJCWludAljLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIF9uY19tYWtlbmV3CitXSU5ET1cJKl9uY19tYWtlbmV3KAorCQlpbnQJbnVtX2xpbmVzLCAKKwkJaW50CW51bV9jb2x1bW5zLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCwgCisJCWludAlmbGFncykKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIF9uY19zY3JlZW5fb2YKK1NDUkVFTgkqX25jX3NjcmVlbl9vZigKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbmwuYyAqLworCisjdW5kZWYgbmwKK2ludAlubCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub25sCitpbnQJbm9ubCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfb3ZlcmxheS5jICovCisKKyN1bmRlZiBvdmVybGF5CitpbnQJb3ZlcmxheSgKKwkJY29uc3QgV0lORE9XICp3aW4xLCAKKwkJV0lORE9XCSp3aW4yKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBvdmVyd3JpdGUKK2ludAlvdmVyd3JpdGUoCisJCWNvbnN0IFdJTkRPVyAqd2luMSwgCisJCVdJTkRPVwkqd2luMikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY29weXdpbgoraW50CWNvcHl3aW4oCisJCWNvbnN0IFdJTkRPVyAqc3JjLCAKKwkJV0lORE9XCSpkc3QsIAorCQlpbnQJc21pbnJvdywgCisJCWludAlzbWluY29sLCAKKwkJaW50CWRtaW5yb3csIAorCQlpbnQJZG1pbmNvbCwgCisJCWludAlkbWF4cm93LCAKKwkJaW50CWRtYXhjb2wsIAorCQlpbnQJb3ZlcikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3BhZC5jICovCisKKyN1bmRlZiBuZXdwYWQKK1dJTkRPVwkqbmV3cGFkKAorCQlpbnQJbCwgCisJCWludAljKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgc3VicGFkCitXSU5ET1cJKnN1YnBhZCgKKwkJV0lORE9XCSpvcmlnLCAKKwkJaW50CWwsIAorCQlpbnQJYywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBwcmVmcmVzaAoraW50CXByZWZyZXNoKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlwbWlucm93LCAKKwkJaW50CXBtaW5jb2wsIAorCQlpbnQJc21pbnJvdywgCisJCWludAlzbWluY29sLCAKKwkJaW50CXNtYXhyb3csIAorCQlpbnQJc21heGNvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcG5vdXRyZWZyZXNoCitpbnQJcG5vdXRyZWZyZXNoKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlwbWlucm93LCAKKwkJaW50CXBtaW5jb2wsIAorCQlpbnQJc21pbnJvdywgCisJCWludAlzbWluY29sLCAKKwkJaW50CXNtYXhyb3csIAorCQlpbnQJc21heGNvbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcGVjaG9jaGFyCitpbnQJcGVjaG9jaGFyKAorCQlXSU5ET1cJKnBhZCwgCisJCWNvbnN0IGNodHlwZSBjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3ByaW50dy5jICovCisKKyN1bmRlZiBwcmludHcKK2ludAlwcmludHcoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3ByaW50dworaW50CXdwcmludHcoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdnByaW50dworaW50CW12cHJpbnR3KAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndwcmludHcKK2ludAltdndwcmludHcoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdndwcmludHcKK2ludAl2d3ByaW50dygKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICpmbXQsIAorCQl2YV9saXN0CWFyZ3ApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9yZWRyYXdsbi5jICovCisKKyN1bmRlZiB3cmVkcmF3bG4KK2ludAl3cmVkcmF3bG4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWJlZywgCisJCWludAludW0pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9yZWZyZXNoLmMgKi8KKworI3VuZGVmIHdyZWZyZXNoCitpbnQJd3JlZnJlc2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3bm91dHJlZnJlc2gKK2ludAl3bm91dHJlZnJlc2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcmVzdGFydC5jICovCisKKyN1bmRlZiByZXN0YXJ0dGVybQoraW50CXJlc3RhcnR0ZXJtKAorCQljaGFyCSp0ZXJtcCwgCisJCWludAlmaWxlbnVtLCAKKwkJaW50CSplcnJyZXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY2Fudy5jICovCisKKyN1bmRlZiB2d3NjYW53CitpbnQJdndzY2FudygKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpmbXQsIAorCQl2YV9saXN0CWFyZ3ApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjYW53CitpbnQJc2NhbncoCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3NjYW53CitpbnQJd3NjYW53KAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZzY2FudworaW50CW12c2NhbncoCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3NjYW53CitpbnQJbXZ3c2NhbncoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NjcmVlbi5jICovCisKKyN1bmRlZiBnZXR3aW4KK1dJTkRPVwkqZ2V0d2luKAorCQlGSUxFCSpmaWxlcCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHB1dHdpbgoraW50CXB1dHdpbigKKwkJV0lORE9XCSp3aW4sIAorCQlGSUxFCSpmaWxlcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX3Jlc3RvcmUKK2ludAlzY3JfcmVzdG9yZSgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX2R1bXAKK2ludAlzY3JfZHVtcCgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX2luaXQKK2ludAlzY3JfaW5pdCgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NyX3NldAoraW50CXNjcl9zZXQoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY3JvbGwuYyAqLworCisjdW5kZWYgX25jX3Njcm9sbF93aW5kb3cKK3ZvaWQJX25jX3Njcm9sbF93aW5kb3coCisJCVdJTkRPVwkqd2luLCAKKwkJaW50IGNvbnN0IG4sIAorCQlzaG9ydCBjb25zdCB0b3AsIAorCQlzaG9ydCBjb25zdCBib3R0b20sIAorCQljaHR5cGUJYmxhbmspCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3c2NybAoraW50CXdzY3JsKAorCQlXSU5ET1cJKndpbiwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2Nyb2xsb2suYyAqLworCisjdW5kZWYgc2Nyb2xsb2sKK2ludAlzY3JvbGxvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NjcnJlZy5jICovCisKKyN1bmRlZiB3c2V0c2NycmVnCitpbnQJd3NldHNjcnJlZygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJdG9wLCAKKwkJaW50CWJvdHRvbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NldF90ZXJtLmMgKi8KKworI3VuZGVmIHNldF90ZXJtCitTQ1JFRU4JKnNldF90ZXJtKAorCQlTQ1JFRU4JKnNjcmVlbnApCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKyN1bmRlZiBkZWxzY3JlZW4KK3ZvaWQJZGVsc2NyZWVuKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NldHVwc2NyZWVuCitpbnQJX25jX3NldHVwc2NyZWVuKAorCQlpbnQJc2xpbmVzLCAKKwkJaW50CXNjb2x1bW5zLCAKKwkJRklMRQkqb3V0cHV0LCAKKwkJTkNVUlNFU19CT09MIGZpbHRlcmVkLCAKKwkJaW50CXNsa19mb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yaXBvZmZsaW5lCitpbnQJX25jX3JpcG9mZmxpbmUoCisJCWludAlsaW5lLCAKKwkJaW50CSgqaW5pdCkoCisJCVdJTkRPVwkqcDEsIAorCQlpbnQJcDIpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByaXBvZmZsaW5lCitpbnQJcmlwb2ZmbGluZSgKKwkJaW50CWxpbmUsIAorCQlpbnQJKCppbml0KSgKKwkJV0lORE9XCSpwMSwgCisJCWludAlwMikpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGsuYyAqLworCisjdW5kZWYgX25jX3Nsa19pbml0aWFsaXplCitpbnQJX25jX3Nsa19pbml0aWFsaXplKAorCQlXSU5ET1cJKnN0d2luLCAKKwkJaW50CWNvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNsa19yZXN0b3JlCitpbnQJc2xrX3Jlc3RvcmUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cl9zZXQuYyAqLworCisjdW5kZWYgc2xrX2F0dHJfc2V0CitpbnQJc2xrX2F0dHJfc2V0KAorCQljb25zdCBhdHRyX3QgYXR0ciwgCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cm9mLmMgKi8KKworI3VuZGVmIHNsa19hdHRyb2ZmCitpbnQJc2xrX2F0dHJvZmYoCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXRyb24uYyAqLworCisjdW5kZWYgc2xrX2F0dHJvbgoraW50CXNsa19hdHRyb24oCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXRyc2V0LmMgKi8KKworI3VuZGVmIHNsa19hdHRyc2V0CitpbnQJc2xrX2F0dHJzZXQoCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXR0ci5jICovCisKKyN1bmRlZiBzbGtfYXR0cgorYXR0cl90CXNsa19hdHRyKHZvaWQpCisJCXsgcmV0dXJuKCooYXR0cl90ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtjbGVhci5jICovCisKKyN1bmRlZiBzbGtfY2xlYXIKK2ludAlzbGtfY2xlYXIodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2NvbG9yLmMgKi8KKworI3VuZGVmIHNsa19jb2xvcgoraW50CXNsa19jb2xvcigKKwkJc2hvcnQJY29sb3JfcGFpcl9udW1iZXIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtpbml0LmMgKi8KKworI3VuZGVmIHNsa19pbml0CitpbnQJc2xrX2luaXQoCisJCWludAlmb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtsYWIuYyAqLworCisjdW5kZWYgc2xrX2xhYmVsCitjaGFyCSpzbGtfbGFiZWwoCisJCWludAluKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtyZWZyLmMgKi8KKworI3VuZGVmIHNsa19ub3V0cmVmcmVzaAoraW50CXNsa19ub3V0cmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzbGtfcmVmcmVzaAoraW50CXNsa19yZWZyZXNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtzZXQuYyAqLworCisjdW5kZWYgc2xrX3NldAoraW50CXNsa19zZXQoCisJCWludAlpLCAKKwkJY29uc3QgY2hhciAqYXN0ciwgCisJCWludAlmb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGt0b3VjaC5jICovCisKKyN1bmRlZiBzbGtfdG91Y2gKK2ludAlzbGtfdG91Y2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3RvdWNoLmMgKi8KKworI3VuZGVmIGlzX2xpbmV0b3VjaGVkCitOQ1VSU0VTX0JPT0wgaXNfbGluZXRvdWNoZWQoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWxpbmUpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX3dpbnRvdWNoZWQKK05DVVJTRVNfQk9PTCBpc193aW50b3VjaGVkKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgd3RvdWNobG4KK2ludAl3dG91Y2hsbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAluLCAKKwkJaW50CWNoYW5nZWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2VkbXAuYyAqLworCisjdW5kZWYgX3RyYWNlZHVtcAordm9pZAlfdHJhY2VkdW1wKAorCQljb25zdCBjaGFyICpuYW1lLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlbXNlLmMgKi8KKworI3VuZGVmIF9uY190cmFjZW1vdXNlCitjaGFyCSpfbmNfdHJhY2Vtb3VzZSgKKwkJU0NSRUVOCSpzcCwgCisJCU1FVkVOVCBjb25zdCAqZXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlbW91c2UKK2NoYXIJKl90cmFjZW1vdXNlKAorCQlNRVZFTlQgY29uc3QgKmVwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90dHkvbGliX3RzdHAuYyAqLworCisjaW5jbHVkZSA8U2lnQWN0aW9uLmg+CisKKyN1bmRlZiBfbmNfc2lnbmFsX2hhbmRsZXIKK3ZvaWQJX25jX3NpZ25hbF9oYW5kbGVyKAorCQlOQ1VSU0VTX0JPT0wgZW5hYmxlKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX3VuZ2V0Y2guYyAqLworCisjdW5kZWYgX25jX2ZpZm9fZHVtcAordm9pZAlfbmNfZmlmb19kdW1wKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3VuZ2V0Y2gKK2ludAlfbmNfdW5nZXRjaCgKKwkJU0NSRUVOCSpzcCwgCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5nZXRjaAoraW50CXVuZ2V0Y2goCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfdmlkYXR0ci5jICovCisKKyN1bmRlZiB2aWRwdXRzCitpbnQJdmlkcHV0cygKKwkJY2h0eXBlCW5ld21vZGUsIAorCQlpbnQJKCpvdXRjKSgKKwkJaW50CXAxKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdmlkYXR0cgoraW50CXZpZGF0dHIoCisJCWNodHlwZQluZXdtb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0ZXJtYXR0cnMKK2NodHlwZQl0ZXJtYXR0cnModm9pZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3ZsaW5lLmMgKi8KKworI3VuZGVmIHd2bGluZQoraW50CXd2bGluZSgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dhdHRyb2ZmLmMgKi8KKworI3VuZGVmIHdhdHRyX29mZgoraW50CXdhdHRyX29mZigKKwkJV0lORE9XCSp3aW4sIAorCQlhdHRyX3QJYXQsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfd2F0dHJvbi5jICovCisKKyN1bmRlZiB3YXR0cl9vbgoraW50CXdhdHRyX29uKAorCQlXSU5ET1cJKndpbiwgCisJCWF0dHJfdAlhdCwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93aW5jaC5jICovCisKKyN1bmRlZiB3aW5jaAorY2h0eXBlCXdpbmNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dpbmRvdy5jICovCisKKyN1bmRlZiBfbmNfc3luY2hvb2sKK3ZvaWQJX25jX3N5bmNob29rKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG12ZGVyd2luCitpbnQJbXZkZXJ3aW4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc3luY29rCitpbnQJc3luY29rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBiZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3N5bmN1cAordm9pZAl3c3luY3VwKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHdzeW5jZG93bgordm9pZAl3c3luY2Rvd24oCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd2N1cnN5bmN1cAordm9pZAl3Y3Vyc3luY3VwKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGR1cHdpbgorV0lORE9XCSpkdXB3aW4oCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2Jhc2UvbmNfcGFuZWwuYyAqLworCisjdW5kZWYgX25jX3BhbmVsaG9vaworc3RydWN0IHBhbmVsaG9vayAqX25jX3BhbmVsaG9vayh2b2lkKQorCQl7IHJldHVybigqKHN0cnVjdCBwYW5lbGhvb2sgKiopMCk7IH0KKworLyogLi9iYXNlL3NhZmVfc3ByaW50Zi5jICovCisKKyN1bmRlZiBfbmNfcHJpbnRmX3N0cmluZworY2hhcgkqX25jX3ByaW50Zl9zdHJpbmcoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCXZhX2xpc3QJYXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3R0eS90dHlfdXBkYXRlLmMgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisKKyN1bmRlZiBkb3VwZGF0ZQoraW50CWRvdXBkYXRlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zY3JvbGxuCitpbnQJX25jX3Njcm9sbG4oCisJCWludAluLCAKKwkJaW50CXRvcCwgCisJCWludAlib3QsIAorCQlpbnQJbWF4eSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3NjcmVlbl9yZXN1bWUKK3ZvaWQJX25jX3NjcmVlbl9yZXN1bWUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JlZW5faW5pdAordm9pZAlfbmNfc2NyZWVuX2luaXQodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JlZW5fd3JhcAordm9pZAlfbmNfc2NyZWVuX3dyYXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19kb194bWNfZ2xpdGNoCit2b2lkCV9uY19kb194bWNfZ2xpdGNoKAorCQlhdHRyX3QJcHJldmlvdXMpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHJhY2UvdmFyYXJncy5jICovCisKK3R5cGVkZWYgZW51bSB7CisgICAgYXRVbmtub3duID0gMCwgYXRJbnRlZ2VyLCBhdEZsb2F0LCBhdFBvaW50LCBhdFN0cmluZworfSBBUkdUWVBFOworCisjdW5kZWYgX25jX3ZhcmFyZ3MKK2NoYXIJKl9uY192YXJhcmdzKAorCQljb25zdCBjaGFyICpmbXQsIAorCQl2YV9saXN0CWFwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL21lbW1vdmUuYyAqLworCisjdW5kZWYgX25jX21lbW1vdmUKK3ZvaWQJX25jX21lbW1vdmUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL3Zzc2NhbmYuYyAqLworCisjdW5kZWYgX25jX3Zzc2NhbmYKK3ZvaWQJX25jX3Zzc2NhbmYodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9mcmVlYWxsLmMgKi8KKworI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworI3VuZGVmIF9uY19mcmVlYWxsCit2b2lkCV9uY19mcmVlYWxsKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZnJlZV9hbmRfZXhpdAordm9pZAlfbmNfZnJlZV9hbmRfZXhpdCgKKwkJaW50CWNvZGUpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vZXhwYW5kZWQuYyAqLworCisjdW5kZWYgX25jX3RvZ2dsZV9hdHRyX29uCit2b2lkCV9uY190b2dnbGVfYXR0cl9vbigKKwkJYXR0cl90CSpTLCAKKwkJYXR0cl90CWF0KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3RvZ2dsZV9hdHRyX29mZgordm9pZAlfbmNfdG9nZ2xlX2F0dHJfb2ZmKAorCQlhdHRyX3QJKlMsIAorCQlhdHRyX3QJYXQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfRGVsQ2hhckNvc3QKK2ludAlfbmNfRGVsQ2hhckNvc3QoCisJCWludAljb3VudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX0luc0NoYXJDb3N0CitpbnQJX25jX0luc0NoYXJDb3N0KAorCQlpbnQJY291bnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19VcGRhdGVBdHRycwordm9pZAlfbmNfVXBkYXRlQXR0cnMoCisJCWNodHlwZQljKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGVnYWN5X2NvZGluZy5jICovCisKKyN1bmRlZiB1c2VfbGVnYWN5X2NvZGluZworaW50CXVzZV9sZWdhY3lfY29kaW5nKAorCQlpbnQJbGV2ZWwpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9kZnRfZmdiZy5jICovCisKKyN1bmRlZiB1c2VfZGVmYXVsdF9jb2xvcnMKK2ludAl1c2VfZGVmYXVsdF9jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXNzdW1lX2RlZmF1bHRfY29sb3JzCitpbnQJYXNzdW1lX2RlZmF1bHRfY29sb3JzKAorCQlpbnQJZmcsIAorCQlpbnQJYmcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfcHJpbnQuYyAqLworCisjdW5kZWYgbWNwcmludAoraW50CW1jcHJpbnQoCisJCWNoYXIJKmRhdGEsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9yZXNpemV0ZXJtLmMgKi8KKworI3VuZGVmIGlzX3Rlcm1fcmVzaXplZAorTkNVUlNFU19CT09MIGlzX3Rlcm1fcmVzaXplZCgKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiByZXNpemVfdGVybQoraW50CXJlc2l6ZV90ZXJtKAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2l6ZXRlcm0KK2ludAlyZXNpemV0ZXJtKAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS90cmFjZV94bmFtZXMuYyAqLworCisjdW5kZWYgX25jX3RyYWNlX3huYW1lcwordm9pZAlfbmNfdHJhY2VfeG5hbWVzKAorCQlURVJNVFlQRSAqdHApCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vdXNlX3NjcmVlbi5jICovCisKKyN1bmRlZiB1c2Vfc2NyZWVuCitpbnQJdXNlX3NjcmVlbigKKwkJU0NSRUVOCSpzY3JlZW4sIAorCQlOQ1VSU0VTX1NDUkVFTl9DQiBmdW5jLCAKKwkJdm9pZAkqZGF0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvdXNlX3dpbmRvdy5jICovCisKKyN1bmRlZiB1c2Vfd2luZG93CitpbnQJdXNlX3dpbmRvdygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX1dJTkRPV19DQiBmdW5jLCAKKwkJdm9pZAkqZGF0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2Uvd3Jlc2l6ZS5jICovCisKKyN1bmRlZiB3cmVzaXplCitpbnQJd3Jlc2l6ZSgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hY2Nlc3MuYyAqLworCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxuY19hbGxvYy5oPgorCisjdW5kZWYgX25jX3Jvb3RuYW1lCitjaGFyCSpfbmNfcm9vdG5hbWUoCisJCWNoYXIJKnBhdGgpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2lzX2Fic19wYXRoCitOQ1VSU0VTX0JPT0wgX25jX2lzX2Fic19wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcGF0aGxhc3QKK3Vuc2lnbmVkIF9uY19wYXRobGFzdCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKih1bnNpZ25lZCAqKTApOyB9CisKKyN1bmRlZiBfbmNfYmFzZW5hbWUKK2NoYXIJKl9uY19iYXNlbmFtZSgKKwkJY2hhcgkqcGF0aCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfYWNjZXNzCitpbnQJX25jX2FjY2VzcygKKwkJY29uc3QgY2hhciAqcGF0aCwgCisJCWludAltb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaXNfZGlyX3BhdGgKK05DVVJTRVNfQk9PTCBfbmNfaXNfZGlyX3BhdGgoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19pc19maWxlX3BhdGgKK05DVVJTRVNfQk9PTCBfbmNfaXNfZmlsZV9wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZW52X2FjY2VzcworaW50CV9uY19lbnZfYWNjZXNzKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hZGRfdHJpZXMuYyAqLworCisjdW5kZWYgX25jX2FkZF90b190cnkKK2ludAlfbmNfYWRkX3RvX3RyeSgKKwkJVFJJRVMJKip0cmVlLCAKKwkJY29uc3QgY2hhciAqc3RyLCAKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2FsbG9jX3R0eXBlLmMgKi8KKworI3VuZGVmIF9uY19hbGlnbl90ZXJtdHlwZQordm9pZAlfbmNfYWxpZ25fdGVybXR5cGUoCisJCVRFUk1UWVBFICp0bywgCisJCVRFUk1UWVBFICpmcm9tKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2NvcHlfdGVybXR5cGUKK3ZvaWQJX25jX2NvcHlfdGVybXR5cGUoCisJCVRFUk1UWVBFICpkc3QsIAorCQlURVJNVFlQRSAqc3JjKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2NvZGVzLmMgKi8KKworI3VuZGVmIGJvb2xjb2RlcworY2hhcgkqY29uc3QgYm9vbGNvZGVzW10gPSB7MH07CisjdW5kZWYgbnVtY29kZXMKK2NoYXIJKmNvbnN0IG51bWNvZGVzW10gPSB7MH07CisjdW5kZWYgc3RyY29kZXMKK2NoYXIJKmNvbnN0IHN0cmNvZGVzW10gPSB7MH07CisKKy8qIC4vdGluZm8vY29tcF9lcnJvci5jICovCisjdW5kZWYgX25jX3N1cHByZXNzX3dhcm5pbmdzCitOQ1VSU0VTX0JPT0wgX25jX3N1cHByZXNzX3dhcm5pbmdzOworI3VuZGVmIF9uY19jdXJyX2xpbmUKK2ludAlfbmNfY3Vycl9saW5lOworI3VuZGVmIF9uY19jdXJyX2NvbAoraW50CV9uY19jdXJyX2NvbDsKKworI3VuZGVmIF9uY19nZXRfc291cmNlCitjb25zdCBjaGFyICpfbmNfZ2V0X3NvdXJjZSh2b2lkKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19zZXRfc291cmNlCit2b2lkCV9uY19zZXRfc291cmNlKAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NldF90eXBlCit2b2lkCV9uY19zZXRfdHlwZSgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfdHlwZQordm9pZAlfbmNfZ2V0X3R5cGUoCisJCWNoYXIJKm5hbWUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfd2FybmluZwordm9pZAlfbmNfd2FybmluZygKKwkJY29uc3QgY2hhciAqY29uc3QgZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2Vycl9hYm9ydAordm9pZAlfbmNfZXJyX2Fib3J0KAorCQljb25zdCBjaGFyICpjb25zdCBmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc3lzZXJyX2Fib3J0Cit2b2lkCV9uY19zeXNlcnJfYWJvcnQoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9kYl9pdGVyYXRvci5jICovCisKKyN1bmRlZiBfbmNfdGljX2RpcgorY29uc3QgY2hhciAqX25jX3RpY19kaXIoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2tlZXBfdGljX2Rpcgordm9pZAlfbmNfa2VlcF90aWNfZGlyKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2xhc3RfZGIKK3ZvaWQJX25jX2xhc3RfZGIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19uZXh0X2RiCitjb25zdCBjaGFyICpfbmNfbmV4dF9kYigKKwkJREJESVJTCSpzdGF0ZSwgCisJCWludAkqb2Zmc2V0KQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19maXJzdF9kYgordm9pZAlfbmNfZmlyc3RfZGIoCisJCURCRElSUwkqc3RhdGUsIAorCQlpbnQJKm9mZnNldCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9kb2FsbG9jLmMgKi8KKworI3VuZGVmIF9uY19kb2FsbG9jCit2b2lkCSpfbmNfZG9hbGxvYygKKwkJdm9pZAkqb2xkcCwgCisJCXNpemVfdAlhbW91bnQpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL3RpbmZvL2VudHJpZXMuYyAqLworCisjdW5kZWYgX25jX2hlYWQKK0VOVFJZCSpfbmNfaGVhZDsKKyN1bmRlZiBfbmNfdGFpbAorRU5UUlkJKl9uY190YWlsOworCisjdW5kZWYgX25jX2ZyZWVfZW50cnkKK3ZvaWQJX25jX2ZyZWVfZW50cnkoCisJCUVOVFJZCSpoZWFkcCwgCisJCVRFUk1UWVBFICp0dGVybSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19mcmVlX2VudHJpZXMKK3ZvaWQJX25jX2ZyZWVfZW50cmllcygKKwkJRU5UUlkJKmhlYWRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2RlbGlua19lbnRyeQorRU5UUlkJKl9uY19kZWxpbmtfZW50cnkoCisJCUVOVFJZCSpoZWFkcCwgCisJCVRFUk1UWVBFICp0dGVybSkKKwkJeyByZXR1cm4oKihFTlRSWSAqKikwKTsgfQorCisjdW5kZWYgX25jX2xlYWtzX3RpbmZvCit2b2lkCV9uY19sZWFrc190aW5mbyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2ZhbGxiYWNrLmMgKi8KKworI3VuZGVmIF9uY19mYWxsYmFjaworY29uc3QgVEVSTVRZUEUgKl9uY19mYWxsYmFjaygKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihjb25zdCBURVJNVFlQRSAqKikwKTsgfQorCisvKiAuL3RpbmZvL2ZyZWVfdHR5cGUuYyAqLworCisjdW5kZWYgX25jX2ZyZWVfdGVybXR5cGUKK3ZvaWQJX25jX2ZyZWVfdGVybXR5cGUoCisJCVRFUk1UWVBFICpwdHIpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdXNlcl9kZWZpbmFibGUKK05DVVJTRVNfQk9PTCBfbmNfdXNlcl9kZWZpbmFibGU7CisKKyN1bmRlZiB1c2VfZXh0ZW5kZWRfbmFtZXMKK2ludAl1c2VfZXh0ZW5kZWRfbmFtZXMoCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vZ2V0ZW52X251bS5jICovCisKKyN1bmRlZiBfbmNfZ2V0ZW52X251bQoraW50CV9uY19nZXRlbnZfbnVtKAorCQljb25zdCBjaGFyICpuYW1lKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vaG9tZV90ZXJtaW5mby5jICovCisKKyN1bmRlZiBfbmNfaG9tZV90ZXJtaW5mbworY2hhcgkqX25jX2hvbWVfdGVybWluZm8odm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vaW5pdF9rZXl0cnkuYyAqLworCisjaWYgMAorCisjaW5jbHVkZSA8aW5pdF9rZXl0cnkuaD4KKworI3VuZGVmIF9uY190aW5mb19ma2V5cworY29uc3Qgc3RydWN0IHRpbmZvX2ZrZXlzIF9uY190aW5mb19ma2V5c1tdID0gezB9OworCisjZW5kaWYKKworI3VuZGVmIF9uY19pbml0X2tleXRyeQordm9pZAlfbmNfaW5pdF9rZXl0cnkoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vbGliX2Fjcy5jICovCisKKyN1bmRlZiBhY3NfbWFwCitjaHR5cGUJYWNzX21hcFsxMjhdOworCisjdW5kZWYgX25jX2luaXRfYWNzCit2b2lkCV9uY19pbml0X2Fjcyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2xpYl9iYXVkcmF0ZS5jICovCisKKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CisKK3N0cnVjdCBzcGVlZCB7CisgICAgaW50IHM7IAorICAgIGludCBzcDsgCit9OworCisjdW5kZWYgX25jX2JhdWRyYXRlCitpbnQJX25jX2JhdWRyYXRlKAorCQlpbnQJT1NwZWVkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfb3NwZWVkCitpbnQJX25jX29zcGVlZCgKKwkJaW50CUJhdWRSYXRlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBiYXVkcmF0ZQoraW50CWJhdWRyYXRlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfY3VyX3Rlcm0uYyAqLworCisjdW5kZWYgY3VyX3Rlcm0KK1RFUk1JTkFMICpjdXJfdGVybTsKKworI3VuZGVmIHNldF9jdXJ0ZXJtCitURVJNSU5BTCAqc2V0X2N1cnRlcm0oCisJCVRFUk1JTkFMICp0ZXJtcCkKKwkJeyByZXR1cm4oKihURVJNSU5BTCAqKikwKTsgfQorCisjdW5kZWYgZGVsX2N1cnRlcm0KK2ludAlkZWxfY3VydGVybSgKKwkJVEVSTUlOQUwgKnRlcm1wKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2RhdGEuYyAqLworCisjdW5kZWYgc3Rkc2NyCitXSU5ET1cJKnN0ZHNjcjsKKyN1bmRlZiBjdXJzY3IKK1dJTkRPVwkqY3Vyc2NyOworI3VuZGVmIG5ld3NjcgorV0lORE9XCSpuZXdzY3I7CisjdW5kZWYgX25jX3NjcmVlbl9jaGFpbgorU0NSRUVOCSpfbmNfc2NyZWVuX2NoYWluOworI3VuZGVmIFNQCitTQ1JFRU4JKlNQOworI3VuZGVmIF9uY19nbG9iYWxzCitOQ1VSU0VTX0dMT0JBTFMgX25jX2dsb2JhbHM7CisjdW5kZWYgX25jX3ByZXNjcmVlbgorTkNVUlNFU19QUkVTQ1JFRU4gX25jX3ByZXNjcmVlbjsKKworLyogLi90aW5mby9saWJfaGFzX2NhcC5jICovCisKKyN1bmRlZiBoYXNfaWMKK05DVVJTRVNfQk9PTCBoYXNfaWModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaGFzX2lsCitOQ1VSU0VTX0JPT0wgaGFzX2lsKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi90aW5mby9saWJfa2VybmVsLmMgKi8KKworI3VuZGVmIGVyYXNlY2hhcgorY2hhcgllcmFzZWNoYXIodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICopMCk7IH0KKworI3VuZGVmIGtpbGxjaGFyCitjaGFyCWtpbGxjaGFyKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKTApOyB9CisKKyN1bmRlZiBmbHVzaGlucAoraW50CWZsdXNoaW5wKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9saWJfa2V5bmFtZS5jICovCisKK3N0cnVjdCBrbiB7IHNob3J0IG9mZnNldDsgaW50IGNvZGU7IH07CisKKyN1bmRlZiBfbmNfa2V5bmFtZQorY2hhcgkqX25jX2tleW5hbWUoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBrZXluYW1lCitjaGFyCSprZXluYW1lKAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2xvbmduYW1lLmMgKi8KKworI3VuZGVmIGxvbmduYW1lCitjaGFyCSpsb25nbmFtZSh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfbmFwbXMuYyAqLworCisjaW5jbHVkZSA8dGltZS5oPgorCisjdW5kZWYgbmFwbXMKK2ludAluYXBtcygKKwkJaW50CW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX29wdGlvbnMuYyAqLworCisjdW5kZWYgaWRsb2sKK2ludAlpZGxvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaWRjb2sKK3ZvaWQJaWRjb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBoYWxmZGVsYXkKK2ludAloYWxmZGVsYXkoCisJCWludAl0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2RlbGF5CitpbnQJbm9kZWxheSgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm90aW1lb3V0CitpbnQJbm90aW1lb3V0KAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3dGltZW91dAordm9pZAl3dGltZW91dCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJZGVsYXkpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBrZXlwYWQKK2ludAlrZXlwYWQoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1ldGEKK2ludAltZXRhKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjdXJzX3NldAoraW50CWN1cnNfc2V0KAorCQlpbnQJdmlzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0eXBlYWhlYWQKK2ludAl0eXBlYWhlYWQoCisJCWludAlmZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaGFzX2tleQoraW50CWhhc19rZXkoCisJCWludAlrZXljb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfa2V5cGFkCitpbnQJX25jX2tleXBhZCgKKwkJU0NSRUVOCSpzcCwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Jhdy5jICovCisKKyN1bmRlZiByYXcKK2ludAlyYXcodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2JyZWFrCitpbnQJY2JyZWFrKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHFpZmx1c2gKK3ZvaWQJcWlmbHVzaCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbm9yYXcKK2ludAlub3Jhdyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2NicmVhaworaW50CW5vY2JyZWFrKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vcWlmbHVzaAordm9pZAlub3FpZmx1c2godm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGludHJmbHVzaAoraW50CWludHJmbHVzaCgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9zZXR1cC5jICovCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsYW5naW5mby5oPgorCisjdW5kZWYgdHR5dHlwZQorY2hhcgl0dHl0eXBlWzI1Nl07CisjdW5kZWYgTElORVMKK2ludAlMSU5FUzsKKyN1bmRlZiBDT0xTCitpbnQJQ09MUzsKKyN1bmRlZiBUQUJTSVpFCitpbnQJVEFCU0laRTsKKworI3VuZGVmIHNldF90YWJzaXplCitpbnQJc2V0X3RhYnNpemUoCisJCWludAl2YWx1ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2hhbmRsZV9zaWd3aW5jaAoraW50CV9uY19oYW5kbGVfc2lnd2luY2goCisJCVNDUkVFTgkqc3ApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVzZV9lbnYKK3ZvaWQJdXNlX2VudigKKwkJTkNVUlNFU19CT09MIGYpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X3NjcmVlbnNpemUKK3ZvaWQJX25jX2dldF9zY3JlZW5zaXplKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CSpsaW5lcCwgCisJCWludAkqY29scCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY191cGRhdGVfc2NyZWVuc2l6ZQordm9pZAlfbmNfdXBkYXRlX3NjcmVlbnNpemUoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X2xvY2FsZQorY2hhcgkqX25jX2dldF9sb2NhbGUodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdW5pY29kZV9sb2NhbGUKK2ludAlfbmNfdW5pY29kZV9sb2NhbGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2xvY2FsZV9icmVha3NfYWNzCitpbnQJX25jX2xvY2FsZV9icmVha3NfYWNzKAorCQlURVJNSU5BTCAqdGVybXApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zZXR1cHRlcm0KK2ludAlfbmNfc2V0dXB0ZXJtKAorCQljaGFyCSp0bmFtZSwgCisJCWludAlGaWxlZGVzLCAKKwkJaW50CSplcnJyZXQsIAorCQlOQ1VSU0VTX0JPT0wgcmV1c2UpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldHVwdGVybQoraW50CXNldHVwdGVybSgKKwkJY2hhcgkqdG5hbWUsIAorCQlpbnQJRmlsZWRlcywgCisJCWludAkqZXJycmV0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Rlcm1jYXAuYyAqLworCisjdW5kZWYgVVAKK2NoYXIJKlVQOworI3VuZGVmIEJDCitjaGFyCSpCQzsKKworI3VuZGVmIHRnZXRlbnQKK2ludAl0Z2V0ZW50KAorCQljaGFyCSpidWZwLCAKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjaWYgMAorCisjaW5jbHVkZSA8Y2FwZGVmYXVsdHMuYz4KKworI2VuZGlmCisKKyN1bmRlZiB0Z2V0ZmxhZworaW50CXRnZXRmbGFnKAorCQljaGFyCSppZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGdldG51bQoraW50CXRnZXRudW0oCisJCWNoYXIJKmlkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0Z2V0c3RyCitjaGFyCSp0Z2V0c3RyKAorCQljaGFyCSppZCwgCisJCWNoYXIJKiphcmVhKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdGVybW5hbWUuYyAqLworCisjdW5kZWYgdGVybW5hbWUKK2NoYXIJKnRlcm1uYW1lKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90Z290by5jICovCisKKyN1bmRlZiB0Z290bworY2hhcgkqdGdvdG8oCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWludAl4LCAKKwkJaW50CXkpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90aS5jICovCisKKyN1bmRlZiB0aWdldGZsYWcKK2ludAl0aWdldGZsYWcoCisJCWNoYXIJKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGlnZXRudW0KK2ludAl0aWdldG51bSgKKwkJY2hhcgkqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0aWdldHN0cgorY2hhcgkqdGlnZXRzdHIoCisJCWNoYXIJKnN0cikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3RwYXJtLmMgKi8KKworI3VuZGVmIF9uY190cGFybV9lcnIKK2ludAlfbmNfdHBhcm1fZXJyOworCisjdW5kZWYgX25jX3RwYXJtX2FuYWx5emUKK2ludAlfbmNfdHBhcm1fYW5hbHl6ZSgKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJY2hhcgkqcF9pc19zWzldLCAKKwkJaW50CSpwb3Bjb3VudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdHBhcm0KK2NoYXIJKnRwYXJtKAorCQljaGFyCSpzdHJpbmcsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90cHV0cy5jICovCisKKyN1bmRlZiBQQworY2hhcglQQzsKKyN1bmRlZiBvc3BlZWQKK05DVVJTRVNfT1NQRUVECW9zcGVlZDsKKyN1bmRlZiBfbmNfbnVsbHNfc2VudAoraW50CV9uY19udWxsc19zZW50OworCisjdW5kZWYgX25jX3NldF9ub19wYWRkaW5nCit2b2lkCV9uY19zZXRfbm9fcGFkZGluZygKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGRlbGF5X291dHB1dAoraW50CWRlbGF5X291dHB1dCgKKwkJaW50CW1zKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZmx1c2gKK3ZvaWQJX25jX2ZsdXNoKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfb3V0Y2gKK2ludAlfbmNfb3V0Y2goCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcHV0cAoraW50CXB1dHAoCisJCWNvbnN0IGNoYXIgKnN0cmluZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdHB1dHMKK2ludAl0cHV0cygKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJaW50CWFmZmNudCwgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlLmMgKi8KKworI3VuZGVmIF9uY190cmFjaW5nCit1bnNpZ25lZCBfbmNfdHJhY2luZzsKKyN1bmRlZiBfbmNfdHB1dHNfdHJhY2UKK2NvbnN0IGNoYXIgKl9uY190cHV0c190cmFjZSA9IHswfTsKKyN1bmRlZiBfbmNfb3V0Y2hhcnMKK2xvbmcJX25jX291dGNoYXJzOworCisjdW5kZWYgdHJhY2UKK3ZvaWQJdHJhY2UoCisJCWNvbnN0IHVuc2lnbmVkIGludCB0cmFjZWxldmVsKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX3RyYWNlZgordm9pZAlfdHJhY2VmKAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9ib29sCitOQ1VSU0VTX0JPT0wgX25jX3JldHJhY2VfYm9vbCgKKwkJTkNVUlNFU19CT09MIGNvZGUpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2ludAoraW50CV9uY19yZXRyYWNlX2ludCgKKwkJaW50CWNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3Vuc2lnbmVkCit1bnNpZ25lZCBfbmNfcmV0cmFjZV91bnNpZ25lZCgKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKih1bnNpZ25lZCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9wdHIKK2NoYXIJKl9uY19yZXRyYWNlX3B0cigKKwkJY2hhcgkqY29kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9jcHRyCitjb25zdCBjaGFyICpfbmNfcmV0cmFjZV9jcHRyKAorCQljb25zdCBjaGFyICpjb2RlKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2N2b2lkX3B0cgordm9pZAkqX25jX3JldHJhY2VfY3ZvaWRfcHRyKAorCQl2b2lkCSpjb2RlKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3ZvaWRfcHRyCit2b2lkCSpfbmNfcmV0cmFjZV92b2lkX3B0cigKKwkJdm9pZAkqY29kZSkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9zcAorU0NSRUVOCSpfbmNfcmV0cmFjZV9zcCgKKwkJU0NSRUVOCSpjb2RlKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2Vfd2luCitXSU5ET1cJKl9uY19yZXRyYWNlX3dpbigKKwkJV0lORE9XCSpjb2RlKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWF0ci5jICovCisKKyN1bmRlZiBfdHJhY2VhdHRyMgorY2hhcgkqX3RyYWNlYXR0cjIoCisJCWludAlidWZudW0sIAorCQljaHR5cGUJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VhdHRyCitjaGFyCSpfdHJhY2VhdHRyKAorCQlhdHRyX3QJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9hdHRyX3QKK2F0dHJfdAlfbmNfcmV0cmFjZV9hdHRyX3QoCisJCWF0dHJfdAljb2RlKQorCQl7IHJldHVybigqKGF0dHJfdCAqKTApOyB9CisKKyN1bmRlZiBfbmNfYWx0Y2hhcnNldF9uYW1lCitjb25zdCBjaGFyICpfbmNfYWx0Y2hhcnNldF9uYW1lKAorCQlhdHRyX3QJYXR0ciwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjaHR5cGUyCitjaGFyCSpfdHJhY2VjaHR5cGUyKAorCQlpbnQJYnVmbnVtLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWNodHlwZQorY2hhcgkqX3RyYWNlY2h0eXBlKAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfY2h0eXBlCitjaHR5cGUJX25jX3JldHJhY2VfY2h0eXBlKAorCQljaHR5cGUJY29kZSkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWJpdHMuYyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IHZhbDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfSBCSVROQU1FUzsKKworI3VuZGVmIF9uY190cmFjZV90dHltb2RlCitjaGFyCSpfbmNfdHJhY2VfdHR5bW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKnR0eSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdHJhY2ViaXRzCitjaGFyCSpfbmNfdHJhY2ViaXRzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWNoci5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VjaGFyCitjaGFyCSpfbmNfdHJhY2VjaGFyKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWNoYXIKK2NoYXIJKl90cmFjZWNoYXIoCisJCWludAljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3R0eWZsYWdzLmMgKi8KKworI3VuZGVmIF9uY19nZXRfdHR5X21vZGUKK2ludAlfbmNfZ2V0X3R0eV9tb2RlKAorCQlzdHJ1Y3QgdGVybWlvcyAqYnVmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2V0X3R0eV9tb2RlCitpbnQJX25jX3NldF90dHlfbW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKmJ1ZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVmX3NoZWxsX21vZGUKK2ludAlkZWZfc2hlbGxfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWZfcHJvZ19tb2RlCitpbnQJZGVmX3Byb2dfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZXNldF9wcm9nX21vZGUKK2ludAlyZXNldF9wcm9nX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXRfc2hlbGxfbW9kZQoraW50CXJlc2V0X3NoZWxsX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2F2ZXR0eQoraW50CXNhdmV0dHkodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXR0eQoraW50CXJlc2V0dHkodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfdHdhaXQuYyAqLworCisjdW5kZWYgX25jX3RpbWVkX3dhaXQKK2ludAlfbmNfdGltZWRfd2FpdCgKKwkJU0NSRUVOCSpzcCwgCisJCWludAltb2RlLCAKKwkJaW50CW1pbGxpc2Vjb25kcywgCisJCWludAkqdGltZWxlZnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9uYW1lX21hdGNoLmMgKi8KKworI3VuZGVmIF9uY19maXJzdF9uYW1lCitjaGFyCSpfbmNfZmlyc3RfbmFtZSgKKwkJY29uc3QgY2hhciAqY29uc3Qgc3ApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX25hbWVfbWF0Y2gKK2ludAlfbmNfbmFtZV9tYXRjaCgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZWxzdCwgCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIAorCQljb25zdCBjaGFyICpjb25zdCBkZWxpbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL25hbWVzLmMgKi8KKworI3VuZGVmIGJvb2xuYW1lcworY2hhcgkqY29uc3QgYm9vbG5hbWVzW10gPSB7MH07CisjdW5kZWYgYm9vbGZuYW1lcworY2hhcgkqY29uc3QgYm9vbGZuYW1lc1tdID0gezB9OworI3VuZGVmIG51bW5hbWVzCitjaGFyCSpjb25zdCBudW1uYW1lc1tdID0gezB9OworI3VuZGVmIG51bWZuYW1lcworY2hhcgkqY29uc3QgbnVtZm5hbWVzW10gPSB7MH07CisjdW5kZWYgc3RybmFtZXMKK2NoYXIJKmNvbnN0IHN0cm5hbWVzW10gPSB7MH07CisjdW5kZWYgc3RyZm5hbWVzCitjaGFyCSpjb25zdCBzdHJmbmFtZXNbXSA9IHswfTsKKworLyogLi90aW5mby9yZWFkX2VudHJ5LmMgKi8KKworI2luY2x1ZGUgPGhhc2hlZF9kYi5oPgorCisjdW5kZWYgX25jX3JlYWRfdGVybXR5cGUKK2ludAlfbmNfcmVhZF90ZXJtdHlwZSgKKwkJVEVSTVRZUEUgKnB0ciwgCisJCWNoYXIJKmJ1ZmZlciwgCisJCWludAlsaW1pdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JlYWRfZmlsZV9lbnRyeQoraW50CV9uY19yZWFkX2ZpbGVfZW50cnkoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZpbGVuYW1lLCAKKwkJVEVSTVRZUEUgKnB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JlYWRfZW50cnkKK2ludAlfbmNfcmVhZF9lbnRyeSgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSwgCisJCWNoYXIJKmNvbnN0IGZpbGVuYW1lLCAKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vcmVhZF90ZXJtY2FwLmMgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjdW5kZWYgX25jX3JlYWRfdGVybWNhcF9lbnRyeQoraW50CV9uY19yZWFkX3Rlcm1jYXBfZW50cnkoCisJCWNvbnN0IGNoYXIgKmNvbnN0IHRuLCAKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vc2V0YnVmLmMgKi8KKworI3VuZGVmIF9uY19zZXRfYnVmZmVyCit2b2lkCV9uY19zZXRfYnVmZmVyKAorCQlGSUxFCSpvZnAsIAorCQlOQ1VSU0VTX0JPT0wgYnVmZmVyZWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vc3RyaW5ncy5jICovCisKKyN1bmRlZiBfbmNfc3RyX2luaXQKK3N0cmluZ19kZXNjICpfbmNfc3RyX2luaXQoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQljaGFyCSpzcmMsIAorCQlzaXplX3QJbGVuKQorCQl7IHJldHVybigqKHN0cmluZ19kZXNjICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc3RyX251bGwKK3N0cmluZ19kZXNjICpfbmNfc3RyX251bGwoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQlzaXplX3QJbGVuKQorCQl7IHJldHVybigqKHN0cmluZ19kZXNjICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc3RyX2NvcHkKK3N0cmluZ19kZXNjICpfbmNfc3RyX2NvcHkoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQlzdHJpbmdfZGVzYyAqc3JjKQorCQl7IHJldHVybigqKHN0cmluZ19kZXNjICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2FmZV9zdHJjYXQKK05DVVJTRVNfQk9PTCBfbmNfc2FmZV9zdHJjYXQoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQljb25zdCBjaGFyICpzcmMpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19zYWZlX3N0cmNweQorTkNVUlNFU19CT09MIF9uY19zYWZlX3N0cmNweSgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCWNvbnN0IGNoYXIgKnNyYykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL3RyYWNlL3RyYWNlX2J1Zi5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VfYnVmCitjaGFyCSpfbmNfdHJhY2VfYnVmKAorCQlpbnQJYnVmbnVtLCAKKwkJc2l6ZV90CXdhbnQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3RyYWNlX2J1ZmNhdAorY2hhcgkqX25jX3RyYWNlX2J1ZmNhdCgKKwkJaW50CWJ1Zm51bSwgCisJCWNvbnN0IGNoYXIgKnZhbHVlKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90cmFjZS90cmFjZV90cmllcy5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VfdHJpZXMKK3ZvaWQJX25jX3RyYWNlX3RyaWVzKAorCQlUUklFUwkqdHJlZSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL3RyaWVzLmMgKi8KKworI3VuZGVmIF9uY19leHBhbmRfdHJ5CitjaGFyCSpfbmNfZXhwYW5kX3RyeSgKKwkJVFJJRVMJKnRyZWUsIAorCQl1bnNpZ25lZCBjb2RlLCAKKwkJaW50CSpjb3VudCwgCisJCXNpemVfdAlsZW4pCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JlbW92ZV9rZXkKK2ludAlfbmNfcmVtb3ZlX2tleSgKKwkJVFJJRVMJKip0cmVlLCAKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JlbW92ZV9zdHJpbmcKK2ludAlfbmNfcmVtb3ZlX3N0cmluZygKKwkJVFJJRVMJKip0cmVlLCAKKwkJY29uc3QgY2hhciAqc3RyaW5nKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vdHJpbV9zZ3IwLmMgKi8KKworI3VuZGVmIF9uY190cmltX3NncjAKK2NoYXIJKl9uY190cmltX3NncjAoCisJCVRFUk1UWVBFICp0cCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdW5jdHJsLmMgKi8KKworI3VuZGVmIF9uY191bmN0cmwKK2NoYXIJKl9uY191bmN0cmwoCisJCVNDUkVFTgkqc3AsIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgdW5jdHJsCitjaGFyCSp1bmN0cmwoCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHJhY2UvdmlzYnVmLmMgKi8KKworI3VuZGVmIF9uY192aXNidWYyCitjb25zdCBjaGFyICpfbmNfdmlzYnVmMigKKwkJaW50CWJ1Zm51bSwgCisJCWNvbnN0IGNoYXIgKmJ1ZikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzYnVmCitjb25zdCBjaGFyICpfbmNfdmlzYnVmKAorCQljb25zdCBjaGFyICpidWYpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc2J1Zm4KK2NvbnN0IGNoYXIgKl9uY192aXNidWZuKAorCQljb25zdCBjaGFyICpidWYsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXNjYnVmMgorY29uc3QgY2hhciAqX25jX3Zpc2NidWYyKAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3QgY2h0eXBlICpidWYsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXNjYnVmCitjb25zdCBjaGFyICpfbmNfdmlzY2J1ZigKKwkJY29uc3QgY2h0eXBlICpidWYsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9hbGxvY19lbnRyeS5jICovCisKKyN1bmRlZiBfbmNfaW5pdF9lbnRyeQordm9pZAlfbmNfaW5pdF9lbnRyeSgKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2NvcHlfZW50cnkKK0VOVFJZCSpfbmNfY29weV9lbnRyeSgKKwkJRU5UUlkJKm9sZHApCisJCXsgcmV0dXJuKCooRU5UUlkgKiopMCk7IH0KKworI3VuZGVmIF9uY19zYXZlX3N0cgorY2hhcgkqX25jX3NhdmVfc3RyKAorCQljb25zdCBjaGFyICpjb25zdCBzdHJpbmcpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3dyYXBfZW50cnkKK3ZvaWQJX25jX3dyYXBfZW50cnkoCisJCUVOVFJZCSpjb25zdCBlcCwgCisJCU5DVVJTRVNfQk9PTCBjb3B5X3N0cmluZ3MpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbWVyZ2VfZW50cnkKK3ZvaWQJX25jX21lcmdlX2VudHJ5KAorCQlURVJNVFlQRSAqY29uc3QgdG8sIAorCQlURVJNVFlQRSAqY29uc3QgZnJvbSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9jYXB0b2luZm8uYyAqLworCisjdW5kZWYgX25jX2NhcHRvaW5mbworY2hhcgkqX25jX2NhcHRvaW5mbygKKwkJY29uc3QgY2hhciAqY2FwLCAKKwkJY29uc3QgY2hhciAqcywgCisJCWludCBjb25zdCBwYXJhbWV0ZXJpemVkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19pbmZvdG9jYXAKK2NoYXIJKl9uY19pbmZvdG9jYXAoCisJCWNvbnN0IGNoYXIgKmNhcCwgCisJCWNvbnN0IGNoYXIgKnN0ciwgCisJCWludCBjb25zdCBwYXJhbWV0ZXJpemVkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9jb21wX2NhcHRhYi5jICovCisKKyNpbmNsdWRlIDxoYXNoc2l6ZS5oPgorCisjdW5kZWYgX25jX2dldF90YWJsZQorY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKl9uY19nZXRfdGFibGUoCisJCU5DVVJTRVNfQk9PTCB0ZXJtY2FwKQorCQl7IHJldHVybigqKGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZ2V0X2hhc2hfdGFibGUKK2NvbnN0IHNob3J0ICpfbmNfZ2V0X2hhc2hfdGFibGUoCisJCU5DVVJTRVNfQk9PTCB0ZXJtY2FwKQorCQl7IHJldHVybigqKGNvbnN0IHNob3J0ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZ2V0X2FsaWFzX3RhYmxlCitjb25zdCBzdHJ1Y3QgYWxpYXMgKl9uY19nZXRfYWxpYXNfdGFibGUoCisJCU5DVVJTRVNfQk9PTCB0ZXJtY2FwKQorCQl7IHJldHVybigqKGNvbnN0IHN0cnVjdCBhbGlhcyAqKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfZXhwYW5kLmMgKi8KKworI3VuZGVmIF9uY190aWNfZXhwYW5kCitjaGFyCSpfbmNfdGljX2V4cGFuZCgKKwkJY29uc3QgY2hhciAqc3JjcCwgCisJCU5DVVJTRVNfQk9PTCB0aWNfZm9ybWF0LCAKKwkJaW50CW51bWJlcnMpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfaGFzaC5jICovCisKKyN1bmRlZiBfbmNfZmluZF9lbnRyeQorc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKl9uY19maW5kX2VudHJ5KAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQljb25zdCBzaG9ydCAqaGFzaF90YWJsZSkKKwkJeyByZXR1cm4oKihzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKikwKTsgfQorCisjdW5kZWYgX25jX2ZpbmRfdHlwZV9lbnRyeQorc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKl9uY19maW5kX3R5cGVfZW50cnkoCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWludAl0eXBlLCAKKwkJY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKnRhYmxlKQorCQl7IHJldHVybigqKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICoqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9wYXJzZS5jICovCisKKyN1bmRlZiBfbmNfY2hlY2tfdGVybXR5cGUyCit2b2lkCSgqX25jX2NoZWNrX3Rlcm10eXBlMikoCisJCVRFUk1UWVBFICpwMSwgCisJCU5DVVJTRVNfQk9PTCBwMik7CisjdW5kZWYgX25jX2NoZWNrX3Rlcm10eXBlCit2b2lkCSgqX25jX2NoZWNrX3Rlcm10eXBlKSgKKwkJVEVSTVRZUEUgKnAxKTsKKworI3VuZGVmIF9uY19lbnRyeV9tYXRjaAorTkNVUlNFU19CT09MIF9uY19lbnRyeV9tYXRjaCgKKwkJY2hhcgkqbjEsIAorCQljaGFyCSpuMikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3JlYWRfZW50cnlfc291cmNlCit2b2lkCV9uY19yZWFkX2VudHJ5X3NvdXJjZSgKKwkJRklMRQkqZnAsIAorCQljaGFyCSpidWYsIAorCQlpbnQJbGl0ZXJhbCwgCisJCU5DVVJTRVNfQk9PTCBzaWxlbnQsIAorCQlOQ1VSU0VTX0JPT0wgKCpob29rKSgKKwkJRU5UUlkJKnAxKSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19yZXNvbHZlX3VzZXMyCitpbnQJX25jX3Jlc29sdmVfdXNlczIoCisJCU5DVVJTRVNfQk9PTCBmdWxscmVzb2x2ZSwgCisJCU5DVVJTRVNfQk9PTCBsaXRlcmFsKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVzb2x2ZV91c2VzCitpbnQJX25jX3Jlc29sdmVfdXNlcygKKwkJTkNVUlNFU19CT09MIGZ1bGxyZXNvbHZlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9zY2FuLmMgKi8KKworI3VuZGVmIF9uY19zeW50YXgKK2ludAlfbmNfc3ludGF4OworI3VuZGVmIF9uY19jdXJyX2ZpbGVfcG9zCitsb25nCV9uY19jdXJyX2ZpbGVfcG9zOworI3VuZGVmIF9uY19jb21tZW50X3N0YXJ0Citsb25nCV9uY19jb21tZW50X3N0YXJ0OworI3VuZGVmIF9uY19jb21tZW50X2VuZAorbG9uZwlfbmNfY29tbWVudF9lbmQ7CisjdW5kZWYgX25jX3N0YXJ0X2xpbmUKK2xvbmcJX25jX3N0YXJ0X2xpbmU7CisjdW5kZWYgX25jX2N1cnJfdG9rZW4KK3N0cnVjdCB0b2tlbiBfbmNfY3Vycl90b2tlbjsKKyN1bmRlZiBfbmNfZGlzYWJsZV9wZXJpb2QKK05DVVJTRVNfQk9PTCBfbmNfZGlzYWJsZV9wZXJpb2Q7CisKKyN1bmRlZiBfbmNfcmVzZXRfaW5wdXQKK3ZvaWQJX25jX3Jlc2V0X2lucHV0KAorCQlGSUxFCSpmcCwgCisJCWNoYXIJKmJ1ZikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfdG9rZW4KK2ludAlfbmNfZ2V0X3Rva2VuKAorCQlOQ1VSU0VTX0JPT0wgc2lsZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfdHJhbnNfc3RyaW5nCitpbnQJX25jX3RyYW5zX3N0cmluZygKKwkJY2hhcgkqcHRyLCAKKwkJY2hhcgkqbGFzdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3B1c2hfdG9rZW4KK3ZvaWQJX25jX3B1c2hfdG9rZW4oCisJCWludAl0b2tjbGFzcykKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19wYW5pY19tb2RlCit2b2lkCV9uY19wYW5pY19tb2RlKAorCQljaGFyCWNoKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL3BhcnNlX2VudHJ5LmMgKi8KKworI3VuZGVmIF9uY19wYXJzZV9lbnRyeQoraW50CV9uY19wYXJzZV9lbnRyeSgKKwkJc3RydWN0IGVudHJ5ICplbnRyeXAsIAorCQlpbnQJbGl0ZXJhbCwgCisJCU5DVVJTRVNfQk9PTCBzaWxlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19jYXBjbXAKK2ludAlfbmNfY2FwY21wKAorCQljb25zdCBjaGFyICpzLCAKKwkJY29uc3QgY2hhciAqdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqZnJvbTsKKyAgICBjb25zdCBjaGFyICp0bzsKK30gYXNzb2M7CisKKy8qIC4vdGluZm8vd3JpdGVfZW50cnkuYyAqLworCisjdW5kZWYgX25jX3NldF93cml0ZWRpcgordm9pZAlfbmNfc2V0X3dyaXRlZGlyKAorCQljaGFyCSpkaXIpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfd3JpdGVfZW50cnkKK3ZvaWQJX25jX3dyaXRlX2VudHJ5KAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdGljX3dyaXR0ZW4KK2ludAlfbmNfdGljX3dyaXR0ZW4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvZGVmaW5lX2tleS5jICovCisKKyN1bmRlZiBkZWZpbmVfa2V5CitpbnQJZGVmaW5lX2tleSgKKwkJY29uc3QgY2hhciAqc3RyLCAKKwkJaW50CWtleWNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9oYXNoZWRfZGIuYyAqLworCisjdW5kZWYgX25jX2hhc2hlZF9kYgordm9pZAlfbmNfaGFzaGVkX2RiKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9rZXlfZGVmaW5lZC5jICovCisKKyN1bmRlZiBrZXlfZGVmaW5lZAoraW50CWtleV9kZWZpbmVkKAorCQljb25zdCBjaGFyICpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2tleWJvdW5kLmMgKi8KKworI3VuZGVmIGtleWJvdW5kCitjaGFyCSprZXlib3VuZCgKKwkJaW50CWNvZGUsIAorCQlpbnQJY291bnQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL2Jhc2Uva2V5b2suYyAqLworCisjdW5kZWYga2V5b2sKK2ludAlrZXlvaygKKwkJaW50CWMsIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvdmVyc2lvbi5jICovCisKKyN1bmRlZiBjdXJzZXNfdmVyc2lvbgorY29uc3QgY2hhciAqY3Vyc2VzX3ZlcnNpb24odm9pZCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL2xsaWItbG5jdXJzZXN0IGIvbmN1cnNlcy01LjcvbmN1cnNlcy9sbGliLWxuY3Vyc2VzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjllZjYwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9sbGliLWxuY3Vyc2VzdApAQCAtMCwwICsxLDM1MjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBMSU5UTElCUkFSWSAqLworCisvKiAuL3R0eS9oYXJkc2Nyb2xsLmMgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyN1bmRlZiBfbmNfb2xkbnVtcworaW50CSpfbmNfb2xkbnVtczsKKworI3VuZGVmIF9uY19zY3JvbGxfb3B0aW1pemUKK3ZvaWQJX25jX3Njcm9sbF9vcHRpbWl6ZSh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2xpbmVkdW1wCit2b2lkCV9uY19saW5lZHVtcCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3R0eS9oYXNobWFwLmMgKi8KKworI2luY2x1ZGUgPHRlcm0uaD4KKworI3VuZGVmIF9uY19oYXNoX21hcAordm9pZAlfbmNfaGFzaF9tYXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19tYWtlX29sZGhhc2gKK3ZvaWQJX25jX21ha2Vfb2xkaGFzaCgKKwkJaW50CWkpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc2Nyb2xsX29sZGhhc2gKK3ZvaWQJX25jX3Njcm9sbF9vbGRoYXNoKAorCQlpbnQJbiwgCisJCWludAl0b3AsIAorCQlpbnQJYm90KQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX2FkZGNoLmMgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyN1bmRlZiBfbmNfcmVuZGVyCitjaHR5cGUJX25jX3JlbmRlcigKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIF9uY193YWRkY2hfbm9zeW5jCitpbnQJX25jX3dhZGRjaF9ub3N5bmMoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2h0eXBlIGMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRjaAoraW50CXdhZGRjaCgKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdlY2hvY2hhcgoraW50CXdlY2hvY2hhcigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9hZGRzdHIuYyAqLworCisjdW5kZWYgd2FkZG5zdHIKK2ludAl3YWRkbnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICphc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRjaG5zdHIKK2ludAl3YWRkY2huc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNodHlwZSAqYXN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYmVlcC5jICovCisKKyN1bmRlZiBiZWVwCitpbnQJYmVlcCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYmtnZC5jICovCisKKyN1bmRlZiB3YmtnZHNldAordm9pZAl3YmtnZHNldCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3YmtnZAoraW50CXdia2dkKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2JveC5jICovCisKKyN1bmRlZiB3Ym9yZGVyCitpbnQJd2JvcmRlcigKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJbHMsIAorCQljaHR5cGUJcnMsIAorCQljaHR5cGUJdHMsIAorCQljaHR5cGUJYnMsIAorCQljaHR5cGUJdGwsIAorCQljaHR5cGUJdHIsIAorCQljaHR5cGUJYmwsIAorCQljaHR5cGUJYnIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jaGdhdC5jICovCisKKyN1bmRlZiB3Y2hnYXQKK2ludAl3Y2hnYXQoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CW4sIAorCQlhdHRyX3QJYXR0ciwgCisJCXNob3J0CWNvbG9yLCAKKwkJY29uc3Qgdm9pZCAqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NsZWFyLmMgKi8KKworI3VuZGVmIHdjbGVhcgoraW50CXdjbGVhcigKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jbGVhcm9rLmMgKi8KKworI3VuZGVmIGNsZWFyb2sKK2ludAljbGVhcm9rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xyYm90LmMgKi8KKworI3VuZGVmIHdjbHJ0b2JvdAoraW50CXdjbHJ0b2JvdCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jbHJlb2wuYyAqLworCisjdW5kZWYgd2NscnRvZW9sCitpbnQJd2NscnRvZW9sKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NvbG9yLmMgKi8KKworI2luY2x1ZGUgPHRpYy5oPgorCisjdW5kZWYgX25jX0NPTE9SX1BBSVJTCitpbnQJX25jX0NPTE9SX1BBSVJTKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19DT0xPUlMKK2ludAlfbmNfQ09MT1JTKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZXNldF9jb2xvcnMKK05DVVJTRVNfQk9PTCBfbmNfcmVzZXRfY29sb3JzKHZvaWQpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHN0YXJ0X2NvbG9yCitpbnQJc3RhcnRfY29sb3Iodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5pdF9wYWlyCitpbnQJaW5pdF9wYWlyKAorCQlzaG9ydAlwYWlyLCAKKwkJc2hvcnQJZiwgCisJCXNob3J0CWIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluaXRfY29sb3IKK2ludAlpbml0X2NvbG9yKAorCQlzaG9ydAljb2xvciwgCisJCXNob3J0CXIsIAorCQlzaG9ydAlnLCAKKwkJc2hvcnQJYikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2FuX2NoYW5nZV9jb2xvcgorTkNVUlNFU19CT09MIGNhbl9jaGFuZ2VfY29sb3Iodm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaGFzX2NvbG9ycworTkNVUlNFU19CT09MIGhhc19jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgY29sb3JfY29udGVudAoraW50CWNvbG9yX2NvbnRlbnQoCisJCXNob3J0CWNvbG9yLCAKKwkJc2hvcnQJKnIsIAorCQlzaG9ydAkqZywgCisJCXNob3J0CSpiKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwYWlyX2NvbnRlbnQKK2ludAlwYWlyX2NvbnRlbnQoCisJCXNob3J0CXBhaXIsIAorCQlzaG9ydAkqZiwgCisJCXNob3J0CSpiKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZG9fY29sb3IKK3ZvaWQJX25jX2RvX2NvbG9yKAorCQlzaG9ydAlvbGRfcGFpciwgCisJCXNob3J0CXBhaXIsIAorCQlOQ1VSU0VTX0JPT0wgcmV2ZXJzZSwgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX2NvbG9yc2V0LmMgKi8KKworI3VuZGVmIHdjb2xvcl9zZXQKK2ludAl3Y29sb3Jfc2V0KAorCQlXSU5ET1cJKndpbiwgCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2RlbGNoLmMgKi8KKworI3VuZGVmIHdkZWxjaAoraW50CXdkZWxjaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9kZWx3aW4uYyAqLworCisjdW5kZWYgZGVsd2luCitpbnQJZGVsd2luKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2VjaG8uYyAqLworCisjdW5kZWYgZWNobworaW50CWVjaG8odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9lY2hvCitpbnQJbm9lY2hvKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9lbmR3aW4uYyAqLworCisjdW5kZWYgZW5kd2luCitpbnQJZW5kd2luKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9lcmFzZS5jICovCisKKyN1bmRlZiB3ZXJhc2UKK2ludAl3ZXJhc2UoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZmxhc2guYyAqLworCisjdW5kZWYgZmxhc2gKK2ludAlmbGFzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbGliX2dlbi5jICovCisKKyN1bmRlZiBhZGRjaAoraW50CWFkZGNoKAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkY2huc3RyCitpbnQJYWRkY2huc3RyKAorCQljb25zdCBjaHR5cGUgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZGNoc3RyCitpbnQJYWRkY2hzdHIoCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkbnN0cgoraW50CWFkZG5zdHIoCisJCWNvbnN0IGNoYXIgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZHN0cgoraW50CWFkZHN0cigKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cm9mZgoraW50CWF0dHJvZmYoCisJCU5DVVJTRVNfQVRUUl9UCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJvbgoraW50CWF0dHJvbigKKwkJTkNVUlNFU19BVFRSX1QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cnNldAoraW50CWF0dHJzZXQoCisJCU5DVVJTRVNfQVRUUl9UCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfZ2V0CitpbnQJYXR0cl9nZXQoCisJCWF0dHJfdAkqYTEsIAorCQlzaG9ydAkqYTIsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX29mZgoraW50CWF0dHJfb2ZmKAorCQlhdHRyX3QJYTEsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX29uCitpbnQJYXR0cl9vbigKKwkJYXR0cl90CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cl9zZXQKK2ludAlhdHRyX3NldCgKKwkJYXR0cl90CWExLCAKKwkJc2hvcnQJYTIsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBia2dkCitpbnQJYmtnZCgKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJrZ2RzZXQKK3ZvaWQJYmtnZHNldCgKKwkJY2h0eXBlCXopCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBib3JkZXIKK2ludAlib3JkZXIoCisJCWNodHlwZQlhMSwgCisJCWNodHlwZQlhMiwgCisJCWNodHlwZQlhMywgCisJCWNodHlwZQlhNCwgCisJCWNodHlwZQlhNSwgCisJCWNodHlwZQlhNiwgCisJCWNodHlwZQlhNywgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBib3gKK2ludAlib3goCisJCVdJTkRPVwkqYTEsIAorCQljaHR5cGUJYTIsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2hnYXQKK2ludAljaGdhdCgKKwkJaW50CWExLCAKKwkJYXR0cl90CWEyLCAKKwkJc2hvcnQJYTMsIAorCQljb25zdCB2b2lkICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjbGVhcgoraW50CWNsZWFyKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNscnRvYm90CitpbnQJY2xydG9ib3Qodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2xydG9lb2wKK2ludAljbHJ0b2VvbCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjb2xvcl9zZXQKK2ludAljb2xvcl9zZXQoCisJCXNob3J0CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgQ09MT1JfUEFJUgoraW50CUNPTE9SX1BBSVIoCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWxjaAoraW50CWRlbGNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlbGV0ZWxuCitpbnQJZGVsZXRlbG4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZWNob2NoYXIKK2ludAllY2hvY2hhcigKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGVyYXNlCitpbnQJZXJhc2Uodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YmtnZAorY2h0eXBlCWdldGJrZ2QoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgZ2V0Y2gKK2ludAlnZXRjaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRuc3RyCitpbnQJZ2V0bnN0cigKKwkJY2hhcgkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0c3RyCitpbnQJZ2V0c3RyKAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBobGluZQoraW50CWhsaW5lKAorCQljaHR5cGUJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5jaAorY2h0eXBlCWluY2godm9pZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgaW5jaG5zdHIKK2ludAlpbmNobnN0cigKKwkJY2h0eXBlCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbmNoc3RyCitpbnQJaW5jaHN0cigKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbm5zdHIKK2ludAlpbm5zdHIoCisJCWNoYXIJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc2NoCitpbnQJaW5zY2goCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNkZWxsbgoraW50CWluc2RlbGxuKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zZXJ0bG4KK2ludAlpbnNlcnRsbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNuc3RyCitpbnQJaW5zbnN0cigKKwkJY29uc3QgY2hhciAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zc3RyCitpbnQJaW5zc3RyKAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnN0cgoraW50CWluc3RyKAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtb3ZlCitpbnQJbW92ZSgKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkY2gKK2ludAltdmFkZGNoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRjaG5zdHIKK2ludAltdmFkZGNobnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2h0eXBlICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZGNoc3RyCitpbnQJbXZhZGRjaHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZG5zdHIKK2ludAltdmFkZG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkc3RyCitpbnQJbXZhZGRzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Y2hnYXQKK2ludAltdmNoZ2F0KAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQlhdHRyX3QJYTQsIAorCQlzaG9ydAlhNSwgCisJCWNvbnN0IHZvaWQgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12ZGVsY2gKK2ludAltdmRlbGNoKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRjaAoraW50CW12Z2V0Y2goCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmdldG5zdHIKK2ludAltdmdldG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0c3RyCitpbnQJbXZnZXRzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aGxpbmUKK2ludAltdmhsaW5lKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbmNoCitjaHR5cGUJbXZpbmNoKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgbXZpbmNobnN0cgoraW50CW12aW5jaG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbmNoc3RyCitpbnQJbXZpbmNoc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5uc3RyCitpbnQJbXZpbm5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNoYXIJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zY2gKK2ludAltdmluc2NoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNuc3RyCitpbnQJbXZpbnNuc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc3N0cgoraW50CW12aW5zc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc3RyCitpbnQJbXZpbnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ2bGluZQoraW50CW12dmxpbmUoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQlhMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRjaAoraW50CW12d2FkZGNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2h0eXBlIHopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZGNobnN0cgoraW50CW12d2FkZGNobnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNodHlwZSAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkY2hzdHIKK2ludAltdndhZGRjaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNodHlwZSAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkbnN0cgoraW50CW12d2FkZG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRzdHIKK2ludAltdndhZGRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndjaGdhdAoraW50CW12d2NoZ2F0KAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJaW50CWE0LCAKKwkJYXR0cl90CWE1LCAKKwkJc2hvcnQJYTYsIAorCQljb25zdCB2b2lkICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndkZWxjaAoraW50CW12d2RlbGNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldGNoCitpbnQJbXZ3Z2V0Y2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0bnN0cgoraW50CW12d2dldG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndnZXRzdHIKK2ludAltdndnZXRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndobGluZQoraW50CW12d2hsaW5lKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCWE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luY2gKK2NodHlwZQltdndpbmNoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooY2h0eXBlICopMCk7IH0KKworI3VuZGVmIG12d2luY2huc3RyCitpbnQJbXZ3aW5jaG5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luY2hzdHIKK2ludAltdndpbmNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbm5zdHIKK2ludAltdndpbm5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaGFyCSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnNjaAoraW50CW12d2luc2NoKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc25zdHIKK2ludAltdndpbnNuc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zc3RyCitpbnQJbXZ3aW5zc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zdHIKK2ludAltdndpbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3ZsaW5lCitpbnQJbXZ3dmxpbmUoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgUEFJUl9OVU1CRVIKK2ludAlQQUlSX05VTUJFUigKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlZHJhd3dpbgoraW50CXJlZHJhd3dpbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZWZyZXNoCitpbnQJcmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JsCitpbnQJc2NybCgKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcm9sbAoraW50CXNjcm9sbCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzZXRzY3JyZWcKK2ludAlzZXRzY3JyZWcoCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzdGFuZG91dAoraW50CXN0YW5kb3V0KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHN0YW5kZW5kCitpbnQJc3RhbmRlbmQodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdGltZW91dAordm9pZAl0aW1lb3V0KAorCQlpbnQJeikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHRvdWNobGluZQoraW50CXRvdWNobGluZSgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0b3VjaHdpbgoraW50CXRvdWNod2luKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHVudG91Y2h3aW4KK2ludAl1bnRvdWNod2luKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZsaW5lCitpbnQJdmxpbmUoCisJCWNodHlwZQlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2d19wcmludHcKK2ludAl2d19wcmludHcoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaGFyICphMiwgCisJCXZhX2xpc3QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdndfc2NhbncKK2ludAl2d19zY2FudygKKwkJV0lORE9XCSphMSwgCisJCWNoYXIJKmEyLCAKKwkJdmFfbGlzdAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkY2hzdHIKK2ludAl3YWRkY2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaHR5cGUgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRzdHIKK2ludAl3YWRkc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJvbgoraW50CXdhdHRyb24oCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJvZmYKK2ludAl3YXR0cm9mZigKKwkJV0lORE9XCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cnNldAoraW50CXdhdHRyc2V0KAorCQlXSU5ET1cJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyX2dldAoraW50CXdhdHRyX2dldCgKKwkJV0lORE9XCSphMSwgCisJCWF0dHJfdAkqYTIsIAorCQlzaG9ydAkqYTMsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cl9zZXQKK2ludAl3YXR0cl9zZXQoCisJCVdJTkRPVwkqYTEsIAorCQlhdHRyX3QJYTIsIAorCQlzaG9ydAlhMywgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdkZWxldGVsbgoraW50CXdkZWxldGVsbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0c3RyCitpbnQJd2dldHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbmNoc3RyCitpbnQJd2luY2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNlcnRsbgoraW50CXdpbnNlcnRsbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zc3RyCitpbnQJd2luc3N0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnN0cgoraW50CXdpbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzdGFuZG91dAoraW50CXdzdGFuZG91dCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3c3RhbmRlbmQKK2ludAl3c3RhbmRlbmQoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YXR0cnMKK2ludAlnZXRhdHRycygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRjdXJ4CitpbnQJZ2V0Y3VyeCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRjdXJ5CitpbnQJZ2V0Y3VyeSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRiZWd4CitpbnQJZ2V0YmVneCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRiZWd5CitpbnQJZ2V0YmVneSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRtYXh4CitpbnQJZ2V0bWF4eCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRtYXh5CitpbnQJZ2V0bWF4eSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRwYXJ4CitpbnQJZ2V0cGFyeCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRwYXJ5CitpbnQJZ2V0cGFyeSgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0cGFyZW50CitXSU5ET1cJKndnZXRwYXJlbnQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIGlzX2NsZWFyZWQKK05DVVJTRVNfQk9PTCBpc19jbGVhcmVkKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2lkY29rCitOQ1VSU0VTX0JPT0wgaXNfaWRjb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfaWRsb2sKK05DVVJTRVNfQk9PTCBpc19pZGxvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19pbW1lZG9rCitOQ1VSU0VTX0JPT0wgaXNfaW1tZWRvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19rZXlwYWQKK05DVVJTRVNfQk9PTCBpc19rZXlwYWQoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfbGVhdmVvaworTkNVUlNFU19CT09MIGlzX2xlYXZlb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfbm9kZWxheQorTkNVUlNFU19CT09MIGlzX25vZGVsYXkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfbm90aW1lb3V0CitOQ1VSU0VTX0JPT0wgaXNfbm90aW1lb3V0KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX3Njcm9sbG9rCitOQ1VSU0VTX0JPT0wgaXNfc2Nyb2xsb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfc3luY29rCitOQ1VSU0VTX0JPT0wgaXNfc3luY29rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHdnZXRzY3JyZWcKK2ludAl3Z2V0c2NycmVnKAorCQljb25zdCBXSU5ET1cgKmExLCAKKwkJaW50CSphMiwgCisJCWludAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbW91c2VfdHJhZm8KK05DVVJTRVNfQk9PTCBtb3VzZV90cmFmbygKKwkJaW50CSphMSwgCisJCWludAkqYTIsIAorCQlOQ1VSU0VTX0JPT0wgeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2dldGNoLmMgKi8KKworI2luY2x1ZGUgPGZpZm9fZGVmcy5oPgorCisjdW5kZWYgX25jX0VTQ0RFTEFZCitpbnQJX25jX0VTQ0RFTEFZKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldF9lc2NkZWxheQoraW50CXNldF9lc2NkZWxheSgKKwkJaW50CXZhbHVlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfd2dldGNoCitpbnQJX25jX3dnZXRjaCgKKwkJV0lORE9XCSp3aW4sIAorCQl1bnNpZ25lZCBsb25nICpyZXN1bHQsIAorCQlpbnQJdXNlX21ldGEpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRjaAoraW50CXdnZXRjaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9nZXRzdHIuYyAqLworCisjdW5kZWYgd2dldG5zdHIKK2ludAl3Z2V0bnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpzdHIsIAorCQlpbnQJbWF4bGVuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaGxpbmUuYyAqLworCisjdW5kZWYgd2hsaW5lCitpbnQJd2hsaW5lKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW1tZWRvay5jICovCisKKyN1bmRlZiBpbW1lZG9rCit2b2lkCWltbWVkb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfaW5jaHN0ci5jICovCisKKyN1bmRlZiB3aW5jaG5zdHIKK2ludAl3aW5jaG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCSpzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luaXRzY3IuYyAqLworCisjdW5kZWYgaW5pdHNjcgorV0lORE9XCSppbml0c2NyKHZvaWQpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zY2guYyAqLworCisjdW5kZWYgX25jX2luc2VydF9jaAoraW50CV9uY19pbnNlcnRfY2goCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zY2gKK2ludAl3aW5zY2goCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnNkZWwuYyAqLworCisjdW5kZWYgd2luc2RlbGxuCitpbnQJd2luc2RlbGxuKAorCQlXSU5ET1cJKndpbiwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zbnN0ci5jICovCisKKyN1bmRlZiB3aW5zbnN0cgoraW50CXdpbnNuc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNoYXIgKnMsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc3RyLmMgKi8KKworI3VuZGVmIHdpbm5zdHIKK2ludAl3aW5uc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKnN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaXNlbmR3aW4uYyAqLworCisjdW5kZWYgaXNlbmR3aW4KK05DVVJTRVNfQk9PTCBpc2VuZHdpbih2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbGVhdmVvay5jICovCisKKyN1bmRlZiBsZWF2ZW9rCitpbnQJbGVhdmVvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX21vdXNlLmMgKi8KKworI3VuZGVmIGdldG1vdXNlCitpbnQJZ2V0bW91c2UoCisJCU1FVkVOVAkqYWV2ZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB1bmdldG1vdXNlCitpbnQJdW5nZXRtb3VzZSgKKwkJTUVWRU5UCSphZXZlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1vdXNlbWFzaworbW1hc2tfdAltb3VzZW1hc2soCisJCW1tYXNrX3QJbmV3bWFzaywgCisJCW1tYXNrX3QJKm9sZG1hc2spCisJCXsgcmV0dXJuKCoobW1hc2tfdCAqKTApOyB9CisKKyN1bmRlZiB3ZW5jbG9zZQorTkNVUlNFU19CT09MIHdlbmNsb3NlKAorCQljb25zdCBXSU5ET1cgKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIG1vdXNlaW50ZXJ2YWwKK2ludAltb3VzZWludGVydmFsKAorCQlpbnQJbWF4Y2xpY2spCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19oYXNfbW91c2UKK2ludAlfbmNfaGFzX21vdXNlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdtb3VzZV90cmFmbworTkNVUlNFU19CT09MIHdtb3VzZV90cmFmbygKKwkJY29uc3QgV0lORE9XICp3aW4sIAorCQlpbnQJKnBZLCAKKwkJaW50CSpwWCwgCisJCU5DVVJTRVNfQk9PTCB0b19zY3JlZW4pCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9tb3ZlLmMgKi8KKworI3VuZGVmIHdtb3ZlCitpbnQJd21vdmUoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfbXZjdXIuYyAqLworCisjdW5kZWYgX25jX21zZWNfY29zdAoraW50CV9uY19tc2VjX2Nvc3QoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGNhcCwgCisJCWludAlhZmZjbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19tdmN1cl9yZXN1bWUKK3ZvaWQJX25jX212Y3VyX3Jlc3VtZSh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX212Y3VyX2luaXQKK3ZvaWQJX25jX212Y3VyX2luaXQodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19tdmN1cl93cmFwCit2b2lkCV9uY19tdmN1cl93cmFwKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBtdmN1cgoraW50CW12Y3VyKAorCQlpbnQJeW9sZCwgCisJCWludAl4b2xkLCAKKwkJaW50CXluZXcsIAorCQlpbnQJeG5ldykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX29wdGltaXplX2VuYWJsZQoraW50CV9uY19vcHRpbWl6ZV9lbmFibGU7CisKKy8qIC4vYmFzZS9saWJfbXZ3aW4uYyAqLworCisjdW5kZWYgbXZ3aW4KK2ludAltdndpbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJYnksIAorCQlpbnQJYngpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9uZXd0ZXJtLmMgKi8KKworI3VuZGVmIGZpbHRlcgordm9pZAlmaWx0ZXIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG5vZmlsdGVyCit2b2lkCW5vZmlsdGVyKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBuZXd0ZXJtCitTQ1JFRU4JKm5ld3Rlcm0oCisJCWNoYXIJKm5hbWUsIAorCQlGSUxFCSpvZnAsIAorCQlGSUxFCSppZnApCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbmV3d2luLmMgKi8KKworI3VuZGVmIF9uY19mcmVld2luCitpbnQJX25jX2ZyZWV3aW4oCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBuZXd3aW4KK1dJTkRPVwkqbmV3d2luKAorCQlpbnQJbnVtX2xpbmVzLCAKKwkJaW50CW51bV9jb2x1bW5zLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIGRlcndpbgorV0lORE9XCSpkZXJ3aW4oCisJCVdJTkRPVwkqb3JpZywgCisJCWludAludW1fbGluZXMsIAorCQlpbnQJbnVtX2NvbHVtbnMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgc3Vid2luCitXSU5ET1cJKnN1YndpbigKKwkJV0lORE9XCSp3LCAKKwkJaW50CWwsIAorCQlpbnQJYywgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbWFrZW5ldworV0lORE9XCSpfbmNfbWFrZW5ldygKKwkJaW50CW51bV9saW5lcywgCisJCWludAludW1fY29sdW1ucywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gsIAorCQlpbnQJZmxhZ3MpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2NyZWVuX29mCitTQ1JFRU4JKl9uY19zY3JlZW5fb2YoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX25sLmMgKi8KKworI3VuZGVmIG5sCitpbnQJbmwodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9ubAoraW50CW5vbmwodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX292ZXJsYXkuYyAqLworCisjdW5kZWYgb3ZlcmxheQoraW50CW92ZXJsYXkoCisJCWNvbnN0IFdJTkRPVyAqd2luMSwgCisJCVdJTkRPVwkqd2luMikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgb3ZlcndyaXRlCitpbnQJb3ZlcndyaXRlKAorCQljb25zdCBXSU5ET1cgKndpbjEsIAorCQlXSU5ET1cJKndpbjIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNvcHl3aW4KK2ludAljb3B5d2luKAorCQljb25zdCBXSU5ET1cgKnNyYywgCisJCVdJTkRPVwkqZHN0LCAKKwkJaW50CXNtaW5yb3csIAorCQlpbnQJc21pbmNvbCwgCisJCWludAlkbWlucm93LCAKKwkJaW50CWRtaW5jb2wsIAorCQlpbnQJZG1heHJvdywgCisJCWludAlkbWF4Y29sLCAKKwkJaW50CW92ZXIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9wYWQuYyAqLworCisjdW5kZWYgbmV3cGFkCitXSU5ET1cJKm5ld3BhZCgKKwkJaW50CWwsIAorCQlpbnQJYykKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHN1YnBhZAorV0lORE9XCSpzdWJwYWQoCisJCVdJTkRPVwkqb3JpZywgCisJCWludAlsLCAKKwkJaW50CWMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgcHJlZnJlc2gKK2ludAlwcmVmcmVzaCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJcG1pbnJvdywgCisJCWludAlwbWluY29sLCAKKwkJaW50CXNtaW5yb3csIAorCQlpbnQJc21pbmNvbCwgCisJCWludAlzbWF4cm93LCAKKwkJaW50CXNtYXhjb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBub3V0cmVmcmVzaAoraW50CXBub3V0cmVmcmVzaCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJcG1pbnJvdywgCisJCWludAlwbWluY29sLCAKKwkJaW50CXNtaW5yb3csIAorCQlpbnQJc21pbmNvbCwgCisJCWludAlzbWF4cm93LCAKKwkJaW50CXNtYXhjb2wpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBlY2hvY2hhcgoraW50CXBlY2hvY2hhcigKKwkJV0lORE9XCSpwYWQsIAorCQljb25zdCBjaHR5cGUgY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9wcmludHcuYyAqLworCisjdW5kZWYgcHJpbnR3CitpbnQJcHJpbnR3KAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdwcmludHcKK2ludAl3cHJpbnR3KAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZwcmludHcKK2ludAltdnByaW50dygKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3cHJpbnR3CitpbnQJbXZ3cHJpbnR3KAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZ3cHJpbnR3CitpbnQJdndwcmludHcoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJdmFfbGlzdAlhcmdwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcmVkcmF3bG4uYyAqLworCisjdW5kZWYgd3JlZHJhd2xuCitpbnQJd3JlZHJhd2xuKAorCQlXSU5ET1cJKndpbiwgCisJCWludAliZWcsIAorCQlpbnQJbnVtKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcmVmcmVzaC5jICovCisKKyN1bmRlZiB3cmVmcmVzaAoraW50CXdyZWZyZXNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd25vdXRyZWZyZXNoCitpbnQJd25vdXRyZWZyZXNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Jlc3RhcnQuYyAqLworCisjdW5kZWYgcmVzdGFydHRlcm0KK2ludAlyZXN0YXJ0dGVybSgKKwkJY2hhcgkqdGVybXAsIAorCQlpbnQJZmlsZW51bSwgCisJCWludAkqZXJycmV0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2NhbncuYyAqLworCisjdW5kZWYgdndzY2FudworaW50CXZ3c2NhbncoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqZm10LCAKKwkJdmFfbGlzdAlhcmdwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY2FudworaW50CXNjYW53KAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdzY2FudworaW50CXdzY2FudygKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12c2NhbncKK2ludAltdnNjYW53KAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndzY2FudworaW50CW12d3NjYW53KAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljaGFyCSpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zY3JlZW4uYyAqLworCisjdW5kZWYgZ2V0d2luCitXSU5ET1cJKmdldHdpbigKKwkJRklMRQkqZmlsZXApCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBwdXR3aW4KK2ludAlwdXR3aW4oCisJCVdJTkRPVwkqd2luLCAKKwkJRklMRQkqZmlsZXApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9yZXN0b3JlCitpbnQJc2NyX3Jlc3RvcmUoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9kdW1wCitpbnQJc2NyX2R1bXAoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9pbml0CitpbnQJc2NyX2luaXQoCisJCWNvbnN0IGNoYXIgKmZpbGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcl9zZXQKK2ludAlzY3Jfc2V0KAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2Nyb2xsLmMgKi8KKworI3VuZGVmIF9uY19zY3JvbGxfd2luZG93Cit2b2lkCV9uY19zY3JvbGxfd2luZG93KAorCQlXSU5ET1cJKndpbiwgCisJCWludCBjb25zdCBuLCAKKwkJaW50IGNvbnN0IHRvcCwgCisJCWludCBjb25zdCBib3R0b20sIAorCQljaHR5cGUJYmxhbmspCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3c2NybAoraW50CXdzY3JsKAorCQlXSU5ET1cJKndpbiwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2Nyb2xsb2suYyAqLworCisjdW5kZWYgc2Nyb2xsb2sKK2ludAlzY3JvbGxvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NjcnJlZy5jICovCisKKyN1bmRlZiB3c2V0c2NycmVnCitpbnQJd3NldHNjcnJlZygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJdG9wLCAKKwkJaW50CWJvdHRvbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NldF90ZXJtLmMgKi8KKworI3VuZGVmIHNldF90ZXJtCitTQ1JFRU4JKnNldF90ZXJtKAorCQlTQ1JFRU4JKnNjcmVlbnApCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKyN1bmRlZiBkZWxzY3JlZW4KK3ZvaWQJZGVsc2NyZWVuKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NldHVwc2NyZWVuCitpbnQJX25jX3NldHVwc2NyZWVuKAorCQlpbnQJc2xpbmVzLCAKKwkJaW50CXNjb2x1bW5zLCAKKwkJRklMRQkqb3V0cHV0LCAKKwkJTkNVUlNFU19CT09MIGZpbHRlcmVkLCAKKwkJaW50CXNsa19mb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yaXBvZmZsaW5lCitpbnQJX25jX3JpcG9mZmxpbmUoCisJCWludAlsaW5lLCAKKwkJaW50CSgqaW5pdCkoCisJCVdJTkRPVwkqcDEsIAorCQlpbnQJcDIpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByaXBvZmZsaW5lCitpbnQJcmlwb2ZmbGluZSgKKwkJaW50CWxpbmUsIAorCQlpbnQJKCppbml0KSgKKwkJV0lORE9XCSpwMSwgCisJCWludAlwMikpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGsuYyAqLworCisjdW5kZWYgX25jX3Nsa19pbml0aWFsaXplCitpbnQJX25jX3Nsa19pbml0aWFsaXplKAorCQlXSU5ET1cJKnN0d2luLCAKKwkJaW50CWNvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNsa19yZXN0b3JlCitpbnQJc2xrX3Jlc3RvcmUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cl9zZXQuYyAqLworCisjdW5kZWYgc2xrX2F0dHJfc2V0CitpbnQJc2xrX2F0dHJfc2V0KAorCQljb25zdCBhdHRyX3QgYXR0ciwgCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cm9mLmMgKi8KKworI3VuZGVmIHNsa19hdHRyb2ZmCitpbnQJc2xrX2F0dHJvZmYoCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXRyb24uYyAqLworCisjdW5kZWYgc2xrX2F0dHJvbgoraW50CXNsa19hdHRyb24oCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXRyc2V0LmMgKi8KKworI3VuZGVmIHNsa19hdHRyc2V0CitpbnQJc2xrX2F0dHJzZXQoCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXR0ci5jICovCisKKyN1bmRlZiBzbGtfYXR0cgorYXR0cl90CXNsa19hdHRyKHZvaWQpCisJCXsgcmV0dXJuKCooYXR0cl90ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtjbGVhci5jICovCisKKyN1bmRlZiBzbGtfY2xlYXIKK2ludAlzbGtfY2xlYXIodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2NvbG9yLmMgKi8KKworI3VuZGVmIHNsa19jb2xvcgoraW50CXNsa19jb2xvcigKKwkJc2hvcnQJY29sb3JfcGFpcl9udW1iZXIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtpbml0LmMgKi8KKworI3VuZGVmIHNsa19pbml0CitpbnQJc2xrX2luaXQoCisJCWludAlmb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtsYWIuYyAqLworCisjdW5kZWYgc2xrX2xhYmVsCitjaGFyCSpzbGtfbGFiZWwoCisJCWludAluKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtyZWZyLmMgKi8KKworI3VuZGVmIHNsa19ub3V0cmVmcmVzaAoraW50CXNsa19ub3V0cmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzbGtfcmVmcmVzaAoraW50CXNsa19yZWZyZXNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtzZXQuYyAqLworCisjdW5kZWYgc2xrX3NldAoraW50CXNsa19zZXQoCisJCWludAlpLCAKKwkJY29uc3QgY2hhciAqYXN0ciwgCisJCWludAlmb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGt0b3VjaC5jICovCisKKyN1bmRlZiBzbGtfdG91Y2gKK2ludAlzbGtfdG91Y2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3RvdWNoLmMgKi8KKworI3VuZGVmIGlzX2xpbmV0b3VjaGVkCitOQ1VSU0VTX0JPT0wgaXNfbGluZXRvdWNoZWQoCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWxpbmUpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX3dpbnRvdWNoZWQKK05DVVJTRVNfQk9PTCBpc193aW50b3VjaGVkKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgd3RvdWNobG4KK2ludAl3dG91Y2hsbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAluLCAKKwkJaW50CWNoYW5nZWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2VkbXAuYyAqLworCisjdW5kZWYgX3RyYWNlZHVtcAordm9pZAlfdHJhY2VkdW1wKAorCQljb25zdCBjaGFyICpuYW1lLCAKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlbXNlLmMgKi8KKworI3VuZGVmIF9uY190cmFjZW1vdXNlCitjaGFyCSpfbmNfdHJhY2Vtb3VzZSgKKwkJU0NSRUVOCSpzcCwgCisJCU1FVkVOVCBjb25zdCAqZXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlbW91c2UKK2NoYXIJKl90cmFjZW1vdXNlKAorCQlNRVZFTlQgY29uc3QgKmVwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90dHkvbGliX3RzdHAuYyAqLworCisjaW5jbHVkZSA8U2lnQWN0aW9uLmg+CisKKyN1bmRlZiBfbmNfc2lnbmFsX2hhbmRsZXIKK3ZvaWQJX25jX3NpZ25hbF9oYW5kbGVyKAorCQlOQ1VSU0VTX0JPT0wgZW5hYmxlKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX3VuZ2V0Y2guYyAqLworCisjdW5kZWYgX25jX2ZpZm9fZHVtcAordm9pZAlfbmNfZmlmb19kdW1wKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3VuZ2V0Y2gKK2ludAlfbmNfdW5nZXRjaCgKKwkJU0NSRUVOCSpzcCwgCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5nZXRjaAoraW50CXVuZ2V0Y2goCisJCWludAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfdmlkYXR0ci5jICovCisKKyN1bmRlZiB2aWRwdXRzCitpbnQJdmlkcHV0cygKKwkJY2h0eXBlCW5ld21vZGUsIAorCQlpbnQJKCpvdXRjKSgKKwkJaW50CXAxKSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdmlkYXR0cgoraW50CXZpZGF0dHIoCisJCWNodHlwZQluZXdtb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0ZXJtYXR0cnMKK2NodHlwZQl0ZXJtYXR0cnModm9pZCkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3ZsaW5lLmMgKi8KKworI3VuZGVmIHd2bGluZQoraW50CXd2bGluZSgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dhdHRyb2ZmLmMgKi8KKworI3VuZGVmIHdhdHRyX29mZgoraW50CXdhdHRyX29mZigKKwkJV0lORE9XCSp3aW4sIAorCQlhdHRyX3QJYXQsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfd2F0dHJvbi5jICovCisKKyN1bmRlZiB3YXR0cl9vbgoraW50CXdhdHRyX29uKAorCQlXSU5ET1cJKndpbiwgCisJCWF0dHJfdAlhdCwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93aW5jaC5jICovCisKKyN1bmRlZiB3aW5jaAorY2h0eXBlCXdpbmNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dpbmRvdy5jICovCisKKyN1bmRlZiBfbmNfc3luY2hvb2sKK3ZvaWQJX25jX3N5bmNob29rKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIG12ZGVyd2luCitpbnQJbXZkZXJ3aW4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXksIAorCQlpbnQJeCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc3luY29rCitpbnQJc3luY29rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBiZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3N5bmN1cAordm9pZAl3c3luY3VwKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIHdzeW5jZG93bgordm9pZAl3c3luY2Rvd24oCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd2N1cnN5bmN1cAordm9pZAl3Y3Vyc3luY3VwKAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGR1cHdpbgorV0lORE9XCSpkdXB3aW4oCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2Jhc2UvbmNfcGFuZWwuYyAqLworCisjdW5kZWYgX25jX3BhbmVsaG9vaworc3RydWN0IHBhbmVsaG9vayAqX25jX3BhbmVsaG9vayh2b2lkKQorCQl7IHJldHVybigqKHN0cnVjdCBwYW5lbGhvb2sgKiopMCk7IH0KKworLyogLi9iYXNlL3NhZmVfc3ByaW50Zi5jICovCisKKyN1bmRlZiBfbmNfcHJpbnRmX3N0cmluZworY2hhcgkqX25jX3ByaW50Zl9zdHJpbmcoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCXZhX2xpc3QJYXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3R0eS90dHlfdXBkYXRlLmMgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisKKyN1bmRlZiBkb3VwZGF0ZQoraW50CWRvdXBkYXRlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zY3JvbGxuCitpbnQJX25jX3Njcm9sbG4oCisJCWludAluLCAKKwkJaW50CXRvcCwgCisJCWludAlib3QsIAorCQlpbnQJbWF4eSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3NjcmVlbl9yZXN1bWUKK3ZvaWQJX25jX3NjcmVlbl9yZXN1bWUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JlZW5faW5pdAordm9pZAlfbmNfc2NyZWVuX2luaXQodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zY3JlZW5fd3JhcAordm9pZAlfbmNfc2NyZWVuX3dyYXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19kb194bWNfZ2xpdGNoCit2b2lkCV9uY19kb194bWNfZ2xpdGNoKAorCQlhdHRyX3QJcHJldmlvdXMpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdHJhY2UvdmFyYXJncy5jICovCisKK3R5cGVkZWYgZW51bSB7CisgICAgYXRVbmtub3duID0gMCwgYXRJbnRlZ2VyLCBhdEZsb2F0LCBhdFBvaW50LCBhdFN0cmluZworfSBBUkdUWVBFOworCisjdW5kZWYgX25jX3ZhcmFyZ3MKK2NoYXIJKl9uY192YXJhcmdzKAorCQljb25zdCBjaGFyICpmbXQsIAorCQl2YV9saXN0CWFwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL21lbW1vdmUuYyAqLworCisjdW5kZWYgX25jX21lbW1vdmUKK3ZvaWQJX25jX21lbW1vdmUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL3Zzc2NhbmYuYyAqLworCisjdW5kZWYgX25jX3Zzc2NhbmYKK3ZvaWQJX25jX3Zzc2NhbmYodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9mcmVlYWxsLmMgKi8KKworI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworI3VuZGVmIF9uY19mcmVlYWxsCit2b2lkCV9uY19mcmVlYWxsKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZnJlZV9hbmRfZXhpdAordm9pZAlfbmNfZnJlZV9hbmRfZXhpdCgKKwkJaW50CWNvZGUpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vZXhwYW5kZWQuYyAqLworCisjdW5kZWYgX25jX3RvZ2dsZV9hdHRyX29uCit2b2lkCV9uY190b2dnbGVfYXR0cl9vbigKKwkJYXR0cl90CSpTLCAKKwkJYXR0cl90CWF0KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3RvZ2dsZV9hdHRyX29mZgordm9pZAlfbmNfdG9nZ2xlX2F0dHJfb2ZmKAorCQlhdHRyX3QJKlMsIAorCQlhdHRyX3QJYXQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfRGVsQ2hhckNvc3QKK2ludAlfbmNfRGVsQ2hhckNvc3QoCisJCWludAljb3VudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX0luc0NoYXJDb3N0CitpbnQJX25jX0luc0NoYXJDb3N0KAorCQlpbnQJY291bnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19VcGRhdGVBdHRycwordm9pZAlfbmNfVXBkYXRlQXR0cnMoCisJCWNodHlwZQljKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGVnYWN5X2NvZGluZy5jICovCisKKyN1bmRlZiB1c2VfbGVnYWN5X2NvZGluZworaW50CXVzZV9sZWdhY3lfY29kaW5nKAorCQlpbnQJbGV2ZWwpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9kZnRfZmdiZy5jICovCisKKyN1bmRlZiB1c2VfZGVmYXVsdF9jb2xvcnMKK2ludAl1c2VfZGVmYXVsdF9jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXNzdW1lX2RlZmF1bHRfY29sb3JzCitpbnQJYXNzdW1lX2RlZmF1bHRfY29sb3JzKAorCQlpbnQJZmcsIAorCQlpbnQJYmcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfcHJpbnQuYyAqLworCisjdW5kZWYgbWNwcmludAoraW50CW1jcHJpbnQoCisJCWNoYXIJKmRhdGEsIAorCQlpbnQJbGVuKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9yZXNpemV0ZXJtLmMgKi8KKworI3VuZGVmIGlzX3Rlcm1fcmVzaXplZAorTkNVUlNFU19CT09MIGlzX3Rlcm1fcmVzaXplZCgKKwkJaW50CVRvTGluZXMsIAorCQlpbnQJVG9Db2xzKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiByZXNpemVfdGVybQoraW50CXJlc2l6ZV90ZXJtKAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2l6ZXRlcm0KK2ludAlyZXNpemV0ZXJtKAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS90cmFjZV94bmFtZXMuYyAqLworCisjdW5kZWYgX25jX3RyYWNlX3huYW1lcwordm9pZAlfbmNfdHJhY2VfeG5hbWVzKAorCQlURVJNVFlQRSAqdHApCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vdXNlX3NjcmVlbi5jICovCisKKyN1bmRlZiB1c2Vfc2NyZWVuCitpbnQJdXNlX3NjcmVlbigKKwkJU0NSRUVOCSpzY3JlZW4sIAorCQlOQ1VSU0VTX1NDUkVFTl9DQiBmdW5jLCAKKwkJdm9pZAkqZGF0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvdXNlX3dpbmRvdy5jICovCisKKyN1bmRlZiB1c2Vfd2luZG93CitpbnQJdXNlX3dpbmRvdygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX1dJTkRPV19DQiBmdW5jLCAKKwkJdm9pZAkqZGF0YSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2Uvd3Jlc2l6ZS5jICovCisKKyN1bmRlZiB3cmVzaXplCitpbnQJd3Jlc2l6ZSgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hY2Nlc3MuYyAqLworCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxuY19hbGxvYy5oPgorCisjdW5kZWYgX25jX3Jvb3RuYW1lCitjaGFyCSpfbmNfcm9vdG5hbWUoCisJCWNoYXIJKnBhdGgpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2lzX2Fic19wYXRoCitOQ1VSU0VTX0JPT0wgX25jX2lzX2Fic19wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcGF0aGxhc3QKK3Vuc2lnbmVkIF9uY19wYXRobGFzdCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKih1bnNpZ25lZCAqKTApOyB9CisKKyN1bmRlZiBfbmNfYmFzZW5hbWUKK2NoYXIJKl9uY19iYXNlbmFtZSgKKwkJY2hhcgkqcGF0aCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfYWNjZXNzCitpbnQJX25jX2FjY2VzcygKKwkJY29uc3QgY2hhciAqcGF0aCwgCisJCWludAltb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaXNfZGlyX3BhdGgKK05DVVJTRVNfQk9PTCBfbmNfaXNfZGlyX3BhdGgoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19pc19maWxlX3BhdGgKK05DVVJTRVNfQk9PTCBfbmNfaXNfZmlsZV9wYXRoKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfZW52X2FjY2VzcworaW50CV9uY19lbnZfYWNjZXNzKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9hZGRfdHJpZXMuYyAqLworCisjdW5kZWYgX25jX2FkZF90b190cnkKK2ludAlfbmNfYWRkX3RvX3RyeSgKKwkJVFJJRVMJKip0cmVlLCAKKwkJY29uc3QgY2hhciAqc3RyLCAKKwkJdW5zaWduZWQgY29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2FsbG9jX3R0eXBlLmMgKi8KKworI3VuZGVmIF9uY19hbGlnbl90ZXJtdHlwZQordm9pZAlfbmNfYWxpZ25fdGVybXR5cGUoCisJCVRFUk1UWVBFICp0bywgCisJCVRFUk1UWVBFICpmcm9tKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2NvcHlfdGVybXR5cGUKK3ZvaWQJX25jX2NvcHlfdGVybXR5cGUoCisJCVRFUk1UWVBFICpkc3QsIAorCQlURVJNVFlQRSAqc3JjKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2NvZGVzLmMgKi8KKworI3VuZGVmIF9uY19ib29sY29kZXMKK2NoYXIJKmNvbnN0ICpfbmNfYm9vbGNvZGVzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX251bWNvZGVzCitjaGFyCSpjb25zdCAqX25jX251bWNvZGVzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3N0cmNvZGVzCitjaGFyCSpjb25zdCAqX25jX3N0cmNvZGVzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfZXJyb3IuYyAqLworCisjdW5kZWYgX25jX3N1cHByZXNzX3dhcm5pbmdzCitOQ1VSU0VTX0JPT0wgX25jX3N1cHByZXNzX3dhcm5pbmdzOworI3VuZGVmIF9uY19jdXJyX2xpbmUKK2ludAlfbmNfY3Vycl9saW5lOworI3VuZGVmIF9uY19jdXJyX2NvbAoraW50CV9uY19jdXJyX2NvbDsKKworI3VuZGVmIF9uY19nZXRfc291cmNlCitjb25zdCBjaGFyICpfbmNfZ2V0X3NvdXJjZSh2b2lkKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19zZXRfc291cmNlCit2b2lkCV9uY19zZXRfc291cmNlKAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NldF90eXBlCit2b2lkCV9uY19zZXRfdHlwZSgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfdHlwZQordm9pZAlfbmNfZ2V0X3R5cGUoCisJCWNoYXIJKm5hbWUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfd2FybmluZwordm9pZAlfbmNfd2FybmluZygKKwkJY29uc3QgY2hhciAqY29uc3QgZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2Vycl9hYm9ydAordm9pZAlfbmNfZXJyX2Fib3J0KAorCQljb25zdCBjaGFyICpjb25zdCBmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc3lzZXJyX2Fib3J0Cit2b2lkCV9uY19zeXNlcnJfYWJvcnQoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9kYl9pdGVyYXRvci5jICovCisKKyN1bmRlZiBfbmNfdGljX2RpcgorY29uc3QgY2hhciAqX25jX3RpY19kaXIoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2tlZXBfdGljX2Rpcgordm9pZAlfbmNfa2VlcF90aWNfZGlyKAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2xhc3RfZGIKK3ZvaWQJX25jX2xhc3RfZGIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19uZXh0X2RiCitjb25zdCBjaGFyICpfbmNfbmV4dF9kYigKKwkJREJESVJTCSpzdGF0ZSwgCisJCWludAkqb2Zmc2V0KQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19maXJzdF9kYgordm9pZAlfbmNfZmlyc3RfZGIoCisJCURCRElSUwkqc3RhdGUsIAorCQlpbnQJKm9mZnNldCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9kb2FsbG9jLmMgKi8KKworI3VuZGVmIF9uY19kb2FsbG9jCit2b2lkCSpfbmNfZG9hbGxvYygKKwkJdm9pZAkqb2xkcCwgCisJCXNpemVfdAlhbW91bnQpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisvKiAuL3RpbmZvL2VudHJpZXMuYyAqLworCisjdW5kZWYgX25jX2hlYWQKK0VOVFJZCSpfbmNfaGVhZDsKKyN1bmRlZiBfbmNfdGFpbAorRU5UUlkJKl9uY190YWlsOworCisjdW5kZWYgX25jX2ZyZWVfZW50cnkKK3ZvaWQJX25jX2ZyZWVfZW50cnkoCisJCUVOVFJZCSpoZWFkcCwgCisJCVRFUk1UWVBFICp0dGVybSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19mcmVlX2VudHJpZXMKK3ZvaWQJX25jX2ZyZWVfZW50cmllcygKKwkJRU5UUlkJKmhlYWRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2RlbGlua19lbnRyeQorRU5UUlkJKl9uY19kZWxpbmtfZW50cnkoCisJCUVOVFJZCSpoZWFkcCwgCisJCVRFUk1UWVBFICp0dGVybSkKKwkJeyByZXR1cm4oKihFTlRSWSAqKikwKTsgfQorCisjdW5kZWYgX25jX2xlYWtzX3RpbmZvCit2b2lkCV9uY19sZWFrc190aW5mbyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2ZhbGxiYWNrLmMgKi8KKworI3VuZGVmIF9uY19mYWxsYmFjaworY29uc3QgVEVSTVRZUEUgKl9uY19mYWxsYmFjaygKKwkJY29uc3QgY2hhciAqbmFtZSkKKwkJeyByZXR1cm4oKihjb25zdCBURVJNVFlQRSAqKikwKTsgfQorCisvKiAuL3RpbmZvL2ZyZWVfdHR5cGUuYyAqLworCisjdW5kZWYgX25jX2ZyZWVfdGVybXR5cGUKK3ZvaWQJX25jX2ZyZWVfdGVybXR5cGUoCisJCVRFUk1UWVBFICpwdHIpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdXNlcl9kZWZpbmFibGUKK05DVVJTRVNfQk9PTCBfbmNfdXNlcl9kZWZpbmFibGU7CisKKyN1bmRlZiB1c2VfZXh0ZW5kZWRfbmFtZXMKK2ludAl1c2VfZXh0ZW5kZWRfbmFtZXMoCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vZ2V0ZW52X251bS5jICovCisKKyN1bmRlZiBfbmNfZ2V0ZW52X251bQoraW50CV9uY19nZXRlbnZfbnVtKAorCQljb25zdCBjaGFyICpuYW1lKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vaG9tZV90ZXJtaW5mby5jICovCisKKyN1bmRlZiBfbmNfaG9tZV90ZXJtaW5mbworY2hhcgkqX25jX2hvbWVfdGVybWluZm8odm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vaW5pdF9rZXl0cnkuYyAqLworCisjaWYgMAorCisjaW5jbHVkZSA8aW5pdF9rZXl0cnkuaD4KKworI3VuZGVmIF9uY190aW5mb19ma2V5cworY29uc3Qgc3RydWN0IHRpbmZvX2ZrZXlzIF9uY190aW5mb19ma2V5c1tdID0gezB9OworCisjZW5kaWYKKworI3VuZGVmIF9uY19pbml0X2tleXRyeQordm9pZAlfbmNfaW5pdF9rZXl0cnkoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vbGliX2Fjcy5jICovCisKKyN1bmRlZiBfbmNfYWNzX21hcAorY2h0eXBlCSpfbmNfYWNzX21hcCh2b2lkKQorCQl7IHJldHVybigqKGNodHlwZSAqKikwKTsgfQorCisjdW5kZWYgX25jX2luaXRfYWNzCit2b2lkCV9uY19pbml0X2Fjcyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2xpYl9iYXVkcmF0ZS5jICovCisKKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CisKK3N0cnVjdCBzcGVlZCB7CisgICAgaW50IHM7IAorICAgIGludCBzcDsgCit9OworCisjdW5kZWYgX25jX2JhdWRyYXRlCitpbnQJX25jX2JhdWRyYXRlKAorCQlpbnQJT1NwZWVkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfb3NwZWVkCitpbnQJX25jX29zcGVlZCgKKwkJaW50CUJhdWRSYXRlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBiYXVkcmF0ZQoraW50CWJhdWRyYXRlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfY3VyX3Rlcm0uYyAqLworCisjdW5kZWYgX25jX2N1cl90ZXJtCitURVJNSU5BTCAqX25jX2N1cl90ZXJtKHZvaWQpCisJCXsgcmV0dXJuKCooVEVSTUlOQUwgKiopMCk7IH0KKworI3VuZGVmIHNldF9jdXJ0ZXJtCitURVJNSU5BTCAqc2V0X2N1cnRlcm0oCisJCVRFUk1JTkFMICp0ZXJtcCkKKwkJeyByZXR1cm4oKihURVJNSU5BTCAqKikwKTsgfQorCisjdW5kZWYgZGVsX2N1cnRlcm0KK2ludAlkZWxfY3VydGVybSgKKwkJVEVSTUlOQUwgKnRlcm1wKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX2RhdGEuYyAqLworCisjdW5kZWYgX25jX3N0ZHNjcgorV0lORE9XCSpfbmNfc3Rkc2NyKHZvaWQpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBfbmNfY3Vyc2NyCitXSU5ET1cJKl9uY19jdXJzY3Iodm9pZCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIF9uY19uZXdzY3IKK1dJTkRPVwkqX25jX25ld3Njcih2b2lkKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgX25jX3NjcmVlbl9jaGFpbgorU0NSRUVOCSpfbmNfc2NyZWVuX2NoYWluOworI3VuZGVmIFNQCitTQ1JFRU4JKlNQOworI3VuZGVmIF9uY19nbG9iYWxzCitOQ1VSU0VTX0dMT0JBTFMgX25jX2dsb2JhbHM7CisjdW5kZWYgX25jX3ByZXNjcmVlbgorTkNVUlNFU19QUkVTQ1JFRU4gX25jX3ByZXNjcmVlbjsKKworI3VuZGVmIF9uY19pbml0X3B0aHJlYWRzCit2b2lkCV9uY19pbml0X3B0aHJlYWRzKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbXV0ZXhfaW5pdAordm9pZAlfbmNfbXV0ZXhfaW5pdCgKKwkJcHRocmVhZF9tdXRleF90ICpvYmopCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbXV0ZXhfbG9jaworaW50CV9uY19tdXRleF9sb2NrKAorCQlwdGhyZWFkX211dGV4X3QgKm9iaikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX211dGV4X3RyeWxvY2sKK2ludAlfbmNfbXV0ZXhfdHJ5bG9jaygKKwkJcHRocmVhZF9tdXRleF90ICpvYmopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19tdXRleF91bmxvY2sKK2ludAlfbmNfbXV0ZXhfdW5sb2NrKAorCQlwdGhyZWFkX211dGV4X3QgKm9iaikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9oYXNfY2FwLmMgKi8KKworI3VuZGVmIGhhc19pYworTkNVUlNFU19CT09MIGhhc19pYyh2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBoYXNfaWwKK05DVVJTRVNfQk9PTCBoYXNfaWwodm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9rZXJuZWwuYyAqLworCisjdW5kZWYgZXJhc2VjaGFyCitjaGFyCWVyYXNlY2hhcih2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKikwKTsgfQorCisjdW5kZWYga2lsbGNoYXIKK2NoYXIJa2lsbGNoYXIodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICopMCk7IH0KKworI3VuZGVmIGZsdXNoaW5wCitpbnQJZmx1c2hpbnAodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2xpYl9rZXluYW1lLmMgKi8KKworc3RydWN0IGtuIHsgc2hvcnQgb2Zmc2V0OyBpbnQgY29kZTsgfTsKKworI3VuZGVmIF9uY19rZXluYW1lCitjaGFyCSpfbmNfa2V5bmFtZSgKKwkJU0NSRUVOCSpzcCwgCisJCWludAljKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIGtleW5hbWUKK2NoYXIJKmtleW5hbWUoCisJCWludAljKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfbG9uZ25hbWUuYyAqLworCisjdW5kZWYgbG9uZ25hbWUKK2NoYXIJKmxvbmduYW1lKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9uYXBtcy5jICovCisKKyN1bmRlZiBuYXBtcworaW50CW5hcG1zKAorCQlpbnQJbXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfb3B0aW9ucy5jICovCisKKyN1bmRlZiBpZGxvaworaW50CWlkbG9rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpZGNvawordm9pZAlpZGNvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGhhbGZkZWxheQoraW50CWhhbGZkZWxheSgKKwkJaW50CXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vZGVsYXkKK2ludAlub2RlbGF5KAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub3RpbWVvdXQKK2ludAlub3RpbWVvdXQoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHd0aW1lb3V0Cit2b2lkCXd0aW1lb3V0KAorCQlXSU5ET1cJKndpbiwgCisJCWludAlkZWxheSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGtleXBhZAoraW50CWtleXBhZCgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWV0YQoraW50CW1ldGEoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGN1cnNfc2V0CitpbnQJY3Vyc19zZXQoCisJCWludAl2aXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHR5cGVhaGVhZAoraW50CXR5cGVhaGVhZCgKKwkJaW50CWZkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBoYXNfa2V5CitpbnQJaGFzX2tleSgKKwkJaW50CWtleWNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19rZXlwYWQKK2ludAlfbmNfa2V5cGFkKAorCQlTQ1JFRU4JKnNwLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfcmF3LmMgKi8KKworI3VuZGVmIHJhdworaW50CXJhdyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjYnJlYWsKK2ludAljYnJlYWsodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcWlmbHVzaAordm9pZAlxaWZsdXNoKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBub3JhdworaW50CW5vcmF3KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vY2JyZWFrCitpbnQJbm9jYnJlYWsodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9xaWZsdXNoCit2b2lkCW5vcWlmbHVzaCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgaW50cmZsdXNoCitpbnQJaW50cmZsdXNoKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3NldHVwLmMgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisKKyN1bmRlZiBfbmNfdHR5dHlwZQorY2hhcgkqX25jX3R0eXR5cGUodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcHRyX0xpbmVzCitpbnQJKl9uY19wdHJfTGluZXModm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKiopMCk7IH0KKworI3VuZGVmIF9uY19MSU5FUworaW50CV9uY19MSU5FUyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcHRyX0NvbHMKK2ludAkqX25jX3B0cl9Db2xzKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfQ09MUworaW50CV9uY19DT0xTKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19UQUJTSVpFCitpbnQJX25jX1RBQlNJWkUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2V0X3RhYnNpemUKK2ludAlzZXRfdGFic2l6ZSgKKwkJaW50CXZhbHVlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaGFuZGxlX3NpZ3dpbmNoCitpbnQJX25jX2hhbmRsZV9zaWd3aW5jaCgKKwkJU0NSRUVOCSpzcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdXNlX2Vudgordm9pZAl1c2VfZW52KAorCQlOQ1VSU0VTX0JPT0wgZikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfc2NyZWVuc2l6ZQordm9pZAlfbmNfZ2V0X3NjcmVlbnNpemUoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJKmxpbmVwLCAKKwkJaW50CSpjb2xwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3VwZGF0ZV9zY3JlZW5zaXplCit2b2lkCV9uY191cGRhdGVfc2NyZWVuc2l6ZSgKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfbG9jYWxlCitjaGFyCSpfbmNfZ2V0X2xvY2FsZSh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY191bmljb2RlX2xvY2FsZQoraW50CV9uY191bmljb2RlX2xvY2FsZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfbG9jYWxlX2JyZWFrc19hY3MKK2ludAlfbmNfbG9jYWxlX2JyZWFrc19hY3MoCisJCVRFUk1JTkFMICp0ZXJtcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3NldHVwdGVybQoraW50CV9uY19zZXR1cHRlcm0oCisJCWNoYXIJKnRuYW1lLCAKKwkJaW50CUZpbGVkZXMsIAorCQlpbnQJKmVycnJldCwgCisJCU5DVVJTRVNfQk9PTCByZXVzZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2V0dXB0ZXJtCitpbnQJc2V0dXB0ZXJtKAorCQljaGFyCSp0bmFtZSwgCisJCWludAlGaWxlZGVzLCAKKwkJaW50CSplcnJyZXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfdGVybWNhcC5jICovCisKKyN1bmRlZiBVUAorY2hhcgkqVVA7CisjdW5kZWYgQkMKK2NoYXIJKkJDOworCisjdW5kZWYgdGdldGVudAoraW50CXRnZXRlbnQoCisJCWNoYXIJKmJ1ZnAsIAorCQljb25zdCBjaGFyICpuYW1lKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyNpZiAwCisKKyNpbmNsdWRlIDxjYXBkZWZhdWx0cy5jPgorCisjZW5kaWYKKworI3VuZGVmIHRnZXRmbGFnCitpbnQJdGdldGZsYWcoCisJCWNoYXIJKmlkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0Z2V0bnVtCitpbnQJdGdldG51bSgKKwkJY2hhcgkqaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRnZXRzdHIKK2NoYXIJKnRnZXRzdHIoCisJCWNoYXIJKmlkLCAKKwkJY2hhcgkqKmFyZWEpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90ZXJtbmFtZS5jICovCisKKyN1bmRlZiB0ZXJtbmFtZQorY2hhcgkqdGVybW5hbWUodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Rnb3RvLmMgKi8KKworI3VuZGVmIHRnb3RvCitjaGFyCSp0Z290bygKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJaW50CXgsIAorCQlpbnQJeSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3RpLmMgKi8KKworI3VuZGVmIHRpZ2V0ZmxhZworaW50CXRpZ2V0ZmxhZygKKwkJY2hhcgkqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0aWdldG51bQoraW50CXRpZ2V0bnVtKAorCQljaGFyCSpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRpZ2V0c3RyCitjaGFyCSp0aWdldHN0cigKKwkJY2hhcgkqc3RyKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdHBhcm0uYyAqLworCisjdW5kZWYgX25jX3RwYXJtX2VycgoraW50CV9uY190cGFybV9lcnI7CisKKyN1bmRlZiBfbmNfdHBhcm1fYW5hbHl6ZQoraW50CV9uY190cGFybV9hbmFseXplKAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQljaGFyCSpwX2lzX3NbOV0sIAorCQlpbnQJKnBvcGNvdW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0cGFybQorY2hhcgkqdHBhcm0oCisJCWNoYXIJKnN0cmluZywgCisJCS4uLikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3RwdXRzLmMgKi8KKworI3VuZGVmIFBDCitjaGFyCVBDOworI3VuZGVmIG9zcGVlZAorTkNVUlNFU19PU1BFRUQJb3NwZWVkOworI3VuZGVmIF9uY19udWxsc19zZW50CitpbnQJX25jX251bGxzX3NlbnQ7CisKKyN1bmRlZiBfbmNfc2V0X25vX3BhZGRpbmcKK3ZvaWQJX25jX3NldF9ub19wYWRkaW5nKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgZGVsYXlfb3V0cHV0CitpbnQJZGVsYXlfb3V0cHV0KAorCQlpbnQJbXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19mbHVzaAordm9pZAlfbmNfZmx1c2godm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19vdXRjaAoraW50CV9uY19vdXRjaCgKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwdXRwCitpbnQJcHV0cCgKKwkJY29uc3QgY2hhciAqc3RyaW5nKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0cHV0cworaW50CXRwdXRzKAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQlpbnQJYWZmY250LCAKKwkJaW50CSgqb3V0YykoCisJCWludAlwMSkpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2UuYyAqLworCisjdW5kZWYgX25jX3RyYWNpbmcKK3Vuc2lnbmVkIF9uY190cmFjaW5nOworCisjdW5kZWYgX25jX19uY190cHV0c190cmFjZQorY29uc3QgY2hhciAqX25jX19uY190cHV0c190cmFjZSh2b2lkKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19fbmNfb3V0Y2hhcnMKK2xvbmcJX25jX19uY19vdXRjaGFycyh2b2lkKQorCQl7IHJldHVybigqKGxvbmcgKikwKTsgfQorCisjdW5kZWYgX25jX3NldF90cHV0c190cmFjZQordm9pZAlfbmNfc2V0X3RwdXRzX3RyYWNlKAorCQljb25zdCBjaGFyICpzKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2NvdW50X291dGNoYXJzCit2b2lkCV9uY19jb3VudF9vdXRjaGFycygKKwkJbG9uZwlpbmNyZW1lbnQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB0cmFjZQordm9pZAl0cmFjZSgKKwkJY29uc3QgdW5zaWduZWQgaW50IHRyYWNlbGV2ZWwpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfdHJhY2VmCit2b2lkCV90cmFjZWYoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2Jvb2wKK05DVVJTRVNfQk9PTCBfbmNfcmV0cmFjZV9ib29sKAorCQlOQ1VSU0VTX0JPT0wgY29kZSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfaW50CitpbnQJX25jX3JldHJhY2VfaW50KAorCQlpbnQJY29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfdW5zaWduZWQKK3Vuc2lnbmVkIF9uY19yZXRyYWNlX3Vuc2lnbmVkKAorCQl1bnNpZ25lZCBjb2RlKQorCQl7IHJldHVybigqKHVuc2lnbmVkICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3B0cgorY2hhcgkqX25jX3JldHJhY2VfcHRyKAorCQljaGFyCSpjb2RlKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2NwdHIKK2NvbnN0IGNoYXIgKl9uY19yZXRyYWNlX2NwdHIoCisJCWNvbnN0IGNoYXIgKmNvZGUpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfY3ZvaWRfcHRyCit2b2lkCSpfbmNfcmV0cmFjZV9jdm9pZF9wdHIoCisJCXZvaWQJKmNvZGUpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2Vfdm9pZF9wdHIKK3ZvaWQJKl9uY19yZXRyYWNlX3ZvaWRfcHRyKAorCQl2b2lkCSpjb2RlKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3NwCitTQ1JFRU4JKl9uY19yZXRyYWNlX3NwKAorCQlTQ1JFRU4JKmNvZGUpCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV93aW4KK1dJTkRPVwkqX25jX3JldHJhY2Vfd2luKAorCQlXSU5ET1cJKmNvZGUpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdXNlX3RyYWNlZgoraW50CV9uY191c2VfdHJhY2VmKAorCQl1bnNpZ25lZCBtYXNrKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfbG9ja2VkX3RyYWNlZgordm9pZAlfbmNfbG9ja2VkX3RyYWNlZigKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWF0ci5jICovCisKKyN1bmRlZiBfdHJhY2VhdHRyMgorY2hhcgkqX3RyYWNlYXR0cjIoCisJCWludAlidWZudW0sIAorCQljaHR5cGUJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VhdHRyCitjaGFyCSpfdHJhY2VhdHRyKAorCQlhdHRyX3QJbmV3bW9kZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9hdHRyX3QKK2F0dHJfdAlfbmNfcmV0cmFjZV9hdHRyX3QoCisJCWF0dHJfdAljb2RlKQorCQl7IHJldHVybigqKGF0dHJfdCAqKTApOyB9CisKKyN1bmRlZiBfbmNfYWx0Y2hhcnNldF9uYW1lCitjb25zdCBjaGFyICpfbmNfYWx0Y2hhcnNldF9uYW1lKAorCQlhdHRyX3QJYXR0ciwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjaHR5cGUyCitjaGFyCSpfdHJhY2VjaHR5cGUyKAorCQlpbnQJYnVmbnVtLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWNodHlwZQorY2hhcgkqX3RyYWNlY2h0eXBlKAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfY2h0eXBlCitjaHR5cGUJX25jX3JldHJhY2VfY2h0eXBlKAorCQljaHR5cGUJY29kZSkKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWJpdHMuYyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IHZhbDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfSBCSVROQU1FUzsKKworI3VuZGVmIF9uY190cmFjZV90dHltb2RlCitjaGFyCSpfbmNfdHJhY2VfdHR5bW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKnR0eSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdHJhY2ViaXRzCitjaGFyCSpfbmNfdHJhY2ViaXRzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWNoci5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VjaGFyCitjaGFyCSpfbmNfdHJhY2VjaGFyKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWNoYXIKK2NoYXIJKl90cmFjZWNoYXIoCisJCWludAljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3R0eWZsYWdzLmMgKi8KKworI3VuZGVmIF9uY19nZXRfdHR5X21vZGUKK2ludAlfbmNfZ2V0X3R0eV9tb2RlKAorCQlzdHJ1Y3QgdGVybWlvcyAqYnVmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2V0X3R0eV9tb2RlCitpbnQJX25jX3NldF90dHlfbW9kZSgKKwkJc3RydWN0IHRlcm1pb3MgKmJ1ZikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVmX3NoZWxsX21vZGUKK2ludAlkZWZfc2hlbGxfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWZfcHJvZ19tb2RlCitpbnQJZGVmX3Byb2dfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZXNldF9wcm9nX21vZGUKK2ludAlyZXNldF9wcm9nX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXRfc2hlbGxfbW9kZQoraW50CXJlc2V0X3NoZWxsX21vZGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2F2ZXR0eQoraW50CXNhdmV0dHkodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzZXR0eQoraW50CXJlc2V0dHkodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3R0eS9saWJfdHdhaXQuYyAqLworCisjdW5kZWYgX25jX3RpbWVkX3dhaXQKK2ludAlfbmNfdGltZWRfd2FpdCgKKwkJU0NSRUVOCSpzcCwgCisJCWludAltb2RlLCAKKwkJaW50CW1pbGxpc2Vjb25kcywgCisJCWludAkqdGltZWxlZnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9uYW1lX21hdGNoLmMgKi8KKworI3VuZGVmIF9uY19maXJzdF9uYW1lCitjaGFyCSpfbmNfZmlyc3RfbmFtZSgKKwkJY29uc3QgY2hhciAqY29uc3Qgc3ApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX25hbWVfbWF0Y2gKK2ludAlfbmNfbmFtZV9tYXRjaCgKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZWxzdCwgCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIAorCQljb25zdCBjaGFyICpjb25zdCBkZWxpbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL25hbWVzLmMgKi8KKworI3VuZGVmIF9uY19ib29sbmFtZXMKK2NoYXIJKmNvbnN0ICpfbmNfYm9vbG5hbWVzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2Jvb2xmbmFtZXMKK2NoYXIJKmNvbnN0ICpfbmNfYm9vbGZuYW1lcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19udW1uYW1lcworY2hhcgkqY29uc3QgKl9uY19udW1uYW1lcyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19udW1mbmFtZXMKK2NoYXIJKmNvbnN0ICpfbmNfbnVtZm5hbWVzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3N0cm5hbWVzCitjaGFyCSpjb25zdCAqX25jX3N0cm5hbWVzKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3N0cmZuYW1lcworY2hhcgkqY29uc3QgKl9uY19zdHJmbmFtZXModm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vcmVhZF9lbnRyeS5jICovCisKKyNpbmNsdWRlIDxoYXNoZWRfZGIuaD4KKworI3VuZGVmIF9uY19yZWFkX3Rlcm10eXBlCitpbnQJX25jX3JlYWRfdGVybXR5cGUoCisJCVRFUk1UWVBFICpwdHIsIAorCQljaGFyCSpidWZmZXIsIAorCQlpbnQJbGltaXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZWFkX2ZpbGVfZW50cnkKK2ludAlfbmNfcmVhZF9maWxlX2VudHJ5KAorCQljb25zdCBjaGFyICpjb25zdCBmaWxlbmFtZSwgCisJCVRFUk1UWVBFICpwdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZWFkX2VudHJ5CitpbnQJX25jX3JlYWRfZW50cnkoCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIAorCQljaGFyCSpjb25zdCBmaWxlbmFtZSwgCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL3JlYWRfdGVybWNhcC5jICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI3VuZGVmIF9uY19yZWFkX3Rlcm1jYXBfZW50cnkKK2ludAlfbmNfcmVhZF90ZXJtY2FwX2VudHJ5KAorCQljb25zdCBjaGFyICpjb25zdCB0biwgCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL3NldGJ1Zi5jICovCisKKyN1bmRlZiBfbmNfc2V0X2J1ZmZlcgordm9pZAlfbmNfc2V0X2J1ZmZlcigKKwkJRklMRQkqb2ZwLCAKKwkJTkNVUlNFU19CT09MIGJ1ZmZlcmVkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL3N0cmluZ3MuYyAqLworCisjdW5kZWYgX25jX3N0cl9pbml0CitzdHJpbmdfZGVzYyAqX25jX3N0cl9pbml0KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJY2hhcgkqc3JjLCAKKwkJc2l6ZV90CWxlbikKKwkJeyByZXR1cm4oKihzdHJpbmdfZGVzYyAqKikwKTsgfQorCisjdW5kZWYgX25jX3N0cl9udWxsCitzdHJpbmdfZGVzYyAqX25jX3N0cl9udWxsKAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJc2l6ZV90CWxlbikKKwkJeyByZXR1cm4oKihzdHJpbmdfZGVzYyAqKikwKTsgfQorCisjdW5kZWYgX25jX3N0cl9jb3B5CitzdHJpbmdfZGVzYyAqX25jX3N0cl9jb3B5KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJc3RyaW5nX2Rlc2MgKnNyYykKKwkJeyByZXR1cm4oKihzdHJpbmdfZGVzYyAqKikwKTsgfQorCisjdW5kZWYgX25jX3NhZmVfc3RyY2F0CitOQ1VSU0VTX0JPT0wgX25jX3NhZmVfc3RyY2F0KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJY29uc3QgY2hhciAqc3JjKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2FmZV9zdHJjcHkKK05DVVJTRVNfQk9PTCBfbmNfc2FmZV9zdHJjcHkoCisJCXN0cmluZ19kZXNjICpkc3QsIAorCQljb25zdCBjaGFyICpzcmMpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi90cmFjZS90cmFjZV9idWYuYyAqLworCisjdW5kZWYgX25jX3RyYWNlX2J1ZgorY2hhcgkqX25jX3RyYWNlX2J1ZigKKwkJaW50CWJ1Zm51bSwgCisJCXNpemVfdAl3YW50KQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY190cmFjZV9idWZjYXQKK2NoYXIJKl9uY190cmFjZV9idWZjYXQoCisJCWludAlidWZudW0sIAorCQljb25zdCBjaGFyICp2YWx1ZSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHJhY2UvdHJhY2VfdHJpZXMuYyAqLworCisjdW5kZWYgX25jX3RyYWNlX3RyaWVzCit2b2lkCV9uY190cmFjZV90cmllcygKKwkJVFJJRVMJKnRyZWUpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS90cmllcy5jICovCisKKyN1bmRlZiBfbmNfZXhwYW5kX3RyeQorY2hhcgkqX25jX2V4cGFuZF90cnkoCisJCVRSSUVTCSp0cmVlLCAKKwkJdW5zaWduZWQgY29kZSwgCisJCWludAkqY291bnQsIAorCQlzaXplX3QJbGVuKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZW1vdmVfa2V5CitpbnQJX25jX3JlbW92ZV9rZXkoCisJCVRSSUVTCSoqdHJlZSwgCisJCXVuc2lnbmVkIGNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZW1vdmVfc3RyaW5nCitpbnQJX25jX3JlbW92ZV9zdHJpbmcoCisJCVRSSUVTCSoqdHJlZSwgCisJCWNvbnN0IGNoYXIgKnN0cmluZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL3RyaW1fc2dyMC5jICovCisKKyN1bmRlZiBfbmNfdHJpbV9zZ3IwCitjaGFyCSpfbmNfdHJpbV9zZ3IwKAorCQlURVJNVFlQRSAqdHApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3VuY3RybC5jICovCisKKyN1bmRlZiBfbmNfdW5jdHJsCitjaGFyCSpfbmNfdW5jdHJsKAorCQlTQ1JFRU4JKnNwLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIHVuY3RybAorY2hhcgkqdW5jdHJsKAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL3Zpc2J1Zi5jICovCisKKyN1bmRlZiBfbmNfdmlzYnVmMgorY29uc3QgY2hhciAqX25jX3Zpc2J1ZjIoCisJCWludAlidWZudW0sIAorCQljb25zdCBjaGFyICpidWYpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc2J1ZgorY29uc3QgY2hhciAqX25jX3Zpc2J1ZigKKwkJY29uc3QgY2hhciAqYnVmKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXNidWZuCitjb25zdCBjaGFyICpfbmNfdmlzYnVmbigKKwkJY29uc3QgY2hhciAqYnVmLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzY2J1ZjIKK2NvbnN0IGNoYXIgKl9uY192aXNjYnVmMigKKwkJaW50CWJ1Zm51bSwgCisJCWNvbnN0IGNodHlwZSAqYnVmLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzY2J1ZgorY29uc3QgY2hhciAqX25jX3Zpc2NidWYoCisJCWNvbnN0IGNodHlwZSAqYnVmLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vYWxsb2NfZW50cnkuYyAqLworCisjdW5kZWYgX25jX2luaXRfZW50cnkKK3ZvaWQJX25jX2luaXRfZW50cnkoCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19jb3B5X2VudHJ5CitFTlRSWQkqX25jX2NvcHlfZW50cnkoCisJCUVOVFJZCSpvbGRwKQorCQl7IHJldHVybigqKEVOVFJZICoqKTApOyB9CisKKyN1bmRlZiBfbmNfc2F2ZV9zdHIKK2NoYXIJKl9uY19zYXZlX3N0cigKKwkJY29uc3QgY2hhciAqY29uc3Qgc3RyaW5nKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY193cmFwX2VudHJ5Cit2b2lkCV9uY193cmFwX2VudHJ5KAorCQlFTlRSWQkqY29uc3QgZXAsIAorCQlOQ1VSU0VTX0JPT0wgY29weV9zdHJpbmdzKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX21lcmdlX2VudHJ5Cit2b2lkCV9uY19tZXJnZV9lbnRyeSgKKwkJVEVSTVRZUEUgKmNvbnN0IHRvLCAKKwkJVEVSTVRZUEUgKmNvbnN0IGZyb20pCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vY2FwdG9pbmZvLmMgKi8KKworI3VuZGVmIF9uY19jYXB0b2luZm8KK2NoYXIJKl9uY19jYXB0b2luZm8oCisJCWNvbnN0IGNoYXIgKmNhcCwgCisJCWNvbnN0IGNoYXIgKnMsIAorCQlpbnQgY29uc3QgcGFyYW1ldGVyaXplZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfaW5mb3RvY2FwCitjaGFyCSpfbmNfaW5mb3RvY2FwKAorCQljb25zdCBjaGFyICpjYXAsIAorCQljb25zdCBjaGFyICpzdHIsIAorCQlpbnQgY29uc3QgcGFyYW1ldGVyaXplZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vY29tcF9jYXB0YWIuYyAqLworCisjaW5jbHVkZSA8aGFzaHNpemUuaD4KKworI3VuZGVmIF9uY19nZXRfdGFibGUKK2NvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICpfbmNfZ2V0X3RhYmxlKAorCQlOQ1VSU0VTX0JPT0wgdGVybWNhcCkKKwkJeyByZXR1cm4oKihjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqKikwKTsgfQorCisjdW5kZWYgX25jX2dldF9oYXNoX3RhYmxlCitjb25zdCBzaG9ydCAqX25jX2dldF9oYXNoX3RhYmxlKAorCQlOQ1VSU0VTX0JPT0wgdGVybWNhcCkKKwkJeyByZXR1cm4oKihjb25zdCBzaG9ydCAqKikwKTsgfQorCisjdW5kZWYgX25jX2dldF9hbGlhc190YWJsZQorY29uc3Qgc3RydWN0IGFsaWFzICpfbmNfZ2V0X2FsaWFzX3RhYmxlKAorCQlOQ1VSU0VTX0JPT0wgdGVybWNhcCkKKwkJeyByZXR1cm4oKihjb25zdCBzdHJ1Y3QgYWxpYXMgKiopMCk7IH0KKworLyogLi90aW5mby9jb21wX2V4cGFuZC5jICovCisKKyN1bmRlZiBfbmNfdGljX2V4cGFuZAorY2hhcgkqX25jX3RpY19leHBhbmQoCisJCWNvbnN0IGNoYXIgKnNyY3AsIAorCQlOQ1VSU0VTX0JPT0wgdGljX2Zvcm1hdCwgCisJCWludAludW1iZXJzKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9jb21wX2hhc2guYyAqLworCisjdW5kZWYgX25jX2ZpbmRfZW50cnkKK3N0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpfbmNfZmluZF9lbnRyeSgKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJY29uc3Qgc2hvcnQgKmhhc2hfdGFibGUpCisJCXsgcmV0dXJuKCooc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKiopMCk7IH0KKworI3VuZGVmIF9uY19maW5kX3R5cGVfZW50cnkKK3N0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpfbmNfZmluZF90eXBlX2VudHJ5KAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQlpbnQJdHlwZSwgCisJCWNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICp0YWJsZSkKKwkJeyByZXR1cm4oKihzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfcGFyc2UuYyAqLworCisjdW5kZWYgX25jX2NoZWNrX3Rlcm10eXBlMgordm9pZAkoKl9uY19jaGVja190ZXJtdHlwZTIpKAorCQlURVJNVFlQRSAqcDEsIAorCQlOQ1VSU0VTX0JPT0wgcDIpOworI3VuZGVmIF9uY19jaGVja190ZXJtdHlwZQordm9pZAkoKl9uY19jaGVja190ZXJtdHlwZSkoCisJCVRFUk1UWVBFICpwMSk7CisKKyN1bmRlZiBfbmNfZW50cnlfbWF0Y2gKK05DVVJTRVNfQk9PTCBfbmNfZW50cnlfbWF0Y2goCisJCWNoYXIJKm4xLCAKKwkJY2hhcgkqbjIpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19yZWFkX2VudHJ5X3NvdXJjZQordm9pZAlfbmNfcmVhZF9lbnRyeV9zb3VyY2UoCisJCUZJTEUJKmZwLCAKKwkJY2hhcgkqYnVmLCAKKwkJaW50CWxpdGVyYWwsIAorCQlOQ1VSU0VTX0JPT0wgc2lsZW50LCAKKwkJTkNVUlNFU19CT09MICgqaG9vaykoCisJCUVOVFJZCSpwMSkpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfcmVzb2x2ZV91c2VzMgoraW50CV9uY19yZXNvbHZlX3VzZXMyKAorCQlOQ1VSU0VTX0JPT0wgZnVsbHJlc29sdmUsIAorCQlOQ1VSU0VTX0JPT0wgbGl0ZXJhbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3Jlc29sdmVfdXNlcworaW50CV9uY19yZXNvbHZlX3VzZXMoCisJCU5DVVJTRVNfQk9PTCBmdWxscmVzb2x2ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2NvbXBfc2Nhbi5jICovCisKKyN1bmRlZiBfbmNfc3ludGF4CitpbnQJX25jX3N5bnRheDsKKyN1bmRlZiBfbmNfY3Vycl9maWxlX3BvcworbG9uZwlfbmNfY3Vycl9maWxlX3BvczsKKyN1bmRlZiBfbmNfY29tbWVudF9zdGFydAorbG9uZwlfbmNfY29tbWVudF9zdGFydDsKKyN1bmRlZiBfbmNfY29tbWVudF9lbmQKK2xvbmcJX25jX2NvbW1lbnRfZW5kOworI3VuZGVmIF9uY19zdGFydF9saW5lCitsb25nCV9uY19zdGFydF9saW5lOworI3VuZGVmIF9uY19jdXJyX3Rva2VuCitzdHJ1Y3QgdG9rZW4gX25jX2N1cnJfdG9rZW47CisjdW5kZWYgX25jX2Rpc2FibGVfcGVyaW9kCitOQ1VSU0VTX0JPT0wgX25jX2Rpc2FibGVfcGVyaW9kOworCisjdW5kZWYgX25jX3Jlc2V0X2lucHV0Cit2b2lkCV9uY19yZXNldF9pbnB1dCgKKwkJRklMRQkqZnAsIAorCQljaGFyCSpidWYpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZ2V0X3Rva2VuCitpbnQJX25jX2dldF90b2tlbigKKwkJTkNVUlNFU19CT09MIHNpbGVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3RyYW5zX3N0cmluZworaW50CV9uY190cmFuc19zdHJpbmcoCisJCWNoYXIJKnB0ciwgCisJCWNoYXIJKmxhc3QpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19wdXNoX3Rva2VuCit2b2lkCV9uY19wdXNoX3Rva2VuKAorCQlpbnQJdG9rY2xhc3MpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfcGFuaWNfbW9kZQordm9pZAlfbmNfcGFuaWNfbW9kZSgKKwkJY2hhcgljaCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9wYXJzZV9lbnRyeS5jICovCisKKyN1bmRlZiBfbmNfcGFyc2VfZW50cnkKK2ludAlfbmNfcGFyc2VfZW50cnkoCisJCXN0cnVjdCBlbnRyeSAqZW50cnlwLCAKKwkJaW50CWxpdGVyYWwsIAorCQlOQ1VSU0VTX0JPT0wgc2lsZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfY2FwY21wCitpbnQJX25jX2NhcGNtcCgKKwkJY29uc3QgY2hhciAqcywgCisJCWNvbnN0IGNoYXIgKnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmZyb207CisgICAgY29uc3QgY2hhciAqdG87Cit9IGFzc29jOworCisvKiAuL3RpbmZvL3dyaXRlX2VudHJ5LmMgKi8KKworI3VuZGVmIF9uY19zZXRfd3JpdGVkaXIKK3ZvaWQJX25jX3NldF93cml0ZWRpcigKKwkJY2hhcgkqZGlyKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3dyaXRlX2VudHJ5Cit2b2lkCV9uY193cml0ZV9lbnRyeSgKKwkJVEVSTVRZUEUgKmNvbnN0IHRwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3RpY193cml0dGVuCitpbnQJX25jX3RpY193cml0dGVuKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2RlZmluZV9rZXkuYyAqLworCisjdW5kZWYgZGVmaW5lX2tleQoraW50CWRlZmluZV9rZXkoCisJCWNvbnN0IGNoYXIgKnN0ciwgCisJCWludAlrZXljb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vaGFzaGVkX2RiLmMgKi8KKworI3VuZGVmIF9uY19oYXNoZWRfZGIKK3ZvaWQJX25jX2hhc2hlZF9kYih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2Uva2V5X2RlZmluZWQuYyAqLworCisjdW5kZWYga2V5X2RlZmluZWQKK2ludAlrZXlfZGVmaW5lZCgKKwkJY29uc3QgY2hhciAqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9rZXlib3VuZC5jICovCisKKyN1bmRlZiBrZXlib3VuZAorY2hhcgkqa2V5Ym91bmQoCisJCWludAljb2RlLCAKKwkJaW50CWNvdW50KQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL2tleW9rLmMgKi8KKworI3VuZGVmIGtleW9rCitpbnQJa2V5b2soCisJCWludAljLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL3ZlcnNpb24uYyAqLworCisjdW5kZWYgY3Vyc2VzX3ZlcnNpb24KK2NvbnN0IGNoYXIgKmN1cnNlc192ZXJzaW9uKHZvaWQpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy9sbGliLWxuY3Vyc2VzdyBiL25jdXJzZXMtNS43L25jdXJzZXMvbGxpYi1sbmN1cnNlc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlNzI1NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvbGxpYi1sbmN1cnNlc3cKQEAgLTAsMCArMSw0MjE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAyMDAxLTIwMDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTElOVExJQlJBUlkgKi8KKworLyogLi90dHkvaGFyZHNjcm9sbC5jICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjdW5kZWYgX25jX29sZG51bXMKK2ludAkqX25jX29sZG51bXM7CisKKyN1bmRlZiBfbmNfc2Nyb2xsX29wdGltaXplCit2b2lkCV9uY19zY3JvbGxfb3B0aW1pemUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19saW5lZHVtcAordm9pZAlfbmNfbGluZWR1bXAodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90dHkvaGFzaG1hcC5jICovCisKKyNpbmNsdWRlIDx0ZXJtLmg+CisKKyN1bmRlZiBfbmNfaGFzaF9tYXAKK3ZvaWQJX25jX2hhc2hfbWFwKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbWFrZV9vbGRoYXNoCit2b2lkCV9uY19tYWtlX29sZGhhc2goCisJCWludAlpKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3Njcm9sbF9vbGRoYXNoCit2b2lkCV9uY19zY3JvbGxfb2xkaGFzaCgKKwkJaW50CW4sIAorCQlpbnQJdG9wLCAKKwkJaW50CWJvdCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2xpYl9hZGRjaC5jICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjdW5kZWYgX25jX3JlbmRlcgorY2NoYXJfdAlfbmNfcmVuZGVyKAorCQlXSU5ET1cJKndpbiwgCisJCWNjaGFyX3QJY2gpCisJCXsgcmV0dXJuKCooY2NoYXJfdCAqKTApOyB9CisKKyN1bmRlZiBfbmNfYnVpbGRfd2NoCitpbnQJX25jX2J1aWxkX3djaCgKKwkJV0lORE9XCSp3aW4sIAorCQljY2hhcl90CSpjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3dhZGRjaF9ub3N5bmMKK2ludAlfbmNfd2FkZGNoX25vc3luYygKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90IGMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRjaAoraW50CXdhZGRjaCgKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdlY2hvY2hhcgoraW50CXdlY2hvY2hhcigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaHR5cGUgY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9hZGRzdHIuYyAqLworCisjdW5kZWYgd2FkZG5zdHIKK2ludAl3YWRkbnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICphc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhZGRjaG5zdHIKK2ludAl3YWRkY2huc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNodHlwZSAqYXN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfd2Noc3RybGVuCitpbnQJX25jX3djaHN0cmxlbigKKwkJY29uc3QgY2NoYXJfdCAqcykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZF93Y2huc3RyCitpbnQJd2FkZF93Y2huc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNjaGFyX3QgKmFzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZG53c3RyCitpbnQJd2FkZG53c3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IHdjaGFyX3QgKnN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYmVlcC5jICovCisKKyN1bmRlZiBiZWVwCitpbnQJYmVlcCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfYmtnZC5jICovCisKKyN1bmRlZiB3Ymtncm5kc2V0Cit2b2lkCXdia2dybmRzZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2NoYXJfdCAqY2gpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3YmtnZHNldAordm9pZAl3YmtnZHNldCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3Ymtncm5kCitpbnQJd2JrZ3JuZCgKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90ICpjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2JrZ2QKK2ludAl3YmtnZCgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9ib3guYyAqLworCisjdW5kZWYgd2JvcmRlcgoraW50CXdib3JkZXIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2h0eXBlCWxzLCAKKwkJY2h0eXBlCXJzLCAKKwkJY2h0eXBlCXRzLCAKKwkJY2h0eXBlCWJzLCAKKwkJY2h0eXBlCXRsLCAKKwkJY2h0eXBlCXRyLCAKKwkJY2h0eXBlCWJsLCAKKwkJY2h0eXBlCWJyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2hnYXQuYyAqLworCisjdW5kZWYgd2NoZ2F0CitpbnQJd2NoZ2F0KAorCQlXSU5ET1cJKndpbiwgCisJCWludAluLCAKKwkJYXR0cl90CWF0dHIsIAorCQlzaG9ydAljb2xvciwgCisJCWNvbnN0IHZvaWQgKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jbGVhci5jICovCisKKyN1bmRlZiB3Y2xlYXIKK2ludAl3Y2xlYXIoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xlYXJvay5jICovCisKKyN1bmRlZiBjbGVhcm9rCitpbnQJY2xlYXJvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2NscmJvdC5jICovCisKKyN1bmRlZiB3Y2xydG9ib3QKK2ludAl3Y2xydG9ib3QoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfY2xyZW9sLmMgKi8KKworI3VuZGVmIHdjbHJ0b2VvbAoraW50CXdjbHJ0b2VvbCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9jb2xvci5jICovCisKKyNpbmNsdWRlIDx0aWMuaD4KKworI3VuZGVmIENPTE9SX1BBSVJTCitpbnQJQ09MT1JfUEFJUlM7CisjdW5kZWYgQ09MT1JTCitpbnQJQ09MT1JTOworCisjdW5kZWYgX25jX3Jlc2V0X2NvbG9ycworTkNVUlNFU19CT09MIF9uY19yZXNldF9jb2xvcnModm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgc3RhcnRfY29sb3IKK2ludAlzdGFydF9jb2xvcih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbml0X3BhaXIKK2ludAlpbml0X3BhaXIoCisJCXNob3J0CXBhaXIsIAorCQlzaG9ydAlmLCAKKwkJc2hvcnQJYikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5pdF9jb2xvcgoraW50CWluaXRfY29sb3IoCisJCXNob3J0CWNvbG9yLCAKKwkJc2hvcnQJciwgCisJCXNob3J0CWcsIAorCQlzaG9ydAliKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjYW5fY2hhbmdlX2NvbG9yCitOQ1VSU0VTX0JPT0wgY2FuX2NoYW5nZV9jb2xvcih2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBoYXNfY29sb3JzCitOQ1VSU0VTX0JPT0wgaGFzX2NvbG9ycyh2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBjb2xvcl9jb250ZW50CitpbnQJY29sb3JfY29udGVudCgKKwkJc2hvcnQJY29sb3IsIAorCQlzaG9ydAkqciwgCisJCXNob3J0CSpnLCAKKwkJc2hvcnQJKmIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHBhaXJfY29udGVudAoraW50CXBhaXJfY29udGVudCgKKwkJc2hvcnQJcGFpciwgCisJCXNob3J0CSpmLCAKKwkJc2hvcnQJKmIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19kb19jb2xvcgordm9pZAlfbmNfZG9fY29sb3IoCisJCXNob3J0CW9sZF9wYWlyLCAKKwkJc2hvcnQJcGFpciwgCisJCU5DVVJTRVNfQk9PTCByZXZlcnNlLCAKKwkJaW50CSgqb3V0YykoCisJCWludAlwMSkpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfY29sb3JzZXQuYyAqLworCisjdW5kZWYgd2NvbG9yX3NldAoraW50CXdjb2xvcl9zZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJc2hvcnQJY29sb3JfcGFpcl9udW1iZXIsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZGVsY2guYyAqLworCisjdW5kZWYgd2RlbGNoCitpbnQJd2RlbGNoKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2RlbHdpbi5jICovCisKKyN1bmRlZiBkZWx3aW4KK2ludAlkZWx3aW4oCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZWNoby5jICovCisKKyN1bmRlZiBlY2hvCitpbnQJZWNobyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub2VjaG8KK2ludAlub2VjaG8odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2VuZHdpbi5jICovCisKKyN1bmRlZiBlbmR3aW4KK2ludAllbmR3aW4odm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2VyYXNlLmMgKi8KKworI3VuZGVmIHdlcmFzZQoraW50CXdlcmFzZSgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9mbGFzaC5jICovCisKKyN1bmRlZiBmbGFzaAoraW50CWZsYXNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9saWJfZ2VuLmMgKi8KKworI3VuZGVmIGFkZGNoCitpbnQJYWRkY2goCisJCWNvbnN0IGNodHlwZSB6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRjaG5zdHIKK2ludAlhZGRjaG5zdHIoCisJCWNvbnN0IGNodHlwZSAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkY2hzdHIKK2ludAlhZGRjaHN0cigKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRuc3RyCitpbnQJYWRkbnN0cigKKwkJY29uc3QgY2hhciAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkc3RyCitpbnQJYWRkc3RyKAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyb2ZmCitpbnQJYXR0cm9mZigKKwkJTkNVUlNFU19BVFRSX1QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cm9uCitpbnQJYXR0cm9uKAorCQlOQ1VSU0VTX0FUVFJfVAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyc2V0CitpbnQJYXR0cnNldCgKKwkJTkNVUlNFU19BVFRSX1QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYXR0cl9nZXQKK2ludAlhdHRyX2dldCgKKwkJYXR0cl90CSphMSwgCisJCXNob3J0CSphMiwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfb2ZmCitpbnQJYXR0cl9vZmYoCisJCWF0dHJfdAlhMSwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGF0dHJfb24KK2ludAlhdHRyX29uKAorCQlhdHRyX3QJYTEsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhdHRyX3NldAoraW50CWF0dHJfc2V0KAorCQlhdHRyX3QJYTEsIAorCQlzaG9ydAlhMiwgCisJCXZvaWQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJrZ2QKK2ludAlia2dkKAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYmtnZHNldAordm9pZAlia2dkc2V0KAorCQljaHR5cGUJeikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGJvcmRlcgoraW50CWJvcmRlcigKKwkJY2h0eXBlCWExLCAKKwkJY2h0eXBlCWEyLCAKKwkJY2h0eXBlCWEzLCAKKwkJY2h0eXBlCWE0LCAKKwkJY2h0eXBlCWE1LCAKKwkJY2h0eXBlCWE2LCAKKwkJY2h0eXBlCWE3LCAKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJveAoraW50CWJveCgKKwkJV0lORE9XCSphMSwgCisJCWNodHlwZQlhMiwgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjaGdhdAoraW50CWNoZ2F0KAorCQlpbnQJYTEsIAorCQlhdHRyX3QJYTIsIAorCQlzaG9ydAlhMywgCisJCWNvbnN0IHZvaWQgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNsZWFyCitpbnQJY2xlYXIodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgY2xydG9ib3QKK2ludAljbHJ0b2JvdCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjbHJ0b2VvbAoraW50CWNscnRvZW9sKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGNvbG9yX3NldAoraW50CWNvbG9yX3NldCgKKwkJc2hvcnQJYTEsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBDT0xPUl9QQUlSCitpbnQJQ09MT1JfUEFJUigKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlbGNoCitpbnQJZGVsY2godm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZGVsZXRlbG4KK2ludAlkZWxldGVsbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBlY2hvY2hhcgoraW50CWVjaG9jaGFyKAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZXJhc2UKK2ludAllcmFzZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRia2dkCitjaHR5cGUJZ2V0YmtnZCgKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBnZXRjaAoraW50CWdldGNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldG5zdHIKK2ludAlnZXRuc3RyKAorCQljaGFyCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRzdHIKK2ludAlnZXRzdHIoCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGhsaW5lCitpbnQJaGxpbmUoCisJCWNodHlwZQlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbmNoCitjaHR5cGUJaW5jaCh2b2lkKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBpbmNobnN0cgoraW50CWluY2huc3RyKAorCQljaHR5cGUJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluY2hzdHIKK2ludAlpbmNoc3RyKAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGlubnN0cgoraW50CWlubnN0cigKKwkJY2hhcgkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zY2gKK2ludAlpbnNjaCgKKwkJY2h0eXBlCXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc2RlbGxuCitpbnQJaW5zZGVsbG4oCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNlcnRsbgoraW50CWluc2VydGxuKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc25zdHIKK2ludAlpbnNuc3RyKAorCQljb25zdCBjaGFyICphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpbnNzdHIKK2ludAlpbnNzdHIoCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc3RyCitpbnQJaW5zdHIoCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1vdmUKK2ludAltb3ZlKAorCQlpbnQJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRjaAoraW50CW12YWRkY2goCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNodHlwZSB6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZGNobnN0cgoraW50CW12YWRkY2huc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaHR5cGUgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkY2hzdHIKK2ludAltdmFkZGNoc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjaHR5cGUgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12YWRkbnN0cgoraW50CW12YWRkbnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2hhciAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRzdHIKK2ludAltdmFkZHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2hhciAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZjaGdhdAoraW50CW12Y2hnYXQoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWF0dHJfdAlhNCwgCisJCXNob3J0CWE1LCAKKwkJY29uc3Qgdm9pZCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZkZWxjaAoraW50CW12ZGVsY2goCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmdldGNoCitpbnQJbXZnZXRjaCgKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12Z2V0bnN0cgoraW50CW12Z2V0bnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRzdHIKK2ludAltdmdldHN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZobGluZQoraW50CW12aGxpbmUoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQlhMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluY2gKK2NodHlwZQltdmluY2goCisJCWludAlhMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBtdmluY2huc3RyCitpbnQJbXZpbmNobnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2h0eXBlCSphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluY2hzdHIKK2ludAltdmluY2hzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbm5zdHIKK2ludAltdmlubnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2hhcgkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNjaAoraW50CW12aW5zY2goCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNodHlwZQl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc25zdHIKK2ludAltdmluc25zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zc3RyCitpbnQJbXZpbnNzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5zdHIKK2ludAltdmluc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdnZsaW5lCitpbnQJbXZ2bGluZSgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY2h0eXBlCWEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZGNoCitpbnQJbXZ3YWRkY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaHR5cGUgeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkY2huc3RyCitpbnQJbXZ3YWRkY2huc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2h0eXBlICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRjaHN0cgoraW50CW12d2FkZGNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRuc3RyCitpbnQJbXZ3YWRkbnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNoYXIgKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2FkZHN0cgoraW50CW12d2FkZHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2NoZ2F0CitpbnQJbXZ3Y2hnYXQoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQlpbnQJYTQsIAorCQlhdHRyX3QJYTUsIAorCQlzaG9ydAlhNiwgCisJCWNvbnN0IHZvaWQgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2RlbGNoCitpbnQJbXZ3ZGVsY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0Y2gKK2ludAltdndnZXRjaCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndnZXRuc3RyCitpbnQJbXZ3Z2V0bnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2dldHN0cgoraW50CW12d2dldHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2hsaW5lCitpbnQJbXZ3aGxpbmUoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5jaAorY2h0eXBlCW12d2luY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihjaHR5cGUgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5jaG5zdHIKK2ludAltdndpbmNobnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNodHlwZQkqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5jaHN0cgoraW50CW12d2luY2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2lubnN0cgoraW50CW12d2lubnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNoYXIJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luc2NoCitpbnQJbXZ3aW5zY2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljaHR5cGUJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zbnN0cgoraW50CW12d2luc25zdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnNzdHIKK2ludAltdndpbnNzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnN0cgoraW50CW12d2luc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY2hhcgkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3dmxpbmUKK2ludAltdnd2bGluZSgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNodHlwZQlhNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBQQUlSX05VTUJFUgoraW50CVBBSVJfTlVNQkVSKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVkcmF3d2luCitpbnQJcmVkcmF3d2luKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlZnJlc2gKK2ludAlyZWZyZXNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNjcmwKK2ludAlzY3JsKAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2Nyb2xsCitpbnQJc2Nyb2xsKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNldHNjcnJlZworaW50CXNldHNjcnJlZygKKwkJaW50CWExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNsa19hdHRyX29mZgoraW50CXNsa19hdHRyX29mZigKKwkJY29uc3QgYXR0cl90IGExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2xrX2F0dHJfb24KK2ludAlzbGtfYXR0cl9vbigKKwkJYXR0cl90CWExLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc3RhbmRvdXQKK2ludAlzdGFuZG91dCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzdGFuZGVuZAoraW50CXN0YW5kZW5kKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRpbWVvdXQKK3ZvaWQJdGltZW91dCgKKwkJaW50CXopCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB0b3VjaGxpbmUKK2ludAl0b3VjaGxpbmUoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdG91Y2h3aW4KK2ludAl0b3VjaHdpbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB1bnRvdWNod2luCitpbnQJdW50b3VjaHdpbigKKwkJV0lORE9XCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2bGluZQoraW50CXZsaW5lKAorCQljaHR5cGUJYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdndfcHJpbnR3CitpbnQJdndfcHJpbnR3KAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2hhciAqYTIsIAorCQl2YV9saXN0CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHZ3X3NjYW53CitpbnQJdndfc2NhbncoCisJCVdJTkRPVwkqYTEsIAorCQljaGFyCSphMiwgCisJCXZhX2xpc3QJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZGNoc3RyCitpbnQJd2FkZGNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2h0eXBlICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkc3RyCitpbnQJd2FkZHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IGNoYXIgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyb24KK2ludAl3YXR0cm9uKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdhdHRyb2ZmCitpbnQJd2F0dHJvZmYoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJzZXQKK2ludAl3YXR0cnNldCgKKwkJV0lORE9XCSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YXR0cl9nZXQKK2ludAl3YXR0cl9nZXQoCisJCVdJTkRPVwkqYTEsIAorCQlhdHRyX3QJKmEyLCAKKwkJc2hvcnQJKmEzLCAKKwkJdm9pZAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2F0dHJfc2V0CitpbnQJd2F0dHJfc2V0KAorCQlXSU5ET1cJKmExLCAKKwkJYXR0cl90CWEyLCAKKwkJc2hvcnQJYTMsIAorCQl2b2lkCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3ZGVsZXRlbG4KK2ludAl3ZGVsZXRlbG4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2dldHN0cgoraW50CXdnZXRzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5jaHN0cgoraW50CXdpbmNoc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY2h0eXBlCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zZXJ0bG4KK2ludAl3aW5zZXJ0bG4oCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc3N0cgoraW50CXdpbnNzdHIoCisJCVdJTkRPVwkqYTEsIAorCQljb25zdCBjaGFyICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5zdHIKK2ludAl3aW5zdHIoCisJCVdJTkRPVwkqYTEsIAorCQljaGFyCSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3c3RhbmRvdXQKK2ludAl3c3RhbmRvdXQoCisJCVdJTkRPVwkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd3N0YW5kZW5kCitpbnQJd3N0YW5kZW5kKAorCQlXSU5ET1cJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldGF0dHJzCitpbnQJZ2V0YXR0cnMoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0Y3VyeAoraW50CWdldGN1cngoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0Y3VyeQoraW50CWdldGN1cnkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YmVneAoraW50CWdldGJlZ3goCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0YmVneQoraW50CWdldGJlZ3koCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0bWF4eAoraW50CWdldG1heHgoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0bWF4eQoraW50CWdldG1heHkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0cGFyeAoraW50CWdldHBhcngoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0cGFyeQoraW50CWdldHBhcnkoCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2dldHBhcmVudAorV0lORE9XCSp3Z2V0cGFyZW50KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBpc19jbGVhcmVkCitOQ1VSU0VTX0JPT0wgaXNfY2xlYXJlZCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19pZGNvaworTkNVUlNFU19CT09MIGlzX2lkY29rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2lkbG9rCitOQ1VSU0VTX0JPT0wgaXNfaWRsb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfaW1tZWRvaworTkNVUlNFU19CT09MIGlzX2ltbWVkb2soCisJCWNvbnN0IFdJTkRPVyAqeikKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfa2V5cGFkCitOQ1VSU0VTX0JPT0wgaXNfa2V5cGFkKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX2xlYXZlb2sKK05DVVJTRVNfQk9PTCBpc19sZWF2ZW9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX25vZGVsYXkKK05DVVJTRVNfQk9PTCBpc19ub2RlbGF5KAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX25vdGltZW91dAorTkNVUlNFU19CT09MIGlzX25vdGltZW91dCgKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBpc19zY3JvbGxvaworTkNVUlNFU19CT09MIGlzX3Njcm9sbG9rKAorCQljb25zdCBXSU5ET1cgKnopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIGlzX3N5bmNvaworTkNVUlNFU19CT09MIGlzX3N5bmNvaygKKwkJY29uc3QgV0lORE9XICp6KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0c2NycmVnCitpbnQJd2dldHNjcnJlZygKKwkJY29uc3QgV0lORE9XICphMSwgCisJCWludAkqYTIsIAorCQlpbnQJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGFkZF93Y2gKK2ludAlhZGRfd2NoKAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRfd2NobnN0cgoraW50CWFkZF93Y2huc3RyKAorCQljb25zdCBjY2hhcl90ICphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhZGRfd2Noc3RyCitpbnQJYWRkX3djaHN0cigKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkbndzdHIKK2ludAlhZGRud3N0cigKKwkJY29uc3Qgd2NoYXJfdCAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYWRkd3N0cgoraW50CWFkZHdzdHIoCisJCWNvbnN0IHdjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJrZ3JuZAoraW50CWJrZ3JuZCgKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgYmtncm5kc2V0Cit2b2lkCWJrZ3JuZHNldCgKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGJvcmRlcl9zZXQKK2ludAlib3JkZXJfc2V0KAorCQljb25zdCBjY2hhcl90ICphMSwgCisJCWNvbnN0IGNjaGFyX3QgKmEyLCAKKwkJY29uc3QgY2NoYXJfdCAqYTMsIAorCQljb25zdCBjY2hhcl90ICphNCwgCisJCWNvbnN0IGNjaGFyX3QgKmE1LCAKKwkJY29uc3QgY2NoYXJfdCAqYTYsIAorCQljb25zdCBjY2hhcl90ICphNywgCisJCWNvbnN0IGNjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJveF9zZXQKK2ludAlib3hfc2V0KAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2NoYXJfdCAqYTIsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBlY2hvX3djaGFyCitpbnQJZWNob193Y2hhcigKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0X3djaAoraW50CWdldF93Y2goCisJCXdpbnRfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0X3dzdHIKK2ludAlnZXRfd3N0cigKKwkJd2ludF90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBnZXRia2dybmQKK2ludAlnZXRia2dybmQoCisJCWNjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGdldG5fd3N0cgoraW50CWdldG5fd3N0cigKKwkJd2ludF90CSphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBobGluZV9zZXQKK2ludAlobGluZV9zZXQoCisJCWNvbnN0IGNjaGFyX3QgKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluX3djaAoraW50CWluX3djaCgKKwkJY2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5fd2NobnN0cgoraW50CWluX3djaG5zdHIoCisJCWNjaGFyX3QJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluX3djaHN0cgoraW50CWluX3djaHN0cigKKwkJY2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5ud3N0cgoraW50CWlubndzdHIoCisJCXdjaGFyX3QJKmExLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc19ud3N0cgoraW50CWluc19ud3N0cigKKwkJY29uc3Qgd2NoYXJfdCAqYTEsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgaW5zX3djaAoraW50CWluc193Y2goCisJCWNvbnN0IGNjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGluc193c3RyCitpbnQJaW5zX3dzdHIoCisJCWNvbnN0IHdjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGlud3N0cgoraW50CWlud3N0cigKKwkJd2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRfd2NoCitpbnQJbXZhZGRfd2NoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZF93Y2huc3RyCitpbnQJbXZhZGRfd2NobnN0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2NoYXJfdCAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGRfd2Noc3RyCitpbnQJbXZhZGRfd2Noc3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmFkZG53c3RyCitpbnQJbXZhZGRud3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3Qgd2NoYXJfdCAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZhZGR3c3RyCitpbnQJbXZhZGR3c3RyKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCB3Y2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmdldF93Y2gKK2ludAltdmdldF93Y2goCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCXdpbnRfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRfd3N0cgoraW50CW12Z2V0X3dzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCXdpbnRfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZnZXRuX3dzdHIKK2ludAltdmdldG5fd3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJd2ludF90CSphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmhsaW5lX3NldAoraW50CW12aGxpbmVfc2V0KAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjY2hhcl90ICphMywgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluX3djaAoraW50CW12aW5fd2NoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljY2hhcl90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluX3djaG5zdHIKK2ludAltdmluX3djaG5zdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNjaGFyX3QJKmEzLCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5fd2Noc3RyCitpbnQJbXZpbl93Y2hzdHIoCisJCWludAlhMSwgCisJCWludAlhMiwgCisJCWNjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12aW5ud3N0cgoraW50CW12aW5ud3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJd2NoYXJfdAkqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNfbndzdHIKK2ludAltdmluc19ud3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3Qgd2NoYXJfdCAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbnNfd2NoCitpbnQJbXZpbnNfd2NoKAorCQlpbnQJYTEsIAorCQlpbnQJYTIsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdmluc193c3RyCitpbnQJbXZpbnNfd3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3Qgd2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZpbndzdHIKK2ludAltdmlud3N0cigKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJd2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ2bGluZV9zZXQKK2ludAltdnZsaW5lX3NldCgKKwkJaW50CWExLCAKKwkJaW50CWEyLCAKKwkJY29uc3QgY2NoYXJfdCAqYTMsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkX3djaAoraW50CW12d2FkZF93Y2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRfd2NobnN0cgoraW50CW12d2FkZF93Y2huc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2NoYXJfdCAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkX3djaHN0cgoraW50CW12d2FkZF93Y2hzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndhZGRud3N0cgoraW50CW12d2FkZG53c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3Qgd2NoYXJfdCAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3YWRkd3N0cgoraW50CW12d2FkZHdzdHIoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCB3Y2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndnZXRfd2NoCitpbnQJbXZ3Z2V0X3djaCgKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCXdpbnRfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0X3dzdHIKK2ludAltdndnZXRfd3N0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCXdpbnRfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3Z2V0bl93c3RyCitpbnQJbXZ3Z2V0bl93c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJd2ludF90CSphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndobGluZV9zZXQKK2ludAltdndobGluZV9zZXQoCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjY2hhcl90ICphNCwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbl93Y2gKK2ludAltdndpbl93Y2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljY2hhcl90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbl93Y2huc3RyCitpbnQJbXZ3aW5fd2NobnN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNjaGFyX3QJKmE0LCAKKwkJaW50CXopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2luX3djaHN0cgoraW50CW12d2luX3djaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWludAlhMiwgCisJCWludAlhMywgCisJCWNjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d2lubndzdHIKK2ludAltdndpbm53c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJd2NoYXJfdAkqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zX253c3RyCitpbnQJbXZ3aW5zX253c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3Qgd2NoYXJfdCAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW5zX3djaAoraW50CW12d2luc193Y2goCisJCVdJTkRPVwkqYTEsIAorCQlpbnQJYTIsIAorCQlpbnQJYTMsIAorCQljb25zdCBjY2hhcl90ICp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdndpbnNfd3N0cgoraW50CW12d2luc193c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3Qgd2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3aW53c3RyCitpbnQJbXZ3aW53c3RyKAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJd2NoYXJfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3dmxpbmVfc2V0CitpbnQJbXZ3dmxpbmVfc2V0KAorCQlXSU5ET1cJKmExLCAKKwkJaW50CWEyLCAKKwkJaW50CWEzLCAKKwkJY29uc3QgY2NoYXJfdCAqYTQsIAorCQlpbnQJeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdmxpbmVfc2V0CitpbnQJdmxpbmVfc2V0KAorCQljb25zdCBjY2hhcl90ICphMSwgCisJCWludAl6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3YWRkX3djaHN0cgoraW50CXdhZGRfd2Noc3RyKAorCQlXSU5ET1cJKmExLCAKKwkJY29uc3QgY2NoYXJfdCAqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2FkZHdzdHIKK2ludAl3YWRkd3N0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IHdjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdnZXRfd3N0cgoraW50CXdnZXRfd3N0cigKKwkJV0lORE9XCSphMSwgCisJCXdpbnRfdAkqeikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2dldGJrZ3JuZAoraW50CXdnZXRia2dybmQoCisJCVdJTkRPVwkqYTEsIAorCQljY2hhcl90CSp6KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3aW5fd2Noc3RyCitpbnQJd2luX3djaHN0cigKKwkJV0lORE9XCSphMSwgCisJCWNjaGFyX3QJKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNfd3N0cgoraW50CXdpbnNfd3N0cigKKwkJV0lORE9XCSphMSwgCisJCWNvbnN0IHdjaGFyX3QgKnopCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG1vdXNlX3RyYWZvCitOQ1VSU0VTX0JPT0wgbW91c2VfdHJhZm8oCisJCWludAkqYTEsIAorCQlpbnQJKmEyLCAKKwkJTkNVUlNFU19CT09MIHopCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9nZXRjaC5jICovCisKKyNpbmNsdWRlIDxmaWZvX2RlZnMuaD4KKworI3VuZGVmIEVTQ0RFTEFZCitpbnQJRVNDREVMQVk7CisKKyN1bmRlZiBzZXRfZXNjZGVsYXkKK2ludAlzZXRfZXNjZGVsYXkoCisJCWludAl2YWx1ZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3dnZXRjaAoraW50CV9uY193Z2V0Y2goCisJCVdJTkRPVwkqd2luLCAKKwkJdW5zaWduZWQgbG9uZyAqcmVzdWx0LCAKKwkJaW50CXVzZV9tZXRhKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3Z2V0Y2gKK2ludAl3Z2V0Y2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfZ2V0c3RyLmMgKi8KKworI3VuZGVmIHdnZXRuc3RyCitpbnQJd2dldG5zdHIoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqc3RyLCAKKwkJaW50CW1heGxlbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2hsaW5lLmMgKi8KKworI3VuZGVmIHdobGluZQoraW50CXdobGluZSgKKwkJV0lORE9XCSp3aW4sIAorCQljaHR5cGUJY2gsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2ltbWVkb2suYyAqLworCisjdW5kZWYgaW1tZWRvawordm9pZAlpbW1lZG9rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX2luY2hzdHIuYyAqLworCisjdW5kZWYgd2luY2huc3RyCitpbnQJd2luY2huc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQkqc3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbml0c2NyLmMgKi8KKworI3VuZGVmIGluaXRzY3IKK1dJTkRPVwkqaW5pdHNjcih2b2lkKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc2NoLmMgKi8KKworI3VuZGVmIF9uY19pbnNlcnRfY2gKK2ludAlfbmNfaW5zZXJ0X2NoKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2luc2NoCitpbnQJd2luc2NoKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfaW5zZGVsLmMgKi8KKworI3VuZGVmIHdpbnNkZWxsbgoraW50CXdpbnNkZWxsbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2luc25zdHIuYyAqLworCisjdW5kZWYgd2luc25zdHIKK2ludAl3aW5zbnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICpzLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9pbnN0ci5jICovCisKKyN1bmRlZiB3aW5uc3RyCitpbnQJd2lubnN0cigKKwkJV0lORE9XCSp3aW4sIAorCQljaGFyCSpzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2lzZW5kd2luLmMgKi8KKworI3VuZGVmIGlzZW5kd2luCitOQ1VSU0VTX0JPT0wgaXNlbmR3aW4odm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2xlYXZlb2suYyAqLworCisjdW5kZWYgbGVhdmVvaworaW50CWxlYXZlb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9tb3VzZS5jICovCisKKyN1bmRlZiBnZXRtb3VzZQoraW50CWdldG1vdXNlKAorCQlNRVZFTlQJKmFldmVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdW5nZXRtb3VzZQoraW50CXVuZ2V0bW91c2UoCisJCU1FVkVOVAkqYWV2ZW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtb3VzZW1hc2sKK21tYXNrX3QJbW91c2VtYXNrKAorCQltbWFza190CW5ld21hc2ssIAorCQltbWFza190CSpvbGRtYXNrKQorCQl7IHJldHVybigqKG1tYXNrX3QgKikwKTsgfQorCisjdW5kZWYgd2VuY2xvc2UKK05DVVJTRVNfQk9PTCB3ZW5jbG9zZSgKKwkJY29uc3QgV0lORE9XICp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4KQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBtb3VzZWludGVydmFsCitpbnQJbW91c2VpbnRlcnZhbCgKKwkJaW50CW1heGNsaWNrKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaGFzX21vdXNlCitpbnQJX25jX2hhc19tb3VzZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3bW91c2VfdHJhZm8KK05DVVJTRVNfQk9PTCB3bW91c2VfdHJhZm8oCisJCWNvbnN0IFdJTkRPVyAqd2luLCAKKwkJaW50CSpwWSwgCisJCWludAkqcFgsIAorCQlOQ1VSU0VTX0JPT0wgdG9fc2NyZWVuKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbW92ZS5jICovCisKKyN1bmRlZiB3bW92ZQoraW50CXdtb3ZlKAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CXgpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90dHkvbGliX212Y3VyLmMgKi8KKworI3VuZGVmIF9uY19tc2VjX2Nvc3QKK2ludAlfbmNfbXNlY19jb3N0KAorCQljb25zdCBjaGFyICpjb25zdCBjYXAsIAorCQlpbnQJYWZmY250KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfbXZjdXJfcmVzdW1lCit2b2lkCV9uY19tdmN1cl9yZXN1bWUodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19tdmN1cl9pbml0Cit2b2lkCV9uY19tdmN1cl9pbml0KHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbXZjdXJfd3JhcAordm9pZAlfbmNfbXZjdXJfd3JhcCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbXZjdXIKK2ludAltdmN1cigKKwkJaW50CXlvbGQsIAorCQlpbnQJeG9sZCwgCisJCWludAl5bmV3LCAKKwkJaW50CXhuZXcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19vcHRpbWl6ZV9lbmFibGUKK2ludAlfbmNfb3B0aW1pemVfZW5hYmxlOworCisvKiAuL2Jhc2UvbGliX212d2luLmMgKi8KKworI3VuZGVmIG12d2luCitpbnQJbXZ3aW4oCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CWJ5LCAKKwkJaW50CWJ4KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfbmV3dGVybS5jICovCisKKyN1bmRlZiBmaWx0ZXIKK3ZvaWQJZmlsdGVyKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBub2ZpbHRlcgordm9pZAlub2ZpbHRlcih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbmV3dGVybQorU0NSRUVOCSpuZXd0ZXJtKAorCQljaGFyCSpuYW1lLCAKKwkJRklMRQkqb2ZwLCAKKwkJRklMRQkqaWZwKQorCQl7IHJldHVybigqKFNDUkVFTiAqKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX25ld3dpbi5jICovCisKKyN1bmRlZiBfbmNfZnJlZXdpbgoraW50CV9uY19mcmVld2luKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbmV3d2luCitXSU5ET1cJKm5ld3dpbigKKwkJaW50CW51bV9saW5lcywgCisJCWludAludW1fY29sdW1ucywgCisJCWludAliZWd5LCAKKwkJaW50CWJlZ3gpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBkZXJ3aW4KK1dJTkRPVwkqZGVyd2luKAorCQlXSU5ET1cJKm9yaWcsIAorCQlpbnQJbnVtX2xpbmVzLCAKKwkJaW50CW51bV9jb2x1bW5zLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHN1YndpbgorV0lORE9XCSpzdWJ3aW4oCisJCVdJTkRPVwkqdywgCisJCWludAlsLCAKKwkJaW50CWMsIAorCQlpbnQJeSwgCisJCWludAl4KQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgX25jX21ha2VuZXcKK1dJTkRPVwkqX25jX21ha2VuZXcoCisJCWludAludW1fbGluZXMsIAorCQlpbnQJbnVtX2NvbHVtbnMsIAorCQlpbnQJYmVneSwgCisJCWludAliZWd4LCAKKwkJaW50CWZsYWdzKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgX25jX3NjcmVlbl9vZgorU0NSRUVOCSpfbmNfc2NyZWVuX29mKAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihTQ1JFRU4gKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9ubC5jICovCisKKyN1bmRlZiBubAoraW50CW5sKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vbmwKK2ludAlub25sKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9vdmVybGF5LmMgKi8KKworI3VuZGVmIG92ZXJsYXkKK2ludAlvdmVybGF5KAorCQljb25zdCBXSU5ET1cgKndpbjEsIAorCQlXSU5ET1cJKndpbjIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG92ZXJ3cml0ZQoraW50CW92ZXJ3cml0ZSgKKwkJY29uc3QgV0lORE9XICp3aW4xLCAKKwkJV0lORE9XCSp3aW4yKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjb3B5d2luCitpbnQJY29weXdpbigKKwkJY29uc3QgV0lORE9XICpzcmMsIAorCQlXSU5ET1cJKmRzdCwgCisJCWludAlzbWlucm93LCAKKwkJaW50CXNtaW5jb2wsIAorCQlpbnQJZG1pbnJvdywgCisJCWludAlkbWluY29sLCAKKwkJaW50CWRtYXhyb3csIAorCQlpbnQJZG1heGNvbCwgCisJCWludAlvdmVyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcGFkLmMgKi8KKworI3VuZGVmIG5ld3BhZAorV0lORE9XCSpuZXdwYWQoCisJCWludAlsLCAKKwkJaW50CWMpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKyN1bmRlZiBzdWJwYWQKK1dJTkRPVwkqc3VicGFkKAorCQlXSU5ET1cJKm9yaWcsIAorCQlpbnQJbCwgCisJCWludAljLCAKKwkJaW50CWJlZ3ksIAorCQlpbnQJYmVneCkKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KKworI3VuZGVmIHByZWZyZXNoCitpbnQJcHJlZnJlc2goCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXBtaW5yb3csIAorCQlpbnQJcG1pbmNvbCwgCisJCWludAlzbWlucm93LCAKKwkJaW50CXNtaW5jb2wsIAorCQlpbnQJc21heHJvdywgCisJCWludAlzbWF4Y29sKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwbm91dHJlZnJlc2gKK2ludAlwbm91dHJlZnJlc2goCisJCVdJTkRPVwkqd2luLCAKKwkJaW50CXBtaW5yb3csIAorCQlpbnQJcG1pbmNvbCwgCisJCWludAlzbWlucm93LCAKKwkJaW50CXNtaW5jb2wsIAorCQlpbnQJc21heHJvdywgCisJCWludAlzbWF4Y29sKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwZWNob2NoYXIKK2ludAlwZWNob2NoYXIoCisJCVdJTkRPVwkqcGFkLCAKKwkJY29uc3QgY2h0eXBlIGNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfcHJpbnR3LmMgKi8KKworI3VuZGVmIHByaW50dworaW50CXByaW50dygKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3cHJpbnR3CitpbnQJd3ByaW50dygKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12cHJpbnR3CitpbnQJbXZwcmludHcoCisJCWludAl5LCAKKwkJaW50CXgsIAorCQljb25zdCBjaGFyICpmbXQsIAorCQkuLi4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG12d3ByaW50dworaW50CW12d3ByaW50dygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2d3ByaW50dworaW50CXZ3cHJpbnR3KAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCXZhX2xpc3QJYXJncCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3JlZHJhd2xuLmMgKi8KKworI3VuZGVmIHdyZWRyYXdsbgoraW50CXdyZWRyYXdsbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJYmVnLCAKKwkJaW50CW51bSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3JlZnJlc2guYyAqLworCisjdW5kZWYgd3JlZnJlc2gKK2ludAl3cmVmcmVzaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdub3V0cmVmcmVzaAoraW50CXdub3V0cmVmcmVzaCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9yZXN0YXJ0LmMgKi8KKworI3VuZGVmIHJlc3RhcnR0ZXJtCitpbnQJcmVzdGFydHRlcm0oCisJCWNoYXIJKnRlcm1wLCAKKwkJaW50CWZpbGVudW0sIAorCQlpbnQJKmVycnJldCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NjYW53LmMgKi8KKworI3VuZGVmIHZ3c2NhbncKK2ludAl2d3NjYW53KAorCQlXSU5ET1cJKndpbiwgCisJCWNoYXIJKmZtdCwgCisJCXZhX2xpc3QJYXJncCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2NhbncKK2ludAlzY2FudygKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3c2NhbncKK2ludAl3c2NhbncoCisJCVdJTkRPVwkqd2luLCAKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBtdnNjYW53CitpbnQJbXZzY2FudygKKwkJaW50CXksIAorCQlpbnQJeCwgCisJCWNoYXIJKmZtdCwgCisJCS4uLikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbXZ3c2NhbncKK2ludAltdndzY2FudygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4LCAKKwkJY2hhcgkqZm10LCAKKwkJLi4uKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2NyZWVuLmMgKi8KKworI3VuZGVmIGdldHdpbgorV0lORE9XCSpnZXR3aW4oCisJCUZJTEUJKmZpbGVwKQorCQl7IHJldHVybigqKFdJTkRPVyAqKikwKTsgfQorCisjdW5kZWYgcHV0d2luCitpbnQJcHV0d2luKAorCQlXSU5ET1cJKndpbiwgCisJCUZJTEUJKmZpbGVwKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JfcmVzdG9yZQoraW50CXNjcl9yZXN0b3JlKAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JfZHVtcAoraW50CXNjcl9kdW1wKAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3JfaW5pdAoraW50CXNjcl9pbml0KAorCQljb25zdCBjaGFyICpmaWxlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzY3Jfc2V0CitpbnQJc2NyX3NldCgKKwkJY29uc3QgY2hhciAqZmlsZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Njcm9sbC5jICovCisKKyN1bmRlZiBfbmNfc2Nyb2xsX3dpbmRvdwordm9pZAlfbmNfc2Nyb2xsX3dpbmRvdygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQgY29uc3QgbiwgCisJCXNob3J0IGNvbnN0IHRvcCwgCisJCXNob3J0IGNvbnN0IGJvdHRvbSwgCisJCWNjaGFyX3QJYmxhbmspCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3c2NybAoraW50CXdzY3JsKAorCQlXSU5ET1cJKndpbiwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2Nyb2xsb2suYyAqLworCisjdW5kZWYgc2Nyb2xsb2sKK2ludAlzY3JvbGxvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NjcnJlZy5jICovCisKKyN1bmRlZiB3c2V0c2NycmVnCitpbnQJd3NldHNjcnJlZygKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJdG9wLCAKKwkJaW50CWJvdHRvbSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3NldF90ZXJtLmMgKi8KKworI3VuZGVmIHNldF90ZXJtCitTQ1JFRU4JKnNldF90ZXJtKAorCQlTQ1JFRU4JKnNjcmVlbnApCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKyN1bmRlZiBkZWxzY3JlZW4KK3ZvaWQJZGVsc2NyZWVuKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NldHVwc2NyZWVuCitpbnQJX25jX3NldHVwc2NyZWVuKAorCQlpbnQJc2xpbmVzLCAKKwkJaW50CXNjb2x1bW5zLCAKKwkJRklMRQkqb3V0cHV0LCAKKwkJTkNVUlNFU19CT09MIGZpbHRlcmVkLCAKKwkJaW50CXNsa19mb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yaXBvZmZsaW5lCitpbnQJX25jX3JpcG9mZmxpbmUoCisJCWludAlsaW5lLCAKKwkJaW50CSgqaW5pdCkoCisJCVdJTkRPVwkqcDEsIAorCQlpbnQJcDIpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByaXBvZmZsaW5lCitpbnQJcmlwb2ZmbGluZSgKKwkJaW50CWxpbmUsIAorCQlpbnQJKCppbml0KSgKKwkJV0lORE9XCSpwMSwgCisJCWludAlwMikpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGsuYyAqLworCisjdW5kZWYgX25jX3Nsa19pbml0aWFsaXplCitpbnQJX25jX3Nsa19pbml0aWFsaXplKAorCQlXSU5ET1cJKnN0d2luLCAKKwkJaW50CWNvbHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHNsa19yZXN0b3JlCitpbnQJc2xrX3Jlc3RvcmUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cl9zZXQuYyAqLworCisjdW5kZWYgc2xrX2F0dHJfc2V0CitpbnQJc2xrX2F0dHJfc2V0KAorCQljb25zdCBhdHRyX3QgYXR0ciwgCisJCXNob3J0CWNvbG9yX3BhaXJfbnVtYmVyLCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2F0cm9mLmMgKi8KKworI3VuZGVmIHNsa19hdHRyb2ZmCitpbnQJc2xrX2F0dHJvZmYoCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXRyb24uYyAqLworCisjdW5kZWYgc2xrX2F0dHJvbgoraW50CXNsa19hdHRyb24oCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXRyc2V0LmMgKi8KKworI3VuZGVmIHNsa19hdHRyc2V0CitpbnQJc2xrX2F0dHJzZXQoCisJCWNvbnN0IGNodHlwZSBhdHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfc2xrYXR0ci5jICovCisKKyN1bmRlZiBzbGtfYXR0cgorYXR0cl90CXNsa19hdHRyKHZvaWQpCisJCXsgcmV0dXJuKCooYXR0cl90ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtjbGVhci5jICovCisKKyN1bmRlZiBzbGtfY2xlYXIKK2ludAlzbGtfY2xlYXIodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa2NvbG9yLmMgKi8KKworI3VuZGVmIHNsa19jb2xvcgoraW50CXNsa19jb2xvcigKKwkJc2hvcnQJY29sb3JfcGFpcl9udW1iZXIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtpbml0LmMgKi8KKworI3VuZGVmIHNsa19pbml0CitpbnQJc2xrX2luaXQoCisJCWludAlmb3JtYXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtsYWIuYyAqLworCisjdW5kZWYgc2xrX2xhYmVsCitjaGFyCSpzbGtfbGFiZWwoCisJCWludAluKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtyZWZyLmMgKi8KKworI3VuZGVmIHNsa19ub3V0cmVmcmVzaAoraW50CXNsa19ub3V0cmVmcmVzaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzbGtfcmVmcmVzaAoraW50CXNsa19yZWZyZXNoKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl9zbGtzZXQuYyAqLworCisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyN1bmRlZiBzbGtfc2V0CitpbnQJc2xrX3NldCgKKwkJaW50CWksIAorCQljb25zdCBjaGFyICphc3RyLCAKKwkJaW50CWZvcm1hdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3Nsa3RvdWNoLmMgKi8KKworI3VuZGVmIHNsa190b3VjaAoraW50CXNsa190b3VjaCh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfdG91Y2guYyAqLworCisjdW5kZWYgaXNfbGluZXRvdWNoZWQKK05DVVJTRVNfQk9PTCBpc19saW5ldG91Y2hlZCgKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJbGluZSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgaXNfd2ludG91Y2hlZAorTkNVUlNFU19CT09MIGlzX3dpbnRvdWNoZWQoCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiB3dG91Y2hsbgoraW50CXd0b3VjaGxuKAorCQlXSU5ET1cJKndpbiwgCisJCWludAl5LCAKKwkJaW50CW4sIAorCQlpbnQJY2hhbmdlZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RyYWNlL2xpYl90cmFjZWRtcC5jICovCisKKyN1bmRlZiBfdHJhY2VkdW1wCit2b2lkCV90cmFjZWR1bXAoCisJCWNvbnN0IGNoYXIgKm5hbWUsIAorCQlXSU5ET1cJKndpbikKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90cmFjZS9saWJfdHJhY2Vtc2UuYyAqLworCisjdW5kZWYgX25jX3RyYWNlbW91c2UKK2NoYXIJKl9uY190cmFjZW1vdXNlKAorCQlTQ1JFRU4JKnNwLCAKKwkJTUVWRU5UIGNvbnN0ICplcCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2Vtb3VzZQorY2hhcgkqX3RyYWNlbW91c2UoCisJCU1FVkVOVCBjb25zdCAqZXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3R0eS9saWJfdHN0cC5jICovCisKKyNpbmNsdWRlIDxTaWdBY3Rpb24uaD4KKworI3VuZGVmIF9uY19zaWduYWxfaGFuZGxlcgordm9pZAlfbmNfc2lnbmFsX2hhbmRsZXIoCisJCU5DVVJTRVNfQk9PTCBlbmFibGUpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9saWJfdW5nZXRjaC5jICovCisKKyN1bmRlZiBfbmNfZmlmb19kdW1wCit2b2lkCV9uY19maWZvX2R1bXAoCisJCVNDUkVFTgkqc3ApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfdW5nZXRjaAoraW50CV9uY191bmdldGNoKAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB1bmdldGNoCitpbnQJdW5nZXRjaCgKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHR5L2xpYl92aWRhdHRyLmMgKi8KKworI3VuZGVmIHZpZHB1dHMKK2ludAl2aWRwdXRzKAorCQljaHR5cGUJbmV3bW9kZSwgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2aWRhdHRyCitpbnQJdmlkYXR0cigKKwkJY2h0eXBlCW5ld21vZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRlcm1hdHRycworY2h0eXBlCXRlcm1hdHRycyh2b2lkKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfdmxpbmUuYyAqLworCisjdW5kZWYgd3ZsaW5lCitpbnQJd3ZsaW5lKAorCQlXSU5ET1cJKndpbiwgCisJCWNodHlwZQljaCwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfd2F0dHJvZmYuYyAqLworCisjdW5kZWYgd2F0dHJfb2ZmCitpbnQJd2F0dHJfb2ZmKAorCQlXSU5ET1cJKndpbiwgCisJCWF0dHJfdAlhdCwgCisJCXZvaWQJKm9wdHMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL2xpYl93YXR0cm9uLmMgKi8KKworI3VuZGVmIHdhdHRyX29uCitpbnQJd2F0dHJfb24oCisJCVdJTkRPVwkqd2luLCAKKwkJYXR0cl90CWF0LCAKKwkJdm9pZAkqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX3dpbmNoLmMgKi8KKworI3VuZGVmIHdpbmNoCitjaHR5cGUJd2luY2goCisJCVdJTkRPVwkqd2luKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKy8qIC4vYmFzZS9saWJfd2luZG93LmMgKi8KKworI3VuZGVmIF9uY19zeW5jaG9vawordm9pZAlfbmNfc3luY2hvb2soCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgbXZkZXJ3aW4KK2ludAltdmRlcndpbigKKwkJV0lORE9XCSp3aW4sIAorCQlpbnQJeSwgCisJCWludAl4KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzeW5jb2sKK2ludAlzeW5jb2soCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGJmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB3c3luY3VwCit2b2lkCXdzeW5jdXAoCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgd3N5bmNkb3duCit2b2lkCXdzeW5jZG93bigKKwkJV0lORE9XCSp3aW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiB3Y3Vyc3luY3VwCit2b2lkCXdjdXJzeW5jdXAoCisJCVdJTkRPVwkqd2luKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgZHVwd2luCitXSU5ET1cJKmR1cHdpbigKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vYmFzZS9uY19wYW5lbC5jICovCisKKyN1bmRlZiBfbmNfcGFuZWxob29rCitzdHJ1Y3QgcGFuZWxob29rICpfbmNfcGFuZWxob29rKHZvaWQpCisJCXsgcmV0dXJuKCooc3RydWN0IHBhbmVsaG9vayAqKikwKTsgfQorCisvKiAuL2Jhc2Uvc2FmZV9zcHJpbnRmLmMgKi8KKworI3VuZGVmIF9uY19wcmludGZfc3RyaW5nCitjaGFyCSpfbmNfcHJpbnRmX3N0cmluZygKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJdmFfbGlzdAlhcCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHR5L3R0eV91cGRhdGUuYyAqLworCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4KKworI3VuZGVmIGRvdXBkYXRlCitpbnQJZG91cGRhdGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3Njcm9sbG4KK2ludAlfbmNfc2Nyb2xsbigKKwkJaW50CW4sIAorCQlpbnQJdG9wLCAKKwkJaW50CWJvdCwgCisJCWludAltYXh5KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfc2NyZWVuX3Jlc3VtZQordm9pZAlfbmNfc2NyZWVuX3Jlc3VtZSh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NjcmVlbl9pbml0Cit2b2lkCV9uY19zY3JlZW5faW5pdCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3NjcmVlbl93cmFwCit2b2lkCV9uY19zY3JlZW5fd3JhcCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2RvX3htY19nbGl0Y2gKK3ZvaWQJX25jX2RvX3htY19nbGl0Y2goCisJCWF0dHJfdAlwcmV2aW91cykKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90cmFjZS92YXJhcmdzLmMgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgICBhdFVua25vd24gPSAwLCBhdEludGVnZXIsIGF0RmxvYXQsIGF0UG9pbnQsIGF0U3RyaW5nCit9IEFSR1RZUEU7CisKKyN1bmRlZiBfbmNfdmFyYXJncworY2hhcgkqX25jX3ZhcmFyZ3MoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCXZhX2xpc3QJYXApCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL2Jhc2UvbWVtbW92ZS5jICovCisKKyN1bmRlZiBfbmNfbWVtbW92ZQordm9pZAlfbmNfbWVtbW92ZSh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvdnNzY2FuZi5jICovCisKKyN1bmRlZiBfbmNfdnNzY2FuZgordm9pZAlfbmNfdnNzY2FuZih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvbGliX2ZyZWVhbGwuYyAqLworCisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCisjdW5kZWYgX25jX2ZyZWVhbGwKK3ZvaWQJX25jX2ZyZWVhbGwodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19mcmVlX2FuZF9leGl0Cit2b2lkCV9uY19mcmVlX2FuZF9leGl0KAorCQlpbnQJY29kZSkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi93aWRlY2hhci9jaGFyYWJsZS5jICovCisKKyN1bmRlZiBfbmNfaXNfY2hhcmFibGUKK05DVVJTRVNfQk9PTCBfbmNfaXNfY2hhcmFibGUoCisJCXdjaGFyX3QJY2gpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY190b19jaGFyCitpbnQJX25jX3RvX2NoYXIoCisJCXdpbnRfdAljaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3RvX3dpZGVjaGFyCit3aW50X3QJX25jX3RvX3dpZGVjaGFyKAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCood2ludF90ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfYWRkX3djaC5jICovCisKKyN1bmRlZiB3YWRkX3djaAoraW50CXdhZGRfd2NoKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNjaGFyX3QgKndjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgd2VjaG9fd2NoYXIKK2ludAl3ZWNob193Y2hhcigKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90ICp3Y2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfYm94X3NldC5jICovCisKKyN1bmRlZiB3Ym9yZGVyX3NldAoraW50CXdib3JkZXJfc2V0KAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IGNjaGFyX3QgKmxzLCAKKwkJY29uc3QgY2NoYXJfdCAqcnMsIAorCQljb25zdCBjY2hhcl90ICp0cywgCisJCWNvbnN0IGNjaGFyX3QgKmJzLCAKKwkJY29uc3QgY2NoYXJfdCAqdGwsIAorCQljb25zdCBjY2hhcl90ICp0ciwgCisJCWNvbnN0IGNjaGFyX3QgKmJsLCAKKwkJY29uc3QgY2NoYXJfdCAqYnIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfY2NoYXIuYyAqLworCisjdW5kZWYgc2V0Y2NoYXIKK2ludAlzZXRjY2hhcigKKwkJY2NoYXJfdAkqd2N2YWwsIAorCQljb25zdCB3Y2hhcl90ICp3Y2gsIAorCQljb25zdCBhdHRyX3QgYXR0cnMsIAorCQlzaG9ydAljb2xvcl9wYWlyLCAKKwkJY29uc3Qgdm9pZCAqb3B0cykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgZ2V0Y2NoYXIKK2ludAlnZXRjY2hhcigKKwkJY29uc3QgY2NoYXJfdCAqd2N2YWwsIAorCQl3Y2hhcl90CSp3Y2gsIAorCQlhdHRyX3QJKmF0dHJzLCAKKwkJc2hvcnQJKmNvbG9yX3BhaXIsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2VyYXNld2NoYXIuYyAqLworCisjdW5kZWYgZXJhc2V3Y2hhcgoraW50CWVyYXNld2NoYXIoCisJCXdjaGFyX3QJKndjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYga2lsbHdjaGFyCitpbnQJa2lsbHdjaGFyKAorCQl3Y2hhcl90CSp3Y2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfZ2V0X3djaC5jICovCisKKyN1bmRlZiB3Z2V0X3djaAoraW50CXdnZXRfd2NoKAorCQlXSU5ET1cJKndpbiwgCisJCXdpbnRfdAkqcmVzdWx0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2dldF93c3RyLmMgKi8KKworI3VuZGVmIHdnZXRuX3dzdHIKK2ludAl3Z2V0bl93c3RyKAorCQlXSU5ET1cJKndpbiwgCisJCXdpbnRfdAkqc3RyLCAKKwkJaW50CW1heGxlbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9obGluZV9zZXQuYyAqLworCisjdW5kZWYgd2hsaW5lX3NldAoraW50CXdobGluZV9zZXQoCisJCVdJTkRPVwkqd2luLCAKKwkJY29uc3QgY2NoYXJfdCAqY2gsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9pbl93Y2guYyAqLworCisjdW5kZWYgd2luX3djaAoraW50CXdpbl93Y2goCisJCVdJTkRPVwkqd2luLCAKKwkJY2NoYXJfdAkqd2N2YWwpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfaW5fd2NobnN0ci5jICovCisKKyN1bmRlZiB3aW5fd2NobnN0cgoraW50CXdpbl93Y2huc3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNjaGFyX3QJKndjaHN0ciwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX2luc193Y2guYyAqLworCisjdW5kZWYgd2luc193Y2gKK2ludAl3aW5zX3djaCgKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90ICp3Y2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbnNfbndzdHIKK2ludAl3aW5zX253c3RyKAorCQlXSU5ET1cJKndpbiwgCisJCWNvbnN0IHdjaGFyX3QgKndzdHIsIAorCQlpbnQJbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9pbndzdHIuYyAqLworCisjdW5kZWYgd2lubndzdHIKK2ludAl3aW5ud3N0cigKKwkJV0lORE9XCSp3aW4sIAorCQl3Y2hhcl90CSp3c3RyLCAKKwkJaW50CW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHdpbndzdHIKK2ludAl3aW53c3RyKAorCQlXSU5ET1cJKndpbiwgCisJCXdjaGFyX3QJKndzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfa2V5X25hbWUuYyAqLworCisjdW5kZWYga2V5X25hbWUKK2NoYXIJKmtleV9uYW1lKAorCQl3Y2hhcl90CWMpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9wZWNob193Y2hhci5jICovCisKKyN1bmRlZiBwZWNob193Y2hhcgoraW50CXBlY2hvX3djaGFyKAorCQlXSU5ET1cJKnBhZCwgCisJCWNvbnN0IGNjaGFyX3QgKndjaCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3dpZGVjaGFyL2xpYl9zbGtfd3NldC5jICovCisKKyN1bmRlZiBzbGtfd3NldAoraW50CXNsa193c2V0KAorCQlpbnQJaSwgCisJCWNvbnN0IHdjaGFyX3QgKmFzdHIsIAorCQlpbnQJZm9ybWF0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX3VuZ2V0X3djaC5jICovCisKKyN1bmRlZiBfbmNfd2NydG9tYgorc2l6ZV90CV9uY193Y3J0b21iKAorCQljaGFyCSp0YXJnZXQsIAorCQl3Y2hhcl90CXNvdXJjZSwgCisJCW1ic3RhdGVfdCAqc3RhdGUpCisJCXsgcmV0dXJuKCooc2l6ZV90ICopMCk7IH0KKworI3VuZGVmIHVuZ2V0X3djaAoraW50CXVuZ2V0X3djaCgKKwkJY29uc3Qgd2NoYXJfdCB3Y2gpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi93aWRlY2hhci9saWJfdmlkX2F0dHIuYyAqLworCisjdW5kZWYgdmlkX3B1dHMKK2ludAl2aWRfcHV0cygKKwkJYXR0cl90CW5ld21vZGUsIAorCQlzaG9ydAlwYWlyLCAKKwkJdm9pZAkqb3B0cywgCisJCWludAkoKm91dGMpKAorCQlpbnQJcDEpKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB2aWRfYXR0cgoraW50CXZpZF9hdHRyKAorCQlhdHRyX3QJbmV3bW9kZSwgCisJCXNob3J0CXBhaXIsIAorCQl2b2lkCSpvcHRzKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0ZXJtX2F0dHJzCithdHRyX3QJdGVybV9hdHRycyh2b2lkKQorCQl7IHJldHVybigqKGF0dHJfdCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX3ZsaW5lX3NldC5jICovCisKKyN1bmRlZiB3dmxpbmVfc2V0CitpbnQJd3ZsaW5lX3NldCgKKwkJV0lORE9XCSp3aW4sIAorCQljb25zdCBjY2hhcl90ICpjaCwgCisJCWludAluKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX3dhY3MuYyAqLworCisjdW5kZWYgX25jX3dhY3MKK2NjaGFyX3QJKl9uY193YWNzOworCisjdW5kZWYgX25jX2luaXRfd2Fjcwordm9pZAlfbmNfaW5pdF93YWNzKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vd2lkZWNoYXIvbGliX3d1bmN0cmwuYyAqLworCisjdW5kZWYgd3VuY3RybAord2NoYXJfdAkqd3VuY3RybCgKKwkJY2NoYXJfdAkqd2MpCisJCXsgcmV0dXJuKCood2NoYXJfdCAqKikwKTsgfQorCisvKiAuL2V4cGFuZGVkLmMgKi8KKworI3VuZGVmIF9uY190b2dnbGVfYXR0cl9vbgordm9pZAlfbmNfdG9nZ2xlX2F0dHJfb24oCisJCWF0dHJfdAkqUywgCisJCWF0dHJfdAlhdCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY190b2dnbGVfYXR0cl9vZmYKK3ZvaWQJX25jX3RvZ2dsZV9hdHRyX29mZigKKwkJYXR0cl90CSpTLCAKKwkJYXR0cl90CWF0KQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX0RlbENoYXJDb3N0CitpbnQJX25jX0RlbENoYXJDb3N0KAorCQlpbnQJY291bnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19JbnNDaGFyQ29zdAoraW50CV9uY19JbnNDaGFyQ29zdCgKKwkJaW50CWNvdW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfVXBkYXRlQXR0cnMKK3ZvaWQJX25jX1VwZGF0ZUF0dHJzKAorCQljY2hhcl90CWMpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vYmFzZS9sZWdhY3lfY29kaW5nLmMgKi8KKworI3VuZGVmIHVzZV9sZWdhY3lfY29kaW5nCitpbnQJdXNlX2xlZ2FjeV9jb2RpbmcoCisJCWludAlsZXZlbCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2UvbGliX2RmdF9mZ2JnLmMgKi8KKworI3VuZGVmIHVzZV9kZWZhdWx0X2NvbG9ycworaW50CXVzZV9kZWZhdWx0X2NvbG9ycyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBhc3N1bWVfZGVmYXVsdF9jb2xvcnMKK2ludAlhc3N1bWVfZGVmYXVsdF9jb2xvcnMoCisJCWludAlmZywgCisJCWludAliZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9wcmludC5jICovCisKKyN1bmRlZiBtY3ByaW50CitpbnQJbWNwcmludCgKKwkJY2hhcgkqZGF0YSwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9iYXNlL3Jlc2l6ZXRlcm0uYyAqLworCisjdW5kZWYgaXNfdGVybV9yZXNpemVkCitOQ1VSU0VTX0JPT0wgaXNfdGVybV9yZXNpemVkKAorCQlpbnQJVG9MaW5lcywgCisJCWludAlUb0NvbHMpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIHJlc2l6ZV90ZXJtCitpbnQJcmVzaXplX3Rlcm0oCisJCWludAlUb0xpbmVzLCAKKwkJaW50CVRvQ29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcmVzaXpldGVybQoraW50CXJlc2l6ZXRlcm0oCisJCWludAlUb0xpbmVzLCAKKwkJaW50CVRvQ29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RyYWNlL3RyYWNlX3huYW1lcy5jICovCisKKyN1bmRlZiBfbmNfdHJhY2VfeG5hbWVzCit2b2lkCV9uY190cmFjZV94bmFtZXMoCisJCVRFUk1UWVBFICp0cCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby91c2Vfc2NyZWVuLmMgKi8KKworI3VuZGVmIHVzZV9zY3JlZW4KK2ludAl1c2Vfc2NyZWVuKAorCQlTQ1JFRU4JKnNjcmVlbiwgCisJCU5DVVJTRVNfU0NSRUVOX0NCIGZ1bmMsIAorCQl2b2lkCSpkYXRhKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS91c2Vfd2luZG93LmMgKi8KKworI3VuZGVmIHVzZV93aW5kb3cKK2ludAl1c2Vfd2luZG93KAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfV0lORE9XX0NCIGZ1bmMsIAorCQl2b2lkCSpkYXRhKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS93cmVzaXplLmMgKi8KKworI3VuZGVmIHdyZXNpemUKK2ludAl3cmVzaXplKAorCQlXSU5ET1cJKndpbiwgCisJCWludAlUb0xpbmVzLCAKKwkJaW50CVRvQ29scykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2FjY2Vzcy5jICovCisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPG5jX2FsbG9jLmg+CisKKyN1bmRlZiBfbmNfcm9vdG5hbWUKK2NoYXIJKl9uY19yb290bmFtZSgKKwkJY2hhcgkqcGF0aCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfaXNfYWJzX3BhdGgKK05DVVJTRVNfQk9PTCBfbmNfaXNfYWJzX3BhdGgoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19wYXRobGFzdAordW5zaWduZWQgX25jX3BhdGhsYXN0KAorCQljb25zdCBjaGFyICpwYXRoKQorCQl7IHJldHVybigqKHVuc2lnbmVkICopMCk7IH0KKworI3VuZGVmIF9uY19iYXNlbmFtZQorY2hhcgkqX25jX2Jhc2VuYW1lKAorCQljaGFyCSpwYXRoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19hY2Nlc3MKK2ludAlfbmNfYWNjZXNzKAorCQljb25zdCBjaGFyICpwYXRoLCAKKwkJaW50CW1vZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19pc19kaXJfcGF0aAorTkNVUlNFU19CT09MIF9uY19pc19kaXJfcGF0aCgKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX2lzX2ZpbGVfcGF0aAorTkNVUlNFU19CT09MIF9uY19pc19maWxlX3BhdGgoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgcmV0dXJuKCooTkNVUlNFU19CT09MICopMCk7IH0KKworI3VuZGVmIF9uY19lbnZfYWNjZXNzCitpbnQJX25jX2Vudl9hY2Nlc3Modm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2FkZF90cmllcy5jICovCisKKyN1bmRlZiBfbmNfYWRkX3RvX3RyeQoraW50CV9uY19hZGRfdG9fdHJ5KAorCQlUUklFUwkqKnRyZWUsIAorCQljb25zdCBjaGFyICpzdHIsIAorCQl1bnNpZ25lZCBjb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vYWxsb2NfdHR5cGUuYyAqLworCisjdW5kZWYgX25jX2FsaWduX3Rlcm10eXBlCit2b2lkCV9uY19hbGlnbl90ZXJtdHlwZSgKKwkJVEVSTVRZUEUgKnRvLCAKKwkJVEVSTVRZUEUgKmZyb20pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfY29weV90ZXJtdHlwZQordm9pZAlfbmNfY29weV90ZXJtdHlwZSgKKwkJVEVSTVRZUEUgKmRzdCwgCisJCVRFUk1UWVBFICpzcmMpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vY29kZXMuYyAqLworCisjdW5kZWYgYm9vbGNvZGVzCitjaGFyCSpjb25zdCBib29sY29kZXNbXSA9IHswfTsKKyN1bmRlZiBudW1jb2RlcworY2hhcgkqY29uc3QgbnVtY29kZXNbXSA9IHswfTsKKyN1bmRlZiBzdHJjb2RlcworY2hhcgkqY29uc3Qgc3RyY29kZXNbXSA9IHswfTsKKworLyogLi90aW5mby9jb21wX2Vycm9yLmMgKi8KKyN1bmRlZiBfbmNfc3VwcHJlc3Nfd2FybmluZ3MKK05DVVJTRVNfQk9PTCBfbmNfc3VwcHJlc3Nfd2FybmluZ3M7CisjdW5kZWYgX25jX2N1cnJfbGluZQoraW50CV9uY19jdXJyX2xpbmU7CisjdW5kZWYgX25jX2N1cnJfY29sCitpbnQJX25jX2N1cnJfY29sOworCisjdW5kZWYgX25jX2dldF9zb3VyY2UKK2NvbnN0IGNoYXIgKl9uY19nZXRfc291cmNlKHZvaWQpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3NldF9zb3VyY2UKK3ZvaWQJX25jX3NldF9zb3VyY2UoCisJCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfc2V0X3R5cGUKK3ZvaWQJX25jX3NldF90eXBlKAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2dldF90eXBlCit2b2lkCV9uY19nZXRfdHlwZSgKKwkJY2hhcgkqbmFtZSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY193YXJuaW5nCit2b2lkCV9uY193YXJuaW5nKAorCQljb25zdCBjaGFyICpjb25zdCBmbXQsIAorCQkuLi4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZXJyX2Fib3J0Cit2b2lkCV9uY19lcnJfYWJvcnQoCisJCWNvbnN0IGNoYXIgKmNvbnN0IGZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19zeXNlcnJfYWJvcnQKK3ZvaWQJX25jX3N5c2Vycl9hYm9ydCgKKwkJY29uc3QgY2hhciAqY29uc3QgZm10LCAKKwkJLi4uKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2RiX2l0ZXJhdG9yLmMgKi8KKworI3VuZGVmIF9uY190aWNfZGlyCitjb25zdCBjaGFyICpfbmNfdGljX2RpcigKKwkJY29uc3QgY2hhciAqcGF0aCkKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfa2VlcF90aWNfZGlyCit2b2lkCV9uY19rZWVwX3RpY19kaXIoCisJCWNvbnN0IGNoYXIgKnBhdGgpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfbGFzdF9kYgordm9pZAlfbmNfbGFzdF9kYih2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX25leHRfZGIKK2NvbnN0IGNoYXIgKl9uY19uZXh0X2RiKAorCQlEQkRJUlMJKnN0YXRlLCAKKwkJaW50CSpvZmZzZXQpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2ZpcnN0X2RiCit2b2lkCV9uY19maXJzdF9kYigKKwkJREJESVJTCSpzdGF0ZSwgCisJCWludAkqb2Zmc2V0KQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2RvYWxsb2MuYyAqLworCisjdW5kZWYgX25jX2RvYWxsb2MKK3ZvaWQJKl9uY19kb2FsbG9jKAorCQl2b2lkCSpvbGRwLCAKKwkJc2l6ZV90CWFtb3VudCkKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vdGluZm8vZW50cmllcy5jICovCisKKyN1bmRlZiBfbmNfaGVhZAorRU5UUlkJKl9uY19oZWFkOworI3VuZGVmIF9uY190YWlsCitFTlRSWQkqX25jX3RhaWw7CisKKyN1bmRlZiBfbmNfZnJlZV9lbnRyeQordm9pZAlfbmNfZnJlZV9lbnRyeSgKKwkJRU5UUlkJKmhlYWRwLCAKKwkJVEVSTVRZUEUgKnR0ZXJtKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2ZyZWVfZW50cmllcwordm9pZAlfbmNfZnJlZV9lbnRyaWVzKAorCQlFTlRSWQkqaGVhZHApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfZGVsaW5rX2VudHJ5CitFTlRSWQkqX25jX2RlbGlua19lbnRyeSgKKwkJRU5UUlkJKmhlYWRwLCAKKwkJVEVSTVRZUEUgKnR0ZXJtKQorCQl7IHJldHVybigqKEVOVFJZICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbGVha3NfdGluZm8KK3ZvaWQJX25jX2xlYWtzX3RpbmZvKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vZmFsbGJhY2suYyAqLworCisjdW5kZWYgX25jX2ZhbGxiYWNrCitjb25zdCBURVJNVFlQRSAqX25jX2ZhbGxiYWNrKAorCQljb25zdCBjaGFyICpuYW1lKQorCQl7IHJldHVybigqKGNvbnN0IFRFUk1UWVBFICoqKTApOyB9CisKKy8qIC4vdGluZm8vZnJlZV90dHlwZS5jICovCisKKyN1bmRlZiBfbmNfZnJlZV90ZXJtdHlwZQordm9pZAlfbmNfZnJlZV90ZXJtdHlwZSgKKwkJVEVSTVRZUEUgKnB0cikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY191c2VyX2RlZmluYWJsZQorTkNVUlNFU19CT09MIF9uY191c2VyX2RlZmluYWJsZTsKKworI3VuZGVmIHVzZV9leHRlbmRlZF9uYW1lcworaW50CXVzZV9leHRlbmRlZF9uYW1lcygKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9nZXRlbnZfbnVtLmMgKi8KKworI3VuZGVmIF9uY19nZXRlbnZfbnVtCitpbnQJX25jX2dldGVudl9udW0oCisJCWNvbnN0IGNoYXIgKm5hbWUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9ob21lX3Rlcm1pbmZvLmMgKi8KKworI3VuZGVmIF9uY19ob21lX3Rlcm1pbmZvCitjaGFyCSpfbmNfaG9tZV90ZXJtaW5mbyh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9pbml0X2tleXRyeS5jICovCisKKyNpZiAwCisKKyNpbmNsdWRlIDxpbml0X2tleXRyeS5oPgorCisjdW5kZWYgX25jX3RpbmZvX2ZrZXlzCitjb25zdCBzdHJ1Y3QgdGluZm9fZmtleXMgX25jX3RpbmZvX2ZrZXlzW10gPSB7MH07CisKKyNlbmRpZgorCisjdW5kZWYgX25jX2luaXRfa2V5dHJ5Cit2b2lkCV9uY19pbml0X2tleXRyeSgKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9saWJfYWNzLmMgKi8KKworI3VuZGVmIGFjc19tYXAKK2NodHlwZQlhY3NfbWFwWzEyOF07CisKKyN1bmRlZiBfbmNfaW5pdF9hY3MKK3ZvaWQJX25jX2luaXRfYWNzKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vbGliX2JhdWRyYXRlLmMgKi8KKworI2luY2x1ZGUgPHRlcm1jYXAuaD4KKworc3RydWN0IHNwZWVkIHsKKyAgICBpbnQgczsgCisgICAgaW50IHNwOyAKK307CisKKyN1bmRlZiBfbmNfYmF1ZHJhdGUKK2ludAlfbmNfYmF1ZHJhdGUoCisJCWludAlPU3BlZWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19vc3BlZWQKK2ludAlfbmNfb3NwZWVkKAorCQlpbnQJQmF1ZFJhdGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGJhdWRyYXRlCitpbnQJYmF1ZHJhdGUodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9jdXJfdGVybS5jICovCisKKyN1bmRlZiBjdXJfdGVybQorVEVSTUlOQUwgKmN1cl90ZXJtOworCisjdW5kZWYgc2V0X2N1cnRlcm0KK1RFUk1JTkFMICpzZXRfY3VydGVybSgKKwkJVEVSTUlOQUwgKnRlcm1wKQorCQl7IHJldHVybigqKFRFUk1JTkFMICoqKTApOyB9CisKKyN1bmRlZiBkZWxfY3VydGVybQoraW50CWRlbF9jdXJ0ZXJtKAorCQlURVJNSU5BTCAqdGVybXApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfZGF0YS5jICovCisKKyN1bmRlZiBzdGRzY3IKK1dJTkRPVwkqc3Rkc2NyOworI3VuZGVmIGN1cnNjcgorV0lORE9XCSpjdXJzY3I7CisjdW5kZWYgbmV3c2NyCitXSU5ET1cJKm5ld3NjcjsKKyN1bmRlZiBfbmNfc2NyZWVuX2NoYWluCitTQ1JFRU4JKl9uY19zY3JlZW5fY2hhaW47CisjdW5kZWYgU1AKK1NDUkVFTgkqU1A7CisjdW5kZWYgX25jX2dsb2JhbHMKK05DVVJTRVNfR0xPQkFMUyBfbmNfZ2xvYmFsczsKKyN1bmRlZiBfbmNfcHJlc2NyZWVuCitOQ1VSU0VTX1BSRVNDUkVFTiBfbmNfcHJlc2NyZWVuOworCisvKiAuL3RpbmZvL2xpYl9oYXNfY2FwLmMgKi8KKworI3VuZGVmIGhhc19pYworTkNVUlNFU19CT09MIGhhc19pYyh2b2lkKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBoYXNfaWwKK05DVVJTRVNfQk9PTCBoYXNfaWwodm9pZCkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9rZXJuZWwuYyAqLworCisjdW5kZWYgZXJhc2VjaGFyCitjaGFyCWVyYXNlY2hhcih2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKikwKTsgfQorCisjdW5kZWYga2lsbGNoYXIKK2NoYXIJa2lsbGNoYXIodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICopMCk7IH0KKworI3VuZGVmIGZsdXNoaW5wCitpbnQJZmx1c2hpbnAodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2xpYl9rZXluYW1lLmMgKi8KKworc3RydWN0IGtuIHsgc2hvcnQgb2Zmc2V0OyBpbnQgY29kZTsgfTsKKworI3VuZGVmIF9uY19rZXluYW1lCitjaGFyCSpfbmNfa2V5bmFtZSgKKwkJU0NSRUVOCSpzcCwgCisJCWludAljKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIGtleW5hbWUKK2NoYXIJKmtleW5hbWUoCisJCWludAljKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfbG9uZ25hbWUuYyAqLworCisjdW5kZWYgbG9uZ25hbWUKK2NoYXIJKmxvbmduYW1lKHZvaWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl9uYXBtcy5jICovCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyN1bmRlZiBuYXBtcworaW50CW5hcG1zKAorCQlpbnQJbXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfb3B0aW9ucy5jICovCisKKyN1bmRlZiBpZGxvaworaW50CWlkbG9rKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBpZGNvawordm9pZAlpZGNvaygKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGhhbGZkZWxheQoraW50CWhhbGZkZWxheSgKKwkJaW50CXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vZGVsYXkKK2ludAlub2RlbGF5KAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBub3RpbWVvdXQKK2ludAlub3RpbWVvdXQoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHd0aW1lb3V0Cit2b2lkCXd0aW1lb3V0KAorCQlXSU5ET1cJKndpbiwgCisJCWludAlkZWxheSkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIGtleXBhZAoraW50CWtleXBhZCgKKwkJV0lORE9XCSp3aW4sIAorCQlOQ1VSU0VTX0JPT0wgZmxhZykKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbWV0YQoraW50CW1ldGEoCisJCVdJTkRPVwkqd2luLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGN1cnNfc2V0CitpbnQJY3Vyc19zZXQoCisJCWludAl2aXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHR5cGVhaGVhZAoraW50CXR5cGVhaGVhZCgKKwkJaW50CWZkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBoYXNfa2V5CitpbnQJaGFzX2tleSgKKwkJaW50CWtleWNvZGUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19rZXlwYWQKK2ludAlfbmNfa2V5cGFkKAorCQlTQ1JFRU4JKnNwLCAKKwkJTkNVUlNFU19CT09MIGZsYWcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfcmF3LmMgKi8KKworI3VuZGVmIHJhdworaW50CXJhdyh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBjYnJlYWsKK2ludAljYnJlYWsodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcWlmbHVzaAordm9pZAlxaWZsdXNoKHZvaWQpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBub3JhdworaW50CW5vcmF3KHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIG5vY2JyZWFrCitpbnQJbm9jYnJlYWsodm9pZCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgbm9xaWZsdXNoCit2b2lkCW5vcWlmbHVzaCh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgaW50cmZsdXNoCitpbnQJaW50cmZsdXNoKAorCQlXSU5ET1cJKndpbiwgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3NldHVwLmMgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisKKyN1bmRlZiB0dHl0eXBlCitjaGFyCXR0eXR5cGVbMjU2XTsKKyN1bmRlZiBMSU5FUworaW50CUxJTkVTOworI3VuZGVmIENPTFMKK2ludAlDT0xTOworI3VuZGVmIFRBQlNJWkUKK2ludAlUQUJTSVpFOworCisjdW5kZWYgc2V0X3RhYnNpemUKK2ludAlzZXRfdGFic2l6ZSgKKwkJaW50CXZhbHVlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfaGFuZGxlX3NpZ3dpbmNoCitpbnQJX25jX2hhbmRsZV9zaWd3aW5jaCgKKwkJU0NSRUVOCSpzcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgdXNlX2Vudgordm9pZAl1c2VfZW52KAorCQlOQ1VSU0VTX0JPT0wgZikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfc2NyZWVuc2l6ZQordm9pZAlfbmNfZ2V0X3NjcmVlbnNpemUoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJKmxpbmVwLCAKKwkJaW50CSpjb2xwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3VwZGF0ZV9zY3JlZW5zaXplCit2b2lkCV9uY191cGRhdGVfc2NyZWVuc2l6ZSgKKwkJU0NSRUVOCSpzcCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19nZXRfbG9jYWxlCitjaGFyCSpfbmNfZ2V0X2xvY2FsZSh2b2lkKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY191bmljb2RlX2xvY2FsZQoraW50CV9uY191bmljb2RlX2xvY2FsZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfbG9jYWxlX2JyZWFrc19hY3MKK2ludAlfbmNfbG9jYWxlX2JyZWFrc19hY3MoCisJCVRFUk1JTkFMICp0ZXJtcCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3NldHVwdGVybQoraW50CV9uY19zZXR1cHRlcm0oCisJCWNoYXIJKnRuYW1lLCAKKwkJaW50CUZpbGVkZXMsIAorCQlpbnQJKmVycnJldCwgCisJCU5DVVJTRVNfQk9PTCByZXVzZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgc2V0dXB0ZXJtCitpbnQJc2V0dXB0ZXJtKAorCQljaGFyCSp0bmFtZSwgCisJCWludAlGaWxlZGVzLCAKKwkJaW50CSplcnJyZXQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9saWJfdGVybWNhcC5jICovCisKKyN1bmRlZiBVUAorY2hhcgkqVVA7CisjdW5kZWYgQkMKK2NoYXIJKkJDOworCisjdW5kZWYgdGdldGVudAoraW50CXRnZXRlbnQoCisJCWNoYXIJKmJ1ZnAsIAorCQljb25zdCBjaGFyICpuYW1lKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyNpZiAwCisKKyNpbmNsdWRlIDxjYXBkZWZhdWx0cy5jPgorCisjZW5kaWYKKworI3VuZGVmIHRnZXRmbGFnCitpbnQJdGdldGZsYWcoCisJCWNoYXIJKmlkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0Z2V0bnVtCitpbnQJdGdldG51bSgKKwkJY2hhcgkqaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRnZXRzdHIKK2NoYXIJKnRnZXRzdHIoCisJCWNoYXIJKmlkLCAKKwkJY2hhcgkqKmFyZWEpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2xpYl90ZXJtbmFtZS5jICovCisKKyN1bmRlZiB0ZXJtbmFtZQorY2hhcgkqdGVybW5hbWUodm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3Rnb3RvLmMgKi8KKworI3VuZGVmIHRnb3RvCitjaGFyCSp0Z290bygKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJaW50CXgsIAorCQlpbnQJeSkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3RpLmMgKi8KKworI3VuZGVmIHRpZ2V0ZmxhZworaW50CXRpZ2V0ZmxhZygKKwkJY2hhcgkqc3RyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0aWdldG51bQoraW50CXRpZ2V0bnVtKAorCQljaGFyCSpzdHIpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHRpZ2V0c3RyCitjaGFyCSp0aWdldHN0cigKKwkJY2hhcgkqc3RyKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdHBhcm0uYyAqLworCisjdW5kZWYgX25jX3RwYXJtX2VycgoraW50CV9uY190cGFybV9lcnI7CisKKyN1bmRlZiBfbmNfdHBhcm1fYW5hbHl6ZQoraW50CV9uY190cGFybV9hbmFseXplKAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQljaGFyCSpwX2lzX3NbOV0sIAorCQlpbnQJKnBvcGNvdW50KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0cGFybQorY2hhcgkqdHBhcm0oCisJCWNoYXIJKnN0cmluZywgCisJCS4uLikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vbGliX3RwdXRzLmMgKi8KKworI3VuZGVmIFBDCitjaGFyCVBDOworI3VuZGVmIG9zcGVlZAorTkNVUlNFU19PU1BFRUQJb3NwZWVkOworI3VuZGVmIF9uY19udWxsc19zZW50CitpbnQJX25jX251bGxzX3NlbnQ7CisKKyN1bmRlZiBfbmNfc2V0X25vX3BhZGRpbmcKK3ZvaWQJX25jX3NldF9ub19wYWRkaW5nKAorCQlTQ1JFRU4JKnNwKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgZGVsYXlfb3V0cHV0CitpbnQJZGVsYXlfb3V0cHV0KAorCQlpbnQJbXMpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19mbHVzaAordm9pZAlfbmNfZmx1c2godm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19vdXRjaAoraW50CV9uY19vdXRjaCgKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBwdXRwCitpbnQJcHV0cCgKKwkJY29uc3QgY2hhciAqc3RyaW5nKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiB0cHV0cworaW50CXRwdXRzKAorCQljb25zdCBjaGFyICpzdHJpbmcsIAorCQlpbnQJYWZmY250LCAKKwkJaW50CSgqb3V0YykoCisJCWludAlwMSkpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90cmFjZS9saWJfdHJhY2UuYyAqLworCisjdW5kZWYgX25jX3RyYWNpbmcKK3Vuc2lnbmVkIF9uY190cmFjaW5nOworI3VuZGVmIF9uY190cHV0c190cmFjZQorY29uc3QgY2hhciAqX25jX3RwdXRzX3RyYWNlID0gezB9OworI3VuZGVmIF9uY19vdXRjaGFycworbG9uZwlfbmNfb3V0Y2hhcnM7CisKKyN1bmRlZiB0cmFjZQordm9pZAl0cmFjZSgKKwkJY29uc3QgdW5zaWduZWQgaW50IHRyYWNlbGV2ZWwpCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfdHJhY2VmCit2b2lkCV90cmFjZWYoCisJCWNvbnN0IGNoYXIgKmZtdCwgCisJCS4uLikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2Jvb2wKK05DVVJTRVNfQk9PTCBfbmNfcmV0cmFjZV9ib29sKAorCQlOQ1VSU0VTX0JPT0wgY29kZSkKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfaW50CitpbnQJX25jX3JldHJhY2VfaW50KAorCQlpbnQJY29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfdW5zaWduZWQKK3Vuc2lnbmVkIF9uY19yZXRyYWNlX3Vuc2lnbmVkKAorCQl1bnNpZ25lZCBjb2RlKQorCQl7IHJldHVybigqKHVuc2lnbmVkICopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3B0cgorY2hhcgkqX25jX3JldHJhY2VfcHRyKAorCQljaGFyCSpjb2RlKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2NwdHIKK2NvbnN0IGNoYXIgKl9uY19yZXRyYWNlX2NwdHIoCisJCWNvbnN0IGNoYXIgKmNvZGUpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2VfY3ZvaWRfcHRyCit2b2lkCSpfbmNfcmV0cmFjZV9jdm9pZF9wdHIoCisJCXZvaWQJKmNvZGUpCisJCXsgcmV0dXJuKCoodm9pZCAqKikwKTsgfQorCisjdW5kZWYgX25jX3JldHJhY2Vfdm9pZF9wdHIKK3ZvaWQJKl9uY19yZXRyYWNlX3ZvaWRfcHRyKAorCQl2b2lkCSpjb2RlKQorCQl7IHJldHVybigqKHZvaWQgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX3NwCitTQ1JFRU4JKl9uY19yZXRyYWNlX3NwKAorCQlTQ1JFRU4JKmNvZGUpCisJCXsgcmV0dXJuKCooU0NSRUVOICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV93aW4KK1dJTkRPVwkqX25jX3JldHJhY2Vfd2luKAorCQlXSU5ET1cJKmNvZGUpCisJCXsgcmV0dXJuKCooV0lORE9XICoqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlYXRyLmMgKi8KKworI3VuZGVmIF90cmFjZWF0dHIyCitjaGFyCSpfdHJhY2VhdHRyMigKKwkJaW50CWJ1Zm51bSwgCisJCWNodHlwZQluZXdtb2RlKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWF0dHIKK2NoYXIJKl90cmFjZWF0dHIoCisJCWF0dHJfdAluZXdtb2RlKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY19yZXRyYWNlX2F0dHJfdAorYXR0cl90CV9uY19yZXRyYWNlX2F0dHJfdCgKKwkJYXR0cl90CWNvZGUpCisJCXsgcmV0dXJuKCooYXR0cl90ICopMCk7IH0KKworI3VuZGVmIF9uY19hbHRjaGFyc2V0X25hbWUKK2NvbnN0IGNoYXIgKl9uY19hbHRjaGFyc2V0X25hbWUoCisJCWF0dHJfdAlhdHRyLCAKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF90cmFjZWNodHlwZTIKK2NoYXIJKl90cmFjZWNodHlwZTIoCisJCWludAlidWZudW0sIAorCQljaHR5cGUJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlY2h0eXBlCitjaGFyCSpfdHJhY2VjaHR5cGUoCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmV0cmFjZV9jaHR5cGUKK2NodHlwZQlfbmNfcmV0cmFjZV9jaHR5cGUoCisJCWNodHlwZQljb2RlKQorCQl7IHJldHVybigqKGNodHlwZSAqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjY2hhcl90MgorY2hhcgkqX3RyYWNlY2NoYXJfdDIoCisJCWludAlidWZudW0sIAorCQljb25zdCBjY2hhcl90ICpjaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfdHJhY2VjY2hhcl90CitjaGFyCSpfdHJhY2VjY2hhcl90KAorCQljb25zdCBjY2hhcl90ICpjaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlYml0cy5jICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgdmFsOworICAgIGNvbnN0IGNoYXIgKm5hbWU7Cit9IEJJVE5BTUVTOworCisjdW5kZWYgX25jX3RyYWNlX3R0eW1vZGUKK2NoYXIJKl9uY190cmFjZV90dHltb2RlKAorCQlzdHJ1Y3QgdGVybWlvcyAqdHR5KQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY190cmFjZWJpdHMKK2NoYXIJKl9uY190cmFjZWJpdHModm9pZCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdHJhY2UvbGliX3RyYWNlY2hyLmMgKi8KKworI3VuZGVmIF9uY190cmFjZWNoYXIKK2NoYXIJKl9uY190cmFjZWNoYXIoCisJCVNDUkVFTgkqc3AsIAorCQlpbnQJY2gpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX3RyYWNlY2hhcgorY2hhcgkqX3RyYWNlY2hhcigKKwkJaW50CWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90aW5mby9saWJfdHR5ZmxhZ3MuYyAqLworCisjdW5kZWYgX25jX2dldF90dHlfbW9kZQoraW50CV9uY19nZXRfdHR5X21vZGUoCisJCXN0cnVjdCB0ZXJtaW9zICpidWYpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19zZXRfdHR5X21vZGUKK2ludAlfbmNfc2V0X3R0eV9tb2RlKAorCQlzdHJ1Y3QgdGVybWlvcyAqYnVmKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBkZWZfc2hlbGxfbW9kZQoraW50CWRlZl9zaGVsbF9tb2RlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIGRlZl9wcm9nX21vZGUKK2ludAlkZWZfcHJvZ19tb2RlKHZvaWQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIHJlc2V0X3Byb2dfbW9kZQoraW50CXJlc2V0X3Byb2dfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZXNldF9zaGVsbF9tb2RlCitpbnQJcmVzZXRfc2hlbGxfbW9kZSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBzYXZldHR5CitpbnQJc2F2ZXR0eSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiByZXNldHR5CitpbnQJcmVzZXR0eSh2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vdHR5L2xpYl90d2FpdC5jICovCisKKyN1bmRlZiBfbmNfdGltZWRfd2FpdAoraW50CV9uY190aW1lZF93YWl0KAorCQlTQ1JFRU4JKnNwLCAKKwkJaW50CW1vZGUsIAorCQlpbnQJbWlsbGlzZWNvbmRzLCAKKwkJaW50CSp0aW1lbGVmdCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL25hbWVfbWF0Y2guYyAqLworCisjdW5kZWYgX25jX2ZpcnN0X25hbWUKK2NoYXIJKl9uY19maXJzdF9uYW1lKAorCQljb25zdCBjaGFyICpjb25zdCBzcCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbmFtZV9tYXRjaAoraW50CV9uY19uYW1lX21hdGNoKAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lbHN0LCAKKwkJY29uc3QgY2hhciAqY29uc3QgbmFtZSwgCisJCWNvbnN0IGNoYXIgKmNvbnN0IGRlbGltKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vbmFtZXMuYyAqLworCisjdW5kZWYgYm9vbG5hbWVzCitjaGFyCSpjb25zdCBib29sbmFtZXNbXSA9IHswfTsKKyN1bmRlZiBib29sZm5hbWVzCitjaGFyCSpjb25zdCBib29sZm5hbWVzW10gPSB7MH07CisjdW5kZWYgbnVtbmFtZXMKK2NoYXIJKmNvbnN0IG51bW5hbWVzW10gPSB7MH07CisjdW5kZWYgbnVtZm5hbWVzCitjaGFyCSpjb25zdCBudW1mbmFtZXNbXSA9IHswfTsKKyN1bmRlZiBzdHJuYW1lcworY2hhcgkqY29uc3Qgc3RybmFtZXNbXSA9IHswfTsKKyN1bmRlZiBzdHJmbmFtZXMKK2NoYXIJKmNvbnN0IHN0cmZuYW1lc1tdID0gezB9OworCisvKiAuL3RpbmZvL3JlYWRfZW50cnkuYyAqLworCisjaW5jbHVkZSA8aGFzaGVkX2RiLmg+CisKKyN1bmRlZiBfbmNfcmVhZF90ZXJtdHlwZQoraW50CV9uY19yZWFkX3Rlcm10eXBlKAorCQlURVJNVFlQRSAqcHRyLCAKKwkJY2hhcgkqYnVmZmVyLCAKKwkJaW50CWxpbWl0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVhZF9maWxlX2VudHJ5CitpbnQJX25jX3JlYWRfZmlsZV9lbnRyeSgKKwkJY29uc3QgY2hhciAqY29uc3QgZmlsZW5hbWUsIAorCQlURVJNVFlQRSAqcHRyKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVhZF9lbnRyeQoraW50CV9uY19yZWFkX2VudHJ5KAorCQljb25zdCBjaGFyICpjb25zdCBuYW1lLCAKKwkJY2hhcgkqY29uc3QgZmlsZW5hbWUsIAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9yZWFkX3Rlcm1jYXAuYyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyN1bmRlZiBfbmNfcmVhZF90ZXJtY2FwX2VudHJ5CitpbnQJX25jX3JlYWRfdGVybWNhcF9lbnRyeSgKKwkJY29uc3QgY2hhciAqY29uc3QgdG4sIAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9zZXRidWYuYyAqLworCisjdW5kZWYgX25jX3NldF9idWZmZXIKK3ZvaWQJX25jX3NldF9idWZmZXIoCisJCUZJTEUJKm9mcCwgCisJCU5DVVJTRVNfQk9PTCBidWZmZXJlZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi90aW5mby9zdHJpbmdzLmMgKi8KKworI3VuZGVmIF9uY19zdHJfaW5pdAorc3RyaW5nX2Rlc2MgKl9uY19zdHJfaW5pdCgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCWNoYXIJKnNyYywgCisJCXNpemVfdAlsZW4pCisJCXsgcmV0dXJuKCooc3RyaW5nX2Rlc2MgKiopMCk7IH0KKworI3VuZGVmIF9uY19zdHJfbnVsbAorc3RyaW5nX2Rlc2MgKl9uY19zdHJfbnVsbCgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCXNpemVfdAlsZW4pCisJCXsgcmV0dXJuKCooc3RyaW5nX2Rlc2MgKiopMCk7IH0KKworI3VuZGVmIF9uY19zdHJfY29weQorc3RyaW5nX2Rlc2MgKl9uY19zdHJfY29weSgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCXN0cmluZ19kZXNjICpzcmMpCisJCXsgcmV0dXJuKCooc3RyaW5nX2Rlc2MgKiopMCk7IH0KKworI3VuZGVmIF9uY19zYWZlX3N0cmNhdAorTkNVUlNFU19CT09MIF9uY19zYWZlX3N0cmNhdCgKKwkJc3RyaW5nX2Rlc2MgKmRzdCwgCisJCWNvbnN0IGNoYXIgKnNyYykKKwkJeyByZXR1cm4oKihOQ1VSU0VTX0JPT0wgKikwKTsgfQorCisjdW5kZWYgX25jX3NhZmVfc3RyY3B5CitOQ1VSU0VTX0JPT0wgX25jX3NhZmVfc3RyY3B5KAorCQlzdHJpbmdfZGVzYyAqZHN0LCAKKwkJY29uc3QgY2hhciAqc3JjKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKy8qIC4vdHJhY2UvdHJhY2VfYnVmLmMgKi8KKworI3VuZGVmIF9uY190cmFjZV9idWYKK2NoYXIJKl9uY190cmFjZV9idWYoCisJCWludAlidWZudW0sIAorCQlzaXplX3QJd2FudCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdHJhY2VfYnVmY2F0CitjaGFyCSpfbmNfdHJhY2VfYnVmY2F0KAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3QgY2hhciAqdmFsdWUpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL3RyYWNlL3RyYWNlX3RyaWVzLmMgKi8KKworI3VuZGVmIF9uY190cmFjZV90cmllcwordm9pZAlfbmNfdHJhY2VfdHJpZXMoCisJCVRSSUVTCSp0cmVlKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL2Jhc2UvdHJpZXMuYyAqLworCisjdW5kZWYgX25jX2V4cGFuZF90cnkKK2NoYXIJKl9uY19leHBhbmRfdHJ5KAorCQlUUklFUwkqdHJlZSwgCisJCXVuc2lnbmVkIGNvZGUsIAorCQlpbnQJKmNvdW50LCAKKwkJc2l6ZV90CWxlbikKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVtb3ZlX2tleQoraW50CV9uY19yZW1vdmVfa2V5KAorCQlUUklFUwkqKnRyZWUsIAorCQl1bnNpZ25lZCBjb2RlKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVtb3ZlX3N0cmluZworaW50CV9uY19yZW1vdmVfc3RyaW5nKAorCQlUUklFUwkqKnRyZWUsIAorCQljb25zdCBjaGFyICpzdHJpbmcpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby90cmltX3NncjAuYyAqLworCisjdW5kZWYgX25jX3RyaW1fc2dyMAorY2hhcgkqX25jX3RyaW1fc2dyMCgKKwkJVEVSTVRZUEUgKnRwKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi91bmN0cmwuYyAqLworCisjdW5kZWYgX25jX3VuY3RybAorY2hhcgkqX25jX3VuY3RybCgKKwkJU0NSRUVOCSpzcCwgCisJCWNodHlwZQljaCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiB1bmN0cmwKK2NoYXIJKnVuY3RybCgKKwkJY2h0eXBlCWNoKQorCQl7IHJldHVybigqKGNoYXIgKiopMCk7IH0KKworLyogLi90cmFjZS92aXNidWYuYyAqLworCisjdW5kZWYgX25jX3Zpc2J1ZjIKK2NvbnN0IGNoYXIgKl9uY192aXNidWYyKAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3QgY2hhciAqYnVmKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXNidWYKK2NvbnN0IGNoYXIgKl9uY192aXNidWYoCisJCWNvbnN0IGNoYXIgKmJ1ZikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzYnVmbgorY29uc3QgY2hhciAqX25jX3Zpc2J1Zm4oCisJCWNvbnN0IGNoYXIgKmJ1ZiwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc3didWYyCitjb25zdCBjaGFyICpfbmNfdmlzd2J1ZjIoCisJCWludAlidWZudW0sIAorCQljb25zdCB3Y2hhcl90ICpidWYpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc3didWYKK2NvbnN0IGNoYXIgKl9uY192aXN3YnVmKAorCQljb25zdCB3Y2hhcl90ICpidWYpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc3didWZuCitjb25zdCBjaGFyICpfbmNfdmlzd2J1Zm4oCisJCWNvbnN0IHdjaGFyX3QgKmJ1ZiwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX3Zpc3dpYnVmCitjb25zdCBjaGFyICpfbmNfdmlzd2lidWYoCisJCWNvbnN0IHdpbnRfdCAqYnVmKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KKworI3VuZGVmIF9uY192aXNjYnVmMgorY29uc3QgY2hhciAqX25jX3Zpc2NidWYyKAorCQlpbnQJYnVmbnVtLCAKKwkJY29uc3QgY2NoYXJfdCAqYnVmLCAKKwkJaW50CWxlbikKKwkJeyByZXR1cm4oKihjb25zdCBjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfdmlzY2J1ZgorY29uc3QgY2hhciAqX25jX3Zpc2NidWYoCisJCWNvbnN0IGNjaGFyX3QgKmJ1ZiwgCisJCWludAlsZW4pCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisvKiAuL3RpbmZvL2FsbG9jX2VudHJ5LmMgKi8KKworI3VuZGVmIF9uY19pbml0X2VudHJ5Cit2b2lkCV9uY19pbml0X2VudHJ5KAorCQlURVJNVFlQRSAqY29uc3QgdHApCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfY29weV9lbnRyeQorRU5UUlkJKl9uY19jb3B5X2VudHJ5KAorCQlFTlRSWQkqb2xkcCkKKwkJeyByZXR1cm4oKihFTlRSWSAqKikwKTsgfQorCisjdW5kZWYgX25jX3NhdmVfc3RyCitjaGFyCSpfbmNfc2F2ZV9zdHIoCisJCWNvbnN0IGNoYXIgKmNvbnN0IHN0cmluZykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKyN1bmRlZiBfbmNfd3JhcF9lbnRyeQordm9pZAlfbmNfd3JhcF9lbnRyeSgKKwkJRU5UUlkJKmNvbnN0IGVwLCAKKwkJTkNVUlNFU19CT09MIGNvcHlfc3RyaW5ncykKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19tZXJnZV9lbnRyeQordm9pZAlfbmNfbWVyZ2VfZW50cnkoCisJCVRFUk1UWVBFICpjb25zdCB0bywgCisJCVRFUk1UWVBFICpjb25zdCBmcm9tKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3RpbmZvL2NhcHRvaW5mby5jICovCisKKyN1bmRlZiBfbmNfY2FwdG9pbmZvCitjaGFyCSpfbmNfY2FwdG9pbmZvKAorCQljb25zdCBjaGFyICpjYXAsIAorCQljb25zdCBjaGFyICpzLCAKKwkJaW50IGNvbnN0IHBhcmFtZXRlcml6ZWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2luZm90b2NhcAorY2hhcgkqX25jX2luZm90b2NhcCgKKwkJY29uc3QgY2hhciAqY2FwLCAKKwkJY29uc3QgY2hhciAqc3RyLCAKKwkJaW50IGNvbnN0IHBhcmFtZXRlcml6ZWQpCisJCXsgcmV0dXJuKCooY2hhciAqKikwKTsgfQorCisvKiAuL2NvbXBfY2FwdGFiLmMgKi8KKworI2luY2x1ZGUgPGhhc2hzaXplLmg+CisKKyN1bmRlZiBfbmNfZ2V0X3RhYmxlCitjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqX25jX2dldF90YWJsZSgKKwkJTkNVUlNFU19CT09MIHRlcm1jYXApCisJCXsgcmV0dXJuKCooY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKiopMCk7IH0KKworI3VuZGVmIF9uY19nZXRfaGFzaF90YWJsZQorY29uc3Qgc2hvcnQgKl9uY19nZXRfaGFzaF90YWJsZSgKKwkJTkNVUlNFU19CT09MIHRlcm1jYXApCisJCXsgcmV0dXJuKCooY29uc3Qgc2hvcnQgKiopMCk7IH0KKworI3VuZGVmIF9uY19nZXRfYWxpYXNfdGFibGUKK2NvbnN0IHN0cnVjdCBhbGlhcyAqX25jX2dldF9hbGlhc190YWJsZSgKKwkJTkNVUlNFU19CT09MIHRlcm1jYXApCisJCXsgcmV0dXJuKCooY29uc3Qgc3RydWN0IGFsaWFzICoqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9leHBhbmQuYyAqLworCisjdW5kZWYgX25jX3RpY19leHBhbmQKK2NoYXIJKl9uY190aWNfZXhwYW5kKAorCQljb25zdCBjaGFyICpzcmNwLCAKKwkJTkNVUlNFU19CT09MIHRpY19mb3JtYXQsIAorCQlpbnQJbnVtYmVycykKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vdGluZm8vY29tcF9oYXNoLmMgKi8KKworI3VuZGVmIF9uY19maW5kX2VudHJ5CitzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqX25jX2ZpbmRfZW50cnkoCisJCWNvbnN0IGNoYXIgKnN0cmluZywgCisJCWNvbnN0IHNob3J0ICpoYXNoX3RhYmxlKQorCQl7IHJldHVybigqKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICoqKTApOyB9CisKKyN1bmRlZiBfbmNfZmluZF90eXBlX2VudHJ5CitzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqX25jX2ZpbmRfdHlwZV9lbnRyeSgKKwkJY29uc3QgY2hhciAqc3RyaW5nLCAKKwkJaW50CXR5cGUsIAorCQljb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqdGFibGUpCisJCXsgcmV0dXJuKCooc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKiopMCk7IH0KKworLyogLi90aW5mby9jb21wX3BhcnNlLmMgKi8KKworI3VuZGVmIF9uY19jaGVja190ZXJtdHlwZTIKK3ZvaWQJKCpfbmNfY2hlY2tfdGVybXR5cGUyKSgKKwkJVEVSTVRZUEUgKnAxLCAKKwkJTkNVUlNFU19CT09MIHAyKTsKKyN1bmRlZiBfbmNfY2hlY2tfdGVybXR5cGUKK3ZvaWQJKCpfbmNfY2hlY2tfdGVybXR5cGUpKAorCQlURVJNVFlQRSAqcDEpOworCisjdW5kZWYgX25jX2VudHJ5X21hdGNoCitOQ1VSU0VTX0JPT0wgX25jX2VudHJ5X21hdGNoKAorCQljaGFyCSpuMSwgCisJCWNoYXIJKm4yKQorCQl7IHJldHVybigqKE5DVVJTRVNfQk9PTCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcmVhZF9lbnRyeV9zb3VyY2UKK3ZvaWQJX25jX3JlYWRfZW50cnlfc291cmNlKAorCQlGSUxFCSpmcCwgCisJCWNoYXIJKmJ1ZiwgCisJCWludAlsaXRlcmFsLCAKKwkJTkNVUlNFU19CT09MIHNpbGVudCwgCisJCU5DVVJTRVNfQk9PTCAoKmhvb2spKAorCQlFTlRSWQkqcDEpKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3Jlc29sdmVfdXNlczIKK2ludAlfbmNfcmVzb2x2ZV91c2VzMigKKwkJTkNVUlNFU19CT09MIGZ1bGxyZXNvbHZlLCAKKwkJTkNVUlNFU19CT09MIGxpdGVyYWwpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY19yZXNvbHZlX3VzZXMKK2ludAlfbmNfcmVzb2x2ZV91c2VzKAorCQlOQ1VSU0VTX0JPT0wgZnVsbHJlc29sdmUpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi90aW5mby9jb21wX3NjYW4uYyAqLworCisjdW5kZWYgX25jX3N5bnRheAoraW50CV9uY19zeW50YXg7CisjdW5kZWYgX25jX2N1cnJfZmlsZV9wb3MKK2xvbmcJX25jX2N1cnJfZmlsZV9wb3M7CisjdW5kZWYgX25jX2NvbW1lbnRfc3RhcnQKK2xvbmcJX25jX2NvbW1lbnRfc3RhcnQ7CisjdW5kZWYgX25jX2NvbW1lbnRfZW5kCitsb25nCV9uY19jb21tZW50X2VuZDsKKyN1bmRlZiBfbmNfc3RhcnRfbGluZQorbG9uZwlfbmNfc3RhcnRfbGluZTsKKyN1bmRlZiBfbmNfY3Vycl90b2tlbgorc3RydWN0IHRva2VuIF9uY19jdXJyX3Rva2VuOworI3VuZGVmIF9uY19kaXNhYmxlX3BlcmlvZAorTkNVUlNFU19CT09MIF9uY19kaXNhYmxlX3BlcmlvZDsKKworI3VuZGVmIF9uY19yZXNldF9pbnB1dAordm9pZAlfbmNfcmVzZXRfaW5wdXQoCisJCUZJTEUJKmZwLCAKKwkJY2hhcgkqYnVmKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX2dldF90b2tlbgoraW50CV9uY19nZXRfdG9rZW4oCisJCU5DVVJTRVNfQk9PTCBzaWxlbnQpCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworI3VuZGVmIF9uY190cmFuc19zdHJpbmcKK2ludAlfbmNfdHJhbnNfc3RyaW5nKAorCQljaGFyCSpwdHIsIAorCQljaGFyCSpsYXN0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKyN1bmRlZiBfbmNfcHVzaF90b2tlbgordm9pZAlfbmNfcHVzaF90b2tlbigKKwkJaW50CXRva2NsYXNzKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX3BhbmljX21vZGUKK3ZvaWQJX25jX3BhbmljX21vZGUoCisJCWNoYXIJY2gpCisJCXsgLyogdm9pZCAqLyB9CisKKy8qIC4vdGluZm8vcGFyc2VfZW50cnkuYyAqLworCisjdW5kZWYgX25jX3BhcnNlX2VudHJ5CitpbnQJX25jX3BhcnNlX2VudHJ5KAorCQlzdHJ1Y3QgZW50cnkgKmVudHJ5cCwgCisJCWludAlsaXRlcmFsLCAKKwkJTkNVUlNFU19CT09MIHNpbGVudCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgX25jX2NhcGNtcAoraW50CV9uY19jYXBjbXAoCisJCWNvbnN0IGNoYXIgKnMsIAorCQljb25zdCBjaGFyICp0KQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpmcm9tOworICAgIGNvbnN0IGNoYXIgKnRvOworfSBhc3NvYzsKKworLyogLi90aW5mby93cml0ZV9lbnRyeS5jICovCisKKyN1bmRlZiBfbmNfc2V0X3dyaXRlZGlyCit2b2lkCV9uY19zZXRfd3JpdGVkaXIoCisJCWNoYXIJKmRpcikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY193cml0ZV9lbnRyeQordm9pZAlfbmNfd3JpdGVfZW50cnkoCisJCVRFUk1UWVBFICpjb25zdCB0cCkKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY190aWNfd3JpdHRlbgoraW50CV9uY190aWNfd3JpdHRlbih2b2lkKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS9kZWZpbmVfa2V5LmMgKi8KKworI3VuZGVmIGRlZmluZV9rZXkKK2ludAlkZWZpbmVfa2V5KAorCQljb25zdCBjaGFyICpzdHIsIAorCQlpbnQJa2V5Y29kZSkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3RpbmZvL2hhc2hlZF9kYi5jICovCisKKyN1bmRlZiBfbmNfaGFzaGVkX2RiCit2b2lkCV9uY19oYXNoZWRfZGIodm9pZCkKKwkJeyAvKiB2b2lkICovIH0KKworLyogLi9iYXNlL2tleV9kZWZpbmVkLmMgKi8KKworI3VuZGVmIGtleV9kZWZpbmVkCitpbnQJa2V5X2RlZmluZWQoCisJCWNvbnN0IGNoYXIgKnN0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL2Jhc2Uva2V5Ym91bmQuYyAqLworCisjdW5kZWYga2V5Ym91bmQKK2NoYXIJKmtleWJvdW5kKAorCQlpbnQJY29kZSwgCisJCWludAljb3VudCkKKwkJeyByZXR1cm4oKihjaGFyICoqKTApOyB9CisKKy8qIC4vYmFzZS9rZXlvay5jICovCisKKyN1bmRlZiBrZXlvaworaW50CWtleW9rKAorCQlpbnQJYywgCisJCU5DVVJTRVNfQk9PTCBmbGFnKQorCQl7IHJldHVybigqKGludCAqKTApOyB9CisKKy8qIC4vYmFzZS92ZXJzaW9uLmMgKi8KKworI3VuZGVmIGN1cnNlc192ZXJzaW9uCitjb25zdCBjaGFyICpjdXJzZXNfdmVyc2lvbih2b2lkKQorCQl7IHJldHVybigqKGNvbnN0IGNoYXIgKiopMCk7IH0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvbW9kdWxlcyBiL25jdXJzZXMtNS43L25jdXJzZXMvbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhlZjgxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy9tb2R1bGVzCkBAIC0wLDAgKzEsMjMyIEBACisjICRJZDogbW9kdWxlcyx2IDEuMTEyIDIwMDcvMDkvMDggMjI6MDM6MzQgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQkxOTk2LW9uCisjCisKK0AgYmFzZQorIyBMaWJyYXJ5IG9iamVjdHMKK2hhcmRzY3JvbGwJbGliCQkkKHNlcmlhbCkKK2hhc2htYXAJCWxpYgkJJChzZXJpYWwpCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfYWRkY2gJbGliCQkkKGJhc2UpCitsaWJfYWRkc3RyCWxpYgkJJChiYXNlKQorbGliX2JlZXAJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2JrZ2QJbGliCQkkKGJhc2UpCitsaWJfYm94IAlsaWIJCSQoYmFzZSkKK2xpYl9jaGdhdAlsaWIJCSQoYmFzZSkKK2xpYl9jbGVhcglsaWIJCSQoYmFzZSkKK2xpYl9jbGVhcm9rCWxpYgkJJChiYXNlKQorbGliX2NscmJvdAlsaWIJCSQoYmFzZSkKK2xpYl9jbHJlb2wJbGliCQkkKGJhc2UpCitsaWJfY29sb3IJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2NvbG9yc2V0CWxpYgkJJChiYXNlKQorbGliX2RlbGNoCWxpYgkJJChiYXNlKQorbGliX2RlbHdpbglsaWIJCSQoYmFzZSkKK2xpYl9lY2hvCWxpYgkJJChiYXNlKQorbGliX2VuZHdpbglsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfZXJhc2UJbGliCQkkKGJhc2UpCitsaWJfZmxhc2gJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX2dlbiAJbGliCQkuCQkuLi9pbmNsdWRlL2N1cnNlcy5oCitsaWJfZ2V0Y2gJbGliCQkkKGJhc2UpCitsaWJfZ2V0c3RyCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9obGluZQlsaWIJCSQoYmFzZSkKK2xpYl9pbW1lZG9rCWxpYgkJJChiYXNlKQorbGliX2luY2hzdHIJbGliCQkkKGJhc2UpCitsaWJfaW5pdHNjcglsaWIJCSQoYmFzZSkJCSQoSU5DRElSKS90aWMuaAorbGliX2luc2NoCWxpYgkJJChiYXNlKQorbGliX2luc2RlbAlsaWIJCSQoYmFzZSkKK2xpYl9pbnNuc3RyCWxpYgkJJChiYXNlKQorbGliX2luc3RyCWxpYgkJJChiYXNlKQorbGliX2lzZW5kd2luCWxpYgkJJChiYXNlKQorbGliX2xlYXZlb2sJbGliCQkkKGJhc2UpCitsaWJfbW91c2UJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX21vdmUJbGliCQkkKGJhc2UpCitsaWJfbXZjdXIJbGliCQkkKHNlcmlhbCkJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3RpYy5oCitsaWJfbXZ3aW4JbGliCQkkKGJhc2UpCitsaWJfbmV3dGVybQlsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfbmV3d2luCWxpYgkJJChiYXNlKQorbGliX25sCQlsaWIJCSQoYmFzZSkKK2xpYl9vdmVybGF5CWxpYgkJJChiYXNlKQorbGliX3BhZCAJbGliCQkkKGJhc2UpCitsaWJfcHJpbnR3CWxpYgkJJChiYXNlKQorbGliX3JlZHJhd2xuCWxpYgkJJChiYXNlKQorbGliX3JlZnJlc2gJbGliCQkkKGJhc2UpCitsaWJfcmVzdGFydAlsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfc2NhbncJbGliCQkkKGJhc2UpCitsaWJfc2NyZWVuCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9zY3JvbGwJbGliCQkkKGJhc2UpCitsaWJfc2Nyb2xsb2sJbGliCQkkKGJhc2UpCitsaWJfc2NycmVnCWxpYgkJJChiYXNlKQorbGliX3NldF90ZXJtCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9zbGsgCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9zbGthdHJfc2V0CWxpYgkJJChiYXNlKQorbGliX3Nsa2F0cm9mIAlsaWIJCSQoYmFzZSkKK2xpYl9zbGthdHJvbiAJbGliCQkkKGJhc2UpCitsaWJfc2xrYXRyc2V0IAlsaWIJCSQoYmFzZSkKK2xpYl9zbGthdHRyIAlsaWIJCSQoYmFzZSkKK2xpYl9zbGtjbGVhciAJbGliCQkkKGJhc2UpCitsaWJfc2xrY29sb3IgCWxpYgkJJChiYXNlKQorbGliX3Nsa2luaXQgCWxpYgkJJChiYXNlKQorbGliX3Nsa2xhYglsaWIJCSQoYmFzZSkKK2xpYl9zbGtyZWZyCWxpYgkJJChiYXNlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9zbGtzZXQJbGliCQkkKGJhc2UpCitsaWJfc2xrdG91Y2gJbGliCQkkKGJhc2UpCitsaWJfdG91Y2gJbGliCQkkKGJhc2UpCitsaWJfdHJhY2VkbXAJbGliCQkkKHRyYWNlKQorbGliX3RyYWNlbXNlCWxpYgkJJCh0cmFjZSkKK2xpYl90c3RwCWxpYgkJJChzZXJpYWwpCSQoc3JjZGlyKS9TaWdBY3Rpb24uaAorbGliX3VuZ2V0Y2gJbGliCQkkKGJhc2UpCitsaWJfdmlkYXR0cglsaWIJCSQoc2VyaWFsKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX3ZsaW5lCWxpYgkJJChiYXNlKQorbGliX3dhdHRyb2ZmCWxpYgkJJChiYXNlKQorbGliX3dhdHRyb24JbGliCQkkKGJhc2UpCitsaWJfd2luY2gJbGliCQkkKGJhc2UpCitsaWJfd2luZG93CWxpYgkJJChiYXNlKQorbGlua190ZXN0IAlsaWIJCS4JCS4uL2luY2x1ZGUvY3Vyc2VzLmgKK25jX3BhbmVsCWxpYgkJJChiYXNlKQorc2FmZV9zcHJpbnRmCWxpYgkJJChiYXNlKQordHR5X3VwZGF0ZQlsaWIJCSQoc2VyaWFsKQkuLi9pbmNsdWRlL3Rlcm0uaAordmFyYXJncwkJbGliCQkkKHRyYWNlKQorCisjIE1vZHVsZXMgZm9yIHBvcnRpbmcKK21lbW1vdmUJCWxpYgkJJChiYXNlKQordnNzY2FuZiAJbGliCQkkKGJhc2UpCisKKyMgYWN0dWFsbHkgYW4gZXh0ZW5zaW9uLCBidXQgd2l0aCBpdHMgb3duIGNvbmZpZ3VyZSBvcHRpb24gKC0tZGlzYWJsZS1sZWFrcykKK2xpYl9mcmVlYWxsCWxpYgkJJChiYXNlKQorCisjIFhTSSBleHRlbnNpb25zIHRvIHRoZSBiYXNlIGxpYnJhcnkgKHdpZGUtY2hhcmFjdGVyKQorQCB3aWRlY2hhcgorY2hhcmFibGUJbGliCQkkKHdpZGUpCitsaWJfYWRkX3djaAlsaWIJCSQod2lkZSkKK2xpYl9ib3hfc2V0CWxpYgkJJCh3aWRlKQorbGliX2NjaGFyCWxpYgkJJCh3aWRlKQorbGliX2VyYXNld2NoYXIJbGliCQkkKHdpZGUpCitsaWJfZ2V0X3djaAlsaWIJCSQod2lkZSkKK2xpYl9nZXRfd3N0cglsaWIJCSQod2lkZSkKK2xpYl9obGluZV9zZXQJbGliCQkkKHdpZGUpCitsaWJfaW5fd2NoCWxpYgkJJCh3aWRlKQorbGliX2luX3djaG5zdHIJbGliCQkkKHdpZGUpCitsaWJfaW5zX3djaAlsaWIJCSQod2lkZSkKK2xpYl9pbndzdHIJbGliCQkkKHdpZGUpCitsaWJfa2V5X25hbWUJbGliCQkkKHdpZGUpCitsaWJfcGVjaG9fd2NoYXIJbGliCQkkKHdpZGUpCitsaWJfc2xrX3dzZXQJbGliCQkkKHdpZGUpCitsaWJfdW5nZXRfd2NoCWxpYgkJJCh3aWRlKQorbGliX3ZpZF9hdHRyCWxpYgkJJCh3aWRlKQkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl92bGluZV9zZXQJbGliCQkkKHdpZGUpCitsaWJfd2FjcwlsaWIJCSQod2lkZSkKK2xpYl93dW5jdHJsCWxpYgkJJCh3aWRlKQorCisjIEV4dGVuc2lvbnMgdG8gdGhlIGJhc2UgbGlicmFyeQorQCBleHRfZnVuY3MKK2V4cGFuZGVkCWxpYgkJLgorbGVnYWN5X2NvZGluZwlsaWIJCSQoYmFzZSkJCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfZGZ0X2ZnYmcJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX3ByaW50CWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmgKK3Jlc2l6ZXRlcm0JbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAordHJhY2VfeG5hbWVzCWxpYgkJJCh0cmFjZSkJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaAordXNlX3NjcmVlbglsaWIJCSQodGluZm8pCit1c2Vfd2luZG93CWxpYgkJJChiYXNlKQord3Jlc2l6ZQkJbGliCQkkKGJhc2UpCQkuLi9pbmNsdWRlL3Rlcm0uaAorCisjIFN1cHBvcnQgZm9yIHRlcm1jYXAgKGFuZCB0aWMsIGV0Yy4pLCB3aGljaCBjYW4gYmUgYSBzZXBhcmF0ZSBsaWJyYXJ5CitAIHRlcm1saWIKK2FjY2VzcwkJbGliCQkkKHRpbmZvKQorYWRkX3RyaWVzCWxpYgkJJCh0aW5mbykKK2FsbG9jX3R0eXBlCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmgKK2NvZGVzCQlsaWIJCS4KK2NvbXBfZXJyb3IJbGliCQkkKHRpbmZvKQkkKElOQ0RJUikvdGljLmgKK2RiX2l0ZXJhdG9yCWxpYgkJJCh0aW5mbykJJChJTkNESVIpL3RpYy5oCitkb2FsbG9jCQlsaWIJCSQodGluZm8pCitlbnRyaWVzCQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90aWMuaAorZmFsbGJhY2sJbGliCQkuCQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGljLmgKK2ZyZWVfdHR5cGUJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaAorZ2V0ZW52X251bQlsaWIJCSQodGluZm8pCitob21lX3Rlcm1pbmZvCWxpYgkJJCh0aW5mbykKK2luaXRfa2V5dHJ5CWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3RpYy5oIGluaXRfa2V5dHJ5LmgKK2xpYl9hY3MgCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9iYXVkcmF0ZQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfY3VyX3Rlcm0JbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oCitsaWJfZGF0YQlsaWIJCSQodGluZm8pCitsaWJfaGFzX2NhcAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfa2VybmVsCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9rZXluYW1lCWxpYgkJLgkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl9sb25nbmFtZQlsaWIJCSQodGluZm8pCitsaWJfbmFwbXMJbGliCQkkKHRpbmZvKQorbGliX29wdGlvbnMJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX3JhdyAJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX3NldHVwCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaAorbGliX3Rlcm1jYXAJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaCAkKElOQ0RJUikvY2FwZGVmYXVsdHMuYworbGliX3Rlcm1uYW1lCWxpYgkJJCh0aW5mbykJJChJTkNESVIpL3RpYy5oCitsaWJfdGdvdG8JbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGljLmgKK2xpYl90aQkJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaAorbGliX3RwYXJtCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3RpYy5oCitsaWJfdHB1dHMJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGljLmgKK2xpYl90cmFjZQlsaWIJCSQodHJhY2UpCSQoSU5DRElSKS90aWMuaAorbGliX3RyYWNlYXRyCWxpYgkJJCh0cmFjZSkJLi4vaW5jbHVkZS90ZXJtLmgKK2xpYl90cmFjZWJpdHMJbGliCQkkKHRyYWNlKQkuLi9pbmNsdWRlL3Rlcm0uaAorbGliX3RyYWNlY2hyCWxpYgkJJCh0cmFjZSkKK2xpYl90dHlmbGFncwlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oCitsaWJfdHdhaXQJbGliCQkkKHNlcmlhbCkKK25hbWVfbWF0Y2gJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGljLmgKK25hbWVzCQlsaWIJCS4KK3JlYWRfZW50cnkJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaAorcmVhZF90ZXJtY2FwCWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmgKK3NldGJ1ZgkJbGliCQkkKHRpbmZvKQorc3RyaW5ncwkJbGliCQkkKHRpbmZvKQordHJhY2VfYnVmCWxpYgkJJCh0cmFjZSkKK3RyYWNlX3RyaWVzCWxpYgkJJCh0cmFjZSkKK3RyaWVzCQlsaWIJCSQoYmFzZSkKK3RyaW1fc2dyMAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmggJChJTkNESVIpL3RpYy5oCit1bmN0cmwJCWxpYgkJLgordmlzYnVmCQlsaWIJCSQodHJhY2UpCSQoSU5DRElSKS90aWMuaAorCisjIE1vZHVsZXMgdXNlZCBvbmx5IGZvciB0aWMsIG90aGVyIHByb2dyYW1zIHVzaW5nIGludGVybmFsIGludGVyZmFjZXMKK0AgdGljbGliCithbGxvY19lbnRyeQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmggJChJTkNESVIpL3RpYy5oCitjYXB0b2luZm8JbGliCQkkKHRpbmZvKQkkKElOQ0RJUikvdGljLmgKK2NvbXBfY2FwdGFiCWxpYgkJLgkJJChJTkNESVIpL3RpYy5oIC4uL2luY2x1ZGUvdGVybS5oIC4uL2luY2x1ZGUvaGFzaHNpemUuaAorY29tcF9leHBhbmQJbGliCQkkKHRpbmZvKQkkKElOQ0RJUikvdGljLmgKK2NvbXBfaGFzaAlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90aWMuaCAuLi9pbmNsdWRlL2hhc2hzaXplLmgKK2NvbXBfcGFyc2UJbGliCQkkKHRpbmZvKQkuLi9pbmNsdWRlL3Rlcm0uaCAkKElOQ0RJUikvdGVybV9lbnRyeS5oICQoSU5DRElSKS90aWMuaAorY29tcF9zY2FuCWxpYgkJJCh0aW5mbykJJChJTkNESVIpL3RpYy5oCitwYXJzZV9lbnRyeQlsaWIJCSQodGluZm8pCS4uL2luY2x1ZGUvdGVybS5oICQoSU5DRElSKS90ZXJtX2VudHJ5LmggJChJTkNESVIpL3RpYy5oIC4uL2luY2x1ZGUvcGFyYW1ldHJpemVkLmggJChJTkNESVIpL2NhcGRlZmF1bHRzLmMKK3dyaXRlX2VudHJ5CWxpYgkJJCh0aW5mbykJLi4vaW5jbHVkZS90ZXJtLmggJChJTkNESVIpL3Rlcm1fZW50cnkuaCAkKElOQ0RJUikvdGljLmgKKworIyBFeHRlbnNpb25zIHRvIHRoZSB0ZXJtbGliIGxpYnJhcnkKK0AgZXh0X3RpbmZvCitkZWZpbmVfa2V5CWxpYgkJJChiYXNlKQoraGFzaGVkX2RiCWxpYgkJJCh0aW5mbykKK2tleV9kZWZpbmVkCWxpYgkJJChiYXNlKQora2V5Ym91bmQJbGliCQkkKGJhc2UpCitrZXlvawkJbGliCQkkKGJhc2UpCit2ZXJzaW9uCQlsaWIJCSQoYmFzZSkKKworIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL01LY2FwdGFiLmF3ayBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtjYXB0YWIuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZDNkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL01LY2FwdGFiLmF3awpAQCAtMCwwICsxLDk0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogTUtjYXB0YWIuYXdrLHYgMS4yMCAyMDA3LzA4LzEyIDAwOjI2OjE1IHRvbSBFeHAgJAorZnVuY3Rpb24gYWRkX3N0cmluZyh0ZXh0KSB7CisgICAgaWYgKHRleHQgIT0gIklHTk9SRSIpIHsKKwlvZmZzZXRzW251bV9zdHJpbmdzXSA9IG9mZnNldDsKKwlvZmZzZXQgPSBvZmZzZXQgKyBsZW5ndGgodGV4dCkgKyAxOworCXByaW50ZiAiJXNcXDAiLCB0ZXh0OworICAgIH0gZWxzZSB7CisJb2Zmc2V0c1tudW1fc3RyaW5nc10gPSAtMTsKKyAgICB9CisgICAgbnVtX3N0cmluZ3MgPSBudW1fc3RyaW5ncyArIDE7CisgICAgaWYgKChudW1fc3RyaW5ncyAlIDMpID09IDApIHsKKwlwcmludGYgIlxcXG4iOworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0c1tudW1fc3RyaW5ncyAtIDFdOworfQorQkVHSU4geworCWZpcnN0ID0gMTsKKwludW1fYWxpYXNlcyA9IDA7CisJbnVtX3N0cmluZ3MgPSAwOworCW9mZnNldCA9IDA7Cit9CisKKy9eW14jXS8geworCSAgICBpZiAoZmlyc3QpIHsKKwkJcHJpbnRmICIvKiBnZW5lcmF0ZWQgYnkgTUtjYXB0YWIuYXdrICVzKCVkKSAqL1xuIiwgdGFibGVuYW1lLCBiaWdzdHJpbmdzOworCQlwcmludCAiIgorCQlpZiAoYmlnc3RyaW5ncykgeworCQkgICAgcHJpbnRmICJzdGF0aWMgc3RydWN0IGFsaWFzICpfbmNfJXNfdGFibGUgPSAwO1xuIiwgdGFibGVuYW1lOworCQkgICAgcHJpbnQgIiI7CisJCSAgICBwcmludGYgInN0YXRpYyBjb25zdCBjaGFyICVzX3RleHRbXSA9IFwiXFxcbiIsIHRhYmxlbmFtZTsKKwkJfSBlbHNlIHsKKwkJICAgIHByaW50ZiAic3RhdGljIGNvbnN0IHN0cnVjdCBhbGlhcyBfbmNfJXNfdGFibGVbXSA9XG4iLCB0YWJsZW5hbWU7CisJCSAgICBwcmludGYgIntcbiI7CisJCX0KKwkJZmlyc3QgPSAwOworCSAgICB9CisJICAgIGlmICgkMSA9PSB0YWJsZW5hbWUpIHsKKwkJaWYgKCQzID09ICJJR05PUkUiKSB7CisJCSAgICB0byA9ICIoY2hhciAqKU5VTEwiOworCQl9IGVsc2UgeworCQkgICAgdG8gPSAiXCIiICQzICJcIiI7CisJCX0KKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJICAgIGMxID0gYWRkX3N0cmluZygkMik7CisJCSAgICBjMiA9IGFkZF9zdHJpbmcoJDMpOworCQkgICAgYzMgPSBhZGRfc3RyaW5nKCQ0KTsKKwkJICAgIGFsaWFzZXNbbnVtX2FsaWFzZXNdID0gc3ByaW50ZigiXHR7JTVkLCAlNWQsICU1ZH0sXHQgLyogJXMgKi8iLCBjMSwgYzIsIGMzLCAkNSk7CisJCSAgICBudW1fYWxpYXNlcyA9IG51bV9hbGlhc2VzICsgMTsKKwkJfSBlbHNlIHsKKwkJICAgIHByaW50ZiAiXHR7XCIlc1wiLCAlcywgXCIlc1wifSxcdCAvKiAlcyAqL1xuIiwgJDIsIHRvLCAkNCwgJDU7CisJCX0KKwkgICAgfQorCX0KK0VORAl7CisJICAgIGlmIChiaWdzdHJpbmdzKSB7CisJCXByaW50ZiAiXCI7XG5cbiI7CisJCXByaW50ZiAic3RhdGljIGNvbnN0IGFsaWFzX3RhYmxlX2RhdGEgJXNfZGF0YVtdID0ge1xuIiwgdGFibGVuYW1lOworCQlmb3IgKG4gPSAwOyBuIDwgbnVtX2FsaWFzZXM7ICsrbikgeworCQkgICAgcHJpbnRmICIlc1xuIiwgYWxpYXNlc1tuXTsKKwkJfQorCQlwcmludGYgIn07XG5cbiI7CisJICAgIH0gZWxzZSB7CisJCXByaW50ZiAiXHR7KGNoYXIgKilOVUxMLCAoY2hhciAqKU5VTEwsIChjaGFyICopTlVMTH1cbiI7CisJCXByaW50ZiAifTtcblxuIjsKKwkgICAgfQorCX0KKyMgdmlsZTpzdz00OgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9NS2NhcHRhYi5zaCBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtjYXB0YWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOThjMDRlOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtjYXB0YWIuc2gKQEAgLTAsMCArMSwxNDkgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkSWQ6IE1LY2FwdGFiLnNoLHYgMS44IDIwMDcvMDgvMTIgMTM6MTM6NTEgdG9tIEV4cCAkCitBV0s9JHsxLWF3a30KK09QVDE9JHsyLTB9CitPUFQyPSR7My10aW5mby9NS2NhcHRhYi5hd2t9CitEQVRBPSR7NC0uLi9pbmNsdWRlL0NhcHN9CisKK2NhdCA8PCdFT0YnCisvKgorICoJY29tcF9jYXB0YWIuYyAtLSBUaGUgbmFtZXMgb2YgdGhlIGNhcGFiaWxpdGllcyBpbmRleGVkIHZpYSBhIGhhc2gKKyAqCQkgICAgICAgICB0YWJsZSBmb3IgdGhlIGNvbXBpbGVyLgorICoKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDxoYXNoc2l6ZS5oPgorCitFT0YKKworLi9tYWtlX2hhc2ggMSBpbmZvICRPUFQxIDwkREFUQQorLi9tYWtlX2hhc2ggMyBjYXAgICRPUFQxIDwkREFUQQorCiskQVdLIC1mICRPUFQyIGJpZ3N0cmluZ3M9JE9QVDEgdGFibGVuYW1lPWNhcGFsaWFzIDwkREFUQSAKKworJEFXSyAtZiAkT1BUMiBiaWdzdHJpbmdzPSRPUFQxIHRhYmxlbmFtZT1pbmZvYWxpYXMgPCREQVRBCisKK2NhdCA8PEVPRgorCisjaWYgJE9QVDEKK3N0YXRpYyB2b2lkCituZXh0X3N0cmluZyhjb25zdCBjaGFyICpzdHJpbmdzLCB1bnNpZ25lZCAqb2Zmc2V0KQoreworCSpvZmZzZXQgKz0gc3RybGVuKHN0cmluZ3MgKyAqb2Zmc2V0KSArIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqCitfbmNfYnVpbGRfbmFtZXMoc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKiphY3R1YWwsCisJCWNvbnN0IG5hbWVfdGFibGVfZGF0YSAqc291cmNlLAorCQljb25zdCBjaGFyICpzdHJpbmdzKQoreworCWlmICgqYWN0dWFsID09IDApIHsKKwkJKmFjdHVhbCA9IHR5cGVDYWxsb2Moc3RydWN0IG5hbWVfdGFibGVfZW50cnksIENBUFRBQlNJWkUpOworCQlpZiAoKmFjdHVhbCAhPSAwKSB7CisJCQl1bnNpZ25lZCBuOworCQkJdW5zaWduZWQgbGVuID0gMDsKKwkJCWZvciAobiA9IDA7IG4gPCBDQVBUQUJTSVpFOyArK24pIHsKKwkJCQkoKmFjdHVhbClbbl0ubnRlX25hbWUgPSBzdHJpbmdzICsgbGVuOworCQkJCSgqYWN0dWFsKVtuXS5udGVfdHlwZSA9IHNvdXJjZVtuXS5udGVfdHlwZTsKKwkJCQkoKmFjdHVhbClbbl0ubnRlX2luZGV4ID0gc291cmNlW25dLm50ZV9pbmRleDsKKwkJCQkoKmFjdHVhbClbbl0ubnRlX2xpbmsgPSBzb3VyY2Vbbl0ubnRlX2xpbms7CisJCQkJbmV4dF9zdHJpbmcoc3RyaW5ncywgJmxlbik7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICphY3R1YWw7Cit9CisKKyNkZWZpbmUgYWRkX2FsaWFzKGZpZWxkKSBcXAorCWlmIChzb3VyY2Vbbl0uZmllbGQgPj0gMCkgeyBcXAorCQkoKmFjdHVhbClbbl0uZmllbGQgPSBzdHJpbmdzICsgc291cmNlW25dLmZpZWxkOyBcXAorCX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbGlhcyAqCitfbmNfYnVpbGRfYWxpYXMoc3RydWN0IGFsaWFzICoqYWN0dWFsLAorCQljb25zdCBhbGlhc190YWJsZV9kYXRhICpzb3VyY2UsCisJCWNvbnN0IGNoYXIgKnN0cmluZ3MsCisJCXVuc2lnbmVkIHRhYmxlc2l6ZSkKK3sKKwlpZiAoKmFjdHVhbCA9PSAwKSB7CisJCSphY3R1YWwgPSB0eXBlQ2FsbG9jKHN0cnVjdCBhbGlhcywgdGFibGVzaXplICsgMSk7CisJCWlmICgqYWN0dWFsICE9IDApIHsKKwkJCXVuc2lnbmVkIG47CisJCQlmb3IgKG4gPSAwOyBuIDwgdGFibGVzaXplOyArK24pIHsKKwkJCQlhZGRfYWxpYXMoZnJvbSk7CisJCQkJYWRkX2FsaWFzKHRvKTsKKwkJCQlhZGRfYWxpYXMoc291cmNlKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKmFjdHVhbDsKK30KKworI2RlZmluZSBidWlsZF9uYW1lcyhyb290KSBfbmNfYnVpbGRfbmFtZXMoJl9uY18jI3Jvb3QjI190YWJsZSwgXFwKKwkJCQkJICByb290IyNfbmFtZXNfZGF0YSwgXFwKKwkJCQkJICByb290IyNfbmFtZXNfdGV4dCkKKyNkZWZpbmUgYnVpbGRfYWxpYXMocm9vdCkgX25jX2J1aWxkX2FsaWFzKCZfbmNfIyNyb290IyNhbGlhc190YWJsZSwgXFwKKwkJCQkJICByb290IyNhbGlhc19kYXRhLCBcXAorCQkJCQkgIHJvb3QjI2FsaWFzX3RleHQsIFxcCisJCQkJCSAgU0laRU9GKHJvb3QjI2FsaWFzX2RhdGEpKQorI2Vsc2UKKyNkZWZpbmUgYnVpbGRfbmFtZXMocm9vdCkgX25jXyAjIyByb290ICMjIF90YWJsZQorI2RlZmluZSBidWlsZF9hbGlhcyhyb290KSBfbmNfICMjIHJvb3QgIyMgYWxpYXNfdGFibGUKKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqKSBfbmNfZ2V0X3RhYmxlIChib29sIHRlcm1jYXApCit7CisJcmV0dXJuIHRlcm1jYXAgPyBidWlsZF9uYW1lcyhjYXApIDogYnVpbGRfbmFtZXMoaW5mbykgOworfQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBzaG9ydCAqKSBfbmNfZ2V0X2hhc2hfdGFibGUgKGJvb2wgdGVybWNhcCkKK3sKKwlyZXR1cm4gdGVybWNhcCA/IF9uY19jYXBfaGFzaF90YWJsZTogX25jX2luZm9faGFzaF90YWJsZSA7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IHN0cnVjdCBhbGlhcyAqKSBfbmNfZ2V0X2FsaWFzX3RhYmxlIChib29sIHRlcm1jYXApCit7CisJcmV0dXJuIHRlcm1jYXAgPyBidWlsZF9hbGlhcyhjYXApIDogYnVpbGRfYWxpYXMoaW5mbykgOworfQorCisjaWYgTk9fTEVBS1MKK05DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19jb21wX2NhcHRhYl9sZWFrcyh2b2lkKQoreworI2lmICRPUFQxCisJRnJlZUlmTmVlZGVkKF9uY19jYXBfdGFibGUpOworCUZyZWVJZk5lZWRlZChfbmNfaW5mb190YWJsZSk7CisJRnJlZUlmTmVlZGVkKF9uY19jYXBhbGlhc190YWJsZSk7CisJRnJlZUlmTmVlZGVkKF9uY19pbmZvYWxpYXNfdGFibGUpOworI2VuZGlmCit9CisjZW5kaWYgLyogTk9fTEVBS1MgKi8KK0VPRgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9NS2NvZGVzLmF3ayBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtjb2Rlcy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYTYzNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtjb2Rlcy5hd2sKQEAgLTAsMCArMSwxNjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBNS2NvZGVzLmF3ayx2IDEuNSAyMDA4LzA2LzI4IDIzOjEzOjI1IHRvbSBFeHAgJAorZnVuY3Rpb24gbGFyZ2VfaXRlbSh2YWx1ZSkgeworCXJlc3VsdCA9IHNwcmludGYoIiVkLCIsIG9mZnNldCk7CisJb2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoKHZhbHVlKSArIDE7CisJb2ZmY29sID0gb2ZmY29sICsgbGVuZ3RoKHJlc3VsdCkgKyAyOworCWlmIChvZmZjb2wgPiA3MCkgeworCQlyZXN1bHQgPSByZXN1bHQgIlxuIjsKKwkJb2ZmY29sID0gMDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSByZXN1bHQgIiAiOworCX0KKwliaWdzdHIgPSBiaWdzdHIgc3ByaW50ZigiXCIlc1xcMFwiICIsIHZhbHVlKTsKKwliaWdjb2wgPSBiaWdjb2wgKyBsZW5ndGgodmFsdWUpICsgNTsKKwlpZiAoYmlnY29sID4gNzApIHsKKwkJYmlnc3RyID0gYmlnc3RyICJcXFxuIjsKKwkJYmlnY29sID0gMDsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gc21hbGxfaXRlbSh2YWx1ZSkgeworCXJldHVybiBzcHJpbnRmKCJcdFx0XCIlc1wiLFxuIiwgdmFsdWUpOworfQorCitmdW5jdGlvbiBwcmludF9zdHJpbmdzKG5hbWUsdmFsdWUpIHsKKwlwcmludGYgICJEQ0woJXMpID0ge1xuIiwgbmFtZQorCXByaW50ICB2YWx1ZQorCXByaW50ICAiXHRcdChOQ1VSU0VTX0NPTlNUIGNoYXIgKikwLCIKKwlwcmludCAgIn07IgorCXByaW50ICAiIgorfQorCitmdW5jdGlvbiBwcmludF9vZmZzZXRzKG5hbWUsdmFsdWUpIHsKKwlwcmludGYgICJzdGF0aWMgY29uc3Qgc2hvcnQgX25jX29mZnNldF8lc1tdID0ge1xuIiwgbmFtZQorCXByaW50ZiAiJXMiLCAgdmFsdWUKKwlwcmludCAgIn07IgorCXByaW50ICAiIgorCXByaW50ZiAic3RhdGljIE5DVVJTRVNfQ09OU1QgY2hhciAqKiBwdHJfJXMgPSAwO1xuIiwgbmFtZQorCXByaW50ICAiIgorfQorCitCRUdJTgl7CisJCXByaW50ICAiLyogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgTUtjb2Rlcy5hd2sgKi8iCisJCXByaW50ICAiIgorCQlwcmludCAgIiNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPiIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2RlZmluZSBJVCBOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCIKKwkJcHJpbnQgICIiCisJCW9mZnNldCA9IDA7CisJCW9mZmNvbCA9IDA7CisJCWJpZ2NvbCA9IDA7CisJfQorCiskMSB+IC9eIy8JCXtuZXh0O30KKworJDEgPT0gIlNLSVBXQVJOIgl7bmV4dDt9CisKKyQzID09ICJib29sIgl7CisJCQlzbWFsbF9ib29sY29kZXMgPSBzbWFsbF9ib29sY29kZXMgc21hbGxfaXRlbSgkNCk7CisJCQlsYXJnZV9ib29sY29kZXMgPSBsYXJnZV9ib29sY29kZXMgbGFyZ2VfaXRlbSgkNCk7CisJCX0KKworJDMgPT0gIm51bSIJeworCQkJc21hbGxfbnVtY29kZXMgPSBzbWFsbF9udW1jb2RlcyBzbWFsbF9pdGVtKCQ0KTsKKwkJCWxhcmdlX251bWNvZGVzID0gbGFyZ2VfbnVtY29kZXMgbGFyZ2VfaXRlbSgkNCk7CisJCX0KKworJDMgPT0gInN0ciIJeworCQkJc21hbGxfc3RyY29kZXMgPSBzbWFsbF9zdHJjb2RlcyBzbWFsbF9pdGVtKCQ0KTsKKwkJCWxhcmdlX3N0cmNvZGVzID0gbGFyZ2Vfc3RyY29kZXMgbGFyZ2VfaXRlbSgkNCk7CisJCX0KKworRU5ECXsKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2lmIEJST0tFTl9MSU5LRVIgfHwgVVNFX1JFRU5UUkFOVCIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2luY2x1ZGUgPHRlcm0uaD4iCisJCXByaW50ICAiIgorCQlpZiAoYmlnc3RyaW5ncykgeworCQkJcHJpbnRmICJzdGF0aWMgY29uc3QgY2hhciBfbmNfY29kZV9ibG9iW10gPSBcbiIKKwkJCXByaW50ZiAiJXM7XG4iLCBiaWdzdHI7CisJCQlwcmludF9vZmZzZXRzKCJib29sY29kZXMiLCBsYXJnZV9ib29sY29kZXMpOworCQkJcHJpbnRfb2Zmc2V0cygibnVtY29kZXMiLCBsYXJnZV9udW1jb2Rlcyk7CisJCQlwcmludF9vZmZzZXRzKCJzdHJjb2RlcyIsIGxhcmdlX3N0cmNvZGVzKTsKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICJzdGF0aWMgSVQgKiIKKwkJCXByaW50ICAiYWxsb2NfYXJyYXkoTkNVUlNFU19DT05TVCBjaGFyICoqKnZhbHVlLCBjb25zdCBzaG9ydCAqb2Zmc2V0cywgdW5zaWduZWQgc2l6ZSkiCisJCQlwcmludCAgInsiCisJCQlwcmludCAgIglpZiAoKnZhbHVlID09IDApIHsiCisJCQlwcmludCAgIgkJaWYgKCgqdmFsdWUgPSB0eXBlQ2FsbG9jKE5DVVJTRVNfQ09OU1QgY2hhciAqLCBzaXplICsgMSkpICE9IDApIHsiCisJCQlwcmludCAgIgkJCXVuc2lnbmVkIG47IgorCQkJcHJpbnQgICIJCQlmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7IgorCQkJcHJpbnQgICIJCQkJKCp2YWx1ZSlbbl0gPSBfbmNfY29kZV9ibG9iICsgb2Zmc2V0c1tuXTsiCisJCQlwcmludCAgIgkJCX0iCisJCQlwcmludCAgIgkJfSIKKwkJCXByaW50ICAiCX0iCisJCQlwcmludCAgIglyZXR1cm4gKnZhbHVlOyIKKwkJCXByaW50ICAifSIKKwkJCXByaW50ICAiIgorCQkJcHJpbnQgICIjZGVmaW5lIEZJWChpdCkgTkNVUlNFU19JTVBFWFAgSVQgKiBOQ1VSU0VTX0FQSSBfbmNfIyNpdCh2b2lkKSB7IHJldHVybiBhbGxvY19hcnJheSgmcHRyXyMjaXQsIF9uY19vZmZzZXRfIyNpdCwgU0laRU9GKF9uY19vZmZzZXRfIyNpdCkpOyB9IgorCQl9IGVsc2UgeworCQkJcHJpbnQgICIjZGVmaW5lIERDTChpdCkgc3RhdGljIElUIGRhdGEjI2l0W10iCisJCQlwcmludCAgIiIKKwkJCXByaW50X3N0cmluZ3MoImJvb2xjb2RlcyIsIHNtYWxsX2Jvb2xjb2Rlcyk7CisJCQlwcmludF9zdHJpbmdzKCJudW1jb2RlcyIsIHNtYWxsX251bWNvZGVzKTsKKwkJCXByaW50X3N0cmluZ3MoInN0cmNvZGVzIiwgc21hbGxfc3RyY29kZXMpOworCQkJcHJpbnQgICIjZGVmaW5lIEZJWChpdCkgTkNVUlNFU19JTVBFWFAgSVQgKiBOQ1VSU0VTX0FQSSBfbmNfIyNpdCh2b2lkKSB7IHJldHVybiBkYXRhIyNpdDsgfSIKKwkJfQorCQlwcmludCAgIiIKKwkJcHJpbnQgICJGSVgoYm9vbGNvZGVzKSIKKwkJcHJpbnQgICJGSVgobnVtY29kZXMpIgorCQlwcmludCAgIkZJWChzdHJjb2RlcykiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNkZWZpbmUgRlJFRV9GSVgoaXQpIGlmIChwdHJfIyNpdCkgeyBGcmVlQW5kTnVsbChwdHJfIyNpdCk7IH0iCisJCXByaW50ICAiIgorCQlwcmludCAgIiNpZiBOT19MRUFLUyIKKwkJcHJpbnQgICJOQ1VSU0VTX0VYUE9SVCh2b2lkKSIKKwkJcHJpbnQgICJfbmNfY29kZXNfbGVha3Modm9pZCkiCisJCXByaW50ICAieyIKKwkJaWYgKGJpZ3N0cmluZ3MpIHsKKwkJcHJpbnQgICJGUkVFX0ZJWChib29sY29kZXMpIgorCQlwcmludCAgIkZSRUVfRklYKG51bWNvZGVzKSIKKwkJcHJpbnQgICJGUkVFX0ZJWChzdHJjb2RlcykiCisJCX0KKwkJcHJpbnQgICJ9IgorCQlwcmludCAgIiNlbmRpZiIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2Vsc2UiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNkZWZpbmUgRENMKGl0KSBOQ1VSU0VTX0VYUE9SVF9WQVIoSVQpIGl0W10iCisJCXByaW50ICAiIgorCQlwcmludF9zdHJpbmdzKCJib29sY29kZXMiLCBzbWFsbF9ib29sY29kZXMpOworCQlwcmludF9zdHJpbmdzKCJudW1jb2RlcyIsIHNtYWxsX251bWNvZGVzKTsKKwkJcHJpbnRfc3RyaW5ncygic3RyY29kZXMiLCBzbWFsbF9zdHJjb2Rlcyk7CisJCXByaW50ICAiIgorCQlwcmludCAgIiNlbmRpZiAvKiBCUk9LRU5fTElOS0VSICovIgorCX0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtmYWxsYmFjay5zaCBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtmYWxsYmFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZmVhYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9NS2ZhbGxiYWNrLnNoCkBAIC0wLDAgKzEsMTI5IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBNS2ZhbGxiYWNrLnNoLHYgMS4xMyAyMDA2LzA3LzE1IDE2OjU0OjIwIHRvbSBFeHAgJAorIworIyBNS2ZhbGxiYWNrLnNoIC0tIGNyZWF0ZSBmYWxsYmFjayB0YWJsZSBmb3IgZW50cnkgcmVhZHMKKyMKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIHNvdXJjZSBjb2RlIGZvciBhIGN1c3RvbSB2ZXJzaW9uIG9mIHJlYWRfZW50cnkuYworIyB0aGF0IChpbnN0ZWFkIG9mIHJlYWRpbmcgY2FwYWJpbGl0aWVzIGZvciBhbiBhcmd1bWVudCB0ZXJtaW5hbCB0eXBlCisjIGZyb20gYW4gb24tZGlzayB0ZXJtaW5mbyB0cmVlKSB0cmllcyB0byBtYXRjaCB0aGUgdHlwZSB3aXRoIG9uZSBvZiBhCisjIHNwZWNpZmllZCBsaXN0IG9mIHR5cGVzIGdlbmVyYXRlZCBpbi4KKyMKKwordGVybWluZm9fZGlyPSQxCitzaGlmdAorCit0ZXJtaW5mb19zcmM9JDEKK3NoaWZ0CisKK2lmIHRlc3QgJCMgIT0gMCA7IHRoZW4KKwl0bXBfaW5mbz10bXBfaW5mbworCWVjaG8gY3JlYXRpbmcgdGVtcG9yYXJ5IHRlcm1pbmZvIGRpcmVjdG9yeS4uLiA+JjIKKworCVRFUk1JTkZPPWBwd2RgLyR0bXBfaW5mbworCWV4cG9ydCBURVJNSU5GTworCisJVEVSTUlORk9fRElSUz0kVEVSTUlORk86JHRlcm1pbmZvX2RpcgorCWV4cG9ydCBURVJNSU5GT19ESVJTCisKKwl0aWMgLXggJHRlcm1pbmZvX3NyYyA+JjIKK2Vsc2UKKwl0bXBfaW5mbz0KK2ZpCisKK2NhdCA8PEVPRgorLyoKKyAqIERPIE5PVCBFRElUIFRISVMgRklMRSBCWSBIQU5EISAgSXQgaXMgZ2VuZXJhdGVkIGJ5IE1LZmFsbGJhY2suc2guCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorCitFT0YKKworaWYgWyAiJCoiIF0KK3RoZW4KKwljYXQgPDxFT0YKKyNpbmNsdWRlIDx0aWMuaD4KKworLyogZmFsbGJhY2sgZW50cmllcyBmb3I6ICQqICovCitFT0YKKwlmb3IgeCBpbiAkKgorCWRvCisJCWVjaG8gIi8qICR4ICovIgorCQlpbmZvY21wIC1FICR4CisJZG9uZQorCisJY2F0IDw8RU9GCitzdGF0aWMgY29uc3QgVEVSTVRZUEUgZmFsbGJhY2tzWyQjXSA9Cit7CitFT0YKKwljb21tYT0iIgorCWZvciB4IGluICQqCisJZG8KKwkJZWNobyAiJGNvbW1hIC8qICR4ICovIgorCQlpbmZvY21wIC1lICR4CisJCWNvbW1hPSIsIgorCWRvbmUKKworCWNhdCA8PEVPRgorfTsKKworRU9GCitmaQorCitjYXQgPDxFT0YKK05DVVJTRVNfRVhQT1JUKGNvbnN0IFRFUk1UWVBFICopIF9uY19mYWxsYmFjayAoY29uc3QgY2hhciAqbmFtZSBHQ0NfVU5VU0VEKQoreworRU9GCisKK2lmIFsgIiQqIiBdCit0aGVuCisJY2F0IDw8RU9GCisgICAgY29uc3QgVEVSTVRZUEUJKnRwOworCisgICAgZm9yICh0cCA9IGZhbGxiYWNrczsKKwkgCXRwIDwgZmFsbGJhY2tzICsgc2l6ZW9mKGZhbGxiYWNrcykvc2l6ZW9mKFRFUk1UWVBFKTsKKwkgCXRwKyspCisJaWYgKF9uY19uYW1lX21hdGNoKHRwLT50ZXJtX25hbWVzLCBuYW1lLCAifCIpKQorCSAgICByZXR1cm4odHApOworRU9GCitlbHNlCisJZWNobyAiCS8qIHRoZSBmYWxsYmFjayBsaXN0IGlzIGVtcHR5ICovIjsKK2ZpCisKK2NhdCA8PEVPRgorCXJldHVybigoVEVSTVRZUEUgKikwKTsKK30KK0VPRgorCitpZiB0ZXN0IC1uICIkdG1wX2luZm8iIDsgdGhlbgorCWVjaG8gcmVtb3ZpbmcgdGVtcG9yYXJ5IHRlcm1pbmZvIGRpcmVjdG9yeS4uLiA+JjIKKwlybSAtcmYgJHRtcF9pbmZvCitmaQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9NS2tleXNfbGlzdC5zaCBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtrZXlzX2xpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQwMTdiMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtrZXlzX2xpc3Quc2gKQEAgLTAsMCArMSw2MiBAQAorIyEgL2Jpbi9zaAorIyAkSWQ6IE1La2V5c19saXN0LnNoLHYgMS40IDIwMDMvMTAvMjUgMTY6MTk6NTQgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAxLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIE1La2V5X2RlZnMuc2ggLS0gZ2VuZXJhdGUgbGlzdCBvZiBmdW5jdGlvbi1rZXlzIGZvciB0ZXJtaW5mbyBkYXRhYmFzZQorIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMjAwMQorIworIyBFeHRyYWN0IGZ1bmN0aW9uLWtleSBuYW1lcyBmcm9tIHRoZSBDYXBzIGZpbGUKKyMKKzogJHtBV0stYXdrfQorREFUQT0kezEtLi4vLi4vaW5jbHVkZS9DYXBzfQorCitkYXRhPWRhdGEkJAordHJhcCAncm0gLWYgJGRhdGEnIDAgMSAyIDUgMTUKK3NlZCAtZSAncy9bCV1bCV0qLwkvZycgPCAkREFUQSA+JGRhdGEKKworY2F0IDw8RU9GCisjIFRoZXNlIGRlZmluaXRpb25zIHdlcmUgZ2VuZXJhdGVkIGJ5ICQwICREQVRBCitLRVlfQlJFQUsKK0tFWV9TUkVTRVQKK0tFWV9SRVNFVAorS0VZX1JFU0laRQorRU9GCisKKyR7QVdLLWF3a30gPCRkYXRhICcKKy9eIy8JCXtuZXh0O30KKy9eY2FwYWxpYXMvCXtuZXh0O30KKy9eaW5mb2FsaWFzLwl7bmV4dDt9CisKKyQ1ICE9ICItIiB7CisJCWlmIChzdWJzdHIoJDUsIDEsIDQpID09ICJLRVlfIiApIHsKKwkJCXByaW50ZiAiJXMJJXNcbiIsICQ1LCAkMQorCX0KK30KKycKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vTUtuYW1lcy5hd2sgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL01LbmFtZXMuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTA3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL01LbmFtZXMuYXdrCkBAIC0wLDAgKzEsMTg2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogTUtuYW1lcy5hd2ssdiAxLjIwIDIwMDgvMTAvMTEgMjE6MDc6NTYgdG9tIEV4cCAkCitmdW5jdGlvbiBsYXJnZV9pdGVtKHZhbHVlKSB7CisJcmVzdWx0ID0gc3ByaW50ZigiJWQsIiwgb2Zmc2V0KTsKKwlvZmZzZXQgPSBvZmZzZXQgKyBsZW5ndGgodmFsdWUpICsgMTsKKwlvZmZjb2wgPSBvZmZjb2wgKyBsZW5ndGgocmVzdWx0KSArIDI7CisJaWYgKG9mZmNvbCA+IDcwKSB7CisJCXJlc3VsdCA9IHJlc3VsdCAiXG4iOworCQlvZmZjb2wgPSAwOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IHJlc3VsdCAiICI7CisJfQorCWJpZ3N0ciA9IGJpZ3N0ciBzcHJpbnRmKCJcIiVzXFwwXCIgIiwgdmFsdWUpOworCWJpZ2NvbCA9IGJpZ2NvbCArIGxlbmd0aCh2YWx1ZSkgKyA1OworCWlmIChiaWdjb2wgPiA3MCkgeworCQliaWdzdHIgPSBiaWdzdHIgIlxcXG4iOworCQliaWdjb2wgPSAwOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBzbWFsbF9pdGVtKHZhbHVlKSB7CisJcmV0dXJuIHNwcmludGYoIlx0XHRcIiVzXCIsXG4iLCB2YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIHByaW50X3N0cmluZ3MobmFtZSx2YWx1ZSkgeworCXByaW50ZiAgIkRDTCglcykgPSB7XG4iLCBuYW1lCisJcHJpbnQgIHZhbHVlCisJcHJpbnQgICJcdFx0KE5DVVJTRVNfQ09OU1QgY2hhciAqKTAsIgorCXByaW50ICAifTsiCisJcHJpbnQgICIiCit9CisKK2Z1bmN0aW9uIHByaW50X29mZnNldHMobmFtZSx2YWx1ZSkgeworCXByaW50ZiAgInN0YXRpYyBjb25zdCBzaG9ydCBfbmNfb2Zmc2V0XyVzW10gPSB7XG4iLCBuYW1lCisJcHJpbnRmICIlcyIsICB2YWx1ZQorCXByaW50ICAifTsiCisJcHJpbnQgICIiCisJcHJpbnRmICJzdGF0aWMgTkNVUlNFU19DT05TVCBjaGFyICoqIHB0cl8lcyA9IDA7XG4iLCBuYW1lCisJcHJpbnQgICIiCit9CisKK0JFR0lOCXsKKwkJcHJpbnQgICIvKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBNS25hbWVzLmF3ayAqLyIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+IgorCQlwcmludCAgIiIKKwkJcHJpbnQgICIjZGVmaW5lIElUIE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0IgorCQlwcmludCAgIiIKKwkJb2Zmc2V0ID0gMDsKKwkJb2ZmY29sID0gMDsKKwkJYmlnY29sID0gMDsKKwl9CisKKyQxIH4gL14jLwkJe25leHQ7fQorCiskMSA9PSAiU0tJUFdBUk4iCXtuZXh0O30KKworJDMgPT0gImJvb2wiCXsKKwkJCXNtYWxsX2Jvb2xuYW1lcyA9IHNtYWxsX2Jvb2xuYW1lcyBzbWFsbF9pdGVtKCQyKTsKKwkJCWxhcmdlX2Jvb2xuYW1lcyA9IGxhcmdlX2Jvb2xuYW1lcyBsYXJnZV9pdGVtKCQyKTsKKwkJCXNtYWxsX2Jvb2xmbmFtZXMgPSBzbWFsbF9ib29sZm5hbWVzIHNtYWxsX2l0ZW0oJDEpOworCQkJbGFyZ2VfYm9vbGZuYW1lcyA9IGxhcmdlX2Jvb2xmbmFtZXMgbGFyZ2VfaXRlbSgkMSk7CisJCX0KKworJDMgPT0gIm51bSIJeworCQkJc21hbGxfbnVtbmFtZXMgPSBzbWFsbF9udW1uYW1lcyBzbWFsbF9pdGVtKCQyKTsKKwkJCWxhcmdlX251bW5hbWVzID0gbGFyZ2VfbnVtbmFtZXMgbGFyZ2VfaXRlbSgkMik7CisJCQlzbWFsbF9udW1mbmFtZXMgPSBzbWFsbF9udW1mbmFtZXMgc21hbGxfaXRlbSgkMSk7CisJCQlsYXJnZV9udW1mbmFtZXMgPSBsYXJnZV9udW1mbmFtZXMgbGFyZ2VfaXRlbSgkMSk7CisJCX0KKworJDMgPT0gInN0ciIJeworCQkJc21hbGxfc3RybmFtZXMgPSBzbWFsbF9zdHJuYW1lcyBzbWFsbF9pdGVtKCQyKTsKKwkJCWxhcmdlX3N0cm5hbWVzID0gbGFyZ2Vfc3RybmFtZXMgbGFyZ2VfaXRlbSgkMik7CisJCQlzbWFsbF9zdHJmbmFtZXMgPSBzbWFsbF9zdHJmbmFtZXMgc21hbGxfaXRlbSgkMSk7CisJCQlsYXJnZV9zdHJmbmFtZXMgPSBsYXJnZV9zdHJmbmFtZXMgbGFyZ2VfaXRlbSgkMSk7CisJCX0KKworRU5ECXsKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2lmIEJST0tFTl9MSU5LRVIgfHwgVVNFX1JFRU5UUkFOVCIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2luY2x1ZGUgPHRlcm0uaD4iCisJCXByaW50ICAiIgorCQlpZiAoYmlnc3RyaW5ncykgeworCQkJcHJpbnRmICJzdGF0aWMgY29uc3QgY2hhciBfbmNfbmFtZV9ibG9iW10gPSBcbiIKKwkJCXByaW50ZiAiJXM7XG4iLCBiaWdzdHI7CisJCQlwcmludF9vZmZzZXRzKCJib29sZm5hbWVzIiwgbGFyZ2VfYm9vbGZuYW1lcyk7CisJCQlwcmludF9vZmZzZXRzKCJib29sbmFtZXMiLCBsYXJnZV9ib29sbmFtZXMpOworCQkJcHJpbnRfb2Zmc2V0cygibnVtZm5hbWVzIiwgbGFyZ2VfbnVtZm5hbWVzKTsKKwkJCXByaW50X29mZnNldHMoIm51bW5hbWVzIiwgbGFyZ2VfbnVtbmFtZXMpOworCQkJcHJpbnRfb2Zmc2V0cygic3RyZm5hbWVzIiwgbGFyZ2Vfc3RyZm5hbWVzKTsKKwkJCXByaW50X29mZnNldHMoInN0cm5hbWVzIiwgbGFyZ2Vfc3RybmFtZXMpOworCQkJcHJpbnQgICIiCisJCQlwcmludCAgInN0YXRpYyBJVCAqIgorCQkJcHJpbnQgICJhbGxvY19hcnJheShOQ1VSU0VTX0NPTlNUIGNoYXIgKioqdmFsdWUsIGNvbnN0IHNob3J0ICpvZmZzZXRzLCB1bnNpZ25lZCBzaXplKSIKKwkJCXByaW50ICAieyIKKwkJCXByaW50ICAiCWlmICgqdmFsdWUgPT0gMCkgeyIKKwkJCXByaW50ICAiCQlpZiAoKCp2YWx1ZSA9IHR5cGVDYWxsb2MoTkNVUlNFU19DT05TVCBjaGFyICosIHNpemUgKyAxKSkgIT0gMCkgeyIKKwkJCXByaW50ICAiCQkJdW5zaWduZWQgbjsiCisJCQlwcmludCAgIgkJCWZvciAobiA9IDA7IG4gPCBzaXplOyArK24pIHsiCisJCQlwcmludCAgIgkJCQkoKnZhbHVlKVtuXSA9IChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgX25jX25hbWVfYmxvYiArIG9mZnNldHNbbl07IgorCQkJcHJpbnQgICIJCQl9IgorCQkJcHJpbnQgICIJCX0iCisJCQlwcmludCAgIgl9IgorCQkJcHJpbnQgICIJcmV0dXJuICp2YWx1ZTsiCisJCQlwcmludCAgIn0iCisJCQlwcmludCAgIiIKKwkJCXByaW50ICAiI2RlZmluZSBGSVgoaXQpIE5DVVJTRVNfSU1QRVhQIElUICogTkNVUlNFU19BUEkgX25jXyMjaXQodm9pZCkgeyByZXR1cm4gYWxsb2NfYXJyYXkoJnB0cl8jI2l0LCBfbmNfb2Zmc2V0XyMjaXQsIFNJWkVPRihfbmNfb2Zmc2V0XyMjaXQpKTsgfSIKKwkJfSBlbHNlIHsKKwkJCXByaW50ICAiI2RlZmluZSBEQ0woaXQpIHN0YXRpYyBJVCBkYXRhIyNpdFtdIgorCQkJcHJpbnQgICIiCisJCQlwcmludF9zdHJpbmdzKCJib29sbmFtZXMiLCBzbWFsbF9ib29sbmFtZXMpOworCQkJcHJpbnRfc3RyaW5ncygiYm9vbGZuYW1lcyIsIHNtYWxsX2Jvb2xmbmFtZXMpOworCQkJcHJpbnRfc3RyaW5ncygibnVtbmFtZXMiLCBzbWFsbF9udW1uYW1lcyk7CisJCQlwcmludF9zdHJpbmdzKCJudW1mbmFtZXMiLCBzbWFsbF9udW1mbmFtZXMpOworCQkJcHJpbnRfc3RyaW5ncygic3RybmFtZXMiLCBzbWFsbF9zdHJuYW1lcyk7CisJCQlwcmludF9zdHJpbmdzKCJzdHJmbmFtZXMiLCBzbWFsbF9zdHJmbmFtZXMpOworCQkJcHJpbnQgICIjZGVmaW5lIEZJWChpdCkgTkNVUlNFU19JTVBFWFAgSVQgKiBOQ1VSU0VTX0FQSSBfbmNfIyNpdCh2b2lkKSB7IHJldHVybiBkYXRhIyNpdDsgfSIKKwkJfQorCQlwcmludCAgIiIKKwkJcHJpbnQgICJGSVgoYm9vbG5hbWVzKSIKKwkJcHJpbnQgICJGSVgoYm9vbGZuYW1lcykiCisJCXByaW50ICAiRklYKG51bW5hbWVzKSIKKwkJcHJpbnQgICJGSVgobnVtZm5hbWVzKSIKKwkJcHJpbnQgICJGSVgoc3RybmFtZXMpIgorCQlwcmludCAgIkZJWChzdHJmbmFtZXMpIgorCQlwcmludCAgIiIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2RlZmluZSBGUkVFX0ZJWChpdCkgaWYgKHB0cl8jI2l0KSB7IEZyZWVBbmROdWxsKHB0cl8jI2l0KTsgfSIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2lmIE5PX0xFQUtTIgorCQlwcmludCAgIk5DVVJTRVNfRVhQT1JUKHZvaWQpIgorCQlwcmludCAgIl9uY19uYW1lc19sZWFrcyh2b2lkKSIKKwkJcHJpbnQgICJ7IgorCQlpZiAoYmlnc3RyaW5ncykgeworCQlwcmludCAgIkZSRUVfRklYKGJvb2xuYW1lcykiCisJCXByaW50ICAiRlJFRV9GSVgoYm9vbGZuYW1lcykiCisJCXByaW50ICAiRlJFRV9GSVgobnVtbmFtZXMpIgorCQlwcmludCAgIkZSRUVfRklYKG51bWZuYW1lcykiCisJCXByaW50ICAiRlJFRV9GSVgoc3RybmFtZXMpIgorCQlwcmludCAgIkZSRUVfRklYKHN0cmZuYW1lcykiCisJCX0KKwkJcHJpbnQgICJ9IgorCQlwcmludCAgIiNlbmRpZiIKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2Vsc2UiCisJCXByaW50ICAiIgorCQlwcmludCAgIiNkZWZpbmUgRENMKGl0KSBOQ1VSU0VTX0VYUE9SVF9WQVIoSVQpIGl0W10iCisJCXByaW50ICAiIgorCQlwcmludF9zdHJpbmdzKCJib29sbmFtZXMiLCBzbWFsbF9ib29sbmFtZXMpOworCQlwcmludF9zdHJpbmdzKCJib29sZm5hbWVzIiwgc21hbGxfYm9vbGZuYW1lcyk7CisJCXByaW50X3N0cmluZ3MoIm51bW5hbWVzIiwgc21hbGxfbnVtbmFtZXMpOworCQlwcmludF9zdHJpbmdzKCJudW1mbmFtZXMiLCBzbWFsbF9udW1mbmFtZXMpOworCQlwcmludF9zdHJpbmdzKCJzdHJuYW1lcyIsIHNtYWxsX3N0cm5hbWVzKTsKKwkJcHJpbnRfc3RyaW5ncygic3RyZm5hbWVzIiwgc21hbGxfc3RyZm5hbWVzKTsKKwkJcHJpbnQgICIiCisJCXByaW50ICAiI2VuZGlmIC8qIEJST0tFTl9MSU5LRVIgKi8iCisJfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9SRUFETUUgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGM0MjIwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9SRUFETUUKQEAgLTAsMCArMSwzNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAtLQorLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICAtLQorLS0gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICAtLQorLS0gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICAtLQorLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyAtLQorLS0gb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkICAtLQorLS0gdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICAtLQorLS0gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICAtLQorLS0gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICAtLQorLS0gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiAtLQorLS0gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICAgICAtLQorLS0gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICAtLQorLS0gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSAtLQorLS0gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAtLQorLS0gaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICAtLQorLS0gc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAtLQorLS0gYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gJElkOiBSRUFETUUsdiAxLjIgMjAwNi8wNC8yMiAyMjoxOTozNyB0b20gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5ICh0aW5mbykgYXJlIHRob3NlIHRoYXQgc3VwcG9ydCB0aGUgdGVybWluZm8KK2RhdGFiYXNlIGFuZCBpbnRlcmZhY2VzIGZvciBuY3Vyc2VzLiAgVGhlIHRlcm1pbmZvIGxpYnJhcnkgY2FuIGJlIGJ1aWx0CitzZXBhcmF0ZWx5LCBhcyBhIGxvd2VyLWxldmVsIGxpYnJhcnkgZm9yIG5jdXJzZXMsIGJ1dCB1c3VhbGx5IGlzIGJ1bmRsZWQuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBkb2N1bWVudGVkIGludGVyZmFjZXMsIG5jdXJzZXMgdXNlcyBpbnRlcm5hbAorZnVuY3Rpb25zIHdoaWNoIHJlc2lkZSBpbiB0aW5mbyB0byBzYXRpc2Z5IGxpbmthZ2UgcmVxdWlyZW1lbnRzLgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9hY2Nlc3MuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vYWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4Y2NkYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vYWNjZXNzLmMKQEAgLTAsMCArMSwxNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8bmNfYWxsb2MuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGFjY2Vzcy5jLHYgMS4xNCAyMDA3LzExLzE4IDAwOjU3OjUzIHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgTE9XRVJDQVNFKGMpICgoaXNhbHBoYShVQ2hhcihjKSkgJiYgaXN1cHBlcihVQ2hhcihjKSkpID8gdG9sb3dlcihVQ2hhcihjKSkgOiAoYykpCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19yb290bmFtZShjaGFyICpwYXRoKQoreworICAgIGNoYXIgKnJlc3VsdCA9IF9uY19iYXNlbmFtZShwYXRoKTsKKyNpZiAhTUlYRURDQVNFX0ZJTEVOQU1FUyB8fCBkZWZpbmVkKFBST0dfRVhUKQorICAgIHN0YXRpYyBjaGFyICp0ZW1wOworICAgIGNoYXIgKnM7CisKKyAgICB0ZW1wID0gc3RyZHVwKHJlc3VsdCk7CisgICAgcmVzdWx0ID0gdGVtcDsKKyNpZiAhTUlYRURDQVNFX0ZJTEVOQU1FUworICAgIGZvciAocyA9IHJlc3VsdDsgKnMgIT0gJ1wwJzsgKytzKSB7CisJKnMgPSBMT1dFUkNBU0UoKnMpOworICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoUFJPR19FWFQpCisgICAgaWYgKChzID0gc3RycmNocihyZXN1bHQsICcuJykpICE9IDApIHsKKwlpZiAoIXN0cmNtcChzLCBQUk9HX0VYVCkpCisJICAgICpzID0gJ1wwJzsKKyAgICB9CisjZW5kaWYKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHN0cmluZyBhcHBlYXJzIHRvIGJlIGFuIGFic29sdXRlIHBhdGhuYW1lLgorICovCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX2lzX2Fic19wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisjaWYgZGVmaW5lZChfX0VNWF9fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykKKyNkZWZpbmUgaXNfcGF0aG5hbWUocykgKCgoKHMpICE9IDApICYmICgocylbMF0gPT0gJy8nKSkgXAorCQkgIHx8ICgoKHMpWzBdICE9IDApICYmICgocylbMV0gPT0gJzonKSkpCisjZWxzZQorI2RlZmluZSBpc19wYXRobmFtZShzKSAoKHMpICE9IDAgJiYgKHMpWzBdID09ICcvJykKKyNlbmRpZgorICAgIHJldHVybiBpc19wYXRobmFtZShwYXRoKTsKK30KKworLyoKKyAqIFJldHVybiBpbmRleCBvZiB0aGUgYmFzZW5hbWUKKyAqLworTkNVUlNFU19FWFBPUlQodW5zaWduZWQpCitfbmNfcGF0aGxhc3QoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgICBjb25zdCBjaGFyICp0ZXN0ID0gc3RycmNocihwYXRoLCAnLycpOworI2lmZGVmIF9fRU1YX18KKyAgICBpZiAodGVzdCA9PSAwKQorCXRlc3QgPSBzdHJyY2hyKHBhdGgsICdcXCcpOworI2VuZGlmCisgICAgaWYgKHRlc3QgPT0gMCkKKwl0ZXN0ID0gcGF0aDsKKyAgICBlbHNlCisJdGVzdCsrOworICAgIHJldHVybiAodGVzdCAtIHBhdGgpOworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfYmFzZW5hbWUoY2hhciAqcGF0aCkKK3sKKyAgICByZXR1cm4gcGF0aCArIF9uY19wYXRobGFzdChwYXRoKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2FjY2Vzcyhjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSkKK3sKKyAgICBpZiAoYWNjZXNzKHBhdGgsIG1vZGUpIDwgMCkgeworCWlmICgobW9kZSAmIFdfT0spICE9IDAKKwkgICAgJiYgZXJybm8gPT0gRU5PRU5UCisJICAgICYmIHN0cmxlbihwYXRoKSA8IFBBVEhfTUFYKSB7CisJICAgIGNoYXIgaGVhZFtQQVRIX01BWF07CisJICAgIGNoYXIgKmxlYWYgPSBfbmNfYmFzZW5hbWUoc3RyY3B5KGhlYWQsIHBhdGgpKTsKKworCSAgICBpZiAobGVhZiA9PSAwKQorCQlsZWFmID0gaGVhZDsKKwkgICAgKmxlYWYgPSAnXDAnOworCSAgICBpZiAoaGVhZCA9PSBsZWFmKQorCQkodm9pZCkgc3RyY3B5KGhlYWQsICIuIik7CisKKwkgICAgcmV0dXJuIGFjY2VzcyhoZWFkLCBSX09LIHwgV19PSyB8IFhfT0spOworCX0KKwlyZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX2lzX2Rpcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKworICAgIGlmIChzdGF0KHBhdGgsICZzYikgPT0gMAorCSYmIChzYi5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKSB7CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19pc19maWxlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworICAgIHN0cnVjdCBzdGF0IHNiOworCisgICAgaWYgKHN0YXQocGF0aCwgJnNiKSA9PSAwCisJJiYgKHNiLnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpIHsKKwlyZXN1bHQgPSBUUlVFOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWZuZGVmIFVTRV9ST09UX0VOVklST04KKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgd2UgYWxsb3cgYXBwbGljYXRpb24gdG8gdXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZQorICogdXNlZCBmb3Igc2VhcmNoaW5nIGxpc3RzIG9mIGRpcmVjdG9yaWVzLCBldGMuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19lbnZfYWNjZXNzKHZvaWQpCit7CisjaWYgSEFWRV9JU1NFVFVHSUQKKyAgICBpZiAoaXNzZXR1Z2lkKCkpCisJcmV0dXJuIEZBTFNFOworI2VsaWYgSEFWRV9HRVRFVUlEICYmIEhBVkVfR0VURUdJRAorICAgIGlmIChnZXR1aWQoKSAhPSBnZXRldWlkKCkKKwl8fCBnZXRnaWQoKSAhPSBnZXRlZ2lkKCkpCisJcmV0dXJuIEZBTFNFOworI2VuZGlmCisgICAgcmV0dXJuIGdldHVpZCgpICE9IDAgJiYgZ2V0ZXVpZCgpICE9IDA7CS8qIC4uLmZpbmFsbHksIGRpc2FsbG93IHJvb3QgKi8KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9hZGRfdHJpZXMuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vYWRkX3RyaWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ZDE0MgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vYWRkX3RyaWVzLmMKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgMTk5OC1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglhZGRfdHJpZXMuYworKioKKyoqCUFkZCBrZXljb2RlL3N0cmluZyB0byB0cmllcy10cmVlLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogYWRkX3RyaWVzLmMsdiAxLjggMjAwNi8xMi8zMCAyMzoxNToyNiB0b20gRXhwICQiKQorCisjZGVmaW5lIFNFVF9UUlkoZHN0LHNyYykgaWYgKChkc3QtPmNoID0gKnNyYysrKSA9PSAxMjgpIGRzdC0+Y2ggPSAnXDAnCisjZGVmaW5lIENNUF9UUlkoYSxiKSAoKGEpPyAoYSA9PSBiKSA6IChiID09IDEyOCkpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19hZGRfdG9fdHJ5KFRSSUVTICoqIHRyZWUsIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY29kZSkKK3sKKyAgICBUUklFUyAqcHRyLCAqc2F2ZWRwdHI7CisgICAgdW5zaWduZWQgY29uc3QgY2hhciAqdHh0ID0gKHVuc2lnbmVkIGNvbnN0IGNoYXIgKikgc3RyOworCisgICAgVCgoVF9DQUxMRUQoIl9uY19hZGRfdG9fdHJ5KCVwLCAlcywgJXUpIiksICp0cmVlLCBfbmNfdmlzYnVmKHN0ciksIGNvZGUpKTsKKyAgICBpZiAodHh0ID09IDAgfHwgKnR4dCA9PSAnXDAnIHx8IGNvZGUgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBpZiAoKCp0cmVlKSAhPSAwKSB7CisJcHRyID0gc2F2ZWRwdHIgPSAoKnRyZWUpOworCisJZm9yICg7OykgeworCSAgICB1bnNpZ25lZCBjaGFyIGNtcCA9ICp0eHQ7CisKKwkgICAgd2hpbGUgKCFDTVBfVFJZKHB0ci0+Y2gsIGNtcCkKKwkJICAgJiYgcHRyLT5zaWJsaW5nICE9IDApCisJCXB0ciA9IHB0ci0+c2libGluZzsKKworCSAgICBpZiAoQ01QX1RSWShwdHItPmNoLCBjbXApKSB7CisJCWlmICgqKCsrdHh0KSA9PSAnXDAnKSB7CisJCSAgICBwdHItPnZhbHVlID0gY29kZTsKKwkJICAgIHJldHVybkNvZGUoT0spOworCQl9CisJCWlmIChwdHItPmNoaWxkICE9IDApCisJCSAgICBwdHIgPSBwdHItPmNoaWxkOworCQllbHNlCisJCSAgICBicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKChwdHItPnNpYmxpbmcgPSB0eXBlQ2FsbG9jKFRSSUVTLCAxKSkgPT0gMCkgeworCQkgICAgcmV0dXJuQ29kZShFUlIpOworCQl9CisKKwkJc2F2ZWRwdHIgPSBwdHIgPSBwdHItPnNpYmxpbmc7CisJCVNFVF9UUlkocHRyLCB0eHQpOworCQlwdHItPnZhbHVlID0gMDsKKworCQlicmVhazsKKwkgICAgfQorCX0JCQkvKiBlbmQgZm9yICg7OykgKi8KKyAgICB9IGVsc2UgewkJCS8qICgqdHJlZSkgPT0gMCA6OiBGaXJzdCBzZXF1ZW5jZSB0byBiZSBhZGRlZCAqLworCXNhdmVkcHRyID0gcHRyID0gKCp0cmVlKSA9IHR5cGVDYWxsb2MoVFJJRVMsIDEpOworCisJaWYgKHB0ciA9PSAwKSB7CisJICAgIHJldHVybkNvZGUoRVJSKTsKKwl9CisKKwlTRVRfVFJZKHB0ciwgdHh0KTsKKwlwdHItPnZhbHVlID0gMDsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBhcmUgYWRkaW5nIHRvIHRoZSB0cnkuICBwdHItPmNoaWxkID09IDAgKi8KKworICAgIHdoaWxlICgqdHh0KSB7CisJcHRyLT5jaGlsZCA9IHR5cGVDYWxsb2MoVFJJRVMsIDEpOworCisJcHRyID0gcHRyLT5jaGlsZDsKKworCWlmIChwdHIgPT0gMCkgeworCSAgICB3aGlsZSAoKHB0ciA9IHNhdmVkcHRyKSAhPSAwKSB7CisJCXNhdmVkcHRyID0gcHRyLT5jaGlsZDsKKwkJZnJlZShwdHIpOworCSAgICB9CisJICAgIHJldHVybkNvZGUoRVJSKTsKKwl9CisKKwlTRVRfVFJZKHB0ciwgdHh0KTsKKwlwdHItPnZhbHVlID0gMDsKKyAgICB9CisKKyAgICBwdHItPnZhbHVlID0gY29kZTsKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vYWxsb2NfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9hbGxvY19lbnRyeS5jCkBAIC0wLDAgKzEsMjk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBhbGxvY19lbnRyeS5jIC0tIGFsbG9jYXRpb24gZnVuY3Rpb25zIGZvciB0ZXJtaW5mbyBlbnRyaWVzCisgKgorICoJX25jX2NvcHlfZW50cnkoKQorICoJX25jX2luaXRfZW50cnkoKQorICoJX25jX21lcmdlX2VudHJ5KCkKKyAqCV9uY19zYXZlX3N0cigpCisgKglfbmNfd3JhcF9lbnRyeSgpCisgKgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogYWxsb2NfZW50cnkuYyx2IDEuNDggMjAwOC8wOC8xNiAxNjoyNTozMSB0b20gRXhwICQiKQorCisjZGVmaW5lIEFCU0VOVF9PRkZTRVQgICAgLTEKKyNkZWZpbmUgQ0FOQ0VMTEVEX09GRlNFVCAtMgorCisjZGVmaW5lIE1BWF9TVFJUQUIJNDA5NgkvKiBkb2N1bWVudGVkIG1heGltdW0gZW50cnkgc2l6ZSAqLworCitzdGF0aWMgY2hhciAqc3RyaW5nYnVmOwkJLyogYnVmZmVyIGZvciBzdHJpbmcgY2FwYWJpbGl0aWVzICovCitzdGF0aWMgc2l6ZV90IG5leHRfZnJlZTsJLyogbmV4dCBmcmVlIGNoYXJhY3RlciBpbiBzdHJpbmdidWYgKi8KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19pbml0X2VudHJ5KFRFUk1UWVBFICpjb25zdCB0cCkKKy8qIGluaXRpYWxpemUgYSB0ZXJtaW5hbCB0eXBlIGRhdGEgYmxvY2sgKi8KK3sKKyAgICB1bnNpZ25lZCBpOworCisjaWYgTk9fTEVBS1MKKyAgICBpZiAodHAgPT0gMCAmJiBzdHJpbmdidWYgIT0gMCkgeworCUZyZWVBbmROdWxsKHN0cmluZ2J1Zik7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHN0cmluZ2J1ZiA9PSAwKQorCXN0cmluZ2J1ZiA9IChjaGFyICopIG1hbGxvYyhNQVhfU1RSVEFCKTsKKworI2lmIE5DVVJTRVNfWE5BTUVTCisgICAgdHAtPm51bV9Cb29sZWFucyA9IEJPT0xDT1VOVDsKKyAgICB0cC0+bnVtX051bWJlcnMgPSBOVU1DT1VOVDsKKyAgICB0cC0+bnVtX1N0cmluZ3MgPSBTVFJDT1VOVDsKKyAgICB0cC0+ZXh0X0Jvb2xlYW5zID0gMDsKKyAgICB0cC0+ZXh0X051bWJlcnMgPSAwOworICAgIHRwLT5leHRfU3RyaW5ncyA9IDA7CisjZW5kaWYKKyAgICBpZiAodHAtPkJvb2xlYW5zID09IDApCisJdHAtPkJvb2xlYW5zID0gdHlwZU1hbGxvYyhOQ1VSU0VTX1NCT09MLCBCT09MQ09VTlQpOworICAgIGlmICh0cC0+TnVtYmVycyA9PSAwKQorCXRwLT5OdW1iZXJzID0gdHlwZU1hbGxvYyhzaG9ydCwgTlVNQ09VTlQpOworICAgIGlmICh0cC0+U3RyaW5ncyA9PSAwKQorCXRwLT5TdHJpbmdzID0gdHlwZU1hbGxvYyhjaGFyICosIFNUUkNPVU5UKTsKKworICAgIGZvcl9lYWNoX2Jvb2xlYW4oaSwgdHApCisJdHAtPkJvb2xlYW5zW2ldID0gRkFMU0U7CisKKyAgICBmb3JfZWFjaF9udW1iZXIoaSwgdHApCisJdHAtPk51bWJlcnNbaV0gPSBBQlNFTlRfTlVNRVJJQzsKKworICAgIGZvcl9lYWNoX3N0cmluZyhpLCB0cCkKKwl0cC0+U3RyaW5nc1tpXSA9IEFCU0VOVF9TVFJJTkc7CisKKyAgICBuZXh0X2ZyZWUgPSAwOworfQorCitOQ1VSU0VTX0VYUE9SVChFTlRSWSAqKQorX25jX2NvcHlfZW50cnkoRU5UUlkgKiBvbGRwKQoreworICAgIEVOVFJZICpuZXdwID0gdHlwZUNhbGxvYyhFTlRSWSwgMSk7CisKKyAgICBpZiAobmV3cCAhPSAwKSB7CisJKm5ld3AgPSAqb2xkcDsKKwlfbmNfY29weV90ZXJtdHlwZSgmKG5ld3AtPnR0ZXJtKSwgJihvbGRwLT50dGVybSkpOworICAgIH0KKyAgICByZXR1cm4gbmV3cDsKK30KKworLyogc2F2ZSBhIGNvcHkgb2Ygc3RyaW5nIGluIHRoZSBzdHJpbmcgYnVmZmVyICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfc2F2ZV9zdHIoY29uc3QgY2hhciAqY29uc3Qgc3RyaW5nKQoreworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisgICAgc2l6ZV90IG9sZF9uZXh0X2ZyZWUgPSBuZXh0X2ZyZWU7CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzdHJpbmcpICsgMTsKKworICAgIGlmIChsZW4gPT0gMSAmJiBuZXh0X2ZyZWUgIT0gMCkgeworCS8qCisJICogQ2hlYXQgYSBsaXR0bGUgYnkgbWFraW5nIGFuIGVtcHR5IHN0cmluZyBwb2ludCB0byB0aGUgZW5kIG9mIHRoZQorCSAqIHByZXZpb3VzIHN0cmluZy4KKwkgKi8KKwlpZiAobmV4dF9mcmVlIDwgTUFYX1NUUlRBQikgeworCSAgICByZXN1bHQgPSAoc3RyaW5nYnVmICsgbmV4dF9mcmVlIC0gMSk7CisJfQorICAgIH0gZWxzZSBpZiAobmV4dF9mcmVlICsgbGVuIDwgTUFYX1NUUlRBQikgeworCXN0cmNweSgmc3RyaW5nYnVmW25leHRfZnJlZV0sIHN0cmluZyk7CisJREVCVUcoNywgKCJTYXZlZCBzdHJpbmcgJXMiLCBfbmNfdmlzYnVmKHN0cmluZykpKTsKKwlERUJVRyg3LCAoImF0IGxvY2F0aW9uICVkIiwgKGludCkgbmV4dF9mcmVlKSk7CisJbmV4dF9mcmVlICs9IGxlbjsKKwlyZXN1bHQgPSAoc3RyaW5nYnVmICsgb2xkX25leHRfZnJlZSk7CisgICAgfSBlbHNlIHsKKwlfbmNfd2FybmluZygiVG9vIG11Y2ggZGF0YSwgc29tZSBpcyBsb3N0Iik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfd3JhcF9lbnRyeShFTlRSWSAqIGNvbnN0IGVwLCBib29sIGNvcHlfc3RyaW5ncykKKy8qIGNvcHkgdGhlIHN0cmluZyBwYXJ0cyB0byBhbGxvY2F0ZWQgc3RvcmFnZSwgcHJlc2VydmluZyBwb2ludGVycyB0byBpdCAqLworeworICAgIGludCBvZmZzZXRzW01BWF9FTlRSWV9TSVpFIC8gc2l6ZW9mKHNob3J0KV07CisgICAgaW50IHVzZW9mZnNldHNbTUFYX1VTRVNdOworICAgIHVuc2lnbmVkIGksIG47CisgICAgdW5zaWduZWQgbnVzZXMgPSBlcC0+bnVzZXM7CisgICAgVEVSTVRZUEUgKnRwID0gJihlcC0+dHRlcm0pOworCisgICAgaWYgKGNvcHlfc3RyaW5ncykgeworCW5leHRfZnJlZSA9IDA7CQkvKiBjbGVhciBzdGF0aWMgc3RvcmFnZSAqLworCisJLyogY29weSB0ZXJtX25hbWVzLCBTdHJpbmdzLCB1c2VzICovCisJdHAtPnRlcm1fbmFtZXMgPSBfbmNfc2F2ZV9zdHIodHAtPnRlcm1fbmFtZXMpOworCWZvcl9lYWNoX3N0cmluZyhpLCB0cCkgeworCSAgICBpZiAodHAtPlN0cmluZ3NbaV0gIT0gQUJTRU5UX1NUUklORyAmJgorCQl0cC0+U3RyaW5nc1tpXSAhPSBDQU5DRUxMRURfU1RSSU5HKSB7CisJCXRwLT5TdHJpbmdzW2ldID0gX25jX3NhdmVfc3RyKHRwLT5TdHJpbmdzW2ldKTsKKwkgICAgfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBudXNlczsgaSsrKSB7CisJICAgIGlmIChlcC0+dXNlc1tpXS5uYW1lID09IDApIHsKKwkJZXAtPnVzZXNbaV0ubmFtZSA9IF9uY19zYXZlX3N0cihlcC0+dXNlc1tpXS5uYW1lKTsKKwkgICAgfQorCX0KKworCWZyZWUodHAtPnN0cl90YWJsZSk7CisgICAgfQorCisgICAgYXNzZXJ0KHRwLT50ZXJtX25hbWVzID49IHN0cmluZ2J1Zik7CisgICAgbiA9ICh1bnNpZ25lZCkgKHRwLT50ZXJtX25hbWVzIC0gc3RyaW5nYnVmKTsKKyAgICBmb3JfZWFjaF9zdHJpbmcoaSwgJihlcC0+dHRlcm0pKSB7CisJaWYgKGkgPCBTSVpFT0Yob2Zmc2V0cykpIHsKKwkgICAgaWYgKHRwLT5TdHJpbmdzW2ldID09IEFCU0VOVF9TVFJJTkcpIHsKKwkJb2Zmc2V0c1tpXSA9IEFCU0VOVF9PRkZTRVQ7CisJICAgIH0gZWxzZSBpZiAodHAtPlN0cmluZ3NbaV0gPT0gQ0FOQ0VMTEVEX1NUUklORykgeworCQlvZmZzZXRzW2ldID0gQ0FOQ0VMTEVEX09GRlNFVDsKKwkgICAgfSBlbHNlIHsKKwkJb2Zmc2V0c1tpXSA9IHRwLT5TdHJpbmdzW2ldIC0gc3RyaW5nYnVmOworCSAgICB9CisJfQorICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBudXNlczsgaSsrKSB7CisJaWYgKGVwLT51c2VzW2ldLm5hbWUgPT0gMCkKKwkgICAgdXNlb2Zmc2V0c1tpXSA9IEFCU0VOVF9PRkZTRVQ7CisJZWxzZQorCSAgICB1c2VvZmZzZXRzW2ldID0gZXAtPnVzZXNbaV0ubmFtZSAtIHN0cmluZ2J1ZjsKKyAgICB9CisKKyAgICBpZiAoKHRwLT5zdHJfdGFibGUgPSB0eXBlTWFsbG9jKGNoYXIsIG5leHRfZnJlZSkpID09IChjaGFyICopIDApCisJICBfbmNfZXJyX2Fib3J0KE1TR19OT19NRU1PUlkpOworICAgICh2b2lkKSBtZW1jcHkodHAtPnN0cl90YWJsZSwgc3RyaW5nYnVmLCBuZXh0X2ZyZWUpOworCisgICAgdHAtPnRlcm1fbmFtZXMgPSB0cC0+c3RyX3RhYmxlICsgbjsKKyAgICBmb3JfZWFjaF9zdHJpbmcoaSwgJihlcC0+dHRlcm0pKSB7CisJaWYgKGkgPCBTSVpFT0Yob2Zmc2V0cykpIHsKKwkgICAgaWYgKG9mZnNldHNbaV0gPT0gQUJTRU5UX09GRlNFVCkgeworCQl0cC0+U3RyaW5nc1tpXSA9IEFCU0VOVF9TVFJJTkc7CisJICAgIH0gZWxzZSBpZiAob2Zmc2V0c1tpXSA9PSBDQU5DRUxMRURfT0ZGU0VUKSB7CisJCXRwLT5TdHJpbmdzW2ldID0gQ0FOQ0VMTEVEX1NUUklORzsKKwkgICAgfSBlbHNlIHsKKwkJdHAtPlN0cmluZ3NbaV0gPSB0cC0+c3RyX3RhYmxlICsgb2Zmc2V0c1tpXTsKKwkgICAgfQorCX0KKyAgICB9CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIGlmICghY29weV9zdHJpbmdzKSB7CisJaWYgKChuID0gKHVuc2lnbmVkKSBOVU1fRVhUX05BTUVTKHRwKSkgIT0gMCkgeworCSAgICBpZiAobiA8IFNJWkVPRihvZmZzZXRzKSkgeworCQl1bnNpZ25lZCBsZW5ndGggPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCSAgICBsZW5ndGggKz0gc3RybGVuKHRwLT5leHRfTmFtZXNbaV0pICsgMTsKKwkJICAgIG9mZnNldHNbaV0gPSB0cC0+ZXh0X05hbWVzW2ldIC0gc3RyaW5nYnVmOworCQl9CisJCWlmICgodHAtPmV4dF9zdHJfdGFibGUgPSB0eXBlTWFsbG9jKGNoYXIsIGxlbmd0aCkpID09IDApCisJCSAgICAgIF9uY19lcnJfYWJvcnQoTVNHX05PX01FTU9SWSk7CisJCWZvciAoaSA9IDAsIGxlbmd0aCA9IDA7IGkgPCBuOyBpKyspIHsKKwkJICAgIHRwLT5leHRfTmFtZXNbaV0gPSB0cC0+ZXh0X3N0cl90YWJsZSArIGxlbmd0aDsKKwkJICAgIHN0cmNweSh0cC0+ZXh0X05hbWVzW2ldLCBzdHJpbmdidWYgKyBvZmZzZXRzW2ldKTsKKwkJICAgIGxlbmd0aCArPSBzdHJsZW4odHAtPmV4dF9OYW1lc1tpXSkgKyAxOworCQl9CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVzZXM7IGkrKykgeworCWlmICh1c2VvZmZzZXRzW2ldID09IEFCU0VOVF9PRkZTRVQpCisJICAgIGVwLT51c2VzW2ldLm5hbWUgPSAwOworCWVsc2UKKwkgICAgZXAtPnVzZXNbaV0ubmFtZSA9ICh0cC0+c3RyX3RhYmxlICsgdXNlb2Zmc2V0c1tpXSk7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX21lcmdlX2VudHJ5KFRFUk1UWVBFICpjb25zdCB0bywgVEVSTVRZUEUgKmNvbnN0IGZyb20pCisvKiBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBgZnJvbScgZW50cnkgaW50byBgdG8nIGVudHJ5ICovCit7CisgICAgdW5zaWduZWQgaTsKKworI2lmIE5DVVJTRVNfWE5BTUVTCisgICAgX25jX2FsaWduX3Rlcm10eXBlKHRvLCBmcm9tKTsKKyNlbmRpZgorICAgIGZvcl9lYWNoX2Jvb2xlYW4oaSwgZnJvbSkgeworCWlmICh0by0+Qm9vbGVhbnNbaV0gIT0gKGNoYXIpIENBTkNFTExFRF9CT09MRUFOKSB7CisJICAgIGludCBtZXJnZWJvb2wgPSBmcm9tLT5Cb29sZWFuc1tpXTsKKworCSAgICBpZiAobWVyZ2Vib29sID09IENBTkNFTExFRF9CT09MRUFOKQorCQl0by0+Qm9vbGVhbnNbaV0gPSBGQUxTRTsKKwkgICAgZWxzZSBpZiAobWVyZ2Vib29sID09IFRSVUUpCisJCXRvLT5Cb29sZWFuc1tpXSA9IChjaGFyKSBtZXJnZWJvb2w7CisJfQorICAgIH0KKworICAgIGZvcl9lYWNoX251bWJlcihpLCBmcm9tKSB7CisJaWYgKHRvLT5OdW1iZXJzW2ldICE9IENBTkNFTExFRF9OVU1FUklDKSB7CisJICAgIHNob3J0IG1lcmdlbnVtID0gZnJvbS0+TnVtYmVyc1tpXTsKKworCSAgICBpZiAobWVyZ2VudW0gPT0gQ0FOQ0VMTEVEX05VTUVSSUMpCisJCXRvLT5OdW1iZXJzW2ldID0gQUJTRU5UX05VTUVSSUM7CisJICAgIGVsc2UgaWYgKG1lcmdlbnVtICE9IEFCU0VOVF9OVU1FUklDKQorCQl0by0+TnVtYmVyc1tpXSA9IG1lcmdlbnVtOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdGU6IHRoZSBjb3BpZXMgb2Ygc3RyaW5ncyB0aGlzIG1ha2VzIGRvbid0IGhhdmUgdGhlaXIgb3duCisgICAgICogc3RvcmFnZS4gIFRoaXMgaXMgT0sgcmlnaHQgbm93LCBidXQgd2lsbCBiZSBhIHByb2JsZW0gaWYgd2UKKyAgICAgKiB3ZSBldmVyIHdhbnQgdG8gZGVhbGxvY2F0ZSBlbnRyaWVzLgorICAgICAqLworICAgIGZvcl9lYWNoX3N0cmluZyhpLCBmcm9tKSB7CisJaWYgKHRvLT5TdHJpbmdzW2ldICE9IENBTkNFTExFRF9TVFJJTkcpIHsKKwkgICAgY2hhciAqbWVyZ2VzdHJpbmcgPSBmcm9tLT5TdHJpbmdzW2ldOworCisJICAgIGlmIChtZXJnZXN0cmluZyA9PSBDQU5DRUxMRURfU1RSSU5HKQorCQl0by0+U3RyaW5nc1tpXSA9IEFCU0VOVF9TVFJJTkc7CisJICAgIGVsc2UgaWYgKG1lcmdlc3RyaW5nICE9IEFCU0VOVF9TVFJJTkcpCisJCXRvLT5TdHJpbmdzW2ldID0gbWVyZ2VzdHJpbmc7CisJfQorICAgIH0KK30KKworI2lmIE5PX0xFQUtTCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2FsbG9jX2VudHJ5X2xlYWtzKHZvaWQpCit7CisgICAgaWYgKHN0cmluZ2J1ZiAhPSAwKSB7CisJRnJlZUFuZE51bGwoc3RyaW5nYnVmKTsKKyAgICB9CisgICAgbmV4dF9mcmVlID0gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9hbGxvY190dHlwZS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9hbGxvY190dHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjA2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2FsbG9jX3R0eXBlLmMKQEAgLTAsMCArMSw1MDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk5LW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBhbGlnbl90dHlwZS5jIC0tICBmdW5jdGlvbnMgZm9yIFRFUk1UWVBFCisgKgorICoJX25jX2FsaWduX3Rlcm10eXBlKCkKKyAqCV9uY19jb3B5X3Rlcm10eXBlKCkKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKK01PRFVMRV9JRCgiJElkOiBhbGxvY190dHlwZS5jLHYgMS4xNyAyMDA4LzEwLzEyIDE2OjEyOjAwIHRvbSBFeHAgJCIpCisKKyNpZiBOQ1VSU0VTX1hOQU1FUworLyoKKyAqIE1lcmdlIHRoZSBhL2IgbGlzdHMgaW50byBkc3QuICBCb3RoIGEvYiBhcmUgc29ydGVkIChzZWUgX25jX2V4dGVuZF9uYW1lcygpKSwKKyAqIHNvIHdlIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IG9yZGVyIGRlcGVuZGVuY2llcy4KKyAqLworc3RhdGljIGludAorbWVyZ2VfbmFtZXMoY2hhciAqKmRzdCwgY2hhciAqKmEsIGludCBuYSwgY2hhciAqKmIsIGludCBuYikKK3sKKyAgICBpbnQgbiA9IDA7CisgICAgd2hpbGUgKG5hID4gMCAmJiBuYiA+IDApIHsKKwlpbnQgY21wID0gc3RyY21wKCphLCAqYik7CisJaWYgKGNtcCA8IDApIHsKKwkgICAgZHN0W24rK10gPSAqYSsrOworCSAgICBuYS0tOworCX0gZWxzZSBpZiAoY21wID4gMCkgeworCSAgICBkc3RbbisrXSA9ICpiKys7CisJICAgIG5iLS07CisJfSBlbHNlIGlmIChjbXAgPT0gMCkgeworCSAgICBkc3RbbisrXSA9ICphOworCSAgICBhKyssIGIrKzsKKwkgICAgbmEtLSwgbmItLTsKKwl9CisgICAgfQorICAgIHdoaWxlIChuYS0tID4gMCkgeworCWRzdFtuKytdID0gKmErKzsKKyAgICB9CisgICAgd2hpbGUgKG5iLS0gPiAwKSB7CisJZHN0W24rK10gPSAqYisrOworICAgIH0KKyAgICBERUJVRyg0LCAoIm1lcmdlX25hbWVzIC0+ICVkIiwgbikpOworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgYm9vbAorZmluZF9uYW1lKGNoYXIgKip0YWJsZSwgaW50IGxlbmd0aCwgY2hhciAqbmFtZSkKK3sKKyAgICB3aGlsZSAobGVuZ3RoLS0gPiAwKSB7CisJaWYgKCFzdHJjbXAoKnRhYmxlKyssIG5hbWUpKSB7CisJICAgIERFQlVHKDQsICgiZm91bmQgbmFtZSAnJXMnIiwgbmFtZSkpOworCSAgICByZXR1cm4gVFJVRTsKKwl9CisgICAgfQorICAgIERFQlVHKDQsICgiZGlkIG5vdCBmaW5kIG5hbWUgJyVzJyIsIG5hbWUpKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCityZWFsaWduX2RhdGEoVEVSTVRZUEUgKnRvLCBjaGFyICoqZXh0X05hbWVzLAorCSAgICAgaW50IGV4dF9Cb29sZWFucywKKwkgICAgIGludCBleHRfTnVtYmVycywKKwkgICAgIGludCBleHRfU3RyaW5ncykKK3sKKyAgICBpbnQgbiwgbSwgYmFzZTsKKyAgICBpbnQgbGltaXQgPSAodG8tPmV4dF9Cb29sZWFucyArIHRvLT5leHRfTnVtYmVycyArIHRvLT5leHRfU3RyaW5ncyk7CisKKyAgICBpZiAodG8tPmV4dF9Cb29sZWFucyAhPSBleHRfQm9vbGVhbnMpIHsKKwl0by0+bnVtX0Jvb2xlYW5zICs9IChleHRfQm9vbGVhbnMgLSB0by0+ZXh0X0Jvb2xlYW5zKTsKKwl0by0+Qm9vbGVhbnMgPSB0eXBlUmVhbGxvYyhOQ1VSU0VTX1NCT09MLCB0by0+bnVtX0Jvb2xlYW5zLCB0by0+Qm9vbGVhbnMpOworCWZvciAobiA9IHRvLT5leHRfQm9vbGVhbnMgLSAxLAorCSAgICAgbSA9IGV4dF9Cb29sZWFucyAtIDEsCisJICAgICBiYXNlID0gdG8tPm51bV9Cb29sZWFucyAtIChtICsgMSk7IG0gPj0gMDsgbS0tKSB7CisJICAgIGlmIChmaW5kX25hbWUodG8tPmV4dF9OYW1lcywgbGltaXQsIGV4dF9OYW1lc1ttXSkpIHsKKwkJdG8tPkJvb2xlYW5zW2Jhc2UgKyBtXSA9IHRvLT5Cb29sZWFuc1tiYXNlICsgbi0tXTsKKwkgICAgfSBlbHNlIHsKKwkJdG8tPkJvb2xlYW5zW2Jhc2UgKyBtXSA9IEZBTFNFOworCSAgICB9CisJfQorCXRvLT5leHRfQm9vbGVhbnMgPSBleHRfQm9vbGVhbnM7CisgICAgfQorICAgIGlmICh0by0+ZXh0X051bWJlcnMgIT0gZXh0X051bWJlcnMpIHsKKwl0by0+bnVtX051bWJlcnMgKz0gKGV4dF9OdW1iZXJzIC0gdG8tPmV4dF9OdW1iZXJzKTsKKwl0by0+TnVtYmVycyA9IHR5cGVSZWFsbG9jKHNob3J0LCB0by0+bnVtX051bWJlcnMsIHRvLT5OdW1iZXJzKTsKKwlmb3IgKG4gPSB0by0+ZXh0X051bWJlcnMgLSAxLAorCSAgICAgbSA9IGV4dF9OdW1iZXJzIC0gMSwKKwkgICAgIGJhc2UgPSB0by0+bnVtX051bWJlcnMgLSAobSArIDEpOyBtID49IDA7IG0tLSkgeworCSAgICBpZiAoZmluZF9uYW1lKHRvLT5leHRfTmFtZXMsIGxpbWl0LCBleHRfTmFtZXNbbSArIGV4dF9Cb29sZWFuc10pKSB7CisJCXRvLT5OdW1iZXJzW2Jhc2UgKyBtXSA9IHRvLT5OdW1iZXJzW2Jhc2UgKyBuLS1dOworCSAgICB9IGVsc2UgeworCQl0by0+TnVtYmVyc1tiYXNlICsgbV0gPSBBQlNFTlRfTlVNRVJJQzsKKwkgICAgfQorCX0KKwl0by0+ZXh0X051bWJlcnMgPSBleHRfTnVtYmVyczsKKyAgICB9CisgICAgaWYgKHRvLT5leHRfU3RyaW5ncyAhPSBleHRfU3RyaW5ncykgeworCXRvLT5udW1fU3RyaW5ncyArPSAoZXh0X1N0cmluZ3MgLSB0by0+ZXh0X1N0cmluZ3MpOworCXRvLT5TdHJpbmdzID0gdHlwZVJlYWxsb2MoY2hhciAqLCB0by0+bnVtX1N0cmluZ3MsIHRvLT5TdHJpbmdzKTsKKwlmb3IgKG4gPSB0by0+ZXh0X1N0cmluZ3MgLSAxLAorCSAgICAgbSA9IGV4dF9TdHJpbmdzIC0gMSwKKwkgICAgIGJhc2UgPSB0by0+bnVtX1N0cmluZ3MgLSAobSArIDEpOyBtID49IDA7IG0tLSkgeworCSAgICBpZiAoZmluZF9uYW1lKHRvLT5leHRfTmFtZXMsIGxpbWl0LCBleHRfTmFtZXNbbSArIGV4dF9Cb29sZWFucyArIGV4dF9OdW1iZXJzXSkpIHsKKwkJdG8tPlN0cmluZ3NbYmFzZSArIG1dID0gdG8tPlN0cmluZ3NbYmFzZSArIG4tLV07CisJICAgIH0gZWxzZSB7CisJCXRvLT5TdHJpbmdzW2Jhc2UgKyBtXSA9IEFCU0VOVF9TVFJJTkc7CisJICAgIH0KKwl9CisJdG8tPmV4dF9TdHJpbmdzID0gZXh0X1N0cmluZ3M7CisgICAgfQorfQorCisvKgorICogUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggaW4gZXh0X05hbWVzW10gZm9yIHRoZSBnaXZlbiB0b2tlbi10eXBlCisgKi8KK3N0YXRpYyBpbnQKK19uY19maXJzdF9leHRfbmFtZShURVJNVFlQRSAqdHAsIGludCB0b2tlbl90eXBlKQoreworICAgIGludCBmaXJzdDsKKworICAgIHN3aXRjaCAodG9rZW5fdHlwZSkgeworICAgIGNhc2UgQk9PTEVBTjoKKwlmaXJzdCA9IDA7CisJYnJlYWs7CisgICAgY2FzZSBOVU1CRVI6CisJZmlyc3QgPSB0cC0+ZXh0X0Jvb2xlYW5zOworCWJyZWFrOworICAgIGNhc2UgU1RSSU5HOgorCWZpcnN0ID0gdHAtPmV4dF9Cb29sZWFucyArIHRwLT5leHRfTnVtYmVyczsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCWZpcnN0ID0gMDsKKwlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZpcnN0OworfQorCisvKgorICogUmV0dXJucyB0aGUgbGFzdCBpbmRleCBpbiBleHRfTmFtZXNbXSBmb3IgdGhlIGdpdmVuIHRva2VuLXR5cGUKKyAqLworc3RhdGljIGludAorX25jX2xhc3RfZXh0X25hbWUoVEVSTVRZUEUgKnRwLCBpbnQgdG9rZW5fdHlwZSkKK3sKKyAgICBpbnQgbGFzdDsKKworICAgIHN3aXRjaCAodG9rZW5fdHlwZSkgeworICAgIGNhc2UgQk9PTEVBTjoKKwlsYXN0ID0gdHAtPmV4dF9Cb29sZWFuczsKKwlicmVhazsKKyAgICBjYXNlIE5VTUJFUjoKKwlsYXN0ID0gdHAtPmV4dF9Cb29sZWFucyArIHRwLT5leHRfTnVtYmVyczsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgU1RSSU5HOgorCWxhc3QgPSBOVU1fRVhUX05BTUVTKHRwKTsKKwlicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKKy8qCisgKiBMb29rdXAgYW4gZW50cnkgZnJvbSBleHRlbmRlZC1uYW1lcywgcmV0dXJuaW5nIC0xIGlmIG5vdCBmb3VuZAorICovCitzdGF0aWMgaW50CitfbmNfZmluZF9leHRfbmFtZShURVJNVFlQRSAqdHAsIGNoYXIgKm5hbWUsIGludCB0b2tlbl90eXBlKQoreworICAgIHVuc2lnbmVkIGo7CisgICAgdW5zaWduZWQgZmlyc3QgPSBfbmNfZmlyc3RfZXh0X25hbWUodHAsIHRva2VuX3R5cGUpOworICAgIHVuc2lnbmVkIGxhc3QgPSBfbmNfbGFzdF9leHRfbmFtZSh0cCwgdG9rZW5fdHlwZSk7CisKKyAgICBmb3IgKGogPSBmaXJzdDsgaiA8IGxhc3Q7IGorKykgeworCWlmICghc3RyY21wKG5hbWUsIHRwLT5leHRfTmFtZXNbal0pKSB7CisJICAgIHJldHVybiBqOworCX0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCisvKgorICogVHJhbnNsYXRlIGFuIGluZGV4IGludG8gZXh0X05hbWVzW10gaW50byB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbnRvIGRhdGEKKyAqIChlLmcuLCBCb29sZWFuc1tdKS4KKyAqLworc3RhdGljIGludAorX25jX2V4dF9kYXRhX2luZGV4KFRFUk1UWVBFICp0cCwgaW50IG4sIGludCB0b2tlbl90eXBlKQoreworICAgIHN3aXRjaCAodG9rZW5fdHlwZSkgeworICAgIGNhc2UgQk9PTEVBTjoKKwluICs9ICh0cC0+bnVtX0Jvb2xlYW5zIC0gdHAtPmV4dF9Cb29sZWFucyk7CisJYnJlYWs7CisgICAgY2FzZSBOVU1CRVI6CisJbiArPSAodHAtPm51bV9OdW1iZXJzIC0gdHAtPmV4dF9OdW1iZXJzKQorCSAgICAtICh0cC0+ZXh0X0Jvb2xlYW5zKTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgU1RSSU5HOgorCW4gKz0gKHRwLT5udW1fU3RyaW5ncyAtIHRwLT5leHRfU3RyaW5ncykKKwkgICAgLSAodHAtPmV4dF9Cb29sZWFucyArIHRwLT5leHRfTnVtYmVycyk7CisgICAgfQorICAgIHJldHVybiBuOworfQorCisvKgorICogQWRqdXN0IHRhYmxlcyB0byByZW1vdmUgKG5vdCBmcmVlKSBhbiBleHRlbmRlZCBuYW1lIGFuZCBpdHMgY29ycmVzcG9uZGluZworICogZGF0YS4KKyAqLworc3RhdGljIGJvb2wKK19uY19kZWxfZXh0X25hbWUoVEVSTVRZUEUgKnRwLCBjaGFyICpuYW1lLCBpbnQgdG9rZW5fdHlwZSkKK3sKKyAgICBpbnQgajsKKyAgICBpbnQgZmlyc3QsIGxhc3Q7CisKKyAgICBpZiAoKGZpcnN0ID0gX25jX2ZpbmRfZXh0X25hbWUodHAsIG5hbWUsIHRva2VuX3R5cGUpKSA+PSAwKSB7CisJbGFzdCA9IE5VTV9FWFRfTkFNRVModHApIC0gMTsKKwlmb3IgKGogPSBmaXJzdDsgaiA8IGxhc3Q7IGorKykgeworCSAgICB0cC0+ZXh0X05hbWVzW2pdID0gdHAtPmV4dF9OYW1lc1tqICsgMV07CisJfQorCWZpcnN0ID0gX25jX2V4dF9kYXRhX2luZGV4KHRwLCBmaXJzdCwgdG9rZW5fdHlwZSk7CisJc3dpdGNoICh0b2tlbl90eXBlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICBsYXN0ID0gdHAtPm51bV9Cb29sZWFucyAtIDE7CisJICAgIGZvciAoaiA9IGZpcnN0OyBqIDwgbGFzdDsgaisrKQorCQl0cC0+Qm9vbGVhbnNbal0gPSB0cC0+Qm9vbGVhbnNbaiArIDFdOworCSAgICB0cC0+ZXh0X0Jvb2xlYW5zIC09IDE7CisJICAgIHRwLT5udW1fQm9vbGVhbnMgLT0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSBOVU1CRVI6CisJICAgIGxhc3QgPSB0cC0+bnVtX051bWJlcnMgLSAxOworCSAgICBmb3IgKGogPSBmaXJzdDsgaiA8IGxhc3Q7IGorKykKKwkJdHAtPk51bWJlcnNbal0gPSB0cC0+TnVtYmVyc1tqICsgMV07CisJICAgIHRwLT5leHRfTnVtYmVycyAtPSAxOworCSAgICB0cC0+bnVtX051bWJlcnMgLT0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSBTVFJJTkc6CisJICAgIGxhc3QgPSB0cC0+bnVtX1N0cmluZ3MgLSAxOworCSAgICBmb3IgKGogPSBmaXJzdDsgaiA8IGxhc3Q7IGorKykKKwkJdHAtPlN0cmluZ3Nbal0gPSB0cC0+U3RyaW5nc1tqICsgMV07CisJICAgIHRwLT5leHRfU3RyaW5ncyAtPSAxOworCSAgICB0cC0+bnVtX1N0cmluZ3MgLT0gMTsKKwkgICAgYnJlYWs7CisJfQorCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBBZGp1c3QgdGFibGVzIHRvIGluc2VydCBhbiBleHRlbmRlZCBuYW1lLCBtYWtpbmcgcm9vbSBmb3IgbmV3IGRhdGEuICBUaGUKKyAqIGluZGV4IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBhcnJheSBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludAorX25jX2luc19leHRfbmFtZShURVJNVFlQRSAqdHAsIGNoYXIgKm5hbWUsIGludCB0b2tlbl90eXBlKQoreworICAgIHVuc2lnbmVkIGZpcnN0ID0gX25jX2ZpcnN0X2V4dF9uYW1lKHRwLCB0b2tlbl90eXBlKTsKKyAgICB1bnNpZ25lZCBsYXN0ID0gX25jX2xhc3RfZXh0X25hbWUodHAsIHRva2VuX3R5cGUpOworICAgIHVuc2lnbmVkIHRvdGFsID0gTlVNX0VYVF9OQU1FUyh0cCkgKyAxOworICAgIHVuc2lnbmVkIGosIGs7CisKKyAgICBmb3IgKGogPSBmaXJzdDsgaiA8IGxhc3Q7IGorKykgeworCWludCBjbXAgPSBzdHJjbXAobmFtZSwgdHAtPmV4dF9OYW1lc1tqXSk7CisJaWYgKGNtcCA9PSAwKQorCSAgICAvKiBhbHJlYWR5IHByZXNlbnQgKi8KKwkgICAgcmV0dXJuIF9uY19leHRfZGF0YV9pbmRleCh0cCwgKGludCkgaiwgdG9rZW5fdHlwZSk7CisJaWYgKGNtcCA8IDApIHsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIHRwLT5leHRfTmFtZXMgPSB0eXBlUmVhbGxvYyhjaGFyICosIHRvdGFsLCB0cC0+ZXh0X05hbWVzKTsKKyAgICBmb3IgKGsgPSB0b3RhbCAtIDE7IGsgPiBqOyBrLS0pCisJdHAtPmV4dF9OYW1lc1trXSA9IHRwLT5leHRfTmFtZXNbayAtIDFdOworICAgIHRwLT5leHRfTmFtZXNbal0gPSBuYW1lOworICAgIGogPSBfbmNfZXh0X2RhdGFfaW5kZXgodHAsIChpbnQpIGosIHRva2VuX3R5cGUpOworCisgICAgc3dpdGNoICh0b2tlbl90eXBlKSB7CisgICAgY2FzZSBCT09MRUFOOgorCXRwLT5leHRfQm9vbGVhbnMgKz0gMTsKKwl0cC0+bnVtX0Jvb2xlYW5zICs9IDE7CisJdHAtPkJvb2xlYW5zID0gdHlwZVJlYWxsb2MoTkNVUlNFU19TQk9PTCwgdHAtPm51bV9Cb29sZWFucywgdHAtPkJvb2xlYW5zKTsKKwlmb3IgKGsgPSB0cC0+bnVtX0Jvb2xlYW5zIC0gMTsgayA+IGo7IGstLSkKKwkgICAgdHAtPkJvb2xlYW5zW2tdID0gdHAtPkJvb2xlYW5zW2sgLSAxXTsKKwlicmVhazsKKyAgICBjYXNlIE5VTUJFUjoKKwl0cC0+ZXh0X051bWJlcnMgKz0gMTsKKwl0cC0+bnVtX051bWJlcnMgKz0gMTsKKwl0cC0+TnVtYmVycyA9IHR5cGVSZWFsbG9jKHNob3J0LCB0cC0+bnVtX051bWJlcnMsIHRwLT5OdW1iZXJzKTsKKwlmb3IgKGsgPSB0cC0+bnVtX051bWJlcnMgLSAxOyBrID4gajsgay0tKQorCSAgICB0cC0+TnVtYmVyc1trXSA9IHRwLT5OdW1iZXJzW2sgLSAxXTsKKwlicmVhazsKKyAgICBjYXNlIFNUUklORzoKKwl0cC0+ZXh0X1N0cmluZ3MgKz0gMTsKKwl0cC0+bnVtX1N0cmluZ3MgKz0gMTsKKwl0cC0+U3RyaW5ncyA9IHR5cGVSZWFsbG9jKGNoYXIgKiwgdHAtPm51bV9TdHJpbmdzLCB0cC0+U3RyaW5ncyk7CisJZm9yIChrID0gdHAtPm51bV9TdHJpbmdzIC0gMTsgayA+IGo7IGstLSkKKwkgICAgdHAtPlN0cmluZ3Nba10gPSB0cC0+U3RyaW5nc1trIC0gMV07CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBqOworfQorCisvKgorICogTG9vayBmb3Igc3RyaW5ncyB0aGF0IGFyZSBtYXJrZWQgY2FuY2VsbGVkLCB3aGljaCBoYXBwZW4gdG8gYmUgdGhlIHNhbWUgbmFtZQorICogYXMgYSBib29sZWFuIG9yIG51bWJlci4gIFdlJ2xsIGdldCB0aGlzIGFzIGEgc3BlY2lhbCBjYXNlIHdoZW4gd2UgZ2V0IGEKKyAqIGNhbmNlbGxhdGlvbiBvZiBhIG5hbWUgdGhhdCBpcyBpbmhlcml0ZWQgZnJvbSBhbm90aGVyIGVudHJ5LgorICovCitzdGF0aWMgdm9pZAorYWRqdXN0X2NhbmNlbHMoVEVSTVRZUEUgKnRvLCBURVJNVFlQRSAqZnJvbSkKK3sKKyAgICBpbnQgZmlyc3QgPSB0by0+ZXh0X0Jvb2xlYW5zICsgdG8tPmV4dF9OdW1iZXJzOworICAgIGludCBsYXN0ID0gZmlyc3QgKyB0by0+ZXh0X1N0cmluZ3M7CisgICAgaW50IGosIGs7CisKKyAgICBmb3IgKGogPSBmaXJzdDsgaiA8IGxhc3Q7KSB7CisJY2hhciAqbmFtZSA9IHRvLT5leHRfTmFtZXNbal07CisJdW5zaWduZWQgal9zdHIgPSB0by0+bnVtX1N0cmluZ3MgLSBmaXJzdCAtIHRvLT5leHRfU3RyaW5nczsKKworCWlmICh0by0+U3RyaW5nc1tqICsgal9zdHJdID09IENBTkNFTExFRF9TVFJJTkcpIHsKKwkgICAgaWYgKChrID0gX25jX2ZpbmRfZXh0X25hbWUoZnJvbSwgdG8tPmV4dF9OYW1lc1tqXSwgQk9PTEVBTikpID49IDApIHsKKwkJaWYgKF9uY19kZWxfZXh0X25hbWUodG8sIG5hbWUsIFNUUklORykKKwkJICAgIHx8IF9uY19kZWxfZXh0X25hbWUodG8sIG5hbWUsIE5VTUJFUikpIHsKKwkJICAgIGsgPSBfbmNfaW5zX2V4dF9uYW1lKHRvLCBuYW1lLCBCT09MRUFOKTsKKwkJICAgIHRvLT5Cb29sZWFuc1trXSA9IEZBTFNFOworCQl9IGVsc2UgeworCQkgICAgaisrOworCQl9CisJICAgIH0gZWxzZSBpZiAoKGsgPSBfbmNfZmluZF9leHRfbmFtZShmcm9tLCB0by0+ZXh0X05hbWVzW2pdLAorCQkJCQkgICAgICBOVU1CRVIpKSA+PSAwKSB7CisJCWlmIChfbmNfZGVsX2V4dF9uYW1lKHRvLCBuYW1lLCBTVFJJTkcpCisJCSAgICB8fCBfbmNfZGVsX2V4dF9uYW1lKHRvLCBuYW1lLCBCT09MRUFOKSkgeworCQkgICAgayA9IF9uY19pbnNfZXh0X25hbWUodG8sIG5hbWUsIE5VTUJFUik7CisJCSAgICB0by0+TnVtYmVyc1trXSA9IENBTkNFTExFRF9OVU1FUklDOworCQl9IGVsc2UgeworCQkgICAgaisrOworCQl9CisJICAgIH0gZWxzZSBpZiAoKGsgPSBfbmNfZmluZF9leHRfbmFtZShmcm9tLCB0by0+ZXh0X05hbWVzW2pdLAorCQkJCQkgICAgICBTVFJJTkcpKSA+PSAwKSB7CisJCWlmIChfbmNfZGVsX2V4dF9uYW1lKHRvLCBuYW1lLCBOVU1CRVIpCisJCSAgICB8fCBfbmNfZGVsX2V4dF9uYW1lKHRvLCBuYW1lLCBCT09MRUFOKSkgeworCQkgICAgayA9IF9uY19pbnNfZXh0X25hbWUodG8sIG5hbWUsIFNUUklORyk7CisJCSAgICB0by0+U3RyaW5nc1trXSA9IENBTkNFTExFRF9TVFJJTkc7CisJCX0gZWxzZSB7CisJCSAgICBqKys7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJaisrOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaisrOworCX0KKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfYWxpZ25fdGVybXR5cGUoVEVSTVRZUEUgKnRvLCBURVJNVFlQRSAqZnJvbSkKK3sKKyAgICBpbnQgbmEgPSBOVU1fRVhUX05BTUVTKHRvKTsKKyAgICBpbnQgbmIgPSBOVU1fRVhUX05BTUVTKGZyb20pOworICAgIGludCBuOworICAgIGJvb2wgc2FtZTsKKyAgICBjaGFyICoqZXh0X05hbWVzOworICAgIGludCBleHRfQm9vbGVhbnMsIGV4dF9OdW1iZXJzLCBleHRfU3RyaW5nczsKKyAgICBib29sIHVzZWRfZXh0X05hbWVzID0gRkFMU0U7CisKKyAgICBERUJVRygyLCAoImFsaWduX3Rlcm10eXBlIHRvKCVkOiVzKSwgZnJvbSglZDolcykiLCBuYSwgdG8tPnRlcm1fbmFtZXMsCisJICAgICAgbmIsIGZyb20tPnRlcm1fbmFtZXMpKTsKKworICAgIGlmIChuYSAhPSAwIHx8IG5iICE9IDApIHsKKwlpZiAoKG5hID09IG5iKQkJLyogY2hlY2sgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCAqLworCSAgICAmJih0by0+ZXh0X0Jvb2xlYW5zID09IGZyb20tPmV4dF9Cb29sZWFucykKKwkgICAgJiYgKHRvLT5leHRfTnVtYmVycyA9PSBmcm9tLT5leHRfTnVtYmVycykKKwkgICAgJiYgKHRvLT5leHRfU3RyaW5ncyA9PSBmcm9tLT5leHRfU3RyaW5ncykpIHsKKwkgICAgZm9yIChuID0gMCwgc2FtZSA9IFRSVUU7IG4gPCBuYTsgbisrKSB7CisJCWlmIChzdHJjbXAodG8tPmV4dF9OYW1lc1tuXSwgZnJvbS0+ZXh0X05hbWVzW25dKSkgeworCQkgICAgc2FtZSA9IEZBTFNFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBpZiAoc2FtZSkKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIFRoaXMgaXMgd2hlcmUgd2UgcGF5IGZvciBoYXZpbmcgYSBzaW1wbGUgZXh0ZW5zaW9uIHJlcHJlc2VudGF0aW9uLiAKKwkgKiBBbGxvY2F0ZSBhIG5ldyBleHRfTmFtZXMgYXJyYXkgYW5kIG1lcmdlIHRoZSB0d28gZXh0X05hbWVzIGFycmF5cworCSAqIGludG8gaXQsIHVwZGF0aW5nIHRvJ3MgY291bnRzIGZvciBib29sZWFucywgZXRjLiAgRm9ydHVuYXRlbHkgd2UgZG8KKwkgKiB0aGlzIG9ubHkgZm9yIHRoZSB0ZXJtaW5mbyBjb21waWxlciAodGljKSBhbmQgY29tcGFyZXIgKGluZm9jbXApLgorCSAqLworCWV4dF9OYW1lcyA9IHR5cGVNYWxsb2MoY2hhciAqLCBuYSArIG5iKTsKKworCWlmICh0by0+ZXh0X1N0cmluZ3MgJiYgKGZyb20tPmV4dF9Cb29sZWFucyArIGZyb20tPmV4dF9OdW1iZXJzKSkKKwkgICAgYWRqdXN0X2NhbmNlbHModG8sIGZyb20pOworCisJaWYgKGZyb20tPmV4dF9TdHJpbmdzICYmICh0by0+ZXh0X0Jvb2xlYW5zICsgdG8tPmV4dF9OdW1iZXJzKSkKKwkgICAgYWRqdXN0X2NhbmNlbHMoZnJvbSwgdG8pOworCisJZXh0X0Jvb2xlYW5zID0gbWVyZ2VfbmFtZXMoZXh0X05hbWVzLAorCQkJCSAgIHRvLT5leHRfTmFtZXMsCisJCQkJICAgdG8tPmV4dF9Cb29sZWFucywKKwkJCQkgICBmcm9tLT5leHRfTmFtZXMsCisJCQkJICAgZnJvbS0+ZXh0X0Jvb2xlYW5zKTsKKwlleHRfTnVtYmVycyA9IG1lcmdlX25hbWVzKGV4dF9OYW1lcyArIGV4dF9Cb29sZWFucywKKwkJCQkgIHRvLT5leHRfTmFtZXMKKwkJCQkgICsgdG8tPmV4dF9Cb29sZWFucywKKwkJCQkgIHRvLT5leHRfTnVtYmVycywKKwkJCQkgIGZyb20tPmV4dF9OYW1lcworCQkJCSAgKyBmcm9tLT5leHRfQm9vbGVhbnMsCisJCQkJICBmcm9tLT5leHRfTnVtYmVycyk7CisJZXh0X1N0cmluZ3MgPSBtZXJnZV9uYW1lcyhleHRfTmFtZXMgKyBleHRfTnVtYmVycyArIGV4dF9Cb29sZWFucywKKwkJCQkgIHRvLT5leHRfTmFtZXMKKwkJCQkgICsgdG8tPmV4dF9Cb29sZWFucworCQkJCSAgKyB0by0+ZXh0X051bWJlcnMsCisJCQkJICB0by0+ZXh0X1N0cmluZ3MsCisJCQkJICBmcm9tLT5leHRfTmFtZXMKKwkJCQkgICsgZnJvbS0+ZXh0X0Jvb2xlYW5zCisJCQkJICArIGZyb20tPmV4dF9OdW1iZXJzLAorCQkJCSAgZnJvbS0+ZXh0X1N0cmluZ3MpOworCS8qCisJICogTm93IHdlIG11c3QgcmVhbGxvY2F0ZSB0aGUgQm9vbGVhbnMsIGV0Yy4sIHRvIGFsbG93IHRoZSBkYXRhIHRvIGJlCisJICogb3ZlcmxhaWQuCisJICovCisJaWYgKG5hICE9IChleHRfQm9vbGVhbnMgKyBleHRfTnVtYmVycyArIGV4dF9TdHJpbmdzKSkgeworCSAgICByZWFsaWduX2RhdGEodG8sIGV4dF9OYW1lcywgZXh0X0Jvb2xlYW5zLCBleHRfTnVtYmVycywgZXh0X1N0cmluZ3MpOworCSAgICBGcmVlSWZOZWVkZWQodG8tPmV4dF9OYW1lcyk7CisJICAgIHRvLT5leHRfTmFtZXMgPSBleHRfTmFtZXM7CisJICAgIERFQlVHKDIsICgicmVhbGlnbmVkICVkIGV4dGVuZGVkIG5hbWVzIGZvciAnJXMnICh0bykiLAorCQkgICAgICBOVU1fRVhUX05BTUVTKHRvKSwgdG8tPnRlcm1fbmFtZXMpKTsKKwkgICAgdXNlZF9leHRfTmFtZXMgPSBUUlVFOworCX0KKwlpZiAobmIgIT0gKGV4dF9Cb29sZWFucyArIGV4dF9OdW1iZXJzICsgZXh0X1N0cmluZ3MpKSB7CisJICAgIG5iID0gKGV4dF9Cb29sZWFucyArIGV4dF9OdW1iZXJzICsgZXh0X1N0cmluZ3MpOworCSAgICByZWFsaWduX2RhdGEoZnJvbSwgZXh0X05hbWVzLCBleHRfQm9vbGVhbnMsIGV4dF9OdW1iZXJzLCBleHRfU3RyaW5ncyk7CisJICAgIGZyb20tPmV4dF9OYW1lcyA9IHR5cGVSZWFsbG9jKGNoYXIgKiwgbmIsIGZyb20tPmV4dF9OYW1lcyk7CisJICAgIG1lbWNweShmcm9tLT5leHRfTmFtZXMsIGV4dF9OYW1lcywgc2l6ZW9mKGNoYXIgKikgKiBuYik7CisJICAgIERFQlVHKDIsICgicmVhbGlnbmVkICVkIGV4dGVuZGVkIG5hbWVzIGZvciAnJXMnIChmcm9tKSIsCisJCSAgICAgIE5VTV9FWFRfTkFNRVMoZnJvbSksIGZyb20tPnRlcm1fbmFtZXMpKTsKKwl9CisJaWYgKCF1c2VkX2V4dF9OYW1lcykKKwkgICAgZnJlZShleHRfTmFtZXMpOworICAgIH0KK30KKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2NvcHlfdGVybXR5cGUoVEVSTVRZUEUgKmRzdCwgVEVSTVRZUEUgKnNyYykKK3sKKyAgICB1bnNpZ25lZCBpOworCisgICAgKmRzdCA9ICpzcmM7CQkvKiAuLi50byBjb3B5IHRoZSBzaXplcyBhbmQgc3RyaW5nLXRhYmxlcyAqLworICAgIGRzdC0+Qm9vbGVhbnMgPSB0eXBlTWFsbG9jKE5DVVJTRVNfU0JPT0wsIE5VTV9CT09MRUFOUyhkc3QpKTsKKyAgICBkc3QtPk51bWJlcnMgPSB0eXBlTWFsbG9jKHNob3J0LCBOVU1fTlVNQkVSUyhkc3QpKTsKKyAgICBkc3QtPlN0cmluZ3MgPSB0eXBlTWFsbG9jKGNoYXIgKiwgTlVNX1NUUklOR1MoZHN0KSk7CisKKyAgICAvKiBGSVhNRTogdXNlIG1lbWNweSBmb3IgdGhlc2UgYW5kIHNpbWlsYXIgbG9vcHMgKi8KKyAgICBmb3JfZWFjaF9ib29sZWFuKGksIGRzdCkKKwlkc3QtPkJvb2xlYW5zW2ldID0gc3JjLT5Cb29sZWFuc1tpXTsKKyAgICBmb3JfZWFjaF9udW1iZXIoaSwgZHN0KQorCWRzdC0+TnVtYmVyc1tpXSA9IHNyYy0+TnVtYmVyc1tpXTsKKyAgICBmb3JfZWFjaF9zdHJpbmcoaSwgZHN0KQorCWRzdC0+U3RyaW5nc1tpXSA9IHNyYy0+U3RyaW5nc1tpXTsKKworICAgIC8qIEZJWE1FOiB3ZSBwcm9iYWJseSBzaG91bGQgYWxzbyBjb3B5IHN0cl90YWJsZSBhbmQgZXh0X3N0cl90YWJsZSwKKyAgICAgKiBidXQgdGljIGFuZCBpbmZvY21wIGFyZSBub3Qgd3JpdHRlbiB0byBleHBsb2l0IHRoYXQgKHlldCkuCisgICAgICovCisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIGlmICgoaSA9IE5VTV9FWFRfTkFNRVMoc3JjKSkgIT0gMCkgeworCWRzdC0+ZXh0X05hbWVzID0gdHlwZU1hbGxvYyhjaGFyICosIGkpOworCW1lbWNweShkc3QtPmV4dF9OYW1lcywgc3JjLT5leHRfTmFtZXMsIGkgKiBzaXplb2YoY2hhciAqKSk7CisgICAgfSBlbHNlIHsKKwlkc3QtPmV4dF9OYW1lcyA9IDA7CisgICAgfQorI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY2FwdG9pbmZvLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2NhcHRvaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzAwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2NhcHRvaW5mby5jCkBAIC0wLDAgKzEsODUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgljYXB0b2luZm8uYyAtLS0gY29udmVyc2lvbiBiZXR3ZWVuIHRlcm1jYXAgYW5kIHRlcm1pbmZvIGZvcm1hdHMKKyAqCisgKglUaGUgY2FwdG9pbmZvKCkgY29kZSB3YXMgc3dpcGVkIGZyb20gUm9zcyBSaWRnZSdzIG15dGluZm8gcGFja2FnZSwKKyAqCWFkYXB0ZWQgdG8gZml0IG5jdXJzZXMgYnkgRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+LgorICoKKyAqCVRoZXJlIGlzIGp1c3Qgb25lIGVudHJ5IHBvaW50OgorICoKKyAqCWNoYXIgKl9uY19jYXB0b2luZm8obiwgcywgcGFyYW1ldGVyaXplZCkKKyAqCisgKglDb252ZXJ0IHZhbHVlIHMgZm9yIHRlcm1jYXAgc3RyaW5nIGNhcGFiaWxpdHkgbmFtZWQgbiBpbnRvIHRlcm1pbmZvCisgKglmb3JtYXQuCisgKgorICoJVGhpcyBjb2RlIHJlY29nbml6ZXMgYWxsIHRoZSBzdGFuZGFyZCA0LjRCU0QgJS1lc2NhcGVzOgorICoKKyAqCSUlICAgICAgIG91dHB1dCBgJScKKyAqCSVkICAgICAgIG91dHB1dCB2YWx1ZSBhcyBpbiBwcmludGYgJWQKKyAqCSUyICAgICAgIG91dHB1dCB2YWx1ZSBhcyBpbiBwcmludGYgJTJkCisgKgklMyAgICAgICBvdXRwdXQgdmFsdWUgYXMgaW4gcHJpbnRmICUzZAorICoJJS4gICAgICAgb3V0cHV0IHZhbHVlIGFzIGluIHByaW50ZiAlYworICoJJSt4ICAgICAgYWRkIHggdG8gdmFsdWUsIHRoZW4gZG8gJS4KKyAqCSU+eHkgICAgIGlmIHZhbHVlID4geCB0aGVuIGFkZCB5LCBubyBvdXRwdXQKKyAqCSVyICAgICAgIHJldmVyc2Ugb3JkZXIgb2YgdHdvIHBhcmFtZXRlcnMsIG5vIG91dHB1dAorICoJJWkgICAgICAgaW5jcmVtZW50IGJ5IG9uZSwgbm8gb3V0cHV0CisgKgklbiAgICAgICBleGNsdXNpdmUtb3IgYWxsIHBhcmFtZXRlcnMgd2l0aCAwMTQwIChEYXRhbWVkaWEgMjUwMCkKKyAqCSVCICAgICAgIEJDRCAoMTYqKHZhbHVlLzEwKSkgKyAodmFsdWUlMTApLCBubyBvdXRwdXQKKyAqCSVEICAgICAgIFJldmVyc2UgY29kaW5nICh2YWx1ZSAtIDIqKHZhbHVlJTE2KSksIG5vIG91dHB1dCAoRGVsdGEgRGF0YSkuCisgKgorICoJQWxzbywgJTAyIGFuZCAlMDMgYXJlIGFjY2VwdGVkIGFzIHN5bm9ueW1zIGZvciAlMiBhbmQgJTMuCisgKgorICoJQmVzaWRlcyBhbGwgdGhlIHN0YW5kYXJkIHRlcm1jYXAgZXNjYXBlcywgdGhpcyB0cmFuc2xhdG9yIHVuZGVyc3RhbmRzCisgKgl0aGUgZm9sbG93aW5nIGV4dGVuZGVkIGVzY2FwZXM6CisgKgorICoJdXNlZCBieSBHTlUgRW1hY3MgdGVybWNhcCBsaWJyYXJpZXMKKyAqCQklYVsrKi0vPV1bY3BdeAlHTlUgYXJpdGhtZXRpYy4KKyAqCQklbQkJeG9yIHRoZSBmaXJzdCB0d28gcGFyYW1ldGVycyBieSAwMTc3CisgKgkJJWIJCWJhY2t1cCB0byBwcmV2aW91cyBwYXJhbWV0ZXIKKyAqCQklZgkJc2tpcCB0aGlzIHBhcmFtZXRlcgorICoKKyAqCXVzZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgV2F0ZXJsb28gKE1GQ0YpIHRlcm1jYXAgbGlicmFyaWVzCisgKgkJJS14CSBzdWJ0cmFjdCBwYXJhbWV0ZXIgRlJPTSBjaGFyIHggYW5kIG91dHB1dCBpdCBhcyBhIGNoYXIKKyAqCQklYXgJIGFkZCB0aGUgY2hhcmFjdGVyIHggdG8gcGFyYW1ldGVyCisgKgorICoJSWYgI2RlZmluZSBXQVRFUkxPTyBpcyBvbiwgYWxzbyBlbmFibGUgdGhlc2UgdHJhbnNsYXRpb25zOgorICoKKyAqCQklc3gJIHN1YnRyYWN0IHBhcmFtZXRlciBGUk9NIHRoZSBjaGFyYWN0ZXIgeAorICoKKyAqCUJ5IGRlZmF1bHQsIHRoaXMgV2F0ZXJsb28gdHJhbnNsYXRpb25zIGFyZSBub3QgY29tcGlsZWQgaW4sIGJlY2F1c2UKKyAqCXRoZSBXYXRlcmxvbyAlcyBjb25mbGljdHMgd2l0aCB0aGUgd2F5IHRlcm1pbmZvIHVzZXMgJXMgaW4gc3RyaW5ncyBmb3IKKyAqCWZ1bmN0aW9uIHByb2dyYW1taW5nLgorICoKKyAqCU5vdGUgdGhlIHR3byBkZWZpbml0aW9ucyBvZiAlYTogdGhlIEdOVSBkZWZpbml0aW9uIGlzIHRyYW5zbGF0ZWQgaWYgdGhlCisgKgljaGFyYWN0ZXJzIGFmdGVyIHRoZSAnYScgYXJlIHZhbGlkIGZvciBpdCwgb3RoZXJ3aXNlIHRoZSBVVyBkZWZpbml0aW9uCisgKglpcyB0cmFuc2xhdGVkLgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGNhcHRvaW5mby5jLHYgMS41MiAyMDA4LzA4LzE2IDE5OjI0OjUxIHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgTUFYX1BVU0hFRAkxNgkvKiBtYXggIyBhcmdzIHdlIGNhbiBwdXNoIG9udG8gdGhlIHN0YWNrICovCisKK3N0YXRpYyBpbnQgc3RhY2tbTUFYX1BVU0hFRF07CS8qIHRoZSBzdGFjayAqLworc3RhdGljIGludCBzdGFja3B0cjsJCS8qIHRoZSBuZXh0IGVtcHR5IHBsYWNlIG9uIHRoZSBzdGFjayAqLworc3RhdGljIGludCBvbnN0YWNrOwkJLyogdGhlIHRvcCBvZiBzdGFjayAqLworc3RhdGljIGludCBzZWVubTsJCS8qIHNlZW4gYSAlbSAqLworc3RhdGljIGludCBzZWVubjsJCS8qIHNlZW4gYSAlbiAqLworc3RhdGljIGludCBzZWVucjsJCS8qIHNlZW4gYSAlciAqLworc3RhdGljIGludCBwYXJhbTsJCS8qIGN1cnJlbnQgcGFyYW1ldGVyICovCitzdGF0aWMgY2hhciAqZHA7CQkvKiBwb2ludGVyIHRvIGVuZCBvZiB0aGUgY29udmVydGVkIHN0cmluZyAqLworCitzdGF0aWMgY2hhciAqbXlfc3RyaW5nOworc3RhdGljIHNpemVfdCBteV9sZW5ndGg7CisKK3N0YXRpYyBjaGFyICoKK2luaXRfc3RyaW5nKHZvaWQpCisvKiBpbml0aWFsaXplICdteV9zdHJpbmcnLCAnbXlfbGVuZ3RoJyAqLworeworICAgIGlmIChteV9zdHJpbmcgPT0gMCkKKwlteV9zdHJpbmcgPSB0eXBlTWFsbG9jKGNoYXIsIG15X2xlbmd0aCA9IDI1Nik7CisgICAgaWYgKG15X3N0cmluZyA9PSAwKQorCV9uY19lcnJfYWJvcnQoTVNHX05PX01FTU9SWSk7CisKKyAgICAqbXlfc3RyaW5nID0gJ1wwJzsKKyAgICByZXR1cm4gbXlfc3RyaW5nOworfQorCitzdGF0aWMgY2hhciAqCitzYXZlX3N0cmluZyhjaGFyICpkLCBjb25zdCBjaGFyICpjb25zdCBzKQoreworICAgIHNpemVfdCBoYXZlID0gKGQgLSBteV9zdHJpbmcpOworICAgIHNpemVfdCBuZWVkID0gaGF2ZSArIHN0cmxlbihzKSArIDI7CisgICAgaWYgKG5lZWQgPiBteV9sZW5ndGgpIHsKKwlteV9zdHJpbmcgPSAoY2hhciAqKSByZWFsbG9jKG15X3N0cmluZywgbXlfbGVuZ3RoID0gKG5lZWQgKyBuZWVkKSk7CisJaWYgKG15X3N0cmluZyA9PSAwKQorCSAgICBfbmNfZXJyX2Fib3J0KE1TR19OT19NRU1PUlkpOworCWQgPSBteV9zdHJpbmcgKyBoYXZlOworICAgIH0KKyAgICAodm9pZCkgc3RyY3B5KGQsIHMpOworICAgIHJldHVybiBkICsgc3RybGVuKGQpOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgY2hhciAqCitzYXZlX2NoYXIoY2hhciAqcywgaW50IGMpCit7CisgICAgc3RhdGljIGNoYXIgdGVtcFsyXTsKKyAgICB0ZW1wWzBdID0gKGNoYXIpIGM7CisgICAgcmV0dXJuIHNhdmVfc3RyaW5nKHMsIHRlbXApOworfQorCitzdGF0aWMgdm9pZAorcHVzaCh2b2lkKQorLyogcHVzaCBvbnN0YWNrIG9uIHRvIHRoZSBzdGFjayAqLworeworICAgIGlmIChzdGFja3B0ciA+PSBNQVhfUFVTSEVEKQorCV9uY193YXJuaW5nKCJzdHJpbmcgdG9vIGNvbXBsZXggdG8gY29udmVydCIpOworICAgIGVsc2UKKwlzdGFja1tzdGFja3B0cisrXSA9IG9uc3RhY2s7Cit9CisKK3N0YXRpYyB2b2lkCitwb3Aodm9pZCkKKy8qIHBvcCB0aGUgdG9wIG9mIHRoZSBzdGFjayBpbnRvIG9uc3RhY2sgKi8KK3sKKyAgICBpZiAoc3RhY2twdHIgPT0gMCkgeworCWlmIChvbnN0YWNrID09IDApCisJICAgIF9uY193YXJuaW5nKCJJJ20gY29uZnVzZWQiKTsKKwllbHNlCisJICAgIG9uc3RhY2sgPSAwOworICAgIH0gZWxzZQorCW9uc3RhY2sgPSBzdGFja1stLXN0YWNrcHRyXTsKKyAgICBwYXJhbSsrOworfQorCitzdGF0aWMgaW50CitjdnRjaGFyKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnNwKQorLyogY29udmVydCBhIGNoYXJhY3RlciB0byBhIHRlcm1pbmZvIHB1c2ggKi8KK3sKKyAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOworICAgIGludCBsZW47CisKKyAgICBzd2l0Y2ggKCpzcCkgeworICAgIGNhc2UgJ1xcJzoKKwlzd2l0Y2ggKCorK3NwKSB7CisJY2FzZSAnXCcnOgorCWNhc2UgJyQnOgorCWNhc2UgJ1xcJzoKKwljYXNlICclJzoKKwkgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSAoKnNwKTsKKwkgICAgbGVuID0gMjsKKwkgICAgYnJlYWs7CisJY2FzZSAnXDAnOgorCSAgICBjID0gJ1xcJzsKKwkgICAgbGVuID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnMCc6CisJY2FzZSAnMSc6CisJY2FzZSAnMic6CisJY2FzZSAnMyc6CisJICAgIGxlbiA9IDE7CisJICAgIHdoaWxlIChpc2RpZ2l0KFVDaGFyKCpzcCkpKSB7CisJCWMgPSA4ICogYyArICgqc3ArKyAtICcwJyk7CisJCWxlbisrOworCSAgICB9CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGMgPSAodW5zaWduZWQgY2hhcikgKCpzcCk7CisJICAgIGxlbiA9IDI7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKKyAgICBjYXNlICdeJzoKKwljID0gKCorK3NwICYgMHgxZik7CisJbGVuID0gMjsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCWMgPSAodW5zaWduZWQgY2hhcikgKCpzcCk7CisJbGVuID0gMTsKKyAgICB9CisgICAgaWYgKGlzZ3JhcGgoYykgJiYgYyAhPSAnLCcgJiYgYyAhPSAnXCcnICYmIGMgIT0gJ1xcJyAmJiBjICE9ICc6JykgeworCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlXCciKTsKKwlkcCA9IHNhdmVfY2hhcihkcCwgYyk7CisJZHAgPSBzYXZlX2NoYXIoZHAsICdcJycpOworICAgIH0gZWxzZSB7CisJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiV7Iik7CisJaWYgKGMgPiA5OSkKKwkgICAgZHAgPSBzYXZlX2NoYXIoZHAsIGMgLyAxMDAgKyAnMCcpOworCWlmIChjID4gOSkKKwkgICAgZHAgPSBzYXZlX2NoYXIoZHAsICgoaW50KSAoYyAvIDEwKSkgJSAxMCArICcwJyk7CisJZHAgPSBzYXZlX2NoYXIoZHAsIGMgJSAxMCArICcwJyk7CisJZHAgPSBzYXZlX2NoYXIoZHAsICd9Jyk7CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitnZXRwYXJtKGludCBwYXJtLCBpbnQgbikKKy8qIHB1c2ggbiBjb3BpZXMgb2YgcGFyYW0gb24gdGhlIHRlcm1pbmZvIHN0YWNrIGlmIG5vdCBhbHJlYWR5IHRoZXJlICovCit7CisgICAgaWYgKHNlZW5yKSB7CisJaWYgKHBhcm0gPT0gMSkKKwkgICAgcGFybSA9IDI7CisJZWxzZSBpZiAocGFybSA9PSAyKQorCSAgICBwYXJtID0gMTsKKyAgICB9CisgICAgaWYgKG9uc3RhY2sgPT0gcGFybSkgeworCWlmIChuID4gMSkgeworCSAgICBfbmNfd2FybmluZygic3RyaW5nIG1heSBub3QgYmUgb3B0aW1hbCIpOworCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJVBhIik7CisJICAgIHdoaWxlIChuLS0pIHsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiVnYSIpOworCSAgICB9CisJfQorCXJldHVybjsKKyAgICB9CisgICAgaWYgKG9uc3RhY2sgIT0gMCkKKwlwdXNoKCk7CisKKyAgICBvbnN0YWNrID0gcGFybTsKKworICAgIHdoaWxlIChuLS0pIHsKKwlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJXAiKTsKKwlkcCA9IHNhdmVfY2hhcihkcCwgJzAnICsgcGFybSk7CisgICAgfQorCisgICAgaWYgKHNlZW5uICYmIHBhcm0gPCAzKSB7CisJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiV7OTZ9JV4iKTsKKyAgICB9CisKKyAgICBpZiAoc2Vlbm0gJiYgcGFybSA8IDMpIHsKKwlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJXsxMjd9JV4iKTsKKyAgICB9Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgdGVybWNhcCBzdHJpbmcgdG8gdGVybWluZm8gZm9ybWF0LgorICogJ2NhcCcgaXMgdGhlIHJlbGV2YW50IHRlcm1pbmZvIGNhcGFiaWxpdHkgaW5kZXguCisgKiAncycgaXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgY2FwYWJpbGl0eS4KKyAqICdwYXJhbWV0ZXJpemVkJyB0ZWxscyB3aGF0IHR5cGUgb2YgdHJhbnNsYXRpb25zIHRvIGRvOgorICoJJSB0cmFuc2xhdGlvbnMgaWYgMQorICoJcGFkIHRyYW5zbGF0aW9ucyBpZiA+PTAKKyAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX2NhcHRvaW5mbyhjb25zdCBjaGFyICpjYXAsIGNvbnN0IGNoYXIgKnMsIGludCBjb25zdCBwYXJhbWV0ZXJpemVkKQoreworICAgIGNvbnN0IGNoYXIgKmNhcHN0YXJ0OworCisgICAgc3RhY2twdHIgPSAwOworICAgIG9uc3RhY2sgPSAwOworICAgIHNlZW5tID0gMDsKKyAgICBzZWVubiA9IDA7CisgICAgc2VlbnIgPSAwOworICAgIHBhcmFtID0gMTsKKworICAgIGRwID0gaW5pdF9zdHJpbmcoKTsKKworICAgIC8qIHNraXAgdGhlIGluaXRpYWwgcGFkZGluZyAoaWYgd2UgaGF2ZW4ndCBiZWVuIHRvbGQgbm90IHRvKSAqLworICAgIGNhcHN0YXJ0ID0gMDsKKyAgICBpZiAocyA9PSAwKQorCXMgPSAiIjsKKyAgICBpZiAocGFyYW1ldGVyaXplZCA+PSAwICYmIGlzZGlnaXQoVUNoYXIoKnMpKSkKKwlmb3IgKGNhcHN0YXJ0ID0gczs7IHMrKykKKwkgICAgaWYgKCEoaXNkaWdpdChVQ2hhcigqcykpIHx8ICpzID09ICcqJyB8fCAqcyA9PSAnLicpKQorCQlicmVhazsKKworICAgIHdoaWxlICgqcyAhPSAnXDAnKSB7CisJc3dpdGNoICgqcykgeworCWNhc2UgJyUnOgorCSAgICBzKys7CisJICAgIGlmIChwYXJhbWV0ZXJpemVkIDwgMSkgeworCQlkcCA9IHNhdmVfY2hhcihkcCwgJyUnKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgc3dpdGNoICgqcysrKSB7CisJICAgIGNhc2UgJyUnOgorCQlkcCA9IHNhdmVfY2hhcihkcCwgJyUnKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3InOgorCQlpZiAoc2VlbnIrKyA9PSAxKSB7CisJCSAgICBfbmNfd2FybmluZygic2F3ICUlciB0d2ljZSBpbiAlcyIsIGNhcCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgJ20nOgorCQlpZiAoc2Vlbm0rKyA9PSAxKSB7CisJCSAgICBfbmNfd2FybmluZygic2F3ICUlbSB0d2ljZSBpbiAlcyIsIGNhcCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgJ24nOgorCQlpZiAoc2Vlbm4rKyA9PSAxKSB7CisJCSAgICBfbmNfd2FybmluZygic2F3ICUlbiB0d2ljZSBpbiAlcyIsIGNhcCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgJ2knOgorCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJWkiKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJzYnOgorCSAgICBjYXNlICdCJzoKKwkJZ2V0cGFybShwYXJhbSwgMSk7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlezEwfSUvJXsxNn0lKiIpOworCQlnZXRwYXJtKHBhcmFtLCAxKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiV7MTB9JW0lKyIpOworCQlicmVhazsKKwkgICAgY2FzZSAnOCc6CisJICAgIGNhc2UgJ0QnOgorCQlnZXRwYXJtKHBhcmFtLCAyKTsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiV7Mn0lKiUtIik7CisJCWJyZWFrOworCSAgICBjYXNlICc+JzoKKwkJZ2V0cGFybShwYXJhbSwgMik7CisJCS8qICU/JXt4fSU+JXQle3l9JSslOyAqLworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJT8iKTsKKwkJcyArPSBjdnRjaGFyKHMpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJT4ldCIpOworCQlzICs9IGN2dGNoYXIocyk7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlKyU7Iik7CisJCWJyZWFrOworCSAgICBjYXNlICdhJzoKKwkJaWYgKCgqcyA9PSAnPScgfHwgKnMgPT0gJysnIHx8ICpzID09ICctJworCQkgICAgIHx8ICpzID09ICcqJyB8fCAqcyA9PSAnLycpCisJCSAgICAmJiAoc1sxXSA9PSAncCcgfHwgc1sxXSA9PSAnYycpCisJCSAgICAmJiBzWzJdICE9ICdcMCcpIHsKKwkJICAgIGludCBsOworCQkgICAgbCA9IDI7CisJCSAgICBpZiAoKnMgIT0gJz0nKQorCQkJZ2V0cGFybShwYXJhbSwgMSk7CisJCSAgICBpZiAoc1sxXSA9PSAncCcpIHsKKwkJCWdldHBhcm0ocGFyYW0gKyBzWzJdIC0gJ0AnLCAxKTsKKwkJCWlmIChwYXJhbSAhPSBvbnN0YWNrKSB7CisJCQkgICAgcG9wKCk7CisJCQkgICAgcGFyYW0tLTsKKwkJCX0KKwkJCWwrKzsKKwkJICAgIH0gZWxzZQorCQkJbCArPSBjdnRjaGFyKHMgKyAyKTsKKwkJICAgIHN3aXRjaCAoKnMpIHsKKwkJICAgIGNhc2UgJysnOgorCQkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUrIik7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJy0nOgorCQkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUtIik7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJyonOgorCQkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUqIik7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJy8nOgorCQkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiUvIik7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJz0nOgorCQkJaWYgKHNlZW5yKSB7CisJCQkgICAgaWYgKHBhcmFtID09IDEpCisJCQkJb25zdGFjayA9IDI7CisJCQkgICAgZWxzZSBpZiAocGFyYW0gPT0gMikKKwkJCQlvbnN0YWNrID0gMTsKKwkJCSAgICBlbHNlCisJCQkJb25zdGFjayA9IHBhcmFtOworCQkJfSBlbHNlCisJCQkgICAgb25zdGFjayA9IHBhcmFtOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBzICs9IGw7CisJCSAgICBicmVhazsKKwkJfQorCQlnZXRwYXJtKHBhcmFtLCAxKTsKKwkJcyArPSBjdnRjaGFyKHMpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJSsiKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJysnOgorCQlnZXRwYXJtKHBhcmFtLCAxKTsKKwkJcyArPSBjdnRjaGFyKHMpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJSslYyIpOworCQlwb3AoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3MnOgorI2lmZGVmIFdBVEVSTE9PCisJCXMgKz0gY3Z0Y2hhcihzKTsKKwkJZ2V0cGFybShwYXJhbSwgMSk7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlLSIpOworI2Vsc2UKKwkJZ2V0cGFybShwYXJhbSwgMSk7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlcyIpOworCQlwb3AoKTsKKyNlbmRpZiAvKiBXQVRFUkxPTyAqLworCQlicmVhazsKKwkgICAgY2FzZSAnLSc6CisJCXMgKz0gY3Z0Y2hhcihzKTsKKwkJZ2V0cGFybShwYXJhbSwgMSk7CisJCWRwID0gc2F2ZV9zdHJpbmcoZHAsICIlLSVjIik7CisJCXBvcCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnLic6CisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJWMiKTsKKwkJcG9wKCk7CisJCWJyZWFrOworCSAgICBjYXNlICcwJzoJCS8qIG5vdCBjbGVhciBhbnkgb2YgdGhlIGhpc3RvcmljYWwgdGVybWNhcHMgZGlkIHRoaXMgKi8KKwkJaWYgKCpzID09ICczJykKKwkJICAgIGdvdG8gc2VlMDM7CisJCWVsc2UgaWYgKCpzICE9ICcyJykKKwkJICAgIGdvdG8gaW52YWxpZDsKKwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAnMic6CisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJTJkIik7CisJCXBvcCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnMyc6CisJICAgICAgc2VlMDM6CisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJTNkIik7CisJCXBvcCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnZCc6CisJCWdldHBhcm0ocGFyYW0sIDEpOworCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJWQiKTsKKwkJcG9wKCk7CisJCWJyZWFrOworCSAgICBjYXNlICdmJzoKKwkJcGFyYW0rKzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2InOgorCQlwYXJhbS0tOworCQlicmVhazsKKwkgICAgY2FzZSAnXFwnOgorCQlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiJVxcIik7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCSAgICAgIGludmFsaWQ6CisJCWRwID0gc2F2ZV9jaGFyKGRwLCAnJScpOworCQlzLS07CisJCV9uY193YXJuaW5nKCJ1bmtub3duICUlIGNvZGUgJXMgKCUjeCkgaW4gJXMiLAorCQkJICAgIHVuY3RybCgoY2h0eXBlKSAqcyksIFVDaGFyKCpzKSwgY2FwKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisjaWZkZWYgUkVWSVNJQklMSVpFCisJY2FzZSAnXFwnOgorCSAgICBkcCA9IHNhdmVfY2hhcihkcCwgKnMrKyk7CisJICAgIGRwID0gc2F2ZV9jaGFyKGRwLCAqcysrKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnXG4nOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFxuIik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnXHQnOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFx0Iik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnXHInOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFxyIik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnXDIwMCc6CisJICAgIGRwID0gc2F2ZV9zdHJpbmcoZHAsICJcXDAiKTsKKwkgICAgcysrOworCSAgICBicmVhazsKKwljYXNlICdcZic6CisJICAgIGRwID0gc2F2ZV9zdHJpbmcoZHAsICJcXGYiKTsKKwkgICAgcysrOworCSAgICBicmVhazsKKwljYXNlICdcYic6CisJICAgIGRwID0gc2F2ZV9zdHJpbmcoZHAsICJcXGIiKTsKKwkgICAgcysrOworCSAgICBicmVhazsKKwljYXNlICcgJzoKKwkgICAgZHAgPSBzYXZlX3N0cmluZyhkcCwgIlxccyIpOworCSAgICBzKys7CisJICAgIGJyZWFrOworCWNhc2UgJ14nOgorCSAgICBkcCA9IHNhdmVfc3RyaW5nKGRwLCAiXFxeIik7CisJICAgIHMrKzsKKwkgICAgYnJlYWs7CisJY2FzZSAnOic6CisJICAgIGRwID0gc2F2ZV9zdHJpbmcoZHAsICJcXDoiKTsKKwkgICAgcysrOworCSAgICBicmVhazsKKwljYXNlICcsJzoKKwkgICAgZHAgPSBzYXZlX3N0cmluZyhkcCwgIlxcLCIpOworCSAgICBzKys7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGlmICgqcyA9PSAnXDAzMycpIHsKKwkJZHAgPSBzYXZlX3N0cmluZyhkcCwgIlxcRSIpOworCQlzKys7CisJICAgIH0gZWxzZSBpZiAoKnMgPiAwICYmICpzIDwgMzIpIHsKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICdeJyk7CisJCWRwID0gc2F2ZV9jaGFyKGRwLCAqcyArICdAJyk7CisJCXMrKzsKKwkgICAgfSBlbHNlIGlmICgqcyA8PSAwIHx8ICpzID49IDEyNykgeworCQlkcCA9IHNhdmVfY2hhcihkcCwgJ1xcJyk7CisJCWRwID0gc2F2ZV9jaGFyKGRwLCAoKCpzICYgMDMwMCkgPj4gNikgKyAnMCcpOworCQlkcCA9IHNhdmVfY2hhcihkcCwgKCgqcyAmIDAwNzApID4+IDMpICsgJzAnKTsKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICgqcyAmIDAwMDcpICsgJzAnKTsKKwkJcysrOworCSAgICB9IGVsc2UKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICpzKyspOworCSAgICBicmVhazsKKyNlbHNlCisJZGVmYXVsdDoKKwkgICAgZHAgPSBzYXZlX2NoYXIoZHAsICpzKyspOworCSAgICBicmVhazsKKyNlbmRpZgorCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdywgaWYgd2Ugc3RyaXBwZWQgb2ZmIHNvbWUgbGVhZGluZyBwYWRkaW5nLCBhZGQgaXQgYXQgdGhlIGVuZAorICAgICAqIG9mIHRoZSBzdHJpbmcgYXMgbWFuZGF0b3J5IHBhZGRpbmcuCisgICAgICovCisgICAgaWYgKGNhcHN0YXJ0KSB7CisJZHAgPSBzYXZlX3N0cmluZyhkcCwgIiQ8Iik7CisJZm9yIChzID0gY2Fwc3RhcnQ7OyBzKyspCisJICAgIGlmIChpc2RpZ2l0KFVDaGFyKCpzKSkgfHwgKnMgPT0gJyonIHx8ICpzID09ICcuJykKKwkJZHAgPSBzYXZlX2NoYXIoZHAsICpzKTsKKwkgICAgZWxzZQorCQlicmVhazsKKwlkcCA9IHNhdmVfc3RyaW5nKGRwLCAiLz4iKTsKKyAgICB9CisKKyAgICAodm9pZCkgc2F2ZV9jaGFyKGRwLCAnXDAnKTsKKyAgICByZXR1cm4gKG15X3N0cmluZyk7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYW4gZXhwcmVzc2lvbiB0aGF0IGNvcnJlc3BvbmRzIHRvICIlQiIgKEJDRCk6CisgKgkocGFyYW1ldGVyIC8gMTApICogMTYgKyAocGFyYW1ldGVyICUgMTApCisgKi8KK3N0YXRpYyBpbnQKK2JjZF9leHByZXNzaW9uKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICAvKiBsZWF2ZSB0aGlzIG5vbi1jb25zdCBmb3IgSFBVWCAqLworICAgIHN0YXRpYyBjaGFyIGZtdFtdID0gIiUlcCVjJSV7MTB9JSUvJSV7MTZ9JSUqJSVwJWMlJXsxMH0lJW0lJSsiOworICAgIGludCBsZW4gPSAwOworICAgIGNoYXIgY2gxLCBjaDI7CisKKyAgICBpZiAoc3NjYW5mKHN0ciwgZm10LCAmY2gxLCAmY2gyKSA9PSAyCisJJiYgaXNkaWdpdChVQ2hhcihjaDEpKQorCSYmIGlzZGlnaXQoVUNoYXIoY2gyKSkKKwkmJiAoY2gxID09IGNoMikpIHsKKwlsZW4gPSAyODsKKyNpZm5kZWYgTkRFQlVHCisJeworCSAgICBjaGFyIGJ1ZmZlcls4MF07CisJICAgIGludCB0c3Q7CisJICAgIHNwcmludGYoYnVmZmVyLCBmbXQsIGNoMSwgY2gyKTsKKwkgICAgdHN0ID0gc3RybGVuKGJ1ZmZlcikgLSAxOworCSAgICBhc3NlcnQobGVuID09IHRzdCk7CisJfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyBjaGFyICoKK3NhdmVfdGNfY2hhcihjaGFyICpidWZwdHIsIGludCBjMSkKK3sKKyAgICBjaGFyIHRlbXBbODBdOworCisgICAgaWYgKGlzN2JpdHMoYzEpICYmIGlzcHJpbnQoYzEpKSB7CisJaWYgKGMxID09ICc6JyB8fCBjMSA9PSAnXFwnKQorCSAgICBidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCAnXFwnKTsKKwlidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCBjMSk7CisgICAgfSBlbHNlIHsKKwlpZiAoYzEgPT0gKGMxICYgMHgxZikpCS8qIGlzY250cmwoKSByZXR1cm5zIFQgb24gMjU1ICovCisJICAgICh2b2lkKSBzdHJjcHkodGVtcCwgdW5jdHJsKChjaHR5cGUpIGMxKSk7CisJZWxzZQorCSAgICAodm9pZCkgc3ByaW50Zih0ZW1wLCAiXFwlMDNvIiwgYzEpOworCWJ1ZnB0ciA9IHNhdmVfc3RyaW5nKGJ1ZnB0ciwgdGVtcCk7CisgICAgfQorICAgIHJldHVybiBidWZwdHI7Cit9CisKK3N0YXRpYyBjaGFyICoKK3NhdmVfdGNfaW5lcXVhbGl0eShjaGFyICpidWZwdHIsIGludCBjMSwgaW50IGMyKQoreworICAgIGJ1ZnB0ciA9IHNhdmVfc3RyaW5nKGJ1ZnB0ciwgIiU+Iik7CisgICAgYnVmcHRyID0gc2F2ZV90Y19jaGFyKGJ1ZnB0ciwgYzEpOworICAgIGJ1ZnB0ciA9IHNhdmVfdGNfY2hhcihidWZwdHIsIGMyKTsKKyAgICByZXR1cm4gYnVmcHRyOworfQorCisvKgorICogSGVyZSBhcmUgdGhlIGNhcGFiaWxpdGllcyBpbmZvdG9jYXAgYXNzdW1lcyBpdCBjYW4gdHJhbnNsYXRlIHRvOgorICoKKyAqICAgICAlJSAgICAgICBvdXRwdXQgYCUnCisgKiAgICAgJWQgICAgICAgb3V0cHV0IHZhbHVlIGFzIGluIHByaW50ZiAlZAorICogICAgICUyICAgICAgIG91dHB1dCB2YWx1ZSBhcyBpbiBwcmludGYgJTJkCisgKiAgICAgJTMgICAgICAgb3V0cHV0IHZhbHVlIGFzIGluIHByaW50ZiAlM2QKKyAqICAgICAlLiAgICAgICBvdXRwdXQgdmFsdWUgYXMgaW4gcHJpbnRmICVjCisgKiAgICAgJStjICAgICAgYWRkIGNoYXJhY3RlciBjIHRvIHZhbHVlLCB0aGVuIGRvICUuCisgKiAgICAgJT54eSAgICAgaWYgdmFsdWUgPiB4IHRoZW4gYWRkIHksIG5vIG91dHB1dAorICogICAgICVyICAgICAgIHJldmVyc2Ugb3JkZXIgb2YgdHdvIHBhcmFtZXRlcnMsIG5vIG91dHB1dAorICogICAgICVpICAgICAgIGluY3JlbWVudCBieSBvbmUsIG5vIG91dHB1dAorICogICAgICVuICAgICAgIGV4Y2x1c2l2ZS1vciBhbGwgcGFyYW1ldGVycyB3aXRoIDAxNDAgKERhdGFtZWRpYSAyNTAwKQorICogICAgICVCICAgICAgIEJDRCAoMTYqKHZhbHVlLzEwKSkgKyAodmFsdWUlMTApLCBubyBvdXRwdXQKKyAqICAgICAlRCAgICAgICBSZXZlcnNlIGNvZGluZyAodmFsdWUgLSAyKih2YWx1ZSUxNikpLCBubyBvdXRwdXQgKERlbHRhIERhdGEpLgorICogICAgICVtICAgICAgIGV4Y2x1c2l2ZS1vciBhbGwgcGFyYW1ldGVycyB3aXRoIDAxNzcgKG5vdCBpbiA0LjRCU0QpCisgKi8KKworLyoKKyAqIENvbnZlcnQgYSB0ZXJtaW5mbyBzdHJpbmcgdG8gdGVybWNhcCBmb3JtYXQuICBQYXJhbWV0ZXJzIGFyZSBhcyBpbgorICogX25jX2NhcHRvaW5mbygpLgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfaW5mb3RvY2FwKGNvbnN0IGNoYXIgKmNhcCBHQ0NfVU5VU0VELCBjb25zdCBjaGFyICpzdHIsIGludCBjb25zdCBwYXJhbWV0ZXJpemVkKQoreworICAgIGludCBzZWVub25lID0gMCwgc2VlbnR3byA9IDAsIHNhd19tID0gMCwgc2F3X24gPSAwOworICAgIGNvbnN0IGNoYXIgKnBhZGRpbmc7CisgICAgY29uc3QgY2hhciAqdHJpbW1lZCA9IDA7CisgICAgY2hhciBjaDEgPSAwLCBjaDIgPSAwOworICAgIGNoYXIgKmJ1ZnB0ciA9IGluaXRfc3RyaW5nKCk7CisgICAgaW50IGxlbjsKKyAgICBib29sIHN5bnRheF9lcnJvciA9IEZBTFNFOworCisgICAgLyogd2UgbWF5IGhhdmUgdG8gbW92ZSBzb21lIHRyYWlsaW5nIG1hbmRhdG9yeSBwYWRkaW5nIHVwIGZyb250ICovCisgICAgcGFkZGluZyA9IHN0ciArIHN0cmxlbihzdHIpIC0gMTsKKyAgICBpZiAocGFkZGluZyA+IHN0ciAmJiAqcGFkZGluZyA9PSAnPicgJiYgKi0tcGFkZGluZyA9PSAnLycpIHsKKwktLXBhZGRpbmc7CisJd2hpbGUgKGlzZGlnaXQoVUNoYXIoKnBhZGRpbmcpKSB8fCAqcGFkZGluZyA9PSAnLicgfHwgKnBhZGRpbmcgPT0gJyonKQorCSAgICBwYWRkaW5nLS07CisJaWYgKHBhZGRpbmcgPiBzdHIgJiYgKnBhZGRpbmcgPT0gJzwnICYmICotLXBhZGRpbmcgPT0gJyQnKQorCSAgICB0cmltbWVkID0gcGFkZGluZzsKKwlwYWRkaW5nICs9IDI7CisKKwl3aGlsZSAoaXNkaWdpdChVQ2hhcigqcGFkZGluZykpIHx8ICpwYWRkaW5nID09ICcuJyB8fCAqcGFkZGluZyA9PSAnKicpCisJICAgIGJ1ZnB0ciA9IHNhdmVfY2hhcihidWZwdHIsICpwYWRkaW5nKyspOworICAgIH0KKworICAgIGZvciAoOyAqc3RyICYmIHN0ciAhPSB0cmltbWVkOyBzdHIrKykgeworCWludCBjMSwgYzI7CisJY2hhciAqY3AgPSAwOworCisJaWYgKHN0clswXSA9PSAnXFwnICYmIChzdHJbMV0gPT0gJ14nIHx8IHN0clsxXSA9PSAnLCcpKSB7CisJICAgIGJ1ZnB0ciA9IHNhdmVfY2hhcihidWZwdHIsICorK3N0cik7CisJfSBlbHNlIGlmIChzdHJbMF0gPT0gJyQnICYmIHN0clsxXSA9PSAnPCcpIHsJLyogZGlzY2FyZCBwYWRkaW5nICovCisJICAgIHN0ciArPSAyOworCSAgICB3aGlsZSAoaXNkaWdpdChVQ2hhcigqc3RyKSkKKwkJICAgfHwgKnN0ciA9PSAnLicKKwkJICAgfHwgKnN0ciA9PSAnKicKKwkJICAgfHwgKnN0ciA9PSAnLycKKwkJICAgfHwgKnN0ciA9PSAnPicpCisJCXN0cisrOworCSAgICAtLXN0cjsKKwl9IGVsc2UgaWYgKHN0clswXSA9PSAnJScgJiYgc3RyWzFdID09ICclJykgewkvKiBlc2NhcGVkICclJyAqLworCSAgICBidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlJSIpOworCSAgICArK3N0cjsKKwl9IGVsc2UgaWYgKCpzdHIgIT0gJyUnIHx8IChwYXJhbWV0ZXJpemVkIDwgMSkpIHsKKwkgICAgYnVmcHRyID0gc2F2ZV9jaGFyKGJ1ZnB0ciwgKnN0cik7CisJfSBlbHNlIGlmIChzc2NhbmYoc3RyLCAiJSU/JSV7JWR9JSU+JSV0JSV7JWR9JSUrJSU7IiwgJmMxLCAmYzIpID09IDIpIHsKKwkgICAgc3RyID0gc3RyY2hyKHN0ciwgJzsnKTsKKwkgICAgYnVmcHRyID0gc2F2ZV90Y19pbmVxdWFsaXR5KGJ1ZnB0ciwgYzEsIGMyKTsKKwl9IGVsc2UgaWYgKHNzY2FuZihzdHIsICIlJT8lJXslZH0lJT4lJXQlJSclYyclJSslJTsiLCAmYzEsICZjaDIpID09IDIpIHsKKwkgICAgc3RyID0gc3RyY2hyKHN0ciwgJzsnKTsKKwkgICAgYnVmcHRyID0gc2F2ZV90Y19pbmVxdWFsaXR5KGJ1ZnB0ciwgYzEsIGMyKTsKKwl9IGVsc2UgaWYgKHNzY2FuZihzdHIsICIlJT8lJSclYyclJT4lJXQlJXslZH0lJSslJTsiLCAmY2gxLCAmYzIpID09IDIpIHsKKwkgICAgc3RyID0gc3RyY2hyKHN0ciwgJzsnKTsKKwkgICAgYnVmcHRyID0gc2F2ZV90Y19pbmVxdWFsaXR5KGJ1ZnB0ciwgYzEsIGMyKTsKKwl9IGVsc2UgaWYgKHNzY2FuZihzdHIsICIlJT8lJSclYyclJT4lJXQlJSclYyclJSslJTsiLCAmY2gxLCAmY2gyKSA9PSAyKSB7CisJICAgIHN0ciA9IHN0cmNocihzdHIsICc7Jyk7CisJICAgIGJ1ZnB0ciA9IHNhdmVfdGNfaW5lcXVhbGl0eShidWZwdHIsIGMxLCBjMik7CisJfSBlbHNlIGlmICgobGVuID0gYmNkX2V4cHJlc3Npb24oc3RyKSkgIT0gMCkgeworCSAgICBzdHIgKz0gbGVuOworCSAgICBidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlQiIpOworCX0gZWxzZSBpZiAoKHNzY2FuZihzdHIsICIlJXslZH0lJSslJWMiLCAmYzEpID09IDEKKwkJICAgIHx8IHNzY2FuZihzdHIsICIlJSclYyclJSslJWMiLCAmY2gxKSA9PSAxKQorCQkgICAmJiAoY3AgPSBzdHJjaHIoc3RyLCAnKycpKSkgeworCSAgICBzdHIgPSBjcCArIDI7CisJICAgIGJ1ZnB0ciA9IHNhdmVfc3RyaW5nKGJ1ZnB0ciwgIiUrIik7CisKKwkgICAgaWYgKGNoMSkKKwkJYzEgPSBjaDE7CisJICAgIGJ1ZnB0ciA9IHNhdmVfdGNfY2hhcihidWZwdHIsIGMxKTsKKwl9CisJLyogRklYTUU6IHRoaXMgIndvcmtzIiBmb3IgJ2RlbHRhJyAqLworCWVsc2UgaWYgKHN0cm5jbXAoc3RyLCAiJXsyfSUqJS0iLCA4KSA9PSAwKSB7CisJICAgIHN0ciArPSA3OworCSAgICBidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlRCIpOworCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICIlezk2fSVeIiwgNykgPT0gMCkgeworCSAgICBzdHIgKz0gNjsKKwkgICAgaWYgKHNhd19tKysgPT0gMCkgeworCQlidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlbiIpOworCSAgICB9CisJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgIiV7MTI3fSVeIiwgOCkgPT0gMCkgeworCSAgICBzdHIgKz0gNzsKKwkgICAgaWYgKHNhd19uKysgPT0gMCkgeworCQlidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlbSIpOworCSAgICB9CisJfSBlbHNlIHsJCS8qIGNtLXN0eWxlIGZvcm1hdCBlbGVtZW50ICovCisJICAgIHN0cisrOworCSAgICBzd2l0Y2ggKCpzdHIpIHsKKwkgICAgY2FzZSAnJSc6CisJCWJ1ZnB0ciA9IHNhdmVfY2hhcihidWZwdHIsICclJyk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJzAnOgorCSAgICBjYXNlICcxJzoKKwkgICAgY2FzZSAnMic6CisJICAgIGNhc2UgJzMnOgorCSAgICBjYXNlICc0JzoKKwkgICAgY2FzZSAnNSc6CisJICAgIGNhc2UgJzYnOgorCSAgICBjYXNlICc3JzoKKwkgICAgY2FzZSAnOCc6CisJICAgIGNhc2UgJzknOgorCQlidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCAnJScpOworCQl3aGlsZSAoaXNkaWdpdChVQ2hhcigqc3RyKSkpCisJCSAgICBidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCAqc3RyKyspOworCQlpZiAoc3RyY2hyKCJkb3hYLiIsICpzdHIpKSB7CisJCSAgICBpZiAoKnN0ciAhPSAnZCcpCS8qIHRlcm1jYXAgZG9lc24ndCBoYXZlIG9jdGFsLCBoZXggKi8KKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2QnOgorCQlidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlZCIpOworCQlicmVhazsKKworCSAgICBjYXNlICdjJzoKKwkJYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJS4iKTsKKwkJYnJlYWs7CisKKwkJLyoKKwkJICogJXMgaXNuJ3QgaW4gdGVybWNhcCwgYnV0IGl0J3MgY29udmVuaWVudCB0byBwYXNzIGl0IHRocm91Z2gKKwkJICogc28gd2UgY2FuIHJlcHJlc2VudCB0aGluZ3MgbGlrZSB0ZXJtaW5mbyBwZmtleSBzdHJpbmdzIGluCisJCSAqIHRlcm1jYXAgbm90YXRpb24uCisJCSAqLworCSAgICBjYXNlICdzJzoKKwkJYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJXMiKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAncCc6CisJCXN0cisrOworCQlpZiAoKnN0ciA9PSAnMScpCisJCSAgICBzZWVub25lID0gMTsKKwkJZWxzZSBpZiAoKnN0ciA9PSAnMicpIHsKKwkJICAgIGlmICghc2Vlbm9uZSAmJiAhc2VlbnR3bykgeworCQkJYnVmcHRyID0gc2F2ZV9zdHJpbmcoYnVmcHRyLCAiJXIiKTsKKwkJCXNlZW50d28rKzsKKwkJICAgIH0KKwkJfSBlbHNlIGlmICgqc3RyID49ICczJykKKwkJICAgIHJldHVybiAoMCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2knOgorCQlidWZwdHIgPSBzYXZlX3N0cmluZyhidWZwdHIsICIlaSIpOworCQlicmVhazsKKworCSAgICBkZWZhdWx0OgorCQlidWZwdHIgPSBzYXZlX2NoYXIoYnVmcHRyLCAqc3RyKTsKKwkJc3ludGF4X2Vycm9yID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0JCQkvKiBlbmRzd2l0Y2ggKCpzdHIpICovCisJfQkJCS8qIGVuZGVsc2UgKCpzdHIgPT0gJyUnKSAqLworCisJLyoKKwkgKiAnc3RyJyBhbHdheXMgcG9pbnRzIHRvIHRoZSBlbmQgb2Ygd2hhdCB3YXMgc2Nhbm5lZCBpbiB0aGlzIHN0ZXAsCisJICogYnV0IHRoYXQgbWF5IG5vdCBiZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisJICovCisJYXNzZXJ0KHN0ciAhPSAwKTsKKwlpZiAoKnN0ciA9PSAnXDAnKQorCSAgICBicmVhazsKKworICAgIH0JCQkJLyogZW5kd2hpbGUgKCpzdHIpICovCisKKyAgICByZXR1cm4gKHN5bnRheF9lcnJvciA/IE5VTEwgOiBteV9zdHJpbmcpOworfQorCisjaWZkZWYgTUFJTgorCitpbnQgY3Vycl9saW5lOworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgYywgdGMgPSBGQUxTRTsKKworICAgIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYyIpKSAhPSBFT0YpCisJc3dpdGNoIChjKSB7CisJY2FzZSAnYyc6CisJICAgIHRjID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCisgICAgY3Vycl9saW5lID0gMDsKKyAgICBmb3IgKDs7KSB7CisJY2hhciBidWZbQlVGU0laXTsKKworCSsrY3Vycl9saW5lOworCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikgPT0gMCkKKwkgICAgYnJlYWs7CisJYnVmW3N0cmxlbihidWYpIC0gMV0gPSAnXDAnOworCV9uY19zZXRfc291cmNlKGJ1Zik7CisKKwlpZiAodGMpIHsKKwkgICAgY2hhciAqY3AgPSBfbmNfaW5mb3RvY2FwKCJ0byB0ZXJtY2FwIiwgYnVmLCAxKTsKKworCSAgICBpZiAoY3ApCisJCSh2b2lkKSBmcHV0cyhjcCwgc3Rkb3V0KTsKKwl9IGVsc2UKKwkgICAgKHZvaWQpIGZwdXRzKF9uY19jYXB0b2luZm8oInRvIHRlcm1pbmZvIiwgYnVmLCAxKSwgc3Rkb3V0KTsKKwkodm9pZCkgcHV0Y2hhcignXG4nKTsKKyAgICB9CisgICAgcmV0dXJuICgwKTsKK30KKyNlbmRpZiAvKiBNQUlOICovCisKKyNpZiBOT19MRUFLUworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19jYXB0b2luZm9fbGVha3Modm9pZCkKK3sKKyAgICBpZiAobXlfc3RyaW5nICE9IDApIHsKKwlGcmVlQW5kTnVsbChteV9zdHJpbmcpOworICAgIH0KKyAgICBteV9sZW5ndGggPSAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2NvbXBfZXJyb3IuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzM2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2NvbXBfZXJyb3IuYwpAQCAtMCwwICsxLDE1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJY29tcF9lcnJvci5jIC0tIEVycm9yIG1lc3NhZ2Ugcm91dGluZXMKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGNvbXBfZXJyb3IuYyx2IDEuMzEgMjAwNy8wNC8yMSAyMzozODozMiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVF9WQVIoYm9vbCkgX25jX3N1cHByZXNzX3dhcm5pbmdzID0gRkFMU0U7CitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBfbmNfY3Vycl9saW5lID0gMDsgLyogY3VycmVudCBsaW5lICMgaW4gaW5wdXQgKi8KK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIF9uY19jdXJyX2NvbCA9IDA7IC8qIGN1cnJlbnQgY29sdW1uICMgaW4gaW5wdXQgKi8KKworI2RlZmluZSBTb3VyY2VOYW1lCV9uY19nbG9iYWxzLmNvbXBfc291cmNlbmFtZQorI2RlZmluZSBUZXJtVHlwZQlfbmNfZ2xvYmFscy5jb21wX3Rlcm10eXBlCisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY19nZXRfc291cmNlKHZvaWQpCit7CisgICAgcmV0dXJuIFNvdXJjZU5hbWU7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2V0X3NvdXJjZShjb25zdCBjaGFyICpjb25zdCBuYW1lKQoreworICAgIFNvdXJjZU5hbWUgPSBuYW1lOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NldF90eXBlKGNvbnN0IGNoYXIgKmNvbnN0IG5hbWUpCit7CisgICAgaWYgKFRlcm1UeXBlID09IDApCisJVGVybVR5cGUgPSB0eXBlTWFsbG9jKGNoYXIsIE1BWF9OQU1FX1NJWkUgKyAxKTsKKyAgICBpZiAoVGVybVR5cGUgIT0gMCkgeworCVRlcm1UeXBlWzBdID0gJ1wwJzsKKwlpZiAobmFtZSkKKwkgICAgc3RybmNhdChUZXJtVHlwZSwgbmFtZSwgTUFYX05BTUVfU0laRSk7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2dldF90eXBlKGNoYXIgKm5hbWUpCit7CisjaWYgTk9fTEVBS1MKKyAgICBpZiAobmFtZSA9PSAwICYmIFRlcm1UeXBlICE9IDApIHsKKwlGcmVlQW5kTnVsbChUZXJtVHlwZSk7CisJcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGlmIChuYW1lICE9IDApCisJc3RyY3B5KG5hbWUsIFRlcm1UeXBlICE9IDAgPyBUZXJtVHlwZSA6ICIiKTsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKK3doZXJlX2lzX3Byb2JsZW0odm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlwiJXNcIiIsIFNvdXJjZU5hbWUgPyBTb3VyY2VOYW1lIDogIj8iKTsKKyAgICBpZiAoX25jX2N1cnJfbGluZSA+PSAwKQorCWZwcmludGYoc3RkZXJyLCAiLCBsaW5lICVkIiwgX25jX2N1cnJfbGluZSk7CisgICAgaWYgKF9uY19jdXJyX2NvbCA+PSAwKQorCWZwcmludGYoc3RkZXJyLCAiLCBjb2wgJWQiLCBfbmNfY3Vycl9jb2wpOworICAgIGlmIChUZXJtVHlwZSAhPSAwICYmIFRlcm1UeXBlWzBdICE9ICdcMCcpCisJZnByaW50ZihzdGRlcnIsICIsIHRlcm1pbmFsICclcyciLCBUZXJtVHlwZSk7CisgICAgZnB1dGMoJzonLCBzdGRlcnIpOworICAgIGZwdXRjKCcgJywgc3RkZXJyKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY193YXJuaW5nKGNvbnN0IGNoYXIgKmNvbnN0IGZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworCisgICAgaWYgKF9uY19zdXBwcmVzc193YXJuaW5ncykKKwlyZXR1cm47CisKKyAgICB3aGVyZV9pc19wcm9ibGVtKCk7CisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncCk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIHZhX2VuZChhcmdwKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19lcnJfYWJvcnQoY29uc3QgY2hhciAqY29uc3QgZm10LC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3A7CisKKyAgICB3aGVyZV9pc19wcm9ibGVtKCk7CisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncCk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIHZhX2VuZChhcmdwKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc3lzZXJyX2Fib3J0KGNvbnN0IGNoYXIgKmNvbnN0IGZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworCisgICAgd2hlcmVfaXNfcHJvYmxlbSgpOworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3ApOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICB2YV9lbmQoYXJncCk7CisKKyAgICAvKiBJZiB3ZSdyZSBkZWJ1Z2dpbmcsIHRyeSB0byBzaG93IHdoZXJlIHRoZSBwcm9ibGVtIG9jY3VycmVkIC0gdGhpcworICAgICAqIHdpbGwgZHVtcCBjb3JlLgorICAgICAqLworI2lmIGRlZmluZWQoVFJBQ0UpIHx8ICFkZWZpbmVkKE5ERUJVRykKKyAgICBhYm9ydCgpOworI2Vsc2UKKyAgICAvKiBEdW1waW5nIGNvcmUgaW4gcHJvZHVjdGlvbiBjb2RlIGlzIG5vdCBhIGdvb2QgaWRlYS4KKyAgICAgKi8KKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9leHBhbmQuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9leHBhbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTc5YTkyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9jb21wX2V4cGFuZC5jCkBAIC0wLDAgKzEsMTkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OCAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBjb21wX2V4cGFuZC5jLHYgMS4yMCAyMDA4LzA4LzE2IDE5OjI5OjQyIHRvbSBFeHAgJCIpCisKK3N0YXRpYyBpbnQKK3RyYWlsaW5nX3NwYWNlcyhjb25zdCBjaGFyICpzcmMpCit7CisgICAgd2hpbGUgKCpzcmMgPT0gJyAnKQorCXNyYysrOworICAgIHJldHVybiAqc3JjID09IDA7Cit9CisKKy8qIHRoaXMgZGVhbHMgd2l0aCBkaWZmZXJlbmNlcyBvdmVyIHdoZXRoZXIgMHg3ZiBhbmQgMHg4MC4uMHg5ZiBhcmUgY29udHJvbHMgKi8KKyNkZWZpbmUgUkVBTENUTChzKSAoVUNoYXIoKihzKSkgPCAxMjcgJiYgaXNjbnRybChVQ2hhcigqKHMpKSkpCisjZGVmaW5lIFJFQUxQUklOVChzKSAoVUNoYXIoKihzKSkgPCAxMjcgJiYgaXNwcmludChVQ2hhcigqKHMpKSkpCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY190aWNfZXhwYW5kKGNvbnN0IGNoYXIgKnNyY3AsIGJvb2wgdGljX2Zvcm1hdCwgaW50IG51bWJlcnMpCit7CisgICAgc3RhdGljIGNoYXIgKmJ1ZmZlcjsKKyAgICBzdGF0aWMgc2l6ZV90IGxlbmd0aDsKKworICAgIGludCBidWZwOworICAgIGNvbnN0IGNoYXIgKnN0ciA9IFZBTElEX1NUUklORyhzcmNwKSA/IHNyY3AgOiAiXDBcMCI7CisgICAgYm9vbCBpc2xvbmcgPSAoc3RybGVuKHN0cikgPiAzKTsKKyAgICBzaXplX3QgbmVlZCA9ICgyICsgc3RybGVuKHN0cikpICogNDsKKyAgICBpbnQgY2g7CisKKyNpZiBOT19MRUFLUworICAgIGlmIChzcmNwID09IDApIHsKKwlpZiAoYnVmZmVyICE9IDApIHsKKwkgICAgRnJlZUFuZE51bGwoYnVmZmVyKTsKKwkgICAgbGVuZ3RoID0gMDsKKwl9CisJcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGJ1ZmZlciA9PSAwIHx8IG5lZWQgPiBsZW5ndGgpIHsKKwlpZiAoKGJ1ZmZlciA9IHR5cGVSZWFsbG9jKGNoYXIsIGxlbmd0aCA9IG5lZWQsIGJ1ZmZlcikpID09IDApCisJICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYnVmcCA9IDA7CisgICAgd2hpbGUgKChjaCA9IFVDaGFyKCpzdHIpKSAhPSAwKSB7CisJaWYgKGNoID09ICclJyAmJiBSRUFMUFJJTlQoc3RyICsgMSkpIHsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAqc3RyKys7CisJICAgIC8qCisJICAgICAqIFRob3VnaCB0aGUgY2hhcmFjdGVyIGxpdGVyYWxzIGFyZSBtb3JlIGNvbXBhY3QsIG1vc3QKKwkgICAgICogdGVybWluYWwgZGVzY3JpcHRpb25zIHVzZSBudW1iZXJzIGFuZCBhcmUgbm90IGVhc3kKKwkgICAgICogdG8gcmVhZCBpbiBjaGFyYWN0ZXItbGl0ZXJhbCBmb3JtLgorCSAgICAgKi8KKwkgICAgc3dpdGNoIChudW1iZXJzKSB7CisJICAgIGNhc2UgLTE6CisJCWlmIChzdHJbMF0gPT0gU19RVU9URQorCQkgICAgJiYgc3RyWzFdICE9ICdcXCcKKwkJICAgICYmIFJFQUxQUklOVChzdHIgKyAxKQorCQkgICAgJiYgc3RyWzJdID09IFNfUVVPVEUpIHsKKwkJICAgIHNwcmludGYoYnVmZmVyICsgYnVmcCwgInslZH0iLCBzdHJbMV0pOworCQkgICAgYnVmcCArPSBzdHJsZW4oYnVmZmVyICsgYnVmcCk7CisJCSAgICBzdHIgKz0gMjsKKwkJfSBlbHNlIHsKKwkJICAgIGJ1ZmZlcltidWZwKytdID0gKnN0cjsKKwkJfQorCQlicmVhazsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhICIle251bWJlcn0iLCB0cnkgdG8gdHJhbnNsYXRlIGl0IGludG8KKwkJICogYSAiJSdjaGFyJyIgZm9ybSwgc2luY2UgdGhhdCB3aWxsIHJ1biBhIGxpdHRsZSBmYXN0ZXIKKwkJICogd2hlbiB3ZSdyZSBpbnRlcnByZXRpbmcgaXQuICBBbHNvLCBoYXZpbmcgb25lIGZvcm0KKwkJICogZm9yIHRoZSBjb25zdGFudCBtYWtlcyBpdCBzaW1wbGVyIHRvIGNvbXBhcmUgdGVybWluYWwKKwkJICogZGVzY3JpcHRpb25zLgorCQkgKi8KKwkgICAgY2FzZSAxOgorCQlpZiAoc3RyWzBdID09IExfQlJBQ0UKKwkJICAgICYmIGlzZGlnaXQoVUNoYXIoc3RyWzFdKSkpIHsKKwkJICAgIGNoYXIgKmRzdCA9IDA7CisJCSAgICBsb25nIHZhbHVlID0gc3RydG9sKHN0ciArIDEsICZkc3QsIDApOworCQkgICAgaWYgKGRzdCAhPSAwCisJCQkmJiAqZHN0ID09IFJfQlJBQ0UKKwkJCSYmIHZhbHVlIDwgMTI3CisJCQkmJiB2YWx1ZSAhPSAnXFwnCS8qIEZJWE1FICovCisJCQkmJiBpc3ByaW50KChpbnQpIHZhbHVlKSkgeworCQkJY2ggPSAoaW50KSB2YWx1ZTsKKwkJCWJ1ZmZlcltidWZwKytdID0gU19RVU9URTsKKwkJCWlmIChjaCA9PSAnXFwnCisJCQkgICAgfHwgY2ggPT0gU19RVU9URSkKKwkJCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJCQlidWZmZXJbYnVmcCsrXSA9IChjaGFyKSBjaDsKKwkJCWJ1ZmZlcltidWZwKytdID0gU19RVU9URTsKKwkJCXN0ciA9IGRzdDsKKwkJICAgIH0gZWxzZSB7CisJCQlidWZmZXJbYnVmcCsrXSA9ICpzdHI7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBidWZmZXJbYnVmcCsrXSA9ICpzdHI7CisJCX0KKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJ1ZmZlcltidWZwKytdID0gKnN0cjsKKwkJYnJlYWs7CisJICAgIH0KKwl9IGVsc2UgaWYgKGNoID09IDEyOCkgeworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJzAnOworCX0gZWxzZSBpZiAoY2ggPT0gJ1wwMzMnKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnRSc7CisJfSBlbHNlIGlmIChjaCA9PSAnXFwnICYmIHRpY19mb3JtYXQgJiYgKHN0ciA9PSBzcmNwIHx8IHN0clstMV0gIT0gJ14nKSkgeworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdcXCc7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwl9IGVsc2UgaWYgKGNoID09ICcgJyAmJiB0aWNfZm9ybWF0ICYmIChzdHIgPT0gc3JjcCB8fAorCQkJCQkgICAgICAgdHJhaWxpbmdfc3BhY2VzKHN0cikpKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAncyc7CisJfSBlbHNlIGlmICgoY2ggPT0gJywnIHx8IGNoID09ICc6JyB8fCBjaCA9PSAnXicpICYmIHRpY19mb3JtYXQpIHsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnXFwnOworCSAgICBidWZmZXJbYnVmcCsrXSA9IChjaGFyKSBjaDsKKwl9IGVsc2UgaWYgKFJFQUxQUklOVChzdHIpCisJCSAgICYmIChjaCAhPSAnLCcKKwkJICAgICAgICYmIGNoICE9ICc6JworCQkgICAgICAgJiYgIShjaCA9PSAnIScgJiYgIXRpY19mb3JtYXQpCisJCSAgICAgICAmJiBjaCAhPSAnXicpKQorCSAgICBidWZmZXJbYnVmcCsrXSA9IChjaGFyKSBjaDsKKyNpZiAwCQkJCS8qIEZJWE1FOiB0aGlzIHdvdWxkIGJlIG1vcmUgcmVhZGFibGUgKGluIGZhY3QgdGhlIHdob2xlICdpc2xvbmcnIGxvZ2ljIHNob3VsZCBiZSByZW1vdmVkKSAqLworCWVsc2UgaWYgKGNoID09ICdcYicpIHsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnXFwnOworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdiJzsKKwl9IGVsc2UgaWYgKGNoID09ICdcZicpIHsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnXFwnOworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdmJzsKKwl9IGVsc2UgaWYgKGNoID09ICdcdCcgJiYgaXNsb25nKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAndCc7CisJfQorI2VuZGlmCisJZWxzZSBpZiAoY2ggPT0gJ1xyJyAmJiAoaXNsb25nIHx8IChzdHJsZW4oc3JjcCkgPiAyICYmIHN0clsxXSA9PSAnXDAnKSkpIHsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnXFwnOworCSAgICBidWZmZXJbYnVmcCsrXSA9ICdyJzsKKwl9IGVsc2UgaWYgKGNoID09ICdcbicgJiYgaXNsb25nKSB7CisJICAgIGJ1ZmZlcltidWZwKytdID0gJ1xcJzsKKwkgICAgYnVmZmVyW2J1ZnArK10gPSAnbic7CisJfQorI2RlZmluZSBVbkN0bChjKSAoKGMpICsgJ0AnKQorCWVsc2UgaWYgKFJFQUxDVEwoc3RyKSAmJiBjaCAhPSAnXFwnCisJCSAmJiAoIWlzbG9uZyB8fCBpc2RpZ2l0KFVDaGFyKHN0clsxXSkpKSkgeworCSAgICAodm9pZCkgc3ByaW50ZigmYnVmZmVyW2J1ZnBdLCAiXiVjIiwgVW5DdGwoY2gpKTsKKwkgICAgYnVmcCArPSAyOworCX0gZWxzZSB7CisJICAgICh2b2lkKSBzcHJpbnRmKCZidWZmZXJbYnVmcF0sICJcXCUwM28iLCBjaCk7CisJICAgIGJ1ZnAgKz0gNDsKKwl9CisKKwlzdHIrKzsKKyAgICB9CisKKyAgICBidWZmZXJbYnVmcF0gPSAnXDAnOworICAgIHJldHVybiAoYnVmZmVyKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9oYXNoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2NvbXBfaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmJkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2NvbXBfaGFzaC5jCkBAIC0wLDAgKzEsMzcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgljb21wX2hhc2guYyAtLS0gUm91dGluZXMgdG8gZGVhbCB3aXRoIHRoZSBoYXNodGFibGUgb2YgY2FwYWJpbGl0eQorICoJCQluYW1lcy4KKyAqCisgKi8KKworI2RlZmluZSBVU0VfVEVSTUxJQiAxCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPGhhc2hzaXplLmg+CisKKyNpZmRlZiBNQUlOX1BST0dSQU0KKyNpbmNsdWRlIDxjdHlwZS5oPgorI3VuZGVmICBERUJVRworI2RlZmluZSBERUJVRyhsZXZlbCwgcGFyYW1zKQkvKm5vdGhpbmcgKi8KKyNlbmRpZgorCitNT0RVTEVfSUQoIiRJZDogY29tcF9oYXNoLmMsdiAxLjM2IDIwMDgvMDgvMTYgMTc6MDY6NTMgdG9tIEV4cCAkIikKKworc3RhdGljIGludCBoYXNoX2Z1bmN0aW9uKGNvbnN0IGNoYXIgKik7CisKKy8qCisgKglfbmNfbWFrZV9oYXNoX3RhYmxlKCkKKyAqCisgKglUYWtlcyB0aGUgZW50cmllcyBpbiB0YWJsZVtdIGFuZCBoYXNoZXMgdGhlbSBpbnRvIGhhc2hfdGFibGVbXQorICoJYnkgbmFtZS4gIFRoZXJlIGFyZSBDQVBUQUJTSVpFIGVudHJpZXMgaW4gdGFibGVbXSBhbmQgSEFTSFRBQlNJWkUKKyAqCXNsb3RzIGluIGhhc2hfdGFibGVbXS4KKyAqCisgKi8KKworI2lmZGVmIE1BSU5fUFJPR1JBTQorCisjdW5kZWYgTU9EVUxFX0lECisjZGVmaW5lIE1PRFVMRV9JRChpZCkJCS8qbm90aGluZyAqLworI2luY2x1ZGUgPHRpbmZvL2RvYWxsb2MuYz4KKworc3RhdGljIHZvaWQKK19uY19tYWtlX2hhc2hfdGFibGUoc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKnRhYmxlLAorCQkgICAgc2hvcnQgKmhhc2hfdGFibGUpCit7CisgICAgc2hvcnQgaTsKKyAgICBpbnQgaGFzaHZhbHVlOworICAgIGludCBjb2xsaXNpb25zID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBIQVNIVEFCU0laRTsgaSsrKSB7CisJaGFzaF90YWJsZVtpXSA9IC0xOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgQ0FQVEFCU0laRTsgaSsrKSB7CisJaGFzaHZhbHVlID0gaGFzaF9mdW5jdGlvbih0YWJsZVtpXS5udGVfbmFtZSk7CisKKwlpZiAoaGFzaF90YWJsZVtoYXNodmFsdWVdID49IDApCisJICAgIGNvbGxpc2lvbnMrKzsKKworCWlmIChoYXNoX3RhYmxlW2hhc2h2YWx1ZV0gIT0gMCkKKwkgICAgdGFibGVbaV0ubnRlX2xpbmsgPSBoYXNoX3RhYmxlW2hhc2h2YWx1ZV07CisJaGFzaF90YWJsZVtoYXNodmFsdWVdID0gaTsKKyAgICB9CisKKyAgICBERUJVRyg0LCAoIkhhc2ggdGFibGUgY29tcGxldGU6ICVkIGNvbGxpc2lvbnMgb3V0IG9mICVkIGVudHJpZXMiLAorCSAgICAgIGNvbGxpc2lvbnMsIENBUFRBQlNJWkUpKTsKK30KKyNlbmRpZgorCisvKgorICoJaW50IGhhc2hfZnVuY3Rpb24oc3RyaW5nKQorICoKKyAqCUNvbXB1dGVzIHRoZSBoYXNoaW5nIGZ1bmN0aW9uIG9uIHRoZSBnaXZlbiBzdHJpbmcuCisgKgorICoJVGhlIGN1cnJlbnQgaGFzaCBmdW5jdGlvbiBpcyB0aGUgc3VtIG9mIGVhY2ggY29uc2VjdHV0aXZlIHBhaXIKKyAqCW9mIGNoYXJhY3RlcnMsIHRha2VuIGFzIHR3by1ieXRlIGludGVnZXJzLCBtb2QgSEFTSFRBQlNJWkUuCisgKgorICovCisKK3N0YXRpYyBpbnQKK2hhc2hfZnVuY3Rpb24oY29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIGxvbmcgc3VtID0gMDsKKworICAgIERFQlVHKDksICgiaGFzaGluZyAlcyIsIHN0cmluZykpOworICAgIHdoaWxlICgqc3RyaW5nKSB7CisJc3VtICs9IChsb25nKSAoKnN0cmluZyArICgqKHN0cmluZyArIDEpIDw8IDgpKTsKKwlzdHJpbmcrKzsKKyAgICB9CisKKyAgICBERUJVRyg5LCAoInN1bSBpcyAlbGQiLCBzdW0pKTsKKyAgICByZXR1cm4gKGludCkgKHN1bSAlIEhBU0hUQUJTSVpFKTsKK30KKworLyoKKyAqCXN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICoKKyAqCWZpbmRfZW50cnkoc3RyaW5nKQorICoKKyAqCUZpbmRzIHRoZSBlbnRyeSBmb3IgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgaGFzaCB0YWJsZSBpZiBwcmVzZW50LgorICoJUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVudHJ5IGluIHRoZSB0YWJsZSBvciAwIGlmIG5vdCBmb3VuZC4KKyAqCisgKi8KKworI2lmbmRlZiBNQUlOX1BST0dSQU0KK05DVVJTRVNfRVhQT1JUKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICopCitfbmNfZmluZF9lbnRyeShjb25zdCBjaGFyICpzdHJpbmcsCisJICAgICAgIGNvbnN0IHNob3J0ICpoYXNoX3RhYmxlKQoreworICAgIGludCBoYXNodmFsdWU7CisgICAgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKnB0ciA9IDA7CisgICAgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKnJlYWxfdGFibGU7CisKKyAgICBoYXNodmFsdWUgPSBoYXNoX2Z1bmN0aW9uKHN0cmluZyk7CisKKyAgICBpZiAoaGFzaF90YWJsZVtoYXNodmFsdWVdID49IDApIHsKKwlyZWFsX3RhYmxlID0gX25jX2dldF90YWJsZShoYXNoX3RhYmxlICE9IF9uY19nZXRfaGFzaF90YWJsZShGQUxTRSkpOworCXB0ciA9IHJlYWxfdGFibGUgKyBoYXNoX3RhYmxlW2hhc2h2YWx1ZV07CisJd2hpbGUgKHN0cmNtcChwdHItPm50ZV9uYW1lLCBzdHJpbmcpICE9IDApIHsKKwkgICAgaWYgKHB0ci0+bnRlX2xpbmsgPCAwKQorCQlyZXR1cm4gMDsKKwkgICAgcHRyID0gcmVhbF90YWJsZSArIChwdHItPm50ZV9saW5rICsgaGFzaF90YWJsZVtIQVNIVEFCU0laRV0pOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gKHB0cik7Cit9CisKKy8qCisgKglzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqCisgKglmaW5kX3R5cGVfZW50cnkoc3RyaW5nLCB0eXBlLCB0YWJsZSkKKyAqCisgKglGaW5kcyB0aGUgZmlyc3QgZW50cnkgZm9yIHRoZSBnaXZlbiBuYW1lIHdpdGggdGhlIGdpdmVuIHR5cGUgaW4gdGhlCisgKglnaXZlbiB0YWJsZSBpZiBwcmVzZW50IChhcyBkaXN0aW5jdCBmcm9tIGZpbmRfZW50cnksIHdoaWNoIGZpbmRzIHRoZQorICoJdGhlIGxhc3QgZW50cnkgcmVnYXJkbGVzcyBvZiB0eXBlKS4gIFlvdSBjYW4gdXNlIHRoaXMgaWYgeW91IGRldGVjdAorICoJYSBuYW1lIGNsYXNoLiAgSXQncyBzbG93ZXIsIHRob3VnaC4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbnRyeQorICoJaW4gdGhlIHRhYmxlIG9yIDAgaWYgbm90IGZvdW5kLgorICovCisKK05DVVJTRVNfRVhQT1JUKHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICopCitfbmNfZmluZF90eXBlX2VudHJ5KGNvbnN0IGNoYXIgKnN0cmluZywKKwkJICAgIGludCB0eXBlLAorCQkgICAgY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKnRhYmxlKQoreworICAgIHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpwdHI7CisKKyAgICBmb3IgKHB0ciA9IHRhYmxlOyBwdHIgPCB0YWJsZSArIENBUFRBQlNJWkU7IHB0cisrKSB7CisJaWYgKHB0ci0+bnRlX3R5cGUgPT0gdHlwZSAmJiBzdHJjbXAoc3RyaW5nLCBwdHItPm50ZV9uYW1lKSA9PSAwKQorCSAgICByZXR1cm4gKHB0cik7CisgICAgfQorCisgICAgcmV0dXJuICgoc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKikgTlVMTCk7Cit9CisjZW5kaWYKKworI2lmZGVmIE1BSU5fUFJPR1JBTQorLyoKKyAqIFRoaXMgZmlsdGVyIHJlYWRzIGZyb20gc3RhbmRhcmQgaW5wdXQgYSBsaXN0IG9mIHRhYi1kZWxpbWl0ZWQgY29sdW1ucywKKyAqIChlLmcuLCBmcm9tIENhcHMuZmlsdGVyZWQpIGNvbXB1dGVzIHRoZSBoYXNoLXZhbHVlIG9mIGEgc3BlY2lmaWVkIGNvbHVtbiBhbmQKKyAqIHdyaXRlcyB0aGUgaGFzaGVkIHRhYmxlcyB0byBzdGFuZGFyZCBvdXRwdXQuCisgKgorICogQnkgY29tcGlsaW5nIHRoZSBoYXNoIHRhYmxlIGF0IGJ1aWxkIHRpbWUsIHdlJ3JlIGFibGUgdG8gbWFrZSB0aGUgZW50aXJlCisgKiBzZXQgb2YgdGVybWluZm8gYW5kIHRlcm1jYXAgdGFibGVzIHJlYWRvbmx5IChhbmQgYWxzbyBwcm92aWRlIHNvbWUgcnVudGltZQorICogcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQpLgorICovCisKKyNkZWZpbmUgTUFYX0NPTFVNTlMgQlVGU0laCS8qIHRoaXMgX2hhc18gdG8gYmUgd29yc3QtY2FzZSAqLworCitzdGF0aWMgY2hhciAqKgorcGFyc2VfY29sdW1ucyhjaGFyICpidWZmZXIpCit7CisgICAgc3RhdGljIGNoYXIgKipsaXN0OworCisgICAgaW50IGNvbCA9IDA7CisKKyAgICBpZiAobGlzdCA9PSAwICYmIChsaXN0ID0gdHlwZUNhbGxvYyhjaGFyICosIE1BWF9DT0xVTU5TKSkgPT0gMCkKKwkgIHJldHVybiAoMCk7CisKKyAgICBpZiAoKmJ1ZmZlciAhPSAnIycpIHsKKwl3aGlsZSAoKmJ1ZmZlciAhPSAnXDAnKSB7CisJICAgIGNoYXIgKnM7CisJICAgIGZvciAocyA9IGJ1ZmZlcjsgKCpzICE9ICdcMCcpICYmICFpc3NwYWNlKFVDaGFyKCpzKSk7IHMrKykKKwkJLypFTVBUWSAqLyA7CisJICAgIGlmIChzICE9IGJ1ZmZlcikgeworCQljaGFyIG1hcmsgPSAqczsKKwkJKnMgPSAnXDAnOworCQlpZiAoKHMgLSBidWZmZXIpID4gMQorCQkgICAgJiYgKCpidWZmZXIgPT0gJyInKQorCQkgICAgJiYgKHNbLTFdID09ICciJykpIHsJLyogc3RyaXAgdGhlIHF1b3RlcyAqLworCQkgICAgYXNzZXJ0KHMgPiBidWZmZXIgKyAxKTsKKwkJICAgIHNbLTFdID0gJ1wwJzsKKwkJICAgIGJ1ZmZlcisrOworCQl9CisJCWxpc3RbY29sXSA9IGJ1ZmZlcjsKKwkJY29sKys7CisJCWlmIChtYXJrID09ICdcMCcpCisJCSAgICBicmVhazsKKwkJd2hpbGUgKCorK3MgJiYgaXNzcGFjZShVQ2hhcigqcykpKQorCQkgICAgLypFTVBUWSAqLyA7CisJCWJ1ZmZlciA9IHM7CisJICAgIH0gZWxzZQorCQlicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiBjb2wgPyBsaXN0IDogMDsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSAqbmFtZV90YWJsZSA9IHR5cGVDYWxsb2Moc3RydWN0CisJCQkJCQkgICAgIG5hbWVfdGFibGVfZW50cnksIENBUFRBQlNJWkUpOworICAgIHNob3J0ICpoYXNoX3RhYmxlID0gdHlwZUNhbGxvYyhzaG9ydCwgSEFTSFRBQlNJWkUpOworICAgIGNvbnN0IGNoYXIgKnJvb3RfbmFtZSA9ICIiOworICAgIGludCBjb2x1bW4gPSAwOworICAgIGludCBiaWdzdHJpbmcgPSAwOworICAgIGludCBuOworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdHlwZW5hbWVzW10gPQorICAgIHsiQk9PTEVBTiIsICJOVU1CRVIiLCAiU1RSSU5HIn07CisKKyAgICBzaG9ydCBCb29sQ291bnQgPSAwOworICAgIHNob3J0IE51bUNvdW50ID0gMDsKKyAgICBzaG9ydCBTdHJDb3VudCA9IDA7CisKKyAgICAvKiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbHVtbi1udW1iZXIgKHN0YXJ0aW5nIHdpdGggMCkuCisgICAgICogVGhlIHNlY29uZCBpcyB0aGUgcm9vdCBuYW1lIG9mIHRoZSB0YWJsZXMgdG8gZ2VuZXJhdGUuCisgICAgICovCisgICAgaWYgKGFyZ2MgPD0gMworCXx8IChjb2x1bW4gPSBhdG9pKGFyZ3ZbMV0pKSA8PSAwCisJfHwgKGNvbHVtbiA+PSBNQVhfQ09MVU1OUykKKwl8fCAqKHJvb3RfbmFtZSA9IGFyZ3ZbMl0pID09IDAKKwl8fCAoYmlnc3RyaW5nID0gYXRvaShhcmd2WzNdKSkgPCAwCisJfHwgbmFtZV90YWJsZSA9PSAwCisJfHwgaGFzaF90YWJsZSA9PSAwKSB7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogbWFrZV9oYXNoIGNvbHVtbiByb290X25hbWUgYmlnc3RyaW5nXG4iKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZWFkIHRoZSB0YWJsZSBpbnRvIG91ciBhcnJheXMuCisgICAgICovCisgICAgZm9yIChuID0gMDsgKG4gPCBDQVBUQUJTSVpFKSAmJiBmZ2V0cyhidWZmZXIsIEJVRlNJWiwgc3RkaW4pOykgeworCWNoYXIgKipsaXN0LCAqbmxwID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisJaWYgKG5scCkKKwkgICAgKm5scCA9ICdcMCc7CisJbGlzdCA9IHBhcnNlX2NvbHVtbnMoYnVmZmVyKTsKKwlpZiAobGlzdCA9PSAwKQkJLyogYmxhbmsgb3IgY29tbWVudCAqLworCSAgICBjb250aW51ZTsKKwluYW1lX3RhYmxlW25dLm50ZV9saW5rID0gLTE7CS8qIGVuZC1vZi1oYXNoICovCisJbmFtZV90YWJsZVtuXS5udGVfbmFtZSA9IHN0cmR1cChsaXN0W2NvbHVtbl0pOworCWlmICghc3RyY21wKGxpc3RbMl0sICJib29sIikpIHsKKwkgICAgbmFtZV90YWJsZVtuXS5udGVfdHlwZSA9IEJPT0xFQU47CisJICAgIG5hbWVfdGFibGVbbl0ubnRlX2luZGV4ID0gQm9vbENvdW50Kys7CisJfSBlbHNlIGlmICghc3RyY21wKGxpc3RbMl0sICJudW0iKSkgeworCSAgICBuYW1lX3RhYmxlW25dLm50ZV90eXBlID0gTlVNQkVSOworCSAgICBuYW1lX3RhYmxlW25dLm50ZV9pbmRleCA9IE51bUNvdW50Kys7CisJfSBlbHNlIGlmICghc3RyY21wKGxpc3RbMl0sICJzdHIiKSkgeworCSAgICBuYW1lX3RhYmxlW25dLm50ZV90eXBlID0gU1RSSU5HOworCSAgICBuYW1lX3RhYmxlW25dLm50ZV9pbmRleCA9IFN0ckNvdW50Kys7CisJfSBlbHNlIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHR5cGU6ICVzXG4iLCBsaXN0WzJdKTsKKwkgICAgZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwluKys7CisgICAgfQorICAgIF9uY19tYWtlX2hhc2hfdGFibGUobmFtZV90YWJsZSwgaGFzaF90YWJsZSk7CisKKyAgICAvKgorICAgICAqIFdyaXRlIHRoZSBjb21waWxlZCB0YWJsZXMgdG8gc3RhbmRhcmQgb3V0cHV0CisgICAgICovCisgICAgaWYgKGJpZ3N0cmluZykgeworCWludCBsZW4gPSAwOworCWludCBueHQ7CisKKwlwcmludGYoInN0YXRpYyBjb25zdCBjaGFyICVzX25hbWVzX3RleHRbXSA9IFxcXG4iLCByb290X25hbWUpOworCWZvciAobiA9IDA7IG4gPCBDQVBUQUJTSVpFOyBuKyspIHsKKwkgICAgbnh0ID0gKGludCkgc3RybGVuKG5hbWVfdGFibGVbbl0ubnRlX25hbWUpICsgNTsKKwkgICAgaWYgKG54dCArIGxlbiA+IDcyKSB7CisJCXByaW50ZigiXFxcbiIpOworCQlsZW4gPSAwOworCSAgICB9CisJICAgIHByaW50ZigiXCIlc1xcMFwiICIsIG5hbWVfdGFibGVbbl0ubnRlX25hbWUpOworCSAgICBsZW4gKz0gbnh0OworCX0KKwlwcmludGYoIjtcblxuIik7CisKKwlsZW4gPSAwOworCXByaW50Zigic3RhdGljIG5hbWVfdGFibGVfZGF0YSBjb25zdCAlc19uYW1lc19kYXRhW10gPVxuIiwKKwkgICAgICAgcm9vdF9uYW1lKTsKKwlwcmludGYoIntcbiIpOworCWZvciAobiA9IDA7IG4gPCBDQVBUQUJTSVpFOyBuKyspIHsKKwkgICAgcHJpbnRmKCJcdHsgJTE1ZCxcdCUxMHMsXHQlM2QsICUzZCB9JWNcbiIsCisJCSAgIGxlbiwKKwkJICAgdHlwZW5hbWVzW25hbWVfdGFibGVbbl0ubnRlX3R5cGVdLAorCQkgICBuYW1lX3RhYmxlW25dLm50ZV9pbmRleCwKKwkJICAgbmFtZV90YWJsZVtuXS5udGVfbGluaywKKwkJICAgbiA8IENBUFRBQlNJWkUgLSAxID8gJywnIDogJyAnKTsKKwkgICAgbGVuICs9IChpbnQpIHN0cmxlbihuYW1lX3RhYmxlW25dLm50ZV9uYW1lKSArIDE7CisJfQorCXByaW50ZigifTtcblxuIik7CisJcHJpbnRmKCJzdGF0aWMgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKl9uY18lc190YWJsZSA9IDA7XG5cbiIsIHJvb3RfbmFtZSk7CisgICAgfSBlbHNlIHsKKworCXByaW50Zigic3RhdGljIHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICVzIF9uY18lc190YWJsZVtdID1cbiIsCisJICAgICAgIGJpZ3N0cmluZyA/ICIiIDogImNvbnN0IiwKKwkgICAgICAgcm9vdF9uYW1lKTsKKwlwcmludGYoIntcbiIpOworCWZvciAobiA9IDA7IG4gPCBDQVBUQUJTSVpFOyBuKyspIHsKKwkgICAgc3ByaW50ZihidWZmZXIsICJcIiVzXCIiLAorCQkgICAgbmFtZV90YWJsZVtuXS5udGVfbmFtZSk7CisJICAgIHByaW50ZigiXHR7ICUxNXMsXHQlMTBzLFx0JTNkLCAlM2QgfSVjXG4iLAorCQkgICBidWZmZXIsCisJCSAgIHR5cGVuYW1lc1tuYW1lX3RhYmxlW25dLm50ZV90eXBlXSwKKwkJICAgbmFtZV90YWJsZVtuXS5udGVfaW5kZXgsCisJCSAgIG5hbWVfdGFibGVbbl0ubnRlX2xpbmssCisJCSAgIG4gPCBDQVBUQUJTSVpFIC0gMSA/ICcsJyA6ICcgJyk7CisJfQorCXByaW50ZigifTtcblxuIik7CisgICAgfQorCisgICAgcHJpbnRmKCJzdGF0aWMgY29uc3Qgc2hvcnQgX25jXyVzX2hhc2hfdGFibGVbJWRdID1cbiIsCisJICAgcm9vdF9uYW1lLAorCSAgIEhBU0hUQUJTSVpFICsgMSk7CisgICAgcHJpbnRmKCJ7XG4iKTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgSEFTSFRBQlNJWkU7IG4rKykgeworCXByaW50ZigiXHQlM2QsXG4iLCBoYXNoX3RhYmxlW25dKTsKKyAgICB9CisgICAgcHJpbnRmKCJcdDBcdC8qIGJhc2Utb2YtdGFibGUgKi9cbiIpOworICAgIHByaW50ZigifTtcblxuIik7CisKKyAgICBwcmludGYoIiNpZiAoQk9PTENPVU5UIT0lZCl8fChOVU1DT1VOVCE9JWQpfHwoU1RSQ09VTlQhPSVkKVxuIiwKKwkgICBCb29sQ291bnQsIE51bUNvdW50LCBTdHJDb3VudCk7CisgICAgcHJpbnRmKCIjZXJyb3JcdC0tPiB0ZXJtLmggYW5kIGNvbXBfY2FwdGFiLmMgZGlzYWdyZWUgYWJvdXQgdGhlIDwtLVxuIik7CisgICAgcHJpbnRmKCIjZXJyb3JcdC0tPiBudW1iZXJzIG9mIGJvb2xlYW5zLCBudW1iZXJzIGFuZC9vciBzdHJpbmdzIDwtLVxuIik7CisgICAgcHJpbnRmKCIjZW5kaWZcblxuIik7CisKKyAgICBmcmVlKGhhc2hfdGFibGUpOworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9wYXJzZS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9jb21wX3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyNWEwZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9wYXJzZS5jCkBAIC0wLDAgKzEsNDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgljb21wX3BhcnNlLmMgLS0gcGFyc2VyIGRyaXZlciBsb29wIGFuZCB1c2UgaGFuZGxpbmcuCisgKgorICoJX25jX3JlYWRfZW50cnlfc291cmNlKEZJTEUgKiwgbGl0ZXJhbCwgYm9vbCwgYm9vbCAoKmhvb2spKCkpCisgKglfbmNfcmVzb2x2ZV91c2VzMih2b2lkKQorICoJX25jX2ZyZWVfZW50cmllcyh2b2lkKQorICoKKyAqCVVzZSB0aGlzIGNvZGUgYnkgY2FsbGluZyBfbmNfcmVhZF9lbnRyeV9zb3VyY2UoKSBvbiBhcyBtYW55IHNvdXJjZQorICoJZmlsZXMgYXMgeW91IGxpa2UgKGVpdGhlciB0ZXJtaW5mbyBvciB0ZXJtY2FwIHN5bnRheCkuICBJZiB5b3UKKyAqCXdhbnQgdXNlLXJlc29sdXRpb24sIGNhbGwgX25jX3Jlc29sdmVfdXNlczIoKS4gIFRvIGZyZWUgdGhlIGxpc3QKKyAqCXN0b3JhZ2UsIGRvIF9uY19mcmVlX2VudHJpZXMoKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogY29tcF9wYXJzZS5jLHYgMS42OSAyMDA4LzA4LzE2IDIxOjU4OjE2IHRvbSBFeHAgJCIpCisKK3N0YXRpYyB2b2lkIHNhbml0eV9jaGVjazIoVEVSTVRZUEUgKiwgYm9vbCk7CitOQ1VSU0VTX0lNUEVYUCB2b2lkIE5DVVJTRVNfQVBJKCpfbmNfY2hlY2tfdGVybXR5cGUyKSAoVEVSTVRZUEUgKiwgYm9vbCkgPSBzYW5pdHlfY2hlY2syOworCisvKiBvYnNvbGV0ZTogMjAwNDA3MDUgKi8KK3N0YXRpYyB2b2lkIHNhbml0eV9jaGVjayhURVJNVFlQRSAqKTsKK05DVVJTRVNfSU1QRVhQIHZvaWQgTkNVUlNFU19BUEkoKl9uY19jaGVja190ZXJtdHlwZSkgKFRFUk1UWVBFICopID0gc2FuaXR5X2NoZWNrOworCitzdGF0aWMgdm9pZAorZW5xdWV1ZShFTlRSWSAqIGVwKQorLyogYWRkIGFuIGVudHJ5IHRvIHRoZSBpbi1jb3JlIGxpc3QgKi8KK3sKKyAgICBFTlRSWSAqbmV3cCA9IF9uY19jb3B5X2VudHJ5KGVwKTsKKworICAgIGlmIChuZXdwID09IDApCisJX25jX2Vycl9hYm9ydChNU0dfTk9fTUVNT1JZKTsKKworICAgIG5ld3AtPmxhc3QgPSBfbmNfdGFpbDsKKyAgICBfbmNfdGFpbCA9IG5ld3A7CisKKyAgICBuZXdwLT5uZXh0ID0gMDsKKyAgICBpZiAobmV3cC0+bGFzdCkKKwluZXdwLT5sYXN0LT5uZXh0ID0gbmV3cDsKK30KKworc3RhdGljIGNoYXIgKgorZm9yY2VfYmFyKGNoYXIgKmRzdCwgY2hhciAqc3JjKQoreworICAgIGlmIChzdHJjaHIoc3JjLCAnfCcpID09IDApIHsKKwlzaXplX3QgbGVuID0gc3RybGVuKHNyYyk7CisJaWYgKGxlbiA+IE1BWF9OQU1FX1NJWkUpCisJICAgIGxlbiA9IE1BWF9OQU1FX1NJWkU7CisJKHZvaWQpIHN0cm5jcHkoZHN0LCBzcmMsIGxlbik7CisJKHZvaWQpIHN0cmNweShkc3QgKyBsZW4sICJ8Iik7CisJc3JjID0gZHN0OworICAgIH0KKyAgICByZXR1cm4gc3JjOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX2VudHJ5X21hdGNoKGNoYXIgKm4xLCBjaGFyICpuMikKKy8qIGRvIGFueSBvZiB0aGUgYWxpYXNlcyBpbiBhIHBhaXIgb2YgdGVybWluYWwgbmFtZXMgbWF0Y2g/ICovCit7CisgICAgY2hhciAqcHN0YXJ0LCAqcXN0YXJ0LCAqcGVuZCwgKnFlbmQ7CisgICAgY2hhciBuYzFbTUFYX05BTUVfU0laRSArIDJdLCBuYzJbTUFYX05BTUVfU0laRSArIDJdOworCisgICAgbjEgPSBmb3JjZV9iYXIobmMxLCBuMSk7CisgICAgbjIgPSBmb3JjZV9iYXIobmMyLCBuMik7CisKKyAgICBmb3IgKHBzdGFydCA9IG4xOyAocGVuZCA9IHN0cmNocihwc3RhcnQsICd8JykpOyBwc3RhcnQgPSBwZW5kICsgMSkKKwlmb3IgKHFzdGFydCA9IG4yOyAocWVuZCA9IHN0cmNocihxc3RhcnQsICd8JykpOyBxc3RhcnQgPSBxZW5kICsgMSkKKwkgICAgaWYgKChwZW5kIC0gcHN0YXJ0ID09IHFlbmQgLSBxc3RhcnQpCisJCSYmIG1lbWNtcChwc3RhcnQsIHFzdGFydCwgKHNpemVfdCkgKHBlbmQgLSBwc3RhcnQpKSA9PSAwKQorCQlyZXR1cm4gKFRSVUUpOworCisgICAgcmV0dXJuIChGQUxTRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRW50cnkgY29tcGlsZXIgYW5kIHJlc29sdXRpb24gbG9naWMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19yZWFkX2VudHJ5X3NvdXJjZShGSUxFICpmcCwgY2hhciAqYnVmLAorCQkgICAgICBpbnQgbGl0ZXJhbCwgYm9vbCBzaWxlbnQsCisJCSAgICAgIGJvb2woKmhvb2spIChFTlRSWSAqKSkKKy8qIHNsdXJwIGFsbCBlbnRyaWVzIGluIHRoZSBnaXZlbiBmaWxlIGludG8gY29yZSAqLworeworICAgIEVOVFJZIHRoaXNlbnRyeTsKKyAgICBib29sIG9sZHN1cHByZXNzID0gX25jX3N1cHByZXNzX3dhcm5pbmdzOworICAgIGludCBpbW1lZGlhdGUgPSAwOworCisgICAgaWYgKHNpbGVudCkKKwlfbmNfc3VwcHJlc3Nfd2FybmluZ3MgPSBUUlVFOwkvKiBzaHV0IHRoZSBsZXhlciB1cCwgdG9vICovCisKKyAgICBfbmNfcmVzZXRfaW5wdXQoZnAsIGJ1Zik7CisgICAgZm9yICg7OykgeworCW1lbXNldCgmdGhpc2VudHJ5LCAwLCBzaXplb2YodGhpc2VudHJ5KSk7CisJaWYgKF9uY19wYXJzZV9lbnRyeSgmdGhpc2VudHJ5LCBsaXRlcmFsLCBzaWxlbnQpID09IEVSUikKKwkgICAgYnJlYWs7CisJaWYgKCFpc2FsbnVtKFVDaGFyKHRoaXNlbnRyeS50dGVybS50ZXJtX25hbWVzWzBdKSkpCisJICAgIF9uY19lcnJfYWJvcnQoInRlcm1pbmFsIG5hbWVzIG11c3Qgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgZGlnaXQiKTsKKworCS8qCisJICogVGhpcyBjYW4gYmUgdXNlZCBmb3IgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIG9mIGVudHJpZXMgd2l0aCBubyAidXNlPSIKKwkgKiByZWZlcmVuY2VzIHRvIGRpc2suICBUaGF0IGF2b2lkcyBjb25zdW1pbmcgYSBsb3Qgb2YgbWVtb3J5IHdoZW4gdGhlCisJICogcmVzb2x1dGlvbiBjb2RlIGNvdWxkIGZldGNoIGVudHJpZXMgb2ZmIGRpc2suCisJICovCisJaWYgKGhvb2sgIT0gTlVMTEhPT0sgJiYgKCpob29rKSAoJnRoaXNlbnRyeSkpIHsKKwkgICAgaW1tZWRpYXRlKys7CisJfSBlbHNlIHsKKwkgICAgZW5xdWV1ZSgmdGhpc2VudHJ5KTsKKwkgICAgLyoKKwkgICAgICogVGhlIGVucXVldWVkIGVudHJ5IGlzIGNvcGllZCB3aXRoIF9uY19jb3B5X3Rlcm10eXBlKCksIHNvIHdlIGNhbgorCSAgICAgKiBmcmVlIHNvbWUgb2YgdGhlIGRhdGEgZnJvbSB0aGlzZW50cnksIGkuZS4sIHRoZSBhcnJheXMuCisJICAgICAqLworCSAgICBGcmVlSWZOZWVkZWQodGhpc2VudHJ5LnR0ZXJtLkJvb2xlYW5zKTsKKwkgICAgRnJlZUlmTmVlZGVkKHRoaXNlbnRyeS50dGVybS5OdW1iZXJzKTsKKwkgICAgRnJlZUlmTmVlZGVkKHRoaXNlbnRyeS50dGVybS5TdHJpbmdzKTsKKyNpZiBOQ1VSU0VTX1hOQU1FUworCSAgICBGcmVlSWZOZWVkZWQodGhpc2VudHJ5LnR0ZXJtLmV4dF9OYW1lcyk7CisjZW5kaWYKKwl9CisgICAgfQorCisgICAgaWYgKF9uY190YWlsKSB7CisJLyogc2V0IHVwIHRoZSBoZWFkIHBvaW50ZXIgKi8KKwlmb3IgKF9uY19oZWFkID0gX25jX3RhaWw7IF9uY19oZWFkLT5sYXN0OyBfbmNfaGVhZCA9IF9uY19oZWFkLT5sYXN0KQorCSAgICBjb250aW51ZTsKKworCURFQlVHKDEsICgiaGVhZCA9ICVzIiwgX25jX2hlYWQtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwlERUJVRygxLCAoInRhaWwgPSAlcyIsIF9uY190YWlsLT50dGVybS50ZXJtX25hbWVzKSk7CisgICAgfQorI2lmZGVmIFRSQUNFCisgICAgZWxzZSBpZiAoIWltbWVkaWF0ZSkKKwlERUJVRygxLCAoIm5vIGVudHJpZXMgcGFyc2VkIikpOworI2VuZGlmCisKKyAgICBfbmNfc3VwcHJlc3Nfd2FybmluZ3MgPSBvbGRzdXBwcmVzczsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3Jlc29sdmVfdXNlczIoYm9vbCBmdWxscmVzb2x2ZSwgYm9vbCBsaXRlcmFsKQorLyogdHJ5IHRvIHJlc29sdmUgYWxsIHVzZSBjYXBhYmlsaXRpZXMgKi8KK3sKKyAgICBFTlRSWSAqcXAsICpycCwgKmxhc3RyZWFkID0gMDsKKyAgICBib29sIGtlZXBnb2luZzsKKyAgICB1bnNpZ25lZCBpOworICAgIGludCB1bnJlc29sdmVkLCB0b3RhbF91bnJlc29sdmVkLCBtdWx0aXBsZXM7CisKKyAgICBERUJVRygyLCAoIlJFU09MVVRJT04gQkVHSU5OSU5HIikpOworCisgICAgLyoKKyAgICAgKiBDaGVjayBmb3IgbXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgbmFtZS4KKyAgICAgKi8KKyAgICBtdWx0aXBsZXMgPSAwOworICAgIGZvcl9lbnRyeV9saXN0KHFwKSB7CisJaW50IG1hdGNoY291bnQgPSAwOworCisJZm9yX2VudHJ5X2xpc3QocnApIHsKKwkgICAgaWYgKHFwID4gcnAKKwkJJiYgX25jX2VudHJ5X21hdGNoKHFwLT50dGVybS50ZXJtX25hbWVzLCBycC0+dHRlcm0udGVybV9uYW1lcykpIHsKKwkJbWF0Y2hjb3VudCsrOworCQlpZiAobWF0Y2hjb3VudCA9PSAxKSB7CisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJOYW1lIGNvbGxpc2lvbiBiZXR3ZWVuICVzIiwKKwkJCQkgICBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcykpOworCQkgICAgbXVsdGlwbGVzKys7CisJCX0KKwkJaWYgKG1hdGNoY291bnQgPj0gMSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIF9uY19maXJzdF9uYW1lKHJwLT50dGVybS50ZXJtX25hbWVzKSk7CisJICAgIH0KKwl9CisJaWYgKG1hdGNoY291bnQgPj0gMSkKKwkgICAgKHZvaWQpIHB1dGMoJ1xuJywgc3RkZXJyKTsKKyAgICB9CisgICAgaWYgKG11bHRpcGxlcyA+IDApCisJcmV0dXJuIChGQUxTRSk7CisKKyAgICBERUJVRygyLCAoIk5PIE1VTFRJUExFIE5BTUUgT0NDVVJSRU5DRVMiKSk7CisKKyAgICAvKgorICAgICAqIEZpcnN0IHJlc29sdXRpb24gc3RhZ2U6IGNvbXB1dGUgbGluayBwb2ludGVycyBjb3JyZXNwb25kaW5nIHRvIG5hbWVzLgorICAgICAqLworICAgIHRvdGFsX3VucmVzb2x2ZWQgPSAwOworICAgIF9uY19jdXJyX2NvbCA9IC0xOworICAgIGZvcl9lbnRyeV9saXN0KHFwKSB7CisJdW5yZXNvbHZlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHFwLT5udXNlczsgaSsrKSB7CisJICAgIGJvb2wgZm91bmRpdDsKKwkgICAgY2hhciAqY2hpbGQgPSBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcyk7CisJICAgIGNoYXIgKmxvb2tmb3IgPSBxcC0+dXNlc1tpXS5uYW1lOworCSAgICBsb25nIGxvb2tsaW5lID0gcXAtPnVzZXNbaV0ubGluZTsKKworCSAgICBmb3VuZGl0ID0gRkFMU0U7CisKKwkgICAgX25jX3NldF90eXBlKGNoaWxkKTsKKworCSAgICAvKiBmaXJzdCwgdHJ5IHRvIHJlc29sdmUgZnJvbSBpbi1jb3JlIHJlY29yZHMgKi8KKwkgICAgZm9yX2VudHJ5X2xpc3QocnApIHsKKwkJaWYgKHJwICE9IHFwCisJCSAgICAmJiBfbmNfbmFtZV9tYXRjaChycC0+dHRlcm0udGVybV9uYW1lcywgbG9va2ZvciwgInwiKSkgeworCQkgICAgREVCVUcoMiwgKCIlczogcmVzb2x2aW5nIHVzZT0lcyAoaW4gY29yZSkiLAorCQkJICAgICAgY2hpbGQsIGxvb2tmb3IpKTsKKworCQkgICAgcXAtPnVzZXNbaV0ubGluayA9IHJwOworCQkgICAgZm91bmRpdCA9IFRSVUU7CisJCX0KKwkgICAgfQorCisJICAgIC8qIGlmIHRoYXQgZGlkbid0IHdvcmssIHRyeSB0byBtZXJnZSBpbiBhIGNvbXBpbGVkIGVudHJ5ICovCisJICAgIGlmICghZm91bmRpdCkgeworCQlURVJNVFlQRSB0aGlzdGVybTsKKwkJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisKKwkJbWVtc2V0KCZ0aGlzdGVybSwgMCwgc2l6ZW9mKHRoaXN0ZXJtKSk7CisJCWlmIChfbmNfcmVhZF9lbnRyeShsb29rZm9yLCBmaWxlbmFtZSwgJnRoaXN0ZXJtKSA9PSAxKSB7CisJCSAgICBERUJVRygyLCAoIiVzOiByZXNvbHZpbmcgdXNlPSVzIChjb21waWxlZCkiLAorCQkJICAgICAgY2hpbGQsIGxvb2tmb3IpKTsKKworCQkgICAgcnAgPSB0eXBlTWFsbG9jKEVOVFJZLCAxKTsKKwkJICAgIGlmIChycCA9PSAwKQorCQkJX25jX2Vycl9hYm9ydChNU0dfTk9fTUVNT1JZKTsKKwkJICAgIHJwLT50dGVybSA9IHRoaXN0ZXJtOworCQkgICAgcnAtPm51c2VzID0gMDsKKwkJICAgIHJwLT5uZXh0ID0gbGFzdHJlYWQ7CisJCSAgICBsYXN0cmVhZCA9IHJwOworCisJCSAgICBxcC0+dXNlc1tpXS5saW5rID0gcnA7CisJCSAgICBmb3VuZGl0ID0gVFJVRTsKKwkJfQorCSAgICB9CisKKwkgICAgLyogbm8gZ29vZCwgbWFyayB0aGlzIG9uZSB1bnJlc29sdmFibGUgYW5kIGNvbXBsYWluICovCisJICAgIGlmICghZm91bmRpdCkgeworCQl1bnJlc29sdmVkKys7CisJCXRvdGFsX3VucmVzb2x2ZWQrKzsKKworCQlfbmNfY3Vycl9saW5lID0gbG9va2xpbmU7CisJCV9uY193YXJuaW5nKCJyZXNvbHV0aW9uIG9mIHVzZT0lcyBmYWlsZWQiLCBsb29rZm9yKTsKKwkJcXAtPnVzZXNbaV0ubGluayA9IDA7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmICh0b3RhbF91bnJlc29sdmVkKSB7CisJLyogZnJlZSBlbnRyaWVzIHJlYWQgaW4gb2ZmIGRpc2sgKi8KKwlfbmNfZnJlZV9lbnRyaWVzKGxhc3RyZWFkKTsKKwlyZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBERUJVRygyLCAoIk5BTUUgUkVTT0xVVElPTiBDT01QTEVURUQgT0siKSk7CisKKyAgICAvKgorICAgICAqIE9LLCBhdCB0aGlzIHBvaW50IGFsbCAoY2hhciAqKSByZWZlcmVuY2VzIGluIGBuYW1lJyBtZW1iZXJzCisgICAgICogaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgdG8gKEVOVFJZICopIHBvaW50ZXJzIGluCisgICAgICogYGxpbmsnIG1lbWJlcnMuICBUaW1lIHRvIGRvIHRoZSBhY3R1YWwgbWVyZ2VzLgorICAgICAqLworICAgIGlmIChmdWxscmVzb2x2ZSkgeworCWRvIHsKKwkgICAgVEVSTVRZUEUgbWVyZ2VkOworCisJICAgIGtlZXBnb2luZyA9IEZBTFNFOworCisJICAgIGZvcl9lbnRyeV9saXN0KHFwKSB7CisJCWlmIChxcC0+bnVzZXMgPiAwKSB7CisJCSAgICBERUJVRygyLCAoIiVzOiBhdHRlbXB0aW5nIG1lcmdlIiwKKwkJCSAgICAgIF9uY19maXJzdF9uYW1lKHFwLT50dGVybS50ZXJtX25hbWVzKSkpOworCQkgICAgLyoKKwkJICAgICAqIElmIGFueSBvZiB0aGUgdXNlIGVudHJpZXMgd2UncmUgbG9va2luZyBmb3IgaXMKKwkJICAgICAqIGluY29tcGxldGUsIHB1bnQuICBXZSdsbCBjYXRjaCB0aGlzIGVudHJ5IG9uIGEKKwkJICAgICAqIHN1YnNlcXVlbnQgcGFzcy4KKwkJICAgICAqLworCQkgICAgZm9yIChpID0gMDsgaSA8IHFwLT5udXNlczsgaSsrKQorCQkJaWYgKHFwLT51c2VzW2ldLmxpbmstPm51c2VzKSB7CisJCQkgICAgREVCVUcoMiwgKCIlczogdXNlIGVudHJ5ICVkIHVucmVzb2x2ZWQiLAorCQkJCSAgICAgIF9uY19maXJzdF9uYW1lKHFwLT50dGVybS50ZXJtX25hbWVzKSwgaSkpOworCQkJICAgIGdvdG8gaW5jb21wbGV0ZTsKKwkJCX0KKworCQkgICAgLyoKKwkJICAgICAqIEZpcnN0LCBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gZ2FyYmFnZSBpbiB0aGUKKwkJICAgICAqIG1lcmdlIGJsb2NrLiAgQXMgYSBzaWRlIGVmZmVjdCwgY29weSBpbnRvCisJCSAgICAgKiB0aGUgbWVyZ2VkIGVudHJ5IHRoZSBuYW1lIGZpZWxkIGFuZCBzdHJpbmcKKwkJICAgICAqIHRhYmxlIHBvaW50ZXIuCisJCSAgICAgKi8KKwkJICAgIF9uY19jb3B5X3Rlcm10eXBlKCZtZXJnZWQsICYocXAtPnR0ZXJtKSk7CisKKwkJICAgIC8qCisJCSAgICAgKiBOb3cgbWVyZ2UgaW4gZWFjaCB1c2UgZW50cnkgaW4gdGhlIHByb3BlcgorCQkgICAgICogKHJldmVyc2UpIG9yZGVyLgorCQkgICAgICovCisJCSAgICBmb3IgKDsgcXAtPm51c2VzOyBxcC0+bnVzZXMtLSkKKwkJCV9uY19tZXJnZV9lbnRyeSgmbWVyZ2VkLAorCQkJCQkmcXAtPnVzZXNbcXAtPm51c2VzIC0gMV0ubGluay0+dHRlcm0pOworCisJCSAgICAvKgorCQkgICAgICogTm93IG1lcmdlIGluIHRoZSBvcmlnaW5hbCBlbnRyeS4KKwkJICAgICAqLworCQkgICAgX25jX21lcmdlX2VudHJ5KCZtZXJnZWQsICZxcC0+dHRlcm0pOworCisJCSAgICAvKgorCQkgICAgICogUmVwbGFjZSB0aGUgb3JpZ2luYWwgZW50cnkgd2l0aCB0aGUgbWVyZ2VkIG9uZS4KKwkJICAgICAqLworCQkgICAgRnJlZUlmTmVlZGVkKHFwLT50dGVybS5Cb29sZWFucyk7CisJCSAgICBGcmVlSWZOZWVkZWQocXAtPnR0ZXJtLk51bWJlcnMpOworCQkgICAgRnJlZUlmTmVlZGVkKHFwLT50dGVybS5TdHJpbmdzKTsKKyNpZiBOQ1VSU0VTX1hOQU1FUworCQkgICAgRnJlZUlmTmVlZGVkKHFwLT50dGVybS5leHRfTmFtZXMpOworI2VuZGlmCisJCSAgICBxcC0+dHRlcm0gPSBtZXJnZWQ7CisJCSAgICBfbmNfd3JhcF9lbnRyeShxcCwgVFJVRSk7CisKKwkJICAgIC8qCisJCSAgICAgKiBXZSBrbm93IGV2ZXJ5IGVudHJ5IGlzIHJlc29sdmFibGUgYmVjYXVzZSBuYW1lIHJlc29sdXRpb24KKwkJICAgICAqIGRpZG4ndCBib21iLiAgU28gZ28gYmFjayBmb3IgYW5vdGhlciBwYXNzLgorCQkgICAgICovCisJCSAgICAvKiBGQUxMVEhSVSAqLworCQkgIGluY29tcGxldGU6CisJCSAgICBrZWVwZ29pbmcgPSBUUlVFOworCQl9CisJICAgIH0KKwl9IHdoaWxlCisJICAgIChrZWVwZ29pbmcpOworCisJREVCVUcoMiwgKCJNRVJHRVMgQ09NUExFVEVEIE9LIikpOworICAgIH0KKworICAgIC8qCisgICAgICogV2UnZCBsaWtlIHRvIGZyZWUgZW50cmllcyByZWFkIGluIG9mZiBkaXNrIGF0IHRoaXMgcG9pbnQsIGJ1dCBjYW4ndC4KKyAgICAgKiBUaGUgbWVyZ2VfZW50cnkoKSBjb2RlIGRvZXNuJ3QgY29weSB0aGUgc3RyaW5ncyBpbiB0aGUgdXNlIGVudHJpZXMsCisgICAgICogaXQganVzdCBhbGlhc2VzIHRoZW0uICBJZiB0aGlzIGV2ZXIgY2hhbmdlcywgZG8gYQorICAgICAqIGZyZWVfZW50cmllcyhsYXN0cmVhZCkgaGVyZS4KKyAgICAgKi8KKworICAgIERFQlVHKDIsICgiUkVTT0xVVElPTiBGSU5JU0hFRCIpKTsKKworICAgIGlmIChmdWxscmVzb2x2ZSkKKwlpZiAoX25jX2NoZWNrX3Rlcm10eXBlICE9IDApIHsKKwkgICAgX25jX2N1cnJfY29sID0gLTE7CisJICAgIGZvcl9lbnRyeV9saXN0KHFwKSB7CisJCV9uY19jdXJyX2xpbmUgPSBxcC0+c3RhcnRsaW5lOworCQlfbmNfc2V0X3R5cGUoX25jX2ZpcnN0X25hbWUocXAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKwkJX25jX2NoZWNrX3Rlcm10eXBlMigmcXAtPnR0ZXJtLCBsaXRlcmFsKTsKKwkgICAgfQorCSAgICBERUJVRygyLCAoIlNBTklUWSBDSEVDSyBGSU5JU0hFRCIpKTsKKwl9CisKKyAgICByZXR1cm4gKFRSVUUpOworfQorCisvKiBvYnNvbGV0ZTogMjAwNDA3MDUgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZXNvbHZlX3VzZXMoYm9vbCBmdWxscmVzb2x2ZSkKK3sKKyAgICByZXR1cm4gX25jX3Jlc29sdmVfdXNlczIoZnVsbHJlc29sdmUsIEZBTFNFKTsKK30KKworLyoKKyAqIFRoaXMgYml0IG9mIGxlZ2VyZGVtYWluIHR1cm5zIGFsbCB0aGUgdGVybWluZm8gdmFyaWFibGUgbmFtZXMgaW50bworICogcmVmZXJlbmNlcyB0byBsb2NhdGlvbnMgaW4gdGhlIGFycmF5cyBCb29sZWFucywgTnVtYmVycywgYW5kIFN0cmluZ3MgLS0tCisgKiBwcmVjaXNlbHkgd2hhdCdzIG5lZWRlZC4KKyAqLworCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiB0cC0+CisKK3N0YXRpYyB2b2lkCitzYW5pdHlfY2hlY2syKFRFUk1UWVBFICp0cCwgYm9vbCBsaXRlcmFsKQoreworICAgIGlmICghUFJFU0VOVChleGl0X2F0dHJpYnV0ZV9tb2RlKSkgeworI2lmZGVmIF9fVU5VU0VEX18JCS8qIHRoaXMgY2FzdHMgdG9vIHdpZGUgYSBuZXQgKi8KKwlib29sIHRlcm1pbmFsX2VudHJ5ID0gIXN0cmNocih0cC0+dGVybV9uYW1lcywgJysnKTsKKwlpZiAodGVybWluYWxfZW50cnkgJiYKKwkgICAgKFBSRVNFTlQoc2V0X2F0dHJpYnV0ZXMpCisJICAgICB8fCBQUkVTRU5UKGVudGVyX3N0YW5kb3V0X21vZGUpCisJICAgICB8fCBQUkVTRU5UKGVudGVyX3VuZGVybGluZV9tb2RlKQorCSAgICAgfHwgUFJFU0VOVChlbnRlcl9ibGlua19tb2RlKQorCSAgICAgfHwgUFJFU0VOVChlbnRlcl9ib2xkX21vZGUpCisJICAgICB8fCBQUkVTRU5UKGVudGVyX2RpbV9tb2RlKQorCSAgICAgfHwgUFJFU0VOVChlbnRlcl9zZWN1cmVfbW9kZSkKKwkgICAgIHx8IFBSRVNFTlQoZW50ZXJfcHJvdGVjdGVkX21vZGUpCisJICAgICB8fCBQUkVTRU5UKGVudGVyX3JldmVyc2VfbW9kZSkpKQorCSAgICBfbmNfd2FybmluZygibm8gZXhpdF9hdHRyaWJ1dGVfbW9kZSIpOworI2VuZGlmIC8qIF9fVU5VU0VEX18gKi8KKwlQQUlSRUQoZW50ZXJfc3RhbmRvdXRfbW9kZSwgZXhpdF9zdGFuZG91dF9tb2RlKTsKKwlQQUlSRUQoZW50ZXJfdW5kZXJsaW5lX21vZGUsIGV4aXRfdW5kZXJsaW5lX21vZGUpOworICAgIH0KKworICAgIC8qIHdlIGRvIHRoaXMgY2hlY2svZml4IGluIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoKSwgYnV0IHNvbWUgcGFja2FnZXJzCisgICAgICogcHJlZmVyIHRvIGJ5cGFzcyBpdC4uLgorICAgICAqLworICAgIGlmICghbGl0ZXJhbCkgeworCWlmIChhY3NfY2hhcnMgPT0gMAorCSAgICAmJiBlbnRlcl9hbHRfY2hhcnNldF9tb2RlICE9IDAKKwkgICAgJiYgZXhpdF9hbHRfY2hhcnNldF9tb2RlICE9IDApCisJICAgIGFjc19jaGFycyA9IHN0cmR1cChWVF9BQ1NDKTsKKwlBTkRNSVNTSU5HKGVudGVyX2FsdF9jaGFyc2V0X21vZGUsIGFjc19jaGFycyk7CisJQU5ETUlTU0lORyhleGl0X2FsdF9jaGFyc2V0X21vZGUsIGFjc19jaGFycyk7CisgICAgfQorCisgICAgLyogbGlzdGVkIGluIHN0cnVjdHVyZS1tZW1iZXIgb3JkZXIgb2YgZmlyc3QgYXJndW1lbnQgKi8KKyAgICBQQUlSRUQoZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSwgZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKKyAgICBBTkRNSVNTSU5HKGVudGVyX2JsaW5rX21vZGUsIGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIEFORE1JU1NJTkcoZW50ZXJfYm9sZF9tb2RlLCBleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKyAgICBQQUlSRUQoZXhpdF9jYV9tb2RlLCBlbnRlcl9jYV9tb2RlKTsKKyAgICBQQUlSRUQoZW50ZXJfZGVsZXRlX21vZGUsIGV4aXRfZGVsZXRlX21vZGUpOworICAgIEFORE1JU1NJTkcoZW50ZXJfZGltX21vZGUsIGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIFBBSVJFRChlbnRlcl9pbnNlcnRfbW9kZSwgZXhpdF9pbnNlcnRfbW9kZSk7CisgICAgQU5ETUlTU0lORyhlbnRlcl9zZWN1cmVfbW9kZSwgZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisgICAgQU5ETUlTU0lORyhlbnRlcl9wcm90ZWN0ZWRfbW9kZSwgZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisgICAgQU5ETUlTU0lORyhlbnRlcl9yZXZlcnNlX21vZGUsIGV4aXRfYXR0cmlidXRlX21vZGUpOworICAgIFBBSVJFRChmcm9tX3N0YXR1c19saW5lLCB0b19zdGF0dXNfbGluZSk7CisgICAgUEFJUkVEKG1ldGFfb2ZmLCBtZXRhX29uKTsKKworICAgIFBBSVJFRChwcnRyX29uLCBwcnRyX29mZik7CisgICAgUEFJUkVEKHNhdmVfY3Vyc29yLCByZXN0b3JlX2N1cnNvcik7CisgICAgUEFJUkVEKGVudGVyX3hvbl9tb2RlLCBleGl0X3hvbl9tb2RlKTsKKyAgICBQQUlSRUQoZW50ZXJfYW1fbW9kZSwgZXhpdF9hbV9tb2RlKTsKKyAgICBBTkRNSVNTSU5HKGxhYmVsX29mZiwgbGFiZWxfb24pOworI2lmZGVmIHJlbW92ZV9jbG9jaworICAgIFBBSVJFRChkaXNwbGF5X2Nsb2NrLCByZW1vdmVfY2xvY2spOworI2VuZGlmCisgICAgQU5ETUlTU0lORyhzZXRfY29sb3JfcGFpciwgaW5pdGlhbGl6ZV9wYWlyKTsKK30KKworLyogb2Jzb2xldGU6IDIwMDQwNzA1ICovCitzdGF0aWMgdm9pZAorc2FuaXR5X2NoZWNrKFRFUk1UWVBFICp0cCkKK3sKKyAgICBzYW5pdHlfY2hlY2syKHRwLCBGQUxTRSk7Cit9CisKKyNpZiBOT19MRUFLUworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19sZWFrc190aWModm9pZCkKK3sKKyAgICBfbmNfYWxsb2NfZW50cnlfbGVha3MoKTsKKyAgICBfbmNfY2FwdG9pbmZvX2xlYWtzKCk7CisgICAgX25jX2NvbXBfY2FwdGFiX2xlYWtzKCk7CisgICAgX25jX2NvbXBfc2Nhbl9sZWFrcygpOworI2lmIEJST0tFTl9MSU5LRVIgfHwgVVNFX1JFRU5UUkFOVAorICAgIF9uY19uYW1lc19sZWFrcygpOworICAgIF9uY19jb2Rlc19sZWFrcygpOworI2VuZGlmCisgICAgX25jX3RpY19leHBhbmQoMCwgRkFMU0UsIDApOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVfdGljKGludCBjb2RlKQoreworICAgIF9uY19sZWFrc190aWMoKTsKKyAgICBfbmNfZnJlZV90aW5mbyhjb2RlKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9jb21wX3NjYW4uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkNzUwZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vY29tcF9zY2FuLmMKQEAgLTAsMCArMSw5NDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2IG9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWNvbXBfc2Nhbi5jIC0tLSBMZXhpY2FsIHNjYW5uZXIgZm9yIHRlcm1pbmZvIGNvbXBpbGVyLgorICoKKyAqCV9uY19yZXNldF9pbnB1dCgpCisgKglfbmNfZ2V0X3Rva2VuKCkKKyAqCV9uY19wYW5pY19tb2RlKCkKKyAqCWludCBfbmNfc3ludGF4OworICoJaW50IF9uY19jdXJyX2xpbmU7CisgKglsb25nIF9uY19jdXJyX2ZpbGVfcG9zOworICoJbG9uZyBfbmNfY29tbWVudF9zdGFydDsKKyAqCWxvbmcgX25jX2NvbW1lbnRfZW5kOworICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBjb21wX3NjYW4uYyx2IDEuODMgMjAwOC8wOC8xNiAxOToyMjo1NSB0b20gRXhwICQiKQorCisvKgorICogTWF4aW11bSBsZW5ndGggb2Ygc3RyaW5nIGNhcGFiaWxpdHkgd2UnbGwgYWNjZXB0IGJlZm9yZSByYWlzaW5nIGFuIGVycm9yLgorICogWWVzLCB0aGVyZSBpcyBhIHJlYWwgY2FwYWJpbGl0eSBpbiAvZXRjL3Rlcm1jYXAgdGhpcyBsb25nLCBhbiAiaXMiLgorICovCisjZGVmaW5lIE1BWENBUExFTgk2MDAKKworI2RlZmluZSBpc3doaXRlKGNoKQkoY2ggPT0gJyAnICB8fCAgY2ggPT0gJ1x0JykKKworTkNVUlNFU19FWFBPUlRfVkFSKGludCkKK19uY19zeW50YXggPSAwOwkJCS8qIHRlcm1jYXAgb3IgdGVybWluZm8/ICovCitOQ1VSU0VTX0VYUE9SVF9WQVIobG9uZykKK19uY19jdXJyX2ZpbGVfcG9zID0gMDsJCS8qIGZpbGUgb2Zmc2V0IG9mIGN1cnJlbnQgbGluZSAqLworTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpCitfbmNfY29tbWVudF9zdGFydCA9IDA7CQkvKiBzdGFydCBvZiBjb21tZW50IHJhbmdlIGJlZm9yZSBuYW1lICovCitOQ1VSU0VTX0VYUE9SVF9WQVIobG9uZykKK19uY19jb21tZW50X2VuZCA9IDA7CQkvKiBlbmQgb2YgY29tbWVudCByYW5nZSBiZWZvcmUgbmFtZSAqLworTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpCitfbmNfc3RhcnRfbGluZSA9IDA7CQkvKiBzdGFydCBsaW5lIG9mIGN1cnJlbnQgZW50cnkgKi8KKworTkNVUlNFU19FWFBPUlRfVkFSKHN0cnVjdCB0b2tlbikKK19uY19jdXJyX3Rva2VuID0KK3sKKyAgICAwLCAwLCAwCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUb2tlbi1ncmFiYmluZyBtYWNoaW5lcnkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBib29sIGZpcnN0X2NvbHVtbjsJLyogU2VlICduZXh0X2NoYXIoKScgYmVsb3cgKi8KK3N0YXRpYyBib29sIGhhZF9uZXdsaW5lOworc3RhdGljIGNoYXIgc2VwYXJhdG9yOwkJLyogY2FwYWJpbGl0eSBzZXBhcmF0b3IgKi8KK3N0YXRpYyBpbnQgcHVzaHR5cGU7CQkvKiB0eXBlIG9mIHB1c2hiYWNrIHRva2VuICovCitzdGF0aWMgY2hhciAqcHVzaG5hbWU7CisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworTkNVUlNFU19FWFBPUlRfVkFSKGJvb2wpCitfbmNfZGlzYWJsZV9wZXJpb2QgPSBGQUxTRTsJLyogdXNlZCBieSB0aWMgLWEgb3B0aW9uICovCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ2hhcmFjdGVyLXN0cmVhbSBoYW5kbGluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMRVhCVUZTSVoJMTAyNAorCitzdGF0aWMgY2hhciAqYnVmcHRyOwkJLyogb3RoZXJ3aXNlLCB0aGUgaW5wdXQgYnVmZmVyIHBvaW50ZXIgKi8KK3N0YXRpYyBjaGFyICpidWZzdGFydDsJCS8qIHN0YXJ0IG9mIGJ1ZmZlciBzbyB3ZSBjYW4gY29tcHV0ZSBvZmZzZXRzICovCitzdGF0aWMgRklMRSAqeXlpbjsJCS8qIHNjYW5uZXIncyBpbnB1dCBmaWxlIGRlc2NyaXB0b3IgKi8KKworLyoKKyAqCV9uY19yZXNldF9pbnB1dCgpCisgKgorICoJUmVzZXRzIHRoZSBpbnB1dC1yZWFkaW5nIHJvdXRpbmVzLiAgVXNlZCBvbiBpbml0aWFsaXphdGlvbiwKKyAqCW9yIGFmdGVyIGEgc2VlayBoYXMgYmVlbiBkb25lLiAgRXhhY3RseSBvbmUgYXJndW1lbnQgbXVzdCBiZQorICoJbm9uLW51bGwuCisgKi8KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19yZXNldF9pbnB1dChGSUxFICpmcCwgY2hhciAqYnVmKQoreworICAgIHB1c2h0eXBlID0gTk9fUFVTSEJBQ0s7CisgICAgaWYgKHB1c2huYW1lICE9IDApCisJcHVzaG5hbWVbMF0gPSAnXDAnOworICAgIHl5aW4gPSBmcDsKKyAgICBidWZzdGFydCA9IGJ1ZnB0ciA9IGJ1ZjsKKyAgICBfbmNfY3Vycl9maWxlX3BvcyA9IDBMOworICAgIGlmIChmcCAhPSAwKQorCV9uY19jdXJyX2xpbmUgPSAwOworICAgIF9uY19jdXJyX2NvbCA9IDA7Cit9CisKKy8qCisgKglpbnQgbGFzdF9jaGFyKCkKKyAqCisgKglSZXR1cm5zIHRoZSBmaW5hbCBub25ibGFuayBjaGFyYWN0ZXIgb24gdGhlIGN1cnJlbnQgaW5wdXQgYnVmZmVyCisgKi8KK3N0YXRpYyBpbnQKK2xhc3RfY2hhcih2b2lkKQoreworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oYnVmcHRyKTsKKyAgICB3aGlsZSAobGVuLS0pIHsKKwlpZiAoIWlzc3BhY2UoVUNoYXIoYnVmcHRyW2xlbl0pKSkKKwkgICAgcmV0dXJuIGJ1ZnB0cltsZW5dOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqCWludCBuZXh0X2NoYXIoKQorICoKKyAqCVJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBzdHJlYW0uICBDb21tZW50cyBhbmQgbGVhZGluZworICoJd2hpdGUgc3BhY2UgYXJlIHN0cmlwcGVkLgorICoKKyAqCVRoZSBnbG9iYWwgc3RhdGUgdmFyaWFibGUgJ2ZpcnN0Y29sdW1uJyBpcyBzZXQgVFJVRSBpZiB0aGUgY2hhcmFjdGVyCisgKglyZXR1cm5lZCBpcyBmcm9tIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGlucHV0IGxpbmUuCisgKgorICoJVGhlIGdsb2JhbCB2YXJpYWJsZSBfbmNfY3Vycl9saW5lIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIG5ldyBsaW5lLgorICoJVGhlIGdsb2JhbCB2YXJpYWJsZSBfbmNfY3Vycl9maWxlX3BvcyBpcyBzZXQgdG8gdGhlIGZpbGUgb2Zmc2V0IG9mIHRoZQorICoJYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4KKyAqLworCitzdGF0aWMgaW50CituZXh0X2NoYXIodm9pZCkKK3sKKyAgICBzdGF0aWMgY2hhciAqcmVzdWx0OworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGVkOworICAgIGludCB0aGVfY2hhcjsKKworICAgIGlmICgheXlpbikgeworCWlmIChyZXN1bHQgIT0gMCkgeworCSAgICBGcmVlQW5kTnVsbChyZXN1bHQpOworCSAgICBGcmVlQW5kTnVsbChwdXNobmFtZSk7CisJICAgIGFsbG9jYXRlZCA9IDA7CisJfQorCS8qCisJICogQW4gc3RyaW5nIHdpdGggYW4gZW1iZWRkZWQgbnVsbCB3aWxsIHRydW5jYXRlIHRoZSBpbnB1dC4gIFRoaXMgaXMKKwkgKiBpbnRlbnRpb25hbCAod2UgZG9uJ3QgcmVhZCBiaW5hcnkgZmlsZXMgaGVyZSkuCisJICovCisJaWYgKGJ1ZnB0ciA9PSAwIHx8ICpidWZwdHIgPT0gJ1wwJykKKwkgICAgcmV0dXJuIChFT0YpOworCWlmICgqYnVmcHRyID09ICdcbicpIHsKKwkgICAgX25jX2N1cnJfbGluZSsrOworCSAgICBfbmNfY3Vycl9jb2wgPSAwOworCX0gZWxzZSBpZiAoKmJ1ZnB0ciA9PSAnXHQnKSB7CisJICAgIF9uY19jdXJyX2NvbCA9IChfbmNfY3Vycl9jb2wgfCA3KTsKKwl9CisgICAgfSBlbHNlIGlmICghYnVmcHRyIHx8ICEqYnVmcHRyKSB7CisJLyoKKwkgKiBJbiB0aGVvcnkgdGhpcyBjb3VsZCBiZSByZWNvZGVkIHRvIGRvIGl0cyBJL08gb25lIGNoYXJhY3RlciBhdCBhCisJICogdGltZSwgc2F2aW5nIHRoZSBidWZmZXIgc3BhY2UuICBJbiBwcmFjdGljZSwgdGhpcyB0dXJucyBvdXQgdG8gYmUKKwkgKiBxdWl0ZSBoYXJkIHRvIGdldCBjb21wbGV0ZWx5IHJpZ2h0LiAgVHJ5IGl0IGFuZCBzZWUuICBJZiB5b3UKKwkgKiBzdWNjZWVkLCBkb24ndCBmb3JnZXQgdG8gaGFjayBwdXNoX2JhY2soKSBjb3JyZXNwb25kaW5nbHkuCisJICovCisJc2l6ZV90IHVzZWQ7CisJc2l6ZV90IGxlbjsKKworCWRvIHsKKwkgICAgYnVmc3RhcnQgPSAwOworCSAgICB1c2VkID0gMDsKKwkgICAgZG8geworCQlpZiAodXNlZCArIChMRVhCVUZTSVogLyA0KSA+PSBhbGxvY2F0ZWQpIHsKKwkJICAgIGFsbG9jYXRlZCArPSAoYWxsb2NhdGVkICsgTEVYQlVGU0laKTsKKwkJICAgIHJlc3VsdCA9IHR5cGVSZWFsbG9jKGNoYXIsIGFsbG9jYXRlZCwgcmVzdWx0KTsKKwkJICAgIGlmIChyZXN1bHQgPT0gMCkKKwkJCXJldHVybiAoRU9GKTsKKwkJICAgIGJ1ZnN0YXJ0ID0gcmVzdWx0OworCQl9CisJCWlmICh1c2VkID09IDApCisJCSAgICBfbmNfY3Vycl9maWxlX3BvcyA9IGZ0ZWxsKHl5aW4pOworCisJCWlmIChmZ2V0cyhyZXN1bHQgKyB1c2VkLCAoaW50KSAoYWxsb2NhdGVkIC0gdXNlZCksIHl5aW4pICE9IDApIHsKKwkJICAgIGJ1ZnN0YXJ0ID0gcmVzdWx0OworCQkgICAgaWYgKHVzZWQgPT0gMCkgeworCQkJX25jX2N1cnJfbGluZSsrOworCQkJX25jX2N1cnJfY29sID0gMDsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGlmICh1c2VkICE9IDApCisJCQlzdHJjYXQocmVzdWx0LCAiXG4iKTsKKwkJfQorCQlpZiAoKGJ1ZnB0ciA9IGJ1ZnN0YXJ0KSAhPSAwKSB7CisJCSAgICB1c2VkID0gc3RybGVuKGJ1ZnB0cik7CisJCSAgICB3aGlsZSAoaXN3aGl0ZSgqYnVmcHRyKSkgeworCQkJaWYgKCpidWZwdHIgPT0gJ1x0JykgeworCQkJICAgIF9uY19jdXJyX2NvbCA9IChfbmNfY3Vycl9jb2wgfCA3KSArIDE7CisJCQl9IGVsc2UgeworCQkJICAgIF9uY19jdXJyX2NvbCsrOworCQkJfQorCQkJYnVmcHRyKys7CisJCSAgICB9CisKKwkJICAgIC8qCisJCSAgICAgKiBUcmVhdCBhIHRyYWlsaW5nIDxjcj48bGY+IHRoZSBzYW1lIGFzIGEgPG5ld2xpbmU+IHNvIHdlCisJCSAgICAgKiBjYW4gcmVhZCBmaWxlcyBvbiBPUy8yLCBldGMuCisJCSAgICAgKi8KKwkJICAgIGlmICgobGVuID0gc3RybGVuKGJ1ZnB0cikpID4gMSkgeworCQkJaWYgKGJ1ZnB0cltsZW4gLSAxXSA9PSAnXG4nCisJCQkgICAgJiYgYnVmcHRyW2xlbiAtIDJdID09ICdccicpIHsKKwkJCSAgICBsZW4tLTsKKwkJCSAgICBidWZwdHJbbGVuIC0gMV0gPSAnXG4nOworCQkJICAgIGJ1ZnB0cltsZW5dID0gJ1wwJzsKKwkJCX0KKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIHJldHVybiAoRU9GKTsKKwkJfQorCSAgICB9IHdoaWxlIChidWZwdHJbbGVuIC0gMV0gIT0gJ1xuJyk7CS8qIGNvbXBsZXRlIGEgbGluZSAqLworCX0gd2hpbGUgKHJlc3VsdFswXSA9PSAnIycpOwkvKiBpZ25vcmUgY29tbWVudHMgKi8KKyAgICB9IGVsc2UgaWYgKCpidWZwdHIgPT0gJ1x0JykgeworCV9uY19jdXJyX2NvbCA9IChfbmNfY3Vycl9jb2wgfCA3KTsKKyAgICB9CisKKyAgICBmaXJzdF9jb2x1bW4gPSAoYnVmcHRyID09IGJ1ZnN0YXJ0KTsKKyAgICBpZiAoZmlyc3RfY29sdW1uKQorCWhhZF9uZXdsaW5lID0gRkFMU0U7CisKKyAgICBfbmNfY3Vycl9jb2wrKzsKKyAgICB0aGVfY2hhciA9ICpidWZwdHIrKzsKKyAgICByZXR1cm4gVUNoYXIodGhlX2NoYXIpOworfQorCitzdGF0aWMgdm9pZAorcHVzaF9iYWNrKGNoYXIgYykKKy8qIHB1c2ggYSBjaGFyYWN0ZXIgYmFjayBvbnRvIHRoZSBpbnB1dCBzdHJlYW0gKi8KK3sKKyAgICBpZiAoYnVmcHRyID09IGJ1ZnN0YXJ0KQorCV9uY19zeXNlcnJfYWJvcnQoIkNhbid0IGJhY2tzcGFjZSBvZmYgYmVnaW5uaW5nIG9mIGxpbmUiKTsKKyAgICAqLS1idWZwdHIgPSBjOworICAgIF9uY19jdXJyX2NvbC0tOworfQorCitzdGF0aWMgbG9uZworc3RyZWFtX3Bvcyh2b2lkKQorLyogcmV0dXJuIG91ciBjdXJyZW50IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyZWFtICovCit7CisgICAgcmV0dXJuICh5eWluID8gZnRlbGwoeXlpbikgOiAoYnVmcHRyID8gYnVmcHRyIC0gYnVmc3RhcnQgOiAwKSk7Cit9CisKK3N0YXRpYyBib29sCitlbmRfb2Zfc3RyZWFtKHZvaWQpCisvKiBhcmUgd2UgYXQgZW5kIG9mIGlucHV0PyAqLworeworICAgIHJldHVybiAoKHl5aW4gPyBmZW9mKHl5aW4pIDogKGJ1ZnB0ciAmJiAqYnVmcHRyID09ICdcMCcpKQorCSAgICA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qIEFzc3VtZSB3ZSBtYXkgYmUgbG9va2luZyBhdCBhIHRlcm1jYXAtc3R5bGUgY29udGludWF0aW9uICovCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgaW50CitlYXRfZXNjYXBlZF9uZXdsaW5lKGludCBjaCkKK3sKKyAgICBpZiAoY2ggPT0gJ1xcJykKKwl3aGlsZSAoKGNoID0gbmV4dF9jaGFyKCkpID09ICdcbicgfHwgaXN3aGl0ZShjaCkpCisJICAgIGNvbnRpbnVlOworICAgIHJldHVybiBjaDsKK30KKworI2RlZmluZSBUT0tfQlVGX1NJWkUgTUFYX0VOVFJZX1NJWkUKKworI2RlZmluZSBPa1RvQWRkKCkgXAorCSgodG9rX3B0ciAtIHRva19idWYpIDwgKFRPS19CVUZfU0laRSAtIDIpKQorCisjZGVmaW5lIEFkZENoKGNoKSBcCisJKnRva19wdHIrKyA9IChjaGFyKSBjaDsgXAorCSp0b2tfcHRyID0gJ1wwJworCisvKgorICoJaW50CisgKglnZXRfdG9rZW4oKQorICoKKyAqCVNjYW5zIHRoZSBpbnB1dCBmb3IgdGhlIG5leHQgdG9rZW4sIHN0b3JpbmcgdGhlIHNwZWNpZmljcyBpbiB0aGUKKyAqCWdsb2JhbCBzdHJ1Y3R1cmUgJ2N1cnJfdG9rZW4nIGFuZCByZXR1cm5pbmcgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKgorICoJCU5BTUVTCQlBIGxpbmUgYmVnaW5uaW5nIGluIGNvbHVtbiAxLiAgJ25hbWUnCisgKgkJCQl3aWxsIGJlIHNldCB0byBwb2ludCB0byBldmVyeXRoaW5nIHVwIHRvIGJ1dAorICoJCQkJbm90IGluY2x1ZGluZyB0aGUgZmlyc3Qgc2VwYXJhdG9yIG9uIHRoZSBsaW5lLgorICoJCUJPT0xFQU4JCUFuIGVudHJ5IGNvbnNpc3Rpbmcgb2YgYSBuYW1lIGZvbGxvd2VkIGJ5CisgKgkJCQlhIHNlcGFyYXRvci4gICduYW1lJyB3aWxsIGJlIHNldCB0byBwb2ludCB0bworICoJCQkJdGhlIG5hbWUgb2YgdGhlIGNhcGFiaWxpdHkuCisgKgkJTlVNQkVSCQlBbiBlbnRyeSBvZiB0aGUgZm9ybQorICoJCQkJCW5hbWUjZGlnaXRzLAorICoJCQkJJ25hbWUnIHdpbGwgYmUgc2V0IHRvIHBvaW50IHRvIHRoZSBjYXBhYmlsaXR5CisgKgkJCQluYW1lIGFuZCAndmFsbnVtYmVyJyB0byB0aGUgbnVtYmVyIGdpdmVuLgorICoJCVNUUklORwkJQW4gZW50cnkgb2YgdGhlIGZvcm0KKyAqCQkJCQluYW1lPWNoYXJhY3RlcnMsCisgKgkJCQknbmFtZScgaXMgc2V0IHRvIHRoZSBjYXBhYmlsaXR5IG5hbWUgYW5kCisgKgkJCQkndmFsc3RyaW5nJyB0byB0aGUgc3RyaW5nIG9mIGNoYXJhY3RlcnMsIHdpdGgKKyAqCQkJCWlucHV0IHRyYW5zbGF0aW9ucyBkb25lLgorICoJCUNBTkNFTAkJQW4gZW50cnkgb2YgdGhlIGZvcm0KKyAqCQkJCQluYW1lQCwKKyAqCQkJCSduYW1lJyBpcyBzZXQgdG8gdGhlIGNhcGFiaWxpdHkgbmFtZSBhbmQKKyAqCQkJCSd2YWxudW1iZXInIHRvIC0xLgorICoJCUVPRgkJVGhlIGVuZCBvZiB0aGUgZmlsZSBoYXMgYmVlbiByZWFjaGVkLgorICoKKyAqCUEgYHNlcGFyYXRvcicgaXMgZWl0aGVyIGEgY29tbWEgb3IgYSBzZW1pY29sb24sIGRlcGVuZGluZyBvbiB3aGV0aGVyCisgKgl3ZSBhcmUgaW4gdGVybWNhcCBvciB0ZXJtaW5mbyBtb2RlLgorICoKKyAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZ2V0X3Rva2VuKGJvb2wgc2lsZW50KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIHRlcm1pbmZvX3B1bmN0W10gPSAiQCUmKiEjIjsKKyAgICBzdGF0aWMgY2hhciAqdG9rX2J1ZjsKKworICAgIGNoYXIgKmFmdGVyX2xpc3Q7CisgICAgY2hhciAqYWZ0ZXJfbmFtZTsKKyAgICBjaGFyICpudW1jaGs7CisgICAgY2hhciAqdG9rX3B0cjsKKyAgICBjaGFyICpzOworICAgIGNoYXIgbnVtYnVmWzgwXTsKKyAgICBpbnQgY2g7CisgICAgaW50IGRvdF9mbGFnID0gRkFMU0U7CisgICAgaW50IHR5cGU7CisgICAgbG9uZyBudW1iZXI7CisgICAgbG9uZyB0b2tlbl9zdGFydDsKKyAgICB1bnNpZ25lZCBmb3VuZDsKKyNpZmRlZiBUUkFDRQorICAgIGludCBvbGRfbGluZTsKKyAgICBpbnQgb2xkX2NvbDsKKyNlbmRpZgorCisgICAgaWYgKHB1c2h0eXBlICE9IE5PX1BVU0hCQUNLKSB7CisJaW50IHJldHZhbCA9IHB1c2h0eXBlOworCisJX25jX3NldF90eXBlKHB1c2huYW1lICE9IDAgPyBwdXNobmFtZSA6ICIiKTsKKwlERUJVRygzLCAoInB1c2hlZC1iYWNrIHRva2VuOiBgJXMnLCBjbGFzcyAlZCIsCisJCSAgX25jX2N1cnJfdG9rZW4udGtfbmFtZSwgcHVzaHR5cGUpKTsKKworCXB1c2h0eXBlID0gTk9fUFVTSEJBQ0s7CisJaWYgKHB1c2huYW1lICE9IDApCisJICAgIHB1c2huYW1lWzBdID0gJ1wwJzsKKworCS8qIGN1cnJ0b2sgd2Fzbid0IGFsdGVyZWQgYnkgX25jX3B1c2hfdG9rZW4oKSAqLworCXJldHVybiAocmV0dmFsKTsKKyAgICB9CisKKyAgICBpZiAoZW5kX29mX3N0cmVhbSgpKSB7CisJeXlpbiA9IDA7CisJbmV4dF9jaGFyKCk7CQkvKiBmcmVlcyBpdHMgYWxsb2NhdGVkIG1lbW9yeSAqLworCWlmICh0b2tfYnVmICE9IDApIHsKKwkgICAgaWYgKF9uY19jdXJyX3Rva2VuLnRrX25hbWUgPT0gdG9rX2J1ZikKKwkJX25jX2N1cnJfdG9rZW4udGtfbmFtZSA9IDA7CisJICAgIEZyZWVBbmROdWxsKHRva19idWYpOworCX0KKwlyZXR1cm4gKEVPRik7CisgICAgfQorCisgIHN0YXJ0X3Rva2VuOgorICAgIHRva2VuX3N0YXJ0ID0gc3RyZWFtX3BvcygpOworICAgIHdoaWxlICgoY2ggPSBuZXh0X2NoYXIoKSkgPT0gJ1xuJyB8fCBpc3doaXRlKGNoKSkgeworCWlmIChjaCA9PSAnXG4nKQorCSAgICBoYWRfbmV3bGluZSA9IFRSVUU7CisJY29udGludWU7CisgICAgfQorCisgICAgY2ggPSBlYXRfZXNjYXBlZF9uZXdsaW5lKGNoKTsKKworI2lmZGVmIFRSQUNFCisgICAgb2xkX2xpbmUgPSBfbmNfY3Vycl9saW5lOworICAgIG9sZF9jb2wgPSBfbmNfY3Vycl9jb2w7CisjZW5kaWYKKyAgICBpZiAoY2ggPT0gRU9GKQorCXR5cGUgPSBFT0Y7CisgICAgZWxzZSB7CisJLyogaWYgdGhpcyBpcyBhIHRlcm1jYXAgZW50cnksIHNraXAgYSBsZWFkaW5nIHNlcGFyYXRvciAqLworCWlmIChzZXBhcmF0b3IgPT0gJzonICYmIGNoID09ICc6JykKKwkgICAgY2ggPSBuZXh0X2NoYXIoKTsKKworCWlmIChjaCA9PSAnLicKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworCSAgICAmJiAhX25jX2Rpc2FibGVfcGVyaW9kCisjZW5kaWYKKwkgICAgKSB7CisJICAgIGRvdF9mbGFnID0gVFJVRTsKKwkgICAgREVCVUcoOCwgKCJkb3QtZmxhZyBzZXQiKSk7CisKKwkgICAgd2hpbGUgKChjaCA9IG5leHRfY2hhcigpKSA9PSAnLicgfHwgaXN3aGl0ZShjaCkpCisJCWNvbnRpbnVlOworCX0KKworCWlmIChjaCA9PSBFT0YpIHsKKwkgICAgdHlwZSA9IEVPRjsKKwkgICAgZ290byBlbmRfb2ZfdG9rZW47CisJfQorCisJLyogaGF2ZSB0byBtYWtlIHNvbWUgcHVuY3R1YXRpb24gY2hhcnMgbGVnYWwgZm9yIHRlcm1pbmZvICovCisJaWYgKCFpc2FsbnVtKFVDaGFyKGNoKSkKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworCSAgICAmJiAhKGNoID09ICcuJyAmJiBfbmNfZGlzYWJsZV9wZXJpb2QpCisjZW5kaWYKKwkgICAgJiYgIXN0cmNocih0ZXJtaW5mb19wdW5jdCwgKGNoYXIpIGNoKSkgeworCSAgICBpZiAoIXNpbGVudCkKKwkJX25jX3dhcm5pbmcoIklsbGVnYWwgY2hhcmFjdGVyIChleHBlY3RlZCBhbHBoYW51bWVyaWMgb3IgJXMpIC0gJyVzJyIsCisJCQkgICAgdGVybWluZm9fcHVuY3QsIHVuY3RybCgoY2h0eXBlKSBjaCkpOworCSAgICBfbmNfcGFuaWNfbW9kZShzZXBhcmF0b3IpOworCSAgICBnb3RvIHN0YXJ0X3Rva2VuOworCX0KKworCWlmICh0b2tfYnVmID09IDApCisJICAgIHRva19idWYgPSB0eXBlTWFsbG9jKGNoYXIsIFRPS19CVUZfU0laRSk7CisKKyNpZmRlZiBUUkFDRQorCW9sZF9saW5lID0gX25jX2N1cnJfbGluZTsKKwlvbGRfY29sID0gX25jX2N1cnJfY29sOworI2VuZGlmCisJdG9rX3B0ciA9IHRva19idWY7CisJQWRkQ2goY2gpOworCisJaWYgKGZpcnN0X2NvbHVtbikgeworCSAgICBfbmNfY29tbWVudF9zdGFydCA9IHRva2VuX3N0YXJ0OworCSAgICBfbmNfY29tbWVudF9lbmQgPSBfbmNfY3Vycl9maWxlX3BvczsKKwkgICAgX25jX3N0YXJ0X2xpbmUgPSBfbmNfY3Vycl9saW5lOworCisJICAgIF9uY19zeW50YXggPSBFUlI7CisJICAgIGFmdGVyX25hbWUgPSAwOworCSAgICBhZnRlcl9saXN0ID0gMDsKKwkgICAgd2hpbGUgKChjaCA9IG5leHRfY2hhcigpKSAhPSAnXG4nKSB7CisJCWlmIChjaCA9PSBFT0YpIHsKKwkJICAgIF9uY19lcnJfYWJvcnQoTVNHX05PX0lOUFVUUyk7CisJCX0gZWxzZSBpZiAoY2ggPT0gJ3wnKSB7CisJCSAgICBhZnRlcl9saXN0ID0gdG9rX3B0cjsKKwkJICAgIGlmIChhZnRlcl9uYW1lID09IDApCisJCQlhZnRlcl9uYW1lID0gdG9rX3B0cjsKKwkJfSBlbHNlIGlmIChjaCA9PSAnOicgJiYgbGFzdF9jaGFyKCkgIT0gJywnKSB7CisJCSAgICBfbmNfc3ludGF4ID0gU1lOX1RFUk1DQVA7CisJCSAgICBzZXBhcmF0b3IgPSAnOic7CisJCSAgICBicmVhazsKKwkJfSBlbHNlIGlmIChjaCA9PSAnLCcpIHsKKwkJICAgIF9uY19zeW50YXggPSBTWU5fVEVSTUlORk87CisJCSAgICBzZXBhcmF0b3IgPSAnLCc7CisJCSAgICAvKgorCQkgICAgICogSWYgd2UgZGlkIG5vdCBzZWUgYSAnfCcsIHRoZW4gd2UgZm91bmQgYSBuYW1lIHdpdGggbm8KKwkJICAgICAqIGFsaWFzZXMgb3IgZGVzY3JpcHRpb24uCisJCSAgICAgKi8KKwkJICAgIGlmIChhZnRlcl9uYW1lID09IDApCisJCQlicmVhazsKKwkJICAgIC8qCisJCSAgICAgKiBJZiB3ZSBzZWUgYSBjb21tYSwgd2UgYXNzdW1lIHRoaXMgaXMgdGVybWluZm8gdW5sZXNzIHdlCisJCSAgICAgKiBzdWJzZXF1ZW50bHkgcnVuIGludG8gYSBjb2xvbi4gIEJ1dCB3ZSBkb24ndCBzdG9wCisJCSAgICAgKiBsb29raW5nIGZvciBhIGNvbG9uIHVudGlsIGhpdHRpbmcgYSBuZXdsaW5lLiAgVGhpcworCQkgICAgICogYWxsb3dzIGNvbW1hcyB0byBiZSBlbWJlZGRlZCBpbiBkZXNjcmlwdGlvbiBmaWVsZHMgb2YKKwkJICAgICAqIGVpdGhlciBzeW50YXguCisJCSAgICAgKi8KKwkJfSBlbHNlCisJCSAgICBjaCA9IGVhdF9lc2NhcGVkX25ld2xpbmUoY2gpOworCisJCWlmIChPa1RvQWRkKCkpIHsKKwkJICAgIEFkZENoKGNoKTsKKwkJfSBlbHNlIHsKKwkJICAgIGNoID0gRU9GOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICAqdG9rX3B0ciA9ICdcMCc7CisJICAgIGlmIChfbmNfc3ludGF4ID09IEVSUikgeworCQkvKgorCQkgKiBHcnJyLi4ud2hhdCB3ZSBvdWdodCB0byBkbyBoZXJlIGlzIGJhcmYsIGNvbXBsYWluaW5nIHRoYXQKKwkJICogdGhlIGVudHJ5IGlzIG1hbGZvcm1lZC4gIEJ1dCBiZWNhdXNlIGEgY291cGxlIG9mIG5hbWUgZmllbGRzCisJCSAqIGluIHRoZSA4LjIgdGVybWNhcCBmaWxlIGVuZCB3aXRoIHxcLCB3ZSBqdXN0IGhhdmUgdG8gYXNzdW1lCisJCSAqIGl0J3MgdGVybWNhcCBzeW50YXguCisJCSAqLworCQlfbmNfc3ludGF4ID0gU1lOX1RFUk1DQVA7CisJCXNlcGFyYXRvciA9ICc6JzsKKwkgICAgfSBlbHNlIGlmIChfbmNfc3ludGF4ID09IFNZTl9URVJNSU5GTykgeworCQkvKiB0aHJvdyBhd2F5IHRyYWlsaW5nIC8sICokLyAqLworCQlmb3IgKC0tdG9rX3B0cjsKKwkJICAgICBpc3doaXRlKCp0b2tfcHRyKSB8fCAqdG9rX3B0ciA9PSAnLCc7CisJCSAgICAgdG9rX3B0ci0tKQorCQkgICAgY29udGludWU7CisJCXRva19wdHJbMV0gPSAnXDAnOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogVGhpcyBpcyB0aGUgc29vbmVzdCB3ZSBoYXZlIHRoZSB0ZXJtaW5hbCBuYW1lIGZldGNoZWQuICBTZXQgdXAKKwkgICAgICogZm9yIGZvbGxvd2luZyB3YXJuaW5nIG1lc3NhZ2VzLiAgSWYgdGhlcmUncyBubyAnfCcsIHRoZW4gdGhlcmUKKwkgICAgICogaXMgbm8gZGVzY3JpcHRpb24uCisJICAgICAqLworCSAgICBpZiAoYWZ0ZXJfbmFtZSAhPSAwKSB7CisJCWNoID0gKmFmdGVyX25hbWU7CisJCSphZnRlcl9uYW1lID0gJ1wwJzsKKwkJX25jX3NldF90eXBlKHRva19idWYpOworCQkqYWZ0ZXJfbmFtZSA9IChjaGFyKSBjaDsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIENvbXB1dGUgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhlIGFsaWFzZXMgYW5kIHRoZSBkZXNjcmlwdGlvbgorCSAgICAgKiBmaWVsZCBmb3Igc3ludGF4LWNoZWNraW5nIHB1cnBvc2VzLgorCSAgICAgKi8KKwkgICAgaWYgKGFmdGVyX2xpc3QgIT0gMCkgeworCQlpZiAoIXNpbGVudCkgeworCQkgICAgaWYgKCphZnRlcl9saXN0ID09ICdcMCcpCisJCQlfbmNfd2FybmluZygiZW1wdHkgbG9uZ25hbWUgZmllbGQiKTsKKwkJICAgIGVsc2UgaWYgKHN0cmNocihhZnRlcl9saXN0LCAnICcpID09IDApCisJCQlfbmNfd2FybmluZygib2xkZXIgdGljIHZlcnNpb25zIG1heSB0cmVhdCB0aGUgZGVzY3JpcHRpb24gZmllbGQgYXMgYW4gYWxpYXMiKTsKKwkJfQorCSAgICB9IGVsc2UgeworCQlhZnRlcl9saXN0ID0gdG9rX2J1ZiArIHN0cmxlbih0b2tfYnVmKTsKKwkJREVCVUcoMSwgKCJtaXNzaW5nIGRlc2NyaXB0aW9uIikpOworCSAgICB9CisKKwkgICAgLyoKKwkgICAgICogV2hpdGVzcGFjZSBpbiBhIG5hbWUgZmllbGQgb3RoZXIgdGhhbiB0aGUgbG9uZyBuYW1lIGNhbiBjb25mdXNlCisJICAgICAqIHJkaXN0IGFuZCBzb21lIHRlcm1jYXAgdG9vbHMuICBTbGFzaGVzIGFyZSBhIG5vLW5vLiAgT3RoZXIKKwkgICAgICogc3BlY2lhbCBjaGFyYWN0ZXJzIGNhbiBiZSBkYW5nZXJvdXMgZHVlIHRvIHNoZWxsIGV4cGFuc2lvbi4KKwkgICAgICovCisJICAgIGZvciAocyA9IHRva19idWY7IHMgPCBhZnRlcl9saXN0OyArK3MpIHsKKwkJaWYgKGlzc3BhY2UoVUNoYXIoKnMpKSkgeworCQkgICAgaWYgKCFzaWxlbnQpCisJCQlfbmNfd2FybmluZygid2hpdGVzcGFjZSBpbiBuYW1lIG9yIGFsaWFzIGZpZWxkIik7CisJCSAgICBicmVhazsKKwkJfSBlbHNlIGlmICgqcyA9PSAnLycpIHsKKwkJICAgIGlmICghc2lsZW50KQorCQkJX25jX3dhcm5pbmcoInNsYXNoZXMgYXJlbid0IGFsbG93ZWQgaW4gbmFtZXMgb3IgYWxpYXNlcyIpOworCQkgICAgYnJlYWs7CisJCX0gZWxzZSBpZiAoc3RyY2hyKCIkW10hKj8iLCAqcykpIHsKKwkJICAgIGlmICghc2lsZW50KQorCQkJX25jX3dhcm5pbmcoImR1YmlvdXMgY2hhcmFjdGVyIGAlYycgaW4gbmFtZSBvciBhbGlhcyBmaWVsZCIsICpzKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgICBfbmNfY3Vycl90b2tlbi50a19uYW1lID0gdG9rX2J1ZjsKKwkgICAgdHlwZSA9IE5BTUVTOworCX0gZWxzZSB7CisJICAgIGlmIChoYWRfbmV3bGluZSAmJiBfbmNfc3ludGF4ID09IFNZTl9URVJNQ0FQKSB7CisJCV9uY193YXJuaW5nKCJNaXNzaW5nIGJhY2tzbGFzaCBiZWZvcmUgbmV3bGluZSIpOworCQloYWRfbmV3bGluZSA9IEZBTFNFOworCSAgICB9CisJICAgIHdoaWxlICgoY2ggPSBuZXh0X2NoYXIoKSkgIT0gRU9GKSB7CisJCWlmICghaXNhbG51bShVQ2hhcihjaCkpKSB7CisJCSAgICBpZiAoX25jX3N5bnRheCA9PSBTWU5fVEVSTUlORk8pIHsKKwkJCWlmIChjaCAhPSAnXycpCisJCQkgICAgYnJlYWs7CisJCSAgICB9IGVsc2UgewkvKiBhbGxvdyAnOycgZm9yICJrOyIgKi8KKwkJCWlmIChjaCAhPSAnOycpCisJCQkgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkJaWYgKE9rVG9BZGQoKSkgeworCQkgICAgQWRkQ2goY2gpOworCQl9IGVsc2UgeworCQkgICAgY2ggPSBFT0Y7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgICAgKnRva19wdHIrKyA9ICdcMCc7CS8qIHNlcGFyYXRlIG5hbWUvdmFsdWUgaW4gYnVmZmVyICovCisJICAgIHN3aXRjaCAoY2gpIHsKKwkgICAgY2FzZSAnLCc6CisJICAgIGNhc2UgJzonOgorCQlpZiAoY2ggIT0gc2VwYXJhdG9yKQorCQkgICAgX25jX2Vycl9hYm9ydCgiU2VwYXJhdG9yIGluY29uc2lzdGVudCB3aXRoIHN5bnRheCIpOworCQlfbmNfY3Vycl90b2tlbi50a19uYW1lID0gdG9rX2J1ZjsKKwkJdHlwZSA9IEJPT0xFQU47CisJCWJyZWFrOworCSAgICBjYXNlICdAJzoKKwkJaWYgKChjaCA9IG5leHRfY2hhcigpKSAhPSBzZXBhcmF0b3IgJiYgIXNpbGVudCkKKwkJICAgIF9uY193YXJuaW5nKCJNaXNzaW5nIHNlcGFyYXRvciBhZnRlciBgJXMnLCBoYXZlICVzIiwKKwkJCQl0b2tfYnVmLCB1bmN0cmwoKGNodHlwZSkgY2gpKTsKKwkJX25jX2N1cnJfdG9rZW4udGtfbmFtZSA9IHRva19idWY7CisJCXR5cGUgPSBDQU5DRUw7CisJCWJyZWFrOworCisJICAgIGNhc2UgJyMnOgorCQlmb3VuZCA9IDA7CisJCXdoaWxlIChpc2FsbnVtKGNoID0gbmV4dF9jaGFyKCkpKSB7CisJCSAgICBudW1idWZbZm91bmQrK10gPSAoY2hhcikgY2g7CisJCSAgICBpZiAoZm91bmQgPj0gc2l6ZW9mKG51bWJ1ZikgLSAxKQorCQkJYnJlYWs7CisJCX0KKwkJbnVtYnVmW2ZvdW5kXSA9ICdcMCc7CisJCW51bWJlciA9IHN0cnRvbChudW1idWYsICZudW1jaGssIDApOworCQlpZiAoIXNpbGVudCkgeworCQkgICAgaWYgKG51bWNoayA9PSBudW1idWYpCisJCQlfbmNfd2FybmluZygibm8gdmFsdWUgZ2l2ZW4gZm9yIGAlcyciLCB0b2tfYnVmKTsKKwkJICAgIGlmICgoKm51bWNoayAhPSAnXDAnKSB8fCAoY2ggIT0gc2VwYXJhdG9yKSkKKwkJCV9uY193YXJuaW5nKCJNaXNzaW5nIHNlcGFyYXRvciIpOworCQl9CisJCV9uY19jdXJyX3Rva2VuLnRrX25hbWUgPSB0b2tfYnVmOworCQlfbmNfY3Vycl90b2tlbi50a192YWxudW1iZXIgPSBudW1iZXI7CisJCXR5cGUgPSBOVU1CRVI7CisJCWJyZWFrOworCisJICAgIGNhc2UgJz0nOgorCQljaCA9IF9uY190cmFuc19zdHJpbmcodG9rX3B0ciwgdG9rX2J1ZiArIFRPS19CVUZfU0laRSk7CisJCWlmICghc2lsZW50ICYmIGNoICE9IHNlcGFyYXRvcikKKwkJICAgIF9uY193YXJuaW5nKCJNaXNzaW5nIHNlcGFyYXRvciIpOworCQlfbmNfY3Vycl90b2tlbi50a19uYW1lID0gdG9rX2J1ZjsKKwkJX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nID0gdG9rX3B0cjsKKwkJdHlwZSA9IFNUUklORzsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBFT0Y6CisJCXR5cGUgPSBFT0Y7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQkvKiBqdXN0IHRvIGdldCByaWQgb2YgdGhlIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwkJdHlwZSA9IFVOREVGOworCQlpZiAoIXNpbGVudCkKKwkJICAgIF9uY193YXJuaW5nKCJJbGxlZ2FsIGNoYXJhY3RlciAtICclcyciLCB1bmN0cmwoKGNodHlwZSkgY2gpKTsKKwkgICAgfQorCX0JCQkvKiBlbmQgZWxzZSAoZmlyc3RfY29sdW1uID09IEZBTFNFKSAqLworICAgIH0JCQkJLyogZW5kIGVsc2UgKGNoICE9IEVPRikgKi8KKworICBlbmRfb2ZfdG9rZW46CisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChkb3RfZmxhZyA9PSBUUlVFKQorCURFQlVHKDgsICgiQ29tbWVudGVkIG91dCAiKSk7CisKKyAgICBpZiAoX25jX3RyYWNpbmcgPj0gREVCVUdfTEVWRUwoOCkpIHsKKwlfdHJhY2VmKCJwYXJzZWQgJWQuJWQgdG8gJWQuJWQiLAorCQlvbGRfbGluZSwgb2xkX2NvbCwKKwkJX25jX2N1cnJfbGluZSwgX25jX2N1cnJfY29sKTsKKyAgICB9CisgICAgaWYgKF9uY190cmFjaW5nID49IERFQlVHX0xFVkVMKDcpKSB7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICBfdHJhY2VmKCJUb2tlbjogQm9vbGVhbjsgbmFtZT0nJXMnIiwKKwkJICAgIF9uY19jdXJyX3Rva2VuLnRrX25hbWUpOworCSAgICBicmVhazsKKworCWNhc2UgTlVNQkVSOgorCSAgICBfdHJhY2VmKCJUb2tlbjogTnVtYmVyOyAgbmFtZT0nJXMnLCB2YWx1ZT0lZCIsCisJCSAgICBfbmNfY3Vycl90b2tlbi50a19uYW1lLAorCQkgICAgX25jX2N1cnJfdG9rZW4udGtfdmFsbnVtYmVyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIFNUUklORzoKKwkgICAgX3RyYWNlZigiVG9rZW46IFN0cmluZzsgIG5hbWU9JyVzJywgdmFsdWU9JXMiLAorCQkgICAgX25jX2N1cnJfdG9rZW4udGtfbmFtZSwKKwkJICAgIF9uY192aXNidWYoX25jX2N1cnJfdG9rZW4udGtfdmFsc3RyaW5nKSk7CisJICAgIGJyZWFrOworCisJY2FzZSBDQU5DRUw6CisJICAgIF90cmFjZWYoIlRva2VuOiBDYW5jZWw7IG5hbWU9JyVzJyIsCisJCSAgICBfbmNfY3Vycl90b2tlbi50a19uYW1lKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIE5BTUVTOgorCisJICAgIF90cmFjZWYoIlRva2VuOiBOYW1lczsgdmFsdWU9JyVzJyIsCisJCSAgICBfbmNfY3Vycl90b2tlbi50a19uYW1lKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEVPRjoKKwkgICAgX3RyYWNlZigiVG9rZW46IEVuZCBvZiBmaWxlIik7CisJICAgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgX25jX3dhcm5pbmcoIkJhZCB0b2tlbiB0eXBlIik7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGRvdF9mbGFnID09IFRSVUUpCS8qIGlmIGNvbW1lbnRlZCBvdXQsIHVzZSB0aGUgbmV4dCBvbmUgKi8KKwl0eXBlID0gX25jX2dldF90b2tlbihzaWxlbnQpOworCisgICAgREVCVUcoMywgKCJ0b2tlbjogYCVzJywgY2xhc3MgJWQiLAorCSAgICAgICgoX25jX2N1cnJfdG9rZW4udGtfbmFtZSAhPSAwKQorCSAgICAgICA/IF9uY19jdXJyX3Rva2VuLnRrX25hbWUKKwkgICAgICAgOiAiPG51bGw+IiksCisJICAgICAgdHlwZSkpOworCisgICAgcmV0dXJuICh0eXBlKTsKK30KKworLyoKKyAqCWNoYXIKKyAqCXRyYW5zX3N0cmluZyhwdHIpCisgKgorICoJUmVhZHMgY2hhcmFjdGVycyB1c2luZyBuZXh0X2NoYXIoKSB1bnRpbCBlbmNvdW50ZXJpbmcgYSBzZXBhcmF0b3IsIG5sLAorICoJb3IgZW5kLW9mLWZpbGUuICBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlIGNoYXJhY3RlciB3aGljaCBjYXVzZWQKKyAqCXJlYWRpbmcgdG8gc3RvcC4gIFRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb25zIGFyZSBkb25lIG9uIHRoZSBpbnB1dDoKKyAqCisgKgkJXlggIGdvZXMgdG8gIGN0cmwtWCAoaS5lLiBYICYgMDM3KQorICoJCXtcRSxcbixccixcYixcdCxcZn0gIGdvIHRvCisgKgkJCXtFU0NBUEUsbmV3bGluZSxjYXJyaWFnZS1yZXR1cm4sYmFja3NwYWNlLHRhYixmb3JtZmVlZH0KKyAqCQl7XF4sXFx9ICBnbyB0byAge2NhcmF0LGJhY2tzbGFzaH0KKyAqCQlcZGRkIChmb3IgZGRkID0gdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzKSAgZ29lcyB0byB0aGUgY2hhcmFjdGVyIGRkZAorICoKKyAqCQlcZSA9PSBcRQorICoJCVwwID09IFwyMDAKKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3RyYW5zX3N0cmluZyhjaGFyICpwdHIsIGNoYXIgKmxhc3QpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgbnVtYmVyID0gMDsKKyAgICBpbnQgaSwgYzsKKyAgICBjaHR5cGUgY2gsIGxhc3RfY2ggPSAnXDAnOworICAgIGJvb2wgaWdub3JlZCA9IEZBTFNFOworICAgIGJvb2wgbG9uZ193YXJuaW5nID0gRkFMU0U7CisKKyAgICB3aGlsZSAoKGNoID0gYyA9IG5leHRfY2hhcigpKSAhPSAoY2h0eXBlKSBzZXBhcmF0b3IgJiYgYyAhPSBFT0YpIHsKKwlpZiAocHRyID49IChsYXN0IC0gMSkpIHsKKwkgICAgaWYgKGMgIT0gRU9GKSB7CisJCXdoaWxlICgoYyA9IG5leHRfY2hhcigpKSAhPSBzZXBhcmF0b3IgJiYgYyAhPSBFT0YpIHsKKwkJICAgIDsKKwkJfQorCQljaCA9IGM7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWlmICgoX25jX3N5bnRheCA9PSBTWU5fVEVSTUNBUCkgJiYgYyA9PSAnXG4nKQorCSAgICBicmVhazsKKwlpZiAoY2ggPT0gJ14nICYmIGxhc3RfY2ggIT0gJyUnKSB7CisJICAgIGNoID0gYyA9IG5leHRfY2hhcigpOworCSAgICBpZiAoYyA9PSBFT0YpCisJCV9uY19lcnJfYWJvcnQoTVNHX05PX0lOUFVUUyk7CisKKwkgICAgaWYgKCEoaXM3Yml0cyhjaCkgJiYgaXNwcmludChjaCkpKSB7CisJCV9uY193YXJuaW5nKCJJbGxlZ2FsIF4gY2hhcmFjdGVyIC0gJyVzJyIsIHVuY3RybChjaCkpOworCSAgICB9CisJICAgIGlmIChjaCA9PSAnPycpIHsKKwkJKihwdHIrKykgPSAnXDE3Nyc7CisJCWlmIChfbmNfdHJhY2luZykKKwkJICAgIF9uY193YXJuaW5nKCJBbGxvdyBePyBhcyBzeW5vbnltIGZvciBcXDE3NyIpOworCSAgICB9IGVsc2UgeworCQlpZiAoKGNoICY9IDAzNykgPT0gMCkKKwkJICAgIGNoID0gMTI4OworCQkqKHB0cisrKSA9IChjaGFyKSAoY2gpOworCSAgICB9CisJfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7CisJICAgIGNoID0gYyA9IG5leHRfY2hhcigpOworCSAgICBpZiAoYyA9PSBFT0YpCisJCV9uY19lcnJfYWJvcnQoTVNHX05PX0lOUFVUUyk7CisKKwkgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpIHsKKwkJbnVtYmVyID0gY2ggLSAnMCc7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJICAgIGNoID0gYyA9IG5leHRfY2hhcigpOworCQkgICAgaWYgKGMgPT0gRU9GKQorCQkJX25jX2Vycl9hYm9ydChNU0dfTk9fSU5QVVRTKTsKKworCQkgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykgeworCQkJaWYgKGlzZGlnaXQoYykpIHsKKwkJCSAgICBfbmNfd2FybmluZygiTm9uLW9jdGFsIGRpZ2l0IGAlYycgaW4gXFwgc2VxdWVuY2UiLCBjKTsKKwkJCSAgICAvKiBhbGxvdyB0aGUgZGlnaXQ7IGl0J2xsIGRvIGxlc3MgaGFybSAqLworCQkJfSBlbHNlIHsKKwkJCSAgICBwdXNoX2JhY2soKGNoYXIpIGMpOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCisJCSAgICBudW1iZXIgPSBudW1iZXIgKiA4ICsgYyAtICcwJzsKKwkJfQorCisJCWlmIChudW1iZXIgPT0gMCkKKwkJICAgIG51bWJlciA9IDAyMDA7CisJCSoocHRyKyspID0gKGNoYXIpIG51bWJlcjsKKwkgICAgfSBlbHNlIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ0UnOgorCQljYXNlICdlJzoKKwkJICAgICoocHRyKyspID0gJ1wwMzMnOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAnYSc6CisJCSAgICAqKHB0cisrKSA9ICdcMDA3JzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJ2wnOgorCQljYXNlICduJzoKKwkJICAgICoocHRyKyspID0gJ1xuJzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJ3InOgorCQkgICAgKihwdHIrKykgPSAnXHInOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAnYic6CisJCSAgICAqKHB0cisrKSA9ICdcMDEwJzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJ3MnOgorCQkgICAgKihwdHIrKykgPSAnICc7CisJCSAgICBicmVhazsKKworCQljYXNlICdmJzoKKwkJICAgICoocHRyKyspID0gJ1wwMTQnOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAndCc6CisJCSAgICAqKHB0cisrKSA9ICdcdCc7CisJCSAgICBicmVhazsKKworCQljYXNlICdcXCc6CisJCSAgICAqKHB0cisrKSA9ICdcXCc7CisJCSAgICBicmVhazsKKworCQljYXNlICdeJzoKKwkJICAgICoocHRyKyspID0gJ14nOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSAnLCc6CisJCSAgICAqKHB0cisrKSA9ICcsJzsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgJzonOgorCQkgICAgKihwdHIrKykgPSAnOic7CisJCSAgICBicmVhazsKKworCQljYXNlICdcbic6CisJCSAgICBjb250aW51ZTsKKworCQlkZWZhdWx0OgorCQkgICAgX25jX3dhcm5pbmcoIklsbGVnYWwgY2hhcmFjdGVyICclcycgaW4gXFwgc2VxdWVuY2UiLAorCQkJCXVuY3RybChjaCkpOworCQkgICAgLyogRkFMTFRIUlUgKi8KKwkJY2FzZSAnfCc6CisJCSAgICAqKHB0cisrKSA9IChjaGFyKSBjaDsKKwkJfQkJLyogZW5kc3dpdGNoIChjaCkgKi8KKwkgICAgfQkJCS8qIGVuZGVsc2UgKGNoIDwgJzAnIHx8ICBjaCA+ICc3JykgKi8KKwl9CisJLyogZW5kIGVsc2UgaWYgKGNoID09ICdcXCcpICovCisJZWxzZSBpZiAoY2ggPT0gJ1xuJyAmJiAoX25jX3N5bnRheCA9PSBTWU5fVEVSTUlORk8pKSB7CisJICAgIC8qCisJICAgICAqIE5ld2xpbmVzIGVtYmVkZGVkIGluIGEgdGVybWluZm8gc3RyaW5nIGFyZSBpZ25vcmVkLCBwcm92aWRlZAorCSAgICAgKiB0aGF0IHRoZSBuZXh0IGxpbmUgYmVnaW5zIHdpdGggd2hpdGVzcGFjZS4KKwkgICAgICovCisJICAgIGlnbm9yZWQgPSBUUlVFOworCX0gZWxzZSB7CisJICAgICoocHRyKyspID0gKGNoYXIpIGNoOworCX0KKworCWlmICghaWdub3JlZCkgeworCSAgICBpZiAoX25jX2N1cnJfY29sIDw9IDEpIHsKKwkJcHVzaF9iYWNrKChjaGFyKSBjaCk7CisJCWNoID0gJ1xuJzsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgbGFzdF9jaCA9IGNoOworCSAgICBjb3VudCsrOworCX0KKwlpZ25vcmVkID0gRkFMU0U7CisKKwlpZiAoY291bnQgPiBNQVhDQVBMRU4gJiYgIWxvbmdfd2FybmluZykgeworCSAgICBfbmNfd2FybmluZygiVmVyeSBsb25nIHN0cmluZyBmb3VuZC4gIE1pc3Npbmcgc2VwYXJhdG9yPyIpOworCSAgICBsb25nX3dhcm5pbmcgPSBUUlVFOworCX0KKyAgICB9CQkJCS8qIGVuZCB3aGlsZSAqLworCisgICAgKnB0ciA9ICdcMCc7CisKKyAgICByZXR1cm4gKGNoKTsKK30KKworLyoKKyAqCV9uY19wdXNoX3Rva2VuKCkKKyAqCisgKglQdXNoIGEgdG9rZW4gb2YgZ2l2ZW4gdHlwZSBzbyB0aGF0IGl0IHdpbGwgYmUgcmVyZWFkIGJ5IHRoZSBuZXh0CisgKglnZXRfdG9rZW4oKSBjYWxsLgorICovCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfcHVzaF90b2tlbihpbnQgdG9rY2xhc3MpCit7CisgICAgLyoKKyAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGtpbmQgb2YgYm9ndXMsIGl0IHdpbGwgZmFpbCBpZiB3ZSBldmVyIGRvIG1vcmUKKyAgICAgKiB0aGFuIG9uZSBwdXNoYmFjayBhdCBhIHRpbWUgYmV0d2VlbiBnZXRfdG9rZW4oKSBjYWxscy4gIEl0IHJlbGllcyBvbiB0aGUKKyAgICAgKiBmYWN0IHRoYXQgX25jX2N1cnJfdG9rZW4gaXMgc3RhdGljIHN0b3JhZ2UgdGhhdCBub3RoaW5nIGJ1dAorICAgICAqIF9uY19nZXRfdG9rZW4oKSB0b3VjaGVzLgorICAgICAqLworICAgIHB1c2h0eXBlID0gdG9rY2xhc3M7CisgICAgaWYgKHB1c2huYW1lID09IDApCisJcHVzaG5hbWUgPSB0eXBlTWFsbG9jKGNoYXIsIE1BWF9OQU1FX1NJWkUgKyAxKTsKKyAgICBfbmNfZ2V0X3R5cGUocHVzaG5hbWUpOworCisgICAgREVCVUcoMywgKCJwdXNoaW5nIHRva2VuOiBgJXMnLCBjbGFzcyAlZCIsCisJICAgICAgKChfbmNfY3Vycl90b2tlbi50a19uYW1lICE9IDApCisJICAgICAgID8gX25jX2N1cnJfdG9rZW4udGtfbmFtZQorCSAgICAgICA6ICI8bnVsbD4iKSwKKwkgICAgICBwdXNodHlwZSkpOworfQorCisvKgorICogUGFuaWMgbW9kZSBlcnJvciByZWNvdmVyeSAtIHNraXAgZXZlcnl0aGluZyB1bnRpbCBhICJjaCIgaXMgZm91bmQuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfcGFuaWNfbW9kZShjaGFyIGNoKQoreworICAgIGludCBjOworCisgICAgZm9yICg7OykgeworCWMgPSBuZXh0X2NoYXIoKTsKKwlpZiAoYyA9PSBjaCkKKwkgICAgcmV0dXJuOworCWlmIChjID09IEVPRikKKwkgICAgcmV0dXJuOworICAgIH0KK30KKworI2lmIE5PX0xFQUtTCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2NvbXBfc2Nhbl9sZWFrcyh2b2lkKQoreworICAgIGlmIChwdXNobmFtZSAhPSAwKSB7CisJRnJlZUFuZE51bGwocHVzaG5hbWUpOworICAgIH0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9kYl9pdGVyYXRvci5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9kYl9pdGVyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzJiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2RiX2l0ZXJhdG9yLmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJdGVyYXRvcnMgZm9yIHRlcm1pbmFsIGRhdGFiYXNlcy4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorCitNT0RVTEVfSUQoIiRJZDogZGJfaXRlcmF0b3IuYyx2IDEuNiAyMDA3LzA0LzIyIDAwOjAwOjI2IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgSGF2ZVRpY0RpcmVjdG9yeSBfbmNfZ2xvYmFscy5oYXZlX3RpY19kaXJlY3RvcnkKKyNkZWZpbmUgS2VlcFRpY0RpcmVjdG9yeSBfbmNfZ2xvYmFscy5rZWVwX3RpY19kaXJlY3RvcnkKKyNkZWZpbmUgVGljRGlyZWN0b3J5ICAgICBfbmNfZ2xvYmFscy50aWNfZGlyZWN0b3J5CisKKy8qCisgKiBSZWNvcmQgdGhlICJvZmZpY2lhbCIgbG9jYXRpb24gb2YgdGhlIHRlcm1pbmZvIGRpcmVjdG9yeSwgYWNjb3JkaW5nIHRvCisgKiB0aGUgcGxhY2Ugd2hlcmUgd2UncmUgd3JpdGluZyB0bywgb3IgdGhlIG5vcm1hbCBkZWZhdWx0LCBpZiBub3QuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY190aWNfZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgICAgaWYgKCFLZWVwVGljRGlyZWN0b3J5KSB7CisJaWYgKHBhdGggIT0gMCkgeworCSAgICBUaWNEaXJlY3RvcnkgPSBwYXRoOworCSAgICBIYXZlVGljRGlyZWN0b3J5ID0gVFJVRTsKKwl9IGVsc2UgaWYgKCFIYXZlVGljRGlyZWN0b3J5ICYmIHVzZV90ZXJtaW5mb192YXJzKCkpIHsKKwkgICAgY2hhciAqZW52cDsKKwkgICAgaWYgKChlbnZwID0gZ2V0ZW52KCJURVJNSU5GTyIpKSAhPSAwKQorCQlyZXR1cm4gX25jX3RpY19kaXIoZW52cCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gVGljRGlyZWN0b3J5OworfQorCisvKgorICogU3BlY2lhbCBmaXggdG8gcHJldmVudCB0aGUgdGVybWluZm8gZGlyZWN0b3J5IGZyb20gYmVpbmcgbW92ZWQgYWZ0ZXIgdGljCisgKiBoYXMgY2hkaXInZCB0byBpdC4gIElmIHdlIGxldCBpdCBiZSBjaGFuZ2VkLCB0aGVuIGlmICRURVJNSU5GTyBoYXMgYQorICogcmVsYXRpdmUgcGF0aCwgd2UnbGwgbG9zZSB0cmFjayBvZiB0aGUgYWN0dWFsIGRpcmVjdG9yeS4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19rZWVwX3RpY19kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgICBfbmNfdGljX2RpcihwYXRoKTsKKyAgICBLZWVwVGljRGlyZWN0b3J5ID0gVFJVRTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIGxpc3Qgb2YgOi1zZXBhcmF0ZWQgZGlyZWN0b3JpZXMsIGxvb2tpbmcgZm9yIHRoZSB0ZXJtaW5hbCB0eXBlLgorICogV2UgZG9uJ3QgdXNlIHN0cnRvayBiZWNhdXNlIGl0IGRvZXMgbm90IHNob3cgdXMgZW1wdHkgdG9rZW5zLgorICovCisjZGVmaW5lIFRoaXNEYkxpc3QJX25jX2dsb2JhbHMuZGJpX2xpc3QKKyNkZWZpbmUgVGhpc0RiU2l6ZQlfbmNfZ2xvYmFscy5kYmlfc2l6ZQorCisvKgorICogQ2xlYW51cC4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19sYXN0X2RiKHZvaWQpCit7CisgICAgaWYgKFRoaXNEYkxpc3QgIT0gMCkgeworCUZyZWVBbmROdWxsKFRoaXNEYkxpc3QpOworICAgIH0KKyAgICBUaGlzRGJTaXplID0gMDsKK30KKworLyogVGhlIFRFUk1JTkZPX0RJUlMgdmFsdWUsIGlmIGRlZmluZWQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIGJlZ2lucyB3aXRoIGEKKyAqICI6Iiwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBURVJNSU5GTy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorbmV4dF9saXN0X2l0ZW0oY29uc3QgY2hhciAqc291cmNlLCBpbnQgKm9mZnNldCkKK3sKKyAgICBpZiAoc291cmNlICE9IDApIHsKKwlGcmVlSWZOZWVkZWQoVGhpc0RiTGlzdCk7CisJVGhpc0RiTGlzdCA9IHN0cmR1cChzb3VyY2UpOworCVRoaXNEYlNpemUgPSBzdHJsZW4oc291cmNlKTsKKyAgICB9CisKKyAgICBpZiAoVGhpc0RiTGlzdCAhPSAwICYmIFRoaXNEYlNpemUgJiYgKm9mZnNldCA8IFRoaXNEYlNpemUpIHsKKwlzdGF0aWMgY2hhciBzeXN0ZW1fZGJbXSA9IFRFUk1JTkZPOworCWNoYXIgKnJlc3VsdCA9IFRoaXNEYkxpc3QgKyAqb2Zmc2V0OworCWNoYXIgKm1hcmtlciA9IHN0cmNocihyZXN1bHQsIE5DVVJTRVNfUEFUSFNFUCk7CisKKwkvKgorCSAqIFB1dCBhIG51bGwgb24gdGhlIG1hcmtlciBpZiBhIHNlcGFyYXRvciB3YXMgZm91bmQuICBTZXQgdGhlIG9mZnNldAorCSAqIHRvIHRoZSBuZXh0IHBvc2l0aW9uIGFmdGVyIHRoZSBtYXJrZXIgc28gd2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgorCSAqIGFnYWluLCB1c2luZyB0aGUgZGF0YSBhdCB0aGUgb2Zmc2V0LgorCSAqLworCWlmIChtYXJrZXIgPT0gMCkgeworCSAgICAqb2Zmc2V0ICs9IHN0cmxlbihyZXN1bHQpICsgMTsKKwkgICAgbWFya2VyID0gcmVzdWx0ICsgKm9mZnNldDsKKwl9IGVsc2UgeworCSAgICAqbWFya2VyKysgPSAwOworCSAgICAqb2Zmc2V0ID0gbWFya2VyIC0gVGhpc0RiTGlzdDsKKwl9CisJaWYgKCpyZXN1bHQgPT0gMCAmJiByZXN1bHQgIT0gKFRoaXNEYkxpc3QgKyBUaGlzRGJTaXplKSkKKwkgICAgcmVzdWx0ID0gc3lzdGVtX2RiOworCXJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIE5FWFRfREJEKHZhciwgb2Zmc2V0KSBuZXh0X2xpc3RfaXRlbSgoKm9mZnNldCA9PSAwKSA/IHZhciA6IDAsIG9mZnNldCkKKworLyoKKyAqIFRoaXMgaXMgYSBzaW1wbGUgaXRlcmF0b3Igd2hpY2ggYWxsb3dzIHRoZSBjYWxsZXIgdG8gc3RlcCB0aHJvdWdoIHRoZQorICogcG9zc2libGUgbG9jYXRpb25zIGZvciBhIHRlcm1pbmZvIGRpcmVjdG9yeS4gIG5jdXJzZXMgdXNlcyB0aGlzIHRvIGZpbmQKKyAqIHRlcm1pbmZvIGZpbGVzIHRvIHJlYWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY19uZXh0X2RiKERCRElSUyAqIHN0YXRlLCBpbnQgKm9mZnNldCkKK3sKKyAgICBjb25zdCBjaGFyICpyZXN1bHQ7CisgICAgY2hhciAqZW52cDsKKworICAgIHdoaWxlICgqc3RhdGUgPCBkYmRMQVNUKSB7CisJREJESVJTIG5leHQgPSAoREJESVJTKSAoKGludCkgKCpzdGF0ZSkgKyAxKTsKKworCXJlc3VsdCA9IDA7CisKKwlzd2l0Y2ggKCpzdGF0ZSkgeworCWNhc2UgZGJkVElDOgorCSAgICBpZiAoSGF2ZVRpY0RpcmVjdG9yeSkKKwkJcmVzdWx0ID0gX25jX3RpY19kaXIoMCk7CisJICAgIGJyZWFrOworI2lmIFVTRV9EQVRBQkFTRQorCWNhc2UgZGJkRW52T25jZToKKwkgICAgaWYgKHVzZV90ZXJtaW5mb192YXJzKCkpIHsKKwkJaWYgKChlbnZwID0gZ2V0ZW52KCJURVJNSU5GTyIpKSAhPSAwKQorCQkgICAgcmVzdWx0ID0gX25jX3RpY19kaXIoZW52cCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBkYmRIb21lOgorCSAgICBpZiAodXNlX3Rlcm1pbmZvX3ZhcnMoKSkgeworCQlyZXN1bHQgPSBfbmNfaG9tZV90ZXJtaW5mbygpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgZGJkRW52TGlzdDoKKwkgICAgaWYgKHVzZV90ZXJtaW5mb192YXJzKCkpIHsKKwkJaWYgKChyZXN1bHQgPSBORVhUX0RCRChnZXRlbnYoIlRFUk1JTkZPX0RJUlMiKSwgb2Zmc2V0KSkgIT0gMCkKKwkJICAgIG5leHQgPSAqc3RhdGU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBkYmRDZmdMaXN0OgorI2lmZGVmIFRFUk1JTkZPX0RJUlMKKwkgICAgaWYgKChyZXN1bHQgPSBORVhUX0RCRChURVJNSU5GT19ESVJTLCBvZmZzZXQpKSAhPSAwKQorCQluZXh0ID0gKnN0YXRlOworI2VuZGlmCisJICAgIGJyZWFrOworCWNhc2UgZGJkQ2ZnT25jZToKKyNpZm5kZWYgVEVSTUlORk9fRElSUworCSAgICByZXN1bHQgPSBURVJNSU5GTzsKKyNlbmRpZgorCSAgICBicmVhazsKKyNlbmRpZiAvKiBVU0VfREFUQUJBU0UgKi8KKyNpZiBVU0VfVEVSTUNBUAorCWNhc2UgZGJkRW52T25jZTI6CisJICAgIGlmICh1c2VfdGVybWluZm9fdmFycygpKSB7CisJCWlmICgoZW52cCA9IGdldGVudigiVEVSTUNBUCIpKSAhPSAwKQorCQkgICAgcmVzdWx0ID0gX25jX3RpY19kaXIoZW52cCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBkYmRFbnZMaXN0MjoKKwkgICAgaWYgKHVzZV90ZXJtaW5mb192YXJzKCkpIHsKKwkJaWYgKChyZXN1bHQgPSBORVhUX0RCRChnZXRlbnYoIlRFUk1QQVRIIiksIG9mZnNldCkpICE9IDApCisJCSAgICBuZXh0ID0gKnN0YXRlOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgZGJkQ2ZnTGlzdDI6CisJICAgIGlmICgocmVzdWx0ID0gTkVYVF9EQkQoVEVSTVBBVEgsIG9mZnNldCkpICE9IDApCisJCW5leHQgPSAqc3RhdGU7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIFVTRV9URVJNQ0FQICovCisJY2FzZSBkYmRMQVNUOgorCSAgICBicmVhazsKKwl9CisJaWYgKCpzdGF0ZSAhPSBuZXh0KSB7CisJICAgICpzdGF0ZSA9IG5leHQ7CisJICAgICpvZmZzZXQgPSAwOworCSAgICBfbmNfbGFzdF9kYigpOworCX0KKwlpZiAocmVzdWx0ICE9IDApIHsKKwkgICAgcmV0dXJuIHJlc3VsdDsKKwl9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZpcnN0X2RiKERCRElSUyAqIHN0YXRlLCBpbnQgKm9mZnNldCkKK3sKKyAgICAqc3RhdGUgPSBkYmRUSUM7CisgICAgKm9mZnNldCA9IDA7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2RvYWxsb2MuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vZG9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMmEwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2RvYWxsb2MuYwpAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OCAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogV3JhcHBlciBmb3IgbWFsbG9jL3JlYWxsb2MuICBTdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgYWxsb3cgcmVhbGxvYyB3aXRoCisgKiBhIG51bGwgcG9pbnRlciwgYnV0IG9sZGVyIGxpYnJhcmllcyBtYXkgbm90IChlLmcuLCBTdW5PUykuCisgKgorICogQWxzbyBpZiByZWFsbG9jIGZhaWxzLCB3ZSBkaXNjYXJkIHRoZSBvbGQgbWVtb3J5IHRvIGF2b2lkIGxlYWtzLgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogZG9hbGxvYy5jLHYgMS44IDIwMDIvMDgvMzEgMjE6NDg6MTEgUGhpbGlwcGUuQmxhaW4gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkICopCitfbmNfZG9hbGxvYyh2b2lkICpvbGRwLCBzaXplX3QgYW1vdW50KQoreworICAgIHZvaWQgKm5ld3A7CisKKyAgICBpZiAob2xkcCAhPSAwKSB7CisJaWYgKChuZXdwID0gcmVhbGxvYyhvbGRwLCBhbW91bnQpKSA9PSAwKSB7CisJICAgIGZyZWUob2xkcCk7CisJICAgIGVycm5vID0gRU5PTUVNOwkvKiBqdXN0IGluIGNhc2UgJ2ZyZWUnIHJlc2V0ICovCisJfQorICAgIH0gZWxzZSB7CisJbmV3cCA9IG1hbGxvYyhhbW91bnQpOworICAgIH0KKyAgICByZXR1cm4gbmV3cDsKK30KKworI2lmICFIQVZFX1NUUkRVUAorTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX3N0cmR1cChjb25zdCBjaGFyICpzcmMpCit7CisgICAgY2hhciAqZHN0OworICAgIGlmIChzcmMgIT0gMCkgeworCWRzdCA9IHR5cGVNYWxsb2MoY2hhciwgc3RybGVuKHNyYykgKyAxKTsKKwlpZiAoZHN0ICE9IDApIHsKKwkgICAgKHZvaWQpIHN0cmNweShkc3QsIHNyYyk7CisJfQorICAgIH0gZWxzZSB7CisJZHN0ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGRzdDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9lbnRyaWVzLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2VudHJpZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjJhODMzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9lbnRyaWVzLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGVudHJpZXMuYyx2IDEuOCAyMDA4LzA5LzI3IDEzOjExOjEwIHRvbSBFeHAgJCIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRW50cnkgcXVldWUgaGFuZGxpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgVGhlIGVudHJ5IGxpc3QgaXMgYSBkb3VibHkgbGlua2VkIGxpc3Qgd2l0aCBOVUxMcyB0ZXJtaW5hdGluZyB0aGUgbGlzdHM6CisgKgorICoJICAtLS0tLS0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0KKyAqCSAgfCAgICAgICB8ICAgfCAgICAgICB8ICAgfCAgICAgICB8ICAgb2Zmc2V0CisgKiAgICAgICAgfC0tLS0tLS18ICAgfC0tLS0tLS18ICAgfC0tLS0tLS18CisgKgkgIHwgICAtLS0tKy0tPnwgICAtLS0tKy0tPnwgIE5VTEwgfCAgIG5leHQKKyAqCSAgfC0tLS0tLS18ICAgfC0tLS0tLS18ICAgfC0tLS0tLS18CisgKgkgIHwgIE5VTEwgfDwtLSstLS0tICAgfDwtLSstLS0tICAgfCAgIGxhc3QKKyAqCSAgLS0tLS0tLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tCisgKgkgICAgICBeICAgICAgICAgICAgICAgICAgICAgICBeCisgKgkgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKgkgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgKgkgICBfbmNfaGVhZCAgICAgICAgICAgICAgICBfbmNfdGFpbAorICovCisKK05DVVJTRVNfRVhQT1JUX1ZBUihFTlRSWSAqKSBfbmNfaGVhZCA9IDA7CitOQ1VSU0VTX0VYUE9SVF9WQVIoRU5UUlkgKikgX25jX3RhaWwgPSAwOworCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVfZW50cnkoRU5UUlkgKiBoZWFkcCwgVEVSTVRZUEUgKnR0ZXJtKQorLyogZnJlZSB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UgY29uc3VtZWQgYnkgdGhlIGdpdmVuIGxpc3QgZW50cnkgKi8KK3sKKyAgICBFTlRSWSAqZXA7CisKKyAgICBpZiAoKGVwID0gX25jX2RlbGlua19lbnRyeShoZWFkcCwgdHRlcm0pKSAhPSAwKSB7CisJZnJlZShlcCk7CisgICAgfQorfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVfZW50cmllcyhFTlRSWSAqIGhlYWRwKQorLyogZnJlZSB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UgY29uc3VtZWQgYnkgbGlzdCBlbnRyaWVzICovCit7CisgICAgKHZvaWQpIGhlYWRwOwkJLyogdW51c2VkIC0gX25jX2hlYWQgaXMgYWx0ZXJlZCBoZXJlISAqLworCisgICAgd2hpbGUgKF9uY19oZWFkICE9IDApIHsKKwlfbmNfZnJlZV90ZXJtdHlwZSgmKF9uY19oZWFkLT50dGVybSkpOworICAgIH0KK30KKworTkNVUlNFU19FWFBPUlQoRU5UUlkgKikKK19uY19kZWxpbmtfZW50cnkoRU5UUlkgKiBoZWFkcCwgVEVSTVRZUEUgKnR0ZXJtKQorLyogZGVsaW5rIHRoZSBhbGxvY2F0ZWQgc3RvcmFnZSBmb3IgdGhlIGdpdmVuIGxpc3QgZW50cnkgKi8KK3sKKyAgICBFTlRSWSAqZXAsICpsYXN0OworCisgICAgZm9yIChsYXN0ID0gMCwgZXAgPSBoZWFkcDsgZXAgIT0gMDsgbGFzdCA9IGVwLCBlcCA9IGVwLT5uZXh0KSB7CisJaWYgKCYoZXAtPnR0ZXJtKSA9PSB0dGVybSkgeworCSAgICBpZiAobGFzdCAhPSAwKSB7CisJCWxhc3QtPm5leHQgPSBlcC0+bmV4dDsKKwkgICAgfQorCSAgICBpZiAoZXAgPT0gX25jX2hlYWQpIHsKKwkJX25jX2hlYWQgPSBlcC0+bmV4dDsKKwkgICAgfQorCSAgICBpZiAoZXAgPT0gX25jX3RhaWwpIHsKKwkJX25jX3RhaWwgPSBsYXN0OworCSAgICB9CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIGVwOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2xlYWtzX3RpbmZvKHZvaWQpCit7CisjaWYgTk9fTEVBS1MKKyAgICBjaGFyICpzOworI2VuZGlmCisKKyAgICBUKChUX0NBTExFRCgiX25jX2ZyZWVfdGluZm8oKSIpKSk7CisjaWYgTk9fTEVBS1MKKyAgICBfbmNfZnJlZV90cGFybSgpOworICAgIF9uY190Z2V0ZW50X2xlYWtzKCk7CisgICAgX25jX2ZyZWVfZW50cmllcyhfbmNfaGVhZCk7CisgICAgX25jX2dldF90eXBlKDApOworICAgIF9uY19maXJzdF9uYW1lKDApOworICAgIF9uY19rZXluYW1lX2xlYWtzKCk7CisjaWYgQlJPS0VOX0xJTktFUiB8fCBVU0VfUkVFTlRSQU5UCisgICAgX25jX25hbWVzX2xlYWtzKCk7CisgICAgX25jX2NvZGVzX2xlYWtzKCk7CisgICAgRnJlZUlmTmVlZGVkKF9uY19wcmVzY3JlZW4ucmVhbF9hY3NfbWFwKTsKKyNlbmRpZgorCisgICAgaWYgKChzID0gX25jX2hvbWVfdGVybWluZm8oKSkgIT0gMCkKKwlmcmVlKHMpOworI2VuZGlmIC8qIE5PX0xFQUtTICovCisgICAgcmV0dXJuVm9pZDsKK30KKworI2lmIE5PX0xFQUtTCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVfdGluZm8oaW50IGNvZGUpCit7CisgICAgX25jX2xlYWtzX3RpbmZvKCk7CisgICAgZXhpdChjb2RlKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9mcmVlX3R0eXBlLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2ZyZWVfdHR5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTBmZmYxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9mcmVlX3R0eXBlLmMKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTktb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGZyZWVfdHR5cGUuYyAtLSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBmb3IgVEVSTVRZUEUKKyAqCisgKglfbmNfZnJlZV90ZXJtdHlwZSgpCisgKgl1c2VfZXh0ZW5kZWRfbmFtZXMoKQorICoKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGZyZWVfdHR5cGUuYyx2IDEuMTMgMjAwNi8wNi8yNSAxMDo0NjowMiB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZyZWVfdGVybXR5cGUoVEVSTVRZUEUgKnB0cikKK3sKKyAgICBUKCgiX25jX2ZyZWVfdGVybXR5cGUoJXMpIiwgcHRyLT50ZXJtX25hbWVzKSk7CisKKyAgICBGcmVlSWZOZWVkZWQocHRyLT5zdHJfdGFibGUpOworICAgIEZyZWVJZk5lZWRlZChwdHItPkJvb2xlYW5zKTsKKyAgICBGcmVlSWZOZWVkZWQocHRyLT5OdW1iZXJzKTsKKyAgICBGcmVlSWZOZWVkZWQocHRyLT5TdHJpbmdzKTsKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIEZyZWVJZk5lZWRlZChwdHItPmV4dF9zdHJfdGFibGUpOworICAgIEZyZWVJZk5lZWRlZChwdHItPmV4dF9OYW1lcyk7CisjZW5kaWYKKyAgICBtZW1zZXQocHRyLCAwLCBzaXplb2YoVEVSTVRZUEUpKTsKKyAgICBfbmNfZnJlZV9lbnRyeShfbmNfaGVhZCwgcHRyKTsKK30KKworI2lmIE5DVVJTRVNfWE5BTUVTCitOQ1VSU0VTX0VYUE9SVF9WQVIoYm9vbCkgX25jX3VzZXJfZGVmaW5hYmxlID0gVFJVRTsKKworTkNVUlNFU19FWFBPUlQoaW50KQordXNlX2V4dGVuZGVkX25hbWVzKGJvb2wgZmxhZykKK3sKKyAgICBpbnQgb2xkZmxhZyA9IF9uY191c2VyX2RlZmluYWJsZTsKKworICAgIFQoKFRfQ0FMTEVEKCJ1c2VfZXh0ZW5kZWRfbmFtZXMoJWQpIiksIGZsYWcpKTsKKyAgICBfbmNfdXNlcl9kZWZpbmFibGUgPSBmbGFnOworICAgIHJldHVybkJvb2wob2xkZmxhZyk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vZ2V0ZW52X251bS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9nZXRlbnZfbnVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwY2MwOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vZ2V0ZW52X251bS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk4ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglnZXRlbnZfbnVtLmMgLS0gb2J0YWluIGEgbnVtYmVyIGZyb20gdGhlIGVudmlyb25tZW50CisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBnZXRlbnZfbnVtLmMsdiAxLjMgMjAwMC8xMi8xMCAwMjo1NTowNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZ2V0ZW52X251bShjb25zdCBjaGFyICpuYW1lKQoreworICAgIGNoYXIgKmRzdCA9IDA7CisgICAgY2hhciAqc3JjID0gZ2V0ZW52KG5hbWUpOworICAgIGxvbmcgdmFsdWU7CisKKyAgICBpZiAoKHNyYyA9PSAwKQorCXx8ICh2YWx1ZSA9IHN0cnRvbChzcmMsICZkc3QsIDApKSA8IDAKKwl8fCAoZHN0ID09IHNyYykKKwl8fCAoKmRzdCAhPSAnXDAnKQorCXx8IChpbnQpIHZhbHVlIDwgdmFsdWUpCisJdmFsdWUgPSAtMTsKKworICAgIHJldHVybiAoaW50KSB2YWx1ZTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vaGFzaGVkX2RiLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2hhc2hlZF9kYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzA0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2hhc2hlZF9kYi5jCkBAIC0wLDAgKzEsMjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDYgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDxoYXNoZWRfZGIuaD4KKworI2lmIFVTRV9IQVNIRURfREIKKworTU9EVUxFX0lEKCIkSWQ6IGhhc2hlZF9kYi5jLHYgMS4xMyAyMDA2LzA4LzE5IDE5OjQ4OjM4IHRvbSBFeHAgJCIpCisKKyNpZiBIQVNIRURfREJfQVBJID49IDIKK3N0YXRpYyBEQkMgKmN1cnNvcjsKKyNlbmRpZgorCisvKgorICogT3BlbiB0aGUgZGF0YWJhc2UuCisgKi8KK05DVVJTRVNfRVhQT1JUKERCICopCitfbmNfZGJfb3Blbihjb25zdCBjaGFyICpwYXRoLCBib29sIG1vZGlmeSkKK3sKKyAgICBEQiAqcmVzdWx0ID0gMDsKKworI2lmIEhBU0hFRF9EQl9BUEkgPj0gNAorICAgIGRiX2NyZWF0ZSgmcmVzdWx0LCBOVUxMLCAwKTsKKyAgICByZXN1bHQtPm9wZW4ocmVzdWx0LAorCQkgTlVMTCwKKwkJIHBhdGgsCisJCSBOVUxMLAorCQkgREJfSEFTSCwKKwkJIG1vZGlmeSA/IERCX0NSRUFURSA6IERCX1JET05MWSwKKwkJIDA2NDQpOworI2VsaWYgSEFTSEVEX0RCX0FQSSA+PSAzCisgICAgZGJfY3JlYXRlKCZyZXN1bHQsIE5VTEwsIDApOworICAgIHJlc3VsdC0+b3BlbihyZXN1bHQsCisJCSBwYXRoLAorCQkgTlVMTCwKKwkJIERCX0hBU0gsCisJCSBtb2RpZnkgPyBEQl9DUkVBVEUgOiBEQl9SRE9OTFksCisJCSAwNjQ0KTsKKyNlbGlmIEhBU0hFRF9EQl9BUEkgPj0gMgorICAgIGludCBjb2RlOworCisgICAgaWYgKChjb2RlID0gZGJfb3BlbihwYXRoLAorCQkJREJfSEFTSCwKKwkJCW1vZGlmeSA/IERCX0NSRUFURSA6IERCX1JET05MWSwKKwkJCTA2NDQsCisJCQkoREJfRU5WICopIDAsCisJCQkoREJfSU5GTyAqKSAwLAorCQkJJnJlc3VsdCkpICE9IDApIHsKKwlUKCgiY2Fubm90IG9wZW4gJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoY29kZSkpKTsKKwlyZXN1bHQgPSAwOworICAgIH0gZWxzZSB7CisJVCgoIm9wZW5lZCAlcyIsIHBhdGgpKTsKKyAgICB9CisjZWxzZQorICAgIHJlc3VsdCA9IGRib3BlbihwYXRoLAorCQkgICAgbW9kaWZ5ID8gKE9fQ1JFQVQgfCBPX1JEV1IpIDogT19SRE9OTFksCisJCSAgICAwNjQ0LAorCQkgICAgREJfSEFTSCwKKwkJICAgIE5VTEwpOworICAgIGlmIChyZXN1bHQgIT0gMCkgeworCVQoKCJvcGVuZWQgJXMiLCBwYXRoKSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENsb3NlIHRoZSBkYXRhYmFzZS4gIERvIG5vdCBhdHRlbXB0IHRvIHVzZSB0aGUgJ2RiJyBoYW5kbGUgYWZ0ZXIgdGhpcyBjYWxsLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZGJfY2xvc2UoREIgKiBkYikKK3sKKyAgICBpbnQgcmVzdWx0OworCisjaWYgSEFTSEVEX0RCX0FQSSA+PSAyCisgICAgcmVzdWx0ID0gZGItPmNsb3NlKGRiLCAwKTsKKyNlbHNlCisgICAgcmVzdWx0ID0gZGItPmNsb3NlKGRiKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXcml0ZSBhIHJlY29yZCB0byB0aGUgZGF0YWJhc2UuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKgorICogRklYTUU6ICB0aGUgRnJlZUJTRCBjYXBfbWtkYiBwcm9ncmFtIGFzc3VtZXMgdGhlIGRhdGFiYXNlIGNvdWxkIGhhdmUKKyAqIGR1cGxpY2F0ZXMuICBUaGVyZSBhcHBlYXJzIHRvIGJlIG5vIGdvb2QgcmVhc29uIGZvciB0aGF0IChyZXZpZXcvZml4KS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2RiX3B1dChEQiAqIGRiLCBEQlQgKiBrZXksIERCVCAqIGRhdGEpCit7CisgICAgaW50IHJlc3VsdDsKKyNpZiBIQVNIRURfREJfQVBJID49IDIKKyAgICAvKiByZW1vdmUgYW55IHByZS1leGlzdGluZyB2YWx1ZSwgc2luY2Ugd2UgZG8gbm90IHdhbnQgZHVwbGljYXRlcyAqLworICAgICh2b2lkKSBkYi0+ZGVsKGRiLCBOVUxMLCBrZXksIDApOworICAgIHJlc3VsdCA9IGRiLT5wdXQoZGIsIE5VTEwsIGtleSwgZGF0YSwgREJfTk9PVkVSV1JJVEUpOworI2Vsc2UKKyAgICByZXN1bHQgPSBkYi0+cHV0KGRiLCBrZXksIGRhdGEsIFJfTk9PVkVSV1JJVEUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJlYWQgYSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19kYl9nZXQoREIgKiBkYiwgREJUICoga2V5LCBEQlQgKiBkYXRhKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBtZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisjaWYgSEFTSEVEX0RCX0FQSSA+PSAyCisgICAgcmVzdWx0ID0gZGItPmdldChkYiwgTlVMTCwga2V5LCBkYXRhLCAwKTsKKyNlbHNlCisgICAgcmVzdWx0ID0gZGItPmdldChkYiwga2V5LCBkYXRhLCAwKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBmaXJzdCByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UsIGlnbm9yaW5nIG9yZGVyLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZGJfZmlyc3QoREIgKiBkYiwgREJUICoga2V5LCBEQlQgKiBkYXRhKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBtZW1zZXQoa2V5LCAwLCBzaXplb2YoKmtleSkpOworICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKKyNpZiBIQVNIRURfREJfQVBJID49IDIKKyAgICBpZiAoKHJlc3VsdCA9IGRiLT5jdXJzb3IoZGIsIE5VTEwsICZjdXJzb3IsIDApKSA9PSAwKSB7CisJcmVzdWx0ID0gY3Vyc29yLT5jX2dldChjdXJzb3IsIGtleSwgZGF0YSwgREJfRklSU1QpOworICAgIH0KKyNlbHNlCisgICAgcmVzdWx0ID0gZGItPnNlcShkYiwga2V5LCBkYXRhLCAwKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBuZXh0IHJlY29yZCBmcm9tIHRoZSBkYXRhYmFzZSwgaWdub3Jpbmcgb3JkZXIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19kYl9uZXh0KERCICogZGIsIERCVCAqIGtleSwgREJUICogZGF0YSkKK3sKKyAgICBpbnQgcmVzdWx0OworCisjaWYgSEFTSEVEX0RCX0FQSSA+PSAyCisgICAgKHZvaWQpIGRiOworICAgIGlmIChjdXJzb3IgIT0gMCkgeworCXJlc3VsdCA9IGN1cnNvci0+Y19nZXQoY3Vyc29yLCBrZXksIGRhdGEsIERCX05FWFQpOworICAgIH0gZWxzZSB7CisJcmVzdWx0ID0gLTE7CisgICAgfQorI2Vsc2UKKyAgICByZXN1bHQgPSBkYi0+c2VxKGRiLCBrZXksIGRhdGEsIDApOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIGlmIGEgcmVjb3JkIGlzIGEgdGVybWluZm8gaW5kZXggcmVjb3JkLiAgSW5kZXggcmVjb3JkcyBhcmUgdGhvc2UgdGhhdAorICogY29udGFpbiBvbmx5IGFuIGFsaWFzIHBvaW50aW5nIHRvIGEgbGlzdCBvZiBhbGlhc2VzLgorICovCitOQ1VSU0VTX0VYUE9SVChib29sKQorX25jX2RiX2hhdmVfaW5kZXgoREJUICoga2V5LCBEQlQgKiBkYXRhLCBjaGFyICoqYnVmZmVyLCBpbnQgKnNpemUpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICBpbnQgdXNlZCA9IGRhdGEtPnNpemUgLSAxOworICAgIGNoYXIgKmhhdmUgPSAoY2hhciAqKSBkYXRhLT5kYXRhOworCisgICAgKHZvaWQpIGtleTsKKyAgICBpZiAoKmhhdmUrKyA9PSAyKSB7CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9CisgICAgLyoKKyAgICAgKiBVcGRhdGUgcGFyYW1zIGluIGFueSBjYXNlIGZvciBjb25zaXN0ZW5jeSB3aXRoIF9uY19kYl9oYXZlX2RhdGEoKS4KKyAgICAgKi8KKyAgICAqYnVmZmVyID0gaGF2ZTsKKyAgICAqc2l6ZSA9IHVzZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIGlmIGEgcmVjb3JkIGlzIHRoZSB0ZXJtaW5mbyBkYXRhIHJlY29yZC4gIElnbm9yZSBpbmRleCByZWNvcmRzLCBlLmcuLAorICogdGhvc2UgdGhhdCBjb250YWluIG9ubHkgYW4gYWxpYXMgcG9pbnRpbmcgdG8gYSBsaXN0IG9mIGFsaWFzZXMuCisgKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitfbmNfZGJfaGF2ZV9kYXRhKERCVCAqIGtleSwgREJUICogZGF0YSwgY2hhciAqKmJ1ZmZlciwgaW50ICpzaXplKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisgICAgaW50IHVzZWQgPSBkYXRhLT5zaXplIC0gMTsKKyAgICBjaGFyICpoYXZlID0gKGNoYXIgKikgZGF0YS0+ZGF0YTsKKworICAgIGlmICgqaGF2ZSsrID09IDApIHsKKwlpZiAoZGF0YS0+c2l6ZSA+IGtleS0+c2l6ZQorCSAgICAmJiBJU19USUNfTUFHSUMoaGF2ZSkpIHsKKwkgICAgcmVzdWx0ID0gVFJVRTsKKwl9CisgICAgfQorICAgIC8qCisgICAgICogVXBkYXRlIHBhcmFtcyBpbiBhbnkgY2FzZSB0byBtYWtlIGl0IHNpbXBsZSB0byBmb2xsb3cgYSBpbmRleCByZWNvcmQKKyAgICAgKiB0byB0aGUgZGF0YSByZWNvcmQuCisgICAgICovCisgICAgKmJ1ZmZlciA9IGhhdmU7CisgICAgKnNpemUgPSB1c2VkOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbHNlCisKK2V4dGVybgorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19oYXNoZWRfZGIodm9pZCk7CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfaGFzaGVkX2RiKHZvaWQpCit7Cit9CisKKyNlbmRpZiAvKiBVU0VfSEFTSEVEX0RCICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2hvbWVfdGVybWluZm8uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vaG9tZV90ZXJtaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjFjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2hvbWVfdGVybWluZm8uYwpAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJaG9tZV90ZXJtaW5mby5jIC0tIHJldHVybiB0aGUgJEhPTUUvLnRlcm1pbmZvIHN0cmluZywgZXhwYW5kZWQKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGhvbWVfdGVybWluZm8uYyx2IDEuMTEgMjAwOC8wOC8wMyAyMzo0MzoxMSB0b20gRXhwICQiKQorCisvKiBuY3Vyc2VzIGV4dGVuc2lvbi4uLmZhbGwgYmFjayBvbiB1c2VyJ3MgcHJpdmF0ZSBkaXJlY3RvcnkgKi8KKworI2RlZmluZSBNeUJ1ZmZlciBfbmNfZ2xvYmFscy5ob21lX3Rlcm1pbmZvCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19ob21lX3Rlcm1pbmZvKHZvaWQpCit7CisgICAgY2hhciAqcmVzdWx0ID0gMDsKKyNpZiBVU0VfSE9NRV9URVJNSU5GTworICAgIGNoYXIgKmhvbWU7CisKKyAgICBpZiAodXNlX3Rlcm1pbmZvX3ZhcnMoKSkgeworCWlmIChNeUJ1ZmZlciA9PSAwKSB7CisJICAgIGlmICgoaG9tZSA9IGdldGVudigiSE9NRSIpKSAhPSAwKSB7CisJCXVuc2lnbmVkIHdhbnQgPSAoc3RybGVuKGhvbWUpICsgc2l6ZW9mKFBSSVZBVEVfSU5GTykpOworCQlNeUJ1ZmZlciA9IHR5cGVNYWxsb2MoY2hhciwgd2FudCk7CisJCWlmIChNeUJ1ZmZlciA9PSAwKQorCQkgICAgX25jX2Vycl9hYm9ydChNU0dfTk9fTUVNT1JZKTsKKwkJKHZvaWQpIHNwcmludGYoTXlCdWZmZXIsIFBSSVZBVEVfSU5GTywgaG9tZSk7CisJICAgIH0KKwl9CisJcmVzdWx0ID0gTXlCdWZmZXI7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vaW5pdF9rZXl0cnkuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vaW5pdF9rZXl0cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjZmZTRmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9pbml0X2tleXRyeS5jCkBAIC0wLDAgKzEsMTE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRlcm0uaD4KKy8qIGtleXBhZF94bWl0LCBrZXlwYWRfbG9jYWwsIG1ldGFfb24sIG1ldGFfb2ZmICovCisvKiBjdXJzb3JfdmlzaWJsZSxjdXJzb3Jfbm9ybWFsLGN1cnNvcl9pbnZpc2libGUgKi8KKworI2luY2x1ZGUgPHRpYy5oPgkJLyogc3RydWN0IHRpbmZvX2ZrZXlzICovCisKKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKK01PRFVMRV9JRCgiJElkOiBpbml0X2tleXRyeS5jLHYgMS4xMiAyMDA4LzA1LzI0IDIxOjQ0OjUxIHRvbSBFeHAgJCIpCisKKy8qCisqKiAgICAgIF9uY19pbml0X2tleXRyeSgpCisqKgorKiogICAgICBDb25zdHJ1Y3QgdGhlIHRyeSBmb3IgdGhlIGN1cnJlbnQgdGVybWluYWwncyBrZXlwYWQga2V5cy4KKyoqCisqLworCisvKgorICogSW50ZXJuYWwgZW50cnlwb2ludHMgdXNlIFNDUkVFTiogcGFyYW1ldGVyIHRvIG9idGFpbiBjYXBhYmlsaXRpZXMgcmF0aGVyCisgKiB0aGFuIGN1cl90ZXJtLgorICovCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiAoc3AtPl90ZXJtKS0+dHlwZS4KKworI2lmCUJST0tFTl9MSU5LRVIKKyN1bmRlZglfbmNfdGluZm9fZmtleXMKKyNlbmRpZgorCisvKiBMSU5UX1BSRVBSTworI2lmIDAqLworI2luY2x1ZGUgPGluaXRfa2V5dHJ5Lmg+CisvKiBMSU5UX1BSRVBSTworI2VuZGlmKi8KKworI2lmCUJST0tFTl9MSU5LRVIKK2NvbnN0IHN0cnVjdCB0aW5mb19ma2V5cyAqCitfbmNfdGluZm9fZmtleXNmKHZvaWQpCit7CisgICAgcmV0dXJuIF9uY190aW5mb19ma2V5czsKK30KKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2luaXRfa2V5dHJ5KFNDUkVFTiAqc3ApCit7CisgICAgc2l6ZV90IG47CisKKyAgICAvKiBUaGUgc3AtPl9rZXl0cnkgdmFsdWUgaXMgaW5pdGlhbGl6ZWQgaW4gbmV3dGVybSgpLCB3aGVyZSB0aGUgc3AKKyAgICAgKiBzdHJ1Y3R1cmUgaXMgY3JlYXRlZCwgYmVjYXVzZSB3ZSBjYW4gbm90IHRlbGwgd2hlcmUga2V5cGFkKCkgb3IKKyAgICAgKiBtb3VzZV9hY3RpdmF0ZSgpICh3aGljaCB3aWxsIGNhbGwga2V5b2soKSkgYXJlIGZpcnN0IGNhbGxlZC4KKyAgICAgKi8KKworICAgIGlmIChzcCAhPSAwKSB7CisJZm9yIChuID0gMDsgX25jX3RpbmZvX2ZrZXlzW25dLmNvZGU7IG4rKykgeworCSAgICBpZiAoX25jX3RpbmZvX2ZrZXlzW25dLm9mZnNldCA8IFNUUkNPVU5UKSB7CisJCSh2b2lkKSBfbmNfYWRkX3RvX3RyeSgmKHNwLT5fa2V5dHJ5KSwKKwkJCQkgICAgICBDVVIgU3RyaW5nc1tfbmNfdGluZm9fZmtleXNbbl0ub2Zmc2V0XSwKKwkJCQkgICAgICBfbmNfdGluZm9fZmtleXNbbl0uY29kZSk7CisJICAgIH0KKwl9CisjaWYgTkNVUlNFU19YTkFNRVMKKwkvKgorCSAqIEFkZCBhbnkgb2YgdGhlIGV4dGVuZGVkIHN0cmluZ3MgdG8gdGhlIHRyaWVzIGlmIHRoZWlyIG5hbWUgYmVnaW5zCisJICogd2l0aCAnaycsIGkuZS4sIHRoZXkgZm9sbG93IHRoZSBjb252ZW50aW9uIG9mIG90aGVyIHRlcm1pbmZvIGtleQorCSAqIG5hbWVzLgorCSAqLworCXsKKwkgICAgVEVSTVRZUEUgKnRwID0gJihzcC0+X3Rlcm0tPnR5cGUpOworCSAgICBmb3IgKG4gPSBTVFJDT1VOVDsgbiA8IE5VTV9TVFJJTkdTKHRwKTsgKytuKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBFeHRTdHJuYW1lKHRwLCBuLCBzdHJuYW1lcyk7CisJCWNoYXIgKnZhbHVlID0gdHAtPlN0cmluZ3Nbbl07CisJCWlmIChuYW1lICE9IDAKKwkJICAgICYmICpuYW1lID09ICdrJworCQkgICAgJiYgdmFsdWUgIT0gMAorCQkgICAgJiYga2V5X2RlZmluZWQodmFsdWUpID09IDApIHsKKwkJICAgICh2b2lkKSBfbmNfYWRkX3RvX3RyeSgmKHNwLT5fa2V5dHJ5KSwKKwkJCQkJICB2YWx1ZSwKKwkJCQkJICBuIC0gU1RSQ09VTlQgKyBLRVlfTUFYKTsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisjaWZkZWYgVFJBQ0UKKwlfbmNfdHJhY2VfdHJpZXMoc3AtPl9rZXl0cnkpOworI2VuZGlmCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfYWNzLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9hY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTllNDcyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfYWNzLmMKQEAgLTAsMCArMSwxOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogZW5hX2FjcywgYWNzX2NoYXJzICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfYWNzLmMsdiAxLjM2IDIwMDgvMDgvMTYgMTk6MjI6NTUgdG9tIEV4cCAkIikKKworI2lmIEJST0tFTl9MSU5LRVIgfHwgVVNFX1JFRU5UUkFOVAorI2RlZmluZSBNeUJ1ZmZlciBfbmNfcHJlc2NyZWVuLnJlYWxfYWNzX21hcAorTkNVUlNFU19FWFBPUlRfVkFSKGNodHlwZSAqKQorX25jX2Fjc19tYXAodm9pZCkKK3sKKyAgICBpZiAoTXlCdWZmZXIgPT0gMCkKKwlNeUJ1ZmZlciA9IHR5cGVDYWxsb2MoY2h0eXBlLCBBQ1NfTEVOKTsKKyAgICByZXR1cm4gTXlCdWZmZXI7Cit9CisjdW5kZWYgTXlCdWZmZXIKKyNlbHNlCitOQ1VSU0VTX0VYUE9SVF9WQVIoY2h0eXBlKSBhY3NfbWFwW0FDU19MRU5dID0KK3sKKyAgICAwCit9OworI2VuZGlmCisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfaW5pdF9hY3Modm9pZCkKK3sKKyAgICBjaHR5cGUgKmZha2VfbWFwID0gYWNzX21hcDsKKyAgICBjaHR5cGUgKnJlYWxfbWFwID0gU1AgIT0gMCA/IFNQLT5fYWNzX21hcCA6IGZha2VfbWFwOworICAgIGludCBqOworCisgICAgVCgoImluaXRpYWxpemluZyBBQ1MgbWFwIikpOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSdyZSB1c2luZyB0aGlzIGZyb20gY3Vyc2VzIChyYXRoZXIgdGhhbiB0ZXJtaW5mbyksIHdlIGFyZSBzdG9yaW5nCisgICAgICogdGhlIG1hcHBpbmcgaW5mb3JtYXRpb24gaW4gdGhlIFNDUkVFTiBzdHJ1Y3Qgc28gd2UgY2FuIGRlY2lkZSBob3cgdG8KKyAgICAgKiByZW5kZXIgaXQuCisgICAgICovCisgICAgaWYgKHJlYWxfbWFwICE9IGZha2VfbWFwKSB7CisJZm9yIChqID0gMTsgaiA8IEFDU19MRU47ICsraikgeworCSAgICByZWFsX21hcFtqXSA9IDA7CisJICAgIGZha2VfbWFwW2pdID0gQV9BTFRDSEFSU0VUIHwgajsKKwkgICAgaWYgKFNQKQorCQlTUC0+X3NjcmVlbl9hY3NfbWFwW2pdID0gRkFMU0U7CisJfQorICAgIH0gZWxzZSB7CisJZm9yIChqID0gMTsgaiA8IEFDU19MRU47ICsraikgeworCSAgICByZWFsX21hcFtqXSA9IDA7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSW5pdGlhbGl6YXRpb25zIGZvciBhIFVOSVgtbGlrZSBtdWx0aS10ZXJtaW5hbCBlbnZpcm9ubWVudC4gIFVzZQorICAgICAqIEFTQ0lJIGNoYXJzIGFuZCBjb3VudCBvbiB0aGUgdGVybWluZm8gZGVzY3JpcHRpb24gdG8gZG8gYmV0dGVyLgorICAgICAqLworICAgIHJlYWxfbWFwWydsJ10gPSAnKyc7CS8qIHNob3VsZCBiZSB1cHBlciBsZWZ0IGNvcm5lciAqLworICAgIHJlYWxfbWFwWydtJ10gPSAnKyc7CS8qIHNob3VsZCBiZSBsb3dlciBsZWZ0IGNvcm5lciAqLworICAgIHJlYWxfbWFwWydrJ10gPSAnKyc7CS8qIHNob3VsZCBiZSB1cHBlciByaWdodCBjb3JuZXIgKi8KKyAgICByZWFsX21hcFsnaiddID0gJysnOwkvKiBzaG91bGQgYmUgbG93ZXIgcmlnaHQgY29ybmVyICovCisgICAgcmVhbF9tYXBbJ3UnXSA9ICcrJzsJLyogc2hvdWxkIGJlIHRlZSBwb2ludGluZyBsZWZ0ICovCisgICAgcmVhbF9tYXBbJ3QnXSA9ICcrJzsJLyogc2hvdWxkIGJlIHRlZSBwb2ludGluZyByaWdodCAqLworICAgIHJlYWxfbWFwWyd2J10gPSAnKyc7CS8qIHNob3VsZCBiZSB0ZWUgcG9pbnRpbmcgdXAgKi8KKyAgICByZWFsX21hcFsndyddID0gJysnOwkvKiBzaG91bGQgYmUgdGVlIHBvaW50aW5nIGRvd24gKi8KKyAgICByZWFsX21hcFsncSddID0gJy0nOwkvKiBzaG91bGQgYmUgaG9yaXpvbnRhbCBsaW5lICovCisgICAgcmVhbF9tYXBbJ3gnXSA9ICd8JzsJLyogc2hvdWxkIGJlIHZlcnRpY2FsIGxpbmUgKi8KKyAgICByZWFsX21hcFsnbiddID0gJysnOwkvKiBzaG91bGQgYmUgbGFyZ2UgcGx1cyBvciBjcm9zc292ZXIgKi8KKyAgICByZWFsX21hcFsnbyddID0gJ34nOwkvKiBzaG91bGQgYmUgc2NhbiBsaW5lIDEgKi8KKyAgICByZWFsX21hcFsncyddID0gJ18nOwkvKiBzaG91bGQgYmUgc2NhbiBsaW5lIDkgKi8KKyAgICByZWFsX21hcFsnYCddID0gJysnOwkvKiBzaG91bGQgYmUgZGlhbW9uZCAqLworICAgIHJlYWxfbWFwWydhJ10gPSAnOic7CS8qIHNob3VsZCBiZSBjaGVja2VyIGJvYXJkIChzdGlwcGxlKSAqLworICAgIHJlYWxfbWFwWydmJ10gPSAnXCcnOwkvKiBzaG91bGQgYmUgZGVncmVlIHN5bWJvbCAqLworICAgIHJlYWxfbWFwWydnJ10gPSAnIyc7CS8qIHNob3VsZCBiZSBwbHVzL21pbnVzICovCisgICAgcmVhbF9tYXBbJ34nXSA9ICdvJzsJLyogc2hvdWxkIGJlIGJ1bGxldCAqLworICAgIHJlYWxfbWFwWycsJ10gPSAnPCc7CS8qIHNob3VsZCBiZSBhcnJvdyBwb2ludGluZyBsZWZ0ICovCisgICAgcmVhbF9tYXBbJysnXSA9ICc+JzsJLyogc2hvdWxkIGJlIGFycm93IHBvaW50aW5nIHJpZ2h0ICovCisgICAgcmVhbF9tYXBbJy4nXSA9ICd2JzsJLyogc2hvdWxkIGJlIGFycm93IHBvaW50aW5nIGRvd24gKi8KKyAgICByZWFsX21hcFsnLSddID0gJ14nOwkvKiBzaG91bGQgYmUgYXJyb3cgcG9pbnRpbmcgdXAgKi8KKyAgICByZWFsX21hcFsnaCddID0gJyMnOwkvKiBzaG91bGQgYmUgYm9hcmQgb2Ygc3F1YXJlcyAqLworICAgIHJlYWxfbWFwWydpJ10gPSAnIyc7CS8qIHNob3VsZCBiZSBsYW50ZXJuIHN5bWJvbCAqLworICAgIHJlYWxfbWFwWycwJ10gPSAnIyc7CS8qIHNob3VsZCBiZSBzb2xpZCBzcXVhcmUgYmxvY2sgKi8KKyAgICAvKiB0aGVzZSBkZWZhdWx0cyB3ZXJlIGludmVudGVkIGZvciBuY3Vyc2VzICovCisgICAgcmVhbF9tYXBbJ3AnXSA9ICctJzsJLyogc2hvdWxkIGJlIHNjYW4gbGluZSAzICovCisgICAgcmVhbF9tYXBbJ3InXSA9ICctJzsJLyogc2hvdWxkIGJlIHNjYW4gbGluZSA3ICovCisgICAgcmVhbF9tYXBbJ3knXSA9ICc8JzsJLyogc2hvdWxkIGJlIGxlc3MtdGhhbi1vci1lcXVhbC10byAqLworICAgIHJlYWxfbWFwWyd6J10gPSAnPic7CS8qIHNob3VsZCBiZSBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8gKi8KKyAgICByZWFsX21hcFsneyddID0gJyonOwkvKiBzaG91bGQgYmUgZ3JlZWsgcGkgKi8KKyAgICByZWFsX21hcFsnfCddID0gJyEnOwkvKiBzaG91bGQgYmUgbm90LWVxdWFsICovCisgICAgcmVhbF9tYXBbJ30nXSA9ICdmJzsJLyogc2hvdWxkIGJlIHBvdW5kLXN0ZXJsaW5nIHN5bWJvbCAqLworCisgICAgaWYgKGVuYV9hY3MgIT0gTlVMTCkgeworCVRQVVRTX1RSQUNFKCJlbmFfYWNzIik7CisJcHV0cChlbmFfYWNzKTsKKyAgICB9CisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICAvKgorICAgICAqIExpbnV4IGNvbnNvbGUgInN1cHBvcnRzIiB0aGUgIlBDIFJPTSIgY2hhcmFjdGVyIHNldCBieSB0aGUgY29pbmNpZGVuY2UKKyAgICAgKiB0aGF0IHNtcGNoL3JtcGNoIGFuZCBzbWFjcy9ybWFjcyBoYXZlIHRoZSBzYW1lIHZhbHVlcy4gIG5jdXJzZXMgaGFzCisgICAgICogbm8gY29kZXBhZ2Ugc3VwcG9ydCAoc2VlIFNDTyBNZXJnZSBmb3IgYW4gZXhhbXBsZSkuICBPdXRzaWRlIG9mIHRoZQorICAgICAqIHZhbHVlcyBkZWZpbmVkIGluIGFjc2MsIHRoZXJlIGFyZSBubyBkZWZpbml0aW9ucyBmb3IgdGhlICJQQyBST00iCisgICAgICogY2hhcmFjdGVyIHNldCAoYXNzdW1lZCBieSBzb21lIGFwcGxpY2F0aW9ucyB0byBiZSBjb2RlcGFnZSA0MzcpLCBidXQgd2UKKyAgICAgKiBhbGxvdyB0aG9zZSBhcHBsaWNhdGlvbnMgdG8gdXNlIHRob3NlIGNvZGVwb2ludHMuCisgICAgICoKKyAgICAgKiB0ZXN0L2JsdWUuYyB1c2VzIHRoaXMgZmVhdHVyZS4KKyAgICAgKi8KKyNkZWZpbmUgUENIX0tMVURHRShhLGIpIChhICE9IDAgJiYgYiAhPSAwICYmICFzdHJjbXAoYSxiKSkKKyAgICBpZiAoUENIX0tMVURHRShlbnRlcl9wY19jaGFyc2V0X21vZGUsIGVudGVyX2FsdF9jaGFyc2V0X21vZGUpICYmCisJUENIX0tMVURHRShleGl0X3BjX2NoYXJzZXRfbW9kZSwgZXhpdF9hbHRfY2hhcnNldF9tb2RlKSkgeworCXNpemVfdCBpOworCWZvciAoaSA9IDE7IGkgPCBBQ1NfTEVOOyArK2kpIHsKKwkgICAgaWYgKHJlYWxfbWFwW2ldID09IDApIHsKKwkJcmVhbF9tYXBbaV0gPSBpOworCQlpZiAocmVhbF9tYXAgIT0gZmFrZV9tYXApIHsKKwkJICAgIGlmIChTUCAhPSAwKQorCQkJU1AtPl9zY3JlZW5fYWNzX21hcFtpXSA9IFRSVUU7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChhY3NfY2hhcnMgIT0gTlVMTCkgeworCXNpemVfdCBpID0gMDsKKwlzaXplX3QgbGVuZ3RoID0gc3RybGVuKGFjc19jaGFycyk7CisKKwl3aGlsZSAoaSArIDEgPCBsZW5ndGgpIHsKKwkgICAgaWYgKGFjc19jaGFyc1tpXSAhPSAwICYmIFVDaGFyKGFjc19jaGFyc1tpXSkgPCBBQ1NfTEVOKSB7CisJCXJlYWxfbWFwW1VDaGFyKGFjc19jaGFyc1tpXSldID0gVUNoYXIoYWNzX2NoYXJzW2kgKyAxXSkgfCBBX0FMVENIQVJTRVQ7CisJCWlmIChTUCAhPSAwKQorCQkgICAgU1AtPl9zY3JlZW5fYWNzX21hcFtVQ2hhcihhY3NfY2hhcnNbaV0pXSA9IFRSVUU7CisJICAgIH0KKwkgICAgaSArPSAyOworCX0KKyAgICB9CisjaWZkZWYgVFJBQ0UKKyAgICAvKiBTaG93IHRoZSBlcXVpdmFsZW50IG1hcHBpbmcsIG5vdGluZyBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUKKyAgICAgKiBnaXZlbiBhdHRyaWJ1dGUsIHdoZXRoZXIgYnkgcmUtb3JkZXJpbmcgb3IgZHVwbGljYXRpb24uCisgICAgICovCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfQ0FMTFMpKSB7CisJc2l6ZV90IG4sIG07CisJY2hhciBzaG93W0FDU19MRU4gKiAyICsgMV07CisJZm9yIChuID0gMSwgbSA9IDA7IG4gPCBBQ1NfTEVOOyBuKyspIHsKKwkgICAgaWYgKHJlYWxfbWFwW25dICE9IDApIHsKKwkJc2hvd1ttKytdID0gKGNoYXIpIG47CisJCXNob3dbbSsrXSA9IChjaGFyKSBDaENoYXJPZihyZWFsX21hcFtuXSk7CisJICAgIH0KKwl9CisJc2hvd1ttXSA9IDA7CisJaWYgKGFjc19jaGFycyA9PSBOVUxMIHx8IHN0cmNtcChhY3NfY2hhcnMsIHNob3cpKQorCSAgICBfdHJhY2VmKCIlcyBhY3NfY2hhcnMgJXMiLAorCQkgICAgKGFjc19jaGFycyA9PSBOVUxMKSA/ICJOVUxMIiA6ICJSRUFEIiwKKwkJICAgIF9uY192aXNidWYoYWNzX2NoYXJzKSk7CisJX3RyYWNlZigiJXMgYWNzX2NoYXJzICVzIiwKKwkJKGFjc19jaGFycyA9PSBOVUxMKQorCQk/ICJOVUxMIgorCQk6IChzdHJjbXAoYWNzX2NoYXJzLCBzaG93KQorCQkgICA/ICJESUZGIgorCQkgICA6ICJTQU1FIiksCisJCV9uY192aXNidWYoc2hvdykpOworCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisgICAgfQorI2VuZGlmIC8qIFRSQUNFICovCit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9iYXVkcmF0ZS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfYmF1ZHJhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNkZmRhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfYmF1ZHJhdGUuYwpAQCAtMCwwICsxLDIzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX2JhdWRyYXRlLmMKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogY3VyX3Rlcm0sIHBhZF9jaGFyICovCisjaW5jbHVkZSA8dGVybWNhcC5oPgkJLyogb3NwZWVkICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisvKgorICogVGhlc2Ugc3lzdGVtcyB1c2Ugc2ltaWxhciBoZWFkZXIgZmlsZXMsIHdoaWNoIGRlZmluZSBCMTIwMCBhcyAxMjAwLCBldGMuLAorICogYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIFVTRV9PTERfVFRZIHNvIEIxMjAwIGlzIDksIHdoaWNoIG1ha2VzIGFsbAorICogb2YgdGhlIGluZGljZXMgdXAgdG8gQjExNTIwMCBmaXQgbmljZWx5IGluIGEgJ3Nob3J0JywgYWxsb3dpbmcgdXMgdG8gcmV0YWluCisgKiBvc3BlZWQncyB0eXBlIGZvciBjb21wYXRpYmlsaXR5LgorICovCisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfdmVyc2lvbiA8IDcwMDAwMCkpIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykKKyN1bmRlZiBCMAorI3VuZGVmIEI1MAorI3VuZGVmIEI3NQorI3VuZGVmIEIxMTAKKyN1bmRlZiBCMTM0CisjdW5kZWYgQjE1MAorI3VuZGVmIEIyMDAKKyN1bmRlZiBCMzAwCisjdW5kZWYgQjYwMAorI3VuZGVmIEIxMjAwCisjdW5kZWYgQjE4MDAKKyN1bmRlZiBCMjQwMAorI3VuZGVmIEI0ODAwCisjdW5kZWYgQjk2MDAKKyN1bmRlZiBCMTkyMDAKKyN1bmRlZiBFWFRBCisjdW5kZWYgQjM4NDAwCisjdW5kZWYgRVhUQgorI3VuZGVmIEI1NzYwMAorI3VuZGVmIEIxMTUyMDAKKyN1bmRlZiBCMjMwNDAwCisjdW5kZWYgQjQ2MDgwMAorI3VuZGVmIEI5MjE2MDAKKyNkZWZpbmUgVVNFX09MRF9UVFkKKyNpbmNsdWRlIDxzeXMvdHR5ZGV2Lmg+CisjZWxzZQorI3VuZGVmIFVTRV9PTERfVFRZCisjZW5kaWYgLyogVVNFX09MRF9UVFkgKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9iYXVkcmF0ZS5jLHYgMS4yNyAyMDA4LzA2LzI4IDE1OjE5OjI0IHRvbSBFeHAgJCIpCisKKy8qCisgKglpbnQKKyAqCWJhdWRyYXRlKCkKKyAqCisgKglSZXR1cm5zIHRoZSBjdXJyZW50IHRlcm1pbmFsJ3MgYmF1ZCByYXRlLgorICoKKyAqLworCitzdHJ1Y3Qgc3BlZWQgeworICAgIGludCBzOwkJCS8qIHZhbHVlIGZvciAnb3NwZWVkJyBpcyBhbiBpbmRleCAqLworICAgIGludCBzcDsJCQkvKiB0aGUgYWN0dWFsIHNwZWVkICovCit9OworCitzdGF0aWMgc3RydWN0IHNwZWVkIGNvbnN0IHNwZWVkc1tdID0KK3sKKyAgICB7QjAsIDB9LAorICAgIHtCNTAsIDUwfSwKKyAgICB7Qjc1LCA3NX0sCisgICAge0IxMTAsIDExMH0sCisgICAge0IxMzQsIDEzNH0sCisgICAge0IxNTAsIDE1MH0sCisgICAge0IyMDAsIDIwMH0sCisgICAge0IzMDAsIDMwMH0sCisgICAge0I2MDAsIDYwMH0sCisgICAge0IxMjAwLCAxMjAwfSwKKyAgICB7QjE4MDAsIDE4MDB9LAorICAgIHtCMjQwMCwgMjQwMH0sCisgICAge0I0ODAwLCA0ODAwfSwKKyAgICB7Qjk2MDAsIDk2MDB9LAorI2lmZGVmIEIxOTIwMAorICAgIHtCMTkyMDAsIDE5MjAwfSwKKyNlbHNlCisjaWZkZWYgRVhUQQorICAgIHtFWFRBLCAxOTIwMH0sCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEIzODQwMAorICAgIHtCMzg0MDAsIDM4NDAwfSwKKyNlbHNlCisjaWZkZWYgRVhUQgorICAgIHtFWFRCLCAzODQwMH0sCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEI1NzYwMAorICAgIHtCNTc2MDAsIDU3NjAwfSwKKyNlbmRpZgorI2lmZGVmIEIxMTUyMDAKKyAgICB7QjExNTIwMCwgMTE1MjAwfSwKKyNlbmRpZgorI2lmZGVmIEIyMzA0MDAKKyAgICB7QjIzMDQwMCwgMjMwNDAwfSwKKyNlbmRpZgorI2lmZGVmIEI0NjA4MDAKKyAgICB7QjQ2MDgwMCwgNDYwODAwfSwKKyNlbmRpZgorI2lmZGVmIEI5MjE2MDAKKyAgICB7QjkyMTYwMCwgOTIxNjAwfSwKKyNlbmRpZgorfTsKKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2JhdWRyYXRlKGludCBPU3BlZWQpCit7CisjaWYgIVVTRV9SRUVOVFJBTlQKKyAgICBzdGF0aWMgaW50IGxhc3RfT1NwZWVkOworICAgIHN0YXRpYyBpbnQgbGFzdF9iYXVkcmF0ZTsKKyNlbmRpZgorCisgICAgaW50IHJlc3VsdCA9IEVSUjsKKyAgICB1bnNpZ25lZCBpOworCisjaWYgIVVTRV9SRUVOVFJBTlQKKyAgICBpZiAoT1NwZWVkID09IGxhc3RfT1NwZWVkKSB7CisJcmVzdWx0ID0gbGFzdF9iYXVkcmF0ZTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAocmVzdWx0ID09IEVSUikgeworCWlmIChPU3BlZWQgPj0gMCkgeworCSAgICBmb3IgKGkgPSAwOyBpIDwgU0laRU9GKHNwZWVkcyk7IGkrKykgeworCQlpZiAoc3BlZWRzW2ldLnMgPT0gT1NwZWVkKSB7CisJCSAgICByZXN1bHQgPSBzcGVlZHNbaV0uc3A7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorI2lmICFVU0VfUkVFTlRSQU5UCisJaWYgKE9TcGVlZCA9PSBsYXN0X09TcGVlZCkgeworCSAgICBsYXN0X09TcGVlZCA9IE9TcGVlZDsKKwkgICAgbGFzdF9iYXVkcmF0ZSA9IHJlc3VsdDsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIChyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfb3NwZWVkKGludCBCYXVkUmF0ZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gMTsKKyAgICB1bnNpZ25lZCBpOworCisgICAgaWYgKEJhdWRSYXRlID49IDApIHsKKwlmb3IgKGkgPSAwOyBpIDwgU0laRU9GKHNwZWVkcyk7IGkrKykgeworCSAgICBpZiAoc3BlZWRzW2ldLnNwID09IEJhdWRSYXRlKSB7CisJCXJlc3VsdCA9IHNwZWVkc1tpXS5zOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIChyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitiYXVkcmF0ZSh2b2lkKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBUKChUX0NBTExFRCgiYmF1ZHJhdGUoKSIpKSk7CisKKyAgICAvKgorICAgICAqIEluIGRlYnVnZ2luZywgYWxsb3cgdGhlIGVudmlyb25tZW50IHN5bWJvbCB0byBvdmVycmlkZSB3aGVuIHdlJ3JlCisgICAgICogcmVkaXJlY3RpbmcgdG8gYSBmaWxlLCBzbyB3ZSBjYW4gY29uc3RydWN0IHJlcGVhdGFibGUgdGVzdC1jYXNlcworICAgICAqIHRoYXQgdGFrZSBpbnRvIGFjY291bnQgY29zdHMgdGhhdCBkZXBlbmQgb24gYmF1ZHJhdGUuCisgICAgICovCisjaWZkZWYgVFJBQ0UKKyAgICBpZiAoIWlzYXR0eShmaWxlbm8oU1AgPyBTUC0+X29mcCA6IHN0ZG91dCkpCisJJiYgZ2V0ZW52KCJCQVVEUkFURSIpICE9IDApIHsKKwlpbnQgcmV0OworCWlmICgocmV0ID0gX25jX2dldGVudl9udW0oIkJBVURSQVRFIikpIDw9IDApCisJICAgIHJldCA9IDk2MDA7CisJb3NwZWVkID0gX25jX29zcGVlZChyZXQpOworCXJldHVybkNvZGUocmV0KTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisjaWZkZWYgVVNFX09MRF9UVFkKKwlyZXN1bHQgPSBjZmdldG9zcGVlZCgmY3VyX3Rlcm0tPk50dHliKTsKKwlvc3BlZWQgPSBfbmNfb3NwZWVkKHJlc3VsdCk7CisjZWxzZSAvKiAhVVNFX09MRF9UVFkgKi8KKyNpZmRlZiBURVJNSU9TCisJb3NwZWVkID0gY2ZnZXRvc3BlZWQoJmN1cl90ZXJtLT5OdHR5Yik7CisjZWxzZQorCW9zcGVlZCA9IGN1cl90ZXJtLT5OdHR5Yi5zZ19vc3BlZWQ7CisjZW5kaWYKKwlyZXN1bHQgPSBfbmNfYmF1ZHJhdGUob3NwZWVkKTsKKyNlbmRpZgorCWN1cl90ZXJtLT5fYmF1ZHJhdGUgPSByZXN1bHQ7CisgICAgfSBlbHNlIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfY3VyX3Rlcm0uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX2N1cl90ZXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2NTc4ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX2N1cl90ZXJtLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogTW9kdWxlIHRoYXQgIm93bnMiIHRoZSAnY3VyX3Rlcm0nIHZhcmlhYmxlOgorICoKKyAqCVRFUk1JTkFMICpzZXRfY3VydGVybShURVJNSU5BTCAqKQorICoJaW50IGRlbF9jdXJ0ZXJtKFRFUk1JTkFMICopCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgkJLyogVFRZLCBjdXJfdGVybSAqLworI2luY2x1ZGUgPHRlcm1jYXAuaD4JCS8qIG9zcGVlZCAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX2N1cl90ZXJtLmMsdiAxLjE4IDIwMDgvMDgvMTYgMTk6MjI6NTUgdG9tIEV4cCAkIikKKworI3VuZGVmIENVUgorI2RlZmluZSBDVVIgdGVybXAtPnR5cGUuCisKKyNpZiBCUk9LRU5fTElOS0VSIHx8IFVTRV9SRUVOVFJBTlQKK05DVVJTRVNfRVhQT1JUKFRFUk1JTkFMICopCitOQ1VSU0VTX1BVQkxJQ19WQVIoY3VyX3Rlcm0pICh2b2lkKQoreworICAgIHJldHVybiAoU1AgIT0gMCAmJiBTUC0+X3Rlcm0gIT0gMCkgPyBTUC0+X3Rlcm0gOiBfbmNfcHJlc2NyZWVuLl9jdXJfdGVybTsKK30KKyNlbHNlCitOQ1VSU0VTX0VYUE9SVF9WQVIoVEVSTUlOQUwgKikgY3VyX3Rlcm0gPSAwOworI2VuZGlmCisKK05DVVJTRVNfRVhQT1JUKFRFUk1JTkFMICopCitzZXRfY3VydGVybShURVJNSU5BTCAqIHRlcm1wKQoreworICAgIFRFUk1JTkFMICpvbGR0ZXJtOworCisgICAgVCgoVF9DQUxMRUQoInNldF9jdXJ0ZXJtKCVwKSIpLCB0ZXJtcCkpOworCisgICAgX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgb2xkdGVybSA9IGN1cl90ZXJtOworICAgIGlmIChTUCkKKwlTUC0+X3Rlcm0gPSB0ZXJtcDsKKyNpZiBCUk9LRU5fTElOS0VSIHx8IFVTRV9SRUVOVFJBTlQKKyAgICBfbmNfcHJlc2NyZWVuLl9jdXJfdGVybSA9IHRlcm1wOworI2Vsc2UKKyAgICBjdXJfdGVybSA9IHRlcm1wOworI2VuZGlmCisgICAgaWYgKHRlcm1wICE9IDApIHsKKwlvc3BlZWQgPSBfbmNfb3NwZWVkKHRlcm1wLT5fYmF1ZHJhdGUpOworCWlmICh0ZXJtcC0+dHlwZS5TdHJpbmdzKSB7CisJICAgIFBDID0gKGNoYXIpICgocGFkX2NoYXIgIT0gTlVMTCkgPyBwYWRfY2hhclswXSA6IDApOworCX0KKyAgICB9CisgICAgX25jX3VubG9ja19nbG9iYWwoY3Vyc2VzKTsKKworICAgIFQoKFRfUkVUVVJOKCIlcCIpLCBvbGR0ZXJtKSk7CisgICAgcmV0dXJuIChvbGR0ZXJtKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVsX2N1cnRlcm0oVEVSTUlOQUwgKiB0ZXJtcCkKK3sKKyAgICBpbnQgcmMgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiZGVsX2N1cnRlcm0oJXApIiksIHRlcm1wKSk7CisKKyAgICBfbmNfbG9ja19nbG9iYWwoY3Vyc2VzKTsKKyAgICBpZiAodGVybXAgIT0gMCkgeworCV9uY19mcmVlX3Rlcm10eXBlKCYodGVybXAtPnR5cGUpKTsKKwlGcmVlSWZOZWVkZWQodGVybXAtPl90ZXJtbmFtZSk7CisJZnJlZSh0ZXJtcCk7CisJaWYgKHRlcm1wID09IGN1cl90ZXJtKQorCSAgICBzZXRfY3VydGVybSgwKTsKKwlyYyA9IE9LOworICAgIH0KKyAgICBfbmNfdW5sb2NrX2dsb2JhbChjdXJzZXMpOworCisgICAgcmV0dXJuQ29kZShyYyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9kYXRhLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0MjA5ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX2RhdGEuYwpAQCAtMCwwICsxLDMzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2RhdGEuYworKioKKyoqCUNvbW1vbiBkYXRhIHRoYXQgbWF5L21heSBub3QgYmUgYWxsb2NhdGVkLCBidXQgaXMgcmVmZXJlbmNlZCBnbG9iYWxseQorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2RhdGEuYyx2IDEuNTIgMjAwOC8wOC8yMyAyMjoxNjoxNSB0b20gRXhwICQiKQorCisvKgorICogT1MvMidzIG5hdGl2ZSBsaW5rZXIgY29tcGxhaW5zIGlmIHdlIGRvbid0IGluaXRpYWxpemUgcHVibGljIGRhdGEgd2hlbgorICogY29uc3RydWN0aW5nIGEgZGxsIChyZXBvcnRlZCBieSBKLkouRy5SaXBvbGwpLgorICovCisjaWYgVVNFX1JFRU5UUkFOVAorTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitOQ1VSU0VTX1BVQkxJQ19WQVIoc3Rkc2NyKSAodm9pZCkKK3sKKyAgICByZXR1cm4gU1AgPyBTUC0+X3N0ZHNjciA6IDA7Cit9CitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK05DVVJTRVNfUFVCTElDX1ZBUihjdXJzY3IpICh2b2lkKQoreworICAgIHJldHVybiBTUCA/IFNQLT5fY3Vyc2NyIDogMDsKK30KK05DVVJTRVNfRVhQT1JUKFdJTkRPVyAqKQorTkNVUlNFU19QVUJMSUNfVkFSKG5ld3NjcikgKHZvaWQpCit7CisgICAgcmV0dXJuIFNQID8gU1AtPl9uZXdzY3IgOiAwOworfQorI2Vsc2UKK05DVVJTRVNfRVhQT1JUX1ZBUihXSU5ET1cgKikgc3Rkc2NyID0gMDsKK05DVVJTRVNfRVhQT1JUX1ZBUihXSU5ET1cgKikgY3Vyc2NyID0gMDsKK05DVVJTRVNfRVhQT1JUX1ZBUihXSU5ET1cgKikgbmV3c2NyID0gMDsKKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVF9WQVIoU0NSRUVOICopIF9uY19zY3JlZW5fY2hhaW4gPSAwOworCisvKgorICogVGhlIHZhcmlhYmxlICdTUCcgd2lsbCBiZSBkZWZpbmVkIGFzIGEgZnVuY3Rpb24gb24gc3lzdGVtcyB0aGF0IGNhbm5vdCBsaW5rCisgKiBkYXRhLW9ubHkgbW9kdWxlcywgc2luY2UgaXQgaXMgdXNlZCBpbiBhIGxvdCBvZiBwbGFjZXMgd2l0aGluIG5jdXJzZXMgYW5kIHdlCisgKiBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgYW55IGFwcGxpY2F0aW9uIHdpbGwgdXNlIGFueSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiAgV2UKKyAqIHB1dCB0aGUgV0lORE9XIHZhcmlhYmxlcyBpbiB0aGlzIG1vZHVsZSwgYmVjYXVzZSBpdCBhcHBlYXJzIHRoYXQgYW55CisgKiBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlbSB3aWxsIGFsc28gdXNlICdTUCcuCisgKgorICogVGhpcyBtb2R1bGUgaW50ZW50aW9uYWxseSBkb2VzIG5vdCByZWZlcmVuY2Ugb3RoZXIgbmN1cnNlcyBtb2R1bGVzLCB0byBhdm9pZAorICogbW9kdWxlIGNvdXBsaW5nIHRoYXQgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlLgorICovCisjaWYgQlJPS0VOX0xJTktFUgorc3RhdGljIFNDUkVFTiAqbXlfc2NyZWVuOworCitOQ1VSU0VTX0VYUE9SVChTQ1JFRU4gKikKK19uY19zY3JlZW4odm9pZCkKK3sKKyAgICByZXR1cm4gbXlfc2NyZWVuOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfYWxsb2Nfc2NyZWVuKHZvaWQpCit7CisgICAgcmV0dXJuICgobXlfc2NyZWVuID0gdHlwZUNhbGxvYyhTQ1JFRU4sIDEpKSAhPSAwKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zZXRfc2NyZWVuKFNDUkVFTiAqc3ApCit7CisgICAgbXlfc2NyZWVuID0gc3A7Cit9CisKKyNlbHNlCitOQ1VSU0VTX0VYUE9SVF9WQVIoU0NSRUVOICopIFNQID0gTlVMTDsgLyogU29tZSBsaW5rZXJzIHJlcXVpcmUgaW5pdGlhbGl6ZWQgZGF0YS4uLiAqLworI2VuZGlmCisvKiAqSU5ERU5ULU9GRiogKi8KKyNkZWZpbmUgQ0hBUlNfMHMgeyAnXDAnIH0KKworI2RlZmluZSBUR0VURU5UXzAgeyAwTCwgRkFMU0UsIE5VTEwsIE5VTEwsIE5VTEwgfQorI2RlZmluZSBUR0VURU5UXzBzIHsgVEdFVEVOVF8wLCBUR0VURU5UXzAsIFRHRVRFTlRfMCwgVEdFVEVOVF8wIH0KKworTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfR0xPQkFMUykgX25jX2dsb2JhbHMgPSB7CisgICAgMCwJCQkJLyogaGF2ZV9zaWd3aW5jaCAqLworICAgIDAsCQkJCS8qIGNsZWFudXBfbmVzdGVkICovCisKKyAgICBGQUxTRSwJCQkvKiBpbml0X3NpZ25hbHMgKi8KKyAgICBGQUxTRSwJCQkvKiBpbml0X3NjcmVlbiAqLworCisgICAgTlVMTCwJCQkvKiBjb21wX3NvdXJjZW5hbWUgKi8KKyAgICBOVUxMLAkJCS8qIGNvbXBfdGVybXR5cGUgKi8KKworICAgIEZBTFNFLAkJCS8qIGhhdmVfdGljX2RpcmVjdG9yeSAqLworICAgIEZBTFNFLAkJCS8qIGtlZXBfdGljX2RpcmVjdG9yeSAqLworICAgIFRFUk1JTkZPLAkJCS8qIHRpY19kaXJlY3RvcnkgKi8KKworICAgIE5VTEwsCQkJLyogZGJpX2xpc3QgKi8KKyAgICAwLAkJCQkvKiBkYmlfc2l6ZSAqLworCisgICAgTlVMTCwJCQkvKiBmaXJzdF9uYW1lICovCisgICAgTlVMTCwJCQkvKiBrZXluYW1lX3RhYmxlICovCisKKyAgICAwLAkJCQkvKiBzbGtfZm9ybWF0ICovCisKKyAgICBOVUxMLAkJCS8qIHNhZmVwcmludF9idWYgKi8KKyAgICAwLAkJCQkvKiBzYWZlcHJpbnRfdXNlZCAqLworCisgICAgVEdFVEVOVF8wcywJCQkvKiB0Z2V0ZW50X2NhY2hlICovCisgICAgMCwJCQkJLyogdGdldGVudF9pbmRleCAqLworICAgIDAsCQkJCS8qIHRnZXRlbnRfc2VxdWVuY2UgKi8KKworICAgIDAsCQkJCS8qIF9uY193aW5kb3dsaXN0ICovCisKKyNpZiBVU0VfSE9NRV9URVJNSU5GTworICAgIE5VTEwsCQkJLyogaG9tZV90ZXJtaW5mbyAqLworI2VuZGlmCisKKyNpZiAhVVNFX1NBRkVfU1BSSU5URgorICAgIDAsCQkJCS8qIHNhZmVwcmludF9jb2xzICovCisgICAgMCwJCQkJLyogc2FmZXByaW50X3Jvd3MgKi8KKyNlbmRpZgorCisjaWZkZWYgVFJBQ0UKKyAgICBGQUxTRSwJCQkvKiBpbml0X3RyYWNlICovCisgICAgQ0hBUlNfMHMsCQkJLyogdHJhY2VfZm5hbWUgKi8KKyAgICAwLAkJCQkvKiB0cmFjZV9sZXZlbCAqLworICAgIE5VTEwsCQkJLyogdHJhY2VfZnAgKi8KKworICAgIE5VTEwsCQkJLyogdHJhY2VhcmdfYnVmICovCisgICAgMCwJCQkJLyogdHJhY2VhcmdfdXNlZCAqLworCisgICAgTlVMTCwJCQkvKiB0cmFjZWJ1Zl9wdHIgKi8KKyAgICAwLAkJCQkvKiB0cmFjZWJ1Zl91c2VkICovCisKKyAgICBDSEFSU18wcywJCQkvKiB0cmFjZWNocl9idWYgKi8KKworICAgIE5VTEwsCQkJLyogdHJhY2VkbXBfYnVmICovCisgICAgMCwJCQkJLyogdHJhY2VkbXBfdXNlZCAqLworCisgICAgTlVMTCwJCQkvKiB0cmFjZXRyeV9idWYgKi8KKyAgICAwLAkJCQkvKiB0cmFjZXRyeV91c2VkICovCisKKyAgICB7IENIQVJTXzBzLCBDSEFSU18wcyB9LAkvKiB0cmFjZWF0cl9jb2xvcl9idWYgKi8KKyAgICAwLAkJCQkvKiB0cmFjZWF0cl9jb2xvcl9zZWwgKi8KKyAgICAtMSwJCQkJLyogdHJhY2VhdHJfY29sb3JfbGFzdCAqLworCisjZW5kaWYgLyogVFJBQ0UgKi8KKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyAgICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLAkvKiBtdXRleF9jdXJzZXMgKi8KKyAgICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLAkvKiBtdXRleF90c3RfdHJhY2VmICovCisgICAgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwJLyogbXV0ZXhfdHJhY2VmICovCisgICAgMCwJCQkJLyogbmVzdGVkX3RyYWNlZiAqLworICAgIDAsCQkJCS8qIHVzZV9wdGhyZWFkcyAqLworI2VuZGlmCit9OworCisjZGVmaW5lIFNUQUNLX0ZSQU1FXzAJeyB7IDAgfSwgMCB9CisjZGVmaW5lIFNUQUNLX0ZSQU1FXzBzCXsgU1RBQ0tfRlJBTUVfMCB9CisjZGVmaW5lIE5VTV9WQVJTXzBzCXsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0KKworI2RlZmluZSBSSVBPRkZfMAl7IDAsMCwwIH0KKyNkZWZpbmUgUklQT0ZGXzBzCXsgUklQT0ZGXzAgfQorCitOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19QUkVTQ1JFRU4pIF9uY19wcmVzY3JlZW4gPSB7CisgICAgVFJVRSwJCQkvKiB1c2VfZW52ICovCisgICAgRkFMU0UsCQkJLyogZmlsdGVyX21vZGUgKi8KKyAgICBBX05PUk1BTCwJCQkvKiBwcmV2aW91c19hdHRyICovCisgICAgUklQT0ZGXzBzLAkJCS8qIHJpcG9mZiAqLworICAgIE5VTEwsCQkJLyogcnNwICovCisgICAgewkJCQkvKiB0cGFybV9zdGF0ZSAqLworI2lmZGVmIFRSQUNFCisJTlVMTCwJCQkvKiB0bmFtZSAqLworI2VuZGlmCisJTlVMTCwJCQkvKiB0cGFyYW1fYmFzZSAqLworCisJU1RBQ0tfRlJBTUVfMHMsCQkvKiBzdGFjayAqLworCTAsCQkJLyogc3RhY2tfcHRyICovCisKKwlOVUxMLAkJCS8qIG91dF9idWZmICovCisJMCwJCQkvKiBvdXRfc2l6ZSAqLworCTAsCQkJLyogb3V0X3VzZWQgKi8KKworCU5VTEwsCQkJLyogZm10X2J1ZmYgKi8KKwkwLAkJCS8qIGZtdF9zaXplICovCisKKwlOVU1fVkFSU18wcywJCS8qIGR5bmFtaWNfdmFyICovCisJTlVNX1ZBUlNfMHMsCQkvKiBzdGF0aWNfdmFycyAqLworICAgIH0sCisgICAgTlVMTCwJCQkvKiBzYXZlZF90dHkgKi8KKyNpZiBOQ1VSU0VTX05PX1BBRERJTkcKKyAgICBGQUxTRSwJCQkvKiBmbGFnIHRvIHNldCBpZiBwYWRkaW5nIGRpc2FibGVkICAqLworI2VuZGlmCisjaWYgQlJPS0VOX0xJTktFUiB8fCBVU0VfUkVFTlRSQU5UCisgICAgTlVMTCwJCQkvKiByZWFsX2Fjc19tYXAgKi8KKyAgICAwLAkJCQkvKiBMSU5FUyAqLworICAgIDAsCQkJCS8qIENPTFMgKi8KKyAgICAwLAkJCQkvKiBjdXJfdGVybSAqLworI2lmZGVmIFRSQUNFCisgICAgMEwsCQkJCS8qIF9vdXRjaGFycyAqLworICAgIE5VTEwsCQkJLyogX3RwdXRzX3RyYWNlICovCisjZW5kaWYKKyNlbmRpZgorfTsKKy8qICpJTkRFTlQtT04qICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgVVNFX1BUSFJFQURTCitzdGF0aWMgdm9pZAoraW5pdF9nbG9iYWxfbXV0ZXhlcyh2b2lkKQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gRkFMU0U7CisKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisJaW5pdGlhbGl6ZWQgPSBUUlVFOworCV9uY19tdXRleF9pbml0KCZfbmNfZ2xvYmFscy5tdXRleF9jdXJzZXMpOworCV9uY19tdXRleF9pbml0KCZfbmNfZ2xvYmFscy5tdXRleF90c3RfdHJhY2VmKTsKKwlfbmNfbXV0ZXhfaW5pdCgmX25jX2dsb2JhbHMubXV0ZXhfdHJhY2VmKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfaW5pdF9wdGhyZWFkcyh2b2lkKQoreworICAgIGlmIChfbmNfdXNlX3B0aHJlYWRzKQorCXJldHVybjsKKyMgaWYgVVNFX1dFQUtfU1lNQk9MUworICAgIGlmICgocHRocmVhZF9tdXRleF9pbml0KSA9PSAwKQorCXJldHVybjsKKyAgICBpZiAoKHB0aHJlYWRfbXV0ZXhfbG9jaykgPT0gMCkKKwlyZXR1cm47CisgICAgaWYgKChwdGhyZWFkX211dGV4X3VubG9jaykgPT0gMCkKKwlyZXR1cm47CisgICAgaWYgKChwdGhyZWFkX211dGV4X3RyeWxvY2spID09IDApCisJcmV0dXJuOworICAgIGlmICgocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSkgPT0gMCkKKwlyZXR1cm47CisjIGVuZGlmCisgICAgX25jX3VzZV9wdGhyZWFkcyA9IDE7CisgICAgaW5pdF9nbG9iYWxfbXV0ZXhlcygpOworfQorCisvKgorICogVXNlIHJlY3Vyc2l2ZSBtdXRleGVzIGlmIHdlIGhhdmUgdGhlbSAtIHRoZXkncmUgcGFydCBvZiBVbml4OTguCisgKiBGb3IgdGhlIGNhc2VzIHdoZXJlIHdlIGRvIG5vdCwgX25jX211dGV4X3RyeWxvY2soKSBpcyB1c2VkIHRvIGF2b2lkIGEKKyAqIGRlYWRsb2NrLCBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgbGVha3MgYW5kIHVuZXhwZWN0ZWQgZmFpbHVyZXMgdGhhdAorICogbWF5IG5vdCBiZSBoYW5kbGVkIGJ5IHR5cGljYWwgY2xpZW50cy4KKyAqCisgKiBGSVhNRSAtIG5lZWQgY29uZmlndXJlIGNoZWNrIGZvciBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSwgZGVmaW5lIGl0IHRvCisgKiBQVEhSRUFEX01VVEVYX05PUk1BTCBpZiBub3Qgc3VwcG9ydGVkLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX211dGV4X2luaXQocHRocmVhZF9tdXRleF90ICogb2JqKQoreworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgcmVjYXR0cjsKKworICAgIGlmIChfbmNfdXNlX3B0aHJlYWRzKSB7CisJcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmcmVjYXR0cik7CisJcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmcmVjYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworCXB0aHJlYWRfbXV0ZXhfaW5pdChvYmosICZyZWNhdHRyKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqIG9iaikKK3sKKyAgICBpZiAoX25jX3VzZV9wdGhyZWFkcyA9PSAwKQorCXJldHVybiAwOworICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sob2JqKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICogb2JqKQoreworICAgIGlmIChfbmNfdXNlX3B0aHJlYWRzID09IDApCisJcmV0dXJuIDA7CisgICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhvYmopOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqIG9iaikKK3sKKyAgICBpZiAoX25jX3VzZV9wdGhyZWFkcyA9PSAwKQorCXJldHVybiAwOworICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9jayhvYmopOworfQorCisjaWYgVVNFX1dFQUtfU1lNQk9MUworLyoKKyAqIE5COiBzaWdwcm9jbWFzaygyKSBpcyBnbG9iYWwgYnV0IHB0aHJlYWRfc2lnbWFzaygzcCkKKyAqIG9ubHkgZm9yIHRoZSBjYWxsaW5nIHRocmVhZC4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3NpZ3Byb2NtYXNrKGludCBob3csIGNvbnN0IHNpZ3NldF90ICogbmV3bWFzaywgc2lnc2V0X3QgKiBvbGRtYXNrKQoreworICAgIGlmICgocHRocmVhZF9zaWdtYXNrKSkKKwlyZXR1cm4gcHRocmVhZF9zaWdtYXNrKGhvdywgbmV3bWFzaywgb2xkbWFzayk7CisgICAgZWxzZQorCXJldHVybiBzaWdwcm9jbWFzayhob3csIG5ld21hc2ssIG9sZG1hc2spOworfQorI2VuZGlmCisjZW5kaWYgLyogVVNFX1BUSFJFQURTICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9oYXNfY2FwLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9oYXNfY2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjNjZiZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX2hhc19jYXAuYwpAQCAtMCwwICsxLDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni0yMDAzICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaGFzX2NhcC5jCisqKgorKioJVGhlIHJvdXRpbmVzIHRvIHF1ZXJ5IHRlcm1pbmFsIGNhcGFiaWxpdGllcworKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2hhc19jYXAuYyx2IDEuNCAyMDAzLzEwLzI1IDE5OjQzOjU1IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGJvb2wpCitoYXNfaWModm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgiaGFzX2ljKCkiKSkpOworICAgIHJldHVybkNvZGUoY3VyX3Rlcm0gJiYKKwkgICAgICAgKGluc2VydF9jaGFyYWN0ZXIgfHwgcGFybV9pY2gKKwkJfHwgKGVudGVyX2luc2VydF9tb2RlICYmIGV4aXRfaW5zZXJ0X21vZGUpKQorCSAgICAgICAmJiAoZGVsZXRlX2NoYXJhY3RlciB8fCBwYXJtX2RjaCkpOworfQorCitOQ1VSU0VTX0VYUE9SVChib29sKQoraGFzX2lsKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoImhhc19pbCgpIikpKTsKKyAgICByZXR1cm5Db2RlKGN1cl90ZXJtCisJICAgICAgICYmIChpbnNlcnRfbGluZSB8fCBwYXJtX2luc2VydF9saW5lKQorCSAgICAgICAmJiAoZGVsZXRlX2xpbmUgfHwgcGFybV9kZWxldGVfbGluZSkpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfa2VybmVsLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9rZXJuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWRjMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfa2VybmVsLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgMjAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9rZXJuZWwuYworICoKKyAqCU1pc2MuIGxvdy1sZXZlbCByb3V0aW5lczoKKyAqCQllcmFzZWNoYXIoKQorICoJCWtpbGxjaGFyKCkKKyAqCQlmbHVzaGlucCgpCisgKgorICogVGhlIGJhdWRyYXRlKCkgYW5kIGRlbGF5X291dHB1dCgpIGZ1bmN0aW9ucyBjb3VsZCBsb2dpY2FsbHkgbGl2ZSBoZXJlLAorICogYnV0IGFyZSBpbiBvdGhlciBtb2R1bGVzIHRvIHJlZHVjZSB0aGUgc3RhdGljLWxpbmsgc2l6ZSBvZiBwcm9ncmFtcworICogdGhhdCB1c2Ugb25seSB0aGVzZSBmYWNpbGl0aWVzLgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGN1cl90ZXJtICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfa2VybmVsLmMsdiAxLjI0IDIwMDQvMDUvMDggMTc6MTE6MjEgdG9tIEV4cCAkIikKKworc3RhdGljIGludAorX25jX3ZkaXNhYmxlKHZvaWQpCit7CisgICAgaW50IHZhbHVlID0gLTE7CisjaWYgZGVmaW5lZChfUE9TSVhfVkRJU0FCTEUpICYmIEhBVkVfVU5JU1REX0gKKyAgICB2YWx1ZSA9IF9QT1NJWF9WRElTQUJMRTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX1BDX1ZESVNBQkxFKQorICAgIGlmICh2YWx1ZSA9PSAtMSkgeworCXZhbHVlID0gZnBhdGhjb25mKDAsIF9QQ19WRElTQUJMRSk7CisJaWYgKHZhbHVlID09IC0xKSB7CisJICAgIHZhbHVlID0gMDM3NzsKKwl9CisgICAgfQorI2VsaWYgZGVmaW5lZChWRElTQUJMRSkKKyAgICBpZiAodmFsdWUgPT0gLTEpCisJdmFsdWUgPSBWRElTQUJMRTsKKyNlbmRpZgorICAgIHJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqCWVyYXNlY2hhcigpCisgKgorICoJUmV0dXJuIGVyYXNlIGNoYXJhY3RlciBhcyBnaXZlbiBpbiBjdXJfdGVybS0+T3R0eWIuCisgKgorICovCisKK05DVVJTRVNfRVhQT1JUKGNoYXIpCitlcmFzZWNoYXIodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworICAgIFQoKFRfQ0FMTEVEKCJlcmFzZWNoYXIoKSIpKSk7CisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworI2lmZGVmIFRFUk1JT1MKKwlyZXN1bHQgPSBjdXJfdGVybS0+T3R0eWIuY19jY1tWRVJBU0VdOworCWlmIChyZXN1bHQgPT0gX25jX3ZkaXNhYmxlKCkpCisJICAgIHJlc3VsdCA9IEVSUjsKKyNlbHNlCisJcmVzdWx0ID0gY3VyX3Rlcm0tPk90dHliLnNnX2VyYXNlOworI2VuZGlmCisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyoKKyAqCWtpbGxjaGFyKCkKKyAqCisgKglSZXR1cm4ga2lsbCBjaGFyYWN0ZXIgYXMgZ2l2ZW4gaW4gY3VyX3Rlcm0tPk90dHliLgorICoKKyAqLworCitOQ1VSU0VTX0VYUE9SVChjaGFyKQora2lsbGNoYXIodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworICAgIFQoKFRfQ0FMTEVEKCJraWxsY2hhcigpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisjaWZkZWYgVEVSTUlPUworCXJlc3VsdCA9IGN1cl90ZXJtLT5PdHR5Yi5jX2NjW1ZLSUxMXTsKKwlpZiAocmVzdWx0ID09IF9uY192ZGlzYWJsZSgpKQorCSAgICByZXN1bHQgPSBFUlI7CisjZWxzZQorCXJlc3VsdCA9IGN1cl90ZXJtLT5PdHR5Yi5zZ19raWxsOworI2VuZGlmCisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyoKKyAqCWZsdXNoaW5wKCkKKyAqCisgKglGbHVzaCBhbnkgaW5wdXQgb24gY3VyX3Rlcm0tPkZpbGVkZXMKKyAqCisgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorZmx1c2hpbnAodm9pZCkKK3sKKyAgICBUKChUX0NBTExFRCgiZmx1c2hpbnAoKSIpKSk7CisKKyAgICBpZiAoY3VyX3Rlcm0gIT0gMCkgeworI2lmZGVmIFRFUk1JT1MKKwl0Y2ZsdXNoKGN1cl90ZXJtLT5GaWxlZGVzLCBUQ0lGTFVTSCk7CisjZWxzZQorCWVycm5vID0gMDsKKwlkbyB7CisJICAgIGlvY3RsKGN1cl90ZXJtLT5GaWxlZGVzLCBUSU9DRkxVU0gsIDApOworCX0gd2hpbGUKKwkgICAgKGVycm5vID09IEVJTlRSKTsKKyNlbmRpZgorCWlmIChTUCkgeworCSAgICBTUC0+X2ZpZm9oZWFkID0gLTE7CisJICAgIFNQLT5fZmlmb3RhaWwgPSAwOworCSAgICBTUC0+X2ZpZm9wZWVrID0gMDsKKwl9CisJcmV0dXJuQ29kZShPSyk7CisgICAgfQorICAgIHJldHVybkNvZGUoRVJSKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX2xvbmduYW1lLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9sb25nbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDFlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9sb25nbmFtZS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2xvbmduYW1lLmMKKyoqCisqKglUaGUgcm91dGluZSBsb25nbmFtZSgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2xvbmduYW1lLmMsdiAxLjkgMjAwMC8xMi8xMCAwMjo1NTowNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitsb25nbmFtZSh2b2lkKQoreworICAgIGNoYXIgKnB0cjsKKworICAgIFQoKFRfQ0FMTEVEKCJsb25nbmFtZSgpIikpKTsKKworICAgIGZvciAocHRyID0gdHR5dHlwZSArIHN0cmxlbih0dHl0eXBlKTsgcHRyID4gdHR5dHlwZTsgcHRyLS0pCisJaWYgKCpwdHIgPT0gJ3wnKQorCSAgICByZXR1cm5QdHIocHRyICsgMSk7CisKKyAgICByZXR1cm5QdHIodHR5dHlwZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl9uYXBtcy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfbmFwbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdiM2I0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfbmFwbXMuYwpAQCAtMCwwICsxLDc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl9uYXBtcy5jCisgKgorICoJVGhlIHJvdXRpbmUgbmFwbXMuCisgKgorICoJKFRoaXMgZmlsZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEVyaWMgUmF5bW9uZDsgaG93ZXZlciBleGNlcHQgZm9yCisgKgljb21tZW50cywgbm9uZSBvZiB0aGUgb3JpZ2luYWwgY29kZSByZW1haW5zIC0gVC5EaWNrZXkpLgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaWYgSEFWRV9OQU5PU0xFRVAKKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4JCS8qIG5lZWRlZCBmb3IgTWFjT1MgWCBEUDMgKi8KKyNlbmRpZgorI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiBsaWJfbmFwbXMuYyx2IDEuMTcgMjAwOC8wNS8wMyAyMTozNDoxMyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCituYXBtcyhpbnQgbXMpCit7CisgICAgVCgoVF9DQUxMRUQoIm5hcG1zKCVkKSIpLCBtcykpOworCisjaWYgSEFWRV9OQU5PU0xFRVAKKyAgICB7CisJc3RydWN0IHRpbWVzcGVjIHJlcXVlc3QsIHJlbWFpbmluZzsKKwlyZXF1ZXN0LnR2X3NlYyA9IG1zIC8gMTAwMDsKKwlyZXF1ZXN0LnR2X25zZWMgPSAobXMgJSAxMDAwKSAqIDEwMDAwMDA7CisJd2hpbGUgKG5hbm9zbGVlcCgmcmVxdWVzdCwgJnJlbWFpbmluZykgPT0gLTEKKwkgICAgICAgJiYgZXJybm8gPT0gRUlOVFIpIHsKKwkgICAgcmVxdWVzdCA9IHJlbWFpbmluZzsKKwl9CisgICAgfQorI2Vsc2UKKyAgICBfbmNfdGltZWRfd2FpdCgwLCAwLCBtcywgKGludCAqKSAwIEVWRU5UTElTVF8ybmQoMCkpOworI2VuZGlmCisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX29wdGlvbnMuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX29wdGlvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2IxNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfb3B0aW9ucy5jCkBAIC0wLDAgKzEsMzI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfb3B0aW9ucy5jCisqKgorKioJVGhlIHJvdXRpbmVzIHRvIGhhbmRsZSBvcHRpb24gc2V0dGluZy4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9vcHRpb25zLmMsdiAxLjU4IDIwMDgvMDgvMTYgMjE6MjA6NDggV2VybmVyLkZpbmsgRXhwICQiKQorCitzdGF0aWMgaW50IF9uY19jdXJzX3NldChTQ1JFRU4gKiwgaW50KTsKK3N0YXRpYyBpbnQgX25jX21ldGEoU0NSRUVOICosIGJvb2wpOworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitpZGxvayhXSU5ET1cgKndpbiwgYm9vbCBmbGFnKQoreworICAgIFQoKFRfQ0FMTEVEKCJpZGxvayglcCwlZCkiKSwgd2luLCBmbGFnKSk7CisKKyAgICBpZiAod2luKSB7CisJX25jX2lkbG9rID0gd2luLT5faWRsb2sgPSAoZmxhZyAmJiAoaGFzX2lsKCkgfHwgY2hhbmdlX3Njcm9sbF9yZWdpb24pKTsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitpZGNvayhXSU5ET1cgKndpbiwgYm9vbCBmbGFnKQoreworICAgIFQoKFRfQ0FMTEVEKCJpZGNvayglcCwlZCkiKSwgd2luLCBmbGFnKSk7CisKKyAgICBpZiAod2luKQorCV9uY19pZGNvayA9IHdpbi0+X2lkY29rID0gKGZsYWcgJiYgaGFzX2ljKCkpOworCisgICAgcmV0dXJuVm9pZDsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQoraGFsZmRlbGF5KGludCB0KQoreworICAgIFQoKFRfQ0FMTEVEKCJoYWxmZGVsYXkoJWQpIiksIHQpKTsKKworICAgIGlmICh0IDwgMSB8fCB0ID4gMjU1IHx8IFNQID09IDApCisJcmV0dXJuQ29kZShFUlIpOworCisgICAgY2JyZWFrKCk7CisgICAgU1AtPl9jYnJlYWsgPSB0ICsgMTsKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbm9kZWxheShXSU5ET1cgKndpbiwgYm9vbCBmbGFnKQoreworICAgIFQoKFRfQ0FMTEVEKCJub2RlbGF5KCVwLCVkKSIpLCB3aW4sIGZsYWcpKTsKKworICAgIGlmICh3aW4pIHsKKwlpZiAoZmxhZyA9PSBUUlVFKQorCSAgICB3aW4tPl9kZWxheSA9IDA7CisJZWxzZQorCSAgICB3aW4tPl9kZWxheSA9IC0xOworCXJldHVybkNvZGUoT0spOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbm90aW1lb3V0KFdJTkRPVyAqd2luLCBib29sIGYpCit7CisgICAgVCgoVF9DQUxMRUQoIm5vdGltZW91dCglcCwlZCkiKSwgd2luLCBmKSk7CisKKyAgICBpZiAod2luKSB7CisJd2luLT5fbm90aW1lb3V0ID0gZjsKKwlyZXR1cm5Db2RlKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm5Db2RlKEVSUik7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCit3dGltZW91dChXSU5ET1cgKndpbiwgaW50IGRlbGF5KQoreworICAgIFQoKFRfQ0FMTEVEKCJ3dGltZW91dCglcCwlZCkiKSwgd2luLCBkZWxheSkpOworCisgICAgaWYgKHdpbikgeworCXdpbi0+X2RlbGF5ID0gZGVsYXk7CisgICAgfQorICAgIHJldHVyblZvaWQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK2tleXBhZChXSU5ET1cgKndpbiwgYm9vbCBmbGFnKQoreworICAgIFQoKFRfQ0FMTEVEKCJrZXlwYWQoJXAsJWQpIiksIHdpbiwgZmxhZykpOworCisgICAgaWYgKHdpbikgeworCXdpbi0+X3VzZV9rZXlwYWQgPSBmbGFnOworCXJldHVybkNvZGUoX25jX2tleXBhZChTUCwgZmxhZykpOworICAgIH0gZWxzZQorCXJldHVybkNvZGUoRVJSKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorbWV0YShXSU5ET1cgKndpbiBHQ0NfVU5VU0VELCBib29sIGZsYWcpCit7CisgICAgaW50IHJlc3VsdDsKKworICAgIC8qIE9rLCB3ZSBzdGF5IHJlbGF4ZWQgYW5kIGRvbid0IHNpZ25hbCBhbiBlcnJvciBpZiB3aW4gaXMgTlVMTCAqLworICAgIFQoKFRfQ0FMTEVEKCJtZXRhKCVwLCVkKSIpLCB3aW4sIGZsYWcpKTsKKyAgICByZXN1bHQgPSBfbmNfbWV0YShTUCwgZmxhZyk7CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCisvKiBjdXJzX3NldCgpIG1vdmVkIGhlcmUgdG8gbmFycm93IHRoZSBrZXJuZWwgaW50ZXJmYWNlICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2N1cnNfc2V0KGludCB2aXMpCit7CisgICAgaW50IHJlc3VsdDsKKworICAgIFQoKFRfQ0FMTEVEKCJjdXJzX3NldCglZCkiKSwgdmlzKSk7CisgICAgcmVzdWx0ID0gX25jX2N1cnNfc2V0KFNQLCB2aXMpOworICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQordHlwZWFoZWFkKGludCBmZCkKK3sKKyAgICBUKChUX0NBTExFRCgidHlwZWFoZWFkKCVkKSIpLCBmZCkpOworICAgIGlmIChTUCAhPSAwKSB7CisJU1AtPl9jaGVja2ZkID0gZmQ7CisJcmV0dXJuQ29kZShPSyk7CisgICAgfSBlbHNlIHsKKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfQorfQorCisvKgorKiogICAgICBoYXNfa2V5KCkKKyoqCisqKiAgICAgIFJldHVybiBUUlVFIGlmIHRoZSBjdXJyZW50IHRlcm1pbmFsIGhhcyB0aGUgZ2l2ZW4ga2V5CisqKgorKi8KKworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCitzdGF0aWMgaW50CitoYXNfa2V5X2ludGVybmFsKGludCBrZXljb2RlLCBUUklFUyAqIHRwKQoreworICAgIGlmICh0cCA9PSAwKQorCXJldHVybiAoRkFMU0UpOworICAgIGVsc2UgaWYgKHRwLT52YWx1ZSA9PSBrZXljb2RlKQorCXJldHVybiAoVFJVRSk7CisgICAgZWxzZQorCXJldHVybiAoaGFzX2tleV9pbnRlcm5hbChrZXljb2RlLCB0cC0+Y2hpbGQpCisJCXx8IGhhc19rZXlfaW50ZXJuYWwoa2V5Y29kZSwgdHAtPnNpYmxpbmcpKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQoraGFzX2tleShpbnQga2V5Y29kZSkKK3sKKyAgICBUKChUX0NBTExFRCgiaGFzX2tleSglZCkiKSwga2V5Y29kZSkpOworICAgIHJldHVybkNvZGUoU1AgIT0gMCA/IGhhc19rZXlfaW50ZXJuYWwoa2V5Y29kZSwgU1AtPl9rZXl0cnkpIDogRkFMU0UpOworfQorI2VuZGlmIC8qIE5DVVJTRVNfRVhUX0ZVTkNTICovCisKKy8qCisgKiBJbnRlcm5hbCBlbnRyeXBvaW50cyB1c2UgU0NSRUVOKiBwYXJhbWV0ZXIgdG8gb2J0YWluIGNhcGFiaWxpdGllcyByYXRoZXIKKyAqIHRoYW4gY3VyX3Rlcm0uCisgKi8KKyN1bmRlZiBDVVIKKyNkZWZpbmUgQ1VSIChzcC0+X3Rlcm0pLT50eXBlLgorCitzdGF0aWMgaW50CitfbmNfcHV0cChjb25zdCBjaGFyICpuYW1lIEdDQ19VTlVTRUQsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICAgIGludCByYyA9IEVSUjsKKworICAgIGlmICh2YWx1ZSkgeworCVRQVVRTX1RSQUNFKG5hbWUpOworCXJjID0gcHV0cCh2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludAorX25jX3B1dHBfZmx1c2goY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgICAgaW50IHJjID0gX25jX3B1dHAobmFtZSwgdmFsdWUpOworICAgIGlmIChyYyAhPSBFUlIpIHsKKwlfbmNfZmx1c2goKTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisvKiBUdXJuIHRoZSBrZXlwYWQgb24vb2ZmCisgKgorICogTm90ZTogIHdlIGZsdXNoIHRoZSBvdXRwdXQgYmVjYXVzZSBjaGFuZ2luZyB0aGlzIG1vZGUgY2F1c2VzIHNvbWUgdGVybWluYWxzCisgKiB0byBlbWl0IGRpZmZlcmVudCBlc2NhcGUgc2VxdWVuY2VzIGZvciBjdXJzb3IgYW5kIGtleXBhZCBrZXlzLiAgSWYgd2UgZG9uJ3QKKyAqIGZsdXNoLCB0aGVuIHRoZSBuZXh0IHdnZXRjaCBtYXkgZ2V0IHRoZSBlc2NhcGUgc2VxdWVuY2UgdGhhdCBjb3JyZXNwb25kcyB0bworICogdGhlIHRlcm1pbmFsIHN0YXRlIF9iZWZvcmVfIHN3aXRjaGluZyBtb2Rlcy4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2tleXBhZChTQ1JFRU4gKnNwLCBib29sIGZsYWcpCit7CisgICAgaW50IHJjID0gRVJSOworCisgICAgaWYgKHNwICE9IDApIHsKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKwkvKgorCSAqIFdlIG1pZ2h0IGhhdmUgdGhpcyBzaXR1YXRpb24gaW4gYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9uIHRoYXQKKwkgKiBoYXMgd2dldGNoKCkgcmVhZGluZyBpbiBtb3JlIHRoYW4gb25lIHRocmVhZC4gIHB1dHAoKSBhbmQgYmVsb3cKKwkgKiBtYXkgdXNlIFNQIGV4cGxpY2l0bHkuCisJICovCisJaWYgKF9uY191c2VfcHRocmVhZHMgJiYgc3AgIT0gU1ApIHsKKwkgICAgU0NSRUVOICpzYXZlX3NwOworCisJICAgIC8qIGNhbm5vdCB1c2UgdXNlX3NjcmVlbigpLCBzaW5jZSB0aGF0IGlzIG5vdCBpbiB0aW5mbyBsaWJyYXJ5ICovCisJICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworCSAgICBzYXZlX3NwID0gU1A7CisJICAgIF9uY19zZXRfc2NyZWVuKHNwKTsKKwkgICAgcmMgPSBfbmNfa2V5cGFkKHNwLCBmbGFnKTsKKwkgICAgX25jX3NldF9zY3JlZW4oc2F2ZV9zcCk7CisJICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJICAgIGlmIChmbGFnKSB7CisJCSh2b2lkKSBfbmNfcHV0cF9mbHVzaCgia2V5cGFkX3htaXQiLCBrZXlwYWRfeG1pdCk7CisJICAgIH0gZWxzZSBpZiAoIWZsYWcgJiYga2V5cGFkX2xvY2FsKSB7CisJCSh2b2lkKSBfbmNfcHV0cF9mbHVzaCgia2V5cGFkX2xvY2FsIiwga2V5cGFkX2xvY2FsKTsKKwkgICAgfQorCisJICAgIGlmIChmbGFnICYmICFzcC0+X3RyaWVkKSB7CisJCV9uY19pbml0X2tleXRyeShzcCk7CisJCXNwLT5fdHJpZWQgPSBUUlVFOworCSAgICB9CisJICAgIHNwLT5fa2V5cGFkX29uID0gZmxhZzsKKwkgICAgcmMgPSBPSzsKKwl9CisgICAgfQorICAgIHJldHVybiAocmMpOworfQorCitzdGF0aWMgaW50CitfbmNfY3Vyc19zZXQoU0NSRUVOICpzcCwgaW50IHZpcykKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImN1cnNfc2V0KCVkKSIpLCB2aXMpKTsKKyAgICBpZiAoc3AgIT0gMCAmJiB2aXMgPj0gMCAmJiB2aXMgPD0gMikgeworCWludCBjdXJzb3IgPSBzcC0+X2N1cnNvcjsKKworCWlmICh2aXMgPT0gY3Vyc29yKSB7CisJICAgIHJlc3VsdCA9IGN1cnNvcjsKKwl9IGVsc2UgeworCSAgICBzd2l0Y2ggKHZpcykgeworCSAgICBjYXNlIDI6CisJCXJlc3VsdCA9IF9uY19wdXRwX2ZsdXNoKCJjdXJzb3JfdmlzaWJsZSIsIGN1cnNvcl92aXNpYmxlKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMToKKwkJcmVzdWx0ID0gX25jX3B1dHBfZmx1c2goImN1cnNvcl9ub3JtYWwiLCBjdXJzb3Jfbm9ybWFsKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMDoKKwkJcmVzdWx0ID0gX25jX3B1dHBfZmx1c2goImN1cnNvcl9pbnZpc2libGUiLCBjdXJzb3JfaW52aXNpYmxlKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKHJlc3VsdCAhPSBFUlIpCisJCXJlc3VsdCA9IChjdXJzb3IgPT0gLTEgPyAxIDogY3Vyc29yKTsKKwkgICAgc3AtPl9jdXJzb3IgPSB2aXM7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQKK19uY19tZXRhKFNDUkVFTiAqc3AsIGJvb2wgZmxhZykKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgLyogT2ssIHdlIHN0YXkgcmVsYXhlZCBhbmQgZG9uJ3Qgc2lnbmFsIGFuIGVycm9yIGlmIHdpbiBpcyBOVUxMICovCisKKyAgICBpZiAoU1AgIT0gMCkgeworCVNQLT5fdXNlX21ldGEgPSBmbGFnOworCisJaWYgKGZsYWcpIHsKKwkgICAgX25jX3B1dHAoIm1ldGFfb24iLCBtZXRhX29uKTsKKwl9IGVsc2UgeworCSAgICBfbmNfcHV0cCgibWV0YV9vZmYiLCBtZXRhX29mZik7CisJfQorCXJlc3VsdCA9IE9LOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfcHJpbnQuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3ByaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1YjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3ByaW50LmMKQEAgLTAsMCArMSw5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3ByaW50LmMsdiAxLjE2IDIwMDYvMTEvMjYgMDA6MjY6MzQgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorbWNwcmludChjaGFyICpkYXRhLCBpbnQgbGVuKQorLyogc2hpcCBiaW5hcnkgY2hhcmFjdGVyIGRhdGEgdG8gdGhlIHByaW50ZXIgdmlhIG1jNC9tYzUvbWM1cCAqLworeworICAgIGNoYXIgKm15YnVmLCAqc3dpdGNob247CisgICAgc2l6ZV90IG9uc2l6ZSwgb2Zmc2l6ZSwgcmVzOworCisgICAgZXJybm8gPSAwOworICAgIGlmICghY3VyX3Rlcm0gfHwgKCFwcnRyX25vbiAmJiAoIXBydHJfb24gfHwgIXBydHJfb2ZmKSkpIHsKKwllcnJubyA9IEVOT0RFVjsKKwlyZXR1cm4gKEVSUik7CisgICAgfQorCisgICAgaWYgKHBydHJfbm9uKSB7CisJc3dpdGNob24gPSBUUEFSTV8xKHBydHJfbm9uLCBsZW4pOworCW9uc2l6ZSA9IHN0cmxlbihzd2l0Y2hvbik7CisJb2Zmc2l6ZSA9IDA7CisgICAgfSBlbHNlIHsKKwlzd2l0Y2hvbiA9IHBydHJfb247CisJb25zaXplID0gc3RybGVuKHBydHJfb24pOworCW9mZnNpemUgPSBzdHJsZW4ocHJ0cl9vZmYpOworICAgIH0KKworICAgIGlmIChzd2l0Y2hvbiA9PSAwCisJfHwgKG15YnVmID0gdHlwZU1hbGxvYyhjaGFyLCBvbnNpemUgKyBsZW4gKyBvZmZzaXplICsgMSkpID09IDApIHsKKwllcnJubyA9IEVOT01FTTsKKwlyZXR1cm4gKEVSUik7CisgICAgfQorCisgICAgKHZvaWQpIHN0cmNweShteWJ1Ziwgc3dpdGNob24pOworICAgIG1lbWNweShteWJ1ZiArIG9uc2l6ZSwgZGF0YSwgKHVuc2lnbmVkKSBsZW4pOworICAgIGlmIChvZmZzaXplKQorCSh2b2lkKSBzdHJjcHkobXlidWYgKyBvbnNpemUgKyBsZW4sIHBydHJfb2ZmKTsKKworICAgIC8qCisgICAgICogV2UncmUgcmVseWluZyBvbiB0aGUgYXRvbWljaXR5IG9mIFVOSVggd3JpdGVzIGhlcmUuICBUaGUKKyAgICAgKiBkYW5nZXIgaXMgdGhhdCBvdXRwdXQgZnJvbSBhIHJlZnJlc2goKSBtaWdodCBnZXQgaW50ZXJzcGVyc2VkCisgICAgICogd2l0aCB0aGUgcHJpbnRlciBkYXRhIGFmdGVyIHRoZSB3cml0ZSBjYWxsIHJldHVybnMgYnV0IGJlZm9yZSB0aGUKKyAgICAgKiBkYXRhIGhhcyBhY3R1YWxseSBiZWVuIHNoaXBwZWQgdG8gdGhlIHRlcm1pbmFsLiAgSWYgdGhlIHdyaXRlKDIpCisgICAgICogb3BlcmF0aW9uIGlzIHRydWx5IGF0b21pYyB3ZSdyZSBwcm90ZWN0ZWQgZnJvbSB0aGlzLgorICAgICAqLworICAgIHJlcyA9IHdyaXRlKGN1cl90ZXJtLT5GaWxlZGVzLCBteWJ1Ziwgb25zaXplICsgbGVuICsgb2Zmc2l6ZSk7CisKKyAgICAvKgorICAgICAqIEJ5IGdpdmluZyB1cCBvdXIgc2NoZWR1bGVyIHNsb3QgaGVyZSB3ZSBpbmNyZWFzZSB0aGUgb2RkcyB0aGF0IHRoZQorICAgICAqIGtlcm5lbCB3aWxsIHNoaXAgdGhlIGNvbnRpZ3VvdXMgY2xpc3QgaXRlbXMgZnJvbSB0aGUgbGFzdCB3cml0ZQorICAgICAqIGltbWVkaWF0ZWx5LgorICAgICAqLworICAgICh2b2lkKSBzbGVlcCgwKTsKKworICAgIGZyZWUobXlidWYpOworICAgIHJldHVybiAocmVzKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3Jhdy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfcmF3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlNzE4OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3Jhdy5jCkBAIC0wLDAgKzEsMjk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5IDE5OTggb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglyYXcuYworICoKKyAqCVJvdXRpbmVzOgorICoJCXJhdygpCisgKgkJY2JyZWFrKCkKKyAqCQlub3JhdygpCisgKgkJbm9jYnJlYWsoKQorICoJCXFpZmx1c2goKQorICoJCW5vcWlmbHVzaCgpCisgKgkJaW50cmZsdXNoKCkKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgkJLyogY3VyX3Rlcm0gKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9yYXcuYyx2IDEuMTQgMjAwNy8wOS8yOSAyMTo1MDoyMiB0b20gRXhwICQiKQorCisjaWYgU1ZSNF9URVJNSU8gJiYgIWRlZmluZWQoX1BPU0lYX1NPVVJDRSkKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19URVJNSU9fSAorI2luY2x1ZGUgPHN5cy90ZXJtaW8uaD4JCS8qIG5lZWRlZCBmb3IgSVNDICovCisjZW5kaWYKKworI2lmZGVmIF9fRU1YX18KKyNpbmNsdWRlIDxpby5oPgorI2RlZmluZSBfbmNfc2V0bW9kZShtb2RlKSBzZXRtb2RlKFNQLT5faWZkLCBtb2RlKQorI2Vsc2UKKyNkZWZpbmUgX25jX3NldG1vZGUobW9kZSkJLyogbm90aGluZyAqLworI2VuZGlmCisKKyNkZWZpbmUgQ09PS0VEX0lOUFVUCShJWE9OfEJSS0lOVHxQQVJNUkspCisKKyNpZmRlZiBUUkFDRQorI2RlZmluZSBCRUZPUkUoTikJaWYgKFVTRV9UUkFDRUYoVFJBQ0VfQklUUykpIF9uY19sb2NrZWRfdHJhY2VmKCIlcyBiZWZvcmUgYml0czogJXMiLCBOLCBfbmNfdHJhY2ViaXRzKCkpCisjZGVmaW5lIEFGVEVSKE4pCWlmIChVU0VfVFJBQ0VGKFRSQUNFX0JJVFMpKSBfbmNfbG9ja2VkX3RyYWNlZigiJXMgYWZ0ZXIgYml0czogJXMiLCBOLCBfbmNfdHJhY2ViaXRzKCkpCisjZWxzZQorI2RlZmluZSBCRUZPUkUocykKKyNkZWZpbmUgQUZURVIocykKKyNlbmRpZiAvKiBUUkFDRSAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCityYXcodm9pZCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoInJhdygpIikpKTsKKworICAgIGlmIChTUCAhPSAwICYmIGN1cl90ZXJtICE9IDApIHsKKwlUVFkgYnVmOworCisJQkVGT1JFKCJyYXciKTsKKwlfbmNfc2V0bW9kZShPX0JJTkFSWSk7CisKKwlidWYgPSBjdXJfdGVybS0+TnR0eWI7CisjaWZkZWYgVEVSTUlPUworCWJ1Zi5jX2xmbGFnICY9IH4oSUNBTk9OIHwgSVNJRyB8IElFWFRFTik7CisJYnVmLmNfaWZsYWcgJj0gfihDT09LRURfSU5QVVQpOworCWJ1Zi5jX2NjW1ZNSU5dID0gMTsKKwlidWYuY19jY1tWVElNRV0gPSAwOworI2Vsc2UKKwlidWYuc2dfZmxhZ3MgfD0gUkFXOworI2VuZGlmCisJaWYgKChyZXN1bHQgPSBfbmNfc2V0X3R0eV9tb2RlKCZidWYpKSA9PSBPSykgeworCSAgICBTUC0+X3JhdyA9IFRSVUU7CisJICAgIFNQLT5fY2JyZWFrID0gMTsKKwkgICAgY3VyX3Rlcm0tPk50dHliID0gYnVmOworCX0KKwlBRlRFUigicmF3Iik7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorY2JyZWFrKHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJjYnJlYWsoKSIpKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBjdXJfdGVybSAhPSAwKSB7CisJVFRZIGJ1ZjsKKworCUJFRk9SRSgiY2JyZWFrIik7CisJX25jX3NldG1vZGUoT19CSU5BUlkpOworCisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlidWYuY19sZmxhZyAmPSB+SUNBTk9OOworCWJ1Zi5jX2lmbGFnICY9IH5JQ1JOTDsKKwlidWYuY19sZmxhZyB8PSBJU0lHOworCWJ1Zi5jX2NjW1ZNSU5dID0gMTsKKwlidWYuY19jY1tWVElNRV0gPSAwOworI2Vsc2UKKwlidWYuc2dfZmxhZ3MgfD0gQ0JSRUFLOworI2VuZGlmCisJaWYgKChyZXN1bHQgPSBfbmNfc2V0X3R0eV9tb2RlKCZidWYpKSA9PSBPSykgeworCSAgICBTUC0+X2NicmVhayA9IDE7CisJICAgIGN1cl90ZXJtLT5OdHR5YiA9IGJ1ZjsKKwl9CisJQUZURVIoImNicmVhayIpOworICAgIH0KKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CisKKy8qCisgKiBOb3RlOgorICogdGhpcyBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgd3JvbmcuICBTZWUgdGhlIGNvbW1lbnQgdW5kZXIgaW50cmZsdXNoKCkuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitxaWZsdXNoKHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJxaWZsdXNoKCkiKSkpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKwlUVFkgYnVmOworCisJQkVGT1JFKCJxaWZsdXNoIik7CisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlidWYuY19sZmxhZyAmPSB+KE5PRkxTSCk7CisJcmVzdWx0ID0gX25jX3NldF90dHlfbW9kZSgmYnVmKTsKKyNlbHNlCisJLyogRklYTUUgKi8KKyNlbmRpZgorCWlmIChyZXN1bHQgPT0gT0spCisJICAgIGN1cl90ZXJtLT5OdHR5YiA9IGJ1ZjsKKwlBRlRFUigicWlmbHVzaCIpOworICAgIH0KKyAgICByZXR1cm5Wb2lkOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitub3Jhdyh2b2lkKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgibm9yYXcoKSIpKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBjdXJfdGVybSAhPSAwKSB7CisJVFRZIGJ1ZjsKKworCUJFRk9SRSgibm9yYXciKTsKKwlfbmNfc2V0bW9kZShPX1RFWFQpOworCisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlidWYuY19sZmxhZyB8PSBJU0lHIHwgSUNBTk9OIHwKKwkgICAgKGN1cl90ZXJtLT5PdHR5Yi5jX2xmbGFnICYgSUVYVEVOKTsKKwlidWYuY19pZmxhZyB8PSBDT09LRURfSU5QVVQ7CisjZWxzZQorCWJ1Zi5zZ19mbGFncyAmPSB+KFJBVyB8IENCUkVBSyk7CisjZW5kaWYKKwlpZiAoKHJlc3VsdCA9IF9uY19zZXRfdHR5X21vZGUoJmJ1ZikpID09IE9LKSB7CisJICAgIFNQLT5fcmF3ID0gRkFMU0U7CisJICAgIFNQLT5fY2JyZWFrID0gMDsKKwkgICAgY3VyX3Rlcm0tPk50dHliID0gYnVmOworCX0KKwlBRlRFUigibm9yYXciKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitub2NicmVhayh2b2lkKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgibm9jYnJlYWsoKSIpKSk7CisKKyAgICBpZiAoU1AgIT0gMCAmJiBjdXJfdGVybSAhPSAwKSB7CisJVFRZIGJ1ZjsKKworCUJFRk9SRSgibm9jYnJlYWsiKTsKKwlfbmNfc2V0bW9kZShPX1RFWFQpOworCisJYnVmID0gY3VyX3Rlcm0tPk50dHliOworI2lmZGVmIFRFUk1JT1MKKwlidWYuY19sZmxhZyB8PSBJQ0FOT047CisJYnVmLmNfaWZsYWcgfD0gSUNSTkw7CisjZWxzZQorCWJ1Zi5zZ19mbGFncyAmPSB+Q0JSRUFLOworI2VuZGlmCisJaWYgKChyZXN1bHQgPSBfbmNfc2V0X3R0eV9tb2RlKCZidWYpKSA9PSBPSykgeworCSAgICBTUC0+X2NicmVhayA9IDA7CisJICAgIGN1cl90ZXJtLT5OdHR5YiA9IGJ1ZjsKKwl9CisJQUZURVIoIm5vY2JyZWFrIik7CisgICAgfQorICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KKworLyoKKyAqIE5vdGU6CisgKiB0aGlzIGltcGxlbWVudGF0aW9uIG1heSBiZSB3cm9uZy4gIFNlZSB0aGUgY29tbWVudCB1bmRlciBpbnRyZmx1c2goKS4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK25vcWlmbHVzaCh2b2lkKQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgibm9xaWZsdXNoKCkiKSkpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKwlUVFkgYnVmOworCisJQkVGT1JFKCJub3FpZmx1c2giKTsKKwlidWYgPSBjdXJfdGVybS0+TnR0eWI7CisjaWZkZWYgVEVSTUlPUworCWJ1Zi5jX2xmbGFnIHw9IE5PRkxTSDsKKwlyZXN1bHQgPSBfbmNfc2V0X3R0eV9tb2RlKCZidWYpOworI2Vsc2UKKwkvKiBGSVhNRSAqLworI2VuZGlmCisJaWYgKHJlc3VsdCA9PSBPSykgeworCSAgICBjdXJfdGVybS0+TnR0eWIgPSBidWY7CisJfQorCUFGVEVSKCJub3FpZmx1c2giKTsKKyAgICB9CisgICAgcmV0dXJuVm9pZDsKK30KKworLyoKKyAqIFRoaXMgY2FsbCBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBxaWZsdXNoKCkvbm9xaWZsdXNoKCkgcGFpci4gIFdlIGtub3cKKyAqIGZvciBjZXJ0YWluIHRoYXQgU1ZyMyBpbnRyZmx1c2goKSB0d2Vha3MgdGhlIE5PRkxTSCBiaXQ7IG9uIHRoZSBvdGhlciBoYW5kLAorICogdGhlIG1hdGNoIChpbiB0aGUgU1ZyNCBtYW4gcGFnZXMpIGJldHdlZW4gdGhlIGxhbmd1YWdlIGRlc2NyaWJpbmcgTk9GTFNIIGluCisgKiB0ZXJtaW8oNykgYW5kIHRoZSBsYW5ndWFnZSBkZXNjcmliaW5nIHFpZmx1c2goKS9ub3FpZmx1c2goKSBpbgorICogY3Vyc19pbm9wdHMoM3gpIGlzIHRvbyBleGFjdCB0byBiZSBjb2luY2lkZW5jZS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQoraW50cmZsdXNoKFdJTkRPVyAqd2luIEdDQ19VTlVTRUQsIGJvb2wgZmxhZykKK3sKKyAgICBpbnQgcmVzdWx0ID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoImludHJmbHVzaCglZCkiKSwgZmxhZykpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKwlUVFkgYnVmOworCisJQkVGT1JFKCJpbnRyZmx1c2giKTsKKwlidWYgPSBjdXJfdGVybS0+TnR0eWI7CisjaWZkZWYgVEVSTUlPUworCWlmIChmbGFnKQorCSAgICBidWYuY19sZmxhZyAmPSB+KE5PRkxTSCk7CisJZWxzZQorCSAgICBidWYuY19sZmxhZyB8PSAoTk9GTFNIKTsKKwlyZXN1bHQgPSBfbmNfc2V0X3R0eV9tb2RlKCZidWYpOworI2Vsc2UKKwkvKiBGSVhNRSAqLworI2VuZGlmCisJaWYgKHJlc3VsdCA9PSBPSykgeworCSAgICBjdXJfdGVybS0+TnR0eWIgPSBidWY7CisJfQorCUFGVEVSKCJpbnRyZmx1c2giKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfc2V0dXAuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmYWYxMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3NldHVwLmMKQEAgLTAsMCArMSw2MzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRlcm1pbmFsIHNldHVwIHJvdXRpbmVzIGNvbW1vbiB0byB0ZXJtY2FwIGFuZCB0ZXJtaW5mbzoKKyAqCisgKgkJdXNlX2Vudihib29sKQorICoJCXNldHVwdGVybShjaGFyICosIGludCwgaW50ICopCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGljLmg+CQkvKiBmb3IgTUFYX05BTUVfU0laRSAqLworI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworI2lmIFNWUjRfVEVSTUlPICYmICFkZWZpbmVkKF9QT1NJWF9TT1VSQ0UpCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgorCisjaWYgSEFWRV9MT0NBTEVfSAorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBsaW5lcywgY29sdW1ucywgY3VyX3Rlcm0gKi8KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zZXR1cC5jLHYgMS4xMTEgMjAwOC8wOC8wMyAyMjo0MjozMyB0b20gRXhwICQiKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRlcm1pbmFsIHNpemUgY29tcHV0YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIEhBVkVfU0laRUNIQU5HRQorIyBpZiAhZGVmaW5lZChzdW4pIHx8ICFURVJNSU9TCisjICBpZiBIQVZFX1NZU19JT0NUTF9ICisjICAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBORUVEX1BURU1fSAorIC8qIE9uIFNDTywgdGhleSBuZWdsZWN0ZWQgdG8gZGVmaW5lIHN0cnVjdCB3aW5zaXplIGluIHRlcm1pb3MuaCAtLSBpdCdzIG9ubHkKKyAgKiBpbiB0ZXJtaW8uaCBhbmQgcHRlbS5oICh0aGUgZm9ybWVyIGNvbmZsaWN0cyB3aXRoIG90aGVyIGRlZmluaXRpb25zKS4KKyAgKi8KKyMgaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorIyBpbmNsdWRlIDxzeXMvcHRlbS5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmCisKKy8qCisgKiBTQ08gZGVmaW5lcyBUSU9DR1NJWkUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHN0cnVjdC4gIE90aGVyIHN5c3RlbXMgKFN1bk9TLAorICogU29sYXJpcywgSVJJWCkgZGVmaW5lIFRJT0NHV0lOU1ogYW5kIHN0cnVjdCB3aW5zaXplLgorICovCisjaWZkZWYgVElPQ0dTSVpFCisjIGRlZmluZSBJT0NUTF9XSU5TSVpFIFRJT0NHU0laRQorIyBkZWZpbmUgU1RSVUNUX1dJTlNJWkUgc3RydWN0IHR0eXNpemUKKyMgZGVmaW5lIFdJTlNJWkVfUk9XUyhuKSAoaW50KW4udHNfbGluZXMKKyMgZGVmaW5lIFdJTlNJWkVfQ09MUyhuKSAoaW50KW4udHNfY29scworI2Vsc2UKKyMgaWZkZWYgVElPQ0dXSU5TWgorIyAgZGVmaW5lIElPQ1RMX1dJTlNJWkUgVElPQ0dXSU5TWgorIyAgZGVmaW5lIFNUUlVDVF9XSU5TSVpFIHN0cnVjdCB3aW5zaXplCisjICBkZWZpbmUgV0lOU0laRV9ST1dTKG4pIChpbnQpbi53c19yb3cKKyMgIGRlZmluZSBXSU5TSVpFX0NPTFMobikgKGludCluLndzX2NvbAorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBSZWR1Y2UgZXhwbGljaXQgdXNlIG9mICJjdXJfdGVybSIgZ2xvYmFsIHZhcmlhYmxlLgorICovCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiB0ZXJtcC0+dHlwZS4KKworLyoKKyAqIFdyYXAgZ2xvYmFsIHZhcmlhYmxlcyBpbiB0aGlzIG1vZHVsZS4KKyAqLworI2lmIFVTRV9SRUVOVFJBTlQKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK05DVVJTRVNfUFVCTElDX1ZBUih0dHl0eXBlKSAodm9pZCkKK3sKKyAgICBzdGF0aWMgY2hhciBlbXB0eVtdID0gIiI7CisgICAgcmV0dXJuIGN1cl90ZXJtID8gY3VyX3Rlcm0tPnR5cGUudGVybV9uYW1lcyA6IGVtcHR5OworfQorTkNVUlNFU19FWFBPUlQoaW50ICopCitfbmNfcHRyX0xpbmVzKHZvaWQpCit7CisgICAgcmV0dXJuIHB0ckxpbmVzKCk7Cit9CitOQ1VSU0VTX0VYUE9SVChpbnQpCitOQ1VSU0VTX1BVQkxJQ19WQVIoTElORVMpICh2b2lkKQoreworICAgIHJldHVybiAqX25jX3B0cl9MaW5lcygpOworfQorTkNVUlNFU19FWFBPUlQoaW50ICopCitfbmNfcHRyX0NvbHModm9pZCkKK3sKKyAgICByZXR1cm4gcHRyQ29scygpOworfQorTkNVUlNFU19FWFBPUlQoaW50KQorTkNVUlNFU19QVUJMSUNfVkFSKENPTFMpICh2b2lkKQoreworICAgIHJldHVybiAqX25jX3B0cl9Db2xzKCk7Cit9CitOQ1VSU0VTX0VYUE9SVChpbnQpCitOQ1VSU0VTX1BVQkxJQ19WQVIoVEFCU0laRSkgKHZvaWQpCit7CisgICAgcmV0dXJuIFNQID8gU1AtPl9UQUJTSVpFIDogODsKK30KKyNlbHNlCitOQ1VSU0VTX0VYUE9SVF9WQVIoY2hhcikgdHR5dHlwZVtOQU1FU0laRV0gPSAiIjsKK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIExJTkVTID0gMDsKK05DVVJTRVNfRVhQT1JUX1ZBUihpbnQpIENPTFMgPSAwOworTkNVUlNFU19FWFBPUlRfVkFSKGludCkgVEFCU0laRSA9IDA7CisjZW5kaWYKKworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfdGFic2l6ZShpbnQgdmFsdWUpCit7CisgICAgaW50IGNvZGUgPSBPSzsKKyNpZiBVU0VfUkVFTlRSQU5UCisgICAgaWYgKFNQKSB7CisJU1AtPl9UQUJTSVpFID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKwljb2RlID0gRVJSOworICAgIH0KKyNlbHNlCisgICAgVEFCU0laRSA9IHZhbHVlOworI2VuZGlmCisgICAgcmV0dXJuIGNvZGU7Cit9CisjZW5kaWYKKworI2lmIFVTRV9TSUdXSU5DSAorLyoKKyAqIElmIHdlIGhhdmUgYSBwZW5kaW5nIFNJR1dJTkNILCBzZXQgdGhlIGZsYWcgaW4gZWFjaCBzY3JlZW4uCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19oYW5kbGVfc2lnd2luY2goU0NSRUVOICpzcCkKK3sKKyAgICBTQ1JFRU4gKnNjYW47CisKKyAgICBpZiAoX25jX2dsb2JhbHMuaGF2ZV9zaWd3aW5jaCkgeworCV9uY19nbG9iYWxzLmhhdmVfc2lnd2luY2ggPSAwOworCisJZm9yIChlYWNoX3NjcmVlbihzY2FuKSkgeworCSAgICBzY2FuLT5fc2lnX3dpbmNoID0gVFJVRTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChzcCA/IHNwLT5fc2lnX3dpbmNoIDogMCk7Cit9CisKKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQordXNlX2Vudihib29sIGYpCit7CisgICAgVCgoVF9DQUxMRUQoInVzZV9lbnYoKSIpKSk7CisgICAgX25jX3ByZXNjcmVlbi51c2VfZW52ID0gZjsKKyAgICByZXR1cm5Wb2lkOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2dldF9zY3JlZW5zaXplKFNDUkVFTiAqc3AsIGludCAqbGluZXAsIGludCAqY29scCkKKy8qIE9idGFpbiBsaW5lcy9jb2x1bW5zIHZhbHVlcyBmcm9tIHRoZSBlbnZpcm9ubWVudCBhbmQvb3IgdGVybWluZm8gZW50cnkgKi8KK3sKKyAgICBURVJNSU5BTCAqdGVybXAgPSBjdXJfdGVybTsKKyAgICBpbnQgbXlfdGFic2l6ZTsKKworICAgIC8qIGZpZ3VyZSBvdXQgdGhlIHNpemUgb2YgdGhlIHNjcmVlbiAqLworICAgIFQoKCJzY3JlZW4gc2l6ZTogdGVybWluZm8gbGluZXMgPSAlZCBjb2x1bW5zID0gJWQiLCBsaW5lcywgY29sdW1ucykpOworCisgICAgaWYgKCFfbmNfcHJlc2NyZWVuLnVzZV9lbnYpIHsKKwkqbGluZXAgPSAoaW50KSBsaW5lczsKKwkqY29scCA9IChpbnQpIGNvbHVtbnM7CisgICAgfSBlbHNlIHsJCQkvKiB1c3VhbGx5IHdhbnQgdG8gcXVlcnkgTElORVMgYW5kIENPTFVNTlMgZnJvbSBlbnZpcm9ubWVudCAqLworCWludCB2YWx1ZTsKKworCSpsaW5lcCA9ICpjb2xwID0gMDsKKworCS8qIGZpcnN0LCBsb29rIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KKwlpZiAoKHZhbHVlID0gX25jX2dldGVudl9udW0oIkxJTkVTIikpID4gMCkgeworCSAgICAqbGluZXAgPSB2YWx1ZTsKKwl9CisJaWYgKCh2YWx1ZSA9IF9uY19nZXRlbnZfbnVtKCJDT0xVTU5TIikpID4gMCkgeworCSAgICAqY29scCA9IHZhbHVlOworCX0KKwlUKCgic2NyZWVuIHNpemU6IGVudmlyb25tZW50IExJTkVTID0gJWQgQ09MVU1OUyA9ICVkIiwgKmxpbmVwLCAqY29scCkpOworCisjaWZkZWYgX19FTVhfXworCWlmICgqbGluZXAgPD0gMCB8fCAqY29scCA8PSAwKSB7CisJICAgIGludCBzY3JlZW5kYXRhWzJdOworCSAgICBfc2Nyc2l6ZShzY3JlZW5kYXRhKTsKKwkgICAgKmNvbHAgPSBzY3JlZW5kYXRhWzBdOworCSAgICAqbGluZXAgPSBzY3JlZW5kYXRhWzFdOworCSAgICBUKCgiRU1YIHNjcmVlbiBzaXplOiBlbnZpcm9ubWVudCBMSU5FUyA9ICVkIENPTFVNTlMgPSAlZCIsCisJICAgICAgICpsaW5lcCwgKmNvbHApKTsKKwl9CisjZW5kaWYKKyNpZiBIQVZFX1NJWkVDSEFOR0UKKwkvKiBpZiB0aGF0IGRpZG4ndCB3b3JrLCBtYXliZSB3ZSBjYW4gdHJ5IGFza2luZyB0aGUgT1MgKi8KKwlpZiAoKmxpbmVwIDw9IDAgfHwgKmNvbHAgPD0gMCkgeworCSAgICBpZiAoaXNhdHR5KGN1cl90ZXJtLT5GaWxlZGVzKSkgeworCQlTVFJVQ1RfV0lOU0laRSBzaXplOworCisJCWVycm5vID0gMDsKKwkJZG8geworCQkgICAgaWYgKGlvY3RsKGN1cl90ZXJtLT5GaWxlZGVzLCBJT0NUTF9XSU5TSVpFLCAmc2l6ZSkgPCAwCisJCQkmJiBlcnJubyAhPSBFSU5UUikKKwkJCWdvdG8gZmFpbHVyZTsKKwkJfSB3aGlsZQorCQkgICAgKGVycm5vID09IEVJTlRSKTsKKworCQkvKgorCQkgKiBTb2xhcmlzIGxldHMgdXNlcnMgb3ZlcnJpZGUgZWl0aGVyIGRpbWVuc2lvbiB3aXRoIGFuCisJCSAqIGVudmlyb25tZW50IHZhcmlhYmxlLgorCQkgKi8KKwkJaWYgKCpsaW5lcCA8PSAwKQorCQkgICAgKmxpbmVwID0gKHNwICE9IDAgJiYgc3AtPl9maWx0ZXJlZCkgPyAxIDogV0lOU0laRV9ST1dTKHNpemUpOworCQlpZiAoKmNvbHAgPD0gMCkKKwkJICAgICpjb2xwID0gV0lOU0laRV9DT0xTKHNpemUpOworCSAgICB9CisJICAgIC8qIEZBTExUSFJVICovCisJICBmYWlsdXJlOjsKKwl9CisjZW5kaWYgLyogSEFWRV9TSVpFQ0hBTkdFICovCisKKwkvKiBpZiB3ZSBjYW4ndCBnZXQgZHluYW1pYyBpbmZvIGFib3V0IHRoZSBzaXplLCB1c2Ugc3RhdGljICovCisJaWYgKCpsaW5lcCA8PSAwKSB7CisJICAgICpsaW5lcCA9IChpbnQpIGxpbmVzOworCX0KKwlpZiAoKmNvbHAgPD0gMCkgeworCSAgICAqY29scCA9IChpbnQpIGNvbHVtbnM7CisJfQorCisJLyogdGhlIHVsdGltYXRlIGZhbGxiYWNrLCBhc3N1bWUgZml4ZWQgMjR4ODAgc2l6ZSAqLworCWlmICgqbGluZXAgPD0gMCkgeworCSAgICAqbGluZXAgPSAyNDsKKwl9CisJaWYgKCpjb2xwIDw9IDApIHsKKwkgICAgKmNvbHAgPSA4MDsKKwl9CisKKwkvKgorCSAqIFB1dCB0aGUgZGVyaXZlZCB2YWx1ZXMgYmFjayBpbiB0aGUgc2NyZWVuLXNpemUgY2Fwcywgc28KKwkgKiB0aWdldG51bSgpIGFuZCB0Z2V0bnVtKCkgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcuCisJICovCisJbGluZXMgPSAoc2hvcnQpICgqbGluZXApOworCWNvbHVtbnMgPSAoc2hvcnQpICgqY29scCk7CisgICAgfQorCisgICAgVCgoInNjcmVlbiBzaXplIGlzICVkeCVkIiwgKmxpbmVwLCAqY29scCkpOworCisgICAgaWYgKFZBTElEX05VTUVSSUMoaW5pdF90YWJzKSkKKwlteV90YWJzaXplID0gKGludCkgaW5pdF90YWJzOworICAgIGVsc2UKKwlteV90YWJzaXplID0gODsKKworI2lmIFVTRV9SRUVOVFJBTlQKKyAgICBpZiAoc3AgIT0gMCkKKwlzcC0+X1RBQlNJWkUgPSBteV90YWJzaXplOworI2Vsc2UKKyAgICBUQUJTSVpFID0gbXlfdGFic2l6ZTsKKyNlbmRpZgorICAgIFQoKCJUQUJTSVpFID0gJWQiLCBUQUJTSVpFKSk7Cit9CisKKyNpZiBVU0VfU0laRUNIQU5HRQorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY191cGRhdGVfc2NyZWVuc2l6ZShTQ1JFRU4gKnNwKQoreworICAgIFRFUk1JTkFMICp0ZXJtcCA9IGN1cl90ZXJtOworICAgIGludCBvbGRfbGluZXMgPSBsaW5lczsKKyAgICBpbnQgbmV3X2xpbmVzOworICAgIGludCBvbGRfY29scyA9IGNvbHVtbnM7CisgICAgaW50IG5ld19jb2xzOworCisgICAgX25jX2dldF9zY3JlZW5zaXplKHNwLCAmbmV3X2xpbmVzLCAmbmV3X2NvbHMpOworCisgICAgLyoKKyAgICAgKiBTZWUgaXNfdGVybV9yZXNpemVkKCkgYW5kIHJlc2l6ZXRlcm0oKS4KKyAgICAgKiBXZSdyZSBkb2luZyBpdCB0aGlzIHdheSBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBiZWxvbmcgdG8gdGhlIHVwcGVyCisgICAgICogbmN1cnNlcyBsaWJyYXJ5LCB3aGlsZSB0aGlzIHJlc2lkZXMgaW4gdGhlIGxvd2VyIHRlcm1pbmZvIGxpYnJhcnkuCisgICAgICovCisgICAgaWYgKHNwICE9IDAKKwkmJiBzcC0+X3Jlc2l6ZSAhPSAwKSB7CisJaWYgKChuZXdfbGluZXMgIT0gb2xkX2xpbmVzKSB8fCAobmV3X2NvbHMgIT0gb2xkX2NvbHMpKQorCSAgICBzcC0+X3Jlc2l6ZShuZXdfbGluZXMsIG5ld19jb2xzKTsKKwlzcC0+X3NpZ193aW5jaCA9IEZBTFNFOworICAgIH0KK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRlcm1pbmFsIHNldHVwCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgcmV0X2Vycm9yKGNvZGUsIGZtdCwgYXJnKQlpZiAoZXJycmV0KSB7XAorCQkJCQkgICAgKmVycnJldCA9IGNvZGU7XAorCQkJCQkgICAgcmV0dXJuQ29kZShFUlIpO1wKKwkJCQkJfSBlbHNlIHtcCisJCQkJCSAgICBmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmcpO1wKKwkJCQkJICAgIGV4aXQoRVhJVF9GQUlMVVJFKTtcCisJCQkJCX0KKworI2RlZmluZSByZXRfZXJyb3IwKGNvZGUsIG1zZykJCWlmIChlcnJyZXQpIHtcCisJCQkJCSAgICAqZXJycmV0ID0gY29kZTtcCisJCQkJCSAgICByZXR1cm5Db2RlKEVSUik7XAorCQkJCQl9IGVsc2Uge1wKKwkJCQkJICAgIGZwcmludGYoc3RkZXJyLCBtc2cpO1wKKwkJCQkJICAgIGV4aXQoRVhJVF9GQUlMVVJFKTtcCisJCQkJCX0KKworI2lmIFVTRV9EQVRBQkFTRSB8fCBVU0VfVEVSTUNBUAorLyoKKyAqIFJldHVybiAxIGlmIGVudHJ5IGZvdW5kLCAwIGlmIG5vdCBmb3VuZCwgLTEgaWYgZGF0YWJhc2Ugbm90IGFjY2Vzc2libGUsCisgKiBqdXN0IGxpa2UgdGdldGVudCgpLgorICovCitzdGF0aWMgaW50CitncmFiX2VudHJ5KGNvbnN0IGNoYXIgKmNvbnN0IHRuLCBURVJNVFlQRSAqY29uc3QgdHApCit7CisgICAgY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisgICAgaW50IHN0YXR1cyA9IF9uY19yZWFkX2VudHJ5KHRuLCBmaWxlbmFtZSwgdHApOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSBoYXZlIGFuIGVudHJ5LCBmb3JjZSBhbGwgb2YgdGhlIGNhbmNlbGxlZCBzdHJpbmdzIHRvIG51bGwKKyAgICAgKiBwb2ludGVycyBzbyB3ZSBkb24ndCBoYXZlIHRvIHRlc3QgdGhlbSBpbiB0aGUgcmVzdCBvZiB0aGUgbGlicmFyeS4KKyAgICAgKiAoVGhlIHRlcm1pbmZvIGNvbXBpbGVyIGJ5cGFzc2VzIHRoaXMgbG9naWMsIHNpbmNlIGl0IG11c3Qga25vdyBpZgorICAgICAqIGEgc3RyaW5nIGlzIGNhbmNlbGxlZCwgZm9yIG1lcmdpbmcgZW50cmllcykuCisgICAgICovCisgICAgaWYgKHN0YXR1cyA9PSBUR0VURU5UX1lFUykgeworCXVuc2lnbmVkIG47CisJZm9yX2VhY2hfYm9vbGVhbihuLCB0cCkgeworCSAgICBpZiAoIVZBTElEX0JPT0xFQU4odHAtPkJvb2xlYW5zW25dKSkKKwkJdHAtPkJvb2xlYW5zW25dID0gRkFMU0U7CisJfQorCWZvcl9lYWNoX3N0cmluZyhuLCB0cCkgeworCSAgICBpZiAodHAtPlN0cmluZ3Nbbl0gPT0gQ0FOQ0VMTEVEX1NUUklORykKKwkJdHAtPlN0cmluZ3Nbbl0gPSBBQlNFTlRfU1RSSU5HOworCX0KKyAgICB9CisgICAgcmV0dXJuIChzdGF0dXMpOworfQorI2VuZGlmCisKKy8qCisqKglkb19wcm90b3R5cGUoKQorKioKKyoqCVRha2UgdGhlIHJlYWwgY29tbWFuZCBjaGFyYWN0ZXIgb3V0IG9mIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZQorKioJYW5kIHN1YnN0aXR1dGUgaXQgaW4gZm9yIHRoZSBwcm90b3R5cGUgZ2l2ZW4gaW4gJ2NvbW1hbmRfY2hhcmFjdGVyJy4KKyovCitzdGF0aWMgdm9pZAorZG9fcHJvdG90eXBlKFRFUk1JTkFMICogdGVybXApCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBjaGFyIENDOworICAgIGNoYXIgcHJvdG87CisgICAgY2hhciAqdG1wOworCisgICAgaWYgKCh0bXAgPSBnZXRlbnYoIkNDIikpICE9IDApIHsKKwlpZiAoKENDID0gKnRtcCkgIT0gMCkgeworCSAgICBwcm90byA9ICpjb21tYW5kX2NoYXJhY3RlcjsKKworCSAgICBmb3JfZWFjaF9zdHJpbmcoaSwgJih0ZXJtcC0+dHlwZSkpIHsKKwkJZm9yICh0bXAgPSB0ZXJtcC0+dHlwZS5TdHJpbmdzW2ldOyAqdG1wOyB0bXArKykgeworCQkgICAgaWYgKCp0bXAgPT0gcHJvdG8pCisJCQkqdG1wID0gQ0M7CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qCisgKiBGaW5kIHRoZSBsb2NhbGUgd2hpY2ggaXMgaW4gZWZmZWN0LgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfZ2V0X2xvY2FsZSh2b2lkKQoreworICAgIGNoYXIgKmVudjsKKyNpZiBIQVZFX0xPQ0FMRV9ICisgICAgLyoKKyAgICAgKiBUaGlzIGlzIHByZWZlcmFibGUgdG8gdXNpbmcgZ2V0ZW52KCkgc2luY2UgaXQgZW5zdXJlcyB0aGF0IHdlIGFyZSB1c2luZworICAgICAqIHRoZSBsb2NhbGUgd2hpY2ggd2FzIGFjdHVhbGx5IGluaXRpYWxpemVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgKi8KKyAgICBlbnYgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIDApOworI2Vsc2UKKyAgICBpZiAoKChlbnYgPSBnZXRlbnYoIkxDX0FMTCIpKSAhPSAwICYmICplbnYgIT0gJ1wwJykKKwl8fCAoKGVudiA9IGdldGVudigiTENfQ1RZUEUiKSkgIT0gMCAmJiAqZW52ICE9ICdcMCcpCisJfHwgKChlbnYgPSBnZXRlbnYoIkxBTkciKSkgIT0gMCAmJiAqZW52ICE9ICdcMCcpKSB7CisJOworICAgIH0KKyNlbmRpZgorICAgIFQoKCJfbmNfZ2V0X2xvY2FsZSAlcyIsIF9uY192aXNidWYoZW52KSkpOworICAgIHJldHVybiBlbnY7Cit9CisKKy8qCisgKiBDaGVjayBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIFVURi04IGxvY2FsZS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3VuaWNvZGVfbG9jYWxlKHZvaWQpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICAgY2hhciAqZW52ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisgICAgcmVzdWx0ID0gIXN0cmNtcChlbnYsICJVVEYtOCIpOworICAgIFQoKCJfbmNfdW5pY29kZV9sb2NhbGUoJXMpIC0+JWQiLCBlbnYsIHJlc3VsdCkpOworI2Vsc2UKKyAgICBjaGFyICplbnYgPSBfbmNfZ2V0X2xvY2FsZSgpOworICAgIGlmIChlbnYgIT0gMCkgeworCWlmIChzdHJzdHIoZW52LCAiLlVURi04IikgIT0gMCkgeworCSAgICByZXN1bHQgPSAxOworCSAgICBUKCgiX25jX3VuaWNvZGVfbG9jYWxlKCVzKSAtPiVkIiwgZW52LCByZXN1bHQpKTsKKwl9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSBDT05UUk9MX04ocykgKChzKSAhPSAwICYmIHN0cnN0cihzLCAiXDAxNiIpICE9IDApCisjZGVmaW5lIENPTlRST0xfTyhzKSAoKHMpICE9IDAgJiYgc3Ryc3RyKHMsICJcMDE3IikgIT0gMCkKKworLyoKKyAqIENoZWNrIGZvciBrbm93biBicm9rZW4gY2FzZXMgd2hlcmUgYSBVVEYtOCBsb2NhbGUgYnJlYWtzIHRoZSBhbHRlcm5hdGUKKyAqIGNoYXJhY3RlciBzZXQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19sb2NhbGVfYnJlYWtzX2FjcyhURVJNSU5BTCAqIHRlcm1wKQoreworICAgIGNoYXIgKmVudjsKKworICAgIGlmICgoZW52ID0gZ2V0ZW52KCJOQ1VSU0VTX05PX1VURjhfQUNTIikpICE9IDApIHsKKwlyZXR1cm4gYXRvaShlbnYpOworICAgIH0gZWxzZSBpZiAoKGVudiA9IGdldGVudigiVEVSTSIpKSAhPSAwKSB7CisJaWYgKHN0cnN0cihlbnYsICJsaW51eCIpKQorCSAgICByZXR1cm4gMTsJCS8qIGFsd2F5cyBicm9rZW4gKi8KKwlpZiAoc3Ryc3RyKGVudiwgInNjcmVlbiIpICE9IDAKKwkgICAgJiYgKChlbnYgPSBnZXRlbnYoIlRFUk1DQVAiKSkgIT0gMAorCQkmJiBzdHJzdHIoZW52LCAic2NyZWVuIikgIT0gMCkKKwkgICAgJiYgc3Ryc3RyKGVudiwgImhoSUkwMCIpICE9IDApIHsKKwkgICAgaWYgKENPTlRST0xfTihlbnRlcl9hbHRfY2hhcnNldF9tb2RlKSB8fAorCQlDT05UUk9MX08oZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSkgfHwKKwkJQ09OVFJPTF9OKHNldF9hdHRyaWJ1dGVzKSB8fAorCQlDT05UUk9MX08oc2V0X2F0dHJpYnV0ZXMpKQorCQlyZXR1cm4gMTsKKwl9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogVGhpcyBlbnRyeXBvaW50IGlzIGNhbGxlZCBmcm9tIHRnZXRlbnQoKSB0byBhbGxvdyBhIHNwZWNpYWwgY2FzZSBvZiByZXVzaW5nCisgKiB0aGUgc2FtZSBURVJNSU5BTCBkYXRhIChzZWUgY29tbWVudCkuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19zZXR1cHRlcm0oTkNVUlNFU19DT05TVCBjaGFyICp0bmFtZSwgaW50IEZpbGVkZXMsIGludCAqZXJycmV0LCBib29sIHJldXNlKQoreworICAgIFRFUk1JTkFMICp0ZXJtcDsKKyAgICBpbnQgc3RhdHVzOworCisgICAgU1RBUlRfVFJBQ0UoKTsKKyAgICBUKChUX0NBTExFRCgic2V0dXB0ZXJtKCVzLCVkLCVwKSIpLCBfbmNfdmlzYnVmKHRuYW1lKSwgRmlsZWRlcywgZXJycmV0KSk7CisKKyAgICBpZiAodG5hbWUgPT0gMCkgeworCXRuYW1lID0gZ2V0ZW52KCJURVJNIik7CisJaWYgKHRuYW1lID09IDAgfHwgKnRuYW1lID09ICdcMCcpIHsKKwkgICAgcmV0X2Vycm9yMChUR0VURU5UX0VSUiwgIlRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IHNldC5cbiIpOworCX0KKyAgICB9CisKKyAgICBpZiAoc3RybGVuKHRuYW1lKSA+IE1BWF9OQU1FX1NJWkUpIHsKKwlyZXRfZXJyb3IoVEdFVEVOVF9FUlIsCisJCSAgIlRFUk0gZW52aXJvbm1lbnQgbXVzdCBiZSA8PSAlZCBjaGFyYWN0ZXJzLlxuIiwKKwkJICBNQVhfTkFNRV9TSVpFKTsKKyAgICB9CisKKyAgICBUKCgieW91ciB0ZXJtaW5hbCBuYW1lIGlzICVzIiwgdG5hbWUpKTsKKworICAgIC8qCisgICAgICogQWxsb3cgb3V0cHV0IHJlZGlyZWN0aW9uLiAgVGhpcyBpcyB3aGF0IFNWcjMgZG9lcy4gIElmIHN0ZG91dCBpcworICAgICAqIGRpcmVjdGVkIHRvIGEgZmlsZSwgc2NyZWVuIHVwZGF0ZXMgZ28gdG8gc3RhbmRhcmQgZXJyb3IuCisgICAgICovCisgICAgaWYgKEZpbGVkZXMgPT0gU1RET1VUX0ZJTEVOTyAmJiAhaXNhdHR5KEZpbGVkZXMpKQorCUZpbGVkZXMgPSBTVERFUlJfRklMRU5POworCisgICAgLyoKKyAgICAgKiBDaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gdXNlIHRoaXMgdGVybWluYWwuICBJZiBzbywgd2UKKyAgICAgKiBkbyBub3QgbmVlZCB0byByZS1yZWFkIHRoZSB0ZXJtaW5mbyBlbnRyeSwgb3Igb2J0YWluIFRUWSBzZXR0aW5ncy4KKyAgICAgKgorICAgICAqIFRoaXMgaXMgYW4gaW1wcm92ZW1lbnQgb24gU1ZyNCBjdXJzZXMuICBJZiBhbiBhcHBsaWNhdGlvbiBtaXhlcyBjdXJzZXMKKyAgICAgKiBhbmQgdGVybWNhcCBjYWxscywgaXQgbWF5IGNhbGwgYm90aCBpbml0c2NyIGFuZCB0Z2V0ZW50LiAgVGhpcyBpcyBub3QKKyAgICAgKiByZWFsbHkgYSBnb29kIHRoaW5nIHRvIGRvLCBidXQgY2FuIGhhcHBlbiBpZiBzb21lb25lIHRyaWVzIHVzaW5nIG5jdXJzZXMKKyAgICAgKiB3aXRoIHRoZSByZWFkbGluZSBsaWJyYXJ5LiAgVGhlIHByb2JsZW0gd2UgYXJlIGZpeGluZyBpcyB0aGF0IHdoZW4KKyAgICAgKiB0Z2V0ZW50IGNhbGxzIHNldHVwdGVybSwgdGhlIHJlc3VsdGluZyBPdHR5YiBzdHJ1Y3QgaW4gY3VyX3Rlcm0gaXMKKyAgICAgKiB6ZXJvZWQuICBBIHN1YnNlcXVlbnQgY2FsbCB0byBlbmR3aW4gdXNlcyB0aGUgemVyb2VkIHRlcm1pbmFsIHNldHRpbmdzCisgICAgICogcmF0aGVyIHRoYW4gdGhlIG9uZXMgc2F2ZWQgaW4gaW5pdHNjci4gIFNvIHdlIGNoZWNrIGlmIGN1cl90ZXJtIGFwcGVhcnMKKyAgICAgKiB0byBjb250YWluIHRlcm1pbmFsIHNldHRpbmdzIGZvciB0aGUgc2FtZSBvdXRwdXQgZmlsZSBhcyBvdXIgY3VycmVudAorICAgICAqIGNhbGwgLSBhbmQgY29weSB0aG9zZSB0ZXJtaW5hbCBzZXR0aW5ncy4gIChTVnI0IGN1cnNlcyBkb2VzIG5vdCBkbyB0aGlzLAorICAgICAqIGhvd2V2ZXIgYXBwbGljYXRpb25zIHRoYXQgYXJlIHdvcmtpbmcgYXJvdW5kIHRoZSBwcm9ibGVtIHdpbGwgc3RpbGwgd29yaworICAgICAqIHByb3Blcmx5IHdpdGggdGhpcyBmZWF0dXJlKS4KKyAgICAgKi8KKyAgICBpZiAocmV1c2UKKwkmJiAodGVybXAgPSBjdXJfdGVybSkgIT0gMAorCSYmIHRlcm1wLT5GaWxlZGVzID09IEZpbGVkZXMKKwkmJiB0ZXJtcC0+X3Rlcm1uYW1lICE9IDAKKwkmJiAhc3RyY21wKHRlcm1wLT5fdGVybW5hbWUsIHRuYW1lKQorCSYmIF9uY19uYW1lX21hdGNoKHRlcm1wLT50eXBlLnRlcm1fbmFtZXMsIHRuYW1lLCAifCIpKSB7CisJVCgoInJldXNpbmcgZXhpc3RpbmcgdGVybWluYWwgaW5mb3JtYXRpb24gYW5kIG1vZGUtc2V0dGluZ3MiKSk7CisgICAgfSBlbHNlIHsKKworCXRlcm1wID0gdHlwZUNhbGxvYyhURVJNSU5BTCwgMSk7CisKKwlpZiAodGVybXAgPT0gMCkgeworCSAgICByZXRfZXJyb3IwKFRHRVRFTlRfRVJSLAorCQkgICAgICAgIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGNyZWF0ZSB0ZXJtaW5hbCBzdHJ1Y3R1cmUuXG4iKTsKKwl9CisjaWYgVVNFX0RBVEFCQVNFIHx8IFVTRV9URVJNQ0FQCisJc3RhdHVzID0gZ3JhYl9lbnRyeSh0bmFtZSwgJnRlcm1wLT50eXBlKTsKKyNlbHNlCisJc3RhdHVzID0gVEdFVEVOVF9OTzsKKyNlbmRpZgorCisJLyogdHJ5IGZhbGxiYWNrIGxpc3QgaWYgZW50cnkgb24gZGlzayAqLworCWlmIChzdGF0dXMgIT0gVEdFVEVOVF9ZRVMpIHsKKwkgICAgY29uc3QgVEVSTVRZUEUgKmZhbGxiYWNrID0gX25jX2ZhbGxiYWNrKHRuYW1lKTsKKworCSAgICBpZiAoZmFsbGJhY2spIHsKKwkJdGVybXAtPnR5cGUgPSAqZmFsbGJhY2s7CisJCXN0YXR1cyA9IFRHRVRFTlRfWUVTOworCSAgICB9CisJfQorCisJaWYgKHN0YXR1cyAhPSBUR0VURU5UX1lFUykgeworCSAgICBkZWxfY3VydGVybSh0ZXJtcCk7CisJICAgIGlmIChzdGF0dXMgPT0gVEdFVEVOVF9FUlIpIHsKKwkJcmV0X2Vycm9yMChzdGF0dXMsICJ0ZXJtaW5hbHMgZGF0YWJhc2UgaXMgaW5hY2Nlc3NpYmxlXG4iKTsKKwkgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gVEdFVEVOVF9OTykgeworCQlyZXRfZXJyb3Ioc3RhdHVzLCAiJyVzJzogdW5rbm93biB0ZXJtaW5hbCB0eXBlLlxuIiwgdG5hbWUpOworCSAgICB9CisJfQorI2lmICFVU0VfUkVFTlRSQU5UCisJc3RybmNweSh0dHl0eXBlLCB0ZXJtcC0+dHlwZS50ZXJtX25hbWVzLCBOQU1FU0laRSAtIDEpOworCXR0eXR5cGVbTkFNRVNJWkUgLSAxXSA9ICdcMCc7CisjZW5kaWYKKworCXRlcm1wLT5GaWxlZGVzID0gRmlsZWRlczsKKwl0ZXJtcC0+X3Rlcm1uYW1lID0gc3RyZHVwKHRuYW1lKTsKKworCXNldF9jdXJ0ZXJtKHRlcm1wKTsKKworCWlmIChjb21tYW5kX2NoYXJhY3RlciAmJiBnZXRlbnYoIkNDIikpCisJICAgIGRvX3Byb3RvdHlwZSh0ZXJtcCk7CisKKwkvKgorCSAqIElmIGFuIGFwcGxpY2F0aW9uIGNhbGxzIHNldHVwdGVybSgpIHJhdGhlciB0aGFuIGluaXRzY3IoKSBvcgorCSAqIG5ld3Rlcm0oKSwgd2Ugd2lsbCBub3QgaGF2ZSB0aGUgZGVmX3Byb2dfbW9kZSgpIGNhbGwgaW4KKwkgKiBfbmNfc2V0dXBzY3JlZW4oKS4gIERvIGl0IG5vdyBhbnl3YXksIHNvIHdlIGNhbiBpbml0aWFsaXplIHRoZQorCSAqIGJhdWRyYXRlLgorCSAqLworCWlmIChpc2F0dHkoRmlsZWRlcykpIHsKKwkgICAgZGVmX3Byb2dfbW9kZSgpOworCSAgICBiYXVkcmF0ZSgpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlIHNob3VsZCBhbHdheXMgY2hlY2sgdGhlIHNjcmVlbnNpemUsIGp1c3QgaW4gY2FzZS4KKyAgICAgKi8KKyAgICBfbmNfZ2V0X3NjcmVlbnNpemUoU1AsIHB0ckxpbmVzKCksIHB0ckNvbHMoKSk7CisKKyAgICBpZiAoZXJycmV0KQorCSplcnJyZXQgPSBUR0VURU5UX1lFUzsKKworICAgIGlmIChnZW5lcmljX3R5cGUpIHsKKwlyZXRfZXJyb3IoVEdFVEVOVF9OTywgIiclcyc6IEkgbmVlZCBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYy5cbiIsIHRuYW1lKTsKKyAgICB9CisgICAgaWYgKGhhcmRfY29weSkgeworCXJldF9lcnJvcihUR0VURU5UX1lFUywgIiclcyc6IEkgY2FuJ3QgaGFuZGxlIGhhcmRjb3B5IHRlcm1pbmFscy5cbiIsIHRuYW1lKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKKy8qCisgKglzZXR1cHRlcm0odGVybW5hbWUsIEZpbGVkZXMsIGVycnJldCkKKyAqCisgKglGaW5kIGFuZCByZWFkIHRoZSBhcHByb3ByaWF0ZSBvYmplY3QgZmlsZSBmb3IgdGhlIHRlcm1pbmFsCisgKglNYWtlIGN1cl90ZXJtIHBvaW50IHRvIHRoZSBzdHJ1Y3R1cmUuCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldHVwdGVybShOQ1VSU0VTX0NPTlNUIGNoYXIgKnRuYW1lLCBpbnQgRmlsZWRlcywgaW50ICplcnJyZXQpCit7CisgICAgcmV0dXJuIF9uY19zZXR1cHRlcm0odG5hbWUsIEZpbGVkZXMsIGVycnJldCwgRkFMU0UpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfdGVybWNhcC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfdGVybWNhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjQ1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90ZXJtY2FwLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogc29tZSBvZiB0aGUgY29kZSBpbiBoZXJlIHdhcyBjb250cmlidXRlZCBieTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIE1hZ251cyBCZW5ndHNzb24sIGQ2bWJlbmdAZHRlay5jaGFsbWVycy5zZSAoTm92JzkzKSAgICAgICAgICAgICAgICAgICAgICAqCisgKiAoYnV0IGl0IGhhcyBjaGFuZ2VkIGEgbG90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgX19JTlRFUk5BTF9DQVBTX1ZJU0lCTEUKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8dGVybWNhcC5oPgorI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdGVybWNhcC5jLHYgMS42MyAyMDA4LzA4LzE2IDE5OjIyOjU1IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUX1ZBUihjaGFyICopIFVQID0gMDsKK05DVVJTRVNfRVhQT1JUX1ZBUihjaGFyICopIEJDID0gMDsKKworI2RlZmluZSBNeUNhY2hlICBfbmNfZ2xvYmFscy50Z2V0ZW50X2NhY2hlCisjZGVmaW5lIENhY2hlSW54IF9uY19nbG9iYWxzLnRnZXRlbnRfaW5kZXgKKyNkZWZpbmUgQ2FjaGVTZXEgX25jX2dsb2JhbHMudGdldGVudF9zZXF1ZW5jZQorCisjZGVmaW5lIEZJWF9TR1IwIE15Q2FjaGVbQ2FjaGVJbnhdLmZpeF9zZ3IwCisjZGVmaW5lIExBU1RfVFJNIE15Q2FjaGVbQ2FjaGVJbnhdLmxhc3RfdGVybQorI2RlZmluZSBMQVNUX0JVRiBNeUNhY2hlW0NhY2hlSW54XS5sYXN0X2J1ZnAKKyNkZWZpbmUgTEFTVF9VU0UgTXlDYWNoZVtDYWNoZUlueF0ubGFzdF91c2VkCisjZGVmaW5lIExBU1RfU0VRIE15Q2FjaGVbQ2FjaGVJbnhdLnNlcXVlbmNlCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0Z2V0ZW50KGJ1ZnAsIHRlcm0pCisgKgorICogSW4gdGVybWNhcCwgdGhpcyBmdW5jdGlvbiByZWFkcyBpbiB0aGUgZW50cnkgZm9yIHRlcm1pbmFsIGB0ZXJtJyBpbnRvIHRoZQorICogYnVmZmVyIHBvaW50ZWQgdG8gYnkgYnVmcC4gSXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvZiB0aGUgZnVuY3Rpb25zCisgKiBiZWxvdyBhcmUgY2FsbGVkLgorICogSW4gdGhpcyB0ZXJtaW5mbyBlbXVsYXRpb24sIHRnZXRlbnQoKSBzaW1wbHkgY2FsbHMgc2V0dXB0ZXJtKCkgKHdoaWNoCisgKiBkb2VzIGEgYml0IG1vcmUgdGhhbiB0Z2V0ZW50KCkgaW4gdGVybWNhcCBkb2VzKSwgYW5kIHJldHVybnMgaXRzIHJldHVybgorICogdmFsdWUgKDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBubyB0ZXJtaW5hbCB3aXRoIHRoZSBnaXZlbiBuYW1lIGNvdWxkIGJlCisgKiBmb3VuZCwgb3IgLTEgaWYgbm8gdGVybWluYWwgZGVzY3JpcHRpb25zIGhhdmUgYmVlbiBpbnN0YWxsZWQgb24gdGhlCisgKiBzeXN0ZW0pLiAgVGhlIGJ1ZnAgYXJndW1lbnQgaXMgaWdub3JlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCit0Z2V0ZW50KGNoYXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaW50IGVycmNvZGU7CisgICAgaW50IG47CisgICAgYm9vbCBmb3VuZF9jYWNoZSA9IEZBTFNFOworCisgICAgU1RBUlRfVFJBQ0UoKTsKKyAgICBUKChUX0NBTExFRCgidGdldGVudCgpIikpKTsKKworICAgIF9uY19zZXR1cHRlcm0oKE5DVVJTRVNfQ09OU1QgY2hhciAqKSBuYW1lLCBTVERPVVRfRklMRU5PLCAmZXJyY29kZSwgVFJVRSk7CisKKyAgICAvKgorICAgICAqIEluIGdlbmVyYWwgd2UgY2Fubm90IHRlbGwgaWYgdGhlIGZpeGVkIHNncjAgaXMgc3RpbGwgdXNlZCBieSB0aGUKKyAgICAgKiBjYWxsZXIsIGJ1dCBpZiB0Z2V0ZW50KCkgaXMgY2FsbGVkIHdpdGggdGhlIHNhbWUgYnVmZmVyLCB0aGF0IGlzCisgICAgICogZ29vZCBlbm91Z2gsIHNpbmNlIHRoZSBwcmV2aW91cyBkYXRhIHdvdWxkIGJlIGludmFsaWRhdGVkIGJ5IHRoZQorICAgICAqIGN1cnJlbnQgY2FsbC4KKyAgICAgKgorICAgICAqIGJ1ZnAgbWF5IGJlIGEgbnVsbCBwb2ludGVyLCBlLmcuLCBHTlUgdGVybWNhcC4gIFRoYXQgYWxsb2NhdGVzIGRhdGEsCisgICAgICogd2hpY2ggaXMgZ29vZCB1bnRpbCB0aGUgbmV4dCB0Z2V0ZW50KCkgY2FsbC4gIFRoZSBjb252ZW50aW9uYWwgdGVybWNhcAorICAgICAqIGlzIGluY29udmVuaWVudCBiZWNhdXNlIG9mIHRoZSBmaXhlZCBidWZmZXIgc2l6ZSwgYnV0IGJlY2F1c2UgaXQgdXNlcworICAgICAqIGNhbGxlci1zdXBwbGllZCBidWZmZXJzLCBjYW4gaGF2ZSBtdWx0aXBsZSB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMgaW4KKyAgICAgKiB1c2UgYXQgYSBnaXZlbiB0aW1lLgorICAgICAqLworICAgIGZvciAobiA9IDA7IG4gPCBUR0VURU5UX01BWDsgKytuKSB7CisJYm9vbCBzYW1lX3Jlc3VsdCA9IChNeUNhY2hlW25dLmxhc3RfdXNlZCAmJiBNeUNhY2hlW25dLmxhc3RfYnVmcCA9PSBidWZwKTsKKwlpZiAoc2FtZV9yZXN1bHQpIHsKKwkgICAgQ2FjaGVJbnggPSBuOworCSAgICBpZiAoRklYX1NHUjAgIT0gMCkgeworCQlGcmVlQW5kTnVsbChGSVhfU0dSMCk7CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogQWxzbyBmcmVlIHRoZSB0ZXJtaW5mbyBkYXRhIHRoYXQgd2UgbG9hZGVkIChtdWNoIGJpZ2dlciBsZWFrKS4KKwkgICAgICovCisJICAgIGlmIChMQVNUX1RSTSAhPSAwICYmIExBU1RfVFJNICE9IGN1cl90ZXJtKSB7CisJCVRFUk1JTkFMICp0cm0gPSBMQVNUX1RSTTsKKwkJZGVsX2N1cnRlcm0oTEFTVF9UUk0pOworCQlmb3IgKENhY2hlSW54ID0gMDsgQ2FjaGVJbnggPCBUR0VURU5UX01BWDsgKytDYWNoZUlueCkKKwkJICAgIGlmIChMQVNUX1RSTSA9PSB0cm0pCisJCQlMQVNUX1RSTSA9IDA7CisJCUNhY2hlSW54ID0gbjsKKwkgICAgfQorCSAgICBmb3VuZF9jYWNoZSA9IFRSVUU7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgaWYgKCFmb3VuZF9jYWNoZSkgeworCWludCBiZXN0ID0gMDsKKworCWZvciAoQ2FjaGVJbnggPSAwOyBDYWNoZUlueCA8IFRHRVRFTlRfTUFYOyArK0NhY2hlSW54KSB7CisJICAgIGlmIChMQVNUX1NFUSA8IE15Q2FjaGVbYmVzdF0uc2VxdWVuY2UpIHsKKwkJYmVzdCA9IENhY2hlSW54OworCSAgICB9CisJfQorCUNhY2hlSW54ID0gYmVzdDsKKyAgICB9CisgICAgTEFTVF9UUk0gPSBjdXJfdGVybTsKKyAgICBMQVNUX1NFUSA9ICsrQ2FjaGVTZXE7CisKKyAgICBQQyA9IDA7CisgICAgVVAgPSAwOworICAgIEJDID0gMDsKKyAgICBGSVhfU0dSMCA9IDA7CQkvKiBkb24ndCBmcmVlIGl0IC0gYXBwbGljYXRpb24gbWF5IHN0aWxsIHVzZSAqLworCisgICAgaWYgKGVycmNvZGUgPT0gMSkgeworCisJaWYgKGN1cnNvcl9sZWZ0KQorCSAgICBpZiAoKGJhY2tzcGFjZXNfd2l0aF9icyA9IChjaGFyKSAhc3RyY21wKGN1cnNvcl9sZWZ0LCAiXGIiKSkgPT0gMCkKKwkJYmFja3NwYWNlX2lmX25vdF9icyA9IGN1cnNvcl9sZWZ0OworCisJLyogd2UncmUgcmVxdWlyZWQgdG8gZXhwb3J0IHRoZXNlICovCisJaWYgKHBhZF9jaGFyICE9IE5VTEwpCisJICAgIFBDID0gcGFkX2NoYXJbMF07CisJaWYgKGN1cnNvcl91cCAhPSBOVUxMKQorCSAgICBVUCA9IGN1cnNvcl91cDsKKwlpZiAoYmFja3NwYWNlX2lmX25vdF9icyAhPSBOVUxMKQorCSAgICBCQyA9IGJhY2tzcGFjZV9pZl9ub3RfYnM7CisKKwlpZiAoKEZJWF9TR1IwID0gX25jX3RyaW1fc2dyMCgmKGN1cl90ZXJtLT50eXBlKSkpICE9IDApIHsKKwkgICAgaWYgKCFzdHJjbXAoRklYX1NHUjAsIGV4aXRfYXR0cmlidXRlX21vZGUpKSB7CisJCWlmIChGSVhfU0dSMCAhPSBleGl0X2F0dHJpYnV0ZV9tb2RlKSB7CisJCSAgICBmcmVlKEZJWF9TR1IwKTsKKwkJfQorCQlGSVhfU0dSMCA9IDA7CisJICAgIH0KKwl9CisJTEFTVF9CVUYgPSBidWZwOworCUxBU1RfVVNFID0gVFJVRTsKKworCVNldE5vUGFkZGluZyhTUCk7CisJKHZvaWQpIGJhdWRyYXRlKCk7CS8qIHNldHMgb3NwZWVkIGFzIGEgc2lkZS1lZmZlY3QgKi8KKworLyogTElOVF9QUkVQUk8KKyNpZiAwKi8KKyNpbmNsdWRlIDxjYXBkZWZhdWx0cy5jPgorLyogTElOVF9QUkVQUk8KKyNlbmRpZiovCisKKyAgICB9CisgICAgcmV0dXJuQ29kZShlcnJjb2RlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRnZXRmbGFnKHN0cikKKyAqCisgKiBMb29rIHVwIGJvb2xlYW4gdGVybWNhcCBjYXBhYmlsaXR5IHN0ciBhbmQgcmV0dXJuIGl0cyB2YWx1ZSAoVFJVRT0xIGlmCisgKiBwcmVzZW50LCBGQUxTRT0wIGlmIG5vdCkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQordGdldGZsYWcoTkNVUlNFU19DT05TVCBjaGFyICppZCkKK3sKKyAgICB1bnNpZ25lZCBpOworCisgICAgVCgoVF9DQUxMRUQoInRnZXRmbGFnKCVzKSIpLCBpZCkpOworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVEVSTVRZUEUgKnRwID0gJihjdXJfdGVybS0+dHlwZSk7CisJZm9yX2VhY2hfYm9vbGVhbihpLCB0cCkgeworCSAgICBjb25zdCBjaGFyICpjYXBuYW1lID0gRXh0Qm9vbG5hbWUodHAsIGksIGJvb2xjb2Rlcyk7CisJICAgIGlmICghc3RybmNtcChpZCwgY2FwbmFtZSwgMikpIHsKKwkJLyogc2V0dXB0ZXJtIGZvcmNlcyBpbnZhbGlkIGJvb2xlYW5zIHRvIGZhbHNlICovCisJCXJldHVybkNvZGUodHAtPkJvb2xlYW5zW2ldKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZSgwKTsJCS8qIFNvbGFyaXMgZG9lcyB0aGlzICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0Z2V0bnVtKHN0cikKKyAqCisgKiBMb29rIHVwIG51bWVyaWMgdGVybWNhcCBjYXBhYmlsaXR5IHN0ciBhbmQgcmV0dXJuIGl0cyB2YWx1ZSwgb3IgLTEgaWYKKyAqIG5vdCBnaXZlbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCit0Z2V0bnVtKE5DVVJTRVNfQ09OU1QgY2hhciAqaWQpCit7CisgICAgdW5zaWduZWQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJ0Z2V0bnVtKCVzKSIpLCBpZCkpOworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVEVSTVRZUEUgKnRwID0gJihjdXJfdGVybS0+dHlwZSk7CisJZm9yX2VhY2hfbnVtYmVyKGksIHRwKSB7CisJICAgIGNvbnN0IGNoYXIgKmNhcG5hbWUgPSBFeHROdW1uYW1lKHRwLCBpLCBudW1jb2Rlcyk7CisJICAgIGlmICghc3RybmNtcChpZCwgY2FwbmFtZSwgMikpIHsKKwkJaWYgKCFWQUxJRF9OVU1FUklDKHRwLT5OdW1iZXJzW2ldKSkKKwkJICAgIHJldHVybkNvZGUoQUJTRU5UX05VTUVSSUMpOworCQlyZXR1cm5Db2RlKHRwLT5OdW1iZXJzW2ldKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShBQlNFTlRfTlVNRVJJQyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0Z2V0c3RyKHN0ciwgYXJlYSkKKyAqCisgKiBMb29rIHVwIHN0cmluZyB0ZXJtY2FwIGNhcGFiaWxpdHkgc3RyIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0cyB2YWx1ZSwKKyAqIG9yIE5VTEwgaWYgbm90IGdpdmVuLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK3RnZXRzdHIoTkNVUlNFU19DT05TVCBjaGFyICppZCwgY2hhciAqKmFyZWEpCit7CisgICAgdW5zaWduZWQgaTsKKyAgICBjaGFyICpyZXN1bHQgPSBOVUxMOworCisgICAgVCgoVF9DQUxMRUQoInRnZXRzdHIoJXMsJXApIiksIGlkLCBhcmVhKSk7CisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKwlURVJNVFlQRSAqdHAgPSAmKGN1cl90ZXJtLT50eXBlKTsKKwlmb3JfZWFjaF9zdHJpbmcoaSwgdHApIHsKKwkgICAgY29uc3QgY2hhciAqY2FwbmFtZSA9IEV4dFN0cm5hbWUodHAsIGksIHN0cmNvZGVzKTsKKwkgICAgaWYgKCFzdHJuY21wKGlkLCBjYXBuYW1lLCAyKSkgeworCQlyZXN1bHQgPSB0cC0+U3RyaW5nc1tpXTsKKwkJVFIoVFJBQ0VfREFUQUJBU0UsICgiZm91bmQgbWF0Y2ggOiAlcyIsIF9uY192aXNidWYocmVzdWx0KSkpOworCQkvKiBzZXR1cHRlcm0gZm9yY2VzIGNhbmNlbGVkIHN0cmluZ3MgdG8gbnVsbCAqLworCQlpZiAoVkFMSURfU1RSSU5HKHJlc3VsdCkpIHsKKwkJICAgIGlmIChyZXN1bHQgPT0gZXhpdF9hdHRyaWJ1dGVfbW9kZQorCQkJJiYgRklYX1NHUjAgIT0gMCkgeworCQkJcmVzdWx0ID0gRklYX1NHUjA7CisJCQlUUihUUkFDRV9EQVRBQkFTRSwgKCJhbHRlcmVkIHRvIDogJXMiLCBfbmNfdmlzYnVmKHJlc3VsdCkpKTsKKwkJICAgIH0KKwkJICAgIGlmIChhcmVhICE9IDAKKwkJCSYmICphcmVhICE9IDApIHsKKwkJCSh2b2lkKSBzdHJjcHkoKmFyZWEsIHJlc3VsdCk7CisJCQlyZXN1bHQgPSAqYXJlYTsKKwkJCSphcmVhICs9IHN0cmxlbigqYXJlYSkgKyAxOworCQkgICAgfQorCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm5QdHIocmVzdWx0KTsKK30KKworI2lmIE5PX0xFQUtTCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3RnZXRlbnRfbGVha3Modm9pZCkKK3sKKyAgICBmb3IgKENhY2hlSW54ID0gMDsgQ2FjaGVJbnggPCBUR0VURU5UX01BWDsgKytDYWNoZUlueCkgeworCUZyZWVJZk5lZWRlZChGSVhfU0dSMCk7CisJaWYgKExBU1RfVFJNICE9IDApCisJICAgIGRlbF9jdXJ0ZXJtKExBU1RfVFJNKTsKKyAgICB9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3Rlcm1uYW1lLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90ZXJtbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2QwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90ZXJtbmFtZS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3Rlcm1uYW1lLmMsdiAxLjggMjAwMy8xMi8yNyAxODoyMzowMSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCit0ZXJtbmFtZSh2b2lkKQoreworICAgIGNoYXIgKm5hbWUgPSAwOworCisgICAgVCgoVF9DQUxMRUQoInRlcm1uYW1lKCkiKSkpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApCisJbmFtZSA9IGN1cl90ZXJtLT5fdGVybW5hbWU7CisKKyAgICByZXR1cm5QdHIobmFtZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90Z290by5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfdGdvdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDdmNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfdGdvdG8uYwpAQCAtMCwwICsxLDIwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm1jYXAuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90Z290by5jLHYgMS4xMyAyMDA4LzA4LzE2IDE5OjI5OjMyIHRvbSBFeHAgJCIpCisKKyNpZiAhUFVSRV9URVJNSU5GTworc3RhdGljIGJvb2wKK2lzX3Rlcm1jYXAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIGJvb2wgcmVzdWx0ID0gVFJVRTsKKworICAgIGlmIChzdHJpbmcgPT0gMCB8fCAqc3RyaW5nID09ICdcMCcpIHsKKwlyZXN1bHQgPSBGQUxTRTsJCS8qIHRwYXJtKCkgaGFuZGxlcyBlbXB0eSBzdHJpbmdzICovCisgICAgfSBlbHNlIHsKKwl3aGlsZSAoKCpzdHJpbmcgIT0gJ1wwJykgJiYgcmVzdWx0KSB7CisJICAgIGlmICgqc3RyaW5nID09ICclJykgeworCQlzd2l0Y2ggKCorK3N0cmluZykgeworCQljYXNlICdwJzoKKwkJICAgIHJlc3VsdCA9IEZBTFNFOworCQkgICAgYnJlYWs7CisJCWNhc2UgJ1wwJzoKKwkJICAgIHN0cmluZy0tOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfSBlbHNlIGlmIChzdHJpbmdbMF0gPT0gJyQnICYmIHN0cmluZ1sxXSA9PSAnPCcpIHsKKwkJcmVzdWx0ID0gRkFMU0U7CisJICAgIH0KKwkgICAgc3RyaW5nKys7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqCit0Z290b19pbnRlcm5hbChjb25zdCBjaGFyICpzdHJpbmcsIGludCB4LCBpbnQgeSkKK3sKKyAgICBzdGF0aWMgY2hhciAqcmVzdWx0OworICAgIHN0YXRpYyBzaXplX3QgbGVuZ3RoOworCisgICAgaW50IHN3YXBfYXJnOworICAgIGludCBwYXJhbVszXTsKKyAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgc2l6ZV90IG5lZWQgPSAxMDsKKyAgICBpbnQgKnZhbHVlID0gcGFyYW07CisgICAgYm9vbCBuZWVkX0JDID0gRkFMU0U7CisKKyAgICBpZiAoQkMpCisJbmVlZCArPSBzdHJsZW4oQkMpOworCisgICAgcGFyYW1bMF0gPSB5OworICAgIHBhcmFtWzFdID0geDsKKyAgICBwYXJhbVsyXSA9IDA7CisKKyAgICB3aGlsZSAoKnN0cmluZyAhPSAwKSB7CisJaWYgKCh1c2VkICsgbmVlZCkgPiBsZW5ndGgpIHsKKwkgICAgbGVuZ3RoICs9ICh1c2VkICsgbmVlZCk7CisJICAgIGlmICgocmVzdWx0ID0gdHlwZVJlYWxsb2MoY2hhciwgbGVuZ3RoLCByZXN1bHQpKSA9PSAwKSB7CisJCWxlbmd0aCA9IDA7CisJCWJyZWFrOworCSAgICB9CisJfQorCWlmICgqc3RyaW5nID09ICclJykgeworCSAgICBjb25zdCBjaGFyICpmbXQgPSAwOworCisJICAgIHN3aXRjaCAoKisrc3RyaW5nKSB7CisJICAgIGNhc2UgJ1wwJzoKKwkJc3RyaW5nLS07CisJCWJyZWFrOworCSAgICBjYXNlICdkJzoKKwkJZm10ID0gIiVkIjsKKwkJYnJlYWs7CisJICAgIGNhc2UgJzInOgorCQlmbXQgPSAiJTAyZCI7CisJCSp2YWx1ZSAlPSAxMDA7CisJCWJyZWFrOworCSAgICBjYXNlICczJzoKKwkJZm10ID0gIiUwM2QiOworCQkqdmFsdWUgJT0gMTAwMDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJysnOgorCQkqdmFsdWUgKz0gVUNoYXIoKisrc3RyaW5nKTsKKwkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAnLic6CisJCS8qCisJCSAqIEd1YXJkIGFnYWluc3QgdHB1dHMoKSBzZWVpbmcgYSB0cnVuY2F0ZWQgc3RyaW5nLiAgVGhlCisJCSAqIHRlcm1jYXAgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gYSBzaW1pbGFyIGZpeHVwIGZvciBcbgorCQkgKiBhbmQgXHIsIGJ1dCBJIGRvbid0IHNlZSB0aGF0IGl0IGNvdWxkIHdvcmsgLVRECisJCSAqLworCQlpZiAoKnZhbHVlID09IDApIHsKKwkJICAgIGlmIChCQyAhPSAwKSB7CisJCQkqdmFsdWUgKz0gMTsKKwkJCW5lZWRfQkMgPSBUUlVFOworCQkgICAgfSBlbHNlIHsKKwkJCSp2YWx1ZSA9IDAyMDA7CS8qIHRwdXRzIHdpbGwgdHJlYXQgdGhpcyBhcyBcMCAqLworCQkgICAgfQorCQl9CisJCXJlc3VsdFt1c2VkKytdID0gKGNoYXIpICp2YWx1ZSsrOworCQlicmVhazsKKwkgICAgY2FzZSAnJSc6CisJCXJlc3VsdFt1c2VkKytdID0gKnN0cmluZzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3InOgorCQlzd2FwX2FyZyA9IHBhcmFtWzBdOworCQlwYXJhbVswXSA9IHBhcmFtWzFdOworCQlwYXJhbVsxXSA9IHN3YXBfYXJnOworCQlicmVhazsKKwkgICAgY2FzZSAnaSc6CisJCXBhcmFtWzBdICs9IDE7CisJCXBhcmFtWzFdICs9IDE7CisJCWJyZWFrOworCSAgICBjYXNlICc+JzoKKwkJaWYgKCp2YWx1ZSA+IHN0cmluZ1sxXSkKKwkJICAgICp2YWx1ZSArPSBzdHJpbmdbMl07CisJCXN0cmluZyArPSAyOworCQlicmVhazsKKwkgICAgY2FzZSAnbic6CQkvKiBEYXRhbWVkaWEgMjUwMCAqLworCQlwYXJhbVswXSBePSAwMTQwOworCQlwYXJhbVsxXSBePSAwMTQwOworCQlicmVhazsKKwkgICAgY2FzZSAnQic6CQkvKiBCQ0QgKi8KKwkJKnZhbHVlID0gMTYgKiAoKnZhbHVlIC8gMTApICsgKCp2YWx1ZSAlIDEwKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ0QnOgkJLyogUmV2ZXJzZSBjb2RpbmcgKERlbHRhIERhdGEpICovCisJCSp2YWx1ZSAtPSAyICogKCp2YWx1ZSAlIDE2KTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKGZtdCAhPSAwKSB7CisJCXNwcmludGYocmVzdWx0ICsgdXNlZCwgZm10LCAqdmFsdWUrKyk7CisJCXVzZWQgKz0gc3RybGVuKHJlc3VsdCArIHVzZWQpOworCQlmbXQgPSAwOworCSAgICB9CisJICAgIGlmICh2YWx1ZSAtIHBhcmFtID4gMikgeworCQl2YWx1ZSA9IHBhcmFtICsgMjsKKwkJKnZhbHVlID0gMDsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHJlc3VsdFt1c2VkKytdID0gKnN0cmluZzsKKwl9CisJc3RyaW5nKys7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkgeworCWlmIChuZWVkX0JDKSB7CisJICAgIHN0cmNweShyZXN1bHQgKyB1c2VkLCBCQyk7CisJICAgIHVzZWQgKz0gc3RybGVuKEJDKTsKKwl9CisJcmVzdWx0W3VzZWRdID0gJ1wwJzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisvKgorICogUmV0YWluZWQgc29sZWx5IGZvciB1cHdhcmQgY29tcGF0aWJpbGl0eS4gIE5vdGUgdGhlIGludGVudGlvbmFsIHJldmVyc2luZyBvZgorICogdGhlIGxhc3QgdHdvIGFyZ3VtZW50cyB3aGVuIGludm9raW5nIHRwYXJtKCkuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK3Rnb3RvKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IHgsIGludCB5KQoreworICAgIGNoYXIgKnJlc3VsdDsKKworICAgIFQoKFRfQ0FMTEVEKCJ0Z290byglcywgJWQsICVkKSIpLCBfbmNfdmlzYnVmKHN0cmluZyksIHgsIHkpKTsKKyNpZiAhUFVSRV9URVJNSU5GTworICAgIGlmIChpc190ZXJtY2FwKHN0cmluZykpCisJcmVzdWx0ID0gdGdvdG9faW50ZXJuYWwoc3RyaW5nLCB4LCB5KTsKKyAgICBlbHNlCisjZW5kaWYKKwlyZXN1bHQgPSBUUEFSTV8yKChOQ1VSU0VTX0NPTlNUIGNoYXIgKikgc3RyaW5nLCB5LCB4KTsKKyAgICByZXR1cm5QdHIocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3RpLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNDYwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90aS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisjaW5jbHVkZSA8dGljLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdGkuYyx2IDEuMjMgMjAwMy8wNS8yNCAyMToxMDoyOCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit0aWdldGZsYWcoTkNVUlNFU19DT05TVCBjaGFyICpzdHIpCit7CisgICAgdW5zaWduZWQgaTsKKworICAgIFQoKFRfQ0FMTEVEKCJ0aWdldGZsYWcoJXMpIiksIHN0cikpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKwlURVJNVFlQRSAqdHAgPSAmKGN1cl90ZXJtLT50eXBlKTsKKwlmb3JfZWFjaF9ib29sZWFuKGksIHRwKSB7CisJICAgIGNvbnN0IGNoYXIgKmNhcG5hbWUgPSBFeHRCb29sbmFtZSh0cCwgaSwgYm9vbG5hbWVzKTsKKwkgICAgaWYgKCFzdHJjbXAoc3RyLCBjYXBuYW1lKSkgeworCQkvKiBzZXR1cHRlcm0gZm9yY2VzIGludmFsaWQgYm9vbGVhbnMgdG8gZmFsc2UgKi8KKwkJcmV0dXJuQ29kZSh0cC0+Qm9vbGVhbnNbaV0pOworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybkNvZGUoQUJTRU5UX0JPT0xFQU4pOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit0aWdldG51bShOQ1VSU0VTX0NPTlNUIGNoYXIgKnN0cikKK3sKKyAgICB1bnNpZ25lZCBpOworCisgICAgVCgoVF9DQUxMRUQoInRpZ2V0bnVtKCVzKSIpLCBzdHIpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVEVSTVRZUEUgKnRwID0gJihjdXJfdGVybS0+dHlwZSk7CisJZm9yX2VhY2hfbnVtYmVyKGksIHRwKSB7CisJICAgIGNvbnN0IGNoYXIgKmNhcG5hbWUgPSBFeHROdW1uYW1lKHRwLCBpLCBudW1uYW1lcyk7CisJICAgIGlmICghc3RyY21wKHN0ciwgY2FwbmFtZSkpIHsKKwkJaWYgKCFWQUxJRF9OVU1FUklDKHRwLT5OdW1iZXJzW2ldKSkKKwkJICAgIHJldHVybkNvZGUoQUJTRU5UX05VTUVSSUMpOworCQlyZXR1cm5Db2RlKHRwLT5OdW1iZXJzW2ldKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICByZXR1cm5Db2RlKENBTkNFTExFRF9OVU1FUklDKTsJLyogU29sYXJpcyByZXR1cm5zIGEgLTEgaW5zdGVhZCAqLworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCit0aWdldHN0cihOQ1VSU0VTX0NPTlNUIGNoYXIgKnN0cikKK3sKKyAgICB1bnNpZ25lZCBpOworCisgICAgVCgoVF9DQUxMRUQoInRpZ2V0c3RyKCVzKSIpLCBzdHIpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJVEVSTVRZUEUgKnRwID0gJihjdXJfdGVybS0+dHlwZSk7CisJZm9yX2VhY2hfc3RyaW5nKGksIHRwKSB7CisJICAgIGNvbnN0IGNoYXIgKmNhcG5hbWUgPSBFeHRTdHJuYW1lKHRwLCBpLCBzdHJuYW1lcyk7CisJICAgIGlmICghc3RyY21wKHN0ciwgY2FwbmFtZSkpIHsKKwkJLyogc2V0dXB0ZXJtIGZvcmNlcyBjYW5jZWxsZWQgc3RyaW5ncyB0byBudWxsICovCisJCXJldHVyblB0cih0cC0+U3RyaW5nc1tpXSk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuUHRyKENBTkNFTExFRF9TVFJJTkcpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9saWJfdHBhcm0uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3RwYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyYTg0MAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3RwYXJtLmMKQEAgLTAsMCArMSw3OTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXksIDE5OTYgb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXRwYXJtLmMKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90cGFybS5jLHYgMS43NiAyMDA4LzA4LzE2IDE5OjIyOjU1IHRvbSBFeHAgJCIpCisKKy8qCisgKgljaGFyICoKKyAqCXRwYXJtKHN0cmluZywgLi4uKQorICoKKyAqCVN1YnN0aXR1dGUgdGhlIGdpdmVuIHBhcmFtZXRlcnMgaW50byB0aGUgZ2l2ZW4gc3RyaW5nIGJ5IHRoZSBmb2xsb3dpbmcKKyAqCXJ1bGVzICh0YWtlbiBmcm9tIHRlcm1pbmZvKDUpKToKKyAqCisgKgkgICAgIEN1cnNvciBhZGRyZXNzaW5nIGFuZCBvdGhlciBzdHJpbmdzICByZXF1aXJpbmcgIHBhcmFtZS0KKyAqCXRlcnMgaW4gdGhlIHRlcm1pbmFsIGFyZSBkZXNjcmliZWQgYnkgYSBwYXJhbWV0ZXJpemVkIHN0cmluZworICoJY2FwYWJpbGl0eSwgd2l0aCBsaWtlIGVzY2FwZXMgJXggaW4gIGl0LiAgIEZvciAgZXhhbXBsZSwgIHRvCisgKglhZGRyZXNzICB0aGUgIGN1cnNvciwgdGhlIGN1cCBjYXBhYmlsaXR5IGlzIGdpdmVuLCB1c2luZyB0d28KKyAqCXBhcmFtZXRlcnM6IHRoZSByb3cgYW5kIGNvbHVtbiB0byAgYWRkcmVzcyAgdG8uICAgKFJvd3MgIGFuZAorICoJY29sdW1ucyAgYXJlICBudW1iZXJlZCAgZnJvbSAgemVybyBhbmQgcmVmZXIgdG8gdGhlIHBoeXNpY2FsCisgKglzY3JlZW4gdmlzaWJsZSB0byB0aGUgdXNlciwgbm90IHRvIGFueSAgdW5zZWVuICBtZW1vcnkuKSAgSWYKKyAqCXRoZSB0ZXJtaW5hbCBoYXMgbWVtb3J5IHJlbGF0aXZlIGN1cnNvciBhZGRyZXNzaW5nLCB0aGF0IGNhbgorICoJYmUgaW5kaWNhdGVkIGJ5CisgKgorICoJICAgICBUaGUgcGFyYW1ldGVyIG1lY2hhbmlzbSB1c2VzICBhICBzdGFjayAgYW5kICBzcGVjaWFsICAlCisgKgljb2RlcyAgdG8gbWFuaXB1bGF0ZSBpdC4gIFR5cGljYWxseSBhIHNlcXVlbmNlIHdpbGwgcHVzaCBvbmUKKyAqCW9mIHRoZSBwYXJhbWV0ZXJzIG9udG8gdGhlIHN0YWNrIGFuZCB0aGVuIHByaW50IGl0ICBpbiAgc29tZQorICoJZm9ybWF0LiAgT2Z0ZW4gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgYXJlIG5lY2Vzc2FyeS4KKyAqCisgKgkgICAgIFRoZSAlIGVuY29kaW5ncyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisgKgorICoJICAgICAlJSAgICAgICAgb3V0cHV0cyBgJScKKyAqCSAgICAgJWMgICAgICAgIHByaW50IHBvcCgpIGxpa2UgJWMgaW4gcHJpbnRmKCkKKyAqCSAgICAgJXMgICAgICAgIHByaW50IHBvcCgpIGxpa2UgJXMgaW4gcHJpbnRmKCkKKyAqICAgICAgICAgICAlW1s6XWZsYWdzXVt3aWR0aFsucHJlY2lzaW9uXV1bZG94WHNdCisgKiAgICAgICAgICAgICAgICAgICAgIGFzIGluIHByaW50ZiwgZmxhZ3MgYXJlIFstKyNdIGFuZCBzcGFjZQorICogICAgICAgICAgICAgICAgICAgICBUaGUgJzonIGlzIHVzZWQgdG8gYXZvaWQgbWFraW5nICUrIG9yICUtCisgKiAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5zIChzZWUgYmVsb3cpLgorICoKKyAqCSAgICAgJXBbMS05XSAgIHB1c2ggaXRoIHBhcm0KKyAqCSAgICAgJVBbYS16XSAgIHNldCBkeW5hbWljIHZhcmlhYmxlIFthLXpdIHRvIHBvcCgpCisgKgkgICAgICVnW2Etel0gICBnZXQgZHluYW1pYyB2YXJpYWJsZSBbYS16XSBhbmQgcHVzaCBpdAorICoJICAgICAlUFtBLVpdICAgc2V0IHN0YXRpYyB2YXJpYWJsZSBbQS1aXSB0byBwb3AoKQorICoJICAgICAlZ1tBLVpdICAgZ2V0IHN0YXRpYyB2YXJpYWJsZSBbQS1aXSBhbmQgcHVzaCBpdAorICoJICAgICAlbCAgICAgICAgcHVzaCBzdHJsZW4ocG9wKQorICoJICAgICAlJ2MnICAgICAgcHVzaCBjaGFyIGNvbnN0YW50IGMKKyAqCSAgICAgJXtubn0gICAgIHB1c2ggaW50ZWdlciBjb25zdGFudCBubgorICoKKyAqCSAgICAgJSsgJS0gJSogJS8gJW0KKyAqCSAgICAgICAgICAgICAgIGFyaXRobWV0aWMgKCVtIGlzIG1vZCk6IHB1c2gocG9wKCkgb3AgcG9wKCkpCisgKgkgICAgICUmICV8ICVeICBiaXQgb3BlcmF0aW9uczogcHVzaChwb3AoKSBvcCBwb3AoKSkKKyAqCSAgICAgJT0gJT4gJTwgIGxvZ2ljYWwgb3BlcmF0aW9uczogcHVzaChwb3AoKSBvcCBwb3AoKSkKKyAqCSAgICAgJUEgJU8gICAgIGxvZ2ljYWwgYW5kICYgb3Igb3BlcmF0aW9ucyBmb3IgY29uZGl0aW9uYWxzCisgKgkgICAgICUhICV+ICAgICB1bmFyeSBvcGVyYXRpb25zIHB1c2gob3AgcG9wKCkpCisgKgkgICAgICVpICAgICAgICBhZGQgMSB0byBmaXJzdCB0d28gcGFybXMgKGZvciBBTlNJIHRlcm1pbmFscykKKyAqCisgKgkgICAgICU/IGV4cHIgJXQgdGhlbnBhcnQgJWUgZWxzZXBhcnQgJTsKKyAqCSAgICAgICAgICAgICAgIGlmLXRoZW4tZWxzZSwgJWUgZWxzZXBhcnQgaXMgb3B0aW9uYWwuCisgKgkgICAgICAgICAgICAgICBlbHNlLWlmJ3MgYXJlIHBvc3NpYmxlIGFsYSBBbGdvbCA2ODoKKyAqCSAgICAgICAgICAgICAgICU/IGMxICV0IGIxICVlIGMyICV0IGIyICVlIGMzICV0IGIzICVlIGM0ICV0IGI0ICVlIGI1ICU7CisgKgorICoJRm9yIHRob3NlIG9mIHRoZSBhYm92ZSBvcGVyYXRvcnMgd2hpY2ggYXJlIGJpbmFyeSBhbmQgbm90IGNvbW11dGF0aXZlLAorICoJdGhlIHN0YWNrIHdvcmtzIGluIHRoZSB1c3VhbCB3YXksIHdpdGgKKyAqCQkJJWd4ICVneSAlbQorICoJcmVzdWx0aW5nIGluIHggbW9kIHksIG5vdCB0aGUgcmV2ZXJzZS4KKyAqLworCitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KSBfbmNfdHBhcm1fZXJyID0gMDsKKworI2RlZmluZSBUUFModmFyKSBfbmNfcHJlc2NyZWVuLnRwYXJtX3N0YXRlLnZhcgorCisjaWYgTk9fTEVBS1MKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfZnJlZV90cGFybSh2b2lkKQoreworICAgIGlmIChUUFMob3V0X2J1ZmYpICE9IDApIHsKKwlGcmVlQW5kTnVsbChUUFMob3V0X2J1ZmYpKTsKKwlUUFMob3V0X3NpemUpID0gMDsKKwlUUFMob3V0X3VzZWQpID0gMDsKKwlGcmVlQW5kTnVsbChUUFMoZm10X2J1ZmYpKTsKKwlUUFMoZm10X3NpemUpID0gMDsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKK2dldF9zcGFjZShzaXplX3QgbmVlZCkKK3sKKyAgICBuZWVkICs9IFRQUyhvdXRfdXNlZCk7CisgICAgaWYgKG5lZWQgPiBUUFMob3V0X3NpemUpKSB7CisJVFBTKG91dF9zaXplKSA9IG5lZWQgKiAyOworCVRQUyhvdXRfYnVmZikgPSB0eXBlUmVhbGxvYyhjaGFyLCBUUFMob3V0X3NpemUpLCBUUFMob3V0X2J1ZmYpKTsKKwlpZiAoVFBTKG91dF9idWZmKSA9PSAwKQorCSAgICBfbmNfZXJyX2Fib3J0KE1TR19OT19NRU1PUlkpOworICAgIH0KK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIHZvaWQKK3NhdmVfdGV4dChjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKnMsIGludCBsZW4pCit7CisgICAgc2l6ZV90IHNfbGVuID0gc3RybGVuKHMpOworICAgIGlmIChsZW4gPiAoaW50KSBzX2xlbikKKwlzX2xlbiA9IGxlbjsKKworICAgIGdldF9zcGFjZShzX2xlbiArIDEpOworCisgICAgKHZvaWQpIHNwcmludGYoVFBTKG91dF9idWZmKSArIFRQUyhvdXRfdXNlZCksIGZtdCwgcyk7CisgICAgVFBTKG91dF91c2VkKSArPSBzdHJsZW4oVFBTKG91dF9idWZmKSArIFRQUyhvdXRfdXNlZCkpOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorc2F2ZV9udW1iZXIoY29uc3QgY2hhciAqZm10LCBpbnQgbnVtYmVyLCBpbnQgbGVuKQoreworICAgIGlmIChsZW4gPCAzMCkKKwlsZW4gPSAzMDsJCS8qIGFjdHVhbGx5IGxvZzEwKE1BWF9JTlQpKzEgKi8KKworICAgIGdldF9zcGFjZSgodW5zaWduZWQpIGxlbiArIDEpOworCisgICAgKHZvaWQpIHNwcmludGYoVFBTKG91dF9idWZmKSArIFRQUyhvdXRfdXNlZCksIGZtdCwgbnVtYmVyKTsKKyAgICBUUFMob3V0X3VzZWQpICs9IHN0cmxlbihUUFMob3V0X2J1ZmYpICsgVFBTKG91dF91c2VkKSk7Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSB2b2lkCitzYXZlX2NoYXIoaW50IGMpCit7CisgICAgaWYgKGMgPT0gMCkKKwljID0gMDIwMDsKKyAgICBnZXRfc3BhY2UoMSk7CisgICAgVFBTKG91dF9idWZmKVtUUFMob3V0X3VzZWQpKytdID0gKGNoYXIpIGM7Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSB2b2lkCitucHVzaChpbnQgeCkKK3sKKyAgICBpZiAoVFBTKHN0YWNrX3B0cikgPCBTVEFDS1NJWkUpIHsKKwlUUFMoc3RhY2spW1RQUyhzdGFja19wdHIpXS5udW1fdHlwZSA9IFRSVUU7CisJVFBTKHN0YWNrKVtUUFMoc3RhY2tfcHRyKV0uZGF0YS5udW0gPSB4OworCVRQUyhzdGFja19wdHIpKys7CisgICAgfSBlbHNlIHsKKwlERUJVRygyLCAoIm5wdXNoOiBzdGFjayBvdmVyZmxvdzogJXMiLCBfbmNfdmlzYnVmKFRQUyh0cGFyYW1fYmFzZSkpKSk7CisJX25jX3RwYXJtX2VycisrOworICAgIH0KK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorbnBvcCh2b2lkKQoreworICAgIGludCByZXN1bHQgPSAwOworICAgIGlmIChUUFMoc3RhY2tfcHRyKSA+IDApIHsKKwlUUFMoc3RhY2tfcHRyKS0tOworCWlmIChUUFMoc3RhY2spW1RQUyhzdGFja19wdHIpXS5udW1fdHlwZSkKKwkgICAgcmVzdWx0ID0gVFBTKHN0YWNrKVtUUFMoc3RhY2tfcHRyKV0uZGF0YS5udW07CisgICAgfSBlbHNlIHsKKwlERUJVRygyLCAoIm5wb3A6IHN0YWNrIHVuZGVyZmxvdzogJXMiLCBfbmNfdmlzYnVmKFRQUyh0cGFyYW1fYmFzZSkpKSk7CisJX25jX3RwYXJtX2VycisrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorc3B1c2goY2hhciAqeCkKK3sKKyAgICBpZiAoVFBTKHN0YWNrX3B0cikgPCBTVEFDS1NJWkUpIHsKKwlUUFMoc3RhY2spW1RQUyhzdGFja19wdHIpXS5udW1fdHlwZSA9IEZBTFNFOworCVRQUyhzdGFjaylbVFBTKHN0YWNrX3B0cildLmRhdGEuc3RyID0geDsKKwlUUFMoc3RhY2tfcHRyKSsrOworICAgIH0gZWxzZSB7CisJREVCVUcoMiwgKCJzcHVzaDogc3RhY2sgb3ZlcmZsb3c6ICVzIiwgX25jX3Zpc2J1ZihUUFModHBhcmFtX2Jhc2UpKSkpOworCV9uY190cGFybV9lcnIrKzsKKyAgICB9Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBjaGFyICoKK3Nwb3Aodm9pZCkKK3sKKyAgICBzdGF0aWMgY2hhciBkdW1teVtdID0gIiI7CS8qIGF2b2lkIGNvbnN0LWNhc3QgKi8KKyAgICBjaGFyICpyZXN1bHQgPSBkdW1teTsKKyAgICBpZiAoVFBTKHN0YWNrX3B0cikgPiAwKSB7CisJVFBTKHN0YWNrX3B0ciktLTsKKwlpZiAoIVRQUyhzdGFjaylbVFBTKHN0YWNrX3B0cildLm51bV90eXBlCisJICAgICYmIFRQUyhzdGFjaylbVFBTKHN0YWNrX3B0cildLmRhdGEuc3RyICE9IDApCisJICAgIHJlc3VsdCA9IFRQUyhzdGFjaylbVFBTKHN0YWNrX3B0cildLmRhdGEuc3RyOworICAgIH0gZWxzZSB7CisJREVCVUcoMiwgKCJzcG9wOiBzdGFjayB1bmRlcmZsb3c6ICVzIiwgX25jX3Zpc2J1ZihUUFModHBhcmFtX2Jhc2UpKSkpOworCV9uY190cGFybV9lcnIrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGNvbnN0IGNoYXIgKgorcGFyc2VfZm9ybWF0KGNvbnN0IGNoYXIgKnMsIGNoYXIgKmZvcm1hdCwgaW50ICpsZW4pCit7CisgICAgKmxlbiA9IDA7CisgICAgaWYgKGZvcm1hdCAhPSAwKSB7CisJYm9vbCBkb25lID0gRkFMU0U7CisJYm9vbCBhbGxvd21pbnVzID0gRkFMU0U7CisJYm9vbCBkb3QgPSBGQUxTRTsKKwlib29sIGVyciA9IEZBTFNFOworCWNoYXIgKmZtdCA9IGZvcm1hdDsKKwlpbnQgbXlfd2lkdGggPSAwOworCWludCBteV9wcmVjID0gMDsKKwlpbnQgdmFsdWUgPSAwOworCisJKmxlbiA9IDA7CisJKmZvcm1hdCsrID0gJyUnOworCXdoaWxlICgqcyAhPSAnXDAnICYmICFkb25lKSB7CisJICAgIHN3aXRjaCAoKnMpIHsKKwkgICAgY2FzZSAnYyc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdkJzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ28nOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAneCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdYJzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ3MnOgorCQkqZm9ybWF0KysgPSAqczsKKwkJZG9uZSA9IFRSVUU7CisJCWJyZWFrOworCSAgICBjYXNlICcuJzoKKwkJKmZvcm1hdCsrID0gKnMrKzsKKwkJaWYgKGRvdCkgeworCQkgICAgZXJyID0gVFJVRTsKKwkJfSBlbHNlIHsJLyogdmFsdWUgYmVmb3JlICcuJyBpcyB0aGUgd2lkdGggKi8KKwkJICAgIGRvdCA9IFRSVUU7CisJCSAgICBteV93aWR0aCA9IHZhbHVlOworCQl9CisJCXZhbHVlID0gMDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyMnOgorCQkqZm9ybWF0KysgPSAqcysrOworCQlicmVhazsKKwkgICAgY2FzZSAnICc6CisJCSpmb3JtYXQrKyA9ICpzKys7CisJCWJyZWFrOworCSAgICBjYXNlICc6JzoKKwkJcysrOworCQlhbGxvd21pbnVzID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJy0nOgorCQlpZiAoYWxsb3dtaW51cykgeworCQkgICAgKmZvcm1hdCsrID0gKnMrKzsKKwkJfSBlbHNlIHsKKwkJICAgIGRvbmUgPSBUUlVFOworCQl9CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlpZiAoaXNkaWdpdChVQ2hhcigqcykpKSB7CisJCSAgICB2YWx1ZSA9ICh2YWx1ZSAqIDEwKSArICgqcyAtICcwJyk7CisJCSAgICBpZiAodmFsdWUgPiAxMDAwMCkKKwkJCWVyciA9IFRSVUU7CisJCSAgICAqZm9ybWF0KysgPSAqcysrOworCQl9IGVsc2UgeworCQkgICAgZG9uZSA9IFRSVUU7CisJCX0KKwkgICAgfQorCX0KKworCS8qCisJICogSWYgd2UgZm91bmQgYW4gZXJyb3IsIGlnbm9yZSAoYW5kIHJlbW92ZSkgdGhlIGZsYWdzLgorCSAqLworCWlmIChlcnIpIHsKKwkgICAgbXlfd2lkdGggPSBteV9wcmVjID0gdmFsdWUgPSAwOworCSAgICBmb3JtYXQgPSBmbXQ7CisJICAgICpmb3JtYXQrKyA9ICclJzsKKwkgICAgKmZvcm1hdCsrID0gKnM7CisJfQorCisJLyoKKwkgKiBBbnkgdmFsdWUgYWZ0ZXIgJy4nIGlzIHRoZSBwcmVjaXNpb24uICBJZiB3ZSBkaWQgbm90IHNlZSAnLicsIHRoZW4KKwkgKiB0aGUgdmFsdWUgaXMgdGhlIHdpZHRoLgorCSAqLworCWlmIChkb3QpCisJICAgIG15X3ByZWMgPSB2YWx1ZTsKKwllbHNlCisJICAgIG15X3dpZHRoID0gdmFsdWU7CisKKwkqZm9ybWF0ID0gJ1wwJzsKKwkvKiByZXR1cm4gbWF4aW11bSBzdHJpbmcgbGVuZ3RoIGluIHByaW50ICovCisJKmxlbiA9IChteV93aWR0aCA+IG15X3ByZWMpID8gbXlfd2lkdGggOiBteV9wcmVjOworICAgIH0KKyAgICByZXR1cm4gczsKK30KKworI2RlZmluZSBpc1VQUEVSKGMpICgoYykgPj0gJ0EnICYmIChjKSA8PSAnWicpCisjZGVmaW5lIGlzTE9XRVIoYykgKChjKSA+PSAnYScgJiYgKGMpIDw9ICd6JykKKworLyoKKyAqIEFuYWx5emUgdGhlIHN0cmluZyB0byBzZWUgaG93IG1hbnkgcGFyYW1ldGVycyB3ZSBuZWVkIGZyb20gdGhlIHZhcmFyZ3MgbGlzdCwKKyAqIGFuZCB3aGF0IHRoZWlyIHR5cGVzIGFyZS4gIFdlIHdpbGwgb25seSBhY2NlcHQgc3RyaW5nIHBhcmFtZXRlcnMgaWYgdGhleQorICogYXBwZWFyIGFzIGEgJWwgb3IgJXMgZm9ybWF0IGZvbGxvd2luZyBhbiBleHBsaWNpdCBwYXJhbWV0ZXIgcmVmZXJlbmNlIChlLmcuLAorICogJXAyJXMpLiAgQWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIG51bWJlcnMuCisgKgorICogJ251bWJlcicgY291bnRzIGNvYXJzZWx5IHRoZSBudW1iZXIgb2YgcG9wJ3Mgd2Ugc2VlIGluIHRoZSBzdHJpbmcsIGFuZAorICogJ3BvcGNvdW50JyBzaG93cyB0aGUgaGlnaGVzdCBwYXJhbWV0ZXIgbnVtYmVyIGluIHRoZSBzdHJpbmcuICBXZSB3b3VsZCBsaWtlCisgKiB0byBzaW1wbHkgdXNlIHRoZSBsYXR0ZXIgY291bnQsIGJ1dCBpZiB3ZSBhcmUgcmVhZGluZyB0ZXJtY2FwIHN0cmluZ3MsIHRoZXJlCisgKiBtYXkgYmUgY2FzZXMgdGhhdCB3ZSBjYW5ub3Qgc2VlIHRoZSBleHBsaWNpdCBwYXJhbWV0ZXIgbnVtYmVycy4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3RwYXJtX2FuYWx5emUoY29uc3QgY2hhciAqc3RyaW5nLCBjaGFyICpwX2lzX3NbTlVNX1BBUk1dLCBpbnQgKnBvcGNvdW50KQoreworICAgIHNpemVfdCBsZW4yOworICAgIGludCBpOworICAgIGludCBsYXN0cG9wID0gLTE7CisgICAgaW50IGxlbjsKKyAgICBpbnQgbnVtYmVyID0gMDsKKyAgICBjb25zdCBjaGFyICpjcCA9IHN0cmluZzsKKyAgICBzdGF0aWMgY2hhciBkdW1teVtdID0gIiI7CisKKyAgICBpZiAoY3AgPT0gMCkKKwlyZXR1cm4gMDsKKworICAgIGlmICgobGVuMiA9IHN0cmxlbihjcCkpID4gVFBTKGZtdF9zaXplKSkgeworCVRQUyhmbXRfc2l6ZSkgPSBsZW4yICsgVFBTKGZtdF9zaXplKSArIDI7CisJVFBTKGZtdF9idWZmKSA9IHR5cGVSZWFsbG9jKGNoYXIsIFRQUyhmbXRfc2l6ZSksIFRQUyhmbXRfYnVmZikpOworCWlmIChUUFMoZm10X2J1ZmYpID09IDApCisJICAgIHJldHVybiAwOworICAgIH0KKworICAgIG1lbXNldChwX2lzX3MsIDAsIHNpemVvZihwX2lzX3NbMF0pICogTlVNX1BBUk0pOworICAgICpwb3Bjb3VudCA9IDA7CisKKyAgICB3aGlsZSAoKGNwIC0gc3RyaW5nKSA8IChpbnQpIGxlbjIpIHsKKwlpZiAoKmNwID09ICclJykgeworCSAgICBjcCsrOworCSAgICBjcCA9IHBhcnNlX2Zvcm1hdChjcCwgVFBTKGZtdF9idWZmKSwgJmxlbik7CisJICAgIHN3aXRjaCAoKmNwKSB7CisJICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2QnOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAnbyc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICd4JzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ1gnOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAnYyc6CQkvKiBGQUxMVEhSVSAqLworCQlpZiAobGFzdHBvcCA8PSAwKQorCQkgICAgbnVtYmVyKys7CisJCWxhc3Rwb3AgPSAtMTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnbCc6CisJICAgIGNhc2UgJ3MnOgorCQlpZiAobGFzdHBvcCA+IDApCisJCSAgICBwX2lzX3NbbGFzdHBvcCAtIDFdID0gZHVtbXk7CisJCSsrbnVtYmVyOworCQlicmVhazsKKworCSAgICBjYXNlICdwJzoKKwkJY3ArKzsKKwkJaSA9IChVQ2hhcigqY3ApIC0gJzAnKTsKKwkJaWYgKGkgPj0gMCAmJiBpIDw9IE5VTV9QQVJNKSB7CisJCSAgICBsYXN0cG9wID0gaTsKKwkJICAgIGlmIChsYXN0cG9wID4gKnBvcGNvdW50KQorCQkJKnBvcGNvdW50ID0gbGFzdHBvcDsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlICdQJzoKKwkJKytudW1iZXI7CisJCSsrY3A7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ2cnOgorCQljcCsrOworCQlicmVhazsKKworCSAgICBjYXNlIFNfUVVPVEU6CisJCWNwICs9IDI7CisJCWxhc3Rwb3AgPSAtMTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBMX0JSQUNFOgorCQljcCsrOworCQl3aGlsZSAoaXNkaWdpdChVQ2hhcigqY3ApKSkgeworCQkgICAgY3ArKzsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlICcrJzoKKwkgICAgY2FzZSAnLSc6CisJICAgIGNhc2UgJyonOgorCSAgICBjYXNlICcvJzoKKwkgICAgY2FzZSAnbSc6CisJICAgIGNhc2UgJ0EnOgorCSAgICBjYXNlICdPJzoKKwkgICAgY2FzZSAnJic6CisJICAgIGNhc2UgJ3wnOgorCSAgICBjYXNlICdeJzoKKwkgICAgY2FzZSAnPSc6CisJICAgIGNhc2UgJzwnOgorCSAgICBjYXNlICc+JzoKKwkJbGFzdHBvcCA9IC0xOworCQludW1iZXIgKz0gMjsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnISc6CisJICAgIGNhc2UgJ34nOgorCQlsYXN0cG9wID0gLTE7CisJCSsrbnVtYmVyOworCQlicmVhazsKKworCSAgICBjYXNlICdpJzoKKwkJLyogd2lsbCBhZGQgMSB0byBmaXJzdCAodXN1YWxseSB0d28pIHBhcmFtZXRlcnMgKi8KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJaWYgKCpjcCAhPSAnXDAnKQorCSAgICBjcCsrOworICAgIH0KKworICAgIGlmIChudW1iZXIgPiBOVU1fUEFSTSkKKwludW1iZXIgPSBOVU1fUEFSTTsKKyAgICByZXR1cm4gbnVtYmVyOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgY2hhciAqCit0cGFyYW1faW50ZXJuYWwoY29uc3QgY2hhciAqc3RyaW5nLCB2YV9saXN0IGFwKQoreworICAgIGNoYXIgKnBfaXNfc1tOVU1fUEFSTV07CisgICAgVFBBUk1fQVJHIHBhcmFtW05VTV9QQVJNXTsKKyAgICBpbnQgcG9wY291bnQ7CisgICAgaW50IG51bWJlcjsKKyAgICBpbnQgbGVuOworICAgIGludCBsZXZlbDsKKyAgICBpbnQgeCwgeTsKKyAgICBpbnQgaTsKKyAgICBjb25zdCBjaGFyICpjcCA9IHN0cmluZzsKKyAgICBzaXplX3QgbGVuMjsKKworICAgIGlmIChjcCA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgVFBTKG91dF91c2VkKSA9IDA7CisgICAgbGVuMiA9IHN0cmxlbihjcCk7CisKKyAgICAvKgorICAgICAqIEZpbmQgdGhlIGhpZ2hlc3QgcGFyYW1ldGVyLW51bWJlciByZWZlcnJlZCB0byBpbiB0aGUgZm9ybWF0IHN0cmluZy4KKyAgICAgKiBVc2UgdGhpcyB2YWx1ZSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBjb3BpZWQgZnJvbSB0aGUKKyAgICAgKiB2YXJpYWJsZS1sZW5ndGggYXJndW1lbnQgbGlzdC4KKyAgICAgKi8KKyAgICBudW1iZXIgPSBfbmNfdHBhcm1fYW5hbHl6ZShjcCwgcF9pc19zLCAmcG9wY291bnQpOworICAgIGlmIChUUFMoZm10X2J1ZmYpID09IDApCisJcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbWF4KHBvcGNvdW50LCBudW1iZXIpOyBpKyspIHsKKwkvKgorCSAqIEEgZmV3IGNhcHMgKHN1Y2ggYXMgcGxhYl9ub3JtKSBoYXZlIHN0cmluZy12YWx1ZWQgcGFybXMuCisJICogV2UnbGwgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgY2FsbGVyIGtub3dzIHRoZSBkaWZmZXJlbmNlLCBzaW5jZQorCSAqIGEgY2hhciogYW5kIGFuIGludCBtYXkgbm90IGJlIHRoZSBzYW1lIHNpemUgb24gdGhlIHN0YWNrLiAgVGhlCisJICogbm9ybWFsIHByb3RvdHlwZSBmb3IgdGhpcyB1c2VzIDkgbG9uZydzLCB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGgKKwkgKiBvdXIgdmFfYXJnKCkgdXNhZ2UuCisJICovCisJaWYgKHBfaXNfc1tpXSAhPSAwKSB7CisJICAgIHBfaXNfc1tpXSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwl9IGVsc2UgeworCSAgICBwYXJhbVtpXSA9IHZhX2FyZyhhcCwgVFBBUk1fQVJHKTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGlzIGlzIGEgdGVybWNhcCBjb21wYXRpYmlsaXR5IGhhY2suICBJZiB0aGVyZSBhcmUgbm8gZXhwbGljaXQgcG9wCisgICAgICogb3BlcmF0aW9ucyBpbiB0aGUgc3RyaW5nLCBsb2FkIHRoZSBzdGFjayBpbiBzdWNoIGEgd2F5IHRoYXQKKyAgICAgKiBzdWNjZXNzaXZlIHBvcHMgd2lsbCBncmFiIHN1Y2Nlc3NpdmUgcGFyYW1ldGVycy4gIFRoYXQgd2lsbCBtYWtlCisgICAgICogdGhlIGV4cGFuc2lvbiBvZiAoZm9yIGV4YW1wbGUpIFxFWyVkOyVkSCB3b3JrIGNvcnJlY3RseSBpbiB0ZXJtY2FwCisgICAgICogc3R5bGUsIHdoaWNoIG1lYW5zIHRwYXJhbSgpIHdpbGwgZXhwYW5kIHRlcm1jYXAgc3RyaW5ncyBPSy4KKyAgICAgKi8KKyAgICBUUFMoc3RhY2tfcHRyKSA9IDA7CisgICAgaWYgKHBvcGNvdW50ID09IDApIHsKKwlwb3Bjb3VudCA9IG51bWJlcjsKKwlmb3IgKGkgPSBudW1iZXIgLSAxOyBpID49IDA7IGktLSkgeworCSAgICBpZiAocF9pc19zW2ldKQorCQlzcHVzaChwX2lzX3NbaV0pOworCSAgICBlbHNlCisJCW5wdXNoKHBhcmFtW2ldKTsKKwl9CisgICAgfQorI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfQ0FMTFMpKSB7CisJZm9yIChpID0gMDsgaSA8IHBvcGNvdW50OyBpKyspIHsKKwkgICAgaWYgKHBfaXNfc1tpXSAhPSAwKQorCQlzYXZlX3RleHQoIiwgJXMiLCBfbmNfdmlzYnVmKHBfaXNfc1tpXSksIDApOworCSAgICBlbHNlCisJCXNhdmVfbnVtYmVyKCIsICVkIiwgcGFyYW1baV0sIDApOworCX0KKwlfdHJhY2VmKFRfQ0FMTEVEKCIlcyglcyVzKSIpLCBUUFModG5hbWUpLCBfbmNfdmlzYnVmKGNwKSwgVFBTKG91dF9idWZmKSk7CisJVFBTKG91dF91c2VkKSA9IDA7CisJX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKyAgICB9CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIHdoaWxlICgoY3AgLSBzdHJpbmcpIDwgKGludCkgbGVuMikgeworCWlmICgqY3AgIT0gJyUnKSB7CisJICAgIHNhdmVfY2hhcihVQ2hhcigqY3ApKTsKKwl9IGVsc2UgeworCSAgICBUUFModHBhcmFtX2Jhc2UpID0gY3ArKzsKKwkgICAgY3AgPSBwYXJzZV9mb3JtYXQoY3AsIFRQUyhmbXRfYnVmZiksICZsZW4pOworCSAgICBzd2l0Y2ggKCpjcCkgeworCSAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgY2FzZSAnJSc6CisJCXNhdmVfY2hhcignJScpOworCQlicmVhazsKKworCSAgICBjYXNlICdkJzoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgJ28nOgkJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAneCc6CQkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlICdYJzoJCS8qIEZBTExUSFJVICovCisJCXNhdmVfbnVtYmVyKFRQUyhmbXRfYnVmZiksIG5wb3AoKSwgbGVuKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnYyc6CQkvKiBGQUxMVEhSVSAqLworCQlzYXZlX2NoYXIobnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnbCc6CisJCXNhdmVfbnVtYmVyKCIlZCIsIChpbnQpIHN0cmxlbihzcG9wKCkpLCAwKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAncyc6CisJCXNhdmVfdGV4dChUUFMoZm10X2J1ZmYpLCBzcG9wKCksIGxlbik7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ3AnOgorCQljcCsrOworCQlpID0gKFVDaGFyKCpjcCkgLSAnMScpOworCQlpZiAoaSA+PSAwICYmIGkgPCBOVU1fUEFSTSkgeworCQkgICAgaWYgKHBfaXNfc1tpXSkKKwkJCXNwdXNoKHBfaXNfc1tpXSk7CisJCSAgICBlbHNlCisJCQlucHVzaChwYXJhbVtpXSk7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnUCc6CisJCWNwKys7CisJCWlmIChpc1VQUEVSKCpjcCkpIHsKKwkJICAgIGkgPSAoVUNoYXIoKmNwKSAtICdBJyk7CisJCSAgICBUUFMoc3RhdGljX3ZhcnMpW2ldID0gbnBvcCgpOworCQl9IGVsc2UgaWYgKGlzTE9XRVIoKmNwKSkgeworCQkgICAgaSA9IChVQ2hhcigqY3ApIC0gJ2EnKTsKKwkJICAgIFRQUyhkeW5hbWljX3ZhcilbaV0gPSBucG9wKCk7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnZyc6CisJCWNwKys7CisJCWlmIChpc1VQUEVSKCpjcCkpIHsKKwkJICAgIGkgPSAoVUNoYXIoKmNwKSAtICdBJyk7CisJCSAgICBucHVzaChUUFMoc3RhdGljX3ZhcnMpW2ldKTsKKwkJfSBlbHNlIGlmIChpc0xPV0VSKCpjcCkpIHsKKwkJICAgIGkgPSAoVUNoYXIoKmNwKSAtICdhJyk7CisJCSAgICBucHVzaChUUFMoZHluYW1pY192YXIpW2ldKTsKKwkJfQorCQlicmVhazsKKworCSAgICBjYXNlIFNfUVVPVEU6CisJCWNwKys7CisJCW5wdXNoKFVDaGFyKCpjcCkpOworCQljcCsrOworCQlicmVhazsKKworCSAgICBjYXNlIExfQlJBQ0U6CisJCW51bWJlciA9IDA7CisJCWNwKys7CisJCXdoaWxlIChpc2RpZ2l0KFVDaGFyKCpjcCkpKSB7CisJCSAgICBudW1iZXIgPSAobnVtYmVyICogMTApICsgKFVDaGFyKCpjcCkgLSAnMCcpOworCQkgICAgY3ArKzsKKwkJfQorCQlucHVzaChudW1iZXIpOworCQlicmVhazsKKworCSAgICBjYXNlICcrJzoKKwkJbnB1c2gobnBvcCgpICsgbnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnLSc6CisJCXkgPSBucG9wKCk7CisJCXggPSBucG9wKCk7CisJCW5wdXNoKHggLSB5KTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnKic6CisJCW5wdXNoKG5wb3AoKSAqIG5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJy8nOgorCQl5ID0gbnBvcCgpOworCQl4ID0gbnBvcCgpOworCQlucHVzaCh5ID8gKHggLyB5KSA6IDApOworCQlicmVhazsKKworCSAgICBjYXNlICdtJzoKKwkJeSA9IG5wb3AoKTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2goeSA/ICh4ICUgeSkgOiAwKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnQSc6CisJCW5wdXNoKG5wb3AoKSAmJiBucG9wKCkpOworCQlicmVhazsKKworCSAgICBjYXNlICdPJzoKKwkJbnB1c2gobnBvcCgpIHx8IG5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJyYnOgorCQlucHVzaChucG9wKCkgJiBucG9wKCkpOworCQlicmVhazsKKworCSAgICBjYXNlICd8JzoKKwkJbnB1c2gobnBvcCgpIHwgbnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnXic6CisJCW5wdXNoKG5wb3AoKSBeIG5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJz0nOgorCQl5ID0gbnBvcCgpOworCQl4ID0gbnBvcCgpOworCQlucHVzaCh4ID09IHkpOworCQlicmVhazsKKworCSAgICBjYXNlICc8JzoKKwkJeSA9IG5wb3AoKTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2goeCA8IHkpOworCQlicmVhazsKKworCSAgICBjYXNlICc+JzoKKwkJeSA9IG5wb3AoKTsKKwkJeCA9IG5wb3AoKTsKKwkJbnB1c2goeCA+IHkpOworCQlicmVhazsKKworCSAgICBjYXNlICchJzoKKwkJbnB1c2goIW5wb3AoKSk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ34nOgorCQlucHVzaCh+bnBvcCgpKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnaSc6CisJCWlmIChwX2lzX3NbMF0gPT0gMCkKKwkJICAgIHBhcmFtWzBdKys7CisJCWlmIChwX2lzX3NbMV0gPT0gMCkKKwkJICAgIHBhcmFtWzFdKys7CisJCWJyZWFrOworCisJICAgIGNhc2UgJz8nOgorCQlicmVhazsKKworCSAgICBjYXNlICd0JzoKKwkJeCA9IG5wb3AoKTsKKwkJaWYgKCF4KSB7CisJCSAgICAvKiBzY2FuIGZvcndhcmQgZm9yICVlIG9yICU7IGF0IGxldmVsIHplcm8gKi8KKwkJICAgIGNwKys7CisJCSAgICBsZXZlbCA9IDA7CisJCSAgICB3aGlsZSAoKmNwKSB7CisJCQlpZiAoKmNwID09ICclJykgeworCQkJICAgIGNwKys7CisJCQkgICAgaWYgKCpjcCA9PSAnPycpCisJCQkJbGV2ZWwrKzsKKwkJCSAgICBlbHNlIGlmICgqY3AgPT0gJzsnKSB7CisJCQkJaWYgKGxldmVsID4gMCkKKwkJCQkgICAgbGV2ZWwtLTsKKwkJCQllbHNlCisJCQkJICAgIGJyZWFrOworCQkJICAgIH0gZWxzZSBpZiAoKmNwID09ICdlJyAmJiBsZXZlbCA9PSAwKQorCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoKmNwKQorCQkJICAgIGNwKys7CisJCSAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnZSc6CisJCS8qIHNjYW4gZm9yd2FyZCBmb3IgYSAlOyBhdCBsZXZlbCB6ZXJvICovCisJCWNwKys7CisJCWxldmVsID0gMDsKKwkJd2hpbGUgKCpjcCkgeworCQkgICAgaWYgKCpjcCA9PSAnJScpIHsKKwkJCWNwKys7CisJCQlpZiAoKmNwID09ICc/JykKKwkJCSAgICBsZXZlbCsrOworCQkJZWxzZSBpZiAoKmNwID09ICc7JykgeworCQkJICAgIGlmIChsZXZlbCA+IDApCisJCQkJbGV2ZWwtLTsKKwkJCSAgICBlbHNlCisJCQkJYnJlYWs7CisJCQl9CisJCSAgICB9CisKKwkJICAgIGlmICgqY3ApCisJCQljcCsrOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJzsnOgorCQlicmVhazsKKworCSAgICB9CQkJLyogZW5kc3dpdGNoICgqY3ApICovCisJfQkJCS8qIGVuZGVsc2UgKCpjcCA9PSAnJScpICovCisKKwlpZiAoKmNwID09ICdcMCcpCisJICAgIGJyZWFrOworCisJY3ArKzsKKyAgICB9CQkJCS8qIGVuZHdoaWxlICgqY3ApICovCisKKyAgICBnZXRfc3BhY2UoMSk7CisgICAgVFBTKG91dF9idWZmKVtUUFMob3V0X3VzZWQpXSA9ICdcMCc7CisKKyAgICBUKChUX1JFVFVSTigiJXMiKSwgX25jX3Zpc2J1ZihUUFMob3V0X2J1ZmYpKSkpOworICAgIHJldHVybiAoVFBTKG91dF9idWZmKSk7Cit9CisKKyNpZiBOQ1VSU0VTX1RQQVJNX1ZBUkFSR1MKKyNkZWZpbmUgdHBhcm1fdmFyYXJncyB0cGFybQorI2Vsc2UKKyNkZWZpbmUgdHBhcm1fcHJvdG8gdHBhcm0KKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCit0cGFybV92YXJhcmdzKE5DVVJTRVNfQ09OU1QgY2hhciAqc3RyaW5nLC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIgKnJlc3VsdDsKKworICAgIF9uY190cGFybV9lcnIgPSAwOworICAgIHZhX3N0YXJ0KGFwLCBzdHJpbmcpOworI2lmZGVmIFRSQUNFCisgICAgVFBTKHRuYW1lKSA9ICJ0cGFybSI7CisjZW5kaWYgLyogVFJBQ0UgKi8KKyAgICByZXN1bHQgPSB0cGFyYW1faW50ZXJuYWwoc3RyaW5nLCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgIU5DVVJTRVNfVFBBUk1fVkFSQVJHUworTkNVUlNFU19FWFBPUlQoY2hhciAqKQordHBhcm1fcHJvdG8oTkNVUlNFU19DT05TVCBjaGFyICpzdHJpbmcsCisJICAgIFRQQVJNX0FSRyBhMSwKKwkgICAgVFBBUk1fQVJHIGEyLAorCSAgICBUUEFSTV9BUkcgYTMsCisJICAgIFRQQVJNX0FSRyBhNCwKKwkgICAgVFBBUk1fQVJHIGE1LAorCSAgICBUUEFSTV9BUkcgYTYsCisJICAgIFRQQVJNX0FSRyBhNywKKwkgICAgVFBBUk1fQVJHIGE4LAorCSAgICBUUEFSTV9BUkcgYTkpCit7CisgICAgcmV0dXJuIHRwYXJtX3ZhcmFyZ3Moc3RyaW5nLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsKK30KKyNlbmRpZiAvKiBOQ1VSU0VTX1RQQVJNX1ZBUkFSR1MgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3RwdXRzLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90cHV0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjcyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90cHV0cy5jCkBAIC0wLDAgKzEsMjc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgl0cHV0cy5jCisgKgkJZGVsYXlfb3V0cHV0KCkKKyAqCQlfbmNfb3V0Y2goKQorICoJCXRwdXRzKCkKKyAqCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBwYWRkaW5nX2JhdWRfcmF0ZSwgeG9uX3hvZmYgKi8KKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CQkvKiBvc3BlZWQgKi8KKyNpbmNsdWRlIDx0aWMuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90cHV0cy5jLHYgMS42NiAyMDA4LzA2LzI4IDEzOjEyOjE1IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUX1ZBUihjaGFyKSBQQyA9IDA7ICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRlcm1jYXAgbGlicmFyeSAqLworTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfT1NQRUVEKSBvc3BlZWQgPSAwOyAgICAgICAgLyogdXNlZCBieSB0ZXJtY2FwIGxpYnJhcnkgKi8KKworTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX251bGxzX3NlbnQgPSAwOyAgIC8qIHVzZWQgYnkgJ3RhY2snIHByb2dyYW0gKi8KKworI2lmIE5DVVJTRVNfTk9fUEFERElORworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zZXRfbm9fcGFkZGluZyhTQ1JFRU4gKnNwKQoreworICAgIGJvb2wgbm9fcGFkZGluZyA9IChnZXRlbnYoIk5DVVJTRVNfTk9fUEFERElORyIpICE9IDApOworCisgICAgaWYgKHNwKQorCXNwLT5fbm9fcGFkZGluZyA9IG5vX3BhZGRpbmc7CisgICAgZWxzZQorCV9uY19wcmVzY3JlZW4uX25vX3BhZGRpbmcgPSBub19wYWRkaW5nOworCisgICAgVFIoVFJBQ0VfQ0hBUlBVVCB8IFRSQUNFX01PVkUsICgicGFkZGluZyB3aWxsJXMgYmUgdXNlZCIsCisJCQkJICAgIEdldE5vUGFkZGluZyhzcCkgPyAiIG5vdCIgOiAiIikpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgKCpteV9vdXRjaCkgKGludCBjKSA9IF9uY19vdXRjaDsKKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVsYXlfb3V0cHV0KGludCBtcykKK3sKKyAgICBUKChUX0NBTExFRCgiZGVsYXlfb3V0cHV0KCVkKSIpLCBtcykpOworCisgICAgaWYgKG5vX3BhZF9jaGFyKSB7CisJX25jX2ZsdXNoKCk7CisJbmFwbXMobXMpOworICAgIH0gZWxzZSB7CisJcmVnaXN0ZXIgaW50IG51bGxjb3VudDsKKworCW51bGxjb3VudCA9IChtcyAqIF9uY19iYXVkcmF0ZShvc3BlZWQpKSAvIChCQVVEQllURSAqIDEwMDApOworCWZvciAoX25jX251bGxzX3NlbnQgKz0gbnVsbGNvdW50OyBudWxsY291bnQgPiAwOyBudWxsY291bnQtLSkKKwkgICAgbXlfb3V0Y2goUEMpOworCWlmIChteV9vdXRjaCA9PSBfbmNfb3V0Y2gpCisJICAgIF9uY19mbHVzaCgpOworICAgIH0KKworICAgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2ZsdXNoKHZvaWQpCit7CisgICAgKHZvaWQpIGZmbHVzaChOQ19PVVRQVVQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfb3V0Y2goaW50IGNoKQoreworICAgIENPVU5UX09VVENIQVJTKDEpOworCisgICAgaWYgKFNQICE9IDAKKwkmJiBTUC0+X2NsZWFudXApIHsKKwljaGFyIHRtcCA9IGNoOworCS8qCisJICogUE9TSVggc2F5cyB3cml0ZSgpIGlzIHNhZmUgaW4gYSBzaWduYWwgaGFuZGxlciwgYnV0IHRoZQorCSAqIGJ1ZmZlcmVkIEkvTyBpcyBub3QuCisJICovCisJd3JpdGUoZmlsZW5vKE5DX09VVFBVVCksICZ0bXAsIDEpOworICAgIH0gZWxzZSB7CisJcHV0YyhjaCwgTkNfT1VUUFVUKTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwdXRwKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICByZXR1cm4gdHB1dHMoc3RyaW5nLCAxLCBfbmNfb3V0Y2gpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit0cHV0cyhjb25zdCBjaGFyICpzdHJpbmcsIGludCBhZmZjbnQsIGludCAoKm91dGMpIChpbnQpKQoreworICAgIGJvb2wgYWx3YXlzX2RlbGF5OworICAgIGJvb2wgbm9ybWFsX2RlbGF5OworICAgIGludCBudW1iZXI7CisjaWYgQlNEX1RQVVRTCisgICAgaW50IHRyYWlscGFkOworI2VuZGlmIC8qIEJTRF9UUFVUUyAqLworCisjaWZkZWYgVFJBQ0UKKyAgICBjaGFyIGFkZHJidWZbMzJdOworCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVFBVVFMpKSB7CisJaWYgKG91dGMgPT0gX25jX291dGNoKQorCSAgICAodm9pZCkgc3RyY3B5KGFkZHJidWYsICJfbmNfb3V0Y2giKTsKKwllbHNlCisJICAgICh2b2lkKSBzcHJpbnRmKGFkZHJidWYsICIlcCIsIG91dGMpOworCWlmIChfbmNfdHB1dHNfdHJhY2UpIHsKKwkgICAgX3RyYWNlZigidHB1dHMoJXMgPSAlcywgJWQsICVzKSBjYWxsZWQiLCBfbmNfdHB1dHNfdHJhY2UsCisJCSAgICBfbmNfdmlzYnVmKHN0cmluZyksIGFmZmNudCwgYWRkcmJ1Zik7CisJfSBlbHNlIHsKKwkgICAgX3RyYWNlZigidHB1dHMoJXMsICVkLCAlcykgY2FsbGVkIiwgX25jX3Zpc2J1ZihzdHJpbmcpLCBhZmZjbnQsIGFkZHJidWYpOworCX0KKwlUUFVUU19UUkFDRShOVUxMKTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgaWYgKCFWQUxJRF9TVFJJTkcoc3RyaW5nKSkKKwlyZXR1cm4gRVJSOworCisgICAgaWYgKGN1cl90ZXJtID09IDApIHsKKwlhbHdheXNfZGVsYXkgPSBGQUxTRTsKKwlub3JtYWxfZGVsYXkgPSBUUlVFOworICAgIH0gZWxzZSB7CisJYWx3YXlzX2RlbGF5ID0gKHN0cmluZyA9PSBiZWxsKSB8fCAoc3RyaW5nID09IGZsYXNoX3NjcmVlbik7CisJbm9ybWFsX2RlbGF5ID0KKwkgICAgIXhvbl94b2ZmCisJICAgICYmIHBhZGRpbmdfYmF1ZF9yYXRlCisjaWYgTkNVUlNFU19OT19QQURESU5HCisJICAgICYmICFHZXROb1BhZGRpbmcoU1ApCisjZW5kaWYKKwkgICAgJiYgKF9uY19iYXVkcmF0ZShvc3BlZWQpID49IHBhZGRpbmdfYmF1ZF9yYXRlKTsKKyAgICB9CisKKyNpZiBCU0RfVFBVVFMKKyAgICAvKgorICAgICAqIFRoaXMgdWdseSBrbHVnZSBkZWFscyB3aXRoIHRoZSBmYWN0IHRoYXQgc29tZSBhbmNpZW50IEJTRCBwcm9ncmFtcworICAgICAqIChsaWtlIG5ldGhhY2spIGFjdHVhbGx5IGRvIHRoZSBsaWtlcyBvZiB0cHV0cygiNTAiKSB0byBnZXQgZGVsYXlzLgorICAgICAqLworICAgIHRyYWlscGFkID0gMDsKKyAgICBpZiAoaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkpIHsKKwl3aGlsZSAoaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkpIHsKKwkgICAgdHJhaWxwYWQgPSB0cmFpbHBhZCAqIDEwICsgKCpzdHJpbmcgLSAnMCcpOworCSAgICBzdHJpbmcrKzsKKwl9CisJdHJhaWxwYWQgKj0gMTA7CisJaWYgKCpzdHJpbmcgPT0gJy4nKSB7CisJICAgIHN0cmluZysrOworCSAgICBpZiAoaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkpIHsKKwkJdHJhaWxwYWQgKz0gKCpzdHJpbmcgLSAnMCcpOworCQlzdHJpbmcrKzsKKwkgICAgfQorCSAgICB3aGlsZSAoaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkpCisJCXN0cmluZysrOworCX0KKworCWlmICgqc3RyaW5nID09ICcqJykgeworCSAgICB0cmFpbHBhZCAqPSBhZmZjbnQ7CisJICAgIHN0cmluZysrOworCX0KKyAgICB9CisjZW5kaWYgLyogQlNEX1RQVVRTICovCisKKyAgICBteV9vdXRjaCA9IG91dGM7CQkvKiByZWRpcmVjdCBkZWxheV9vdXRwdXQoKSAqLworICAgIHdoaWxlICgqc3RyaW5nKSB7CisJaWYgKCpzdHJpbmcgIT0gJyQnKQorCSAgICAoKm91dGMpICgqc3RyaW5nKTsKKwllbHNlIHsKKwkgICAgc3RyaW5nKys7CisJICAgIGlmICgqc3RyaW5nICE9ICc8JykgeworCQkoKm91dGMpICgnJCcpOworCQlpZiAoKnN0cmluZykKKwkJICAgICgqb3V0YykgKCpzdHJpbmcpOworCSAgICB9IGVsc2UgeworCQlib29sIG1hbmRhdG9yeTsKKworCQlzdHJpbmcrKzsKKwkJaWYgKCghaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkgJiYgKnN0cmluZyAhPSAnLicpCisJCSAgICB8fCAhc3RyY2hyKHN0cmluZywgJz4nKSkgeworCQkgICAgKCpvdXRjKSAoJyQnKTsKKwkJICAgICgqb3V0YykgKCc8Jyk7CisJCSAgICBjb250aW51ZTsKKwkJfQorCisJCW51bWJlciA9IDA7CisJCXdoaWxlIChpc2RpZ2l0KFVDaGFyKCpzdHJpbmcpKSkgeworCQkgICAgbnVtYmVyID0gbnVtYmVyICogMTAgKyAoKnN0cmluZyAtICcwJyk7CisJCSAgICBzdHJpbmcrKzsKKwkJfQorCQludW1iZXIgKj0gMTA7CisJCWlmICgqc3RyaW5nID09ICcuJykgeworCQkgICAgc3RyaW5nKys7CisJCSAgICBpZiAoaXNkaWdpdChVQ2hhcigqc3RyaW5nKSkpIHsKKwkJCW51bWJlciArPSAoKnN0cmluZyAtICcwJyk7CisJCQlzdHJpbmcrKzsKKwkJICAgIH0KKwkJICAgIHdoaWxlIChpc2RpZ2l0KFVDaGFyKCpzdHJpbmcpKSkKKwkJCXN0cmluZysrOworCQl9CisKKwkJbWFuZGF0b3J5ID0gRkFMU0U7CisJCXdoaWxlICgqc3RyaW5nID09ICcqJyB8fCAqc3RyaW5nID09ICcvJykgeworCQkgICAgaWYgKCpzdHJpbmcgPT0gJyonKSB7CisJCQludW1iZXIgKj0gYWZmY250OworCQkJc3RyaW5nKys7CisJCSAgICB9IGVsc2UgewkvKiBpZiAoKnN0cmluZyA9PSAnLycpICovCisJCQltYW5kYXRvcnkgPSBUUlVFOworCQkJc3RyaW5nKys7CisJCSAgICB9CisJCX0KKworCQlpZiAobnVtYmVyID4gMAorCQkgICAgJiYgKGFsd2F5c19kZWxheQorCQkJfHwgbm9ybWFsX2RlbGF5CisJCQl8fCBtYW5kYXRvcnkpKQorCQkgICAgZGVsYXlfb3V0cHV0KG51bWJlciAvIDEwKTsKKworCSAgICB9CQkJLyogZW5kZWxzZSAoKnN0cmluZyA9PSAnPCcpICovCisJfQkJCS8qIGVuZGVsc2UgKCpzdHJpbmcgPT0gJyQnKSAqLworCisJaWYgKCpzdHJpbmcgPT0gJ1wwJykKKwkgICAgYnJlYWs7CisKKwlzdHJpbmcrKzsKKyAgICB9CisKKyNpZiBCU0RfVFBVVFMKKyAgICAvKgorICAgICAqIEVtaXQgYW55IEJTRC1zdHlsZSBwcmVmaXggcGFkZGluZyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIG5vdy4KKyAgICAgKi8KKyAgICBpZiAodHJhaWxwYWQgPiAwCisJJiYgKGFsd2F5c19kZWxheSB8fCBub3JtYWxfZGVsYXkpKQorCWRlbGF5X291dHB1dCh0cmFpbHBhZCAvIDEwKTsKKyNlbmRpZiAvKiBCU0RfVFBVVFMgKi8KKworICAgIG15X291dGNoID0gX25jX291dGNoOworICAgIHJldHVybiBPSzsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbGliX3R0eWZsYWdzLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90dHlmbGFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjM4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL2xpYl90dHlmbGFncy5jCkBAIC0wLDAgKzEsMjIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJCWRlZl9wcm9nX21vZGUoKQorICoJCWRlZl9zaGVsbF9tb2RlKCkKKyAqCQlyZXNldF9wcm9nX21vZGUoKQorICoJCXJlc2V0X3NoZWxsX21vZGUoKQorICoJCXNhdmV0dHkoKQorICoJCXJlc2V0dHkoKQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGN1cl90ZXJtICovCisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHR5ZmxhZ3MuYyx2IDEuMTggMjAwOC8wOC8wMyAyMjoxMDo0NCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfZ2V0X3R0eV9tb2RlKFRUWSAqIGJ1ZikKK3sKKyAgICBpbnQgcmVzdWx0ID0gT0s7CisKKyAgICBpZiAoYnVmID09IDApIHsKKwlyZXN1bHQgPSBFUlI7CisgICAgfSBlbHNlIHsKKwlpZiAoY3VyX3Rlcm0gPT0gMCkgeworCSAgICByZXN1bHQgPSBFUlI7CisJfSBlbHNlIHsKKwkgICAgZm9yICg7OykgeworCQlpZiAoR0VUX1RUWShjdXJfdGVybS0+RmlsZWRlcywgYnVmKSAhPSAwKSB7CisJCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsKKwkJICAgIHJlc3VsdCA9IEVSUjsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKworCWlmIChyZXN1bHQgPT0gRVJSKQorCSAgICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCisJVFIoVFJBQ0VfQklUUywgKCJfbmNfZ2V0X3R0eV9tb2RlKCVkKTogJXMiLAorCQkJY3VyX3Rlcm0gPyBjdXJfdGVybS0+RmlsZWRlcyA6IC0xLAorCQkJX25jX3RyYWNlX3R0eW1vZGUoYnVmKSkpOworICAgIH0KKyAgICByZXR1cm4gKHJlc3VsdCk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19zZXRfdHR5X21vZGUoVFRZICogYnVmKQoreworICAgIGludCByZXN1bHQgPSBPSzsKKworICAgIGlmIChidWYgPT0gMCkgeworCXJlc3VsdCA9IEVSUjsKKyAgICB9IGVsc2UgeworCWlmIChjdXJfdGVybSA9PSAwKSB7CisJICAgIHJlc3VsdCA9IEVSUjsKKwl9IGVsc2UgeworCSAgICBmb3IgKDs7KSB7CisJCWlmIChTRVRfVFRZKGN1cl90ZXJtLT5GaWxlZGVzLCBidWYpICE9IDApIHsKKwkJICAgIGlmIChlcnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOworCQkgICAgaWYgKChlcnJubyA9PSBFTk9UVFkpICYmIChTUCAhPSAwKSkKKwkJCVNQLT5fbm90dHkgPSBUUlVFOworCQkgICAgcmVzdWx0ID0gRVJSOworCQl9CisJCWJyZWFrOworCSAgICB9CisJfQorCVRSKFRSQUNFX0JJVFMsICgiX25jX3NldF90dHlfbW9kZSglZCk6ICVzIiwKKwkJCWN1cl90ZXJtID8gY3VyX3Rlcm0tPkZpbGVkZXMgOiAtMSwKKwkJCV9uY190cmFjZV90dHltb2RlKGJ1ZikpKTsKKyAgICB9CisgICAgcmV0dXJuIChyZXN1bHQpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitkZWZfc2hlbGxfbW9kZSh2b2lkKQoreworICAgIGludCByYyA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJkZWZfc2hlbGxfbW9kZSgpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJLyoKKwkgKiBJZiBYVEFCUyB3YXMgb24sIHJlbW92ZSB0aGUgdGFiIGFuZCBiYWNrdGFiIGNhcGFiaWxpdGllcy4KKwkgKi8KKwlpZiAoX25jX2dldF90dHlfbW9kZSgmY3VyX3Rlcm0tPk90dHliKSA9PSBPSykgeworI2lmZGVmIFRFUk1JT1MKKwkgICAgaWYgKGN1cl90ZXJtLT5PdHR5Yi5jX29mbGFnICYgT0ZMQUdTX1RBQlMpCisJCXRhYiA9IGJhY2tfdGFiID0gTlVMTDsKKyNlbHNlCisJICAgIGlmIChjdXJfdGVybS0+T3R0eWIuc2dfZmxhZ3MgJiBYVEFCUykKKwkJdGFiID0gYmFja190YWIgPSBOVUxMOworI2VuZGlmCisJICAgIHJjID0gT0s7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKHJjKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVmX3Byb2dfbW9kZSh2b2lkKQoreworICAgIGludCByYyA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJkZWZfcHJvZ19tb2RlKCkiKSkpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKwkvKgorCSAqIFR1cm4gb2ZmIHRoZSBYVEFCUyBiaXQgaW4gdGhlIHR0eSBzdHJ1Y3R1cmUgaWYgaXQgd2FzIG9uLgorCSAqLworCWlmIChfbmNfZ2V0X3R0eV9tb2RlKCZjdXJfdGVybS0+TnR0eWIpID09IE9LKSB7CisjaWZkZWYgVEVSTUlPUworCSAgICBjdXJfdGVybS0+TnR0eWIuY19vZmxhZyAmPSB+T0ZMQUdTX1RBQlM7CisjZWxzZQorCSAgICBjdXJfdGVybS0+TnR0eWIuc2dfZmxhZ3MgJj0gflhUQUJTOworI2VuZGlmCisJICAgIHJjID0gT0s7CisJfQorICAgIH0KKyAgICByZXR1cm5Db2RlKHJjKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorcmVzZXRfcHJvZ19tb2RlKHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoInJlc2V0X3Byb2dfbW9kZSgpIikpKTsKKworICAgIGlmIChjdXJfdGVybSAhPSAwKSB7CisJaWYgKF9uY19zZXRfdHR5X21vZGUoJmN1cl90ZXJtLT5OdHR5YikgPT0gT0spIHsKKwkgICAgaWYgKFNQKSB7CisJCWlmIChTUC0+X2tleXBhZF9vbikKKwkJICAgIF9uY19rZXlwYWQoU1AsIFRSVUUpOworCQlOQ19CVUZGRVJFRChUUlVFKTsKKwkgICAgfQorCSAgICByZXR1cm5Db2RlKE9LKTsKKwl9CisgICAgfQorICAgIHJldHVybkNvZGUoRVJSKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorcmVzZXRfc2hlbGxfbW9kZSh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJyZXNldF9zaGVsbF9tb2RlKCkiKSkpOworCisgICAgaWYgKGN1cl90ZXJtICE9IDApIHsKKwlpZiAoU1ApIHsKKwkgICAgX25jX2tleXBhZChTUCwgRkFMU0UpOworCSAgICBfbmNfZmx1c2goKTsKKwkgICAgTkNfQlVGRkVSRUQoRkFMU0UpOworCX0KKwlyZXR1cm5Db2RlKF9uY19zZXRfdHR5X21vZGUoJmN1cl90ZXJtLT5PdHR5YikpOworICAgIH0KKyAgICByZXR1cm5Db2RlKEVSUik7Cit9CisKK3N0YXRpYyBUVFkgKgorc2F2ZWRfdHR5KHZvaWQpCit7CisgICAgVFRZICpyZXN1bHQgPSAwOworCisgICAgaWYgKFNQICE9IDApIHsKKwlyZXN1bHQgPSAmKFNQLT5fc2F2ZWRfdHR5KTsKKyAgICB9IGVsc2UgeworCWlmIChfbmNfcHJlc2NyZWVuLnNhdmVkX3R0eSA9PSAwKSB7CisJICAgIF9uY19wcmVzY3JlZW4uc2F2ZWRfdHR5ID0gdHlwZUNhbGxvYyhUVFksIDEpOworCX0KKwlyZXN1bHQgPSBfbmNfcHJlc2NyZWVuLnNhdmVkX3R0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyoqCXNhdmV0dHkoKSAgYW5kICByZXNldHR5KCkKKyoqCisqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzYXZldHR5KHZvaWQpCit7CisgICAgVCgoVF9DQUxMRUQoInNhdmV0dHkoKSIpKSk7CisKKyAgICByZXR1cm5Db2RlKF9uY19nZXRfdHR5X21vZGUoc2F2ZWRfdHR5KCkpKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorcmVzZXR0eSh2b2lkKQoreworICAgIFQoKFRfQ0FMTEVEKCJyZXNldHR5KCkiKSkpOworCisgICAgcmV0dXJuQ29kZShfbmNfc2V0X3R0eV9tb2RlKHNhdmVkX3R0eSgpKSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL21ha2Vfa2V5cy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9tYWtlX2tleXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg0Zjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9tYWtlX2tleXMuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTctb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgcmVwbGFjZXMgYW4gYXdrIHNjcmlwdCB3aGljaCB0cmFuc2xhdGVkIGtleXMubGlzdCBpbnRvIGtleXMudHJpZXMgYnkKKyAqIG1ha2luZyB0aGUgb3V0cHV0IHNob3cgdGhlIGluZGljZXMgaW50byB0aGUgVEVSTVRZUEUgU3RyaW5ncyBhcnJheS4gIERvaW5nCisgKiBpdCB0aGF0IHdheSBsZXRzIHVzIGN1dCBkb3duIG9uIHRoZSBzaXplIG9mIHRoZSBpbml0X2tleXRyeSgpIGZ1bmN0aW9uLgorICovCisKKyNkZWZpbmUgVVNFX1RFUk1MSUIgMQorI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBtYWtlX2tleXMuYyx2IDEuMTQgMjAwOC8wOC8wMyAyMTo1NzoyMiB0b20gRXhwICQiKQorCisjaW5jbHVkZSA8bmFtZXMuYz4KKworI2RlZmluZSBVTktOT1dOIChTSVpFT0Yoc3RybmFtZXMpICsgU0laRU9GKHN0cmZuYW1lcykpCisKK3N0YXRpYyBzaXplX3QKK2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQoreworICAgIHNpemVfdCBuOworICAgIGJvb2wgZm91bmQgPSBGQUxTRTsKKyAgICBmb3IgKG4gPSAwOyBzdHJuYW1lc1tuXSAhPSAwOyBuKyspIHsKKwlpZiAoIXN0cmNtcChuYW1lLCBzdHJuYW1lc1tuXSkpIHsKKwkgICAgZm91bmQgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmICghZm91bmQpIHsKKwlmb3IgKG4gPSAwOyBzdHJmbmFtZXNbbl0gIT0gMDsgbisrKSB7CisJICAgIGlmICghc3RyY21wKG5hbWUsIHN0cmZuYW1lc1tuXSkpIHsKKwkJZm91bmQgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIGZvdW5kID8gbiA6IFVOS05PV047Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX2tleXMoRklMRSAqaWZwLCBGSUxFICpvZnApCit7CisgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKyAgICBjaGFyIGZyb21bMjU2XTsKKyAgICBjaGFyIHRvWzI1Nl07CisgICAgaW50IG1heGxlbiA9IDE2OworICAgIGludCBzY2FubmVkOworCisgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGlmcCkgIT0gMCkgeworCWlmICgqYnVmZmVyID09ICcjJykKKwkgICAgY29udGludWU7CisKKwl0b1tzaXplb2YodG8pIC0gMV0gPSAnXDAnOworCWZyb21bc2l6ZW9mKGZyb20pIC0gMV0gPSAnXDAnOworCisJc2Nhbm5lZCA9IHNzY2FuZihidWZmZXIsICIlMjU1cyAlMjU1cyIsIHRvLCBmcm9tKTsKKwlpZiAoc2Nhbm5lZCA9PSAyKSB7CisJICAgIGludCBjb2RlID0gbG9va3VwKGZyb20pOworCSAgICBpZiAoY29kZSA9PSBVTktOT1dOKQorCQljb250aW51ZTsKKwkgICAgaWYgKChpbnQpIHN0cmxlbihmcm9tKSA+IG1heGxlbikKKwkJbWF4bGVuID0gc3RybGVuKGZyb20pOworCSAgICBmcHJpbnRmKG9mcCwgIlx0eyAlNGQsICUtKi4qcyB9LFx0LyogJXMgKi9cbiIsCisJCSAgICBjb2RlLAorCQkgICAgbWF4bGVuLCBtYXhsZW4sCisJCSAgICB0bywKKwkJICAgIGZyb20pOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit3cml0ZV9saXN0KEZJTEUgKm9mcCwgY29uc3QgY2hhciAqKmxpc3QpCit7CisgICAgd2hpbGUgKCpsaXN0ICE9IDApCisJZnByaW50ZihvZnAsICIlc1xuIiwgKmxpc3QrKyk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhbXSA9CisgICAgeworCSIjaWZuZGVmIE5DVV9LRVlTX0giLAorCSIjZGVmaW5lIE5DVV9LRVlTX0ggMSIsCisJIiIsCisJIi8qIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IE1BS0VfS0VZUyAqLyIsCisJIiIsCisJIiNpZiBCUk9LRU5fTElOS0VSIiwKKwkic3RhdGljIiwKKwkiI2VuZGlmIiwKKwkiY29uc3Qgc3RydWN0IHRpbmZvX2ZrZXlzIF9uY190aW5mb19ma2V5c1tdID0geyIsCisJMAorICAgIH07CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnN1ZmZpeFtdID0KKyAgICB7CisJIlx0eyAwLCAwfSB9OyIsCisJIiIsCisJIiNlbmRpZiAvKiBOQ1VfS0VZU19IICovIiwKKwkwCisgICAgfTsKKworICAgIHdyaXRlX2xpc3Qoc3Rkb3V0LCBwcmVmaXgpOworICAgIGlmIChhcmdjID4gMSkgeworCWludCBuOworCWZvciAobiA9IDE7IG4gPCBhcmdjOyBuKyspIHsKKwkgICAgRklMRSAqZnAgPSBmb3Blbihhcmd2W25dLCAiciIpOworCSAgICBpZiAoZnAgIT0gMCkgeworCQltYWtlX2tleXMoZnAsIHN0ZG91dCk7CisJCWZjbG9zZShmcCk7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwltYWtlX2tleXMoc3RkaW4sIHN0ZG91dCk7CisgICAgfQorICAgIHdyaXRlX2xpc3Qoc3Rkb3V0LCBzdWZmaXgpOworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL25hbWVfbWF0Y2guYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vbmFtZV9tYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzY5MDEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL25hbWVfbWF0Y2guYwpAQCAtMCwwICsxLDExMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTktb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorI2luY2x1ZGUgPHRpYy5oPgorCitNT0RVTEVfSUQoIiRJZDogbmFtZV9tYXRjaC5jLHYgMS4xNyAyMDA4LzA4LzAzIDE5OjQ5OjMzIHRvbSBFeHAgJCIpCisKKy8qCisgKglfbmNfZmlyc3RfbmFtZShjaGFyICpuYW1lcykKKyAqCisgKglFeHRyYWN0IHRoZSBwcmltYXJ5IG5hbWUgZnJvbSBhIGNvbXBpbGVkIGVudHJ5LgorICovCisjZGVmaW5lIEZpcnN0TmFtZSBfbmNfZ2xvYmFscy5maXJzdF9uYW1lCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19maXJzdF9uYW1lKGNvbnN0IGNoYXIgKmNvbnN0IHNwKQorLyogZ2V0IHRoZSBmaXJzdCBuYW1lIGZyb20gdGhlIGdpdmVuIG5hbWUgbGlzdCAqLworeworICAgIHVuc2lnbmVkIG47CisKKyNpZiBOT19MRUFLUworICAgIGlmIChzcCA9PSAwKSB7CisJaWYgKEZpcnN0TmFtZSAhPSAwKQorCSAgICBGcmVlQW5kTnVsbChGaXJzdE5hbWUpOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworCWlmIChGaXJzdE5hbWUgPT0gMCkKKwkgICAgRmlyc3ROYW1lID0gdHlwZU1hbGxvYyhjaGFyLCBNQVhfTkFNRV9TSVpFICsgMSk7CisKKwlpZiAoRmlyc3ROYW1lICE9IDApIHsKKwkgICAgZm9yIChuID0gMDsgbiA8IE1BWF9OQU1FX1NJWkU7IG4rKykgeworCQlpZiAoKEZpcnN0TmFtZVtuXSA9IHNwW25dKSA9PSAnXDAnCisJCSAgICB8fCAoRmlyc3ROYW1lW25dID09ICd8JykpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBGaXJzdE5hbWVbbl0gPSAnXDAnOworCX0KKyAgICB9CisgICAgcmV0dXJuIChGaXJzdE5hbWUpOworfQorCisvKgorICoJaW50IF9uY19uYW1lX21hdGNoKG5hbWVsaXN0LCBuYW1lLCBkZWxpbSkKKyAqCisgKglJcyB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVkIGluIG5hbWVsaXN0PworICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19uYW1lX21hdGNoKGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVsc3QsIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIGNvbnN0IGNoYXIgKmNvbnN0IGRlbGltKQoreworICAgIGNvbnN0IGNoYXIgKnMsICpkLCAqdDsKKyAgICBpbnQgY29kZSwgZm91bmQ7CisKKyAgICBpZiAoKHMgPSBuYW1lbHN0KSAhPSAwKSB7CisJd2hpbGUgKCpzICE9ICdcMCcpIHsKKwkgICAgZm9yIChkID0gbmFtZTsgKmQgIT0gJ1wwJzsgZCsrKSB7CisJCWlmICgqcyAhPSAqZCkKKwkJICAgIGJyZWFrOworCQlzKys7CisJICAgIH0KKwkgICAgZm91bmQgPSBGQUxTRTsKKwkgICAgZm9yIChjb2RlID0gVFJVRTsgKnMgIT0gJ1wwJzsgY29kZSA9IEZBTFNFLCBzKyspIHsKKwkJZm9yICh0ID0gZGVsaW07ICp0ICE9ICdcMCc7IHQrKykgeworCQkgICAgaWYgKCpzID09ICp0KSB7CisJCQlmb3VuZCA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCQlpZiAoZm91bmQpCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBpZiAoY29kZSAmJiAqZCA9PSAnXDAnKQorCQlyZXR1cm4gY29kZTsKKwkgICAgaWYgKCpzKysgPT0gMCkKKwkJYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3BhcnNlX2VudHJ5LmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3BhcnNlX2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3YTVmNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vcGFyc2VfZW50cnkuYwpAQCAtMCwwICsxLDk5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJcGFyc2VfZW50cnkuYyAtLSBjb21waWxlIG9uZSB0ZXJtaW5mbyBvciB0ZXJtY2FwIGVudHJ5CisgKgorICoJR2V0IGFuIGV4YWN0IGluLWNvcmUgcmVwcmVzZW50YXRpb24gb2YgYW4gZW50cnkuICBEb24ndAorICoJdHJ5IHRvIHJlc29sdmUgdXNlIG9yIHRjIGNhcGFiaWxpdGllcywgdGhhdCBpcyBzb21lb25lCisgKgllbHNlJ3Mgam9iLiAgRGVwZW5kcyBvbiB0aGUgbGV4aWNhbCBhbmFseXplciB0byBnZXQgdG9rZW5zCisgKglmcm9tIHRoZSBpbnB1dCBzdHJlYW0uCisgKi8KKworI2RlZmluZSBfX0lOVEVSTkFMX0NBUFNfVklTSUJMRQorI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpYy5oPgorI2luY2x1ZGUgPHRlcm1fZW50cnkuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHBhcnNlX2VudHJ5LmMsdiAxLjY5IDIwMDgvMDgvMTYgMjE6NTI6MDMgdG9tIEV4cCAkIikKKworI2lmZGVmIExJTlQKK3N0YXRpYyBzaG9ydCBjb25zdCBwYXJhbWV0cml6ZWRbXSA9Cit7MH07CisjZWxzZQorI2luY2x1ZGUgPHBhcmFtZXRyaXplZC5oPgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHBvc3Rwcm9jZXNzX3Rlcm1jYXAoVEVSTVRZUEUgKiwgYm9vbCk7CitzdGF0aWMgdm9pZCBwb3N0cHJvY2Vzc190ZXJtaW5mbyhURVJNVFlQRSAqKTsKK3N0YXRpYyBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqbG9va3VwX2Z1bGxuYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCisjaWYgTkNVUlNFU19YTkFNRVMKKworc3RhdGljIHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICoKK19uY19leHRlbmRfbmFtZXMoRU5UUlkgKiBlbnRyeXAsIGNoYXIgKm5hbWUsIGludCB0b2tlbl90eXBlKQoreworICAgIHN0YXRpYyBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSB0ZW1wOworICAgIFRFUk1UWVBFICp0cCA9ICYoZW50cnlwLT50dGVybSk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBhY3R1YWw7CisgICAgdW5zaWduZWQgdGluZGV4OworICAgIHVuc2lnbmVkIGZpcnN0LCBsYXN0LCBuOworICAgIGJvb2wgZm91bmQ7CisKKyAgICBzd2l0Y2ggKHRva2VuX3R5cGUpIHsKKyAgICBjYXNlIEJPT0xFQU46CisJZmlyc3QgPSAwOworCWxhc3QgPSB0cC0+ZXh0X0Jvb2xlYW5zOworCW9mZnNldCA9IHRwLT5leHRfQm9vbGVhbnM7CisJdGluZGV4ID0gdHAtPm51bV9Cb29sZWFuczsKKwlicmVhazsKKyAgICBjYXNlIE5VTUJFUjoKKwlmaXJzdCA9IHRwLT5leHRfQm9vbGVhbnM7CisJbGFzdCA9IHRwLT5leHRfTnVtYmVycyArIGZpcnN0OworCW9mZnNldCA9IHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnM7CisJdGluZGV4ID0gdHAtPm51bV9OdW1iZXJzOworCWJyZWFrOworICAgIGNhc2UgU1RSSU5HOgorCWZpcnN0ID0gdHAtPmV4dF9Cb29sZWFucyArIHRwLT5leHRfTnVtYmVyczsKKwlsYXN0ID0gdHAtPmV4dF9TdHJpbmdzICsgZmlyc3Q7CisJb2Zmc2V0ID0gdHAtPmV4dF9Cb29sZWFucyArIHRwLT5leHRfTnVtYmVycyArIHRwLT5leHRfU3RyaW5nczsKKwl0aW5kZXggPSB0cC0+bnVtX1N0cmluZ3M7CisJYnJlYWs7CisgICAgY2FzZSBDQU5DRUw6CisJYWN0dWFsID0gTlVNX0VYVF9OQU1FUyh0cCk7CisJZm9yIChuID0gMDsgbiA8IGFjdHVhbDsgbisrKSB7CisJICAgIGlmICghc3RyY21wKG5hbWUsIHRwLT5leHRfTmFtZXNbbl0pKSB7CisJCWlmIChuID4gKHVuc2lnbmVkKSAodHAtPmV4dF9Cb29sZWFucyArIHRwLT5leHRfTnVtYmVycykpIHsKKwkJICAgIHRva2VuX3R5cGUgPSBTVFJJTkc7CisJCX0gZWxzZSBpZiAobiA+IHRwLT5leHRfQm9vbGVhbnMpIHsKKwkJICAgIHRva2VuX3R5cGUgPSBOVU1CRVI7CisJCX0gZWxzZSB7CisJCSAgICB0b2tlbl90eXBlID0gQk9PTEVBTjsKKwkJfQorCQlyZXR1cm4gX25jX2V4dGVuZF9uYW1lcyhlbnRyeXAsIG5hbWUsIHRva2VuX3R5cGUpOworCSAgICB9CisJfQorCS8qIFdlbGwsIHdlIGFyZSBnaXZlbiBhIGNhbmNlbCBmb3IgYSBuYW1lIHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplICovCisJcmV0dXJuIF9uY19leHRlbmRfbmFtZXMoZW50cnlwLCBuYW1lLCBTVFJJTkcpOworICAgIGRlZmF1bHQ6CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQWRqdXN0IHRoZSAnb2Zmc2V0JyAoaW5zZXJ0aW9uLXBvaW50KSB0byBrZWVwIHRoZSBsaXN0cyBvZiBleHRlbmRlZAorICAgICAqIG5hbWVzIHNvcnRlZC4KKyAgICAgKi8KKyAgICBmb3IgKG4gPSBmaXJzdCwgZm91bmQgPSBGQUxTRTsgbiA8IGxhc3Q7IG4rKykgeworCWludCBjbXAgPSBzdHJjbXAodHAtPmV4dF9OYW1lc1tuXSwgbmFtZSk7CisJaWYgKGNtcCA9PSAwKQorCSAgICBmb3VuZCA9IFRSVUU7CisJaWYgKGNtcCA+PSAwKSB7CisJICAgIG9mZnNldCA9IG47CisJICAgIHRpbmRleCA9IG4gLSBmaXJzdDsKKwkgICAgc3dpdGNoICh0b2tlbl90eXBlKSB7CisJICAgIGNhc2UgQk9PTEVBTjoKKwkJdGluZGV4ICs9IEJPT0xDT1VOVDsKKwkJYnJlYWs7CisJICAgIGNhc2UgTlVNQkVSOgorCQl0aW5kZXggKz0gTlVNQ09VTlQ7CisJCWJyZWFrOworCSAgICBjYXNlIFNUUklORzoKKwkJdGluZGV4ICs9IFNUUkNPVU5UOworCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmICghZm91bmQpIHsKKwlzd2l0Y2ggKHRva2VuX3R5cGUpIHsKKwljYXNlIEJPT0xFQU46CisJICAgIHRwLT5leHRfQm9vbGVhbnMgKz0gMTsKKwkgICAgdHAtPm51bV9Cb29sZWFucyArPSAxOworCSAgICB0cC0+Qm9vbGVhbnMgPSB0eXBlUmVhbGxvYyhOQ1VSU0VTX1NCT09MLCB0cC0+bnVtX0Jvb2xlYW5zLCB0cC0+Qm9vbGVhbnMpOworCSAgICBmb3IgKGxhc3QgPSB0cC0+bnVtX0Jvb2xlYW5zIC0gMTsgbGFzdCA+IHRpbmRleDsgbGFzdC0tKQorCQl0cC0+Qm9vbGVhbnNbbGFzdF0gPSB0cC0+Qm9vbGVhbnNbbGFzdCAtIDFdOworCSAgICBicmVhazsKKwljYXNlIE5VTUJFUjoKKwkgICAgdHAtPmV4dF9OdW1iZXJzICs9IDE7CisJICAgIHRwLT5udW1fTnVtYmVycyArPSAxOworCSAgICB0cC0+TnVtYmVycyA9IHR5cGVSZWFsbG9jKHNob3J0LCB0cC0+bnVtX051bWJlcnMsIHRwLT5OdW1iZXJzKTsKKwkgICAgZm9yIChsYXN0ID0gdHAtPm51bV9OdW1iZXJzIC0gMTsgbGFzdCA+IHRpbmRleDsgbGFzdC0tKQorCQl0cC0+TnVtYmVyc1tsYXN0XSA9IHRwLT5OdW1iZXJzW2xhc3QgLSAxXTsKKwkgICAgYnJlYWs7CisJY2FzZSBTVFJJTkc6CisJICAgIHRwLT5leHRfU3RyaW5ncyArPSAxOworCSAgICB0cC0+bnVtX1N0cmluZ3MgKz0gMTsKKwkgICAgdHAtPlN0cmluZ3MgPSB0eXBlUmVhbGxvYyhjaGFyICosIHRwLT5udW1fU3RyaW5ncywgdHAtPlN0cmluZ3MpOworCSAgICBmb3IgKGxhc3QgPSB0cC0+bnVtX1N0cmluZ3MgLSAxOyBsYXN0ID4gdGluZGV4OyBsYXN0LS0pCisJCXRwLT5TdHJpbmdzW2xhc3RdID0gdHAtPlN0cmluZ3NbbGFzdCAtIDFdOworCSAgICBicmVhazsKKwl9CisJYWN0dWFsID0gTlVNX0VYVF9OQU1FUyh0cCk7CisJdHAtPmV4dF9OYW1lcyA9IHR5cGVSZWFsbG9jKGNoYXIgKiwgYWN0dWFsLCB0cC0+ZXh0X05hbWVzKTsKKwl3aGlsZSAoLS1hY3R1YWwgPiBvZmZzZXQpCisJICAgIHRwLT5leHRfTmFtZXNbYWN0dWFsXSA9IHRwLT5leHRfTmFtZXNbYWN0dWFsIC0gMV07CisJdHAtPmV4dF9OYW1lc1tvZmZzZXRdID0gX25jX3NhdmVfc3RyKG5hbWUpOworICAgIH0KKworICAgIHRlbXAubnRlX25hbWUgPSB0cC0+ZXh0X05hbWVzW29mZnNldF07CisgICAgdGVtcC5udGVfdHlwZSA9IHRva2VuX3R5cGU7CisgICAgdGVtcC5udGVfaW5kZXggPSB0aW5kZXg7CisgICAgdGVtcC5udGVfbGluayA9IC0xOworCisgICAgcmV0dXJuICZ0ZW1wOworfQorI2VuZGlmIC8qIE5DVVJTRVNfWE5BTUVTICovCisKKy8qCisgKglpbnQKKyAqCV9uY19wYXJzZV9lbnRyeShlbnRyeSwgbGl0ZXJhbCwgc2lsZW50KQorICoKKyAqCUNvbXBpbGUgb25lIGVudHJ5LiAgRG9lc24ndCB0cnkgdG8gcmVzb2x2ZSB1c2Ugb3IgdGMgY2FwYWJpbGl0aWVzLgorICoKKyAqCWZvdW5kLWZvcndhcmQtdXNlID0gRkFMU0UKKyAqCXJlLWluaXRpYWxpc2UgaW50ZXJuYWwgYXJyYXlzCisgKglnZXRfdG9rZW4oKTsKKyAqCWlmIHRoZSB0b2tlbiB3YXMgbm90IGEgbmFtZSBpbiBjb2x1bW4gMSwgY29tcGxhaW4gYW5kIGRpZQorICoJc2F2ZSBuYW1lcyBpbiBlbnRyeSdzIHN0cmluZyB0YWJsZQorICoJd2hpbGUgKGdldF90b2tlbigpIGlzIG5vdCBFT0YgYW5kIG5vdCBOQU1FUykKKyAqCSAgICAgICAgY2hlY2sgZm9yIGV4aXN0ZW5jZSBhbmQgdHlwZS1jb3JyZWN0bmVzcworICoJICAgICAgICBlbnRlciBjYXAgaW50byBzdHJ1Y3R1cmUKKyAqCSAgICAgICAgaWYgU1RSSU5HCisgKgkgICAgICAgICAgICBzYXZlIHN0cmluZyBpbiBlbnRyeSdzIHN0cmluZyB0YWJsZQorICoJcHVzaCBiYWNrIHRva2VuCisgKi8KKworI2RlZmluZSBCQURfVENfVVNBR0UgaWYgKCFiYWRfdGNfdXNhZ2UpIFwKKyAJeyBiYWRfdGNfdXNhZ2UgPSBUUlVFOyBcCisJIF9uY193YXJuaW5nKCJMZWdhY3kgdGVybWNhcCBhbGxvd3Mgb25seSBhIHRyYWlsaW5nIHRjPSBjbGF1c2UiKTsgfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfcGFyc2VfZW50cnkoc3RydWN0IGVudHJ5ICplbnRyeXAsIGludCBsaXRlcmFsLCBib29sIHNpbGVudCkKK3sKKyAgICBpbnQgdG9rZW5fdHlwZTsKKyAgICBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqZW50cnlfcHRyOworICAgIGNoYXIgKnB0ciwgKmJhc2U7CisgICAgYm9vbCBiYWRfdGNfdXNhZ2UgPSBGQUxTRTsKKworICAgIHRva2VuX3R5cGUgPSBfbmNfZ2V0X3Rva2VuKHNpbGVudCk7CisKKyAgICBpZiAodG9rZW5fdHlwZSA9PSBFT0YpCisJcmV0dXJuIChFT0YpOworICAgIGlmICh0b2tlbl90eXBlICE9IE5BTUVTKQorCV9uY19lcnJfYWJvcnQoIkVudHJ5IGRvZXMgbm90IHN0YXJ0IHdpdGggdGVybWluYWwgbmFtZXMgaW4gY29sdW1uIG9uZSIpOworCisgICAgX25jX2luaXRfZW50cnkoJmVudHJ5cC0+dHRlcm0pOworCisgICAgZW50cnlwLT5jc3RhcnQgPSBfbmNfY29tbWVudF9zdGFydDsKKyAgICBlbnRyeXAtPmNlbmQgPSBfbmNfY29tbWVudF9lbmQ7CisgICAgZW50cnlwLT5zdGFydGxpbmUgPSBfbmNfc3RhcnRfbGluZTsKKyAgICBERUJVRygyLCAoIkNvbW1lbnQgcmFuZ2UgaXMgJWxkIHRvICVsZCIsIGVudHJ5cC0+Y3N0YXJ0LCBlbnRyeXAtPmNlbmQpKTsKKworICAgIC8qCisgICAgICogU3RyaXAgb2ZmIHRoZSAyLWNoYXJhY3RlciB0ZXJtY2FwIG5hbWUsIGlmIHByZXNlbnQuICBPcmlnaW5hbGx5IHRlcm1jYXAKKyAgICAgKiB1c2VkIHRoYXQgYXMgYW4gaW5kZXhpbmcgYWlkLiAgV2UgY2FuIHJldGFpbiAyLWNoYXJhY3RlciB0ZXJtaW5mbyBuYW1lcywKKyAgICAgKiBidXQgbm90ZSB0aGF0IHRoZXkgd291bGQgYmUgbG9zdCBpZiB3ZSB0cmFuc2xhdGUgdG8vZnJvbSB0ZXJtY2FwLiAgVGhpcworICAgICAqIGZlYXR1cmUgaXMgc3VwcG9zZWRseSBvYnNvbGV0ZSBzaW5jZSAibmV3ZXIiIEJTRCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90CisgICAgICogdXNlIGl0OyBob3dldmVyIG91ciByZWZlcmVuY2UgZm9yIHRoaXMgZmVhdHVyZSBpcyBTdW5PUyA0LngsIHdoaWNoCisgICAgICogaW1wbGVtZW50ZWQgaXQuICBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyB0ZXJtaW5hbCB0eXBlIHdhcyBuZXZlciB0aGUKKyAgICAgKiAyLWNoYXJhY3RlciBuYW1lLCBidXQgd2FzIGluc3RlYWQgdGhlIGZpcnN0IGFsaWFzIGFmdGVyIHRoYXQuCisgICAgICovCisgICAgcHRyID0gX25jX2N1cnJfdG9rZW4udGtfbmFtZTsKKyAgICBpZiAoX25jX3N5bnRheCA9PSBTWU5fVEVSTUNBUAorI2lmIE5DVVJTRVNfWE5BTUVTCisJJiYgIV9uY191c2VyX2RlZmluYWJsZQorI2VuZGlmCisJKSB7CisJaWYgKHB0clsyXSA9PSAnfCcpIHsKKwkgICAgcHRyICs9IDM7CisJICAgIF9uY19jdXJyX3Rva2VuLnRrX25hbWVbMl0gPSAnXDAnOworCX0KKyAgICB9CisKKyAgICBlbnRyeXAtPnR0ZXJtLnN0cl90YWJsZSA9IGVudHJ5cC0+dHRlcm0udGVybV9uYW1lcyA9IF9uY19zYXZlX3N0cihwdHIpOworCisgICAgaWYgKGVudHJ5cC0+dHRlcm0uc3RyX3RhYmxlID09IDApCisJcmV0dXJuIChFUlIpOworCisgICAgREVCVUcoMSwgKCJTdGFydGluZyAnJXMnIiwgcHRyKSk7CisKKyAgICAvKgorICAgICAqIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb25lLXRva2VuIGxvb2thaGVhZCBpbiB0aGUgcGFyc2UgbG9vcAorICAgICAqIHJlc3VsdHMgaW4gdGhlIHRlcm1pbmFsIHR5cGUgZ2V0dGluZyBwcmVtYXR1cmVseSBzZXQgdG8gY29ycmVzcG9uZAorICAgICAqIHRvIHRoYXQgb2YgdGhlIG5leHQgZW50cnkuCisgICAgICovCisgICAgX25jX3NldF90eXBlKF9uY19maXJzdF9uYW1lKGVudHJ5cC0+dHRlcm0udGVybV9uYW1lcykpOworCisgICAgLyogY2hlY2sgZm9yIG92ZXJseS1sb25nIG5hbWVzIGFuZCBhbGlhc2VzICovCisgICAgZm9yIChiYXNlID0gZW50cnlwLT50dGVybS50ZXJtX25hbWVzOyAocHRyID0gc3RyY2hyKGJhc2UsICd8JykpICE9IDA7CisJIGJhc2UgPSBwdHIgKyAxKSB7CisJaWYgKHB0ciAtIGJhc2UgPiBNQVhfQUxJQVMpIHsKKwkgICAgX25jX3dhcm5pbmcoIiVzIGAlLipzJyBtYXkgYmUgdG9vIGxvbmciLAorCQkJKGJhc2UgPT0gZW50cnlwLT50dGVybS50ZXJtX25hbWVzKQorCQkJPyAicHJpbWFyeSBuYW1lIgorCQkJOiAiYWxpYXMiLAorCQkJKGludCkgKHB0ciAtIGJhc2UpLCBiYXNlKTsKKwl9CisgICAgfQorCisgICAgZW50cnlwLT5udXNlcyA9IDA7CisKKyAgICBmb3IgKHRva2VuX3R5cGUgPSBfbmNfZ2V0X3Rva2VuKHNpbGVudCk7CisJIHRva2VuX3R5cGUgIT0gRU9GICYmIHRva2VuX3R5cGUgIT0gTkFNRVM7CisJIHRva2VuX3R5cGUgPSBfbmNfZ2V0X3Rva2VuKHNpbGVudCkpIHsKKwlib29sIGlzX3VzZSA9IChzdHJjbXAoX25jX2N1cnJfdG9rZW4udGtfbmFtZSwgInVzZSIpID09IDApOworCWJvb2wgaXNfdGMgPSAhaXNfdXNlICYmIChzdHJjbXAoX25jX2N1cnJfdG9rZW4udGtfbmFtZSwgInRjIikgPT0gMCk7CisJaWYgKGlzX3VzZSB8fCBpc190YykgeworCSAgICBlbnRyeXAtPnVzZXNbZW50cnlwLT5udXNlc10ubmFtZSA9IF9uY19zYXZlX3N0cihfbmNfY3Vycl90b2tlbi50a192YWxzdHJpbmcpOworCSAgICBlbnRyeXAtPnVzZXNbZW50cnlwLT5udXNlc10ubGluZSA9IF9uY19jdXJyX2xpbmU7CisJICAgIGVudHJ5cC0+bnVzZXMrKzsKKwkgICAgaWYgKGVudHJ5cC0+bnVzZXMgPiAxICYmIGlzX3RjKSB7CisJCUJBRF9UQ19VU0FHRQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgLyogbm9ybWFsIHRva2VuIGxvb2t1cCAqLworCSAgICBlbnRyeV9wdHIgPSBfbmNfZmluZF9lbnRyeShfbmNfY3Vycl90b2tlbi50a19uYW1lLAorCQkJCSAgICAgICBfbmNfZ2V0X2hhc2hfdGFibGUoX25jX3N5bnRheCkpOworCisJICAgIC8qCisJICAgICAqIE91ciBrbHVnZSB0byBoYW5kbGUgYWxpYXNpbmcuICBUaGUgcmVhc29uIGl0J3MgZG9uZQorCSAgICAgKiB0aGlzIHVnbHkgd2F5LCB3aXRoIGEgbGluZWFyIHNlYXJjaCwgaXMgc28gdGhlIGhhc2hpbmcKKwkgICAgICogbWFjaGluZXJ5IGRvZXNuJ3QgaGF2ZSB0byBiZSBtYWRlIHJlYWxseSBjb21wbGljYXRlZAorCSAgICAgKiAoYWxzbyB3ZSBnZXQgYmV0dGVyIHdhcm5pbmdzIHRoaXMgd2F5KS4gIE5vIHBvaW50IGluCisJICAgICAqIG1ha2luZyB0aGlzIGNhc2UgZmFzdCwgYWxpYXNlZCBjYXBzIGFyZW4ndCBjb21tb24gbm93CisJICAgICAqIGFuZCB3aWxsIGdldCByYXJlci4KKwkgICAgICovCisJICAgIGlmIChlbnRyeV9wdHIgPT0gTk9URk9VTkQpIHsKKwkJY29uc3Qgc3RydWN0IGFsaWFzICphcDsKKworCQlpZiAoX25jX3N5bnRheCA9PSBTWU5fVEVSTUNBUCkgeworCQkgICAgaWYgKGVudHJ5cC0+bnVzZXMgIT0gMCkgeworCQkJQkFEX1RDX1VTQUdFCisJCSAgICB9CisJCSAgICBmb3IgKGFwID0gX25jX2dldF9hbGlhc190YWJsZShUUlVFKTsgYXAtPmZyb207IGFwKyspCisJCQlpZiAoc3RyY21wKGFwLT5mcm9tLCBfbmNfY3Vycl90b2tlbi50a19uYW1lKSA9PSAwKSB7CisJCQkgICAgaWYgKGFwLT50byA9PSAoY2hhciAqKSAwKSB7CisJCQkJX25jX3dhcm5pbmcoIiVzICglcyB0ZXJtY2FwIGV4dGVuc2lvbikgaWdub3JlZCIsCisJCQkJCSAgICBhcC0+ZnJvbSwgYXAtPnNvdXJjZSk7CisJCQkJZ290byBuZXh0dG9rOworCQkJICAgIH0KKworCQkJICAgIGVudHJ5X3B0ciA9IF9uY19maW5kX2VudHJ5KGFwLT50bywKKwkJCQkJCSAgICAgICBfbmNfZ2V0X2hhc2hfdGFibGUoVFJVRSkpOworCQkJICAgIGlmIChlbnRyeV9wdHIgJiYgIXNpbGVudCkKKwkJCQlfbmNfd2FybmluZygiJXMgKCVzIHRlcm1jYXAgZXh0ZW5zaW9uKSBhbGlhc2VkIHRvICVzIiwKKwkJCQkJICAgIGFwLT5mcm9tLCBhcC0+c291cmNlLCBhcC0+dG8pOworCQkJICAgIGJyZWFrOworCQkJfQorCQl9IGVsc2UgewkvKiBpZiAoX25jX3N5bnRheCA9PSBTWU5fVEVSTUlORk8pICovCisJCSAgICBmb3IgKGFwID0gX25jX2dldF9hbGlhc190YWJsZShGQUxTRSk7IGFwLT5mcm9tOyBhcCsrKQorCQkJaWYgKHN0cmNtcChhcC0+ZnJvbSwgX25jX2N1cnJfdG9rZW4udGtfbmFtZSkgPT0gMCkgeworCQkJICAgIGlmIChhcC0+dG8gPT0gKGNoYXIgKikgMCkgeworCQkJCV9uY193YXJuaW5nKCIlcyAoJXMgdGVybWluZm8gZXh0ZW5zaW9uKSBpZ25vcmVkIiwKKwkJCQkJICAgIGFwLT5mcm9tLCBhcC0+c291cmNlKTsKKwkJCQlnb3RvIG5leHR0b2s7CisJCQkgICAgfQorCisJCQkgICAgZW50cnlfcHRyID0gX25jX2ZpbmRfZW50cnkoYXAtPnRvLAorCQkJCQkJICAgICAgIF9uY19nZXRfaGFzaF90YWJsZShGQUxTRSkpOworCQkJICAgIGlmIChlbnRyeV9wdHIgJiYgIXNpbGVudCkKKwkJCQlfbmNfd2FybmluZygiJXMgKCVzIHRlcm1pbmZvIGV4dGVuc2lvbikgYWxpYXNlZCB0byAlcyIsCisJCQkJCSAgICBhcC0+ZnJvbSwgYXAtPnNvdXJjZSwgYXAtPnRvKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKworCQkgICAgaWYgKGVudHJ5X3B0ciA9PSBOT1RGT1VORCkgeworCQkJZW50cnlfcHRyID0gbG9va3VwX2Z1bGxuYW1lKF9uY19jdXJyX3Rva2VuLnRrX25hbWUpOworCQkgICAgfQorCQl9CisJICAgIH0KKyNpZiBOQ1VSU0VTX1hOQU1FUworCSAgICAvKgorCSAgICAgKiBJZiB3ZSBoYXZlIGV4dGVuZGVkLW5hbWVzIGFjdGl2ZSwgd2Ugd2lsbCBhdXRvbWF0aWNhbGx5CisJICAgICAqIGRlZmluZSBhIG5hbWUgYmFzZWQgb24gaXRzIGNvbnRleHQuCisJICAgICAqLworCSAgICBpZiAoZW50cnlfcHRyID09IE5PVEZPVU5ECisJCSYmIF9uY191c2VyX2RlZmluYWJsZQorCQkmJiAoZW50cnlfcHRyID0gX25jX2V4dGVuZF9uYW1lcyhlbnRyeXAsCisJCQkJCQkgX25jX2N1cnJfdG9rZW4udGtfbmFtZSwKKwkJCQkJCSB0b2tlbl90eXBlKSkgIT0gMCkgeworCQlpZiAoX25jX3RyYWNpbmcgPj0gREVCVUdfTEVWRUwoMSkpCisJCSAgICBfbmNfd2FybmluZygiZXh0ZW5kZWQgY2FwYWJpbGl0eSAnJXMnIiwgX25jX2N1cnJfdG9rZW4udGtfbmFtZSk7CisJICAgIH0KKyNlbmRpZiAvKiBOQ1VSU0VTX1hOQU1FUyAqLworCisJICAgIC8qIGNhbid0IGZpbmQgdGhpcyBjYXAgbmFtZSwgbm90IGV2ZW4gYXMgYW4gYWxpYXMgKi8KKwkgICAgaWYgKGVudHJ5X3B0ciA9PSBOT1RGT1VORCkgeworCQlpZiAoIXNpbGVudCkKKwkJICAgIF9uY193YXJuaW5nKCJ1bmtub3duIGNhcGFiaWxpdHkgJyVzJyIsCisJCQkJX25jX2N1cnJfdG9rZW4udGtfbmFtZSk7CisJCWNvbnRpbnVlOworCSAgICB9CisKKwkgICAgLyogZGVhbCB3aXRoIGJhZCB0eXBlL3ZhbHVlIGNvbWJpbmF0aW9ucy4gKi8KKwkgICAgaWYgKHRva2VuX3R5cGUgIT0gQ0FOQ0VMICYmIGVudHJ5X3B0ci0+bnRlX3R5cGUgIT0gdG9rZW5fdHlwZSkgeworCQkvKgorCQkgKiBOYXN0eSBzcGVjaWFsIGNhc2VzIGhlcmUgaGFuZGxlIHNpdHVhdGlvbnMgaW4gd2hpY2ggdHlwZQorCQkgKiBpbmZvcm1hdGlvbiBjYW4gcmVzb2x2ZSBuYW1lIGNsYXNoZXMuICBOb3JtYWwgbG9va3VwCisJCSAqIGZpbmRzIHRoZSBsYXN0IGluc3RhbmNlIGluIHRoZSBjYXBhYmlsaXR5IHRhYmxlIG9mIGEKKwkJICogZ2l2ZW4gbmFtZSwgcmVnYXJkbGVzcyBvZiB0eXBlLiAgZmluZF90eXBlX2VudHJ5IGxvb2tzCisJCSAqIGZvciBhIGZpcnN0IG1hdGNoaW5nIGluc3RhbmNlIHdpdGggZ2l2ZW4gdHlwZS4gIFNvIGFzCisJCSAqIGxvbmcgYXMgYWxsIGFtYmlndW91cyBuYW1lcyBvY2N1ciBpbiBwYWlycyBvZiBkaXN0aW5jdAorCQkgKiB0eXBlLCB0aGlzIHdpbGwgZG8gdGhlIGpvYi4KKwkJICovCisKKwkJaWYgKHRva2VuX3R5cGUgPT0gTlVNQkVSCisJCSAgICAmJiAhc3RyY21wKCJtYSIsIF9uY19jdXJyX3Rva2VuLnRrX25hbWUpKSB7CisJCSAgICAvKiB0ZWxsIG1heF9hdHRyaWJ1dGVzIGZyb20gYXJyb3dfa2V5X21hcCAqLworCQkgICAgZW50cnlfcHRyID0gX25jX2ZpbmRfdHlwZV9lbnRyeSgibWEiLCBOVU1CRVIsCisJCQkJCQkgICAgX25jX2dldF90YWJsZShfbmNfc3ludGF4CisJCQkJCQkJCSAgIT0gMCkpOworCQkgICAgYXNzZXJ0KGVudHJ5X3B0ciAhPSAwKTsKKworCQl9IGVsc2UgaWYgKHRva2VuX3R5cGUgPT0gU1RSSU5HCisJCQkgICAmJiAhc3RyY21wKCJNVCIsIF9uY19jdXJyX3Rva2VuLnRrX25hbWUpKSB7CisJCSAgICAvKiBtYXAgdGVybWluZm8ncyBzdHJpbmcgTVQgdG8gTVQgKi8KKwkJICAgIGVudHJ5X3B0ciA9IF9uY19maW5kX3R5cGVfZW50cnkoIk1UIiwgU1RSSU5HLAorCQkJCQkJICAgIF9uY19nZXRfdGFibGUoX25jX3N5bnRheAorCQkJCQkJCQkgICE9IDApKTsKKwkJICAgIGFzc2VydChlbnRyeV9wdHIgIT0gMCk7CisKKwkJfSBlbHNlIGlmICh0b2tlbl90eXBlID09IEJPT0xFQU4KKwkJCSAgICYmIGVudHJ5X3B0ci0+bnRlX3R5cGUgPT0gU1RSSU5HKSB7CisJCSAgICAvKiB0cmVhdCBzdHJpbmdzIHdpdGhvdXQgZm9sbG93aW5nICI9IiBhcyBlbXB0eSBzdHJpbmdzICovCisJCSAgICB0b2tlbl90eXBlID0gU1RSSU5HOworCQl9IGVsc2UgeworCQkgICAgLyogd2UgY291bGRuJ3QgcmVjb3Zlcjsgc2tpcCB0aGlzIHRva2VuICovCisJCSAgICBpZiAoIXNpbGVudCkgeworCQkJY29uc3QgY2hhciAqdHlwZV9uYW1lOworCQkJc3dpdGNoIChlbnRyeV9wdHItPm50ZV90eXBlKSB7CisJCQljYXNlIEJPT0xFQU46CisJCQkgICAgdHlwZV9uYW1lID0gImJvb2xlYW4iOworCQkJICAgIGJyZWFrOworCQkJY2FzZSBTVFJJTkc6CisJCQkgICAgdHlwZV9uYW1lID0gInN0cmluZyI7CisJCQkgICAgYnJlYWs7CisJCQljYXNlIE5VTUJFUjoKKwkJCSAgICB0eXBlX25hbWUgPSAibnVtZXJpYyI7CisJCQkgICAgYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJICAgIHR5cGVfbmFtZSA9ICJ1bmtub3duIjsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCV9uY193YXJuaW5nKCJ3cm9uZyB0eXBlIHVzZWQgZm9yICVzIGNhcGFiaWxpdHkgJyVzJyIsCisJCQkJICAgIHR5cGVfbmFtZSwgX25jX2N1cnJfdG9rZW4udGtfbmFtZSk7CisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisKKwkgICAgLyogbm93IHdlIGtub3cgdGhhdCB0aGUgdHlwZS92YWx1ZSBjb21iaW5hdGlvbiBpcyBPSyAqLworCSAgICBzd2l0Y2ggKHRva2VuX3R5cGUpIHsKKwkgICAgY2FzZSBDQU5DRUw6CisJCXN3aXRjaCAoZW50cnlfcHRyLT5udGVfdHlwZSkgeworCQljYXNlIEJPT0xFQU46CisJCSAgICBlbnRyeXAtPnR0ZXJtLkJvb2xlYW5zW2VudHJ5X3B0ci0+bnRlX2luZGV4XSA9IENBTkNFTExFRF9CT09MRUFOOworCQkgICAgYnJlYWs7CisKKwkJY2FzZSBOVU1CRVI6CisJCSAgICBlbnRyeXAtPnR0ZXJtLk51bWJlcnNbZW50cnlfcHRyLT5udGVfaW5kZXhdID0gQ0FOQ0VMTEVEX05VTUVSSUM7CisJCSAgICBicmVhazsKKworCQljYXNlIFNUUklORzoKKwkJICAgIGVudHJ5cC0+dHRlcm0uU3RyaW5nc1tlbnRyeV9wdHItPm50ZV9pbmRleF0gPSBDQU5DRUxMRURfU1RSSU5HOworCQkgICAgYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSBCT09MRUFOOgorCQllbnRyeXAtPnR0ZXJtLkJvb2xlYW5zW2VudHJ5X3B0ci0+bnRlX2luZGV4XSA9IFRSVUU7CisJCWJyZWFrOworCisJICAgIGNhc2UgTlVNQkVSOgorCQllbnRyeXAtPnR0ZXJtLk51bWJlcnNbZW50cnlfcHRyLT5udGVfaW5kZXhdID0KKwkJICAgIF9uY19jdXJyX3Rva2VuLnRrX3ZhbG51bWJlcjsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBTVFJJTkc6CisJCXB0ciA9IF9uY19jdXJyX3Rva2VuLnRrX3ZhbHN0cmluZzsKKwkJaWYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1DQVApCisJCSAgICBwdHIgPSBfbmNfY2FwdG9pbmZvKF9uY19jdXJyX3Rva2VuLnRrX25hbWUsCisJCQkJCXB0ciwKKwkJCQkJcGFyYW1ldHJpemVkW2VudHJ5X3B0ci0+bnRlX2luZGV4XSk7CisJCWVudHJ5cC0+dHRlcm0uU3RyaW5nc1tlbnRyeV9wdHItPm50ZV9pbmRleF0gPSBfbmNfc2F2ZV9zdHIocHRyKTsKKwkJYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkJaWYgKCFzaWxlbnQpCisJCSAgICBfbmNfd2FybmluZygidW5rbm93biB0b2tlbiB0eXBlIik7CisJCV9uY19wYW5pY19tb2RlKChjaGFyKSAoKF9uY19zeW50YXggPT0gU1lOX1RFUk1DQVApID8gJzonIDogJywnKSk7CisJCWNvbnRpbnVlOworCSAgICB9CisJfQkJCS8qIGVuZCBlbHNlIGN1cl90b2tlbi5uYW1lICE9ICJ1c2UiICovCisgICAgICBuZXh0dG9rOgorCWNvbnRpbnVlOwkJLyogY2Fubm90IGhhdmUgYSBsYWJlbCB3L28gc3RhdGVtZW50ICovCisgICAgfQkJCQkvKiBlbmR3aGlsZSAobm90IEVPRiBhbmQgbm90IE5BTUVTKSAqLworCisgICAgX25jX3B1c2hfdG9rZW4odG9rZW5fdHlwZSk7CisgICAgX25jX3NldF90eXBlKF9uY19maXJzdF9uYW1lKGVudHJ5cC0+dHRlcm0udGVybV9uYW1lcykpOworCisgICAgLyoKKyAgICAgKiBUcnkgdG8gZGVkdWNlIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSBleHRlbnNpb24gY2FwYWJpbGl0aWVzCisgICAgICogKHRoaXMgaW5jbHVkZXMgb2Jzb2xldGUgQlNEIGNhcGFiaWxpdGllcykuICBTaWdoLi4uaXQgd291bGQgYmUgbW9yZQorICAgICAqIHNwYWNlLWVmZmljaWVudCB0byBjYWxsIHRoaXMgYWZ0ZXIgdXNlIHJlc29sdXRpb24sIGJ1dCBpdCBoYXMKKyAgICAgKiB0byBiZSBkb25lIGJlZm9yZSBlbnRyeSBhbGxvY2F0aW9uIGlzIHdyYXBwZWQgdXAuCisgICAgICovCisgICAgaWYgKCFsaXRlcmFsKSB7CisJaWYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1DQVApIHsKKwkgICAgYm9vbCBoYXNfYmFzZV9lbnRyeSA9IEZBTFNFOworCSAgICB1bnNpZ25lZCBpOworCisJICAgIC8qCisJICAgICAqIERvbid0IGluc2VydCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgYCsnIGVudHJ5IG1lYW50IG9ubHkKKwkgICAgICogZm9yIGluY2x1c2lvbiBpbiBvdGhlciBlbnRyaWVzIChub3Qgc3VyZSB0ZXJtY2FwIGV2ZXIKKwkgICAgICogaGFkIHRoZXNlLCBhY3R1YWxseSkuCisJICAgICAqLworCSAgICBpZiAoc3RyY2hyKGVudHJ5cC0+dHRlcm0udGVybV9uYW1lcywgJysnKSkKKwkJaGFzX2Jhc2VfZW50cnkgPSBUUlVFOworCSAgICBlbHNlCisJCS8qCisJCSAqIE90aGVyd2lzZSwgbG9vayBmb3IgYSBiYXNlIGVudHJ5IHRoYXQgd2lsbCBhbHJlYWR5CisJCSAqIGhhdmUgcGlja2VkIHVwIGRlZmF1bHRzIHZpYSB0cmFuc2xhdGlvbi4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBlbnRyeXAtPm51c2VzOyBpKyspCisJCSAgICBpZiAoIXN0cmNocigoY2hhciAqKSBlbnRyeXAtPnVzZXNbaV0ubmFtZSwgJysnKSkKKwkJCWhhc19iYXNlX2VudHJ5ID0gVFJVRTsKKworCSAgICBwb3N0cHJvY2Vzc190ZXJtY2FwKCZlbnRyeXAtPnR0ZXJtLCBoYXNfYmFzZV9lbnRyeSk7CisJfSBlbHNlCisJICAgIHBvc3Rwcm9jZXNzX3Rlcm1pbmZvKCZlbnRyeXAtPnR0ZXJtKTsKKyAgICB9CisgICAgX25jX3dyYXBfZW50cnkoZW50cnlwLCBGQUxTRSk7CisKKyAgICByZXR1cm4gKE9LKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2NhcGNtcChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICp0KQorLyogY29tcGFyZSB0d28gc3RyaW5nIGNhcGFiaWxpdGllcywgc3RyaXBwaW5nIG91dCBwYWRkaW5nICovCit7CisgICAgaWYgKCFzICYmICF0KQorCXJldHVybiAoMCk7CisgICAgZWxzZSBpZiAoIXMgfHwgIXQpCisJcmV0dXJuICgxKTsKKworICAgIGZvciAoOzspIHsKKwlpZiAoc1swXSA9PSAnJCcgJiYgc1sxXSA9PSAnPCcpIHsKKwkgICAgZm9yIChzICs9IDI7OyBzKyspCisJCWlmICghKGlzZGlnaXQoVUNoYXIoKnMpKQorCQkgICAgICB8fCAqcyA9PSAnLicKKwkJICAgICAgfHwgKnMgPT0gJyonCisJCSAgICAgIHx8ICpzID09ICcvJworCQkgICAgICB8fCAqcyA9PSAnPicpKQorCQkgICAgYnJlYWs7CisJfQorCisJaWYgKHRbMF0gPT0gJyQnICYmIHRbMV0gPT0gJzwnKSB7CisJICAgIGZvciAodCArPSAyOzsgdCsrKQorCQlpZiAoIShpc2RpZ2l0KFVDaGFyKCp0KSkKKwkJICAgICAgfHwgKnQgPT0gJy4nCisJCSAgICAgIHx8ICp0ID09ICcqJworCQkgICAgICB8fCAqdCA9PSAnLycKKwkJICAgICAgfHwgKnQgPT0gJz4nKSkKKwkJICAgIGJyZWFrOworCX0KKworCS8qIHdlJ3ZlIG5vdyBwdXNoZWQgcyBhbmQgdCBwYXN0IGFueSBwYWRkaW5nIHRoZXkgd2VyZSBwb2ludGluZyBhdCAqLworCisJaWYgKCpzID09ICdcMCcgJiYgKnQgPT0gJ1wwJykKKwkgICAgcmV0dXJuICgwKTsKKworCWlmICgqcyAhPSAqdCkKKwkgICAgcmV0dXJuICgqdCAtICpzKTsKKworCS8qIGVsc2UgKnMgPT0gKnQgYnV0IG9uZSBpcyBub3QgTlVMLCBzbyBjb250aW51ZSAqLworCXMrKywgdCsrOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2FwcGVuZF9hY3MwKHN0cmluZ19kZXNjICogZHN0LCBpbnQgY29kZSwgaW50IHNyYykKK3sKKyAgICBpZiAoc3JjICE9IDApIHsKKwljaGFyIHRlbXBbM107CisJdGVtcFswXSA9IChjaGFyKSBjb2RlOworCXRlbXBbMV0gPSAoY2hhcikgc3JjOworCXRlbXBbMl0gPSAwOworCV9uY19zYWZlX3N0cmNhdChkc3QsIHRlbXApOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2FwcGVuZF9hY3Moc3RyaW5nX2Rlc2MgKiBkc3QsIGludCBjb2RlLCBjaGFyICpzcmMpCit7CisgICAgaWYgKHNyYyAhPSAwICYmIHN0cmxlbihzcmMpID09IDEpIHsKKwlhcHBlbmRfYWNzMChkc3QsIGNvZGUsICpzcmMpOworICAgIH0KK30KKworLyoKKyAqIFRoZSBrbyBjYXBhYmlsaXR5LCBpZiBwcmVzZW50LCBjb25zaXN0cyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBjYXBhYmlsaXR5CisgKiBsaXN0LiAgRm9yIGVhY2ggY2FwYWJpbGl0eSwgd2UgbWF5IGFzc3VtZSB0aGVyZSBpcyBhIGtleWNhcCB0aGF0IHNlbmRzIHRoZQorICogc3RyaW5nIHdoaWNoIGlzIHRoZSB2YWx1ZSBvZiB0aGF0IGNhcGFiaWxpdHkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpmcm9tOworICAgIGNvbnN0IGNoYXIgKnRvOworfSBhc3NvYzsKK3N0YXRpYyBhc3NvYyBjb25zdCBrb194bGF0ZVtdID0KK3sKKyAgICB7ImFsIiwgImtpbDEifSwJCS8qIGluc2VydCBsaW5lIGtleSAgLT4gS0VZX0lMICAgICovCisgICAgeyJidCIsICJrY2J0In0sCQkvKiBiYWNrIHRhYiAgICAgICAgIC0+IEtFWV9CVEFCICAqLworICAgIHsiY2QiLCAia2VkIn0sCQkvKiBjbGVhci10by1lb3Mga2V5IC0+IEtFWV9FT0wgICAqLworICAgIHsiY2UiLCAia2VsIn0sCQkvKiBjbGVhci10by1lb2wga2V5IC0+IEtFWV9FT1MgICAqLworICAgIHsiY2wiLCAia2NsciJ9LAkJLyogY2xlYXIga2V5ICAgICAgICAtPiBLRVlfQ0xFQVIgKi8KKyAgICB7ImN0IiwgInRiYyJ9LAkJLyogY2xlYXIgYWxsIHRhYnMgICAtPiBLRVlfQ0FUQUIgKi8KKyAgICB7ImRjIiwgImtkY2gxIn0sCQkvKiBkZWxldGUgY2hhciAgICAgIC0+IEtFWV9EQyAgICAqLworICAgIHsiZGwiLCAia2RsMSJ9LAkJLyogZGVsZXRlIGxpbmUgICAgICAtPiBLRVlfREwgICAgKi8KKyAgICB7ImRvIiwgImtjdWQxIn0sCQkvKiBkb3duIGtleSAgICAgICAgIC0+IEtFWV9ET1dOICAqLworICAgIHsiZWkiLCAia3JtaXIifSwJCS8qIGV4aXQgaW5zZXJ0IGtleSAgLT4gS0VZX0VJQyAgICovCisgICAgeyJobyIsICJraG9tZSJ9LAkJLyogaG9tZSBrZXkgICAgICAgICAtPiBLRVlfSE9NRSAgKi8KKyAgICB7ImljIiwgImtpY2gxIn0sCQkvKiBpbnNlcnQgY2hhciBrZXkgIC0+IEtFWV9JQyAgICAqLworICAgIHsiaW0iLCAia0lDIn0sCQkvKiBpbnNlcnQtbW9kZSBrZXkgIC0+IEtFWV9TSUMgICAqLworICAgIHsibGUiLCAia2N1YjEifSwJCS8qIGxlIGtleSAgICAgICAgICAgLT4gS0VZX0xFRlQgICovCisgICAgeyJuZCIsICJrY3VmMSJ9LAkJLyogbmQga2V5ICAgICAgICAgICAtPiBLRVlfUklHSFQgKi8KKyAgICB7Im5sIiwgImtlbnQifSwJCS8qIG5ldyBsaW5lIGtleSAgICAgLT4gS0VZX0VOVEVSICovCisgICAgeyJzdCIsICJraHRzIn0sCQkvKiBzZXQtdGFiIGtleSAgICAgIC0+IEtFWV9TVEFCICAqLworICAgIHsidGEiLCBDQU5DRUxMRURfU1RSSU5HfSwKKyAgICB7InVwIiwgImtjdXUxIn0sCQkvKiB1cC1hcnJvdyBrZXkgICAgIC0+IEtFWV9VUCAgICAqLworICAgIHsoY2hhciAqKSAwLCAoY2hhciAqKSAwfSwKK307CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgZmlsbHMgaW4gc3RyaW5nIGNhcHMgdGhhdCBlaXRoZXIgaGFkIGRlZmF1bHRzIHVuZGVyCisgKiB0ZXJtY2FwIG9yIGNhbiBiZSBtYW51ZmFjdHVyZWQgZnJvbSBvYnNvbGV0ZSB0ZXJtY2FwIGNhcGFiaWxpdGllcy4KKyAqIEl0IHdhcyBsaWZ0ZWQgZnJvbSBSb3NzIFJpZGdlJ3MgbXl0aW5mbyBwYWNrYWdlLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyIENfQ1JbXSA9ICJcciI7CitzdGF0aWMgY29uc3QgY2hhciBDX0xGW10gPSAiXG4iOworc3RhdGljIGNvbnN0IGNoYXIgQ19CU1tdID0gIlxiIjsKK3N0YXRpYyBjb25zdCBjaGFyIENfSFRbXSA9ICJcdCI7CisKKy8qCisgKiBOb3RlIHRoYXQgV0FOVEVEIGFuZCBQUkVTRU5UIGFyZSBub3Qgc2ltcGxlIGludmVyc2VzISAgSWYgYSBjYXBhYmlsaXR5CisgKiBoYXMgYmVlbiBleHBsaWNpdGx5IGNhbmNlbGxlZCwgaXQncyBub3QgY29uc2lkZXJlZCBXQU5URUQuCisgKi8KKyNkZWZpbmUgV0FOVEVEKHMpCSgocykgPT0gQUJTRU5UX1NUUklORykKKyNkZWZpbmUgUFJFU0VOVChzKQkoKChzKSAhPSBBQlNFTlRfU1RSSU5HKSAmJiAoKHMpICE9IENBTkNFTExFRF9TVFJJTkcpKQorCisvKgorICogVGhpcyBiaXQgb2YgbGVnZXJkZW1haW4gdHVybnMgYWxsIHRoZSB0ZXJtaW5mbyB2YXJpYWJsZSBuYW1lcyBpbnRvCisgKiByZWZlcmVuY2VzIHRvIGxvY2F0aW9ucyBpbiB0aGUgYXJyYXlzIEJvb2xlYW5zLCBOdW1iZXJzLCBhbmQgU3RyaW5ncyAtLS0KKyAqIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkLgorICovCisKKyN1bmRlZiBDVVIKKyNkZWZpbmUgQ1VSIHRwLT4KKworc3RhdGljIHZvaWQKK3Bvc3Rwcm9jZXNzX3Rlcm1jYXAoVEVSTVRZUEUgKnRwLCBib29sIGhhc19iYXNlKQoreworICAgIGNoYXIgYnVmW01BWF9MSU5FICogMiArIDJdOworICAgIHN0cmluZ19kZXNjIHJlc3VsdDsKKworICAgIC8qCisgICAgICogVEVSTUNBUCBERUZBVUxUUyBBTkQgT0JTT0xFVEUtQ0FQQUJJTElUWSBUUkFOU0xBVElPTlMKKyAgICAgKgorICAgICAqIFRoaXMgZmlyc3QgcGFydCBvZiB0aGUgY29kZSBpcyB0aGUgZnVuY3Rpb25hbCBpbnZlcnNlIG9mIHRoZQorICAgICAqIGZyYWdtZW50IGluIGNhcGRlZmF1bHRzLmMuCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqLworCisgICAgLyogaWYgdGhlcmUgd2FzIGEgdGMgZW50cnksIGFzc3VtZSB3ZSBwaWNrZWQgdXAgZGVmYXVsdHMgdmlhIHRoYXQgKi8KKyAgICBpZiAoIWhhc19iYXNlKSB7CisJaWYgKFdBTlRFRChpbml0XzNzdHJpbmcpICYmIHRlcm1jYXBfaW5pdDIpCisJICAgIGluaXRfM3N0cmluZyA9IF9uY19zYXZlX3N0cih0ZXJtY2FwX2luaXQyKTsKKworCWlmIChXQU5URUQocmVzZXRfMnN0cmluZykgJiYgdGVybWNhcF9yZXNldCkKKwkgICAgcmVzZXRfMnN0cmluZyA9IF9uY19zYXZlX3N0cih0ZXJtY2FwX3Jlc2V0KTsKKworCWlmIChXQU5URUQoY2FycmlhZ2VfcmV0dXJuKSkgeworCSAgICBpZiAoY2FycmlhZ2VfcmV0dXJuX2RlbGF5ID4gMCkgeworCQlzcHJpbnRmKGJ1ZiwgIiVzJDwlZD4iLCBDX0NSLCBjYXJyaWFnZV9yZXR1cm5fZGVsYXkpOworCQljYXJyaWFnZV9yZXR1cm4gPSBfbmNfc2F2ZV9zdHIoYnVmKTsKKwkgICAgfSBlbHNlCisJCWNhcnJpYWdlX3JldHVybiA9IF9uY19zYXZlX3N0cihDX0NSKTsKKwl9CisJaWYgKFdBTlRFRChjdXJzb3JfbGVmdCkpIHsKKwkgICAgaWYgKGJhY2tzcGFjZV9kZWxheSA+IDApIHsKKwkJc3ByaW50ZihidWYsICIlcyQ8JWQ+IiwgQ19CUywgYmFja3NwYWNlX2RlbGF5KTsKKwkJY3Vyc29yX2xlZnQgPSBfbmNfc2F2ZV9zdHIoYnVmKTsKKwkgICAgfSBlbHNlIGlmIChiYWNrc3BhY2VzX3dpdGhfYnMgPT0gMSkKKwkJY3Vyc29yX2xlZnQgPSBfbmNfc2F2ZV9zdHIoQ19CUyk7CisJICAgIGVsc2UgaWYgKFBSRVNFTlQoYmFja3NwYWNlX2lmX25vdF9icykpCisJCWN1cnNvcl9sZWZ0ID0gYmFja3NwYWNlX2lmX25vdF9iczsKKwl9CisJLyogdmkgZG9lc24ndCB1c2UgImRvIiwgYnV0IGl0IGRvZXMgc2VlbXMgdG8gdXNlIG5sIChvciAnXG4nKSBpbnN0ZWFkICovCisJaWYgKFdBTlRFRChjdXJzb3JfZG93bikpIHsKKwkgICAgaWYgKFBSRVNFTlQobGluZWZlZWRfaWZfbm90X2xmKSkKKwkJY3Vyc29yX2Rvd24gPSBsaW5lZmVlZF9pZl9ub3RfbGY7CisJICAgIGVsc2UgaWYgKGxpbmVmZWVkX2lzX25ld2xpbmUgIT0gMSkgeworCQlpZiAobmV3X2xpbmVfZGVsYXkgPiAwKSB7CisJCSAgICBzcHJpbnRmKGJ1ZiwgIiVzJDwlZD4iLCBDX0xGLCBuZXdfbGluZV9kZWxheSk7CisJCSAgICBjdXJzb3JfZG93biA9IF9uY19zYXZlX3N0cihidWYpOworCQl9IGVsc2UKKwkJICAgIGN1cnNvcl9kb3duID0gX25jX3NhdmVfc3RyKENfTEYpOworCSAgICB9CisJfQorCWlmIChXQU5URUQoc2Nyb2xsX2ZvcndhcmQpICYmIGNydF9ub19zY3JvbGxpbmcgIT0gMSkgeworCSAgICBpZiAoUFJFU0VOVChsaW5lZmVlZF9pZl9ub3RfbGYpKQorCQljdXJzb3JfZG93biA9IGxpbmVmZWVkX2lmX25vdF9sZjsKKwkgICAgZWxzZSBpZiAobGluZWZlZWRfaXNfbmV3bGluZSAhPSAxKSB7CisJCWlmIChuZXdfbGluZV9kZWxheSA+IDApIHsKKwkJICAgIHNwcmludGYoYnVmLCAiJXMkPCVkPiIsIENfTEYsIG5ld19saW5lX2RlbGF5KTsKKwkJICAgIHNjcm9sbF9mb3J3YXJkID0gX25jX3NhdmVfc3RyKGJ1Zik7CisJCX0gZWxzZQorCQkgICAgc2Nyb2xsX2ZvcndhcmQgPSBfbmNfc2F2ZV9zdHIoQ19MRik7CisJICAgIH0KKwl9CisJaWYgKFdBTlRFRChuZXdsaW5lKSkgeworCSAgICBpZiAobGluZWZlZWRfaXNfbmV3bGluZSA9PSAxKSB7CisJCWlmIChuZXdfbGluZV9kZWxheSA+IDApIHsKKwkJICAgIHNwcmludGYoYnVmLCAiJXMkPCVkPiIsIENfTEYsIG5ld19saW5lX2RlbGF5KTsKKwkJICAgIG5ld2xpbmUgPSBfbmNfc2F2ZV9zdHIoYnVmKTsKKwkJfSBlbHNlCisJCSAgICBuZXdsaW5lID0gX25jX3NhdmVfc3RyKENfTEYpOworCSAgICB9IGVsc2UgaWYgKFBSRVNFTlQoY2FycmlhZ2VfcmV0dXJuKSAmJiBQUkVTRU5UKHNjcm9sbF9mb3J3YXJkKSkgeworCQlfbmNfc3RyX2luaXQoJnJlc3VsdCwgYnVmLCBzaXplb2YoYnVmKSk7CisJCWlmIChfbmNfc2FmZV9zdHJjYXQoJnJlc3VsdCwgY2FycmlhZ2VfcmV0dXJuKQorCQkgICAgJiYgX25jX3NhZmVfc3RyY2F0KCZyZXN1bHQsIHNjcm9sbF9mb3J3YXJkKSkKKwkJICAgIG5ld2xpbmUgPSBfbmNfc2F2ZV9zdHIoYnVmKTsKKwkgICAgfSBlbHNlIGlmIChQUkVTRU5UKGNhcnJpYWdlX3JldHVybikgJiYgUFJFU0VOVChjdXJzb3JfZG93bikpIHsKKwkJX25jX3N0cl9pbml0KCZyZXN1bHQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAoX25jX3NhZmVfc3RyY2F0KCZyZXN1bHQsIGNhcnJpYWdlX3JldHVybikKKwkJICAgICYmIF9uY19zYWZlX3N0cmNhdCgmcmVzdWx0LCBjdXJzb3JfZG93bikpCisJCSAgICBuZXdsaW5lID0gX25jX3NhdmVfc3RyKGJ1Zik7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJbnZlcnNlIG9mIGNhcGRlZmF1bHRzLmMgY29kZSBlbmRzIGhlcmUuCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqCisgICAgICogVEVSTUNBUC1UTyBURVJNSU5GTyBNQVBQSU5HUyBGT1IgU09VUkNFIFRSQU5TTEFUSU9OCisgICAgICoKKyAgICAgKiBUaGVzZSB0cmFuc2xhdGlvbnMgd2lsbCAqbm90KiBiZSBpbnZlcnRlZCBieSB0Z2V0ZW50KCkuCisgICAgICovCisKKyAgICBpZiAoIWhhc19iYXNlKSB7CisJLyoKKwkgKiBXZSB3YWl0IHVudGlsIG5vdyB0byBkZWNpZGUgaWYgd2UndmUgZ290IGEgd29ya2luZyBjciBiZWNhdXNlIGV2ZW4KKwkgKiBvbmUgdGhhdCBkb2Vzbid0IHdvcmsgY2FuIGJlIHVzZWQgZm9yIG5ld2xpbmUuIFVuZm9ydHVuYXRlbHkgdGhlCisJICogc3BhY2UgYWxsb2NhdGVkIGZvciBpdCBpcyB3YXN0ZWQuCisJICovCisJaWYgKHJldHVybl9kb2VzX2Nscl9lb2wgPT0gMSB8fCBub19jb3JyZWN0bHlfd29ya2luZ19jciA9PSAxKQorCSAgICBjYXJyaWFnZV9yZXR1cm4gPSBBQlNFTlRfU1RSSU5HOworCisJLyoKKwkgKiBTdXBwb3NlZGx5IG1vc3QgdGVybWNhcCBlbnRyaWVzIGhhdmUgdGEgbm93IGFuZCAnXHQnIGlzIG5vIGxvbmdlciBhCisJICogZGVmYXVsdCwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0cnVlLi4uCisJICovCisJaWYgKFdBTlRFRCh0YWIpKSB7CisJICAgIGlmIChob3Jpem9udGFsX3RhYl9kZWxheSA+IDApIHsKKwkJc3ByaW50ZihidWYsICIlcyQ8JWQ+IiwgQ19IVCwgaG9yaXpvbnRhbF90YWJfZGVsYXkpOworCQl0YWIgPSBfbmNfc2F2ZV9zdHIoYnVmKTsKKwkgICAgfSBlbHNlCisJCXRhYiA9IF9uY19zYXZlX3N0cihDX0hUKTsKKwl9CisJaWYgKGluaXRfdGFicyA9PSBBQlNFTlRfTlVNRVJJQyAmJiBoYXNfaGFyZHdhcmVfdGFicyA9PSBUUlVFKQorCSAgICBpbml0X3RhYnMgPSA4OworCisJLyoKKwkgKiBBc3N1bWUgd2UgY2FuIGJlZXAgd2l0aCBeRyB1bmxlc3Mgd2UncmUgZ2l2ZW4gYmxALgorCSAqLworCWlmIChXQU5URUQoYmVsbCkpCisJICAgIGJlbGwgPSBfbmNfc2F2ZV9zdHIoIlwwMDciKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyYW5zbGF0ZSB0aGUgb2xkIHRlcm1jYXAgOnB0OiBjYXBhYmlsaXR5IHRvIGl0IzggKyBodD1cdAorICAgICAqLworICAgIGlmIChoYXNfaGFyZHdhcmVfdGFicyA9PSBUUlVFKSB7CisJaWYgKGluaXRfdGFicyAhPSA4ICYmIGluaXRfdGFicyAhPSBBQlNFTlRfTlVNRVJJQykKKwkgICAgX25jX3dhcm5pbmcoImhhcmR3YXJlIHRhYnMgd2l0aCBhIHdpZHRoIG90aGVyIHRoYW4gODogJWQiLCBpbml0X3RhYnMpOworCWVsc2UgeworCSAgICBpZiAodGFiICYmIF9uY19jYXBjbXAodGFiLCBDX0hUKSkKKwkJX25jX3dhcm5pbmcoImhhcmR3YXJlIHRhYnMgd2l0aCBhIG5vbi1eSSB0YWIgc3RyaW5nICVzIiwKKwkJCSAgICBfbmNfdmlzYnVmKHRhYikpOworCSAgICBlbHNlIHsKKwkJaWYgKFdBTlRFRCh0YWIpKQorCQkgICAgdGFiID0gX25jX3NhdmVfc3RyKENfSFQpOworCQlpbml0X3RhYnMgPSA4OworCSAgICB9CisJfQorICAgIH0KKyAgICAvKgorICAgICAqIE5vdyB0cmFuc2xhdGUgdGhlIGtvIGNhcGFiaWxpdHksIGlmIHRoZXJlIGlzIG9uZS4gIFRoaXMKKyAgICAgKiBpc24ndCBmcm9tIG15dGluZm8uLi4KKyAgICAgKi8KKyAgICBpZiAoUFJFU0VOVChvdGhlcl9ub25fZnVuY3Rpb25fa2V5cykpIHsKKwljaGFyICpiYXNlID0gb3RoZXJfbm9uX2Z1bmN0aW9uX2tleXM7CisJY2hhciAqYnAsICpjcCwgKmRwOworCXN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5IGNvbnN0ICpmcm9tX3B0cjsKKwlzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqdG9fcHRyOworCWFzc29jIGNvbnN0ICphcDsKKwljaGFyIGJ1ZjJbTUFYX1RFUk1JTkZPX0xFTkdUSF07CisJYm9vbCBmb3VuZGltOworCisJLyogd2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgZm9yIGEgc3BlY2lhbCBjYXNlIGxhdGVyICovCisJZHAgPSBzdHJjaHIob3RoZXJfbm9uX2Z1bmN0aW9uX2tleXMsICdpJyk7CisJZm91bmRpbSA9IChkcCAhPSAwKSAmJiAoZHBbMV0gPT0gJ20nKTsKKworCS8qIGxvb2sgYXQgZWFjaCBjb21tYS1zZXBhcmF0ZWQgY2FwYWJpbGl0eSBpbiB0aGUga28gc3RyaW5nLi4uICovCisJZm9yIChiYXNlID0gb3RoZXJfbm9uX2Z1bmN0aW9uX2tleXM7CisJICAgICAoY3AgPSBzdHJjaHIoYmFzZSwgJywnKSkgIT0gMDsKKwkgICAgIGJhc2UgPSBjcCArIDEpIHsKKwkgICAgc2l6ZV90IGxlbiA9IGNwIC0gYmFzZTsKKworCSAgICBmb3IgKGFwID0ga29feGxhdGU7IGFwLT5mcm9tOyBhcCsrKSB7CisJCWlmIChsZW4gPT0gc3RybGVuKGFwLT5mcm9tKQorCQkgICAgJiYgc3RybmNtcChhcC0+ZnJvbSwgYmFzZSwgbGVuKSA9PSAwKQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKCEoYXAtPmZyb20gJiYgYXAtPnRvKSkgeworCQlfbmNfd2FybmluZygidW5rbm93biBjYXBhYmlsaXR5IGAlLipzJyBpbiBrbyBzdHJpbmciLAorCQkJICAgIChpbnQpIGxlbiwgYmFzZSk7CisJCWNvbnRpbnVlOworCSAgICB9IGVsc2UgaWYgKGFwLT50byA9PSBDQU5DRUxMRURfU1RSSU5HKQkvKiBpZ25vcmUgaXQgKi8KKwkJY29udGludWU7CisKKwkgICAgLyogbm93IHdlIGtub3cgd2UgZm91bmQgYSBtYXRjaCBpbiBrb190YWJsZSwgc28uLi4gKi8KKworCSAgICBmcm9tX3B0ciA9IF9uY19maW5kX2VudHJ5KGFwLT5mcm9tLCBfbmNfZ2V0X2hhc2hfdGFibGUoVFJVRSkpOworCSAgICB0b19wdHIgPSBfbmNfZmluZF9lbnRyeShhcC0+dG8sIF9uY19nZXRfaGFzaF90YWJsZShGQUxTRSkpOworCisJICAgIGlmICghZnJvbV9wdHIgfHwgIXRvX3B0cikJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiEgKi8KKwkJX25jX2Vycl9hYm9ydCgia28gdHJhbnNsYXRpb24gdGFibGUgaXMgaW52YWxpZCwgSSBnaXZlIHVwIik7CisKKwkgICAgaWYgKFdBTlRFRCh0cC0+U3RyaW5nc1tmcm9tX3B0ci0+bnRlX2luZGV4XSkpIHsKKwkJX25jX3dhcm5pbmcoIm5vIHZhbHVlIGZvciBrbyBjYXBhYmlsaXR5ICVzIiwgYXAtPmZyb20pOworCQljb250aW51ZTsKKwkgICAgfQorCisJICAgIGlmICh0cC0+U3RyaW5nc1t0b19wdHItPm50ZV9pbmRleF0pIHsKKwkJLyogVGhlcmUncyBubyBwb2ludCBpbiB3YXJuaW5nIGFib3V0IGl0IGlmIGl0J3MgdGhlIHNhbWUKKwkJICogc3RyaW5nOyB0aGF0J3MganVzdCBhbiBpbmVmZmljaWVuY3kuCisJCSAqLworCQlpZiAoc3RyY21wKAorCQkJICAgICAgdHAtPlN0cmluZ3NbZnJvbV9wdHItPm50ZV9pbmRleF0sCisJCQkgICAgICB0cC0+U3RyaW5nc1t0b19wdHItPm50ZV9pbmRleF0pICE9IDApCisJCSAgICBfbmNfd2FybmluZygiJXMgKCVzKSBhbHJlYWR5IGhhcyBhbiBleHBsaWNpdCB2YWx1ZSAlcywgaWdub3Jpbmcga28iLAorCQkJCWFwLT50bywgYXAtPmZyb20sCisJCQkJX25jX3Zpc2J1Zih0cC0+U3RyaW5nc1t0b19wdHItPm50ZV9pbmRleF0pKTsKKwkJY29udGludWU7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBUaGUgbWFnaWMgbW9tZW50IC0tIGNvcHkgdGhlIG1hcHBlZCBrZXkgc3RyaW5nIG92ZXIsCisJICAgICAqIHN0cmlwcGluZyBvdXQgcGFkZGluZy4KKwkgICAgICovCisJICAgIGZvciAoZHAgPSBidWYyLCBicCA9IHRwLT5TdHJpbmdzW2Zyb21fcHRyLT5udGVfaW5kZXhdOyAqYnA7IGJwKyspIHsKKwkJaWYgKGJwWzBdID09ICckJyAmJiBicFsxXSA9PSAnPCcpIHsKKwkJICAgIHdoaWxlICgqYnAgJiYgKmJwICE9ICc+JykgeworCQkJKyticDsKKwkJICAgIH0KKwkJfSBlbHNlCisJCSAgICAqZHArKyA9ICpicDsKKwkgICAgfQorCSAgICAqZHArKyA9ICdcMCc7CisKKwkgICAgdHAtPlN0cmluZ3NbdG9fcHRyLT5udGVfaW5kZXhdID0gX25jX3NhdmVfc3RyKGJ1ZjIpOworCX0KKworCS8qCisJICogTm90ZToga289aW0gYW5kIGtvPWljIGJvdGggd2FudCB0byBncmFiIHRoZSBgSW5zZXJ0JworCSAqIGtleWNhcC4gIFRoZXJlJ3MgYSBraWNoMSBidXQgbm8ga3NtaXIsIHNvIHRoZSBpYyBjYXBhYmlsaXR5CisJICogZ290IG1hcHBlZCB0byBraWNoMSBhbmQgaW0gdG8ga0lDIHRvIGF2b2lkIGEgY29sbGlzaW9uLgorCSAqIElmIHRoZSBkZXNjcmlwdGlvbiBoYXMgaW0gYnV0IG5vdCBpYywgaGFjayBrSUMgYmFjayB0byBraWNoMS4KKwkgKi8KKwlpZiAoZm91bmRpbSAmJiBXQU5URUQoa2V5X2ljKSAmJiBrZXlfc2ljKSB7CisJICAgIGtleV9pYyA9IGtleV9zaWM7CisJICAgIGtleV9zaWMgPSBBQlNFTlRfU1RSSU5HOworCX0KKyAgICB9CisKKyAgICBpZiAoIWhhc19iYXNlKSB7CisJaWYgKCFoYXJkX2NvcHkpIHsKKwkgICAgaWYgKFdBTlRFRChrZXlfYmFja3NwYWNlKSkKKwkJa2V5X2JhY2tzcGFjZSA9IF9uY19zYXZlX3N0cihDX0JTKTsKKwkgICAgaWYgKFdBTlRFRChrZXlfbGVmdCkpCisJCWtleV9sZWZ0ID0gX25jX3NhdmVfc3RyKENfQlMpOworCSAgICBpZiAoV0FOVEVEKGtleV9kb3duKSkKKwkJa2V5X2Rvd24gPSBfbmNfc2F2ZV9zdHIoQ19MRik7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogVHJhbnNsYXRlIFhFTklYIGZvcm1zIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgaWYgKFBSRVNFTlQoYWNzX3VsY29ybmVyKSB8fAorCVBSRVNFTlQoYWNzX2xsY29ybmVyKSB8fAorCVBSRVNFTlQoYWNzX3VyY29ybmVyKSB8fAorCVBSRVNFTlQoYWNzX2xyY29ybmVyKSB8fAorCVBSRVNFTlQoYWNzX2x0ZWUpIHx8CisJUFJFU0VOVChhY3NfcnRlZSkgfHwKKwlQUkVTRU5UKGFjc19idGVlKSB8fAorCVBSRVNFTlQoYWNzX3R0ZWUpIHx8CisJUFJFU0VOVChhY3NfaGxpbmUpIHx8CisJUFJFU0VOVChhY3NfdmxpbmUpIHx8CisJUFJFU0VOVChhY3NfcGx1cykpIHsKKwljaGFyIGJ1ZjJbTUFYX1RFUk1DQVBfTEVOR1RIXTsKKworCV9uY19zdHJfaW5pdCgmcmVzdWx0LCBidWYyLCBzaXplb2YoYnVmMikpOworCV9uY19zYWZlX3N0cmNhdCgmcmVzdWx0LCBhY3NfY2hhcnMpOworCisJYXBwZW5kX2FjcygmcmVzdWx0LCAnaicsIGFjc19scmNvcm5lcik7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAnaycsIGFjc191cmNvcm5lcik7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAnbCcsIGFjc191bGNvcm5lcik7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAnbScsIGFjc19sbGNvcm5lcik7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAnbicsIGFjc19wbHVzKTsKKwlhcHBlbmRfYWNzKCZyZXN1bHQsICdxJywgYWNzX2hsaW5lKTsKKwlhcHBlbmRfYWNzKCZyZXN1bHQsICd0JywgYWNzX2x0ZWUpOworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ3UnLCBhY3NfcnRlZSk7CisJYXBwZW5kX2FjcygmcmVzdWx0LCAndicsIGFjc19idGVlKTsKKwlhcHBlbmRfYWNzKCZyZXN1bHQsICd3JywgYWNzX3R0ZWUpOworCWFwcGVuZF9hY3MoJnJlc3VsdCwgJ3gnLCBhY3NfdmxpbmUpOworCisJaWYgKGJ1ZjJbMF0pIHsKKwkgICAgYWNzX2NoYXJzID0gX25jX3NhdmVfc3RyKGJ1ZjIpOworCSAgICBfbmNfd2FybmluZygiYWNzYyBzdHJpbmcgc3ludGhlc2l6ZWQgZnJvbSBYRU5JWCBjYXBhYmlsaXRpZXMiKTsKKwl9CisgICAgfSBlbHNlIGlmIChhY3NfY2hhcnMgPT0gMAorCSAgICAgICAmJiBlbnRlcl9hbHRfY2hhcnNldF9tb2RlICE9IDAKKwkgICAgICAgJiYgZXhpdF9hbHRfY2hhcnNldF9tb2RlICE9IDApIHsKKwlhY3NfY2hhcnMgPSBfbmNfc2F2ZV9zdHIoVlRfQUNTQyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcG9zdHByb2Nlc3NfdGVybWluZm8oVEVSTVRZUEUgKnRwKQoreworICAgIC8qCisgICAgICogVEVSTUlORk8tVE8tVEVSTUlORk8gTUFQUElOR1MgRk9SIFNPVVJDRSBUUkFOU0xBVElPTgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKi8KKworICAgIC8qCisgICAgICogVHJhbnNsYXRlIEFJWCBmb3JtcyBjaGFyYWN0ZXJzLgorICAgICAqLworICAgIGlmIChQUkVTRU5UKGJveF9jaGFyc18xKSkgeworCWNoYXIgYnVmMltNQVhfVEVSTUNBUF9MRU5HVEhdOworCXN0cmluZ19kZXNjIHJlc3VsdDsKKworCV9uY19zdHJfaW5pdCgmcmVzdWx0LCBidWYyLCBzaXplb2YoYnVmMikpOworCV9uY19zYWZlX3N0cmNhdCgmcmVzdWx0LCBhY3NfY2hhcnMpOworCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ2wnLCBib3hfY2hhcnNfMVswXSk7CS8qIEFDU19VTENPUk5FUiAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICdxJywgYm94X2NoYXJzXzFbMV0pOwkvKiBBQ1NfSExJTkUgKi8KKwlhcHBlbmRfYWNzMCgmcmVzdWx0LCAnaycsIGJveF9jaGFyc18xWzJdKTsJLyogQUNTX1VSQ09STkVSICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ3gnLCBib3hfY2hhcnNfMVszXSk7CS8qIEFDU19WTElORSAqLworCWFwcGVuZF9hY3MwKCZyZXN1bHQsICdqJywgYm94X2NoYXJzXzFbNF0pOwkvKiBBQ1NfTFJDT1JORVIgKi8KKwlhcHBlbmRfYWNzMCgmcmVzdWx0LCAnbScsIGJveF9jaGFyc18xWzVdKTsJLyogQUNTX0xMQ09STkVSICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ3cnLCBib3hfY2hhcnNfMVs2XSk7CS8qIEFDU19UVEVFICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ3UnLCBib3hfY2hhcnNfMVs3XSk7CS8qIEFDU19SVEVFICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ3YnLCBib3hfY2hhcnNfMVs4XSk7CS8qIEFDU19CVEVFICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ3QnLCBib3hfY2hhcnNfMVs5XSk7CS8qIEFDU19MVEVFICovCisJYXBwZW5kX2FjczAoJnJlc3VsdCwgJ24nLCBib3hfY2hhcnNfMVsxMF0pOwkvKiBBQ1NfUExVUyAqLworCisJaWYgKGJ1ZjJbMF0pIHsKKwkgICAgYWNzX2NoYXJzID0gX25jX3NhdmVfc3RyKGJ1ZjIpOworCSAgICBfbmNfd2FybmluZygiYWNzYyBzdHJpbmcgc3ludGhlc2l6ZWQgZnJvbSBBSVggY2FwYWJpbGl0aWVzIik7CisJICAgIGJveF9jaGFyc18xID0gQUJTRU5UX1NUUklORzsKKwl9CisgICAgfQorICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqLworfQorCisvKgorICogRG8gYSBsaW5lYXIgc2VhcmNoIHRocm91Z2ggdGhlIHRlcm1pbmZvIHRhYmxlcyB0byBmaW5kIGEgZ2l2ZW4gZnVsbC1uYW1lLgorICogV2UgZG9uJ3QgZXhwZWN0IHRvIGRvIHRoaXMgb2Z0ZW4sIHNvIHRoZXJlJ3Mgbm8gaGFzaGluZyBmdW5jdGlvbi4KKyAqCisgKiBJbiBlZmZlY3QsIHRoaXMgc2NhbnMgdGhyb3VnaCB0aGUgMyBsaXN0cyBvZiBmdWxsLW5hbWVzLCBhbmQgbG9va3MgdGhlbQorICogdXAgaW4gX25jX2luZm9fdGFibGUsIHdoaWNoIGlzIG9yZ2FuaXplZCBzbyB0aGF0IHRoZSBudGVfaW5kZXggZmllbGRzIGFyZQorICogc29ydGVkLCBidXQgdGhlIG50ZV90eXBlIGZpZWxkcyBhcmUgbm90IG5lY2Vzc2FyaWx5IGdyb3VwZWQgdG9nZXRoZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmFtZV90YWJsZV9lbnRyeSBjb25zdCAqCitsb29rdXBfZnVsbG5hbWUoY29uc3QgY2hhciAqZmluZCkKK3sKKyAgICBpbnQgc3RhdGUgPSAtMTsKKworICAgIGZvciAoOzspIHsKKwlpbnQgY291bnQgPSAwOworCU5DVVJTRVNfQ09OU1QgY2hhciAqY29uc3QgKm5hbWVzOworCisJc3dpdGNoICgrK3N0YXRlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICBuYW1lcyA9IGJvb2xmbmFtZXM7CisJICAgIGJyZWFrOworCWNhc2UgU1RSSU5HOgorCSAgICBuYW1lcyA9IHN0cmZuYW1lczsKKwkgICAgYnJlYWs7CisJY2FzZSBOVU1CRVI6CisJICAgIG5hbWVzID0gbnVtZm5hbWVzOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICByZXR1cm4gTk9URk9VTkQ7CisJfQorCisJZm9yIChjb3VudCA9IDA7IG5hbWVzW2NvdW50XSAhPSAwOyBjb3VudCsrKSB7CisJICAgIGlmICghc3RyY21wKG5hbWVzW2NvdW50XSwgZmluZCkpIHsKKwkJc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKmVudHJ5X3B0ciA9IF9uY19nZXRfdGFibGUoRkFMU0UpOworCQl3aGlsZSAoZW50cnlfcHRyLT5udGVfdHlwZSAhPSBzdGF0ZQorCQkgICAgICAgfHwgZW50cnlfcHRyLT5udGVfaW5kZXggIT0gY291bnQpCisJCSAgICBlbnRyeV9wdHIrKzsKKwkJcmV0dXJuIGVudHJ5X3B0cjsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qIHBhcnNlX2VudHJ5LmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3JlYWRfZW50cnkuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vcmVhZF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZWE2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3JlYWRfZW50cnkuYwpAQCAtMCwwICsxLDU0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJcmVhZF9lbnRyeS5jIC0tIFJvdXRpbmUgZm9yIHJlYWRpbmcgaW4gYSBjb21waWxlZCB0ZXJtaW5mbyBmaWxlCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8aGFzaGVkX2RiLmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisKK01PRFVMRV9JRCgiJElkOiByZWFkX2VudHJ5LmMsdiAxLjEwMiAyMDA4LzA4LzAzIDE5OjMzOjA0IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgVFlQRV9DQUxMT0ModHlwZSxlbHRzKSB0eXBlQ2FsbG9jKHR5cGUsICh1bnNpZ25lZCkoZWx0cykpCisKKyNpZiBVU0VfREFUQUJBU0UKK3N0YXRpYyB2b2lkCitjb252ZXJ0X3Nob3J0cyhjaGFyICpidWYsIHNob3J0ICpOdW1iZXJzLCBpbnQgY291bnQpCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwlpZiAoSVNfTkVHMShidWYgKyAyICogaSkpCisJICAgIE51bWJlcnNbaV0gPSBBQlNFTlRfTlVNRVJJQzsKKwllbHNlIGlmIChJU19ORUcyKGJ1ZiArIDIgKiBpKSkKKwkgICAgTnVtYmVyc1tpXSA9IENBTkNFTExFRF9OVU1FUklDOworCWVsc2UKKwkgICAgTnVtYmVyc1tpXSA9IExPV19NU0IoYnVmICsgMiAqIGkpOworCVRSKFRSQUNFX0RBVEFCQVNFLCAoImdldCBOdW1iZXJzWyVkXT0lZCIsIGksIE51bWJlcnNbaV0pKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjb252ZXJ0X3N0cmluZ3MoY2hhciAqYnVmLCBjaGFyICoqU3RyaW5ncywgaW50IGNvdW50LCBpbnQgc2l6ZSwgY2hhciAqdGFibGUpCit7CisgICAgaW50IGk7CisgICAgY2hhciAqcDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJaWYgKElTX05FRzEoYnVmICsgMiAqIGkpKSB7CisJICAgIFN0cmluZ3NbaV0gPSBBQlNFTlRfU1RSSU5HOworCX0gZWxzZSBpZiAoSVNfTkVHMihidWYgKyAyICogaSkpIHsKKwkgICAgU3RyaW5nc1tpXSA9IENBTkNFTExFRF9TVFJJTkc7CisJfSBlbHNlIGlmICgoaW50KSBMT1dfTVNCKGJ1ZiArIDIgKiBpKSA+IHNpemUpIHsKKwkgICAgU3RyaW5nc1tpXSA9IEFCU0VOVF9TVFJJTkc7CisJfSBlbHNlIHsKKwkgICAgU3RyaW5nc1tpXSA9IChMT1dfTVNCKGJ1ZiArIDIgKiBpKSArIHRhYmxlKTsKKwkgICAgVFIoVFJBQ0VfREFUQUJBU0UsICgiU3RyaW5nc1slZF0gPSAlcyIsIGksIF9uY192aXNidWYoU3RyaW5nc1tpXSkpKTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgYWxsIHN0cmluZ3MgYXJlIE5VTCB0ZXJtaW5hdGVkICovCisJaWYgKFZBTElEX1NUUklORyhTdHJpbmdzW2ldKSkgeworCSAgICBmb3IgKHAgPSBTdHJpbmdzW2ldOyBwIDw9IHRhYmxlICsgc2l6ZTsgcCsrKQorCQlpZiAoKnAgPT0gJ1wwJykKKwkJICAgIGJyZWFrOworCSAgICAvKiBpZiB0aGVyZSBpcyBubyBOVUwsIGlnbm9yZSB0aGUgc3RyaW5nICovCisJICAgIGlmIChwID4gdGFibGUgKyBzaXplKQorCQlTdHJpbmdzW2ldID0gQUJTRU5UX1NUUklORzsKKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50CitmYWtlX3JlYWQoY2hhciAqc3JjLCBpbnQgKm9mZnNldCwgaW50IGxpbWl0LCBjaGFyICpkc3QsIHVuc2lnbmVkIHdhbnQpCit7CisgICAgaW50IGhhdmUgPSAobGltaXQgLSAqb2Zmc2V0KTsKKworICAgIGlmIChoYXZlID4gMCkgeworCWlmICgoaW50KSB3YW50ID4gaGF2ZSkKKwkgICAgd2FudCA9IGhhdmU7CisJbWVtY3B5KGRzdCwgc3JjICsgKm9mZnNldCwgd2FudCk7CisJKm9mZnNldCArPSB3YW50OworICAgIH0gZWxzZSB7CisJd2FudCA9IDA7CisgICAgfQorICAgIHJldHVybiAoaW50KSB3YW50OworfQorCisjZGVmaW5lIFJlYWQoYnVmLCBjb3VudCkgZmFrZV9yZWFkKGJ1ZmZlciwgJm9mZnNldCwgbGltaXQsIGJ1ZiwgY291bnQpCisKKyNkZWZpbmUgcmVhZF9zaG9ydHMoYnVmLCBjb3VudCkgXAorCShSZWFkKGJ1ZiwgKHVuc2lnbmVkKSAoY291bnQpKjIpID09IChpbnQpIChjb3VudCkqMikKKworI2RlZmluZSBldmVuX2JvdW5kYXJ5KHZhbHVlKSBcCisgICAgaWYgKCh2YWx1ZSkgJSAyICE9IDApIFJlYWQoYnVmLCAxKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfcmVhZF90ZXJtdHlwZShURVJNVFlQRSAqcHRyLCBjaGFyICpidWZmZXIsIGludCBsaW1pdCkKKy8qIHJldHVybiAxIGlmIHJlYWQsIDAgaWYgbm90IGZvdW5kIG9yIGdhcmJsZWQgKi8KK3sKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICBpbnQgbmFtZV9zaXplLCBib29sX2NvdW50LCBudW1fY291bnQsIHN0cl9jb3VudCwgc3RyX3NpemU7CisgICAgaW50IGk7CisgICAgY2hhciBidWZbTUFYX0VOVFJZX1NJWkUgKyAxXTsKKyAgICBjaGFyICpzdHJpbmdfdGFibGU7CisgICAgdW5zaWduZWQgd2FudCwgaGF2ZTsKKworICAgIFRSKFRSQUNFX0RBVEFCQVNFLCAoIlJFQUQgdGVybXR5cGUgaGVhZGVyIEAlZCIsIG9mZnNldCkpOworCisgICAgbWVtc2V0KHB0ciwgMCwgc2l6ZW9mKCpwdHIpKTsKKworICAgIC8qIGdyYWIgdGhlIGhlYWRlciAqLworICAgIGlmICghcmVhZF9zaG9ydHMoYnVmLCA2KQorCXx8ICFJU19USUNfTUFHSUMoYnVmKSkgeworCXJldHVybiAoVEdFVEVOVF9OTyk7CisgICAgfQorCisgICAgbmFtZV9zaXplID0gTE9XX01TQihidWYgKyAyKTsKKyAgICBib29sX2NvdW50ID0gTE9XX01TQihidWYgKyA0KTsKKyAgICBudW1fY291bnQgPSBMT1dfTVNCKGJ1ZiArIDYpOworICAgIHN0cl9jb3VudCA9IExPV19NU0IoYnVmICsgOCk7CisgICAgc3RyX3NpemUgPSBMT1dfTVNCKGJ1ZiArIDEwKTsKKworICAgIFRSKFRSQUNFX0RBVEFCQVNFLAorICAgICAgICgiVEVSTVRZUEUgbmFtZV9zaXplPSVkLCBib29sPSVkLyVkLCBudW09JWQvJWQgc3RyPSVkLyVkKCVkKSIsCisJbmFtZV9zaXplLCBib29sX2NvdW50LCBCT09MQ09VTlQsIG51bV9jb3VudCwgTlVNQ09VTlQsCisJc3RyX2NvdW50LCBTVFJDT1VOVCwgc3RyX3NpemUpKTsKKyAgICBpZiAobmFtZV9zaXplIDwgMAorCXx8IGJvb2xfY291bnQgPCAwCisJfHwgbnVtX2NvdW50IDwgMAorCXx8IHN0cl9jb3VudCA8IDAKKwl8fCBzdHJfc2l6ZSA8IDApIHsKKwlyZXR1cm4gKFRHRVRFTlRfTk8pOworICAgIH0KKworICAgIHdhbnQgPSBzdHJfc2l6ZSArIG5hbWVfc2l6ZSArIDE7CisgICAgaWYgKHN0cl9zaXplKSB7CisJLyogdHJ5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3RyaW5nIHRhYmxlICovCisJaWYgKHN0cl9jb3VudCAqIDIgPj0gKGludCkgc2l6ZW9mKGJ1ZikKKwkgICAgfHwgKHN0cmluZ190YWJsZSA9IHR5cGVNYWxsb2MoY2hhciwgd2FudCkpID09IDApIHsKKwkgICAgcmV0dXJuIChUR0VURU5UX05PKTsKKwl9CisgICAgfSBlbHNlIHsKKwlzdHJfY291bnQgPSAwOworCWlmICgoc3RyaW5nX3RhYmxlID0gdHlwZU1hbGxvYyhjaGFyLCB3YW50KSkgPT0gMCkgeworCSAgICByZXR1cm4gKFRHRVRFTlRfTk8pOworCX0KKyAgICB9CisKKyAgICAvKiBncmFiIHRoZSBuYW1lIChhIG51bGwtdGVybWluYXRlZCBzdHJpbmcpICovCisgICAgd2FudCA9IG1pbihNQVhfTkFNRV9TSVpFLCAodW5zaWduZWQpIG5hbWVfc2l6ZSk7CisgICAgcHRyLT5zdHJfdGFibGUgPSBzdHJpbmdfdGFibGU7CisgICAgcHRyLT50ZXJtX25hbWVzID0gc3RyaW5nX3RhYmxlOworICAgIGlmICgoaGF2ZSA9IFJlYWQocHRyLT50ZXJtX25hbWVzLCB3YW50KSkgIT0gd2FudCkgeworCW1lbXNldChwdHItPnRlcm1fbmFtZXMgKyBoYXZlLCAwLCB3YW50IC0gaGF2ZSk7CisgICAgfQorICAgIHB0ci0+dGVybV9uYW1lc1t3YW50XSA9ICdcMCc7CisgICAgc3RyaW5nX3RhYmxlICs9ICh3YW50ICsgMSk7CisKKyAgICBpZiAoaGF2ZSA+IE1BWF9OQU1FX1NJWkUpCisJb2Zmc2V0ID0gKGhhdmUgLSBNQVhfTkFNRV9TSVpFKTsKKworICAgIC8qIGdyYWIgdGhlIGJvb2xlYW5zICovCisgICAgaWYgKChwdHItPkJvb2xlYW5zID0gVFlQRV9DQUxMT0MoTkNVUlNFU19TQk9PTCwKKwkJCQkgICAgIG1heChCT09MQ09VTlQsIGJvb2xfY291bnQpKSkgPT0gMAorCXx8IFJlYWQocHRyLT5Cb29sZWFucywgKHVuc2lnbmVkKSBib29sX2NvdW50KSA8IGJvb2xfY291bnQpIHsKKwlyZXR1cm4gKFRHRVRFTlRfTk8pOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgYm9vbGVhbnMgZW5kIG9uIGFuIG9kZCBieXRlLCBza2lwIGl0LiAgVGhlIG1hY2hpbmUgdGhleQorICAgICAqIG9yaWdpbmFsbHkgd3JvdGUgdGVybWluZm8gb24gbXVzdCBoYXZlIGJlZW4gYSAxNi1iaXQKKyAgICAgKiB3b3JkLW9yaWVudGVkIG1hY2hpbmUgdGhhdCB3b3VsZCB0cmFwIG91dCBpZiB5b3UgdHJpZWQgYQorICAgICAqIHdvcmQgYWNjZXNzIG9mZiBhIDItYnl0ZSBib3VuZGFyeS4KKyAgICAgKi8KKyAgICBldmVuX2JvdW5kYXJ5KG5hbWVfc2l6ZSArIGJvb2xfY291bnQpOworCisgICAgLyogZ3JhYiB0aGUgbnVtYmVycyAqLworICAgIGlmICgocHRyLT5OdW1iZXJzID0gVFlQRV9DQUxMT0Moc2hvcnQsIG1heChOVU1DT1VOVCwgbnVtX2NvdW50KSkpID09IDAKKwl8fCAhcmVhZF9zaG9ydHMoYnVmLCBudW1fY291bnQpKSB7CisJcmV0dXJuIChUR0VURU5UX05PKTsKKyAgICB9CisgICAgY29udmVydF9zaG9ydHMoYnVmLCBwdHItPk51bWJlcnMsIG51bV9jb3VudCk7CisKKyAgICBpZiAoKHB0ci0+U3RyaW5ncyA9IFRZUEVfQ0FMTE9DKGNoYXIgKiwgbWF4KFNUUkNPVU5ULCBzdHJfY291bnQpKSkgPT0gMCkKKwkgIHJldHVybiAoVEdFVEVOVF9OTyk7CisKKyAgICBpZiAoc3RyX2NvdW50KSB7CisJLyogZ3JhYiB0aGUgc3RyaW5nIG9mZnNldHMgKi8KKwlpZiAoIXJlYWRfc2hvcnRzKGJ1Ziwgc3RyX2NvdW50KSkgeworCSAgICByZXR1cm4gKFRHRVRFTlRfTk8pOworCX0KKwkvKiBmaW5hbGx5LCBncmFiIHRoZSBzdHJpbmcgdGFibGUgaXRzZWxmICovCisJaWYgKFJlYWQoc3RyaW5nX3RhYmxlLCAodW5zaWduZWQpIHN0cl9zaXplKSAhPSBzdHJfc2l6ZSkKKwkgICAgcmV0dXJuIChUR0VURU5UX05PKTsKKwljb252ZXJ0X3N0cmluZ3MoYnVmLCBwdHItPlN0cmluZ3MsIHN0cl9jb3VudCwgc3RyX3NpemUsIHN0cmluZ190YWJsZSk7CisgICAgfQorI2lmIE5DVVJTRVNfWE5BTUVTCisKKyAgICBwdHItPm51bV9Cb29sZWFucyA9IEJPT0xDT1VOVDsKKyAgICBwdHItPm51bV9OdW1iZXJzID0gTlVNQ09VTlQ7CisgICAgcHRyLT5udW1fU3RyaW5ncyA9IFNUUkNPVU5UOworCisgICAgLyoKKyAgICAgKiBSZWFkIGV4dGVuZGVkIGVudHJpZXMsIGlmIGFueSwgYWZ0ZXIgdGhlIG5vcm1hbCBlbmQgb2YgdGVybWluZm8gZGF0YS4KKyAgICAgKi8KKyAgICBldmVuX2JvdW5kYXJ5KHN0cl9zaXplKTsKKyAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCJSRUFEIGV4dGVuZGVkX2hlYWRlciBAJWQiLCBvZmZzZXQpKTsKKyAgICBpZiAoX25jX3VzZXJfZGVmaW5hYmxlICYmIHJlYWRfc2hvcnRzKGJ1ZiwgNSkpIHsKKwlpbnQgZXh0X2Jvb2xfY291bnQgPSBMT1dfTVNCKGJ1ZiArIDApOworCWludCBleHRfbnVtX2NvdW50ID0gTE9XX01TQihidWYgKyAyKTsKKwlpbnQgZXh0X3N0cl9jb3VudCA9IExPV19NU0IoYnVmICsgNCk7CisJaW50IGV4dF9zdHJfc2l6ZSA9IExPV19NU0IoYnVmICsgNik7CisJaW50IGV4dF9zdHJfbGltaXQgPSBMT1dfTVNCKGJ1ZiArIDgpOworCXVuc2lnbmVkIG5lZWQgPSAoZXh0X2Jvb2xfY291bnQgKyBleHRfbnVtX2NvdW50ICsgZXh0X3N0cl9jb3VudCk7CisJaW50IGJhc2UgPSAwOworCisJaWYgKG5lZWQgPj0gc2l6ZW9mKGJ1ZikKKwkgICAgfHwgZXh0X3N0cl9zaXplID49IChpbnQpIHNpemVvZihidWYpCisJICAgIHx8IGV4dF9zdHJfbGltaXQgPj0gKGludCkgc2l6ZW9mKGJ1ZikKKwkgICAgfHwgZXh0X2Jvb2xfY291bnQgPCAwCisJICAgIHx8IGV4dF9udW1fY291bnQgPCAwCisJICAgIHx8IGV4dF9zdHJfY291bnQgPCAwCisJICAgIHx8IGV4dF9zdHJfc2l6ZSA8IDAKKwkgICAgfHwgZXh0X3N0cl9saW1pdCA8IDApCisJICAgIHJldHVybiAoVEdFVEVOVF9OTyk7CisKKwlwdHItPm51bV9Cb29sZWFucyA9IEJPT0xDT1VOVCArIGV4dF9ib29sX2NvdW50OworCXB0ci0+bnVtX051bWJlcnMgPSBOVU1DT1VOVCArIGV4dF9udW1fY291bnQ7CisJcHRyLT5udW1fU3RyaW5ncyA9IFNUUkNPVU5UICsgZXh0X3N0cl9jb3VudDsKKworCXB0ci0+Qm9vbGVhbnMgPSB0eXBlUmVhbGxvYyhOQ1VSU0VTX1NCT09MLCBwdHItPm51bV9Cb29sZWFucywgcHRyLT5Cb29sZWFucyk7CisJcHRyLT5OdW1iZXJzID0gdHlwZVJlYWxsb2Moc2hvcnQsIHB0ci0+bnVtX051bWJlcnMsIHB0ci0+TnVtYmVycyk7CisJcHRyLT5TdHJpbmdzID0gdHlwZVJlYWxsb2MoY2hhciAqLCBwdHItPm51bV9TdHJpbmdzLCBwdHItPlN0cmluZ3MpOworCisJVFIoVFJBQ0VfREFUQUJBU0UsICgiZXh0ZW5kZWQgaGVhZGVyIGlzICVkLyVkLyVkKCVkOiVkKSIsCisJCQkgICAgZXh0X2Jvb2xfY291bnQsIGV4dF9udW1fY291bnQsIGV4dF9zdHJfY291bnQsCisJCQkgICAgZXh0X3N0cl9zaXplLCBleHRfc3RyX2xpbWl0KSk7CisKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJSRUFEICVkIGV4dGVuZGVkLWJvb2xlYW5zIEAlZCIsCisJCQkgICAgZXh0X2Jvb2xfY291bnQsIG9mZnNldCkpOworCWlmICgocHRyLT5leHRfQm9vbGVhbnMgPSBleHRfYm9vbF9jb3VudCkgIT0gMCkgeworCSAgICBpZiAoUmVhZChwdHItPkJvb2xlYW5zICsgQk9PTENPVU5ULCAodW5zaWduZWQpCisJCSAgICAgZXh0X2Jvb2xfY291bnQpICE9IGV4dF9ib29sX2NvdW50KQorCQlyZXR1cm4gKFRHRVRFTlRfTk8pOworCX0KKwlldmVuX2JvdW5kYXJ5KGV4dF9ib29sX2NvdW50KTsKKworCVRSKFRSQUNFX0RBVEFCQVNFLCAoIlJFQUQgJWQgZXh0ZW5kZWQtbnVtYmVycyBAJWQiLAorCQkJICAgIGV4dF9udW1fY291bnQsIG9mZnNldCkpOworCWlmICgocHRyLT5leHRfTnVtYmVycyA9IGV4dF9udW1fY291bnQpICE9IDApIHsKKwkgICAgaWYgKCFyZWFkX3Nob3J0cyhidWYsIGV4dF9udW1fY291bnQpKQorCQlyZXR1cm4gKFRHRVRFTlRfTk8pOworCSAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCJCZWZvcmUgY29udmVydGluZyBleHRlbmRlZC1udW1iZXJzIikpOworCSAgICBjb252ZXJ0X3Nob3J0cyhidWYsIHB0ci0+TnVtYmVycyArIE5VTUNPVU5ULCBleHRfbnVtX2NvdW50KTsKKwl9CisKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJSRUFEIGV4dGVuZGVkLW9mZnNldHMgQCVkIiwgb2Zmc2V0KSk7CisJaWYgKChleHRfc3RyX2NvdW50IHx8IG5lZWQpCisJICAgICYmICFyZWFkX3Nob3J0cyhidWYsIGV4dF9zdHJfY291bnQgKyBuZWVkKSkKKwkgICAgcmV0dXJuIChUR0VURU5UX05PKTsKKworCVRSKFRSQUNFX0RBVEFCQVNFLCAoIlJFQUQgJWQgYnl0ZXMgb2YgZXh0ZW5kZWQtc3RyaW5ncyBAJWQiLAorCQkJICAgIGV4dF9zdHJfbGltaXQsIG9mZnNldCkpOworCisJaWYgKGV4dF9zdHJfbGltaXQpIHsKKwkgICAgaWYgKChwdHItPmV4dF9zdHJfdGFibGUgPSB0eXBlTWFsbG9jKGNoYXIsIGV4dF9zdHJfbGltaXQpKSA9PSAwKQorCQkgIHJldHVybiAoVEdFVEVOVF9OTyk7CisJICAgIGlmIChSZWFkKHB0ci0+ZXh0X3N0cl90YWJsZSwgKHVuc2lnbmVkKSBleHRfc3RyX2xpbWl0KSAhPSBleHRfc3RyX2xpbWl0KQorCQlyZXR1cm4gKFRHRVRFTlRfTk8pOworCSAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCJmaXJzdCBleHRlbmRlZC1zdHJpbmcgaXMgJXMiLCBfbmNfdmlzYnVmKHB0ci0+ZXh0X3N0cl90YWJsZSkpKTsKKwl9CisKKwlpZiAoKHB0ci0+ZXh0X1N0cmluZ3MgPSBleHRfc3RyX2NvdW50KSAhPSAwKSB7CisJICAgIFRSKFRSQUNFX0RBVEFCQVNFLAorCSAgICAgICAoIkJlZm9yZSBjb21wdXRpbmcgZXh0ZW5kZWQtc3RyaW5nIGNhcGFiaWxpdGllcyBzdHJfY291bnQ9JWQsIGV4dF9zdHJfY291bnQ9JWQiLAorCQlzdHJfY291bnQsIGV4dF9zdHJfY291bnQpKTsKKwkgICAgY29udmVydF9zdHJpbmdzKGJ1ZiwgcHRyLT5TdHJpbmdzICsgc3RyX2NvdW50LCBleHRfc3RyX2NvdW50LAorCQkJICAgIGV4dF9zdHJfbGltaXQsIHB0ci0+ZXh0X3N0cl90YWJsZSk7CisJICAgIGZvciAoaSA9IGV4dF9zdHJfY291bnQgLSAxOyBpID49IDA7IGktLSkgeworCQlUUihUUkFDRV9EQVRBQkFTRSwgKCJNT1ZFIGZyb20gWyVkOiVkXSAlcyIsCisJCQkJICAgIGksIGkgKyBzdHJfY291bnQsCisJCQkJICAgIF9uY192aXNidWYocHRyLT5TdHJpbmdzW2kgKyBzdHJfY291bnRdKSkpOworCQlwdHItPlN0cmluZ3NbaSArIFNUUkNPVU5UXSA9IHB0ci0+U3RyaW5nc1tpICsgc3RyX2NvdW50XTsKKwkJaWYgKFZBTElEX1NUUklORyhwdHItPlN0cmluZ3NbaSArIFNUUkNPVU5UXSkpCisJCSAgICBiYXNlICs9IChzdHJsZW4ocHRyLT5TdHJpbmdzW2kgKyBTVFJDT1VOVF0pICsgMSk7CisJCVRSKFRSQUNFX0RBVEFCQVNFLCAoIi4uLiB0byAgICBbJWRdICVzIiwKKwkJCQkgICAgaSArIFNUUkNPVU5ULAorCQkJCSAgICBfbmNfdmlzYnVmKHB0ci0+U3RyaW5nc1tpICsgU1RSQ09VTlRdKSkpOworCSAgICB9CisJfQorCisJaWYgKG5lZWQpIHsKKwkgICAgaWYgKGV4dF9zdHJfY291bnQgPj0gKE1BWF9FTlRSWV9TSVpFICogMikpCisJCSAgcmV0dXJuIChUR0VURU5UX05PKTsKKwkgICAgaWYgKChwdHItPmV4dF9OYW1lcyA9IFRZUEVfQ0FMTE9DKGNoYXIgKiwgbmVlZCkpID09IDApCisJCSAgcmV0dXJuIChUR0VURU5UX05PKTsKKwkgICAgVFIoVFJBQ0VfREFUQUJBU0UsCisJICAgICAgICgiZXh0X05BTUVTIHN0YXJ0aW5nIEAlZCBpbiBleHRlbmRlZF9zdHJpbmdzLCBmaXJzdCA9ICVzIiwKKwkJYmFzZSwgX25jX3Zpc2J1ZihwdHItPmV4dF9zdHJfdGFibGUgKyBiYXNlKSkpOworCSAgICBjb252ZXJ0X3N0cmluZ3MoYnVmICsgKDIgKiBleHRfc3RyX2NvdW50KSwKKwkJCSAgICBwdHItPmV4dF9OYW1lcywKKwkJCSAgICAoaW50KSBuZWVkLAorCQkJICAgIGV4dF9zdHJfbGltaXQsIHB0ci0+ZXh0X3N0cl90YWJsZSArIGJhc2UpOworCX0KKworCVQoKCIuLi5kb25lIHJlYWRpbmcgdGVybWluZm8gYm9vbCAlZCglZCkgbnVtICVkKCVkKSBzdHIgJWQoJWQpIiwKKwkgICBwdHItPm51bV9Cb29sZWFucywgcHRyLT5leHRfQm9vbGVhbnMsCisJICAgcHRyLT5udW1fTnVtYmVycywgcHRyLT5leHRfTnVtYmVycywKKwkgICBwdHItPm51bV9TdHJpbmdzLCBwdHItPmV4dF9TdHJpbmdzKSk7CisKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJleHRlbmQ6IG51bV9Cb29sZWFuczolZCIsIHB0ci0+bnVtX0Jvb2xlYW5zKSk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogTkNVUlNFU19YTkFNRVMgKi8KKyAgICB7CisJVCgoIi4uLmRvbmUgcmVhZGluZyB0ZXJtaW5mbyBib29sICVkIG51bSAlZCBzdHIgJWQiLAorCSAgIGJvb2xfY291bnQsIG51bV9jb3VudCwgc3RyX2NvdW50KSk7CisjaWYgTkNVUlNFU19YTkFNRVMKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJub3JtYWw6IG51bV9Cb29sZWFuczolZCIsIHB0ci0+bnVtX0Jvb2xlYW5zKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBmb3IgKGkgPSBib29sX2NvdW50OyBpIDwgQk9PTENPVU5UOyBpKyspCisJcHRyLT5Cb29sZWFuc1tpXSA9IEZBTFNFOworICAgIGZvciAoaSA9IG51bV9jb3VudDsgaSA8IE5VTUNPVU5UOyBpKyspCisJcHRyLT5OdW1iZXJzW2ldID0gQUJTRU5UX05VTUVSSUM7CisgICAgZm9yIChpID0gc3RyX2NvdW50OyBpIDwgU1RSQ09VTlQ7IGkrKykKKwlwdHItPlN0cmluZ3NbaV0gPSBBQlNFTlRfU1RSSU5HOworCisgICAgcmV0dXJuIChUR0VURU5UX1lFUyk7Cit9CisKKy8qCisgKglpbnQKKyAqCV9uY19yZWFkX2ZpbGVfZW50cnkoZmlsZW5hbWUsIHB0cikKKyAqCisgKglSZWFkIHRoZSBjb21waWxlZCB0ZXJtaW5mbyBlbnRyeSBpbiB0aGUgZ2l2ZW4gZmlsZSBpbnRvIHRoZQorICoJc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgcHRyLCBhbGxvY2F0aW5nIHNwYWNlIGZvciB0aGUgc3RyaW5nCisgKgl0YWJsZS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3JlYWRfZmlsZV9lbnRyeShjb25zdCBjaGFyICpjb25zdCBmaWxlbmFtZSwgVEVSTVRZUEUgKnB0cikKKy8qIHJldHVybiAxIGlmIHJlYWQsIDAgaWYgbm90IGZvdW5kIG9yIGdhcmJsZWQgKi8KK3sKKyAgICBpbnQgY29kZSwgZmQgPSAtMTsKKyAgICBpbnQgbGltaXQ7CisgICAgY2hhciBidWZmZXJbTUFYX0VOVFJZX1NJWkUgKyAxXTsKKworICAgIGlmIChfbmNfYWNjZXNzKGZpbGVuYW1lLCBSX09LKSA8IDAKKwl8fCAoZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKSkgPCAwKSB7CisJVCgoImNhbm5vdCBvcGVuIHRlcm1pbmZvICVzIChlcnJubz0lZCkiLCBmaWxlbmFtZSwgZXJybm8pKTsKKwljb2RlID0gVEdFVEVOVF9OTzsKKyAgICB9IGVsc2UgeworCWlmICgobGltaXQgPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkgPiAwKSB7CisKKwkgICAgVCgoInJlYWQgdGVybWluZm8gJXMiLCBmaWxlbmFtZSkpOworCSAgICBpZiAoKGNvZGUgPSBfbmNfcmVhZF90ZXJtdHlwZShwdHIsIGJ1ZmZlciwgbGltaXQpKSA9PSBUR0VURU5UX05PKSB7CisJCV9uY19mcmVlX3Rlcm10eXBlKHB0cik7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBjb2RlID0gVEdFVEVOVF9OTzsKKwl9CisJY2xvc2UoZmQpOworICAgIH0KKworICAgIHJldHVybiAoY29kZSk7Cit9CisKKy8qCisgKiBCdWlsZCBhIHRlcm1pbmZvIHBhdGhuYW1lIGFuZCB0cnkgdG8gcmVhZCB0aGUgZGF0YS4gIFJldHVybnMgVEdFVEVOVF9ZRVMgb24KKyAqIHN1Y2Nlc3MsIFRHRVRFTlRfTk8gb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX25jX3JlYWRfdGljX2VudHJ5KGNoYXIgKmZpbGVuYW1lLAorCQkgICB1bnNpZ25lZCBsaW1pdCwKKwkJICAgY29uc3QgY2hhciAqY29uc3QgcGF0aCwKKwkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgVEVSTVRZUEUgKmNvbnN0IHRwKQoreworICAgIGludCByZXN1bHQgPSBUR0VURU5UX05POworCisgICAgLyoKKyAgICAgKiBJZiB3ZSBhcmUgbG9va2luZyBpbiBhIGRpcmVjdG9yeSwgYXNzdW1lIHRoZSBlbnRyeSBpcyBhIGZpbGUgdW5kZXIgdGhhdCwKKyAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIG5vcm1hbCBydWxlcy4KKyAgICAgKgorICAgICAqIEZJWE1FIC0gYWRkIGNhc2VsZXNzLWZpbGVuYW1lIGZpeHVwLgorICAgICAqLworICAgIGlmIChfbmNfaXNfZGlyX3BhdGgocGF0aCkpIHsKKwl1bnNpZ25lZCBuZWVkID0gNCArIHN0cmxlbihwYXRoKSArIHN0cmxlbihuYW1lKTsKKworCWlmIChuZWVkIDw9IGxpbWl0KSB7CisJICAgICh2b2lkKSBzcHJpbnRmKGZpbGVuYW1lLCAiJXMvIiBMRUFGX0ZNVCAiLyVzIiwgcGF0aCwgKm5hbWUsIG5hbWUpOworCSAgICByZXN1bHQgPSBfbmNfcmVhZF9maWxlX2VudHJ5KGZpbGVuYW1lLCB0cCk7CisJfQorICAgIH0KKyNpZiBVU0VfSEFTSEVEX0RCCisgICAgZWxzZSB7CisJc3RhdGljIGNvbnN0IGNoYXIgc3VmZml4W10gPSBEQk1fU1VGRklYOworCURCICpjYXBkYnA7CisJdW5zaWduZWQgbGVucyA9IHNpemVvZihzdWZmaXgpIC0gMTsKKwl1bnNpZ25lZCBzaXplID0gc3RybGVuKHBhdGgpOworCXVuc2lnbmVkIG5lZWQgPSBsZW5zICsgc2l6ZTsKKworCWlmIChuZWVkIDw9IGxpbWl0KSB7CisJICAgIGlmIChzaXplID49IGxlbnMKKwkJJiYgIXN0cmNtcChwYXRoICsgc2l6ZSAtIGxlbnMsIHN1ZmZpeCkpCisJCSh2b2lkKSBzdHJjcHkoZmlsZW5hbWUsIHBhdGgpOworCSAgICBlbHNlCisJCSh2b2lkKSBzcHJpbnRmKGZpbGVuYW1lLCAiJXMlcyIsIHBhdGgsIHN1ZmZpeCk7CisKKwkgICAgLyoKKwkgICAgICogSXQgd291bGQgYmUgbmljZSB0byBvcHRpbWl6ZSB0aGUgZGJvcGVuL2Nsb3NlIGFjdGl2aXR5LCBhcworCSAgICAgKiBkb25lIGluIHRoZSBjZ2V0ZW50IGltcGxlbWVudGF0aW9uIGZvciB0Yz0gY2xhdXNlcy4gIEhvd2V2ZXIsCisJICAgICAqIHNpbmNlIHdlIHN1cHBvcnQgbXVsdGlwbGUgZGF0YWJhc2UgbG9jYXRpb25zLCB3ZSBjYW5ub3QgZG8KKwkgICAgICogdGhhdC4KKwkgICAgICovCisJICAgIGlmICgoY2FwZGJwID0gX25jX2RiX29wZW4oZmlsZW5hbWUsIEZBTFNFKSkgIT0gMCkgeworCQlEQlQga2V5LCBkYXRhOworCQlpbnQgcmVjY250ID0gMDsKKwkJY2hhciAqc2F2ZSA9IHN0cmR1cChuYW1lKTsKKworCQltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKGtleSkpOworCQlrZXkuZGF0YSA9IHNhdmU7CisJCWtleS5zaXplID0gc3RybGVuKHNhdmUpOworCisJCS8qCisJCSAqIFRoaXMgbG9va3VwIGNvdWxkIHJldHVybiB0ZXJtY2FwIGRhdGEsIHdoaWNoIHdlIGRvIG5vdCB3YW50LiAKKwkJICogV2UgYXJlIGxvb2tpbmcgZm9yIGNvbXBpbGVkIChiaW5hcnkpIHRlcm1pbmZvIGRhdGEuCisJCSAqCisJCSAqIGNnZXRlbnQgdXNlcyBhIHR3by1sZXZlbCBsb29rdXAuICBPbiB0aGUgZmlyc3QgaXQgdXNlcyB0aGUKKwkJICogZ2l2ZW4gbmFtZSB0byByZXR1cm4gYSByZWNvcmQgY29udGFpbmluZyBvbmx5IHRoZSBhbGlhc2VzCisJCSAqIGZvciBhbiBlbnRyeS4gIE9uIHRoZSBzZWNvbmQgKHVzaW5nIHRoYXQgbGlzdCBvZiBhbGlhc2VzIGFzCisJCSAqIGEga2V5KSwgaXQgcmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgdGVybWluYWwgZGVzY3JpcHRpb24uIAorCQkgKiBXZSBleHBlY3Qgc2Vjb25kIGxvb2t1cCB0byByZXR1cm4gZGF0YSBiZWdpbm5pbmcgd2l0aCB0aGUKKwkJICogc2FtZSBzZXQgb2YgYWxpYXNlcy4KKwkJICoKKwkJICogRm9yIGNvbXBpbGVkIHRlcm1pbmZvLCB0aGUgbGlzdCBvZiBhbGlhc2VzIGluIHRoZSBzZWNvbmQKKwkJICogY2FzZSB3aWxsIGJlIG51bGwtdGVybWluYXRlZC4gIEEgdGVybWNhcCBlbnRyeSB3aWxsIG5vdCBiZSwKKwkJICogYW5kIHdpbGwgcnVuIG9uIGludG8gdGhlIGRlc2NyaXB0aW9uLiAgU28gd2UgY2FuIGVhc2lseQorCQkgKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d28gKHNvdXJjZS9iaW5hcnkpIGJ5IGNoZWNraW5nIHRoZQorCQkgKiBsZW5ndGhzLgorCQkgKi8KKwkJd2hpbGUgKF9uY19kYl9nZXQoY2FwZGJwLCAma2V5LCAmZGF0YSkgPT0gMCkgeworCQkgICAgaW50IHVzZWQgPSBkYXRhLnNpemUgLSAxOworCQkgICAgY2hhciAqaGF2ZSA9IChjaGFyICopIGRhdGEuZGF0YTsKKworCQkgICAgaWYgKCpoYXZlKysgPT0gMCkgeworCQkJaWYgKGRhdGEuc2l6ZSA+IGtleS5zaXplCisJCQkgICAgJiYgSVNfVElDX01BR0lDKGhhdmUpKSB7CisJCQkgICAgcmVzdWx0ID0gX25jX3JlYWRfdGVybXR5cGUodHAsIGhhdmUsIHVzZWQpOworCQkJICAgIGlmIChyZXN1bHQgPT0gVEdFVEVOVF9OTykgeworCQkJCV9uY19mcmVlX3Rlcm10eXBlKHRwKTsKKwkJCSAgICB9CisJCQl9CisJCQlicmVhazsKKwkJICAgIH0KKworCQkgICAgLyoKKwkJICAgICAqIEp1c3QgaW4gY2FzZSB3ZSBoYXZlIGEgY29ycnVwdCBkYXRhYmFzZSwgZG8gbm90IHdhc3RlCisJCSAgICAgKiB0aW1lIHdpdGggaXQuCisJCSAgICAgKi8KKwkJICAgIGlmICgrK3JlY2NudCA+PSAzKQorCQkJYnJlYWs7CisKKwkJICAgIC8qCisJCSAgICAgKiBQcmVwYXJlIGZvciB0aGUgc2Vjb25kIGxldmVsLgorCQkgICAgICovCisJCSAgICBrZXkuZGF0YSA9IGhhdmU7CisJCSAgICBrZXkuc2l6ZSA9IHVzZWQ7CisJCX0KKworCQlfbmNfZGJfY2xvc2UoY2FwZGJwKTsKKwkJZnJlZShzYXZlKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qIFVTRV9EQVRBQkFTRSAqLworCisvKgorICoJX25jX3JlYWRfZW50cnkoY2hhciAqbmFtZSwgY2hhciAqZmlsZW5hbWUsIFRFUk1UWVBFICp0cCkKKyAqCisgKglGaW5kIGFuZCByZWFkIHRoZSBjb21waWxlZCBlbnRyeSBmb3IgYSBnaXZlbiB0ZXJtaW5hbCB0eXBlLAorICoJaWYgaXQgZXhpc3RzLiAgV2UgdGFrZSBwYWlucyBoZXJlIHRvIG1ha2Ugc3VyZSBubyBjb21iaW5hdGlvbgorICoJb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0ZXJtaW5hbCB0eXBlIG5hbWUgY2FuIGJlIHVzZWQgdG8KKyAqCW92ZXJydW4gdGhlIGZpbGUgYnVmZmVyLgorICovCisKK05DVVJTRVNfRVhQT1JUKGludCkKK19uY19yZWFkX2VudHJ5KGNvbnN0IGNoYXIgKmNvbnN0IG5hbWUsIGNoYXIgKmNvbnN0IGZpbGVuYW1lLCBURVJNVFlQRSAqY29uc3QgdHApCit7CisgICAgaW50IGNvZGUgPSBUR0VURU5UX05POworCisgICAgaWYgKHN0cmxlbihuYW1lKSA9PSAwCisJfHwgc3RyY21wKG5hbWUsICIuIikgPT0gMAorCXx8IHN0cmNtcChuYW1lLCAiLi4iKSA9PSAwCisJfHwgX25jX3BhdGhsYXN0KG5hbWUpICE9IDAKKwl8fCBzdHJjaHIobmFtZSwgTkNVUlNFU19QQVRIU0VQKSAhPSAwKSB7CisJVCgoImlsbGVnYWwgb3IgbWlzc2luZyBlbnRyeSBuYW1lICclcyciLCBuYW1lKSk7CisgICAgfSBlbHNlIHsKKyNpZiBVU0VfREFUQUJBU0UKKwlEQkRJUlMgc3RhdGUgPSBkYmRUSUM7CisJaW50IG9mZnNldCA9IDA7CisJY29uc3QgY2hhciAqcGF0aDsKKworCXdoaWxlICgocGF0aCA9IF9uY19uZXh0X2RiKCZzdGF0ZSwgJm9mZnNldCkpICE9IDApIHsKKwkgICAgY29kZSA9IF9uY19yZWFkX3RpY19lbnRyeShmaWxlbmFtZSwgUEFUSF9NQVgsIHBhdGgsIG5hbWUsIHRwKTsKKwkgICAgaWYgKGNvZGUgPT0gVEdFVEVOVF9ZRVMpIHsKKwkJX25jX2xhc3RfZGIoKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisjZW5kaWYKKyNpZiBVU0VfVEVSTUNBUAorCWlmIChjb2RlICE9IFRHRVRFTlRfWUVTKSB7CisJICAgIGNvZGUgPSBfbmNfcmVhZF90ZXJtY2FwX2VudHJ5KG5hbWUsIHRwKTsKKwkgICAgc3ByaW50ZihmaWxlbmFtZSwgIiUuKnMiLCBQQVRIX01BWCAtIDEsIF9uY19nZXRfc291cmNlKCkpOworCX0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gY29kZTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vcmVhZF90ZXJtY2FwLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3JlYWRfdGVybWNhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGQxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3JlYWRfdGVybWNhcC5jCkBAIC0wLDAgKzEsMTE3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGVybWNhcCBjb21wYXRpYmlsaXR5IHN1cHBvcnQKKyAqCisgKiBJZiB5b3VyIE9TIGludGVncmF0b3IgZGlkbid0IGluc3RhbGwgYSB0ZXJtaW5mbyBkYXRhYmFzZSwgeW91IGNhbiBjYWxsCisgKiBfbmNfcmVhZF90ZXJtY2FwX2VudHJ5KCkgdG8gc3VwcG9ydCByZWFkaW5nIGFuZCB0cmFuc2xhdGluZyBjYXBhYmlsaXRpZXMKKyAqIGZyb20gdGhlIHN5c3RlbSB0ZXJtY2FwIGZpbGUuICBUaGlzIGlzIGEga2x1ZGdlOyBpdCB3aWxsIGJ1bGsgdXAgYW5kIHNsb3cKKyAqIGRvd24gZXZlcnkgcHJvZ3JhbSB0aGF0IHVzZXMgbmN1cnNlcywgYW5kIHRyYW5zbGF0ZWQgdGVybWNhcCBlbnRyaWVzIGNhbm5vdAorICogdXNlIGZ1bGwgdGVybWluZm8gY2FwYWJpbGl0aWVzLiAgRG9uJ3QgdXNlIGl0IHVubGVzcyB5b3UgYWJzb2x1dGVseSBoYXZlIHRvOworICogaW5zdGVhZCwgZ2V0IHlvdXIgc3lzdGVtIHBlb3BsZSB0byBydW4gdGljKDEpIGZyb20gcm9vdCBvbiB0aGUgdGVybWluZm8KKyAqIG1hc3RlciBpbmNsdWRlZCB3aXRoIG5jdXJzZXMgdG8gdHJhbnNsYXRlIGl0IGludG8gYSB0ZXJtaW5mbyBkYXRhYmFzZS4KKyAqCisgKiBJZiBVU0VfR0VUQ0FQIGlzIGVuYWJsZWQsIHdlIHVzZSB3aGF0IGlzIGVmZmVjdGl2ZWx5IGEgY29weSBvZiB0aGUgNC40QlNECisgKiBnZXRjYXAgY29kZSB0byBmZXRjaCBlbnRyaWVzLiAgVGhlcmUgYXJlIGRpc2FkdmFudGFnZXMgdG8gdGhpczsgbWFpbmx5IHRoYXQKKyAqIGdldGNhcCgzKSBkb2VzIGl0cyBvd24gcmVzb2x1dGlvbiwgbWVhbmluZyB0aGF0IGVudHJpZXMgcmVhZCBpbiBpbiB0aGlzIHdheQorICogY2FuJ3QgcmVmZXJlbmNlIHRoZSB0ZXJtaW5mbyB0cmVlLiAgVGhlIG9ubHkgdGhpbmcgaXQgYnV5cyBpcyBmYXN0ZXIgc3RhcnR1cAorICogdGltZSwgZ2V0Y2FwKDMpIGlzIG11Y2ggZmFzdGVyIHRoYW4gb3VyIHRpYyBwYXJzZXIuCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogcmVhZF90ZXJtY2FwLmMsdiAxLjcxIDIwMDYvMDcvMjkgMTI6MDY6NTEgdG9tIEV4cCAkIikKKworI2lmICFQVVJFX1RFUk1JTkZPCisKKyNkZWZpbmUgVENfU1VDQ0VTUyAgICAgMAorI2RlZmluZSBUQ19OT1RfRk9VTkQgIC0xCisjZGVmaW5lIFRDX1NZU19FUlIgICAgLTIKKyNkZWZpbmUgVENfUkVGX0xPT1AgICAtMworI2RlZmluZSBUQ19VTlJFU09MVkVEIC00CS8qIHRoaXMgaXMgbm90IHJldHVybmVkIGJ5IEJTRCBjZ2V0ZW50ICovCisKK3N0YXRpYyBOQ1VSU0VTX0NPTlNUIGNoYXIgKgorZ2V0X3Rlcm1wYXRoKHZvaWQpCit7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpyZXN1bHQ7CisKKyAgICBpZiAoIXVzZV90ZXJtaW5mb192YXJzKCkgfHwgKHJlc3VsdCA9IGdldGVudigiVEVSTVBBVEgiKSkgPT0gMCkKKwlyZXN1bHQgPSBURVJNUEFUSDsKKyAgICBUKCgiVEVSTVBBVEggaXMgJXMiLCByZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgVVNFX0dFVENBUAorCisjaWYgSEFWRV9CU0RfQ0dFVEVOVAorI2RlZmluZSBfbmNfY2dldGNhcCAgIGNnZXRjYXAKKyNkZWZpbmUgX25jX2NnZXRlbnQoYnVmLCBvbGluZSwgZGJfYXJyYXksIG5hbWUpIGNnZXRlbnQoYnVmLCBkYl9hcnJheSwgbmFtZSkKKyNkZWZpbmUgX25jX2NnZXRtYXRjaCBjZ2V0bWF0Y2gKKyNkZWZpbmUgX25jX2NnZXRzZXQgICBjZ2V0c2V0CisjZWxzZQorc3RhdGljIGludCBfbmNfY2dldG1hdGNoKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK3N0YXRpYyBpbnQgX25jX2dldGVudChjaGFyICoqLCB1bnNpZ25lZCAqLCBpbnQgKiwgaW50LCBjaGFyICoqLCBpbnQsIGNvbnN0IGNoYXIKKwkJICAgICAgKiwgaW50LCBjaGFyICopOworc3RhdGljIGludCBfbmNfbmZjbXAoY29uc3QgY2hhciAqLCBjaGFyICopOworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2FzZXkgTGVlZG9tIG9mIExhd3JlbmNlIExpdmVybW9yZSBOYXRpb25hbCBMYWJvcmF0b3J5LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZ2V0Y2FwLmMJOC4zIChCZXJrZWxleSkgMy8yNS85NCI7ICovCisKKyNkZWZpbmUJQkZSQUcJCTEwMjQKKyNkZWZpbmUJQlNJWkUJCTEwMjQKKyNkZWZpbmUJTUFYX1JFQ1VSU0lPTgkzMgkvKiBtYXhpbXVtIGdldGVudCByZWN1cnNpb24gKi8KKworc3RhdGljIHNpemVfdCB0b3ByZWNsZW47CS8qIHRvcHJlYyBsZW5ndGggKi8KK3N0YXRpYyBjaGFyICp0b3ByZWM7CQkvKiBBZGRpdGlvbmFsIHJlY29yZCBzcGVjaWZpZWQgYnkgY2dldHNldCgpICovCitzdGF0aWMgaW50IGdvdHRvcHJlYzsJCS8qIEZsYWcgaW5kaWNhdGluZyByZXRyaWV2YWwgb2YgdG9wcmVjb3JkICovCisKKy8qCisgKiBDZ2V0c2V0KCkgYWxsb3dzIHRoZSBhZGRpdGlvbiBvZiBhIHVzZXIgc3BlY2lmaWVkIGJ1ZmZlciB0byBiZSBhZGRlZCB0byB0aGUKKyAqIGRhdGFiYXNlIGFycmF5LCBpbiBlZmZlY3QgInB1c2hpbmciIHRoZSBidWZmZXIgb24gdG9wIG9mIHRoZSB2aXJ0dWFsCisgKiBkYXRhYmFzZS4gIDAgaXMgcmV0dXJuZWQgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX25jX2NnZXRzZXQoY29uc3QgY2hhciAqZW50KQoreworICAgIGlmIChlbnQgPT0gMCkgeworCUZyZWVJZk5lZWRlZCh0b3ByZWMpOworCXRvcHJlYyA9IDA7CisJdG9wcmVjbGVuID0gMDsKKwlyZXR1cm4gKDApOworICAgIH0KKyAgICB0b3ByZWNsZW4gPSBzdHJsZW4oZW50KTsKKyAgICBpZiAoKHRvcHJlYyA9IHR5cGVNYWxsb2MoY2hhciwgdG9wcmVjbGVuICsgMSkpID09IDApIHsKKwllcnJubyA9IEVOT01FTTsKKwlyZXR1cm4gKC0xKTsKKyAgICB9CisgICAgZ290dG9wcmVjID0gMDsKKyAgICAodm9pZCkgc3RyY3B5KHRvcHJlYywgZW50KTsKKyAgICByZXR1cm4gKDApOworfQorCisvKgorICogQ2dldGNhcCBzZWFyY2hlcyB0aGUgY2FwYWJpbGl0eSByZWNvcmQgYnVmIGZvciB0aGUgY2FwYWJpbGl0eSBjYXAgd2l0aCB0eXBlCisgKiBgdHlwZScuICBBIHBvaW50ZXIgdG8gdGhlIHZhbHVlIG9mIGNhcCBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLCAwIGlmIHRoZQorICogcmVxdWVzdGVkIGNhcGFiaWxpdHkgY291bGRuJ3QgYmUgZm91bmQuCisgKgorICogU3BlY2lmeWluZyBhIHR5cGUgb2YgJzonIG1lYW5zIHRoYXQgbm90aGluZyBzaG91bGQgZm9sbG93IGNhcCAoOmNhcDopLiAgSW4KKyAqIHRoaXMgY2FzZSBhIHBvaW50ZXIgdG8gdGhlIHRlcm1pbmF0aW5nICc6JyBvciBOVUwgd2lsbCBiZSByZXR1cm5lZCBpZiBjYXAgaXMKKyAqIGZvdW5kLgorICoKKyAqIElmIChjYXAsICdAJykgb3IgKGNhcCwgdGVybWluYXRvciwgJ0AnKSBpcyBmb3VuZCBiZWZvcmUgKGNhcCwgdGVybWluYXRvcikKKyAqIHJldHVybiAwLgorICovCitzdGF0aWMgY2hhciAqCitfbmNfY2dldGNhcChjaGFyICpidWYsIGNvbnN0IGNoYXIgKmNhcCwgaW50IHR5cGUpCit7CisgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqY3A7CisgICAgcmVnaXN0ZXIgY2hhciAqYnA7CisKKyAgICBicCA9IGJ1ZjsKKyAgICBmb3IgKDs7KSB7CisJLyoKKwkgKiBTa2lwIHBhc3QgdGhlIGN1cnJlbnQgY2FwYWJpbGl0eSBmaWVsZCAtIGl0J3MgZWl0aGVyIHRoZQorCSAqIG5hbWUgZmllbGQgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoIHRoZSBsb29wLCBvcgorCSAqIHRoZSByZW1haW5kZXIgb2YgYSBmaWVsZCB3aG9zZSBuYW1lIGZhaWxlZCB0byBtYXRjaCBjYXAuCisJICovCisJZm9yICg7OykgeworCSAgICBpZiAoKmJwID09ICdcMCcpCisJCXJldHVybiAoMCk7CisJICAgIGVsc2UgaWYgKCpicCsrID09ICc6JykKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gbWF0Y2ggKGNhcCwgdHlwZSkgaW4gYnVmLgorCSAqLworCWZvciAoY3AgPSBjYXA7ICpjcCA9PSAqYnAgJiYgKmJwICE9ICdcMCc7IGNwKyssIGJwKyspCisJICAgIGNvbnRpbnVlOworCWlmICgqY3AgIT0gJ1wwJykKKwkgICAgY29udGludWU7CisJaWYgKCpicCA9PSAnQCcpCisJICAgIHJldHVybiAoMCk7CisJaWYgKHR5cGUgPT0gJzonKSB7CisJICAgIGlmICgqYnAgIT0gJ1wwJyAmJiAqYnAgIT0gJzonKQorCQljb250aW51ZTsKKwkgICAgcmV0dXJuIChicCk7CisJfQorCWlmICgqYnAgIT0gdHlwZSkKKwkgICAgY29udGludWU7CisJYnArKzsKKwlyZXR1cm4gKCpicCA9PSAnQCcgPyAwIDogYnApOworICAgIH0KKyAgICAvKiBOT1RSRUFDSEVEICovCit9CisKKy8qCisgKiBDZ2V0ZW50IGV4dHJhY3RzIHRoZSBjYXBhYmlsaXR5IHJlY29yZCBuYW1lIGZyb20gdGhlIE5VTEwgdGVybWluYXRlZCBmaWxlCisgKiBhcnJheSBkYl9hcnJheSBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBtYWxsb2MnZCBjb3B5IG9mIGl0IGluIGJ1Zi4gIEJ1ZgorICogbXVzdCBiZSByZXRhaW5lZCB0aHJvdWdoIGFsbCBzdWJzZXF1ZW50IGNhbGxzIHRvIGNnZXRjYXAsIGNnZXRudW0sIGNnZXRmbGFnLAorICogYW5kIGNnZXRzdHIsIGJ1dCBtYXkgdGhlbiBiZSBmcmVlZC4KKyAqCisgKiBSZXR1cm5zOgorICoKKyAqIHBvc2l0aXZlICMgICAgb24gc3VjY2VzcyAoaS5lLiwgdGhlIGluZGV4IGluIGRiX2FycmF5KQorICogVENfTk9UX0ZPVU5EICBpZiB0aGUgcmVxdWVzdGVkIHJlY29yZCBjb3VsZG4ndCBiZSBmb3VuZAorICogVENfU1lTX0VSUiAgICBpZiBhIHN5c3RlbSBlcnJvciB3YXMgZW5jb3VudGVyZWQgKGUuZy4sY291bGRuJ3Qgb3BlbiBhIGZpbGUpCisgKiBUQ19SRUZfTE9PUCAgIGlmIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBsb29wIGlzIGRldGVjdGVkCisgKiBUQ19VTlJFU09MVkVEIGlmIHdlIGhhZCB0b28gbWFueSByZWN1cnJlbmNlcyB0byByZXNvbHZlCisgKi8KK3N0YXRpYyBpbnQKK19uY19jZ2V0ZW50KGNoYXIgKipidWYsIGludCAqb2xpbmUsIGNoYXIgKipkYl9hcnJheSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBkdW1teTsKKworICAgIHJldHVybiAoX25jX2dldGVudChidWYsICZkdW1teSwgb2xpbmUsIDAsIGRiX2FycmF5LCAtMSwgbmFtZSwgMCwgMCkpOworfQorCisvKgorICogR2V0ZW50IGltcGxlbWVudHMgdGhlIGZ1bmN0aW9ucyBvZiBjZ2V0ZW50LiAgSWYgZmQgaXMgbm9uLW5lZ2F0aXZlLAorICogKmRiX2FycmF5IGhhcyBhbHJlYWR5IGJlZW4gb3BlbmVkIGFuZCBmZCBpcyB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IuICBXZQorICogZG8gdGhpcyB0byBzYXZlIHRpbWUgYW5kIGF2b2lkIHVzaW5nIHVwIGZpbGUgZGVzY3JpcHRvcnMgZm9yIHRjPQorICogcmVjdXJzaW9ucy4KKyAqCisgKiBHZXRlbnQgcmV0dXJucyB0aGUgc2FtZSBzdWNjZXNzL2ZhaWx1cmUgY29kZXMgYXMgY2dldGVudC4gIE9uIHN1Y2Nlc3MsIGEKKyAqIHBvaW50ZXIgdG8gYSBtYWxsb2MnZCBjYXBhYmlsaXR5IHJlY29yZCB3aXRoIGFsbCB0Yz0gY2FwYWJpbGl0aWVzIGZ1bGx5CisgKiBleHBhbmRlZCBhbmQgaXRzIGxlbmd0aCAobm90IGluY2x1ZGluZyB0cmFpbGluZyBBU0NJSSBOVUwpIGFyZSBsZWZ0IGluCisgKiAqY2FwIGFuZCAqbGVuLgorICoKKyAqIEJhc2ljIGFsZ29yaXRobToKKyAqCSsgQWxsb2NhdGUgbWVtb3J5IGluY3JlbWVudGFsbHkgYXMgbmVlZGVkIGluIGNodW5rcyBvZiBzaXplIEJGUkFHCisgKgkgIGZvciBjYXBhYmlsaXR5IGJ1ZmZlci4KKyAqCSsgUmVjdXJzZSBmb3IgZWFjaCB0Yz1uYW1lIGFuZCBpbnRlcnBvbGF0ZSByZXN1bHQuICBTdG9wIHdoZW4gYWxsCisgKgkgIG5hbWVzIGludGVycG9sYXRlZCwgYSBuYW1lIGNhbid0IGJlIGZvdW5kLCBvciBkZXB0aCBleGNlZWRzCisgKgkgIE1BWF9SRUNVUlNJT04uCisgKi8KKyNkZWZpbmUgRE9BTExPQyhzaXplKSB0eXBlUmVhbGxvYyhjaGFyLCBzaXplLCByZWNvcmQpCitzdGF0aWMgaW50CitfbmNfZ2V0ZW50KAorCSAgICAgIGNoYXIgKipjYXAsCS8qIHRlcm1jYXAtY29udGVudCAqLworCSAgICAgIHVuc2lnbmVkICpsZW4sCS8qIGxlbmd0aCwgbmVlZGVkIGZvciByZWN1cnNpb24gKi8KKwkgICAgICBpbnQgKmJlZ2lubmluZywJLyogbGluZS1udW1iZXIgYXQgbWF0Y2ggKi8KKwkgICAgICBpbnQgaW5fYXJyYXksCS8qIGluZGV4IGluICdkYl9hcnJheVtdICovCisJICAgICAgY2hhciAqKmRiX2FycmF5LAkvKiBsaXN0IG9mIGZpbGVzIHRvIHNlYXJjaCAqLworCSAgICAgIGludCBmZCwKKwkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCSAgICAgIGludCBkZXB0aCwKKwkgICAgICBjaGFyICpuZmllbGQpCit7CisgICAgcmVnaXN0ZXIgY2hhciAqcl9lbmQsICpycDsKKyAgICBpbnQgbXlmZCA9IEZBTFNFOworICAgIGNoYXIgKnJlY29yZCA9IDA7CisgICAgaW50IHRjX25vdF9yZXNvbHZlZDsKKyAgICBpbnQgY3VycmVudDsKKyAgICBpbnQgbGluZW5vOworCisgICAgLyoKKyAgICAgKiBSZXR1cm4gd2l0aCBgYGxvb3AgZGV0ZWN0ZWQnJyBlcnJvciBpZiB3ZSd2ZSByZWN1cnJlZCBtb3JlIHRoYW4KKyAgICAgKiBNQVhfUkVDVVJTSU9OIHRpbWVzLgorICAgICAqLworICAgIGlmIChkZXB0aCA+IE1BWF9SRUNVUlNJT04pCisJcmV0dXJuIChUQ19SRUZfTE9PUCk7CisKKyAgICAvKgorICAgICAqIENoZWNrIGlmIHdlIGhhdmUgYSB0b3AgcmVjb3JkIGZyb20gY2dldHNldCgpLgorICAgICAqLworICAgIGlmIChkZXB0aCA9PSAwICYmIHRvcHJlYyAhPSAwICYmIF9uY19jZ2V0bWF0Y2godG9wcmVjLCBuYW1lKSA9PSAwKSB7CisJaWYgKChyZWNvcmQgPSBET0FMTE9DKHRvcHJlY2xlbiArIEJGUkFHKSkgPT0gMCkgeworCSAgICBlcnJubyA9IEVOT01FTTsKKwkgICAgcmV0dXJuIChUQ19TWVNfRVJSKTsKKwl9CisJKHZvaWQpIHN0cmNweShyZWNvcmQsIHRvcHJlYyk7CisJcnAgPSByZWNvcmQgKyB0b3ByZWNsZW4gKyAxOworCXJfZW5kID0gcnAgKyBCRlJBRzsKKwljdXJyZW50ID0gaW5fYXJyYXk7CisgICAgfSBlbHNlIHsKKwlpbnQgZm91bmRpdDsKKworCS8qCisJICogQWxsb2NhdGUgZmlyc3QgY2h1bmsgb2YgbWVtb3J5LgorCSAqLworCWlmICgocmVjb3JkID0gRE9BTExPQyhCRlJBRykpID09IDApIHsKKwkgICAgZXJybm8gPSBFTk9NRU07CisJICAgIHJldHVybiAoVENfU1lTX0VSUik7CisJfQorCXJwID0gcl9lbmQgPSByZWNvcmQgKyBCRlJBRzsKKwlmb3VuZGl0ID0gRkFMU0U7CisKKwkvKgorCSAqIExvb3AgdGhyb3VnaCBkYXRhYmFzZSBhcnJheSB1bnRpbCBmaW5kaW5nIHRoZSByZWNvcmQuCisJICovCisJZm9yIChjdXJyZW50ID0gaW5fYXJyYXk7IGRiX2FycmF5W2N1cnJlbnRdICE9IDA7IGN1cnJlbnQrKykgeworCSAgICBpbnQgZW9mID0gRkFMU0U7CisKKwkgICAgLyoKKwkgICAgICogT3BlbiBkYXRhYmFzZSBpZiBub3QgYWxyZWFkeSBvcGVuLgorCSAgICAgKi8KKwkgICAgaWYgKGZkID49IDApIHsKKwkJKHZvaWQpIGxzZWVrKGZkLCAob2ZmX3QpIDAsIFNFRUtfU0VUKTsKKwkgICAgfSBlbHNlIGlmICgoX25jX2FjY2VzcyhkYl9hcnJheVtjdXJyZW50XSwgUl9PSykgPCAwKQorCQkgICAgICAgfHwgKGZkID0gb3BlbihkYl9hcnJheVtjdXJyZW50XSwgT19SRE9OTFksIDApKSA8IDApIHsKKwkJLyogTm8gZXJyb3Igb24gdW5mb3VuZCBmaWxlLiAqLworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkgICAgY29udGludWU7CisJCWZyZWUocmVjb3JkKTsKKwkJcmV0dXJuIChUQ19TWVNfRVJSKTsKKwkgICAgfSBlbHNlIHsKKwkJbXlmZCA9IFRSVUU7CisJICAgIH0KKwkgICAgbGluZW5vID0gMDsKKworCSAgICAvKgorCSAgICAgKiBGaW5kIHRoZSByZXF1ZXN0ZWQgY2FwYWJpbGl0eSByZWNvcmQgLi4uCisJICAgICAqLworCSAgICB7CisJCWNoYXIgYnVmWzIwNDhdOworCQlyZWdpc3RlciBjaGFyICpiX2VuZCA9IGJ1ZjsKKwkJcmVnaXN0ZXIgY2hhciAqYnAgPSBidWY7CisJCXJlZ2lzdGVyIGludCBjOworCisJCS8qCisJCSAqIExvb3AgaW52YXJpYW50czoKKwkJICogICAgICBUaGVyZSBpcyBhbHdheXMgcm9vbSBmb3Igb25lIG1vcmUgY2hhcmFjdGVyIGluIHJlY29yZC4KKwkJICogICAgICBSX2VuZCBhbHdheXMgcG9pbnRzIGp1c3QgcGFzdCBlbmQgb2YgcmVjb3JkLgorCQkgKiAgICAgIFJwIGFsd2F5cyBwb2ludHMganVzdCBwYXN0IGxhc3QgY2hhcmFjdGVyIGluIHJlY29yZC4KKwkJICogICAgICBCX2VuZCBhbHdheXMgcG9pbnRzIGp1c3QgcGFzdCBsYXN0IGNoYXJhY3RlciBpbiBidWYuCisJCSAqICAgICAgQnAgYWx3YXlzIHBvaW50cyBhdCBuZXh0IGNoYXJhY3RlciBpbiBidWYuCisJCSAqLworCisJCWZvciAoOzspIHsKKwkJICAgIGludCBmaXJzdCA9IGxpbmVubyArIDE7CisKKwkJICAgIC8qCisJCSAgICAgKiBSZWFkIGluIGEgbGluZSBpbXBsZW1lbnRpbmcgKFwsIG5ld2xpbmUpCisJCSAgICAgKiBsaW5lIGNvbnRpbnVhdGlvbi4KKwkJICAgICAqLworCQkgICAgcnAgPSByZWNvcmQ7CisJCSAgICBmb3IgKDs7KSB7CisJCQlpZiAoYnAgPj0gYl9lbmQpIHsKKwkJCSAgICBpbnQgbjsKKworCQkJICAgIG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKTsKKwkJCSAgICBpZiAobiA8PSAwKSB7CisJCQkJaWYgKG15ZmQpCisJCQkJICAgICh2b2lkKSBjbG9zZShmZCk7CisJCQkJaWYgKG4gPCAwKSB7CisJCQkJICAgIGZyZWUocmVjb3JkKTsKKwkJCQkgICAgcmV0dXJuIChUQ19TWVNfRVJSKTsKKwkJCQl9CisJCQkJZmQgPSAtMTsKKwkJCQllb2YgPSBUUlVFOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCSAgICBiX2VuZCA9IGJ1ZiArIG47CisJCQkgICAgYnAgPSBidWY7CisJCQl9CisKKwkJCWMgPSAqYnArKzsKKwkJCWlmIChjID09ICdcbicpIHsKKwkJCSAgICBsaW5lbm8rKzsKKwkJCSAgICBpZiAocnAgPT0gcmVjb3JkIHx8ICoocnAgLSAxKSAhPSAnXFwnKQorCQkJCWJyZWFrOworCQkJfQorCQkJKnJwKysgPSBjOworCisJCQkvKgorCQkJICogRW5mb3JjZSBsb29wIGludmFyaWFudDogaWYgbm8gcm9vbQorCQkJICogbGVmdCBpbiByZWNvcmQgYnVmZmVyLCB0cnkgdG8gZ2V0CisJCQkgKiBzb21lIG1vcmUuCisJCQkgKi8KKwkJCWlmIChycCA+PSByX2VuZCkgeworCQkJICAgIHVuc2lnbmVkIHBvczsKKwkJCSAgICBzaXplX3QgbmV3c2l6ZTsKKworCQkJICAgIHBvcyA9IHJwIC0gcmVjb3JkOworCQkJICAgIG5ld3NpemUgPSByX2VuZCAtIHJlY29yZCArIEJGUkFHOworCQkJICAgIHJlY29yZCA9IERPQUxMT0MobmV3c2l6ZSk7CisJCQkgICAgaWYgKHJlY29yZCA9PSAwKSB7CisJCQkJaWYgKG15ZmQpCisJCQkJICAgICh2b2lkKSBjbG9zZShmZCk7CisJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJcmV0dXJuIChUQ19TWVNfRVJSKTsKKwkJCSAgICB9CisJCQkgICAgcl9lbmQgPSByZWNvcmQgKyBuZXdzaXplOworCQkJICAgIHJwID0gcmVjb3JkICsgcG9zOworCQkJfQorCQkgICAgfQorCQkgICAgLyogbG9vcCBpbnZhcmlhbnQgbGV0cyB1cyBkbyB0aGlzICovCisJCSAgICAqcnArKyA9ICdcMCc7CisKKwkJICAgIC8qCisJCSAgICAgKiBJZiBlbmNvdW50ZXJlZCBlb2YgY2hlY2sgbmV4dCBmaWxlLgorCQkgICAgICovCisJCSAgICBpZiAoZW9mKQorCQkJYnJlYWs7CisKKwkJICAgIC8qCisJCSAgICAgKiBUb3NzIGJsYW5rIGxpbmVzIGFuZCBjb21tZW50cy4KKwkJICAgICAqLworCQkgICAgaWYgKCpyZWNvcmQgPT0gJ1wwJyB8fCAqcmVjb3JkID09ICcjJykKKwkJCWNvbnRpbnVlOworCisJCSAgICAvKgorCQkgICAgICogU2VlIGlmIHRoaXMgaXMgdGhlIHJlY29yZCB3ZSB3YW50IC4uLgorCQkgICAgICovCisJCSAgICBpZiAoX25jX2NnZXRtYXRjaChyZWNvcmQsIG5hbWUpID09IDAKKwkJCSYmIChuZmllbGQgPT0gMAorCQkJICAgIHx8ICFfbmNfbmZjbXAobmZpZWxkLCByZWNvcmQpKSkgeworCQkJZm91bmRpdCA9IFRSVUU7CisJCQkqYmVnaW5uaW5nID0gZmlyc3Q7CisJCQlicmVhazsJLyogZm91bmQgaXQhICovCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBpZiAoZm91bmRpdCkKKwkJYnJlYWs7CisJfQorCisJaWYgKCFmb3VuZGl0KQorCSAgICByZXR1cm4gKFRDX05PVF9GT1VORCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBHb3QgdGhlIGNhcGFiaWxpdHkgcmVjb3JkLCBidXQgbm93IHdlIGhhdmUgdG8gZXhwYW5kIGFsbCB0Yz1uYW1lCisgICAgICogcmVmZXJlbmNlcyBpbiBpdCAuLi4KKyAgICAgKi8KKyAgICB7CisJcmVnaXN0ZXIgY2hhciAqbmV3aWNhcCwgKnM7CisJcmVnaXN0ZXIgaW50IG5ld2lsZW47CisJdW5zaWduZWQgaWxlbjsKKwlpbnQgZGlmZiwgaXJldCwgdGNsZW4sIG9saW5lOworCWNoYXIgKmljYXAsICpzY2FuLCAqdGMsICp0Y3N0YXJ0LCAqdGNlbmQ7CisKKwkvKgorCSAqIExvb3AgaW52YXJpYW50czoKKwkgKiAgICAgIFRoZXJlIGlzIHJvb20gZm9yIG9uZSBtb3JlIGNoYXJhY3RlciBpbiByZWNvcmQuCisJICogICAgICBSX2VuZCBwb2ludHMganVzdCBwYXN0IGVuZCBvZiByZWNvcmQuCisJICogICAgICBScCBwb2ludHMganVzdCBwYXN0IGxhc3QgY2hhcmFjdGVyIGluIHJlY29yZC4KKwkgKiAgICAgIFNjYW4gcG9pbnRzIGF0IHJlbWFpbmRlciBvZiByZWNvcmQgdGhhdCBuZWVkcyB0byBiZQorCSAqICAgICAgc2Nhbm5lZCBmb3IgdGM9bmFtZSBjb25zdHJ1Y3RzLgorCSAqLworCXNjYW4gPSByZWNvcmQ7CisJdGNfbm90X3Jlc29sdmVkID0gRkFMU0U7CisJZm9yICg7OykgeworCSAgICBpZiAoKHRjID0gX25jX2NnZXRjYXAoc2NhbiwgInRjIiwgJz0nKSkgPT0gMCkKKwkJYnJlYWs7CisKKwkgICAgLyoKKwkgICAgICogRmluZCBlbmQgb2YgdGM9bmFtZSBhbmQgc3RvbXAgb24gdGhlIHRyYWlsaW5nIGA6JworCSAgICAgKiAoaWYgcHJlc2VudCkgc28gd2UgY2FuIHVzZSBpdCB0byBjYWxsIG91cnNlbHZlcy4KKwkgICAgICovCisJICAgIHMgPSB0YzsKKwkgICAgd2hpbGUgKCpzICE9ICdcMCcpIHsKKwkJaWYgKCpzKysgPT0gJzonKSB7CisJCSAgICAqKHMgLSAxKSA9ICdcMCc7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIHRjc3RhcnQgPSB0YyAtIDM7CisJICAgIHRjbGVuID0gcyAtIHRjc3RhcnQ7CisJICAgIHRjZW5kID0gczsKKworCSAgICBpcmV0ID0gX25jX2dldGVudCgmaWNhcCwgJmlsZW4sICZvbGluZSwgY3VycmVudCwgZGJfYXJyYXksIGZkLAorCQkJICAgICAgdGMsIGRlcHRoICsgMSwgMCk7CisJICAgIG5ld2ljYXAgPSBpY2FwOwkvKiBQdXQgaW50byBhIHJlZ2lzdGVyLiAqLworCSAgICBuZXdpbGVuID0gaWxlbjsKKwkgICAgaWYgKGlyZXQgIT0gVENfU1VDQ0VTUykgeworCQkvKiBhbiBlcnJvciAqLworCQlpZiAoaXJldCA8IFRDX05PVF9GT1VORCkgeworCQkgICAgaWYgKG15ZmQpCisJCQkodm9pZCkgY2xvc2UoZmQpOworCQkgICAgZnJlZShyZWNvcmQpOworCQkgICAgcmV0dXJuIChpcmV0KTsKKwkJfQorCQlpZiAoaXJldCA9PSBUQ19VTlJFU09MVkVEKQorCQkgICAgdGNfbm90X3Jlc29sdmVkID0gVFJVRTsKKwkJLyogY291bGRuJ3QgcmVzb2x2ZSB0YyAqLworCQlpZiAoaXJldCA9PSBUQ19OT1RfRk9VTkQpIHsKKwkJICAgICoocyAtIDEpID0gJzonOworCQkgICAgc2NhbiA9IHMgLSAxOworCQkgICAgdGNfbm90X3Jlc29sdmVkID0gVFJVRTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKworCSAgICAvKiBub3QgaW50ZXJlc3RlZCBpbiBuYW1lIGZpZWxkIG9mIHRjJ2VkIHJlY29yZCAqLworCSAgICBzID0gbmV3aWNhcDsKKwkgICAgd2hpbGUgKCpzICE9ICdcMCcgJiYgKnMrKyAhPSAnOicpIDsKKwkgICAgbmV3aWxlbiAtPSBzIC0gbmV3aWNhcDsKKwkgICAgbmV3aWNhcCA9IHM7CisKKwkgICAgLyogbWFrZSBzdXJlIGludGVycG9sYXRlZCByZWNvcmQgaXMgYDonLXRlcm1pbmF0ZWQgKi8KKwkgICAgcyArPSBuZXdpbGVuOworCSAgICBpZiAoKihzIC0gMSkgIT0gJzonKSB7CisJCSpzID0gJzonOwkvKiBvdmVyd3JpdGUgTlVMIHdpdGggOiAqLworCQluZXdpbGVuKys7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggcm9vbSB0byBpbnNlcnQgdGhlCisJICAgICAqIG5ldyByZWNvcmQuCisJICAgICAqLworCSAgICBkaWZmID0gbmV3aWxlbiAtIHRjbGVuOworCSAgICBpZiAoZGlmZiA+PSByX2VuZCAtIHJwKSB7CisJCXVuc2lnbmVkIHBvcywgdGNwb3MsIHRjcG9zZW5kOworCQlzaXplX3QgbmV3c2l6ZTsKKworCQlwb3MgPSBycCAtIHJlY29yZDsKKwkJbmV3c2l6ZSA9IHJfZW5kIC0gcmVjb3JkICsgZGlmZiArIEJGUkFHOworCQl0Y3BvcyA9IHRjc3RhcnQgLSByZWNvcmQ7CisJCXRjcG9zZW5kID0gdGNlbmQgLSByZWNvcmQ7CisJCXJlY29yZCA9IERPQUxMT0MobmV3c2l6ZSk7CisJCWlmIChyZWNvcmQgPT0gMCkgeworCQkgICAgaWYgKG15ZmQpCisJCQkodm9pZCkgY2xvc2UoZmQpOworCQkgICAgZnJlZShpY2FwKTsKKwkJICAgIGVycm5vID0gRU5PTUVNOworCQkgICAgcmV0dXJuIChUQ19TWVNfRVJSKTsKKwkJfQorCQlyX2VuZCA9IHJlY29yZCArIG5ld3NpemU7CisJCXJwID0gcmVjb3JkICsgcG9zOworCQl0Y3N0YXJ0ID0gcmVjb3JkICsgdGNwb3M7CisJCXRjZW5kID0gcmVjb3JkICsgdGNwb3NlbmQ7CisJICAgIH0KKworCSAgICAvKgorCSAgICAgKiBJbnNlcnQgdGMnZWQgcmVjb3JkIGludG8gb3VyIHJlY29yZC4KKwkgICAgICovCisJICAgIHMgPSB0Y3N0YXJ0ICsgbmV3aWxlbjsKKwkgICAgbWVtbW92ZShzLCB0Y2VuZCwgKHNpemVfdCkgKHJwIC0gdGNlbmQpKTsKKwkgICAgbWVtbW92ZSh0Y3N0YXJ0LCBuZXdpY2FwLCAoc2l6ZV90KSBuZXdpbGVuKTsKKwkgICAgcnAgKz0gZGlmZjsKKwkgICAgZnJlZShpY2FwKTsKKworCSAgICAvKgorCSAgICAgKiBTdGFydCBzY2FuIG9uIGA6JyBzbyBuZXh0IGNnZXRjYXAgd29ya3MgcHJvcGVybHkKKwkgICAgICogKGNnZXRjYXAgYWx3YXlzIHNraXBzIGZpcnN0IGZpZWxkKS4KKwkgICAgICovCisJICAgIHNjYW4gPSBzIC0gMTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDbG9zZSBmaWxlIChpZiB3ZSBvcGVuZWQgaXQpLCBnaXZlIGJhY2sgYW55IGV4dHJhIG1lbW9yeSwgYW5kCisgICAgICogcmV0dXJuIGNhcGFiaWxpdHksIGxlbmd0aCBhbmQgc3VjY2Vzcy4KKyAgICAgKi8KKyAgICBpZiAobXlmZCkKKwkodm9pZCkgY2xvc2UoZmQpOworICAgICpsZW4gPSBycCAtIHJlY29yZCAtIDE7CS8qIGRvbid0IGNvdW50IE5VTCAqLworICAgIGlmIChyX2VuZCA+IHJwKSB7CisJaWYgKChyZWNvcmQgPSBET0FMTE9DKChzaXplX3QpIChycCAtIHJlY29yZCkpKSA9PSAwKSB7CisJICAgIGVycm5vID0gRU5PTUVNOworCSAgICByZXR1cm4gKFRDX1NZU19FUlIpOworCX0KKyAgICB9CisKKyAgICAqY2FwID0gcmVjb3JkOworICAgIGlmICh0Y19ub3RfcmVzb2x2ZWQpCisJcmV0dXJuIChUQ19VTlJFU09MVkVEKTsKKyAgICByZXR1cm4gKGN1cnJlbnQpOworfQorCisvKgorICogQ2dldG1hdGNoIHdpbGwgcmV0dXJuIDAgaWYgbmFtZSBpcyBvbmUgb2YgdGhlIG5hbWVzIG9mIHRoZSBjYXBhYmlsaXR5CisgKiByZWNvcmQgYnVmLCAtMSBpZiBub3QuCisgKi8KK3N0YXRpYyBpbnQKK19uY19jZ2V0bWF0Y2goY2hhciAqYnVmLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKm5wOworICAgIHJlZ2lzdGVyIGNoYXIgKmJwOworCisgICAgLyoKKyAgICAgKiBTdGFydCBzZWFyY2ggYXQgYmVnaW5uaW5nIG9mIHJlY29yZC4KKyAgICAgKi8KKyAgICBicCA9IGJ1ZjsKKyAgICBmb3IgKDs7KSB7CisJLyoKKwkgKiBUcnkgdG8gbWF0Y2ggYSByZWNvcmQgbmFtZS4KKwkgKi8KKwlucCA9IG5hbWU7CisJZm9yICg7OykgeworCSAgICBpZiAoKm5wID09ICdcMCcpIHsKKwkJaWYgKCpicCA9PSAnfCcgfHwgKmJwID09ICc6JyB8fCAqYnAgPT0gJ1wwJykKKwkJICAgIHJldHVybiAoMCk7CisJCWVsc2UKKwkJICAgIGJyZWFrOworCSAgICB9IGVsc2UgaWYgKCpicCsrICE9ICpucCsrKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCisJLyoKKwkgKiBNYXRjaCBmYWlsZWQsIHNraXAgdG8gbmV4dCBuYW1lIGluIHJlY29yZC4KKwkgKi8KKwlicC0tOwkJCS8qIGEgJ3wnIG9yICc6JyBtYXkgaGF2ZSBzdG9wcGVkIHRoZSBtYXRjaCAqLworCWZvciAoOzspIHsKKwkgICAgaWYgKCpicCA9PSAnXDAnIHx8ICpicCA9PSAnOicpCisJCXJldHVybiAoLTEpOwkvKiBtYXRjaCBmYWlsZWQgdG90YWxseSAqLworCSAgICBlbHNlIGlmICgqYnArKyA9PSAnfCcpCisJCWJyZWFrOwkJLyogZm91bmQgbmV4dCBuYW1lICovCisJfQorICAgIH0KK30KKworLyoKKyAqIENvbXBhcmUgbmFtZSBmaWVsZCBvZiByZWNvcmQuCisgKi8KK3N0YXRpYyBpbnQKK19uY19uZmNtcChjb25zdCBjaGFyICpuZiwgY2hhciAqcmVjKQoreworICAgIGNoYXIgKmNwLCB0bXA7CisgICAgaW50IHJldDsKKworICAgIGZvciAoY3AgPSByZWM7ICpjcCAhPSAnOic7IGNwKyspIDsKKworICAgIHRtcCA9ICooY3AgKyAxKTsKKyAgICAqKGNwICsgMSkgPSAnXDAnOworICAgIHJldCA9IHN0cmNtcChuZiwgcmVjKTsKKyAgICAqKGNwICsgMSkgPSB0bXA7CisKKyAgICByZXR1cm4gKHJldCk7Cit9CisjZW5kaWYgLyogSEFWRV9CU0RfQ0dFVEVOVCAqLworCisvKgorICogU2luY2UgbmN1cnNlcyBwcm92aWRlcyBpdHMgb3duICd0Z2V0ZW50KCknLCB3ZSBjYW5ub3QgdXNlIHRoZSBuYXRpdmUgb25lLgorICogU28gd2UgcmVwcm9kdWNlIHRoZSBsb2dpYyB0byBnZXQgZG93biB0byBjZ2V0ZW50KCkgLS0gb3Igb3VyIGN1dC1kb3duCisgKiB2ZXJzaW9uIG9mIHRoYXQgLS0gdG8gY2lyY3VtdmVudCB0aGUgcHJvYmxlbSBvZiBjb25maWd1cmluZyBhZ2FpbnN0IHRoZQorICogdGVybWNhcCBsaWJyYXJ5LgorICovCisjZGVmaW5lIFVTRV9CU0RfVEdFVEVOVCAxCisKKyNpZiBVU0VfQlNEX1RHRVRFTlQKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpdGVybWNhcC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyIgKi8KKworI2RlZmluZQlQQlVGU0laCQk1MTIJLyogbWF4IGxlbmd0aCBvZiBmaWxlbmFtZSBwYXRoICovCisjZGVmaW5lCVBWRUNTSVoJCTMyCS8qIG1heCBudW1iZXIgb2YgbmFtZXMgaW4gcGF0aCAqLworI2RlZmluZSBUQlVGU0laICgyMDQ4KjIpCisKK3N0YXRpYyBjaGFyICp0YnVmOworCisvKgorICogT24gZW50cnksIHNyY3AgcG9pbnRzIHRvIGEgbm9uICc6JyBjaGFyYWN0ZXIgd2hpY2ggaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAqIHRva2VuLCBpZiBhbnkuICBXZSdsbCB0cnkgdG8gcmV0dXJuIGEgc3RyaW5nIHRoYXQgZG9lc24ndCBlbmQgd2l0aCBhICc6Jy4KKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X3RjX3Rva2VuKGNoYXIgKipzcmNwLCBpbnQgKmVuZHApCit7CisgICAgaW50IGNoOworICAgIGJvb2wgZm91bmQgPSBGQUxTRTsKKyAgICBjaGFyICpzLCAqYmFzZTsKKyAgICBjaGFyICp0b2sgPSAwOworCisgICAgKmVuZHAgPSBUUlVFOworICAgIGZvciAocyA9IGJhc2UgPSAqc3JjcDsgKnMgIT0gJ1wwJzspIHsKKwljaCA9ICpzKys7CisJaWYgKGNoID09ICdcXCcpIHsKKwkgICAgaWYgKCpzID09ICdcMCcpIHsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSBpZiAoKnMrKyA9PSAnXG4nKSB7CisJCXdoaWxlIChpc3NwYWNlKFVDaGFyKCpzKSkpCisJCSAgICBzKys7CisJICAgIH0gZWxzZSB7CisJCWZvdW5kID0gVFJVRTsKKwkgICAgfQorCX0gZWxzZSBpZiAoY2ggPT0gJzonKSB7CisJICAgIGlmIChmb3VuZCkgeworCQl0b2sgPSBiYXNlOworCQlzWy0xXSA9ICdcMCc7CisJCSpzcmNwID0gczsKKwkJKmVuZHAgPSBGQUxTRTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYmFzZSA9IHM7CisJfSBlbHNlIGlmIChpc2dyYXBoKFVDaGFyKGNoKSkpIHsKKwkgICAgZm91bmQgPSBUUlVFOworCX0KKyAgICB9CisKKyAgICAvKiBtYWxmb3JtZWQgZW50cnkgbWF5IGVuZCB3aXRob3V0IGEgJzonICovCisgICAgaWYgKHRvayA9PSAwICYmIGZvdW5kKSB7CisJdG9rID0gYmFzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rOworfQorCitzdGF0aWMgY2hhciAqCitjb3B5X3RjX3Rva2VuKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuKQoreworICAgIGludCBjaDsKKworICAgIHdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKwlpZiAoY2ggPT0gJ1xcJyAmJiAqc3JjID09ICdcbicpIHsKKwkgICAgd2hpbGUgKGlzc3BhY2UoVUNoYXIoKnNyYykpKQorCQlzcmMrKzsKKwkgICAgY29udGludWU7CisJfQorCWlmICgtLWxlbiA9PSAwKSB7CisJICAgIGRzdCA9IDA7CisJICAgIGJyZWFrOworCX0KKwkqZHN0KysgPSBjaDsKKyAgICB9CisgICAgcmV0dXJuIGRzdDsKK30KKworLyoKKyAqIEdldCBhbiBlbnRyeSBmb3IgdGVybWluYWwgbmFtZSBpbiBidWZmZXIgYnAgZnJvbSB0aGUgdGVybWNhcCBmaWxlLgorICovCitzdGF0aWMgaW50CitfbmNfdGdldGVudChjaGFyICpicCwgY2hhciAqKnNvdXJjZW5hbWUsIGludCAqbGluZW5vLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHN0YXRpYyBjaGFyICp0aGVfc291cmNlOworCisgICAgcmVnaXN0ZXIgY2hhciAqcDsKKyAgICByZWdpc3RlciBjaGFyICpjcDsKKyAgICBjaGFyICpkdW1teSA9IE5VTEw7CisgICAgY2hhciAqKmZuYW1lOworICAgIGNoYXIgKmhvbWU7CisgICAgaW50IGk7CisgICAgY2hhciBwYXRoYnVmW1BCVUZTSVpdOwkvKiBob2xkcyByYXcgcGF0aCBvZiBmaWxlbmFtZXMgKi8KKyAgICBjaGFyICpwYXRodmVjW1BWRUNTSVpdOwkvKiB0byBwb2ludCB0byBuYW1lcyBpbiBwYXRoYnVmICovCisgICAgY2hhciAqKnB2ZWM7CQkvKiBob2xkcyB1c2FibGUgdGFpbCBvZiBwYXRoIHZlY3RvciAqLworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqdGVybXBhdGg7CisgICAgc3RyaW5nX2Rlc2MgZGVzYzsKKworICAgIGZuYW1lID0gcGF0aHZlYzsKKyAgICBwdmVjID0gcGF0aHZlYzsKKyAgICB0YnVmID0gYnA7CisgICAgcCA9IHBhdGhidWY7CisgICAgY3AgPSB1c2VfdGVybWluZm9fdmFycygpPyBnZXRlbnYoIlRFUk1DQVAiKSA6IE5VTEw7CisKKyAgICAvKgorICAgICAqIFRFUk1DQVAgY2FuIGhhdmUgb25lIG9mIHR3byB0aGluZ3MgaW4gaXQuICBJdCBjYW4gYmUgdGhlIG5hbWUgb2YgYSBmaWxlCisgICAgICogdG8gdXNlIGluc3RlYWQgb2YgL2V0Yy90ZXJtY2FwLiAgSW4gdGhpcyBjYXNlIGl0IGJldHRlciBzdGFydCB3aXRoIGEKKyAgICAgKiAiLyIuICBPciBpdCBjYW4gYmUgYW4gZW50cnkgdG8gdXNlIHNvIHdlIGRvbid0IGhhdmUgdG8gcmVhZCB0aGUgZmlsZS4gCisgICAgICogSW4gdGhpcyBjYXNlIGl0IGhhcyB0byBhbHJlYWR5IGhhdmUgdGhlIG5ld2xpbmVzIGNydW5jaGVkIG91dC4gIElmCisgICAgICogVEVSTUNBUCBkb2VzIG5vdCBob2xkIGEgZmlsZSBuYW1lIHRoZW4gYSBwYXRoIG9mIG5hbWVzIGlzIHNlYXJjaGVkCisgICAgICogaW5zdGVhZC4gIFRoZSBwYXRoIGlzIGZvdW5kIGluIHRoZSBURVJNUEFUSCB2YXJpYWJsZSwgb3IgYmVjb21lcworICAgICAqICIkSE9NRS8udGVybWNhcCAvZXRjL3Rlcm1jYXAiIGlmIG5vIFRFUk1QQVRIIGV4aXN0cy4KKyAgICAgKi8KKyAgICBfbmNfc3RyX2luaXQoJmRlc2MsIHBhdGhidWYsIHNpemVvZihwYXRoYnVmKSk7CisgICAgaWYgKGNwID09IE5VTEwpIHsKKwlfbmNfc2FmZV9zdHJjcHkoJmRlc2MsIGdldF90ZXJtcGF0aCgpKTsKKyAgICB9IGVsc2UgaWYgKCFfbmNfaXNfYWJzX3BhdGgoY3ApKSB7CS8qIFRFUk1DQVAgaG9sZHMgYW4gZW50cnkgKi8KKwlpZiAoKHRlcm1wYXRoID0gZ2V0X3Rlcm1wYXRoKCkpICE9IDApIHsKKwkgICAgX25jX3NhZmVfc3RyY2F0KCZkZXNjLCB0ZXJtcGF0aCk7CisJfSBlbHNlIHsKKwkgICAgY2hhciB0ZW1wW1BCVUZTSVpdOworCSAgICB0ZW1wWzBdID0gMDsKKwkgICAgaWYgKChob21lID0gZ2V0ZW52KCJIT01FIikpICE9IDAgJiYgKmhvbWUgIT0gJ1wwJworCQkmJiBzdHJjaHIoaG9tZSwgJyAnKSA9PSAwCisJCSYmIHN0cmxlbihob21lKSA8IHNpemVvZih0ZW1wKSAtIDEwKSB7CS8qIHNldHVwIHBhdGggKi8KKwkJc3ByaW50Zih0ZW1wLCAiJXMvIiwgaG9tZSk7CS8qICRIT01FIGZpcnN0ICovCisJICAgIH0KKwkgICAgLyogaWYgbm8gJEhPTUUgbG9vayBpbiBjdXJyZW50IGRpcmVjdG9yeSAqLworCSAgICBzdHJjYXQodGVtcCwgIi50ZXJtY2FwIik7CisJICAgIF9uY19zYWZlX3N0cmNhdCgmZGVzYywgdGVtcCk7CisJICAgIF9uY19zYWZlX3N0cmNhdCgmZGVzYywgIiAiKTsKKwkgICAgX25jX3NhZmVfc3RyY2F0KCZkZXNjLCBnZXRfdGVybXBhdGgoKSk7CisJfQorICAgIH0gZWxzZSB7CQkJLyogdXNlci1kZWZpbmVkIG5hbWUgaW4gVEVSTUNBUCAqLworCV9uY19zYWZlX3N0cmNhdCgmZGVzYywgY3ApOwkvKiBzdGlsbCBjYW4gYmUgdG9rZW5pemVkICovCisgICAgfQorCisgICAgKmZuYW1lKysgPSBwYXRoYnVmOwkJLyogdG9rZW5pemUgcGF0aCBpbnRvIHZlY3RvciBvZiBuYW1lcyAqLworICAgIHdoaWxlICgqKytwKSB7CisJaWYgKCpwID09ICcgJyB8fCAqcCA9PSBOQ1VSU0VTX1BBVEhTRVApIHsKKwkgICAgKnAgPSAnXDAnOworCSAgICB3aGlsZSAoKisrcCkKKwkJaWYgKCpwICE9ICcgJyAmJiAqcCAhPSBOQ1VSU0VTX1BBVEhTRVApCisJCSAgICBicmVhazsKKwkgICAgaWYgKCpwID09ICdcMCcpCisJCWJyZWFrOworCSAgICAqZm5hbWUrKyA9IHA7CisJICAgIGlmIChmbmFtZSA+PSBwYXRodmVjICsgUFZFQ1NJWikgeworCQlmbmFtZS0tOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgKmZuYW1lID0gMDsJCQkvKiBtYXJrIGVuZCBvZiB2ZWN0b3IgKi8KKyAgICBpZiAoX25jX2lzX2Fic19wYXRoKGNwKSkgeworCWlmIChfbmNfY2dldHNldChjcCkgPCAwKSB7CisJICAgIHJldHVybiAoVENfU1lTX0VSUik7CisJfQorICAgIH0KKworICAgIGkgPSBfbmNfY2dldGVudCgmZHVtbXksIGxpbmVubywgcGF0aHZlYywgbmFtZSk7CisKKyAgICAvKiBuY3Vyc2VzJyB0ZXJtY2FwLXBhcnNpbmcgcm91dGluZXMgY2Fubm90IGhhbmRsZSBtdWx0aXBsZSBhZGphY2VudAorICAgICAqIGVtcHR5IGZpZWxkcywgYW5kIG1pc3Rha2VubHkgdXNlIHRoZSBsYXN0IHZhbGlkIGNhcCBlbnRyeSBpbnN0ZWFkIG9mCisgICAgICogdGhlIGZpcnN0IChicmVha3MgdGM9IGluY2x1ZGVzKQorICAgICAqLworICAgIGlmIChpID49IDApIHsKKwljaGFyICpwZCwgKnBzLCAqdG9rOworCWludCBlbmRmbGFnID0gRkFMU0U7CisJY2hhciAqbGlzdFsxMDIzXTsKKwlzaXplX3QgbiwgY291bnQgPSAwOworCisJcGQgPSBicDsKKwlwcyA9IGR1bW15OworCXdoaWxlICghZW5kZmxhZyAmJiAodG9rID0gZ2V0X3RjX3Rva2VuKCZwcywgJmVuZGZsYWcpKSAhPSAwKSB7CisJICAgIGJvb2wgaWdub3JlID0gRkFMU0U7CisKKwkgICAgZm9yIChuID0gMTsgbiA8IGNvdW50OyBuKyspIHsKKwkJY2hhciAqcyA9IGxpc3Rbbl07CisJCWlmIChzWzBdID09IHRva1swXQorCQkgICAgJiYgc1sxXSA9PSB0b2tbMV0pIHsKKwkJICAgIGlnbm9yZSA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGlmIChpZ25vcmUgIT0gVFJVRSkgeworCQlsaXN0W2NvdW50KytdID0gdG9rOworCQlwZCA9IGNvcHlfdGNfdG9rZW4ocGQsIHRvaywgVEJVRlNJWiAtICgyICsgcGQgLSBicCkpOworCQlpZiAocGQgPT0gMCkgeworCQkgICAgaSA9IC0xOworCQkgICAgYnJlYWs7CisJCX0KKwkJKnBkKysgPSAnOic7CisJCSpwZCA9ICdcMCc7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgRnJlZUlmTmVlZGVkKGR1bW15KTsKKyAgICBGcmVlSWZOZWVkZWQodGhlX3NvdXJjZSk7CisgICAgdGhlX3NvdXJjZSA9IDA7CisKKyAgICAvKiBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHRoZSBCU0QgY2dldGVudCgpLCBidXQgdG8gZmFrZSB1cCBhIHN1aXRhYmxlCisgICAgICogZmlsZW5hbWUgZm9yIG5jdXJzZXMnIGVycm9yIHJlcG9ydGluZy4gIChJZiB3ZSBhcmUgbm90IHVzaW5nIEJTRAorICAgICAqIGNnZXRlbnQsIHRoZW4gaXQgaXMgdGhlIGFjdHVhbCBmaWxlbmFtZSkuCisgICAgICovCisgICAgaWYgKGkgPj0gMCkgeworI2lmIEhBVkVfQlNEX0NHRVRFTlQKKwljaGFyIHRlbXBbUEFUSF9NQVhdOworCisJX25jX3N0cl9pbml0KCZkZXNjLCB0ZW1wLCBzaXplb2YodGVtcCkpOworCV9uY19zYWZlX3N0cmNweSgmZGVzYywgcGF0aHZlY1tpXSk7CisJX25jX3NhZmVfc3RyY2F0KCZkZXNjLCAiLmRiIik7CisJaWYgKF9uY19hY2Nlc3ModGVtcCwgUl9PSykgPT0gMCkgeworCSAgICBfbmNfc2FmZV9zdHJjcHkoJmRlc2MsIHBhdGh2ZWNbaV0pOworCX0KKwlpZiAoKHRoZV9zb3VyY2UgPSBzdHJkdXAodGVtcCkpICE9IDApCisJICAgICpzb3VyY2VuYW1lID0gdGhlX3NvdXJjZTsKKyNlbHNlCisJaWYgKCh0aGVfc291cmNlID0gc3RyZHVwKHBhdGh2ZWNbaV0pKSAhPSAwKQorCSAgICAqc291cmNlbmFtZSA9IHRoZV9zb3VyY2U7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gKGkpOworfQorI2VuZGlmIC8qIFVTRV9CU0RfVEdFVEVOVCAqLworI2VuZGlmIC8qIFVTRV9HRVRDQVAgKi8KKworI2RlZmluZSBNQVhQQVRIUwkzMgorCisvKgorICogQWRkIGEgZmlsZW5hbWUgdG8gdGhlIGxpc3QgaW4gJ3Rlcm1wYXRoc1tdJywgY2hlY2tpbmcgdGhhdCB3ZSByZWFsbHkgaGF2ZQorICogYSByaWdodCB0byBvcGVuIHRoZSBmaWxlLgorICovCisjaWYgIVVTRV9HRVRDQVAKK3N0YXRpYyBpbnQKK2FkZF90YyhjaGFyICp0ZXJtcGF0aHNbXSwgY2hhciAqcGF0aCwgaW50IGNvdW50KQoreworICAgIGNoYXIgKnNhdmUgPSBzdHJjaHIocGF0aCwgTkNVUlNFU19QQVRIU0VQKTsKKyAgICBpZiAoc2F2ZSAhPSAwKQorCSpzYXZlID0gJ1wwJzsKKyAgICBpZiAoY291bnQgPCBNQVhQQVRIUworCSYmIF9uY19hY2Nlc3MocGF0aCwgUl9PSykgPT0gMCkgeworCXRlcm1wYXRoc1tjb3VudCsrXSA9IHBhdGg7CisJVCgoIkFkZGluZyB0ZXJtcGF0aCAlcyIsIHBhdGgpKTsKKyAgICB9CisgICAgdGVybXBhdGhzW2NvdW50XSA9IDA7CisgICAgaWYgKHNhdmUgIT0gMCkKKwkqc2F2ZSA9IE5DVVJTRVNfUEFUSFNFUDsKKyAgICByZXR1cm4gY291bnQ7Cit9CisjZGVmaW5lIEFERF9UQyhwYXRoLCBjb3VudCkgZmlsZWNvdW50ID0gYWRkX3RjKHRlcm1wYXRocywgcGF0aCwgY291bnQpCisjZW5kaWYgLyogIVVTRV9HRVRDQVAgKi8KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3JlYWRfdGVybWNhcF9lbnRyeShjb25zdCBjaGFyICpjb25zdCB0biwgVEVSTVRZUEUgKmNvbnN0IHRwKQoreworICAgIGludCBmb3VuZCA9IFRHRVRFTlRfTk87CisgICAgRU5UUlkgKmVwOworI2lmIFVTRV9HRVRDQVBfQ0FDSEUKKyAgICBjaGFyIGN3ZF9idWZbUEFUSF9NQVhdOworI2VuZGlmCisjaWYgVVNFX0dFVENBUAorICAgIGNoYXIgKnAsIHRjW1RCVUZTSVpdOworICAgIGludCBzdGF0dXM7CisgICAgc3RhdGljIGNoYXIgKnNvdXJjZTsKKyAgICBzdGF0aWMgaW50IGxpbmVubzsKKworICAgIFQoKCJyZWFkIHRlcm1jYXAgZW50cnkgZm9yICVzIiwgdG4pKTsKKworICAgIGlmIChzdHJsZW4odG4pID09IDAKKwl8fCBzdHJjbXAodG4sICIuIikgPT0gMAorCXx8IHN0cmNtcCh0biwgIi4uIikgPT0gMAorCXx8IF9uY19wYXRobGFzdCh0bikgIT0gMCkgeworCVQoKCJpbGxlZ2FsIG9yIG1pc3NpbmcgZW50cnkgbmFtZSAnJXMnIiwgdG4pKTsKKwlyZXR1cm4gVEdFVEVOVF9OTzsKKyAgICB9CisKKyAgICBpZiAodXNlX3Rlcm1pbmZvX3ZhcnMoKSAmJiAocCA9IGdldGVudigiVEVSTUNBUCIpKSAhPSAwCisJJiYgIV9uY19pc19hYnNfcGF0aChwKSAmJiBfbmNfbmFtZV9tYXRjaChwLCB0biwgInw6IikpIHsKKwkvKiBURVJNQ0FQIGhvbGRzIGEgdGVybWNhcCBlbnRyeSAqLworCXN0cm5jcHkodGMsIHAsIHNpemVvZih0YykgLSAxKTsKKwl0Y1tzaXplb2YodGMpIC0gMV0gPSAnXDAnOworCV9uY19zZXRfc291cmNlKCJURVJNQ0FQIik7CisgICAgfSBlbHNlIHsKKwkvKiB3ZSdyZSB1c2luZyBnZXRjYXAoMykgKi8KKwlpZiAoKHN0YXR1cyA9IF9uY190Z2V0ZW50KHRjLCAmc291cmNlLCAmbGluZW5vLCB0bikpIDwgMCkKKwkgICAgcmV0dXJuIChzdGF0dXMgPT0gVENfTk9UX0ZPVU5EID8gVEdFVEVOVF9OTyA6IFRHRVRFTlRfRVJSKTsKKworCV9uY19jdXJyX2xpbmUgPSBsaW5lbm87CisJX25jX3NldF9zb3VyY2Uoc291cmNlKTsKKyAgICB9CisgICAgX25jX3JlYWRfZW50cnlfc291cmNlKChGSUxFICopIDAsIHRjLCBGQUxTRSwgRkFMU0UsIE5VTExIT09LKTsKKyNlbHNlCisgICAgLyoKKyAgICAgKiBIZXJlIGlzIHdoYXQgdGhlIDQuNEJTRCB0ZXJtY2FwKDMpIHBhZ2UgcHJlc2NyaWJlczoKKyAgICAgKgorICAgICAqIEl0IHdpbGwgbG9vayBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIGEgVEVSTUNBUCB2YXJpYWJsZS4gIElmIGZvdW5kLCBhbmQKKyAgICAgKiB0aGUgdmFsdWUgZG9lcyBub3QgYmVnaW4gd2l0aCBhIHNsYXNoLCBhbmQgdGhlIHRlcm1pbmFsIHR5cGUgbmFtZSBpcyB0aGUKKyAgICAgKiBzYW1lIGFzIHRoZSBlbnZpcm9ubWVudCBzdHJpbmcgVEVSTSwgdGhlIFRFUk1DQVAgc3RyaW5nIGlzIHVzZWQgaW5zdGVhZAorICAgICAqIG9mIHJlYWRpbmcgYSB0ZXJtY2FwIGZpbGUuICBJZiBpdCBkb2VzIGJlZ2luIHdpdGggYSBzbGFzaCwgdGhlIHN0cmluZyBpcworICAgICAqIHVzZWQgYXMgYSBwYXRoIG5hbWUgb2YgdGhlIHRlcm1jYXAgZmlsZSB0byBzZWFyY2guICBJZiBURVJNQ0FQIGRvZXMgbm90CisgICAgICogYmVnaW4gd2l0aCBhIHNsYXNoIGFuZCBuYW1lIGlzIGRpZmZlcmVudCBmcm9tIFRFUk0sIHRnZXRlbnQoKSBzZWFyY2hlcworICAgICAqIHRoZSBmaWxlcyAkSE9NRS8udGVybWNhcCBhbmQgL3Vzci9zaGFyZS9taXNjL3Rlcm1jYXAsIGluIHRoYXQgb3JkZXIsCisgICAgICogdW5sZXNzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNUEFUSCBleGlzdHMsIGluIHdoaWNoIGNhc2UgaXQKKyAgICAgKiBzcGVjaWZpZXMgYSBsaXN0IG9mIGZpbGUgcGF0aG5hbWVzIChzZXBhcmF0ZWQgYnkgc3BhY2VzIG9yIGNvbG9ucykgdG8gYmUKKyAgICAgKiBzZWFyY2hlZCBpbnN0ZWFkLgorICAgICAqCisgICAgICogSXQgZ29lcyBvbiB0byBzdGF0ZToKKyAgICAgKgorICAgICAqIFdoZW5ldmVyIG11bHRpcGxlIGZpbGVzIGFyZSBzZWFyY2hlZCBhbmQgYSB0YyBmaWVsZCBvY2N1cnMgaW4gdGhlCisgICAgICogcmVxdWVzdGVkIGVudHJ5LCB0aGUgZW50cnkgaXQgbmFtZXMgbXVzdCBiZSBmb3VuZCBpbiB0aGUgc2FtZSBmaWxlIG9yCisgICAgICogb25lIG9mIHRoZSBzdWNjZWVkaW5nIGZpbGVzLgorICAgICAqCisgICAgICogSG93ZXZlciwgdGhpcyByZXN0cmljdGlvbiBpcyByZWxheGVkIGluIG5jdXJzZXM7IHRjIHJlZmVyZW5jZXMgdG8KKyAgICAgKiBwcmV2aW91cyBmaWxlcyBhcmUgcGVybWl0dGVkLgorICAgICAqCisgICAgICogVGhpcyByb3V0aW5lIHJldHVybnMgMSBpZiBhbiBlbnRyeSBpcyBmb3VuZCwgMCBpZiBub3QgZm91bmQsIGFuZCAtMSBpZgorICAgICAqIHRoZSBkYXRhYmFzZSBpcyBub3QgYWNjZXNzaWJsZS4KKyAgICAgKi8KKyAgICBGSUxFICpmcDsKKyAgICBjaGFyICp0YywgKnRlcm1wYXRoc1tNQVhQQVRIU107CisgICAgaW50IGZpbGVjb3VudCA9IDA7CisgICAgaW50IGosIGs7CisgICAgYm9vbCB1c2VfYnVmZmVyID0gRkFMU0U7CisgICAgYm9vbCBub3JtYWwgPSBUUlVFOworICAgIGNoYXIgdGNfYnVmWzEwMjRdOworICAgIGNoYXIgcGF0aGJ1ZltQQVRIX01BWF07CisgICAgY2hhciAqY29waWVkID0gMDsKKyAgICBjaGFyICpjcDsKKyAgICBzdHJ1Y3Qgc3RhdCB0ZXN0X3N0YXRbTUFYUEFUSFNdOworCisgICAgdGVybXBhdGhzW2ZpbGVjb3VudF0gPSAwOworICAgIGlmICh1c2VfdGVybWluZm9fdmFycygpICYmICh0YyA9IGdldGVudigiVEVSTUNBUCIpKSAhPSAwKSB7CisJaWYgKF9uY19pc19hYnNfcGF0aCh0YykpIHsJLyogaW50ZXJwcmV0IGFzIGEgZmlsZW5hbWUgKi8KKwkgICAgQUREX1RDKHRjLCAwKTsKKwkgICAgbm9ybWFsID0gRkFMU0U7CisJfSBlbHNlIGlmIChfbmNfbmFtZV9tYXRjaCh0YywgdG4sICJ8OiIpKSB7CS8qIHRyZWF0IGFzIGEgY2FwYWJpbGl0eSBmaWxlICovCisJICAgIHVzZV9idWZmZXIgPSBUUlVFOworCSAgICAodm9pZCkgc3ByaW50Zih0Y19idWYsICIlLipzXG4iLCAoaW50KSBzaXplb2YodGNfYnVmKSAtIDIsIHRjKTsKKwkgICAgbm9ybWFsID0gRkFMU0U7CisJfQorICAgIH0KKworICAgIGlmIChub3JtYWwpIHsJCS8qIG5vcm1hbCBjYXNlICovCisJY2hhciBlbnZob21lW1BBVEhfTUFYXSwgKmg7CisKKwljb3BpZWQgPSBzdHJkdXAoZ2V0X3Rlcm1wYXRoKCkpOworCWZvciAoY3AgPSBjb3BpZWQ7ICpjcDsgY3ArKykgeworCSAgICBpZiAoKmNwID09IE5DVVJTRVNfUEFUSFNFUCkKKwkJKmNwID0gJ1wwJzsKKwkgICAgZWxzZSBpZiAoY3AgPT0gY29waWVkIHx8IGNwWy0xXSA9PSAnXDAnKSB7CisJCUFERF9UQyhjcCwgZmlsZWNvdW50KTsKKwkgICAgfQorCX0KKworI2RlZmluZSBQUklWQVRFX0NBUCAiJXMvLnRlcm1jYXAiCisKKwlpZiAodXNlX3Rlcm1pbmZvX3ZhcnMoKSAmJiAoaCA9IGdldGVudigiSE9NRSIpKSAhPSBOVUxMICYmICpoICE9ICdcMCcKKwkgICAgJiYgKHN0cmxlbihoKSArIHNpemVvZihQUklWQVRFX0NBUCkpIDwgUEFUSF9NQVgpIHsKKwkgICAgLyogdXNlcidzIC50ZXJtY2FwLCBpZiBhbnksIHNob3VsZCBvdmVycmlkZSBpdCAqLworCSAgICAodm9pZCkgc3RyY3B5KGVudmhvbWUsIGgpOworCSAgICAodm9pZCkgc3ByaW50ZihwYXRoYnVmLCBQUklWQVRFX0NBUCwgZW52aG9tZSk7CisJICAgIEFERF9UQyhwYXRoYnVmLCBmaWxlY291bnQpOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFByb2JhYmx5IC9ldGMvdGVybWNhcCBpcyBhIHN5bWxpbmsgdG8gL3Vzci9zaGFyZS9taXNjL3Rlcm1jYXAuCisgICAgICogQXZvaWQgcmVhZGluZyB0aGUgc2FtZSBmaWxlIHR3aWNlLgorICAgICAqLworI2lmIEhBVkVfTElOSworICAgIGZvciAoaiA9IDA7IGogPCBmaWxlY291bnQ7IGorKykgeworCWJvb2wgb21pdCA9IEZBTFNFOworCWlmIChzdGF0KHRlcm1wYXRoc1tqXSwgJnRlc3Rfc3RhdFtqXSkgIT0gMAorCSAgICB8fCAodGVzdF9zdGF0W2pdLnN0X21vZGUgJiBTX0lGTVQpICE9IFNfSUZSRUcpIHsKKwkgICAgb21pdCA9IFRSVUU7CisJfSBlbHNlIHsKKwkgICAgZm9yIChrID0gMDsgayA8IGo7IGsrKykgeworCQlpZiAodGVzdF9zdGF0W2tdLnN0X2RldiA9PSB0ZXN0X3N0YXRbal0uc3RfZGV2CisJCSAgICAmJiB0ZXN0X3N0YXRba10uc3RfaW5vID09IHRlc3Rfc3RhdFtqXS5zdF9pbm8pIHsKKwkJICAgIG9taXQgPSBUUlVFOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKwlpZiAob21pdCkgeworCSAgICBUKCgiUGF0aCAlcyBpcyBhIGR1cGxpY2F0ZSIsIHRlcm1wYXRoc1tqXSkpOworCSAgICBmb3IgKGsgPSBqICsgMTsgayA8IGZpbGVjb3VudDsgaysrKSB7CisJCXRlcm1wYXRoc1trIC0gMV0gPSB0ZXJtcGF0aHNba107CisJCXRlc3Rfc3RhdFtrIC0gMV0gPSB0ZXN0X3N0YXRba107CisJICAgIH0KKwkgICAgLS1maWxlY291bnQ7CisJICAgIC0tajsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBwYXJzZSB0aGUgc291cmNlcyAqLworICAgIGlmICh1c2VfYnVmZmVyKSB7CisJX25jX3NldF9zb3VyY2UoIlRFUk1DQVAiKTsKKworCS8qCisJICogV2UgZG9uJ3Qgc3VwcHJlc3Mgd2FybmluZyBtZXNzYWdlcyBoZXJlLiAgVGhlIHByZXN1bXB0aW9uIGlzCisJICogdGhhdCBzaW5jZSBpdCdzIGp1c3QgYSBzaW5nbGUgZW50cnksIHRoZXkgd29uJ3QgYmUgYSBwYWluLgorCSAqLworCV9uY19yZWFkX2VudHJ5X3NvdXJjZSgoRklMRSAqKSAwLCB0Y19idWYsIEZBTFNFLCBGQUxTRSwgTlVMTEhPT0spOworICAgIH0gZWxzZSB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmlsZWNvdW50OyBpKyspIHsKKworCSAgICBUKCgiTG9va2luZyBmb3IgJXMgaW4gJXMiLCB0biwgdGVybXBhdGhzW2ldKSk7CisJICAgIGlmIChfbmNfYWNjZXNzKHRlcm1wYXRoc1tpXSwgUl9PSykgPT0gMAorCQkmJiAoZnAgPSBmb3Blbih0ZXJtcGF0aHNbaV0sICJyIikpICE9IChGSUxFICopIDApIHsKKwkJX25jX3NldF9zb3VyY2UodGVybXBhdGhzW2ldKTsKKworCQkvKgorCQkgKiBTdXBwcmVzcyB3YXJuaW5nIG1lc3NhZ2VzLiAgT3RoZXJ3aXNlIHlvdSBnZXQgNDAwIGxpbmVzIG9mCisJCSAqIGNyYXAgZnJvbSBhcmNoYWljIHRlcm1jYXAgZmlsZXMgYXMgbmN1cnNlcyBjb21wbGFpbnMgYWJvdXQKKwkJICogYWxsIHRoZSBvYnNvbGV0ZSBjYXBhYmlsaXRpZXMuCisJCSAqLworCQlfbmNfcmVhZF9lbnRyeV9zb3VyY2UoZnAsIChjaGFyICopIDAsIEZBTFNFLCBUUlVFLCBOVUxMSE9PSyk7CisKKwkJKHZvaWQpIGZjbG9zZShmcCk7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChjb3BpZWQgIT0gMCkKKwlmcmVlKGNvcGllZCk7CisjZW5kaWYgLyogVVNFX0dFVENBUCAqLworCisgICAgaWYgKF9uY19oZWFkID09IDApCisJcmV0dXJuIChUR0VURU5UX0VSUik7CisKKyAgICAvKiByZXNvbHZlIGFsbCB1c2UgcmVmZXJlbmNlcyAqLworICAgIF9uY19yZXNvbHZlX3VzZXMyKFRSVUUsIEZBTFNFKTsKKworICAgIC8qIGZpbmQgYSB0ZXJtaW5hbCBtYXRjaGluZyB0biwgaWYgd2UgY2FuICovCisjaWYgVVNFX0dFVENBUF9DQUNIRQorICAgIGlmIChnZXRjd2QoY3dkX2J1Ziwgc2l6ZW9mKGN3ZF9idWYpKSAhPSAwKSB7CisJX25jX3NldF93cml0ZWRpcigoY2hhciAqKSAwKTsJLyogbm90ZTogdGhpcyBkb2VzIGEgY2hkaXIgKi8KKyNlbmRpZgorCWZvcl9lbnRyeV9saXN0KGVwKSB7CisJICAgIGlmIChfbmNfbmFtZV9tYXRjaChlcC0+dHRlcm0udGVybV9uYW1lcywgdG4sICJ8OiIpKSB7CisJCS8qCisJCSAqIE1ha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMsIGRlbGlua2VkCisJCSAqIGZyb20gdGhlIGxpc3QuCisJCSAqLworCQkqdHAgPSBlcC0+dHRlcm07CisJCV9uY19kZWxpbmtfZW50cnkoX25jX2hlYWQsICYoZXAtPnR0ZXJtKSk7CisJCWZyZWUoZXApOworCisJCS8qCisJCSAqIE9LLCBub3cgdHJ5IHRvIHdyaXRlIHRoZSB0eXBlIHRvIHVzZXIncyB0ZXJtaW5mbyBkaXJlY3RvcnkuIAorCQkgKiBOZXh0IHRpbWUgaGUgbG9hZHMgdGhpcywgaXQgd2lsbCBjb21lIHRocm91Z2ggdGVybWluZm8uCisJCSAqCisJCSAqIEFkdmFudGFnZTogIFNlY29uZCBhbmQgc3Vic2VxdWVudCBmZXRjaGVzIG9mIHRoaXMgZW50cnkgd2lsbAorCQkgKiBiZSB2ZXJ5IGZhc3QuCisJCSAqCisJCSAqIERpc2FkdmFudGFnZTogIEFmdGVyIHRoZSBmaXJzdCB0aW1lIGEgdGVybWNhcCB0eXBlIGlzIGxvYWRlZAorCQkgKiBieSBpdHMgdXNlciwgZWRpdGluZyBpdCBpbiB0aGUgL2V0Yy90ZXJtY2FwIGZpbGUsIG9yIGluCisJCSAqIFRFUk1DQVAsIG9yIGluIGEgbG9jYWwgfi8udGVybWNhcCwgd2lsbCBiZSBpbmVmZmVjdGl2ZQorCQkgKiB1bmxlc3MgdGhlIHRlcm1pbmZvIGVudHJ5IGlzIGV4cGxpY2l0bHkgcmVtb3ZlZC4KKwkJICovCisjaWYgVVNFX0dFVENBUF9DQUNIRQorCQkodm9pZCkgX25jX3dyaXRlX2VudHJ5KHRwKTsKKyNlbmRpZgorCQlmb3VuZCA9IFRHRVRFTlRfWUVTOworCQlicmVhazsKKwkgICAgfQorCX0KKyNpZiBVU0VfR0VUQ0FQX0NBQ0hFCisJY2hkaXIoY3dkX2J1Zik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gKGZvdW5kKTsKK30KKyNlbHNlCitleHRlcm4KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfcmVhZF90ZXJtY2FwKHZvaWQpOworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19yZWFkX3Rlcm1jYXAodm9pZCkKK3sKK30KKyNlbmRpZiAvKiBQVVJFX1RFUk1JTkZPICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3NldGJ1Zi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9zZXRidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkxMGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby9zZXRidWYuYwpAQCAtMCwwICsxLDE1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglzZXRidWYuYworKioKKyoqCVN1cHBvcnQgZm9yIHNldF90ZXJtKCksIHJlc2V0X3NoZWxsX21vZGUoKSwgcmVzZXRfcHJvZ19tb2RlKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBzZXRidWYuYyx2IDEuMTMgMjAwNy8wNS8xMiAxOTowNDowMiB0b20gRXhwICQiKQorCisvKgorICogSWYgdGhlIG91dHB1dCBmaWxlIGRlc2NyaXB0b3IgaXMgY29ubmVjdGVkIHRvIGEgdHR5ICh0aGUgdHlwaWNhbCBjYXNlKSBpdAorICogd2lsbCBwcm9iYWJseSBiZSBsaW5lLWJ1ZmZlcmVkLiAgS2VpdGggQm9zdGljIHBvaW50ZWQgb3V0IHRoYXQgd2UgZG9uJ3Qgd2FudAorICogdGhpczsgaXQgaG9zZXMgcGVvcGxlIHJ1bm5pbmcgb3ZlciBuZXR3b3JrcyBieSBmb3JjaW5nIG91dCBhIGJ1bmNoIG9mIHNtYWxsCisgKiBwYWNrZXRzIGluc3RlYWQgb2Ygb25lIGJpZyBvbmUsIHNvIHNjcmVlbiB1cGRhdGVzIG9uIHB0eXMgbG9vayBqZXJreS4KKyAqIFJlc3RvcmUgYmxvY2sgYnVmZmVyaW5nIHRvIHByZXZlbnQgdGhpcyBtaW5vciBsb3NzYWdlLgorICoKKyAqIFRoZSBidWZmZXIgc2l6ZSBpcyBhIGNvbXByb21pc2UuICBJZGVhbGx5IHdlJ2QgbGlrZSBhIGJ1ZmZlciB0aGF0IGNhbiBob2xkCisgKiB0aGUgbWF4aW11bSBwb3NzaWJsZSB1cGRhdGUgc2l6ZSAodGhlIHdob2xlIHNjcmVlbiBwbHVzIGN1cCBjb21tYW5kcyB0bworICogY2hhbmdlIGxpbmVzIGFzIGl0J3MgcGFpbnRlZCkuICBPbiBhIDY2LWxpbmUgeHRlcm0gdGhpcyBjYW4gYmVjb21lCisgKiBleGNlc3NpdmUuICBTbyB3ZSBtaW4gaXQgd2l0aCB0aGUgYW1vdW50IG9mIGRhdGEgd2UgdGhpbmsgd2UgY2FuIGdldCB0aHJvdWdoCisgKiB0d28gRXRoZXJuZXQgcGFja2V0cyAobWF4aW11bSBwYWNrZXQgc2l6ZSAtIDEwMCBmb3IgVENQL0lQIG92ZXJoZWFkKS4KKyAqCisgKiBXaHkgdHdvIGV0aGVybmV0IHBhY2tldHM/ICBJdCB1c2VkIHRvIGJlIG9uZSwgb24gdGhlIHRoZW9yeSB0aGF0IHNhaWQKKyAqIHBhY2tldHMgZGVmaW5lIHRoZSBtYXhpbXVtIHNpemUgb2YgYXRvbWljIHVwZGF0ZS4gIEJ1dCB0aGF0J3MgbGVzcyB0aGFuIHRoZQorICogMjAwMCBjaGFycyBvbiBhIDI1IHggODAgc2NyZWVuLCBhbmQgd2UgZG9uJ3Qgd2FudCBsb2NhbCB1cGRhdGVzIHRvIGZsaWNrZXIKKyAqIGVpdGhlci4gIFR3byBwYWNrZXQgbGVuZ3RocyB3aWxsIGhhbmRsZSB1cCB0byBhIDM1IHggODAgc2NyZWVuLgorICoKKyAqIFRoZSBtYWdpYyAnNicgaXMgdGhlIGVzdGltYXRlZCBsZW5ndGggb2YgdGhlIGVuZC1vZi1saW5lIGN1cCBzZXF1ZW5jZSB0byBnbworICogdG8gdGhlIG5leHQgbGluZS4gIEl0J3MgZ2VuZXJvdXMuICBXZSB1c2VkIHRvIG1lc3Mgd2l0aCB0aGUgYnVmZmVyaW5nIGluCisgKiBpbml0X212Y3VyKCkgYWZ0ZXIgY29zdCBjb21wdXRhdGlvbiwgYnV0IHRoYXQgbG9zdCB0aGUgc2VxdWVuY2VzIGVtaXR0ZWQgYnkKKyAqIGluaXRfYWNzKCkgaW4gc2V0dXBzY3JlZW4oKS4KKyAqCisgKiAiVGhlIHNldHZidWYgZnVuY3Rpb24gbWF5IGJlIHVzZWQgb25seSBhZnRlciB0aGUgc3RyZWFtIHBvaW50ZWQgdG8gYnkgc3RyZWFtCisgKiBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYW4gb3BlbiBmaWxlIGFuZCBiZWZvcmUgYW55IG90aGVyIG9wZXJhdGlvbiBpcworICogcGVyZm9ybWVkIG9uIHRoZSBzdHJlYW0uIiAoSVNPIDcuOS41LjYuKQorICoKKyAqIEdycnJyLi4uCisgKgorICogT24gYSBsaWdodGVyIG5vdGUsIG1hbnkgaW1wbGVtZW50YXRpb25zIGRvIGluIGZhY3QgYWxsb3cgYW4gYXBwbGljYXRpb24gdG8KKyAqIHJlc2V0IHRoZSBidWZmZXJpbmcgYWZ0ZXIgaXQgaGFzIGJlZW4gd3JpdHRlbiB0by4gIFdlIHRyeSB0byBkbyB0aGlzIGJlY2F1c2UKKyAqIG90aGVyd2lzZSB3ZSBsZWF2ZSBzdGRvdXQgaW4gYnVmZmVyZWQgbW9kZSBhZnRlciBlbmR3aW4oKSBpcyBjYWxsZWQuICAoVGhpcworICogYWxzbyBoYXBwZW5zIHdpdGggU1ZyNCBjdXJzZXMpLgorICoKKyAqIFRoZXJlIGFyZSBwcm9zL2NvbnM6CisgKgorICogY29uOgorICoJVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgd2UgY2FuIHJlZXN0YWJsaXNoIGJ1ZmZlcmluZyBvbmNlIHdlJ3ZlCisgKglkcm9wcGVkIGl0LgorICoKKyAqCVdlIF9tYXlfIGxvc2UgZGF0YSBpZiB0aGUgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgY29vcmRpbmF0ZSB0aGlzIHdpdGgKKyAqCWZmbHVzaC4KKyAqCisgKiBwcm86CisgKglBbiBpbXBsZW1lbnRhdGlvbiBpcyBtb3JlIGxpa2VseSB0byByZWZ1c2UgdG8gY2hhbmdlIHRoZSBidWZmZXJpbmcgdGhhbgorICoJdG8gZG8gaXQgaW4gb25lIG9mIHRoZSB3YXlzIG1lbnRpb25lZCBhYm92ZS4KKyAqCisgKglUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gaGF2ZSB0aGUgYXBwbGljYXRpb24gdHJ5IHRvIGNoYW5nZSBidWZmZXJpbmcKKyAqCWl0c2VsZiwgd2hpY2ggaXMgY2VydGFpbmx5IG5vIGltcHJvdmVtZW50LgorICoKKyAqIEp1c3QgaW4gY2FzZSBpdCBkb2VzIG5vdCB3b3JrIHdlbGwgb24gYSBwYXJ0aWN1bGFyIHN5c3RlbSwgdGhlIGNhbGxzIHRvCisgKiBjaGFuZ2UgYnVmZmVyaW5nIGFyZSBhbGwgdmlhIHRoZSBtYWNybyBOQ19CVUZGRVJFRC4gIFNvbWUgaW1wbGVtZW50YXRpb25zCisgKiBkbyBpbmRlZWQgZ2V0IGNvbmZ1c2VkIGJ5IGNoYW5naW5nIHNldGJ1ZiBvbi9vZmYsIGFuZCB3aWxsIG92ZXJydW4gdGhlCisgKiBidWZmZXIuICBTbyB3ZSBkaXNhYmxlIHRoaXMgYnkgZGVmYXVsdCAodGhlcmUgbWF5IHlldCBiZSBhIHdvcmthcm91bmQpLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NldF9idWZmZXIoRklMRSAqb2ZwLCBib29sIGJ1ZmZlcmVkKQoreworICAgIC8qIG9wdGlvbmFsIG9wdGltaXphdGlvbiBoYWNrIC0tIGRvIGJlZm9yZSBhbnkgb3V0cHV0IHRvIG9mcCAqLworI2lmIEhBVkVfU0VUVkJVRiB8fCBIQVZFX1NFVEJVRkZFUgorICAgIGlmIChTUC0+X2J1ZmZlcmVkICE9IGJ1ZmZlcmVkKSB7CisJdW5zaWduZWQgYnVmX2xlbjsKKwljaGFyICpidWZfcHRyOworCisJaWYgKGdldGVudigiTkNVUlNFU19OT19TRVRCVUYiKSAhPSAwKQorCSAgICByZXR1cm47CisKKwlmZmx1c2gob2ZwKTsKKyNpZmRlZiBfX0RKR1BQX18KKwlzZXRtb2RlKG9mcCwgT19CSU5BUlkpOworI2VuZGlmCisJaWYgKGJ1ZmZlcmVkICE9IDApIHsKKwkgICAgYnVmX2xlbiA9IG1pbihMSU5FUyAqIChDT0xTICsgNiksIDI4MDApOworCSAgICBpZiAoKGJ1Zl9wdHIgPSBTUC0+X3NldGJ1ZikgPT0gMCkgeworCQlpZiAoKGJ1Zl9wdHIgPSB0eXBlTWFsbG9jKGNoYXIsIGJ1Zl9sZW4pKSA9PSBOVUxMKQorCQkgICAgICByZXR1cm47CisJCVNQLT5fc2V0YnVmID0gYnVmX3B0cjsKKwkJLyogRG9uJ3QgdHJ5IHRvIGZyZWUgdGhpcyEgKi8KKwkgICAgfQorI2lmICFVU0VfU0VUQlVGXzAKKwkgICAgZWxzZQorCQlyZXR1cm47CisjZW5kaWYKKwl9IGVsc2UgeworI2lmICFVU0VfU0VUQlVGXzAKKwkgICAgcmV0dXJuOworI2Vsc2UKKwkgICAgYnVmX2xlbiA9IDA7CisJICAgIGJ1Zl9wdHIgPSAwOworI2VuZGlmCisJfQorCisjaWYgSEFWRV9TRVRWQlVGCisjaWZkZWYgU0VUVkJVRl9SRVZFUlNFRAkJLyogcHJlLXN2cjM/ICovCisJKHZvaWQpIHNldHZidWYob2ZwLCBidWZfcHRyLCBidWZfbGVuLCBidWZfbGVuID8gX0lPRkJGIDogX0lPTEJGKTsKKyNlbHNlCisJKHZvaWQpIHNldHZidWYob2ZwLCBidWZfcHRyLCBidWZfbGVuID8gX0lPRkJGIDogX0lPTEJGLCBidWZfbGVuKTsKKyNlbmRpZgorI2VsaWYgSEFWRV9TRVRCVUZGRVIKKwkodm9pZCkgc2V0YnVmZmVyKG9mcCwgYnVmX3B0ciwgKGludCkgYnVmX2xlbik7CisjZW5kaWYKKworCVNQLT5fYnVmZmVyZWQgPSBidWZmZXJlZDsKKyAgICB9CisjZW5kaWYgLyogSEFWRV9TRVRWQlVGIHx8IEhBVkVfU0VUQlVGRkVSICovCit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3N0cmluZ3MuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vc3RyaW5ncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2QyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3N0cmluZ3MuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9tdmN1ci5jCisqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBzdHJpbmdzLmMsdiAxLjYgMjAwNy8wOC8xMSAxNzoxMjoxNyB0b20gRXhwICQiKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVXNlZnVsIHN0cmluZyBmdW5jdGlvbnMgKGVzcGVjaWFsbHkgZm9yIG12Y3VyKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhSEFWRV9TVFJTVFIKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19zdHJzdHIoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKK3sKKyAgICBzaXplX3QgbGVuMSA9IHN0cmxlbihoYXlzdGFjayk7CisgICAgc2l6ZV90IGxlbjIgPSBzdHJsZW4obmVlZGxlKTsKKyAgICBjaGFyICpyZXN1bHQgPSAwOworCisgICAgd2hpbGUgKChsZW4xICE9IDApICYmIChsZW4xLS0gPj0gbGVuMikpIHsKKwlpZiAoIXN0cm5jbXAoaGF5c3RhY2ssIG5lZWRsZSwgbGVuMikpIHsKKwkgICAgcmVzdWx0ID0gKGNoYXIgKikgaGF5c3RhY2s7CisJICAgIGJyZWFrOworCX0KKwloYXlzdGFjaysrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yIHNvIHdlIGNhbiBhcHBlbmQgdG8gaXQuICBOb3RlIHRoYXQgJ3NyYycgbWF5CisgKiBiZSBhIG51bGwgcG9pbnRlciAoc2VlIF9uY19zdHJfbnVsbCksIHNvIHRoZSBjb3JyZXNwb25kaW5nIHN0cmNhdCBhbmQKKyAqIHN0cmNweSBjYWxscyBoYXZlIHRvIGFsbG93IGZvciB0aGlzLgorICovCitOQ1VSU0VTX0VYUE9SVChzdHJpbmdfZGVzYyAqKQorX25jX3N0cl9pbml0KHN0cmluZ19kZXNjICogZHN0LCBjaGFyICpzcmMsIHNpemVfdCBsZW4pCit7CisgICAgaWYgKGRzdCAhPSAwKSB7CisJZHN0LT5zX2hlYWQgPSBzcmM7CisJZHN0LT5zX3RhaWwgPSBzcmM7CisJZHN0LT5zX3NpemUgPSBsZW4gLSAxOworCWRzdC0+c19pbml0ID0gZHN0LT5zX3NpemU7CisJaWYgKHNyYyAhPSAwKQorCSAgICAqc3JjID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGRzdDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGRlc2NyaXB0b3IgZm9yIG9ubHkgdHJhY2tpbmcgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZC4KKyAqLworTkNVUlNFU19FWFBPUlQoc3RyaW5nX2Rlc2MgKikKK19uY19zdHJfbnVsbChzdHJpbmdfZGVzYyAqIGRzdCwgc2l6ZV90IGxlbikKK3sKKyAgICByZXR1cm4gX25jX3N0cl9pbml0KGRzdCwgMCwgbGVuKTsKK30KKworLyoKKyAqIENvcHkgYSBkZXNjcmlwdG9yCisgKi8KK05DVVJTRVNfRVhQT1JUKHN0cmluZ19kZXNjICopCitfbmNfc3RyX2NvcHkoc3RyaW5nX2Rlc2MgKiBkc3QsIHN0cmluZ19kZXNjICogc3JjKQoreworICAgICpkc3QgPSAqc3JjOworICAgIHJldHVybiBkc3Q7Cit9CisKKy8qCisgKiBSZXBsYWNlcyBzdHJjYXQgaW50byBhIGZpeGVkIGJ1ZmZlciwgcmV0dXJuaW5nIGZhbHNlIG9uIGZhaWx1cmUuCisgKi8KK05DVVJTRVNfRVhQT1JUKGJvb2wpCitfbmNfc2FmZV9zdHJjYXQoc3RyaW5nX2Rlc2MgKiBkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgICBpZiAoc3JjICE9IDApIHsKKwlzaXplX3QgbGVuID0gc3RybGVuKHNyYyk7CisKKwlpZiAobGVuIDwgZHN0LT5zX3NpemUpIHsKKwkgICAgaWYgKGRzdC0+c190YWlsICE9IDApIHsKKwkJc3RyY3B5KGRzdC0+c190YWlsLCBzcmMpOworCQlkc3QtPnNfdGFpbCArPSBsZW47CisJICAgIH0KKwkgICAgZHN0LT5zX3NpemUgLT0gbGVuOworCSAgICByZXR1cm4gVFJVRTsKKwl9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIFJlcGxhY2VzIHN0cmNweSBpbnRvIGEgZml4ZWQgYnVmZmVyLCByZXR1cm5pbmcgZmFsc2Ugb24gZmFpbHVyZS4KKyAqLworTkNVUlNFU19FWFBPUlQoYm9vbCkKK19uY19zYWZlX3N0cmNweShzdHJpbmdfZGVzYyAqIGRzdCwgY29uc3QgY2hhciAqc3JjKQoreworICAgIGlmIChzcmMgIT0gMCkgeworCXNpemVfdCBsZW4gPSBzdHJsZW4oc3JjKTsKKworCWlmIChsZW4gPCBkc3QtPnNfc2l6ZSkgeworCSAgICBpZiAoZHN0LT5zX2hlYWQgIT0gMCkgeworCQlzdHJjcHkoZHN0LT5zX2hlYWQsIHNyYyk7CisJCWRzdC0+c190YWlsID0gZHN0LT5zX2hlYWQgKyBsZW47CisJICAgIH0KKwkgICAgZHN0LT5zX3NpemUgPSBkc3QtPnNfaW5pdCAtIGxlbjsKKwkgICAgcmV0dXJuIFRSVUU7CisJfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3RyaW1fc2dyMC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby90cmltX3NncjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM4Zjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby90cmltX3NncjAuYwpAQCAtMCwwICsxLDMyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogdHJpbV9zZ3IwLmMsdiAxLjggMjAwNy8wNC8wNyAxNzoxNDoxMSB0b20gRXhwICQiKQorCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiB0cC0+CisKKyNkZWZpbmUgQ1NJICAgICAgIDIzMworI2RlZmluZSBFU0MgICAgICAgMDMzCQkvKiBeWyAqLworI2RlZmluZSBMX0JSQUNLICAgJ1snCisKK3N0YXRpYyBjaGFyICoKK3NldF9hdHRyaWJ1dGVfOShURVJNVFlQRSAqdHAsIGludCBmbGFnKQoreworICAgIGNvbnN0IGNoYXIgKnJlc3VsdDsKKworICAgIGlmICgocmVzdWx0ID0gdHBhcm0oc2V0X2F0dHJpYnV0ZXMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGZsYWcpKSA9PSAwKQorCXJlc3VsdCA9ICIiOworICAgIHJldHVybiBzdHJkdXAocmVzdWx0KTsKK30KKworc3RhdGljIGludAoraXNfY3NpKGNvbnN0IGNoYXIgKnMpCit7CisgICAgaWYgKFVDaGFyKHNbMF0pID09IENTSSkKKwlyZXR1cm4gMTsKKyAgICBlbHNlIGlmIChzWzBdID09IEVTQyAmJiBzWzFdID09IExfQlJBQ0spCisJcmV0dXJuIDI7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICoKK3NraXBfemVybyhjaGFyICpzKQoreworICAgIGlmIChzWzBdID09ICcwJykgeworCWlmIChzWzFdID09ICc7JykKKwkgICAgcyArPSAyOworCWVsc2UgaWYgKGlzYWxwaGEoVUNoYXIoc1sxXSkpKQorCSAgICBzICs9IDE7CisgICAgfQorICAgIHJldHVybiBzOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitza2lwX2RlbGF5KGNvbnN0IGNoYXIgKnMpCit7CisgICAgaWYgKHNbMF0gPT0gJyQnICYmIHNbMV0gPT0gJzwnKSB7CisJcyArPSAyOworCXdoaWxlIChpc2RpZ2l0KFVDaGFyKCpzKSkgfHwgKnMgPT0gJy8nKQorCSAgICArK3M7CisJaWYgKCpzID09ICc+JykKKwkgICAgKytzOworICAgIH0KKyAgICByZXR1cm4gczsKK30KKworLyoKKyAqIEltcHJvdmUgc2ltaWxhcl9zZ3IgYSBsaXR0bGUgYnkgbW92aW5nIHRoZSBhdHRyLXN0cmluZyBmcm9tIHRoZSBiZWdpbm5pbmcKKyAqIHRvIHRoZSBlbmQgb2YgdGhlIHMtc3RyaW5nLgorICovCitzdGF0aWMgYm9vbAorcmV3cml0ZV9zZ3IoY2hhciAqcywgY2hhciAqYXR0cikKK3sKKyAgICBpZiAoUFJFU0VOVChzKSkgeworCWlmIChQUkVTRU5UKGF0dHIpKSB7CisJICAgIHVuc2lnbmVkIGxlbl9zID0gc3RybGVuKHMpOworCSAgICB1bnNpZ25lZCBsZW5fYSA9IHN0cmxlbihhdHRyKTsKKworCSAgICBpZiAobGVuX3MgPiBsZW5fYSAmJiAhc3RybmNtcChhdHRyLCBzLCBsZW5fYSkpIHsKKwkJdW5zaWduZWQgbjsKKwkJVFIoVFJBQ0VfREFUQUJBU0UsICgicmV3cml0ZTpcblx0JXMiLCBzKSk7CisJCWZvciAobiA9IDA7IG4gPCBsZW5fcyAtIGxlbl9hOyArK24pIHsKKwkJICAgIHNbbl0gPSBzW24gKyBsZW5fYV07CisJCX0KKwkJc3RyY3B5KHMgKyBuLCBhdHRyKTsKKwkJVFIoVFJBQ0VfREFUQUJBU0UsICgidG86XG5cdCVzIiwgcykpOworCSAgICB9CisJfQorCXJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7CQkvKiBvb3BzICovCit9CisKK3N0YXRpYyBib29sCitzaW1pbGFyX3NncihjaGFyICphLCBjaGFyICpiKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisgICAgaW50IGNzaV9hID0gaXNfY3NpKGEpOworICAgIGludCBjc2lfYiA9IGlzX2NzaShiKTsKKyAgICB1bnNpZ25lZCBsZW5fYTsKKyAgICB1bnNpZ25lZCBsZW5fYjsKKworICAgIFRSKFRSQUNFX0RBVEFCQVNFLCAoInNpbWlsYXJfc2dyOlxuXHQlc1xuXHQlcyIsCisJCQlfbmNfdmlzYnVmMigxLCBhKSwKKwkJCV9uY192aXNidWYyKDIsIGIpKSk7CisgICAgaWYgKGNzaV9hICE9IDAgJiYgY3NpX2IgIT0gMCAmJiBjc2lfYSA9PSBjc2lfYikgeworCWEgKz0gY3NpX2E7CisJYiArPSBjc2lfYjsKKwlpZiAoKmEgIT0gKmIpIHsKKwkgICAgYSA9IHNraXBfemVybyhhKTsKKwkgICAgYiA9IHNraXBfemVybyhiKTsKKwl9CisgICAgfQorICAgIGxlbl9hID0gc3RybGVuKGEpOworICAgIGxlbl9iID0gc3RybGVuKGIpOworICAgIGlmIChsZW5fYSAmJiBsZW5fYikgeworCWlmIChsZW5fYSA+IGxlbl9iKQorCSAgICByZXN1bHQgPSAoc3RybmNtcChhLCBiLCBsZW5fYikgPT0gMCk7CisJZWxzZQorCSAgICByZXN1bHQgPSAoc3RybmNtcChhLCBiLCBsZW5fYSkgPT0gMCk7CisgICAgfQorICAgIFRSKFRSQUNFX0RBVEFCQVNFLCAoIi4uLnNpbWlsYXJfc2dyOiAlZFxuXHQlc1xuXHQlcyIsIHJlc3VsdCwKKwkJCV9uY192aXNidWYyKDEsIGEpLAorCQkJX25jX3Zpc2J1ZjIoMiwgYikpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdW5zaWduZWQKK2Nob3Bfb3V0KGNoYXIgKnN0cmluZywgdW5zaWduZWQgaSwgdW5zaWduZWQgaikKK3sKKyAgICBUUihUUkFDRV9EQVRBQkFTRSwgKCJjaG9wX291dCAlZC4uJWQgZnJvbSAlcyIsIGksIGosIF9uY192aXNidWYoc3RyaW5nKSkpOworICAgIHdoaWxlIChzdHJpbmdbal0gIT0gJ1wwJykgeworCXN0cmluZ1tpKytdID0gc3RyaW5nW2orK107CisgICAgfQorICAgIHN0cmluZ1tpXSA9ICdcMCc7CisgICAgcmV0dXJuIGk7Cit9CisKKy8qCisgKiBDb21wYXJlLCBpZ25vcmluZyBkZWxheXMuICBTb21lIG9mIHRoZSBkZWxheSB2YWx1ZXMgYXJlIGluY29uc2lzdGVudCwgYW5kCisgKiB3ZSBkbyBub3Qgd2FudCB0byBiZSBzdG9wcGVkIGJ5IHRoYXQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIGZyb20gJ2Z1bGwnIHRoYXQgd2UgbWF0Y2hlZC4gIElmIGFueSBtaXNtYXRjaAorICogb2NjdXJzLCByZXR1cm4gemVyby4KKyAqLworc3RhdGljIGludAorY29tcGFyZV9wYXJ0KGNvbnN0IGNoYXIgKnBhcnQsIGNvbnN0IGNoYXIgKmZ1bGwpCit7CisgICAgY29uc3QgY2hhciAqbmV4dF9wYXJ0OworICAgIGNvbnN0IGNoYXIgKm5leHRfZnVsbDsKKyAgICBpbnQgdXNlZF9mdWxsID0gMDsKKyAgICBpbnQgdXNlZF9kZWxheSA9IDA7CisKKyAgICB3aGlsZSAoKnBhcnQgIT0gMCkgeworCWlmICgqcGFydCAhPSAqZnVsbCkgeworCSAgICB1c2VkX2Z1bGwgPSAwOworCSAgICBicmVhazsKKwl9CisKKwkvKgorCSAqIEFkanVzdCB0aGUgcmV0dXJuLXZhbHVlIHRvIGFsbG93IHRoZSByYXJlIGNhc2Ugb2YKKwkgKiAgICAgIHN0cmluZzxkZWxheT5zdHJpbmcKKwkgKiB0byByZW1vdmUgdGhlIHdob2xlIHBpZWNlLiAgVGhlIG1vc3QgY29tbW9uIGNhc2UgaXMgYSBkZWxheSBhdCB0aGUKKwkgKiBlbmQgb2YgdGhlIHN0cmluZy4gIFRoZSBhZGp1c3RlZCBzdHJpbmcgd2lsbCByZXRhaW4gdGhlIGRlbGF5LCB3aGljaAorCSAqIGlzIGNvbnNlcnZhdGl2ZS4KKwkgKi8KKwlpZiAodXNlZF9kZWxheSAhPSAwKSB7CisJICAgIHVzZWRfZnVsbCArPSB1c2VkX2RlbGF5OworCSAgICB1c2VkX2RlbGF5ID0gMDsKKwl9CisJaWYgKCpwYXJ0ID09ICckJyAmJiAqZnVsbCA9PSAnJCcpIHsKKwkgICAgbmV4dF9wYXJ0ID0gc2tpcF9kZWxheShwYXJ0KTsKKwkgICAgbmV4dF9mdWxsID0gc2tpcF9kZWxheShmdWxsKTsKKwkgICAgaWYgKG5leHRfcGFydCAhPSBwYXJ0ICYmIG5leHRfZnVsbCAhPSBmdWxsKSB7CisJCXVzZWRfZGVsYXkgKz0gKG5leHRfZnVsbCAtIGZ1bGwpOworCQlmdWxsID0gbmV4dF9mdWxsOworCQlwYXJ0ID0gbmV4dF9wYXJ0OworCQljb250aW51ZTsKKwkgICAgfQorCX0KKwkrK3VzZWRfZnVsbDsKKwkrK3BhcnQ7CisJKytmdWxsOworICAgIH0KKyAgICByZXR1cm4gdXNlZF9mdWxsOworfQorCisvKgorICogV2hpbGUgJ3NncjAnIGlzIHRoZSAic2FtZSIgYXMgdGVybWNhcCAnbWUnLCB0aGVyZSBpcyBhIGNvbXBhdGliaWxpdHkgaXNzdWUuIAorICogVGhlIHNnci9zZ3IwIGNhcGFiaWxpdGllcyBpbmNsdWRlIHNldHRpbmcvY2xlYXJpbmcgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKyAqIG1vZGUuICBBIHRlcm1jYXAgYXBwbGljYXRpb24gY2Fubm90IHVzZSBzZ3IsIHNvIHNncjAgc3RyaW5ncyB0aGF0IHJlc2V0CisgKiBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBtb2RlIHdpbGwgYmUgbWlzaW50ZXJwcmV0ZWQuICBIZXJlLCB3ZSByZW1vdmUgdGhvc2UKKyAqIGZyb20gdGhlIG1vcmUgY29tbW9uIElTTy9BTlNJL1ZUMTAwIGVudHJpZXMsIHdoaWNoIGhhdmUgc2dyMCBhZ3JlZWluZyB3aXRoCisgKiBzZ3IuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtb2RpZmllZCBzZ3IwIGlmIGl0IGNhbiBiZSBtb2RpZmllZCwgYSBudWxsIGlmCisgKiBhbiBlcnJvciBvY2N1cnMsIG9yIHRoZSBvcmlnaW5hbCBzZ3IwIGlmIG5vIGNoYW5nZSBpcyBuZWVkZWQuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY190cmltX3NncjAoVEVSTVRZUEUgKnRwKQoreworICAgIGNoYXIgKnJlc3VsdCA9IGV4aXRfYXR0cmlidXRlX21vZGU7CisKKyAgICBUKChUX0NBTExFRCgiX25jX3RyaW1fc2dyMCgpIikpKTsKKworICAgIGlmIChQUkVTRU5UKGV4aXRfYXR0cmlidXRlX21vZGUpCisJJiYgUFJFU0VOVChzZXRfYXR0cmlidXRlcykpIHsKKwlib29sIGZvdW5kID0gRkFMU0U7CisJY2hhciAqb24gPSBzZXRfYXR0cmlidXRlXzkodHAsIDEpOworCWNoYXIgKm9mZiA9IHNldF9hdHRyaWJ1dGVfOSh0cCwgMCk7CisJY2hhciAqZW5kID0gc3RyZHVwKGV4aXRfYXR0cmlidXRlX21vZGUpOworCWNoYXIgKnRtcDsKKwlzaXplX3QgaSwgaiwgazsKKworCVRSKFRSQUNFX0RBVEFCQVNFLCAoImNoZWNraW5nIGlmIHdlIGNhbiB0cmltIHNncjAgYmFzZWQgb24gc2dyIikpOworCVRSKFRSQUNFX0RBVEFCQVNFLCAoInNncjAgICAgICAgJXMiLCBfbmNfdmlzYnVmKGVuZCkpKTsKKwlUUihUUkFDRV9EQVRBQkFTRSwgKCJzZ3IoOTpvZmYpICVzIiwgX25jX3Zpc2J1ZihvZmYpKSk7CisJVFIoVFJBQ0VfREFUQUJBU0UsICgic2dyKDk6b24pICAlcyIsIF9uY192aXNidWYob24pKSk7CisKKwlpZiAoIXJld3JpdGVfc2dyKG9uLCBlbnRlcl9hbHRfY2hhcnNldF9tb2RlKQorCSAgICB8fCAhcmV3cml0ZV9zZ3Iob2ZmLCBleGl0X2FsdF9jaGFyc2V0X21vZGUpCisJICAgIHx8ICFyZXdyaXRlX3NncihlbmQsIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSkpIHsKKwkgICAgRnJlZUlmTmVlZGVkKG9mZik7CisJfSBlbHNlIGlmIChzaW1pbGFyX3NncihvZmYsIGVuZCkKKwkJICAgJiYgIXNpbWlsYXJfc2dyKG9mZiwgb24pKSB7CisJICAgIFRSKFRSQUNFX0RBVEFCQVNFLCAoImFkanVzdGluZyBzZ3IoOTpvZmYpIDogJXMiLCBfbmNfdmlzYnVmKG9mZikpKTsKKwkgICAgcmVzdWx0ID0gb2ZmOworCSAgICAvKgorCSAgICAgKiBJZiBybWFjcyBpcyBhIHN1YnN0cmluZyBvZiBzZ3IoMCksIHJlbW92ZSB0aGF0IGNodW5rLgorCSAgICAgKi8KKwkgICAgaWYgKGV4aXRfYWx0X2NoYXJzZXRfbW9kZSAhPSAwKSB7CisJCVRSKFRSQUNFX0RBVEFCQVNFLCAoInNjYW4gZm9yIHJtYWNzICVzIiwgX25jX3Zpc2J1ZihleGl0X2FsdF9jaGFyc2V0X21vZGUpKSk7CisJCWogPSBzdHJsZW4ob2ZmKTsKKwkJayA9IHN0cmxlbihleGl0X2FsdF9jaGFyc2V0X21vZGUpOworCQlpZiAoaiA+IGspIHsKKwkJICAgIGZvciAoaSA9IDA7IGkgPD0gKGogLSBrKTsgKytpKSB7CisJCQlpbnQgazIgPSBjb21wYXJlX3BhcnQoZXhpdF9hbHRfY2hhcnNldF9tb2RlLCBvZmYgKyBpKTsKKwkJCWlmIChrMiAhPSAwKSB7CisJCQkgICAgZm91bmQgPSBUUlVFOworCQkJICAgIGNob3Bfb3V0KG9mZiwgaSwgaSArIGsyKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIC8qCisJICAgICAqIFNHUiAxMCB3b3VsZCByZXNldCB0byBub3JtYWwgZm9udC4KKwkgICAgICovCisJICAgIGlmICghZm91bmQpIHsKKwkJaWYgKChpID0gaXNfY3NpKG9mZikpICE9IDAKKwkJICAgICYmIG9mZltzdHJsZW4ob2ZmKSAtIDFdID09ICdtJykgeworCQkgICAgVFIoVFJBQ0VfREFUQUJBU0UsICgibG9va2luZyBmb3IgU0dSIDEwIGluICVzIiwKKwkJCQkJX25jX3Zpc2J1ZihvZmYpKSk7CisJCSAgICB0bXAgPSBza2lwX3plcm8ob2ZmICsgaSk7CisJCSAgICBpZiAodG1wWzBdID09ICcxJworCQkJJiYgc2tpcF96ZXJvKHRtcCArIDEpICE9IHRtcCArIDEpIHsKKwkJCWkgPSB0bXAgLSBvZmY7CisJCQlpZiAob2ZmW2kgLSAxXSA9PSAnOycpCisJCQkgICAgaS0tOworCQkJaiA9IHNraXBfemVybyh0bXAgKyAxKSAtIG9mZjsKKwkJCWkgPSBjaG9wX291dChvZmYsIGksIGopOworCQkJZm91bmQgPSBUUlVFOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgKCFmb3VuZAorCQkmJiAodG1wID0gc3Ryc3RyKGVuZCwgb2ZmKSkgIT0gMAorCQkmJiBzdHJjbXAoZW5kLCBvZmYpICE9IDApIHsKKwkJaSA9IHRtcCAtIGVuZDsKKwkJaiA9IHN0cmxlbihvZmYpOworCQl0bXAgPSBzdHJkdXAoZW5kKTsKKwkJY2hvcF9vdXQodG1wLCBpLCBqKTsKKwkJZnJlZShvZmYpOworCQlyZXN1bHQgPSB0bXA7CisJICAgIH0KKwkgICAgVFIoVFJBQ0VfREFUQUJBU0UsICgiLi4uYWRqdXN0ZWQgc2dyMCA6ICVzIiwgX25jX3Zpc2J1ZihyZXN1bHQpKSk7CisJICAgIGlmICghc3RyY21wKHJlc3VsdCwgZXhpdF9hdHRyaWJ1dGVfbW9kZSkpIHsKKwkJVFIoVFJBQ0VfREFUQUJBU0UsICgiLi4uc2FtZSByZXN1bHQsIGRpc2NhcmQiKSk7CisJCWZyZWUocmVzdWx0KTsKKwkJcmVzdWx0ID0gZXhpdF9hdHRyaWJ1dGVfbW9kZTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIC8qCisJICAgICAqIEVpdGhlciB0aGUgc2dyIGRvZXMgbm90IHJlZmVyZW5jZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCwKKwkgICAgICogb3IgaXQgaXMgaW5jb3JyZWN0LiAgVGhhdCdzIHRvbyBoYXJkIHRvIGRlY2lkZSByaWdodCBub3cuCisJICAgICAqLworCSAgICBmcmVlKG9mZik7CisJfQorCUZyZWVJZk5lZWRlZChlbmQpOworCUZyZWVJZk5lZWRlZChvbik7CisgICAgfSBlbHNlIHsKKwkvKgorCSAqIFBvc3NpYmx5IHNvbWUgYXBwbGljYXRpb25zIGFyZSBjb25mdXNlZCBpZiBzZ3IwIGNvbnRhaW5zIHJtYWNzLAorCSAqIGJ1dCB0aGF0IHdvdWxkIGJlIGEgZGlmZmVyZW50IGJ1ZyByZXBvcnQgLVRECisJICovCisgICAgfQorCisgICAgcmV0dXJuUHRyKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3VzZV9zY3JlZW4uYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vdXNlX3NjcmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjM2IxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RpbmZvL3VzZV9zY3JlZW4uYwpAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDcgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHVzZV9zY3JlZW4uYyx2IDEuNiAyMDA4LzA2LzA3IDE5OjE2OjU2IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3VzZV9zY3JlZW4oU0NSRUVOICpzY3JlZW4sIE5DVVJTRVNfU0NSRUVOX0NCIGZ1bmMsIHZvaWQgKmRhdGEpCit7CisgICAgU0NSRUVOICpzYXZlX1NQOworICAgIGludCBjb2RlID0gT0s7CisKKyAgICBUKChUX0NBTExFRCgidXNlX3NjcmVlbiglcCwlcCwlcCkiKSwgc2NyZWVuLCBmdW5jLCBkYXRhKSk7CisKKyAgICAvKgorICAgICAqIEZJWE1FIC0gYWRkIGEgZmxhZyBzbyBhIGdpdmVuIHRocmVhZCBjYW4gY2hlY2sgaWYgX2l0XyBoYXMgYWxyZWFkeQorICAgICAqIHJlY3VycmVkIHRocm91Z2ggdGhpcyBwb2ludCwgcmV0dXJuIGFuIGVycm9yIGlmIHNvLgorICAgICAqLworICAgIF9uY19sb2NrX2dsb2JhbChjdXJzZXMpOworICAgIHNhdmVfU1AgPSBTUDsKKyAgICBzZXRfdGVybShzY3JlZW4pOworCisgICAgY29kZSA9IGZ1bmMoc2NyZWVuLCBkYXRhKTsKKworICAgIHNldF90ZXJtKHNhdmVfU1ApOworICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vd3JpdGVfZW50cnkuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdGluZm8vd3JpdGVfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTNiYjIxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90aW5mby93cml0ZV9lbnRyeS5jCkBAIC0wLDAgKzEsNzg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgl3cml0ZV9lbnRyeS5jIC0tIHdyaXRlIGEgdGVybWluZm8gc3RydWN0dXJlIG9udG8gdGhlIGZpbGUgc3lzdGVtCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8aGFzaGVkX2RiLmg+CisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCisjaWZuZGVmIFNfSVNESVIKKyNkZWZpbmUgU19JU0RJUihtb2RlKSAoKG1vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpCisjZW5kaWYKKworI2lmIDEKKyNkZWZpbmUgVFJBQ0VfT1VUKHApIERFQlVHKDIsIHApCisjZWxzZQorI2RlZmluZSBUUkFDRV9PVVQocCkJCS8qbm90aGluZyAqLworI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiB3cml0ZV9lbnRyeS5jLHYgMS43MiAyMDA4LzA4LzAzIDE5OjI0OjAwIHRvbSBFeHAgJCIpCisKK3N0YXRpYyBpbnQgdG90YWxfd3JpdHRlbjsKKworc3RhdGljIGludCBtYWtlX2RiX3Jvb3QoY29uc3QgY2hhciAqKTsKK3N0YXRpYyBpbnQgd3JpdGVfb2JqZWN0KFRFUk1UWVBFICosIGNoYXIgKiwgdW5zaWduZWQgKiwgdW5zaWduZWQpOworCisjaWYgIVVTRV9IQVNIRURfREIKK3N0YXRpYyB2b2lkCit3cml0ZV9maWxlKGNoYXIgKmZpbGVuYW1lLCBURVJNVFlQRSAqdHApCit7CisgICAgY2hhciBidWZmZXJbTUFYX0VOVFJZX1NJWkVdOworICAgIHVuc2lnbmVkIGxpbWl0ID0gc2l6ZW9mKGJ1ZmZlcik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKworICAgIEZJTEUgKmZwID0gKF9uY19hY2Nlc3MoZmlsZW5hbWUsIFdfT0spID09IDApID8gZm9wZW4oZmlsZW5hbWUsICJ3YiIpIDogMDsKKyAgICBpZiAoZnAgPT0gMCkgeworCXBlcnJvcihmaWxlbmFtZSk7CisJX25jX3N5c2Vycl9hYm9ydCgiY2FuJ3Qgb3BlbiAlcy8lcyIsIF9uY190aWNfZGlyKDApLCBmaWxlbmFtZSk7CisgICAgfQorICAgIERFQlVHKDEsICgiQ3JlYXRlZCAlcyIsIGZpbGVuYW1lKSk7CisKKyAgICBpZiAod3JpdGVfb2JqZWN0KHRwLCBidWZmZXIsICZvZmZzZXQsIGxpbWl0KSA9PSBFUlIKKwl8fCBmd3JpdGUoYnVmZmVyLCBzaXplb2YoY2hhciksIG9mZnNldCwgZnApICE9IG9mZnNldCkgeworCV9uY19zeXNlcnJfYWJvcnQoImVycm9yIHdyaXRpbmcgJXMvJXMiLCBfbmNfdGljX2RpcigwKSwgZmlsZW5hbWUpOworICAgIH0KKworICAgIGZjbG9zZShmcCk7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYWNjZXNzIHJpZ2h0cyB0byBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcworICogQ3JlYXRlIGFueSBkaXJlY3RvcmllcyB3aGljaCBkb24ndCBleGlzdC4KKyAqCisgKiBOb3RlOiAgdGhlcmUncyBubyByZWFzb24gdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgbWFrZV9kYl9yb290KCksIHNpbmNlCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGluIGluc3RhbmNlcyB3aGVyZSB0aGF0IGhhcyB0byBzdWNjZWVkLgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfd3JpdGVhYmxlKGludCBjb2RlKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGRpcm5hbWVzW10gPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiOworICAgIHN0YXRpYyBib29sIHZlcmlmaWVkW3NpemVvZihkaXJuYW1lcyldOworCisgICAgY2hhciBkaXJbc2l6ZW9mKExFQUZfRk1UKV07CisgICAgY2hhciAqcyA9IDA7CisKKyAgICBpZiAoY29kZSA9PSAwIHx8IChzID0gc3RyY2hyKGRpcm5hbWVzLCBjb2RlKSkgPT0gMCkKKwlfbmNfZXJyX2Fib3J0KCJJbGxlZ2FsIHRlcm1pbmZvIHN1YmRpcmVjdG9yeSBcIiIgTEVBRl9GTVQgIlwiIiwgY29kZSk7CisKKyAgICBpZiAodmVyaWZpZWRbcyAtIGRpcm5hbWVzXSkKKwlyZXR1cm47CisKKyAgICBzcHJpbnRmKGRpciwgTEVBRl9GTVQsIGNvZGUpOworICAgIGlmIChtYWtlX2RiX3Jvb3QoZGlyKSA8IDApIHsKKwlfbmNfZXJyX2Fib3J0KCIlcy8lczogcGVybWlzc2lvbiBkZW5pZWQiLCBfbmNfdGljX2RpcigwKSwgZGlyKTsKKyAgICB9CisKKyAgICB2ZXJpZmllZFtzIC0gZGlybmFtZXNdID0gVFJVRTsKK30KKyNlbmRpZiAvKiAhVVNFX0hBU0hFRF9EQiAqLworCitzdGF0aWMgaW50CittYWtlX2RiX3BhdGgoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxpbWl0KQoreworICAgIGludCByYyA9IC0xOworICAgIGNvbnN0IGNoYXIgKnRvcCA9IF9uY190aWNfZGlyKDApOworCisgICAgaWYgKHNyYyA9PSB0b3AgfHwgX25jX2lzX2Fic19wYXRoKHNyYykpIHsKKwlpZiAoc3RybGVuKHNyYykgKyAxIDw9IGxpbWl0KSB7CisJICAgICh2b2lkKSBzdHJjcHkoZHN0LCBzcmMpOworCSAgICByYyA9IDA7CisJfQorICAgIH0gZWxzZSB7CisJaWYgKHN0cmxlbih0b3ApICsgc3RybGVuKHNyYykgKyAyIDw9IGxpbWl0KSB7CisJICAgICh2b2lkKSBzcHJpbnRmKGRzdCwgIiVzLyVzIiwgdG9wLCBzcmMpOworCSAgICByYyA9IDA7CisJfQorICAgIH0KKyNpZiBVU0VfSEFTSEVEX0RCCisgICAgaWYgKHJjID09IDApIHsKKwlpZiAoX25jX2lzX2Rpcl9wYXRoKGRzdCkpIHsKKwkgICAgcmMgPSAtMTsKKwl9IGVsc2UgeworCSAgICB1bnNpZ25lZCBoYXZlID0gc3RybGVuKGRzdCk7CisJICAgIGlmIChoYXZlID4gMyAmJiBzdHJjbXAoZHN0ICsgaGF2ZSAtIDMsIERCTV9TVUZGSVgpKSB7CisJCWlmIChoYXZlICsgMyA8PSBsaW1pdCkKKwkJICAgIHN0cmNhdChkc3QsIERCTV9TVUZGSVgpOworCQllbHNlCisJCSAgICByYyA9IC0xOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIE1ha2UgYSBkYXRhYmFzZS1yb290IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgKi8KK3N0YXRpYyBpbnQKK21ha2VfZGJfcm9vdChjb25zdCBjaGFyICpwYXRoKQoreworICAgIGludCByYzsKKyAgICBjaGFyIGZ1bGxwYXRoW1BBVEhfTUFYXTsKKworICAgIGlmICgocmMgPSBtYWtlX2RiX3BhdGgoZnVsbHBhdGgsIHBhdGgsIHNpemVvZihmdWxscGF0aCkpKSA9PSAwKSB7CisjaWYgVVNFX0hBU0hFRF9EQgorCURCICpjYXBkYnA7CisKKwlpZiAoKGNhcGRicCA9IF9uY19kYl9vcGVuKGZ1bGxwYXRoLCBUUlVFKSkgPT0gTlVMTCkKKwkgICAgcmMgPSAtMTsKKwllbHNlIGlmIChfbmNfZGJfY2xvc2UoY2FwZGJwKSA8IDApCisJICAgIHJjID0gLTE7CisjZWxzZQorCXN0cnVjdCBzdGF0IHN0YXRidWY7CisKKwlpZiAoKHJjID0gc3RhdChwYXRoLCAmc3RhdGJ1ZikpIDwgMCkgeworCSAgICByYyA9IG1rZGlyKHBhdGgsIDA3NzcpOworCX0gZWxzZSBpZiAoX25jX2FjY2VzcyhwYXRoLCBSX09LIHwgV19PSyB8IFhfT0spIDwgMCkgeworCSAgICByYyA9IC0xOwkJLyogcGVybWlzc2lvbiBkZW5pZWQgKi8KKwl9IGVsc2UgaWYgKCEoU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKSkgeworCSAgICByYyA9IC0xOwkJLyogbm90IGEgZGlyZWN0b3J5ICovCisJfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIFNldCB0aGUgd3JpdGUgZGlyZWN0b3J5IGZvciBjb21waWxlZCBlbnRyaWVzLgorICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NldF93cml0ZWRpcihjaGFyICpkaXIpCit7CisgICAgY29uc3QgY2hhciAqZGVzdGluYXRpb247CisgICAgY2hhciBhY3R1YWxbUEFUSF9NQVhdOworCisgICAgaWYgKGRpciA9PSAwCisJJiYgdXNlX3Rlcm1pbmZvX3ZhcnMoKSkKKwlkaXIgPSBnZXRlbnYoIlRFUk1JTkZPIik7CisKKyAgICBpZiAoZGlyICE9IDApCisJKHZvaWQpIF9uY190aWNfZGlyKGRpcik7CisKKyAgICBkZXN0aW5hdGlvbiA9IF9uY190aWNfZGlyKDApOworICAgIGlmIChtYWtlX2RiX3Jvb3QoZGVzdGluYXRpb24pIDwgMCkgeworCWNoYXIgKmhvbWUgPSBfbmNfaG9tZV90ZXJtaW5mbygpOworCisJaWYgKGhvbWUgIT0gMCkgeworCSAgICBkZXN0aW5hdGlvbiA9IGhvbWU7CisJICAgIGlmIChtYWtlX2RiX3Jvb3QoZGVzdGluYXRpb24pIDwgMCkKKwkJX25jX2Vycl9hYm9ydCgiJXM6IHBlcm1pc3Npb24gZGVuaWVkIChlcnJubyAlZCkiLAorCQkJICAgICAgZGVzdGluYXRpb24sIGVycm5vKTsKKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3RlOiBiZWNhdXNlIG9mIHRoaXMgY29kZSwgdGhpcyBsb2dpYyBzaG91bGQgYmUgZXhlcmNpc2VkCisgICAgICogKm9uY2Ugb25seSogcGVyIHJ1bi4KKyAgICAgKi8KKyNpZiBVU0VfSEFTSEVEX0RCCisgICAgbWFrZV9kYl9wYXRoKGFjdHVhbCwgZGVzdGluYXRpb24sIHNpemVvZihhY3R1YWwpKTsKKyNlbHNlCisgICAgaWYgKGNoZGlyKF9uY190aWNfZGlyKGRlc3RpbmF0aW9uKSkgPCAwCisJfHwgZ2V0Y3dkKGFjdHVhbCwgc2l6ZW9mKGFjdHVhbCkpID09IDApCisJX25jX2Vycl9hYm9ydCgiJXM6IG5vdCBhIGRpcmVjdG9yeSIsIGRlc3RpbmF0aW9uKTsKKyNlbmRpZgorICAgIF9uY19rZWVwX3RpY19kaXIoc3RyZHVwKGFjdHVhbCkpOworfQorCisvKgorICoJU2F2ZSB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiBhIGRlc2NyaXB0aW9uIGluIHRoZSBmaWxlc3lzdGVtLgorICoKKyAqCW1ha2UgYSBjb3B5IG9mIHRoZSBuYW1lLWxpc3QKKyAqCWJyZWFrIGl0IHVwIGludG8gZmlyc3QtbmFtZSBhbmQgYWxsLWJ1dC1sYXN0LW5hbWUKKyAqCWNyZWF0KGZpcnN0LW5hbWUpCisgKgl3cml0ZSBvYmplY3QgaW5mb3JtYXRpb24gdG8gZmlyc3QtbmFtZQorICoJY2xvc2UoZmlyc3QtbmFtZSkKKyAqICAgICAgZm9yIGVhY2ggbmFtZSBpbiBhbGwtYnV0LWxhc3QtbmFtZQorICoJICAgIGxpbmsgdG8gZmlyc3QtbmFtZQorICoKKyAqCVVzaW5nICd0aW1lKCknIHRvIG9idGFpbiBhIHJlZmVyZW5jZSBmb3IgZmlsZSB0aW1lc3RhbXBzIGlzIHVucmVsaWFibGUsCisgKgllLmcuLCB3aXRoIE5GUywgYmVjYXVzZSB0aGUgZmlsZXN5c3RlbSBtYXkgaGF2ZSBhIGRpZmZlcmVudCB0aW1lCisgKglyZWZlcmVuY2UuICBXZSBjaGVjayBmb3IgcHJlLWV4aXN0ZW5jZSBvZiBsaW5rcyBieSBsYXRjaGluZyB0aGUgZmlyc3QKKyAqCXRpbWVzdGFtcCBmcm9tIGEgZmlsZSB0aGF0IHdlIGNyZWF0ZS4KKyAqCisgKglUaGUgX25jX3dhcm5pbmcoKSBjYWxscyB3aWxsIHJlcG9ydCBhIGNvcnJlY3QgbGluZSBudW1iZXIgb25seSBpZgorICoJX25jX2N1cnJfbGluZSBpcyBwcm9wZXJseSBzZXQgYmVmb3JlIHRoZSB3cml0ZV9lbnRyeSgpIGNhbGwuCisgKi8KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY193cml0ZV9lbnRyeShURVJNVFlQRSAqY29uc3QgdHApCit7CisjaWYgVVNFX0hBU0hFRF9EQgorCisgICAgY2hhciBidWZmZXJbTUFYX0VOVFJZX1NJWkUgKyAxXTsKKyAgICB1bnNpZ25lZCBsaW1pdCA9IHNpemVvZihidWZmZXIpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CisKKyNlbHNlIC8qICFVU0VfSEFTSEVEX0RCICovCisKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICAgIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworICAgIGNoYXIgbGlua25hbWVbUEFUSF9NQVhdOworI2lmIFVTRV9TWU1MSU5LUworICAgIGNoYXIgc3ltbGlua25hbWVbUEFUSF9NQVhdOworI2lmICFIQVZFX0xJTksKKyN1bmRlZiBIQVZFX0xJTksKKyNkZWZpbmUgSEFWRV9MSU5LIDEKKyNlbmRpZgorI2VuZGlmIC8qIFVTRV9TWU1MSU5LUyAqLworCisgICAgc3RhdGljIGludCBjYWxsX2NvdW50OworICAgIHN0YXRpYyB0aW1lX3Qgc3RhcnRfdGltZTsJLyogdGltZSBhdCBzdGFydCBvZiB3cml0ZXMgKi8KKworI2VuZGlmIC8qIFVTRV9IQVNIRURfREIgKi8KKworICAgIGNoYXIgbmFtZV9saXN0W01BWF9URVJNSU5GT19MRU5HVEhdOworICAgIGNoYXIgKmZpcnN0X25hbWUsICpvdGhlcl9uYW1lczsKKyAgICBjaGFyICpwdHI7CisKKyAgICBhc3NlcnQoc3RybGVuKHRwLT50ZXJtX25hbWVzKSAhPSAwKTsKKyAgICBhc3NlcnQoc3RybGVuKHRwLT50ZXJtX25hbWVzKSA8IHNpemVvZihuYW1lX2xpc3QpKTsKKworICAgICh2b2lkKSBzdHJjcHkobmFtZV9saXN0LCB0cC0+dGVybV9uYW1lcyk7CisgICAgREVCVUcoNywgKCJOYW1lIGxpc3QgPSAnJXMnIiwgbmFtZV9saXN0KSk7CisKKyAgICBmaXJzdF9uYW1lID0gbmFtZV9saXN0OworCisgICAgcHRyID0gJm5hbWVfbGlzdFtzdHJsZW4obmFtZV9saXN0KSAtIDFdOworICAgIG90aGVyX25hbWVzID0gcHRyICsgMTsKKworICAgIHdoaWxlIChwdHIgPiBuYW1lX2xpc3QgJiYgKnB0ciAhPSAnfCcpCisJcHRyLS07CisKKyAgICBpZiAocHRyICE9IG5hbWVfbGlzdCkgeworCSpwdHIgPSAnXDAnOworCisJZm9yIChwdHIgPSBuYW1lX2xpc3Q7ICpwdHIgIT0gJ1wwJyAmJiAqcHRyICE9ICd8JzsgcHRyKyspCisJICAgIGNvbnRpbnVlOworCisJaWYgKCpwdHIgPT0gJ1wwJykKKwkgICAgb3RoZXJfbmFtZXMgPSBwdHI7CisJZWxzZSB7CisJICAgICpwdHIgPSAnXDAnOworCSAgICBvdGhlcl9uYW1lcyA9IHB0ciArIDE7CisJfQorICAgIH0KKworICAgIERFQlVHKDcsICgiRmlyc3QgbmFtZSA9ICclcyciLCBmaXJzdF9uYW1lKSk7CisgICAgREVCVUcoNywgKCJPdGhlciBuYW1lcyA9ICclcyciLCBvdGhlcl9uYW1lcykpOworCisgICAgX25jX3NldF90eXBlKGZpcnN0X25hbWUpOworCisjaWYgVVNFX0hBU0hFRF9EQgorICAgIGlmICh3cml0ZV9vYmplY3QodHAsIGJ1ZmZlciArIDEsICZvZmZzZXQsIGxpbWl0IC0gMSkgIT0gRVJSKSB7CisJREIgKmNhcGRiID0gX25jX2RiX29wZW4oX25jX3RpY19kaXIoMCksIFRSVUUpOworCURCVCBrZXksIGRhdGE7CisKKwlpZiAoY2FwZGIgIT0gMCkgeworCSAgICBidWZmZXJbMF0gPSAwOworCisJICAgIG1lbXNldCgma2V5LCAwLCBzaXplb2Yoa2V5KSk7CisJICAgIGtleS5kYXRhID0gdHAtPnRlcm1fbmFtZXM7CisJICAgIGtleS5zaXplID0gc3RybGVuKHRwLT50ZXJtX25hbWVzKTsKKworCSAgICBtZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJICAgIGRhdGEuZGF0YSA9IGJ1ZmZlcjsKKwkgICAgZGF0YS5zaXplID0gb2Zmc2V0ICsgMTsKKworCSAgICBfbmNfZGJfcHV0KGNhcGRiLCAma2V5LCAmZGF0YSk7CisKKwkgICAgYnVmZmVyWzBdID0gMjsKKworCSAgICBrZXkuZGF0YSA9IG5hbWVfbGlzdDsKKwkgICAga2V5LnNpemUgPSBzdHJsZW4obmFtZV9saXN0KTsKKworCSAgICBzdHJjcHkoYnVmZmVyICsgMSwgdHAtPnRlcm1fbmFtZXMpOworCSAgICBkYXRhLnNpemUgPSBzdHJsZW4odHAtPnRlcm1fbmFtZXMpICsgMTsKKworCSAgICBfbmNfZGJfcHV0KGNhcGRiLCAma2V5LCAmZGF0YSk7CisKKwkgICAgd2hpbGUgKCpvdGhlcl9uYW1lcyAhPSAnXDAnKSB7CisJCXB0ciA9IG90aGVyX25hbWVzKys7CisJCXdoaWxlICgqb3RoZXJfbmFtZXMgIT0gJ3wnICYmICpvdGhlcl9uYW1lcyAhPSAnXDAnKQorCQkgICAgb3RoZXJfbmFtZXMrKzsKKworCQlpZiAoKm90aGVyX25hbWVzICE9ICdcMCcpCisJCSAgICAqKG90aGVyX25hbWVzKyspID0gJ1wwJzsKKworCQlrZXkuZGF0YSA9IHB0cjsKKwkJa2V5LnNpemUgPSBzdHJsZW4ocHRyKTsKKworCQlfbmNfZGJfcHV0KGNhcGRiLCAma2V5LCAmZGF0YSk7CisJICAgIH0KKwkgICAgX25jX2RiX2Nsb3NlKGNhcGRiKTsKKwl9CisgICAgfQorI2Vsc2UgLyogIVVTRV9IQVNIRURfREIgKi8KKyAgICBpZiAoY2FsbF9jb3VudCsrID09IDApIHsKKwlzdGFydF90aW1lID0gMDsKKyAgICB9CisKKyAgICBpZiAoc3RybGVuKGZpcnN0X25hbWUpID49IHNpemVvZihmaWxlbmFtZSkgLSAzKQorCV9uY193YXJuaW5nKCJ0ZXJtaW5hbCBuYW1lIHRvbyBsb25nLiIpOworCisgICAgc3ByaW50ZihmaWxlbmFtZSwgTEVBRl9GTVQgIi8lcyIsIGZpcnN0X25hbWVbMF0sIGZpcnN0X25hbWUpOworCisgICAgLyoKKyAgICAgKiBIYXMgdGhpcyBwcmltYXJ5IG5hbWUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBmaXJzdCBjYWxsIHRvCisgICAgICogd3JpdGVfZW50cnkoKT8gIElmIHNvLCB0aGUgbmV3ZXIgd3JpdGUgd2lsbCBzdGVwIG9uIHRoZSBvbGRlciwKKyAgICAgKiBzbyB3YXJuIHRoZSB1c2VyLgorICAgICAqLworICAgIGlmIChzdGFydF90aW1lID4gMCAmJgorCXN0YXQoZmlsZW5hbWUsICZzdGF0YnVmKSA+PSAwCisJJiYgc3RhdGJ1Zi5zdF9tdGltZSA+PSBzdGFydF90aW1lKSB7CisJX25jX3dhcm5pbmcoIm5hbWUgbXVsdGlwbHkgZGVmaW5lZC4iKTsKKyAgICB9CisKKyAgICBjaGVja193cml0ZWFibGUoZmlyc3RfbmFtZVswXSk7CisgICAgd3JpdGVfZmlsZShmaWxlbmFtZSwgdHApOworCisgICAgaWYgKHN0YXJ0X3RpbWUgPT0gMCkgeworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3RhdGJ1ZikgPCAwCisJICAgIHx8IChzdGFydF90aW1lID0gc3RhdGJ1Zi5zdF9tdGltZSkgPT0gMCkgeworCSAgICBfbmNfc3lzZXJyX2Fib3J0KCJlcnJvciBvYnRhaW5pbmcgdGltZSBmcm9tICVzLyVzIiwKKwkJCSAgICAgX25jX3RpY19kaXIoMCksIGZpbGVuYW1lKTsKKwl9CisgICAgfQorICAgIHdoaWxlICgqb3RoZXJfbmFtZXMgIT0gJ1wwJykgeworCXB0ciA9IG90aGVyX25hbWVzKys7CisJYXNzZXJ0KHB0ciA8IGJ1ZmZlciArIHNpemVvZihidWZmZXIpIC0gMSk7CisJd2hpbGUgKCpvdGhlcl9uYW1lcyAhPSAnfCcgJiYgKm90aGVyX25hbWVzICE9ICdcMCcpCisJICAgIG90aGVyX25hbWVzKys7CisKKwlpZiAoKm90aGVyX25hbWVzICE9ICdcMCcpCisJICAgICoob3RoZXJfbmFtZXMrKykgPSAnXDAnOworCisJaWYgKHN0cmxlbihwdHIpID4gc2l6ZW9mKGxpbmtuYW1lKSAtIDMpIHsKKwkgICAgX25jX3dhcm5pbmcoInRlcm1pbmFsIGFsaWFzICVzIHRvbyBsb25nLiIsIHB0cik7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoc3RyY2hyKHB0ciwgJy8nKSAhPSAwKSB7CisJICAgIF9uY193YXJuaW5nKCJjYW5ub3QgbGluayBhbGlhcyAlcy4iLCBwdHIpOworCSAgICBjb250aW51ZTsKKwl9CisKKwljaGVja193cml0ZWFibGUocHRyWzBdKTsKKwlzcHJpbnRmKGxpbmtuYW1lLCBMRUFGX0ZNVCAiLyVzIiwgcHRyWzBdLCBwdHIpOworCisJaWYgKHN0cmNtcChmaWxlbmFtZSwgbGlua25hbWUpID09IDApIHsKKwkgICAgX25jX3dhcm5pbmcoInNlbGYtc3lub255bSBpZ25vcmVkIik7CisJfSBlbHNlIGlmIChzdGF0KGxpbmtuYW1lLCAmc3RhdGJ1ZikgPj0gMCAmJgorCQkgICBzdGF0YnVmLnN0X210aW1lIDwgc3RhcnRfdGltZSkgeworCSAgICBfbmNfd2FybmluZygiYWxpYXMgJXMgbXVsdGlwbHkgZGVmaW5lZC4iLCBwdHIpOworCX0gZWxzZSBpZiAoX25jX2FjY2VzcyhsaW5rbmFtZSwgV19PSykgPT0gMCkKKyNpZiBIQVZFX0xJTksKKwl7CisJICAgIGludCBjb2RlOworI2lmIFVTRV9TWU1MSU5LUworCSAgICBzdHJjcHkoc3ltbGlua25hbWUsICIuLi8iKTsKKwkgICAgc3RybmNhdChzeW1saW5rbmFtZSwgZmlsZW5hbWUsIHNpemVvZihzeW1saW5rbmFtZSkgLSA0KTsKKwkgICAgc3ltbGlua25hbWVbc2l6ZW9mKHN5bWxpbmtuYW1lKSAtIDFdID0gJ1wwJzsKKyNlbmRpZiAvKiBVU0VfU1lNTElOS1MgKi8KKyNpZiBIQVZFX1JFTU9WRQorCSAgICBjb2RlID0gcmVtb3ZlKGxpbmtuYW1lKTsKKyNlbHNlCisJICAgIGNvZGUgPSB1bmxpbmsobGlua25hbWUpOworI2VuZGlmCisJICAgIGlmIChjb2RlICE9IDAgJiYgZXJybm8gPT0gRU5PRU5UKQorCQljb2RlID0gMDsKKyNpZiBVU0VfU1lNTElOS1MKKwkgICAgaWYgKHN5bWxpbmsoc3ltbGlua25hbWUsIGxpbmtuYW1lKSA8IDApCisjZWxzZQorCSAgICBpZiAobGluayhmaWxlbmFtZSwgbGlua25hbWUpIDwgMCkKKyNlbmRpZiAvKiBVU0VfU1lNTElOS1MgKi8KKwkgICAgeworCQkvKgorCQkgKiBJZiB0aGVyZSB3YXNuJ3QgYW55dGhpbmcgdGhlcmUsIGFuZCB3ZSBjYW5ub3QKKwkJICogbGluayB0byB0aGUgdGFyZ2V0IGJlY2F1c2UgaXQgaXMgdGhlIHNhbWUgYXMgdGhlCisJCSAqIHRhcmdldCwgdGhlbiB0aGUgc291cmNlIG11c3QgYmUgb24gYSBmaWxlc3lzdGVtCisJCSAqIHRoYXQgdXNlcyBjYXNlbGVzcyBmaWxlbmFtZXMsIHN1Y2ggYXMgV2luMzIsIGV0Yy4KKwkJICovCisJCWlmIChjb2RlID09IDAgJiYgZXJybm8gPT0gRUVYSVNUKQorCQkgICAgX25jX3dhcm5pbmcoImNhbid0IGxpbmsgJXMgdG8gJXMiLCBmaWxlbmFtZSwgbGlua25hbWUpOworCQllbHNlIGlmIChjb2RlID09IDAgJiYgKGVycm5vID09IEVQRVJNIHx8IGVycm5vID09IEVOT0VOVCkpCisJCSAgICB3cml0ZV9maWxlKGxpbmtuYW1lLCB0cCk7CisJCWVsc2UgeworI2lmIE1JWEVEQ0FTRV9GSUxFTkFNRVMKKwkJICAgIF9uY19zeXNlcnJfYWJvcnQoImNhbid0IGxpbmsgJXMgdG8gJXMiLCBmaWxlbmFtZSwgbGlua25hbWUpOworI2Vsc2UKKwkJICAgIF9uY193YXJuaW5nKCJjYW4ndCBsaW5rICVzIHRvICVzIChlcnJubz0lZCkiLCBmaWxlbmFtZSwKKwkJCQlsaW5rbmFtZSwgZXJybm8pOworI2VuZGlmCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJREVCVUcoMSwgKCJMaW5rZWQgJXMiLCBsaW5rbmFtZSkpOworCSAgICB9CisJfQorI2Vsc2UgLyoganVzdCBtYWtlIGNvcGllcyAqLworCSAgICB3cml0ZV9maWxlKGxpbmtuYW1lLCB0cCk7CisjZW5kaWYgLyogSEFWRV9MSU5LICovCisgICAgfQorI2VuZGlmIC8qIFVTRV9IQVNIRURfREIgKi8KK30KKworc3RhdGljIHVuc2lnbmVkCitmYWtlX3dyaXRlKGNoYXIgKmRzdCwKKwkgICB1bnNpZ25lZCAqb2Zmc2V0LAorCSAgIHVuc2lnbmVkIGxpbWl0LAorCSAgIGNoYXIgKnNyYywKKwkgICB1bnNpZ25lZCB3YW50LAorCSAgIHVuc2lnbmVkIHNpemUpCit7CisgICAgaW50IGhhdmUgPSAobGltaXQgLSAqb2Zmc2V0KTsKKworICAgIHdhbnQgKj0gc2l6ZTsKKyAgICBpZiAoaGF2ZSA+IDApIHsKKwlpZiAoKGludCkgd2FudCA+IGhhdmUpCisJICAgIHdhbnQgPSBoYXZlOworCW1lbWNweShkc3QgKyAqb2Zmc2V0LCBzcmMsIHdhbnQpOworCSpvZmZzZXQgKz0gd2FudDsKKyAgICB9IGVsc2UgeworCXdhbnQgPSAwOworICAgIH0KKyAgICByZXR1cm4gKGludCkgKHdhbnQgLyBzaXplKTsKK30KKworI2RlZmluZSBXcml0ZShidWYsIHNpemUsIGNvdW50KSBmYWtlX3dyaXRlKGJ1ZmZlciwgb2Zmc2V0LCBsaW1pdCwgKGNoYXIgKikgYnVmLCBjb3VudCwgc2l6ZSkKKworI3VuZGVmIExJVFRMRV9FTkRJQU4JCS8qIEJTRC9PUyBkZWZpbmVzIHRoaXMgYXMgYSBmZWF0dXJlIG1hY3JvICovCisjZGVmaW5lIEhJKHgpCQkJKCh4KSAvIDI1NikKKyNkZWZpbmUgTE8oeCkJCQkoKHgpICUgMjU2KQorI2RlZmluZSBMSVRUTEVfRU5ESUFOKHAsIHgpCShwKVswXSA9IExPKHgpLCAocClbMV0gPSBISSh4KQorCisjZGVmaW5lIFdSSVRFX1NUUklORyhzdHIpIChXcml0ZShzdHIsIHNpemVvZihjaGFyKSwgc3RybGVuKHN0cikgKyAxKSA9PSBzdHJsZW4oc3RyKSArIDEpCisKK3N0YXRpYyBpbnQKK2NvbXB1dGVfb2Zmc2V0cyhjaGFyICoqU3RyaW5ncywgdW5zaWduZWQgc3RybWF4LCBzaG9ydCAqb2Zmc2V0cykKK3sKKyAgICBzaXplX3QgbmV4dGZyZWUgPSAwOworICAgIHVuc2lnbmVkIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RybWF4OyBpKyspIHsKKwlpZiAoU3RyaW5nc1tpXSA9PSBBQlNFTlRfU1RSSU5HKSB7CisJICAgIG9mZnNldHNbaV0gPSAtMTsKKwl9IGVsc2UgaWYgKFN0cmluZ3NbaV0gPT0gQ0FOQ0VMTEVEX1NUUklORykgeworCSAgICBvZmZzZXRzW2ldID0gLTI7CisJfSBlbHNlIHsKKwkgICAgb2Zmc2V0c1tpXSA9IG5leHRmcmVlOworCSAgICBuZXh0ZnJlZSArPSBzdHJsZW4oU3RyaW5nc1tpXSkgKyAxOworCSAgICBUUkFDRV9PVVQoKCJwdXQgU3RyaW5nc1slZF09JXMoJWQpIiwgKGludCkgaSwKKwkJICAgICAgIF9uY192aXNidWYoU3RyaW5nc1tpXSksIChpbnQpIG5leHRmcmVlKSk7CisJfQorICAgIH0KKyAgICByZXR1cm4gbmV4dGZyZWU7Cit9CisKK3N0YXRpYyB2b2lkCitjb252ZXJ0X3Nob3J0cyh1bnNpZ25lZCBjaGFyICpidWYsIHNob3J0ICpOdW1iZXJzLCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJaWYgKE51bWJlcnNbaV0gPT0gQUJTRU5UX05VTUVSSUMpIHsJLyogSEkvTE8gd29uJ3Qgd29yayAqLworCSAgICBidWZbMiAqIGldID0gYnVmWzIgKiBpICsgMV0gPSAwMzc3OworCX0gZWxzZSBpZiAoTnVtYmVyc1tpXSA9PSBDQU5DRUxMRURfTlVNRVJJQykgewkvKiBISS9MTyB3b24ndCB3b3JrICovCisJICAgIGJ1ZlsyICogaV0gPSAwMzc2OworCSAgICBidWZbMiAqIGkgKyAxXSA9IDAzNzc7CisJfSBlbHNlIHsKKwkgICAgTElUVExFX0VORElBTihidWYgKyAyICogaSwgTnVtYmVyc1tpXSk7CisJICAgIFRSQUNFX09VVCgoInB1dCBOdW1iZXJzWyVkXT0lZCIsIGksIE51bWJlcnNbaV0pKTsKKwl9CisgICAgfQorfQorCisjZGVmaW5lIGV2ZW5fYm91bmRhcnkodmFsdWUpIFwKKwkgICAgKCh2YWx1ZSkgJSAyICE9IDAgJiYgV3JpdGUoJnplcm8sIHNpemVvZihjaGFyKSwgMSkgIT0gMSkKKworI2lmIE5DVVJTRVNfWE5BTUVTCitzdGF0aWMgdW5zaWduZWQKK2V4dGVuZGVkX0Jvb2xlYW5zKFRFUk1UWVBFICp0cCkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCByZXN1bHQgPSAwOworICAgIHVuc2lnbmVkIHNob3J0IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdHAtPmV4dF9Cb29sZWFuczsgKytpKSB7CisJaWYgKHRwLT5Cb29sZWFuc1tCT09MQ09VTlQgKyBpXSA9PSBUUlVFKQorCSAgICByZXN1bHQgPSAoaSArIDEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdW5zaWduZWQKK2V4dGVuZGVkX051bWJlcnMoVEVSTVRZUEUgKnRwKQoreworICAgIHVuc2lnbmVkIHNob3J0IHJlc3VsdCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB0cC0+ZXh0X051bWJlcnM7ICsraSkgeworCWlmICh0cC0+TnVtYmVyc1tOVU1DT1VOVCArIGldICE9IEFCU0VOVF9OVU1FUklDKQorCSAgICByZXN1bHQgPSAoaSArIDEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdW5zaWduZWQKK2V4dGVuZGVkX1N0cmluZ3MoVEVSTVRZUEUgKnRwKQoreworICAgIHVuc2lnbmVkIHNob3J0IHJlc3VsdCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB0cC0+ZXh0X1N0cmluZ3M7ICsraSkgeworCWlmICh0cC0+U3RyaW5nc1tTVFJDT1VOVCArIGldICE9IEFCU0VOVF9TVFJJTkcpCisJICAgIHJlc3VsdCA9IChpICsgMSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBfbmNfYWxpZ25fdGVybXR5cGUoKSB3aWxsIGV4dGVuZCBlbnRyaWVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgaW4gYSB1c2U9CisgKiBjbGF1c2UgLSBkaXNjYXJkIHRoZSB1bm5lZWRlZCBkYXRhLgorICovCitzdGF0aWMgYm9vbAorZXh0ZW5kZWRfb2JqZWN0KFRFUk1UWVBFICp0cCkKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaWYgKF9uY191c2VyX2RlZmluYWJsZSkgeworCXJlc3VsdCA9ICgoZXh0ZW5kZWRfQm9vbGVhbnModHApCisJCSAgICsgZXh0ZW5kZWRfTnVtYmVycyh0cCkKKwkJICAgKyBleHRlbmRlZF9TdHJpbmdzKHRwKSkgIT0gMCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludAord3JpdGVfb2JqZWN0KFRFUk1UWVBFICp0cCwgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCAqb2Zmc2V0LCB1bnNpZ25lZCBsaW1pdCkKK3sKKyAgICBjaGFyICpuYW1lbGlzdDsKKyAgICBzaXplX3QgbmFtZWxlbiwgYm9vbG1heCwgbnVtbWF4LCBzdHJtYXg7CisgICAgY2hhciB6ZXJvID0gJ1wwJzsKKyAgICBzaXplX3QgaTsKKyAgICBzaG9ydCBuZXh0ZnJlZTsKKyAgICBzaG9ydCBvZmZzZXRzW01BWF9FTlRSWV9TSVpFIC8gMl07CisgICAgdW5zaWduZWQgY2hhciBidWZbTUFYX0VOVFJZX1NJWkVdOworICAgIHVuc2lnbmVkIGxhc3RfYm9vbCA9IEJPT0xXUklURTsKKyAgICB1bnNpZ25lZCBsYXN0X251bSA9IE5VTVdSSVRFOworICAgIHVuc2lnbmVkIGxhc3Rfc3RyID0gU1RSV1JJVEU7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIC8qCisgICAgICogTm9ybWFsbHkgd2UgbGltaXQgdGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGV4Y2x1ZGUgdGhlICJvYnNvbGV0ZSIKKyAgICAgKiBjYXBhYmlsaXRpZXMuICBIb3dldmVyLCBpZiB3ZSBhcmUgYWNjZXB0aW5nIGV4dGVuZGVkIG5hbWVzLCBhZGQKKyAgICAgKiB0aGVzZSBhcyB3ZWxsLCBzaW5jZSB0aGV5IGFyZSB1c2VkIGZvciBzdXBwb3J0aW5nIHRyYW5zbGF0aW9uCisgICAgICogdG8vZnJvbSB0ZXJtY2FwLgorICAgICAqLworICAgIGlmIChfbmNfdXNlcl9kZWZpbmFibGUpIHsKKwlsYXN0X2Jvb2wgPSBCT09MQ09VTlQ7CisJbGFzdF9udW0gPSBOVU1DT1VOVDsKKwlsYXN0X3N0ciA9IFNUUkNPVU5UOworICAgIH0KKyNlbmRpZgorCisgICAgbmFtZWxpc3QgPSB0cC0+dGVybV9uYW1lczsKKyAgICBuYW1lbGVuID0gc3RybGVuKG5hbWVsaXN0KSArIDE7CisKKyAgICBib29sbWF4ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGFzdF9ib29sOyBpKyspIHsKKwlpZiAodHAtPkJvb2xlYW5zW2ldID09IFRSVUUpCisJICAgIGJvb2xtYXggPSBpICsgMTsKKyAgICB9CisKKyAgICBudW1tYXggPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBsYXN0X251bTsgaSsrKSB7CisJaWYgKHRwLT5OdW1iZXJzW2ldICE9IEFCU0VOVF9OVU1FUklDKQorCSAgICBudW1tYXggPSBpICsgMTsKKyAgICB9CisKKyAgICBzdHJtYXggPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBsYXN0X3N0cjsgaSsrKSB7CisJaWYgKHRwLT5TdHJpbmdzW2ldICE9IEFCU0VOVF9TVFJJTkcpCisJICAgIHN0cm1heCA9IGkgKyAxOworICAgIH0KKworICAgIG5leHRmcmVlID0gY29tcHV0ZV9vZmZzZXRzKHRwLT5TdHJpbmdzLCBzdHJtYXgsIG9mZnNldHMpOworCisgICAgLyogZmlsbCBpbiB0aGUgaGVhZGVyICovCisgICAgTElUVExFX0VORElBTihidWYsIE1BR0lDKTsKKyAgICBMSVRUTEVfRU5ESUFOKGJ1ZiArIDIsIG1pbihuYW1lbGVuLCBNQVhfTkFNRV9TSVpFICsgMSkpOworICAgIExJVFRMRV9FTkRJQU4oYnVmICsgNCwgYm9vbG1heCk7CisgICAgTElUVExFX0VORElBTihidWYgKyA2LCBudW1tYXgpOworICAgIExJVFRMRV9FTkRJQU4oYnVmICsgOCwgc3RybWF4KTsKKyAgICBMSVRUTEVfRU5ESUFOKGJ1ZiArIDEwLCBuZXh0ZnJlZSk7CisKKyAgICAvKiB3cml0ZSBvdXQgdGhlIGhlYWRlciAqLworICAgIFRSQUNFX09VVCgoIkhlYWRlciBvZiAlcyBAJWQiLCBuYW1lbGlzdCwgKm9mZnNldCkpOworICAgIGlmIChXcml0ZShidWYsIDEyLCAxKSAhPSAxCisJfHwgV3JpdGUobmFtZWxpc3QsIHNpemVvZihjaGFyKSwgbmFtZWxlbikgIT0gbmFtZWxlbikKKwkgIHJldHVybiAoRVJSKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBib29sbWF4OyBpKyspCisJaWYgKHRwLT5Cb29sZWFuc1tpXSA9PSBUUlVFKQorCSAgICBidWZbaV0gPSBUUlVFOworCWVsc2UKKwkgICAgYnVmW2ldID0gRkFMU0U7CisgICAgaWYgKFdyaXRlKGJ1Ziwgc2l6ZW9mKGNoYXIpLCBib29sbWF4KSAhPSBib29sbWF4KQorCSAgcmV0dXJuIChFUlIpOworCisgICAgaWYgKGV2ZW5fYm91bmRhcnkobmFtZWxlbiArIGJvb2xtYXgpKQorCXJldHVybiAoRVJSKTsKKworICAgIFRSQUNFX09VVCgoIk51bWVyaWNzIGJlZ2luIGF0ICUwNHgiLCAqb2Zmc2V0KSk7CisKKyAgICAvKiB0aGUgbnVtZXJpY3MgKi8KKyAgICBjb252ZXJ0X3Nob3J0cyhidWYsIHRwLT5OdW1iZXJzLCBudW1tYXgpOworICAgIGlmIChXcml0ZShidWYsIDIsIG51bW1heCkgIT0gbnVtbWF4KQorCXJldHVybiAoRVJSKTsKKworICAgIFRSQUNFX09VVCgoIlN0cmluZyBvZmZzZXRzIGJlZ2luIGF0ICUwNHgiLCAqb2Zmc2V0KSk7CisKKyAgICAvKiB0aGUgc3RyaW5nIG9mZnNldHMgKi8KKyAgICBjb252ZXJ0X3Nob3J0cyhidWYsIG9mZnNldHMsIHN0cm1heCk7CisgICAgaWYgKFdyaXRlKGJ1ZiwgMiwgc3RybWF4KSAhPSBzdHJtYXgpCisJcmV0dXJuIChFUlIpOworCisgICAgVFJBQ0VfT1VUKCgiU3RyaW5nIHRhYmxlIGJlZ2lucyBhdCAlMDR4IiwgKm9mZnNldCkpOworCisgICAgLyogdGhlIHN0cmluZ3MgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RybWF4OyBpKyspCisJaWYgKFZBTElEX1NUUklORyh0cC0+U3RyaW5nc1tpXSkpCisJICAgIGlmICghV1JJVEVfU1RSSU5HKHRwLT5TdHJpbmdzW2ldKSkKKwkJcmV0dXJuIChFUlIpOworCisjaWYgTkNVUlNFU19YTkFNRVMKKyAgICBpZiAoZXh0ZW5kZWRfb2JqZWN0KHRwKSkgeworCXVuc2lnbmVkIGV4dGNudCA9IE5VTV9FWFRfTkFNRVModHApOworCisJaWYgKGV2ZW5fYm91bmRhcnkobmV4dGZyZWUpKQorCSAgICByZXR1cm4gKEVSUik7CisKKwluZXh0ZnJlZSA9IGNvbXB1dGVfb2Zmc2V0cyh0cC0+U3RyaW5ncyArIFNUUkNPVU5ULAorCQkJCSAgIHRwLT5leHRfU3RyaW5ncywKKwkJCQkgICBvZmZzZXRzKTsKKwlUUkFDRV9PVVQoKCJhZnRlciBleHRlbmRlZCBzdHJpbmcgY2FwYWJpbGl0aWVzLCBuZXh0ZnJlZT0lZCIsIG5leHRmcmVlKSk7CisKKwlpZiAodHAtPmV4dF9TdHJpbmdzID49IFNJWkVPRihvZmZzZXRzKSkKKwkgICAgcmV0dXJuIChFUlIpOworCisJbmV4dGZyZWUgKz0gY29tcHV0ZV9vZmZzZXRzKHRwLT5leHRfTmFtZXMsCisJCQkJICAgIGV4dGNudCwKKwkJCQkgICAgb2Zmc2V0cyArIHRwLT5leHRfU3RyaW5ncyk7CisJVFJBQ0VfT1VUKCgiYWZ0ZXIgZXh0ZW5kZWQgY2FwbmFtZXMsIG5leHRmcmVlPSVkIiwgbmV4dGZyZWUpKTsKKwlzdHJtYXggPSB0cC0+ZXh0X1N0cmluZ3MgKyBleHRjbnQ7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBleHRlbmRlZCBoZWFkZXIKKwkgKi8KKwlMSVRUTEVfRU5ESUFOKGJ1ZiArIDAsIHRwLT5leHRfQm9vbGVhbnMpOworCUxJVFRMRV9FTkRJQU4oYnVmICsgMiwgdHAtPmV4dF9OdW1iZXJzKTsKKwlMSVRUTEVfRU5ESUFOKGJ1ZiArIDQsIHRwLT5leHRfU3RyaW5ncyk7CisJTElUVExFX0VORElBTihidWYgKyA2LCBzdHJtYXgpOworCUxJVFRMRV9FTkRJQU4oYnVmICsgOCwgbmV4dGZyZWUpOworCVRSQUNFX09VVCgoIldSSVRFIGV4dGVuZGVkLWhlYWRlciBAJWQiLCAqb2Zmc2V0KSk7CisJaWYgKFdyaXRlKGJ1ZiwgMTAsIDEpICE9IDEpCisJICAgIHJldHVybiAoRVJSKTsKKworCVRSQUNFX09VVCgoIldSSVRFICVkIGJvb2xlYW5zIEAlZCIsIHRwLT5leHRfQm9vbGVhbnMsICpvZmZzZXQpKTsKKwlpZiAodHAtPmV4dF9Cb29sZWFucworCSAgICAmJiBXcml0ZSh0cC0+Qm9vbGVhbnMgKyBCT09MQ09VTlQsIHNpemVvZihjaGFyKSwKKwkJICAgICB0cC0+ZXh0X0Jvb2xlYW5zKSAhPSB0cC0+ZXh0X0Jvb2xlYW5zKQorCSAgICAgIHJldHVybiAoRVJSKTsKKworCWlmIChldmVuX2JvdW5kYXJ5KHRwLT5leHRfQm9vbGVhbnMpKQorCSAgICByZXR1cm4gKEVSUik7CisKKwlUUkFDRV9PVVQoKCJXUklURSAlZCBudW1iZXJzIEAlZCIsIHRwLT5leHRfTnVtYmVycywgKm9mZnNldCkpOworCWlmICh0cC0+ZXh0X051bWJlcnMpIHsKKwkgICAgY29udmVydF9zaG9ydHMoYnVmLCB0cC0+TnVtYmVycyArIE5VTUNPVU5ULCB0cC0+ZXh0X051bWJlcnMpOworCSAgICBpZiAoV3JpdGUoYnVmLCAyLCB0cC0+ZXh0X051bWJlcnMpICE9IHRwLT5leHRfTnVtYmVycykKKwkJcmV0dXJuIChFUlIpOworCX0KKworCS8qCisJICogQ29udmVydCB0aGUgb2Zmc2V0cyBmb3IgdGhlIGV4dF9TdHJpbmdzIGFuZCBleHRfTmFtZXMgdGFibGVzLAorCSAqIGluIHRoYXQgb3JkZXIuCisJICovCisJY29udmVydF9zaG9ydHMoYnVmLCBvZmZzZXRzLCBzdHJtYXgpOworCVRSQUNFX09VVCgoIldSSVRFIG9mZnNldHMgQCVkIiwgKm9mZnNldCkpOworCWlmIChXcml0ZShidWYsIDIsIHN0cm1heCkgIT0gc3RybWF4KQorCSAgICByZXR1cm4gKEVSUik7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBzdHJpbmcgdGFibGUgYWZ0ZXIgdGhlIG9mZnNldCB0YWJsZXMgc28gd2UgZG8gbm90CisJICogaGF2ZSB0byBkbyBhbnl0aGluZyBhYm91dCBhbGlnbm1lbnQuCisJICovCisJZm9yIChpID0gMDsgaSA8IHRwLT5leHRfU3RyaW5nczsgaSsrKSB7CisJICAgIGlmIChWQUxJRF9TVFJJTkcodHAtPlN0cmluZ3NbaSArIFNUUkNPVU5UXSkpIHsKKwkJVFJBQ0VfT1VUKCgiV1JJVEUgZXh0X1N0cmluZ3NbJWRdPSVzIiwgKGludCkgaSwKKwkJCSAgIF9uY192aXNidWYodHAtPlN0cmluZ3NbaSArIFNUUkNPVU5UXSkpKTsKKwkJaWYgKCFXUklURV9TVFJJTkcodHAtPlN0cmluZ3NbaSArIFNUUkNPVU5UXSkpCisJCSAgICByZXR1cm4gKEVSUik7CisJICAgIH0KKwl9CisKKwkvKgorCSAqIFdyaXRlIHRoZSBleHRlbmRlZCBuYW1lcworCSAqLworCWZvciAoaSA9IDA7IGkgPCBleHRjbnQ7IGkrKykgeworCSAgICBUUkFDRV9PVVQoKCJXUklURSBleHRfTmFtZXNbJWRdPSVzIiwgKGludCkgaSwgdHAtPmV4dF9OYW1lc1tpXSkpOworCSAgICBpZiAoIVdSSVRFX1NUUklORyh0cC0+ZXh0X05hbWVzW2ldKSkKKwkJcmV0dXJuIChFUlIpOworCX0KKworICAgIH0KKyNlbmRpZiAvKiBOQ1VSU0VTX1hOQU1FUyAqLworCisgICAgdG90YWxfd3JpdHRlbisrOworICAgIHJldHVybiAoT0spOworfQorCisvKgorICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgd3JpdHRlbiBieSB0aGlzIHByb2Nlc3MKKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3RpY193cml0dGVuKHZvaWQpCit7CisgICAgcmV0dXJuIHRvdGFsX3dyaXR0ZW47Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL1JFQURNRSBiL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NThmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL1JFQURNRQpAQCAtMCwwICsxLDMzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgIC0tCistLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgIC0tCistLSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgIC0tCistLSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgIC0tCistLSBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIC0tCistLSBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgIC0tCistLSB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgIC0tCistLSBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgIC0tCistLSBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgIC0tCistLSBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIC0tCistLSBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgICAgIC0tCistLSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgIC0tCistLSBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIC0tCistLSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgIC0tCistLSBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgIC0tCistLSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgIC0tCistLSBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSAkSWQ6IFJFQURNRSx2IDEuMiAyMDA2LzA0LzIyIDIyOjE5OjM3IHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgKHRyYWNlKSBzdXBwb3J0IGJvdGggdGhlIHRlcm1pbmZvIGFuZCBuY3Vyc2VzCitsaWJyYXJpZXMuICBNb3N0IG9mIHRoZSBmdW5jdGlvbnMgYXJlIGxpbmtlZCBpbiBvbmx5IHdoZW4gdGhlIGxpYnJhcmllcworYXJlIGNvbXBpbGVkIHdpdGggVFJBQ0UgZGVmaW5lZC4KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0M2IxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZS5jCkBAIC0wLDAgKzEsMzM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfdHJhY2UuYyAtIFRyYWNpbmcvRGVidWdnaW5nIHJvdXRpbmVzCisgKgorICogVGhlIF90cmFjZWYoKSBmdW5jdGlvbiBpcyBvcmlnaW5hbGx5IGZyb20gcGN1cnNlcyAoYnkgUGF2ZWwgQ3VydGlzKSBpbiAxOTgyLiAKKyAqIHBjdXJzZXMgYWxsb3dlZCBvbmUgdG8gZW5hYmxlL2Rpc2FibGUgdHJhY2luZyB1c2luZyB0cmFjZW9uKCkgYW5kIHRyYWNlb2ZmKCkKKyAqIGZ1bmN0aW9ucy4gIG5jdXJzZXMgcHJvdmlkZXMgYSB0cmFjZSgpIGZ1bmN0aW9uIHdoaWNoIGFsbG93cyBvbmUgdG8KKyAqIHNlbGVjdGl2ZWx5IGVuYWJsZSBvciBkaXNhYmxlIHNldmVyYWwgdHJhY2luZyBmZWF0dXJlcy4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0aWMuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHJhY2UuYyx2IDEuNzEgMjAwOC8wOC8yMyAxODowNDoyOSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVF9WQVIodW5zaWduZWQpIF9uY190cmFjaW5nID0gMDsgLyogYWx3YXlzIGRlZmluZSB0aGlzICovCisKKyNpZmRlZiBUUkFDRQorCisjaWYgVVNFX1JFRU5UUkFOVAorTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorTkNVUlNFU19QVUJMSUNfVkFSKF9uY190cHV0c190cmFjZSkgKHZvaWQpCit7CisgICAgcmV0dXJuIFNQID8gU1AtPl90cHV0c190cmFjZSA6IF9uY19wcmVzY3JlZW4uX3RwdXRzX3RyYWNlOworfQorTkNVUlNFU19FWFBPUlQobG9uZykKK05DVVJTRVNfUFVCTElDX1ZBUihfbmNfb3V0Y2hhcnMpICh2b2lkKQoreworICAgIHJldHVybiBTUCA/IFNQLT5fb3V0Y2hhcnMgOiBfbmNfcHJlc2NyZWVuLl9vdXRjaGFyczsKK30KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2V0X3RwdXRzX3RyYWNlKGNvbnN0IGNoYXIgKnMpCit7CisgICAgaWYgKFNQKQorCVNQLT5fdHB1dHNfdHJhY2UgPSBzOworICAgIGVsc2UKKwlfbmNfcHJlc2NyZWVuLl90cHV0c190cmFjZSA9IHM7Cit9CitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2NvdW50X291dGNoYXJzKGxvbmcgaW5jcmVtZW50KQoreworICAgIGlmIChTUCkKKwlTUC0+X291dGNoYXJzICs9IGluY3JlbWVudDsKKyAgICBlbHNlCisJX25jX3ByZXNjcmVlbi5fb3V0Y2hhcnMgKz0gaW5jcmVtZW50OworfQorI2Vsc2UKK05DVVJTRVNfRVhQT1JUX1ZBUihjb25zdCBjaGFyICopIF9uY190cHV0c190cmFjZSA9ICIiOworTkNVUlNFU19FWFBPUlRfVkFSKGxvbmcpIF9uY19vdXRjaGFycyA9IDA7CisjZW5kaWYKKworI2RlZmluZSBUcmFjZUZQCQlfbmNfZ2xvYmFscy50cmFjZV9mcAorI2RlZmluZSBUcmFjZVBhdGgJX25jX2dsb2JhbHMudHJhY2VfZm5hbWUKKyNkZWZpbmUgVHJhY2VMZXZlbAlfbmNfZ2xvYmFscy50cmFjZV9sZXZlbAorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQordHJhY2UoY29uc3QgdW5zaWduZWQgaW50IHRyYWNlbGV2ZWwpCit7CisgICAgaWYgKChUcmFjZUZQID09IDApICYmIHRyYWNlbGV2ZWwpIHsKKwljb25zdCBjaGFyICptb2RlID0gX25jX2dsb2JhbHMuaW5pdF90cmFjZSA/ICJhYiIgOiAid2IiOworCisJaWYgKFRyYWNlUGF0aFswXSA9PSAnXDAnKSB7CisJICAgIGludCBzaXplID0gc2l6ZW9mKFRyYWNlUGF0aCkgLSAxMjsKKwkgICAgaWYgKGdldGN3ZChUcmFjZVBhdGgsIHNpemUpID09IDApIHsKKwkJcGVycm9yKCJjdXJzZXM6IENhbid0IGdldCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJICAgIH0KKwkgICAgVHJhY2VQYXRoW3NpemVdID0gJ1wwJzsKKwkgICAgYXNzZXJ0KHN0cmxlbihUcmFjZVBhdGgpIDw9IHNpemUpOworCSAgICBzdHJjYXQoVHJhY2VQYXRoLCAiL3RyYWNlIik7CisJICAgIGlmIChfbmNfaXNfZGlyX3BhdGgoVHJhY2VQYXRoKSkgeworCQlzdHJjYXQoVHJhY2VQYXRoLCAiLmxvZyIpOworCSAgICB9CisJfQorCisJX25jX2dsb2JhbHMuaW5pdF90cmFjZSA9IFRSVUU7CisJX25jX3RyYWNpbmcgPSB0cmFjZWxldmVsOworCWlmIChfbmNfYWNjZXNzKFRyYWNlUGF0aCwgV19PSykgPCAwCisJICAgIHx8IChUcmFjZUZQID0gZm9wZW4oVHJhY2VQYXRoLCBtb2RlKSkgPT0gMCkgeworCSAgICBwZXJyb3IoImN1cnNlczogQ2FuJ3Qgb3BlbiAndHJhY2UnIGZpbGUiKTsKKwkgICAgZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBUcnkgdG8gc2V0IGxpbmUtYnVmZmVyZWQgbW9kZSwgb3IgKGZhaWxpbmcgdGhhdCkgdW5idWZmZXJlZCwKKwkgKiBzbyB0aGF0IHRoZSB0cmFjZS1vdXRwdXQgZ2V0cyBmbHVzaGVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlCisJICogZW5kIG9mIGVhY2ggbGluZS4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UgdGhlIHByb2dyYW0gZGllcy4gCisJICovCisjaWYgSEFWRV9TRVRWQlVGCQkvKiBBTlNJICovCisJKHZvaWQpIHNldHZidWYoVHJhY2VGUCwgKGNoYXIgKikgMCwgX0lPTEJGLCAwKTsKKyNlbGlmIEhBVkVfU0VUQlVGCQkvKiBQT1NJWCAqLworCSh2b2lkKSBzZXRidWZmZXIoVHJhY2VGUCwgKGNoYXIgKikgMCk7CisjZW5kaWYKKwlfdHJhY2VmKCJUUkFDSU5HIE5DVVJTRVMgdmVyc2lvbiAlcy4lZCAodHJhY2VsZXZlbD0lI3gpIiwKKwkJTkNVUlNFU19WRVJTSU9OLAorCQlOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gsCisJCXRyYWNlbGV2ZWwpOworICAgIH0gZWxzZSBpZiAodHJhY2VsZXZlbCA9PSAwKSB7CisJaWYgKFRyYWNlRlAgIT0gMCkgeworCSAgICBmY2xvc2UoVHJhY2VGUCk7CisJICAgIFRyYWNlRlAgPSAwOworCX0KKwlfbmNfdHJhY2luZyA9IHRyYWNlbGV2ZWw7CisgICAgfSBlbHNlIGlmIChfbmNfdHJhY2luZyAhPSB0cmFjZWxldmVsKSB7CisJX25jX3RyYWNpbmcgPSB0cmFjZWxldmVsOworCV90cmFjZWYoInRyYWNlbGV2ZWw9JSN4IiwgdHJhY2VsZXZlbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorX25jX3ZhX3RyYWNlZihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgQ2FsbGVkW10gPSBUX0NBTExFRCgiIik7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgUmV0dXJuW10gPSBUX1JFVFVSTigiIik7CisKKyAgICBib29sIGJlZm9yZSA9IEZBTFNFOworICAgIGJvb2wgYWZ0ZXIgPSBGQUxTRTsKKyAgICB1bnNpZ25lZCBkb2l0ID0gX25jX3RyYWNpbmc7CisgICAgaW50IHNhdmVfZXJyID0gZXJybm87CisKKyAgICBpZiAoc3RybGVuKGZtdCkgPj0gc2l6ZW9mKENhbGxlZCkgLSAxKSB7CisJaWYgKCFzdHJuY21wKGZtdCwgQ2FsbGVkLCBzaXplb2YoQ2FsbGVkKSAtIDEpKSB7CisJICAgIGJlZm9yZSA9IFRSVUU7CisJICAgIFRyYWNlTGV2ZWwrKzsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGZtdCwgUmV0dXJuLCBzaXplb2YoUmV0dXJuKSAtIDEpKSB7CisJICAgIGFmdGVyID0gVFJVRTsKKwl9CisJaWYgKGJlZm9yZSB8fCBhZnRlcikgeworCSAgICBpZiAoKFRyYWNlTGV2ZWwgPD0gMSkKKwkJfHwgKGRvaXQgJiBUUkFDRV9JQ0FMTFMpICE9IDApCisJCWRvaXQgJj0gKFRSQUNFX0NBTExTIHwgVFJBQ0VfQ0NBTExTKTsKKwkgICAgZWxzZQorCQlkb2l0ID0gMDsKKwl9CisgICAgfQorCisgICAgaWYgKGRvaXQgIT0gMCkgeworCWlmIChUcmFjZUZQID09IDApCisJICAgIFRyYWNlRlAgPSBzdGRlcnI7CisjaWZkZWYgVVNFX1BUSFJFQURTCisJLyoKKwkgKiBUUkFDRV9JQ0FMTFMgaXMgInJlYWxseSIgbmVlZGVkIHRvIHNob3cgbm9ybWFsIHVzZSB3aXRoIHRocmVhZGVkCisJICogYXBwbGljYXRpb25zLCBzaW5jZSBhbnl0aGluZyBjYW4gYmUgcnVubmluZyBkdXJpbmcgYSBuYXBtcygpLAorCSAqIG1ha2luZyBpdCBhcHBlYXIgaW4gdGhlIGhpZXJhcmNoaWNhbCB0cmFjZSBhcyBpdCBvdGhlciBmdW5jdGlvbnMKKwkgKiBhcmUgYmVpbmcgY2FsbGVkLgorCSAqCisJICogUmF0aGVyIHRoYW4gYWRkIHRoZSBjb21wbGljYXRpb24gb2YgYSBwZXItdGhyZWFkIHN0YWNrLCBqdXN0CisJICogc2hvdyB0aGUgdGhyZWFkLWlkIGluIGVhY2ggbGluZSBvZiB0aGUgdHJhY2UuCisJICovCisjIGlmIFVTRV9XRUFLX1NZTUJPTFMKKwlpZiAoKHB0aHJlYWRfc2VsZikpCisjIGVuZGlmCisJICAgIGZwcmludGYoVHJhY2VGUCwgIiUjbHg6IiwgKGxvbmcpICh2b2lkICopIHB0aHJlYWRfc2VsZigpKTsKKyNlbmRpZgorCWlmIChiZWZvcmUgfHwgYWZ0ZXIpIHsKKwkgICAgaW50IG47CisJICAgIGZvciAobiA9IDE7IG4gPCBUcmFjZUxldmVsOyBuKyspCisJCWZwdXRzKCIrICIsIFRyYWNlRlApOworCX0KKwl2ZnByaW50ZihUcmFjZUZQLCBmbXQsIGFwKTsKKwlmcHV0YygnXG4nLCBUcmFjZUZQKTsKKwlmZmx1c2goVHJhY2VGUCk7CisgICAgfQorCisgICAgaWYgKGFmdGVyICYmIFRyYWNlTGV2ZWwpCisJVHJhY2VMZXZlbC0tOworCisgICAgZXJybm8gPSBzYXZlX2VycjsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK190cmFjZWYoY29uc3QgY2hhciAqZm10LC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgX25jX3ZhX3RyYWNlZihmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworfQorCisvKiBUcmFjZSAnYm9vbCcgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoTkNVUlNFU19CT09MKQorX25jX3JldHJhY2VfYm9vbChOQ1VSU0VTX0JPT0wgY29kZSkKK3sKKyAgICBUKChUX1JFVFVSTigiJXMiKSwgY29kZSA/ICJUUlVFIiA6ICJGQUxTRSIpKTsKKyAgICByZXR1cm4gY29kZTsKK30KKworLyogVHJhY2UgJ2ludCcgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3JldHJhY2VfaW50KGludCBjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIFRyYWNlICd1bnNpZ25lZCcgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQodW5zaWduZWQpCitfbmNfcmV0cmFjZV91bnNpZ25lZCh1bnNpZ25lZCBjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlI3giKSwgY29kZSkpOworICAgIHJldHVybiBjb2RlOworfQorCisvKiBUcmFjZSAnY2hhcionIHJldHVybi12YWx1ZXMgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY19yZXRyYWNlX3B0cihjaGFyICpjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcyIpLCBfbmNfdmlzYnVmKGNvZGUpKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIFRyYWNlICdjb25zdCBjaGFyKicgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorX25jX3JldHJhY2VfY3B0cihjb25zdCBjaGFyICpjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcyIpLCBfbmNfdmlzYnVmKGNvZGUpKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIFRyYWNlICdOQ1VSU0VTX0NPTlNUIHZvaWQqJyByZXR1cm4tdmFsdWVzICovCitOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIHZvaWQgKikKK19uY19yZXRyYWNlX2N2b2lkX3B0cihOQ1VSU0VTX0NPTlNUIHZvaWQgKmNvZGUpCit7CisgICAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgICByZXR1cm4gY29kZTsKK30KKworLyogVHJhY2UgJ3ZvaWQqJyByZXR1cm4tdmFsdWVzICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkICopCitfbmNfcmV0cmFjZV92b2lkX3B0cih2b2lkICpjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKy8qIFRyYWNlICdTQ1JFRU4gKicgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoU0NSRUVOICopCitfbmNfcmV0cmFjZV9zcChTQ1JFRU4gKmNvZGUpCit7CisgICAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgICByZXR1cm4gY29kZTsKK30KKworLyogVHJhY2UgJ1dJTkRPVyAqJyByZXR1cm4tdmFsdWVzICovCitOQ1VSU0VTX0VYUE9SVChXSU5ET1cgKikKK19uY19yZXRyYWNlX3dpbihXSU5ET1cgKmNvZGUpCit7CisgICAgVCgoVF9SRVRVUk4oIiVwIiksIGNvZGUpKTsKKyAgICByZXR1cm4gY29kZTsKK30KKworI2lmIFVTRV9SRUVOVFJBTlQKKy8qCisgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdHJhY2UtbWFzayBpcyBlbmFibGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBvbmUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGZpbGxzCisgKiBpbiBwYXJhbWV0ZXJzIGZvciBfdHJhY2VmKCksIGJ1dCBpbiB0aGF0IGNhc2Ugd2UgZG8gbm90IHdhbnQgdG8gbG9jayB0aGUKKyAqIG11dGV4LCBzaW5jZSBpdCBpcyBhbHJlYWR5IGxvY2tlZC4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3VzZV90cmFjZWYodW5zaWduZWQgbWFzaykKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgX25jX2xvY2tfZ2xvYmFsKHRzdF90cmFjZWYpOworICAgIGlmICghX25jX2dsb2JhbHMubmVzdGVkX3RyYWNlZisrKSB7CisJaWYgKChyZXN1bHQgPSAoX25jX3RyYWNpbmcgJiAobWFzaykpKSAhPSAwCisJICAgICYmIF9uY190cnlfZ2xvYmFsKHRyYWNlZikgPT0gMCkgeworCSAgICAvKiB3ZSB3aWxsIGNhbGwgX25jX2xvY2tlZF90cmFjZWYoKSwgbm8gbmVzdGluZyBzbyBmYXIgKi8KKwl9IGVsc2UgeworCSAgICAvKiB3ZSB3aWxsIG5vdCBjYWxsIF9uY19sb2NrZWRfdHJhY2VmKCkgKi8KKwkgICAgX25jX2dsb2JhbHMubmVzdGVkX3RyYWNlZiA9IDA7CisJfQorICAgIH0gZWxzZSB7CisJLyogd2UgbWF5IGNhbGwgX25jX2xvY2tlZF90cmFjZWYoKSwgYnV0IHdpdGggbmVzdGVkX3RyYWNlZiA+IDAgKi8KKwlyZXN1bHQgPSAoX25jX3RyYWNpbmcgJiAobWFzaykpOworICAgIH0KKyAgICBfbmNfdW5sb2NrX2dsb2JhbCh0c3RfdHJhY2VmKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogV2UgY2FsbCB0aGlzIGlmIF9uY191c2VfdHJhY2VmKCkgcmV0dXJucyB0cnVlLCB3aGljaCBtZWFucyB3ZSBtdXN0IHVubG9jaworICogdGhlIHRyYWNlZiBtdXRleC4KKyAqLworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19sb2NrZWRfdHJhY2VmKGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIF9uY192YV90cmFjZWYoZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKworICAgIGlmICgtLShfbmNfZ2xvYmFscy5uZXN0ZWRfdHJhY2VmKSA9PSAwKQorCV9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7Cit9CisjZW5kaWYgLyogVVNFX1JFRU5UUkFOVCAqLworCisjZW5kaWYgLyogVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlYXRyLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWF0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YTAzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWF0ci5jCkBAIC0wLDAgKzEsMzU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfdHJhY2VhdHIuYyAtIFRyYWNpbmcvRGVidWdnaW5nIHJvdXRpbmVzIChhdHRyaWJ1dGVzKQorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4JCS8qIGFjc19jaGFycyAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX3RyYWNlYXRyLmMsdiAxLjYzIDIwMDgvMDgvMDMgMTY6MjQ6NTMgdG9tIEV4cCAkIikKKworI2RlZmluZSBDT0xPUl9PRihjKSAoKGMgPCAwKSA/ICJkZWZhdWx0IiA6IChjID4gNyA/IGNvbG9yX29mKGMpIDogY29sb3JzW2NdLm5hbWUpKQorCisjaWZkZWYgVFJBQ0UKKworc3RhdGljIGNvbnN0IGNoYXIgbF9icmFjZVtdID0gU3RyaW5nT2YoTF9CUkFDRSk7CitzdGF0aWMgY29uc3QgY2hhciByX2JyYWNlW10gPSBTdHJpbmdPZihSX0JSQUNFKTsKKworI2lmbmRlZiBVU0VfVEVSTUxJQgorCisjZGVmaW5lIG15X2J1ZmZlciBfbmNfZ2xvYmFscy50cmFjZWF0cl9jb2xvcl9idWYKKyNkZWZpbmUgbXlfc2VsZWN0IF9uY19nbG9iYWxzLnRyYWNlYXRyX2NvbG9yX3NlbAorI2RlZmluZSBteV9jYWNoZWQgX25jX2dsb2JhbHMudHJhY2VhdHJfY29sb3JfbGFzdAorCitzdGF0aWMgY2hhciAqCitjb2xvcl9vZihpbnQgYykKK3sKKyAgICBpZiAoYyAhPSBteV9jYWNoZWQpIHsKKwlteV9jYWNoZWQgPSBjOworCW15X3NlbGVjdCA9ICFteV9zZWxlY3Q7CisJaWYgKGMgPT0gQ09MT1JfREVGQVVMVCkKKwkgICAgc3RyY3B5KG15X2J1ZmZlcltteV9zZWxlY3RdLCAiZGVmYXVsdCIpOworCWVsc2UKKwkgICAgc3ByaW50ZihteV9idWZmZXJbbXlfc2VsZWN0XSwgImNvbG9yJWQiLCBjKTsKKyAgICB9CisgICAgcmV0dXJuIG15X2J1ZmZlcltteV9zZWxlY3RdOworfQorCisjdW5kZWYgbXlfYnVmZmVyCisjdW5kZWYgbXlfc2VsZWN0CisjZW5kaWYgLyogIVVTRV9URVJNTElCICovCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK190cmFjZWF0dHIyKGludCBidWZudW0sIGNodHlwZSBuZXdtb2RlKQoreworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCB2YWw7CisJY29uc3QgY2hhciAqbmFtZTsKKyAgICB9IG5hbWVzW10gPQorICAgIHsKKwkvKiAqSU5ERU5ULU9GRiogKi8KKwl7IEFfU1RBTkRPVVQsCQkiQV9TVEFORE9VVCIgfSwKKwl7IEFfVU5ERVJMSU5FLAkJIkFfVU5ERVJMSU5FIiB9LAorCXsgQV9SRVZFUlNFLAkJIkFfUkVWRVJTRSIgfSwKKwl7IEFfQkxJTkssCQkiQV9CTElOSyIgfSwKKwl7IEFfRElNLAkJIkFfRElNIiB9LAorCXsgQV9CT0xELAkJIkFfQk9MRCIgfSwKKwl7IEFfQUxUQ0hBUlNFVCwJCSJBX0FMVENIQVJTRVQiIH0sCisJeyBBX0lOVklTLAkJIkFfSU5WSVMiIH0sCisJeyBBX1BST1RFQ1QsCQkiQV9QUk9URUNUIiB9LAorCXsgQV9DSEFSVEVYVCwJCSJBX0NIQVJURVhUIiB9LAorCXsgQV9OT1JNQUwsCQkiQV9OT1JNQUwiIH0sCisJeyBBX0NPTE9SLAkJIkFfQ09MT1IiIH0sCisJLyogKklOREVOVC1PTiogKi8KKworICAgIH0KKyNpZm5kZWYgVVNFX1RFUk1MSUIKKyAgICAsCisJY29sb3JzW10gPQorICAgIHsKKwkvKiAqSU5ERU5ULU9GRiogKi8KKwl7IENPTE9SX0JMQUNLLAkJIkNPTE9SX0JMQUNLIiB9LAorCXsgQ09MT1JfUkVELAkJIkNPTE9SX1JFRCIgfSwKKwl7IENPTE9SX0dSRUVOLAkJIkNPTE9SX0dSRUVOIiB9LAorCXsgQ09MT1JfWUVMTE9XLAkJIkNPTE9SX1lFTExPVyIgfSwKKwl7IENPTE9SX0JMVUUsCQkiQ09MT1JfQkxVRSIgfSwKKwl7IENPTE9SX01BR0VOVEEsCSJDT0xPUl9NQUdFTlRBIiB9LAorCXsgQ09MT1JfQ1lBTiwJCSJDT0xPUl9DWUFOIiB9LAorCXsgQ09MT1JfV0hJVEUsCQkiQ09MT1JfV0hJVEUiIH0sCisJLyogKklOREVOVC1PTiogKi8KKworICAgIH0KKyNlbmRpZiAvKiAhVVNFX1RFUk1MSUIgKi8KKyAgICA7CisgICAgc2l6ZV90IG47CisgICAgY2hhciB0ZW1wWzgwXTsKKyAgICBjaGFyICpyZXN1bHQgPSBfbmNfdHJhY2VfYnVmKGJ1Zm51bSwgQlVGU0laKTsKKworICAgIGlmIChyZXN1bHQgIT0gMCkgeworCXVuc2lnbmVkIHNhdmVfbmNfdHJhY2luZyA9IF9uY190cmFjaW5nOworCisJX25jX3RyYWNpbmcgPSAwOworCisJc3RyY3B5KHJlc3VsdCwgbF9icmFjZSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgU0laRU9GKG5hbWVzKTsgbisrKSB7CisJICAgIGlmICgobmV3bW9kZSAmIG5hbWVzW25dLnZhbCkgIT0gMCkgeworCQlpZiAocmVzdWx0WzFdICE9ICdcMCcpCisJCSAgICByZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgInwiKTsKKwkJcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIG5hbWVzW25dLm5hbWUpOworCisJCWlmIChuYW1lc1tuXS52YWwgPT0gQV9DT0xPUikgeworCQkgICAgc2hvcnQgcGFpcm51bSA9IFBBSVJfTlVNQkVSKG5ld21vZGUpOworI2lmZGVmIFVTRV9URVJNTElCCisJCSAgICAvKiBwYWlyX2NvbnRlbnQgbGl2ZXMgaW4gbGlibmN1cnNlcyAqLworCQkgICAgKHZvaWQpIHNwcmludGYodGVtcCwgInslZH0iLCBwYWlybnVtKTsKKyNlbHNlCisJCSAgICBzaG9ydCBmZywgYmc7CisKKwkJICAgIGlmIChwYWlyX2NvbnRlbnQocGFpcm51bSwgJmZnLCAmYmcpID09IE9LKSB7CisJCQkodm9pZCkgc3ByaW50Zih0ZW1wLAorCQkJCSAgICAgICAieyVkID0geyVzLCAlc319IiwKKwkJCQkgICAgICAgcGFpcm51bSwKKwkJCQkgICAgICAgQ09MT1JfT0YoZmcpLAorCQkJCSAgICAgICBDT0xPUl9PRihiZykpOworCQkgICAgfSBlbHNlIHsKKwkJCSh2b2lkKSBzcHJpbnRmKHRlbXAsICJ7JWR9IiwgcGFpcm51bSk7CisJCSAgICB9CisjZW5kaWYKKwkJICAgIHJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCB0ZW1wKTsKKwkJfQorCSAgICB9CisJfQorCWlmIChDaEF0dHJPZihuZXdtb2RlKSA9PSBBX05PUk1BTCkgeworCSAgICBpZiAocmVzdWx0ICE9IDAgJiYgcmVzdWx0WzFdICE9ICdcMCcpCisJCSh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgInwiKTsKKwkgICAgKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCAiQV9OT1JNQUwiKTsKKwl9CisKKwlfbmNfdHJhY2luZyA9IHNhdmVfbmNfdHJhY2luZzsKKwlyZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgcl9icmFjZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK190cmFjZWF0dHIoYXR0cl90IG5ld21vZGUpCit7CisgICAgcmV0dXJuIF90cmFjZWF0dHIyKDAsIG5ld21vZGUpOworfQorCisvKiBUcmFjZSAnaW50JyByZXR1cm4tdmFsdWVzICovCitOQ1VSU0VTX0VYUE9SVChhdHRyX3QpCitfbmNfcmV0cmFjZV9hdHRyX3QoYXR0cl90IGNvZGUpCit7CisgICAgVCgoVF9SRVRVUk4oIiVzIiksIF90cmFjZWF0dHIoY29kZSkpKTsKKyAgICByZXR1cm4gY29kZTsKK30KKworY29uc3QgY2hhciAqCitfbmNfYWx0Y2hhcnNldF9uYW1lKGF0dHJfdCBhdHRyLCBjaHR5cGUgY2gpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCB2YWw7CisJY29uc3QgY2hhciAqbmFtZTsKKyAgICB9IEFMVF9OQU1FUzsKKyAgICBzdGF0aWMgY29uc3QgQUxUX05BTUVTIG5hbWVzW10gPQorICAgIHsKKwl7J2wnLCAiQUNTX1VMQ09STkVSIn0sCS8qIHVwcGVyIGxlZnQgY29ybmVyICovCisJeydtJywgIkFDU19MTENPUk5FUiJ9LAkvKiBsb3dlciBsZWZ0IGNvcm5lciAqLworCXsnaycsICJBQ1NfVVJDT1JORVIifSwJLyogdXBwZXIgcmlnaHQgY29ybmVyICovCisJeydqJywgIkFDU19MUkNPUk5FUiJ9LAkvKiBsb3dlciByaWdodCBjb3JuZXIgKi8KKwl7J3QnLCAiQUNTX0xURUUifSwJLyogdGVlIHBvaW50aW5nIHJpZ2h0ICovCisJeyd1JywgIkFDU19SVEVFIn0sCS8qIHRlZSBwb2ludGluZyBsZWZ0ICovCisJeyd2JywgIkFDU19CVEVFIn0sCS8qIHRlZSBwb2ludGluZyB1cCAqLworCXsndycsICJBQ1NfVFRFRSJ9LAkvKiB0ZWUgcG9pbnRpbmcgZG93biAqLworCXsncScsICJBQ1NfSExJTkUifSwJLyogaG9yaXpvbnRhbCBsaW5lICovCisJeyd4JywgIkFDU19WTElORSJ9LAkvKiB2ZXJ0aWNhbCBsaW5lICovCisJeyduJywgIkFDU19QTFVTIn0sCS8qIGxhcmdlIHBsdXMgb3IgY3Jvc3NvdmVyICovCisJeydvJywgIkFDU19TMSJ9LAkvKiBzY2FuIGxpbmUgMSAqLworCXsncycsICJBQ1NfUzkifSwJLyogc2NhbiBsaW5lIDkgKi8KKwl7J2AnLCAiQUNTX0RJQU1PTkQifSwJLyogZGlhbW9uZCAqLworCXsnYScsICJBQ1NfQ0tCT0FSRCJ9LAkvKiBjaGVja2VyIGJvYXJkIChzdGlwcGxlKSAqLworCXsnZicsICJBQ1NfREVHUkVFIn0sCS8qIGRlZ3JlZSBzeW1ib2wgKi8KKwl7J2cnLCAiQUNTX1BMTUlOVVMifSwJLyogcGx1cy9taW51cyAqLworCXsnficsICJBQ1NfQlVMTEVUIn0sCS8qIGJ1bGxldCAqLworCXsnLCcsICJBQ1NfTEFSUk9XIn0sCS8qIGFycm93IHBvaW50aW5nIGxlZnQgKi8KKwl7JysnLCAiQUNTX1JBUlJPVyJ9LAkvKiBhcnJvdyBwb2ludGluZyByaWdodCAqLworCXsnLicsICJBQ1NfREFSUk9XIn0sCS8qIGFycm93IHBvaW50aW5nIGRvd24gKi8KKwl7Jy0nLCAiQUNTX1VBUlJPVyJ9LAkvKiBhcnJvdyBwb2ludGluZyB1cCAqLworCXsnaCcsICJBQ1NfQk9BUkQifSwJLyogYm9hcmQgb2Ygc3F1YXJlcyAqLworCXsnaScsICJBQ1NfTEFOVEVSTiJ9LAkvKiBsYW50ZXJuIHN5bWJvbCAqLworCXsnMCcsICJBQ1NfQkxPQ0sifSwJLyogc29saWQgc3F1YXJlIGJsb2NrICovCisJeydwJywgIkFDU19TMyJ9LAkvKiBzY2FuIGxpbmUgMyAqLworCXsncicsICJBQ1NfUzcifSwJLyogc2NhbiBsaW5lIDcgKi8KKwl7J3knLCAiQUNTX0xFUVVBTCJ9LAkvKiBsZXNzL2VxdWFsICovCisJeyd6JywgIkFDU19HRVFVQUwifSwJLyogZ3JlYXRlci9lcXVhbCAqLworCXsneycsICJBQ1NfUEkifSwJLyogUGkgKi8KKwl7J3wnLCAiQUNTX05FUVVBTCJ9LAkvKiBub3QgZXF1YWwgKi8KKwl7J30nLCAiQUNTX1NURVJMSU5HIn0sCS8qIFVLIHBvdW5kIHNpZ24gKi8KKwl7J1wwJywgKGNoYXIgKikgMH0KKyAgICB9OworCisgICAgY29uc3QgY2hhciAqcmVzdWx0ID0gMDsKKworICAgIGlmICgoYXR0ciAmIEFfQUxUQ0hBUlNFVCkgJiYgKGFjc19jaGFycyAhPSAwKSkgeworCWNoYXIgKmNwOworCWNoYXIgKmZvdW5kID0gMDsKKwljb25zdCBBTFRfTkFNRVMgKnNwOworCisJZm9yIChjcCA9IGFjc19jaGFyczsgY3BbMF0gJiYgY3BbMV07IGNwICs9IDIpIHsKKwkgICAgaWYgKENoQ2hhck9mKGNwWzFdKSA9PSBDaENoYXJPZihjaCkpIHsKKwkJZm91bmQgPSBjcDsKKwkJLyogZG9uJ3QgZXhpdCBmcm9tIGxvb3AgLSB0aGVyZSBtYXkgYmUgcmVkZWZpbml0aW9ucyAqLworCSAgICB9CisJfQorCisJaWYgKGZvdW5kICE9IDApIHsKKwkgICAgY2ggPSBDaENoYXJPZigqZm91bmQpOworCSAgICBmb3IgKHNwID0gbmFtZXM7IHNwLT52YWw7IHNwKyspCisJCWlmIChzcC0+dmFsID09IGNoKSB7CisJCSAgICByZXN1bHQgPSBzcC0+bmFtZTsKKwkJICAgIGJyZWFrOworCQl9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2VjaHR5cGUyKGludCBidWZudW0sIGNodHlwZSBjaCkKK3sKKyAgICBjb25zdCBjaGFyICpmb3VuZDsKKyAgICBjaGFyICpyZXN1bHQgPSBfbmNfdHJhY2VfYnVmKGJ1Zm51bSwgQlVGU0laKTsKKworICAgIGlmIChyZXN1bHQgIT0gMCkgeworCXN0cmNweShyZXN1bHQsIGxfYnJhY2UpOworCWlmICgoZm91bmQgPSBfbmNfYWx0Y2hhcnNldF9uYW1lKENoQXR0ck9mKGNoKSwgY2gpKSAhPSAwKSB7CisJICAgICh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgZm91bmQpOworCX0gZWxzZQorCSAgICAodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIF9uY190cmFjZWNoYXIoU1AsIChpbnQpIENoQ2hhck9mKGNoKSkpOworCisJaWYgKENoQXR0ck9mKGNoKSAhPSBBX05PUk1BTCkgeworCSAgICAodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sICIgfCAiKTsKKwkgICAgKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLAorCQkJCSAgICBfdHJhY2VhdHRyMihidWZudW0gKyAyMCwgQ2hBdHRyT2YoY2gpKSk7CisJfQorCisJcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIHJfYnJhY2UpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2VjaHR5cGUoY2h0eXBlIGNoKQoreworICAgIHJldHVybiBfdHJhY2VjaHR5cGUyKDAsIGNoKTsKK30KKworLyogVHJhY2UgJ2NodHlwZScgcmV0dXJuLXZhbHVlcyAqLworTkNVUlNFU19FWFBPUlQoY2h0eXBlKQorX25jX3JldHJhY2VfY2h0eXBlKGNodHlwZSBjb2RlKQoreworICAgIFQoKFRfUkVUVVJOKCIlcyIpLCBfdHJhY2VjaHR5cGUoY29kZSkpKTsKKyAgICByZXR1cm4gY29kZTsKK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2VjY2hhcl90MihpbnQgYnVmbnVtLCBjb25zdCBjY2hhcl90ICpjaCkKK3sKKyAgICBjaGFyICpyZXN1bHQgPSBfbmNfdHJhY2VfYnVmKGJ1Zm51bSwgQlVGU0laKTsKKyAgICBhdHRyX3QgYXR0cjsKKyAgICBjb25zdCBjaGFyICpmb3VuZDsKKworICAgIGlmIChyZXN1bHQgIT0gMCkgeworCXN0cmNweShyZXN1bHQsIGxfYnJhY2UpOworCWlmIChjaCAhPSAwKSB7CisJICAgIGF0dHIgPSBBdHRyT2ZEKGNoKTsKKwkgICAgaWYgKChmb3VuZCA9IF9uY19hbHRjaGFyc2V0X25hbWUoYXR0ciwgKGNodHlwZSkgQ2hhck9mRChjaCkpKSAhPSAwKSB7CisJCSh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgZm91bmQpOworCQlhdHRyICY9IH5BX0FMVENIQVJTRVQ7CisJICAgIH0gZWxzZSBpZiAoaXNXaWRlY0V4dChDSERFUkVGKGNoKSkpIHsKKwkJKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCAie05BQ30iKTsKKwkJYXR0ciAmPSB+QV9DSEFSVEVYVDsKKwkgICAgfSBlbHNlIHsKKwkJUFVUQ19EQVRBOworCQlpbnQgbjsKKworCQlQVVRDX0lOSVQ7CisJCSh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgInsgIik7CisJCWZvciAoUFVUQ19pID0gMDsgUFVUQ19pIDwgQ0NIQVJXX01BWDsgKytQVVRDX2kpIHsKKwkJICAgIFBVVENfY2ggPSBjaC0+Y2hhcnNbUFVUQ19pXTsKKwkJICAgIGlmIChQVVRDX2NoID09IEwnXDAnKQorCQkJYnJlYWs7CisJCSAgICBQVVRDX24gPSB3Y3J0b21iKFBVVENfYnVmLCBjaC0+Y2hhcnNbUFVUQ19pXSwgJlBVVF9zdCk7CisJCSAgICBpZiAoUFVUQ19uIDw9IDApIHsKKwkJCWlmIChQVVRDX2NoICE9IEwnXDAnKSB7CisJCQkgICAgLyogaXQgY291bGQgbm90IGJlIGEgbXVsdGlieXRlIHNlcXVlbmNlICovCisJCQkgICAgKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLAorCQkJCQkJICAgIF9uY190cmFjZWNoYXIoU1AsCisJCQkJCQkJCSAgVUNoYXIoY2gtPmNoYXJzW1BVVENfaV0pKSk7CisJCQl9CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGZvciAobiA9IDA7IG4gPCBQVVRDX247IG4rKykgeworCQkJaWYgKG4pCisJCQkgICAgKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCAiLCAiKTsKKwkJCSh2b2lkKSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwKKwkJCQkJCV9uY190cmFjZWNoYXIoU1AsCisJCQkJCQkJICAgICAgVUNoYXIoUFVUQ19idWZbbl0pKSk7CisJCSAgICB9CisJCX0KKwkJKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCAiIH0iKTsKKwkgICAgfQorCSAgICBpZiAoYXR0ciAhPSBBX05PUk1BTCkgeworCQkodm9pZCkgX25jX3RyYWNlX2J1ZmNhdChidWZudW0sICIgfCAiKTsKKwkJKHZvaWQpIF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCBfdHJhY2VhdHRyMihidWZudW0gKyAyMCwgYXR0cikpOworCSAgICB9CisJfQorCisJcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIHJfYnJhY2UpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2VjY2hhcl90KGNvbnN0IGNjaGFyX3QgKmNoKQoreworICAgIHJldHVybiBfdHJhY2VjY2hhcl90MigwLCBjaCk7Cit9CisjZW5kaWYKKworI2Vsc2UKK0VNUFRZX01PRFVMRShfbmNfbGliX3RyYWNlYXRyKQorI2VuZGlmIC8qIFRSQUNFICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWJpdHMuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlYml0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDQxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWJpdHMuYwpAQCAtMCwwICsxLDI2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBjdXJfdGVybSAqLworCitNT0RVTEVfSUQoIiRJZDogbGliX3RyYWNlYml0cy5jLHYgMS4xNyAyMDA4LzA4LzAzIDE2OjA5OjI2IHRvbSBFeHAgJCIpCisKKyNpZiBTVlI0X1RFUk1JTyAmJiAhZGVmaW5lZChfUE9TSVhfU09VUkNFKQorI2RlZmluZSBfUE9TSVhfU09VUkNFCisjZW5kaWYKKworI2lmIEhBVkVfU1lTX1RFUk1JT19ICisjaW5jbHVkZSA8c3lzL3Rlcm1pby5oPgkJLyogbmVlZGVkIGZvciBJU0MgKi8KKyNlbmRpZgorCisjaWZkZWYgX19FTVhfXworI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworLyogbWF5IGJlIHVuZGVmaW5lZCBpZiB3ZSdyZSB1c2luZyB0ZXJtaW8uaCAqLworI2lmbmRlZiBUT1NUT1AKKyNkZWZpbmUgVE9TVE9QIDAKKyNlbmRpZgorCisjaWZuZGVmIElFWFRFTgorI2RlZmluZSBJRVhURU4gMAorI2VuZGlmCisKKyNpZm5kZWYgT05MQ1IKKyNkZWZpbmUgT05MQ1IgMAorI2VuZGlmCisKKyNpZm5kZWYgT0NSTkwKKyNkZWZpbmUgT0NSTkwgMAorI2VuZGlmCisKKyNpZm5kZWYgT05PQ1IKKyNkZWZpbmUgT05PQ1IgMAorI2VuZGlmCisKKyNpZm5kZWYgT05MUkVUCisjZGVmaW5lIE9OTFJFVCAwCisjZW5kaWYKKworI2lmZGVmIFRSQUNFCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgdmFsOworICAgIGNvbnN0IGNoYXIgKm5hbWU7Cit9IEJJVE5BTUVTOworCitzdGF0aWMgdm9pZAorbG9va3VwX2JpdHMoY2hhciAqYnVmLCBjb25zdCBCSVROQU1FUyAqIHRhYmxlLCBjb25zdCBjaGFyICpsYWJlbCwgdW5zaWduZWQgaW50IHZhbCkKK3sKKyAgICBjb25zdCBCSVROQU1FUyAqc3A7CisKKyAgICAodm9pZCkgc3RyY2F0KGJ1ZiwgbGFiZWwpOworICAgICh2b2lkKSBzdHJjYXQoYnVmLCAiOiB7Iik7CisgICAgZm9yIChzcCA9IHRhYmxlOyBzcC0+bmFtZTsgc3ArKykKKwlpZiAoc3AtPnZhbCAhPSAwCisJICAgICYmICh2YWwgJiBzcC0+dmFsKSA9PSBzcC0+dmFsKSB7CisJICAgICh2b2lkKSBzdHJjYXQoYnVmLCBzcC0+bmFtZSk7CisJICAgICh2b2lkKSBzdHJjYXQoYnVmLCAiLCAiKTsKKwl9CisgICAgaWYgKGJ1ZltzdHJsZW4oYnVmKSAtIDJdID09ICcsJykKKwlidWZbc3RybGVuKGJ1ZikgLSAyXSA9ICdcMCc7CisgICAgKHZvaWQpIHN0cmNhdChidWYsICJ9ICIpOworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfdHJhY2VfdHR5bW9kZShUVFkgKiB0dHkpCisvKiBkZXNjcmliZSB0aGUgc3RhdGUgb2YgdGhlIHRlcm1pbmFsIGNvbnRyb2wgYml0cyBleGFjdGx5ICovCit7CisgICAgY2hhciAqYnVmOworCisjaWZkZWYgVEVSTUlPUworICAgIHN0YXRpYyBjb25zdCBCSVROQU1FUyBpZmxhZ3NbXSA9CisgICAgeworCXtCUktJTlQsICJCUktJTlQifSwKKwl7SUdOQlJLLCAiSUdOQlJLIn0sCisJe0lHTlBBUiwgIklHTlBBUiJ9LAorCXtQQVJNUkssICJQQVJNUksifSwKKwl7SU5QQ0ssICJJTlBDSyJ9LAorCXtJU1RSSVAsICJJU1RSSVAifSwKKwl7SU5MQ1IsICJJTkxDUiJ9LAorCXtJR05DUiwgIklHTkMifSwKKwl7SUNSTkwsICJJQ1JOTCJ9LAorCXtJWE9OLCAiSVhPTiJ9LAorCXtJWE9GRiwgIklYT0ZGIn0sCisJezAsIE5VTEx9CisjZGVmaW5lIEFMTElOCShCUktJTlR8SUdOQlJLfElHTlBBUnxQQVJNUkt8SU5QQ0t8SVNUUklQfElOTENSfElHTkNSfElDUk5MfElYT058SVhPRkYpCisgICAgfSwgb2ZsYWdzW10gPQorICAgIHsKKwl7T1BPU1QsICJPUE9TVCJ9LAorCXtPRkxBR1NfVEFCUywgIlhUQUJTIn0sCisJe09OTENSLCAiT05MQ1IifSwKKwl7T0NSTkwsICJPQ1JOTCJ9LAorCXtPTk9DUiwgIk9OT0NSIn0sCisJe09OTFJFVCwgIk9OTFJFVCJ9LAorCXswLCBOVUxMfQorI2RlZmluZSBBTExPVVQJKE9QT1NUfE9GTEFHU19UQUJTfE9OTENSfE9DUk5MfE9OT0NSfE9OTFJFVCkKKyAgICB9LCBjZmxhZ3NbXSA9CisgICAgeworCXtDTE9DQUwsICJDTE9DQUwifSwKKwl7Q1JFQUQsICJDUkVBRCJ9LAorCXtDU1RPUEIsICJDU1RPUEIifSwKKyNpZiAhZGVmaW5lZChDUzUpIHx8ICFkZWZpbmVkKENTOCkKKwl7Q1NJWkUsICJDU0laRSJ9LAorI2VuZGlmCisJe0hVUENMLCAiSFVQQ0wifSwKKwl7UEFSRU5CLCAiUEFSRU5CIn0sCisJe1BBUk9ERCB8IFBBUkVOQiwgIlBBUk9ERCJ9LAkvKiBjb25jZXNzaW9uIHRvIHJlYWRhYmlsaXR5ICovCisJezAsIE5VTEx9CisjZGVmaW5lIEFMTENUUkwJKENMT0NBTHxDUkVBRHxDU0laRXxDU1RPUEJ8SFVQQ0x8UEFSRU5CfFBBUk9ERCkKKyAgICB9LCBsZmxhZ3NbXSA9CisgICAgeworCXtFQ0hPLCAiRUNITyJ9LAorCXtFQ0hPRSB8IEVDSE8sICJFQ0hPRSJ9LAkvKiBjb25jZXNzaW9uIHRvIHJlYWRhYmlsaXR5ICovCisJe0VDSE9LIHwgRUNITywgIkVDSE9LIn0sCS8qIGNvbmNlc3Npb24gdG8gcmVhZGFiaWxpdHkgKi8KKwl7RUNIT05MLCAiRUNIT05MIn0sCisJe0lDQU5PTiwgIklDQU5PTiJ9LAorCXtJU0lHLCAiSVNJRyJ9LAorCXtOT0ZMU0gsICJOT0ZMU0gifSwKKwl7VE9TVE9QLCAiVE9TVE9QIn0sCisJe0lFWFRFTiwgIklFWFRFTiJ9LAorCXswLCBOVUxMfQorI2RlZmluZSBBTExMT0NBTAkoRUNIT3xFQ0hPTkx8SUNBTk9OfElTSUd8Tk9GTFNIfFRPU1RPUHxJRVhURU4pCisgICAgfTsKKworICAgIGJ1ZiA9IF9uY190cmFjZV9idWYoMCwKKwkJCTggKyBzaXplb2YoaWZsYWdzKSArCisJCQk4ICsgc2l6ZW9mKG9mbGFncykgKworCQkJOCArIHNpemVvZihjZmxhZ3MpICsKKwkJCTggKyBzaXplb2YobGZsYWdzKSArCisJCQk4KTsKKyAgICBpZiAoYnVmICE9IDApIHsKKworCWlmICh0dHktPmNfaWZsYWcgJiBBTExJTikKKwkgICAgbG9va3VwX2JpdHMoYnVmLCBpZmxhZ3MsICJpZmxhZ3MiLCB0dHktPmNfaWZsYWcpOworCisJaWYgKHR0eS0+Y19vZmxhZyAmIEFMTE9VVCkKKwkgICAgbG9va3VwX2JpdHMoYnVmLCBvZmxhZ3MsICJvZmxhZ3MiLCB0dHktPmNfb2ZsYWcpOworCisJaWYgKHR0eS0+Y19jZmxhZyAmIEFMTENUUkwpCisJICAgIGxvb2t1cF9iaXRzKGJ1ZiwgY2ZsYWdzLCAiY2ZsYWdzIiwgdHR5LT5jX2NmbGFnKTsKKworI2lmIGRlZmluZWQoQ1M1KSAmJiBkZWZpbmVkKENTOCkKKwl7CisJICAgIHN0YXRpYyBzdHJ1Y3QgeworCQlpbnQgdmFsdWU7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJICAgIH0gY3NpemVzW10gPSB7CisjZGVmaW5lIENTX0RBVEEobmFtZSkgeyBuYW1lLCAjbmFtZSAiICIgfQorCQlDU19EQVRBKENTNSksCisjaWZkZWYgQ1M2CisJCSAgICBDU19EQVRBKENTNiksCisjZW5kaWYKKyNpZmRlZiBDUzcKKwkJICAgIENTX0RBVEEoQ1M3KSwKKyNlbmRpZgorCQkgICAgQ1NfREFUQShDUzgpLAorCSAgICB9OworCSAgICBjb25zdCBjaGFyICpyZXN1bHQgPSAiQ1NJWkU/ICI7CisJICAgIGludCB2YWx1ZSA9ICh0dHktPmNfY2ZsYWcgJiBDU0laRSk7CisJICAgIHVuc2lnbmVkIG47CisKKwkgICAgaWYgKHZhbHVlICE9IDApIHsKKwkJZm9yIChuID0gMDsgbiA8IFNJWkVPRihjc2l6ZXMpOyBuKyspIHsKKwkJICAgIGlmIChjc2l6ZXNbbl0udmFsdWUgPT0gdmFsdWUpIHsKKwkJCXJlc3VsdCA9IGNzaXplc1tuXS5uYW1lOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBzdHJjYXQoYnVmLCByZXN1bHQpOworCX0KKyNlbmRpZgorCisJaWYgKHR0eS0+Y19sZmxhZyAmIEFMTExPQ0FMKQorCSAgICBsb29rdXBfYml0cyhidWYsIGxmbGFncywgImxmbGFncyIsIHR0eS0+Y19sZmxhZyk7CisgICAgfQorI2Vsc2UKKyAgICAvKiByZWZlcmVuY2U6IHR0Y29tcGF0KDRNKSBvbiBTdW5PUyA0LjEgKi8KKyNpZm5kZWYgRVZFTlAKKyNkZWZpbmUgRVZFTlAgMAorI2VuZGlmCisjaWZuZGVmIExDQVNFCisjZGVmaW5lIExDQVNFIDAKKyNlbmRpZgorI2lmbmRlZiBMTElUT1VUCisjZGVmaW5lIExMSVRPVVQgMAorI2VuZGlmCisjaWZuZGVmIE9ERFAKKyNkZWZpbmUgT0REUCAwCisjZW5kaWYKKyNpZm5kZWYgVEFOREVNCisjZGVmaW5lIFRBTkRFTSAwCisjZW5kaWYKKworICAgIHN0YXRpYyBjb25zdCBCSVROQU1FUyBjZmxhZ3NbXSA9CisgICAgeworCXtDQlJFQUssICJDQlJFQUsifSwKKwl7Q1JNT0QsICJDUk1PRCJ9LAorCXtFQ0hPLCAiRUNITyJ9LAorCXtFVkVOUCwgIkVWRU5QIn0sCisJe0xDQVNFLCAiTENBU0UifSwKKwl7TExJVE9VVCwgIkxMSVRPVVQifSwKKwl7T0REUCwgIk9ERFAifSwKKwl7UkFXLCAiUkFXIn0sCisJe1RBTkRFTSwgIlRBTkRFTSJ9LAorCXtYVEFCUywgIlhUQUJTIn0sCisJezAsIE5VTEx9CisjZGVmaW5lIEFMTENUUkwJKENCUkVBS3xDUk1PRHxFQ0hPfEVWRU5QfExDQVNFfExMSVRPVVR8T0REUHxSQVd8VEFOREVNfFhUQUJTKQorICAgIH07CisKKyAgICBidWYgPSBfbmNfdHJhY2VfYnVmKDAsCisJCQk4ICsgc2l6ZW9mKGNmbGFncykpOworICAgIGlmIChidWYgIT0gMCkgeworCWlmICh0dHktPnNnX2ZsYWdzICYgQUxMQ1RSTCkgeworCSAgICBsb29rdXBfYml0cyhidWYsIGNmbGFncywgImNmbGFncyIsIHR0eS0+c2dfZmxhZ3MpOworCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gKGJ1Zik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY190cmFjZWJpdHModm9pZCkKK3sKKyAgICByZXR1cm4gX25jX3RyYWNlX3R0eW1vZGUoJihjdXJfdGVybS0+TnR0eWIpKTsKK30KKyNlbHNlCitFTVBUWV9NT0RVTEUoX25jX3RyYWNlYml0cykKKyNlbmRpZiAvKiBUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS9saWJfdHJhY2VjaHIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlY2hyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljZjAzYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlY2hyLmMKQEAgLTAsMCArMSw4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3RyYWNlY2hyLmMgLSBUcmFjaW5nL0RlYnVnZ2luZyByb3V0aW5lcworICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHJhY2VjaHIuYyx2IDEuMTkgMjAwOC8wOC8wMyAxNTozOToyOSB0b20gRXhwICQiKQorCisjaWZkZWYgVFJBQ0UKKworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX3RyYWNlY2hhcihTQ1JFRU4gKnNwLCBpbnQgY2gpCit7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpuYW1lOworICAgIGNoYXIgKk15QnVmZmVyID0gKChzcCAhPSAwKQorCQkgICAgICA/IHNwLT50cmFjZWNocl9idWYKKwkJICAgICAgOiBfbmNfZ2xvYmFscy50cmFjZWNocl9idWYpOworCisgICAgaWYgKGNoID4gS0VZX01JTiB8fCBjaCA8IDApIHsKKwluYW1lID0gX25jX2tleW5hbWUoc3AsIGNoKTsKKwlpZiAobmFtZSA9PSAwIHx8ICpuYW1lID09ICdcMCcpCisJICAgIG5hbWUgPSAiTlVMTCI7CisJKHZvaWQpIHNwcmludGYoTXlCdWZmZXIsICInJS4zMHMnID0gJSMwM28iLCBuYW1lLCBjaCk7CisgICAgfSBlbHNlIGlmICghaXM4Yml0cyhjaCkgfHwgIWlzcHJpbnQoVUNoYXIoY2gpKSkgeworCS8qCisJICogd29ya2Fyb3VuZCBmb3IgZ2xpYmMgYnVnOgorCSAqIHNwcmludGYgY2hhbmdlcyB0aGUgcmVzdWx0IGZyb20gdW5jdHJsKCkgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIGl0CisJICogZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZS4KKwkgKi8KKwkodm9pZCkgc3ByaW50ZihNeUJ1ZmZlciwgIiUjMDNvIiwgY2gpOworICAgIH0gZWxzZSB7CisJbmFtZSA9IF9uY191bmN0cmwoc3AsIChjaHR5cGUpIGNoKTsKKwlpZiAobmFtZSA9PSAwIHx8ICpuYW1lID09IDApCisJICAgIG5hbWUgPSAibnVsbCI7CS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkodm9pZCkgc3ByaW50ZihNeUJ1ZmZlciwgIiclLjMwcycgPSAlIzAzbyIsIG5hbWUsIGNoKTsKKyAgICB9CisgICAgcmV0dXJuIChNeUJ1ZmZlcik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK190cmFjZWNoYXIoaW50IGNoKQoreworICAgIHJldHVybiBfbmNfdHJhY2VjaGFyKFNQLCBjaCk7Cit9CisjZWxzZQorRU1QVFlfTU9EVUxFKF9uY19saWJfdHJhY2VjaHIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlZG1wLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWRtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NzMyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL2xpYl90cmFjZWRtcC5jCkBAIC0wLDAgKzEsMTg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglsaWJfdHJhY2VkbXAuYyAtIFRyYWNpbmcvRGVidWdnaW5nIHJvdXRpbmVzCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90cmFjZWRtcC5jLHYgMS4zMSAyMDA4LzA4LzE2IDE5OjMwOjU2IHRvbSBFeHAgJCIpCisKKyNpZmRlZiBUUkFDRQorCisjZGVmaW5lIG15X2J1ZmZlciBfbmNfZ2xvYmFscy50cmFjZWRtcF9idWYKKyNkZWZpbmUgbXlfbGVuZ3RoIF9uY19nbG9iYWxzLnRyYWNlZG1wX3VzZWQKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK190cmFjZWR1bXAoY29uc3QgY2hhciAqbmFtZSwgV0lORE9XICp3aW4pCit7CisgICAgaW50IGksIGosIG4sIHdpZHRoOworCisgICAgLyogY29tcHV0ZSBuYXJyb3dlc3QgcG9zc2libGUgZGlzcGxheSB3aWR0aCAqLworICAgIGZvciAod2lkdGggPSBpID0gMDsgaSA8PSB3aW4tPl9tYXh5OyArK2kpIHsKKwluID0gMDsKKwlmb3IgKGogPSAwOyBqIDw9IHdpbi0+X21heHg7ICsraikgeworCSAgICBpZiAoQ2hhck9mKHdpbi0+X2xpbmVbaV0udGV4dFtqXSkgIT0gTCgnICcpCisJCXx8IEF0dHJPZih3aW4tPl9saW5lW2ldLnRleHRbal0pICE9IEFfTk9STUFMCisJCXx8IEdldFBhaXIod2luLT5fbGluZVtpXS50ZXh0W2pdKSAhPSAwKSB7CisJCW4gPSBqOworCSAgICB9CisJfQorCisJaWYgKG4gPiB3aWR0aCkKKwkgICAgd2lkdGggPSBuOworICAgIH0KKyAgICBpZiAod2lkdGggPCB3aW4tPl9tYXh4KQorCSsrd2lkdGg7CisgICAgaWYgKCsrd2lkdGggKyAxID4gKGludCkgbXlfbGVuZ3RoKSB7CisJbXlfbGVuZ3RoID0gMiAqICh3aWR0aCArIDEpOworCW15X2J1ZmZlciA9IHR5cGVSZWFsbG9jKGNoYXIsIG15X2xlbmd0aCwgbXlfYnVmZmVyKTsKKyAgICB9CisKKyAgICBmb3IgKG4gPSAwOyBuIDw9IHdpbi0+X21heHk7ICsrbikgeworCWNoYXIgKmVwID0gbXlfYnVmZmVyOworCWJvb2wgaGF2ZWF0dHJzLCBoYXZlY29sb3JzOworCisJLyoKKwkgKiBEdW1wIEFfQ0hBUlRFWFQgcGFydC4gIEl0IGlzIG1vcmUgaW1wb3J0YW50IHRvIG1ha2UgdGhlIGdyaWQgbGluZSB1cAorCSAqIGluIHRoZSB0cmFjZSBmaWxlIHRoYW4gdG8gcmVwcmVzZW50IGNvbnRyb2wtIGFuZCB3aWRlLWNoYXJhY3RlcnMsIHNvCisJICogd2UgbWFwIHRob3NlIHRvICcuJyBhbmQgJz8nIHJlc3BlY3RpdmVseS4KKwkgKi8KKwlmb3IgKGogPSAwOyBqIDwgd2lkdGg7ICsraikgeworCSAgICBjaHR5cGUgdGVzdCA9IENoYXJPZih3aW4tPl9saW5lW25dLnRleHRbal0pOworCSAgICBlcFtqXSA9IChjaGFyKSAoKFVDaGFyKHRlc3QpID09IHRlc3QKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCQkJICAgICAmJiAod2luLT5fbGluZVtuXS50ZXh0W2pdLmNoYXJzWzFdID09IDApCisjZW5kaWYKKwkJCSAgICApCisJCQkgICAgPyAoaXNjbnRybChVQ2hhcih0ZXN0KSkKKwkJCSAgICAgICA/ICcuJworCQkJICAgICAgIDogVUNoYXIodGVzdCkpCisJCQkgICAgOiAnPycpOworCX0KKwllcFtqXSA9ICdcMCc7CisJX3RyYWNlZigiJXNbJTJkXSAlM2xkJTNsZCA9JyVzJyIsCisJCW5hbWUsIG4sCisJCShsb25nKSB3aW4tPl9saW5lW25dLmZpcnN0Y2hhciwKKwkJKGxvbmcpIHdpbi0+X2xpbmVbbl0ubGFzdGNoYXIsCisJCWVwKTsKKworCS8qIGlmIHRoZXJlIGFyZSBtdWx0aS1jb2x1bW4gY2hhcmFjdGVycyBvbiB0aGUgbGluZSwgcHJpbnQgdGhlbSBub3cgKi8KKwlpZl9XSURFQyh7CisJICAgIGJvb2wgbXVsdGljb2x1bW4gPSBGQUxTRTsKKwkgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyArK2opCisJCWlmIChXaWRlY0V4dCh3aW4tPl9saW5lW25dLnRleHRbal0pICE9IDApIHsKKwkJICAgIG11bHRpY29sdW1uID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIGlmIChtdWx0aWNvbHVtbikgeworCQllcCA9IG15X2J1ZmZlcjsKKwkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyArK2opIHsKKwkJICAgIGludCB0ZXN0ID0gV2lkZWNFeHQod2luLT5fbGluZVtuXS50ZXh0W2pdKTsKKwkJICAgIGlmICh0ZXN0KSB7CisJCQllcFtqXSA9IChjaGFyKSAodGVzdCArICcwJyk7CisJCSAgICB9IGVsc2UgeworCQkJZXBbal0gPSAnICc7CisJCSAgICB9CisJCX0KKwkJZXBbal0gPSAnXDAnOworCQlfdHJhY2VmKCIlKnNbJTJkXSUqcz0nJXMnIiwgKGludCkgc3RybGVuKG5hbWUpLAorCQkJIndpZGVjIiwgbiwgOCwgIiAiLCBteV9idWZmZXIpOworCSAgICB9CisJfSk7CisKKwkvKiBkdW1wIEFfQ09MT1IgcGFydCwgd2lsbCBzY3JldyB1cCBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDk2ICovCisJaGF2ZWNvbG9ycyA9IEZBTFNFOworCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgKytqKQorCSAgICBpZiAoR2V0UGFpcih3aW4tPl9saW5lW25dLnRleHRbal0pICE9IDApIHsKKwkJaGF2ZWNvbG9ycyA9IFRSVUU7CisJCWJyZWFrOworCSAgICB9CisJaWYgKGhhdmVjb2xvcnMpIHsKKwkgICAgZXAgPSBteV9idWZmZXI7CisJICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgKytqKSB7CisJCWludCBwYWlyID0gR2V0UGFpcih3aW4tPl9saW5lW25dLnRleHRbal0pOworCQlpZiAocGFpciA+PSA1MikKKwkJICAgIGVwW2pdID0gJz8nOworCQllbHNlIGlmIChwYWlyID49IDM2KQorCQkgICAgZXBbal0gPSAoY2hhcikgKHBhaXIgKyAnQScpOworCQllbHNlIGlmIChwYWlyID49IDEwKQorCQkgICAgZXBbal0gPSAoY2hhcikgKHBhaXIgKyAnYScpOworCQllbHNlIGlmIChwYWlyID49IDEpCisJCSAgICBlcFtqXSA9IChjaGFyKSAocGFpciArICcwJyk7CisJCWVsc2UKKwkJICAgIGVwW2pdID0gJyAnOworCSAgICB9CisJICAgIGVwW2pdID0gJ1wwJzsKKwkgICAgX3RyYWNlZigiJSpzWyUyZF0lKnM9JyVzJyIsIChpbnQpIHN0cmxlbihuYW1lKSwKKwkJICAgICJjb2xvcnMiLCBuLCA4LCAiICIsIG15X2J1ZmZlcik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCSAgICBjb25zdCBjaGFyICpoZXggPSAiIDEyMzQ1Njc4OUFCQ0RFRiI7CisJICAgIGF0dHJfdCBtYXNrID0gKDB4ZiA8PCAoKGkgKyA0KSAqIDQpKTsKKworCSAgICBoYXZlYXR0cnMgPSBGQUxTRTsKKwkgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyArK2opCisJCWlmIChBdHRyT2Yod2luLT5fbGluZVtuXS50ZXh0W2pdKSAmIG1hc2spIHsKKwkJICAgIGhhdmVhdHRycyA9IFRSVUU7CisJCSAgICBicmVhazsKKwkJfQorCSAgICBpZiAoaGF2ZWF0dHJzKSB7CisJCWVwID0gbXlfYnVmZmVyOworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7ICsraikKKwkJICAgIGVwW2pdID0gaGV4WyhBdHRyT2Yod2luLT5fbGluZVtuXS50ZXh0W2pdKSAmIG1hc2spID4+CisJCQkJKChpICsgNCkgKiA0KV07CisJCWVwW2pdID0gJ1wwJzsKKwkJX3RyYWNlZigiJSpzJWRbJTJkXSUqcz0nJXMnIiwgKGludCkgc3RybGVuKG5hbWUpIC0KKwkJCTEsICJhdHRycyIsIGksIG4sIDgsICIgIiwgbXlfYnVmZmVyKTsKKwkgICAgfQorCX0KKyAgICB9CisjaWYgTk9fTEVBS1MKKyAgICBmcmVlKG15X2J1ZmZlcik7CisgICAgbXlfYnVmZmVyID0gMDsKKyAgICBteV9sZW5ndGggPSAwOworI2VuZGlmCit9CisKKyNlbHNlCitFTVBUWV9NT0RVTEUoX25jX2xpYl90cmFjZWRtcCkKKyNlbmRpZiAvKiBUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS9saWJfdHJhY2Vtc2UuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlbXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjYzE3NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvbGliX3RyYWNlbXNlLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWxpYl90cmFjZW1zZS5jIC0gVHJhY2luZy9EZWJ1Z2dpbmcgcm91dGluZXMgKG1vdXNlIGV2ZW50cykKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl90cmFjZW1zZS5jLHYgMS4xNSAyMDA4LzA4LzAzIDE1OjM5OjI5IHRvbSBFeHAgJCIpCisKKyNpZmRlZiBUUkFDRQorCisjZGVmaW5lIG15X2J1ZmZlciBzcC0+dHJhY2Vtc2VfYnVmCisKK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY190cmFjZW1vdXNlKFNDUkVFTiAqc3AsIE1FVkVOVCBjb25zdCAqZXApCit7CisgICAgKHZvaWQpIHNwcmludGYobXlfYnVmZmVyLCBUUkFDRU1TRV9GTVQsCisJCSAgIGVwLT5pZCwKKwkJICAgZXAtPngsCisJCSAgIGVwLT55LAorCQkgICBlcC0+eiwKKwkJICAgKHVuc2lnbmVkIGxvbmcpIGVwLT5ic3RhdGUpOworCisjZGVmaW5lIFNIT1cobSwgcykgaWYgKChlcC0+YnN0YXRlICYgbSkgPT0gbSkgc3RyY2F0KHN0cmNhdChteV9idWZmZXIsIHMpLCAiLCAiKQorCisgICAgU0hPVyhCVVRUT04xX1JFTEVBU0VELCAicmVsZWFzZS0xIik7CisgICAgU0hPVyhCVVRUT04xX1BSRVNTRUQsICJwcmVzcy0xIik7CisgICAgU0hPVyhCVVRUT04xX0NMSUNLRUQsICJjbGljay0xIik7CisgICAgU0hPVyhCVVRUT04xX0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stMSIpOworICAgIFNIT1coQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTEiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9OMV9SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTEiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT04yX1JFTEVBU0VELCAicmVsZWFzZS0yIik7CisgICAgU0hPVyhCVVRUT04yX1BSRVNTRUQsICJwcmVzcy0yIik7CisgICAgU0hPVyhCVVRUT04yX0NMSUNLRUQsICJjbGljay0yIik7CisgICAgU0hPVyhCVVRUT04yX0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stMiIpOworICAgIFNIT1coQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTIiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9OMl9SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTIiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT04zX1JFTEVBU0VELCAicmVsZWFzZS0zIik7CisgICAgU0hPVyhCVVRUT04zX1BSRVNTRUQsICJwcmVzcy0zIik7CisgICAgU0hPVyhCVVRUT04zX0NMSUNLRUQsICJjbGljay0zIik7CisgICAgU0hPVyhCVVRUT04zX0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stMyIpOworICAgIFNIT1coQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTMiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9OM19SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTMiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT040X1JFTEVBU0VELCAicmVsZWFzZS00Iik7CisgICAgU0hPVyhCVVRUT040X1BSRVNTRUQsICJwcmVzcy00Iik7CisgICAgU0hPVyhCVVRUT040X0NMSUNLRUQsICJjbGljay00Iik7CisgICAgU0hPVyhCVVRUT040X0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stNCIpOworICAgIFNIT1coQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTQiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9ONF9SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTQiKTsKKyNlbmRpZgorCisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDIKKyAgICBTSE9XKEJVVFRPTjVfUkVMRUFTRUQsICJyZWxlYXNlLTUiKTsKKyAgICBTSE9XKEJVVFRPTjVfUFJFU1NFRCwgInByZXNzLTUiKTsKKyAgICBTSE9XKEJVVFRPTjVfQ0xJQ0tFRCwgImNsaWNrLTUiKTsKKyAgICBTSE9XKEJVVFRPTjVfRE9VQkxFX0NMSUNLRUQsICJkb3VibGVjbGljay01Iik7CisgICAgU0hPVyhCVVRUT041X1RSSVBMRV9DTElDS0VELCAidHJpcGxlY2xpY2stNSIpOworI2VuZGlmCisKKyAgICBTSE9XKEJVVFRPTl9DVFJMLCAiY3RybCIpOworICAgIFNIT1coQlVUVE9OX1NISUZULCAic2hpZnQiKTsKKyAgICBTSE9XKEJVVFRPTl9BTFQsICJhbHQiKTsKKyAgICBTSE9XKEFMTF9NT1VTRV9FVkVOVFMsICJhbGwtZXZlbnRzIik7CisgICAgU0hPVyhSRVBPUlRfTU9VU0VfUE9TSVRJT04sICJwb3NpdGlvbiIpOworCisjdW5kZWYgU0hPVworCisgICAgaWYgKG15X2J1ZmZlcltzdHJsZW4obXlfYnVmZmVyKSAtIDFdID09ICcgJykKKwlteV9idWZmZXJbc3RybGVuKG15X2J1ZmZlcikgLSAyXSA9ICdcMCc7CisgICAgKHZvaWQpIHN0cmNhdChteV9idWZmZXIsICJ9Iik7CisgICAgcmV0dXJuIChteV9idWZmZXIpOworfQorCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfdHJhY2Vtb3VzZShNRVZFTlQgY29uc3QgKmVwKQoreworICAgIHJldHVybiBfbmNfdHJhY2Vtb3VzZShTUCwgZXApOworfQorCisjZWxzZSAvKiAhVFJBQ0UgKi8KK0VNUFRZX01PRFVMRShfbmNfbGliX3RyYWNlbW91c2UpCisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdHJhY2UvdHJhY2VfYnVmLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL3RyYWNlX2J1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDVhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL3RyYWNlX2J1Zi5jCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgMTk5Ny1vbiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCXRyYWNlX2J1Zi5jIC0gVHJhY2luZy9EZWJ1Z2dpbmcgYnVmZmVycyAoYXR0cmlidXRlcykKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHRyYWNlX2J1Zi5jLHYgMS4xNCAyMDA4LzA4LzAzIDE1OjEzOjU2IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgTXlMaXN0IF9uY19nbG9iYWxzLnRyYWNlYnVmX3B0cgorI2RlZmluZSBNeVNpemUgX25jX2dsb2JhbHMudHJhY2VidWZfdXNlZAorCitzdGF0aWMgY2hhciAqCitfbmNfdHJhY2VfYWxsb2MoaW50IGJ1Zm51bSwgc2l6ZV90IHdhbnQpCit7CisgICAgY2hhciAqcmVzdWx0ID0gMDsKKworICAgIGlmIChidWZudW0gPj0gMCkgeworCWlmICgoc2l6ZV90KSAoYnVmbnVtICsgMSkgPiBNeVNpemUpIHsKKwkgICAgc2l6ZV90IG5lZWQgPSAoYnVmbnVtICsgMSkgKiAyOworCSAgICBpZiAoKE15TGlzdCA9IHR5cGVSZWFsbG9jKFRSQUNFQlVGLCBuZWVkLCBNeUxpc3QpKSAhPSAwKSB7CisJCXdoaWxlIChuZWVkID4gTXlTaXplKQorCQkgICAgTXlMaXN0W015U2l6ZSsrXS50ZXh0ID0gMDsKKwkgICAgfQorCX0KKworCWlmIChNeUxpc3QgIT0gMCkgeworCSAgICBpZiAoTXlMaXN0W2J1Zm51bV0udGV4dCA9PSAwCisJCXx8IHdhbnQgPiBNeUxpc3RbYnVmbnVtXS5zaXplKSB7CisJCU15TGlzdFtidWZudW1dLnRleHQgPSB0eXBlUmVhbGxvYyhjaGFyLCB3YW50LCBNeUxpc3RbYnVmbnVtXS50ZXh0KTsKKwkJaWYgKE15TGlzdFtidWZudW1dLnRleHQgIT0gMCkKKwkJICAgIE15TGlzdFtidWZudW1dLnNpemUgPSB3YW50OworCSAgICB9CisJICAgIHJlc3VsdCA9IE15TGlzdFtidWZudW1dLnRleHQ7CisJfQorICAgIH0KKyNpZiBOT19MRUFLUworICAgIGVsc2UgeworCWlmIChNeVNpemUpIHsKKwkgICAgaWYgKE15TGlzdCkgeworCQl3aGlsZSAoTXlTaXplLS0pIHsKKwkJICAgIGlmIChNeUxpc3RbTXlTaXplXS50ZXh0ICE9IDApIHsKKwkJCWZyZWUoTXlMaXN0W015U2l6ZV0udGV4dCk7CisJCSAgICB9CisJCX0KKwkJZnJlZShNeUxpc3QpOworCQlNeUxpc3QgPSAwOworCSAgICB9CisJICAgIE15U2l6ZSA9IDA7CisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiAocmUpQWxsb2NhdGUgYSBidWZmZXIgYmlnIGVub3VnaCBmb3IgdGhlIGNhbGxlcidzIHdhbnRzLgorICovCitOQ1VSU0VTX0VYUE9SVChjaGFyICopCitfbmNfdHJhY2VfYnVmKGludCBidWZudW0sIHNpemVfdCB3YW50KQoreworICAgIGNoYXIgKnJlc3VsdCA9IF9uY190cmFjZV9hbGxvYyhidWZudW0sIHdhbnQpOworICAgIGlmIChyZXN1bHQgIT0gMCkKKwkqcmVzdWx0ID0gJ1wwJzsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQXBwZW5kIGEgbmV3IHN0cmluZyB0byBhbiBleGlzdGluZyBidWZmZXIuCisgKi8KK05DVVJTRVNfRVhQT1JUKGNoYXIgKikKK19uY190cmFjZV9idWZjYXQoaW50IGJ1Zm51bSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgICAgY2hhciAqYnVmZmVyID0gX25jX3RyYWNlX2FsbG9jKGJ1Zm51bSwgMCk7CisgICAgaWYgKGJ1ZmZlciAhPSAwKSB7CisJc2l6ZV90IGhhdmUgPSBzdHJsZW4oYnVmZmVyKTsKKworCWJ1ZmZlciA9IF9uY190cmFjZV9hbGxvYyhidWZudW0sIDEgKyBoYXZlICsgc3RybGVuKHZhbHVlKSk7CisJaWYgKGJ1ZmZlciAhPSAwKQorCSAgICAodm9pZCkgc3RyY3B5KGJ1ZmZlciArIGhhdmUsIHZhbHVlKTsKKworICAgIH0KKyAgICByZXR1cm4gYnVmZmVyOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS90cmFjZV90cmllcy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS90cmFjZV90cmllcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTNhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL3RyYWNlX3RyaWVzLmMKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTkgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgl0cmFjZV90cmllcy5jIC0gVHJhY2luZy9EZWJ1Z2dpbmcgYnVmZmVycyAoa2V5Y29kZSB0cmllcy10cmVlcykKKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHRyYWNlX3RyaWVzLmMsdiAxLjEzIDIwMDgvMDgvMDMgMTU6NDM6MzAgdG9tIEV4cCAkIikKKworI2lmZGVmIFRSQUNFCisjZGVmaW5lIG15X2J1ZmZlciBfbmNfZ2xvYmFscy50cmFjZXRyeV9idWYKKyNkZWZpbmUgbXlfbGVuZ3RoIF9uY19nbG9iYWxzLnRyYWNldHJ5X3VzZWQKKworc3RhdGljIHZvaWQKK3JlY3VyX3RyaWVzKFRSSUVTICogdHJlZSwgdW5zaWduZWQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsID4gbXlfbGVuZ3RoKSB7CisJbXlfbGVuZ3RoID0gKGxldmVsICsgMSkgKiA0OworCW15X2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIHJlYWxsb2MobXlfYnVmZmVyLCBteV9sZW5ndGgpOworICAgIH0KKworICAgIHdoaWxlICh0cmVlICE9IDApIHsKKwlpZiAoKG15X2J1ZmZlcltsZXZlbF0gPSB0cmVlLT5jaCkgPT0gMCkKKwkgICAgbXlfYnVmZmVyW2xldmVsXSA9IDEyODsKKwlteV9idWZmZXJbbGV2ZWwgKyAxXSA9IDA7CisJaWYgKHRyZWUtPnZhbHVlICE9IDApIHsKKwkgICAgX3RyYWNlZigiJTVkOiAlcyAoJXMpIiwgdHJlZS0+dmFsdWUsCisJCSAgICBfbmNfdmlzYnVmKChjaGFyICopIG15X2J1ZmZlciksIGtleW5hbWUodHJlZS0+dmFsdWUpKTsKKwl9CisJaWYgKHRyZWUtPmNoaWxkKQorCSAgICByZWN1cl90cmllcyh0cmVlLT5jaGlsZCwgbGV2ZWwgKyAxKTsKKwl0cmVlID0gdHJlZS0+c2libGluZzsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfdHJhY2VfdHJpZXMoVFJJRVMgKiB0cmVlKQoreworICAgIG15X2J1ZmZlciA9IHR5cGVNYWxsb2ModW5zaWduZWQgY2hhciwgbXlfbGVuZ3RoID0gODApOworICAgIF90cmFjZWYoIkJFR0lOIHRyaWVzICVwIiwgdHJlZSk7CisgICAgcmVjdXJfdHJpZXModHJlZSwgMCk7CisgICAgX3RyYWNlZigiLiAuIC4gdHJpZXMgJXAiLCB0cmVlKTsKKyAgICBmcmVlKG15X2J1ZmZlcik7Cit9CisKKyNlbHNlCitFTVBUWV9NT0RVTEUoX25jX3RyYWNlX3RyaWVzKQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL3RyYWNlX3huYW1lcy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS90cmFjZV94bmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBiNTkyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS90cmFjZV94bmFtZXMuYwpAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gMTk5OSAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCXRyYWNlX3huYW1lcy5jIC0gVHJhY2luZy9EZWJ1Z2dpbmcgYnVmZmVycyAoVEVSTVRZUEUgZXh0ZW5kZWQgbmFtZXMpCisgKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybV9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogdHJhY2VfeG5hbWVzLmMsdiAxLjUgMjAwMC8xMi8xMCAwMzowMjo0NSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3RyYWNlX3huYW1lcyhURVJNVFlQRSAqIHRwIEdDQ19VTlVTRUQpCit7CisjaWZkZWYgVFJBQ0UKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIGludCBsaW1pdCA9IHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnMgKyB0cC0+ZXh0X1N0cmluZ3M7CisgICAgaW50IG4sIG07CisgICAgaWYgKGxpbWl0KSB7CisJaW50IGJlZ2luX251bSA9IHRwLT5leHRfQm9vbGVhbnM7CisJaW50IGJlZ2luX3N0ciA9IHRwLT5leHRfQm9vbGVhbnMgKyB0cC0+ZXh0X051bWJlcnM7CisKKwlfdHJhY2VmKCJleHRlbmRlZCBuYW1lcyAoJXMpICVkID0gJWQrJWQrJWQgb2YgJWQrJWQrJWQiLAorCQl0cC0+dGVybV9uYW1lcywKKwkJbGltaXQsCisJCXRwLT5leHRfQm9vbGVhbnMsIHRwLT5leHRfTnVtYmVycywgdHAtPmV4dF9TdHJpbmdzLAorCQl0cC0+bnVtX0Jvb2xlYW5zLCB0cC0+bnVtX051bWJlcnMsIHRwLT5udW1fU3RyaW5ncyk7CisJZm9yIChuID0gMDsgbiA8IGxpbWl0OyBuKyspIHsKKwkgICAgaWYgKChtID0gbiAtIGJlZ2luX3N0cikgPj0gMCkgeworCQlfdHJhY2VmKCJbJWRdICVzID0gJXMiLCBuLAorCQkJdHAtPmV4dF9OYW1lc1tuXSwKKwkJCV9uY192aXNidWYodHAtPlN0cmluZ3NbdHAtPm51bV9TdHJpbmdzICsgbSAtIHRwLT5leHRfU3RyaW5nc10pKTsKKwkgICAgfSBlbHNlIGlmICgobSA9IG4gLSBiZWdpbl9udW0pID49IDApIHsKKwkJX3RyYWNlZigiWyVkXSAlcyA9ICVkIChudW0pIiwgbiwKKwkJCXRwLT5leHRfTmFtZXNbbl0sCisJCQl0cC0+TnVtYmVyc1t0cC0+bnVtX051bWJlcnMgKyBtIC0gdHAtPmV4dF9OdW1iZXJzXSk7CisJICAgIH0gZWxzZSB7CisJCV90cmFjZWYoIlslZF0gJXMgPSAlZCAoYm9vbCkiLCBuLAorCQkJdHAtPmV4dF9OYW1lc1tuXSwKKwkJCXRwLT5Cb29sZWFuc1t0cC0+bnVtX0Jvb2xlYW5zICsgbiAtIHRwLT5leHRfQm9vbGVhbnNdKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS92YXJhcmdzLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL3ZhcmFyZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGVlNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS92YXJhcmdzLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworTU9EVUxFX0lEKCIkSWQ6IHZhcmFyZ3MuYyx2IDEuNyAyMDA4LzA4LzAzIDE1OjQyOjQ5IHRvbSBFeHAgJCIpCisKKyNpZmRlZiBUUkFDRQorCisjZGVmaW5lIE1BWF9QQVJNUyAxMAorCit0eXBlZGVmIGVudW0geworICAgIGF0VW5rbm93biA9IDAsIGF0SW50ZWdlciwgYXRGbG9hdCwgYXRQb2ludCwgYXRTdHJpbmcKK30gQVJHVFlQRTsKKworI2RlZmluZSBWQV9JTlQodHlwZSkgaXZhbCA9IHZhX2FyZyhhcCwgdHlwZSkKKyNkZWZpbmUgVkFfRkxUKHR5cGUpIGZ2YWwgPSB2YV9hcmcoYXAsIHR5cGUpCisjZGVmaW5lIFZBX1BUUih0eXBlKSBwdmFsID0gKGNoYXIgKil2YV9hcmcoYXAsIHR5cGUpCisjZGVmaW5lIFZBX1NUUih0eXBlKSBzdmFsID0gdmFfYXJnKGFwLCB0eXBlKQorCisjZGVmaW5lIE15QnVmZmVyIF9uY19nbG9iYWxzLnRyYWNlYXJnX2J1ZgorI2RlZmluZSBNeUxlbmd0aCBfbmNfZ2xvYmFscy50cmFjZWFyZ191c2VkCisKKy8qCisgKiBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgcGFyYW1ldGVyIGxpc3Qgb2YgYSBwcmludGYtc3R5bGUgY2FsbC4KKyAqLworTkNVUlNFU19FWFBPUlQoY2hhciAqKQorX25jX3ZhcmFyZ3MoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworICAgIHN0YXRpYyBjaGFyIGR1bW15W10gPSAiIjsKKworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisgICAgY29uc3QgY2hhciAqcGFyYW07CisgICAgaW50IG47CisKKyAgICBpZiAoZm10ID09IDAgfHwgKmZtdCA9PSAnXDAnKQorCXJldHVybiBkdW1teTsKKyAgICBpZiAoTXlMZW5ndGggPT0gMCkKKwlNeUJ1ZmZlciA9IHR5cGVNYWxsb2MoY2hhciwgTXlMZW5ndGggPSBCVUZTSVopOworICAgIGlmIChNeUJ1ZmZlciA9PSAwKQorCXJldHVybiBkdW1teTsKKyAgICAqTXlCdWZmZXIgPSAnXDAnOworCisgICAgd2hpbGUgKCpmbXQgIT0gJ1wwJykgeworCWlmICgqZm10ID09ICclJykgeworCSAgICBjaGFyICpwdmFsID0gMDsJLyogYXZvaWQgY29uc3QtY2FzdCAqLworCSAgICBjb25zdCBjaGFyICpzdmFsID0gIiI7CisJICAgIGRvdWJsZSBmdmFsID0gMC4wOworCSAgICBpbnQgZG9uZSA9IEZBTFNFOworCSAgICBpbnQgaXZhbCA9IDA7CisJICAgIGludCB0eXBlID0gMDsKKwkgICAgQVJHVFlQRSBwYXJtW01BWF9QQVJNU107CisJICAgIGludCBwYXJtcyA9IDA7CisJICAgIEFSR1RZUEUgdXNlZCA9IGF0VW5rbm93bjsKKworCSAgICB3aGlsZSAoKisrZm10ICE9ICdcMCcgJiYgIWRvbmUpIHsKKworCQlpZiAoKmZtdCA9PSAnKicpIHsKKwkJICAgIFZBX0lOVChpbnQpOworCQkgICAgaWYgKHBhcm1zIDwgTUFYX1BBUk1TKQorCQkJcGFybVtwYXJtcysrXSA9IGF0SW50ZWdlcjsKKwkJfSBlbHNlIGlmIChpc2FscGhhKFVDaGFyKCpmbXQpKSkgeworCQkgICAgZG9uZSA9IFRSVUU7CisJCSAgICBzd2l0Y2ggKCpmbXQpIHsKKwkJICAgIGNhc2UgJ1onOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnaCc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdsJzoJLyogRkFMTFRIUlUgKi8KKwkJCWRvbmUgPSBGQUxTRTsKKwkJCXR5cGUgPSAqZm10OworCQkJYnJlYWs7CisJCSAgICBjYXNlICdpJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ2QnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAndSc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICd4JzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ1gnOgkvKiBGQUxMVEhSVSAqLworCQkJaWYgKHR5cGUgPT0gJ2wnKQorCQkJICAgIFZBX0lOVChsb25nKTsKKwkJCWVsc2UgaWYgKHR5cGUgPT0gJ1onKQorCQkJICAgIFZBX0lOVChzaXplX3QpOworCQkJZWxzZQorCQkJICAgIFZBX0lOVChpbnQpOworCQkJdXNlZCA9IGF0SW50ZWdlcjsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAnZic6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdlJzoJLyogRkFMTFRIUlUgKi8KKwkJICAgIGNhc2UgJ0UnOgkvKiBGQUxMVEhSVSAqLworCQkgICAgY2FzZSAnZyc6CS8qIEZBTExUSFJVICovCisJCSAgICBjYXNlICdHJzoJLyogRkFMTFRIUlUgKi8KKwkJCVZBX0ZMVChkb3VibGUpOworCQkJdXNlZCA9IGF0RmxvYXQ7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ2MnOgorCQkJVkFfSU5UKGludCk7CisJCQl1c2VkID0gYXRJbnRlZ2VyOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdzJzoKKwkJCVZBX1NUUihjb25zdCBjaGFyICopOworCQkJdXNlZCA9IGF0U3RyaW5nOworCQkJYnJlYWs7CisJCSAgICBjYXNlICdwJzoKKwkJCVZBX1BUUih2b2lkICopOworCQkJdXNlZCA9IGF0UG9pbnQ7CisJCQlicmVhazsKKwkJICAgIGNhc2UgJ24nOgorCQkJVkFfUFRSKGludCAqKTsKKwkJCXVzZWQgPSBhdFBvaW50OworCQkJYnJlYWs7CisJCSAgICBkZWZhdWx0OgorCQkJYnJlYWs7CisJCSAgICB9CisJCX0gZWxzZSBpZiAoKmZtdCA9PSAnJScpIHsKKwkJICAgIGRvbmUgPSBUUlVFOworCQl9CisJCWlmICh1c2VkICE9IGF0VW5rbm93biAmJiBwYXJtcyA8IE1BWF9QQVJNUykgeworCQkgICAgcGFybVtwYXJtcysrXSA9IHVzZWQ7CisJCSAgICBmb3IgKG4gPSAwOyBuIDwgcGFybXM7ICsrbikgeworCQkJdXNlZCA9IHBhcm1bbl07CisJCQlwYXJhbSA9IGJ1ZmZlcjsKKwkJCXN3aXRjaCAodXNlZCkgeworCQkJY2FzZSBhdEludGVnZXI6CisJCQkgICAgc3ByaW50ZihidWZmZXIsICIlZCIsIGl2YWwpOworCQkJICAgIGJyZWFrOworCQkJY2FzZSBhdEZsb2F0OgorCQkJICAgIHNwcmludGYoYnVmZmVyLCAiJWYiLCBmdmFsKTsKKwkJCSAgICBicmVhazsKKwkJCWNhc2UgYXRQb2ludDoKKwkJCSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVwIiwgcHZhbCk7CisJCQkgICAgYnJlYWs7CisJCQljYXNlIGF0U3RyaW5nOgorCQkJICAgIHBhcmFtID0gX25jX3Zpc2J1ZjIoMSwgc3ZhbCk7CisJCQkgICAgYnJlYWs7CisJCQljYXNlIGF0VW5rbm93bjoKKwkJCWRlZmF1bHQ6CisJCQkgICAgc3RyY3B5KGJ1ZmZlciwgIj8iKTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCU15TGVuZ3RoICs9IHN0cmxlbihwYXJhbSkgKyAyOworCQkJTXlCdWZmZXIgPSB0eXBlUmVhbGxvYyhjaGFyLCBNeUxlbmd0aCwgTXlCdWZmZXIpOworCQkJc3ByaW50ZihNeUJ1ZmZlciArIHN0cmxlbihNeUJ1ZmZlciksICIsICVzIiwgcGFyYW0pOworCQkgICAgfQorCQl9CisJCXVzZWQgPSBhdFVua25vd247CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBmbXQrKzsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChNeUJ1ZmZlcik7Cit9CisjZWxzZQorRU1QVFlfTU9EVUxFKF9uY192YXJhcmdzKQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3RyYWNlL3Zpc2J1Zi5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS92aXNidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjlmYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90cmFjZS92aXNidWYuYwpAQCAtMCwwICsxLDMzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJdmlzYnVmLmMgLSBUcmFjaW5nL0RlYnVnZ2luZyBzdXBwb3J0IHJvdXRpbmVzCisgKi8KKworI2RlZmluZSBORUVEX05DVVJTRVNfQ0hfVAorI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aWMuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogdmlzYnVmLmMsdiAxLjMyIDIwMDgvMDgvMDQgMjM6MDc6MzkgdG9tIEV4cCAkIikKKworI2RlZmluZSBOb3JtYWxMZW4obGVuKSAoc2l6ZV90KSAoKChzaXplX3QpKGxlbikgKyAxKSAqIDQpCisjZGVmaW5lIFdpZGVMZW4obGVuKSAgIChzaXplX3QpICgoKHNpemVfdCkobGVuKSArIDEpICogNCAqIE1CX0NVUl9NQVgpCisKKyNpZmRlZiBUUkFDRQorc3RhdGljIGNvbnN0IGNoYXIgZF9xdW90ZVtdID0gU3RyaW5nT2YoRF9RVU9URSk7CitzdGF0aWMgY29uc3QgY2hhciBsX2JyYWNlW10gPSBTdHJpbmdPZihMX0JSQUNFKTsKK3N0YXRpYyBjb25zdCBjaGFyIHJfYnJhY2VbXSA9IFN0cmluZ09mKFJfQlJBQ0UpOworI2VuZGlmCisKK3N0YXRpYyBjaGFyICoKK19uY192aXNjaGFyKGNoYXIgKnRwLCB1bnNpZ25lZCBjKQoreworICAgIGlmIChjID09ICciJyB8fCBjID09ICdcXCcpIHsKKwkqdHArKyA9ICdcXCc7CisJKnRwKysgPSAoY2hhcikgYzsKKyAgICB9IGVsc2UgaWYgKGlzN2JpdHMoYykgJiYgKGlzZ3JhcGgoYykgfHwgYyA9PSAnICcpKSB7CisJKnRwKysgPSAoY2hhcikgYzsKKyAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgeworCSp0cCsrID0gJ1xcJzsKKwkqdHArKyA9ICduJzsKKyAgICB9IGVsc2UgaWYgKGMgPT0gJ1xyJykgeworCSp0cCsrID0gJ1xcJzsKKwkqdHArKyA9ICdyJzsKKyAgICB9IGVsc2UgaWYgKGMgPT0gJ1xiJykgeworCSp0cCsrID0gJ1xcJzsKKwkqdHArKyA9ICdiJzsKKyAgICB9IGVsc2UgaWYgKGMgPT0gJ1wwMzMnKSB7CisJKnRwKysgPSAnXFwnOworCSp0cCsrID0gJ2UnOworICAgIH0gZWxzZSBpZiAoVUNoYXIoYykgPT0gMHg3ZikgeworCSp0cCsrID0gJ1xcJzsKKwkqdHArKyA9ICdeJzsKKwkqdHArKyA9ICc/JzsKKyAgICB9IGVsc2UgaWYgKGlzN2JpdHMoYykgJiYgaXNjbnRybChVQ2hhcihjKSkpIHsKKwkqdHArKyA9ICdcXCc7CisJKnRwKysgPSAnXic7CisJKnRwKysgPSAoY2hhcikgKCdAJyArIGMpOworICAgIH0gZWxzZSB7CisJc3ByaW50Zih0cCwgIlxcJTAzbG8iLCAodW5zaWduZWQgbG9uZykgQ2hDaGFyT2YoYykpOworCXRwICs9IHN0cmxlbih0cCk7CisgICAgfQorICAgICp0cCA9IDA7CisgICAgcmV0dXJuIHRwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitfbmNfdmlzYnVmMm4oaW50IGJ1Zm51bSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworICAgIGNvbnN0IGNoYXIgKnZidWY7CisgICAgY2hhciAqdHA7CisgICAgaW50IGM7CisKKyAgICBpZiAoYnVmID09IDApCisJcmV0dXJuICgiKG51bGwpIik7CisgICAgaWYgKGJ1ZiA9PSBDQU5DRUxMRURfU1RSSU5HKQorCXJldHVybiAoIihjYW5jZWxsZWQpIik7CisKKyAgICBpZiAobGVuIDwgMCkKKwlsZW4gPSAoaW50KSBzdHJsZW4oYnVmKTsKKworI2lmZGVmIFRSQUNFCisgICAgdmJ1ZiA9IHRwID0gX25jX3RyYWNlX2J1ZihidWZudW0sIE5vcm1hbExlbihsZW4pKTsKKyNlbHNlCisgICAgeworCXN0YXRpYyBjaGFyICpteWJ1Zls0XTsKKwlteWJ1ZltidWZudW1dID0gdHlwZVJlYWxsb2MoY2hhciwgTm9ybWFsTGVuKGxlbiksIG15YnVmW2J1Zm51bV0pOworCXZidWYgPSB0cCA9IG15YnVmW2J1Zm51bV07CisgICAgfQorI2VuZGlmCisgICAgaWYgKHRwICE9IDApIHsKKwkqdHArKyA9IERfUVVPVEU7CisJd2hpbGUgKCgtLWxlbiA+PSAwKSAmJiAoYyA9ICpidWYrKykgIT0gJ1wwJykgeworCSAgICB0cCA9IF9uY192aXNjaGFyKHRwLCBVQ2hhcihjKSk7CisJfQorCSp0cCsrID0gRF9RVU9URTsKKwkqdHArKyA9ICdcMCc7CisgICAgfSBlbHNlIHsKKwl2YnVmID0gKCIoX25jX3Zpc2J1ZjJuIGZhaWxlZCkiKTsKKyAgICB9CisgICAgcmV0dXJuICh2YnVmKTsKK30KKworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorX25jX3Zpc2J1ZjIoaW50IGJ1Zm51bSwgY29uc3QgY2hhciAqYnVmKQoreworICAgIHJldHVybiBfbmNfdmlzYnVmMm4oYnVmbnVtLCBidWYsIC0xKTsKK30KKworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorX25jX3Zpc2J1Zihjb25zdCBjaGFyICpidWYpCit7CisgICAgcmV0dXJuIF9uY192aXNidWYyKDAsIGJ1Zik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY192aXNidWZuKGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICByZXR1cm4gX25jX3Zpc2J1ZjJuKDAsIGJ1ZiwgbGVuKTsKK30KKworI2lmZGVmIFRSQUNFCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKworI2lmIGRlZmluZWQoVVNFX1RFUk1MSUIpCisjZGVmaW5lIF9uY193Y2hzdHJsZW4gX215X3djaHN0cmxlbgorc3RhdGljIGludAorX25jX3djaHN0cmxlbihjb25zdCBjY2hhcl90ICpzKQoreworICAgIGludCByZXN1bHQgPSAwOworICAgIHdoaWxlIChDaGFyT2Yoc1tyZXN1bHRdKSAhPSBMJ1wwJykgeworCXJlc3VsdCsrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK19uY192aXN3YnVmMm4oaW50IGJ1Zm51bSwgY29uc3Qgd2NoYXJfdCAqYnVmLCBpbnQgbGVuKQoreworICAgIGNvbnN0IGNoYXIgKnZidWY7CisgICAgY2hhciAqdHA7CisgICAgd2NoYXJfdCBjOworCisgICAgaWYgKGJ1ZiA9PSAwKQorCXJldHVybiAoIihudWxsKSIpOworCisgICAgaWYgKGxlbiA8IDApCisJbGVuID0gKGludCkgd2NzbGVuKGJ1Zik7CisKKyNpZmRlZiBUUkFDRQorICAgIHZidWYgPSB0cCA9IF9uY190cmFjZV9idWYoYnVmbnVtLCBXaWRlTGVuKGxlbikpOworI2Vsc2UKKyAgICB7CisJc3RhdGljIGNoYXIgKm15YnVmWzJdOworCW15YnVmW2J1Zm51bV0gPSB0eXBlUmVhbGxvYyhjaGFyLCBXaWRlTGVuKGxlbiksIG15YnVmW2J1Zm51bV0pOworCXZidWYgPSB0cCA9IG15YnVmW2J1Zm51bV07CisgICAgfQorI2VuZGlmCisgICAgaWYgKHRwICE9IDApIHsKKwkqdHArKyA9IERfUVVPVEU7CisJd2hpbGUgKCgtLWxlbiA+PSAwKSAmJiAoYyA9ICpidWYrKykgIT0gJ1wwJykgeworCSAgICBjaGFyIHRlbXBbQ0NIQVJXX01BWCArIDgwXTsKKwkgICAgaW50IGogPSB3Y3RvbWIodGVtcCwgYyksIGs7CisJICAgIGlmIChqIDw9IDApIHsKKwkJc3ByaW50Zih0ZW1wLCAiXFx1JTA4WCIsICh1bnNpZ25lZCkgYyk7CisJCWogPSAoaW50KSBzdHJsZW4odGVtcCk7CisJICAgIH0KKwkgICAgZm9yIChrID0gMDsgayA8IGo7ICsraykgeworCQl0cCA9IF9uY192aXNjaGFyKHRwLCBVQ2hhcih0ZW1wW2tdKSk7CisJICAgIH0KKwl9CisJKnRwKysgPSBEX1FVT1RFOworCSp0cCsrID0gJ1wwJzsKKyAgICB9IGVsc2UgeworCXZidWYgPSAoIihfbmNfdmlzd2J1ZjJuIGZhaWxlZCkiKTsKKyAgICB9CisgICAgcmV0dXJuICh2YnVmKTsKK30KKworTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKQorX25jX3Zpc3didWYyKGludCBidWZudW0sIGNvbnN0IHdjaGFyX3QgKmJ1ZikKK3sKKyAgICByZXR1cm4gX25jX3Zpc3didWYybihidWZudW0sIGJ1ZiwgLTEpOworfQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfdmlzd2J1Zihjb25zdCB3Y2hhcl90ICpidWYpCit7CisgICAgcmV0dXJuIF9uY192aXN3YnVmMigwLCBidWYpOworfQorCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfdmlzd2J1Zm4oY29uc3Qgd2NoYXJfdCAqYnVmLCBpbnQgbGVuKQoreworICAgIHJldHVybiBfbmNfdmlzd2J1ZjJuKDAsIGJ1ZiwgbGVuKTsKK30KKworLyogdGhpcyBzcGVjaWFsIGNhc2UgaXMgdXNlZCBmb3Igd2dldF93c3RyKCkgKi8KK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY192aXN3aWJ1Zihjb25zdCB3aW50X3QgKmJ1ZikKK3sKKyAgICBzdGF0aWMgd2NoYXJfdCAqbXlidWY7CisgICAgc3RhdGljIHVuc2lnbmVkIG15bGVuOworICAgIHVuc2lnbmVkIG47CisKKyAgICBmb3IgKG4gPSAwOyBidWZbbl0gIT0gMDsgKytuKSA7CisgICAgaWYgKG15bGVuIDwgKytuKSB7CisJbXlsZW4gPSBuICsgODA7CisJaWYgKG15YnVmICE9IDApCisJICAgIG15YnVmID0gdHlwZVJlYWxsb2Mod2NoYXJfdCwgbXlsZW4sIG15YnVmKTsKKwllbHNlCisJICAgIG15YnVmID0gdHlwZU1hbGxvYyh3Y2hhcl90LCBteWxlbik7CisgICAgfQorICAgIGZvciAobiA9IDA7IGJ1ZltuXSAhPSAwOyArK24pCisJbXlidWZbbl0gPSAod2NoYXJfdCkgYnVmW25dOworCisgICAgcmV0dXJuIF9uY192aXN3YnVmMigwLCBteWJ1Zik7Cit9CisjZW5kaWYgLyogVVNFX1dJREVDX1NVUFBPUlQgKi8KKworLyogdXNlIHRoZXNlIGZ1bmN0aW9ucyBmb3IgZGlzcGxheWluZyBwYXJ0cyBvZiBhIGxpbmUgd2l0aGluIGEgd2luZG93ICovCitOQ1VSU0VTX0VYUE9SVChjb25zdCBjaGFyICopCitfbmNfdmlzY2J1ZjIoaW50IGJ1Zm51bSwgY29uc3QgTkNVUlNFU19DSF9UICogYnVmLCBpbnQgbGVuKQoreworICAgIGNoYXIgKnJlc3VsdCA9IF9uY190cmFjZV9idWYoYnVmbnVtLCBCVUZTSVopOworICAgIGludCBmaXJzdDsKKyAgICBjb25zdCBjaGFyICpmb3VuZDsKKworICAgIGlmIChyZXN1bHQgIT0gMCkgeworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJaWYgKGxlbiA8IDApCisJICAgIGxlbiA9IF9uY193Y2hzdHJsZW4oYnVmKTsKKyNlbmRpZiAvKiBVU0VfV0lERUNfU1VQUE9SVCAqLworCisJLyoKKwkgKiBEaXNwbGF5IG9uZSBvciBtb3JlIHN0cmluZ3MgZm9sbG93ZWQgYnkgYXR0cmlidXRlcy4KKwkgKi8KKwlmaXJzdCA9IDA7CisJd2hpbGUgKGZpcnN0IDwgbGVuKSB7CisJICAgIGF0dHJfdCBhdHRyID0gQXR0ck9mKGJ1ZltmaXJzdF0pOworCSAgICBpbnQgbGFzdCA9IGxlbiAtIDE7CisJICAgIGludCBqOworCisJICAgIGZvciAoaiA9IGZpcnN0ICsgMTsgaiA8IGxlbjsgKytqKSB7CisJCWlmICghU2FtZUF0dHJPZihidWZbal0sIGJ1ZltmaXJzdF0pKSB7CisJCSAgICBsYXN0ID0gaiAtIDE7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgICAgcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIGxfYnJhY2UpOworCSAgICByZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgZF9xdW90ZSk7CisJICAgIGZvciAoaiA9IGZpcnN0OyBqIDw9IGxhc3Q7ICsraikgeworCQlmb3VuZCA9IF9uY19hbHRjaGFyc2V0X25hbWUoYXR0ciwgKGNodHlwZSkgQ2hhck9mKGJ1ZltqXSkpOworCQlpZiAoZm91bmQgIT0gMCkgeworCQkgICAgcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIGZvdW5kKTsKKwkJICAgIGF0dHIgJj0gfkFfQUxUQ0hBUlNFVDsKKwkJfSBlbHNlCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkJaWYgKCFpc1dpZGVjRXh0KGJ1ZltqXSkpIHsKKwkJICAgIFBVVENfREFUQTsKKworCQkgICAgUFVUQ19JTklUOworCQkgICAgZm9yIChQVVRDX2kgPSAwOyBQVVRDX2kgPCBDQ0hBUldfTUFYOyArK1BVVENfaSkgeworCQkJaW50IGs7CisKKwkJCVBVVENfY2ggPSBidWZbal0uY2hhcnNbUFVUQ19pXTsKKwkJCWlmIChQVVRDX2NoID09IEwnXDAnKQorCQkJICAgIGJyZWFrOworCQkJUFVUQ19uID0gKGludCkgd2NydG9tYihQVVRDX2J1ZiwgYnVmW2pdLmNoYXJzW1BVVENfaV0sICZQVVRfc3QpOworCQkJaWYgKFBVVENfbiA8PSAwKQorCQkJICAgIGJyZWFrOworCQkJZm9yIChrID0gMDsgayA8IFBVVENfbjsgaysrKSB7CisJCQkgICAgY2hhciB0ZW1wWzgwXTsKKwkJCSAgICBfbmNfdmlzY2hhcih0ZW1wLCBVQ2hhcihQVVRDX2J1ZltrXSkpOworCQkJICAgIHJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCB0ZW1wKTsKKwkJCX0KKwkJICAgIH0KKwkJfQorI2Vsc2UKKwkJeworCQkgICAgY2hhciB0ZW1wWzgwXTsKKwkJICAgIF9uY192aXNjaGFyKHRlbXAsIFVDaGFyKGJ1ZltqXSkpOworCQkgICAgcmVzdWx0ID0gX25jX3RyYWNlX2J1ZmNhdChidWZudW0sIHRlbXApOworCQl9CisjZW5kaWYgLyogVVNFX1dJREVDX1NVUFBPUlQgKi8KKwkgICAgfQorCSAgICByZXN1bHQgPSBfbmNfdHJhY2VfYnVmY2F0KGJ1Zm51bSwgZF9xdW90ZSk7CisJICAgIGlmIChhdHRyICE9IEFfTk9STUFMKSB7CisJCXJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCAiIHwgIik7CisJCXJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCBfdHJhY2VhdHRyMihidWZudW0gKyAyMCwgYXR0cikpOworCSAgICB9CisJICAgIHJlc3VsdCA9IF9uY190cmFjZV9idWZjYXQoYnVmbnVtLCByX2JyYWNlKTsKKwkgICAgZmlyc3QgPSBsYXN0ICsgMTsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY192aXNjYnVmKGNvbnN0IE5DVVJTRVNfQ0hfVCAqIGJ1ZiwgaW50IGxlbikKK3sKKyAgICByZXR1cm4gX25jX3Zpc2NidWYyKDAsIGJ1ZiwgbGVuKTsKK30KKyNlbmRpZiAvKiBUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90dHkvTUtleHBhbmRlZC5zaCBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L01LZXhwYW5kZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmY5YWNmMgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L01LZXhwYW5kZWQuc2gKQEAgLTAsMCArMSw5OSBAQAorIyEgL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTcKKyMKKyMgJElkOiBNS2V4cGFuZGVkLnNoLHYgMS4xMSAyMDA1LzAxLzAyIDAxOjA2OjQwIHRvbSBFeHAgJAorIworIyBTY3JpcHQgdG8gZ2VuZXJhdGUgJ2V4cGFuZGVkLmMnLCBhIGR1bW15IHNvdXJjZSB0aGF0IGNvbnRhaW5zIGZ1bmN0aW9ucworIyBjb3JyZXNwb25kaW5nIHRvIGNvbXBsZXggbWFjcm9zIHVzZWQgaW4gdGhpcyBsaWJyYXJ5LiAgQnkgbWFraW5nIGZ1bmN0aW9ucywKKyMgd2Ugc2ltcGxpZnkgYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy4KKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCitwcmVwcm9jZXNzb3I9IiQxIgorZWxzZQorcHJlcHJvY2Vzc29yPSJjYyAtRSIKK2ZpCitzaGlmdAoraWYgdGVzdCAkIyAhPSAwIDsgdGhlbgorCXByZXByb2Nlc3Nvcj0iJHByZXByb2Nlc3NvciAkKiIKK2Vsc2UKKwlwcmVwcm9jZXNzb3I9IiRwcmVwcm9jZXNzb3IgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uL2luY2x1ZGUiCitmaQorCitUTVA9Z2VuJCQuYwordHJhcCAicm0gLWYgJFRNUCIgMCAxIDIgNSAxNQorCitjYXQgPDxFT0YKKy8qIGdlbmVyYXRlZCBieSBNS2V4cGFuZGVkLnNoICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisjaWYgTkNVUlNFU19FWFBBTkRFRAorRU9GCisKK2NhdCA+JFRNUCA8PEVPRgorI2luY2x1ZGUgPG5jdXJzZXNfY2ZnLmg+CisjdW5kZWYgTkNVUlNFU19FWFBBTkRFRCAvKiB0aGlzIHByb2JhYmx5IGlzIHNldCBpbiBuY3Vyc2VzX2NmZy5oICovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKy8qIHRoZXNlIGFyZSBuYW1lcyB3ZSdkIGxpa2UgdG8gc2VlICovCisjdW5kZWYgQUxMX0JVVF9DT0xPUgorI3VuZGVmIFBBSVJfTlVNQkVSCisjdW5kZWYgVFJVRQorI3VuZGVmIEZBTFNFCisvKiB0aGlzIGlzIGEgbWFya2VyICovCitJR05PUkUKK05DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190b2dnbGVfYXR0cl9vbiAoYXR0cl90ICpTLCBhdHRyX3QgYXQpCit7CisJdG9nZ2xlX2F0dHJfb24oKlMsYXQpOworfQorTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3RvZ2dsZV9hdHRyX29mZiAoYXR0cl90ICpTLCBhdHRyX3QgYXQpIAoreworCXRvZ2dsZV9hdHRyX29mZigqUyxhdCk7Cit9CitOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19EZWxDaGFyQ29zdCAoaW50IGNvdW50KQoreworCXJldHVybiBEZWxDaGFyQ29zdChjb3VudCk7Cit9CitOQ1VSU0VTX0VYUE9SVChpbnQpIF9uY19JbnNDaGFyQ29zdCAoaW50IGNvdW50KQoreworCXJldHVybiBJbnNDaGFyQ29zdChjb3VudCk7Cit9CitOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfVXBkYXRlQXR0cnMgKE5DVVJTRVNfQ0hfVCBjKQoreworCVVwZGF0ZUF0dHJzKGMpOworfQorRU9GCisKKyRwcmVwcm9jZXNzb3IgJFRNUCAyPi9kZXYvbnVsbCB8IHNlZCAtZSAnMSwvXklHTk9SRSQvZCcKKworY2F0IDw8RU9GCisjZWxzZSAvKiAhIE5DVVJTRVNfRVhQQU5ERUQgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19leHBhbmRlZCAodm9pZCkgeyB9CisjZW5kaWYgLyogTkNVUlNFU19FWFBBTkRFRCAqLworRU9GCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9oYXJkc2Nyb2xsLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9oYXJkc2Nyb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0MDk5NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L2hhcmRzY3JvbGwuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEFsZXhhbmRlciBWIEx1a3lhbm92ICAgICAgICAgICAgICAgICAgICAxOTk3LTE5OTggICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitOQU1FCisgICBoYXJkc2Nyb2xsLmMgLS0gaGFyZHdhcmUtc2Nyb2xsaW5nIG9wdGltaXphdGlvbiBmb3IgbmN1cnNlcworCitTWU5PUFNJUworICAgdm9pZCBfbmNfc2Nyb2xsX29wdGltaXplKHZvaWQpCisKK0RFU0NSSVBUSU9OCisJCQlPVkVSVklFVworCitUaGlzIGFsZ29yaXRobSBmb3IgY29tcHV0ZXMgb3B0aW11bSBoYXJkd2FyZSBzY3JvbGxpbmcgdG8gdHJhbnNmb3JtIGFuCitvbGQgc2NyZWVuIChjdXJzY3IpIGludG8gYSBuZXcgc2NyZWVuIChuZXdzY3IpIHZpYSB2ZXJ0aWNhbCBsaW5lIG1vdmVzLgorCitCZWNhdXNlIHRoZSBzY3JlZW4gaGFzIGEgYGdyYWluJyAodGhlcmUgYXJlIGluc2VydC9kZWxldGUvc2Nyb2xsIGxpbmUKK29wZXJhdGlvbnMgYnV0IG5vIGluc2VydC9kZWxldGUvc2Nyb2xsIGNvbHVtbiBvcGVyYXRpb25zKSwgaXQgaXMgZWZmaWNpZW50CiticmVhayB0aGUgdXBkYXRlIGFsZ29yaXRobSBpbnRvIHR3byBwaWVjZXM6IGEgZmlyc3Qgc3RhZ2UgdGhhdCBkb2VzIG9ubHkgbGluZQorbW92ZXMsIG9wdGltaXppbmcgdGhlIGVuZCBwcm9kdWN0IG9mIHVzZXItaW52b2tlZCBpbnNlcnRpb25zLCBkZWxldGlvbnMsIGFuZAorc2Nyb2xsczsgYW5kIGEgc2Vjb25kIHBoYXNlIChjb3JyZXNwb25kaW5nIHRvIHRoZSBwcmVzZW50IGRvdXBkYXRlIGNvZGUgaW4KK25jdXJzZXMpIHRoYXQgZG9lcyBvbmx5IGxpbmUgdHJhbnNmb3JtYXRpb25zLgorCitUaGUgY29tbW9uIGNhc2Ugd2Ugd2FudCBoYXJkd2FyZSBzY3JvbGxpbmcgZm9yIGlzIHRvIGhhbmRsZSBsaW5lIGluc2VydGlvbnMKK2FuZCBkZWxldGlvbnMgaW4gc2NyZWVuLW9yaWVudGVkIHRleHQtZWRpdG9ycy4gIFRoaXMgdHdvLXN0YWdlIGFwcHJvYWNoIHdpbGwKK2FjY29tcGxpc2ggdGhhdCBhdCBhIGxvdyBjb21wdXRhdGlvbiBhbmQgY29kZS1zaXplIGNvc3QuCisKKwkJCUxJTkUtTU9WRSBDT01QVVRBVElPTgorCitOb3csIHRvIGEgZGlzY3Vzc2lvbiBvZiB0aGUgbGluZS1tb3ZlIGNvbXB1dGF0aW9uLgorCitGb3IgZXhwb3NpdG9yeSBwdXJwb3NlcywgY29uc2lkZXIgdGhlIHNjcmVlbiBsaW5lcyB0byBiZSByZXByZXNlbnRlZCBieQoraW50ZWdlcnMgMC4uMjMgKHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdmFsdWUgb2YgMjMgbWF5IHZhcnkpLgorTGV0IGEgbmV3IGxpbmUgaW50cm9kdWNlZCBieSBpbnNlcnRpb24sIHNjcm9sbGluZywgb3IgYXQgdGhlIGJvdHRvbSBvZgordGhlIHNjcmVlbiBmb2xsb3dpbmcgYSBsaW5lIGRlbGV0ZSBiZSBnaXZlbiB0aGUgaW5kZXggLTEuCisKK0Fzc3VtZSB0aGF0IHRoZSByZWFsIHNjcmVlbiBzdGFydHMgd2l0aCBsaW5lcyAwLi4yMy4gIE5vdywgd2UgaGF2ZQordGhlIGZvbGxvd2luZyBwb3NzaWJsZSBsaW5lLW9yaWVudGVkIG9wZXJhdGlvbnMgb24gdGhlIHNjcmVlbjoKKworSW5zZXJ0aW9uOiBpbnNlcnRzIGEgbGluZSBhdCBhIGdpdmVuIHNjcmVlbiByb3csIGZvcmNpbmcgYWxsIGxpbmVzIGJlbG93Cit0byBzY3JvbGwgZm9yd2FyZC4gIFRoZSBsYXN0IHNjcmVlbiBsaW5lIGlzIGxvc3QuICBGb3IgZXhhbXBsZSwgYW4gaW5zZXJ0aW9uCithdCBsaW5lIDUgd291bGQgcHJvZHVjZTogMC4uNCAtMSA1Li4yMy4KKworRGVsZXRpb246IGRlbGV0ZXMgYSBsaW5lIGF0IGEgZ2l2ZW4gc2NyZWVuIHJvdywgZm9yY2luZyBhbGwgbGluZXMgYmVsb3cKK3RvIHNjcm9sbCBmb3J3YXJkLiAgVGhlIGxhc3Qgc2NyZWVuIGxpbmUgaXMgbWFkZSBuZXcuICBGb3IgZXhhbXBsZSwgYSBkZWxldGlvbgorYXQgbGluZSA3IHdvdWxkIHByb2R1Y2U6IDAuLjYgOC4uMjMgLTEuCisKK1Njcm9sbCB1cDogbW92ZSBhIHJhbmdlIG9mIGxpbmVzIHVwIDEuICBUaGUgYm90dG9tIGxpbmUgb2YgdGhlIHJhbmdlCitiZWNvbWVzIG5ldy4gIEZvciBleGFtcGxlLCBzY3JvbGxpbmcgdXAgdGhlIHJlZ2lvbiBmcm9tIDkgdG8gMTQgd2lsbAorcHJvZHVjZSAwLi44IDEwLi4xNCAtMSAxNS4uMjMuCisKK1Njcm9sbCBkb3duOiBtb3ZlIGEgcmFuZ2Ugb2YgbGluZXMgZG93biAxLiAgVGhlIHRvcCBsaW5lIG9mIHRoZSByYW5nZQorYmVjb21lcyBuZXcuICBGb3IgZXhhbXBsZSwgc2Nyb2xsaW5nIGRvd24gdGhlIHJlZ2lvbiBmcm9tIDEyIHRvIDE2IHdpbGwgcHJvZHVjZQorMC4uMTEgLTEgMTIuLjE1IDE3Li4yMy4KKworTm93LCBhbiBvYnZpb3VzIHByb3BlcnR5IG9mIGFsbCB0aGVzZSBvcGVyYXRpb25zIGlzIHRoYXQgdGhleSBwcmVzZXJ2ZSB0aGUKK29yZGVyIG9mIG9sZCBsaW5lcywgdGhvdWdoIG5vdCB0aGVpciBwb3NpdGlvbiBpbiB0aGUgc2VxdWVuY2UuCisKK1RoZSBrZXkgdHJpY2sgb2YgdGhpcyBhbGdvcml0aG0gaXMgdGhhdCB0aGUgb3JpZ2luYWwgbGluZSBpbmRpY2VzIGRlc2NyaWJlZAorYWJvdmUgYXJlIGFjdHVhbGx5IG1haW50YWluZWQgYXMgX2xpbmVbXS5vbGRpbmRleCBmaWVsZHMgaW4gdGhlIHdpbmRvdworc3RydWN0dXJlLCBhbmQgc3RpY2sgdG8gZWFjaCBsaW5lIHRocm91Z2ggc2Nyb2xsIGFuZCBpbnNlcnQvZGVsZXRlIG9wZXJhdGlvbnMuCisKK1RodXMsIGl0IGlzIHBvc3NpYmxlIGF0IHVwZGF0ZSB0aW1lIHRvIGxvb2sgYXQgdGhlIG9sZG51bSBmaWVsZHMgYW5kIGNvbXB1dGUKK2FuIG9wdGltYWwgc2V0IG9mIGlsL2RsL3Njcm9sbCBvcGVyYXRpb25zIHRoYXQgd2lsbCB0YWtlIHRoZSByZWFsIHNjcmVlbgorbGluZXMgdG8gdGhlIHZpcnR1YWwgc2NyZWVuIGxpbmVzLiAgT25jZSB0aGVzZSB2ZXJ0aWNhbCBtb3ZlcyBoYXZlIGJlZW4gZG9uZSwKK3dlIGNhbiBoYW5kIG9mZiB0byB0aGUgc2Vjb25kIHN0YWdlIG9mIHRoZSB1cGRhdGUgYWxnb3JpdGhtLCB3aGljaCBkb2VzIGxpbmUKK3RyYW5zZm9ybWF0aW9ucy4KKworTm90ZSB0aGF0IHRoZSBtb3ZlIGNvbXB1dGF0aW9uIGRvZXMgbm90IG5lZWQgdG8gaGF2ZSB0aGUgZnVsbCBnZW5lcmFsaXR5CitvZiBhIGRpZmYgYWxnb3JpdGhtICh3aGljaCBpdCBzdXBlcmZpY2lhbGx5IHJlc2VtYmxlcykgYmVjYXVzZSBsaW5lcyBjYW5ub3QKK2JlIG1vdmVkIG91dCBvZiBvcmRlci4KKworCQkJVEhFIEFMR09SSVRITQorCitUaGUgc2Nyb2xsaW5nIGlzIGRvbmUgaW4gdHdvIHBhc3Nlcy4gVGhlIGZpcnN0IHBhc3MgaXMgZnJvbSB0b3AgdG8gYm90dG9tCitzY3JvbGluZyBodW5rcyBVUC4gVGhlIHNlY29uZCBvbmUgaXMgZnJvbSBib3R0b20gdG8gdG9wIHNjcm9sbGluZyBodW5rcyBET1dOLgorT2J2aW91c2x5IGVub3VnaCwgbm8gbGluZXMgdG8gYmUgc2Nyb2xsZWQgd2lsbCBiZSBkZXN0cm95ZWQuIChsYXYpCisKK0hPVyBUTyBURVNUIFRISVM6CisKK1VzZSB0aGUgZm9sbG93aW5nIHByb2R1Y3Rpb246CisKK2hhcmRzY3JvbGw6IGhhcmRzY3JvbGwuYworCSQoQ0MpIC1nIC1EU0NST0xMREVCVUcgaGFyZHNjcm9sbC5jIC1vIGhhcmRzY3JvbGwKKworVGhlbiBqdXN0IHR5cGUgc2NyYW1ibGUgdmVjdG9ycyBhbmQgd2F0Y2guICBUaGUgZm9sbG93aW5nIHRlc3QgbG9hZHMgYXJlCithIHJlcHJlc2VudGF0aXZlIHNhbXBsZSBvZiBjYXNlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENVVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBObyBsaW5lcyBtb3ZlZAorIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMKKyMKKyMgQSBzY3JvbGwgdXAKKyAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIC0xCisjCisjIEEgc2Nyb2xsIGRvd24KKy0xICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyCisjCisjIEFuIGluc2VydGlvbiAoYWZ0ZXIgbGluZSAxMikKKyAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIC0xIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyCisjCisjIEEgc2ltcGxlIGRlbGV0aW9uIChsaW5lIDEwKQorIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIC0xCisjCisjIEEgbW9yZSBjb21wbGV4IGNhc2UKKy0xIC0xIC0xIC0xIC0xICAzICA0ICA1ICA2ICA3ICAtMSAtMSAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAtMSAtMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENVVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBVVRIT1IKKyAgICBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4sIE5vdmVtYmVyIDE5OTQKKyAgICBOZXcgYWxnb3JpdGhtIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QHlhcnMuZnJlZS5uZXQ+LCBBdWcgMTk5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBoYXJkc2Nyb2xsLmMsdiAxLjQyIDIwMDgvMDgvMDMgMjM6NDk6MzAgdG9tIEV4cCAkIikKKworI2lmIGRlZmluZWQoU0NST0xMREVCVUcpIHx8IGRlZmluZWQoSEFTSERFQlVHKQorCisjIHVuZGVmIHNjcmVlbl9saW5lcworIyBkZWZpbmUgc2NyZWVuX2xpbmVzIE1BWExJTkVTCitOQ1VSU0VTX0VYUE9SVF9WQVIoaW50KQorb2xkbnVtc1tNQVhMSU5FU107CisjIGRlZmluZSBPTEROVU0obikJb2xkbnVtc1tuXQorIyBkZWZpbmUgX3RyYWNlZglwcmludGYKKyMgdW5kZWYgVFIKKyMgZGVmaW5lIFRSKG4sIGEpCWlmIChfbmNfdHJhY2luZyAmIChuKSkgeyBfdHJhY2VmIGEgOyBwdXRjaGFyKCdcbicpOyB9CisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIodW5zaWduZWQpIF9uY190cmFjaW5nOworCisjZWxzZSAvKiBubyBkZWJ1ZyAqLworCisvKiBPTEROVU0obikgaW5kaWNhdGVzIHdoaWNoIGxpbmUgd2lsbCBiZSBzaGlmdGVkIHRvIHRoZSBwb3NpdGlvbiBuLgorICAgaWYgT0xETlVNKG4pID09IF9ORVdJTkRFWCwgdGhlbiB0aGUgbGluZSBuIGluIG5ldywgbm90IHNoaWZ0ZWQgZnJvbQorICAgc29tZXdoZXJlLiAqLworTkNVUlNFU19FWFBPUlRfVkFSKGludCAqKQorX25jX29sZG51bXMgPSAwOwkJLyogb2Jzb2xldGU6IGtlZXAgZm9yIEFCSSBjb21wYXQgKi8KKworIyBpZiBVU0VfSEFTSE1BUAorIyAgZGVmaW5lIG9sZG51bXMgICAgICAgU1AtPl9vbGRudW1fbGlzdAorIyAgZGVmaW5lIE9MRE5VTShuKQlvbGRudW1zW25dCisjIGVsc2UJCQkJLyogIVVTRV9IQVNITUFQICovCisjICBkZWZpbmUgT0xETlVNKG4pCW5ld3Njci0+X2xpbmVbbl0ub2xkaW5kZXgKKyMgZW5kaWYJCQkJLyogIVVTRV9IQVNITUFQICovCisKKyNkZWZpbmUgT0xETlVNX1NJWkUgICAgIFNQLT5fb2xkbnVtX3NpemUKKworI2VuZGlmIC8qIGRlZmluZWQoU0NST0xMREVCVUcpIHx8IGRlZmluZWQoSEFTSERFQlVHKSAqLworCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3Njcm9sbF9vcHRpbWl6ZSh2b2lkKQorLyogc2Nyb2xsIG9wdGltaXphdGlvbiB0byB0cmFuc2Zvcm0gY3Vyc2NyIHRvIG5ld3NjciAqLworeworICAgIGludCBpOworICAgIGludCBzdGFydCwgZW5kLCBzaGlmdDsKKworICAgIFRSKFRSQUNFX0lDQUxMUywgKFRfQ0FMTEVEKCJfbmNfc2Nyb2xsX29wdGltaXplIikpKTsKKworI2lmICFkZWZpbmVkKFNDUk9MTERFQlVHKSAmJiAhZGVmaW5lZChIQVNIREVCVUcpCisjaWYgVVNFX0hBU0hNQVAKKyAgICAvKiBnZXQgZW5vdWdoIHN0b3JhZ2UgKi8KKyAgICBpZiAoT0xETlVNX1NJWkUgPCBzY3JlZW5fbGluZXMpIHsKKwlpbnQgKm5ld19vbGRudW1zID0gdHlwZVJlYWxsb2MoaW50LCBzY3JlZW5fbGluZXMsIG9sZG51bXMpOworCWlmICghbmV3X29sZG51bXMpCisJICAgIHJldHVybjsKKwlvbGRudW1zID0gbmV3X29sZG51bXM7CisJT0xETlVNX1NJWkUgPSBzY3JlZW5fbGluZXM7CisgICAgfQorICAgIC8qIGNhbGN1bGF0ZSB0aGUgaW5kaWNlcyAqLworICAgIF9uY19oYXNoX21hcCgpOworI2VuZGlmCisjZW5kaWYgLyogIWRlZmluZWQoU0NST0xMREVCVUcpICYmICFkZWZpbmVkKEhBU0hERUJVRykgKi8KKworI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSkpIHsKKwlfbmNfbGluZWR1bXAoKTsKKwlfbmNfdW5sb2NrX2dsb2JhbCh0cmFjZWYpOworICAgIH0KKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgLyogcGFzcyAxIC0gZnJvbSB0b3AgdG8gYm90dG9tIHNjcm9sbGluZyB1cCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBzY3JlZW5fbGluZXM7KSB7CisJd2hpbGUgKGkgPCBzY3JlZW5fbGluZXMgJiYgKE9MRE5VTShpKSA9PSBfTkVXSU5ERVggfHwgT0xETlVNKGkpIDw9IGkpKQorCSAgICBpKys7CisJaWYgKGkgPj0gc2NyZWVuX2xpbmVzKQorCSAgICBicmVhazsKKworCXNoaWZ0ID0gT0xETlVNKGkpIC0gaTsJLyogc2hpZnQgPiAwICovCisJc3RhcnQgPSBpOworCisJaSsrOworCXdoaWxlIChpIDwgc2NyZWVuX2xpbmVzICYmIE9MRE5VTShpKSAhPSBfTkVXSU5ERVggJiYgT0xETlVNKGkpIC0gaQorCSAgICAgICA9PSBzaGlmdCkKKwkgICAgaSsrOworCWVuZCA9IGkgLSAxICsgc2hpZnQ7CisKKwlUUihUUkFDRV9VUERBVEUgfCBUUkFDRV9NT1ZFLCAoInNjcm9sbCBbJWQsICVkXSBieSAlZCIsIHN0YXJ0LCBlbmQsIHNoaWZ0KSk7CisjaWYgIWRlZmluZWQoU0NST0xMREVCVUcpICYmICFkZWZpbmVkKEhBU0hERUJVRykKKwlpZiAoX25jX3Njcm9sbG4oc2hpZnQsIHN0YXJ0LCBlbmQsIHNjcmVlbl9saW5lcyAtIDEpID09IEVSUikgeworCSAgICBUUihUUkFDRV9VUERBVEUgfCBUUkFDRV9NT1ZFLCAoInVuYWJsZSB0byBzY3JvbGwiKSk7CisJICAgIGNvbnRpbnVlOworCX0KKyNlbmRpZiAvKiAhZGVmaW5lZChTQ1JPTExERUJVRykgJiYgIWRlZmluZWQoSEFTSERFQlVHKSAqLworICAgIH0KKworICAgIC8qIHBhc3MgMiAtIGZyb20gYm90dG9tIHRvIHRvcCBzY3JvbGxpbmcgZG93biAqLworICAgIGZvciAoaSA9IHNjcmVlbl9saW5lcyAtIDE7IGkgPj0gMDspIHsKKwl3aGlsZSAoaSA+PSAwICYmIChPTEROVU0oaSkgPT0gX05FV0lOREVYIHx8IE9MRE5VTShpKSA+PSBpKSkKKwkgICAgaS0tOworCWlmIChpIDwgMCkKKwkgICAgYnJlYWs7CisKKwlzaGlmdCA9IE9MRE5VTShpKSAtIGk7CS8qIHNoaWZ0IDwgMCAqLworCWVuZCA9IGk7CisKKwlpLS07CisJd2hpbGUgKGkgPj0gMCAmJiBPTEROVU0oaSkgIT0gX05FV0lOREVYICYmIE9MRE5VTShpKSAtIGkgPT0gc2hpZnQpCisJICAgIGktLTsKKwlzdGFydCA9IGkgKyAxIC0gKC1zaGlmdCk7CisKKwlUUihUUkFDRV9VUERBVEUgfCBUUkFDRV9NT1ZFLCAoInNjcm9sbCBbJWQsICVkXSBieSAlZCIsIHN0YXJ0LCBlbmQsIHNoaWZ0KSk7CisjaWYgIWRlZmluZWQoU0NST0xMREVCVUcpICYmICFkZWZpbmVkKEhBU0hERUJVRykKKwlpZiAoX25jX3Njcm9sbG4oc2hpZnQsIHN0YXJ0LCBlbmQsIHNjcmVlbl9saW5lcyAtIDEpID09IEVSUikgeworCSAgICBUUihUUkFDRV9VUERBVEUgfCBUUkFDRV9NT1ZFLCAoInVuYWJsZSB0byBzY3JvbGwiKSk7CisJICAgIGNvbnRpbnVlOworCX0KKyNlbmRpZiAvKiAhZGVmaW5lZChTQ1JPTExERUJVRykgJiYgIWRlZmluZWQoSEFTSERFQlVHKSAqLworICAgIH0KKyAgICBUUihUUkFDRV9JQ0FMTFMsIChUX1JFVFVSTigiIikpKTsKK30KKworI2lmIGRlZmluZWQoVFJBQ0UpIHx8IGRlZmluZWQoU0NST0xMREVCVUcpIHx8IGRlZmluZWQoSEFTSERFQlVHKQorTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19saW5lZHVtcCh2b2lkKQorLyogZHVtcCB0aGUgc3RhdGUgb2YgdGhlIHJlYWwgYW5kIHZpcnR1YWwgb2xkbnVtIGZpZWxkcyAqLworeworICAgIGludCBuOworICAgIGNoYXIgKmJ1ZiA9IDA7CisgICAgc2l6ZV90IHdhbnQgPSAoc2NyZWVuX2xpbmVzICsgMSkgKiA0OworCisgICAgaWYgKChidWYgPSB0eXBlTWFsbG9jKGNoYXIsIHdhbnQpKSAhPSAwKSB7CisKKwkodm9pZCkgc3RyY3B5KGJ1ZiwgInZpcnQiKTsKKwlmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2xpbmVzOyBuKyspCisJICAgICh2b2lkKSBzcHJpbnRmKGJ1ZiArIHN0cmxlbihidWYpLCAiICUwMmQiLCBPTEROVU0obikpOworCVRSKFRSQUNFX1VQREFURSB8IFRSQUNFX01PVkUsIChidWYpKTsKKwlmcmVlKGJ1Zik7CisgICAgfQorfQorI2VuZGlmIC8qIGRlZmluZWQoVFJBQ0UpIHx8IGRlZmluZWQoU0NST0xMREVCVUcpICovCisKKyNpZmRlZiBTQ1JPTExERUJVRworCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBjaGFyIGxpbmVbQlVGU0laXSwgKnN0OworCisjaWZkZWYgVFJBQ0UKKyAgICBfbmNfdHJhY2luZyA9IFRSQUNFX01PVkU7CisjZW5kaWYKKyAgICBmb3IgKDs7KSB7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2xpbmVzOyBuKyspCisJICAgIG9sZG51bXNbbl0gPSBfTkVXSU5ERVg7CisKKwkvKiBncmFiIHRoZSB0ZXN0IHZlY3RvciAqLworCWlmIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSA9PSAoY2hhciAqKSBOVUxMKQorCSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisKKwkvKiBwYXJzZSBpdCAqLworCW4gPSAwOworCWlmIChsaW5lWzBdID09ICcjJykgeworCSAgICAodm9pZCkgZnB1dHMobGluZSwgc3RkZXJyKTsKKwkgICAgY29udGludWU7CisJfQorCXN0ID0gc3RydG9rKGxpbmUsICIgIik7CisJZG8geworCSAgICBvbGRudW1zW24rK10gPSBhdG9pKHN0KTsKKwl9IHdoaWxlCisJICAgICgoc3QgPSBzdHJ0b2soKGNoYXIgKikgTlVMTCwgIiAiKSkgIT0gMCk7CisKKwkvKiBkaXNwbGF5IGl0ICovCisJKHZvaWQpIGZwdXRzKCJJbml0aWFsIGlucHV0OlxuIiwgc3RkZXJyKTsKKwlfbmNfbGluZWR1bXAoKTsKKworCV9uY19zY3JvbGxfb3B0aW1pemUoKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBTQ1JPTExERUJVRyAqLworCisvKiBoYXJkc2Nyb2xsLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9oYXNobWFwLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9oYXNobWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2MGRmNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L2hhc2htYXAuYwpAQCAtMCwwICsxLDU0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitOQU1FCisgICBoYXNobWFwLmMgLS0gZmlsbCBpbiBzY3JhbWJsZSB2ZWN0b3IgYmFzZWQgb24gdGV4dCBoYXNoZXMKKworU1lOT1BTSVMKKyAgIHZvaWQgX25jX2hhc2hfbWFwKHZvaWQpCisKK0RFU0NSSVBUSU9OOgorICAgVGhpcyBjb2RlIGF0dGVtcHRzIHRvIHJlY29nbml6ZSBwYWlycyBvZiBvbGQgYW5kIG5ldyBsaW5lcyBpbiB0aGUgcGh5c2ljYWwKK2FuZCB2aXJ0dWFsIHNjcmVlbnMuICBXaGVuIGEgbGluZSBwYWlyIGlzIHJlY29nbml6ZWQsIHRoZSBvbGQgbGluZSBpbmRleCBpcworcGxhY2VkIGluIHRoZSBvbGRpbmRleCBtZW1iZXIgb2YgdGhlIHZpcnR1YWwgc2NyZWVuIGxpbmUsIHRvIGJlIHVzZWQgYnkgdGhlCit2ZXJ0aWNhbC1tb3Rpb24gb3B0aW1pemVyIHBvcnRpb24gb2YgdGhlIHVwZGF0ZSBsb2dpYyAoc2VlIGhhcmRzY3JvbGwuYykuCisKKyAgIExpbmUgcGFpcnMgYXJlIHJlY29nbml6ZWQgYnkgYXBwbHlpbmcgYSBtb2RpZmllZCBIZWNrZWwncyBhbGdvcml0aG0sCitzcGVkIHVwIGJ5IGhhc2hpbmcuICBJZiBhIGxpbmUgaGFzaCBpcyB1bmlxdWUgaW4gYm90aCBzY3JlZW5zLCB0aG9zZQorbGluZXMgbXVzdCBiZSBhIHBhaXIuIFRoZW4gaWYgdGhlIGxpbmVzIGp1c3QgYmVmb3JlIG9yIGFmdGVyIHRoZSBwYWlyCithcmUgdGhlIHNhbWUgb3Igc2ltaWxhciwgdGhleSBhcmUgYSBwYWlyIHRvby4KKworICAgV2UgZG9uJ3Qgd29ycnkgYWJvdXQgZmFsc2UgcGFpcnMgcHJvZHVjZWQgYnkgaGFzaCBjb2xsaXNpb25zLCBvbiB0aGUKK2Fzc3VtcHRpb24gdGhhdCBzdWNoIGNhc2VzIGFyZSByYXJlIGFuZCB3aWxsIG9ubHkgbWFrZSB0aGUgbGF0dGVyIHN0YWdlcworb2YgdXBkYXRlIGxlc3MgZWZmaWNpZW50LCBub3QgaW50cm9kdWNlIGVycm9ycy4KKworSE9XIFRPIFRFU1QgVEhJUzoKKworVXNlIHRoZSBmb2xsb3dpbmcgcHJvZHVjdGlvbjoKKworaGFzaG1hcDogaGFzaG1hcC5jCisJJChDQykgLWcgLURIQVNIREVCVUcgaGFzaG1hcC5jIGhhcmRzY3JvbGwuYyAuLi9vYmplY3RzL2xpYl90cmFjZS5vIC1vIGhhc2htYXAKKworQVVUSE9SCisgICAgRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+LCBNYXkgMTk5NgorICAgIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QHlhcnMuZnJlZS5uZXQ+LCAxOTk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CQkvKiBmb3IgYmFja19jb2xvcl9lcmFzZSAqLworCitNT0RVTEVfSUQoIiRJZDogaGFzaG1hcC5jLHYgMS41NiAyMDA3LzEwLzEzIDE4OjQ3OjI1IE1pcm9zbGF2LkxpY2h2YXIgRXhwICQiKQorCisjaWZkZWYgSEFTSERFQlVHCisKKyMgZGVmaW5lIF90cmFjZWYJcHJpbnRmCisjIHVuZGVmIFRSCisjIGRlZmluZSBUUihuLCBhKQlpZiAoX25jX3RyYWNpbmcgJiAobikpIHsgX3RyYWNlZiBhIDsgcHV0Y2hhcignXG4nKTsgfQorIyB1bmRlZiBzY3JlZW5fbGluZXMKKyMgZGVmaW5lIHNjcmVlbl9saW5lcyBNQVhMSU5FUworIyBkZWZpbmUgVEVYVFdJRFRICTEKK2ludCBvbGRudW1zW01BWExJTkVTXSwgcmVhbGxpbmVzW01BWExJTkVTXTsKK3N0YXRpYyBOQ1VSU0VTX0NIX1Qgb2xkdGV4dFtNQVhMSU5FU11bVEVYVFdJRFRIXTsKK3N0YXRpYyBOQ1VSU0VTX0NIX1QgbmV3dGV4dFtNQVhMSU5FU11bVEVYVFdJRFRIXTsKKyMgZGVmaW5lIE9MRE5VTShuKQlvbGRudW1zW25dCisjIGRlZmluZSBPTERURVhUKG4pCW9sZHRleHRbbl0KKyMgZGVmaW5lIE5FV1RFWFQobSkJbmV3dGV4dFttXQorIyBkZWZpbmUgUEVORElORyhuKSAgICAgMQorCisjZWxzZSAvKiAhSEFTSERFQlVHICovCisKKyMgZGVmaW5lIE9MRE5VTShuKQlTUC0+X29sZG51bV9saXN0W25dCisjIGRlZmluZSBPTERURVhUKG4pCWN1cnNjci0+X2xpbmVbbl0udGV4dAorIyBkZWZpbmUgTkVXVEVYVChtKQluZXdzY3ItPl9saW5lW21dLnRleHQKKyMgZGVmaW5lIFRFWFRXSURUSAkoY3Vyc2NyLT5fbWF4eCsxKQorIyBkZWZpbmUgUEVORElORyhuKSAgICAgKG5ld3Njci0+X2xpbmVbbl0uZmlyc3RjaGFyICE9IF9OT0NIQU5HRSkKKworI2VuZGlmIC8qICFIQVNIREVCVUcgKi8KKworI2RlZmluZSBvbGRoYXNoCQkoU1AtPm9sZGhhc2gpCisjZGVmaW5lIG5ld2hhc2gJCShTUC0+bmV3aGFzaCkKKyNkZWZpbmUgaGFzaHRhYgkJKFNQLT5oYXNodGFiKQorI2RlZmluZSBsaW5lc19hbGxvYwkoU1AtPmhhc2h0YWJfbGVuKQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNkZWZpbmUgSEFTSF9WQUwoY2gpIChjaC5jaGFyc1swXSkKKyNlbHNlCisjZGVmaW5lIEhBU0hfVkFMKGNoKSAoY2gpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IE5DVVJTRVNfQ0hfVCBibGFua2NoYXIgPSBOZXdDaGFyKEJMQU5LX1RFWFQpOworCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdW5zaWduZWQgbG9uZworaGFzaChOQ1VSU0VTX0NIX1QgKiB0ZXh0KQoreworICAgIGludCBpOworICAgIE5DVVJTRVNfQ0hfVCBjaDsKKyAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7CisgICAgZm9yIChpID0gVEVYVFdJRFRIOyBpID4gMDsgaS0tKSB7CisJY2ggPSAqdGV4dCsrOworCXJlc3VsdCArPSAocmVzdWx0IDw8IDUpICsgSEFTSF9WQUwoY2gpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiBhcHByb3hpbWF0ZSB1cGRhdGUgY29zdCAqLworc3RhdGljIGludAordXBkYXRlX2Nvc3QoTkNVUlNFU19DSF9UICogZnJvbSwgTkNVUlNFU19DSF9UICogdG8pCit7CisgICAgaW50IGNvc3QgPSAwOworICAgIGludCBpOworCisgICAgZm9yIChpID0gVEVYVFdJRFRIOyBpID4gMDsgaS0tLCBmcm9tKyssIHRvKyspCisJaWYgKCEoQ2hhckVxKCpmcm9tLCAqdG8pKSkKKwkgICAgY29zdCsrOworCisgICAgcmV0dXJuIGNvc3Q7Cit9CisKK3N0YXRpYyBpbnQKK3VwZGF0ZV9jb3N0X2Zyb21fYmxhbmsoTkNVUlNFU19DSF9UICogdG8pCit7CisgICAgaW50IGNvc3QgPSAwOworICAgIGludCBpOworICAgIE5DVVJTRVNfQ0hfVCBibGFuayA9IGJsYW5rY2hhcjsKKworICAgIGlmIChiYWNrX2NvbG9yX2VyYXNlKQorCVNldFBhaXIoYmxhbmssIEdldFBhaXIoc3Rkc2NyLT5fbmNfYmtnZCkpOworCisgICAgZm9yIChpID0gVEVYVFdJRFRIOyBpID4gMDsgaS0tLCB0bysrKQorCWlmICghKENoYXJFcShibGFuaywgKnRvKSkpCisJICAgIGNvc3QrKzsKKworICAgIHJldHVybiBjb3N0OworfQorCisvKgorICogUmV0dXJucyB0cnVlIHdoZW4gbW92aW5nIGxpbmUgJ2Zyb20nIHRvIGxpbmUgJ3RvJyBzZWVtcyB0byBiZSBjb3N0CisgKiBlZmZlY3RpdmUuICdibGFuaycgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxpbmUgJ3RvJyB3b3VsZCBiZWNvbWUgYmxhbmsuCisgKi8KK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBib29sCitjb3N0X2VmZmVjdGl2ZShjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50IHRvLCBjb25zdCBib29sIGJsYW5rKQoreworICAgIGludCBuZXdfZnJvbTsKKworICAgIGlmIChmcm9tID09IHRvKQorCXJldHVybiBGQUxTRTsKKworICAgIG5ld19mcm9tID0gT0xETlVNKGZyb20pOworICAgIGlmIChuZXdfZnJvbSA9PSBfTkVXSU5ERVgpCisJbmV3X2Zyb20gPSBmcm9tOworCisgICAgLyoKKyAgICAgKiBPbiB0aGUgbGVmdCBzaWRlIG9mID49IGlzIHRoZSBjb3N0IGJlZm9yZSBtb3Zpbmc7CisgICAgICogb24gdGhlIHJpZ2h0IHNpZGUgLS0gY29zdCBhZnRlciBtb3ZpbmcuCisgICAgICovCisgICAgcmV0dXJuICgoKGJsYW5rID8gdXBkYXRlX2Nvc3RfZnJvbV9ibGFuayhORVdURVhUKHRvKSkKKwkgICAgICA6IHVwZGF0ZV9jb3N0KE9MRFRFWFQodG8pLCBORVdURVhUKHRvKSkpCisJICAgICArIHVwZGF0ZV9jb3N0KE9MRFRFWFQobmV3X2Zyb20pLCBORVdURVhUKGZyb20pKSkKKwkgICAgPj0gKChuZXdfZnJvbSA9PSBmcm9tID8gdXBkYXRlX2Nvc3RfZnJvbV9ibGFuayhORVdURVhUKGZyb20pKQorCQkgOiB1cGRhdGVfY29zdChPTERURVhUKG5ld19mcm9tKSwgTkVXVEVYVChmcm9tKSkpCisJCSsgdXBkYXRlX2Nvc3QoT0xEVEVYVChmcm9tKSwgTkVXVEVYVCh0bykpKSkgPyBUUlVFIDogRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitncm93X2h1bmtzKHZvaWQpCit7CisgICAgaW50IHN0YXJ0LCBlbmQsIHNoaWZ0OworICAgIGludCBiYWNrX2xpbWl0LCBmb3J3YXJkX2xpbWl0OwkvKiBsaW1pdHMgZm9yIGNlbGxzIHRvIGZpbGwgKi8KKyAgICBpbnQgYmFja19yZWZfbGltaXQsIGZvcndhcmRfcmVmX2xpbWl0OwkvKiBsaW1pdHMgZm9yIHJlZnJlbmNlcyAqLworICAgIGludCBpOworICAgIGludCBuZXh0X2h1bms7CisKKyAgICAvKgorICAgICAqIFRoaXMgaXMgdHJpY2t5IHBhcnQuICBXZSBoYXZlIHVuaXF1ZSBwYWlycyB0byB1c2UgYXMgYW5jaG9ycy4KKyAgICAgKiBVc2UgdGhlc2UgdG8gZGVkdWNlIHRoZSBwcmVzZW5jZSBvZiBzcGFucyBvZiBpZGVudGljYWwgbGluZXMuCisgICAgICovCisgICAgYmFja19saW1pdCA9IDA7CisgICAgYmFja19yZWZfbGltaXQgPSAwOworCisgICAgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBzY3JlZW5fbGluZXMgJiYgT0xETlVNKGkpID09IF9ORVdJTkRFWCkKKwlpKys7CisgICAgZm9yICg7IGkgPCBzY3JlZW5fbGluZXM7IGkgPSBuZXh0X2h1bmspIHsKKwlzdGFydCA9IGk7CisJc2hpZnQgPSBPTEROVU0oaSkgLSBpOworCisJLyogZ2V0IGZvcndhcmQgbGltaXQgKi8KKwlpID0gc3RhcnQgKyAxOworCXdoaWxlIChpIDwgc2NyZWVuX2xpbmVzICYmIE9MRE5VTShpKSAhPSBfTkVXSU5ERVggJiYgT0xETlVNKGkpIC0gaQorCSAgICAgICA9PSBzaGlmdCkKKwkgICAgaSsrOworCWVuZCA9IGk7CisJd2hpbGUgKGkgPCBzY3JlZW5fbGluZXMgJiYgT0xETlVNKGkpID09IF9ORVdJTkRFWCkKKwkgICAgaSsrOworCW5leHRfaHVuayA9IGk7CisJZm9yd2FyZF9saW1pdCA9IGk7CisJaWYgKGkgPj0gc2NyZWVuX2xpbmVzIHx8IE9MRE5VTShpKSA+PSBpKQorCSAgICBmb3J3YXJkX3JlZl9saW1pdCA9IGk7CisJZWxzZQorCSAgICBmb3J3YXJkX3JlZl9saW1pdCA9IE9MRE5VTShpKTsKKworCWkgPSBzdGFydCAtIDE7CisJLyogZ3JvdyBiYWNrICovCisJaWYgKHNoaWZ0IDwgMCkKKwkgICAgYmFja19saW1pdCA9IGJhY2tfcmVmX2xpbWl0ICsgKC1zaGlmdCk7CisJd2hpbGUgKGkgPj0gYmFja19saW1pdCkgeworCSAgICBpZiAobmV3aGFzaFtpXSA9PSBvbGRoYXNoW2kgKyBzaGlmdF0KKwkJfHwgY29zdF9lZmZlY3RpdmUoaSArIHNoaWZ0LCBpLCBzaGlmdCA8IDApKSB7CisJCU9MRE5VTShpKSA9IGkgKyBzaGlmdDsKKwkJVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwKKwkJICAgKCJjb25uZWN0ZWQgbmV3IGxpbmUgJWQgdG8gb2xkIGxpbmUgJWQgKGJhY2t3YXJkIGNvbnRpbnVhdGlvbikiLAorCQkgICAgaSwgaSArIHNoaWZ0KSk7CisJICAgIH0gZWxzZSB7CisJCVRSKFRSQUNFX1VQREFURSB8IFRSQUNFX01PVkUsCisJCSAgICgibm90IGNvbm5lY3RpbmcgbmV3IGxpbmUgJWQgdG8gb2xkIGxpbmUgJWQgKGJhY2t3YXJkIGNvbnRpbnVhdGlvbikiLAorCQkgICAgaSwgaSArIHNoaWZ0KSk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGktLTsKKwl9CisKKwlpID0gZW5kOworCS8qIGdyb3cgZm9yd2FyZCAqLworCWlmIChzaGlmdCA+IDApCisJICAgIGZvcndhcmRfbGltaXQgPSBmb3J3YXJkX3JlZl9saW1pdCAtIHNoaWZ0OworCXdoaWxlIChpIDwgZm9yd2FyZF9saW1pdCkgeworCSAgICBpZiAobmV3aGFzaFtpXSA9PSBvbGRoYXNoW2kgKyBzaGlmdF0KKwkJfHwgY29zdF9lZmZlY3RpdmUoaSArIHNoaWZ0LCBpLCBzaGlmdCA+IDApKSB7CisJCU9MRE5VTShpKSA9IGkgKyBzaGlmdDsKKwkJVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwKKwkJICAgKCJjb25uZWN0ZWQgbmV3IGxpbmUgJWQgdG8gb2xkIGxpbmUgJWQgKGZvcndhcmQgY29udGludWF0aW9uKSIsCisJCSAgICBpLCBpICsgc2hpZnQpKTsKKwkgICAgfSBlbHNlIHsKKwkJVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwKKwkJICAgKCJub3QgY29ubmVjdGluZyBuZXcgbGluZSAlZCB0byBvbGQgbGluZSAlZCAoZm9yd2FyZCBjb250aW51YXRpb24pIiwKKwkJICAgIGksIGkgKyBzaGlmdCkpOworCQlicmVhazsKKwkgICAgfQorCSAgICBpKys7CisJfQorCisJYmFja19yZWZfbGltaXQgPSBiYWNrX2xpbWl0ID0gaTsKKwlpZiAoc2hpZnQgPiAwKQorCSAgICBiYWNrX3JlZl9saW1pdCArPSBzaGlmdDsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfaGFzaF9tYXAodm9pZCkKK3sKKyAgICBIQVNITUFQICpzcDsKKyAgICByZWdpc3RlciBpbnQgaTsKKyAgICBpbnQgc3RhcnQsIHNoaWZ0LCBzaXplOworCisgICAgaWYgKHNjcmVlbl9saW5lcyA+IGxpbmVzX2FsbG9jKSB7CisJaWYgKGhhc2h0YWIpCisJICAgIGZyZWUoaGFzaHRhYik7CisJaGFzaHRhYiA9IHR5cGVNYWxsb2MoSEFTSE1BUCwgKHNjcmVlbl9saW5lcyArIDEpICogMik7CisJaWYgKCFoYXNodGFiKSB7CisJICAgIGlmIChvbGRoYXNoKSB7CisJCUZyZWVBbmROdWxsKG9sZGhhc2gpOworCSAgICB9CisJICAgIGxpbmVzX2FsbG9jID0gMDsKKwkgICAgcmV0dXJuOworCX0KKwlsaW5lc19hbGxvYyA9IHNjcmVlbl9saW5lczsKKyAgICB9CisKKyAgICBpZiAob2xkaGFzaCAmJiBuZXdoYXNoKSB7CisJLyogcmUtaGFzaCBvbmx5IGNoYW5nZWQgbGluZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2NyZWVuX2xpbmVzOyBpKyspIHsKKwkgICAgaWYgKFBFTkRJTkcoaSkpCisJCW5ld2hhc2hbaV0gPSBoYXNoKE5FV1RFWFQoaSkpOworCX0KKyAgICB9IGVsc2UgeworCS8qIHJlLWhhc2ggYWxsICovCisJaWYgKG9sZGhhc2ggPT0gMCkKKwkgICAgb2xkaGFzaCA9IHR5cGVDYWxsb2ModW5zaWduZWQgbG9uZywgKHVuc2lnbmVkKSBzY3JlZW5fbGluZXMpOworCWlmIChuZXdoYXNoID09IDApCisJICAgIG5ld2hhc2ggPSB0eXBlQ2FsbG9jKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCkgc2NyZWVuX2xpbmVzKTsKKwlpZiAoIW9sZGhhc2ggfHwgIW5ld2hhc2gpCisJICAgIHJldHVybjsJCS8qIG1hbGxvYyBmYWlsdXJlICovCisJZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJICAgIG5ld2hhc2hbaV0gPSBoYXNoKE5FV1RFWFQoaSkpOworCSAgICBvbGRoYXNoW2ldID0gaGFzaChPTERURVhUKGkpKTsKKwl9CisgICAgfQorCisjaWZkZWYgSEFTSF9WRVJJRlkKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2NyZWVuX2xpbmVzOyBpKyspIHsKKwlpZiAobmV3aGFzaFtpXSAhPSBoYXNoKE5FV1RFWFQoaSkpKQorCSAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGluIG5ld2hhc2hbJWRdXG4iLCBpKTsKKwlpZiAob2xkaGFzaFtpXSAhPSBoYXNoKE9MRFRFWFQoaSkpKQorCSAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGluIG9sZGhhc2hbJWRdXG4iLCBpKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogU2V0IHVwIGFuZCBjb3VudCBsaW5lLWhhc2ggdmFsdWVzLgorICAgICAqLworICAgIG1lbXNldChoYXNodGFiLCAnXDAnLCBzaXplb2YoKmhhc2h0YWIpICogKHNjcmVlbl9saW5lcyArIDEpICogMik7CisgICAgZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJdW5zaWduZWQgbG9uZyBoYXNodmFsID0gb2xkaGFzaFtpXTsKKworCWZvciAoc3AgPSBoYXNodGFiOyBzcC0+aGFzaHZhbDsgc3ArKykKKwkgICAgaWYgKHNwLT5oYXNodmFsID09IGhhc2h2YWwpCisJCWJyZWFrOworCXNwLT5oYXNodmFsID0gaGFzaHZhbDsJLyogaW4gY2FzZSB0aGlzIGlzIGEgbmV3IGVudHJ5ICovCisJc3AtPm9sZGNvdW50Kys7CisJc3AtPm9sZGluZGV4ID0gaTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJdW5zaWduZWQgbG9uZyBoYXNodmFsID0gbmV3aGFzaFtpXTsKKworCWZvciAoc3AgPSBoYXNodGFiOyBzcC0+aGFzaHZhbDsgc3ArKykKKwkgICAgaWYgKHNwLT5oYXNodmFsID09IGhhc2h2YWwpCisJCWJyZWFrOworCXNwLT5oYXNodmFsID0gaGFzaHZhbDsJLyogaW4gY2FzZSB0aGlzIGlzIGEgbmV3IGVudHJ5ICovCisJc3AtPm5ld2NvdW50Kys7CisJc3AtPm5ld2luZGV4ID0gaTsKKworCU9MRE5VTShpKSA9IF9ORVdJTkRFWDsJLyogaW5pdGlhbGl6ZSBvbGQgaW5kaWNlcyBhcnJheSAqLworICAgIH0KKworICAgIC8qCisgICAgICogTWFyayBsaW5lIHBhaXJzIGNvcnJlc3BvbmRpbmcgdG8gdW5pcXVlIGhhc2ggcGFpcnMuCisgICAgICoKKyAgICAgKiBXZSBkb24ndCBtYXJrIGxpbmVzIHdpdGggb2Zmc2V0IDAsIGJlY2F1c2UgaXQgY2FuIG1ha2UgZmFpbAorICAgICAqIGV4dGVuZGluZyBodW5rcyBieSBjb3N0X2VmZmVjdGl2ZS4gT3RoZXJ3aXNlLCBpdCBkb2VzIG5vdAorICAgICAqIGhhdmUgYW55IHNpZGUgZWZmZWN0cy4KKyAgICAgKi8KKyAgICBmb3IgKHNwID0gaGFzaHRhYjsgc3AtPmhhc2h2YWw7IHNwKyspCisJaWYgKHNwLT5vbGRjb3VudCA9PSAxICYmIHNwLT5uZXdjb3VudCA9PSAxCisJICAgICYmIHNwLT5vbGRpbmRleCAhPSBzcC0+bmV3aW5kZXgpIHsKKwkgICAgVFIoVFJBQ0VfVVBEQVRFIHwgVFJBQ0VfTU9WRSwKKwkgICAgICAgKCJuZXcgbGluZSAlZCBpcyBoYXNoLWlkZW50aWNhbCB0byBvbGQgbGluZSAlZCAodW5pcXVlKSIsCisJCXNwLT5uZXdpbmRleCwgc3AtPm9sZGluZGV4KSk7CisJICAgIE9MRE5VTShzcC0+bmV3aW5kZXgpID0gc3AtPm9sZGluZGV4OworCX0KKworICAgIGdyb3dfaHVua3MoKTsKKworICAgIC8qCisgICAgICogRWxpbWluYXRlIGJhZCBvciBpbXBvc3NpYmxlIHNoaWZ0cyAtLSB0aGlzIGluY2x1ZGVzIHJlbW92aW5nCisgICAgICogdGhvc2UgaHVua3Mgd2hpY2ggY291bGQgbm90IGdyb3cgYmVjYXVzZSBvZiBjb25mbGljdHMsIGFzIHdlbGwKKyAgICAgKiB0aG9zZSB3aGljaCBhcmUgdG8gYmUgbW92ZWQgdG9vIGZhciwgdGhleSBhcmUgbGlrZWx5IHRvIGRlc3Ryb3kKKyAgICAgKiBtb3JlIHRoYW4gY2FycnkuCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczspIHsKKwl3aGlsZSAoaSA8IHNjcmVlbl9saW5lcyAmJiBPTEROVU0oaSkgPT0gX05FV0lOREVYKQorCSAgICBpKys7CisJaWYgKGkgPj0gc2NyZWVuX2xpbmVzKQorCSAgICBicmVhazsKKwlzdGFydCA9IGk7CisJc2hpZnQgPSBPTEROVU0oaSkgLSBpOworCWkrKzsKKwl3aGlsZSAoaSA8IHNjcmVlbl9saW5lcyAmJiBPTEROVU0oaSkgIT0gX05FV0lOREVYICYmIE9MRE5VTShpKSAtIGkKKwkgICAgICAgPT0gc2hpZnQpCisJICAgIGkrKzsKKwlzaXplID0gaSAtIHN0YXJ0OworCWlmIChzaXplIDwgMyB8fCBzaXplICsgbWluKHNpemUgLyA4LCAyKSA8IGFicyhzaGlmdCkpIHsKKwkgICAgd2hpbGUgKHN0YXJ0IDwgaSkgeworCQlPTEROVU0oc3RhcnQpID0gX05FV0lOREVYOworCQlzdGFydCsrOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIEFmdGVyIGNsZWFyaW5nIGludmFsaWQgaHVua3MsIHRyeSBncm93IHRoZSByZXN0LiAqLworICAgIGdyb3dfaHVua3MoKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19tYWtlX29sZGhhc2goaW50IGkpCit7CisgICAgaWYgKG9sZGhhc2gpCisJb2xkaGFzaFtpXSA9IGhhc2goT0xEVEVYVChpKSk7Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2Nyb2xsX29sZGhhc2goaW50IG4sIGludCB0b3AsIGludCBib3QpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgaW50IGk7CisKKyAgICBpZiAoIW9sZGhhc2gpCisJcmV0dXJuOworCisgICAgc2l6ZSA9IHNpemVvZigqb2xkaGFzaCkgKiAoYm90IC0gdG9wICsgMSAtIGFicyhuKSk7CisgICAgaWYgKG4gPiAwKSB7CisJbWVtbW92ZShvbGRoYXNoICsgdG9wLCBvbGRoYXNoICsgdG9wICsgbiwgc2l6ZSk7CisJZm9yIChpID0gYm90OyBpID4gYm90IC0gbjsgaS0tKQorCSAgICBvbGRoYXNoW2ldID0gaGFzaChPTERURVhUKGkpKTsKKyAgICB9IGVsc2UgeworCW1lbW1vdmUob2xkaGFzaCArIHRvcCAtIG4sIG9sZGhhc2ggKyB0b3AsIHNpemUpOworCWZvciAoaSA9IHRvcDsgaSA8IHRvcCAtIG47IGkrKykKKwkgICAgb2xkaGFzaFtpXSA9IGhhc2goT0xEVEVYVChpKSk7CisgICAgfQorfQorCisjaWZkZWYgSEFTSERFQlVHCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdGFibGVbXSA9CisgICAgeworCSJoYXNobWFwIHRlc3QtZHJpdmVyIiwKKwkiIiwKKwkiIyAgY29tbWVudCIsCisJImwgIGdldCBpbml0aWFsIGxpbmUgbnVtYmVyIHZlY3RvciIsCisJIm4gIHVzZSBmb2xsb3dpbmcgbGV0dGVycyBhcyB0ZXh0IG9mIG5ldyBsaW5lcyIsCisJIm8gIHVzZSBmb2xsb3dpbmcgbGV0dGVycyBhcyB0ZXh0IG9mIG9sZCBsaW5lcyIsCisJImQgIGR1bXAgc3RhdGUgb2YgdGVzdCBhcnJheXMiLAorCSJoICBhcHBseSBoYXNoIG1hcHBlciBhbmQgc2VlIHNjcm9sbCBvcHRpbWl6YXRpb24iLAorCSI/ICB0aGlzIG1lc3NhZ2UiCisgICAgfTsKKyAgICBzaXplX3QgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHRhYmxlKSAvIHNpemVvZih0YWJsZVswXSk7IG4rKykKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0YWJsZVtuXSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGNoYXIgbGluZVtCVUZTSVpdLCAqc3Q7CisgICAgaW50IG47CisKKyAgICBpZiAoc2V0dXB0ZXJtKE5VTEwsIGZpbGVubyhzdGRvdXQpLCAoaW50ICopIDApID09IEVSUikKKwlyZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICh2b2lkKSBfbmNfYWxsb2Nfc2NyZWVuKCk7CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2xpbmVzOyBuKyspIHsKKwlyZWFsbGluZXNbbl0gPSBuOworCW9sZG51bXNbbl0gPSBfTkVXSU5ERVg7CisJQ2hhck9mKG9sZHRleHRbbl1bMF0pID0gQ2hhck9mKG5ld3RleHRbbl1bMF0pID0gJy4nOworICAgIH0KKworICAgIGlmIChpc2F0dHkoZmlsZW5vKHN0ZGluKSkpCisJdXNhZ2UoKTsKKworI2lmZGVmIFRSQUNFCisgICAgX25jX3RyYWNpbmcgPSBUUkFDRV9NT1ZFOworI2VuZGlmCisgICAgZm9yICg7OykgeworCS8qIGdyYWIgYSB0ZXN0IGNvbW1hbmQgKi8KKwlpZiAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikgPT0gKGNoYXIgKikgTlVMTCkKKwkgICAgYnJlYWs7CisKKwlzd2l0Y2ggKGxpbmVbMF0pIHsKKwljYXNlICcjJzoJCS8qIGNvbW1lbnQgKi8KKwkgICAgKHZvaWQpIGZwdXRzKGxpbmUsIHN0ZGVycik7CisJICAgIGJyZWFrOworCisJY2FzZSAnbCc6CQkvKiBnZXQgaW5pdGlhbCBsaW5lIG51bWJlciB2ZWN0b3IgKi8KKwkgICAgZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKSB7CisJCXJlYWxsaW5lc1tuXSA9IG47CisJCW9sZG51bXNbbl0gPSBfTkVXSU5ERVg7CisJICAgIH0KKwkgICAgbiA9IDA7CisJICAgIHN0ID0gc3RydG9rKGxpbmUsICIgIik7CisJICAgIGRvIHsKKwkJb2xkbnVtc1tuKytdID0gYXRvaShzdCk7CisJICAgIH0gd2hpbGUKKwkJKChzdCA9IHN0cnRvaygoY2hhciAqKSBOVUxMLCAiICIpKSAhPSAwKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICduJzoJCS8qIHVzZSBmb2xsb3dpbmcgbGV0dGVycyBhcyB0ZXh0IG9mIG5ldyBsaW5lcyAqLworCSAgICBmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2xpbmVzOyBuKyspCisJCUNoYXJPZihuZXd0ZXh0W25dWzBdKSA9ICcuJzsKKwkgICAgZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKQorCQlpZiAobGluZVtuICsgMV0gPT0gJ1xuJykKKwkJICAgIGJyZWFrOworCQllbHNlCisJCSAgICBDaGFyT2YobmV3dGV4dFtuXVswXSkgPSBsaW5lW24gKyAxXTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdvJzoJCS8qIHVzZSBmb2xsb3dpbmcgbGV0dGVycyBhcyB0ZXh0IG9mIG9sZCBsaW5lcyAqLworCSAgICBmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2xpbmVzOyBuKyspCisJCUNoYXJPZihvbGR0ZXh0W25dWzBdKSA9ICcuJzsKKwkgICAgZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKQorCQlpZiAobGluZVtuICsgMV0gPT0gJ1xuJykKKwkJICAgIGJyZWFrOworCQllbHNlCisJCSAgICBDaGFyT2Yob2xkdGV4dFtuXVswXSkgPSBsaW5lW24gKyAxXTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdkJzoJCS8qIGR1bXAgc3RhdGUgb2YgdGVzdCBhcnJheXMgKi8KKyNpZmRlZiBUUkFDRQorCSAgICBfbmNfbGluZWR1bXAoKTsKKyNlbmRpZgorCSAgICAodm9pZCkgZnB1dHMoIk9sZCBsaW5lczogWyIsIHN0ZG91dCk7CisJICAgIGZvciAobiA9IDA7IG4gPCBzY3JlZW5fbGluZXM7IG4rKykKKwkJcHV0Y2hhcihDaGFyT2Yob2xkdGV4dFtuXVswXSkpOworCSAgICBwdXRjaGFyKCddJyk7CisJICAgIHB1dGNoYXIoJ1xuJyk7CisJICAgICh2b2lkKSBmcHV0cygiTmV3IGxpbmVzOiBbIiwgc3Rkb3V0KTsKKwkgICAgZm9yIChuID0gMDsgbiA8IHNjcmVlbl9saW5lczsgbisrKQorCQlwdXRjaGFyKENoYXJPZihuZXd0ZXh0W25dWzBdKSk7CisJICAgIHB1dGNoYXIoJ10nKTsKKwkgICAgcHV0Y2hhcignXG4nKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdoJzoJCS8qIGFwcGx5IGhhc2ggbWFwcGVyIGFuZCBzZWUgc2Nyb2xsIG9wdGltaXphdGlvbiAqLworCSAgICBfbmNfaGFzaF9tYXAoKTsKKwkgICAgKHZvaWQpIGZwdXRzKCJSZXN1bHQ6XG4iLCBzdGRlcnIpOworI2lmZGVmIFRSQUNFCisJICAgIF9uY19saW5lZHVtcCgpOworI2VuZGlmCisJICAgIF9uY19zY3JvbGxfb3B0aW1pemUoKTsKKwkgICAgKHZvaWQpIGZwdXRzKCJEb25lLlxuIiwgc3RkZXJyKTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlICc/JzoKKwkgICAgdXNhZ2UoKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyNpZiBOT19MRUFLUworICAgIF9uY19mcmVlX2FuZF9leGl0KEVYSVRfU1VDQ0VTUyk7CisjZWxzZQorICAgIHJldHVybiBFWElUX1NVQ0NFU1M7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIEhBU0hERUJVRyAqLworCisvKiBoYXNobWFwLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9saWJfbXZjdXIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L2xpYl9tdmN1ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjZmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9saWJfbXZjdXIuYwpAQCAtMCwwICsxLDEyNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9tdmN1ci5jCisqKgorKioJVGhlIHJvdXRpbmVzIGZvciBtb3ZpbmcgdGhlIHBoeXNpY2FsIGN1cnNvciBhbmQgc2Nyb2xsaW5nOgorKioKKyoqCQl2b2lkIF9uY19tdmN1cl9pbml0KHZvaWQpCisqKgorKioJCXZvaWQgX25jX212Y3VyX3Jlc3VtZSh2b2lkKQorKioKKyoqCQlpbnQgbXZjdXIoaW50IG9sZF95LCBpbnQgb2xkX3gsIGludCBuZXdfeSwgaW50IG5ld194KQorKioKKyoqCQl2b2lkIF9uY19tdmN1cl93cmFwKHZvaWQpCisqKgorKiogQ29tcGFyaXNvbnMgd2l0aCBvbGRlciBtb3ZlbWVudCBvcHRpbWl6ZXJzOgorKiogICAgU1ZyMyBjdXJzZXMgbXZjdXIoKSBjYW4ndCB1c2UgY3Vyc29yX3RvX2xsIG9yIGF1dG9fbGVmdF9tYXJnaW4uCisqKiAgICA0LjRCU0QgY3Vyc2VzIGNhbid0IHVzZSBjdXUvY3VkL2N1Zi9jdWIvaHBhL3ZwYS90YWIvY2J0IGZvciBsb2NhbAorKiogbW90aW9ucy4gIEl0IGRvZXNuJ3QgdXNlIHRhY3RpY3MgYmFzZWQgb24gYXV0b19sZWZ0X21hcmdpbi4gIFdlaXJkbHkKKyoqIGVub3VnaCwgaXQgZG9lc24ndCB1c2UgaXRzIG93biBoYXJkd2FyZS1zY3JvbGxpbmcgcm91dGluZSB0byBzY3JvbGwgdXAKKyoqIGRlc3RpbmF0aW9uIGxpbmVzIGZvciBvdXQtb2YtYm91bmRzIGFkZHJlc3NlcyEKKyoqICAgIG9sZCBuY3Vyc2VzIG9wdGltaXplcjogbGVzcyBhY2N1cmF0ZSBjb3N0IGNvbXB1dGF0aW9ucyAoaW4gZmFjdCwKKyoqIGl0IHdhcyBicm9rZW4gYW5kIGhhZCB0byBiZSBjb21tZW50ZWQgb3V0ISkuCisqKgorKiogQ29tcGlsZSB3aXRoIC1ETUFJTiB0byBidWlsZCBhbiBpbnRlcmFjdGl2ZSB0ZXN0ZXIvdGltZXIgZm9yIHRoZSBtb3ZlbWVudAorKiogb3B0aW1pemVyLiAgWW91IGNhbiB1c2UgaXQgdG8gaW52ZXN0aWdhdGUgdGhlIG9wdGltaXplcidzIGJlaGF2aW9yLgorKiogWW91IGNhbiBhbHNvIHVzZSBpdCBmb3IgdHVuaW5nIHRoZSBmb3JtdWxhcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyCisqKiBvciBub3QgZnVsbCBvcHRpbWl6YXRpb24gaXMgYXR0ZW1wdGVkLgorKioKKyoqIFRoaXMgY29kZSBoYXMgYSBuYXN0eSB0ZW5kZW5jeSB0byBmaW5kIGJ1Z3MgaW4gdGVybWluZm8gZW50cmllcywgYmVjYXVzZSBpdAorKiogZXhlcmNpc2VzIHRoZSBub24tY3VwIG1vdmVtZW50IGNhcGFiaWxpdGllcyBoZWF2aWx5LiAgSWYgeW91IHRoaW5rIHlvdSd2ZQorKiogZm91bmQgYSBidWcsIHRyeSBkZWxldGluZyBzdWJzZXRzIG9mIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIChhcnJhbmdlZAorKiogaW4gZGVjcmVhc2luZyBvcmRlciBvZiBzdXNwaWNpb3VzbmVzcyk6IGl0LCB0YWIsIGNidCwgaHBhLCB2cGEsIGN1dSwgY3VkLAorKiogY3VmLCBjdWIsIGN1dTEsIGN1ZDEsIGN1ZjEsIGN1YjEuICBJdCBtYXkgYmUgdGhhdCBvbmUgb3IgbW9yZSBhcmUgd3JvbmcuCisqKgorKiogTm90ZTogeW91IHNob3VsZCBleHBlY3QgdGhpcyBjb2RlIHRvIGxvb2sgbGlrZSBhIHJlc291cmNlIGhvZyBpbiBhIHByb2ZpbGUuCisqKiBUaGF0J3MgYmVjYXVzZSBpdCBkb2VzIGEgbG90IG9mIEkvTywgdGhyb3VnaCB0aGUgdHB1dHMoKSBjYWxscy4gIFRoZSBJL08KKyoqIGNvc3Qgc3dhbXBzIHRoZSBjb21wdXRhdGlvbiBvdmVyaGVhZCAoYW5kIGFzIG1hY2hpbmVzIGdldCBmYXN0ZXIsIHRoaXMKKyoqIHdpbGwgYmVjb21lIGV2ZW4gbW9yZSB0cnVlKS4gIENvbW1lbnRzIGluIHRoZSB0ZXN0IGV4ZXJjaXNlciBhdCB0aGUgZW5kCisqKiBnbyBpbnRvIGRldGFpbCBhYm91dCB0dW5pbmcgYW5kIGhvdyB5b3UgY2FuIGdhdWdlIHRoZSBvcHRpbWl6ZXIncworKiogZWZmZWN0aXZlbmVzcy4KKyoqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBvcHRpbWl6ZXIgdHVuaW5nLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhlIGF2ZXJhZ2Ugb3ZlcmhlYWQgb2YgYSBmdWxsIG9wdGltaXphdGlvbiBjb21wdXRhdGlvbiBpbiBjaGFyYWN0ZXIKKyAqIHRyYW5zbWlzc2lvbiB0aW1lcy4gIElmIGl0J3MgdG9vIGhpZ2gsIHRoZSBhbGdvcml0aG0gd2lsbCBiZSBhIGJpdAorICogb3Zlci1iaWFzZWQgdG93YXJkIHVzaW5nIGN1cCByYXRoZXIgdGhhbiBsb2NhbCBtb3Rpb25zOyBpZiBpdCdzIHRvbworICogbG93LCB0aGUgYWxnb3JpdGhtIG1heSBzcGVuZCBtb3JlIHRpbWUgdGhhbiBpcyBzdHJpY3RseSBvcHRpbWFsCisgKiBsb29raW5nIGZvciBub24tY3VwIG1vdGlvbnMuICBQcm9maWxlIHRoZSBvcHRpbWl6ZXIgdXNpbmcgdGhlIGB0JworICogY29tbWFuZCBvZiB0aGUgZXhlcmNpc2VyIChzZWUgYmVsb3cpLCBhbmQgcm91bmQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4KKyAqCisgKiBZZXMsIEkgKGVzcikgdGhvdWdodCBhYm91dCBjb21wdXRpbmcgZXhwZWN0ZWQgb3ZlcmhlYWQgZHluYW1pY2FsbHksIHNheQorICogYnkgZGVyaXZhdGlvbiBmcm9tIGEgcnVubmluZyBhdmVyYWdlIG9mIG9wdGltaXplciB0aW1lcy4gIEJ1dCB0aGUKKyAqIHdob2xlIHBvaW50IG9mIHRoaXMgb3B0aW1pemF0aW9uIGlzIHRvICpkZWNyZWFzZSogdGhlIGZyZXF1ZW5jeSBvZgorICogc3lzdGVtIGNhbGxzLiA6LSkKKyAqLworI2RlZmluZSBDT01QVVRFX09WRVJIRUFECTEJLyogSSB1c2UgYSA5ME1IeiBQZW50aXVtIEAgOS42S2JwcyAqLworCisvKgorICogTE9OR19ESVNUIGlzIHRoZSBkaXN0YW5jZSB3ZSBjb25zaWRlciB0byBiZSBqdXN0IGFzIGNvc3RseSB0byBtb3ZlIG92ZXIgYXMgYQorICogY3VwIHNlcXVlbmNlIGlzIHRvIGVtaXQuICBJbiBvdGhlciB3b3JkcywgaXQncyB0aGUgbGVuZ3RoIG9mIGEgY3VwIHNlcXVlbmNlCisgKiBhZGp1c3RlZCBmb3IgYXZlcmFnZSBjb21wdXRhdGlvbiBvdmVyaGVhZC4gIFRoZSBtYWdpYyBudW1iZXIgaXMgdGhlIGxlbmd0aAorICogb2YgIlwwMzNbeXk7eHhIIiwgdGhlIHR5cGljYWwgY3VwIHNlcXVlbmNlIHRoZXNlIGRheXMuCisgKi8KKyNkZWZpbmUgTE9OR19ESVNUCQkoOCAtIENPTVBVVEVfT1ZFUkhFQUQpCisKKy8qCisgKiBUZWxsIHdoZXRoZXIgYSBtb3Rpb24gaXMgb3B0aW1pemFibGUgYnkgbG9jYWwgbW90aW9ucy4gIE5lZWRzIHRvIGJlIGNoZWFwIHRvCisgKiBjb21wdXRlLiBJbiBnZW5lcmFsLCBhbGwgdGhlIGZhc3QgbW92ZXMgZ28gdG8gZWl0aGVyIHRoZSByaWdodCBvciBsZWZ0IGVkZ2UKKyAqIG9mIHRoZSBzY3JlZW4uICBTbyBhbnkgbW90aW9uIHRvIGEgbG9jYXRpb24gdGhhdCBpcyAoYSkgZnVydGhlciBhd2F5IHRoYW4KKyAqIExPTkdfRElTVCBhbmQgKGIpIGZ1cnRoZXIgaW53YXJkIGZyb20gdGhlIHJpZ2h0IG9yIGxlZnQgZWRnZSB0aGFuIExPTkdfRElTVCwKKyAqIHdlJ2xsIGNvbnNpZGVyIG5vbmxvY2FsLgorICovCisjZGVmaW5lIE5PVF9MT0NBTChmeSwgZngsIHR5LCB0eCkJKCh0eCA+IExPTkdfRElTVCkgXAorIAkJICYmICh0eCA8IHNjcmVlbl9jb2x1bW5zIC0gMSAtIExPTkdfRElTVCkgXAorCQkgJiYgKGFicyh0eS1meSkgKyBhYnModHgtZngpID4gTE9OR19ESVNUKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFeHRlcm5hbCBpbnRlcmZhY2VzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGb3IgdGhpcyBjb2RlIHRvIHdvcmsgT0ssIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBtdXN0IGxpdmUgaW4gdGhlCisgKiBzY3JlZW4gc3RydWN0dXJlOgorICoKKyAqCWludAkJX2NoYXJfcGFkZGluZzsJLy8gY29zdCBvZiBjaGFyYWN0ZXIgcHV0CisgKglpbnQJCV9jcl9jb3N0OwkvLyBjb3N0IG9mIChjYXJyaWFnZV9yZXR1cm4pCisgKglpbnQJCV9jdXBfY29zdDsJLy8gY29zdCBvZiAoY3Vyc29yX2FkZHJlc3MpCisgKglpbnQJCV9ob21lX2Nvc3Q7CS8vIGNvc3Qgb2YgKGN1cnNvcl9ob21lKQorICoJaW50CQlfbGxfY29zdDsJLy8gY29zdCBvZiAoY3Vyc29yX3RvX2xsKQorICojaWYgVVNFX0hBUkRfVEFCUworICoJaW50CQlfaHRfY29zdDsJLy8gY29zdCBvZiAodGFiKQorICoJaW50CQlfY2J0X2Nvc3Q7CS8vIGNvc3Qgb2YgKGJhY2tfdGFiKQorICojZW5kaWYgVVNFX0hBUkRfVEFCUworICoJaW50CQlfY3ViMV9jb3N0OwkvLyBjb3N0IG9mIChjdXJzb3JfbGVmdCkKKyAqCWludAkJX2N1ZjFfY29zdDsJLy8gY29zdCBvZiAoY3Vyc29yX3JpZ2h0KQorICoJaW50CQlfY3VkMV9jb3N0OwkvLyBjb3N0IG9mIChjdXJzb3JfZG93bikKKyAqCWludAkJX2N1dTFfY29zdDsJLy8gY29zdCBvZiAoY3Vyc29yX3VwKQorICoJaW50CQlfY3ViX2Nvc3Q7CS8vIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX2xlZnQpCisgKglpbnQJCV9jdWZfY29zdDsJLy8gY29zdCBvZiAocGFybV9jdXJzb3JfcmlnaHQpCisgKglpbnQJCV9jdWRfY29zdDsJLy8gY29zdCBvZiAocGFybV9jdXJzb3JfZG93bikKKyAqCWludAkJX2N1dV9jb3N0OwkvLyBjb3N0IG9mIChwYXJtX2N1cnNvcl91cCkKKyAqCWludAkJX2hwYV9jb3N0OwkvLyBjb3N0IG9mIChjb2x1bW5fYWRkcmVzcykKKyAqCWludAkJX3ZwYV9jb3N0OwkvLyBjb3N0IG9mIChyb3dfYWRkcmVzcykKKyAqCWludAkJX2VjaF9jb3N0OwkvLyBjb3N0IG9mIChlcmFzZV9jaGFycykKKyAqCWludAkJX3JlcF9jb3N0OwkvLyBjb3N0IG9mIChyZXBlYXRfY2hhcikKKyAqCisgKiBUaGUgVVNFX0hBUkRfVEFCUyBzd2l0Y2ggY29udHJvbHMgd2hldGhlciBpdCBpcyByZWxpYWJsZSB0byB1c2UgdGFiL2JhY2t0YWJzCisgKiBmb3IgbG9jYWwgbW90aW9ucy4gIE9uIG1hbnkgc3lzdGVtcywgaXQncyBub3QsIGR1ZSB0byB1bmNlcnRhaW50aWVzIGFib3V0CisgKiB0YWIgZGVsYXlzIGFuZCB3aGV0aGVyIG9yIG5vdCB0YWJzIHdpbGwgYmUgZXhwYW5kZWQgaW4gcmF3IG1vZGUuICBJZiB5b3UKKyAqIGhhdmUgcGFybV9yaWdodF9jdXJzb3IsIHRhYiBtb3Rpb25zIGRvbid0IHdpbiB5b3UgYSBsb3QgYW55aG93LgorICovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX212Y3VyLmMsdiAxLjExMyAyMDA4LzA4LzE2IDE5OjMwOjU4IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgV0FOVF9DSEFSKHksIHgpCVNQLT5fbmV3c2NyLT5fbGluZVt5XS50ZXh0W3hdCS8qIGRlc2lyZWQgc3RhdGUgKi8KKyNkZWZpbmUgQkFVRFJBVEUJY3VyX3Rlcm0tPl9iYXVkcmF0ZQkvKiBiaXRzIHBlciBzZWNvbmQgKi8KKworI2lmIGRlZmluZWQoTUFJTikgfHwgZGVmaW5lZChOQ1VSU0VTX1RFU1QpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworc3RhdGljIGJvb2wgcHJvZmlsaW5nID0gRkFMU0U7CitzdGF0aWMgZmxvYXQgZGlmZjsKKyNlbmRpZiAvKiBNQUlOICovCisKKyNkZWZpbmUgT1BUX1NJWkUgNTEyCisKK3N0YXRpYyBpbnQgbm9ybWFsaXplZF9jb3N0KGNvbnN0IGNoYXIgKmNvbnN0IGNhcCwgaW50IGFmZmNudCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSW5pdGlhbGl6YXRpb24vd3JhcHVwIChpbmNsdWRpbmcgY29zdCBwcmUtY29tcHV0YXRpb24pCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBUUkFDRQorc3RhdGljIGludAordHJhY2VfY29zdF9vZihjb25zdCBjaGFyICpjYXBuYW1lLCBjb25zdCBjaGFyICpjYXAsIGludCBhZmZjbnQpCit7CisgICAgaW50IHJlc3VsdCA9IF9uY19tc2VjX2Nvc3QoY2FwLCBhZmZjbnQpOworICAgIFRSKFRSQUNFX0NIQVJQVVQgfCBUUkFDRV9NT1ZFLAorICAgICAgICgiQ29zdE9mICVzICVkICVzIiwgY2FwbmFtZSwgcmVzdWx0LCBfbmNfdmlzYnVmKGNhcCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2RlZmluZSBDb3N0T2YoY2FwLGFmZmNudCkgdHJhY2VfY29zdF9vZigjY2FwLGNhcCxhZmZjbnQpOworCitzdGF0aWMgaW50Cit0cmFjZV9ub3JtYWxpemVkX2Nvc3QoY29uc3QgY2hhciAqY2FwbmFtZSwgY29uc3QgY2hhciAqY2FwLCBpbnQgYWZmY250KQoreworICAgIGludCByZXN1bHQgPSBub3JtYWxpemVkX2Nvc3QoY2FwLCBhZmZjbnQpOworICAgIFRSKFRSQUNFX0NIQVJQVVQgfCBUUkFDRV9NT1ZFLAorICAgICAgICgiTm9ybWFsaXplZENvc3QgJXMgJWQgJXMiLCBjYXBuYW1lLCByZXN1bHQsIF9uY192aXNidWYoY2FwKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZGVmaW5lIE5vcm1hbGl6ZWRDb3N0KGNhcCxhZmZjbnQpIHRyYWNlX25vcm1hbGl6ZWRfY29zdCgjY2FwLGNhcCxhZmZjbnQpOworCisjZWxzZQorCisjZGVmaW5lIENvc3RPZihjYXAsYWZmY250KSBfbmNfbXNlY19jb3N0KGNhcCxhZmZjbnQpOworI2RlZmluZSBOb3JtYWxpemVkQ29zdChjYXAsYWZmY250KSBub3JtYWxpemVkX2Nvc3QoY2FwLGFmZmNudCk7CisKKyNlbmRpZgorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfbXNlY19jb3N0KGNvbnN0IGNoYXIgKmNvbnN0IGNhcCwgaW50IGFmZmNudCkKKy8qIGNvbXB1dGUgdGhlIGNvc3Qgb2YgYSBnaXZlbiBvcGVyYXRpb24gKi8KK3sKKyAgICBpZiAoY2FwID09IDApCisJcmV0dXJuIChJTkZJTklUWSk7CisgICAgZWxzZSB7CisJY29uc3QgY2hhciAqY3A7CisJZmxvYXQgY3VtX2Nvc3QgPSAwLjA7CisKKwlmb3IgKGNwID0gY2FwOyAqY3A7IGNwKyspIHsKKwkgICAgLyogZXh0cmFjdCBwYWRkaW5nLCBlaXRoZXIgbWFuZGF0b3J5IG9yIHJlcXVpcmVkICovCisJICAgIGlmIChjcFswXSA9PSAnJCcgJiYgY3BbMV0gPT0gJzwnICYmIHN0cmNocihjcCwgJz4nKSkgeworCQlmbG9hdCBudW1iZXIgPSAwLjA7CisKKwkJZm9yIChjcCArPSAyOyAqY3AgIT0gJz4nOyBjcCsrKSB7CisJCSAgICBpZiAoaXNkaWdpdChVQ2hhcigqY3ApKSkKKwkJCW51bWJlciA9IG51bWJlciAqIDEwICsgKCpjcCAtICcwJyk7CisJCSAgICBlbHNlIGlmICgqY3AgPT0gJyonKQorCQkJbnVtYmVyICo9IGFmZmNudDsKKwkJICAgIGVsc2UgaWYgKCpjcCA9PSAnLicgJiYgKCorK2NwICE9ICc+JykgJiYgaXNkaWdpdChVQ2hhcigqY3ApKSkKKwkJCW51bWJlciArPSAoKmNwIC0gJzAnKSAvIDEwLjA7CisJCX0KKworI2lmIE5DVVJTRVNfTk9fUEFERElORworCQlpZiAoIUdldE5vUGFkZGluZyhTUCkpCisjZW5kaWYKKwkJICAgIGN1bV9jb3N0ICs9IG51bWJlciAqIDEwOworCSAgICB9IGVsc2UKKwkJY3VtX2Nvc3QgKz0gU1AtPl9jaGFyX3BhZGRpbmc7CisJfQorCisJcmV0dXJuICgoaW50KSBjdW1fY29zdCk7CisgICAgfQorfQorCitzdGF0aWMgaW50Citub3JtYWxpemVkX2Nvc3QoY29uc3QgY2hhciAqY29uc3QgY2FwLCBpbnQgYWZmY250KQorLyogY29tcHV0ZSB0aGUgZWZmZWN0aXZlIGNoYXJhY3Rlci1jb3VudCBmb3IgYW4gb3BlcmF0aW9uIChyb3VuZCB1cCkgKi8KK3sKKyAgICBpbnQgY29zdCA9IF9uY19tc2VjX2Nvc3QoY2FwLCBhZmZjbnQpOworICAgIGlmIChjb3N0ICE9IElORklOSVRZKQorCWNvc3QgPSAoY29zdCArIFNQLT5fY2hhcl9wYWRkaW5nIC0gMSkgLyBTUC0+X2NoYXJfcGFkZGluZzsKKyAgICByZXR1cm4gY29zdDsKK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X3Njcm9sbF9yZWdpb24odm9pZCkKKy8qIFNldCB0aGUgc2Nyb2xsLXJlZ2lvbiB0byBhIGtub3duIHN0YXRlICh0aGUgZGVmYXVsdCkgKi8KK3sKKyAgICBpZiAoY2hhbmdlX3Njcm9sbF9yZWdpb24pIHsKKwlUUFVUU19UUkFDRSgiY2hhbmdlX3Njcm9sbF9yZWdpb24iKTsKKwlwdXRwKFRQQVJNXzIoY2hhbmdlX3Njcm9sbF9yZWdpb24sIDAsIHNjcmVlbl9saW5lcyAtIDEpKTsKKyAgICB9Cit9CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfbXZjdXJfcmVzdW1lKHZvaWQpCisvKiB3aGF0IHRvIGRvIGF0IGluaXRpYWxpemF0aW9uIHRpbWUgYW5kIGFmdGVyIGVhY2ggc2hlbGxvdXQgKi8KK3sKKyAgICAvKiBpbml0aWFsaXplIHNjcmVlbiBmb3IgY3Vyc29yIGFjY2VzcyAqLworICAgIGlmIChlbnRlcl9jYV9tb2RlKSB7CisJVFBVVFNfVFJBQ0UoImVudGVyX2NhX21vZGUiKTsKKwlwdXRwKGVudGVyX2NhX21vZGUpOworICAgIH0KKworICAgIC8qCisgICAgICogRG9pbmcgdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIF9uY19tdmN1cl93cmFwKCkgZW5zdXJlcyB0aGF0CisgICAgICogbmN1cnNlcyBwcm9ncmFtcyB3aWxsIHNlZSBhIHJlc2V0IHNjcm9sbCByZWdpb24gZXZlbiBpZiBhCisgICAgICogcHJvZ3JhbSB0aGF0IG1lc3NlZCB3aXRoIGl0IGRpZWQgdW5ncmFjZWZ1bGx5LgorICAgICAqCisgICAgICogVGhpcyBhbHNvIHVuZG9lcyB0aGUgZWZmZWN0cyBvZiB0ZXJtaW5hbCBpbml0IHN0cmluZ3MgdGhhdCBhc3N1bWUKKyAgICAgKiB0aGV5IGtub3cgdGhlIHNjcmVlbiBzaXplLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UncmUgcnVubmluZworICAgICAqIGEgdnQxMDAgZW11bGF0aW9uIHRocm91Z2ggeHRlcm0uCisgICAgICovCisgICAgcmVzZXRfc2Nyb2xsX3JlZ2lvbigpOworICAgIFNQLT5fY3Vyc3JvdyA9IFNQLT5fY3Vyc2NvbCA9IC0xOworCisgICAgLyogcmVzdG9yZSBjdXJzb3Igc2hhcGUgKi8KKyAgICBpZiAoU1AtPl9jdXJzb3IgIT0gLTEpIHsKKwlpbnQgY3Vyc29yID0gU1AtPl9jdXJzb3I7CisJU1AtPl9jdXJzb3IgPSAtMTsKKwljdXJzX3NldChjdXJzb3IpOworICAgIH0KK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19tdmN1cl9pbml0KHZvaWQpCisvKiBpbml0aWFsaXplIHRoZSBjb3N0IHN0cnVjdHVyZSAqLworeworICAgIGlmIChpc2F0dHkoZmlsZW5vKFNQLT5fb2ZwKSkpCisJU1AtPl9jaGFyX3BhZGRpbmcgPSAoKEJBVURCWVRFICogMTAwMCAqIDEwKQorCQkJICAgICAvIChCQVVEUkFURSA+IDAgPyBCQVVEUkFURSA6IDk2MDApKTsKKyAgICBlbHNlCisJU1AtPl9jaGFyX3BhZGRpbmcgPSAxOwkvKiBtdXN0IGJlIG5vbnplcm8gKi8KKyAgICBpZiAoU1AtPl9jaGFyX3BhZGRpbmcgPD0gMCkKKwlTUC0+X2NoYXJfcGFkZGluZyA9IDE7CS8qIG11c3QgYmUgbm9uemVybyAqLworICAgIFRSKFRSQUNFX0NIQVJQVVQgfCBUUkFDRV9NT1ZFLCAoImNoYXJfcGFkZGluZyAlZCBtc2VjcyIsIFNQLT5fY2hhcl9wYWRkaW5nKSk7CisKKyAgICAvKiBub24tcGFyYW1ldGVyaXplZCBsb2NhbC1tb3Rpb24gc3RyaW5ncyAqLworICAgIFNQLT5fY3JfY29zdCA9IENvc3RPZihjYXJyaWFnZV9yZXR1cm4sIDApOworICAgIFNQLT5faG9tZV9jb3N0ID0gQ29zdE9mKGN1cnNvcl9ob21lLCAwKTsKKyAgICBTUC0+X2xsX2Nvc3QgPSBDb3N0T2YoY3Vyc29yX3RvX2xsLCAwKTsKKyNpZiBVU0VfSEFSRF9UQUJTCisgICAgaWYgKGdldGVudigiTkNVUlNFU19OT19IQVJEX1RBQlMiKSA9PSAwKSB7CisJU1AtPl9odF9jb3N0ID0gQ29zdE9mKHRhYiwgMCk7CisJU1AtPl9jYnRfY29zdCA9IENvc3RPZihiYWNrX3RhYiwgMCk7CisgICAgfSBlbHNlIHsKKwlTUC0+X2h0X2Nvc3QgPSBJTkZJTklUWTsKKwlTUC0+X2NidF9jb3N0ID0gSU5GSU5JVFk7CisgICAgfQorI2VuZGlmIC8qIFVTRV9IQVJEX1RBQlMgKi8KKyAgICBTUC0+X2N1YjFfY29zdCA9IENvc3RPZihjdXJzb3JfbGVmdCwgMCk7CisgICAgU1AtPl9jdWYxX2Nvc3QgPSBDb3N0T2YoY3Vyc29yX3JpZ2h0LCAwKTsKKyAgICBTUC0+X2N1ZDFfY29zdCA9IENvc3RPZihjdXJzb3JfZG93biwgMCk7CisgICAgU1AtPl9jdXUxX2Nvc3QgPSBDb3N0T2YoY3Vyc29yX3VwLCAwKTsKKworICAgIFNQLT5fc21pcl9jb3N0ID0gQ29zdE9mKGVudGVyX2luc2VydF9tb2RlLCAwKTsKKyAgICBTUC0+X3JtaXJfY29zdCA9IENvc3RPZihleGl0X2luc2VydF9tb2RlLCAwKTsKKyAgICBTUC0+X2lwX2Nvc3QgPSAwOworICAgIGlmIChpbnNlcnRfcGFkZGluZykgeworCVNQLT5faXBfY29zdCA9IENvc3RPZihpbnNlcnRfcGFkZGluZywgMCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBc3N1bXB0aW9uOiBpZiB0aGUgdGVybWluYWwgaGFzIG1lbW9yeV9yZWxhdGl2ZSBhZGRyZXNzaW5nLCB0aGUKKyAgICAgKiBpbml0aWFsaXphdGlvbiBzdHJpbmdzIG9yIHNtY3VwIHdpbGwgc2V0IHNpbmdsZS1wYWdlIG1vZGUgc28gd2UKKyAgICAgKiBjYW4gdHJlYXQgaXQgbGlrZSBhYnNvbHV0ZSBzY3JlZW4gYWRkcmVzc2luZy4gIFRoaXMgc2VlbXMgdG8gYmUgdHJ1ZQorICAgICAqIGZvciBhbGwgY3Vyc29yX21lbV9hZGRyZXNzIHRlcm1pbmFsIHR5cGVzIGluIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZS4KKyAgICAgKi8KKyAgICBTUC0+X2FkZHJlc3NfY3Vyc29yID0gY3Vyc29yX2FkZHJlc3MgPyBjdXJzb3JfYWRkcmVzcyA6IGN1cnNvcl9tZW1fYWRkcmVzczsKKworICAgIC8qCisgICAgICogUGFyYW1ldHJpemVkIGxvY2FsLW1vdGlvbiBzdHJpbmdzLiAgVGhpcyBzdGF0aWMgY29zdCBjb21wdXRhdGlvbgorICAgICAqIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9uczoKKyAgICAgKgorICAgICAqICgxKSBUaGV5IG5ldmVyIGhhdmUgKiBwYWRkaW5nLiAgSW4gdGhlIGVudGlyZSBtYXN0ZXIgdGVybWluZm8gZGF0YWJhc2UKKyAgICAgKiAgICAgYXMgb2YgTWFyY2ggMTk5NSwgb25seSB0aGUgb2Jzb2xldGUgWmVuaXRoIFotMTAwIHBjIHZpb2xhdGVzIHRoaXMuCisgICAgICogICAgIChQcm9wb3J0aW9uYWwgcGFkZGluZyBpcyBmb3VuZCBtYWlubHkgaW4gaW5zZXJ0LCBkZWxldGUgYW5kIHNjcm9sbAorICAgICAqICAgICBjYXBhYmlsaXRpZXMpLgorICAgICAqCisgICAgICogKDIpIFRoZSBhdmVyYWdlIGNhc2Ugb2YgY3VwIGhhcyB0d28gdHdvLWRpZ2l0IHBhcmFtZXRlcnMuICBTdHJpY3RseSwKKyAgICAgKiAgICAgdGhlIGF2ZXJhZ2UgY2FzZSBmb3IgYSAyNCAqIDgwIHNjcmVlbiBoYXMgKCgxMCoxMCooMSArIDEpKSArCisgICAgICogICAgICgxNCoxMCooMSArIDIpKSArICgxMCo3MCooMiArIDEpKSArICgxNCo3MCo0KSkgLyAoMjQqODApID0gMy40NTgKKyAgICAgKiAgICAgZGlnaXRzIG9mIHBhcmFtZXRlcnMuICBPbiBhIDI1eDgwIHNjcmVlbiB0aGUgYXZlcmFnZSBpcyAzLjYxOTcuCisgICAgICogICAgIE9uIGxhcmdlciBzY3JlZW5zIHRoZSB2YWx1ZSBnZXRzIG11Y2ggY2xvc2VyIHRvIDQuCisgICAgICoKKyAgICAgKiAoMykgVGhlIGF2ZXJhZ2UgY2FzZSBvZiBjdWIvY3VmL2hwYS9lY2gvcmVwIGhhcyAyIGRpZ2l0cyBvZiBwYXJhbWV0ZXJzCisgICAgICogICAgIChzdHJpY3RseSwgKCgoMTAgKiAxKSArICg3MCAqIDIpKSAvIDgwKSA9IDEuODc1MCkuCisgICAgICoKKyAgICAgKiAoNCkgVGhlIGF2ZXJhZ2UgY2FzZSBvZiBjdWQvY3V1L3ZwYSBoYXMgMiBkaWdpdHMgb2YgcGFyYW1ldGVycworICAgICAqICAgICAoc3RyaWN0bHksICgoKDEwICogMSkgKyAoMTQgKiAyKSkgLyAyNCkgPSAxLjU4MzMpLgorICAgICAqCisgICAgICogQWxsIHRoZXNlIGF2ZXJhZ2VzIGRlcGVuZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGFsbCBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICogYXJlIGVxdWFsbHkgcHJvYmFibGUuCisgICAgICovCisgICAgU1AtPl9jdXBfY29zdCA9IENvc3RPZihUUEFSTV8yKFNQLT5fYWRkcmVzc19jdXJzb3IsIDIzLCAyMyksIDEpOworICAgIFNQLT5fY3ViX2Nvc3QgPSBDb3N0T2YoVFBBUk1fMShwYXJtX2xlZnRfY3Vyc29yLCAyMyksIDEpOworICAgIFNQLT5fY3VmX2Nvc3QgPSBDb3N0T2YoVFBBUk1fMShwYXJtX3JpZ2h0X2N1cnNvciwgMjMpLCAxKTsKKyAgICBTUC0+X2N1ZF9jb3N0ID0gQ29zdE9mKFRQQVJNXzEocGFybV9kb3duX2N1cnNvciwgMjMpLCAxKTsKKyAgICBTUC0+X2N1dV9jb3N0ID0gQ29zdE9mKFRQQVJNXzEocGFybV91cF9jdXJzb3IsIDIzKSwgMSk7CisgICAgU1AtPl9ocGFfY29zdCA9IENvc3RPZihUUEFSTV8xKGNvbHVtbl9hZGRyZXNzLCAyMyksIDEpOworICAgIFNQLT5fdnBhX2Nvc3QgPSBDb3N0T2YoVFBBUk1fMShyb3dfYWRkcmVzcywgMjMpLCAxKTsKKworICAgIC8qIG5vbi1wYXJhbWV0ZXJpemVkIHNjcmVlbi11cGRhdGUgc3RyaW5ncyAqLworICAgIFNQLT5fZWRfY29zdCA9IE5vcm1hbGl6ZWRDb3N0KGNscl9lb3MsIDEpOworICAgIFNQLT5fZWxfY29zdCA9IE5vcm1hbGl6ZWRDb3N0KGNscl9lb2wsIDEpOworICAgIFNQLT5fZWwxX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChjbHJfYm9sLCAxKTsKKyAgICBTUC0+X2RjaDFfY29zdCA9IE5vcm1hbGl6ZWRDb3N0KGRlbGV0ZV9jaGFyYWN0ZXIsIDEpOworICAgIFNQLT5faWNoMV9jb3N0ID0gTm9ybWFsaXplZENvc3QoaW5zZXJ0X2NoYXJhY3RlciwgMSk7CisKKyAgICAvKgorICAgICAqIElmIHRoaXMgaXMgYSBiY2UtdGVybWluYWwsIHdlIHdhbnQgdG8gYmlhcyB0aGUgY2hvaWNlIHNvIHdlIHVzZSBjbHJfZW9sCisgICAgICogcmF0aGVyIHRoYW4gc3BhY2VzIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgorICAgICAqLworICAgIGlmIChiYWNrX2NvbG9yX2VyYXNlKQorCVNQLT5fZWxfY29zdCA9IDA7CisKKyAgICAvKiBwYXJhbWV0ZXJpemVkIHNjcmVlbi11cGRhdGUgc3RyaW5ncyAqLworICAgIFNQLT5fZGNoX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChUUEFSTV8xKHBhcm1fZGNoLCAyMyksIDEpOworICAgIFNQLT5faWNoX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChUUEFSTV8xKHBhcm1faWNoLCAyMyksIDEpOworICAgIFNQLT5fZWNoX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChUUEFSTV8xKGVyYXNlX2NoYXJzLCAyMyksIDEpOworICAgIFNQLT5fcmVwX2Nvc3QgPSBOb3JtYWxpemVkQ29zdChUUEFSTV8yKHJlcGVhdF9jaGFyLCAnICcsIDIzKSwgMSk7CisKKyAgICBTUC0+X2N1cF9jaF9jb3N0ID0gTm9ybWFsaXplZENvc3QoVFBBUk1fMihTUC0+X2FkZHJlc3NfY3Vyc29yLCAyMywgMjMpLCAxKTsKKyAgICBTUC0+X2hwYV9jaF9jb3N0ID0gTm9ybWFsaXplZENvc3QoVFBBUk1fMShjb2x1bW5fYWRkcmVzcywgMjMpLCAxKTsKKyAgICBTUC0+X2N1Zl9jaF9jb3N0ID0gTm9ybWFsaXplZENvc3QoVFBBUk1fMShwYXJtX3JpZ2h0X2N1cnNvciwgMjMpLCAxKTsKKyAgICBTUC0+X2lubGluZV9jb3N0ID0gbWluKFNQLT5fY3VwX2NoX2Nvc3QsCisJCQkgICBtaW4oU1AtPl9ocGFfY2hfY29zdCwKKwkJCSAgICAgICBTUC0+X2N1Zl9jaF9jb3N0KSk7CisKKyAgICAvKgorICAgICAqIElmIHNhdmVfY3Vyc29yIGlzIHVzZWQgd2l0aGluIGVudGVyX2NhX21vZGUsIHdlIHNob3VsZCBub3QgdXNlIGl0IGZvcgorICAgICAqIHNjcm9sbGluZyBvcHRpbWl6YXRpb24sIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIHJlc3RvcmVfY3Vyc29yIGlzIG5vdAorICAgICAqIG5lc3RlZCBvbiB0aGUgdmFyaW91cyB0ZXJtaW5hbHMgKHZ0MTAwLCB4dGVybSwgZXRjLikgd2hpY2ggdXNlIHRoaXMKKyAgICAgKiBmZWF0dXJlLgorICAgICAqLworICAgIGlmIChzYXZlX2N1cnNvciAhPSAwCisJJiYgZW50ZXJfY2FfbW9kZSAhPSAwCisJJiYgc3Ryc3RyKGVudGVyX2NhX21vZGUsIHNhdmVfY3Vyc29yKSAhPSAwKSB7CisJVCgoIi4uLnN1cHByZXNzZWQgc2MvcmMgY2FwYWJpbGl0eSBkdWUgdG8gY29uZmxpY3Qgd2l0aCBzbWN1cC9ybWN1cCIpKTsKKwlzYXZlX2N1cnNvciA9IDA7CisJcmVzdG9yZV9jdXJzb3IgPSAwOworICAgIH0KKworICAgIC8qCisgICAgICogQSBkaWZmZXJlbnQsIHBvc3NpYmx5IGJldHRlciB3YXkgdG8gYXJyYW5nZSB0aGlzIHdvdWxkIGJlIHRvIHNldAorICAgICAqIFNQLT5fZW5kd2luID0gVFJVRSBhdCB3aW5kb3cgaW5pdGlhbGl6YXRpb24gdGltZSBhbmQgbGV0IHRoaXMgYmUKKyAgICAgKiBjYWxsZWQgYnkgZG91cGRhdGUncyByZXR1cm4tZnJvbS1zaGVsbG91dCBjb2RlLgorICAgICAqLworICAgIF9uY19tdmN1cl9yZXN1bWUoKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19tdmN1cl93cmFwKHZvaWQpCisvKiB3cmFwIHVwIGN1cnNvci1hZGRyZXNzaW5nIG1vZGUgKi8KK3sKKyAgICAvKiBsZWF2ZSBjdXJzb3IgYXQgc2NyZWVuIGJvdHRvbSAqLworICAgIG12Y3VyKC0xLCAtMSwgc2NyZWVuX2xpbmVzIC0gMSwgMCk7CisKKyAgICAvKiBzZXQgY3Vyc29yIHRvIG5vcm1hbCBtb2RlICovCisgICAgaWYgKFNQLT5fY3Vyc29yICE9IC0xKSB7CisJaW50IGN1cnNvciA9IFNQLT5fY3Vyc29yOworCWN1cnNfc2V0KDEpOworCVNQLT5fY3Vyc29yID0gY3Vyc29yOworICAgIH0KKworICAgIGlmIChleGl0X2NhX21vZGUpIHsKKwlUUFVUU19UUkFDRSgiZXhpdF9jYV9tb2RlIik7CisJcHV0cChleGl0X2NhX21vZGUpOworICAgIH0KKyAgICAvKgorICAgICAqIFJlc2V0IHRlcm1pbmFsJ3MgdGFiIGNvdW50ZXIuICBUaGVyZSdzIGEgbG9uZy10aW1lIGJ1ZyB0aGF0CisgICAgICogaWYgeW91IGV4aXQgYSAiY3Vyc2VzIiBwcm9ncmFtIHN1Y2ggYXMgdmkgb3IgbW9yZSwgdGFiCisgICAgICogZm9yd2FyZCwgYW5kIHRoZW4gYmFja3NwYWNlLCB0aGUgY3Vyc29yIGRvZXNuJ3QgZ28gdG8gdGhlCisgICAgICogcmlnaHQgcGxhY2UuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBrZXJuZWwgY291bnRzIHRoZQorICAgICAqIGVzY2FwZSBzZXF1ZW5jZXMgdGhhdCByZXNldCB0aGluZ3MgYXMgY29sdW1uIHBvc2l0aW9ucy4KKyAgICAgKiBVdHRlciBhIFxyIHRvIHJlc2V0IHRoaXMgaW52aXNpYmx5LgorICAgICAqLworICAgIF9uY19vdXRjaCgnXHInKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBPcHRpbWl6ZWQgY3Vyc29yIG1vdmVtZW50CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBQZXJmb3JtIHJlcGVhdGVkLWFwcGVuZCwgcmV0dXJuaW5nIGNvc3QKKyAqLworc3RhdGljIE5DVVJTRVNfSU5MSU5FIGludAorcmVwZWF0ZWRfYXBwZW5kKHN0cmluZ19kZXNjICogdGFyZ2V0LCBpbnQgdG90YWwsIGludCBudW0sIGludCByZXBlYXQsIGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgICBzaXplX3QgbmVlZCA9IHJlcGVhdCAqIHN0cmxlbihzcmMpOworCisgICAgaWYgKG5lZWQgPCB0YXJnZXQtPnNfc2l6ZSkgeworCXdoaWxlIChyZXBlYXQtLSA+IDApIHsKKwkgICAgaWYgKF9uY19zYWZlX3N0cmNhdCh0YXJnZXQsIHNyYykpIHsKKwkJdG90YWwgKz0gbnVtOworCSAgICB9IGVsc2UgeworCQl0b3RhbCA9IElORklOSVRZOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCXRvdGFsID0gSU5GSU5JVFk7CisgICAgfQorICAgIHJldHVybiB0b3RhbDsKK30KKworI2lmbmRlZiBOT19PUFRJTUlaRQorI2RlZmluZSBORVhUVEFCKGZyKQkoZnIgKyBpbml0X3RhYnMgLSAoZnIgJSBpbml0X3RhYnMpKQorCisvKgorICogQXNzdW1lIGJhY2tfdGFiIChDQlQpIGRvZXMgbm90IHdyYXAgYmFja3dhcmRzIGF0IHRoZSBsZWZ0IG1hcmdpbiwgcmV0dXJuCisgKiBhIG5lZ2F0aXZlIHZhbHVlIGF0IHRoYXQgcG9pbnQgdG8gc2ltcGxpZnkgdGhlIGxvb3AuCisgKi8KKyNkZWZpbmUgTEFTVFRBQihmcikJKChmciA+IDApID8gKChmciAtIDEpIC8gaW5pdF90YWJzKSAqIGluaXRfdGFicyA6IC0xKQorCitzdGF0aWMgaW50CityZWxhdGl2ZV9tb3ZlKHN0cmluZ19kZXNjICogdGFyZ2V0LCBpbnQgZnJvbV95LCBpbnQgZnJvbV94LCBpbnQgdG9feSwgaW50CisJICAgICAgdG9feCwgYm9vbCBvdncpCisvKiBtb3ZlIHZpYSBsb2NhbCBtb3Rpb25zIChjdXUvY3V1MS9jdWQvY3VkMS9jdWIxL2N1Yi9jdWYxL2N1Zi92cGEvaHBhKSAqLworeworICAgIHN0cmluZ19kZXNjIHNhdmU7CisgICAgaW50IG4sIHZjb3N0ID0gMCwgaGNvc3QgPSAwOworCisgICAgKHZvaWQpIF9uY19zdHJfY29weSgmc2F2ZSwgdGFyZ2V0KTsKKworICAgIGlmICh0b195ICE9IGZyb21feSkgeworCXZjb3N0ID0gSU5GSU5JVFk7CisKKwlpZiAocm93X2FkZHJlc3MgIT0gMAorCSAgICAmJiBfbmNfc2FmZV9zdHJjYXQodGFyZ2V0LCBUUEFSTV8xKHJvd19hZGRyZXNzLCB0b195KSkpIHsKKwkgICAgdmNvc3QgPSBTUC0+X3ZwYV9jb3N0OworCX0KKworCWlmICh0b195ID4gZnJvbV95KSB7CisJICAgIG4gPSAodG9feSAtIGZyb21feSk7CisKKwkgICAgaWYgKHBhcm1fZG93bl9jdXJzb3IKKwkJJiYgU1AtPl9jdWRfY29zdCA8IHZjb3N0CisJCSYmIF9uY19zYWZlX3N0cmNhdChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksCisJCQkJICAgVFBBUk1fMShwYXJtX2Rvd25fY3Vyc29yLCBuKSkpIHsKKwkJdmNvc3QgPSBTUC0+X2N1ZF9jb3N0OworCSAgICB9CisKKwkgICAgaWYgKGN1cnNvcl9kb3duCisJCSYmICgqY3Vyc29yX2Rvd24gIT0gJ1xuJyB8fCBTUC0+X25sKQorCQkmJiAobiAqIFNQLT5fY3VkMV9jb3N0IDwgdmNvc3QpKSB7CisJCXZjb3N0ID0gcmVwZWF0ZWRfYXBwZW5kKF9uY19zdHJfY29weSh0YXJnZXQsICZzYXZlKSwgMCwKKwkJCQkJU1AtPl9jdWQxX2Nvc3QsIG4sIGN1cnNvcl9kb3duKTsKKwkgICAgfQorCX0gZWxzZSB7CQkvKiAodG9feSA8IGZyb21feSkgKi8KKwkgICAgbiA9IChmcm9tX3kgLSB0b195KTsKKworCSAgICBpZiAocGFybV91cF9jdXJzb3IKKwkJJiYgU1AtPl9jdXVfY29zdCA8IHZjb3N0CisJCSYmIF9uY19zYWZlX3N0cmNhdChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksCisJCQkJICAgVFBBUk1fMShwYXJtX3VwX2N1cnNvciwgbikpKSB7CisJCXZjb3N0ID0gU1AtPl9jdXVfY29zdDsKKwkgICAgfQorCisJICAgIGlmIChjdXJzb3JfdXAgJiYgKG4gKiBTUC0+X2N1dTFfY29zdCA8IHZjb3N0KSkgeworCQl2Y29zdCA9IHJlcGVhdGVkX2FwcGVuZChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksIDAsCisJCQkJCVNQLT5fY3V1MV9jb3N0LCBuLCBjdXJzb3JfdXApOworCSAgICB9CisJfQorCisJaWYgKHZjb3N0ID09IElORklOSVRZKQorCSAgICByZXR1cm4gKElORklOSVRZKTsKKyAgICB9CisKKyAgICBzYXZlID0gKnRhcmdldDsKKworICAgIGlmICh0b194ICE9IGZyb21feCkgeworCWNoYXIgc3RyW09QVF9TSVpFXTsKKwlzdHJpbmdfZGVzYyBjaGVjazsKKworCWhjb3N0ID0gSU5GSU5JVFk7CisKKwlpZiAoY29sdW1uX2FkZHJlc3MKKwkgICAgJiYgX25jX3NhZmVfc3RyY2F0KF9uY19zdHJfY29weSh0YXJnZXQsICZzYXZlKSwKKwkJCSAgICAgICBUUEFSTV8xKGNvbHVtbl9hZGRyZXNzLCB0b194KSkpIHsKKwkgICAgaGNvc3QgPSBTUC0+X2hwYV9jb3N0OworCX0KKworCWlmICh0b194ID4gZnJvbV94KSB7CisJICAgIG4gPSB0b194IC0gZnJvbV94OworCisJICAgIGlmIChwYXJtX3JpZ2h0X2N1cnNvcgorCQkmJiBTUC0+X2N1Zl9jb3N0IDwgaGNvc3QKKwkJJiYgX25jX3NhZmVfc3RyY2F0KF9uY19zdHJfY29weSh0YXJnZXQsICZzYXZlKSwKKwkJCQkgICBUUEFSTV8xKHBhcm1fcmlnaHRfY3Vyc29yLCBuKSkpIHsKKwkJaGNvc3QgPSBTUC0+X2N1Zl9jb3N0OworCSAgICB9CisKKwkgICAgaWYgKGN1cnNvcl9yaWdodCkgeworCQlpbnQgbGhjb3N0ID0gMDsKKworCQkodm9pZCkgX25jX3N0cl9pbml0KCZjaGVjaywgc3RyLCBzaXplb2Yoc3RyKSk7CisKKyNpZiBVU0VfSEFSRF9UQUJTCisJCS8qIHVzZSBoYXJkIHRhYnMsIGlmIHdlIGhhdmUgdGhlbSwgdG8gZG8gYXMgbXVjaCBhcyBwb3NzaWJsZSAqLworCQlpZiAoaW5pdF90YWJzID4gMCAmJiB0YWIpIHsKKwkJICAgIGludCBueHQsIGZyOworCisJCSAgICBmb3IgKGZyID0gZnJvbV94OyAobnh0ID0gTkVYVFRBQihmcikpIDw9IHRvX3g7IGZyID0gbnh0KSB7CisJCQlsaGNvc3QgPSByZXBlYXRlZF9hcHBlbmQoJmNoZWNrLCBsaGNvc3QsCisJCQkJCQkgU1AtPl9odF9jb3N0LCAxLCB0YWIpOworCQkJaWYgKGxoY29zdCA9PSBJTkZJTklUWSkKKwkJCSAgICBicmVhazsKKwkJICAgIH0KKworCQkgICAgbiA9IHRvX3ggLSBmcjsKKwkJICAgIGZyb21feCA9IGZyOworCQl9CisjZW5kaWYgLyogVVNFX0hBUkRfVEFCUyAqLworCisJCWlmIChuIDw9IDAgfHwgbiA+PSAoaW50KSBjaGVjay5zX3NpemUpCisJCSAgICBvdncgPSBGQUxTRTsKKyNpZiBCU0RfVFBVVFMKKwkJLyoKKwkJICogSWYgd2UncmUgYWxsb3dpbmcgQlNELXN0eWxlIHBhZGRpbmcgaW4gdHB1dHMsIGRvbid0IGdlbmVyYXRlCisJCSAqIGEgc3RyaW5nIHdpdGggYSBsZWFkaW5nIGRpZ2l0LiAgT3RoZXJ3aXNlLCB0aGF0IHdpbGwgYmUKKwkJICogaW50ZXJwcmV0ZWQgYXMgYSBwYWRkaW5nIHZhbHVlIHJhdGhlciB0aGFuIHNlbnQgdG8gdGhlCisJCSAqIHNjcmVlbi4KKwkJICovCisJCWlmIChvdncKKwkJICAgICYmIG4gPiAwCisJCSAgICAmJiBuIDwgKGludCkgY2hlY2suc19zaXplCisJCSAgICAmJiB2Y29zdCA9PSAwCisJCSAgICAmJiBzdHJbMF0gPT0gJ1wwJykgeworCQkgICAgaW50IHdhbnRlZCA9IENoYXJPZihXQU5UX0NIQVIodG9feSwgZnJvbV94KSk7CisJCSAgICBpZiAoaXM4Yml0cyh3YW50ZWQpICYmIGlzZGlnaXQod2FudGVkKSkKKwkJCW92dyA9IEZBTFNFOworCQl9CisjZW5kaWYKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBubyBhdHRyaWJ1dGUgY2hhbmdlcywgb3ZlcndyaXRlIGlzIGNoZWFwZXIuCisJCSAqIE5vdGU6IG11c3Qgc3VwcHJlc3MgdGhpcyBieSBwYXNzaW5nIGluIG92dyA9IEZBTFNFIHdoZW5ldmVyCisJCSAqIFdBTlRfQ0hBUiB3b3VsZCByZXR1cm4gaW52YWxpZCBkYXRhLiAgSW4gcGFydGljdWxhciwgdGhpcworCQkgKiBpcyB0cnVlIGJldHdlZW4gdGhlIHRpbWUgYSBoYXJkd2FyZSBzY3JvbGwgaGFzIGJlZW4gZG9uZQorCQkgKiBhbmQgdGhlIHRpbWUgdGhlIHN0cnVjdHVyZSBXQU5UX0NIQVIgd291bGQgYWNjZXNzIGhhcyBiZWVuCisJCSAqIHVwZGF0ZWQuCisJCSAqLworCQlpZiAob3Z3KSB7CisJCSAgICBpbnQgaTsKKworCQkgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJTkNVUlNFU19DSF9UIGNoID0gV0FOVF9DSEFSKHRvX3ksIGZyb21feCArIGkpOworCQkJaWYgKCFTYW1lQXR0ck9mKGNoLCBTQ1JFRU5fQVRUUlMoU1ApKQorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJCQkgICAgfHwgIUNoYXJhYmxlKGNoKQorI2VuZGlmCisJCQkgICAgKSB7CisJCQkgICAgb3Z3ID0gRkFMU0U7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKG92dykgeworCQkgICAgaW50IGk7CisKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQkqY2hlY2suc190YWlsKysgPSAoY2hhcikgQ2hhck9mKFdBTlRfQ0hBUih0b195LAorCQkJCQkJCQkgIGZyb21feCArIGkpKTsKKwkJICAgICpjaGVjay5zX3RhaWwgPSAnXDAnOworCQkgICAgY2hlY2suc19zaXplIC09IG47CisJCSAgICBsaGNvc3QgKz0gbiAqIFNQLT5fY2hhcl9wYWRkaW5nOworCQl9IGVsc2UgeworCQkgICAgbGhjb3N0ID0gcmVwZWF0ZWRfYXBwZW5kKCZjaGVjaywgbGhjb3N0LCBTUC0+X2N1ZjFfY29zdCwKKwkJCQkJICAgICBuLCBjdXJzb3JfcmlnaHQpOworCQl9CisKKwkJaWYgKGxoY29zdCA8IGhjb3N0CisJCSAgICAmJiBfbmNfc2FmZV9zdHJjYXQoX25jX3N0cl9jb3B5KHRhcmdldCwgJnNhdmUpLCBzdHIpKSB7CisJCSAgICBoY29zdCA9IGxoY29zdDsKKwkJfQorCSAgICB9CisJfSBlbHNlIHsJCS8qICh0b194IDwgZnJvbV94KSAqLworCSAgICBuID0gZnJvbV94IC0gdG9feDsKKworCSAgICBpZiAocGFybV9sZWZ0X2N1cnNvcgorCQkmJiBTUC0+X2N1Yl9jb3N0IDwgaGNvc3QKKwkJJiYgX25jX3NhZmVfc3RyY2F0KF9uY19zdHJfY29weSh0YXJnZXQsICZzYXZlKSwKKwkJCQkgICBUUEFSTV8xKHBhcm1fbGVmdF9jdXJzb3IsIG4pKSkgeworCQloY29zdCA9IFNQLT5fY3ViX2Nvc3Q7CisJICAgIH0KKworCSAgICBpZiAoY3Vyc29yX2xlZnQpIHsKKwkJaW50IGxoY29zdCA9IDA7CisKKwkJKHZvaWQpIF9uY19zdHJfaW5pdCgmY2hlY2ssIHN0ciwgc2l6ZW9mKHN0cikpOworCisjaWYgVVNFX0hBUkRfVEFCUworCQlpZiAoaW5pdF90YWJzID4gMCAmJiBiYWNrX3RhYikgeworCQkgICAgaW50IG54dCwgZnI7CisKKwkJICAgIGZvciAoZnIgPSBmcm9tX3g7IChueHQgPSBMQVNUVEFCKGZyKSkgPj0gdG9feDsgZnIgPSBueHQpIHsKKwkJCWxoY29zdCA9IHJlcGVhdGVkX2FwcGVuZCgmY2hlY2ssIGxoY29zdCwKKwkJCQkJCSBTUC0+X2NidF9jb3N0LCAxLCBiYWNrX3RhYik7CisJCQlpZiAobGhjb3N0ID09IElORklOSVRZKQorCQkJICAgIGJyZWFrOworCQkgICAgfQorCisJCSAgICBuID0gZnIgLSB0b194OworCQl9CisjZW5kaWYgLyogVVNFX0hBUkRfVEFCUyAqLworCisJCWxoY29zdCA9IHJlcGVhdGVkX2FwcGVuZCgmY2hlY2ssIGxoY29zdCwgU1AtPl9jdWIxX2Nvc3QsIG4sIGN1cnNvcl9sZWZ0KTsKKworCQlpZiAobGhjb3N0IDwgaGNvc3QKKwkJICAgICYmIF9uY19zYWZlX3N0cmNhdChfbmNfc3RyX2NvcHkodGFyZ2V0LCAmc2F2ZSksIHN0cikpIHsKKwkJICAgIGhjb3N0ID0gbGhjb3N0OworCQl9CisJICAgIH0KKwl9CisKKwlpZiAoaGNvc3QgPT0gSU5GSU5JVFkpCisJICAgIHJldHVybiAoSU5GSU5JVFkpOworICAgIH0KKworICAgIHJldHVybiAodmNvc3QgKyBoY29zdCk7Cit9CisjZW5kaWYgLyogIU5PX09QVElNSVpFICovCisKKy8qCisgKiBXaXRoIHRoZSBtYWNoaW5lcnkgc2V0IHVwIGFib3ZlLCBpdCdzIGNvbmNlaXZhYmxlIHRoYXQKKyAqIG9uc2NyZWVuX212Y3VyIGNvdWxkIGJlIG1vZGlmaWVkIGludG8gYSByZWN1cnNpdmUgZnVuY3Rpb24gdGhhdCBkb2VzCisgKiBhbiBhbHBoYS1iZXRhIHNlYXJjaCBvZiBtb3Rpb24gc3BhY2UsIGFzIHRob3VnaCBpdCB3ZXJlIGEgY2hlc3MKKyAqIG1vdmUgdHJlZSwgd2l0aCB0aGUgd2VpZ2h0IGZ1bmN0aW9uIGJlaW5nIGJvb2xlYW4gYW5kIHRoZSBzZWFyY2gKKyAqIGRlcHRoIGVxdWF0ZWQgdG8gbGVuZ3RoIG9mIHN0cmluZy4gIEhvd2V2ZXIsIHRoaXMgd291bGQgamFjayB1cCB0aGUKKyAqIGNvbXB1dGF0aW9uIGNvc3QgYSBsb3QsIGVzcGVjaWFsbHkgb24gdGVybWluYWxzIHdpdGhvdXQgYSBjdXAKKyAqIGNhcGFiaWxpdHkgY29uc3RyYWluaW5nIHRoZSBzZWFyY2ggdHJlZSBkZXB0aC4gIFNvIHdlIHNldHRsZSBmb3IKKyAqIHRoZSBzaW1wbGVyIG1ldGhvZCBiZWxvdy4KKyAqLworCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgaW50CitvbnNjcmVlbl9tdmN1cihpbnQgeW9sZCwgaW50IHhvbGQsIGludCB5bmV3LCBpbnQgeG5ldywgYm9vbCBvdncpCisvKiBvbnNjcmVlbiBtb3ZlIGZyb20gKHlvbGQsIHhvbGQpIHRvICh5bmV3LCB4bmV3KSAqLworeworICAgIHN0cmluZ19kZXNjIHJlc3VsdDsKKyAgICBjaGFyIGJ1ZmZlcltPUFRfU0laRV07CisgICAgaW50IHRhY3RpYyA9IDAsIG5ld2Nvc3QsIHVzZWNvc3QgPSBJTkZJTklUWTsKKyAgICBpbnQgdDVfY3JfY29zdDsKKworI2lmIGRlZmluZWQoTUFJTikgfHwgZGVmaW5lZChOQ1VSU0VTX1RFU1QpCisgICAgc3RydWN0IHRpbWV2YWwgYmVmb3JlLCBhZnRlcjsKKworICAgIGdldHRpbWVvZmRheSgmYmVmb3JlLCBOVUxMKTsKKyNlbmRpZiAvKiBNQUlOICovCisKKyNkZWZpbmUgTnVsbFJlc3VsdCBfbmNfc3RyX251bGwoJnJlc3VsdCwgc2l6ZW9mKGJ1ZmZlcikpCisjZGVmaW5lIEluaXRSZXN1bHQgX25jX3N0cl9pbml0KCZyZXN1bHQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpCisKKyAgICAvKiB0YWN0aWMgIzA6IHVzZSBkaXJlY3QgY3Vyc29yIGFkZHJlc3NpbmcgKi8KKyAgICBpZiAoX25jX3NhZmVfc3RyY3B5KEluaXRSZXN1bHQsIFRQQVJNXzIoU1AtPl9hZGRyZXNzX2N1cnNvciwgeW5ldywgeG5ldykpKSB7CisJdGFjdGljID0gMDsKKwl1c2Vjb3N0ID0gU1AtPl9jdXBfY29zdDsKKworI2lmIGRlZmluZWQoVFJBQ0UpIHx8IGRlZmluZWQoTkNVUlNFU19URVNUKQorCWlmICghKF9uY19vcHRpbWl6ZV9lbmFibGUgJiBPUFRJTUlaRV9NVkNVUikpCisJICAgIGdvdG8gbm9ubG9jYWw7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworCS8qCisJICogV2UgbWF5IGJlIGFibGUgdG8gdGVsbCBpbiBhZHZhbmNlIHRoYXQgdGhlIGZ1bGwgb3B0aW1pemF0aW9uCisJICogd2lsbCBwcm9iYWJseSBub3QgYmUgd29ydGggaXRzIG92ZXJoZWFkLiAgQWxzbywgZG9uJ3QgdHJ5IHRvCisJICogdXNlIGxvY2FsIG1vdmVtZW50IGlmIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSBpcyBhbnl0aGluZyBidXQKKwkgKiBBX05PUk1BTC4uLnRoZXJlIGFyZSBqdXN0IHRvbyBtYW55IHdheXMgdGhpcyBjYW4gc2NyZXcgdXAKKwkgKiAobGlrZSwgc2F5LCBsb2NhbC1tb3ZlbWVudCBcbiBnZXR0aW5nIG1hcHBlZCB0byBzb21lIG9ic2N1cmUKKwkgKiBjaGFyYWN0ZXIgYmVjYXVzZSBBX0FMVENIQVJTRVQgaXMgb24pLgorCSAqLworCWlmICh5b2xkID09IC0xIHx8IHhvbGQgPT0gLTEgfHwgTk9UX0xPQ0FMKHlvbGQsIHhvbGQsIHluZXcsIHhuZXcpKSB7CisjaWYgZGVmaW5lZChNQUlOKSB8fCBkZWZpbmVkKE5DVVJTRVNfVEVTVCkKKwkgICAgaWYgKCFwcm9maWxpbmcpIHsKKwkJKHZvaWQpIGZwdXRzKCJub25sb2NhbFxuIiwgc3RkZXJyKTsKKwkJZ290byBub25sb2NhbDsJLyogYWx3YXlzIHJ1biB0aGUgb3B0aW1pemVyIGlmIHByb2ZpbGluZyAqLworCSAgICB9CisjZWxzZQorCSAgICBnb3RvIG5vbmxvY2FsOworI2VuZGlmIC8qIE1BSU4gKi8KKwl9CisgICAgfQorI2lmbmRlZiBOT19PUFRJTUlaRQorICAgIC8qIHRhY3RpYyAjMTogdXNlIGxvY2FsIG1vdmVtZW50ICovCisgICAgaWYgKHlvbGQgIT0gLTEgJiYgeG9sZCAhPSAtMQorCSYmICgobmV3Y29zdCA9IHJlbGF0aXZlX21vdmUoTnVsbFJlc3VsdCwgeW9sZCwgeG9sZCwgeW5ldywgeG5ldywKKwkJCQkgICAgIG92dykpICE9IElORklOSVRZKQorCSYmIG5ld2Nvc3QgPCB1c2Vjb3N0KSB7CisJdGFjdGljID0gMTsKKwl1c2Vjb3N0ID0gbmV3Y29zdDsKKyAgICB9CisKKyAgICAvKiB0YWN0aWMgIzI6IHVzZSBjYXJyaWFnZS1yZXR1cm4gKyBsb2NhbCBtb3ZlbWVudCAqLworICAgIGlmICh5b2xkICE9IC0xICYmIGNhcnJpYWdlX3JldHVybgorCSYmICgobmV3Y29zdCA9IHJlbGF0aXZlX21vdmUoTnVsbFJlc3VsdCwgeW9sZCwgMCwgeW5ldywgeG5ldywgb3Z3KSkKKwkgICAgIT0gSU5GSU5JVFkpCisJJiYgU1AtPl9jcl9jb3N0ICsgbmV3Y29zdCA8IHVzZWNvc3QpIHsKKwl0YWN0aWMgPSAyOworCXVzZWNvc3QgPSBTUC0+X2NyX2Nvc3QgKyBuZXdjb3N0OworICAgIH0KKworICAgIC8qIHRhY3RpYyAjMzogdXNlIGhvbWUtY3Vyc29yICsgbG9jYWwgbW92ZW1lbnQgKi8KKyAgICBpZiAoY3Vyc29yX2hvbWUKKwkmJiAoKG5ld2Nvc3QgPSByZWxhdGl2ZV9tb3ZlKE51bGxSZXN1bHQsIDAsIDAsIHluZXcsIHhuZXcsIG92dykpICE9IElORklOSVRZKQorCSYmIFNQLT5faG9tZV9jb3N0ICsgbmV3Y29zdCA8IHVzZWNvc3QpIHsKKwl0YWN0aWMgPSAzOworCXVzZWNvc3QgPSBTUC0+X2hvbWVfY29zdCArIG5ld2Nvc3Q7CisgICAgfQorCisgICAgLyogdGFjdGljICM0OiB1c2UgaG9tZS1kb3duICsgbG9jYWwgbW92ZW1lbnQgKi8KKyAgICBpZiAoY3Vyc29yX3RvX2xsCisJJiYgKChuZXdjb3N0ID0gcmVsYXRpdmVfbW92ZShOdWxsUmVzdWx0LCBzY3JlZW5fbGluZXMgLSAxLCAwLCB5bmV3LAorCQkJCSAgICAgeG5ldywgb3Z3KSkgIT0gSU5GSU5JVFkpCisJJiYgU1AtPl9sbF9jb3N0ICsgbmV3Y29zdCA8IHVzZWNvc3QpIHsKKwl0YWN0aWMgPSA0OworCXVzZWNvc3QgPSBTUC0+X2xsX2Nvc3QgKyBuZXdjb3N0OworICAgIH0KKworICAgIC8qCisgICAgICogdGFjdGljICM1OiB1c2UgbGVmdCBtYXJnaW4gZm9yIHdyYXAgdG8gcmlnaHQtaGFuZCBzaWRlLAorICAgICAqIHVubGVzcyBzdHJhbmdlIHdyYXAgYmVoYXZpb3IgaW5kaWNhdGVkIGJ5IHhlbmwgbWlnaHQgaG9zZSB1cy4KKyAgICAgKi8KKyAgICB0NV9jcl9jb3N0ID0gKHhvbGQgPiAwID8gU1AtPl9jcl9jb3N0IDogMCk7CisgICAgaWYgKGF1dG9fbGVmdF9tYXJnaW4gJiYgIWVhdF9uZXdsaW5lX2dsaXRjaAorCSYmIHlvbGQgPiAwICYmIGN1cnNvcl9sZWZ0CisJJiYgKChuZXdjb3N0ID0gcmVsYXRpdmVfbW92ZShOdWxsUmVzdWx0LCB5b2xkIC0gMSwgc2NyZWVuX2NvbHVtbnMgLQorCQkJCSAgICAgMSwgeW5ldywgeG5ldywgb3Z3KSkgIT0gSU5GSU5JVFkpCisJJiYgdDVfY3JfY29zdCArIFNQLT5fY3ViMV9jb3N0ICsgbmV3Y29zdCA8IHVzZWNvc3QpIHsKKwl0YWN0aWMgPSA1OworCXVzZWNvc3QgPSB0NV9jcl9jb3N0ICsgU1AtPl9jdWIxX2Nvc3QgKyBuZXdjb3N0OworICAgIH0KKworICAgIC8qCisgICAgICogVGhlc2UgY2FzZXMgYXJlIG9yZGVyZWQgYnkgZXN0aW1hdGVkIHJlbGF0aXZlIGZyZXF1ZW5jeS4KKyAgICAgKi8KKyAgICBpZiAodGFjdGljKQorCUluaXRSZXN1bHQ7CisgICAgc3dpdGNoICh0YWN0aWMpIHsKKyAgICBjYXNlIDE6CisJKHZvaWQpIHJlbGF0aXZlX21vdmUoJnJlc3VsdCwgeW9sZCwgeG9sZCwgeW5ldywgeG5ldywgb3Z3KTsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJKHZvaWQpIF9uY19zYWZlX3N0cmNweSgmcmVzdWx0LCBjYXJyaWFnZV9yZXR1cm4pOworCSh2b2lkKSByZWxhdGl2ZV9tb3ZlKCZyZXN1bHQsIHlvbGQsIDAsIHluZXcsIHhuZXcsIG92dyk7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCSh2b2lkKSBfbmNfc2FmZV9zdHJjcHkoJnJlc3VsdCwgY3Vyc29yX2hvbWUpOworCSh2b2lkKSByZWxhdGl2ZV9tb3ZlKCZyZXN1bHQsIDAsIDAsIHluZXcsIHhuZXcsIG92dyk7CisJYnJlYWs7CisgICAgY2FzZSA0OgorCSh2b2lkKSBfbmNfc2FmZV9zdHJjcHkoJnJlc3VsdCwgY3Vyc29yX3RvX2xsKTsKKwkodm9pZCkgcmVsYXRpdmVfbW92ZSgmcmVzdWx0LCBzY3JlZW5fbGluZXMgLSAxLCAwLCB5bmV3LCB4bmV3LCBvdncpOworCWJyZWFrOworICAgIGNhc2UgNToKKwlpZiAoeG9sZCA+IDApCisJICAgICh2b2lkKSBfbmNfc2FmZV9zdHJjYXQoJnJlc3VsdCwgY2FycmlhZ2VfcmV0dXJuKTsKKwkodm9pZCkgX25jX3NhZmVfc3RyY2F0KCZyZXN1bHQsIGN1cnNvcl9sZWZ0KTsKKwkodm9pZCkgcmVsYXRpdmVfbW92ZSgmcmVzdWx0LCB5b2xkIC0gMSwgc2NyZWVuX2NvbHVtbnMgLSAxLCB5bmV3LAorCQkJICAgICB4bmV3LCBvdncpOworCWJyZWFrOworICAgIH0KKyNlbmRpZiAvKiAhTk9fT1BUSU1JWkUgKi8KKworICBub25sb2NhbDoKKyNpZiBkZWZpbmVkKE1BSU4pIHx8IGRlZmluZWQoTkNVUlNFU19URVNUKQorICAgIGdldHRpbWVvZmRheSgmYWZ0ZXIsIE5VTEwpOworICAgIGRpZmYgPSBhZnRlci50dl91c2VjIC0gYmVmb3JlLnR2X3VzZWMKKwkrIChhZnRlci50dl9zZWMgLSBiZWZvcmUudHZfc2VjKSAqIDEwMDAwMDA7CisgICAgaWYgKCFwcm9maWxpbmcpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkgICAgICAgIm9uc2NyZWVuOiAlZCBtaWNyb3NlYywgJWYgMjguOEticHMgY2hhci1lcXVpdmFsZW50c1xuIiwKKwkJICAgICAgIChpbnQpIGRpZmYsIGRpZmYgLyAyODgpOworI2VuZGlmIC8qIE1BSU4gKi8KKworICAgIGlmICh1c2Vjb3N0ICE9IElORklOSVRZKSB7CisJVFBVVFNfVFJBQ0UoIm12Y3VyIik7CisJdHB1dHMoYnVmZmVyLCAxLCBfbmNfb3V0Y2gpOworCVNQLT5fY3Vyc3JvdyA9IHluZXc7CisJU1AtPl9jdXJzY29sID0geG5ldzsKKwlyZXR1cm4gKE9LKTsKKyAgICB9IGVsc2UKKwlyZXR1cm4gKEVSUik7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK212Y3VyKGludCB5b2xkLCBpbnQgeG9sZCwgaW50IHluZXcsIGludCB4bmV3KQorLyogb3B0aW1pemVkIGN1cnNvciBtb3ZlIGZyb20gKHlvbGQsIHhvbGQpIHRvICh5bmV3LCB4bmV3KSAqLworeworICAgIE5DVVJTRVNfQ0hfVCBvbGRhdHRyOworICAgIGludCBjb2RlOworCisgICAgVFIoVFJBQ0VfQ0FMTFMgfCBUUkFDRV9NT1ZFLCAoVF9DQUxMRUQoIm12Y3VyKCVkLCVkLCVkLCVkKSIpLAorCQkJCSAgeW9sZCwgeG9sZCwgeW5ldywgeG5ldykpOworCisgICAgaWYgKFNQID09IDApIHsKKwljb2RlID0gRVJSOworICAgIH0gZWxzZSBpZiAoeW9sZCA9PSB5bmV3ICYmIHhvbGQgPT0geG5ldykgeworCWNvZGUgPSBPSzsKKyAgICB9IGVsc2UgeworCisJLyoKKwkgKiBNb3N0IHdvcmsgaGVyZSBpcyByb3VuZGluZyBmb3IgdGVybWluYWwgYm91bmRhcmllcyBnZXR0aW5nIHRoZQorCSAqIGNvbHVtbiBwb3NpdGlvbiBpbXBsaWVkIGJ5IHdyYXBhcm91bmQgb3IgdGhlIGxhY2sgdGhlcmVvZiBhbmQKKwkgKiByb2xsaW5nIHVwIHRoZSBzY3JlZW4gdG8gZ2V0IHluZXcgb24gdGhlIHNjcmVlbi4KKwkgKi8KKwlpZiAoeG5ldyA+PSBzY3JlZW5fY29sdW1ucykgeworCSAgICB5bmV3ICs9IHhuZXcgLyBzY3JlZW5fY29sdW1uczsKKwkgICAgeG5ldyAlPSBzY3JlZW5fY29sdW1uczsKKwl9CisKKwkvKgorCSAqIEZvcmNlIHJlc3RvcmUgZXZlbiBpZiBtc2dyIGlzIG9uIHdoZW4gd2UncmUgaW4gYW4gYWx0ZXJuYXRlCisJICogY2hhcmFjdGVyIHNldCAtLSB0aGVzZSBoYXZlIGEgc3Ryb25nIHRlbmRlbmN5IHRvIHNjcmV3IHVwIHRoZSBDUiAmCisJICogTEYgdXNlZCBmb3IgbG9jYWwgY2hhcmFjdGVyIG1vdGlvbnMhCisJICovCisJb2xkYXR0ciA9IFNDUkVFTl9BVFRSUyhTUCk7CisJaWYgKChBdHRyT2Yob2xkYXR0cikgJiBBX0FMVENIQVJTRVQpCisJICAgIHx8IChBdHRyT2Yob2xkYXR0cikgJiYgIW1vdmVfc3RhbmRvdXRfbW9kZSkpIHsKKwkgICAgVFIoVFJBQ0VfQ0hBUlBVVCwgKCJ0dXJuaW5nIG9mZiAoJSNseCkgJXMgYmVmb3JlIG1vdmUiLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBBdHRyT2Yob2xkYXR0ciksCisJCQkgICAgICAgX3RyYWNlYXR0cihBdHRyT2Yob2xkYXR0cikpKSk7CisJICAgICh2b2lkKSBWSURBVFRSKEFfTk9STUFMLCAwKTsKKwl9CisKKwlpZiAoeG9sZCA+PSBzY3JlZW5fY29sdW1ucykgeworCSAgICBpbnQgbDsKKworCSAgICBpZiAoU1AtPl9ubCkgeworCQlsID0gKHhvbGQgKyAxKSAvIHNjcmVlbl9jb2x1bW5zOworCQl5b2xkICs9IGw7CisJCWlmICh5b2xkID49IHNjcmVlbl9saW5lcykKKwkJICAgIGwgLT0gKHlvbGQgLSBzY3JlZW5fbGluZXMgLSAxKTsKKworCQlpZiAobCA+IDApIHsKKwkJICAgIGlmIChjYXJyaWFnZV9yZXR1cm4pIHsKKwkJCVRQVVRTX1RSQUNFKCJjYXJyaWFnZV9yZXR1cm4iKTsKKwkJCXB1dHAoY2FycmlhZ2VfcmV0dXJuKTsKKwkJICAgIH0gZWxzZQorCQkJX25jX291dGNoKCdccicpOworCQkgICAgeG9sZCA9IDA7CisKKwkJICAgIHdoaWxlIChsID4gMCkgeworCQkJaWYgKG5ld2xpbmUpIHsKKwkJCSAgICBUUFVUU19UUkFDRSgibmV3bGluZSIpOworCQkJICAgIHB1dHAobmV3bGluZSk7CisJCQl9IGVsc2UKKwkJCSAgICBfbmNfb3V0Y2goJ1xuJyk7CisJCQlsLS07CisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJLyoKKwkJICogSWYgY2FsbGVyIHNldCBub25sKCksIHdlIGNhbm5vdCByZWFsbHkgdXNlIG5ld2xpbmVzIHRvCisJCSAqIHBvc2l0aW9uIHRvIHRoZSBuZXh0IHJvdy4KKwkJICovCisJCXhvbGQgPSAtMTsKKwkJeW9sZCA9IC0xOworCSAgICB9CisJfQorCisJaWYgKHlvbGQgPiBzY3JlZW5fbGluZXMgLSAxKQorCSAgICB5b2xkID0gc2NyZWVuX2xpbmVzIC0gMTsKKwlpZiAoeW5ldyA+IHNjcmVlbl9saW5lcyAtIDEpCisJICAgIHluZXcgPSBzY3JlZW5fbGluZXMgLSAxOworCisJLyogZGVzdGluYXRpb24gbG9jYXRpb24gaXMgb24gc2NyZWVuIG5vdyAqLworCWNvZGUgPSBvbnNjcmVlbl9tdmN1cih5b2xkLCB4b2xkLCB5bmV3LCB4bmV3LCBUUlVFKTsKKworCS8qCisJICogUmVzdG9yZSBhdHRyaWJ1dGVzIGlmIHdlIGRpc2FibGVkIHRoZW0gYmVmb3JlIG1vdmluZy4KKwkgKi8KKwlpZiAoIVNhbWVBdHRyT2Yob2xkYXR0ciwgU0NSRUVOX0FUVFJTKFNQKSkpIHsKKwkgICAgVFIoVFJBQ0VfQ0hBUlBVVCwgKCJ0dXJuaW5nIG9uICglI2x4KSAlcyBhZnRlciBtb3ZlIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZykgQXR0ck9mKG9sZGF0dHIpLAorCQkJICAgICAgIF90cmFjZWF0dHIoQXR0ck9mKG9sZGF0dHIpKSkpOworCSAgICAodm9pZCkgVklEQVRUUihBdHRyT2Yob2xkYXR0ciksIEdldFBhaXIob2xkYXR0cikpOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworI2lmIGRlZmluZWQoVFJBQ0UpIHx8IGRlZmluZWQoTkNVUlNFU19URVNUKQorTkNVUlNFU19FWFBPUlRfVkFSKGludCkgX25jX29wdGltaXplX2VuYWJsZSA9IE9QVElNSVpFX0FMTDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNQUlOKSB8fCBkZWZpbmVkKE5DVVJTRVNfVEVTVCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW92ZW1lbnQgb3B0aW1pemVyIHRlc3QgY29kZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8ZHVtcF9lbnRyeS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworTkNVUlNFU19FWFBPUlRfVkFSKGNvbnN0IGNoYXIgKikgX25jX3Byb2duYW1lID0gIm12Y3VyIjsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgeG1pdHM7CisKKy8qIHRoZXNlIG92ZXJyaWRlIGxpYl90cHV0cy5jICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCit0cHV0cyhjb25zdCBjaGFyICpzdHJpbmcsIGludCBhZmZjbnQgR0NDX1VOVVNFRCwgaW50ICgqb3V0YykgKGludCkgR0NDX1VOVVNFRCkKKy8qIHN0dWIgdHB1dHMoKSB0aGF0IGR1bXBzIHNlcXVlbmNlcyBpbiBhIHZpc2libGUgZm9ybSAqLworeworICAgIGlmIChwcm9maWxpbmcpCisJeG1pdHMgKz0gc3RybGVuKHN0cmluZyk7CisgICAgZWxzZQorCSh2b2lkKSBmcHV0cyhfbmNfdmlzYnVmKHN0cmluZyksIHN0ZG91dCk7CisgICAgcmV0dXJuIChPSyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3B1dHAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIHJldHVybiAodHB1dHMoc3RyaW5nLCAxLCBfbmNfb3V0Y2gpKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX291dGNoKGludCBjaCkKK3sKKyAgICBwdXRjKGNoLCBzdGRvdXQpOworICAgIHJldHVybiBPSzsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQorZGVsYXlfb3V0cHV0KGludCBtcyBHQ0NfVU5VU0VEKQoreworICAgIHJldHVybiBPSzsKK30KKworc3RhdGljIGNoYXIgdG5hbWVbUEFUSF9NQVhdOworCitzdGF0aWMgdm9pZAorbG9hZF90ZXJtKHZvaWQpCit7CisgICAgKHZvaWQpIHNldHVwdGVybSh0bmFtZSwgU1RET1VUX0ZJTEVOTywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3JvbGwoaW50IG4pCit7CisgICAgaW50IGksIGo7CisKKyAgICBpID0gKFJBTkRfTUFYIC8gbikgKiBuOworICAgIHdoaWxlICgoaiA9IHJhbmQoKSkgPj0gaSkKKwljb250aW51ZTsKKyAgICByZXR1cm4gKGogJSBuKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgc3RyY3B5KHRuYW1lLCBnZXRlbnYoIlRFUk0iKSk7CisgICAgbG9hZF90ZXJtKCk7CisgICAgX25jX3NldHVwc2NyZWVuKGxpbmVzLCBjb2x1bW5zLCBzdGRvdXQsIEZBTFNFLCAwKTsKKyAgICBiYXVkcmF0ZSgpOworCisgICAgX25jX212Y3VyX2luaXQoKTsKKyAgICBOQ19CVUZGRVJFRChGQUxTRSk7CisKKyAgICAodm9pZCkgcHV0cygiVGhlIG12Y3VyIHRlc3Rlci4gIFR5cGUgPyBmb3IgaGVscCIpOworCisgICAgZnB1dHMoInNtY3VwOiIsIHN0ZG91dCk7CisgICAgcHV0Y2hhcignXG4nKTsKKworICAgIGZvciAoOzspIHsKKwlpbnQgZnksIGZ4LCB0eSwgdHgsIG4sIGk7CisJY2hhciBidWZbQlVGU0laXSwgY2FwbmFtZVtCVUZTSVpdOworCisJKHZvaWQpIGZwdXRzKCI+ICIsIHN0ZG91dCk7CisJKHZvaWQpIGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKTsKKworCWlmIChidWZbMF0gPT0gJz8nKSB7CisJICAgICh2b2lkKSBwdXRzKCI/ICAgICAgICAgICAgICAgIC0tIGRpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UiKTsKKwkgICAgKHZvaWQpCisJCXB1dHMoImZ5IGZ4IHR5IHR4ICAgICAgLS0gKDQgbnVtYmVycykgZGlzcGxheSAoZnksZngpLT4odHksdHgpIG1vdmUiKTsKKwkgICAgKHZvaWQpIHB1dHMoInNbY3JvbGxdIG4gdCBiIG0gLS0gZGlzcGxheSBzY3JvbGxpbmcgc2VxdWVuY2UiKTsKKwkgICAgKHZvaWQpCisJCXByaW50ZigicltlbG9hZF0gICAgICAgICAtLSByZWxvYWQgdGVybWluYWwgaW5mbyBmb3IgJXNcbiIsCisJCSAgICAgICB0ZXJtbmFtZSgpKTsKKwkgICAgKHZvaWQpCisJCXB1dHMoImxbb2FkXSA8dGVybT4gICAgLS0gbG9hZCB0ZXJtaW5hbCBpbmZvIGZvciB0eXBlIDx0ZXJtPiIpOworCSAgICAodm9pZCkgcHV0cygiZFtlbGV0ZV0gPGNhcD4gICAtLSBkZWxldGUgbmFtZWQgY2FwYWJpbGl0eSIpOworCSAgICAodm9pZCkgcHV0cygiaVtuc3BlY3RdICAgICAgICAtLSBkaXNwbGF5IHRlcm1pbmFsIGNhcGFiaWxpdGllcyIpOworCSAgICAodm9pZCkKKwkJcHV0cygiY1tvc3RdICAgICAgICAgICAtLSBkdW1wIGN1cnNvci1vcHRpbWl6YXRpb24gY29zdCB0YWJsZSIpOworCSAgICAodm9pZCkgcHV0cygib1tvcHRpbWl6ZV0gICAgICAtLSB0b2dnbGUgbW92ZW1lbnQgb3B0aW1pemF0aW9uIik7CisJICAgICh2b2lkKQorCQlwdXRzKCJ0W29ydHVyZV0gPG51bT4gIC0tIHRvcnR1cmUtdGVzdCB3aXRoIDxudW0+IHJhbmRvbSBtb3ZlcyIpOworCSAgICAodm9pZCkgcHV0cygicVt1aXRdICAgICAgICAgICAtLSBxdWl0IHRoZSBwcm9ncmFtIik7CisJfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAiJWQgJWQgJWQgJWQiLCAmZnksICZmeCwgJnR5LCAmdHgpID09IDQpIHsKKwkgICAgc3RydWN0IHRpbWV2YWwgYmVmb3JlLCBhZnRlcjsKKworCSAgICBwdXRjaGFyKCciJyk7CisKKwkgICAgZ2V0dGltZW9mZGF5KCZiZWZvcmUsIE5VTEwpOworCSAgICBtdmN1cihmeSwgZngsIHR5LCB0eCk7CisJICAgIGdldHRpbWVvZmRheSgmYWZ0ZXIsIE5VTEwpOworCisJICAgIHByaW50ZigiXCIgKCVsZCBtc2VjKVxuIiwKKwkJICAgKGxvbmcpIChhZnRlci50dl91c2VjIC0gYmVmb3JlLnR2X3VzZWMKKwkJCSAgICsgKGFmdGVyLnR2X3NlYyAtIGJlZm9yZS50dl9zZWMpCisJCQkgICAqIDEwMDAwMDApKTsKKwl9IGVsc2UgaWYgKHNzY2FuZihidWYsICJzICVkICVkICVkICVkIiwgJmZ5LCAmZngsICZ0eSwgJnR4KSA9PSA0KSB7CisJICAgIHN0cnVjdCB0aW1ldmFsIGJlZm9yZSwgYWZ0ZXI7CisKKwkgICAgcHV0Y2hhcignIicpOworCisJICAgIGdldHRpbWVvZmRheSgmYmVmb3JlLCBOVUxMKTsKKwkgICAgX25jX3Njcm9sbG4oZnksIGZ4LCB0eSwgdHgpOworCSAgICBnZXR0aW1lb2ZkYXkoJmFmdGVyLCBOVUxMKTsKKworCSAgICBwcmludGYoIlwiICglbGQgbXNlYylcbiIsCisJCSAgIChsb25nKSAoYWZ0ZXIudHZfdXNlYyAtIGJlZm9yZS50dl91c2VjICsgKGFmdGVyLnR2X3NlYyAtCisJCQkJCQkJICAgICBiZWZvcmUudHZfc2VjKQorCQkJICAgKiAxMDAwMDAwKSk7CisJfSBlbHNlIGlmIChidWZbMF0gPT0gJ3InKSB7CisJICAgICh2b2lkKSBzdHJjcHkodG5hbWUsIHRlcm1uYW1lKCkpOworCSAgICBsb2FkX3Rlcm0oKTsKKwl9IGVsc2UgaWYgKHNzY2FuZihidWYsICJsICVzIiwgdG5hbWUpID09IDEpIHsKKwkgICAgbG9hZF90ZXJtKCk7CisJfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAiZCAlcyIsIGNhcG5hbWUpID09IDEpIHsKKwkgICAgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgY29uc3QgKm5wID0gX25jX2ZpbmRfZW50cnkoY2FwbmFtZSwKKwkJCQkJCQkgICAgICAgX25jX2dldF9oYXNoX3RhYmxlKEZBTFNFKSk7CisKKwkgICAgaWYgKG5wID09IE5VTEwpCisJCSh2b2lkKSBwcmludGYoIk5vIHN1Y2ggY2FwYWJpbGl0eSBhcyBcIiVzXCJcbiIsIGNhcG5hbWUpOworCSAgICBlbHNlIHsKKwkJc3dpdGNoIChucC0+bnRlX3R5cGUpIHsKKwkJY2FzZSBCT09MRUFOOgorCQkgICAgY3VyX3Rlcm0tPnR5cGUuQm9vbGVhbnNbbnAtPm50ZV9pbmRleF0gPSBGQUxTRTsKKwkJICAgICh2b2lkKQorCQkJcHJpbnRmKCJCb29sZWFuIGNhcGFiaWxpdHkgYCVzJyAoJWQpIHR1cm5lZCBvZmYuXG4iLAorCQkJICAgICAgIG5wLT5udGVfbmFtZSwgbnAtPm50ZV9pbmRleCk7CisJCSAgICBicmVhazsKKworCQljYXNlIE5VTUJFUjoKKwkJICAgIGN1cl90ZXJtLT50eXBlLk51bWJlcnNbbnAtPm50ZV9pbmRleF0gPSBBQlNFTlRfTlVNRVJJQzsKKwkJICAgICh2b2lkKSBwcmludGYoIk51bWJlciBjYXBhYmlsaXR5IGAlcycgKCVkKSBzZXQgdG8gLTEuXG4iLAorCQkJCSAgbnAtPm50ZV9uYW1lLCBucC0+bnRlX2luZGV4KTsKKwkJICAgIGJyZWFrOworCisJCWNhc2UgU1RSSU5HOgorCQkgICAgY3VyX3Rlcm0tPnR5cGUuU3RyaW5nc1tucC0+bnRlX2luZGV4XSA9IEFCU0VOVF9TVFJJTkc7CisJCSAgICAodm9pZCkgcHJpbnRmKCJTdHJpbmcgY2FwYWJpbGl0eSBgJXMnICglZCkgZGVsZXRlZC5cbiIsCisJCQkJICBucC0+bnRlX25hbWUsIG5wLT5udGVfaW5kZXgpOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0gZWxzZSBpZiAoYnVmWzBdID09ICdpJykgeworCSAgICBkdW1wX2luaXQoKGNoYXIgKikgTlVMTCwgRl9URVJNSU5GTywgU19URVJNSU5GTywgNzAsIDAsIEZBTFNFKTsKKwkgICAgZHVtcF9lbnRyeSgmY3VyX3Rlcm0tPnR5cGUsIEZBTFNFLCBUUlVFLCAwLCAwKTsKKwkgICAgcHV0Y2hhcignXG4nKTsKKwl9IGVsc2UgaWYgKGJ1ZlswXSA9PSAnbycpIHsKKwkgICAgaWYgKF9uY19vcHRpbWl6ZV9lbmFibGUgJiBPUFRJTUlaRV9NVkNVUikgeworCQlfbmNfb3B0aW1pemVfZW5hYmxlICY9IH5PUFRJTUlaRV9NVkNVUjsKKwkJKHZvaWQpIHB1dHMoIk9wdGltaXphdGlvbiBpcyBub3cgb2ZmLiIpOworCSAgICB9IGVsc2UgeworCQlfbmNfb3B0aW1pemVfZW5hYmxlIHw9IE9QVElNSVpFX01WQ1VSOworCQkodm9pZCkgcHV0cygiT3B0aW1pemF0aW9uIGlzIG5vdyBvbi4iKTsKKwkgICAgfQorCX0KKwkvKgorCSAqIFlvdSBjYW4gdXNlIHRoZSBgdCcgdGVzdCB0byBwcm9maWxlIGFuZCB0dW5lIHRoZSBtb3ZlbWVudAorCSAqIG9wdGltaXplci4gIFVzZSBpdGVyYXRpb24gdmFsdWVzIGluIHRocmVlIGRpZ2l0cyBvciBtb3JlLgorCSAqIEF0IGFib3ZlIDUwMDAgaXRlcmF0aW9ucyB0aGUgcHJvZmlsZSB0aW1pbmcgYXZlcmFnZXMgYXJlIHN0YWJsZQorCSAqIHRvIHdpdGhpbiBhIG1pbGxpc2Vjb25kIG9yIHRocmVlLgorCSAqCisJICogVGhlIGBvdmVyaGVhZCcgZmllbGQgb2YgdGhlIHJlcG9ydCB3aWxsIGhlbHAgeW91IHBpY2sgYQorCSAqIENPTVBVVEVfT1ZFUkhFQUQgZmlndXJlIGFwcHJvcHJpYXRlIGZvciB5b3VyIHByb2Nlc3NvciBhbmQKKwkgKiBleHBlY3RlZCBsaW5lIHNwZWVkLiAgVGhlIGB0b3RhbCBlc3RpbWF0ZWQgdGltZScgaXMKKwkgKiBjb21wdXRhdGlvbiB0aW1lIHBsdXMgYSBjaGFyYWN0ZXItdHJhbnNtaXNzaW9uIHRpbWUKKwkgKiBlc3RpbWF0ZSBjb21wdXRlZCBmcm9tIHRoZSBudW1iZXIgb2YgdHJhbnNtaXRzIGFuZCB0aGUgYmF1ZAorCSAqIHJhdGUuCisJICoKKwkgKiBVc2UgdGhpcyB0b2dldGhlciB3aXRoIHRoZSBgbycgY29tbWFuZCB0byBnZXQgYSByZWFkIG9uIHRoZQorCSAqIG9wdGltaXplcidzIGVmZmVjdGl2ZW5lc3MuICBDb21wYXJlIHRoZSB0b3RhbCBlc3RpbWF0ZWQgdGltZXMKKwkgKiBmb3IgYHQnIHJ1bnMgb2YgdGhlIHNhbWUgbGVuZ3RoIGluIGJvdGggb3B0aW1pemVkIGFuZCB1bi1vcHRpbWl6ZWQKKwkgKiBtb2Rlcy4gIEFzIGxvbmcgYXMgdGhlIG9wdGltaXplZCB0aW1lcyBhcmUgbGVzcywgdGhlIG9wdGltaXplcgorCSAqIGlzIHdpbm5pbmcuCisJICovCisJZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgInQgJWQiLCAmbikgPT0gMSkgeworCSAgICBmbG9hdCBjdW10aW1lID0gMC4wLCBwZXJjaGFyOworCSAgICBpbnQgc3BlZWRzW10gPQorCSAgICB7MjQwMCwgOTYwMCwgMTQ0MDAsIDE5MjAwLCAyODgwMCwgMzg0MDAsIDB9OworCisJICAgIHNyYW5kKCh1bnNpZ25lZCkgKGdldHBpZCgpICsgdGltZSgodGltZV90ICopIDApKSk7CisJICAgIHByb2ZpbGluZyA9IFRSVUU7CisJICAgIHhtaXRzID0gMDsKKwkgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkvKgorCQkgKiBUaGlzIGRvZXMgYSBtb3ZlIHRlc3QgYmV0d2VlbiB0d28gcmFuZG9tIGxvY2F0aW9ucywKKwkJICogUmFuZG9tIG1vdmVzIHByb2JhYmx5IHNob3J0LWNoYW5nZSB0aGUgb3B0aW1pemVyLAorCQkgKiB3aGljaCB3aWxsIHdvcmsgYmV0dGVyIG9uIHRoZSBzaG9ydCBtb3ZlcyBwcm9iYWJseQorCQkgKiB0eXBpY2FsIG9mIGRvdXBkYXRlKCkncyB1c2FnZSBwYXR0ZXJuLiAgU3RpbGwsCisJCSAqIHVudGlsIHdlIGhhdmUgYmV0dGVyIGRhdGEuLi4KKwkJICovCisjaWZkZWYgRklORF9DT1JFRFVNUAorCQlpbnQgZnJvbV95ID0gcm9sbChsaW5lcyk7CisJCWludCB0b195ID0gcm9sbChsaW5lcyk7CisJCWludCBmcm9tX3ggPSByb2xsKGNvbHVtbnMpOworCQlpbnQgdG9feCA9IHJvbGwoY29sdW1ucyk7CisKKwkJcHJpbnRmKCIoJWQsJWQpIC0+ICglZCwlZClcbiIsIGZyb21feSwgZnJvbV94LCB0b195LCB0b194KTsKKwkJbXZjdXIoZnJvbV95LCBmcm9tX3gsIHRvX3ksIHRvX3gpOworI2Vsc2UKKwkJbXZjdXIocm9sbChsaW5lcyksIHJvbGwoY29sdW1ucyksIHJvbGwobGluZXMpLCByb2xsKGNvbHVtbnMpKTsKKyNlbmRpZiAvKiBGSU5EX0NPUkVEVU1QICovCisJCWlmIChkaWZmKQorCQkgICAgY3VtdGltZSArPSBkaWZmOworCSAgICB9CisJICAgIHByb2ZpbGluZyA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIEF2ZXJhZ2UgbWlsbGlzZWNvbmRzIHBlciBjaGFyYWN0ZXIgb3B0aW1pemF0aW9uIHRpbWUuCisJICAgICAqIFRoaXMgaXMgdGhlIGtleSBmaWd1cmUgdG8gd2F0Y2ggd2hlbiB0dW5pbmcgdGhlIG9wdGltaXplci4KKwkgICAgICovCisJICAgIHBlcmNoYXIgPSBjdW10aW1lIC8gbjsKKworCSAgICAodm9pZCkgcHJpbnRmKCIlZCBtb3ZlcyAoJWxkIGNoYXJzKSBpbiAlZCBtc2VjLCAlZiBtc2VjIGVhY2g6XG4iLAorCQkJICBuLCB4bWl0cywgKGludCkgY3VtdGltZSwgcGVyY2hhcik7CisKKwkgICAgZm9yIChpID0gMDsgc3BlZWRzW2ldOyBpKyspIHsKKwkJLyoKKwkJICogVG90YWwgZXN0aW1hdGVkIHRpbWUgZm9yIHRoZSBtb3ZlcywgY29tcHV0YXRpb24gYW5kCisJCSAqIHRyYW5zbWlzc2lvbiBib3RoLiBUcmFuc21pc3Npb24gdGltZSBpcyBhbiBlc3RpbWF0ZQorCQkgKiBhc3N1bWluZyA5IGJpdHMvY2hhciwgOCBiaXRzICsgMSBzdG9wIGJpdC4KKwkJICovCisJCWZsb2F0IHRvdGFsZXN0ID0gY3VtdGltZSArIHhtaXRzICogOSAqIDFlNiAvIHNwZWVkc1tpXTsKKworCQkvKgorCQkgKiBQZXItY2hhcmFjdGVyIG9wdGltaXphdGlvbiBvdmVyaGVhZCBpbiBjaGFyYWN0ZXIgdHJhbnNtaXRzCisJCSAqIGF0IHRoZSBjdXJyZW50IHNwZWVkLiAgUm91bmQgdGhpcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyCisJCSAqIHRvIGZpZ3VyZSBDT01QVVRFX09WRVJIRUFEIGZvciB0aGUgc3BlZWQuCisJCSAqLworCQlmbG9hdCBvdmVyaGVhZCA9IHNwZWVkc1tpXSAqIHBlcmNoYXIgLyAxZTY7CisKKwkJKHZvaWQpCisJCSAgICBwcmludGYoIiU2ZCBicHM6ICUzLjJmIGNoYXIteG1pdHMgb3ZlcmhlYWQ7IHRvdGFsIGVzdGltYXRlZCB0aW1lICUxNS4yZlxuIiwKKwkJCSAgIHNwZWVkc1tpXSwgb3ZlcmhlYWQsIHRvdGFsZXN0KTsKKwkgICAgfQorCX0gZWxzZSBpZiAoYnVmWzBdID09ICdjJykgeworCSAgICAodm9pZCkgcHJpbnRmKCJjaGFyIHBhZGRpbmc6ICVkXG4iLCBTUC0+X2NoYXJfcGFkZGluZyk7CisJICAgICh2b2lkKSBwcmludGYoImNyIGNvc3Q6ICVkXG4iLCBTUC0+X2NyX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjdXAgY29zdDogJWRcbiIsIFNQLT5fY3VwX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJob21lIGNvc3Q6ICVkXG4iLCBTUC0+X2hvbWVfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImxsIGNvc3Q6ICVkXG4iLCBTUC0+X2xsX2Nvc3QpOworI2lmIFVTRV9IQVJEX1RBQlMKKwkgICAgKHZvaWQpIHByaW50ZigiaHQgY29zdDogJWRcbiIsIFNQLT5faHRfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImNidCBjb3N0OiAlZFxuIiwgU1AtPl9jYnRfY29zdCk7CisjZW5kaWYgLyogVVNFX0hBUkRfVEFCUyAqLworCSAgICAodm9pZCkgcHJpbnRmKCJjdWIxIGNvc3Q6ICVkXG4iLCBTUC0+X2N1YjFfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImN1ZjEgY29zdDogJWRcbiIsIFNQLT5fY3VmMV9jb3N0KTsKKwkgICAgKHZvaWQpIHByaW50ZigiY3VkMSBjb3N0OiAlZFxuIiwgU1AtPl9jdWQxX2Nvc3QpOworCSAgICAodm9pZCkgcHJpbnRmKCJjdXUxIGNvc3Q6ICVkXG4iLCBTUC0+X2N1dTFfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImN1YiBjb3N0OiAlZFxuIiwgU1AtPl9jdWJfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImN1ZiBjb3N0OiAlZFxuIiwgU1AtPl9jdWZfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImN1ZCBjb3N0OiAlZFxuIiwgU1AtPl9jdWRfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImN1dSBjb3N0OiAlZFxuIiwgU1AtPl9jdXVfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoImhwYSBjb3N0OiAlZFxuIiwgU1AtPl9ocGFfY29zdCk7CisJICAgICh2b2lkKSBwcmludGYoInZwYSBjb3N0OiAlZFxuIiwgU1AtPl92cGFfY29zdCk7CisJfSBlbHNlIGlmIChidWZbMF0gPT0gJ3gnIHx8IGJ1ZlswXSA9PSAncScpCisJICAgIGJyZWFrOworCWVsc2UKKwkgICAgKHZvaWQpIHB1dHMoIkludmFsaWQgY29tbWFuZC4iKTsKKyAgICB9CisKKyAgICAodm9pZCkgZnB1dHMoInJtY3VwOiIsIHN0ZG91dCk7CisgICAgX25jX212Y3VyX3dyYXAoKTsKKyAgICBwdXRjaGFyKCdcbicpOworCisgICAgcmV0dXJuICgwKTsKK30KKworI2VuZGlmIC8qIE1BSU4gKi8KKworLyogbGliX212Y3VyLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9saWJfdHN0cC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90dHkvbGliX3RzdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM4NDExCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90dHkvbGliX3RzdHAuYwpAQCAtMCwwICsxLDM4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTUtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3RzdHAuYworKioKKyoqCVRoZSByb3V0aW5lIF9uY19zaWduYWxfaGFuZGxlcigpLgorKioKKyovCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworI2luY2x1ZGUgPFNpZ0FjdGlvbi5oPgorCisjaWYgU1ZSNF9BQ1RJT04gJiYgIWRlZmluZWQoX1BPU0lYX1NPVVJDRSkKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmCisKK01PRFVMRV9JRCgiJElkOiBsaWJfdHN0cC5jLHYgMS4zNyAyMDA4LzA1LzAzIDE2OjI0OjU2IHRvbSBFeHAgJCIpCisKKyNpZiBkZWZpbmVkKFNJR1RTVFApICYmIChIQVZFX1NJR0FDVElPTiB8fCBIQVZFX1NJR1ZFQykKKyNkZWZpbmUgVVNFX1NJR1RTVFAgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1NJR1RTVFAgMAorI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorc3RhdGljIGNvbnN0IGNoYXIgKgorc2lnbmFsX25hbWUoaW50IHNpZykKK3sKKyAgICBzd2l0Y2ggKHNpZykgeworICAgIGNhc2UgU0lHQUxSTToKKwlyZXR1cm4gIlNJR0FMUk0iOworI2lmZGVmIFNJR0NPTlQKKyAgICBjYXNlIFNJR0NPTlQ6CisJcmV0dXJuICJTSUdDT05UIjsKKyNlbmRpZgorICAgIGNhc2UgU0lHSU5UOgorCXJldHVybiAiU0lHSU5UIjsKKyAgICBjYXNlIFNJR1FVSVQ6CisJcmV0dXJuICJTSUdRVUlUIjsKKyAgICBjYXNlIFNJR1RFUk06CisJcmV0dXJuICJTSUdURVJNIjsKKyNpZmRlZiBTSUdUU1RQCisgICAgY2FzZSBTSUdUU1RQOgorCXJldHVybiAiU0lHVFNUUCI7CisjZW5kaWYKKyNpZmRlZiBTSUdUVE9VCisgICAgY2FzZSBTSUdUVE9VOgorCXJldHVybiAiU0lHVFRPVSI7CisjZW5kaWYKKyNpZmRlZiBTSUdXSU5DSAorICAgIGNhc2UgU0lHV0lOQ0g6CisJcmV0dXJuICJTSUdXSU5DSCI7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorCXJldHVybiAidW5rbm93biBzaWduYWwiOworICAgIH0KK30KKyNlbmRpZgorCisvKgorICogTm90ZTogVGhpcyBjb2RlIGlzIGZyYWdpbGUhICBJdHMgcHJvYmxlbSBpcyB0aGF0IGRpZmZlcmVudCBPU3MKKyAqIGhhbmRsZSByZXN0YXJ0IG9mIHN5c3RlbSBjYWxscyBpbnRlcnJ1cHRlZCBieSBzaWduYWxzIGRpZmZlcmVudGx5LgorICogVGhlIG5jdXJzZXMgY29kZSBuZWVkcyBzaWduYWwtY2FsbCByZXN0YXJ0IHRvIGhhcHBlbiAtLSBvdGhlcndpc2UsCisgKiBpbnRlcnJ1cHRlZCB3Z2V0Y2goKSBjYWxscyB3aWxsIHJldHVybiBGQUlMLCBwcm9iYWJseSBtYWtpbmcgdGhlCisgKiBhcHBsaWNhdGlvbiB0aGluayB0aGUgaW5wdXQgc3RyZWFtIGhhcyBlbmRlZCBhbmQgaXQgc2hvdWxkCisgKiB0ZXJtaW5hdGUuICBJbiBwYXJ0aWN1bGFyLCB5b3Uga25vdyB5b3UgaGF2ZSB0aGlzIHByb2JsZW0gaWYsIHdoZW4KKyAqIHlvdSBzdXNwZW5kIGFuIG5jdXJzZXMtdXNpbmcgbHlueCB3aXRoIF5aIGFuZCByZXN1bWUsIGl0IGRpZXMKKyAqIGltbWVkaWF0ZWx5LgorICoKKyAqIERlZmF1bHQgYmVoYXZpb3Igb2YgUE9TSVggc2lnYWN0aW9uKDIpIGlzIG5vdCB0byByZXN0YXJ0CisgKiBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbHMsIGJ1dCBMaW51eCdzIHNpZ2FjdGlvbiBkb2VzIGl0IGFueXdheSAoYXQKKyAqIGxlYXN0LCBvbiBhbmQgYWZ0ZXIgdGhlIDEuMS40NyBJIChlc3IpIHVzZSkuICBUaHVzIHRoaXMgY29kZSB3b3JrcworICogT0sgdW5kZXIgTGludXguICBUaGUgNC40QlNEIHNpZ2FjdGlvbigyKSBzdXBwb3J0cyBhIChub24tcG9ydGFibGUpCisgKiBTQV9SRVNUQVJUIGZsYWcgdGhhdCBmb3JjZXMgdGhlIHJpZ2h0IGJlaGF2aW9yLiAgVGh1cywgdGhpcyBjb2RlCisgKiBzaG91bGQgd29yayBPSyB1bmRlciBCU0QvT1MsIE5ldEJTRCwgYW5kIEZyZWVCU0QgKGxldCB1cyBrbm93IGlmIGl0CisgKiBkb2VzIG5vdCkuCisgKgorICogU3RvY2sgU3lzdGVtIFZzIChhbmQgYW55dGhpbmcgZWxzZSB1c2luZyBhIHN0cmljdC1QT1NJWAorICogc2lnYWN0aW9uKDIpIHdpdGhvdXQgU0FfUkVTVEFSVCkgbWF5IGhhdmUgYSBwcm9ibGVtLiAgUG9zc2libGUKKyAqIHNvbHV0aW9uczoKKyAqCisgKiAgICBzaWd2ZWMgICAgICByZXN0YXJ0cyBieSBkZWZhdWx0IChTVl9JTlRFUlJVUFQgZmxhZyB0byBub3QgcmVzdGFydCkKKyAqICAgIHNpZ25hbCAgICAgIHJlc3RhcnRzIGJ5IGRlZmF1bHQgaW4gU1ZyNCAoYXNzdW1pbmcgeW91IGxpbmsgd2l0aCAtbHVjYikKKyAqICAgICAgICAgICAgICAgIGFuZCBCU0QsIGJ1dCBub3QgU1ZyMy4KKyAqICAgIHNpZ3NldCAgICAgIHJlc3RhcnRzLCBidXQgaXMgb25seSBhdmFpbGFibGUgdW5kZXIgU1ZyNC9Tb2xhcmlzLgorICoKKyAqIFRoZSBzaWduYWwoMykgY2FsbCBpcyBtYW5kYXRlZCBieSB0aGUgQU5TSSBzdGFuZGFyZCwgYW5kIGl0cworICogaW50ZXJhY3Rpb24gd2l0aCBzaWdhY3Rpb24oMikgaXMgZGVzY3JpYmVkIGluIHRoZSBQT1NJWCBzdGFuZGFyZAorICogKDMuMy40LjIsIHBhZ2UgNzIsbGluZSA5MzQpLiAgQWNjb3JkaW5nIHRvIHNlY3Rpb24gOC4xLCBwYWdlIDE5MSwKKyAqIGhvd2V2ZXIsIHNpZ25hbCgzKSBpdHNlbGYgaXMgbm90IHJlcXVpcmVkIGJ5IFBPU0lYLjEuICBBbmQgUE9TSVggaXMKKyAqIHNpbGVudCBvbiB3aGV0aGVyIGl0IGlzIHJlcXVpcmVkIHRvIHJlc3RhcnQgc2lnbmFscy4KKyAqCisgKiBTby4gIFRoZSBwcmVzZW50IHNpdHVhdGlvbiBpcywgd2UgdXNlIHNpZ2FjdGlvbigyKSB3aXRoIG5vCisgKiBndWFyYW50ZWUgb2YgcmVzdGFydCBhbnl3aGVyZSBidXQgb24gTGludXggYW5kIEJTRC4gIFdlIGNvdWxkCisgKiBzd2l0Y2ggdG8gc2lnbmFsKDMpIGFuZCBjb2xsYXIgTGludXgsIEJTRCwgYW5kIFNWcjQuICBBbnkgd2F5CisgKiB3ZSBzbGljZSBpdCwgU3lzdGVtIFYgVU5JWGVzIG9sZGVyIHRoYW4gU1ZyNCB3aWxsIHByb2JhYmx5IGxvc2UKKyAqICh0aGlzIG1heSBpbmNsdWRlIFhFTklYKS4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHdpbGwgcHJvYmFibHkgYmUgY2hhbmdlZCB0byB1c2Ugc2lnbmFsKDMpIGluCisgKiB0aGUgZnV0dXJlLiAgSWYgbm90aGluZyBlbHNlLCBpdCdzIHNpbXBsZXIuLi4KKyAqLworCisjaWYgVVNFX1NJR1RTVFAKK3N0YXRpYyB2b2lkCit0c3RwKGludCBkdW1teSBHQ0NfVU5VU0VEKQoreworICAgIHNpZ3NldF90IG1hc2ssIG9tYXNrOworICAgIHNpZ2FjdGlvbl90IGFjdCwgb2FjdDsKKworI2lmZGVmIFNJR1RUT1UKKyAgICBpbnQgc2lndHRvdV9ibG9ja2VkOworI2VuZGlmCisKKyAgICBUKCgidHN0cCgpIGNhbGxlZCIpKTsKKworICAgIC8qCisgICAgICogVGhlIHVzZXIgbWF5IGhhdmUgY2hhbmdlZCB0aGUgcHJvZ19tb2RlIHR0eSBiaXRzLCBzbyBzYXZlIHRoZW0uCisgICAgICoKKyAgICAgKiBCdXQgZmlyc3QgdHJ5IHRvIGRldGVjdCB3aGV0aGVyIHdlIHN0aWxsIGFyZSBpbiB0aGUgZm9yZWdyb3VuZAorICAgICAqIHByb2Nlc3MgZ3JvdXAgLSBpZiBub3QsIGFuIGludGVyYWN0aXZlIHNoZWxsIG1heSBhbHJlYWR5IGhhdmUKKyAgICAgKiB0YWtlbiBvd25lcnNoaXAgb2YgdGhlIHR0eSBhbmQgbW9kaWZpZWQgdGhlIHNldHRpbmdzIHdoZW4gb3VyCisgICAgICogcGFyZW50IHdhcyBzdG9wcGVkIGJlZm9yZSB1cywgYW5kIHdlIHdvdWxkIGxpa2VseSBwaWNrIHVwIHRoZQorICAgICAqIHNldHRpbmdzIGFscmVhZHkgbW9kaWZpZWQgYnkgdGhlIHNoZWxsLgorICAgICAqLworICAgIGlmIChTUCAhPSAwICYmICFTUC0+X2VuZHdpbikJLyogZG9uJ3QgZG8gdGhpcyBpZiB3ZSdyZSBub3QgaW4gY3Vyc2VzICovCisjaWYgSEFWRV9UQ0dFVFBHUlAKKwlpZiAodGNnZXRwZ3JwKFNURElOX0ZJTEVOTykgPT0gZ2V0cGdycCgpKQorI2VuZGlmCisJICAgIGRlZl9wcm9nX21vZGUoKTsKKworICAgIC8qCisgICAgICogQmxvY2sgd2luZG93IGNoYW5nZSBhbmQgdGltZXIgc2lnbmFscy4gIFRoZSBsYXR0ZXIKKyAgICAgKiBpcyBiZWNhdXNlIGFwcGxpY2F0aW9ucyB1c2UgdGltZXJzIHRvIGRlY2lkZSB3aGVuCisgICAgICogdG8gcmVwYWludCB0aGUgc2NyZWVuLgorICAgICAqLworICAgICh2b2lkKSBzaWdlbXB0eXNldCgmbWFzayk7CisgICAgKHZvaWQpIHNpZ2FkZHNldCgmbWFzaywgU0lHQUxSTSk7CisjaWYgVVNFX1NJR1dJTkNICisgICAgKHZvaWQpIHNpZ2FkZHNldCgmbWFzaywgU0lHV0lOQ0gpOworI2VuZGlmCisgICAgKHZvaWQpIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm1hc2ssICZvbWFzayk7CisKKyNpZmRlZiBTSUdUVE9VCisgICAgc2lndHRvdV9ibG9ja2VkID0gc2lnaXNtZW1iZXIoJm9tYXNrLCBTSUdUVE9VKTsKKyAgICBpZiAoIXNpZ3R0b3VfYmxvY2tlZCkgeworCSh2b2lkKSBzaWdlbXB0eXNldCgmbWFzayk7CisJKHZvaWQpIHNpZ2FkZHNldCgmbWFzaywgU0lHVFRPVSk7CisJKHZvaWQpIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm1hc2ssIE5VTEwpOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBFbmQgd2luZG93IG1vZGUsIHdoaWNoIGFsc28gcmVzZXRzIHRoZSB0ZXJtaW5hbCBzdGF0ZSB0byB0aGUKKyAgICAgKiBvcmlnaW5hbCAocHJlLWN1cnNlcykgbW9kZXMuCisgICAgICovCisgICAgZW5kd2luKCk7CisKKyAgICAvKiBVbmJsb2NrIFNJR1RTVFAuICovCisgICAgKHZvaWQpIHNpZ2VtcHR5c2V0KCZtYXNrKTsKKyAgICAodm9pZCkgc2lnYWRkc2V0KCZtYXNrLCBTSUdUU1RQKTsKKyNpZmRlZiBTSUdUVE9VCisgICAgaWYgKCFzaWd0dG91X2Jsb2NrZWQpIHsKKwkvKiBVbmJsb2NrIHRoaXMgdG9vIGlmIGl0IHdhc24ndCBibG9ja2VkIG9uIGVudHJ5ICovCisJKHZvaWQpIHNpZ2FkZHNldCgmbWFzaywgU0lHVFRPVSk7CisgICAgfQorI2VuZGlmCisgICAgKHZvaWQpIHNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgTlVMTCk7CisKKyAgICAvKiBOb3cgd2Ugd2FudCB0byByZXNlbmQgU0lHU1RQIHRvIHRoaXMgcHJvY2VzcyBhbmQgc3VzcGVuZCBpdCAqLworICAgIGFjdC5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKyAgICBzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOworICAgIGFjdC5zYV9mbGFncyA9IDA7CisjaWZkZWYgU0FfUkVTVEFSVAorICAgIGFjdC5zYV9mbGFncyB8PSBTQV9SRVNUQVJUOworI2VuZGlmIC8qIFNBX1JFU1RBUlQgKi8KKyAgICBzaWdhY3Rpb24oU0lHVFNUUCwgJmFjdCwgJm9hY3QpOworICAgIGtpbGwoZ2V0cGlkKCksIFNJR1RTVFApOworCisgICAgLyogUHJvY2VzcyBnZXRzIHN1c3BlbmRlZC4uLnRpbWUgcGFzc2VzLi4ucHJvY2VzcyByZXN1bWVzICovCisKKyAgICBUKCgiU0lHQ09OVCByZWNlaXZlZCIpKTsKKyAgICBzaWdhY3Rpb24oU0lHVFNUUCwgJm9hY3QsIE5VTEwpOworICAgIGZsdXNoaW5wKCk7CisKKyAgICAvKgorICAgICAqIElmIHRoZSB1c2VyIG1vZGlmaWVkIHRoZSB0dHkgc3RhdGUgd2hpbGUgc3VzcGVuZGVkLCBoZSB3YW50cworICAgICAqIHRob3NlIGNoYW5nZXMgdG8gc3RpY2suICBTbyBzYXZlIHRoZSBuZXcgImRlZmF1bHQiIHRlcm1pbmFsIHN0YXRlLgorICAgICAqLworICAgIGRlZl9zaGVsbF9tb2RlKCk7CisKKyAgICAvKgorICAgICAqIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgZG91cGRhdGUoKSB3aWxsIHJlc3RvcmUgdGhlCisgICAgICogcHJvZ3JhbS1tb2RlIHR0eSBzdGF0ZSwgYW5kIGlzc3VlIGVudGVyX2NhX21vZGUgaWYgbmVlZCBiZS4KKyAgICAgKi8KKyAgICBkb3VwZGF0ZSgpOworCisgICAgLyogUmVzZXQgdGhlIHNpZ25hbHMuICovCisgICAgKHZvaWQpIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOworfQorI2VuZGlmIC8qIFVTRV9TSUdUU1RQICovCisKK3N0YXRpYyB2b2lkCitjbGVhbnVwKGludCBzaWcpCit7CisgICAgLyoKKyAgICAgKiBBY3R1YWxseSwgZG9pbmcgYW55IHNvcnQgb2YgSS9PIGZyb20gd2l0aGluIGFuIHNpZ25hbCBoYW5kbGVyIGlzCisgICAgICogInVuc2FmZSIuICBCdXQgd2UnbGwgX3RyeV8gdG8gY2xlYW4gdXAgdGhlIHNjcmVlbiBhbmQgdGVybWluYWwKKyAgICAgKiBzZXR0aW5ncyBvbiB0aGUgd2F5IG91dC4KKyAgICAgKi8KKyAgICBpZiAoIV9uY19nbG9iYWxzLmNsZWFudXBfbmVzdGVkKysKKwkmJiAoc2lnID09IFNJR0lOVAorCSAgICB8fCBzaWcgPT0gU0lHUVVJVCkpIHsKKyNpZiBIQVZFX1NJR0FDVElPTiB8fCBIQVZFX1NJR1ZFQworCXNpZ2FjdGlvbl90IGFjdDsKKwlzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOworCWFjdC5zYV9mbGFncyA9IDA7CisJYWN0LnNhX2hhbmRsZXIgPSBTSUdfSUdOOworCWlmIChzaWdhY3Rpb24oc2lnLCAmYWN0LCBOVUxMKSA9PSAwKQorI2Vsc2UKKwlpZiAoc2lnbmFsKHNpZywgU0lHX0lHTikgIT0gU0lHX0VSUikKKyNlbmRpZgorCXsKKwkgICAgU0NSRUVOICpzY2FuOworCSAgICBmb3IgKGVhY2hfc2NyZWVuKHNjYW4pKSB7CisJCWlmIChzY2FuLT5fb2ZwICE9IDAKKwkJICAgICYmIGlzYXR0eShmaWxlbm8oc2Nhbi0+X29mcCkpKSB7CisJCSAgICBzY2FuLT5fY2xlYW51cCA9IFRSVUU7CisJCSAgICBzY2FuLT5fb3V0Y2ggPSBfbmNfb3V0Y2g7CisJCX0KKwkJc2V0X3Rlcm0oc2Nhbik7CisJCWVuZHdpbigpOworCQlpZiAoU1ApCisJCSAgICBTUC0+X2VuZHdpbiA9IEZBTFNFOwkvKiBpbiBjYXNlIHdlIGhhdmUgYW4gYXRleGl0ISAqLworCSAgICB9CisJfQorICAgIH0KKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKKyNpZiBVU0VfU0lHV0lOQ0gKK3N0YXRpYyB2b2lkCitzaWd3aW5jaChpbnQgc2lnIEdDQ19VTlVTRUQpCit7CisgICAgX25jX2dsb2JhbHMuaGF2ZV9zaWd3aW5jaCA9IDE7Cit9CisjZW5kaWYgLyogVVNFX1NJR1dJTkNIICovCisKKy8qCisgKiBJZiB0aGUgZ2l2ZW4gc2lnbmFsIGlzIHN0aWxsIGluIGl0cyBkZWZhdWx0IHN0YXRlLCBzZXQgaXQgdG8gdGhlIGdpdmVuCisgKiBoYW5kbGVyLgorICovCitzdGF0aWMgaW50CitDYXRjaElmRGVmYXVsdChpbnQgc2lnLCBSRVRTSUdUWVBFICgqaGFuZGxlcikgKGludCkpCit7CisgICAgaW50IHJlc3VsdDsKKyNpZiBIQVZFX1NJR0FDVElPTiB8fCBIQVZFX1NJR1ZFQworICAgIHNpZ2FjdGlvbl90IG9sZF9hY3Q7CisgICAgc2lnYWN0aW9uX3QgbmV3X2FjdDsKKworICAgIG1lbXNldCgmbmV3X2FjdCwgMCwgc2l6ZW9mKG5ld19hY3QpKTsKKyAgICBzaWdlbXB0eXNldCgmbmV3X2FjdC5zYV9tYXNrKTsKKyNpZmRlZiBTQV9SRVNUQVJUCisjaWZkZWYgU0lHV0lOQ0gKKyAgICBpZiAoc2lnICE9IFNJR1dJTkNIKQorI2VuZGlmCisJbmV3X2FjdC5zYV9mbGFncyB8PSBTQV9SRVNUQVJUOworI2VuZGlmIC8qIFNBX1JFU1RBUlQgKi8KKyAgICBuZXdfYWN0LnNhX2hhbmRsZXIgPSBoYW5kbGVyOworCisgICAgaWYgKHNpZ2FjdGlvbihzaWcsIE5VTEwsICZvbGRfYWN0KSA9PSAwCisJJiYgKG9sZF9hY3Quc2FfaGFuZGxlciA9PSBTSUdfREZMCisJICAgIHx8IG9sZF9hY3Quc2FfaGFuZGxlciA9PSBoYW5kbGVyCisjaWYgVVNFX1NJR1dJTkNICisJICAgIHx8IChzaWcgPT0gU0lHV0lOQ0ggJiYgb2xkX2FjdC5zYV9oYW5kbGVyID09IFNJR19JR04pCisjZW5kaWYKKwkpKSB7CisJKHZvaWQpIHNpZ2FjdGlvbihzaWcsICZuZXdfYWN0LCBOVUxMKTsKKwlyZXN1bHQgPSBUUlVFOworICAgIH0gZWxzZSB7CisJcmVzdWx0ID0gRkFMU0U7CisgICAgfQorI2Vsc2UgLyogIUhBVkVfU0lHQUNUSU9OICovCisgICAgUkVUU0lHVFlQRSAoKm9oYW5kbGVyKSAoaW50KTsKKworICAgIG9oYW5kbGVyID0gc2lnbmFsKHNpZywgU0lHX0lHTik7CisgICAgaWYgKG9oYW5kbGVyID09IFNJR19ERkwKKwl8fCBvaGFuZGxlciA9PSBoYW5kbGVyCisjaWYgVVNFX1NJR1dJTkNICisJfHwgKHNpZyA9PSBTSUdXSU5DSCAmJiBvaGFuZGxlciA9PSBTSUdfSUdOKQorI2VuZGlmCisJKSB7CisJc2lnbmFsKHNpZywgaGFuZGxlcik7CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9IGVsc2UgeworCXNpZ25hbChzaWcsIG9oYW5kbGVyKTsKKwlyZXN1bHQgPSBGQUxTRTsKKyAgICB9CisjZW5kaWYKKyAgICBUKCgiQ2F0Y2hJZkRlZmF1bHQgLSB3aWxsICVzY2F0Y2ggJXMiLAorICAgICAgIHJlc3VsdCA/ICIiIDogIm5vdCAiLCBzaWduYWxfbmFtZShzaWcpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoaXMgaXMgaW52b2tlZCBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgKGUuZy4sIGZyb20gJ2luaXRzY3IoKScpLCB0bworICogaW5pdGlhbGl6ZSB0aGUgc2lnbmFsIGNhdGNoZXJzLCBhbmQgdGhlcmVhZnRlciB3aGVuIHNwYXduaW5nIGEgc2hlbGwgKGFuZAorICogcmV0dXJuaW5nKSB0byBkaXNhYmxlL2VuYWJsZSB0aGUgU0lHVFNUUCAoaS5lLiwgXlopIGNhdGNoZXIuCisgKgorICogSWYgdGhlIGFwcGxpY2F0aW9uIGhhcyBhbHJlYWR5IHNldCBvbmUgb2YgdGhlIHNpZ25hbHMsIHdlJ2xsIG5vdCBtb2RpZnkgaXQKKyAqIChkdXJpbmcgaW5pdGlhbGl6YXRpb24pLgorICoKKyAqIFRoZSBYU0kgZG9jdW1lbnQgaW1wbGllcyB0aGF0IHdlIHNob3VsZG4ndCBrZWVwIHRoZSBTSUdUU1RQIGhhbmRsZXIgaWYKKyAqIHRoZSBjYWxsZXIgbGF0ZXIgY2hhbmdlcyBpdHMgbWluZCwgYnV0IHRoYXQgZG9lc24ndCBzZWVtIGNvcnJlY3QuCisgKi8KK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfc2lnbmFsX2hhbmRsZXIoYm9vbCBlbmFibGUpCit7CisgICAgVCgoVF9DQUxMRUQoIl9uY19zaWduYWxfaGFuZGxlciglZCkiKSwgZW5hYmxlKSk7CisjaWYgVVNFX1NJR1RTVFAJCQkvKiBYZW5peCAyLnggZG9lc24ndCBoYXZlIFNJR1RTVFAsIGZvciBleGFtcGxlICovCisgICAgeworCXN0YXRpYyBib29sIGlnbm9yZV90c3RwID0gRkFMU0U7CisKKwlpZiAoIWlnbm9yZV90c3RwKSB7CisJICAgIHN0YXRpYyBzaWdhY3Rpb25fdCBuZXdfc2lnYWN0aW9uLCBvbGRfc2lnYWN0aW9uOworCisJICAgIGlmICghZW5hYmxlKSB7CisJCW5ld19zaWdhY3Rpb24uc2FfaGFuZGxlciA9IFNJR19JR047CisJCXNpZ2FjdGlvbihTSUdUU1RQLCAmbmV3X3NpZ2FjdGlvbiwgJm9sZF9zaWdhY3Rpb24pOworCSAgICB9IGVsc2UgaWYgKG5ld19zaWdhY3Rpb24uc2FfaGFuZGxlciAhPSBTSUdfREZMKSB7CisJCXNpZ2FjdGlvbihTSUdUU1RQLCAmb2xkX3NpZ2FjdGlvbiwgTlVMTCk7CisJICAgIH0gZWxzZSBpZiAoc2lnYWN0aW9uKFNJR1RTVFAsIE5VTEwsICZvbGRfc2lnYWN0aW9uKSA9PSAwCisJCSAgICAgICAmJiAob2xkX3NpZ2FjdGlvbi5zYV9oYW5kbGVyID09IFNJR19ERkwpKSB7CisJCXNpZ2VtcHR5c2V0KCZuZXdfc2lnYWN0aW9uLnNhX21hc2spOworI2lmZGVmIFNBX1JFU1RBUlQKKwkJbmV3X3NpZ2FjdGlvbi5zYV9mbGFncyB8PSBTQV9SRVNUQVJUOworI2VuZGlmIC8qIFNBX1JFU1RBUlQgKi8KKwkJbmV3X3NpZ2FjdGlvbi5zYV9oYW5kbGVyID0gdHN0cDsKKwkJKHZvaWQpIHNpZ2FjdGlvbihTSUdUU1RQLCAmbmV3X3NpZ2FjdGlvbiwgTlVMTCk7CisJICAgIH0gZWxzZSB7CisJCWlnbm9yZV90c3RwID0gVFJVRTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogIVVTRV9TSUdUU1RQICovCisKKyAgICBpZiAoIV9uY19nbG9iYWxzLmluaXRfc2lnbmFscykgeworCWlmIChlbmFibGUpIHsKKwkgICAgQ2F0Y2hJZkRlZmF1bHQoU0lHSU5ULCBjbGVhbnVwKTsKKwkgICAgQ2F0Y2hJZkRlZmF1bHQoU0lHVEVSTSwgY2xlYW51cCk7CisjaWYgVVNFX1NJR1dJTkNICisJICAgIENhdGNoSWZEZWZhdWx0KFNJR1dJTkNILCBzaWd3aW5jaCk7CisjZW5kaWYKKwkgICAgX25jX2dsb2JhbHMuaW5pdF9zaWduYWxzID0gVFJVRTsKKwl9CisgICAgfQorICAgIHJldHVyblZvaWQ7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9saWJfdHdhaXQuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L2xpYl90d2FpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDEyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9saWJfdHdhaXQuYwpAQCAtMCwwICsxLDQ1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3R3YWl0LmMKKyoqCisqKglUaGUgcm91dGluZSBfbmNfdGltZWRfd2FpdCgpLgorKioKKyoqCShUaGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBFcmljIFJheW1vbmQ7IGhvd2V2ZXIgZXhjZXB0IGZvcgorKioJY29tbWVudHMsIG5vbmUgb2YgdGhlIG9yaWdpbmFsIGNvZGUgcmVtYWlucyAtIFQuRGlja2V5KS4KKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaWYgZGVmaW5lZCBfX0hBSUtVX18gJiYgZGVmaW5lZCBfX0JFT1NfXworI3VuZGVmIF9fQkVPU19fCisjZW5kaWYKKworI2lmZGVmIF9fQkVPU19fCisjdW5kZWYgZmFsc2UKKyN1bmRlZiB0cnVlCisjaW5jbHVkZSA8T1MuaD4KKyNlbmRpZgorCisjaWYgVVNFX0ZVTkNfUE9MTAorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVuZGlmCisjZWxpZiBIQVZFX1NFTEVDVAorIyBpZiBIQVZFX1NZU19USU1FX0ggJiYgSEFWRV9TWVNfVElNRV9TRUxFQ1QKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1lTX1NFTEVDVF9ICisjICBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjIGVuZGlmCisjZW5kaWYKKworI3VuZGVmIENVUgorCitNT0RVTEVfSUQoIiRJZDogbGliX3R3YWl0LmMsdiAxLjU5IDIwMDgvMDgvMzAgMjA6MDg6MTkgdG9tIEV4cCAkIikKKworc3RhdGljIGxvbmcKK19uY19nZXR0aW1lKFRpbWVUeXBlICogdDAsIGJvb2wgZmlyc3QpCit7CisgICAgbG9uZyByZXM7CisKKyNpZiBQUkVDSVNFX0dFVFRJTUUKKyAgICBUaW1lVHlwZSB0MTsKKyAgICBnZXR0aW1lb2ZkYXkoJnQxLCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgIGlmIChmaXJzdCkgeworCSp0MCA9IHQxOworCXJlcyA9IDA7CisgICAgfSBlbHNlIHsKKwkvKiAudHZfc2VjIGFuZCAudHZfdXNlYyBhcmUgdW5zaWduZWQsIGJlIGNhcmVmdWwgd2hlbiBzdWJ0cmFjdGluZyAqLworCWlmICh0MC0+dHZfdXNlYyA+IHQxLnR2X3VzZWMpIHsKKwkgICAgdDEudHZfdXNlYyArPSAxMDAwMDAwOwkvKiBDb252ZXJ0IDFzIGluIDFlNiBtaWNyb3NlY3MgKi8KKwkgICAgdDEudHZfc2VjLS07CisJfQorCXJlcyA9ICh0MS50dl9zZWMgLSB0MC0+dHZfc2VjKSAqIDEwMDAKKwkgICAgKyAodDEudHZfdXNlYyAtIHQwLT50dl91c2VjKSAvIDEwMDA7CisgICAgfQorI2Vsc2UKKyAgICB0aW1lX3QgdDEgPSB0aW1lKCh0aW1lX3QgKikgMCk7CisgICAgaWYgKGZpcnN0KSB7CisJKnQwID0gdDE7CisgICAgfQorICAgIHJlcyA9ICh0MSAtICp0MCkgKiAxMDAwOworI2VuZGlmCisgICAgVFIoVFJBQ0VfSUVWRU5ULCAoIiVzIHRpbWU6ICVsZCBtc2VjIiwgZmlyc3QgPyAiZ2V0IiA6ICJlbGFwc2VkIiwgcmVzKSk7CisgICAgcmV0dXJuIHJlczsKK30KKworI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX2V2ZW50bGlzdF90aW1lb3V0KF9uY19ldmVudGxpc3QgKiBldmwpCit7CisgICAgaW50IGV2ZW50X2RlbGF5ID0gLTE7CisgICAgaW50IG47CisKKyAgICBpZiAoZXZsICE9IDApIHsKKworCWZvciAobiA9IDA7IG4gPCBldmwtPmNvdW50OyArK24pIHsKKwkgICAgX25jX2V2ZW50ICpldiA9IGV2bC0+ZXZlbnRzW25dOworCisJICAgIGlmIChldi0+dHlwZSA9PSBfTkNfRVZFTlRfVElNRU9VVF9NU0VDKSB7CisJCWV2ZW50X2RlbGF5ID0gZXYtPmRhdGEudGltZW91dF9tc2VjOworCQlpZiAoZXZlbnRfZGVsYXkgPCAwKQorCQkgICAgZXZlbnRfZGVsYXkgPSBJTlRfTUFYOwkvKiBGSVhNRSBJcyB0aGlzIGRlZmluZWQ/ICovCisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBldmVudF9kZWxheTsKK30KKyNlbmRpZiAvKiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMgKi8KKworLyoKKyAqIFdhaXQgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgcmV0dXJuaW5nIG5vbnplcm8gaWYgdGhlIHRpbWVyCisgKiBkaWRuJ3QgZXhwaXJlIGJlZm9yZSB0aGVyZSBpcyBhY3Rpdml0eSBvbiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvcnMuCisgKiBUaGUgZmlsZS1kZXNjcmlwdG9ycyBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBtb2RlOgorICoJMCAtIG5vbmUgKGFic29sdXRlIHRpbWUpCisgKgkxIC0gbmN1cnNlcycgbm9ybWFsIGlucHV0LWRlc2NyaXB0b3IKKyAqCTIgLSBtb3VzZSBkZXNjcmlwdG9yLCBpZiBhbnkKKyAqCTMgLSBlaXRoZXIgaW5wdXQgb3IgbW91c2UuCisgKgorICogRXhwZXJpbWVudGFsOiAgaWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTIGlzIGRlZmluZWQsIChtb2RlICYgNCkgZGV0ZXJtaW5lcworICogd2hldGhlciB0byBwYXkgYXR0ZW50aW9uIHRvIGV2bCBhcmd1bWVudC4gIElmIHNldCwgdGhlIHNtYWxsZXN0IG9mCisgKiBtaWxsaXNlY29uZCBhbmQgb2YgdGltZW91dCBvZiBldmwgaXMgdGFrZW4uCisgKgorICogV2UgcmV0dXJuIGEgbWFzayB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBtb2RlIChlLmcuLCAyIGZvciBtb3VzZSBhY3Rpdml0eSkuCisgKgorICogSWYgdGhlIG1pbGxpc2Vjb25kcyBnaXZlbiBhcmUgLTEsIHRoZSB3YWl0IGJsb2NrcyB1bnRpbCBhY3Rpdml0eSBvbiB0aGUKKyAqIGRlc2NyaXB0b3JzLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCitfbmNfdGltZWRfd2FpdChTQ1JFRU4gKnNwLAorCSAgICAgICBpbnQgbW9kZSwKKwkgICAgICAgaW50IG1pbGxpc2Vjb25kcywKKwkgICAgICAgaW50ICp0aW1lbGVmdAorCSAgICAgICBFVkVOVExJU1RfMm5kKF9uY19ldmVudGxpc3QgKiBldmwpKQoreworICAgIGludCBmZDsKKyAgICBpbnQgY291bnQ7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgVGltZVR5cGUgdDA7CisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBpbnQgdGltZW91dF9pc19ldmVudCA9IDA7CisgICAgaW50IG47CisjZW5kaWYKKworI2lmIFVTRV9GVU5DX1BPTEwKKyNkZWZpbmUgTUlOX0ZEUyAyCisgICAgc3RydWN0IHBvbGxmZCBmZF9saXN0W01JTl9GRFNdOworICAgIHN0cnVjdCBwb2xsZmQgKmZkcyA9IGZkX2xpc3Q7CisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorI2VsaWYgSEFWRV9TRUxFQ1QKKyAgICBmZF9zZXQgc2V0OworI2VuZGlmCisKKyAgICBsb25nIHN0YXJ0dGltZSwgcmV0dXJudGltZTsKKworICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJzdGFydCB0d2FpdDogJWQgbWlsbGlzZWNvbmRzLCBtb2RlOiAlZCIsCisJCSAgICAgIG1pbGxpc2Vjb25kcywgbW9kZSkpOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKG1vZGUgJiA0KSB7CisJaW50IGV2ZW50X2RlbGF5ID0gX25jX2V2ZW50bGlzdF90aW1lb3V0KGV2bCk7CisKKwlpZiAoZXZlbnRfZGVsYXkgPj0gMAorCSAgICAmJiAobWlsbGlzZWNvbmRzID49IGV2ZW50X2RlbGF5IHx8IG1pbGxpc2Vjb25kcyA8IDApKSB7CisJICAgIG1pbGxpc2Vjb25kcyA9IGV2ZW50X2RlbGF5OworCSAgICB0aW1lb3V0X2lzX2V2ZW50ID0gMTsKKwl9CisgICAgfQorI2VuZGlmCisKKyNpZiBQUkVDSVNFX0dFVFRJTUUgJiYgSEFWRV9OQU5PU0xFRVAKKyAgcmV0cnk6CisjZW5kaWYKKyAgICBzdGFydHRpbWUgPSBfbmNfZ2V0dGltZSgmdDAsIFRSVUUpOworCisgICAgY291bnQgPSAwOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKChtb2RlICYgNCkgJiYgZXZsKQorCWV2bC0+cmVzdWx0X2ZsYWdzID0gMDsKKyNlbmRpZgorCisjaWYgVVNFX0ZVTkNfUE9MTAorICAgIG1lbXNldChmZF9saXN0LCAwLCBzaXplb2YoZmRfbGlzdCkpOworCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKChtb2RlICYgNCkgJiYgZXZsKQorCWZkcyA9IHR5cGVNYWxsb2Moc3RydWN0IHBvbGxmZCwgTUlOX0ZEUyArIGV2bC0+Y291bnQpOworI2VuZGlmCisKKyAgICBpZiAobW9kZSAmIDEpIHsKKwlmZHNbY291bnRdLmZkID0gc3AtPl9pZmQ7CisJZmRzW2NvdW50XS5ldmVudHMgPSBQT0xMSU47CisJY291bnQrKzsKKyAgICB9CisgICAgaWYgKChtb2RlICYgMikKKwkmJiAoZmQgPSBzcC0+X21vdXNlX2ZkKSA+PSAwKSB7CisJZmRzW2NvdW50XS5mZCA9IGZkOworCWZkc1tjb3VudF0uZXZlbnRzID0gUE9MTElOOworCWNvdW50Kys7CisgICAgfQorI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworICAgIGlmICgobW9kZSAmIDQpICYmIGV2bCkgeworCWZvciAobiA9IDA7IG4gPCBldmwtPmNvdW50OyArK24pIHsKKwkgICAgX25jX2V2ZW50ICpldiA9IGV2bC0+ZXZlbnRzW25dOworCisJICAgIGlmIChldi0+dHlwZSA9PSBfTkNfRVZFTlRfRklMRQorCQkmJiAoZXYtPmRhdGEuZmV2LmZsYWdzICYgX05DX0VWRU5UX0ZJTEVfUkVBREFCTEUpKSB7CisJCWZkc1tjb3VudF0uZmQgPSBldi0+ZGF0YS5mZXYuZmQ7CisJCWZkc1tjb3VudF0uZXZlbnRzID0gUE9MTElOOworCQljb3VudCsrOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgcmVzdWx0ID0gcG9sbChmZHMsICh1bnNpZ25lZCkgY291bnQsIG1pbGxpc2Vjb25kcyk7CisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBpZiAoKG1vZGUgJiA0KSAmJiBldmwpIHsKKwlpbnQgYzsKKworCWlmICghcmVzdWx0KQorCSAgICBjb3VudCA9IDA7CisKKwlmb3IgKG4gPSAwOyBuIDwgZXZsLT5jb3VudDsgKytuKSB7CisJICAgIF9uY19ldmVudCAqZXYgPSBldmwtPmV2ZW50c1tuXTsKKworCSAgICBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX0ZJTEUKKwkJJiYgKGV2LT5kYXRhLmZldi5mbGFncyAmIF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFKSkgeworCQlldi0+ZGF0YS5mZXYucmVzdWx0ID0gMDsKKwkJZm9yIChjID0gMDsgYyA8IGNvdW50OyBjKyspCisJCSAgICBpZiAoZmRzW2NdLmZkID09IGV2LT5kYXRhLmZldi5mZAorCQkJJiYgZmRzW2NdLnJldmVudHMgJiBQT0xMSU4pIHsKKwkJCWV2LT5kYXRhLmZldi5yZXN1bHQgfD0gX05DX0VWRU5UX0ZJTEVfUkVBREFCTEU7CisJCQlldmwtPnJlc3VsdF9mbGFncyB8PSBfTkNfRVZFTlRfRklMRV9SRUFEQUJMRTsKKwkJICAgIH0KKwkgICAgfSBlbHNlIGlmIChldi0+dHlwZSA9PSBfTkNfRVZFTlRfVElNRU9VVF9NU0VDCisJCSAgICAgICAmJiAhcmVzdWx0ICYmIHRpbWVvdXRfaXNfZXZlbnQpIHsKKwkJZXZsLT5yZXN1bHRfZmxhZ3MgfD0gX05DX0VWRU5UX1RJTUVPVVRfTVNFQzsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBpZiAoZmRzICE9IGZkX2xpc3QpCisJZnJlZSgoY2hhciAqKSBmZHMpOworCisjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX0JFT1NfXykKKyAgICAvKgorICAgICAqIEJlT1MncyBzZWxlY3QoKSBpcyBkZWNsYXJlZCBpbiBzb2NrZXQuaCwgc28gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcworICAgICAqIG5vdCBzZWUgaXQuICBUaGF0J3MganVzdCBhcyB3ZWxsLCBzaW5jZSB0aGF0IGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yCisgICAgICogc29ja2V0cy4gIFRoaXMgKHVzaW5nIHNub296ZSBhbmQgaW9jdGwpIHdhcyBkaXN0aWxsZWQgZnJvbSBCZSdzIHBhdGNoCisgICAgICogZm9yIG5jdXJzZXMgd2hpY2ggdXNlcyBhIHNlcGFyYXRlIHRocmVhZCB0byBzaW11bGF0ZSBzZWxlY3QoKS4KKyAgICAgKgorICAgICAqIEZJWE1FOiB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBpb2N0bCBhcmVuJ3QgdmVyeSBjbGVhciBpZiB3ZSBnZXQKKyAgICAgKiBpbnRlcnJ1cHRlZC4KKyAgICAgKgorICAgICAqIEZJWE1FOiB0aGlzIGFzc3VtZXMgbW9kZSYxIGlmIG1pbGxpc2Vjb25kcyA8IDAgKHNlZSBsaWJfZ2V0Y2guYykuCisgICAgICovCisgICAgcmVzdWx0ID0gMDsKKyAgICBpZiAobW9kZSAmIDEpIHsKKwlpbnQgc3RlcCA9IChtaWxsaXNlY29uZHMgPCAwKSA/IDAgOiA1MDAwOworCWJpZ3RpbWVfdCBkOworCWJpZ3RpbWVfdCB1c2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAqIDEwMDA7CisJaW50IG4sIGhvd21hbnk7CisKKwlpZiAodXNlY29uZHMgPD0gMCkJLyogd2UncmUgaGVyZSB0byBnbyBfdGhyb3VnaF8gdGhlIGxvb3AgKi8KKwkgICAgdXNlY29uZHMgPSAxOworCisJZm9yIChkID0gMDsgZCA8IHVzZWNvbmRzOyBkICs9IHN0ZXApIHsKKwkgICAgbiA9IDA7CisJICAgIGhvd21hbnkgPSBpb2N0bCgwLCAnaWNocicsICZuKTsKKwkgICAgaWYgKGhvd21hbnkgPj0gMCAmJiBuID4gMCkgeworCQlyZXN1bHQgPSAxOworCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAodXNlY29uZHMgPiAxICYmIHN0ZXAgPiAwKSB7CisJCXNub296ZShzdGVwKTsKKwkJbWlsbGlzZWNvbmRzIC09IChzdGVwIC8gMTAwMCk7CisJCWlmIChtaWxsaXNlY29uZHMgPD0gMCkgeworCQkgICAgbWlsbGlzZWNvbmRzID0gMDsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPiAwKSB7CisJc25vb3plKG1pbGxpc2Vjb25kcyAqIDEwMDApOworCW1pbGxpc2Vjb25kcyA9IDA7CisgICAgfQorI2VsaWYgSEFWRV9TRUxFQ1QKKyAgICAvKgorICAgICAqIHNlbGVjdCgpIG1vZGlmaWVzIHRoZSBmZF9zZXQgYXJndW1lbnRzOyBkbyB0aGlzIGluIHRoZQorICAgICAqIGxvb3AuCisgICAgICovCisgICAgRkRfWkVSTygmc2V0KTsKKworICAgIGlmIChtb2RlICYgMSkgeworCUZEX1NFVChzcC0+X2lmZCwgJnNldCk7CisJY291bnQgPSBzcC0+X2lmZCArIDE7CisgICAgfQorICAgIGlmICgobW9kZSAmIDIpCisJJiYgKGZkID0gc3AtPl9tb3VzZV9mZCkgPj0gMCkgeworCUZEX1NFVChmZCwgJnNldCk7CisJY291bnQgPSBtYXgoZmQsIGNvdW50KSArIDE7CisgICAgfQorI2lmZGVmIE5DVVJTRVNfV0dFVENIX0VWRU5UUworICAgIGlmICgobW9kZSAmIDQpICYmIGV2bCkgeworCWZvciAobiA9IDA7IG4gPCBldmwtPmNvdW50OyArK24pIHsKKwkgICAgX25jX2V2ZW50ICpldiA9IGV2bC0+ZXZlbnRzW25dOworCisJICAgIGlmIChldi0+dHlwZSA9PSBfTkNfRVZFTlRfRklMRQorCQkmJiAoZXYtPmRhdGEuZmV2LmZsYWdzICYgX05DX0VWRU5UX0ZJTEVfUkVBREFCTEUpKSB7CisJCUZEX1NFVChldi0+ZGF0YS5mZXYuZmQsICZzZXQpOworCQljb3VudCA9IG1heChldi0+ZGF0YS5mZXYuZmQgKyAxLCBjb3VudCk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAobWlsbGlzZWNvbmRzID49IDApIHsKKwlzdHJ1Y3QgdGltZXZhbCBudGltZW91dDsKKwludGltZW91dC50dl9zZWMgPSBtaWxsaXNlY29uZHMgLyAxMDAwOworCW50aW1lb3V0LnR2X3VzZWMgPSAobWlsbGlzZWNvbmRzICUgMTAwMCkgKiAxMDAwOworCXJlc3VsdCA9IHNlbGVjdChjb3VudCwgJnNldCwgTlVMTCwgTlVMTCwgJm50aW1lb3V0KTsKKyAgICB9IGVsc2UgeworCXJlc3VsdCA9IHNlbGVjdChjb3VudCwgJnNldCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgfQorCisjaWZkZWYgTkNVUlNFU19XR0VUQ0hfRVZFTlRTCisgICAgaWYgKChtb2RlICYgNCkgJiYgZXZsKSB7CisJZXZsLT5yZXN1bHRfZmxhZ3MgPSAwOworCWZvciAobiA9IDA7IG4gPCBldmwtPmNvdW50OyArK24pIHsKKwkgICAgX25jX2V2ZW50ICpldiA9IGV2bC0+ZXZlbnRzW25dOworCisJICAgIGlmIChldi0+dHlwZSA9PSBfTkNfRVZFTlRfRklMRQorCQkmJiAoZXYtPmRhdGEuZmV2LmZsYWdzICYgX05DX0VWRU5UX0ZJTEVfUkVBREFCTEUpKSB7CisJCWV2LT5kYXRhLmZldi5yZXN1bHQgPSAwOworCQlpZiAoRkRfSVNTRVQoZXYtPmRhdGEuZmV2LmZkLCAmc2V0KSkgeworCQkgICAgZXYtPmRhdGEuZmV2LnJlc3VsdCB8PSBfTkNfRVZFTlRfRklMRV9SRUFEQUJMRTsKKwkJICAgIGV2bC0+cmVzdWx0X2ZsYWdzIHw9IF9OQ19FVkVOVF9GSUxFX1JFQURBQkxFOworCQl9CisJICAgIH0gZWxzZSBpZiAoZXYtPnR5cGUgPT0gX05DX0VWRU5UX1RJTUVPVVRfTVNFQworCQkgICAgICAgJiYgIXJlc3VsdCAmJiB0aW1lb3V0X2lzX2V2ZW50KQorCQlldmwtPnJlc3VsdF9mbGFncyB8PSBfTkNfRVZFTlRfVElNRU9VVF9NU0VDOworCX0KKyAgICB9CisjZW5kaWYKKworI2VuZGlmIC8qIFVTRV9GVU5DX1BPTEwsIGV0YyAqLworCisgICAgcmV0dXJudGltZSA9IF9uY19nZXR0aW1lKCZ0MCwgRkFMU0UpOworCisgICAgaWYgKG1pbGxpc2Vjb25kcyA+PSAwKQorCW1pbGxpc2Vjb25kcyAtPSAocmV0dXJudGltZSAtIHN0YXJ0dGltZSk7CisKKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBpZiAoZXZsKSB7CisJZXZsLT5yZXN1bHRfZmxhZ3MgPSAwOworCWZvciAobiA9IDA7IG4gPCBldmwtPmNvdW50OyArK24pIHsKKwkgICAgX25jX2V2ZW50ICpldiA9IGV2bC0+ZXZlbnRzW25dOworCisJICAgIGlmIChldi0+dHlwZSA9PSBfTkNfRVZFTlRfVElNRU9VVF9NU0VDKSB7CisJCWxvbmcgZGlmZiA9IChyZXR1cm50aW1lIC0gc3RhcnR0aW1lKTsKKwkJaWYgKGV2LT5kYXRhLnRpbWVvdXRfbXNlYyA8PSBkaWZmKQorCQkgICAgZXYtPmRhdGEudGltZW91dF9tc2VjID0gMDsKKwkJZWxzZQorCQkgICAgZXYtPmRhdGEudGltZW91dF9tc2VjIC09IGRpZmY7CisJICAgIH0KKworCX0KKyAgICB9CisjZW5kaWYKKworI2lmIFBSRUNJU0VfR0VUVElNRSAmJiBIQVZFX05BTk9TTEVFUAorICAgIC8qCisgICAgICogSWYgdGhlIHRpbWVvdXQgaGFzbid0IGV4cGlyZWQsIGFuZCB3ZSd2ZSBnb3R0ZW4gbm8gZGF0YSwKKyAgICAgKiB0aGlzIGlzIHByb2JhYmx5IGEgc3lzdGVtIHdoZXJlICdzZWxlY3QoKScgbmVlZHMgdG8gYmUgbGVmdAorICAgICAqIGFsb25lIHNvIHRoYXQgaXQgY2FuIGNvbXBsZXRlLiAgTWFrZSB0aGlzIHByb2Nlc3Mgc2xlZXAsCisgICAgICogdGhlbiBjb21lIGJhY2sgZm9yIG1vcmUuCisgICAgICovCisgICAgaWYgKHJlc3VsdCA9PSAwICYmIG1pbGxpc2Vjb25kcyA+IDEwMCkgeworCW5hcG1zKDEwMCk7CQkvKiBGSVhNRTogdGhpcyB3b24ndCBiZSByaWdodCBpZiBJIHJlY3VyISAqLworCW1pbGxpc2Vjb25kcyAtPSAxMDA7CisJZ290byByZXRyeTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIHJldHVybiBhcHByb3hpbWF0ZSB0aW1lIGxlZnQgaW4gbWlsbGlzZWNvbmRzICovCisgICAgaWYgKHRpbWVsZWZ0KQorCSp0aW1lbGVmdCA9IG1pbGxpc2Vjb25kczsKKworICAgIFRSKFRSQUNFX0lFVkVOVCwgKCJlbmQgdHdhaXQ6IHJldHVybmVkICVkICglZCksIHJlbWFpbmluZyB0aW1lICVkIG1zZWMiLAorCQkgICAgICByZXN1bHQsIGVycm5vLCBtaWxsaXNlY29uZHMpKTsKKworICAgIC8qCisgICAgICogQm90aCAncG9sbCgpJyBhbmQgJ3NlbGVjdCgpJyByZXR1cm4gdGhlIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzCisgICAgICogdGhhdCBhcmUgYWN0aXZlLiAgVHJhbnNsYXRlIHRoaXMgYmFjayB0byB0aGUgbWFzayB0aGF0IGRlbm90ZXMgd2hpY2gKKyAgICAgKiBmaWxlLWRlc2NyaXB0b3JzLCBzbyB0aGF0IHdlIGRvbid0IG5lZWQgYWxsIG9mIHRoaXMgc3lzdGVtLXNwZWNpZmljCisgICAgICogY29kZSBldmVyeXdoZXJlLgorICAgICAqLworICAgIGlmIChyZXN1bHQgIT0gMCkgeworCWlmIChyZXN1bHQgPiAwKSB7CisJICAgIHJlc3VsdCA9IDA7CisjaWYgVVNFX0ZVTkNfUE9MTAorCSAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBNSU5fRkRTOyBjb3VudCsrKSB7CisJCWlmICgobW9kZSAmICgxIDw8IGNvdW50KSkKKwkJICAgICYmIChmZHNbY291bnRdLnJldmVudHMgJiBQT0xMSU4pKSB7CisJCSAgICByZXN1bHQgfD0gKDEgPDwgY291bnQpOworCQl9CisJICAgIH0KKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisJICAgIHJlc3VsdCA9IDE7CQkvKiByZWR1bmRhbnQsIGJ1dCBzaW1wbGUgKi8KKyNlbGlmIEhBVkVfU0VMRUNUCisJICAgIGlmICgobW9kZSAmIDIpCisJCSYmIChmZCA9IHNwLT5fbW91c2VfZmQpID49IDAKKwkJJiYgRkRfSVNTRVQoZmQsICZzZXQpKQorCQlyZXN1bHQgfD0gMjsKKwkgICAgaWYgKChtb2RlICYgMSkKKwkJJiYgRkRfSVNTRVQoc3AtPl9pZmQsICZzZXQpKQorCQlyZXN1bHQgfD0gMTsKKyNlbmRpZgorCX0gZWxzZQorCSAgICByZXN1bHQgPSAwOworICAgIH0KKyNpZmRlZiBOQ1VSU0VTX1dHRVRDSF9FVkVOVFMKKyAgICBpZiAoKG1vZGUgJiA0KSAmJiBldmwgJiYgZXZsLT5yZXN1bHRfZmxhZ3MpCisJcmVzdWx0IHw9IDQ7CisjZW5kaWYKKworICAgIHJldHVybiAocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L2xpYl92aWRhdHRyLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9saWJfdmlkYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMmE3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS9saWJfdmlkYXR0ci5jCkBAIC0wLDAgKzEsMzM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5NiBvbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgl2aWRwdXRzKG5ld21vZGUsIG91dGMpCisgKgorICoJbmV3bW9kZSBpcyB0YWtlbiB0byBiZSB0aGUgbG9naWNhbCAnb3InIG9mIHRoZSBzeW1ib2xzIGluIGN1cnNlcy5oCisgKglyZXByZXNlbnRpbmcgZ3JhcGhpYyByZW5kaXRpb25zLiAgVGhlIHRlcm1pbmFsIGlzIHNldCB0byBiZSBpbiBhbGwgb2YKKyAqCXRoZSBnaXZlbiBtb2RlcywgaWYgcG9zc2libGUuCisgKgorICoJaWYgdGhlIG5ldyBhdHRyaWJ1dGUgaXMgbm9ybWFsCisgKgkJaWYgZXhpdC1hbHQtY2hhci1zZXQgZXhpc3RzCisgKgkJCWVtaXQgaXQKKyAqCQllbWl0IGV4aXQtYXR0cmlidXRlLW1vZGUKKyAqCWVsc2UgaWYgc2V0LWF0dHJpYnV0ZXMgZXhpc3RzCisgKgkJdXNlIGl0IHRvIHNldCBleGFjdGx5IHdoYXQgeW91IHdhbnQKKyAqCWVsc2UKKyAqCQlpZiBleGl0LWF0dHJpYnV0ZS1tb2RlIGV4aXN0cworICoJCQl0dXJuIG9mZiBldmVyeXRoaW5nCisgKgkJZWxzZQorICoJCQl0dXJuIG9mZiB0aG9zZSB3aGljaCBjYW4gYmUgdHVybmVkIG9mZiBhbmQgYXJlbid0IGluCisgKgkJCW5ld21vZGUuCisgKgkJdHVybiBvbiBlYWNoIG1vZGUgd2hpY2ggc2hvdWxkIGJlIG9uIGFuZCBpc24ndCwgb25lIGJ5IG9uZQorICoKKyAqCU5PVEUgdGhhdCB0aGlzIGFsZ29yaXRobSB3b24ndCBhY2hpZXZlIHRoZSBkZXNpcmVkIG1peCBvZiBhdHRyaWJ1dGVzCisgKglpbiBzb21lIGNhc2VzLCBidXQgdGhvc2UgYXJlIHByb2JhYmx5IGp1c3QgdGhvc2UgY2FzZXMgaW4gd2hpY2ggaXQgaXMKKyAqCWFjdHVhbGx5IGltcG9zc2libGUsIGFueXdheSwgc28uLi4KKyAqCisgKiAJTk9URSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGVyZSdzIG5vIGludGVyYWN0aW9uIGJldHdlZW4gY29sb3IKKyAqCWFuZCBvdGhlciBhdHRyaWJ1dGUgcmVzZXRzLiAgU28gZWFjaCB0aW1lIHdlIHJlc2V0IGNvbG9yIChvciBvdGhlcgorICoJYXR0cmlidXRlcykgd2UnbGwgaGF2ZSB0byBiZSBwcmVwYXJlZCB0byByZXN0b3JlIHRoZSBvdGhlci4KKyAqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfdmlkYXR0ci5jLHYgMS40OSAyMDA3LzA2LzMwIDIxOjU4OjA0IHRvbSBFeHAgJCIpCisKKyNkZWZpbmUgZG9QdXQobW9kZSkgVFBVVFNfVFJBQ0UoI21vZGUpOyB0cHV0cyhtb2RlLCAxLCBvdXRjKQorCisjZGVmaW5lIFR1cm5PbihtYXNrLG1vZGUpIFwKKwlpZiAoKHR1cm5fb24gJiBtYXNrKSAmJiBtb2RlKSB7IGRvUHV0KG1vZGUpOyB9CisKKyNkZWZpbmUgVHVybk9mZihtYXNrLG1vZGUpIFwKKwlpZiAoKHR1cm5fb2ZmICYgbWFzaykgJiYgbW9kZSkgeyBkb1B1dChtb2RlKTsgdHVybl9vZmYgJj0gfm1hc2s7IH0KKworCS8qIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgc2NyZWVuLCBhc3N1bWUgd2UgKmNhbiogZG8gY29sb3IgKi8KKyNkZWZpbmUgU2V0Q29sb3JzSWYod2h5LG9sZF9hdHRyKSBcCisJaWYgKGNhbl9jb2xvciAmJiAod2h5KSkgeyBcCisJCWludCBvbGRfcGFpciA9IFBBSVJfTlVNQkVSKG9sZF9hdHRyKTsgXAorCQlUUihUUkFDRV9BVFRSUywgKCJvbGQgcGFpciA9ICVkIC0tIG5ldyBwYWlyID0gJWQiLCBvbGRfcGFpciwgcGFpcikpOyBcCisJCWlmICgocGFpciAhPSBvbGRfcGFpcikgXAorCQkgfHwgKGZpeF9wYWlyMCAmJiAocGFpciA9PSAwKSkgXAorCQkgfHwgKHJldmVyc2UgXiAoKG9sZF9hdHRyICYgQV9SRVZFUlNFKSAhPSAwKSkpIHsgXAorCQkJX25jX2RvX2NvbG9yKG9sZF9wYWlyLCBwYWlyLCByZXZlcnNlLCBvdXRjKTsgXAorCQl9IFwKKwl9CisKKyNkZWZpbmUgUHJldmlvdXNBdHRyIF9uY19wcmVzY3JlZW4ucHJldmlvdXNfYXR0cgorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit2aWRwdXRzKGNodHlwZSBuZXdtb2RlLCBpbnQgKCpvdXRjKSAoaW50KSkKK3sKKyAgICBhdHRyX3QgdHVybl9vbiwgdHVybl9vZmY7CisgICAgaW50IHBhaXI7CisgICAgYm9vbCByZXZlcnNlID0gRkFMU0U7CisgICAgYm9vbCBjYW5fY29sb3IgPSAoU1AgPT0gMCB8fCBTUC0+X2NvbG9yb24pOworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisgICAgYm9vbCBmaXhfcGFpcjAgPSAoU1AgIT0gMCAmJiBTUC0+X2NvbG9yb24gJiYgIVNQLT5fZGVmYXVsdF9jb2xvcik7CisjZWxzZQorI2RlZmluZSBmaXhfcGFpcjAgRkFMU0UKKyNlbmRpZgorCisgICAgbmV3bW9kZSAmPSBBX0FUVFJJQlVURVM7CisgICAgVCgoVF9DQUxMRUQoInZpZHB1dHMoJXMpIiksIF90cmFjZWF0dHIobmV3bW9kZSkpKTsKKworICAgIC8qIHRoaXMgYWxsb3dzIHVzIHRvIGdvIG9uIHdoZXRoZXIgb3Igbm90IG5ld3Rlcm0oKSBoYXMgYmVlbiBjYWxsZWQgKi8KKyAgICBpZiAoU1ApCisJUHJldmlvdXNBdHRyID0gQXR0ck9mKFNDUkVFTl9BVFRSUyhTUCkpOworCisgICAgVFIoVFJBQ0VfQVRUUlMsICgicHJldmlvdXMgYXR0cmlidXRlIHdhcyAlcyIsIF90cmFjZWF0dHIoUHJldmlvdXNBdHRyKSkpOworCisgICAgaWYgKChTUCAhPSAwKQorCSYmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCkpIHsKKyNpZiBVU0VfWE1DX1NVUFBPUlQKKwlzdGF0aWMgY29uc3QgY2h0eXBlIHRhYmxlW10gPQorCXsKKwkgICAgQV9TVEFORE9VVCwKKwkgICAgQV9VTkRFUkxJTkUsCisJICAgIEFfUkVWRVJTRSwKKwkgICAgQV9CTElOSywKKwkgICAgQV9ESU0sCisJICAgIEFfQk9MRCwKKwkgICAgQV9JTlZJUywKKwkgICAgQV9QUk9URUNULAorCX07CisJdW5zaWduZWQgbjsKKwlpbnQgdXNlZCA9IDA7CisJaW50IGxpbWl0ID0gKG1heF9hdHRyaWJ1dGVzIDw9IDApID8gMSA6IG1heF9hdHRyaWJ1dGVzOworCWNodHlwZSByZXRhaW4gPSAwOworCisJLyoKKwkgKiBMaW1pdCB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZSBiaXRzIHNldCBpbiB0aGUgbmV3bW9kZSBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgdGVybWluZm8gbWF4X2F0dHJpYnV0ZXMgdmFsdWUuCisJICovCisJZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YWJsZSk7ICsrbikgeworCSAgICBpZiAoKHRhYmxlW25dICYgU1AtPl9va19hdHRyaWJ1dGVzKSA9PSAwKSB7CisJCW5ld21vZGUgJj0gfnRhYmxlW25dOworCSAgICB9IGVsc2UgaWYgKCh0YWJsZVtuXSAmIG5ld21vZGUpICE9IDApIHsKKwkJaWYgKHVzZWQrKyA+PSBsaW1pdCkgeworCQkgICAgbmV3bW9kZSAmPSB+dGFibGVbbl07CisJCSAgICBpZiAobmV3bW9kZSA9PSByZXRhaW4pCisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJICAgIHJldGFpbiA9IG5ld21vZGU7CisJCX0KKwkgICAgfQorCX0KKyNlbHNlCisJbmV3bW9kZSAmPSB+KFNQLT5feG1jX3N1cHByZXNzKTsKKyNlbmRpZgorCVRSKFRSQUNFX0FUVFJTLCAoInN1cHByZXNzZWQgYXR0cmlidXRlIGlzICVzIiwgX3RyYWNlYXR0cihuZXdtb2RlKSkpOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgd2UgaGF2ZSBhIHRlcm1pbmFsIHRoYXQgY2Fubm90IGNvbWJpbmUgY29sb3Igd2l0aCB2aWRlbworICAgICAqIGF0dHJpYnV0ZXMsIHVzZSB0aGUgY29sb3JzIGluIHByZWZlcmVuY2UuCisgICAgICovCisgICAgaWYgKCgobmV3bW9kZSAmIEFfQ09MT1IpICE9IDAKKwkgfHwgZml4X3BhaXIwKQorCSYmIChub19jb2xvcl92aWRlbyA+IDApKSB7CisJLyoKKwkgKiBJZiB3ZSBoYWQgY2hvc2VuIHRoZSBBX3h4eCBkZWZpbml0aW9ucyB0byBjb3JyZXNwb25kIHRvIHRoZQorCSAqIG5vX2NvbG9yX3ZpZGVvIG1hc2ssIHdlIGNvdWxkIHNpbXBseSBzaGlmdCBpdCB1cCBhbmQgbWFzayBvZmYgdGhlCisJICogYXR0cmlidXRlcy4gIEJ1dCB3ZSBkaWQgbm90IChhY3R1YWxseSBjb3BpZWQgU29sYXJpcycgZGVmaW5pdGlvbnMpLgorCSAqIEhvd2V2ZXIsIHRoaXMgaXMgc3RpbGwgc2ltcGxlci9mYXN0ZXIgdGhhbiBhIGxvb2t1cCB0YWJsZS4KKwkgKgorCSAqIFRoZSA2MyBjb3JyZXNwb25kcyB0byBBX1NUQU5ET1VULCBBX1VOREVSTElORSwgQV9SRVZFUlNFLCBBX0JMSU5LLAorCSAqIEFfRElNLCBBX0JPTEQgd2hpY2ggYXJlIDE6MSB3aXRoIG5vX2NvbG9yX3ZpZGVvLiAgVGhlIGJpdHMgdGhhdAorCSAqIGNvcnJlc3BvbmQgdG8gQV9JTlZJUywgQV9QUk9URUNUICgxOTIpIG11c3QgYmUgc2hpZnRlZCB1cCAxIGFuZAorCSAqIEFfQUxUQ0hBUlNFVCAoMjU2KSBkb3duIDIgdG8gbGluZSB1cC4gIFdlIHVzZSB0aGUgTkNVUlNFU19CSVRTCisJICogbWFjcm8gc28gdGhpcyB3aWxsIHdvcmsgcHJvcGVybHkgZm9yIHRoZSB3aWRlLWNoYXJhY3RlciBsYXlvdXQuCisJICovCisJdW5zaWduZWQgdmFsdWUgPSBub19jb2xvcl92aWRlbzsKKwlhdHRyX3QgbWFzayA9IE5DVVJTRVNfQklUUygodmFsdWUgJiA2MykKKwkJCQkgICB8ICgodmFsdWUgJiAxOTIpIDw8IDEpCisJCQkJICAgfCAoKHZhbHVlICYgMjU2KSA+PiAyKSwgOCk7CisKKwlpZiAoKG1hc2sgJiBBX1JFVkVSU0UpICE9IDAKKwkgICAgJiYgKG5ld21vZGUgJiBBX1JFVkVSU0UpICE9IDApIHsKKwkgICAgcmV2ZXJzZSA9IFRSVUU7CisJICAgIG1hc2sgJj0gfkFfUkVWRVJTRTsKKwl9CisJbmV3bW9kZSAmPSB+bWFzazsKKyAgICB9CisKKyAgICBpZiAobmV3bW9kZSA9PSBQcmV2aW91c0F0dHIpCisJcmV0dXJuQ29kZShPSyk7CisKKyAgICBwYWlyID0gUEFJUl9OVU1CRVIobmV3bW9kZSk7CisKKyAgICBpZiAocmV2ZXJzZSkgeworCW5ld21vZGUgJj0gfkFfUkVWRVJTRTsKKyAgICB9CisKKyAgICB0dXJuX29mZiA9ICh+bmV3bW9kZSAmIFByZXZpb3VzQXR0cikgJiBBTExfQlVUX0NPTE9SOworICAgIHR1cm5fb24gPSAobmV3bW9kZSAmIH5QcmV2aW91c0F0dHIpICYgQUxMX0JVVF9DT0xPUjsKKworICAgIFNldENvbG9yc0lmKCgocGFpciA9PSAwKSAmJiAhZml4X3BhaXIwKSwgUHJldmlvdXNBdHRyKTsKKworICAgIGlmIChuZXdtb2RlID09IEFfTk9STUFMKSB7CisJaWYgKChQcmV2aW91c0F0dHIgJiBBX0FMVENIQVJTRVQpICYmIGV4aXRfYWx0X2NoYXJzZXRfbW9kZSkgeworCSAgICBkb1B1dChleGl0X2FsdF9jaGFyc2V0X21vZGUpOworCSAgICBQcmV2aW91c0F0dHIgJj0gfkFfQUxUQ0hBUlNFVDsKKwl9CisJaWYgKFByZXZpb3VzQXR0cikgeworCSAgICBpZiAoZXhpdF9hdHRyaWJ1dGVfbW9kZSkgeworCQlkb1B1dChleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKCFTUCB8fCBTUC0+X3VzZV9ybXVsKSB7CisJCSAgICBUdXJuT2ZmKEFfVU5ERVJMSU5FLCBleGl0X3VuZGVybGluZV9tb2RlKTsKKwkJfQorCQlpZiAoIVNQIHx8IFNQLT5fdXNlX3Jtc28pIHsKKwkJICAgIFR1cm5PZmYoQV9TVEFORE9VVCwgZXhpdF9zdGFuZG91dF9tb2RlKTsKKwkJfQorCSAgICB9CisJICAgIFByZXZpb3VzQXR0ciAmPSBBTExfQlVUX0NPTE9SOworCX0KKworCVNldENvbG9yc0lmKChwYWlyICE9IDApIHx8IGZpeF9wYWlyMCwgUHJldmlvdXNBdHRyKTsKKyAgICB9IGVsc2UgaWYgKHNldF9hdHRyaWJ1dGVzKSB7CisJaWYgKHR1cm5fb24gfHwgdHVybl9vZmYpIHsKKwkgICAgVFBVVFNfVFJBQ0UoInNldF9hdHRyaWJ1dGVzIik7CisJICAgIHRwdXRzKHRwYXJtKHNldF9hdHRyaWJ1dGVzLAorCQkJKG5ld21vZGUgJiBBX1NUQU5ET1VUKSAhPSAwLAorCQkJKG5ld21vZGUgJiBBX1VOREVSTElORSkgIT0gMCwKKwkJCShuZXdtb2RlICYgQV9SRVZFUlNFKSAhPSAwLAorCQkJKG5ld21vZGUgJiBBX0JMSU5LKSAhPSAwLAorCQkJKG5ld21vZGUgJiBBX0RJTSkgIT0gMCwKKwkJCShuZXdtb2RlICYgQV9CT0xEKSAhPSAwLAorCQkJKG5ld21vZGUgJiBBX0lOVklTKSAhPSAwLAorCQkJKG5ld21vZGUgJiBBX1BST1RFQ1QpICE9IDAsCisJCQkobmV3bW9kZSAmIEFfQUxUQ0hBUlNFVCkgIT0gMCksIDEsIG91dGMpOworCSAgICBQcmV2aW91c0F0dHIgJj0gQUxMX0JVVF9DT0xPUjsKKwl9CisJU2V0Q29sb3JzSWYoKHBhaXIgIT0gMCkgfHwgZml4X3BhaXIwLCBQcmV2aW91c0F0dHIpOworICAgIH0gZWxzZSB7CisKKwlUUihUUkFDRV9BVFRSUywgKCJ0dXJuaW5nICVzIG9mZiIsIF90cmFjZWF0dHIodHVybl9vZmYpKSk7CisKKwlUdXJuT2ZmKEFfQUxUQ0hBUlNFVCwgZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKKworCWlmICghU1AgfHwgU1AtPl91c2Vfcm11bCkgeworCSAgICBUdXJuT2ZmKEFfVU5ERVJMSU5FLCBleGl0X3VuZGVybGluZV9tb2RlKTsKKwl9CisKKwlpZiAoIVNQIHx8IFNQLT5fdXNlX3Jtc28pIHsKKwkgICAgVHVybk9mZihBX1NUQU5ET1VULCBleGl0X3N0YW5kb3V0X21vZGUpOworCX0KKworCWlmICh0dXJuX29mZiAmJiBleGl0X2F0dHJpYnV0ZV9tb2RlKSB7CisJICAgIGRvUHV0KGV4aXRfYXR0cmlidXRlX21vZGUpOworCSAgICB0dXJuX29uIHw9IChuZXdtb2RlICYgQUxMX0JVVF9DT0xPUik7CisJICAgIFByZXZpb3VzQXR0ciAmPSBBTExfQlVUX0NPTE9SOworCX0KKwlTZXRDb2xvcnNJZigocGFpciAhPSAwKSB8fCBmaXhfcGFpcjAsIFByZXZpb3VzQXR0cik7CisKKwlUUihUUkFDRV9BVFRSUywgKCJ0dXJuaW5nICVzIG9uIiwgX3RyYWNlYXR0cih0dXJuX29uKSkpOworCS8qICpJTkRFTlQtT0ZGKiAqLworCVR1cm5PbihBX0FMVENIQVJTRVQsCWVudGVyX2FsdF9jaGFyc2V0X21vZGUpOworCVR1cm5PbihBX0JMSU5LLAkJZW50ZXJfYmxpbmtfbW9kZSk7CisJVHVybk9uKEFfQk9MRCwJCWVudGVyX2JvbGRfbW9kZSk7CisJVHVybk9uKEFfRElNLAkJZW50ZXJfZGltX21vZGUpOworCVR1cm5PbihBX1JFVkVSU0UsCWVudGVyX3JldmVyc2VfbW9kZSk7CisJVHVybk9uKEFfU1RBTkRPVVQsCWVudGVyX3N0YW5kb3V0X21vZGUpOworCVR1cm5PbihBX1BST1RFQ1QsCWVudGVyX3Byb3RlY3RlZF9tb2RlKTsKKwlUdXJuT24oQV9JTlZJUywJCWVudGVyX3NlY3VyZV9tb2RlKTsKKwlUdXJuT24oQV9VTkRFUkxJTkUsCWVudGVyX3VuZGVybGluZV9tb2RlKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCVR1cm5PbihBX0hPUklaT05UQUwsCWVudGVyX2hvcml6b250YWxfaGxfbW9kZSk7CisJVHVybk9uKEFfTEVGVCwJCWVudGVyX2xlZnRfaGxfbW9kZSk7CisJVHVybk9uKEFfTE9XLAkJZW50ZXJfbG93X2hsX21vZGUpOworCVR1cm5PbihBX1JJR0hULAkJZW50ZXJfcmlnaHRfaGxfbW9kZSk7CisJVHVybk9uKEFfVE9QLAkJZW50ZXJfdG9wX2hsX21vZGUpOworCVR1cm5PbihBX1ZFUlRJQ0FMLAllbnRlcl92ZXJ0aWNhbF9obF9tb2RlKTsKKyNlbmRpZgorCS8qICpJTkRFTlQtT04qICovCisKKyAgICB9CisKKyAgICBpZiAocmV2ZXJzZSkKKwluZXdtb2RlIHw9IEFfUkVWRVJTRTsKKworICAgIGlmIChTUCkKKwlTZXRBdHRyKFNDUkVFTl9BVFRSUyhTUCksIG5ld21vZGUpOworICAgIGVsc2UKKwlQcmV2aW91c0F0dHIgPSBuZXdtb2RlOworCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3ZpZGF0dHIoY2h0eXBlIG5ld21vZGUpCit7CisgICAgVCgoVF9DQUxMRUQoInZpZGF0dHIoJXMpIiksIF90cmFjZWF0dHIobmV3bW9kZSkpKTsKKworICAgIHJldHVybkNvZGUodmlkcHV0cyhuZXdtb2RlLCBfbmNfb3V0Y2gpKTsKK30KKworTkNVUlNFU19FWFBPUlQoY2h0eXBlKQordGVybWF0dHJzKHZvaWQpCit7CisgICAgY2h0eXBlIGF0dHJzID0gQV9OT1JNQUw7CisKKyAgICBUKChUX0NBTExFRCgidGVybWF0dHJzKCkiKSkpOworICAgIGlmIChlbnRlcl9hbHRfY2hhcnNldF9tb2RlKQorCWF0dHJzIHw9IEFfQUxUQ0hBUlNFVDsKKworICAgIGlmIChlbnRlcl9ibGlua19tb2RlKQorCWF0dHJzIHw9IEFfQkxJTks7CisKKyAgICBpZiAoZW50ZXJfYm9sZF9tb2RlKQorCWF0dHJzIHw9IEFfQk9MRDsKKworICAgIGlmIChlbnRlcl9kaW1fbW9kZSkKKwlhdHRycyB8PSBBX0RJTTsKKworICAgIGlmIChlbnRlcl9yZXZlcnNlX21vZGUpCisJYXR0cnMgfD0gQV9SRVZFUlNFOworCisgICAgaWYgKGVudGVyX3N0YW5kb3V0X21vZGUpCisJYXR0cnMgfD0gQV9TVEFORE9VVDsKKworICAgIGlmIChlbnRlcl9wcm90ZWN0ZWRfbW9kZSkKKwlhdHRycyB8PSBBX1BST1RFQ1Q7CisKKyAgICBpZiAoZW50ZXJfc2VjdXJlX21vZGUpCisJYXR0cnMgfD0gQV9JTlZJUzsKKworICAgIGlmIChlbnRlcl91bmRlcmxpbmVfbW9kZSkKKwlhdHRycyB8PSBBX1VOREVSTElORTsKKworICAgIGlmIChTUC0+X2NvbG9yb24pCisJYXR0cnMgfD0gQV9DT0xPUjsKKworICAgIHJldHVybkNoYXIoYXR0cnMpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90dHkvdHR5X2Rpc3BsYXkuaCBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L3R0eV9kaXNwbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0NWEwOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L3R0eV9kaXNwbGF5LmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKyNpZm5kZWYgVFRZX0RJU1BMQVlfSAorI2RlZmluZSBUVFlfRElTUExBWV9IIDEKKworLyoKKyAqICRJZDogdHR5X2Rpc3BsYXkuaCx2IDEuNiAyMDA1LzAxLzAxIDIzOjQxOjEyIHRvbSBFeHAgJAorICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9iZWVwICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfdHR5X2NoZWNrX3Jlc2l6ZSAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9jdXJzb3IgKGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9mbGFzaCAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9pbml0X2NvbG9yIChpbnQsaW50LGludCxpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfaW5pdF9wYWlyIChpbnQsaW50LGludCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9zbGtfaGlkZSAoYm9vbCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoYm9vbCkgX25jX3R0eV9zbGtfdXBkYXRlIChpbnQsY29uc3QgY2hhciAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfdHR5X3N0YXJ0X2NvbG9yICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdHR5X2Rpc3BsYXlfcmVzdW1lICh2b2lkKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfdHR5X2Rpc3BsYXlfc3VzcGVuZCAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3R0eV9kaXNwb3NlICh2b2lkKTsJLyogZnJlZXMgU1AtPl90ZXJtICovCitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3R0eV9zd2l0Y2hfdG8gKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190dHlfdXBkYXRlICh2b2lkKTsKKworc3RydWN0IHR0eV9kaXNwbGF5X2RhdGEgeworCWludCAgICAgICAgICAgICBfZmlmb2hvbGQ7ICAgICAgLyogc2V0IGlmIGJyZWFrb3V0IG1hcmtlZCAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nICAgX2N1cnJlbnRfYXR0cjsgIC8qIHRlcm1pbmFsIGF0dHJpYnV0ZSBjdXJyZW50IHNldCAgICovCisJaW50ICAgICAgICAgICAgIF9jdXJzcm93OyAgICAgICAvKiBwaHlzaWNhbCBjdXJzb3Igcm93ICgtMT11bmtub3duKSAqLworCWludCAgICAgICAgICAgICBfY3Vyc2NvbDsgICAgICAgLyogcGh5c2ljYWwgY3Vyc29yIGNvbHVtbiAgICAgICAgICAgKi8KKworCS8qIGN1cnNvciBtb3ZlbWVudCBjb3N0czsgdW5pdHMgYXJlIDEwdGhzIG9mIG1pbGxpc2Vjb25kcyAqLworCWludCAgICAgICAgICAgICBfY2hhcl9wYWRkaW5nOyAgLyogY29zdCBvZiBjaGFyYWN0ZXIgcHV0ICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2NyX2Nvc3Q7ICAgICAgIC8qIGNvc3Qgb2YgKGNhcnJpYWdlX3JldHVybikgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jdXBfY29zdDsgICAgICAvKiBjb3N0IG9mIChjdXJzb3JfYWRkcmVzcykgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfaG9tZV9jb3N0OyAgICAgLyogY29zdCBvZiAoY3Vyc29yX2hvbWUpICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2xsX2Nvc3Q7ICAgICAgIC8qIGNvc3Qgb2YgKGN1cnNvcl90b19sbCkgICAgICAgICAgICovCisjaWYgVVNFX0hBUkRfVEFCUworCWludCAgICAgICAgICAgICBfaHRfY29zdDsgICAgICAgLyogY29zdCBvZiAodGFiKSAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2NidF9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKGJhY2t0YWIpICAgICAgICAgICAgICAgICovCisjZW5kaWYgLyogVVNFX0hBUkRfVEFCUyAqLworCWludCAgICAgICAgICAgICBfY3ViMV9jb3N0OyAgICAgLyogY29zdCBvZiAoY3Vyc29yX2xlZnQpICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2N1ZjFfY29zdDsgICAgIC8qIGNvc3Qgb2YgKGN1cnNvcl9yaWdodCkgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jdWQxX2Nvc3Q7ICAgICAvKiBjb3N0IG9mIChjdXJzb3JfZG93bikgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfY3V1MV9jb3N0OyAgICAgLyogY29zdCBvZiAoY3Vyc29yX3VwKSAgICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2N1Yl9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX2xlZnQpICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9jdWZfY29zdDsgICAgICAvKiBjb3N0IG9mIChwYXJtX2N1cnNvcl9yaWdodCkgICAgICAqLworCWludCAgICAgICAgICAgICBfY3VkX2Nvc3Q7ICAgICAgLyogY29zdCBvZiAocGFybV9jdXJzb3JfZG93bikgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2N1dV9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKHBhcm1fY3Vyc29yX3VwKSAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9ocGFfY29zdDsgICAgICAvKiBjb3N0IG9mIChjb2x1bW5fYWRkcmVzcykgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfdnBhX2Nvc3Q7ICAgICAgLyogY29zdCBvZiAocm93X2FkZHJlc3MpICAgICAgICAgICAgKi8KKwkvKiB1c2VkIGluIGxpYl9kb3VwZGF0ZS5jLCBtdXN0IGJlIGNoYXJzICovCisJaW50ICAgICAgICAgICAgIF9lZF9jb3N0OyAgICAgICAvKiBjb3N0IG9mIChjbHJfZW9zKSAgICAgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfZWxfY29zdDsgICAgICAgLyogY29zdCBvZiAoY2xyX2VvbCkgICAgICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2VsMV9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKGNscl9ib2wpICAgICAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9kY2gxX2Nvc3Q7ICAgICAvKiBjb3N0IG9mIChkZWxldGVfY2hhcmFjdGVyKSAgICAgICAqLworCWludCAgICAgICAgICAgICBfaWNoMV9jb3N0OyAgICAgLyogY29zdCBvZiAoaW5zZXJ0X2NoYXJhY3RlcikgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2RjaF9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKHBhcm1fZGNoKSAgICAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9pY2hfY29zdDsgICAgICAvKiBjb3N0IG9mIChwYXJtX2ljaCkgICAgICAgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfZWNoX2Nvc3Q7ICAgICAgLyogY29zdCBvZiAoZXJhc2VfY2hhcnMpICAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX3JlcF9jb3N0OyAgICAgIC8qIGNvc3Qgb2YgKHJlcGVhdF9jaGFyKSAgICAgICAgICAgICovCisJaW50ICAgICAgICAgICAgIF9ocGFfY2hfY29zdDsgICAvKiBjb3N0IG9mIChjb2x1bW5fYWRkcmVzcykgICAgICAgICAqLworCWludCAgICAgICAgICAgICBfY3VwX2NoX2Nvc3Q7ICAgLyogY29zdCBvZiAoY3Vyc29yX2FkZHJlc3MpICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX3NtaXJfY29zdDsJLyogY29zdCBvZiAoZW50ZXJfaW5zZXJ0X21vZGUpICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX3JtaXJfY29zdDsJLyogY29zdCBvZiAoZXhpdF9pbnNlcnRfbW9kZSkgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX2lwX2Nvc3Q7ICAgICAgIC8qIGNvc3Qgb2YgKGluc2VydF9wYWRkaW5nKSAgICAgICAgICovCisJLyogdXNlZCBpbiBsaWJfbXZjdXIuYyAqLworCWNoYXIgKiAgICAgICAgICBfYWRkcmVzc19jdXJzb3I7CisJaW50ICAgICAgICAgICAgIF9jYXJyaWFnZV9yZXR1cm5fbGVuZ3RoOworCWludCAgICAgICAgICAgICBfY3Vyc29yX2hvbWVfbGVuZ3RoOworCWludCAgICAgICAgICAgICBfY3Vyc29yX3RvX2xsX2xlbmd0aDsKKworCWNodHlwZSAgICAgICAgICBfeG1jX3N1cHByZXNzOyAgLyogYXR0cmlidXRlcyB0byBzdXBwcmVzcyBpZiB4bWMgICAgICovCisJY2h0eXBlICAgICAgICAgIF94bWNfdHJpZ2dlcnM7ICAvKiBhdHRyaWJ1dGVzIHRvIHByb2Nlc3MgaWYgeG1jICAgICAgKi8KKworCWJvb2wgICAgICAgICAgICBfc2lnX3dpbmNoOworfTsKKworCisjZGVmaW5lIERlbENoYXJDb3N0KGNvdW50KSBcCisJCSgocGFybV9kY2ggIT0gMCkgXAorCQk/IEQtPl9kY2hfY29zdCBcCisJCTogKChkZWxldGVfY2hhcmFjdGVyICE9IDApIFwKKwkJCT8gKEQtPl9kY2gxX2Nvc3QgKiBjb3VudCkgXAorCQkJOiBJTkZJTklUWSkpCisKKyNkZWZpbmUgSW5zQ2hhckNvc3QoY291bnQpIFwKKwkJKChwYXJtX2ljaCAhPSAwKSBcCisJCT8gRC0+X2ljaF9jb3N0IFwKKwkJOiAoKGVudGVyX2luc2VydF9tb2RlICYmIGV4aXRfaW5zZXJ0X21vZGUpIFwKKwkJICA/IEQtPl9zbWlyX2Nvc3QgKyBELT5fcm1pcl9jb3N0ICsgKEQtPl9pcF9jb3N0ICogY291bnQpIFwKKwkJICA6ICgoaW5zZXJ0X2NoYXJhY3RlciAhPSAwKSBcCisJCSAgICA/ICgoRC0+X2ljaDFfY29zdCArIEQtPl9pcF9jb3N0KSAqIGNvdW50KSBcCisJCSAgICA6IElORklOSVRZKSkpCisKKyNpZiBVU0VfWE1DX1NVUFBPUlQKKyNkZWZpbmUgVXBkYXRlQXR0cnMoYykJaWYgKCFTYW1lQXR0ck9mKEQtPl9jdXJyZW50X2F0dHIsIEF0dHJPZihjKSkpIHsgXAorCQkJCWF0dHJfdCBjaGcgPSBELT5fY3VycmVudF9hdHRyOyBcCisJCQkJdmlkYXR0cihBdHRyT2YoYykpOyBcCisJCQkJaWYgKG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPiAwIFwKKwkJCQkgJiYgWE1DX0NIQU5HRVMoKGNoZyBeIEQtPl9jdXJyZW50X2F0dHIpKSkgeyBcCisJCQkJCVQoKCIlcyBAJWQgYmVmb3JlIGdsaXRjaCAlZCwlZCIsIFwKKwkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgXAorCQkJCQkJRC0+X2N1cnNyb3csIFwKKwkJCQkJCUQtPl9jdXJzY29sKSk7IFwKKwkJCQkJX25jX2RvX3htY19nbGl0Y2goY2hnKTsgXAorCQkJCX0gXAorCQkJfQorI2Vsc2UKKyNkZWZpbmUgVXBkYXRlQXR0cnMoYykJaWYgKCFTYW1lQXR0ck9mKEQtPl9jdXJyZW50X2F0dHIsIEF0dHJPZihjKSkpIFwKKwkJCQl2aWRhdHRyKEF0dHJPZihjKSk7CisjZW5kaWYKKworI2RlZmluZSBYTUNfQ0hBTkdFUyhjKSAoKGMpICYgRC0+X3htY19zdXBwcmVzcykKKworI2VuZGlmIC8qIFRUWV9ESVNQTEFZX0ggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L3R0eV9pbnB1dC5oIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90dHkvdHR5X2lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyMDc5MwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvdHR5L3R0eV9pbnB1dC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAkSWQ6IHR0eV9pbnB1dC5oLHYgMS4yIDIwMDAvMTIvMTAgMDI6MjY6NTEgdG9tIEV4cCAkCisgKi8KKworI2lmbmRlZiBUVFlfSU5QVVRfSAorI2RlZmluZSBUVFlfSU5QVVRfSCAxCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChib29sKSBfbmNfdHR5X21vdXNlX21hc2sgKG1tYXNrX3QpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY190dHlfcGVuZGluZyAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgX25jX3R0eV9uZXh0X2V2ZW50IChpbnQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190dHlfZmxhZ3NfY2hhbmdlZCAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3R0eV9mbHVzaCAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX3R0eV9pbnB1dF9yZXN1bWUgKHZvaWQpOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY190dHlfaW5wdXRfc3VzcGVuZCAodm9pZCk7CisKK3N0cnVjdCB0dHlfaW5wdXRfZGF0YSB7CisJaW50ICAgICAgICAgICAgIF9pZmQ7ICAgICAgICAgICAvKiBpbnB1dCBmaWxlIHB0ciBmb3Igc2NyZWVuICAgICAgICAqLworCWludCAgICAgICAgICAgICBfa2V5cGFkX3htaXQ7ICAgLyogY3VycmVudCB0ZXJtaW5hbCBzdGF0ZSAgICAgICAgICAgKi8KKwlpbnQgICAgICAgICAgICAgX21ldGFfb247ICAgICAgIC8qIGN1cnJlbnQgdGVybWluYWwgc3RhdGUgICAgICAgICAgICovCisKKwkvKgorCSAqIFRoZXNlIGFyZSB0aGUgZGF0YSB0aGF0IHN1cHBvcnQgdGhlIG1vdXNlIGludGVyZmFjZS4KKwkgKi8KKwlib29sICAgICAgICAgICAgKCpfbW91c2VfZXZlbnQpIChTQ1JFRU4gKik7CisJYm9vbCAgICAgICAgICAgICgqX21vdXNlX2lubGluZSkoU0NSRUVOICopOworCWJvb2wgICAgICAgICAgICAoKl9tb3VzZV9wYXJzZSkgKGludCk7CisJdm9pZCAgICAgICAgICAgICgqX21vdXNlX3Jlc3VtZSkoU0NSRUVOICopOworCXZvaWQgICAgICAgICAgICAoKl9tb3VzZV93cmFwKSAgKFNDUkVFTiAqKTsKKwlpbnQgICAgICAgICAgICAgX21vdXNlX2ZkOyAgICAgIC8qIGZpbGUtZGVzY3JpcHRvciwgaWYgYW55ICovCisJaW50ICAgICAgICAgICAgIG1vdXNldHlwZTsKK307CisKKyNlbmRpZiAvKiBUVFlfSU5QVVRfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy90dHkvdHR5X3VwZGF0ZS5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy90dHkvdHR5X3VwZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhM2EwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3R0eS90dHlfdXBkYXRlLmMKQEAgLTAsMCArMSwxOTc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5Ni1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKglsaWJfZG91cGRhdGUuYworICoKKyAqIAlUaGUgcm91dGluZSBkb3VwZGF0ZSgpIGFuZCBpdHMgZGVwZW5kZW50cy4KKyAqIAlBbGwgcGh5c2ljYWwgb3V0cHV0IGlzIGNvbmNlbnRyYXRlZCBoZXJlIChleGNlcHQgX25jX291dGNoKCkKKyAgKglpbiBsaWJfdHB1dHMuYykuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCisjaWYgZGVmaW5lZCBfX0hBSUtVX18gJiYgZGVmaW5lZCBfX0JFT1NfXworI3VuZGVmIF9fQkVPU19fCisjZW5kaWYKKworI2lmZGVmIF9fQkVPU19fCisjdW5kZWYgZmFsc2UKKyN1bmRlZiB0cnVlCisjaW5jbHVkZSA8T1MuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChUUkFDRSkgJiYgSEFWRV9TWVNfVElNRVNfSCAmJiBIQVZFX1RJTUVTCisjZGVmaW5lIFVTRV9UUkFDRV9USU1FUyAxCisjZWxzZQorI2RlZmluZSBVU0VfVFJBQ0VfVElNRVMgMAorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19USU1FX0ggJiYgSEFWRV9TWVNfVElNRV9TRUxFQ1QKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNpZiBVU0VfVFJBQ0VfVElNRVMKKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4KKyNlbmRpZgorCisjaWYgVVNFX0ZVTkNfUE9MTAorI2VsaWYgSEFWRV9TRUxFQ1QKKyNpZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IHR0eV91cGRhdGUuYyx2IDEuMjQ2IDIwMDgvMDgvMzAgMjA6MDg6MTkgdG9tIEV4cCAkIikKKworLyoKKyAqIFRoaXMgZGVmaW5lIGNvbnRyb2xzIHRoZSBsaW5lLWJyZWFrb3V0IG9wdGltaXphdGlvbi4gIEV2ZXJ5IG9uY2UgaW4gYQorICogd2hpbGUgZHVyaW5nIHNjcmVlbiByZWZyZXNoLCB3ZSB3YW50IHRvIGNoZWNrIGZvciBpbnB1dCBhbmQgYWJvcnQgdGhlCisgKiB1cGRhdGUgaWYgdGhlcmUncyBzb21lIHdhaXRpbmcuICBDSEVDS19JTlRFUlZBTCBjb250cm9scyB0aGUgbnVtYmVyIG9mCisgKiBjaGFuZ2VkIGxpbmVzIHRvIGJlIGVtaXR0ZWQgYmV0d2VlbiBpbnB1dCBjaGVja3MuCisgKgorICogTm90ZTogSW5wdXQtY2hlY2stYW5kLWFib3J0IGlzIG5vIGxvbmdlciBkb25lIGlmIHRoZSBzY3JlZW4gaXMgYmVpbmcKKyAqIHVwZGF0ZWQgZnJvbSBzY3JhdGNoLiAgVGhpcyBpcyBhIGZlYXR1cmUsIG5vdCBhIGJ1Zy4KKyAqLworI2RlZmluZSBDSEVDS19JTlRFUlZBTAk1CisKKyNkZWZpbmUgRklMTF9CQ0UoKSAoU1AtPl9jb2xvcm9uICYmICFTUC0+X2RlZmF1bHRfY29sb3IgJiYgIWJhY2tfY29sb3JfZXJhc2UpCisKK3N0YXRpYyBjb25zdCBOQ1VSU0VTX0NIX1QgYmxhbmtjaGFyID0gTmV3Q2hhcihCTEFOS19URVhUKTsKK3N0YXRpYyBOQ1VSU0VTX0NIX1Qgbm9ybWFsID0gTmV3Q2hhcihCTEFOS19URVhUKTsKKworLyoKKyAqIEVuYWJsZSBjaGVja2luZyB0byBzZWUgaWYgZG91cGRhdGUgYW5kIGZyaWVuZHMgYXJlIHRyYWNraW5nIHRoZSB0cnVlCisgKiBjdXJzb3IgcG9zaXRpb24gY29ycmVjdGx5LiAgTk9URTogdGhpcyBpcyBhIGRlYnVnZ2luZyBoYWNrIHdoaWNoIHdpbGwKKyAqIHdvcmsgT05MWSBvbiBBTlNJLWNvbXBhdGlibGUgdGVybWluYWxzIQorICovCisvKiAjZGVmaW5lIFBPU0lUSU9OX0RFQlVHICovCisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBOQ1VSU0VTX0NIX1QgQ2xyQmxhbmsoV0lORE9XICp3aW4pOworc3RhdGljIGludCBDbHJCb3R0b20oaW50IHRvdGFsKTsKK3N0YXRpYyB2b2lkIENsZWFyU2NyZWVuKE5DVVJTRVNfQ0hfVCBibGFuayk7CitzdGF0aWMgdm9pZCBDbHJVcGRhdGUodm9pZCk7CitzdGF0aWMgdm9pZCBEZWxDaGFyKGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBJbnNTdHIoTkNVUlNFU19DSF9UICogbGluZSwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIFRyYW5zZm9ybUxpbmUoaW50IGNvbnN0IGxpbmVubyk7CisKKyNpZmRlZiBQT1NJVElPTl9ERUJVRworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEZWJ1Z2dpbmcgY29kZS4gIE9ubHkgd29ya3Mgb24gQU5TSS1zdGFuZGFyZCB0ZXJtaW5hbHMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitwb3NpdGlvbl9jaGVjayhpbnQgZXhwZWN0ZWRfeSwgaW50IGV4cGVjdGVkX3gsIGNoYXIgKmxlZ2VuZCkKKy8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmVhbCBjdXJzb3IgcG9zaXRpb24gbWF0Y2hlcyB0aGUgdmlydHVhbCAqLworeworICAgIGNoYXIgYnVmWzIwXTsKKyAgICBjaGFyICpzOworICAgIGludCB5LCB4OworCisgICAgaWYgKCFfbmNfdHJhY2luZyB8fCAoZXhwZWN0ZWRfeSA8IDAgJiYgZXhwZWN0ZWRfeCA8IDApKQorCXJldHVybjsKKworICAgIF9uY19mbHVzaCgpOworICAgIG1lbXNldChidWYsICdcMCcsIHNpemVvZihidWYpKTsKKyAgICBwdXRwKCJcMDMzWzZuIik7CQkvKiBvbmx5IHdvcmtzIG9uIEFOU0ktY29tcGF0aWJsZXMgKi8KKyAgICBfbmNfZmx1c2goKTsKKyAgICAqKHMgPSBidWYpID0gMDsKKyAgICBkbyB7CisJaW50IGFzayA9IHNpemVvZihidWYpIC0gMSAtIChzIC0gYnVmKTsKKwlpbnQgZ290ID0gcmVhZCgwLCBzLCBhc2spOworCWlmIChnb3QgPT0gMCkKKwkgICAgYnJlYWs7CisJcyArPSBnb3Q7CisgICAgfSB3aGlsZSAoc3RyY2hyKGJ1ZiwgJ1InKSA9PSAwKTsKKyAgICBfdHJhY2VmKCJwcm9iZSByZXR1cm5lZCAlcyIsIF9uY192aXNidWYoYnVmKSk7CisKKyAgICAvKiB0cnkgdG8gaW50ZXJwcmV0IGFzIGEgcG9zaXRpb24gcmVwb3J0ICovCisgICAgaWYgKHNzY2FuZihidWYsICJcMDMzWyVkOyVkUiIsICZ5LCAmeCkgIT0gMikgeworCV90cmFjZWYoInBvc2l0aW9uIHByb2JlIGZhaWxlZCBpbiAlcyIsIGxlZ2VuZCk7CisgICAgfSBlbHNlIHsKKwlpZiAoZXhwZWN0ZWRfeCA8IDApCisJICAgIGV4cGVjdGVkX3ggPSB4IC0gMTsKKwlpZiAoZXhwZWN0ZWRfeSA8IDApCisJICAgIGV4cGVjdGVkX3kgPSB5IC0gMTsKKwlpZiAoeSAtIDEgIT0gZXhwZWN0ZWRfeSB8fCB4IC0gMSAhPSBleHBlY3RlZF94KSB7CisJICAgIGJlZXAoKTsKKwkgICAgdHB1dHModHBhcm0oIlwwMzNbJWQ7JWRIIiwgZXhwZWN0ZWRfeSArIDEsIGV4cGVjdGVkX3ggKyAxKSwgMSwgX25jX291dGNoKTsKKwkgICAgX3RyYWNlZigicG9zaXRpb24gc2VlbiAoJWQsICVkKSBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkIG9uZSAoJWQsICVkKSBpbiAlcyIsCisJCSAgICB5IC0gMSwgeCAtIDEsIGV4cGVjdGVkX3ksIGV4cGVjdGVkX3gsIGxlZ2VuZCk7CisJfSBlbHNlIHsKKwkgICAgX3RyYWNlZigicG9zaXRpb24gbWF0Y2hlcyBPSyBpbiAlcyIsIGxlZ2VuZCk7CisJfQorICAgIH0KK30KKyNlbHNlCisjZGVmaW5lIHBvc2l0aW9uX2NoZWNrKGV4cGVjdGVkX3ksIGV4cGVjdGVkX3gsIGxlZ2VuZCkJLyogbm90aGluZyAqLworI2VuZGlmIC8qIFBPU0lUSU9OX0RFQlVHICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogT3B0aW1pemVkIHVwZGF0ZSBjb2RlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSB2b2lkCitHb1RvKGludCBjb25zdCByb3csIGludCBjb25zdCBjb2wpCit7CisgICAgVFIoVFJBQ0VfTU9WRSwgKCJHb1RvKCVkLCAlZCkgZnJvbSAoJWQsICVkKSIsCisJCSAgICByb3csIGNvbCwgU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wpKTsKKworICAgIHBvc2l0aW9uX2NoZWNrKFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sLCAiR29UbyIpOworCisgICAgbXZjdXIoU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wsIHJvdywgY29sKTsKKyAgICBwb3NpdGlvbl9jaGVjayhTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCwgIkdvVG8yIik7Cit9CisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSB2b2lkCitQdXRBdHRyQ2hhcihDQVJHX0NIX1QgY2gpCit7CisgICAgaW50IGNobGVuID0gMTsKKyAgICBOQ1VSU0VTX0NIX1QgbXlfY2g7CisgICAgUFVUQ19EQVRBOworICAgIE5DVVJTRVNfQ0hfVCB0aWxkZTsKKyAgICBOQ1VSU0VTX0NIX1QgYXR0ciA9IENIREVSRUYoY2gpOworCisgICAgVFIoVFJBQ0VfQ0hBUlBVVCwgKCJQdXRBdHRyQ2hhciglcykgYXQgKCVkLCAlZCkiLAorCQkgICAgICAgX3RyYWNlY2hfdChjaCksCisJCSAgICAgICBTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCkpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgLyoKKyAgICAgKiBJZiB0aGlzIGlzIG5vdCBhIHZhbGlkIGNoYXJhY3RlciwgdGhlcmUgaXMgbm90aGluZyBtb3JlIHRvIGRvLgorICAgICAqLworICAgIGlmIChpc1dpZGVjRXh0KENIREVSRUYoY2gpKSkgeworCVRSKFRSQUNFX0NIQVJQVVQsICgiLi4uc2tpcCIpKTsKKwlyZXR1cm47CisgICAgfQorICAgIC8qCisgICAgICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVyIGNlbGxzIHdoaWNoIHRoZSAnY2gnIHZhbHVlIHdpbGwgdXNlCisgICAgICogb24gdGhlIHNjcmVlbi4gIEl0IHNob3VsZCBiZSBhdCBsZWFzdCBvbmUuCisgICAgICovCisgICAgaWYgKChjaGxlbiA9IHdjd2lkdGgoQ2hhck9mKENIREVSRUYoY2gpKSkpIDw9IDApIHsKKwlzdGF0aWMgY29uc3QgTkNVUlNFU19DSF9UIGJsYW5rID0gTmV3Q2hhcihCTEFOS19URVhUKTsKKworCS8qCisJICogSWYgdGhlIGNoYXJhY3RlciBmYWxscyBpbnRvIGFueSBvZiB0aGVzZSBzcGVjaWFsIGNhc2VzLCBkbworCSAqIG5vdCBmb3JjZSB0aGUgcmVzdWx0IHRvIGEgYmxhbms6CisJICoKKwkgKiBhKSBpdCBpcyBwcmludGFibGUgKHRoaXMgd29ya3MgYXJvdW5kIGEgYnVnIGluIHdjd2lkdGgoKSkuCisJICogYikgdXNlX2xlZ2FjeV9jb2RpbmcoKSBoYXMgYmVlbiBjYWxsZWQgdG8gbW9kaWZ5IHRoZSB0cmVhdG1lbnQKKwkgKiAgICBvZiBjb2RlcyAxMjgtMjU1LgorCSAqIGMpIHRoZSBhY3NfbWFwW10gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgdG8gYWxsb3cgY29kZXMgMC0zMQorCSAqICAgIHRvIGJlIHJlbmRlcmVkLiAgVGhpcyBzdXBwb3J0cyBMaW51eCBjb25zb2xlJ3MgIlBDIgorCSAqICAgIGNoYXJhY3RlcnMuICBDb2RlcyAxMjgtMjU1IGFyZSBhbGxvd2VkIHRob3VnaCB0aGlzIGlzCisJICogICAgbm90IGNoZWNrZWQuCisJICovCisJaWYgKGlzOGJpdHMoQ2hhck9mKENIREVSRUYoY2gpKSkKKwkgICAgJiYgKGlzcHJpbnQoQ2hhck9mKENIREVSRUYoY2gpKSkKKwkJfHwgKFNQLT5fbGVnYWN5X2NvZGluZyA+IDAgJiYgQ2hhck9mKENIREVSRUYoY2gpKSA+PSAxNjApCisJCXx8IChTUC0+X2xlZ2FjeV9jb2RpbmcgPiAxICYmIENoYXJPZihDSERFUkVGKGNoKSkgPj0gMTI4KQorCQl8fCAoQXR0ck9mKGF0dHIpICYgQV9BTFRDSEFSU0VUCisJCSAgICAmJiAoKENoYXJPZkQoY2gpIDwgQUNTX0xFTgorCQkJICYmIFNQLT5fYWNzX21hcCAhPSAwCisJCQkgJiYgU1AtPl9hY3NfbWFwW0NoYXJPZkQoY2gpXSAhPSAwKQorCQkJfHwgKENoYXJPZkQoY2gpID49IDEyOCkpKSkpIHsKKwkgICAgOworCX0gZWxzZSB7CisJICAgIGNoID0gQ0hSRUYoYmxhbmspOworCSAgICBUUihUUkFDRV9DSEFSUFVULCAoImZvcmNlZCB0byBibGFuayIpKTsKKwl9CisJY2hsZW4gPSAxOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKChBdHRyT2YoYXR0cikgJiBBX0FMVENIQVJTRVQpCisJJiYgU1AtPl9hY3NfbWFwICE9IDAKKwkmJiBDaGFyT2ZEKGNoKSA8IEFDU19MRU4pIHsKKwlteV9jaCA9IENIREVSRUYoY2gpOwkvKiB3b3JrIGFyb3VuZCBjb25zdCBwYXJhbSAqLworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJLyoKKwkgKiBUaGlzIGlzIGNydWRlICYgdWdseSwgYnV0IHdvcmtzIG1vc3Qgb2YgdGhlIHRpbWUuICBJdCBjaGVja3MgaWYgdGhlCisJICogYWNzX2NoYXJzIHN0cmluZyBzcGVjaWZpZWQgdGhhdCB3ZSBoYXZlIGEgbWFwcGluZyBmb3IgdGhpcworCSAqIGNoYXJhY3RlciwgYW5kIHVzZXMgdGhlIHdpZGUtY2hhcmFjdGVyIG1hcHBpbmcgd2hlbiB3ZSBleHBlY3QgdGhlCisJICogbm9ybWFsIG9uZSB0byBiZSBicm9rZW4gKGJ5IG1pcy1kZXNpZ24gOy0pLgorCSAqLworCWlmIChTUC0+X3NjcmVlbl9hY3NfZml4CisJICAgICYmIFNQLT5fc2NyZWVuX2Fjc19tYXBbQ2hhck9mKG15X2NoKV0pIHsKKwkgICAgUmVtQXR0cihhdHRyLCBBX0FMVENIQVJTRVQpOworCSAgICBteV9jaCA9IF9uY193YWNzW0NoYXJPZihteV9jaCldOworCX0KKyNlbmRpZgorCS8qCisJICogSWYgd2UgKHN0aWxsKSBoYXZlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0LCBpdCBpcyB0aGUgbm9ybWFsIDhiaXQKKwkgKiBmbGF2b3IuICBUaGUgX3NjcmVlbl9hY3NfbWFwW10gYXJyYXkgdGVsbHMgaWYgdGhlIGNoYXJhY3RlciB3YXMKKwkgKiByZWFsbHkgaW4gYWNzX2NoYXJzLCBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgd2F5IHdpZGUvbm9ybWFsIGxpbmUKKwkgKiBkcmF3aW5nIGZsYXZvcnMgYXJlIGludGVncmF0ZWQuCisJICovCisJaWYgKEF0dHJPZihhdHRyKSAmIEFfQUxUQ0hBUlNFVCkgeworCSAgICBpbnQgaiA9IENoYXJPZkQoY2gpOworCSAgICBjaHR5cGUgdGVtcCA9IFVDaGFyKFNQLT5fYWNzX21hcFtqXSk7CisKKwkgICAgaWYgKCEoU1AtPl9zY3JlZW5fYWNzX21hcFtqXSkpIHsKKwkJUmVtQXR0cihhdHRyLCBBX0FMVENIQVJTRVQpOworCQlpZiAodGVtcCA9PSAwKQorCQkgICAgdGVtcCA9ICcgJzsKKwkgICAgfQorCSAgICBpZiAodGVtcCAhPSAwKQorCQlTZXRDaGFyKG15X2NoLCB0ZW1wLCBBdHRyT2YoYXR0cikpOworCX0KKwljaCA9IENIUkVGKG15X2NoKTsKKyAgICB9CisgICAgaWYgKHRpbGRlX2dsaXRjaCAmJiAoQ2hhck9mRChjaCkgPT0gTCgnficpKSkgeworCVNldENoYXIodGlsZGUsIEwoJ2AnKSwgQXR0ck9mKGF0dHIpKTsKKwljaCA9IENIUkVGKHRpbGRlKTsKKyAgICB9CisKKyAgICBVcGRhdGVBdHRycyhhdHRyKTsKKyNpZiAhVVNFX1dJREVDX1NVUFBPUlQKKyAgICAvKiBGSVhNRSAtIHdlIGRvIHRoaXMgc3BlY2lhbCBjYXNlIGZvciBzaWduYWwgaGFuZGxpbmcsIHNob3VsZCBzZWUgaG93IHRvCisgICAgICogbWFrZSBpdCB3b3JrIGZvciB3aWRlIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgaWYgKFNQLT5fb3V0Y2ggIT0gMCkgeworCVNQLT5fb3V0Y2goVUNoYXIoY2gpKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKwlQVVRDKENIREVSRUYoY2gpLCBTUC0+X29mcCk7CS8qIG1hY3JvJ3MgZmFzdGVzdC4uLiAqLworCUNPVU5UX09VVENIQVJTKDEpOworICAgIH0KKyAgICBTUC0+X2N1cnNjb2wgKz0gY2hsZW47CisgICAgaWYgKGNoYXJfcGFkZGluZykgeworCVRQVVRTX1RSQUNFKCJjaGFyX3BhZGRpbmciKTsKKwlwdXRwKGNoYXJfcGFkZGluZyk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbAorY2hlY2tfcGVuZGluZyh2b2lkKQorLyogY2hlY2sgZm9yIHBlbmRpbmcgaW5wdXQgKi8KK3sKKyAgICBib29sIGhhdmVfcGVuZGluZyA9IEZBTFNFOworCisgICAgLyoKKyAgICAgKiBPbmx5IGNhcnJ5IG91dCB0aGlzIGNoZWNrIHdoZW4gdGhlIGZsYWcgaXMgemVybywgb3RoZXJ3aXNlIHdlJ2xsCisgICAgICogaGF2ZSB0aGUgcmVmcmVzaGluZyBzbG93IGRvd24gZHJhc3RpY2FsbHkgKG9yIHN0b3ApIGlmIHRoZXJlJ3MgYW4KKyAgICAgKiB1bnJlYWQgY2hhcmFjdGVyIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBpZiAoU1AtPl9maWZvaG9sZCAhPSAwKQorCXJldHVybiBGQUxTRTsKKworICAgIGlmIChTUC0+X2NoZWNrZmQgPj0gMCkgeworI2lmIFVTRV9GVU5DX1BPTEwKKwlzdHJ1Y3QgcG9sbGZkIGZkc1sxXTsKKwlmZHNbMF0uZmQgPSBTUC0+X2NoZWNrZmQ7CisJZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKKwlpZiAocG9sbChmZHMsIDEsIDApID4gMCkgeworCSAgICBoYXZlX3BlbmRpbmcgPSBUUlVFOworCX0KKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisJLyoKKwkgKiBCZU9TJ3Mgc2VsZWN0KCkgaXMgZGVjbGFyZWQgaW4gc29ja2V0LmgsIHNvIHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXMKKwkgKiBub3Qgc2VlIGl0LiAgVGhhdCdzIGp1c3QgYXMgd2VsbCwgc2luY2UgdGhhdCBmdW5jdGlvbiB3b3JrcyBvbmx5IGZvcgorCSAqIHNvY2tldHMuICBUaGlzICh1c2luZyBzbm9vemUgYW5kIGlvY3RsKSB3YXMgZGlzdGlsbGVkIGZyb20gQmUncyBwYXRjaAorCSAqIGZvciBuY3Vyc2VzIHdoaWNoIHVzZXMgYSBzZXBhcmF0ZSB0aHJlYWQgdG8gc2ltdWxhdGUgc2VsZWN0KCkuCisJICoKKwkgKiBGSVhNRTogdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgaW9jdGwgYXJlbid0IHZlcnkgY2xlYXIgaWYgd2UgZ2V0CisJICogaW50ZXJydXB0ZWQuCisJICovCisJaW50IG4gPSAwOworCWludCBob3dtYW55ID0gaW9jdGwoMCwgJ2ljaHInLCAmbik7CisJaWYgKGhvd21hbnkgPj0gMCAmJiBuID4gMCkgeworCSAgICBoYXZlX3BlbmRpbmcgPSBUUlVFOworCX0KKyNlbGlmIEhBVkVfU0VMRUNUCisJZmRfc2V0IGZkc2V0OworCXN0cnVjdCB0aW1ldmFsIGt0aW1lb3V0OworCisJa3RpbWVvdXQudHZfc2VjID0KKwkgICAga3RpbWVvdXQudHZfdXNlYyA9IDA7CisKKwlGRF9aRVJPKCZmZHNldCk7CisJRkRfU0VUKFNQLT5fY2hlY2tmZCwgJmZkc2V0KTsKKwlpZiAoc2VsZWN0KFNQLT5fY2hlY2tmZCArIDEsICZmZHNldCwgTlVMTCwgTlVMTCwgJmt0aW1lb3V0KSAhPSAwKSB7CisJICAgIGhhdmVfcGVuZGluZyA9IFRSVUU7CisJfQorI2VuZGlmCisgICAgfQorICAgIGlmIChoYXZlX3BlbmRpbmcpIHsKKwlTUC0+X2ZpZm9ob2xkID0gNTsKKwlfbmNfZmx1c2goKTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCisvKiBwdXQgY2hhciBhdCBsb3dlciByaWdodCBjb3JuZXIgKi8KK3N0YXRpYyB2b2lkCitQdXRDaGFyTFIoY29uc3QgQVJHX0NIX1QgY2gpCit7CisgICAgaWYgKCFhdXRvX3JpZ2h0X21hcmdpbikgeworCS8qIHdlIGNhbiBwdXQgdGhlIGNoYXIgZGlyZWN0bHkgKi8KKwlQdXRBdHRyQ2hhcihjaCk7CisgICAgfSBlbHNlIGlmIChlbnRlcl9hbV9tb2RlICYmIGV4aXRfYW1fbW9kZSkgeworCS8qIHdlIGNhbiBzdXBwcmVzcyBhdXRvbWFyZ2luICovCisJVFBVVFNfVFJBQ0UoImV4aXRfYW1fbW9kZSIpOworCXB1dHAoZXhpdF9hbV9tb2RlKTsKKworCVB1dEF0dHJDaGFyKGNoKTsKKwlTUC0+X2N1cnNjb2wtLTsKKwlwb3NpdGlvbl9jaGVjayhTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCwgImV4aXRfYW1fbW9kZSIpOworCisJVFBVVFNfVFJBQ0UoImVudGVyX2FtX21vZGUiKTsKKwlwdXRwKGVudGVyX2FtX21vZGUpOworICAgIH0gZWxzZSBpZiAoKGVudGVyX2luc2VydF9tb2RlICYmIGV4aXRfaW5zZXJ0X21vZGUpCisJICAgICAgIHx8IGluc2VydF9jaGFyYWN0ZXIgfHwgcGFybV9pY2gpIHsKKwlHb1RvKHNjcmVlbl9saW5lcyAtIDEsIHNjcmVlbl9jb2x1bW5zIC0gMik7CisJUHV0QXR0ckNoYXIoY2gpOworCUdvVG8oc2NyZWVuX2xpbmVzIC0gMSwgc2NyZWVuX2NvbHVtbnMgLSAyKTsKKwlJbnNTdHIobmV3c2NyLT5fbGluZVtzY3JlZW5fbGluZXMgLSAxXS50ZXh0ICsgc2NyZWVuX2NvbHVtbnMgLSAyLCAxKTsKKyAgICB9Cit9CisKKy8qCisgKiBXcmFwIHRoZSBjdXJzb3IgcG9zaXRpb24sIGkuZS4sIGFkdmFuY2UgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLgorICovCitzdGF0aWMgdm9pZAord3JhcF9jdXJzb3Iodm9pZCkKK3sKKyAgICBpZiAoZWF0X25ld2xpbmVfZ2xpdGNoKSB7CisJLyoKKwkgKiB4ZW5sIGNhbiBtYW5pZmVzdCB0d28gZGlmZmVyZW50IHdheXMuICBUaGUgdnQxMDAgd2F5IGlzIHRoYXQsIHdoZW4KKwkgKiB5b3UnZCBleHBlY3QgdGhlIGN1cnNvciB0byB3cmFwLCBpdCBzdGF5cyBodW5nIGF0IHRoZSByaWdodCBtYXJnaW4KKwkgKiAob24gdG9wIG9mIHRoZSBjaGFyYWN0ZXIganVzdCBlbWl0dGVkKSBhbmQgZG9lc24ndCB3cmFwIHVudGlsIHRoZQorCSAqICpuZXh0KiBncmFwaGljIGNoYXIgaXMgZW1pdHRlZC4gIFRoZSBjMTAwIHdheSBpcyB0byBpZ25vcmUgTEYKKwkgKiByZWNlaXZlZCBqdXN0IGFmdGVyIGFuIGFtIHdyYXAuCisJICoKKwkgKiBBbiBhZ2dyZXNzaXZlIHdheSB0byBoYW5kbGUgdGhpcyB3b3VsZCBiZSB0byBlbWl0IENSL0xGIGFmdGVyIHRoZQorCSAqIGNoYXIgYW5kIHRoZW4gYXNzdW1lIHRoZSB3cmFwIGlzIGRvbmUsIHlvdSdyZSBvbiB0aGUgZmlyc3QgcG9zaXRpb24KKwkgKiBvZiB0aGUgbmV4dCBsaW5lLCBhbmQgdGhlIHRlcm1pbmFsIG91dCBvZiBpdHMgd2VpcmQgc3RhdGUuICBIZXJlCisJICogaXQncyBzYWZlIHRvIGp1c3QgdGVsbCB0aGUgY29kZSB0aGF0IHRoZSBjdXJzb3IgaXMgaW4gaHlwZXJzcGFjZSBhbmQKKwkgKiBsZXQgdGhlIG5leHQgbXZjdXIoKSBjYWxsIHN0cmFpZ2h0ZW4gdGhpbmdzIG91dC4KKwkgKi8KKwlTUC0+X2N1cnNjb2wgPSAtMTsKKwlTUC0+X2N1cnNyb3cgPSAtMTsKKyAgICB9IGVsc2UgaWYgKGF1dG9fcmlnaHRfbWFyZ2luKSB7CisJU1AtPl9jdXJzY29sID0gMDsKKwlTUC0+X2N1cnNyb3crKzsKKwkvKgorCSAqIFdlJ3ZlIGFjdHVhbGx5IG1vdmVkIC0gYnV0IG1heSBoYXZlIHRvIHdvcmsgYXJvdW5kIHByb2JsZW1zIHdpdGgKKwkgKiB2aWRlbyBhdHRyaWJ1dGVzIG5vdCB3b3JraW5nLgorCSAqLworCWlmICghbW92ZV9zdGFuZG91dF9tb2RlICYmIEF0dHJPZihTQ1JFRU5fQVRUUlMoU1ApKSkgeworCSAgICBUUihUUkFDRV9DSEFSUFVULCAoInR1cm5pbmcgb2ZmICglI2x4KSAlcyBiZWZvcmUgd3JhcHBpbmciLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSksCisJCQkgICAgICAgX3RyYWNlYXR0cihBdHRyT2YoU0NSRUVOX0FUVFJTKFNQKSkpKSk7CisJICAgICh2b2lkKSBWSURBVFRSKEFfTk9STUFMLCAwKTsKKwl9CisgICAgfSBlbHNlIHsKKwlTUC0+X2N1cnNjb2wtLTsKKyAgICB9CisgICAgcG9zaXRpb25fY2hlY2soU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wsICJ3cmFwX2N1cnNvciIpOworfQorCitzdGF0aWMgTkNVUlNFU19JTkxJTkUgdm9pZAorUHV0Q2hhcihjb25zdCBBUkdfQ0hfVCBjaCkKKy8qIGluc2VydCBjaGFyYWN0ZXIsIGhhbmRsaW5nIGF1dG9tYXJnaW4gc3R1ZmYgKi8KK3sKKyAgICBpZiAoU1AtPl9jdXJzcm93ID09IHNjcmVlbl9saW5lcyAtIDEgJiYgU1AtPl9jdXJzY29sID09IHNjcmVlbl9jb2x1bW5zIC0gMSkKKwlQdXRDaGFyTFIoY2gpOworICAgIGVsc2UKKwlQdXRBdHRyQ2hhcihjaCk7CisKKyAgICBpZiAoU1AtPl9jdXJzY29sID49IHNjcmVlbl9jb2x1bW5zKQorCXdyYXBfY3Vyc29yKCk7CisKKyAgICBwb3NpdGlvbl9jaGVjayhTUC0+X2N1cnNyb3csIFNQLT5fY3Vyc2NvbCwgIlB1dENoYXIiKTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNoYXJhY3RlciBjYW4gYmUgb3V0cHV0IGJ5IGNsZWFyaW5nIGNvbW1hbmRzLiAgVGhpcworICogaW5jbHVkZXMgdGVzdCBmb3IgYmVpbmcgYSBzcGFjZSBhbmQgbm90IGluY2x1ZGluZyBhbnkgJ2JhZCcgYXR0cmlidXRlcywgc3VjaAorICogYXMgQV9SRVZFUlNFLiAgQWxsIGF0dHJpYnV0ZSBmbGFncyB3aGljaCBkb24ndCBhZmZlY3QgYXBwZWFyYW5jZSBvZiBhIHNwYWNlCisgKiBvciBjYW4gYmUgb3V0cHV0IGJ5IGNsZWFyaW5nIChBX0NPTE9SIGluIGNhc2Ugb2YgYmNlLXRlcm1pbmFsKSBhcmUgZXhjbHVkZWQuCisgKi8KK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBib29sCitjYW5fY2xlYXJfd2l0aChBUkdfQ0hfVCBjaCkKK3sKKyAgICBpZiAoIWJhY2tfY29sb3JfZXJhc2UgJiYgU1AtPl9jb2xvcm9uKSB7CisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKwlpbnQgcGFpcjsKKworCWlmICghU1AtPl9kZWZhdWx0X2NvbG9yKQorCSAgICByZXR1cm4gRkFMU0U7CisJaWYgKFNQLT5fZGVmYXVsdF9mZyAhPSBDX01BU0sgfHwgU1AtPl9kZWZhdWx0X2JnICE9IENfTUFTSykKKwkgICAgcmV0dXJuIEZBTFNFOworCWlmICgocGFpciA9IEdldFBhaXIoQ0hERVJFRihjaCkpKSAhPSAwKSB7CisJICAgIHNob3J0IGZnLCBiZzsKKwkgICAgcGFpcl9jb250ZW50KHBhaXIsICZmZywgJmJnKTsKKwkgICAgaWYgKGZnICE9IENfTUFTSyB8fCBiZyAhPSBDX01BU0spCisJCXJldHVybiBGQUxTRTsKKwl9CisjZWxzZQorCWlmIChBdHRyT2ZEKGNoKSAmIEFfQ09MT1IpCisJICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gKElTQkxBTksoQ0hERVJFRihjaCkpICYmCisJICAgIChBdHRyT2ZEKGNoKSAmIH4oTk9OQkxBTktfQVRUUiB8IEFfQ09MT1IpKSA9PSBCTEFOS19BVFRSKTsKK30KKworLyoKKyAqIElzc3VlIGEgZ2l2ZW4gc3BhbiBvZiBjaGFyYWN0ZXJzIGZyb20gYW4gYXJyYXkuCisgKiBNdXN0IGJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvOgorICoJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorICoJICAgIFB1dENoYXIobnRleHRbaV0pOworICogYnV0IGNhbiBsZWF2ZSB0aGUgY3Vyc29yIHBvc2l0aW9uZWQgYXQgdGhlIG1pZGRsZSBvZiB0aGUgaW50ZXJ2YWwuCisgKgorICogUmV0dXJuczogMCAtIGN1cnNvciBpcyBhdCB0aGUgZW5kIG9mIGludGVydmFsCisgKgkgICAgMSAtIGN1cnNvciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZQorICoKKyAqIFRoaXMgY29kZSBpcyBvcHRpbWl6ZWQgdXNpbmcgZWNoIGFuZCByZXAuCisgKi8KK3N0YXRpYyBpbnQKK0VtaXRSYW5nZShjb25zdCBOQ1VSU0VTX0NIX1QgKiBudGV4dCwgaW50IG51bSkKK3sKKyAgICBpbnQgaTsKKworICAgIFRSKFRSQUNFX0NIQVJQVVQsICgiRW1pdFJhbmdlICVkOiVzIiwgbnVtLCBfbmNfdmlzY2J1ZihudGV4dCwgbnVtKSkpOworCisgICAgaWYgKGVyYXNlX2NoYXJzIHx8IHJlcGVhdF9jaGFyKSB7CisJd2hpbGUgKG51bSA+IDApIHsKKwkgICAgaW50IHJ1bmNvdW50OworCSAgICBOQ1VSU0VTX0NIX1QgbnRleHQwOworCisJICAgIHdoaWxlIChudW0gPiAxICYmICFDaGFyRXEobnRleHRbMF0sIG50ZXh0WzFdKSkgeworCQlQdXRDaGFyKENIUkVGKG50ZXh0WzBdKSk7CisJCW50ZXh0Kys7CisJCW51bS0tOworCSAgICB9CisJICAgIG50ZXh0MCA9IG50ZXh0WzBdOworCSAgICBpZiAobnVtID09IDEpIHsKKwkJUHV0Q2hhcihDSFJFRihudGV4dDApKTsKKwkJcmV0dXJuIDA7CisJICAgIH0KKwkgICAgcnVuY291bnQgPSAyOworCisJICAgIHdoaWxlIChydW5jb3VudCA8IG51bSAmJiBDaGFyRXEobnRleHRbcnVuY291bnRdLCBudGV4dDApKQorCQlydW5jb3VudCsrOworCisJICAgIC8qCisJICAgICAqIFRoZSBjb3N0IGV4cHJlc3Npb24gaW4gdGhlIG1pZGRsZSBpc24ndCBleGFjdGx5IHJpZ2h0LgorCSAgICAgKiBfY3VwX2NoX2Nvc3QgaXMgYW4gdXBwZXIgYm91bmQgb24gdGhlIGNvc3QgZm9yIG1vdmluZyB0byB0aGUKKwkgICAgICogZW5kIG9mIHRoZSBlcmFzZWQgYXJlYSwgYnV0IG5vdCB0aGUgY29zdCBpdHNlbGYgKHdoaWNoIHdlCisJICAgICAqIGNhbid0IGNvbXB1dGUgd2l0aG91dCBlbWl0dGluZyB0aGUgbW92ZSkuICBUaGlzIG1heSByZXN1bHQKKwkgICAgICogaW4gZXJhc2VfY2hhcnMgbm90IGdldHRpbmcgdXNlZCBpbiBzb21lIHNpdHVhdGlvbnMgZm9yCisJICAgICAqIHdoaWNoIGl0IHdvdWxkIGJlIG1hcmdpbmFsbHkgYWR2YW50YWdlb3VzLgorCSAgICAgKi8KKwkgICAgaWYgKGVyYXNlX2NoYXJzCisJCSYmIHJ1bmNvdW50ID4gU1AtPl9lY2hfY29zdCArIFNQLT5fY3VwX2NoX2Nvc3QKKwkJJiYgY2FuX2NsZWFyX3dpdGgoQ0hSRUYobnRleHQwKSkpIHsKKwkJVXBkYXRlQXR0cnMobnRleHQwKTsKKwkJcHV0cChUUEFSTV8xKGVyYXNlX2NoYXJzLCBydW5jb3VudCkpOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcGFydCBvZiB0aGUgZ2l2ZW4gaW50ZXJ2YWwsCisJCSAqIGRvbid0IGJvdGhlciBtb3ZpbmcgY3Vyc29yLCBzaW5jZSBpdCBjYW4gYmUgdGhlCisJCSAqIGxhc3QgdXBkYXRlIG9uIHRoZSBsaW5lLgorCQkgKi8KKwkJaWYgKHJ1bmNvdW50IDwgbnVtKSB7CisJCSAgICBHb1RvKFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sICsgcnVuY291bnQpOworCQl9IGVsc2UgeworCQkgICAgcmV0dXJuIDE7CS8qIGN1cnNvciBzdGF5cyBpbiB0aGUgbWlkZGxlICovCisJCX0KKwkgICAgfSBlbHNlIGlmIChyZXBlYXRfY2hhciAmJiBydW5jb3VudCA+IFNQLT5fcmVwX2Nvc3QpIHsKKwkJYm9vbCB3cmFwX3Bvc3NpYmxlID0gKFNQLT5fY3Vyc2NvbCArIHJ1bmNvdW50ID49IHNjcmVlbl9jb2x1bW5zKTsKKwkJaW50IHJlcF9jb3VudCA9IHJ1bmNvdW50OworCisJCWlmICh3cmFwX3Bvc3NpYmxlKQorCQkgICAgcmVwX2NvdW50LS07CisKKwkJVXBkYXRlQXR0cnMobnRleHQwKTsKKwkJdHB1dHMoVFBBUk1fMihyZXBlYXRfY2hhciwgQ2hhck9mKG50ZXh0MCksIHJlcF9jb3VudCksCisJCSAgICAgIHJlcF9jb3VudCwgX25jX291dGNoKTsKKwkJU1AtPl9jdXJzY29sICs9IHJlcF9jb3VudDsKKworCQlpZiAod3JhcF9wb3NzaWJsZSkKKwkJICAgIFB1dENoYXIoQ0hSRUYobnRleHQwKSk7CisJICAgIH0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBydW5jb3VudDsgaSsrKQorCQkgICAgUHV0Q2hhcihDSFJFRihudGV4dFtpXSkpOworCSAgICB9CisJICAgIG50ZXh0ICs9IHJ1bmNvdW50OworCSAgICBudW0gLT0gcnVuY291bnQ7CisJfQorCXJldHVybiAwOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwlQdXRDaGFyKENIUkVGKG50ZXh0W2ldKSk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBPdXRwdXQgdGhlIGxpbmUgaW4gdGhlIGdpdmVuIHJhbmdlIFtmaXJzdCAuLiBsYXN0XQorICoKKyAqIElmIHRoZXJlJ3MgYSBydW4gb2YgaWRlbnRpY2FsIGNoYXJhY3RlcnMgdGhhdCdzIGxvbmcgZW5vdWdoIHRvIGp1c3RpZnkKKyAqIGN1cnNvciBtb3ZlbWVudCwgdXNlIHRoYXQgYWxzby4KKyAqCisgKiBSZXR1cm5zOiBzYW1lIGFzIEVtaXRSYW5nZQorICovCitzdGF0aWMgaW50CitQdXRSYW5nZShjb25zdCBOQ1VSU0VTX0NIX1QgKiBvdGV4dCwKKwkgY29uc3QgTkNVUlNFU19DSF9UICogbnRleHQsCisJIGludCByb3csCisJIGludCBmaXJzdCwgaW50IGxhc3QpCit7CisgICAgaW50IGksIGosIHNhbWU7CisKKyAgICBUUihUUkFDRV9DSEFSUFVULCAoIlB1dFJhbmdlKCVwLCAlcCwgJWQsICVkLCAlZCkiLAorCQkgICAgICAgb3RleHQsIG50ZXh0LCByb3csIGZpcnN0LCBsYXN0KSk7CisKKyAgICBpZiAob3RleHQgIT0gbnRleHQKKwkmJiAobGFzdCAtIGZpcnN0ICsgMSkgPiBTUC0+X2lubGluZV9jb3N0KSB7CisJZm9yIChqID0gZmlyc3QsIHNhbWUgPSAwOyBqIDw9IGxhc3Q7IGorKykgeworCSAgICBpZiAoIXNhbWUgJiYgaXNXaWRlY0V4dChvdGV4dFtqXSkpCisJCWNvbnRpbnVlOworCSAgICBpZiAoQ2hhckVxKG90ZXh0W2pdLCBudGV4dFtqXSkpIHsKKwkJc2FtZSsrOworCSAgICB9IGVsc2UgeworCQlpZiAoc2FtZSA+IFNQLT5faW5saW5lX2Nvc3QpIHsKKwkJICAgIEVtaXRSYW5nZShudGV4dCArIGZpcnN0LCBqIC0gc2FtZSAtIGZpcnN0KTsKKwkJICAgIEdvVG8ocm93LCBmaXJzdCA9IGopOworCQl9CisJCXNhbWUgPSAwOworCSAgICB9CisJfQorCWkgPSBFbWl0UmFuZ2UobnRleHQgKyBmaXJzdCwgaiAtIHNhbWUgLSBmaXJzdCk7CisJLyoKKwkgKiBBbHdheXMgcmV0dXJuIDEgZm9yIHRoZSBuZXh0IEdvVG8oKSBhZnRlciBhIFB1dFJhbmdlKCkgaWYgd2UgZm91bmQKKwkgKiBpZGVudGljYWwgY2hhcmFjdGVycyBhdCBlbmQgb2YgaW50ZXJ2YWwKKwkgKi8KKwlyZXR1cm4gKHNhbWUgPT0gMCA/IGkgOiAxKTsKKyAgICB9CisgICAgcmV0dXJuIEVtaXRSYW5nZShudGV4dCArIGZpcnN0LCBsYXN0IC0gZmlyc3QgKyAxKTsKK30KKworLyogbGVhdmUgdW5icmFja2V0ZWQgaGVyZSBzbyAnaW5kZW50JyB3b3JrcyAqLworI2RlZmluZSBNQVJLX05PQ0hBTkdFKHdpbixyb3cpIFwKKwkJd2luLT5fbGluZVtyb3ddLmZpcnN0Y2hhciA9IF9OT0NIQU5HRTsgXAorCQl3aW4tPl9saW5lW3Jvd10ubGFzdGNoYXIgPSBfTk9DSEFOR0U7IFwKKwkJaWZfVVNFX1NDUk9MTF9ISU5UUyh3aW4tPl9saW5lW3Jvd10ub2xkaW5kZXggPSByb3cpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK2RvdXBkYXRlKHZvaWQpCit7CisgICAgaW50IGk7CisgICAgaW50IG5vbmVtcHR5OworI2lmIFVTRV9UUkFDRV9USU1FUworICAgIHN0cnVjdCB0bXMgYmVmb3JlLCBhZnRlcjsKKyNlbmRpZiAvKiBVU0VfVFJBQ0VfVElNRVMgKi8KKworICAgIFQoKFRfQ0FMTEVEKCJkb3VwZGF0ZSgpIikpKTsKKworICAgIGlmIChjdXJzY3IgPT0gMAorCXx8IG5ld3NjciA9PSAwKQorCXJldHVybkNvZGUoRVJSKTsKKworI2lmZGVmIFRSQUNFCisgICAgaWYgKFVTRV9UUkFDRUYoVFJBQ0VfVVBEQVRFKSkgeworCWlmIChjdXJzY3ItPl9jbGVhcikKKwkgICAgX3RyYWNlZigiY3Vyc2NyIGlzIGNsZWFyIik7CisJZWxzZQorCSAgICBfdHJhY2VkdW1wKCJjdXJzY3IiLCBjdXJzY3IpOworCV90cmFjZWR1bXAoIm5ld3NjciIsIG5ld3Njcik7CisJX25jX3VubG9ja19nbG9iYWwodHJhY2VmKTsKKyAgICB9CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIF9uY19zaWduYWxfaGFuZGxlcihGQUxTRSk7CisKKyAgICBpZiAoU1AtPl9maWZvaG9sZCkKKwlTUC0+X2ZpZm9ob2xkLS07CisKKyNpZiBVU0VfU0laRUNIQU5HRQorICAgIGlmIChTUC0+X2VuZHdpbiB8fCBfbmNfaGFuZGxlX3NpZ3dpbmNoKFNQKSkgeworCS8qCisJICogVGhpcyBpcyBhIHRyYW5zcGFyZW50IGV4dGVuc2lvbjogIFhTSSBkb2VzIG5vdCBhZGRyZXNzIGl0LAorCSAqIGFuZCBhcHBsaWNhdGlvbnMgbmVlZCBub3Qga25vdyB0aGF0IG5jdXJzZXMgY2FuIGRvIGl0LgorCSAqCisJICogQ2hlY2sgaWYgdGhlIHRlcm1pbmFsIHNpemUgaGFzIGNoYW5nZWQgd2hpbGUgY3Vyc2VzIHdhcyBvZmYKKwkgKiAodGhpcyBjYW4gaGFwcGVuIGluIGFuIHh0ZXJtLCBmb3IgZXhhbXBsZSksIGFuZCByZXNpemUgdGhlCisJICogbmN1cnNlcyBkYXRhIHN0cnVjdHVyZXMgYWNjb3JkaW5nbHkuCisJICovCisJX25jX3VwZGF0ZV9zY3JlZW5zaXplKFNQKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChTUC0+X2VuZHdpbikgeworCisJVCgoImNvbWluZyBiYWNrIGZyb20gc2hlbGwgbW9kZSIpKTsKKwlyZXNldF9wcm9nX21vZGUoKTsKKworCV9uY19tdmN1cl9yZXN1bWUoKTsKKwlfbmNfc2NyZWVuX3Jlc3VtZSgpOworCVNQLT5fbW91c2VfcmVzdW1lKFNQKTsKKworCVNQLT5fZW5kd2luID0gRkFMU0U7CisgICAgfQorI2lmIFVTRV9UUkFDRV9USU1FUworICAgIC8qIHplcm8gdGhlIG1ldGVyaW5nIG1hY2hpbmVyeSAqLworICAgIFJFU0VUX09VVENIQVJTKCk7CisgICAgKHZvaWQpIHRpbWVzKCZiZWZvcmUpOworI2VuZGlmIC8qIFVTRV9UUkFDRV9USU1FUyAqLworCisgICAgLyoKKyAgICAgKiBUaGlzIGlzIHRoZSBzdXBwb3J0IGZvciBtYWdpYy1jb29raWUgdGVybWluYWxzLiAgVGhlIHRoZW9yeTogIHdlIHNjYW4KKyAgICAgKiB0aGUgdmlydHVhbCBzY3JlZW4gbG9va2luZyBmb3IgYXR0cmlidXRlIHR1cm5vbnMuICBXaGVyZSB3ZSBmaW5kIG9uZSwKKyAgICAgKiBjaGVjayB0byBtYWtlIHN1cmUgaXQncyByZWFsaXphYmxlIGJ5IHNlZWluZyBpZiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mCisgICAgICogdW4tYXR0cmlidXRlZCBibGFua3MgYXJlIHByZXNlbnQgYmVmb3JlIGFuZCBhZnRlciB0aGUgYXR0cmlidXRlZCByYW5nZTsKKyAgICAgKiB0cnkgdG8gc2hpZnQgdGhlIHJhbmdlIGJvdW5kYXJpZXMgb3ZlciBibGFua3MgKG5vdCBjaGFuZ2luZyB0aGUgc2NyZWVuCisgICAgICogZGlzcGxheSkgc28gdGhpcyBiZWNvbWVzIHRydWUuICBJZiBpdCBpcywgc2hpZnQgdGhlIGJlZ2lubmluZyBhdHRyaWJ1dGUKKyAgICAgKiBjaGFuZ2UgYXBwcm9wcmlhdGVseSAodGhlIGVuZCBvbmUsIGlmIHdlJ3ZlIGdvdHRlbiB0aGlzIGZhciwgaXMKKyAgICAgKiBndWFyYW50ZWVkIHJvb20gZm9yIGl0cyBjb29raWUpLiAgSWYgbm90LCBudWtlIHRoZSBhZGRlZCBhdHRyaWJ1dGVzIG91dAorICAgICAqIG9mIHRoZSBzcGFuLgorICAgICAqLworI2lmIFVTRV9YTUNfU1VQUE9SVAorICAgIGlmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCkgeworCWludCBqLCBrOworCWF0dHJfdCByYXR0ciA9IEFfTk9STUFMOworCisJZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJICAgIGZvciAoaiA9IDA7IGogPCBzY3JlZW5fY29sdW1uczsgaisrKSB7CisJCWJvb2wgZmFpbGVkID0gRkFMU0U7CisJCU5DVVJTRVNfQ0hfVCAqdGhpc2xpbmUgPSBuZXdzY3ItPl9saW5lW2ldLnRleHQ7CisJCWF0dHJfdCB0aGlzYXR0ciA9IEF0dHJPZih0aGlzbGluZVtqXSkgJiBTUC0+X3htY190cmlnZ2VyczsKKwkJYXR0cl90IHR1cm5vbiA9IHRoaXNhdHRyICYgfnJhdHRyOworCisJCS8qIGlzIGFuIGF0dHJpYnV0ZSB0dXJuZWQgb24gaGVyZT8gKi8KKwkJaWYgKHR1cm5vbiA9PSAwKSB7CisJCSAgICByYXR0ciA9IHRoaXNhdHRyOworCQkgICAgY29udGludWU7CisJCX0KKworCQlUUihUUkFDRV9BVFRSUywgKCJBdCAoJWQsICVkKTogZnJvbSAlcy4uLiIsIGksIGosIF90cmFjZWF0dHIocmF0dHIpKSk7CisJCVRSKFRSQUNFX0FUVFJTLCAoIi4uLnRvICVzIiwgX3RyYWNlYXR0cih0dXJub24pKSk7CisKKwkJLyoKKwkJICogSWYgdGhlIGF0dHJpYnV0ZSBjaGFuZ2UgbG9jYXRpb24gaXMgYSBibGFuayB3aXRoIGEgInNhZmUiCisJCSAqIGF0dHJpYnV0ZSwgdW5kbyB0aGUgYXR0cmlidXRlIHR1cm5vbi4gIFRoaXMgbWF5IGVuc3VyZQorCQkgKiB0aGVyZSdzIGVub3VnaCByb29tIHRvIHNldCB0aGUgYXR0cmlidXRlIGJlZm9yZSB0aGUgZmlyc3QKKwkJICogbm9uLWJsYW5rIGluIHRoZSBydW4uCisJCSAqLworI2RlZmluZSBTQUZFKGEpCSghKChhKSAmIFNQLT5feG1jX3RyaWdnZXJzKSkKKwkJaWYgKElTQkxBTksodGhpc2xpbmVbal0pICYmIFNBRkUodHVybm9uKSkgeworCQkgICAgUmVtQXR0cih0aGlzbGluZVtqXSwgdHVybm9uKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisKKwkJLyogY2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCByb29tIGF0IHN0YXJ0IG9mIHNwYW4gKi8KKwkJZm9yIChrID0gMTsgayA8PSBtYWdpY19jb29raWVfZ2xpdGNoOyBrKyspIHsKKwkJICAgIGlmIChqIC0gayA8IDAKKwkJCXx8ICFJU0JMQU5LKHRoaXNsaW5lW2ogLSBrXSkKKwkJCXx8ICFTQUZFKEF0dHJPZih0aGlzbGluZVtqIC0ga10pKSkgeworCQkJZmFpbGVkID0gVFJVRTsKKwkJCVRSKFRSQUNFX0FUVFJTLCAoIk5vIHJvb20gYXQgc3RhcnQgaW4gJWQsJWQlcyVzIiwKKwkJCQkJIGksIGogLSBrLAorCQkJCQkgKElTQkxBTksodGhpc2xpbmVbaiAtIGtdKQorCQkJCQkgID8gIiIKKwkJCQkJICA6ICI6bm9uYmxhbmsiKSwKKwkJCQkJIChTQUZFKEF0dHJPZih0aGlzbGluZVtqIC0ga10pKQorCQkJCQkgID8gIiIKKwkJCQkJICA6ICI6dW5zYWZlIikpKTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWlmICghZmFpbGVkKSB7CisJCSAgICBib29sIGVuZF9vbnNjcmVlbiA9IEZBTFNFOworCQkgICAgaW50IG0sIG4gPSBqOworCisJCSAgICAvKiBmaW5kIGVuZCBvZiBzcGFuLCBpZiBpdCdzIG9uc2NyZWVuICovCisJCSAgICBmb3IgKG0gPSBpOyBtIDwgc2NyZWVuX2xpbmVzOyBtKyspIHsKKwkJCWZvciAoOyBuIDwgc2NyZWVuX2NvbHVtbnM7IG4rKykgeworCQkJICAgIGF0dHJfdCB0ZXN0YXR0ciA9IEF0dHJPZihuZXdzY3ItPl9saW5lW21dLnRleHRbbl0pOworCQkJICAgIGlmICgodGVzdGF0dHIgJiBTUC0+X3htY190cmlnZ2VycykgPT0gcmF0dHIpIHsKKwkJCQllbmRfb25zY3JlZW4gPSBUUlVFOworCQkJCVRSKFRSQUNFX0FUVFJTLAorCQkJCSAgICgiUmFuZ2UgYXR0cmlidXRlZCB3aXRoICVzIGVuZHMgYXQgKCVkLCAlZCkiLAorCQkJCSAgICBfdHJhY2VhdHRyKHR1cm5vbiksIG0sIG4pKTsKKwkJCQlnb3RvIGZvdW5kaXQ7CisJCQkgICAgfQorCQkJfQorCQkJbiA9IDA7CisJCSAgICB9CisJCSAgICBUUihUUkFDRV9BVFRSUywKKwkJICAgICAgICgiUmFuZ2UgYXR0cmlidXRlZCB3aXRoICVzIGVuZHMgb2Zmc2NyZWVuIiwKKwkJCV90cmFjZWF0dHIodHVybm9uKSkpOworCQkgIGZvdW5kaXQ6OworCisJCSAgICBpZiAoZW5kX29uc2NyZWVuKSB7CisJCQlOQ1VSU0VTX0NIX1QgKmxhc3RsaW5lID0gbmV3c2NyLT5fbGluZVttXS50ZXh0OworCisJCQkvKgorCQkJICogSWYgdGhlcmUgYXJlIHNhZmVseS1hdHRyaWJ1dGVkIGJsYW5rcyBhdCB0aGUgZW5kIG9mCisJCQkgKiB0aGUgcmFuZ2UsIHNob3J0ZW4gdGhlIHJhbmdlLiAgVGhpcyB3aWxsIGhlbHAgZW5zdXJlCisJCQkgKiB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGF0IGVuZCBvZiBzcGFuLgorCQkJICovCisJCQl3aGlsZSAobiA+PSAwCisJCQkgICAgICAgJiYgSVNCTEFOSyhsYXN0bGluZVtuXSkKKwkJCSAgICAgICAmJiBTQUZFKEF0dHJPZihsYXN0bGluZVtuXSkpKSB7CisJCQkgICAgUmVtQXR0cihsYXN0bGluZVtuLS1dLCB0dXJub24pOworCQkJfQorCisJCQkvKiBjaGVjayB0aGF0IHRoZXJlJ3MgZW5vdWdoIHJvb20gYXQgZW5kIG9mIHNwYW4gKi8KKwkJCWZvciAoayA9IDE7IGsgPD0gbWFnaWNfY29va2llX2dsaXRjaDsgaysrKSB7CisJCQkgICAgaWYgKG4gKyBrID49IHNjcmVlbl9jb2x1bW5zCisJCQkJfHwgIUlTQkxBTksobGFzdGxpbmVbbiArIGtdKQorCQkJCXx8ICFTQUZFKEF0dHJPZihsYXN0bGluZVtuICsga10pKSkgeworCQkJCWZhaWxlZCA9IFRSVUU7CisJCQkJVFIoVFJBQ0VfQVRUUlMsCisJCQkJICAgKCJObyByb29tIGF0IGVuZCBpbiAlZCwlZCVzJXMiLAorCQkJCSAgICBpLCBqIC0gaywKKwkJCQkgICAgKElTQkxBTksobGFzdGxpbmVbbiArIGtdKQorCQkJCSAgICAgPyAiIgorCQkJCSAgICAgOiAiOm5vbmJsYW5rIiksCisJCQkJICAgIChTQUZFKEF0dHJPZihsYXN0bGluZVtuICsga10pKQorCQkJCSAgICAgPyAiIgorCQkJCSAgICAgOiAiOnVuc2FmZSIpKSk7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisKKwkJaWYgKGZhaWxlZCkgeworCQkgICAgaW50IHAsIHEgPSBqOworCisJCSAgICBUUihUUkFDRV9BVFRSUywKKwkJICAgICAgICgiQ2xlYXJpbmcgJXMgYmVnaW5uaW5nIGF0ICglZCwgJWQpIiwKKwkJCV90cmFjZWF0dHIodHVybm9uKSwgaSwgaikpOworCisJCSAgICAvKiB0dXJuIG9mZiBuZXcgYXR0cmlidXRlcyBvdmVyIHNwYW4gKi8KKwkJICAgIGZvciAocCA9IGk7IHAgPCBzY3JlZW5fbGluZXM7IHArKykgeworCQkJZm9yICg7IHEgPCBzY3JlZW5fY29sdW1uczsgcSsrKSB7CisJCQkgICAgYXR0cl90IHRlc3RhdHRyID0gQXR0ck9mKG5ld3Njci0+X2xpbmVbcF0udGV4dFtxXSk7CisJCQkgICAgaWYgKCh0ZXN0YXR0ciAmIFNQLT5feG1jX3RyaWdnZXJzKSA9PSByYXR0cikKKwkJCQlnb3RvIGZvdW5kZW5kOworCQkJICAgIFJlbUF0dHIobmV3c2NyLT5fbGluZVtwXS50ZXh0W3FdLCB0dXJub24pOworCQkJfQorCQkJcSA9IDA7CisJCSAgICB9CisJCSAgZm91bmRlbmQ6OworCQl9IGVsc2UgeworCQkgICAgVFIoVFJBQ0VfQVRUUlMsCisJCSAgICAgICAoIkNvb2tpZSBzcGFjZSBmb3IgJXMgZm91bmQgYmVmb3JlICglZCwgJWQpIiwKKwkJCV90cmFjZWF0dHIodHVybm9uKSwgaSwgaikpOworCisJCSAgICAvKgorCQkgICAgICogQmFjayB1cCB0aGUgc3RhcnQgb2YgcmFuZ2Ugc28gdGhlcmUncyByb29tIGZvciBjb29raWVzCisJCSAgICAgKiBiZWZvcmUgdGhlIGZpcnN0IG5vbmJsYW5rIGNoYXJhY3Rlci4KKwkJICAgICAqLworCQkgICAgZm9yIChrID0gMTsgayA8PSBtYWdpY19jb29raWVfZ2xpdGNoOyBrKyspCisJCQlBZGRBdHRyKHRoaXNsaW5lW2ogLSBrXSwgdHVybm9uKTsKKwkJfQorCisJCXJhdHRyID0gdGhpc2F0dHI7CisJICAgIH0KKwl9CisKKyNpZmRlZiBUUkFDRQorCS8qIHNob3cgYWx0ZXJlZCBoaWdobGlnaHRzIGFmdGVyIG1hZ2ljLWNvb2tpZSBjaGVjayAqLworCWlmIChVU0VfVFJBQ0VGKFRSQUNFX1VQREFURSkpIHsKKwkgICAgX3RyYWNlZigiQWZ0ZXIgbWFnaWMtY29va2llIGNoZWNrLi4uIik7CisJICAgIF90cmFjZWR1bXAoIm5ld3NjciIsIG5ld3Njcik7CisJICAgIF9uY191bmxvY2tfZ2xvYmFsKHRyYWNlZik7CisJfQorI2VuZGlmIC8qIFRSQUNFICovCisgICAgfQorI2VuZGlmIC8qIFVTRV9YTUNfU1VQUE9SVCAqLworCisgICAgbm9uZW1wdHkgPSAwOworICAgIGlmIChjdXJzY3ItPl9jbGVhciB8fCBuZXdzY3ItPl9jbGVhcikgewkvKiBmb3JjZSByZWZyZXNoID8gKi8KKwlDbHJVcGRhdGUoKTsKKwljdXJzY3ItPl9jbGVhciA9IEZBTFNFOwkvKiByZXNldCBmbGFnICovCisJbmV3c2NyLT5fY2xlYXIgPSBGQUxTRTsJLyogcmVzZXQgZmxhZyAqLworICAgIH0gZWxzZSB7CisJaW50IGNoYW5nZWRsaW5lcyA9IENIRUNLX0lOVEVSVkFMOworCisJaWYgKGNoZWNrX3BlbmRpbmcoKSkKKwkgICAgZ290byBjbGVhbnVwOworCisJbm9uZW1wdHkgPSBtaW4oc2NyZWVuX2xpbmVzLCBuZXdzY3ItPl9tYXh5ICsgMSk7CisKKwlpZiAoU1AtPl9zY3JvbGxpbmcpIHsKKwkgICAgX25jX3Njcm9sbF9vcHRpbWl6ZSgpOworCX0KKworCW5vbmVtcHR5ID0gQ2xyQm90dG9tKG5vbmVtcHR5KTsKKworCVRSKFRSQUNFX1VQREFURSwgKCJUcmFuc2Zvcm1pbmcgbGluZXMsIG5vbmVtcHR5ICVkIiwgbm9uZW1wdHkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbm9uZW1wdHk7IGkrKykgeworCSAgICAvKgorCSAgICAgKiBIZXJlIGlzIG91ciBsaW5lLWJyZWFrb3V0IG9wdGltaXphdGlvbi4KKwkgICAgICovCisJICAgIGlmIChjaGFuZ2VkbGluZXMgPT0gQ0hFQ0tfSU5URVJWQUwpIHsKKwkJaWYgKGNoZWNrX3BlbmRpbmcoKSkKKwkJICAgIGdvdG8gY2xlYW51cDsKKwkJY2hhbmdlZGxpbmVzID0gMDsKKwkgICAgfQorCisJICAgIC8qCisJICAgICAqIG5ld3Njci0+bGluZVtpXS5maXJzdGNoYXIgaXMgbm9ybWFsbHkgc2V0CisJICAgICAqIGJ5IHdub3V0cmVmcmVzaC4gIGN1cnNjci0+bGluZVtpXS5maXJzdGNoYXIKKwkgICAgICogaXMgbm9ybWFsbHkgc2V0IGJ5IF9uY19zY3JvbGxfd2luZG93IGluIHRoZQorCSAgICAgKiB2ZXJ0aWNhbC1tb3ZlbWVudCBvcHRpbWl6YXRpb24gY29kZSwKKwkgICAgICovCisJICAgIGlmIChuZXdzY3ItPl9saW5lW2ldLmZpcnN0Y2hhciAhPSBfTk9DSEFOR0UKKwkJfHwgY3Vyc2NyLT5fbGluZVtpXS5maXJzdGNoYXIgIT0gX05PQ0hBTkdFKSB7CisJCVRyYW5zZm9ybUxpbmUoaSk7CisJCWNoYW5nZWRsaW5lcysrOworCSAgICB9CisKKwkgICAgLyogbWFyayBsaW5lIGNoYW5nZWQgc3VjY2Vzc2Z1bGx5ICovCisJICAgIGlmIChpIDw9IG5ld3Njci0+X21heHkpIHsKKwkJTUFSS19OT0NIQU5HRShuZXdzY3IsIGkpOworCSAgICB9CisJICAgIGlmIChpIDw9IGN1cnNjci0+X21heHkpIHsKKwkJTUFSS19OT0NIQU5HRShjdXJzY3IsIGkpOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIHB1dCBldmVyeXRoaW5nIGJhY2sgaW4gc3luYyAqLworICAgIGZvciAoaSA9IG5vbmVtcHR5OyBpIDw9IG5ld3Njci0+X21heHk7IGkrKykgeworCU1BUktfTk9DSEFOR0UobmV3c2NyLCBpKTsKKyAgICB9CisgICAgZm9yIChpID0gbm9uZW1wdHk7IGkgPD0gY3Vyc2NyLT5fbWF4eTsgaSsrKSB7CisJTUFSS19OT0NIQU5HRShjdXJzY3IsIGkpOworICAgIH0KKworICAgIGlmICghbmV3c2NyLT5fbGVhdmVvaykgeworCWN1cnNjci0+X2N1cnggPSBuZXdzY3ItPl9jdXJ4OworCWN1cnNjci0+X2N1cnkgPSBuZXdzY3ItPl9jdXJ5OworCisJR29UbyhjdXJzY3ItPl9jdXJ5LCBjdXJzY3ItPl9jdXJ4KTsKKyAgICB9CisKKyAgY2xlYW51cDoKKyAgICAvKgorICAgICAqIFdlIHdvdWxkIGxpa2UgdG8ga2VlcCB0aGUgcGh5c2ljYWwgc2NyZWVuIGluIG5vcm1hbCBtb2RlIGluIGNhc2Ugd2UgZ2V0CisgICAgICogb3RoZXIgcHJvY2Vzc2VzIHdyaXRpbmcgdG8gdGhlIHNjcmVlbi4gIFRoaXMgZ29hbCBjYW5ub3QgYmUgbWV0IGZvcgorICAgICAqIG1hZ2ljIGNvb2tpZXMgc2luY2UgaXQgaW50ZXJmZXJlcyB3aXRoIGF0dHJpYnV0ZXMgdGhhdCBtYXkgcHJvcGFnYXRlCisgICAgICogcGFzdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgKi8KKyNpZiBVU0VfWE1DX1NVUFBPUlQKKyAgICBpZiAobWFnaWNfY29va2llX2dsaXRjaCAhPSAwKQorI2VuZGlmCisJVXBkYXRlQXR0cnMobm9ybWFsKTsKKworICAgIF9uY19mbHVzaCgpOworICAgIFdJTkRPV19BVFRSUyhjdXJzY3IpID0gV0lORE9XX0FUVFJTKG5ld3Njcik7CisKKyNpZiBVU0VfVFJBQ0VfVElNRVMKKyAgICAodm9pZCkgdGltZXMoJmFmdGVyKTsKKyAgICBUUihUUkFDRV9USU1FUywKKyAgICAgICAoIlVwZGF0ZSBjb3N0OiAlbGQgY2hhcnMsICVsZCBjbG9ja3Mgc3lzdGVtIHRpbWUsICVsZCBjbG9ja3MgdXNlciB0aW1lIiwKKwlfbmNfb3V0Y2hhcnMsCisJKGxvbmcpIChhZnRlci50bXNfc3RpbWUgLSBiZWZvcmUudG1zX3N0aW1lKSwKKwkobG9uZykgKGFmdGVyLnRtc191dGltZSAtIGJlZm9yZS50bXNfdXRpbWUpKSk7CisjZW5kaWYgLyogVVNFX1RSQUNFX1RJTUVTICovCisKKyAgICBfbmNfc2lnbmFsX2hhbmRsZXIoVFJVRSk7CisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KKworLyoKKyAqCUNsckJsYW5rKHdpbikKKyAqCisgKglSZXR1cm5zIHRoZSBhdHRyaWJ1dGVkIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSAiY2xlYXJlZCIKKyAqCXNjcmVlbi4gIElmIHRoZSB0ZXJtaW5hbCBoYXMgdGhlIGJhY2stY29sb3ItZXJhc2UgZmVhdHVyZSwgdGhpcyB3aWxsIGJlCisgKgljb2xvcmVkIGFjY29yZGluZyB0byB0aGUgd2JrZ2QoKSBjYWxsLgorICoKKyAqCVdlIHRyZWF0ICdjdXJzY3InIHNwZWNpYWxseSBiZWNhdXNlIGl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHNldCBkaXJlY3RseQorICoJaW4gdGhlIHdia2dkKCkgY2FsbC4gIEFzc3VtZSAnc3Rkc2NyJyBmb3IgdGhpcyBjYXNlLgorICovCisjZGVmaW5lIEJDRV9BVFRSUyAoQV9OT1JNQUx8QV9DT0xPUikKKyNkZWZpbmUgQkNFX0JLR0Qod2luKSAoKCh3aW4pID09IGN1cnNjciA/IHN0ZHNjciA6ICh3aW4pKS0+X25jX2JrZ2QpCisKK3N0YXRpYyBOQ1VSU0VTX0lOTElORSBOQ1VSU0VTX0NIX1QKK0NsckJsYW5rKFdJTkRPVyAqd2luKQoreworICAgIE5DVVJTRVNfQ0hfVCBibGFuayA9IGJsYW5rY2hhcjsKKyAgICBpZiAoYmFja19jb2xvcl9lcmFzZSkKKwlBZGRBdHRyKGJsYW5rLCAoQXR0ck9mKEJDRV9CS0dEKHdpbikpICYgQkNFX0FUVFJTKSk7CisgICAgcmV0dXJuIGJsYW5rOworfQorCisvKgorKioJQ2xyVXBkYXRlKCkKKyoqCisqKglVcGRhdGUgYnkgY2xlYXJpbmcgYW5kIHJlZHJhd2luZyB0aGUgZW50aXJlIHNjcmVlbi4KKyoqCisqLworCitzdGF0aWMgdm9pZAorQ2xyVXBkYXRlKHZvaWQpCit7CisgICAgaW50IGk7CisgICAgTkNVUlNFU19DSF9UIGJsYW5rID0gQ2xyQmxhbmsoc3Rkc2NyKTsKKyAgICBpbnQgbm9uZW1wdHkgPSBtaW4oc2NyZWVuX2xpbmVzLCBuZXdzY3ItPl9tYXh5ICsgMSk7CisKKyAgICBUUihUUkFDRV9VUERBVEUsIChUX0NBTExFRCgiQ2xyVXBkYXRlIikpKTsKKworICAgIENsZWFyU2NyZWVuKGJsYW5rKTsKKworICAgIFRSKFRSQUNFX1VQREFURSwgKCJ1cGRhdGluZyBzY3JlZW4gZnJvbSBzY3JhdGNoIikpOworCisgICAgbm9uZW1wdHkgPSBDbHJCb3R0b20obm9uZW1wdHkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5vbmVtcHR5OyBpKyspCisJVHJhbnNmb3JtTGluZShpKTsKKworICAgIFRSKFRSQUNFX1VQREFURSwgKFRfUkVUVVJOKCIiKSkpOworfQorCisvKgorKioJQ2xyVG9FT0woYmxhbmspCisqKgorKioJQ2xlYXIgdG8gZW5kIG9mIGN1cnJlbnQgbGluZSwgc3RhcnRpbmcgYXQgdGhlIGN1cnNvciBwb3NpdGlvbgorKi8KKworc3RhdGljIHZvaWQKK0NsclRvRU9MKE5DVVJTRVNfQ0hfVCBibGFuaywgYm9vbCBuZWVkY2xlYXIpCit7CisgICAgaW50IGo7CisKKyAgICBpZiAoY3Vyc2NyICE9IDAKKwkmJiBTUC0+X2N1cnNyb3cgPj0gMCkgeworCWZvciAoaiA9IFNQLT5fY3Vyc2NvbDsgaiA8IHNjcmVlbl9jb2x1bW5zOyBqKyspIHsKKwkgICAgaWYgKGogPj0gMCkgeworCQlOQ1VSU0VTX0NIX1QgKmNwID0gJihjdXJzY3ItPl9saW5lW1NQLT5fY3Vyc3Jvd10udGV4dFtqXSk7CisKKwkJaWYgKCFDaGFyRXEoKmNwLCBibGFuaykpIHsKKwkJICAgICpjcCA9IGJsYW5rOworCQkgICAgbmVlZGNsZWFyID0gVFJVRTsKKwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJbmVlZGNsZWFyID0gVFJVRTsKKyAgICB9CisKKyAgICBpZiAobmVlZGNsZWFyKSB7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJjbHJfZW9sIik7CisJaWYgKGNscl9lb2wgJiYgU1AtPl9lbF9jb3N0IDw9IChzY3JlZW5fY29sdW1ucyAtIFNQLT5fY3Vyc2NvbCkpIHsKKwkgICAgcHV0cChjbHJfZW9sKTsKKwl9IGVsc2UgeworCSAgICBpbnQgY291bnQgPSAoc2NyZWVuX2NvbHVtbnMgLSBTUC0+X2N1cnNjb2wpOworCSAgICB3aGlsZSAoY291bnQtLSA+IDApCisJCVB1dENoYXIoQ0hSRUYoYmxhbmspKTsKKwl9CisgICAgfQorfQorCisvKgorKioJQ2xyVG9FT1MoYmxhbmspCisqKgorKioJQ2xlYXIgdG8gZW5kIG9mIHNjcmVlbiwgc3RhcnRpbmcgYXQgdGhlIGN1cnNvciBwb3NpdGlvbgorKi8KKworc3RhdGljIHZvaWQKK0NsclRvRU9TKE5DVVJTRVNfQ0hfVCBibGFuaykKK3sKKyAgICBpbnQgcm93LCBjb2w7CisKKyAgICByb3cgPSBTUC0+X2N1cnNyb3c7CisgICAgY29sID0gU1AtPl9jdXJzY29sOworCisgICAgVXBkYXRlQXR0cnMoYmxhbmspOworICAgIFRQVVRTX1RSQUNFKCJjbHJfZW9zIik7CisgICAgdHB1dHMoY2xyX2Vvcywgc2NyZWVuX2xpbmVzIC0gcm93LCBfbmNfb3V0Y2gpOworCisgICAgd2hpbGUgKGNvbCA8IHNjcmVlbl9jb2x1bW5zKQorCWN1cnNjci0+X2xpbmVbcm93XS50ZXh0W2NvbCsrXSA9IGJsYW5rOworCisgICAgZm9yIChyb3crKzsgcm93IDwgc2NyZWVuX2xpbmVzOyByb3crKykgeworCWZvciAoY29sID0gMDsgY29sIDwgc2NyZWVuX2NvbHVtbnM7IGNvbCsrKQorCSAgICBjdXJzY3ItPl9saW5lW3Jvd10udGV4dFtjb2xdID0gYmxhbms7CisgICAgfQorfQorCisvKgorICoJQ2xyQm90dG9tKHRvdGFsKQorICoKKyAqCVRlc3QgaWYgY2xlYXJpbmcgdGhlIGVuZCBvZiB0aGUgc2NyZWVuIHdvdWxkIHNhdGlzZnkgcGFydCBvZiB0aGUKKyAqCXNjcmVlbi11cGRhdGUuICBEbyB0aGlzIGJ5IHNjYW5uaW5nIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBsaW5lcyBpbiB0aGUKKyAqCXNjcmVlbiwgY2hlY2tpbmcgaWYgZWFjaCBpcyBibGFuaywgYW5kIG9uZSBvciBtb3JlIGFyZSBjaGFuZ2VkLgorICovCitzdGF0aWMgaW50CitDbHJCb3R0b20oaW50IHRvdGFsKQoreworICAgIGludCByb3c7CisgICAgaW50IGNvbDsKKyAgICBpbnQgdG9wID0gdG90YWw7CisgICAgaW50IGxhc3QgPSBtaW4oc2NyZWVuX2NvbHVtbnMsIG5ld3Njci0+X21heHggKyAxKTsKKyAgICBOQ1VSU0VTX0NIX1QgYmxhbmsgPSBuZXdzY3ItPl9saW5lW3RvdGFsIC0gMV0udGV4dFtsYXN0IC0gMV07CisgICAgYm9vbCBvazsKKworICAgIGlmIChjbHJfZW9zICYmIGNhbl9jbGVhcl93aXRoKENIUkVGKGJsYW5rKSkpIHsKKworCWZvciAocm93ID0gdG90YWwgLSAxOyByb3cgPj0gMDsgcm93LS0pIHsKKwkgICAgZm9yIChjb2wgPSAwLCBvayA9IFRSVUU7IG9rICYmIGNvbCA8IGxhc3Q7IGNvbCsrKSB7CisJCW9rID0gKENoYXJFcShuZXdzY3ItPl9saW5lW3Jvd10udGV4dFtjb2xdLCBibGFuaykpOworCSAgICB9CisJICAgIGlmICghb2spCisJCWJyZWFrOworCisJICAgIGZvciAoY29sID0gMDsgb2sgJiYgY29sIDwgbGFzdDsgY29sKyspIHsKKwkJb2sgPSAoQ2hhckVxKGN1cnNjci0+X2xpbmVbcm93XS50ZXh0W2NvbF0sIGJsYW5rKSk7CisJICAgIH0KKwkgICAgaWYgKCFvaykKKwkJdG9wID0gcm93OworCX0KKworCS8qIGRvbid0IHVzZSBjbHJfZW9zIGZvciBqdXN0IG9uZSBsaW5lIGlmIGNscl9lb2wgYXZhaWxhYmxlICovCisJaWYgKHRvcCA8IHRvdGFsKSB7CisJICAgIEdvVG8odG9wLCAwKTsKKwkgICAgQ2xyVG9FT1MoYmxhbmspOworCSAgICBpZiAoU1AtPm9sZGhhc2ggJiYgU1AtPm5ld2hhc2gpIHsKKwkJZm9yIChyb3cgPSB0b3A7IHJvdyA8IHNjcmVlbl9saW5lczsgcm93KyspCisJCSAgICBTUC0+b2xkaGFzaFtyb3ddID0gU1AtPm5ld2hhc2hbcm93XTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHRvcDsKK30KKworI2lmIFVTRV9YTUNfU1VQUE9SVAorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisjZGVmaW5lIGNoZWNrX3htY190cmFuc2l0aW9uKGEsIGIpIFwKKyAgICAoKCgoYSktPmF0dHIgXiAoYiktPmF0dHIpICYgfigoYSktPmF0dHIpICYgU1AtPl94bWNfdHJpZ2dlcnMpICE9IDApCisjZGVmaW5lIHhtY190dXJuX29uKGEsYikgY2hlY2tfeG1jX3RyYW5zaXRpb24oJihhKSwgJihiKSkKKyNlbHNlCisjZGVmaW5lIHhtY190dXJuX29uKGEsYikgKCgoKGEpXihiKSkgJiB+KGEpICYgU1AtPl94bWNfdHJpZ2dlcnMpICE9IDApCisjZW5kaWYKKworI2RlZmluZSB4bWNfbmV3KHIsYykgbmV3c2NyLT5fbGluZVtyXS50ZXh0W2NdCisjZGVmaW5lIHhtY190dXJuX29mZihhLGIpIHhtY190dXJuX29uKGIsYSkKKyNlbmRpZiAvKiBVU0VfWE1DX1NVUFBPUlQgKi8KKworLyoKKyoqCVRyYW5zZm9ybUxpbmUobGluZW5vKQorKioKKyoqCVRyYW5zZm9ybSB0aGUgZ2l2ZW4gbGluZSBpbiBjdXJzY3IgdG8gdGhlIG9uZSBpbiBuZXdzY3IsIHVzaW5nCisqKglJbnNlcnQvRGVsZXRlIENoYXJhY3RlciBpZiBfbmNfaWRjb2sgJiYgaGFzX2ljKCkuCisqKgorKioJCWZpcnN0Q2hhciA9IHBvc2l0aW9uIG9mIGZpcnN0IGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gbGluZQorKioJCW9MYXN0Q2hhciA9IHBvc2l0aW9uIG9mIGxhc3QgZGlmZmVyZW50IGNoYXJhY3RlciBpbiBvbGQgbGluZQorKioJCW5MYXN0Q2hhciA9IHBvc2l0aW9uIG9mIGxhc3QgZGlmZmVyZW50IGNoYXJhY3RlciBpbiBuZXcgbGluZQorKioKKyoqCQltb3ZlIHRvIGZpcnN0Q2hhcgorKioJCW92ZXJ3cml0ZSBjaGFycyB1cCB0byBtaW4ob0xhc3RDaGFyLCBuTGFzdENoYXIpCisqKgkJaWYgb0xhc3RDaGFyIDwgbkxhc3RDaGFyCisqKgkJCWluc2VydCBuZXdMaW5lW29MYXN0Q2hhcisxLi5uTGFzdENoYXJdCisqKgkJZWxzZQorKioJCQlkZWxldGUgb0xhc3RDaGFyIC0gbkxhc3RDaGFyIHNwYWNlcworKi8KKworc3RhdGljIHZvaWQKK1RyYW5zZm9ybUxpbmUoaW50IGNvbnN0IGxpbmVubykKK3sKKyAgICBpbnQgZmlyc3RDaGFyLCBvTGFzdENoYXIsIG5MYXN0Q2hhcjsKKyAgICBOQ1VSU0VTX0NIX1QgKm5ld0xpbmUgPSBuZXdzY3ItPl9saW5lW2xpbmVub10udGV4dDsKKyAgICBOQ1VSU0VTX0NIX1QgKm9sZExpbmUgPSBjdXJzY3ItPl9saW5lW2xpbmVub10udGV4dDsKKyAgICBpbnQgbjsKKyAgICBib29sIGF0dHJjaGFuZ2VkID0gRkFMU0U7CisKKyAgICBUUihUUkFDRV9VUERBVEUsIChUX0NBTExFRCgiVHJhbnNmb3JtTGluZSglZCkiKSwgbGluZW5vKSk7CisKKyAgICAvKiBjb3B5IG5ldyBoYXNoIHZhbHVlIHRvIG9sZCBvbmUgKi8KKyAgICBpZiAoU1AtPm9sZGhhc2ggJiYgU1AtPm5ld2hhc2gpCisJU1AtPm9sZGhhc2hbbGluZW5vXSA9IFNQLT5uZXdoYXNoW2xpbmVub107CisKKyAgICAvKgorICAgICAqIElmIHdlIGhhdmUgY29sb3JzLCB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgaGF2aW5nIHR3byBjb2xvciBwYWlycworICAgICAqIHRoYXQgZGlzcGxheSBhcyB0aGUgc2FtZSBjb2xvcnMuICBGb3IgaW5zdGFuY2UsIEx5bnggZG9lcyB0aGlzLiAgQ2hlY2sKKyAgICAgKiBmb3IgdGhpcyBjYXNlLCBhbmQgdXBkYXRlIHRoZSBvbGQgbGluZSB3aXRoIHRoZSBuZXcgbGluZSdzIGNvbG9ycyB3aGVuCisgICAgICogdGhleSBhcmUgZXF1aXZhbGVudC4KKyAgICAgKi8KKyAgICBpZiAoU1AtPl9jb2xvcm9uKSB7CisJaW50IG9sZFBhaXI7CisJaW50IG5ld1BhaXI7CisKKwlmb3IgKG4gPSAwOyBuIDwgc2NyZWVuX2NvbHVtbnM7IG4rKykgeworCSAgICBpZiAoIUNoYXJFcShuZXdMaW5lW25dLCBvbGRMaW5lW25dKSkgeworCQlvbGRQYWlyID0gR2V0UGFpcihvbGRMaW5lW25dKTsKKwkJbmV3UGFpciA9IEdldFBhaXIobmV3TGluZVtuXSk7CisJCWlmIChvbGRQYWlyICE9IG5ld1BhaXIKKwkJICAgICYmIHVuQ29sb3Iob2xkTGluZVtuXSkgPT0gdW5Db2xvcihuZXdMaW5lW25dKSkgeworCQkgICAgaWYgKG9sZFBhaXIgPCBDT0xPUl9QQUlSUworCQkJJiYgbmV3UGFpciA8IENPTE9SX1BBSVJTCisJCQkmJiBTUC0+X2NvbG9yX3BhaXJzW29sZFBhaXJdID09IFNQLT5fY29sb3JfcGFpcnNbbmV3UGFpcl0pIHsKKwkJCVNldFBhaXIob2xkTGluZVtuXSwgR2V0UGFpcihuZXdMaW5lW25dKSk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBpZiAoY2VvbF9zdGFuZG91dF9nbGl0Y2ggJiYgY2xyX2VvbCkgeworCWZpcnN0Q2hhciA9IDA7CisJd2hpbGUgKGZpcnN0Q2hhciA8IHNjcmVlbl9jb2x1bW5zKSB7CisJICAgIGlmICghU2FtZUF0dHJPZihuZXdMaW5lW2ZpcnN0Q2hhcl0sIG9sZExpbmVbZmlyc3RDaGFyXSkpIHsKKwkJYXR0cmNoYW5nZWQgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCSAgICBmaXJzdENoYXIrKzsKKwl9CisgICAgfQorCisgICAgZmlyc3RDaGFyID0gMDsKKworICAgIGlmIChhdHRyY2hhbmdlZCkgewkJLyogd2UgbWF5IGhhdmUgdG8gZGlzcmVnYXJkIHRoZSB3aG9sZSBsaW5lICovCisJR29UbyhsaW5lbm8sIGZpcnN0Q2hhcik7CisJQ2xyVG9FT0woQ2xyQmxhbmsoY3Vyc2NyKSwgRkFMU0UpOworCVB1dFJhbmdlKG9sZExpbmUsIG5ld0xpbmUsIGxpbmVubywgMCwgKHNjcmVlbl9jb2x1bW5zIC0gMSkpOworI2lmIFVTRV9YTUNfU1VQUE9SVAorCisJLyoKKwkgKiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgbG9vcCB0byBwYWludCBjaGFyYWN0ZXJzIHdoaWNoIG1heSBoYXZlIHRoZQorCSAqIG1hZ2ljIGNvb2tpZSBnbGl0Y2ggZW1iZWRkZWQuICBJdCBkb2Vzbid0IGtub3cgbXVjaCBhYm91dCB2aWRlbworCSAqIGF0dHJpYnV0ZXMgd2hpY2ggYXJlIGNvbnRpbnVlZCBmcm9tIG9uZSBsaW5lIHRvIHRoZSBuZXh0LiAgSXQKKwkgKiBhc3N1bWVzIHRoYXQgd2UgaGF2ZSBmaWx0ZXJlZCBvdXQgcmVxdWVzdHMgZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzCisJICogdGhhdCBkbyBub3QgZ2V0IG1hcHBlZCB0byBibGFuayBwb3NpdGlvbnMuCisJICoKKwkgKiBGSVhNRTogd2UgYXJlIG5vdCBrZWVwaW5nIHRyYWNrIG9mIHdoZXJlIHdlIHB1dCB0aGUgY29va2llcywgc28gdGhpcworCSAqIHdpbGwgd29yayBwcm9wZXJseSBvbmx5IG9uY2UsIHNpbmNlIHdlIG1heSBvdmVyd3JpdGUgYSBjb29raWUgaW4gYQorCSAqIGZvbGxvd2luZyBvcGVyYXRpb24uCisJICovCisgICAgfSBlbHNlIGlmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCkgeworCUdvVG8obGluZW5vLCBmaXJzdENoYXIpOworCWZvciAobiA9IDA7IG4gPCBzY3JlZW5fY29sdW1uczsgbisrKSB7CisJICAgIGludCBtID0gbiArIG1hZ2ljX2Nvb2tpZV9nbGl0Y2g7CisKKwkgICAgLyogY2hlY2sgZm9yIHR1cm4tb246CisJICAgICAqIElmIHdlIGFyZSB3cml0aW5nIGFuIGF0dHJpYnV0ZWQgYmxhbmssIHdoZXJlIHRoZQorCSAgICAgKiBwcmV2aW91cyBjZWxsIGlzIG5vdCBhdHRyaWJ1dGVkLgorCSAgICAgKi8KKwkgICAgaWYgKElTQkxBTksobmV3TGluZVtuXSkKKwkJJiYgKChuID4gMAorCQkgICAgICYmIHhtY190dXJuX29uKG5ld0xpbmVbbiAtIDFdLCBuZXdMaW5lW25dKSkKKwkJICAgIHx8IChuID09IDAKKwkJCSYmIGxpbmVubyA+IDAKKwkJCSYmIHhtY190dXJuX29uKHhtY19uZXcobGluZW5vIC0gMSwgc2NyZWVuX2NvbHVtbnMgLSAxKSwKKwkJCQkgICAgICAgbmV3TGluZVtuXSkpKSkgeworCQluID0gbTsKKwkgICAgfQorCisJICAgIFB1dENoYXIoQ0hSRUYobmV3TGluZVtuXSkpOworCisJICAgIC8qIGNoZWNrIGZvciB0dXJuLW9mZjoKKwkgICAgICogSWYgd2UgYXJlIHdyaXRpbmcgYW4gYXR0cmlidXRlZCBub24tYmxhbmssIHdoZXJlIHRoZQorCSAgICAgKiBuZXh0IGNlbGwgaXMgYmxhbmssIGFuZCBub3QgYXR0cmlidXRlZC4KKwkgICAgICovCisJICAgIGlmICghSVNCTEFOSyhuZXdMaW5lW25dKQorCQkmJiAoKG4gKyAxIDwgc2NyZWVuX2NvbHVtbnMKKwkJICAgICAmJiB4bWNfdHVybl9vZmYobmV3TGluZVtuXSwgbmV3TGluZVtuICsgMV0pKQorCQkgICAgfHwgKG4gKyAxID49IHNjcmVlbl9jb2x1bW5zCisJCQkmJiBsaW5lbm8gKyAxIDwgc2NyZWVuX2xpbmVzCisJCQkmJiB4bWNfdHVybl9vZmYobmV3TGluZVtuXSwgeG1jX25ldyhsaW5lbm8gKyAxLCAwKSkpKSkgeworCQluID0gbTsKKwkgICAgfQorCisJfQorI2VuZGlmCisgICAgfSBlbHNlIHsKKwlOQ1VSU0VTX0NIX1QgYmxhbms7CisKKwkvKiBpdCBtYXkgYmUgY2hlYXAgdG8gY2xlYXIgbGVhZGluZyB3aGl0ZXNwYWNlIHdpdGggY2xyX2JvbCAqLworCWJsYW5rID0gbmV3TGluZVswXTsKKwlpZiAoY2xyX2JvbCAmJiBjYW5fY2xlYXJfd2l0aChDSFJFRihibGFuaykpKSB7CisJICAgIGludCBvRmlyc3RDaGFyLCBuRmlyc3RDaGFyOworCisJICAgIGZvciAob0ZpcnN0Q2hhciA9IDA7IG9GaXJzdENoYXIgPCBzY3JlZW5fY29sdW1uczsgb0ZpcnN0Q2hhcisrKQorCQlpZiAoIUNoYXJFcShvbGRMaW5lW29GaXJzdENoYXJdLCBibGFuaykpCisJCSAgICBicmVhazsKKwkgICAgZm9yIChuRmlyc3RDaGFyID0gMDsgbkZpcnN0Q2hhciA8IHNjcmVlbl9jb2x1bW5zOyBuRmlyc3RDaGFyKyspCisJCWlmICghQ2hhckVxKG5ld0xpbmVbbkZpcnN0Q2hhcl0sIGJsYW5rKSkKKwkJICAgIGJyZWFrOworCisJICAgIGlmIChuRmlyc3RDaGFyID09IG9GaXJzdENoYXIpIHsKKwkJZmlyc3RDaGFyID0gbkZpcnN0Q2hhcjsKKwkJLyogZmluZCB0aGUgZmlyc3QgZGlmZmVyaW5nIGNoYXJhY3RlciAqLworCQl3aGlsZSAoZmlyc3RDaGFyIDwgc2NyZWVuX2NvbHVtbnMKKwkJICAgICAgICYmIENoYXJFcShuZXdMaW5lW2ZpcnN0Q2hhcl0sIG9sZExpbmVbZmlyc3RDaGFyXSkpCisJCSAgICBmaXJzdENoYXIrKzsKKwkgICAgfSBlbHNlIGlmIChvRmlyc3RDaGFyID4gbkZpcnN0Q2hhcikgeworCQlmaXJzdENoYXIgPSBuRmlyc3RDaGFyOworCSAgICB9IGVsc2UgewkJLyogb0ZpcnN0Q2hhciA8IG5GaXJzdENoYXIgKi8KKwkJZmlyc3RDaGFyID0gb0ZpcnN0Q2hhcjsKKwkJaWYgKFNQLT5fZWwxX2Nvc3QgPCBuRmlyc3RDaGFyIC0gb0ZpcnN0Q2hhcikgeworCQkgICAgaWYgKG5GaXJzdENoYXIgPj0gc2NyZWVuX2NvbHVtbnMKKwkJCSYmIFNQLT5fZWxfY29zdCA8PSBTUC0+X2VsMV9jb3N0KSB7CisJCQlHb1RvKGxpbmVubywgMCk7CisJCQlVcGRhdGVBdHRycyhibGFuayk7CisJCQlUUFVUU19UUkFDRSgiY2xyX2VvbCIpOworCQkJcHV0cChjbHJfZW9sKTsKKwkJICAgIH0gZWxzZSB7CisJCQlHb1RvKGxpbmVubywgbkZpcnN0Q2hhciAtIDEpOworCQkJVXBkYXRlQXR0cnMoYmxhbmspOworCQkJVFBVVFNfVFJBQ0UoImNscl9ib2wiKTsKKwkJCXB1dHAoY2xyX2JvbCk7CisJCSAgICB9CisKKwkJICAgIHdoaWxlIChmaXJzdENoYXIgPCBuRmlyc3RDaGFyKQorCQkJb2xkTGluZVtmaXJzdENoYXIrK10gPSBibGFuazsKKwkJfQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgLyogZmluZCB0aGUgZmlyc3QgZGlmZmVyaW5nIGNoYXJhY3RlciAqLworCSAgICB3aGlsZSAoZmlyc3RDaGFyIDwgc2NyZWVuX2NvbHVtbnMKKwkJICAgJiYgQ2hhckVxKG5ld0xpbmVbZmlyc3RDaGFyXSwgb2xkTGluZVtmaXJzdENoYXJdKSkKKwkJZmlyc3RDaGFyKys7CisJfQorCS8qIGlmIHRoZXJlIHdhc24ndCBvbmUsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoZmlyc3RDaGFyID49IHNjcmVlbl9jb2x1bW5zKSB7CisJICAgIFRSKFRSQUNFX1VQREFURSwgKFRfUkVUVVJOKCIiKSkpOworCSAgICByZXR1cm47CisJfQorCisJYmxhbmsgPSBuZXdMaW5lW3NjcmVlbl9jb2x1bW5zIC0gMV07CisKKwlpZiAoIWNhbl9jbGVhcl93aXRoKENIUkVGKGJsYW5rKSkpIHsKKwkgICAgLyogZmluZCB0aGUgbGFzdCBkaWZmZXJpbmcgY2hhcmFjdGVyICovCisJICAgIG5MYXN0Q2hhciA9IHNjcmVlbl9jb2x1bW5zIC0gMTsKKworCSAgICB3aGlsZSAobkxhc3RDaGFyID4gZmlyc3RDaGFyCisJCSAgICYmIENoYXJFcShuZXdMaW5lW25MYXN0Q2hhcl0sIG9sZExpbmVbbkxhc3RDaGFyXSkpCisJCW5MYXN0Q2hhci0tOworCisJICAgIGlmIChuTGFzdENoYXIgPj0gZmlyc3RDaGFyKSB7CisJCUdvVG8obGluZW5vLCBmaXJzdENoYXIpOworCQlQdXRSYW5nZShvbGRMaW5lLCBuZXdMaW5lLCBsaW5lbm8sIGZpcnN0Q2hhciwgbkxhc3RDaGFyKTsKKwkJbWVtY3B5KG9sZExpbmUgKyBmaXJzdENoYXIsCisJCSAgICAgICBuZXdMaW5lICsgZmlyc3RDaGFyLAorCQkgICAgICAgKG5MYXN0Q2hhciAtIGZpcnN0Q2hhciArIDEpICogc2l6ZW9mKE5DVVJTRVNfQ0hfVCkpOworCSAgICB9CisJICAgIFRSKFRSQUNFX1VQREFURSwgKFRfUkVUVVJOKCIiKSkpOworCSAgICByZXR1cm47CisJfQorCisJLyogZmluZCBsYXN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gb2xkIGxpbmUgKi8KKwlvTGFzdENoYXIgPSBzY3JlZW5fY29sdW1ucyAtIDE7CisJd2hpbGUgKG9MYXN0Q2hhciA+IGZpcnN0Q2hhciAmJiBDaGFyRXEob2xkTGluZVtvTGFzdENoYXJdLCBibGFuaykpCisJICAgIG9MYXN0Q2hhci0tOworCisJLyogZmluZCBsYXN0IG5vbi1ibGFuayBjaGFyYWN0ZXIgb24gbmV3IGxpbmUgKi8KKwluTGFzdENoYXIgPSBzY3JlZW5fY29sdW1ucyAtIDE7CisJd2hpbGUgKG5MYXN0Q2hhciA+IGZpcnN0Q2hhciAmJiBDaGFyRXEobmV3TGluZVtuTGFzdENoYXJdLCBibGFuaykpCisJICAgIG5MYXN0Q2hhci0tOworCisJaWYgKChuTGFzdENoYXIgPT0gZmlyc3RDaGFyKQorCSAgICAmJiAoU1AtPl9lbF9jb3N0IDwgKG9MYXN0Q2hhciAtIG5MYXN0Q2hhcikpKSB7CisJICAgIEdvVG8obGluZW5vLCBmaXJzdENoYXIpOworCSAgICBpZiAoIUNoYXJFcShuZXdMaW5lW2ZpcnN0Q2hhcl0sIGJsYW5rKSkKKwkJUHV0Q2hhcihDSFJFRihuZXdMaW5lW2ZpcnN0Q2hhcl0pKTsKKwkgICAgQ2xyVG9FT0woYmxhbmssIEZBTFNFKTsKKwl9IGVsc2UgaWYgKChuTGFzdENoYXIgIT0gb0xhc3RDaGFyKQorCQkgICAmJiAoIUNoYXJFcShuZXdMaW5lW25MYXN0Q2hhcl0sIG9sZExpbmVbb0xhc3RDaGFyXSkKKwkJICAgICAgIHx8ICEoX25jX2lkY29rICYmIGhhc19pYygpKSkpIHsKKwkgICAgR29UbyhsaW5lbm8sIGZpcnN0Q2hhcik7CisJICAgIGlmICgob0xhc3RDaGFyIC0gbkxhc3RDaGFyKSA+IFNQLT5fZWxfY29zdCkgeworCQlpZiAoUHV0UmFuZ2Uob2xkTGluZSwgbmV3TGluZSwgbGluZW5vLCBmaXJzdENoYXIsIG5MYXN0Q2hhcikpCisJCSAgICBHb1RvKGxpbmVubywgbkxhc3RDaGFyICsgMSk7CisJCUNsclRvRU9MKGJsYW5rLCBGQUxTRSk7CisJICAgIH0gZWxzZSB7CisJCW4gPSBtYXgobkxhc3RDaGFyLCBvTGFzdENoYXIpOworCQlQdXRSYW5nZShvbGRMaW5lLCBuZXdMaW5lLCBsaW5lbm8sIGZpcnN0Q2hhciwgbik7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpbnQgbkxhc3ROb25ibGFuayA9IG5MYXN0Q2hhcjsKKwkgICAgaW50IG9MYXN0Tm9uYmxhbmsgPSBvTGFzdENoYXI7CisKKwkgICAgLyogZmluZCB0aGUgbGFzdCBjaGFyYWN0ZXJzIHRoYXQgcmVhbGx5IGRpZmZlciAqLworCSAgICAvKiBjYW4gYmUgLTEgaWYgbm8gY2hhcmFjdGVycyBkaWZmZXIgKi8KKwkgICAgd2hpbGUgKENoYXJFcShuZXdMaW5lW25MYXN0Q2hhcl0sIG9sZExpbmVbb0xhc3RDaGFyXSkpIHsKKwkJLyogZG9uJ3Qgc3BsaXQgYSB3aWRlIGNoYXIgKi8KKwkJaWYgKGlzV2lkZWNFeHQobmV3TGluZVtuTGFzdENoYXJdKSAmJgorCQkgICAgIUNoYXJFcShuZXdMaW5lW25MYXN0Q2hhciAtIDFdLCBvbGRMaW5lW29MYXN0Q2hhciAtIDFdKSkKKwkJICAgIGJyZWFrOworCQluTGFzdENoYXItLTsKKwkJb0xhc3RDaGFyLS07CisJCWlmIChuTGFzdENoYXIgPT0gLTEgfHwgb0xhc3RDaGFyID09IC0xKQorCQkgICAgYnJlYWs7CisJICAgIH0KKworCSAgICBuID0gbWluKG9MYXN0Q2hhciwgbkxhc3RDaGFyKTsKKwkgICAgaWYgKG4gPj0gZmlyc3RDaGFyKSB7CisJCUdvVG8obGluZW5vLCBmaXJzdENoYXIpOworCQlQdXRSYW5nZShvbGRMaW5lLCBuZXdMaW5lLCBsaW5lbm8sIGZpcnN0Q2hhciwgbik7CisJICAgIH0KKworCSAgICBpZiAob0xhc3RDaGFyIDwgbkxhc3RDaGFyKSB7CisJCWludCBtID0gbWF4KG5MYXN0Tm9uYmxhbmssIG9MYXN0Tm9uYmxhbmspOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJCXdoaWxlIChpc1dpZGVjRXh0KG5ld0xpbmVbbiArIDFdKSAmJiBuKSB7CisJCSAgICAtLW47CisJCSAgICAtLW9MYXN0Q2hhcjsKKwkJfQorI2VuZGlmCisJCUdvVG8obGluZW5vLCBuICsgMSk7CisJCWlmICgobkxhc3RDaGFyIDwgbkxhc3ROb25ibGFuaykKKwkJICAgIHx8IEluc0NoYXJDb3N0KG5MYXN0Q2hhciAtIG9MYXN0Q2hhcikgPiAobSAtIG4pKSB7CisJCSAgICBQdXRSYW5nZShvbGRMaW5lLCBuZXdMaW5lLCBsaW5lbm8sIG4gKyAxLCBtKTsKKwkJfSBlbHNlIHsKKwkJICAgIEluc1N0cigmbmV3TGluZVtuICsgMV0sIG5MYXN0Q2hhciAtIG9MYXN0Q2hhcik7CisJCX0KKwkgICAgfSBlbHNlIGlmIChvTGFzdENoYXIgPiBuTGFzdENoYXIpIHsKKwkJR29UbyhsaW5lbm8sIG4gKyAxKTsKKwkJaWYgKERlbENoYXJDb3N0KG9MYXN0Q2hhciAtIG5MYXN0Q2hhcikKKwkJICAgID4gU1AtPl9lbF9jb3N0ICsgbkxhc3ROb25ibGFuayAtIChuICsgMSkpIHsKKwkJICAgIGlmIChQdXRSYW5nZShvbGRMaW5lLCBuZXdMaW5lLCBsaW5lbm8sCisJCQkJIG4gKyAxLCBuTGFzdE5vbmJsYW5rKSkKKwkJCUdvVG8obGluZW5vLCBuTGFzdE5vbmJsYW5rICsgMSk7CisJCSAgICBDbHJUb0VPTChibGFuaywgRkFMU0UpOworCQl9IGVsc2UgeworCQkgICAgLyoKKwkJICAgICAqIFRoZSBkZWxldGUtY2hhciBzZXF1ZW5jZSB3aWxsCisJCSAgICAgKiBlZmZlY3RpdmVseSBzaGlmdCBpbiBibGFua3MgZnJvbSB0aGUKKwkJICAgICAqIHJpZ2h0IG1hcmdpbiBvZiB0aGUgc2NyZWVuLiAgRW5zdXJlCisJCSAgICAgKiB0aGF0IHRoZXkgYXJlIHRoZSByaWdodCBjb2xvciBieQorCQkgICAgICogc2V0dGluZyB0aGUgdmlkZW8gYXR0cmlidXRlcyBmcm9tCisJCSAgICAgKiB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gdGhlIHJvdy4KKwkJICAgICAqLworCQkgICAgVXBkYXRlQXR0cnMoYmxhbmspOworCQkgICAgRGVsQ2hhcihvTGFzdENoYXIgLSBuTGFzdENoYXIpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogdXBkYXRlIHRoZSBjb2RlJ3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKi8KKyAgICBpZiAoc2NyZWVuX2NvbHVtbnMgPiBmaXJzdENoYXIpCisJbWVtY3B5KG9sZExpbmUgKyBmaXJzdENoYXIsCisJICAgICAgIG5ld0xpbmUgKyBmaXJzdENoYXIsCisJICAgICAgIChzY3JlZW5fY29sdW1ucyAtIGZpcnN0Q2hhcikgKiBzaXplb2YoTkNVUlNFU19DSF9UKSk7CisgICAgVFIoVFJBQ0VfVVBEQVRFLCAoVF9SRVRVUk4oIiIpKSk7CisgICAgcmV0dXJuOworfQorCisvKgorKioJQ2xlYXJTY3JlZW4oYmxhbmspCisqKgorKioJQ2xlYXIgdGhlIHBoeXNpY2FsIHNjcmVlbiBhbmQgcHV0IGN1cnNvciBhdCBob21lCisqKgorKi8KKworc3RhdGljIHZvaWQKK0NsZWFyU2NyZWVuKE5DVVJTRVNfQ0hfVCBibGFuaykKK3sKKyAgICBpbnQgaSwgajsKKyAgICBib29sIGZhc3RfY2xlYXIgPSAoY2xlYXJfc2NyZWVuIHx8IGNscl9lb3MgfHwgY2xyX2VvbCk7CisKKyAgICBUUihUUkFDRV9VUERBVEUsICgiQ2xlYXJTY3JlZW4oKSBjYWxsZWQiKSk7CisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICAgIGlmIChTUC0+X2NvbG9yb24KKwkmJiAhU1AtPl9kZWZhdWx0X2NvbG9yKSB7CisJX25jX2RvX2NvbG9yKEdFVF9TQ1JFRU5fUEFJUihTUCksIDAsIEZBTFNFLCBfbmNfb3V0Y2gpOworCWlmICghYmFja19jb2xvcl9lcmFzZSkgeworCSAgICBmYXN0X2NsZWFyID0gRkFMU0U7CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGZhc3RfY2xlYXIpIHsKKwlpZiAoY2xlYXJfc2NyZWVuKSB7CisJICAgIFVwZGF0ZUF0dHJzKGJsYW5rKTsKKwkgICAgVFBVVFNfVFJBQ0UoImNsZWFyX3NjcmVlbiIpOworCSAgICBwdXRwKGNsZWFyX3NjcmVlbik7CisJICAgIFNQLT5fY3Vyc3JvdyA9IFNQLT5fY3Vyc2NvbCA9IDA7CisJICAgIHBvc2l0aW9uX2NoZWNrKFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sLCAiQ2xlYXJTY3JlZW4iKTsKKwl9IGVsc2UgaWYgKGNscl9lb3MpIHsKKwkgICAgU1AtPl9jdXJzcm93ID0gU1AtPl9jdXJzY29sID0gLTE7CisJICAgIEdvVG8oMCwgMCk7CisKKwkgICAgVXBkYXRlQXR0cnMoYmxhbmspOworCSAgICBUUFVUU19UUkFDRSgiY2xyX2VvcyIpOworCSAgICB0cHV0cyhjbHJfZW9zLCBzY3JlZW5fbGluZXMsIF9uY19vdXRjaCk7CisJfSBlbHNlIGlmIChjbHJfZW9sKSB7CisJICAgIFNQLT5fY3Vyc3JvdyA9IFNQLT5fY3Vyc2NvbCA9IC0xOworCisJICAgIFVwZGF0ZUF0dHJzKGJsYW5rKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJCUdvVG8oaSwgMCk7CisJCVRQVVRTX1RSQUNFKCJjbHJfZW9sIik7CisJCXB1dHAoY2xyX2VvbCk7CisJICAgIH0KKwkgICAgR29UbygwLCAwKTsKKwl9CisgICAgfSBlbHNlIHsKKwlVcGRhdGVBdHRycyhibGFuayk7CisJZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJICAgIEdvVG8oaSwgMCk7CisJICAgIGZvciAoaiA9IDA7IGogPCBzY3JlZW5fY29sdW1uczsgaisrKQorCQlQdXRDaGFyKENIUkVGKGJsYW5rKSk7CisJfQorCUdvVG8oMCwgMCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHNjcmVlbl9saW5lczsgaSsrKSB7CisJZm9yIChqID0gMDsgaiA8IHNjcmVlbl9jb2x1bW5zOyBqKyspCisJICAgIGN1cnNjci0+X2xpbmVbaV0udGV4dFtqXSA9IGJsYW5rOworICAgIH0KKworICAgIFRSKFRSQUNFX1VQREFURSwgKCJzY3JlZW4gY2xlYXJlZCIpKTsKK30KKworLyoKKyoqCUluc1N0cihsaW5lLCBjb3VudCkKKyoqCisqKglJbnNlcnQgdGhlIGNvdW50IGNoYXJhY3RlcnMgcG9pbnRlZCB0byBieSBsaW5lLgorKioKKyovCisKK3N0YXRpYyB2b2lkCitJbnNTdHIoTkNVUlNFU19DSF9UICogbGluZSwgaW50IGNvdW50KQoreworICAgIFRSKFRSQUNFX1VQREFURSwgKCJJbnNTdHIoJXAsJWQpIGNhbGxlZCIsIGxpbmUsIGNvdW50KSk7CisKKyAgICAvKiBQcmVmZXIgcGFybV9pY2ggYXMgaXQgaGFzIHRoZSBzbWFsbGVzdCBjb3N0IC0gbm8gbmVlZCB0byBzaGlmdAorICAgICAqIHRoZSB3aG9sZSBsaW5lIG9uIGVhY2ggY2hhcmFjdGVyLiAqLworICAgIC8qIFRoZSBvcmRlciBtdXN0IG1hdGNoIHRoYXQgb2YgSW5zQ2hhckNvc3QuICovCisgICAgaWYgKHBhcm1faWNoKSB7CisJVFBVVFNfVFJBQ0UoInBhcm1faWNoIik7CisJdHB1dHMoVFBBUk1fMShwYXJtX2ljaCwgY291bnQpLCBjb3VudCwgX25jX291dGNoKTsKKwl3aGlsZSAoY291bnQpIHsKKwkgICAgUHV0QXR0ckNoYXIoQ0hSRUYoKmxpbmUpKTsKKwkgICAgbGluZSsrOworCSAgICBjb3VudC0tOworCX0KKyAgICB9IGVsc2UgaWYgKGVudGVyX2luc2VydF9tb2RlICYmIGV4aXRfaW5zZXJ0X21vZGUpIHsKKwlUUFVUU19UUkFDRSgiZW50ZXJfaW5zZXJ0X21vZGUiKTsKKwlwdXRwKGVudGVyX2luc2VydF9tb2RlKTsKKwl3aGlsZSAoY291bnQpIHsKKwkgICAgUHV0QXR0ckNoYXIoQ0hSRUYoKmxpbmUpKTsKKwkgICAgaWYgKGluc2VydF9wYWRkaW5nKSB7CisJCVRQVVRTX1RSQUNFKCJpbnNlcnRfcGFkZGluZyIpOworCQlwdXRwKGluc2VydF9wYWRkaW5nKTsKKwkgICAgfQorCSAgICBsaW5lKys7CisJICAgIGNvdW50LS07CisJfQorCVRQVVRTX1RSQUNFKCJleGl0X2luc2VydF9tb2RlIik7CisJcHV0cChleGl0X2luc2VydF9tb2RlKTsKKyAgICB9IGVsc2UgeworCXdoaWxlIChjb3VudCkgeworCSAgICBUUFVUU19UUkFDRSgiaW5zZXJ0X2NoYXJhY3RlciIpOworCSAgICBwdXRwKGluc2VydF9jaGFyYWN0ZXIpOworCSAgICBQdXRBdHRyQ2hhcihDSFJFRigqbGluZSkpOworCSAgICBpZiAoaW5zZXJ0X3BhZGRpbmcpIHsKKwkJVFBVVFNfVFJBQ0UoImluc2VydF9wYWRkaW5nIik7CisJCXB1dHAoaW5zZXJ0X3BhZGRpbmcpOworCSAgICB9CisJICAgIGxpbmUrKzsKKwkgICAgY291bnQtLTsKKwl9CisgICAgfQorICAgIHBvc2l0aW9uX2NoZWNrKFNQLT5fY3Vyc3JvdywgU1AtPl9jdXJzY29sLCAiSW5zU3RyIik7Cit9CisKKy8qCisqKglEZWxDaGFyKGNvdW50KQorKioKKyoqCURlbGV0ZSBjb3VudCBjaGFyYWN0ZXJzIGF0IGN1cnJlbnQgcG9zaXRpb24KKyoqCisqLworCitzdGF0aWMgdm9pZAorRGVsQ2hhcihpbnQgY291bnQpCit7CisgICAgaW50IG47CisKKyAgICBUUihUUkFDRV9VUERBVEUsICgiRGVsQ2hhciglZCkgY2FsbGVkLCBwb3NpdGlvbiA9ICglbGQsJWxkKSIsCisJCSAgICAgIGNvdW50LAorCQkgICAgICAobG9uZykgbmV3c2NyLT5fY3VyeSwKKwkJICAgICAgKGxvbmcpIG5ld3Njci0+X2N1cngpKTsKKworICAgIGlmIChwYXJtX2RjaCkgeworCVRQVVRTX1RSQUNFKCJwYXJtX2RjaCIpOworCXRwdXRzKFRQQVJNXzEocGFybV9kY2gsIGNvdW50KSwgY291bnQsIF9uY19vdXRjaCk7CisgICAgfSBlbHNlIHsKKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCSAgICBUUFVUU19UUkFDRSgiZGVsZXRlX2NoYXJhY3RlciIpOworCSAgICBwdXRwKGRlbGV0ZV9jaGFyYWN0ZXIpOworCX0KKyAgICB9Cit9CisKKy8qCisgKiBQaHlzaWNhbC1zY3JvbGxpbmcgc3VwcG9ydAorICoKKyAqIFRoaXMgY29kZSB3YXMgYWRhcHRlZCBmcm9tIEtlaXRoIEJvc3RpYydzIGhhcmR3YXJlIHNjcm9sbGluZworICogc3VwcG9ydCBmb3IgNC40QlNEIGN1cnNlcy4gIEkgKGVzcikgdHJhbnNsYXRlZCBpdCB0byB1c2UgdGVybWluZm8KKyAqIGNhcGFiaWxpdGllcywgbmFycm93ZWQgdGhlIGNhbGwgaW50ZXJmYWNlIHNsaWdodGx5LCBhbmQgY2xlYW5lZAorICogdXAgc29tZSBjb252b2x1dGVkIHRlc3RzLiAgSSBhbHNvIGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBtZW1vcnlfYWJvdmUKKyAqIG1lbW9yeV9iZWxvdywgYW5kIG5vbl9kZXN0X3Njcm9sbF9yZWdpb24gY2FwYWJpbGl0aWVzLgorICoKKyAqIEZvciB0aGlzIGNvZGUgdG8gd29yaywgd2UgbXVzdCBoYXZlIGVpdGhlcgorICogY2hhbmdlX3Njcm9sbF9yZWdpb24gYW5kIHNjcm9sbCBmb3J3YXJkL3JldmVyc2UgY29tbWFuZHMsIG9yCisgKiBpbnNlcnQgYW5kIGRlbGV0ZSBsaW5lIGNhcGFiaWxpdGllcy4KKyAqIFdoZW4gdGhlIHNjcm9sbGluZyByZWdpb24gaGFzIGJlZW4gc2V0LCB0aGUgY3Vyc29yIGhhcyB0bworICogYmUgYXQgdGhlIGxhc3QgbGluZSBvZiB0aGUgcmVnaW9uIHRvIG1ha2UgdGhlIHNjcm9sbCB1cAorICogaGFwcGVuLCBvciBvbiB0aGUgZmlyc3QgbGluZSBvZiByZWdpb24gdG8gc2Nyb2xsIGRvd24uCisgKgorICogVGhpcyBjb2RlIG1ha2VzIG9uZSBhZXN0aGV0aWMgZGVjaXNpb24gaW4gdGhlIG9wcG9zaXRlIHdheSBmcm9tCisgKiBCU0QgY3Vyc2VzLiAgQlNEIGN1cnNlcyBwcmVmZXJyZWQgcGFpcnMgb2YgaWwvZGwgb3BlcmF0aW9ucworICogb3ZlciBzY3JvbGxzLCBhbGxlZ2VkbHkgYmVjYXVzZSBpbC9kbCBsb29rZWQgZmFzdGVyLiAgV2UsIG9uCisgKiB0aGUgb3RoZXIgaGFuZCwgcHJlZmVyIHNjcm9sbHMgYmVjYXVzZSAoYSkgdGhleSdyZSBqdXN0IGFzIGZhc3QKKyAqIG9uIG1hbnkgdGVybWluYWxzIGFuZCAoYikgdXNpbmcgdGhlbSBhdm9pZHMgYm91bmNpbmcgYW4KKyAqIHVuY2hhbmdlZCBib3R0b20gc2VjdGlvbiBvZiB0aGUgc2NyZWVuIHVwIGFuZCBkb3duLCB3aGljaCBpcworICogdmlzdWFsbHkgbmFzdHkuCisgKgorICogKGxhdik6IGFkZGVkIG1vcmUgY2FzZXMsIHVzZWQgZGwvaWwgd2hlbiBib3Q9PW1heHkgYW5kIGluIGNzciBjYXNlLgorICoKKyAqIEkgdXNlZCBhc3N1bXB0aW9uIHRoYXQgY2FwYWJpbGl0aWVzIGlsL2lsMS9kbC9kbDEgd29yayBpbnNpZGUKKyAqIGNoYW5nZWQgc2Nyb2xsIHJlZ2lvbiBub3Qgc2hpZnRpbmcgc2NyZWVuIGNvbnRlbnRzIG91dHNpZGUgb2YgaXQuCisgKiBJZiB0aGVyZSBhcmUgYW55IHRlcm1pbmFscyBiZWhhdmluZyBkaWZmZXJlbnQgd2F5LCBpdCB3b3VsZCBiZQorICogbmVjZXNzYXJ5IHRvIGFkZCBzb21lIGNvbmRpdGlvbnMgdG8gc2Nyb2xsX2Nzcl9mb3J3YXJkL2JhY2t3YXJkLgorICovCisKKy8qIFRyeSB0byBzY3JvbGwgdXAgYXNzdW1pbmcgZ2l2ZW4gY3NyIChtaW55LCBtYXh5KS4gUmV0dXJucyBFUlIgb24gZmFpbHVyZSAqLworc3RhdGljIGludAorc2Nyb2xsX2Nzcl9mb3J3YXJkKGludCBuLCBpbnQgdG9wLCBpbnQgYm90LCBpbnQgbWlueSwgaW50IG1heHksIE5DVVJTRVNfQ0hfVCBibGFuaykKK3sKKyAgICBpbnQgaTsKKworICAgIGlmIChuID09IDEgJiYgc2Nyb2xsX2ZvcndhcmQgJiYgdG9wID09IG1pbnkgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKGJvdCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJzY3JvbGxfZm9yd2FyZCIpOworCXB1dHAoc2Nyb2xsX2ZvcndhcmQpOworICAgIH0gZWxzZSBpZiAobiA9PSAxICYmIGRlbGV0ZV9saW5lICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyh0b3AsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlUUFVUU19UUkFDRSgiZGVsZXRlX2xpbmUiKTsKKwlwdXRwKGRlbGV0ZV9saW5lKTsKKyAgICB9IGVsc2UgaWYgKHBhcm1faW5kZXggJiYgdG9wID09IG1pbnkgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKGJvdCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJwYXJtX2luZGV4Iik7CisJdHB1dHMoVFBBUk1fMihwYXJtX2luZGV4LCBuLCAwKSwgbiwgX25jX291dGNoKTsKKyAgICB9IGVsc2UgaWYgKHBhcm1fZGVsZXRlX2xpbmUgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKHRvcCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJwYXJtX2RlbGV0ZV9saW5lIik7CisJdHB1dHMoVFBBUk1fMihwYXJtX2RlbGV0ZV9saW5lLCBuLCAwKSwgbiwgX25jX291dGNoKTsKKyAgICB9IGVsc2UgaWYgKHNjcm9sbF9mb3J3YXJkICYmIHRvcCA9PSBtaW55ICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyhib3QsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIFRQVVRTX1RSQUNFKCJzY3JvbGxfZm9yd2FyZCIpOworCSAgICBwdXRwKHNjcm9sbF9mb3J3YXJkKTsKKwl9CisgICAgfSBlbHNlIGlmIChkZWxldGVfbGluZSAmJiBib3QgPT0gbWF4eSkgeworCUdvVG8odG9wLCAwKTsKKwlVcGRhdGVBdHRycyhibGFuayk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICBUUFVUU19UUkFDRSgiZGVsZXRlX2xpbmUiKTsKKwkgICAgcHV0cChkZWxldGVfbGluZSk7CisJfQorICAgIH0gZWxzZQorCXJldHVybiBFUlI7CisKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICAgIGlmIChGSUxMX0JDRSgpKSB7CisJaW50IGo7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICBHb1RvKGJvdCAtIGksIDApOworCSAgICBmb3IgKGogPSAwOyBqIDwgc2NyZWVuX2NvbHVtbnM7IGorKykKKwkJUHV0Q2hhcihDSFJFRihibGFuaykpOworCX0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qIFRyeSB0byBzY3JvbGwgZG93biBhc3N1bWluZyBnaXZlbiBjc3IgKG1pbnksIG1heHkpLiBSZXR1cm5zIEVSUiBvbiBmYWlsdXJlICovCisvKiBuID4gMCAqLworc3RhdGljIGludAorc2Nyb2xsX2Nzcl9iYWNrd2FyZChpbnQgbiwgaW50IHRvcCwgaW50IGJvdCwgaW50IG1pbnksIGludCBtYXh5LAorCQkgICAgTkNVUlNFU19DSF9UIGJsYW5rKQoreworICAgIGludCBpOworCisgICAgaWYgKG4gPT0gMSAmJiBzY3JvbGxfcmV2ZXJzZSAmJiB0b3AgPT0gbWlueSAmJiBib3QgPT0gbWF4eSkgeworCUdvVG8odG9wLCAwKTsKKwlVcGRhdGVBdHRycyhibGFuayk7CisJVFBVVFNfVFJBQ0UoInNjcm9sbF9yZXZlcnNlIik7CisJcHV0cChzY3JvbGxfcmV2ZXJzZSk7CisgICAgfSBlbHNlIGlmIChuID09IDEgJiYgaW5zZXJ0X2xpbmUgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKHRvcCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJpbnNlcnRfbGluZSIpOworCXB1dHAoaW5zZXJ0X2xpbmUpOworICAgIH0gZWxzZSBpZiAocGFybV9yaW5kZXggJiYgdG9wID09IG1pbnkgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKHRvcCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCVRQVVRTX1RSQUNFKCJwYXJtX3JpbmRleCIpOworCXRwdXRzKFRQQVJNXzIocGFybV9yaW5kZXgsIG4sIDApLCBuLCBfbmNfb3V0Y2gpOworICAgIH0gZWxzZSBpZiAocGFybV9pbnNlcnRfbGluZSAmJiBib3QgPT0gbWF4eSkgeworCUdvVG8odG9wLCAwKTsKKwlVcGRhdGVBdHRycyhibGFuayk7CisJVFBVVFNfVFJBQ0UoInBhcm1faW5zZXJ0X2xpbmUiKTsKKwl0cHV0cyhUUEFSTV8yKHBhcm1faW5zZXJ0X2xpbmUsIG4sIDApLCBuLCBfbmNfb3V0Y2gpOworICAgIH0gZWxzZSBpZiAoc2Nyb2xsX3JldmVyc2UgJiYgdG9wID09IG1pbnkgJiYgYm90ID09IG1heHkpIHsKKwlHb1RvKHRvcCwgMCk7CisJVXBkYXRlQXR0cnMoYmxhbmspOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkgICAgVFBVVFNfVFJBQ0UoInNjcm9sbF9yZXZlcnNlIik7CisJICAgIHB1dHAoc2Nyb2xsX3JldmVyc2UpOworCX0KKyAgICB9IGVsc2UgaWYgKGluc2VydF9saW5lICYmIGJvdCA9PSBtYXh5KSB7CisJR29Ubyh0b3AsIDApOworCVVwZGF0ZUF0dHJzKGJsYW5rKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIFRQVVRTX1RSQUNFKCJpbnNlcnRfbGluZSIpOworCSAgICBwdXRwKGluc2VydF9saW5lKTsKKwl9CisgICAgfSBlbHNlCisJcmV0dXJuIEVSUjsKKworI2lmIE5DVVJTRVNfRVhUX0ZVTkNTCisgICAgaWYgKEZJTExfQkNFKCkpIHsKKwlpbnQgajsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIEdvVG8odG9wICsgaSwgMCk7CisJICAgIGZvciAoaiA9IDA7IGogPCBzY3JlZW5fY29sdW1uczsgaisrKQorCQlQdXRDaGFyKENIUkVGKGJsYW5rKSk7CisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBPSzsKK30KKworLyogc2Nyb2xsIGJ5IHVzaW5nIGRlbGV0ZV9saW5lIGF0IGRlbCBhbmQgaW5zZXJ0X2xpbmUgYXQgaW5zICovCisvKiBuID4gMCAqLworc3RhdGljIGludAorc2Nyb2xsX2lkbChpbnQgbiwgaW50IGRlbCwgaW50IGlucywgTkNVUlNFU19DSF9UIGJsYW5rKQoreworICAgIGludCBpOworCisgICAgaWYgKCEoKHBhcm1fZGVsZXRlX2xpbmUgfHwgZGVsZXRlX2xpbmUpICYmIChwYXJtX2luc2VydF9saW5lIHx8IGluc2VydF9saW5lKSkpCisJcmV0dXJuIEVSUjsKKworICAgIEdvVG8oZGVsLCAwKTsKKyAgICBVcGRhdGVBdHRycyhibGFuayk7CisgICAgaWYgKG4gPT0gMSAmJiBkZWxldGVfbGluZSkgeworCVRQVVRTX1RSQUNFKCJkZWxldGVfbGluZSIpOworCXB1dHAoZGVsZXRlX2xpbmUpOworICAgIH0gZWxzZSBpZiAocGFybV9kZWxldGVfbGluZSkgeworCVRQVVRTX1RSQUNFKCJwYXJtX2RlbGV0ZV9saW5lIik7CisJdHB1dHMoVFBBUk1fMihwYXJtX2RlbGV0ZV9saW5lLCBuLCAwKSwgbiwgX25jX291dGNoKTsKKyAgICB9IGVsc2UgewkJCS8qIGlmIChkZWxldGVfbGluZSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIFRQVVRTX1RSQUNFKCJkZWxldGVfbGluZSIpOworCSAgICBwdXRwKGRlbGV0ZV9saW5lKTsKKwl9CisgICAgfQorCisgICAgR29UbyhpbnMsIDApOworICAgIFVwZGF0ZUF0dHJzKGJsYW5rKTsKKyAgICBpZiAobiA9PSAxICYmIGluc2VydF9saW5lKSB7CisJVFBVVFNfVFJBQ0UoImluc2VydF9saW5lIik7CisJcHV0cChpbnNlcnRfbGluZSk7CisgICAgfSBlbHNlIGlmIChwYXJtX2luc2VydF9saW5lKSB7CisJVFBVVFNfVFJBQ0UoInBhcm1faW5zZXJ0X2xpbmUiKTsKKwl0cHV0cyhUUEFSTV8yKHBhcm1faW5zZXJ0X2xpbmUsIG4sIDApLCBuLCBfbmNfb3V0Y2gpOworICAgIH0gZWxzZSB7CQkJLyogaWYgKGluc2VydF9saW5lKSAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkgICAgVFBVVFNfVFJBQ0UoImluc2VydF9saW5lIik7CisJICAgIHB1dHAoaW5zZXJ0X2xpbmUpOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gT0s7Cit9CisKKy8qCisgKiBOb3RlOiAgc29tZSB0ZXJtaW5hbHMgcmVxdWlyZSB0aGUgY3Vyc29yIHRvIGJlIHdpdGhpbiB0aGUgc2Nyb2xsaW5nIG1hcmdpbnMKKyAqIGJlZm9yZSBzZXR0aW5nIHRoZW0uICBHZW5lcmFsbHksIHRoZSBjdXJzb3IgbXVzdCBiZSBhdCB0aGUgYXBwcm9wcmlhdGUgZW5kCisgKiBvZiB0aGUgc2Nyb2xsaW5nIG1hcmdpbnMgd2hlbiBpc3N1aW5nIGFuIGluZGV4aW5nIG9wZXJhdGlvbiAoaXQgaXMgbm90CisgKiBhcHBhcmVudCB3aGV0aGVyIGl0IG11c3QgYWxzbyBiZSBhdCB0aGUgbGVmdCBtYXJnaW47IHdlIGRvIHRoaXMganVzdCB0byBiZQorICogc2FmZSkuICBUbyBtYWtlIHRoZSByZWxhdGVkIGN1cnNvciBtb3ZlbWVudCBhIGxpdHRsZSBmYXN0ZXIsIHdlIHVzZSB0aGUKKyAqIHNhdmUvcmVzdG9yZSBjdXJzb3IgY2FwYWJpbGl0aWVzIGlmIHRoZSB0ZXJtaW5hbCBoYXMgdGhlbS4KKyAqLworTkNVUlNFU19FWFBPUlQoaW50KQorX25jX3Njcm9sbG4oaW50IG4sIGludCB0b3AsIGludCBib3QsIGludCBtYXh5KQorLyogc2Nyb2xsIHJlZ2lvbiBmcm9tIHRvcCB0byBib3QgYnkgbiBsaW5lcyAqLworeworICAgIE5DVVJTRVNfQ0hfVCBibGFuayA9IENsckJsYW5rKHN0ZHNjcik7CisgICAgaW50IGk7CisgICAgYm9vbCBjdXJzb3Jfc2F2ZWQgPSBGQUxTRTsKKyAgICBpbnQgcmVzOworCisgICAgVFIoVFJBQ0VfTU9WRSwgKCJtdmN1cl9zY3JvbGxuKCVkLCAlZCwgJWQsICVkKSIsIG4sIHRvcCwgYm90LCBtYXh5KSk7CisKKyNpZiBVU0VfWE1DX1NVUFBPUlQKKyAgICAvKgorICAgICAqIElmIHdlIHNjcm9sbCwgd2UgbWlnaHQgcmVtb3ZlIGEgY29va2llLgorICAgICAqLworICAgIGlmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCkgeworCXJldHVybiAoRVJSKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChuID4gMCkgewkJLyogc2Nyb2xsIHVwIChmb3J3YXJkKSAqLworCS8qCisJICogRXhwbGljaXRseSBjbGVhciBpZiBzdHVmZiBwdXNoZWQgb2ZmIHRvcCBvZiByZWdpb24gbWlnaHQKKwkgKiBiZSBzYXZlZCBieSB0aGUgdGVybWluYWwuCisJICovCisJcmVzID0gc2Nyb2xsX2Nzcl9mb3J3YXJkKG4sIHRvcCwgYm90LCAwLCBtYXh5LCBibGFuayk7CisKKwlpZiAocmVzID09IEVSUiAmJiBjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbikgeworCSAgICBpZiAoKCgobiA9PSAxICYmIHNjcm9sbF9mb3J3YXJkKSB8fCBwYXJtX2luZGV4KQorCQkgJiYgKFNQLT5fY3Vyc3JvdyA9PSBib3QgfHwgU1AtPl9jdXJzcm93ID09IGJvdCAtIDEpKQorCQkmJiBzYXZlX2N1cnNvciAmJiByZXN0b3JlX2N1cnNvcikgeworCQljdXJzb3Jfc2F2ZWQgPSBUUlVFOworCQlUUFVUU19UUkFDRSgic2F2ZV9jdXJzb3IiKTsKKwkJcHV0cChzYXZlX2N1cnNvcik7CisJICAgIH0KKwkgICAgVFBVVFNfVFJBQ0UoImNoYW5nZV9zY3JvbGxfcmVnaW9uIik7CisJICAgIHB1dHAoVFBBUk1fMihjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiwgdG9wLCBib3QpKTsKKwkgICAgaWYgKGN1cnNvcl9zYXZlZCkgeworCQlUUFVUU19UUkFDRSgicmVzdG9yZV9jdXJzb3IiKTsKKwkJcHV0cChyZXN0b3JlX2N1cnNvcik7CisJICAgIH0gZWxzZSB7CisJCVNQLT5fY3Vyc3JvdyA9IFNQLT5fY3Vyc2NvbCA9IC0xOworCSAgICB9CisKKwkgICAgcmVzID0gc2Nyb2xsX2Nzcl9mb3J3YXJkKG4sIHRvcCwgYm90LCB0b3AsIGJvdCwgYmxhbmspOworCisJICAgIFRQVVRTX1RSQUNFKCJjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiIpOworCSAgICBwdXRwKFRQQVJNXzIoY2hhbmdlX3Njcm9sbF9yZWdpb24sIDAsIG1heHkpKTsKKwkgICAgU1AtPl9jdXJzcm93ID0gU1AtPl9jdXJzY29sID0gLTE7CisJfQorCisJaWYgKHJlcyA9PSBFUlIgJiYgX25jX2lkbG9rKQorCSAgICByZXMgPSBzY3JvbGxfaWRsKG4sIHRvcCwgYm90IC0gbiArIDEsIGJsYW5rKTsKKworCS8qCisJICogQ2xlYXIgdGhlIG5ld2x5IHNoaWZ0ZWQtaW4gdGV4dC4KKwkgKi8KKwlpZiAocmVzICE9IEVSUgorCSAgICAmJiAobm9uX2Rlc3Rfc2Nyb2xsX3JlZ2lvbiB8fCAobWVtb3J5X2JlbG93ICYmIGJvdCA9PSBtYXh5KSkpIHsKKwkgICAgc3RhdGljIGNvbnN0IE5DVVJTRVNfQ0hfVCBibGFuazIgPSBOZXdDaGFyKEJMQU5LX1RFWFQpOworCSAgICBpZiAoYm90ID09IG1heHkgJiYgY2xyX2VvcykgeworCQlHb1RvKGJvdCAtIG4gKyAxLCAwKTsKKwkJQ2xyVG9FT1MoYmxhbmsyKTsKKwkgICAgfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkgICAgR29Ubyhib3QgLSBpLCAwKTsKKwkJICAgIENsclRvRU9MKGJsYW5rMiwgRkFMU0UpOworCQl9CisJICAgIH0KKwl9CisKKyAgICB9IGVsc2UgewkJCS8qIChuIDwgMCkgLSBzY3JvbGwgZG93biAoYmFja3dhcmQpICovCisJcmVzID0gc2Nyb2xsX2Nzcl9iYWNrd2FyZCgtbiwgdG9wLCBib3QsIDAsIG1heHksIGJsYW5rKTsKKworCWlmIChyZXMgPT0gRVJSICYmIGNoYW5nZV9zY3JvbGxfcmVnaW9uKSB7CisJICAgIGlmICh0b3AgIT0gMCAmJiAoU1AtPl9jdXJzcm93ID09IHRvcCB8fCBTUC0+X2N1cnNyb3cgPT0gdG9wIC0gMSkKKwkJJiYgc2F2ZV9jdXJzb3IgJiYgcmVzdG9yZV9jdXJzb3IpIHsKKwkJY3Vyc29yX3NhdmVkID0gVFJVRTsKKwkJVFBVVFNfVFJBQ0UoInNhdmVfY3Vyc29yIik7CisJCXB1dHAoc2F2ZV9jdXJzb3IpOworCSAgICB9CisJICAgIFRQVVRTX1RSQUNFKCJjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiIpOworCSAgICBwdXRwKFRQQVJNXzIoY2hhbmdlX3Njcm9sbF9yZWdpb24sIHRvcCwgYm90KSk7CisJICAgIGlmIChjdXJzb3Jfc2F2ZWQpIHsKKwkJVFBVVFNfVFJBQ0UoInJlc3RvcmVfY3Vyc29yIik7CisJCXB1dHAocmVzdG9yZV9jdXJzb3IpOworCSAgICB9IGVsc2UgeworCQlTUC0+X2N1cnNyb3cgPSBTUC0+X2N1cnNjb2wgPSAtMTsKKwkgICAgfQorCisJICAgIHJlcyA9IHNjcm9sbF9jc3JfYmFja3dhcmQoLW4sIHRvcCwgYm90LCB0b3AsIGJvdCwgYmxhbmspOworCisJICAgIFRQVVRTX1RSQUNFKCJjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiIpOworCSAgICBwdXRwKFRQQVJNXzIoY2hhbmdlX3Njcm9sbF9yZWdpb24sIDAsIG1heHkpKTsKKwkgICAgU1AtPl9jdXJzcm93ID0gU1AtPl9jdXJzY29sID0gLTE7CisJfQorCisJaWYgKHJlcyA9PSBFUlIgJiYgX25jX2lkbG9rKQorCSAgICByZXMgPSBzY3JvbGxfaWRsKC1uLCBib3QgKyBuICsgMSwgdG9wLCBibGFuayk7CisKKwkvKgorCSAqIENsZWFyIHRoZSBuZXdseSBzaGlmdGVkLWluIHRleHQuCisJICovCisJaWYgKHJlcyAhPSBFUlIKKwkgICAgJiYgKG5vbl9kZXN0X3Njcm9sbF9yZWdpb24gfHwgKG1lbW9yeV9hYm92ZSAmJiB0b3AgPT0gMCkpKSB7CisJICAgIHN0YXRpYyBjb25zdCBOQ1VSU0VTX0NIX1QgYmxhbmsyID0gTmV3Q2hhcihCTEFOS19URVhUKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IC1uOyBpKyspIHsKKwkJR29UbyhpICsgdG9wLCAwKTsKKwkJQ2xyVG9FT0woYmxhbmsyLCBGQUxTRSk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgaWYgKHJlcyA9PSBFUlIpCisJcmV0dXJuIChFUlIpOworCisgICAgX25jX3Njcm9sbF93aW5kb3coY3Vyc2NyLCBuLCB0b3AsIGJvdCwgYmxhbmspOworCisgICAgLyogc2hpZnQgaGFzaCB2YWx1ZXMgdG9vIC0gdGhleSBjYW4gYmUgcmV1c2VkICovCisgICAgX25jX3Njcm9sbF9vbGRoYXNoKG4sIHRvcCwgYm90KTsKKworICAgIHJldHVybiAoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NjcmVlbl9yZXN1bWUodm9pZCkKK3sKKyAgICAvKiBtYWtlIHN1cmUgdGVybWluYWwgaXMgaW4gYSBzYW5lIGtub3duIHN0YXRlICovCisgICAgU2V0QXR0cihTQ1JFRU5fQVRUUlMoU1ApLCBBX05PUk1BTCk7CisgICAgbmV3c2NyLT5fY2xlYXIgPSBUUlVFOworCisgICAgLyogcmVzZXQgY29sb3IgcGFpcnMgYW5kIGRlZmluaXRpb25zICovCisgICAgaWYgKFNQLT5fY29sb3JvbiB8fCBTUC0+X2NvbG9yX2RlZnMpCisJX25jX3Jlc2V0X2NvbG9ycygpOworCisgICAgLyogcmVzdG9yZSB1c2VyLWRlZmluZWQgY29sb3JzLCBpZiBhbnkgKi8KKyAgICBpZiAoU1AtPl9jb2xvcl9kZWZzIDwgMCkgeworCWludCBuOworCVNQLT5fY29sb3JfZGVmcyA9IC0oU1AtPl9jb2xvcl9kZWZzKTsKKwlmb3IgKG4gPSAwOyBuIDwgU1AtPl9jb2xvcl9kZWZzOyArK24pIHsKKwkgICAgaWYgKFNQLT5fY29sb3JfdGFibGVbbl0uaW5pdCkgeworCQlpbml0X2NvbG9yKG4sCisJCQkgICBTUC0+X2NvbG9yX3RhYmxlW25dLnIsCisJCQkgICBTUC0+X2NvbG9yX3RhYmxlW25dLmcsCisJCQkgICBTUC0+X2NvbG9yX3RhYmxlW25dLmIpOworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIChleGl0X2F0dHJpYnV0ZV9tb2RlKQorCXB1dHAoZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisgICAgZWxzZSB7CisJLyogdHVybiBvZmYgYXR0cmlidXRlcyAqLworCWlmIChleGl0X2FsdF9jaGFyc2V0X21vZGUpCisJICAgIHB1dHAoZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKKwlpZiAoZXhpdF9zdGFuZG91dF9tb2RlKQorCSAgICBwdXRwKGV4aXRfc3RhbmRvdXRfbW9kZSk7CisJaWYgKGV4aXRfdW5kZXJsaW5lX21vZGUpCisJICAgIHB1dHAoZXhpdF91bmRlcmxpbmVfbW9kZSk7CisgICAgfQorICAgIGlmIChleGl0X2luc2VydF9tb2RlKQorCXB1dHAoZXhpdF9pbnNlcnRfbW9kZSk7CisgICAgaWYgKGVudGVyX2FtX21vZGUgJiYgZXhpdF9hbV9tb2RlKQorCXB1dHAoYXV0b19yaWdodF9tYXJnaW4gPyBlbnRlcl9hbV9tb2RlIDogZXhpdF9hbV9tb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQodm9pZCkKK19uY19zY3JlZW5faW5pdCh2b2lkKQoreworICAgIF9uY19zY3JlZW5fcmVzdW1lKCk7Cit9CisKKy8qIHdyYXAgdXAgc2NyZWVuIGhhbmRsaW5nICovCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX3NjcmVlbl93cmFwKHZvaWQpCit7CisgICAgVXBkYXRlQXR0cnMobm9ybWFsKTsKKyNpZiBOQ1VSU0VTX0VYVF9GVU5DUworICAgIGlmIChTUC0+X2NvbG9yb24KKwkmJiAhU1AtPl9kZWZhdWx0X2NvbG9yKSB7CisJc3RhdGljIGNvbnN0IE5DVVJTRVNfQ0hfVCBibGFuayA9IE5ld0NoYXIoQkxBTktfVEVYVCk7CisJU1AtPl9kZWZhdWx0X2NvbG9yID0gVFJVRTsKKwlfbmNfZG9fY29sb3IoLTEsIDAsIEZBTFNFLCBfbmNfb3V0Y2gpOworCVNQLT5fZGVmYXVsdF9jb2xvciA9IEZBTFNFOworCisJbXZjdXIoU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wsIHNjcmVlbl9saW5lcyAtIDEsIDApOworCisJQ2xyVG9FT0woYmxhbmssIFRSVUUpOworICAgIH0KKyNlbmRpZgorICAgIGlmIChTUC0+X2NvbG9yX2RlZnMpIHsKKwlfbmNfcmVzZXRfY29sb3JzKCk7CisgICAgfQorfQorCisjaWYgVVNFX1hNQ19TVVBQT1JUCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2RvX3htY19nbGl0Y2goYXR0cl90IHByZXZpb3VzKQoreworICAgIGF0dHJfdCBjaGcgPSBYTUNfQ0hBTkdFUyhwcmV2aW91cyBeIEF0dHJPZihTQ1JFRU5fQVRUUlMoU1ApKSk7CisKKyAgICB3aGlsZSAoY2hnICE9IDApIHsKKwlpZiAoY2hnICYgMSkgeworCSAgICBTUC0+X2N1cnNjb2wgKz0gbWFnaWNfY29va2llX2dsaXRjaDsKKwkgICAgaWYgKFNQLT5fY3Vyc2NvbCA+PSBTUC0+X2NvbHVtbnMpCisJCXdyYXBfY3Vyc29yKCk7CisJICAgIFRSKFRSQUNFX1VQREFURSwgKCJidW1wZWQgdG8gJWQsJWQgYWZ0ZXIgY29va2llIiwgU1AtPl9jdXJzcm93LCBTUC0+X2N1cnNjb2wpKTsKKwl9CisJY2hnID4+PSAxOworICAgIH0KK30KKyNlbmRpZiAvKiBVU0VfWE1DX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvY2hhcmFibGUuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvY2hhcmFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNlYjMyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9jaGFyYWJsZS5jCkBAIC0wLDAgKzEsODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglTdXBwb3J0IGZ1bmN0aW9ucyBmb3Igd2lkZS9uYXJyb3cgY29udmVyc2lvbi4KKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogY2hhcmFibGUuYyx2IDEuNSAyMDA4LzA3LzA1IDIwOjUxOjQxIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGJvb2wpIF9uY19pc19jaGFyYWJsZSh3Y2hhcl90IGNoKQoreworICAgIGJvb2wgcmVzdWx0OworI2lmIEhBVkVfV0NUT0IKKyAgICByZXN1bHQgPSAod2N0b2IoKHdpbnRfdCkgY2gpID09IChpbnQpIGNoKTsKKyNlbHNlCisgICAgcmVzdWx0ID0gKF9uY190b19jaGFyKGNoKSA+PSAwKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkgX25jX3RvX2NoYXIod2ludF90IGNoKQoreworICAgIGludCByZXN1bHQ7CisjaWYgSEFWRV9XQ1RPQgorICAgIHJlc3VsdCA9IHdjdG9iKGNoKTsKKyNlbGlmIEhBVkVfV0NUT01CCisgICAgY2hhciB0ZW1wW01CX0xFTl9NQVhdOworICAgIHJlc3VsdCA9IHdjdG9tYih0ZW1wLCBjaCk7CisgICAgaWYgKHN0cmxlbih0ZW1wKSA9PSAxKQorCXJlc3VsdCA9IFVDaGFyKHRlbXBbMF0pOworICAgIGVsc2UKKwlyZXN1bHQgPSAtMTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKHdpbnRfdCkgX25jX3RvX3dpZGVjaGFyKGludCBjaCkKK3sKKyAgICB3aW50X3QgcmVzdWx0OworI2lmIEhBVkVfQlRPV0MKKyAgICByZXN1bHQgPSBidG93YyhjaCk7CisjZWxpZiBIQVZFX01CVE9XQworICAgIHdjaGFyX3QgY29udmVydDsKKyAgICBjaGFyIHRlbXBbMl07CisgICAgdGVtcFswXSA9IGNoOworICAgIHRlbXBbMV0gPSAnXDAnOworICAgIGlmIChtYnRvd2MoJmNvbnZlcnQsIHRlbXAsIDEpID49IDApCisJcmVzdWx0ID0gY29udmVydDsKKyAgICBlbHNlCisJcmVzdWx0ID0gV0VPRjsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9hZGRfd2NoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9hZGRfd2NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiNDFiYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2FkZF93Y2guYwpAQCAtMCwwICsxLDExMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9hZGRfd2NoLmMKKyoqCisqKglUaGUgcm91dGluZSB3YWRkX3djaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2FkZF93Y2guYyx2IDEuNiAyMDA2LzEyLzAyIDIxOjE5OjE3IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dhZGRfd2NoKFdJTkRPVyAqd2luLCBjb25zdCBjY2hhcl90ICp3Y2gpCit7CisgICAgUFVUQ19EQVRBOworICAgIGludCBuOworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVFIoVFJBQ0VfVklSVFBVVCB8IFRSQUNFX0NDQUxMUywgKFRfQ0FMTEVEKCJ3YWRkX3djaCglcCwgJXMpIiksIHdpbiwKKwkJCQkgICAgICBfdHJhY2VjaF90KHdjaCkpKTsKKworICAgIGlmICh3aW4gIT0gMCkgeworCVBVVENfSU5JVDsKKwlmb3IgKFBVVENfaSA9IDA7IFBVVENfaSA8IENDSEFSV19NQVg7ICsrUFVUQ19pKSB7CisJICAgIGF0dHJfdCBhdHRycyA9ICh3Y2gtPmF0dHIgJiBBX0FUVFJJQlVURVMpOworCisJICAgIGlmICgoUFVUQ19jaCA9IHdjaC0+Y2hhcnNbUFVUQ19pXSkgPT0gTCdcMCcpCisJCWJyZWFrOworCSAgICBpZiAoKFBVVENfbiA9IHdjcnRvbWIoUFVUQ19idWYsIFBVVENfY2gsICZQVVRfc3QpKSA8PSAwKSB7CisJCWNvZGUgPSBFUlI7CisJCWlmIChpczhiaXRzKFBVVENfY2gpKQorCQkgICAgY29kZSA9IHdhZGRjaCh3aW4sIFVDaGFyKFBVVENfY2gpIHwgYXR0cnMpOworCQlicmVhazsKKwkgICAgfQorCSAgICBmb3IgKG4gPSAwOyBuIDwgUFVUQ19uOyBuKyspIHsKKwkJaWYgKChjb2RlID0gd2FkZGNoKHdpbiwgVUNoYXIoUFVUQ19idWZbbl0pIHwgYXR0cnMpKSA9PSBFUlIpIHsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgaWYgKGNvZGUgPT0gRVJSKQorCQlicmVhazsKKwl9CisgICAgfQorCisgICAgVFIoVFJBQ0VfVklSVFBVVCB8IFRSQUNFX0NDQUxMUywgKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2VjaG9fd2NoYXIoV0lORE9XICp3aW4sIGNvbnN0IGNjaGFyX3QgKndjaCkKK3sKKyAgICBQVVRDX0RBVEE7CisgICAgaW50IG47CisgICAgaW50IGNvZGUgPSBFUlI7CisKKyAgICBUUihUUkFDRV9WSVJUUFVUIHwgVFJBQ0VfQ0NBTExTLCAoVF9DQUxMRUQoIndlY2hvX3djaGFyKCVwLCAlcykiKSwgd2luLAorCQkJCSAgICAgIF90cmFjZWNoX3Qod2NoKSkpOworCisgICAgaWYgKHdpbiAhPSAwKSB7CisJUFVUQ19JTklUOworCWZvciAoUFVUQ19pID0gMDsgUFVUQ19pIDwgQ0NIQVJXX01BWDsgKytQVVRDX2kpIHsKKwkgICAgYXR0cl90IGF0dHJzID0gKHdjaC0+YXR0ciAmIEFfQVRUUklCVVRFUyk7CisKKwkgICAgaWYgKChQVVRDX2NoID0gd2NoLT5jaGFyc1tQVVRDX2ldKSA9PSBMJ1wwJykKKwkJYnJlYWs7CisJICAgIGlmICgoUFVUQ19uID0gd2NydG9tYihQVVRDX2J1ZiwgUFVUQ19jaCwgJlBVVF9zdCkpIDw9IDApIHsKKwkJY29kZSA9IEVSUjsKKwkJaWYgKGlzOGJpdHMoUFVUQ19jaCkpCisJCSAgICBjb2RlID0gd2FkZGNoKHdpbiwgVUNoYXIoUFVUQ19jaCkgfCBhdHRycyk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGZvciAobiA9IDA7IG4gPCBQVVRDX247IG4rKykgeworCQlpZiAoKGNvZGUgPSB3YWRkY2god2luLCBVQ2hhcihQVVRDX2J1ZltuXSkgfCBhdHRycykpID09IEVSUikgeworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBpZiAoY29kZSA9PSBFUlIpCisJCWJyZWFrOworCX0KKwl3cmVmcmVzaCh3aW4pOworICAgIH0KKworICAgIFRSKFRSQUNFX1ZJUlRQVVQgfCBUUkFDRV9DQ0FMTFMsIChUX1JFVFVSTigiJWQiKSwgY29kZSkpOworICAgIHJldHVybiAoY29kZSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9ib3hfc2V0LmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9ib3hfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmY2U0NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2JveF9zZXQuYwpAQCAtMCwwICsxLDExMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEF1dGhvcnM6IFN2ZW4gVmVyZG9vbGFlZ2UgYW5kIFRob21hcyBEaWNrZXkgMjAwMSwyMDAyICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9ib3hfc2V0LmMKKyoqCisqKglUaGUgcm91dGluZSB3Ym9yZGVyX3NldCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX2JveF9zZXQuYyx2IDEuNCAyMDAzLzEyLzA2IDE4OjAyOjEzIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dib3JkZXJfc2V0KFdJTkRPVyAqd2luLAorCSAgICBjb25zdCBBUkdfQ0hfVCBscywgY29uc3QgQVJHX0NIX1QgcnMsCisJICAgIGNvbnN0IEFSR19DSF9UIHRzLCBjb25zdCBBUkdfQ0hfVCBicywKKwkgICAgY29uc3QgQVJHX0NIX1QgdGwsIGNvbnN0IEFSR19DSF9UIHRyLAorCSAgICBjb25zdCBBUkdfQ0hfVCBibCwgY29uc3QgQVJHX0NIX1QgYnIpCit7CisgICAgTkNVUlNFU19TSVpFX1QgaTsKKyAgICBOQ1VSU0VTX1NJWkVfVCBlbmR4LCBlbmR5OworICAgIE5DVVJTRVNfQ0hfVCB3bHMsIHdycywgd3RzLCB3YnMsIHd0bCwgd3RyLCB3YmwsIHdicjsKKworICAgIFQoKFRfQ0FMTEVEKCJ3Ym9yZGVyKCVwLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzKSIpLAorICAgICAgIHdpbiwKKyAgICAgICBfdHJhY2VjaF90MigxLCBscyksCisgICAgICAgX3RyYWNlY2hfdDIoMiwgcnMpLAorICAgICAgIF90cmFjZWNoX3QyKDMsIHRzKSwKKyAgICAgICBfdHJhY2VjaF90Mig0LCBicyksCisgICAgICAgX3RyYWNlY2hfdDIoNSwgdGwpLAorICAgICAgIF90cmFjZWNoX3QyKDYsIHRyKSwKKyAgICAgICBfdHJhY2VjaF90Mig3LCBibCksCisgICAgICAgX3RyYWNlY2hfdDIoOCwgYnIpKSk7CisKKyAgICBpZiAoIXdpbikKKwlyZXR1cm5Db2RlKEVSUik7CisKKyNkZWZpbmUgUkVOREVSX1dJVEhfREVGQVVMVChjaCxkZWYpIHcgIyNjaCA9IF9uY19yZW5kZXIod2luLCAoY2ggPT0gMCkgPyAqKGNvbnN0IEFSR19DSF9UKWRlZiA6ICpjaCkKKworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQobHMsIFdBQ1NfVkxJTkUpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQocnMsIFdBQ1NfVkxJTkUpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQodHMsIFdBQ1NfSExJTkUpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQoYnMsIFdBQ1NfSExJTkUpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQodGwsIFdBQ1NfVUxDT1JORVIpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQodHIsIFdBQ1NfVVJDT1JORVIpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQoYmwsIFdBQ1NfTExDT1JORVIpOworICAgIFJFTkRFUl9XSVRIX0RFRkFVTFQoYnIsIFdBQ1NfTFJDT1JORVIpOworCisgICAgVCgoInVzaW5nICVzLCAlcywgJXMsICVzLCAlcywgJXMsICVzLCAlcyIsCisgICAgICAgX3RyYWNlY2hfdDIoMSwgQ0hSRUYod2xzKSksCisgICAgICAgX3RyYWNlY2hfdDIoMiwgQ0hSRUYod3JzKSksCisgICAgICAgX3RyYWNlY2hfdDIoMywgQ0hSRUYod3RzKSksCisgICAgICAgX3RyYWNlY2hfdDIoNCwgQ0hSRUYod2JzKSksCisgICAgICAgX3RyYWNlY2hfdDIoNSwgQ0hSRUYod3RsKSksCisgICAgICAgX3RyYWNlY2hfdDIoNiwgQ0hSRUYod3RyKSksCisgICAgICAgX3RyYWNlY2hfdDIoNywgQ0hSRUYod2JsKSksCisgICAgICAgX3RyYWNlY2hfdDIoOCwgQ0hSRUYod2JyKSkpKTsKKworICAgIGVuZHggPSB3aW4tPl9tYXh4OworICAgIGVuZHkgPSB3aW4tPl9tYXh5OworCisgICAgZm9yIChpID0gMDsgaSA8PSBlbmR4OyBpKyspIHsKKwl3aW4tPl9saW5lWzBdLnRleHRbaV0gPSB3dHM7CisJd2luLT5fbGluZVtlbmR5XS50ZXh0W2ldID0gd2JzOworICAgIH0KKyAgICB3aW4tPl9saW5lW2VuZHldLmZpcnN0Y2hhciA9IHdpbi0+X2xpbmVbMF0uZmlyc3RjaGFyID0gMDsKKyAgICB3aW4tPl9saW5lW2VuZHldLmxhc3RjaGFyID0gd2luLT5fbGluZVswXS5sYXN0Y2hhciA9IGVuZHg7CisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IGVuZHk7IGkrKykgeworCXdpbi0+X2xpbmVbaV0udGV4dFswXSA9IHdsczsKKwl3aW4tPl9saW5lW2ldLnRleHRbZW5keF0gPSB3cnM7CisJd2luLT5fbGluZVtpXS5maXJzdGNoYXIgPSAwOworCXdpbi0+X2xpbmVbaV0ubGFzdGNoYXIgPSBlbmR4OworICAgIH0KKyAgICB3aW4tPl9saW5lWzBdLnRleHRbMF0gPSB3dGw7CisgICAgd2luLT5fbGluZVswXS50ZXh0W2VuZHhdID0gd3RyOworICAgIHdpbi0+X2xpbmVbZW5keV0udGV4dFswXSA9IHdibDsKKyAgICB3aW4tPl9saW5lW2VuZHldLnRleHRbZW5keF0gPSB3YnI7CisKKyAgICBfbmNfc3luY2hvb2sod2luKTsKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2NjaGFyLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9jY2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTBjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9jY2hhci5jCkBAIC0wLDAgKzEsMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2NjaGFyLmMKKyoqCisqKglUaGUgcm91dGluZXMgc2V0Y2NoYXIoKSBhbmQgZ2V0Y2NoYXIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9jY2hhci5jLHYgMS4xMiAyMDA3LzA1LzEyIDE5OjAzOjA2IHRvbSBFeHAgJCIpCisKKy8qIAorICogVGhlIFN1U3YyIGRlc2NyaXB0aW9uIGxlYXZlcyBzb21lIHJvb20gZm9yIGludGVycHJldGF0aW9uLiAgV2UnbGwgYXNzdW1lIHdjaAorICogcG9pbnRzIHRvIGEgc3RyaW5nIHdoaWNoIGlzIEwnXDAnIHRlcm1pbmF0ZWQsIGNvbnRhaW5zIGF0IGxlYXN0IG9uZQorICogY2hhcmFjdGVyIHdpdGggc3RyaWN0bHkgcG9zaXRpdmUgd2lkdGgsIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0LCBhbmQKKyAqIGNvbnRhaW5zIG5vIGNoYXJhY3RlcnMgb2YgbmVnYXRpdmUgd2lkdGguCisgKi8KK05DVVJTRVNfRVhQT1JUKGludCkKK3NldGNjaGFyKGNjaGFyX3QgKndjdmFsLAorCSBjb25zdCB3Y2hhcl90ICp3Y2gsCisJIGNvbnN0IGF0dHJfdCBhdHRycywKKwkgc2hvcnQgY29sb3JfcGFpciwKKwkgY29uc3Qgdm9pZCAqb3B0cykKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgbGVuOworICAgIGludCBjb2RlID0gT0s7CisKKyAgICBUUihUUkFDRV9DQ0FMTFMsIChUX0NBTExFRCgic2V0Y2NoYXIoJXAsJXMsJWx1LCVkLCVwKSIpLAorCQkgICAgICB3Y3ZhbCwgX25jX3Zpc3didWYod2NoKSwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpIGF0dHJzLCBjb2xvcl9wYWlyLCBvcHRzKSk7CisKKyAgICBsZW4gPSB3Y3NsZW4od2NoKTsKKyAgICBpZiAob3B0cyAhPSBOVUxMCisJfHwgKGxlbiA+IDEgJiYgd2N3aWR0aCh3Y2hbMF0pIDwgMCkpIHsKKwljb2RlID0gRVJSOworICAgIH0gZWxzZSB7CisJaWYgKGxlbiA+IENDSEFSV19NQVgpCisJICAgIGxlbiA9IENDSEFSV19NQVg7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBmb2xsb3dpbmcgc3BhY2luZy1jaGFyYWN0ZXIsIHN0b3AgYXQgdGhhdCBwb2ludC4gIFdlCisJICogYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhZGRpbmcgbm9uLXNwYWNpbmcgY2hhcmFjdGVycy4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKKwkgICAgaWYgKHdjd2lkdGgod2NoW2ldKSAhPSAwKSB7CisJCWxlbiA9IGk7CisJCWJyZWFrOworCSAgICB9CisJfQorCisJbWVtc2V0KHdjdmFsLCAwLCBzaXplb2YoKndjdmFsKSk7CisKKwlpZiAobGVuICE9IDApIHsKKwkgICAgU2V0QXR0cigqd2N2YWwsIGF0dHJzIHwgQ09MT1JfUEFJUihjb2xvcl9wYWlyKSk7CisJICAgIFNldFBhaXIoQ0hERVJFRih3Y3ZhbCksIGNvbG9yX3BhaXIpOworCSAgICBtZW1jcHkoJndjdmFsLT5jaGFycywgd2NoLCBsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworCSAgICBUUihUUkFDRV9DQ0FMTFMsICgiY29weSAlZCB3Y2hhcnMsIGZpcnN0IGlzICVzIiwgbGVuLAorCQkJICAgICAgX3RyYWNlY2NoYXJfdCh3Y3ZhbCkpKTsKKwl9CisgICAgfQorCisgICAgVFIoVFJBQ0VfQ0NBTExTLCAoVF9SRVRVUk4oIiVkIiksIGNvZGUpKTsKKyAgICByZXR1cm4gKGNvZGUpOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitnZXRjY2hhcihjb25zdCBjY2hhcl90ICp3Y3ZhbCwKKwkgd2NoYXJfdCAqd2NoLAorCSBhdHRyX3QgKmF0dHJzLAorCSBzaG9ydCAqY29sb3JfcGFpciwKKwkgdm9pZCAqb3B0cykKK3sKKyAgICB3Y2hhcl90ICp3cDsKKyAgICBpbnQgbGVuOworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVFIoVFJBQ0VfQ0NBTExTLCAoVF9DQUxMRUQoImdldGNjaGFyKCVwLCVwLCVwLCVwLCVwKSIpLAorCQkgICAgICB3Y3ZhbCwgd2NoLCBhdHRycywgY29sb3JfcGFpciwgb3B0cykpOworCisgICAgaWYgKG9wdHMgPT0gTlVMTCkgeworCWxlbiA9ICh3cCA9IHdtZW1jaHIod2N2YWwtPmNoYXJzLCBMJ1wwJywgQ0NIQVJXX01BWCkpCisJICAgID8gd3AgLSB3Y3ZhbC0+Y2hhcnMKKwkgICAgOiBDQ0hBUldfTUFYOworCisJaWYgKHdjaCA9PSBOVUxMKSB7CisJICAgIGNvZGUgPSBsZW47CisJfSBlbHNlIGlmIChhdHRycyA9PSAwIHx8IGNvbG9yX3BhaXIgPT0gMCkgeworCSAgICBjb2RlID0gRVJSOworCX0gZWxzZSBpZiAobGVuID49IDApIHsKKwkgICAgKmF0dHJzID0gQXR0ck9mKCp3Y3ZhbCkgJiBBX0FUVFJJQlVURVM7CisJICAgICpjb2xvcl9wYWlyID0gR2V0UGFpcigqd2N2YWwpOworCSAgICB3bWVtY3B5KHdjaCwgd2N2YWwtPmNoYXJzLCAodW5zaWduZWQpIGxlbik7CisJICAgIHdjaFtsZW5dID0gTCdcMCc7CisJICAgIGNvZGUgPSBPSzsKKwl9CisgICAgfQorCisgICAgVFIoVFJBQ0VfQ0NBTExTLCAoVF9SRVRVUk4oIiVkIiksIGNvZGUpKTsKKyAgICByZXR1cm4gKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfZXJhc2V3Y2hhci5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfZXJhc2V3Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjQ1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9lcmFzZXdjaGFyLmMKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMjAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZXJhc2V3Y2hhci5jLHYgMS4xIDIwMDIvMDUvMTEgMjA6Mzg6MDYgdG9tIEV4cCAkIikKKworLyoKKyAqCWVyYXNld2NoYXIoKQorICoKKyAqCVJldHVybiBlcmFzZSBjaGFyYWN0ZXIgYXMgZ2l2ZW4gaW4gY3VyX3Rlcm0tPk90dHliLgorICoKKyAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitlcmFzZXdjaGFyKHdjaGFyX3QgKiB3Y2gpCit7CisgICAgaW50IHZhbHVlOworICAgIGludCByZXN1bHQgPSBFUlI7CisKKyAgICBUKChUX0NBTExFRCgiZXJhc2V3Y2hhcigpIikpKTsKKyAgICBpZiAoKHZhbHVlID0gZXJhc2VjaGFyKCkpICE9IEVSUikgeworCSp3Y2ggPSB2YWx1ZTsKKwlyZXN1bHQgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQorCisvKgorICoJa2lsbHdjaGFyKCkKKyAqCisgKglSZXR1cm4ga2lsbCBjaGFyYWN0ZXIgYXMgZ2l2ZW4gaW4gY3VyX3Rlcm0tPk90dHliLgorICoKKyAqLworCitOQ1VSU0VTX0VYUE9SVChpbnQpCitraWxsd2NoYXIod2NoYXJfdCAqIHdjaCkKK3sKKyAgICBpbnQgdmFsdWU7CisgICAgaW50IHJlc3VsdCA9IEVSUjsKKworICAgIFQoKFRfQ0FMTEVEKCJraWxsd2NoYXIoKSIpKSk7CisgICAgaWYgKCh2YWx1ZSA9IGtpbGxjaGFyKCkpICE9IEVSUikgeworCSp3Y2ggPSB2YWx1ZTsKKwlyZXN1bHQgPSBPSzsKKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfZ2V0X3djaC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfZ2V0X3djaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjMxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9nZXRfd2NoLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDItb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfZ2V0X3djaC5jCisqKgorKioJVGhlIHJvdXRpbmUgZ2V0X3djaCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZ2V0X3djaC5jLHYgMS4xNyAyMDA4LzA4LzE2IDE5OjIyOjU1IHRvbSBFeHAgJCIpCisKKyNpZiBIQVZFX01CVE9XQyAmJiBIQVZFX01CTEVOCisjZGVmaW5lIHJlc2V0X21ieXRlcyhzdGF0ZSkgbWJsZW4oTlVMTCwgMCksIG1idG93YyhOVUxMLCBOVUxMLCAwKQorI2RlZmluZSBjb3VudF9tYnl0ZXMoYnVmZmVyLGxlbmd0aCxzdGF0ZSkgbWJsZW4oYnVmZmVyLGxlbmd0aCkKKyNkZWZpbmUgY2hlY2tfbWJ5dGVzKHdjaCxidWZmZXIsbGVuZ3RoLHN0YXRlKSBcCisJKGludCkgbWJ0b3djKCZ3Y2gsIGJ1ZmZlciwgbGVuZ3RoKQorI2RlZmluZSBzdGF0ZV91bnVzZWQKKyNlbGlmIEhBVkVfTUJSVE9XQyAmJiBIQVZFX01CUkxFTgorI2RlZmluZSByZXNldF9tYnl0ZXMoc3RhdGUpIGluaXRfbWIoc3RhdGUpCisjZGVmaW5lIGNvdW50X21ieXRlcyhidWZmZXIsbGVuZ3RoLHN0YXRlKSBtYnJsZW4oYnVmZmVyLGxlbmd0aCwmc3RhdGUpCisjZGVmaW5lIGNoZWNrX21ieXRlcyh3Y2gsYnVmZmVyLGxlbmd0aCxzdGF0ZSkgXAorCShpbnQpIG1icnRvd2MoJndjaCwgYnVmZmVyLCBsZW5ndGgsICZzdGF0ZSkKKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKKworTkNVUlNFU19FWFBPUlQoaW50KQord2dldF93Y2goV0lORE9XICp3aW4sIHdpbnRfdCAqcmVzdWx0KQoreworICAgIFNDUkVFTiAqc3A7CisgICAgaW50IGNvZGU7CisgICAgY2hhciBidWZmZXJbKE1CX0xFTl9NQVggKiA5KSArIDFdOwkvKiBhbGxvdyBzb21lIHJlZHVuZGFudCBzaGlmdHMgKi8KKyAgICBpbnQgc3RhdHVzOworICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKyAgICB3Y2hhcl90IHdjaDsKKyNpZm5kZWYgc3RhdGVfdW51c2VkCisgICAgbWJzdGF0ZV90IHN0YXRlOworI2VuZGlmCisKKyAgICBUKChUX0NBTExFRCgid2dldF93Y2goJXApIiksIHdpbikpOworCisgICAgLyoKKyAgICAgKiBXZSBjYW4gZ2V0IGEgc3RyZWFtIG9mIHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMgYW5kIEtFWV94eHggY29kZXMgZnJvbQorICAgICAqIF9uY193Z2V0Y2goKSwgd2hpbGUgd2Ugd2FudCB0byByZXR1cm4gYSB3aWRlIGNoYXJhY3RlciBvciBLRVlfeHh4IGNvZGUuCisgICAgICovCisgICAgX25jX2xvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgc3AgPSBfbmNfc2NyZWVuX29mKHdpbik7CisgICAgaWYgKHNwICE9IDApIHsKKwlmb3IgKDs7KSB7CisJICAgIFQoKCJyZWFkaW5nICVkIG9mICVkIiwgKGludCkgY291bnQgKyAxLCAoaW50KSBzaXplb2YoYnVmZmVyKSkpOworCSAgICBjb2RlID0gX25jX3dnZXRjaCh3aW4sICZ2YWx1ZSwgVFJVRSBFVkVOVExJU1RfMm5kKChfbmNfZXZlbnRsaXN0CisJCQkJCQkJICAgICAgICopIDApKTsKKwkgICAgaWYgKGNvZGUgPT0gRVJSKSB7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKGNvZGUgPT0gS0VZX0NPREVfWUVTKSB7CisJCS8qCisJCSAqIElmIHdlIHdlcmUgcHJvY2Vzc2luZyBhbiBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXIsCisJCSAqIHJldHVybiBhbiBlcnJvciBzaW5jZSB3ZSBoYXZlIGEgS0VZX3h4eCBjb2RlIHdoaWNoCisJCSAqIGludGVycnVwdHMgaXQuICBGb3Igc29tZSBjYXNlcywgd2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5CisJCSAqIHdyaXRpbmcgYSBuZXcgdmVyc2lvbiBvZiBsaWJfZ2V0Y2guYyghKSwgYnV0IGl0IGlzIG5vdCBjbGVhcgorCQkgKiB3aGV0aGVyIHRoZSBpbXByb3ZlbWVudCB3b3VsZCBiZSB3b3J0aCB0aGUgZWZmb3J0LgorCQkgKi8KKwkJaWYgKGNvdW50ICE9IDApIHsKKwkJICAgIF9uY191bmdldGNoKHNwLCAoaW50KSB2YWx1ZSk7CisJCSAgICBjb2RlID0gRVJSOworCQl9CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKGNvdW50ICsgMSA+PSBzaXplb2YoYnVmZmVyKSkgeworCQlfbmNfdW5nZXRjaChzcCwgKGludCkgdmFsdWUpOworCQljb2RlID0gRVJSOworCQlicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJYnVmZmVyW2NvdW50KytdID0gKGNoYXIpIFVDaGFyKHZhbHVlKTsKKwkJcmVzZXRfbWJ5dGVzKHN0YXRlKTsKKwkJc3RhdHVzID0gY291bnRfbWJ5dGVzKGJ1ZmZlciwgY291bnQsIHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCSAgICByZXNldF9tYnl0ZXMoc3RhdGUpOworCQkgICAgaWYgKGNoZWNrX21ieXRlcyh3Y2gsIGJ1ZmZlciwgY291bnQsIHN0YXRlKSAhPSBzdGF0dXMpIHsKKwkJCWNvZGUgPSBFUlI7CS8qIHRoZSB0d28gY2FsbHMgc2hvdWxkIG1hdGNoICovCisJCQlfbmNfdW5nZXRjaChzcCwgKGludCkgdmFsdWUpOworCQkgICAgfQorCQkgICAgdmFsdWUgPSB3Y2g7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJY29kZSA9IEVSUjsKKyAgICB9CisgICAgKnJlc3VsdCA9IHZhbHVlOworICAgIF9uY191bmxvY2tfZ2xvYmFsKGN1cnNlcyk7CisgICAgVCgoInJlc3VsdCAlI2xvIiwgdmFsdWUpKTsKKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfZ2V0X3dzdHIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2dldF93c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhNzBhNQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2dldF93c3RyLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfZ2V0X3dzdHIuYworKioKKyoqCVRoZSByb3V0aW5lIHdnZXRuX3dzdHIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKyNpbmNsdWRlIDx0ZXJtLmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfZ2V0X3dzdHIuYyx2IDEuMTAgMjAwOC8wOC8xNiAxOToyNTozMyB0b20gRXhwICQiKQorCitzdGF0aWMgaW50Cit3YWRkX3dpbnQoV0lORE9XICp3aW4sIHdpbnRfdCAqc3JjKQoreworICAgIGNjaGFyX3QgdG1wOworICAgIHdjaGFyX3Qgd2NoWzJdOworCisgICAgd2NoWzBdID0gKHdjaGFyX3QpICgqc3JjKTsKKyAgICB3Y2hbMV0gPSAwOworICAgIHNldGNjaGFyKCZ0bXAsIHdjaCwgQV9OT1JNQUwsIDAsIE5VTEwpOworICAgIHJldHVybiB3YWRkX3djaCh3aW4sICZ0bXApOworfQorCisvKgorICogVGhpcyB3aXBlcyBvdXQgdGhlIGxhc3QgY2hhcmFjdGVyLCBubyBtYXR0ZXIgd2hldGhlciBpdCB3YXMgYSB0YWIsIGNvbnRyb2wKKyAqIG9yIG90aGVyIGNoYXJhY3RlciwgYW5kIGhhbmRsZXMgcmV2ZXJzZSB3cmFwYXJvdW5kLgorICovCitzdGF0aWMgd2ludF90ICoKK1dpcGVPdXQoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgd2ludF90ICpmaXJzdCwgd2ludF90ICpsYXN0LCBib29sIGVjaG9lZCkKK3sKKyAgICBpZiAobGFzdCA+IGZpcnN0KSB7CisJKi0tbGFzdCA9ICdcMCc7CisJaWYgKGVjaG9lZCkgeworCSAgICBpbnQgeTEgPSB3aW4tPl9jdXJ5OworCSAgICBpbnQgeDEgPSB3aW4tPl9jdXJ4OworCSAgICBpbnQgbjsKKworCSAgICB3bW92ZSh3aW4sIHksIHgpOworCSAgICBmb3IgKG4gPSAwOyBmaXJzdFtuXSAhPSAwOyArK24pIHsKKwkJd2FkZF93aW50KHdpbiwgZmlyc3QgKyBuKTsKKwkgICAgfQorCSAgICBnZXR5eCh3aW4sIHksIHgpOworCSAgICB3aGlsZSAod2luLT5fY3VyeSA8IHkxCisJCSAgIHx8ICh3aW4tPl9jdXJ5ID09IHkxICYmIHdpbi0+X2N1cnggPCB4MSkpCisJCXdhZGRjaCh3aW4sIChjaHR5cGUpICcgJyk7CisKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwl9CisgICAgfQorICAgIHJldHVybiBsYXN0OworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3Z2V0bl93c3RyKFdJTkRPVyAqd2luLCB3aW50X3QgKnN0ciwgaW50IG1heGxlbikKK3sKKyAgICBTQ1JFRU4gKnNwID0gX25jX3NjcmVlbl9vZih3aW4pOworICAgIFRUWSBidWY7CisgICAgYm9vbCBvbGRubCwgb2xkZWNobywgb2xkcmF3LCBvbGRjYnJlYWs7CisgICAgd2ludF90IGVyYXNlYzsKKyAgICB3aW50X3Qga2lsbGM7CisgICAgd2ludF90ICpvbGRzdHIgPSBzdHI7CisgICAgd2ludF90ICp0bXBzdHIgPSBzdHI7CisgICAgd2ludF90IGNoOworICAgIGludCB5LCB4LCBjb2RlOworCisgICAgVCgoVF9DQUxMRUQoIndnZXRuX3dzdHIoJXAsJXAsICVkKSIpLCB3aW4sIHN0ciwgbWF4bGVuKSk7CisKKyAgICBpZiAoIXdpbikKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBfbmNfZ2V0X3R0eV9tb2RlKCZidWYpOworCisgICAgb2xkbmwgPSBzcC0+X25sOworICAgIG9sZGVjaG8gPSBzcC0+X2VjaG87CisgICAgb2xkcmF3ID0gc3AtPl9yYXc7CisgICAgb2xkY2JyZWFrID0gc3AtPl9jYnJlYWs7CisgICAgbmwoKTsKKyAgICBub2VjaG8oKTsKKyAgICBub3JhdygpOworICAgIGNicmVhaygpOworCisgICAgZXJhc2VjID0gKHdpbnRfdCkgZXJhc2VjaGFyKCk7CisgICAga2lsbGMgPSAod2ludF90KSBraWxsY2hhcigpOworCisgICAgZ2V0eXgod2luLCB5LCB4KTsKKworICAgIGlmIChpc193aW50b3VjaGVkKHdpbikgfHwgKHdpbi0+X2ZsYWdzICYgX0hBU01PVkVEKSkKKwl3cmVmcmVzaCh3aW4pOworCisgICAgd2hpbGUgKChjb2RlID0gd2dldF93Y2god2luLCAmY2gpKSAhPSBFUlIpIHsKKwkvKgorCSAqIE1hcCBzcGVjaWFsIGNoYXJhY3RlcnMgaW50byBrZXktY29kZXMuCisJICovCisJaWYgKGNoID09ICdccicpCisJICAgIGNoID0gJ1xuJzsKKwlpZiAoY2ggPT0gJ1xuJykgeworCSAgICBjb2RlID0gS0VZX0NPREVfWUVTOworCSAgICBjaCA9IEtFWV9FTlRFUjsKKwl9CisJaWYgKGNoIDwgS0VZX01JTikgeworCSAgICBpZiAoY2ggPT0gZXJhc2VjKSB7CisJCWNoID0gS0VZX0JBQ0tTUEFDRTsKKwkJY29kZSA9IEtFWV9DT0RFX1lFUzsKKwkgICAgfQorCSAgICBpZiAoY2ggPT0ga2lsbGMpIHsKKwkJY2ggPSBLRVlfRU9MOworCQljb2RlID0gS0VZX0NPREVfWUVTOworCSAgICB9CisJfQorCWlmIChjb2RlID09IEtFWV9DT0RFX1lFUykgeworCSAgICAvKgorCSAgICAgKiBTb21lIHRlcm1pbmFscyAodGhlIFd5c2UtNTAgaXMgdGhlIG1vc3QgY29tbW9uKSBnZW5lcmF0ZSBhIFxuCisJICAgICAqIGZyb20gdGhlIGRvd24tYXJyb3cga2V5LiAgV2l0aCB0aGlzIGxvZ2ljLCBpdCdzIHRoZSB1c2VyJ3MKKwkgICAgICogY2hvaWNlIHdoZXRoZXIgdG8gc2V0IGtjdWQ9XG4gZm9yIHdnZXRfd2NoKCk7IHRlcm1pbmF0aW5nCisJICAgICAqICpnZXRuX3dzdHIoKSB3aXRoIFxuIHNob3VsZCB3b3JrIGVpdGhlciB3YXkuCisJICAgICAqLworCSAgICBpZiAoY2ggPT0gS0VZX0RPV04gfHwgY2ggPT0gS0VZX0VOVEVSKSB7CisJCWlmIChvbGRlY2hvID09IFRSVUUKKwkJICAgICYmIHdpbi0+X2N1cnkgPT0gd2luLT5fbWF4eQorCQkgICAgJiYgd2luLT5fc2Nyb2xsKQorCQkgICAgd2VjaG9jaGFyKHdpbiwgKGNodHlwZSkgJ1xuJyk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChjaCA9PSBLRVlfTEVGVCB8fCBjaCA9PSBLRVlfQkFDS1NQQUNFKSB7CisJCWlmICh0bXBzdHIgPiBvbGRzdHIpIHsKKwkJICAgIHRtcHN0ciA9IFdpcGVPdXQod2luLCB5LCB4LCBvbGRzdHIsIHRtcHN0ciwgb2xkZWNobyk7CisJCX0KKwkgICAgfSBlbHNlIGlmIChjaCA9PSBLRVlfRU9MKSB7CisJCXdoaWxlICh0bXBzdHIgPiBvbGRzdHIpIHsKKwkJICAgIHRtcHN0ciA9IFdpcGVPdXQod2luLCB5LCB4LCBvbGRzdHIsIHRtcHN0ciwgb2xkZWNobyk7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJfSBlbHNlIGlmIChtYXhsZW4gPj0gMCAmJiB0bXBzdHIgLSBvbGRzdHIgPj0gbWF4bGVuKSB7CisJICAgIGJlZXAoKTsKKwl9IGVsc2UgeworCSAgICAqdG1wc3RyKysgPSBjaDsKKwkgICAgKnRtcHN0ciA9IDA7CisJICAgIGlmIChvbGRlY2hvID09IFRSVUUpIHsKKwkJaW50IG9sZHkgPSB3aW4tPl9jdXJ5OworCisJCWlmICh3YWRkX3dpbnQod2luLCB0bXBzdHIgLSAxKSA9PSBFUlIpIHsKKwkJICAgIC8qCisJCSAgICAgKiBXZSBjYW4ndCByZWFsbHkgdXNlIHRoZSBsb3dlci1yaWdodCBjb3JuZXIgZm9yIGlucHV0LAorCQkgICAgICogc2luY2UgaXQnbGwgbWVzcyB1cCBib29ra2VlcGluZyBmb3IgZXJhc2VzLgorCQkgICAgICovCisJCSAgICB3aW4tPl9mbGFncyAmPSB+X1dSQVBQRUQ7CisJCSAgICB3YWRkY2god2luLCAoY2h0eXBlKSAnICcpOworCQkgICAgdG1wc3RyID0gV2lwZU91dCh3aW4sIHksIHgsIG9sZHN0ciwgdG1wc3RyLCBvbGRlY2hvKTsKKwkJICAgIGNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHdpbi0+X2ZsYWdzICYgX1dSQVBQRUQpIHsKKwkJICAgIC8qCisJCSAgICAgKiBJZiB0aGUgbGFzdCB3YWRkY2ggZm9yY2VkIGEgd3JhcCAmIHNjcm9sbCwgYWRqdXN0IG91cgorCQkgICAgICogcmVmZXJlbmNlIHBvaW50IGZvciBlcmFzdXJlcy4KKwkJICAgICAqLworCQkgICAgaWYgKHdpbi0+X3Njcm9sbAorCQkJJiYgb2xkeSA9PSB3aW4tPl9tYXh5CisJCQkmJiB3aW4tPl9jdXJ5ID09IHdpbi0+X21heHkpIHsKKwkJCWlmICgtLXkgPD0gMCkgeworCQkJICAgIHkgPSAwOworCQkJfQorCQkgICAgfQorCQkgICAgd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworCQl9CisJCXdyZWZyZXNoKHdpbik7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgd2luLT5fY3VyeCA9IDA7CisgICAgd2luLT5fZmxhZ3MgJj0gfl9XUkFQUEVEOworICAgIGlmICh3aW4tPl9jdXJ5IDwgd2luLT5fbWF4eSkKKwl3aW4tPl9jdXJ5Kys7CisgICAgd3JlZnJlc2god2luKTsKKworICAgIC8qIFJlc3RvcmUgd2l0aCBhIHNpbmdsZSBJL08gY2FsbCwgdG8gZml4IG1pbm9yIGFzeW1tZXRyeSBiZXR3ZWVuCisgICAgICogcmF3L25vcmF3LCBldGMuCisgICAgICovCisgICAgc3AtPl9ubCA9IG9sZG5sOworICAgIHNwLT5fZWNobyA9IG9sZGVjaG87CisgICAgc3AtPl9yYXcgPSBvbGRyYXc7CisgICAgc3AtPl9jYnJlYWsgPSBvbGRjYnJlYWs7CisKKyAgICAodm9pZCkgX25jX3NldF90dHlfbW9kZSgmYnVmKTsKKworICAgICp0bXBzdHIgPSAwOworICAgIGlmIChjb2RlID09IEVSUikgeworCWlmICh0bXBzdHIgPT0gb2xkc3RyKSB7CisJICAgICp0bXBzdHIrKyA9IFdFT0Y7CisJICAgICp0bXBzdHIgPSAwOworCX0KKwlyZXR1cm5Db2RlKEVSUik7CisgICAgfQorCisgICAgVCgoIndnZXRuX3dzdHIgcmV0dXJucyAlcyIsIF9uY192aXN3aWJ1ZihvbGRzdHIpKSk7CisKKyAgICByZXR1cm5Db2RlKE9LKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2hsaW5lX3NldC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfaGxpbmVfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxNzVkZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2hsaW5lX3NldC5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRGlja2V5IDIwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaGxpbmVfc2V0LmMKKyoqCisqKglUaGUgcm91dGluZSB3aGxpbmVfc2V0KCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaGxpbmVfc2V0LmMsdiAxLjIgMjAwMi8wMy8yMyAyMTozNTozNCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aGxpbmVfc2V0KFdJTkRPVyAqd2luLCBjb25zdCBjY2hhcl90ICogY2gsIGludCBuKQoreworICAgIGludCBjb2RlID0gRVJSOworICAgIE5DVVJTRVNfU0laRV9UIHN0YXJ0OworICAgIE5DVVJTRVNfU0laRV9UIGVuZDsKKworICAgIFQoKFRfQ0FMTEVEKCJ3aGxpbmVfc2V0KCVwLCVzLCVkKSIpLCB3aW4sIF90cmFjZWNjaGFyX3QoY2gpLCBuKSk7CisKKyAgICBpZiAod2luKSB7CisJc3RydWN0IGxkYXQgKmxpbmUgPSAmKHdpbi0+X2xpbmVbd2luLT5fY3VyeV0pOworCU5DVVJTRVNfQ0hfVCB3Y2g7CisKKwlzdGFydCA9IHdpbi0+X2N1cng7CisJZW5kID0gc3RhcnQgKyBuIC0gMTsKKwlpZiAoZW5kID4gd2luLT5fbWF4eCkKKwkgICAgZW5kID0gd2luLT5fbWF4eDsKKworCUNIQU5HRURfUkFOR0UobGluZSwgc3RhcnQsIGVuZCk7CisKKwlpZiAoY2ggPT0gMCkKKwkgICAgd2NoID0gKldBQ1NfSExJTkU7CisJZWxzZQorCSAgICB3Y2ggPSAqY2g7CisJd2NoID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisKKwl3aGlsZSAoZW5kID49IHN0YXJ0KSB7CisJICAgIGxpbmUtPnRleHRbZW5kXSA9IHdjaDsKKwkgICAgZW5kLS07CisJfQorCisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfaW5fd2NoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9pbl93Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q5MmUzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfaW5fd2NoLmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEF1dGhvcjogVGhvbWFzIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl9pbl93Y2guYworKioKKyoqCVRoZSByb3V0aW5lIHdpbl93Y2goKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9pbl93Y2guYyx2IDEuNCAyMDA2LzA5LzAzIDE1OjQxOjIyIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dpbl93Y2goV0lORE9XICp3aW4sIGNjaGFyX3QgKndjdmFsKQoreworICAgIGludCByb3csIGNvbDsKKyAgICBpbnQgY29kZSA9IE9LOworCisgICAgVFIoVFJBQ0VfQ0NBTExTLCAoVF9DQUxMRUQoIndpbl93Y2goJXAsJXApIiksIHdpbiwgd2N2YWwpKTsKKyAgICBpZiAod2luICE9IDAKKwkmJiB3Y3ZhbCAhPSAwKSB7CisJZ2V0eXgod2luLCByb3csIGNvbCk7CisKKwkqd2N2YWwgPSB3aW4tPl9saW5lW3Jvd10udGV4dFtjb2xdOworCVRSKFRSQUNFX0NDQUxMUywgKCJkYXRhICVzIiwgX3RyYWNlY2NoYXJfdCh3Y3ZhbCkpKTsKKyAgICB9IGVsc2UgeworCWNvZGUgPSBFUlI7CisgICAgfQorICAgIFRSKFRSQUNFX0NDQUxMUywgKFRfUkVUVVJOKCIlZCIpLCBjb2RlKSk7CisgICAgcmV0dXJuIChjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2luX3djaG5zdHIuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2luX3djaG5zdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWYwNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfaW5fd2NobnN0ci5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBdXRob3I6IFRob21hcyBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfaW5fd2NobnN0ci5jCisqKgorKioJVGhlIHJvdXRpbmUgd2luX3djaG5zdHIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9pbl93Y2huc3RyLmMsdiAxLjcgMjAwNy8wMi8xMSAwMTowMDowMCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aW5fd2NobnN0cihXSU5ET1cgKndpbiwgY2NoYXJfdCAqd2Noc3RyLCBpbnQgbikKK3sKKyAgICBpbnQgY29kZSA9IE9LOworCisgICAgVCgoVF9DQUxMRUQoIndpbl93Y2huc3RyKCVwLCVwLCVkKSIpLCB3aW4sIHdjaHN0ciwgbikpOworICAgIGlmICh3aW4gIT0gMAorCSYmIHdjaHN0ciAhPSAwKSB7CisJTkNVUlNFU19DSF9UICpzcmM7CisJaW50IHJvdywgY29sOworCWludCBqLCBrLCBsaW1pdDsKKworCWdldHl4KHdpbiwgcm93LCBjb2wpOworCWxpbWl0ID0gZ2V0bWF4eCh3aW4pIC0gY29sOworCXNyYyA9ICYod2luLT5fbGluZVtyb3ddLnRleHRbY29sXSk7CisKKwlpZiAobiA8IDApIHsKKwkgICAgbiA9IGxpbWl0OworCX0gZWxzZSBpZiAobiA+IGxpbWl0KSB7CisJICAgIG4gPSBsaW1pdDsKKwl9CisJZm9yIChqID0gayA9IDA7IGogPCBuOyArK2opIHsKKwkgICAgaWYgKGogPT0gMCB8fCAhV2lkZWNFeHQoc3JjW2pdKSB8fCBpc1dpZGVjQmFzZShzcmNbal0pKSB7CisJCXdjaHN0cltrKytdID0gc3JjW2pdOworCSAgICB9CisJfQorCW1lbXNldCgmKHdjaHN0cltrXSksIDAsIHNpemVvZigqd2Noc3RyKSk7CisJVCgoInJlc3VsdCA9ICVzIiwgX25jX3Zpc2NidWYod2Noc3RyLCBuKSkpOworICAgIH0gZWxzZSB7CisJY29kZSA9IEVSUjsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2luc193Y2guYyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2luc193Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2QwNDIwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfaW5zX3djaC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIERpY2tleSAyMDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2luc193Y2guYworKioKKyoqCVRoZSByb3V0aW5lIHdpbnNfd2NoKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfaW5zX3djaC5jLHYgMS44IDIwMDUvMTIvMDMgMjA6MjQ6MTkgdG9tIEV4cCAkIikKKworLyoKKyAqIEluc2VydCB0aGUgZ2l2ZW4gY2hhcmFjdGVyLCB1cGRhdGluZyB0aGUgY3VycmVudCBsb2NhdGlvbiB0byBzaW1wbGlmeQorICogaW5zZXJ0aW5nIGEgc3RyaW5nLgorICovCitzdGF0aWMgaW50CitfbmNfaW5zZXJ0X3djaChXSU5ET1cgKndpbiwgY29uc3QgY2NoYXJfdCAqd2NoKQoreworICAgIGludCBjZWxscyA9IHdjd2lkdGgoQ2hhck9mKENIREVSRUYod2NoKSkpOworICAgIGludCBjZWxsOworCisgICAgaWYgKGNlbGxzIDw9IDApCisJY2VsbHMgPSAxOworCisgICAgaWYgKHdpbi0+X2N1cnggPD0gd2luLT5fbWF4eCkgeworCXN0cnVjdCBsZGF0ICpsaW5lID0gJih3aW4tPl9saW5lW3dpbi0+X2N1cnldKTsKKwlOQ1VSU0VTX0NIX1QgKmVuZCA9ICYobGluZS0+dGV4dFt3aW4tPl9jdXJ4XSk7CisJTkNVUlNFU19DSF9UICp0ZW1wMSA9ICYobGluZS0+dGV4dFt3aW4tPl9tYXh4XSk7CisJTkNVUlNFU19DSF9UICp0ZW1wMiA9IHRlbXAxIC0gY2VsbHM7CisKKwlDSEFOR0VEX1RPX0VPTChsaW5lLCB3aW4tPl9jdXJ4LCB3aW4tPl9tYXh4KTsKKwl3aGlsZSAodGVtcDEgPiBlbmQpCisJICAgICp0ZW1wMS0tID0gKnRlbXAyLS07CisKKwkqdGVtcDEgPSBfbmNfcmVuZGVyKHdpbiwgKndjaCk7CisJZm9yIChjZWxsID0gMTsgY2VsbCA8IGNlbGxzOyArK2NlbGwpIHsKKwkgICAgU2V0V2lkZWNFeHQodGVtcDFbY2VsbF0sIGNlbGwpOworCX0KKworCXdpbi0+X2N1cngrKzsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aW5zX3djaChXSU5ET1cgKndpbiwgY29uc3QgY2NoYXJfdCAqd2NoKQoreworICAgIE5DVVJTRVNfU0laRV9UIG95OworICAgIE5DVVJTRVNfU0laRV9UIG94OworICAgIGludCBjb2RlID0gRVJSOworCisgICAgVCgoVF9DQUxMRUQoIndpbnNfd2NoKCVwLCAlcykiKSwgd2luLCBfdHJhY2VjY2hhcl90KHdjaCkpKTsKKworICAgIGlmICh3aW4gIT0gMCkgeworCW95ID0gd2luLT5fY3VyeTsKKwlveCA9IHdpbi0+X2N1cng7CisKKwljb2RlID0gX25jX2luc2VydF93Y2god2luLCB3Y2gpOworCisJd2luLT5fY3VyeCA9IG94OworCXdpbi0+X2N1cnkgPSBveTsKKwlfbmNfc3luY2hvb2sod2luKTsKKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KKworTkNVUlNFU19FWFBPUlQoaW50KQord2luc19ud3N0cihXSU5ET1cgKndpbiwgY29uc3Qgd2NoYXJfdCAqd3N0ciwgaW50IG4pCit7CisgICAgaW50IGNvZGUgPSBFUlI7CisgICAgTkNVUlNFU19TSVpFX1Qgb3k7CisgICAgTkNVUlNFU19TSVpFX1Qgb3g7CisgICAgY29uc3Qgd2NoYXJfdCAqY3A7CisKKyAgICBUKChUX0NBTExFRCgid2luc19ud3N0ciglcCwlcywlZCkiKSwgd2luLCBfbmNfdmlzd2J1Zm4od3N0ciwgbiksIG4pKTsKKworICAgIGlmICh3aW4gIT0gMAorCSYmIHdzdHIgIT0gMCkgeworCWlmIChuIDwgMSkKKwkgICAgbiA9IHdjc2xlbih3c3RyKTsKKwljb2RlID0gT0s7CisJaWYgKG4gPiAwKSB7CisJICAgIG95ID0gd2luLT5fY3VyeTsKKwkgICAgb3ggPSB3aW4tPl9jdXJ4OworCSAgICBmb3IgKGNwID0gd3N0cjsgKmNwICYmICgoY3AgLSB3c3RyKSA8IG4pOyBjcCsrKSB7CisJCWludCBsZW4gPSB3Y3dpZHRoKCpjcCk7CisKKwkJaWYgKGxlbiAhPSAxIHx8ICFpczhiaXRzKCpjcCkpIHsKKwkJICAgIGNjaGFyX3QgdG1wX2NjaGFyOworCQkgICAgd2NoYXJfdCB0bXBfd2NoYXIgPSAqY3A7CisJCSAgICBtZW1zZXQoJnRtcF9jY2hhciwgMCwgc2l6ZW9mKHRtcF9jY2hhcikpOworCQkgICAgKHZvaWQpIHNldGNjaGFyKCZ0bXBfY2NoYXIsCisJCQkJICAgICZ0bXBfd2NoYXIsCisJCQkJICAgIFdBX05PUk1BTCwKKwkJCQkgICAgMCwKKwkJCQkgICAgKHZvaWQgKikgMCk7CisJCSAgICBjb2RlID0gX25jX2luc2VydF93Y2god2luLCAmdG1wX2NjaGFyKTsKKwkJfSBlbHNlIHsKKwkJICAgIC8qIHRhYnMsIG90aGVyIEFTQ0lJIHN0dWZmICovCisJCSAgICBjb2RlID0gX25jX2luc2VydF9jaCh3aW4sIChjaHR5cGUpICgqY3ApKTsKKwkJfQorCQlpZiAoY29kZSAhPSBPSykKKwkJICAgIGJyZWFrOworCSAgICB9CisKKwkgICAgd2luLT5fY3VyeCA9IG94OworCSAgICB3aW4tPl9jdXJ5ID0gb3k7CisJICAgIF9uY19zeW5jaG9vayh3aW4pOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2lud3N0ci5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfaW53c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwN2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2lud3N0ci5jCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQXV0aG9yOiBUaG9tYXMgRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX2lud3N0ci5jCisqKgorKioJVGhlIHJvdXRpbmVzIHdpbm53c3RyKCkgYW5kIHdpbndzdHIoKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9pbndzdHIuYyx2IDEuNCAyMDA0LzEwLzIzIDIwOjQxOjI4IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3dpbm53c3RyKFdJTkRPVyAqd2luLCB3Y2hhcl90ICp3c3RyLCBpbnQgbikKK3sKKyAgICBpbnQgcm93LCBjb2wsIGlueDsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCBsYXN0ID0gMDsKKyAgICBjY2hhcl90ICp0ZXh0OworICAgIHdjaGFyX3Qgd2NoOworCisgICAgVCgoVF9DQUxMRUQoIndpbm53c3RyKCVwLCVwLCVkKSIpLCB3aW4sIHdzdHIsIG4pKTsKKyAgICBpZiAod3N0ciAhPSAwKSB7CisJaWYgKHdpbikgeworCSAgICBnZXR5eCh3aW4sIHJvdywgY29sKTsKKworCSAgICB0ZXh0ID0gd2luLT5fbGluZVtyb3ddLnRleHQ7CisJICAgIHdoaWxlIChjb3VudCA8IG4gJiYgY291bnQgIT0gRVJSKSB7CisJCWlmICghaXNXaWRlY0V4dCh0ZXh0W2NvbF0pKSB7CisJCSAgICBmb3IgKGlueCA9IDA7IChpbnggPCBDQ0hBUldfTUFYKQorCQkJICYmICgod2NoID0gdGV4dFtjb2xdLmNoYXJzW2lueF0pICE9IDApOworCQkJICsraW54KSB7CisJCQlpZiAoY291bnQgKyAxID4gbikgeworCQkJICAgIGlmICgoY291bnQgPSBsYXN0KSA9PSAwKSB7CisJCQkJY291bnQgPSBFUlI7CS8qIGVycm9yIGlmIHdlIHN0b3JlIG5vdGhpbmcgKi8KKwkJCSAgICB9CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQl3c3RyW2NvdW50KytdID0gd2NoOworCQkgICAgfQorCQl9CisJCWxhc3QgPSBjb3VudDsKKwkJaWYgKCsrY29sID4gd2luLT5fbWF4eCkgeworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKwlpZiAoY291bnQgPiAwKSB7CisJICAgIHdzdHJbY291bnRdID0gJ1wwJzsKKwkgICAgVCgoIndpbm53c3RyIHJldHVybnMgJXMiLCBfbmNfdmlzd2J1Zih3c3RyKSkpOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShjb3VudCk7Cit9CisKKy8qCisgKiBYL09wZW4gc2F5cyB3aW53c3RyKCkgcmV0dXJucyBPSyBpZiBub3QgRVJSLiAgSWYgdGhhdCBpcyBub3QgYSBibHVuZGVyLCBpdAorICogbXVzdCBoYXZlIGEgbnVsbCB0ZXJtaW5hdGlvbiBvbiB0aGUgc3RyaW5nIChzZWUgYWJvdmUpLiAgVW5saWtlIHdpbm5zdHIoKSwKKyAqIGl0IGRvZXMgbm90IGRlZmluZSB3aGF0IGhhcHBlbnMgZm9yIGEgbmVnYXRpdmUgY291bnQgd2l0aCB3aW5ud3N0cigpLgorICovCitOQ1VSU0VTX0VYUE9SVChpbnQpCit3aW53c3RyKFdJTkRPVyAqd2luLCB3Y2hhcl90ICp3c3RyKQoreworICAgIGludCByZXN1bHQgPSBPSzsKKyAgICBUKChUX0NBTExFRCgid2lud3N0ciglcCwlcCkiKSwgd2luLCB3c3RyKSk7CisgICAgaWYgKHdpbm53c3RyKHdpbiwgd3N0ciwgQ0NIQVJXX01BWCAqICh3aW4tPl9tYXh4IC0gd2luLT5fY3VyeCArIDEpKSA9PSBFUlIpCisJcmVzdWx0ID0gRVJSOworICAgIHJldHVybkNvZGUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX2tleV9uYW1lLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9rZXlfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjVmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9rZXlfbmFtZS5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfa2V5X25hbWUuYworKioKKyoqCVRoZSByb3V0aW5lIGtleV9uYW1lKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfa2V5X25hbWUuYyx2IDEuMyAyMDA4LzEwLzExIDIwOjE1OjE0IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1QgY2hhciAqKQora2V5X25hbWUod2NoYXJfdCBjKQoreworICAgIGNjaGFyX3QgbXlfY2NoYXI7CisgICAgd2NoYXJfdCAqbXlfd2NoYXJzOworICAgIHNpemVfdCBsZW47CisKKyAgICAvKiBGSVhNRTogbW92ZSB0byBfbmNfZ2xvYmFscyAqLworICAgIHN0YXRpYyBjaGFyIHJlc3VsdFtNQl9MRU5fTUFYICsgMV07CisKKyAgICBtZW1zZXQoJm15X2NjaGFyLCAwLCBzaXplb2YobXlfY2NoYXIpKTsKKyAgICBteV9jY2hhci5jaGFyc1swXSA9IGM7CisgICAgbXlfY2NoYXIuY2hhcnNbMV0gPSBMJ1wwJzsKKworICAgIG15X3djaGFycyA9IHd1bmN0cmwoJm15X2NjaGFyKTsKKyAgICBsZW4gPSB3Y3N0b21icyhyZXN1bHQsIG15X3djaGFycywgc2l6ZW9mKHJlc3VsdCkgLSAxKTsKKyAgICBpZiAoaXNFSUxTRVEobGVuKSB8fCAobGVuID09IDApKSB7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgcmVzdWx0W2xlbl0gPSAnXDAnOworICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9wZWNob193Y2hhci5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfcGVjaG9fd2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjEyNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfcGVjaG9fd2NoYXIuYwpAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9wZWNob193Y2hhci5jLHYgMS4xIDIwMDQvMDEvMDMgMjE6NDI6MDEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorcGVjaG9fd2NoYXIoV0lORE9XICpwYWQsIGNvbnN0IGNjaGFyX3QgKiB3Y2gpCit7CisgICAgVCgoVF9DQUxMRUQoInBlY2hvX3djaGFyKCVwLCAlcykiKSwgcGFkLCBfdHJhY2VjaF90KHdjaCkpKTsKKworICAgIGlmIChwYWQgPT0gMCkKKwlyZXR1cm5Db2RlKEVSUik7CisKKyAgICBpZiAoIShwYWQtPl9mbGFncyAmIF9JU1BBRCkpCisJcmV0dXJuQ29kZSh3ZWNob193Y2hhcihwYWQsIHdjaCkpOworCisgICAgd2FkZF93Y2gocGFkLCB3Y2gpOworICAgIHByZWZyZXNoKHBhZCwgcGFkLT5fcGFkLl9wYWRfeSwKKwkgICAgIHBhZC0+X3BhZC5fcGFkX3gsCisJICAgICBwYWQtPl9wYWQuX3BhZF90b3AsCisJICAgICBwYWQtPl9wYWQuX3BhZF9sZWZ0LAorCSAgICAgcGFkLT5fcGFkLl9wYWRfYm90dG9tLAorCSAgICAgcGFkLT5fcGFkLl9wYWRfcmlnaHQpOworCisgICAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl9zbGtfd3NldC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfc2xrX3dzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDZiNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfc2xrX3dzZXQuYwpAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJbGliX3Nsa193c2V0LmMKKyAqICAgICAgU2V0IHNvZnQgbGFiZWwgdGV4dC4KKyAqLworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKKyNpZiBIQVZFX1dDVFlQRV9ICisjaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYKKworTU9EVUxFX0lEKCIkSWQ6IGxpYl9zbGtfd3NldC5jLHYgMS4xMSAyMDA1LzAxLzE2IDAxOjAzOjUzIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK3Nsa193c2V0KGludCBpLCBjb25zdCB3Y2hhcl90ICphc3RyLCBpbnQgZm9ybWF0KQoreworICAgIGludCByZXN1bHQgPSBFUlI7CisgICAgc2l6ZV90IGFyZ2xlbjsKKyAgICBjb25zdCB3Y2hhcl90ICpzdHI7CisgICAgY2hhciAqbXlzdHI7CisgICAgbWJzdGF0ZV90IHN0YXRlOworCisgICAgVCgoVF9DQUxMRUQoInNsa193c2V0KCVkLCAlcywgJWQpIiksIGksIF9uY192aXN3YnVmKGFzdHIpLCBmb3JtYXQpKTsKKworICAgIGluaXRfbWIoc3RhdGUpOworICAgIHN0ciA9IGFzdHI7CisgICAgaWYgKChhcmdsZW4gPSB3Y3NydG9tYnMoTlVMTCwgJnN0ciwgMCwgJnN0YXRlKSkgIT0gKHNpemVfdCkgLTEpIHsKKwlpZiAoKG15c3RyID0gKGNoYXIgKikgX25jX2RvYWxsb2MoMCwgYXJnbGVuICsgMSkpICE9IDApIHsKKwkgICAgc3RyID0gYXN0cjsKKwkgICAgaWYgKHdjc3J0b21icyhteXN0ciwgJnN0ciwgYXJnbGVuLCAmc3RhdGUpICE9IChzaXplX3QpIC0xKSB7CisJCS8qIGdsaWJjIGRvY3VtZW50YXRpb24gY2xhaW1zIHRoYXQgdGhlIHRlcm1pbmF0aW5nIEwnXDAnCisJCSAqIGlzIHdyaXR0ZW4sIGJ1dCBpdCBpcyBub3QuLi4KKwkJICovCisJCW15c3RyW2FyZ2xlbl0gPSAwOworCQlyZXN1bHQgPSBzbGtfc2V0KGksIG15c3RyLCBmb3JtYXQpOworCSAgICB9CisJICAgIGZyZWUobXlzdHIpOworCX0KKyAgICB9CisgICAgcmV0dXJuQ29kZShyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfdW5nZXRfd2NoLmMgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl91bmdldF93Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJjNGEwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfdW5nZXRfd2NoLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDIwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisqKglsaWJfdW5nZXRfd2NoLmMKKyoqCisqKglUaGUgcm91dGluZSB1bmdldF93Y2goKS4KKyoqCisqLworCisjaW5jbHVkZSA8Y3Vyc2VzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl91bmdldF93Y2guYyx2IDEuMTAgMjAwOC8wNi8wNyAxNDo1MDozNyB0b20gRXhwICQiKQorCisvKgorICogV3JhcHBlciBmb3Igd2NydG9tYigpIHdoaWNoIG9idGFpbnMgdGhlIGxlbmd0aCBuZWVkZWQgZm9yIHRoZSBnaXZlbgorICogd2lkZS1jaGFyYWN0ZXIgJ3NvdXJjZScuCisgKi8KK05DVVJTRVNfRVhQT1JUKHNpemVfdCkKK19uY193Y3J0b21iKGNoYXIgKnRhcmdldCwgd2NoYXJfdCBzb3VyY2UsIG1ic3RhdGVfdCAqIHN0YXRlKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAodGFyZ2V0ID09IDApIHsKKwl3Y2hhcl90IHRlbXBbMl07CisJY29uc3Qgd2NoYXJfdCAqdGVtcHAgPSB0ZW1wOworCXRlbXBbMF0gPSBzb3VyY2U7CisJdGVtcFsxXSA9IDA7CisJcmVzdWx0ID0gd2NzcnRvbWJzKE5VTEwsICZ0ZW1wcCwgMCwgc3RhdGUpOworICAgIH0gZWxzZSB7CisJcmVzdWx0ID0gd2NydG9tYih0YXJnZXQsIHNvdXJjZSwgc3RhdGUpOworICAgIH0KKyAgICBpZiAoIWlzRUlMU0VRKHJlc3VsdCkgJiYgKHJlc3VsdCA9PSAwKSkKKwlyZXN1bHQgPSAxOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05DVVJTRVNfRVhQT1JUKGludCkKK3VuZ2V0X3djaChjb25zdCB3Y2hhcl90IHdjaCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gT0s7CisgICAgbWJzdGF0ZV90IHN0YXRlOworICAgIHNpemVfdCBsZW5ndGg7CisgICAgaW50IG47CisKKyAgICBUKChUX0NBTExFRCgidW5nZXRfd2NoKCUjbHgpIiksICh1bnNpZ25lZCBsb25nKSB3Y2gpKTsKKworICAgIGluaXRfbWIoc3RhdGUpOworICAgIGxlbmd0aCA9IF9uY193Y3J0b21iKDAsIHdjaCwgJnN0YXRlKTsKKworICAgIGlmIChsZW5ndGggIT0gKHNpemVfdCkgKC0xKQorCSYmIGxlbmd0aCAhPSAwKSB7CisJY2hhciAqc3RyaW5nOworCisJaWYgKChzdHJpbmcgPSAoY2hhciAqKSBtYWxsb2MobGVuZ3RoKSkgIT0gMCkgeworCSAgICBpbml0X21iKHN0YXRlKTsKKwkgICAgd2NydG9tYihzdHJpbmcsIHdjaCwgJnN0YXRlKTsKKworCSAgICBmb3IgKG4gPSAoaW50KSAobGVuZ3RoIC0gMSk7IG4gPj0gMDsgLS1uKSB7CisJCWlmIChfbmNfdW5nZXRjaChTUCwgc3RyaW5nW25dKSAhPSBPSykgeworCQkgICAgcmVzdWx0ID0gRVJSOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBmcmVlKHN0cmluZyk7CisJfSBlbHNlIHsKKwkgICAgcmVzdWx0ID0gRVJSOworCX0KKyAgICB9IGVsc2UgeworCXJlc3VsdCA9IEVSUjsKKyAgICB9CisKKyAgICByZXR1cm5Db2RlKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl92aWRfYXR0ci5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfdmlkX2F0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM2NzllCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfdmlkX2F0dHIuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisjaW5jbHVkZSA8dGVybS5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3ZpZF9hdHRyLmMsdiAxLjUgMjAwNy8wNi8zMCAyMjowMzowMiB0b20gRXhwICQiKQorCisjZGVmaW5lIGRvUHV0KG1vZGUpIFRQVVRTX1RSQUNFKCNtb2RlKTsgdHB1dHMobW9kZSwgMSwgb3V0YykKKworI2RlZmluZSBUdXJuT24obWFzayxtb2RlKSBcCisJaWYgKCh0dXJuX29uICYgbWFzaykgJiYgbW9kZSkgeyBkb1B1dChtb2RlKTsgfQorCisjZGVmaW5lIFR1cm5PZmYobWFzayxtb2RlKSBcCisJaWYgKCh0dXJuX29mZiAmIG1hc2spICYmIG1vZGUpIHsgZG9QdXQobW9kZSk7IHR1cm5fb2ZmICY9IH5tYXNrOyB9CisKKwkvKiBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHNjcmVlbiwgYXNzdW1lIHdlICpjYW4qIGRvIGNvbG9yICovCisjZGVmaW5lIFNldENvbG9yc0lmKHdoeSwgb2xkX2F0dHIsIG9sZF9wYWlyKSBcCisJaWYgKGNhbl9jb2xvciAmJiAod2h5KSkgeyBcCisJCVRSKFRSQUNFX0FUVFJTLCAoIm9sZCBwYWlyID0gJWQgLS0gbmV3IHBhaXIgPSAlZCIsIG9sZF9wYWlyLCBwYWlyKSk7IFwKKwkJaWYgKChwYWlyICE9IG9sZF9wYWlyKSBcCisJCSB8fCAoZml4X3BhaXIwICYmIChwYWlyID09IDApKSBcCisJCSB8fCAocmV2ZXJzZSBeICgob2xkX2F0dHIgJiBBX1JFVkVSU0UpICE9IDApKSkgeyBcCisJCQlfbmNfZG9fY29sb3Iob2xkX3BhaXIsIHBhaXIsIHJldmVyc2UsIG91dGMpOyBcCisJCX0gXAorCX0KKworI2RlZmluZSBzZXRfY29sb3IobW9kZSwgcGFpcikgbW9kZSAmPSBBTExfQlVUX0NPTE9SOyBtb2RlIHw9IENPTE9SX1BBSVIocGFpcikKKworTkNVUlNFU19FWFBPUlQoaW50KQordmlkX3B1dHMoYXR0cl90IG5ld21vZGUsIHNob3J0IHBhaXIsIHZvaWQgKm9wdHMgR0NDX1VOVVNFRCwgaW50ICgqb3V0YykgKGludCkpCit7CisjaWYgTkNVUlNFU19FWFRfQ09MT1JTCisgICAgc3RhdGljIGF0dHJfdCBwcmV2aW91c19hdHRyID0gQV9OT1JNQUw7CisgICAgc3RhdGljIGludCBwcmV2aW91c19wYWlyID0gMDsKKworICAgIGF0dHJfdCB0dXJuX29uLCB0dXJuX29mZjsKKyAgICBib29sIHJldmVyc2UgPSBGQUxTRTsKKyAgICBib29sIGNhbl9jb2xvciA9IChTUCA9PSAwIHx8IFNQLT5fY29sb3Jvbik7CisjaWYgTkNVUlNFU19FWFRfRlVOQ1MKKyAgICBib29sIGZpeF9wYWlyMCA9IChTUCAhPSAwICYmIFNQLT5fY29sb3JvbiAmJiAhU1AtPl9kZWZhdWx0X2NvbG9yKTsKKyNlbHNlCisjZGVmaW5lIGZpeF9wYWlyMCBGQUxTRQorI2VuZGlmCisKKyAgICBuZXdtb2RlICY9IEFfQVRUUklCVVRFUzsKKyAgICBUKChUX0NBTExFRCgidmlkX3B1dHMoJXMsJWQpIiksIF90cmFjZWF0dHIobmV3bW9kZSksIHBhaXIpKTsKKworICAgIC8qIHRoaXMgYWxsb3dzIHVzIHRvIGdvIG9uIHdoZXRoZXIgb3Igbm90IG5ld3Rlcm0oKSBoYXMgYmVlbiBjYWxsZWQgKi8KKyAgICBpZiAoU1ApIHsKKwlwcmV2aW91c19hdHRyID0gQXR0ck9mKFNDUkVFTl9BVFRSUyhTUCkpOworCXByZXZpb3VzX3BhaXIgPSBHZXRQYWlyKFNDUkVFTl9BVFRSUyhTUCkpOworICAgIH0KKworICAgIFRSKFRSQUNFX0FUVFJTLCAoInByZXZpb3VzIGF0dHJpYnV0ZSB3YXMgJXMsICVkIiwKKwkJICAgICBfdHJhY2VhdHRyKHByZXZpb3VzX2F0dHIpLCBwcmV2aW91c19wYWlyKSk7CisKKyNpZiAhVVNFX1hNQ19TVVBQT1JUCisgICAgaWYgKChTUCAhPSAwKQorCSYmIChtYWdpY19jb29raWVfZ2xpdGNoID4gMCkpCisJbmV3bW9kZSAmPSB+KFNQLT5feG1jX3N1cHByZXNzKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBJZiB3ZSBoYXZlIGEgdGVybWluYWwgdGhhdCBjYW5ub3QgY29tYmluZSBjb2xvciB3aXRoIHZpZGVvCisgICAgICogYXR0cmlidXRlcywgdXNlIHRoZSBjb2xvcnMgaW4gcHJlZmVyZW5jZS4KKyAgICAgKi8KKyAgICBpZiAoKHBhaXIgIT0gMAorCSB8fCBmaXhfcGFpcjApCisJJiYgKG5vX2NvbG9yX3ZpZGVvID4gMCkpIHsKKwkvKgorCSAqIElmIHdlIGhhZCBjaG9zZW4gdGhlIEFfeHh4IGRlZmluaXRpb25zIHRvIGNvcnJlc3BvbmQgdG8gdGhlCisJICogbm9fY29sb3JfdmlkZW8gbWFzaywgd2UgY291bGQgc2ltcGx5IHNoaWZ0IGl0IHVwIGFuZCBtYXNrIG9mZiB0aGUKKwkgKiBhdHRyaWJ1dGVzLiAgQnV0IHdlIGRpZCBub3QgKGFjdHVhbGx5IGNvcGllZCBTb2xhcmlzJyBkZWZpbml0aW9ucykuCisJICogSG93ZXZlciwgdGhpcyBpcyBzdGlsbCBzaW1wbGVyL2Zhc3RlciB0aGFuIGEgbG9va3VwIHRhYmxlLgorCSAqCisJICogVGhlIDYzIGNvcnJlc3BvbmRzIHRvIEFfU1RBTkRPVVQsIEFfVU5ERVJMSU5FLCBBX1JFVkVSU0UsIEFfQkxJTkssCisJICogQV9ESU0sIEFfQk9MRCB3aGljaCBhcmUgMToxIHdpdGggbm9fY29sb3JfdmlkZW8uICBUaGUgYml0cyB0aGF0CisJICogY29ycmVzcG9uZCB0byBBX0lOVklTLCBBX1BST1RFQ1QgKDE5MikgbXVzdCBiZSBzaGlmdGVkIHVwIDEgYW5kCisJICogQV9BTFRDSEFSU0VUICgyNTYpIGRvd24gMiB0byBsaW5lIHVwLiAgV2UgdXNlIHRoZSBOQ1VSU0VTX0JJVFMKKwkgKiBtYWNybyBzbyB0aGlzIHdpbGwgd29yayBwcm9wZXJseSBmb3IgdGhlIHdpZGUtY2hhcmFjdGVyIGxheW91dC4KKwkgKi8KKwl1bnNpZ25lZCB2YWx1ZSA9IG5vX2NvbG9yX3ZpZGVvOworCWF0dHJfdCBtYXNrID0gTkNVUlNFU19CSVRTKCh2YWx1ZSAmIDYzKQorCQkJCSAgIHwgKCh2YWx1ZSAmIDE5MikgPDwgMSkKKwkJCQkgICB8ICgodmFsdWUgJiAyNTYpID4+IDIpLCA4KTsKKworCWlmICgobWFzayAmIEFfUkVWRVJTRSkgIT0gMAorCSAgICAmJiAobmV3bW9kZSAmIEFfUkVWRVJTRSkgIT0gMCkgeworCSAgICByZXZlcnNlID0gVFJVRTsKKwkgICAgbWFzayAmPSB+QV9SRVZFUlNFOworCX0KKwluZXdtb2RlICY9IH5tYXNrOworICAgIH0KKworICAgIGlmIChuZXdtb2RlID09IHByZXZpb3VzX2F0dHIKKwkmJiBwYWlyID09IHByZXZpb3VzX3BhaXIpCisJcmV0dXJuQ29kZShPSyk7CisKKyAgICBpZiAocmV2ZXJzZSkgeworCW5ld21vZGUgJj0gfkFfUkVWRVJTRTsKKyAgICB9CisKKyAgICB0dXJuX29mZiA9ICh+bmV3bW9kZSAmIHByZXZpb3VzX2F0dHIpICYgQUxMX0JVVF9DT0xPUjsKKyAgICB0dXJuX29uID0gKG5ld21vZGUgJiB+cHJldmlvdXNfYXR0cikgJiBBTExfQlVUX0NPTE9SOworCisgICAgU2V0Q29sb3JzSWYoKChwYWlyID09IDApICYmICFmaXhfcGFpcjApLCBwcmV2aW91c19hdHRyLCBwcmV2aW91c19wYWlyKTsKKworICAgIGlmIChuZXdtb2RlID09IEFfTk9STUFMKSB7CisJaWYgKChwcmV2aW91c19hdHRyICYgQV9BTFRDSEFSU0VUKSAmJiBleGl0X2FsdF9jaGFyc2V0X21vZGUpIHsKKwkgICAgZG9QdXQoZXhpdF9hbHRfY2hhcnNldF9tb2RlKTsKKwkgICAgcHJldmlvdXNfYXR0ciAmPSB+QV9BTFRDSEFSU0VUOworCX0KKwlpZiAocHJldmlvdXNfYXR0cikgeworCSAgICBpZiAoZXhpdF9hdHRyaWJ1dGVfbW9kZSkgeworCQlkb1B1dChleGl0X2F0dHJpYnV0ZV9tb2RlKTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKCFTUCB8fCBTUC0+X3VzZV9ybXVsKSB7CisJCSAgICBUdXJuT2ZmKEFfVU5ERVJMSU5FLCBleGl0X3VuZGVybGluZV9tb2RlKTsKKwkJfQorCQlpZiAoIVNQIHx8IFNQLT5fdXNlX3Jtc28pIHsKKwkJICAgIFR1cm5PZmYoQV9TVEFORE9VVCwgZXhpdF9zdGFuZG91dF9tb2RlKTsKKwkJfQorCSAgICB9CisJICAgIHByZXZpb3VzX2F0dHIgJj0gQUxMX0JVVF9DT0xPUjsKKwkgICAgcHJldmlvdXNfcGFpciA9IDA7CisJfQorCisJU2V0Q29sb3JzSWYoKHBhaXIgIT0gMCkgfHwgZml4X3BhaXIwLCBwcmV2aW91c19hdHRyLCBwcmV2aW91c19wYWlyKTsKKyAgICB9IGVsc2UgaWYgKHNldF9hdHRyaWJ1dGVzKSB7CisJaWYgKHR1cm5fb24gfHwgdHVybl9vZmYpIHsKKwkgICAgVFBVVFNfVFJBQ0UoInNldF9hdHRyaWJ1dGVzIik7CisJICAgIHRwdXRzKFRQQVJNXzkoc2V0X2F0dHJpYnV0ZXMsCisJCQkgIChuZXdtb2RlICYgQV9TVEFORE9VVCkgIT0gMCwKKwkJCSAgKG5ld21vZGUgJiBBX1VOREVSTElORSkgIT0gMCwKKwkJCSAgKG5ld21vZGUgJiBBX1JFVkVSU0UpICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9CTElOSykgIT0gMCwKKwkJCSAgKG5ld21vZGUgJiBBX0RJTSkgIT0gMCwKKwkJCSAgKG5ld21vZGUgJiBBX0JPTEQpICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9JTlZJUykgIT0gMCwKKwkJCSAgKG5ld21vZGUgJiBBX1BST1RFQ1QpICE9IDAsCisJCQkgIChuZXdtb2RlICYgQV9BTFRDSEFSU0VUKSAhPSAwKSwgMSwgb3V0Yyk7CisJICAgIHByZXZpb3VzX2F0dHIgJj0gQUxMX0JVVF9DT0xPUjsKKwkgICAgcHJldmlvdXNfcGFpciA9IDA7CisJfQorCVNldENvbG9yc0lmKChwYWlyICE9IDApIHx8IGZpeF9wYWlyMCwgcHJldmlvdXNfYXR0ciwgcHJldmlvdXNfcGFpcik7CisgICAgfSBlbHNlIHsKKworCVRSKFRSQUNFX0FUVFJTLCAoInR1cm5pbmcgJXMgb2ZmIiwgX3RyYWNlYXR0cih0dXJuX29mZikpKTsKKworCVR1cm5PZmYoQV9BTFRDSEFSU0VULCBleGl0X2FsdF9jaGFyc2V0X21vZGUpOworCisJaWYgKCFTUCB8fCBTUC0+X3VzZV9ybXVsKSB7CisJICAgIFR1cm5PZmYoQV9VTkRFUkxJTkUsIGV4aXRfdW5kZXJsaW5lX21vZGUpOworCX0KKworCWlmICghU1AgfHwgU1AtPl91c2Vfcm1zbykgeworCSAgICBUdXJuT2ZmKEFfU1RBTkRPVVQsIGV4aXRfc3RhbmRvdXRfbW9kZSk7CisJfQorCisJaWYgKHR1cm5fb2ZmICYmIGV4aXRfYXR0cmlidXRlX21vZGUpIHsKKwkgICAgZG9QdXQoZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisJICAgIHR1cm5fb24gfD0gKG5ld21vZGUgJiBBTExfQlVUX0NPTE9SKTsKKwkgICAgcHJldmlvdXNfYXR0ciAmPSBBTExfQlVUX0NPTE9SOworCSAgICBwcmV2aW91c19wYWlyID0gMDsKKwl9CisJU2V0Q29sb3JzSWYoKHBhaXIgIT0gMCkgfHwgZml4X3BhaXIwLCBwcmV2aW91c19hdHRyLCBwcmV2aW91c19wYWlyKTsKKworCVRSKFRSQUNFX0FUVFJTLCAoInR1cm5pbmcgJXMgb24iLCBfdHJhY2VhdHRyKHR1cm5fb24pKSk7CisJLyogKklOREVOVC1PRkYqICovCisJVHVybk9uKEFfQUxUQ0hBUlNFVCwJZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSk7CisJVHVybk9uKEFfQkxJTkssCQllbnRlcl9ibGlua19tb2RlKTsKKwlUdXJuT24oQV9CT0xELAkJZW50ZXJfYm9sZF9tb2RlKTsKKwlUdXJuT24oQV9ESU0sCQllbnRlcl9kaW1fbW9kZSk7CisJVHVybk9uKEFfUkVWRVJTRSwJZW50ZXJfcmV2ZXJzZV9tb2RlKTsKKwlUdXJuT24oQV9TVEFORE9VVCwJZW50ZXJfc3RhbmRvdXRfbW9kZSk7CisJVHVybk9uKEFfUFJPVEVDVCwJZW50ZXJfcHJvdGVjdGVkX21vZGUpOworCVR1cm5PbihBX0lOVklTLAkJZW50ZXJfc2VjdXJlX21vZGUpOworCVR1cm5PbihBX1VOREVSTElORSwJZW50ZXJfdW5kZXJsaW5lX21vZGUpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJVHVybk9uKEFfSE9SSVpPTlRBTCwJZW50ZXJfaG9yaXpvbnRhbF9obF9tb2RlKTsKKwlUdXJuT24oQV9MRUZULAkJZW50ZXJfbGVmdF9obF9tb2RlKTsKKwlUdXJuT24oQV9MT1csCQllbnRlcl9sb3dfaGxfbW9kZSk7CisJVHVybk9uKEFfUklHSFQsCQllbnRlcl9yaWdodF9obF9tb2RlKTsKKwlUdXJuT24oQV9UT1AsCQllbnRlcl90b3BfaGxfbW9kZSk7CisJVHVybk9uKEFfVkVSVElDQUwsCWVudGVyX3ZlcnRpY2FsX2hsX21vZGUpOworI2VuZGlmCisJLyogKklOREVOVC1PTiogKi8KKworICAgIH0KKworICAgIGlmIChyZXZlcnNlKQorCW5ld21vZGUgfD0gQV9SRVZFUlNFOworCisgICAgaWYgKFNQKSB7CisJU2V0QXR0cihTQ1JFRU5fQVRUUlMoU1ApLCBuZXdtb2RlKTsKKwlTZXRQYWlyKFNDUkVFTl9BVFRSUyhTUCksIHBhaXIpOworICAgIH0gZWxzZSB7CisJcHJldmlvdXNfYXR0ciA9IG5ld21vZGU7CisJcHJldmlvdXNfcGFpciA9IHBhaXI7CisgICAgfQorCisgICAgcmV0dXJuQ29kZShPSyk7CisjZWxzZQorICAgIFQoKFRfQ0FMTEVEKCJ2aWRfcHV0cyglcywlZCkiKSwgX3RyYWNlYXR0cihuZXdtb2RlKSwgcGFpcikpOworICAgIHNldF9jb2xvcihuZXdtb2RlLCBwYWlyKTsKKyAgICByZXR1cm5Db2RlKHZpZHB1dHMobmV3bW9kZSwgb3V0YykpOworI2VuZGlmCit9CisKKyN1bmRlZiB2aWRfYXR0cgorTkNVUlNFU19FWFBPUlQoaW50KQordmlkX2F0dHIoYXR0cl90IG5ld21vZGUsIHNob3J0IHBhaXIsIHZvaWQgKm9wdHMpCit7CisgICAgVCgoVF9DQUxMRUQoInZpZF9hdHRyKCVzLCVkKSIpLCBfdHJhY2VhdHRyKG5ld21vZGUpLCBwYWlyKSk7CisgICAgcmV0dXJuQ29kZSh2aWRfcHV0cyhuZXdtb2RlLCBwYWlyLCBvcHRzLCBfbmNfb3V0Y2gpKTsKK30KKworLyoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgc2FtZSBtYXNrIHZhbHVlcyBmb3IgQV94eHggYW5kIFdBX3h4eCwgc28KKyAqIHdlIGNhbiB1c2UgdGVybWF0dHJzKCkgZm9yIHBhcnQgb2YgdGhlIGxvZ2ljLgorICovCitOQ1VSU0VTX0VYUE9SVChhdHRyX3QpCit0ZXJtX2F0dHJzKHZvaWQpCit7CisgICAgYXR0cl90IGF0dHJzOworCisgICAgVCgoVF9DQUxMRUQoInRlcm1fYXR0cnMoKSIpKSk7CisgICAgYXR0cnMgPSB0ZXJtYXR0cnMoKTsKKworICAgIC8qIHRoZXNlIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3Igd2lkZS1jaGFyYWN0ZXIgbW9kZSAqLworICAgIGlmIChlbnRlcl9ob3Jpem9udGFsX2hsX21vZGUpCisJYXR0cnMgfD0gV0FfSE9SSVpPTlRBTDsKKyAgICBpZiAoZW50ZXJfbGVmdF9obF9tb2RlKQorCWF0dHJzIHw9IFdBX0xFRlQ7CisgICAgaWYgKGVudGVyX2xvd19obF9tb2RlKQorCWF0dHJzIHw9IFdBX0xPVzsKKyAgICBpZiAoZW50ZXJfcmlnaHRfaGxfbW9kZSkKKwlhdHRycyB8PSBXQV9SSUdIVDsKKyAgICBpZiAoZW50ZXJfdG9wX2hsX21vZGUpCisJYXR0cnMgfD0gV0FfVE9QOworICAgIGlmIChlbnRlcl92ZXJ0aWNhbF9obF9tb2RlKQorCWF0dHJzIHw9IFdBX1ZFUlRJQ0FMOworCisgICAgcmV0dXJuQXR0cihhdHRycyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl92bGluZV9zZXQuYyBiL25jdXJzZXMtNS43L25jdXJzZXMvd2lkZWNoYXIvbGliX3ZsaW5lX3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNDJkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl92bGluZV9zZXQuYwpAQCAtMCwwICsxLDc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIERpY2tleSAyMDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKioJbGliX3ZsaW5lX3NldC5jCisqKgorKioJVGhlIHJvdXRpbmUgd3ZsaW5lX3NldCgpLgorKioKKyovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorCitNT0RVTEVfSUQoIiRJZDogbGliX3ZsaW5lX3NldC5jLHYgMS4yIDIwMDIvMDMvMjMgMjE6MzY6MDEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQord3ZsaW5lX3NldChXSU5ET1cgKndpbiwgY29uc3QgY2NoYXJfdCAqIGNoLCBpbnQgbikKK3sKKyAgICBpbnQgY29kZSA9IEVSUjsKKyAgICBOQ1VSU0VTX1NJWkVfVCByb3csIGNvbDsKKyAgICBOQ1VSU0VTX1NJWkVfVCBlbmQ7CisKKyAgICBUKChUX0NBTExFRCgid3ZsaW5lKCVwLCVzLCVkKSIpLCB3aW4sIF90cmFjZWNjaGFyX3QoY2gpLCBuKSk7CisKKyAgICBpZiAod2luKSB7CisJTkNVUlNFU19DSF9UIHdjaDsKKwlyb3cgPSB3aW4tPl9jdXJ5OworCWNvbCA9IHdpbi0+X2N1cng7CisJZW5kID0gcm93ICsgbiAtIDE7CisJaWYgKGVuZCA+IHdpbi0+X21heHkpCisJICAgIGVuZCA9IHdpbi0+X21heHk7CisKKwlpZiAoY2ggPT0gMCkKKwkgICAgd2NoID0gKldBQ1NfVkxJTkU7CisJZWxzZQorCSAgICB3Y2ggPSAqY2g7CisJd2NoID0gX25jX3JlbmRlcih3aW4sIHdjaCk7CisKKwl3aGlsZSAoZW5kID49IHJvdykgeworCSAgICBzdHJ1Y3QgbGRhdCAqbGluZSA9ICYod2luLT5fbGluZVtlbmRdKTsKKwkgICAgbGluZS0+dGV4dFtjb2xdID0gd2NoOworCSAgICBDSEFOR0VEX0NFTEwobGluZSwgY29sKTsKKwkgICAgZW5kLS07CisJfQorCisJX25jX3N5bmNob29rKHdpbik7CisJY29kZSA9IE9LOworICAgIH0KKyAgICByZXR1cm5Db2RlKGNvZGUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfd2Fjcy5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfd2Fjcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlODkzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl93YWNzLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRGlja2V5IDIwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJzZXMucHJpdi5oPgorI2luY2x1ZGUgPHRlcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IGxpYl93YWNzLmMsdiAxLjcgMjAwNi8xMi8xNyAxNToxNjoxNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVF9WQVIoY2NoYXJfdCkgKiBfbmNfd2FjcyA9IDA7CisKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfaW5pdF93YWNzKHZvaWQpCit7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50CW1hcDsKKwlpbnQJdmFsdWVbMl07CisgICAgfSB0YWJsZVtdID0geworCS8qIFZUMTAwIHN5bWJvbHMgKi8KKwl7ICdsJywJeyAnKycsCTB4MjUwYyB9fSwJLyogdXBwZXIgbGVmdCBjb3JuZXIgKi8KKwl7ICdtJywJeyAnKycsCTB4MjUxNCB9fSwJLyogbG93ZXIgbGVmdCBjb3JuZXIgKi8KKwl7ICdrJywJeyAnKycsCTB4MjUxMCB9fSwJLyogdXBwZXIgcmlnaHQgY29ybmVyICovCisJeyAnaicsCXsgJysnLAkweDI1MTggfX0sCS8qIGxvd2VyIHJpZ2h0IGNvcm5lciAqLworCXsgJ3QnLAl7ICcrJywJMHgyNTFjIH19LAkvKiB0ZWUgcG9pbnRpbmcgbGVmdCAqLworCXsgJ3UnLAl7ICcrJywJMHgyNTI0IH19LAkvKiB0ZWUgcG9pbnRpbmcgcmlnaHQgKi8KKwl7ICd2JywJeyAnKycsCTB4MjUzNCB9fSwJLyogdGVlIHBvaW50aW5nIHVwICovCisJeyAndycsCXsgJysnLAkweDI1MmMgfX0sCS8qIHRlZSBwb2ludGluZyBkb3duICovCisJeyAncScsCXsgJy0nLAkweDI1MDAgfX0sCS8qIGhvcml6b250YWwgbGluZSAqLworCXsgJ3gnLAl7ICd8JywJMHgyNTAyIH19LAkvKiB2ZXJ0aWNhbCBsaW5lICovCisJeyAnbicsCXsgJysnLAkweDI1M2MgfX0sCS8qIGxhcmdlIHBsdXMgb3IgY3Jvc3NvdmVyICovCisJeyAnbycsCXsgJ34nLAkweDIzYmEgfX0sCS8qIHNjYW4gbGluZSAxICovCisJeyAncycsCXsgJ18nLAkweDIzYmQgfX0sCS8qIHNjYW4gbGluZSA5ICovCisJeyAnYCcsCXsgJysnLAkweDI1YzYgfX0sCS8qIGRpYW1vbmQgKi8KKwl7ICdhJywJeyAnOicsCTB4MjU5MiB9fSwJLyogY2hlY2tlciBib2FyZCAoc3RpcHBsZSkgKi8KKwl7ICdmJywJeyAnXCcnLAkweDAwYjAgfX0sCS8qIGRlZ3JlZSBzeW1ib2wgKi8KKwl7ICdnJywJeyAnIycsCTB4MDBiMSB9fSwJLyogcGx1cy9taW51cyAqLworCXsgJ34nLAl7ICdvJywJMHgwMGI3IH19LAkvKiBidWxsZXQgKi8KKwkvKiBUZWxldHlwZSA1NDEwdjEgc3ltYm9scyAqLworCXsgJywnLAl7ICc8JywJMHgyMTkwIH19LAkvKiBhcnJvdyBwb2ludGluZyBsZWZ0ICovCisJeyAnKycsCXsgJz4nLAkweDIxOTIgfX0sCS8qIGFycm93IHBvaW50aW5nIHJpZ2h0ICovCisJeyAnLicsCXsgJ3YnLAkweDIxOTMgfX0sCS8qIGFycm93IHBvaW50aW5nIGRvd24gKi8KKwl7ICctJywJeyAnXicsCTB4MjE5MSB9fSwJLyogYXJyb3cgcG9pbnRpbmcgdXAgKi8KKwl7ICdoJywJeyAnIycsCTB4MjU5MiB9fSwJLyogYm9hcmQgb2Ygc3F1YXJlcyAqLworCXsgJ2knLAl7ICcjJywJMHgyNjAzIH19LAkvKiBsYW50ZXJuIHN5bWJvbCAqLworCXsgJzAnLAl7ICcjJywJMHgyNWFlIH19LAkvKiBzb2xpZCBzcXVhcmUgYmxvY2sgKi8KKwkvKiB0aGVzZSBkZWZhdWx0cyB3ZXJlIGludmVudGVkIGZvciBuY3Vyc2VzICovCisJeyAncCcsCXsgJy0nLAkweDIzYmIgfX0sCS8qIHNjYW4gbGluZSAzICovCisJeyAncicsCXsgJy0nLAkweDIzYmMgfX0sCS8qIHNjYW4gbGluZSA3ICovCisJeyAneScsCXsgJzwnLAkweDIyNjQgfX0sCS8qIGxlc3MtdGhhbi1vci1lcXVhbC10byAqLworCXsgJ3onLAl7ICc+JywJMHgyMjY1IH19LAkvKiBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8gKi8KKwl7ICd7JywJeyAnKicsCTB4MDNjMCB9fSwJLyogZ3JlZWsgcGkgKi8KKwl7ICd8JywJeyAnIScsCTB4MjI2MCB9fSwJLyogbm90LWVxdWFsICovCisJeyAnfScsCXsgJ2YnLAkweDAwYTMgfX0sCS8qIHBvdW5kLXN0ZXJsaW5nIHN5bWJvbCAqLworICAgIH07CisgICAgLyogKklOREVOVC1PTiogKi8KKworICAgIHVuc2lnbmVkIG4sIG07CisgICAgaW50IGFjdGl2ZSA9IF9uY191bmljb2RlX2xvY2FsZSgpOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSdyZSBydW5uaW5nIGluIGEgVVRGLTggbG9jYWxlLCB3aWxsIHVzZSB0aGUgVW5pY29kZSBlcXVpdmFsZW50cworICAgICAqIHJhdGhlciB0aGFuIHRoZSB0ZXJtaW5mbyBpbmZvcm1hdGlvbi4gIEFjdHVhbGx5IHRoZSB0ZXJtaW5mbyBzaG91bGQKKyAgICAgKiBiZSB0aGUgcnVsZSwgYnV0IHRoZXJlIGFyZSBwZW9wbGUgd2hvIGFyZSBvZmZlbmRlZCBieSB0aGUgbm90aW9uIHRoYXQKKyAgICAgKiBhIFVuaWNvZGUtY2FwYWJsZSB0ZXJtaW5hbCB3b3VsZCBoYXZlIHNvbWV0aGluZyByZXNlbWJsaW5nIGEgbW9kZS4KKyAgICAgKiBTbyB0aGUgc21hY3Mvcm1hY3MgbWF5IGJlIGRpc2FibGVkIC0tIHNvbWV0aW1lLgorICAgICAqLworICAgIFQoKCJpbml0aWFsaXppbmcgV0lERS1BQ1MgbWFwIChVbmljb2RlIGlzJXMgYWN0aXZlKSIsCisgICAgICAgYWN0aXZlID8gIiIgOiAiIG5vdCIpKTsKKworICAgIF9uY193YWNzID0gdHlwZUNhbGxvYyhjY2hhcl90LCBBQ1NfTEVOKTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRhYmxlKTsgKytuKSB7CisJaW50IHdpZGUgPSB3Y3dpZHRoKHRhYmxlW25dLnZhbHVlW2FjdGl2ZV0pOworCisJbSA9IHRhYmxlW25dLm1hcDsKKwlpZiAoYWN0aXZlICYmICh3aWRlID09IDEpKSB7CisJICAgIFNldENoYXIoX25jX3dhY3NbbV0sIHRhYmxlW25dLnZhbHVlW2FjdGl2ZV0sIEFfTk9STUFMKTsKKwl9IGVsc2UgaWYgKGFjc19tYXBbbV0gJiBBX0FMVENIQVJTRVQpIHsKKwkgICAgU2V0Q2hhcihfbmNfd2Fjc1ttXSwgbSwgQV9BTFRDSEFSU0VUKTsKKwl9IGVsc2UgeworCSAgICBTZXRDaGFyKF9uY193YWNzW21dLCB0YWJsZVtuXS52YWx1ZVswXSwgQV9OT1JNQUwpOworCX0KKworCVQoKCIjJWQsIFNldENoYXIoJWMsICUjMDR4KSA9ICVzIiwKKwkgICBuLCBtLAorCSAgIHRhYmxlW25dLnZhbHVlW2FjdGl2ZV0sCisJICAgX3RyYWNlY2NoYXJfdCgmX25jX3dhY3NbbV0pKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfd3VuY3RybC5jIGIvbmN1cnNlcy01LjcvbmN1cnNlcy93aWRlY2hhci9saWJfd3VuY3RybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjI1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9uY3Vyc2VzL3dpZGVjaGFyL2xpYl93dW5jdHJsLmMKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyoqCWxpYl93dW5jdHJsLmMKKyoqCisqKglUaGUgcm91dGluZSB3dW5jdHJsKCkuCisqKgorKi8KKworI2luY2x1ZGUgPGN1cnNlcy5wcml2Lmg+CisKK01PRFVMRV9JRCgiJElkOiBsaWJfd3VuY3RybC5jLHYgMS4xMiAyMDA3LzA2LzEyIDIwOjIyOjMyIHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKHdjaGFyX3QgKikKK3d1bmN0cmwoY2NoYXJfdCAqd2MpCit7CisgICAgc3RhdGljIHdjaGFyX3Qgc3RyW0NDSEFSV19NQVggKyAxXSwgKnNwOworCisgICAgaWYgKENoYXJhYmxlKCp3YykpIHsKKwljb25zdCBjaGFyICpwID0gdW5jdHJsKCh1bnNpZ25lZCkgX25jX3RvX2NoYXIoKHdpbnRfdCkgQ2hhck9mKCp3YykpKTsKKworCWZvciAoc3AgPSBzdHI7ICpwOyArK3ApIHsKKwkgICAgKnNwKysgPSBfbmNfdG9fd2lkZWNoYXIoKnApOworCX0KKwkqc3AgPSAwOworCXJldHVybiBzdHI7CisgICAgfSBlbHNlCisJcmV0dXJuIHdjLT5jaGFyczsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL01ha2VmaWxlLmluIGIvbmN1cnNlcy01LjcvcGFuZWwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkYmVlYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTU5IEBACisjICRJZDogTWFrZWZpbGUuaW4sdiAxLjUyIDIwMDcvMDQvMjggMTQ6NTY6MTEgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LW9uCisjCisjIE1ha2VmaWxlIGZvciBwYW5lbHMgc291cmNlIGNvZGUuCisjCisjIFRoaXMgbWFrZXMgdGhlIGZvbGxvd2luZzoKKyMJbGlicmFyaWVzIChub3JtYWwvZGVidWcvcHJvZmlsZS9zaGFyZWQpCisjCisjIFRoZSB2YXJpYWJsZSAnc3JjZGlyJyByZWZlcnMgdG8gdGhlIHNvdXJjZS1kaXN0cmlidXRpb24sIGFuZCBjYW4gYmUgc2V0IHdpdGgKKyMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnkgIi0tc3JjZGlyPURJUiIuCisjCisjIFRoZSBydWxlcyBhcmUgb3JnYW5pemVkIHRvIHByb2R1Y2UgdGhlIGxpYnJhcmllcyBmb3IgdGhlIGNvbmZpZ3VyZWQgbW9kZWxzLAorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCitUSElTCQk9IE1ha2VmaWxlCisKK3gJCT0gQEVYRUVYVEAKK28JCT0gLkBPQkpFWFRACisKK01PREVMCQk9IEBERlRfTFdSX01PREVMQAorREVTVERJUgkJPSBAREVTVERJUkAKK3NyY2RpcgkJPSBAc3JjZGlyQAorcHJlZml4CQk9IEBwcmVmaXhACitleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorbGliZGlyCQk9IEBsaWJkaXJACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACitkYXRhZGlyCQk9IEBkYXRhZGlyQAorCitMSUJUT09MCQk9IEBMSUJUT09MQAorTElCVE9PTF9DTEVBTgk9IEBMSUJfQ0xFQU5ACitMSUJUT09MX0NPTVBJTEUJPSBATElCX0NPTVBJTEVACitMSUJUT09MX0xJTksJPSBATElCX0xJTktACitMSUJUT09MX0lOU1RBTEwJPSBATElCX0lOU1RBTExACitMSUJUT09MX1VOSU5TVEFMTCA9IEBMSUJfVU5JTlNUQUxMQAorCitJTlNUQUxMCQk9IEBJTlNUQUxMQAorSU5TVEFMTF9MSUIJPSBASU5TVEFMTEAgQElOU1RBTExfTElCQAorSU5TVEFMTF9QUk9HCT0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfREFUQQk9IEBJTlNUQUxMX0RBVEFACisKK0FSCQk9IEBBUkAKK0FSX09QVFMJCT0gQEFSX09QVFNACitBV0sJCT0gQEFXS0AKK0xECQk9IEBMREAKK0xOX1MJCT0gQExOX1NACisKK0NDCQk9IEBDQ0AKK0NQUAkJPSBAQ1BQQAorQ0ZMQUdTCQk9IEBDRkxBR1NACisKK0NQUEZMQUdTCT0gLUlAdG9wX3NyY2RpckAvbmN1cnNlcyAtREhBVkVfQ09ORklHX0ggQENQUEZMQUdTQAorCitDQ0ZMQUdTCQk9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorCitDRkxBR1NfTElCVE9PTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19OT1JNQUwJPSAkKENDRkxBR1MpCitDRkxBR1NfREVCVUcJPSAkKENDRkxBR1MpIEBDQ19HX09QVEAgLURUUkFDRQorQ0ZMQUdTX1BST0ZJTEUJPSAkKENDRkxBR1MpIC1wZworQ0ZMQUdTX1NIQVJFRAk9ICQoQ0NGTEFHUykgQENDX1NIQVJFRF9PUFRTQAorCitDRkxBR1NfREVGQVVMVAk9ICQoQ0ZMQUdTX0BERlRfVVBSX01PREVMQCkKKworTElOSwkJPSAkKExJQlRPT0xfTElOSykKK0xERkxBR1MJCT0gQExERkxBR1NAIEBMRF9NT0RFTEAgQExJQlNACisKK1NITElCX0RJUlMJPSAtTC4uL2xpYgorU0hMSUJfTElTVAk9ICQoU0hMSUJfRElSUykgLWxuY3Vyc2VzQExJQl9TVUZGSVhAIEBTSExJQl9MSVNUQAorCitNS19TSEFSRURfTElCCT0gQE1LX1NIQVJFRF9MSUJACisKK05DVVJTRVNfTUFKT1IJPSBATkNVUlNFU19NQUpPUkAKK05DVVJTRVNfTUlOT1IJPSBATkNVUlNFU19NSU5PUkAKK1JFTF9WRVJTSU9OCT0gQGNmX2N2X3JlbF92ZXJzaW9uQAorQUJJX1ZFUlNJT04JPSBAY2ZfY3ZfYWJpX3ZlcnNpb25ACisKK1JBTkxJQgkJPSBATElCX1BSRVBACisKK0xJQlJBUklFUwk9IEBMSUJTX1RPX01BS0VACisKK0xJTlQJCT0gQExJTlRACitMSU5UX09QVFMJPSBATElOVF9PUFRTQAorTElOVF9MSUJTCT0gLWxwYW5lbCAtbG5jdXJzZXMgQExJQlNACisKK0FVVE9fU1JDCT0gXAorCQkuLi9pbmNsdWRlL3BhbmVsLmgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FsbCBcCitsaWJzIFwKK2luc3RhbGwgOjoJJChBVVRPX1NSQykgJChMSUJSQVJJRVMpCisKK3NvdXJjZXM6CSQoQVVUT19TUkMpCisKKyQoREVTVERJUikkKGJpbmRpcikgXAorJChERVNURElSKSQobGliZGlyKSA6CisJc2ggJChzcmNkaXIpLy4uL21rZGlycy5zaCAkQAorCisjIG1ha2UgYSBjb3B5IHRvIHNpbXBsaWZ5IGluY2x1ZGUtcGF0aHMgd2hpbGUgc3RpbGwga2VlcGluZyBwYW5lbCdzIGluY2x1ZGUKKyMgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KKy4uL2luY2x1ZGUvcGFuZWwuaCA6ICQoc3JjZGlyKS9wYW5lbC5oCisJLXJtIC1mICRACisJY3AgJChzcmNkaXIpL3BhbmVsLmggJEAKKworUEFORUxfUFJJVl9IID0gXAorCSQoc3JjZGlyKS9wYW5lbC5wcml2LmggXAorCSQoc3JjZGlyKS9wYW5lbC5oCisKK3RhZ3M6CisJY3RhZ3MgKi5bY2hdCisKK0BNQUtFX1VQUEVSX1RBR1NAVEFHUzoKK0BNQUtFX1VQUEVSX1RBR1NACWV0YWdzICouW2NoXQorCittb3N0bHljbGVhbiA6OgorCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UKKworY2xlYW4gOjogbW9zdGx5Y2xlYW4KKwktcm0gLWYgJChBVVRPX1NSQykKKworZGlzdGNsZWFuIDo6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvaGVhZGVycyBiL25jdXJzZXMtNS43L3BhbmVsL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxOWVhMQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL2hlYWRlcnMKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTYKKyMKKyQoc3JjZGlyKS9wYW5lbC5oCisjIHZpbGU6bWFrZW1vZGUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL2xsaWItbHBhbmVsIGIvbmN1cnNlcy01LjcvcGFuZWwvbGxpYi1scGFuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0OWMyMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL2xsaWItbHBhbmVsCkBAIC0wLDAgKzEsMTgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgMTk5NywyMDAyLDIwMDUgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTElOVExJQlJBUlkgKi8KKworLyogLi9wYW5lbC5jICovCisKKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKKyN1bmRlZiBfbmNfcmV0cmFjZV9wYW5lbAorUEFORUwJKl9uY19yZXRyYWNlX3BhbmVsKAorCQlQQU5FTAkqcGFuKQorCQl7IHJldHVybigqKFBBTkVMICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbXlfdmlzYnVmCitjb25zdCBjaGFyICpfbmNfbXlfdmlzYnVmKAorCQljb25zdCB2b2lkICpwdHIpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2RQYW5lbAordm9pZAlfbmNfZFBhbmVsKAorCQljb25zdCBjaGFyICp0ZXh0LCAKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19kU3RhY2sKK3ZvaWQJX25jX2RTdGFjaygKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJaW50CW51bSwgCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfV25vdXRyZWZyZXNoCit2b2lkCV9uY19Xbm91dHJlZnJlc2goCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfVG91Y2hwYW4KK3ZvaWQJX25jX1RvdWNocGFuKAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX1RvdWNobGluZQordm9pZAlfbmNfVG91Y2hsaW5lKAorCQljb25zdCBQQU5FTCAqcGFuLCAKKwkJaW50CXN0YXJ0LCAKKwkJaW50CWNvdW50KQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3BfYWJvdmUuYyAqLworCisjdW5kZWYgcGFuZWxfYWJvdmUKK1BBTkVMCSpwYW5lbF9hYm92ZSgKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKihQQU5FTCAqKikwKTsgfQorCisvKiAuL3BfYmVsb3cuYyAqLworCisjdW5kZWYgcGFuZWxfYmVsb3cKK1BBTkVMCSpwYW5lbF9iZWxvdygKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKihQQU5FTCAqKikwKTsgfQorCisvKiAuL3BfYm90dG9tLmMgKi8KKworI3VuZGVmIGJvdHRvbV9wYW5lbAoraW50CWJvdHRvbV9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfZGVsZXRlLmMgKi8KKworI3VuZGVmIGRlbF9wYW5lbAoraW50CWRlbF9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfaGlkZS5jICovCisKKyN1bmRlZiBoaWRlX3BhbmVsCitpbnQJaGlkZV9wYW5lbCgKKwkJIFBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX2hpZGRlbi5jICovCisKKyN1bmRlZiBwYW5lbF9oaWRkZW4KK2ludAlwYW5lbF9oaWRkZW4oCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX21vdmUuYyAqLworCisjdW5kZWYgbW92ZV9wYW5lbAoraW50CW1vdmVfcGFuZWwoCisJCVBBTkVMCSpwYW4sIAorCQlpbnQJc3RhcnR5LCAKKwkJaW50CXN0YXJ0eCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfbmV3LmMgKi8KKworI3VuZGVmIG5ld19wYW5lbAorUEFORUwJKm5ld19wYW5lbCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooUEFORUwgKiopMCk7IH0KKworLyogLi9wX3JlcGxhY2UuYyAqLworCisjdW5kZWYgcmVwbGFjZV9wYW5lbAoraW50CXJlcGxhY2VfcGFuZWwoCisJCVBBTkVMCSpwYW4sIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3Bfc2hvdy5jICovCisKKyN1bmRlZiBzaG93X3BhbmVsCitpbnQJc2hvd19wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfdG9wLmMgKi8KKworI3VuZGVmIHRvcF9wYW5lbAoraW50CXRvcF9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfdXBkYXRlLmMgKi8KKworI3VuZGVmIHVwZGF0ZV9wYW5lbHMKK3ZvaWQJdXBkYXRlX3BhbmVscyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3BfdXNlci5jICovCisKKyN1bmRlZiBzZXRfcGFuZWxfdXNlcnB0cgoraW50CXNldF9wYW5lbF91c2VycHRyKAorCQlQQU5FTAkqcGFuLCAKKwkJdm9pZAkqdXB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcGFuZWxfdXNlcnB0cgordm9pZAkqcGFuZWxfdXNlcnB0cigKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vcF93aW4uYyAqLworCisjdW5kZWYgcGFuZWxfd2luZG93CitXSU5ET1cJKnBhbmVsX3dpbmRvdygKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL2xsaWItbHBhbmVsdyBiL25jdXJzZXMtNS43L3BhbmVsL2xsaWItbHBhbmVsdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGJkMWUwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcGFuZWwvbGxpYi1scGFuZWx3CkBAIC0wLDAgKzEsMTgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgMjAwMiwyMDA1ICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTElOVExJQlJBUlkgKi8KKworLyogLi9wYW5lbC5jICovCisKKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKKyN1bmRlZiBfbmNfcmV0cmFjZV9wYW5lbAorUEFORUwJKl9uY19yZXRyYWNlX3BhbmVsKAorCQlQQU5FTAkqcGFuKQorCQl7IHJldHVybigqKFBBTkVMICoqKTApOyB9CisKKyN1bmRlZiBfbmNfbXlfdmlzYnVmCitjb25zdCBjaGFyICpfbmNfbXlfdmlzYnVmKAorCQljb25zdCB2b2lkICpwdHIpCisJCXsgcmV0dXJuKCooY29uc3QgY2hhciAqKikwKTsgfQorCisjdW5kZWYgX25jX2RQYW5lbAordm9pZAlfbmNfZFBhbmVsKAorCQljb25zdCBjaGFyICp0ZXh0LCAKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyAvKiB2b2lkICovIH0KKworI3VuZGVmIF9uY19kU3RhY2sKK3ZvaWQJX25jX2RTdGFjaygKKwkJY29uc3QgY2hhciAqZm10LCAKKwkJaW50CW51bSwgCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfV25vdXRyZWZyZXNoCit2b2lkCV9uY19Xbm91dHJlZnJlc2goCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgLyogdm9pZCAqLyB9CisKKyN1bmRlZiBfbmNfVG91Y2hwYW4KK3ZvaWQJX25jX1RvdWNocGFuKAorCQljb25zdCBQQU5FTCAqcGFuKQorCQl7IC8qIHZvaWQgKi8gfQorCisjdW5kZWYgX25jX1RvdWNobGluZQordm9pZAlfbmNfVG91Y2hsaW5lKAorCQljb25zdCBQQU5FTCAqcGFuLCAKKwkJaW50CXN0YXJ0LCAKKwkJaW50CWNvdW50KQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3BfYWJvdmUuYyAqLworCisjdW5kZWYgcGFuZWxfYWJvdmUKK1BBTkVMCSpwYW5lbF9hYm92ZSgKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKihQQU5FTCAqKikwKTsgfQorCisvKiAuL3BfYmVsb3cuYyAqLworCisjdW5kZWYgcGFuZWxfYmVsb3cKK1BBTkVMCSpwYW5lbF9iZWxvdygKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKihQQU5FTCAqKikwKTsgfQorCisvKiAuL3BfYm90dG9tLmMgKi8KKworI3VuZGVmIGJvdHRvbV9wYW5lbAoraW50CWJvdHRvbV9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfZGVsZXRlLmMgKi8KKworI3VuZGVmIGRlbF9wYW5lbAoraW50CWRlbF9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfaGlkZS5jICovCisKKyN1bmRlZiBoaWRlX3BhbmVsCitpbnQJaGlkZV9wYW5lbCgKKwkJIFBBTkVMCSpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX2hpZGRlbi5jICovCisKKyN1bmRlZiBwYW5lbF9oaWRkZW4KK2ludAlwYW5lbF9oaWRkZW4oCisJCWNvbnN0IFBBTkVMICpwYW4pCisJCXsgcmV0dXJuKCooaW50ICopMCk7IH0KKworLyogLi9wX21vdmUuYyAqLworCisjdW5kZWYgbW92ZV9wYW5lbAoraW50CW1vdmVfcGFuZWwoCisJCVBBTkVMCSpwYW4sIAorCQlpbnQJc3RhcnR5LCAKKwkJaW50CXN0YXJ0eCkKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfbmV3LmMgKi8KKworI3VuZGVmIG5ld19wYW5lbAorUEFORUwJKm5ld19wYW5lbCgKKwkJV0lORE9XCSp3aW4pCisJCXsgcmV0dXJuKCooUEFORUwgKiopMCk7IH0KKworLyogLi9wX3JlcGxhY2UuYyAqLworCisjdW5kZWYgcmVwbGFjZV9wYW5lbAoraW50CXJlcGxhY2VfcGFuZWwoCisJCVBBTkVMCSpwYW4sIAorCQlXSU5ET1cJKndpbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3Bfc2hvdy5jICovCisKKyN1bmRlZiBzaG93X3BhbmVsCitpbnQJc2hvd19wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfdG9wLmMgKi8KKworI3VuZGVmIHRvcF9wYW5lbAoraW50CXRvcF9wYW5lbCgKKwkJUEFORUwJKnBhbikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisvKiAuL3BfdXBkYXRlLmMgKi8KKworI3VuZGVmIHVwZGF0ZV9wYW5lbHMKK3ZvaWQJdXBkYXRlX3BhbmVscyh2b2lkKQorCQl7IC8qIHZvaWQgKi8gfQorCisvKiAuL3BfdXNlci5jICovCisKKyN1bmRlZiBzZXRfcGFuZWxfdXNlcnB0cgoraW50CXNldF9wYW5lbF91c2VycHRyKAorCQlQQU5FTAkqcGFuLCAKKwkJdm9pZAkqdXB0cikKKwkJeyByZXR1cm4oKihpbnQgKikwKTsgfQorCisjdW5kZWYgcGFuZWxfdXNlcnB0cgordm9pZAkqcGFuZWxfdXNlcnB0cigKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKih2b2lkICoqKTApOyB9CisKKy8qIC4vcF93aW4uYyAqLworCisjdW5kZWYgcGFuZWxfd2luZG93CitXSU5ET1cJKnBhbmVsX3dpbmRvdygKKwkJY29uc3QgUEFORUwgKnBhbikKKwkJeyByZXR1cm4oKihXSU5ET1cgKiopMCk7IH0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL21vZHVsZXMgYi9uY3Vyc2VzLTUuNy9wYW5lbC9tb2R1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjdhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wYW5lbC9tb2R1bGVzCkBAIC0wLDAgKzEsNTEgQEAKKyMgJElkOiBtb2R1bGVzLHYgMS45IDIwMDYvMTIvMjQgMDA6NTM6MTcgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQkxOTk1LW9uCisjCisKK0AgYmFzZQorIyBMaWJyYXJ5IG9iamVjdHMKK3BhbmVsCQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfYWJvdmUJCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorcF9iZWxvdwkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX2JvdHRvbQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfZGVsZXRlCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorcF9oaWRlCQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfaGlkZGVuCWxpYgkJJChzcmNkaXIpCSQoUEFORUxfUFJJVl9IKQorcF9tb3ZlCQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfbmV3CQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfcmVwbGFjZQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3Bfc2hvdwkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX3RvcAkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX3VwZGF0ZQlsaWIJCSQoc3JjZGlyKQkkKFBBTkVMX1BSSVZfSCkKK3BfdXNlcgkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCitwX3dpbgkJbGliCQkkKHNyY2RpcikJJChQQU5FTF9QUklWX0gpCisKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF9hYm92ZS5jIGIvbmN1cnNlcy01LjcvcGFuZWwvcF9hYm92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDk1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wYW5lbC9wX2Fib3ZlLmMKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfYWJvdmUuYworICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF9hYm92ZS5jLHYgMS42IDIwMDUvMDIvMTkgMTY6NDQ6NTcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoUEFORUwgKikKK3BhbmVsX2Fib3ZlKGNvbnN0IFBBTkVMICogcGFuKQoreworICBUKChUX0NBTExFRCgicGFuZWxfYWJvdmUoJXApIiksIHBhbikpOworICBpZiAoIXBhbikKKyAgICB7CisgICAgICAvKiBpZiB0b3AgYW5kIGJvdHRvbSBhcmUgZXF1YWwsIHdlIGhhdmUgbm8gb3Igb25seSB0aGUgcHNldWRvIHBhbmVsOworICAgICAgICAgaWYgbm90LCB3ZSByZXR1cm4gdGhlIHBhbmVsIGFib3ZlIHRoZSBwc2V1ZG8gcGFuZWwgKi8KKyAgICAgIHJldHVyblBhbmVsKEVNUFRZX1NUQUNLKCk/IChQQU5FTCAqKSAwIDogX25jX2JvdHRvbV9wYW5lbC0+YWJvdmUpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVyblBhbmVsKHBhbi0+YWJvdmUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF9iZWxvdy5jIGIvbmN1cnNlcy01LjcvcGFuZWwvcF9iZWxvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjI0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wYW5lbC9wX2JlbG93LmMKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfYmVsb3cuYworICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF9iZWxvdy5jLHYgMS42IDIwMDUvMDIvMTkgMTY6NDU6MTAgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoUEFORUwgKikKK3BhbmVsX2JlbG93KGNvbnN0IFBBTkVMICogcGFuKQoreworICBUKChUX0NBTExFRCgicGFuZWxfYmVsb3coJXApIiksIHBhbikpOworICBpZiAoIXBhbikKKyAgICB7CisgICAgICAvKiBpZiB0b3AgYW5kIGJvdHRvbSBhcmUgZXF1YWwsIHdlIGhhdmUgbm8gb3Igb25seSB0aGUgcHNldWRvIHBhbmVsICovCisgICAgICByZXR1cm5QYW5lbChFTVBUWV9TVEFDSygpPyAoUEFORUwgKikgMCA6IF9uY190b3BfcGFuZWwpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHdlIG11c3Qgbm90IHJldHVybiB0aGUgcHNldWRvIHBhbmVsICovCisgICAgICByZXR1cm5QYW5lbChJc19Qc2V1ZG8ocGFuLT5iZWxvdykgPyAoUEFORUwgKikgMCA6IHBhbi0+YmVsb3cpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL3BfYm90dG9tLmMgYi9uY3Vyc2VzLTUuNy9wYW5lbC9wX2JvdHRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjFmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wYW5lbC9wX2JvdHRvbS5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX2JvdHRvbS5jCisgKiBQbGFjZSBhIHBhbmVsIG9uIGJvdHRvbSBvZiB0aGUgc3RhY2s7IG1heSBhbHJlYWR5IGJlIGluIHRoZSBzdGFjayAKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfYm90dG9tLmMsdiAxLjExIDIwMDUvMDIvMTkgMTY6Mzg6MTYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorYm90dG9tX3BhbmVsKFBBTkVMICogcGFuKQoreworICBpbnQgZXJyID0gT0s7CisKKyAgVCgoVF9DQUxMRUQoImJvdHRvbV9wYW5lbCglcCkiKSwgcGFuKSk7CisgIGlmIChwYW4pCisgICAgeworICAgICAgaWYgKCFJc19Cb3R0b20ocGFuKSkKKwl7CisKKwkgIGRCdWcoKCItLT4gYm90dG9tX3BhbmVsICVzIiwgVVNFUl9QVFIocGFuLT51c2VyKSkpOworCisJICBISURFX1BBTkVMKHBhbiwgZXJyLCBPSyk7CisJICBhc3NlcnQoX25jX2JvdHRvbV9wYW5lbCA9PSBfbmNfc3Rkc2NyX3BzZXVkb19wYW5lbCk7CisKKwkgIGRTdGFjaygiPGxiJWQ+IiwgMSwgcGFuKTsKKworCSAgcGFuLT5iZWxvdyA9IF9uY19ib3R0b21fcGFuZWw7CisJICBwYW4tPmFib3ZlID0gX25jX2JvdHRvbV9wYW5lbC0+YWJvdmU7CisJICBpZiAocGFuLT5hYm92ZSkKKwkgICAgcGFuLT5hYm92ZS0+YmVsb3cgPSBwYW47CisJICBfbmNfYm90dG9tX3BhbmVsLT5hYm92ZSA9IHBhbjsKKworCSAgZFN0YWNrKCI8bGIlZD4iLCA5LCBwYW4pOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBlcnIgPSBFUlI7CisKKyAgcmV0dXJuQ29kZShlcnIpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF9kZWxldGUuYyBiL25jdXJzZXMtNS43L3BhbmVsL3BfZGVsZXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlZTI2YgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL3BfZGVsZXRlLmMKQEAgLTAsMCArMSw1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfZGVsZXRlLmMKKyAqIFJlbW92ZSBhIHBhbmVsIGZyb20gc3RhY2ssIGlmIGluIGl0LCBhbmQgZnJlZSBzdHJ1Y3QKKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfZGVsZXRlLmMsdiAxLjggMjAwNS8wMi8xOSAxNjozODo0NSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitkZWxfcGFuZWwoUEFORUwgKiBwYW4pCit7CisgIGludCBlcnIgPSBPSzsKKworICBUKChUX0NBTExFRCgiZGVsX3BhbmVsKCVwKSIpLCBwYW4pKTsKKyAgaWYgKHBhbikKKyAgICB7CisgICAgICBkQnVnKCgiLS0+IGRlbF9wYW5lbCAlcyIsIFVTRVJfUFRSKHBhbi0+dXNlcikpKTsKKyAgICAgIEhJREVfUEFORUwocGFuLCBlcnIsIE9LKTsKKyAgICAgIGZyZWUoKHZvaWQgKilwYW4pOworICAgIH0KKyAgZWxzZQorICAgIGVyciA9IEVSUjsKKworICByZXR1cm5Db2RlKGVycik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wYW5lbC9wX2hpZGRlbi5jIGIvbmN1cnNlcy01LjcvcGFuZWwvcF9oaWRkZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjRjMDdkCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcGFuZWwvcF9oaWRkZW4uYwpAQCAtMCwwICsxLDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTUgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcF9oaWRkZW4uYworICogVGVzdCB3aGV0aGVyIG9yIG5vdCBwYW5lbCBpcyBoaWRkZW4KKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfaGlkZGVuLmMsdiAxLjcgMjAwNS8wMi8xOSAxNjozOToxNyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitwYW5lbF9oaWRkZW4oY29uc3QgUEFORUwgKiBwYW4pCit7CisgIFQoKFRfQ0FMTEVEKCJwYW5lbF9oaWRkZW4oJXApIiksIHBhbikpOworICBpZiAoIXBhbikKKyAgICByZXR1cm5Db2RlKEVSUik7CisgIHJldHVybkNvZGUoSVNfTElOS0VEKHBhbikgPyBGQUxTRSA6IFRSVUUpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF9oaWRlLmMgYi9uY3Vyc2VzLTUuNy9wYW5lbC9wX2hpZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ4ODUzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcGFuZWwvcF9oaWRlLmMKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfaGlkZS5jCisgKiBSZW1vdmUgYSBwYW5lbCBmcm9tIHRoZSBzdGFjaworICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF9oaWRlLmMsdiAxLjkgMjAwNS8wMi8xOSAxNjozOTo0MSB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitoaWRlX3BhbmVsKHJlZ2lzdGVyIFBBTkVMICogcGFuKQoreworICBpbnQgZXJyID0gT0s7CisKKyAgVCgoVF9DQUxMRUQoImhpZGVfcGFuZWwoJXApIiksIHBhbikpOworICBpZiAoIXBhbikKKyAgICByZXR1cm5Db2RlKEVSUik7CisKKyAgZEJ1ZygoIi0tPiBoaWRlX3BhbmVsICVzIiwgVVNFUl9QVFIocGFuLT51c2VyKSkpOworICBkU3RhY2soIjx1JWQ+IiwgMSwgcGFuKTsKKworICBISURFX1BBTkVMKHBhbiwgZXJyLCBFUlIpOworCisgIGRTdGFjaygiPHUlZD4iLCA5LCBwYW4pOworCisgIHJldHVybkNvZGUoZXJyKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL3BfbW92ZS5jIGIvbmN1cnNlcy01LjcvcGFuZWwvcF9tb3ZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxOGU4YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL3BfbW92ZS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX21vdmUuYworICogTW92ZSBhIHBhbmVsIHRvIGEgbmV3IGxvY2F0aW9uCisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX21vdmUuYyx2IDEuOSAyMDA1LzAyLzE5IDE2OjQ2OjQ5IHRvbSBFeHAgJCIpCisKK05DVVJTRVNfRVhQT1JUKGludCkKK21vdmVfcGFuZWwoUEFORUwgKiBwYW4sIGludCBzdGFydHksIGludCBzdGFydHgpCit7CisgIFQoKFRfQ0FMTEVEKCJtb3ZlX3BhbmVsKCVwLCVkLCVkKSIpLCBwYW4sIHN0YXJ0eSwgc3RhcnR4KSk7CisKKyAgaWYgKCFwYW4pCisgICAgcmV0dXJuQ29kZShFUlIpOworCisgIGlmIChJU19MSU5LRUQocGFuKSkKKyAgICB7CisgICAgICBUb3VjaHBhbihwYW4pOworICAgICAgUEFORUxfVVBEQVRFKHBhbiwgKFBBTkVMICopIDApOworICAgIH0KKworICByZXR1cm5Db2RlKG12d2luKHBhbi0+d2luLCBzdGFydHksIHN0YXJ0eCkpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF9uZXcuYyBiL25jdXJzZXMtNS43L3BhbmVsL3BfbmV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxOTMxNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL3BfbmV3LmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNSwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEp1ZXJnZW4gUGZlaWZlciAgICAgICAgICAgICAgICAgICAgICAgICAxOTk3LTE5OTkgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMjAwMC1vbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfbmV3LmMKKyAqIENyZWF0aW9uIG9mIGEgbmV3IHBhbmVsIAorICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF9uZXcuYyx2IDEuMTAgMjAwOC8wOC8wNCAxODoyNTo0OCB0b20gRXhwICQiKQorCisjaWZkZWYgVFJBQ0UKK3N0YXRpYyBjaGFyICpzdGRzY3JfaWQ7CitzdGF0aWMgY2hhciAqbmV3X2lkOworI2VuZGlmCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgR2V0IHJvb3QgKGkuZS4gc3Rkc2NyJ3MpIHBhbmVsLgorICBFc3RhYmxpc2ggdGhlIHBzZXVkbyBwYW5lbCBmb3Igc3Rkc2NyIGlmIG5lY2Vzc2FyeS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBQQU5FTCAqCityb290X3BhbmVsKHZvaWQpCit7CisgIGlmIChfbmNfc3Rkc2NyX3BzZXVkb19wYW5lbCA9PSAoUEFORUwgKikgMCkKKyAgICB7CisKKyAgICAgIGFzc2VydChzdGRzY3IgJiYgIV9uY19ib3R0b21fcGFuZWwgJiYgIV9uY190b3BfcGFuZWwpOworI2lmIE5PX0xFQUtTCisgICAgICBfbmNfcGFuZWxob29rKCktPmRlc3Ryb3kgPSBkZWxfcGFuZWw7CisjZW5kaWYKKyAgICAgIF9uY19zdGRzY3JfcHNldWRvX3BhbmVsID0gKFBBTkVMICopIG1hbGxvYyhzaXplb2YoUEFORUwpKTsKKyAgICAgIGlmIChfbmNfc3Rkc2NyX3BzZXVkb19wYW5lbCAhPSAwKQorCXsKKwkgIFBBTkVMICpwYW4gPSBfbmNfc3Rkc2NyX3BzZXVkb19wYW5lbDsKKwkgIFdJTkRPVyAqd2luID0gc3Rkc2NyOworCisJICBwYW4tPndpbiA9IHdpbjsKKwkgIHBhbi0+YmVsb3cgPSAoUEFORUwgKikgMDsKKwkgIHBhbi0+YWJvdmUgPSAoUEFORUwgKikgMDsKKyNpZmRlZiBUUkFDRQorCSAgaWYgKCFzdGRzY3JfaWQpCisJICAgIHN0ZHNjcl9pZCA9IHN0cmR1cCgic3Rkc2NyIik7CisJICBwYW4tPnVzZXIgPSBzdGRzY3JfaWQ7CisjZWxzZQorCSAgcGFuLT51c2VyID0gKHZvaWQgKikwOworI2VuZGlmCisJICBfbmNfYm90dG9tX3BhbmVsID0gX25jX3RvcF9wYW5lbCA9IHBhbjsKKwl9CisgICAgfQorICByZXR1cm4gX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWw7Cit9CisKK05DVVJTRVNfRVhQT1JUKFBBTkVMICopCituZXdfcGFuZWwoV0lORE9XICp3aW4pCit7CisgIFBBTkVMICpwYW4gPSAoUEFORUwgKikgMDsKKworICBUKChUX0NBTExFRCgibmV3X3BhbmVsKCVwKSIpLCB3aW4pKTsKKworICBpZiAoIXdpbikKKyAgICByZXR1cm5QYW5lbChwYW4pOworCisgIGlmICghX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWwpCisgICAgKHZvaWQpcm9vdF9wYW5lbCgpOworICBhc3NlcnQoX25jX3N0ZHNjcl9wc2V1ZG9fcGFuZWwpOworCisgIGlmICghKHdpbi0+X2ZsYWdzICYgX0lTUEFEKSAmJiAocGFuID0gKFBBTkVMICopIG1hbGxvYyhzaXplb2YoUEFORUwpKSkpCisgICAgeworICAgICAgcGFuLT53aW4gPSB3aW47CisgICAgICBwYW4tPmFib3ZlID0gKFBBTkVMICopIDA7CisgICAgICBwYW4tPmJlbG93ID0gKFBBTkVMICopIDA7CisjaWZkZWYgVFJBQ0UKKyAgICAgIGlmICghbmV3X2lkKQorCW5ld19pZCA9IHN0cmR1cCgibmV3Iik7CisgICAgICBwYW4tPnVzZXIgPSBuZXdfaWQ7CisjZWxzZQorICAgICAgcGFuLT51c2VyID0gKGNoYXIgKikwOworI2VuZGlmCisgICAgICAodm9pZClzaG93X3BhbmVsKHBhbik7CisgICAgfQorICByZXR1cm5QYW5lbChwYW4pOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF9yZXBsYWNlLmMgYi9uY3Vyc2VzLTUuNy9wYW5lbC9wX3JlcGxhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDBkMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcGFuZWwvcF9yZXBsYWNlLmMKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfcmVwbGFjZS5jCisgKiBSZXBsYWNlIGEgcGFuZWxzIHdpbmRvdy4KKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfcmVwbGFjZS5jLHYgMS45IDIwMDUvMDIvMTkgMTY6NDE6MzEgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorcmVwbGFjZV9wYW5lbChQQU5FTCAqIHBhbiwgV0lORE9XICp3aW4pCit7CisgIFQoKFRfQ0FMTEVEKCJyZXBsYWNlX3BhbmVsKCVwLCVwKSIpLCBwYW4sIHdpbikpOworCisgIGlmICghcGFuKQorICAgIHJldHVybkNvZGUoRVJSKTsKKworICBpZiAoSVNfTElOS0VEKHBhbikpCisgICAgeworICAgICAgVG91Y2hwYW4ocGFuKTsKKyAgICAgIFBBTkVMX1VQREFURShwYW4sIChQQU5FTCAqKSAwKTsKKyAgICB9CisKKyAgcGFuLT53aW4gPSB3aW47CisKKyAgcmV0dXJuQ29kZShPSyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wYW5lbC9wX3Nob3cuYyBiL25jdXJzZXMtNS43L3BhbmVsL3Bfc2hvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWVlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wYW5lbC9wX3Nob3cuYwpAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTUgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcF9zaG93LmMKKyAqIFBsYWNlIGEgcGFuZWwgb24gdG9wIG9mIHRoZSBzdGFjazsgbWF5IGFscmVhZHkgYmUgaW4gdGhlIHN0YWNrIAorICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF9zaG93LmMsdiAxLjExIDIwMDUvMDIvMTkgMTY6NDI6MDIgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoaW50KQorc2hvd19wYW5lbChQQU5FTCAqIHBhbikKK3sKKyAgaW50IGVyciA9IE9LOworCisgIFQoKFRfQ0FMTEVEKCJzaG93X3BhbmVsKCVwKSIpLCBwYW4pKTsKKworICBpZiAoIXBhbikKKyAgICByZXR1cm5Db2RlKEVSUik7CisKKyAgaWYgKElzX1RvcChwYW4pKQorICAgIHJldHVybkNvZGUoT0spOworCisgIGRCdWcoKCItLT4gc2hvd19wYW5lbCAlcyIsIFVTRVJfUFRSKHBhbi0+dXNlcikpKTsKKworICBISURFX1BBTkVMKHBhbiwgZXJyLCBPSyk7CisKKyAgZFN0YWNrKCI8bHQlZD4iLCAxLCBwYW4pOworICBhc3NlcnQoX25jX2JvdHRvbV9wYW5lbCA9PSBfbmNfc3Rkc2NyX3BzZXVkb19wYW5lbCk7CisKKyAgX25jX3RvcF9wYW5lbC0+YWJvdmUgPSBwYW47CisgIHBhbi0+YmVsb3cgPSBfbmNfdG9wX3BhbmVsOworICBwYW4tPmFib3ZlID0gKFBBTkVMICopIDA7CisgIF9uY190b3BfcGFuZWwgPSBwYW47CisKKyAgZFN0YWNrKCI8bHQlZD4iLCA5LCBwYW4pOworCisgIHJldHVybkNvZGUoT0spOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF90b3AuYyBiL25jdXJzZXMtNS43L3BhbmVsL3BfdG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkMWQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL3BfdG9wLmMKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfdG9wLmMKKyAqIFBsYWNlIGEgcGFuZWwgb24gdG9wIG9mIHRoZSBzdGFjay4KKyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBfdG9wLmMsdiAxLjUgMjAwNS8wMi8xOSAxNjo0MjoyMyB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCit0b3BfcGFuZWwoUEFORUwgKiBwYW4pCit7CisgIFQoKFRfQ0FMTEVEKCJ0b3BfcGFuZWwoJXApIiksIHBhbikpOworICByZXR1cm5Db2RlKHNob3dfcGFuZWwocGFuKSk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wYW5lbC9wX3VwZGF0ZS5jIGIvbmN1cnNlcy01LjcvcGFuZWwvcF91cGRhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY3NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcGFuZWwvcF91cGRhdGUuYwpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTUgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogcF91cGRhdGUuYworICogd25vdXRyZWZyZXNoIHdpbmRvd3MgaW4gYW4gb3JkZXJseSBmYXNoaW9uCisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX3VwZGF0ZS5jLHYgMS45IDIwMDUvMDIvMTkgMTY6NDk6NDcgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQodm9pZCkKK3VwZGF0ZV9wYW5lbHModm9pZCkKK3sKKyAgUEFORUwgKnBhbjsKKworICBUKChUX0NBTExFRCgidXBkYXRlX3BhbmVscygpIikpKTsKKyAgZEJ1ZygoIi0tPiB1cGRhdGVfcGFuZWxzIikpOworICBwYW4gPSBfbmNfYm90dG9tX3BhbmVsOworICB3aGlsZSAocGFuICYmIHBhbi0+YWJvdmUpCisgICAgeworICAgICAgUEFORUxfVVBEQVRFKHBhbiwgcGFuLT5hYm92ZSk7CisgICAgICBwYW4gPSBwYW4tPmFib3ZlOworICAgIH0KKworICBwYW4gPSBfbmNfYm90dG9tX3BhbmVsOworICB3aGlsZSAocGFuKQorICAgIHsKKyAgICAgIFdub3V0cmVmcmVzaChwYW4pOworICAgICAgcGFuID0gcGFuLT5hYm92ZTsKKyAgICB9CisKKyAgcmV0dXJuVm9pZDsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL3BfdXNlci5jIGIvbmN1cnNlcy01LjcvcGFuZWwvcF91c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhMjVmOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL3BfdXNlci5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5NSAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBwX3VzZXIuYworICogU2V0L0dldCBwYW5lbHMgdXNlciBwb2ludGVyIAorICovCisjaW5jbHVkZSAicGFuZWwucHJpdi5oIgorCitNT0RVTEVfSUQoIiRJZDogcF91c2VyLmMsdiAxLjYgMjAwNS8wMi8xOSAxNjo1Mjo0NCB0b20gRXhwICQiKQorCitOQ1VSU0VTX0VYUE9SVChpbnQpCitzZXRfcGFuZWxfdXNlcnB0cihQQU5FTCAqIHBhbiwgTkNVUlNFU19DT05TVCB2b2lkICp1cHRyKQoreworICBUKChUX0NBTExFRCgic2V0X3BhbmVsX3VzZXJwdHIoJXAsJXApIiksIHBhbiwgdXB0cikpOworICBpZiAoIXBhbikKKyAgICByZXR1cm5Db2RlKEVSUik7CisgIHBhbi0+dXNlciA9IHVwdHI7CisgIHJldHVybkNvZGUoT0spOworfQorCitOQ1VSU0VTX0VYUE9SVChOQ1VSU0VTX0NPTlNUIHZvaWQgKikKK3BhbmVsX3VzZXJwdHIoY29uc3QgUEFORUwgKiBwYW4pCit7CisgIFQoKFRfQ0FMTEVEKCJwYW5lbF91c2VycHRyKCVwKSIpLCBwYW4pKTsKKyAgcmV0dXJuQ1ZvaWRQdHIocGFuID8gcGFuLT51c2VyIDogKE5DVVJTRVNfQ09OU1Qgdm9pZCAqKTApOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcF93aW4uYyBiL25jdXJzZXMtNS43L3BhbmVsL3Bfd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkMmNlYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL3Bfd2luLmMKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBfd2luLmMKKyAqIFJldHVybiBhIHBhbmVscyB3aW5kb3cuCisgKi8KKyNpbmNsdWRlICJwYW5lbC5wcml2LmgiCisKK01PRFVMRV9JRCgiJElkOiBwX3dpbi5jLHYgMS41IDIwMDUvMDIvMTkgMTY6NDQ6MTYgdG9tIEV4cCAkIikKKworTkNVUlNFU19FWFBPUlQoV0lORE9XICopCitwYW5lbF93aW5kb3coY29uc3QgUEFORUwgKiBwYW4pCit7CisgIFQoKFRfQ0FMTEVEKCJwYW5lbF93aW5kb3coJXApIiksIHBhbikpOworICByZXR1cm5XaW4ocGFuID8gcGFuLT53aW4gOiAoV0lORE9XICopMCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wYW5lbC9wYW5lbC5jIGIvbmN1cnNlcy01LjcvcGFuZWwvcGFuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE4MDgzCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcGFuZWwvcGFuZWwuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBhbmVsLmMgLS0gaW1wbGVtZW50YXRpb24gb2YgcGFuZWxzIGxpYnJhcnksIHNvbWUgY29yZSByb3V0aW5lcyAqLworI2luY2x1ZGUgInBhbmVsLnByaXYuaCIKKworTU9EVUxFX0lEKCIkSWQ6IHBhbmVsLmMsdiAxLjIzIDIwMDUvMDIvMTkgMTg6MDQ6MzEgdG9tIEV4cCAkIikKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCV9uY19yZXRyYWNlX3BhbmVsIChwYW4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVFJBQ0UKK05DVVJTRVNfRVhQT1JUKFBBTkVMICopCitfbmNfcmV0cmFjZV9wYW5lbChQQU5FTCAqIHBhbikKK3sKKyAgVCgoVF9SRVRVUk4oIiVwIiksIHBhbikpOworICByZXR1cm4gcGFuOworfQorI2VuZGlmCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlfbmNfbXlfdmlzYnVmKHB0cikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBUUkFDRQorI2lmbmRlZiBUUkFDRV9UWFQKK05DVVJTRVNfRVhQT1JUKGNvbnN0IGNoYXIgKikKK19uY19teV92aXNidWYoY29uc3Qgdm9pZCAqcHRyKQoreworICBjaGFyIHRlbXBbMzJdOworCisgIGlmIChwdHIgIT0gMCkKKyAgICBzcHJpbnRmKHRlbXAsICJwdHI6JXAiLCBwdHIpOworICBlbHNlCisgICAgc3RyY3B5KHRlbXAsICI8bnVsbD4iKTsKKyAgcmV0dXJuIF9uY192aXNidWYodGVtcCk7Cit9CisjZW5kaWYKKyNlbmRpZgorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZFBhbmVsKHRleHQscGFuKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFRSQUNFCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX2RQYW5lbChjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBQQU5FTCAqIHBhbikKK3sKKyAgX3RyYWNlZigiJXMgaWQ9JXMgYj0lcyBhPSVzIHk9JWQgeD0lZCIsCisJICB0ZXh0LCBVU0VSX1BUUihwYW4tPnVzZXIpLAorCSAgKHBhbi0+YmVsb3cpID8gVVNFUl9QVFIocGFuLT5iZWxvdy0+dXNlcikgOiAiLS0iLAorCSAgKHBhbi0+YWJvdmUpID8gVVNFUl9QVFIocGFuLT5hYm92ZS0+dXNlcikgOiAiLS0iLAorCSAgUFNUQVJUWShwYW4pLCBQU1RBUlRYKHBhbikpOworfQorI2VuZGlmCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlkU3RhY2soZm10LG51bSxwYW4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVFJBQ0UKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfZFN0YWNrKGNvbnN0IGNoYXIgKmZtdCwgaW50IG51bSwgY29uc3QgUEFORUwgKiBwYW4pCit7CisgIGNoYXIgczgwWzgwXTsKKworICBzcHJpbnRmKHM4MCwgZm10LCBudW0sIHBhbik7CisgIF90cmFjZWYoIiVzIGI9JXMgdD0lcyIsIHM4MCwKKwkgIChfbmNfYm90dG9tX3BhbmVsKSA/IFVTRVJfUFRSKF9uY19ib3R0b21fcGFuZWwtPnVzZXIpIDogIi0tIiwKKwkgIChfbmNfdG9wX3BhbmVsKSA/IFVTRVJfUFRSKF9uY190b3BfcGFuZWwtPnVzZXIpIDogIi0tIik7CisgIGlmIChwYW4pCisgICAgX3RyYWNlZigicGFuIGlkPSVzIiwgVVNFUl9QVFIocGFuLT51c2VyKSk7CisgIHBhbiA9IF9uY19ib3R0b21fcGFuZWw7CisgIHdoaWxlIChwYW4pCisgICAgeworICAgICAgZFBhbmVsKCJzdGsiLCBwYW4pOworICAgICAgcGFuID0gcGFuLT5hYm92ZTsKKyAgICB9Cit9CisjZW5kaWYKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVdub3V0cmVmcmVzaChwYW4pIC0gZGVidWdnaW5nIGhvb2sgZm9yIHdub3V0cmVmcmVzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFRSQUNFCitOQ1VSU0VTX0VYUE9SVCh2b2lkKQorX25jX1dub3V0cmVmcmVzaChjb25zdCBQQU5FTCAqIHBhbikKK3sKKyAgZFBhbmVsKCJ3bm91dHJlZnJlc2giLCBwYW4pOworICB3bm91dHJlZnJlc2gocGFuLT53aW4pOworfQorI2VuZGlmCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlUb3VjaHBhbihwYW4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVFJBQ0UKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfVG91Y2hwYW4oY29uc3QgUEFORUwgKiBwYW4pCit7CisgIGRQYW5lbCgiVG91Y2hwYW4iLCBwYW4pOworICB0b3VjaHdpbihwYW4tPndpbik7Cit9CisjZW5kaWYKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVRvdWNobGluZShwYW4sc3RhcnQsY291bnQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVFJBQ0UKK05DVVJTRVNfRVhQT1JUKHZvaWQpCitfbmNfVG91Y2hsaW5lKGNvbnN0IFBBTkVMICogcGFuLCBpbnQgc3RhcnQsIGludCBjb3VudCkKK3sKKyAgY2hhciBzODBbODBdOworCisgIHNwcmludGYoczgwLCAiVG91Y2hsaW5lIHM9JWQgYz0lZCIsIHN0YXJ0LCBjb3VudCk7CisgIGRQYW5lbChzODAsIHBhbik7CisgIHRvdWNobGluZShwYW4tPndpbiwgc3RhcnQsIGNvdW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIFRSQUNFCisjICBpZm5kZWYgX19HTlVDX18KKyAgICAgLyogU29tZSBDIGNvbXBpbGVycyBuZWVkIHNvbWV0aGluZyBkZWZpbmVkIGluIGEgc291cmNlIGZpbGUgKi8KK2V4dGVybiB2b2lkIF9uY19kdW1teV9wYW5lbCh2b2lkKTsKK3ZvaWQKK19uY19kdW1teV9wYW5lbCh2b2lkKQoreworfQorIyAgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcGFuZWwvcGFuZWwuaCBiL25jdXJzZXMtNS43L3BhbmVsL3BhbmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwMjA5MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3BhbmVsL3BhbmVsLmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxLDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTk1ICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICRJZDogcGFuZWwuaCx2IDEuMTAgMjAwNi8wNS8yNyAxOTo0OTo0MCB0b20gRXhwICQgKi8KKworLyogcGFuZWwuaCAtLSBpbnRlcmZhY2UgZmlsZSBmb3IgcGFuZWxzIGxpYnJhcnkgKi8KKworI2lmbmRlZiBOQ1VSU0VTX1BBTkVMX0hfaW5jbAorI2RlZmluZSBOQ1VSU0VTX1BBTkVMX0hfaW5jbCAxCisKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgcGFuZWwKK3sKKyAgV0lORE9XICp3aW47CisgIHN0cnVjdCBwYW5lbCAqYmVsb3c7CisgIHN0cnVjdCBwYW5lbCAqYWJvdmU7CisgIE5DVVJTRVNfQ09OU1Qgdm9pZCAqdXNlcjsKK30gUEFORUw7CisKKyNpZglkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFdJTkRPVyopIHBhbmVsX3dpbmRvdyAoY29uc3QgUEFORUwgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgICAgdXBkYXRlX3BhbmVscyAodm9pZCk7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgaGlkZV9wYW5lbCAoUEFORUwgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgc2hvd19wYW5lbCAoUEFORUwgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoaW50KSAgICAgZGVsX3BhbmVsIChQQU5FTCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICAgICB0b3BfcGFuZWwgKFBBTkVMICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgICAgIGJvdHRvbV9wYW5lbCAoUEFORUwgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoUEFORUwqKSAgbmV3X3BhbmVsIChXSU5ET1cgKik7CitleHRlcm4gTkNVUlNFU19FWFBPUlQoUEFORUwqKSAgcGFuZWxfYWJvdmUgKGNvbnN0IFBBTkVMICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKFBBTkVMKikgIHBhbmVsX2JlbG93IChjb25zdCBQQU5FTCAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICAgICBzZXRfcGFuZWxfdXNlcnB0ciAoUEFORUwgKiwgTkNVUlNFU19DT05TVCB2b2lkICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKE5DVVJTRVNfQ09OU1Qgdm9pZCopIHBhbmVsX3VzZXJwdHIgKGNvbnN0IFBBTkVMICopOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKGludCkgICAgIG1vdmVfcGFuZWwgKFBBTkVMICosIGludCwgaW50KTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICAgICByZXBsYWNlX3BhbmVsIChQQU5FTCAqLFdJTkRPVyAqKTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVChpbnQpICAgICBwYW5lbF9oaWRkZW4gKGNvbnN0IFBBTkVMICopOworCisjaWYJZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTkNVUlNFU19QQU5FTF9IX2luY2wgKi8KKworLyogZW5kIG9mIHBhbmVsLmggKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3BhbmVsL3BhbmVsLnByaXYuaCBiL25jdXJzZXMtNS43L3BhbmVsL3BhbmVsLnByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmI4MTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcGFuZWwvcGFuZWwucHJpdi5oCkBAIC0wLDAgKzEsMTgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAkSWQ6IHBhbmVsLnByaXYuaCx2IDEuMjIgMjAwOC8wOS8yNyAyMjozNjoxMSB0b20gRXhwICQgKi8KKworI2lmbmRlZiBOQ1VSU0VTX1BBTkVMX1BSSVZfSAorI2RlZmluZSBOQ1VSU0VTX1BBTkVMX1BSSVZfSCAxCisKKyNpZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgImN1cnNlcy5wcml2LmgiCisjaW5jbHVkZSAicGFuZWwuaCIKKyNpbmNsdWRlIDxuY19wYW5lbC5oPgorCisjaWYgVVNFX1JDU19JRFMKKyMgIGRlZmluZSBNT0RVTEVfSUQoaWQpIHN0YXRpYyBjb25zdCBjaGFyIElkZW50W10gPSBpZDsKKyNlbHNlCisjICBkZWZpbmUgTU9EVUxFX0lEKGlkKSAvKm5vdGhpbmcqLworI2VuZGlmCisKKworI2lmZGVmIFRSQUNFCisgICBleHRlcm4gTkNVUlNFU19FWFBPUlQoY29uc3QgY2hhciAqKSBfbmNfbXlfdmlzYnVmIChjb25zdCB2b2lkICopOworIyAgaWZkZWYgVFJBQ0VfVFhUCisjICAgIGRlZmluZSBVU0VSX1BUUihwdHIpIF9uY192aXNidWYoKGNvbnN0IGNoYXIgKilwdHIpCisjICBlbHNlCisjICAgIGRlZmluZSBVU0VSX1BUUihwdHIpIF9uY19teV92aXNidWYoKGNvbnN0IGNoYXIgKilwdHIpCisjICBlbmRpZgorCisjICBkZWZpbmUgcmV0dXJuUGFuZWwoY29kZSkJVFJBQ0VfUkVUVVJOKGNvZGUscGFuZWwpCisKKyAgIGV4dGVybiBOQ1VSU0VTX0VYUE9SVChQQU5FTCAqKSBfbmNfcmV0cmFjZV9wYW5lbCAoUEFORUwgKik7CisgICBleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2RQYW5lbCAoY29uc3QgY2hhciosIGNvbnN0IFBBTkVMKik7CisgICBleHRlcm4gTkNVUlNFU19FWFBPUlQodm9pZCkgX25jX2RTdGFjayAoY29uc3QgY2hhciosIGludCwgY29uc3QgUEFORUwqKTsKKyAgIGV4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfV25vdXRyZWZyZXNoIChjb25zdCBQQU5FTCopOworICAgZXh0ZXJuIE5DVVJTRVNfRVhQT1JUKHZvaWQpIF9uY19Ub3VjaHBhbiAoY29uc3QgUEFORUwqKTsKKyAgIGV4dGVybiBOQ1VSU0VTX0VYUE9SVCh2b2lkKSBfbmNfVG91Y2hsaW5lIChjb25zdCBQQU5FTCosIGludCwgaW50KTsKKworIyAgZGVmaW5lIGRCdWcoeCkgX3RyYWNlZiB4CisjICBkZWZpbmUgZFBhbmVsKHRleHQscGFuKSBfbmNfZFBhbmVsKHRleHQscGFuKQorIyAgZGVmaW5lIGRTdGFjayhmbXQsbnVtLHBhbikgX25jX2RTdGFjayhmbXQsbnVtLHBhbikKKyMgIGRlZmluZSBXbm91dHJlZnJlc2gocGFuKSBfbmNfV25vdXRyZWZyZXNoKHBhbikKKyMgIGRlZmluZSBUb3VjaHBhbihwYW4pIF9uY19Ub3VjaHBhbihwYW4pCisjICBkZWZpbmUgVG91Y2hsaW5lKHBhbixzdGFydCxjb3VudCkgX25jX1RvdWNobGluZShwYW4sc3RhcnQsY291bnQpCisjZWxzZSAvKiAhVFJBQ0UgKi8KKyMgIGRlZmluZSByZXR1cm5QYW5lbChjb2RlKQlyZXR1cm4gY29kZQorIyAgZGVmaW5lIGRCdWcoeCkKKyMgIGRlZmluZSBkUGFuZWwodGV4dCxwYW4pCisjICBkZWZpbmUgZFN0YWNrKGZtdCxudW0scGFuKQorIyAgZGVmaW5lIFdub3V0cmVmcmVzaChwYW4pIHdub3V0cmVmcmVzaCgocGFuKS0+d2luKQorIyAgZGVmaW5lIFRvdWNocGFuKHBhbikgdG91Y2h3aW4oKHBhbiktPndpbikKKyMgIGRlZmluZSBUb3VjaGxpbmUocGFuLHN0YXJ0LGNvdW50KSB0b3VjaGxpbmUoKHBhbiktPndpbixzdGFydCxjb3VudCkKKyNlbmRpZgorCisjZGVmaW5lIF9uY19zdGRzY3JfcHNldWRvX3BhbmVsIF9uY19wYW5lbGhvb2soKS0+c3Rkc2NyX3BzZXVkb19wYW5lbAorI2RlZmluZSBfbmNfdG9wX3BhbmVsIF9uY19wYW5lbGhvb2soKS0+dG9wX3BhbmVsCisjZGVmaW5lIF9uY19ib3R0b21fcGFuZWwgX25jX3BhbmVsaG9vaygpLT5ib3R0b21fcGFuZWwKKworI2RlZmluZSBFTVBUWV9TVEFDSygpIChfbmNfdG9wX3BhbmVsPT1fbmNfYm90dG9tX3BhbmVsKQorI2RlZmluZSBJc19Cb3R0b20ocCkgICgoKHApIT0oUEFORUwqKTApICYmICFFTVBUWV9TVEFDSygpICYmIChfbmNfYm90dG9tX3BhbmVsLT5hYm92ZT09KHApKSkKKyNkZWZpbmUgSXNfVG9wKHApICgoKHApIT0oUEFORUwqKTApICYmICFFTVBUWV9TVEFDSygpICYmIChfbmNfdG9wX3BhbmVsPT0ocCkpKQorI2RlZmluZSBJc19Qc2V1ZG8ocCkgKChwKSAmJiAoKHApPT1fbmNfYm90dG9tX3BhbmVsKSkKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUlTX0xJTktFRChwYW4pIC0gY2hlY2sgdG8gc2VlIGlmIHBhbmVsIGlzIGluIHRoZSBzdGFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhpcyB3b3JrcyEgVGhlIG9ubHkgY2FzZSB3aGVyZSBpdCB3b3VsZCBmYWlsIGlzLCB3aGVuIHRoZSBsaXN0IGhhcworICAgb25seSBvbmUgZWxlbWVudC4gQnV0IHRoaXMgY291bGQgb25seSBiZSB0aGUgcHNldWRvIHBhbmVsIGF0IHRoZSBib3R0b20gKi8KKyNkZWZpbmUgSVNfTElOS0VEKHApICgoKHApLT5hYm92ZSB8fCAocCktPmJlbG93IHx8KChwKT09X25jX2JvdHRvbV9wYW5lbCkpID8gVFJVRSA6IEZBTFNFKQorCisjZGVmaW5lIFBTVEFSVFgocGFuKSAoKHBhbiktPndpbi0+X2JlZ3gpCisjZGVmaW5lIFBFTkRYKHBhbikgICAoKHBhbiktPndpbi0+X2JlZ3ggKyBnZXRtYXh4KChwYW4pLT53aW4pIC0gMSkKKyNkZWZpbmUgUFNUQVJUWShwYW4pICgocGFuKS0+d2luLT5fYmVneSkKKyNkZWZpbmUgUEVORFkocGFuKSAgICgocGFuKS0+d2luLT5fYmVneSArIGdldG1heHkoKHBhbiktPndpbikgLSAxKQorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUEFORUxTX09WRVJMQVBQRUQocGFuMSxwYW4yKSAtIGNoZWNrIHBhbmVsIG92ZXJsYXBwZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBBTkVMU19PVkVSTEFQUEVEKHBhbjEscGFuMikgXAorKCggIShwYW4xKSB8fCAhKHBhbjIpIHx8IFwKKyAgICAgICBQU1RBUlRZKHBhbjEpID4gUEVORFkocGFuMikgfHwgUEVORFkocGFuMSkgPCBQU1RBUlRZKHBhbjIpIHx8XAorICAgICAgIFBTVEFSVFgocGFuMSkgPiBQRU5EWChwYW4yKSB8fCBQRU5EWChwYW4xKSA8IFBTVEFSVFgocGFuMikgKSBcCisgICAgID8gRkFMU0UgOiBUUlVFKQorCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlDb21wdXRlIHRoZSBpbnRlcnNlY3Rpb24gcmVjdGFuZ2xlIG9mIHR3byBvdmVybGFwcGluZyByZWN0YW5nbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDT01QVVRFX0lOVEVSU0VDVElPTihwYW4xLHBhbjIsaXgxLGl4MixpeTEsaXkyKVwKKyAgIGl4MSA9IChQU1RBUlRYKHBhbjEpIDwgUFNUQVJUWChwYW4yKSkgPyBQU1RBUlRYKHBhbjIpIDogUFNUQVJUWChwYW4xKTtcCisgICBpeDIgPSAoUEVORFgocGFuMSkgICA8IFBFTkRYKHBhbjIpKSAgID8gUEVORFgocGFuMSkgICA6IFBFTkRYKHBhbjIpO1wKKyAgIGl5MSA9IChQU1RBUlRZKHBhbjEpIDwgUFNUQVJUWShwYW4yKSkgPyBQU1RBUlRZKHBhbjIpIDogUFNUQVJUWShwYW4xKTtcCisgICBpeTIgPSAoUEVORFkocGFuMSkgICA8IFBFTkRZKHBhbjIpKSAgID8gUEVORFkocGFuMSkgICA6IFBFTkRZKHBhbjIpO1wKKyAgIGFzc2VydCgoaXgxPD1peDIpICYmIChpeTE8PWl5MikpO1wKKworCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJV2FsayB0aHJvdWdoIHRoZSBwYW5lbCBzdGFjayBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24gYW5kCisgICAgICAgIGNoZWNrIGZvciBpbnRlcnNlY3Rpb25zOyBvdmVybGFwcGluZyBwYW5lbHMgYXJlICJ0b3VjaGVkIiwgc28gdGhleQorICAgICAgICBhcmUgaW5jcmVtZW50YWxseSBvdmVyd3JpdGluZyBjZWxscyB0aGF0IHNob3VsZCBiZSBoaWRkZW4uCisgICAgICAgIElmIHRoZSAidG91Y2giIGZsYWcgaXMgc2V0LCB0aGUgcGFuZWwgZ2V0cyB0b3VjaGVkIGJlZm9yZSBpdCBpcworICAgICAgICB1cGRhdGVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUEFORUxfVVBEQVRFKHBhbixwYW5zdGFydClcCit7ICBQQU5FTCogcGFuMiA9ICgocGFuc3RhcnQpID8gKHBhbnN0YXJ0KSA6IF9uY19ib3R0b21fcGFuZWwpO1wKKyAgIHdoaWxlKHBhbjIpIHtcCisgICAgICBpZiAoKHBhbjIgIT0gcGFuKSAmJiBQQU5FTFNfT1ZFUkxBUFBFRChwYW4scGFuMikpIHtcCisgICAgICAgIGludCB5LGl4MSxpeDIsaXkxLGl5MjtcCisgICAgICAgIENPTVBVVEVfSU5URVJTRUNUSU9OKHBhbixwYW4yLGl4MSxpeDIsaXkxLGl5Mik7XAorCWZvcih5ID0gaXkxOyB5IDw9IGl5MjsgeSsrKSB7XAorCSAgaWYgKGlzX2xpbmV0b3VjaGVkKHBhbi0+d2luLHkgLSBQU1RBUlRZKHBhbikpKSB7XAorICAgICAgICAgICAgc3RydWN0IGxkYXQqIGxpbmUgPSAmKHBhbjItPndpbi0+X2xpbmVbeSAtIFBTVEFSVFkocGFuMildKTtcCisgICAgICAgICAgICBDSEFOR0VEX1JBTkdFKGxpbmUsaXgxLVBTVEFSVFgocGFuMiksaXgyLVBTVEFSVFgocGFuMikpO1wKKyAgICAgICAgICB9XAorCX1cCisgICAgICB9XAorICAgICAgcGFuMiA9IHBhbjItPmFib3ZlO1wKKyAgIH1cCit9CisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlSZW1vdmUgcGFuZWwgZnJvbSBzdGFjay4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFBBTkVMX1VOTElOSyhwYW4sZXJyKSBcCit7ICBlcnIgPSBFUlI7XAorICAgaWYgKHBhbikge1wKKyAgICAgaWYgKElTX0xJTktFRChwYW4pKSB7XAorICAgICAgIGlmICgocGFuKS0+YmVsb3cpXAorICAgICAgICAgKHBhbiktPmJlbG93LT5hYm92ZSA9IChwYW4pLT5hYm92ZTtcCisgICAgICAgaWYgKChwYW4pLT5hYm92ZSlcCisgICAgICAgICAocGFuKS0+YWJvdmUtPmJlbG93ID0gKHBhbiktPmJlbG93O1wKKyAgICAgICBpZiAoKHBhbikgPT0gX25jX2JvdHRvbV9wYW5lbCkgXAorICAgICAgICAgX25jX2JvdHRvbV9wYW5lbCA9IChwYW4pLT5hYm92ZTtcCisgICAgICAgaWYgKChwYW4pID09IF9uY190b3BfcGFuZWwpIFwKKyAgICAgICAgIF9uY190b3BfcGFuZWwgPSAocGFuKS0+YmVsb3c7XAorICAgICAgIGVyciA9IE9LO1wKKyAgICAgfVwKKyAgICAgKHBhbiktPmFib3ZlID0gKHBhbiktPmJlbG93ID0gKFBBTkVMKikwO1wKKyAgIH1cCit9CisKKyNkZWZpbmUgSElERV9QQU5FTChwYW4sZXJyLGVycl9pZl91bmxpbmtlZClcCisgIGlmIChJU19MSU5LRUQocGFuKSkge1wKKyAgICBUb3VjaHBhbihwYW4pO1wKKyAgICBQQU5FTF9VUERBVEUocGFuLChQQU5FTCopMCk7XAorICAgIFBBTkVMX1VOTElOSyhwYW4sZXJyKTtcCisgIH0gXAorICBlbHNlIHtcCisgICAgICBlcnIgPSBlcnJfaWZfdW5saW5rZWQ7XAorICB9CisKKyNlbmRpZiAvKiBOQ1VSU0VTX1BBTkVMX1BSSVZfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcHJvZ3MvTUt0ZXJtc29ydC5zaCBiL25jdXJzZXMtNS43L3Byb2dzL01LdGVybXNvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI0N2YxNAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Byb2dzL01LdGVybXNvcnQuc2gKQEAgLTAsMCArMSwxNjQgQEAKKyMhL2Jpbi9zaAorIyAkSWQ6IE1LdGVybXNvcnQuc2gsdiAxLjEwIDIwMDgvMDcvMTIgMjA6MjI6NTQgdG9tIEV4cCAkCisjCisjIE1LdGVybXNvcnQuc2ggLS0gZ2VuZXJhdGUgaW5kaXJlY3Rpb24gdmVjdG9ycyBmb3IgdGhlIHZhcmlvdXMgc29ydCBtZXRob2RzCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoZSBvdXRwdXQgb2YgdGhpcyBzY3JpcHQgaXMgQyBzb3VyY2UgZm9yIG5pbmUgYXJyYXlzIHRoYXQgbGlzdCB0aHJlZSBzb3J0CisjIG9yZGVycyBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgZGlmZmVyZW50IGNsYXNzZXMgb2YgdGVybWluZm8gY2FwYWJpbGl0aWVzLgorIworIyBrZWVwIHRoZSBvcmRlciBpbmRlcGVuZGVudCBvZiBsb2NhbGU6CitpZiB0ZXN0ICIke0xBTkdVQUdFK3NldH0iICAgID0gc2V0OyB0aGVuIExBTkdVQUdFPUM7ICAgIGV4cG9ydCBMQU5HVUFHRTsgICAgZmkKK2lmIHRlc3QgIiR7TEFORytzZXR9IiAgICAgICAgPSBzZXQ7IHRoZW4gTEFORz1DOyAgICAgICAgZXhwb3J0IExBTkc7ICAgICAgICBmaQoraWYgdGVzdCAiJHtMQ19BTEwrc2V0fSIgICAgICA9IHNldDsgdGhlbiBMQ19BTEw9QzsgICAgICBleHBvcnQgTENfQUxMOyAgICAgIGZpCitpZiB0ZXN0ICIke0xDX01FU1NBR0VTK3NldH0iID0gc2V0OyB0aGVuIExDX01FU1NBR0VTPUM7IGV4cG9ydCBMQ19NRVNTQUdFUzsgZmkKK2lmIHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgICAgPSBzZXQ7IHRoZW4gTENfQ1RZUEU9QzsgICAgZXhwb3J0IExDX0NUWVBFOyAgICBmaQoraWYgdGVzdCAiJHtMQ19DT0xMQVRFK3NldH0iICA9IHNldDsgdGhlbiBMQ19DT0xMQVRFPUM7ICBleHBvcnQgTENfQ09MTEFURTsgIGZpCisjCitBV0s9JHsxLWF3a30KK0RBVEE9JHsyLS4uL2luY2x1ZGUvQ2Fwc30KKworZGF0YT1kYXRhJCQKK3RyYXAgJ3JtIC1mICRkYXRhJyAxIDIgNSAxNQorc2VkIC1lICdzL1sJXVsJXSovCS9nJyA8ICREQVRBID4kZGF0YQorREFUQT0kZGF0YQorCitlY2hvICIvKiI7CitlY2hvICIgKiB0ZXJtc29ydC5jIC0tLSBzb3J0IG9yZGVyIGFycmF5cyBmb3IgdXNlIGJ5IGluZm9jbXAuIjsKK2VjaG8gIiAqIjsKK2VjaG8gIiAqIE5vdGU6IHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgdXNpbmcgTUt0ZXJtc29ydC5zaCwgZG8gbm90IGVkaXQgYnkgaGFuZC4iOworZWNobyAiICovIjsKKworZWNobyAic3RhdGljIGNvbnN0IFByZWRJZHggYm9vbF90ZXJtaW5mb19zb3J0W10gPSB7IjsKKyRBV0sgPCREQVRBICcKK0JFR0lOICAgICAgICAgICB7aSA9IDA7fQorL14jLyAgICAgICAgICAgIHtuZXh0O30KKyQzID09ICJib29sIiAgICB7cHJpbnRmKCIlc1x0JWRcbiIsICQyLCBpKyspO30KKycgfCBzb3J0IHwgJEFXSyAne3ByaW50ICJcdCIsICQyLCAiLFx0LyogIiwgJDEsICIgKi8iO30nOworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IFByZWRJZHggbnVtX3Rlcm1pbmZvX3NvcnRbXSA9IHsiOworJEFXSyA8JERBVEEgJworQkVHSU4gICAgICAgICAgIHtpID0gMDt9CisvXiMvICAgICAgICAgICAge25leHQ7fQorJDMgPT0gIm51bSIgICAgIHtwcmludGYoIiVzXHQlZFxuIiwgJDIsIGkrKyk7fQorJyB8IHNvcnQgfCAkQVdLICd7cHJpbnQgIlx0IiwgJDIsICIsXHQvKiAiLCAkMSwgIiAqLyI7fSc7CitlY2hvICJ9OyI7CitlY2hvICIiOworCitlY2hvICJzdGF0aWMgY29uc3QgUHJlZElkeCBzdHJfdGVybWluZm9fc29ydFtdID0geyI7CiskQVdLIDwkREFUQSAnCitCRUdJTiAgICAgICAgICAge2kgPSAwO30KKy9eIy8gICAgICAgICAgICB7bmV4dDt9CiskMyA9PSAic3RyIiAgICAge3ByaW50ZigiJXNcdCVkXG4iLCAkMiwgaSsrKTt9CisnIHwgc29ydCB8ICRBV0sgJ3twcmludCAiXHQiLCAkMiwgIixcdC8qICIsICQxLCAiICovIjt9JzsKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBQcmVkSWR4IGJvb2xfdmFyaWFibGVfc29ydFtdID0geyI7CiskQVdLIDwkREFUQSAnCitCRUdJTiAgICAgICAgICAge2kgPSAwO30KKy9eIy8gICAgICAgICAgICB7bmV4dDt9CiskMyA9PSAiYm9vbCIgICAge3ByaW50ZigiJXNcdCVkXG4iLCAkMSwgaSsrKTt9CisnIHwgc29ydCB8ICRBV0sgJ3twcmludCAiXHQiLCAkMiwgIixcdC8qICIsICQxLCAiICovIjt9JzsKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBQcmVkSWR4IG51bV92YXJpYWJsZV9zb3J0W10gPSB7IjsKKyRBV0sgPCREQVRBICcKK0JFR0lOICAgICAgICAgICB7aSA9IDA7fQorL14jLyAgICAgICAgICAgIHtuZXh0O30KKyQzID09ICJudW0iICAgICB7cHJpbnRmKCIlc1x0JWRcbiIsICQxLCBpKyspO30KKycgfCBzb3J0IHwgJEFXSyAne3ByaW50ICJcdCIsICQyLCAiLFx0LyogIiwgJDEsICIgKi8iO30nOworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IFByZWRJZHggc3RyX3ZhcmlhYmxlX3NvcnRbXSA9IHsiOworJEFXSyA8JERBVEEgJworQkVHSU4gICAgICAgICAgIHtpID0gMDt9CisvXiMvICAgICAgICAgICAge25leHQ7fQorJDMgPT0gInN0ciIgICAgIHtwcmludGYoIiVzXHQlZFxuIiwgJDEsIGkrKyk7fQorJyB8IHNvcnQgfCAkQVdLICd7cHJpbnQgIlx0IiwgJDIsICIsXHQvKiAiLCAkMSwgIiAqLyI7fSc7CitlY2hvICJ9OyI7CitlY2hvICIiOworCitlY2hvICJzdGF0aWMgY29uc3QgUHJlZElkeCBib29sX3Rlcm1jYXBfc29ydFtdID0geyI7CiskQVdLIDwkREFUQSAnCitCRUdJTiAgICAgICAgICAge2kgPSAwO30KKy9eIy8gICAgICAgICAgICB7bmV4dDt9CiskMyA9PSAiYm9vbCIgICAge3ByaW50ZigiJXNcdCVkXG4iLCAkNCwgaSsrKTt9CisnIHwgc29ydCB8ICRBV0sgJ3twcmludCAiXHQiLCAkMiwgIixcdC8qICIsICQxLCAiICovIjt9JzsKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK2VjaG8gInN0YXRpYyBjb25zdCBQcmVkSWR4IG51bV90ZXJtY2FwX3NvcnRbXSA9IHsiOworJEFXSyA8JERBVEEgJworQkVHSU4gICAgICAgICAgIHtpID0gMDt9CisvXiMvICAgICAgICAgICAge25leHQ7fQorJDMgPT0gIm51bSIgICAgIHtwcmludGYoIiVzXHQlZFxuIiwgJDQsIGkrKyk7fQorJyB8IHNvcnQgfCAkQVdLICd7cHJpbnQgIlx0IiwgJDIsICIsXHQvKiAiLCAkMSwgIiAqLyI7fSc7CitlY2hvICJ9OyI7CitlY2hvICIiOworCitlY2hvICJzdGF0aWMgY29uc3QgUHJlZElkeCBzdHJfdGVybWNhcF9zb3J0W10gPSB7IjsKKyRBV0sgPCREQVRBICcKK0JFR0lOICAgICAgICAgICB7aSA9IDA7fQorL14jLyAgICAgICAgICAgIHtuZXh0O30KKyQzID09ICJzdHIiICAgICB7cHJpbnRmKCIlc1x0JWRcbiIsICQ0LCBpKyspO30KKycgfCBzb3J0IHwgJEFXSyAne3ByaW50ICJcdCIsICQyLCAiLFx0LyogIiwgJDEsICIgKi8iO30nOworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IGJvb2wgYm9vbF9mcm9tX3Rlcm1jYXBbXSA9IHsiOworJEFXSyA8JERBVEEgJworJDMgPT0gImJvb2wiICYmIHN1YnN0cigkNywgMSwgMSkgPT0gIi0iICAgICAgIHtwcmludCAiXHRGQUxTRSxcdC8qICIsICQyLCAiICovIjt9CiskMyA9PSAiYm9vbCIgJiYgc3Vic3RyKCQ3LCAxLCAxKSA9PSAiWSIgICAgICAge3ByaW50ICJcdFRSVUUsXHQvKiAiLCAkMiwgIiAqLyI7fQorJworZWNobyAifTsiOworZWNobyAiIjsKKworZWNobyAic3RhdGljIGNvbnN0IGJvb2wgbnVtX2Zyb21fdGVybWNhcFtdID0geyI7CiskQVdLIDwkREFUQSAnCiskMyA9PSAibnVtIiAmJiBzdWJzdHIoJDcsIDEsIDEpID09ICItIiAgICAgICAge3ByaW50ICJcdEZBTFNFLFx0LyogIiwgJDIsICIgKi8iO30KKyQzID09ICJudW0iICYmIHN1YnN0cigkNywgMSwgMSkgPT0gIlkiICAgICAgICB7cHJpbnQgIlx0VFJVRSxcdC8qICIsICQyLCAiICovIjt9CisnCitlY2hvICJ9OyI7CitlY2hvICIiOworCitlY2hvICJzdGF0aWMgY29uc3QgYm9vbCBzdHJfZnJvbV90ZXJtY2FwW10gPSB7IjsKKyRBV0sgPCREQVRBICcKKyQzID09ICJzdHIiICYmIHN1YnN0cigkNywgMSwgMSkgPT0gIi0iICAgICAgICB7cHJpbnQgIlx0RkFMU0UsXHQvKiAiLCAkMiwgIiAqLyI7fQorJDMgPT0gInN0ciIgJiYgc3Vic3RyKCQ3LCAxLCAxKSA9PSAiWSIgICAgICAgIHtwcmludCAiXHRUUlVFLFx0LyogIiwgJDIsICIgKi8iO30KKycKK2VjaG8gIn07IjsKK2VjaG8gIiI7CisKK3JtIC1mICRkYXRhCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wcm9ncy9NYWtlZmlsZS5pbiBiL25jdXJzZXMtNS43L3Byb2dzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NmZkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wcm9ncy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI5NyBAQAorIyAkSWQ6IE1ha2VmaWxlLmluLHYgMS43OSAyMDA4LzA5LzA3IDEzOjU4OjU1IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgMTk5Ni1vbgorIworIyBNYWtlZmlsZSBmb3IgbmN1cnNlcyBzb3VyY2UgY29kZS4KKyMKKyMgVGhpcyBtYWtlcyB0aGUgbmN1cnNlcyB1dGlsaXR5IHByb2dyYW1zLgorIworIyBUaGUgdmFyaWFibGUgJ3NyY2RpcicgcmVmZXJzIHRvIHRoZSBzb3VyY2UtZGlzdHJpYnV0aW9uLCBhbmQgY2FuIGJlIHNldCB3aXRoCisjIHRoZSBjb25maWd1cmUgc2NyaXB0IGJ5ICItLXNyY2Rpcj1ESVIiLgorIworIyBUaGUgcnVsZXMgYXJlIG9yZ2FuaXplZCB0byBwcm9kdWNlIHRoZSBsaWJyYXJpZXMgZm9yIHRoZSBjb25maWd1cmVkIG1vZGVscywKKyMgYW5kIHRoZSBwcm9ncmFtcyB3aXRoIHRoZSBjb25maWd1cmVkIGRlZmF1bHQgbW9kZWwuCisKKyMgdHVybiBvZmYgX2FsbF8gc3VmZml4IHJ1bGVzOyB3ZSdsbCBnZW5lcmF0ZSBvdXIgb3duCisuU1VGRklYRVM6CisKK1NIRUxMCQk9IC9iaW4vc2gKK1RISVMJCT0gTWFrZWZpbGUKKworQ0ZfTUZMQUdTIAk9IEBjZl9jdl9tYWtlZmxhZ3NACitAU0VUX01BS0VACisKK3gJCT0gQEVYRUVYVEAKK28JCT0gLkBPQkpFWFRACisKK01PREVMCQk9IC4uL0BERlRfT0JKX1NVQkRJUkAKK0RFU1RESVIJCT0gQERFU1RESVJACit0b3Bfc3JjZGlyCT0gQHRvcF9zcmNkaXJACitzcmNkaXIJCT0gQHNyY2RpckAKK3ByZWZpeAkJPSBAcHJlZml4QAorZXhlY19wcmVmaXgJPSBAZXhlY19wcmVmaXhACitiaW5kaXIJCT0gQGJpbmRpckAKK2xpYmRpcgkJPSBAbGliZGlyQAoraW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQAorZGF0YWRpcgkJPSBAZGF0YWRpckAKKworTElCVE9PTAkJPSBATElCVE9PTEAKK0xJQlRPT0xfQ0xFQU4JPSBATElCX0NMRUFOQAorTElCVE9PTF9DT01QSUxFCT0gQExJQl9DT01QSUxFQAorTElCVE9PTF9MSU5LCT0gQExJQl9MSU5LQAorTElCVE9PTF9JTlNUQUxMCT0gQExJQl9JTlNUQUxMQAorTElCVE9PTF9VTklOU1RBTEwgPSBATElCX1VOSU5TVEFMTEAKKworSU5TVEFMTAkJPSBASU5TVEFMTEAKK0lOU1RBTExfUFJPRwk9IEBJTlNUQUxMX1BST0dSQU1ACit0cmFuc2Zvcm0JPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKKworQVdLCQk9IEBBV0tACitMTl9TCQk9IEBMTl9TQAorCitDQwkJPSBAQ0NACitDUFAJCT0gQENQUEAKK0NGTEFHUwkJPSBAQ0ZMQUdTQAorCitJTkNESVIJCT0gJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCitDUFBGTEFHUwk9IC1JLi4vcHJvZ3MgLUkkKHNyY2RpcikgLURIQVZFX0NPTkZJR19IIEBDUFBGTEFHU0AKKworQ0NGTEFHUwkJPSAkKENQUEZMQUdTKSAkKENGTEFHUykKKworQ0ZMQUdTX0xJQlRPT0wJPSAkKENDRkxBR1MpCitDRkxBR1NfTk9STUFMCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX0RFQlVHCT0gJChDQ0ZMQUdTKSBAQ0NfR19PUFRAIC1EVFJBQ0UKK0NGTEFHU19QUk9GSUxFCT0gJChDQ0ZMQUdTKSAtcGcKK0NGTEFHU19TSEFSRUQJPSAkKENDRkxBR1MpIEBDQ19TSEFSRURfT1BUU0AKKworQ0ZMQUdTX0RFRkFVTFQJPSAkKENGTEFHU19AREZUX1VQUl9NT0RFTEApCisKK1JFTF9WRVJTSU9OCT0gQGNmX2N2X3JlbF92ZXJzaW9uQAorQUJJX1ZFUlNJT04JPSBAY2ZfY3ZfYWJpX3ZlcnNpb25ACitMT0NBTF9MSUJESVIJPSBAdG9wX2J1aWxkZGlyQC9saWIKKworTEQJCT0gQExEQAorTElOSwkJPSBATElOS19QUk9HU0AgJChMSUJUT09MX0xJTkspCitMREZMQUdTCQk9IEBFWFRSQV9MREZMQUdTQCBATERGTEFHU0AKKworTERGTEFHU19MSUJUT09MCT0gJChMREZMQUdTKSAkKENGTEFHU19MSUJUT09MKQorTERGTEFHU19OT1JNQUwJPSAkKExERkxBR1MpICQoQ0ZMQUdTX05PUk1BTCkKK0xERkxBR1NfREVCVUcJPSAkKExERkxBR1MpICQoQ0ZMQUdTX0RFQlVHKQorTERGTEFHU19QUk9GSUxFCT0gJChMREZMQUdTKSAkKENGTEFHU19QUk9GSUxFKSAKK0xERkxBR1NfU0hBUkVECT0gJChMREZMQUdTKSAkKENGTEFHU19TSEFSRUQpIEBMRF9TSEFSRURfT1BUU0AKKworTERGTEFHU19ERUZBVUxUCT0gJChMREZMQUdTX0BERlRfVVBSX01PREVMQCkKKworTElCU19USUMJPSBATERGTEFHU19TVEFUSUNAIEBUSUNTX0FSR1NAIEBUSU5GT19BUkdTQCBATERGTEFHU19TSEFSRURAIEBMRF9NT0RFTEAgQExJQlNACitMREZMQUdTX1RJQwk9ICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApICQoTElCU19USUMpCisKK0xJQlNfVElORk8JPSBATERGTEFHU19TVEFUSUNAIEBUSU5GT19BUkdTQCBATERGTEFHU19TSEFSRURAIEBMRF9NT0RFTEAgQExJQlNACitMREZMQUdTX1RJTkZPCT0gJChMREZMQUdTX0BERlRfVVBSX01PREVMQCkgJChMSUJTX1RJTkZPKQorCitMSU5UCQk9IEBMSU5UQAorTElOVF9PUFRTCT0gQExJTlRfT1BUU0AKK0xJTlRfTElCUwk9IC1sbmN1cnNlcyBATElCU0AKKworQVVUT19TUkMgPSBcCisJdGVybXNvcnQuYyBcCisJdHJhbnNmb3JtLmgKKworIyB0aWMgcmVsaWVzIG9uIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHRlcm1pbmZvIGRhdGFiYXNlCitHRVRfUFJPR1MgPSBpbmZvY21wJHggY2xlYXIkeCB0cHV0JHggdHNldCR4IHRvZSR4CitQVVRfUFJPR1MgPSBATUFLRV9URVJNSU5GT0AgdGljJHgKK1BST0dTID0gJChQVVRfUFJPR1MpICQoR0VUX1BST0dTKQorCisjIERlZmF1bHQgbGlicmFyeSwgZm9yIGxpbmtpbmcgYXBwbGljYXRpb25zCitERVBTX0NVUlNFUyA9IC4uL2xpYi9ATElCX1BSRUZJWEBuY3Vyc2VzQERGVF9ERVBfU1VGRklYQAorCitIRUFERVJfREVQUwk9IFwKKwkuLi9pbmNsdWRlL2N1cnNlcy5oIFwKKwkkKElOQ0RJUikvdGVybV9lbnRyeS5oIFwKKwkkKElOQ0RJUikvdGljLmggXAorCSQoSU5DRElSKS9uY19hbGxvYy5oCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithbGw6CQkkKEFVVE9fU1JDKSAkKFBST0dTKQorCitzb3VyY2VzOgkkKEFVVE9fU1JDKQorCitpbnN0YWxsOiAJJChBVVRPX1NSQykgaW5zdGFsbC5wcm9ncwordW5pbnN0YWxsOiB1bmluc3RhbGwucHJvZ3MKKworIyB0aGlzIGxpbmUgc2ltcGxpZmllcyB0aGUgY29uZmlndXJlLXNjcmlwdAorbGlicyBcCitpbnN0YWxsLmxpYnMgXAordW5pbnN0YWxsLmxpYnM6CisKK1RSQU5TRk9STSA9IHNlZCAncy8keCQkLy8nfHNlZCAnJCh0cmFuc2Zvcm0pJ3xzZWQgJ3MvJCQvJHgvJworCisjIHRyYW5zZm9ybWVkIG5hbWVzIGZvciBpbnN0YWxsaW5nIGZpbGVzCithY3R1YWxfY2FwdG9pbmZvID0gYGVjaG8gY2FwdG9pbmZvJHh8ICQoVFJBTlNGT1JNKWAKK2FjdHVhbF9jbGVhciAgICAgPSBgZWNobyBjbGVhciR4fCAgICAgJChUUkFOU0ZPUk0pYAorYWN0dWFsX2luZm9jbXAgICA9IGBlY2hvIGluZm9jbXAkeHwgICAkKFRSQU5TRk9STSlgCithY3R1YWxfaW5mb3RvY2FwID0gYGVjaG8gaW5mb3RvY2FwJHh8ICQoVFJBTlNGT1JNKWAKK2FjdHVhbF9pbml0ICAgICAgPSBgZWNobyBpbml0JHh8ICAgICAgJChUUkFOU0ZPUk0pYAorYWN0dWFsX3Jlc2V0ICAgICA9IGBlY2hvIHJlc2V0JHh8ICAgICAkKFRSQU5TRk9STSlgCithY3R1YWxfdGljICAgICAgID0gYGVjaG8gdGljJHh8ICAgICAgICQoVFJBTlNGT1JNKWAKK2FjdHVhbF90b2UgICAgICAgPSBgZWNobyB0b2UkeHwgICAgICAgJChUUkFOU0ZPUk0pYAorYWN0dWFsX3RwdXQgICAgICA9IGBlY2hvIHRwdXQkeHwgICAgICAkKFRSQU5TRk9STSlgCithY3R1YWxfdHNldCAgICAgID0gYGVjaG8gdHNldCR4fCAgICAgICQoVFJBTlNGT1JNKWAKKworIyB0cmFuc2Zvcm1lZCBuYW1lcyBmb3IgY29tcGFyaW5nIGF0IHJ1bnRpbWUKK2RlZmluZV9jYXB0b2luZm8gPSBgZWNobyBjYXB0b2luZm98ICAgJChUUkFOU0ZPUk0pYAorZGVmaW5lX2luZm90b2NhcCA9IGBlY2hvIGluZm90b2NhcHwgICAkKFRSQU5TRk9STSlgCitkZWZpbmVfaW5pdCAgICAgID0gYGVjaG8gaW5pdHwgICAgICAgICQoVFJBTlNGT1JNKWAKK2RlZmluZV9yZXNldCAgICAgPSBgZWNobyByZXNldHwgICAgICAgJChUUkFOU0ZPUk0pYAorCit0cmFuc2Zvcm0uaCA6CisJZWNobyAiI2RlZmluZSBQUk9HX0NBUFRPSU5GTyBcIiQoZGVmaW5lX2NhcHRvaW5mbylcIiIgPiRACisJZWNobyAiI2RlZmluZSBQUk9HX0lORk9UT0NBUCBcIiQoZGVmaW5lX2luZm90b2NhcClcIiIgPj4kQAorCWVjaG8gIiNkZWZpbmUgUFJPR19SRVNFVCAgICAgXCIkKGRlZmluZV9yZXNldClcIiIgICAgID4+JEAKKwllY2hvICIjZGVmaW5lIFBST0dfSU5JVCAgICAgIFwiJChkZWZpbmVfaW5pdClcIiIgICAgICA+PiRACisKK2luc3RhbGwucHJvZ3M6ICQoQVVUT19TUkMpICQoUFJPR1MpICQoREVTVERJUikkKGJpbmRpcikKK0BNQUtFX1RFUk1JTkZPQAkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMX1BST0cpIHRpYyR4ICAgICAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3RpYykKK0BNQUtFX1RFUk1JTkZPQAkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMX1BST0cpIHRvZSR4ICAgICAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3RvZSkKK0BNQUtFX1RFUk1JTkZPQAlAZWNobyAibGlua2luZyAkKGFjdHVhbF9pbmZvdG9jYXApIHRvICQoYWN0dWFsX3RpYykiCitATUFLRV9URVJNSU5GT0AJLUBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX2luZm90b2NhcCkKK0BNQUtFX1RFUk1JTkZPQAkoY2QgJChERVNURElSKSQoYmluZGlyKSAmJiAkKExOX1MpICQoYWN0dWFsX3RpYykgJChhY3R1YWxfaW5mb3RvY2FwKSkKK0BNQUtFX1RFUk1JTkZPQAlAZWNobyAibGlua2luZyAkKGFjdHVhbF9jYXB0b2luZm8pIHRvICQoYWN0dWFsX3RpYykiCitATUFLRV9URVJNSU5GT0AJLUBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX2NhcHRvaW5mbykKK0BNQUtFX1RFUk1JTkZPQAkoY2QgJChERVNURElSKSQoYmluZGlyKSAmJiAkKExOX1MpICQoYWN0dWFsX3RpYykgJChhY3R1YWxfY2FwdG9pbmZvKSkKKwkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMX1BST0cpIGluZm9jbXAkeCAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX2luZm9jbXApCisJJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTF9QUk9HKSBjbGVhciR4ICAgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9jbGVhcikKKwkkKExJQlRPT0xfSU5TVEFMTCkgJChJTlNUQUxMX1BST0cpIHRwdXQkeCAgICAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3RwdXQpCisJJChMSUJUT09MX0lOU1RBTEwpICQoSU5TVEFMTF9QUk9HKSB0c2V0JHggICAgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF90c2V0KQorCUBlY2hvICJsaW5raW5nICQoYWN0dWFsX3Jlc2V0KSB0byAkKGFjdHVhbF90c2V0KSIKKwktQHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfcmVzZXQpCisJKGNkICQoREVTVERJUikkKGJpbmRpcikgJiYgJChMTl9TKSAkKGFjdHVhbF90c2V0KSAkKGFjdHVhbF9yZXNldCkpCisKK3VuaW5zdGFsbC5wcm9nczoKK0BNQUtFX1RFUk1JTkZPQAktQCQoTElCVE9PTF9DTEVBTikgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF90aWMpCitATUFLRV9URVJNSU5GT0AJLUAkKExJQlRPT0xfQ0xFQU4pIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfdG9lKQorQE1BS0VfVEVSTUlORk9ACS1Acm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9jYXB0b2luZm8pCitATUFLRV9URVJNSU5GT0AJLUBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX2luZm90b2NhcCkKKwktQCQoTElCVE9PTF9DTEVBTikgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kKGFjdHVhbF9pbmZvY21wKQorCS1AJChMSUJUT09MX0NMRUFOKSBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX2NsZWFyKQorCS1AJChMSUJUT09MX0NMRUFOKSBybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoYWN0dWFsX3RwdXQpCisJLUAkKExJQlRPT0xfQ0xFQU4pIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfdHNldCkKKwktQHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChhY3R1YWxfcmVzZXQpCisKKyQoREVTVERJUikkKGJpbmRpcikgOgorCXNoICQoc3JjZGlyKS8uLi9ta2RpcnMuc2ggJEAKKworIworIyBVdGlsaXRpZXMgbm9ybWFsbHkgYnVpbHQgYnkgbWFrZSBhbGwgc3RhcnQgaGVyZQorIworCitERVBTX1RJQyA9IFwKKwkkKE1PREVMKS90aWMkbyBcCisJJChNT0RFTCkvZHVtcF9lbnRyeSRvCisKK3RpYyR4OiAkKERFUFNfVElDKSAkKERFUFNfQ1VSU0VTKSB0cmFuc2Zvcm0uaAorCUBFQ0hPX0xJTktAICQoTElOSykgJChERVBTX1RJQykgJChMREZMQUdTX1RJQykgLW8gJEAKKworREVQU19UT0UgPSBcCisJJChNT0RFTCkvdG9lJG8KKwordG9lJHg6ICQoREVQU19UT0UpICQoREVQU19DVVJTRVMpCisJQEVDSE9fTElOS0AgJChMSU5LKSAkKERFUFNfVE9FKSAkKExERkxBR1NfVElDKSAtbyAkQAorCitERVBTX0NMRUFSID0gXAorCSQoTU9ERUwpL2NsZWFyJG8KKworY2xlYXIkeDogJChERVBTX0NMRUFSKSAkKERFUFNfQ1VSU0VTKQorCUBFQ0hPX0xJTktAICQoTElOSykgJChERVBTX0NMRUFSKSAkKExERkxBR1NfVElORk8pIC1vICRACisKK0RFUFNfVFBVVCA9IFwKKwkkKE1PREVMKS90cHV0JG8KKwordHB1dCR4OiAkKERFUFNfVFBVVCkgJChERVBTX0NVUlNFUykgdHJhbnNmb3JtLmgKKwlARUNIT19MSU5LQCAkKExJTkspICQoREVQU19UUFVUKSAkKExERkxBR1NfVElORk8pIC1vICRACisKK0RFUFNfSU5GT0NNUCA9IFwKKwkkKE1PREVMKS9pbmZvY21wJG8gXAorCSQoTU9ERUwpL2R1bXBfZW50cnkkbworCitpbmZvY21wJHg6ICQoREVQU19JTkZPQ01QKSAkKERFUFNfQ1VSU0VTKQorCUBFQ0hPX0xJTktAICQoTElOSykgJChERVBTX0lORk9DTVApICQoTERGTEFHU19USUMpIC1vICRACisKK0RFUFNfVFNFVCA9IFwKKwkkKE1PREVMKS90c2V0JG8KKwordHNldCR4OiAkKERFUFNfVFNFVCkgJChERVBTX0NVUlNFUykgdHJhbnNmb3JtLmgKKwlARUNIT19MSU5LQCAkKExJTkspICQoREVQU19UU0VUKSAkKExERkxBR1NfVElORk8pIC1vICRACisKK3Rlcm1zb3J0LmM6ICQoc3JjZGlyKS9NS3Rlcm1zb3J0LnNoCisJc2ggJChzcmNkaXIpL01LdGVybXNvcnQuc2ggJChBV0spICQoc3JjZGlyKS8uLi9pbmNsdWRlL0BURVJNSU5GT19DQVBTQCA+JEAKKworIworIyBVdGlsaXR5IHByb2R1Y3Rpb25zIHN0YXJ0IGhlcmUKKyMKKwordGFnczoKKwljdGFncyAqLltjaF0KKworQE1BS0VfVVBQRVJfVEFHU0BUQUdTOgorQE1BS0VfVVBQRVJfVEFHU0AJZXRhZ3MgKi5bY2hdCisKK21vc3RseWNsZWFuIDo6CisJLXJtIC1mIGNvcmUgdGFncyBUQUdTICp+ICouYmFrICouaSAqLmxuICouYXRhYyB0cmFjZQorCitjbGVhbiA6OiBtb3N0bHljbGVhbgorCS1zaCAtYyAiaWYgdGVzdCAtbiAnJHgnIDsgdGhlbiAkKE1BS0UpIGNsZWFuIHg9Jyc7IGZpIgorCS1ybSAtZiAkKEFVVE9fU1JDKQorCS1ybSAtZiAkKFBST0dTKQorCS1ybSAtcmYgLmxpYnMKKworZGlzdGNsZWFuIDo6IGNsZWFuCisJLXJtIC1mIE1ha2VmaWxlCisKK3JlYWxjbGVhbiA6OiBkaXN0Y2xlYW4KKworIyBUaGVzZSBydWxlcyBhcmUgdXNlZCB0byBhbGxvdyAibWFrZSAtbiIgdG8gd29yayBvbiBhIGNsZWFuIGRpcmVjdG9yeS10cmVlCisuLi9pbmNsdWRlL2hhc2hzaXplLmggXAorLi4vaW5jbHVkZS9wYXJhbWV0cml6ZWQuaCBcCisuLi9pbmNsdWRlL3Rlcm0uaCA6CisJY2QgLi4vaW5jbHVkZTsgJChNQUtFKSAkKENGX01GTEFHUykKKyQoREVQU19DVVJTRVMpIDoKKwljZCAuLi9uY3Vyc2VzOyAkKE1BS0UpICQoQ0ZfTUZMQUdTKQorCitsaW50OgorQE1BS0VfVEVSTUlORk9ACSQoTElOVCkgJChMSU5UX09QVFMpICQoQ1BQRkxBR1MpICQoc3JjZGlyKS90aWMuYyAgICAgJChzcmNkaXIpL2R1bXBfZW50cnkuYyAkKExJTlRfTElCUykKK0BNQUtFX1RFUk1JTkZPQAkkKExJTlQpICQoTElOVF9PUFRTKSAkKENQUEZMQUdTKSAkKHNyY2RpcikvdG9lLmMgICAgICQoc3JjZGlyKS9kdW1wX2VudHJ5LmMgJChMSU5UX0xJQlMpCisJJChMSU5UKSAkKExJTlRfT1BUUykgJChDUFBGTEFHUykgJChzcmNkaXIpL2NsZWFyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICQoTElOVF9MSUJTKQorCSQoTElOVCkgJChMSU5UX09QVFMpICQoQ1BQRkxBR1MpICQoc3JjZGlyKS9pbmZvY21wLmMgJChzcmNkaXIpL2R1bXBfZW50cnkuYyAkKExJTlRfTElCUykKKwkkKExJTlQpICQoTElOVF9PUFRTKSAkKENQUEZMQUdTKSAkKHNyY2RpcikvdHB1dC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgJChMSU5UX0xJQlMpCisJJChMSU5UKSAkKExJTlRfT1BUUykgJChDUFBGTEFHUykgJChzcmNkaXIpL3RzZXQuYyAgICAkKHNyY2RpcikvZHVtcF9lbnRyeS5jICQoTElOVF9MSUJTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSByZW1haW5kZXIgb2YgdGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGR1cmluZyBjb25maWd1cmF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wcm9ncy9jYXBjb252ZXJ0IGIvbmN1cnNlcy01LjcvcHJvZ3MvY2FwY29udmVydApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MTk5YmJmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcHJvZ3MvY2FwY29udmVydApAQCAtMCwwICsxLDI1NiBAQAorIyEvYmluL3NoCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRJZDogY2FwY29udmVydCx2IDEuNCAyMDA2LzA0LzIyIDIxOjQ2OjE3IHRvbSBFeHAgJAorIworIyBjYXBjb252ZXJ0IC0tIGF1dG9tYXRlZCBjb252ZXJzaW9uIGZyb20gdGVybWNhcCB0byB0ZXJtaW5mbworIworCitlY2hvICJUaGlzIHNjcmlwdCB0cmllcyB0byBhdXRvbWF0aWNhbGx5IHNldCB5b3UgdXAgc28gdGhhdCB5b3VyIGFwcGxpY2F0aW9ucyIKK2VjaG8gInRoYXQgbm93IHVzZSB0ZXJtY2FwIGNhbiB1c2UgdGVybWluZm8gYW5kIHRoZSBuY3Vyc2VzIGxpYnJhcnkuIgorZWNobyAiIgorCisjIE5vdGUsIGV4Y2VwdCBmb3IgdGVsbGluZyBpZiB3ZSdyZSBydW5uaW5nIHVuZGVyIHh0ZXJtIHdlIGRvbid0IHVzZSBURVJNIGF0CisjIGFsbC4gIFRoaXMgaXMgYmVjYXVzZSBCU0QgdXNlcnMgbm90IGluZnJlcXVlbnRseSBoYXZlIG11bHRpcGxlIHRlcm10eXBlcworIyBzZWxlY3RlZCBieSBjb25kaXRpb25hbHMgaW4gdHNldCAtLSB1bmxlc3MgdGhleSdyZSB4dGVybSB1c2VycywgaW4gd2hpY2gKKyMgY2FzZSB0aGV5J3JlIG9uIGEgd29ya3N0YXRpb24gYW5kIHByb2JhYmx5IGRvbid0LgorCisjIENoZWNrIHRvIG1ha2Ugc3VyZSBURVJNSU5GTyBpcyBub3QgYWxyZWFkeSBkZWZpbmVkCitpZiB0ZXN0IC1uICIkVEVSTUlORk8iCit0aGVuCisJZWNobyAiVEVSTUlORk8gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHlvdXIgZW52aXJvbm1lbnQuICBUaGlzIG1lYW5zIgorCWVjaG8gInlvdSBhbHJlYWR5IGhhdmUgYSBsb2NhbCB0ZXJtaW5mbyB0cmVlLCBzbyB5b3UgZG8gbm90IG5lZWQgYW55IgorCWVjaG8gImNvbnZlcnNpb24uIgorCWlmIHRlc3QgISAtZCAkVEVSTUlORk8gOyB0aGVuCisJCWVjaG8gIkNhdXRpb246IFRFUk1JTkZPIGRvZXMgbm90IHBvaW50IHRvIGEgZGlyZWN0b3J5ISIKKwlmaQorCWV4aXQ7CitmaQorCisjIENoZWNrIHRvIHNlZSBpZiB0ZXJtaW5mbyBpcyBwcmVzZW50IGluIG9uZSBvZiB0aGUgc3RhbmRhcmQgbG9jYXRpb25zLgordGVybWluZm89bm8KK2ZvciBwIGluICRURVJNSU5GTyBcCisJL3Vzci9saWIvdGVybWluZm8gXAorCS91c3Ivc2hhcmUvbGliL3Rlcm1pbmZvIFwKKwkvdXNyL3NoYXJlL3Rlcm1pbmZvIFwKKwkvdXNyL2xvY2FsL2xpYi90ZXJtaW5mbyBcCisJL3Vzci9sb2NhbC9zaGFyZS90ZXJtaW5mbworZG8KKwlpZiB0ZXN0IC1kICRwIDsgdGhlbgorCQl0ZXJtaW5mbz15ZXMKKwkJYnJlYWsKKwlmaQorZG9uZQorCitpZiB0ZXN0ICR0ZXJtaW5mbyA9IHllcwordGhlbgorCWVjaG8gIllvdXIgc3lzdGVtIGFscmVhZHkgaGFzIGEgc3lzdGVtLXdpZGUgdGVybWluZm8gdHJlZS4iCisJZWNobyAiIgorCWlmIHRlc3QgLXogIiRURVJNQ0FQIgorCXRoZW4KKwkJZWNobyAiWW91IGhhdmUgbm8gVEVSTUNBUCB2YXJpYWJsZSBzZXQsIHNvIHdlIGFyZSBkb25lLiIKKwkJIyBBc3N1bWVzIHRoZSB0ZXJtaW5mbyBtYXN0ZXIgY292ZXJzIGFsbCBjYW5uZWQgdGVybWluYWwgdHlwZXMKKwkJZXhpdDsKKwlmaQorCWlmIHRlc3QgIiRURVJNIiA9ICJ4dGVybSIKKwl0aGVuCisJCWVjaG8gIllvdSBhcmUgcnVubmluZyB4dGVybSwgd2hpY2ggdXN1YWxseSBzZXRzIFRFUk1DQVAgaXRzZWxmLiIKKwkJZWNobyAiV2UgY2FuIGlnbm9yZSB0aGlzLCBiZWNhdXNlIHRlcm1pbmZvIGtub3dzIGFib3V0IHh0ZXJtLiIKKwkJZWNobyAiU28geW91IHdpbGwganVzdCB1c2UgdGhlIHN5c3RlbS13aWRlIHRlcm1pbmZvIHRyZWUuIgorCQlleGl0OworCWVsc2UKKwkJZWNobyAiV2Ugd2lsbCBoYXZlIHRvIG1ha2UgYSBsb2NhbCBvbmUgZm9yIHlvdSBhbnl3YXksIHRvIGNhcHR1cmUgdGhlIGVmZmVjdCIKKwkJZWNobyAib2YgeW91ciBURVJNQ0FQIHZhcmlhYmxlLiIKKwlmaQorZWxzZQorCWVjaG8gIk5vIHN5c3RlbS13aWRlIHRlcm1pbmZvIHRyZWUuICBXZSB3aWxsIG1ha2UgeW91IGEgbG9jYWwgb25lLiIKK2ZpCitlY2hvICIiOworCisjIENoZWNrIGlmIHRlc3QgLXggd29ya3MgKGl0J3Mgbm90IHBvcnRhYmxlLCBidXQgdXNlZnVsKQorT1BUPSIteCIKK1RNUD10ZXN0JCQ7IHRvdWNoICRUTVAgJiYgY2htb2QgNzU1ICRUTVAKK2lmIHRlc3QgJE9QVCAkVE1QIDsgdGhlbgorCWNobW9kIDY0NCAkVE1QCisJdGVzdCAkT1BUICRUTVAgJiYgT1BUPSItZiIKK2Vsc2UKKwlPUFQ9Ii1mIgorZmkKK3JtIC1mICRUTVAKKworIyBGaXJzdCBzdGVwIC0tIGdvIGZpbmQgdGljCitUSUM9CitJRlM9IiR7SUZTPSAJfSI7IHNhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgorZm9yIHggaW4gJFBBVEggLgorZG8KKwlpZiB0ZXN0ICRPUFQgJHgvdGljCisJdGhlbiAKKwkJVElDPSR4L3RpYworCQlicmVhaworCWZpCitkb25lCitJRlM9IiRhY19zYXZlX2lmcyIKKworaWYgdGVzdCAtbiAiJFRJQyIKK3RoZW4KKwllY2hvICJJIHNlZSB0aWMgYXQgJFRJQy4iCisJY2FzZSAkVElDIGluICMgKHZpCisJLi90aWMpCisJCWlmIHRlc3QgJE9QVCAuLi9taXNjL3NobGliIDsgdGhlbgorCQkJVElDPSIuLi9taXNjL3NobGliICRUSUMiCisJCWZpCisJCTs7CisJZXNhYworZWxzZQorCWVjaG8gIllvdSBkbyBub3QgaGF2ZSB0aWMgaW5zdGFsbGVkIGFueXdoZXJlIEkgY2FuIHNlZSwgcGxlYXNlIGZpeCB0aGF0LiIKKwlleGl0OworZmkKK2VjaG8gIiI7CisKKyMgV2UgaGF2ZSB0aWMuICBFaXRoZXIgdGhlcmUncyBubyBzeXN0ZW0gdGVybWluZm8gdHJlZSBvciB0aGVyZSBpcyBvbmUgYnV0CisjIHRoZSB1c2VyIGhhcyBhIFRFUk1DQVAgdmFyaWFibGUgdGhhdCBtYXkgbW9kaWZ5IGEgc3RvY2sgZGVzY3JpcHRpb24uCisjCisKKyMgTWFrZSB0aGUgdXNlciBhIHRlcm1pbmZvIGRpcmVjdG9yeQoraWYgdGVzdCAtZCAkSE9NRS8udGVybWluZm8KK3RoZW4KKwllY2hvICJJdCBhcHBlYXJzIHlvdSBhbHJlYWR5IGhhdmUgYSBwcml2YXRlIHRlcm1pbmZvIGRpcmVjdG9yeSIKKwllY2hvICJhdCAkSE9NRS8udGVybWluZm87IHRoaXMgc2VlbXMgb2RkLCBiZWNhdXNlIFRFUk1JTkZPIgorCWVjaG8gImlzIG5vdCBkZWZpbmVkLiAgSSBhbSBub3QgZ29pbmcgdG8gc2Vjb25kLWd1ZXNzIHRoaXMgLS0gaWYgeW91IiAKKwllY2hvICJyZWFsbHkgd2FudCBtZSB0byB0cnkgYXV0by1jb25maWd1cmluZyBmb3IgeW91LCByZW1vdmUgb3IiCisJZWNobyAicmVuYW1lICRIT01FL3Rlcm1pbmZvIGFuZCBydW4gbWUgYWdhaW4uIgorCWV4aXQ7CitlbHNlCisJZWNobyAiSSBhbSBjcmVhdGluZyB5b3VyIHByaXZhdGUgdGVybWluZm8gZGlyZWN0b3J5IGF0ICRIT01FLy50ZXJtaW5mbyIKKwlta2RpciAkSE9NRS8udGVybWluZm8KKwkjIEVuc3VyZSB0aGF0IHRoYXQncyB3aGVyZSB0aWMncyBjb21waWxhdGlvbiByZXN1bHRzLgorCSMgVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgd2l0aCBhIDEuOS43IG9yIGxhdGVyIHRpYy4KKwlURVJNSU5GTz0iJEhPTUUvLnRlcm1pbmZvIjsgZXhwb3J0IFRFUk1JTkZPCitmaQorZWNobyAiIjsKKworIyBGaW5kIGEgdGVybWluZm8gc291cmNlIHRvIHdvcmsgZnJvbQoraWYgdGVzdCAtZiAuLi9taXNjL3Rlcm1pbmZvLnNyYwordGhlbgorCWVjaG8gIkkgc2VlIHRoZSB0ZXJtaW5mbyBtYXN0ZXIgc291cmNlIGlzIGhhbmR5OyBJIHdpbGwgdXNlIHRoYXQuIgorCW1hc3Rlcj0uLi9taXNjL3Rlcm1pbmZvLnNyYworZWxzZQorCSMgT29vcHMuLi5sb29rcyBsaWtlIHdlJ3JlIHJ1bm5pbmcgZnJvbSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUKKwkjIHByb2dzIGRpcmVjdG9yeSBvZiBhbiBuY3Vyc2VzIHNvdXJjZSB0cmVlLgorCW1hc3Rlcj1gZmluZCAkSE9NRSAtbmFtZSAiKnRlcm1pbmZvLnNyYyIgLXByaW50YAorCW1jb3VudD1gZWNobyAkbWFzdGVyIHwgd2MgLWxgCisJY2FzZSAkbWNvdW50IGluCisJMCkKKwkJZWNobyAiSSBjYW4gbm90IGZpbmQgYSB0ZXJtaW5mbyBzb3VyY2UgZmlsZSBhbnl3aGVyZSB1bmRlciB5b3VyIGhvbWUgZGlyZWN0b3J5LiIKKwkJZWNobyAiVGhlcmUgc2hvdWxkIGJlIGEgZmlsZSBjYWxsZWQgdGVybWluZm8uc3JjIHNvbWV3aGVyZSBpbiB5b3VyIgorCQllY2hvICJuY3Vyc2VzIGRpc3RyaWJ1dGlvbjsgcGxlYXNlIHB1dCBpdCBpbiB5b3VyIGhvbWUgZGlyZWN0b3RyeSIKKwkJZWNobyAiYW5kIHJ1biBtZSBhZ2FpbiAoaXQgZG9lcyBub3QgaGF2ZSB0byBsaXZlIHRoZXJlIHBlcm1hbmVudGx5KS4iCisJCWV4aXQ7CisJOzsKKwkxKQorCQllY2hvICJJIHNlZSBhIGZpbGUgY2FsbGVkICRtYXN0ZXIuIgorCQllY2hvICJJIGFtIGdvaW5nIHRvIGFzc3VtZSB0aGlzIGlzIHRoZSB0ZXJtaW5mbyBzb3VyY2UgaW5jbHVkZWQgd2l0aCIKKwkJZWNobyAidGhlIG5jdXJzZXMgZGlzdHJpYnV0aW9uLiAgSWYgdGhpcyBhc3N1bXB0aW9uIGlzIHdyb25nLCBwbGVhc2UiCisJCWVjaG8gImludGVycnVwdCBtZSBub3chICBPSyB0byBjb250aW51ZT8iCisJCXJlYWQgYW5zOworCTs7CisJMikKKwkJZWNobyAiSSBzZWUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSB0ZXJtaW5mbyBzb3VyY2UuICBIZXJlIHRoZXkgYXJlOiIKKwkJZWNobyAkbWFzdGVyIHwgc2VkICIvXi9zLy8JLyI7CisJCXdoaWxlIDoKKwkJZG8KKwkJCWVjaG8gIlBsZWFzZSB0ZWxsIG1lIHdoaWNoIG9uZSB0byB1c2U6IgorCQkJcmVhZCBtYXN0ZXI7CisJCQlpZiB0ZXN0IC1mICRtYXN0ZXIKKwkJCXRoZW4KKwkJCQlicmVhaworCQkJZWxzZQorCQkJCWVjaG8gIlRoYXQgZmlsZSBkb2VzIG5vdCBleGlzdC4gVHJ5IGFnYWluPyI7CisJCQlmaQorCQlkb25lCisJOzsKKwllc2FjCitmaQorZWNobyAiIjsKKworIyBOb3cgdGhhdCB3ZSBoYXZlIGEgbWFzdGVyLCBjb21waWxlIGl0IGludG8gdGhlIGxvY2FsIHRyZWUKK2VjaG8gIk9LLCBub3cgSSB3aWxsIG1ha2UgeW91ciBwcml2YXRlIHRlcm1pbmZvIHRyZWUuICBUaGlzIG1heSB0YWtlIGEgYml0Li4uIgorIworIyBLbHVnZSBhbGVydDogd2UgY29tcGlsZSB0ZXJtaW5mby5zcmMgaW4gdHdvIHBpZWNlcyBiZWNhdXNlIGEgbG90IG9mIG1hY2hpbmVzCisjIHdpdGggPCAxNk1CIFJBTSBjaG9rZSBvbiB0aWMncyBjb3JlLWhvZyBoYWJpdHMuCit0cmFwICJybSAtZiB0c3BsaXQkJC4qIiAwIDEgMiA1IDE1CitzZWQgLW4gJG1hc3RlciBcCisJLWUgJzEsL1NQTElUIEhFUkUvdyAndHNwbGl0JCQuMDEgXAorCS1lICcvU1BMSVQgSEVSRS8sJHcgJ3RzcGxpdCQkLjAyIFwKKwkyPi9kZXYvbnVsbAorZm9yIHggaW4gdHNwbGl0JCQuKjsgZG8gZXZhbCAkVElDICR4OyBkb25lCitybSB0c3BsaXQkJC4qCit0cmFwIDAgMSAyIDUgMTUKKyMKK2VjaG8gIllvdSBub3cgaGF2ZSBhIHByaXZhdGUgdHJlZSB1bmRlciAkSE9NRS8udGVybWluZm87IgorZWNobyAidGhlIG5jdXJzZXMgbGlicmFyeSB3aWxsIGF1dG9tYXRpY2FsbHkgcmVhZCBmcm9tIGl0LCIKK2VjaG8gImFuZCBuY3Vyc2VzIHRpYyB3aWxsIGF1dG9tYXRpY2FsbHkgY29tcGlsZSBlbnRyaWVzIHRvIGl0LiIgCisKKyMgV2UncmUgZG9uZSB1bmxlc3MgdXNlciBoYXMgYSAudGVybWNhcCBmaWxlIG9yIGVxdWl2YWxlbnQgbmFtZWQgYnkgVEVSTUNBUAoraWYgdGVzdCAteiAiJFRFUk1DQVAiCit0aGVuCisJZWNobyAiWW91IGhhdmUgbm8gVEVSTUNBUCBzZXQsIHNvIHdlIGFyZSBkb25lLiIKK2ZpCisKKyMgT0ssIGhlcmUgY29tZXMgdGhlIG5hc3R5IGNhc2UuLi51c2VyIGhhcyBhIFRFUk1DQVAuICBJbnN0ZWFkIG9mCisjIHRyeWluZyB0byBmb2xsb3cgYWxsIHRoZSBjb252b2x1dGlvbnMgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisjIFRFUk0gYW5kIFRFUk1DQVAgKHBhcnRseSBiZWNhdXNlIGl0J3MgdG9vIHBhaW5mdWwsIGFuZCBwYXJ0bHkgYmVjYXVzZQorIyB3ZSBkb24ndCBhY3R1YWxseSBrbm93IHdoYXQgVEVSTSB3aWxsIGJlIG5vciBldmVuIGlmIGl0IGFsd2F5cyBoYXMKKyMgdGhlIHNhbWUgdmFsdWUgZm9yIHRoaXMgdXNlcikgd2UgZG8gdGhlIGZvbGxvd2luZyB0aHJlZSBzdGVwcy4uLgorCitpZiB0ZXN0IC1mICRIT01FLy50ZXJtY2FwCit0aGVuCisJZWNobyAnSSBzZWUgeW91IGhhdmUgYSAkSE9NRS8udGVybWNhcCBmaWxlLiAgSSB3aWxsIGNvbXBpbGUgdGhhdC4nCisJZXZhbCAkVElDICRIT01FLy50ZXJtY2FwCisJZWNobyAiRG9uZS4iCisJZWNobyAiTm90ZSB0aGF0IGVkaXRpbmcgJEhPTUUvLnRlcm1jYXAgd2lsbCBubyBsb25nZXIgY2hhbmdlIHRoZSBkYXRhIGN1cnNlcyBzZWVzLiIKK2VsaWYgdGVzdCAtZiAiJFRFUk1DQVAiCit0aGVuIAorCWVjaG8gIllvdXIgVEVSTUNBUCBuYW1lcyB0aGUgZmlsZSAkVEVSTUNBUC4gIEkgd2lsbCBjb21waWxlIHRoYXQuIgorCWV2YWwgJFRJQyAkVEVSTUNBUAorCWVjaG8gIkRvbmUuIgorCWVjaG8gIk5vdGUgdGhhdCBlZGl0aW5nICRURVJNQ0FQIHdpbGwgbm8gbG9uZ2VyIGNoYW5nZSB0aGUgZGF0YSBjdXJzZXMgc2Vlcy4iCitlbHNlCisJZWNobyAiWW91ciBURVJNQ0FQIHZhbHVlIGFwcGVhcnMgdG8gYmUgYW4gZW50cnkgaW4gdGVybWNhcCBmb3JtYXQuIgorCWVjaG8gIkkgd2lsbCBjb21waWxlIGl0LiIKKwllY2hvICRURVJNQ0FQID5teXRlcm0kJAorCWV2YWwgJFRJQyBteXRlcm0kJAorCXJtIG15dGVybSQkCisJZWNobyAiRG9uZS4iCisJZWNobyAiTm90ZSB0aGF0IGVkaXRpbmcgVEVSTUNBUCB3aWxsIG5vIGxvbmdlciBjaGFuZ2UgdGhlIGRhdGEgY3Vyc2VzIHNlZXMuIgorZmkKK2VjaG8gIlRvIGRvIHRoYXQsIGRlY29tcGlsZSB0aGUgdGVybWluYWwgZGVjcmlwdGlvbiB5b3Ugd2FudCB3aXRoIGluZm9jbXAoMSksIgorZWNobyAiZWRpdCB0byB0YXN0ZSwgYW5kIHJlY29tcGlsZSB1c2luZyB0aWMoMSkuIgorCisjIGNhcGNvbnZlcnQgZW5kcyBoZXJlCisKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Byb2dzL2NsZWFyLmMgYi9uY3Vyc2VzLTUuNy9wcm9ncy9jbGVhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNWE1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wcm9ncy9jbGVhci5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGNsZWFyLmMgLS0gIGNsZWFycyB0aGUgdGVybWluYWwncyBzY3JlZW4KKyAqLworCisjZGVmaW5lIFVTRV9MSUJUSU5GTworI2luY2x1ZGUgPHByb2dzLnByaXYuaD4KKworTU9EVUxFX0lEKCIkSWQ6IGNsZWFyLmMsdiAxLjExIDIwMDcvMTAvMTMgMjI6MTY6MDIgdG9tIEV4cCAkIikKKworc3RhdGljIGludAorcHV0Y2goaW50IGMpCit7CisgICAgcmV0dXJuIHB1dGNoYXIoYyk7Cit9CisKK2ludAorbWFpbigKKwlpbnQgYXJnYyBHQ0NfVU5VU0VELAorCWNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgc2V0dXB0ZXJtKChjaGFyICopIDAsIFNURE9VVF9GSUxFTk8sIChpbnQgKikgMCk7CisgICAgRXhpdFByb2dyYW0oKHRwdXRzKGNsZWFyX3NjcmVlbiwgbGluZXMgPiAwID8gbGluZXMgOiAxLCBwdXRjaCkgPT0gRVJSKQorCQk/IEVYSVRfRkFJTFVSRQorCQk6IEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wcm9ncy9jbGVhci5zaCBiL25jdXJzZXMtNS43L3Byb2dzL2NsZWFyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyNjExMmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wcm9ncy9jbGVhci5zaApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2V4ZWMgdHB1dCBjbGVhcgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcHJvZ3MvZHVtcF9lbnRyeS5jIGIvbmN1cnNlcy01LjcvcHJvZ3MvZHVtcF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjQyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wcm9ncy9kdW1wX2VudHJ5LmMKQEAgLTAsMCArMSwxMjczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBUaG9tYXMgRS4gRGlja2V5ICAgICAgICAgICAgICAgICAgICAgICAgMTk5NiBvbiAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgX19JTlRFUk5BTF9DQVBTX1ZJU0lCTEUKKyNpbmNsdWRlIDxwcm9ncy5wcml2Lmg+CisKKyNpbmNsdWRlICJkdW1wX2VudHJ5LmgiCisjaW5jbHVkZSAidGVybXNvcnQuYyIJCS8qIHRoaXMgQyBmaWxlIGlzIGdlbmVyYXRlZCAqLworI2luY2x1ZGUgPHBhcmFtZXRyaXplZC5oPgkvKiBzbyBpcyB0aGlzICovCisKK01PRFVMRV9JRCgiJElkOiBkdW1wX2VudHJ5LmMsdiAxLjg4IDIwMDgvMDgvMDQgMTI6MzY6MTIgdG9tIEV4cCAkIikKKworI2RlZmluZSBJTkRFTlQJCQk4CisjZGVmaW5lIERJU0NBUkQoc3RyaW5nKSBzdHJpbmcgPSBBQlNFTlRfU1RSSU5HCisjZGVmaW5lIFBSSU5URiAodm9pZCkgcHJpbnRmCisKKyNkZWZpbmUgT2tJbmRleChpbmRleCxhcnJheSkgKChpbnQpKGluZGV4KSA+PSAwICYmIChpbnQpKGluZGV4KSA8IChpbnQpIFNJWkVPRihhcnJheSkpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICp0ZXh0OworICAgIHNpemVfdCB1c2VkOworICAgIHNpemVfdCBzaXplOworfSBEWU5CVUY7CisKK3N0YXRpYyBpbnQgdHZlcnNpb247CQkvKiB0ZXJtaW5mbyB2ZXJzaW9uICovCitzdGF0aWMgaW50IG91dGZvcm07CQkvKiBvdXRwdXQgZm9ybWF0IHRvIHVzZSAqLworc3RhdGljIGludCBzb3J0bW9kZTsJCS8qIHNvcnQgbW9kZSB0byB1c2UgKi8KK3N0YXRpYyBpbnQgd2lkdGggPSA2MDsJCS8qIG1heCBsaW5lIHdpZHRoIGZvciBsaXN0aW5ncyAqLworc3RhdGljIGludCBjb2x1bW47CQkvKiBjdXJyZW50IGNvbHVtbiwgbGltaXRlZCBieSAnd2lkdGgnICovCitzdGF0aWMgaW50IG9sZGNvbDsJCS8qIGxhc3QgdmFsdWUgb2YgY29sdW1uIGJlZm9yZSB3cmFwICovCitzdGF0aWMgYm9vbCBwcmV0dHk7CQkvKiB0cnVlIGlmIHdlIGZvcm1hdCBpZi10aGVuLWVsc2Ugc3RyaW5ncyAqLworCitzdGF0aWMgY2hhciAqc2F2ZV9zZ3I7CisKK3N0YXRpYyBEWU5CVUYgb3V0YnVmOworc3RhdGljIERZTkJVRiB0bXBidWY7CisKKy8qIGluZGlyZWN0aW9uIHBvaW50ZXJzIGZvciBpbXBsZW1lbnRpbmcgc29ydCBhbmQgZGlzcGxheSBtb2RlcyAqLworc3RhdGljIGNvbnN0IFByZWRJZHggKmJvb2xfaW5kaXJlY3QsICpudW1faW5kaXJlY3QsICpzdHJfaW5kaXJlY3Q7CitzdGF0aWMgTkNVUlNFU19DT05TVCBjaGFyICpjb25zdCAqYm9vbF9uYW1lczsKK3N0YXRpYyBOQ1VSU0VTX0NPTlNUIGNoYXIgKmNvbnN0ICpudW1fbmFtZXM7CitzdGF0aWMgTkNVUlNFU19DT05TVCBjaGFyICpjb25zdCAqc3RyX25hbWVzOworCitzdGF0aWMgY29uc3QgY2hhciAqc2VwYXJhdG9yLCAqdHJhaWxlcjsKKworLyogY292ZXIgdmFyaW91cyBwb3J0cyBhbmQgdmFyaWFudHMgb2YgdGVybWluZm8gKi8KKyNkZWZpbmUgVl9BTExDQVBTCTAJLyogYWxsIGNhcGFiaWxpdGllcyAoU1ZyNCwgWFNJLCBuY3Vyc2VzKSAqLworI2RlZmluZSBWX1NWUjEJCTEJLyogU1ZSMSwgVWx0cml4ICovCisjZGVmaW5lIFZfSFBVWAkJMgkvKiBIUC9VWCAqLworI2RlZmluZSBWX0FJWAkJMwkvKiBBSVggKi8KKyNkZWZpbmUgVl9CU0QJCTQJLyogQlNEICovCisKKyNpZiBOQ1VSU0VTX1hOQU1FUworI2RlZmluZSBPQlNPTEVURShuKSAoIV9uY191c2VyX2RlZmluYWJsZSAmJiAoblswXSA9PSAnTycgJiYgblsxXSA9PSAnVCcpKQorI2Vsc2UKKyNkZWZpbmUgT0JTT0xFVEUobikgKG5bMF0gPT0gJ08nICYmIG5bMV0gPT0gJ1QnKQorI2VuZGlmCisKKyNkZWZpbmUgaXNPYnNvbGV0ZShmLG4pICgoZiA9PSBGX1RFUk1JTkZPIHx8IGYgPT0gRl9WQVJJQUJMRSkgJiYgT0JTT0xFVEUobikpCisKKyNpZiBOQ1VSU0VTX1hOQU1FUworI2RlZmluZSBCb29sSW5kaXJlY3QoaikgKChqID49IEJPT0xDT1VOVCkgPyAoaikgOiAoKHNvcnRtb2RlID09IFNfTk9TT1JUKSA/IGogOiBib29sX2luZGlyZWN0W2pdKSkKKyNkZWZpbmUgTnVtSW5kaXJlY3QoaikgICgoaiA+PSBOVU1DT1VOVCkgID8gKGopIDogKChzb3J0bW9kZSA9PSBTX05PU09SVCkgPyBqIDogbnVtX2luZGlyZWN0W2pdKSkKKyNkZWZpbmUgU3RySW5kaXJlY3QoaikgICgoaiA+PSBTVFJDT1VOVCkgID8gKGopIDogKChzb3J0bW9kZSA9PSBTX05PU09SVCkgPyBqIDogc3RyX2luZGlyZWN0W2pdKSkKKyNlbHNlCisjZGVmaW5lIEJvb2xJbmRpcmVjdChqKSAoKHNvcnRtb2RlID09IFNfTk9TT1JUKSA/IChqKSA6IGJvb2xfaW5kaXJlY3Rbal0pCisjZGVmaW5lIE51bUluZGlyZWN0KGopICAoKHNvcnRtb2RlID09IFNfTk9TT1JUKSA/IChqKSA6IG51bV9pbmRpcmVjdFtqXSkKKyNkZWZpbmUgU3RySW5kaXJlY3QoaikgICgoc29ydG1vZGUgPT0gU19OT1NPUlQpID8gKGopIDogc3RyX2luZGlyZWN0W2pdKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitzdHJuY3B5X0RZTihEWU5CVUYgKiBkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG5lZWQpCit7CisgICAgc2l6ZV90IHdhbnQgPSBuZWVkICsgZHN0LT51c2VkICsgMTsKKyAgICBpZiAod2FudCA+IGRzdC0+c2l6ZSkgeworCWRzdC0+c2l6ZSArPSAod2FudCArIDEwMjQpOwkvKiBiZSBnZW5lcm91cyAqLworCWRzdC0+dGV4dCA9IHR5cGVSZWFsbG9jKGNoYXIsIGRzdC0+c2l6ZSwgZHN0LT50ZXh0KTsKKyAgICB9CisgICAgKHZvaWQpIHN0cm5jcHkoZHN0LT50ZXh0ICsgZHN0LT51c2VkLCBzcmMsIG5lZWQpOworICAgIGRzdC0+dXNlZCArPSBuZWVkOworICAgIGRzdC0+dGV4dFtkc3QtPnVzZWRdID0gMDsKK30KKworc3RhdGljIHZvaWQKK3N0cmNweV9EWU4oRFlOQlVGICogZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisgICAgaWYgKHNyYyA9PSAwKSB7CisJZHN0LT51c2VkID0gMDsKKwlzdHJjcHlfRFlOKGRzdCwgIiIpOworICAgIH0gZWxzZSB7CisJc3RybmNweV9EWU4oZHN0LCBzcmMsIHN0cmxlbihzcmMpKTsKKyAgICB9Cit9CisKKyNpZiBOT19MRUFLUworc3RhdGljIHZvaWQKK2ZyZWVfRFlOKERZTkJVRiAqIHApCit7CisgICAgaWYgKHAtPnRleHQgIT0gMCkKKwlmcmVlKHAtPnRleHQpOworICAgIHAtPnRleHQgPSAwOworICAgIHAtPnNpemUgPSAwOworICAgIHAtPnVzZWQgPSAwOworfQorCit2b2lkCitfbmNfbGVha3NfZHVtcF9lbnRyeSh2b2lkKQoreworICAgIGZyZWVfRFlOKCZvdXRidWYpOworICAgIGZyZWVfRFlOKCZ0bXBidWYpOworfQorI2VuZGlmCisKKyNkZWZpbmUgTmFtZVRyYW5zKGNoZWNrLHJlc3VsdCkgXAorCSAgICBpZiAoT2tJbmRleChucC0+bnRlX2luZGV4LCBjaGVjaykgXAorCQkmJiBjaGVja1tucC0+bnRlX2luZGV4XSkgXAorCQlyZXR1cm4gKHJlc3VsdFtucC0+bnRlX2luZGV4XSkKKworTkNVUlNFU19DT05TVCBjaGFyICoKK25hbWV0cmFucyhjb25zdCBjaGFyICpuYW1lKQorLyogdHJhbnNsYXRlIGEgY2FwYWJpbGl0eSBuYW1lIGZyb20gdGVybWNhcCB0byB0ZXJtaW5mbyAqLworeworICAgIGNvbnN0IHN0cnVjdCBuYW1lX3RhYmxlX2VudHJ5ICpucDsKKworICAgIGlmICgobnAgPSBfbmNfZmluZF9lbnRyeShuYW1lLCBfbmNfZ2V0X2hhc2hfdGFibGUoMCkpKSAhPSAwKQorCXN3aXRjaCAobnAtPm50ZV90eXBlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICBOYW1lVHJhbnMoYm9vbF9mcm9tX3Rlcm1jYXAsIGJvb2xjb2Rlcyk7CisJICAgIGJyZWFrOworCisJY2FzZSBOVU1CRVI6CisJICAgIE5hbWVUcmFucyhudW1fZnJvbV90ZXJtY2FwLCBudW1jb2Rlcyk7CisJICAgIGJyZWFrOworCisJY2FzZSBTVFJJTkc6CisJICAgIE5hbWVUcmFucyhzdHJfZnJvbV90ZXJtY2FwLCBzdHJjb2Rlcyk7CisJICAgIGJyZWFrOworCX0KKworICAgIHJldHVybiAoMCk7Cit9CisKK3ZvaWQKK2R1bXBfaW5pdChjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgbW9kZSwgaW50IHNvcnQsIGludCB0d2lkdGgsIGludCB0cmFjZXZhbCwKKwkgIGJvb2wgZm9ybWF0dGVkKQorLyogc2V0IHVwIGZvciBlbnRyeSBkaXNwbGF5ICovCit7CisgICAgd2lkdGggPSB0d2lkdGg7CisgICAgcHJldHR5ID0gZm9ybWF0dGVkOworCisgICAgLyogdmVyc2lvbnMgKi8KKyAgICBpZiAodmVyc2lvbiA9PSAwKQorCXR2ZXJzaW9uID0gVl9BTExDQVBTOworICAgIGVsc2UgaWYgKCFzdHJjbXAodmVyc2lvbiwgIlNWcjEiKSB8fCAhc3RyY21wKHZlcnNpb24sICJTVlIxIikKKwkgICAgIHx8ICFzdHJjbXAodmVyc2lvbiwgIlVsdHJpeCIpKQorCXR2ZXJzaW9uID0gVl9TVlIxOworICAgIGVsc2UgaWYgKCFzdHJjbXAodmVyc2lvbiwgIkhQIikpCisJdHZlcnNpb24gPSBWX0hQVVg7CisgICAgZWxzZSBpZiAoIXN0cmNtcCh2ZXJzaW9uLCAiQUlYIikpCisJdHZlcnNpb24gPSBWX0FJWDsKKyAgICBlbHNlIGlmICghc3RyY21wKHZlcnNpb24sICJCU0QiKSkKKwl0dmVyc2lvbiA9IFZfQlNEOworICAgIGVsc2UKKwl0dmVyc2lvbiA9IFZfQUxMQ0FQUzsKKworICAgIC8qIGltcGxlbWVudCBkaXNwbGF5IG1vZGVzICovCisgICAgc3dpdGNoIChvdXRmb3JtID0gbW9kZSkgeworICAgIGNhc2UgRl9MSVRFUkFMOgorICAgIGNhc2UgRl9URVJNSU5GTzoKKwlib29sX25hbWVzID0gYm9vbG5hbWVzOworCW51bV9uYW1lcyA9IG51bW5hbWVzOworCXN0cl9uYW1lcyA9IHN0cm5hbWVzOworCXNlcGFyYXRvciA9IHR3aWR0aCA/ICIsICIgOiAiLCI7CisJdHJhaWxlciA9ICJcblx0IjsKKwlicmVhazsKKworICAgIGNhc2UgRl9WQVJJQUJMRToKKwlib29sX25hbWVzID0gYm9vbGZuYW1lczsKKwludW1fbmFtZXMgPSBudW1mbmFtZXM7CisJc3RyX25hbWVzID0gc3RyZm5hbWVzOworCXNlcGFyYXRvciA9IHR3aWR0aCA/ICIsICIgOiAiLCI7CisJdHJhaWxlciA9ICJcblx0IjsKKwlicmVhazsKKworICAgIGNhc2UgRl9URVJNQ0FQOgorICAgIGNhc2UgRl9UQ09OVkVSUjoKKwlib29sX25hbWVzID0gYm9vbGNvZGVzOworCW51bV9uYW1lcyA9IG51bWNvZGVzOworCXN0cl9uYW1lcyA9IHN0cmNvZGVzOworCXNlcGFyYXRvciA9ICI6IjsKKwl0cmFpbGVyID0gIlxcXG5cdDoiOworCWJyZWFrOworICAgIH0KKworICAgIC8qIGltcGxlbWVudCBzb3J0IG1vZGVzICovCisgICAgc3dpdGNoIChzb3J0bW9kZSA9IHNvcnQpIHsKKyAgICBjYXNlIFNfTk9TT1JUOgorCWlmICh0cmFjZXZhbCkKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgIiVzOiBzb3J0aW5nIGJ5IHRlcm0gc3RydWN0dXJlIG9yZGVyXG4iLCBfbmNfcHJvZ25hbWUpOworCWJyZWFrOworCisgICAgY2FzZSBTX1RFUk1JTkZPOgorCWlmICh0cmFjZXZhbCkKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgIiVzOiBzb3J0aW5nIGJ5IHRlcm1pbmZvIG5hbWUgb3JkZXJcbiIsIF9uY19wcm9nbmFtZSk7CisJYm9vbF9pbmRpcmVjdCA9IGJvb2xfdGVybWluZm9fc29ydDsKKwludW1faW5kaXJlY3QgPSBudW1fdGVybWluZm9fc29ydDsKKwlzdHJfaW5kaXJlY3QgPSBzdHJfdGVybWluZm9fc29ydDsKKwlicmVhazsKKworICAgIGNhc2UgU19WQVJJQUJMRToKKwlpZiAodHJhY2V2YWwpCisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICIlczogc29ydGluZyBieSBDIHZhcmlhYmxlIG9yZGVyXG4iLCBfbmNfcHJvZ25hbWUpOworCWJvb2xfaW5kaXJlY3QgPSBib29sX3ZhcmlhYmxlX3NvcnQ7CisJbnVtX2luZGlyZWN0ID0gbnVtX3ZhcmlhYmxlX3NvcnQ7CisJc3RyX2luZGlyZWN0ID0gc3RyX3ZhcmlhYmxlX3NvcnQ7CisJYnJlYWs7CisKKyAgICBjYXNlIFNfVEVSTUNBUDoKKwlpZiAodHJhY2V2YWwpCisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICIlczogc29ydGluZyBieSB0ZXJtY2FwIG5hbWUgb3JkZXJcbiIsIF9uY19wcm9nbmFtZSk7CisJYm9vbF9pbmRpcmVjdCA9IGJvb2xfdGVybWNhcF9zb3J0OworCW51bV9pbmRpcmVjdCA9IG51bV90ZXJtY2FwX3NvcnQ7CisJc3RyX2luZGlyZWN0ID0gc3RyX3Rlcm1jYXBfc29ydDsKKwlicmVhazsKKyAgICB9CisKKyAgICBpZiAodHJhY2V2YWwpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkgICAgICAgIiVzOiB3aWR0aCA9ICVkLCB0dmVyc2lvbiA9ICVkLCBvdXRmb3JtID0gJWRcbiIsCisJCSAgICAgICBfbmNfcHJvZ25hbWUsIHdpZHRoLCB0dmVyc2lvbiwgb3V0Zm9ybSk7Cit9CisKK3N0YXRpYyBURVJNVFlQRSAqY3VyX3R5cGU7CisKK3N0YXRpYyBpbnQKK2R1bXBfcHJlZGljYXRlKFByZWRUeXBlIHR5cGUsIFByZWRJZHggaWR4KQorLyogcHJlZGljYXRlIGZ1bmN0aW9uIHRvIHVzZSBmb3Igb3JkaW5hcnkgZGVjb21waWxhdGlvbiAqLworeworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQk9PTEVBTjoKKwlyZXR1cm4gKGN1cl90eXBlLT5Cb29sZWFuc1tpZHhdID09IEZBTFNFKQorCSAgICA/IEZBSUwgOiBjdXJfdHlwZS0+Qm9vbGVhbnNbaWR4XTsKKworICAgIGNhc2UgTlVNQkVSOgorCXJldHVybiAoY3VyX3R5cGUtPk51bWJlcnNbaWR4XSA9PSBBQlNFTlRfTlVNRVJJQykKKwkgICAgPyBGQUlMIDogY3VyX3R5cGUtPk51bWJlcnNbaWR4XTsKKworICAgIGNhc2UgU1RSSU5HOgorCXJldHVybiAoY3VyX3R5cGUtPlN0cmluZ3NbaWR4XSAhPSBBQlNFTlRfU1RSSU5HKQorCSAgICA/IChpbnQpIFRSVUUgOiBGQUlMOworICAgIH0KKworICAgIHJldHVybiAoRkFMU0UpOwkJLyogcGFjaWZ5IGNvbXBpbGVyICovCit9CisKK3N0YXRpYyB2b2lkIHNldF9vYnNvbGV0ZV90ZXJtY2FwcyhURVJNVFlQRSAqdHApOworCisvKiBpcyB0aGlzIHRoZSBpbmRleCBvZiBhIGZ1bmN0aW9uIGtleSBzdHJpbmc/ICovCisjZGVmaW5lIEZOS0VZKGkpCSgoKGkpPD0gNjUgJiYgKGkpPj0gNzUpIHx8ICgoaSk8PSAyMTYgJiYgKGkpPj0gMjY4KSkKKworLyoKKyAqIElmIHdlIGNvbmZpZ3VyZSB3aXRoIGEgZGlmZmVyZW50IENhcHMgZmlsZSwgdGhlIG9mZnNldHMgaW50byB0aGUgYXJyYXlzCisgKiB3aWxsIGNoYW5nZS4gIFNvIHdlIHVzZSBhbiBhZGRyZXNzIGV4cHJlc3Npb24uCisgKi8KKyNkZWZpbmUgQk9PTF9JRFgobmFtZSkgKFByZWRUeXBlKSAoJihuYW1lKSAtICYoQ1VSIEJvb2xlYW5zWzBdKSkKKyNkZWZpbmUgTlVNX0lEWChuYW1lKSAgKFByZWRUeXBlKSAoJihuYW1lKSAtICYoQ1VSIE51bWJlcnNbMF0pKQorI2RlZmluZSBTVFJfSURYKG5hbWUpICAoUHJlZFR5cGUpICgmKG5hbWUpIC0gJihDVVIgU3RyaW5nc1swXSkpCisKK3N0YXRpYyBib29sCit2ZXJzaW9uX2ZpbHRlcihQcmVkVHlwZSB0eXBlLCBQcmVkSWR4IGlkeCkKKy8qIGZpbHRlciBvdXQgY2FwYWJpbGl0aWVzIHdlIG1heSB3YW50IHRvIHN1cHByZXNzICovCit7CisgICAgc3dpdGNoICh0dmVyc2lvbikgeworICAgIGNhc2UgVl9BTExDQVBTOgkJLyogU1ZyNCwgWFNJIEN1cnNlcyAqLworCXJldHVybiAoVFJVRSk7CisKKyAgICBjYXNlIFZfU1ZSMToJCS8qIFN5c3RlbSBWIFJlbGVhc2UgMSwgVWx0cml4ICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICByZXR1cm4gKChpZHggPD0gQk9PTF9JRFgoeG9uX3hvZmYpKSA/IFRSVUUgOiBGQUxTRSk7CisJY2FzZSBOVU1CRVI6CisJICAgIHJldHVybiAoKGlkeCA8PSBOVU1fSURYKHdpZHRoX3N0YXR1c19saW5lKSkgPyBUUlVFIDogRkFMU0UpOworCWNhc2UgU1RSSU5HOgorCSAgICByZXR1cm4gKChpZHggPD0gU1RSX0lEWChwcnRyX25vbikpID8gVFJVRSA6IEZBTFNFKTsKKwl9CisJYnJlYWs7CisKKyAgICBjYXNlIFZfSFBVWDoJCS8qIEhld2xldHQtUGFja2FyZCAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQk9PTEVBTjoKKwkgICAgcmV0dXJuICgoaWR4IDw9IEJPT0xfSURYKHhvbl94b2ZmKSkgPyBUUlVFIDogRkFMU0UpOworCWNhc2UgTlVNQkVSOgorCSAgICByZXR1cm4gKChpZHggPD0gTlVNX0lEWChsYWJlbF93aWR0aCkpID8gVFJVRSA6IEZBTFNFKTsKKwljYXNlIFNUUklORzoKKwkgICAgaWYgKGlkeCA8PSBTVFJfSURYKHBydHJfbm9uKSkKKwkJcmV0dXJuIChUUlVFKTsKKwkgICAgZWxzZSBpZiAoRk5LRVkoaWR4KSkJLyogZnVuY3Rpb24ga2V5cyAqLworCQlyZXR1cm4gKFRSVUUpOworCSAgICBlbHNlIGlmIChpZHggPT0gU1RSX0lEWChwbGFiX25vcm0pCisJCSAgICAgfHwgaWR4ID09IFNUUl9JRFgobGFiZWxfb24pCisJCSAgICAgfHwgaWR4ID09IFNUUl9JRFgobGFiZWxfb2ZmKSkKKwkJcmV0dXJuIChUUlVFKTsKKwkgICAgZWxzZQorCQlyZXR1cm4gKEZBTFNFKTsKKwl9CisJYnJlYWs7CisKKyAgICBjYXNlIFZfQUlYOgkJLyogQUlYICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCT09MRUFOOgorCSAgICByZXR1cm4gKChpZHggPD0gQk9PTF9JRFgoeG9uX3hvZmYpKSA/IFRSVUUgOiBGQUxTRSk7CisJY2FzZSBOVU1CRVI6CisJICAgIHJldHVybiAoKGlkeCA8PSBOVU1fSURYKHdpZHRoX3N0YXR1c19saW5lKSkgPyBUUlVFIDogRkFMU0UpOworCWNhc2UgU1RSSU5HOgorCSAgICBpZiAoaWR4IDw9IFNUUl9JRFgocHJ0cl9ub24pKQorCQlyZXR1cm4gKFRSVUUpOworCSAgICBlbHNlIGlmIChGTktFWShpZHgpKQkvKiBmdW5jdGlvbiBrZXlzICovCisJCXJldHVybiAoVFJVRSk7CisJICAgIGVsc2UKKwkJcmV0dXJuIChGQUxTRSk7CisJfQorCWJyZWFrOworCisjZGVmaW5lIGlzX3Rlcm1jYXAodHlwZSkgKE9rSW5kZXgoaWR4LCB0eXBlIyNfZnJvbV90ZXJtY2FwKSAmJiBcCisJCQkgIHR5cGUjI19mcm9tX3Rlcm1jYXBbaWR4XSkKKworICAgIGNhc2UgVl9CU0Q6CQkvKiBCU0QgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEJPT0xFQU46CisJICAgIHJldHVybiBpc190ZXJtY2FwKGJvb2wpOworCWNhc2UgTlVNQkVSOgorCSAgICByZXR1cm4gaXNfdGVybWNhcChudW0pOworCWNhc2UgU1RSSU5HOgorCSAgICByZXR1cm4gaXNfdGVybWNhcChzdHIpOworCX0KKwlicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gKEZBTFNFKTsJCS8qIHBhY2lmeSB0aGUgY29tcGlsZXIgKi8KK30KKworc3RhdGljIHZvaWQKK3RyaW1fdHJhaWxpbmcodm9pZCkKK3sKKyAgICB3aGlsZSAob3V0YnVmLnVzZWQgPiAwICYmIG91dGJ1Zi50ZXh0W291dGJ1Zi51c2VkIC0gMV0gPT0gJyAnKQorCW91dGJ1Zi50ZXh0Wy0tb3V0YnVmLnVzZWRdID0gJ1wwJzsKK30KKworc3RhdGljIHZvaWQKK2ZvcmNlX3dyYXAodm9pZCkKK3sKKyAgICBvbGRjb2wgPSBjb2x1bW47CisgICAgdHJpbV90cmFpbGluZygpOworICAgIHN0cmNweV9EWU4oJm91dGJ1ZiwgdHJhaWxlcik7CisgICAgY29sdW1uID0gSU5ERU5UOworfQorCitzdGF0aWMgdm9pZAord3JhcF9jb25jYXQoY29uc3QgY2hhciAqc3JjKQoreworICAgIHVuc2lnbmVkIG5lZWQgPSBzdHJsZW4oc3JjKTsKKyAgICB1bnNpZ25lZCB3YW50ID0gc3RybGVuKHNlcGFyYXRvcikgKyBuZWVkOworCisgICAgaWYgKGNvbHVtbiA+IElOREVOVAorCSYmIGNvbHVtbiArIChpbnQpIHdhbnQgPiB3aWR0aCkgeworCWZvcmNlX3dyYXAoKTsKKyAgICB9CisgICAgc3RyY3B5X0RZTigmb3V0YnVmLCBzcmMpOworICAgIHN0cmNweV9EWU4oJm91dGJ1Ziwgc2VwYXJhdG9yKTsKKyAgICBjb2x1bW4gKz0gKGludCkgbmVlZDsKK30KKworI2RlZmluZSBJR05PUkVfU0VQX1RSQUlMKGZpcnN0LGxhc3Qsc2VwX3RyYWlsKSBcCisJaWYgKChzaXplX3QpKGxhc3QgLSBmaXJzdCkgPiBzaXplb2Yoc2VwX3RyYWlsKS0xIFwKKwkgJiYgIXN0cm5jbXAoZmlyc3QsIHNlcF90cmFpbCwgc2l6ZW9mKHNlcF90cmFpbCktMSkpIFwKKwkJZmlyc3QgKz0gc2l6ZW9mKHNlcF90cmFpbCktMgorCisvKiBSZXR1cm5zIHRoZSBub21pbmFsIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGFzc3VtaW5nIGl0IGlzIHRlcm1jYXAgZm9ybWF0LAorICogaS5lLiwgdGhlIGNvbnRpbnVhdGlvbiBzZXF1ZW5jZSBpcyB0cmVhdGVkIGFzIGEgc2luZ2xlIGNoYXJhY3RlciAiOiIuCisgKgorICogVGhlcmUgYXJlIHNldmVyYWwgaW1wbGVtZW50YXRpb25zIG9mIHRlcm1jYXAgd2hpY2ggcmVhZCB0aGUgdGV4dCBpbnRvIGEKKyAqIGZpeGVkLXNpemUgYnVmZmVyLiAgR2VuZXJhbGx5IHRoZXkgc3RyaXAgdGhlIG5ld2xpbmVzIGZyb20gdGhlIHRleHQsIGJ1dCBtYXkKKyAqIG5vdCBkbyBpdCB1bnRpbCBhZnRlciB0aGUgYnVmZmVyIGlzIHJlYWQuICBBbHNvLCAidGM9IiByZXNvbHV0aW9uIG1heSBiZQorICogZXhwYW5kZWQgaW4gdGhlIHNhbWUgYnVmZmVyLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIG1lYXN1cmluZyB0aGUgc2l6ZQorICogb2YgdGhlIGJlc3QgZml4ZWQtYnVmZmVyIGltcGxlbWVudGF0aW9uOyB0aGUgd29yc3QgY2FzZSBtYXkgYmUgbXVjaCB3b3JzZS4KKyAqLworI2lmZGVmIFRFU1RfVEVSTUNBUF9MRU5HVEgKK3N0YXRpYyBpbnQKK3Rlcm1jYXBfbGVuZ3RoKGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBwYXR0ZXJuW10gPSAiOlxcXG5cdDoiOworCisgICAgaW50IGxlbiA9IDA7CisgICAgY29uc3QgY2hhciAqY29uc3QgdCA9IHNyYyArIHN0cmxlbihzcmMpOworCisgICAgd2hpbGUgKCpzcmMgIT0gJ1wwJykgeworCUlHTk9SRV9TRVBfVFJBSUwoc3JjLCB0LCBwYXR0ZXJuKTsKKwlzcmMrKzsKKwlsZW4rKzsKKyAgICB9CisgICAgcmV0dXJuIGxlbjsKK30KKyNlbHNlCisjZGVmaW5lIHRlcm1jYXBfbGVuZ3RoKHNyYykgc3RybGVuKHNyYykKKyNlbmRpZgorCitzdGF0aWMgdm9pZAoraW5kZW50X0RZTihEWU5CVUYgKiBidWZmZXIsIGludCBsZXZlbCkKK3sKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IG4gPCBsZXZlbDsgbisrKQorCXN0cm5jcHlfRFlOKGJ1ZmZlciwgIlx0IiwgMSk7Cit9CisKK3N0YXRpYyBib29sCitoYXNfcGFyYW1zKGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworICAgIGludCBsZW4gPSAoaW50KSBzdHJsZW4oc3JjKTsKKyAgICBpbnQgbjsKKyAgICBib29sIGlmdGhlbiA9IEZBTFNFOworICAgIGJvb2wgcGFyYW1zID0gRkFMU0U7CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgbGVuIC0gMTsgKytuKSB7CisJaWYgKCFzdHJuY21wKHNyYyArIG4sICIlcCIsIDIpKSB7CisJICAgIHBhcmFtcyA9IFRSVUU7CisJfSBlbHNlIGlmICghc3RybmNtcChzcmMgKyBuLCAiJTsiLCAyKSkgeworCSAgICBpZnRoZW4gPSBUUlVFOworCSAgICByZXN1bHQgPSBwYXJhbXM7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgaWYgKCFpZnRoZW4pIHsKKwlyZXN1bHQgPSAoKGxlbiA+IDUwKSAmJiBwYXJhbXMpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqCitmbXRfY29tcGxleChjaGFyICpzcmMsIGludCBsZXZlbCkKK3sKKyAgICBib29sIHBlcmNlbnQgPSBGQUxTRTsKKyAgICBib29sIHBhcmFtcyA9IGhhc19wYXJhbXMoc3JjKTsKKworICAgIHdoaWxlICgqc3JjICE9ICdcMCcpIHsKKwlzd2l0Y2ggKCpzcmMpIHsKKwljYXNlICdcXCc6CisJICAgIHBlcmNlbnQgPSBGQUxTRTsKKwkgICAgc3RybmNweV9EWU4oJnRtcGJ1Ziwgc3JjKyssIDEpOworCSAgICBicmVhazsKKwljYXNlICclJzoKKwkgICAgcGVyY2VudCA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJz8nOgkJLyogImlmIiAqLworCWNhc2UgJ3QnOgkJLyogInRoZW4iICovCisJY2FzZSAnZSc6CQkvKiAiZWxzZSIgKi8KKwkgICAgaWYgKHBlcmNlbnQpIHsKKwkJcGVyY2VudCA9IEZBTFNFOworCQl0bXBidWYudGV4dFt0bXBidWYudXNlZCAtIDFdID0gJ1xuJzsKKwkJLyogdHJlYXQgYSAiJWUiIGFzIGVsc2UtaWYsIG9uIHRoZSBzYW1lIGxldmVsICovCisJCWlmICgqc3JjID09ICdlJykgeworCQkgICAgaW5kZW50X0RZTigmdG1wYnVmLCBsZXZlbCk7CisJCSAgICBzdHJuY3B5X0RZTigmdG1wYnVmLCAiJSIsIDEpOworCQkgICAgc3RybmNweV9EWU4oJnRtcGJ1Ziwgc3JjLCAxKTsKKwkJICAgIHNyYysrOworCQkgICAgcGFyYW1zID0gaGFzX3BhcmFtcyhzcmMpOworCQkgICAgaWYgKCFwYXJhbXMgJiYgKnNyYyAhPSAnXDAnICYmICpzcmMgIT0gJyUnKSB7CisJCQlzdHJuY3B5X0RZTigmdG1wYnVmLCAiXG4iLCAxKTsKKwkJCWluZGVudF9EWU4oJnRtcGJ1ZiwgbGV2ZWwgKyAxKTsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGluZGVudF9EWU4oJnRtcGJ1ZiwgbGV2ZWwgKyAxKTsKKwkJICAgIHN0cm5jcHlfRFlOKCZ0bXBidWYsICIlIiwgMSk7CisJCSAgICBzdHJuY3B5X0RZTigmdG1wYnVmLCBzcmMsIDEpOworCQkgICAgaWYgKCpzcmMrKyA9PSAnPycpIHsKKwkJCXNyYyA9IGZtdF9jb21wbGV4KHNyYywgbGV2ZWwgKyAxKTsKKwkJCWlmICgqc3JjICE9ICdcMCcgJiYgKnNyYyAhPSAnJScpIHsKKwkJCSAgICBzdHJuY3B5X0RZTigmdG1wYnVmLCAiXG4iLCAxKTsKKwkJCSAgICBpbmRlbnRfRFlOKCZ0bXBidWYsIGxldmVsICsgMSk7CisJCQl9CisJCSAgICB9IGVsc2UgaWYgKGxldmVsID09IDEpIHsKKwkJCV9uY193YXJuaW5nKCIlJSVjIHdpdGhvdXQgJSU/IiwgKnNyYyk7CisJCSAgICB9CisJCX0KKwkJY29udGludWU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAnOyc6CQkvKiAiZW5kaWYiICovCisJICAgIGlmIChwZXJjZW50KSB7CisJCXBlcmNlbnQgPSBGQUxTRTsKKwkJaWYgKGxldmVsID4gMSkgeworCQkgICAgdG1wYnVmLnRleHRbdG1wYnVmLnVzZWQgLSAxXSA9ICdcbic7CisJCSAgICBpbmRlbnRfRFlOKCZ0bXBidWYsIGxldmVsKTsKKwkJICAgIHN0cm5jcHlfRFlOKCZ0bXBidWYsICIlIiwgMSk7CisJCSAgICBzdHJuY3B5X0RZTigmdG1wYnVmLCBzcmMrKywgMSk7CisJCSAgICByZXR1cm4gc3JjOworCQl9CisJCV9uY193YXJuaW5nKCIlJTsgd2l0aG91dCAlJT8iKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICdwJzoKKwkgICAgaWYgKHBlcmNlbnQgJiYgcGFyYW1zKSB7CisJCXRtcGJ1Zi50ZXh0W3RtcGJ1Zi51c2VkIC0gMV0gPSAnXG4nOworCQlpbmRlbnRfRFlOKCZ0bXBidWYsIGxldmVsICsgMSk7CisJCXN0cm5jcHlfRFlOKCZ0bXBidWYsICIlIiwgMSk7CisJICAgIH0KKwkgICAgcGFyYW1zID0gRkFMU0U7CisJICAgIHBlcmNlbnQgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnICc6CisJICAgIHN0cm5jcHlfRFlOKCZ0bXBidWYsICJcXHMiLCAyKTsKKwkgICAgKytzcmM7CisJICAgIGNvbnRpbnVlOworCWRlZmF1bHQ6CisJICAgIHBlcmNlbnQgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJfQorCXN0cm5jcHlfRFlOKCZ0bXBidWYsIHNyYysrLCAxKTsKKyAgICB9CisgICAgcmV0dXJuIHNyYzsKK30KKworI2RlZmluZSBTQU1FX0NBUChuLGNhcCkgKCZ0dGVybS0+U3RyaW5nc1tuXSA9PSAmY2FwKQorI2RlZmluZSBFWFRSQV9DQVAgMjAKKworaW50CitmbXRfZW50cnkoVEVSTVRZUEUgKnR0ZXJtLAorCSAgUHJlZEZ1bmMgcHJlZCwKKwkgIGJvb2wgY29udGVudF9vbmx5LAorCSAgYm9vbCBzdXBwcmVzc191bnRyYW5zbGF0YWJsZSwKKwkgIGJvb2wgaW5mb2R1bXAsCisJICBpbnQgbnVtYmVycykKK3sKKyAgICBQcmVkSWR4IGksIGo7CisgICAgY2hhciBidWZmZXJbTUFYX1RFUk1JTkZPX0xFTkdUSCArIEVYVFJBX0NBUF07CisgICAgY2hhciAqY2FwYWJpbGl0eTsKKyAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKm5hbWU7CisgICAgaW50IHByZWR2YWwsIGxlbjsKKyAgICBQcmVkSWR4IG51bV9ib29scyA9IDA7CisgICAgUHJlZElkeCBudW1fdmFsdWVzID0gMDsKKyAgICBQcmVkSWR4IG51bV9zdHJpbmdzID0gMDsKKyAgICBib29sIG91dGNvdW50ID0gMDsKKworI2RlZmluZSBXUkFQX0NPTkNBVAlcCisJd3JhcF9jb25jYXQoYnVmZmVyKTsgXAorCW91dGNvdW50ID0gVFJVRQorCisgICAgbGVuID0gMTI7CQkJLyogdGVybWluZm8gZmlsZS1oZWFkZXIgKi8KKworICAgIGlmIChwcmVkID09IDApIHsKKwljdXJfdHlwZSA9IHR0ZXJtOworCXByZWQgPSBkdW1wX3ByZWRpY2F0ZTsKKyAgICB9CisKKyAgICBzdHJjcHlfRFlOKCZvdXRidWYsIDApOworICAgIGlmIChjb250ZW50X29ubHkpIHsKKwljb2x1bW4gPSBJTkRFTlQ7CS8qIEZJWE1FOiB3b3JrYXJvdW5kIHRvIHByZXZlbnQgZW1wdHkgbGluZXMgKi8KKyAgICB9IGVsc2UgeworCXN0cmNweV9EWU4oJm91dGJ1ZiwgdHRlcm0tPnRlcm1fbmFtZXMpOworCXN0cmNweV9EWU4oJm91dGJ1Ziwgc2VwYXJhdG9yKTsKKwljb2x1bW4gPSAoaW50KSBvdXRidWYudXNlZDsKKwlmb3JjZV93cmFwKCk7CisgICAgfQorCisgICAgZm9yX2VhY2hfYm9vbGVhbihqLCB0dGVybSkgeworCWkgPSBCb29sSW5kaXJlY3Qoaik7CisJbmFtZSA9IEV4dEJvb2xuYW1lKHR0ZXJtLCBpLCBib29sX25hbWVzKTsKKwlhc3NlcnQoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKGJ1ZmZlcikgLSBFWFRSQV9DQVApOworCisJaWYgKCF2ZXJzaW9uX2ZpbHRlcihCT09MRUFOLCBpKSkKKwkgICAgY29udGludWU7CisJZWxzZSBpZiAoaXNPYnNvbGV0ZShvdXRmb3JtLCBuYW1lKSkKKwkgICAgY29udGludWU7CisKKwlwcmVkdmFsID0gcHJlZChCT09MRUFOLCBpKTsKKwlpZiAocHJlZHZhbCAhPSBGQUlMKSB7CisJICAgICh2b2lkKSBzdHJjcHkoYnVmZmVyLCBuYW1lKTsKKwkgICAgaWYgKHByZWR2YWwgPD0gMCkKKwkJKHZvaWQpIHN0cmNhdChidWZmZXIsICJAIik7CisJICAgIGVsc2UgaWYgKGkgKyAxID4gbnVtX2Jvb2xzKQorCQludW1fYm9vbHMgPSBpICsgMTsKKwkgICAgV1JBUF9DT05DQVQ7CisJfQorICAgIH0KKworICAgIGlmIChjb2x1bW4gIT0gSU5ERU5UKQorCWZvcmNlX3dyYXAoKTsKKworICAgIGZvcl9lYWNoX251bWJlcihqLCB0dGVybSkgeworCWkgPSBOdW1JbmRpcmVjdChqKTsKKwluYW1lID0gRXh0TnVtbmFtZSh0dGVybSwgaSwgbnVtX25hbWVzKTsKKwlhc3NlcnQoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKGJ1ZmZlcikgLSBFWFRSQV9DQVApOworCisJaWYgKCF2ZXJzaW9uX2ZpbHRlcihOVU1CRVIsIGkpKQorCSAgICBjb250aW51ZTsKKwllbHNlIGlmIChpc09ic29sZXRlKG91dGZvcm0sIG5hbWUpKQorCSAgICBjb250aW51ZTsKKworCXByZWR2YWwgPSBwcmVkKE5VTUJFUiwgaSk7CisJaWYgKHByZWR2YWwgIT0gRkFJTCkgeworCSAgICBpZiAodHRlcm0tPk51bWJlcnNbaV0gPCAwKSB7CisJCXNwcmludGYoYnVmZmVyLCAiJXNAIiwgbmFtZSk7CisJICAgIH0gZWxzZSB7CisJCXNwcmludGYoYnVmZmVyLCAiJXMjJWQiLCBuYW1lLCB0dGVybS0+TnVtYmVyc1tpXSk7CisJCWlmIChpICsgMSA+IG51bV92YWx1ZXMpCisJCSAgICBudW1fdmFsdWVzID0gaSArIDE7CisJICAgIH0KKwkgICAgV1JBUF9DT05DQVQ7CisJfQorICAgIH0KKworICAgIGlmIChjb2x1bW4gIT0gSU5ERU5UKQorCWZvcmNlX3dyYXAoKTsKKworICAgIGxlbiArPSAoaW50KSAobnVtX2Jvb2xzCisJCSAgKyBudW1fdmFsdWVzICogMgorCQkgICsgc3RybGVuKHR0ZXJtLT50ZXJtX25hbWVzKSArIDEpOworICAgIGlmIChsZW4gJiAxKQorCWxlbisrOworCisjdW5kZWYgQ1VSCisjZGVmaW5lIENVUiB0dGVybS0+CisgICAgaWYgKG91dGZvcm0gPT0gRl9URVJNQ0FQKSB7CisJaWYgKHRlcm1jYXBfcmVzZXQgIT0gQUJTRU5UX1NUUklORykgeworCSAgICBpZiAoaW5pdF8zc3RyaW5nICE9IEFCU0VOVF9TVFJJTkcKKwkJJiYgIXN0cmNtcChpbml0XzNzdHJpbmcsIHRlcm1jYXBfcmVzZXQpKQorCQlESVNDQVJEKGluaXRfM3N0cmluZyk7CisKKwkgICAgaWYgKHJlc2V0XzJzdHJpbmcgIT0gQUJTRU5UX1NUUklORworCQkmJiAhc3RyY21wKHJlc2V0XzJzdHJpbmcsIHRlcm1jYXBfcmVzZXQpKQorCQlESVNDQVJEKHJlc2V0XzJzdHJpbmcpOworCX0KKyAgICB9CisKKyAgICBmb3JfZWFjaF9zdHJpbmcoaiwgdHRlcm0pIHsKKwlpID0gU3RySW5kaXJlY3Qoaik7CisJbmFtZSA9IEV4dFN0cm5hbWUodHRlcm0sIGksIHN0cl9uYW1lcyk7CisJYXNzZXJ0KHN0cmxlbihuYW1lKSA8IHNpemVvZihidWZmZXIpIC0gRVhUUkFfQ0FQKTsKKworCWNhcGFiaWxpdHkgPSB0dGVybS0+U3RyaW5nc1tpXTsKKworCWlmICghdmVyc2lvbl9maWx0ZXIoU1RSSU5HLCBpKSkKKwkgICAgY29udGludWU7CisJZWxzZSBpZiAoaXNPYnNvbGV0ZShvdXRmb3JtLCBuYW1lKSkKKwkgICAgY29udGludWU7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworCS8qCisJICogRXh0ZW5kZWQgbmFtZXMgY2FuIGJlIGxvbmdlciB0aGFuIDIgY2hhcmFjdGVycywgYnV0IHRlcm1jYXAgcHJvZ3JhbXMKKwkgKiBjYW5ub3QgcmVhZCB0aG9zZSAoZmlsdGVyIHRoZW0gb3V0KS4KKwkgKi8KKwlpZiAob3V0Zm9ybSA9PSBGX1RFUk1DQVAgJiYgKHN0cmxlbihuYW1lKSA+IDIpKQorCSAgICBjb250aW51ZTsKKyNlbmRpZgorCisJaWYgKG91dGZvcm0gPT0gRl9URVJNQ0FQKSB7CisJICAgIC8qCisJICAgICAqIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2Ygdmkgd2FudCBybWlyL3NtaXIgdG8gYmUgZGVmaW5lZAorCSAgICAgKiBmb3IgaWNoL2ljaDEgdG8gd29yay4gIElmIHRoZXkncmUgbm90IGRlZmluZWQsIGZvcmNlCisJICAgICAqIHRoZW0gdG8gYmUgb3V0cHV0IGFzIGRlZmluZWQgYW5kIGVtcHR5LgorCSAgICAgKi8KKwkgICAgaWYgKFBSRVNFTlQoaW5zZXJ0X2NoYXJhY3RlcikgfHwgUFJFU0VOVChwYXJtX2ljaCkpIHsKKwkJaWYgKFNBTUVfQ0FQKGksIGVudGVyX2luc2VydF9tb2RlKQorCQkgICAgJiYgZW50ZXJfaW5zZXJ0X21vZGUgPT0gQUJTRU5UX1NUUklORykgeworCQkgICAgKHZvaWQpIHN0cmNweShidWZmZXIsICJpbT0iKTsKKwkJICAgIFdSQVBfQ09OQ0FUOworCQkgICAgY29udGludWU7CisJCX0KKworCQlpZiAoU0FNRV9DQVAoaSwgZXhpdF9pbnNlcnRfbW9kZSkKKwkJICAgICYmIGV4aXRfaW5zZXJ0X21vZGUgPT0gQUJTRU5UX1NUUklORykgeworCQkgICAgKHZvaWQpIHN0cmNweShidWZmZXIsICJlaT0iKTsKKwkJICAgIFdSQVBfQ09OQ0FUOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCSAgICAvKgorCSAgICAgKiB0ZXJtY2FwIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHNjcmVlbiB3aWxsIGJlIGNvbmZ1c2VkIGlmIHNncjAKKwkgICAgICogaXMgdHJhbnNsYXRlZCB0byBhIHN0cmluZyBjb250YWluaW5nIHJtYWNzLiAgRmlsdGVyIHRoYXQgb3V0LgorCSAgICAgKi8KKwkgICAgaWYgKFBSRVNFTlQoZXhpdF9hdHRyaWJ1dGVfbW9kZSkpIHsKKwkJaWYgKFNBTUVfQ0FQKGksIGV4aXRfYXR0cmlidXRlX21vZGUpKSB7CisJCSAgICBjaGFyICp0cmltbWVkX3NncjA7CisJCSAgICBjaGFyICpteV9zZ3IgPSBzZXRfYXR0cmlidXRlczsKKworCQkgICAgc2V0X2F0dHJpYnV0ZXMgPSBzYXZlX3NncjsKKworCQkgICAgdHJpbW1lZF9zZ3IwID0gX25jX3RyaW1fc2dyMCh0dGVybSk7CisJCSAgICBpZiAoc3RyY21wKGNhcGFiaWxpdHksIHRyaW1tZWRfc2dyMCkpCisJCQljYXBhYmlsaXR5ID0gdHJpbW1lZF9zZ3IwOworCisJCSAgICBzZXRfYXR0cmlidXRlcyA9IG15X3NncjsKKwkJfQorCSAgICB9CisJfQorCisJcHJlZHZhbCA9IHByZWQoU1RSSU5HLCBpKTsKKwlidWZmZXJbMF0gPSAnXDAnOworCisJaWYgKHByZWR2YWwgIT0gRkFJTCkgeworCSAgICBpZiAoY2FwYWJpbGl0eSAhPSBBQlNFTlRfU1RSSU5HCisJCSYmIGkgKyAxID4gbnVtX3N0cmluZ3MpCisJCW51bV9zdHJpbmdzID0gaSArIDE7CisKKwkgICAgaWYgKCFWQUxJRF9TVFJJTkcoY2FwYWJpbGl0eSkpIHsKKwkJc3ByaW50ZihidWZmZXIsICIlc0AiLCBuYW1lKTsKKwkJV1JBUF9DT05DQVQ7CisJICAgIH0gZWxzZSBpZiAob3V0Zm9ybSA9PSBGX1RFUk1DQVAgfHwgb3V0Zm9ybSA9PSBGX1RDT05WRVJSKSB7CisJCWludCBwYXJhbXMgPSAoKGkgPCAoaW50KSBTSVpFT0YocGFyYW1ldHJpemVkKSkKKwkJCSAgICAgID8gcGFyYW1ldHJpemVkW2ldCisJCQkgICAgICA6IDApOworCQljaGFyICpzcmNjYXAgPSBfbmNfdGljX2V4cGFuZChjYXBhYmlsaXR5LCBUUlVFLCBudW1iZXJzKTsKKwkJY2hhciAqY3YgPSBfbmNfaW5mb3RvY2FwKG5hbWUsIHNyY2NhcCwgcGFyYW1zKTsKKworCQlpZiAoY3YgPT0gMCkgeworCQkgICAgaWYgKG91dGZvcm0gPT0gRl9UQ09OVkVSUikgeworCQkJc3ByaW50ZihidWZmZXIsICIlcz0hISEgJXMgV0lMTCBOT1QgQ09OVkVSVCAhISEiLAorCQkJCW5hbWUsIHNyY2NhcCk7CisJCSAgICB9IGVsc2UgaWYgKHN1cHByZXNzX3VudHJhbnNsYXRhYmxlKSB7CisJCQljb250aW51ZTsKKwkJICAgIH0gZWxzZSB7CisJCQljaGFyICpzID0gc3JjY2FwLCAqZCA9IGJ1ZmZlcjsKKwkJCXNwcmludGYoZCwgIi4uJXM9IiwgbmFtZSk7CisJCQlkICs9IHN0cmxlbihkKTsKKwkJCXdoaWxlICgoKmQgPSAqcysrKSAhPSAwKSB7CisJCQkgICAgaWYgKCpkID09ICc6JykgeworCQkJCSpkKysgPSAnXFwnOworCQkJCSpkID0gJzonOworCQkJICAgIH0gZWxzZSBpZiAoKmQgPT0gJ1xcJykgeworCQkJCSorK2QgPSAqcysrOworCQkJICAgIH0KKwkJCSAgICBkKys7CisJCQl9CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzPSVzIiwgbmFtZSwgY3YpOworCQl9CisJCWxlbiArPSAoaW50KSBzdHJsZW4oY2FwYWJpbGl0eSkgKyAxOworCQlXUkFQX0NPTkNBVDsKKwkgICAgfSBlbHNlIHsKKwkJY2hhciAqc3JjID0gX25jX3RpY19leHBhbmQoY2FwYWJpbGl0eSwKKwkJCQkJICAgb3V0Zm9ybSA9PSBGX1RFUk1JTkZPLCBudW1iZXJzKTsKKworCQlzdHJjcHlfRFlOKCZ0bXBidWYsIDApOworCQlzdHJjcHlfRFlOKCZ0bXBidWYsIG5hbWUpOworCQlzdHJjcHlfRFlOKCZ0bXBidWYsICI9Iik7CisJCWlmIChwcmV0dHkKKwkJICAgICYmIChvdXRmb3JtID09IEZfVEVSTUlORk8KKwkJCXx8IG91dGZvcm0gPT0gRl9WQVJJQUJMRSkpIHsKKwkJICAgIGZtdF9jb21wbGV4KHNyYywgMSk7CisJCX0gZWxzZSB7CisJCSAgICBzdHJjcHlfRFlOKCZ0bXBidWYsIHNyYyk7CisJCX0KKwkJbGVuICs9IChpbnQpIHN0cmxlbihjYXBhYmlsaXR5KSArIDE7CisJCXdyYXBfY29uY2F0KHRtcGJ1Zi50ZXh0KTsKKwkJb3V0Y291bnQgPSBUUlVFOworCSAgICB9CisJfQorCS8qIGUuZy4sIHRyaW1tZWRfc2dyMCAqLworCWlmIChjYXBhYmlsaXR5ICE9IHR0ZXJtLT5TdHJpbmdzW2ldKQorCSAgICBmcmVlKGNhcGFiaWxpdHkpOworICAgIH0KKyAgICBsZW4gKz0gKGludCkgKG51bV9zdHJpbmdzICogMik7CisKKyAgICAvKgorICAgICAqIFRoaXMgcGllY2Ugb2YgY29kZSBzaG91bGQgYmUgYW4gZWZmZWN0aXZlIGludmVyc2Ugb2YgdGhlIGZ1bmN0aW9ucworICAgICAqIHBvc3Rwcm9jZXNzX3Rlcm1pbmZvKCkgYW5kIHBvc3Rwcm9jZXNzX3Rlcm1pbmZvKCkgaW4gcGFyc2VfZW50cnkuYy4KKyAgICAgKiBNdWNoIG1vcmUgd29yayBzaG91bGQgYmUgZG9uZSBvbiB0aGlzIHRvIHN1cHBvcnQgZHVtcGluZyB0ZXJtY2Fwcy4KKyAgICAgKi8KKyAgICBpZiAodHZlcnNpb24gPT0gVl9IUFVYKSB7CisJaWYgKFZBTElEX1NUUklORyhtZW1vcnlfbG9jaykpIHsKKwkgICAgKHZvaWQpIHNwcmludGYoYnVmZmVyLCAibWVtbD0lcyIsIG1lbW9yeV9sb2NrKTsKKwkgICAgV1JBUF9DT05DQVQ7CisJfQorCWlmIChWQUxJRF9TVFJJTkcobWVtb3J5X3VubG9jaykpIHsKKwkgICAgKHZvaWQpIHNwcmludGYoYnVmZmVyLCAibWVtdT0lcyIsIG1lbW9yeV91bmxvY2spOworCSAgICBXUkFQX0NPTkNBVDsKKwl9CisgICAgfSBlbHNlIGlmICh0dmVyc2lvbiA9PSBWX0FJWCkgeworCWlmIChWQUxJRF9TVFJJTkcoYWNzX2NoYXJzKSkgeworCSAgICBib29sIGJveF9vayA9IFRSVUU7CisJICAgIGNvbnN0IGNoYXIgKmFjc3RyYW5zID0gImxxa3hqbXd1dnRuIjsKKwkgICAgY29uc3QgY2hhciAqY3A7CisJICAgIGNoYXIgKnRwLCAqc3AsIGJveGNoYXJzWzExXTsKKworCSAgICB0cCA9IGJveGNoYXJzOworCSAgICBmb3IgKGNwID0gYWNzdHJhbnM7ICpjcDsgY3ArKykgeworCQlzcCA9IHN0cmNocihhY3NfY2hhcnMsICpjcCk7CisJCWlmIChzcCkKKwkJICAgICp0cCsrID0gc3BbMV07CisJCWVsc2UgeworCQkgICAgYm94X29rID0gRkFMU0U7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIHRwWzBdID0gJ1wwJzsKKworCSAgICBpZiAoYm94X29rKSB7CisJCSh2b2lkKSBzdHJjcHkoYnVmZmVyLCAiYm94MT0iKTsKKwkJKHZvaWQpIHN0cmNhdChidWZmZXIsIF9uY190aWNfZXhwYW5kKGJveGNoYXJzLAorCQkJCQkJICAgICBvdXRmb3JtID09IEZfVEVSTUlORk8sIG51bWJlcnMpKTsKKwkJV1JBUF9DT05DQVQ7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBrbHVkZ2U6IHRyaW0gb2ZmIHRyYWlsZXIgdG8gYXZvaWQgYW4gZXh0cmEgYmxhbmsgbGluZQorICAgICAqIGluIGluZm9jbXAgLXUgb3V0cHV0IHdoZW4gdGhlcmUgYXJlIG5vIHN0cmluZyBkaWZmZXJlbmNlcworICAgICAqLworICAgIGlmIChvdXRjb3VudCkgeworCWJvb2wgdHJpbW1lZCA9IEZBTFNFOworCWogPSBvdXRidWYudXNlZDsKKwlpZiAoaiA+PSAyCisJICAgICYmIG91dGJ1Zi50ZXh0W2ogLSAxXSA9PSAnXHQnCisJICAgICYmIG91dGJ1Zi50ZXh0W2ogLSAyXSA9PSAnXG4nKSB7CisJICAgIG91dGJ1Zi51c2VkIC09IDI7CisJICAgIHRyaW1tZWQgPSBUUlVFOworCX0gZWxzZSBpZiAoaiA+PSA0CisJCSAgICYmIG91dGJ1Zi50ZXh0W2ogLSAxXSA9PSAnOicKKwkJICAgJiYgb3V0YnVmLnRleHRbaiAtIDJdID09ICdcdCcKKwkJICAgJiYgb3V0YnVmLnRleHRbaiAtIDNdID09ICdcbicKKwkJICAgJiYgb3V0YnVmLnRleHRbaiAtIDRdID09ICdcXCcpIHsKKwkgICAgb3V0YnVmLnVzZWQgLT0gNDsKKwkgICAgdHJpbW1lZCA9IFRSVUU7CisJfQorCWlmICh0cmltbWVkKSB7CisJICAgIG91dGJ1Zi50ZXh0W291dGJ1Zi51c2VkXSA9ICdcMCc7CisJICAgIGNvbHVtbiA9IG9sZGNvbDsKKwkgICAgc3RyY3B5X0RZTigmb3V0YnVmLCAiICIpOworCX0KKyAgICB9CisjaWYgMAorICAgIGZwcmludGYoc3RkZXJyLCAibnVtX2Jvb2xzID0gJWRcbiIsIG51bV9ib29scyk7CisgICAgZnByaW50ZihzdGRlcnIsICJudW1fdmFsdWVzID0gJWRcbiIsIG51bV92YWx1ZXMpOworICAgIGZwcmludGYoc3RkZXJyLCAibnVtX3N0cmluZ3MgPSAlZFxuIiwgbnVtX3N0cmluZ3MpOworICAgIGZwcmludGYoc3RkZXJyLCAidGVybV9uYW1lcz0lcywgbGVuPSVkLCBzdHJsZW4ob3V0YnVmKT0lZCwgb3V0YnVmPSVzXG4iLAorCSAgICB0dGVybS0+dGVybV9uYW1lcywgbGVuLCBvdXRidWYudXNlZCwgb3V0YnVmLnRleHQpOworI2VuZGlmCisgICAgLyoKKyAgICAgKiBIZXJlJ3Mgd2hlcmUgd2UgdXNlIGluZm9kdW1wIHRvIHRyaWdnZXIgYSBtb3JlIHN0cmluZ2VudCBsZW5ndGggY2hlY2sKKyAgICAgKiBmb3IgdGVybWNhcC10cmFuc2xhdGlvbiBwdXJwb3Nlcy4KKyAgICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcmF3IGVudHJ5LCB3aXRob3V0IHRjPSBleHBhbnNpb25zLAorICAgICAqIEl0IGdpdmVzIGFuIGlkZWEgb2Ygd2hpY2ggZW50cmllcyBhcmUgZGVhZGx5IHRvIGV2ZW4gKnNjYW4gcGFzdCosCisgICAgICogYXMgb3Bwb3NlZCB0byAqdXNlKi4KKyAgICAgKi8KKyAgICByZXR1cm4gKGluZm9kdW1wID8gbGVuIDogKGludCkgdGVybWNhcF9sZW5ndGgob3V0YnVmLnRleHQpKTsKK30KKworc3RhdGljIGJvb2wKK2tpbGxfc3RyaW5nKFRFUk1UWVBFICp0dGVybSwgY2hhciAqY2FwKQoreworICAgIHVuc2lnbmVkIG47CisgICAgZm9yIChuID0gMDsgbiA8IE5VTV9TVFJJTkdTKHR0ZXJtKTsgKytuKSB7CisJaWYgKGNhcCA9PSB0dGVybS0+U3RyaW5nc1tuXSkgeworCSAgICB0dGVybS0+U3RyaW5nc1tuXSA9IEFCU0VOVF9TVFJJTkc7CisJICAgIHJldHVybiBUUlVFOworCX0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgY2hhciAqCitmaW5kX3N0cmluZyhURVJNVFlQRSAqdHRlcm0sIGNoYXIgKm5hbWUpCit7CisgICAgUHJlZElkeCBuOworICAgIGZvciAobiA9IDA7IG4gPCBOVU1fU1RSSU5HUyh0dGVybSk7ICsrbikgeworCWlmICh2ZXJzaW9uX2ZpbHRlcihTVFJJTkcsIG4pCisJICAgICYmICFzdHJjbXAobmFtZSwgc3RybmFtZXNbbl0pKSB7CisJICAgIGNoYXIgKmNhcCA9IHR0ZXJtLT5TdHJpbmdzW25dOworCSAgICBpZiAoVkFMSURfU1RSSU5HKGNhcCkpIHsKKwkJcmV0dXJuIGNhcDsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiBBQlNFTlRfU1RSSU5HOworfQorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIHJlbW92ZSBmdW5jdGlvbi1rZXkgbGFiZWxzIGZyb20gYSB0ZXJtY2FwIGVudHJ5IHRvCisgKiBtYWtlIGl0IHNtYWxsZXIuCisgKi8KK3N0YXRpYyBpbnQKK2tpbGxfbGFiZWxzKFRFUk1UWVBFICp0dGVybSwgaW50IHRhcmdldCkKK3sKKyAgICBpbnQgbjsKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBjaGFyICpjYXA7CisgICAgY2hhciBuYW1lWzEwXTsKKworICAgIGZvciAobiA9IDA7IG4gPD0gMTA7ICsrbikgeworCXNwcmludGYobmFtZSwgImxmJWQiLCBuKTsKKwlpZiAoKGNhcCA9IGZpbmRfc3RyaW5nKHR0ZXJtLCBuYW1lKSkgIT0gQUJTRU5UX1NUUklORworCSAgICAmJiBraWxsX3N0cmluZyh0dGVybSwgY2FwKSkgeworCSAgICB0YXJnZXQgLT0gKGludCkgKHN0cmxlbihjYXApICsgNSk7CisJICAgICsrcmVzdWx0OworCSAgICBpZiAodGFyZ2V0IDwgMCkKKwkJYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIHJlbW92ZSBmdW5jdGlvbi1rZXkgZGVmaW5pdGlvbnMgZnJvbSBhIHRlcm1jYXAgZW50cnkgdG8KKyAqIG1ha2UgaXQgc21hbGxlci4KKyAqLworc3RhdGljIGludAora2lsbF9ma2V5cyhURVJNVFlQRSAqdHRlcm0sIGludCB0YXJnZXQpCit7CisgICAgaW50IG47CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgY2hhciAqY2FwOworICAgIGNoYXIgbmFtZVsxMF07CisKKyAgICBmb3IgKG4gPSA2MDsgbiA+PSAwOyAtLW4pIHsKKwlzcHJpbnRmKG5hbWUsICJrZiVkIiwgbik7CisJaWYgKChjYXAgPSBmaW5kX3N0cmluZyh0dGVybSwgbmFtZSkpICE9IEFCU0VOVF9TVFJJTkcKKwkgICAgJiYga2lsbF9zdHJpbmcodHRlcm0sIGNhcCkpIHsKKwkgICAgdGFyZ2V0IC09IChpbnQpIChzdHJsZW4oY2FwKSArIDUpOworCSAgICArK3Jlc3VsdDsKKwkgICAgaWYgKHRhcmdldCA8IDApCisJCWJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBnaXZlbiBhY3NjIHN0cmluZyBpcyBhIDEtMSBtYXBwaW5nLCBpLmUuLCBqdXN0LWxpa2UtdnQxMDAuCisgKiBBbHNvLCBzaW5jZSB0aGlzIGlzIGZvciB0ZXJtY2FwLCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGxpbmUtZHJhd2luZyBtYXAuCisgKi8KKyNkZWZpbmUgaXNMaW5lKGMpIChzdHJjaHIoImxta2p0dXZ3cXhuIiwgYykgIT0gMCkKKworc3RhdGljIGJvb2wKK29uZV9vbmVfbWFwcGluZyhjb25zdCBjaGFyICptYXBwaW5nKQoreworICAgIGJvb2wgcmVzdWx0ID0gVFJVRTsKKworICAgIGlmIChtYXBwaW5nICE9IEFCU0VOVF9TVFJJTkcpIHsKKwlpbnQgbiA9IDA7CisJd2hpbGUgKG1hcHBpbmdbbl0gIT0gJ1wwJykgeworCSAgICBpZiAoaXNMaW5lKG1hcHBpbmdbbl0pICYmCisJCW1hcHBpbmdbbl0gIT0gbWFwcGluZ1tuICsgMV0pIHsKKwkJcmVzdWx0ID0gRkFMU0U7CisJCWJyZWFrOworCSAgICB9CisJICAgIG4gKz0gMjsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgRk1UX0VOVFJZKCkgXAorCQlmbXRfZW50cnkodHRlcm0sIHByZWQsIFwKKwkJCTAsIFwKKwkJCXN1cHByZXNzX3VudHJhbnNsYXRhYmxlLCBcCisJCQlpbmZvZHVtcCwgbnVtYmVycykKKworI2RlZmluZSBTSE9XX1dIWSBQUklOVEYKKworc3RhdGljIGJvb2wKK3B1cmdlZF9hY3MoVEVSTVRZUEUgKnR0ZXJtKQoreworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBpZiAoVkFMSURfU1RSSU5HKGFjc19jaGFycykpIHsKKwlpZiAoIW9uZV9vbmVfbWFwcGluZyhhY3NfY2hhcnMpKSB7CisJICAgIGVudGVyX2FsdF9jaGFyc2V0X21vZGUgPSBBQlNFTlRfU1RSSU5HOworCSAgICBleGl0X2FsdF9jaGFyc2V0X21vZGUgPSBBQlNFTlRfU1RSSU5HOworCSAgICBTSE9XX1dIWSgiIyAocm1hY3Mvc21hY3MgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kpXG4iKTsKKwl9CisJcmVzdWx0ID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIER1bXAgYSBzaW5nbGUgZW50cnkuCisgKi8KK3ZvaWQKK2R1bXBfZW50cnkoVEVSTVRZUEUgKnR0ZXJtLAorCSAgIGJvb2wgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUsCisJICAgYm9vbCBsaW1pdGVkLAorCSAgIGludCBudW1iZXJzLAorCSAgIFByZWRGdW5jIHByZWQpCit7CisgICAgVEVSTVRZUEUgc2F2ZV90dGVybTsKKyAgICBpbnQgbGVuLCBjcml0bGVuOworICAgIGNvbnN0IGNoYXIgKmxlZ2VuZDsKKyAgICBib29sIGluZm9kdW1wOworCisgICAgaWYgKG91dGZvcm0gPT0gRl9URVJNQ0FQIHx8IG91dGZvcm0gPT0gRl9UQ09OVkVSUikgeworCWNyaXRsZW4gPSBNQVhfVEVSTUNBUF9MRU5HVEg7CisJbGVnZW5kID0gIm9sZGVyIHRlcm1jYXAiOworCWluZm9kdW1wID0gRkFMU0U7CisJc2V0X29ic29sZXRlX3Rlcm1jYXBzKHR0ZXJtKTsKKyAgICB9IGVsc2UgeworCWNyaXRsZW4gPSBNQVhfVEVSTUlORk9fTEVOR1RIOworCWxlZ2VuZCA9ICJ0ZXJtaW5mbyI7CisJaW5mb2R1bXAgPSBUUlVFOworICAgIH0KKworICAgIHNhdmVfc2dyID0gc2V0X2F0dHJpYnV0ZXM7CisKKyAgICBpZiAoKChsZW4gPSBGTVRfRU5UUlkoKSkgPiBjcml0bGVuKQorCSYmIGxpbWl0ZWQpIHsKKworCXNhdmVfdHRlcm0gPSAqdHRlcm07CisJaWYgKCFzdXBwcmVzc191bnRyYW5zbGF0YWJsZSkgeworCSAgICBTSE9XX1dIWSgiIyAodW50cmFuc2xhdGFibGUgY2FwYWJpbGl0aWVzIHJlbW92ZWQgdG8gZml0IGVudHJ5IHdpdGhpbiAlZCBieXRlcylcbiIsCisJCSAgICAgY3JpdGxlbik7CisJICAgIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlID0gVFJVRTsKKwl9CisJaWYgKChsZW4gPSBGTVRfRU5UUlkoKSkgPiBjcml0bGVuKSB7CisJICAgIC8qCisJICAgICAqIFdlIHBpY2sgb24gc2dyIGJlY2F1c2UgaXQncyBhIG5pY2UgbG9uZyBzdHJpbmcgY2FwYWJpbGl0eSB0aGF0CisJICAgICAqIGlzIHJlYWxseSBqdXN0IGFuIG9wdGltaXphdGlvbiBoYWNrLiAgQW5vdGhlciBnb29kIGNhbmRpZGF0ZSBpcworCSAgICAgKiBhY3NjIHNpbmNlIGl0IGlzIGJvdGggbG9uZyBhbmQgdW51c2VkIGJ5IEJTRCB0ZXJtY2FwLgorCSAgICAgKi8KKwkgICAgYm9vbCBjaGFuZ2VkID0gRkFMU0U7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworCSAgICAvKgorCSAgICAgKiBFeHRlbmRlZCBuYW1lcyBhcmUgbW9zdCBsaWtlbHkgZnVuY3Rpb24ta2V5IGRlZmluaXRpb25zLiAgRHJvcAorCSAgICAgKiB0aG9zZSBmaXJzdC4KKwkgICAgICovCisJICAgIHVuc2lnbmVkIG47CisJICAgIGZvciAobiA9IFNUUkNPVU5UOyBuIDwgTlVNX1NUUklOR1ModHRlcm0pOyBuKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IEV4dFN0cm5hbWUodHRlcm0sIG4sIHN0cm5hbWVzKTsKKworCQlpZiAoVkFMSURfU1RSSU5HKHR0ZXJtLT5TdHJpbmdzW25dKSkgeworCQkgICAgc2V0X2F0dHJpYnV0ZXMgPSBBQlNFTlRfU1RSSU5HOworCQkgICAgLyogd2UgcmVtb3ZlIGxvbmcgbmFtZXMgYW55d2F5IC0gb25seSByZXBvcnQgdGhlIHNob3J0ICovCisJCSAgICBpZiAoc3RybGVuKG5hbWUpIDw9IDIpIHsKKwkJCVNIT1dfV0hZKCIjICglcyByZW1vdmVkIHRvIGZpdCBlbnRyeSB3aXRoaW4gJWQgYnl0ZXMpXG4iLAorCQkJCSBuYW1lLAorCQkJCSBjcml0bGVuKTsKKwkJICAgIH0KKwkJICAgIGNoYW5nZWQgPSBUUlVFOworCQkgICAgaWYgKChsZW4gPSBGTVRfRU5UUlkoKSkgPD0gY3JpdGxlbikKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKyNlbmRpZgorCSAgICBpZiAoVkFMSURfU1RSSU5HKHNldF9hdHRyaWJ1dGVzKSkgeworCQlzZXRfYXR0cmlidXRlcyA9IEFCU0VOVF9TVFJJTkc7CisJCVNIT1dfV0hZKCIjIChzZ3IgcmVtb3ZlZCB0byBmaXQgZW50cnkgd2l0aGluICVkIGJ5dGVzKVxuIiwKKwkJCSBjcml0bGVuKTsKKwkJY2hhbmdlZCA9IFRSVUU7CisJICAgIH0KKwkgICAgaWYgKCFjaGFuZ2VkIHx8ICgobGVuID0gRk1UX0VOVFJZKCkpID4gY3JpdGxlbikpIHsKKwkJaWYgKHB1cmdlZF9hY3ModHRlcm0pKSB7CisJCSAgICBhY3NfY2hhcnMgPSBBQlNFTlRfU1RSSU5HOworCQkgICAgU0hPV19XSFkoIiMgKGFjc2MgcmVtb3ZlZCB0byBmaXQgZW50cnkgd2l0aGluICVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgY3JpdGxlbik7CisJCSAgICBjaGFuZ2VkID0gVFJVRTsKKwkJfQorCSAgICB9CisJICAgIGlmICghY2hhbmdlZCB8fCAoKGxlbiA9IEZNVF9FTlRSWSgpKSA+IGNyaXRsZW4pKSB7CisJCWludCBvbGR2ZXJzaW9uID0gdHZlcnNpb247CisKKwkJdHZlcnNpb24gPSBWX0JTRDsKKwkJU0hPV19XSFkoIiMgKHRlcm1pbmZvLW9ubHkgY2FwYWJpbGl0aWVzIHN1cHByZXNzZWQgdG8gZml0IGVudHJ5IHdpdGhpbiAlZCBieXRlcylcbiIsCisJCQkgY3JpdGxlbik7CisKKwkJbGVuID0gRk1UX0VOVFJZKCk7CisJCWlmIChsZW4gPiBjcml0bGVuCisJCSAgICAmJiBraWxsX2xhYmVscyh0dGVybSwgbGVuIC0gY3JpdGxlbikpIHsKKwkJICAgIFNIT1dfV0hZKCIjIChzb21lIGxhYmVscyBjYXBhYmlsaXRpZXMgc3VwcHJlc3NlZCB0byBmaXQgZW50cnkgd2l0aGluICVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgY3JpdGxlbik7CisJCSAgICBsZW4gPSBGTVRfRU5UUlkoKTsKKwkJfQorCQlpZiAobGVuID4gY3JpdGxlbgorCQkgICAgJiYga2lsbF9ma2V5cyh0dGVybSwgbGVuIC0gY3JpdGxlbikpIHsKKwkJICAgIFNIT1dfV0hZKCIjIChzb21lIGZ1bmN0aW9uLWtleSBjYXBhYmlsaXRpZXMgc3VwcHJlc3NlZCB0byBmaXQgZW50cnkgd2l0aGluICVkIGJ5dGVzKVxuIiwKKwkJCSAgICAgY3JpdGxlbik7CisJCSAgICBsZW4gPSBGTVRfRU5UUlkoKTsKKwkJfQorCQlpZiAobGVuID4gY3JpdGxlbikgeworCQkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICJ3YXJuaW5nOiAlcyBlbnRyeSBpcyAlZCBieXRlcyBsb25nXG4iLAorCQkJCSAgIF9uY19maXJzdF9uYW1lKHR0ZXJtLT50ZXJtX25hbWVzKSwKKwkJCQkgICBsZW4pOworCQkgICAgU0hPV19XSFkoIiMgV0FSTklORzogdGhpcyBlbnRyeSwgJWQgYnl0ZXMgbG9uZywgbWF5IGNvcmUtZHVtcCAlcyBsaWJyYXJpZXMhXG4iLAorCQkJICAgICBsZW4sIGxlZ2VuZCk7CisJCX0KKwkJdHZlcnNpb24gPSBvbGR2ZXJzaW9uOworCSAgICB9CisJICAgIHNldF9hdHRyaWJ1dGVzID0gc2F2ZV9zZ3I7CisJICAgICp0dGVybSA9IHNhdmVfdHRlcm07CisJfQorICAgIH0gZWxzZSBpZiAoIXZlcnNpb25fZmlsdGVyKFNUUklORywgU1RSX0lEWChhY3NfY2hhcnMpKSkgeworCXNhdmVfdHRlcm0gPSAqdHRlcm07CisJaWYgKHB1cmdlZF9hY3ModHRlcm0pKSB7CisJICAgIGxlbiA9IEZNVF9FTlRSWSgpOworCX0KKwkqdHRlcm0gPSBzYXZlX3R0ZXJtOworICAgIH0KK30KKwordm9pZAorZHVtcF91c2VzKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaW5mb2R1bXApCisvKiBkdW1wICJ1c2U9IiBjbGF1c2VzIGluIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQgKi8KK3sKKyAgICBjaGFyIGJ1ZmZlcltNQVhfVEVSTUlORk9fTEVOR1RIXTsKKworICAgIGlmIChvdXRmb3JtID09IEZfVEVSTUNBUCB8fCBvdXRmb3JtID09IEZfVENPTlZFUlIpCisJdHJpbV90cmFpbGluZygpOworICAgICh2b2lkKSBzcHJpbnRmKGJ1ZmZlciwgIiVzJXMiLCBpbmZvZHVtcCA/ICJ1c2U9IiA6ICJ0Yz0iLCBuYW1lKTsKKyAgICB3cmFwX2NvbmNhdChidWZmZXIpOworfQorCitpbnQKK3Nob3dfZW50cnkodm9pZCkKK3sKKyAgICB0cmltX3RyYWlsaW5nKCk7CisgICAgKHZvaWQpIGZwdXRzKG91dGJ1Zi50ZXh0LCBzdGRvdXQpOworICAgIHB1dGNoYXIoJ1xuJyk7CisgICAgcmV0dXJuIChpbnQpIG91dGJ1Zi51c2VkOworfQorCit2b2lkCitjb21wYXJlX2VudHJ5KHZvaWQgKCpob29rKSAoUHJlZFR5cGUgdCwgUHJlZElkeCBpLCBjb25zdCBjaGFyICpuYW1lKSwKKwkgICAgICBURVJNVFlQRSAqdHAgR0NDX1VOVVNFRCwKKwkgICAgICBib29sIHF1aWV0KQorLyogY29tcGFyZSB0d28gZW50cmllcyAqLworeworICAgIFByZWRJZHggaSwgajsKKyAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKm5hbWU7CisKKyAgICBpZiAoIXF1aWV0KQorCWZwdXRzKCIgICAgY29tcGFyaW5nIGJvb2xlYW5zLlxuIiwgc3Rkb3V0KTsKKyAgICBmb3JfZWFjaF9ib29sZWFuKGosIHRwKSB7CisJaSA9IEJvb2xJbmRpcmVjdChqKTsKKwluYW1lID0gRXh0Qm9vbG5hbWUodHAsIGksIGJvb2xfbmFtZXMpOworCisJaWYgKGlzT2Jzb2xldGUob3V0Zm9ybSwgbmFtZSkpCisJICAgIGNvbnRpbnVlOworCisJKCpob29rKSAoQ01QX0JPT0xFQU4sIGksIG5hbWUpOworICAgIH0KKworICAgIGlmICghcXVpZXQpCisJZnB1dHMoIiAgICBjb21wYXJpbmcgbnVtYmVycy5cbiIsIHN0ZG91dCk7CisgICAgZm9yX2VhY2hfbnVtYmVyKGosIHRwKSB7CisJaSA9IE51bUluZGlyZWN0KGopOworCW5hbWUgPSBFeHROdW1uYW1lKHRwLCBpLCBudW1fbmFtZXMpOworCisJaWYgKGlzT2Jzb2xldGUob3V0Zm9ybSwgbmFtZSkpCisJICAgIGNvbnRpbnVlOworCisJKCpob29rKSAoQ01QX05VTUJFUiwgaSwgbmFtZSk7CisgICAgfQorCisgICAgaWYgKCFxdWlldCkKKwlmcHV0cygiICAgIGNvbXBhcmluZyBzdHJpbmdzLlxuIiwgc3Rkb3V0KTsKKyAgICBmb3JfZWFjaF9zdHJpbmcoaiwgdHApIHsKKwlpID0gU3RySW5kaXJlY3Qoaik7CisJbmFtZSA9IEV4dFN0cm5hbWUodHAsIGksIHN0cl9uYW1lcyk7CisKKwlpZiAoaXNPYnNvbGV0ZShvdXRmb3JtLCBuYW1lKSkKKwkgICAgY29udGludWU7CisKKwkoKmhvb2spIChDTVBfU1RSSU5HLCBpLCBuYW1lKTsKKyAgICB9CisKKyAgICAvKiAodm9pZCkgZnB1dHMoIiAgICBjb21wYXJpbmcgdXNlIGVudHJpZXMuXG4iLCBzdGRvdXQpOyAqLworICAgICgqaG9vaykgKENNUF9VU0UsIDAsICJ1c2UiKTsKKworfQorCisjZGVmaW5lIE5PVFNFVChzKQkoKHMpID09IDApCisKKy8qCisgKiBUaGlzIGJpdCBvZiBsZWdlcmRlbWFpbiB0dXJucyBhbGwgdGhlIHRlcm1pbmZvIHZhcmlhYmxlIG5hbWVzIGludG8KKyAqIHJlZmVyZW5jZXMgdG8gbG9jYXRpb25zIGluIHRoZSBhcnJheXMgQm9vbGVhbnMsIE51bWJlcnMsIGFuZCBTdHJpbmdzIC0tLQorICogcHJlY2lzZWx5IHdoYXQncyBuZWVkZWQuCisgKi8KKyN1bmRlZiBDVVIKKyNkZWZpbmUgQ1VSIHRwLT4KKworc3RhdGljIHZvaWQKK3NldF9vYnNvbGV0ZV90ZXJtY2FwcyhURVJNVFlQRSAqdHApCit7CisjaW5jbHVkZSAiY2FwZGVmYXVsdHMuYyIKK30KKworLyoKKyAqIENvbnZlcnQgYW4gYWx0ZXJuYXRlLWNoYXJhY3Rlci1zZXQgc3RyaW5nIHRvIGNhbm9uaWNhbCBmb3JtOiBzb3J0ZWQgYW5kCisgKiB1bmlxdWUuCisgKi8KK3ZvaWQKK3JlcGFpcl9hY3NjKFRFUk1UWVBFICp0cCkKK3sKKyAgICBpZiAoVkFMSURfU1RSSU5HKGFjc19jaGFycykpIHsKKwlzaXplX3QgbiwgbTsKKwljaGFyIG1hcHBlZFsyNTZdOworCWNoYXIgZXh0cmEgPSAwOworCXVuc2lnbmVkIHNvdXJjZTsKKwl1bnNpZ25lZCB0YXJnZXQ7CisJYm9vbCBmaXhfbmVlZGVkID0gRkFMU0U7CisKKwlmb3IgKG4gPSAwLCBzb3VyY2UgPSAwOyBhY3NfY2hhcnNbbl0gIT0gMDsgbisrKSB7CisJICAgIHRhcmdldCA9IFVDaGFyKGFjc19jaGFyc1tuXSk7CisJICAgIGlmIChzb3VyY2UgPj0gdGFyZ2V0KSB7CisJCWZpeF9uZWVkZWQgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCSAgICBzb3VyY2UgPSB0YXJnZXQ7CisJICAgIGlmIChhY3NfY2hhcnNbbiArIDFdKQorCQluKys7CisJfQorCWlmIChmaXhfbmVlZGVkKSB7CisJICAgIG1lbXNldChtYXBwZWQsIDAsIHNpemVvZihtYXBwZWQpKTsKKwkgICAgZm9yIChuID0gMDsgYWNzX2NoYXJzW25dICE9IDA7IG4rKykgeworCQlzb3VyY2UgPSBVQ2hhcihhY3NfY2hhcnNbbl0pOworCQlpZiAoKHRhcmdldCA9ICh1bnNpZ25lZCBjaGFyKSBhY3NfY2hhcnNbbiArIDFdKSAhPSAwKSB7CisJCSAgICBtYXBwZWRbc291cmNlXSA9IChjaGFyKSB0YXJnZXQ7CisJCSAgICBuKys7CisJCX0gZWxzZSB7CisJCSAgICBleHRyYSA9IChjaGFyKSBzb3VyY2U7CisJCX0KKwkgICAgfQorCSAgICBmb3IgKG4gPSBtID0gMDsgbiA8IHNpemVvZihtYXBwZWQpOyBuKyspIHsKKwkJaWYgKG1hcHBlZFtuXSkgeworCQkgICAgYWNzX2NoYXJzW20rK10gPSAoY2hhcikgbjsKKwkJICAgIGFjc19jaGFyc1ttKytdID0gbWFwcGVkW25dOworCQl9CisJICAgIH0KKwkgICAgaWYgKGV4dHJhKQorCQlhY3NfY2hhcnNbbSsrXSA9IGV4dHJhOwkJLyogZ2FyYmFnZSBpbiwgZ2FyYmFnZSBvdXQgKi8KKwkgICAgYWNzX2NoYXJzW21dID0gMDsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcHJvZ3MvZHVtcF9lbnRyeS5oIGIvbmN1cnNlcy01LjcvcHJvZ3MvZHVtcF9lbnRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OWEzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy9wcm9ncy9kdW1wX2VudHJ5LmgKQEAgLTAsMCArMSw4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qCisgKiAkSWQ6IGR1bXBfZW50cnkuaCx2IDEuMzAgMjAwOC8wNy8xMiAyMDoyMzowMyB0b20gRXhwICQKKyAqCisgKiBEdW1wIGNvbnRyb2wgZGVmaW5pdGlvbnMgYW5kIHZhcmlhYmxlcworICovCisKKyNpZm5kZWYgRFVNUF9FTlRSWV9ICisjZGVmaW5lIERVTVBfRU5UUllfSCAxCisKKy8qIGNhcGFiaWxpdHkgb3V0cHV0IGZvcm1hdHMgKi8KKyNkZWZpbmUgRl9URVJNSU5GTwkwCS8qIHVzZSB0ZXJtaW5mbyBuYW1lcyAqLworI2RlZmluZSBGX1ZBUklBQkxFCTEJLyogdXNlIEMgdmFyaWFibGUgbmFtZXMgKi8KKyNkZWZpbmUgRl9URVJNQ0FQCTIJLyogdGVybWNhcCBuYW1lcyB3aXRoIGNhcGFiaWxpdHkgY29udmVyc2lvbiAqLworI2RlZmluZSBGX1RDT05WRVJSCTMJLyogYXMgVF9URVJNQ0FQLCBubyBza2lwIG9mIHVudHJhbnNsYXRhYmxlcyAqLworI2RlZmluZSBGX0xJVEVSQUwJNAkvKiBsaWtlIEZfVEVSTUlORk8sIGJ1dCBubyBzbWFydCBkZWZhdWx0cyAqLworCisvKiBjYXBhYmlsaXR5IHNvcnQgbW9kZXMgKi8KKyNkZWZpbmUgU19ERUZBVUxUCTAJLyogc29ydCBieSB0ZXJtaW5mbyBuYW1lIChpbXBsaWNpdCkgKi8KKyNkZWZpbmUgU19OT1NPUlQJMQkvKiBkb24ndCBzb3J0ICovCisjZGVmaW5lIFNfVEVSTUlORk8JMgkvKiBzb3J0IGJ5IHRlcm1pbmZvIG5hbWVzIChleHBsaWNpdCkgKi8KKyNkZWZpbmUgU19WQVJJQUJMRQkzCS8qIHNvcnQgYnkgQyB2YXJpYWJsZSBuYW1lcyAqLworI2RlZmluZSBTX1RFUk1DQVAJNAkvKiBzb3J0IGJ5IHRlcm1jYXAgbmFtZXMgKi8KKworLyogY2FwYWJpbGl0eSB0eXBlcyBmb3IgdGhlIGNvbXBhcmlzb24gaG9vayAqLworI2RlZmluZSBDTVBfQk9PTEVBTgkwCS8qIGNvbXBhcmlzb24gb24gYm9vbGVhbnMgKi8KKyNkZWZpbmUgQ01QX05VTUJFUgkxCS8qIGNvbXBhcmlzb24gb24gbnVtZXJpY3MgKi8KKyNkZWZpbmUgQ01QX1NUUklORwkyCS8qIGNvbXBhcmlzb24gb24gc3RyaW5ncyAqLworI2RlZmluZSBDTVBfVVNFCQkzCS8qIGNvbXBhcmlzb24gb24gdXNlIGNhcGFiaWxpdGllcyAqLworCit0eXBlZGVmIHVuc2lnbmVkIFByZWRUeXBlOwordHlwZWRlZiB1bnNpZ25lZCBQcmVkSWR4OwordHlwZWRlZiBpbnQgKCpQcmVkRnVuYykoUHJlZFR5cGUsIFByZWRJZHgpOworCitleHRlcm4gTkNVUlNFU19DT05TVCBjaGFyICpuYW1ldHJhbnMoY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZm10X2VudHJ5KFRFUk1UWVBFICosIFByZWRGdW5jLCBib29sLCBib29sLCBib29sLCBpbnQpOworZXh0ZXJuIGludCBzaG93X2VudHJ5KHZvaWQpOworZXh0ZXJuIHZvaWQgY29tcGFyZV9lbnRyeSh2b2lkICgqKShQcmVkVHlwZSwgUHJlZElkeCwgY29uc3QgY2hhciAqKSwgVEVSTVRZUEUgKiwgYm9vbCk7CitleHRlcm4gdm9pZCBkdW1wX2VudHJ5KFRFUk1UWVBFICosIGJvb2wsIGJvb2wsIGludCwgUHJlZEZ1bmMpOworZXh0ZXJuIHZvaWQgZHVtcF9pbml0KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LCBib29sKTsKK2V4dGVybiB2b2lkIGR1bXBfdXNlcyhjb25zdCBjaGFyICosIGJvb2wpOworZXh0ZXJuIHZvaWQgcmVwYWlyX2Fjc2MoVEVSTVRZUEUgKiB0cCk7CisKKyNkZWZpbmUgRkFJTAktMQorCisjZW5kaWYgLyogRFVNUF9FTlRSWV9IICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wcm9ncy9pbmZvY21wLmMgYi9uY3Vyc2VzLTUuNy9wcm9ncy9pbmZvY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ODlmZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Byb2dzL2luZm9jbXAuYwpAQCAtMCwwICsxLDE2NTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWluZm9jbXAuYyAtLSBkZWNvbXBpbGUgYW4gZW50cnksIG9yIGNvbXBhcmUgdHdvIGVudHJpZXMKKyAqCQl3cml0dGVuIGJ5IEVyaWMgUy4gUmF5bW9uZAorICoJCWFuZCBUaG9tYXMgRSBEaWNrZXkKKyAqLworCisjaW5jbHVkZSA8cHJvZ3MucHJpdi5oPgorCisjaW5jbHVkZSA8ZHVtcF9lbnRyeS5oPgorCitNT0RVTEVfSUQoIiRJZDogaW5mb2NtcC5jLHYgMS4xMDMgMjAwOC8wOC8xNiAyMjowNDo1NiB0b20gRXhwICQiKQorCisjZGVmaW5lIExfQ1VSTCAieyIKKyNkZWZpbmUgUl9DVVJMICJ9IgorCisjZGVmaW5lIE1BWF9TVFJJTkcJMTAyNAkvKiBtYXhpbXVtIGZvcm1hdHRlZCBzdHJpbmcgKi8KKworY29uc3QgY2hhciAqX25jX3Byb2duYW1lID0gImluZm9jbXAiOworCit0eXBlZGVmIGNoYXIgcGF0aFtQQVRIX01BWF07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbnRyb2wgdmFyaWFibGVzLCB0b2dldGhlciB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqIHRlcm1pbmZvIGVudHJpZXMsIGNvbXBsZXRlbHkgZGV0ZXJtaW5lIHRoZSBhY3Rpb25zIG9mIHRoZSBwcm9ncmFtLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBFTlRSWSAqZW50cmllczsJCS8qIHRlcm1pbmZvIGVudHJpZXMgKi8KK3N0YXRpYyBpbnQgdGVybWNvdW50OwkJLyogY291bnQgb2YgdGVybWluYWwgZW50cmllcyAqLworCitzdGF0aWMgYm9vbCBsaW1pdGVkID0gVFJVRTsJLyogIi1yIiBvcHRpb24gaXMgbm90IHNldCAqLworc3RhdGljIGJvb2wgcXVpZXQgPSBGQUxTRTsKK3N0YXRpYyBib29sIGxpdGVyYWwgPSBGQUxTRTsKK3N0YXRpYyBjb25zdCBjaGFyICpib29sX3NlcCA9ICI6IjsKK3N0YXRpYyBjb25zdCBjaGFyICpzX2Fic2VudCA9ICJOVUxMIjsKK3N0YXRpYyBjb25zdCBjaGFyICpzX2NhbmNlbCA9ICJOVUxMIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0dmVyc2lvbjsJLyogdGVybWluZm8gdmVyc2lvbiBzZWxlY3RlZCAqLworc3RhdGljIGludCBpdHJhY2U7CQkvKiB0cmFjZSBmbGFnIGZvciBkZWJ1Z2dpbmcgKi8KK3N0YXRpYyBpbnQgbXdpZHRoID0gNjA7CitzdGF0aWMgaW50IG51bWJlcnMgPSAwOwkJLyogZm9ybWF0ICIlJ2NoYXInIiB0by9mcm9tICIle251bWJlcn0iICovCitzdGF0aWMgaW50IG91dGZvcm0gPSBGX1RFUk1JTkZPOwkvKiBvdXRwdXQgZm9ybWF0ICovCitzdGF0aWMgaW50IHNvcnRtb2RlOwkJLyogc29ydF9tb2RlICovCisKKy8qIG1haW4gY29tcGFyaXNvbiBtb2RlICovCitzdGF0aWMgaW50IGNvbXBhcmU7CisjZGVmaW5lIENfREVGQVVMVAkwCS8qIGRvbid0IGZvcmNlIGNvbXBhcmlzb24gbW9kZSAqLworI2RlZmluZSBDX0RJRkZFUkVOQ0UJMQkvKiBsaXN0IGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHRlcm1pbmFscyAqLworI2RlZmluZSBDX0NPTU1PTgkyCS8qIGxpc3QgY29tbW9uIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBDX05BTkQJCTMJLyogbGlzdCBjYXBhYmlsaXRpZXMgaW4gbmVpdGhlciB0ZXJtaW5hbCAqLworI2RlZmluZSBDX1VTRUFMTAk0CS8qIGdlbmVyYXRlIHJlbGF0aXZlIHVzZS1mb3JtIGVudHJ5ICovCitzdGF0aWMgYm9vbCBpZ25vcmVwYWRzOwkJLyogaWdub3JlIHBhZCBwcmVmaXhlcyB3aGVuIGRpZmZpbmcgKi8KKworI2lmIE5PX0xFQUtTCisjdW5kZWYgRXhpdFByb2dyYW0KK3N0YXRpYyB2b2lkIEV4aXRQcm9ncmFtKGludCBjb2RlKSBHQ0NfTk9SRVRVUk47CisvKiBwcm90b3R5cGUgaXMgdG8gZ2V0IGdjYyB0byBhY2NlcHQgdGhlIG5vcmV0dXJuIGF0dHJpYnV0ZSAqLworc3RhdGljIHZvaWQKK0V4aXRQcm9ncmFtKGludCBjb2RlKQoreworICAgIHdoaWxlICh0ZXJtY291bnQtLSA+IDApCisJX25jX2ZyZWVfdGVybXR5cGUoJmVudHJpZXNbdGVybWNvdW50XS50dGVybSk7CisgICAgX25jX2xlYWtzX2R1bXBfZW50cnkoKTsKKyAgICBmcmVlKGVudHJpZXMpOworICAgIF9uY19mcmVlX3RpYyhjb2RlKTsKK30KKyNlbmRpZgorCitzdGF0aWMgY2hhciAqCitjYW5vbmljYWxfbmFtZShjaGFyICpwdHIsIGNoYXIgKmJ1ZikKKy8qIGV4dHJhY3QgdGhlIHRlcm1pbmFsIHR5cGUncyBwcmltYXJ5IG5hbWUgKi8KK3sKKyAgICBjaGFyICpicDsKKworICAgICh2b2lkKSBzdHJjcHkoYnVmLCBwdHIpOworICAgIGlmICgoYnAgPSBzdHJjaHIoYnVmLCAnfCcpKSAhPSAwKQorCSpicCA9ICdcMCc7CisKKyAgICByZXR1cm4gKGJ1Zik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQcmVkaWNhdGVzIGZvciBkdW1wIGZ1bmN0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorY2FwY21wKFByZWRJZHggaWR4LCBjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICp0KQorLyogY2FwYWJpbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uICovCit7CisgICAgaWYgKCFWQUxJRF9TVFJJTkcocykgJiYgIVZBTElEX1NUUklORyh0KSkKKwlyZXR1cm4gKHMgIT0gdCk7CisgICAgZWxzZSBpZiAoIVZBTElEX1NUUklORyhzKSB8fCAhVkFMSURfU1RSSU5HKHQpKQorCXJldHVybiAoMSk7CisKKyAgICBpZiAoKGlkeCA9PSBhY3NfY2hhcnNfaW5kZXgpIHx8ICFpZ25vcmVwYWRzKQorCXJldHVybiAoc3RyY21wKHMsIHQpKTsKKyAgICBlbHNlCisJcmV0dXJuIChfbmNfY2FwY21wKHMsIHQpKTsKK30KKworc3RhdGljIGludAordXNlX3ByZWRpY2F0ZSh1bnNpZ25lZCB0eXBlLCBQcmVkSWR4IGlkeCkKKy8qIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB1c2UgZm9yIHVzZSBkZWNvbXBpbGF0aW9uICovCit7CisgICAgRU5UUlkgKmVwOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBCT09MRUFOOgorCXsKKwkgICAgaW50IGlzX3NldCA9IEZBTFNFOworCisJICAgIC8qCisJICAgICAqIFRoaXMgYXNzdW1lcyB0aGF0IG11bHRpcGxlIHVzZSBlbnRyaWVzIGFyZSBzdXBwb3NlZAorCSAgICAgKiB0byBjb250cmlidXRlIHRoZSBsb2dpY2FsIG9yIG9mIHRoZWlyIGJvb2xlYW4gY2FwYWJpbGl0aWVzLgorCSAgICAgKiBUaGlzIGlzIHRydWUgaWYgd2UgdGFrZSB0aGUgc2VtYW50aWNzIG9mIG11bHRpcGxlIHVzZXMgdG8KKwkgICAgICogYmUgJ2VhY2ggY2FwYWJpbGl0eSBnZXRzIHRoZSBmaXJzdCBub24tZGVmYXVsdCB2YWx1ZSBmb3VuZAorCSAgICAgKiBpbiB0aGUgc2VxdWVuY2Ugb2YgdXNlIGVudHJpZXMnLgorCSAgICAgKgorCSAgICAgKiBOb3RlIHRoYXQgY2FuY2VsbGVkIG9yIGFic2VudCBib29sZWFucyBhcmUgc3RvcmVkIGFzIEZBTFNFLAorCSAgICAgKiB1bmxpa2UgbnVtYmVycyBhbmQgc3RyaW5ncywgd2hvc2UgY2FuY2VsbGVkL2Fic2VudCBzdGF0ZSBpcworCSAgICAgKiByZWNvcmRlZCBpbiB0aGUgdGVybWluZm8gZGF0YWJhc2UuCisJICAgICAqLworCSAgICBmb3IgKGVwID0gJmVudHJpZXNbMV07IGVwIDwgZW50cmllcyArIHRlcm1jb3VudDsgZXArKykKKwkJaWYgKGVwLT50dGVybS5Cb29sZWFuc1tpZHhdID09IFRSVUUpIHsKKwkJICAgIGlzX3NldCA9IGVudHJpZXNbMF0udHRlcm0uQm9vbGVhbnNbaWR4XTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIGlmIChpc19zZXQgIT0gZW50cmllc1swXS50dGVybS5Cb29sZWFuc1tpZHhdKQorCQlyZXR1cm4gKCFpc19zZXQpOworCSAgICBlbHNlCisJCXJldHVybiAoRkFJTCk7CisJfQorCisgICAgY2FzZSBOVU1CRVI6CisJeworCSAgICBpbnQgdmFsdWUgPSBBQlNFTlRfTlVNRVJJQzsKKworCSAgICAvKgorCSAgICAgKiBXZSB0YWtlIHRoZSBzZW1hbnRpY3Mgb2YgbXVsdGlwbGUgdXNlcyB0byBiZSAnZWFjaAorCSAgICAgKiBjYXBhYmlsaXR5IGdldHMgdGhlIGZpcnN0IG5vbi1kZWZhdWx0IHZhbHVlIGZvdW5kCisJICAgICAqIGluIHRoZSBzZXF1ZW5jZSBvZiB1c2UgZW50cmllcycuCisJICAgICAqLworCSAgICBmb3IgKGVwID0gJmVudHJpZXNbMV07IGVwIDwgZW50cmllcyArIHRlcm1jb3VudDsgZXArKykKKwkJaWYgKFZBTElEX05VTUVSSUMoZXAtPnR0ZXJtLk51bWJlcnNbaWR4XSkpIHsKKwkJICAgIHZhbHVlID0gZXAtPnR0ZXJtLk51bWJlcnNbaWR4XTsKKwkJICAgIGJyZWFrOworCQl9CisKKwkgICAgaWYgKHZhbHVlICE9IGVudHJpZXNbMF0udHRlcm0uTnVtYmVyc1tpZHhdKQorCQlyZXR1cm4gKHZhbHVlICE9IEFCU0VOVF9OVU1FUklDKTsKKwkgICAgZWxzZQorCQlyZXR1cm4gKEZBSUwpOworCX0KKworICAgIGNhc2UgU1RSSU5HOgorCXsKKwkgICAgY2hhciAqdGVybXN0ciwgKnVzZXN0ciA9IEFCU0VOVF9TVFJJTkc7CisKKwkgICAgdGVybXN0ciA9IGVudHJpZXNbMF0udHRlcm0uU3RyaW5nc1tpZHhdOworCisJICAgIC8qCisJICAgICAqIFdlIHRha2UgdGhlIHNlbWFudGljcyBvZiBtdWx0aXBsZSB1c2VzIHRvIGJlICdlYWNoCisJICAgICAqIGNhcGFiaWxpdHkgZ2V0cyB0aGUgZmlyc3Qgbm9uLWRlZmF1bHQgdmFsdWUgZm91bmQKKwkgICAgICogaW4gdGhlIHNlcXVlbmNlIG9mIHVzZSBlbnRyaWVzJy4KKwkgICAgICovCisJICAgIGZvciAoZXAgPSAmZW50cmllc1sxXTsgZXAgPCBlbnRyaWVzICsgdGVybWNvdW50OyBlcCsrKQorCQlpZiAoZXAtPnR0ZXJtLlN0cmluZ3NbaWR4XSkgeworCQkgICAgdXNlc3RyID0gZXAtPnR0ZXJtLlN0cmluZ3NbaWR4XTsKKwkJICAgIGJyZWFrOworCQl9CisKKwkgICAgaWYgKHVzZXN0ciA9PSBBQlNFTlRfU1RSSU5HICYmIHRlcm1zdHIgPT0gQUJTRU5UX1NUUklORykKKwkJcmV0dXJuIChGQUlMKTsKKwkgICAgZWxzZSBpZiAoIXVzZXN0ciB8fCAhdGVybXN0ciB8fCBjYXBjbXAoaWR4LCB1c2VzdHIsIHRlcm1zdHIpKQorCQlyZXR1cm4gKFRSVUUpOworCSAgICBlbHNlCisJCXJldHVybiAoRkFJTCk7CisJfQorICAgIH0KKworICAgIHJldHVybiAoRkFMU0UpOwkJLyogcGFjaWZ5IGNvbXBpbGVyICovCit9CisKK3N0YXRpYyBib29sCit1c2VlcShFTlRSWSAqIGUxLCBFTlRSWSAqIGUyKQorLyogYXJlIHRoZSB1c2UgcmVmZXJlbmNlcyBpbiB0d28gZW50cmllcyBlcXVpdmFsZW50PyAqLworeworICAgIHVuc2lnbmVkIGksIGo7CisKKyAgICBpZiAoZTEtPm51c2VzICE9IGUyLT5udXNlcykKKwlyZXR1cm4gKEZBTFNFKTsKKworICAgIC8qIFVnaC4uLnRoaXMgaXMgcXVhZHJhdGljIGFnYWluICovCisgICAgZm9yIChpID0gMDsgaSA8IGUxLT5udXNlczsgaSsrKSB7CisJYm9vbCBmb3VuZG1hdGNoID0gRkFMU0U7CisKKwkvKiBzZWFyY2ggc2Vjb25kIGVudHJ5IGZvciBnaXZlbiB1c2UgcmVmZXJlbmNlICovCisJZm9yIChqID0gMDsgaiA8IGUyLT5udXNlczsgaisrKQorCSAgICBpZiAoIXN0cmNtcChlMS0+dXNlc1tpXS5uYW1lLCBlMi0+dXNlc1tqXS5uYW1lKSkgeworCQlmb3VuZG1hdGNoID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIH0KKworCWlmICghZm91bmRtYXRjaCkKKwkgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIChUUlVFKTsKK30KKworc3RhdGljIGJvb2wKK2VudHJ5ZXEoVEVSTVRZUEUgKnQxLCBURVJNVFlQRSAqdDIpCisvKiBhcmUgdHdvIGVudHJpZXMgZXF1aXZhbGVudD8gKi8KK3sKKyAgICB1bnNpZ25lZCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9CT09MRUFOUyh0MSk7IGkrKykKKwlpZiAodDEtPkJvb2xlYW5zW2ldICE9IHQyLT5Cb29sZWFuc1tpXSkKKwkgICAgcmV0dXJuIChGQUxTRSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX05VTUJFUlModDEpOyBpKyspCisJaWYgKHQxLT5OdW1iZXJzW2ldICE9IHQyLT5OdW1iZXJzW2ldKQorCSAgICByZXR1cm4gKEZBTFNFKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fU1RSSU5HUyh0MSk7IGkrKykKKwlpZiAoY2FwY21wKChQcmVkSWR4KSBpLCB0MS0+U3RyaW5nc1tpXSwgdDItPlN0cmluZ3NbaV0pKQorCSAgICByZXR1cm4gKEZBTFNFKTsKKworICAgIHJldHVybiAoVFJVRSk7Cit9CisKKyNkZWZpbmUgVElDX0VYUEFORChyZXN1bHQpIF9uY190aWNfZXhwYW5kKHJlc3VsdCwgb3V0Zm9ybT09Rl9URVJNSU5GTywgbnVtYmVycykKKworc3RhdGljIHZvaWQKK3ByaW50X3VzZXMoRU5UUlkgKiBlcCwgRklMRSAqZnApCisvKiBwcmludCBhbiBlbnRyeSdzIHVzZSByZWZlcmVuY2VzICovCit7CisgICAgdW5zaWduZWQgaTsKKworICAgIGlmICghZXAtPm51c2VzKQorCWZwdXRzKCJOVUxMIiwgZnApOworICAgIGVsc2UKKwlmb3IgKGkgPSAwOyBpIDwgZXAtPm51c2VzOyBpKyspIHsKKwkgICAgZnB1dHMoZXAtPnVzZXNbaV0ubmFtZSwgZnApOworCSAgICBpZiAoaSA8IGVwLT5udXNlcyAtIDEpCisJCWZwdXRzKCIgIiwgZnApOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZHVtcF9ib29sZWFuKGludCB2YWwpCisvKiBkaXNwbGF5IHRoZSB2YWx1ZSBvZiBhIGJvb2xlYW4gY2FwYWJpbGl0eSAqLworeworICAgIHN3aXRjaCAodmFsKSB7CisgICAgY2FzZSBBQlNFTlRfQk9PTEVBTjoKKwlyZXR1cm4gKHNfYWJzZW50KTsKKyAgICBjYXNlIENBTkNFTExFRF9CT09MRUFOOgorCXJldHVybiAoc19jYW5jZWwpOworICAgIGNhc2UgRkFMU0U6CisJcmV0dXJuICgiRiIpOworICAgIGNhc2UgVFJVRToKKwlyZXR1cm4gKCJUIik7CisgICAgZGVmYXVsdDoKKwlyZXR1cm4gKCI/Iik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZHVtcF9udW1lcmljKGludCB2YWwsIGNoYXIgKmJ1ZikKKy8qIGRpc3BsYXkgdGhlIHZhbHVlIG9mIGEgYm9vbGVhbiBjYXBhYmlsaXR5ICovCit7CisgICAgc3dpdGNoICh2YWwpIHsKKyAgICBjYXNlIEFCU0VOVF9OVU1FUklDOgorCXN0cmNweShidWYsIHNfYWJzZW50KTsKKwlicmVhazsKKyAgICBjYXNlIENBTkNFTExFRF9OVU1FUklDOgorCXN0cmNweShidWYsIHNfY2FuY2VsKTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCXNwcmludGYoYnVmLCAiJWQiLCB2YWwpOworCWJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2R1bXBfc3RyaW5nKGNoYXIgKnZhbCwgY2hhciAqYnVmKQorLyogZGlzcGxheSB0aGUgdmFsdWUgb2YgYSBzdHJpbmcgY2FwYWJpbGl0eSAqLworeworICAgIGlmICh2YWwgPT0gQUJTRU5UX1NUUklORykKKwlzdHJjcHkoYnVmLCBzX2Fic2VudCk7CisgICAgZWxzZSBpZiAodmFsID09IENBTkNFTExFRF9TVFJJTkcpCisJc3RyY3B5KGJ1Ziwgc19jYW5jZWwpOworICAgIGVsc2UgeworCXNwcmludGYoYnVmLCAiJyUuKnMnIiwgTUFYX1NUUklORyAtIDMsIFRJQ19FWFBBTkQodmFsKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY29tcGFyZV9wcmVkaWNhdGUoUHJlZFR5cGUgdHlwZSwgUHJlZElkeCBpZHgsIGNvbnN0IGNoYXIgKm5hbWUpCisvKiBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdXNlIGZvciBlbnRyeSBkaWZmZXJlbmNlIHJlcG9ydHMgKi8KK3sKKyAgICByZWdpc3RlciBFTlRSWSAqZTEgPSAmZW50cmllc1swXTsKKyAgICByZWdpc3RlciBFTlRSWSAqZTIgPSAmZW50cmllc1sxXTsKKyAgICBjaGFyIGJ1ZjFbTUFYX1NUUklOR10sIGJ1ZjJbTUFYX1NUUklOR107CisgICAgaW50IGIxLCBiMjsKKyAgICBpbnQgbjEsIG4yOworICAgIGNoYXIgKnMxLCAqczI7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENNUF9CT09MRUFOOgorCWIxID0gZTEtPnR0ZXJtLkJvb2xlYW5zW2lkeF07CisJYjIgPSBlMi0+dHRlcm0uQm9vbGVhbnNbaWR4XTsKKwlzd2l0Y2ggKGNvbXBhcmUpIHsKKwljYXNlIENfRElGRkVSRU5DRToKKwkgICAgaWYgKCEoYjEgPT0gQUJTRU5UX0JPT0xFQU4gJiYgYjIgPT0gQUJTRU5UX0JPT0xFQU4pICYmIGIxICE9IGIyKQorCQkodm9pZCkgcHJpbnRmKCJcdCVzOiAlcyVzJXMuXG4iLAorCQkJICAgICAgbmFtZSwKKwkJCSAgICAgIGR1bXBfYm9vbGVhbihiMSksCisJCQkgICAgICBib29sX3NlcCwKKwkJCSAgICAgIGR1bXBfYm9vbGVhbihiMikpOworCSAgICBicmVhazsKKworCWNhc2UgQ19DT01NT046CisJICAgIGlmIChiMSA9PSBiMiAmJiBiMSAhPSBBQlNFTlRfQk9PTEVBTikKKwkJKHZvaWQpIHByaW50ZigiXHQlcz0gJXMuXG4iLCBuYW1lLCBkdW1wX2Jvb2xlYW4oYjEpKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENfTkFORDoKKwkgICAgaWYgKGIxID09IEFCU0VOVF9CT09MRUFOICYmIGIyID09IEFCU0VOVF9CT09MRUFOKQorCQkodm9pZCkgcHJpbnRmKCJcdCElcy5cbiIsIG5hbWUpOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisKKyAgICBjYXNlIENNUF9OVU1CRVI6CisJbjEgPSBlMS0+dHRlcm0uTnVtYmVyc1tpZHhdOworCW4yID0gZTItPnR0ZXJtLk51bWJlcnNbaWR4XTsKKwlkdW1wX251bWVyaWMobjEsIGJ1ZjEpOworCWR1bXBfbnVtZXJpYyhuMiwgYnVmMik7CisJc3dpdGNoIChjb21wYXJlKSB7CisJY2FzZSBDX0RJRkZFUkVOQ0U6CisJICAgIGlmICghKChuMSA9PSBBQlNFTlRfTlVNRVJJQyAmJiBuMiA9PSBBQlNFTlRfTlVNRVJJQykpICYmIG4xICE9IG4yKQorCQkodm9pZCkgcHJpbnRmKCJcdCVzOiAlcywgJXMuXG4iLCBuYW1lLCBidWYxLCBidWYyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENfQ09NTU9OOgorCSAgICBpZiAobjEgIT0gQUJTRU5UX05VTUVSSUMgJiYgbjIgIT0gQUJTRU5UX05VTUVSSUMgJiYgbjEgPT0gbjIpCisJCSh2b2lkKSBwcmludGYoIlx0JXM9ICVzLlxuIiwgbmFtZSwgYnVmMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBDX05BTkQ6CisJICAgIGlmIChuMSA9PSBBQlNFTlRfTlVNRVJJQyAmJiBuMiA9PSBBQlNFTlRfTlVNRVJJQykKKwkJKHZvaWQpIHByaW50ZigiXHQhJXMuXG4iLCBuYW1lKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBDTVBfU1RSSU5HOgorCXMxID0gZTEtPnR0ZXJtLlN0cmluZ3NbaWR4XTsKKwlzMiA9IGUyLT50dGVybS5TdHJpbmdzW2lkeF07CisJc3dpdGNoIChjb21wYXJlKSB7CisJY2FzZSBDX0RJRkZFUkVOQ0U6CisJICAgIGlmIChjYXBjbXAoaWR4LCBzMSwgczIpKSB7CisJCWR1bXBfc3RyaW5nKHMxLCBidWYxKTsKKwkJZHVtcF9zdHJpbmcoczIsIGJ1ZjIpOworCQlpZiAoc3RyY21wKGJ1ZjEsIGJ1ZjIpKQorCQkgICAgKHZvaWQpIHByaW50ZigiXHQlczogJXMsICVzLlxuIiwgbmFtZSwgYnVmMSwgYnVmMik7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIENfQ09NTU9OOgorCSAgICBpZiAoczEgJiYgczIgJiYgIWNhcGNtcChpZHgsIHMxLCBzMikpCisJCSh2b2lkKSBwcmludGYoIlx0JXM9ICclcycuXG4iLCBuYW1lLCBUSUNfRVhQQU5EKHMxKSk7CisJICAgIGJyZWFrOworCisJY2FzZSBDX05BTkQ6CisJICAgIGlmICghczEgJiYgIXMyKQorCQkodm9pZCkgcHJpbnRmKCJcdCElcy5cbiIsIG5hbWUpOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CisKKyAgICBjYXNlIENNUF9VU0U6CisJLyogdW5saWtlIHRoZSBvdGhlciBtb2RlcywgdGhpcyBjb21wYXJlcyAqYWxsKiB1c2UgZW50cmllcyAqLworCXN3aXRjaCAoY29tcGFyZSkgeworCWNhc2UgQ19ESUZGRVJFTkNFOgorCSAgICBpZiAoIXVzZWVxKGUxLCBlMikpIHsKKwkJKHZvaWQpIGZwdXRzKCJcdHVzZTogIiwgc3Rkb3V0KTsKKwkJcHJpbnRfdXNlcyhlMSwgc3Rkb3V0KTsKKwkJZnB1dHMoIiwgIiwgc3Rkb3V0KTsKKwkJcHJpbnRfdXNlcyhlMiwgc3Rkb3V0KTsKKwkJZnB1dHMoIi5cbiIsIHN0ZG91dCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIENfQ09NTU9OOgorCSAgICBpZiAoZTEtPm51c2VzICYmIGUyLT5udXNlcyAmJiB1c2VlcShlMSwgZTIpKSB7CisJCSh2b2lkKSBmcHV0cygiXHR1c2U6ICIsIHN0ZG91dCk7CisJCXByaW50X3VzZXMoZTEsIHN0ZG91dCk7CisJCWZwdXRzKCIuXG4iLCBzdGRvdXQpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBDX05BTkQ6CisJICAgIGlmICghZTEtPm51c2VzICYmICFlMi0+bnVzZXMpCisJCSh2b2lkKSBwcmludGYoIlx0IXVzZS5cbiIpOworCSAgICBicmVhazsKKwl9CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSW5pdCBzdHJpbmcgYW5hbHlzaXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqZnJvbTsKKyAgICBjb25zdCBjaGFyICp0bzsKK30gYXNzb2M7CisKK3N0YXRpYyBjb25zdCBhc3NvYyBzdGRfY2Fwc1tdID0KK3sKKyAgICAvKiB0aGVzZSBhcmUgc3BlY2lmaWVkIGJ5IFguMzY0IGFuZCBpQkNTMiAqLworICAgIHsiXDAzM2MiLCAiUklTIn0sCQkvKiBmdWxsIHJlc2V0ICovCisgICAgeyJcMDMzNyIsICJTQyJ9LAkJLyogc2F2ZSBjdXJzb3IgKi8KKyAgICB7IlwwMzM4IiwgIlJDIn0sCQkvKiByZXN0b3JlIGN1cnNvciAqLworICAgIHsiXDAzM1tyIiwgIlJTUiJ9LAkJLyogbm90IGFuIFguMzY0IG1uZW1vbmljICovCisgICAgeyJcMDMzW20iLCAiU0dSMCJ9LAkJLyogbm90IGFuIFguMzY0IG1uZW1vbmljICovCisgICAgeyJcMDMzWzJKIiwgIkVEMiJ9LAkJLyogY2xlYXIgcGFnZSAqLworCisgICAgLyogdGhpcyBncm91cCBpcyBzcGVjaWZpZWQgYnkgSVNPIDIwMjIgKi8KKyAgICB7IlwwMzMoMCIsICJJU08gREVDIEcwIn0sCS8qIGVuYWJsZSBERUMgZ3JhcGhpY3MgZm9yIEcwICovCisgICAgeyJcMDMzKEEiLCAiSVNPIFVLIEcwIn0sCS8qIGVuYWJsZSBVSyBjaGFycyBmb3IgRzAgKi8KKyAgICB7IlwwMzMoQiIsICJJU08gVVMgRzAifSwJLyogZW5hYmxlIFVTIGNoYXJzIGZvciBHMCAqLworICAgIHsiXDAzMykwIiwgIklTTyBERUMgRzEifSwJLyogZW5hYmxlIERFQyBncmFwaGljcyBmb3IgRzEgKi8KKyAgICB7IlwwMzMpQSIsICJJU08gVUsgRzEifSwJLyogZW5hYmxlIFVLIGNoYXJzIGZvciBHMSAqLworICAgIHsiXDAzMylCIiwgIklTTyBVUyBHMSJ9LAkvKiBlbmFibGUgVVMgY2hhcnMgZm9yIEcxICovCisKKyAgICAvKiB0aGVzZSBhcmUgREVDIHByaXZhdGUgY29udHJvbHMgd2lkZWx5IHN1cHBvcnRlZCBieSBlbXVsYXRvcnMgKi8KKyAgICB7IlwwMzM9IiwgIkRFQ1BBTSJ9LAkvKiBhcHBsaWNhdGlvbiBrZXlwYWQgbW9kZSAqLworICAgIHsiXDAzMz4iLCAiREVDUE5NIn0sCS8qIG5vcm1hbCBrZXlwYWQgbW9kZSAqLworICAgIHsiXDAzMzwiLCAiREVDQU5TSSJ9LAkvKiBlbnRlciBBTlNJIG1vZGUgKi8KKyAgICB7IlwwMzNbIXAiLCAiREVDU1RSIn0sCS8qIHNvZnQgcmVzZXQgKi8KKyAgICB7IlwwMzMgRiIsICJTN0MxVCJ9LAkvKiA3LWJpdCBjb250cm9scyAqLworCisgICAgeyhjaGFyICopIDAsIChjaGFyICopIDB9Cit9OworCitzdGF0aWMgY29uc3QgYXNzb2Mgc3RkX21vZGVzW10gPQorLyogRUNNQSBcRVsgLi4uIFtobF0gbW9kZXMgcmVjb2duaXplZCBieSBtYW55IGVtdWxhdG9ycyAqLworeworICAgIHsiMiIsICJBTSJ9LAkJLyoga2V5Ym9hcmQgYWN0aW9uIG1vZGUgKi8KKyAgICB7IjQiLCAiSVJNIn0sCQkvKiBpbnNlcnQvcmVwbGFjZSBtb2RlICovCisgICAgeyIxMiIsICJTUk0ifSwJCS8qIHNlbmQvcmVjZWl2ZSBtb2RlICovCisgICAgeyIyMCIsICJMTk0ifSwJCS8qIGxpbmVmZWVkIG1vZGUgKi8KKyAgICB7KGNoYXIgKikgMCwgKGNoYXIgKikgMH0KK307CisKK3N0YXRpYyBjb25zdCBhc3NvYyBwcml2YXRlX21vZGVzW10gPQorLyogREVDIFxFWyAuLi4gW2hsXSBtb2RlcyByZWNvZ25pemVkIGJ5IG1hbnkgZW11bGF0b3JzICovCit7CisgICAgeyIxIiwgIkNLTSJ9LAkJLyogYXBwbGljYXRpb24gY3Vyc29yIGtleXMgKi8KKyAgICB7IjIiLCAiQU5NIn0sCQkvKiBzZXQgVlQ1MiBtb2RlICovCisgICAgeyIzIiwgIkNPTE0ifSwJCS8qIDEzMi1jb2x1bW4gbW9kZSAqLworICAgIHsiNCIsICJTQ0xNIn0sCQkvKiBzbW9vdGggc2Nyb2xsICovCisgICAgeyI1IiwgIlNDTk0ifSwJCS8qIHJldmVyc2UgdmlkZW8gbW9kZSAqLworICAgIHsiNiIsICJPTSJ9LAkJLyogb3JpZ2luIG1vZGUgKi8KKyAgICB7IjciLCAiQVdNIn0sCQkvKiB3cmFwYXJvdW5kIG1vZGUgKi8KKyAgICB7IjgiLCAiQVJNIn0sCQkvKiBhdXRvLXJlcGVhdCBtb2RlICovCisgICAgeyhjaGFyICopIDAsIChjaGFyICopIDB9Cit9OworCitzdGF0aWMgY29uc3QgYXNzb2MgZWNtYV9oaWdobGlnaHRzW10gPQorLyogcmVjb2duaXplIEVDTUEgYXR0cmlidXRlIHNlcXVlbmNlcyAqLworeworICAgIHsiMCIsICJOT1JNQUwifSwJCS8qIG5vcm1hbCAqLworICAgIHsiMSIsICIrQk9MRCJ9LAkJLyogYm9sZCBvbiAqLworICAgIHsiMiIsICIrRElNIn0sCQkvKiBkaW0gb24gKi8KKyAgICB7IjMiLCAiK0lUQUxJQyJ9LAkJLyogaXRhbGljIG9uICovCisgICAgeyI0IiwgIitVTkRFUkxJTkUifSwJLyogdW5kZXJsaW5lIG9uICovCisgICAgeyI1IiwgIitCTElOSyJ9LAkJLyogYmxpbmsgb24gKi8KKyAgICB7IjYiLCAiK0ZBU1RCTElOSyJ9LAkvKiBmYXN0Ymxpbmsgb24gKi8KKyAgICB7IjciLCAiK1JFVkVSU0UifSwJCS8qIHJldmVyc2Ugb24gKi8KKyAgICB7IjgiLCAiK0lOVklTSUJMRSJ9LAkvKiBpbnZpc2libGUgb24gKi8KKyAgICB7IjkiLCAiK0RFTEVURUQifSwJCS8qIGRlbGV0ZWQgb24gKi8KKyAgICB7IjEwIiwgIk1BSU4tRk9OVCJ9LAkvKiBzZWxlY3QgcHJpbWFyeSBmb250ICovCisgICAgeyIxMSIsICJBTFQtRk9OVC0xIn0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCAxICovCisgICAgeyIxMiIsICJBTFQtRk9OVC0yIn0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCAyICovCisgICAgeyIxMyIsICJBTFQtRk9OVC0zIn0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCAzICovCisgICAgeyIxNCIsICJBTFQtRk9OVC00In0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCA0ICovCisgICAgeyIxNSIsICJBTFQtRk9OVC01In0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCA1ICovCisgICAgeyIxNiIsICJBTFQtRk9OVC02In0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCA2ICovCisgICAgeyIxNyIsICJBTFQtRk9OVC03In0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCA3ICovCisgICAgeyIxOCIsICJBTFQtRk9OVC0xIn0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCAxICovCisgICAgeyIxOSIsICJBTFQtRk9OVC0xIn0sCS8qIHNlbGVjdCBhbHRlcm5hdGUgZm9udCAxICovCisgICAgeyIyMCIsICJGUkFLVFVSIn0sCQkvKiBGcmFrdHVyIGZvbnQgKi8KKyAgICB7IjIxIiwgIkRPVUJMRVVOREVSIn0sCS8qIGRvdWJsZSB1bmRlcmxpbmUgKi8KKyAgICB7IjIyIiwgIi1ESU0ifSwJCS8qIGRpbSBvZmYgKi8KKyAgICB7IjIzIiwgIi1JVEFMSUMifSwJCS8qIGl0YWxpYyBvZmYgKi8KKyAgICB7IjI0IiwgIi1VTkRFUkxJTkUifSwJLyogdW5kZXJsaW5lIG9mZiAqLworICAgIHsiMjUiLCAiLUJMSU5LIn0sCQkvKiBibGluayBvZmYgKi8KKyAgICB7IjI2IiwgIi1GQVNUQkxJTksifSwJLyogZmFzdGJsaW5rIG9mZiAqLworICAgIHsiMjciLCAiLVJFVkVSU0UifSwJCS8qIHJldmVyc2Ugb2ZmICovCisgICAgeyIyOCIsICItSU5WSVNJQkxFIn0sCS8qIGludmlzaWJsZSBvZmYgKi8KKyAgICB7IjI5IiwgIi1ERUxFVEVEIn0sCQkvKiBkZWxldGVkIG9mZiAqLworICAgIHsoY2hhciAqKSAwLCAoY2hhciAqKSAwfQorfTsKKworc3RhdGljIGludAorc2tpcF9jc2koY29uc3QgY2hhciAqY2FwKQoreworICAgIGludCByZXN1bHQgPSAwOworICAgIGlmIChjYXBbMF0gPT0gJ1wwMzMnICYmIGNhcFsxXSA9PSAnWycpCisJcmVzdWx0ID0gMjsKKyAgICBlbHNlIGlmIChVQ2hhcihjYXBbMF0pID09IDAyMzMpCisJcmVzdWx0ID0gMTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgYm9vbAorc2FtZV9wYXJhbShjb25zdCBjaGFyICp0YWJsZSwgY29uc3QgY2hhciAqcGFyYW0sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworICAgIGlmIChzdHJuY21wKHRhYmxlLCBwYXJhbSwgbGVuZ3RoKSA9PSAwKSB7CisJcmVzdWx0ID0gIWlzZGlnaXQoVUNoYXIocGFyYW1bbGVuZ3RoXSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqCitsb29rdXBfcGFyYW1zKGNvbnN0IGFzc29jICogdGFibGUsIGNoYXIgKmRzdCwgY2hhciAqc3JjKQoreworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisgICAgY29uc3QgY2hhciAqZXAgPSBzdHJ0b2soc3JjLCAiOyIpOworCisgICAgaWYgKGVwICE9IDApIHsKKwljb25zdCBhc3NvYyAqYXA7CisKKwlkbyB7CisJICAgIGJvb2wgZm91bmQgPSBGQUxTRTsKKworCSAgICBmb3IgKGFwID0gdGFibGU7IGFwLT5mcm9tOyBhcCsrKSB7CisJCXNpemVfdCB0bGVuID0gc3RybGVuKGFwLT5mcm9tKTsKKworCQlpZiAoc2FtZV9wYXJhbShhcC0+ZnJvbSwgZXAsIHRsZW4pKSB7CisJCSAgICAodm9pZCkgc3RyY2F0KGRzdCwgYXAtPnRvKTsKKwkJICAgIGZvdW5kID0gVFJVRTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgICBpZiAoIWZvdW5kKQorCQkodm9pZCkgc3RyY2F0KGRzdCwgZXApOworCSAgICAodm9pZCkgc3RyY2F0KGRzdCwgIjsiKTsKKwl9IHdoaWxlCisJICAgICgoZXAgPSBzdHJ0b2soKGNoYXIgKikgMCwgIjsiKSkpOworCisJZHN0W3N0cmxlbihkc3QpIC0gMV0gPSAnXDAnOworCisJcmVzdWx0ID0gZHN0OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorYW5hbHl6ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqY2FwLCBURVJNVFlQRSAqdHApCit7CisgICAgY2hhciBidWYyW01BWF9URVJNSU5GT19MRU5HVEhdOworICAgIGNvbnN0IGNoYXIgKnNwOworICAgIGNvbnN0IGFzc29jICphcDsKKyAgICBpbnQgdHBfbGluZXMgPSB0cC0+TnVtYmVyc1syXTsKKworICAgIGlmIChjYXAgPT0gQUJTRU5UX1NUUklORyB8fCBjYXAgPT0gQ0FOQ0VMTEVEX1NUUklORykKKwlyZXR1cm47CisgICAgKHZvaWQpIHByaW50ZigiJXM6ICIsIG5hbWUpOworCisgICAgZm9yIChzcCA9IGNhcDsgKnNwOyBzcCsrKSB7CisJaW50IGk7CisJaW50IGNzaTsKKwlzaXplX3QgbGVuID0gMDsKKwlzaXplX3QgbmV4dDsKKwljb25zdCBjaGFyICpleHBhbnNpb24gPSAwOworCWNoYXIgYnVmM1tNQVhfVEVSTUlORk9fTEVOR1RIXTsKKworCS8qIGZpcnN0LCBjaGVjayBvdGhlciBjYXBhYmlsaXRpZXMgaW4gdGhpcyBlbnRyeSAqLworCWZvciAoaSA9IDA7IGkgPCBTVFJDT1VOVDsgaSsrKSB7CisJICAgIGNoYXIgKmNwID0gdHAtPlN0cmluZ3NbaV07CisKKwkgICAgLyogZG9uJ3QgdXNlIHNvZnQta2V5IGNhcGFiaWxpdGllcyAqLworCSAgICBpZiAoc3RybmFtZXNbaV1bMF0gPT0gJ2snICYmIHN0cm5hbWVzW2ldWzBdID09ICdmJykKKwkJY29udGludWU7CisKKwkgICAgaWYgKGNwICE9IEFCU0VOVF9TVFJJTkcgJiYgY3AgIT0gQ0FOQ0VMTEVEX1NUUklORyAmJiBjcFswXSAmJiBjcAorCQkhPSBjYXApIHsKKwkJbGVuID0gc3RybGVuKGNwKTsKKwkJKHZvaWQpIHN0cm5jcHkoYnVmMiwgc3AsIGxlbik7CisJCWJ1ZjJbbGVuXSA9ICdcMCc7CisKKwkJaWYgKF9uY19jYXBjbXAoY3AsIGJ1ZjIpKQorCQkgICAgY29udGludWU7CisKKyNkZWZpbmUgSVNSUyhzKQkoIXN0cm5jbXAoKHMpLCAiaXMiLCAyKSB8fCAhc3RybmNtcCgocyksICJycyIsIDIpKQorCQkvKgorCQkgKiBUaGVvcmV0aWNhbGx5IHdlIGp1c3QgcGFzc2VkIHRoZSB0ZXN0IGZvciB0cmFuc2xhdGlvbgorCQkgKiAoZXF1YWxpdHkgb25jZSB0aGUgcGFkZGluZyBpcyBzdHJpcHBlZCkuICBIb3dldmVyLCB0aGVyZQorCQkgKiBhcmUgYSBmZXcgbW9yZSBob29wcyB0aGF0IG5lZWQgdG8gYmUganVtcGVkIHNvIHRoYXQKKwkJICogaWRlbnRpY2FsIHBhaXJzIG9mIGluaXRpYWxpemF0aW9uIGFuZCByZXNldCBzdHJpbmdzCisJCSAqIGRvbid0IGp1c3QgcmVmZXIgdG8gZWFjaCBvdGhlci4KKwkJICovCisJCWlmIChJU1JTKG5hbWUpIHx8IElTUlMoc3RybmFtZXNbaV0pKQorCQkgICAgaWYgKGNhcCA8IGNwKQorCQkJY29udGludWU7CisjdW5kZWYgSVNSUworCisJCWV4cGFuc2lvbiA9IHN0cm5hbWVzW2ldOworCQlicmVhazsKKwkgICAgfQorCX0KKworCS8qIG5vdyBjaGVjayB0aGUgc3RhbmRhcmQgY2FwYWJpbGl0aWVzICovCisJaWYgKCFleHBhbnNpb24pIHsKKwkgICAgY3NpID0gc2tpcF9jc2koc3ApOworCSAgICBmb3IgKGFwID0gc3RkX2NhcHM7IGFwLT5mcm9tOyBhcCsrKSB7CisJCXNpemVfdCBhZGogPSAoc2l6ZV90KSAoY3NpID8gMiA6IDApOworCisJCWxlbiA9IHN0cmxlbihhcC0+ZnJvbSk7CisJCWlmIChjc2kgJiYgc2tpcF9jc2koYXAtPmZyb20pICE9IGNzaSkKKwkJICAgIGNvbnRpbnVlOworCQlpZiAobGVuID4gYWRqCisJCSAgICAmJiBzdHJuY21wKGFwLT5mcm9tICsgYWRqLCBzcCArIGNzaSwgbGVuIC0gYWRqKSA9PSAwKSB7CisJCSAgICBleHBhbnNpb24gPSBhcC0+dG87CisJCSAgICBsZW4gLT0gYWRqOworCQkgICAgbGVuICs9IChzaXplX3QpIGNzaTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisKKwkvKiBub3cgY2hlY2sgZm9yIHN0YW5kYXJkLW1vZGUgc2VxdWVuY2VzICovCisJaWYgKCFleHBhbnNpb24KKwkgICAgJiYgKGNzaSA9IHNraXBfY3NpKHNwKSkgIT0gMAorCSAgICAmJiAobGVuID0gc3Ryc3BuKHNwICsgY3NpLCAiMDEyMzQ1Njc4OTsiKSkKKwkgICAgJiYgKGxlbiA8IHNpemVvZihidWYzKSkKKwkgICAgJiYgKG5leHQgPSAoc2l6ZV90KSBjc2kgKyBsZW4pCisJICAgICYmICgoc3BbbmV4dF0gPT0gJ2gnKSB8fCAoc3BbbmV4dF0gPT0gJ2wnKSkpIHsKKworCSAgICAodm9pZCkgc3RyY3B5KGJ1ZjIsIChzcFtuZXh0XSA9PSAnaCcpID8gIkVDTUErIiA6ICJFQ01BLSIpOworCSAgICAodm9pZCkgc3RybmNweShidWYzLCBzcCArIGNzaSwgbGVuKTsKKwkgICAgYnVmM1tsZW5dID0gJ1wwJzsKKwkgICAgbGVuICs9IChzaXplX3QpIGNzaSArIDE7CisKKwkgICAgZXhwYW5zaW9uID0gbG9va3VwX3BhcmFtcyhzdGRfbW9kZXMsIGJ1ZjIsIGJ1ZjMpOworCX0KKworCS8qIG5vdyBjaGVjayBmb3IgcHJpdmF0ZS1tb2RlIHNlcXVlbmNlcyAqLworCWlmICghZXhwYW5zaW9uCisJICAgICYmIChjc2kgPSBza2lwX2NzaShzcCkpICE9IDAKKwkgICAgJiYgc3BbY3NpXSA9PSAnPycKKwkgICAgJiYgKGxlbiA9IHN0cnNwbihzcCArIGNzaSArIDEsICIwMTIzNDU2Nzg5OyIpKQorCSAgICAmJiAobGVuIDwgc2l6ZW9mKGJ1ZjMpKQorCSAgICAmJiAobmV4dCA9IChzaXplX3QpIGNzaSArIDEgKyBsZW4pCisJICAgICYmICgoc3BbbmV4dF0gPT0gJ2gnKSB8fCAoc3BbbmV4dF0gPT0gJ2wnKSkpIHsKKworCSAgICAodm9pZCkgc3RyY3B5KGJ1ZjIsIChzcFtuZXh0XSA9PSAnaCcpID8gIkRFQysiIDogIkRFQy0iKTsKKwkgICAgKHZvaWQpIHN0cm5jcHkoYnVmMywgc3AgKyBjc2kgKyAxLCBsZW4pOworCSAgICBidWYzW2xlbl0gPSAnXDAnOworCSAgICBsZW4gKz0gKHNpemVfdCkgY3NpICsgMjsKKworCSAgICBleHBhbnNpb24gPSBsb29rdXBfcGFyYW1zKHByaXZhdGVfbW9kZXMsIGJ1ZjIsIGJ1ZjMpOworCX0KKworCS8qIG5vdyBjaGVjayBmb3IgRUNNQSBoaWdobGlnaHQgc2VxdWVuY2VzICovCisJaWYgKCFleHBhbnNpb24KKwkgICAgJiYgKGNzaSA9IHNraXBfY3NpKHNwKSkgIT0gMAorCSAgICAmJiAobGVuID0gc3Ryc3BuKHNwICsgY3NpLCAiMDEyMzQ1Njc4OTsiKSkgIT0gMAorCSAgICAmJiAobGVuIDwgc2l6ZW9mKGJ1ZjMpKQorCSAgICAmJiAobmV4dCA9IChzaXplX3QpIGNzaSArIGxlbikKKwkgICAgJiYgc3BbbmV4dF0gPT0gJ20nKSB7CisKKwkgICAgKHZvaWQpIHN0cmNweShidWYyLCAiU0dSOiIpOworCSAgICAodm9pZCkgc3RybmNweShidWYzLCBzcCArIGNzaSwgbGVuKTsKKwkgICAgYnVmM1tsZW5dID0gJ1wwJzsKKwkgICAgbGVuICs9IChzaXplX3QpIGNzaSArIDE7CisKKwkgICAgZXhwYW5zaW9uID0gbG9va3VwX3BhcmFtcyhlY21hX2hpZ2hsaWdodHMsIGJ1ZjIsIGJ1ZjMpOworCX0KKworCWlmICghZXhwYW5zaW9uCisJICAgICYmIChjc2kgPSBza2lwX2NzaShzcCkpICE9IDAKKwkgICAgJiYgc3BbY3NpXSA9PSAnbScpIHsKKwkgICAgbGVuID0gKHNpemVfdCkgY3NpICsgMTsKKwkgICAgKHZvaWQpIHN0cmNweShidWYyLCAiU0dSOiIpOworCSAgICBzdHJjYXQoYnVmMiwgZWNtYV9oaWdobGlnaHRzWzBdLnRvKTsKKwkgICAgZXhwYW5zaW9uID0gYnVmMjsKKwl9CisKKwkvKiBub3cgY2hlY2sgZm9yIHNjcm9sbCByZWdpb24gcmVzZXQgKi8KKwlpZiAoIWV4cGFuc2lvbgorCSAgICAmJiAoY3NpID0gc2tpcF9jc2koc3ApKSAhPSAwKSB7CisJICAgIGlmIChzcFtjc2ldID09ICdyJykgeworCQlleHBhbnNpb24gPSAiUlNSIjsKKwkJbGVuID0gMTsKKwkgICAgfSBlbHNlIHsKKwkJKHZvaWQpIHNwcmludGYoYnVmMiwgIjE7JWRyIiwgdHBfbGluZXMpOworCQlsZW4gPSBzdHJsZW4oYnVmMik7CisJCWlmIChzdHJuY21wKGJ1ZjIsIHNwICsgY3NpLCBsZW4pID09IDApCisJCSAgICBleHBhbnNpb24gPSAiUlNSIjsKKwkgICAgfQorCSAgICBsZW4gKz0gKHNpemVfdCkgY3NpOworCX0KKworCS8qIG5vdyBjaGVjayBmb3IgaG9tZS1kb3duICovCisJaWYgKCFleHBhbnNpb24KKwkgICAgJiYgKGNzaSA9IHNraXBfY3NpKHNwKSkgIT0gMCkgeworCSAgICAodm9pZCkgc3ByaW50ZihidWYyLCAiJWQ7MUgiLCB0cF9saW5lcyk7CisJICAgIGxlbiA9IHN0cmxlbihidWYyKTsKKwkgICAgaWYgKHN0cm5jbXAoYnVmMiwgc3AgKyBjc2ksIGxlbikgPT0gMCkgeworCQlleHBhbnNpb24gPSAiTEwiOworCSAgICB9IGVsc2UgeworCQkodm9pZCkgc3ByaW50ZihidWYyLCAiJWRIIiwgdHBfbGluZXMpOworCQlsZW4gPSBzdHJsZW4oYnVmMik7CisJCWlmIChzdHJuY21wKGJ1ZjIsIHNwICsgY3NpLCBsZW4pID09IDApIHsKKwkJICAgIGV4cGFuc2lvbiA9ICJMTCI7CisJCX0KKwkgICAgfQorCSAgICBsZW4gKz0gKHNpemVfdCkgY3NpOworCX0KKworCS8qIG5vdyBsb29rIGF0IHRoZSBleHBhbnNpb24gd2UgZ290LCBpZiBhbnkgKi8KKwlpZiAoZXhwYW5zaW9uKSB7CisJICAgIHByaW50ZigieyVzfSIsIGV4cGFuc2lvbik7CisJICAgIHNwICs9IGxlbiAtIDE7CisJfSBlbHNlIHsKKwkgICAgLyogY291bGRuJ3QgbWF0Y2ggYW55dGhpbmcgKi8KKwkgICAgYnVmMlswXSA9ICpzcDsKKwkgICAgYnVmMlsxXSA9ICdcMCc7CisJICAgIGZwdXRzKFRJQ19FWFBBTkQoYnVmMiksIHN0ZG91dCk7CisJfQorICAgIH0KKyAgICBwdXRjaGFyKCdcbicpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZSBjb21wYXJpc29uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2ZpbGVfY29tcGFyaXNvbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworI2RlZmluZSBNQVhDT01QQVJFCTIKKyAgICAvKiBzb21lZGF5IHdlIG1heSBhbGxvdyBjb21wYXJpc29ucyBvbiBtb3JlIGZpbGVzICovCisgICAgaW50IGZpbGVjb3VudCA9IDA7CisgICAgRU5UUlkgKmhlYWRzW01BWENPTVBBUkVdOworICAgIEVOVFJZICpxcCwgKnJwOworICAgIGludCBpLCBuOworCisgICAgbWVtc2V0KGhlYWRzLCAwLCBzaXplb2YoaGVhZHMpKTsKKyAgICBkdW1wX2luaXQoKGNoYXIgKikgMCwgRl9MSVRFUkFMLCBTX1RFUk1JTkZPLCAwLCBpdHJhY2UsIEZBTFNFKTsKKworICAgIGZvciAobiA9IDA7IG4gPCBhcmdjICYmIG4gPCBNQVhDT01QQVJFOyBuKyspIHsKKwlpZiAoZnJlb3Blbihhcmd2W25dLCAiciIsIHN0ZGluKSA9PSAwKQorCSAgICBfbmNfZXJyX2Fib3J0KCJDYW4ndCBvcGVuICVzIiwgYXJndltuXSk7CisKKwlfbmNfaGVhZCA9IF9uY190YWlsID0gMDsKKworCS8qIHBhcnNlIGVudHJpZXMgb3V0IG9mIHRoZSBzb3VyY2UgZmlsZSAqLworCV9uY19zZXRfc291cmNlKGFyZ3Zbbl0pOworCV9uY19yZWFkX2VudHJ5X3NvdXJjZShzdGRpbiwgTlVMTCwgVFJVRSwgbGl0ZXJhbCwgTlVMTEhPT0spOworCisJaWYgKGl0cmFjZSkKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiUmVzb2x2aW5nIGZpbGUgJWQuLi5cbiIsIG4gLSAwKTsKKworCS8qIG1heWJlIGRvIHVzZSByZXNvbHV0aW9uICovCisJaWYgKCFfbmNfcmVzb2x2ZV91c2VzMighbGltaXRlZCwgbGl0ZXJhbCkpIHsKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgIlRoZXJlIGFyZSB1bnJlc29sdmVkIHVzZSBlbnRyaWVzIGluICVzOlxuIiwKKwkJCSAgIGFyZ3Zbbl0pOworCSAgICBmb3JfZW50cnlfbGlzdChxcCkgeworCQlpZiAocXAtPm51c2VzKSB7CisJCSAgICAodm9pZCkgZnB1dHMocXAtPnR0ZXJtLnRlcm1fbmFtZXMsIHN0ZGVycik7CisJCSAgICAodm9pZCkgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJfQorCSAgICB9CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJfQorCisJaGVhZHNbZmlsZWNvdW50XSA9IF9uY19oZWFkOworCWZpbGVjb3VudCsrOworICAgIH0KKworICAgIC8qIE9LLCBhbGwgZW50cmllcyBhcmUgaW4gY29yZS4gIFJlYWR5IHRvIGRvIHRoZSBjb21wYXJpc29uICovCisgICAgaWYgKGl0cmFjZSkKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsICJFbnRyaWVzIGFyZSBub3cgaW4gY29yZS4uLlxuIik7CisKKyAgICAvKiBUaGUgZW50cnktbWF0Y2hpbmcgbG9vcC4gU2lnaCwgdGhpcyBpcyBpbnRyaW5zaWNhbGx5IHF1YWRyYXRpYy4gKi8KKyAgICBmb3IgKHFwID0gaGVhZHNbMF07IHFwOyBxcCA9IHFwLT5uZXh0KSB7CisJZm9yIChycCA9IGhlYWRzWzFdOyBycDsgcnAgPSBycC0+bmV4dCkKKwkgICAgaWYgKF9uY19lbnRyeV9tYXRjaChxcC0+dHRlcm0udGVybV9uYW1lcywgcnAtPnR0ZXJtLnRlcm1fbmFtZXMpKSB7CisJCWlmIChxcC0+bmNyb3NzbGlua3MgPCBNQVhfQ1JPU1NMSU5LUykKKwkJICAgIHFwLT5jcm9zc2xpbmtzW3FwLT5uY3Jvc3NsaW5rc10gPSBycDsKKwkJcXAtPm5jcm9zc2xpbmtzKys7CisKKwkJaWYgKHJwLT5uY3Jvc3NsaW5rcyA8IE1BWF9DUk9TU0xJTktTKQorCQkgICAgcnAtPmNyb3NzbGlua3NbcnAtPm5jcm9zc2xpbmtzXSA9IHFwOworCQlycC0+bmNyb3NzbGlua3MrKzsKKwkgICAgfQorICAgIH0KKworICAgIC8qIG5vdyB3ZSBoYXZlIHR3byBjaXJjdWxhciBsaXN0cyB3aXRoIGNyb3NzbGlua3MgKi8KKyAgICBpZiAoaXRyYWNlKQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIk5hbWUgbWF0Y2hlcyBhcmUgZG9uZS4uLlxuIik7CisKKyAgICBmb3IgKHFwID0gaGVhZHNbMF07IHFwOyBxcCA9IHFwLT5uZXh0KSB7CisJaWYgKHFwLT5uY3Jvc3NsaW5rcyA+IDEpIHsKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgIiVzIGluIGZpbGUgMSAoJXMpIGhhcyAlZCBtYXRjaGVzIGluIGZpbGUgMiAoJXMpOlxuIiwKKwkJCSAgIF9uY19maXJzdF9uYW1lKHFwLT50dGVybS50ZXJtX25hbWVzKSwKKwkJCSAgIGFyZ3ZbMF0sCisJCQkgICBxcC0+bmNyb3NzbGlua3MsCisJCQkgICBhcmd2WzFdKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IHFwLT5uY3Jvc3NsaW5rczsgaSsrKQorCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkgICAgICAgIlx0JXNcbiIsCisJCQkgICAgICAgX25jX2ZpcnN0X25hbWUoKHFwLT5jcm9zc2xpbmtzW2ldKS0+dHRlcm0udGVybV9uYW1lcykpOworCX0KKyAgICB9CisKKyAgICBmb3IgKHJwID0gaGVhZHNbMV07IHJwOyBycCA9IHJwLT5uZXh0KSB7CisJaWYgKHJwLT5uY3Jvc3NsaW5rcyA+IDEpIHsKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgIiVzIGluIGZpbGUgMiAoJXMpIGhhcyAlZCBtYXRjaGVzIGluIGZpbGUgMSAoJXMpOlxuIiwKKwkJCSAgIF9uY19maXJzdF9uYW1lKHJwLT50dGVybS50ZXJtX25hbWVzKSwKKwkJCSAgIGFyZ3ZbMV0sCisJCQkgICBycC0+bmNyb3NzbGlua3MsCisJCQkgICBhcmd2WzBdKTsKKwkgICAgZm9yIChpID0gMDsgaSA8IHJwLT5uY3Jvc3NsaW5rczsgaSsrKQorCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkgICAgICAgIlx0JXNcbiIsCisJCQkgICAgICAgX25jX2ZpcnN0X25hbWUoKHJwLT5jcm9zc2xpbmtzW2ldKS0+dHRlcm0udGVybV9uYW1lcykpOworCX0KKyAgICB9CisKKyAgICAodm9pZCkgcHJpbnRmKCJJbiBmaWxlIDEgKCVzKSBvbmx5OlxuIiwgYXJndlswXSk7CisgICAgZm9yIChxcCA9IGhlYWRzWzBdOyBxcDsgcXAgPSBxcC0+bmV4dCkKKwlpZiAocXAtPm5jcm9zc2xpbmtzID09IDApCisJICAgICh2b2lkKSBwcmludGYoIlx0JXNcbiIsCisJCQkgIF9uY19maXJzdF9uYW1lKHFwLT50dGVybS50ZXJtX25hbWVzKSk7CisKKyAgICAodm9pZCkgcHJpbnRmKCJJbiBmaWxlIDIgKCVzKSBvbmx5OlxuIiwgYXJndlsxXSk7CisgICAgZm9yIChycCA9IGhlYWRzWzFdOyBycDsgcnAgPSBycC0+bmV4dCkKKwlpZiAocnAtPm5jcm9zc2xpbmtzID09IDApCisJICAgICh2b2lkKSBwcmludGYoIlx0JXNcbiIsCisJCQkgIF9uY19maXJzdF9uYW1lKHJwLT50dGVybS50ZXJtX25hbWVzKSk7CisKKyAgICAodm9pZCkgcHJpbnRmKCJUaGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIGVxdWl2YWxlbnQ6XG4iKTsKKyAgICBmb3IgKHFwID0gaGVhZHNbMF07IHFwOyBxcCA9IHFwLT5uZXh0KSB7CisJcnAgPSBxcC0+Y3Jvc3NsaW5rc1swXTsKKworCWlmIChxcC0+bmNyb3NzbGlua3MgPT0gMSkgeworCSAgICBycCA9IHFwLT5jcm9zc2xpbmtzWzBdOworCisJICAgIHJlcGFpcl9hY3NjKCZxcC0+dHRlcm0pOworCSAgICByZXBhaXJfYWNzYygmcnAtPnR0ZXJtKTsKKyNpZiBOQ1VSU0VTX1hOQU1FUworCSAgICBfbmNfYWxpZ25fdGVybXR5cGUoJnFwLT50dGVybSwgJnJwLT50dGVybSk7CisjZW5kaWYKKwkgICAgaWYgKGVudHJ5ZXEoJnFwLT50dGVybSwgJnJwLT50dGVybSkgJiYgdXNlZXEocXAsIHJwKSkgeworCQljaGFyIG5hbWUxW05BTUVTSVpFXSwgbmFtZTJbTkFNRVNJWkVdOworCisJCSh2b2lkKSBjYW5vbmljYWxfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcywgbmFtZTEpOworCQkodm9pZCkgY2Fub25pY2FsX25hbWUocnAtPnR0ZXJtLnRlcm1fbmFtZXMsIG5hbWUyKTsKKworCQkodm9pZCkgcHJpbnRmKCIlcyA9ICVzXG4iLCBuYW1lMSwgbmFtZTIpOworCSAgICB9CisJfQorICAgIH0KKworICAgICh2b2lkKSBwcmludGYoIkRpZmZlcmluZyBlbnRyaWVzOlxuIik7CisgICAgdGVybWNvdW50ID0gMjsKKyAgICBmb3IgKHFwID0gaGVhZHNbMF07IHFwOyBxcCA9IHFwLT5uZXh0KSB7CisKKwlpZiAocXAtPm5jcm9zc2xpbmtzID09IDEpIHsKKwkgICAgcnAgPSBxcC0+Y3Jvc3NsaW5rc1swXTsKKyNpZiBOQ1VSU0VTX1hOQU1FUworCSAgICAvKiBzb3JyeSAtIHdlIGhhdmUgdG8gZG8gdGhpcyBvbiBlYWNoIHBhc3MgKi8KKwkgICAgX25jX2FsaWduX3Rlcm10eXBlKCZxcC0+dHRlcm0sICZycC0+dHRlcm0pOworI2VuZGlmCisJICAgIGlmICghKGVudHJ5ZXEoJnFwLT50dGVybSwgJnJwLT50dGVybSkgJiYgdXNlZXEocXAsIHJwKSkpIHsKKwkJY2hhciBuYW1lMVtOQU1FU0laRV0sIG5hbWUyW05BTUVTSVpFXTsKKworCQllbnRyaWVzWzBdID0gKnFwOworCQllbnRyaWVzWzFdID0gKnJwOworCisJCSh2b2lkKSBjYW5vbmljYWxfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcywgbmFtZTEpOworCQkodm9pZCkgY2Fub25pY2FsX25hbWUocnAtPnR0ZXJtLnRlcm1fbmFtZXMsIG5hbWUyKTsKKworCQlzd2l0Y2ggKGNvbXBhcmUpIHsKKwkJY2FzZSBDX0RJRkZFUkVOQ0U6CisJCSAgICBpZiAoaXRyYWNlKQorCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICAgICAiJXM6IGR1bXBpbmcgZGlmZmVyZW5jZXNcbiIsCisJCQkJICAgICAgIF9uY19wcm9nbmFtZSk7CisJCSAgICAodm9pZCkgcHJpbnRmKCJjb21wYXJpbmcgJXMgdG8gJXMuXG4iLCBuYW1lMSwgbmFtZTIpOworCQkgICAgY29tcGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVudHJpZXMtPnR0ZXJtLCBxdWlldCk7CisJCSAgICBicmVhazsKKworCQljYXNlIENfQ09NTU9OOgorCQkgICAgaWYgKGl0cmFjZSkKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAgICAgIiVzOiBkdW1waW5nIGNvbW1vbiBjYXBhYmlsaXRpZXNcbiIsCisJCQkJICAgICAgIF9uY19wcm9nbmFtZSk7CisJCSAgICAodm9pZCkgcHJpbnRmKCJjb21wYXJpbmcgJXMgdG8gJXMuXG4iLCBuYW1lMSwgbmFtZTIpOworCQkgICAgY29tcGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVudHJpZXMtPnR0ZXJtLCBxdWlldCk7CisJCSAgICBicmVhazsKKworCQljYXNlIENfTkFORDoKKwkJICAgIGlmIChpdHJhY2UpCisJCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgICAgICIlczogZHVtcGluZyBkaWZmZXJlbmNlc1xuIiwKKwkJCQkgICAgICAgX25jX3Byb2duYW1lKTsKKwkJICAgICh2b2lkKSBwcmludGYoImNvbXBhcmluZyAlcyB0byAlcy5cbiIsIG5hbWUxLCBuYW1lMik7CisJCSAgICBjb21wYXJlX2VudHJ5KGNvbXBhcmVfcHJlZGljYXRlLCAmZW50cmllcy0+dHRlcm0sIHF1aWV0KTsKKwkJICAgIGJyZWFrOworCisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICp0YmxbXSA9CisgICAgeworCSJVc2FnZTogaW5mb2NtcCBbb3B0aW9uc10gWy1BIGRpcmVjdG9yeV0gWy1CIGRpcmVjdG9yeV0gW3Rlcm1uYW1lLi4uXSIKKwksIiIKKwksIk9wdGlvbnM6IgorCSwiICAtMSAgICBwcmludCBzaW5nbGUtY29sdW1uIgorCSwiICAtQyAgICB1c2UgdGVybWNhcC1uYW1lcyIKKwksIiAgLUYgICAgY29tcGFyZSB0ZXJtaW5mby1maWxlcyIKKwksIiAgLUkgICAgdXNlIHRlcm1pbmZvLW5hbWVzIgorCSwiICAtTCAgICB1c2UgbG9uZyBuYW1lcyIKKwksIiAgLVIgc3Vic2V0IChzZWUgbWFucGFnZSkiCisJLCIgIC1UICAgIGVsaW1pbmF0ZSBzaXplIGxpbWl0cyAodGVzdCkiCisJLCIgIC1VICAgIGVsaW1pbmF0ZSBwb3N0LXByb2Nlc3Npbmcgb2YgZW50cmllcyIKKwksIiAgLVYgICAgcHJpbnQgdmVyc2lvbiIKKyNpZiBOQ1VSU0VTX1hOQU1FUworCSwiICAtYSAgICB3aXRoIC1GLCBsaXN0IGNvbW1lbnRlZC1vdXQgY2FwcyIKKyNlbmRpZgorCSwiICAtYyAgICBsaXN0IGNvbW1vbiBjYXBhYmlsaXRpZXMiCisJLCIgIC1kICAgIGxpc3QgZGlmZmVyZW50IGNhcGFiaWxpdGllcyIKKwksIiAgLWUgICAgZm9ybWF0IG91dHB1dCBmb3IgQyBpbml0aWFsaXplciIKKwksIiAgLUUgICAgZm9ybWF0IG91dHB1dCBhcyBDIHRhYmxlcyIKKwksIiAgLWYgICAgd2l0aCAtMSwgZm9ybWF0IGNvbXBsZXggc3RyaW5ncyIKKwksIiAgLUcgICAgZm9ybWF0ICV7bnVtYmVyfSB0byAlJ2NoYXInIgorCSwiICAtZyAgICBmb3JtYXQgJSdjaGFyJyB0byAle251bWJlcn0iCisJLCIgIC1pICAgIGFuYWx5emUgaW5pdGlhbGl6YXRpb24vcmVzZXQiCisJLCIgIC1sICAgIG91dHB1dCB0ZXJtaW5mbyBuYW1lcyIKKwksIiAgLW4gICAgbGlzdCBjYXBhYmlsaXRpZXMgaW4gbmVpdGhlciIKKwksIiAgLXAgICAgaWdub3JlIHBhZGRpbmcgc3BlY2lmaWVycyIKKwksIiAgLXEgICAgYnJpZWYgbGlzdGluZywgcmVtb3ZlcyBoZWFkZXJzIgorCSwiICAtciAgICB3aXRoIC1DLCBvdXRwdXQgaW4gdGVybWNhcCBmb3JtIgorCSwiICAtciAgICB3aXRoIC1GLCByZXNvbHZlIHVzZS1yZWZlcmVuY2VzIgorCSwiICAtcyBbZHxpfGx8Y10gc29ydCBmaWVsZHMiCisjaWYgTkNVUlNFU19YTkFNRVMKKwksIiAgLXQgICAgc3VwcHJlc3MgY29tbWVudGVkLW91dCBjYXBhYmlsaXRpZXMiCisjZW5kaWYKKwksIiAgLXUgICAgcHJvZHVjZSBzb3VyY2Ugd2l0aCAndXNlPSciCisJLCIgIC12IG51bWJlciAgKHZlcmJvc2UpIgorCSwiICAtdyBudW1iZXIgICh3aWR0aCkiCisjaWYgTkNVUlNFU19YTkFNRVMKKwksIiAgLXggICAgdHJlYXQgdW5rbm93biBjYXBhYmlsaXRpZXMgYXMgdXNlci1kZWZpbmVkIgorI2VuZGlmCisgICAgfTsKKyAgICBjb25zdCBzaXplX3QgZmlyc3QgPSAzOworICAgIGNvbnN0IHNpemVfdCBsYXN0ID0gU0laRU9GKHRibCk7CisgICAgY29uc3Qgc2l6ZV90IGxlZnQgPSAobGFzdCAtIGZpcnN0ICsgMSkgLyAyICsgZmlyc3Q7CisgICAgc2l6ZV90IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgbGVmdDsgbisrKSB7CisJc2l6ZV90IG0gPSAobiA8IGZpcnN0KSA/IGxhc3QgOiBuICsgbGVmdCAtIGZpcnN0OworCWlmIChtIDwgbGFzdCkKKwkgICAgZnByaW50ZihzdGRlcnIsICIlLTQwLjQwcyVzXG4iLCB0Ymxbbl0sIHRibFttXSk7CisJZWxzZQorCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0Ymxbbl0pOworICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgY2hhciAqCithbnlfaW5pdGlhbGl6ZXIoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICp0eXBlKQoreworICAgIHN0YXRpYyBjaGFyICppbml0aWFsaXplcjsKKyAgICBjaGFyICpzOworCisgICAgaWYgKGluaXRpYWxpemVyID09IDApCisJaW5pdGlhbGl6ZXIgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGVudHJpZXMtPnR0ZXJtLnRlcm1fbmFtZXMpICsKKwkJCQkgICAgICBzdHJsZW4odHlwZSkgKyBzdHJsZW4oZm10KSk7CisKKyAgICAodm9pZCkgc3RyY3B5KGluaXRpYWxpemVyLCBlbnRyaWVzLT50dGVybS50ZXJtX25hbWVzKTsKKyAgICBmb3IgKHMgPSBpbml0aWFsaXplcjsgKnMgIT0gMCAmJiAqcyAhPSAnfCc7IHMrKykgeworCWlmICghaXNhbG51bShVQ2hhcigqcykpKQorCSAgICAqcyA9ICdfJzsKKyAgICB9CisgICAgKnMgPSAwOworICAgICh2b2lkKSBzcHJpbnRmKHMsIGZtdCwgdHlwZSk7CisgICAgcmV0dXJuIGluaXRpYWxpemVyOworfQorCitzdGF0aWMgY2hhciAqCituYW1lX2luaXRpYWxpemVyKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgICAgcmV0dXJuIGFueV9pbml0aWFsaXplcigiXyVzX2RhdGEiLCB0eXBlKTsKK30KKworc3RhdGljIGNoYXIgKgorc3RyaW5nX3ZhcmlhYmxlKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgICAgcmV0dXJuIGFueV9pbml0aWFsaXplcigiX3NfJXMiLCB0eXBlKTsKK30KKworLyogZHVtcCBDIGluaXRpYWxpemVycyBmb3IgdGhlIHRlcm1pbmFsIHR5cGUgKi8KK3N0YXRpYyB2b2lkCitkdW1wX2luaXRpYWxpemVycyhURVJNVFlQRSAqdGVybSkKK3sKKyAgICB1bnNpZ25lZCBuOworICAgIGNvbnN0IGNoYXIgKnN0ciA9IDA7CisKKyAgICBwcmludGYoIlxuc3RhdGljIGNoYXIgJXNbXSA9IFwiJXNcIjtcblxuIiwKKwkgICBuYW1lX2luaXRpYWxpemVyKCJhbGlhcyIpLCBlbnRyaWVzLT50dGVybS50ZXJtX25hbWVzKTsKKworICAgIGZvcl9lYWNoX3N0cmluZyhuLCB0ZXJtKSB7CisJY2hhciBidWZbTUFYX1NUUklOR10sICpzcCwgKnRwOworCisJaWYgKFZBTElEX1NUUklORyh0ZXJtLT5TdHJpbmdzW25dKSkgeworCSAgICB0cCA9IGJ1ZjsKKwkgICAgKnRwKysgPSAnIic7CisJICAgIGZvciAoc3AgPSB0ZXJtLT5TdHJpbmdzW25dOworCQkgKnNwICE9IDAgJiYgKHRwIC0gYnVmKSA8IE1BWF9TVFJJTkcgLSA2OworCQkgc3ArKykgeworCQlpZiAoaXNhc2NpaShVQ2hhcigqc3ApKQorCQkgICAgJiYgaXNwcmludChVQ2hhcigqc3ApKQorCQkgICAgJiYgKnNwICE9ICdcXCcKKwkJICAgICYmICpzcCAhPSAnIicpCisJCSAgICAqdHArKyA9ICpzcDsKKwkJZWxzZSB7CisJCSAgICAodm9pZCkgc3ByaW50Zih0cCwgIlxcJTAzbyIsIFVDaGFyKCpzcCkpOworCQkgICAgdHAgKz0gNDsKKwkJfQorCSAgICB9CisJICAgICp0cCsrID0gJyInOworCSAgICAqdHAgPSAnXDAnOworCSAgICAodm9pZCkgcHJpbnRmKCJzdGF0aWMgY2hhciAlLTIwc1tdID0gJXM7XG4iLAorCQkJICBzdHJpbmdfdmFyaWFibGUoRXh0U3RybmFtZSh0ZXJtLCBuLCBzdHJuYW1lcykpLCBidWYpOworCX0KKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworCisgICAgKHZvaWQpIHByaW50Zigic3RhdGljIGNoYXIgJXNbXSA9ICVzXG4iLCBuYW1lX2luaXRpYWxpemVyKCJib29sIiksIExfQ1VSTCk7CisKKyAgICBmb3JfZWFjaF9ib29sZWFuKG4sIHRlcm0pIHsKKwlzd2l0Y2ggKChpbnQpICh0ZXJtLT5Cb29sZWFuc1tuXSkpIHsKKwljYXNlIFRSVUU6CisJICAgIHN0ciA9ICJUUlVFIjsKKwkgICAgYnJlYWs7CisKKwljYXNlIEZBTFNFOgorCSAgICBzdHIgPSAiRkFMU0UiOworCSAgICBicmVhazsKKworCWNhc2UgQUJTRU5UX0JPT0xFQU46CisJICAgIHN0ciA9ICJBQlNFTlRfQk9PTEVBTiI7CisJICAgIGJyZWFrOworCisJY2FzZSBDQU5DRUxMRURfQk9PTEVBTjoKKwkgICAgc3RyID0gIkNBTkNFTExFRF9CT09MRUFOIjsKKwkgICAgYnJlYWs7CisJfQorCSh2b2lkKSBwcmludGYoIlx0LyogJTN1OiAlLThzICovXHQlcyxcbiIsCisJCSAgICAgIG4sIEV4dEJvb2xuYW1lKHRlcm0sIG4sIGJvb2xuYW1lcyksIHN0cik7CisgICAgfQorICAgICh2b2lkKSBwcmludGYoIiVzO1xuIiwgUl9DVVJMKTsKKworICAgICh2b2lkKSBwcmludGYoInN0YXRpYyBzaG9ydCAlc1tdID0gJXNcbiIsIG5hbWVfaW5pdGlhbGl6ZXIoIm51bWJlciIpLCBMX0NVUkwpOworCisgICAgZm9yX2VhY2hfbnVtYmVyKG4sIHRlcm0pIHsKKwljaGFyIGJ1ZltCVUZTSVpdOworCXN3aXRjaCAodGVybS0+TnVtYmVyc1tuXSkgeworCWNhc2UgQUJTRU5UX05VTUVSSUM6CisJICAgIHN0ciA9ICJBQlNFTlRfTlVNRVJJQyI7CisJICAgIGJyZWFrOworCWNhc2UgQ0FOQ0VMTEVEX05VTUVSSUM6CisJICAgIHN0ciA9ICJDQU5DRUxMRURfTlVNRVJJQyI7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHNwcmludGYoYnVmLCAiJWQiLCB0ZXJtLT5OdW1iZXJzW25dKTsKKwkgICAgc3RyID0gYnVmOworCSAgICBicmVhazsKKwl9CisJKHZvaWQpIHByaW50ZigiXHQvKiAlM3U6ICUtOHMgKi9cdCVzLFxuIiwgbiwKKwkJICAgICAgRXh0TnVtbmFtZSh0ZXJtLCBuLCBudW1uYW1lcyksIHN0cik7CisgICAgfQorICAgICh2b2lkKSBwcmludGYoIiVzO1xuIiwgUl9DVVJMKTsKKworICAgICh2b2lkKSBwcmludGYoInN0YXRpYyBjaGFyICogJXNbXSA9ICVzXG4iLCBuYW1lX2luaXRpYWxpemVyKCJzdHJpbmciKSwgTF9DVVJMKTsKKworICAgIGZvcl9lYWNoX3N0cmluZyhuLCB0ZXJtKSB7CisKKwlpZiAodGVybS0+U3RyaW5nc1tuXSA9PSBBQlNFTlRfU1RSSU5HKQorCSAgICBzdHIgPSAiQUJTRU5UX1NUUklORyI7CisJZWxzZSBpZiAodGVybS0+U3RyaW5nc1tuXSA9PSBDQU5DRUxMRURfU1RSSU5HKQorCSAgICBzdHIgPSAiQ0FOQ0VMTEVEX1NUUklORyI7CisJZWxzZSB7CisJICAgIHN0ciA9IHN0cmluZ192YXJpYWJsZShFeHRTdHJuYW1lKHRlcm0sIG4sIHN0cm5hbWVzKSk7CisJfQorCSh2b2lkKSBwcmludGYoIlx0LyogJTN1OiAlLThzICovXHQlcyxcbiIsIG4sCisJCSAgICAgIEV4dFN0cm5hbWUodGVybSwgbiwgc3RybmFtZXMpLCBzdHIpOworICAgIH0KKyAgICAodm9pZCkgcHJpbnRmKCIlcztcbiIsIFJfQ1VSTCk7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIGlmICgoTlVNX0JPT0xFQU5TKHRlcm0pICE9IEJPT0xDT1VOVCkKKwl8fCAoTlVNX05VTUJFUlModGVybSkgIT0gTlVNQ09VTlQpCisJfHwgKE5VTV9TVFJJTkdTKHRlcm0pICE9IFNUUkNPVU5UKSkgeworCSh2b2lkKSBwcmludGYoInN0YXRpYyBjaGFyICogJXNbXSA9ICVzXG4iLAorCQkgICAgICBuYW1lX2luaXRpYWxpemVyKCJzdHJpbmdfZXh0IiksIExfQ1VSTCk7CisJZm9yIChuID0gQk9PTENPVU5UOyBuIDwgTlVNX0JPT0xFQU5TKHRlcm0pOyArK24pIHsKKwkgICAgKHZvaWQpIHByaW50ZigiXHQvKiAlM3U6IGJvb2wgKi9cdFwiJXNcIixcbiIsCisJCQkgIG4sIEV4dEJvb2xuYW1lKHRlcm0sIG4sIGJvb2xuYW1lcykpOworCX0KKwlmb3IgKG4gPSBOVU1DT1VOVDsgbiA8IE5VTV9OVU1CRVJTKHRlcm0pOyArK24pIHsKKwkgICAgKHZvaWQpIHByaW50ZigiXHQvKiAlM3U6IG51bSAqL1x0XCIlc1wiLFxuIiwKKwkJCSAgbiwgRXh0TnVtbmFtZSh0ZXJtLCBuLCBudW1uYW1lcykpOworCX0KKwlmb3IgKG4gPSBTVFJDT1VOVDsgbiA8IE5VTV9TVFJJTkdTKHRlcm0pOyArK24pIHsKKwkgICAgKHZvaWQpIHByaW50ZigiXHQvKiAlM3U6IHN0ciAqL1x0XCIlc1wiLFxuIiwKKwkJCSAgbiwgRXh0U3RybmFtZSh0ZXJtLCBuLCBzdHJuYW1lcykpOworCX0KKwkodm9pZCkgcHJpbnRmKCIlcztcbiIsIFJfQ1VSTCk7CisgICAgfQorI2VuZGlmCit9CisKKy8qIGR1bXAgQyBpbml0aWFsaXplcnMgZm9yIHRoZSB0ZXJtaW5hbCB0eXBlICovCitzdGF0aWMgdm9pZAorZHVtcF90ZXJtdHlwZShURVJNVFlQRSAqdGVybSkKK3sKKyAgICAodm9pZCkgcHJpbnRmKCJcdCVzXG5cdFx0JXMsXG4iLCBMX0NVUkwsIG5hbWVfaW5pdGlhbGl6ZXIoImFsaWFzIikpOworICAgICh2b2lkKSBwcmludGYoIlx0XHQoY2hhciAqKTAsXHQvKiBwb2ludGVyIHRvIHN0cmluZyB0YWJsZSAqL1xuIik7CisKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0JXMsXG4iLCBuYW1lX2luaXRpYWxpemVyKCJib29sIikpOworICAgICh2b2lkKSBwcmludGYoIlx0XHQlcyxcbiIsIG5hbWVfaW5pdGlhbGl6ZXIoIm51bWJlciIpKTsKKworICAgICh2b2lkKSBwcmludGYoIlx0XHQlcyxcbiIsIG5hbWVfaW5pdGlhbGl6ZXIoInN0cmluZyIpKTsKKworI2lmIE5DVVJTRVNfWE5BTUVTCisgICAgKHZvaWQpIHByaW50ZigiI2lmIE5DVVJTRVNfWE5BTUVTXG4iKTsKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0KGNoYXIgKikwLFx0LyogcG9pbnRlciB0byBleHRlbmRlZCBzdHJpbmcgdGFibGUgKi9cbiIpOworICAgICh2b2lkKSBwcmludGYoIlx0XHQlcyxcdC8qIC4uLmNvcnJlc3BvbmRpbmcgbmFtZXMgKi9cbiIsCisJCSAgKChOVU1fQk9PTEVBTlModGVybSkgIT0gQk9PTENPVU5UKQorCQkgICB8fCAoTlVNX05VTUJFUlModGVybSkgIT0gTlVNQ09VTlQpCisJCSAgIHx8IChOVU1fU1RSSU5HUyh0ZXJtKSAhPSBTVFJDT1VOVCkpCisJCSAgPyBuYW1lX2luaXRpYWxpemVyKCJzdHJpbmdfZXh0IikKKwkJICA6ICIoY2hhciAqKikwIik7CisKKyAgICAodm9pZCkgcHJpbnRmKCJcdFx0JWQsXHRcdC8qIGNvdW50IHRvdGFsIEJvb2xlYW5zICovXG4iLCBOVU1fQk9PTEVBTlModGVybSkpOworICAgICh2b2lkKSBwcmludGYoIlx0XHQlZCxcdFx0LyogY291bnQgdG90YWwgTnVtYmVycyAqL1xuIiwgTlVNX05VTUJFUlModGVybSkpOworICAgICh2b2lkKSBwcmludGYoIlx0XHQlZCxcdFx0LyogY291bnQgdG90YWwgU3RyaW5ncyAqL1xuIiwgTlVNX1NUUklOR1ModGVybSkpOworCisgICAgKHZvaWQpIHByaW50ZigiXHRcdCVkLFx0XHQvKiBjb3VudCBleHRlbnNpb25zIHRvIEJvb2xlYW5zICovXG4iLAorCQkgIE5VTV9CT09MRUFOUyh0ZXJtKSAtIEJPT0xDT1VOVCk7CisgICAgKHZvaWQpIHByaW50ZigiXHRcdCVkLFx0XHQvKiBjb3VudCBleHRlbnNpb25zIHRvIE51bWJlcnMgKi9cbiIsCisJCSAgTlVNX05VTUJFUlModGVybSkgLSBOVU1DT1VOVCk7CisgICAgKHZvaWQpIHByaW50ZigiXHRcdCVkLFx0XHQvKiBjb3VudCBleHRlbnNpb25zIHRvIFN0cmluZ3MgKi9cbiIsCisJCSAgTlVNX1NUUklOR1ModGVybSkgLSBTVFJDT1VOVCk7CisKKyAgICAodm9pZCkgcHJpbnRmKCIjZW5kaWYgLyogTkNVUlNFU19YTkFNRVMgKi9cbiIpOworI2Vsc2UKKyAgICAodm9pZCkgdGVybTsKKyNlbmRpZiAvKiBOQ1VSU0VTX1hOQU1FUyAqLworICAgICh2b2lkKSBwcmludGYoIlx0JXNcbiIsIFJfQ1VSTCk7Cit9CisKK3N0YXRpYyBpbnQKK29wdGFyZ190b19udW1iZXIodm9pZCkKK3sKKyAgICBjaGFyICp0ZW1wID0gMDsKKyAgICBsb25nIHZhbHVlID0gc3RydG9sKG9wdGFyZywgJnRlbXAsIDApOworCisgICAgaWYgKHRlbXAgPT0gMCB8fCB0ZW1wID09IG9wdGFyZyB8fCAqdGVtcCAhPSAwKSB7CisJZnByaW50ZihzdGRlcnIsICJFeHBlY3RlZCBhIG51bWJlciwgbm90IFwiJXNcIlxuIiwgb3B0YXJnKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICByZXR1cm4gKGludCkgdmFsdWU7Cit9CisKK3N0YXRpYyBjaGFyICoKK3Rlcm1pbmFsX2Vudih2b2lkKQoreworICAgIGNoYXIgKnRlcm1pbmFsOworCisgICAgaWYgKCh0ZXJtaW5hbCA9IGdldGVudigiVEVSTSIpKSA9PSAwKSB7CisJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkgICAgICAgIiVzOiBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNIG5vdCBzZXRcbiIsCisJCSAgICAgICBfbmNfcHJvZ25hbWUpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgcmV0dXJuIHRlcm1pbmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWFpbiBzZXF1ZW5jZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIC8qIEF2b2lkICJsb2NhbCBkYXRhID4zMmsiIGVycm9yIHdpdGggbXdjYyAqLworICAgIC8qIEFsc28gYXZvaWQgb3ZlcmZsb3dpbmcgc21hbGxlciBzdGFja3Mgb24gc3lzdGVtcyBsaWtlIEFtaWdhT1MgKi8KKyAgICBwYXRoICp0ZmlsZSA9IDA7CisgICAgY2hhciAqKnRuYW1lID0gMDsKKyAgICBpbnQgbWF4dGVybXM7CisKKyAgICBjaGFyICoqbXlhcmd2OworCisgICAgY2hhciAqZmlyc3RkaXIsICpyZXN0ZGlyOworICAgIGludCBjLCBpLCBsZW47CisgICAgYm9vbCBmb3JtYXR0ZWQgPSBGQUxTRTsKKyAgICBib29sIGZpbGVjb21wYXJlID0gRkFMU0U7CisgICAgaW50IGluaXRkdW1wID0gMDsKKyAgICBib29sIGluaXRfYW5hbHl6ZSA9IEZBTFNFOworICAgIGJvb2wgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUgPSBGQUxTRTsKKworICAgIC8qIHdoZXJlIGlzIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBsb2NhdGlvbiBnb2luZyB0byBkZWZhdWx0IHRvPyAqLworICAgIHJlc3RkaXIgPSBmaXJzdGRpciA9IDA7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIHVzZV9leHRlbmRlZF9uYW1lcyhGQUxTRSk7CisjZW5kaWYKKworICAgIF9uY19wcm9nbmFtZSA9IF9uY19yb290bmFtZShhcmd2WzBdKTsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSB0byBhZGQgdHdvIHRlcm1pbmFsIGVudHJpZXMgKi8KKyAgICBteWFyZ3YgPSB0eXBlQ2FsbG9jKGNoYXIgKiwgKHNpemVfdCkgKGFyZ2MgKyAzKSk7CisgICAgbWVtY3B5KG15YXJndiwgYXJndiwgKHNpemVvZihjaGFyICopICogKHNpemVfdCkgYXJnYykpOworICAgIGFyZ3YgPSBteWFyZ3Y7CisKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywKKwkJICAgICAgIGFyZ3YsCisJCSAgICAgICAiMUE6YUI6Q2NkRWVGZkdnSWlMbG5wcVI6cnM6VHRVdVZ2Onc6eCIpKSAhPSAtMSkgeworCXN3aXRjaCAoYykgeworCWNhc2UgJzEnOgorCSAgICBtd2lkdGggPSAwOworCSAgICBicmVhazsKKworCWNhc2UgJ0EnOgorCSAgICBmaXJzdGRpciA9IG9wdGFyZzsKKwkgICAgYnJlYWs7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworCWNhc2UgJ2EnOgorCSAgICBfbmNfZGlzYWJsZV9wZXJpb2QgPSBUUlVFOworCSAgICB1c2VfZXh0ZW5kZWRfbmFtZXMoVFJVRSk7CisJICAgIGJyZWFrOworI2VuZGlmCisJY2FzZSAnQic6CisJICAgIHJlc3RkaXIgPSBvcHRhcmc7CisJICAgIGJyZWFrOworCisJY2FzZSAnQyc6CisJICAgIG91dGZvcm0gPSBGX1RFUk1DQVA7CisJICAgIHR2ZXJzaW9uID0gIkJTRCI7CisJICAgIGlmIChzb3J0bW9kZSA9PSBTX0RFRkFVTFQpCisJCXNvcnRtb2RlID0gU19URVJNQ0FQOworCSAgICBicmVhazsKKworCWNhc2UgJ2MnOgorCSAgICBjb21wYXJlID0gQ19DT01NT047CisJICAgIGJyZWFrOworCisJY2FzZSAnZCc6CisJICAgIGNvbXBhcmUgPSBDX0RJRkZFUkVOQ0U7CisJICAgIGJyZWFrOworCisJY2FzZSAnRSc6CisJICAgIGluaXRkdW1wIHw9IDI7CisJICAgIGJyZWFrOworCisJY2FzZSAnZSc6CisJICAgIGluaXRkdW1wIHw9IDE7CisJICAgIGJyZWFrOworCisJY2FzZSAnRic6CisJICAgIGZpbGVjb21wYXJlID0gVFJVRTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdmJzoKKwkgICAgZm9ybWF0dGVkID0gVFJVRTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdHJzoKKwkgICAgbnVtYmVycyA9IDE7CisJICAgIGJyZWFrOworCisJY2FzZSAnZyc6CisJICAgIG51bWJlcnMgPSAtMTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdJJzoKKwkgICAgb3V0Zm9ybSA9IEZfVEVSTUlORk87CisJICAgIGlmIChzb3J0bW9kZSA9PSBTX0RFRkFVTFQpCisJCXNvcnRtb2RlID0gU19WQVJJQUJMRTsKKwkgICAgdHZlcnNpb24gPSAwOworCSAgICBicmVhazsKKworCWNhc2UgJ2knOgorCSAgICBpbml0X2FuYWx5emUgPSBUUlVFOworCSAgICBicmVhazsKKworCWNhc2UgJ0wnOgorCSAgICBvdXRmb3JtID0gRl9WQVJJQUJMRTsKKwkgICAgaWYgKHNvcnRtb2RlID09IFNfREVGQVVMVCkKKwkJc29ydG1vZGUgPSBTX1ZBUklBQkxFOworCSAgICBicmVhazsKKworCWNhc2UgJ2wnOgorCSAgICBvdXRmb3JtID0gRl9URVJNSU5GTzsKKwkgICAgYnJlYWs7CisKKwljYXNlICduJzoKKwkgICAgY29tcGFyZSA9IENfTkFORDsKKwkgICAgYnJlYWs7CisKKwljYXNlICdwJzoKKwkgICAgaWdub3JlcGFkcyA9IFRSVUU7CisJICAgIGJyZWFrOworCisJY2FzZSAncSc6CisJICAgIHF1aWV0ID0gVFJVRTsKKwkgICAgc19hYnNlbnQgPSAiLSI7CisJICAgIHNfY2FuY2VsID0gIkAiOworCSAgICBib29sX3NlcCA9ICIsICI7CisJICAgIGJyZWFrOworCisJY2FzZSAnUic6CisJICAgIHR2ZXJzaW9uID0gb3B0YXJnOworCSAgICBicmVhazsKKworCWNhc2UgJ3InOgorCSAgICB0dmVyc2lvbiA9IDA7CisJICAgIGJyZWFrOworCisJY2FzZSAncyc6CisJICAgIGlmICgqb3B0YXJnID09ICdkJykKKwkJc29ydG1vZGUgPSBTX05PU09SVDsKKwkgICAgZWxzZSBpZiAoKm9wdGFyZyA9PSAnaScpCisJCXNvcnRtb2RlID0gU19URVJNSU5GTzsKKwkgICAgZWxzZSBpZiAoKm9wdGFyZyA9PSAnbCcpCisJCXNvcnRtb2RlID0gU19WQVJJQUJMRTsKKwkgICAgZWxzZSBpZiAoKm9wdGFyZyA9PSAnYycpCisJCXNvcnRtb2RlID0gU19URVJNQ0FQOworCSAgICBlbHNlIHsKKwkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJICAgICAgICIlczogdW5rbm93biBzb3J0IG1vZGVcbiIsCisJCQkgICAgICAgX25jX3Byb2duYW1lKTsKKwkJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJ1QnOgorCSAgICBsaW1pdGVkID0gRkFMU0U7CisJICAgIGJyZWFrOworCisjaWYgTkNVUlNFU19YTkFNRVMKKwljYXNlICd0JzoKKwkgICAgX25jX2Rpc2FibGVfcGVyaW9kID0gRkFMU0U7CisJICAgIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlID0gVFJVRTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgJ1UnOgorCSAgICBsaXRlcmFsID0gVFJVRTsKKwkgICAgYnJlYWs7CisKKwljYXNlICd1JzoKKwkgICAgY29tcGFyZSA9IENfVVNFQUxMOworCSAgICBicmVhazsKKworCWNhc2UgJ1YnOgorCSAgICBwdXRzKGN1cnNlc192ZXJzaW9uKCkpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworCisJY2FzZSAndic6CisJICAgIGl0cmFjZSA9IG9wdGFyZ190b19udW1iZXIoKTsKKwkgICAgc2V0X3RyYWNlX2xldmVsKGl0cmFjZSk7CisJICAgIGJyZWFrOworCisJY2FzZSAndyc6CisJICAgIG13aWR0aCA9IG9wdGFyZ190b19udW1iZXIoKTsKKwkgICAgYnJlYWs7CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworCWNhc2UgJ3gnOgorCSAgICB1c2VfZXh0ZW5kZWRfbmFtZXMoVFJVRSk7CisJICAgIGJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKyAgICB9CisKKyAgICBtYXh0ZXJtcyA9IChhcmdjICsgMiAtIG9wdGluZCk7CisgICAgdGZpbGUgPSB0eXBlTWFsbG9jKHBhdGgsIG1heHRlcm1zKTsKKyAgICB0bmFtZSA9IHR5cGVDYWxsb2MoY2hhciAqLCBtYXh0ZXJtcyk7CisgICAgZW50cmllcyA9IHR5cGVDYWxsb2MoRU5UUlksIG1heHRlcm1zKTsKKworICAgIGlmICh0ZmlsZSA9PSAwCisJfHwgdG5hbWUgPT0gMAorCXx8IGVudHJpZXMgPT0gMCkgeworCWZwcmludGYoc3RkZXJyLCAiJXM6IG5vdCBlbm91Z2ggbWVtb3J5XG4iLCBfbmNfcHJvZ25hbWUpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgLyogYnkgZGVmYXVsdCwgc29ydCBieSB0ZXJtaW5mbyBuYW1lICovCisgICAgaWYgKHNvcnRtb2RlID09IFNfREVGQVVMVCkKKwlzb3J0bW9kZSA9IFNfVEVSTUlORk87CisKKyAgICAvKiBzZXQgdXAgZm9yIGRpc3BsYXkgKi8KKyAgICBkdW1wX2luaXQodHZlcnNpb24sIG91dGZvcm0sIHNvcnRtb2RlLCBtd2lkdGgsIGl0cmFjZSwgZm9ybWF0dGVkKTsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB0ZXJtaW5hbCBuYW1lIHRvIHdvcmsgd2l0aCAqLworICAgIGlmIChvcHRpbmQgPj0gYXJnYykKKwlhcmd2W2FyZ2MrK10gPSB0ZXJtaW5hbF9lbnYoKTsKKworICAgIC8qIGlmIHVzZXIgaXMgYWZ0ZXIgYSBjb21wYXJpc29uLCBtYWtlIHN1cmUgd2UgaGF2ZSB0d28gZW50cmllcyAqLworICAgIGlmIChjb21wYXJlICE9IENfREVGQVVMVCAmJiBvcHRpbmQgPj0gYXJnYyAtIDEpCisJYXJndlthcmdjKytdID0gdGVybWluYWxfZW52KCk7CisKKyAgICAvKiBleGFjdGx5IHR3byB0ZXJtaW5hbCBuYW1lcyB3aXRoIG5vIG9wdGlvbnMgbWVhbnMgZG8gLWQgKi8KKyAgICBpZiAoYXJnYyAtIG9wdGluZCA9PSAyICYmIGNvbXBhcmUgPT0gQ19ERUZBVUxUKQorCWNvbXBhcmUgPSBDX0RJRkZFUkVOQ0U7CisKKyAgICBpZiAoIWZpbGVjb21wYXJlKSB7CisJLyogZ3JhYiB0aGUgZW50cmllcyAqLworCXRlcm1jb3VudCA9IDA7CisJZm9yICg7IG9wdGluZCA8IGFyZ2M7IG9wdGluZCsrKSB7CisJICAgIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSA9IHRlcm1jb3VudCA/IHJlc3RkaXIgOiBmaXJzdGRpcjsKKwkgICAgaW50IHN0YXR1czsKKworCSAgICB0bmFtZVt0ZXJtY291bnRdID0gYXJndltvcHRpbmRdOworCisJICAgIGlmIChkaXJlY3RvcnkpIHsKKyNpZiBVU0VfREFUQUJBU0UKKyNpZiBNSVhFRENBU0VfRklMRU5BTUVTCisjZGVmaW5lIExFQUZfRk1UICIlYyIKKyNlbHNlCisjZGVmaW5lIExFQUZfRk1UICIlMDJ4IgorI2VuZGlmCisJCSh2b2lkKSBzcHJpbnRmKHRmaWxlW3Rlcm1jb3VudF0sICIlcy8iIExFQUZfRk1UICIvJXMiLAorCQkJICAgICAgIGRpcmVjdG9yeSwKKwkJCSAgICAgICBVQ2hhcigqYXJndltvcHRpbmRdKSwgYXJndltvcHRpbmRdKTsKKwkJaWYgKGl0cmFjZSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAiJXM6IHJlYWRpbmcgZW50cnkgJXMgZnJvbSBmaWxlICVzXG4iLAorCQkJCSAgIF9uY19wcm9nbmFtZSwKKwkJCQkgICBhcmd2W29wdGluZF0sIHRmaWxlW3Rlcm1jb3VudF0pOworCisJCXN0YXR1cyA9IF9uY19yZWFkX2ZpbGVfZW50cnkodGZpbGVbdGVybWNvdW50XSwKKwkJCQkJICAgICAmZW50cmllc1t0ZXJtY291bnRdLnR0ZXJtKTsKKyNlbHNlCisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVzOiB0ZXJtaW5mbyBmaWxlcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJICAgICAgIF9uY19wcm9nbmFtZSk7CisJCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisjZW5kaWYKKwkgICAgfSBlbHNlIHsKKwkJaWYgKGl0cmFjZSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAiJXM6IHJlYWRpbmcgZW50cnkgJXMgZnJvbSBkYXRhYmFzZVxuIiwKKwkJCQkgICBfbmNfcHJvZ25hbWUsCisJCQkJICAgdG5hbWVbdGVybWNvdW50XSk7CisKKwkJc3RhdHVzID0gX25jX3JlYWRfZW50cnkodG5hbWVbdGVybWNvdW50XSwKKwkJCQkJdGZpbGVbdGVybWNvdW50XSwKKwkJCQkJJmVudHJpZXNbdGVybWNvdW50XS50dGVybSk7CisJCWRpcmVjdG9yeSA9IFRFUk1JTkZPOwkvKiBmb3IgZXJyb3IgbWVzc2FnZSAqLworCSAgICB9CisKKwkgICAgaWYgKHN0YXR1cyA8PSAwKSB7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICAgICAiJXM6IGNvdWxkbid0IG9wZW4gdGVybWluZm8gZmlsZSAlcy5cbiIsCisJCQkgICAgICAgX25jX3Byb2duYW1lLAorCQkJICAgICAgIHRmaWxlW3Rlcm1jb3VudF0pOworCQlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCSAgICB9CisJICAgIHJlcGFpcl9hY3NjKCZlbnRyaWVzW3Rlcm1jb3VudF0udHRlcm0pOworCSAgICB0ZXJtY291bnQrKzsKKwl9CisKKyNpZiBOQ1VSU0VTX1hOQU1FUworCWlmICh0ZXJtY291bnQgPiAxKQorCSAgICBfbmNfYWxpZ25fdGVybXR5cGUoJmVudHJpZXNbMF0udHRlcm0sICZlbnRyaWVzWzFdLnR0ZXJtKTsKKyNlbmRpZgorCisJLyogZHVtcCBhcyBDIGluaXRpYWxpemVyIGZvciB0aGUgdGVybWluYWwgdHlwZSAqLworCWlmIChpbml0ZHVtcCkgeworCSAgICBpZiAoaW5pdGR1bXAgJiAxKQorCQlkdW1wX3Rlcm10eXBlKCZlbnRyaWVzWzBdLnR0ZXJtKTsKKwkgICAgaWYgKGluaXRkdW1wICYgMikKKwkJZHVtcF9pbml0aWFsaXplcnMoJmVudHJpZXNbMF0udHRlcm0pOworCX0KKworCS8qIGFuYWx5emUgdGhlIGluaXQgc3RyaW5ncyAqLworCWVsc2UgaWYgKGluaXRfYW5hbHl6ZSkgeworI3VuZGVmIENVUgorI2RlZmluZSBDVVIJZW50cmllc1swXS50dGVybS4KKwkgICAgYW5hbHl6ZV9zdHJpbmcoImlzMSIsIGluaXRfMXN0cmluZywgJmVudHJpZXNbMF0udHRlcm0pOworCSAgICBhbmFseXplX3N0cmluZygiaXMyIiwgaW5pdF8yc3RyaW5nLCAmZW50cmllc1swXS50dGVybSk7CisJICAgIGFuYWx5emVfc3RyaW5nKCJpczMiLCBpbml0XzNzdHJpbmcsICZlbnRyaWVzWzBdLnR0ZXJtKTsKKwkgICAgYW5hbHl6ZV9zdHJpbmcoInJzMSIsIHJlc2V0XzFzdHJpbmcsICZlbnRyaWVzWzBdLnR0ZXJtKTsKKwkgICAgYW5hbHl6ZV9zdHJpbmcoInJzMiIsIHJlc2V0XzJzdHJpbmcsICZlbnRyaWVzWzBdLnR0ZXJtKTsKKwkgICAgYW5hbHl6ZV9zdHJpbmcoInJzMyIsIHJlc2V0XzNzdHJpbmcsICZlbnRyaWVzWzBdLnR0ZXJtKTsKKwkgICAgYW5hbHl6ZV9zdHJpbmcoInNtY3VwIiwgZW50ZXJfY2FfbW9kZSwgJmVudHJpZXNbMF0udHRlcm0pOworCSAgICBhbmFseXplX3N0cmluZygicm1jdXAiLCBleGl0X2NhX21vZGUsICZlbnRyaWVzWzBdLnR0ZXJtKTsKKyN1bmRlZiBDVVIKKwl9IGVsc2UgeworCisJICAgIC8qCisJICAgICAqIEhlcmUncyB3aGVyZSB0aGUgcmVhbCB3b3JrIGdldHMgZG9uZQorCSAgICAgKi8KKwkgICAgc3dpdGNoIChjb21wYXJlKSB7CisJICAgIGNhc2UgQ19ERUZBVUxUOgorCQlpZiAoaXRyYWNlKQorCQkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICIlczogYWJvdXQgdG8gZHVtcCAlc1xuIiwKKwkJCQkgICBfbmNfcHJvZ25hbWUsCisJCQkJICAgdG5hbWVbMF0pOworCQkodm9pZCkgcHJpbnRmKCIjXHRSZWNvbnN0cnVjdGVkIHZpYSBpbmZvY21wIGZyb20gZmlsZTogJXNcbiIsCisJCQkgICAgICB0ZmlsZVswXSk7CisJCWR1bXBfZW50cnkoJmVudHJpZXNbMF0udHRlcm0sCisJCQkgICBzdXBwcmVzc191bnRyYW5zbGF0YWJsZSwKKwkJCSAgIGxpbWl0ZWQsCisJCQkgICBudW1iZXJzLAorCQkJICAgTlVMTCk7CisJCWxlbiA9IHNob3dfZW50cnkoKTsKKwkJaWYgKGl0cmFjZSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVzOiBsZW5ndGggJWRcbiIsIF9uY19wcm9nbmFtZSwgbGVuKTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBDX0RJRkZFUkVOQ0U6CisJCWlmIChpdHJhY2UpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICIlczogZHVtcGluZyBkaWZmZXJlbmNlc1xuIiwgX25jX3Byb2duYW1lKTsKKwkJKHZvaWQpIHByaW50ZigiY29tcGFyaW5nICVzIHRvICVzLlxuIiwgdG5hbWVbMF0sIHRuYW1lWzFdKTsKKwkJY29tcGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVudHJpZXMtPnR0ZXJtLCBxdWlldCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgQ19DT01NT046CisJCWlmIChpdHJhY2UpCisJCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgIiVzOiBkdW1waW5nIGNvbW1vbiBjYXBhYmlsaXRpZXNcbiIsCisJCQkJICAgX25jX3Byb2duYW1lKTsKKwkJKHZvaWQpIHByaW50ZigiY29tcGFyaW5nICVzIHRvICVzLlxuIiwgdG5hbWVbMF0sIHRuYW1lWzFdKTsKKwkJY29tcGFyZV9lbnRyeShjb21wYXJlX3ByZWRpY2F0ZSwgJmVudHJpZXMtPnR0ZXJtLCBxdWlldCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgQ19OQU5EOgorCQlpZiAoaXRyYWNlKQorCQkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICIlczogZHVtcGluZyBkaWZmZXJlbmNlc1xuIiwKKwkJCQkgICBfbmNfcHJvZ25hbWUpOworCQkodm9pZCkgcHJpbnRmKCJjb21wYXJpbmcgJXMgdG8gJXMuXG4iLCB0bmFtZVswXSwgdG5hbWVbMV0pOworCQljb21wYXJlX2VudHJ5KGNvbXBhcmVfcHJlZGljYXRlLCAmZW50cmllcy0+dHRlcm0sIHF1aWV0KTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBDX1VTRUFMTDoKKwkJaWYgKGl0cmFjZSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVzOiBkdW1waW5nIHVzZSBlbnRyeVxuIiwgX25jX3Byb2duYW1lKTsKKwkJZHVtcF9lbnRyeSgmZW50cmllc1swXS50dGVybSwKKwkJCSAgIHN1cHByZXNzX3VudHJhbnNsYXRhYmxlLAorCQkJICAgbGltaXRlZCwKKwkJCSAgIG51bWJlcnMsCisJCQkgICB1c2VfcHJlZGljYXRlKTsKKwkJZm9yIChpID0gMTsgaSA8IHRlcm1jb3VudDsgaSsrKQorCQkgICAgZHVtcF91c2VzKHRuYW1lW2ldLCAhKG91dGZvcm0gPT0gRl9URVJNQ0FQCisJCQkJCSAgfHwgb3V0Zm9ybSA9PSBGX1RDT05WRVJSKSk7CisJCWxlbiA9IHNob3dfZW50cnkoKTsKKwkJaWYgKGl0cmFjZSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVzOiBsZW5ndGggJWRcbiIsIF9uY19wcm9nbmFtZSwgbGVuKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIGlmIChjb21wYXJlID09IENfVVNFQUxMKQorCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCAtdSBkb2Vzbid0IHdvcmsgd2l0aCAtRlxuIik7CisgICAgZWxzZSBpZiAoY29tcGFyZSA9PSBDX0RFRkFVTFQpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiVXNlIGB0aWMgLVtDSV0gPGZpbGU+JyBmb3IgdGhpcy5cbiIpOworICAgIGVsc2UgaWYgKGFyZ2MgLSBvcHRpbmQgIT0gMikKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCSAgICAgICAiRmlsZSBjb21wYXJpc29uIG5lZWRzIGV4YWN0bHkgdHdvIGZpbGUgYXJndW1lbnRzLlxuIik7CisgICAgZWxzZQorCWZpbGVfY29tcGFyaXNvbihhcmdjIC0gb3B0aW5kLCBhcmd2ICsgb3B0aW5kKTsKKworI2lmIE5PX0xFQUtTCisgICAgZnJlZShteWFyZ3YpOworICAgIGZyZWUodGZpbGUpOworICAgIGZyZWUodG5hbWUpOworI2VuZGlmCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworLyogaW5mb2NtcC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcHJvZ3MvbW9kdWxlcyBiL25jdXJzZXMtNS43L3Byb2dzL21vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0ZjNiNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Byb2dzL21vZHVsZXMKQEAgLTAsMCArMSw0MyBAQAorIyAkSWQ6IG1vZHVsZXMsdiAxLjEzIDIwMDYvMTIvMjQgMDA6NTM6MjEgdG9tIEV4cCAkCisjIFByb2dyYW0gbW9kdWxlcyAoc29tZSBhcmUgaW4gbmN1cnNlcyBsaWIhKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMTk5NS1vbgorIworCitAIGJhc2UKK2NsZWFyCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit0aWMJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykgdHJhbnNmb3JtLmggJChzcmNkaXIpL2R1bXBfZW50cnkuaAordG9lCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpICAgICAgICAgICAgICQoc3JjZGlyKS9kdW1wX2VudHJ5LmgKK2R1bXBfZW50cnkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKSAgICAgICAgICAgICAkKHNyY2RpcikvZHVtcF9lbnRyeS5oIC4uL2luY2x1ZGUvcGFyYW1ldHJpemVkLmggJChJTkNESVIpL2NhcGRlZmF1bHRzLmMgdGVybXNvcnQuYworaW5mb2NtcAkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKSAgICAgICAgICAgICAkKHNyY2RpcikvZHVtcF9lbnRyeS5oCit0cHV0CQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpIHRyYW5zZm9ybS5oIHRlcm1zb3J0LmMKK3RzZXQJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykgdHJhbnNmb3JtLmggJChzcmNkaXIpL2R1bXBfZW50cnkuaCAuLi9pbmNsdWRlL3Rlcm1jYXAuaAorCisjIHZpbGU6bWFrZW1vZGUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Byb2dzL3Byb2dzLnByaXYuaCBiL25jdXJzZXMtNS43L3Byb2dzL3Byb2dzLnByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGVhNDYwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcHJvZ3MvcHJvZ3MucHJpdi5oCkBAIC0wLDAgKzEsMTkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgMTk5Ny1vbiAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogcHJvZ3MucHJpdi5oLHYgMS4zNCAyMDA4LzA4LzAzIDE3OjQzOjA1IHRvbSBFeHAgJAorICoKKyAqCXByb2dzLnByaXYuaAorICoKKyAqCUhlYWRlciBmaWxlIGZvciBjdXJzZXMgdXRpbGl0eSBwcm9ncmFtcworICovCisKKyNpbmNsdWRlIDxuY3Vyc2VzX2NmZy5oPgorCisjaWYgVVNFX1JDU19JRFMKKyNkZWZpbmUgTU9EVUxFX0lEKGlkKSBzdGF0aWMgY29uc3QgY2hhciBJZGVudFtdID0gaWQ7CisjZWxzZQorI2RlZmluZSBNT0RVTEVfSUQoaWQpIC8qbm90aGluZyovCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmIEhBVkVfU1lTX0JTRFRZUEVTX0gKKyNpbmNsdWRlIDxzeXMvYnNkdHlwZXMuaD4JLyogbmVlZGVkIGZvciBJU0MgKi8KKyNlbmRpZgorCisjaWYgSEFWRV9MSU1JVFNfSAorIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbGlmIEhBVkVfU1lTX1BBUkFNX0gKKyMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRElSRU5UX0gKKyMgaW5jbHVkZSA8ZGlyZW50Lmg+CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSBzdHJsZW4oKGRpcmVudCktPmRfbmFtZSkKKyMgaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9ESVJFTlQ2NCkKKyMgIGlmICFkZWZpbmVkKF9MUDY0KSAmJiAoX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisjICAgZGVmaW5lCURJUkVOVAlzdHJ1Y3QgZGlyZW50NjQKKyMgIGVsc2UKKyMgICBkZWZpbmUJRElSRU5UCXN0cnVjdCBkaXJlbnQKKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZQlESVJFTlQJc3RydWN0IGRpcmVudAorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIERJUkVOVCBzdHJ1Y3QgZGlyZWN0CisjIGRlZmluZSBOQU1MRU4oZGlyZW50KSAoZGlyZW50KS0+ZF9uYW1sZW4KKyMgaWYgSEFWRV9TWVNfTkRJUl9ICisjICBpbmNsdWRlIDxzeXMvbmRpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NZU19ESVJfSAorIyAgaW5jbHVkZSA8c3lzL2Rpci5oPgorIyBlbmRpZgorIyBpZiBIQVZFX05ESVJfSAorIyAgaW5jbHVkZSA8bmRpci5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgREVDTF9FUlJOTworZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgorCisjaWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKKy8qICdnZXRvcHQoKScgbWF5IGJlIHByb3RvdHlwZWQgaW4gPHN0ZGxpYi5oPiwgYnV0IGRlY2xhcmluZyBpdHMKKyAqIHZhcmlhYmxlcyBkb2Vzbid0IGh1cnQuCisgKi8KK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZiAvKiBIQVZFX0dFVE9QVF9IICovCisKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKyNpbmNsdWRlIDx0ZXJtX2VudHJ5Lmg+CisjaW5jbHVkZSA8dGljLmg+CisjaW5jbHVkZSA8bmNfdHBhcm0uaD4KKworI2luY2x1ZGUgPG5jX2FsbG9jLmg+CisjaWYgSEFWRV9OQ19GUkVFQUxMCisjdW5kZWYgRXhpdFByb2dyYW0KKyNpZmRlZiBVU0VfTElCVElORk8KKyNkZWZpbmUgRXhpdFByb2dyYW0oY29kZSkgX25jX2ZyZWVfdGluZm8oY29kZSkKKyNlbHNlCisjZGVmaW5lIEV4aXRQcm9ncmFtKGNvZGUpIF9uY19mcmVlX3RpYyhjb2RlKQorI2VuZGlmCisjZW5kaWYKKworLyogdXN1YWxseSBpbiA8dW5pc3RkLmg+ICovCisjaWZuZGVmIFNURE9VVF9GSUxFTk8KKyNkZWZpbmUgU1RET1VUX0ZJTEVOTyAxCisjZW5kaWYKKworI2lmbmRlZiBTVERFUlJfRklMRU5PCisjZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisjZW5kaWYKKworI2lmbmRlZiBFWElUX0ZBSUxVUkUKKyNkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNlbmRpZgorCisjaWZuZGVmIFJfT0sKKyNkZWZpbmUJUl9PSwk0CQkvKiBUZXN0IGZvciByZWFkYWJsZS4gICovCisjZW5kaWYKKworI2lmbmRlZiBXX09LCisjZGVmaW5lCVdfT0sJMgkJLyogVGVzdCBmb3Igd3JpdGFibGUuICAqLworI2VuZGlmCisKKyNpZm5kZWYgWF9PSworI2RlZmluZQlYX09LCTEJCS8qIFRlc3QgZm9yIGV4ZWN1dGFibGUuICAqLworI2VuZGlmCisKKyNpZm5kZWYgRl9PSworI2RlZmluZQlGX09LCTAJCS8qIFRlc3QgZm9yIGV4aXN0ZW5jZS4gICovCisjZW5kaWYKKworLyogdXN1YWxseSBpbiA8dW5pc3RkLmg+ICovCisjaWZuZGVmIFNURE9VVF9GSUxFTk8KKyNkZWZpbmUgU1RET1VUX0ZJTEVOTyAxCisjZW5kaWYKKworI2lmbmRlZiBTVERFUlJfRklMRU5PCisjZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKKy8qIG1heSBiZSBpbiBsaW1pdHMuaCwgaW5jbHVkZWQgZnJvbSB2YXJpb3VzIHBsYWNlcyAqLworI2lmbmRlZiBQQVRIX01BWAorIyBpZiBkZWZpbmVkKF9QT1NJWF9QQVRIX01BWCkKKyMgIGRlZmluZSBQQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKyMgZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCisjICBkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgorIyBlbHNlCisjICBkZWZpbmUgUEFUSF9NQVggMjU1CS8qIHRoZSBQb3NpeCBtaW5pbXVtIHBhdGhzaXplICovCisjIGVuZGlmCisjZW5kaWYKKworLyogV2UgdXNlIGlzYXNjaWkgb25seSB0byBndWFyZCBhZ2FpbnN0IHVzZSBvZiA3LWJpdCBjdHlwZSB0YWJsZXMgaW4gdGhlCisgKiBpc3ByaW50IHRlc3QgaW4gaW5mb2NtcC4KKyAqLworI2lmICFIQVZFX0lTQVNDSUkKKyMgdW5kZWYgaXNhc2NpaQorIyBpZiAoJ3onLSdhJyA9PSAyNSkgJiYgKCd6JyA8IDEyNykgJiYgKCdaJy0nQScgPT0gMjUpICYmICgnWicgPCAxMjcpICYmICgnOScgPCAxMjcpCisjICBkZWZpbmUgaXNhc2NpaShjKSAoVUNoYXIoYykgPD0gMTI3KQorIyBlbHNlCisjICBkZWZpbmUgaXNhc2NpaShjKSAxCS8qIG5vdCByZWFsbHkgYXNjaWkgYW55d2F5ICovCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBVQ2hhcihjKSAgICAoKHVuc2lnbmVkIGNoYXIpKGMpKQorCisjZGVmaW5lIFNJWkVPRih2KSAoc2l6ZW9mKHYpL3NpemVvZih2WzBdKSkKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Byb2dzL3RpYy5jIGIvbmN1cnNlcy01LjcvcHJvZ3MvdGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiYzNlYQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Byb2dzL3RpYy5jCkBAIC0wLDAgKzEsMTUyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFpleWQgTS4gQmVuLUhhbGltIDx6bWJlbmhhbEBuZXRjb20uY29tPiAxOTkyLDE5OTUgICAgICAgICAgICAgICAqCisgKiAgICAgYW5kOiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogVGhvbWFzIEUuIERpY2tleSAgICAgICAgICAgICAgICAgICAgICAgIDE5OTYgb24gICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJdGljLmMgLS0tIE1haW4gcHJvZ3JhbSBmb3IgdGVybWluZm8gY29tcGlsZXIKKyAqCQkJYnkgRXJpYyBTLiBSYXltb25kCisgKgorICovCisKKyNpbmNsdWRlIDxwcm9ncy5wcml2Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPGR1bXBfZW50cnkuaD4KKyNpbmNsdWRlIDx0cmFuc2Zvcm0uaD4KKworTU9EVUxFX0lEKCIkSWQ6IHRpYy5jLHYgMS4xMzcgMjAwOC8wOS8xMyAxNjo1OToyNCB0b20gRXhwICQiKQorCitjb25zdCBjaGFyICpfbmNfcHJvZ25hbWUgPSAidGljIjsKKworc3RhdGljIEZJTEUgKmxvZ19mcDsKK3N0YXRpYyBGSUxFICp0bXBfZnA7CitzdGF0aWMgYm9vbCBjYXBkdW1wID0gRkFMU0U7CS8qIHJ1bm5pbmcgYXMgaW5mb3RvY2FwPyAqLworc3RhdGljIGJvb2wgaW5mb2R1bXAgPSBGQUxTRTsJLyogcnVubmluZyBhcyBjYXB0b2luZm8/ICovCitzdGF0aWMgYm9vbCBzaG93c3VtbWFyeSA9IEZBTFNFOworc3RhdGljIGNvbnN0IGNoYXIgKnRvX3JlbW92ZTsKKworc3RhdGljIHZvaWQgKCpzYXZlX2NoZWNrX3Rlcm10eXBlKSAoVEVSTVRZUEUgKiwgYm9vbCk7CitzdGF0aWMgdm9pZCBjaGVja190ZXJtdHlwZShURVJNVFlQRSAqdHQsIGJvb2wpOworCitzdGF0aWMgY29uc3QgY2hhciB1c2FnZV9zdHJpbmdbXSA9ICJcCitbLWUgbmFtZXNdIFwKK1stbyBkaXJdIFwKK1stUiBuYW1lXSBcCitbLXZbbl1dIFwKK1stVl0gXAorWy13W25dXSBcCitbLVwKKzFcCithXAorQ1wKK2NcCitmXAorR1wKK2dcCitJXAorTFwKK05cCityXAorc1wKK1RcCit0XAorVVwKK3hcCitdIFwKK3NvdXJjZS1maWxlXG4iOworCisjaWYgTk9fTEVBS1MKK3N0YXRpYyB2b2lkCitmcmVlX25hbWVsaXN0KGNoYXIgKipzcmMpCit7CisgICAgaWYgKHNyYyAhPSAwKSB7CisJaW50IG47CisJZm9yIChuID0gMDsgc3JjW25dICE9IDA7ICsrbikKKwkgICAgZnJlZShzcmNbbl0pOworCWZyZWUoc3JjKTsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2NsZWFudXAoY2hhciAqKm5hbWVsc3QgR0NDX1VOVVNFRCkKK3sKKyNpZiBOT19MRUFLUworICAgIGZyZWVfbmFtZWxpc3QobmFtZWxzdCk7CisjZW5kaWYKKyAgICBpZiAodG1wX2ZwICE9IDApCisJZmNsb3NlKHRtcF9mcCk7CisgICAgaWYgKHRvX3JlbW92ZSAhPSAwKSB7CisjaWYgSEFWRV9SRU1PVkUKKwlyZW1vdmUodG9fcmVtb3ZlKTsKKyNlbHNlCisJdW5saW5rKHRvX3JlbW92ZSk7CisjZW5kaWYKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitmYWlsZWQoY29uc3QgY2hhciAqbXNnKQoreworICAgIHBlcnJvcihtc2cpOworICAgIGNsZWFudXAoKGNoYXIgKiopIDApOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0YmxbXSA9CisgICAgeworCSJPcHRpb25zOiIsCisJIiAgLTEgICAgICAgICBmb3JtYXQgdHJhbnNsYXRpb24gb3V0cHV0IG9uZSBjYXBhYmlsaXR5IHBlciBsaW5lIiwKKyNpZiBOQ1VSU0VTX1hOQU1FUworCSIgIC1hICAgICAgICAgcmV0YWluIGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzIChzZXRzIC14IGFsc28pIiwKKyNlbmRpZgorCSIgIC1DICAgICAgICAgdHJhbnNsYXRlIGVudHJpZXMgdG8gdGVybWNhcCBzb3VyY2UgZm9ybSIsCisJIiAgLWMgICAgICAgICBjaGVjayBvbmx5LCB2YWxpZGF0ZSBpbnB1dCB3aXRob3V0IGNvbXBpbGluZyBvciB0cmFuc2xhdGluZyIsCisJIiAgLWU8bmFtZXM+ICB0cmFuc2xhdGUvY29tcGlsZSBvbmx5IGVudHJpZXMgbmFtZWQgYnkgY29tbWEtc2VwYXJhdGVkIGxpc3QiLAorCSIgIC1mICAgICAgICAgZm9ybWF0IGNvbXBsZXggc3RyaW5ncyBmb3IgcmVhZGFiaWxpdHkiLAorCSIgIC1HICAgICAgICAgZm9ybWF0ICV7bnVtYmVyfSB0byAlJ2NoYXInIiwKKwkiICAtZyAgICAgICAgIGZvcm1hdCAlJ2NoYXInIHRvICV7bnVtYmVyfSIsCisJIiAgLUkgICAgICAgICB0cmFuc2xhdGUgZW50cmllcyB0byB0ZXJtaW5mbyBzb3VyY2UgZm9ybSIsCisJIiAgLUwgICAgICAgICB0cmFuc2xhdGUgZW50cmllcyB0byBmdWxsIHRlcm1pbmZvIHNvdXJjZSBmb3JtIiwKKwkiICAtTiAgICAgICAgIGRpc2FibGUgc21hcnQgZGVmYXVsdHMgZm9yIHNvdXJjZSB0cmFuc2xhdGlvbiIsCisJIiAgLW88ZGlyPiAgICBzZXQgb3V0cHV0IGRpcmVjdG9yeSBmb3IgY29tcGlsZWQgZW50cnkgd3JpdGVzIiwKKwkiICAtUjxuYW1lPiAgIHJlc3RyaWN0IHRyYW5zbGF0aW9uIHRvIGdpdmVuIHRlcm1pbmZvL3Rlcm1jYXAgdmVyc2lvbiIsCisJIiAgLXIgICAgICAgICBmb3JjZSByZXNvbHV0aW9uIG9mIGFsbCB1c2UgZW50cmllcyBpbiBzb3VyY2UgdHJhbnNsYXRpb24iLAorCSIgIC1zICAgICAgICAgcHJpbnQgc3VtbWFyeSBzdGF0aXN0aWNzIiwKKwkiICAtVCAgICAgICAgIHJlbW92ZSBzaXplLXJlc3RyaWN0aW9ucyBvbiBjb21waWxlZCBkZXNjcmlwdGlvbiIsCisjaWYgTkNVUlNFU19YTkFNRVMKKwkiICAtdCAgICAgICAgIHN1cHByZXNzIGNvbW1lbnRlZC1vdXQgY2FwYWJpbGl0aWVzIiwKKyNlbmRpZgorCSIgIC1VICAgICAgICAgc3VwcHJlc3MgcG9zdC1wcm9jZXNzaW5nIG9mIGVudHJpZXMiLAorCSIgIC1WICAgICAgICAgcHJpbnQgdmVyc2lvbiIsCisJIiAgLXZbbl0gICAgICBzZXQgdmVyYm9zaXR5IGxldmVsIiwKKwkiICAtd1tuXSAgICAgIHNldCBmb3JtYXQgd2lkdGggZm9yIHRyYW5zbGF0aW9uIG91dHB1dCIsCisjaWYgTkNVUlNFU19YTkFNRVMKKwkiICAteCAgICAgICAgIHRyZWF0IHVua25vd24gY2FwYWJpbGl0aWVzIGFzIHVzZXItZGVmaW5lZCIsCisjZW5kaWYKKwkiIiwKKwkiUGFyYW1ldGVyczoiLAorCSIgIDxmaWxlPiAgICAgZmlsZSB0byB0cmFuc2xhdGUgb3IgY29tcGlsZSIKKyAgICB9OworICAgIHNpemVfdCBqOworCisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgJXNcbiIsIF9uY19wcm9nbmFtZSwgdXNhZ2Vfc3RyaW5nKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgU0laRU9GKHRibCk7IGorKykgeworCWZwdXRzKHRibFtqXSwgc3RkZXJyKTsKKwlwdXRjKCdcbicsIHN0ZGVycik7CisgICAgfQorICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKKyNkZWZpbmUgTF9CUkFDRSAneycKKyNkZWZpbmUgUl9CUkFDRSAnfScKKyNkZWZpbmUgU19RVU9URSAnXCcnOworCitzdGF0aWMgdm9pZAord3JpdGVfaXQoRU5UUlkgKiBlcCkKK3sKKyAgICB1bnNpZ25lZCBuOworICAgIGludCBjaDsKKyAgICBjaGFyICpzLCAqZCwgKnQ7CisgICAgY2hhciByZXN1bHRbTUFYX0VOVFJZX1NJWkVdOworCisgICAgLyoKKyAgICAgKiBMb29rIGZvciBzdHJpbmdzIHRoYXQgY29udGFpbiAle251bWJlcn0sIGNvbnZlcnQgdGhlbSB0byAlJ2NoYXInLAorICAgICAqIHdoaWNoIGlzIHNob3J0ZXIgYW5kIHJ1bnMgYSBsaXR0bGUgZmFzdGVyLgorICAgICAqLworICAgIGZvciAobiA9IDA7IG4gPCBTVFJDT1VOVDsgbisrKSB7CisJcyA9IGVwLT50dGVybS5TdHJpbmdzW25dOworCWlmIChWQUxJRF9TVFJJTkcocykKKwkgICAgJiYgc3RyY2hyKHMsIExfQlJBQ0UpICE9IDApIHsKKwkgICAgZCA9IHJlc3VsdDsKKwkgICAgdCA9IHM7CisJICAgIHdoaWxlICgoY2ggPSAqdCsrKSAhPSAwKSB7CisJCSpkKysgPSAoY2hhcikgY2g7CisJCWlmIChjaCA9PSAnXFwnKSB7CisJCSAgICAqZCsrID0gKnQrKzsKKwkJfSBlbHNlIGlmICgoY2ggPT0gJyUnKQorCQkJICAgJiYgKCp0ID09IExfQlJBQ0UpKSB7CisJCSAgICBjaGFyICp2ID0gMDsKKwkJICAgIGxvbmcgdmFsdWUgPSBzdHJ0b2wodCArIDEsICZ2LCAwKTsKKwkJICAgIGlmICh2ICE9IDAKKwkJCSYmICp2ID09IFJfQlJBQ0UKKwkJCSYmIHZhbHVlID4gMAorCQkJJiYgdmFsdWUgIT0gJ1xcJwkvKiBGSVhNRSAqLworCQkJJiYgdmFsdWUgPCAxMjcKKwkJCSYmIGlzcHJpbnQoKGludCkgdmFsdWUpKSB7CisJCQkqZCsrID0gU19RVU9URTsKKwkJCSpkKysgPSAoY2hhcikgdmFsdWU7CisJCQkqZCsrID0gU19RVU9URTsKKwkJCXQgPSAodiArIDEpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgKmQgPSAwOworCSAgICBpZiAoc3RybGVuKHJlc3VsdCkgPCBzdHJsZW4ocykpCisJCXN0cmNweShzLCByZXN1bHQpOworCX0KKyAgICB9CisKKyAgICBfbmNfc2V0X3R5cGUoX25jX2ZpcnN0X25hbWUoZXAtPnR0ZXJtLnRlcm1fbmFtZXMpKTsKKyAgICBfbmNfY3Vycl9saW5lID0gZXAtPnN0YXJ0bGluZTsKKyAgICBfbmNfd3JpdGVfZW50cnkoJmVwLT50dGVybSk7Cit9CisKK3N0YXRpYyBib29sCitpbW1lZGhvb2soRU5UUlkgKiBlcCBHQ0NfVU5VU0VEKQorLyogd3JpdGUgb3V0IGVudHJpZXMgd2l0aCBubyB1c2UgY2FwYWJpbGl0aWVzIGltbWVkaWF0ZWx5IHRvIHNhdmUgc3RvcmFnZSAqLworeworI2lmICFIQVZFX0JJR19DT1JFCisgICAgLyoKKyAgICAgKiBUaGlzIGlzIHN0cmljdGx5IGEgY29yZS1lY29ub215IGtsdWdlLiAgVGhlIHJlYWxseSBjbGVhbiB3YXkgdG8gaGFuZGxlCisgICAgICogY29tcGlsYXRpb24gaXMgdG8gc2x1cnAgdGhlIHdob2xlIGZpbGUgaW50byBjb3JlIGFuZCB0aGVuIGRvIGFsbCB0aGUKKyAgICAgKiBuYW1lLWNvbGxpc2lvbiBjaGVja3MgYW5kIGVudHJ5IHdyaXRlcyBpbiBvbmUgc3dlbGwgZm9vcC4gIEJ1dCB0aGUKKyAgICAgKiB0ZXJtaW5mbyBtYXN0ZXIgZmlsZSBpcyBsYXJnZSBlbm91Z2ggdGhhdCBzb21lIGNvcmUtcG9vciBzeXN0ZW1zIHN3YXAKKyAgICAgKiBsaWtlIGNyYXp5IHdoZW4geW91IGNvbXBpbGUgaXQgdGhpcyB3YXkuLi50aGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZgorICAgICAqIHRoaXMgcHJvY2VzcyB0YWtpbmcgKnRocmVlIGhvdXJzKiwgcmF0aGVyIHRoYW4gdGhlIHR3ZW50eSBzZWNvbmRzIG9yCisgICAgICogbGVzcyB0eXBpY2FsIG9uIG15IGRldmVsb3BtZW50IGJveC4KKyAgICAgKgorICAgICAqIFNvLiAgVGhpcyBob29rICppbW1lZGlhdGVseSogd3JpdGVzIG91dCB0aGUgcmVmZXJlbmNlZCBlbnRyeSBpZiBpdAorICAgICAqIGhhcyBubyB1c2UgY2FwYWJpbGl0aWVzLiAgVGhlIGNvbXBpbGVyIG1haW4gbG9vcCByZWZyYWlucyBmcm9tCisgICAgICogYWRkaW5nIHRoZSBlbnRyeSB0byB0aGUgaW4tY29yZSBsaXN0IHdoZW4gdGhpcyBob29rIGZpcmVzLiAgSWYgc29tZQorICAgICAqIG90aGVyIGVudHJ5IGxhdGVyIG5lZWRzIHRvIHJlZmVyZW5jZSBhbiBlbnRyeSB0aGF0IGdvdCB3cml0dGVuCisgICAgICogaW1tZWRpYXRlbHksIHRoYXQncyBPSzsgdGhlIHJlc29sdXRpb24gY29kZSB3aWxsIGZldGNoIGl0IG9mZiBkaXNrCisgICAgICogd2hlbiBpdCBjYW4ndCBmaW5kIGl0IGluIGNvcmUuCisgICAgICoKKyAgICAgKiBOYW1lIGNvbGxpc2lvbnMgd2lsbCBzdGlsbCBiZSBkZXRlY3RlZCwganVzdCBub3QgYXMgY2xlYW5seS4gIFRoZQorICAgICAqIHdyaXRlX2VudHJ5KCkgY29kZSBjb21wbGFpbnMgYmVmb3JlIG92ZXJ3cml0aW5nIGFuIGVudHJ5IHRoYXQKKyAgICAgKiBwb3N0ZGF0ZXMgdGhlIHRpbWUgb2YgdGljJ3MgZmlyc3QgY2FsbCB0byB3cml0ZV9lbnRyeSgpLiAgVGh1cworICAgICAqIGl0IHdpbGwgY29tcGxhaW4gYWJvdXQgb3ZlcndyaXRpbmcgZW50cmllcyBuZXdseSBtYWRlIGR1cmluZyB0aGUKKyAgICAgKiB0aWMgcnVuLCBidXQgbm90IGFib3V0IG92ZXJ3cml0aW5nIG9uZXMgdGhhdCBwcmVkYXRlIGl0LgorICAgICAqCisgICAgICogVGhlIHJlYXNvbiB0aGlzIGlzIGEgaG9vaywgYW5kIG5vdCBpbiBsaW5lIHdpdGggdGhlIHJlc3Qgb2YgdGhlCisgICAgICogY29tcGlsZXIgY29kZSwgaXMgdGhhdCB0aGUgc3VwcG9ydCBmb3IgdGVybWNhcCBmYWxsYmFjayBjYW5ub3QgYXNzdW1lCisgICAgICogaXQgaGFzIGFueXdoZXJlIHRvIHNwb29sIG91dCB0aGVzZSBlbnRyaWVzIQorICAgICAqCisgICAgICogVGhlIF9uY19zZXRfdHlwZSgpIGNhbGwgaGVyZSByZXF1aXJlcyBhIGNvbXBlbnNhdGluZyBvbmUgaW4KKyAgICAgKiBfbmNfcGFyc2VfZW50cnkoKS4KKyAgICAgKgorICAgICAqIElmIHlvdSBkZWZpbmUgSEFWRV9CSUdfQ09SRSwgeW91J2xsIGRpc2FibGUgdGhpcyBrbHVnZS4gIFRoaXMgd2lsbAorICAgICAqIG1ha2UgdGljIGEgYml0IGZhc3RlciAoYmVjYXVzZSB0aGUgcmVzb2x1dGlvbiBjb2RlIHdvbid0IGhhdmUgdG8gZG8KKyAgICAgKiBkaXNrIEkvTyBuZWFybHkgYXMgb2Z0ZW4pLgorICAgICAqLworICAgIGlmIChlcC0+bnVzZXMgPT0gMCkgeworCWludCBvbGRsaW5lID0gX25jX2N1cnJfbGluZTsKKworCXdyaXRlX2l0KGVwKTsKKwlfbmNfY3Vycl9saW5lID0gb2xkbGluZTsKKwlmcmVlKGVwLT50dGVybS5zdHJfdGFibGUpOworCXJldHVybiAoVFJVRSk7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfQklHX0NPUkUgKi8KKyAgICByZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3B1dF90cmFuc2xhdGUoaW50IGMpCisvKiBlbWl0IGEgY29tbWVudCBjaGFyLCB0cmFuc2xhdGluZyB0ZXJtaW5mbyBuYW1lcyB0byB0ZXJtY2FwIG5hbWVzICovCit7CisgICAgc3RhdGljIGJvb2wgaW5fbmFtZSA9IEZBTFNFOworICAgIHN0YXRpYyBzaXplX3QgaGF2ZSwgdXNlZDsKKyAgICBzdGF0aWMgY2hhciAqbmFtZWJ1ZiwgKnN1ZmZpeDsKKworICAgIGlmIChpbl9uYW1lKSB7CisJaWYgKHVzZWQgKyAxID49IGhhdmUpIHsKKwkgICAgaGF2ZSArPSAxMzI7CisJICAgIG5hbWVidWYgPSB0eXBlUmVhbGxvYyhjaGFyLCBoYXZlLCBuYW1lYnVmKTsKKwkgICAgc3VmZml4ID0gdHlwZVJlYWxsb2MoY2hhciwgaGF2ZSwgc3VmZml4KTsKKwl9CisJaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdAJykgeworCSAgICBuYW1lYnVmW3VzZWQrK10gPSAnXDAnOworCSAgICAodm9pZCkgcHV0Y2hhcignPCcpOworCSAgICAodm9pZCkgZnB1dHMobmFtZWJ1Ziwgc3Rkb3V0KTsKKwkgICAgcHV0Y2hhcihjKTsKKwkgICAgaW5fbmFtZSA9IEZBTFNFOworCX0gZWxzZSBpZiAoYyAhPSAnPicpIHsKKwkgICAgbmFtZWJ1Zlt1c2VkKytdID0gKGNoYXIpIGM7CisJfSBlbHNlIHsJCS8qIGFoISBjYW5kaWRhdGUgbmFtZSEgKi8KKwkgICAgY2hhciAqdXA7CisJICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqdHA7CisKKwkgICAgbmFtZWJ1Zlt1c2VkKytdID0gJ1wwJzsKKwkgICAgaW5fbmFtZSA9IEZBTFNFOworCisJICAgIHN1ZmZpeFswXSA9ICdcMCc7CisJICAgIGlmICgodXAgPSBzdHJjaHIobmFtZWJ1ZiwgJyMnKSkgIT0gMAorCQl8fCAodXAgPSBzdHJjaHIobmFtZWJ1ZiwgJz0nKSkgIT0gMAorCQl8fCAoKHVwID0gc3RyY2hyKG5hbWVidWYsICdAJykpICE9IDAgJiYgdXBbMV0gPT0gJz4nKSkgeworCQkodm9pZCkgc3RyY3B5KHN1ZmZpeCwgdXApOworCQkqdXAgPSAnXDAnOworCSAgICB9CisKKwkgICAgaWYgKCh0cCA9IG5hbWV0cmFucyhuYW1lYnVmKSkgIT0gMCkgeworCQkodm9pZCkgcHV0Y2hhcignOicpOworCQkodm9pZCkgZnB1dHModHAsIHN0ZG91dCk7CisJCSh2b2lkKSBmcHV0cyhzdWZmaXgsIHN0ZG91dCk7CisJCSh2b2lkKSBwdXRjaGFyKCc6Jyk7CisJICAgIH0gZWxzZSB7CisJCS8qIGNvdWxkbid0IGZpbmQgYSB0cmFuc2xhdGlvbiwganVzdCBkdW1wIHRoZSBuYW1lICovCisJCSh2b2lkKSBwdXRjaGFyKCc8Jyk7CisJCSh2b2lkKSBmcHV0cyhuYW1lYnVmLCBzdGRvdXQpOworCQkodm9pZCkgZnB1dHMoc3VmZml4LCBzdGRvdXQpOworCQkodm9pZCkgcHV0Y2hhcignPicpOworCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJdXNlZCA9IDA7CisJaWYgKGMgPT0gJzwnKSB7CisJICAgIGluX25hbWUgPSBUUlVFOworCX0gZWxzZSB7CisJICAgIHB1dGNoYXIoYyk7CisJfQorICAgIH0KK30KKworLyogUmV0dXJucyBhIHN0cmluZywgc3RyaXBwZWQgb2YgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlICovCitzdGF0aWMgY2hhciAqCitzdHJpcHBlZChjaGFyICpzcmMpCit7CisgICAgd2hpbGUgKGlzc3BhY2UoVUNoYXIoKnNyYykpKQorCXNyYysrOworICAgIGlmICgqc3JjICE9ICdcMCcpIHsKKwljaGFyICpkc3QgPSBzdHJjcHkoKGNoYXIgKikgbWFsbG9jKHN0cmxlbihzcmMpICsgMSksIHNyYyk7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihkc3QpOworCXdoaWxlICgtLWxlbiAhPSAwICYmIGlzc3BhY2UoVUNoYXIoZHN0W2xlbl0pKSkKKwkgICAgZHN0W2xlbl0gPSAnXDAnOworCXJldHVybiBkc3Q7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgRklMRSAqCitvcGVuX2lucHV0KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIEZJTEUgKmZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisgICAgc3RydWN0IHN0YXQgc2I7CisKKyAgICBpZiAoZnAgPT0gMCkgeworCWZwcmludGYoc3RkZXJyLCAiJXM6IENhbid0IG9wZW4gJXNcbiIsIF9uY19wcm9nbmFtZSwgZmlsZW5hbWUpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIGlmIChmc3RhdChmaWxlbm8oZnApLCAmc2IpIDwgMAorCXx8IChzYi5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKSB7CisJZnByaW50ZihzdGRlcnIsICIlczogJXMgaXMgbm90IGEgZmlsZVxuIiwgX25jX3Byb2duYW1lLCBmaWxlbmFtZSk7CisJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgcmV0dXJuIGZwOworfQorCisvKiBQYXJzZSB0aGUgIi1lIiBvcHRpb24tdmFsdWUgaW50byBhIGxpc3Qgb2YgbmFtZXMgKi8KK3N0YXRpYyBjaGFyICoqCittYWtlX25hbWVsaXN0KGNoYXIgKnNyYykKK3sKKyAgICBjaGFyICoqZHN0ID0gMDsKKworICAgIGNoYXIgKnMsICpiYXNlOworICAgIHVuc2lnbmVkIHBhc3MsIG4sIG5uOworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisKKyAgICBpZiAoc3JjID09IDApIHsKKwkvKiBFTVBUWSAqLyA7CisgICAgfSBlbHNlIGlmIChzdHJjaHIoc3JjLCAnLycpICE9IDApIHsJCS8qIGEgZmlsZW5hbWUgKi8KKwlGSUxFICpmcCA9IG9wZW5faW5wdXQoc3JjKTsKKworCWZvciAocGFzcyA9IDE7IHBhc3MgPD0gMjsgcGFzcysrKSB7CisJICAgIG5uID0gMDsKKwkgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwKSAhPSAwKSB7CisJCWlmICgocyA9IHN0cmlwcGVkKGJ1ZmZlcikpICE9IDApIHsKKwkJICAgIGlmIChkc3QgIT0gMCkKKwkJCWRzdFtubl0gPSBzOworCQkgICAgZWxzZQorCQkJZnJlZShzKTsKKwkJICAgIG5uKys7CisJCX0KKwkgICAgfQorCSAgICBpZiAocGFzcyA9PSAxKSB7CisJCWRzdCA9IHR5cGVDYWxsb2MoY2hhciAqLCBubiArIDEpOworCQlyZXdpbmQoZnApOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfSBlbHNlIHsJCQkvKiBsaXRlcmFsIGxpc3Qgb2YgbmFtZXMgKi8KKwlmb3IgKHBhc3MgPSAxOyBwYXNzIDw9IDI7IHBhc3MrKykgeworCSAgICBmb3IgKG4gPSBubiA9IDAsIGJhc2UgPSBzcmM7OyBuKyspIHsKKwkJaW50IG1hcmsgPSBzcmNbbl07CisJCWlmIChtYXJrID09ICcsJyB8fCBtYXJrID09ICdcMCcpIHsKKwkJICAgIGlmIChwYXNzID09IDEpIHsKKwkJCW5uKys7CisJCSAgICB9IGVsc2UgeworCQkJc3JjW25dID0gJ1wwJzsKKwkJCWlmICgocyA9IHN0cmlwcGVkKGJhc2UpKSAhPSAwKQorCQkJICAgIGRzdFtubisrXSA9IHM7CisJCQliYXNlID0gJnNyY1tuICsgMV07CisJCSAgICB9CisJCX0KKwkJaWYgKG1hcmsgPT0gJ1wwJykKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIGlmIChwYXNzID09IDEpCisJCWRzdCA9IHR5cGVDYWxsb2MoY2hhciAqLCBubiArIDEpOworCX0KKyAgICB9CisgICAgaWYgKHNob3dzdW1tYXJ5ICYmIChkc3QgIT0gMCkpIHsKKwlmcHJpbnRmKGxvZ19mcCwgIkVudHJpZXMgdGhhdCB3aWxsIGJlIGNvbXBpbGVkOlxuIik7CisJZm9yIChuID0gMDsgZHN0W25dICE9IDA7IG4rKykKKwkgICAgZnByaW50Zihsb2dfZnAsICIldTolc1xuIiwgbiArIDEsIGRzdFtuXSk7CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyBib29sCittYXRjaGVzKGNoYXIgKipuZWVkbGUsIGNvbnN0IGNoYXIgKmhheXN0YWNrKQorLyogZG9lcyBlbnRyeSBpbiBuZWVkbGUgbGlzdCBtYXRjaCB8LXNlcGFyYXRlZCBmaWVsZCBpbiBoYXlzdGFjaz8gKi8KK3sKKyAgICBib29sIGNvZGUgPSBGQUxTRTsKKyAgICBzaXplX3QgbjsKKworICAgIGlmIChuZWVkbGUgIT0gMCkgeworCWZvciAobiA9IDA7IG5lZWRsZVtuXSAhPSAwOyBuKyspIHsKKwkgICAgaWYgKF9uY19uYW1lX21hdGNoKGhheXN0YWNrLCBuZWVkbGVbbl0sICJ8IikpIHsKKwkJY29kZSA9IFRSVUU7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0gZWxzZQorCWNvZGUgPSBUUlVFOworICAgIHJldHVybiAoY29kZSk7Cit9CisKK3N0YXRpYyBGSUxFICoKK29wZW5fdGVtcGZpbGUoY2hhciAqbmFtZSkKK3sKKyAgICBGSUxFICpyZXN1bHQgPSAwOworI2lmIEhBVkVfTUtTVEVNUAorICAgIGludCBmZCA9IG1rc3RlbXAobmFtZSk7CisgICAgaWYgKGZkID49IDApCisJcmVzdWx0ID0gZmRvcGVuKGZkLCAidyIpOworI2Vsc2UKKyAgICBpZiAodG1wbmFtKG5hbWUpICE9IDApCisJcmVzdWx0ID0gZm9wZW4obmFtZSwgInciKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNoYXIgbXlfdG1wbmFtZVtQQVRIX01BWF07CisgICAgaW50IHZfb3B0ID0gLTEsIGRlYnVnX2xldmVsOworICAgIGludCBzbWFydF9kZWZhdWx0cyA9IFRSVUU7CisgICAgY2hhciAqdGVybWNhcDsKKyAgICBFTlRSWSAqcXA7CisKKyAgICBpbnQgdGhpc19vcHQsIGxhc3Rfb3B0ID0gJz8nOworCisgICAgaW50IG91dGZvcm0gPSBGX1RFUk1JTkZPOwkvKiBvdXRwdXQgZm9ybWF0ICovCisgICAgaW50IHNvcnRtb2RlID0gU19URVJNSU5GTzsJLyogc29ydF9tb2RlICovCisKKyAgICBpbnQgd2lkdGggPSA2MDsKKyAgICBib29sIGZvcm1hdHRlZCA9IEZBTFNFOwkvKiByZWZvcm1hdCBjb21wbGV4IHN0cmluZ3M/ICovCisgICAgYm9vbCBsaXRlcmFsID0gRkFMU0U7CS8qIHN1cHByZXNzIHBvc3QtcHJvY2Vzc2luZz8gKi8KKyAgICBpbnQgbnVtYmVycyA9IDA7CQkvKiBmb3JtYXQgIiUnY2hhciciIHRvL2Zyb20gIiV7bnVtYmVyfSIgKi8KKyAgICBib29sIGZvcmNlcmVzb2x2ZSA9IEZBTFNFOwkvKiBmb3JjZSByZXNvbHV0aW9uICovCisgICAgYm9vbCBsaW1pdGVkID0gVFJVRTsKKyAgICBjaGFyICp0dmVyc2lvbiA9IChjaGFyICopIE5VTEw7CisgICAgY29uc3QgY2hhciAqc291cmNlX2ZpbGUgPSAidGVybWluZm8iOworICAgIGNoYXIgKipuYW1lbHN0ID0gMDsKKyAgICBjaGFyICpvdXRkaXIgPSAoY2hhciAqKSBOVUxMOworICAgIGJvb2wgY2hlY2tfb25seSA9IEZBTFNFOworICAgIGJvb2wgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUgPSBGQUxTRTsKKworICAgIGxvZ19mcCA9IHN0ZGVycjsKKworICAgIF9uY19wcm9nbmFtZSA9IF9uY19yb290bmFtZShhcmd2WzBdKTsKKworICAgIGlmICgoaW5mb2R1bXAgPSAoc3RyY21wKF9uY19wcm9nbmFtZSwgUFJPR19DQVBUT0lORk8pID09IDApKSAhPSBGQUxTRSkgeworCW91dGZvcm0gPSBGX1RFUk1JTkZPOworCXNvcnRtb2RlID0gU19URVJNSU5GTzsKKyAgICB9CisgICAgaWYgKChjYXBkdW1wID0gKHN0cmNtcChfbmNfcHJvZ25hbWUsIFBST0dfSU5GT1RPQ0FQKSA9PSAwKSkgIT0gRkFMU0UpIHsKKwlvdXRmb3JtID0gRl9URVJNQ0FQOworCXNvcnRtb2RlID0gU19URVJNQ0FQOworICAgIH0KKyNpZiBOQ1VSU0VTX1hOQU1FUworICAgIHVzZV9leHRlbmRlZF9uYW1lcyhGQUxTRSk7CisjZW5kaWYKKworICAgIC8qCisgICAgICogUHJvY2Vzc2luZyBhcmd1bWVudHMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQsIHNpbmNlIHNvbWVvbmUgbWFkZSBhCisgICAgICogZGVzaWduIGRlY2lzaW9uIHRvIGFsbG93IHRoZSBudW1lcmljIHZhbHVlcyBmb3IgLXcsIC12IG9wdGlvbnMgdG8KKyAgICAgKiBiZSBvcHRpb25hbC4KKyAgICAgKi8KKyAgICB3aGlsZSAoKHRoaXNfb3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsCisJCQkgICAgICAiMDEyMzQ1Njc4OUNJTE5SOlRVVmFjZTpmR2dvOnJzdHZ3eCIpKSAhPSAtMSkgeworCWlmIChpc2RpZ2l0KHRoaXNfb3B0KSkgeworCSAgICBzd2l0Y2ggKGxhc3Rfb3B0KSB7CisJICAgIGNhc2UgJ3YnOgorCQl2X29wdCA9ICh2X29wdCAqIDEwKSArICh0aGlzX29wdCAtICcwJyk7CisJCWJyZWFrOworCSAgICBjYXNlICd3JzoKKwkJd2lkdGggPSAod2lkdGggKiAxMCkgKyAodGhpc19vcHQgLSAnMCcpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJaWYgKHRoaXNfb3B0ICE9ICcxJykKKwkJICAgIHVzYWdlKCk7CisJCWxhc3Rfb3B0ID0gdGhpc19vcHQ7CisJCXdpZHRoID0gMDsKKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9CisJc3dpdGNoICh0aGlzX29wdCkgeworCWNhc2UgJ0MnOgorCSAgICBjYXBkdW1wID0gVFJVRTsKKwkgICAgb3V0Zm9ybSA9IEZfVEVSTUNBUDsKKwkgICAgc29ydG1vZGUgPSBTX1RFUk1DQVA7CisJICAgIGJyZWFrOworCWNhc2UgJ0knOgorCSAgICBpbmZvZHVtcCA9IFRSVUU7CisJICAgIG91dGZvcm0gPSBGX1RFUk1JTkZPOworCSAgICBzb3J0bW9kZSA9IFNfVEVSTUlORk87CisJICAgIGJyZWFrOworCWNhc2UgJ0wnOgorCSAgICBpbmZvZHVtcCA9IFRSVUU7CisJICAgIG91dGZvcm0gPSBGX1ZBUklBQkxFOworCSAgICBzb3J0bW9kZSA9IFNfVkFSSUFCTEU7CisJICAgIGJyZWFrOworCWNhc2UgJ04nOgorCSAgICBzbWFydF9kZWZhdWx0cyA9IEZBTFNFOworCSAgICBsaXRlcmFsID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnUic6CisJICAgIHR2ZXJzaW9uID0gb3B0YXJnOworCSAgICBicmVhazsKKwljYXNlICdUJzoKKwkgICAgbGltaXRlZCA9IEZBTFNFOworCSAgICBicmVhazsKKwljYXNlICdVJzoKKwkgICAgbGl0ZXJhbCA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ1YnOgorCSAgICBwdXRzKGN1cnNlc192ZXJzaW9uKCkpOworCSAgICBjbGVhbnVwKG5hbWVsc3QpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworCWNhc2UgJ2MnOgorCSAgICBjaGVja19vbmx5ID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnZSc6CisJICAgIG5hbWVsc3QgPSBtYWtlX25hbWVsaXN0KG9wdGFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ2YnOgorCSAgICBmb3JtYXR0ZWQgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdHJzoKKwkgICAgbnVtYmVycyA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJ2cnOgorCSAgICBudW1iZXJzID0gLTE7CisJICAgIGJyZWFrOworCWNhc2UgJ28nOgorCSAgICBvdXRkaXIgPSBvcHRhcmc7CisJICAgIGJyZWFrOworCWNhc2UgJ3InOgorCSAgICBmb3JjZXJlc29sdmUgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdzJzoKKwkgICAgc2hvd3N1bW1hcnkgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICd2JzoKKwkgICAgdl9vcHQgPSAwOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkgICAgd2lkdGggPSAwOworCSAgICBicmVhazsKKyNpZiBOQ1VSU0VTX1hOQU1FUworCWNhc2UgJ3QnOgorCSAgICBfbmNfZGlzYWJsZV9wZXJpb2QgPSBGQUxTRTsKKwkgICAgc3VwcHJlc3NfdW50cmFuc2xhdGFibGUgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdhJzoKKwkgICAgX25jX2Rpc2FibGVfcGVyaW9kID0gVFJVRTsKKwkgICAgLyogRkFMTFRIUlUgKi8KKwljYXNlICd4JzoKKwkgICAgdXNlX2V4dGVuZGVkX25hbWVzKFRSVUUpOworCSAgICBicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJfQorCWxhc3Rfb3B0ID0gdGhpc19vcHQ7CisgICAgfQorCisgICAgZGVidWdfbGV2ZWwgPSAodl9vcHQgPiAwKSA/IHZfb3B0IDogKHZfb3B0ID09IDApOworICAgIHNldF90cmFjZV9sZXZlbChkZWJ1Z19sZXZlbCk7CisKKyAgICBpZiAoX25jX3RyYWNpbmcpIHsKKwlzYXZlX2NoZWNrX3Rlcm10eXBlID0gX25jX2NoZWNrX3Rlcm10eXBlMjsKKwlfbmNfY2hlY2tfdGVybXR5cGUyID0gY2hlY2tfdGVybXR5cGU7CisgICAgfQorI2lmICFIQVZFX0JJR19DT1JFCisgICAgLyoKKyAgICAgKiBBYWFyZ2ghIGltbWVkaG9vayBzZXJpb3VzbHkgaG9zZXMgdXMhCisgICAgICoKKyAgICAgKiBPbmUgcHJvYmxlbSB3aXRoIGltbWVkaG9vayBpcyBpdCBtZWFucyB3ZSBjYW4ndCBkbyAtZS4gIFByb2JsZW0KKyAgICAgKiBpcyB0aGF0IHdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IGZvciBlYWNoIHRlcm1pbmFsIGxpc3RlZCwgYWxsIHRoZQorICAgICAqIHRlcm1pbmFscyBpdCBkZXBlbmRzIG9uIHdpbGwgaGF2ZSBiZWVuIGtlcHQgaW4gY29yZSBmb3IgcmVmZXJlbmNlCisgICAgICogcmVzb2x1dGlvbiAtLSBpbiBmYWN0IGl0J3MgY2VydGFpbiB0aGUgcHJpbWl0aXZlIHR5cGVzIGF0IHRoZSBlbmQKKyAgICAgKiBvZiByZWZlcmVuY2UgY2hhaW5zICp3b24ndCogYmUgaW4gY29yZSB1bmxlc3MgdGhleSB3ZXJlIGV4cGxpY2l0bHkKKyAgICAgKiBpbiB0aGUgc2VsZWN0IGxpc3QgdGhlbXNlbHZlcy4KKyAgICAgKi8KKyAgICBpZiAobmFtZWxzdCAmJiAoIWluZm9kdW1wICYmICFjYXBkdW1wKSkgeworCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICAgICJTb3JyeSwgLWUgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IC1JIG9yIC1DXG4iKTsKKwljbGVhbnVwKG5hbWVsc3QpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfQklHX0NPUkUgKi8KKworICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisJc291cmNlX2ZpbGUgPSBhcmd2W29wdGluZCsrXTsKKwlpZiAob3B0aW5kIDwgYXJnYykgeworCSAgICBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICIlczogVG9vIG1hbnkgZmlsZSBuYW1lcy4gIFVzYWdlOlxuXHQlcyAlcyIsCisJCSAgICBfbmNfcHJvZ25hbWUsCisJCSAgICBfbmNfcHJvZ25hbWUsCisJCSAgICB1c2FnZV9zdHJpbmcpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKyAgICB9IGVsc2UgeworCWlmIChpbmZvZHVtcCA9PSBUUlVFKSB7CisJICAgIC8qIGNhcHRvaW5mbydzIG5vLWFyZ3VtZW50IGNhc2UgKi8KKwkgICAgc291cmNlX2ZpbGUgPSAiL2V0Yy90ZXJtY2FwIjsKKwkgICAgaWYgKCh0ZXJtY2FwID0gZ2V0ZW52KCJURVJNQ0FQIikpICE9IDAKKwkJJiYgKG5hbWVsc3QgPSBtYWtlX25hbWVsaXN0KGdldGVudigiVEVSTSIpKSkgIT0gMCkgeworCQlpZiAoYWNjZXNzKHRlcm1jYXAsIEZfT0spID09IDApIHsKKwkJICAgIC8qIGZpbGUgZXhpc3RzICovCisJCSAgICBzb3VyY2VfZmlsZSA9IHRlcm1jYXA7CisJCX0gZWxzZSBpZiAoKHRtcF9mcCA9IG9wZW5fdGVtcGZpbGUoc3RyY3B5KG15X3RtcG5hbWUsCisJCQkJCQkJICAiL3RtcC9YWFhYWFgiKSkpCisJCQkgICAhPSAwKSB7CisJCSAgICBzb3VyY2VfZmlsZSA9IG15X3RtcG5hbWU7CisJCSAgICBmcHJpbnRmKHRtcF9mcCwgIiVzXG4iLCB0ZXJtY2FwKTsKKwkJICAgIGZjbG9zZSh0bXBfZnApOworCQkgICAgdG1wX2ZwID0gb3Blbl9pbnB1dChzb3VyY2VfZmlsZSk7CisJCSAgICB0b19yZW1vdmUgPSBzb3VyY2VfZmlsZTsKKwkJfSBlbHNlIHsKKwkJICAgIGZhaWxlZCgidG1wbmFtIik7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIC8qIHRpYyAqLworCSAgICBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICIlczogRmlsZSBuYW1lIG5lZWRlZC4gIFVzYWdlOlxuXHQlcyAlcyIsCisJCSAgICBfbmNfcHJvZ25hbWUsCisJCSAgICBfbmNfcHJvZ25hbWUsCisJCSAgICB1c2FnZV9zdHJpbmcpOworCSAgICBjbGVhbnVwKG5hbWVsc3QpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKyAgICB9CisKKyAgICBpZiAodG1wX2ZwID09IDApCisJdG1wX2ZwID0gb3Blbl9pbnB1dChzb3VyY2VfZmlsZSk7CisKKyAgICBpZiAoaW5mb2R1bXApCisJZHVtcF9pbml0KHR2ZXJzaW9uLAorCQkgIHNtYXJ0X2RlZmF1bHRzCisJCSAgPyBvdXRmb3JtCisJCSAgOiBGX0xJVEVSQUwsCisJCSAgc29ydG1vZGUsIHdpZHRoLCBkZWJ1Z19sZXZlbCwgZm9ybWF0dGVkKTsKKyAgICBlbHNlIGlmIChjYXBkdW1wKQorCWR1bXBfaW5pdCh0dmVyc2lvbiwKKwkJICBvdXRmb3JtLAorCQkgIHNvcnRtb2RlLCB3aWR0aCwgZGVidWdfbGV2ZWwsIEZBTFNFKTsKKworICAgIC8qIHBhcnNlIGVudHJpZXMgb3V0IG9mIHRoZSBzb3VyY2UgZmlsZSAqLworICAgIF9uY19zZXRfc291cmNlKHNvdXJjZV9maWxlKTsKKyNpZiAhSEFWRV9CSUdfQ09SRQorICAgIGlmICghKGNoZWNrX29ubHkgfHwgaW5mb2R1bXAgfHwgY2FwZHVtcCkpCisJX25jX3NldF93cml0ZWRpcihvdXRkaXIpOworI2VuZGlmIC8qIEhBVkVfQklHX0NPUkUgKi8KKyAgICBfbmNfcmVhZF9lbnRyeV9zb3VyY2UodG1wX2ZwLCAoY2hhciAqKSBOVUxMLAorCQkJICAhc21hcnRfZGVmYXVsdHMgfHwgbGl0ZXJhbCwgRkFMU0UsCisJCQkgICgoY2hlY2tfb25seSB8fCBpbmZvZHVtcCB8fCBjYXBkdW1wKQorCQkJICAgPyBOVUxMSE9PSworCQkJICAgOiBpbW1lZGhvb2spKTsKKworICAgIC8qIGRvIHVzZSByZXNvbHV0aW9uICovCisgICAgaWYgKGNoZWNrX29ubHkgfHwgKCFpbmZvZHVtcCAmJiAhY2FwZHVtcCkgfHwgZm9yY2VyZXNvbHZlKSB7CisJaWYgKCFfbmNfcmVzb2x2ZV91c2VzMihUUlVFLCBsaXRlcmFsKSAmJiAhY2hlY2tfb25seSkgeworCSAgICBjbGVhbnVwKG5hbWVsc3QpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKyAgICB9CisKKyAgICAvKiBsZW5ndGggY2hlY2sgKi8KKyAgICBpZiAoY2hlY2tfb25seSAmJiAoY2FwZHVtcCB8fCBpbmZvZHVtcCkpIHsKKwlmb3JfZW50cnlfbGlzdChxcCkgeworCSAgICBpZiAobWF0Y2hlcyhuYW1lbHN0LCBxcC0+dHRlcm0udGVybV9uYW1lcykpIHsKKwkJaW50IGxlbiA9IGZtdF9lbnRyeSgmcXAtPnR0ZXJtLCBOVUxMLCBGQUxTRSwgVFJVRSwgaW5mb2R1bXAsIG51bWJlcnMpOworCisJCWlmIChsZW4gPiAoaW5mb2R1bXAgPyBNQVhfVEVSTUlORk9fTEVOR1RIIDogTUFYX1RFUk1DQVBfTEVOR1RIKSkKKwkJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAid2FybmluZzogcmVzb2x2ZWQgJXMgZW50cnkgaXMgJWQgYnl0ZXMgbG9uZ1xuIiwKKwkJCQkgICBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcyksCisJCQkJICAgbGVuKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiB3cml0ZSBvciBkdW1wIGFsbCBlbnRyaWVzICovCisgICAgaWYgKCFjaGVja19vbmx5KSB7CisJaWYgKCFpbmZvZHVtcCAmJiAhY2FwZHVtcCkgeworCSAgICBfbmNfc2V0X3dyaXRlZGlyKG91dGRpcik7CisJICAgIGZvcl9lbnRyeV9saXN0KHFwKSB7CisJCWlmIChtYXRjaGVzKG5hbWVsc3QsIHFwLT50dGVybS50ZXJtX25hbWVzKSkKKwkJICAgIHdyaXRlX2l0KHFwKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIC8qIHRoaXMgaXMgaW4gY2FzZSBpbmZvdG9jYXAoKSBnZW5lcmF0ZXMgd2FybmluZ3MgKi8KKwkgICAgX25jX2N1cnJfY29sID0gX25jX2N1cnJfbGluZSA9IC0xOworCisJICAgIGZvcl9lbnRyeV9saXN0KHFwKSB7CisJCWlmIChtYXRjaGVzKG5hbWVsc3QsIHFwLT50dGVybS50ZXJtX25hbWVzKSkgeworCQkgICAgaW50IGogPSBxcC0+Y2VuZCAtIHFwLT5jc3RhcnQ7CisJCSAgICBpbnQgbGVuID0gMDsKKworCQkgICAgLyogdGhpcyBpcyBpbiBjYXNlIGluZm90b2NhcCgpIGdlbmVyYXRlcyB3YXJuaW5ncyAqLworCQkgICAgX25jX3NldF90eXBlKF9uY19maXJzdF9uYW1lKHFwLT50dGVybS50ZXJtX25hbWVzKSk7CisKKwkJICAgICh2b2lkKSBmc2Vlayh0bXBfZnAsIHFwLT5jc3RhcnQsIFNFRUtfU0VUKTsKKwkJICAgIHdoaWxlIChqLS0gPiAwKSB7CisJCQlpZiAoaW5mb2R1bXApCisJCQkgICAgKHZvaWQpIHB1dGNoYXIoZmdldGModG1wX2ZwKSk7CisJCQllbHNlCisJCQkgICAgcHV0X3RyYW5zbGF0ZShmZ2V0Yyh0bXBfZnApKTsKKwkJICAgIH0KKworCQkgICAgZHVtcF9lbnRyeSgmcXAtPnR0ZXJtLCBzdXBwcmVzc191bnRyYW5zbGF0YWJsZSwKKwkJCSAgICAgICBsaW1pdGVkLCBudW1iZXJzLCBOVUxMKTsKKwkJICAgIGZvciAoaiA9IDA7IGogPCAoaW50KSBxcC0+bnVzZXM7IGorKykKKwkJCWR1bXBfdXNlcyhxcC0+dXNlc1tqXS5uYW1lLCAhY2FwZHVtcCk7CisJCSAgICBsZW4gPSBzaG93X2VudHJ5KCk7CisJCSAgICBpZiAoZGVidWdfbGV2ZWwgIT0gMCAmJiAhbGltaXRlZCkKKwkJCXByaW50ZigiIyBsZW5ndGg9JWRcbiIsIGxlbik7CisJCX0KKwkgICAgfQorCSAgICBpZiAoIW5hbWVsc3QgJiYgX25jX3RhaWwpIHsKKwkJaW50IGMsIG9sZGMgPSAnXDAnOworCQlib29sIGluX2NvbW1lbnQgPSBGQUxTRTsKKwkJYm9vbCB0cmFpbGluZ19jb21tZW50ID0gRkFMU0U7CisKKwkJKHZvaWQpIGZzZWVrKHRtcF9mcCwgX25jX3RhaWwtPmNlbmQsIFNFRUtfU0VUKTsKKwkJd2hpbGUgKChjID0gZmdldGModG1wX2ZwKSkgIT0gRU9GKSB7CisJCSAgICBpZiAob2xkYyA9PSAnXG4nKSB7CisJCQlpZiAoYyA9PSAnIycpIHsKKwkJCSAgICB0cmFpbGluZ19jb21tZW50ID0gVFJVRTsKKwkJCSAgICBpbl9jb21tZW50ID0gVFJVRTsKKwkJCX0gZWxzZSB7CisJCQkgICAgaW5fY29tbWVudCA9IEZBTFNFOworCQkJfQorCQkgICAgfQorCQkgICAgaWYgKHRyYWlsaW5nX2NvbW1lbnQKKwkJCSYmIChpbl9jb21tZW50IHx8IChvbGRjID09ICdcbicgJiYgYyA9PSAnXG4nKSkpCisJCQlwdXRjaGFyKGMpOworCQkgICAgb2xkYyA9IGM7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKiBTaG93IHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCBlbnRyaWVzIHdlcmUgd3JpdHRlbiwgYW5kIHRoZSB0b3RhbAorICAgICAqIG51bWJlciBvZiBlbnRyaWVzCisgICAgICovCisgICAgaWYgKHNob3dzdW1tYXJ5CisJJiYgKCEoY2hlY2tfb25seSB8fCBpbmZvZHVtcCB8fCBjYXBkdW1wKSkpIHsKKwlpbnQgdG90YWwgPSBfbmNfdGljX3dyaXR0ZW4oKTsKKwlpZiAodG90YWwgIT0gMCkKKwkgICAgZnByaW50Zihsb2dfZnAsICIlZCBlbnRyaWVzIHdyaXR0ZW4gdG8gJXNcbiIsCisJCSAgICB0b3RhbCwKKwkJICAgIF9uY190aWNfZGlyKChjaGFyICopIDApKTsKKwllbHNlCisJICAgIGZwcmludGYobG9nX2ZwLCAiTm8gZW50cmllcyB3cml0dGVuXG4iKTsKKyAgICB9CisgICAgY2xlYW51cChuYW1lbHN0KTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisvKgorICogVGhpcyBiaXQgb2YgbGVnZXJkZW1haW4gdHVybnMgYWxsIHRoZSB0ZXJtaW5mbyB2YXJpYWJsZSBuYW1lcyBpbnRvCisgKiByZWZlcmVuY2VzIHRvIGxvY2F0aW9ucyBpbiB0aGUgYXJyYXlzIEJvb2xlYW5zLCBOdW1iZXJzLCBhbmQgU3RyaW5ncyAtLS0KKyAqIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkIChzZWUgY29tcF9wYXJzZS5jKS4KKyAqLworI3VuZGVmIENVUgorI2RlZmluZSBDVVIgdHAtPgorCisvKgorICogQ2hlY2sgaWYgdGhlIGFsdGVybmF0ZSBjaGFyYWN0ZXItc2V0IGNhcGFiaWxpdGllcyBhcmUgY29uc2lzdGVudC4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2FjcyhURVJNVFlQRSAqdHApCit7CisgICAgaWYgKFZBTElEX1NUUklORyhhY3NfY2hhcnMpKSB7CisJY29uc3QgY2hhciAqYm94ZXMgPSAibG1ranR1dndxeG4iOworCWNoYXIgbWFwcGVkWzI1Nl07CisJY2hhciBtaXNzaW5nWzI1Nl07CisJY29uc3QgY2hhciAqcDsKKwljaGFyICpxOworCisJbWVtc2V0KG1hcHBlZCwgMCwgc2l6ZW9mKG1hcHBlZCkpOworCWZvciAocCA9IGFjc19jaGFyczsgKnAgIT0gJ1wwJzsgcCArPSAyKSB7CisJICAgIGlmIChwWzFdID09ICdcMCcpIHsKKwkJX25jX3dhcm5pbmcoImFjc2MgaGFzIG9kZCBudW1iZXIgb2YgY2hhcmFjdGVycyIpOworCQlicmVhazsKKwkgICAgfQorCSAgICBtYXBwZWRbVUNoYXIocFswXSldID0gcFsxXTsKKwl9CisKKwlpZiAobWFwcGVkW1VDaGFyKCdJJyldICYmICFtYXBwZWRbVUNoYXIoJ2knKV0pIHsKKwkgICAgX25jX3dhcm5pbmcoImFjc2MgcmVmZXJzIHRvICdJJywgd2hpY2ggaXMgcHJvYmFibHkgYW4gZXJyb3IiKTsKKwl9CisKKwlmb3IgKHAgPSBib3hlcywgcSA9IG1pc3Npbmc7ICpwICE9ICdcMCc7ICsrcCkgeworCSAgICBpZiAoIW1hcHBlZFtVQ2hhcihwWzBdKV0pIHsKKwkJKnErKyA9IHBbMF07CisJICAgIH0KKwl9CisJKnEgPSAnXDAnOworCisJYXNzZXJ0KHN0cmxlbihtaXNzaW5nKSA8PSBzdHJsZW4oYm94ZXMpKTsKKwlpZiAoKm1pc3NpbmcgIT0gJ1wwJyAmJiBzdHJjbXAobWlzc2luZywgYm94ZXMpKSB7CisJICAgIF9uY193YXJuaW5nKCJhY3NjIGlzIG1pc3Npbmcgc29tZSBsaW5lLWRyYXdpbmcgbWFwcGluZzogJXMiLCBtaXNzaW5nKTsKKwl9CisgICAgfQorfQorCisvKgorICogQ2hlY2sgaWYgdGhlIGNvbG9yIGNhcGFiaWxpdGllcyBhcmUgY29uc2lzdGVudAorICovCitzdGF0aWMgdm9pZAorY2hlY2tfY29sb3JzKFRFUk1UWVBFICp0cCkKK3sKKyAgICBpZiAoKG1heF9jb2xvcnMgPiAwKSAhPSAobWF4X3BhaXJzID4gMCkKKwl8fCAoKG1heF9jb2xvcnMgPiBtYXhfcGFpcnMpICYmIChpbml0aWFsaXplX3BhaXIgPT0gMCkpKQorCV9uY193YXJuaW5nKCJpbmNvbnNpc3RlbnQgdmFsdWVzIGZvciBtYXhfY29sb3JzICglZCkgYW5kIG1heF9wYWlycyAoJWQpIiwKKwkJICAgIG1heF9jb2xvcnMsIG1heF9wYWlycyk7CisKKyAgICBQQUlSRUQoc2V0X2ZvcmVncm91bmQsIHNldF9iYWNrZ3JvdW5kKTsKKyAgICBQQUlSRUQoc2V0X2FfZm9yZWdyb3VuZCwgc2V0X2FfYmFja2dyb3VuZCk7CisgICAgUEFJUkVEKHNldF9jb2xvcl9wYWlyLCBpbml0aWFsaXplX3BhaXIpOworCisgICAgaWYgKFZBTElEX1NUUklORyhzZXRfZm9yZWdyb3VuZCkKKwkmJiBWQUxJRF9TVFJJTkcoc2V0X2FfZm9yZWdyb3VuZCkKKwkmJiAhX25jX2NhcGNtcChzZXRfZm9yZWdyb3VuZCwgc2V0X2FfZm9yZWdyb3VuZCkpCisJX25jX3dhcm5pbmcoImV4cGVjdGVkIHNldGYvc2V0YWYgdG8gYmUgZGlmZmVyZW50Iik7CisKKyAgICBpZiAoVkFMSURfU1RSSU5HKHNldF9iYWNrZ3JvdW5kKQorCSYmIFZBTElEX1NUUklORyhzZXRfYV9iYWNrZ3JvdW5kKQorCSYmICFfbmNfY2FwY21wKHNldF9iYWNrZ3JvdW5kLCBzZXRfYV9iYWNrZ3JvdW5kKSkKKwlfbmNfd2FybmluZygiZXhwZWN0ZWQgc2V0Yi9zZXRhYiB0byBiZSBkaWZmZXJlbnQiKTsKKworICAgIC8qIHNlZTogaGFzX2NvbG9ycygpICovCisgICAgaWYgKFZBTElEX05VTUVSSUMobWF4X2NvbG9ycykgJiYgVkFMSURfTlVNRVJJQyhtYXhfcGFpcnMpCisJJiYgKCgoc2V0X2ZvcmVncm91bmQgIT0gTlVMTCkKKwkgICAgICYmIChzZXRfYmFja2dyb3VuZCAhPSBOVUxMKSkKKwkgICAgfHwgKChzZXRfYV9mb3JlZ3JvdW5kICE9IE5VTEwpCisJCSYmIChzZXRfYV9iYWNrZ3JvdW5kICE9IE5VTEwpKQorCSAgICB8fCBzZXRfY29sb3JfcGFpcikpIHsKKwlpZiAoIVZBTElEX1NUUklORyhvcmlnX3BhaXIpICYmICFWQUxJRF9TVFJJTkcob3JpZ19jb2xvcnMpKQorCSAgICBfbmNfd2FybmluZygiZXhwZWN0ZWQgZWl0aGVyIG9wL29jIHN0cmluZyBmb3IgcmVzZXR0aW5nIGNvbG9ycyIpOworICAgIH0KK30KKworc3RhdGljIGNoYXIKK2tleXBhZF9maW5hbChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICAgY2hhciByZXN1bHQgPSAnXDAnOworCisgICAgaWYgKFZBTElEX1NUUklORyhzdHJpbmcpCisJJiYgKnN0cmluZysrID09ICdcMDMzJworCSYmICpzdHJpbmcrKyA9PSAnTycKKwkmJiBzdHJsZW4oc3RyaW5nKSA9PSAxKSB7CisJcmVzdWx0ID0gKnN0cmluZzsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitrZXlwYWRfaW5kZXgoY29uc3QgY2hhciAqc3RyaW5nKQoreworICAgIGNoYXIgKnRlc3Q7CisgICAgY29uc3QgY2hhciAqbGlzdCA9ICJQUVJTd3h5bXR1dmxxcnNQcG4iOwkvKiBhcHAta2V5cGFkIGV4Y2VwdCAiRW50ZXIiICovCisgICAgaW50IGNoOworICAgIGludCByZXN1bHQgPSAtMTsKKworICAgIGlmICgoY2ggPSBrZXlwYWRfZmluYWwoc3RyaW5nKSkgIT0gJ1wwJykgeworCXRlc3QgPSBzdHJjaHIobGlzdCwgY2gpOworCWlmICh0ZXN0ICE9IDApCisJICAgIHJlc3VsdCA9ICh0ZXN0IC0gbGlzdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgTUFYX0tQIDUKKy8qCisgKiBEbyBhIHF1aWNrIHNhbml0eS1jaGVjayBmb3IgdnQxMDAtc3R5bGUga2V5cGFkcyB0byBzZWUgaWYgdGhlIDUta2V5IGtleXBhZAorICogaXMgbWFwcGVkIGluY29uc2lzdGVudGx5LgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfa2V5cGFkKFRFUk1UWVBFICp0cCkKK3sKKyAgICBjaGFyIHNob3dbODBdOworCisgICAgaWYgKFZBTElEX1NUUklORyhrZXlfYTEpICYmCisJVkFMSURfU1RSSU5HKGtleV9hMykgJiYKKwlWQUxJRF9TVFJJTkcoa2V5X2IyKSAmJgorCVZBTElEX1NUUklORyhrZXlfYzEpICYmCisJVkFMSURfU1RSSU5HKGtleV9jMykpIHsKKwljaGFyIGZpbmFsW01BWF9LUCArIDFdOworCWludCBsaXN0W01BWF9LUF07CisJaW50IGluY3JlYXNlID0gMDsKKwlpbnQgaiwgaywga2s7CisJaW50IGxhc3Q7CisJaW50IHRlc3Q7CisKKwlmaW5hbFswXSA9IGtleXBhZF9maW5hbChrZXlfYTEpOworCWZpbmFsWzFdID0ga2V5cGFkX2ZpbmFsKGtleV9hMyk7CisJZmluYWxbMl0gPSBrZXlwYWRfZmluYWwoa2V5X2IyKTsKKwlmaW5hbFszXSA9IGtleXBhZF9maW5hbChrZXlfYzEpOworCWZpbmFsWzRdID0ga2V5cGFkX2ZpbmFsKGtleV9jMyk7CisJZmluYWxbNV0gPSAnXDAnOworCisJLyogc3BlY2lhbCBjYXNlOiBsZWdhY3kgY29kaW5nIHVzaW5nIDEsMiwzLDAsLiBvbiB0aGUgYm90dG9tICovCisJYXNzZXJ0KHN0cmxlbihmaW5hbCkgPD0gTUFYX0tQKTsKKwlpZiAoIXN0cmNtcChmaW5hbCwgInFzcnBuIikpCisJICAgIHJldHVybjsKKworCWxpc3RbMF0gPSBrZXlwYWRfaW5kZXgoa2V5X2ExKTsKKwlsaXN0WzFdID0ga2V5cGFkX2luZGV4KGtleV9hMyk7CisJbGlzdFsyXSA9IGtleXBhZF9pbmRleChrZXlfYjIpOworCWxpc3RbM10gPSBrZXlwYWRfaW5kZXgoa2V5X2MxKTsKKwlsaXN0WzRdID0ga2V5cGFkX2luZGV4KGtleV9jMyk7CisKKwkvKiBjaGVjayB0aGF0IHRoZXkncmUgYWxsIHZ0MTAwIGtleXMgKi8KKwlmb3IgKGogPSAwOyBqIDwgTUFYX0tQOyArK2opIHsKKwkgICAgaWYgKGxpc3Rbal0gPCAwKSB7CisJCXJldHVybjsKKwkgICAgfQorCX0KKworCS8qIGNoZWNrIGlmIHRoZXkncmUgYWxsIGluIGluY3JlYXNpbmcgb3JkZXIgKi8KKwlmb3IgKGogPSAxOyBqIDwgTUFYX0tQOyArK2opIHsKKwkgICAgaWYgKGxpc3Rbal0gPiBsaXN0W2ogLSAxXSkgeworCQkrK2luY3JlYXNlOworCSAgICB9CisJfQorCWlmIChpbmNyZWFzZSAhPSAoTUFYX0tQIC0gMSkpIHsKKwkgICAgc2hvd1swXSA9ICdcMCc7CisKKwkgICAgZm9yIChqID0gMCwgbGFzdCA9IC0xOyBqIDwgTUFYX0tQOyArK2opIHsKKwkJZm9yIChrID0gMCwga2sgPSAtMSwgdGVzdCA9IDEwMDsgayA8IDU7ICsraykgeworCQkgICAgaWYgKGxpc3Rba10gPiBsYXN0ICYmCisJCQlsaXN0W2tdIDwgdGVzdCkgeworCQkJdGVzdCA9IGxpc3Rba107CisJCQlrayA9IGs7CisJCSAgICB9CisJCX0KKwkJbGFzdCA9IHRlc3Q7CisJCWFzc2VydChzdHJsZW4oc2hvdykgPCAoTUFYX0tQICogNCkpOworCQlzd2l0Y2ggKGtrKSB7CisJCWNhc2UgMDoKKwkJICAgIHN0cmNhdChzaG93LCAiIGthMSIpOworCQkgICAgYnJlYWs7CisJCWNhc2UgMToKKwkJICAgIHN0cmNhdChzaG93LCAiIGthMyIpOworCQkgICAgYnJlYWs7CisJCWNhc2UgMjoKKwkJICAgIHN0cmNhdChzaG93LCAiIGtiMiIpOworCQkgICAgYnJlYWs7CisJCWNhc2UgMzoKKwkJICAgIHN0cmNhdChzaG93LCAiIGtjMSIpOworCQkgICAgYnJlYWs7CisJCWNhc2UgNDoKKwkJICAgIHN0cmNhdChzaG93LCAiIGtjMyIpOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCisJICAgIF9uY193YXJuaW5nKCJ2dDEwMCBrZXlwYWQgb3JkZXIgaW5jb25zaXN0ZW50OiAlcyIsIHNob3cpOworCX0KKworICAgIH0gZWxzZSBpZiAoVkFMSURfU1RSSU5HKGtleV9hMSkgfHwKKwkgICAgICAgVkFMSURfU1RSSU5HKGtleV9hMykgfHwKKwkgICAgICAgVkFMSURfU1RSSU5HKGtleV9iMikgfHwKKwkgICAgICAgVkFMSURfU1RSSU5HKGtleV9jMSkgfHwKKwkgICAgICAgVkFMSURfU1RSSU5HKGtleV9jMykpIHsKKwlzaG93WzBdID0gJ1wwJzsKKwlpZiAoa2V5cGFkX2luZGV4KGtleV9hMSkgPj0gMCkKKwkgICAgc3RyY2F0KHNob3csICIga2ExIik7CisJaWYgKGtleXBhZF9pbmRleChrZXlfYTMpID49IDApCisJICAgIHN0cmNhdChzaG93LCAiIGthMyIpOworCWlmIChrZXlwYWRfaW5kZXgoa2V5X2IyKSA+PSAwKQorCSAgICBzdHJjYXQoc2hvdywgIiBrYjIiKTsKKwlpZiAoa2V5cGFkX2luZGV4KGtleV9jMSkgPj0gMCkKKwkgICAgc3RyY2F0KHNob3csICIga2MxIik7CisJaWYgKGtleXBhZF9pbmRleChrZXlfYzMpID49IDApCisJICAgIHN0cmNhdChzaG93LCAiIGtjMyIpOworCWlmICgqc2hvdyAhPSAnXDAnKQorCSAgICBfbmNfd2FybmluZygidnQxMDAga2V5cGFkIG1hcCBpbmNvbXBsZXRlOiVzIiwgc2hvdyk7CisgICAgfQorfQorCisvKgorICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9yIHRoZSBnaXZlbiBjYXBhYmlsaXR5LgorICovCitzdGF0aWMgaW50CitleHBlY3RlZF9wYXJhbXMoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICAvKiAqSU5ERU5ULU9GRiogKi8KKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBjb3VudDsKKyAgICB9IHRhYmxlW10gPSB7CisJeyAiUzAiLAkJCTEgfSwJLyogJ3NjcmVlbicgZXh0ZW5zaW9uICovCisJeyAiYmlyZXAiLAkJMiB9LAorCXsgImNociIsCQkxIH0sCisJeyAiY29sb3JubSIsCQkxIH0sCisJeyAiY3BpIiwJCTEgfSwKKwl7ICJjc25tIiwJCTEgfSwKKwl7ICJjc3IiLAkJMiB9LAorCXsgImN1YiIsCQkxIH0sCisJeyAiY3VkIiwJCTEgfSwKKwl7ICJjdWYiLAkJMSB9LAorCXsgImN1cCIsCQkyIH0sCisJeyAiY3V1IiwJCTEgfSwKKwl7ICJjdnIiLAkJMSB9LAorCXsgImN3aW4iLAkJNSB9LAorCXsgImRjaCIsCQkxIH0sCisJeyAiZGVmYyIsCQkzIH0sCisJeyAiZGlhbCIsCQkxIH0sCisJeyAiZGlzcGMiLAkJMSB9LAorCXsgImRsIiwJCQkxIH0sCisJeyAiZWNoIiwJCTEgfSwKKwl7ICJnZXRtIiwJCTEgfSwKKwl7ICJocGEiLAkJMSB9LAorCXsgImljaCIsCQkxIH0sCisJeyAiaWwiLAkJCTEgfSwKKwl7ICJpbmRuIiwJCTEgfSwKKwl7ICJpbml0YyIsCQk0IH0sCisJeyAiaW5pdHAiLAkJNyB9LAorCXsgImxwaSIsCQkxIH0sCisJeyAibWM1cCIsCQkxIH0sCisJeyAibXJjdXAiLAkJMiB9LAorCXsgIm12cGEiLAkJMSB9LAorCXsgInBma2V5IiwJCTIgfSwKKwl7ICJwZmxvYyIsCQkyIH0sCisJeyAicGZ4IiwJCTIgfSwKKwl7ICJwZnhsIiwJCTMgfSwKKwl7ICJwbG4iLAkJMiB9LAorCXsgInFkaWFsIiwJCTEgfSwKKwl7ICJyY3NkIiwJCTEgfSwKKwl7ICJyZXAiLAkJMiB9LAorCXsgInJpbiIsCQkxIH0sCisJeyAic2NsayIsCQkzIH0sCisJeyAic2NwIiwJCTEgfSwKKwl7ICJzY3MiLAkJMSB9LAorCXsgInNjc2QiLAkJMiB9LAorCXsgInNldGFiIiwJCTEgfSwKKwl7ICJzZXRhZiIsCQkxIH0sCisJeyAic2V0YiIsCQkxIH0sCisJeyAic2V0Y29sb3IiLAkJMSB9LAorCXsgInNldGYiLAkJMSB9LAorCXsgInNnciIsCQk5IH0sCisJeyAic2dyMSIsCQk2IH0sCisJeyAic2xlbmd0aCIsCQkxIH0sCisJeyAic2xpbmVzIiwJCTEgfSwKKwl7ICJzbWdicCIsCQkxIH0sCS8qIDIgaWYgc21ndHAgaXMgbm90IGdpdmVuICovCisJeyAic21nbHAiLAkJMSB9LAorCXsgInNtZ2xyIiwJCTIgfSwKKwl7ICJzbWdycCIsCQkxIH0sCisJeyAic21ndGIiLAkJMiB9LAorCXsgInNtZ3RwIiwJCTEgfSwKKwl7ICJ0c2wiLAkJMSB9LAorCXsgInU2IiwJCQktMSB9LAorCXsgInZwYSIsCQkxIH0sCisJeyAid2luZCIsCQk0IH0sCisJeyAid2luZ28iLAkJMSB9LAorICAgIH07CisgICAgLyogKklOREVOVC1PTiogKi8KKworICAgIHVuc2lnbmVkIG47CisgICAgaW50IHJlc3VsdCA9IDA7CQkvKiBmdW5jdGlvbi1rZXlzLCBldGMuLCB1c2Ugbm9uZSAqLworCisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YWJsZSk7IG4rKykgeworCWlmICghc3RyY21wKG5hbWUsIHRhYmxlW25dLm5hbWUpKSB7CisJICAgIHJlc3VsdCA9IHRhYmxlW25dLmNvdW50OworCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE1ha2UgYSBxdWljayBzYW5pdHkgY2hlY2sgZm9yIHRoZSBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB1c2VkIGluIHRoZSBnaXZlbgorICogc3RyaW5ncy4gIElmIHRoZXJlIGFyZSBubyAiJXAiIHRva2VucywgdGhlbiB0aGVyZSBzaG91bGQgYmUgbm8gb3RoZXIgIiUiCisgKiBtYXJrZXJzLgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfcGFyYW1zKFRFUk1UWVBFICp0cCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisgICAgaW50IGV4cGVjdGVkID0gZXhwZWN0ZWRfcGFyYW1zKG5hbWUpOworICAgIGludCBhY3R1YWwgPSAwOworICAgIGludCBuOworICAgIGJvb2wgcGFyYW1zWzEwXTsKKyAgICBjaGFyICpzID0gdmFsdWU7CisKKyNpZmRlZiBzZXRfdG9wX21hcmdpbl9wYXJtCisgICAgaWYgKCFzdHJjbXAobmFtZSwgInNtZ2JwIikKKwkmJiBzZXRfdG9wX21hcmdpbl9wYXJtID09IDApCisJZXhwZWN0ZWQgPSAyOworI2VuZGlmCisKKyAgICBmb3IgKG4gPSAwOyBuIDwgMTA7IG4rKykKKwlwYXJhbXNbbl0gPSBGQUxTRTsKKworICAgIHdoaWxlICgqcyAhPSAwKSB7CisJaWYgKCpzID09ICclJykgeworCSAgICBpZiAoKisrcyA9PSAnXDAnKSB7CisJCV9uY193YXJuaW5nKCJleHBlY3RlZCBjaGFyYWN0ZXIgYWZ0ZXIgJSUgaW4gJXMiLCBuYW1lKTsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSBpZiAoKnMgPT0gJ3AnKSB7CisJCWlmICgqKytzID09ICdcMCcgfHwgIWlzZGlnaXQoKGludCkgKnMpKSB7CisJCSAgICBfbmNfd2FybmluZygiZXhwZWN0ZWQgZGlnaXQgYWZ0ZXIgJSVwIGluICVzIiwgbmFtZSk7CisJCSAgICByZXR1cm47CisJCX0gZWxzZSB7CisJCSAgICBuID0gKCpzIC0gJzAnKTsKKwkJICAgIGlmIChuID4gYWN0dWFsKQorCQkJYWN0dWFsID0gbjsKKwkJICAgIHBhcmFtc1tuXSA9IFRSVUU7CisJCX0KKwkgICAgfQorCX0KKwlzKys7CisgICAgfQorCisgICAgaWYgKHBhcmFtc1swXSkgeworCV9uY193YXJuaW5nKCIlcyByZWZlcnMgdG8gcGFyYW1ldGVyIDAgKCUlcDApLCB3aGljaCBpcyBub3QgYWxsb3dlZCIsIG5hbWUpOworICAgIH0KKyAgICBpZiAodmFsdWUgPT0gc2V0X2F0dHJpYnV0ZXMgfHwgZXhwZWN0ZWQgPCAwKSB7CisJOworICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQgIT0gYWN0dWFsKSB7CisJX25jX3dhcm5pbmcoIiVzIHVzZXMgJWQgcGFyYW1ldGVycywgZXhwZWN0ZWQgJWQiLCBuYW1lLAorCQkgICAgYWN0dWFsLCBleHBlY3RlZCk7CisJZm9yIChuID0gMTsgbiA8IGFjdHVhbDsgbisrKSB7CisJICAgIGlmICghcGFyYW1zW25dKQorCQlfbmNfd2FybmluZygiJXMgb21pdHMgcGFyYW1ldGVyICVkIiwgbmFtZSwgbik7CisJfQorICAgIH0KK30KKworc3RhdGljIGNoYXIgKgorc2tpcF9kZWxheShjaGFyICpzKQoreworICAgIHdoaWxlICgqcyA9PSAnLycgfHwgaXNkaWdpdChVQ2hhcigqcykpKQorCSsrczsKKyAgICByZXR1cm4gczsKK30KKworLyoKKyAqIFNraXAgYSBkZWxheSBhbHRvZ2V0aGVyLCBlLmcuLCB3aGVuIGNvbXBhcmluZyBhIHNpbXBsZSBzdHJpbmcgdG8gc2dyLAorICogdGhlIGxhdHRlciBtYXkgaGF2ZSBhIHdvcnN0LWNhc2UgZGVsYXkgb24gdGhlIGVuZC4KKyAqLworc3RhdGljIGNoYXIgKgoraWdub3JlX2RlbGF5cyhjaGFyICpzKQoreworICAgIGludCBkZWxheWluZyA9IDA7CisKKyAgICBkbyB7CisJc3dpdGNoICgqcykgeworCWNhc2UgJyQnOgorCSAgICBpZiAoZGVsYXlpbmcgPT0gMCkKKwkJZGVsYXlpbmcgPSAxOworCSAgICBicmVhazsKKwljYXNlICc8JzoKKwkgICAgaWYgKGRlbGF5aW5nID09IDEpCisJCWRlbGF5aW5nID0gMjsKKwkgICAgYnJlYWs7CisJY2FzZSAnXDAnOgorCSAgICBkZWxheWluZyA9IDA7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGlmIChkZWxheWluZykgeworCQlzID0gc2tpcF9kZWxheShzKTsKKwkJaWYgKCpzID09ICc+JykKKwkJICAgICsrczsKKwkJZGVsYXlpbmcgPSAwOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKwlpZiAoZGVsYXlpbmcpCisJICAgICsrczsKKyAgICB9IHdoaWxlIChkZWxheWluZyk7CisgICAgcmV0dXJuIHM7Cit9CisKKy8qCisgKiBBbiBzZ3Igc3RyaW5nIG1heSBjb250YWluIHNldmVyYWwgc2V0dGluZ3Mgb3RoZXIgdGhhbiB0aGUgb25lIHdlJ3JlCisgKiBpbnRlcmVzdGVkIGluLCBlc3NlbnRpYWxseSBzZ3IwICsgcm1hY3MgKyB3aGF0ZXZlci4gIEFzIGxvbmcgYXMgdGhlCisgKiAid2hhdGV2ZXIiIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2dyIHN0cmluZywgdGhhdCBpcyBjbG9zZSBlbm91Z2ggZm9yIG91cgorICogc2FuaXR5IGNoZWNrLgorICovCitzdGF0aWMgYm9vbAorc2ltaWxhcl9zZ3IoaW50IG51bSwgY2hhciAqYSwgY2hhciAqYikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqbmFtZXNbXSA9CisgICAgeworCSJub25lIgorCSwic3RhbmRvdXQiCisJLCJ1bmRlcmxpbmUiCisJLCJyZXZlcnNlIgorCSwiYmxpbmsiCisJLCJkaW0iCisJLCJib2xkIgorCSwiaW52aXMiCisJLCJwcm90ZWN0IgorCSwiYWx0Y2hhcnNldCIKKyAgICB9OworICAgIGNoYXIgKmJhc2VfYSA9IGE7CisgICAgY2hhciAqYmFzZV9iID0gYjsKKyAgICBpbnQgZGVsYXlpbmcgPSAwOworCisgICAgd2hpbGUgKCpiICE9IDApIHsKKwl3aGlsZSAoKmEgIT0gKmIpIHsKKwkgICAgaWYgKCphID09IDApIHsKKwkJaWYgKGJbMF0gPT0gJyQnCisJCSAgICAmJiBiWzFdID09ICc8JykgeworCQkgICAgX25jX3dhcm5pbmcoIkRpZCBub3QgZmluZCBkZWxheSAlcyIsIF9uY192aXNidWYoYikpOworCQl9IGVsc2UgeworCQkgICAgX25jX3dhcm5pbmcoImNoZWNraW5nIHNnciglcykgJXNcblx0Y29tcGFyZSB0byAlc1xuXHR1bm1hdGNoZWQgJXMiLAorCQkJCW5hbWVzW251bV0sIF9uY192aXNidWYyKDEsIGJhc2VfYSksCisJCQkJX25jX3Zpc2J1ZjIoMiwgYmFzZV9iKSwKKwkJCQlfbmNfdmlzYnVmMigzLCBiKSk7CisJCX0KKwkJcmV0dXJuIEZBTFNFOworCSAgICB9IGVsc2UgaWYgKGRlbGF5aW5nKSB7CisJCWEgPSBza2lwX2RlbGF5KGEpOworCQliID0gc2tpcF9kZWxheShiKTsKKwkgICAgfSBlbHNlIHsKKwkJYSsrOworCSAgICB9CisJfQorCXN3aXRjaCAoKmEpIHsKKwljYXNlICckJzoKKwkgICAgaWYgKGRlbGF5aW5nID09IDApCisJCWRlbGF5aW5nID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnPCc6CisJICAgIGlmIChkZWxheWluZyA9PSAxKQorCQlkZWxheWluZyA9IDI7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGRlbGF5aW5nID0gMDsKKwkgICAgYnJlYWs7CisJfQorCWErKzsKKwliKys7CisgICAgfQorICAgIC8qIGlnbm9yZSBkZWxheXMgb24gdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCisgICAgYSA9IGlnbm9yZV9kZWxheXMoYSk7CisgICAgcmV0dXJuICgobnVtICE9IDApIHx8ICgqYSA9PSAwKSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK2NoZWNrX3NncihURVJNVFlQRSAqdHAsIGNoYXIgKnplcm8sIGludCBudW0sIGNoYXIgKmNhcCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBjaGFyICp0ZXN0OworCisgICAgX25jX3RwYXJtX2VyciA9IDA7CisgICAgdGVzdCA9IFRQQVJNXzkoc2V0X2F0dHJpYnV0ZXMsCisJCSAgIG51bSA9PSAxLAorCQkgICBudW0gPT0gMiwKKwkJICAgbnVtID09IDMsCisJCSAgIG51bSA9PSA0LAorCQkgICBudW0gPT0gNSwKKwkJICAgbnVtID09IDYsCisJCSAgIG51bSA9PSA3LAorCQkgICBudW0gPT0gOCwKKwkJICAgbnVtID09IDkpOworICAgIGlmICh0ZXN0ICE9IDApIHsKKwlpZiAoUFJFU0VOVChjYXApKSB7CisJICAgIGlmICghc2ltaWxhcl9zZ3IobnVtLCB0ZXN0LCBjYXApKSB7CisJCV9uY193YXJuaW5nKCIlcyBkaWZmZXJzIGZyb20gc2dyKCVkKVxuXHQlcz0lc1xuXHRzZ3IoJWQpPSVzIiwKKwkJCSAgICBuYW1lLCBudW0sCisJCQkgICAgbmFtZSwgX25jX3Zpc2J1ZjIoMSwgY2FwKSwKKwkJCSAgICBudW0sIF9uY192aXNidWYyKDIsIHRlc3QpKTsKKwkgICAgfQorCX0gZWxzZSBpZiAoX25jX2NhcGNtcCh0ZXN0LCB6ZXJvKSkgeworCSAgICBfbmNfd2FybmluZygic2dyKCVkKSBwcmVzZW50LCBidXQgbm90ICVzIiwgbnVtLCBuYW1lKTsKKwl9CisgICAgfSBlbHNlIGlmIChQUkVTRU5UKGNhcCkpIHsKKwlfbmNfd2FybmluZygic2dyKCVkKSBtaXNzaW5nLCBidXQgJXMgcHJlc2VudCIsIG51bSwgbmFtZSk7CisgICAgfQorICAgIGlmIChfbmNfdHBhcm1fZXJyKQorCV9uY193YXJuaW5nKCJzdGFjayBlcnJvciBpbiBzZ3IoJWQpIHN0cmluZyIsIG51bSk7CisgICAgcmV0dXJuIHRlc3Q7Cit9CisKKyNkZWZpbmUgQ0hFQ0tfU0dSKG51bSxuYW1lKSBjaGVja19zZ3IodHAsIHplcm8sIG51bSwgbmFtZSwgI25hbWUpCisKKyNpZmRlZiBUUkFDRQorLyoKKyAqIElmIHRpYyBpcyBjb21waWxlZCB3aXRoIFRSQUNFLCB3ZSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgb3V0cHV0IGZyb20gdGhlCisgKiBERUJVRygpIG1hY3JvLiAgQnV0IHNpbmNlIGl0IGRvZXNuJ3QgdXNlIHRyYWNlb24oKSwgaXQgYWx3YXlzIGdvZXMgdG8KKyAqIHRoZSBzdGFuZGFyZCBlcnJvci4gIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIG1ha2UgaXQgc2ltcGxlciB0byBmb2xsb3cgdGhlCisgKiByZXN1bHRpbmcgZGVidWcgdHJhY2VzLgorICovCitzdGF0aWMgdm9pZAorc2hvd193aGVyZSh1bnNpZ25lZCBsZXZlbCkKK3sKKyAgICBpZiAoX25jX3RyYWNpbmcgPj0gREVCVUdfTEVWRUwobGV2ZWwpKSB7CisJY2hhciBteV9uYW1lWzI1Nl07CisJX25jX2dldF90eXBlKG15X25hbWUpOworCWZwcmludGYoc3RkZXJyLCAiXCIlc1wiLCBsaW5lICVkLCAnJXMnICIsCisJCV9uY19nZXRfc291cmNlKCksCisJCV9uY19jdXJyX2xpbmUsIG15X25hbWUpOworICAgIH0KK30KKworI2Vsc2UKKyNkZWZpbmUgc2hvd193aGVyZShsZXZlbCkJLyogbm90aGluZyAqLworI2VuZGlmCisKKy8qIG90aGVyIHNhbml0eS1jaGVja3MgKHRoaW5ncyB0aGF0IHdlIGRvbid0IHdhbnQgaW4gdGhlIG5vcm1hbAorICogbG9naWMgdGhhdCByZWFkcyBhIHRlcm1pbmZvIGVudHJ5KQorICovCitzdGF0aWMgdm9pZAorY2hlY2tfdGVybXR5cGUoVEVSTVRZUEUgKnRwLCBib29sIGxpdGVyYWwpCit7CisgICAgYm9vbCBjb25mbGljdCA9IEZBTFNFOworICAgIHVuc2lnbmVkIGosIGs7CisgICAgY2hhciBma2V5c1tTVFJDT1VOVF07CisKKyAgICAvKgorICAgICAqIEEgdGVybWluYWwgZW50cnkgbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBrZXljb2RlIGFzc2lnbmVkIHRvCisgICAgICogYSBnaXZlbiBzdHJpbmcgKGUuZy4sIEtFWV9FTkQgYW5kIEtFWV9MTCkuICBCdXQgY3Vyc2VzIHdpbGwgb25seQorICAgICAqIHJldHVybiBvbmUgKHRoZSBsYXN0IG9uZSBhc3NpZ25lZCkuCisgICAgICovCisgICAgaWYgKCEoX25jX3N5bnRheCA9PSBTWU5fVEVSTUNBUCAmJiBjYXBkdW1wKSkgeworCW1lbXNldChma2V5cywgMCwgc2l6ZW9mKGZrZXlzKSk7CisJZm9yIChqID0gMDsgX25jX3RpbmZvX2ZrZXlzW2pdLmNvZGU7IGorKykgeworCSAgICBjaGFyICphID0gdHAtPlN0cmluZ3NbX25jX3RpbmZvX2ZrZXlzW2pdLm9mZnNldF07CisJICAgIGJvb2wgZmlyc3QgPSBUUlVFOworCSAgICBpZiAoIVZBTElEX1NUUklORyhhKSkKKwkJY29udGludWU7CisJICAgIGZvciAoayA9IGogKyAxOyBfbmNfdGluZm9fZmtleXNba10uY29kZTsgaysrKSB7CisJCWNoYXIgKmIgPSB0cC0+U3RyaW5nc1tfbmNfdGluZm9fZmtleXNba10ub2Zmc2V0XTsKKwkJaWYgKCFWQUxJRF9TVFJJTkcoYikKKwkJICAgIHx8IGZrZXlzW2tdKQorCQkgICAgY29udGludWU7CisJCWlmICghX25jX2NhcGNtcChhLCBiKSkgeworCQkgICAgZmtleXNbal0gPSAxOworCQkgICAgZmtleXNba10gPSAxOworCQkgICAgaWYgKGZpcnN0KSB7CisJCQlpZiAoIWNvbmZsaWN0KSB7CisJCQkgICAgX25jX3dhcm5pbmcoIkNvbmZsaWN0aW5nIGtleSBkZWZpbml0aW9ucyAodXNpbmcgdGhlIGxhc3QpIik7CisJCQkgICAgY29uZmxpY3QgPSBUUlVFOworCQkJfQorCQkJZnByaW50ZihzdGRlcnIsICIuLi4gJXMgaXMgdGhlIHNhbWUgYXMgJXMiLAorCQkJCWtleW5hbWUoKGludCkgX25jX3RpbmZvX2ZrZXlzW2pdLmNvZGUpLAorCQkJCWtleW5hbWUoKGludCkgX25jX3RpbmZvX2ZrZXlzW2tdLmNvZGUpKTsKKwkJCWZpcnN0ID0gRkFMU0U7CisJCSAgICB9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICIsICVzIiwKKwkJCQlrZXluYW1lKChpbnQpIF9uY190aW5mb19ma2V5c1trXS5jb2RlKSk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBpZiAoIWZpcnN0KQorCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorICAgIH0KKworICAgIGZvciAoaiA9IDA7IGogPCBOVU1fU1RSSU5HUyh0cCk7IGorKykgeworCWNoYXIgKmEgPSB0cC0+U3RyaW5nc1tqXTsKKwlpZiAoVkFMSURfU1RSSU5HKGEpKQorCSAgICBjaGVja19wYXJhbXModHAsIEV4dFN0cm5hbWUodHAsIGosIHN0cm5hbWVzKSwgYSk7CisgICAgfQorCisgICAgY2hlY2tfYWNzKHRwKTsKKyAgICBjaGVja19jb2xvcnModHApOworICAgIGNoZWNrX2tleXBhZCh0cCk7CisKKyAgICAvKgorICAgICAqIFRoZXNlIG1heSBiZSBtaXNtYXRjaGVkIGJlY2F1c2UgdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uIHJlbGllcyBvbgorICAgICAqIHJlc3RvcmluZyB0aGUgY3Vyc29yIHZpc2liaWxpdHkgYnkgcmVzZXR0aW5nIGl0LgorICAgICAqLworICAgIEFORE1JU1NJTkcoY3Vyc29yX2ludmlzaWJsZSwgY3Vyc29yX25vcm1hbCk7CisgICAgQU5ETUlTU0lORyhjdXJzb3JfdmlzaWJsZSwgY3Vyc29yX25vcm1hbCk7CisKKyAgICBpZiAoUFJFU0VOVChjdXJzb3JfdmlzaWJsZSkgJiYgUFJFU0VOVChjdXJzb3Jfbm9ybWFsKQorCSYmICFfbmNfY2FwY21wKGN1cnNvcl92aXNpYmxlLCBjdXJzb3Jfbm9ybWFsKSkKKwlfbmNfd2FybmluZygiY3Vyc29yX3Zpc2libGUgaXMgc2FtZSBhcyBjdXJzb3Jfbm9ybWFsIik7CisKKyAgICAvKgorICAgICAqIEZyb20gWFNJICYgTydSZWlsbHksIHdlIGdhdGhlciB0aGF0IHNjL3JjIGFyZSByZXF1aXJlZCBpZiBjc3IgaXMKKyAgICAgKiBnaXZlbiwgYmVjYXVzZSB0aGUgY3Vyc29yIHBvc2l0aW9uIGFmdGVyIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGlzCisgICAgICogcGVyZm9ybWVkIGlzIHVuZGVmaW5lZC4KKyAgICAgKi8KKyAgICBBTkRNSVNTSU5HKGNoYW5nZV9zY3JvbGxfcmVnaW9uLCBzYXZlX2N1cnNvcik7CisgICAgQU5ETUlTU0lORyhjaGFuZ2Vfc2Nyb2xsX3JlZ2lvbiwgcmVzdG9yZV9jdXJzb3IpOworCisgICAgaWYgKFBSRVNFTlQoc2V0X2F0dHJpYnV0ZXMpKSB7CisJY2hhciAqemVybyA9IDA7CisKKwlfbmNfdHBhcm1fZXJyID0gMDsKKwlpZiAoUFJFU0VOVChleGl0X2F0dHJpYnV0ZV9tb2RlKSkgeworCSAgICB6ZXJvID0gc3RyZHVwKENIRUNLX1NHUigwLCBleGl0X2F0dHJpYnV0ZV9tb2RlKSk7CisJfSBlbHNlIHsKKwkgICAgemVybyA9IHN0cmR1cChUUEFSTV85KHNldF9hdHRyaWJ1dGVzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSk7CisJfQorCWlmIChfbmNfdHBhcm1fZXJyKQorCSAgICBfbmNfd2FybmluZygic3RhY2sgZXJyb3IgaW4gc2dyKDApIHN0cmluZyIpOworCisJaWYgKHplcm8gIT0gMCkgeworCSAgICBDSEVDS19TR1IoMSwgZW50ZXJfc3RhbmRvdXRfbW9kZSk7CisJICAgIENIRUNLX1NHUigyLCBlbnRlcl91bmRlcmxpbmVfbW9kZSk7CisJICAgIENIRUNLX1NHUigzLCBlbnRlcl9yZXZlcnNlX21vZGUpOworCSAgICBDSEVDS19TR1IoNCwgZW50ZXJfYmxpbmtfbW9kZSk7CisJICAgIENIRUNLX1NHUig1LCBlbnRlcl9kaW1fbW9kZSk7CisJICAgIENIRUNLX1NHUig2LCBlbnRlcl9ib2xkX21vZGUpOworCSAgICBDSEVDS19TR1IoNywgZW50ZXJfc2VjdXJlX21vZGUpOworCSAgICBDSEVDS19TR1IoOCwgZW50ZXJfcHJvdGVjdGVkX21vZGUpOworCSAgICBDSEVDS19TR1IoOSwgZW50ZXJfYWx0X2NoYXJzZXRfbW9kZSk7CisJICAgIGZyZWUoemVybyk7CisJfSBlbHNlIHsKKwkgICAgX25jX3dhcm5pbmcoInNncigwKSBkaWQgbm90IHJldHVybiBhIHZhbHVlIik7CisJfQorICAgIH0gZWxzZSBpZiAoUFJFU0VOVChleGl0X2F0dHJpYnV0ZV9tb2RlKSAmJgorCSAgICAgICBzZXRfYXR0cmlidXRlcyAhPSBDQU5DRUxMRURfU1RSSU5HKSB7CisJaWYgKF9uY19zeW50YXggPT0gU1lOX1RFUk1JTkZPKQorCSAgICBfbmNfd2FybmluZygibWlzc2luZyBzZ3Igc3RyaW5nIik7CisgICAgfQorCisgICAgaWYgKFBSRVNFTlQoZXhpdF9hdHRyaWJ1dGVfbW9kZSkpIHsKKwljaGFyICpjaGVja19zZ3IwID0gX25jX3RyaW1fc2dyMCh0cCk7CisKKwlpZiAoY2hlY2tfc2dyMCA9PSAwIHx8ICpjaGVja19zZ3IwID09ICdcMCcpIHsKKwkgICAgX25jX3dhcm5pbmcoInRyaW1tZWQgc2dyMCBpcyBlbXB0eSIpOworCX0gZWxzZSB7CisJICAgIHNob3dfd2hlcmUoMik7CisJICAgIGlmIChjaGVja19zZ3IwICE9IGV4aXRfYXR0cmlidXRlX21vZGUpIHsKKwkJREVCVUcoMiwKKwkJICAgICAgKCJ3aWxsIHRyaW0gc2dyMFxuXHRvcmlnaW5hbCBzZ3IwPSVzXG5cdHRyaW1tZWQgIHNncjA9JXMiLAorCQkgICAgICAgX25jX3Zpc2J1ZjIoMSwgZXhpdF9hdHRyaWJ1dGVfbW9kZSksCisJCSAgICAgICBfbmNfdmlzYnVmMigyLCBjaGVja19zZ3IwKSkpOworCQlmcmVlKGNoZWNrX3NncjApOworCSAgICB9IGVsc2UgeworCQlERUJVRygyLAorCQkgICAgICAoIndpbGwgbm90IHRyaW0gc2dyMFxuXHRvcmlnaW5hbCBzZ3IwPSVzIiwKKwkJICAgICAgIF9uY192aXNidWYoZXhpdF9hdHRyaWJ1dGVfbW9kZSkpKTsKKwkgICAgfQorCX0KKyAgICB9CisjaWZkZWYgVFJBQ0UKKyAgICBzaG93X3doZXJlKDIpOworICAgIGlmICghYXV0b19yaWdodF9tYXJnaW4pIHsKKwlERUJVRygyLAorCSAgICAgICgiY2FuIHdyaXRlIHRvIGxvd2VyLXJpZ2h0IGRpcmVjdGx5IikpOworICAgIH0gZWxzZSBpZiAoUFJFU0VOVChlbnRlcl9hbV9tb2RlKSAmJiBQUkVTRU5UKGV4aXRfYW1fbW9kZSkpIHsKKwlERUJVRygyLAorCSAgICAgICgiY2FuIHdyaXRlIHRvIGxvd2VyLXJpZ2h0IGJ5IHN1cHByZXNzaW5nIGF1dG9tYXJnaW4iKSk7CisgICAgfSBlbHNlIGlmICgoUFJFU0VOVChlbnRlcl9pbnNlcnRfbW9kZSkgJiYgUFJFU0VOVChleGl0X2luc2VydF9tb2RlKSkKKwkgICAgICAgfHwgUFJFU0VOVChpbnNlcnRfY2hhcmFjdGVyKSB8fCBQUkVTRU5UKHBhcm1faWNoKSkgeworCURFQlVHKDIsCisJICAgICAgKCJjYW4gd3JpdGUgdG8gbG93ZXItcmlnaHQgYnkgdXNpbmcgaW5zZXJ0cyIpKTsKKyAgICB9IGVsc2UgeworCURFQlVHKDIsCisJICAgICAgKCJjYW5ub3Qgd3JpdGUgdG8gbG93ZXItcmlnaHQiKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIFNvbWUgc3RhbmRhcmQgYXBwbGljYXRpb25zIChlLmcuLCB2aSkgYW5kIHNvbWUgbm9uLWN1cnNlcworICAgICAqIGFwcGxpY2F0aW9ucyAoZS5nLiwgam92ZSkgZ2V0IGNvbmZ1c2VkIGlmIHdlIGhhdmUgYm90aCBpY2gxIGFuZAorICAgICAqIHNtaXIvcm1pci4gIExldCdzIGJlIG5pY2UgYW5kIHdhcm4gYWJvdXQgdGhhdCwgdG9vLCBldmVuIHRob3VnaAorICAgICAqIG5jdXJzZXMgaGFuZGxlcyBpdC4KKyAgICAgKi8KKyAgICBpZiAoKFBSRVNFTlQoZW50ZXJfaW5zZXJ0X21vZGUpIHx8IFBSRVNFTlQoZXhpdF9pbnNlcnRfbW9kZSkpCisJJiYgUFJFU0VOVChwYXJtX2ljaCkpIHsKKwlfbmNfd2FybmluZygibm9uLWN1cnNlcyBhcHBsaWNhdGlvbnMgbWF5IGJlIGNvbmZ1c2VkIGJ5IGljaDEgd2l0aCBzbWlyL3JtaXIiKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmFsbHksIGRvIHRoZSBub24tdmVyYm9zZSBjaGVja3MKKyAgICAgKi8KKyAgICBpZiAoc2F2ZV9jaGVja190ZXJtdHlwZSAhPSAwKQorCXNhdmVfY2hlY2tfdGVybXR5cGUodHAsIGxpdGVyYWwpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvcHJvZ3MvdG9lLmMgYi9uY3Vyc2VzLTUuNy9wcm9ncy90b2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWY2ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcHJvZ3MvdG9lLmMKQEAgLTAsMCArMSw1MTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCXRvZS5jIC0tLSB0YWJsZSBvZiBlbnRyaWVzIHJlcG9ydCBnZW5lcmF0b3IKKyAqLworCisjaW5jbHVkZSA8cHJvZ3MucHJpdi5oPgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmIFVTRV9IQVNIRURfREIKKyNpbmNsdWRlIDxoYXNoZWRfZGIuaD4KKyNlbmRpZgorCitNT0RVTEVfSUQoIiRJZDogdG9lLmMsdiAxLjUxIDIwMDgvMDgvMTYgMjE6NTM6MjUgdG9tIEV4cCAkIikKKworI2RlZmluZSBpc0RvdG5hbWUobmFtZSkgKCFzdHJjbXAobmFtZSwgIi4iKSB8fCAhc3RyY21wKG5hbWUsICIuLiIpKQorCitjb25zdCBjaGFyICpfbmNfcHJvZ25hbWU7CisKKyNpZiBOT19MRUFLUworI3VuZGVmIEV4aXRQcm9ncmFtCitzdGF0aWMgdm9pZCBFeGl0UHJvZ3JhbShpbnQgY29kZSkgR0NDX05PUkVUVVJOOworc3RhdGljIHZvaWQKK0V4aXRQcm9ncmFtKGludCBjb2RlKQoreworICAgIF9uY19mcmVlX2VudHJpZXMoX25jX2hlYWQpOworICAgIF9uY19mcmVlX3RpYyhjb2RlKTsKK30KKyNlbmRpZgorCisjaWYgVVNFX0hBU0hFRF9EQgorc3RhdGljIGJvb2wKK21ha2VfZGJfbmFtZShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbGltaXQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgc3VmZml4W10gPSBEQk1fU1VGRklYOworCisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyAgICB1bnNpZ25lZCBsZW5zID0gc2l6ZW9mKHN1ZmZpeCkgLSAxOworICAgIHVuc2lnbmVkIHNpemUgPSBzdHJsZW4oc3JjKTsKKyAgICB1bnNpZ25lZCBuZWVkID0gbGVucyArIHNpemU7CisKKyAgICBpZiAobmVlZCA8PSBsaW1pdCkgeworCWlmIChzaXplID49IGxlbnMKKwkgICAgJiYgIXN0cmNtcChzcmMgKyBzaXplIC0gbGVucywgc3VmZml4KSkKKwkgICAgKHZvaWQpIHN0cmNweShkc3QsIHNyYyk7CisJZWxzZQorCSAgICAodm9pZCkgc3ByaW50Zihkc3QsICIlcyVzIiwgc3JjLCBzdWZmaXgpOworCXJlc3VsdCA9IFRSVUU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wKK2lzX2RhdGFiYXNlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBGQUxTRTsKKyNpZiBVU0VfREFUQUJBU0UKKyAgICBpZiAoX25jX2lzX2Rpcl9wYXRoKHBhdGgpICYmIGFjY2VzcyhwYXRoLCBSX09LIHwgWF9PSykgPT0gMCkgeworCXJlc3VsdCA9IFRSVUU7CisgICAgfQorI2VuZGlmCisjaWYgVVNFX1RFUk1DQVAKKyAgICBpZiAoX25jX2lzX2ZpbGVfcGF0aChwYXRoKSAmJiBhY2Nlc3MocGF0aCwgUl9PSykgPT0gMCkgeworCXJlc3VsdCA9IFRSVUU7CisgICAgfQorI2VuZGlmCisjaWYgVVNFX0hBU0hFRF9EQgorICAgIGlmICghcmVzdWx0KSB7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJaWYgKF9uY19pc19maWxlX3BhdGgocGF0aCkgJiYgYWNjZXNzKHBhdGgsIFJfT0spID09IDApIHsKKwkgICAgcmVzdWx0ID0gVFJVRTsKKwl9IGVsc2UgaWYgKG1ha2VfZGJfbmFtZShmaWxlbmFtZSwgcGF0aCwgc2l6ZW9mKGZpbGVuYW1lKSkpIHsKKwkgICAgaWYgKF9uY19pc19maWxlX3BhdGgoZmlsZW5hbWUpICYmIGFjY2VzcyhmaWxlbmFtZSwgUl9PSykgPT0gMCkgeworCQlyZXN1bHQgPSBUUlVFOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitkZXNjaG9vayhjb25zdCBjaGFyICpjbiwgVEVSTVRZUEUgKnRwKQorLyogZGlzcGxheSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgdHlwZSAqLworeworICAgIGNvbnN0IGNoYXIgKmRlc2M7CisKKyAgICBpZiAoKGRlc2MgPSBzdHJyY2hyKHRwLT50ZXJtX25hbWVzLCAnfCcpKSA9PSAwIHx8ICorK2Rlc2MgPT0gJ1wwJykKKwlkZXNjID0gIihObyBkZXNjcmlwdGlvbikiOworCisgICAgKHZvaWQpIHByaW50ZigiJS0xMHNcdCVzXG4iLCBjbiwgZGVzYyk7Cit9CisKKyNpZiBVU0VfVEVSTUNBUAorc3RhdGljIHZvaWQKK3Nob3dfdGVybWNhcChjaGFyICpidWZmZXIsCisJICAgICB2b2lkICgqaG9vaykgKGNvbnN0IGNoYXIgKiwgVEVSTVRZUEUgKnRwKSkKK3sKKyAgICBURVJNVFlQRSBkYXRhOworICAgIGNoYXIgKm5leHQgPSBzdHJjaHIoYnVmZmVyLCAnOicpOworICAgIGNoYXIgKmxhc3Q7CisgICAgY2hhciAqbGlzdCA9IGJ1ZmZlcjsKKworICAgIGlmIChuZXh0KQorCSpuZXh0ID0gJ1wwJzsKKworICAgIGxhc3QgPSBzdHJyY2hyKGJ1ZmZlciwgJ3wnKTsKKyAgICBpZiAobGFzdCkKKwkrK2xhc3Q7CisKKyAgICBkYXRhLnRlcm1fbmFtZXMgPSBzdHJkdXAoYnVmZmVyKTsKKyAgICB3aGlsZSAoKG5leHQgPSBzdHJ0b2sobGlzdCwgInwiKSkgIT0gMCkgeworCWlmIChuZXh0ICE9IGxhc3QpCisJICAgIGhvb2sobmV4dCwgJmRhdGEpOworCWxpc3QgPSAwOworICAgIH0KKyAgICBmcmVlKGRhdGEudGVybV9uYW1lcyk7Cit9CisjZW5kaWYKKworc3RhdGljIGludAordHlwZWxpc3QoaW50IGVhcmdjLCBjaGFyICplYXJndltdLAorCSBib29sIHZlcmJvc2l0eSwKKwkgdm9pZCAoKmhvb2spIChjb25zdCBjaGFyICosIFRFUk1UWVBFICp0cCkpCisvKiBhcHBseSBhIGZ1bmN0aW9uIHRvIGVhY2ggZW50cnkgaW4gZ2l2ZW4gdGVybWluZm8gZGlyZWN0b3JpZXMgKi8KK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBlYXJnYzsgaSsrKSB7CisjaWYgVVNFX0RBVEFCQVNFCisJaWYgKF9uY19pc19kaXJfcGF0aChlYXJndltpXSkpIHsKKwkgICAgY2hhciAqY3dkX2J1ZiA9IDA7CisJICAgIERJUiAqdGVybWRpcjsKKwkgICAgRElSRU5UICpzdWJkaXI7CisKKwkgICAgaWYgKCh0ZXJtZGlyID0gb3BlbmRpcihlYXJndltpXSkpID09IDApIHsKKwkJKHZvaWQpIGZmbHVzaChzdGRvdXQpOworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkgICAgICAgIiVzOiBjYW4ndCBvcGVuIHRlcm1pbmZvIGRpcmVjdG9yeSAlc1xuIiwKKwkJCSAgICAgICBfbmNfcHJvZ25hbWUsIGVhcmd2W2ldKTsKKwkJcmV0dXJuIChFWElUX0ZBSUxVUkUpOworCSAgICB9IGVsc2UgaWYgKHZlcmJvc2l0eSkKKwkJKHZvaWQpIHByaW50ZigiI1xuIyVzOlxuI1xuIiwgZWFyZ3ZbaV0pOworCisJICAgIHdoaWxlICgoc3ViZGlyID0gcmVhZGRpcih0ZXJtZGlyKSkgIT0gMCkgeworCQlzaXplX3QgbGVuID0gTkFNTEVOKHN1YmRpcik7CisJCXNpemVfdCBjd2RfbGVuID0gbGVuICsgc3RybGVuKGVhcmd2W2ldKSArIDM7CisJCWNoYXIgbmFtZV8xW1BBVEhfTUFYXTsKKwkJRElSICplbnRyeWRpcjsKKwkJRElSRU5UICplbnRyeTsKKworCQljd2RfYnVmID0gdHlwZVJlYWxsb2MoY2hhciwgY3dkX2xlbiwgY3dkX2J1Zik7CisJCWlmIChjd2RfYnVmID09IDApIHsKKwkJICAgIHBlcnJvcigicmVhbGxvYyBjd2RfYnVmIik7CisJCSAgICBjb250aW51ZTsKKwkJfQorCisJCXN0cm5jcHkobmFtZV8xLCBzdWJkaXItPmRfbmFtZSwgbGVuKVtsZW5dID0gJ1wwJzsKKwkJaWYgKGlzRG90bmFtZShuYW1lXzEpKQorCQkgICAgY29udGludWU7CisKKwkJKHZvaWQpIHNwcmludGYoY3dkX2J1ZiwgIiVzLyUuKnMvIiwgZWFyZ3ZbaV0sIChpbnQpIGxlbiwgbmFtZV8xKTsKKwkJaWYgKGNoZGlyKGN3ZF9idWYpICE9IDApCisJCSAgICBjb250aW51ZTsKKworCQllbnRyeWRpciA9IG9wZW5kaXIoIi4iKTsKKwkJaWYgKGVudHJ5ZGlyID09IDApIHsKKwkJICAgIHBlcnJvcihjd2RfYnVmKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJCXdoaWxlICgoZW50cnkgPSByZWFkZGlyKGVudHJ5ZGlyKSkgIT0gMCkgeworCQkgICAgY2hhciBuYW1lXzJbUEFUSF9NQVhdOworCQkgICAgVEVSTVRZUEUgbHRlcm07CisJCSAgICBjaGFyICpjbjsKKwkJICAgIGludCBzdGF0dXM7CisKKwkJICAgIGxlbiA9IE5BTUxFTihlbnRyeSk7CisJCSAgICBzdHJuY3B5KG5hbWVfMiwgZW50cnktPmRfbmFtZSwgbGVuKVtsZW5dID0gJ1wwJzsKKwkJICAgIGlmIChpc0RvdG5hbWUobmFtZV8yKSB8fCAhX25jX2lzX2ZpbGVfcGF0aChuYW1lXzIpKQorCQkJY29udGludWU7CisKKwkJICAgIHN0YXR1cyA9IF9uY19yZWFkX2ZpbGVfZW50cnkobmFtZV8yLCAmbHRlcm0pOworCQkgICAgaWYgKHN0YXR1cyA8PSAwKSB7CisJCQkodm9pZCkgZmZsdXNoKHN0ZG91dCk7CisJCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgICAgICIlczogY291bGRuJ3Qgb3BlbiB0ZXJtaW5mbyBmaWxlICVzLlxuIiwKKwkJCQkgICAgICAgX25jX3Byb2duYW1lLCBuYW1lXzIpOworCQkJcmV0dXJuIChFWElUX0ZBSUxVUkUpOworCQkgICAgfQorCisJCSAgICAvKiBvbmx5IHZpc2l0IHRoaW5ncyBvbmNlLCBieSBwcmltYXJ5IG5hbWUgKi8KKwkJICAgIGNuID0gX25jX2ZpcnN0X25hbWUobHRlcm0udGVybV9uYW1lcyk7CisJCSAgICBpZiAoIXN0cmNtcChjbiwgbmFtZV8yKSkgeworCQkJLyogYXBwbHkgdGhlIHNlbGVjdGVkIGhvb2sgZnVuY3Rpb24gKi8KKwkJCSgqaG9vaykgKGNuLCAmbHRlcm0pOworCQkgICAgfQorCQkgICAgX25jX2ZyZWVfdGVybXR5cGUoJmx0ZXJtKTsKKwkJfQorCQljbG9zZWRpcihlbnRyeWRpcik7CisJICAgIH0KKwkgICAgY2xvc2VkaXIodGVybWRpcik7CisJICAgIGlmIChjd2RfYnVmICE9IDApCisJCWZyZWUoY3dkX2J1Zik7CisJfQorI2lmIFVTRV9IQVNIRURfREIKKwllbHNlIHsKKwkgICAgREIgKmNhcGRicDsKKwkgICAgY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisKKwkgICAgaWYgKG1ha2VfZGJfbmFtZShmaWxlbmFtZSwgZWFyZ3ZbaV0sIHNpemVvZihmaWxlbmFtZSkpKSB7CisJCWlmICgoY2FwZGJwID0gX25jX2RiX29wZW4oZmlsZW5hbWUsIEZBTFNFKSkgIT0gMCkgeworCQkgICAgREJUIGtleSwgZGF0YTsKKwkJICAgIGludCBjb2RlOworCisJCSAgICBjb2RlID0gX25jX2RiX2ZpcnN0KGNhcGRicCwgJmtleSwgJmRhdGEpOworCQkgICAgd2hpbGUgKGNvZGUgPT0gMCkgeworCQkJVEVSTVRZUEUgbHRlcm07CisJCQlpbnQgdXNlZDsKKwkJCWNoYXIgKmhhdmU7CisJCQljaGFyICpjbjsKKworCQkJaWYgKF9uY19kYl9oYXZlX2RhdGEoJmtleSwgJmRhdGEsICZoYXZlLCAmdXNlZCkpIHsKKwkJCSAgICBpZiAoX25jX3JlYWRfdGVybXR5cGUoJmx0ZXJtLCBoYXZlLCB1c2VkKSA+IDApIHsKKwkJCQkvKiBvbmx5IHZpc2l0IHRoaW5ncyBvbmNlLCBieSBwcmltYXJ5IG5hbWUgKi8KKwkJCQljbiA9IF9uY19maXJzdF9uYW1lKGx0ZXJtLnRlcm1fbmFtZXMpOworCQkJCS8qIGFwcGx5IHRoZSBzZWxlY3RlZCBob29rIGZ1bmN0aW9uICovCisJCQkJKCpob29rKSAoY24sICZsdGVybSk7CisJCQkJX25jX2ZyZWVfdGVybXR5cGUoJmx0ZXJtKTsKKwkJCSAgICB9CisJCQl9CisJCQljb2RlID0gX25jX2RiX25leHQoY2FwZGJwLCAma2V5LCAmZGF0YSk7CisJCSAgICB9CisKKwkJICAgIF9uY19kYl9jbG9zZShjYXBkYnApOworCQl9CisJICAgIH0KKwl9CisjZW5kaWYKKyNlbmRpZgorI2lmIFVTRV9URVJNQ0FQCisjaWYgSEFWRV9CU0RfQ0dFVEVOVAorCWNoYXIgKmRiX2FycmF5WzJdOworCWNoYXIgKmJ1ZmZlciA9IDA7CisKKwlpZiAodmVyYm9zaXR5KQorCSAgICAodm9pZCkgcHJpbnRmKCIjXG4jJXM6XG4jXG4iLCBlYXJndltpXSk7CisKKwlkYl9hcnJheVswXSA9IGVhcmd2W2ldOworCWRiX2FycmF5WzFdID0gMDsKKworCWlmIChjZ2V0Zmlyc3QoJmJ1ZmZlciwgZGJfYXJyYXkpKSB7CisJICAgIHNob3dfdGVybWNhcChidWZmZXIsIGhvb2spOworCSAgICBmcmVlKGJ1ZmZlcik7CisJICAgIHdoaWxlIChjZ2V0bmV4dCgmYnVmZmVyLCBkYl9hcnJheSkpIHsKKwkJc2hvd190ZXJtY2FwKGJ1ZmZlciwgaG9vayk7CisJCWZyZWUoYnVmZmVyKTsKKwkgICAgfQorCX0KKwljZ2V0Y2xvc2UoKTsKKyNlbHNlCisJLyogc2NhbiB0ZXJtY2FwIHRleHQtZmlsZSBvbmx5ICovCisJaWYgKF9uY19pc19maWxlX3BhdGgoZWFyZ3ZbaV0pKSB7CisJICAgIGNoYXIgYnVmZmVyWzIwNDhdOworCSAgICBGSUxFICpmcDsKKworCSAgICBpZiAoKGZwID0gZm9wZW4oZWFyZ3ZbaV0sICJyIikpICE9IDApIHsKKwkJd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwKSAhPSAwKSB7CisJCSAgICBpZiAoKmJ1ZmZlciA9PSAnIycpCisJCQljb250aW51ZTsKKwkJICAgIGlmIChpc3NwYWNlKCpidWZmZXIpKQorCQkJY29udGludWU7CisJCSAgICBzaG93X3Rlcm1jYXAoYnVmZmVyLCBob29rKTsKKwkJfQorCQlmY2xvc2UoZnApOworCSAgICB9CisJfQorI2VuZGlmCisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gKEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyBbLWFodVVWXSBbLXYgbl0gW2ZpbGUuLi5dXG4iLCBfbmNfcHJvZ25hbWUpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGJvb2wgYWxsX2RpcnMgPSBGQUxTRTsKKyAgICBib29sIGRpcmVjdF9kZXBlbmRlbmNpZXMgPSBGQUxTRTsKKyAgICBib29sIGludmVydF9kZXBlbmRlbmNpZXMgPSBGQUxTRTsKKyAgICBib29sIGhlYWRlciA9IEZBTFNFOworICAgIGNoYXIgKnJlcG9ydF9maWxlID0gMDsKKyAgICB1bnNpZ25lZCBpOworICAgIGludCBjb2RlOworICAgIGludCB0aGlzX29wdCwgbGFzdF9vcHQgPSAnPyc7CisgICAgaW50IHZfb3B0ID0gMDsKKworICAgIF9uY19wcm9nbmFtZSA9IF9uY19yb290bmFtZShhcmd2WzBdKTsKKworICAgIHdoaWxlICgodGhpc19vcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgIjAxMjM0NTY3ODlhaHU6dlU6ViIpKSAhPSAtMSkgeworCS8qIGhhbmRsZSBvcHRpb25hbCBwYXJhbWV0ZXIgKi8KKwlpZiAoaXNkaWdpdCh0aGlzX29wdCkpIHsKKwkgICAgc3dpdGNoIChsYXN0X29wdCkgeworCSAgICBjYXNlICd2JzoKKwkJdl9vcHQgPSAodGhpc19vcHQgLSAnMCcpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJaWYgKGlzZGlnaXQobGFzdF9vcHQpKQorCQkgICAgdl9vcHQgKj0gMTA7CisJCWVsc2UKKwkJICAgIHZfb3B0ID0gMDsKKwkJdl9vcHQgKz0gKHRoaXNfb3B0IC0gJzAnKTsKKwkJbGFzdF9vcHQgPSB0aGlzX29wdDsKKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9CisJc3dpdGNoICh0aGlzX29wdCkgeworCWNhc2UgJ2EnOgorCSAgICBhbGxfZGlycyA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2gnOgorCSAgICBoZWFkZXIgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICd1JzoKKwkgICAgZGlyZWN0X2RlcGVuZGVuY2llcyA9IFRSVUU7CisJICAgIHJlcG9ydF9maWxlID0gb3B0YXJnOworCSAgICBicmVhazsKKwljYXNlICd2JzoKKwkgICAgdl9vcHQgPSAxOworCSAgICBicmVhazsKKwljYXNlICdVJzoKKwkgICAgaW52ZXJ0X2RlcGVuZGVuY2llcyA9IFRSVUU7CisJICAgIHJlcG9ydF9maWxlID0gb3B0YXJnOworCSAgICBicmVhazsKKwljYXNlICdWJzoKKwkgICAgcHV0cyhjdXJzZXNfdmVyc2lvbigpKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKyAgICB9CisgICAgc2V0X3RyYWNlX2xldmVsKHZfb3B0KTsKKworICAgIGlmIChyZXBvcnRfZmlsZSAhPSAwKSB7CisJaWYgKGZyZW9wZW4ocmVwb3J0X2ZpbGUsICJyIiwgc3RkaW4pID09IDApIHsKKwkgICAgKHZvaWQpIGZmbHVzaChzdGRvdXQpOworCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBvcGVuICVzXG4iLCBfbmNfcHJvZ25hbWUsIHJlcG9ydF9maWxlKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiBwYXJzZSBlbnRyaWVzIG91dCBvZiB0aGUgc291cmNlIGZpbGUgKi8KKwlfbmNfc2V0X3NvdXJjZShyZXBvcnRfZmlsZSk7CisJX25jX3JlYWRfZW50cnlfc291cmNlKHN0ZGluLCAwLCBGQUxTRSwgRkFMU0UsIE5VTExIT09LKTsKKyAgICB9CisKKyAgICAvKiBtYXliZSB3ZSB3YW50IGEgZGlyZWN0LWRlcGVuZGVuY3kgbGlzdGluZz8gKi8KKyAgICBpZiAoZGlyZWN0X2RlcGVuZGVuY2llcykgeworCUVOVFJZICpxcDsKKworCWZvcl9lbnRyeV9saXN0KHFwKSB7CisJICAgIGlmIChxcC0+bnVzZXMpIHsKKwkJdW5zaWduZWQgajsKKworCQkodm9pZCkgcHJpbnRmKCIlczoiLCBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcykpOworCQlmb3IgKGogPSAwOyBqIDwgcXAtPm51c2VzOyBqKyspCisJCSAgICAodm9pZCkgcHJpbnRmKCIgJXMiLCBxcC0+dXNlc1tqXS5uYW1lKTsKKwkJcHV0Y2hhcignXG4nKTsKKwkgICAgfQorCX0KKworCUV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7CisgICAgfQorCisgICAgLyogbWF5YmUgd2Ugd2FudCBhIHJldmVyc2UtZGVwZW5kZW5jeSBsaXN0aW5nPyAqLworICAgIGlmIChpbnZlcnRfZGVwZW5kZW5jaWVzKSB7CisJRU5UUlkgKnFwLCAqcnA7CisJaW50IG1hdGNoY291bnQ7CisKKwlmb3JfZW50cnlfbGlzdChxcCkgeworCSAgICBtYXRjaGNvdW50ID0gMDsKKwkgICAgZm9yX2VudHJ5X2xpc3QocnApIHsKKwkJaWYgKHJwLT5udXNlcyA9PSAwKQorCQkgICAgY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IHJwLT5udXNlczsgaSsrKQorCQkgICAgaWYgKF9uY19uYW1lX21hdGNoKHFwLT50dGVybS50ZXJtX25hbWVzLAorCQkJCSAgICAgICBycC0+dXNlc1tpXS5uYW1lLCAifCIpKSB7CisJCQlpZiAobWF0Y2hjb3VudCsrID09IDApCisJCQkgICAgKHZvaWQpIHByaW50ZigiJXM6IiwKKwkJCQkJICBfbmNfZmlyc3RfbmFtZShxcC0+dHRlcm0udGVybV9uYW1lcykpOworCQkJKHZvaWQpIHByaW50ZigiICVzIiwKKwkJCQkgICAgICBfbmNfZmlyc3RfbmFtZShycC0+dHRlcm0udGVybV9uYW1lcykpOworCQkgICAgfQorCSAgICB9CisJICAgIGlmIChtYXRjaGNvdW50KQorCQlwdXRjaGFyKCdcbicpOworCX0KKworCUV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBJZiB3ZSBnZXQgdGhpcyBmYXIsIHVzZXIgd2FudHMgYSBzaW1wbGUgdGVybWluYWwgdHlwZSBsaXN0aW5nLgorICAgICAqLworICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisJY29kZSA9IHR5cGVsaXN0KGFyZ2MgLSBvcHRpbmQsIGFyZ3YgKyBvcHRpbmQsIGhlYWRlciwgZGVzY2hvb2spOworICAgIH0gZWxzZSBpZiAoYWxsX2RpcnMpIHsKKwlEQkRJUlMgc3RhdGU7CisJaW50IG9mZnNldDsKKwlpbnQgcGFzczsKKwljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKiplYXJndiA9IDA7CisKKwljb2RlID0gRVhJVF9GQUlMVVJFOworCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyArK3Bhc3MpIHsKKwkgICAgdW5zaWduZWQgY291bnQgPSAwOworCisJICAgIF9uY19maXJzdF9kYigmc3RhdGUsICZvZmZzZXQpOworCSAgICB3aGlsZSAoKHBhdGggPSBfbmNfbmV4dF9kYigmc3RhdGUsICZvZmZzZXQpKSAhPSAwKSB7CisJCWlmICghaXNfZGF0YWJhc2UocGF0aCkpIHsKKwkJICAgIDsKKwkJfSBlbHNlIGlmIChlYXJndiAhPSAwKSB7CisJCSAgICB1bnNpZ25lZCBuOworCQkgICAgaW50IGZvdW5kID0gRkFMU0U7CisKKwkJICAgIC8qIGVsaW1pbmF0ZSBkdXBsaWNhdGVzICovCisJCSAgICBmb3IgKG4gPSAwOyBuIDwgY291bnQ7ICsrbikgeworCQkJaWYgKCFzdHJjbXAocGF0aCwgZWFyZ3Zbbl0pKSB7CisJCQkgICAgZm91bmQgPSBUUlVFOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQkgICAgaWYgKCFmb3VuZCkgeworCQkJZWFyZ3ZbY291bnRdID0gc3RyZHVwKHBhdGgpOworCQkJKytjb3VudDsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgICsrY291bnQ7CisJCX0KKwkgICAgfQorCSAgICBpZiAoIXBhc3MpIHsKKwkJZWFyZ3YgPSB0eXBlQ2FsbG9jKGNoYXIgKiwgY291bnQgKyAxKTsKKwkgICAgfSBlbHNlIHsKKwkJY29kZSA9IHR5cGVsaXN0KChpbnQpIGNvdW50LCBlYXJndiwgaGVhZGVyLCBkZXNjaG9vayk7CisJCXdoaWxlIChjb3VudC0tID4gMCkKKwkJICAgIGZyZWUoZWFyZ3ZbY291bnRdKTsKKwkJZnJlZShlYXJndik7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwlEQkRJUlMgc3RhdGU7CisJaW50IG9mZnNldDsKKwljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKmVhcmd2WzNdOworCWludCBjb3VudCA9IDA7CisKKwlfbmNfZmlyc3RfZGIoJnN0YXRlLCAmb2Zmc2V0KTsKKwl3aGlsZSAoKHBhdGggPSBfbmNfbmV4dF9kYigmc3RhdGUsICZvZmZzZXQpKSAhPSAwKSB7CisJICAgIGlmIChpc19kYXRhYmFzZShwYXRoKSkgeworCQllYXJndltjb3VudCsrXSA9IHN0cmR1cChwYXRoKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZWFyZ3ZbY291bnRdID0gMDsKKworCWNvZGUgPSB0eXBlbGlzdChjb3VudCwgZWFyZ3YsIGhlYWRlciwgZGVzY2hvb2spOworCisJd2hpbGUgKGNvdW50LS0gPiAwKQorCSAgICBmcmVlKGVhcmd2W2NvdW50XSk7CisgICAgfQorICAgIF9uY19sYXN0X2RiKCk7CisKKyAgICBFeGl0UHJvZ3JhbShjb2RlKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Byb2dzL3RwdXQuYyBiL25jdXJzZXMtNS43L3Byb2dzL3RwdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjJkNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvcHJvZ3MvdHB1dC5jCkBAIC0wLDAgKzEsNDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEF1dGhvcjogWmV5ZCBNLiBCZW4tSGFsaW0gPHptYmVuaGFsQG5ldGNvbS5jb20+IDE5OTIsMTk5NSAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHRwdXQuYyAtLSBzaGVsbHNjcmlwdCBhY2Nlc3MgdG8gdGVybWluYWwgY2FwYWJpbGl0aWVzCisgKgorICogYnkgRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+LCBwb3J0aW9ucyBiYXNlZCBvbiBjb2RlIGZyb20KKyAqIFJvc3MgUmlkZ2UncyBteXRpbmZvIHBhY2thZ2UuCisgKi8KKworI2RlZmluZSBVU0VfTElCVElORk8KKyNpbmNsdWRlIDxwcm9ncy5wcml2Lmg+CisKKyNpZiAhUFVSRV9URVJNSU5GTworI2luY2x1ZGUgPGR1bXBfZW50cnkuaD4KKyNpbmNsdWRlIDx0ZXJtc29ydC5jPgorI2VuZGlmCisjaW5jbHVkZSA8dHJhbnNmb3JtLmg+CisKK01PRFVMRV9JRCgiJElkOiB0cHV0LmMsdiAxLjQyIDIwMDgvMDcvMTMgMTE6MDU6MTIgdG9tIEV4cCAkIikKKworI2RlZmluZSBQVVRTKHMpCQlmcHV0cyhzLCBzdGRvdXQpCisjZGVmaW5lIFBVVENIQVIoYykJcHV0Y2hhcihjKQorI2RlZmluZSBGTFVTSAkJZmZsdXNoKHN0ZG91dCkKKwordHlwZWRlZiBlbnVtIHsKKyAgICBOdW1iZXJzID0gMAorICAgICxOdW1fU3RyCisgICAgLE51bV9TdHJfU3RyCit9IFRQYXJhbXM7CisKK3N0YXRpYyBjaGFyICpwcmdfbmFtZTsKK3N0YXRpYyBib29sIGlzX2luaXQgPSBGQUxTRTsKK3N0YXRpYyBib29sIGlzX3Jlc2V0ID0gRkFMU0U7CisKK3N0YXRpYyB2b2lkCitxdWl0KGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworCisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBwcmdfbmFtZSk7CisgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3ApOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICB2YV9lbmQoYXJncCk7CisgICAgRXhpdFByb2dyYW0oc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgWy1WXSBbLVNdIFstVCB0ZXJtXSBjYXBuYW1lXG4iLCBwcmdfbmFtZSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX2FsaWFzZXMoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpc19pbml0ID0gKHN0cmNtcChuYW1lLCBQUk9HX0lOSVQpID09IDApOworICAgIGlzX3Jlc2V0ID0gKHN0cmNtcChuYW1lLCBQUk9HX1JFU0VUKSA9PSAwKTsKK30KKworLyoKKyAqIExvb2t1cCB0aGUgdHlwZSBvZiBjYWxsIHdlIHNob3VsZCBtYWtlIHRvIHRwYXJtKCkuICBUaGlzIGlnbm9yZXMgdGhlIGFjdHVhbAorICogdGVybWluZm8gY2FwYWJpbGl0eSAoYmFkLCBiZWNhdXNlIGl0IGlzIG5vdCBleHRlbnNpYmxlKSwgYnV0IG1ha2VzIHRoaXMKKyAqIGNvZGUgcG9ydGFibGUgdG8gcGxhdGZvcm1zIHdoZXJlIHNpemVvZihpbnQpICE9IHNpemVvZihjaGFyICopLgorICoKKyAqIEZJWE1FOiBJZiB3ZSB3YW50IGV4dGVuc2liaWxpdHksIGFuYWx5emUgdGhlIGNhcGFiaWxpdHkgc3RyaW5nIGFzIHdlIGRvCisgKiBpbiB0cGFybSgpIHRvIGRlY2lkZSBob3cgdG8gcGFyc2UgdGhlIHZhcmFyZ3MgbGlzdC4KKyAqLworc3RhdGljIFRQYXJhbXMKK3RwYXJtX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNkZWZpbmUgVEQoY29kZSwgbG9uZ25hbWUsIHRpLCB0Yykge2NvZGUsbG9uZ25hbWV9LHtjb2RlLHRpfSx7Y29kZSx0Y30KKyAgICBUUGFyYW1zIHJlc3VsdCA9IE51bWJlcnM7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJVFBhcmFtcyBjb2RlOworCWNvbnN0IGNoYXIgKm5hbWU7CisgICAgfSB0YWJsZVtdID0geworCVREKE51bV9TdHIsCSJwa2V5X2tleSIsCSJwZmtleSIsCSJwayIpLAorCVREKE51bV9TdHIsCSJwa2V5X2xvY2FsIiwJInBmbG9jIiwJInBsIiksCisJVEQoTnVtX1N0ciwJInBrZXlfeG1pdCIsCSJwZngiLAkJInB4IiksCisJVEQoTnVtX1N0ciwJInBsYWJfbm9ybSIsCSJwbG4iLAkJInBuIiksCisJVEQoTnVtX1N0cl9TdHIsICJwa2V5X3BsYWIiLAkicGZ4bCIsCQkieGwiKSwKKyAgICB9OworICAgIC8qICpJTkRFTlQtT04qICovCisKKyAgICB1bnNpZ25lZCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YodGFibGUpOyBuKyspIHsKKwlpZiAoIXN0cmNtcChuYW1lLCB0YWJsZVtuXS5uYW1lKSkgeworCSAgICByZXN1bHQgPSB0YWJsZVtuXS5jb2RlOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK2V4aXRfY29kZShpbnQgdG9rZW4sIGludCB2YWx1ZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gOTk7CisKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgY2FzZSBCT09MRUFOOgorCXJlc3VsdCA9ICF2YWx1ZTsJLyogVFJVRT0wLCBGQUxTRT0xICovCisJYnJlYWs7CisgICAgY2FzZSBOVU1CRVI6CisJcmVzdWx0ID0gMDsJCS8qIGFsd2F5cyB6ZXJvICovCisJYnJlYWs7CisgICAgY2FzZSBTVFJJTkc6CisJcmVzdWx0ID0gdmFsdWU7CQkvKiAwPW5vcm1hbCwgMT1taXNzaW5nICovCisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3RwdXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKm5hbWU7CisgICAgY2hhciAqczsKKyAgICBpbnQgaSwgaiwgYzsKKyAgICBpbnQgc3RhdHVzOworICAgIEZJTEUgKmY7CisKKyAgICBpZiAoKG5hbWUgPSBhcmd2WzBdKSA9PSAwKQorCW5hbWUgPSAiIjsKKyAgICBjaGVja19hbGlhc2VzKG5hbWUpOworICAgIGlmIChpc19yZXNldCB8fCBpc19pbml0KSB7CisJaWYgKGluaXRfcHJvZyAhPSAwKSB7CisJICAgIHN5c3RlbShpbml0X3Byb2cpOworCX0KKwlGTFVTSDsKKworCWlmIChpc19yZXNldCAmJiByZXNldF8xc3RyaW5nICE9IDApIHsKKwkgICAgUFVUUyhyZXNldF8xc3RyaW5nKTsKKwl9IGVsc2UgaWYgKGluaXRfMXN0cmluZyAhPSAwKSB7CisJICAgIFBVVFMoaW5pdF8xc3RyaW5nKTsKKwl9CisJRkxVU0g7CisKKwlpZiAoaXNfcmVzZXQgJiYgcmVzZXRfMnN0cmluZyAhPSAwKSB7CisJICAgIFBVVFMocmVzZXRfMnN0cmluZyk7CisJfSBlbHNlIGlmIChpbml0XzJzdHJpbmcgIT0gMCkgeworCSAgICBQVVRTKGluaXRfMnN0cmluZyk7CisJfQorCUZMVVNIOworCisjaWZkZWYgc2V0X2xyX21hcmdpbgorCWlmIChzZXRfbHJfbWFyZ2luICE9IDApIHsKKwkgICAgUFVUUyhUUEFSTV8yKHNldF9scl9tYXJnaW4sIDAsIGNvbHVtbnMgLSAxKSk7CisJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBzZXRfbGVmdF9tYXJnaW5fcGFybQorCSAgICBpZiAoc2V0X2xlZnRfbWFyZ2luX3Bhcm0gIT0gMAorCQkmJiBzZXRfcmlnaHRfbWFyZ2luX3Bhcm0gIT0gMCkgeworCSAgICBQVVRTKFRQQVJNXzEoc2V0X2xlZnRfbWFyZ2luX3Bhcm0sIDApKTsKKwkgICAgUFVUUyhUUEFSTV8xKHNldF9yaWdodF9tYXJnaW5fcGFybSwgY29sdW1ucyAtIDEpKTsKKwl9IGVsc2UKKyNlbmRpZgorCSAgICBpZiAoY2xlYXJfbWFyZ2lucyAhPSAwCisJCSYmIHNldF9sZWZ0X21hcmdpbiAhPSAwCisJCSYmIHNldF9yaWdodF9tYXJnaW4gIT0gMCkgeworCSAgICBQVVRTKGNsZWFyX21hcmdpbnMpOworCSAgICBpZiAoY2FycmlhZ2VfcmV0dXJuICE9IDApIHsKKwkJUFVUUyhjYXJyaWFnZV9yZXR1cm4pOworCSAgICB9IGVsc2UgeworCQlQVVRDSEFSKCdccicpOworCSAgICB9CisJICAgIFBVVFMoc2V0X2xlZnRfbWFyZ2luKTsKKwkgICAgaWYgKHBhcm1fcmlnaHRfY3Vyc29yKSB7CisJCVBVVFMoVFBBUk1fMShwYXJtX3JpZ2h0X2N1cnNvciwgY29sdW1ucyAtIDEpKTsKKwkgICAgfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGNvbHVtbnMgLSAxOyBpKyspIHsKKwkJICAgIFBVVENIQVIoJyAnKTsKKwkJfQorCSAgICB9CisJICAgIFBVVFMoc2V0X3JpZ2h0X21hcmdpbik7CisJICAgIGlmIChjYXJyaWFnZV9yZXR1cm4gIT0gMCkgeworCQlQVVRTKGNhcnJpYWdlX3JldHVybik7CisJICAgIH0gZWxzZSB7CisJCVBVVENIQVIoJ1xyJyk7CisJICAgIH0KKwl9CisJRkxVU0g7CisKKwlpZiAoaW5pdF90YWJzICE9IDgpIHsKKwkgICAgaWYgKGNsZWFyX2FsbF90YWJzICE9IDAgJiYgc2V0X3RhYiAhPSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjb2x1bW5zIC0gMTsgaSArPSA4KSB7CisJCSAgICBpZiAocGFybV9yaWdodF9jdXJzb3IpIHsKKwkJCVBVVFMoVFBBUk1fMShwYXJtX3JpZ2h0X2N1cnNvciwgOCkpOworCQkgICAgfSBlbHNlIHsKKwkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCisJCQkgICAgUFVUQ0hBUignICcpOworCQkgICAgfQorCQkgICAgUFVUUyhzZXRfdGFiKTsKKwkJfQorCQlGTFVTSDsKKwkgICAgfQorCX0KKworCWlmIChpc19yZXNldCAmJiByZXNldF9maWxlICE9IDApIHsKKwkgICAgZiA9IGZvcGVuKHJlc2V0X2ZpbGUsICJyIik7CisJICAgIGlmIChmID09IDApIHsKKwkJcXVpdCg0ICsgZXJybm8sICJDYW4ndCBvcGVuIHJlc2V0X2ZpbGU6ICclcyciLCByZXNldF9maWxlKTsKKwkgICAgfQorCSAgICB3aGlsZSAoKGMgPSBmZ2V0YyhmKSkgIT0gRU9GKSB7CisJCVBVVENIQVIoYyk7CisJICAgIH0KKwkgICAgZmNsb3NlKGYpOworCX0gZWxzZSBpZiAoaW5pdF9maWxlICE9IDApIHsKKwkgICAgZiA9IGZvcGVuKGluaXRfZmlsZSwgInIiKTsKKwkgICAgaWYgKGYgPT0gMCkgeworCQlxdWl0KDQgKyBlcnJubywgIkNhbid0IG9wZW4gaW5pdF9maWxlOiAnJXMnIiwgaW5pdF9maWxlKTsKKwkgICAgfQorCSAgICB3aGlsZSAoKGMgPSBmZ2V0YyhmKSkgIT0gRU9GKSB7CisJCVBVVENIQVIoYyk7CisJICAgIH0KKwkgICAgZmNsb3NlKGYpOworCX0KKwlGTFVTSDsKKworCWlmIChpc19yZXNldCAmJiByZXNldF8zc3RyaW5nICE9IDApIHsKKwkgICAgUFVUUyhyZXNldF8zc3RyaW5nKTsKKwl9IGVsc2UgaWYgKGluaXRfM3N0cmluZyAhPSAwKSB7CisJICAgIFBVVFMoaW5pdF8zc3RyaW5nKTsKKwl9CisJRkxVU0g7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHN0cmNtcChuYW1lLCAibG9uZ25hbWUiKSA9PSAwKSB7CisJUFVUUyhsb25nbmFtZSgpKTsKKwlyZXR1cm4gMDsKKyAgICB9CisjaWYgIVBVUkVfVEVSTUlORk8KKyAgICB7CisJY29uc3Qgc3RydWN0IG5hbWVfdGFibGVfZW50cnkgKm5wOworCisJaWYgKChucCA9IF9uY19maW5kX2VudHJ5KG5hbWUsIF9uY19nZXRfaGFzaF90YWJsZSgxKSkpICE9IDApCisJICAgIHN3aXRjaCAobnAtPm50ZV90eXBlKSB7CisJICAgIGNhc2UgQk9PTEVBTjoKKwkJaWYgKGJvb2xfZnJvbV90ZXJtY2FwW25wLT5udGVfaW5kZXhdKQorCQkgICAgbmFtZSA9IGJvb2xuYW1lc1tucC0+bnRlX2luZGV4XTsKKwkJYnJlYWs7CisKKwkgICAgY2FzZSBOVU1CRVI6CisJCWlmIChudW1fZnJvbV90ZXJtY2FwW25wLT5udGVfaW5kZXhdKQorCQkgICAgbmFtZSA9IG51bW5hbWVzW25wLT5udGVfaW5kZXhdOworCQlicmVhazsKKworCSAgICBjYXNlIFNUUklORzoKKwkJaWYgKHN0cl9mcm9tX3Rlcm1jYXBbbnAtPm50ZV9pbmRleF0pCisJCSAgICBuYW1lID0gc3RybmFtZXNbbnAtPm50ZV9pbmRleF07CisJCWJyZWFrOworCSAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoKHN0YXR1cyA9IHRpZ2V0ZmxhZyhuYW1lKSkgIT0gLTEpIHsKKwlyZXR1cm4gZXhpdF9jb2RlKEJPT0xFQU4sIHN0YXR1cyk7CisgICAgfSBlbHNlIGlmICgoc3RhdHVzID0gdGlnZXRudW0obmFtZSkpICE9IENBTkNFTExFRF9OVU1FUklDKSB7CisJKHZvaWQpIHByaW50ZigiJWRcbiIsIHN0YXR1cyk7CisJcmV0dXJuIGV4aXRfY29kZShOVU1CRVIsIDApOworICAgIH0gZWxzZSBpZiAoKHMgPSB0aWdldHN0cihuYW1lKSkgPT0gQ0FOQ0VMTEVEX1NUUklORykgeworCXF1aXQoNCwgInVua25vd24gdGVybWluZm8gY2FwYWJpbGl0eSAnJXMnIiwgbmFtZSk7CisgICAgfSBlbHNlIGlmIChzICE9IEFCU0VOVF9TVFJJTkcpIHsKKwlpZiAoYXJnYyA+IDEpIHsKKwkgICAgaW50IGs7CisJICAgIGludCBwb3Bjb3VudDsKKwkgICAgbG9uZyBudW1iZXJzWzEgKyBOVU1fUEFSTV07CisJICAgIGNoYXIgKnN0cmluZ3NbMSArIE5VTV9QQVJNXTsKKwkgICAgY2hhciAqcF9pc19zW05VTV9QQVJNXTsKKworCSAgICAvKiBOYXN0eSBoYWNrIHRpbWUuIFRoZSB0cGFybSBmdW5jdGlvbiBuZWVkcyB0byBzZWUgbnVtZXJpYworCSAgICAgKiBwYXJhbWV0ZXJzIGFzIG51bWJlcnMsIG5vdCBhcyBwb2ludGVycyB0byB0aGVpciBzdHJpbmcKKwkgICAgICogcmVwcmVzZW50YXRpb25zCisJICAgICAqLworCisJICAgIGZvciAoayA9IDE7IGsgPCBhcmdjOyBrKyspIHsKKwkJY2hhciAqdG1wID0gMDsKKwkJc3RyaW5nc1trXSA9IGFyZ3Zba107CisJCW51bWJlcnNba10gPSBzdHJ0b2woYXJndltrXSwgJnRtcCwgMCk7CisJCWlmICh0bXAgPT0gMCB8fCAqdG1wICE9IDApCisJCSAgICBudW1iZXJzW2tdID0gMDsKKwkgICAgfQorCSAgICBmb3IgKGsgPSBhcmdjOyBrIDw9IE5VTV9QQVJNOyBrKyspIHsKKwkJbnVtYmVyc1trXSA9IDA7CisJCXN0cmluZ3Nba10gPSAwOworCSAgICB9CisKKwkgICAgc3dpdGNoICh0cGFybV90eXBlKG5hbWUpKSB7CisJICAgIGNhc2UgTnVtX1N0cjoKKwkJcyA9IFRQQVJNXzIocywgbnVtYmVyc1sxXSwgc3RyaW5nc1syXSk7CisJCWJyZWFrOworCSAgICBjYXNlIE51bV9TdHJfU3RyOgorCQlzID0gVFBBUk1fMyhzLCBudW1iZXJzWzFdLCBzdHJpbmdzWzJdLCBzdHJpbmdzWzNdKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgTnVtYmVyczoKKwkgICAgZGVmYXVsdDoKKwkJKHZvaWQpIF9uY190cGFybV9hbmFseXplKHMsIHBfaXNfcywgJnBvcGNvdW50KTsKKyNkZWZpbmUgbXlQYXJhbShuKSAocF9pc19zW24gLSAxXSAhPSAwID8gKChsb25nKSBzdHJpbmdzW25dKSA6IG51bWJlcnNbbl0pCisJCXMgPSBUUEFSTV85KHMsCisJCQkgICAgbXlQYXJhbSgxKSwKKwkJCSAgICBteVBhcmFtKDIpLAorCQkJICAgIG15UGFyYW0oMyksCisJCQkgICAgbXlQYXJhbSg0KSwKKwkJCSAgICBteVBhcmFtKDUpLAorCQkJICAgIG15UGFyYW0oNiksCisJCQkgICAgbXlQYXJhbSg3KSwKKwkJCSAgICBteVBhcmFtKDgpLAorCQkJICAgIG15UGFyYW0oOSkpOworCQlicmVhazsKKwkgICAgfQorCX0KKworCS8qIHVzZSBwdXRwKCkgaW4gb3JkZXIgdG8gcGVyZm9ybSBwYWRkaW5nICovCisJcHV0cChzKTsKKwlyZXR1cm4gZXhpdF9jb2RlKFNUUklORywgMCk7CisgICAgfQorICAgIHJldHVybiBleGl0X2NvZGUoU1RSSU5HLCAxKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBjaGFyICp0ZXJtOworICAgIGludCBlcnJyZXQ7CisgICAgYm9vbCBjbWRsaW5lID0gVFJVRTsKKyAgICBpbnQgYzsKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworICAgIGludCByZXN1bHQgPSAwOworCisgICAgY2hlY2tfYWxpYXNlcyhwcmdfbmFtZSA9IF9uY19yb290bmFtZShhcmd2WzBdKSk7CisKKyAgICB0ZXJtID0gZ2V0ZW52KCJURVJNIik7CisKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgIlNUOlYiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlICdTJzoKKwkgICAgY21kbGluZSA9IEZBTFNFOworCSAgICBicmVhazsKKwljYXNlICdUJzoKKwkgICAgdXNlX2VudihGQUxTRSk7CisJICAgIHRlcm0gPSBvcHRhcmc7CisJICAgIGJyZWFrOworCWNhc2UgJ1YnOgorCSAgICBwdXRzKGN1cnNlc192ZXJzaW9uKCkpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJICAgIC8qIE5PVFJFQUNIRUQgKi8KKwl9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNb2RpZnkgdGhlIGFyZ3VtZW50IGxpc3QgdG8gb21pdCB0aGUgb3B0aW9ucyB3ZSBwcm9jZXNzZWQuCisgICAgICovCisgICAgaWYgKGlzX3Jlc2V0IHx8IGlzX2luaXQpIHsKKwlpZiAob3B0aW5kLS0gPCBhcmdjKSB7CisJICAgIGFyZ2MgLT0gb3B0aW5kOworCSAgICBhcmd2ICs9IG9wdGluZDsKKwl9CisJYXJndlswXSA9IHByZ19uYW1lOworICAgIH0gZWxzZSB7CisJYXJnYyAtPSBvcHRpbmQ7CisJYXJndiArPSBvcHRpbmQ7CisgICAgfQorCisgICAgaWYgKHRlcm0gPT0gMCB8fCAqdGVybSA9PSAnXDAnKQorCXF1aXQoMiwgIk5vIHZhbHVlIGZvciAkVEVSTSBhbmQgbm8gLVQgc3BlY2lmaWVkIik7CisKKyAgICBpZiAoc2V0dXB0ZXJtKHRlcm0sIFNURE9VVF9GSUxFTk8sICZlcnJyZXQpICE9IE9LICYmIGVycnJldCA8PSAwKQorCXF1aXQoMywgInVua25vd24gdGVybWluYWwgXCIlc1wiIiwgdGVybSk7CisKKyAgICBpZiAoY21kbGluZSkgeworCWlmICgoYXJnYyA8PSAwKSAmJiAhaXNfcmVzZXQgJiYgIWlzX2luaXQpCisJICAgIHVzYWdlKCk7CisJRXhpdFByb2dyYW0odHB1dChhcmdjLCBhcmd2KSk7CisgICAgfQorCisgICAgd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSAhPSAwKSB7CisJY2hhciAqYXJndmVjWzE2XTsJLyogY29tbWFuZCwgOSBwYXJtcywgbnVsbCwgJiBzbG9wICovCisJaW50IGFyZ251bSA9IDA7CisJY2hhciAqY3A7CisKKwkvKiBjcmFjayB0aGUgYXJndW1lbnQgbGlzdCBpbnRvIGEgZG9wZSB2ZWN0b3IgKi8KKwlmb3IgKGNwID0gYnVmOyAqY3A7IGNwKyspIHsKKwkgICAgaWYgKGlzc3BhY2UoVUNoYXIoKmNwKSkpIHsKKwkJKmNwID0gJ1wwJzsKKwkgICAgfSBlbHNlIGlmIChjcCA9PSBidWYgfHwgY3BbLTFdID09IDApIHsKKwkJYXJndmVjW2FyZ251bSsrXSA9IGNwOworCQlpZiAoYXJnbnVtID49IChpbnQpIFNJWkVPRihhcmd2ZWMpIC0gMSkKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQorCWFyZ3ZlY1thcmdudW1dID0gMDsKKworCWlmIChhcmdudW0gIT0gMAorCSAgICAmJiB0cHV0KGFyZ251bSwgYXJndmVjKSAhPSAwKSB7CisJICAgIGlmIChyZXN1bHQgPT0gMCkKKwkJcmVzdWx0ID0gNDsJLyogd2lsbCByZXR1cm4gdmFsdWUgPjQgKi8KKwkgICAgKytyZXN1bHQ7CisJfQorICAgIH0KKworICAgIEV4aXRQcm9ncmFtKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy9wcm9ncy90c2V0LmMgYi9uY3Vyc2VzLTUuNy9wcm9ncy90c2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0ZDJkNgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Byb2dzL3RzZXQuYwpAQCAtMCwwICsxLDEzMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBaZXlkIE0uIEJlbi1IYWxpbSA8em1iZW5oYWxAbmV0Y29tLmNvbT4gMTk5MiwxOTk1ICAgICAgICAgICAgICAgKgorICogICAgIGFuZDogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBhbmQ6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgICAgICAxOTk2LW9uICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHRzZXQuYyAtIHRlcm1pbmFsIGluaXRpYWxpemF0aW9uIHV0aWxpdHkKKyAqCisgKiBUaGlzIGNvZGUgd2FzIG1vc3RseSBzd2lwZWQgZnJvbSA0LjRCU0QgdHNldCwgd2l0aCBzb21lIG9ic29sZXNjZW50CisgKiBjcnVmdCByZW1vdmVkIGFuZCBzdWJzdGFudGlhbCBwb3J0aW9ucyByZXdyaXR0ZW4uICBBIFJlZ2VudHMgb2YgdGhlCisgKiBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgY29weXJpZ2h0IGFwcGxpZXMgdG8gc29tZSBwb3J0aW9ucyBvZiB0aGUKKyAqIGNvZGUsIGFuZCBpcyByZXByb2R1Y2VkIGJlbG93OgorICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk5MSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjZGVmaW5lIFVTRV9MSUJUSU5GTworI2RlZmluZSBfX0lOVEVSTkFMX0NBUFNfVklTSUJMRQkvKiB3ZSBuZWVkIHRvIHNlZSBoYXNfaGFyZHdhcmVfdGFicyAqLworI2luY2x1ZGUgPHByb2dzLnByaXYuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmIEhBVkVfR0VUVFRZTkFNICYmIEhBVkVfVFRZRU5UX0gKKyNpbmNsdWRlIDx0dHllbnQuaD4KKyNlbmRpZgorI2lmZGVmIE5lWFQKK2NoYXIgKnR0eW5hbWUoaW50IGZkKTsKKyNlbmRpZgorCisjaWYgSEFWRV9TSVpFQ0hBTkdFCisjIGlmICFkZWZpbmVkKHN1bikgfHwgIVRFUk1JT1MKKyMgIGlmIEhBVkVfU1lTX0lPQ1RMX0gKKyMgICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmIE5FRURfUFRFTV9ICisvKiB0aGV5IG5lZ2xlY3RlZCB0byBkZWZpbmUgc3RydWN0IHdpbnNpemUgaW4gdGVybWlvcy5oIC0tIGl0J3Mgb25seQorICAgaW4gdGVybWlvLmgJKi8KKyNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CisjaW5jbHVkZSA8c3lzL3B0ZW0uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8ZHVtcF9lbnRyeS5oPgorI2luY2x1ZGUgPHRyYW5zZm9ybS5oPgorCitNT0RVTEVfSUQoIiRJZDogdHNldC5jLHYgMS43NiAyMDA4LzEwLzExIDE5OjI2OjE5IHRvbSBFeHAgJCIpCisKKy8qCisgKiBTQ08gZGVmaW5lcyBUSU9DR1NJWkUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHN0cnVjdC4gIE90aGVyIHN5c3RlbXMgKFN1bk9TLAorICogU29sYXJpcywgSVJJWCkgZGVmaW5lIFRJT0NHV0lOU1ogYW5kIHN0cnVjdCB3aW5zaXplLgorICovCisjaWZkZWYgVElPQ0dTSVpFCisjIGRlZmluZSBJT0NUTF9HRVRfV0lOU0laRSBUSU9DR1NJWkUKKyMgZGVmaW5lIElPQ1RMX1NFVF9XSU5TSVpFIFRJT0NTU0laRQorIyBkZWZpbmUgU1RSVUNUX1dJTlNJWkUgc3RydWN0IHR0eXNpemUKKyMgZGVmaW5lIFdJTlNJWkVfUk9XUyhuKSBuLnRzX2xpbmVzCisjIGRlZmluZSBXSU5TSVpFX0NPTFMobikgbi50c19jb2xzCisjZWxzZQorIyBpZmRlZiBUSU9DR1dJTlNaCisjICBkZWZpbmUgSU9DVExfR0VUX1dJTlNJWkUgVElPQ0dXSU5TWgorIyAgZGVmaW5lIElPQ1RMX1NFVF9XSU5TSVpFIFRJT0NTV0lOU1oKKyMgIGRlZmluZSBTVFJVQ1RfV0lOU0laRSBzdHJ1Y3Qgd2luc2l6ZQorIyAgZGVmaW5lIFdJTlNJWkVfUk9XUyhuKSBuLndzX3JvdworIyAgZGVmaW5lIFdJTlNJWkVfQ09MUyhuKSBuLndzX2NvbAorIyBlbmRpZgorI2VuZGlmCisKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKKworI3VuZGVmIENUUkwKKyNkZWZpbmUgQ1RSTCh4KQkoKHgpICYgMHgxZikKKworY29uc3QgY2hhciAqX25jX3Byb2duYW1lID0gInRzZXQiOworCitzdGF0aWMgVFRZIG1vZGUsIG9sZG1vZGUsIG9yaWdpbmFsOworCitzdGF0aWMgYm9vbCBvcHRfYzsJCS8qIHNldCBjb250cm9sLWNoYXJzICovCitzdGF0aWMgYm9vbCBvcHRfdzsJCS8qIHNldCB3aW5kb3ctc2l6ZSAqLworCitzdGF0aWMgYm9vbCBjYW5fcmVzdG9yZSA9IEZBTFNFOworc3RhdGljIGJvb2wgaXNyZXNldCA9IEZBTFNFOwkvKiBpbnZva2VkIGFzIHJlc2V0ICovCitzdGF0aWMgaW50IHRlcmFzZWNoYXIgPSAtMTsJLyogbmV3IGVyYXNlIGNoYXJhY3RlciAqLworc3RhdGljIGludCBpbnRyY2hhciA9IC0xOwkvKiBuZXcgaW50ZXJydXB0IGNoYXJhY3RlciAqLworc3RhdGljIGludCB0a2lsbGNoYXIgPSAtMTsJLyogbmV3IGtpbGwgY2hhcmFjdGVyICovCitzdGF0aWMgaW50IHRsaW5lcywgdGNvbHVtbnM7CS8qIHdpbmRvdyBzaXplICovCisKKyNkZWZpbmUgTE9XRVJDQVNFKGMpICgoaXNhbHBoYShVQ2hhcihjKSkgJiYgaXN1cHBlcihVQ2hhcihjKSkpID8gdG9sb3dlcihVQ2hhcihjKSkgOiAoYykpCisKK3N0YXRpYyBpbnQKK0Nhc2VsZXNzQ21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CQkJCS8qIHN0cmNhc2VjbXAgaXNuJ3QgcG9ydGFibGUgKi8KKyAgICB3aGlsZSAoKmEgJiYgKmIpIHsKKwlpbnQgY21wID0gTE9XRVJDQVNFKCphKSAtIExPV0VSQ0FTRSgqYik7CisJaWYgKGNtcCAhPSAwKQorCSAgICBicmVhazsKKwlhKyssIGIrKzsKKyAgICB9CisgICAgcmV0dXJuIExPV0VSQ0FTRSgqYSkgLSBMT1dFUkNBU0UoKmIpOworfQorCitzdGF0aWMgdm9pZAorZXhpdF9lcnJvcih2b2lkKQoreworICAgIGlmIChjYW5fcmVzdG9yZSkKKwlTRVRfVFRZKFNUREVSUl9GSUxFTk8sICZvcmlnaW5hbCk7CisgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KKworc3RhdGljIHZvaWQKK2Vycihjb25zdCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiJXM6ICIsIF9uY19wcm9nbmFtZSk7CisgICAgKHZvaWQpIHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICBleGl0X2Vycm9yKCk7CisgICAgLyogTk9UUkVBQ0hFRCAqLworfQorCitzdGF0aWMgdm9pZAorZmFpbGVkKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICBjaGFyIHRlbXBbQlVGU0laXTsKKyAgICB1bnNpZ25lZCBsZW4gPSBzdHJsZW4oX25jX3Byb2duYW1lKSArIDI7CisKKyAgICBpZiAoKGludCkgbGVuIDwgKGludCkgc2l6ZW9mKHRlbXApIC0gMTIpIHsKKwlzdHJjcHkodGVtcCwgX25jX3Byb2duYW1lKTsKKwlzdHJjYXQodGVtcCwgIjogIik7CisgICAgfSBlbHNlIHsKKwlzdHJjcHkodGVtcCwgInRzZXQ6ICIpOworICAgIH0KKyAgICBwZXJyb3Ioc3RybmNhdCh0ZW1wLCBtc2csIHNpemVvZih0ZW1wKSAtIHN0cmxlbih0ZW1wKSAtIDIpKTsKKyAgICBleGl0X2Vycm9yKCk7CisgICAgLyogTk9UUkVBQ0hFRCAqLworfQorCitzdGF0aWMgdm9pZAorY2F0KGNoYXIgKmZpbGUpCit7CisgICAgRklMRSAqZnA7CisgICAgc2l6ZV90IG5yOworICAgIGNoYXIgYnVmW0JVRlNJWl07CisKKyAgICBpZiAoKGZwID0gZm9wZW4oZmlsZSwgInIiKSkgPT0gMCkKKwlmYWlsZWQoZmlsZSk7CisKKyAgICB3aGlsZSAoKG5yID0gZnJlYWQoYnVmLCBzaXplb2YoY2hhciksIHNpemVvZihidWYpLCBmcCkpICE9IDApCisJaWYgKGZ3cml0ZShidWYsIHNpemVvZihjaGFyKSwgbnIsIHN0ZGVycikgIT0gbnIpCisJICAgICAgZmFpbGVkKCJ3cml0ZSB0byBzdGRlcnIiKTsKKyAgICBmY2xvc2UoZnApOworfQorCitzdGF0aWMgaW50CitvdXRjKGludCBjKQoreworICAgIHJldHVybiBwdXRjKGMsIHN0ZGVycik7Cit9CisKKy8qIFByb21wdCB0aGUgdXNlciBmb3IgYSB0ZXJtaW5hbCB0eXBlLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorYXNrdXNlcihjb25zdCBjaGFyICpkZmx0KQoreworICAgIHN0YXRpYyBjaGFyIGFuc3dlclsyNTZdOworICAgIGNoYXIgKnA7CisKKyAgICAvKiBXZSBjYW4gZ2V0IHJlY2FsbGVkOyBpZiBzbywgZG9uJ3QgY29udGludWUgdXNlbGVzc2x5LiAqLworICAgIGNsZWFyZXJyKHN0ZGluKTsKKyAgICBpZiAoZmVvZihzdGRpbikgfHwgZmVycm9yKHN0ZGluKSkgeworCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJZXhpdF9lcnJvcigpOworCS8qIE5PVFJFQUNIRUQgKi8KKyAgICB9CisgICAgZm9yICg7OykgeworCWlmIChkZmx0KQorCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJUZXJtaW5hbCB0eXBlPyBbJXNdICIsIGRmbHQpOworCWVsc2UKKwkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiVGVybWluYWwgdHlwZT8gIik7CisJKHZvaWQpIGZmbHVzaChzdGRlcnIpOworCisJaWYgKGZnZXRzKGFuc3dlciwgc2l6ZW9mKGFuc3dlciksIHN0ZGluKSA9PSAwKSB7CisJICAgIGlmIChkZmx0ID09IDApIHsKKwkJZXhpdF9lcnJvcigpOworCQkvKiBOT1RSRUFDSEVEICovCisJICAgIH0KKwkgICAgcmV0dXJuIChkZmx0KTsKKwl9CisKKwlpZiAoKHAgPSBzdHJjaHIoYW5zd2VyLCAnXG4nKSkgIT0gMCkKKwkgICAgKnAgPSAnXDAnOworCWlmIChhbnN3ZXJbMF0pCisJICAgIHJldHVybiAoYW5zd2VyKTsKKwlpZiAoZGZsdCAhPSAwKQorCSAgICByZXR1cm4gKGRmbHQpOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWFwcGluZyBsb2dpYyBiZWdpbnMgaGVyZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQmF1ZCByYXRlIGNvbmRpdGlvbmFscyBmb3IgbWFwcGluZy4gKi8KKyNkZWZpbmUJR1QJCTB4MDEKKyNkZWZpbmUJRVEJCTB4MDIKKyNkZWZpbmUJTFQJCTB4MDQKKyNkZWZpbmUJTk9UCQkweDA4CisjZGVmaW5lCUdFCQkoR1QgfCBFUSkKKyNkZWZpbmUJTEUJCShMVCB8IEVRKQorCit0eXBlZGVmIHN0cnVjdCBtYXAgeworICAgIHN0cnVjdCBtYXAgKm5leHQ7CQkvKiBMaW5rZWQgbGlzdCBvZiBtYXBzLiAqLworICAgIGNvbnN0IGNoYXIgKnBvcnR0eXBlOwkvKiBQb3J0IHR5cGUsIG9yICIiIGZvciBhbnkuICovCisgICAgY29uc3QgY2hhciAqdHlwZTsJCS8qIFRlcm1pbmFsIHR5cGUgdG8gc2VsZWN0LiAqLworICAgIGludCBjb25kaXRpb25hbDsJCS8qIEJhdWQgcmF0ZSBjb25kaXRpb25hbHMgYml0bWFzay4gKi8KKyAgICBpbnQgc3BlZWQ7CQkJLyogQmF1ZCByYXRlIHRvIGNvbXBhcmUgYWdhaW5zdC4gKi8KK30gTUFQOworCitzdGF0aWMgTUFQICpjdXIsICptYXBsaXN0OworCit0eXBlZGVmIHN0cnVjdCBzcGVlZHMgeworICAgIGNvbnN0IGNoYXIgKnN0cmluZzsKKyAgICBpbnQgc3BlZWQ7Cit9IFNQRUVEUzsKKworc3RhdGljIGNvbnN0IFNQRUVEUyBzcGVlZHNbXSA9Cit7CisgICAgeyIwIiwgQjB9LAorICAgIHsiNTAiLCBCNTB9LAorICAgIHsiNzUiLCBCNzV9LAorICAgIHsiMTEwIiwgQjExMH0sCisgICAgeyIxMzQiLCBCMTM0fSwKKyAgICB7IjEzNC41IiwgQjEzNH0sCisgICAgeyIxNTAiLCBCMTUwfSwKKyAgICB7IjIwMCIsIEIyMDB9LAorICAgIHsiMzAwIiwgQjMwMH0sCisgICAgeyI2MDAiLCBCNjAwfSwKKyAgICB7IjEyMDAiLCBCMTIwMH0sCisgICAgeyIxODAwIiwgQjE4MDB9LAorICAgIHsiMjQwMCIsIEIyNDAwfSwKKyAgICB7IjQ4MDAiLCBCNDgwMH0sCisgICAgeyI5NjAwIiwgQjk2MDB9LAorICAgIC8qIHNndHR5YiBtYXkgZGVmaW5lIHVwIHRvIHRoaXMgcG9pbnQgKi8KKyNpZmRlZiBCMTkyMDAKKyAgICB7IjE5MjAwIiwgQjE5MjAwfSwKKyNlbmRpZgorI2lmZGVmIEIzODQwMAorICAgIHsiMzg0MDAiLCBCMzg0MDB9LAorI2VuZGlmCisjaWZkZWYgQjE5MjAwCisgICAgeyIxOTIwMCIsIEIxOTIwMH0sCisjZW5kaWYKKyNpZmRlZiBCMzg0MDAKKyAgICB7IjM4NDAwIiwgQjM4NDAwfSwKKyNlbmRpZgorI2lmZGVmIEIxOTIwMAorICAgIHsiMTkyMDAiLCBCMTkyMDB9LAorI2Vsc2UKKyNpZmRlZiBFWFRBCisgICAgeyIxOTIwMCIsIEVYVEF9LAorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBCMzg0MDAKKyAgICB7IjM4NDAwIiwgQjM4NDAwfSwKKyNlbHNlCisjaWZkZWYgRVhUQgorICAgIHsiMzg0MDAiLCBFWFRCfSwKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgQjU3NjAwCisgICAgeyI1NzYwMCIsIEI1NzYwMH0sCisjZW5kaWYKKyNpZmRlZiBCMTE1MjAwCisgICAgeyIxMTUyMDAiLCBCMTE1MjAwfSwKKyNlbmRpZgorI2lmZGVmIEIyMzA0MDAKKyAgICB7IjIzMDQwMCIsIEIyMzA0MDB9LAorI2VuZGlmCisjaWZkZWYgQjQ2MDgwMAorICAgIHsiNDYwODAwIiwgQjQ2MDgwMH0sCisjZW5kaWYKKyAgICB7KGNoYXIgKikgMCwgMH0KK307CisKK3N0YXRpYyBpbnQKK3RiYXVkcmF0ZShjaGFyICpyYXRlKQoreworICAgIGNvbnN0IFNQRUVEUyAqc3A7CisgICAgaW50IGZvdW5kID0gRkFMU0U7CisKKyAgICAvKiBUaGUgYmF1ZHJhdGUgbnVtYmVyIGNhbiBiZSBwcmVjZWRlZCBieSBhICdCJywgd2hpY2ggaXMgaWdub3JlZC4gKi8KKyAgICBpZiAoKnJhdGUgPT0gJ0InKQorCSsrcmF0ZTsKKworICAgIGZvciAoc3AgPSBzcGVlZHM7IHNwLT5zdHJpbmc7ICsrc3ApIHsKKwlpZiAoIUNhc2VsZXNzQ21wKHJhdGUsIHNwLT5zdHJpbmcpKSB7CisJICAgIGZvdW5kID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAoIWZvdW5kKQorCWVycigidW5rbm93biBiYXVkIHJhdGUgJXMiLCByYXRlKTsKKyAgICByZXR1cm4gKHNwLT5zcGVlZCk7Cit9CisKKy8qCisgKiBTeW50YXggZm9yIC1tOgorICogW3BvcnQtdHlwZV1bdGVzdCBiYXVkcmF0ZV06dGVybWluYWwtdHlwZQorICogVGhlIGJhdWQgcmF0ZSB0ZXN0cyBhcmU6ID4sIDwsIEAsID0sICEKKyAqLworc3RhdGljIHZvaWQKK2FkZF9tYXBwaW5nKGNvbnN0IGNoYXIgKnBvcnQsIGNoYXIgKmFyZykKK3sKKyAgICBNQVAgKm1hcHA7CisgICAgY2hhciAqY29weSwgKnA7CisgICAgY29uc3QgY2hhciAqdGVybXA7CisgICAgY2hhciAqYmFzZSA9IDA7CisKKyAgICBjb3B5ID0gc3RyZHVwKGFyZyk7CisgICAgbWFwcCA9IChNQVAgKikgbWFsbG9jKHNpemVvZihNQVApKTsKKyAgICBpZiAoY29weSA9PSAwIHx8IG1hcHAgPT0gMCkKKwlmYWlsZWQoIm1hbGxvYyIpOworICAgIG1hcHAtPm5leHQgPSAwOworICAgIGlmIChtYXBsaXN0ID09IDApCisJY3VyID0gbWFwbGlzdCA9IG1hcHA7CisgICAgZWxzZSB7CisJY3VyLT5uZXh0ID0gbWFwcDsKKwljdXIgPSBtYXBwOworICAgIH0KKworICAgIG1hcHAtPnBvcnR0eXBlID0gYXJnOworICAgIG1hcHAtPmNvbmRpdGlvbmFsID0gMDsKKworICAgIGFyZyA9IHN0cnBicmsoYXJnLCAiPjxAPSE6Iik7CisKKyAgICBpZiAoYXJnID09IDApIHsJCS8qIFs/XXRlcm0gKi8KKwltYXBwLT50eXBlID0gbWFwcC0+cG9ydHR5cGU7CisJbWFwcC0+cG9ydHR5cGUgPSAwOworCWdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBpZiAoYXJnID09IG1hcHAtPnBvcnR0eXBlKQkvKiBbPjxAPSEgYmF1ZF06dGVybSAqLworCXRlcm1wID0gbWFwcC0+cG9ydHR5cGUgPSAwOworICAgIGVsc2UKKwl0ZXJtcCA9IGJhc2UgPSBhcmc7CisKKyAgICBmb3IgKDs7ICsrYXJnKSB7CQkvKiBPcHRpb25hbCBjb25kaXRpb25hbHMuICovCisJc3dpdGNoICgqYXJnKSB7CisJY2FzZSAnPCc6CisJICAgIGlmIChtYXBwLT5jb25kaXRpb25hbCAmIEdUKQorCQlnb3RvIGJhZG1vcHQ7CisJICAgIG1hcHAtPmNvbmRpdGlvbmFsIHw9IExUOworCSAgICBicmVhazsKKwljYXNlICc+JzoKKwkgICAgaWYgKG1hcHAtPmNvbmRpdGlvbmFsICYgTFQpCisJCWdvdG8gYmFkbW9wdDsKKwkgICAgbWFwcC0+Y29uZGl0aW9uYWwgfD0gR1Q7CisJICAgIGJyZWFrOworCWNhc2UgJ0AnOgorCWNhc2UgJz0nOgkJLyogTm90IGRvY3VtZW50ZWQuICovCisJICAgIG1hcHAtPmNvbmRpdGlvbmFsIHw9IEVROworCSAgICBicmVhazsKKwljYXNlICchJzoKKwkgICAgbWFwcC0+Y29uZGl0aW9uYWwgfD0gTk9UOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBnb3RvIG5leHQ7CisJfQorICAgIH0KKworICBuZXh0OgorICAgIGlmICgqYXJnID09ICc6JykgeworCWlmIChtYXBwLT5jb25kaXRpb25hbCkKKwkgICAgZ290byBiYWRtb3B0OworCSsrYXJnOworICAgIH0gZWxzZSB7CQkJLyogT3B0aW9uYWwgYmF1ZHJhdGUuICovCisJYXJnID0gc3RyY2hyKHAgPSBhcmcsICc6Jyk7CisJaWYgKGFyZyA9PSAwKQorCSAgICBnb3RvIGJhZG1vcHQ7CisJKmFyZysrID0gJ1wwJzsKKwltYXBwLT5zcGVlZCA9IHRiYXVkcmF0ZShwKTsKKyAgICB9CisKKyAgICBpZiAoYXJnID09IChjaGFyICopIDApCS8qIE5vbi1vcHRpb25hbCB0eXBlLiAqLworCWdvdG8gYmFkbW9wdDsKKworICAgIG1hcHAtPnR5cGUgPSBhcmc7CisKKyAgICAvKiBUZXJtaW5hdGUgcG9ydHR5cGUsIGlmIHNwZWNpZmllZC4gKi8KKyAgICBpZiAodGVybXAgIT0gMCkKKwkqYmFzZSA9ICdcMCc7CisKKyAgICAvKiBJZiBhIE5PVCBjb25kaXRpb25hbCwgcmV2ZXJzZSB0aGUgdGVzdC4gKi8KKyAgICBpZiAobWFwcC0+Y29uZGl0aW9uYWwgJiBOT1QpCisJbWFwcC0+Y29uZGl0aW9uYWwgPSB+bWFwcC0+Y29uZGl0aW9uYWwgJiAoRVEgfCBHVCB8IExUKTsKKworICAgIC8qIElmIHVzZXIgc3BlY2lmaWVkIGEgcG9ydCB3aXRoIGFuIG9wdGlvbiBmbGFnLCBzZXQgaXQuICovCisgIGRvbmU6CisgICAgaWYgKHBvcnQpIHsKKwlpZiAobWFwcC0+cG9ydHR5cGUpIHsKKwkgIGJhZG1vcHQ6CisJICAgIGVycigiaWxsZWdhbCAtbSBvcHRpb24gZm9ybWF0OiAlcyIsIGNvcHkpOworCX0KKwltYXBwLT5wb3J0dHlwZSA9IHBvcnQ7CisgICAgfQorICAgIGZyZWUoY29weSk7CisjaWZkZWYgTUFQREVCVUcKKyAgICAodm9pZCkgcHJpbnRmKCJwb3J0OiAlc1xuIiwgbWFwcC0+cG9ydHR5cGUgPyBtYXBwLT5wb3J0dHlwZSA6ICJBTlkiKTsKKyAgICAodm9pZCkgcHJpbnRmKCJ0eXBlOiAlc1xuIiwgbWFwcC0+dHlwZSk7CisgICAgKHZvaWQpIHByaW50ZigiY29uZGl0aW9uYWw6ICIpOworICAgIHAgPSAiIjsKKyAgICBpZiAobWFwcC0+Y29uZGl0aW9uYWwgJiBHVCkgeworCSh2b2lkKSBwcmludGYoIkdUIik7CisJcCA9ICIvIjsKKyAgICB9CisgICAgaWYgKG1hcHAtPmNvbmRpdGlvbmFsICYgRVEpIHsKKwkodm9pZCkgcHJpbnRmKCIlc0VRIiwgcCk7CisJcCA9ICIvIjsKKyAgICB9CisgICAgaWYgKG1hcHAtPmNvbmRpdGlvbmFsICYgTFQpCisJKHZvaWQpIHByaW50ZigiJXNMVCIsIHApOworICAgICh2b2lkKSBwcmludGYoIlxuc3BlZWQ6ICVkXG4iLCBtYXBwLT5zcGVlZCk7CisjZW5kaWYKK30KKworLyoKKyAqIFJldHVybiB0aGUgdHlwZSBvZiB0ZXJtaW5hbCB0byB1c2UgZm9yIGEgcG9ydCBvZiB0eXBlICd0eXBlJywgYXMgc3BlY2lmaWVkCisgKiBieSB0aGUgZmlyc3QgYXBwbGljYWJsZSBtYXBwaW5nIGluICdtYXAnLiAgSWYgbm8gbWFwcGluZ3MgYXBwbHksIHJldHVybgorICogJ3R5cGUnLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCittYXBwZWQoY29uc3QgY2hhciAqdHlwZSkKK3sKKyAgICBNQVAgKm1hcHA7CisgICAgaW50IG1hdGNoOworCisgICAgZm9yIChtYXBwID0gbWFwbGlzdDsgbWFwcDsgbWFwcCA9IG1hcHAtPm5leHQpCisJaWYgKG1hcHAtPnBvcnR0eXBlID09IDAgfHwgIXN0cmNtcChtYXBwLT5wb3J0dHlwZSwgdHlwZSkpIHsKKwkgICAgc3dpdGNoIChtYXBwLT5jb25kaXRpb25hbCkgeworCSAgICBjYXNlIDA6CQkvKiBObyB0ZXN0IHNwZWNpZmllZC4gKi8KKwkJbWF0Y2ggPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSBFUToKKwkJbWF0Y2ggPSAob3NwZWVkID09IG1hcHAtPnNwZWVkKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgR0U6CisJCW1hdGNoID0gKG9zcGVlZCA+PSBtYXBwLT5zcGVlZCk7CisJCWJyZWFrOworCSAgICBjYXNlIEdUOgorCQltYXRjaCA9IChvc3BlZWQgPiBtYXBwLT5zcGVlZCk7CisJCWJyZWFrOworCSAgICBjYXNlIExFOgorCQltYXRjaCA9IChvc3BlZWQgPD0gbWFwcC0+c3BlZWQpOworCQlicmVhazsKKwkgICAgY2FzZSBMVDoKKwkJbWF0Y2ggPSAob3NwZWVkIDwgbWFwcC0+c3BlZWQpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJbWF0Y2ggPSBGQUxTRTsKKwkgICAgfQorCSAgICBpZiAobWF0Y2gpCisJCXJldHVybiAobWFwcC0+dHlwZSk7CisJfQorICAgIC8qIE5vIG1hdGNoIGZvdW5kOyByZXR1cm4gZ2l2ZW4gdHlwZS4gKi8KKyAgICByZXR1cm4gKHR5cGUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFbnRyeSBmZXRjaGluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIHRlcm1pbmFsIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIHRoZW4gcmVhZCBpbgorICogaXRzIHRlcm1jYXAgZW50cnkuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF90ZXJtY2FwX2VudHJ5KGNoYXIgKnVzZXJhcmcpCit7CisgICAgaW50IGVycnJldDsKKyAgICBjaGFyICpwOworICAgIGNvbnN0IGNoYXIgKnR0eXBlOworI2lmIEhBVkVfR0VUVFRZTkFNCisgICAgc3RydWN0IHR0eWVudCAqdDsKKyNlbHNlCisgICAgRklMRSAqZnA7CisjZW5kaWYKKyAgICBjaGFyICp0dHlwYXRoOworCisgICAgaWYgKHVzZXJhcmcpIHsKKwl0dHlwZSA9IHVzZXJhcmc7CisJZ290byBmb3VuZDsKKyAgICB9CisKKyAgICAvKiBUcnkgdGhlIGVudmlyb25tZW50LiAqLworICAgIGlmICgodHR5cGUgPSBnZXRlbnYoIlRFUk0iKSkgIT0gMCkKKwlnb3RvIG1hcDsKKworICAgIGlmICgodHR5cGF0aCA9IHR0eW5hbWUoU1RERVJSX0ZJTEVOTykpICE9IDApIHsKKwlwID0gX25jX2Jhc2VuYW1lKHR0eXBhdGgpOworI2lmIEhBVkVfR0VUVFRZTkFNCisJLyoKKwkgKiBXZSBoYXZlIHRoZSA0LjNCU0QgbGlicmFyeSBjYWxsIGdldHR0eW5hbSgzKTsgdGhhdCBtZWFucworCSAqIHRoZXJlJ3MgYW4gL2V0Yy90dHlzIHRvIGxvb2sgdXAgZGV2aWNlLXRvLXR5cGUgbWFwcGluZ3MgaW4uCisJICogVHJ5IHR0eW5hbWUoMyk7IGNoZWNrIGZvciBkaWFsdXAgb3Igb3RoZXIgbWFwcGluZy4KKwkgKi8KKwlpZiAoKHQgPSBnZXR0dHluYW0ocCkpKSB7CisJICAgIHR0eXBlID0gdC0+dHlfdHlwZTsKKwkgICAgZ290byBtYXA7CisJfQorI2Vsc2UKKwlpZiAoKGZwID0gZm9wZW4oIi9ldGMvdHR5dHlwZSIsICJyIikpICE9IDAKKwkgICAgfHwgKGZwID0gZm9wZW4oIi9ldGMvdHR5cyIsICJyIikpICE9IDApIHsKKwkgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKwkgICAgY2hhciAqcywgKnQsICpkOworCisJICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgZnApICE9IDApIHsKKwkJZm9yIChzID0gYnVmZmVyLCB0ID0gZCA9IDA7ICpzOyBzKyspIHsKKwkJICAgIGlmIChpc3NwYWNlKFVDaGFyKCpzKSkpCisJCQkqcyA9ICdcMCc7CisJCSAgICBlbHNlIGlmICh0ID09IDApCisJCQl0ID0gczsKKwkJICAgIGVsc2UgaWYgKGQgPT0gMCAmJiBzICE9IGJ1ZmZlciAmJiBzWy0xXSA9PSAnXDAnKQorCQkJZCA9IHM7CisJCX0KKwkJaWYgKHQgIT0gMCAmJiBkICE9IDAgJiYgIXN0cmNtcChkLCBwKSkgeworCQkgICAgdHR5cGUgPSBzdHJkdXAodCk7CisJCSAgICBmY2xvc2UoZnApOworCQkgICAgZ290byBtYXA7CisJCX0KKwkgICAgfQorCSAgICBmY2xvc2UoZnApOworCX0KKyNlbmRpZiAvKiBIQVZFX0dFVFRUWU5BTSAqLworICAgIH0KKworICAgIC8qIElmIHN0aWxsIHVuZGVmaW5lZCwgdXNlICJ1bmtub3duIi4gKi8KKyAgICB0dHlwZSA9ICJ1bmtub3duIjsKKworICBtYXA6dHR5cGUgPSBtYXBwZWQodHR5cGUpOworCisgICAgLyoKKyAgICAgKiBJZiBub3QgYSBwYXRoLCByZW1vdmUgVEVSTUNBUCBmcm9tIHRoZSBlbnZpcm9ubWVudCBzbyB3ZSBnZXQgYQorICAgICAqIHJlYWwgZW50cnkgZnJvbSAvZXRjL3Rlcm1jYXAuICBUaGlzIHByZXZlbnRzIHVzIGZyb20gYmVpbmcgZm9vbGVkCisgICAgICogYnkgb3V0IG9mIGRhdGUgc3R1ZmYgaW4gdGhlIGVudmlyb25tZW50LgorICAgICAqLworICBmb3VuZDppZiAoKHAgPSBnZXRlbnYoIlRFUk1DQVAiKSkgIT0gMCAmJiAhX25jX2lzX2Fic19wYXRoKHApKSB7CisJLyogJ3Vuc2V0ZW52KCJURVJNQ0FQIiknIGlzIG5vdCBwb3J0YWJsZS4KKwkgKiBUaGUgJ2Vudmlyb24nIGFycmF5IGlzIGJldHRlci4KKwkgKi8KKwlpbnQgbjsKKwlmb3IgKG4gPSAwOyBlbnZpcm9uW25dICE9IDA7IG4rKykgeworCSAgICBpZiAoIXN0cm5jbXAoIlRFUk1DQVA9IiwgZW52aXJvbltuXSwgOCkpIHsKKwkJd2hpbGUgKChlbnZpcm9uW25dID0gZW52aXJvbltuICsgMV0pICE9IDApIHsKKwkJICAgIG4rKzsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIHR0eXBlIG5vdyBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHR5cGUgb2YgdGhlIHRlcm1pbmFsLgorICAgICAqIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgJz8nLCBhc2sgdGhlIHVzZXIuCisgICAgICovCisgICAgaWYgKHR0eXBlWzBdID09ICc/JykgeworCWlmICh0dHlwZVsxXSAhPSAnXDAnKQorCSAgICB0dHlwZSA9IGFza3VzZXIodHR5cGUgKyAxKTsKKwllbHNlCisJICAgIHR0eXBlID0gYXNrdXNlcigwKTsKKyAgICB9CisgICAgLyogRmluZCB0aGUgdGVybWluZm8gZW50cnkuICBJZiBpdCBkb2Vzbid0IGV4aXN0LCBhc2sgdGhlIHVzZXIuICovCisgICAgd2hpbGUgKHNldHVwdGVybSgoTkNVUlNFU19DT05TVCBjaGFyICopIHR0eXBlLCBTVERPVVRfRklMRU5PLCAmZXJycmV0KQorCSAgICE9IE9LKSB7CisJaWYgKGVycnJldCA9PSAwKSB7CisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIHRlcm1pbmFsIHR5cGUgJXNcbiIsCisJCQkgICBfbmNfcHJvZ25hbWUsIHR0eXBlKTsKKwkgICAgdHR5cGUgPSAwOworCX0gZWxzZSB7CisJICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKwkJCSAgICIlczogY2FuJ3QgaW5pdGlhbGl6ZSB0ZXJtaW5hbCB0eXBlICVzIChlcnJvciAlZClcbiIsCisJCQkgICBfbmNfcHJvZ25hbWUsIHR0eXBlLCBlcnJyZXQpOworCSAgICB0dHlwZSA9IDA7CisJfQorCXR0eXBlID0gYXNrdXNlcih0dHlwZSk7CisgICAgfQorI2lmIEJST0tFTl9MSU5LRVIKKyAgICB0Z2V0ZmxhZygiYW0iKTsJCS8qIGZvcmNlIGxpYl90ZXJtY2FwLm8gdG8gYmUgbGlua2VkIGZvciAnb3NwZWVkJyAqLworI2VuZGlmCisgICAgcmV0dXJuICh0dHlwZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZGUtc2V0dGluZyBsb2dpYworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc29tZSBCU0Qgc3lzdGVtcyBoYXZlIHRoZXNlIGJ1aWx0IGluLCBzb21lIHN5c3RlbXMgYXJlIG1pc3NpbmcKKyAqIG9uZSBvciBtb3JlIGRlZmluaXRpb25zLiBUaGUgc2FmZXN0IHNvbHV0aW9uIGlzIHRvIG92ZXJyaWRlIHVubGVzcyB0aGUKKyAqIGNvbW1vbmx5LWFsdGVyZWQgb25lcyBhcmUgZGVmaW5lZC4KKyAqLworI2lmICEoZGVmaW5lZChDRVJBU0UpICYmIGRlZmluZWQoQ0lOVFIpICYmIGRlZmluZWQoQ0tJTEwpICYmIGRlZmluZWQoQ1FVSVQpKQorI3VuZGVmIENFT0YKKyN1bmRlZiBDRVJBU0UKKyN1bmRlZiBDSU5UUgorI3VuZGVmIENLSUxMCisjdW5kZWYgQ0xORVhUCisjdW5kZWYgQ1JQUk5UCisjdW5kZWYgQ1FVSVQKKyN1bmRlZiBDU1RBUlQKKyN1bmRlZiBDU1RPUAorI3VuZGVmIENTVVNQCisjZW5kaWYKKworLyogY29udHJvbC1jaGFyYWN0ZXIgZGVmYXVsdHMgKi8KKyNpZm5kZWYgQ0VPRgorI2RlZmluZSBDRU9GCUNUUkwoJ0QnKQorI2VuZGlmCisjaWZuZGVmIENFUkFTRQorI2RlZmluZSBDRVJBU0UJQ1RSTCgnSCcpCisjZW5kaWYKKyNpZm5kZWYgQ0lOVFIKKyNkZWZpbmUgQ0lOVFIJMTI3CQkvKiBePyAqLworI2VuZGlmCisjaWZuZGVmIENLSUxMCisjZGVmaW5lIENLSUxMCUNUUkwoJ1UnKQorI2VuZGlmCisjaWZuZGVmIENMTkVYVAorI2RlZmluZSBDTE5FWFQgIENUUkwoJ3YnKQorI2VuZGlmCisjaWZuZGVmIENSUFJOVAorI2RlZmluZSBDUlBSTlQgIENUUkwoJ3InKQorI2VuZGlmCisjaWZuZGVmIENRVUlUCisjZGVmaW5lIENRVUlUCUNUUkwoJ1xcJykKKyNlbmRpZgorI2lmbmRlZiBDU1RBUlQKKyNkZWZpbmUgQ1NUQVJUCUNUUkwoJ1EnKQorI2VuZGlmCisjaWZuZGVmIENTVE9QCisjZGVmaW5lIENTVE9QCUNUUkwoJ1MnKQorI2VuZGlmCisjaWZuZGVmIENTVVNQCisjZGVmaW5lIENTVVNQCUNUUkwoJ1onKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9WRElTQUJMRSkKKyNkZWZpbmUgRElTQUJMRUQodmFsKSAgICgoKF9QT1NJWF9WRElTQUJMRSAhPSAtMSkgXAorCQkgICAgICAgJiYgKCh2YWwpID09IF9QT1NJWF9WRElTQUJMRSkpIFwKKwkJICAgICAgfHwgKCh2YWwpIDw9IDApKQorI2Vsc2UKKyNkZWZpbmUgRElTQUJMRUQodmFsKSAgICgoaW50KSh2YWwpIDw9IDApCisjZW5kaWYKKworI2RlZmluZSBDSEsodmFsLCBkZnQpICAgKERJU0FCTEVEKHZhbCkgPyBkZnQgOiB2YWwpCisKK3N0YXRpYyBib29sIHNldF90YWJzKHZvaWQpOworCisvKgorICogUmVzZXQgdGhlIHRlcm1pbmFsIG1vZGUgYml0cyB0byBhIHNlbnNpYmxlIHN0YXRlLiAgVmVyeSB1c2VmdWwgYWZ0ZXIKKyAqIGEgY2hpbGQgcHJvZ3JhbSBkaWVzIGluIHJhdyBtb2RlLgorICovCitzdGF0aWMgdm9pZAorcmVzZXRfbW9kZSh2b2lkKQoreworI2lmZGVmIFRFUk1JT1MKKyAgICB0Y2dldGF0dHIoU1RERVJSX0ZJTEVOTywgJm1vZGUpOworI2Vsc2UKKyAgICBzdHR5KFNUREVSUl9GSUxFTk8sICZtb2RlKTsKKyNlbmRpZgorCisjaWZkZWYgVEVSTUlPUworI2lmIGRlZmluZWQoVkRJU0NBUkQpICYmIGRlZmluZWQoQ0RJU0NBUkQpCisgICAgbW9kZS5jX2NjW1ZESVNDQVJEXSA9IENISyhtb2RlLmNfY2NbVkRJU0NBUkRdLCBDRElTQ0FSRCk7CisjZW5kaWYKKyAgICBtb2RlLmNfY2NbVkVPRl0gPSBDSEsobW9kZS5jX2NjW1ZFT0ZdLCBDRU9GKTsKKyAgICBtb2RlLmNfY2NbVkVSQVNFXSA9IENISyhtb2RlLmNfY2NbVkVSQVNFXSwgQ0VSQVNFKTsKKyNpZiBkZWZpbmVkKFZGTFVTSCkgJiYgZGVmaW5lZChDRkxVU0gpCisgICAgbW9kZS5jX2NjW1ZGTFVTSF0gPSBDSEsobW9kZS5jX2NjW1ZGTFVTSF0sIENGTFVTSCk7CisjZW5kaWYKKyAgICBtb2RlLmNfY2NbVklOVFJdID0gQ0hLKG1vZGUuY19jY1tWSU5UUl0sIENJTlRSKTsKKyAgICBtb2RlLmNfY2NbVktJTExdID0gQ0hLKG1vZGUuY19jY1tWS0lMTF0sIENLSUxMKTsKKyNpZiBkZWZpbmVkKFZMTkVYVCkgJiYgZGVmaW5lZChDTE5FWFQpCisgICAgbW9kZS5jX2NjW1ZMTkVYVF0gPSBDSEsobW9kZS5jX2NjW1ZMTkVYVF0sIENMTkVYVCk7CisjZW5kaWYKKyAgICBtb2RlLmNfY2NbVlFVSVRdID0gQ0hLKG1vZGUuY19jY1tWUVVJVF0sIENRVUlUKTsKKyNpZiBkZWZpbmVkKFZSRVBSSU5UKSAmJiBkZWZpbmVkKENSUFJOVCkKKyAgICBtb2RlLmNfY2NbVlJFUFJJTlRdID0gQ0hLKG1vZGUuY19jY1tWUkVQUklOVF0sIENSUFJOVCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFZTVEFSVCkgJiYgZGVmaW5lZChDU1RBUlQpCisgICAgbW9kZS5jX2NjW1ZTVEFSVF0gPSBDSEsobW9kZS5jX2NjW1ZTVEFSVF0sIENTVEFSVCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFZTVE9QKSAmJiBkZWZpbmVkKENTVE9QKQorICAgIG1vZGUuY19jY1tWU1RPUF0gPSBDSEsobW9kZS5jX2NjW1ZTVE9QXSwgQ1NUT1ApOworI2VuZGlmCisjaWYgZGVmaW5lZChWU1VTUCkgJiYgZGVmaW5lZChDU1VTUCkKKyAgICBtb2RlLmNfY2NbVlNVU1BdID0gQ0hLKG1vZGUuY19jY1tWU1VTUF0sIENTVVNQKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoVldFUkFTRSkgJiYgZGVmaW5lZChDV0VSQVNFKQorICAgIG1vZGUuY19jY1tWV0VSQVNFXSA9IENISyhtb2RlLmNfY2NbVldFUkFTRV0sIENXRVJBU0UpOworI2VuZGlmCisKKyAgICBtb2RlLmNfaWZsYWcgJj0gfihJR05CUksgfCBQQVJNUksgfCBJTlBDSyB8IElTVFJJUCB8IElOTENSIHwgSUdOQ1IKKyNpZmRlZiBJVUNMQworCQkgICAgICB8IElVQ0xDCisjZW5kaWYKKyNpZmRlZiBJWEFOWQorCQkgICAgICB8IElYQU5ZCisjZW5kaWYKKwkJICAgICAgfCBJWE9GRik7CisKKyAgICBtb2RlLmNfaWZsYWcgfD0gKEJSS0lOVCB8IElHTlBBUiB8IElDUk5MIHwgSVhPTgorI2lmZGVmIElNQVhCRUwKKwkJICAgICB8IElNQVhCRUwKKyNlbmRpZgorCSk7CisKKyAgICBtb2RlLmNfb2ZsYWcgJj0gfigwCisjaWZkZWYgT0xDVUMKKwkJICAgICAgfCBPTENVQworI2VuZGlmCisjaWZkZWYgT0NSTkwKKwkJICAgICAgfCBPQ1JOTAorI2VuZGlmCisjaWZkZWYgT05PQ1IKKwkJICAgICAgfCBPTk9DUgorI2VuZGlmCisjaWZkZWYgT05MUkVUCisJCSAgICAgIHwgT05MUkVUCisjZW5kaWYKKyNpZmRlZiBPRklMTAorCQkgICAgICB8IE9GSUxMCisjZW5kaWYKKyNpZmRlZiBPRkRFTAorCQkgICAgICB8IE9GREVMCisjZW5kaWYKKyNpZmRlZiBOTERMWQorCQkgICAgICB8IE5MRExZCisjZW5kaWYKKyNpZmRlZiBDUkRMWQorCQkgICAgICB8IENSRExZCisjZW5kaWYKKyNpZmRlZiBUQUJETFkKKwkJICAgICAgfCBUQUJETFkKKyNlbmRpZgorI2lmZGVmIEJTRExZCisJCSAgICAgIHwgQlNETFkKKyNlbmRpZgorI2lmZGVmIFZURExZCisJCSAgICAgIHwgVlRETFkKKyNlbmRpZgorI2lmZGVmIEZGRExZCisJCSAgICAgIHwgRkZETFkKKyNlbmRpZgorCSk7CisKKyAgICBtb2RlLmNfb2ZsYWcgfD0gKE9QT1NUCisjaWZkZWYgT05MQ1IKKwkJICAgICB8IE9OTENSCisjZW5kaWYKKwkpOworCisgICAgbW9kZS5jX2NmbGFnICY9IH4oQ1NJWkUgfCBDU1RPUEIgfCBQQVJFTkIgfCBQQVJPREQgfCBDTE9DQUwpOworICAgIG1vZGUuY19jZmxhZyB8PSAoQ1M4IHwgQ1JFQUQpOworICAgIG1vZGUuY19sZmxhZyAmPSB+KEVDSE9OTCB8IE5PRkxTSAorI2lmZGVmIFRPU1RPUAorCQkgICAgICB8IFRPU1RPUAorI2VuZGlmCisjaWZkZWYgRUNIT1BUUgorCQkgICAgICB8IEVDSE9QUlQKKyNlbmRpZgorI2lmZGVmIFhDQVNFCisJCSAgICAgIHwgWENBU0UKKyNlbmRpZgorCSk7CisKKyAgICBtb2RlLmNfbGZsYWcgfD0gKElTSUcgfCBJQ0FOT04gfCBFQ0hPIHwgRUNIT0UgfCBFQ0hPSworI2lmZGVmIEVDSE9DVEwKKwkJICAgICB8IEVDSE9DVEwKKyNlbmRpZgorI2lmZGVmIEVDSE9LRQorCQkgICAgIHwgRUNIT0tFCisjZW5kaWYKKwkpOworI2VuZGlmCisKKyAgICBTRVRfVFRZKFNUREVSUl9GSUxFTk8sICZtb2RlKTsKK30KKworLyoKKyAqIFJldHVybnMgYSAiZ29vZCIgdmFsdWUgZm9yIHRoZSBlcmFzZSBjaGFyYWN0ZXIuICBUaGlzIGlzIGxvb3NlbHkgYmFzZWQgb24KKyAqIHRoZSBCU0Q0LjQgbG9naWMuCisgKi8KKyNpZmRlZiBURVJNSU9TCitzdGF0aWMgaW50CitkZWZhdWx0X2VyYXNlKHZvaWQpCit7CisgICAgaW50IHJlc3VsdDsKKworICAgIGlmIChvdmVyX3N0cmlrZQorCSYmIGtleV9iYWNrc3BhY2UgIT0gMAorCSYmIHN0cmxlbihrZXlfYmFja3NwYWNlKSA9PSAxKQorCXJlc3VsdCA9IGtleV9iYWNrc3BhY2VbMF07CisgICAgZWxzZQorCXJlc3VsdCA9IENFUkFTRTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworLyoKKyAqIFVwZGF0ZSB0aGUgdmFsdWVzIG9mIHRoZSBlcmFzZSwgaW50ZXJydXB0LCBhbmQga2lsbCBjaGFyYWN0ZXJzIGluICdtb2RlJy4KKyAqCisgKiBTVnI0IHRzZXQgKGUuZy4sIFNvbGFyaXMgMi41KSBvbmx5IG1vZGlmaWVzIHRoZSBpbnRyLCBxdWl0IG9yIGVyYXNlCisgKiBjaGFyYWN0ZXJzIGlmIHRoZXkncmUgdW5zZXQsIG9yIGlmIHdlIHNwZWNpZnkgdGhlbSBhcyBvcHRpb25zLiAgVGhpcyBkaWZmZXJzCisgKiBmcm9tIEJTRCA0LjQgdHNldCwgd2hpY2ggYWx3YXlzIHNldHMgZXJhc2UuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfY29udHJvbF9jaGFycyh2b2lkKQoreworI2lmZGVmIFRFUk1JT1MKKyAgICBpZiAoRElTQUJMRUQobW9kZS5jX2NjW1ZFUkFTRV0pIHx8IHRlcmFzZWNoYXIgPj0gMCkKKwltb2RlLmNfY2NbVkVSQVNFXSA9ICh0ZXJhc2VjaGFyID49IDApID8gdGVyYXNlY2hhciA6IGRlZmF1bHRfZXJhc2UoKTsKKworICAgIGlmIChESVNBQkxFRChtb2RlLmNfY2NbVklOVFJdKSB8fCBpbnRyY2hhciA+PSAwKQorCW1vZGUuY19jY1tWSU5UUl0gPSAoaW50cmNoYXIgPj0gMCkgPyBpbnRyY2hhciA6IENJTlRSOworCisgICAgaWYgKERJU0FCTEVEKG1vZGUuY19jY1tWS0lMTF0pIHx8IHRraWxsY2hhciA+PSAwKQorCW1vZGUuY19jY1tWS0lMTF0gPSAodGtpbGxjaGFyID49IDApID8gdGtpbGxjaGFyIDogQ0tJTEw7CisjZW5kaWYKK30KKworLyoKKyAqIFNldCB1cCB2YXJpb3VzIGNvbnZlcnNpb25zIGluICdtb2RlJywgaW5jbHVkaW5nIHBhcml0eSwgdGFicywgcmV0dXJucywKKyAqIGVjaG8sIGFuZCBjYXNlLCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1jYXAgZW50cnkuICBJZiB0aGUgcHJvZ3JhbSB3ZSdyZQorICogcnVubmluZyB3YXMgbmFtZWQgd2l0aCBhIGxlYWRpbmcgdXBwZXItY2FzZSBjaGFyYWN0ZXIsIG1hcCBleHRlcm5hbAorICogdXBwZXJjYXNlIHRvIGludGVybmFsIGxvd2VyY2FzZS4KKyAqLworc3RhdGljIHZvaWQKK3NldF9jb252ZXJzaW9ucyh2b2lkKQoreworI2lmZGVmIF9fT0JTT0xFVEVfXworICAgIC8qCisgICAgICogQ29udmVyc2lvbiBsb2dpYyBmb3Igc29tZSAqcmVhbGx5KiBhbmNpZW50IHRlcm1pbmFsIGdsaXRjaGVzLAorICAgICAqIG5vdCBzdXBwb3J0ZWQgaW4gdGVybWluZm8uICBMZWZ0IGhlcmUgZm9yIHN1Y2NlZWRpbmcgZ2VuZXJhdGlvbnMKKyAgICAgKiB0byBtYXJ2ZWwgYXQuCisgICAgICovCisgICAgaWYgKHRnZXRmbGFnKCJVQyIpKSB7CisjaWZkZWYgSVVDTEMKKwltb2RlLmNfaWZsYWcgfD0gSVVDTEM7CisJbW9kZS5jX29mbGFnIHw9IE9MQ1VDOworI2VuZGlmCisgICAgfSBlbHNlIGlmICh0Z2V0ZmxhZygiTEMiKSkgeworI2lmZGVmIElVQ0xDCisJbW9kZS5jX2lmbGFnICY9IH5JVUNMQzsKKwltb2RlLmNfb2ZsYWcgJj0gfk9MQ1VDOworI2VuZGlmCisgICAgfQorICAgIG1vZGUuY19pZmxhZyAmPSB+KFBBUk1SSyB8IElOUENLKTsKKyAgICBtb2RlLmNfbGZsYWcgfD0gSUNBTk9OOworICAgIGlmICh0Z2V0ZmxhZygiRVAiKSkgeworCW1vZGUuY19jZmxhZyB8PSBQQVJFTkI7CisJbW9kZS5jX2NmbGFnICY9IH5QQVJPREQ7CisgICAgfQorICAgIGlmICh0Z2V0ZmxhZygiT1AiKSkgeworCW1vZGUuY19jZmxhZyB8PSBQQVJFTkI7CisJbW9kZS5jX2NmbGFnIHw9IFBBUk9ERDsKKyAgICB9CisjZW5kaWYgLyogX19PQlNPTEVURV9fICovCisKKyNpZmRlZiBURVJNSU9TCisjaWZkZWYgT05MQ1IKKyAgICBtb2RlLmNfb2ZsYWcgfD0gT05MQ1I7CisjZW5kaWYKKyAgICBtb2RlLmNfaWZsYWcgfD0gSUNSTkw7CisgICAgbW9kZS5jX2xmbGFnIHw9IEVDSE87CisjaWZkZWYgT1hUQUJTCisgICAgbW9kZS5jX29mbGFnIHw9IE9YVEFCUzsKKyNlbmRpZiAvKiBPWFRBQlMgKi8KKworICAgIC8qIHRlc3QgdXNlZCB0byBiZSB0Z2V0ZmxhZygiTkwiKSAqLworICAgIGlmIChuZXdsaW5lICE9IChjaGFyICopIDAgJiYgbmV3bGluZVswXSA9PSAnXG4nICYmICFuZXdsaW5lWzFdKSB7CisJLyogTmV3bGluZSwgbm90IGxpbmVmZWVkLiAqLworI2lmZGVmIE9OTENSCisJbW9kZS5jX29mbGFnICY9IH5PTkxDUjsKKyNlbmRpZgorCW1vZGUuY19pZmxhZyAmPSB+SUNSTkw7CisgICAgfQorI2lmZGVmIF9fT0JTT0xFVEVfXworICAgIGlmICh0Z2V0ZmxhZygiSEQiKSkJCS8qIEhhbGYgZHVwbGV4LiAqLworCW1vZGUuY19sZmxhZyAmPSB+RUNITzsKKyNlbmRpZiAvKiBfX09CU09MRVRFX18gKi8KKyNpZmRlZiBPWFRBQlMKKyAgICAvKiB0ZXN0IHVzZWQgdG8gYmUgdGdldGZsYWcoInB0IikgKi8KKyAgICBpZiAoaGFzX2hhcmR3YXJlX3RhYnMpCS8qIFByaW50IHRhYnMuICovCisJbW9kZS5jX29mbGFnICY9IH5PWFRBQlM7CisjZW5kaWYgLyogT1hUQUJTICovCisgICAgbW9kZS5jX2xmbGFnIHw9IChFQ0hPRSB8IEVDSE9LKTsKKyNlbmRpZgorfQorCisvKiBPdXRwdXQgc3RhcnR1cCBzdHJpbmcuICovCitzdGF0aWMgdm9pZAorc2V0X2luaXQodm9pZCkKK3sKKyAgICBjaGFyICpwOworICAgIGJvb2wgc2V0dGxlOworCisjaWZkZWYgX19PQlNPTEVURV9fCisgICAgaWYgKHBhZF9jaGFyICE9IChjaGFyICopIDApCS8qIEdldC9zZXQgcGFkIGNoYXJhY3Rlci4gKi8KKwlQQyA9IHBhZF9jaGFyWzBdOworI2VuZGlmIC8qIE9CU09MRVRFICovCisKKyNpZmRlZiBUQUIzCisgICAgaWYgKG9sZG1vZGUuY19vZmxhZyAmIChUQUIzIHwgT05MQ1IgfCBPQ1JOTCB8IE9OTFJFVCkpIHsKKwlvbGRtb2RlLmNfb2ZsYWcgJj0gKFRBQjMgfCBPTkxDUiB8IE9DUk5MIHwgT05MUkVUKTsKKwlTRVRfVFRZKFNUREVSUl9GSUxFTk8sICZvbGRtb2RlKTsKKyAgICB9CisjZW5kaWYKKyAgICBzZXR0bGUgPSBzZXRfdGFicygpOworCisgICAgaWYgKGlzcmVzZXQpIHsKKwlpZiAoKHAgPSByZXNldF8xc3RyaW5nKSAhPSAwKSB7CisJICAgIHRwdXRzKHAsIDAsIG91dGMpOworCSAgICBzZXR0bGUgPSBUUlVFOworCX0KKwlpZiAoKHAgPSByZXNldF8yc3RyaW5nKSAhPSAwKSB7CisJICAgIHRwdXRzKHAsIDAsIG91dGMpOworCSAgICBzZXR0bGUgPSBUUlVFOworCX0KKwkvKiBXaGF0IGFib3V0IHJmLCByczMsIGFzIHBlciB0ZXJtaW5mbyBtYW4gcGFnZT8gKi8KKwkvKiBhbHNvIG1pZ2h0IGJlIG5pY2UgdG8gc2VuZCBybWFjcywgcm11bCwgcm1tICovCisJaWYgKChwID0gcmVzZXRfZmlsZSkgIT0gMAorCSAgICB8fCAocCA9IGluaXRfZmlsZSkgIT0gMCkgeworCSAgICBjYXQocCk7CisJICAgIHNldHRsZSA9IFRSVUU7CisJfQorICAgIH0KKworICAgIGlmIChzZXR0bGUpIHsKKwkodm9pZCkgcHV0YygnXHInLCBzdGRlcnIpOworCSh2b2lkKSBmZmx1c2goc3RkZXJyKTsKKwkodm9pZCkgbmFwbXMoMTAwMCk7CS8qIFNldHRsZSB0aGUgdGVybWluYWwuICovCisgICAgfQorfQorCisvKgorICogU2V0IHRoZSBoYXJkd2FyZSB0YWJzIG9uIHRoZSB0ZXJtaW5hbCwgdXNpbmcgdGhlIGN0IChjbGVhciBhbGwgdGFicyksCisgKiBzdCAoc2V0IG9uZSB0YWIpIGFuZCBjaCAoaG9yaXpvbnRhbCBjdXJzb3IgYWRkcmVzc2luZykgY2FwYWJpbGl0aWVzLgorICogVGhpcyBpcyBkb25lIGJlZm9yZSBpZiBhbmQgaXMsIHNvIHRoZXkgY2FuIHBhdGNoIGluIGNhc2Ugd2UgYmxvdyB0aGlzLgorICogUmV0dXJuIFRSVUUgaWYgd2Ugc2V0IGFueSB0YWIgc3RvcHMsIEZBTFNFIGlmIG5vdC4KKyAqLworc3RhdGljIGJvb2wKK3NldF90YWJzKHZvaWQpCit7CisgICAgaWYgKHNldF90YWIgJiYgY2xlYXJfYWxsX3RhYnMpIHsKKwlpbnQgYzsKKworCSh2b2lkKSBwdXRjKCdccicsIHN0ZGVycik7CS8qIEZvcmNlIHRvIGxlZnQgbWFyZ2luLiAqLworCXRwdXRzKGNsZWFyX2FsbF90YWJzLCAwLCBvdXRjKTsKKworCWZvciAoYyA9IDg7IGMgPCB0Y29sdW1uczsgYyArPSA4KSB7CisJICAgIC8qIEdldCB0byB0aGUgcmlnaHQgY29sdW1uLiAgSW4gQlNEIHRzZXQsIHRoaXMKKwkgICAgICogdXNlZCB0byB0cnkgYSBidW5jaCBvZiBoYWxmLWNsZXZlciB0aGluZ3MKKwkgICAgICogd2l0aCBjdXAgYW5kIGhwYSwgZm9yIGFuIGF2ZXJhZ2Ugc2F2aW5nIG9mCisJICAgICAqIHNvbWV3aGF0IGxlc3MgdGhhbiB0d28gY2hhcmFjdGVyIHRpbWVzIHBlcgorCSAgICAgKiB0YWIgc3RvcCwgbGVzcyB0aGFuIC4wMSBzZWMgYXQgMjQwMGNwcy4gV2UKKwkgICAgICogbG9zdCBhbGwgdGhpcyBjcnVmdCBiZWNhdXNlIGl0IHNlZW1lZCB0byBiZQorCSAgICAgKiBpbnRyb2R1Y2luZyBzb21lIG9kZCBidWdzLgorCSAgICAgKiAtLS0tLS0tLS0tLTEyMzQ1Njc4LS0tLS0tLS0tLS0gKi8KKwkgICAgKHZvaWQpIGZwdXRzKCIgICAgICAgICIsIHN0ZGVycik7CisJICAgIHRwdXRzKHNldF90YWIsIDAsIG91dGMpOworCX0KKwlwdXRjKCdccicsIHN0ZGVycik7CisJcmV0dXJuIChUUlVFKTsKKyAgICB9CisgICAgcmV0dXJuIChGQUxTRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1haW4gc2VxdWVuY2UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUZWxsIHRoZSB1c2VyIGlmIGEgY29udHJvbCBrZXkgaGFzIGJlZW4gY2hhbmdlZCBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlLgorICovCisjaWZkZWYgVEVSTUlPUworc3RhdGljIHZvaWQKK3JlcG9ydChjb25zdCBjaGFyICpuYW1lLCBpbnQgd2hpY2gsIHVuc2lnbmVkIGRlZikKK3sKKyAgICB1bnNpZ25lZCBvbGRlciwgbmV3ZXI7CisgICAgY2hhciAqcDsKKworICAgIG5ld2VyID0gbW9kZS5jX2NjW3doaWNoXTsKKyAgICBvbGRlciA9IG9sZG1vZGUuY19jY1t3aGljaF07CisKKyAgICBpZiAob2xkZXIgPT0gbmV3ZXIgJiYgb2xkZXIgPT0gZGVmKQorCXJldHVybjsKKworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiVzICVzICIsIG5hbWUsIG9sZGVyID09IG5ld2VyID8gImlzIiA6ICJzZXQgdG8iKTsKKworICAgIGlmIChESVNBQkxFRChuZXdlcikpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAidW5kZWYuXG4iKTsKKyAgICAvKgorICAgICAqIENoZWNrICdkZWxldGUnIGJlZm9yZSAnYmFja3NwYWNlJywgc2luY2UgdGhlIGtleV9iYWNrc3BhY2UgdmFsdWUKKyAgICAgKiBpcyBhbWJpZ3VvdXMuCisgICAgICovCisgICAgZWxzZSBpZiAobmV3ZXIgPT0gMDE3NykKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsICJkZWxldGUuXG4iKTsKKyAgICBlbHNlIGlmICgocCA9IGtleV9iYWNrc3BhY2UpICE9IDAKKwkgICAgICYmIG5ld2VyID09ICh1bnNpZ25lZCBjaGFyKSBwWzBdCisJICAgICAmJiBwWzFdID09ICdcMCcpCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiYmFja3NwYWNlLlxuIik7CisgICAgZWxzZSBpZiAobmV3ZXIgPCAwNDApIHsKKwluZXdlciBePSAwMTAwOworCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImNvbnRyb2wtJWMgKF4lYykuXG4iLCBVQ2hhcihuZXdlciksIFVDaGFyKG5ld2VyKSk7CisgICAgfSBlbHNlCisJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiJWMuXG4iLCBVQ2hhcihuZXdlcikpOworfQorI2VuZGlmCisKKy8qCisgKiBDb252ZXJ0IHRoZSBvYnNvbGV0ZSBhcmd1bWVudCBmb3JtcyBpbnRvIHNvbWV0aGluZyB0aGF0IGdldG9wdCBjYW4gaGFuZGxlLgorICogVGhpcyBtZWFucyB0aGF0IC1lLCAtaSBhbmQgLWsgZ2V0IGRlZmF1bHQgYXJndW1lbnRzIHN1cHBsaWVkIGZvciB0aGVtLgorICovCitzdGF0aWMgdm9pZAorb2Jzb2xldGUoY2hhciAqKmFyZ3YpCit7CisgICAgZm9yICg7ICphcmd2OyArK2FyZ3YpIHsKKwljaGFyICpwYXJtID0gYXJndlswXTsKKworCWlmIChwYXJtWzBdID09ICctJyAmJiBwYXJtWzFdID09ICdcMCcpIHsKKwkgICAgYXJndlswXSA9IHN0cmR1cCgiLXEiKTsKKwkgICAgY29udGludWU7CisJfQorCisJaWYgKChwYXJtWzBdICE9ICctJykKKwkgICAgfHwgKGFyZ3ZbMV0gJiYgYXJndlsxXVswXSAhPSAnLScpCisJICAgIHx8IChwYXJtWzFdICE9ICdlJyAmJiBwYXJtWzFdICE9ICdpJyAmJiBwYXJtWzFdICE9ICdrJykKKwkgICAgfHwgKHBhcm1bMl0gIT0gJ1wwJykpCisJICAgIGNvbnRpbnVlOworCXN3aXRjaCAoYXJndlswXVsxXSkgeworCWNhc2UgJ2UnOgorCSAgICBhcmd2WzBdID0gc3RyZHVwKCItZV5IIik7CisJICAgIGJyZWFrOworCWNhc2UgJ2knOgorCSAgICBhcmd2WzBdID0gc3RyZHVwKCItaV5DIik7CisJICAgIGJyZWFrOworCWNhc2UgJ2snOgorCSAgICBhcmd2WzBdID0gc3RyZHVwKCIta15VIik7CisJICAgIGJyZWFrOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICp0YmxbXSA9CisgICAgeworCSIiCisJLCJPcHRpb25zOiIKKwksIiAgLWMgICAgICAgICAgc2V0IGNvbnRyb2wgY2hhcmFjdGVycyIKKwksIiAgLWUgY2ggICAgICAgZXJhc2UgY2hhcmFjdGVyIgorCSwiICAtSSAgICAgICAgICBubyBpbml0aWFsaXphdGlvbiBzdHJpbmdzIgorCSwiICAtaSBjaCAgICAgICBpbnRlcnJ1cHQgY2hhcmFjdGVyIgorCSwiICAtayBjaCAgICAgICBraWxsIGNoYXJhY3RlciIKKwksIiAgLW0gbWFwcGluZyAgbWFwIGlkZW50aWZpZXIgdG8gdHlwZSIKKwksIiAgLVEgICAgICAgICAgZG8gbm90IG91dHB1dCBjb250cm9sIGtleSBzZXR0aW5ncyIKKwksIiAgLXIgICAgICAgICAgZGlzcGxheSB0ZXJtIG9uIHN0ZGVyciIKKwksIiAgLXMgICAgICAgICAgb3V0cHV0IFRFUk0gc2V0IGNvbW1hbmQiCisJLCIgIC1WICAgICAgICAgIHByaW50IGN1cnNlcy12ZXJzaW9uIgorCSwiICAtdyAgICAgICAgICBzZXQgd2luZG93LXNpemUiCisgICAgfTsKKyAgICB1bnNpZ25lZCBuOworICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbb3B0aW9uc10gW3Rlcm1pbmFsXVxuIiwgX25jX3Byb2duYW1lKTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHRibCkgLyBzaXplb2YodGJsWzBdKTsgKytuKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHRibFtuXSk7CisgICAgZXhpdF9lcnJvcigpOworICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KKworc3RhdGljIGNoYXIKK2FyZ190b19jaGFyKHZvaWQpCit7CisgICAgcmV0dXJuIChjaGFyKSAoKG9wdGFyZ1swXSA9PSAnXicgJiYgb3B0YXJnWzFdICE9ICdcMCcpCisJCSAgID8gKChvcHRhcmdbMV0gPT0gJz8nKSA/ICdcMTc3JyA6IENUUkwob3B0YXJnWzFdKSkKKwkJICAgOiBvcHRhcmdbMF0pOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBjaCwgbm9pbml0LCBub3NldCwgcXVpZXQsIFNmbGFnLCBzZmxhZywgc2hvd3Rlcm07CisgICAgY29uc3QgY2hhciAqcDsKKyAgICBjb25zdCBjaGFyICp0dHlwZTsKKworICAgIG9ic29sZXRlKGFyZ3YpOworICAgIG5vaW5pdCA9IG5vc2V0ID0gcXVpZXQgPSBTZmxhZyA9IHNmbGFnID0gc2hvd3Rlcm0gPSAwOworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgImE6Y2Q6ZTpJaTprOm06bnA6cVFTcnNWdyIpKSAhPSAtMSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdjJzoJCS8qIHNldCBjb250cm9sLWNoYXJzICovCisJICAgIG9wdF9jID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYSc6CQkvKiBPQlNPTEVURTogbWFwIGlkZW50aWZpZXIgdG8gdHlwZSAqLworCSAgICBhZGRfbWFwcGluZygiYXJwYW5ldCIsIG9wdGFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ2QnOgkJLyogT0JTT0xFVEU6IG1hcCBpZGVudGlmaWVyIHRvIHR5cGUgKi8KKwkgICAgYWRkX21hcHBpbmcoImRpYWx1cCIsIG9wdGFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ2UnOgkJLyogZXJhc2UgY2hhcmFjdGVyICovCisJICAgIHRlcmFzZWNoYXIgPSBhcmdfdG9fY2hhcigpOworCSAgICBicmVhazsKKwljYXNlICdJJzoJCS8qIG5vIGluaXRpYWxpemF0aW9uIHN0cmluZ3MgKi8KKwkgICAgbm9pbml0ID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnaSc6CQkvKiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCisJICAgIGludHJjaGFyID0gYXJnX3RvX2NoYXIoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnayc6CQkvKiBraWxsIGNoYXJhY3RlciAqLworCSAgICB0a2lsbGNoYXIgPSBhcmdfdG9fY2hhcigpOworCSAgICBicmVhazsKKwljYXNlICdtJzoJCS8qIG1hcCBpZGVudGlmaWVyIHRvIHR5cGUgKi8KKwkgICAgYWRkX21hcHBpbmcoMCwgb3B0YXJnKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbic6CQkvKiBPQlNPTEVURTogc2V0IG5ldyB0dHkgZHJpdmVyICovCisJICAgIGJyZWFrOworCWNhc2UgJ3AnOgkJLyogT0JTT0xFVEU6IG1hcCBpZGVudGlmaWVyIHRvIHR5cGUgKi8KKwkgICAgYWRkX21hcHBpbmcoInBsdWdib2FyZCIsIG9wdGFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ1EnOgkJLyogZG9uJ3Qgb3V0cHV0IGNvbnRyb2wga2V5IHNldHRpbmdzICovCisJICAgIHF1aWV0ID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAncSc6CQkvKiBkaXNwbGF5IHRlcm0gb25seSAqLworCSAgICBub3NldCA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJ3InOgkJLyogZGlzcGxheSB0ZXJtIG9uIHN0ZGVyciAqLworCSAgICBzaG93dGVybSA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJ1MnOgkJLyogT0JTT0xFVEU6IG91dHB1dCBURVJNICYgVEVSTUNBUCAqLworCSAgICBTZmxhZyA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJ3MnOgkJLyogb3V0cHV0IFRFUk0gc2V0IGNvbW1hbmQgKi8KKwkgICAgc2ZsYWcgPSAxOworCSAgICBicmVhazsKKwljYXNlICdWJzoJCS8qIHByaW50IGN1cnNlcy12ZXJzaW9uICovCisJICAgIHB1dHMoY3Vyc2VzX3ZlcnNpb24oKSk7CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7CisJY2FzZSAndyc6CQkvKiBzZXQgd2luZG93LXNpemUgKi8KKwkgICAgb3B0X3cgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICc/JzoKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKyAgICB9CisKKyAgICBfbmNfcHJvZ25hbWUgPSBfbmNfcm9vdG5hbWUoKmFyZ3YpOworICAgIGFyZ2MgLT0gb3B0aW5kOworICAgIGFyZ3YgKz0gb3B0aW5kOworCisgICAgaWYgKGFyZ2MgPiAxKQorCXVzYWdlKCk7CisKKyAgICBpZiAoIW9wdF9jICYmICFvcHRfdykKKwlvcHRfYyA9IG9wdF93ID0gVFJVRTsKKworICAgIGlmIChHRVRfVFRZKFNUREVSUl9GSUxFTk8sICZtb2RlKSA8IDApCisJZmFpbGVkKCJzdGFuZGFyZCBlcnJvciIpOworICAgIGNhbl9yZXN0b3JlID0gVFJVRTsKKyAgICBvcmlnaW5hbCA9IG9sZG1vZGUgPSBtb2RlOworI2lmZGVmIFRFUk1JT1MKKyAgICBvc3BlZWQgPSAoTkNVUlNFU19PU1BFRUQpIGNmZ2V0b3NwZWVkKCZtb2RlKTsKKyNlbHNlCisgICAgb3NwZWVkID0gKE5DVVJTRVNfT1NQRUVEKSBtb2RlLnNnX29zcGVlZDsKKyNlbmRpZgorCisgICAgaWYgKCFzdHJjbXAoX25jX3Byb2duYW1lLCBQUk9HX1JFU0VUKSkgeworCWlzcmVzZXQgPSBUUlVFOworCXJlc2V0X21vZGUoKTsKKyAgICB9CisKKyAgICB0dHlwZSA9IGdldF90ZXJtY2FwX2VudHJ5KCphcmd2KTsKKworICAgIGlmICghbm9zZXQpIHsKKwl0Y29sdW1ucyA9IGNvbHVtbnM7CisJdGxpbmVzID0gbGluZXM7CisKKyNpZiBIQVZFX1NJWkVDSEFOR0UKKwlpZiAob3B0X3cpIHsKKwkgICAgU1RSVUNUX1dJTlNJWkUgd2luOworCSAgICAvKiBTZXQgd2luZG93IHNpemUgaWYgbm90IHNldCBhbHJlYWR5ICovCisJICAgICh2b2lkKSBpb2N0bChTVERFUlJfRklMRU5PLCBJT0NUTF9HRVRfV0lOU0laRSwgJndpbik7CisJICAgIGlmIChXSU5TSVpFX1JPV1Mod2luKSA9PSAwICYmCisJCVdJTlNJWkVfQ09MUyh3aW4pID09IDAgJiYKKwkJdGxpbmVzID4gMCAmJiB0Y29sdW1ucyA+IDApIHsKKwkJV0lOU0laRV9ST1dTKHdpbikgPSB0bGluZXM7CisJCVdJTlNJWkVfQ09MUyh3aW4pID0gdGNvbHVtbnM7CisJCSh2b2lkKSBpb2N0bChTVERFUlJfRklMRU5PLCBJT0NUTF9TRVRfV0lOU0laRSwgJndpbik7CisJICAgIH0KKwl9CisjZW5kaWYKKwlpZiAob3B0X2MpIHsKKwkgICAgc2V0X2NvbnRyb2xfY2hhcnMoKTsKKwkgICAgc2V0X2NvbnZlcnNpb25zKCk7CisKKwkgICAgaWYgKCFub2luaXQpCisJCXNldF9pbml0KCk7CisKKwkgICAgLyogU2V0IHRoZSBtb2RlcyBpZiB0aGV5J3ZlIGNoYW5nZWQuICovCisJICAgIGlmIChtZW1jbXAoJm1vZGUsICZvbGRtb2RlLCBzaXplb2YobW9kZSkpKSB7CisJCVNFVF9UVFkoU1RERVJSX0ZJTEVOTywgJm1vZGUpOworCSAgICB9CisJfQorICAgIH0KKworICAgIC8qIEdldCB0aGUgdGVybWluYWwgbmFtZSBmcm9tIHRoZSBlbnRyeS4gKi8KKyAgICB0dHlwZSA9IF9uY19maXJzdF9uYW1lKGN1cl90ZXJtLT50eXBlLnRlcm1fbmFtZXMpOworCisgICAgaWYgKG5vc2V0KQorCSh2b2lkKSBwcmludGYoIiVzXG4iLCB0dHlwZSk7CisgICAgZWxzZSB7CisJaWYgKHNob3d0ZXJtKQorCSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJUZXJtaW5hbCB0eXBlIGlzICVzLlxuIiwgdHR5cGUpOworCS8qCisJICogSWYgZXJhc2UsIGtpbGwgYW5kIGludGVycnVwdCBjaGFyYWN0ZXJzIGNvdWxkIGhhdmUgYmVlbgorCSAqIG1vZGlmaWVkIGFuZCBub3QgLVEsIGRpc3BsYXkgdGhlIGNoYW5nZXMuCisJICovCisjaWZkZWYgVEVSTUlPUworCWlmICghcXVpZXQpIHsKKwkgICAgcmVwb3J0KCJFcmFzZSIsIFZFUkFTRSwgQ0VSQVNFKTsKKwkgICAgcmVwb3J0KCJLaWxsIiwgVktJTEwsIENLSUxMKTsKKwkgICAgcmVwb3J0KCJJbnRlcnJ1cHQiLCBWSU5UUiwgQ0lOVFIpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChTZmxhZykKKwllcnIoIlRoZSAtUyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCB1bmRlciB0ZXJtaW5mby4iKTsKKworICAgIGlmIChzZmxhZykgeworCWludCBsZW47CisJY2hhciAqdmFyOworCWNoYXIgKmxlYWY7CisJLyoKKwkgKiBGaWd1cmUgb3V0IHdoYXQgc2hlbGwgd2UncmUgdXNpbmcuICBBIGhhY2ssIHdlIGxvb2sgZm9yIGFuCisJICogZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBTSEVMTCBlbmRpbmcgaW4gImNzaCIuCisJICovCisJaWYgKCh2YXIgPSBnZXRlbnYoIlNIRUxMIikpICE9IDAKKwkgICAgJiYgKChsZW4gPSAoaW50KSBzdHJsZW4obGVhZiA9IF9uY19iYXNlbmFtZSh2YXIpKSkgPj0gMykKKwkgICAgJiYgIXN0cmNtcChsZWFmICsgbGVuIC0gMywgImNzaCIpKQorCSAgICBwID0gInNldCBub2dsb2I7XG5zZXRlbnYgVEVSTSAlcztcbnVuc2V0IG5vZ2xvYjtcbiI7CisJZWxzZQorCSAgICBwID0gIlRFUk09JXM7XG4iOworCSh2b2lkKSBwcmludGYocCwgdHR5cGUpOworICAgIH0KKworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90YXItY29weS5zaCBiL25jdXJzZXMtNS43L3Rhci1jb3B5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkZjFiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90YXItY29weS5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKyMgJElkOiB0YXItY29weS5zaCx2IDEuNSAyMDAzLzEwLzI1IDE0OjQwOjA3IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OCwyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyMKKyMgQ29weSBhIGNvbGxlY3Rpb24gb2YgZmlsZXMgdXNpbmcgJ3RhcicsIHNvIHRoYXQgdGhlaXIgZGF0ZXMgYW5kIGxpbmtzIGFyZQorIyBwcmVzZXJ2ZWQKKyMKKyMgUGFyYW1ldGVyczoKKyMJJDEgPSBmaWxlcyB0byBjb3B5CisjCSQyID0gc291cmNlIGRpcmVjdG9yeQorIwkkMyA9IGRlc3RpbmF0aW9uIGRpcmVjdG9yeQorIworI0RPSVQ9ZWNobworRE9JVD1ldmFsCisKK2lmIHRlc3QgJCMgIT0gMyA7IHRoZW4KKwllY2hvICJVc2FnZTogJDAgZmlsZXMgc291cmNlIHRhcmdldCIKKwlleGl0IDEKK2VsaWYgdGVzdCAhIC1kICIkMiIgOyB0aGVuCisJZWNobyAiU291cmNlIGRpcmVjdG9yeSBub3QgZm91bmQ6ICQyIgorCWV4aXQgMQorZWxpZiB0ZXN0ICEgLWQgIiQzIiA7IHRoZW4KKwllY2hvICJUYXJnZXQgZGlyZWN0b3J5IG5vdCBmb3VuZDogJDMiCisJZXhpdCAxCitmaQorCitXRD1gcHdkYAorCitUTVA9JFdEL2NvcHkkJAorCitjZCAkMgorVEVTVD1gbHMgLWQgJDEgMj4vZGV2L251bGxgCitpZiB0ZXN0IC16ICIkVEVTVCIKK3RoZW4KKwllY2hvICIuLi4gbm8gbWF0Y2ggZm9yIFwiJDFcIiBpbiAkMiIKK2Vsc2UKKwllY2hvICIuLi4gaW5zdGFsbGluZyBmaWxlcyBtYXRjaGluZyBcIiQxXCIgaW4gJDIiCisJdHJhcCAicm0gLWYgJFRNUCIgMCAxIDIgNSAxNQorCWlmICggdGFyIGNmICRUTVAgJDEgKQorCXRoZW4KKwkJY2QgJDMKKwkJTElTVD1gdGFyIHRmICRUTVAgMj4mMWAKKwkJJERPSVQgcm0gLXJmICRMSVNUIDI+L2Rldi9udWxsCisJCSRET0lUIHRhciB4dmYgJFRNUAorCWVsc2UKKwkJZWNobyAiQ2Fubm90IGNyZWF0ZSB0YXIgb2YgJDEgZmlsZXMiCisJCWV4aXQgMQorCWZpCitmaQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9NYWtlZmlsZS5pbiBiL25jdXJzZXMtNS43L3Rlc3QvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5NWVlZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMTcgQEAKKyMgJElkOiBNYWtlZmlsZS5pbix2IDEuMTAyIDIwMDgvMDkvMDcgMTM6NTg6MjkgdG9tIEV4cCAkCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgICMKKyMgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgIworIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICAjCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBkaXN0cmlidXRlICAgICMKKyMgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gIworIyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlICAjCisjIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAjCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAjCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAgICMKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgICAgIworIyBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgICAgICAjCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HICAgICMKKyMgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAgICAgICAgIworIyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIworIyBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCAjCisjIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgICAgICAgICMKKyMgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAxOTk2LW9uCisjCisjIE1ha2VmaWxlIGZvciBuY3Vyc2VzIHRlc3RzLgorCisjIHR1cm4gb2ZmIF9hbGxfIHN1ZmZpeCBydWxlczsgd2UnbGwgZ2VuZXJhdGUgb3VyIG93bgorLlNVRkZJWEVTOgorCitTSEVMTAkJPSAvYmluL3NoCisKK0BTRVRfTUFLRUAKKworZGVzdGRpcgkJPQoreAkJPSBARVhFRVhUQAorbwkJPSAuQE9CSkVYVEAKKworTU9ERUwJCT0gLi4vQERGVF9PQkpfU1VCRElSQAorc3JjZGlyCQk9IEBzcmNkaXJACitwcmVmaXgJCT0gQHByZWZpeEAKK2V4ZWNfcHJlZml4CT0gQGV4ZWNfcHJlZml4QAorbGliZGlyCQk9IEBsaWJkaXJACitpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACisKK0xJQlRPT0wJCT0gQExJQlRPT0xACitMSUJUT09MX0NMRUFOCT0gQExJQl9DTEVBTkAKK0xJQlRPT0xfQ09NUElMRQk9IEBMSUJfQ09NUElMRUAKK0xJQlRPT0xfTElOSwk9IEBMSUJfTElOS0AKKworQ0MJCT0gQENDQAorQ1BQCQk9IEBDUFBACisKK0NGTEFHUwkJPSBAQ0ZMQUdTQCBARVhUUkFfQ0ZMQUdTQAorQ1BQRkxBR1MJPSAgLUkuLi90ZXN0IC1JJChzcmNkaXIpIC1ESEFWRV9DT05GSUdfSCBAQ1BQRkxBR1NACisKK0NDRkxBR1MJCT0gJChDUFBGTEFHUykgJChDRkxBR1MpCisKK0NGTEFHU19MSUJUT09MCT0gJChDQ0ZMQUdTKQorQ0ZMQUdTX05PUk1BTAk9ICQoQ0NGTEFHUykKK0NGTEFHU19ERUJVRwk9ICQoQ0NGTEFHUykgQENDX0dfT1BUQCAtRFRSQUNFCitDRkxBR1NfUFJPRklMRQk9ICQoQ0NGTEFHUykgLXBnCitDRkxBR1NfU0hBUkVECT0gJChDQ0ZMQUdTKSBAQ0NfU0hBUkVEX09QVFNACisKK0NGTEFHU19ERUZBVUxUCT0gJChDRkxBR1NfQERGVF9VUFJfTU9ERUxAKQorCitSRUxfVkVSU0lPTgk9IEBjZl9jdl9yZWxfdmVyc2lvbkAKK0FCSV9WRVJTSU9OCT0gQGNmX2N2X2FiaV92ZXJzaW9uQAorTE9DQUxfTElCRElSCT0gQHRvcF9idWlsZGRpckAvbGliCitMT0NBTF9MSUJTCT0gQFRFU1RfREVQU0AKK01BVEhfTElCCT0gQE1BVEhfTElCQAorVEVTVF9MSUJTCT0gQFRFU1RfTElCU0AKKworTEQJCT0gQExEQAorTElOSwkJPSBATElOS19URVNUU0AgJChMSUJUT09MX0xJTkspICQoQ0ZMQUdTKQorCitMREZMQUdTCQk9IEBMRF9NT0RFTEAgQExPQ0FMX0xERkxBR1NAIEBMREZMQUdTQAorCitMREZMQUdTX0xJQlRPT0wJPSAkKExERkxBR1MpICQoQ0ZMQUdTX0xJQlRPT0wpCitMREZMQUdTX05PUk1BTAk9ICQoTERGTEFHUykgJChDRkxBR1NfTk9STUFMKQorTERGTEFHU19ERUJVRwk9ICQoTERGTEFHUykgJChDRkxBR1NfREVCVUcpCitMREZMQUdTX1BST0ZJTEUJPSAkKExERkxBR1MpICQoQ0ZMQUdTX1BST0ZJTEUpCitMREZMQUdTX1NIQVJFRAk9ICQoTERGTEFHUykgJChDRkxBR1NfU0hBUkVEKSBATERfU0hBUkVEX09QVFNACisKK1RFU1RfQVJHUwk9IEBMREZMQUdTX1NUQVRJQ0AgQFRFU1RfQVJHU0AgQExERkxBR1NfU0hBUkVEQCAKKworIyB1c2UgdGhlc2UgZm9yIGxpbmtpbmcgd2l0aCBhbGwgb2YgdGhlIGxpYnJhcmllcworTElCU19ERUZBVUxUCT0gJChURVNUX0FSR1MpIEBMSUJTQCAkKFRFU1RfTElCUykgJChNQVRIX0xJQikKK0xERkxBR1NfREVGQVVMVAk9ICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApICQoTElCU19ERUZBVUxUKQorCisjIHVzZSB0aGVzZSBmb3IgbGlua2luZyB3aXRoIHRoZSAobiljdXJzZXMgbGlicmFyeSBhbmQgcG9zc2libHkgcHRocmVhZHMKK0xJQlNfVEhSRUFEUwk9IGBlY2hvICIkKFRFU1RfQVJHUykgQExJQlNAIiB8IHNlZCAtZSAncy8tbGZvcm0uKi1scGFuZWxbXiBdKi8vJ2AgJChURVNUX0xJQlMpICQoTUFUSF9MSUIpIEBQVEhSRUFEQAorTERGTEFHU19USFJFQURTCT0gJChMREZMQUdTX0BERlRfVVBSX01PREVMQCkgJChMSUJTX1RIUkVBRFMpCisKKyMgdXNlIHRoZXNlIGZvciBsaW5raW5nIHdpdGggdGhlIChuKWN1cnNlcyBsaWJyYXJ5CitMSUJTX0NVUlNFUwk9IGBlY2hvICIkKFRFU1RfQVJHUykgQExJQlNAIiB8IHNlZCAtZSAncy8tbGZvcm0uKi1scGFuZWxbXiBdKi8vJ2AgJChURVNUX0xJQlMpICQoTUFUSF9MSUIpCitMREZMQUdTX0NVUlNFUwk9ICQoTERGTEFHU19AREZUX1VQUl9NT0RFTEApICQoTElCU19DVVJTRVMpCisKKyMgdXNlIHRoZXNlIGZvciBsaW5raW5nIHdpdGggdGhlIHRpbmZvIGxpYnJhcnkgaWYgd2UgaGF2ZSBpdCwgb3IgY3Vyc2VzIGxpYnJhcnkgaWYgbm90CitMSUJTX1RJTkZPCT0gQExERkxBR1NfU1RBVElDQCBAVElORk9fQVJHU0AgQExERkxBR1NfU0hBUkVEQCBATElCU0AgJChURVNUX0xJQlMpICQoTUFUSF9MSUIpCitMREZMQUdTX1RJTkZPCT0gJChMREZMQUdTX0BERlRfVVBSX01PREVMQCkgJChMSUJTX1RJTkZPKQorCitMSU5UCQk9IEBMSU5UQAorTElOVF9PUFRTCT0gQExJTlRfT1BUU0AKK0xJTlRfTElCUwk9IC1sZm9ybSAtbG1lbnUgLWxwYW5lbCAtbG5jdXJzZXMgQExJQlNACisKK0hFQURFUl9ERVBTCT0gXAorCS4uL2luY2x1ZGUvY3Vyc2VzLmggXAorCS4uL2luY2x1ZGUvdGVybS5oCisKKyMgVGhlIHJlc3QgaXMgZ2VuZXJhdGVkIGZyb20gdGhlICJwcm9ncmFtcyIgYW5kICJtb2R1bGVzIiBmaWxlcy4uLgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9SRUFETUUgYi9uY3Vyc2VzLTUuNy90ZXN0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTFjOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9SRUFETUUKQEAgLTAsMCArMSw2NzkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAgLS0KKy0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAgLS0KKy0tICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAgLS0KKy0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAgLS0KKy0tIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgLS0KKy0tIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAgLS0KKy0tIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAgLS0KKy0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAgLS0KKy0tIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAgLS0KKy0tIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gLS0KKy0tIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAgICAgLS0KKy0tIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAgLS0KKy0tIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgLS0KKy0tIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgLS0KKy0tIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAgLS0KKy0tIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAgLS0KKy0tIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tICRJZDogUkVBRE1FLHYgMS4zOCAyMDA4LzEwLzE4IDIxOjAyOjQ1IHRvbSBFeHAgJAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcHJvZ3JhbXMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIGRlc2lnbmVkIHRvIHRlc3QgeW91ciBuZXdlc3QgdG95IDotKQorQ2hlY2sgdGhlIHNvdXJjZXMgZm9yIGFueSBmdXJ0aGVyIGRldGFpbHMuCisKK2JsdWUgICAgICAgLSBCbHVlIE1vb24sIGEgbmlmdHkgc29saXRhaXJlICh1c2VzIGNvbG9yKQorYnMuYyAgICAgICAtIHRoZSBnYW1lIG9mIEJhdHRsZXNoaXBzICh1c2VzIGNvbG9yKQorZmlyZXdvcmsuYyAtIG11bHRpLWNvbG9yZWQgZmlyZXdvcmtzICh1c2VzIGNvbG9yKQorZ2RjLmMgICAgICAtIEdyZWF0IERpZ2l0YWwgQ2xvY2sgKHVzZXMgY29sb3IpCitoYW5vaS5jICAgIC0gdGhlIGdhbWUgb2YgaGFub2kgKHVzZXMgY29sb3IgZXNzZW50aWFsbHkpCitrbmlnaHQuYyAgIC0gdGhlIGdhbWUgb2YgS25pZ2h0J3MgVG91ciAodXNlcyBjb2xvcikKK2xydGVzdC5jICAgLSB0ZXN0IG9mIGFjY2VzcyB0byB0aGUgbG93ZXItcmlnaHQgY29ybmVyCituY3Vyc2VzLmMgIC0gbXVsdGktdGVzdCBwcm9ncmFtICh1c2VzIGNvbG9yKQorbmV3ZGVtby5jICAtIGFub3RoZXIgdGVzdCBmcm9tIFBEQ3Vyc2VzICh1c2VzIGNvbG9yKQorcmFpbi5jICAgICAtIHJhaW4gZHJvcHMga2VlcCBmYWxsaW5nIG9uIG15IGhlYWQuLi4KK3RjbG9jay5jICAgLSBhbmFsb2cvZGlnaXRhbCBjbG9jawordGVzdGN1cnMuYyAtIGEgdGVzdCBmcm9tIHRoZSBQREN1cnNlcyBwZW9wbGUgKHVzZXMgY29sb3IpCit3b3JtLmMgICAgIC0gd29ybXMgcnVuIGFsbCBvdmVyIHlvdXIgc2NyZWVuICh1c2VzIGNvbG9yKQoreG1hcy5jICAgICAtIFhtYXMgZ3JlZXRpbmcgY2FyZAorCitUaGUgYnMgYW5kIGtuaWdodCBnYW1lcyBkZW1vbnN0cmF0ZSBwcm9jZXNzaW5nIG9mIG1vdXNlIGV2ZW50cyB1bmRlciB4dGVybS4KK1RoaXMgZGlyZWN0b3J5IGFsc28gY29udGFpbnM6CisKK3RyYWNlbXVuY2ggLSBQZXJsIHNjcmlwdCB0byBjcnVuY2ggdHJhY2Ugc2NyaXB0cyB0byBtYWtlIHRoZW0gZWFzaWVyIHRvIHJlYWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBwcm9ncmFtcyBwcm92aWRlIGV4YW1wbGVzIG9mIHVzZSwgYnV0IGRvIG5vdCBjb21wcmlzZSBhIGNvbXBsZXRlIHNldCBvZgordGVzdHMuICBIZXJlIGlzIGEgbGlzdCBvZiBsaWJyYXJ5IGV4dGVybmFscywgbm90aW5nIHRob3NlIHRoYXQgYXJlIHVzZWQ6CisKK2xpYmZvcm06CistLS0tLS0tCitUWVBFX0FMTlVNCQkJdGVzdDogZGVtb19mb3JtcworVFlQRV9BTFBIQQkJCXRlc3Q6IGRlbW9fZm9ybXMgbmN1cnNlcworVFlQRV9FTlVNCQkJdGVzdDogZGVtb19mb3JtcworVFlQRV9JTlRFR0VSCQkJdGVzdDogZGVtb19mb3JtcworVFlQRV9JUFY0CQkJdGVzdDogZGVtb19mb3JtcworVFlQRV9OVU1FUklDCQkJdGVzdDogZGVtb19mb3JtcworVFlQRV9SRUdFWFAJCQl0ZXN0OiBkZW1vX2Zvcm1zCitjdXJyZW50X2ZpZWxkCQkJdGVzdDogZGVtb19mb3JtcyBlZGl0X2ZpZWxkIG5jdXJzZXMKK2RhdGFfYWhlYWQJCQl0ZXN0OiBkZW1vX2Zvcm1zCitkYXRhX2JlaGluZAkJCXRlc3Q6IGRlbW9fZm9ybXMKK2R1cF9maWVsZAkJCS0KK2R5bmFtaWNfZmllbGRfaW5mbwkJdGVzdDogZGVtb19mb3JtcworZmllbGRfYXJnCQkJdGVzdDogZGVtb19mb3JtcworZmllbGRfYmFjawkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX2J1ZmZlcgkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgZWRpdF9maWVsZCBuY3Vyc2VzCitmaWVsZF9jb3VudAkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX2ZvcmUJCQl0ZXN0OiBkZW1vX2Zvcm1zCitmaWVsZF9pbmRleAkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX2luZm8JCQl0ZXN0OiBuY3Vyc2VzCitmaWVsZF9pbml0CQkJLQorZmllbGRfanVzdAkJCS0KK2ZpZWxkX29wdHMJCQl0ZXN0OiBkZW1vX2Zvcm1zIG5jdXJzZXMKK2ZpZWxkX29wdHNfb2ZmCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcworZmllbGRfb3B0c19vbgkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX3BhZAkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX3N0YXR1cwkJCXRlc3Q6IGRlbW9fZm9ybXMKK2ZpZWxkX3Rlcm0JCQktCitmaWVsZF90eXBlCQkJdGVzdDogZGVtb19mb3JtcworZmllbGRfdXNlcnB0cgkJCXRlc3Q6IGVkaXRfZmllbGQgbmN1cnNlcworZm9ybV9kcml2ZXIJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIGVkaXRfZmllbGQgbmN1cnNlcworZm9ybV9maWVsZHMJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zCitmb3JtX2luaXQJCQktCitmb3JtX29wdHMJCQktCitmb3JtX29wdHNfb2ZmCQkJLQorZm9ybV9vcHRzX29uCQkJLQorZm9ybV9wYWdlCQkJdGVzdDogZGVtb19mb3JtcworZm9ybV9yZXF1ZXN0X2J5X25hbWUJCS0KK2Zvcm1fcmVxdWVzdF9uYW1lCQl0ZXN0OiBlZGl0X2ZpZWxkCitmb3JtX3N1YgkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgbmN1cnNlcworZm9ybV90ZXJtCQkJLQorZm9ybV91c2VycHRyCQkJLQorZm9ybV93aW4JCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIGVkaXRfZmllbGQgbmN1cnNlcworZnJlZV9maWVsZAkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgbmN1cnNlcworZnJlZV9maWVsZHR5cGUJCQl0ZXN0OiBuY3Vyc2VzCitmcmVlX2Zvcm0JCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK2xpbmtfZmllbGQJCQktCitsaW5rX2ZpZWxkdHlwZQkJCS0KK21vdmVfZmllbGQJCQktCituZXdfZmllbGQJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK25ld19maWVsZHR5cGUJCQl0ZXN0OiBuY3Vyc2VzCituZXdfZm9ybQkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgbmN1cnNlcworbmV3X3BhZ2UJCQl0ZXN0OiBkZW1vX2Zvcm1zCitwb3NfZm9ybV9jdXJzb3IJCQktCitwb3N0X2Zvcm0JCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIG5jdXJzZXMKK3NjYWxlX2Zvcm0JCQl0ZXN0OiBkZW1vX2Zvcm1zIG5jdXJzZXMKK3NldF9jdXJyZW50X2ZpZWxkCQl0ZXN0OiBkZW1vX2Zvcm1zCitzZXRfZmllbGRfYmFjawkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgZWRpdF9maWVsZCBuY3Vyc2VzCitzZXRfZmllbGRfYnVmZmVyCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIGVkaXRfZmllbGQgbmN1cnNlcworc2V0X2ZpZWxkX2ZvcmUJCQl0ZXN0OiBkZW1vX2Zvcm1zCitzZXRfZmllbGRfaW5pdAkJCS0KK3NldF9maWVsZF9qdXN0CQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3Jtcworc2V0X2ZpZWxkX29wdHMJCQl0ZXN0OiBkZW1vX2Zvcm1zIG5jdXJzZXMKK3NldF9maWVsZF9wYWQJCQl0ZXN0OiBkZW1vX2Zvcm1zCitzZXRfZmllbGRfc3RhdHVzCQl0ZXN0OiBkZW1vX2Zvcm1zCitzZXRfZmllbGRfdGVybQkJCS0KK3NldF9maWVsZF90eXBlCQkJdGVzdDogZGVtb19mb3JtcyBuY3Vyc2VzCitzZXRfZmllbGRfdXNlcnB0cgkJdGVzdDogZGVtb19mb3JtcyBuY3Vyc2VzCitzZXRfZmllbGR0eXBlX2FyZwkJLQorc2V0X2ZpZWxkdHlwZV9jaG9pY2UJCS0KK3NldF9mb3JtX2ZpZWxkcwkJCS0KK3NldF9mb3JtX2luaXQJCQktCitzZXRfZm9ybV9vcHRzCQkJLQorc2V0X2Zvcm1fcGFnZQkJCS0KK3NldF9mb3JtX3N1YgkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgbmN1cnNlcworc2V0X2Zvcm1fdGVybQkJCS0KK3NldF9mb3JtX3VzZXJwdHIJCS0KK3NldF9mb3JtX3dpbgkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZm9ybXMgbmN1cnNlcworc2V0X21heF9maWVsZAkJCXRlc3Q6IGRlbW9fZm9ybXMKK3NldF9uZXdfcGFnZQkJCXRlc3Q6IGRlbW9fZm9ybXMKK3VucG9zdF9mb3JtCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBuY3Vyc2VzCisKK2xpYm1lbnU6CistLS0tLS0tCitjdXJyZW50X2l0ZW0JCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK2ZyZWVfaXRlbQkJCXRlc3Q6IG5jdXJzZXMKK2ZyZWVfbWVudQkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworaXRlbV9jb3VudAkJCXRlc3Q6IGRlbW9fbWVudXMKK2l0ZW1fZGVzY3JpcHRpb24JCS0KK2l0ZW1faW5kZXgJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK2l0ZW1faW5pdAkJCS0KK2l0ZW1fbmFtZQkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworaXRlbV9vcHRzCQkJLQoraXRlbV9vcHRzX29mZgkJCS0KK2l0ZW1fb3B0c19vbgkJCS0KK2l0ZW1fdGVybQkJCS0KK2l0ZW1fdXNlcnB0cgkJCS0KK2l0ZW1fdmFsdWUJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK2l0ZW1fdmlzaWJsZQkJCS0KK21lbnVfYmFjawkJCS0KK21lbnVfZHJpdmVyCQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCittZW51X2ZvcmUJCQktCittZW51X2Zvcm1hdAkJCS0KK21lbnVfZ3JleQkJCS0KK21lbnVfaW5pdAkJCS0KK21lbnVfaXRlbXMJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK21lbnVfbWFyawkJCXRlc3Q6IGRlbW9fbWVudXMKK21lbnVfb3B0cwkJCS0KK21lbnVfb3B0c19vZmYJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK21lbnVfb3B0c19vbgkJCXRlc3Q6IGRlbW9fbWVudXMKK21lbnVfcGFkCQkJLQorbWVudV9wYXR0ZXJuCQkJdGVzdDogZGVtb19tZW51cworbWVudV9yZXF1ZXN0X2J5X25hbWUJCS0KK21lbnVfcmVxdWVzdF9uYW1lCQktCittZW51X3NwYWNpbmcJCQl0ZXN0OiBkZW1vX21lbnVzCittZW51X3N1YgkJCXRlc3Q6IGRlbW9fbWVudXMKK21lbnVfdGVybQkJCS0KK21lbnVfdXNlcnB0cgkJCS0KK21lbnVfd2luCQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCituZXdfaXRlbQkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworbmV3X21lbnUJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK3Bvc19tZW51X2N1cnNvcgkJCWxpYjogbWVudQorcG9zdF9tZW51CQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitzY2FsZV9tZW51CQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitzZXRfY3VycmVudF9pdGVtCQktCitzZXRfaXRlbV9pbml0CQkJLQorc2V0X2l0ZW1fb3B0cwkJCS0KK3NldF9pdGVtX3Rlcm0JCQktCitzZXRfaXRlbV91c2VycHRyCQktCitzZXRfaXRlbV92YWx1ZQkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworc2V0X21lbnVfYmFjawkJCXRlc3Q6IGRlbW9fbWVudXMKK3NldF9tZW51X2ZvcmUJCQl0ZXN0OiBkZW1vX21lbnVzCitzZXRfbWVudV9mb3JtYXQJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK3NldF9tZW51X2dyZXkJCQktCitzZXRfbWVudV9pbml0CQkJLQorc2V0X21lbnVfaXRlbXMJCQktCitzZXRfbWVudV9tYXJrCQkJdGVzdDogZGVtb19tZW51cworc2V0X21lbnVfb3B0cwkJCS0KK3NldF9tZW51X3BhZAkJCS0KK3NldF9tZW51X3BhdHRlcm4JCS0KK3NldF9tZW51X3NwYWNpbmcJCS0KK3NldF9tZW51X3N1YgkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworc2V0X21lbnVfdGVybQkJCS0KK3NldF9tZW51X3VzZXJwdHIJCS0KK3NldF9tZW51X3dpbgkJCXRlc3Q6IGRlbW9fbWVudXMgbmN1cnNlcworc2V0X3RvcF9yb3cJCQktCit0b3Bfcm93CQkJCS0KK3VucG9zdF9tZW51CQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCisKK2xpYm5jdXJzZXM6CistLS0tLS0tLS0tCitCQwkJCQktCitDT0xPUlMJCQkJdGVzdDogZWNob2NoYXIgbmN1cnNlcyBzYXZlc2NyZWVuIHhtYXMKK0NPTE9SX1BBSVIJCQl0ZXN0OiBiYWNrZ3JvdW5kIGJsdWUgYnMgY2FyZGZpbGUgZGVtb19mb3JtcyBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGVjaG9jaGFyIGZpbHRlciBmaXJld29yayBnZGMgaGFub2kgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbmN1cnNlcyBuZXdkZW1vIHJhaW4gc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdGFkZGNoIHRlc3RjdXJzIHZpZXcgd29ybSB4bWFzCitDT0xPUl9QQUlSUwkJCXRlc3Q6IGVjaG9jaGFyIG5jdXJzZXMgbmV3ZGVtbyBzYXZlc2NyZWVuCitDT0xTCQkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBlY2hvY2hhciBlZGl0X2ZpZWxkIGZpcmV3b3JrIGZvbGRrZXlzIGhhc2h0ZXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByYWluIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB2aWV3IHdvcm0KK0VTQ0RFTEFZCQkJdGVzdDogdGVzdF9vcGFxdWUKK0xJTkVTCQkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fZGVma2V5IGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBlY2hvY2hhciBlZGl0X2ZpZWxkIGZpcmV3b3JrIGhhbm9pIGhhc2h0ZXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByYWluIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB2aWV3IHdvcm0geG1hcworUEFJUl9OVU1CRVIJCQl0ZXN0OiBuY3Vyc2VzCitQQwkJCQlsaWI6IG5jdXJzZXMKK1NQCQkJCWxpYjogbmN1cnNlcworVEFCU0laRQkJCQl0ZXN0OiB0ZXN0X29wYXF1ZQorVVAJCQkJLQorYWNzX21hcAkJCQl0ZXN0OiBnZGMgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gdGVzdGN1cnMKK2FkZF93Y2gJCQkJdGVzdDogZGVtb19wYW5lbHMgbmN1cnNlcworYWRkX3djaG5zdHIJCQktCithZGRfd2Noc3RyCQkJdGVzdDogdmlldworYWRkY2gJCQkJdGVzdDogYmx1ZSBicyBlY2hvY2hhciBoYXNodGVzdCBuY3Vyc2VzIHNhdmVzY3JlZW4gdGVzdF9vcGFxdWUgdGVzdGFkZGNoIHZpZXcgd29ybQorYWRkY2huc3RyCQkJLQorYWRkY2hzdHIJCQktCithZGRuc3RyCQkJCS0KK2FkZG53c3RyCQkJdGVzdDogbmN1cnNlcworYWRkc3RyCQkJCXRlc3Q6IGJsdWUgYnMgY2FyZGZpbGUgZ2RjIGhhbm9pIGxydGVzdCBuY3Vyc2VzIHNhdmVzY3JlZW4KK2FkZHdzdHIJCQkJdGVzdDogbmN1cnNlcworYXNzdW1lX2RlZmF1bHRfY29sb3JzCQl0ZXN0OiBuY3Vyc2VzCithdHRyX2dldAkJCXRlc3Q6IG5jdXJzZXMKK2F0dHJfb2ZmCQkJdGVzdDogbmN1cnNlcworYXR0cl9vbgkJCQl0ZXN0OiBuY3Vyc2VzCithdHRyX3NldAkJCXRlc3Q6IG5jdXJzZXMKK2F0dHJvZmYJCQkJdGVzdDogZWNob2NoYXIgZmlsdGVyIGdkYyBuY3Vyc2VzIHRjbG9jaworYXR0cm9uCQkJCXRlc3Q6IGJzIGVjaG9jaGFyIGZpbHRlciBnZGMgbmN1cnNlcworYXR0cnNldAkJCQl0ZXN0OiBicyBmaXJld29yayBnZGMgaGFub2kgbmN1cnNlcyByYWluIHRjbG9jayB0ZXN0YWRkY2ggdGVzdGN1cnMKK2JhdWRyYXRlCQkJbGliOiBuY3Vyc2VzCitiZWVwCQkJCXRlc3Q6IGJsdWUgYnMgY2FyZGZpbGUgY2hnYXQgZGVtb19mb3JtcyBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGVkaXRfZmllbGQgaGFub2kgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga25pZ2h0IG1vdmV3aW5kb3cgbmN1cnNlcyBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMgdmlldyB4bWFzCitia2dkCQkJCXRlc3Q6IGJhY2tncm91bmQgY2FyZGZpbGUgZGVtb19mb3JtcyBuY3Vyc2VzIHNhdmVzY3JlZW4gdGNsb2NrIHZpZXcKK2JrZ2RzZXQJCQkJdGVzdDogYmFja2dyb3VuZCBuY3Vyc2VzIHRlc3RhZGRjaAorYmtncm5kCQkJCXRlc3Q6IG5jdXJzZXMKK2JrZ3JuZHNldAkJCXRlc3Q6IG5jdXJzZXMKK2Jvb2xjb2RlcwkJCXRlc3Q6IHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5Citib29sZm5hbWVzCQkJdGVzdDogdGVzdF9hcnJheXMgcHJvZ3M6IGR1bXBfZW50cnkKK2Jvb2xuYW1lcwkJCXRlc3Q6IHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5IGluZm9jbXAKK2JvcmRlcgkJCQktCitib3JkZXJfc2V0CQkJLQorYm94CQkJCXRlc3Q6IGNhcmRmaWxlIGNoZ2F0IGRlbW9fZm9ybXMgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBlZGl0X2ZpZWxkIGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGxydGVzdCBuY3Vyc2VzIG5ld2RlbW8gcmVkcmF3IHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycworYm94X3NldAkJCQl0ZXN0OiBuY3Vyc2VzCitjYW5fY2hhbmdlX2NvbG9yCQl0ZXN0OiBuY3Vyc2VzCitjYnJlYWsJCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNhcmRmaWxlIGNoZ2F0IGNvbG9yX3NldCBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkgZGVtb19mb3JtcyBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZGl0dG8gZmlsdGVyIGZpcmV3b3JrIGZvbGRrZXlzIGdkYyBoYW5vaSBoYXNodGVzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbHJ0ZXN0IG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB2aWV3IHdvcm0geG1hcworY2hnYXQJCQkJdGVzdDogY2hnYXQKK2NsZWFyCQkJCXRlc3Q6IGJsdWUgYnMgZ2RjIG5jdXJzZXMgdGVzdGN1cnMgeG1hcworY2xlYXJvawkJCQl0ZXN0OiBicyBrbmlnaHQKK2NscnRvYm90CQkJdGVzdDogZGVtb19tZW51cyBuY3Vyc2VzCitjbHJ0b2VvbAkJCXRlc3Q6IGJsdWUgYnMgZGVtb19hbHRrZXlzIGRlbW9fbWVudXMgZm9sZGtleXMgaGFub2kgaGFzaHRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIHZpZXcKK2NvbG9yX2NvbnRlbnQJCQl0ZXN0OiBuY3Vyc2VzCitjb2xvcl9zZXQJCQl0ZXN0OiBjb2xvcl9zZXQgbmN1cnNlcworY29weXdpbgkJCQl0ZXN0OiBuY3Vyc2VzIHRlc3RjdXJzCitjdXJfdGVybQkJCXRlc3Q6IGRvdHMgZG90c19tdmN1ciBscnRlc3QgcHJvZ3M6IGNsZWFyIHRwdXQgdHNldAorY3Vyc19zZXQJCQl0ZXN0OiBlY2hvY2hhciBmaXJld29yayBnZGMgaGFub2kgbHJ0ZXN0IG5jdXJzZXMgbmV3ZGVtbyByYWluIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RjdXJzIHdvcm0geG1hcworY3Vyc2NyCQkJCXRlc3Q6IGRlbW9fcGFuZWxzIGVkaXRfZmllbGQga25pZ2h0IGxydGVzdCBuY3Vyc2VzIHNhdmVzY3JlZW4gdGNsb2NrIHZpZXcKK2N1cnNlc192ZXJzaW9uCQkJdGVzdDogbmN1cnNlcyBwcm9nczogaW5mb2NtcCB0aWMgdG9lIHRwdXQgdHNldAorZGVmX3Byb2dfbW9kZQkJCXRlc3Q6IGJzIG5jdXJzZXMKK2RlZl9zaGVsbF9tb2RlCQkJbGliOiBuY3Vyc2VzCitkZWZpbmVfa2V5CQkJdGVzdDogZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGZvbGRrZXlzCitkZWxfY3VydGVybQkJCWxpYjogbmN1cnNlcworZGVsYXlfb3V0cHV0CQkJdGVzdDogbmV3ZGVtbworZGVsY2gJCQkJLQorZGVsZXRlbG4JCQktCitkZWxzY3JlZW4JCQl0ZXN0OiBkaXR0byBkb3RzX212Y3VyCitkZWx3aW4JCQkJdGVzdDogY2FyZGZpbGUgY2hnYXQgZGVtb19mb3JtcyBkZW1vX3BhbmVscyBlZGl0X2ZpZWxkIGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJlZHJhdyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMKK2RlcndpbgkJCQl0ZXN0OiBjYXJkZmlsZSBjaGdhdCBkZW1vX2Zvcm1zIGRlbW9fbWVudXMgZGl0dG8gaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMgbW92ZXdpbmRvdyBuY3Vyc2VzIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZQorZG91cGRhdGUJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGRpdHRvIGVkaXRfZmllbGQgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbW92ZXdpbmRvdyBuY3Vyc2VzIHJlZHJhdyBzYXZlc2NyZWVuIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIKK2R1cHdpbgkJCQl0ZXN0OiBlZGl0X2ZpZWxkCitlY2hvCQkJCXRlc3Q6IGJzIGhhbm9pIG5jdXJzZXMgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0Y3VycyB0ZXN0c2NhbncKK2VjaG9fd2NoYXIJCQl0ZXN0OiBuY3Vyc2VzCitlY2hvY2hhcgkJCXRlc3Q6IGVjaG9jaGFyIG5jdXJzZXMKK2VuZHdpbgkJCQl0ZXN0OiBiYWNrZ3JvdW5kIGJsdWUgYnMgY2FyZGZpbGUgY2hnYXQgY29sb3Jfc2V0IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBkaXR0byBkb3RzX212Y3VyIGVjaG9jaGFyIGZpbHRlciBmaXJld29yayBmaXJzdGxhc3QgZm9sZGtleXMgZ2RjIGhhbm9pIGhhc2h0ZXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtleV9uYW1lcyBrZXluYW1lcyBrbmlnaHQgbHJ0ZXN0IG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJhaW4gcmVkcmF3IHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0YWRkY2ggdGVzdGN1cnMgdGVzdHNjYW53IHZpZXcgd29ybSB4bWFzCitlcmFzZQkJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX21lbnVzIGZpbHRlciBmaXJld29yayBmaXJzdGxhc3QgaGFub2kgbHJ0ZXN0IG5jdXJzZXMgdGNsb2NrIHRlc3Rfb3BhcXVlIHRlc3RjdXJzCitlcmFzZWNoYXIJCQlsaWI6IG5jdXJzZXMKK2VyYXNld2NoYXIJCQktCitmaWx0ZXIJCQkJdGVzdDogZmlsdGVyCitmbGFzaAkJCQl0ZXN0OiBjYXJkZmlsZSBscnRlc3QgbmN1cnNlcyB0Y2xvY2sgdGVzdGN1cnMKK2ZsdXNoaW5wCQkJdGVzdDogbmN1cnNlcyBuZXdkZW1vIHRlc3RjdXJzCitnZXRfd2NoCQkJCS0KK2dldF93c3RyCQkJdGVzdDogdGVzdF9nZXRfd3N0cgorZ2V0YXR0cnMJCQktCitnZXRiZWd4CQkJCXRlc3Q6IGNoZ2F0IGRlbW9fbWVudXMgZGVtb19wYW5lbHMgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmVkcmF3IHRlc3RjdXJzCitnZXRiZWd5CQkJCXRlc3Q6IGNoZ2F0IGRlbW9fbWVudXMgZGVtb19wYW5lbHMgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmVkcmF3IHRlc3RjdXJzCitnZXRia2dkCQkJCXRlc3Q6IG5jdXJzZXMKK2dldGJrZ3JuZAkJCXRlc3Q6IG5jdXJzZXMKK2dldGNjaGFyCQkJdGVzdDogbmN1cnNlcyB2aWV3CitnZXRjaAkJCQl0ZXN0OiBiYWNrZ3JvdW5kIGJsdWUgYnMgY2hnYXQgY29sb3Jfc2V0IGRlbW9fYWx0a2V5cyBmaWx0ZXIgZmlyZXdvcmsgZmlyc3RsYXN0IGZvbGRrZXlzIGhhbm9pIGhhc2h0ZXN0IGxydGVzdCBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X29wYXF1ZSB0ZXN0YWRkY2ggdGVzdGN1cnMgdmlldyB4bWFzCitnZXRjdXJ4CQkJCXRlc3Q6IGJzIGNoZ2F0IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX3BhbmVscyBmb2xka2V5cyBtb3Zld2luZG93IG5jdXJzZXMgcmVkcmF3IHNhdmVzY3JlZW4gdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycworZ2V0Y3VyeQkJCQl0ZXN0OiBicyBjaGdhdCBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkgZGVtb19wYW5lbHMgZWRpdF9maWVsZCBmb2xka2V5cyBtb3Zld2luZG93IG5jdXJzZXMgcmVkcmF3IHNhdmVzY3JlZW4gdGVzdF9vcGFxdWUgdGVzdGN1cnMKK2dldG1heHgJCQkJdGVzdDogY2hnYXQgZGVtb19wYW5lbHMgaW5jaF93aWRlIGluY2hzIG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJlZHJhdyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMKK2dldG1heHkJCQkJdGVzdDogY2hnYXQgZGVtb19mb3JtcyBkZW1vX3BhbmVscyBpbmNoX3dpZGUgaW5jaHMgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmVkcmF3IHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycworZ2V0bW91c2UJCQl0ZXN0OiBicyBrbmlnaHQgbW92ZXdpbmRvdyBuY3Vyc2VzCitnZXRuX3dzdHIJCQl0ZXN0OiB0ZXN0X2dldF93c3RyCitnZXRuc3RyCQkJCXRlc3Q6IGZpbHRlciBuY3Vyc2VzIHRlc3RfZ2V0c3RyCitnZXRwYXJ4CQkJCXRlc3Q6IG1vdmV3aW5kb3cKK2dldHBhcnkJCQkJdGVzdDogbW92ZXdpbmRvdworZ2V0c3RyCQkJCXRlc3Q6IHRlc3RfZ2V0c3RyCitnZXR3aW4JCQkJdGVzdDogbmN1cnNlcworaGFsZmRlbGF5CQkJdGVzdDogdmlldworaGFzX2NvbG9ycwkJCXRlc3Q6IGJhY2tncm91bmQgYnMgY2FyZGZpbGUgY2hnYXQgY29sb3Jfc2V0IGRlbW9fZm9ybXMgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlY2hvY2hhciBmaWx0ZXIgZmlyZXdvcmsgZ2RjIGhhbm9pIGluc193aWRlIGluc2VydHMga25pZ2h0IG5jdXJzZXMgbmV3ZGVtbyByYWluIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RjdXJzIHZpZXcgd29ybSB4bWFzCitoYXNfaWMJCQkJdGVzdDogbHJ0ZXN0CitoYXNfaWwJCQkJbGliOiBuY3Vyc2VzCitoYXNfa2V5CQkJCWxpYjogbmN1cnNlcworaGxpbmUJCQkJdGVzdDogZ2RjIG5jdXJzZXMKK2hsaW5lX3NldAkJCS0KK2lkY29rCQkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitpZGxvawkJCQl0ZXN0OiBuY3Vyc2VzIHRlc3Rfb3BhcXVlIHRlc3RzY2FudyB2aWV3CitpbW1lZG9rCQkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitpbl93Y2gJCQkJdGVzdDogaW5jaF93aWRlCitpbl93Y2huc3RyCQkJdGVzdDogaW5jaF93aWRlCitpbl93Y2hzdHIJCQl0ZXN0OiBpbmNoX3dpZGUKK2luY2gJCQkJdGVzdDogaW5jaHMKK2luY2huc3RyCQkJdGVzdDogaW5jaHMKK2luY2hzdHIJCQkJdGVzdDogaW5jaHMKK2luaXRfY29sb3IJCQl0ZXN0OiBuY3Vyc2VzCitpbml0X3BhaXIJCQl0ZXN0OiBiYWNrZ3JvdW5kIGJsdWUgYnMgY2FyZGZpbGUgY2hnYXQgY29sb3Jfc2V0IGRlbW9fZm9ybXMgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlY2hvY2hhciBmaWx0ZXIgZmlyZXdvcmsgZ2RjIGhhbm9pIGluc193aWRlIGluc2VydHMga25pZ2h0IG5jdXJzZXMgbmV3ZGVtbyByYWluIHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RhZGRjaCB0ZXN0Y3VycyB2aWV3IHdvcm0geG1hcworaW5pdHNjcgkJCQl0ZXN0OiBiYWNrZ3JvdW5kIGJsdWUgYnMgY2FyZGZpbGUgY2hnYXQgY29sb3Jfc2V0IGRlbW9fZGVma2V5IGRlbW9fZm9ybXMgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGVjaG9jaGFyIGZpcmV3b3JrIGZpcnN0bGFzdCBnZGMgaGFub2kgaGFzaHRlc3QgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga25pZ2h0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByYWluIHJlZHJhdyBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGFkZGNoIHRlc3RjdXJzIHRlc3RzY2FudyB2aWV3IHdvcm0geG1hcworaW5uc3RyCQkJCXRlc3Q6IHRlc3RfaW5zdHIKK2lubndzdHIJCQkJdGVzdDogdGVzdF9pbndzdHIKK2luc19ud3N0cgkJCXRlc3Q6IGluc193aWRlCitpbnNfd2NoCQkJCXRlc3Q6IGluc193aWRlCitpbnNfd3N0cgkJCXRlc3Q6IGluc193aWRlCitpbnNjaAkJCQl0ZXN0OiBpbnNfd2lkZSBpbnNlcnRzCitpbnNkZWxsbgkJCS0KK2luc2VydGxuCQkJLQoraW5zbnN0cgkJCQl0ZXN0OiBpbnNlcnRzCitpbnNzdHIJCQkJdGVzdDogaW5zZXJ0cworaW5zdHIJCQkJdGVzdDogdGVzdF9pbnN0cgoraW50cmZsdXNoCQkJdGVzdDogZGVtb19mb3JtcyBtb3Zld2luZG93CitpbndzdHIJCQkJdGVzdDogdGVzdF9pbndzdHIKK2lzX2NsZWFyZWQJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfaWRjb2sJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfaWRsb2sJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfaW1tZWRvawkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitpc19rZXlwYWQJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfbGVhdmVvawkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitpc19saW5ldG91Y2hlZAkJCWxpYjogZm9ybQoraXNfbm9kZWxheQkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitpc19ub3RpbWVvdXQJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfc2Nyb2xsb2sJCQl0ZXN0OiB0ZXN0X29wYXF1ZQoraXNfc3luY29rCQkJdGVzdDogdGVzdF9vcGFxdWUKK2lzX3Rlcm1fcmVzaXplZAkJCS0KK2lzX3dpbnRvdWNoZWQJCQlsaWI6IG5jdXJzZXMKK2lzZW5kd2luCQkJLQora2V5X2RlZmluZWQJCQl0ZXN0OiBkZW1vX2RlZmtleSBmb2xka2V5cwora2V5X25hbWUJCQl0ZXN0OiBrZXlfbmFtZXMgbmN1cnNlcwora2V5Ym91bmQJCQl0ZXN0OiBkZW1vX2FsdGtleXMgZGVtb19kZWZrZXkKK2tleW5hbWUJCQkJdGVzdDogZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGRlbW9fa2V5b2sgZGVtb19tZW51cyBlZGl0X2ZpZWxkIGZvbGRrZXlzIGtleW5hbWVzIG1vdmV3aW5kb3cgbmN1cnNlcyByZWRyYXcgdGVzdGN1cnMgdmlldyBwcm9nczogdGljCitrZXlvawkJCQl0ZXN0OiBkZW1vX2tleW9rIGZvbGRrZXlzCitrZXlwYWQJCQkJdGVzdDogYnMgY2FyZGZpbGUgY2hnYXQgZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGRlbW9fZm9ybXMgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGRpdHRvIGVkaXRfZmllbGQgZmlsdGVyIGZpcmV3b3JrIGZvbGRrZXlzIGhhc2h0ZXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtleV9uYW1lcyBrZXluYW1lcyBrbmlnaHQgbHJ0ZXN0IG1vdmV3aW5kb3cgbmN1cnNlcyByZWRyYXcgc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzIHRlc3RzY2FudyB2aWV3CitraWxsY2hhcgkJCWxpYjogbmN1cnNlcwora2lsbHdjaGFyCQkJLQorbGVhdmVvawkJCQl0ZXN0OiBoYW5vaSB0ZXN0X29wYXF1ZQorbG9uZ25hbWUJCQl0ZXN0OiB0ZXN0Y3VycyBwcm9nczogdHB1dAorbWNwcmludAkJCQktCittZXRhCQkJCXRlc3Q6IGtleV9uYW1lcyBrZXluYW1lcyBuY3Vyc2VzCittb3VzZV90cmFmbwkJCS0KK21vdXNlaW50ZXJ2YWwJCQktCittb3VzZW1hc2sJCQl0ZXN0OiBicyBkZW1vX2Zvcm1zIGRlbW9fbWVudXMga25pZ2h0IG1vdmV3aW5kb3cgbmN1cnNlcworbW92ZQkJCQl0ZXN0OiBibHVlIGJzIGNhcmRmaWxlIGNoZ2F0IGRlbW9fYWx0a2V5cyBkZW1vX21lbnVzIGVjaG9jaGFyIGZvbGRrZXlzIGdkYyBoYW5vaSBoYXNodGVzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbHJ0ZXN0IG1vdmV3aW5kb3cgbmN1cnNlcyBzYXZlc2NyZWVuIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0c2NhbncgdmlldyB4bWFzCittdmFkZF93Y2gJCQl0ZXN0OiBuY3Vyc2VzCittdmFkZF93Y2huc3RyCQkJLQorbXZhZGRfd2Noc3RyCQkJLQorbXZhZGRjaAkJCQl0ZXN0OiBicyBnZGMgaGFub2kgbHJ0ZXN0IG5jdXJzZXMgcmFpbiB0Y2xvY2sgeG1hcworbXZhZGRjaG5zdHIJCQl0ZXN0OiBnZGMKK212YWRkY2hzdHIJCQktCittdmFkZG5zdHIJCQktCittdmFkZG53c3RyCQkJLQorbXZhZGRzdHIJCQl0ZXN0OiBicyBkZW1vX2Zvcm1zIGdkYyBoYW5vaSBrbmlnaHQgbmN1cnNlcyByYWluIHRjbG9jayB0ZXN0Y3VycyB4bWFzCittdmFkZHdzdHIJCQktCittdmNoZ2F0CQkJCXRlc3Q6IGNoZ2F0CittdmN1cgkJCQl0ZXN0OiBkb3RzX212Y3VyIHJlZHJhdworbXZkZWxjaAkJCQktCittdmRlcndpbgkJCXRlc3Q6IG1vdmV3aW5kb3cKK212Z2V0X3djaAkJCS0KK212Z2V0X3dzdHIJCQl0ZXN0OiB0ZXN0X2dldF93c3RyCittdmdldGNoCQkJCS0KK212Z2V0bl93c3RyCQkJdGVzdDogdGVzdF9nZXRfd3N0cgorbXZnZXRuc3RyCQkJdGVzdDogdGVzdF9nZXRzdHIKK212Z2V0c3RyCQkJdGVzdDogdGVzdF9nZXRzdHIKK212aGxpbmUJCQkJdGVzdDogbmN1cnNlcworbXZobGluZV9zZXQJCQl0ZXN0OiBuY3Vyc2VzCittdmluX3djaAkJCXRlc3Q6IGluY2hfd2lkZQorbXZpbl93Y2huc3RyCQkJdGVzdDogaW5jaF93aWRlCittdmluX3djaHN0cgkJCXRlc3Q6IGluY2hfd2lkZQorbXZpbmNoCQkJCXRlc3Q6IGluY2hzCittdmluY2huc3RyCQkJdGVzdDogZ2RjIGluY2hzCittdmluY2hzdHIJCQl0ZXN0OiBpbmNocworbXZpbm5zdHIJCQl0ZXN0OiB0ZXN0X2luc3RyCittdmlubndzdHIJCQl0ZXN0OiB0ZXN0X2lud3N0cgorbXZpbnNfbndzdHIJCQl0ZXN0OiBpbnNfd2lkZQorbXZpbnNfd2NoCQkJdGVzdDogaW5zX3dpZGUKK212aW5zX3dzdHIJCQl0ZXN0OiBpbnNfd2lkZQorbXZpbnNjaAkJCQl0ZXN0OiBpbnNfd2lkZSBpbnNlcnRzCittdmluc25zdHIJCQl0ZXN0OiBpbnNlcnRzCittdmluc3N0cgkJCXRlc3Q6IGluc2VydHMKK212aW5zdHIJCQkJdGVzdDogdGVzdF9pbnN0cgorbXZpbndzdHIJCQl0ZXN0OiB0ZXN0X2lud3N0cgorbXZwcmludHcJCQl0ZXN0OiBicyBkZW1vX21lbnVzIGZpcmV3b3JrIGhhbm9pIG5jdXJzZXMgdGNsb2NrIHZpZXcKK212c2NhbncJCQkJLQorbXZ2bGluZQkJCQl0ZXN0OiBuY3Vyc2VzCittdnZsaW5lX3NldAkJCXRlc3Q6IG5jdXJzZXMKK212d2FkZF93Y2gJCQktCittdndhZGRfd2NobnN0cgkJCWxpYjogZm9ybQorbXZ3YWRkX3djaHN0cgkJCXRlc3Q6IGluY2hfd2lkZQorbXZ3YWRkY2gJCQl0ZXN0OiBtb3Zld2luZG93IG5ld2RlbW8gdGVzdGN1cnMgeG1hcworbXZ3YWRkY2huc3RyCQkJLQorbXZ3YWRkY2hzdHIJCQl0ZXN0OiBpbmNocworbXZ3YWRkbnN0cgkJCXRlc3Q6IG5ld2RlbW8gdGVzdGN1cnMKK212d2FkZG53c3RyCQkJLQorbXZ3YWRkc3RyCQkJdGVzdDogZGl0dG8gZmlyc3RsYXN0IGluc193aWRlIGluc2VydHMga25pZ2h0IG5jdXJzZXMgbmV3ZGVtbyB0ZXN0X2luc3RyIHRlc3RjdXJzIHhtYXMKK212d2FkZHdzdHIJCQl0ZXN0OiB0ZXN0X2lud3N0cgorbXZ3Y2hnYXQJCQl0ZXN0OiBjaGdhdAorbXZ3ZGVsY2gJCQl0ZXN0OiBuY3Vyc2VzCittdndnZXRfd2NoCQkJLQorbXZ3Z2V0X3dzdHIJCQl0ZXN0OiB0ZXN0X2dldF93c3RyCittdndnZXRjaAkJCXRlc3Q6IGluY2hfd2lkZSBpbmNocyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUKK212d2dldG5fd3N0cgkJCXRlc3Q6IHRlc3RfZ2V0X3dzdHIKK212d2dldG5zdHIJCQl0ZXN0OiB0ZXN0X2dldHN0cgorbXZ3Z2V0c3RyCQkJdGVzdDogdGVzdF9nZXRzdHIKK212d2hsaW5lCQkJdGVzdDogbW92ZXdpbmRvdworbXZ3aGxpbmVfc2V0CQkJLQorbXZ3aW4JCQkJdGVzdDogY2FyZGZpbGUgZGVtb19tZW51cyBtb3Zld2luZG93IHRlc3RjdXJzIHhtYXMKK212d2luX3djaAkJCXRlc3Q6IGluY2hfd2lkZQorbXZ3aW5fd2NobnN0cgkJCXRlc3Q6IGluY2hfd2lkZQorbXZ3aW5fd2Noc3RyCQkJdGVzdDogaW5jaF93aWRlCittdndpbmNoCQkJCXRlc3Q6IGluY2hzIG5ld2RlbW8gdGVzdGN1cnMKK212d2luY2huc3RyCQkJdGVzdDogaW5jaHMKK212d2luY2hzdHIJCQl0ZXN0OiBpbmNocworbXZ3aW5uc3RyCQkJdGVzdDogdGVzdF9pbnN0ciB0ZXN0Y3VycworbXZ3aW5ud3N0cgkJCXRlc3Q6IHRlc3RfaW53c3RyCittdndpbnNfbndzdHIJCQl0ZXN0OiBpbnNfd2lkZQorbXZ3aW5zX3djaAkJCXRlc3Q6IGluc193aWRlCittdndpbnNfd3N0cgkJCXRlc3Q6IGluc193aWRlCittdndpbnNjaAkJCXRlc3Q6IGluc193aWRlIGluc2VydHMKK212d2luc25zdHIJCQl0ZXN0OiBpbnNlcnRzCittdndpbnNzdHIJCQl0ZXN0OiBpbnNlcnRzIHRlc3RjdXJzCittdndpbnN0cgkJCXRlc3Q6IHRlc3RfaW5zdHIKK212d2lud3N0cgkJCXRlc3Q6IHRlc3RfaW53c3RyCittdndwcmludHcJCQl0ZXN0OiBjaGdhdCBkZW1vX3BhbmVscyBpbmNoX3dpZGUgaW5jaHMgbmN1cnNlcyB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3RjdXJzCittdndzY2FudwkJCXRlc3Q6IHRlc3RjdXJzCittdnd2bGluZQkJCXRlc3Q6IGluc193aWRlIGluc2VydHMgbW92ZXdpbmRvdworbXZ3dmxpbmVfc2V0CQkJLQorbmFwbXMJCQkJdGVzdDogZGVtb19wYW5lbHMgZGl0dG8gZG90cyBkb3RzX212Y3VyIGVjaG9jaGFyIGZpcmV3b3JrIGdkYyBoYW5vaSBscnRlc3QgbmN1cnNlcyByYWlscm9hZCByYWluIHRjbG9jayB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB2aWV3IHdvcm0geG1hcyBwcm9nczogdHNldAorbmV3cGFkCQkJCXRlc3Q6IGVkaXRfZmllbGQgbmN1cnNlcyB0ZXN0Y3VycworbmV3c2NyCQkJCWxpYjogbmN1cnNlcworbmV3dGVybQkJCQl0ZXN0OiBkZW1vX2FsdGtleXMgZGl0dG8gZG90c19tdmN1ciBmaWx0ZXIgZm9sZGtleXMgZ2RjIGtleV9uYW1lcyBrZXluYW1lcworbmV3d2luCQkJCXRlc3Q6IGNhcmRmaWxlIGNoZ2F0IGRlbW9fZGVma2V5IGRlbW9fZm9ybXMgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGRpdHRvIGVkaXRfZmllbGQgZmlyc3RsYXN0IGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByZWRyYXcgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzIHhtYXMKK25sCQkJCXRlc3Q6IGRlbW9fZm9ybXMgbmN1cnNlcyByYWluIHRlc3RjdXJzCitub2NicmVhawkJCXRlc3Q6IHRlc3RjdXJzCitub2RlbGF5CQkJCXRlc3Q6IGRpdHRvIGZpcmV3b3JrIGdkYyBscnRlc3QgbmN1cnNlcyBuZXdkZW1vIHJhaW4gdGNsb2NrIHRlc3Rfb3BhcXVlIHZpZXcgd29ybSB4bWFzCitub2VjaG8JCQkJdGVzdDogYmFja2dyb3VuZCBicyBjYXJkZmlsZSBjaGdhdCBjb2xvcl9zZXQgZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGRlbW9fZm9ybXMgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGRpdHRvIGZpcmV3b3JrIGZpcnN0bGFzdCBmb2xka2V5cyBnZGMgaGFub2kgaGFzaHRlc3QgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga25pZ2h0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgcmFpbiByZWRyYXcgc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzIHZpZXcgd29ybSB4bWFzCitub2ZpbHRlcgkJCS0KK25vbmwJCQkJdGVzdDogYnMgZGVtb19mb3JtcyBoYXNodGVzdCBtb3Zld2luZG93IG5jdXJzZXMgdmlldyB3b3JtIHhtYXMKK25vcWlmbHVzaAkJCS0KK25vcmF3CQkJCXRlc3Q6IGRlbW9fZm9ybXMgZGVtb19tZW51cyBuY3Vyc2VzIHRlc3RjdXJzCitub3RpbWVvdXQJCQl0ZXN0OiB0ZXN0X29wYXF1ZQorbnVtY29kZXMJCQl0ZXN0OiB0ZXN0X2FycmF5cyBwcm9nczogZHVtcF9lbnRyeQorbnVtZm5hbWVzCQkJdGVzdDogdGVzdF9hcnJheXMgcHJvZ3M6IGR1bXBfZW50cnkKK251bW5hbWVzCQkJdGVzdDogdGVzdF9hcnJheXMgcHJvZ3M6IGR1bXBfZW50cnkgaW5mb2NtcAorb3NwZWVkCQkJCXByb2dzOiB0c2V0CitvdmVybGF5CQkJCXRlc3Q6IG5jdXJzZXMgdGVzdGN1cnMgeG1hcworb3ZlcndyaXRlCQkJdGVzdDogbmN1cnNlcyBzYXZlc2NyZWVuCitwYWlyX2NvbnRlbnQJCQl0ZXN0OiBiYWNrZ3JvdW5kIGNvbG9yX3NldAorcGVjaG9fd2NoYXIJCQktCitwZWNob2NoYXIJCQktCitwbm91dHJlZnJlc2gJCQl0ZXN0OiBlZGl0X2ZpZWxkIG5jdXJzZXMKK3ByZWZyZXNoCQkJdGVzdDogdGVzdGN1cnMKK3ByaW50dwkJCQl0ZXN0OiBiYWNrZ3JvdW5kIGJsdWUgYnMgY29sb3Jfc2V0IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2tleW9rIGRlbW9fbWVudXMgZmlsdGVyIGZvbGRrZXlzIG5jdXJzZXMgc2F2ZXNjcmVlbiB0ZXN0Y3VycyB0ZXN0c2NhbncgdmlldworcHV0cAkJCQlwcm9nczogdHB1dAorcHV0d2luCQkJCXRlc3Q6IG5jdXJzZXMKK3FpZmx1c2gJCQkJLQorcmF3CQkJCXRlc3Q6IGRlbW9fZm9ybXMgbmN1cnNlcyByZWRyYXcgdGVzdGN1cnMKK3JlZHJhd3dpbgkJCXRlc3Q6IHJlZHJhdworcmVmcmVzaAkJCQl0ZXN0OiBibHVlIGJzIGRlbW9fZGVma2V5IGRlbW9fZm9ybXMgZGVtb19rZXlvayBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGVjaG9jaGFyIGZpbHRlciBmaXJzdGxhc3QgZ2RjIGhhbm9pIGhhc2h0ZXN0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdGN1cnMgdmlldyB4bWFzCityZXNldF9wcm9nX21vZGUJCQl0ZXN0OiBmaWx0ZXIgbmN1cnNlcworcmVzZXRfc2hlbGxfbW9kZQkJdGVzdDogYnMgZmlsdGVyIHNhdmVzY3JlZW4KK3Jlc2V0dHkJCQkJLQorcmVzaXplX3Rlcm0JCQl0ZXN0OiB2aWV3CityZXNpemV0ZXJtCQkJbGliOiBuY3Vyc2VzCityZXN0YXJ0dGVybQkJCS0KK3JpcG9mZmxpbmUJCQl0ZXN0OiBkZW1vX21lbnVzIG5jdXJzZXMKK3NhdmV0dHkJCQkJLQorc2NhbncJCQkJdGVzdDogdGVzdGN1cnMgdGVzdHNjYW53CitzY3JfZHVtcAkJCXRlc3Q6IHNhdmVzY3JlZW4KK3Njcl9pbml0CQkJdGVzdDogc2F2ZXNjcmVlbgorc2NyX3Jlc3RvcmUJCQl0ZXN0OiBzYXZlc2NyZWVuCitzY3Jfc2V0CQkJCXRlc3Q6IHNhdmVzY3JlZW4KK3NjcmwJCQkJdGVzdDogdmlldworc2Nyb2xsCQkJCXRlc3Q6IHRlc3RjdXJzCitzY3JvbGxvawkJCXRlc3Q6IGRlbW9fYWx0a2V5cyBkZW1vX2RlZmtleSBkZW1vX2tleW9rIGRlbW9fcGFuZWxzIGRpdHRvIGZvbGRrZXlzIGhhc2h0ZXN0IGtuaWdodCBuY3Vyc2VzIHJlZHJhdyB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB0ZXN0c2Nhbncgdmlldworc2V0X2N1cnRlcm0JCQlsaWI6IG5jdXJzZXMKK3NldF9lc2NkZWxheQkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitzZXRfdGFic2l6ZQkJCXRlc3Q6IHRlc3Rfb3BhcXVlCitzZXRfdGVybQkJCWxpYjogbmN1cnNlcworc2V0Y2NoYXIJCQl0ZXN0OiBkZW1vX3BhbmVscyBpbnNfd2lkZSBuY3Vyc2VzIHZpZXcKK3NldHNjcnJlZwkJCXRlc3Q6IHZpZXcKK3NldHVwdGVybQkJCXRlc3Q6IGRvdHMgcHJvZ3M6IGNsZWFyIHRwdXQgdHNldAorc2xrX2F0dHIJCQktCitzbGtfYXR0cl9vZmYJCQktCitzbGtfYXR0cl9vbgkJCS0KK3Nsa19hdHRyX3NldAkJCS0KK3Nsa19hdHRyb2ZmCQkJbGliOiBuY3Vyc2VzCitzbGtfYXR0cm9uCQkJbGliOiBuY3Vyc2VzCitzbGtfYXR0cnNldAkJCS0KK3Nsa19jbGVhcgkJCXRlc3Q6IG5jdXJzZXMKK3Nsa19jb2xvcgkJCXRlc3Q6IG5jdXJzZXMKK3Nsa19pbml0CQkJdGVzdDogbmN1cnNlcworc2xrX2xhYmVsCQkJdGVzdDogbmN1cnNlcworc2xrX25vdXRyZWZyZXNoCQkJLQorc2xrX3JlZnJlc2gJCQl0ZXN0OiBuY3Vyc2VzCitzbGtfcmVzdG9yZQkJCXRlc3Q6IG5jdXJzZXMKK3Nsa19zZXQJCQkJdGVzdDogbmN1cnNlcworc2xrX3RvdWNoCQkJbGliOiBuY3Vyc2VzCitzbGtfd3NldAkJCXRlc3Q6IG5jdXJzZXMKK3N0YW5kZW5kCQkJdGVzdDogYmx1ZSBnZGMgbmN1cnNlcworc3RhbmRvdXQJCQl0ZXN0OiBibHVlIG5jdXJzZXMKK3N0YXJ0X2NvbG9yCQkJdGVzdDogYmFja2dyb3VuZCBibHVlIGJzIGNhcmRmaWxlIGNoZ2F0IGNvbG9yX3NldCBkZW1vX2Zvcm1zIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZWNob2NoYXIgZmlsdGVyIGZpcmV3b3JrIGdkYyBoYW5vaSBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBuY3Vyc2VzIG5ld2RlbW8gcmFpbiBzYXZlc2NyZWVuIHRjbG9jayB0ZXN0YWRkY2ggdGVzdGN1cnMgdmlldyB3b3JtIHhtYXMKK3N0ZHNjcgkJCQl0ZXN0OiBicyBjaGdhdCBkZW1vX2FsdGtleXMgZGVtb19mb3JtcyBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGRpdHRvIGZpbHRlciBmaXJld29yayBmb2xka2V5cyBnZGMgaGFub2kgaGFzaHRlc3QgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga2V5X25hbWVzIGtleW5hbWVzIGtuaWdodCBscnRlc3QgbW92ZXdpbmRvdyBuY3Vyc2VzIHJhaW4gcmVkcmF3IHNhdmVzY3JlZW4gdGNsb2NrIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB0ZXN0c2NhbncgdmlldyB3b3JtIHhtYXMKK3N0cmNvZGVzCQkJdGVzdDogdGVzdF9hcnJheXMgcHJvZ3M6IGR1bXBfZW50cnkKK3N0cmZuYW1lcwkJCXRlc3Q6IHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5CitzdHJuYW1lcwkJCXRlc3Q6IGZvbGRrZXlzIHRlc3RfYXJyYXlzIHByb2dzOiBkdW1wX2VudHJ5IGluZm9jbXAgdGljCitzdWJwYWQJCQkJdGVzdDogdGVzdGN1cnMKK3N1YndpbgkJCQl0ZXN0OiBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyB0ZXN0Y3Vycworc3luY29rCQkJCXRlc3Q6IHRlc3Rfb3BhcXVlCit0ZXJtX2F0dHJzCQkJdGVzdDogbmN1cnNlcwordGVybWF0dHJzCQkJdGVzdDogbmN1cnNlcyB0ZXN0Y3VycwordGVybW5hbWUJCQl0ZXN0OiB0ZXN0Y3VycwordGdldGVudAkJCQl0ZXN0OiBkZW1vX3Rlcm1jYXAgcmFpbHJvYWQKK3RnZXRmbGFnCQkJdGVzdDogZGVtb190ZXJtY2FwCit0Z2V0bnVtCQkJCXRlc3Q6IGRlbW9fdGVybWNhcCByYWlscm9hZAordGdldHN0cgkJCQl0ZXN0OiBkZW1vX3Rlcm1jYXAgcmFpbHJvYWQKK3Rnb3RvCQkJCXRlc3Q6IHJhaWxyb2FkCit0aWdldGZsYWcJCQlwcm9nczogdHB1dAordGlnZXRudW0JCQl0ZXN0OiBuY3Vyc2VzIHByb2dzOiB0cHV0Cit0aWdldHN0cgkJCXRlc3Q6IGJsdWUgZGVtb19kZWZrZXkgZm9sZGtleXMgdGVzdGN1cnMgcHJvZ3M6IHRwdXQKK3RpbWVvdXQJCQkJdGVzdDogcmFpbiBzYXZlc2NyZWVuCit0b3VjaGxpbmUJCQl0ZXN0OiBjaGdhdAordG91Y2h3aW4JCQl0ZXN0OiBjaGdhdCBkZW1vX21lbnVzIGVkaXRfZmllbGQgZmlsdGVyIGZpcnN0bGFzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBtb3Zld2luZG93IG5jdXJzZXMgcmVkcmF3IHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB4bWFzCit0cGFybQkJCQl0ZXN0OiBkb3RzIGRvdHNfbXZjdXIgcHJvZ3M6IHRpYyB0cHV0Cit0cHV0cwkJCQl0ZXN0OiBkb3RzIGRvdHNfbXZjdXIgcmFpbHJvYWQgcHJvZ3M6IGNsZWFyIHRzZXQKK3RyYWNlCQkJCXRlc3Q6IGRlbW9fbWVudXMgaGFub2kgaGFzaHRlc3QgbHJ0ZXN0IG5jdXJzZXMgdGVzdGN1cnMgdmlldyB3b3JtCit0dHl0eXBlCQkJCWxpYjogbmN1cnNlcwordHlwZWFoZWFkCQkJdGVzdDogdGVzdGN1cnMKK3VuY3RybAkJCQl0ZXN0OiBuY3Vyc2VzIHJlZHJhdyB0ZXN0Y3VycwordW5nZXRfd2NoCQkJLQordW5nZXRjaAkJCQl0ZXN0OiBicyBrbmlnaHQKK3VuZ2V0bW91c2UJCQktCit1bnRvdWNod2luCQkJbGliOiBmb3JtCit1c2VfZGVmYXVsdF9jb2xvcnMJCXRlc3Q6IGZpbHRlciBmaXJld29yayBnZGMgaGFub2kga25pZ2h0IG5jdXJzZXMgcmFpbiB0Y2xvY2sgd29ybSB4bWFzCit1c2VfZW52CQkJCXByb2dzOiB0cHV0Cit1c2VfZXh0ZW5kZWRfbmFtZXMJCXByb2dzOiBpbmZvY21wIHRpYwordXNlX2xlZ2FjeV9jb2RpbmcJCS0KK3VzZV9zY3JlZW4JCQl0ZXN0OiBkaXR0bwordXNlX3dpbmRvdwkJCXRlc3Q6IHJhaW4gd29ybQordmlkX2F0dHIJCQktCit2aWRfcHV0cwkJCS0KK3ZpZGF0dHIJCQkJbGliOiBuY3Vyc2VzCit2aWRwdXRzCQkJCWxpYjogbmN1cnNlcwordmxpbmUJCQkJdGVzdDogZ2RjIG5jdXJzZXMKK3ZsaW5lX3NldAkJCS0KK3Z3X3ByaW50dwkJCS0KK3Z3X3NjYW53CQkJLQordndwcmludHcJCQl0ZXN0OiBtb3Zld2luZG93Cit2d3NjYW53CQkJCWxpYjogbmN1cnNlcword2FkZF93Y2gJCQl0ZXN0OiBpbmNoX3dpZGUKK3dhZGRfd2NobnN0cgkJCWxpYjogZm9ybQord2FkZF93Y2hzdHIJCQktCit3YWRkY2gJCQkJdGVzdDogZGVtb19mb3JtcyBkZW1vX3BhbmVscyBkaXR0byBmaXJzdGxhc3QgaW5jaF93aWRlIGluY2hzIGtuaWdodCBuY3Vyc2VzIHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZSB3b3JtCit3YWRkY2huc3RyCQkJbGliOiBuY3Vyc2VzCit3YWRkY2hzdHIJCQktCit3YWRkbnN0cgkJCWxpYjogbWVudQord2FkZG53c3RyCQkJdGVzdDogbmN1cnNlcword2FkZHN0cgkJCQl0ZXN0OiBjaGdhdCBkZW1vX2Zvcm1zIGRlbW9fcGFuZWxzIGVkaXRfZmllbGQgZmlyc3RsYXN0IGluc193aWRlIGtuaWdodCBuY3Vyc2VzIHJlZHJhdyB0ZXN0Y3Vycword2FkZHdzdHIJCQl0ZXN0OiBpbnNfd2lkZSB0ZXN0X2dldF93c3RyCit3YXR0cl9nZXQJCQktCit3YXR0cl9vZmYJCQlsaWI6IG5jdXJzZXMKK3dhdHRyX29uCQkJbGliOiBuY3Vyc2VzCit3YXR0cl9zZXQJCQktCit3YXR0cm9mZgkJCXRlc3Q6IGRlbW9fZm9ybXMgbmN1cnNlcyB0ZXN0Y3VycyB4bWFzCit3YXR0cm9uCQkJCXRlc3Q6IHRlc3RjdXJzIHhtYXMKK3dhdHRyc2V0CQkJdGVzdDogZGVtb19mb3JtcyBuY3Vyc2VzIG5ld2RlbW8gdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0Y3VycyB4bWFzCit3YmtnZAkJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX2Zvcm1zIGRlbW9fbWVudXMgbmN1cnNlcyBuZXdkZW1vIHRlc3RjdXJzCit3YmtnZHNldAkJCXRlc3Q6IGRlbW9fcGFuZWxzIGluc193aWRlIGluc2VydHMgbmN1cnNlcword2JrZ3JuZAkJCQlsaWI6IG5jdXJzZXMKK3dia2dybmRzZXQJCQlsaWI6IG5jdXJzZXMKK3dib3JkZXIJCQkJbGliOiBuY3Vyc2VzCit3Ym9yZGVyX3NldAkJCWxpYjogbmN1cnNlcword2NoZ2F0CQkJCXRlc3Q6IGNoZ2F0IHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdmlldword2NsZWFyCQkJCXRlc3Q6IG5jdXJzZXMgdGVzdF9vcGFxdWUgdGVzdGN1cnMKK3djbHJ0b2JvdAkJCXRlc3Q6IGZpcnN0bGFzdCBpbmNoX3dpZGUgaW5jaHMgbmN1cnNlcyB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3RjdXJzCit3Y2xydG9lb2wJCQl0ZXN0OiBjaGdhdCBkZW1vX2RlZmtleSBkZW1vX2tleW9rIGRlbW9fcGFuZWxzIGZpcnN0bGFzdCBpbmNoX3dpZGUgaW5jaHMgaW5zX3dpZGUgaW5zZXJ0cyBrbmlnaHQgbmN1cnNlcyB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3RjdXJzCit3Y29sb3Jfc2V0CQkJbGliOiBuY3Vyc2VzCit3Y3Vyc3luY3VwCQkJbGliOiBmb3JtCit3ZGVsY2gJCQkJdGVzdDogbmN1cnNlcyB0ZXN0Y3Vycword2RlbGV0ZWxuCQkJdGVzdDogdGVzdGN1cnMKK3dlY2hvX3djaGFyCQkJbGliOiBuY3Vyc2VzCit3ZWNob2NoYXIJCQlsaWI6IG5jdXJzZXMKK3dlbmNsb3NlCQkJbGliOiBmb3JtCit3ZXJhc2UJCQkJdGVzdDogY2FyZGZpbGUgZGVtb19mb3JtcyBkZW1vX21lbnVzIGRlbW9fcGFuZWxzIGVkaXRfZmllbGQgZmlyc3RsYXN0IGtuaWdodCBuY3Vyc2VzIG5ld2RlbW8gdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X29wYXF1ZSB0ZXN0Y3VycyB4bWFzCit3Z2V0X3djaAkJCXRlc3Q6IGluc193aWRlIG5jdXJzZXMKK3dnZXRfd3N0cgkJCXRlc3Q6IHRlc3RfZ2V0X3dzdHIKK3dnZXRia2dybmQJCQlsaWI6IG5jdXJzZXMKK3dnZXRjaAkJCQl0ZXN0OiBjYXJkZmlsZSBjaGdhdCBkZW1vX2RlZmtleSBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZGl0dG8gZWRpdF9maWVsZCBnZGMgaW5zZXJ0cyBrbmlnaHQgbW92ZXdpbmRvdyBuY3Vyc2VzIG5ld2RlbW8gcmFpbiByZWRyYXcgdGVzdF9vcGFxdWUgdGVzdGN1cnMgd29ybQord2dldG5fd3N0cgkJCXRlc3Q6IG5jdXJzZXMgdGVzdF9nZXRfd3N0cgord2dldG5zdHIJCQl0ZXN0OiBuY3Vyc2VzIHRlc3RfZ2V0c3RyCit3Z2V0cGFyZW50CQkJdGVzdDogdGVzdF9vcGFxdWUKK3dnZXRzY3JyZWcJCQl0ZXN0OiB0ZXN0X29wYXF1ZQord2dldHN0cgkJCQl0ZXN0OiB0ZXN0X2dldHN0cgord2hsaW5lCQkJCXRlc3Q6IHRlc3RjdXJzCit3aGxpbmVfc2V0CQkJbGliOiBuY3Vyc2VzCit3aW5fd2NoCQkJCXRlc3Q6IGluY2hfd2lkZQord2luX3djaG5zdHIJCQl0ZXN0OiBpbmNoX3dpZGUKK3dpbl93Y2hzdHIJCQl0ZXN0OiBpbmNoX3dpZGUKK3dpbmNoCQkJCXRlc3Q6IGluY2hzIGtuaWdodCB0ZXN0Y3Vycword2luY2huc3RyCQkJdGVzdDogaW5jaHMKK3dpbmNoc3RyCQkJdGVzdDogaW5jaHMKK3dpbm5zdHIJCQkJdGVzdDogZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGZvbGRrZXlzIHRlc3RfaW5zdHIKK3dpbm53c3RyCQkJdGVzdDogdGVzdF9pbndzdHIKK3dpbnNfbndzdHIJCQl0ZXN0OiBpbnNfd2lkZQord2luc193Y2gJCQl0ZXN0OiBpbnNfd2lkZQord2luc193c3RyCQkJdGVzdDogaW5zX3dpZGUKK3dpbnNjaAkJCQl0ZXN0OiBpbnNfd2lkZSBpbnNlcnRzIHRlc3RjdXJzCit3aW5zZGVsbG4JCQlsaWI6IG5jdXJzZXMKK3dpbnNlcnRsbgkJCXRlc3Q6IHRlc3RjdXJzCit3aW5zbnN0cgkJCXRlc3Q6IGluc2VydHMKK3dpbnNzdHIJCQkJdGVzdDogaW5zZXJ0cword2luc3RyCQkJCXRlc3Q6IHRlc3RfaW5zdHIKK3dpbndzdHIJCQkJdGVzdDogdGVzdF9pbndzdHIKK3dtb3VzZV90cmFmbwkJCWxpYjogZm9ybQord21vdmUJCQkJdGVzdDogY2hnYXQgZGVtb19hbHRrZXlzIGRlbW9fZGVma2V5IGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBmaXJzdGxhc3QgZm9sZGtleXMgaW5jaF93aWRlIGluY2hzIGluc193aWRlIGluc2VydHMga25pZ2h0IG1vdmV3aW5kb3cgbmN1cnNlcyBuZXdkZW1vIHJlZHJhdyB0ZXN0X2dldF93c3RyIHRlc3RfZ2V0c3RyIHRlc3RfaW5zdHIgdGVzdF9pbndzdHIgdGVzdF9vcGFxdWUgdGVzdGN1cnMgd29ybQord25vdXRyZWZyZXNoCQkJdGVzdDogZGVtb19tZW51cyBkaXR0byBlZGl0X2ZpZWxkIGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBtb3Zld2luZG93IG5jdXJzZXMgcmVkcmF3IHRlc3RfZ2V0X3dzdHIgdGVzdF9nZXRzdHIgdGVzdF9pbnN0ciB0ZXN0X2lud3N0ciB0ZXN0X29wYXF1ZQord3ByaW50dwkJCQl0ZXN0OiBjaGdhdCBkZW1vX2RlZmtleSBkZW1vX2Zvcm1zIGRlbW9fa2V5b2sgZGVtb19tZW51cyBkZW1vX3BhbmVscyBlZGl0X2ZpZWxkIGluY2hfd2lkZSBpbmNocyBpbnNfd2lkZSBpbnNlcnRzIGtuaWdodCBtb3Zld2luZG93IG5jdXJzZXMgdGVzdF9nZXRfd3N0ciB0ZXN0X2dldHN0ciB0ZXN0X2luc3RyIHRlc3RfaW53c3RyIHRlc3Rfb3BhcXVlIHRlc3RjdXJzCit3cmVkcmF3bG4JCQl0ZXN0OiByZWRyYXcKK3dyZWZyZXNoCQkJdGVzdDogY2hnYXQgZGVtb19mb3JtcyBkZW1vX2tleW9rIGRlbW9fbWVudXMgZGVtb19wYW5lbHMgZWRpdF9maWVsZCBmaXJzdGxhc3Qga25pZ2h0IGxydGVzdCBtb3Zld2luZG93IG5jdXJzZXMgbmV3ZGVtbyByZWRyYXcgc2F2ZXNjcmVlbiB0Y2xvY2sgdGVzdGN1cnMgdmlldyB3b3JtIHhtYXMKK3dyZXNpemUJCQkJdGVzdDogY2FyZGZpbGUgbmN1cnNlcword3NjYW53CQkJCXRlc3Q6IHRlc3RjdXJzCit3c2NybAkJCQl0ZXN0OiBuY3Vyc2VzIHRlc3RjdXJzCit3c2V0c2NycmVnCQkJdGVzdDogbmN1cnNlcyB0ZXN0Y3Vycword3N0YW5kZW5kCQkJdGVzdDogdGVzdF9vcGFxdWUgeG1hcword3N0YW5kb3V0CQkJdGVzdDogdGVzdF9vcGFxdWUgeG1hcword3N5bmNkb3duCQkJdGVzdDogbW92ZXdpbmRvdword3N5bmN1cAkJCQlsaWI6IGZvcm0KK3d0aW1lb3V0CQkJdGVzdDogbmN1cnNlcword3RvdWNobG4JCQlsaWI6IG5jdXJzZXMKK3d1bmN0cmwJCQkJbGliOiBuY3Vyc2VzCit3dmxpbmUJCQkJdGVzdDogdGVzdGN1cnMKK3d2bGluZV9zZXQJCQlsaWI6IG5jdXJzZXMKKworbGlicGFuZWw6CistLS0tLS0tLQorYm90dG9tX3BhbmVsCQkJdGVzdDogZGVtb19wYW5lbHMgbmN1cnNlcworZGVsX3BhbmVsCQkJdGVzdDogZGVtb19wYW5lbHMgbmN1cnNlcworaGlkZV9wYW5lbAkJCXRlc3Q6IGRlbW9fcGFuZWxzIG5jdXJzZXMKK21vdmVfcGFuZWwJCQl0ZXN0OiBkZW1vX3BhbmVscyBuY3Vyc2VzCituZXdfcGFuZWwJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX3BhbmVscyBuY3Vyc2VzCitwYW5lbF9hYm92ZQkJCXRlc3Q6IGRlbW9fcGFuZWxzCitwYW5lbF9iZWxvdwkJCXRlc3Q6IGRlbW9fcGFuZWxzCitwYW5lbF9oaWRkZW4JCQl0ZXN0OiBkZW1vX3BhbmVscworcGFuZWxfdXNlcnB0cgkJCXRlc3Q6IGRlbW9fcGFuZWxzIG5jdXJzZXMKK3BhbmVsX3dpbmRvdwkJCXRlc3Q6IGNhcmRmaWxlIGRlbW9fcGFuZWxzIG5jdXJzZXMKK3JlcGxhY2VfcGFuZWwJCQl0ZXN0OiBkZW1vX3BhbmVscworc2V0X3BhbmVsX3VzZXJwdHIJCXRlc3Q6IGRlbW9fcGFuZWxzIG5jdXJzZXMKK3Nob3dfcGFuZWwJCQl0ZXN0OiBkZW1vX3BhbmVscyBuY3Vyc2VzCit0b3BfcGFuZWwJCQl0ZXN0OiBjYXJkZmlsZSBkZW1vX3BhbmVscyBuY3Vyc2VzCit1cGRhdGVfcGFuZWxzCQkJdGVzdDogY2FyZGZpbGUgZGVtb19wYW5lbHMgbmN1cnNlcwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9hY2xvY2FsLm00IGIvbmN1cnNlcy01LjcvdGVzdC9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzUwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2FjbG9jYWwubTQKQEAgLTAsMCArMSwyMTQxIEBACitkbmwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKK2RubCBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorZG5sICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCitkbmwgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKK2RubCBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorZG5sIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCitkbmwgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCitkbmwgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCitkbmwgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKK2RubCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorZG5sIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCitkbmwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKK2RubCBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorZG5sIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorZG5sIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCitkbmwgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKK2RubCBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwKK2RubCAkSWQ6IGFjbG9jYWwubTQsdiAxLjIyIDIwMDgvMDIvMDkgMTg6MjI6MTcgdG9tIEV4cCAkCitkbmwKK2RubCBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKK2RubAorZG5sIE1hY3JvcyB1c2VkIGluIE5DVVJTRVMgdGVzdCBwcm9ncmFtcyBhdXRvLWNvbmZpZ3VyYXRpb24gc2NyaXB0LgorZG5sCitkbmwgVGhlc2UgbWFjcm9zIGFyZSBtYWludGFpbmVkIHNlcGFyYXRlbHkgZnJvbSBOQ1VSU0VTLiAgVGhlIGNvcHlyaWdodCBvbgorZG5sIHRoaXMgZmlsZSBhcHBsaWVzIHRvIHRoZSBhZ2dyZWdhdGlvbiBvZiBtYWNyb3MgYW5kIGRvZXMgbm90IGFmZmVjdCB1c2Ugb2YKK2RubCB0aGVzZSBtYWNyb3MgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorZG5sCitkbmwgU2VlIGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9hdXRvY29uZi8gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCitkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfQ0ZMQUdTIHZlcnNpb246IDcgdXBkYXRlZDogMjAwNC8wNC8yNSAxNzo0ODozMAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDb3B5IG5vbi1wcmVwcm9jZXNzb3IgZmxhZ3MgdG8gJENGTEFHUywgcHJlcHJvY2Vzc29yIGZsYWdzIHRvICRDUFBGTEFHUworZG5sIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlmIGdpdmVuIG1ha2VzIHRoaXMgbWFjcm8gdmVyYm9zZS4KK2RubAorZG5sIFB1dCBhbnkgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zIHRoYXQgdXNlIHF1b3RlZCBzdHJpbmdzIGluICRFWFRSQV9DUFBGTEFHUywKK2RubCB0byBzaW1wbGlmeSB1c2Ugb2YgJENQUEZMQUdTIGluIGNvbXBpbGVyIGNoZWNrcywgZXRjLiwgdGhhdCBhcmUgZWFzaWx5CitkbmwgY29uZnVzZWQgYnkgdGhlIHF1b3RlcyAod2hpY2ggcmVxdWlyZSBiYWNrc2xhc2hlcyB0byBrZWVwIHRoZW0gdXNhYmxlKS4KK0FDX0RFRlVOKFtDRl9BRERfQ0ZMQUdTXSwKK1sKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gJDEKK2RvCitjYXNlICRjZl9maXhfY3BwZmxhZ3MgaW4KK25vKQorCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4gIyh2aQorCS11bmRlZnwtbm9zdGRpbmMqfC1JKnwtRCp8LVUqfC1FfC1QfC1DKSAjKHZpCisJCWNhc2UgJGNmX2FkZF9jZmxhZ3MgaW4KKwkJLUQqKQorCQkJY2ZfdHN0X2NmbGFncz1gZWNobyAke2NmX2FkZF9jZmxhZ3N9IHxzZWQgLWUgJ3MvXi1EW1tePV1dKj0nXCcnXCJbW14iXV0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bW14iXV0qIidcJycvLydgCisKKwl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiBjZl9maXhfY3BwZmxhZ3M9bm8KKwk7OworZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2NmbGFncyIgOyB0aGVuCisJaWZlbHNlKCQyLCwsW0NGX1ZFUkJPU0UoYWRkIHRvIFwkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzKV0pCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisJaWZlbHNlKCQyLCwsW0NGX1ZFUkJPU0UoYWRkIHRvIFwkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyldKQorCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCWlmZWxzZSgkMiwsLFtDRl9WRVJCT1NFKGFkZCB0byBcJEVYVFJBX0NQUEZMQUdTICRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MpXSkKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCitBQ19TVUJTVChFWFRSQV9DUFBGTEFHUykKKworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfSU5DRElSIHZlcnNpb246IDkgdXBkYXRlZDogMjAwOC8wMi8wOSAxMzoxNTozNAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBBZGQgYW4gaW5jbHVkZS1kaXJlY3RvcnkgdG8gJENQUEZMQUdTLiAgRG9uJ3QgYWRkIC91c3IvaW5jbHVkZSwgc2luY2UgaXQncworZG5sIHJlZHVuZGFudC4gIFdlIGRvbid0IG5vcm1hbGx5IG5lZWQgdG8gYWRkIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGZvciBnY2MsCitkbmwgYnV0IG9sZCB2ZXJzaW9ucyAoYW5kIHNvbWUgbWlzaW5zdGFsbGVkIG9uZXMpIG5lZWQgdGhhdC4gIFRvIG1ha2UgdGhpbmdzCitkbmwgd29yc2UsIGdjYyAzLnggbWF5IGdpdmUgZXJyb3IgbWVzc2FnZXMgaWYgLUkvdXNyL2xvY2FsL2luY2x1ZGUgaXMgYWRkZWQgdG8KK2RubCB0aGUgaW5jbHVkZS1wYXRoKS4KK0FDX0RFRlVOKFtDRl9BRERfSU5DRElSXSwKK1sKK2lmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJDEKKyAgZG8KKwl3aGlsZSB0ZXN0ICRjZl9hZGRfaW5jZGlyICE9IC91c3IvaW5jbHVkZQorCWRvCisJICBpZiB0ZXN0IC1kICRjZl9hZGRfaW5jZGlyCisJICB0aGVuCisJCWNmX2hhdmVfaW5jZGlyPW5vCisJCWlmIHRlc3QgLW4gIiRDRkxBR1MkQ1BQRkxBR1MiIDsgdGhlbgorCQkgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKwkJICBmb3IgY2ZfdGVzdF9pbmNkaXIgaW4gJENGTEFHUyAkQ1BQRkxBR1MgOyBkbworCQkJaWYgdGVzdCAiLiRjZl90ZXN0X2luY2RpciIgPSAiLi1JJGNmX2FkZF9pbmNkaXIiIDsgdGhlbgorCQkJICBjZl9oYXZlX2luY2Rpcj15ZXM7IGJyZWFrCisJCQlmaQorCQkgIGRvbmUKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJGNmX2FkZF9pbmNkaXIiID0gL3Vzci9sb2NhbC9pbmNsdWRlIDsgdGhlbgorCQkJaWYgdGVzdCAiJEdDQyIgPSB5ZXMKKwkJCXRoZW4KKwkJCSAgY2Zfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJCSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRjZl9hZGRfaW5jZGlyIgorCQkJICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGlvLmg+XSwKKwkJCQkgIFtwcmludGYoIkhlbGxvIildLAorCQkJCSAgW10sCisJCQkJICBbY2ZfaGF2ZV9pbmNkaXI9eWVzXSkKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgQ0ZfVkVSQk9TRShhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoKQorCQkgIGlmZWxzZSgkMiwsQ1BQRkxBR1MsJDIpPSItSSRjZl9hZGRfaW5jZGlyICRpZmVsc2UoJDIsLENQUEZMQUdTLFskXSQyKSIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfTElCRElSIHZlcnNpb246IDYgdXBkYXRlZDogMjAwOC8wMi8wOSAxMzoxNTozNAorZG5sIC0tLS0tLS0tLS0tLS0KK2RubAlBZGRzIHRvIHRoZSBsaWJyYXJ5LXBhdGgKK2RubAorZG5sCVNvbWUgbWFjaGluZXMgaGF2ZSB0cm91YmxlIHdpdGggbXVsdGlwbGUgLUwgb3B0aW9ucy4KK2RubAorZG5sICQxIGlzIHRoZSAobGlzdCBvZikgZGlyZWN0b3J5KHMpIHRvIGFkZAorZG5sICQyIGlzIHRoZSBvcHRpb25hbCBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byB1cGRhdGUgKGRlZmF1bHQgTERGTEFHUykKK2RubAorQUNfREVGVU4oW0NGX0FERF9MSUJESVJdLAorWworaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAkMQorICBkbworICAgIGlmIHRlc3QgJGNmX2FkZF9saWJkaXIgPSAvdXNyL2xpYiA7IHRoZW4KKyAgICAgIDoKKyAgICBlbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKyAgICB0aGVuCisgICAgICBjZl9oYXZlX2xpYmRpcj1ubworICAgICAgaWYgdGVzdCAtbiAiJExERkxBR1MkTElCUyIgOyB0aGVuCisgICAgICAgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKyAgICAgICAgZm9yIGNmX3Rlc3RfbGliZGlyIGluICRMREZMQUdTICRMSUJTIDsgZG8KKyAgICAgICAgICBpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisgICAgICAgICAgICBjZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKyAgICAgICAgQ0ZfVkVSQk9TRShhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoKQorICAgICAgICBpZmVsc2UoJDIsLExERkxBR1MsJDIpPSItTCRjZl9hZGRfbGliZGlyICRpZmVsc2UoJDIsLExERkxBR1MsWyRdJDIpIgorICAgICAgZmkKKyAgICBmaQorICBkb25lCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BRERfU1VCRElSX1BBVEggdmVyc2lvbjogMiB1cGRhdGVkOiAyMDA3LzA3LzI5IDEwOjEyOjU5CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQXBwZW5kIHRvIGEgc2VhcmNoLWxpc3QgZm9yIGEgbm9uc3RhbmRhcmQgaGVhZGVyL2xpYi1maWxlCitkbmwJJDEgPSB0aGUgdmFyaWFibGUgdG8gcmV0dXJuIGFzIHJlc3VsdAorZG5sCSQyID0gdGhlIHBhY2thZ2UgbmFtZQorZG5sCSQzID0gdGhlIHN1YmRpcmVjdG9yeSwgZS5nLiwgYmluLCBpbmNsdWRlIG9yIGxpYgorZG5sICQ0ID0gdGhlIGRpcmVjdG9yeSB1bmRlciB3aGljaCB3ZSB3aWxsIHRlc3QgZm9yIHN1YmRpcmVjdG9yaWVzCitkbmwgJDUgPSBhIGRpcmVjdG9yeSB0aGF0IHdlIGRvIG5vdCB3YW50ICQ0IHRvIG1hdGNoCitBQ19ERUZVTihbQ0ZfQUREX1NVQkRJUl9QQVRIXSwKK1sKK3Rlc3QgIiQ0IiAhPSAiJDUiICYmIFwKK3Rlc3QgLWQgIiQ0IiAmJiBcCitpZmVsc2UoWyQ1XSxOT05FLCxbKHRlc3QgJDUgPSBOT05FIHx8IHRlc3QgLWQgJDUpICYmXSkgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yICQzLWRpcmVjdG9yaWVzIHVuZGVyICQ0IgorCXRlc3QgLWQgJDQvJDMgJiYgICAgICAgICAgJDE9IlskXSQxICQ0LyQzIgorCXRlc3QgLWQgJDQvJDMvJDIgJiYgICAgICAgJDE9IlskXSQxICQ0LyQzLyQyIgorCXRlc3QgLWQgJDQvJDMvJDIvJDMgJiYgICAgJDE9IlskXSQxICQ0LyQzLyQyLyQzIgorCXRlc3QgLWQgJDQvJDIvJDMgJiYgICAgICAgJDE9IlskXSQxICQ0LyQyLyQzIgorCXRlc3QgLWQgJDQvJDIvJDMvJDIgJiYgICAgJDE9IlskXSQxICQ0LyQyLyQzLyQyIgorfQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BTlNJX0NDX0NIRUNLIHZlcnNpb246IDkgdXBkYXRlZDogMjAwMS8xMi8zMCAxNzo1MzozNAorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIGlzIGFkYXB0ZWQgZnJvbSB0aGUgbWFjcm9zICdmcF9QUk9HX0NDX1NUREMnIGFuZCAnZnBfQ19QUk9UT1RZUEVTJworZG5sIGluIHRoZSBzaGFydXRpbHMgNC4yIGRpc3RyaWJ1dGlvbi4KK0FDX0RFRlVOKFtDRl9BTlNJX0NDX0NIRUNLXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGZvciAke0NDLWNjfSBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQywgY2ZfY3ZfYW5zaV9jYyxbCitjZl9jdl9hbnNpX2NjPW5vCitjZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKK2NmX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyMgRG9uJ3QgdHJ5IGdjYyAtYW5zaTsgdGhhdCB0dXJucyBvZmYgdXNlZnVsIGV4dGVuc2lvbnMgYW5kCisjIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KKyMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKKyMgVWx0cml4IGFuZCBPU0YvMQktc3RkMQorIyBIUC1VWAkJCS1BYSAtRF9IUFVYX1NPVVJDRQorIyBTVlI0CQkJLVhjCisjIFVuaXhXYXJlIDEuMgkJKGNhbm5vdCB1c2UgLVhjLCBzaW5jZSBBTlNJL1BPU0lYIGNsYXNoZXMpCitmb3IgY2ZfYXJnIGluICItRENDX0hBU19QUk9UT1MiIFwKKwkiIiBcCisJLXFsYW5nbHZsPWFuc2kgXAorCS1zdGQxIFwKKwktQWUgXAorCSItQWEgLURfSFBVWF9TT1VSQ0UiIFwKKwktWGMKK2RvCisJQ0ZfQUREX0NGTEFHUygkY2ZfYXJnKQorCUFDX1RSWV9DT01QSUxFKAorWworI2lmbmRlZiBDQ19IQVNfUFJPVE9TCisjaWYgIWRlZmluZWQoX19TVERDX18pIHx8IChfX1NURENfXyAhPSAxKQorY2hva2UgbWUKKyNlbmRpZgorI2VuZGlmCitdLFsKKwlpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKKwlzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKKwlzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTtdLAorCVtjZl9jdl9hbnNpX2NjPSIkY2ZfYXJnIjsgYnJlYWtdKQorZG9uZQorQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MiCitDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfYW5zaV9jYyIgIT0gIm5vIjsgdGhlbgoraWYgdGVzdCAiLiRjZl9jdl9hbnNpX2NjIiAhPSAiLi1EQ0NfSEFTX1BST1RPUyI7IHRoZW4KKwlDRl9BRERfQ0ZMQUdTKCRjZl9jdl9hbnNpX2NjKQorZWxzZQorCUFDX0RFRklORShDQ19IQVNfUFJPVE9TKQorZmkKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0FOU0lfQ0NfUkVRRCB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDE5OTcvMDkvMDYgMTM6NDA6NDQKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBGb3IgcHJvZ3JhbXMgdGhhdCBtdXN0IHVzZSBhbiBBTlNJIGNvbXBpbGVyLCBvYnRhaW4gY29tcGlsZXIgb3B0aW9ucyB0aGF0Citkbmwgd2lsbCBtYWtlIGl0IHJlY29nbml6ZSBwcm90b3R5cGVzLiAgV2UnbGwgZG8gcHJlcHJvY2Vzc29yIGNoZWNrcyBpbiBvdGhlcgorZG5sIG1hY3Jvcywgc2luY2UgdG9vbHMgc3VjaCBhcyB1bnByb3RvIGNhbiBmYWtlIHByb3RvdHlwZXMsIGJ1dCBvbmx5IHBhcnQgb2YKK2RubCB0aGUgcHJlcHJvY2Vzc29yLgorQUNfREVGVU4oW0NGX0FOU0lfQ0NfUkVRRF0sCitbQUNfUkVRVUlSRShbQ0ZfQU5TSV9DQ19DSEVDS10pCitpZiB0ZXN0ICIkY2ZfY3ZfYW5zaV9jYyIgPSAibm8iOyB0aGVuCisJQUNfRVJST1IoCitbWW91ciBjb21waWxlciBkb2VzIG5vdCBhcHBlYXIgdG8gcmVjb2duaXplIHByb3RvdHlwZXMuCitZb3UgaGF2ZSB0aGUgZm9sbG93aW5nIGNob2ljZXM6CisJYS4gYWRqdXN0IHlvdXIgY29tcGlsZXIgb3B0aW9ucworCWIuIGdldCBhbiB1cC10by1kYXRlIGNvbXBpbGVyCisJYy4gdXNlIGEgd3JhcHBlciBzdWNoIGFzIHVucHJvdG9dKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQVJHX0RJU0FCTEUgdmVyc2lvbjogMyB1cGRhdGVkOiAxOTk5LzAzLzMwIDE3OjI0OjMxCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBBbGxvdyB1c2VyIHRvIGRpc2FibGUgYSBub3JtYWxseS1vbiBvcHRpb24uCitBQ19ERUZVTihbQ0ZfQVJHX0RJU0FCTEVdLAorW0NGX0FSR19PUFRJT04oJDEsWyQyXSxbJDNdLFskNF0seWVzKV0pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQVJHX0VOQUJMRSB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDE5OTkvMDMvMzAgMTc6MjQ6MzEKK2RubCAtLS0tLS0tLS0tLS0tCitkbmwgQWxsb3cgdXNlciB0byBlbmFibGUgYSBub3JtYWxseS1vZmYgb3B0aW9uLgorQUNfREVGVU4oW0NGX0FSR19FTkFCTEVdLAorW0NGX0FSR19PUFRJT04oJDEsWyQyXSxbJDNdLFskNF0sbm8pXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9BUkdfT1BUSU9OIHZlcnNpb246IDMgdXBkYXRlZDogMTk5Ny8xMC8xOCAxNDo0Mjo0MQorZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBSZXN0cmljdGVkIGZvcm0gb2YgQUNfQVJHX0VOQUJMRSB0aGF0IGVuc3VyZXMgdXNlciBkb2Vzbid0IGdpdmUgYm9ndXMKK2RubCB2YWx1ZXMuCitkbmwKK2RubCBQYXJhbWV0ZXJzOgorZG5sICQxID0gb3B0aW9uIG5hbWUKK2RubCAkMiA9IGhlbHAtc3RyaW5nCitkbmwgJDMgPSBhY3Rpb24gdG8gcGVyZm9ybSBpZiBvcHRpb24gaXMgbm90IGRlZmF1bHQKK2RubCAkNCA9IGFjdGlvbiBpZiBwZXJmb3JtIGlmIG9wdGlvbiBpcyBkZWZhdWx0CitkbmwgJDUgPSBkZWZhdWx0IG9wdGlvbiB2YWx1ZSAoZWl0aGVyICd5ZXMnIG9yICdubycpCitBQ19ERUZVTihbQ0ZfQVJHX09QVElPTl0sCitbQUNfQVJHX0VOQUJMRSgkMSxbJDJdLFt0ZXN0ICIkZW5hYmxldmFsIiAhPSBpZmVsc2UoJDUsbm8seWVzLG5vKSAmJiBlbmFibGV2YWw9aWZlbHNlKCQ1LG5vLG5vLHllcykKKyAgaWYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gIiQ1IiA7IHRoZW4KK2lmZWxzZSgkMywsWyAgICA6XWRubAorLFsgICAgJDNdKSBpZmVsc2UoJDQsLCxbCisgIGVsc2UKKyAgICAkNF0pCisgIGZpXSxbZW5hYmxldmFsPSQ1IGlmZWxzZSgkNCwsLFsKKyAgJDQKK10pZG5sCisgIF0pXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DSEVDS19DQUNIRSB2ZXJzaW9uOiAxMCB1cGRhdGVkOiAyMDA0LzA1LzIzIDEzOjAzOjMxCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB3ZSdyZSBhY2NpZGVudGFsbHkgdXNpbmcgYSBjYWNoZSBmcm9tIGEgZGlmZmVyZW50IG1hY2hpbmUuCitkbmwgRGVyaXZlIHRoZSBzeXN0ZW0gbmFtZSwgYXMgYSBjaGVjayBmb3IgcmV1c2luZyB0aGUgYXV0b2NvbmYgY2FjaGUuCitkbmwKK2RubCBJZiB3ZSd2ZSBwYWNrYWdlZCBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIsIHJ1biB0aGF0IChzaW5jZSBpdCBkb2VzIGEKK2RubCBiZXR0ZXIgam9iIHRoYW4gdW5hbWUpLiAgTm9ybWFsbHkgd2UnbGwgdXNlIEFDX0NBTk9OSUNBTF9IT1NULCBidXQgYWxsb3cKK2RubCBhbiBleHRyYSBwYXJhbWV0ZXIgdGhhdCB3ZSBtYXkgb3ZlcnJpZGUsIGUuZy4sIGZvciBBQ19DQU5PTklDQUxfU1lTVEVNCitkbmwgd2hpY2ggaXMgdXNlZnVsIGluIGNyb3NzLWNvbXBpbGVzLgorZG5sCitkbmwgTm90ZTogd2Ugd291bGQgdXNlICRhY19jb25maWdfc3ViLCBidXQgdGhhdCBpcyBvbmUgb2YgdGhlIHBsYWNlcyB3aGVyZQorZG5sIGF1dG9jb25mIDIuNXggYnJva2UgY29tcGF0aWJpbGl0eSB3aXRoIGF1dG9jb25mIDIuMTMKK0FDX0RFRlVOKFtDRl9DSEVDS19DQUNIRV0sCitbCitpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLmd1ZXNzIHx8IHRlc3QgLWYgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIDsgdGhlbgorCWlmZWxzZShbJDFdLCxbQUNfQ0FOT05JQ0FMX0hPU1RdLFskMV0pCisJc3lzdGVtX25hbWU9IiRob3N0X29zIgorZWxzZQorCXN5c3RlbV9uYW1lPSJgKHVuYW1lIC1zIC1yKSAyPi9kZXYvbnVsbGAiCisJaWYgdGVzdCAteiAiJHN5c3RlbV9uYW1lIiA7IHRoZW4KKwkJc3lzdGVtX25hbWU9ImAoaG9zdG5hbWUpIDI+L2Rldi9udWxsYCIKKwlmaQorZmkKK3Rlc3QgLW4gIiRzeXN0ZW1fbmFtZSIgJiYgQUNfREVGSU5FX1VOUVVPVEVEKFNZU1RFTV9OQU1FLCIkc3lzdGVtX25hbWUiKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3N5c3RlbV9uYW1lLFtjZl9jdl9zeXN0ZW1fbmFtZT0iJHN5c3RlbV9uYW1lIl0pCisKK3Rlc3QgLXogIiRzeXN0ZW1fbmFtZSIgJiYgc3lzdGVtX25hbWU9IiRjZl9jdl9zeXN0ZW1fbmFtZSIKK3Rlc3QgLW4gIiRjZl9jdl9zeXN0ZW1fbmFtZSIgJiYgQUNfTVNHX1JFU1VMVChDb25maWd1cmluZyBmb3IgJGNmX2N2X3N5c3RlbV9uYW1lKQorCitpZiB0ZXN0ICIuJHN5c3RlbV9uYW1lIiAhPSAiLiRjZl9jdl9zeXN0ZW1fbmFtZSIgOyB0aGVuCisJQUNfTVNHX1JFU1VMVChDYWNoZWQgc3lzdGVtIG5hbWUgKCRzeXN0ZW1fbmFtZSkgZG9lcyBub3QgYWdyZWUgd2l0aCBhY3R1YWwgKCRjZl9jdl9zeXN0ZW1fbmFtZSkpCisJQUNfRVJST1IoIlBsZWFzZSByZW1vdmUgY29uZmlnLmNhY2hlIGFuZCB0cnkgYWdhaW4uIikKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NIRUNLX0NGTEFHUyB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDEvMTIvMzAgMTk6MDk6NTgKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDb25kaXRpb25hbGx5IGFkZCB0byAkQ0ZMQUdTIGFuZCAkQ1BQRkxBR1MgdmFsdWVzIHdoaWNoIGFyZSBkZXJpdmVkIGZyb20KK2RubCBhIGJ1aWxkLWNvbmZpZ3VyYXRpb24gc3VjaCBhcyBpbWFrZS4gIFRoZXNlIGhhdmUgdGhlIHBpdGZhbGwgdGhhdCB0aGV5Citkbmwgb2Z0ZW4gY29udGFpbiBjb21waWxlci1zcGVjaWZpYyBvcHRpb25zIHdoaWNoIHdlIGNhbm5vdCB1c2UsIG1peGVkIHdpdGgKK2RubCBwcmVwcm9jZXNzb3Igb3B0aW9ucyB0aGF0IHdlIHVzdWFsbHkgY2FuLgorQUNfREVGVU4oW0NGX0NIRUNLX0NGTEFHU10sCitbCitDRl9WRVJCT1NFKGNoZWNraW5nIGFkZGl0aW9ucyB0byBDRkxBR1MpCitjZl9jaGVja19jZmxhZ3M9IiRDRkxBR1MiCitjZl9jaGVja19jcHBmbGFncz0iJENQUEZMQUdTIgorQ0ZfQUREX0NGTEFHUygkMSx5ZXMpCitpZiB0ZXN0ICIkY2ZfY2hlY2tfY2ZsYWdzIiAhPSAiJENGTEFHUyIgOyB0aGVuCitBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGlvLmg+XSxbcHJpbnRmKCJIZWxsbyB3b3JsZCIpO10sLAorCVtDRl9WRVJCT1NFKHRlc3QtY29tcGlsZSBmYWlsZWQuICBVbmRvaW5nIGNoYW5nZSB0byBcJENGTEFHUykKKwkgaWYgdGVzdCAiJGNmX2NoZWNrX2NwcGZsYWdzIiAhPSAiJENQUEZMQUdTIiA7IHRoZW4KKwkJIENGX1ZFUkJPU0UoYnV0IGtlZXBpbmcgY2hhbmdlIHRvIFwkQ1BQRkxBR1MpCisJIGZpCisJIENGTEFHUz0iJGNmX2NoZWNrX2ZsYWdzIl0pCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DVVJTRVNfQUNTX01BUCB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDMvMDUvMTcgMjI6MTk6MDIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBsaWtlbHkgdmFsdWVzIG9mIGFjc19tYXBbXToKK0FDX0RFRlVOKFtDRl9DVVJTRVNfQUNTX01BUF0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgYXJyYXksIGNmX2N2X2N1cnNlc19hY3NfbWFwLFsKK2NmX2N2X2N1cnNlc19hY3NfbWFwPXVua25vd24KK2ZvciBuYW1lIGluIGFjc19tYXAgX2Fjc19tYXAgX19hY3NfbWFwIF9uY19hY3NfbWFwCitkbworQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorXSxbCiskbmFtZVsnayddID0gQUNTX1BMVVMKK10sW2NmX2N2X2N1cnNlc19hY3NfbWFwPSRuYW1lOyBicmVha10pCitkb25lCitdKQorCit0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2Fjc19tYXAiICE9IHVua25vd24gJiYgQUNfREVGSU5FX1VOUVVPVEVEKENVUlNFU19BQ1NfQVJSQVksJGNmX2N2X2N1cnNlc19hY3NfbWFwKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DVVJTRVNfQ0hFQ0tfVFlQRSB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDMvMDMvMDEgMjM6NDA6MzMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIGN1cnNlcy5oIGRlZmluZXMgdGhlIGdpdmVuIHR5cGUKK0FDX0RFRlVOKFtDRl9DVVJTRVNfQ0hFQ0tfVFlQRV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHR5cGUgJDEgaW4gJHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0pCitBQ19UUllfQ09NUElMRShbCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2VuZGlmCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSxbCiskMSBmb28KK10sY2ZfcmVzdWx0PXllcyxjZl9yZXN1bHQ9bm8pCitBQ19NU0dfUkVTVUxUKCRjZl9yZXN1bHQpCitpZiB0ZXN0ICRjZl9yZXN1bHQgPSB5ZXMgOyB0aGVuCisJQ0ZfVVBQRVIoY2ZfcmVzdWx0LGhhdmVfdHlwZV8kMSkKKwlBQ19ERUZJTkVfVU5RVU9URUQoJGNmX3Jlc3VsdCkKK2Vsc2UKKwlBQ19ERUZJTkVfVU5RVU9URUQoJDEsJDIpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DVVJTRVNfQ1BQRkxBR1MgdmVyc2lvbjogOSB1cGRhdGVkOiAyMDA2LzAyLzA0IDE5OjQ0OjQzCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTG9vayBmb3IgdGhlIGN1cnNlcyBoZWFkZXJzLgorQUNfREVGVU4oW0NGX0NVUlNFU19DUFBGTEFHU10sWworCitBQ19DQUNIRV9DSEVDSyhmb3IgZXh0cmEgaW5jbHVkZSBkaXJlY3RvcmllcyxjZl9jdl9jdXJzZXNfaW5jZGlyLFsKK2NmX2N2X2N1cnNlc19pbmNkaXI9bm8KK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQoraHB1eDEwLiopICModmkKKwl0ZXN0IC1kIC91c3IvaW5jbHVkZS9jdXJzZXNfY29sciAmJiBcCisJY2ZfY3ZfY3Vyc2VzX2luY2Rpcj0iLUkvdXNyL2luY2x1ZGUvY3Vyc2VzX2NvbHIiCisJOzsKK3N1bm9zMyp8c3Vub3M0KikKKwl0ZXN0IC1kIC91c3IvNWxpYiAmJiBcCisJdGVzdCAtZCAvdXNyLzVpbmNsdWRlICYmIFwKKwljZl9jdl9jdXJzZXNfaW5jZGlyPSItSS91c3IvNWluY2x1ZGUiCisJOzsKK2VzYWMKK10pCit0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2luY2RpciIgIT0gbm8gJiYgQ1BQRkxBR1M9IiRjZl9jdl9jdXJzZXNfaW5jZGlyICRDUFBGTEFHUyIKKworQ0ZfQ1VSU0VTX0hFQURFUgorQ0ZfVEVSTV9IRUFERVIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1VSU0VTX0ZVTkNTIHZlcnNpb246IDEzIHVwZGF0ZWQ6IDIwMDcvMDQvMjggMDk6MTU6NTUKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBDdXJzZXMtZnVuY3Rpb25zIGFyZSBhIGxpdHRsZSBjb21wbGljYXRlZCwgc2luY2UgYSBsb3Qgb2YgdGhlbSBhcmUgbWFjcm9zLgorQUNfREVGVU4oW0NGX0NVUlNFU19GVU5DU10sCitbCitBQ19SRVFVSVJFKFtDRl9DVVJTRVNfQ1BQRkxBR1NdKWRubAorQUNfUkVRVUlSRShbQ0ZfWE9QRU5fQ1VSU0VTXSkKK0FDX1JFUVVJUkUoW0NGX0NVUlNFU19URVJNX0hdKQorZm9yIGNmX2Z1bmMgaW4gJDEKK2RvCisJQ0ZfVVBQRVIoY2ZfdHJfZnVuYywkY2ZfZnVuYykKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yICR7Y2ZfZnVuY30pCisJQ0ZfTVNHX0xPRygke2NmX2Z1bmN9KQorCUFDX0NBQ0hFX1ZBTChjZl9jdl9mdW5jXyRjZl9mdW5jLFsKKwkJZXZhbCBjZl9yZXN1bHQ9JyRhY19jdl9mdW5jXyckY2ZfZnVuYworCQlpZiB0ZXN0ICIuJGNmX3Jlc3VsdCIgIT0gIi5ubyI7IHRoZW4KKwkJCUFDX1RSWV9MSU5LKFsKKyNpZmRlZiBIQVZFX1hDVVJTRVMKKyNpbmNsdWRlIDx4Y3Vyc2VzLmg+CitjaGFyICogWEN1cnNlc1Byb2dyYW1OYW1lID0gInRlc3QiOworI2Vsc2UKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgZGVmaW5lZChIQVZFX05DVVJTRVNXX1RFUk1fSCkKKyNpbmNsdWRlIDxuY3Vyc2Vzdy90ZXJtLmg+CisjZWxzZQorI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKEhBVkVfTkNVUlNFU19URVJNX0gpCisjaW5jbHVkZSA8bmN1cnNlcy90ZXJtLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfVEVSTV9ICisjaW5jbHVkZSA8dGVybS5oPgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmXSwKKwkJCVsKKyNpZm5kZWYgJHtjZl9mdW5jfQorbG9uZyBmb28gPSAobG9uZykoJiR7Y2ZfZnVuY30pOworJHtjZl9jdl9tYWluX3JldHVybi1yZXR1cm59KGZvbyA9PSAwKTsKKyNlbmRpZgorCQkJXSwKKwkJCVtjZl9yZXN1bHQ9eWVzXSwKKwkJCVtjZl9yZXN1bHQ9bm9dKQorCQlmaQorCQlldmFsICdjZl9jdl9mdW5jXyckY2ZfZnVuYyc9JGNmX3Jlc3VsdCcKKwldKQorCSMgdXNlIHRoZSBjb21wdXRlZC9yZXRyaWV2ZWQgY2FjaGUtdmFsdWU6CisJZXZhbCAnY2ZfcmVzdWx0PSRjZl9jdl9mdW5jXyckY2ZfZnVuYworCUFDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCkKKwlpZiB0ZXN0ICRjZl9yZXN1bHQgIT0gbm87IHRoZW4KKwkJQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfJHtjZl90cl9mdW5jfSkKKwlmaQorZG9uZQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9DVVJTRVNfSEVBREVSIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNS8xMi8zMSAxMzoyODoyNQorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIGEgImN1cnNlcyIgaGVhZGVyIGZpbGUsIGUuZywuICJjdXJzZXMuaCIsIG9yIG9uZSBvZiB0aGUgbW9yZSBjb21tb24KK2RubCB2YXJpYXRpb25zIG9mIG5jdXJzZXMnIGluc3RhbGxzLgorZG5sCitkbmwgU2VlIGFsc28gQ0ZfTkNVUlNFU19IRUFERVIsIHdoaWNoIHNldHMgdGhlIHNhbWUgY2FjaGUgdmFyaWFibGUuCitBQ19ERUZVTihbQ0ZfQ1VSU0VTX0hFQURFUl0sWworQUNfQ0FDSEVfQ0hFQ0soaWYgd2UgaGF2ZSBpZGVudGlmaWVkIGN1cnNlcyBoZWFkZXJzLGNmX2N2X25jdXJzZXNfaGVhZGVyLFsKK2NmX2N2X25jdXJzZXNfaGVhZGVyPW5vbmUKK2ZvciBjZl9oZWFkZXIgaW4gXAorCWN1cnNlcy5oIFwKKwluY3Vyc2VzLmggXAorCW5jdXJzZXMvY3Vyc2VzLmggXAorCW5jdXJzZXMvbmN1cnNlcy5oCitkbworQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDwke2NmX2hlYWRlcn0+XSwKKwlbaW5pdHNjcigpOyB0Z290bygiPyIsIDAsMCldLAorCVtjZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfaGVhZGVyOyBicmVha10sW10pCitkb25lCitdKQorCitpZiB0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiID0gbm9uZSA7IHRoZW4KKwlBQ19NU0dfRVJST1IoTm8gY3Vyc2VzIGhlYWRlci1maWxlcyBmb3VuZCkKK2ZpCisKKyMgY2hlYXQsIHRvIGdldCB0aGUgcmlnaHQgI2RlZmluZSdzIGZvciBIQVZFX05DVVJTRVNfSCwgZXRjLgorQUNfQ0hFQ0tfSEVBREVSUygkY2ZfY3ZfbmN1cnNlc19oZWFkZXIpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NVUlNFU19MSUJTIHZlcnNpb246IDI2IHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMTA6MzI6NDAKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIExvb2sgZm9yIHRoZSBjdXJzZXMgbGlicmFyaWVzLiAgT2xkZXIgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyBtYXkgcmVxdWlyZQorZG5sIHRlcm1jYXAvdGVybWxpYiB0byBiZSBsaW5rZWQgYXMgd2VsbC4gIENhbGwgQ0ZfQ1VSU0VTX0NQUEZMQUdTIGZpcnN0LgorQUNfREVGVU4oW0NGX0NVUlNFU19MSUJTXSxbCisKK0FDX1JFUVVJUkUoW0NGX0NVUlNFU19DUFBGTEFHU10pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgaGF2ZSBpZGVudGlmaWVkIGN1cnNlcyBsaWJyYXJpZXMpCitBQ19UUllfTElOSyhbI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9Pl0sCisgICAgW2luaXRzY3IoKTsgdGdvdG8oIj8iLCAwLDApXSwKKyAgICBjZl9yZXN1bHQ9eWVzLAorICAgIGNmX3Jlc3VsdD1ubykKK0FDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCkKKworaWYgdGVzdCAiJGNmX3Jlc3VsdCIgPSBubyA7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorZnJlZWJzZCopICModmkKKyAgICBBQ19DSEVDS19MSUIobXl0aW5mbyx0Z290byxbTElCUz0iLWxteXRpbmZvICRMSUJTIl0pCisgICAgOzsKK2hwdXgxMC4qKSAjKHZpCisgICAgQUNfQ0hFQ0tfTElCKGN1cl9jb2xyLGluaXRzY3IsWworICAgICAgICBMSUJTPSItbGN1cl9jb2xyICRMSUJTIgorICAgICAgICBhY19jdl9mdW5jX2luaXRzY3I9eWVzCisgICAgICAgIF0sWworICAgIEFDX0NIRUNLX0xJQihIY3Vyc2VzLGluaXRzY3IsWworICAgICAgICAjIEhQJ3MgaGVhZGVyIHVzZXMgX19IUF9DVVJTRVMsIGJ1dCB1c2VyIGNsYWltcyBfSFBfQ1VSU0VTLgorICAgICAgICBMSUJTPSItbEhjdXJzZXMgJExJQlMiCisgICAgICAgIENQUEZMQUdTPSItRF9fSFBfQ1VSU0VTIC1EX0hQX0NVUlNFUyAkQ1BQRkxBR1MiCisgICAgICAgIGFjX2N2X2Z1bmNfaW5pdHNjcj15ZXMKKyAgICAgICAgXSldKQorICAgIDs7CitsaW51eCopICMgU3VzZSBMaW51eCBkb2VzIG5vdCBmb2xsb3cgL3Vzci9saWIgY29udmVudGlvbgorICAgIENGX0FERF9MSUJESVIoL2xpYikKKyAgICA7Oworc3Vub3MzKnxzdW5vczQqKQorICAgIGlmIHRlc3QgLWQgL3Vzci81bGliIDsgdGhlbgorICAgICAgQ0ZfQUREX0xJQkRJUigvdXNyLzVsaWIpCisgICAgICBMSUJTPSIkTElCUyAtbGN1cnNlcyAtbHRlcm1jYXAiCisgICAgZmkKKyAgICBhY19jdl9mdW5jX2luaXRzY3I9eWVzCisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAiLiRhY19jdl9mdW5jX2luaXRzY3IiICE9IC55ZXMgOyB0aGVuCisgICAgY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBjZl90ZXJtX2xpYj0iIgorICAgIGNmX2N1cnNfbGliPSIiCisKKyAgICBpZiB0ZXN0ICIuJHtjZl9jdl9uY3Vyc2VzX3ZlcnNpb24tbm99IiAhPSAubm8KKyAgICB0aGVuCisgICAgICAgIGNmX2NoZWNrX2xpc3Q9Im5jdXJzZXMgY3Vyc2VzIGN1cnNlc1giCisgICAgZWxzZQorICAgICAgICBjZl9jaGVja19saXN0PSJjdXJzZXNYIGN1cnNlcyBuY3Vyc2VzIgorICAgIGZpCisKKyAgICAjIENoZWNrIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgdGdvdG8uICBEbyB0aGlzIGJlZm9yZSBjdXJzZXMgbGlicmFyeQorICAgICMgYmVjYXVzZSBpdCBtYXkgYmUgbmVlZGVkIHRvIGxpbmsgdGhlIHRlc3QtY2FzZSBmb3IgaW5pdHNjci4KKyAgICBBQ19DSEVDS19GVU5DKHRnb3RvLFtjZl90ZXJtX2xpYj1wcmVkZWZpbmVkXSxbCisgICAgICAgIGZvciBjZl90ZXJtX2xpYiBpbiAkY2ZfY2hlY2tfbGlzdCB0ZXJtY2FwIHRlcm1saWIgdW5rbm93bgorICAgICAgICBkbworICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKCRjZl90ZXJtX2xpYix0Z290byxbYnJlYWtdKQorICAgICAgICBkb25lCisgICAgXSkKKworICAgICMgQ2hlY2sgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbml0c2NyCisgICAgdGVzdCAiJGNmX3Rlcm1fbGliIiAhPSBwcmVkZWZpbmVkICYmIHRlc3QgIiRjZl90ZXJtX2xpYiIgIT0gdW5rbm93biAmJiBMSUJTPSItbCRjZl90ZXJtX2xpYiAkY2Zfc2F2ZV9MSUJTIgorICAgIGZvciBjZl9jdXJzX2xpYiBpbiAkY2ZfY2hlY2tfbGlzdCB4Y3Vyc2VzIGpjdXJzZXMgdW5rbm93bgorICAgIGRvCisgICAgICAgIEFDX0NIRUNLX0xJQigkY2ZfY3Vyc19saWIsaW5pdHNjcixbYnJlYWtdKQorICAgIGRvbmUKKyAgICB0ZXN0ICRjZl9jdXJzX2xpYiA9IHVua25vd24gJiYgQUNfRVJST1Iobm8gY3Vyc2VzIGxpYnJhcnkgZm91bmQpCisKKyAgICBMSUJTPSItbCRjZl9jdXJzX2xpYiAkY2Zfc2F2ZV9MSUJTIgorICAgIGlmIHRlc3QgIiRjZl90ZXJtX2xpYiIgPSB1bmtub3duIDsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIGxpbmsgd2l0aCAkY2ZfY3Vyc19saWIgbGlicmFyeSkKKyAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLAorICAgICAgICAgICAgW2luaXRzY3IoKV0sCisgICAgICAgICAgICBbY2ZfcmVzdWx0PXllc10sCisgICAgICAgICAgICBbY2ZfcmVzdWx0PW5vXSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkY2ZfcmVzdWx0KQorICAgICAgICB0ZXN0ICRjZl9yZXN1bHQgPSBubyAmJiBBQ19FUlJPUihDYW5ub3QgbGluayBjdXJzZXMgbGlicmFyeSkKKyAgICBlbGlmIHRlc3QgIiRjZl9jdXJzX2xpYiIgPSAiJGNmX3Rlcm1fbGliIiA7IHRoZW4KKyAgICAgICAgOgorICAgIGVsaWYgdGVzdCAiJGNmX3Rlcm1fbGliIiAhPSBwcmVkZWZpbmVkIDsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgbmVlZCBib3RoICRjZl9jdXJzX2xpYiBhbmQgJGNmX3Rlcm1fbGliIGxpYnJhcmllcykKKyAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLAorICAgICAgICAgICAgW2luaXRzY3IoKTsgdGdvdG8oKGNoYXIgKikwLCAwLCAwKTtdLAorICAgICAgICAgICAgW2NmX3Jlc3VsdD1ub10sCisgICAgICAgICAgICBbCisgICAgICAgICAgICBMSUJTPSItbCRjZl9jdXJzX2xpYiAtbCRjZl90ZXJtX2xpYiAkY2Zfc2F2ZV9MSUJTIgorICAgICAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLAorICAgICAgICAgICAgICAgIFtpbml0c2NyKCldLAorICAgICAgICAgICAgICAgIFtjZl9yZXN1bHQ9eWVzXSwKKyAgICAgICAgICAgICAgICBbY2ZfcmVzdWx0PWVycm9yXSkKKyAgICAgICAgICAgIF0pCisgICAgICAgIEFDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCkKKyAgICBmaQorZmkKK2ZpCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfQ1VSU0VTX1RFUk1fSCB2ZXJzaW9uOiA2IHVwZGF0ZWQ6IDIwMDMvMTEvMDYgMTk6NTk6NTcKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgU1ZyNCBjdXJzZXMgc2hvdWxkIGhhdmUgdGVybS5oIGFzIHdlbGwgKHdoZXJlIGl0IHB1dHMgdGhlIGRlZmluaXRpb25zIG9mCitkbmwgdGhlIGxvdy1sZXZlbCBpbnRlcmZhY2UpLiAgVGhpcyBtYXkgbm90IGJlIHRydWUgaW4gb2xkL2Jyb2tlbiBpbXBsZW1lbnRhdGlvbnMsCitkbmwgYXMgd2VsbCBhcyBpbiBtaXNjb25maWd1cmVkIHN5c3RlbXMgKGUuZy4sIGdjYyBjb25maWd1cmVkIGZvciBTb2xhcmlzIDIuNAorZG5sIHJ1bm5pbmcgd2l0aCBTb2xhcmlzIDIuNS4xKS4KK0FDX0RFRlVOKFtDRl9DVVJTRVNfVEVSTV9IXSwKK1sKK0FDX0NBQ0hFX0NIRUNLKGZvciB0ZXJtLmgsIGNmX2N2X3Rlcm1faGVhZGVyLFsKKworQUNfUkVRVUlSRShbQ0ZfQ1VSU0VTX0NQUEZMQUdTXSlkbmwKKyMgSWYgd2UgZm91bmQgPG5jdXJzZXMvY3Vyc2VzLmg+LCBsb29rIGZvciA8bmN1cnNlcy90ZXJtLmg+LCBidXQgYWx3YXlzIGxvb2sKKyMgZm9yIDx0ZXJtLmg+IGlmIHdlIGRvIG5vdCBmaW5kIHRoZSB2YXJpYW50LgorZm9yIGNmX2hlYWRlciBpbiBcCisJYGVjaG8gJHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0gfCBzZWQgLWUgJ3MlLy4qJS8lJ2B0ZXJtLmggXAorCXRlcm0uaAorZG8KKwlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JHtjZl9oZWFkZXJ9Pl0sCisJW1dJTkRPVyAqeF0sCisJW2NmX2N2X3Rlcm1faGVhZGVyPSRjZl9oZWFkZXIKKwkgYnJlYWtdLAorCVtjZl9jdl90ZXJtX2hlYWRlcj1ub10pCitkb25lCitdKQorCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjKHZpCit0ZXJtLmgpICModmkKKwlBQ19ERUZJTkUoSEFWRV9URVJNX0gpCisJOzsKK25jdXJzZXMvdGVybS5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNfVEVSTV9IKQorCTs7CituY3Vyc2Vzdy90ZXJtLmgpCisJQUNfREVGSU5FKEhBVkVfTkNVUlNFU1dfVEVSTV9IKQorCTs7Citlc2FjCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0NVUlNFU19XQUNTX01BUCB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDMvMDUvMTcgMjI6MTk6MDIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgbGlrZWx5IHZhbHVlcyBvZiB3YWNzX21hcFtdOgorQUNfREVGVU4oW0NGX0NVUlNFU19XQUNTX01BUF0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3Igd2lkZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBhcnJheSwgY2ZfY3ZfY3Vyc2VzX3dhY3NfbWFwLFsKKwljZl9jdl9jdXJzZXNfd2Fjc19tYXA9dW5rbm93bgorCWZvciBuYW1lIGluIHdhY3NfbWFwIF93YWNzX21hcCBfX3dhY3NfbWFwIF9uY193YWNzCisJZG8KKwlBQ19UUllfTElOSyhbCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2VuZGlmCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKKwlbJG5hbWVbJ2snXSA9ICpXQUNTX1BMVVNdLAorCVtjZl9jdl9jdXJzZXNfd2Fjc19tYXA9JG5hbWUKKwkgYnJlYWtdKQorCWRvbmVdKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9ESVJOQU1FIHZlcnNpb246IDQgdXBkYXRlZDogMjAwMi8xMi8yMSAxOToyNTo1MgorZG5sIC0tLS0tLS0tLS0KK2RubCAiZGlybmFtZSIgaXMgbm90IHBvcnRhYmxlLCBzbyB3ZSBmYWtlIGl0IHdpdGggYSBzaGVsbCBzY3JpcHQuCitBQ19ERUZVTihbQ0ZfRElSTkFNRV0sWyQxPWBlY2hvICQyIHwgc2VkIC1lICdzJS9bW14vXV0qJCUlJ2BdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0RJU0FCTEVfRUNITyB2ZXJzaW9uOiAxMCB1cGRhdGVkOiAyMDAzLzA0LzE3IDIyOjI3OjExCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgWW91IGNhbiBhbHdheXMgdXNlICJtYWtlIC1uIiB0byBzZWUgdGhlIGFjdHVhbCBvcHRpb25zLCBidXQgaXQncyBoYXJkIHRvCitkbmwgcGljayBvdXQvYW5hbHl6ZSB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gdGhlIGNvbXBpbGUtbGluZSBpcyBsb25nLgorZG5sCitkbmwgU2V0czoKK2RubAlFQ0hPX0xUIC0gc3ltYm9sIHRvIGNvbnRyb2wgaWYgbGlidG9vbCBpcyB2ZXJib3NlCitkbmwJRUNIT19MRCAtIHN5bWJvbCB0byBwcmVmaXggImNjIC1vIiBsaW5lcworZG5sCVJVTEVfQ0MgLSBzeW1ib2wgdG8gcHV0IGJlZm9yZSBpbXBsaWNpdCAiY2MgLWMiIGxpbmVzIChlLmcuLCAuYy5vKQorZG5sCVNIT1dfQ0MgLSBzeW1ib2wgdG8gcHV0IGJlZm9yZSBleHBsaWNpdCAiY2MgLWMiIGxpbmVzCitkbmwJRUNIT19DQyAtIHN5bWJvbCB0byBwdXQgYmVmb3JlIGFueSAiY2MiIGxpbmUKK2RubAorQUNfREVGVU4oW0NGX0RJU0FCTEVfRUNIT10sWworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIHNlZSBsb25nIGNvbXBpbGluZyBtZXNzYWdlcykKK0NGX0FSR19ESVNBQkxFKGVjaG8sCisJWyAgLS1kaXNhYmxlLWVjaG8gICAgICAgICAgZGlzcGxheSAiY29tcGlsaW5nIiBjb21tYW5kc10sCisJWworICAgIEVDSE9fTFQ9Jy0tc2lsZW50JworICAgIEVDSE9fTEQ9J0BlY2hvIGxpbmtpbmcgWyRdQDsnCisgICAgUlVMRV9DQz0nCUBlY2hvIGNvbXBpbGluZyBbJF08JworICAgIFNIT1dfQ0M9JwlAZWNobyBjb21waWxpbmcgWyRdQCcKKyAgICBFQ0hPX0NDPSdAJworXSxbCisgICAgRUNIT19MVD0nJworICAgIEVDSE9fTEQ9JycKKyAgICBSVUxFX0NDPScjIGNvbXBpbGluZycKKyAgICBTSE9XX0NDPScjIGNvbXBpbGluZycKKyAgICBFQ0hPX0NDPScnCitdKQorQUNfTVNHX1JFU1VMVCgkZW5hYmxldmFsKQorQUNfU1VCU1QoRUNIT19MVCkKK0FDX1NVQlNUKEVDSE9fTEQpCitBQ19TVUJTVChSVUxFX0NDKQorQUNfU1VCU1QoU0hPV19DQykKK0FDX1NVQlNUKEVDSE9fQ0MpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0VOQUJMRV9XQVJOSU5HUyB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDMvMDUvMjQgMTQ6MjQ6MjkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb25maWd1cmUtb3B0aW9uIHRvIGVuYWJsZSBnY2Mgd2FybmluZ3MKK0FDX0RFRlVOKFtDRl9FTkFCTEVfV0FSTklOR1NdLFsKK2lmICggdGVzdCAiJEdDQyIgPSB5ZXMgfHwgdGVzdCAiJEdYWCIgPSB5ZXMgKQordGhlbgorQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIHR1cm4gb24gZ2NjIHdhcm5pbmdzKQorQ0ZfQVJHX0VOQUJMRSh3YXJuaW5ncywKKwlbICAtLWVuYWJsZS13YXJuaW5ncyAgICAgICB0ZXN0OiB0dXJuIG9uIGdjYyBjb21waWxlciB3YXJuaW5nc10sCisJW3dpdGhfd2FybmluZ3M9eWVzXSwKKwlbd2l0aF93YXJuaW5ncz1ub10pCitBQ19NU0dfUkVTVUxUKCR3aXRoX3dhcm5pbmdzKQoraWYgdGVzdCAiJHdpdGhfd2FybmluZ3MiID0gInllcyIKK3RoZW4KKwlDRl9HQ0NfV0FSTklOR1MKK2ZpCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9GSU5EX0xJQlJBUlkgdmVyc2lvbjogOCB1cGRhdGVkOiAyMDA0LzExLzIzIDIwOjE0OjU4CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgTG9vayBmb3IgYSBub24tc3RhbmRhcmQgbGlicmFyeSwgZ2l2ZW4gcGFyYW1ldGVycyBmb3IgQUNfVFJZX0xJTksuICBXZQorZG5sIHByZWZlciBhIHN0YW5kYXJkIGxvY2F0aW9uLCBhbmQgdXNlIC1MIG9wdGlvbnMgb25seSBpZiB3ZSBkbyBub3QgZmluZCB0aGUKK2RubCBsaWJyYXJ5IGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGxvY2F0aW9uKHMpLgorZG5sCSQxID0gbGlicmFyeSBuYW1lCitkbmwJJDIgPSBsaWJyYXJ5IGNsYXNzLCB1c3VhbGx5IHRoZSBzYW1lIGFzIGxpYnJhcnkgbmFtZQorZG5sCSQzID0gaW5jbHVkZXMKK2RubAkkNCA9IGNvZGUgZnJhZ21lbnQgdG8gY29tcGlsZS9saW5rCitkbmwJJDUgPSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLW5hbWUKK2RubAkkNiA9IGZsYWcsIG5vbm51bGwgaWYgZmFpbHVyZSBzaG91bGQgbm90IGNhdXNlIGFuIGVycm9yLWV4aXQKK2RubAorZG5sIFNldHMgdGhlIHZhcmlhYmxlICIkY2ZfbGliZGlyIiBhcyBhIHNpZGUtZWZmZWN0LCBzbyB3ZSBjYW4gc2VlIGlmIHdlIGhhZAorZG5sIHRvIHVzZSBhIC1MIG9wdGlvbi4KK0FDX0RFRlVOKFtDRl9GSU5EX0xJQlJBUlldLAorWworCWV2YWwgJ2NmX2N2X2hhdmVfbGliXyckMSc9bm8nCisJY2ZfbGliZGlyPSIiCisJQUNfQ0hFQ0tfRlVOQygkNSwKKwkJZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyQxJz15ZXMnLFsKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkJQUNfTVNHX0NIRUNLSU5HKGZvciAkNSBpbiAtbCQxKQorCQlMSUJTPSItbCQxICRMSUJTIgorCQlBQ19UUllfTElOSyhbJDNdLFskNF0sCisJCQlbQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyQxJz15ZXMnCisJCQldLAorCQkJW0FDX01TR19SRVNVTFQobm8pCisJCQlDRl9MSUJSQVJZX1BBVEgoY2Zfc2VhcmNoLCQyKQorCQkJZm9yIGNmX2xpYmRpciBpbiAkY2Zfc2VhcmNoCisJCQlkbworCQkJCUFDX01TR19DSEVDS0lORyhmb3IgLWwkMSBpbiAkY2ZfbGliZGlyKQorCQkJCUxJQlM9Ii1MJGNmX2xpYmRpciAtbCQxICRjZl9zYXZlX0xJQlMiCisJCQkJQUNfVFJZX0xJTksoWyQzXSxbJDRdLAorCQkJCQlbQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQkgCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyQxJz15ZXMnCisJCQkJCSBicmVha10sCisJCQkJCVtBQ19NU0dfUkVTVUxUKG5vKQorCQkJCQkgTElCUz0iJGNmX3NhdmVfTElCUyJdKQorCQkJZG9uZQorCQkJXSkKKwkJXSkKK2V2YWwgJ2NmX2ZvdW5kX2xpYnJhcnk9WyRdY2ZfY3ZfaGF2ZV9saWJfJyQxCitpZmVsc2UoJDYsLFsKK2lmIHRlc3QgJGNmX2ZvdW5kX2xpYnJhcnkgPSBubyA7IHRoZW4KKwlBQ19FUlJPUihDYW5ub3QgbGluayAkMSBsaWJyYXJ5KQorZmkKK10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0ZVTkNfQ1VSU0VTX1ZFUlNJT04gdmVyc2lvbjogNCB1cGRhdGVkOiAyMDA3LzA0LzI4IDA5OjE1OjU1CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNvbGFyaXMgaGFzIGEgZGF0YSBpdGVtICdjdXJzZXNfdmVyc2lvbicsIHdoaWNoIGNvbmZ1c2VzIEFDX0NIRUNLX0ZVTkNTLgorZG5sIEl0J3MgYSBjaGFyYWN0ZXIgc3RyaW5nICJTVlI0Iiwgbm90IGRvY3VtZW50ZWQuCitBQ19ERUZVTihbQ0ZfRlVOQ19DVVJTRVNfVkVSU0lPTl0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgZnVuY3Rpb24gY3Vyc2VzX3ZlcnNpb24sIGNmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb24sWworQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpCit7CisJY2hhciB0ZW1wWzEwMjRdOworCXNwcmludGYodGVtcCwgIiVzXG4iLCBjdXJzZXNfdmVyc2lvbigpKTsKKwkke2NmX2N2X21haW5fcmV0dXJuLXJldHVybn0oMCk7Cit9XQorLFtjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uPXllc10KKyxbY2ZfY3ZfZnVuY19jdXJzZXNfdmVyc2lvbj1ub10KKyxbY2ZfY3ZfZnVuY19jdXJzZXNfdmVyc2lvbj11bmtub3duXSkKK3JtIC1mIGNvcmVdKQordGVzdCAiJGNmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb24iID0geWVzICYmIEFDX0RFRklORShIQVZFX0NVUlNFU19WRVJTSU9OKQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HQ0NfQVRUUklCVVRFUyB2ZXJzaW9uOiAxMSB1cGRhdGVkOiAyMDA3LzA3LzI5IDA5OjU1OjEyCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGZvciBhdmFpbGFiaWxpdHkgb2YgdXNlZnVsIGdjYyBfX2F0dHJpYnV0ZV9fIGRpcmVjdGl2ZXMgdG8gcXVpZXQKK2RubCBjb21waWxlciB3YXJuaW5ncy4gIFRob3VnaCB1c2VmdWwsIG5vdCBhbGwgYXJlIHN1cHBvcnRlZCAtLSBhbmQgY29udHJhcnkKK2RubCB0byBkb2N1bWVudGF0aW9uLCB1bnJlY29nbml6ZWQgZGlyZWN0aXZlcyBjYXVzZSBvbGRlciBjb21waWxlcnMgdG8gYmFyZi4KK0FDX0RFRlVOKFtDRl9HQ0NfQVRUUklCVVRFU10sCitbCitpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorY2F0ID4gY29uZnRlc3QuaSA8PEVPRgorI2lmbmRlZiBHQ0NfUFJJTlRGCisjZGVmaW5lIEdDQ19QUklOVEYgMAorI2VuZGlmCisjaWZuZGVmIEdDQ19TQ0FORgorI2RlZmluZSBHQ0NfU0NBTkYgMAorI2VuZGlmCisjaWZuZGVmIEdDQ19OT1JFVFVSTgorI2RlZmluZSBHQ0NfTk9SRVRVUk4gLyogbm90aGluZyAqLworI2VuZGlmCisjaWZuZGVmIEdDQ19VTlVTRUQKKyNkZWZpbmUgR0NDX1VOVVNFRCAvKiBub3RoaW5nICovCisjZW5kaWYKK0VPRgoraWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KKwlBQ19DSEVDS0lORyhbZm9yICRDQyBfX2F0dHJpYnV0ZV9fIGRpcmVjdGl2ZXNdKQorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICIke2FzX21lLWNvbmZpZ3VyZX0iCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlICJjb25mdGVzdC5oIgorI2luY2x1ZGUgImNvbmZ0ZXN0LmkiCisjaWYJR0NDX1BSSU5URgorI2RlZmluZSBHQ0NfUFJJTlRGTElLRShmbXQsdmFyKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLGZtdCx2YXIpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIC8qbm90aGluZyovCisjZW5kaWYKKyNpZglHQ0NfU0NBTkYKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHNjYW5mLGZtdCx2YXIpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19TQ0FORkxJS0UoZm10LHZhcikgIC8qbm90aGluZyovCisjZW5kaWYKK2V4dGVybiB2b2lkIHdvdyhjaGFyICosLi4uKSBHQ0NfU0NBTkZMSUtFKDEsMik7CitleHRlcm4gdm9pZCBvb3BzKGNoYXIgKiwuLi4pIEdDQ19QUklOVEZMSUtFKDEsMikgR0NDX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgZm9vKHZvaWQpIEdDQ19OT1JFVFVSTjsKK2ludCBtYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbW11dIEdDQ19VTlVTRUQpIHsgcmV0dXJuIDA7IH0KK0VPRgorCWZvciBjZl9hdHRyaWJ1dGUgaW4gc2NhbmYgcHJpbnRmIHVudXNlZCBub3JldHVybgorCWRvCisJCUNGX1VQUEVSKGNmX0FUVFJJQlVURSwkY2ZfYXR0cmlidXRlKQorCQljZl9kaXJlY3RpdmU9Il9fYXR0cmlidXRlX18oKCRjZl9hdHRyaWJ1dGUpKSIKKwkJZWNobyAiY2hlY2tpbmcgZm9yICRDQyAkY2ZfZGlyZWN0aXZlIiAxPiZBQ19GRF9DQworCQljYXNlICRjZl9hdHRyaWJ1dGUgaW4KKwkJc2NhbmZ8cHJpbnRmKQorCQljYXQgPmNvbmZ0ZXN0LmggPDxFT0YKKyNkZWZpbmUgR0NDXyRjZl9BVFRSSUJVVEUgMQorRU9GCisJCQk7OworCQkqKQorCQljYXQgPmNvbmZ0ZXN0LmggPDxFT0YKKyNkZWZpbmUgR0NDXyRjZl9BVFRSSUJVVEUgJGNmX2RpcmVjdGl2ZQorRU9GCisJCQk7OworCQllc2FjCisJCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgQUNfTVNHX1JFU1VMVCguLi4gJGNmX2F0dHJpYnV0ZSkKKwkJCWNhdCBjb25mdGVzdC5oID4+Y29uZmRlZnMuaAorCQlmaQorCWRvbmUKK2Vsc2UKKwlmZ3JlcCBkZWZpbmUgY29uZnRlc3QuaSA+PmNvbmZkZWZzLmgKK2ZpCitybSAtcmYgY29uZnRlc3QqCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HQ0NfVkVSU0lPTiB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDUvMDgvMjcgMDk6NTM6NDIKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIEZpbmQgdmVyc2lvbiBvZiBnY2MKK0FDX0RFRlVOKFtDRl9HQ0NfVkVSU0lPTl0sWworQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCitHQ0NfVkVSU0lPTj1ub25lCitpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcodmVyc2lvbiBvZiAkQ0MpCisJR0NDX1ZFUlNJT049ImAke0NDfSAtLXZlcnNpb258IHNlZCAtZSAnMiwkZCcgLWUgJ3MvXi4qKEdDQykgLy8nIC1lICdzL15bW14wLTkuXV0qLy8nIC1lICdzL1tbXjAtOS5dXS4qLy8nYCIKKwl0ZXN0IC16ICIkR0NDX1ZFUlNJT04iICYmIEdDQ19WRVJTSU9OPXVua25vd24KKwlBQ19NU0dfUkVTVUxUKCRHQ0NfVkVSU0lPTikKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX0dDQ19XQVJOSU5HUyB2ZXJzaW9uOiAyMiB1cGRhdGVkOiAyMDA3LzA3LzI5IDA5OjU1OjEyCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHVzZWZ1bCB3YXJuaW5nIG9wdGlvbnMuICBUaGVyZSdzIGEgZmV3IHRoYXQKK2RubCB3ZSBkb24ndCB1c2UsIHNpbXBseSBiZWNhdXNlIHRoZXkncmUgdG9vIG5vaXN5OgorZG5sCitkbmwJLVdjb252ZXJzaW9uICh1c2VmdWwgaW4gb2xkZXIgdmVyc2lvbnMgb2YgZ2NjLCBidXQgbm90IGluIGdjYyAyLjcueCkKK2RubAktV3JlZHVuZGFudC1kZWNscyAoc3lzdGVtIGhlYWRlcnMgbWFrZSB0aGlzIHRvbyBub2lzeSkKK2RubAktV3RyYWRpdGlvbmFsIChjb21iaW5lcyB0b28gbWFueSB1bnJlbGF0ZWQgbWVzc2FnZXMsIG9ubHkgYSBmZXcgdXNlZnVsKQorZG5sCS1Xd3JpdGUtc3RyaW5ncyAodG9vIG5vaXN5LCBidXQgc2hvdWxkIHJldmlldyBvY2Nhc2lvbmFsbHkpLiAgVGhpcworZG5sCQlpcyBlbmFibGVkIGZvciBuY3Vyc2VzIHVzaW5nICItLWVuYWJsZS1jb25zdCIuCitkbmwJLXBlZGFudGljCitkbmwKK2RubCBQYXJhbWV0ZXI6CitkbmwJJDEgaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBnY2Mgd2FybmluZyBmbGFncyB0aGF0IGEgcGFydGljdWxhcgorZG5sCQlhcHBsaWNhdGlvbiBtaWdodCB3YW50IHRvIHVzZSwgZS5nLiwgIm5vLXVudXNlZCIgZm9yCitkbmwJCS1Xbm8tdW51c2VkCitkbmwgU3BlY2lhbDoKK2RubAlJZiAkd2l0aF9leHRfY29uc3QgaXMgInllcyIsIGFkZCBhIGNoZWNrIGZvciAtV3dyaXRlLXN0cmluZ3MKK2RubAorQUNfREVGVU4oW0NGX0dDQ19XQVJOSU5HU10sCitbCitBQ19SRVFVSVJFKFtDRl9HQ0NfVkVSU0lPTl0pCitDRl9JTlRFTF9DT01QSUxFUihHQ0MsSU5URUxfQ09NUElMRVIsQ0ZMQUdTKQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSBfX29saW5lX18gIiR7YXNfbWUtY29uZmlndXJlfSIKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W1tdXSkgeyByZXR1cm4gKGFyZ3ZbW2FyZ2MtMV1dID09IDApIDsgfQorRU9GCisKK2lmIHRlc3QgIiRJTlRFTF9DT01QSUxFUiIgPSB5ZXMKK3RoZW4KKyMgVGhlICItd2RYWFgiIG9wdGlvbnMgc3VwcHJlc3Mgd2FybmluZ3M6CisjIHJlbWFyayAjMTQxOTogZXh0ZXJuYWwgZGVjbGFyYXRpb24gaW4gcHJpbWFyeSBzb3VyY2UgZmlsZQorIyByZW1hcmsgIzE2ODI6IGltcGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4MzogZXhwbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlciBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxNjg0OiBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBzYW1lLXNpemVkIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE5MzogemVybyB1c2VkIGZvciB1bmRlZmluZWQgcHJlcHJvY2Vzc2luZyBpZGVudGlmaWVyCisjIHJlbWFyayAjNTkzOiB2YXJpYWJsZSAiY3Vyc19zYl9sZWZ0X2Fycm93IiB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCisjIHJlbWFyayAjODEwOiBjb252ZXJzaW9uIGZyb20gImludCIgdG8gIkRpbWVuc2lvbj17dW5zaWduZWQgc2hvcnR9IiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzCisjIHJlbWFyayAjODY5OiBwYXJhbWV0ZXIgInR3IiB3YXMgbmV2ZXIgcmVmZXJlbmNlZAorIyByZW1hcmsgIzk4MTogb3BlcmFuZHMgYXJlIGV2YWx1YXRlZCBpbiB1bnNwZWNpZmllZCBvcmRlcgorIyB3YXJuaW5nICMyNjk6IGludmFsaWQgZm9ybWF0IHN0cmluZyBjb252ZXJzaW9uCisKKwlBQ19DSEVDS0lORyhbZm9yICRDQyB3YXJuaW5nIG9wdGlvbnNdKQorCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCUVYVFJBX0NGTEFHUz0iLVdhbGwiCisJZm9yIGNmX29wdCBpbiBcCisJCXdkMTQxOSBcCisJCXdkMTY4MiBcCisJCXdkMTY4MyBcCisJCXdkMTY4NCBcCisJCXdkMTkzIFwKKwkJd2QyNzkgXAorCQl3ZDU5MyBcCisJCXdkODEwIFwKKwkJd2Q4NjkgXAorCQl3ZDk4MQorCWRvCisJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTICRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgQUNfTVNHX1JFU1VMVCguLi4gLSRjZl9vcHQpCisJCQlFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWZpCisJZG9uZQorCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCitlbGlmIHRlc3QgIiRHQ0MiID0geWVzCit0aGVuCisJQUNfQ0hFQ0tJTkcoW2ZvciAkQ0Mgd2FybmluZyBvcHRpb25zXSkKKwljZl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlFWFRSQV9DRkxBR1M9Ii1XIC1XYWxsIgorCWNmX3dhcm5fQ09OU1Q9IiIKKwl0ZXN0ICIkd2l0aF9leHRfY29uc3QiID0geWVzICYmIGNmX3dhcm5fQ09OU1Q9Ild3cml0ZS1zdHJpbmdzIgorCWZvciBjZl9vcHQgaW4gXAorCQlXYmFkLWZ1bmN0aW9uLWNhc3QgXAorCQlXY2FzdC1hbGlnbiBcCisJCVdjYXN0LXF1YWwgXAorCQlXaW5saW5lIFwKKwkJV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKwkJV21pc3NpbmctcHJvdG90eXBlcyBcCisJCVduZXN0ZWQtZXh0ZXJucyBcCisJCVdwb2ludGVyLWFyaXRoIFwKKwkJV3NoYWRvdyBcCisJCVdzdHJpY3QtcHJvdG90eXBlcyBcCisJCVd1bmRlZiAkY2Zfd2Fybl9DT05TVCAkMQorCWRvCisJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTICRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgQUNfTVNHX1JFU1VMVCguLi4gLSRjZl9vcHQpCisJCQljYXNlICRjZl9vcHQgaW4gIyh2aQorCQkJV2Nhc3QtcXVhbCkgIyh2aQorCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURYVFNUUklOR0RFRklORVMiCisJCQkJOzsKKwkJCVdpbmxpbmUpICModmkKKwkJCQljYXNlICRHQ0NfVkVSU0lPTiBpbgorCQkJCTMuMyopCisJCQkJCUNGX1ZFUkJPU0UoZmVhdHVyZSBpcyBicm9rZW4gaW4gZ2NjICRHQ0NfVkVSU0lPTikKKwkJCQkJY29udGludWU7OworCQkJCWVzYWMKKwkJCQk7OworCQkJZXNhYworCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKworQUNfU1VCU1QoRVhUUkFfQ0ZMQUdTKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9HTlVfU09VUkNFIHZlcnNpb246IDYgdXBkYXRlZDogMjAwNS8wNy8wOSAxMzoyMzowNworZG5sIC0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB3ZSBtdXN0IGRlZmluZSBfR05VX1NPVVJDRSB0byBnZXQgYSByZWFzb25hYmxlIHZhbHVlIGZvcgorZG5sIF9YT1BFTl9TT1VSQ0UsIHVwb24gd2hpY2ggbWFueSBQT1NJWCBkZWZpbml0aW9ucyBkZXBlbmQuICBUaGlzIGlzIGEgZGVmZWN0CitkbmwgKG9yIG1pc2ZlYXR1cmUpIG9mIGdsaWJjMiwgd2hpY2ggYnJlYWtzIHBvcnRhYmlsaXR5IG9mIG1hbnkgYXBwbGljYXRpb25zLAorZG5sIHNpbmNlIGl0IGlzIGludGVyd292ZW4gd2l0aCBHTlUgZXh0ZW5zaW9ucy4KK2RubAorZG5sIFdlbGwsIHllcyB3ZSBjb3VsZCB3b3JrIGFyb3VuZCBpdC4uLgorQUNfREVGVU4oW0NGX0dOVV9TT1VSQ0VdLAorWworQUNfQ0FDSEVfQ0hFQ0soaWYgd2UgbXVzdCBkZWZpbmUgX0dOVV9TT1VSQ0UsY2ZfY3ZfZ251X3NvdXJjZSxbCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLAorCVtjZl9jdl9nbnVfc291cmNlPW5vXSwKKwlbY2Zfc2F2ZT0iJENQUEZMQUdTIgorCSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0dOVV9TT1VSQ0UiCisJIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfZ251X3NvdXJjZT1ub10sCisJW2NmX2N2X2dudV9zb3VyY2U9eWVzXSkKKwlDUFBGTEFHUz0iJGNmX3NhdmUiCisJXSkKK10pCit0ZXN0ICIkY2ZfY3ZfZ251X3NvdXJjZSIgPSB5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9HTlVfU09VUkNFIgorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9IRUFERVJfUEFUSCB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDIvMTEvMTAgMTQ6NDY6NTkKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGhlYWRlci1maWxlCitBQ19ERUZVTihbQ0ZfSEVBREVSX1BBVEhdLAorW0NGX1NVQkRJUl9QQVRIKCQxLCQyLGluY2x1ZGUpCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gTk9ORSAmJiBcCit0ZXN0ICIkaW5jbHVkZWRpciIgIT0gIi91c3IvaW5jbHVkZSIgJiYgXAordGVzdCAtZCAiJGluY2x1ZGVkaXIiICYmIHsKKwl0ZXN0IC1kICRpbmNsdWRlZGlyICYmICAgICQxPSJbJF0kMSAkaW5jbHVkZWRpciIKKwl0ZXN0IC1kICRpbmNsdWRlZGlyLyQyICYmICQxPSJbJF0kMSAkaW5jbHVkZWRpci8kMiIKK30KKwordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRvbGRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpciAgICAmJiAkMT0iWyRdJDEgJG9sZGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpci8kMiAmJiAkMT0iWyRdJDEgJG9sZGluY2x1ZGVkaXIvJDIiCit9CisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfSU5IRVJJVF9TQ1JJUFQgdmVyc2lvbjogMiB1cGRhdGVkOiAyMDAzLzAzLzAxIDIzOjUwOjQyCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBJZiB3ZSBkbyBub3QgaGF2ZSBhIGdpdmVuIHNjcmlwdCwgbG9vayBmb3IgaXQgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCitBQ19ERUZVTihbQ0ZfSU5IRVJJVF9TQ1JJUFRdLAorWwordGVzdCAtZiAkMSB8fCAoIHRlc3QgLWYgLi4vJDEgJiYgY3AgLi4vJDEgLi8gKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9JTlRFTF9DT01QSUxFUiB2ZXJzaW9uOiAzIHVwZGF0ZWQ6IDIwMDUvMDgvMDYgMTg6Mzc6MjkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBnaXZlbiBjb21waWxlciBpcyByZWFsbHkgdGhlIEludGVsIGNvbXBpbGVyIGZvciBMaW51eC4gIEl0CitkbmwgdHJpZXMgdG8gaW1pdGF0ZSBnY2MsIGJ1dCBkb2VzIG5vdCByZXR1cm4gYW4gZXJyb3Igd2hlbiBpdCBmaW5kcyBhIG1pc21hdGNoCitkbmwgYmV0d2VlbiBwcm90b3R5cGVzLCBlLmcuLCBhcyBleGVyY2lzZWQgYnkgQ0ZfTUlTU0lOR19DSEVDSy4KK2RubAorZG5sIFRoaXMgbWFjcm8gc2hvdWxkIGJlIHJ1biAic29vbiIgYWZ0ZXIgQUNfUFJPR19DQyBvciBBQ19QUk9HX0NQTFVTUExVUywgdG8KK2RubCBlbnN1cmUgdGhhdCBpdCBpcyBub3QgbWlzdGFrZW4gZm9yIGdjYy9nKysuICBJdCBpcyBub3JtYWxseSBpbnZva2VkIGZyb20KK2RubCB0aGUgd3JhcHBlcnMgZm9yIGdjYyBhbmQgZysrIHdhcm5pbmdzLgorZG5sCitkbmwgJDEgPSBHQ0MgKGRlZmF1bHQpIG9yIEdYWAorZG5sICQyID0gSU5URUxfQ09NUElMRVIgKGRlZmF1bHQpIG9yIElOVEVMX0NQTFVTUExVUworZG5sICQzID0gQ0ZMQUdTIChkZWZhdWx0KSBvciBDWFhGTEFHUworQUNfREVGVU4oW0NGX0lOVEVMX0NPTVBJTEVSXSxbCitpZmVsc2UoJDIsLElOVEVMX0NPTVBJTEVSLFskMl0pPW5vCisKK2lmIHRlc3QgIiRpZmVsc2UoJDEsLFskMV0sR0NDKSIgPSB5ZXMgOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbgorCWxpbnV4KnxnbnUqKQorCQlBQ19NU0dfQ0hFQ0tJTkcoaWYgdGhpcyBpcyByZWFsbHkgSW50ZWwgaWZlbHNlKCQxLEdYWCxDKyssQykgY29tcGlsZXIpCisJCWNmX3NhdmVfQ0ZMQUdTPSIkaWZlbHNlKCQzLCxDRkxBR1MsWyQzXSkiCisJCWlmZWxzZSgkMywsQ0ZMQUdTLFskM10pPSIkaWZlbHNlKCQzLCxDRkxBR1MsWyQzXSkgLW5vLWdjYyIKKwkJQUNfVFJZX0NPTVBJTEUoW10sWworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKK10sW2lmZWxzZSgkMiwsSU5URUxfQ09NUElMRVIsWyQyXSk9eWVzCitjZl9zYXZlX0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIC13ZTE0NyAtbm8tZ2NjIgorXSxbXSkKKwkJaWZlbHNlKCQzLCxDRkxBR1MsWyQzXSk9IiRjZl9zYXZlX0NGTEFHUyIKKwkJQUNfTVNHX1JFU1VMVCgkaWZlbHNlKCQyLCxJTlRFTF9DT01QSUxFUixbJDJdKSkKKwkJOzsKKwllc2FjCitmaQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9MSUJSQVJZX1BBVEggdmVyc2lvbjogNyB1cGRhdGVkOiAyMDAyLzExLzEwIDE0OjQ2OjU5CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29uc3RydWN0IGEgc2VhcmNoLWxpc3QgZm9yIGEgbm9uc3RhbmRhcmQgbGlicmFyeS1maWxlCitBQ19ERUZVTihbQ0ZfTElCUkFSWV9QQVRIXSwKK1tDRl9TVUJESVJfUEFUSCgkMSwkMixsaWIpXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9NU0dfTE9HIHZlcnNpb246IDQgdXBkYXRlZDogMjAwNy8wNy8yOSAwOTo1NToxMgorZG5sIC0tLS0tLS0tLS0KK2RubCBXcml0ZSBhIGRlYnVnIG1lc3NhZ2UgdG8gY29uZmlnLmxvZywgYWxvbmcgd2l0aCB0aGUgbGluZSBudW1iZXIgaW4gdGhlCitkbmwgY29uZmlndXJlIHNjcmlwdC4KK0FDX0RFRlVOKFtDRl9NU0dfTE9HXSxbCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06X19vbGluZV9fOiB0ZXN0aW5nICQqIC4uLiIgMT4mQUNfRkRfQ0MKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTkNVUlNFU19DQ19DSEVDSyB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMTA6Mzk6MDUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgd2UgY2FuIGNvbXBpbGUgd2l0aCBuY3Vyc2VzJyBoZWFkZXIgZmlsZQorZG5sICQxIGlzIHRoZSBjYWNoZSB2YXJpYWJsZSB0byBzZXQKK2RubCAkMiBpcyB0aGUgaGVhZGVyLWZpbGUgdG8gaW5jbHVkZQorZG5sICQzIGlzIHRoZSByb290IG5hbWUgKG5jdXJzZXMgb3IgbmN1cnNlc3cpCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19DQ19DSEVDS10sWworCUFDX1RSWV9DT01QSUxFKFsKK11pZmVsc2UoJDMsbmN1cnNlc3csWworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjdW5kZWYgIEhBVkVfTElCVVRGOF9ICS8qIGluIGNhc2Ugd2UgdXNlZCBDRl9VVEY4X0xJQiAqLworI2RlZmluZSBIQVZFX0xJQlVURjhfSAkvKiB0byBmb3JjZSBuY3Vyc2VzJyBoZWFkZXIgZmlsZSB0byB1c2UgY2NoYXJfdCAqLworXSlbCisjaW5jbHVkZSA8JDI+XSxbCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCitdaWZlbHNlKCQzLG5jdXJzZXN3LFsKKyNpZm5kZWYgV0FDU19CU1NCCisJbWFrZSBhbiBlcnJvcgorI2VuZGlmCitdKVsKK3ByaW50ZigiJXNcbiIsIE5DVVJTRVNfVkVSU0lPTik7CisjZWxzZQorI2lmZGVmIF9fTkNVUlNFU19ICitwcmludGYoIm9sZFxuIik7CisjZWxzZQorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorI2VuZGlmCisJXQorCSxbJDE9JDJdCisJLFskMT1ub10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX05DVVJTRVNfQ1BQRkxBR1MgdmVyc2lvbjogMTkgdXBkYXRlZDogMjAwNy8wNy8yOSAxMzozNToyMAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBMb29rIGZvciB0aGUgU1ZyNCBjdXJzZXMgY2xvbmUgJ25jdXJzZXMnIGluIHRoZSBzdGFuZGFyZCBwbGFjZXMsIGFkanVzdGluZworZG5sIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSBzbyB3ZSBjYW4gaW5jbHVkZSBpdHMgaGVhZGVyLgorZG5sCitkbmwgVGhlIGhlYWRlciBmaWxlcyBtYXkgYmUgaW5zdGFsbGVkIGFzIGVpdGhlciBjdXJzZXMuaCwgb3IgbmN1cnNlcy5oICh3b3VsZAorZG5sIGJlIG9ic29sZXRlLCBleGNlcHQgdGhhdCBzb21lIHBhY2thZ2VycyBwcmVmZXIgdGhpcyBuYW1lIHRvIGRpc3Rpbmd1aXNoIGl0CitkbmwgZnJvbSBhICJuYXRpdmUiIGN1cnNlcyBpbXBsZW1lbnRhdGlvbikuICBJZiBub3QgaW5zdGFsbGVkIGZvciBvdmVyd3JpdGUsCitkbmwgdGhlIGN1cnNlcy5oIGZpbGUgd291bGQgYmUgaW4gYW4gbmN1cnNlcyBzdWJkaXJlY3RvcnkgKGUuZy4sCitkbmwgL3Vzci9pbmNsdWRlL25jdXJzZXMpLCBidXQgc29tZW9uZSBtYXkgaGF2ZSBpbnN0YWxsZWQgb3ZlcndyaXRpbmcgdGhlCitkbmwgdmVuZG9yJ3MgY3Vyc2VzLiAgT25seSB2ZXJ5IG9sZCB2ZXJzaW9ucyAocHJlLTEuOS4yZCwgdGhlIGZpcnN0IGF1dG9jb25mJ2QKK2RubCB2ZXJzaW9uKSBvZiBuY3Vyc2VzIGRvbid0IGRlZmluZSBlaXRoZXIgX19OQ1VSU0VTX0ggb3IgTkNVUlNFU19WRVJTSU9OIGluCitkbmwgdGhlIGhlYWRlci4KK2RubAorZG5sIElmIHRoZSBpbnN0YWxsZXIgaGFzIHNldCAkQ0ZMQUdTIG9yICRDUFBGTEFHUyBzbyB0aGF0IHRoZSBuY3Vyc2VzIGhlYWRlcgorZG5sIGlzIGFscmVhZHkgaW4gdGhlIGluY2x1ZGUtcGF0aCwgZG9uJ3QgZXZlbiBib3RoZXIgd2l0aCB0aGlzLCBzaW5jZSB3ZSBjYW5ub3QKK2RubCBlYXNpbHkgZGV0ZXJtaW5lIHdoaWNoIGZpbGUgaXQgaXMuICBJbiB0aGlzIGNhc2UsIGl0IGhhcyB0byBiZSA8Y3Vyc2VzLmg+LgorZG5sCitkbmwgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBnaXZlcyB0aGUgcm9vdCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpbiBjYXNlIGl0IGlzCitkbmwgbm90IGluc3RhbGxlZCBhcyB0aGUgZGVmYXVsdCBjdXJzZXMgbGlicmFyeS4gIFRoYXQgaXMgaG93IHRoZQorZG5sIHdpZGUtY2hhcmFjdGVyIHZlcnNpb24gb2YgbmN1cnNlcyBpcyBpbnN0YWxsZWQuCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19DUFBGTEFHU10sCitbQUNfUkVRVUlSRShbQ0ZfV0lUSF9DVVJTRVNfRElSXSkKKworQUNfUFJPVklERShbQ0ZfQ1VSU0VTX0NQUEZMQUdTXSlkbmwKK2NmX25jdWhkcl9yb290PWlmZWxzZSgkMSwsbmN1cnNlcywkMSkKKwordGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIiICYmIFwKK3Rlc3QgIiRjZl9jdl9jdXJzZXNfZGlyIiAhPSAibm8iICYmIHsgXAorICBDRl9BRERfSU5DRElSKCRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUgJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QpCit9CisKK0FDX0NBQ0hFX0NIRUNLKGZvciAkY2ZfbmN1aGRyX3Jvb3QgaGVhZGVyIGluIGluY2x1ZGUtcGF0aCwgY2ZfY3ZfbmN1cnNlc19oLFsKKwljZl9oZWFkZXJfbGlzdD0iJGNmX25jdWhkcl9yb290L2N1cnNlcy5oICRjZl9uY3VoZHJfcm9vdC9uY3Vyc2VzLmgiCisJKCB0ZXN0ICIkY2ZfbmN1aGRyX3Jvb3QiID0gbmN1cnNlcyB8fCB0ZXN0ICIkY2ZfbmN1aGRyX3Jvb3QiID0gbmN1cnNlc3cgKSAmJiBjZl9oZWFkZXJfbGlzdD0iJGNmX2hlYWRlcl9saXN0IGN1cnNlcy5oIG5jdXJzZXMuaCIKKwlmb3IgY2ZfaGVhZGVyIGluICRjZl9oZWFkZXJfbGlzdAorCWRvCisJCUNGX05DVVJTRVNfQ0NfQ0hFQ0soY2ZfY3ZfbmN1cnNlc19oLCRjZl9oZWFkZXIsJDEpCisJCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2giICE9IG5vICYmIGJyZWFrCisJZG9uZQorXSkKKworQ0ZfTkNVUlNFU19IRUFERVIKK0NGX1RFUk1fSEVBREVSCisKKyMgc29tZSBhcHBsaWNhdGlvbnMgbmVlZCB0aGlzLCBidXQgc2hvdWxkIGNoZWNrIGZvciBOQ1VSU0VTX1ZFUlNJT04KK0FDX0RFRklORShOQ1VSU0VTKQorCitDRl9OQ1VSU0VTX1ZFUlNJT04KK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTkNVUlNFU19IRUFERVIgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA1LzEyLzMxIDEzOjI4OjM3CitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIGEgImN1cnNlcyIgaGVhZGVyIGZpbGUsIGUuZywuICJjdXJzZXMuaCIsIG9yIG9uZSBvZiB0aGUgbW9yZSBjb21tb24KK2RubCB2YXJpYXRpb25zIG9mIG5jdXJzZXMnIGluc3RhbGxzLgorZG5sCitkbmwgU2VlIGFsc28gQ0ZfQ1VSU0VTX0hFQURFUiwgd2hpY2ggc2V0cyB0aGUgc2FtZSBjYWNoZSB2YXJpYWJsZS4KK0FDX0RFRlVOKFtDRl9OQ1VSU0VTX0hFQURFUl0sWworCitpZiB0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oIiAhPSBubyA7IHRoZW4KKwljZl9jdl9uY3Vyc2VzX2hlYWRlcj0kY2ZfY3ZfbmN1cnNlc19oCitlbHNlCisKK0FDX0NBQ0hFX0NIRUNLKGZvciAkY2ZfbmN1aGRyX3Jvb3QgaW5jbHVkZS1wYXRoLCBjZl9jdl9uY3Vyc2VzX2gyLFsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobworCUNGX0hFQURFUl9QQVRIKGNmX3NlYXJjaCwkY2ZfbmN1aGRyX3Jvb3QpCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gc2VhcmNoIHBhdGggJGNmX3NlYXJjaAorCWNmX3NhdmUyX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisJZm9yIGNmX2luY2RpciBpbiAkY2Zfc2VhcmNoCisJZG8KKwkJQ0ZfQUREX0lOQ0RJUigkY2ZfaW5jZGlyKQorCQlmb3IgY2ZfaGVhZGVyIGluIFwKKwkJCW5jdXJzZXMuaCBcCisJCQljdXJzZXMuaAorCQlkbworCQkJQ0ZfTkNVUlNFU19DQ19DSEVDSyhjZl9jdl9uY3Vyc2VzX2gyLCRjZl9oZWFkZXIsJDEpCisJCQlpZiB0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oMiIgIT0gbm8gOyB0aGVuCisJCQkJY2ZfY3ZfbmN1cnNlc19oMj0kY2ZfaW5jZGlyLyRjZl9oZWFkZXIKKwkJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAkYWNfbiAiCS4uLiBmb3VuZCAkYWNfYyIgMT4mQUNfRkRfTVNHCisJCQkJYnJlYWsKKwkJCWZpCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0ZWQgJGNmX2luY2Rpci8kY2ZfaGVhZGVyIiAxPiZBQ19GRF9NU0cKKwkJZG9uZQorCQlDUFBGTEFHUz0iJGNmX3NhdmUyX0NQUEZMQUdTIgorCQl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oMiIgIT0gbm8gJiYgYnJlYWsKKwlkb25lCisJdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiID0gbm8gJiYgQUNfRVJST1Iobm90IGZvdW5kKQorCV0pCisKKwlDRl9ESVJOQU1FKGNmXzFzdF9pbmNkaXIsJGNmX2N2X25jdXJzZXNfaDIpCisJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9YGJhc2VuYW1lICRjZl9jdl9uY3Vyc2VzX2gyYAorCWlmIHRlc3QgYGJhc2VuYW1lICRjZl8xc3RfaW5jZGlyYCA9ICRjZl9uY3VoZHJfcm9vdCA7IHRoZW4KKwkJY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX25jdWhkcl9yb290LyRjZl9jdl9uY3Vyc2VzX2hlYWRlcgorCWZpCisJQ0ZfQUREX0lOQ0RJUigkY2ZfMXN0X2luY2RpcikKKworZmkKKworIyBTZXQgZGVmaW5pdGlvbnMgdG8gYWxsb3cgaWZkZWYnaW5nIGZvciBuY3Vyc2VzLmgKKworY2FzZSAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIgaW4gIyAodmkKKypuY3Vyc2VzLmgpCisJQUNfREVGSU5FKEhBVkVfTkNVUlNFU19IKQorCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluICMgKHZpCituY3Vyc2VzL2N1cnNlcy5ofG5jdXJzZXMvbmN1cnNlcy5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNfTkNVUlNFU19IKQorCTs7CituY3Vyc2Vzdy9jdXJzZXMuaHxuY3Vyc2Vzdy9uY3Vyc2VzLmgpCisJQUNfREVGSU5FKEhBVkVfTkNVUlNFU1dfTkNVUlNFU19IKQorCTs7Citlc2FjCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfTkNVUlNFU19MSUJTIHZlcnNpb246IDEzIHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMTA6Mjk6MjAKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBMb29rIGZvciB0aGUgbmN1cnNlcyBsaWJyYXJ5LiAgVGhpcyBpcyBhIGxpdHRsZSBjb21wbGljYXRlZCBvbiBMaW51eCwKK2RubCBiZWNhdXNlIGl0IG1heSBiZSBsaW5rZWQgd2l0aCB0aGUgZ3BtIChnZW5lcmFsIHB1cnBvc2UgbW91c2UpIGxpYnJhcnkuCitkbmwgU29tZSBkaXN0cmlidXRpb25zIGhhdmUgZ3BtIGxpbmtlZCB3aXRoIChic2QpIGN1cnNlcywgd2hpY2ggbWFrZXMgaXQKK2RubCB1bnVzYWJsZSB3aXRoIG5jdXJzZXMuICBIb3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIGxpbmsgd2l0aCBncG0gdW5sZXNzCitkbmwgbmN1cnNlcyBoYXMgYSBkZXBlbmRlbmN5LCBzaW5jZSBncG0gaXMgbm9ybWFsbHkgc2V0IHVwIGFzIGEgc2hhcmVkIGxpYnJhcnksCitkbmwgYW5kIHRoZSBsaW5rZXIgd2lsbCByZWNvcmQgYSBkZXBlbmRlbmN5LgorZG5sCitkbmwgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBnaXZlcyB0aGUgcm9vdCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpbiBjYXNlIGl0IGlzCitkbmwgbm90IGluc3RhbGxlZCBhcyB0aGUgZGVmYXVsdCBjdXJzZXMgbGlicmFyeS4gIFRoYXQgaXMgaG93IHRoZQorZG5sIHdpZGUtY2hhcmFjdGVyIHZlcnNpb24gb2YgbmN1cnNlcyBpcyBpbnN0YWxsZWQuCitBQ19ERUZVTihbQ0ZfTkNVUlNFU19MSUJTXSwKK1tBQ19SRVFVSVJFKFtDRl9OQ1VSU0VTX0NQUEZMQUdTXSkKKworY2ZfbmN1bGliX3Jvb3Q9aWZlbHNlKCQxLCxuY3Vyc2VzLCQxKQorCSMgVGhpcyB3b3JrcywgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHdlIGZpbmQgZ3BtLCBidXQKKwkjIG5jdXJzZXMgaXMgaW4gYSBub25zdGFuZGFyZCBsb2NhdGlvbiB2aWEgJExJQlMsIGFuZCB3ZSByZWFsbHkgd2FudAorCSMgdG8gbGluayBncG0uCitjZl9uY3Vyc2VzX0xJQlM9IiIKK2NmX25jdXJzZXNfU0FWRT0iJExJQlMiCitBQ19DSEVDS19MSUIoZ3BtLEdwbV9PcGVuLAorCVtBQ19DSEVDS19MSUIoZ3BtLGluaXRzY3IsCisJCVtMSUJTPSIkY2ZfbmN1cnNlc19TQVZFIl0sCisJCVtjZl9uY3Vyc2VzX0xJQlM9Ii1sZ3BtIl0pXSkKKworY2FzZSAkaG9zdF9vcyBpbiAjKHZpCitmcmVlYnNkKikKKwkjIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgeW91IGFyZSBsaW5raW5nIGFnYWluc3QgYW4gb2Jzb2xldGUKKwkjIHZlcnNpb24gb2YgbmN1cnNlcyAoYnV0IGl0IHNob3VsZCBkbyBubyBoYXJtLCBzaW5jZSBpdCdzIHN0YXRpYykuCisJaWYgdGVzdCAiJGNmX25jdWxpYl9yb290IiA9IG5jdXJzZXMgOyB0aGVuCisJCUFDX0NIRUNLX0xJQihteXRpbmZvLHRnb3RvLFtjZl9uY3Vyc2VzX0xJQlM9Ii1sbXl0aW5mbyAkY2ZfbmN1cnNlc19MSUJTIl0pCisJZmkKKwk7OworZXNhYworCitMSUJTPSIkY2ZfbmN1cnNlc19MSUJTICRMSUJTIgorCitpZiAoIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiB0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiApCit0aGVuCisJQ0ZfQUREX0xJQkRJUigkY2ZfY3ZfY3Vyc2VzX2Rpci9saWIpCisJTElCUz0iLWwkY2ZfbmN1bGliX3Jvb3QgJExJQlMiCitlbHNlCisJQ0ZfRklORF9MSUJSQVJZKCRjZl9uY3VsaWJfcm9vdCwkY2ZfbmN1bGliX3Jvb3QsCisJCVsjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKKwkJW2luaXRzY3IoKV0sCisJCWluaXRzY3IpCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmN1cnNlc19MSUJTIiA7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUykKKwljZl9uY3Vyc2VzX1NBVkU9IiRMSUJTIgorCWZvciBwIGluICRjZl9uY3Vyc2VzX0xJQlMgOyBkbworCQlxPWBlY2hvICRMSUJTIHwgc2VkIC1lICJzJSRwICUlIiAtZSAicyUkcCQlJSJgCisJCWlmIHRlc3QgIiRxIiAhPSAiJExJQlMiIDsgdGhlbgorCQkJTElCUz0iJHEiCisJCWZpCisJZG9uZQorCUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+XSwKKwkJW2luaXRzY3IoKTsgbW91c2VtYXNrKDAsMCk7IHRnb3RvKChjaGFyICopMCwgMCwgMCk7XSwKKwkJW0FDX01TR19SRVNVTFQoeWVzKV0sCisJCVtBQ19NU0dfUkVTVUxUKG5vKQorCQkgTElCUz0iJGNmX25jdXJzZXNfU0FWRSJdKQorZmkKKworQ0ZfVVBQRVIoY2ZfbmN1bGliX1JPT1QsSEFWRV9MSUIkY2ZfbmN1bGliX3Jvb3QpCitBQ19ERUZJTkVfVU5RVU9URUQoJGNmX25jdWxpYl9ST09UKQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9OQ1VSU0VTX1ZFUlNJT04gdmVyc2lvbjogMTIgdXBkYXRlZDogMjAwNy8wNC8yOCAwOToxNTo1NQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciB0aGUgdmVyc2lvbiBvZiBuY3Vyc2VzLCB0byBhaWQgaW4gcmVwb3J0aW5nIGJ1Z3MsIGV0Yy4KK2RubCBDYWxsIENGX0NVUlNFU19DUFBGTEFHUyBmaXJzdCwgb3IgQ0ZfTkNVUlNFU19DUFBGTEFHUy4gIFdlIGRvbid0IHVzZQorZG5sIEFDX1JFUVVJUkUgc2luY2UgdGhhdCBkb2VzIG5vdCB3b3JrIHdpdGggdGhlIHNoZWxsJ3MgaWYvdGhlbi9lbHNlL2ZpLgorQUNfREVGVU4oW0NGX05DVVJTRVNfVkVSU0lPTl0sCitbCitBQ19SRVFVSVJFKFtDRl9DVVJTRVNfQ1BQRkxBR1NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soZm9yIG5jdXJzZXMgdmVyc2lvbiwgY2ZfY3ZfbmN1cnNlc192ZXJzaW9uLFsKKwljZl9jdl9uY3Vyc2VzX3ZlcnNpb249bm8KKwljZl90ZW1wZmlsZT1vdXQkJAorCXJtIC1mICRjZl90ZW1wZmlsZQorCUFDX1RSWV9SVU4oWworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpCit7CisJRklMRSAqZnAgPSBmb3BlbigiJGNmX3RlbXBmaWxlIiwgInciKTsKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKyMgaWZkZWYgTkNVUlNFU19WRVJTSU9OX1BBVENICisJZnByaW50ZihmcCwgIiVzLiVkXG4iLCBOQ1VSU0VTX1ZFUlNJT04sIE5DVVJTRVNfVkVSU0lPTl9QQVRDSCk7CisjIGVsc2UKKwlmcHJpbnRmKGZwLCAiJXNcbiIsIE5DVVJTRVNfVkVSU0lPTik7CisjIGVuZGlmCisjZWxzZQorIyBpZmRlZiBfX05DVVJTRVNfSAorCWZwcmludGYoZnAsICJvbGRcbiIpOworIyBlbHNlCisJbWFrZSBhbiBlcnJvcgorIyBlbmRpZgorI2VuZGlmCisJJHtjZl9jdl9tYWluX3JldHVybi1yZXR1cm59KDApOworfV0sWworCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1gY2F0ICRjZl90ZW1wZmlsZWBdLCxbCisKKwkjIFRoaXMgd2lsbCBub3Qgd29yayBpZiB0aGUgcHJlcHJvY2Vzc29yIHNwbGl0cyB0aGUgbGluZSBhZnRlciB0aGUKKwkjIEF1dG9jb25mIHRva2VuLiAgVGhlICd1bnByb3RvJyBwcm9ncmFtIGRvZXMgdGhhdC4KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjdW5kZWYgQXV0b2NvbmYKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KK0F1dG9jb25mIE5DVVJTRVNfVkVSU0lPTgorI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorQXV0b2NvbmYgIm9sZCIKKyNlbmRpZgorOworI2VuZGlmCitFT0YKKwljZl90cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCAyPiZBQ19GRF9DQyB8IGdyZXAgJ15BdXRvY29uZiAnID5jb25mdGVzdC5vdXQiCisJQUNfVFJZX0VWQUwoY2ZfdHJ5KQorCWlmIHRlc3QgLWYgY29uZnRlc3Qub3V0IDsgdGhlbgorCQljZl9vdXQ9YGNhdCBjb25mdGVzdC5vdXQgfCBzZWQgLWUgJ3MlXkF1dG9jb25mICUlJyAtZSAncyVeW1teIl1dKiIlJScgLWUgJ3MlIi4qJSUnYAorCQl0ZXN0IC1uICIkY2Zfb3V0IiAmJiBjZl9jdl9uY3Vyc2VzX3ZlcnNpb249IiRjZl9vdXQiCisJCXJtIC1mIGNvbmZ0ZXN0Lm91dAorCWZpCitdKQorCXJtIC1mICRjZl90ZW1wZmlsZQorXSkKK3Rlc3QgIiRjZl9jdl9uY3Vyc2VzX3ZlcnNpb24iID0gbm8gfHwgQUNfREVGSU5FKE5DVVJTRVMpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1BBVEhfU1lOVEFYIHZlcnNpb246IDExIHVwZGF0ZWQ6IDIwMDYvMDkvMDIgMDg6NTU6NDYKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIHRoZSBhcmd1bWVudCB0byBzZWUgdGhhdCBpdCBsb29rcyBsaWtlIGEgcGF0aG5hbWUuICBSZXdyaXRlIGl0IGlmIGl0CitkbmwgYmVnaW5zIHdpdGggb25lIG9mIHRoZSBwcmVmaXgvZXhlY19wcmVmaXggdmFyaWFibGVzLCBhbmQgdGhlbiBhZ2FpbiBpZiB0aGUKK2RubCByZXN1bHQgYmVnaW5zIHdpdGggJ05PTkUnLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgYXV0b2NvbmYncworZG5sIGRlbGF5ZWQgZXZhbHVhdGlvbiBvZiB0aG9zZSBzeW1ib2xzLgorQUNfREVGVU4oW0NGX1BBVEhfU1lOVEFYXSxbCitpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgY2ZfcGF0aF9zeW50YXg9IiRwcmVmaXgiCitlbHNlCisgIGNmX3BhdGhfc3ludGF4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCitmaQorCitjYXNlICIuWyRdJDEiIGluICModmkKKy5cWyRdXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW1thLXpBLVpdXTpbW1xcL11dKikgIyh2aSBPUy8yIEVNWAorICA7OworLlxbJF17KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgJDE9IlskXSQxIgorICBjYXNlICIuWyRdJDEiIGluICModmkKKyAgLk5PTkUvKikKKyAgICAkMT1gZWNobyBbJF0kMSB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgICA7OworICBlc2FjCisgIDs7ICModmkKKy5ub3wuTk9ORS8qKQorICAkMT1gZWNobyBbJF0kMSB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgOzsKKyopCisgIGlmZWxzZSgkMiwsW0FDX0VSUk9SKFtleHBlY3RlZCBhIHBhdGhuYW1lLCBub3QgXCJbJF0kMVwiXSldLCQyKQorICA7OworZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9QRENVUlNFU19YMTEgdmVyc2lvbjogNyB1cGRhdGVkOiAyMDA2LzExLzEyIDE3OjMxOjU5CitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgQ29uZmlndXJlIGZvciBQREN1cnNlcycgWDExIGxpYnJhcnkKK0FDX0RFRlVOKFtDRl9QRENVUlNFU19YMTFdLFsKK0FDX1JFUVVJUkUoW0NGX1hfQVRIRU5BXSkKKworQUNfUEFUSF9QUk9HUyhYQ1VSU0VTX0NPTkZJRyx4Y3Vyc2VzLWNvbmZpZyxub25lKQorCitpZiB0ZXN0ICIkWENVUlNFU19DT05GSUciICE9IG5vbmUgOyB0aGVuCisKK0NQUEZMQUdTPSJgJFhDVVJTRVNfQ09ORklHIC0tY2ZsYWdzYCAkQ1BQRkxBR1MiCitMSUJTPSJgJFhDVVJTRVNfQ09ORklHIC0tbGlic2AgJExJQlMiCisKK2NmX2N2X2xpYl9YQ3Vyc2VzPXllcworCitlbHNlCisKK0xERkxBR1M9IiRMREZMQUdTICRYX0xJQlMiCitDRl9DSEVDS19DRkxBR1MoJFhfQ0ZMQUdTKQorQUNfQ0hFQ0tfTElCKFgxMSxYT3BlbkRpc3BsYXksCisJW0xJQlM9Ii1sWDExICRMSUJTIl0sLAorCVskWF9QUkVfTElCUyAkTElCUyAkWF9FWFRSQV9MSUJTXSkKK0FDX0NBQ0hFX0NIRUNLKGZvciBYQ3Vyc2VzIGxpYnJhcnksY2ZfY3ZfbGliX1hDdXJzZXMsWworTElCUz0iLWxYQ3Vyc2VzICRMSUJTIgorQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPHhjdXJzZXMuaD4KK2NoYXIgKlhDdXJzZXNQcm9ncmFtTmFtZSA9ICJ0ZXN0IjsKK10sW1hDdXJzZXNFeGl0KCk7XSwKK1tjZl9jdl9saWJfWEN1cnNlcz15ZXNdLAorW2NmX2N2X2xpYl9YQ3Vyc2VzPW5vXSkKK10pCisKK2ZpCisKK2lmIHRlc3QgJGNmX2N2X2xpYl9YQ3Vyc2VzID0geWVzIDsgdGhlbgorCUFDX0RFRklORShVTklYKQorCUFDX0RFRklORShYQ1VSU0VTKQorCUFDX0RFRklORShIQVZFX1hDVVJTRVMpCitlbHNlCisJQUNfRVJST1IoQ2Fubm90IGxpbmsgd2l0aCBYQ3Vyc2VzKQorZmkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUE9TSVhfQ19TT1VSQ0UgdmVyc2lvbjogNiB1cGRhdGVkOiAyMDA1LzA3LzE0IDIwOjI1OjEwCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBEZWZpbmUgX1BPU0lYX0NfU09VUkNFIHRvIHRoZSBnaXZlbiBsZXZlbCwgYW5kIF9QT1NJWF9TT1VSQ0UgaWYgbmVlZGVkLgorZG5sCitkbmwJUE9TSVguMS0xOTkwCQkJCV9QT1NJWF9TT1VSQ0UKK2RubAlQT1NJWC4xLTE5OTAgYW5kCQkJX1BPU0lYX1NPVVJDRSBhbmQKK2RubAkJUE9TSVguMi0xOTkyIEMtTGFuZ3VhZ2UJCQlfUE9TSVhfQ19TT1VSQ0U9MgorZG5sCQlCaW5kaW5ncyBPcHRpb24KK2RubAlQT1NJWC4xYi0xOTkzCQkJCV9QT1NJWF9DX1NPVVJDRT0xOTkzMDlMCitkbmwJUE9TSVguMWMtMTk5NgkJCQlfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorZG5sCVgvT3BlbiAyMDAwCQkJCV9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMCitkbmwKK2RubCBQYXJhbWV0ZXJzOgorZG5sCSQxIGlzIHRoZSBub21pbmFsIHZhbHVlIGZvciBfUE9TSVhfQ19TT1VSQ0UKK0FDX0RFRlVOKFtDRl9QT1NJWF9DX1NPVVJDRV0sCitbCitjZl9QT1NJWF9DX1NPVVJDRT1pZmVsc2UoJDEsLDE5OTUwNkwsJDEpCisKK2NmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCitDRl9SRU1PVkVfREVGSU5FKGNmX3RyaW1fQ0ZMQUdTLCRjZl9zYXZlX0NGTEFHUyxfUE9TSVhfQ19TT1VSQ0UpCitDRl9SRU1PVkVfREVGSU5FKGNmX3RyaW1fQ1BQRkxBR1MsJGNmX3NhdmVfQ1BQRkxBR1MsX1BPU0lYX0NfU09VUkNFKQorCitBQ19DQUNIRV9DSEVDSyhpZiB3ZSBzaG91bGQgZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSxjZl9jdl9wb3NpeF9jX3NvdXJjZSxbCisJQ0ZfTVNHX0xPRyhpZiB0aGUgc3ltYm9sIGlzIGFscmVhZHkgZGVmaW5lZCBnbyBubyBmdXJ0aGVyKQorCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZuZGVmIF9QT1NJWF9DX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm9dLAorCVtjZl93YW50X3Bvc2l4X3NvdXJjZT1ubworCSBjYXNlIC4kY2ZfUE9TSVhfQ19TT1VSQ0UgaW4gIyh2aQorCSAuW1sxMl1dPz8qKSAjKHZpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCTs7CisJIC4yKSAjKHZpCisJCWNmX2N2X3Bvc2l4X2Nfc291cmNlPSItRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UiCisJCWNmX3dhbnRfcG9zaXhfc291cmNlPXllcworCQk7OworCSAuKikKKwkJY2Zfd2FudF9wb3NpeF9zb3VyY2U9eWVzCisJCTs7CisJIGVzYWMKKwkgaWYgdGVzdCAiJGNmX3dhbnRfcG9zaXhfc291cmNlIiA9IHllcyA7IHRoZW4KKwkJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLFsKKyNpZmRlZiBfUE9TSVhfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLFtdLAorCQljZl9jdl9wb3NpeF9jX3NvdXJjZT0iJGNmX2N2X3Bvc2l4X2Nfc291cmNlIC1EX1BPU0lYX1NPVVJDRSIpCisJIGZpCisJIENGX01TR19MT0coaWZkZWYgZnJvbSB2YWx1ZSAkY2ZfUE9TSVhfQ19TT1VSQ0UpCisJIENGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCSBDUFBGTEFHUz0iJGNmX3RyaW1fQ1BQRkxBR1MgJGNmX2N2X3Bvc2l4X2Nfc291cmNlIgorCSBDRl9NU0dfTE9HKGlmIHRoZSBzZWNvbmQgY29tcGlsZSBkb2VzIG5vdCBsZWF2ZSBvdXIgZGVmaW5pdGlvbiBpbnRhY3QgZXJyb3IpCisJIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZuZGVmIF9QT1NJWF9DX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwsCisJIFtjZl9jdl9wb3NpeF9jX3NvdXJjZT1ub10pCisJIENGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorCSBDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisJXSkKK10pCisKK2lmIHRlc3QgIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisJQ0ZMQUdTPSIkY2ZfdHJpbV9DRkxBR1MiCisJQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTIgorCWlmIHRlc3QgIiRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPSB5ZXMgOyB0aGVuCisJCWNmX3RlbXBfcG9zaXhfY19zb3VyY2U9YGVjaG8gIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgfCBcCisJCQkJc2VkIC1lICdzLy1ELy1VL2cnIC1lICdzLz1bW14gCV1dKi8vZydgCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJGNmX3RlbXBfcG9zaXhfY19zb3VyY2UiCisJZmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl9jdl9wb3NpeF9jX3NvdXJjZSIKK2ZpCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJHX1JVTEVTIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNi8wNi8wMyAxMTo0NTowOAorZG5sIC0tLS0tLS0tLS0tLQorZG5sIEFwcGVuZCBkZWZpbml0aW9ucyBhbmQgcnVsZXMgZm9yIHRoZSBnaXZlbiBwcm9ncmFtcyB0byB0aGUgc3ViZGlyZWN0b3J5CitkbmwgTWFrZWZpbGVzLCBhbmQgdGhlIHJlY3Vyc2lvbiBydWxlIGZvciB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLgorZG5sCitkbmwgcGFyYW1ldGVycworZG5sCSQxID0gc2NyaXB0IHRvIHJ1bgorZG5sCSQyID0gbGlzdCBvZiBzdWJkaXJlY3RvcmllcworZG5sCitkbmwgdmFyaWFibGVzCitkbmwJJEFXSworQUNfREVGVU4oW0NGX1BSR19SVUxFU10sCitbCitmb3IgY2ZfZGlyIGluICQyCitkbworCWlmIHRlc3QgISAtZCAkc3JjZGlyLyRjZl9kaXI7IHRoZW4KKwkJY29udGludWUKKwllbGlmIHRlc3QgLWYgJHNyY2Rpci8kY2ZfZGlyL3Byb2dyYW1zOyB0aGVuCisJCSRBV0sgLWYgJDEgJHNyY2Rpci8kY2ZfZGlyL3Byb2dyYW1zID4+JGNmX2Rpci9NYWtlZmlsZQorCWZpCitkb25lCisKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUFJPR19DQ19VX0QgdmVyc2lvbjogMSB1cGRhdGVkOiAyMDA1LzA3LzE0IDE2OjU5OjMwCitkbmwgLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiBDIChwcmVwcm9jZXNzb3IpIC1VIGFuZCAtRCBvcHRpb25zIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyCitkbmwgZ2l2ZW4gcmF0aGVyIHRoYW4gYnkgdHlwZSBvZiBvcHRpb24uICBTb21lIGNvbXBpbGVycyBpbnNpc3Qgb24gYXBwbHkgYWxsCitkbmwgb2YgdGhlIC1VIG9wdGlvbnMgYWZ0ZXIgYWxsIG9mIHRoZSAtRCBvcHRpb25zLiAgT3RoZXJzIGFsbG93IG1peGluZyB0aGVtLAorZG5sIGFuZCBtYXkgcHJlZGVmaW5lIHN5bWJvbHMgdGhhdCBjb25mbGljdCB3aXRoIHRob3NlIHdlIGRlZmluZS4KK0FDX0RFRlVOKFtDRl9QUk9HX0NDX1VfRF0sCitbCitBQ19DQUNIRV9DSEVDSyhpZiAkQ0MgLVUgYW5kIC1EIG9wdGlvbnMgd29yayB0b2dldGhlcixjZl9jdl9jY191X2Rfb3B0aW9ucyxbCisJY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCUNQUEZMQUdTPSItVVVfRF9PUFRJT05TIC1EVV9EX09QVElPTlMgLUREX1VfT1BUSU9OUyAtVURfVV9PUFRJT05TIgorCUFDX1RSWV9DT01QSUxFKFtdLFsKKyNpZm5kZWYgVV9EX09QVElPTlMKK21ha2UgYW4gdW5kZWZpbmVkLWVycm9yCisjZW5kaWYKKyNpZmRlZiAgRF9VX09QVElPTlMKK21ha2UgYSBkZWZpbmVkLWVycm9yCisjZW5kaWYKKwldLFsKKwljZl9jdl9jY191X2Rfb3B0aW9ucz15ZXNdLFsKKwljZl9jdl9jY191X2Rfb3B0aW9ucz1ub10pCisJQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfUkVNT1ZFX0RFRklORSB2ZXJzaW9uOiAyIHVwZGF0ZWQ6IDIwMDUvMDcvMDkgMTY6MTI6MTgKK2RubCAtLS0tLS0tLS0tLS0tLS0tCitkbmwgUmVtb3ZlIGFsbCAtVSBhbmQgLUQgb3B0aW9ucyB0aGF0IHJlZmVyIHRvIHRoZSBnaXZlbiBzeW1ib2wgZnJvbSBhIGxpc3QKK2RubCBvZiBDIGNvbXBpbGVyIG9wdGlvbnMuICBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgcHJvYmxlbSB0aGF0IG5vdCBhbGwKK2RubCBjb21waWxlcnMgcHJvY2VzcyAtVSBhbmQgLUQgb3B0aW9ucyBmcm9tIGxlZnQtdG8tcmlnaHQsIHNvIGEgLVUgb3B0aW9uCitkbmwgY2Fubm90IGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBlZmZlY3Qgb2YgYSBwcmVjZWRpbmcgLUQgb3B0aW9uLgorZG5sCitkbmwgJDEgPSB0YXJnZXQgKHdoaWNoIGNvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBzb3VyY2UgdmFyaWFibGUpCitkbmwgJDIgPSBzb3VyY2UgKGluY2x1ZGluZyAnJCcpCitkbmwgJDMgPSBzeW1ib2wgdG8gcmVtb3ZlCitkZWZpbmUoW0NGX1JFTU9WRV9ERUZJTkVdLAorWworIyByZW1vdmUgJDMgc3ltYm9sIGZyb20gJDIKKyQxPWBlY2hvICIkMiIgfCBcCisJc2VkCS1lICdzLy1bW1VEXV0kM1woPVtbXiAJXV0qXClcP1tbIAldXS8gL2cnIFwKKwkJLWUgJ3MvLVtbVURdXSQzXCg9W1teIAldXSpcKVw/WyRdLy9nJ2AKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfU0lHX0FUT01JQ19UIHZlcnNpb246IDIgdXBkYXRlZDogMjAwNS8wOS8xOCAxNzoyNzoxMgorZG5sIC0tLS0tLS0tLS0tLS0tLQorZG5sIHNpZ25hbCBoYW5kbGVyLCBidXQgdGhlcmUgYXJlIHNvbWUgZ2NjIGRlcGVkZW5jaWVzIGluIHRoYXQgcmVjb21tZW5kYXRpb24uCitkbmwgVHJ5IGFueXdheS4KK0FDX0RFRlVOKFtDRl9TSUdfQVRPTUlDX1RdLAorWworQUNfTVNHX0NIRUNLSU5HKGZvciBzaWduYWwgZ2xvYmFsIGRhdGF0eXBlKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3NpZ19hdG9taWNfdCxbCisJZm9yIGNmX3R5cGUgaW4gXAorCQkidm9sYXRpbGUgc2lnX2F0b21pY190IiBcCisJCSJzaWdfYXRvbWljX3QiIFwKKwkJImludCIKKwlkbworCUFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitleHRlcm4gJGNmX3R5cGUgeDsKKyRjZl90eXBlIHg7CitzdGF0aWMgdm9pZCBoYW5kbGVyKGludCBzaWcpCit7CisJeCA9IDU7Cit9XSwKKwkJW3NpZ25hbChTSUdJTlQsIGhhbmRsZXIpOworCQkgeCA9IDFdLAorCQlbY2ZfY3Zfc2lnX2F0b21pY190PSRjZl90eXBlXSwKKwkJW2NmX2N2X3NpZ19hdG9taWNfdD1ub10pCisJCXRlc3QgIiRjZl9jdl9zaWdfYXRvbWljX3QiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCV0pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9zaWdfYXRvbWljX3QpCit0ZXN0ICIkY2ZfY3Zfc2lnX2F0b21pY190IiAhPSBubyAmJiBBQ19ERUZJTkVfVU5RVU9URUQoU0lHX0FUT01JQ19ULCAkY2ZfY3Zfc2lnX2F0b21pY190KQorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9TVUJESVJfUEFUSCB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDcvMDcvMjkgMDk6NTU6MTIKK2RubCAtLS0tLS0tLS0tLS0tLQorZG5sIENvbnN0cnVjdCBhIHNlYXJjaC1saXN0IGZvciBhIG5vbnN0YW5kYXJkIGhlYWRlci9saWItZmlsZQorZG5sCSQxID0gdGhlIHZhcmlhYmxlIHRvIHJldHVybiBhcyByZXN1bHQKK2RubAkkMiA9IHRoZSBwYWNrYWdlIG5hbWUKK2RubAkkMyA9IHRoZSBzdWJkaXJlY3RvcnksIGUuZy4sIGJpbiwgaW5jbHVkZSBvciBsaWIKK0FDX0RFRlVOKFtDRl9TVUJESVJfUEFUSF0sCitbJDE9IiIKKworQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLCQzLC91c3IsJHByZWZpeCkKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMywkcHJlZml4LE5PTkUpCitDRl9BRERfU1VCRElSX1BBVEgoJDEsJDIsJDMsL3Vzci9sb2NhbCwkcHJlZml4KQorQ0ZfQUREX1NVQkRJUl9QQVRIKCQxLCQyLCQzLC9vcHQsJHByZWZpeCkKK0NGX0FERF9TVUJESVJfUEFUSCgkMSwkMiwkMyxbJF1IT01FLCRwcmVmaXgpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1NZU19USU1FX1NFTEVDVCB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDAvMTAvMDQgMDk6MTg6NDAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBpZiB3ZSBjYW4gaW5jbHVkZSA8c3lzL3RpbWUuaD4gd2l0aCA8c3lzL3NlbGVjdC5oPjsgdGhpcyBicmVha3Mgb24KK2RubCBvbGRlciBTQ08gY29uZmlndXJhdGlvbnMuCitBQ19ERUZVTihbQ0ZfU1lTX1RJTUVfU0VMRUNUXSwKK1sKK0FDX01TR19DSEVDS0lORyhpZiBzeXMvdGltZS5oIHdvcmtzIHdpdGggc3lzL3NlbGVjdC5oKQorQUNfQ0FDSEVfVkFMKGNmX2N2X3N5c190aW1lX3NlbGVjdCxbCitBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCitdLFtdLFtjZl9jdl9zeXNfdGltZV9zZWxlY3Q9eWVzXSwKKyAgICAgW2NmX2N2X3N5c190aW1lX3NlbGVjdD1ub10pCisgICAgIF0pCitBQ19NU0dfUkVTVUxUKCRjZl9jdl9zeXNfdGltZV9zZWxlY3QpCit0ZXN0ICIkY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0IiA9IHllcyAmJiBBQ19ERUZJTkUoSEFWRV9TWVNfVElNRV9TRUxFQ1QpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1RFUk1fSEVBREVSIHZlcnNpb246IDEgdXBkYXRlZDogMjAwNS8xMi8zMSAxMzoyNjozOQorZG5sIC0tLS0tLS0tLS0tLS0tCitkbmwgTG9vayBmb3IgdGVybS5oLCB3aGljaCBpcyBwYXJ0IG9mIFgvT3BlbiBjdXJzZXMuICBJdCBkZWZpbmVzIHRoZSBpbnRlcmZhY2UKK2RubCB0byB0ZXJtaW5mbyBkYXRhYmFzZS4gIFVzdWFsbHkgaXQgaXMgaW4gdGhlIHNhbWUgaW5jbHVkZS1wYXRoIGFzIGN1cnNlcy5oLAorZG5sIGJ1dCBzb21lIHBhY2thZ2VycyBjaGFuZ2UgdGhpcywgYnJlYWtpbmcgdmFyaW91cyBhcHBsaWNhdGlvbnMuCitBQ19ERUZVTihbQ0ZfVEVSTV9IRUFERVJdLFsKK0FDX0NBQ0hFX0NIRUNLKGZvciB0ZXJtaW5mbyBoZWFkZXIsIGNmX2N2X3Rlcm1faGVhZGVyLFsKK2Nhc2UgJHtjZl9jdl9uY3Vyc2VzX2hlYWRlcn0gaW4gIyh2aQorKi9uY3Vyc2VzLmh8Ki9uY3Vyc2Vzdy5oKSAjKHZpCisJY2ZfdGVybV9oZWFkZXI9YGVjaG8gIiRjZl9jdl9uY3Vyc2VzX2hlYWRlciIgfCBzZWQgLWUgJ3MlbmN1cnNlc1tbXi5dXSpcLmgkJXRlcm0uaCUnYAorCTs7CisqKQorCWNmX3Rlcm1faGVhZGVyPXRlcm0uaAorCTs7Citlc2FjCisKK2ZvciBjZl90ZXN0IGluICRjZl90ZXJtX2hlYWRlciAibmN1cnNlcy90ZXJtLmgiICJuY3Vyc2Vzdy90ZXJtLmgiCitkbworQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgorI2luY2x1ZGUgPCRjZl90ZXN0PgorXSxbaW50IHggPSBhdXRvX2xlZnRfbWFyZ2luXSxbCisJY2ZfY3ZfdGVybV9oZWFkZXI9IiRjZl90ZXN0Il0sWworCWNmX2N2X3Rlcm1faGVhZGVyPXVua25vd24KKwldKQorCXRlc3QgIiRjZl9jdl90ZXJtX2hlYWRlciIgIT0gdW5rbm93biAmJiBicmVhaworZG9uZQorXSkKKworIyBTZXQgZGVmaW5pdGlvbnMgdG8gYWxsb3cgaWZkZWYnaW5nIHRvIGFjY29tbW9kYXRlIHN1YmRpcmVjdG9yaWVzCisKK2Nhc2UgJGNmX2N2X3Rlcm1faGVhZGVyIGluICMgKHZpCisqdGVybS5oKQorCUFDX0RFRklORShIQVZFX1RFUk1fSCkKKwk7OworZXNhYworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorbmN1cnNlcy90ZXJtLmgpICModmkKKwlBQ19ERUZJTkUoSEFWRV9OQ1VSU0VTX1RFUk1fSCkKKwk7OworbmN1cnNlc3cvdGVybS5oKQorCUFDX0RFRklORShIQVZFX05DVVJTRVNXX1RFUk1fSCkKKwk7OworZXNhYworXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9VUFBFUiB2ZXJzaW9uOiA1IHVwZGF0ZWQ6IDIwMDEvMDEvMjkgMjM6NDA6NTkKK2RubCAtLS0tLS0tLQorZG5sIE1ha2UgYW4gdXBwZXJjYXNlIHZlcnNpb24gb2YgYSB2YXJpYWJsZQorZG5sICQxPXVwcGVyY2FzZSgkMikKK0FDX0RFRlVOKFtDRl9VUFBFUl0sCitbCiskMT1gZWNobyAiJDIiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorXSlkbmwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9VVEY4X0xJQiB2ZXJzaW9uOiA0IHVwZGF0ZWQ6IDIwMDMvMDMvMDEgMTg6MzY6NDIKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBtdWx0aWJ5dGUgc3VwcG9ydCwgYW5kIGlmIG5vdCBmb3VuZCwgdXRmOCBjb21wYXRpYmlsaXR5IGxpYnJhcnkKK0FDX0RFRlVOKFtDRl9VVEY4X0xJQl0sCitbCitBQ19DQUNIRV9DSEVDSyhmb3IgbXVsdGlieXRlIGNoYXJhY3RlciBzdXBwb3J0LGNmX2N2X3V0ZjhfbGliLFsKKwljZl9zYXZlX0xJQlM9IiRMSUJTIgorCUFDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD5dLFtwdXR3YygwLDApO10sCisJW2NmX2N2X3V0ZjhfbGliPXllc10sCisJW0xJQlM9Ii1sdXRmOCAkTElCUyIKKwkgQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPGxpYnV0ZjguaD5dLFtwdXR3YygwLDApO10sCisJCVtjZl9jdl91dGY4X2xpYj1hZGQtb25dLAorCQlbY2ZfY3ZfdXRmOF9saWI9bm9dKQorCUxJQlM9IiRjZl9zYXZlX0xJQlMiCitdKV0pCisKKyMgSEFWRV9MSUJVVEY4X0ggaXMgdXNlZCBieSBuY3Vyc2VzIGlmIGN1cnNlcy5oIGlzIHNoYXJlZCBiZXR3ZWVuCisjIG5jdXJzZXMvbmN1cnNlc3c6CitpZiB0ZXN0ICIkY2ZfY3ZfdXRmOF9saWIiID0gImFkZC1vbiIgOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfTElCVVRGOF9IKQorCUxJQlM9Ii1sdXRmOCAkTElCUyIKK2ZpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1ZFUkJPU0UgdmVyc2lvbjogMyB1cGRhdGVkOiAyMDA3LzA3LzI5IDA5OjU1OjEyCitkbmwgLS0tLS0tLS0tLQorZG5sIFVzZSBBQ19WRVJCT1NFIHcvbyB0aGUgd2FybmluZ3MKK0FDX0RFRlVOKFtDRl9WRVJCT1NFXSwKK1t0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCSQxIiAxPiZBQ19GRF9NU0cKK0NGX01TR19MT0coWyQxXSkKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfV0lUSF9DVVJTRVNfRElSIHZlcnNpb246IDIgdXBkYXRlZDogMjAwMi8xMS8xMCAxNDo0Njo1OQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFdyYXBwZXIgZm9yIEFDX0FSR19XSVRIIHRvIHNwZWNpZnkgZGlyZWN0b3J5IHVuZGVyIHdoaWNoIHRvIGxvb2sgZm9yIGN1cnNlcworZG5sIGxpYnJhcmllcy4KK0FDX0RFRlVOKFtDRl9XSVRIX0NVUlNFU19ESVJdLFsKK0FDX0FSR19XSVRIKGN1cnNlcy1kaXIsCisJWyAgLS13aXRoLWN1cnNlcy1kaXI9RElSICAgZGlyZWN0b3J5IGluIHdoaWNoIChuKWN1cnNlcyBpcyBpbnN0YWxsZWRdLAorCVtDRl9QQVRIX1NZTlRBWCh3aXRodmFsKQorCSBjZl9jdl9jdXJzZXNfZGlyPSR3aXRodmFsXSwKKwlbY2ZfY3ZfY3Vyc2VzX2Rpcj1ub10pCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1hPUEVOX0NVUlNFUyB2ZXJzaW9uOiA4IHVwZGF0ZWQ6IDIwMDMvMTEvMDcgMTk6NDc6NDYKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGlmIHdlIHNob3VsZCBkZWZpbmUgWC9PcGVuIHNvdXJjZSBmb3IgY3Vyc2VzLCBuZWVkZWQgb24gRGlnaXRhbCBVbml4CitkbmwgNC54LCB0byBzZWUgdGhlIGV4dGVuZGVkIGZ1bmN0aW9ucywgYnV0IGJyZWFrcyBvbiBJUklYIDYueC4KK2RubAorZG5sIFRoZSBnZXRiZWd5eCgpIGNoZWNrIGlzIG5lZWRlZCBmb3IgSFBVWCwgd2hpY2ggb21pdHMgbGVnYWN5IG1hY3JvcyBzdWNoCitkbmwgYXMgZ2V0YmVneSgpLiAgVGhlIGxhdHRlciBpcyBiZXR0ZXIgZGVzaWduLCBidXQgdGhlIGZvcm1lciBpcyBzdGFuZGFyZC4KK0FDX0RFRlVOKFtDRl9YT1BFTl9DVVJTRVNdLAorWworQUNfUkVRVUlSRShbQ0ZfQ1VSU0VTX0NQUEZMQUdTXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKGlmIHdlIG11c3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsY2ZfY3ZfbmVlZF94b3Blbl9leHRlbnNpb24sWworQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9Pl0sWworCWxvbmcgeCA9IHdpbm5zdHIoc3Rkc2NyLCAiIiwgMCk7CisJaW50IHgxLCB5MTsKKwlnZXRiZWd5eChzdGRzY3IsIHkxLCB4MSldLAorCVtjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbj1ub10sCisJW0FDX1RSWV9MSU5LKFsKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9Pl0sWworCWxvbmcgeCA9IHdpbm5zdHIoc3Rkc2NyLCAiIiwgMCk7CisJaW50IHgxLCB5MTsKKwlnZXRiZWd5eChzdGRzY3IsIHkxLCB4MSldLAorCVtjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbj15ZXNdLAorCVtjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbj11bmtub3duXSldKV0pCit0ZXN0ICRjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbiA9IHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCIKK10pZG5sCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ0ZfWE9QRU5fU09VUkNFIHZlcnNpb246IDI1IHVwZGF0ZWQ6IDIwMDcvMDEvMjkgMTg6MzY6MzgKK2RubCAtLS0tLS0tLS0tLS0tLS0KK2RubCBUcnkgdG8gZ2V0IF9YT1BFTl9TT1VSQ0UgZGVmaW5lZCBwcm9wZXJseSB0aGF0IHdlIGNhbiB1c2UgUE9TSVggZnVuY3Rpb25zLAorZG5sIG9yIGFkYXB0IHRvIHRoZSB2ZW5kb3IncyBkZWZpbml0aW9ucyB0byBnZXQgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5LAorZG5sIHdpdGhvdXQgbG9zaW5nIHRoZSBjb21tb24gbm9uLVBPU0lYIGZlYXR1cmVzLgorZG5sCitkbmwgUGFyYW1ldGVyczoKK2RubAkkMSBpcyB0aGUgbm9taW5hbCB2YWx1ZSBmb3IgX1hPUEVOX1NPVVJDRQorZG5sCSQyIGlzIHRoZSBub21pbmFsIHZhbHVlIGZvciBfUE9TSVhfQ19TT1VSQ0UKK0FDX0RFRlVOKFtDRl9YT1BFTl9TT1VSQ0VdLFsKKworQUNfUkVRVUlSRShbQ0ZfUFJPR19DQ19VX0RdKQorCitjZl9YT1BFTl9TT1VSQ0U9aWZlbHNlKCQxLCw1MDAsJDEpCitjZl9QT1NJWF9DX1NPVVJDRT1pZmVsc2UoJDIsLDE5OTUwNkwsJDIpCisKK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorYWl4W1s0NV1dKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfQUxMX1NPVVJDRSIKKwk7OworZnJlZWJzZCopICModmkKKwkjIDUueCBoZWFkZXJzIGFzc29jaWF0ZQorCSMJX1hPUEVOX1NPVVJDRT02MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTAorCSMJX1hPUEVOX1NPVVJDRT01MDAgd2l0aCBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TAorCWNmX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKKwljZl9YT1BFTl9TT1VSQ0U9NjAwCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9CU0RfVFlQRVMgLURfX0JTRF9WSVNJQkxFIC1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0U9JGNmX1hPUEVOX1NPVVJDRSIKKwk7OworaHB1eCopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0hQVVhfU09VUkNFIgorCTs7Citpcml4W1s1Nl1dLiopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1NHSV9TT1VSQ0UiCisJOzsKK2xpbnV4KnxnbnUqfGsqYnNkKi1nbnUpICModmkKKwlDRl9HTlVfU09VUkNFCisJOzsKK21pcmJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBvciBfUE9TSVhfU09VUkNFIGJyZWFrcyA8YXJwYS9pbmV0Lmg+CisJOzsKK25ldGJzZCopICModmkKKwkjIHNldHRpbmcgX1hPUEVOX1NPVVJDRSBicmVha3MgSVB2NiBmb3IgbHlueCBvbiBOZXRCU0QgMS42LCBicmVha3MgeHRlcm0sIGlzIG5vdCBuZWVkZWQgZm9yIG5jdXJzZXN3CisJOzsKK29wZW5ic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIHh0ZXJtIG9uIE9wZW5CU0QgMi44LCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7Citvc2ZbWzQ1XV0qKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9PU0ZfU09VUkNFIgorCTs7CitudG8tcW54KikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUU5YX1NPVVJDRSIKKwk7Oworc2NvKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyBMeW54IG9uIFNDTyBVbml4IC8gT3BlblNlcnZlcgorCTs7Citzb2xhcmlzKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfX0VYVEVOU0lPTlNfXyIKKwk7OworKikKKwlBQ19DQUNIRV9DSEVDSyhpZiB3ZSBzaG91bGQgZGVmaW5lIF9YT1BFTl9TT1VSQ0UsY2ZfY3ZfeG9wZW5fc291cmNlLFsKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0sWworI2lmbmRlZiBfWE9QRU5fU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWZdLAorCVtjZl9jdl94b3Blbl9zb3VyY2U9bm9dLAorCVtjZl9zYXZlPSIkQ1BQRkxBR1MiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfWE9QRU5fU09VUkNFPSRjZl9YT1BFTl9TT1VSQ0UiCisJIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSxbCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmXSwKKwlbY2ZfY3ZfeG9wZW5fc291cmNlPW5vXSwKKwlbY2ZfY3ZfeG9wZW5fc291cmNlPSRjZl9YT1BFTl9TT1VSQ0VdKQorCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKwldKQorXSkKKwlpZiB0ZXN0ICIkY2ZfY3ZfeG9wZW5fc291cmNlIiAhPSBubyA7IHRoZW4KKwkJQ0ZfUkVNT1ZFX0RFRklORShDRkxBR1MsJENGTEFHUyxfWE9QRU5fU09VUkNFKQorCQlDRl9SRU1PVkVfREVGSU5FKENQUEZMQUdTLCRDUFBGTEFHUyxfWE9QRU5fU09VUkNFKQorCQl0ZXN0ICIkY2ZfY3ZfY2NfdV9kX29wdGlvbnMiID0geWVzICYmIFwKKwkJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLVVfWE9QRU5fU09VUkNFIgorCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRT0kY2ZfY3ZfeG9wZW5fc291cmNlIgorCWZpCisJQ0ZfUE9TSVhfQ19TT1VSQ0UoJGNmX1BPU0lYX0NfU09VUkNFKQorCTs7Citlc2FjCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1hfQVRIRU5BIHZlcnNpb246IDEyIHVwZGF0ZWQ6IDIwMDQvMDYvMTUgMjE6MTQ6NDEKK2RubCAtLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBYYXcgKEF0aGVuYSkgbGlicmFyaWVzCitkbmwKK2RubCBTZXRzICRjZl94X2F0aGVuYSBhY2NvcmRpbmcgdG8gdGhlIGZsYXZvciBvZiBYYXcgd2hpY2ggaXMgdXNlZC4KK0FDX0RFRlVOKFtDRl9YX0FUSEVOQV0sCitbQUNfUkVRVUlSRShbQ0ZfWF9UT09MS0lUXSkKK2NmX3hfYXRoZW5hPSR7Y2ZfeF9hdGhlbmEtWGF3fQorCitBQ19NU0dfQ0hFQ0tJTkcoaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIFhhdyAzZCBsaWJyYXJ5KQord2l0aHZhbD0KK0FDX0FSR19XSVRIKFhhdzNkLAorCVsgIC0td2l0aC1YYXczZCAgICAgICAgICAgIGxpbmsgd2l0aCBYYXcgM2QgbGlicmFyeV0pCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMgOyB0aGVuCisJY2ZfeF9hdGhlbmE9WGF3M2QKKwlBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKKworQUNfTVNHX0NIRUNLSU5HKGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCBuZVhUIEF0aGVuYSBsaWJyYXJ5KQord2l0aHZhbD0KK0FDX0FSR19XSVRIKG5lWHRhdywKKwlbICAtLXdpdGgtbmVYdGF3ICAgICAgICAgICBsaW5rIHdpdGggbmVYVCBBdGhlbmEgbGlicmFyeV0pCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMgOyB0aGVuCisJY2ZfeF9hdGhlbmE9bmVYdGF3CisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK0FDX01TR19DSEVDS0lORyhpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggQXRoZW5hLVBsdXMgbGlicmFyeSkKK3dpdGh2YWw9CitBQ19BUkdfV0lUSChYYXdQbHVzLAorCVsgIC0td2l0aC1YYXdQbHVzICAgICAgICAgIGxpbmsgd2l0aCBBdGhlbmEtUGx1cyBsaWJyYXJ5XSkKK2lmIHRlc3QgIiR3aXRodmFsIiA9IHllcyA7IHRoZW4KKwljZl94X2F0aGVuYT1YYXdQbHVzCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK0FDX0NIRUNLX0xJQihYZXh0LFhleHRDcmVhdGVFeHRlbnNpb24sCisJW0xJQlM9Ii1sWGV4dCAkTElCUyJdKQorCitjZl94X2F0aGVuYV9saWI9IiIKKworQ0ZfWF9BVEhFTkFfQ1BQRkxBR1MoJGNmX3hfYXRoZW5hKQorQ0ZfWF9BVEhFTkFfTElCUygkY2ZfeF9hdGhlbmEpCitdKWRubAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1hfQVRIRU5BX0NQUEZMQUdTIHZlcnNpb246IDIgdXBkYXRlZDogMjAwMi8xMC8wOSAyMDowMDozNworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTm9ybWFsbHkgaW52b2tlZCBieSBDRl9YX0FUSEVOQSwgd2l0aCAkMSBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGZsYXZvciBvZgorZG5sIHRoZSBBdGhlbmEgd2lkZ2V0cywgZS5nLiwgWGF3LCBYYXczZCwgbmVYdGF3LgorQUNfREVGVU4oW0NGX1hfQVRIRU5BX0NQUEZMQUdTXSwKK1sKK2NmX3hfYXRoZW5hX3Jvb3Q9aWZlbHNlKCQxLCxYYXcsJDEpCitjZl94X2F0aGVuYV9pbmNsdWRlPSIiCisKK2ZvciBjZl9wYXRoIGluIGRlZmF1bHQgXAorCS91c3IvY29udHJpYi9YMTFSNiBcCisJL3Vzci9jb250cmliL1gxMVI1IFwKKwkvdXNyL2xpYi9YMTFSNSBcCisJL3Vzci9sb2NhbAorZG8KKwlpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfaW5jbHVkZSIgOyB0aGVuCisJCWNmX3NhdmU9IiRDUFBGTEFHUyIKKwkJY2ZfdGVzdD1YMTEvJGNmX3hfYXRoZW5hX3Jvb3QvU2ltcGxlTWVudS5oCisJCWlmIHRlc3QgJGNmX3BhdGggIT0gZGVmYXVsdCA7IHRoZW4KKwkJCUNQUEZMQUdTPSItSSRjZl9wYXRoL2luY2x1ZGUgJGNmX3NhdmUiCisJCQlBQ19NU0dfQ0hFQ0tJTkcoZm9yICRjZl90ZXN0IGluICRjZl9wYXRoKQorCQllbHNlCisJCQlBQ19NU0dfQ0hFQ0tJTkcoZm9yICRjZl90ZXN0KQorCQlmaQorCQlBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPCRjZl90ZXN0Pl0sW10sCisJCQlbY2ZfcmVzdWx0PXllc10sCisJCQlbY2ZfcmVzdWx0PW5vXSkKKwkJQUNfTVNHX1JFU1VMVCgkY2ZfcmVzdWx0KQorCQlpZiB0ZXN0ICIkY2ZfcmVzdWx0IiA9IHllcyA7IHRoZW4KKwkJCWNmX3hfYXRoZW5hX2luY2x1ZGU9JGNmX3BhdGgKKwkJCWJyZWFrCisJCWVsc2UKKwkJCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKwkJZmkKKwlmaQorZG9uZQorCitpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfaW5jbHVkZSIgOyB0aGVuCisJQUNfTVNHX1dBUk4oCitbVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSBmaW5kIEF0aGVuYSBoZWFkZXIgZmlsZXMgd2l0aCB0ZXN0IHByb2dyYW1dKQorZWxpZiB0ZXN0ICIkY2ZfeF9hdGhlbmFfaW5jbHVkZSIgIT0gZGVmYXVsdCA7IHRoZW4KKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX3hfYXRoZW5hX2luY2x1ZGUiCitmaQorXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDRl9YX0FUSEVOQV9MSUJTIHZlcnNpb246IDYgdXBkYXRlZDogMjAwNi8xMS8zMCAxNzo1NzoxMQorZG5sIC0tLS0tLS0tLS0tLS0tLS0KK2RubCBOb3JtYWxseSBpbnZva2VkIGJ5IENGX1hfQVRIRU5BLCB3aXRoICQxIHNldCB0byB0aGUgYXBwcm9wcmlhdGUgZmxhdm9yIG9mCitkbmwgdGhlIEF0aGVuYSB3aWRnZXRzLCBlLmcuLCBYYXcsIFhhdzNkLCBuZVh0YXcuCitBQ19ERUZVTihbQ0ZfWF9BVEhFTkFfTElCU10sCitbQUNfUkVRVUlSRShbQ0ZfWF9UT09MS0lUXSkKK2NmX3hfYXRoZW5hX3Jvb3Q9aWZlbHNlKCQxLCxYYXcsJDEpCitjZl94X2F0aGVuYV9saWI9IiIKKworZm9yIGNmX3BhdGggaW4gZGVmYXVsdCBcCisJL3Vzci9jb250cmliL1gxMVI2IFwKKwkvdXNyL2NvbnRyaWIvWDExUjUgXAorCS91c3IvbGliL1gxMVI1IFwKKwkvdXNyL2xvY2FsCitkbworCWZvciBjZl9saWIgaW4gXAorCQkiLWwkY2ZfeF9hdGhlbmFfcm9vdCAtbFhtdSIgXAorCQkiLWwkY2ZfeF9hdGhlbmFfcm9vdCAtbFhwbSAtbFhtdSIgXAorCQkiLWwke2NmX3hfYXRoZW5hX3Jvb3R9X3MgLWxYbXVfcyIKKwlkbworCQlpZiB0ZXN0IC16ICIkY2ZfeF9hdGhlbmFfbGliIiA7IHRoZW4KKwkJCWNmX3NhdmU9IiRMSUJTIgorCQkJY2ZfdGVzdD1YYXdTaW1wbGVNZW51QWRkR2xvYmFsQWN0aW9ucworCQkJaWYgdGVzdCAkY2ZfcGF0aCAhPSBkZWZhdWx0IDsgdGhlbgorCQkJCUxJQlM9Ii1MJGNmX3BhdGgvbGliICRjZl9saWIgJExJQlMiCisJCQkJQUNfTVNHX0NIRUNLSU5HKGZvciAkY2ZfbGliIGluICRjZl9wYXRoKQorCQkJZWxzZQorCQkJCUxJQlM9IiRjZl9saWIgJExJQlMiCisJCQkJQUNfTVNHX0NIRUNLSU5HKGZvciAkY2ZfdGVzdCBpbiAkY2ZfbGliKQorCQkJZmkKKwkJCUFDX1RSWV9MSU5LKFtdLFskY2ZfdGVzdCgpXSwKKwkJCQlbY2ZfcmVzdWx0PXllc10sCisJCQkJW2NmX3Jlc3VsdD1ub10pCisJCQlBQ19NU0dfUkVTVUxUKCRjZl9yZXN1bHQpCisJCQlpZiB0ZXN0ICIkY2ZfcmVzdWx0IiA9IHllcyA7IHRoZW4KKwkJCQljZl94X2F0aGVuYV9saWI9IiRjZl9saWIiCisJCQkJYnJlYWsKKwkJCWZpCisJCQlMSUJTPSIkY2Zfc2F2ZSIKKwkJZmkKKwlkb25lCitkb25lCisKK2lmIHRlc3QgLXogIiRjZl94X2F0aGVuYV9saWIiIDsgdGhlbgorCUFDX0VSUk9SKAorW1VuYWJsZSB0byBzdWNjZXNzZnVsbHkgbGluayBBdGhlbmEgbGlicmFyeSAoLWwkY2ZfeF9hdGhlbmFfcm9vdCkgd2l0aCB0ZXN0IHByb2dyYW1dKQorZmkKKworQ0ZfVVBQRVIoY2ZfeF9hdGhlbmFfTElCUyxIQVZFX0xJQl8kY2ZfeF9hdGhlbmEpCitBQ19ERUZJTkVfVU5RVU9URUQoJGNmX3hfYXRoZW5hX0xJQlMpCitdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENGX1hfVE9PTEtJVCB2ZXJzaW9uOiAxMSB1cGRhdGVkOiAyMDA2LzExLzI5IDE5OjA1OjE0CitkbmwgLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIFggVG9vbGtpdCBsaWJyYXJpZXMKK2RubAorQUNfREVGVU4oW0NGX1hfVE9PTEtJVF0sCitbCitBQ19SRVFVSVJFKFtBQ19QQVRIX1hUUkFdKQorQUNfUkVRVUlSRShbQ0ZfQ0hFQ0tfQ0FDSEVdKQorCisjIFNZU1RFTV9OQU1FPWBlY2hvICIkY2ZfY3Zfc3lzdGVtX25hbWUifHRyICcgJyAtYAorCitjZl9oYXZlX1hfTElCUz1ubworCitMREZMQUdTPSIkWF9MSUJTICRMREZMQUdTIgorQ0ZfQ0hFQ0tfQ0ZMQUdTKCRYX0NGTEFHUykKKworQUNfQ0hFQ0tfRlVOQyhYT3BlbkRpc3BsYXksLFsKK0FDX0NIRUNLX0xJQihYMTEsWE9wZW5EaXNwbGF5LAorCVtMSUJTPSItbFgxMSAkTElCUyJdLCwKKwlbJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCU10pXSkKKworQUNfQ0hFQ0tfRlVOQyhYdEFwcEluaXRpYWxpemUsLFsKK0FDX0NIRUNLX0xJQihYdCwgWHRBcHBJbml0aWFsaXplLAorCVtBQ19ERUZJTkUoSEFWRV9MSUJYVCkKKwkgY2ZfaGF2ZV9YX0xJQlM9WHQKKwkgTElCUz0iLWxYdCAkWF9QUkVfTElCUyAkTElCUyAkWF9FWFRSQV9MSUJTIl0sLAorCVskWF9QUkVfTElCUyAkTElCUyAkWF9FWFRSQV9MSUJTXSldKQorCitpZiB0ZXN0ICRjZl9oYXZlX1hfTElCUyA9IG5vIDsgdGhlbgorCUFDX1dBUk4oCitbVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSBsaW5rIFggVG9vbGtpdCBsaWJyYXJ5ICgtbFh0KSB3aXRoCit0ZXN0IHByb2dyYW0uICBZb3Ugd2lsbCBoYXZlIHRvIGNoZWNrIGFuZCBhZGQgdGhlIHByb3BlciBsaWJyYXJpZXMgYnkgaGFuZAordG8gbWFrZWZpbGUuXSkKK2ZpCitdKWRubApkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9iYWNrZ3JvdW5kLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2JhY2tncm91bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmJlNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9iYWNrZ3JvdW5kLmMKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGJhY2tncm91bmQuYyx2IDEuMyAyMDA2LzA2LzAzIDE2OjQzOjA4IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgc2hvcnQgZiwgYjsKKworICAgIGluaXRzY3IoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworCisJcGFpcl9jb250ZW50KDAsICZmLCAmYik7CisJcHJpbnR3KCJwYWlyIDAgY29udGFpbnMgKCVkLCVkKVxuIiwgZiwgYik7CisJZ2V0Y2goKTsKKworCXByaW50dygiSW5pdGlhbGl6aW5nIHBhaXIgMSB0byByZWQvYmxhY2tcbiIpOworCWluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKwlia2dkc2V0KCcgJyB8IENPTE9SX1BBSVIoMSkpOworCXByaW50dygiUkVEL0JMQUNLXG4iKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJJbml0aWFsaXppbmcgcGFpciAyIHRvIHdoaXRlL2JsdWVcbiIpOworCWluaXRfcGFpcigyLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJYmtnZHNldCgnICcgfCBDT0xPUl9QQUlSKDIpKTsKKwlwcmludHcoIldISVRFL0JMVUVcbiIpOworCWdldGNoKCk7CisKKwlwcmludHcoIlJlc2V0dGluZyBjb2xvcnMgdG8gcGFpciAwXG4iKTsKKwlia2dkc2V0KCcgJyB8IENPTE9SX1BBSVIoMCkpOworCXByaW50dygiRGVmYXVsdCBDb2xvcnNcbiIpOworCWdldGNoKCk7CisKKwlwcmludHcoIlJlc2V0dGluZyBjb2xvcnMgdG8gcGFpciAxXG4iKTsKKwlia2dkc2V0KCcgJyB8IENPTE9SX1BBSVIoMSkpOworCXByaW50dygiUkVEL0JMQUNLXG4iKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJTZXR0aW5nIHNjcmVlbiB0byBwYWlyIDBcbiIpOworCWJrZ2QoJyAnIHwgQ09MT1JfUEFJUigwKSk7CisJZ2V0Y2goKTsKKworCXByaW50dygiU2V0dGluZyBzY3JlZW4gdG8gcGFpciAxXG4iKTsKKwlia2dkKCcgJyB8IENPTE9SX1BBSVIoMSkpOworCWdldGNoKCk7CisKKwlwcmludHcoIlNldHRpbmcgc2NyZWVuIHRvIHBhaXIgMlxuIik7CisJYmtnZCgnICcgfCBDT0xPUl9QQUlSKDIpKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJTZXR0aW5nIHNjcmVlbiB0byBwYWlyIDBcbiIpOworCWJrZ2QoJyAnIHwgQ09MT1JfUEFJUigwKSk7CisJZ2V0Y2goKTsKKworICAgIH0gZWxzZSB7CisJcHJpbnR3KCJUaGlzIGRlbW8gcmVxdWlyZXMgYSBjb2xvciB0ZXJtaW5hbCIpOworCWdldGNoKCk7CisgICAgfQorICAgIGVuZHdpbigpOworCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvYmx1ZS5jIGIvbmN1cnNlcy01LjcvdGVzdC9ibHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjMGM3NgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvYmx1ZS5jCkBAIC0wLDAgKzEsNDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEIgbCB1IGUgICBNIG8gbyBuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMi4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgIEEgcGF0aWVuY2UgZ2FtZSBieSBULkEuTGlzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICBJbnRlZ3JhbCBzY3JlZW4gc3VwcG9ydCBieSBFcmljIFMuIFJheW1vbmQgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvbXBpbGUgdGhpcyB3aXRoIHRoZSBjb21tYW5kIGBjYyAtTyBibHVlLmMgLWxjdXJzZXMgLW8gYmx1ZScuICBGb3IgYmVzdAorICogcmVzdWx0cywgdXNlIHRoZSBuY3Vyc2VzKDMpIGxpYnJhcnkuICBPbiBub24tSW50ZWwgbWFjaGluZXMsIFNWcjQgY3Vyc2VzIGlzCisgKiBqdXN0IGFzIGdvb2QuCisgKgorICogJElkOiBibHVlLmMsdiAxLjMwIDIwMDgvMDgvMDMgMTg6MjA6MjcgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIE5PQ0FSRAkJKC0xKQorCisjZGVmaW5lIEFDRQkJMAorI2RlZmluZSBLSU5HCQkxMgorI2RlZmluZSBTVUlUX0xFTkdUSAkxMworCisjZGVmaW5lIEhFQVJUUwkJMAorI2RlZmluZSBTUEFERVMJCTEKKyNkZWZpbmUgRElBTU9ORFMJMgorI2RlZmluZSBDTFVCUwkJMworI2RlZmluZSBOU1VJVFMJCTQKKworI2RlZmluZSBHUklEX1dJRFRICTE0CS8qICAgIDEzKzEgICovCisjZGVmaW5lIEdSSURfTEVOR1RICTU2CS8qIDQqKDEzKzEpICovCisjZGVmaW5lIFBBQ0tfU0laRQk1MgorCisjZGVmaW5lIEJBU0VST1cJCTEKKyNkZWZpbmUgUFJPTVBUUk9XCTExCisKKyNkZWZpbmUgUkVEX09OX1dISVRFICAgIDEKKyNkZWZpbmUgQkxBQ0tfT05fV0hJVEUgIDIKKyNkZWZpbmUgQkxVRV9PTl9XSElURSAgIDMKKworc3RhdGljIFJFVFNJR1RZUEUgZGllKGludCBvbnNpZykgR0NDX05PUkVUVVJOOworCitzdGF0aWMgaW50IGRlY2tfc2l6ZSA9IFBBQ0tfU0laRTsJLyogaW5pdGlhbCBkZWNrICovCitzdGF0aWMgaW50IGRlY2tbUEFDS19TSVpFXTsKKworc3RhdGljIGludCBncmlkW0dSSURfTEVOR1RIXTsJLyogY2FyZCBsYXlvdXQgZ3JpZCAqLworc3RhdGljIGludCBmcmVlcHRyWzRdOwkJLyogZnJlZSBjYXJkIHNwYWNlIHBvaW50ZXJzICovCisKK3N0YXRpYyBpbnQgZGVhbF9udW1iZXIgPSAwOworCitzdGF0aWMgY2h0eXBlIHJhbmtzW1NVSVRfTEVOR1RIXVsyXSA9Cit7CisgICAgeycgJywgJ0EnfSwKKyAgICB7JyAnLCAnMid9LAorICAgIHsnICcsICczJ30sCisgICAgeycgJywgJzQnfSwKKyAgICB7JyAnLCAnNSd9LAorICAgIHsnICcsICc2J30sCisgICAgeycgJywgJzcnfSwKKyAgICB7JyAnLCAnOCd9LAorICAgIHsnICcsICc5J30sCisgICAgeycxJywgJzAnfSwKKyAgICB7JyAnLCAnSid9LAorICAgIHsnICcsICdRJ30sCisgICAgeycgJywgJ0snfQorfTsKKworLyogUGxlYXNlIG5vdGUsIHRoYXQgdGhpcyBpcyBhIGJhZCBleGFtcGxlLgorICAgQ29sb3IgdmFsdWVzIHNob3VsZCBub3QgYmUgb3InZWQgaW4uIFRoaXMKKyAgIG9ubHkgd29ya3MsIGJlY2F1c2UgdGhlIGNoYXJhY3RlcnMgdXNlZCBoZXJlCisgICBhcmUgcGxhaW4gYW5kIGhhdmUgbm8gY29sb3IgYXR0cmlidXRlIHRoZW1zZWx2ZXMuICovCisjaWZkZWYgQ09MT1JfUEFJUgorI2RlZmluZSBPUl9DT0xPUlModmFsdWUscGFpcikgKCh2YWx1ZSkgfCBDT0xPUl9QQUlSKHBhaXIpKQorI2Vsc2UKKyNkZWZpbmUgT1JfQ09MT1JTKHZhbHVlLHBhaXIpICh2YWx1ZSkKKyNlbmRpZgorCisjZGVmaW5lIFBDX0NPTE9SUyh2YWx1ZSxwYWlyKSAoT1JfQ09MT1JTKHZhbHVlLHBhaXIpIHwgQV9BTFRDSEFSU0VUKQorCitzdGF0aWMgY2h0eXBlIGxldHRlcnNbNF0gPQoreworICAgIE9SX0NPTE9SUygnaCcsIFJFRF9PTl9XSElURSksCS8qIGhlYXJ0cyAqLworICAgIE9SX0NPTE9SUygncycsIEJMQUNLX09OX1dISVRFKSwJLyogc3BhZGVzICovCisgICAgT1JfQ09MT1JTKCdkJywgUkVEX09OX1dISVRFKSwJLyogZGlhbW9uZHMgKi8KKyAgICBPUl9DT0xPUlMoJ2MnLCBCTEFDS19PTl9XSElURSksCS8qIGNsdWJzICovCit9OworCisjaWYgZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChBX0FMVENIQVJTRVQpICYmIEhBVkVfVElHRVRTVFIKK3N0YXRpYyBjaHR5cGUgZ2x5cGhzW10gPQoreworICAgIFBDX0NPTE9SUygnXDAwMycsIFJFRF9PTl9XSElURSksCS8qIGhlYXJ0cyAqLworICAgIFBDX0NPTE9SUygnXDAwNicsIEJMQUNLX09OX1dISVRFKSwJLyogc3BhZGVzICovCisgICAgUENfQ09MT1JTKCdcMDA0JywgUkVEX09OX1dISVRFKSwJLyogZGlhbW9uZHMgKi8KKyAgICBQQ19DT0xPUlMoJ1wwMDUnLCBCTEFDS19PTl9XSElURSksCS8qIGNsdWJzICovCit9OworI2RlZmluZSBVU0VfQ1A0MzcgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX0NQNDM3IDAKKyNlbmRpZiAvKiBfX2kzODZfXyAqLworCitzdGF0aWMgY2h0eXBlICpzdWl0cyA9IGxldHRlcnM7CS8qIHRoaXMgbWF5IGNoYW5nZSB0byBnbHlwaHMgYmVsb3cgKi8KKworc3RhdGljIFJFVFNJR1RZUEUKK2RpZShpbnQgb25zaWcpCit7CisgICAgKHZvaWQpIHNpZ25hbChvbnNpZywgU0lHX0lHTik7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRfdmFycyh2b2lkKQoreworICAgIGludCBpOworCisgICAgZGVja19zaXplID0gUEFDS19TSVpFOworICAgIGZvciAoaSA9IDA7IGkgPCBQQUNLX1NJWkU7IGkrKykKKwlkZWNrW2ldID0gaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCWZyZWVwdHJbaV0gPSBpICogR1JJRF9XSURUSDsKK30KKworc3RhdGljIHZvaWQKK3NodWZmbGUoaW50IHNpemUpCit7CisgICAgaW50IGksIGosIG51bXN3YXBzLCBzd2FwbnVtLCB0ZW1wOworCisgICAgbnVtc3dhcHMgPSBzaXplICogMTA7CS8qIGFuIGFyYml0cmFyeSBmaWd1cmUgKi8KKworICAgIGZvciAoc3dhcG51bSA9IDA7IHN3YXBudW0gPCBudW1zd2Fwczsgc3dhcG51bSsrKSB7CisJaSA9IHJhbmQoKSAlIHNpemU7CisJaiA9IHJhbmQoKSAlIHNpemU7CisJdGVtcCA9IGRlY2tbaV07CisJZGVja1tpXSA9IGRlY2tbal07CisJZGVja1tqXSA9IHRlbXA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZGVhbF9jYXJkcyh2b2lkKQoreworICAgIGludCBwdHIsIGNhcmQgPSAwLCB2YWx1ZSwgY3N1aXQsIGNyYW5rLCBzdWl0LCBhY2VzWzRdOworCisgICAgbWVtc2V0KGFjZXMsIDAsIHNpemVvZihhY2VzKSk7CisgICAgZm9yIChzdWl0ID0gSEVBUlRTOyBzdWl0IDw9IENMVUJTOyBzdWl0KyspIHsKKwlwdHIgPSBmcmVlcHRyW3N1aXRdOworCWdyaWRbcHRyKytdID0gTk9DQVJEOwkvKiAxc3QgY2FyZCBzcGFjZSBpcyBibGFuayAqLworCXdoaWxlICgocHRyICUgR1JJRF9XSURUSCkgIT0gMCkgeworCSAgICB2YWx1ZSA9IGRlY2tbY2FyZCsrXTsKKwkgICAgY3JhbmsgPSB2YWx1ZSAlIFNVSVRfTEVOR1RIOworCSAgICBjc3VpdCA9IHZhbHVlIC8gU1VJVF9MRU5HVEg7CisJICAgIGlmIChjcmFuayA9PSBBQ0UpCisJCWFjZXNbY3N1aXRdID0gcHRyOworCSAgICBncmlkW3B0cisrXSA9IHZhbHVlOworCX0KKyAgICB9CisKKyAgICBpZiAoZGVhbF9udW1iZXIgPT0gMSkJLyogc2hpZnQgdGhlIGFjZXMgZG93biB0byB0aGUgMXN0IGNvbHVtbiAqLworCWZvciAoc3VpdCA9IEhFQVJUUzsgc3VpdCA8PSBDTFVCUzsgc3VpdCsrKSB7CisJICAgIGdyaWRbc3VpdCAqIEdSSURfV0lEVEhdID0gc3VpdCAqIFNVSVRfTEVOR1RIOworCSAgICBncmlkW2FjZXNbc3VpdF1dID0gTk9DQVJEOworCSAgICBmcmVlcHRyW3N1aXRdID0gYWNlc1tzdWl0XTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludGNhcmQoaW50IHZhbHVlKQoreworICAgICh2b2lkKSBhZGRjaCgnICcpOworICAgIGlmICh2YWx1ZSA9PSBOT0NBUkQpCisJKHZvaWQpIGFkZHN0cigiICAgIik7CisgICAgZWxzZSB7CisJYWRkY2gocmFua3NbdmFsdWUgJSBTVUlUX0xFTkdUSF1bMF0gfCBDT0xPUl9QQUlSKEJMVUVfT05fV0hJVEUpKTsKKwlhZGRjaChyYW5rc1t2YWx1ZSAlIFNVSVRfTEVOR1RIXVsxXSB8IENPTE9SX1BBSVIoQkxVRV9PTl9XSElURSkpOworCWFkZGNoKHN1aXRzW3ZhbHVlIC8gU1VJVF9MRU5HVEhdKTsKKyAgICB9CisgICAgKHZvaWQpIGFkZGNoKCcgJyk7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNwbGF5X2NhcmRzKGludCBkZWFsKQoreworICAgIGludCByb3csIGNhcmQ7CisKKyAgICBjbGVhcigpOworICAgICh2b2lkKSBwcmludHcoCisJCSAgICAgIkJsdWUgTW9vbiAyLjEgLSBieSBUaW0gTGlzdGVyICYgRXJpYyBSYXltb25kIC0gRGVhbCAlZC5cbiIsCisJCSAgICAgZGVhbCk7CisgICAgZm9yIChyb3cgPSBIRUFSVFM7IHJvdyA8PSBDTFVCUzsgcm93KyspIHsKKwltb3ZlKEJBU0VST1cgKyByb3cgKyByb3cgKyAyLCAxKTsKKwlmb3IgKGNhcmQgPSAwOyBjYXJkIDwgR1JJRF9XSURUSDsgY2FyZCsrKQorCSAgICBwcmludGNhcmQoZ3JpZFtyb3cgKiBHUklEX1dJRFRIICsgY2FyZF0pOworICAgIH0KKworICAgIG1vdmUoUFJPTVBUUk9XICsgMiwgMCk7CisgICAgcmVmcmVzaCgpOworI2RlZmluZSBQKHgpCSh2b2lkKXByaW50dygiJXNcbiIsIHgpCisgICAgUCgiICAgVGhpcyA1Mi1jYXJkIHNvbGl0YWlyZSBzdGFydHMgd2l0aCAgdGhlIGVudGlyZSBkZWNrIHNodWZmbGVkIGFuZCBkZWFsdCIpOworICAgIFAoIm91dCBpbiBmb3VyIHJvd3MuICBUaGUgYWNlcyBhcmUgdGhlbiBtb3ZlZCB0byB0aGUgbGVmdCBlbmQgb2YgdGhlIGxheW91dCwiKTsKKyAgICBQKCJtYWtpbmcgNCBpbml0aWFsIGZyZWUgc3BhY2VzLiAgWW91IG1heSBtb3ZlIHRvIGEgc3BhY2Ugb25seSB0aGUgY2FyZCB0aGF0Iik7CisgICAgUCgibWF0Y2hlcyB0aGUgbGVmdCBuZWlnaGJvciBpbiBzdWl0LCBhbmQgaXMgb25lIGdyZWF0ZXIgaW4gcmFuay4gIEtpbmdzIGFyZSIpOworICAgIFAoImhpZ2gsIHNvIG5vIGNhcmRzIG1heSBiZSBwbGFjZWQgdG8gdGhlaXIgcmlnaHQgKHRoZXkgY3JlYXRlIGRlYWQgc3BhY2VzKS4iKTsKKyAgICBQKCIgIFdoZW4gbm8gbW92ZXMgY2FuIGJlIG1hZGUsICBjYXJkcyBzdGlsbCBvdXQgb2Ygc2VxdWVuY2UgYXJlICByZXNodWZmbGVkIik7CisgICAgUCgiYW5kIGRlYWx0IGZhY2UgdXAgYWZ0ZXIgdGhlIGVuZHMgb2YgdGhlIHBhcnRpYWwgc2VxdWVuY2VzLCBsZWF2aW5nIGEgY2FyZCIpOworICAgIFAoInNwYWNlIGFmdGVyIGVhY2ggc2VxdWVuY2UsIHNvIHRoYXQgZWFjaCByb3cgbG9va3MgbGlrZSBhIHBhcnRpYWwgc2VxdWVuY2UiKTsKKyAgICBQKCJmb2xsb3dlZCBieSBhIHNwYWNlLCBmb2xsb3dlZCBieSBlbm91Z2ggY2FyZHMgdG8gbWFrZSBhIHJvdyBvZiAxNC4gICAgICAgIik7CisgICAgUCgiICBBIG1vbWVudCdzIHJlZmxlY3Rpb24gd2lsbCBzaG93IHRoYXQgdGhpcyBnYW1lIGNhbm5vdCB0YWtlIG1vcmUgdGhhbiAxMyIpOworICAgIFAoImRlYWxzLiBBIGdvb2Qgc2NvcmUgaXMgMS0zIGRlYWxzLCA0LTcgaXMgYXZlcmFnZSwgOCBvciBtb3JlIGlzIHBvb3IuICAgICAiKTsKKyN1bmRlZiBQCisgICAgcmVmcmVzaCgpOworfQorCitzdGF0aWMgaW50CitmaW5kKGludCBjYXJkKQoreworICAgIGludCBpOworCisgICAgaWYgKChjYXJkIDwgMCkgfHwgKGNhcmQgPj0gUEFDS19TSVpFKSkKKwlyZXR1cm4gKE5PQ0FSRCk7CisgICAgZm9yIChpID0gMDsgaSA8IEdSSURfTEVOR1RIOyBpKyspCisJaWYgKGdyaWRbaV0gPT0gY2FyZCkKKwkgICAgcmV0dXJuIGk7CisgICAgcmV0dXJuIChOT0NBUkQpOworfQorCitzdGF0aWMgdm9pZAorbW92ZWNhcmQoaW50IHNyYywgaW50IGRzdCkKK3sKKyAgICBncmlkW2RzdF0gPSBncmlkW3NyY107CisgICAgZ3JpZFtzcmNdID0gTk9DQVJEOworCisgICAgbW92ZShCQVNFUk9XICsgKGRzdCAvIEdSSURfV0lEVEgpICogMiArIDIsIChkc3QgJSBHUklEX1dJRFRIKSAqIDUgKyAxKTsKKyAgICBwcmludGNhcmQoZ3JpZFtkc3RdKTsKKworICAgIG1vdmUoQkFTRVJPVyArIChzcmMgLyBHUklEX1dJRFRIKSAqIDIgKyAyLCAoc3JjICUgR1JJRF9XSURUSCkgKiA1ICsgMSk7CisgICAgcHJpbnRjYXJkKGdyaWRbc3JjXSk7CisKKyAgICByZWZyZXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkCitwbGF5X2dhbWUodm9pZCkKK3sKKyAgICBpbnQgZGVhZCA9IDAsIGksIGo7CisgICAgY2hhciBjOworICAgIGludCBzZWxlY3Rpb25bNF0sIGNhcmQ7CisKKyAgICB3aGlsZSAoZGVhZCA8IDQpIHsKKwlkZWFkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJICAgIGNhcmQgPSBncmlkW2ZyZWVwdHJbaV0gLSAxXTsKKworCSAgICBpZiAoKChjYXJkICUgU1VJVF9MRU5HVEgpID09IEtJTkcpCisJCXx8CisJCShjYXJkID09IE5PQ0FSRCkpCisJCXNlbGVjdGlvbltpXSA9IE5PQ0FSRDsKKwkgICAgZWxzZQorCQlzZWxlY3Rpb25baV0gPSBmaW5kKGNhcmQgKyAxKTsKKworCSAgICBpZiAoc2VsZWN0aW9uW2ldID09IE5PQ0FSRCkKKwkJZGVhZCsrOworCX07CisKKwlpZiAoZGVhZCA8IDQpIHsKKwkgICAgY2hhciBsaXZlW05TVUlUUyArIDFdLCAqbHAgPSBsaXZlOworCisJICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKHNlbGVjdGlvbltpXSAhPSBOT0NBUkQpIHsKKwkJICAgIG1vdmUoQkFTRVJPVyArIChzZWxlY3Rpb25baV0gLyBHUklEX1dJRFRIKSAqIDIgKyAzLAorCQkJIChzZWxlY3Rpb25baV0gJSBHUklEX1dJRFRIKSAqIDUpOworCQkgICAgKHZvaWQpIHByaW50dygiICAgJWMgIiwgKmxwKysgPSAnYScgKyBpKTsKKwkJfQorCSAgICB9OworCSAgICAqbHAgPSAnXDAnOworCisJICAgIGlmIChzdHJsZW4obGl2ZSkgPT0gMSkgeworCQltb3ZlKFBST01QVFJPVywgMCk7CisJCSh2b2lkKSBwcmludHcoCisJCQkJICJNYWtpbmcgZm9yY2VkIG1vdmVzLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisJCXJlZnJlc2goKTsKKwkJKHZvaWQpIHNsZWVwKDEpOworCQljID0gbGl2ZVswXTsKKwkgICAgfSBlbHNlIHsKKwkJY2hhciBidWZbQlVGU0laXTsKKworCQkodm9pZCkgc3ByaW50ZihidWYsCisJCQkgICAgICAgIlR5cGUgWyVzXSB0byBtb3ZlLCByIHRvIHJlZHJhdywgcSBvciBJTlRSIHRvIHF1aXQ6ICIsCisJCQkgICAgICAgbGl2ZSk7CisKKwkJZG8geworCQkgICAgbW92ZShQUk9NUFRST1csIDApOworCQkgICAgKHZvaWQpIGFkZHN0cihidWYpOworCQkgICAgbW92ZShQUk9NUFRST1csIChpbnQpIHN0cmxlbihidWYpKTsKKwkJICAgIGNscnRvZW9sKCk7CisJCSAgICAodm9pZCkgYWRkY2goJyAnKTsKKwkJfSB3aGlsZQorCQkgICAgKCgoYyA9IGdldGNoKCkpIDwgJ2EnIHx8IGMgPiAnZCcpICYmIChjICE9ICdyJykgJiYgKGMgIT0gJ3EnKSk7CisJICAgIH0KKworCSAgICBmb3IgKGogPSAwOyBqIDwgNDsgaisrKQorCQlpZiAoc2VsZWN0aW9uW2pdICE9IE5PQ0FSRCkgeworCQkgICAgbW92ZShCQVNFUk9XICsgKHNlbGVjdGlvbltqXSAvIEdSSURfV0lEVEgpICogMiArIDMsCisJCQkgKHNlbGVjdGlvbltqXSAlIEdSSURfV0lEVEgpICogNSk7CisJCSAgICAodm9pZCkgcHJpbnR3KCIgICAgICIpOworCQl9CisKKwkgICAgaWYgKGMgPT0gJ3InKQorCQlkaXNwbGF5X2NhcmRzKGRlYWxfbnVtYmVyKTsKKwkgICAgZWxzZSBpZiAoYyA9PSAncScpCisJCWRpZShTSUdJTlQpOworCSAgICBlbHNlIHsKKwkJaSA9IGMgLSAnYSc7CisJCWlmIChzZWxlY3Rpb25baV0gPT0gTk9DQVJEKQorCQkgICAgYmVlcCgpOworCQllbHNlIHsKKwkJICAgIG1vdmVjYXJkKHNlbGVjdGlvbltpXSwgZnJlZXB0cltpXSk7CisJCSAgICBmcmVlcHRyW2ldID0gc2VsZWN0aW9uW2ldOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgbW92ZShQUk9NUFRST1csIDApOworICAgIHN0YW5kb3V0KCk7CisgICAgKHZvaWQpIHByaW50dygiRmluaXNoZWQgZGVhbCAlZCAtIHR5cGUgYW55IGNoYXJhY3RlciB0byBjb250aW51ZS4uLiIsIGRlYWxfbnVtYmVyKTsKKyAgICBzdGFuZGVuZCgpOworICAgICh2b2lkKSBnZXRjaCgpOworfQorCitzdGF0aWMgaW50Citjb2xsZWN0X2Rpc2NhcmRzKHZvaWQpCit7CisgICAgaW50IHJvdywgY29sLCBjYXJkbm8gPSAwLCBmaW5pc2gsIGdyaWRubzsKKworICAgIGZvciAocm93ID0gSEVBUlRTOyByb3cgPD0gQ0xVQlM7IHJvdysrKSB7CisJZmluaXNoID0gMDsKKwlmb3IgKGNvbCA9IDE7IGNvbCA8IEdSSURfV0lEVEg7IGNvbCsrKSB7CisJICAgIGdyaWRubyA9IHJvdyAqIEdSSURfV0lEVEggKyBjb2w7CisKKwkgICAgaWYgKChncmlkW2dyaWRub10gIT0gKGdyaWRbZ3JpZG5vIC0gMV0gKyAxKSkgJiYgKGZpbmlzaCA9PSAwKSkgeworCQlmaW5pc2ggPSAxOworCQlmcmVlcHRyW3Jvd10gPSBncmlkbm87CisJICAgIH07CisKKwkgICAgaWYgKChmaW5pc2ggIT0gMCkgJiYgKGdyaWRbZ3JpZG5vXSAhPSBOT0NBUkQpKQorCQlkZWNrW2NhcmRubysrXSA9IGdyaWRbZ3JpZG5vXTsKKwl9CisgICAgfQorICAgIHJldHVybiBjYXJkbm87Cit9CisKK3N0YXRpYyB2b2lkCitnYW1lX2ZpbmlzaGVkKGludCBkZWFsKQoreworICAgIGNsZWFyKCk7CisgICAgKHZvaWQpIHByaW50dygiWW91IGZpbmlzaGVkIHRoZSBnYW1lIGluICVkIGRlYWxzLiBUaGlzIGlzICIsIGRlYWwpOworICAgIHN0YW5kb3V0KCk7CisgICAgaWYgKGRlYWwgPCAyKQorCSh2b2lkKSBhZGRzdHIoImV4Y2VsbGVudCIpOworICAgIGVsc2UgaWYgKGRlYWwgPCA0KQorCSh2b2lkKSBhZGRzdHIoImdvb2QiKTsKKyAgICBlbHNlIGlmIChkZWFsIDwgOCkKKwkodm9pZCkgYWRkc3RyKCJhdmVyYWdlIik7CisgICAgZWxzZQorCSh2b2lkKSBhZGRzdHIoInBvb3IiKTsKKyAgICBzdGFuZGVuZCgpOworICAgICh2b2lkKSBhZGRzdHIoIi4gICAgICAgICAiKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIENBVENIQUxMKGRpZSk7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBpbml0c2NyKCk7CisKKyAgICAvKgorICAgICAqIFdlIHVzZSBDT0xPUl9HUkVFTiBiZWNhdXNlIENPTE9SX0JMQUNLIGlzIHdpcmVkIHRvIHRoZSB3cm9uZyB0aGluZy4KKyAgICAgKi8KKyAgICBzdGFydF9jb2xvcigpOworICAgIGluaXRfcGFpcihSRURfT05fV0hJVEUsIENPTE9SX1JFRCwgQ09MT1JfV0hJVEUpOworICAgIGluaXRfcGFpcihCTFVFX09OX1dISVRFLCBDT0xPUl9CTFVFLCBDT0xPUl9XSElURSk7CisgICAgaW5pdF9wYWlyKEJMQUNLX09OX1dISVRFLCBDT0xPUl9CTEFDSywgQ09MT1JfV0hJVEUpOworCisjaWZuZGVmIENPTE9SX1BBSVIKKyAgICBsZXR0ZXJzWzBdID0gT1JfQ09MT1JTKCdoJywgUkVEX09OX1dISVRFKTsJLyogaGVhcnRzICovCisgICAgbGV0dGVyc1sxXSA9IE9SX0NPTE9SUygncycsIEJMQUNLX09OX1dISVRFKTsJLyogc3BhZGVzICovCisgICAgbGV0dGVyc1syXSA9IE9SX0NPTE9SUygnZCcsIFJFRF9PTl9XSElURSk7CS8qIGRpYW1vbmRzICovCisgICAgbGV0dGVyc1szXSA9IE9SX0NPTE9SUygnYycsIEJMQUNLX09OX1dISVRFKTsJLyogY2x1YnMgKi8KKyNpZiBVU0VfQ1A0MzcKKyAgICBnbHlwaHNbMF0gPSBQQ19DT0xPUlMoJ1wwMDMnLCBSRURfT05fV0hJVEUpOwkvKiBoZWFydHMgKi8KKyAgICBnbHlwaHNbMV0gPSBQQ19DT0xPUlMoJ1wwMDYnLCBCTEFDS19PTl9XSElURSk7CS8qIHNwYWRlcyAqLworICAgIGdseXBoc1syXSA9IFBDX0NPTE9SUygnXDAwNCcsIFJFRF9PTl9XSElURSk7CS8qIGRpYW1vbmRzICovCisgICAgZ2x5cGhzWzNdID0gUENfQ09MT1JTKCdcMDA1JywgQkxBQ0tfT05fV0hJVEUpOwkvKiBjbHVicyAqLworI2VuZGlmCisjZW5kaWYKKworI2lmIFVTRV9DUDQzNworICAgIGlmICh0aWdldHN0cigic21wY2giKSkKKwlzdWl0cyA9IGdseXBoczsKKyNlbmRpZiAvKiBVU0VfQ1A0MzcgKi8KKworICAgIGNicmVhaygpOworCisgICAgaWYgKGFyZ2MgPT0gMikKKwlzcmFuZCgodW5zaWduZWQpIGF0b2koYXJndlsxXSkpOworICAgIGVsc2UKKwlzcmFuZCgodW5zaWduZWQpIHRpbWUoKHRpbWVfdCAqKSAwKSk7CisKKyAgICBpbml0X3ZhcnMoKTsKKworICAgIGRvIHsKKwlkZWFsX251bWJlcisrOworCXNodWZmbGUoZGVja19zaXplKTsKKwlkZWFsX2NhcmRzKCk7CisJZGlzcGxheV9jYXJkcyhkZWFsX251bWJlcik7CisJcGxheV9nYW1lKCk7CisgICAgfQorICAgIHdoaWxlCisJKChkZWNrX3NpemUgPSBjb2xsZWN0X2Rpc2NhcmRzKCkpICE9IDApOworCisgICAgZ2FtZV9maW5pc2hlZChkZWFsX251bWJlcik7CisKKyAgICBkaWUoU0lHSU5UKTsKKyAgICAvKk5PVFJFQUNIRUQgKi8KK30KKworLyogYmx1ZS5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9icy42IGIvbmN1cnNlcy01LjcvdGVzdC9icy42Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1N2Y1MzgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2JzLjYKQEAgLTAsMCArMSw3MSBAQAorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgQ29weXJpZ2h0IChjKSAxOTk4LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisuXCIgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKy5cIiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorLlwiIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisuXCIgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKy5cIiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorLlwiIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorLlwiIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorLlwiIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisuXCIgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKy5cIiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorLlwiIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisuXCIgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKy5cIiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKy5cIiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorLlwiIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisuXCIgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuXCIgJElkOiBicy42LHYgMS4yIDIwMDYvMDQvMjIgMjI6NDI6NDQgdG9tIEV4cCAkCisuVEggQkFUVExFU0hJUFMgNiAiQXVnIDIzLCAxOTg5IgorLlNIIE5BTUUKK2JzIFwtIGJhdHRsZXNoaXBzIGdhbWUKKy5TSCBTWU5PUFNJUworYmF0dGxlIFsgLWIgfCAtcyBdIFsgLWMgXQorLlNIIERFU0NSSVBUSU9OCitUaGlzIHByb2dyYW0gYWxsb3dzIHlvdSB0byBwbGF5IHRoZSBmYW1pbGlhciBCYXR0bGVzaGlwcyBnYW1lIGFnYWluc3QgdGhlCitjb21wdXRlciBvbiBhIDEweDEwIGJvYXJkLiBUaGUgaW50ZXJmYWNlIGlzIHZpc3VhbCBhbmQgbGFyZ2VseQorc2VsZi1leHBsYW5hdG9yeTsgeW91IHBsYWNlIHlvdXIgc2hpcHMgYW5kIHBpY2sgeW91ciBzaG90cyBieSBtb3ZpbmcgdGhlCitjdXJzb3IgYXJvdW5kIHRoZSBgc2VhJyB3aXRoIHRoZSByb2d1ZS9oYWNrIG1vdGlvbiBrZXlzIGhqa2x5dWJuLgorLlBQCitOb3RlIHRoYXQgd2hlbiBzZWxlY3RpbmcgYSBzaGlwIHRvIHBsYWNlLCB5b3UgbXVzdCB0eXBlIHRoZSBjYXBpdGFsIGxldHRlcgorKHRoZXNlIGFyZSwgYWZ0ZXIgYWxsLCBjYXBpdGFsIHNoaXBzKS4gRHVyaW5nIHNoaXAgcGxhY2VtZW50LCB0aGUgYHInIGNvbW1hbmQKK21heSBiZSB1c2VkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgcmFuZG9tbHkgcGxhY2UgeW91ciBjdXJyZW50bHkKK3NlbGVjdGVkIHNoaXAuIFRoZSBgUicgY29tbWFuZCB3aWxsIHBsYWNlIGFsbCByZW1haW5pbmcgc2hpcHMgcmFuZG9tbHkuIFRoZSBeTAorY29tbWFuZCAoZm9ybSBmZWVkLCBBU0NJSSAxMikgd2lsbCBmb3JjZSBhIHNjcmVlbiByZWRyYXcpLgorLlBQCitUaGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBjb250cm9sIGdhbWUgbW9kZXMuIAorCisubmYKKwktYiBzZWxlY3RzIGEgYGJsaXR6JyB2YXJpYW50CisJLXMgc2VsZWN0cyBhIGBzYWx2bycgdmFyaWFudAorCS1jIHBlcm1pdHMgc2hpcHMgdG8gYmUgcGxhY2VkIGFkamFjZW50bHkKKy5maQorCitUaGUgYGJsaXR6JyB2YXJpYW50IGFsbG93cyBhIHNpZGUgdG8gc2hvb3QgZm9yIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvCitzY29yZSBoaXRzLgorLlBQCitUaGUgYHNhbHZvJyBnYW1lIGFsbG93cyBhIHBsYXllciBvbmUgc2hvdCBwZXIgdHVybiBmb3IgZWFjaCBvZiBoaXMvaGVyIHNoaXBzCitzdGlsbCBhZmxvYXQuICBUaGlzIHB1dHMgYSBwcmVtaXVtIHNjb3JpbmcgaGl0cyBlYXJseSBhbmQga25vY2tpbmcgb3V0IHNvbWUKK3NoaXBzIGFuZCBhbHNvIG1ha2VzIG11Y2ggaGFyZGVyIHRoZSBzaXR1YXRpb24gd2hlcmUgeW91IGZhY2UgYSBzdXBlcmlvciBmb3JjZQord2l0aCBvbmx5IHlvdXIgUFQtYm9hdC4KKy5QUAorTm9ybWFsbHksIHNoaXBzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IGF0IGxlYXN0IG9uZSBzcXVhcmUgb2Ygb3BlbiB3YXRlci4gVGhlCistYyBvcHRpb24gZGlzYWJsZXMgdGhpcyBjaGVjayBhbmQgYWxsb3dzIHRoZW0gdG8gY2xvc2UtcGFjay4KKy5QUAorVGhlIGFsZ29yaXRobSB0aGUgY29tcHV0ZXIgdXNlcyBvbmNlIGl0IGhhcyBmb3VuZCBhIHNoaXAgdG8gc2luayBpcyBwcm92YWJseQorb3B0aW1hbC4gVGhlIGRpc3BlcnNpb24gY3JpdGVyaW9uIGZvciB0aGUgcmFuZG9tLWZpcmUgYWxnb3JpdGhtIG1heSBub3QgYmUuCisuU0ggQVVUSE9SUworT3JpZ2luYWxseSB3cml0dGVuIGJ5IG9uZSBCcnVjZSBIb2xsb3dheSBpbiAxOTg2LiBTYWx2byBtb2RlIGFkZGVkIGJ5IENodWNrIEEuCitEZUdhdWwgKGNib3NnZCFjYWQpLiBWaXN1YWwgdXNlciBpbnRlcmZhY2UsIGBjbG9zZXBhY2snIG9wdGlvbiwgY29kZSByZXdyaXRlCithbmQgbWFudWFsIHBhZ2UgYnkgRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IEF1Z3VzdCAxOTg5LgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9icy5jIGIvbmN1cnNlcy01LjcvdGVzdC9icy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NTcyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2JzLmMKQEAgLTAsMCArMSwxMjU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogCisgKiBicy5jIC0gb3JpZ2luYWwgYXV0aG9yOiBCcnVjZSBIb2xsb3dheQorICoJCXNhbHZvIG9wdGlvbiBieTogQ2h1Y2sgQSBEZUdhdWwKKyAqIHdpdGggaW1wcm92ZWQgdXNlciBpbnRlcmZhY2UsIGF1dG9jb25maWd1cmF0aW9uIGFuZCBjb2RlIGNsZWFudXAKKyAqCQlieSBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4KKyAqIHYxLjIgd2l0aCBjb2xvciBzdXBwb3J0IGFuZCBtaW5vciBwb3J0YWJpbGl0eSBmaXhlcywgTm92ZW1iZXIgMTk5MAorICogdjIuMCBmZWF0dXJpbmcgc3RyaWN0IEFOU0kvUE9TSVggY29uZm9ybWFuY2UsIE5vdmVtYmVyIDE5OTMuCisgKiB2Mi4xIHdpdGggbmN1cnNlcyBtb3VzZSBzdXBwb3J0LCBTZXB0ZW1iZXIgMTk5NQorICoKKyAqICRJZDogYnMuYyx2IDEuNDcgMjAwOC8wOC8wMyAxODozMDoyOCB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZm5kZWYgU0lHSU9UCisjZGVmaW5lIFNJR0lPVCBTSUdBQlJUCisjZW5kaWYKKworc3RhdGljIGludCBnZXRjb29yZChpbnQpOworCisvKgorICogQ29uc3RhbnRzIGZvciB0dW5pbmcgdGhlIHJhbmRvbS1maXJlIGFsZ29yaXRobS4gSXQgcHJlZmVycyBtb3ZlcyB0aGF0CisgKiBkaWFnb25hbC1zdHJpcGUgdGhlIGJvYXJkIHdpdGggYSBzdHJpcGUgc2VwYXJhdGlvbiBvZiBzcmNoc3RlcC4gSWYKKyAqIG5vIHN1Y2ggcHJlZmVycmVkIG1vdmVzIGFyZSBmb3VuZCwgc3JjaHN0ZXAgaXMgZGVjcmVtZW50ZWQuCisgKi8KKyNkZWZpbmUgQkVHSU5TVEVQCTMJLyogaW5pdGlhbCB2YWx1ZSBvZiBzcmNoc3RlcCAqLworCisvKiBtaXNjZWxsYW5lb3VzIGNvbnN0YW50cyAqLworI2RlZmluZSBTSElQVFlQRVMJNQorI2RlZmluZQlPVEhFUgkJKDEtdHVybikKKyNkZWZpbmUgUExBWUVSCQkwCisjZGVmaW5lIENPTVBVVEVSCTEKKyNkZWZpbmUgTUFSS19ISVQJJ0gnCisjZGVmaW5lIE1BUktfTUlTUwknbycKKyNkZWZpbmUgQ1RSTEMJCSdcMDAzJwkvKiB1c2VkIGFzIHRlcm1pbmF0ZSBjb21tYW5kICovCisjZGVmaW5lIEZGCQknXDAxNCcJLyogdXNlZCBhcyByZWRyYXcgY29tbWFuZCAqLworCisvKiBjb29yZGluYXRlIGhhbmRsaW5nICovCisjZGVmaW5lIEJXSURUSAkJMTAKKyNkZWZpbmUgQkRFUFRICQkxMAorCisvKiBkaXNwbGF5IHN5bWJvbHMgKi8KKyNkZWZpbmUgU0hPV0hJVAkJJyonCisjZGVmaW5lIFNIT1dTUExBU0gJJyAnCisjZGVmaW5lIElTX1NISVAoYykJKGlzdXBwZXIoVUNoYXIoYykpID8gVFJVRSA6IEZBTFNFKQorCisvKiBob3cgdG8gcG9zaXRpb24gdXMgb24gcGxheWVyIGJvYXJkICovCisjZGVmaW5lIFBZQkFTRQkzCisjZGVmaW5lIFBYQkFTRQkzCisjZGVmaW5lIFBZKHkpCShQWUJBU0UgKyAoeSkpCisjZGVmaW5lIFBYKHgpCShQWEJBU0UgKyAoeCkqMykKKyNkZWZpbmUgcGdvdG8oeSwgeCkJKHZvaWQpbW92ZShQWSh5KSwgUFgoeCkpCisKKy8qIGhvdyB0byBwb3NpdGlvbiB1cyBvbiBjcHUgYm9hcmQgKi8KKyNkZWZpbmUgQ1lCQVNFCTMKKyNkZWZpbmUgQ1hCQVNFCTQ4CisjZGVmaW5lIENZKHkpCShDWUJBU0UgKyAoeSkpCisjZGVmaW5lIENYKHgpCShDWEJBU0UgKyAoeCkqMykKKyNkZWZpbmUgQ1lJTlYoeSkJKCh5KSAtIENZQkFTRSkKKyNkZWZpbmUgQ1hJTlYoeCkJKCgoeCkgLSBDWEJBU0UpIC8gMykKKyNkZWZpbmUgY2dvdG8oeSwgeCkJKHZvaWQpbW92ZShDWSh5KSwgQ1goeCkpCisKKyNkZWZpbmUgT05CT0FSRCh4LCB5KQkoeCA+PSAwICYmIHggPCBCV0lEVEggJiYgeSA+PSAwICYmIHkgPCBCREVQVEgpCisKKy8qIG90aGVyIGJvYXJkIGxvY2F0aW9ucyAqLworI2RlZmluZSBDT0xXSURUSAk4MAorI2RlZmluZSBQUk9NUFRMSU5FCTIxCS8qIHByb21wdCBsaW5lICovCisjZGVmaW5lIFNZQkFTRQkJQ1lCQVNFICsgQkRFUFRIICsgMwkvKiBtb3ZlIGtleSBkaWFncmFtICovCisjZGVmaW5lIFNYQkFTRQkJNjMKKyNkZWZpbmUgTVlCQVNFCQlTWUJBU0UgLSAxCS8qIGRpYWdyYW0gY2FwdGlvbiAqLworI2RlZmluZSBNWEJBU0UJCTY0CisjZGVmaW5lIEhZQkFTRQkJU1lCQVNFIC0gMQkvKiBoZWxwIGFyZWEgKi8KKyNkZWZpbmUgSFhCQVNFCQkwCisKKy8qIHRoaXMgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgQldJRFRIIGNoYW5nZXMgKi8KK3N0YXRpYyBjaGFyIG51bWJlcnNbXSA9ICIgICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IjsKKworc3RhdGljIGNoYXIgY2FycmllcltdID0gIkFpcmNyYWZ0IENhcnJpZXIiOworc3RhdGljIGNoYXIgYmF0dGxlW10gPSAiQmF0dGxlc2hpcCI7CitzdGF0aWMgY2hhciBzdWJbXSA9ICJTdWJtYXJpbmUiOworc3RhdGljIGNoYXIgZGVzdHJveVtdID0gIkRlc3Ryb3llciI7CitzdGF0aWMgY2hhciBwdGJvYXRbXSA9ICJQVCBCb2F0IjsKKworc3RhdGljIGNoYXIgbmFtZVs0MF07CitzdGF0aWMgY2hhciBkZnRuYW1lW10gPSAic3RyYW5nZXIiOworCisvKiBkaXJlY3Rpb24gY29uc3RhbnRzICovCisjZGVmaW5lIEUJMAorI2RlZmluZSBTRQkxCisjZGVmaW5lIFMJMgorI2RlZmluZSBTVwkzCisjZGVmaW5lIFcJNAorI2RlZmluZSBOVwk1CisjZGVmaW5lIE4JNgorI2RlZmluZSBORQk3CitzdGF0aWMgaW50IHhpbmNyWzhdID0KK3sxLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxfTsKK3N0YXRpYyBpbnQgeWluY3JbOF0gPQorezAsIDEsIDEsIDEsIDAsIC0xLCAtMSwgLTF9OworCisvKiBjdXJyZW50IHNoaXAgcG9zaXRpb24gYW5kIGRpcmVjdGlvbiAqLworc3RhdGljIGludCBjdXJ4ID0gKEJXSURUSCAvIDIpOworc3RhdGljIGludCBjdXJ5ID0gKEJERVBUSCAvIDIpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqbmFtZTsJCQkvKiBuYW1lIG9mIHRoZSBzaGlwIHR5cGUgKi8KKyAgICBpbnQgaGl0czsJCQkvKiBob3cgbWFueSB0aW1lcyBoYXMgdGhpcyBzaGlwIGJlZW4gaGl0PyAqLworICAgIGNoYXIgc3ltYm9sOwkJLyogc3ltYm9sIGZvciBnYW1lIHB1cnBvc2VzICovCisgICAgaW50IGxlbmd0aDsJCQkvKiBsZW5ndGggb2Ygc2hpcCAqLworICAgIGludCB4LCB5OwkJCS8qIGNvb3JkaW5hdGVzIG9mIHNoaXAgc3RhcnQgcG9pbnQgKi8KKyAgICBpbnQgZGlyOwkJCS8qIGRpcmVjdGlvbiBvZiBgYm93JyAqLworICAgIGJvb2wgcGxhY2VkOwkJLyogaGFzIGl0IGJlZW4gcGxhY2VkIG9uIHRoZSBib2FyZD8gKi8KK30gc2hpcF90OworCitzdGF0aWMgYm9vbCBjaGVja3BsYWNlKGludCBiLCBzaGlwX3QgKiBzcywgaW50IHZpcyk7CisKKyNkZWZpbmUgU0hJUElUKG5hbWUsIHN5bWJvbCwgbGVuZ3RoKSB7IG5hbWUsIDAsIHN5bWJvbCwgbGVuZ3RoLCAwLDAsIDAsIEZBTFNFIH0KKworc3RhdGljIHNoaXBfdCBwbHlzaGlwW1NISVBUWVBFU10gPQoreworICAgIFNISVBJVChjYXJyaWVyLCAnQScsIDUpLAorICAgIFNISVBJVChiYXR0bGUsICdCJywgNCksCisgICAgU0hJUElUKGRlc3Ryb3ksICdEJywgMyksCisgICAgU0hJUElUKHN1YiwgJ1MnLCAzKSwKKyAgICBTSElQSVQocHRib2F0LCAnUCcsIDIpLAorfTsKKworc3RhdGljIHNoaXBfdCBjcHVzaGlwW1NISVBUWVBFU10gPQoreworICAgIFNISVBJVChjYXJyaWVyLCAnQScsIDUpLAorICAgIFNISVBJVChiYXR0bGUsICdCJywgNCksCisgICAgU0hJUElUKGRlc3Ryb3ksICdEJywgMyksCisgICAgU0hJUElUKHN1YiwgJ1MnLCAzKSwKKyAgICBTSElQSVQocHRib2F0LCAnUCcsIDIpLAorfTsKKworLyogIkhpdHMiIGJvYXJkLCBhbmQgbWFpbiBib2FyZC4gKi8KK3N0YXRpYyBjaGFyIGhpdHNbMl1bQldJRFRIXVtCREVQVEhdOworc3RhdGljIGNoYXIgYm9hcmRbMl1bQldJRFRIXVtCREVQVEhdOworCitzdGF0aWMgaW50IHR1cm47CQkvKiAwPXBsYXllciwgMT1jb21wdXRlciAqLworc3RhdGljIGludCBwbHl3b24gPSAwLCBjcHV3b24gPSAwOwkvKiBIb3cgbWFueSBnYW1lcyBoYXMgZWFjaCB3b24/ICovCisKK3N0YXRpYyBpbnQgc2Fsdm8sIGJsaXR6LCBjbG9zZXBhY2s7CisKKyNkZWZpbmUJUFIJKHZvaWQpYWRkc3RyCisKK3N0YXRpYyBSRVRTSUdUWVBFIHVuaW5pdGdhbWUoaW50IHNpZykgR0NDX05PUkVUVVJOOworCitzdGF0aWMgUkVUU0lHVFlQRQordW5pbml0Z2FtZShpbnQgc2lnIEdDQ19VTlVTRUQpCisvKiBlbmQgdGhlIGdhbWUsIGVpdGhlciBub3JtYWxseSBvciBkdWUgdG8gc2lnbmFsICovCit7CisgICAgY2xlYXIoKTsKKyAgICAodm9pZCkgcmVmcmVzaCgpOworICAgICh2b2lkKSByZXNldF9zaGVsbF9tb2RlKCk7CisgICAgKHZvaWQpIGVjaG8oKTsKKyAgICAodm9pZCkgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oc2lnID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTKTsKK30KKworc3RhdGljIHZvaWQKK2Fubm91bmNlb3B0cyh2b2lkKQorLyogYW5ub3VuY2Ugd2hpY2ggZ2FtZSBvcHRpb25zIGFyZSBlbmFibGVkICovCit7CisgICAgaWYgKHNhbHZvIHx8IGJsaXR6IHx8IGNsb3NlcGFjaykgeworCSh2b2lkKSBwcmludHcoIlBsYXlpbmcgb3B0aW9uYWwgZ2FtZSAoIik7CisJaWYgKHNhbHZvKQorCSAgICAodm9pZCkgcHJpbnR3KCJzYWx2bywgIik7CisJZWxzZQorCSAgICAodm9pZCkgcHJpbnR3KCJub3NhbHZvLCAiKTsKKwlpZiAoYmxpdHopCisJICAgICh2b2lkKSBwcmludHcoImJsaXR6ICIpOworCWVsc2UKKwkgICAgKHZvaWQpIHByaW50dygibm9ibGl0eiwgIik7CisJaWYgKGNsb3NlcGFjaykKKwkgICAgKHZvaWQpIHByaW50dygiY2xvc2VwYWNrKSIpOworCWVsc2UKKwkgICAgKHZvaWQpIHByaW50dygibm9jbG9zZXBhY2spIik7CisgICAgfSBlbHNlCisJKHZvaWQpIHByaW50dygKKwkJCSAiUGxheWluZyBzdGFuZGFyZCBnYW1lIChub2JsaXR6LCBub3NhbHZvLCBub2Nsb3NlcGFjaykiKTsKK30KKworc3RhdGljIHZvaWQKK2ludHJvKHZvaWQpCit7CisgICAgY2hhciAqdG1wbmFtZTsKKworICAgIHNyYW5kKCh1bnNpZ25lZCkgKHRpbWUoMEwpICsgZ2V0cGlkKCkpKTsJLyogS2ljayB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKworICAgIENBVENIQUxMKHVuaW5pdGdhbWUpOworCisgICAgaWYgKCh0bXBuYW1lID0gZ2V0bG9naW4oKSkgIT0gMCkgeworCSh2b2lkKSBzdHJjcHkobmFtZSwgdG1wbmFtZSk7CisJbmFtZVswXSA9IHRvdXBwZXIoVUNoYXIobmFtZVswXSkpOworICAgIH0gZWxzZQorCSh2b2lkKSBzdHJjcHkobmFtZSwgZGZ0bmFtZSk7CisKKyAgICAodm9pZCkgaW5pdHNjcigpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgICh2b2lkKSBkZWZfcHJvZ19tb2RlKCk7CisgICAgKHZvaWQpIG5vbmwoKTsKKyAgICAodm9pZCkgY2JyZWFrKCk7CisgICAgKHZvaWQpIG5vZWNobygpOworCisjaWZkZWYgUEVOR1VJTgorICAgICh2b2lkKSBjbGVhcigpOworICAgICh2b2lkKSBtdmFkZHN0cig0LCAyOSwgIldlbGNvbWUgdG8gQmF0dGxlc2hpcCEiKTsKKyAgICAodm9pZCkgbW92ZSg4LCAwKTsKKyAgICBQUigiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuIik7CisgICAgUFIoIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcICAgICAgICAgICAgICAgICAgICAgXFwgXFxcbiIpOworICAgIFBSKCIgICAgICAgICAgICAgICAgICAgICAgICAgIFxcIFxcICAgICAgICAgICAgICAgICAgIFxcIFxcIFxcX19fX19fX19fX19fX1xuIik7CisgICAgUFIoIiAgICAgICAgICAgICAgICAgICAgICAgICBcXCBcXCBcXF9fX19fX19fX19fX18gICAgICBcXCBcXC8gICAgICAgICAgICB8XG4iKTsKKyAgICBQUigiICAgICAgICAgICAgICAgICAgICAgICAgICBcXCBcXC8gICAgICAgICAgICAgXFwgICAgICBcXC8gICAgICAgICAgICAgfFxuIik7CisgICAgUFIoIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcLyAgICAgICAgICAgICAgIFxcX19fX18vICAgICAgICAgICAgICB8X19cbiIpOworICAgIFBSKCIgICAgICAgICAgIF9fX19fX19fX19fX19fX18vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuIik7CisgICAgUFIoIiAgICAgICAgICAgXFwgIFMuUy4gUGVuZ3VpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuIik7CisgICAgUFIoIiAgICAgICAgICAgIFxcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXG4iKTsKKyAgICBQUigiICAgICAgICAgICAgIFxcX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fL1xuIik7CisKKyAgICAodm9pZCkgbXZhZGRzdHIoMjIsIDI3LCAiSGl0IGFueSBrZXkgdG8gY29udGludWUuLi4iKTsKKyAgICAodm9pZCkgcmVmcmVzaCgpOworICAgICh2b2lkKSBnZXRjaCgpOworI2VuZGlmIC8qIFBFTkdVSU4gKi8KKworI2lmZGVmIEFfQ09MT1IKKyAgICBzdGFydF9jb2xvcigpOworCisgICAgaW5pdF9wYWlyKENPTE9SX0JMQUNLLCBDT0xPUl9CTEFDSywgQ09MT1JfQkxBQ0spOworICAgIGluaXRfcGFpcihDT0xPUl9HUkVFTiwgQ09MT1JfR1JFRU4sIENPTE9SX0JMQUNLKTsKKyAgICBpbml0X3BhaXIoQ09MT1JfUkVELCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKyAgICBpbml0X3BhaXIoQ09MT1JfQ1lBTiwgQ09MT1JfQ1lBTiwgQ09MT1JfQkxBQ0spOworICAgIGluaXRfcGFpcihDT0xPUl9XSElURSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMQUNLKTsKKyAgICBpbml0X3BhaXIoQ09MT1JfTUFHRU5UQSwgQ09MT1JfTUFHRU5UQSwgQ09MT1JfQkxBQ0spOworICAgIGluaXRfcGFpcihDT0xPUl9CTFVFLCBDT0xPUl9CTFVFLCBDT0xPUl9CTEFDSyk7CisgICAgaW5pdF9wYWlyKENPTE9SX1lFTExPVywgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSyk7CisjZW5kaWYgLyogQV9DT0xPUiAqLworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgKHZvaWQpIG1vdXNlbWFzayhCVVRUT04xX0NMSUNLRUQsIChtbWFza190ICopIE5VTEwpOworI2VuZGlmIC8qIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiAqLworfQorCisvKiBWQVJBUkdTMSAqLworc3RhdGljIHZvaWQKK3Byb21wdChpbnQgbiwgTkNVUlNFU19DT05TVCBjaGFyICpmLCBjb25zdCBjaGFyICpzKQorLyogcHJpbnQgYSBtZXNzYWdlIGF0IHRoZSBwcm9tcHQgbGluZSAqLworeworICAgICh2b2lkKSBtb3ZlKFBST01QVExJTkUgKyBuLCAwKTsKKyAgICAodm9pZCkgY2xydG9lb2woKTsKKyAgICAodm9pZCkgcHJpbnR3KGYsIHMpOworICAgICh2b2lkKSByZWZyZXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkCitlcnJvcihOQ1VSU0VTX0NPTlNUIGNoYXIgKnMpCit7CisgICAgKHZvaWQpIG1vdmUoUFJPTVBUTElORSArIDIsIDApOworICAgICh2b2lkKSBjbHJ0b2VvbCgpOworICAgIGlmIChzKSB7CisJKHZvaWQpIGFkZHN0cihzKTsKKwkodm9pZCkgYmVlcCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3BsYWNlc2hpcChpbnQgYiwgc2hpcF90ICogc3MsIGludCB2aXMpCit7CisgICAgaW50IGw7CisKKyAgICBmb3IgKGwgPSAwOyBsIDwgc3MtPmxlbmd0aDsgKytsKSB7CisJaW50IG5ld3ggPSBzcy0+eCArIGwgKiB4aW5jcltzcy0+ZGlyXTsKKwlpbnQgbmV3eSA9IHNzLT55ICsgbCAqIHlpbmNyW3NzLT5kaXJdOworCisJYm9hcmRbYl1bbmV3eF1bbmV3eV0gPSBzcy0+c3ltYm9sOworCWlmICh2aXMpIHsKKwkgICAgcGdvdG8obmV3eSwgbmV3eCk7CisJICAgICh2b2lkKSBhZGRjaCgoY2h0eXBlKSBzcy0+c3ltYm9sKTsKKwl9CisgICAgfQorICAgIHNzLT5oaXRzID0gMDsKK30KKworc3RhdGljIGludAorcm5kKGludCBuKQoreworICAgIHJldHVybiAoKChyYW5kKCkgJiAweDdGRkYpICUgbikpOworfQorCitzdGF0aWMgdm9pZAorcmFuZG9tcGxhY2UoaW50IGIsIHNoaXBfdCAqIHNzKQorLyogZ2VuZXJhdGUgYSB2YWxpZCByYW5kb20gc2hpcCBwbGFjZW1lbnQgaW50byBweCxweSAqLworeworCisgICAgZG8geworCXNzLT5kaXIgPSBybmQoMikgPyBFIDogUzsKKwlzcy0+eCA9IHJuZChCV0lEVEggLSAoc3MtPmRpciA9PSBFID8gc3MtPmxlbmd0aCA6IDApKTsKKwlzcy0+eSA9IHJuZChCREVQVEggLSAoc3MtPmRpciA9PSBTID8gc3MtPmxlbmd0aCA6IDApKTsKKyAgICB9IHdoaWxlCisJKCFjaGVja3BsYWNlKGIsIHNzLCBGQUxTRSkpOworfQorCitzdGF0aWMgdm9pZAoraW5pdGdhbWUodm9pZCkKK3sKKyAgICBpbnQgaSwgaiwgdW5wbGFjZWQ7CisgICAgc2hpcF90ICpzczsKKworICAgICh2b2lkKSBjbGVhcigpOworICAgICh2b2lkKSBtdmFkZHN0cigwLCAzNSwgIkJBVFRMRVNISVBTIik7CisgICAgKHZvaWQpIG1vdmUoUFJPTVBUTElORSArIDIsIDApOworICAgIGFubm91bmNlb3B0cygpOworCisgICAgbWVtc2V0KGJvYXJkLCAwLCBzaXplb2YoY2hhcikgKiBCV0lEVEggKiBCREVQVEggKiAyKTsKKyAgICBtZW1zZXQoaGl0cywgMCwgc2l6ZW9mKGNoYXIpICogQldJRFRIICogQkRFUFRIICogMik7CisgICAgZm9yIChpID0gMDsgaSA8IFNISVBUWVBFUzsgaSsrKSB7CisJc3MgPSBjcHVzaGlwICsgaTsKKworCXNzLT54ID0KKwkgICAgc3MtPnkgPQorCSAgICBzcy0+ZGlyID0KKwkgICAgc3MtPmhpdHMgPSAwOworCXNzLT5wbGFjZWQgPSBGQUxTRTsKKworCXNzID0gcGx5c2hpcCArIGk7CisKKwlzcy0+eCA9CisJICAgIHNzLT55ID0KKwkgICAgc3MtPmRpciA9CisJICAgIHNzLT5oaXRzID0gMDsKKwlzcy0+cGxhY2VkID0gRkFMU0U7CisgICAgfQorCisgICAgLyogZHJhdyBlbXB0eSBib2FyZHMgKi8KKyAgICAodm9pZCkgbXZhZGRzdHIoUFlCQVNFIC0gMiwgUFhCQVNFICsgNSwgIk1haW4gQm9hcmQiKTsKKyAgICAodm9pZCkgbXZhZGRzdHIoUFlCQVNFIC0gMSwgUFhCQVNFIC0gMywgbnVtYmVycyk7CisgICAgZm9yIChpID0gMDsgaSA8IEJERVBUSDsgKytpKSB7CisJKHZvaWQpIG12YWRkY2goUFlCQVNFICsgaSwgUFhCQVNFIC0gMywgKGNodHlwZSkgKGkgKyAnQScpKTsKKyNpZmRlZiBBX0NPTE9SCisJaWYgKGhhc19jb2xvcnMoKSkKKwkgICAgYXR0cm9uKENPTE9SX1BBSVIoQ09MT1JfQkxVRSkpOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKwkodm9pZCkgYWRkY2goJyAnKTsKKwlmb3IgKGogPSAwOyBqIDwgQldJRFRIOyBqKyspCisJICAgICh2b2lkKSBhZGRzdHIoIiAuICIpOworI2lmZGVmIEFfQ09MT1IKKwlhdHRyc2V0KDApOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKwkodm9pZCkgYWRkY2goJyAnKTsKKwkodm9pZCkgYWRkY2goKGNodHlwZSkgKGkgKyAnQScpKTsKKyAgICB9CisgICAgKHZvaWQpIG12YWRkc3RyKFBZQkFTRSArIEJERVBUSCwgUFhCQVNFIC0gMywgbnVtYmVycyk7CisgICAgKHZvaWQpIG12YWRkc3RyKENZQkFTRSAtIDIsIENYQkFTRSArIDcsICJIaXQvTWlzcyBCb2FyZCIpOworICAgICh2b2lkKSBtdmFkZHN0cihDWUJBU0UgLSAxLCBDWEJBU0UgLSAzLCBudW1iZXJzKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgQkRFUFRIOyArK2kpIHsKKwkodm9pZCkgbXZhZGRjaChDWUJBU0UgKyBpLCBDWEJBU0UgLSAzLCAoY2h0eXBlKSAoaSArICdBJykpOworI2lmZGVmIEFfQ09MT1IKKwlpZiAoaGFzX2NvbG9ycygpKQorCSAgICBhdHRyb24oQ09MT1JfUEFJUihDT0xPUl9CTFVFKSk7CisjZW5kaWYgLyogQV9DT0xPUiAqLworCSh2b2lkKSBhZGRjaCgnICcpOworCWZvciAoaiA9IDA7IGogPCBCV0lEVEg7IGorKykKKwkgICAgKHZvaWQpIGFkZHN0cigiIC4gIik7CisjaWZkZWYgQV9DT0xPUgorCWF0dHJzZXQoMCk7CisjZW5kaWYgLyogQV9DT0xPUiAqLworCSh2b2lkKSBhZGRjaCgnICcpOworCSh2b2lkKSBhZGRjaCgoY2h0eXBlKSAoaSArICdBJykpOworICAgIH0KKworICAgICh2b2lkKSBtdmFkZHN0cihDWUJBU0UgKyBCREVQVEgsIENYQkFTRSAtIDMsIG51bWJlcnMpOworCisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSwgSFhCQVNFLAorCQkgICAgIlRvIHBvc2l0aW9uIHlvdXIgc2hpcHM6IG1vdmUgdGhlIGN1cnNvciB0byBhIHNwb3QsIHRoZW4iKTsKKyAgICAodm9pZCkgbXZwcmludHcoSFlCQVNFICsgMSwgSFhCQVNFLAorCQkgICAgInR5cGUgdGhlIGZpcnN0IGxldHRlciBvZiBhIHNoaXAgdHlwZSB0byBzZWxlY3QgaXQsIHRoZW4iKTsKKyAgICAodm9pZCkgbXZwcmludHcoSFlCQVNFICsgMiwgSFhCQVNFLAorCQkgICAgInR5cGUgYSBkaXJlY3Rpb24gKFtoamtsXSBvciBbNDg2Ml0pLCBpbmRpY2F0aW5nIGhvdyB0aGUiKTsKKyAgICAodm9pZCkgbXZwcmludHcoSFlCQVNFICsgMywgSFhCQVNFLAorCQkgICAgInNoaXAgc2hvdWxkIGJlIHBvaW50ZWQuIFlvdSBtYXkgYWxzbyB0eXBlIGEgc2hpcCBsZXR0ZXIiKTsKKyAgICAodm9pZCkgbXZwcmludHcoSFlCQVNFICsgNCwgSFhCQVNFLAorCQkgICAgImZvbGxvd2VkIGJ5IGByJyB0byBwb3NpdGlvbiBpdCByYW5kb21seSwgb3IgdHlwZSBgUicgdG8iKTsKKyAgICAodm9pZCkgbXZwcmludHcoSFlCQVNFICsgNSwgSFhCQVNFLAorCQkgICAgInBsYWNlIGFsbCByZW1haW5pbmcgc2hpcHMgcmFuZG9tbHkuIik7CisKKyAgICAodm9pZCkgbXZhZGRzdHIoTVlCQVNFLCBNWEJBU0UsICJBaW1pbmcga2V5czoiKTsKKyAgICAodm9pZCkgbXZhZGRzdHIoU1lCQVNFLCBTWEJBU0UsICJ5IGsgdSAgICA3IDggOSIpOworICAgICh2b2lkKSBtdmFkZHN0cihTWUJBU0UgKyAxLCBTWEJBU0UsICIgXFx8LyAgICAgIFxcfC8gIik7CisgICAgKHZvaWQpIG12YWRkc3RyKFNZQkFTRSArIDIsIFNYQkFTRSwgImgtKy1sICAgIDQtKy02Iik7CisgICAgKHZvaWQpIG12YWRkc3RyKFNZQkFTRSArIDMsIFNYQkFTRSwgIiAvfFxcICAgICAgL3xcXCAiKTsKKyAgICAodm9pZCkgbXZhZGRzdHIoU1lCQVNFICsgNCwgU1hCQVNFLCAiYiBqIG4gICAgMSAyIDMiKTsKKworICAgIC8qIGhhdmUgdGhlIGNvbXB1dGVyIHBsYWNlIHNoaXBzICovCisgICAgZm9yIChzcyA9IGNwdXNoaXA7IHNzIDwgY3B1c2hpcCArIFNISVBUWVBFUzsgc3MrKykgeworCXJhbmRvbXBsYWNlKENPTVBVVEVSLCBzcyk7CisJcGxhY2VzaGlwKENPTVBVVEVSLCBzcywgRkFMU0UpOworICAgIH0KKworICAgIHNzID0gKHNoaXBfdCAqKSBOVUxMOworICAgIGRvIHsKKwljaGFyIGMsIGRvY2tlZFtTSElQVFlQRVMgKyAyXSwgKmNwID0gZG9ja2VkOworCisJLyogZmlndXJlIHdoaWNoIHNoaXBzIHN0aWxsIHdhaXQgdG8gYmUgcGxhY2VkICovCisJKmNwKysgPSAnUic7CisJZm9yIChpID0gMDsgaSA8IFNISVBUWVBFUzsgaSsrKQorCSAgICBpZiAoIXBseXNoaXBbaV0ucGxhY2VkKQorCQkqY3ArKyA9IHBseXNoaXBbaV0uc3ltYm9sOworCSpjcCA9ICdcMCc7CisKKwkvKiBnZXQgYSBjb21tYW5kIGxldHRlciAqLworCXByb21wdCgxLCAiVHlwZSBvbmUgb2YgWyVzXSB0byBwaWNrIGEgc2hpcC4iLCBkb2NrZWQgKyAxKTsKKwlkbyB7CisJICAgIGMgPSBnZXRjb29yZChQTEFZRVIpOworCX0gd2hpbGUKKwkgICAgKCFzdHJjaHIoZG9ja2VkLCBjKSk7CisKKwlpZiAoYyA9PSAnUicpCisJICAgICh2b2lkKSB1bmdldGNoKCdSJyk7CisJZWxzZSB7CisJICAgIC8qIG1hcCB0aGF0IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9sICovCisJICAgIGZvciAoc3MgPSBwbHlzaGlwOyBzcyA8IHBseXNoaXAgKyBTSElQVFlQRVM7IHNzKyspCisJCWlmIChzcy0+c3ltYm9sID09IGMpCisJCSAgICBicmVhazsKKworCSAgICBwcm9tcHQoMSwgIlR5cGUgb25lIG9mIFtoamtsclJdIHRvIHBsYWNlIHlvdXIgJXMuIiwgc3MtPm5hbWUpOworCSAgICBwZ290byhjdXJ5LCBjdXJ4KTsKKwl9CisKKwlkbyB7CisJICAgIGMgPSBnZXRjaCgpOworCX0gd2hpbGUKKwkgICAgKCEoc3RyY2hyKCJoamtsclIiLCBjKSB8fCBjID09IEZGKSk7CisKKwlpZiAoYyA9PSBGRikgeworCSAgICAodm9pZCkgY2xlYXJvayhzdGRzY3IsIFRSVUUpOworCSAgICAodm9pZCkgcmVmcmVzaCgpOworCX0gZWxzZSBpZiAoYyA9PSAncicpIHsKKwkgICAgYXNzZXJ0KHNzICE9IDApOworCSAgICBwcm9tcHQoMSwgIlJhbmRvbS1wbGFjaW5nIHlvdXIgJXMiLCBzcy0+bmFtZSk7CisJICAgIHJhbmRvbXBsYWNlKFBMQVlFUiwgc3MpOworCSAgICBwbGFjZXNoaXAoUExBWUVSLCBzcywgVFJVRSk7CisJICAgIGVycm9yKChjaGFyICopIE5VTEwpOworCSAgICBzcy0+cGxhY2VkID0gVFJVRTsKKwl9IGVsc2UgaWYgKGMgPT0gJ1InKSB7CisJICAgIHByb21wdCgxLCAiUGxhY2luZyB0aGUgcmVzdCBvZiB5b3VyIGZsZWV0IGF0IHJhbmRvbS4uLiIsICIiKTsKKwkgICAgZm9yIChzcyA9IHBseXNoaXA7IHNzIDwgcGx5c2hpcCArIFNISVBUWVBFUzsgc3MrKykKKwkJaWYgKCFzcy0+cGxhY2VkKSB7CisJCSAgICByYW5kb21wbGFjZShQTEFZRVIsIHNzKTsKKwkJICAgIHBsYWNlc2hpcChQTEFZRVIsIHNzLCBUUlVFKTsKKwkJICAgIHNzLT5wbGFjZWQgPSBUUlVFOworCQl9CisJICAgIGVycm9yKChjaGFyICopIE5VTEwpOworCX0gZWxzZSBpZiAoc3RyY2hyKCJoamtsODQ2MiIsIGMpKSB7CisJICAgIGFzc2VydChzcyAhPSAwKTsKKwkgICAgc3MtPnggPSBjdXJ4OworCSAgICBzcy0+eSA9IGN1cnk7CisKKwkgICAgc3dpdGNoIChjKSB7CisJICAgIGNhc2UgJ2snOgorCSAgICBjYXNlICc4JzoKKwkJc3MtPmRpciA9IE47CisJCWJyZWFrOworCSAgICBjYXNlICdqJzoKKwkgICAgY2FzZSAnMic6CisJCXNzLT5kaXIgPSBTOworCQlicmVhazsKKwkgICAgY2FzZSAnaCc6CisJICAgIGNhc2UgJzQnOgorCQlzcy0+ZGlyID0gVzsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2wnOgorCSAgICBjYXNlICc2JzoKKwkJc3MtPmRpciA9IEU7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgaWYgKGNoZWNrcGxhY2UoUExBWUVSLCBzcywgVFJVRSkpIHsKKwkJcGxhY2VzaGlwKFBMQVlFUiwgc3MsIFRSVUUpOworCQllcnJvcigoY2hhciAqKSBOVUxMKTsKKwkJc3MtPnBsYWNlZCA9IFRSVUU7CisJICAgIH0KKwl9CisKKwlmb3IgKHVucGxhY2VkID0gaSA9IDA7IGkgPCBTSElQVFlQRVM7IGkrKykKKwkgICAgdW5wbGFjZWQgKz0gIXBseXNoaXBbaV0ucGxhY2VkOworICAgIH0gd2hpbGUKKwkodW5wbGFjZWQpOworCisgICAgdHVybiA9IHJuZCgyKTsKKworICAgICh2b2lkKSBtdnByaW50dyhIWUJBU0UsIEhYQkFTRSwKKwkJICAgICJUbyBmaXJlLCBtb3ZlIHRoZSBjdXJzb3IgdG8geW91ciBjaG9zZW4gYWltaW5nIHBvaW50ICAgIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDEsIEhYQkFTRSwKKwkJICAgICJhbmQgc3RyaWtlIGFueSBrZXkgb3RoZXIgdGhhbiBhIG1vdGlvbiBrZXkuICAgICAgICAgICAgIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDIsIEhYQkFTRSwKKwkJICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDMsIEhYQkFTRSwKKwkJICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDQsIEhYQkFTRSwKKwkJICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisgICAgKHZvaWQpIG12cHJpbnR3KEhZQkFTRSArIDUsIEhYQkFTRSwKKwkJICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisKKyAgICAodm9pZCkgcHJvbXB0KDAsICJQcmVzcyBhbnkga2V5IHRvIHN0YXJ0Li4uIiwgIiIpOworICAgICh2b2lkKSBnZXRjaCgpOworfQorCitzdGF0aWMgaW50CitnZXRjb29yZChpbnQgYXRjcHUpCit7CisgICAgaW50IG55LCBueCwgYzsKKworICAgIGlmIChhdGNwdSkKKwljZ290byhjdXJ5LCBjdXJ4KTsKKyAgICBlbHNlCisJcGdvdG8oY3VyeSwgY3VyeCk7CisgICAgKHZvaWQpIHJlZnJlc2goKTsKKyAgICBmb3IgKDs7KSB7CisJaWYgKGF0Y3B1KSB7CisJICAgICh2b2lkKSBtdnByaW50dyhDWUJBU0UgKyBCREVQVEggKyAxLCBDWEJBU0UgKyAxMSwgIiglZCwgJWMpIiwKKwkJCSAgICBjdXJ4LCAnQScgKyBjdXJ5KTsKKwkgICAgY2dvdG8oY3VyeSwgY3VyeCk7CisJfSBlbHNlIHsKKwkgICAgKHZvaWQpIG12cHJpbnR3KFBZQkFTRSArIEJERVBUSCArIDEsIFBYQkFTRSArIDExLCAiKCVkLCAlYykiLAorCQkJICAgIGN1cngsICdBJyArIGN1cnkpOworCSAgICBwZ290byhjdXJ5LCBjdXJ4KTsKKwl9CisKKwlzd2l0Y2ggKGMgPSBnZXRjaCgpKSB7CisJY2FzZSAnayc6CisJY2FzZSAnOCc6CisJY2FzZSBLRVlfVVA6CisJICAgIG55ID0gY3VyeSArIEJERVBUSCAtIDE7CisJICAgIG54ID0gY3VyeDsKKwkgICAgYnJlYWs7CisJY2FzZSAnaic6CisJY2FzZSAnMic6CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgbnkgPSBjdXJ5ICsgMTsKKwkgICAgbnggPSBjdXJ4OworCSAgICBicmVhazsKKwljYXNlICdoJzoKKwljYXNlICc0JzoKKwljYXNlIEtFWV9MRUZUOgorCSAgICBueSA9IGN1cnk7CisJICAgIG54ID0gY3VyeCArIEJXSURUSCAtIDE7CisJICAgIGJyZWFrOworCWNhc2UgJ2wnOgorCWNhc2UgJzYnOgorCWNhc2UgS0VZX1JJR0hUOgorCSAgICBueSA9IGN1cnk7CisJICAgIG54ID0gY3VyeCArIDE7CisJICAgIGJyZWFrOworCWNhc2UgJ3knOgorCWNhc2UgJzcnOgorCWNhc2UgS0VZX0ExOgorCSAgICBueSA9IGN1cnkgKyBCREVQVEggLSAxOworCSAgICBueCA9IGN1cnggKyBCV0lEVEggLSAxOworCSAgICBicmVhazsKKwljYXNlICdiJzoKKwljYXNlICcxJzoKKwljYXNlIEtFWV9DMToKKwkgICAgbnkgPSBjdXJ5ICsgMTsKKwkgICAgbnggPSBjdXJ4ICsgQldJRFRIIC0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSAndSc6CisJY2FzZSAnOSc6CisJY2FzZSBLRVlfQTM6CisJICAgIG55ID0gY3VyeSArIEJERVBUSCAtIDE7CisJICAgIG54ID0gY3VyeCArIDE7CisJICAgIGJyZWFrOworCWNhc2UgJ24nOgorCWNhc2UgJzMnOgorCWNhc2UgS0VZX0MzOgorCSAgICBueSA9IGN1cnkgKyAxOworCSAgICBueCA9IGN1cnggKyAxOworCSAgICBicmVhazsKKwljYXNlIEZGOgorCSAgICBueCA9IGN1cng7CisJICAgIG55ID0gY3VyeTsKKwkgICAgKHZvaWQpIGNsZWFyb2soc3Rkc2NyLCBUUlVFKTsKKwkgICAgKHZvaWQpIHJlZnJlc2goKTsKKwkgICAgYnJlYWs7CisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisJY2FzZSBLRVlfTU9VU0U6CisJICAgIHsKKwkJTUVWRU5UIG15ZXZlbnQ7CisKKwkJZ2V0bW91c2UoJm15ZXZlbnQpOworCQlpZiAoYXRjcHUKKwkJICAgICYmIG15ZXZlbnQueSA+PSBDWSgwKSAmJiBteWV2ZW50LnkgPD0gQ1koQkRFUFRIKQorCQkgICAgJiYgbXlldmVudC54ID49IENYKDApICYmIG15ZXZlbnQueCA8PSBDWChCREVQVEgpKSB7CisJCSAgICBjdXJ4ID0gQ1hJTlYobXlldmVudC54KTsKKwkJICAgIGN1cnkgPSBDWUlOVihteWV2ZW50LnkpOworCQkgICAgcmV0dXJuICgnICcpOworCQl9IGVsc2UgeworCQkgICAgYmVlcCgpOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCSAgICAvKiBubyBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKworCWRlZmF1bHQ6CisJICAgIGlmIChhdGNwdSkKKwkJKHZvaWQpIG12YWRkc3RyKENZQkFTRSArIEJERVBUSCArIDEsIENYQkFTRSArIDExLCAiICAgICAgIik7CisJICAgIGVsc2UKKwkJKHZvaWQpIG12YWRkc3RyKFBZQkFTRSArIEJERVBUSCArIDEsIFBYQkFTRSArIDExLCAiICAgICAgIik7CisJICAgIHJldHVybiAoYyk7CisJfQorCisJY3VyeCA9IG54ICUgQldJRFRIOworCWN1cnkgPSBueSAlIEJERVBUSDsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sCitjb2xsaWRlY2hlY2soaW50IGIsIGludCB5LCBpbnQgeCkKKy8qIGlzIHRoaXMgbG9jYXRpb24gb24gdGhlIHNlbGVjdGVkIHpib2FyZCBhZGphY2VudCB0byBhIHNoaXA/ICovCit7CisgICAgYm9vbCBjb2xsaWRlOworCisgICAgLyogYW55dGhpbmcgb24gdGhlIHNxdWFyZSAqLworICAgIGlmICgoY29sbGlkZSA9IElTX1NISVAoYm9hcmRbYl1beF1beV0pKSAhPSBGQUxTRSkKKwlyZXR1cm4gKGNvbGxpZGUpOworCisgICAgLyogYW55dGhpbmcgb24gdGhlIG5laWdoYm9ycyAqLworICAgIGlmICghY2xvc2VwYWNrKSB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJICAgIGludCB4ZW5kLCB5ZW5kOworCisJICAgIHllbmQgPSB5ICsgeWluY3JbaV07CisJICAgIHhlbmQgPSB4ICsgeGluY3JbaV07CisJICAgIGlmIChPTkJPQVJEKHhlbmQsIHllbmQpCisJCSYmIElTX1NISVAoYm9hcmRbYl1beGVuZF1beWVuZF0pKSB7CisJCWNvbGxpZGUgPSBUUlVFOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIChjb2xsaWRlKTsKK30KKworc3RhdGljIGJvb2wKK2NoZWNrcGxhY2UoaW50IGIsIHNoaXBfdCAqIHNzLCBpbnQgdmlzKQoreworICAgIGludCBsLCB4ZW5kLCB5ZW5kOworCisgICAgLyogZmlyc3QsIGNoZWNrIGZvciBib2FyZCBlZGdlcyAqLworICAgIHhlbmQgPSBzcy0+eCArIChzcy0+bGVuZ3RoIC0gMSkgKiB4aW5jcltzcy0+ZGlyXTsKKyAgICB5ZW5kID0gc3MtPnkgKyAoc3MtPmxlbmd0aCAtIDEpICogeWluY3Jbc3MtPmRpcl07CisgICAgaWYgKCFPTkJPQVJEKHhlbmQsIHllbmQpKSB7CisJaWYgKHZpcykKKwkgICAgc3dpdGNoIChybmQoMykpIHsKKwkgICAgY2FzZSAwOgorCQllcnJvcigiU2hpcCBpcyBoYW5naW5nIGZyb20gdGhlIGVkZ2Ugb2YgdGhlIHdvcmxkIik7CisJCWJyZWFrOworCSAgICBjYXNlIDE6CisJCWVycm9yKCJUcnkgZml0dGluZyBpdCBvbiB0aGUgYm9hcmQiKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMjoKKwkJZXJyb3IoIkZpZ3VyZSBJIHdvbid0IGZpbmQgaXQgaWYgeW91IHB1dCBpdCB0aGVyZT8iKTsKKwkJYnJlYWs7CisJICAgIH0KKwlyZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBmb3IgKGwgPSAwOyBsIDwgc3MtPmxlbmd0aDsgKytsKSB7CisJaWYgKGNvbGxpZGVjaGVjayhiLCBzcy0+eSArIGwgKiB5aW5jcltzcy0+ZGlyXSwgc3MtPnggKyBsICogeGluY3Jbc3MtPmRpcl0pKSB7CisJICAgIGlmICh2aXMpCisJCXN3aXRjaCAocm5kKDMpKSB7CisJCWNhc2UgMDoKKwkJICAgIGVycm9yKCJUaGVyZSdzIGFscmVhZHkgYSBzaGlwIHRoZXJlIik7CisJCSAgICBicmVhazsKKwkJY2FzZSAxOgorCQkgICAgZXJyb3IoIkNvbGxpc2lvbiBhbGVydCEgIEFhYWFhYWdoISIpOworCQkgICAgYnJlYWs7CisJCWNhc2UgMjoKKwkJICAgIGVycm9yKCJFciwgQWRtaXJhbCwgd2hhdCBhYm91dCB0aGUgb3RoZXIgc2hpcD8iKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIHJldHVybiAoRkFMU0UpOworCX0KKyAgICB9CisgICAgcmV0dXJuIChUUlVFKTsKK30KKworc3RhdGljIGludAorYXdpbm5hKHZvaWQpCit7CisgICAgaW50IGksIGo7CisgICAgc2hpcF90ICpzczsKKworICAgIGZvciAoaSA9IDA7IGkgPCAyOyArK2kpIHsKKwlzcyA9IChpKSA/IGNwdXNoaXAgOiBwbHlzaGlwOworCWZvciAoaiA9IDA7IGogPCBTSElQVFlQRVM7ICsraiwgKytzcykKKwkgICAgaWYgKHNzLT5sZW5ndGggPiBzcy0+aGl0cykKKwkJYnJlYWs7CisJaWYgKGogPT0gU0hJUFRZUEVTKQorCSAgICByZXR1cm4gKE9USEVSKTsKKyAgICB9CisgICAgcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBzaGlwX3QgKgoraGl0c2hpcChpbnQgeCwgaW50IHkpCisvKiByZWdpc3RlciBhIGhpdCBvbiB0aGUgdGFyZ2V0ZWQgc2hpcCAqLworeworICAgIHNoaXBfdCAqc2IsICpzczsKKyAgICBjaGFyIHN5bTsKKyAgICBpbnQgb2xkeCwgb2xkeTsKKworICAgIGdldHl4KHN0ZHNjciwgb2xkeSwgb2xkeCk7CisgICAgc2IgPSAodHVybikgPyBwbHlzaGlwIDogY3B1c2hpcDsKKyAgICBpZiAoKHN5bSA9IGJvYXJkW09USEVSXVt4XVt5XSkgPT0gMCkKKwlyZXR1cm4gKChzaGlwX3QgKikgTlVMTCk7CisgICAgZm9yIChzcyA9IHNiOyBzcyA8IHNiICsgU0hJUFRZUEVTOyArK3NzKQorCWlmIChzcy0+c3ltYm9sID09IHN5bSkgeworCSAgICBpZiAoKytzcy0+aGl0cyA8IHNzLT5sZW5ndGgpCS8qIHN0aWxsIGFmbG9hdD8gKi8KKwkJcmV0dXJuICgoc2hpcF90ICopIE5VTEwpOworCSAgICBlbHNlIHsJCS8qIHN1bmshICovCisJCWludCBpLCBqOworCisJCWlmICghY2xvc2VwYWNrKQorCQkgICAgZm9yIChqID0gLTE7IGogPD0gMTsgaisrKSB7CisJCQlpbnQgYnggPSBzcy0+eCArIGogKiB4aW5jclsoc3MtPmRpciArIDIpICUgOF07CisJCQlpbnQgYnkgPSBzcy0+eSArIGogKiB5aW5jclsoc3MtPmRpciArIDIpICUgOF07CisKKwkJCWZvciAoaSA9IC0xOyBpIDw9IHNzLT5sZW5ndGg7ICsraSkgeworCQkJICAgIGludCB4MSwgeTE7CisKKwkJCSAgICB4MSA9IGJ4ICsgaSAqIHhpbmNyW3NzLT5kaXJdOworCQkJICAgIHkxID0gYnkgKyBpICogeWluY3Jbc3MtPmRpcl07CisJCQkgICAgaWYgKE9OQk9BUkQoeDEsIHkxKSkgeworCQkJCWhpdHNbdHVybl1beDFdW3kxXSA9IE1BUktfTUlTUzsKKwkJCQlpZiAodHVybiAlIDIgPT0gUExBWUVSKSB7CisJCQkJICAgIGNnb3RvKHkxLCB4MSk7CisjaWZkZWYgQV9DT0xPUgorCQkJCSAgICBpZiAoaGFzX2NvbG9ycygpKQorCQkJCQlhdHRyb24oQ09MT1JfUEFJUihDT0xPUl9HUkVFTikpOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKwkJCQkgICAgKHZvaWQpIGFkZGNoKE1BUktfTUlTUyk7CisjaWZkZWYgQV9DT0xPUgorCQkJCSAgICBhdHRyc2V0KDApOworI2VuZGlmIC8qIEFfQ09MT1IgKi8KKwkJCQl9IGVsc2UgeworCQkJCSAgICBwZ290byh5MSwgeDEpOworCQkJCSAgICAodm9pZCkgYWRkY2goU0hPV1NQTEFTSCk7CisJCQkJfQorCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKworCQlmb3IgKGkgPSAwOyBpIDwgc3MtPmxlbmd0aDsgKytpKSB7CisJCSAgICBpbnQgeDEgPSBzcy0+eCArIGkgKiB4aW5jcltzcy0+ZGlyXTsKKwkJICAgIGludCB5MSA9IHNzLT55ICsgaSAqIHlpbmNyW3NzLT5kaXJdOworCisJCSAgICBoaXRzW3R1cm5dW3gxXVt5MV0gPSBzcy0+c3ltYm9sOworCQkgICAgaWYgKHR1cm4gJSAyID09IFBMQVlFUikgeworCQkJY2dvdG8oeTEsIHgxKTsKKwkJCSh2b2lkKSBhZGRjaCgoY2h0eXBlKSAoc3MtPnN5bWJvbCkpOworCQkgICAgfSBlbHNlIHsKKwkJCXBnb3RvKHkxLCB4MSk7CisjaWZkZWYgQV9DT0xPUgorCQkJaWYgKGhhc19jb2xvcnMoKSkKKwkJCSAgICBhdHRyb24oQ09MT1JfUEFJUihDT0xPUl9SRUQpKTsKKyNlbmRpZiAvKiBBX0NPTE9SICovCisJCQkodm9pZCkgYWRkY2goU0hPV0hJVCk7CisjaWZkZWYgQV9DT0xPUgorCQkJYXR0cnNldCgwKTsKKyNlbmRpZiAvKiBBX0NPTE9SICovCisJCSAgICB9CisJCX0KKworCQkodm9pZCkgbW92ZShvbGR5LCBvbGR4KTsKKwkJcmV0dXJuIChzcyk7CisJICAgIH0KKwl9CisgICAgKHZvaWQpIG1vdmUob2xkeSwgb2xkeCk7CisgICAgcmV0dXJuICgoc2hpcF90ICopIE5VTEwpOworfQorCitzdGF0aWMgYm9vbAorcGx5dHVybih2b2lkKQoreworICAgIHNoaXBfdCAqc3M7CisgICAgYm9vbCBoaXQ7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICptID0gTlVMTDsKKworICAgIHByb21wdCgxLCAiV2hlcmUgZG8geW91IHdhbnQgdG8gc2hvb3Q/ICIsICIiKTsKKyAgICBmb3IgKDs7KSB7CisJKHZvaWQpIGdldGNvb3JkKENPTVBVVEVSKTsKKwlpZiAoaGl0c1tQTEFZRVJdW2N1cnhdW2N1cnldKSB7CisJICAgIHByb21wdCgxLCAiWW91IHNoZWxsZWQgdGhpcyBzcG90IGFscmVhZHkhIFRyeSBhZ2Fpbi4iLCAiIik7CisJICAgIGJlZXAoKTsKKwl9IGVsc2UKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGhpdCA9IElTX1NISVAoYm9hcmRbQ09NUFVURVJdW2N1cnhdW2N1cnldKTsKKyAgICBoaXRzW1BMQVlFUl1bY3VyeF1bY3VyeV0gPSAoaGl0ID8gTUFSS19ISVQgOiBNQVJLX01JU1MpOworICAgIGNnb3RvKGN1cnksIGN1cngpOworI2lmZGVmIEFfQ09MT1IKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJaWYgKGhpdCkKKwkgICAgYXR0cm9uKENPTE9SX1BBSVIoQ09MT1JfUkVEKSk7CisJZWxzZQorCSAgICBhdHRyb24oQ09MT1JfUEFJUihDT0xPUl9HUkVFTikpOworICAgIH0KKyNlbmRpZiAvKiBBX0NPTE9SICovCisgICAgKHZvaWQpIGFkZGNoKChjaHR5cGUpIGhpdHNbUExBWUVSXVtjdXJ4XVtjdXJ5XSk7CisjaWZkZWYgQV9DT0xPUgorICAgIGF0dHJzZXQoMCk7CisjZW5kaWYgLyogQV9DT0xPUiAqLworCisgICAgcHJvbXB0KDEsICJZb3UgJXMuIiwgaGl0ID8gInNjb3JlZCBhIGhpdCIgOiAibWlzc2VkIik7CisgICAgaWYgKGhpdCAmJiAoc3MgPSBoaXRzaGlwKGN1cngsIGN1cnkpKSkgeworCXN3aXRjaCAocm5kKDUpKSB7CisJY2FzZSAwOgorCSAgICBtID0gIiBZb3Ugc2FuayBteSAlcyEiOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIG0gPSAiIEkgaGF2ZSB0aGlzIHNpbmtpbmcgZmVlbGluZyBhYm91dCBteSAlcy4uLi4iOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIG0gPSAiIE15ICVzIGhhcyBnb25lIHRvIERhdnkgSm9uZXMncyBsb2NrZXIhIjsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBtID0gIiBHbHViLCBnbHViIC0tIG15ICVzIGlzIGhlYWRlZCBmb3IgdGhlIGJvdHRvbSEiOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIG0gPSAiIFlvdSdsbCBwaWNrIHVwIHN1cnZpdm9ycyBmcm9tIG15ICVzLCBJIGhvcGUuLi4hIjsKKwkgICAgYnJlYWs7CisJfQorCSh2b2lkKSBwcmludHcobSwgc3MtPm5hbWUpOworCSh2b2lkKSBiZWVwKCk7CisgICAgfQorICAgIHJldHVybiAoaGl0KTsKK30KKworc3RhdGljIGludAorc2dldGMoY29uc3QgY2hhciAqcykKK3sKKyAgICBjb25zdCBjaGFyICpzMTsKKyAgICBpbnQgY2g7CisKKyAgICAodm9pZCkgcmVmcmVzaCgpOworICAgIGZvciAoOzspIHsKKwljaCA9IGdldGNoKCk7CisJaWYgKGlzbG93ZXIoY2gpKQorCSAgICBjaCA9IHRvdXBwZXIoY2gpOworCWlmIChjaCA9PSBDVFJMQykKKwkgICAgdW5pbml0Z2FtZSgwKTsKKwlmb3IgKHMxID0gczsgKnMxICYmIGNoICE9ICpzMTsgKytzMSkKKwkgICAgY29udGludWU7CisJaWYgKCpzMSkgeworCSAgICAodm9pZCkgYWRkY2goKGNodHlwZSkgY2gpOworCSAgICAodm9pZCkgcmVmcmVzaCgpOworCSAgICByZXR1cm4gKGNoKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcmFuZG9tZmlyZShpbnQgKnB4LCBpbnQgKnB5KQorLyogcmFuZG9tLWZpcmUgcm91dGluZSAtLSBpbXBsZW1lbnRzIHNpbXBsZSBkaWFnb25hbC1zdHJpcGluZyBzdHJhdGVneSAqLworeworICAgIHN0YXRpYyBpbnQgdHVybmNvdW50ID0gMDsKKyAgICBzdGF0aWMgaW50IHNyY2hzdGVwID0gQkVHSU5TVEVQOworICAgIHN0YXRpYyBpbnQgaHVudG9mZnM7CS8qIE9mZnNldCBvbiBzZWFyY2ggc3RyYXRlZ3kgKi8KKyAgICBpbnQgeXBvc3NpYmxlW0JXSURUSCAqIEJERVBUSF0sIHhwb3NzaWJsZVtCV0lEVEggKiBCREVQVEhdLCBucG9zczsKKyAgICBpbnQgeXByZWZlcnJlZFtCV0lEVEggKiBCREVQVEhdLCB4cHJlZmVycmVkW0JXSURUSCAqIEJERVBUSF0sIG5wcmVmOworICAgIGludCB4LCB5LCBpOworCisgICAgaWYgKHR1cm5jb3VudCsrID09IDApCisJaHVudG9mZnMgPSBybmQoc3JjaHN0ZXApOworCisgICAgLyogZmlyc3QsIGxpc3QgYWxsIHBvc3NpYmxlIG1vdmVzICovCisgICAgbnBvc3MgPSBucHJlZiA9IDA7CisgICAgZm9yICh4ID0gMDsgeCA8IEJXSURUSDsgeCsrKQorCWZvciAoeSA9IDA7IHkgPCBCREVQVEg7IHkrKykKKwkgICAgaWYgKCFoaXRzW0NPTVBVVEVSXVt4XVt5XSkgeworCQl4cG9zc2libGVbbnBvc3NdID0geDsKKwkJeXBvc3NpYmxlW25wb3NzXSA9IHk7CisJCW5wb3NzKys7CisJCWlmICgoKHggKyBodW50b2ZmcykgJSBzcmNoc3RlcCkgIT0gKHkgJSBzcmNoc3RlcCkpIHsKKwkJICAgIHhwcmVmZXJyZWRbbnByZWZdID0geDsKKwkJICAgIHlwcmVmZXJyZWRbbnByZWZdID0geTsKKwkJICAgIG5wcmVmKys7CisJCX0KKwkgICAgfQorCisgICAgaWYgKG5wcmVmKSB7CisJaSA9IHJuZChucHJlZik7CisKKwkqcHggPSB4cHJlZmVycmVkW2ldOworCSpweSA9IHlwcmVmZXJyZWRbaV07CisgICAgfSBlbHNlIGlmIChucG9zcykgeworCWkgPSBybmQobnBvc3MpOworCisJKnB4ID0geHBvc3NpYmxlW2ldOworCSpweSA9IHlwb3NzaWJsZVtpXTsKKworCWlmIChzcmNoc3RlcCA+IDEpCisJICAgIC0tc3JjaHN0ZXA7CisgICAgfSBlbHNlIHsKKwllcnJvcigiTm8gbW92ZXMgcG9zc2libGU/PyBIZWxwISIpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJLypOT1RSRUFDSEVEICovCisgICAgfQorfQorCisjZGVmaW5lIFNfTUlTUwkwCisjZGVmaW5lIFNfSElUCTEKKyNkZWZpbmUgU19TVU5LCS0xCisKK3N0YXRpYyBpbnQKK2NwdWZpcmUoaW50IHgsIGludCB5KQorLyogZmlyZSBhd2F5IGF0IGdpdmVuIGxvY2F0aW9uICovCit7CisgICAgYm9vbCBoaXQsIHN1bms7CisgICAgc2hpcF90ICpzcyA9IE5VTEw7CisKKyAgICBoaXRzW0NPTVBVVEVSXVt4XVt5XSA9IChoaXQgPSAoYm9hcmRbUExBWUVSXVt4XVt5XSkpID8gTUFSS19ISVQgOiBNQVJLX01JU1M7CisgICAgKHZvaWQpIG12cHJpbnR3KFBST01QVExJTkUsIDAsCisJCSAgICAiSSBzaG9vdCBhdCAlYyVkLiBJICVzISIsIHkgKyAnQScsIHgsIGhpdCA/ICJoaXQiIDoKKwkJICAgICJtaXNzIik7CisgICAgaWYgKChzdW5rID0gKGhpdCAmJiAoc3MgPSBoaXRzaGlwKHgsIHkpKSkpICE9IDApCisJKHZvaWQpIHByaW50dygiIEkndmUgc3VuayB5b3VyICVzIiwgc3MtPm5hbWUpOworICAgICh2b2lkKSBjbHJ0b2VvbCgpOworCisgICAgcGdvdG8oeSwgeCk7CisjaWZkZWYgQV9DT0xPUgorICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpZiAoaGl0KQorCSAgICBhdHRyb24oQ09MT1JfUEFJUihDT0xPUl9SRUQpKTsKKwllbHNlCisJICAgIGF0dHJvbihDT0xPUl9QQUlSKENPTE9SX0dSRUVOKSk7CisgICAgfQorI2VuZGlmIC8qIEFfQ09MT1IgKi8KKyAgICAodm9pZCkgYWRkY2goKGNodHlwZSkgKGhpdCA/IFNIT1dISVQgOiBTSE9XU1BMQVNIKSk7CisjaWZkZWYgQV9DT0xPUgorICAgIGF0dHJzZXQoMCk7CisjZW5kaWYgLyogQV9DT0xPUiAqLworCisgICAgcmV0dXJuIGhpdCA/IChzdW5rID8gU19TVU5LIDogU19ISVQpIDogU19NSVNTOworfQorCisvKgorICogVGhpcyBjb2RlIGltcGxlbWVudHMgYSBmYWlybHkgaXJyZWd1bGFyIEZTTSwgc28gcGxlYXNlIGZvcmdpdmUgdGhlIHJhbXBhbnQKKyAqIHVuc3RydWN0dXJlZG5lc3MgYmVsb3cuIFRoZSBmaXZlIGxhYmVscyBhcmUgc3RhdGVzIHdoaWNoIG5lZWQgdG8gYmUgaGVsZAorICogYmV0d2VlbiBjb21wdXRlciB0dXJucy4KKyAqCisgKiBUaGUgRlNNIGlzIG5vdCBleHRlcm5hbGx5IHJlc2V0IHRvIFJBTkRPTV9GSVJFIGlmIHRoZSBwbGF5ZXIgd2lucy4gSW5zdGVhZCwKKyAqIHRoZSBvdGhlciBzdGF0ZXMgY2hlY2sgZm9yICJpbXBvc3NpYmxlIiBjb25kaXRpb25zIHdoaWNoIHNpZ25pZnkgYSBuZXcKKyAqIGdhbWUsIHRoZW4gaWYgZm91bmQgdHJhbnNpdGlvbiB0byBSQU5ET01fRklSRS4KKyAqLworc3RhdGljIGJvb2wKK2NwdXR1cm4odm9pZCkKK3sKKyNkZWZpbmUgUE9TU0lCTEUoeCwgeSkJKE9OQk9BUkQoeCwgeSkgJiYgIWhpdHNbQ09NUFVURVJdW3hdW3ldKQorI2RlZmluZSBSQU5ET01fRklSRQkwCisjZGVmaW5lIFJBTkRPTV9ISVQJMQorI2RlZmluZSBIVU5UX0RJUkVDVAkyCisjZGVmaW5lIEZJUlNUX1BBU1MJMworI2RlZmluZSBSRVZFUlNFX0pVTVAJNAorI2RlZmluZSBTRUNPTkRfUEFTUwk1CisgICAgc3RhdGljIGludCBuZXh0ID0gUkFORE9NX0ZJUkU7CisgICAgc3RhdGljIGJvb2wgdXNlZFs0XTsKKyAgICBzdGF0aWMgc2hpcF90IHRzOworICAgIGludCBuYXZhaWwsIHgsIHksIGQsIG47CisgICAgaW50IGhpdCA9IFNfTUlTUzsKKworICAgIHN3aXRjaCAobmV4dCkgeworICAgIGNhc2UgUkFORE9NX0ZJUkU6CQkvKiBsYXN0IHNob3Qgd2FzIHJhbmRvbSBhbmQgbWlzc2VkICovCisgICAgICByZWZpcmU6CisJcmFuZG9tZmlyZSgmeCwgJnkpOworCWlmICghKGhpdCA9IGNwdWZpcmUoeCwgeSkpKQorCSAgICBuZXh0ID0gUkFORE9NX0ZJUkU7CisJZWxzZSB7CisJICAgIHRzLnggPSB4OworCSAgICB0cy55ID0geTsKKwkgICAgdHMuaGl0cyA9IDE7CisJICAgIG5leHQgPSAoaGl0ID09IFNfU1VOSykgPyBSQU5ET01fRklSRSA6IFJBTkRPTV9ISVQ7CisJfQorCWJyZWFrOworCisgICAgY2FzZSBSQU5ET01fSElUOgkJLyogbGFzdCBzaG90IHdhcyByYW5kb20gYW5kIGhpdCAqLworCXVzZWRbRSAvIDJdID0gdXNlZFtTIC8gMl0gPSB1c2VkW1cgLyAyXSA9IHVzZWRbTiAvIDJdID0gRkFMU0U7CisJLyogRkFMTFRIUk9VR0ggKi8KKworICAgIGNhc2UgSFVOVF9ESVJFQ1Q6CQkvKiBsYXN0IHNob3QgaGl0LCB3ZSdyZSBsb29raW5nIGZvciBzaGlwJ3MgbG9uZyBheGlzICovCisJZm9yIChkID0gbmF2YWlsID0gMDsgZCA8IDQ7IGQrKykgeworCSAgICB4ID0gdHMueCArIHhpbmNyW2QgKiAyXTsKKwkgICAgeSA9IHRzLnkgKyB5aW5jcltkICogMl07CisJICAgIGlmICghdXNlZFtkXSAmJiBQT1NTSUJMRSh4LCB5KSkKKwkJbmF2YWlsKys7CisJICAgIGVsc2UKKwkJdXNlZFtkXSA9IFRSVUU7CisJfQorCWlmIChuYXZhaWwgPT0gMCkJLyogbm8gdmFsaWQgcGxhY2VzIGZvciBzaG90cyBhZGphY2VudC4uLiAqLworCSAgICBnb3RvIHJlZmlyZTsJLyogLi4uc28gd2UgbXVzdCByYW5kb20tZmlyZSAqLworCWVsc2UgeworCSAgICBuID0gcm5kKG5hdmFpbCkgKyAxOworCSAgICBmb3IgKGQgPSAwOyB1c2VkW2RdOyBkKyspIDsKKwkgICAgLyogdXNlZFtkXSBpcyBmaXJzdCB0aGF0ID09IDAgKi8KKwkgICAgZm9yICg7IG4gPiAxOyBuLS0pCisJCXdoaWxlICh1c2VkWysrZF0pIDsKKwkgICAgLyogdXNlZFtkXSBpcyBuZXh0IHRoYXQgPT0gMCAqLworCisJICAgIGFzc2VydChkIDwgNCk7CisJICAgIGFzc2VydCh1c2VkW2RdID09IEZBTFNFKTsKKworCSAgICB1c2VkW2RdID0gVFJVRTsKKwkgICAgeCA9IHRzLnggKyB4aW5jcltkICogMl07CisJICAgIHkgPSB0cy55ICsgeWluY3JbZCAqIDJdOworCisJICAgIGFzc2VydChQT1NTSUJMRSh4LCB5KSk7CisKKwkgICAgaWYgKCEoaGl0ID0gY3B1ZmlyZSh4LCB5KSkpCisJCW5leHQgPSBIVU5UX0RJUkVDVDsKKwkgICAgZWxzZSB7CisJCXRzLnggPSB4OworCQl0cy55ID0geTsKKwkJdHMuZGlyID0gZCAqIDI7CisJCXRzLmhpdHMrKzsKKwkJbmV4dCA9IChoaXQgPT0gU19TVU5LKSA/IFJBTkRPTV9GSVJFIDogRklSU1RfUEFTUzsKKwkgICAgfQorCX0KKwlicmVhazsKKworICAgIGNhc2UgRklSU1RfUEFTUzoJCS8qIHdlIGhhdmUgYSBzdGFydCBhbmQgYSBkaXJlY3Rpb24gbm93ICovCisJeCA9IHRzLnggKyB4aW5jclt0cy5kaXJdOworCXkgPSB0cy55ICsgeWluY3JbdHMuZGlyXTsKKwlpZiAoUE9TU0lCTEUoeCwgeSkgJiYgKGhpdCA9IGNwdWZpcmUoeCwgeSkpKSB7CisJICAgIHRzLnggPSB4OworCSAgICB0cy55ID0geTsKKwkgICAgdHMuaGl0cysrOworCSAgICBuZXh0ID0gKGhpdCA9PSBTX1NVTkspID8gUkFORE9NX0ZJUkUgOiBGSVJTVF9QQVNTOworCX0gZWxzZQorCSAgICBuZXh0ID0gUkVWRVJTRV9KVU1QOworCWJyZWFrOworCisgICAgY2FzZSBSRVZFUlNFX0pVTVA6CQkvKiBuYWlsIGRvd24gdGhlIHNoaXAncyBvdGhlciBlbmQgKi8KKwlkID0gKHRzLmRpciArIDQpICUgODsKKwl4ID0gdHMueCArIHRzLmhpdHMgKiB4aW5jcltkXTsKKwl5ID0gdHMueSArIHRzLmhpdHMgKiB5aW5jcltkXTsKKwlpZiAoUE9TU0lCTEUoeCwgeSkgJiYgKGhpdCA9IGNwdWZpcmUoeCwgeSkpKSB7CisJICAgIHRzLnggPSB4OworCSAgICB0cy55ID0geTsKKwkgICAgdHMuZGlyID0gZDsKKwkgICAgdHMuaGl0cysrOworCSAgICBuZXh0ID0gKGhpdCA9PSBTX1NVTkspID8gUkFORE9NX0ZJUkUgOiBTRUNPTkRfUEFTUzsKKwl9IGVsc2UKKwkgICAgbmV4dCA9IFJBTkRPTV9GSVJFOworCWJyZWFrOworCisgICAgY2FzZSBTRUNPTkRfUEFTUzoJCS8qIGNvbnRpbnVlIHNob290aW5nIGFmdGVyIHJldmVyc2luZyAqLworCXggPSB0cy54ICsgeGluY3JbdHMuZGlyXTsKKwl5ID0gdHMueSArIHlpbmNyW3RzLmRpcl07CisJaWYgKFBPU1NJQkxFKHgsIHkpICYmIChoaXQgPSBjcHVmaXJlKHgsIHkpKSkgeworCSAgICB0cy54ID0geDsKKwkgICAgdHMueSA9IHk7CisJICAgIHRzLmhpdHMrKzsKKwkgICAgbmV4dCA9IChoaXQgPT0gU19TVU5LKSA/IFJBTkRPTV9GSVJFIDogU0VDT05EX1BBU1M7CisJICAgIGJyZWFrOworCX0gZWxzZQorCSAgICBuZXh0ID0gUkFORE9NX0ZJUkU7CisJYnJlYWs7CisgICAgfQorCisgICAgLyogcGF1c2UgYmV0d2VlbiBzaG90cyBpbiBzYWx2byAqLworICAgIGlmIChzYWx2bykgeworCSh2b2lkKSByZWZyZXNoKCk7CisJKHZvaWQpIHNsZWVwKDEpOworICAgIH0KKyNpZmRlZiBERUJVRworICAgICh2b2lkKSBtdnByaW50dyhQUk9NUFRMSU5FICsgMiwgMCwKKwkJICAgICJOZXcgc3RhdGUgJWQsIHg9JWQsIHk9JWQsIGQ9JWQiLAorCQkgICAgbmV4dCwgeCwgeSwgZCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByZXR1cm4gKChoaXQpID8gVFJVRSA6IEZBTFNFKTsKK30KKworc3RhdGljIGludAorcGxheWFnYWluKHZvaWQpCit7CisgICAgaW50IGo7CisgICAgc2hpcF90ICpzczsKKworICAgIGZvciAoc3MgPSBjcHVzaGlwOyBzcyA8IGNwdXNoaXAgKyBTSElQVFlQRVM7IHNzKyspCisJZm9yIChqID0gMDsgaiA8IHNzLT5sZW5ndGg7IGorKykgeworCSAgICBjZ290byhzcy0+eSArIGogKiB5aW5jcltzcy0+ZGlyXSwgc3MtPnggKyBqICogeGluY3Jbc3MtPmRpcl0pOworCSAgICAodm9pZCkgYWRkY2goKGNodHlwZSkgc3MtPnN5bWJvbCk7CisJfQorCisgICAgaWYgKGF3aW5uYSgpKQorCSsrY3B1d29uOworICAgIGVsc2UKKwkrK3BseXdvbjsKKyAgICBqID0gMTggKyBzdHJsZW4obmFtZSk7CisgICAgaWYgKHBseXdvbiA+PSAxMCkKKwkrK2o7CisgICAgaWYgKGNwdXdvbiA+PSAxMCkKKwkrK2o7CisgICAgKHZvaWQpIG12cHJpbnR3KDEsIChDT0xXSURUSCAtIGopIC8gMiwKKwkJICAgICIlczogJWQgICAgIENvbXB1dGVyOiAlZCIsIG5hbWUsIHBseXdvbiwgY3B1d29uKTsKKworICAgIHByb21wdCgyLCAoYXdpbm5hKCkpPyAiV2FudCB0byBiZSBodW1pbGlhdGVkIGFnYWluLCAlcyBbeW5dPyAiCisJICAgOiAiR29pbmcgdG8gZ2l2ZSBtZSBhIGNoYW5jZSBmb3IgcmV2ZW5nZSwgJXMgW3luXT8gIiwgbmFtZSk7CisgICAgcmV0dXJuIChzZ2V0YygiWU4iKSA9PSAnWScpOworfQorCitzdGF0aWMgdm9pZAorZG9fb3B0aW9ucyhpbnQgYywgY2hhciAqb3BbXSkKK3sKKyAgICByZWdpc3RlciBpbnQgaTsKKworICAgIGlmIChjID4gMSkgeworCWZvciAoaSA9IDE7IGkgPCBjOyBpKyspIHsKKwkgICAgc3dpdGNoIChvcFtpXVswXSkgeworCSAgICBkZWZhdWx0OgorCSAgICBjYXNlICc/JzoKKwkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGJhdHRsZSBbLXMgfCAtYl0gWy1jXVxuIik7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlx0V2hlcmUgdGhlIG9wdGlvbnMgYXJlOlxuIik7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlx0LXMgOiBwbGF5IGEgc2Fsdm8gZ2FtZVxuIik7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlx0LWIgOiBwbGF5IGEgYmxpdHogZ2FtZVxuIik7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlx0LWMgOiBzaGlwcyBtYXkgYmUgYWRqYWNlbnRcbiIpOworCQlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCQlicmVhazsKKwkgICAgY2FzZSAnLSc6CisJCXN3aXRjaCAob3BbaV1bMV0pIHsKKwkJY2FzZSAnYic6CisJCSAgICBibGl0eiA9IDE7CisJCSAgICBpZiAoc2Fsdm8gPT0gMSkgeworCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICAgICAiQmFkIEFyZzogLWIgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcbiIpOworCQkJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlICdzJzoKKwkJICAgIHNhbHZvID0gMTsKKwkJICAgIGlmIChibGl0eiA9PSAxKSB7CisJCQkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJCQkJICAgICAgICJCYWQgQXJnOiAtcyBhbmQgLWIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVxuIik7CisJCQlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkgICAgY2xvc2VwYWNrID0gMTsKKwkJICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLAorCQkJCSAgICJCYWQgYXJnOiB0eXBlIFwiJXMgP1wiIGZvciB1c2FnZSBtZXNzYWdlXG4iLAorCQkJCSAgIG9wWzBdKTsKKwkJICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK3Njb3VudChpbnQgd2hvKQoreworICAgIHJlZ2lzdGVyIGludCBpLCBzaG90czsKKyAgICByZWdpc3RlciBzaGlwX3QgKnNwOworCisgICAgaWYgKHdobykKKwlzcCA9IGNwdXNoaXA7CQkvKiBjb3VudCBjcHUgc2hvdHMgKi8KKyAgICBlbHNlCisJc3AgPSBwbHlzaGlwOwkJLyogY291bnQgcGxheWVyIHNob3RzICovCisKKyAgICBmb3IgKGkgPSAwLCBzaG90cyA9IDA7IGkgPCBTSElQVFlQRVM7IGkrKywgc3ArKykgeworCWlmIChzcC0+aGl0cyA+PSBzcC0+bGVuZ3RoKQorCSAgICBjb250aW51ZTsJCS8qIGRlYWQgc2hpcCAqLworCWVsc2UKKwkgICAgc2hvdHMrKzsKKyAgICB9CisgICAgcmV0dXJuIChzaG90cyk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGRvX29wdGlvbnMoYXJnYywgYXJndik7CisKKyAgICBpbnRybygpOworICAgIGRvIHsKKwlpbml0Z2FtZSgpOworCXdoaWxlIChhd2lubmEoKSA9PSAtMSkgeworCSAgICBpZiAoIWJsaXR6KSB7CisJCWlmICghc2Fsdm8pIHsKKwkJICAgIGlmICh0dXJuKQorCQkJKHZvaWQpIGNwdXR1cm4oKTsKKwkJICAgIGVsc2UKKwkJCSh2b2lkKSBwbHl0dXJuKCk7CisJCX0gZWxzZSB7CisJCSAgICByZWdpc3RlciBpbnQgaTsKKworCQkgICAgaSA9IHNjb3VudCh0dXJuKTsKKwkJICAgIHdoaWxlIChpLS0pIHsKKwkJCWlmICh0dXJuKSB7CisJCQkgICAgaWYgKGNwdXR1cm4oKSAmJiBhd2lubmEoKSAhPSAtMSkKKwkJCQlpID0gMDsKKwkJCX0gZWxzZSB7CisJCQkgICAgaWYgKHBseXR1cm4oKSAmJiBhd2lubmEoKSAhPSAtMSkKKwkJCQlpID0gMDsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UKKwkJd2hpbGUgKCh0dXJuID8gY3B1dHVybigpIDogcGx5dHVybigpKSAmJiBhd2lubmEoKSA9PSAtMSkKKwkJICAgIGNvbnRpbnVlOworCSAgICB0dXJuID0gT1RIRVI7CisJfQorICAgIH0gd2hpbGUKKwkocGxheWFnYWluKCkpOworICAgIHVuaW5pdGdhbWUoMCk7CisgICAgLypOT1RSRUFDSEVEICovCit9CisKKy8qIGJzLmMgZW5kcyBoZXJlICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2J1bGdhcmlhbi11dGY4LnR4dCBiL25jdXJzZXMtNS43L3Rlc3QvYnVsZ2FyaWFuLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NmMwNTkKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2J1bGdhcmlhbi11dGY4LnR4dApAQCAtMCwwICsxLDYgQEAKK9Cf0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0L7QvNC+0YnQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPIC0tIDEKK9Ch0YrQt9C00LDQstCw0L3QtSDQvdCwINC00Y/Qu9C+0LLQtSAgICAgICAgICAgICAtLSAyCivQmNC30LHQvtGAINC90LAg0LTRj9C7INC4INGE0L7RgNC80LDRgtC40YDQsNC90LUgICAgICAtLSAzCivQl9Cw0L/QuNGB0LLQsNC90LUg0LIg0LjQt9Cx0YDQsNC90LjRjyDQtNGP0LsgICAgICAgIC0tIDQKK9CY0L3RgdGC0LDQu9C40YDQsNC90LUg0L3QsCBMSUxPICAgICAgICAgICAgIC0tIDUKK9CY0LfRhdC+0LQg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCAgICAgICAgICAgICAtLSA2CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2NhcmRmaWxlLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2NhcmRmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhZTRmZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvY2FyZGZpbGUuYwpAQCAtMCwwICsxLDYyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleQorICoKKyAqICRJZDogY2FyZGZpbGUuYyx2IDEuMzUgMjAwOC8wOC8wNSAwMDo0MjoyNCB0b20gRXhwICQKKyAqCisgKiBGaWxlIGZvcm1hdDogdGV4dCBiZWdpbm5pbmcgaW4gY29sdW1uIDEgaXMgYSB0aXRsZTsgb3RoZXIgdGV4dCBpcyBjb250ZW50LgorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIFVTRV9MSUJGT1JNICYmIFVTRV9MSUJQQU5FTAorCisjaW5jbHVkZSA8Zm9ybS5oPgorI2luY2x1ZGUgPHBhbmVsLmg+CisKKyNkZWZpbmUgVklTSUJMRV9DQVJEUyAxMAorI2RlZmluZSBPRkZTRVRfQ0FSRCAyCisjZGVmaW5lIHBhaXJfMSAxCisjZGVmaW5lIHBhaXJfMiAyCisKKyNkZWZpbmUgaXNWaXNpYmxlKGNhcmRwKSAoKGNhcmRwKS0+cGFuZWwgIT0gMCkKKworZW51bSB7CisgICAgTVlfQ1RSTF94ID0gTUFYX0ZPUk1fQ09NTUFORAorICAgICxNWV9DVFJMX04KKyAgICAsTVlfQ1RSTF9QCisgICAgLE1ZX0NUUkxfUQorICAgICxNWV9DVFJMX1cKK307CisKK3R5cGVkZWYgc3RydWN0IF9jYXJkIHsKKyAgICBzdHJ1Y3QgX2NhcmQgKmxpbms7CisgICAgUEFORUwgKnBhbmVsOworICAgIEZPUk0gKmZvcm07CisgICAgY2hhciAqdGl0bGU7CisgICAgY2hhciAqY29udGVudDsKK30gQ0FSRDsKKworc3RhdGljIENBUkQgKmFsbF9jYXJkczsKK3N0YXRpYyBib29sIHRyeV9jb2xvciA9IEZBTFNFOworc3RhdGljIGNoYXIgZGVmYXVsdF9uYW1lW10gPSAiY2FyZGZpbGUuZGF0IjsKKworI2lmICFIQVZFX1NUUkRVUAorI2RlZmluZSBzdHJkdXAgbXlfc3RyZHVwCitzdGF0aWMgY2hhciAqCitzdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKyAgICBjaGFyICpwID0gdHlwZU1hbGxvYyhjaGFyLCBzdHJsZW4ocykgKyAxKTsKKyAgICBpZiAocCkKKwlzdHJjcHkocCwgcyk7CisgICAgcmV0dXJuIChwKTsKK30KKyNlbmRpZiAvKiBub3QgSEFWRV9TVFJEVVAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc2tpcChjb25zdCBjaGFyICpidWZmZXIpCit7CisgICAgd2hpbGUgKGlzc3BhY2UoVUNoYXIoKmJ1ZmZlcikpKQorCWJ1ZmZlcisrOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyB2b2lkCit0cmltKGNoYXIgKmJ1ZmZlcikKK3sKKyAgICB1bnNpZ25lZCBuID0gc3RybGVuKGJ1ZmZlcik7CisgICAgd2hpbGUgKG4tLSAmJiBpc3NwYWNlKFVDaGFyKGJ1ZmZlcltuXSkpKQorCWJ1ZmZlcltuXSA9IDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgQ0FSRCAqCithZGRfdGl0bGUoY29uc3QgY2hhciAqdGl0bGUpCit7CisgICAgQ0FSRCAqY2FyZCwgKnAsICpxOworCisgICAgZm9yIChwID0gYWxsX2NhcmRzLCBxID0gMDsgcCAhPSAwOyBxID0gcCwgcCA9IHAtPmxpbmspIHsKKwlpbnQgY21wID0gc3RyY21wKHAtPnRpdGxlLCB0aXRsZSk7CisJaWYgKGNtcCA9PSAwKQorCSAgICByZXR1cm4gcDsKKwlpZiAoY21wID4gMCkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FyZCA9IHR5cGVDYWxsb2MoQ0FSRCwgMSk7CisgICAgY2FyZC0+dGl0bGUgPSBzdHJkdXAodGl0bGUpOworICAgIGNhcmQtPmNvbnRlbnQgPSBzdHJkdXAoIiIpOworCisgICAgaWYgKHEgPT0gMCkgeworCWNhcmQtPmxpbmsgPSBhbGxfY2FyZHM7CisJYWxsX2NhcmRzID0gY2FyZDsKKyAgICB9IGVsc2UgeworCWNhcmQtPmxpbmsgPSBxLT5saW5rOworCXEtPmxpbmsgPSBjYXJkOworICAgIH0KKworICAgIHJldHVybiBjYXJkOworfQorCitzdGF0aWMgdm9pZAorYWRkX2NvbnRlbnQoQ0FSRCAqIGNhcmQsIGNvbnN0IGNoYXIgKmNvbnRlbnQpCit7CisgICAgdW5zaWduZWQgdG90YWwsIG9mZnNldDsKKworICAgIGNvbnRlbnQgPSBza2lwKGNvbnRlbnQpOworICAgIGlmICgodG90YWwgPSBzdHJsZW4oY29udGVudCkpICE9IDApIHsKKwlpZiAoY2FyZC0+Y29udGVudCAhPSAwICYmIChvZmZzZXQgPSBzdHJsZW4oY2FyZC0+Y29udGVudCkpICE9IDApIHsKKwkgICAgdG90YWwgKz0gMSArIG9mZnNldDsKKwkgICAgY2FyZC0+Y29udGVudCA9IHR5cGVSZWFsbG9jKGNoYXIsIHRvdGFsICsgMSwgY2FyZC0+Y29udGVudCk7CisJICAgIGlmIChjYXJkLT5jb250ZW50KQorCQlzdHJjcHkoY2FyZC0+Y29udGVudCArIG9mZnNldCsrLCAiICIpOworCX0gZWxzZSB7CisJICAgIG9mZnNldCA9IDA7CisJICAgIGlmIChjYXJkLT5jb250ZW50ICE9IDApCisJCWZyZWUoY2FyZC0+Y29udGVudCk7CisJICAgIGNhcmQtPmNvbnRlbnQgPSB0eXBlTWFsbG9jKGNoYXIsIHRvdGFsICsgMSk7CisJfQorCWlmIChjYXJkLT5jb250ZW50KQorCSAgICBzdHJjcHkoY2FyZC0+Y29udGVudCArIG9mZnNldCwgY29udGVudCk7CisgICAgfQorfQorCitzdGF0aWMgQ0FSRCAqCituZXdfY2FyZCh2b2lkKQoreworICAgIENBUkQgKmNhcmQgPSBhZGRfdGl0bGUoIiIpOworICAgIGFkZF9jb250ZW50KGNhcmQsICIiKTsKKyAgICByZXR1cm4gY2FyZDsKK30KKworc3RhdGljIENBUkQgKgorZmluZF9jYXJkKGNoYXIgKnRpdGxlKQoreworICAgIENBUkQgKmNhcmQ7CisKKyAgICBmb3IgKGNhcmQgPSBhbGxfY2FyZHM7IGNhcmQgIT0gMDsgY2FyZCA9IGNhcmQtPmxpbmspCisJaWYgKCFzdHJjbXAoY2FyZC0+dGl0bGUsIHRpdGxlKSkKKwkgICAgYnJlYWs7CisKKyAgICByZXR1cm4gY2FyZDsKK30KKworc3RhdGljIHZvaWQKK3JlYWRfZGF0YShjaGFyICpmbmFtZSkKK3sKKyAgICBGSUxFICpmcDsKKyAgICBDQVJEICpjYXJkID0gMDsKKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworCisgICAgaWYgKChmcCA9IGZvcGVuKGZuYW1lLCAiciIpKSAhPSAwKSB7CisJd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwKSkgeworCSAgICB0cmltKGJ1ZmZlcik7CisJICAgIGlmIChpc3NwYWNlKFVDaGFyKCpidWZmZXIpKSkgeworCQlpZiAoY2FyZCA9PSAwKQorCQkgICAgY2FyZCA9IGFkZF90aXRsZSgiIik7CisJCWFkZF9jb250ZW50KGNhcmQsIGJ1ZmZlcik7CisJICAgIH0gZWxzZSBpZiAoKGNhcmQgPSBmaW5kX2NhcmQoYnVmZmVyKSkgPT0gMCkgeworCQljYXJkID0gYWRkX3RpdGxlKGJ1ZmZlcik7CisJICAgIH0KKwl9CisJZmNsb3NlKGZwKTsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAord3JpdGVfZGF0YShjb25zdCBjaGFyICpmbmFtZSkKK3sKKyAgICBGSUxFICpmcDsKKyAgICBDQVJEICpwID0gMDsKKyAgICBpbnQgbjsKKworICAgIGlmICghc3RyY21wKGZuYW1lLCBkZWZhdWx0X25hbWUpKQorCWZuYW1lID0gImNhcmRmaWxlLm91dCI7CisKKyAgICBpZiAoKGZwID0gZm9wZW4oZm5hbWUsICJ3IikpICE9IDApIHsKKwlmb3IgKHAgPSBhbGxfY2FyZHM7IHAgIT0gMDsgcCA9IHAtPmxpbmspIHsKKwkgICAgRklFTEQgKipmID0gZm9ybV9maWVsZHMocC0+Zm9ybSk7CisJICAgIGZvciAobiA9IDA7IGZbbl0gIT0gMDsgbisrKSB7CisJCWNoYXIgKnMgPSBmaWVsZF9idWZmZXIoZltuXSwgMCk7CisJCWlmIChzICE9IDAKKwkJICAgICYmIChzID0gc3RyZHVwKHMpKSAhPSAwKSB7CisJCSAgICB0cmltKHMpOworCQkgICAgZnByaW50ZihmcCwgIiVzJXNcbiIsIG4gPyAiXHQiIDogIiIsIHMpOworCQkgICAgZnJlZShzKTsKKwkJfQorCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvdW50IHRoZSBjYXJkcworICovCitzdGF0aWMgaW50Citjb3VudF9jYXJkcyh2b2lkKQoreworICAgIENBUkQgKnA7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIGZvciAocCA9IGFsbF9jYXJkczsgcCAhPSAwOyBwID0gcC0+bGluaykKKwljb3VudCsrOworCisgICAgcmV0dXJuIGNvdW50OworfQorCisvKgorICogU2h1ZmZsZSB0aGUgcGFuZWxzIHRvIGtlZXAgdGhlbSBpbiBhIG5hdHVyYWwgaGllcmFyY2h5LgorICovCitzdGF0aWMgdm9pZAorb3JkZXJfY2FyZHMoQ0FSRCAqIGZpcnN0LCBpbnQgZGVwdGgpCit7CisgICAgaWYgKGZpcnN0KSB7CisJaWYgKGRlcHRoICYmIGZpcnN0LT5saW5rKQorCSAgICBvcmRlcl9jYXJkcyhmaXJzdC0+bGluaywgZGVwdGggLSAxKTsKKwlpZiAoaXNWaXNpYmxlKGZpcnN0KSkKKwkgICAgdG9wX3BhbmVsKGZpcnN0LT5wYW5lbCk7CisgICAgfQorfQorCisvKgorICogUmV0dXJuIHRoZSBuZXh0IGNhcmQgaW4gdGhlIGxpc3QKKyAqLworc3RhdGljIENBUkQgKgorbmV4dF9jYXJkKENBUkQgKiBub3cpCit7CisgICAgaWYgKG5vdy0+bGluayAhPSAwKSB7CisJQ0FSRCAqdHN0ID0gbm93LT5saW5rOworCWlmIChpc1Zpc2libGUodHN0KSkKKwkgICAgbm93ID0gdHN0OworCWVsc2UKKwkgICAgdHN0ID0gbmV4dF9jYXJkKHRzdCk7CisgICAgfQorICAgIHJldHVybiBub3c7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHByZXZpb3VzIGNhcmQgaW4gdGhlIGxpc3QKKyAqLworc3RhdGljIENBUkQgKgorcHJldl9jYXJkKENBUkQgKiBub3cpCit7CisgICAgQ0FSRCAqcDsKKyAgICBmb3IgKHAgPSBhbGxfY2FyZHM7IHAgIT0gMDsgcCA9IHAtPmxpbmspIHsKKwlpZiAocC0+bGluayA9PSBub3cpIHsKKwkgICAgaWYgKCFpc1Zpc2libGUocCkpCisJCXAgPSBwcmV2X2NhcmQocCk7CisJICAgIHJldHVybiBwOworCX0KKyAgICB9CisgICAgcmV0dXJuIG5vdzsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIGZpcnN0IGNhcmQgaW4gdGhlIGxpc3QgdGhhdCB3ZSB3aWxsIGRpc3BsYXkuCisgKi8KK3N0YXRpYyBDQVJEICoKK2ZpcnN0X2NhcmQoQ0FSRCAqIG5vdykKK3sKKyAgICBpZiAoIWlzVmlzaWJsZShub3cpKQorCW5vdyA9IG5leHRfY2FyZChub3cpOworICAgIHJldHVybiBub3c7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Citmb3JtX3ZpcnR1YWxpemUoV0lORE9XICp3KQoreworICAgIGludCBjID0gd2dldGNoKHcpOworCisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSBDVFJMKCdXJyk6CisJcmV0dXJuIChNWV9DVFJMX1cpOworICAgIGNhc2UgQ1RSTCgnTicpOgorCXJldHVybiAoTVlfQ1RSTF9OKTsKKyAgICBjYXNlIENUUkwoJ1AnKToKKwlyZXR1cm4gKE1ZX0NUUkxfUCk7CisgICAgY2FzZSBRVUlUOgorICAgIGNhc2UgRVNDQVBFOgorCXJldHVybiAoTVlfQ1RSTF9RKTsKKworICAgIGNhc2UgS0VZX0JBQ0tTUEFDRToKKwlyZXR1cm4gKFJFUV9ERUxfUFJFVik7CisgICAgY2FzZSBLRVlfREM6CisJcmV0dXJuIChSRVFfREVMX0NIQVIpOworICAgIGNhc2UgS0VZX0xFRlQ6CisJcmV0dXJuIChSRVFfTEVGVF9DSEFSKTsKKyAgICBjYXNlIEtFWV9SSUdIVDoKKwlyZXR1cm4gKFJFUV9SSUdIVF9DSEFSKTsKKworICAgIGNhc2UgS0VZX0RPV046CisgICAgY2FzZSBLRVlfTkVYVDoKKwlyZXR1cm4gKFJFUV9ORVhUX0ZJRUxEKTsKKyAgICBjYXNlIEtFWV9VUDoKKyAgICBjYXNlIEtFWV9QUkVWSU9VUzoKKwlyZXR1cm4gKFJFUV9QUkVWX0ZJRUxEKTsKKworICAgIGRlZmF1bHQ6CisJcmV0dXJuIChjKTsKKyAgICB9Cit9CisKK3N0YXRpYyBGSUVMRCAqKgorbWFrZV9maWVsZHMoQ0FSRCAqIHAsIGludCBmb3JtX2hpZ2gsIGludCBmb3JtX3dpZGUpCit7CisgICAgRklFTEQgKipmID0gdHlwZUNhbGxvYyhGSUVMRCAqLCAzKTsKKworICAgIGZbMF0gPSBuZXdfZmllbGQoMSwgZm9ybV93aWRlLCAwLCAwLCAwLCAwKTsKKyAgICBzZXRfZmllbGRfYmFjayhmWzBdLCBBX1JFVkVSU0UpOworICAgIHNldF9maWVsZF9idWZmZXIoZlswXSwgMCwgcC0+dGl0bGUpOworICAgIGZpZWxkX29wdHNfb2ZmKGZbMF0sIE9fQkxBTkspOworCisgICAgZlsxXSA9IG5ld19maWVsZChmb3JtX2hpZ2ggLSAxLCBmb3JtX3dpZGUsIDEsIDAsIDAsIDApOworICAgIHNldF9maWVsZF9idWZmZXIoZlsxXSwgMCwgcC0+Y29udGVudCk7CisgICAgc2V0X2ZpZWxkX2p1c3QoZlsxXSwgSlVTVElGWV9MRUZUKTsKKyAgICBmaWVsZF9vcHRzX29mZihmWzFdLCBPX0JMQU5LKTsKKworICAgIGZbMl0gPSAwOworICAgIHJldHVybiBmOworfQorCitzdGF0aWMgdm9pZAorc2hvd19sZWdlbmQodm9pZCkKK3sKKyAgICBlcmFzZSgpOworICAgIG1vdmUoTElORVMgLSAzLCAwKTsKKyAgICBhZGRzdHIoIl5RL0VTQyAtLSBleGl0IGZvcm0gICAgICAgICAgICBeVyAgIC0tIHdyaXRlcyBkYXRhIHRvIGZpbGVcbiIpOworICAgIGFkZHN0cigiXk4gICAtLSBnbyB0byBuZXh0IGNhcmQgICAgICAgIF5QICAgLS0gZ28gdG8gcHJldmlvdXMgY2FyZFxuIik7CisgICAgYWRkc3RyKCJBcnJvdyBrZXlzIG1vdmUgbGVmdC9yaWdodCB3aXRoaW4gYSBmaWVsZCwgdXAvZG93biBiZXR3ZWVuIGZpZWxkcyIpOworfQorCisjaWYgKGRlZmluZWQoS0VZX1JFU0laRSkgJiYgSEFWRV9XUkVTSVpFKSB8fCBOT19MRUFLUworc3RhdGljIHZvaWQKK2ZyZWVfZm9ybV9maWVsZHMoRklFTEQgKiogZikKK3sKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IGZbbl0gIT0gMDsgKytuKSB7CisJZnJlZV9maWVsZChmW25dKTsKKyAgICB9CisgICAgZnJlZShmKTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2NhcmRmaWxlKGNoYXIgKmZuYW1lKQoreworICAgIFdJTkRPVyAqd2luOworICAgIENBUkQgKnA7CisgICAgQ0FSRCAqdG9wX2NhcmQ7CisgICAgaW50IHZpc2libGVfY2FyZHM7CisgICAgaW50IHBhbmVsX3dpZGU7CisgICAgaW50IHBhbmVsX2hpZ2g7CisgICAgaW50IGZvcm1fd2lkZTsKKyAgICBpbnQgZm9ybV9oaWdoOworICAgIGludCB5OworICAgIGludCB4OworICAgIGludCBjaCA9IEVSUjsKKyAgICBpbnQgZmluaXNoZWQgPSBGQUxTRTsKKworICAgIHNob3dfbGVnZW5kKCk7CisKKyAgICAvKiBkZWNpZGUgaG93IG1hbnkgY2FyZHMgd2UgY2FuIGRpc3BsYXkgKi8KKyAgICB2aXNpYmxlX2NhcmRzID0gY291bnRfY2FyZHMoKTsKKyAgICB3aGlsZSAoCisJICAgICAgKHBhbmVsX3dpZGUgPSBDT0xTIC0gKHZpc2libGVfY2FyZHMgKiBPRkZTRVRfQ0FSRCkpIDwgMTAgfHwKKwkgICAgICAocGFuZWxfaGlnaCA9IExJTkVTIC0gKHZpc2libGVfY2FyZHMgKiBPRkZTRVRfQ0FSRCkgLSA1KSA8IDUpIHsKKwktLXZpc2libGVfY2FyZHM7CisgICAgfQorICAgIGZvcm1fd2lkZSA9IHBhbmVsX3dpZGUgLSAyOworICAgIGZvcm1faGlnaCA9IHBhbmVsX2hpZ2ggLSAyOworICAgIHkgPSAodmlzaWJsZV9jYXJkcyAtIDEpICogT0ZGU0VUX0NBUkQ7CisgICAgeCA9IDA7CisKKyAgICAvKiBtYWtlIGEgcGFuZWwgZm9yIGVhY2ggQ0FSRCAqLworICAgIGZvciAocCA9IGFsbF9jYXJkczsgcCAhPSAwOyBwID0gcC0+bGluaykgeworCisJaWYgKCh3aW4gPSBuZXd3aW4ocGFuZWxfaGlnaCwgcGFuZWxfd2lkZSwgeSwgeCkpID09IDApCisJICAgIGJyZWFrOworCisJd2JrZ2Qod2luLCBDT0xPUl9QQUlSKHBhaXJfMikpOworCWtleXBhZCh3aW4sIFRSVUUpOworCXAtPnBhbmVsID0gbmV3X3BhbmVsKHdpbik7CisJYm94KHdpbiwgMCwgMCk7CisKKwlwLT5mb3JtID0gbmV3X2Zvcm0obWFrZV9maWVsZHMocCwgZm9ybV9oaWdoLCBmb3JtX3dpZGUpKTsKKwlzZXRfZm9ybV93aW4ocC0+Zm9ybSwgd2luKTsKKwlzZXRfZm9ybV9zdWIocC0+Zm9ybSwgZGVyd2luKHdpbiwgZm9ybV9oaWdoLCBmb3JtX3dpZGUsIDEsIDEpKTsKKwlwb3N0X2Zvcm0ocC0+Zm9ybSk7CisKKwl5IC09IE9GRlNFVF9DQVJEOworCXggKz0gT0ZGU0VUX0NBUkQ7CisgICAgfQorCisgICAgdG9wX2NhcmQgPSBmaXJzdF9jYXJkKGFsbF9jYXJkcyk7CisgICAgb3JkZXJfY2FyZHModG9wX2NhcmQsIHZpc2libGVfY2FyZHMpOworCisgICAgd2hpbGUgKCFmaW5pc2hlZCkgeworCXVwZGF0ZV9wYW5lbHMoKTsKKwlkb3VwZGF0ZSgpOworCisJY2ggPSBmb3JtX3ZpcnR1YWxpemUocGFuZWxfd2luZG93KHRvcF9jYXJkLT5wYW5lbCkpOworCXN3aXRjaCAoZm9ybV9kcml2ZXIodG9wX2NhcmQtPmZvcm0sIGNoKSkgeworCWNhc2UgRV9PSzoKKwkgICAgYnJlYWs7CisJY2FzZSBFX1VOS05PV05fQ09NTUFORDoKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlIE1ZX0NUUkxfUToKKwkJZmluaXNoZWQgPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSBNWV9DVFJMX1A6CisJCXRvcF9jYXJkID0gcHJldl9jYXJkKHRvcF9jYXJkKTsKKwkJb3JkZXJfY2FyZHModG9wX2NhcmQsIHZpc2libGVfY2FyZHMpOworCQlicmVhazsKKwkgICAgY2FzZSBNWV9DVFJMX046CisJCXRvcF9jYXJkID0gbmV4dF9jYXJkKHRvcF9jYXJkKTsKKwkJb3JkZXJfY2FyZHModG9wX2NhcmQsIHZpc2libGVfY2FyZHMpOworCQlicmVhazsKKwkgICAgY2FzZSBNWV9DVFJMX1c6CisJCWZvcm1fZHJpdmVyKHRvcF9jYXJkLT5mb3JtLCBSRVFfVkFMSURBVElPTik7CisJCXdyaXRlX2RhdGEoZm5hbWUpOworCQlicmVhazsKKyNpZiBkZWZpbmVkKEtFWV9SRVNJWkUpICYmIEhBVkVfV1JFU0laRQorCSAgICBjYXNlIEtFWV9SRVNJWkU6CisJCS8qIHJlc2l6ZXRlcm0gYWxyZWFkeSBkaWQgInNvbWV0aGluZyIgcmVhc29uYWJsZSwgYnV0IGl0IGNhbm5vdAorCQkgKiBrbm93IG11Y2ggYWJvdXQgbGF5b3V0LiAgU28gbGV0J3MgbWFrZSBpdCBuaWNlci4KKwkJICovCisJCXBhbmVsX3dpZGUgPSBDT0xTIC0gKHZpc2libGVfY2FyZHMgKiBPRkZTRVRfQ0FSRCk7CisJCXBhbmVsX2hpZ2ggPSBMSU5FUyAtICh2aXNpYmxlX2NhcmRzICogT0ZGU0VUX0NBUkQpIC0gNTsKKworCQlmb3JtX3dpZGUgPSBwYW5lbF93aWRlIC0gMjsKKwkJZm9ybV9oaWdoID0gcGFuZWxfaGlnaCAtIDI7CisKKwkJeSA9ICh2aXNpYmxlX2NhcmRzIC0gMSkgKiBPRkZTRVRfQ0FSRDsKKwkJeCA9IDA7CisKKwkJc2hvd19sZWdlbmQoKTsKKwkJZm9yIChwID0gYWxsX2NhcmRzOyBwICE9IDA7IHAgPSBwLT5saW5rKSB7CisJCSAgICBGSUVMRCAqKm9sZGYgPSBmb3JtX2ZpZWxkcyhwLT5mb3JtKTsKKwkJICAgIFdJTkRPVyAqb2xkcyA9IGZvcm1fc3ViKHAtPmZvcm0pOworCisJCSAgICBpZiAoIWlzVmlzaWJsZShwKSkKKwkJCWNvbnRpbnVlOworCQkgICAgd2luID0gZm9ybV93aW4ocC0+Zm9ybSk7CisKKwkJICAgIC8qIG1vdmUgYW5kIHJlc2l6ZSB0aGUgY2FyZCBhcyBuZWVkZWQKKwkJICAgICAqIEZJWE1FOiBpZiB0aGUgd2luZG93cyBhcmUgc2hydW5rIHRvbyBtdWNoLCB0aGlzIHdvbid0IGRvCisJCSAgICAgKi8KKwkJICAgIG12d2luKHdpbiwgeSwgeCk7CisJCSAgICB3cmVzaXplKHdpbiwgcGFuZWxfaGlnaCwgcGFuZWxfd2lkZSk7CisKKwkJICAgIC8qIHJlY29uc3RydWN0IGVhY2ggZm9ybS4gIEZvcm1zIGFyZSBub3QgcmVzaXphYmxlLCBhbmQKKwkJICAgICAqIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gZ29vZCB3YXkgdG8gcmVsb2FkIHRoZSB0ZXh0IGluCisJCSAgICAgKiBhIHJlc2l6ZWQgd2luZG93LgorCQkgICAgICovCisJCSAgICB3ZXJhc2Uod2luKTsKKworCQkgICAgdW5wb3N0X2Zvcm0ocC0+Zm9ybSk7CisJCSAgICBmcmVlX2Zvcm0ocC0+Zm9ybSk7CisKKwkJICAgIHAtPmZvcm0gPSBuZXdfZm9ybShtYWtlX2ZpZWxkcyhwLCBmb3JtX2hpZ2gsIGZvcm1fd2lkZSkpOworCQkgICAgc2V0X2Zvcm1fd2luKHAtPmZvcm0sIHdpbik7CisJCSAgICBzZXRfZm9ybV9zdWIocC0+Zm9ybSwgZGVyd2luKHdpbiwgZm9ybV9oaWdoLCBmb3JtX3dpZGUsCisJCQkJCQkgMSwgMSkpOworCQkgICAgcG9zdF9mb3JtKHAtPmZvcm0pOworCisJCSAgICBmcmVlX2Zvcm1fZmllbGRzKG9sZGYpOworCQkgICAgZGVsd2luKG9sZHMpOworCisJCSAgICBib3god2luLCAwLCAwKTsKKworCQkgICAgeSAtPSBPRkZTRVRfQ0FSRDsKKwkJICAgIHggKz0gT0ZGU0VUX0NBUkQ7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwkgICAgZGVmYXVsdDoKKwkJYmVlcCgpOworCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBmbGFzaCgpOworCSAgICBicmVhazsKKwl9CisgICAgfQorI2lmIE5PX0xFQUtTCisgICAgd2hpbGUgKGFsbF9jYXJkcyAhPSAwKSB7CisJRklFTEQgKipmOworCWludCBjb3VudDsKKworCXAgPSBhbGxfY2FyZHM7CisJYWxsX2NhcmRzID0gYWxsX2NhcmRzLT5saW5rOworCisJaWYgKGlzVmlzaWJsZShwKSkgeworCSAgICBmID0gZm9ybV9maWVsZHMocC0+Zm9ybSk7CisJICAgIGNvdW50ID0gZmllbGRfY291bnQocC0+Zm9ybSk7CisKKwkgICAgdW5wb3N0X2Zvcm0ocC0+Zm9ybSk7CS8qIC4uLnNvIHdlIGNhbiBmcmVlIGl0ICovCisJICAgIGZyZWVfZm9ybShwLT5mb3JtKTsJLyogdGhpcyBhbHNvIGRpc2Nvbm5lY3RzIHRoZSBmaWVsZHMgKi8KKworCSAgICBmcmVlX2Zvcm1fZmllbGRzKGYpOworCisJICAgIGRlbF9wYW5lbChwLT5wYW5lbCk7CisJfQorCWZyZWUocC0+dGl0bGUpOworCWZyZWUocC0+Y29udGVudCk7CisJZnJlZShwKTsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKm1zZ1tdID0KKyAgICB7CisJIlVzYWdlOiB2aWV3IFtvcHRpb25zXSBmaWxlIgorCSwiIgorCSwiT3B0aW9uczoiCisJLCIgLWMgICAgICAgdXNlIGNvbG9yIGlmIHRlcm1pbmFsIHN1cHBvcnRzIGl0IgorICAgIH07CisgICAgc2l6ZV90IG47CisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRihtc2cpOyBuKyspCisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnW25dKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IG47CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICB3aGlsZSAoKG4gPSBnZXRvcHQoYXJnYywgYXJndiwgImMiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKG4pIHsKKwljYXNlICdjJzoKKwkgICAgdHJ5X2NvbG9yID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorCisgICAgaW5pdHNjcigpOworICAgIGNicmVhaygpOworICAgIG5vZWNobygpOworCisgICAgaWYgKHRyeV9jb2xvcikgeworCWlmIChoYXNfY29sb3JzKCkpIHsKKwkgICAgc3RhcnRfY29sb3IoKTsKKwkgICAgaW5pdF9wYWlyKHBhaXJfMSwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCSAgICBpbml0X3BhaXIocGFpcl8yLCBDT0xPUl9XSElURSwgQ09MT1JfQ1lBTik7CisJICAgIGJrZ2QoQ09MT1JfUEFJUihwYWlyXzEpKTsKKwl9IGVsc2UgeworCSAgICB0cnlfY29sb3IgPSBGQUxTRTsKKwl9CisgICAgfQorCisgICAgaWYgKG9wdGluZCArIDEgPT0gYXJnYykgeworCWZvciAobiA9IDE7IG4gPCBhcmdjOyBuKyspCisJICAgIHJlYWRfZGF0YShhcmd2W25dKTsKKwlpZiAoY291bnRfY2FyZHMoKSA9PSAwKQorCSAgICBuZXdfY2FyZCgpOworCWNhcmRmaWxlKGFyZ3ZbMV0pOworICAgIH0gZWxzZSB7CisJcmVhZF9kYXRhKGRlZmF1bHRfbmFtZSk7CisJaWYgKGNvdW50X2NhcmRzKCkgPT0gMCkKKwkgICAgbmV3X2NhcmQoKTsKKwljYXJkZmlsZShkZWZhdWx0X25hbWUpOworICAgIH0KKworICAgIGVuZHdpbigpOworCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgY3Vyc2VzIGZvcm0gYW5kIHBhbmVsIGxpYnJhcmllc1xuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9jYXJkZmlsZS5kYXQgYi9uY3Vyc2VzLTUuNy90ZXN0L2NhcmRmaWxlLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWI0Yjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9jYXJkZmlsZS5kYXQKQEAgLTAsMCArMSwxMyBAQAordGl0bGUgMQorCVNvbWUgdGV4dCBmb3IgdGl0bGUxCisJYW5kIHNvbWUgbW9yZSB0ZXh0Cit0aXRsZSAyCisJVGhlIHF1aWNrZXIgYnJvd24gZm94IHJhbiBhbGwgb3ZlciB0aGUgbGF6eSBkb2cuCitwdXQgYSBjYXJkIGJlZm9yZSB0aGUgZmlyc3QgdHdvCisJVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIGNhcmRmaWxlLgorc2hvdyBhIGZvdXJ0aCBjYXJkCisJVGhlIGZvdXJ0aCBjYXJkCisJaGFzIGEgbGFyZ2UgYW1vdW50IG9mIGRhdGEsCisJbW9yZSB0aGFuIHRoZSBvdGhlciBjYXJkcy4KKwlBdCBsZWFzdCwgdGhhdCBpcyB3aGF0IEkgdGhvdWdodCBpdCBzaG91bGQgZG8sIHNpbmNlIEkgd2FudCB0byBzZWUgaG93IHdlbGwKKwl0aGUgZm9ybXMgcGFja2FnZSBoYW5kbGVzIGp1c3RpZmljYXRpb24uCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2NoZ2F0LmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2NoZ2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU1MTI5NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvY2hnYXQuYwpAQCAtMCwwICsxLDM2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGNoZ2F0LmMsdiAxLjggMjAwOC8wMi8wOSAyMzoxOToxMyB0b20gRXhwICQKKyAqCisgKiB0ZXN0LWRyaXZlciBmb3IgY2hnYXQvd2NoZ2F0L212Y2hnYXQvbXZ3Y2hnYXQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX0NIR0FUCisKKyNkZWZpbmUgU0hPVyhuKSAoKG4pID09IEVSUiA/ICJFUlIiIDogIk9LIikKKyNkZWZpbmUgQ09MT1JfREVGQVVMVCAoLTEpCisKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCkgJiYgTkNVUlNFU19WRVJTSU9OX1BBVENIIDwgMjAwNjA3MTUKKyNkZWZpbmUgdG91Y2hfaWZfbmVlZGVkKHdpbiwgcm93KSB0b3VjaGxpbmUod2luLCByb3csIDEpCisjZWxzZQorI2RlZmluZSB0b3VjaF9pZl9uZWVkZWQod2luLCByb3cpCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgYzsKKyAgICB1bnNpZ25lZCB2OworICAgIGludCBwYWlyOworICAgIHVuc2lnbmVkIGF0dHI7CisgICAgaW50IGNvdW50OworICAgIGludCBjaDsKKyAgICBjb25zdCBjaGFyICpjX21zZzsKKyAgICBjb25zdCBjaGFyICp2X21zZzsKKyAgICBpbnQgeV92YWw7CisgICAgaW50IHhfdmFsOworICAgIGludCB5X2JlZywgeF9iZWc7CisgICAgaW50IHlfbWF4LCB4X21heDsKK30gU1RBVFVTOworCitzdGF0aWMgY29uc3QgY2hhciAqCitjb2xvcl9wYXJhbXModW5zaWduZWQgc3RhdGUsIGludCAqcGFpcikKK3sKKyAgICAvKiAqSU5ERU5ULU9GRiogKi8KKyAgICBzdGF0aWMgc3RydWN0IHsKKwlpbnQgcGFpcjsKKwlpbnQgZmcsIGJnOworCWNvbnN0IGNoYXIgKm1zZzsKKyAgICB9IHRhYmxlW10gPSB7CisJeyAwLCBDT0xPUl9ERUZBVUxULCBDT0xPUl9ERUZBVUxULCAiZGVmYXVsdCIgfSwKKwl7IDEsIENPTE9SX1JFRCwgICAgIENPTE9SX0JMQUNLLCAgICJyZWQvYmxhY2siIH0sCisJeyAyLCBDT0xPUl9XSElURSwgICBDT0xPUl9CTFVFLCAgICAid2hpdGUvYmx1ZSIgfSwKKyAgICB9OworICAgIC8qICpJTkRFTlQtT04qICovCisKKyAgICBzdGF0aWMgYm9vbCBmaXJzdCA9IFRSVUU7CisgICAgY29uc3QgY2hhciAqcmVzdWx0ID0gMDsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpZiAoZmlyc3QpIHsKKwkgICAgdW5zaWduZWQgbjsKKworCSAgICBzdGFydF9jb2xvcigpOworCSAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRhYmxlKTsgKytuKSB7CisJCWluaXRfcGFpcih0YWJsZVtuXS5wYWlyLCB0YWJsZVtuXS5mZywgdGFibGVbbl0uYmcpOworCSAgICB9CisJfQorCWlmIChzdGF0ZSA8IFNJWkVPRih0YWJsZSkpIHsKKwkgICAgKnBhaXIgPSB0YWJsZVtzdGF0ZV0ucGFpcjsKKwkgICAgcmVzdWx0ID0gdGFibGVbc3RhdGVdLm1zZzsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3ZpZGVvX3BhcmFtcyh1bnNpZ25lZCBzdGF0ZSwgdW5zaWduZWQgKmF0dHIpCit7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgc3RhdGljIHN0cnVjdCB7CisJdW5zaWduZWQgYXR0cjsKKwljb25zdCBjaGFyICptc2c7CisgICAgfSB0YWJsZVtdID0geworCXsgQV9OT1JNQUwsCSJub3JtYWwiIH0sCisJeyBBX0JPTEQsCSJib2xkIiB9LAorCXsgQV9SRVZFUlNFLAkicmV2ZXJzZSIgfSwKKwl7IEFfVU5ERVJMSU5FLAkidW5kZXJsaW5lIiB9LAorCXsgQV9CTElOSywgCSJibGluayIgfSwKKyAgICB9OworICAgIC8qICpJTkRFTlQtT04qICovCisKKyAgICBjb25zdCBjaGFyICpyZXN1bHQgPSAwOworCisgICAgaWYgKHN0YXRlIDwgU0laRU9GKHRhYmxlKSkgeworCSphdHRyID0gdGFibGVbc3RhdGVdLmF0dHI7CisJcmVzdWx0ID0gdGFibGVbc3RhdGVdLm1zZzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZmlsbCB0aGUgd2luZG93IHdpdGggYSB0ZXN0LXBhdHRlcm4gKi8KK3N0YXRpYyB2b2lkCitmaWxsX3dpbmRvdyhXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgeSwgeDsKKworICAgIGdldHl4KHdpbiwgeSwgeCk7CisgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICB3aGlsZSAod2FkZHN0cih3aW4sICIwMTIzNDU2Nzg5IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICIpICE9IEVSUikgeworICAgIH0KKyAgICB3bW92ZSh3aW4sIHksIHgpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19zdGF0dXMoV0lORE9XICp3aW4sIFNUQVRVUyAqIHNwKQoreworICAgIGludCB5LCB4OworCisgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICB3bW92ZSh3aW4sIDAsIDApOworICAgIHdwcmludHcod2luLCAiQ291bnQgJWQiLCBzcC0+Y291bnQpOworICAgIGlmIChzcC0+dl9tc2cgIT0gMCkKKwl3cHJpbnR3KHdpbiwgIiBWaWRlbyAlcyIsIHNwLT52X21zZyk7CisgICAgaWYgKHNwLT5jX21zZyAhPSAwKQorCXdwcmludHcod2luLCAiIENvbG9yICVzIiwgc3AtPmNfbXNnKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICB3bW92ZSh3aW4sIHksIHgpOworfQorCitzdGF0aWMgdm9pZAorZG9fc3Vid2luZG93KFdJTkRPVyAqd2luLCBTVEFUVVMgKiBzcCwgdm9pZCBmdW5jKFdJTkRPVyAqKSkKK3sKKyAgICBXSU5ET1cgKndpbjEgPSBuZXd3aW4oc3AtPnlfbWF4IC0gMiwgc3AtPnhfbWF4IC0gMiwKKwkJCSAgc3AtPnlfYmVnICsgMSwgc3AtPnhfYmVnICsgMSk7CisKKyAgICBpZiAod2luMSAhPSAwICYmIHNwLT55X21heCA+IDQgJiYgc3AtPnhfbWF4ID4gNCkgeworCVdJTkRPVyAqd2luMiA9IGRlcndpbih3aW4xLCBzcC0+eV9tYXggLSA0LCBzcC0+eF9tYXggLSA0LCAxLCAxKTsKKworCWlmICh3aW4yICE9IDApIHsKKwkgICAgYm94KHdpbjEsIDAsIDApOworCSAgICB3cmVmcmVzaCh3aW4xKTsKKwkgICAgZnVuYyh3aW4yKTsKKworCSAgICBkZWx3aW4od2luMik7CisJfSBlbHNlIHsKKwkgICAgYmVlcCgpOworCX0KKwlkZWx3aW4od2luMSk7CisJdG91Y2h3aW4od2luKTsKKyAgICB9IGVsc2UgeworCWJlZXAoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3N0YXR1cyhXSU5ET1cgKndpbiwgU1RBVFVTICogc3ApCit7CisgICAgbWVtc2V0KHNwLCAwLCBzaXplb2YoKnNwKSk7CisgICAgc3AtPmMgPSA5OTsKKyAgICBzcC0+diA9IDk5OworICAgIHNwLT5jaCA9ICcgJzsKKworICAgIGtleXBhZCh3aW4sIFRSVUUpOworICAgIGZpbGxfd2luZG93KHdpbik7CisKKyAgICBnZXRiZWd5eCh3aW4sIHNwLT55X2JlZywgc3AtPnhfYmVnKTsKKyAgICBnZXRtYXh5eCh3aW4sIHNwLT55X21heCwgc3AtPnhfbWF4KTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfaGVscChXSU5ET1cgKndpbikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqdGFibGVbXSA9CisgICAgeworCSJCYXNpYyBjb21tYW5kczoiCisJLCJVc2UgaC9qL2svbCBvciBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIGN1cnNvci4iCisJLCJTZXQgdGhlIGNvdW50IHBhcmFtZXRlciBmb3IgY2hnYXQgYnkgZW50ZXJpbmcgZGlnaXRzIDAtOS4iCisJLCIiCisJLCJPdGhlciBjb21tYW5kczoiCisJLCJzcGFjZSB0b2dnbGVzIHRocm91Z2ggdGhlIHNldCBvZiB2aWRlbyBhdHRyaWJ1dGVzIGFuZCBjb2xvcnMuIgorCSwidCAgICAgdG91Y2hlcyAoZm9yY2VzIHJlcGFpbnQpIG9mIHRoZSBjdXJyZW50IGxpbmUuIgorCSwiLiAgICAgY2FsbHMgKmNoZ2F0IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGggdGhlIGdpdmVuIGNvdW50LiIKKwksIiwgICAgIGNhbGxzICpjaGdhdCBhdCB0aGUgd2luZG93IGJlZ2lubmluZyB3aXRoIHRoZSBnaXZlbiBjb3VudC4iCisJLCI9ICAgICByZXNldHMgY291bnQgdG8gemVyby4iCisJLCItICAgICBuZWdhdGVzIGNvdW50LiIKKwksIj8gICAgIHNob3dzIHRoaXMgaGVscC13aW5kb3ciCisJLCIiCisJLCIiCisgICAgfTsKKworICAgIGludCB5X21heCwgeF9tYXg7CisgICAgaW50IHJvdzsKKworICAgIGdldG1heHl4KHdpbiwgeV9tYXgsIHhfbWF4KTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IChpbnQpIFNJWkVPRih0YWJsZSkgJiYgcm93IDwgeV9tYXg7ICsrcm93KSB7CisJbXZ3cHJpbnR3KHdpbiwgcm93LCAwLCAiJS4qcyIsIHhfbWF4LCB0YWJsZVtyb3ddKTsKKyAgICB9CisgICAgd2hpbGUgKHdnZXRjaCh3aW4pICE9ICdxJykKKwliZWVwKCk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfc3RhdHVzKFdJTkRPVyAqd2luLCBTVEFUVVMgKiBzcCkKK3sKKyAgICBzd2l0Y2ggKHNwLT5jaCkgeworICAgIGNhc2UgJyAnOgkJCS8qIG5leHQgdGVzdC1pdGVyYXRpb24gKi8KKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJICAgIGlmICgoc3AtPmNfbXNnID0gY29sb3JfcGFyYW1zKCsrKHNwLT5jKSwgJihzcC0+cGFpcikpKSA9PSAwKSB7CisJCXNwLT5jX21zZyA9IGNvbG9yX3BhcmFtcyhzcC0+YyA9IDAsICYoc3AtPnBhaXIpKTsKKwkJaWYgKChzcC0+dl9tc2cgPSB2aWRlb19wYXJhbXMoKysoc3AtPnYpLCAmKHNwLT5hdHRyKSkpID09IDApIHsKKwkJICAgIHNwLT52X21zZyA9IHZpZGVvX3BhcmFtcyhzcC0+diA9IDAsICYoc3AtPmF0dHIpKTsKKwkJfQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYgKChzcC0+dl9tc2cgPSB2aWRlb19wYXJhbXMoKysoc3AtPnYpLCAmKHNwLT5hdHRyKSkpID09IDApIHsKKwkJc3AtPnZfbXNnID0gdmlkZW9fcGFyYW1zKHNwLT52ID0gMCwgJihzcC0+YXR0cikpOworCSAgICB9CisJfQorCXNwLT5jb3VudCA9IDA7CisJc2hvd19zdGF0dXMod2luLCBzcCk7CisJYnJlYWs7CisgICAgY2FzZSBLRVlfTEVGVDoKKyAgICBjYXNlICdoJzoKKwlpZiAoc3AtPnhfdmFsID4gMCkKKwkgICAgd21vdmUod2luLCBzcC0+eV92YWwsIC0tKHNwLT54X3ZhbCkpOworCWJyZWFrOworICAgIGNhc2UgS0VZX0RPV046CisgICAgY2FzZSAnaic6CisJaWYgKHNwLT55X3ZhbCA8IHNwLT55X21heCkKKwkgICAgd21vdmUod2luLCArKyhzcC0+eV92YWwpLCBzcC0+eF92YWwpOworCWJyZWFrOworICAgIGNhc2UgS0VZX1VQOgorICAgIGNhc2UgJ2snOgorCWlmIChzcC0+eV92YWwgPiAwKQorCSAgICB3bW92ZSh3aW4sIC0tKHNwLT55X3ZhbCksIHNwLT54X3ZhbCk7CisJYnJlYWs7CisgICAgY2FzZSBLRVlfUklHSFQ6CisgICAgY2FzZSAnbCc6CisJaWYgKHNwLT54X3ZhbCA8IHNwLT54X21heCkKKwkgICAgd21vdmUod2luLCBzcC0+eV92YWwsICsrKHNwLT54X3ZhbCkpOworCWJyZWFrOworICAgIGNhc2UgJ3QnOgorCXRvdWNobGluZSh3aW4sIHNwLT55X3ZhbCwgMSk7CisJYnJlYWs7CisgICAgY2FzZSAnPSc6CisJc3AtPmNvdW50ID0gMDsKKwlzaG93X3N0YXR1cyh3aW4sIHNwKTsKKwlicmVhazsKKyAgICBjYXNlICctJzoKKwlzcC0+Y291bnQgPSAtKHNwLT5jb3VudCk7CisJc2hvd19zdGF0dXMod2luLCBzcCk7CisJYnJlYWs7CisgICAgY2FzZSAnPyc6CisJZG9fc3Vid2luZG93KHdpbiwgc3AsIHNob3dfaGVscCk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlpZiAoaXNkaWdpdChzcC0+Y2gpKSB7CisJICAgIHNwLT5jb3VudCA9IChzcC0+Y291bnQgKiAxMCkgKyAoc3AtPmNoIC0gJzAnKTsKKwkgICAgc2hvd19zdGF0dXMod2luLCBzcCk7CisJfSBlbHNlIHsKKwkgICAgYmVlcCgpOworCX0KKwlicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3djaGdhdChXSU5ET1cgKndpbikKK3sKKyAgICBTVEFUVVMgc3Q7CisKKyAgICBpbml0X3N0YXR1cyh3aW4sICZzdCk7CisKKyAgICBkbyB7CisJc3dpdGNoIChzdC5jaCkgeworCWNhc2UgJy4nOgkJLyogY2hhbmdlIGZyb20gY3VycmVudCBwb3NpdGlvbiAqLworCSAgICB3Y2hnYXQod2luLCBzdC5jb3VudCwgc3QuYXR0ciwgc3QucGFpciwgKHZvaWQgKikgMCk7CisJICAgIHRvdWNoX2lmX25lZWRlZCh3aW4sIHN0LnlfdmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnLCc6CQkvKiBjaGFuZ2UgZnJvbSBiZWdpbm5pbmcgb2Ygd2luZG93ICovCisJICAgIG12d2NoZ2F0KHdpbiwgMCwgMCwgc3QuY291bnQsIHN0LmF0dHIsIHN0LnBhaXIsICh2b2lkICopIDApOworCSAgICB0b3VjaF9pZl9uZWVkZWQod2luLCAwKTsKKwkgICAgd21vdmUod2luLCBzdC55X3ZhbCwgc3QueF92YWwpOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkgICAgZG9fc3Vid2luZG93KHdpbiwgJnN0LCB0ZXN0X3djaGdhdCk7CisJICAgIGJyZWFrOworCWNhc2UgJ3EnOgorCSAgICByZXR1cm47CisJZGVmYXVsdDoKKwkgICAgdXBkYXRlX3N0YXR1cyh3aW4sICZzdCk7CisJICAgIGJyZWFrOworCX0KKyAgICB9IHdoaWxlICgoc3QuY2ggPSB3Z2V0Y2god2luKSkgIT0gRVJSKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfY2hnYXQodm9pZCkKK3sKKyAgICBTVEFUVVMgc3Q7CisKKyAgICBpbml0X3N0YXR1cyhzdGRzY3IsICZzdCk7CisKKyAgICBkbyB7CisJc3dpdGNoIChzdC5jaCkgeworCWNhc2UgJy4nOgkJLyogY2hhbmdlIGZyb20gY3VycmVudCBwb3NpdGlvbiAqLworCSAgICBjaGdhdChzdC5jb3VudCwgc3QuYXR0ciwgc3QucGFpciwgKHZvaWQgKikgMCk7CisJICAgIHRvdWNoX2lmX25lZWRlZChzdGRzY3IsIHN0LnlfdmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnLCc6CQkvKiBjaGFuZ2UgZnJvbSBiZWdpbm5pbmcgb2Ygd2luZG93ICovCisJICAgIG12Y2hnYXQoMCwgMCwgc3QuY291bnQsIHN0LmF0dHIsIHN0LnBhaXIsICh2b2lkICopIDApOworCSAgICB0b3VjaF9pZl9uZWVkZWQoc3Rkc2NyLCAwKTsKKwkgICAgbW92ZShzdC55X3ZhbCwgc3QueF92YWwpOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkgICAgZG9fc3Vid2luZG93KHN0ZHNjciwgJnN0LCB0ZXN0X3djaGdhdCk7CisJICAgIGJyZWFrOworCWNhc2UgJ3EnOgorCSAgICByZXR1cm47CisJZGVmYXVsdDoKKwkgICAgdXBkYXRlX3N0YXR1cyhzdGRzY3IsICZzdCk7CisJICAgIGJyZWFrOworCX0KKyAgICB9IHdoaWxlICgoc3QuY2ggPSBnZXRjaCgpKSAhPSBFUlIpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBpbml0c2NyKCk7CisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisKKyAgICB0ZXN0X2NoZ2F0KCk7CisgICAgZW5kd2luKCk7CisKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIGN1cnNlcyBjaGdhdCBmdW5jdGlvblxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9jb2xvcl9zZXQuYyBiL25jdXJzZXMtNS43L3Rlc3QvY29sb3Jfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5ODFjYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvY29sb3Jfc2V0LmMKQEAgLTAsMCArMSw5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGNvbG9yX3NldC5jLHYgMS42IDIwMDgvMDIvMTAgMDA6MTg6MDEgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgSEFWRV9DT0xPUl9TRVQKKworI2RlZmluZSBTSE9XKG4pICgobikgPT0gRVJSID8gIkVSUiIgOiAiT0siKQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBzaG9ydCBmLCBiOworICAgIGludCBpOworCisgICAgaW5pdHNjcigpOworICAgIGNicmVhaygpOworICAgIG5vZWNobygpOworCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCXN0YXJ0X2NvbG9yKCk7CisKKwlwYWlyX2NvbnRlbnQoMCwgJmYsICZiKTsKKwlwcmludHcoInBhaXIgMCBjb250YWlucyAoJWQsJWQpXG4iLCBmLCBiKTsKKwlnZXRjaCgpOworCisJcHJpbnR3KCJJbml0aWFsaXppbmcgcGFpciAxIHRvIHJlZC9ibGFja1xuIik7CisJaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0spOworCWkgPSBjb2xvcl9zZXQoMSwgTlVMTCk7CisJcHJpbnR3KCJSRUQvQkxBQ0sgKCVzKVxuIiwgU0hPVyhpKSk7CisJZ2V0Y2goKTsKKworCXByaW50dygiSW5pdGlhbGl6aW5nIHBhaXIgMiB0byB3aGl0ZS9ibHVlXG4iKTsKKwlpbml0X3BhaXIoMiwgQ09MT1JfV0hJVEUsIENPTE9SX0JMVUUpOworCWkgPSBjb2xvcl9zZXQoMiwgTlVMTCk7CisJcHJpbnR3KCJXSElURS9CTFVFICglcylcbiIsIFNIT1coaSkpOworCWdldGNoKCk7CisKKwlwcmludHcoIlJlc2V0dGluZyBjb2xvcnMgdG8gcGFpciAwXG4iKTsKKwlpID0gY29sb3Jfc2V0KDAsIE5VTEwpOworCXByaW50dygiRGVmYXVsdCBDb2xvcnMgKCVzKVxuIiwgU0hPVyhpKSk7CisJZ2V0Y2goKTsKKworCXByaW50dygiUmVzZXR0aW5nIGNvbG9ycyB0byBwYWlyIDFcbiIpOworCWkgPSBjb2xvcl9zZXQoMSwgTlVMTCk7CisJcHJpbnR3KCJSRUQvQkxBQ0sgKCVzKVxuIiwgU0hPVyhpKSk7CisJZ2V0Y2goKTsKKworICAgIH0gZWxzZSB7CisJcHJpbnR3KCJUaGlzIGRlbW8gcmVxdWlyZXMgYSBjb2xvciB0ZXJtaW5hbCIpOworCWdldGNoKCk7CisgICAgfQorICAgIGVuZHdpbigpOworCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgY3Vyc2VzIGNvbG9yX3NldCBmdW5jdGlvblxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9jb25maWd1cmUgYi9uY3Vyc2VzLTUuNy90ZXN0L2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjRmYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9jb25maWd1cmUKQEAgLTAsMCArMSw4MTQwIEBACisjISAvYmluL3NoCisKKyMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEzLjIwMDMwOTI3IAorIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDkzLCA5NCwgOTUsIDk2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisKKyMgRGVmYXVsdHM6CithY19oZWxwPQorYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorIyBBbnkgYWRkaXRpb25zIGZyb20gY29uZmlndXJlLmluOgorCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorYnVpbGQ9Tk9ORQorY2FjaGVfZmlsZT0uL2NvbmZpZy5jYWNoZQorZXhlY19wcmVmaXg9Tk9ORQoraG9zdD1OT05FCitub19jcmVhdGU9Citub25vcHQ9Tk9ORQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordGFyZ2V0PU5PTkUKK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKK2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCitkYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCitzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCitsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKK2luZm9kaXI9JyR7cHJlZml4fS9pbmZvJworbWFuZGlyPScke3ByZWZpeH0vbWFuJworCisjIEluaXRpYWxpemUgc29tZSBvdGhlciB2YXJpYWJsZXMuCitzdWJkaXJzPQorTUZMQUdTPSBNQUtFRkxBR1M9CitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzaGVsbCBoZXJlIGRvY3VtZW50LgorYWNfbWF4X2hlcmVfbGluZXM9MTIKKworYWNfcHJldj0KK2ZvciBhY19vcHRpb24KK2RvCisKKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgIGV2YWwgIiRhY19wcmV2PVwkYWNfb3B0aW9uIgorICAgIGFjX3ByZXY9CisgICAgY29udGludWUKKyAgZmkKKworICBjYXNlICIkYWNfb3B0aW9uIiBpbgorICAtKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRpb24iIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKyAgKikgYWNfb3B0YXJnPSA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICIkYWNfb3B0aW9uIiBpbgorCisgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCisgICAgYWNfcHJldj1iaW5kaXIgOzsKKyAgLWJpbmRpcj0qIHwgLS1iaW5kaXI9KiB8IC0tYmluZGk9KiB8IC0tYmluZD0qIHwgLS1iaW49KiB8IC0tYmk9KikKKyAgICBiaW5kaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkPSIkYWNfb3B0YXJnIiA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9IiRhY19vcHRhcmciIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQgfCAtLWRhdGEgfCAtLWRhdCB8IC0tZGEpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSogfCAtLWRhdGE9KiB8IC0tZGF0PSogXAorICB8IC0tZGE9KikKKyAgICBkYXRhZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qZGlzYWJsZS0vLydgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvWy1hLXpBLVowLTlfXS8vZydgIjsgdGhlbgorICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorICAgIGZpCisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzLy0vXy9nJ2AKKyAgICBldmFsICJlbmFibGVfJHthY19mZWF0dXJlfT1ubyIgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSplbmFibGUtLy8nIC1lICdzLz0uKi8vJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCisgICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19mZWF0dXJlOiBpbnZhbGlkIGZlYXR1cmUgbmFtZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgZmkKKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvLS9fL2cnYAorICAgIGNhc2UgIiRhY19vcHRpb24iIGluCisgICAgICAqPSopIDs7CisgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXNhYworICAgIGV2YWwgImVuYWJsZV8ke2FjX2ZlYXR1cmV9PSckYWNfb3B0YXJnJyIgOzsKKworICAtZXhlYy1wcmVmaXggfCAtLWV4ZWNfcHJlZml4IHwgLS1leGVjLXByZWZpeCB8IC0tZXhlYy1wcmVmaSBcCisgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKKyAgfCAtLWV4ZWMgfCAtLWV4ZSB8IC0tZXgpCisgICAgYWNfcHJldj1leGVjX3ByZWZpeCA7OworICAtZXhlYy1wcmVmaXg9KiB8IC0tZXhlY19wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaT0qIFwKKyAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKKyAgfCAtLWV4ZWM9KiB8IC0tZXhlPSogfCAtLWV4PSopCisgICAgZXhlY19wcmVmaXg9IiRhY19vcHRhcmciIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSkKKyAgICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCisgICAgY2F0IDw8IEVPRgorVXNhZ2U6IGNvbmZpZ3VyZSBbb3B0aW9uc10gW2hvc3RdCitPcHRpb25zOiBbZGVmYXVsdHMgaW4gYnJhY2tldHMgYWZ0ZXIgZGVzY3JpcHRpb25zXQorQ29uZmlndXJhdGlvbjoKKyAgLS1jYWNoZS1maWxlPUZJTEUgICAgICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUKKyAgLS1oZWxwICAgICAgICAgICAgICAgICAgcHJpbnQgdGhpcyBtZXNzYWdlCisgIC0tbm8tY3JlYXRlICAgICAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgIC0tcXVpZXQsIC0tc2lsZW50ICAgICAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nLi4uJyBtZXNzYWdlcworICAtLXZlcnNpb24gICAgICAgICAgICAgICBwcmludCB0aGUgdmVyc2lvbiBvZiBhdXRvY29uZiB0aGF0IGNyZWF0ZWQgY29uZmlndXJlCitEaXJlY3RvcnkgYW5kIGZpbGUgbmFtZXM6CisgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc2FtZSBhcyBwcmVmaXhdCisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgaW4gRElSIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9saWJleGVjXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvc2hhcmVdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIGluIERJUiBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBpbiBESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBpbiBESVIgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBpbiBESVIgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBpbiBESVIgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBpbiBESVIgWy91c3IvaW5jbHVkZV0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIGluIERJUiBbUFJFRklYL2luZm9dCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIGluIERJUiBbUFJFRklYL21hbl0KKyAgLS1zcmNkaXI9RElSICAgICAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgLi5dCisgIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCitFT0YKKyAgICBjYXQgPDwgRU9GCitIb3N0IHR5cGU6CisgIC0tYnVpbGQ9QlVJTEQgICAgICAgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW0JVSUxEPUhPU1RdCisgIC0taG9zdD1IT1NUICAgICAgICAgICAgIGNvbmZpZ3VyZSBmb3IgSE9TVCBbZ3Vlc3NlZF0KKyAgLS10YXJnZXQ9VEFSR0VUICAgICAgICAgY29uZmlndXJlIGZvciBUQVJHRVQgW1RBUkdFVD1IT1NUXQorRmVhdHVyZXMgYW5kIHBhY2thZ2VzOgorICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS14LWluY2x1ZGVzPURJUiAgICAgICAgWCBpbmNsdWRlIGZpbGVzIGFyZSBpbiBESVIKKyAgLS14LWxpYnJhcmllcz1ESVIgICAgICAgWCBsaWJyYXJ5IGZpbGVzIGFyZSBpbiBESVIKK0VPRgorY2F0IDw8XEVPRgorLS1lbmFibGUgYW5kIC0td2l0aCBvcHRpb25zIHJlY29nbml6ZWQ6CisgIC0tZGlzYWJsZS1lY2hvICAgICAgICAgIGRpc3BsYXkgImNvbXBpbGluZyIgY29tbWFuZHMKKyAgLS1lbmFibGUtd2FybmluZ3MgICAgICAgdGVzdDogdHVybiBvbiBnY2MgY29tcGlsZXIgd2FybmluZ3MKKyAgLS13aXRoLWN1cnNlcy1kaXI9RElSICAgZGlyZWN0b3J5IGluIHdoaWNoIChuKWN1cnNlcyBpcyBpbnN0YWxsZWQKKyAgLS13aXRoLTVsaWIgICAgICAgICAgICAgdXNlIFN1bk9TIHN5c3YtbGlicmFyaWVzCisgIC0td2l0aC1uY3Vyc2VzdyAgICAgICAgIHVzZSB3aWRlIG5jdXJzZXMtbGlicmFyaWVzIChpbnN0YWxsZWQpCisgIC0td2l0aC1uY3Vyc2VzICAgICAgICAgIHVzZSBuY3Vyc2VzLWxpYnJhcmllcyAoaW5zdGFsbGVkKQorICAtLXdpdGgtcGRjdXJzZXMgICAgICAgICBjb21waWxlL2xpbmsgd2l0aCBwZGN1cnNlcyBYMTEgbGlicmFyeQorICAtLXdpdGgteCAgICAgICAgICAgICAgICB1c2UgdGhlIFggV2luZG93IFN5c3RlbQorICAtLXdpdGgtWGF3M2QgICAgICAgICAgICBsaW5rIHdpdGggWGF3IDNkIGxpYnJhcnkKKyAgLS13aXRoLW5lWHRhdyAgICAgICAgICAgbGluayB3aXRoIG5lWFQgQXRoZW5hIGxpYnJhcnkKKyAgLS13aXRoLVhhd1BsdXMgICAgICAgICAgbGluayB3aXRoIEF0aGVuYS1QbHVzIGxpYnJhcnkKK0VPRgorICAgIGV4aXQgMCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdCA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3Q9IiRhY19vcHRhcmciIDs7CisKKyAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAorICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisgICAgaW5jbHVkZWRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgIGFjX3ByZXY9aW5mb2RpciA7OworICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQorICAgIGluZm9kaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKyAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorICAgIGxpYmV4ZWNkaXI9IiRhY19vcHRhcmciIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCisgIHwgLS1sb2NhbHMgfCAtLWxvY2FsIHwgLS1sb2NhIHwgLS1sb2MgfCAtLWxvKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiBcCisgIHwgLS1sb2NhbHM9KiB8IC0tbG9jYWw9KiB8IC0tbG9jYT0qIHwgLS1sb2M9KiB8IC0tbG89KikKKyAgICBsb2NhbHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgd2l0aF9mcD1ubyA7OworCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYykKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9IiRhY19vcHRhcmciIDs7CisKKyAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKyAgfCAtLXByb2dyYW0tcHJlIHwgLS1wcm9ncmFtLXByIHwgLS1wcm9ncmFtLXApCisgICAgYWNfcHJldj1wcm9ncmFtX3ByZWZpeCA7OworICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKyAgfCAtLXByb2dyYW0tcHJlZj0qIHwgLS1wcm9ncmFtLXByZT0qIHwgLS1wcm9ncmFtLXByPSogfCAtLXByb2dyYW0tcD0qKQorICAgIHByb2dyYW1fcHJlZml4PSIkYWNfb3B0YXJnIiA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0iJGFjX29wdGFyZyIgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0iJGFjX29wdGFyZyIgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSIkYWNfb3B0YXJnIiA7OworCisgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKKyAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKKyAgfCAtLXNoYSB8IC0tc2gpCisgICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OworICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKKyAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKKyAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgIHwgLS1zaGE9KiB8IC0tc2g9KikKKyAgICBzaGFyZWRzdGF0ZWRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9IiRhY19vcHRhcmciIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0iJGFjX29wdGFyZyIgOzsKKworICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCisgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OworICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAorICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCisgICAgc3lzY29uZmRpcj0iJGFjX29wdGFyZyIgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0IDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXQ9IiRhY19vcHRhcmciIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzKQorICAgIGVjaG8gImNvbmZpZ3VyZSBnZW5lcmF0ZWQgYnkgYXV0b2NvbmYgdmVyc2lvbiAyLjEzLjIwMDMwOTI3IgorICAgIGV4aXQgMCA7OworCisgIC13aXRoLSogfCAtLXdpdGgtKikKKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aC0vLycgLWUgJ3MvPS4qLy8nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfcGFja2FnZXwgc2VkICdzL1stX2EtekEtWjAtOV0vL2cnYCI7IHRoZW4KKyAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX3BhY2thZ2U6IGludmFsaWQgcGFja2FnZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKyAgICBmaQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCisgICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKyAgICAgICo9KikgOzsKKyAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBlc2FjCisgICAgZXZhbCAid2l0aF8ke2FjX3BhY2thZ2V9PSckYWNfb3B0YXJnJyIgOzsKKworICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKndpdGhvdXQtLy8nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfcGFja2FnZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKyAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX3BhY2thZ2U6IGludmFsaWQgcGFja2FnZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKyAgICBmaQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCisgICAgZXZhbCAid2l0aF8ke2FjX3BhY2thZ2V9PW5vIiA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9IiRhY19vcHRhcmciIDs7CisKKyAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCisgICAgYWNfcHJldj14X2xpYnJhcmllcyA7OworICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQorICAgIHhfbGlicmFyaWVzPSIkYWNfb3B0YXJnIiA7OworCisgIC0qKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19vcHRpb246IGludmFsaWQgb3B0aW9uOyB1c2UgLS1oZWxwIHRvIHNob3cgdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorICAgIDs7CisKKyAgKikKKyAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfb3B0aW9ufCBzZWQgJ3MvWy1hLXowLTkuXS8vZydgIjsgdGhlbgorICAgICAgZWNobyAiY29uZmlndXJlOiB3YXJuaW5nOiAkYWNfb3B0aW9uOiBpbnZhbGlkIGhvc3QgdHlwZSIgMT4mMgorICAgIGZpCisgICAgaWYgdGVzdCAieCRub25vcHQiICE9IHhOT05FOyB0aGVuCisgICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBvbmx5IGNvbmZpZ3VyZSBmb3Igb25lIGhvc3QgYW5kIG9uZSB0YXJnZXQgYXQgYSB0aW1lIiAxPiYyOyBleGl0IDE7IH0KKyAgICBmaQorICAgIG5vbm9wdD0iJGFjX29wdGlvbiIKKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbWlzc2luZyBhcmd1bWVudCB0byAtLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AiIDE+JjI7IGV4aXQgMTsgfQorZmkKKwordHJhcCAncm0gLWZyIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29yZSBjb3JlLiogKi5jb3JlICRhY19jbGVhbl9maWxlczsgZXhpdCAxJyAxIDIgMTUKKworIyBGaWxlIGRlc2NyaXB0b3IgdXNhZ2U6CisjIDAgc3RhbmRhcmQgaW5wdXQKKyMgMSBmaWxlIGNyZWF0aW9uCisjIDIgZXJyb3JzIGFuZCB3YXJuaW5ncworIyAzIHNvbWUgc3lzdGVtcyBtYXkgb3BlbiBpdCB0byAvZGV2L3R0eQorIyA0IHVzZWQgb24gdGhlIEt1Ym90YSBUaXRhbgorIyA2IGNoZWNraW5nIGZvci4uLiBtZXNzYWdlcyBhbmQgcmVzdWx0cworIyA1IGNvbXBpbGVyIG1lc3NhZ2VzIHNhdmVkIGluIGNvbmZpZy5sb2cKK2lmIHRlc3QgIiRzaWxlbnQiID0geWVzOyB0aGVuCisgIGV4ZWMgNj4vZGV2L251bGwKK2Vsc2UKKyAgZXhlYyA2PiYxCitmaQorZXhlYyA1Pi4vY29uZmlnLmxvZworCitlY2hvICJcCitUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKyIgMT4mNQorCisjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorYWNfY29uZmlndXJlX2FyZ3M9Citmb3IgYWNfYXJnCitkbworICBjYXNlICIkYWNfYXJnIiBpbgorICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMpIDs7CisgIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorICB8IC0tbm8tcmVjdXJzIHwgLS1uby1yZWN1ciB8IC0tbm8tcmVjdSB8IC0tbm8tcmVjIHwgLS1uby1yZSB8IC0tbm8tcikgOzsKKyAgKiIgIip8KiIJIip8KltcW1xdXH5cI1wkXF5cJlwqXChcKVx7XH1cXFx8XDtcPFw+XD9dKikKKyAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciIDs7CisgICopIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJGFjX2FyZyIgOzsKKyAgZXNhYworZG9uZQorCisjIE5MUyBudWlzYW5jZXMuCisjIE9ubHkgc2V0IHRoZXNlIHRvIEMgaWYgYWxyZWFkeSBzZXQuICBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5CisjIGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQgZS5nLiBMQU5HPUMgKG5vdGFibHkgU0NPKS4KKyMgRml4aW5nIExDX01FU1NBR0VTIHByZXZlbnRzIFNvbGFyaXMgc2ggZnJvbSB0cmFuc2xhdGluZyB2YXIgdmFsdWVzIGluIGBzZXQnIQorIyBOb24tQyBMQ19DVFlQRSB2YWx1ZXMgYnJlYWsgdGhlIGN0eXBlIGNoZWNrLgoraWYgdGVzdCAiJHtMQU5HK3NldH0iICAgPSBzZXQ7IHRoZW4gTEFORz1DOyAgIGV4cG9ydCBMQU5HOyAgIGZpCitpZiB0ZXN0ICIke0xDX0FMTCtzZXR9IiA9IHNldDsgdGhlbiBMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgZmkKK2lmIHRlc3QgIiR7TENfTUVTU0FHRVMrc2V0fSIgPSBzZXQ7IHRoZW4gTENfTUVTU0FHRVM9QzsgZXhwb3J0IExDX01FU1NBR0VTOyBmaQoraWYgdGVzdCAiJHtMQ19DVFlQRStzZXR9IiAgICA9IHNldDsgdGhlbiBMQ19DVFlQRT1DOyAgICBleHBvcnQgTENfQ1RZUEU7ICAgIGZpCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzLmgKKyMgQUlYIGNwcCBsb3NlcyBvbiBhbiBlbXB0eSBmaWxlLCBzbyBtYWtlIHN1cmUgaXQgY29udGFpbnMgYXQgbGVhc3QgYSBuZXdsaW5lLgorZWNobyA+IGNvbmZkZWZzLmgKKworIyBBIGZpbGVuYW1lIHVuaXF1ZSB0byB0aGlzIHBhY2thZ2UsIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgdGhhdAorIyBjb25maWd1cmUgaXMgaW4sIHdoaWNoIHdlIGNhbiBsb29rIGZvciB0byBmaW5kIG91dCBpZiBzcmNkaXIgaXMgY29ycmVjdC4KK2FjX3VuaXF1ZV9maWxlPW5jdXJzZXMuYworCisjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCitpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcworICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gaXRzIHBhcmVudC4KKyAgYWNfcHJvZz0kMAorICBhY19jb25mZGlyPWBlY2hvICRhY19wcm9nfHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgdGVzdCAieCRhY19jb25mZGlyIiA9ICJ4JGFjX3Byb2ciICYmIGFjX2NvbmZkaXI9LgorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKyAgaWYgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzOyB0aGVuCisgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgc291cmNlcyBpbiAkYWNfY29uZmRpciBvciAuLiIgMT4mMjsgZXhpdCAxOyB9CisgIGVsc2UKKyAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgZmluZCBzb3VyY2VzIGluICRzcmNkaXIiIDE+JjI7IGV4aXQgMTsgfQorICBmaQorZmkKK3NyY2Rpcj1gZWNobyAiJHtzcmNkaXJ9IiB8IHNlZCAncyVcKFteL11cKS8qJCVcMSUnYAorCisjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgoraWYgdGVzdCAteiAiJENPTkZJR19TSVRFIjsgdGhlbgorICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZWxzZQorICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZmkKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KKyAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICBlY2hvICJsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiCisgICAgLiAiJGFjX3NpdGVfZmlsZSIKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgIGVjaG8gImxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCisgIC4gJGNhY2hlX2ZpbGUKK2Vsc2UKKyAgZWNobyAiY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCisgID4gJGNhY2hlX2ZpbGUKK2ZpCisKK2FjX2V4dD1jCisjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCisKK2FjX2V4ZWV4dD0KK2FjX29iamV4dD1vCitpZiAoZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsMykgfCBncmVwIGMgPi9kZXYvbnVsbDsgdGhlbgorICAjIFN0YXJkZW50IFZpc3RyYSBTVlI0IGdyZXAgbGFja3MgLWUsIHNheXMgZ2hhemlAY2FpcC5ydXRnZXJzLmVkdS4KKyAgaWYgKGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsMykgfCBzZWQgcy8tbi94bi8gfCBncmVwIHhuID4vZGV2L251bGw7IHRoZW4KKyAgICBhY19uPSBhY19jPScKKycgYWNfdD0nCScKKyAgZWxzZQorICAgIGFjX249LW4gYWNfYz0gYWNfdD0KKyAgZmkKK2Vsc2UKKyAgYWNfbj0gYWNfYz0nXGMnIGFjX3Q9CitmaQorCisjIElmIHdlIGZpbmQgWCwgc2V0IHNoZWxsIHZhcnMgeF9pbmNsdWRlcyBhbmQgeF9saWJyYXJpZXMgdG8gdGhlCisjIHBhdGhzLCBvdGhlcndpc2Ugc2V0IG5vX3g9eWVzLgorIyBVc2VzIGFjXyB2YXJzIGFzIHRlbXBzIHRvIGFsbG93IGNvbW1hbmQgbGluZSB0byBvdmVycmlkZSBjYWNoZSBhbmQgY2hlY2tzLgorIyAtLXdpdGhvdXQteCBvdmVycmlkZXMgZXZlcnl0aGluZyBlbHNlLCBidXQgZG9lcyBub3QgdG91Y2ggdGhlIGNhY2hlLgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU0MDogY2hlY2tpbmcgZm9yIFgiID4mNQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgteCBvciAtLXdpdGhvdXQteCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfeCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF94IgorICA6CitmaQorCisjICRoYXZlX3ggaXMgYHllcycsIGBubycsIGBkaXNhYmxlZCcsIG9yIGVtcHR5IHdoZW4gd2UgZG8gbm90IHlldCBrbm93LgoraWYgdGVzdCAieCR3aXRoX3giID0geG5vOyB0aGVuCisgICMgVGhlIHVzZXIgZXhwbGljaXRseSBkaXNhYmxlZCBYLgorICBoYXZlX3g9ZGlzYWJsZWQKK2Vsc2UKKyAgaWYgdGVzdCAieCR4X2luY2x1ZGVzIiAhPSB4Tk9ORSAmJiB0ZXN0ICJ4JHhfbGlicmFyaWVzIiAhPSB4Tk9ORTsgdGhlbgorICAgICMgQm90aCB2YXJpYWJsZXMgYXJlIGFscmVhZHkgc2V0LgorICAgIGhhdmVfeD15ZXMKKyAgZWxzZQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hhdmVfeCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICMgT25lIG9yIGJvdGggb2YgdGhlIHZhcnMgYXJlIG5vdCBzZXQsIGFuZCB0aGVyZSBpcyBubyBjYWNoZWQgdmFsdWUuCithY194X2luY2x1ZGVzPU5PIGFjX3hfbGlicmFyaWVzPU5PCitybSAtZnIgY29uZnRlc3RkaXIKK2lmIG1rZGlyIGNvbmZ0ZXN0ZGlyOyB0aGVuCisgIGNkIGNvbmZ0ZXN0ZGlyCisgICMgTWFrZSBzdXJlIHRvIG5vdCBwdXQgIm1ha2UiIGluIHRoZSBJbWFrZWZpbGUgcnVsZXMsIHNpbmNlIHdlIGdyZXAgaXQgb3V0LgorICBjYXQgPiBJbWFrZWZpbGUgPDwnRU9GJworYWNmaW5keDoKKwlAZWNobyAnYWNfaW1faW5jcm9vdD0iJHtJTkNST09UfSI7IGFjX2ltX3VzcmxpYmRpcj0iJHtVU1JMSUJESVJ9IjsgYWNfaW1fbGliZGlyPSIke0xJQkRJUn0iJworRU9GCisgIGlmICh4bWttZikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJiB0ZXN0IC1mIE1ha2VmaWxlOyB0aGVuCisgICAgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCisgICAgZXZhbCBgJHtNQUtFLW1ha2V9IGFjZmluZHggMj4vZGV2L251bGwgfCBncmVwIC12IG1ha2VgCisgICAgIyBPcGVuIFdpbmRvd3MgeG1rbWYgcmVwb3J0ZWRseSBzZXRzIExJQkRJUiBpbnN0ZWFkIG9mIFVTUkxJQkRJUi4KKyAgICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2w7IGRvCisgICAgICBpZiB0ZXN0ICEgLWYgJGFjX2ltX3VzcmxpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiAmJgorICAgICAgICB0ZXN0IC1mICRhY19pbV9saWJkaXIvbGliWDExLiRhY19leHRlbnNpb247IHRoZW4KKyAgICAgICAgYWNfaW1fdXNybGliZGlyPSRhY19pbV9saWJkaXI7IGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICAjIFNjcmVlbiBvdXQgYm9ndXMgdmFsdWVzIGZyb20gdGhlIGltYWtlIGNvbmZpZ3VyYXRpb24uICBUaGV5IGFyZQorICAgICMgYm9ndXMgYm90aCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBkZWZhdWx0IGFueXdheSwgYW5kIGJlY2F1c2UKKyAgICAjIHVzaW5nIHRoZW0gd291bGQgYnJlYWsgZ2NjIG9uIHN5c3RlbXMgd2hlcmUgaXQgbmVlZHMgZml4ZWQgaW5jbHVkZXMuCisgICAgY2FzZSAiJGFjX2ltX2luY3Jvb3QiIGluCisJL3Vzci9pbmNsdWRlKSA7OworCSopIHRlc3QgLWYgIiRhY19pbV9pbmNyb290L1gxMS9Yb3MuaCIgJiYgYWNfeF9pbmNsdWRlcz0iJGFjX2ltX2luY3Jvb3QiIDs7CisgICAgZXNhYworICAgIGNhc2UgIiRhY19pbV91c3JsaWJkaXIiIGluCisJL3Vzci9saWIgfCAvbGliKSA7OworCSopIHRlc3QgLWQgIiRhY19pbV91c3JsaWJkaXIiICYmIGFjX3hfbGlicmFyaWVzPSIkYWNfaW1fdXNybGliZGlyIiA7OworICAgIGVzYWMKKyAgZmkKKyAgY2QgLi4KKyAgcm0gLWZyIGNvbmZ0ZXN0ZGlyCitmaQorCitpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBOTzsgdGhlbgorICAjIEd1ZXNzIHdoZXJlIHRvIGZpbmQgaW5jbHVkZSBmaWxlcywgYnkgbG9va2luZyBmb3IgdGhpcyBvbmUgWDExIC5oIGZpbGUuCisgIHRlc3QgLXogIiR4X2RpcmVjdF90ZXN0X2luY2x1ZGUiICYmIHhfZGlyZWN0X3Rlc3RfaW5jbHVkZT1YMTEvSW50cmluc2ljLmgKKworICAjIEZpcnN0LCB0cnkgdXNpbmcgdGhhdCBmaWxlIHdpdGggbm8gc3BlY2lhbCBkaXJlY3Rvcnkgc3BlY2lmaWVkLgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjAzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwkeF9kaXJlY3RfdGVzdF9pbmNsdWRlPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2MDg6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgICMgV2UgY2FuIGNvbXBpbGUgdXNpbmcgWCBoZWFkZXJzIHdpdGggbm8gc3BlY2lhbCBpbmNsdWRlIGRpcmVjdG9yeS4KK2FjX3hfaW5jbHVkZXM9CitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAjIExvb2sgZm9yIHRoZSBoZWFkZXIgZmlsZSBpbiBhIHN0YW5kYXJkIHNldCBvZiBjb21tb24gZGlyZWN0b3JpZXMuCisjIENoZWNrIFgxMSBiZWZvcmUgWDExUm4gYmVjYXVzZSBpdCBpcyBvZnRlbiBhIHN5bWxpbmsgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKyAgZm9yIGFjX2RpciBpbiAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL1gxMS9pbmNsdWRlICAgICAgICAgIFwKKyAgICAvdXNyL1gxMVI2L2luY2x1ZGUgICAgICAgIFwKKyAgICAvdXNyL1gxMVI1L2luY2x1ZGUgICAgICAgIFwKKyAgICAvdXNyL1gxMVI0L2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2luY2x1ZGUvWDExICAgICAgICAgIFwKKyAgICAvdXNyL2luY2x1ZGUvWDExUjYgICAgICAgIFwKKyAgICAvdXNyL2luY2x1ZGUvWDExUjUgICAgICAgIFwKKyAgICAvdXNyL2luY2x1ZGUvWDExUjQgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL1gxMS9pbmNsdWRlICAgIFwKKyAgICAvdXNyL2xvY2FsL1gxMVI2L2luY2x1ZGUgIFwKKyAgICAvdXNyL2xvY2FsL1gxMVI1L2luY2x1ZGUgIFwKKyAgICAvdXNyL2xvY2FsL1gxMVI0L2luY2x1ZGUgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL2luY2x1ZGUvWDExICAgIFwKKyAgICAvdXNyL2xvY2FsL2luY2x1ZGUvWDExUjYgIFwKKyAgICAvdXNyL2xvY2FsL2luY2x1ZGUvWDExUjUgIFwKKyAgICAvdXNyL2xvY2FsL2luY2x1ZGUvWDExUjQgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL1gzODYvaW5jbHVkZSAgICAgICAgIFwKKyAgICAvdXNyL3gzODYvaW5jbHVkZSAgICAgICAgIFwKKyAgICAvdXNyL1hGcmVlODYvaW5jbHVkZS9YMTEgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2luY2x1ZGUgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL2luY2x1ZGUgICAgICAgIFwKKyAgICAvdXNyL3Vuc3VwcG9ydGVkL2luY2x1ZGUgIFwKKyAgICAvdXNyL2F0aGVuYS9pbmNsdWRlICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL3gxMXI1L2luY2x1ZGUgIFwKKyAgICAvdXNyL2xwcC9YYW1wbGVzL2luY2x1ZGUgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL29wZW53aW4vaW5jbHVkZSAgICAgIFwKKyAgICAvdXNyL29wZW53aW4vc2hhcmUvaW5jbHVkZSBcCisgICAgOyBcCisgIGRvCisgICAgaWYgdGVzdCAtciAiJGFjX2Rpci8keF9kaXJlY3RfdGVzdF9pbmNsdWRlIjsgdGhlbgorICAgICAgYWNfeF9pbmNsdWRlcz0kYWNfZGlyCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpICMgJGFjX3hfaW5jbHVkZXMgPSBOTworCitpZiB0ZXN0ICIkYWNfeF9saWJyYXJpZXMiID0gTk87IHRoZW4KKyAgIyBDaGVjayBmb3IgdGhlIGxpYnJhcmllcy4KKworICB0ZXN0IC16ICIkeF9kaXJlY3RfdGVzdF9saWJyYXJ5IiAmJiB4X2RpcmVjdF90ZXN0X2xpYnJhcnk9WHQKKyAgdGVzdCAteiAiJHhfZGlyZWN0X3Rlc3RfZnVuY3Rpb24iICYmIHhfZGlyZWN0X3Rlc3RfZnVuY3Rpb249WHRNYWxsb2MKKworICAjIFNlZSBpZiB3ZSBmaW5kIHRoZW0gd2l0aG91dCBhbnkgc3BlY2lhbCBvcHRpb25zLgorICAjIERvbid0IGFkZCB0byAkTElCUyBwZXJtYW5lbnRseS4KKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKyAgTElCUz0iLWwkeF9kaXJlY3RfdGVzdF9saWJyYXJ5ICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjc3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7Ciske3hfZGlyZWN0X3Rlc3RfZnVuY3Rpb259KCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2ODQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIExJQlM9IiRhY19zYXZlX0xJQlMiCisjIFdlIGNhbiBsaW5rIFggcHJvZ3JhbXMgd2l0aCBubyBzcGVjaWFsIGxpYnJhcnkgcGF0aC4KK2FjX3hfbGlicmFyaWVzPQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorIyBGaXJzdCBzZWUgaWYgcmVwbGFjaW5nIHRoZSBpbmNsdWRlIGJ5IGxpYiB3b3Jrcy4KKyMgQ2hlY2sgWDExIGJlZm9yZSBYMTFSbiBiZWNhdXNlIGl0IGlzIG9mdGVuIGEgc3ltbGluayB0byB0aGUgY3VycmVudCByZWxlYXNlLgorZm9yIGFjX2RpciBpbiBgZWNobyAiJGFjX3hfaW5jbHVkZXMiIHwgc2VkIHMvaW5jbHVkZS9saWIvYCBcCisgICAgL3Vzci9YMTEvbGliICAgICAgICAgIFwKKyAgICAvdXNyL1gxMVI2L2xpYiAgICAgICAgXAorICAgIC91c3IvWDExUjUvbGliICAgICAgICBcCisgICAgL3Vzci9YMTFSNC9saWIgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3IvbGliL1gxMSAgICAgICAgICBcCisgICAgL3Vzci9saWIvWDExUjYgICAgICAgIFwKKyAgICAvdXNyL2xpYi9YMTFSNSAgICAgICAgXAorICAgIC91c3IvbGliL1gxMVI0ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL1gxMS9saWIgICAgXAorICAgIC91c3IvbG9jYWwvWDExUjYvbGliICBcCisgICAgL3Vzci9sb2NhbC9YMTFSNS9saWIgIFwKKyAgICAvdXNyL2xvY2FsL1gxMVI0L2xpYiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9sb2NhbC9saWIvWDExICAgIFwKKyAgICAvdXNyL2xvY2FsL2xpYi9YMTFSNiAgXAorICAgIC91c3IvbG9jYWwvbGliL1gxMVI1ICBcCisgICAgL3Vzci9sb2NhbC9saWIvWDExUjQgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3IvWDM4Ni9saWIgICAgICAgICBcCisgICAgL3Vzci94Mzg2L2xpYiAgICAgICAgIFwKKyAgICAvdXNyL1hGcmVlODYvbGliL1gxMSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgL3Vzci9saWIgICAgICAgICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL2xpYiAgICAgICAgXAorICAgIC91c3IvdW5zdXBwb3J0ZWQvbGliICBcCisgICAgL3Vzci9hdGhlbmEvbGliICAgICAgIFwKKyAgICAvdXNyL2xvY2FsL3gxMXI1L2xpYiAgXAorICAgIC91c3IvbHBwL1hhbXBsZXMvbGliICBcCisgICAgL2xpYi91c3IvbGliL1gxMQkgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC91c3Ivb3Blbndpbi9saWIgICAgICBcCisgICAgL3Vzci9vcGVud2luL3NoYXJlL2xpYiBcCisgICAgOyBcCitkbworICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2w7IGRvCisgICAgaWYgdGVzdCAtciAkYWNfZGlyL2xpYiR7eF9kaXJlY3RfdGVzdF9saWJyYXJ5fS4kYWNfZXh0ZW5zaW9uOyB0aGVuCisgICAgICBhY194X2xpYnJhcmllcz0kYWNfZGlyCisgICAgICBicmVhayAyCisgICAgZmkKKyAgZG9uZQorZG9uZQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkgIyAkYWNfeF9saWJyYXJpZXMgPSBOTworCitpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBOTyB8fCB0ZXN0ICIkYWNfeF9saWJyYXJpZXMiID0gTk87IHRoZW4KKyAgIyBEaWRuJ3QgZmluZCBYIGFueXdoZXJlLiAgQ2FjaGUgdGhlIGtub3duIGFic2VuY2Ugb2YgWC4KKyAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9bm8iCitlbHNlCisgICMgUmVjb3JkIHdoZXJlIHdlIGZvdW5kIFggZm9yIHRoZSBjYWNoZS4KKyAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9eWVzIFwKKwkgICAgICAgIGFjX3hfaW5jbHVkZXM9JGFjX3hfaW5jbHVkZXMgYWNfeF9saWJyYXJpZXM9JGFjX3hfbGlicmFyaWVzIgorZmkKK2ZpCisgIGZpCisgIGV2YWwgIiRhY19jdl9oYXZlX3giCitmaSAjICR3aXRoX3ggIT0gbm8KKworaWYgdGVzdCAiJGhhdmVfeCIgIT0geWVzOyB0aGVuCisgIGVjaG8gIiRhY190IiIkaGF2ZV94IiAxPiY2CisgIG5vX3g9eWVzCitlbHNlCisgICMgSWYgZWFjaCBvZiB0aGUgdmFsdWVzIHdhcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCBvdmVycmlkZXMgZWFjaCBndWVzcy4KKyAgdGVzdCAieCR4X2luY2x1ZGVzIiA9IHhOT05FICYmIHhfaW5jbHVkZXM9JGFjX3hfaW5jbHVkZXMKKyAgdGVzdCAieCR4X2xpYnJhcmllcyIgPSB4Tk9ORSAmJiB4X2xpYnJhcmllcz0kYWNfeF9saWJyYXJpZXMKKyAgIyBVcGRhdGUgdGhlIGNhY2hlIHZhbHVlIHRvIHJlZmxlY3QgdGhlIGNvbW1hbmQgbGluZSB2YWx1ZXMuCisgIGFjX2N2X2hhdmVfeD0iaGF2ZV94PXllcyBcCisJCWFjX3hfaW5jbHVkZXM9JHhfaW5jbHVkZXMgYWNfeF9saWJyYXJpZXM9JHhfbGlicmFyaWVzIgorICBlY2hvICIkYWNfdCIibGlicmFyaWVzICR4X2xpYnJhcmllcywgaGVhZGVycyAkeF9pbmNsdWRlcyIgMT4mNgorZmkKKworCisKKworCit0ZXN0IC1mIGNvbmZpZy5ndWVzcyB8fCAoIHRlc3QgLWYgLi4vY29uZmlnLmd1ZXNzICYmIGNwIC4uL2NvbmZpZy5ndWVzcyAuLyApCisKKwordGVzdCAtZiBjb25maWcuc3ViIHx8ICggdGVzdCAtZiAuLi9jb25maWcuc3ViICYmIGNwIC4uL2NvbmZpZy5zdWIgLi8gKQorCithY19hdXhfZGlyPQorZm9yIGFjX2RpciBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLjsgZG8KKyAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwuc2g7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiAxPiYyOyBleGl0IDE7IH0KK2ZpCithY19jb25maWdfZ3Vlc3M9JGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzCithY19jb25maWdfc3ViPSRhY19hdXhfZGlyL2NvbmZpZy5zdWIKK2FjX2NvbmZpZ3VyZT0kYWNfYXV4X2Rpci9jb25maWd1cmUgIyBUaGlzIHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLgorCisKK2lmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuZ3Vlc3MgfHwgdGVzdCAtZiAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MgOyB0aGVuCisJCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCitpZiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CitlbHNlIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBydW4gJGFjX2NvbmZpZ19zdWIiIDE+JjI7IGV4aXQgMTsgfQorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODA3OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKworaG9zdF9hbGlhcz0kaG9zdAorY2FzZSAiJGhvc3RfYWxpYXMiIGluCitOT05FKQorICBjYXNlICRub25vcHQgaW4KKyAgTk9ORSkKKyAgICBpZiBob3N0X2FsaWFzPWAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX2d1ZXNzYDsgdGhlbiA6CisgICAgZWxzZSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgZ3Vlc3MgaG9zdCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgMT4mMjsgZXhpdCAxOyB9CisgICAgZmkgOzsKKyAgKikgaG9zdF9hbGlhcz0kbm9ub3B0IDs7CisgIGVzYWMgOzsKK2VzYWMKKworaG9zdD1gJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19zdWIgJGhvc3RfYWxpYXNgCitob3N0X2NwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKK2VjaG8gIiRhY190IiIkaG9zdCIgMT4mNgorCisJc3lzdGVtX25hbWU9IiRob3N0X29zIgorZWxzZQorCXN5c3RlbV9uYW1lPSJgKHVuYW1lIC1zIC1yKSAyPi9kZXYvbnVsbGAiCisJaWYgdGVzdCAteiAiJHN5c3RlbV9uYW1lIiA7IHRoZW4KKwkJc3lzdGVtX25hbWU9ImAoaG9zdG5hbWUpIDI+L2Rldi9udWxsYCIKKwlmaQorZmkKK3Rlc3QgLW4gIiRzeXN0ZW1fbmFtZSIgJiYgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgU1lTVEVNX05BTUUgIiRzeXN0ZW1fbmFtZSIKK0VPRgorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3Zfc3lzdGVtX25hbWUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjZl9jdl9zeXN0ZW1fbmFtZT0iJHN5c3RlbV9uYW1lIgorZmkKKworCit0ZXN0IC16ICIkc3lzdGVtX25hbWUiICYmIHN5c3RlbV9uYW1lPSIkY2ZfY3Zfc3lzdGVtX25hbWUiCit0ZXN0IC1uICIkY2ZfY3Zfc3lzdGVtX25hbWUiICYmIGVjaG8gIiRhY190IiJDb25maWd1cmluZyBmb3IgJGNmX2N2X3N5c3RlbV9uYW1lIiAxPiY2CisKK2lmIHRlc3QgIi4kc3lzdGVtX25hbWUiICE9ICIuJGNmX2N2X3N5c3RlbV9uYW1lIiA7IHRoZW4KKwllY2hvICIkYWNfdCIiQ2FjaGVkIHN5c3RlbSBuYW1lICgkc3lzdGVtX25hbWUpIGRvZXMgbm90IGFncmVlIHdpdGggYWN0dWFsICgkY2ZfY3Zfc3lzdGVtX25hbWUpIiAxPiY2CisJeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAiUGxlYXNlIHJlbW92ZSBjb25maWcuY2FjaGUgYW5kIHRyeSBhZ2Fpbi4iIiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJHtNQUtFfSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODU1OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwke01BS0V9IiA+JjUKK3NldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdG1ha2UgPDxcRU9GCithbGw6CisJQGVjaG8gJ2FjX21ha2V0ZW1wPSIke01BS0V9IicKK0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitldmFsIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3RtYWtlIDI+L2Rldi9udWxsIHwgZ3JlcCB0ZW1wPWAKK2lmIHRlc3QgLW4gIiRhY19tYWtldGVtcCI7IHRoZW4KKyAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzCitlbHNlCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vCitmaQorcm0gLWYgY29uZnRlc3RtYWtlCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19tYWtlXycke2FjX21ha2V9X3NldGBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBTRVRfTUFLRT0KK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6ODg0OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGFjX2N2X3Byb2dfQ0M9ImdjYyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2ZpCitmaQorQ0M9IiRhY19jdl9wcm9nX0NDIgoraWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo5MTQ6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DQycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkYWNfZGlyLyRhY193b3JkIiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKwljb250aW51ZQorICAgICAgZmkKKyAgICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgoraWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgc2V0IGR1bW15ICIkYWNfZGlyLyRhY193b3JkIiAiJEAiCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSIkYWNfY3ZfcHJvZ19DQyIKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRDQyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgIGNhc2UgImB1bmFtZSAtc2AiIGluCisgICAgKndpbjMyKiB8ICpXSU4zMiopCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjbDsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo5NjU6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DQycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKyAgYWNfZHVtbXk9IiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19DQz0iY2wiCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0NDPSIkYWNfY3ZfcHJvZ19DQyIKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRDQyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisgOzsKKyAgICBlc2FjCisgIGZpCisgIHRlc3QgLXogIiRDQyIgJiYgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGNjIGZvdW5kIGluIFwkUEFUSCIgMT4mMjsgZXhpdCAxOyB9CitmaQorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjk5NzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiA+JjUKKworYWNfZXh0PWMKKyMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCithY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCitjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBFT0YKKworI2xpbmUgMTAwOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK21haW4oKXtyZXR1cm4oMCk7fQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEwMTM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBhY19jdl9wcm9nX2NjX3dvcmtzPXllcworICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJvZ3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIuCisgIGlmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9bm8KKyAgZWxzZQorICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9eWVzCisgIGZpCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9wcm9nX2NjX3dvcmtzPW5vCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorYWNfZXh0PWMKKyMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCithY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCitjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKworZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2NjX3dvcmtzIiAxPiY2CitpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX3dvcmtzID0gbm87IHRoZW4KKyAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYyOyBleGl0IDE7IH0KK2ZpCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTAzOTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiID4mNQorZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2NjX2Nyb3NzIiAxPiY2Citjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEwNDQ6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2djYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKyNpZmRlZiBfX0dOVUNfXworICB5ZXM7CisjZW5kaWYKK0VPRgoraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1FIGNvbmZ0ZXN0LmMnOyB7IChldmFsIGVjaG8gY29uZmlndXJlOjEwNTM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9OyB9IHwgZWdyZXAgeWVzID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhY19jdl9wcm9nX2djYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19nY2M9bm8KK2ZpCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfZ2NjIiAxPiY2CisKK2lmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKKworYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iCithY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKK0NGTEFHUz0KK2VjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30gYWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTA3MjogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2NjX2cnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBlY2hvICd2b2lkIGYoKXt9JyA+IGNvbmZ0ZXN0LmMKK2lmIHRlc3QgLXogImAke0NDLWNjfSAtZyAtYyBjb25mdGVzdC5jIDI+JjFgIjsgdGhlbgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIGFjX2N2X3Byb2dfY2NfZz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2NfZyIgMT4mNgoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjExMDQ6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NQUCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgICAgIyBUaGlzIG11c3QgYmUgaW4gZG91YmxlIHF1b3Rlcywgbm90IHNpbmdsZSBxdW90ZXMsIGJlY2F1c2UgQ1BQIG1heSBnZXQKKyAgIyBzdWJzdGl0dXRlZCBpbnRvIHRoZSBNYWtlZmlsZSBhbmQgIiR7Q0MtY2N9IiB3aWxsIGNvbmZ1c2UgbWFrZS4KKyAgQ1BQPSIke0NDLWNjfSAtRSIKKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTExOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitTeW50YXggRXJyb3IKK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTEyNTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIENQUD0iJHtDQy1jY30gLUUgLXRyYWRpdGlvbmFsLWNwcCIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTEzNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitTeW50YXggRXJyb3IKK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTE0MjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIENQUD0iJHtDQy1jY30gLW5vbG9nbyAtRSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTE1MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CitTeW50YXggRXJyb3IKK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MTE1OTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIENQUD0vbGliL2NwcAorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICBhY19jdl9wcm9nX0NQUD0iJENQUCIKK2ZpCisgIENQUD0iJGFjX2N2X3Byb2dfQ1BQIgorZWxzZQorICBhY19jdl9wcm9nX0NQUD0iJENQUCIKK2ZpCitlY2hvICIkYWNfdCIiJENQUCIgMT4mNgorCitmb3IgYWNfcHJvZyBpbiBtYXdrIGdhd2sgbmF3ayBhd2sKK2RvCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMTg4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQVdLJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICBhY19kdW1teT0iJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitmaQorZmkKK0FXSz0iJGFjX2N2X3Byb2dfQVdLIgoraWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRBV0siIDE+JjYKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCit0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCisKK0NDX0dfT1BUPSItZyIJCQkJCQorQ0NfU0hBUkVEX09QVFM9dW5rbm93bgkJCQorQ1BQRkxBR1M9IiRDUFBGTEFHUyIJCQkKK0RGVF9ERVBfU1VGRklYPSIiCQkJCQorREZUX09CSl9TVUJESVI9YHB3ZHxzZWQgLWUnczouKi86OidgCQorREZUX1VQUl9NT0RFTD0iTk9STUFMIgkJCQorTEQ9ImxkIgkJCQkJCQkKK0xERkxBR1NfU0hBUkVEPSIiCQkJCQorTERGTEFHU19TVEFUSUM9IiIJCQkJCitMRF9NT0RFTD0iIgkJCQkJCQorTERfU0hBUkVEX09QVFM9IiIJCQkJCitMSUJUT09MPSIiCQkJCQkJCitMSUJfQ0xFQU49IiIJCQkJCQorTElCX0NPTVBJTEU9IiIJCQkJCQorTElCX0xJTks9JyR7Q0N9JwkJCQkKK0xJTktfVEVTVFM9IiIJCQkJCQorTElOVD1saW50CQkJCQkJCitMSU5UX09QVFM9IiIJCQkJCQorTE9DQUxfTERGTEFHUz0iIgkJCQkKK01BVEhfTElCPSItbG0iCQkJCQkKK1BUSFJFQUQ9Ii1sbSIJCQkJCQorVEVTVF9BUkdTPSIiCQkJCQkKK1RFU1RfREVQUz0iIgkJCQkJCitURVNUX0xJQlM9IiIJCQkJCQorVElORk9fQVJHUz0nJChMSUJTX0NVUlNFUyknCQkKK2NmX2N2X2FiaV92ZXJzaW9uPSIiCQkJCitjZl9jdl9yZWxfdmVyc2lvbj0iIgkJCQorCitjZl9jdl9zY3JlZW49Y3Vyc2VzCitjZl9jdl9saWJ0eXBlPQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgQ3lnd2luIGVudmlyb25tZW50IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMjUwOiBjaGVja2luZyBmb3IgQ3lnd2luIGVudmlyb25tZW50IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jeWd3aW4nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxMjU1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKyNpZm5kZWYgX19DWUdXSU5fXworI2RlZmluZSBfX0NZR1dJTl9fIF9fQ1lHV0lOMzJfXworI2VuZGlmCityZXR1cm4gX19DWUdXSU5fXzsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjY2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfY3lnd2luPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9jeWd3aW49bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9jeWd3aW4iIDE+JjYKK0NZR1dJTj0KK3Rlc3QgIiRhY19jdl9jeWd3aW4iID0geWVzICYmIENZR1dJTj15ZXMKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBtaW5ndzMyIGVudmlyb25tZW50IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMjgzOiBjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbWluZ3czMicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDEyODggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKK3JldHVybiBfX01JTkdXMzJfXzsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjk1OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfbWluZ3czMj15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfbWluZ3czMj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0Kgorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X21pbmd3MzIiIDE+JjYKK01JTkdXMzI9Cit0ZXN0ICIkYWNfY3ZfbWluZ3czMiIgPSB5ZXMgJiYgTUlOR1czMj15ZXMKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgZXhlY3V0YWJsZSBzdWZmaXgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEzMTQ6IGNoZWNraW5nIGZvciBleGVjdXRhYmxlIHN1ZmZpeCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZXhlZXh0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJENZR1dJTiIgPSB5ZXMgfHwgdGVzdCAiJE1JTkdXMzIiID0geWVzOyB0aGVuCisgIGFjX2N2X2V4ZWV4dD0uZXhlCitlbHNlCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY3ZfZXhlZXh0PQorICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzMjQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH07IHRoZW4KKyAgICBmb3IgZmlsZSBpbiBjb25mdGVzdC4qOyBkbworICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5jIHwgKi5vIHwgKi5vYmopIDs7CisgICAgICAqKSBhY19jdl9leGVleHQ9YGVjaG8gJGZpbGUgfCBzZWQgLWUgcy9jb25mdGVzdC8vYCA7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgZWxzZQorICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcHJvYmxlbTogY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQorICBmaQorICBybSAtZiBjb25mdGVzdCoKKyAgdGVzdCB4IiR7YWNfY3ZfZXhlZXh0fSIgPSB4ICYmIGFjX2N2X2V4ZWV4dD1ubworZmkKK2ZpCisKK0VYRUVYVD0iIgordGVzdCB4IiR7YWNfY3ZfZXhlZXh0fSIgIT0geG5vICYmIEVYRUVYVD0ke2FjX2N2X2V4ZWV4dH0KK2VjaG8gIiRhY190IiIke2FjX2N2X2V4ZWV4dH0iIDE+JjYKK2FjX2V4ZWV4dD0kRVhFRVhUCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBvYmplY3Qgc3VmZml4IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToxMzQ1OiBjaGVja2luZyBmb3Igb2JqZWN0IHN1ZmZpeCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfb2JqZXh0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgcm0gLWYgY29uZnRlc3QqCitlY2hvICdpbnQgaSA9IDE7JyA+IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTM1MTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC4qOyBkbworICAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLmMpIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBlY2hvICRhY19maWxlIHwgc2VkIC1lIHMvY29uZnRlc3QuLy9gIDs7CisgICAgZXNhYworICBkb25lCitlbHNlCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcHJvYmxlbTsgY29tcGlsZXIgZG9lcyBub3Qgd29yayIgMT4mMjsgZXhpdCAxOyB9CitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X29iamV4dCIgMT4mNgorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kYWNfY3Zfb2JqZXh0CisKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJHtDQy1jY30gb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjEzNzE6IGNoZWNraW5nIGZvciAke0NDLWNjfSBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfYW5zaV9jYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2ZfY3ZfYW5zaV9jYz1ubworY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitjZl9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisjIERvbid0IHRyeSBnY2MgLWFuc2k7IHRoYXQgdHVybnMgb2ZmIHVzZWZ1bCBleHRlbnNpb25zIGFuZAorIyBicmVha3Mgc29tZSBzeXN0ZW1zJyBoZWFkZXIgZmlsZXMuCisjIEFJWAkJCS1xbGFuZ2x2bD1hbnNpCisjIFVsdHJpeCBhbmQgT1NGLzEJLXN0ZDEKKyMgSFAtVVgJCQktQWEgLURfSFBVWF9TT1VSQ0UKKyMgU1ZSNAkJCS1YYworIyBVbml4V2FyZSAxLjIJCShjYW5ub3QgdXNlIC1YYywgc2luY2UgQU5TSS9QT1NJWCBjbGFzaGVzKQorZm9yIGNmX2FyZyBpbiAiLURDQ19IQVNfUFJPVE9TIiBcCisJIiIgXAorCS1xbGFuZ2x2bD1hbnNpIFwKKwktc3RkMSBcCisJLUFlIFwKKwkiLUFhIC1EX0hQVVhfU09VUkNFIiBcCisJLVhjCitkbworCQorY2ZfZml4X2NwcGZsYWdzPW5vCitjZl9uZXdfY2ZsYWdzPQorY2ZfbmV3X2NwcGZsYWdzPQorY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPQorCitmb3IgY2ZfYWRkX2NmbGFncyBpbiAkY2ZfYXJnCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCQorCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCQorCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCQorCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKKworCisKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxNDY3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmbmRlZiBDQ19IQVNfUFJPVE9TCisjaWYgIWRlZmluZWQoX19TVERDX18pIHx8IChfX1NURENfXyAhPSAxKQorY2hva2UgbWUKKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluKCkgeworCisJaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CisJc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CisJc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQ4MzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X2Fuc2lfY2M9IiRjZl9hcmciOyBicmVhaworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdCoKK2RvbmUKK0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X2Fuc2lfY2MiIDE+JjYKKworaWYgdGVzdCAiJGNmX2N2X2Fuc2lfY2MiICE9ICJubyI7IHRoZW4KK2lmIHRlc3QgIi4kY2ZfY3ZfYW5zaV9jYyIgIT0gIi4tRENDX0hBU19QUk9UT1MiOyB0aGVuCisJCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRjZl9jdl9hbnNpX2NjCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCQorCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCQorCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCQorCUVYVFJBX0NQUEZMQUdTPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRFWFRSQV9DUFBGTEFHUyIKK2ZpCisKKworCisKK2Vsc2UKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgQ0NfSEFTX1BST1RPUyAxCitFT0YKKworZmkKK2ZpCisKKworaWYgdGVzdCAiJGNmX2N2X2Fuc2lfY2MiID0gIm5vIjsgdGhlbgorCXsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogWW91ciBjb21waWxlciBkb2VzIG5vdCBhcHBlYXIgdG8gcmVjb2duaXplIHByb3RvdHlwZXMuCitZb3UgaGF2ZSB0aGUgZm9sbG93aW5nIGNob2ljZXM6CisJYS4gYWRqdXN0IHlvdXIgY29tcGlsZXIgb3B0aW9ucworCWIuIGdldCBhbiB1cC10by1kYXRlIGNvbXBpbGVyCisJYy4gdXNlIGEgd3JhcHBlciBzdWNoIGFzIHVucHJvdG8iIDE+JjI7IGV4aXQgMTsgfQorZmkKKworCitpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorY2F0ID4gY29uZnRlc3QuaSA8PEVPRgorI2lmbmRlZiBHQ0NfUFJJTlRGCisjZGVmaW5lIEdDQ19QUklOVEYgMAorI2VuZGlmCisjaWZuZGVmIEdDQ19TQ0FORgorI2RlZmluZSBHQ0NfU0NBTkYgMAorI2VuZGlmCisjaWZuZGVmIEdDQ19OT1JFVFVSTgorI2RlZmluZSBHQ0NfTk9SRVRVUk4gLyogbm90aGluZyAqLworI2VuZGlmCisjaWZuZGVmIEdDQ19VTlVTRUQKKyNkZWZpbmUgR0NDX1VOVVNFRCAvKiBub3RoaW5nICovCisjZW5kaWYKK0VPRgoraWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KKwllY2hvICJjaGVja2luZyBmb3IgJENDIF9fYXR0cmlidXRlX18gZGlyZWN0aXZlcyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE2MTA6IGNoZWNraW5nIGZvciAkQ0MgX19hdHRyaWJ1dGVfXyBkaXJlY3RpdmVzIiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDE2MTIgIiR7YXNfbWUtY29uZmlndXJlfSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgImNvbmZ0ZXN0LmgiCisjaW5jbHVkZSAiY29uZnRlc3QuaSIKKyNpZglHQ0NfUFJJTlRGCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGZtdCx2YXIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1BSSU5URkxJS0UoZm10LHZhcikgLypub3RoaW5nKi8KKyNlbmRpZgorI2lmCUdDQ19TQ0FORgorI2RlZmluZSBHQ0NfU0NBTkZMSUtFKGZtdCx2YXIpICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoc2NhbmYsZm10LHZhcikpKQorI2Vsc2UKKyNkZWZpbmUgR0NDX1NDQU5GTElLRShmbXQsdmFyKSAgLypub3RoaW5nKi8KKyNlbmRpZgorZXh0ZXJuIHZvaWQgd293KGNoYXIgKiwuLi4pIEdDQ19TQ0FORkxJS0UoMSwyKTsKK2V4dGVybiB2b2lkIG9vcHMoY2hhciAqLC4uLikgR0NDX1BSSU5URkxJS0UoMSwyKSBHQ0NfTk9SRVRVUk47CitleHRlcm4gdm9pZCBmb28odm9pZCkgR0NDX05PUkVUVVJOOworaW50IG1haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdIEdDQ19VTlVTRUQpIHsgcmV0dXJuIDA7IH0KK0VPRgorCWZvciBjZl9hdHRyaWJ1dGUgaW4gc2NhbmYgcHJpbnRmIHVudXNlZCBub3JldHVybgorCWRvCisJCQorY2ZfQVRUUklCVVRFPWBlY2hvICIkY2ZfYXR0cmlidXRlIiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworCQljZl9kaXJlY3RpdmU9Il9fYXR0cmlidXRlX18oKCRjZl9hdHRyaWJ1dGUpKSIKKwkJZWNobyAiY2hlY2tpbmcgZm9yICRDQyAkY2ZfZGlyZWN0aXZlIiAxPiY1CisJCWNhc2UgJGNmX2F0dHJpYnV0ZSBpbgorCQlzY2FuZnxwcmludGYpCisJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAxCitFT0YKKwkJCTs7CisJCSopCisJCWNhdCA+Y29uZnRlc3QuaCA8PEVPRgorI2RlZmluZSBHQ0NfJGNmX0FUVFJJQlVURSAkY2ZfZGlyZWN0aXZlCitFT0YKKwkJCTs7CisJCWVzYWMKKwkJaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxNjUwOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiJGFjX3QiIi4uLiAkY2ZfYXR0cmlidXRlIiAxPiY2CisJCQljYXQgY29uZnRlc3QuaCA+PmNvbmZkZWZzLmgKKwkJZmkKKwlkb25lCitlbHNlCisJZmdyZXAgZGVmaW5lIGNvbmZ0ZXN0LmkgPj5jb25mZGVmcy5oCitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyBpZiAkQ0MgLVUgYW5kIC1EIG9wdGlvbnMgd29yayB0b2dldGhlciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTY2MzogY2hlY2tpbmcgaWYgJENDIC1VIGFuZCAtRCBvcHRpb25zIHdvcmsgdG9nZXRoZXIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X2NjX3VfZF9vcHRpb25zJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCUNQUEZMQUdTPSItVVVfRF9PUFRJT05TIC1EVV9EX09QVElPTlMgLUREX1VfT1BUSU9OUyAtVURfVV9PUFRJT05TIgorCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDE2NzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsKKworI2lmbmRlZiBVX0RfT1BUSU9OUworbWFrZSBhbiB1bmRlZmluZWQtZXJyb3IKKyNlbmRpZgorI2lmZGVmICBEX1VfT1BUSU9OUworbWFrZSBhIGRlZmluZWQtZXJyb3IKKyNlbmRpZgorCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2ODU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAKKwljZl9jdl9jY191X2Rfb3B0aW9ucz15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgCisJY2ZfY3ZfY2NfdV9kX29wdGlvbnM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKwlDUFBGTEFHUz0iJGNmX3NhdmVfQ1BQRkxBR1MiCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfY2NfdV9kX29wdGlvbnMiIDE+JjYKKworCisKKworCitjZl9YT1BFTl9TT1VSQ0U9NTAwCitjZl9QT1NJWF9DX1NPVVJDRT0xOTk1MDZMCisKK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorYWl4WzQ1XSopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX0FMTF9TT1VSQ0UiCisJOzsKK2ZyZWVic2QqKSAjKHZpCisJIyA1LnggaGVhZGVycyBhc3NvY2lhdGUKKwkjCV9YT1BFTl9TT1VSQ0U9NjAwIHdpdGggX1BPU0lYX0NfU09VUkNFPTIwMDExMkwKKwkjCV9YT1BFTl9TT1VSQ0U9NTAwIHdpdGggX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwKKwljZl9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMCisJY2ZfWE9QRU5fU09VUkNFPTYwMAorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfQlNEX1RZUEVTIC1EX19CU0RfVklTSUJMRSAtRF9QT1NJWF9DX1NPVVJDRT0kY2ZfUE9TSVhfQ19TT1VSQ0UgLURfWE9QRU5fU09VUkNFPSRjZl9YT1BFTl9TT1VSQ0UiCisJOzsKK2hwdXgqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9IUFVYX1NPVVJDRSIKKwk7OworaXJpeFs1Nl0uKikgIyh2aQorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLURfU0dJX1NPVVJDRSIKKwk7OworbGludXgqfGdudSp8aypic2QqLWdudSkgIyh2aQorCQorZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgd2UgbXVzdCBkZWZpbmUgX0dOVV9TT1VSQ0UiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE3MzE6IGNoZWNraW5nIGlmIHdlIG11c3QgZGVmaW5lIF9HTlVfU09VUkNFIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9nbnVfc291cmNlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxNzM3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludCBtYWluKCkgeworCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE3NDc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9nbnVfc291cmNlPW5vCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3NhdmU9IiRDUFBGTEFHUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9HTlVfU09VUkNFIgorCSBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxNzU3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludCBtYWluKCkgeworCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTc2NzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X2dudV9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfZ251X3NvdXJjZT15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKwlDUFBGTEFHUz0iJGNmX3NhdmUiCisJCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfZ251X3NvdXJjZSIgMT4mNgordGVzdCAiJGNmX2N2X2dudV9zb3VyY2UiID0geWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfR05VX1NPVVJDRSIKKworCTs7CittaXJic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0Ugb3IgX1BPU0lYX1NPVVJDRSBicmVha3MgPGFycGEvaW5ldC5oPgorCTs7CituZXRic2QqKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIElQdjYgZm9yIGx5bnggb24gTmV0QlNEIDEuNiwgYnJlYWtzIHh0ZXJtLCBpcyBub3QgbmVlZGVkIGZvciBuY3Vyc2VzdworCTs7CitvcGVuYnNkKikgIyh2aQorCSMgc2V0dGluZyBfWE9QRU5fU09VUkNFIGJyZWFrcyB4dGVybSBvbiBPcGVuQlNEIDIuOCwgaXMgbm90IG5lZWRlZCBmb3IgbmN1cnNlc3cKKwk7Oworb3NmWzQ1XSopICModmkKKwlDUFBGTEFHUz0iJENQUEZMQUdTIC1EX09TRl9TT1VSQ0UiCisJOzsKK250by1xbngqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9RTlhfU09VUkNFIgorCTs7CitzY28qKSAjKHZpCisJIyBzZXR0aW5nIF9YT1BFTl9TT1VSQ0UgYnJlYWtzIEx5bnggb24gU0NPIFVuaXggLyBPcGVuU2VydmVyCisJOzsKK3NvbGFyaXMqKSAjKHZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9fRVhURU5TSU9OU19fIgorCTs7CisqKQorCWVjaG8gJGFjX24gImNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1hPUEVOX1NPVVJDRSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MTgxMTogY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfWE9QRU5fU09VUkNFIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl94b3Blbl9zb3VyY2UnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxODE3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludCBtYWluKCkgeworCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE4Mjc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl94b3Blbl9zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2Zfc2F2ZT0iJENQUEZMQUdTIgorCSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRT0kY2ZfWE9QRU5fU09VUkNFIgorCSBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxODM3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludCBtYWluKCkgeworCisjaWZkZWYgX1hPUEVOX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTg0NzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3hvcGVuX3NvdXJjZT1ubworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl94b3Blbl9zb3VyY2U9JGNmX1hPUEVOX1NPVVJDRQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCUNQUEZMQUdTPSIkY2Zfc2F2ZSIKKwkKK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl94b3Blbl9zb3VyY2UiIDE+JjYKKwlpZiB0ZXN0ICIkY2ZfY3ZfeG9wZW5fc291cmNlIiAhPSBubyA7IHRoZW4KKwkJCisjIHJlbW92ZSBfWE9QRU5fU09VUkNFIHN5bWJvbCBmcm9tICRDRkxBR1MKK0NGTEFHUz1gZWNobyAiJENGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdX1hPUEVOX1NPVVJDRVwoPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXV9YT1BFTl9TT1VSQ0VcKD1bXiAJXSpcKVw/JC8vZydgCisKKwkJCisjIHJlbW92ZSBfWE9QRU5fU09VUkNFIHN5bWJvbCBmcm9tICRDUFBGTEFHUworQ1BQRkxBR1M9YGVjaG8gIiRDUFBGTEFHUyIgfCBcCisJc2VkCS1lICdzLy1bVURdX1hPUEVOX1NPVVJDRVwoPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXV9YT1BFTl9TT1VSQ0VcKD1bXiAJXSpcKVw/JC8vZydgCisKKwkJdGVzdCAiJGNmX2N2X2NjX3VfZF9vcHRpb25zIiA9IHllcyAmJiBcCisJCQlDUFBGTEFHUz0iJENQUEZMQUdTIC1VX1hPUEVOX1NPVVJDRSIKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9YT1BFTl9TT1VSQ0U9JGNmX2N2X3hvcGVuX3NvdXJjZSIKKwlmaQorCQorY2ZfUE9TSVhfQ19TT1VSQ0U9JGNmX1BPU0lYX0NfU09VUkNFCisKK2NmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorY2Zfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisKKyMgcmVtb3ZlIF9QT1NJWF9DX1NPVVJDRSBzeW1ib2wgZnJvbSAkY2Zfc2F2ZV9DRkxBR1MKK2NmX3RyaW1fQ0ZMQUdTPWBlY2hvICIkY2Zfc2F2ZV9DRkxBR1MiIHwgXAorCXNlZAktZSAncy8tW1VEXV9QT1NJWF9DX1NPVVJDRVwoPVteIAldKlwpXD9bIAldLyAvZycgXAorCQktZSAncy8tW1VEXV9QT1NJWF9DX1NPVVJDRVwoPVteIAldKlwpXD8kLy9nJ2AKKworCisjIHJlbW92ZSBfUE9TSVhfQ19TT1VSQ0Ugc3ltYm9sIGZyb20gJGNmX3NhdmVfQ1BQRkxBR1MKK2NmX3RyaW1fQ1BQRkxBR1M9YGVjaG8gIiRjZl9zYXZlX0NQUEZMQUdTIiB8IFwKKwlzZWQJLWUgJ3MvLVtVRF1fUE9TSVhfQ19TT1VSQ0VcKD1bXiAJXSpcKVw/WyAJXS8gL2cnIFwKKwkJLWUgJ3MvLVtVRF1fUE9TSVhfQ19TT1VSQ0VcKD1bXiAJXSpcKVw/JC8vZydgCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGRlZmluZSBfUE9TSVhfQ19TT1VSQ0UiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjE5MDI6IGNoZWNraW5nIGlmIHdlIHNob3VsZCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9wb3NpeF9jX3NvdXJjZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCQorZWNobyAiJHthc19tZS1jb25maWd1cmV9OjE5MDg6IHRlc3RpbmcgaWYgdGhlIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgZ28gbm8gZnVydGhlciAuLi4iIDE+JjUKKworCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDE5MTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoraW50IG1haW4oKSB7CisKKyNpZm5kZWYgX1BPU0lYX0NfU09VUkNFCittYWtlIGFuIGVycm9yCisjZW5kaWYKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxOTIxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfcG9zaXhfY19zb3VyY2U9bm8KK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2Zfd2FudF9wb3NpeF9zb3VyY2U9bm8KKwkgY2FzZSAuJGNmX1BPU0lYX0NfU09VUkNFIGluICModmkKKwkgLlsxMl0/PyopICModmkKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9Ii1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSIKKwkJOzsKKwkgLjIpICModmkKKwkJY2ZfY3ZfcG9zaXhfY19zb3VyY2U9Ii1EX1BPU0lYX0NfU09VUkNFPSRjZl9QT1NJWF9DX1NPVVJDRSIKKwkJY2Zfd2FudF9wb3NpeF9zb3VyY2U9eWVzCisJCTs7CisJIC4qKQorCQljZl93YW50X3Bvc2l4X3NvdXJjZT15ZXMKKwkJOzsKKwkgZXNhYworCSBpZiB0ZXN0ICIkY2Zfd2FudF9wb3NpeF9zb3VyY2UiID0geWVzIDsgdGhlbgorCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAxOTQzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludCBtYWluKCkgeworCisjaWZkZWYgX1BPU0lYX1NPVVJDRQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTk1MzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3Bvc2l4X2Nfc291cmNlPSIkY2ZfY3ZfcG9zaXhfY19zb3VyY2UgLURfUE9TSVhfU09VUkNFIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCSBmaQorCSAKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxOTY0OiB0ZXN0aW5nIGlmZGVmIGZyb20gdmFsdWUgJGNmX1BPU0lYX0NfU09VUkNFIC4uLiIgMT4mNQorCisJIENGTEFHUz0iJGNmX3RyaW1fQ0ZMQUdTIgorCSBDUFBGTEFHUz0iJGNmX3RyaW1fQ1BQRkxBR1MgJGNmX2N2X3Bvc2l4X2Nfc291cmNlIgorCSAKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToxOTY5OiB0ZXN0aW5nIGlmIHRoZSBzZWNvbmQgY29tcGlsZSBkb2VzIG5vdCBsZWF2ZSBvdXIgZGVmaW5pdGlvbiBpbnRhY3QgZXJyb3IgLi4uIiAxPiY1CisKKwkgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTk3MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitpbnQgbWFpbigpIHsKKworI2lmbmRlZiBfUE9TSVhfQ19TT1VSQ0UKK21ha2UgYW4gZXJyb3IKKyNlbmRpZgorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE5ODI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9wb3NpeF9jX3NvdXJjZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCSBDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkgQ1BQRkxBR1M9IiRjZl9zYXZlX0NQUEZMQUdTIgorCQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3Bvc2l4X2Nfc291cmNlIiAxPiY2CisKK2lmIHRlc3QgIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgIT0gbm8gOyB0aGVuCisJQ0ZMQUdTPSIkY2ZfdHJpbV9DRkxBR1MiCisJQ1BQRkxBR1M9IiRjZl90cmltX0NQUEZMQUdTIgorCWlmIHRlc3QgIiRjZl9jdl9jY191X2Rfb3B0aW9ucyIgPSB5ZXMgOyB0aGVuCisJCWNmX3RlbXBfcG9zaXhfY19zb3VyY2U9YGVjaG8gIiRjZl9jdl9wb3NpeF9jX3NvdXJjZSIgfCBcCisJCQkJc2VkIC1lICdzLy1ELy1VL2cnIC1lICdzLz1bXiAJXSovL2cnYAorCQlDUFBGTEFHUz0iJENQUEZMQUdTICRjZl90ZW1wX3Bvc2l4X2Nfc291cmNlIgorCWZpCisJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkY2ZfY3ZfcG9zaXhfY19zb3VyY2UiCitmaQorCisKKwk7OworZXNhYworCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igd29ya2luZyBjb25zdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjAxNzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgY29uc3QiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2NfY29uc3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyMDIyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKy8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCit0eXBlZGVmIGludCBjaGFyc2V0WzJdOyBjb25zdCBjaGFyc2V0IHg7CisvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworY2hhciBjb25zdCAqY29uc3QgKmNjcDsKK2NoYXIgKipwOworLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KK3N0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsKK3N0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9tIGFub3RoZXIgaW4gYW4gYXJtCisgICBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQgZXhwcmVzc2lvbiAqLworY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworY2NwID0gJmcgKyAoZyA/IGctZyA6IDApOworLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKysrY2NwOworcCA9IChjaGFyKiopIGNjcDsKK2NjcCA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwOworeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgY2hhciAqdDsKKyAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsKKworICAqdCsrID0gMDsKK30KK3sgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgIGludCB4W10gPSB7MjUsIDE3fTsKKyAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgKytmb287Cit9Cit7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgIGlwdHIgcCA9IDA7CisgICsrcDsKK30KK3sgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKK30KK3sgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgIGNvbnN0IGludCBmb28gPSAxMDsKK30KKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIwNzE6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9jX2NvbnN0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9jX2NvbnN0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X2NfY29uc3QiIDE+JjYKK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgY29uc3QgCitFT0YKKworZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2lnbmFsIGdsb2JhbCBkYXRhdHlwZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjA5MzogY2hlY2tpbmcgZm9yIHNpZ25hbCBnbG9iYWwgZGF0YXR5cGUiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X3NpZ19hdG9taWNfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCWZvciBjZl90eXBlIGluIFwKKwkJInZvbGF0aWxlIHNpZ19hdG9taWNfdCIgXAorCQkic2lnX2F0b21pY190IiBcCisJCSJpbnQiCisJZG8KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyMTA0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2V4dGVybiAkY2ZfdHlwZSB4OworJGNmX3R5cGUgeDsKK3N0YXRpYyB2b2lkIGhhbmRsZXIoaW50IHNpZykKK3sKKwl4ID0gNTsKK30KK2ludCBtYWluKCkgeworc2lnbmFsKFNJR0lOVCwgaGFuZGxlcik7CisJCSB4ID0gMQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIxMjI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9zaWdfYXRvbWljX3Q9JGNmX3R5cGUKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3Zfc2lnX2F0b21pY190PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisJCXRlc3QgIiRjZl9jdl9zaWdfYXRvbWljX3QiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCQorZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9zaWdfYXRvbWljX3QiIDE+JjYKK3Rlc3QgIiRjZl9jdl9zaWdfYXRvbWljX3QiICE9IG5vICYmIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFNJR19BVE9NSUNfVCAkY2ZfY3Zfc2lnX2F0b21pY190CitFT0YKKworCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gc2VlIGxvbmcgY29tcGlsaW5nIG1lc3NhZ2VzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMTQ2OiBjaGVja2luZyBpZiB5b3Ugd2FudCB0byBzZWUgbG9uZyBjb21waWxpbmcgbWVzc2FnZXMiID4mNQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZWNobyBvciAtLWRpc2FibGUtZWNobyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lY2hvK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9lY2hvIgorICB0ZXN0ICIkZW5hYmxldmFsIiAhPSBubyAmJiBlbmFibGV2YWw9eWVzCisgIGlmIHRlc3QgIiRlbmFibGV2YWwiICE9ICJ5ZXMiIDsgdGhlbgorICAgIAorICAgIEVDSE9fTFQ9Jy0tc2lsZW50JworICAgIEVDSE9fTEQ9J0BlY2hvIGxpbmtpbmcgJEA7JworICAgIFJVTEVfQ0M9JwlAZWNobyBjb21waWxpbmcgJDwnCisgICAgU0hPV19DQz0nCUBlY2hvIGNvbXBpbGluZyAkQCcKKyAgICBFQ0hPX0NDPSdAJworIAorICBlbHNlCisgICAgCisgICAgRUNIT19MVD0nJworICAgIEVDSE9fTEQ9JycKKyAgICBSVUxFX0NDPScjIGNvbXBpbGluZycKKyAgICBTSE9XX0NDPScjIGNvbXBpbGluZycKKyAgICBFQ0hPX0NDPScnCisKKyAgZmkKK2Vsc2UKKyAgZW5hYmxldmFsPXllcyAKKyAgCisgICAgRUNIT19MVD0nJworICAgIEVDSE9fTEQ9JycKKyAgICBSVUxFX0NDPScjIGNvbXBpbGluZycKKyAgICBTSE9XX0NDPScjIGNvbXBpbGluZycKKyAgICBFQ0hPX0NDPScnCisKKyAgCitmaQorCitlY2hvICIkYWNfdCIiJGVuYWJsZXZhbCIgMT4mNgorCisKKworCisKKworCisKK0dDQ19WRVJTSU9OPW5vbmUKK2lmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorCWVjaG8gJGFjX24gImNoZWNraW5nIHZlcnNpb24gb2YgJENDIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMTkzOiBjaGVja2luZyB2ZXJzaW9uIG9mICRDQyIgPiY1CisJR0NDX1ZFUlNJT049ImAke0NDfSAtLXZlcnNpb258IHNlZCAtZSAnMiwkZCcgLWUgJ3MvXi4qKEdDQykgLy8nIC1lICdzL15bXjAtOS5dKi8vJyAtZSAncy9bXjAtOS5dLiovLydgIgorCXRlc3QgLXogIiRHQ0NfVkVSU0lPTiIgJiYgR0NDX1ZFUlNJT049dW5rbm93bgorCWVjaG8gIiRhY190IiIkR0NDX1ZFUlNJT04iIDE+JjYKK2ZpCisKKworaWYgKCB0ZXN0ICIkR0NDIiA9IHllcyB8fCB0ZXN0ICIkR1hYIiA9IHllcyApCit0aGVuCitlY2hvICRhY19uICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byB0dXJuIG9uIGdjYyB3YXJuaW5ncyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjIwMzogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gdHVybiBvbiBnY2Mgd2FybmluZ3MiID4mNQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2FybmluZ3Mgb3IgLS1kaXNhYmxlLXdhcm5pbmdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3dhcm5pbmdzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV93YXJuaW5ncyIKKyAgdGVzdCAiJGVuYWJsZXZhbCIgIT0geWVzICYmIGVuYWJsZXZhbD1ubworICBpZiB0ZXN0ICIkZW5hYmxldmFsIiAhPSAibm8iIDsgdGhlbgorICAgIHdpdGhfd2FybmluZ3M9eWVzIAorICBlbHNlCisgICAgd2l0aF93YXJuaW5ncz1ubworICBmaQorZWxzZQorICBlbmFibGV2YWw9bm8gCisgIHdpdGhfd2FybmluZ3M9bm8KKyAgCitmaQorCitlY2hvICIkYWNfdCIiJHdpdGhfd2FybmluZ3MiIDE+JjYKK2lmIHRlc3QgIiR3aXRoX3dhcm5pbmdzIiA9ICJ5ZXMiCit0aGVuCisJCisKKworSU5URUxfQ09NUElMRVI9bm8KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbgorCWxpbnV4KnxnbnUqKQorCQllY2hvICRhY19uICJjaGVja2luZyBpZiB0aGlzIGlzIHJlYWxseSBJbnRlbCBDIGNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMjMyOiBjaGVja2luZyBpZiB0aGlzIGlzIHJlYWxseSBJbnRlbCBDIGNvbXBpbGVyIiA+JjUKKwkJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJCUNGTEFHUz0iJENGTEFHUyAtbm8tZ2NjIgorCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyMjM2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjZWxzZQorbWFrZSBhbiBlcnJvcgorI2VuZGlmCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMjQ4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgSU5URUxfQ09NUElMRVI9eWVzCitjZl9zYXZlX0NGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIC13ZTE0NyAtbm8tZ2NjIgorCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKwkJZWNobyAiJGFjX3QiIiRJTlRFTF9DT01QSUxFUiIgMT4mNgorCQk7OworCWVzYWMKK2ZpCisKKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjI2NiAiJHthc19tZS1jb25maWd1cmV9IgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeyByZXR1cm4gKGFyZ3ZbYXJnYy0xXSA9PSAwKSA7IH0KK0VPRgorCitpZiB0ZXN0ICIkSU5URUxfQ09NUElMRVIiID0geWVzCit0aGVuCisjIFRoZSAiLXdkWFhYIiBvcHRpb25zIHN1cHByZXNzIHdhcm5pbmdzOgorIyByZW1hcmsgIzE0MTk6IGV4dGVybmFsIGRlY2xhcmF0aW9uIGluIHByaW1hcnkgc291cmNlIGZpbGUKKyMgcmVtYXJrICMxNjgyOiBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUgKHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtKQorIyByZW1hcmsgIzE2ODM6IGV4cGxpY2l0IGNvbnZlcnNpb24gb2YgYSA2NC1iaXQgaW50ZWdyYWwgdHlwZSB0byBhIHNtYWxsZXIgaW50ZWdyYWwgdHlwZSAocG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW0pCisjIHJlbWFyayAjMTY4NDogY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlIChwb3RlbnRpYWwgcG9ydGFiaWxpdHkgcHJvYmxlbSkKKyMgcmVtYXJrICMxOTM6IHplcm8gdXNlZCBmb3IgdW5kZWZpbmVkIHByZXByb2Nlc3NpbmcgaWRlbnRpZmllcgorIyByZW1hcmsgIzU5MzogdmFyaWFibGUgImN1cnNfc2JfbGVmdF9hcnJvdyIgd2FzIHNldCBidXQgbmV2ZXIgdXNlZAorIyByZW1hcmsgIzgxMDogY29udmVyc2lvbiBmcm9tICJpbnQiIHRvICJEaW1lbnNpb249e3Vuc2lnbmVkIHNob3J0fSIgbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cworIyByZW1hcmsgIzg2OTogcGFyYW1ldGVyICJ0dyIgd2FzIG5ldmVyIHJlZmVyZW5jZWQKKyMgcmVtYXJrICM5ODE6IG9wZXJhbmRzIGFyZSBldmFsdWF0ZWQgaW4gdW5zcGVjaWZpZWQgb3JkZXIKKyMgd2FybmluZyAjMjY5OiBpbnZhbGlkIGZvcm1hdCBzdHJpbmcgY29udmVyc2lvbgorCisJZWNobyAiY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyMjg1OiBjaGVja2luZyBmb3IgJENDIHdhcm5pbmcgb3B0aW9ucyIgPiY1CisJY2Zfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJRVhUUkFfQ0ZMQUdTPSItV2FsbCIKKwlmb3IgY2Zfb3B0IGluIFwKKwkJd2QxNDE5IFwKKwkJd2QxNjgyIFwKKwkJd2QxNjgzIFwKKwkJd2QxNjg0IFwKKwkJd2QxOTMgXAorCQl3ZDI3OSBcCisJCXdkNTkzIFwKKwkJd2Q4MTAgXAorCQl3ZDg2OSBcCisJCXdkOTgxCisJZG8KKwkJQ0ZMQUdTPSIkY2Zfc2F2ZV9DRkxBR1MgJEVYVFJBX0NGTEFHUyAtJGNmX29wdCIKKwkJaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMzAxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiJGFjX3QiIi4uLiAtJGNmX29wdCIgMT4mNgorCQkJRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC0kY2Zfb3B0IgorCQlmaQorCWRvbmUKKwlDRkxBR1M9IiRjZl9zYXZlX0NGTEFHUyIKKworZWxpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorCWVjaG8gImNoZWNraW5nIGZvciAkQ0Mgd2FybmluZyBvcHRpb25zIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjMxMTogY2hlY2tpbmcgZm9yICRDQyB3YXJuaW5nIG9wdGlvbnMiID4mNQorCWNmX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCUVYVFJBX0NGTEFHUz0iLVcgLVdhbGwiCisJY2Zfd2Fybl9DT05TVD0iIgorCXRlc3QgIiR3aXRoX2V4dF9jb25zdCIgPSB5ZXMgJiYgY2Zfd2Fybl9DT05TVD0iV3dyaXRlLXN0cmluZ3MiCisJZm9yIGNmX29wdCBpbiBcCisJCVdiYWQtZnVuY3Rpb24tY2FzdCBcCisJCVdjYXN0LWFsaWduIFwKKwkJV2Nhc3QtcXVhbCBcCisJCVdpbmxpbmUgXAorCQlXbWlzc2luZy1kZWNsYXJhdGlvbnMgXAorCQlXbWlzc2luZy1wcm90b3R5cGVzIFwKKwkJV25lc3RlZC1leHRlcm5zIFwKKwkJV3BvaW50ZXItYXJpdGggXAorCQlXc2hhZG93IFwKKwkJV3N0cmljdC1wcm90b3R5cGVzIFwKKwkJV3VuZGVmICRjZl93YXJuX0NPTlNUIAorCWRvCisJCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTICRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjMzMDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIiRhY190IiIuLi4gLSRjZl9vcHQiIDE+JjYKKwkJCWNhc2UgJGNmX29wdCBpbiAjKHZpCisJCQlXY2FzdC1xdWFsKSAjKHZpCisJCQkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRFhUU1RSSU5HREVGSU5FUyIKKwkJCQk7OworCQkJV2lubGluZSkgIyh2aQorCQkJCWNhc2UgJEdDQ19WRVJTSU9OIGluCisJCQkJMy4zKikKKwkJCQkJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglmZWF0dXJlIGlzIGJyb2tlbiBpbiBnY2MgJEdDQ19WRVJTSU9OIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToyMzQxOiB0ZXN0aW5nIGZlYXR1cmUgaXMgYnJva2VuIGluIGdjYyAkR0NDX1ZFUlNJT04gLi4uIiAxPiY1CisKKworCQkJCQljb250aW51ZTs7CisJCQkJZXNhYworCQkJCTs7CisJCQllc2FjCisJCQlFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLSRjZl9vcHQiCisJCWZpCisJZG9uZQorCUNGTEFHUz0iJGNmX3NhdmVfQ0ZMQUdTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKKworZmkKK2ZpCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY3Vyc2VzLWRpciBvciAtLXdpdGhvdXQtY3Vyc2VzLWRpciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY3Vyc2VzX2RpcitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9jdXJzZXNfZGlyIgorICAKK2lmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBjZl9wYXRoX3N5bnRheD0iJHByZWZpeCIKK2Vsc2UKKyAgY2ZfcGF0aF9zeW50YXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2ZpCisKK2Nhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorLlwkXCgqXCkqfC5cJypcJyopICModmkKKyAgOzsKKy4ufC4vKnwuXFwqKSAjKHZpCisgIDs7CisuW2EtekEtWl06W1xcL10qKSAjKHZpIE9TLzIgRU1YCisgIDs7CisuXCR7KnByZWZpeH0qKSAjKHZpCisgIGV2YWwgd2l0aHZhbD0iJHdpdGh2YWwiCisgIGNhc2UgIi4kd2l0aHZhbCIgaW4gIyh2aQorICAuTk9ORS8qKQorICAgIHdpdGh2YWw9YGVjaG8gJHdpdGh2YWwgfCBzZWQgLWUgcyVOT05FJSRjZl9wYXRoX3N5bnRheCVgCisgICAgOzsKKyAgZXNhYworICA7OyAjKHZpCisubm98Lk5PTkUvKikKKyAgd2l0aHZhbD1gZWNobyAkd2l0aHZhbCB8IHNlZCAtZSBzJU5PTkUlJGNmX3BhdGhfc3ludGF4JWAKKyAgOzsKKyopCisgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogZXhwZWN0ZWQgYSBwYXRobmFtZSwgbm90IFwiJHdpdGh2YWxcIiIgMT4mMjsgZXhpdCAxOyB9CisgIDs7Citlc2FjCisKKwkgY2ZfY3ZfY3Vyc2VzX2Rpcj0kd2l0aHZhbAorZWxzZQorICBjZl9jdl9jdXJzZXNfZGlyPW5vCitmaQorCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLTVsaWIgb3IgLS13aXRob3V0LTVsaWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoXzVsaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfNWxpYiIKKyAgTElCUz0iLUwvdXNyLzVsaWIgJExJQlMiCisJIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyLzVpbmNsdWRlIgorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbmN1cnNlc3cgb3IgLS13aXRob3V0LW5jdXJzZXN3IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9uY3Vyc2VzdytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9uY3Vyc2VzdyIKKyAgY2ZfY3Zfc2NyZWVuPW5jdXJzZXN3CitlbHNlCisgIAorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbmN1cnNlcyBvciAtLXdpdGhvdXQtbmN1cnNlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbmN1cnNlcytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9uY3Vyc2VzIgorICBjZl9jdl9zY3JlZW49bmN1cnNlcworZWxzZQorICAKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBkY3Vyc2VzIG9yIC0td2l0aG91dC1wZGN1cnNlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGRjdXJzZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcGRjdXJzZXMiCisgIGNmX2N2X3NjcmVlbj1wZGN1cnNlcworZmkKKworZmkKKworZmkKKworCitjYXNlICRjZl9jdl9zY3JlZW4gaW4KK2N1cnNlcykKKwkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGV4dHJhIGluY2x1ZGUgZGlyZWN0b3JpZXMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI0NDU6IGNoZWNraW5nIGZvciBleHRyYSBpbmNsdWRlIGRpcmVjdG9yaWVzIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9jdXJzZXNfaW5jZGlyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitjZl9jdl9jdXJzZXNfaW5jZGlyPW5vCitjYXNlICRob3N0X29zIGluICModmkKK2hwdXgxMC4qKSAjKHZpCisJdGVzdCAtZCAvdXNyL2luY2x1ZGUvY3Vyc2VzX2NvbHIgJiYgXAorCWNmX2N2X2N1cnNlc19pbmNkaXI9Ii1JL3Vzci9pbmNsdWRlL2N1cnNlc19jb2xyIgorCTs7CitzdW5vczMqfHN1bm9zNCopCisJdGVzdCAtZCAvdXNyLzVsaWIgJiYgXAorCXRlc3QgLWQgL3Vzci81aW5jbHVkZSAmJiBcCisJY2ZfY3ZfY3Vyc2VzX2luY2Rpcj0iLUkvdXNyLzVpbmNsdWRlIgorCTs7Citlc2FjCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfY3Vyc2VzX2luY2RpciIgMT4mNgordGVzdCAiJGNmX2N2X2N1cnNlc19pbmNkaXIiICE9IG5vICYmIENQUEZMQUdTPSIkY2ZfY3ZfY3Vyc2VzX2luY2RpciAkQ1BQRkxBR1MiCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgd2UgaGF2ZSBpZGVudGlmaWVkIGN1cnNlcyBoZWFkZXJzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNDcwOiBjaGVja2luZyBpZiB3ZSBoYXZlIGlkZW50aWZpZWQgY3Vyc2VzIGhlYWRlcnMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X25jdXJzZXNfaGVhZGVyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitjZl9jdl9uY3Vyc2VzX2hlYWRlcj1ub25lCitmb3IgY2ZfaGVhZGVyIGluIFwKKwljdXJzZXMuaCBcCisJbmN1cnNlcy5oIFwKKwluY3Vyc2VzL2N1cnNlcy5oIFwKKwluY3Vyc2VzL25jdXJzZXMuaAorZG8KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI0ODMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfaGVhZGVyfT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpOyB0Z290bygiPyIsIDAsMCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNDkwOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19oZWFkZXI9JGNmX2hlYWRlcjsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWYgY29uZnRlc3QqCitkb25lCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfbmN1cnNlc19oZWFkZXIiIDE+JjYKKworaWYgdGVzdCAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiA9IG5vbmUgOyB0aGVuCisJeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBObyBjdXJzZXMgaGVhZGVyLWZpbGVzIGZvdW5kIiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKKyMgY2hlYXQsIHRvIGdldCB0aGUgcmlnaHQgI2RlZmluZSdzIGZvciBIQVZFX05DVVJTRVNfSCwgZXRjLgorZm9yIGFjX2hkciBpbiAkY2ZfY3ZfbmN1cnNlc19oZWFkZXIKK2RvCithY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfaGRyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNTEzOiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjUxOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hkcj4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MjUyMzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfaGRyIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGVybWluZm8gaGVhZGVyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNTUyOiBjaGVja2luZyBmb3IgdGVybWluZm8gaGVhZGVyIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl90ZXJtX2hlYWRlcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2FzZSAke2NmX2N2X25jdXJzZXNfaGVhZGVyfSBpbiAjKHZpCisqL25jdXJzZXMuaHwqL25jdXJzZXN3LmgpICModmkKKwljZl90ZXJtX2hlYWRlcj1gZWNobyAiJGNmX2N2X25jdXJzZXNfaGVhZGVyIiB8IHNlZCAtZSAncyVuY3Vyc2VzW14uXSpcLmgkJXRlcm0uaCUnYAorCTs7CisqKQorCWNmX3Rlcm1faGVhZGVyPXRlcm0uaAorCTs7Citlc2FjCisKK2ZvciBjZl90ZXN0IGluICRjZl90ZXJtX2hlYWRlciAibmN1cnNlcy90ZXJtLmgiICJuY3Vyc2Vzdy90ZXJtLmgiCitkbworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjU2OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpbmNsdWRlIDwkY2ZfdGVzdD4KKworaW50IG1haW4oKSB7CitpbnQgeCA9IGF1dG9fbGVmdF9tYXJnaW4KKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNTc5OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgCisJY2ZfY3ZfdGVybV9oZWFkZXI9IiRjZl90ZXN0IgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAKKwljZl9jdl90ZXJtX2hlYWRlcj11bmtub3duCisJCitmaQorcm0gLWYgY29uZnRlc3QqCisJdGVzdCAiJGNmX2N2X3Rlcm1faGVhZGVyIiAhPSB1bmtub3duICYmIGJyZWFrCitkb25lCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfdGVybV9oZWFkZXIiIDE+JjYKKworIyBTZXQgZGVmaW5pdGlvbnMgdG8gYWxsb3cgaWZkZWYnaW5nIHRvIGFjY29tbW9kYXRlIHN1YmRpcmVjdG9yaWVzCisKK2Nhc2UgJGNmX2N2X3Rlcm1faGVhZGVyIGluICMgKHZpCisqdGVybS5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1RFUk1fSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X3Rlcm1faGVhZGVyIGluICMgKHZpCituY3Vyc2VzL3Rlcm0uaCkgIyh2aQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfVEVSTV9IIDEKK0VPRgorCisJOzsKK25jdXJzZXN3L3Rlcm0uaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTV19URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCisKKwkKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBuY3Vyc2VzIHZlcnNpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI2Mjg6IGNoZWNraW5nIGZvciBuY3Vyc2VzIHZlcnNpb24iID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X25jdXJzZXNfdmVyc2lvbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1ubworCWNmX3RlbXBmaWxlPW91dCQkCisJcm0gLWYgJGNmX3RlbXBmaWxlCisJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgCisKKwkjIFRoaXMgd2lsbCBub3Qgd29yayBpZiB0aGUgcHJlcHJvY2Vzc29yIHNwbGl0cyB0aGUgbGluZSBhZnRlciB0aGUKKwkjIEF1dG9jb25mIHRva2VuLiAgVGhlICd1bnByb3RvJyBwcm9ncmFtIGRvZXMgdGhhdC4KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjdW5kZWYgQXV0b2NvbmYKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KK0F1dG9jb25mIE5DVVJTRVNfVkVSU0lPTgorI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorQXV0b2NvbmYgIm9sZCIKKyNlbmRpZgorOworI2VuZGlmCitFT0YKKwljZl90cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCAyPiY1IHwgZ3JlcCAnXkF1dG9jb25mICcgPmNvbmZ0ZXN0Lm91dCIKKwl7IChldmFsIGVjaG8gY29uZmlndXJlOjI2NTQ6IFwiJGNmX3RyeVwiKSAxPiY1OyAoZXZhbCAkY2ZfdHJ5KSAyPiY1OyB9CisJaWYgdGVzdCAtZiBjb25mdGVzdC5vdXQgOyB0aGVuCisJCWNmX291dD1gY2F0IGNvbmZ0ZXN0Lm91dCB8IHNlZCAtZSAncyVeQXV0b2NvbmYgJSUnIC1lICdzJV5bXiJdKiIlJScgLWUgJ3MlIi4qJSUnYAorCQl0ZXN0IC1uICIkY2Zfb3V0IiAmJiBjZl9jdl9uY3Vyc2VzX3ZlcnNpb249IiRjZl9vdXQiCisJCXJtIC1mIGNvbmZ0ZXN0Lm91dAorCWZpCisKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjY2MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oIiRjZl90ZW1wZmlsZSIsICJ3Iik7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjIGlmZGVmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSAorCWZwcmludGYoZnAsICIlcy4lZFxuIiwgTkNVUlNFU19WRVJTSU9OLCBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpOworIyBlbHNlCisJZnByaW50ZihmcCwgIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworIyBlbmRpZgorI2Vsc2UKKyMgaWZkZWYgX19OQ1VSU0VTX0gKKwlmcHJpbnRmKGZwLCAib2xkXG4iKTsKKyMgZWxzZQorCW1ha2UgYW4gZXJyb3IKKyMgZW5kaWYKKyNlbmRpZgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm4tcmV0dXJufSgwKTsKK30KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjg3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIAorCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1gY2F0ICRjZl90ZW1wZmlsZWAKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworCXJtIC1mICRjZl90ZW1wZmlsZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgMT4mNgordGVzdCAiJGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgPSBubyB8fCBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFUyAxCitFT0YKKworCisJCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHdlIGhhdmUgaWRlbnRpZmllZCBjdXJzZXMgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNzExOiBjaGVja2luZyBpZiB3ZSBoYXZlIGlkZW50aWZpZWQgY3Vyc2VzIGxpYnJhcmllcyIgPiY1CitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyNzEzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpOyB0Z290bygiPyIsIDAsMCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNzIwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZWNobyAiJGFjX3QiIiRjZl9yZXN1bHQiIDE+JjYKKworaWYgdGVzdCAiJGNmX3Jlc3VsdCIgPSBubyA7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4gIyh2aQorZnJlZWJzZCopICModmkKKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGdvdG8gaW4gLWxteXRpbmZvIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyNzM2OiBjaGVja2luZyBmb3IgdGdvdG8gaW4gLWxteXRpbmZvIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gbXl0aW5mbydfJ3Rnb3RvIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbG15dGluZm8gICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMjc0NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHRnb3RvKCk7CisKK2ludCBtYWluKCkgewordGdvdG8oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3NTU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIExJQlM9Ii1sbXl0aW5mbyAkTElCUyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgOzsKK2hwdXgxMC4qKSAjKHZpCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWxjdXJfY29sciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mjc3ODogY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWxjdXJfY29sciIgPiY1CithY19saWJfdmFyPWBlY2hvIGN1cl9jb2xyJ18naW5pdHNjciB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxjdXJfY29sciAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyNzg2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgaW5pdHNjcigpOworCitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3OTc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIAorICAgICAgICBMSUJTPSItbGN1cl9jb2xyICRMSUJTIgorICAgICAgICBhY19jdl9mdW5jX2luaXRzY3I9eWVzCisgICAgICAgIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKworICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sSGN1cnNlcyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MjgyMDogY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWxIY3Vyc2VzIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gSGN1cnNlcydfJ2luaXRzY3IgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sSGN1cnNlcyAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAyODI4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgaW5pdHNjcigpOworCitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI4Mzk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIAorICAgICAgICAjIEhQJ3MgaGVhZGVyIHVzZXMgX19IUF9DVVJTRVMsIGJ1dCB1c2VyIGNsYWltcyBfSFBfQ1VSU0VTLgorICAgICAgICBMSUJTPSItbEhjdXJzZXMgJExJQlMiCisgICAgICAgIENQUEZMQUdTPSItRF9fSFBfQ1VSU0VTIC1EX0hQX0NVUlNFUyAkQ1BQRkxBR1MiCisgICAgICAgIGFjX2N2X2Z1bmNfaW5pdHNjcj15ZXMKKyAgICAgICAgCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZmkKKworICAgIDs7CitsaW51eCopICMgU3VzZSBMaW51eCBkb2VzIG5vdCBmb2xsb3cgL3Vzci9saWIgY29udmVudGlvbgorICAgIAoraWYgdGVzdCAtbiAiL2xpYiIgOyB0aGVuCisgIGZvciBjZl9hZGRfbGliZGlyIGluIC9saWIKKyAgZG8KKyAgICBpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisgICAgICA6CisgICAgZWxpZiB0ZXN0IC1kICRjZl9hZGRfbGliZGlyCisgICAgdGhlbgorICAgICAgY2ZfaGF2ZV9saWJkaXI9bm8KKyAgICAgIGlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorICAgICAgICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisgICAgICAgIGZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisgICAgICAgICAgaWYgdGVzdCAiLiRjZl90ZXN0X2xpYmRpciIgPSAiLi1MJGNmX2FkZF9saWJkaXIiIDsgdGhlbgorICAgICAgICAgICAgY2ZfaGF2ZV9saWJkaXI9eWVzOyBicmVhaworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY2ZfaGF2ZV9saWJkaXIiID0gbm8gOyB0aGVuCisgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06Mjg4ODogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIC4uLiIgMT4mNQorCisKKyAgICAgICAgTERGTEFHUz0iLUwkY2ZfYWRkX2xpYmRpciAkTERGTEFHUyIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKKworICAgIDs7CitzdW5vczMqfHN1bm9zNCopCisgICAgaWYgdGVzdCAtZCAvdXNyLzVsaWIgOyB0aGVuCisgICAgICAKK2lmIHRlc3QgLW4gIi91c3IvNWxpYiIgOyB0aGVuCisgIGZvciBjZl9hZGRfbGliZGlyIGluIC91c3IvNWxpYgorICBkbworICAgIGlmIHRlc3QgJGNmX2FkZF9saWJkaXIgPSAvdXNyL2xpYiA7IHRoZW4KKyAgICAgIDoKKyAgICBlbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKyAgICB0aGVuCisgICAgICBjZl9oYXZlX2xpYmRpcj1ubworICAgICAgaWYgdGVzdCAtbiAiJExERkxBR1MkTElCUyIgOyB0aGVuCisgICAgICAgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKyAgICAgICAgZm9yIGNmX3Rlc3RfbGliZGlyIGluICRMREZMQUdTICRMSUJTIDsgZG8KKyAgICAgICAgICBpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisgICAgICAgICAgICBjZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKyAgICAgICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfToyOTIwOiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGggLi4uIiAxPiY1CisKKworICAgICAgICBMREZMQUdTPSItTCRjZl9hZGRfbGliZGlyICRMREZMQUdTIgorICAgICAgZmkKKyAgICBmaQorICBkb25lCitmaQorCisgICAgICBMSUJTPSIkTElCUyAtbGN1cnNlcyAtbHRlcm1jYXAiCisgICAgZmkKKyAgICBhY19jdl9mdW5jX2luaXRzY3I9eWVzCisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAiLiRhY19jdl9mdW5jX2luaXRzY3IiICE9IC55ZXMgOyB0aGVuCisgICAgY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBjZl90ZXJtX2xpYj0iIgorICAgIGNmX2N1cnNfbGliPSIiCisKKyAgICBpZiB0ZXN0ICIuJHtjZl9jdl9uY3Vyc2VzX3ZlcnNpb24tbm99IiAhPSAubm8KKyAgICB0aGVuCisgICAgICAgIGNmX2NoZWNrX2xpc3Q9Im5jdXJzZXMgY3Vyc2VzIGN1cnNlc1giCisgICAgZWxzZQorICAgICAgICBjZl9jaGVja19saXN0PSJjdXJzZXNYIGN1cnNlcyBuY3Vyc2VzIgorICAgIGZpCisKKyAgICAjIENoZWNrIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgdGdvdG8uICBEbyB0aGlzIGJlZm9yZSBjdXJzZXMgbGlicmFyeQorICAgICMgYmVjYXVzZSBpdCBtYXkgYmUgbmVlZGVkIHRvIGxpbmsgdGhlIHRlc3QtY2FzZSBmb3IgaW5pdHNjci4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGdvdG8iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjI5NTA6IGNoZWNraW5nIGZvciB0Z290byIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY190Z290bycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDI5NTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgdGdvdG8oKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciB0Z290bygpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX3Rnb3RvKSB8fCBkZWZpbmVkIChfX3N0dWJfX190Z290bykKK2Nob2tlIG1lCisjZWxzZQordGdvdG8oKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjk3ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY190Z290bz15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfdGdvdG89bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXyd0Z290b2BcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBjZl90ZXJtX2xpYj1wcmVkZWZpbmVkCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCisgICAgICAgIGZvciBjZl90ZXJtX2xpYiBpbiAkY2ZfY2hlY2tfbGlzdCB0ZXJtY2FwIHRlcm1saWIgdW5rbm93bgorICAgICAgICBkbworICAgICAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sJGNmX3Rlcm1fbGliIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZToyOTk5OiBjaGVja2luZyBmb3IgdGdvdG8gaW4gLWwkY2ZfdGVybV9saWIiID4mNQorYWNfbGliX3Zhcj1gZWNobyAkY2ZfdGVybV9saWInXyd0Z290byB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWwkY2ZfdGVybV9saWIgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzAwNyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHRnb3RvKCk7CisKK2ludCBtYWluKCkgewordGdvdG8oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMwMTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgICAgICBkb25lCisgICAgCitmaQorCisKKyAgICAjIENoZWNrIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgaW5pdHNjcgorICAgIHRlc3QgIiRjZl90ZXJtX2xpYiIgIT0gcHJlZGVmaW5lZCAmJiB0ZXN0ICIkY2ZfdGVybV9saWIiICE9IHVua25vd24gJiYgTElCUz0iLWwkY2ZfdGVybV9saWIgJGNmX3NhdmVfTElCUyIKKyAgICBmb3IgY2ZfY3Vyc19saWIgaW4gJGNmX2NoZWNrX2xpc3QgeGN1cnNlcyBqY3Vyc2VzIHVua25vd24KKyAgICBkbworICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbCRjZl9jdXJzX2xpYiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzA0ODogY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWwkY2ZfY3Vyc19saWIiID4mNQorYWNfbGliX3Zhcj1gZWNobyAkY2ZfY3Vyc19saWInXydpbml0c2NyIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbCRjZl9jdXJzX2xpYiAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzMDU2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgaW5pdHNjcigpOworCitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMwNjc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGRvbmUKKyAgICB0ZXN0ICRjZl9jdXJzX2xpYiA9IHVua25vd24gJiYgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBubyBjdXJzZXMgbGlicmFyeSBmb3VuZCIgMT4mMjsgZXhpdCAxOyB9CisKKyAgICBMSUJTPSItbCRjZl9jdXJzX2xpYiAkY2Zfc2F2ZV9MSUJTIgorICAgIGlmIHRlc3QgIiRjZl90ZXJtX2xpYiIgPSB1bmtub3duIDsgdGhlbgorICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBpZiB3ZSBjYW4gbGluayB3aXRoICRjZl9jdXJzX2xpYiBsaWJyYXJ5IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMDkzOiBjaGVja2luZyBpZiB3ZSBjYW4gbGluayB3aXRoICRjZl9jdXJzX2xpYiBsaWJyYXJ5IiA+JjUKKyAgICAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzA5NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxMDI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisgICAgICAgIGVjaG8gIiRhY190IiIkY2ZfcmVzdWx0IiAxPiY2CisgICAgICAgIHRlc3QgJGNmX3Jlc3VsdCA9IG5vICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ2Fubm90IGxpbmsgY3Vyc2VzIGxpYnJhcnkiIDE+JjI7IGV4aXQgMTsgfQorICAgIGVsaWYgdGVzdCAiJGNmX2N1cnNfbGliIiA9ICIkY2ZfdGVybV9saWIiIDsgdGhlbgorICAgICAgICA6CisgICAgZWxpZiB0ZXN0ICIkY2ZfdGVybV9saWIiICE9IHByZWRlZmluZWQgOyB0aGVuCisgICAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGlmIHdlIG5lZWQgYm90aCAkY2ZfY3Vyc19saWIgYW5kICRjZl90ZXJtX2xpYiBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMxMTg6IGNoZWNraW5nIGlmIHdlIG5lZWQgYm90aCAkY2ZfY3Vyc19saWIgYW5kICRjZl90ZXJtX2xpYiBsaWJyYXJpZXMiID4mNQorICAgICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzMTIwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpOyB0Z290bygoY2hhciAqKTAsIDAsIDApOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxMjc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD1ubworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICAKKyAgICAgICAgICAgIExJQlM9Ii1sJGNmX2N1cnNfbGliIC1sJGNmX3Rlcm1fbGliICRjZl9zYXZlX0xJQlMiCisgICAgICAgICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzMTM3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzE0NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9ZXJyb3IKK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICAgICAgICAgIAorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICAgICAgICBlY2hvICIkYWNfdCIiJGNmX3Jlc3VsdCIgMT4mNgorICAgIGZpCitmaQorZmkKKworCisJOzsKK25jdXJzZXMpCisJCisKK2NmX25jdWhkcl9yb290PW5jdXJzZXMKKwordGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIiICYmIFwKK3Rlc3QgIiRjZl9jdl9jdXJzZXNfZGlyIiAhPSAibm8iICYmIHsgXAorICAKK2lmIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUgJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290CisgIGRvCisJd2hpbGUgdGVzdCAkY2ZfYWRkX2luY2RpciAhPSAvdXNyL2luY2x1ZGUKKwlkbworCSAgaWYgdGVzdCAtZCAkY2ZfYWRkX2luY2RpcgorCSAgdGhlbgorCQljZl9oYXZlX2luY2Rpcj1ubworCQlpZiB0ZXN0IC1uICIkQ0ZMQUdTJENQUEZMQUdTIiA7IHRoZW4KKwkJICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisJCSAgZm9yIGNmX3Rlc3RfaW5jZGlyIGluICRDRkxBR1MgJENQUEZMQUdTIDsgZG8KKwkJCWlmIHRlc3QgIi4kY2ZfdGVzdF9pbmNkaXIiID0gIi4tSSRjZl9hZGRfaW5jZGlyIiA7IHRoZW4KKwkJCSAgY2ZfaGF2ZV9pbmNkaXI9eWVzOyBicmVhaworCQkJZmkKKwkJICBkb25lCisJCWZpCisKKwkJaWYgdGVzdCAiJGNmX2hhdmVfaW5jZGlyIiA9IG5vIDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjZl9hZGRfaW5jZGlyIiA9IC91c3IvbG9jYWwvaW5jbHVkZSA7IHRoZW4KKwkJCWlmIHRlc3QgIiRHQ0MiID0geWVzCisJCQl0aGVuCisJCQkgIGNmX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCQkgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfYWRkX2luY2RpciIKKwkJCSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzE5NiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkgeworcHJpbnRmKCJIZWxsbyIpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzIwMzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2hhdmVfaW5jZGlyPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQkJICBDUFBGTEFHUz0kY2Zfc2F2ZV9DUFBGTEFHUworCQkJZmkKKwkJICBmaQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKwkJICB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGgiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjMyMjA6IHRlc3RpbmcgYWRkaW5nICRjZl9hZGRfaW5jZGlyIHRvIGluY2x1ZGUtcGF0aCAuLi4iIDE+JjUKKworCisJCSAgQ1BQRkxBR1M9Ii1JJGNmX2FkZF9pbmNkaXIgJENQUEZMQUdTIgorCisgICAgICAgICAgY2ZfdG9wX2luY2Rpcj1gZWNobyAkY2ZfYWRkX2luY2RpciB8IHNlZCAtZSAncyUvaW5jbHVkZS8uKiQlL2luY2x1ZGUlJ2AKKyAgICAgICAgICB0ZXN0ICIkY2ZfdG9wX2luY2RpciIgPSAiJGNmX2FkZF9pbmNkaXIiICYmIGJyZWFrCisgICAgICAgICAgY2ZfYWRkX2luY2Rpcj0iJGNmX3RvcF9pbmNkaXIiCisJCWVsc2UKKwkJICBicmVhaworCQlmaQorCSAgZmkKKwlkb25lCisgIGRvbmUKK2ZpCisKK30KKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBoZWFkZXIgaW4gaW5jbHVkZS1wYXRoIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMjM5OiBjaGVja2luZyBmb3IgJGNmX25jdWhkcl9yb290IGhlYWRlciBpbiBpbmNsdWRlLXBhdGgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X25jdXJzZXNfaCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCWNmX2hlYWRlcl9saXN0PSIkY2ZfbmN1aGRyX3Jvb3QvY3Vyc2VzLmggJGNmX25jdWhkcl9yb290L25jdXJzZXMuaCIKKwkoIHRlc3QgIiRjZl9uY3VoZHJfcm9vdCIgPSBuY3Vyc2VzIHx8IHRlc3QgIiRjZl9uY3VoZHJfcm9vdCIgPSBuY3Vyc2VzdyApICYmIGNmX2hlYWRlcl9saXN0PSIkY2ZfaGVhZGVyX2xpc3QgY3Vyc2VzLmggbmN1cnNlcy5oIgorCWZvciBjZl9oZWFkZXIgaW4gJGNmX2hlYWRlcl9saXN0CisJZG8KKwkJCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzI1MCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQgbWFpbigpIHsKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCQorCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyNzE6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2g9JGNmX2hlYWRlcgorCQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworCQl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oIiAhPSBubyAmJiBicmVhaworCWRvbmUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9uY3Vyc2VzX2giIDE+JjYKKworCisKK2lmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2giICE9IG5vIDsgdGhlbgorCWNmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9jdl9uY3Vyc2VzX2gKK2Vsc2UKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBpbmNsdWRlLXBhdGgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjMyOTc6IGNoZWNraW5nIGZvciAkY2ZfbmN1aGRyX3Jvb3QgaW5jbHVkZS1wYXRoIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX2gyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8KKwljZl9zZWFyY2g9IiIKKworCit0ZXN0ICIvdXNyIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3VzciIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvdXNyIgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIiRwcmVmaXgiICE9ICJOT05FIiAmJiBcCit0ZXN0IC1kICIkcHJlZml4IiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgJHByZWZpeCIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCit0ZXN0ICIvdXNyL2xvY2FsIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3Vzci9sb2NhbCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvdXNyL2xvY2FsIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2xvY2FsLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9sb2NhbC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIi9vcHQiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvb3B0IiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyIC9vcHQiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZSIKKwl0ZXN0IC1kIC9vcHQvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kIC9vcHQvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKwordGVzdCAiJEhPTUUiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkSE9NRSIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkSE9NRSIKKwl0ZXN0IC1kICRIT01FL2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2luY2x1ZGUiCisJdGVzdCAtZCAkSE9NRS9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAkSE9NRS9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKwordGVzdCAiJGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkaW5jbHVkZWRpciAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCIKK30KKwordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRvbGRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpciAgICAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRvbGRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gc2VhcmNoIHBhdGggJGNmX3NlYXJjaAorCWNmX3NhdmUyX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisJZm9yIGNmX2luY2RpciBpbiAkY2Zfc2VhcmNoCisJZG8KKwkJCitpZiB0ZXN0IC1uICIkY2ZfaW5jZGlyIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM0MTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpIHsKK3ByaW50ZigiSGVsbG8iKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM0MTc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTozNDM0OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCisJCWZvciBjZl9oZWFkZXIgaW4gXAorCQkJbmN1cnNlcy5oIFwKKwkJCWN1cnNlcy5oCisJCWRvCisJCQkKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNDU2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworCisjaW5jbHVkZSA8JGNmX2hlYWRlcj4KK2ludCBtYWluKCkgeworCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisKK3ByaW50ZigiJXNcbiIsIE5DVVJTRVNfVkVSU0lPTik7CisjZWxzZQorI2lmZGVmIF9fTkNVUlNFU19ICitwcmludGYoIm9sZFxuIik7CisjZWxzZQorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorI2VuZGlmCisJCisJCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzQ3NzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X25jdXJzZXNfaDI9JGNmX2hlYWRlcgorCQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2gyPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKwkJCWlmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyA7IHRoZW4KKwkJCQljZl9jdl9uY3Vyc2VzX2gyPSRjZl9pbmNkaXIvJGNmX2hlYWRlcgorCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICRhY19uICIJLi4uIGZvdW5kICRhY19jIiAxPiY2CisJCQkJYnJlYWsKKwkJCWZpCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0ZWQgJGNmX2luY2Rpci8kY2ZfaGVhZGVyIiAxPiY2CisJCWRvbmUKKwkJQ1BQRkxBR1M9IiRjZl9zYXZlMl9DUFBGTEFHUyIKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiA9IG5vICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm90IGZvdW5kIiAxPiYyOyBleGl0IDE7IH0KKwkKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfbmN1cnNlc19oMiIgMT4mNgorCisJY2ZfMXN0X2luY2Rpcj1gZWNobyAkY2ZfY3ZfbmN1cnNlc19oMiB8IHNlZCAtZSAncyUvW14vXSokJSUnYAorCWNmX2N2X25jdXJzZXNfaGVhZGVyPWBiYXNlbmFtZSAkY2ZfY3ZfbmN1cnNlc19oMmAKKwlpZiB0ZXN0IGBiYXNlbmFtZSAkY2ZfMXN0X2luY2RpcmAgPSAkY2ZfbmN1aGRyX3Jvb3QgOyB0aGVuCisJCWNmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9uY3VoZHJfcm9vdC8kY2ZfY3ZfbmN1cnNlc19oZWFkZXIKKwlmaQorCQoraWYgdGVzdCAtbiAiJGNmXzFzdF9pbmNkaXIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfMXN0X2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM1MzUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpIHsKK3ByaW50ZigiSGVsbG8iKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM1NDI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTozNTU5OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCisKK2ZpCisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyBmb3IgbmN1cnNlcy5oCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluICMgKHZpCisqbmN1cnNlcy5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluICMgKHZpCituY3Vyc2VzL2N1cnNlcy5ofG5jdXJzZXMvbmN1cnNlcy5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfTkNVUlNFU19IIDEKK0VPRgorCisJOzsKK25jdXJzZXN3L2N1cnNlcy5ofG5jdXJzZXN3L25jdXJzZXMuaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTV19OQ1VSU0VTX0ggMQorRU9GCisKKwk7OworZXNhYworCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6MzYwNzogY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfdGVybV9oZWFkZXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2Nhc2UgJHtjZl9jdl9uY3Vyc2VzX2hlYWRlcn0gaW4gIyh2aQorKi9uY3Vyc2VzLmh8Ki9uY3Vyc2Vzdy5oKSAjKHZpCisJY2ZfdGVybV9oZWFkZXI9YGVjaG8gIiRjZl9jdl9uY3Vyc2VzX2hlYWRlciIgfCBzZWQgLWUgJ3MlbmN1cnNlc1teLl0qXC5oJCV0ZXJtLmglJ2AKKwk7OworKikKKwljZl90ZXJtX2hlYWRlcj10ZXJtLmgKKwk7OworZXNhYworCitmb3IgY2ZfdGVzdCBpbiAkY2ZfdGVybV9oZWFkZXIgIm5jdXJzZXMvdGVybS5oIiAibmN1cnNlc3cvdGVybS5oIgorZG8KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM2MjQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JGNmX3Rlc3Q+CisKK2ludCBtYWluKCkgeworaW50IHggPSBhdXRvX2xlZnRfbWFyZ2luCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzYzNDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIAorCWNmX2N2X3Rlcm1faGVhZGVyPSIkY2ZfdGVzdCIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgCisJY2ZfY3ZfdGVybV9oZWFkZXI9dW5rbm93bgorCQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCXRlc3QgIiRjZl9jdl90ZXJtX2hlYWRlciIgIT0gdW5rbm93biAmJiBicmVhaworZG9uZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3Rlcm1faGVhZGVyIiAxPiY2CisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyB0byBhY2NvbW1vZGF0ZSBzdWJkaXJlY3RvcmllcworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorKnRlcm0uaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorbmN1cnNlcy90ZXJtLmgpICModmkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX1RFUk1fSCAxCitFT0YKKworCTs7CituY3Vyc2Vzdy90ZXJtLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU1dfVEVSTV9IIDEKK0VPRgorCisJOzsKK2VzYWMKKworCisjIHNvbWUgYXBwbGljYXRpb25zIG5lZWQgdGhpcywgYnV0IHNob3VsZCBjaGVjayBmb3IgTkNVUlNFU19WRVJTSU9OCitjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFUyAxCitFT0YKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBuY3Vyc2VzIHZlcnNpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM2ODk6IGNoZWNraW5nIGZvciBuY3Vyc2VzIHZlcnNpb24iID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X25jdXJzZXNfdmVyc2lvbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1ubworCWNmX3RlbXBmaWxlPW91dCQkCisJcm0gLWYgJGNmX3RlbXBmaWxlCisJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgCisKKwkjIFRoaXMgd2lsbCBub3Qgd29yayBpZiB0aGUgcHJlcHJvY2Vzc29yIHNwbGl0cyB0aGUgbGluZSBhZnRlciB0aGUKKwkjIEF1dG9jb25mIHRva2VuLiAgVGhlICd1bnByb3RvJyBwcm9ncmFtIGRvZXMgdGhhdC4KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjdW5kZWYgQXV0b2NvbmYKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KK0F1dG9jb25mIE5DVVJTRVNfVkVSU0lPTgorI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorQXV0b2NvbmYgIm9sZCIKKyNlbmRpZgorOworI2VuZGlmCitFT0YKKwljZl90cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCAyPiY1IHwgZ3JlcCAnXkF1dG9jb25mICcgPmNvbmZ0ZXN0Lm91dCIKKwl7IChldmFsIGVjaG8gY29uZmlndXJlOjM3MTU6IFwiJGNmX3RyeVwiKSAxPiY1OyAoZXZhbCAkY2ZfdHJ5KSAyPiY1OyB9CisJaWYgdGVzdCAtZiBjb25mdGVzdC5vdXQgOyB0aGVuCisJCWNmX291dD1gY2F0IGNvbmZ0ZXN0Lm91dCB8IHNlZCAtZSAncyVeQXV0b2NvbmYgJSUnIC1lICdzJV5bXiJdKiIlJScgLWUgJ3MlIi4qJSUnYAorCQl0ZXN0IC1uICIkY2Zfb3V0IiAmJiBjZl9jdl9uY3Vyc2VzX3ZlcnNpb249IiRjZl9vdXQiCisJCXJtIC1mIGNvbmZ0ZXN0Lm91dAorCWZpCisKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzcyNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oIiRjZl90ZW1wZmlsZSIsICJ3Iik7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjIGlmZGVmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSAorCWZwcmludGYoZnAsICIlcy4lZFxuIiwgTkNVUlNFU19WRVJTSU9OLCBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpOworIyBlbHNlCisJZnByaW50ZihmcCwgIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworIyBlbmRpZgorI2Vsc2UKKyMgaWZkZWYgX19OQ1VSU0VTX0gKKwlmcHJpbnRmKGZwLCAib2xkXG4iKTsKKyMgZWxzZQorCW1ha2UgYW4gZXJyb3IKKyMgZW5kaWYKKyNlbmRpZgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm4tcmV0dXJufSgwKTsKK30KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzQ4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIAorCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1gY2F0ICRjZl90ZW1wZmlsZWAKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworCXJtIC1mICRjZl90ZW1wZmlsZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgMT4mNgordGVzdCAiJGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgPSBubyB8fCBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFUyAxCitFT0YKKworCisKKwkKKworY2ZfbmN1bGliX3Jvb3Q9bmN1cnNlcworCSMgVGhpcyB3b3JrcywgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHdlIGZpbmQgZ3BtLCBidXQKKwkjIG5jdXJzZXMgaXMgaW4gYSBub25zdGFuZGFyZCBsb2NhdGlvbiB2aWEgJExJQlMsIGFuZCB3ZSByZWFsbHkgd2FudAorCSMgdG8gbGluayBncG0uCitjZl9uY3Vyc2VzX0xJQlM9IiIKK2NmX25jdXJzZXNfU0FWRT0iJExJQlMiCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM3Nzk6IGNoZWNraW5nIGZvciBHcG1fT3BlbiBpbiAtbGdwbSIgPiY1CithY19saWJfdmFyPWBlY2hvIGdwbSdfJ0dwbV9PcGVuIHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGdwbSAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzNzg3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgR3BtX09wZW4oKTsKKworaW50IG1haW4oKSB7CitHcG1fT3BlbigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mzc5ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWxncG0iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM4MTQ6IGNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sZ3BtIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gZ3BtJ18naW5pdHNjciB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMzgyMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGluaXRzY3IoKTsKKworaW50IG1haW4oKSB7Citpbml0c2NyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozODMzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBMSUJTPSIkY2ZfbmN1cnNlc19TQVZFIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2NmX25jdXJzZXNfTElCUz0iLWxncG0iCitmaQorCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCitjYXNlICRob3N0X29zIGluICModmkKK2ZyZWVic2QqKQorCSMgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB5b3UgYXJlIGxpbmtpbmcgYWdhaW5zdCBhbiBvYnNvbGV0ZQorCSMgdmVyc2lvbiBvZiBuY3Vyc2VzIChidXQgaXQgc2hvdWxkIGRvIG5vIGhhcm0sIHNpbmNlIGl0J3Mgc3RhdGljKS4KKwlpZiB0ZXN0ICIkY2ZfbmN1bGliX3Jvb3QiID0gbmN1cnNlcyA7IHRoZW4KKwkJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sbXl0aW5mbyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Mzg2NTogY2hlY2tpbmcgZm9yIHRnb3RvIGluIC1sbXl0aW5mbyIgPiY1CithY19saWJfdmFyPWBlY2hvIG15dGluZm8nXyd0Z290byB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxteXRpbmZvICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM4NzMgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciB0Z290bygpOworCitpbnQgbWFpbigpIHsKK3Rnb3RvKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozODg0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBjZl9uY3Vyc2VzX0xJQlM9Ii1sbXl0aW5mbyAkY2ZfbmN1cnNlc19MSUJTIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKwlmaQorCTs7Citlc2FjCisKK0xJQlM9IiRjZl9uY3Vyc2VzX0xJQlMgJExJQlMiCisKK2lmICggdGVzdCAtbiAiJGNmX2N2X2N1cnNlc19kaXIiICYmIHRlc3QgIiRjZl9jdl9jdXJzZXNfZGlyIiAhPSAibm8iICkKK3RoZW4KKwkKK2lmIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyL2xpYiIgOyB0aGVuCisgIGZvciBjZl9hZGRfbGliZGlyIGluICRjZl9jdl9jdXJzZXNfZGlyL2xpYgorICBkbworICAgIGlmIHRlc3QgJGNmX2FkZF9saWJkaXIgPSAvdXNyL2xpYiA7IHRoZW4KKyAgICAgIDoKKyAgICBlbGlmIHRlc3QgLWQgJGNmX2FkZF9saWJkaXIKKyAgICB0aGVuCisgICAgICBjZl9oYXZlX2xpYmRpcj1ubworICAgICAgaWYgdGVzdCAtbiAiJExERkxBR1MkTElCUyIgOyB0aGVuCisgICAgICAgICMgYSBsb29wIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIGFkZCBzdWJkaXJzIG9mIGV4aXN0aW5nIGRpcnMKKyAgICAgICAgZm9yIGNmX3Rlc3RfbGliZGlyIGluICRMREZMQUdTICRMSUJTIDsgZG8KKyAgICAgICAgICBpZiB0ZXN0ICIuJGNmX3Rlc3RfbGliZGlyIiA9ICIuLUwkY2ZfYWRkX2xpYmRpciIgOyB0aGVuCisgICAgICAgICAgICBjZl9oYXZlX2xpYmRpcj15ZXM7IGJyZWFrCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjZl9oYXZlX2xpYmRpciIgPSBubyA7IHRoZW4KKyAgICAgICAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTozOTMyOiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2xpYmRpciB0byBsaWJyYXJ5LXBhdGggLi4uIiAxPiY1CisKKworICAgICAgICBMREZMQUdTPSItTCRjZl9hZGRfbGliZGlyICRMREZMQUdTIgorICAgICAgZmkKKyAgICBmaQorICBkb25lCitmaQorCisJTElCUz0iLWwkY2ZfbmN1bGliX3Jvb3QgJExJQlMiCitlbHNlCisJCisJZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9bm8nCisJY2ZfbGliZGlyPSIiCisJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGluaXRzY3IiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM5NDc6IGNoZWNraW5nIGZvciBpbml0c2NyIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX2luaXRzY3InK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSAzOTUyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGluaXRzY3IoKTsgYmVsb3cuICAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBpbml0c2NyKCk7CisKK2ludCBtYWluKCkgeworCisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfaW5pdHNjcikgfHwgZGVmaW5lZCAoX19zdHViX19faW5pdHNjcikKK2Nob2tlIG1lCisjZWxzZQoraW5pdHNjcigpOworI2VuZGlmCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozOTc1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX2luaXRzY3I9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX2luaXRzY3I9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydpbml0c2NyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPXllcycKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisKKwkJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwkJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGluaXRzY3IgaW4gLWwkY2ZfbmN1bGliX3Jvb3QiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjM5OTU6IGNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sJGNmX25jdWxpYl9yb290IiA+JjUKKwkJTElCUz0iLWwkY2ZfbmN1bGliX3Jvb3QgJExJQlMiCisJCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDM5OTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKSB7Citpbml0c2NyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0MDA1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisJCQkgZXZhbCAnY2ZfY3ZfaGF2ZV9saWJfJyRjZl9uY3VsaWJfcm9vdCc9eWVzJworCQkJCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCQkJY2Zfc2VhcmNoPSIiCisKKwordGVzdCAiL3VzciIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi91c3IiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAvdXNyIgorCXRlc3QgLWQgL3Vzci9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbGliIgorCXRlc3QgLWQgL3Vzci9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAvdXNyL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL3Vzci8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvdXNyLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCisKK3Rlc3QgIiRwcmVmaXgiICE9ICJOT05FIiAmJiBcCit0ZXN0IC1kICIkcHJlZml4IiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkcHJlZml4IgorCXRlc3QgLWQgJHByZWZpeC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRwcmVmaXgvbGliIgorCXRlc3QgLWQgJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCisKK3Rlc3QgIi91c3IvbG9jYWwiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvdXNyL2xvY2FsIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgL3Vzci9sb2NhbCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2xpYiIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgL3Vzci9sb2NhbC9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL3Vzci9sb2NhbC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworCit0ZXN0ICIvb3B0IiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL29wdCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyIC9vcHQiCisJdGVzdCAtZCAvb3B0L2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC9saWIiCisJdGVzdCAtZCAvb3B0L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kIC9vcHQvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvb3B0LyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC9vcHQvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKwordGVzdCAiJEhPTUUiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkSE9NRSIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyICRIT01FIgorCXRlc3QgLWQgJEhPTUUvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9saWIiCisJdGVzdCAtZCAkSE9NRS9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgJEhPTUUvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJEhPTUUvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRIT01FLyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworCisJCQlmb3IgY2ZfbGliZGlyIGluICRjZl9zZWFyY2gKKwkJCWRvCisJCQkJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIC1sJGNmX25jdWxpYl9yb290IGluICRjZl9saWJkaXIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQwODE6IGNoZWNraW5nIGZvciAtbCRjZl9uY3VsaWJfcm9vdCBpbiAkY2ZfbGliZGlyIiA+JjUKKwkJCQlMSUJTPSItTCRjZl9saWJkaXIgLWwkY2ZfbmN1bGliX3Jvb3QgJGNmX3NhdmVfTElCUyIKKwkJCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0MDg0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDA5MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorCQkJIAkJIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPXllcycKKwkJCQkJIGJyZWFrCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCQkJCQkgTElCUz0iJGNmX3NhdmVfTElCUyIKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCWRvbmUKKwkJCQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQkKK2ZpCisKK2V2YWwgJ2NmX2ZvdW5kX2xpYnJhcnk9JGNmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QKKworaWYgdGVzdCAkY2ZfZm91bmRfbGlicmFyeSA9IG5vIDsgdGhlbgorCXsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ2Fubm90IGxpbmsgJGNmX25jdWxpYl9yb290IGxpYnJhcnkiIDE+JjI7IGV4aXQgMTsgfQorZmkKKworCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmN1cnNlc19MSUJTIiA7IHRoZW4KKwllY2hvICRhY19uICJjaGVja2luZyBpZiB3ZSBjYW4gbGluayAkY2ZfbmN1bGliX3Jvb3Qgd2l0aG91dCAkY2ZfbmN1cnNlc19MSUJTIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0MTIyOiBjaGVja2luZyBpZiB3ZSBjYW4gbGluayAkY2ZfbmN1bGliX3Jvb3Qgd2l0aG91dCAkY2ZfbmN1cnNlc19MSUJTIiA+JjUKKwljZl9uY3Vyc2VzX1NBVkU9IiRMSUJTIgorCWZvciBwIGluICRjZl9uY3Vyc2VzX0xJQlMgOyBkbworCQlxPWBlY2hvICRMSUJTIHwgc2VkIC1lICJzJSRwICUlIiAtZSAicyUkcCQlJSJgCisJCWlmIHRlc3QgIiRxIiAhPSAiJExJQlMiIDsgdGhlbgorCQkJTElCUz0iJHEiCisJCWZpCisJZG9uZQorCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQxMzEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKSB7Citpbml0c2NyKCk7IG1vdXNlbWFzaygwLDApOyB0Z290bygoY2hhciAqKTAsIDAsIDApOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQxMzg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisJCSBMSUJTPSIkY2ZfbmN1cnNlc19TQVZFIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworCitjZl9uY3VsaWJfUk9PVD1gZWNobyAiSEFWRV9MSUIkY2ZfbmN1bGliX3Jvb3QiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCitjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkY2ZfbmN1bGliX1JPT1QgMQorRU9GCisKKworCTs7CituY3Vyc2VzdykKKwljZl9jdl9saWJ0eXBlPXcKKwkKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN1cHBvcnQiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQxNjQ6IGNoZWNraW5nIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN1cHBvcnQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X3V0ZjhfbGliJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJY2Zfc2F2ZV9MSUJTPSIkTElCUyIKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0MTcxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50IG1haW4oKSB7CitwdXR3YygwLDApOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQxNzk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3V0ZjhfbGliPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBMSUJTPSItbHV0ZjggJExJQlMiCisJIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQxODggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8bGlidXRmOC5oPgoraW50IG1haW4oKSB7CitwdXR3YygwLDApOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQxOTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3V0ZjhfbGliPWFkZC1vbgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl91dGY4X2xpYj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCUxJQlM9IiRjZl9zYXZlX0xJQlMiCisKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfdXRmOF9saWIiIDE+JjYKKworIyBIQVZFX0xJQlVURjhfSCBpcyB1c2VkIGJ5IG5jdXJzZXMgaWYgY3Vyc2VzLmggaXMgc2hhcmVkIGJldHdlZW4KKyMgbmN1cnNlcy9uY3Vyc2VzdzoKK2lmIHRlc3QgIiRjZl9jdl91dGY4X2xpYiIgPSAiYWRkLW9uIiA7IHRoZW4KKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9MSUJVVEY4X0ggMQorRU9GCisKKwlMSUJTPSItbHV0ZjggJExJQlMiCitmaQorCisJCisKK2NmX25jdWhkcl9yb290PW5jdXJzZXN3CisKK3Rlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiBcCit0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiAmJiB7IFwKKyAgCitpZiB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlICRjZl9jdl9jdXJzZXNfZGlyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2N2X2N1cnNlc19kaXIvaW5jbHVkZSAkY2ZfY3ZfY3Vyc2VzX2Rpci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdAorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQyNTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpIHsKK3ByaW50ZigiSGVsbG8iKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQyNjI6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo0Mjc5OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCit9CisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY2ZfbmN1aGRyX3Jvb3QgaGVhZGVyIGluIGluY2x1ZGUtcGF0aCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDI5ODogY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBoZWFkZXIgaW4gaW5jbHVkZS1wYXRoIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX2gnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwljZl9oZWFkZXJfbGlzdD0iJGNmX25jdWhkcl9yb290L2N1cnNlcy5oICRjZl9uY3VoZHJfcm9vdC9uY3Vyc2VzLmgiCisJKCB0ZXN0ICIkY2ZfbmN1aGRyX3Jvb3QiID0gbmN1cnNlcyB8fCB0ZXN0ICIkY2ZfbmN1aGRyX3Jvb3QiID0gbmN1cnNlc3cgKSAmJiBjZl9oZWFkZXJfbGlzdD0iJGNmX2hlYWRlcl9saXN0IGN1cnNlcy5oIG5jdXJzZXMuaCIKKwlmb3IgY2ZfaGVhZGVyIGluICRjZl9oZWFkZXJfbGlzdAorCWRvCisJCQorCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQzMDkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI3VuZGVmICBIQVZFX0xJQlVURjhfSAkvKiBpbiBjYXNlIHdlIHVzZWQgQ0ZfVVRGOF9MSUIgKi8KKyNkZWZpbmUgSEFWRV9MSUJVVEY4X0gJLyogdG8gZm9yY2UgbmN1cnNlcycgaGVhZGVyIGZpbGUgdG8gdXNlIGNjaGFyX3QgKi8KKworI2luY2x1ZGUgPCRjZl9oZWFkZXI+CitpbnQgbWFpbigpIHsKKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCisjaWZuZGVmIFdBQ1NfQlNTQgorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorCitwcmludGYoIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorcHJpbnRmKCJvbGRcbiIpOworI2Vsc2UKKwltYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgorCQorCQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQzMzg6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2g9JGNmX2hlYWRlcgorCQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworCQl0ZXN0ICIkY2ZfY3ZfbmN1cnNlc19oIiAhPSBubyAmJiBicmVhaworCWRvbmUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9uY3Vyc2VzX2giIDE+JjYKKworCisKK2lmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2giICE9IG5vIDsgdGhlbgorCWNmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9jdl9uY3Vyc2VzX2gKK2Vsc2UKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRjZl9uY3VoZHJfcm9vdCBpbmNsdWRlLXBhdGgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQzNjQ6IGNoZWNraW5nIGZvciAkY2ZfbmN1aGRyX3Jvb3QgaW5jbHVkZS1wYXRoIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX2gyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8KKwljZl9zZWFyY2g9IiIKKworCit0ZXN0ICIvdXNyIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3VzciIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvdXNyIgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgL3Vzci9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIiRwcmVmaXgiICE9ICJOT05FIiAmJiBcCit0ZXN0IC1kICIkcHJlZml4IiAmJiBcCisgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGluY2x1ZGUtZGlyZWN0b3JpZXMgdW5kZXIgJHByZWZpeCIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZSAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKKwl0ZXN0IC1kICRwcmVmaXgvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCit0ZXN0ICIvdXNyL2xvY2FsIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3Vzci9sb2NhbCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAvdXNyL2xvY2FsIgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorCXRlc3QgLWQgL3Vzci9sb2NhbC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsL2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvdXNyL2xvY2FsLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xvY2FsLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgL3Vzci9sb2NhbC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290IgorfQorCisKK3Rlc3QgIi9vcHQiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvb3B0IiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBpbmNsdWRlLWRpcmVjdG9yaWVzIHVuZGVyIC9vcHQiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZSIKKwl0ZXN0IC1kIC9vcHQvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAvb3B0L2luY2x1ZGUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZSIKKwl0ZXN0IC1kIC9vcHQvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvJGNmX25jdWhkcl9yb290L2luY2x1ZGUiCisJdGVzdCAtZCAvb3B0LyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL29wdC8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKwordGVzdCAiJEhPTUUiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIkSE9NRSIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgaW5jbHVkZS1kaXJlY3RvcmllcyB1bmRlciAkSE9NRSIKKwl0ZXN0IC1kICRIT01FL2luY2x1ZGUgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FL2luY2x1ZGUiCisJdGVzdCAtZCAkSE9NRS9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCisJdGVzdCAtZCAkSE9NRS9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9pbmNsdWRlLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FLyRjZl9uY3VoZHJfcm9vdC9pbmNsdWRlIgorCXRlc3QgLWQgJEhPTUUvJGNmX25jdWhkcl9yb290L2luY2x1ZGUvJGNmX25jdWhkcl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS8kY2ZfbmN1aGRyX3Jvb3QvaW5jbHVkZS8kY2ZfbmN1aGRyX3Jvb3QiCit9CisKKwordGVzdCAiJGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkaW5jbHVkZWRpciAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCIKK30KKwordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9IE5PTkUgJiYgXAordGVzdCAiJG9sZGluY2x1ZGVkaXIiICE9ICIvdXNyL2luY2x1ZGUiICYmIFwKK3Rlc3QgLWQgIiRvbGRpbmNsdWRlZGlyIiAmJiB7CisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpciAgICAmJiBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJG9sZGluY2x1ZGVkaXIiCisJdGVzdCAtZCAkb2xkaW5jbHVkZWRpci8kY2ZfbmN1aGRyX3Jvb3QgJiYgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRvbGRpbmNsdWRlZGlyLyRjZl9uY3VoZHJfcm9vdCIKK30KKworCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gc2VhcmNoIHBhdGggJGNmX3NlYXJjaAorCWNmX3NhdmUyX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisJZm9yIGNmX2luY2RpciBpbiAkY2Zfc2VhcmNoCisJZG8KKwkJCitpZiB0ZXN0IC1uICIkY2ZfaW5jZGlyIiA7IHRoZW4KKyAgZm9yIGNmX2FkZF9pbmNkaXIgaW4gJGNmX2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ0NzcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpIHsKK3ByaW50ZigiSGVsbG8iKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ0ODQ6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo0NTAxOiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCisJCWZvciBjZl9oZWFkZXIgaW4gXAorCQkJbmN1cnNlcy5oIFwKKwkJCWN1cnNlcy5oCisJCWRvCisJCQkKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0NTIzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworCisjaW5jbHVkZSA8JGNmX2hlYWRlcj4KK2ludCBtYWluKCkgeworCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisKK3ByaW50ZigiJXNcbiIsIE5DVVJTRVNfVkVSU0lPTik7CisjZWxzZQorI2lmZGVmIF9fTkNVUlNFU19ICitwcmludGYoIm9sZFxuIik7CisjZWxzZQorCW1ha2UgYW4gZXJyb3IKKyNlbmRpZgorI2VuZGlmCisJCisJCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDU0NDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X25jdXJzZXNfaDI9JGNmX2hlYWRlcgorCQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2gyPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKwkJCWlmIHRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiAhPSBubyA7IHRoZW4KKwkJCQljZl9jdl9uY3Vyc2VzX2gyPSRjZl9pbmNkaXIvJGNmX2hlYWRlcgorCQkJCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICRhY19uICIJLi4uIGZvdW5kICRhY19jIiAxPiY2CisJCQkJYnJlYWsKKwkJCWZpCisJCQl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0ZWQgJGNmX2luY2Rpci8kY2ZfaGVhZGVyIiAxPiY2CisJCWRvbmUKKwkJQ1BQRkxBR1M9IiRjZl9zYXZlMl9DUFBGTEFHUyIKKwkJdGVzdCAiJGNmX2N2X25jdXJzZXNfaDIiICE9IG5vICYmIGJyZWFrCisJZG9uZQorCXRlc3QgIiRjZl9jdl9uY3Vyc2VzX2gyIiA9IG5vICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm90IGZvdW5kIiAxPiYyOyBleGl0IDE7IH0KKwkKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfbmN1cnNlc19oMiIgMT4mNgorCisJY2ZfMXN0X2luY2Rpcj1gZWNobyAkY2ZfY3ZfbmN1cnNlc19oMiB8IHNlZCAtZSAncyUvW14vXSokJSUnYAorCWNmX2N2X25jdXJzZXNfaGVhZGVyPWBiYXNlbmFtZSAkY2ZfY3ZfbmN1cnNlc19oMmAKKwlpZiB0ZXN0IGBiYXNlbmFtZSAkY2ZfMXN0X2luY2RpcmAgPSAkY2ZfbmN1aGRyX3Jvb3QgOyB0aGVuCisJCWNmX2N2X25jdXJzZXNfaGVhZGVyPSRjZl9uY3VoZHJfcm9vdC8kY2ZfY3ZfbmN1cnNlc19oZWFkZXIKKwlmaQorCQoraWYgdGVzdCAtbiAiJGNmXzFzdF9pbmNkaXIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2luY2RpciBpbiAkY2ZfMXN0X2luY2RpcgorICBkbworCXdoaWxlIHRlc3QgJGNmX2FkZF9pbmNkaXIgIT0gL3Vzci9pbmNsdWRlCisJZG8KKwkgIGlmIHRlc3QgLWQgJGNmX2FkZF9pbmNkaXIKKwkgIHRoZW4KKwkJY2ZfaGF2ZV9pbmNkaXI9bm8KKwkJaWYgdGVzdCAtbiAiJENGTEFHUyRDUFBGTEFHUyIgOyB0aGVuCisJCSAgIyBhIGxvb3AgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gYWRkIHN1YmRpcnMgb2YgZXhpc3RpbmcgZGlycworCQkgIGZvciBjZl90ZXN0X2luY2RpciBpbiAkQ0ZMQUdTICRDUFBGTEFHUyA7IGRvCisJCQlpZiB0ZXN0ICIuJGNmX3Rlc3RfaW5jZGlyIiA9ICIuLUkkY2ZfYWRkX2luY2RpciIgOyB0aGVuCisJCQkgIGNmX2hhdmVfaW5jZGlyPXllczsgYnJlYWsKKwkJCWZpCisJCSAgZG9uZQorCQlmaQorCisJCWlmIHRlc3QgIiRjZl9oYXZlX2luY2RpciIgPSBubyA7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY2ZfYWRkX2luY2RpciIgPSAvdXNyL2xvY2FsL2luY2x1ZGUgOyB0aGVuCisJCQlpZiB0ZXN0ICIkR0NDIiA9IHllcworCQkJdGhlbgorCQkJICBjZl9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworCQkJICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJGNmX2FkZF9pbmNkaXIiCisJCQkgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ2MDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbigpIHsKK3ByaW50ZigiSGVsbG8iKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ2MDk6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9oYXZlX2luY2Rpcj15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCSAgQ1BQRkxBR1M9JGNmX3NhdmVfQ1BQRkxBR1MKKwkJCWZpCisJCSAgZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkY2ZfaGF2ZV9pbmNkaXIiID0gbm8gOyB0aGVuCisJCSAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGRpbmcgJGNmX2FkZF9pbmNkaXIgdG8gaW5jbHVkZS1wYXRoIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo0NjI2OiB0ZXN0aW5nIGFkZGluZyAkY2ZfYWRkX2luY2RpciB0byBpbmNsdWRlLXBhdGggLi4uIiAxPiY1CisKKworCQkgIENQUEZMQUdTPSItSSRjZl9hZGRfaW5jZGlyICRDUFBGTEFHUyIKKworICAgICAgICAgIGNmX3RvcF9pbmNkaXI9YGVjaG8gJGNmX2FkZF9pbmNkaXIgfCBzZWQgLWUgJ3MlL2luY2x1ZGUvLiokJS9pbmNsdWRlJSdgCisgICAgICAgICAgdGVzdCAiJGNmX3RvcF9pbmNkaXIiID0gIiRjZl9hZGRfaW5jZGlyIiAmJiBicmVhaworICAgICAgICAgIGNmX2FkZF9pbmNkaXI9IiRjZl90b3BfaW5jZGlyIgorCQllbHNlCisJCSAgYnJlYWsKKwkJZmkKKwkgIGZpCisJZG9uZQorICBkb25lCitmaQorCisKK2ZpCisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyBmb3IgbmN1cnNlcy5oCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluICMgKHZpCisqbmN1cnNlcy5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfSCAxCitFT0YKKworCTs7Citlc2FjCisKK2Nhc2UgJGNmX2N2X25jdXJzZXNfaGVhZGVyIGluICMgKHZpCituY3Vyc2VzL2N1cnNlcy5ofG5jdXJzZXMvbmN1cnNlcy5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfTkNVUlNFU19IIDEKK0VPRgorCisJOzsKK25jdXJzZXN3L2N1cnNlcy5ofG5jdXJzZXN3L25jdXJzZXMuaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTV19OQ1VSU0VTX0ggMQorRU9GCisKKwk7OworZXNhYworCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NDY3NDogY2hlY2tpbmcgZm9yIHRlcm1pbmZvIGhlYWRlciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfdGVybV9oZWFkZXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2Nhc2UgJHtjZl9jdl9uY3Vyc2VzX2hlYWRlcn0gaW4gIyh2aQorKi9uY3Vyc2VzLmh8Ki9uY3Vyc2Vzdy5oKSAjKHZpCisJY2ZfdGVybV9oZWFkZXI9YGVjaG8gIiRjZl9jdl9uY3Vyc2VzX2hlYWRlciIgfCBzZWQgLWUgJ3MlbmN1cnNlc1teLl0qXC5oJCV0ZXJtLmglJ2AKKwk7OworKikKKwljZl90ZXJtX2hlYWRlcj10ZXJtLmgKKwk7OworZXNhYworCitmb3IgY2ZfdGVzdCBpbiAkY2ZfdGVybV9oZWFkZXIgIm5jdXJzZXMvdGVybS5oIiAibmN1cnNlc3cvdGVybS5oIgorZG8KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ2OTEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjaW5jbHVkZSA8JGNmX3Rlc3Q+CisKK2ludCBtYWluKCkgeworaW50IHggPSBhdXRvX2xlZnRfbWFyZ2luCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDcwMTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIAorCWNmX2N2X3Rlcm1faGVhZGVyPSIkY2ZfdGVzdCIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgCisJY2ZfY3ZfdGVybV9oZWFkZXI9dW5rbm93bgorCQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCXRlc3QgIiRjZl9jdl90ZXJtX2hlYWRlciIgIT0gdW5rbm93biAmJiBicmVhaworZG9uZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3Rlcm1faGVhZGVyIiAxPiY2CisKKyMgU2V0IGRlZmluaXRpb25zIHRvIGFsbG93IGlmZGVmJ2luZyB0byBhY2NvbW1vZGF0ZSBzdWJkaXJlY3RvcmllcworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorKnRlcm0uaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCitjYXNlICRjZl9jdl90ZXJtX2hlYWRlciBpbiAjICh2aQorbmN1cnNlcy90ZXJtLmgpICModmkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTX1RFUk1fSCAxCitFT0YKKworCTs7CituY3Vyc2Vzdy90ZXJtLmgpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfTkNVUlNFU1dfVEVSTV9IIDEKK0VPRgorCisJOzsKK2VzYWMKKworCisjIHNvbWUgYXBwbGljYXRpb25zIG5lZWQgdGhpcywgYnV0IHNob3VsZCBjaGVjayBmb3IgTkNVUlNFU19WRVJTSU9OCitjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFUyAxCitFT0YKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBuY3Vyc2VzIHZlcnNpb24iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ3NTY6IGNoZWNraW5nIGZvciBuY3Vyc2VzIHZlcnNpb24iID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X25jdXJzZXNfdmVyc2lvbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1ubworCWNmX3RlbXBmaWxlPW91dCQkCisJcm0gLWYgJGNmX3RlbXBmaWxlCisJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgCisKKwkjIFRoaXMgd2lsbCBub3Qgd29yayBpZiB0aGUgcHJlcHJvY2Vzc29yIHNwbGl0cyB0aGUgbGluZSBhZnRlciB0aGUKKwkjIEF1dG9jb25mIHRva2VuLiAgVGhlICd1bnByb3RvJyBwcm9ncmFtIGRvZXMgdGhhdC4KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisjdW5kZWYgQXV0b2NvbmYKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KK0F1dG9jb25mIE5DVVJTRVNfVkVSU0lPTgorI2Vsc2UKKyNpZmRlZiBfX05DVVJTRVNfSAorQXV0b2NvbmYgIm9sZCIKKyNlbmRpZgorOworI2VuZGlmCitFT0YKKwljZl90cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCAyPiY1IHwgZ3JlcCAnXkF1dG9jb25mICcgPmNvbmZ0ZXN0Lm91dCIKKwl7IChldmFsIGVjaG8gY29uZmlndXJlOjQ3ODI6IFwiJGNmX3RyeVwiKSAxPiY1OyAoZXZhbCAkY2ZfdHJ5KSAyPiY1OyB9CisJaWYgdGVzdCAtZiBjb25mdGVzdC5vdXQgOyB0aGVuCisJCWNmX291dD1gY2F0IGNvbmZ0ZXN0Lm91dCB8IHNlZCAtZSAncyVeQXV0b2NvbmYgJSUnIC1lICdzJV5bXiJdKiIlJScgLWUgJ3MlIi4qJSUnYAorCQl0ZXN0IC1uICIkY2Zfb3V0IiAmJiBjZl9jdl9uY3Vyc2VzX3ZlcnNpb249IiRjZl9vdXQiCisJCXJtIC1mIGNvbmZ0ZXN0Lm91dAorCWZpCisKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDc5MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKQoreworCUZJTEUgKmZwID0gZm9wZW4oIiRjZl90ZW1wZmlsZSIsICJ3Iik7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjIGlmZGVmIE5DVVJTRVNfVkVSU0lPTl9QQVRDSAorCWZwcmludGYoZnAsICIlcy4lZFxuIiwgTkNVUlNFU19WRVJTSU9OLCBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpOworIyBlbHNlCisJZnByaW50ZihmcCwgIiVzXG4iLCBOQ1VSU0VTX1ZFUlNJT04pOworIyBlbmRpZgorI2Vsc2UKKyMgaWZkZWYgX19OQ1VSU0VTX0gKKwlmcHJpbnRmKGZwLCAib2xkXG4iKTsKKyMgZWxzZQorCW1ha2UgYW4gZXJyb3IKKyMgZW5kaWYKKyNlbmRpZgorCSR7Y2ZfY3ZfbWFpbl9yZXR1cm4tcmV0dXJufSgwKTsKK30KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo0ODE1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCit0aGVuCisgIAorCWNmX2N2X25jdXJzZXNfdmVyc2lvbj1gY2F0ICRjZl90ZW1wZmlsZWAKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorZmkKKworCXJtIC1mICRjZl90ZW1wZmlsZQorCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgMT4mNgordGVzdCAiJGNmX2N2X25jdXJzZXNfdmVyc2lvbiIgPSBubyB8fCBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFUyAxCitFT0YKKworCisKKwkKKworY2ZfbmN1bGliX3Jvb3Q9bmN1cnNlc3cKKwkjIFRoaXMgd29ya3MsIGV4Y2VwdCBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBmaW5kIGdwbSwgYnV0CisJIyBuY3Vyc2VzIGlzIGluIGEgbm9uc3RhbmRhcmQgbG9jYXRpb24gdmlhICRMSUJTLCBhbmQgd2UgcmVhbGx5IHdhbnQKKwkjIHRvIGxpbmsgZ3BtLgorY2ZfbmN1cnNlc19MSUJTPSIiCitjZl9uY3Vyc2VzX1NBVkU9IiRMSUJTIgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEdwbV9PcGVuIGluIC1sZ3BtIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0ODQ2OiBjaGVja2luZyBmb3IgR3BtX09wZW4gaW4gLWxncG0iID4mNQorYWNfbGliX3Zhcj1gZWNobyBncG0nXydHcG1fT3BlbiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxncG0gICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNDg1NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIEdwbV9PcGVuKCk7CisKK2ludCBtYWluKCkgeworR3BtX09wZW4oKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjQ4NjU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sZ3BtIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo0ODgxOiBjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbGdwbSIgPiY1CithY19saWJfdmFyPWBlY2hvIGdwbSdfJ2luaXRzY3IgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sZ3BtICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDQ4ODkgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBpbml0c2NyKCk7CisKK2ludCBtYWluKCkgeworaW5pdHNjcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDkwMDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgTElCUz0iJGNmX25jdXJzZXNfU0FWRSIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitjZl9uY3Vyc2VzX0xJQlM9Ii1sZ3BtIgorZmkKKworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworY2FzZSAkaG9zdF9vcyBpbiAjKHZpCitmcmVlYnNkKikKKwkjIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgeW91IGFyZSBsaW5raW5nIGFnYWluc3QgYW4gb2Jzb2xldGUKKwkjIHZlcnNpb24gb2YgbmN1cnNlcyAoYnV0IGl0IHNob3VsZCBkbyBubyBoYXJtLCBzaW5jZSBpdCdzIHN0YXRpYykuCisJaWYgdGVzdCAiJGNmX25jdWxpYl9yb290IiA9IG5jdXJzZXMgOyB0aGVuCisJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB0Z290byBpbiAtbG15dGluZm8iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjQ5MzI6IGNoZWNraW5nIGZvciB0Z290byBpbiAtbG15dGluZm8iID4mNQorYWNfbGliX3Zhcj1gZWNobyBteXRpbmZvJ18ndGdvdG8gfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sbXl0aW5mbyAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA0OTQwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgdGdvdG8oKTsKKworaW50IG1haW4oKSB7Cit0Z290bygpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NDk1MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgY2ZfbmN1cnNlc19MSUJTPSItbG15dGluZm8gJGNmX25jdXJzZXNfTElCUyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisJZmkKKwk7OworZXNhYworCitMSUJTPSIkY2ZfbmN1cnNlc19MSUJTICRMSUJTIgorCitpZiAoIHRlc3QgLW4gIiRjZl9jdl9jdXJzZXNfZGlyIiAmJiB0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2RpciIgIT0gIm5vIiApCit0aGVuCisJCitpZiB0ZXN0IC1uICIkY2ZfY3ZfY3Vyc2VzX2Rpci9saWIiIDsgdGhlbgorICBmb3IgY2ZfYWRkX2xpYmRpciBpbiAkY2ZfY3ZfY3Vyc2VzX2Rpci9saWIKKyAgZG8KKyAgICBpZiB0ZXN0ICRjZl9hZGRfbGliZGlyID0gL3Vzci9saWIgOyB0aGVuCisgICAgICA6CisgICAgZWxpZiB0ZXN0IC1kICRjZl9hZGRfbGliZGlyCisgICAgdGhlbgorICAgICAgY2ZfaGF2ZV9saWJkaXI9bm8KKyAgICAgIGlmIHRlc3QgLW4gIiRMREZMQUdTJExJQlMiIDsgdGhlbgorICAgICAgICAjIGEgbG9vcCBpcyBuZWVkZWQgdG8gZW5zdXJlIHdlIGNhbiBhZGQgc3ViZGlycyBvZiBleGlzdGluZyBkaXJzCisgICAgICAgIGZvciBjZl90ZXN0X2xpYmRpciBpbiAkTERGTEFHUyAkTElCUyA7IGRvCisgICAgICAgICAgaWYgdGVzdCAiLiRjZl90ZXN0X2xpYmRpciIgPSAiLi1MJGNmX2FkZF9saWJkaXIiIDsgdGhlbgorICAgICAgICAgICAgY2ZfaGF2ZV9saWJkaXI9eWVzOyBicmVhaworICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY2ZfaGF2ZV9saWJkaXIiID0gbm8gOyB0aGVuCisgICAgICAgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkaW5nICRjZl9hZGRfbGliZGlyIHRvIGxpYnJhcnktcGF0aCIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NDk5OTogdGVzdGluZyBhZGRpbmcgJGNmX2FkZF9saWJkaXIgdG8gbGlicmFyeS1wYXRoIC4uLiIgMT4mNQorCisKKyAgICAgICAgTERGTEFHUz0iLUwkY2ZfYWRkX2xpYmRpciAkTERGTEFHUyIKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorZmkKKworCUxJQlM9Ii1sJGNmX25jdWxpYl9yb290ICRMSUJTIgorZWxzZQorCQorCWV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPW5vJworCWNmX2xpYmRpcj0iIgorCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MDE0OiBjaGVja2luZyBmb3IgaW5pdHNjciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19pbml0c2NyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTAxOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBpbml0c2NyKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgaW5pdHNjcigpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2luaXRzY3IpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2luaXRzY3IpCitjaG9rZSBtZQorI2Vsc2UKK2luaXRzY3IoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTA0MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19pbml0c2NyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19pbml0c2NyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18naW5pdHNjcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz15ZXMnCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCisJCWNmX3NhdmVfTElCUz0iJExJQlMiCisJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbml0c2NyIGluIC1sJGNmX25jdWxpYl9yb290IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MDYyOiBjaGVja2luZyBmb3IgaW5pdHNjciBpbiAtbCRjZl9uY3VsaWJfcm9vdCIgPiY1CisJCUxJQlM9Ii1sJGNmX25jdWxpYl9yb290ICRMSUJTIgorCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MDY1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTA3MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorCQkJIGV2YWwgJ2NmX2N2X2hhdmVfbGliXyckY2ZfbmN1bGliX3Jvb3QnPXllcycKKwkJCQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKwkJCWNmX3NlYXJjaD0iIgorCisKK3Rlc3QgIi91c3IiICE9ICIkcHJlZml4IiAmJiBcCit0ZXN0IC1kICIvdXNyIiAmJiBcCisodGVzdCAkcHJlZml4ID0gTk9ORSB8fCB0ZXN0IC1kICRwcmVmaXgpICYmIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgL3VzciIKKwl0ZXN0IC1kIC91c3IvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvdXNyL2xpYiIKKwl0ZXN0IC1kIC91c3IvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgL3Vzci9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC91c3IvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL3Vzci8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworCit0ZXN0ICIkcHJlZml4IiAhPSAiTk9ORSIgJiYgXAordGVzdCAtZCAiJHByZWZpeCIgJiYgXAorIHsKKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCS4uLiB0ZXN0aW5nIGZvciBsaWItZGlyZWN0b3JpZXMgdW5kZXIgJHByZWZpeCIKKwl0ZXN0IC1kICRwcmVmaXgvbGliICYmICAgICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkcHJlZml4L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290IgorCXRlc3QgLWQgJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRwcmVmaXgvJGNmX25jdWxpYl9yb290L2xpYiAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJHByZWZpeC8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCIKK30KKworCit0ZXN0ICIvdXNyL2xvY2FsIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiL3Vzci9sb2NhbCIgJiYgXAorKHRlc3QgJHByZWZpeCA9IE5PTkUgfHwgdGVzdCAtZCAkcHJlZml4KSAmJiB7CisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgkuLi4gdGVzdGluZyBmb3IgbGliLWRpcmVjdG9yaWVzIHVuZGVyIC91c3IvbG9jYWwiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggL3Vzci9sb2NhbC9saWIiCisJdGVzdCAtZCAvdXNyL2xvY2FsL2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvbGliLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvdXNyL2xvY2FsLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kIC91c3IvbG9jYWwvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QgJiYgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC91c3IvbG9jYWwvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKwordGVzdCAiL29wdCIgIT0gIiRwcmVmaXgiICYmIFwKK3Rlc3QgLWQgIi9vcHQiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAvb3B0IgorCXRlc3QgLWQgL29wdC9saWIgJiYgICAgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoIC9vcHQvbGliIgorCXRlc3QgLWQgL29wdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCisJdGVzdCAtZCAvb3B0L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0L2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliIgorCXRlc3QgLWQgL29wdC8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0LyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAvb3B0LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290ICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAvb3B0LyRjZl9uY3VsaWJfcm9vdC9saWIvJGNmX25jdWxpYl9yb290IgorfQorCisKK3Rlc3QgIiRIT01FIiAhPSAiJHByZWZpeCIgJiYgXAordGVzdCAtZCAiJEhPTUUiICYmIFwKKyh0ZXN0ICRwcmVmaXggPSBOT05FIHx8IHRlc3QgLWQgJHByZWZpeCkgJiYgeworCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJLi4uIHRlc3RpbmcgZm9yIGxpYi1kaXJlY3RvcmllcyB1bmRlciAkSE9NRSIKKwl0ZXN0IC1kICRIT01FL2xpYiAmJiAgICAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvbGliIgorCXRlc3QgLWQgJEhPTUUvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvbGliLyRjZl9uY3VsaWJfcm9vdCIKKwl0ZXN0IC1kICRIT01FL2xpYi8kY2ZfbmN1bGliX3Jvb3QvbGliICYmICAgIGNmX3NlYXJjaD0iJGNmX3NlYXJjaCAkSE9NRS9saWIvJGNmX25jdWxpYl9yb290L2xpYiIKKwl0ZXN0IC1kICRIT01FLyRjZl9uY3VsaWJfcm9vdC9saWIgJiYgICAgICAgY2Zfc2VhcmNoPSIkY2Zfc2VhcmNoICRIT01FLyRjZl9uY3VsaWJfcm9vdC9saWIiCisJdGVzdCAtZCAkSE9NRS8kY2ZfbmN1bGliX3Jvb3QvbGliLyRjZl9uY3VsaWJfcm9vdCAmJiAgICBjZl9zZWFyY2g9IiRjZl9zZWFyY2ggJEhPTUUvJGNmX25jdWxpYl9yb290L2xpYi8kY2ZfbmN1bGliX3Jvb3QiCit9CisKKworCQkJZm9yIGNmX2xpYmRpciBpbiAkY2Zfc2VhcmNoCisJCQlkbworCQkJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAtbCRjZl9uY3VsaWJfcm9vdCBpbiAkY2ZfbGliZGlyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MTQ4OiBjaGVja2luZyBmb3IgLWwkY2ZfbmN1bGliX3Jvb3QgaW4gJGNmX2xpYmRpciIgPiY1CisJCQkJTElCUz0iLUwkY2ZfbGliZGlyIC1sJGNmX25jdWxpYl9yb290ICRjZl9zYXZlX0xJQlMiCisJCQkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTE1MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKK2luaXRzY3IoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjUxNTg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKwkJCSAJCSBldmFsICdjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290Jz15ZXMnCisJCQkJCSBicmVhaworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKwkJCQkJIExJQlM9IiRjZl9zYXZlX0xJQlMiCitmaQorcm0gLWYgY29uZnRlc3QqCisJCQlkb25lCisJCQkKK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCitmaQorCitldmFsICdjZl9mb3VuZF9saWJyYXJ5PSRjZl9jdl9oYXZlX2xpYl8nJGNmX25jdWxpYl9yb290CisKK2lmIHRlc3QgJGNmX2ZvdW5kX2xpYnJhcnkgPSBubyA7IHRoZW4KKwl7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IENhbm5vdCBsaW5rICRjZl9uY3VsaWJfcm9vdCBsaWJyYXJ5IiAxPiYyOyBleGl0IDE7IH0KK2ZpCisKKworZmkKKworaWYgdGVzdCAtbiAiJGNmX25jdXJzZXNfTElCUyIgOyB0aGVuCisJZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTE4OTogY2hlY2tpbmcgaWYgd2UgY2FuIGxpbmsgJGNmX25jdWxpYl9yb290IHdpdGhvdXQgJGNmX25jdXJzZXNfTElCUyIgPiY1CisJY2ZfbmN1cnNlc19TQVZFPSIkTElCUyIKKwlmb3IgcCBpbiAkY2ZfbmN1cnNlc19MSUJTIDsgZG8KKwkJcT1gZWNobyAkTElCUyB8IHNlZCAtZSAicyUkcCAlJSIgLWUgInMlJHAkJSUiYAorCQlpZiB0ZXN0ICIkcSIgIT0gIiRMSUJTIiA7IHRoZW4KKwkJCUxJQlM9IiRxIgorCQlmaQorCWRvbmUKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MTk4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworaW5pdHNjcigpOyBtb3VzZW1hc2soMCwwKTsgdGdvdG8oKGNoYXIgKikwLCAwLCAwKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MjA1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCQkgTElCUz0iJGNmX25jdXJzZXNfU0FWRSIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKKworY2ZfbmN1bGliX1JPT1Q9YGVjaG8gIkhBVkVfTElCJGNmX25jdWxpYl9yb290IiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGNmX25jdWxpYl9ST09UIDEKK0VPRgorCisKKwk7OworcGRjdXJzZXMpICModmkKKwlpZiB0ZXN0ICIkbm9feCIgPSB5ZXM7IHRoZW4KKyAgIyBOb3QgYWxsIHByb2dyYW1zIG1heSB1c2UgdGhpcyBzeW1ib2wsIGJ1dCBpdCBkb2VzIG5vdCBodXJ0IHRvIGRlZmluZSBpdC4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFhfRElTUExBWV9NSVNTSU5HIDEKK0VPRgorCisgIFhfQ0ZMQUdTPSBYX1BSRV9MSUJTPSBYX0xJQlM9IFhfRVhUUkFfTElCUz0KK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJHhfaW5jbHVkZXMiOyB0aGVuCisgICAgWF9DRkxBR1M9IiRYX0NGTEFHUyAtSSR4X2luY2x1ZGVzIgorICBmaQorCisgICMgSXQgd291bGQgYWxzbyBiZSBuaWNlIHRvIGRvIHRoaXMgZm9yIGFsbCAtTCBvcHRpb25zLCBub3QganVzdCB0aGlzIG9uZS4KKyAgaWYgdGVzdCAtbiAiJHhfbGlicmFyaWVzIjsgdGhlbgorICAgIFhfTElCUz0iJFhfTElCUyAtTCR4X2xpYnJhcmllcyIKKyAgICAjIEZvciBTb2xhcmlzOyBzb21lIHZlcnNpb25zIG9mIFN1biBDQyByZXF1aXJlIGEgc3BhY2UgYWZ0ZXIgLVIgYW5kCisgICAgIyBvdGhlcnMgcmVxdWlyZSBubyBzcGFjZS4gIFdvcmRzIGFyZSBub3Qgc3VmZmljaWVudCAuIC4gLiAuCisgICAgY2FzZSAiYCh1bmFtZSAtc3IpIDI+L2Rldi9udWxsYCIgaW4KKyAgICAiU3VuT1MgNSIqKQorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAtUiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc3BhY2UiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjUyNDg6IGNoZWNraW5nIHdoZXRoZXIgLVIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlIiA+JjUKKyAgICAgIGFjX3hzYXZlX0xJQlM9IiRMSUJTIjsgTElCUz0iJExJQlMgLVIkeF9saWJyYXJpZXMiCisgICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MjUxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MjU4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19SX25vc3BhY2U9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX1Jfbm9zcGFjZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICAgICAgaWYgdGVzdCAkYWNfUl9ub3NwYWNlID0geWVzOyB0aGVuCisJZWNobyAiJGFjX3QiIm5vIiAxPiY2CisJWF9MSUJTPSIkWF9MSUJTIC1SJHhfbGlicmFyaWVzIgorICAgICAgZWxzZQorCUxJQlM9IiRhY194c2F2ZV9MSUJTIC1SICR4X2xpYnJhcmllcyIKKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1Mjc0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MjgxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19SX3NwYWNlPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19SX3NwYWNlPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisJaWYgdGVzdCAkYWNfUl9zcGFjZSA9IHllczsgdGhlbgorCSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorCSAgWF9MSUJTPSIkWF9MSUJTIC1SICR4X2xpYnJhcmllcyIKKwllbHNlCisJICBlY2hvICIkYWNfdCIibmVpdGhlciB3b3JrcyIgMT4mNgorCWZpCisgICAgICBmaQorICAgICAgTElCUz0iJGFjX3hzYXZlX0xJQlMiCisgICAgZXNhYworICBmaQorCisgICMgQ2hlY2sgZm9yIHN5c3RlbS1kZXBlbmRlbnQgbGlicmFyaWVzIFggcHJvZ3JhbXMgbXVzdCBsaW5rIHdpdGguCisgICMgRG8gdGhpcyBiZWZvcmUgY2hlY2tpbmcgZm9yIHRoZSBzeXN0ZW0taW5kZXBlbmRlbnQgUjYgbGlicmFyaWVzCisgICMgKC1sSUNFKSwgc2luY2Ugd2UgbWF5IG5lZWQgLWxzb2NrZXQgb3Igd2hhdGV2ZXIgZm9yIFggbGlua2luZy4KKworICBpZiB0ZXN0ICIkSVNDIiA9IHllczsgdGhlbgorICAgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbG5zbF9zIC1saW5ldCIKKyAgZWxzZQorICAgICMgTWFydHluLkpvaG5zb25AY2wuY2FtLmFjLnVrIHNheXMgdGhpcyBpcyBuZWVkZWQgZm9yIFVsdHJpeCwgaWYgdGhlIFgKKyAgICAjIGxpYnJhcmllcyB3ZXJlIGJ1aWx0IHdpdGggREVDbmV0IHN1cHBvcnQuICBBbmQga2FybEBjcy51bWIuZWR1IHNheXMKKyAgICAjIHRoZSBBbHBoYSBuZWVkcyBkbmV0X3N0dWIgKGRuZXQgZG9lcyBub3QgZXhpc3QpLgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1MzEzOiBjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldCIgPiY1CithY19saWJfdmFyPWBlY2hvIGRuZXQnXydkbmV0X250b2EgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sZG5ldCAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1MzIxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZG5ldF9udG9hKCk7CisKK2ludCBtYWluKCkgeworZG5ldF9udG9hKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1MzMyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxkbmV0IgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9saWJfZG5ldF9kbmV0X250b2EgPSBubzsgdGhlbgorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXRfc3R1YiIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTM1NDogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXRfc3R1YiIgPiY1CithY19saWJfdmFyPWBlY2hvIGRuZXRfc3R1YidfJ2RuZXRfbnRvYSB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxkbmV0X3N0dWIgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTM2MiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRuZXRfbnRvYSgpOworCitpbnQgbWFpbigpIHsKK2RuZXRfbnRvYSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTM3MzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZG5ldF9zdHViIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBtc2hAY2lzLnVmbC5lZHUgc2F5cyAtbG5zbCAoYW5kIC1sc29ja2V0KSBhcmUgbmVlZGVkIGZvciBoaXMgMzg2L0FULAorICAgICMgdG8gZ2V0IHRoZSBTeXNWIHRyYW5zcG9ydCBmdW5jdGlvbnMuCisgICAgIyBjaGFkQGFuYXNhemkuY29tIHNheXMgdGhlIFB5cmFtaXMgTUlTLUVTIHJ1bm5pbmcgREMvT1N4IChTVlI0KQorICAgICMgbmVlZHMgLWxuc2wuCisgICAgIyBUaGUgbnNsIGxpYnJhcnkgcHJldmVudHMgcHJvZ3JhbXMgZnJvbSBvcGVuaW5nIHRoZSBYIGRpc3BsYXkKKyAgICAjIG9uIElyaXggNS4yLCBhY2NvcmRpbmcgdG8gZGlja2V5QGNsYXJrLm5ldC4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTQwMjogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDU0MDcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZ2V0aG9zdGJ5bmFtZSgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGdldGhvc3RieW5hbWUoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl9nZXRob3N0YnluYW1lKSB8fCBkZWZpbmVkIChfX3N0dWJfX19nZXRob3N0YnluYW1lKQorY2hva2UgbWUKKyNlbHNlCitnZXRob3N0YnluYW1lKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU0MzA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ2dldGhvc3RieW5hbWVgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgOgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUgPSBubzsgdGhlbgorICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU0NTE6IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbnNsIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gbnNsJ18nZ2V0aG9zdGJ5bmFtZSB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxuc2wgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTQ1OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGdldGhvc3RieW5hbWUoKTsKKworaW50IG1haW4oKSB7CitnZXRob3N0YnluYW1lKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NDcwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxuc2wiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGZpCisKKyAgICAjIGxpZWRlckBza3lsZXIubWF2ZC5ob25leXdlbGwuY29tIHNheXMgd2l0aG91dCAtbHNvY2tldCwKKyAgICAjIHNvY2tldC9zZXRzb2Nrb3B0IGFuZCBvdGhlciByb3V0aW5lcyBhcmUgdW5kZWZpbmVkIHVuZGVyIFNDTyBPRFQKKyAgICAjIDIuMC4gIEJ1dCAtbHNvY2tldCBpcyBicm9rZW4gb24gSVJJWCA1LjIgKGFuZCBpcyBub3QgbmVjZXNzYXJ5CisgICAgIyBvbiBsYXRlciB2ZXJzaW9ucyksIHNheXMgc2ltb25AbGlhLmRpLmVwZmwuY2g6IGl0IGNvbnRhaW5zCisgICAgIyBnZXRob3N0YnkqIHZhcmlhbnRzIHRoYXQgZG9uJ3QgdXNlIHRoZSBuYW1lc2VydmVyIChvciBzb21ldGhpbmcpLgorICAgICMgLWxzb2NrZXQgbXVzdCBiZSBnaXZlbiBiZWZvcmUgLWxuc2wgaWYgYm90aCBhcmUgbmVlZGVkLgorICAgICMgV2UgYXNzdW1lIHRoYXQgaWYgY29ubmVjdCBuZWVkcyAtbG5zbCwgc28gZG9lcyBnZXRob3N0YnluYW1lLgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBjb25uZWN0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1NTAwOiBjaGVja2luZyBmb3IgY29ubmVjdCIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19jb25uZWN0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTUwNSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBjb25uZWN0KCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgY29ubmVjdCgpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX2Nvbm5lY3QpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2Nvbm5lY3QpCitjaG9rZSBtZQorI2Vsc2UKK2Nvbm5lY3QoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTUyODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19jb25uZWN0PXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19jb25uZWN0PW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nY29ubmVjdGBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICA6CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfY29ubmVjdCA9IG5vOyB0aGVuCisgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgY29ubmVjdCBpbiAtbHNvY2tldCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTU0OTogY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gLWxzb2NrZXQiID4mNQorYWNfbGliX3Zhcj1gZWNobyBzb2NrZXQnXydjb25uZWN0IHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbHNvY2tldCAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTU1NyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGNvbm5lY3QoKTsKKworaW50IG1haW4oKSB7Citjb25uZWN0KCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NTY4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX0VYVFJBX0xJQlM9Ii1sc29ja2V0ICRYX0VYVFJBX0xJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGZpCisKKyAgICAjIGdvbWV6QG1pLnVuaS1lcmxhbmdlbi5kZSBzYXlzIC1scG9zaXggaXMgbmVjZXNzYXJ5IG9uIEEvVVguCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHJlbW92ZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTU5MjogY2hlY2tpbmcgZm9yIHJlbW92ZSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19yZW1vdmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NTk3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHJlbW92ZSgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHJlbW92ZSgpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX3JlbW92ZSkgfHwgZGVmaW5lZCAoX19zdHViX19fcmVtb3ZlKQorY2hva2UgbWUKKyNlbHNlCityZW1vdmUoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTYyMDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19yZW1vdmU9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX3JlbW92ZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3JlbW92ZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICA6CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVtb3ZlID0gbm87IHRoZW4KKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciByZW1vdmUgaW4gLWxwb3NpeCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTY0MTogY2hlY2tpbmcgZm9yIHJlbW92ZSBpbiAtbHBvc2l4IiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gcG9zaXgnXydyZW1vdmUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1scG9zaXggICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTY0OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHJlbW92ZSgpOworCitpbnQgbWFpbigpIHsKK3JlbW92ZSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTY2MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1scG9zaXgiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGZpCisKKyAgICAjIEJTREkgQlNEL09TIDIuMSBuZWVkcyAtbGlwYyBmb3IgWE9wZW5EaXNwbGF5LgorICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBzaG1hdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTY4NDogY2hlY2tpbmcgZm9yIHNobWF0IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX3NobWF0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNTY4OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBzaG1hdCgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHNobWF0KCk7CisKK2ludCBtYWluKCkgeworCisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfc2htYXQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3NobWF0KQorY2hva2UgbWUKKyNlbHNlCitzaG1hdCgpOworI2VuZGlmCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo1NzEyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX3NobWF0PXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19zaG1hdD1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3NobWF0YFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaG1hdCA9IG5vOyB0aGVuCisgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3Igc2htYXQgaW4gLWxpcGMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjU3MzM6IGNoZWNraW5nIGZvciBzaG1hdCBpbiAtbGlwYyIgPiY1CithY19saWJfdmFyPWBlY2hvIGlwYydfJ3NobWF0IHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGlwYyAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NzQxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgc2htYXQoKTsKKworaW50IG1haW4oKSB7CitzaG1hdCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTc1MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1saXBjIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorICBmaQorCisgICMgQ2hlY2sgZm9yIGxpYnJhcmllcyB0aGF0IFgxMVI2IFh0L1hhdyBwcm9ncmFtcyBuZWVkLgorICBhY19zYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICB0ZXN0IC1uICIkeF9saWJyYXJpZXMiICYmIExERkxBR1M9IiRMREZMQUdTIC1MJHhfbGlicmFyaWVzIgorICAjIFNNIG5lZWRzIElDRSB0byAoZHluYW1pY2FsbHkpIGxpbmsgdW5kZXIgU3VuT1MgNC54IChzbyB3ZSBoYXZlIHRvCisgICMgY2hlY2sgZm9yIElDRSBmaXJzdCksIGJ1dCB3ZSBtdXN0IGxpbmsgaW4gdGhlIG9yZGVyIC1sU00gLWxJQ0Ugb3IKKyAgIyB3ZSBnZXQgdW5kZWZpbmVkIHN5bWJvbHMuICBTbyBhc3N1bWUgd2UgaGF2ZSBTTSBpZiB3ZSBoYXZlIElDRS4KKyAgIyBUaGVzZSBoYXZlIHRvIGJlIGxpbmtlZCB3aXRoIGJlZm9yZSAtbFgxMSwgdW5saWtlIHRoZSBvdGhlcgorICAjIGxpYnJhcmllcyB3ZSBjaGVjayBmb3IgYmVsb3csIHNvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZS4KKyAgIyAgLS1pbnRlcnJhbkB1bHVydS5TdGFuZm9yZC5FRFUsIGtiQGNzLnVtYi5lZHUuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBJY2VDb25uZWN0aW9uTnVtYmVyIGluIC1sSUNFIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo1Nzg1OiBjaGVja2luZyBmb3IgSWNlQ29ubmVjdGlvbk51bWJlciBpbiAtbElDRSIgPiY1CithY19saWJfdmFyPWBlY2hvIElDRSdfJ0ljZUNvbm5lY3Rpb25OdW1iZXIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sSUNFICRYX0VYVFJBX0xJQlMgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1NzkzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgSWNlQ29ubmVjdGlvbk51bWJlcigpOworCitpbnQgbWFpbigpIHsKK0ljZUNvbm5lY3Rpb25OdW1iZXIoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjU4MDQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfUFJFX0xJQlM9IiRYX1BSRV9MSUJTIC1sU00gLWxJQ0UiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBMREZMQUdTPSIkYWNfc2F2ZV9MREZMQUdTIgorCitmaQorCisKKworCisKKyMgU1lTVEVNX05BTUU9YGVjaG8gIiRjZl9jdl9zeXN0ZW1fbmFtZSJ8dHIgJyAnIC1gCisKK2NmX2hhdmVfWF9MSUJTPW5vCisKK0xERkxBR1M9IiRYX0xJQlMgJExERkxBR1MiCisKK3Rlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJY2hlY2tpbmcgYWRkaXRpb25zIHRvIENGTEFHUyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NTg0MDogdGVzdGluZyBjaGVja2luZyBhZGRpdGlvbnMgdG8gQ0ZMQUdTIC4uLiIgMT4mNQorCisKK2NmX2NoZWNrX2NmbGFncz0iJENGTEFHUyIKK2NmX2NoZWNrX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCisKK2NmX2ZpeF9jcHBmbGFncz1ubworY2ZfbmV3X2NmbGFncz0KK2NmX25ld19jcHBmbGFncz0KK2NmX25ld19leHRyYV9jcHBmbGFncz0KKworZm9yIGNmX2FkZF9jZmxhZ3MgaW4gJFhfQ0ZMQUdTCitkbworY2FzZSAkY2ZfZml4X2NwcGZsYWdzIGluCitubykKKwljYXNlICRjZl9hZGRfY2ZsYWdzIGluICModmkKKwktdW5kZWZ8LW5vc3RkaW5jKnwtSSp8LUQqfC1VKnwtRXwtUHwtQykgIyh2aQorCQljYXNlICRjZl9hZGRfY2ZsYWdzIGluCisJCS1EKikKKwkJCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL14tRFtePV0qPSdcJydcIlteIl0qLy8nYAorCisJCQl0ZXN0ICIke2NmX2FkZF9jZmxhZ3N9IiAhPSAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCQkJJiYgY2ZfZml4X2NwcGZsYWdzPXllcworCisJCQlpZiB0ZXN0ICRjZl9maXhfY3BwZmxhZ3MgPSB5ZXMgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQllbGlmIHRlc3QgIiR7Y2ZfdHN0X2NmbGFnc30iID0gIlwiJyIgOyB0aGVuCisJCQkJY2ZfbmV3X2V4dHJhX2NwcGZsYWdzPSIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQljYXNlICIkQ1BQRkxBR1MiIGluCisJCSokY2ZfYWRkX2NmbGFncykgIyh2aQorCQkJOzsKKwkJKikgIyh2aQorCQkJY2ZfbmV3X2NwcGZsYWdzPSIkY2ZfbmV3X2NwcGZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCWNmX25ld19jZmxhZ3M9IiRjZl9uZXdfY2ZsYWdzICRjZl9hZGRfY2ZsYWdzIgorCQk7OworCWVzYWMKKwk7OworeWVzKQorCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKworCWNmX3RzdF9jZmxhZ3M9YGVjaG8gJHtjZl9hZGRfY2ZsYWdzfSB8c2VkIC1lICdzL15bXiJdKiInXCcnLy8nYAorCisJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkmJiB0ZXN0IC16ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgY2ZfZml4X2NwcGZsYWdzPW5vCisJOzsKK2VzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGNmX25ld19jZmxhZ3MiIDsgdGhlbgorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkIHRvIFwkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo1OTAyOiB0ZXN0aW5nIGFkZCB0byBcJENGTEFHUyAkY2ZfbmV3X2NmbGFncyAuLi4iIDE+JjUKKworCisJQ0ZMQUdTPSIkQ0ZMQUdTICRjZl9uZXdfY2ZsYWdzIgorZmkKKworaWYgdGVzdCAtbiAiJGNmX25ld19jcHBmbGFncyIgOyB0aGVuCisJdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIglhZGQgdG8gXCRDUFBGTEFHUyAkY2ZfbmV3X2NwcGZsYWdzIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo1OTExOiB0ZXN0aW5nIGFkZCB0byBcJENQUEZMQUdTICRjZl9uZXdfY3BwZmxhZ3MgLi4uIiAxPiY1CisKKworCUNQUEZMQUdTPSIkY2ZfbmV3X2NwcGZsYWdzICRDUFBGTEFHUyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDsgdGhlbgorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkIHRvIFwkRVhUUkFfQ1BQRkxBR1MgJGNmX25ld19leHRyYV9jcHBmbGFncyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NTkyMDogdGVzdGluZyBhZGQgdG8gXCRFWFRSQV9DUFBGTEFHUyAkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIC4uLiIgMT4mNQorCisKKwlFWFRSQV9DUFBGTEFHUz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkRVhUUkFfQ1BQRkxBR1MiCitmaQorCisKKworCitpZiB0ZXN0ICIkY2ZfY2hlY2tfY2ZsYWdzIiAhPSAiJENGTEFHUyIgOyB0aGVuCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1OTMxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oKSB7CitwcmludGYoIkhlbGxvIHdvcmxkIik7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTkzODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgdGVzdCAtbiAiJHZlcmJvc2UiICYmIGVjaG8gIgl0ZXN0LWNvbXBpbGUgZmFpbGVkLiAgVW5kb2luZyBjaGFuZ2UgdG8gXCRDRkxBR1MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjU5NDY6IHRlc3RpbmcgdGVzdC1jb21waWxlIGZhaWxlZC4gIFVuZG9pbmcgY2hhbmdlIHRvIFwkQ0ZMQUdTIC4uLiIgMT4mNQorCisKKwkgaWYgdGVzdCAiJGNmX2NoZWNrX2NwcGZsYWdzIiAhPSAiJENQUEZMQUdTIiA7IHRoZW4KKwkJIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYnV0IGtlZXBpbmcgY2hhbmdlIHRvIFwkQ1BQRkxBR1MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjU5NTI6IHRlc3RpbmcgYnV0IGtlZXBpbmcgY2hhbmdlIHRvIFwkQ1BQRkxBR1MgLi4uIiAxPiY1CisKKworCSBmaQorCSBDRkxBR1M9IiRjZl9jaGVja19mbGFncyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFhPcGVuRGlzcGxheSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NTk2MzogY2hlY2tpbmcgZm9yIFhPcGVuRGlzcGxheSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19YT3BlbkRpc3BsYXknK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA1OTY4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIFhPcGVuRGlzcGxheSgpOyBiZWxvdy4gICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIFhPcGVuRGlzcGxheSgpOworCitpbnQgbWFpbigpIHsKKworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX1hPcGVuRGlzcGxheSkgfHwgZGVmaW5lZCAoX19zdHViX19fWE9wZW5EaXNwbGF5KQorY2hva2UgbWUKKyNlbHNlCitYT3BlbkRpc3BsYXkoKTsKKyNlbmRpZgorCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NTk5MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfZnVuY19YT3BlbkRpc3BsYXk9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX1hPcGVuRGlzcGxheT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ1hPcGVuRGlzcGxheWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICA6CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgWE9wZW5EaXNwbGF5IGluIC1sWDExIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MDEwOiBjaGVja2luZyBmb3IgWE9wZW5EaXNwbGF5IGluIC1sWDExIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gWDExJ18nWE9wZW5EaXNwbGF5IHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbFgxMSAkWF9QUkVfTElCUyAkTElCUyAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjAxOCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIFhPcGVuRGlzcGxheSgpOworCitpbnQgbWFpbigpIHsKK1hPcGVuRGlzcGxheSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjAyOTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgTElCUz0iLWxYMTEgJExJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZmkKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgWHRBcHBJbml0aWFsaXplIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MDUzOiBjaGVja2luZyBmb3IgWHRBcHBJbml0aWFsaXplIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX1h0QXBwSW5pdGlhbGl6ZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYwNTggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgWHRBcHBJbml0aWFsaXplKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgWHRBcHBJbml0aWFsaXplKCk7CisKK2ludCBtYWluKCkgeworCisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfWHRBcHBJbml0aWFsaXplKSB8fCBkZWZpbmVkIChfX3N0dWJfX19YdEFwcEluaXRpYWxpemUpCitjaG9rZSBtZQorI2Vsc2UKK1h0QXBwSW5pdGlhbGl6ZSgpOworI2VuZGlmCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2MDgxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jX1h0QXBwSW5pdGlhbGl6ZT15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfWHRBcHBJbml0aWFsaXplPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nWHRBcHBJbml0aWFsaXplYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIDoKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBYdEFwcEluaXRpYWxpemUgaW4gLWxYdCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjEwMDogY2hlY2tpbmcgZm9yIFh0QXBwSW5pdGlhbGl6ZSBpbiAtbFh0IiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gWHQnXydYdEFwcEluaXRpYWxpemUgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sWHQgJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYxMDggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBYdEFwcEluaXRpYWxpemUoKTsKKworaW50IG1haW4oKSB7CitYdEFwcEluaXRpYWxpemUoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjYxMTk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0xJQlhUIDEKK0VPRgorCisJIGNmX2hhdmVfWF9MSUJTPVh0CisJIExJQlM9Ii1sWHQgJFhfUFJFX0xJQlMgJExJQlMgJFhfRVhUUkFfTElCUyIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitmaQorCisKK2lmIHRlc3QgJGNmX2hhdmVfWF9MSUJTID0gbm8gOyB0aGVuCisJZWNobyAiY29uZmlndXJlOiB3YXJuaW5nOiBVbmFibGUgdG8gc3VjY2Vzc2Z1bGx5IGxpbmsgWCBUb29sa2l0IGxpYnJhcnkgKC1sWHQpIHdpdGgKK3Rlc3QgcHJvZ3JhbS4gIFlvdSB3aWxsIGhhdmUgdG8gY2hlY2sgYW5kIGFkZCB0aGUgcHJvcGVyIGxpYnJhcmllcyBieSBoYW5kCit0byBtYWtlZmlsZS4iIDE+JjIKK2ZpCisKKworY2ZfeF9hdGhlbmE9JHtjZl94X2F0aGVuYS1YYXd9CisKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCBYYXcgM2QgbGlicmFyeSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjE1NzogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIFhhdyAzZCBsaWJyYXJ5IiA+JjUKK3dpdGh2YWw9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtWGF3M2Qgb3IgLS13aXRob3V0LVhhdzNkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9YYXczZCtzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9YYXczZCIKKyAgOgorZmkKKworaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzIDsgdGhlbgorCWNmX3hfYXRoZW5hPVhhdzNkCisJZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorCWVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIG5lWFQgQXRoZW5hIGxpYnJhcnkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYxNzQ6IGNoZWNraW5nIGlmIHlvdSB3YW50IHRvIGxpbmsgd2l0aCBuZVhUIEF0aGVuYSBsaWJyYXJ5IiA+JjUKK3dpdGh2YWw9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbmVYdGF3IG9yIC0td2l0aG91dC1uZVh0YXcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25lWHRhdytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF9uZVh0YXciCisgIDoKK2ZpCisKK2lmIHRlc3QgIiR3aXRodmFsIiA9IHllcyA7IHRoZW4KKwljZl94X2F0aGVuYT1uZVh0YXcKKwllY2hvICIkYWNfdCIieWVzIiAxPiY2CitlbHNlCisJZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggQXRoZW5hLVBsdXMgbGlicmFyeSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjE5MTogY2hlY2tpbmcgaWYgeW91IHdhbnQgdG8gbGluayB3aXRoIEF0aGVuYS1QbHVzIGxpYnJhcnkiID4mNQord2l0aHZhbD0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1YYXdQbHVzIG9yIC0td2l0aG91dC1YYXdQbHVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9YYXdQbHVzK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX1hhd1BsdXMiCisgIDoKK2ZpCisKK2lmIHRlc3QgIiR3aXRodmFsIiA9IHllcyA7IHRoZW4KKwljZl94X2F0aGVuYT1YYXdQbHVzCisJZWNobyAiJGFjX3QiInllcyIgMT4mNgorZWxzZQorCWVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFhleHRDcmVhdGVFeHRlbnNpb24gaW4gLWxYZXh0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MjA4OiBjaGVja2luZyBmb3IgWGV4dENyZWF0ZUV4dGVuc2lvbiBpbiAtbFhleHQiID4mNQorYWNfbGliX3Zhcj1gZWNobyBYZXh0J18nWGV4dENyZWF0ZUV4dGVuc2lvbiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxYZXh0ICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDYyMTYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBYZXh0Q3JlYXRlRXh0ZW5zaW9uKCk7CisKK2ludCBtYWluKCkgeworWGV4dENyZWF0ZUV4dGVuc2lvbigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjIyNzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgTElCUz0iLWxYZXh0ICRMSUJTIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworY2ZfeF9hdGhlbmFfbGliPSIiCisKKworY2ZfeF9hdGhlbmFfcm9vdD0kY2ZfeF9hdGhlbmEKK2NmX3hfYXRoZW5hX2luY2x1ZGU9IiIKKworZm9yIGNmX3BhdGggaW4gZGVmYXVsdCBcCisJL3Vzci9jb250cmliL1gxMVI2IFwKKwkvdXNyL2NvbnRyaWIvWDExUjUgXAorCS91c3IvbGliL1gxMVI1IFwKKwkvdXNyL2xvY2FsCitkbworCWlmIHRlc3QgLXogIiRjZl94X2F0aGVuYV9pbmNsdWRlIiA7IHRoZW4KKwkJY2Zfc2F2ZT0iJENQUEZMQUdTIgorCQljZl90ZXN0PVgxMS8kY2ZfeF9hdGhlbmFfcm9vdC9TaW1wbGVNZW51LmgKKwkJaWYgdGVzdCAkY2ZfcGF0aCAhPSBkZWZhdWx0IDsgdGhlbgorCQkJQ1BQRkxBR1M9Ii1JJGNmX3BhdGgvaW5jbHVkZSAkY2Zfc2F2ZSIKKwkJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkY2ZfdGVzdCBpbiAkY2ZfcGF0aCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjI2NjogY2hlY2tpbmcgZm9yICRjZl90ZXN0IGluICRjZl9wYXRoIiA+JjUKKwkJZWxzZQorCQkJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRjZl90ZXN0IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MjY5OiBjaGVja2luZyBmb3IgJGNmX3Rlc3QiID4mNQorCQlmaQorCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2MjcyICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDwkY2ZfdGVzdD4KK2ludCBtYWluKCkgeworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjI4MTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisJCWVjaG8gIiRhY190IiIkY2ZfcmVzdWx0IiAxPiY2CisJCWlmIHRlc3QgIiRjZl9yZXN1bHQiID0geWVzIDsgdGhlbgorCQkJY2ZfeF9hdGhlbmFfaW5jbHVkZT0kY2ZfcGF0aAorCQkJYnJlYWsKKwkJZWxzZQorCQkJQ1BQRkxBR1M9IiRjZl9zYXZlIgorCQlmaQorCWZpCitkb25lCisKK2lmIHRlc3QgLXogIiRjZl94X2F0aGVuYV9pbmNsdWRlIiA7IHRoZW4KKwllY2hvICJjb25maWd1cmU6IHdhcm5pbmc6IFVuYWJsZSB0byBzdWNjZXNzZnVsbHkgZmluZCBBdGhlbmEgaGVhZGVyIGZpbGVzIHdpdGggdGVzdCBwcm9ncmFtIiAxPiYyCitlbGlmIHRlc3QgIiRjZl94X2F0aGVuYV9pbmNsdWRlIiAhPSBkZWZhdWx0IDsgdGhlbgorCUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkY2ZfeF9hdGhlbmFfaW5jbHVkZSIKK2ZpCisKKworY2ZfeF9hdGhlbmFfcm9vdD0kY2ZfeF9hdGhlbmEKK2NmX3hfYXRoZW5hX2xpYj0iIgorCitmb3IgY2ZfcGF0aCBpbiBkZWZhdWx0IFwKKwkvdXNyL2NvbnRyaWIvWDExUjYgXAorCS91c3IvY29udHJpYi9YMTFSNSBcCisJL3Vzci9saWIvWDExUjUgXAorCS91c3IvbG9jYWwKK2RvCisJZm9yIGNmX2xpYiBpbiBcCisJCSItbCRjZl94X2F0aGVuYV9yb290IC1sWG11IiBcCisJCSItbCRjZl94X2F0aGVuYV9yb290IC1sWHBtIC1sWG11IiBcCisJCSItbCR7Y2ZfeF9hdGhlbmFfcm9vdH1fcyAtbFhtdV9zIgorCWRvCisJCWlmIHRlc3QgLXogIiRjZl94X2F0aGVuYV9saWIiIDsgdGhlbgorCQkJY2Zfc2F2ZT0iJExJQlMiCisJCQljZl90ZXN0PVhhd1NpbXBsZU1lbnVBZGRHbG9iYWxBY3Rpb25zCisJCQlpZiB0ZXN0ICRjZl9wYXRoICE9IGRlZmF1bHQgOyB0aGVuCisJCQkJTElCUz0iLUwkY2ZfcGF0aC9saWIgJGNmX2xpYiAkTElCUyIKKwkJCQllY2hvICRhY19uICJjaGVja2luZyBmb3IgJGNmX2xpYiBpbiAkY2ZfcGF0aCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjMyODogY2hlY2tpbmcgZm9yICRjZl9saWIgaW4gJGNmX3BhdGgiID4mNQorCQkJZWxzZQorCQkJCUxJQlM9IiRjZl9saWIgJExJQlMiCisJCQkJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRjZl90ZXN0IGluICRjZl9saWIiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjYzMzI6IGNoZWNraW5nIGZvciAkY2ZfdGVzdCBpbiAkY2ZfbGliIiA+JjUKKwkJCWZpCisJCQljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2MzM1ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7CiskY2ZfdGVzdCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjM0MjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKwkJCWVjaG8gIiRhY190IiIkY2ZfcmVzdWx0IiAxPiY2CisJCQlpZiB0ZXN0ICIkY2ZfcmVzdWx0IiA9IHllcyA7IHRoZW4KKwkJCQljZl94X2F0aGVuYV9saWI9IiRjZl9saWIiCisJCQkJYnJlYWsKKwkJCWZpCisJCQlMSUJTPSIkY2Zfc2F2ZSIKKwkJZmkKKwlkb25lCitkb25lCisKK2lmIHRlc3QgLXogIiRjZl94X2F0aGVuYV9saWIiIDsgdGhlbgorCXsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSBsaW5rIEF0aGVuYSBsaWJyYXJ5ICgtbCRjZl94X2F0aGVuYV9yb290KSB3aXRoIHRlc3QgcHJvZ3JhbSIgMT4mMjsgZXhpdCAxOyB9CitmaQorCisKK2NmX3hfYXRoZW5hX0xJQlM9YGVjaG8gIkhBVkVfTElCXyRjZl94X2F0aGVuYSIgfCBzZWQgeSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyVgCisKK2NhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRjZl94X2F0aGVuYV9MSUJTIDEKK0VPRgorCisKKworCisKKworZm9yIGFjX3Byb2cgaW4geGN1cnNlcy1jb25maWcKK2RvCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2MzgzOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfWENVUlNFU19DT05GSUcnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXNlICIkWENVUlNFU19DT05GSUciIGluCisgIC8qKQorICBhY19jdl9wYXRoX1hDVVJTRVNfQ09ORklHPSIkWENVUlNFU19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICA/Oi8qKQkJCSAKKyAgYWNfY3ZfcGF0aF9YQ1VSU0VTX0NPTkZJRz0iJFhDVVJTRVNfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgZG9zIHBhdGguCisgIDs7CisgICopCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCisgIGFjX2R1bW15PSIkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBhY19jdl9wYXRoX1hDVVJTRVNfQ09ORklHPSIkYWNfZGlyLyRhY193b3JkIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICA7OworZXNhYworZmkKK1hDVVJTRVNfQ09ORklHPSIkYWNfY3ZfcGF0aF9YQ1VSU0VTX0NPTkZJRyIKK2lmIHRlc3QgLW4gIiRYQ1VSU0VTX0NPTkZJRyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiIiRYQ1VSU0VTX0NPTkZJRyIgMT4mNgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKK3Rlc3QgLW4gIiRYQ1VSU0VTX0NPTkZJRyIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRYQ1VSU0VTX0NPTkZJRyIgfHwgWENVUlNFU19DT05GSUc9Im5vbmUiCisKKworaWYgdGVzdCAiJFhDVVJTRVNfQ09ORklHIiAhPSBub25lIDsgdGhlbgorCitDUFBGTEFHUz0iYCRYQ1VSU0VTX0NPTkZJRyAtLWNmbGFnc2AgJENQUEZMQUdTIgorTElCUz0iYCRYQ1VSU0VTX0NPTkZJRyAtLWxpYnNgICRMSUJTIgorCitjZl9jdl9saWJfWEN1cnNlcz15ZXMKKworZWxzZQorCitMREZMQUdTPSIkTERGTEFHUyAkWF9MSUJTIgorCit0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWNoZWNraW5nIGFkZGl0aW9ucyB0byBDRkxBR1MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjY0MzM6IHRlc3RpbmcgY2hlY2tpbmcgYWRkaXRpb25zIHRvIENGTEFHUyAuLi4iIDE+JjUKKworCitjZl9jaGVja19jZmxhZ3M9IiRDRkxBR1MiCitjZl9jaGVja19jcHBmbGFncz0iJENQUEZMQUdTIgorCitjZl9maXhfY3BwZmxhZ3M9bm8KK2NmX25ld19jZmxhZ3M9CitjZl9uZXdfY3BwZmxhZ3M9CitjZl9uZXdfZXh0cmFfY3BwZmxhZ3M9CisKK2ZvciBjZl9hZGRfY2ZsYWdzIGluICRYX0NGTEFHUworZG8KK2Nhc2UgJGNmX2ZpeF9jcHBmbGFncyBpbgorbm8pCisJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbiAjKHZpCisJLXVuZGVmfC1ub3N0ZGluYyp8LUkqfC1EKnwtVSp8LUV8LVB8LUMpICModmkKKwkJY2FzZSAkY2ZfYWRkX2NmbGFncyBpbgorCQktRCopCisJCQljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eLURbXj1dKj0nXCcnXCJbXiJdKi8vJ2AKKworCQkJdGVzdCAiJHtjZl9hZGRfY2ZsYWdzfSIgIT0gIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIHRlc3QgLXogIiR7Y2ZfdHN0X2NmbGFnc30iIFwKKwkJCSYmIGNmX2ZpeF9jcHBmbGFncz15ZXMKKworCQkJaWYgdGVzdCAkY2ZfZml4X2NwcGZsYWdzID0geWVzIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZWxpZiB0ZXN0ICIke2NmX3RzdF9jZmxhZ3N9IiA9ICJcIiciIDsgdGhlbgorCQkJCWNmX25ld19leHRyYV9jcHBmbGFncz0iJGNmX25ld19leHRyYV9jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCQljb250aW51ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwkJY2FzZSAiJENQUEZMQUdTIiBpbgorCQkqJGNmX2FkZF9jZmxhZ3MpICModmkKKwkJCTs7CisJCSopICModmkKKwkJCWNmX25ld19jcHBmbGFncz0iJGNmX25ld19jcHBmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwkqKQorCQljZl9uZXdfY2ZsYWdzPSIkY2ZfbmV3X2NmbGFncyAkY2ZfYWRkX2NmbGFncyIKKwkJOzsKKwllc2FjCisJOzsKK3llcykKKwljZl9uZXdfZXh0cmFfY3BwZmxhZ3M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJGNmX2FkZF9jZmxhZ3MiCisKKwljZl90c3RfY2ZsYWdzPWBlY2hvICR7Y2ZfYWRkX2NmbGFnc30gfHNlZCAtZSAncy9eW14iXSoiJ1wnJy8vJ2AKKworCXRlc3QgIiR7Y2ZfYWRkX2NmbGFnc30iICE9ICIke2NmX3RzdF9jZmxhZ3N9IiBcCisJJiYgdGVzdCAteiAiJHtjZl90c3RfY2ZsYWdzfSIgXAorCSYmIGNmX2ZpeF9jcHBmbGFncz1ubworCTs7Citlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY2ZsYWdzIiA7IHRoZW4KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZCB0byBcJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NjQ5NTogdGVzdGluZyBhZGQgdG8gXCRDRkxBR1MgJGNmX25ld19jZmxhZ3MgLi4uIiAxPiY1CisKKworCUNGTEFHUz0iJENGTEFHUyAkY2ZfbmV3X2NmbGFncyIKK2ZpCisKK2lmIHRlc3QgLW4gIiRjZl9uZXdfY3BwZmxhZ3MiIDsgdGhlbgorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJYWRkIHRvIFwkQ1BQRkxBR1MgJGNmX25ld19jcHBmbGFncyIgMT4mNgorCitlY2hvICIke2FzX21lLWNvbmZpZ3VyZX06NjUwNDogdGVzdGluZyBhZGQgdG8gXCRDUFBGTEFHUyAkY2ZfbmV3X2NwcGZsYWdzIC4uLiIgMT4mNQorCisKKwlDUFBGTEFHUz0iJGNmX25ld19jcHBmbGFncyAkQ1BQRkxBR1MiCitmaQorCitpZiB0ZXN0IC1uICIkY2ZfbmV3X2V4dHJhX2NwcGZsYWdzIiA7IHRoZW4KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWFkZCB0byBcJEVYVFJBX0NQUEZMQUdTICRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MiIDE+JjYKKworZWNobyAiJHthc19tZS1jb25maWd1cmV9OjY1MTM6IHRlc3RpbmcgYWRkIHRvIFwkRVhUUkFfQ1BQRkxBR1MgJGNmX25ld19leHRyYV9jcHBmbGFncyAuLi4iIDE+JjUKKworCisJRVhUUkFfQ1BQRkxBR1M9IiRjZl9uZXdfZXh0cmFfY3BwZmxhZ3MgJEVYVFJBX0NQUEZMQUdTIgorZmkKKworCisKKworaWYgdGVzdCAiJGNmX2NoZWNrX2NmbGFncyIgIT0gIiRDRkxBR1MiIDsgdGhlbgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjUyNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludCBtYWluKCkgeworcHJpbnRmKCJIZWxsbyB3b3JsZCIpOworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY1MzE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIHRlc3QgLW4gIiR2ZXJib3NlIiAmJiBlY2hvICIJdGVzdC1jb21waWxlIGZhaWxlZC4gIFVuZG9pbmcgY2hhbmdlIHRvIFwkQ0ZMQUdTIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo2NTM5OiB0ZXN0aW5nIHRlc3QtY29tcGlsZSBmYWlsZWQuICBVbmRvaW5nIGNoYW5nZSB0byBcJENGTEFHUyAuLi4iIDE+JjUKKworCisJIGlmIHRlc3QgIiRjZl9jaGVja19jcHBmbGFncyIgIT0gIiRDUFBGTEFHUyIgOyB0aGVuCisJCSB0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZWNobyAiCWJ1dCBrZWVwaW5nIGNoYW5nZSB0byBcJENQUEZMQUdTIiAxPiY2CisKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo2NTQ1OiB0ZXN0aW5nIGJ1dCBrZWVwaW5nIGNoYW5nZSB0byBcJENQUEZMQUdTIC4uLiIgMT4mNQorCisKKwkgZmkKKwkgQ0ZMQUdTPSIkY2ZfY2hlY2tfZmxhZ3MiCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgWE9wZW5EaXNwbGF5IGluIC1sWDExIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NTU1OiBjaGVja2luZyBmb3IgWE9wZW5EaXNwbGF5IGluIC1sWDExIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gWDExJ18nWE9wZW5EaXNwbGF5IHwgc2VkICd5JS4vKy0lX19wXyUnYAoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbFgxMSAkWF9QUkVfTElCUyAkTElCUyAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjU2MyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIFhPcGVuRGlzcGxheSgpOworCitpbnQgbWFpbigpIHsKK1hPcGVuRGlzcGxheSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjU3NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgTElCUz0iLWxYMTEgJExJQlMiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIFhDdXJzZXMgbGlicmFyeSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjU5NTogY2hlY2tpbmcgZm9yIFhDdXJzZXMgbGlicmFyeSIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfbGliX1hDdXJzZXMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK0xJQlM9Ii1sWEN1cnNlcyAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY2MDIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8eGN1cnNlcy5oPgorY2hhciAqWEN1cnNlc1Byb2dyYW1OYW1lID0gInRlc3QiOworCitpbnQgbWFpbigpIHsKK1hDdXJzZXNFeGl0KCk7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NjYxMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbGliX1hDdXJzZXM9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X2xpYl9YQ3Vyc2VzPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfbGliX1hDdXJzZXMiIDE+JjYKKworZmkKKworaWYgdGVzdCAkY2ZfY3ZfbGliX1hDdXJzZXMgPSB5ZXMgOyB0aGVuCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVOSVggMQorRU9GCisKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgWENVUlNFUyAxCitFT0YKKworCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX1hDVVJTRVMgMQorRU9GCisKK2Vsc2UKKwl7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IENhbm5vdCBsaW5rIHdpdGggWEN1cnNlcyIgMT4mMjsgZXhpdCAxOyB9CitmaQorCisJOzsKK2VzYWMKKworCisKK2Nhc2UgJGNmX2N2X3NjcmVlbiBpbiAjKHZpCitwZGN1cnNlcykgIyh2aQorCTs7CisqKQorCSMgbG9vayBmb3IgY3Vyc2VzLXJlbGF0ZWQgbGlicmFyaWVzCisJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG5ld19wYW5lbCBpbiAtbHBhbmVsJGNmX2N2X2xpYnR5cGUiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY2NTc6IGNoZWNraW5nIGZvciBuZXdfcGFuZWwgaW4gLWxwYW5lbCRjZl9jdl9saWJ0eXBlIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gcGFuZWwkY2ZfY3ZfbGlidHlwZSdfJ25ld19wYW5lbCB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxwYW5lbCRjZl9jdl9saWJ0eXBlICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY2NjUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBuZXdfcGFuZWwoKTsKKworaW50IG1haW4oKSB7CituZXdfcGFuZWwoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY2NzY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfbGliPUhBVkVfTElCYGVjaG8gcGFuZWwkY2ZfY3ZfbGlidHlwZSB8IHNlZCAtZSAncy9bXmEtekEtWjAtOV9dL18vZycgXAorICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9saWIgMQorRU9GCisKKyAgTElCUz0iLWxwYW5lbCRjZl9jdl9saWJ0eXBlICRMSUJTIgorCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBtZW51X2RyaXZlciBpbiAtbG1lbnUkY2ZfY3ZfbGlidHlwZSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NjcwNDogY2hlY2tpbmcgZm9yIG1lbnVfZHJpdmVyIGluIC1sbWVudSRjZl9jdl9saWJ0eXBlIiA+JjUKK2FjX2xpYl92YXI9YGVjaG8gbWVudSRjZl9jdl9saWJ0eXBlJ18nbWVudV9kcml2ZXIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sbWVudSRjZl9jdl9saWJ0eXBlICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY3MTIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBtZW51X2RyaXZlcigpOworCitpbnQgbWFpbigpIHsKK21lbnVfZHJpdmVyKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2NzIzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIG1lbnUkY2ZfY3ZfbGlidHlwZSB8IHNlZCAtZSAncy9bXmEtekEtWjAtOV9dL18vZycgXAorICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9saWIgMQorRU9GCisKKyAgTElCUz0iLWxtZW51JGNmX2N2X2xpYnR5cGUgJExJQlMiCisKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGZvcm1fZHJpdmVyIGluIC1sZm9ybSRjZl9jdl9saWJ0eXBlIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2NzUxOiBjaGVja2luZyBmb3IgZm9ybV9kcml2ZXIgaW4gLWxmb3JtJGNmX2N2X2xpYnR5cGUiID4mNQorYWNfbGliX3Zhcj1gZWNobyBmb3JtJGNmX2N2X2xpYnR5cGUnXydmb3JtX2RyaXZlciB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxmb3JtJGNmX2N2X2xpYnR5cGUgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjc1OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGZvcm1fZHJpdmVyKCk7CisKK2ludCBtYWluKCkgeworZm9ybV9kcml2ZXIoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY3NzA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfbGliPUhBVkVfTElCYGVjaG8gZm9ybSRjZl9jdl9saWJ0eXBlIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCisgICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2xpYiAxCitFT0YKKworICBMSUJTPSItbGZvcm0kY2ZfY3ZfbGlidHlwZSAkTElCUyIKKworZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKworCSMgbG9vayBmb3IgY3Vyc2VzLXJlbGF0ZWQgaGVhZGVycworCWZvciBhY19oZHIgaW4gXAorCQluY19hbGxvYy5oIFwKKwkJbm9tYWNyb3MuaCBcCisJCWZvcm0uaCBcCisJCW1lbnUuaCBcCisJCXBhbmVsLmggXAorCQkKK2RvCithY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfaGRyIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2ODA5OiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjgxNCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8JGFjX2hkcj4KK0VPRgorYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKK3sgKGV2YWwgZWNobyBjb25maWd1cmU6NjgxOTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK2FjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKK2lmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSAkYWNfdHJfaGRyIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKwk7OworZXNhYworCitlY2hvICRhY19uICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjY4NDk6IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9zaWduYWwnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2ODU0ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBzaWduYWwKKyN1bmRlZiBzaWduYWwKKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHZvaWQgKCpzaWduYWwgKGludCwgdm9pZCAoKikoaW50KSkpKGludCk7CisjZWxzZQordm9pZCAoKnNpZ25hbCAoKSkgKCk7CisjZW5kaWYKKworaW50IG1haW4oKSB7CitpbnQgaTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2ODcxOiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl90eXBlX3NpZ25hbD1pbnQKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKK2VjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9zaWduYWwiIDE+JjYKK2NhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFJFVFNJR1RZUEUgJGFjX2N2X3R5cGVfc2lnbmFsCitFT0YKKworCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo2ODkxOiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX3N0ZGMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2ODk2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorRU9GCithY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgoreyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo2OTA0OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAoraWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFjX2VyciIgPiY1CisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDY5MjEgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgIGVncmVwICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICA6CitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNjkzOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CitFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgZWdyZXAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICA6CitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA2OTYwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2RlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQgbWFpbiAoKSB7IGludCBpOyBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCitpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKSBleGl0KDIpOworZXhpdCAoMCk7IH0KKworRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjY5NzE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK3RoZW4KKyAgOgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLWZyIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKK2ZpCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X2hlYWRlcl9zdGRjIiAxPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKK0VPRgorCitmaQorCitlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6Njk5NTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl90aW1lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzAwMCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CitpbnQgbWFpbigpIHsKK3N0cnVjdCB0bSAqdHA7Cis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzAwOTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2hlYWRlcl90aW1lPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBhY19jdl9oZWFkZXJfdGltZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfdGltZSIgMT4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3RpbWUgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCitFT0YKKworZmkKKworZm9yIGFjX2hkciBpbiBcCitnZXRvcHQuaCBcCitsb2NhbGUuaCBcCitzdGRhcmcuaCBcCitzeXMvaW9jdGwuaCBcCitzeXMvc2VsZWN0LmggXAorc3lzL3RpbWUuaCBcCit0ZXJtaW9zLmggXAordW5pc3RkLmggXAorCitkbworYWNfc2FmZT1gZWNobyAiJGFjX2hkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzA0MjogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcwNDcgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPCRhY19oZHI+CitFT0YKK2FjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCit7IChldmFsIGVjaG8gY29uZmlndXJlOjcwNTI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CithY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCitpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCitlbHNlCisgIGVjaG8gIiRhY19lcnIiID4mNQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICAgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICRhY19oZHIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKKyAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGFjX3RyX2hkciAxCitFT0YKKyAKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorZG9uZQorCisKK2ZvciBhY19mdW5jIGluIFwKK2dldHRpbWVvZmRheSBcCittYmxlbiBcCittYnJsZW4gXAorbWJydG93YyBcCittYnNydG93Y3MgXAorbWJzdG93Y3MgXAorbWJ0b3djIFwKK3N0cmR1cCBcCit3Y3NydG9tYnMgXAord2NzdG9tYnMgXAorCitkbworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19mdW5jIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MDkzOiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfJGFjX2Z1bmMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3MDk4ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93LiAgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgJGFjX2Z1bmMoKTsKKworaW50IG1haW4oKSB7CisKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKKyRhY19mdW5jKCk7CisjZW5kaWYKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcxMjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2Z1bmNfJGFjX2Z1bmM9eWVzIgorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9mdW5jXyRhY19mdW5jPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorZmkKKworaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nJGFjX2Z1bmNgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgICBhY190cl9mdW5jPUhBVkVfYGVjaG8gJGFjX2Z1bmMgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRhY190cl9mdW5jIDEKK0VPRgorIAorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCitkb25lCisKKworCitlY2hvICRhY19uICJjaGVja2luZyBpZiB3ZSBtdXN0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MTQ4OiBjaGVja2luZyBpZiB3ZSBtdXN0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzE1NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworCisJbG9uZyB4ID0gd2lubnN0cihzdGRzY3IsICIiLCAwKTsKKwlpbnQgeDEsIHkxOworCWdldGJlZ3l4KHN0ZHNjciwgeTEsIHgxKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcxNjY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X25lZWRfeG9wZW5fZXh0ZW5zaW9uPW5vCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDcxNzQgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworCisJbG9uZyB4ID0gd2lubnN0cihzdGRzY3IsICIiLCAwKTsKKwlpbnQgeDEsIHkxOworCWdldGJlZ3l4KHN0ZHNjciwgeTEsIHgxKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcxODc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X25lZWRfeG9wZW5fZXh0ZW5zaW9uPXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbj11bmtub3duCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X25lZWRfeG9wZW5fZXh0ZW5zaW9uIiAxPiY2Cit0ZXN0ICRjZl9jdl9uZWVkX3hvcGVuX2V4dGVuc2lvbiA9IHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCIKKworCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGVybS5oIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3MjA2OiBjaGVja2luZyBmb3IgdGVybS5oIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl90ZXJtX2hlYWRlcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCisjIElmIHdlIGZvdW5kIDxuY3Vyc2VzL2N1cnNlcy5oPiwgbG9vayBmb3IgPG5jdXJzZXMvdGVybS5oPiwgYnV0IGFsd2F5cyBsb29rCisjIGZvciA8dGVybS5oPiBpZiB3ZSBkbyBub3QgZmluZCB0aGUgdmFyaWFudC4KK2ZvciBjZl9oZWFkZXIgaW4gXAorCWBlY2hvICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9IHwgc2VkIC1lICdzJS8uKiUvJSdgdGVybS5oIFwKKwl0ZXJtLmgKK2RvCisJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzIxOSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpbmNsdWRlIDwke2NmX2hlYWRlcn0+CitpbnQgbWFpbigpIHsKK1dJTkRPVyAqeAorOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjcyMjg6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl90ZXJtX2hlYWRlcj0kY2ZfaGVhZGVyCisJIGJyZWFrCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3Rlcm1faGVhZGVyPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitkb25lCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfdGVybV9oZWFkZXIiIDE+JjYKKworY2FzZSAkY2ZfY3ZfdGVybV9oZWFkZXIgaW4gIyh2aQordGVybS5oKSAjKHZpCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfVEVSTV9IIDEKK0VPRgorCisJOzsKK25jdXJzZXMvdGVybS5oKQorCWNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX05DVVJTRVNfVEVSTV9IIDEKK0VPRgorCisJOzsKK25jdXJzZXN3L3Rlcm0uaCkKKwljYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgSEFWRV9OQ1VSU0VTV19URVJNX0ggMQorRU9GCisKKwk7OworZXNhYworCisKKworCitmb3IgY2ZfZnVuYyBpbiBcCitjaGdhdCBcCitjb2xvcl9zZXQgXAorZmlsdGVyIFwKK2dldGJlZ3ggXAorZ2V0Y3VyeCBcCitnZXRtYXh4IFwKK2dldG5zdHIgXAorZ2V0cGFyeCBcCitnZXR3aW4gXAorbXZ2bGluZSBcCittdnd2bGluZSBcCituYXBtcyBcCitwdXR3aW4gXAorcmVzaXplX3Rlcm0gXAorcmVzaXpldGVybSBcCityaXBvZmZsaW5lIFwKK3NldHVwdGVybSBcCitzbGtfY29sb3IgXAorc2xrX2luaXQgXAordGVybWF0dHJzIFwKK3RnZXRlbnQgXAordGlnZXRudW0gXAordGlnZXRzdHIgXAordHlwZWFoZWFkIFwKK3VzZV9kZWZhdWx0X2NvbG9ycyBcCit2c3NjYW5mIFwKK3djaGdhdCBcCit3aW5zc3RyIFwKK3dyZXNpemUgXAorCitkbworCQorY2ZfdHJfZnVuYz1gZWNobyAiJGNmX2Z1bmMiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCisJZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICR7Y2ZfZnVuY30iIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjczMDU6IGNoZWNraW5nIGZvciAke2NmX2Z1bmN9IiA+JjUKKwkKK2VjaG8gIiR7YXNfbWUtY29uZmlndXJlfTo3MzA3OiB0ZXN0aW5nICR7Y2ZfZnVuY30gLi4uIiAxPiY1CisKKwlpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3ZfZnVuY18kY2ZfZnVuYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorCQlldmFsIGNmX3Jlc3VsdD0nJGFjX2N2X2Z1bmNfJyRjZl9mdW5jCisJCWlmIHRlc3QgIi4kY2ZfcmVzdWx0IiAhPSAiLm5vIjsgdGhlbgorCQkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzMxNiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZmRlZiBIQVZFX1hDVVJTRVMKKyNpbmNsdWRlIDx4Y3Vyc2VzLmg+CitjaGFyICogWEN1cnNlc1Byb2dyYW1OYW1lID0gInRlc3QiOworI2Vsc2UKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgZGVmaW5lZChIQVZFX05DVVJTRVNXX1RFUk1fSCkKKyNpbmNsdWRlIDxuY3Vyc2Vzdy90ZXJtLmg+CisjZWxzZQorI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKEhBVkVfTkNVUlNFU19URVJNX0gpCisjaW5jbHVkZSA8bmN1cnNlcy90ZXJtLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfVEVSTV9ICisjaW5jbHVkZSA8dGVybS5oPgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCitpbnQgbWFpbigpIHsKKworI2lmbmRlZiAke2NmX2Z1bmN9Citsb25nIGZvbyA9IChsb25nKSgmJHtjZl9mdW5jfSk7Ciske2NmX2N2X21haW5fcmV0dXJuLXJldHVybn0oZm9vID09IDApOworI2VuZGlmCisJCQkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3MzQ1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCQlmaQorCQlldmFsICdjZl9jdl9mdW5jXyckY2ZfZnVuYyc9JGNmX3Jlc3VsdCcKKwkKK2ZpCisKKwkjIHVzZSB0aGUgY29tcHV0ZWQvcmV0cmlldmVkIGNhY2hlLXZhbHVlOgorCWV2YWwgJ2NmX3Jlc3VsdD0kY2ZfY3ZfZnVuY18nJGNmX2Z1bmMKKwllY2hvICIkYWNfdCIiJGNmX3Jlc3VsdCIgMT4mNgorCWlmIHRlc3QgJGNmX3Jlc3VsdCAhPSBubzsgdGhlbgorCQljYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBIQVZFXyR7Y2ZfdHJfZnVuY30gMQorRU9GCisKKwlmaQorZG9uZQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciBuY3Vyc2VzIGV4dGVuZGVkIGZ1bmN0aW9ucyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzM3MzogY2hlY2tpbmcgZm9yIG5jdXJzZXMgZXh0ZW5kZWQgZnVuY3Rpb25zIiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9uY3Vyc2VzX2V4dF9mdW5jcycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzM3OSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworCisJKHZvaWQpIGFzc3VtZV9kZWZhdWx0X2NvbG9ycyAoMCwgMCk7CisJKHZvaWQpIGN1cnNlc192ZXJzaW9uICgpOworCSh2b2lkKSBkZWZpbmVfa2V5ICgwLCAwKTsKKwkodm9pZCkgaXNfdGVybV9yZXNpemVkICgwLCAwKTsKKwkodm9pZCkga2V5X2RlZmluZWQgKDApOworCSh2b2lkKSBrZXlib3VuZCAoMCwgMCk7CisJKHZvaWQpIGtleW9rICgwLCAwKTsKKwkodm9pZCkgcmVzaXplX3Rlcm0gKDAsIDApOworCSh2b2lkKSByZXNpemV0ZXJtICgwLCAwKTsKKwkodm9pZCkgdXNlX2RlZmF1bHRfY29sb3JzICgpOworCSh2b2lkKSB1c2VfZXh0ZW5kZWRfbmFtZXMgKDApOworCSh2b2lkKSB3cmVzaXplICgwLCAwLCAwKTsKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3Mzk5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9uY3Vyc2VzX2V4dF9mdW5jcz15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3ZfbmN1cnNlc19leHRfZnVuY3M9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9uY3Vyc2VzX2V4dF9mdW5jcyIgMT4mNgordGVzdCAiJGNmX2N2X25jdXJzZXNfZXh0X2Z1bmNzIiAhPSBubyAmJiBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgTkNVUlNFU19FWFRfRlVOQ1MgMQorRU9GCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzQxOTogY2hlY2tpbmcgZm9yIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyIgPiY1CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snY2ZfY3Zfd2lkZWNoYXJfZnVuY3MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc0MjUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKKworCXN0YXRpYyB3Y2hhcl90IHNyY193Y2hhclsyXTsKKwlzdGF0aWMgY2NoYXJfdCBkc3RfY2NoYXI7CisJc2V0Y2NoYXIoJmRzdF9jY2hhciwgc3JjX3djaGFyLCBBX05PUk1BTCwgMCwgKHZvaWQgKikgMCk7CisJCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzQzNzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3Zfd2lkZWNoYXJfZnVuY3M9eWVzCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X3dpZGVjaGFyX2Z1bmNzPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3Zfd2lkZWNoYXJfZnVuY3MiIDE+JjYKK2lmIHRlc3QgIiRjZl9jdl93aWRlY2hhcl9mdW5jcyIgIT0gbm8gOyB0aGVuCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9XSURFQ19TVVBQT1JUIDEKK0VPRgorCitlbHNlCisJY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIFVTRV9XSURFQ19TVVBQT1JUIDAKK0VPRgorCitmaQorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGlmIHN5cy90aW1lLmggd29ya3Mgd2l0aCBzeXMvc2VsZWN0LmgiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc0NjU6IGNoZWNraW5nIGlmIHN5cy90aW1lLmggd29ya3Mgd2l0aCBzeXMvc2VsZWN0LmgiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X3N5c190aW1lX3NlbGVjdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIAorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzQ3MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKworaW50IG1haW4oKSB7CisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3NDg2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfY3Zfc3lzX3RpbWVfc2VsZWN0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9jdl9zeXNfdGltZV9zZWxlY3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKyAgICAgCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X3N5c190aW1lX3NlbGVjdCIgMT4mNgordGVzdCAiJGNmX2N2X3N5c190aW1lX3NlbGVjdCIgPSB5ZXMgJiYgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVfU0VMRUNUIDEKK0VPRgorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGZ1bmN0aW9uIGN1cnNlc192ZXJzaW9uIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NTA3OiBjaGVja2luZyBmb3IgZnVuY3Rpb24gY3Vyc2VzX3ZlcnNpb24iID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb24nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGNmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb249dW5rbm93bgorZWxzZQorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3NTE2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKQoreworCWNoYXIgdGVtcFsxMDI0XTsKKwlzcHJpbnRmKHRlbXAsICIlc1xuIiwgY3Vyc2VzX3ZlcnNpb24oKSk7CisJJHtjZl9jdl9tYWluX3JldHVybi1yZXR1cm59KDApOworfQorCitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzUyODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAordGhlbgorICBjZl9jdl9mdW5jX2N1cnNlc192ZXJzaW9uPXllcworCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtZnIgY29uZnRlc3QqCisgIGNmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb249bm8KKworZmkKK3JtIC1mciBjb25mdGVzdCoKK2ZpCisKK3JtIC1mIGNvcmUKK2ZpCisKK2VjaG8gIiRhY190IiIkY2ZfY3ZfZnVuY19jdXJzZXNfdmVyc2lvbiIgMT4mNgordGVzdCAiJGNmX2N2X2Z1bmNfY3Vyc2VzX3ZlcnNpb24iID0geWVzICYmIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX0NVUlNFU19WRVJTSU9OIDEKK0VPRgorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGFycmF5IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NTUzOiBjaGVja2luZyBmb3IgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgYXJyYXkiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2NmX2N2X2N1cnNlc19hY3NfbWFwJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgCitjZl9jdl9jdXJzZXNfYWNzX21hcD11bmtub3duCitmb3IgbmFtZSBpbiBhY3NfbWFwIF9hY3NfbWFwIF9fYWNzX21hcCBfbmNfYWNzX21hcAorZG8KK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc1NjIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CisKK2ludCBtYWluKCkgeworCiskbmFtZVsnayddID0gQUNTX1BMVVMKKworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc1NzM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X2N1cnNlc19hY3NfbWFwPSRuYW1lOyBicmVhaworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdCoKK2RvbmUKKworZmkKKworZWNobyAiJGFjX3QiIiRjZl9jdl9jdXJzZXNfYWNzX21hcCIgMT4mNgorCit0ZXN0ICIkY2ZfY3ZfY3Vyc2VzX2Fjc19tYXAiICE9IHVua25vd24gJiYgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgQ1VSU0VTX0FDU19BUlJBWSAkY2ZfY3ZfY3Vyc2VzX2Fjc19tYXAKK0VPRgorCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHdpZGUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQgYXJyYXkiIi4uLiAkYWNfYyIgMT4mNgorZWNobyAiY29uZmlndXJlOjc1OTQ6IGNoZWNraW5nIGZvciB3aWRlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IGFycmF5IiA+JjUKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydjZl9jdl9jdXJzZXNfd2Fjc19tYXAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICAKKwljZl9jdl9jdXJzZXNfd2Fjc19tYXA9dW5rbm93bgorCWZvciBuYW1lIGluIHdhY3NfbWFwIF93YWNzX21hcCBfX3dhY3NfbWFwIF9uY193YWNzCisJZG8KKwljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA3NjAzICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNlbmRpZgorI2luY2x1ZGUgPCR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9PgoraW50IG1haW4oKSB7CiskbmFtZVsnayddID0gKldBQ1NfUExVUworOyByZXR1cm4gMDsgfQorRU9GCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2MTQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX2N2X2N1cnNlc193YWNzX21hcD0kbmFtZQorCSBicmVhaworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2ZpCitybSAtZiBjb25mdGVzdCoKKwlkb25lCitmaQorCitlY2hvICIkYWNfdCIiJGNmX2N2X2N1cnNlc193YWNzX21hcCIgMT4mNgorCisKK2VjaG8gJGFjX24gImNoZWNraW5nIGZvciB0eXBlIGF0dHJfdCBpbiAke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofSIiLi4uICRhY19jIiAxPiY2CitlY2hvICJjb25maWd1cmU6NzYzMDogY2hlY2tpbmcgZm9yIHR5cGUgYXR0cl90IGluICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9IiA+JjUKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDc2MzIgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2VuZGlmCisjaW5jbHVkZSA8JHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0+CitpbnQgbWFpbigpIHsKKworYXR0cl90IGZvbworCis7IHJldHVybiAwOyB9CitFT0YKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzY0NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGNmX3Jlc3VsdD15ZXMKK2Vsc2UKKyAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCitlY2hvICIkYWNfdCIiJGNmX3Jlc3VsdCIgMT4mNgoraWYgdGVzdCAkY2ZfcmVzdWx0ID0geWVzIDsgdGhlbgorCQorY2ZfcmVzdWx0PWBlY2hvICJoYXZlX3R5cGVfYXR0cl90IiB8IHNlZCB5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJWAKKworCWNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lICRjZl9yZXN1bHQgMQorRU9GCisKK2Vsc2UKKwljYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorI2RlZmluZSBhdHRyX3QgbG9uZworRU9GCisKK2ZpCisKKworZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHR5cGUgbWJzdGF0ZV90IGluICR7Y2ZfY3ZfbmN1cnNlc19oZWFkZXItY3Vyc2VzLmh9IiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTo3NjczOiBjaGVja2luZyBmb3IgdHlwZSBtYnN0YXRlX3QgaW4gJHtjZl9jdl9uY3Vyc2VzX2hlYWRlci1jdXJzZXMuaH0iID4mNQorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgNzY3NSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVECisjZW5kaWYKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT4KK2ludCBtYWluKCkgeworCittYnN0YXRlX3QgZm9vCisKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3Njg4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgY2ZfcmVzdWx0PXllcworZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBjZl9yZXN1bHQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKK2VjaG8gIiRhY190IiIkY2ZfcmVzdWx0IiAxPiY2CitpZiB0ZXN0ICRjZl9yZXN1bHQgPSB5ZXMgOyB0aGVuCisJCitjZl9yZXN1bHQ9YGVjaG8gImhhdmVfdHlwZV9tYnN0YXRlX3QiIHwgc2VkIHklYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lYAorCisJY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKyNkZWZpbmUgJGNmX3Jlc3VsdCAxCitFT0YKKworZWxzZQorCWNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIG1ic3RhdGVfdCBsb25nCitFT0YKKworZmkKKworCitURVNUX0FSR1M9IiRMSUJTIgorTElCUz0KKworCit0cmFwICcnIDEgMiAxNQorY2F0ID4gY29uZmNhY2hlIDw8XEVPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMuICBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuCisjIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0IHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgQnkgZGVmYXVsdCwgY29uZmlndXJlIHVzZXMgLi9jb25maWcuY2FjaGUgYXMgdGhlIGNhY2hlIGZpbGUsCisjIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXMgbm90IGV4aXN0IGFscmVhZHkuICBZb3UgY2FuIGdpdmUgY29uZmlndXJlCisjIHRoZSAtLWNhY2hlLWZpbGU9RklMRSBvcHRpb24gdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlIGZpbGU7IHRoYXQgaXMKKyMgd2hhdCBjb25maWd1cmUgZG9lcyB3aGVuIGl0IGNhbGxzIGNvbmZpZ3VyZSBzY3JpcHRzIGluCisjIHN1YmRpcmVjdG9yaWVzLCBzbyB0aGV5IHNoYXJlIHRoZSBjYWNoZS4KKyMgR2l2aW5nIC0tY2FjaGUtZmlsZT0vZGV2L251bGwgZGlzYWJsZXMgY2FjaGluZywgZm9yIGRlYnVnZ2luZyBjb25maWd1cmUuCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdCB0aGUKKyMgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCitFT0YKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgZG9uJ3QgcHV0IG5ld2xpbmVzIGluIGNhY2hlIHZhcmlhYmxlcycgdmFsdWVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKHNldCkgMj4mMSB8CisgIGNhc2UgYChhY19zcGFjZT0nICc7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICphY19zcGFjZT1cICopCisgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZSBzdWJzdGl0dXRpb24KKyAgICAjIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgIHNlZCAtbiBcCisgICAgICAtZSAicy8nLydcXFxcJycvZyIgXAorICAgICAgLWUgInMvXlxcKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlxcKT1cXCguKlxcKS9cXDE9XCR7XFwxPSdcXDInfS9wIgorICAgIDs7CisgICopCisgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICBzZWQgLW4gLWUgJ3MvXlwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXCk9XCguKlwpL1wxPSR7XDE9XDJ9L3AnCisgICAgOzsKKyAgZXNhYyA+PiBjb25mY2FjaGUKK2lmIGNtcCAtcyAkY2FjaGVfZmlsZSBjb25mY2FjaGU7IHRoZW4KKyAgOgorZWxzZQorICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCisgICAgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCisgICAgY2F0IGNvbmZjYWNoZSA+ICRjYWNoZV9maWxlCisgIGVsc2UKKyAgICBlY2hvICJub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordHJhcCAncm0gLWZyIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29yZSBjb3JlLiogKi5jb3JlICRhY19jbGVhbl9maWxlczsgZXhpdCAxJyAxIDIgMTUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKKyMgQW55IGFzc2lnbm1lbnQgdG8gVlBBVEggY2F1c2VzIFN1biBtYWtlIHRvIG9ubHkgZXhlY3V0ZQorIyB0aGUgZmlyc3Qgc2V0IG9mIGRvdWJsZS1jb2xvbiBydWxlcywgc28gcmVtb3ZlIGl0IGlmIG5vdCBuZWVkZWQuCisjIElmIHRoZXJlIGlzIGEgY29sb24gaW4gdGhlIHBhdGgsIHdlIG5lZWQgdG8ga2VlcCBpdC4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsgCV0qVlBBVEhbIAldKj1bXjpdKiQvZCcKK2ZpCisKK3RyYXAgJ3JtIC1mICRDT05GSUdfU1RBVFVTIGNvbmZ0ZXN0KjsgZXhpdCAxJyAxIDIgMTUKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworIyBXaXRob3V0IHRoZSAiLi8iLCBzb21lIHNoZWxscyBsb29rIGluIFBBVEggZm9yIGNvbmZpZy5zdGF0dXMuCis6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CisKK2VjaG8gY3JlYXRpbmcgJENPTkZJR19TVEFUVVMKK3JtIC1mICRDT05GSUdfU1RBVFVTCitjYXQgPiAkQ09ORklHX1NUQVRVUyA8PEVPRgorIyEgL2Jpbi9zaAorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMgVGhpcyBkaXJlY3Rvcnkgd2FzIGNvbmZpZ3VyZWQgYXMgZm9sbG93cywKKyMgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjCisjICQwICRhY19jb25maWd1cmVfYXJncworIworIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIC4vY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2FjX2NzX3VzYWdlPSJVc2FnZTogJENPTkZJR19TVEFUVVMgWy0tcmVjaGVja10gWy0tdmVyc2lvbl0gWy0taGVscF0iCitmb3IgYWNfb3B0aW9uCitkbworICBjYXNlICJcJGFjX29wdGlvbiIgaW4KKyAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCisgICAgZWNobyAicnVubmluZyBcJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJDAgJGFjX2NvbmZpZ3VyZV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIgorICAgIGV4ZWMgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7OworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdikKKyAgICBlY2hvICIkQ09ORklHX1NUQVRVUyBnZW5lcmF0ZWQgYnkgYXV0b2NvbmYgdmVyc2lvbiAyLjEzLjIwMDMwOTI3IgorICAgIGV4aXQgMCA7OworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC0taCkKKyAgICBlY2hvICJcJGFjX2NzX3VzYWdlIjsgZXhpdCAwIDs7CisgICopIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBleGl0IDEgOzsKKyAgZXNhYworZG9uZQorCithY19naXZlbl9zcmNkaXI9JHNyY2RpcgorCit0cmFwICdybSAtZnIgYGVjaG8gIk1ha2VmaWxlIG5jdXJzZXNfY2ZnLmg6bmN1cnNlc190c3QuaGluIiB8IHNlZCAicy86W14gXSovL2ciYCBjb25mdGVzdCo7IGV4aXQgMScgMSAyIDE1CitFT0YKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorCisjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorc2VkICdzLyVAL0BALzsgcy9AJS9AQC87IHMvJWdcJC9AZy87IC9AZ1wkL3MvW1xcXFwmJV0vXFxcXCYvZzsKKyBzL0BALyVALzsgcy9AQC9AJS87IHMvQGdcJC8lZy8nID4gY29uZnRlc3Quc3VicyA8PFxcQ0VPRgorJGFjX3Zwc3ViCiskZXh0cmFzdWIKK3MlQFNIRUxMQCUkU0hFTEwlZworcyVAQ0ZMQUdTQCUkQ0ZMQUdTJWcKK3MlQENQUEZMQUdTQCUkQ1BQRkxBR1MlZworcyVAQ1hYRkxBR1NAJSRDWFhGTEFHUyVnCitzJUBGRkxBR1NAJSRGRkxBR1MlZworcyVAREVGU0AlJERFRlMlZworcyVATERGTEFHU0AlJExERkxBR1MlZworcyVATElCU0AlJExJQlMlZworcyVAZXhlY19wcmVmaXhAJSRleGVjX3ByZWZpeCVnCitzJUBwcmVmaXhAJSRwcmVmaXglZworcyVAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAlJHByb2dyYW1fdHJhbnNmb3JtX25hbWUlZworcyVAYmluZGlyQCUkYmluZGlyJWcKK3MlQHNiaW5kaXJAJSRzYmluZGlyJWcKK3MlQGxpYmV4ZWNkaXJAJSRsaWJleGVjZGlyJWcKK3MlQGRhdGFkaXJAJSRkYXRhZGlyJWcKK3MlQHN5c2NvbmZkaXJAJSRzeXNjb25mZGlyJWcKK3MlQHNoYXJlZHN0YXRlZGlyQCUkc2hhcmVkc3RhdGVkaXIlZworcyVAbG9jYWxzdGF0ZWRpckAlJGxvY2Fsc3RhdGVkaXIlZworcyVAbGliZGlyQCUkbGliZGlyJWcKK3MlQGluY2x1ZGVkaXJAJSRpbmNsdWRlZGlyJWcKK3MlQG9sZGluY2x1ZGVkaXJAJSRvbGRpbmNsdWRlZGlyJWcKK3MlQGluZm9kaXJAJSRpbmZvZGlyJWcKK3MlQG1hbmRpckAlJG1hbmRpciVnCitzJUBob3N0QCUkaG9zdCVnCitzJUBob3N0X2FsaWFzQCUkaG9zdF9hbGlhcyVnCitzJUBob3N0X2NwdUAlJGhvc3RfY3B1JWcKK3MlQGhvc3RfdmVuZG9yQCUkaG9zdF92ZW5kb3IlZworcyVAaG9zdF9vc0AlJGhvc3Rfb3MlZworcyVAU0VUX01BS0VAJSRTRVRfTUFLRSVnCitzJUBDQ0AlJENDJWcKK3MlQENQUEAlJENQUCVnCitzJUBBV0tAJSRBV0slZworcyVAQ0NfR19PUFRAJSRDQ19HX09QVCVnCitzJUBDQ19TSEFSRURfT1BUU0AlJENDX1NIQVJFRF9PUFRTJWcKK3MlQERGVF9ERVBfU1VGRklYQCUkREZUX0RFUF9TVUZGSVglZworcyVAREZUX09CSl9TVUJESVJAJSRERlRfT0JKX1NVQkRJUiVnCitzJUBERlRfVVBSX01PREVMQCUkREZUX1VQUl9NT0RFTCVnCitzJUBMREAlJExEJWcKK3MlQExERkxBR1NfU0hBUkVEQCUkTERGTEFHU19TSEFSRUQlZworcyVATERGTEFHU19TVEFUSUNAJSRMREZMQUdTX1NUQVRJQyVnCitzJUBMRF9NT0RFTEAlJExEX01PREVMJWcKK3MlQExEX1NIQVJFRF9PUFRTQCUkTERfU0hBUkVEX09QVFMlZworcyVATElCVE9PTEAlJExJQlRPT0wlZworcyVATElCX0NMRUFOQCUkTElCX0NMRUFOJWcKK3MlQExJQl9DT01QSUxFQCUkTElCX0NPTVBJTEUlZworcyVATElCX0xJTktAJSRMSUJfTElOSyVnCitzJUBMSU5LX1RFU1RTQCUkTElOS19URVNUUyVnCitzJUBMSU5UQCUkTElOVCVnCitzJUBMSU5UX09QVFNAJSRMSU5UX09QVFMlZworcyVATE9DQUxfTERGTEFHU0AlJExPQ0FMX0xERkxBR1MlZworcyVATUFUSF9MSUJAJSRNQVRIX0xJQiVnCitzJUBQVEhSRUFEQCUkUFRIUkVBRCVnCitzJUBURVNUX0FSR1NAJSRURVNUX0FSR1MlZworcyVAVEVTVF9ERVBTQCUkVEVTVF9ERVBTJWcKK3MlQFRFU1RfTElCU0AlJFRFU1RfTElCUyVnCitzJUBUSU5GT19BUkdTQCUkVElORk9fQVJHUyVnCitzJUBjZl9jdl9hYmlfdmVyc2lvbkAlJGNmX2N2X2FiaV92ZXJzaW9uJWcKK3MlQGNmX2N2X3JlbF92ZXJzaW9uQCUkY2ZfY3ZfcmVsX3ZlcnNpb24lZworcyVARVhFRVhUQCUkRVhFRVhUJWcKK3MlQE9CSkVYVEAlJE9CSkVYVCVnCitzJUBFWFRSQV9DUFBGTEFHU0AlJEVYVFJBX0NQUEZMQUdTJWcKK3MlQEVDSE9fTFRAJSRFQ0hPX0xUJWcKK3MlQEVDSE9fTERAJSRFQ0hPX0xEJWcKK3MlQFJVTEVfQ0NAJSRSVUxFX0NDJWcKK3MlQFNIT1dfQ0NAJSRTSE9XX0NDJWcKK3MlQEVDSE9fQ0NAJSRFQ0hPX0NDJWcKK3MlQEVYVFJBX0NGTEFHU0AlJEVYVFJBX0NGTEFHUyVnCitzJUBYX0NGTEFHU0AlJFhfQ0ZMQUdTJWcKK3MlQFhfUFJFX0xJQlNAJSRYX1BSRV9MSUJTJWcKK3MlQFhfTElCU0AlJFhfTElCUyVnCitzJUBYX0VYVFJBX0xJQlNAJSRYX0VYVFJBX0xJQlMlZworcyVAWENVUlNFU19DT05GSUdAJSRYQ1VSU0VTX0NPTkZJRyVnCisKK0NFT0YKK0VPRgorCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisKKyMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCisjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KK2FjX21heF9zZWRfY21kcz05MCAjIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNlZCBzY3JpcHQuCithY19maWxlPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgorYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCithY19lbmQ9JGFjX21heF9zZWRfY21kcyAjIExpbmUgYWZ0ZXIgbGFzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCithY19tb3JlX2xpbmVzPToKK2FjX3NlZF9jbWRzPSIiCit3aGlsZSAkYWNfbW9yZV9saW5lczsgZG8KKyAgaWYgdGVzdCAkYWNfYmVnIC1ndCAxOyB0aGVuCisgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiIGNvbmZ0ZXN0LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUKKyAgZWxzZQorICAgIHNlZCAiJHthY19lbmR9cSIgY29uZnRlc3Quc3VicyA+IGNvbmZ0ZXN0LnMkYWNfZmlsZQorICBmaQorICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QucyRhY19maWxlOyB0aGVuCisgICAgYWNfbW9yZV9saW5lcz1mYWxzZQorICAgIHJtIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZQorICBlbHNlCisgICAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorICAgICAgYWNfc2VkX2NtZHM9InNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCisgICAgZWxzZQorICAgICAgYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCisgICAgZmkKKyAgICBhY19maWxlPWBleHByICRhY19maWxlICsgMWAKKyAgICBhY19iZWc9JGFjX2VuZAorICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfY21kc2AKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKyAgYWNfc2VkX2NtZHM9Y2F0CitmaQorRU9GCisKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorCitDT05GSUdfRklMRVM9XCR7Q09ORklHX0ZJTEVTLSJNYWtlZmlsZSJ9CitFT0YKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKK2ZvciBhY19maWxlIGluIC4uICRDT05GSUdfRklMRVM7IGRvIGlmIHRlc3QgIngkYWNfZmlsZSIgIT0geC4uOyB0aGVuCisgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgY2FzZSAiJGFjX2ZpbGUiIGluCisgICo6KikgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyVbXjpdKjolJSdgCisgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CisgICopIGFjX2ZpbGVfaW49IiR7YWNfZmlsZX0uaW4iIDs7CisgIGVzYWMKKworICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2RpciwgdG9wX3NyY2RpciwgYW5kIElOU1RBTEwgZm9yIHN1YmRpcmVjdG9yaWVzLgorCisgICMgUmVtb3ZlIGxhc3Qgc2xhc2ggYW5kIGFsbCB0aGF0IGZvbGxvd3MgaXQuICBOb3QgYWxsIHN5c3RlbXMgaGF2ZSBkaXJuYW1lLgorICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICBpZiB0ZXN0ICIkYWNfZGlyIiAhPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKyAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorICAgIHRlc3QgISAtZCAiJGFjX2RpciIgJiYgbWtkaXIgIiRhY19kaXIiCisgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICRhY19kaXJ8c2VkICdzJV5cLi8lJSdgIgorICAgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgICAgYWNfZG90cz1gZWNobyAkYWNfZGlyX3N1ZmZpeHxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgZWxzZQorICAgIGFjX2Rpcl9zdWZmaXg9IGFjX2RvdHM9CisgIGZpCisKKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgLikgIHNyY2Rpcj0uCisgICAgICBpZiB0ZXN0IC16ICIkYWNfZG90cyI7IHRoZW4gdG9wX3NyY2Rpcj0uCisgICAgICBlbHNlIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYDsgZmkgOzsKKyAgLyopIHNyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciRhY19kaXJfc3VmZml4IjsgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgIHNyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyJGFjX2Rpcl9zdWZmaXgiCisgICAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICBlc2FjCisKKworICBlY2hvIGNyZWF0aW5nICIkYWNfZmlsZSIKKyAgcm0gLWYgIiRhY19maWxlIgorICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gYGVjaG8gJGFjX2ZpbGVfaW58c2VkICdzJS4qLyUlJ2AgYnkgY29uZmlndXJlLiIKKyAgY2FzZSAiJGFjX2ZpbGUiIGluCisgICpNYWtlZmlsZSopIGFjX2NvbXN1Yj0iMWlcXAorIyAkY29uZmlndXJlX2lucHV0IiA7OworICAqKSBhY19jb21zdWI9IDs7CisgIGVzYWMKKworICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorICBzZWQgLWUgIiRhY19jb21zdWIKK3MlQGNvbmZpZ3VyZV9pbnB1dEAlJGNvbmZpZ3VyZV9pbnB1dCVnCitzJUBzcmNkaXJAJSRzcmNkaXIlZworcyVAdG9wX3NyY2RpckAlJHRvcF9zcmNkaXIlZworIiAkYWNfZmlsZV9pbnB1dHMgfCAoZXZhbCAiJGFjX3NlZF9jbWRzIikgPiAkYWNfZmlsZQorZmk7IGRvbmUKK3JtIC1mIGNvbmZ0ZXN0LnMqCisKKyMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBOQU1FIEMgVkFMVUUgRCIsIHdoZXJlCisjIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCisjCisjIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCithY19kQT0ncyVeXChbIAldKlwpI1woWyAJXSpkZWZpbmVbIAldWyAJXSpcKScKK2FjX2RCPSdcKFsgCV1bIAldKlwpW14gCV0qJVwxI1wyJworYWNfZEM9J1wzJworYWNfZEQ9JyVnJworIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KK2FjX3VBPSdzJV5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJworYWNfdUI9J1woWyAJXVwpJVwxI1wyZGVmaW5lXDMnCithY191Qz0nICcKK2FjX3VEPSdcNCVnJworIyBhY19lIHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KK2FjX2VBPSdzJV5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJworYWNfZUI9JyQlXDEjXDJkZWZpbmVcMycKK2FjX2VDPScgJworYWNfZUQ9JyVnJworCitpZiB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iICE9IHNldDsgdGhlbgorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKyAgQ09ORklHX0hFQURFUlM9Im5jdXJzZXNfY2ZnLmg6bmN1cnNlc190c3QuaGluIgorRU9GCitjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCitmaQorZm9yIGFjX2ZpbGUgaW4gLi4gJENPTkZJR19IRUFERVJTOyBkbyBpZiB0ZXN0ICJ4JGFjX2ZpbGUiICE9IHguLjsgdGhlbgorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgIiRhY19maWxlIiBpbgorICAqOiopIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlW146XSo6JSUnYAorICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworICBlc2FjCisKKyAgZWNobyBjcmVhdGluZyAkYWNfZmlsZQorCisgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaW4gY29uZnRlc3Qub3V0CisgIGFjX2ZpbGVfaW5wdXRzPWBlY2hvICRhY19maWxlX2lufHNlZCAtZSAicyVeJSRhY19naXZlbl9zcmNkaXIvJSIgLWUgInMlOiUgJGFjX2dpdmVuX3NyY2Rpci8lZyJgCisgIGNhdCAkYWNfZmlsZV9pbnB1dHMgPiBjb25mdGVzdC5pbgorCitFT0YKKworCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYSBsaXN0IG9mICNkZWZpbmUncy4gIFdlIHdvbid0IHVzZSBpdCBhcyBhIHNlZAorIyBzY3JpcHQsIGJ1dCBhcyBkYXRhIHRvIGluc2VydCB3aGVyZSB3ZSBzZWUgQERFRlNALiAgV2UgZXhwZWN0IEFDX1NBVkVfREVGUyB0bworIyBiZSBlaXRoZXIgJ2NhdCcgb3IgJ3NvcnQnLgorY2F0IGNvbmZkZWZzLmggPmNvbmZ0ZXN0LnZhbHMKKworIyBCcmVhayB1cCBjb25mdGVzdC52YWxzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uCisjIHRoZSBzaXplIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vLgorCitybSAtZiBjb25mdGVzdC50YWlsCitlY2hvICcgIHJtIC1mIGNvbmZ0ZXN0LmZyYWcnID4+ICRDT05GSUdfU1RBVFVTCit3aGlsZSA6CitkbworICBhY19saW5lcz1gZ3JlcCAtYyAuIGNvbmZ0ZXN0LnZhbHNgCisgICMgZ3JlcCAtYyBnaXZlcyBlbXB0eSBvdXRwdXQgZm9yIGFuIGVtcHR5IGZpbGUgb24gc29tZSBBSVggc3lzdGVtcy4KKyAgaWYgdGVzdCAteiAiJGFjX2xpbmVzIiB8fCB0ZXN0ICIkYWNfbGluZXMiIC1lcSAwOyB0aGVuIGJyZWFrOyBmaQorICAjIFdyaXRlIGNodW5rcyBvZiBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvIGNvbmZ0ZXN0LmZyYWcuCisgIGVjaG8gJyAgY2F0ID4+IGNvbmZ0ZXN0LmZyYWcgPDxDRU9GJyA+PiAkQ09ORklHX1NUQVRVUworICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnZhbHMgPj4gJENPTkZJR19TVEFUVVMKKyAgZWNobyAnQ0VPRicgPj4gJENPTkZJR19TVEFUVVMKKyAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LnZhbHMgPiBjb25mdGVzdC50YWlsCisgIHJtIC1mIGNvbmZ0ZXN0LnZhbHMKKyAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC52YWxzCitkb25lCitybSAtZiBjb25mdGVzdC52YWxzCisKKyMgUnVuIHNlZCB0byBzdWJzdGl0dXRlIHRoZSBjb250ZW50cyBvZiBjb25mdGVzdC5mcmFnIGludG8gY29uZnRlc3QuaW4gYXQgdGhlCisjIG1hcmtlciBAREVGU0AuCitlY2hvICcgIGNhdCA+PiBjb25mdGVzdC5lZGl0IDw8Q0VPRgorL0BERUZTQC9yIGNvbmZ0ZXN0LmZyYWcKKy9AREVGU0AvZAorQ0VPRgorc2VkIC1mIGNvbmZ0ZXN0LmVkaXQgY29uZnRlc3QuaW4gPiBjb25mdGVzdC5vdXQKK3JtIC1mIGNvbmZ0ZXN0LmluCittdiBjb25mdGVzdC5vdXQgY29uZnRlc3QuaW4KK3JtIC1mIGNvbmZ0ZXN0LmVkaXQgY29uZnRlc3QuZnJhZworJyA+PiAkQ09ORklHX1NUQVRVUworCisKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKKyAgcm0gLWYgY29uZnRlc3QuZnJhZyBjb25mdGVzdC5oCisgIGVjaG8gIi8qICRhY19maWxlLiAgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLiAgKi8iID4gY29uZnRlc3QuaAorICBjYXQgY29uZnRlc3QuaW4gPj4gY29uZnRlc3QuaAorICBybSAtZiBjb25mdGVzdC5pbgorICBpZiBjbXAgLXMgJGFjX2ZpbGUgY29uZnRlc3QuaCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGVjaG8gIiRhY19maWxlIGlzIHVuY2hhbmdlZCIKKyAgICBybSAtZiBjb25mdGVzdC5oCisgIGVsc2UKKyAgICAjIFJlbW92ZSBsYXN0IHNsYXNoIGFuZCBhbGwgdGhhdCBmb2xsb3dzIGl0LiAgTm90IGFsbCBzeXN0ZW1zIGhhdmUgZGlybmFtZS4KKyAgICAgIGFjX2Rpcj1gZWNobyAkYWNfZmlsZXxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgICAgICBpZiB0ZXN0ICIkYWNfZGlyIiAhPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKyAgICAgICMgVGhlIGZpbGUgaXMgaW4gYSBzdWJkaXJlY3RvcnkuCisgICAgICB0ZXN0ICEgLWQgIiRhY19kaXIiICYmIG1rZGlyICIkYWNfZGlyIgorICAgIGZpCisgICAgcm0gLWYgJGFjX2ZpbGUKKyAgICBtdiBjb25mdGVzdC5oICRhY19maWxlCisgIGZpCitmaTsgZG9uZQorCitFT0YKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorIyBFeHRyYSBpbml0aWFsaXphdGlvbiBjb21tYW5kcywgaWYgYW55CisKK0FXSz0iJEFXSyIKK0VDSE9fTEQ9IiRFQ0hPX0xEIgorCitFT0YKK2NhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKKyMgRXh0cmEgY29tbWFuZHMsIGlmIGFueQorCisKK2ZvciBjZl9kaXIgaW4gLgorZG8KKwlpZiB0ZXN0ICEgLWQgJHNyY2Rpci8kY2ZfZGlyOyB0aGVuCisJCWNvbnRpbnVlCisJZWxpZiB0ZXN0IC1mICRzcmNkaXIvJGNmX2Rpci9wcm9ncmFtczsgdGhlbgorCQkkQVdLIC1mICRzcmNkaXIvbWstdGVzdC5hd2sgRUNIT19MSU5LPSIkRUNIT19MRCIgJHNyY2Rpci8kY2ZfZGlyL3Byb2dyYW1zID4+JGNmX2Rpci9NYWtlZmlsZQorCWZpCitkb25lCisKKworCWNhdCA+Pk1ha2VmaWxlIDw8VEVTVF9FT0YKKworIyBUaGVzZSBydWxlcyBhcmUgZ2VuZXJhdGVkIHNvIHdlIGRvIG5vdCByZWx5IG9uIHN1ZmZpeCBydWxlcywgd2hpY2ggZG8gbm90CisjIHdvcmsgY29uc2lzdGVudGx5IGZvciBkaWZmZXJlbnQgbWFrZS1wcm9ncmFtcyAodGhlICdcJChNT0RFTCkvJyBjb25mdXNlcworIyBzb21lLCBhbmQgdGhlICdcJHgnIGNvbmZ1c2VzIG90aGVycykuCitURVNUX0VPRgorTElTVD1gc2VkIC1lICdzL1sgCV0uKi8vJyAtZSAnL15bI0BdL2QnICRzcmNkaXIvbW9kdWxlc2AKK2ZvciBOIGluICRMSVNUCitkbworCWNhdCA+Pk1ha2VmaWxlIDw8VEVTVF9FT0YKKworXCQoTU9ERUwpLyROLm8gOiAkTi5jIFxcCisJdGVzdC5wcml2LmggXFwKKwluY3Vyc2VzX2NmZy5oCisJQGVjaG8gY29tcGlsaW5nICROOyBcJChDQykgLWMgXCQoQ0ZMQUdTX0RFRkFVTFQpICROLmMKK1RFU1RfRU9GCitkb25lCisKK2V4aXQgMAorRU9GCitjaG1vZCAreCAkQ09ORklHX1NUQVRVUworcm0gLWZyIGNvbmZkZWZzKiAkYWNfY2xlYW5fZmlsZXMKK3Rlc3QgIiRub19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVTIHx8IGV4aXQgMQorCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2NvbmZpZ3VyZS5pbiBiL25jdXJzZXMtNS43L3Rlc3QvY29uZmlndXJlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTg1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2NvbmZpZ3VyZS5pbgpAQCAtMCwwICsxLDI5OSBAQAorZG5sKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKK2RubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCitkbmwgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKK2RubCAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorZG5sIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCitkbmwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKK2RubCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorZG5sIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorZG5sIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorZG5sIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCitkbmwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKK2RubCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorZG5sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKK2RubCBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKK2RubCBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorZG5sIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCitkbmwgYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK2RubCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sCitkbmwgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDE5OTYsIGV0Yy4KK2RubAorZG5sICRJZDogY29uZmlndXJlLmluLHYgMS42NyAyMDA4LzA5LzA2IDIyOjEwOjIzIHRvbSBFeHAgJAorZG5sIFRoaXMgaXMgYSBzaW1wbGUgY29uZmlndXJhdGlvbi1zY3JpcHQgZm9yIHRoZSBuY3Vyc2VzIHRlc3QgcHJvZ3JhbXMgdGhhdAorZG5sIGFsbG93cyB0aGUgdGVzdC1kaXJlY3RvcnkgdG8gYmUgc2VwYXJhdGVseSBjb25maWd1cmVkIGFnYWluc3QgYSByZWZlcmVuY2UKK2RubCBzeXN0ZW0gKGkuZS4sIHN5c3ZyNCBjdXJzZXMpCitkbmwKK2RubCBJZiB5b3UncmUgY29uZmlndXJpbmcgbmN1cnNlcywgeW91IHNob3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHNjcmlwdC4KK2RubCBJdCdzIG9ubHkgZm9yIHRlc3RpbmcgcHVycG9zZXMuCitkbmwKK2RubCBTZWUgaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2F1dG9jb25mLyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX1BSRVJFUSgyLjEzLjIwMDIwMjEwKQorQUNfSU5JVChuY3Vyc2VzLmMpCitBQ19DT05GSUdfSEVBREVSKG5jdXJzZXNfY2ZnLmg6bmN1cnNlc190c3QuaGluKQorCitDRl9JTkhFUklUX1NDUklQVChjb25maWcuZ3Vlc3MpCitDRl9JTkhFUklUX1NDUklQVChjb25maWcuc3ViKQorQ0ZfQ0hFQ0tfQ0FDSEUKKworQUNfUFJPR19NQUtFX1NFVAorQUNfUFJPR19DQworQUNfUFJPR19DUFAKK0FDX1BST0dfQVdLCisKK2RubCBUaGluZ3MgdGhhdCB3ZSBkb24ndCBuZWVkIChvciBtdXN0IG92ZXJyaWRlKSBpZiB3ZSdyZSBub3QgYnVpbGRpbmcgbmN1cnNlcworQ0NfR19PUFQ9Ii1nIgkJCQkJQUNfU1VCU1QoQ0NfR19PUFQpCitDQ19TSEFSRURfT1BUUz11bmtub3duCQkJQUNfU1VCU1QoQ0NfU0hBUkVEX09QVFMpCitDUFBGTEFHUz0iJENQUEZMQUdTIgkJCUFDX1NVQlNUKENQUEZMQUdTKQorREZUX0RFUF9TVUZGSVg9IiIJCQkJQUNfU1VCU1QoREZUX0RFUF9TVUZGSVgpCitERlRfT0JKX1NVQkRJUj1gcHdkfHNlZCAtZSdzOi4qLzo6J2AJQUNfU1VCU1QoREZUX09CSl9TVUJESVIpCitERlRfVVBSX01PREVMPSJOT1JNQUwiCQkJQUNfU1VCU1QoREZUX1VQUl9NT0RFTCkKK0xEPSJsZCIJCQkJCQkJQUNfU1VCU1QoTEQpCitMREZMQUdTX1NIQVJFRD0iIgkJCQlBQ19TVUJTVChMREZMQUdTX1NIQVJFRCkKK0xERkxBR1NfU1RBVElDPSIiCQkJCUFDX1NVQlNUKExERkxBR1NfU1RBVElDKQorTERfTU9ERUw9IiIJCQkJCQlBQ19TVUJTVChMRF9NT0RFTCkKK0xEX1NIQVJFRF9PUFRTPSIiCQkJCUFDX1NVQlNUKExEX1NIQVJFRF9PUFRTKQorTElCVE9PTD0iIgkJCQkJCUFDX1NVQlNUKExJQlRPT0wpCitMSUJfQ0xFQU49IiIJCQkJCUFDX1NVQlNUKExJQl9DTEVBTikKK0xJQl9DT01QSUxFPSIiCQkJCQlBQ19TVUJTVChMSUJfQ09NUElMRSkKK0xJQl9MSU5LPScke0NDfScJCQkJQUNfU1VCU1QoTElCX0xJTkspCitMSU5LX1RFU1RTPSIiCQkJCQlBQ19TVUJTVChMSU5LX1RFU1RTKQorTElOVD1saW50CQkJCQkJQUNfU1VCU1QoTElOVCkKK0xJTlRfT1BUUz0iIgkJCQkJQUNfU1VCU1QoTElOVF9PUFRTKQorTE9DQUxfTERGTEFHUz0iIgkJCQlBQ19TVUJTVChMT0NBTF9MREZMQUdTKQorTUFUSF9MSUI9Ii1sbSIJCQkJCUFDX1NVQlNUKE1BVEhfTElCKQorUFRIUkVBRD0iLWxtIgkJCQkJQUNfU1VCU1QoUFRIUkVBRCkKK1RFU1RfQVJHUz0iIgkJCQkJQUNfU1VCU1QoVEVTVF9BUkdTKQorVEVTVF9ERVBTPSIiCQkJCQlBQ19TVUJTVChURVNUX0RFUFMpCitURVNUX0xJQlM9IiIJCQkJCUFDX1NVQlNUKFRFU1RfTElCUykKK1RJTkZPX0FSR1M9JyQoTElCU19DVVJTRVMpJwkJQUNfU1VCU1QoVElORk9fQVJHUykKK2NmX2N2X2FiaV92ZXJzaW9uPSIiCQkJQUNfU1VCU1QoY2ZfY3ZfYWJpX3ZlcnNpb24pCitjZl9jdl9yZWxfdmVyc2lvbj0iIgkJCUFDX1NVQlNUKGNmX2N2X3JlbF92ZXJzaW9uKQorCitjZl9jdl9zY3JlZW49Y3Vyc2VzCitjZl9jdl9saWJ0eXBlPQorCitBQ19FWEVFWFQKK0FDX09CSkVYVAorCitDRl9BTlNJX0NDX1JFUUQKK0NGX0dDQ19BVFRSSUJVVEVTCitDRl9YT1BFTl9TT1VSQ0UKK0FDX0NfQ09OU1QKK0NGX1NJR19BVE9NSUNfVAorCitDRl9ESVNBQkxFX0VDSE8KK0NGX0VOQUJMRV9XQVJOSU5HUworCitDRl9XSVRIX0NVUlNFU19ESVIKKworZG5sIFN1bk9TIDQueAorQUNfQVJHX1dJVEgoNWxpYiwKKwlbICAtLXdpdGgtNWxpYiAgICAgICAgICAgICB1c2UgU3VuT1Mgc3lzdi1saWJyYXJpZXNdLAorCVtMSUJTPSItTC91c3IvNWxpYiAkTElCUyIKKwkgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvNWluY2x1ZGUiXSkKKworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIE5jdXJzZXNXLCBpbnN0YWxsZWQgaW4gY29udmVudGlvbmFsIGxvY2F0aW9uCitBQ19BUkdfV0lUSChuY3Vyc2VzdywKKwlbICAtLXdpdGgtbmN1cnNlc3cgICAgICAgICB1c2Ugd2lkZSBuY3Vyc2VzLWxpYnJhcmllcyAoaW5zdGFsbGVkKV0sCisJW2NmX2N2X3NjcmVlbj1uY3Vyc2Vzd10sWworCitkbmwgTmN1cnNlcywgaW5zdGFsbGVkIGluIGNvbnZlbnRpb25hbCBsb2NhdGlvbgorQUNfQVJHX1dJVEgobmN1cnNlcywKKwlbICAtLXdpdGgtbmN1cnNlcyAgICAgICAgICB1c2UgbmN1cnNlcy1saWJyYXJpZXMgKGluc3RhbGxlZCldLAorCVtjZl9jdl9zY3JlZW49bmN1cnNlc10sWworCitBQ19BUkdfV0lUSChwZGN1cnNlcywKKwlbICAtLXdpdGgtcGRjdXJzZXMgICAgICAgICBjb21waWxlL2xpbmsgd2l0aCBwZGN1cnNlcyBYMTEgbGlicmFyeV0sCisJW2NmX2N2X3NjcmVlbj1wZGN1cnNlc10pXSldKQorCitjYXNlICRjZl9jdl9zY3JlZW4gaW4KK2N1cnNlcykKKwlDRl9DVVJTRVNfQ1BQRkxBR1MKKwlDRl9OQ1VSU0VTX1ZFUlNJT04KKwlDRl9DVVJTRVNfTElCUworCTs7CituY3Vyc2VzKQorCUNGX05DVVJTRVNfQ1BQRkxBR1MKKwlDRl9OQ1VSU0VTX0xJQlMKKwk7OworbmN1cnNlc3cpCisJY2ZfY3ZfbGlidHlwZT13CisJQ0ZfVVRGOF9MSUIKKwlDRl9OQ1VSU0VTX0NQUEZMQUdTKG5jdXJzZXN3KQorCUNGX05DVVJTRVNfTElCUyhuY3Vyc2VzdykKKwk7OworcGRjdXJzZXMpICModmkKKwlDRl9QRENVUlNFU19YMTEKKwk7OworZXNhYworCitkbmwgSWYgd2UndmUgbm90IHNwZWNpZmllZCBhIGxpYnJhcnksIGFzc3VtZSB3ZSdyZSB1c2luZyBzeXN2cjQgbGlicmFyaWVzCitkbmwgaW5zdGFsbGVkIGNvbnZlbnRpb25hbGx5IChlLmcuLCBTdW5PUyA1LnggLSBzb2xhcmlzKS4KKworZG5sIEF1dG9jb25mIGJ1aWxkcyB1cCB0aGUgJExJQlMgaW4gcmV2ZXJzZSBvcmRlcgorCitjYXNlICRjZl9jdl9zY3JlZW4gaW4gIyh2aQorcGRjdXJzZXMpICModmkKKwk7OworKikKKwkjIGxvb2sgZm9yIGN1cnNlcy1yZWxhdGVkIGxpYnJhcmllcworCUFDX0NIRUNLX0xJQihwYW5lbCRjZl9jdl9saWJ0eXBlLG5ld19wYW5lbCkKKwlBQ19DSEVDS19MSUIobWVudSRjZl9jdl9saWJ0eXBlLG1lbnVfZHJpdmVyKQorCUFDX0NIRUNLX0xJQihmb3JtJGNmX2N2X2xpYnR5cGUsZm9ybV9kcml2ZXIpCisKKwkjIGxvb2sgZm9yIGN1cnNlcy1yZWxhdGVkIGhlYWRlcnMKKwlBQ19DSEVDS19IRUFERVJTKCBcCisJCW5jX2FsbG9jLmggXAorCQlub21hY3Jvcy5oIFwKKwkJZm9ybS5oIFwKKwkJbWVudS5oIFwKKwkJcGFuZWwuaCBcCisJCSkKKwk7OworZXNhYworCitBQ19UWVBFX1NJR05BTAorCitBQ19TVERDX0hFQURFUlMKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19IRUFERVJTKCBcCitnZXRvcHQuaCBcCitsb2NhbGUuaCBcCitzdGRhcmcuaCBcCitzeXMvaW9jdGwuaCBcCitzeXMvc2VsZWN0LmggXAorc3lzL3RpbWUuaCBcCit0ZXJtaW9zLmggXAordW5pc3RkLmggXAorKQorCitBQ19DSEVDS19GVU5DUyggXAorZ2V0dGltZW9mZGF5IFwKK21ibGVuIFwKK21icmxlbiBcCittYnJ0b3djIFwKK21ic3J0b3djcyBcCittYnN0b3djcyBcCittYnRvd2MgXAorc3RyZHVwIFwKK3djc3J0b21icyBcCit3Y3N0b21icyBcCispCisKK0NGX0NVUlNFU19GVU5DUyggXAorY2hnYXQgXAorY29sb3Jfc2V0IFwKK2ZpbHRlciBcCitnZXRiZWd4IFwKK2dldGN1cnggXAorZ2V0bWF4eCBcCitnZXRuc3RyIFwKK2dldHBhcnggXAorZ2V0d2luIFwKK212dmxpbmUgXAorbXZ3dmxpbmUgXAorbmFwbXMgXAorcHV0d2luIFwKK3Jlc2l6ZV90ZXJtIFwKK3Jlc2l6ZXRlcm0gXAorcmlwb2ZmbGluZSBcCitzZXR1cHRlcm0gXAorc2xrX2NvbG9yIFwKK3Nsa19pbml0IFwKK3Rlcm1hdHRycyBcCit0Z2V0ZW50IFwKK3RpZ2V0bnVtIFwKK3RpZ2V0c3RyIFwKK3R5cGVhaGVhZCBcCit1c2VfZGVmYXVsdF9jb2xvcnMgXAordnNzY2FuZiBcCit3Y2hnYXQgXAord2luc3N0ciBcCit3cmVzaXplIFwKKykKKworQUNfQ0FDSEVfQ0hFQ0soZm9yIG5jdXJzZXMgZXh0ZW5kZWQgZnVuY3Rpb25zLGNmX2N2X25jdXJzZXNfZXh0X2Z1bmNzLFsKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLAorWworCSh2b2lkKSBhc3N1bWVfZGVmYXVsdF9jb2xvcnMgKDAsIDApOworCSh2b2lkKSBjdXJzZXNfdmVyc2lvbiAoKTsKKwkodm9pZCkgZGVmaW5lX2tleSAoMCwgMCk7CisJKHZvaWQpIGlzX3Rlcm1fcmVzaXplZCAoMCwgMCk7CisJKHZvaWQpIGtleV9kZWZpbmVkICgwKTsKKwkodm9pZCkga2V5Ym91bmQgKDAsIDApOworCSh2b2lkKSBrZXlvayAoMCwgMCk7CisJKHZvaWQpIHJlc2l6ZV90ZXJtICgwLCAwKTsKKwkodm9pZCkgcmVzaXpldGVybSAoMCwgMCk7CisJKHZvaWQpIHVzZV9kZWZhdWx0X2NvbG9ycyAoKTsKKwkodm9pZCkgdXNlX2V4dGVuZGVkX25hbWVzICgwKTsKKwkodm9pZCkgd3Jlc2l6ZSAoMCwgMCwgMCk7XSwKKwlbY2ZfY3ZfbmN1cnNlc19leHRfZnVuY3M9eWVzXSwKKwlbY2ZfY3ZfbmN1cnNlc19leHRfZnVuY3M9bm9dKQorXSkKK3Rlc3QgIiRjZl9jdl9uY3Vyc2VzX2V4dF9mdW5jcyIgIT0gbm8gJiYgQUNfREVGSU5FKE5DVVJTRVNfRVhUX0ZVTkNTKQorCitBQ19DQUNIRV9DSEVDSyhmb3Igd2lkZS1jaGFyYWN0ZXIgZnVuY3Rpb25zLGNmX2N2X3dpZGVjaGFyX2Z1bmNzLFsKK0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDwke2NmX2N2X25jdXJzZXNfaGVhZGVyLWN1cnNlcy5ofT5dLAorWworCXN0YXRpYyB3Y2hhcl90IHNyY193Y2hhclsyXTsKKwlzdGF0aWMgY2NoYXJfdCBkc3RfY2NoYXI7CisJc2V0Y2NoYXIoJmRzdF9jY2hhciwgc3JjX3djaGFyLCBBX05PUk1BTCwgMCwgKHZvaWQgKikgMCk7CisJXSwKKwlbY2ZfY3Zfd2lkZWNoYXJfZnVuY3M9eWVzXSwKKwlbY2ZfY3Zfd2lkZWNoYXJfZnVuY3M9bm9dKQorXSkKK2lmIHRlc3QgIiRjZl9jdl93aWRlY2hhcl9mdW5jcyIgIT0gbm8gOyB0aGVuCisJQUNfREVGSU5FKFVTRV9XSURFQ19TVVBQT1JULDEpCitlbHNlCisJQUNfREVGSU5FKFVTRV9XSURFQ19TVVBQT1JULDApCitmaQorCitDRl9TWVNfVElNRV9TRUxFQ1QKK0NGX0ZVTkNfQ1VSU0VTX1ZFUlNJT04KK0NGX0NVUlNFU19BQ1NfTUFQCitDRl9DVVJTRVNfV0FDU19NQVAKK0NGX0NVUlNFU19DSEVDS19UWVBFKGF0dHJfdCxsb25nKQorQ0ZfQ1VSU0VTX0NIRUNLX1RZUEUobWJzdGF0ZV90LGxvbmcpCisKK1RFU1RfQVJHUz0iJExJQlMiCitMSUJTPQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FDX09VVFBVVChNYWtlZmlsZSxbCitDRl9QUkdfUlVMRVMoWyRzcmNkaXIvbWstdGVzdC5hd2sgRUNIT19MSU5LPSIkRUNIT19MRCJdLCAuKQorCWNhdCA+Pk1ha2VmaWxlIDw8VEVTVF9FT0YKKworIyBUaGVzZSBydWxlcyBhcmUgZ2VuZXJhdGVkIHNvIHdlIGRvIG5vdCByZWx5IG9uIHN1ZmZpeCBydWxlcywgd2hpY2ggZG8gbm90CisjIHdvcmsgY29uc2lzdGVudGx5IGZvciBkaWZmZXJlbnQgbWFrZS1wcm9ncmFtcyAodGhlICdcJChNT0RFTCkvJyBjb25mdXNlcworIyBzb21lLCBhbmQgdGhlICdcJHgnIGNvbmZ1c2VzIG90aGVycykuCitURVNUX0VPRgorTElTVD1gc2VkIC1lICdzL1tbIAldXS4qLy8nIC1lICcvXltbI0BdXS9kJyAkc3JjZGlyL21vZHVsZXNgCitmb3IgTiBpbiAkTElTVAorZG8KKwljYXQgPj5NYWtlZmlsZSA8PFRFU1RfRU9GCisKK1wkKE1PREVMKS8kTi5vIDogJE4uYyBcXAorCXRlc3QucHJpdi5oIFxcCisJbmN1cnNlc19jZmcuaAorCUBlY2hvIGNvbXBpbGluZyAkTjsgXCQoQ0MpIC1jIFwkKENGTEFHU19ERUZBVUxUKSAkTi5jCitURVNUX0VPRgorZG9uZQorXSxbCitBV0s9IiRBV0siCitFQ0hPX0xEPSIkRUNIT19MRCIKK10sY2F0KQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9kZW1vX2FsdGtleXMuYyBiL25jdXJzZXMtNS43L3Rlc3QvZGVtb19hbHRrZXlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0NmFjMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZGVtb19hbHRrZXlzLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBkZW1vX2FsdGtleXMuYyx2IDEuOCAyMDA4LzA0LzEyIDIyOjA2OjIyIHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIHRoZSBkZWZpbmVfa2V5KCkgZnVuY3Rpb24uCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwNS8xMC8yMgorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBOQ1VSU0VTX0VYVF9GVU5DUworCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgTVlfTE9HRklMRSAiZGVtb19hbHRrZXlzLmxvZyIKKyNkZWZpbmUgTVlfS0VZUyAoS0VZX01BWCArIDEpCisKKy8qCisgKiBMb2cgdGhlIG1vc3QgcmVjZW50bHktd3JpdHRlbiBsaW5lIHRvIG91ciBsb2dmaWxlCisgKi8KK3N0YXRpYyB2b2lkCitsb2dfbGFzdF9saW5lKFdJTkRPVyAqd2luKQoreworICAgIEZJTEUgKmZwOworICAgIGludCB5LCB4LCBuOworICAgIGNoYXIgdGVtcFsyNTZdOworCisgICAgaWYgKChmcCA9IGZvcGVuKE1ZX0xPR0ZJTEUsICJhIikpICE9IDApIHsKKwlpbnQgbmVlZCA9IHNpemVvZih0ZW1wKSAtIDE7CisJaWYgKG5lZWQgPiBDT0xTKQorCSAgICBuZWVkID0gQ09MUzsKKwlnZXR5eCh3aW4sIHksIHgpOworCXdtb3ZlKHdpbiwgeSAtIDEsIDApOworCW4gPSB3aW5uc3RyKHdpbiwgdGVtcCwgbmVlZCk7CisJd2hpbGUgKG4tLSA+IDApIHsKKwkgICAgaWYgKGlzc3BhY2UoVUNoYXIodGVtcFtuXSkpKQorCQl0ZW1wW25dID0gJ1wwJzsKKwkgICAgZWxzZQorCQlicmVhazsKKwl9CisJd21vdmUod2luLCB5LCB4KTsKKwlmcHJpbnRmKGZwLCAiJXNcbiIsIHRlbXApOworCWZjbG9zZShmcCk7CisgICAgfQorfQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBpbnQgbjsKKyAgICBpbnQgY2g7CisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyAgICBpbnQgc2VjcywgbXNlY3M7CisgICAgc3RydWN0IHRpbWV2YWwgY3VycmVudCwgcHJldmlvdXM7CisjZW5kaWYKKworICAgIHVubGluayhNWV9MT0dGSUxFKTsKKworICAgIG5ld3Rlcm0oMCwgc3Rkb3V0LCBzdGRpbik7CisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHNjcm9sbG9rKHN0ZHNjciwgVFJVRSk7CisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgbW92ZSgwLCAwKTsKKworICAgIC8qIHdlIGRvIHRoZSBkZWZpbmVfa2V5KCkgY2FsbHMgYWZ0ZXIga2V5cGFkKCksIHNpbmNlIHRoZSBmaXJzdCBjYWxsIHRvCisgICAgICoga2V5cGFkKCkgaW5pdGlhbGl6ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YS4KKyAgICAgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgMjU1OyArK24pIHsKKwljaGFyIHRlbXBbMTBdOworCXNwcmludGYodGVtcCwgIlwwMzMlYyIsIG4pOworCWRlZmluZV9rZXkodGVtcCwgbiArIE1ZX0tFWVMpOworICAgIH0KKyAgICBmb3IgKG4gPSBLRVlfTUlOOyBuIDwgS0VZX01BWDsgKytuKSB7CisJY2hhciAqdmFsdWU7CisJaWYgKCh2YWx1ZSA9IGtleWJvdW5kKG4sIDApKSAhPSAwKSB7CisJICAgIGNoYXIgKnRlbXAgPSB0eXBlTWFsbG9jKGNoYXIsIHN0cmxlbih2YWx1ZSkgKyAyKTsKKwkgICAgc3ByaW50Zih0ZW1wLCAiXDAzMyVzIiwgdmFsdWUpOworCSAgICBkZWZpbmVfa2V5KHRlbXAsIG4gKyBNWV9LRVlTKTsKKwkgICAgZnJlZSh0ZW1wKTsKKwkgICAgZnJlZSh2YWx1ZSk7CisJfQorICAgIH0KKworI2lmIEhBVkVfR0VUVElNRU9GREFZCisgICAgZ2V0dGltZW9mZGF5KCZwcmV2aW91cywgMCk7CisjZW5kaWYKKworICAgIHdoaWxlICgoY2ggPSBnZXRjaCgpKSAhPSBFUlIpIHsKKwlib29sIGVzY2FwZWQgPSAoY2ggPj0gTVlfS0VZUyk7CisJY29uc3QgY2hhciAqbmFtZSA9IGtleW5hbWUoZXNjYXBlZCA/IChjaCAtIE1ZX0tFWVMpIDogY2gpOworCisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKwlnZXR0aW1lb2ZkYXkoJmN1cnJlbnQsIDApOworCXNlY3MgPSBjdXJyZW50LnR2X3NlYyAtIHByZXZpb3VzLnR2X3NlYzsKKwltc2VjcyA9IChjdXJyZW50LnR2X3VzZWMgLSBwcmV2aW91cy50dl91c2VjKSAvIDEwMDA7CisJaWYgKG1zZWNzIDwgMCkgeworCSAgICBtc2VjcyArPSAxMDAwOworCSAgICAtLXNlY3M7CisJfQorCWlmIChtc2VjcyA+PSAxMDAwKSB7CisJICAgIHNlY3MgKz0gbXNlY3MgLyAxMDAwOworCSAgICBtc2VjcyAlPSAxMDAwOworCX0KKwlwcmludHcoIiU2ZC4lMDNkICIsIHNlY3MsIG1zZWNzKTsKKwlwcmV2aW91cyA9IGN1cnJlbnQ7CisjZW5kaWYKKwlwcmludHcoIktleWNvZGUgJWQsIG5hbWUgJXMlc1xuIiwKKwkgICAgICAgY2gsCisJICAgICAgIGVzY2FwZWQgPyAiRVNDLSIgOiAiIiwKKwkgICAgICAgbmFtZSAhPSAwID8gbmFtZSA6ICI8bnVsbD4iKTsKKwlsb2dfbGFzdF9saW5lKHN0ZHNjcik7CisJY2xydG9lb2woKTsKKwlpZiAoY2ggPT0gJ3EnKQorCSAgICBicmVhazsKKyAgICB9CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgbmN1cnNlcyBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2RlbW9fZGVma2V5LmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2RlbW9fZGVma2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1ZWY1NAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZGVtb19kZWZrZXkuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGRlbW9fZGVma2V5LmMsdiAxLjE5IDIwMDgvMDgvMDQgMTY6MjQ6NDcgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgdGhlIGRlZmluZV9rZXkoKSBmdW5jdGlvbi4KKyAqIFRob21hcyBEaWNrZXkgLSAyMDAyLzExLzIzCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIE5DVVJTRVNfRVhUX0ZVTkNTCisKKyNkZWZpbmUgTVlfTE9HRklMRSAiZGVtb19kZWZrZXkubG9nIgorCisvKgorICogTG9nIHRoZSBtb3N0IHJlY2VudGx5LXdyaXR0ZW4gbGluZSB0byBvdXIgbG9nZmlsZQorICovCitzdGF0aWMgdm9pZAorbG9nX2xhc3RfbGluZShXSU5ET1cgKndpbikKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgeSwgeCwgbjsKKyAgICBjaGFyIHRlbXBbMjU2XTsKKworICAgIGlmICgoZnAgPSBmb3BlbihNWV9MT0dGSUxFLCAiYSIpKSAhPSAwKSB7CisJaW50IG5lZWQgPSBzaXplb2YodGVtcCkgLSAxOworCWlmIChuZWVkID4gQ09MUykKKwkgICAgbmVlZCA9IENPTFM7CisJZ2V0eXgod2luLCB5LCB4KTsKKwl3bW92ZSh3aW4sIHkgLSAxLCAwKTsKKwluID0gd2lubnN0cih3aW4sIHRlbXAsIG5lZWQpOworCXdoaWxlIChuLS0gPiAwKSB7CisJICAgIGlmIChpc3NwYWNlKFVDaGFyKHRlbXBbbl0pKSkKKwkJdGVtcFtuXSA9ICdcMCc7CisJICAgIGVsc2UKKwkJYnJlYWs7CisJfQorCXdtb3ZlKHdpbiwgeSwgeCk7CisJZnByaW50ZihmcCwgIiVzXG4iLCB0ZW1wKTsKKwlmY2xvc2UoZnApOworICAgIH0KK30KKworLyoKKyAqIENvbnZlcnQgYSBjaGFyYWN0ZXIgdG8gdmlzaWJsZSBmb3JtLgorICovCitzdGF0aWMgY2hhciAqCit2aXNpY2hhcihpbnQgY2gpCit7CisgICAgc3RhdGljIGNoYXIgdGVtcFsxMF07CisKKyAgICBjaCA9IFVDaGFyKGNoKTsKKyAgICBhc3NlcnQoY2ggPj0gMCAmJiBjaCA8IDI1Nik7CisgICAgaWYgKGNoID09ICdcXCcpIHsKKwlzdHJjcHkodGVtcCwgIlxcXFwiKTsKKyAgICB9IGVsc2UgaWYgKGNoID09ICdcMDMzJykgeworCXN0cmNweSh0ZW1wLCAiXFxFIik7CisgICAgfSBlbHNlIGlmIChjaCA8ICcgJykgeworCXNwcmludGYodGVtcCwgIlxcJTAzbyIsIGNoKTsKKyAgICB9IGVsc2UgaWYgKGNoID49IDEyNykgeworCXNwcmludGYodGVtcCwgIlxcJTAzbyIsIGNoKTsKKyAgICB9IGVsc2UgeworCXNwcmludGYodGVtcCwgIiVjIiwgY2gpOworICAgIH0KKyAgICByZXR1cm4gdGVtcDsKK30KKworLyoKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gdmlzaWJsZSBmb3JtLgorICovCitzdGF0aWMgY2hhciAqCit2aXNpYmxlKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgICBjaGFyICpyZXN1bHQgPSAwOworICAgIHVuc2lnbmVkIG5lZWQgPSAxOworICAgIGludCBwYXNzOworICAgIGludCBuOworCisgICAgaWYgKHN0cmluZyAhPSAwICYmICpzdHJpbmcgIT0gJ1wwJykgeworCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyArK3Bhc3MpIHsKKwkgICAgZm9yIChuID0gMDsgc3RyaW5nW25dICE9ICdcMCc7ICsrbikgeworCQljaGFyIHRlbXBbODBdOworCQlzdHJjcHkodGVtcCwgdmlzaWNoYXIoc3RyaW5nW25dKSk7CisJCWlmIChwYXNzKQorCQkgICAgc3RyY2F0KHJlc3VsdCwgdGVtcCk7CisJCWVsc2UKKwkJICAgIG5lZWQgKz0gc3RybGVuKHRlbXApOworCSAgICB9CisJICAgIGlmICghcGFzcykKKwkJcmVzdWx0ID0gdHlwZUNhbGxvYyhjaGFyLCBuZWVkKTsKKwl9CisgICAgfSBlbHNlIHsKKwlyZXN1bHQgPSB0eXBlQ2FsbG9jKGNoYXIsIDEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorcmVhbGx5X2RlZmluZV9rZXkoV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKm5ld19zdHJpbmcsIGludCBjb2RlKQoreworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpjb2RlX25hbWUgPSBrZXluYW1lKGNvZGUpOworICAgIGNoYXIgKm9sZF9zdHJpbmc7CisgICAgY2hhciAqdmlzX3N0cmluZyA9IDA7CisgICAgY2hhciB0ZW1wWzgwXTsKKworICAgIGlmIChjb2RlX25hbWUgPT0gMCkgeworCXNwcmludGYodGVtcCwgIktleWNvZGUgJWQiLCBjb2RlKTsKKwljb2RlX25hbWUgPSB0ZW1wOworICAgIH0KKworICAgIGlmICgob2xkX3N0cmluZyA9IGtleWJvdW5kKGNvZGUsIDApKSAhPSAwKSB7CisJd3ByaW50dyh3aW4sICIlcyBpcyAlc1xuIiwKKwkJY29kZV9uYW1lLAorCQl2aXNfc3RyaW5nID0gdmlzaWJsZShvbGRfc3RyaW5nKSk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHdpbiwgIiVzIGlzIG5vdCBib3VuZFxuIiwKKwkJY29kZV9uYW1lKTsKKyAgICB9CisgICAgbG9nX2xhc3RfbGluZSh3aW4pOworCisgICAgaWYgKHZpc19zdHJpbmcgIT0gMCkgeworCWZyZWUodmlzX3N0cmluZyk7CisJdmlzX3N0cmluZyA9IDA7CisgICAgfQorCisgICAgdmlzX3N0cmluZyA9IHZpc2libGUobmV3X3N0cmluZyk7CisgICAgaWYgKChyYyA9IGtleV9kZWZpbmVkKG5ld19zdHJpbmcpKSA+IDApIHsKKwl3cHJpbnR3KHdpbiwgIiVzIHdhcyBib3VuZCB0byAlc1xuIiwgdmlzX3N0cmluZywga2V5bmFtZShyYykpOworCWxvZ19sYXN0X2xpbmUod2luKTsKKyAgICB9IGVsc2UgaWYgKG5ld19zdHJpbmcgIT0gMCAmJiByYyA8IDApIHsKKwl3cHJpbnR3KHdpbiwgIiVzIGNvbmZsaWN0cyB3aXRoIGxvbmdlciBzdHJpbmdzXG4iLCB2aXNfc3RyaW5nKTsKKwlsb2dfbGFzdF9saW5lKHdpbik7CisgICAgfQorICAgIHJjID0gZGVmaW5lX2tleShuZXdfc3RyaW5nLCBjb2RlKTsKKyAgICBpZiAocmMgPT0gRVJSKSB7CisJd3ByaW50dyh3aW4sICIlcyB1bmNoYW5nZWRcbiIsIGNvZGVfbmFtZSk7CisJbG9nX2xhc3RfbGluZSh3aW4pOworICAgIH0gZWxzZSBpZiAobmV3X3N0cmluZyAhPSAwKSB7CisJd3ByaW50dyh3aW4sICIlcyBpcyBub3cgYm91bmQgdG8gJXNcbiIsCisJCXZpc19zdHJpbmcsCisJCWNvZGVfbmFtZSk7CisJbG9nX2xhc3RfbGluZSh3aW4pOworICAgIH0gZWxzZSBpZiAob2xkX3N0cmluZyAhPSAwKSB7CisJd3ByaW50dyh3aW4sICIlcyBkZWxldGVkXG4iLCBjb2RlX25hbWUpOworCWxvZ19sYXN0X2xpbmUod2luKTsKKyAgICB9CisgICAgaWYgKHZpc19zdHJpbmcgIT0gMCkKKwlmcmVlKHZpc19zdHJpbmcpOworICAgIGlmIChvbGRfc3RyaW5nICE9IDApCisJZnJlZShvbGRfc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQKK2R1cGxpY2F0ZShXSU5ET1cgKndpbiwgTkNVUlNFU19DT05TVCBjaGFyICpuYW1lLCBpbnQgY29kZSkKK3sKKyAgICBjaGFyICp2YWx1ZSA9IHRpZ2V0c3RyKG5hbWUpOworCisgICAgaWYgKHZhbHVlICE9IDApIHsKKwljb25zdCBjaGFyICpwcmVmaXggPSAwOworCWNoYXIgdGVtcFtCVUZTSVpdOworCisJaWYgKCFzdHJuY21wKHZhbHVlLCAiXDAzM1siLCAyKSkgeworCSAgICBwcmVmaXggPSAiXDAzM08iOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJcMDMzTyIsIDIpKSB7CisJICAgIHByZWZpeCA9ICJcMDMzWyI7CisJfQorCWlmIChwcmVmaXggIT0gMCkgeworCSAgICBzcHJpbnRmKHRlbXAsICIlcyVzIiwgcHJlZml4LCB2YWx1ZSArIDIpOworCSAgICByZWFsbHlfZGVmaW5lX2tleSh3aW4sIHRlbXAsIGNvZGUpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCityZWRlZmluZShXSU5ET1cgKndpbiwgY2hhciAqc3RyaW5nLCBpbnQgY29kZSkKK3sKKyAgICByZWFsbHlfZGVmaW5lX2tleSh3aW4sIHN0cmluZywgY29kZSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfZGVmaW5pdGlvbihXSU5ET1cgKndpbiwgaW50IGNvZGUpCit7CisgICAgcmVhbGx5X2RlZmluZV9rZXkod2luLCAwLCBjb2RlKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgY2hhciAqZmtleXNbMTJdOworICAgIGludCBuOworICAgIGludCBjaDsKKyAgICBXSU5ET1cgKndpbjsKKworICAgIHVubGluayhNWV9MT0dGSUxFKTsKKworICAgIGluaXRzY3IoKTsKKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgcHJpbnR3KCJUaGlzIGRlbW8gaXMgYmVzdCBvbiB4dGVybTogaXQgcmV2ZXJzZXMgdGhlIGRlZmluaXRpb25zIGZvciBmMS1mMTIsXG4iKTsKKyAgICBwcmludHcoImFkZHMgZHVwbGljYXRlIGRlZmluaXRpb25zIGZvciBjdXJzb3IgYXBwbGljYXRpb24gYW5kIG5vcm1hbCBtb2RlcyxcbiIpOworICAgIHByaW50dygiYW5kIHJlbW92ZXMgYW55IGRlZmluaXRpb25zIGZvciB0aGUgbWluaSBrZXlwYWQuICBUeXBlIGFueSBvZiB0aG9zZTpcbiIpOworICAgIHJlZnJlc2goKTsKKworICAgIHdpbiA9IG5ld3dpbihMSU5FUyAtIDMsIENPTFMsIDMsIDApOworICAgIHNjcm9sbG9rKHdpbiwgVFJVRSk7CisgICAga2V5cGFkKHdpbiwgVFJVRSk7CisgICAgd21vdmUod2luLCAwLCAwKTsKKworICAgIC8qIHdlIGRvIHRoZSBkZWZpbmVfa2V5KCkgY2FsbHMgYWZ0ZXIga2V5cGFkKCksIHNpbmNlIHRoZSBmaXJzdCBjYWxsIHRvCisgICAgICoga2V5cGFkKCkgaW5pdGlhbGl6ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YS4KKyAgICAgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgMTI7ICsrbikgeworCWNoYXIgbmFtZVsxMF07CisJc3ByaW50ZihuYW1lLCAia2YlZCIsIG4gKyAxKTsKKwlma2V5c1tuXSA9IHRpZ2V0c3RyKG5hbWUpOworICAgIH0KKyAgICBmb3IgKG4gPSAwOyBuIDwgMTI7ICsrbikgeworCXJlZGVmaW5lKHdpbiwgZmtleXNbMTEgLSBuXSwgS0VZX0YobiArIDEpKTsKKyAgICB9CisKKyAgICBkdXBsaWNhdGUod2luLCAia2N1YjEiLCBLRVlfTEVGVCk7CisgICAgZHVwbGljYXRlKHdpbiwgImtjdXUxIiwgS0VZX1VQKTsKKyAgICBkdXBsaWNhdGUod2luLCAia2N1ZDEiLCBLRVlfRE9XTik7CisgICAgZHVwbGljYXRlKHdpbiwgImtjdWYxIiwgS0VZX1JJR0hUKTsKKworICAgIHJlbW92ZV9kZWZpbml0aW9uKHdpbiwgS0VZX0ExKTsKKyAgICByZW1vdmVfZGVmaW5pdGlvbih3aW4sIEtFWV9BMyk7CisgICAgcmVtb3ZlX2RlZmluaXRpb24od2luLCBLRVlfQjIpOworICAgIHJlbW92ZV9kZWZpbml0aW9uKHdpbiwgS0VZX0MxKTsKKyAgICByZW1vdmVfZGVmaW5pdGlvbih3aW4sIEtFWV9DMyk7CisKKyAgICByZWFsbHlfZGVmaW5lX2tleSh3aW4sICJcMDMzTyIsIDEwMjMpOworCisgICAgd2hpbGUgKChjaCA9IHdnZXRjaCh3aW4pKSAhPSBFUlIpIHsKKwljb25zdCBjaGFyICpuYW1lID0ga2V5bmFtZShjaCk7CisJd3ByaW50dyh3aW4sICJLZXljb2RlICVkLCBuYW1lICVzXG4iLAorCQljaCwKKwkJbmFtZSAhPSAwID8gbmFtZSA6ICI8bnVsbD4iKTsKKwlsb2dfbGFzdF9saW5lKHdpbik7CisJd2NscnRvZW9sKHdpbik7CisJaWYgKGNoID09ICdxJykKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9kZW1vX2Zvcm1zLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2RlbW9fZm9ybXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDZhNTcxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9kZW1vX2Zvcm1zLmMKQEAgLTAsMCArMSw1MzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBkZW1vX2Zvcm1zLmMsdiAxLjMwIDIwMDgvMTAvMTggMjA6Mzg6MjAgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgYSB2YXJpZXR5IG9mIGZ1bmN0aW9ucyBmcm9tIHRoZSBmb3JtIGxpYnJhcnkuCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwMy80LzI2CisgKi8KKy8qCitUWVBFX0VOVU0JCQktCitUWVBFX1JFR0VYUAkJCS0KK2R1cF9maWVsZAkJCS0KK2ZpZWxkX2luaXQJCQktCitmaWVsZF9qdXN0CQkJLQorZmllbGRfdGVybQkJCS0KK2Zvcm1faW5pdAkJCS0KK2Zvcm1fb3B0cwkJCS0KK2Zvcm1fb3B0c19vZmYJCQktCitmb3JtX29wdHNfb24JCQktCitmb3JtX3JlcXVlc3RfYnlfbmFtZQkJLQorZm9ybV90ZXJtCQkJLQorZm9ybV91c2VycHRyCQkJLQorZnJlZV9maWVsZHR5cGUJCQktCitsaW5rX2ZpZWxkCQkJLQorbGlua19maWVsZHR5cGUJCQktCittb3ZlX2ZpZWxkCQkJLQorbmV3X3BhZ2UJCQktCitwb3NfZm9ybV9jdXJzb3IJCQktCitzZXRfZmllbGRfaW5pdAkJCS0KK3NldF9maWVsZF90ZXJtCQkJLQorc2V0X2ZpZWxkdHlwZV9hcmcJCS0KK3NldF9maWVsZHR5cGVfY2hvaWNlCQktCitzZXRfZm9ybV9maWVsZHMJCQktCitzZXRfZm9ybV9pbml0CQkJLQorc2V0X2Zvcm1fb3B0cwkJCS0KK3NldF9mb3JtX3BhZ2UJCQktCitzZXRfZm9ybV90ZXJtCQkJLQorc2V0X2Zvcm1fdXNlcnB0cgkJLQorc2V0X21heF9maWVsZAkJCS0KKyovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIFVTRV9MSUJGT1JNCisKKyNpbmNsdWRlIDxlZGl0X2ZpZWxkLmg+CisKK3N0YXRpYyBpbnQgZF9vcHRpb24gPSAwOworc3RhdGljIGludCBqX3ZhbHVlID0gMDsKK3N0YXRpYyBpbnQgbV92YWx1ZSA9IDA7CitzdGF0aWMgaW50IG9fdmFsdWUgPSAwOworc3RhdGljIGNoYXIgKnRfdmFsdWUgPSAwOworCitzdGF0aWMgRklFTEQgKgorbWFrZV9sYWJlbChpbnQgZnJvdywgaW50IGZjb2wsIE5DVVJTRVNfQ09OU1QgY2hhciAqbGFiZWwpCit7CisgICAgRklFTEQgKmYgPSBuZXdfZmllbGQoMSwgKGludCkgc3RybGVuKGxhYmVsKSwgZnJvdywgZmNvbCwgMCwgMCk7CisKKyAgICBpZiAoZikgeworCXNldF9maWVsZF9idWZmZXIoZiwgMCwgbGFiZWwpOworCXNldF9maWVsZF9vcHRzKGYsIChpbnQpIChmaWVsZF9vcHRzKGYpICYgfk9fQUNUSVZFKSk7CisgICAgfQorICAgIHJldHVybiAoZik7Cit9CisKKy8qCisgKiBEZWZpbmUgZWFjaCBmaWVsZCB3aXRoIGFuIGV4dHJhIG9uZSwgZm9yIHJlZmxlY3RpbmcgImFjdHVhbCIgdGV4dC4KKyAqLworc3RhdGljIEZJRUxEICoKK21ha2VfZmllbGQoaW50IGZyb3csIGludCBmY29sLCBpbnQgcm93cywgaW50IGNvbHMpCit7CisgICAgRklFTEQgKmYgPSBuZXdfZmllbGQocm93cywgY29scywgZnJvdywgZmNvbCwgb192YWx1ZSwgMSk7CisKKyAgICBpZiAoZikgeworCXNldF9maWVsZF9iYWNrKGYsIEFfVU5ERVJMSU5FKTsKKwkvKgorCSAqIElmIC1qIGFuZCAtZCBvcHRpb25zIGFyZSBjb21iaW5lZCwgLWogbG9zZXMuICBJdCBpcyBkb2N1bWVudGVkIGluCisJICogIkNoYXJhY3RlciBVc2VyIEludGVyZmFjZSBQcm9ncmFtbWluZyIsIHBhZ2UgMTItMTUgdGhhdCBzZXR0aW5nCisJICogT19TVEFUSUMgb2ZmIG1ha2VzIHRoZSBmb3JtIGxpYnJhcnkgaWdub3JlIGp1c3RpZmljYXRpb24uCisJICovCisJc2V0X2ZpZWxkX2p1c3QoZiwgal92YWx1ZSk7CisJaWYgKGRfb3B0aW9uKSB7CisJICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwkJc2V0X2ZpZWxkX2ZvcmUoZiwgQ09MT1JfUEFJUigyKSk7CisJCXNldF9maWVsZF9iYWNrKGYsIEFfVU5ERVJMSU5FIHwgQ09MT1JfUEFJUigzKSk7CisJICAgIH0gZWxzZSB7CisJCXNldF9maWVsZF9mb3JlKGYsIEFfQk9MRCk7CisJICAgIH0KKwkgICAgLyoKKwkgICAgICogVGhlIGZpZWxkX29wdHNfb2ZmKCkgY2FsbCBkdW1wcyBjb3JlIHdpdGggU29sYXJpcyBjdXJzZXMsCisJICAgICAqIGJ1dCB0aGF0IGlzIGEga25vd24gYnVnIGluIFNvbGFyaXMnIGZvcm0gbGlicmFyeSAtVEQKKwkgICAgICovCisJICAgIGZpZWxkX29wdHNfb2ZmKGYsIE9fU1RBVElDKTsKKwkgICAgc2V0X21heF9maWVsZChmLCBtX3ZhbHVlKTsKKwl9CisKKwkvKgorCSAqIFRoZSB1c2VycHRyIGlzIHVzZWQgaW4gZWRpdF9maWVsZC5jJ3MgaW5hY3RpdmVfZmllbGQoKS4KKwkgKi8KKwlzZXRfZmllbGRfdXNlcnB0cihmLCAodm9pZCAqKSAobG9uZykgZmllbGRfYmFjayhmKSk7CisJaWYgKHRfdmFsdWUpCisJICAgIHNldF9maWVsZF9idWZmZXIoZiwgMCwgdF92YWx1ZSk7CisgICAgfQorICAgIHJldHVybiAoZik7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNwbGF5X2Zvcm0oRk9STSAqIGYpCit7CisgICAgV0lORE9XICp3OworICAgIGludCByb3dzLCBjb2xzOworCisgICAgc2NhbGVfZm9ybShmLCAmcm93cywgJmNvbHMpOworCisgICAgLyoKKyAgICAgKiBQdXQgdGhlIGZvcm0gYXQgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5LCB3aXRoIGp1c3QgYSBib3gKKyAgICAgKiBhcm91bmQgaXQuCisgICAgICovCisgICAgaWYgKCh3ID0gbmV3d2luKHJvd3MgKyAyLCBjb2xzICsgNCwgMCwgMCkpICE9IChXSU5ET1cgKikgMCkgeworCXNldF9mb3JtX3dpbihmLCB3KTsKKwlzZXRfZm9ybV9zdWIoZiwgZGVyd2luKHcsIHJvd3MsIGNvbHMsIDEsIDIpKTsKKwlib3godywgMCwgMCk7CisJa2V5cGFkKHcsIFRSVUUpOworICAgIH0KKworICAgIGlmIChwb3N0X2Zvcm0oZikgIT0gRV9PSykKKwl3cmVmcmVzaCh3KTsKK30KKworc3RhdGljIHZvaWQKK2VyYXNlX2Zvcm0oRk9STSAqIGYpCit7CisgICAgV0lORE9XICp3ID0gZm9ybV93aW4oZik7CisgICAgV0lORE9XICpzID0gZm9ybV9zdWIoZik7CisKKyAgICB1bnBvc3RfZm9ybShmKTsKKyAgICB3ZXJhc2Uodyk7CisgICAgd3JlZnJlc2godyk7CisgICAgZGVsd2luKHMpOworICAgIGRlbHdpbih3KTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfaW5zZXJ0X21vZGUoYm9vbCBpbnNlcnRfbW9kZSkKK3sKKyAgICBtdmFkZHN0cig1LCA1NywgKGluc2VydF9tb2RlCisJCSAgICAgPyAiZm9ybV9zdGF0dXM6IGluc2VydCAiCisJCSAgICAgOiAiZm9ybV9zdGF0dXM6IG92ZXJsYXkiKSk7Cit9CisKKyNkZWZpbmUgT19TRUxFQ1RBQkxFIChPX0FDVElWRSB8IE9fVklTSUJMRSkKKworc3RhdGljIEZJRUxEICoKK2Fub3RoZXJfZmllbGQoRk9STSAqIGZvcm0sIEZJRUxEICogZmllbGQpCit7CisgICAgRklFTEQgKipmID0gZm9ybV9maWVsZHMoZm9ybSk7CisgICAgRklFTEQgKnJlc3VsdCA9IDA7CisgICAgaW50IG47CisKKyAgICBmb3IgKG4gPSAwOyBmW25dICE9IDA7ICsrbikgeworCWlmIChmW25dICE9IGZpZWxkKSB7CisJICAgIHJlc3VsdCA9IGZbbl07CisJICAgIGZpZWxkX29wdHNfb24ocmVzdWx0LCBPX1NFTEVDVEFCTEUpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK215X2Zvcm1fZHJpdmVyKEZPUk0gKiBmb3JtLCBpbnQgYykKK3sKKyAgICBzdGF0aWMgYm9vbCBpbnNlcnRfbW9kZSA9IFRSVUU7CisgICAgRklFTEQgKmZpZWxkOworCisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSBNWV9RVUlUOgorCWlmIChmb3JtX2RyaXZlcihmb3JtLCBSRVFfVkFMSURBVElPTikgPT0gRV9PSykKKwkgICAgcmV0dXJuIChUUlVFKTsKKwlicmVhazsKKyAgICBjYXNlIE1ZX0hFTFA6CisJaGVscF9lZGl0X2ZpZWxkKCk7CisJYnJlYWs7CisgICAgY2FzZSBNWV9FRFRfTU9ERToKKwlpZiAoKGZpZWxkID0gY3VycmVudF9maWVsZChmb3JtKSkgIT0gMCkgeworCSAgICBzZXRfY3VycmVudF9maWVsZChmb3JtLCBhbm90aGVyX2ZpZWxkKGZvcm0sIGZpZWxkKSk7CisJICAgIGlmIChmaWVsZF9vcHRzKGZpZWxkKSAmIE9fRURJVCkgeworCQlmaWVsZF9vcHRzX29mZihmaWVsZCwgT19FRElUKTsKKwkJc2V0X2ZpZWxkX3N0YXR1cyhmaWVsZCwgMCk7CisJICAgIH0gZWxzZSB7CisJCWZpZWxkX29wdHNfb24oZmllbGQsIE9fRURJVCk7CisJICAgIH0KKwkgICAgc2V0X2N1cnJlbnRfZmllbGQoZm9ybSwgZmllbGQpOworCX0KKwlicmVhazsKKyAgICBjYXNlIE1ZX0lOU19NT0RFOgorCS8qIHRoZXJlIHNob3VsZCBiZSBhIGZvcm1fc3RhdHVzKCkgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpcyBub25lICovCisJaWYgKCFpbnNlcnRfbW9kZSkgeworCSAgICBpZiAoZm9ybV9kcml2ZXIoZm9ybSwgUkVRX0lOU19NT0RFKSA9PSBFX09LKSB7CisJCWluc2VydF9tb2RlID0gVFJVRTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGlmIChmb3JtX2RyaXZlcihmb3JtLCBSRVFfT1ZMX01PREUpID09IEVfT0spIHsKKwkJaW5zZXJ0X21vZGUgPSBGQUxTRTsKKwkgICAgfQorCX0KKwlzaG93X2luc2VydF9tb2RlKGluc2VydF9tb2RlKTsKKwlyZWZyZXNoKCk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwliZWVwKCk7CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiAoRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19jdXJyZW50X2ZpZWxkKFdJTkRPVyAqd2luLCBGT1JNICogZm9ybSkKK3sKKyAgICBGSUVMRCAqZmllbGQ7CisgICAgRklFTERUWVBFICp0eXBlOworICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICBpbnQgbmJ1ZjsKKyAgICBpbnQgZmllbGRfcm93cywgZmllbGRfY29scywgZmllbGRfbWF4OworCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCXdia2dkKHdpbiwgQ09MT1JfUEFJUigxKSk7CisgICAgfQorICAgIHdlcmFzZSh3aW4pOworICAgIHdwcmludHcod2luLCAiQ3Vyc29yOiAlZCwlZCIsIGZvcm0tPmN1cnJvdywgZm9ybS0+Y3VyY29sKTsKKyAgICBpZiAoZGF0YV9haGVhZChmb3JtKSkKKwl3YWRkc3RyKHdpbiwgIiBhaGVhZCIpOworICAgIGlmIChkYXRhX2JlaGluZChmb3JtKSkKKwl3YWRkc3RyKHdpbiwgIiBiZWhpbmQiKTsKKyAgICB3YWRkY2god2luLCAnXG4nKTsKKyAgICBpZiAoKGZpZWxkID0gY3VycmVudF9maWVsZChmb3JtKSkgIT0gMCkgeworCXdwcmludHcod2luLCAiUGFnZSAlZCVzLCBGaWVsZCAlZC8lZCVzOiIsCisJCWZvcm1fcGFnZShmb3JtKSwKKwkJbmV3X3BhZ2UoZmllbGQpID8gIioiIDogIiIsCisJCWZpZWxkX2luZGV4KGZpZWxkKSwgZmllbGRfY291bnQoZm9ybSksCisJCWZpZWxkX2FyZyhmaWVsZCkgPyAiKGFyZykiIDogIiIpOworCWlmICgodHlwZSA9IGZpZWxkX3R5cGUoZmllbGQpKSAhPSAwKSB7CisJICAgIGlmICh0eXBlID09IFRZUEVfQUxOVU0pCisJCXdhZGRzdHIod2luLCAiQUxOVU0iKTsKKwkgICAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX0FMUEhBKQorCQl3YWRkc3RyKHdpbiwgIkFMUEhBIik7CisJICAgIGVsc2UgaWYgKHR5cGUgPT0gVFlQRV9FTlVNKQorCQl3YWRkc3RyKHdpbiwgIkVOVU0iKTsKKwkgICAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX0lOVEVHRVIpCisJCXdhZGRzdHIod2luLCAiSU5URUdFUiIpOworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCSAgICBlbHNlIGlmICh0eXBlID09IFRZUEVfSVBWNCkKKwkJd2FkZHN0cih3aW4sICJJUFY0Iik7CisjZW5kaWYKKwkgICAgZWxzZSBpZiAodHlwZSA9PSBUWVBFX05VTUVSSUMpCisJCXdhZGRzdHIod2luLCAiTlVNRVJJQyIpOworCSAgICBlbHNlIGlmICh0eXBlID09IFRZUEVfUkVHRVhQKQorCQl3YWRkc3RyKHdpbiwgIlJFR0VYUCIpOworCSAgICBlbHNlCisJCXdhZGRzdHIod2luLCAib3RoZXIiKTsKKwl9CisKKwlpZiAoZmllbGRfb3B0cyhmaWVsZCkgJiBPX0VESVQpCisJICAgIHdhZGRzdHIod2luLCAiIGVkaXRhYmxlIik7CisJZWxzZQorCSAgICB3YWRkc3RyKHdpbiwgIiByZWFkb25seSIpOworCisJaWYgKGZpZWxkX3N0YXR1cyhmaWVsZCkpCisJICAgIHdhZGRzdHIod2luLCAiIG1vZGlmaWVkIik7CisKKwlpZiAoZHluYW1pY19maWVsZF9pbmZvKGZpZWxkLCAmZmllbGRfcm93cywgJmZpZWxkX2NvbHMsICZmaWVsZF9tYXgpCisJICAgICE9IEVSUikgeworCSAgICB3cHJpbnR3KHdpbiwgIiBzaXplICVkeCVkIChtYXggJWQpIiwKKwkJICAgIGZpZWxkX3Jvd3MsIGZpZWxkX2NvbHMsIGZpZWxkX21heCk7CisJfQorCisJd2FkZGNoKHdpbiwgJyAnKTsKKwl3YXR0cnNldCh3aW4sIGZpZWxkX2ZvcmUoZmllbGQpKTsKKwl3YWRkc3RyKHdpbiwgImZvcmUiKTsKKwl3YXR0cm9mZih3aW4sIGZpZWxkX2ZvcmUoZmllbGQpKTsKKworCXdhZGRjaCh3aW4sICcvJyk7CisKKwl3YXR0cnNldCh3aW4sIGZpZWxkX2JhY2soZmllbGQpKTsKKwl3YWRkc3RyKHdpbiwgImJhY2siKTsKKwl3YXR0cm9mZih3aW4sIGZpZWxkX2JhY2soZmllbGQpKTsKKworCXdwcmludHcod2luLCAiLCBwYWQgJyVjJyIsCisJCWZpZWxkX3BhZChmaWVsZCkpOworCisJd2FkZHN0cih3aW4sICJcbiIpOworCWZvciAobmJ1ZiA9IDA7IG5idWYgPD0gMjsgKytuYnVmKSB7CisJICAgIGlmICgoYnVmZmVyID0gZmllbGRfYnVmZmVyKGZpZWxkLCBuYnVmKSkgIT0gMCkgeworCQl3cHJpbnR3KHdpbiwgImJ1ZmZlciAlZDoiLCBuYnVmKTsKKwkJd2F0dHJzZXQod2luLCBBX1JFVkVSU0UpOworCQl3YWRkc3RyKHdpbiwgYnVmZmVyKTsKKwkJd2F0dHJvZmYod2luLCBBX1JFVkVSU0UpOworCQl3YWRkc3RyKHdpbiwgIlxuIik7CisJICAgIH0KKwl9CisgICAgfQorICAgIHdyZWZyZXNoKHdpbik7Cit9CisKK3N0YXRpYyB2b2lkCitkZW1vX2Zvcm1zKHZvaWQpCit7CisgICAgV0lORE9XICp3OworICAgIEZPUk0gKmZvcm07CisgICAgRklFTEQgKmZbMTAwXTsJCS8qIEZJWE1FIG1lbXNldCB0byB6ZXJvICovCisgICAgaW50IGZpbmlzaGVkID0gMCwgYzsKKyAgICB1bnNpZ25lZCBuID0gMDsKKyAgICBpbnQgcGc7CisgICAgV0lORE9XICphbHNvOworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKEFMTF9NT1VTRV9FVkVOVFMsIChtbWFza190ICopIDApOworI2VuZGlmCisKKyAgICBoZWxwX2VkaXRfZmllbGQoKTsKKworICAgIG12YWRkc3RyKDQsIDU3LCAiRm9ybXMgRW50cnkgVGVzdCIpOworICAgIHNob3dfaW5zZXJ0X21vZGUoVFJVRSk7CisKKyAgICByZWZyZXNoKCk7CisKKyAgICAvKiBkZXNjcmliZSB0aGUgZm9ybSAqLworICAgIG1lbXNldChmLCAwLCBzaXplb2YoZikpOworICAgIGZvciAocGcgPSAwOyBwZyA8IDQ7ICsrcGcpIHsKKwljaGFyIGxhYmVsWzgwXTsKKwlzcHJpbnRmKGxhYmVsLCAiU2FtcGxlIEZvcm0gUGFnZSAlZCIsIHBnICsgMSk7CisJZltuKytdID0gbWFrZV9sYWJlbCgwLCAxNSwgbGFiZWwpOworCXNldF9uZXdfcGFnZShmW24gLSAxXSwgVFJVRSk7CisKKwlzd2l0Y2ggKHBnKSB7CisJZGVmYXVsdDoKKwkgICAgZltuKytdID0gbWFrZV9sYWJlbCgyLCAwLCAiTGFzdCBOYW1lIik7CisJICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMCwgMSwgMTgpOworCSAgICBzZXRfZmllbGRfdHlwZShmW24gLSAxXSwgVFlQRV9BTFBIQSwgMSk7CisKKwkgICAgZltuKytdID0gbWFrZV9sYWJlbCgyLCAyMCwgIkZpcnN0IE5hbWUiKTsKKwkgICAgZltuKytdID0gbWFrZV9maWVsZCgzLCAyMCwgMSwgMTIpOworCSAgICBzZXRfZmllbGRfdHlwZShmW24gLSAxXSwgVFlQRV9BTFBIQSwgMSk7CisKKwkgICAgZltuKytdID0gbWFrZV9sYWJlbCgyLCAzNCwgIk1pZGRsZSBOYW1lIik7CisJICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMzQsIDEsIDEyKTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxQSEEsIDEpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMCwgIkxhc3QgTmFtZSIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDAsIDEsIDE4KTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxQSEEsIDEpOworCisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMjAsICJGaXJzdCBOYW1lIik7CisJICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMjAsIDEsIDEyKTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxQSEEsIDEpOworCisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMzQsICJNSSIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDM0LCAxLCAxKTsKKwkgICAgc2V0X2ZpZWxkX3BhZChmW24gLSAxXSwgJz8nKTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxQSEEsIDEpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMCwgIkhvc3QgTmFtZSIpOworCSAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDAsIDEsIDE4KTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxOVU0sIDEpOworCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMjAsICJJUCBBZGRyZXNzIik7CisJICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMjAsIDEsIDEyKTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfSVBWNCwgMSk7CisjZW5kaWYKKworCSAgICBicmVhazsKKworCWNhc2UgMzoKKwkgICAgZltuKytdID0gbWFrZV9sYWJlbCgyLCAwLCAiRm91ciBkaWdpdHMiKTsKKwkgICAgZltuKytdID0gbWFrZV9maWVsZCgzLCAwLCAxLCAxOCk7CisJICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0lOVEVHRVIsIDQsIDAsIDApOworCisJICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMjAsICJOdW1lcmljIik7CisJICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMjAsIDEsIDEyKTsKKwkgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfTlVNRVJJQywgMywgLTEwMDAwLjAsIDEwMDAwMDAwMC4wKTsKKworCSAgICBicmVhazsKKwl9CisKKwlmW24rK10gPSBtYWtlX2xhYmVsKDUsIDAsICJDb21tZW50cyIpOworCWZbbisrXSA9IG1ha2VfZmllbGQoNiwgMCwgNCwgNDYpOworCXNldF9maWVsZF9idWZmZXIoZltuIC0gMV0sIDAsICJIRUxMT1xuV09STEQhIik7CisJc2V0X2ZpZWxkX2J1ZmZlcihmW24gLSAxXSwgMSwgIkhlbGxvXG5Xb3JsZCEiKTsKKyAgICB9CisKKyAgICBmW24rK10gPSAoRklFTEQgKikgMDsKKworICAgIGlmICgoZm9ybSA9IG5ld19mb3JtKGYpKSAhPSAwKSB7CisKKwlkaXNwbGF5X2Zvcm0oZm9ybSk7CisKKwl3ID0gZm9ybV93aW4oZm9ybSk7CisJYWxzbyA9IG5ld3dpbihnZXRtYXh5KHN0ZHNjcikgLSBnZXRtYXh5KHcpLCBDT0xTLCBnZXRtYXh5KHcpLCAwKTsKKwlzaG93X2N1cnJlbnRfZmllbGQoYWxzbywgZm9ybSk7CisKKwl3aGlsZSAoIWZpbmlzaGVkKSB7CisJICAgIHN3aXRjaCAoZWRpdF9maWVsZChmb3JtLCAmYykpIHsKKwkgICAgY2FzZSBFX09LOgorCQlicmVhazsKKwkgICAgY2FzZSBFX1VOS05PV05fQ09NTUFORDoKKwkJZmluaXNoZWQgPSBteV9mb3JtX2RyaXZlcihmb3JtLCBjKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJlZXAoKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgc2hvd19jdXJyZW50X2ZpZWxkKGFsc28sIGZvcm0pOworCX0KKworCWVyYXNlX2Zvcm0oZm9ybSk7CisKKwlmcmVlX2Zvcm0oZm9ybSk7CisgICAgfQorICAgIGZvciAoYyA9IDA7IGZbY10gIT0gMDsgYysrKQorCWZyZWVfZmllbGQoZltjXSk7CisgICAgbm9yYXcoKTsKKyAgICBubCgpOworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKDAsIChtbWFza190ICopIDApOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICp0YmxbXSA9CisgICAgeworCSJVc2FnZTogZGVtb19mb3JtcyBbb3B0aW9uc10iCisJLCIiCisJLCIgLWQgICAgICAgIG1ha2UgZmllbGRzIGR5bmFtaWMiCisJLCIgLWogdmFsdWUgIGp1c3RpZnkgKDE9bGVmdCwgMj1jZW50ZXIsIDM9cmlnaHQpIgorCSwiIC1tIHZhbHVlICBzZXQgbWF4aW11bSBzaXplIG9mIGR5bmFtaWMgZmllbGRzIgorCSwiIC1vIHZhbHVlICBzcGVjaWZ5IG51bWJlciBvZiBvZmZzY3JlZW4gcm93cyBpbiBuZXdfZmllbGQoKSIKKwksIiAtdCB2YWx1ZSAgc3BlY2lmeSB0ZXh0IHRvIGZpbGwgZmllbGRzIGluaXRpYWxseSIKKyAgICB9OworICAgIHVuc2lnbmVkIGludCBqOworICAgIGZvciAoaiA9IDA7IGogPCBTSVpFT0YodGJsKTsgKytqKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHRibFtqXSk7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgY2g7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJkajptOm86dDoiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnZCc6CisJICAgIGRfb3B0aW9uID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnaic6CisJICAgIGpfdmFsdWUgPSBhdG9pKG9wdGFyZyk7CisJICAgIGlmIChqX3ZhbHVlIDwgTk9fSlVTVElGSUNBVElPTgorCQl8fCBqX3ZhbHVlID4gSlVTVElGWV9SSUdIVCkKKwkJdXNhZ2UoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbSc6CisJICAgIG1fdmFsdWUgPSBhdG9pKG9wdGFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ28nOgorCSAgICBvX3ZhbHVlID0gYXRvaShvcHRhcmcpOworCSAgICBicmVhazsKKwljYXNlICd0JzoKKwkgICAgdF92YWx1ZSA9IG9wdGFyZzsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKworCX0KKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisgICAgY2JyZWFrKCk7CisgICAgbm9lY2hvKCk7CisgICAgcmF3KCk7CisgICAgbm9ubCgpOwkJCS8qIGxldHMgdXMgcmVhZCBeTSdzICovCisgICAgaW50cmZsdXNoKHN0ZHNjciwgRkFMU0UpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCXN0YXJ0X2NvbG9yKCk7CisJaW5pdF9wYWlyKDEsIENPTE9SX1dISVRFLCBDT0xPUl9CTFVFKTsKKwlpbml0X3BhaXIoMiwgQ09MT1JfR1JFRU4sIENPTE9SX0JMQUNLKTsKKwlpbml0X3BhaXIoMywgQ09MT1JfQ1lBTiwgQ09MT1JfQkxBQ0spOworCWJrZ2QoQ09MT1JfUEFJUigxKSk7CisJcmVmcmVzaCgpOworICAgIH0KKworICAgIGRlbW9fZm9ybXMoKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIGN1cnNlcyBmb3JtIGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvZGVtb19rZXlvay5jIGIvbmN1cnNlcy01LjcvdGVzdC9kZW1vX2tleW9rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyNGQ5OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZGVtb19rZXlvay5jCkBAIC0wLDAgKzEsODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBkZW1vX2tleW9rLmMsdiAxLjUgMjAwNi8xMS8wNCAyMDowOTo1MSB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUga2V5b2soKSBmdW5jdGlvbi4KKyAqIFRob21hcyBEaWNrZXkgLSAyMDAyLzExLzIzCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIE5DVVJTRVNfRVhUX0ZVTkNTCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBpbnQgbGFzdGNoID0gRVJSOworICAgIGludCBjaDsKKyAgICBXSU5ET1cgKndpbjsKKworICAgIGluaXRzY3IoKTsKKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgcHJpbnR3KCJUeXBpbmcgYW55IGZ1bmN0aW9uIGtleSB3aWxsIGRpc2FibGUgaXQsIGJ1dCB0eXBpbmcgaXQgdHdpY2UgaW5cbiIpOworICAgIHByaW50dygiYSByb3cgd2lsbCB0dXJuIGl0IGJhY2sgb24gKGp1c3QgZm9yIGEgZGVtbykuIik7CisgICAgcmVmcmVzaCgpOworCisgICAgd2luID0gbmV3d2luKExJTkVTIC0gMiwgQ09MUywgMiwgMCk7CisgICAgc2Nyb2xsb2sod2luLCBUUlVFKTsKKyAgICBrZXlwYWQod2luLCBUUlVFKTsKKyAgICB3bW92ZSh3aW4sIDAsIDApOworCisgICAgd2hpbGUgKChjaCA9IHdnZXRjaCh3aW4pKSAhPSBFUlIpIHsKKwljb25zdCBjaGFyICpuYW1lID0ga2V5bmFtZShjaCk7CisJd3ByaW50dyh3aW4sICJLZXljb2RlICVkLCBuYW1lICVzXG4iLAorCQljaCwKKwkJbmFtZSAhPSAwID8gbmFtZSA6ICI8bnVsbD4iKTsKKwl3Y2xydG9lb2wod2luKTsKKwl3cmVmcmVzaCh3aW4pOworCWlmIChjaCA+PSBLRVlfTUlOKSB7CisJICAgIGtleW9rKGNoLCBGQUxTRSk7CisJICAgIGxhc3RjaCA9IGNoOworCX0gZWxzZSBpZiAobGFzdGNoID49IEtFWV9NSU4pIHsKKwkgICAga2V5b2sobGFzdGNoLCBUUlVFKTsKKwl9CisgICAgfQorICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9kZW1vX21lbnVzLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2RlbW9fbWVudXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDU1M2UyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9kZW1vX21lbnVzLmMKQEAgLTAsMCArMSw5MDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBkZW1vX21lbnVzLmMsdiAxLjI4IDIwMDgvMDgvMjMgMjA6MzE6NTQgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgYSB2YXJpZXR5IG9mIGZ1bmN0aW9ucyBmcm9tIHRoZSBtZW51IGxpYnJhcnkuCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwNS80LzkKKyAqLworLyoKK2l0ZW1fZGVzY3JpcHRpb24JCS0KK2l0ZW1faW5pdAkJCS0KK2l0ZW1fb3B0cwkJCS0KK2l0ZW1fb3B0c19vZmYJCQktCitpdGVtX29wdHNfb24JCQktCitpdGVtX3Rlcm0JCQktCitpdGVtX3VzZXJwdHIJCQktCitpdGVtX3Zpc2libGUJCQktCittZW51X2JhY2sJCQktCittZW51X2ZvcmUJCQktCittZW51X2Zvcm1hdAkJCS0KK21lbnVfZ3JleQkJCS0KK21lbnVfaW5pdAkJCS0KK21lbnVfb3B0cwkJCS0KK21lbnVfcGFkCQkJLQorbWVudV9yZXF1ZXN0X2J5X25hbWUJCS0KK21lbnVfcmVxdWVzdF9uYW1lCQktCittZW51X3N1YgkJCS0KK21lbnVfdGVybQkJCS0KK21lbnVfdXNlcnB0cgkJCS0KK3NldF9jdXJyZW50X2l0ZW0JCS0KK3NldF9pdGVtX2luaXQJCQktCitzZXRfaXRlbV9vcHRzCQkJLQorc2V0X2l0ZW1fdGVybQkJCS0KK3NldF9pdGVtX3VzZXJwdHIJCS0KK3NldF9tZW51X2dyZXkJCQktCitzZXRfbWVudV9pbml0CQkJLQorc2V0X21lbnVfaXRlbXMJCQktCitzZXRfbWVudV9vcHRzCQkJLQorc2V0X21lbnVfcGFkCQkJLQorc2V0X21lbnVfcGF0dGVybgkJLQorc2V0X21lbnVfc3BhY2luZwkJLQorc2V0X21lbnVfdGVybQkJCS0KK3NldF9tZW51X3VzZXJwdHIJCS0KK3NldF90b3Bfcm93CQkJLQordG9wX3JvdwkJCQktCisqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfTElCTUVOVQorCisjaW5jbHVkZSA8bWVudS5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorI2lmZGVmIFRSQUNFCitzdGF0aWMgdW5zaWduZWQgc2F2ZV90cmFjZSA9IFRSQUNFX09SRElOQVJZIHwgVFJBQ0VfQ0FMTFM7CitleHRlcm4gdW5zaWduZWQgX25jX3RyYWNpbmc7CitzdGF0aWMgTUVOVSAqbXBUcmFjZTsKKyNlbmRpZgorI2Vsc2UKKyN1bmRlZiBUUkFDRQorI2VuZGlmCisKK3R5cGVkZWYgZW51bSB7CisgICAgZUJhbm5lciA9IC0xCisgICAgLGVGaWxlCisgICAgLGVTZWxlY3QKKyNpZmRlZiBUUkFDRQorICAgICxlVHJhY2UKKyNlbmRpZgorICAgICxlTUFYCit9IE1lbnVObzsKKworI2RlZmluZSBva01lbnVObyhuKSAoKChuKSA+IGVCYW5uZXIpICYmICgobikgPCBlTUFYKSkKKworI2RlZmluZSBNRU5VX1kJMQorCitzdGF0aWMgTUVOVSAqbXBCYW5uZXI7CitzdGF0aWMgTUVOVSAqbXBGaWxlOworc3RhdGljIE1FTlUgKm1wU2VsZWN0OworCitzdGF0aWMgYm9vbCBsb2FkZWRfZmlsZSA9IEZBTFNFOworCisjaWYgIUhBVkVfU1RSRFVQCisjZGVmaW5lIHN0cmR1cCBteV9zdHJkdXAKK3N0YXRpYyBjaGFyICoKK3N0cmR1cChjaGFyICpzKQoreworICAgIGNoYXIgKnAgPSB0eXBlTWFsbG9jKGNoYXIsIHN0cmxlbihzKSArIDEpOworICAgIGlmIChwKQorCXN0cmNweShwLCBzKTsKKyAgICByZXR1cm4gKHApOworfQorI2VuZGlmIC8qIG5vdCBIQVZFX1NUUkRVUCAqLworCisvKiBDb21tb24gZnVuY3Rpb24gdG8gYWxsb3cgXlQgdG8gdG9nZ2xlIHRyYWNlLW1vZGUgaW4gdGhlIG1pZGRsZSBvZiBhIHRlc3QKKyAqIHNvIHRoYXQgdHJhY2UtZmlsZXMgY2FuIGJlIG1hZGUgc21hbGxlci4KKyAqLworc3RhdGljIGludAord0dldGNoYXIoV0lORE9XICp3aW4pCit7CisgICAgaW50IGM7CisjaWZkZWYgVFJBQ0UKKyAgICB3aGlsZSAoKGMgPSB3Z2V0Y2god2luKSkgPT0gQ1RSTCgnVCcpKSB7CisJaWYgKF9uY190cmFjaW5nKSB7CisJICAgIHNhdmVfdHJhY2UgPSBfbmNfdHJhY2luZzsKKwkgICAgVHJhY2UoKCJUT0dHTEUtVFJBQ0lORyBPRkYiKSk7CisJICAgIF9uY190cmFjaW5nID0gMDsKKwl9IGVsc2UgeworCSAgICBfbmNfdHJhY2luZyA9IHNhdmVfdHJhY2U7CisJfQorCXRyYWNlKF9uY190cmFjaW5nKTsKKwlpZiAoX25jX3RyYWNpbmcpCisJICAgIFRyYWNlKCgiVE9HR0xFLVRSQUNJTkcgT04iKSk7CisgICAgfQorI2Vsc2UKKyAgICBjID0gd2dldGNoKHdpbik7CisjZW5kaWYKKyAgICByZXR1cm4gYzsKK30KKyNkZWZpbmUgR2V0Y2hhcigpIHdHZXRjaGFyKHN0ZHNjcikKKworc3RhdGljIGludAorbWVudV92aXJ0dWFsaXplKGludCBjKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAoYyA9PSAnXG4nIHx8IGMgPT0gS0VZX0VYSVQpCisJcmVzdWx0ID0gKE1BWF9DT01NQU5EICsgMSk7CisgICAgZWxzZSBpZiAoYyA9PSAndScpCisJcmVzdWx0ID0gKFJFUV9TQ1JfVUxJTkUpOworICAgIGVsc2UgaWYgKGMgPT0gJ2QnKQorCXJlc3VsdCA9IChSRVFfU0NSX0RMSU5FKTsKKyAgICBlbHNlIGlmIChjID09ICdiJyB8fCBjID09IEtFWV9OUEFHRSkKKwlyZXN1bHQgPSAoUkVRX1NDUl9VUEFHRSk7CisgICAgZWxzZSBpZiAoYyA9PSAnZicgfHwgYyA9PSBLRVlfUFBBR0UpCisJcmVzdWx0ID0gKFJFUV9TQ1JfRFBBR0UpOworICAgIGVsc2UgaWYgKGMgPT0gJ2wnIHx8IGMgPT0gS0VZX0xFRlQgfHwgYyA9PSBLRVlfQlRBQikKKwlyZXN1bHQgPSAoUkVRX0xFRlRfSVRFTSk7CisgICAgZWxzZSBpZiAoYyA9PSAnbicgfHwgYyA9PSBLRVlfRE9XTikKKwlyZXN1bHQgPSAoUkVRX05FWFRfSVRFTSk7CisgICAgZWxzZSBpZiAoYyA9PSAncCcgfHwgYyA9PSBLRVlfVVApCisJcmVzdWx0ID0gKFJFUV9QUkVWX0lURU0pOworICAgIGVsc2UgaWYgKGMgPT0gJ3InIHx8IGMgPT0gS0VZX1JJR0hUIHx8IGMgPT0gJ1x0JykKKwlyZXN1bHQgPSAoUkVRX1JJR0hUX0lURU0pOworICAgIGVsc2UgaWYgKGMgPT0gJyAnKQorCXJlc3VsdCA9IChSRVFfVE9HR0xFX0lURU0pOworICAgIGVsc2UgeworCWlmIChjICE9IEtFWV9NT1VTRSkKKwkgICAgYmVlcCgpOworCXJlc3VsdCA9IChjKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludAorbWVudV9nZXRjKE1FTlUgKiBtKQoreworICAgIHJldHVybiB3R2V0Y2hhcihtZW51X3dpbihtKSk7Cit9CisKK3N0YXRpYyBpbnQKK21lbnVfb2Zmc2V0KE1lbnVObyBudW1iZXIpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisKKyAgICBpZiAob2tNZW51Tm8obnVtYmVyKSkgeworCWludCBzcGNfZGVzYywgc3BjX3Jvd3MsIHNwY19jb2xzOworCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisJbWVudV9zcGFjaW5nKG1wQmFubmVyLCAmc3BjX2Rlc2MsICZzcGNfcm93cywgJnNwY19jb2xzKTsKKyNlbHNlCisJc3BjX3Jvd3MgPSAwOworI2VuZGlmCisKKwkvKiBGSVhNRTogTUVOVS5pdGVtbGVuIHNlZW1zIHRoZSBvbmx5IHdheSB0byBnZXQgYWN0dWFsIHdpZHRoIG9mIGl0ZW1zICovCisJcmVzdWx0ID0gKG51bWJlciAtIChlQmFubmVyICsgMSkpICogKG1wQmFubmVyLT5pdGVtbGVuICsgc3BjX3Jvd3MpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgTUVOVSAqCittZW51X2NyZWF0ZShJVEVNICoqIGl0ZW1zLCBpbnQgY291bnQsIGludCBuY29scywgTWVudU5vIG51bWJlcikKK3sKKyAgICBNRU5VICpyZXN1bHQ7CisgICAgV0lORE9XICptZW51d2luOworICAgIGludCBtcm93cywgbWNvbHM7CisgICAgaW50IHkgPSBva01lbnVObyhudW1iZXIpID8gTUVOVV9ZIDogMDsKKyAgICBpbnQgeCA9IG1lbnVfb2Zmc2V0KG51bWJlcik7CisgICAgaW50IG1hcmdpbiA9ICh5ID09IE1FTlVfWSkgPyAxIDogMDsKKyAgICBpbnQgbWF4Y29sID0gKG5jb2xzICsgeCkgPCBDT0xTID8gbmNvbHMgOiAoQ09MUyAtIHggLSAxKTsKKyAgICBpbnQgbWF4cm93ID0gKGNvdW50ICsgMSkgLyBuY29sczsKKworICAgIGlmICgobWF4cm93ICsgeSkgPj0gKExJTkVTIC0gNCkpCisJbWF4cm93ID0gTElORVMgLSA0IC0geTsKKworICAgIHJlc3VsdCA9IG5ld19tZW51KGl0ZW1zKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzZXRfbWVudV9mb3JlKHJlc3VsdCwgQ09MT1JfUEFJUigxKSk7CisJc2V0X21lbnVfYmFjayhyZXN1bHQsIENPTE9SX1BBSVIoMikpOworICAgIH0KKworICAgIHNldF9tZW51X2Zvcm1hdChyZXN1bHQsIG1heHJvdywgbWF4Y29sKTsKKyAgICBzY2FsZV9tZW51KHJlc3VsdCwgJm1yb3dzLCAmbWNvbHMpOworCisgICAgaWYgKG1jb2xzICsgKDIgKiBtYXJnaW4gKyB4KSA+PSBDT0xTKQorCW1jb2xzID0gQ09MUyAtICgyICogbWFyZ2luICsgeCk7CisKKyNpZmRlZiBUUkFDRQorICAgIGlmIChudW1iZXIgPT0gZVRyYWNlKQorCW1lbnVfb3B0c19vZmYocmVzdWx0LCBPX09ORVZBTFVFKTsKKyAgICBlbHNlCisJbWVudV9vcHRzX29uKHJlc3VsdCwgT19PTkVWQUxVRSk7CisjZW5kaWYKKworICAgIG1lbnV3aW4gPSBuZXd3aW4obXJvd3MgKyAoMiAqIG1hcmdpbiksIG1jb2xzICsgKDIgKiBtYXJnaW4pLCB5LCB4KTsKKyAgICBzZXRfbWVudV93aW4ocmVzdWx0LCBtZW51d2luKTsKKyAgICBrZXlwYWQobWVudXdpbiwgVFJVRSk7CisgICAgaWYgKG1hcmdpbikKKwlib3gobWVudXdpbiwgMCwgMCk7CisKKyAgICBzZXRfbWVudV9zdWIocmVzdWx0LCBkZXJ3aW4obWVudXdpbiwgbXJvd3MsIG1jb2xzLCBtYXJnaW4sIG1hcmdpbikpOworCisgICAgcG9zdF9tZW51KHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorbWVudV9kZXN0cm95KE1FTlUgKiBtKQoreworICAgIGludCBjb3VudDsKKworICAgIFRyYWNlKCgibWVudV9kZXN0cm95ICVwIiwgbSkpOworICAgIGlmIChtICE9IDApIHsKKwlJVEVNICoqaXRlbXMgPSBtZW51X2l0ZW1zKG0pOworCWNvbnN0IGNoYXIgKmJsb2IgPSAwOworCisJY291bnQgPSBpdGVtX2NvdW50KG0pOworCVRyYWNlKCgibWVudV9kZXN0cm95ICVwIGNvdW50ICVkIiwgbSwgY291bnQpKTsKKwlpZiAoKGNvdW50ID4gMCkgJiYgKG0gPT0gbXBTZWxlY3QpKSB7CisJICAgIGJsb2IgPSBpdGVtX25hbWUoKml0ZW1zKTsKKwl9CisKKwl1bnBvc3RfbWVudShtKTsKKwlmcmVlX21lbnUobSk7CisKKwkvKiBmcmVlIHRoZSBleHRyYSBkYXRhIGFsbG9jYXRlZCBpbiBidWlsZF9zZWxlY3RfbWVudSgpICovCisJaWYgKChjb3VudCA+IDApICYmIChtID09IG1wU2VsZWN0KSkgeworCSAgICBpZiAoYmxvYiAmJiBsb2FkZWRfZmlsZSkgeworCQlUcmFjZSgoImZyZWVpbmcgYmxvYiAlcCIsIGJsb2IpKTsKKwkJZnJlZSgoY2hhciAqKSBibG9iKTsKKwkgICAgfQorCSAgICBmcmVlKGl0ZW1zKTsKKwl9CisjaWZkZWYgVFJBQ0UKKwlpZiAoKGNvdW50ID4gMCkgJiYgKG0gPT0gbXBUcmFjZSkpIHsKKwkgICAgSVRFTSAqKmlwID0gaXRlbXM7CisJICAgIHdoaWxlICgqaXApCisJCWZyZWUoKmlwKyspOworCX0KKyNlbmRpZgorICAgIH0KK30KKworLyogZm9yY2UgdGhlIGdpdmVuIG1lbnUgdG8gYXBwZWFyICovCitzdGF0aWMgdm9pZAorbWVudV9kaXNwbGF5KE1FTlUgKiBtKQoreworICAgIHRvdWNod2luKG1lbnVfd2luKG0pKTsKKyAgICB3cmVmcmVzaChtZW51X3dpbihtKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2J1aWxkX2ZpbGVfbWVudShNZW51Tm8gbnVtYmVyKQoreworICAgIHN0YXRpYyBDT05TVF9NRU5VUyBjaGFyICpsYWJlbHNbXSA9CisgICAgeworCSJFeGl0IiwKKwkoY2hhciAqKSAwCisgICAgfTsKKyAgICBzdGF0aWMgSVRFTSAqaXRlbXNbU0laRU9GKGxhYmVscyldOworCisgICAgSVRFTSAqKmlwID0gaXRlbXM7CisgICAgQ09OU1RfTUVOVVMgY2hhciAqKmFwOworCisgICAgZm9yIChhcCA9IGxhYmVsczsgKmFwOyBhcCsrKQorCSppcCsrID0gbmV3X2l0ZW0oKmFwLCAiIik7CisgICAgKmlwID0gKElURU0gKikgMDsKKworICAgIG1wRmlsZSA9IG1lbnVfY3JlYXRlKGl0ZW1zLCBTSVpFT0YobGFiZWxzKSAtIDEsIDEsIG51bWJlcik7Cit9CisKK3N0YXRpYyBpbnQKK3BlcmZvcm1fZmlsZV9tZW51KGludCBjbWQpCit7CisgICAgcmV0dXJuIG1lbnVfZHJpdmVyKG1wRmlsZSwgY21kKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorYnVpbGRfc2VsZWN0X21lbnUoTWVudU5vIG51bWJlciwgY2hhciAqZmlsZW5hbWUpCit7CisgICAgc3RhdGljIENPTlNUX01FTlVTIGNoYXIgKmxhYmVsc1tdID0KKyAgICB7CisJIkxpb25zIiwKKwkiVGlnZXJzIiwKKwkiQmVhcnMiLAorCSIoT2ggbXkhKSIsCisJIk5ld3RzIiwKKwkiUGxhdHlwaSIsCisJIkxlbXVycyIsCisJIihPaCByZWFsbHk/ISkiLAorCSJMZW9wYXJkcyIsCisJIlBhbnRoZXJzIiwKKwkiUHVtYXMiLAorCSJMaW9ucywgVGlnZXJzLCBCZWFycywgKE9oIG15ISksIE5ld3RzLCBQbGF0eXBpLCBMZW11cnMiLAorCSJMaW9ucywgVGlnZXJzLCBCZWFycywgKE9oIG15ISksIE5ld3RzLCBQbGF0eXBpLCBMZW11cnMsIExpb25zLCBUaWdlcnMsIEJlYXJzLCAoT2ggbXkhKSwgTmV3dHMsIFBsYXR5cGksIExlbXVycyIsCisJKGNoYXIgKikgMAorICAgIH07CisgICAgc3RhdGljIElURU0gKippdGVtczsKKworICAgIElURU0gKippcDsKKyAgICBDT05TVF9NRU5VUyBjaGFyICoqYXAgPSAwOworICAgIENPTlNUX01FTlVTIGNoYXIgKipteUxpc3QgPSAwOworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKworICAgIGlmIChmaWxlbmFtZSAhPSAwKSB7CisJc3RydWN0IHN0YXQgc2I7CisJaWYgKHN0YXQoZmlsZW5hbWUsICZzYikgPT0gMAorCSAgICAmJiAoc2Iuc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRworCSAgICAmJiBzYi5zdF9zaXplICE9IDApIHsKKwkgICAgc2l6ZV90IHNpemUgPSAoc2l6ZV90KSBzYi5zdF9zaXplOworCSAgICB1bnNpZ25lZCBqLCBrOworCSAgICBjaGFyICpibG9iID0gdHlwZU1hbGxvYyhjaGFyLCBzaXplICsgMSk7CisJICAgIENPTlNUX01FTlVTIGNoYXIgKipsaXN0ID0gdHlwZUNhbGxvYyhDT05TVF9NRU5VUyBjaGFyICosIHNpemUgKyAxKTsKKworCSAgICBpdGVtcyA9IHR5cGVDYWxsb2MoSVRFTSAqLCBzaXplICsgMSk7CisJICAgIFRyYWNlKCgiYnVpbGRfc2VsZWN0X21lbnUgYmxvYj0lcCwgaXRlbXM9JXAiLCBibG9iLCBpdGVtcykpOworCSAgICBpZiAoYmxvYiAhPSAwICYmIGxpc3QgIT0gMCkgeworCQlGSUxFICpmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCQlpZiAoZnAgIT0gMCkgeworCQkgICAgaWYgKGZyZWFkKGJsb2IsIHNpemVvZihjaGFyKSwgc2l6ZSwgZnApID09IHNpemUpIHsKKwkJCWJvb2wgbWFyayA9IFRSVUU7CisJCQlmb3IgKGogPSBrID0gMDsgaiA8IHNpemU7ICsraikgeworCQkJICAgIGlmIChtYXJrKSB7CisJCQkJbGlzdFtrKytdID0gYmxvYiArIGo7CisJCQkJbWFyayA9IEZBTFNFOworCQkJICAgIH0KKwkJCSAgICBpZiAoYmxvYltqXSA9PSAnXG4nKSB7CisJCQkJYmxvYltqXSA9ICdcMCc7CisJCQkJaWYgKGsgPiAwICYmICpsaXN0W2sgLSAxXSA9PSAnXDAnKQorCQkJCSAgICAtLWs7CisJCQkJbWFyayA9IFRSVUU7CisJCQkgICAgfSBlbHNlIGlmIChibG9iW2pdID09ICdcdCcpIHsKKwkJCQlibG9iW2pdID0gJyAnOwkvKiBtZW51IGl0ZW1zIGFyZSBwcmludGFibGUgKi8KKwkJCSAgICB9CisJCQl9CisJCQlsaXN0W2tdID0gMDsKKwkJCWNvdW50ID0gazsKKwkJCWFwID0gbXlMaXN0ID0gbGlzdDsKKwkJICAgIH0KKwkJICAgIGZjbG9zZShmcCk7CisJCX0KKwkJbG9hZGVkX2ZpbGUgPSBUUlVFOworCSAgICB9CisJfQorICAgIH0KKyAgICBpZiAoYXAgPT0gMCkgeworCWNvdW50ID0gU0laRU9GKGxhYmVscykgLSAxOworCWl0ZW1zID0gdHlwZUNhbGxvYyhJVEVNICosIGNvdW50ICsgMSk7CisJYXAgPSBsYWJlbHM7CisgICAgfQorCisgICAgaXAgPSBpdGVtczsKKyAgICB3aGlsZSAoKmFwICE9IDApCisJKmlwKysgPSBuZXdfaXRlbSgqYXArKywgIiIpOworICAgICppcCA9IDA7CisKKyAgICBtcFNlbGVjdCA9IG1lbnVfY3JlYXRlKGl0ZW1zLCAoaW50KSBjb3VudCwgMSwgbnVtYmVyKTsKKyAgICBpZiAobXlMaXN0ICE9IDApCisJZnJlZShteUxpc3QpOworfQorCitzdGF0aWMgaW50CitwZXJmb3JtX3NlbGVjdF9tZW51KGludCBjbWQpCit7CisgICAgcmV0dXJuIG1lbnVfZHJpdmVyKG1wU2VsZWN0LCBjbWQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBUUkFDRQorI2RlZmluZSBUX1RCTChuYW1lKSB7ICNuYW1lLCBuYW1lIH0KK3N0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgdW5zaWduZWQgbWFzazsKK30gdF90YmxbXSA9IHsKKworICAgIFRfVEJMKFRSQUNFX0RJU0FCTEUpLAorCVRfVEJMKFRSQUNFX1RJTUVTKSwKKwlUX1RCTChUUkFDRV9UUFVUUyksCisJVF9UQkwoVFJBQ0VfVVBEQVRFKSwKKwlUX1RCTChUUkFDRV9NT1ZFKSwKKwlUX1RCTChUUkFDRV9DSEFSUFVUKSwKKwlUX1RCTChUUkFDRV9PUkRJTkFSWSksCisJVF9UQkwoVFJBQ0VfQ0FMTFMpLAorCVRfVEJMKFRSQUNFX1ZJUlRQVVQpLAorCVRfVEJMKFRSQUNFX0lFVkVOVCksCisJVF9UQkwoVFJBQ0VfQklUUyksCisJVF9UQkwoVFJBQ0VfSUNBTExTKSwKKwlUX1RCTChUUkFDRV9DQ0FMTFMpLAorCVRfVEJMKFRSQUNFX0RBVEFCQVNFKSwKKwlUX1RCTChUUkFDRV9BVFRSUyksCisJVF9UQkwoVFJBQ0VfTUFYSU1VTSksCisgICAgeworCShjaGFyICopIDAsIDAKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZAorYnVpbGRfdHJhY2VfbWVudShNZW51Tm8gbnVtYmVyKQoreworICAgIHN0YXRpYyBJVEVNICppdGVtc1tTSVpFT0YodF90YmwpXTsKKworICAgIElURU0gKippcCA9IGl0ZW1zOworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgdF90Ymxbbl0ubmFtZSAhPSAwOyBuKyspCisJKmlwKysgPSBuZXdfaXRlbSh0X3RibFtuXS5uYW1lLCAiIik7CisgICAgKmlwID0gKElURU0gKikgMDsKKworICAgIG1wVHJhY2UgPSBtZW51X2NyZWF0ZShpdGVtcywgU0laRU9GKHRfdGJsKSAtIDEsIDIsIG51bWJlcik7Cit9CisKK3N0YXRpYyBjaGFyICoKK3RyYWNldHJhY2UodW5zaWduZWQgdGxldmVsKQoreworICAgIHN0YXRpYyBjaGFyICpidWY7CisgICAgaW50IG47CisKKyAgICBpZiAoYnVmID09IDApIHsKKwlzaXplX3QgbmVlZCA9IDEyOworCWZvciAobiA9IDA7IHRfdGJsW25dLm5hbWUgIT0gMDsgbisrKQorCSAgICBuZWVkICs9IHN0cmxlbih0X3RibFtuXS5uYW1lKSArIDI7CisJYnVmID0gdHlwZU1hbGxvYyhjaGFyLCBuZWVkKTsKKyAgICB9CisgICAgc3ByaW50ZihidWYsICIweCUwMnggPSB7IiwgdGxldmVsKTsKKyAgICBpZiAodGxldmVsID09IDApIHsKKwlzcHJpbnRmKGJ1ZiArIHN0cmxlbihidWYpLCAiJXMsICIsIHRfdGJsWzBdLm5hbWUpOworICAgIH0gZWxzZSB7CisJZm9yIChuID0gMTsgdF90Ymxbbl0ubmFtZSAhPSAwOyBuKyspCisJICAgIGlmICgodGxldmVsICYgdF90Ymxbbl0ubWFzaykgPT0gdF90Ymxbbl0ubWFzaykgeworCQlzdHJjYXQoYnVmLCB0X3RibFtuXS5uYW1lKTsKKwkJc3RyY2F0KGJ1ZiwgIiwgIik7CisJICAgIH0KKyAgICB9CisgICAgaWYgKGJ1ZltzdHJsZW4oYnVmKSAtIDJdID09ICcsJykKKwlidWZbc3RybGVuKGJ1ZikgLSAyXSA9ICdcMCc7CisgICAgcmV0dXJuIChzdHJjYXQoYnVmLCAifSIpKTsKK30KKworLyogZmFrZSBhIGR5bmFtaWNhbGx5IHJlY29uZmlndXJhYmxlIG1lbnUgdXNpbmcgdGhlIDB0aCBlbnRyeSB0byBkZXNlbGVjdAorICogdGhlIG90aGVycworICovCitzdGF0aWMgYm9vbAordXBkYXRlX3RyYWNlX21lbnUoTUVOVSAqIG0pCit7CisgICAgSVRFTSAqKml0ZW1zOworICAgIElURU0gKmksICoqcDsKKyAgICBib29sIGNoYW5nZWQgPSBGQUxTRTsKKworICAgIGl0ZW1zID0gbWVudV9pdGVtcyhtKTsKKyAgICBpID0gY3VycmVudF9pdGVtKG0pOworICAgIGlmIChpID09IGl0ZW1zWzBdKSB7CisJaWYgKGl0ZW1fdmFsdWUoaSkpIHsKKwkgICAgZm9yIChwID0gaXRlbXMgKyAxOyAqcCAhPSAwOyBwKyspCisJCWlmIChpdGVtX3ZhbHVlKCpwKSkgeworCQkgICAgc2V0X2l0ZW1fdmFsdWUoKnAsIEZBTFNFKTsKKwkJICAgIGNoYW5nZWQgPSBUUlVFOworCQl9CisJfQorICAgIH0KKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludAorcGVyZm9ybV90cmFjZV9tZW51KGludCBjbWQpCisvKiBpbnRlcmFjdGl2ZWx5IHNldCB0aGUgdHJhY2UgbGV2ZWwgKi8KK3sKKyAgICBJVEVNICoqaXA7CisgICAgdW5zaWduZWQgbmV3dHJhY2U7CisgICAgaW50IHJlc3VsdDsKKworICAgIGZvciAoaXAgPSBtZW51X2l0ZW1zKG1wVHJhY2UpOyAqaXA7IGlwKyspIHsKKwl1bnNpZ25lZCBtYXNrID0gdF90YmxbaXRlbV9pbmRleCgqaXApXS5tYXNrOworCWlmIChtYXNrID09IDApCisJICAgIHNldF9pdGVtX3ZhbHVlKCppcCwgX25jX3RyYWNpbmcgPT0gMCk7CisJZWxzZSBpZiAoKG1hc2sgJiBfbmNfdHJhY2luZykgPT0gbWFzaykKKwkgICAgc2V0X2l0ZW1fdmFsdWUoKmlwLCBUUlVFKTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBtZW51X2RyaXZlcihtcFRyYWNlLCBjbWQpOworCisgICAgaWYgKHJlc3VsdCA9PSBFX09LKSB7CisJaWYgKHVwZGF0ZV90cmFjZV9tZW51KG1wVHJhY2UpIHx8IGNtZCA9PSBSRVFfVE9HR0xFX0lURU0pIHsKKwkgICAgbmV3dHJhY2UgPSAwOworCSAgICBmb3IgKGlwID0gbWVudV9pdGVtcyhtcFRyYWNlKTsgKmlwOyBpcCsrKSB7CisJCWlmIChpdGVtX3ZhbHVlKCppcCkpCisJCSAgICBuZXd0cmFjZSB8PSB0X3RibFtpdGVtX2luZGV4KCppcCldLm1hc2s7CisJICAgIH0KKwkgICAgdHJhY2UobmV3dHJhY2UpOworCSAgICBUcmFjZSgoInRyYWNlIGxldmVsIGludGVyYWN0aXZlbHkgc2V0IHRvICVzIiwgdHJhY2V0cmFjZShfbmNfdHJhY2luZykpKTsKKworCSAgICAodm9pZCkgbXZwcmludHcoTElORVMgLSAyLCAwLAorCQkJICAgICJUcmFjZSBsZXZlbCBpcyAlc1xuIiwgdHJhY2V0cmFjZShfbmNfdHJhY2luZykpOworCSAgICByZWZyZXNoKCk7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qIFRSQUNFICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorbWVudV9udW1iZXIodm9pZCkKK3sKKyAgICByZXR1cm4gaXRlbV9pbmRleChjdXJyZW50X2l0ZW0obXBCYW5uZXIpKSAtIChlQmFubmVyICsgMSk7Cit9CisKK3N0YXRpYyBNRU5VICoKK2N1cnJlbnRfbWVudSh2b2lkKQoreworICAgIE1FTlUgKnJlc3VsdDsKKworICAgIHN3aXRjaCAobWVudV9udW1iZXIoKSkgeworICAgIGNhc2UgZUZpbGU6CisJcmVzdWx0ID0gbXBGaWxlOworCWJyZWFrOworICAgIGNhc2UgZVNlbGVjdDoKKwlyZXN1bHQgPSBtcFNlbGVjdDsKKwlicmVhazsKKyNpZmRlZiBUUkFDRQorICAgIGNhc2UgZVRyYWNlOgorCXJlc3VsdCA9IG1wVHJhY2U7CisJYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorCXJlc3VsdCA9IDA7CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitidWlsZF9tZW51cyhjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBzdGF0aWMgQ09OU1RfTUVOVVMgY2hhciAqbGFiZWxzW10gPQorICAgIHsKKwkiRmlsZSIsCisJIlNlbGVjdCIsCisjaWZkZWYgVFJBQ0UKKwkiVHJhY2UiLAorI2VuZGlmCisJKGNoYXIgKikgMAorICAgIH07CisgICAgc3RhdGljIElURU0gKml0ZW1zW1NJWkVPRihsYWJlbHMpXTsKKworICAgIElURU0gKippcCA9IGl0ZW1zOworICAgIENPTlNUX01FTlVTIGNoYXIgKiphcDsKKworICAgIGZvciAoYXAgPSBsYWJlbHM7ICphcDsgYXArKykKKwkqaXArKyA9IG5ld19pdGVtKCphcCwgIiIpOworICAgICppcCA9IChJVEVNICopIDA7CisKKyAgICBtcEJhbm5lciA9IG1lbnVfY3JlYXRlKGl0ZW1zLCBTSVpFT0YobGFiZWxzKSAtIDEsIFNJWkVPRihsYWJlbHMpIC0gMSwgZUJhbm5lcik7CisgICAgc2V0X21lbnVfbWFyayhtcEJhbm5lciwgIj4iKTsKKworICAgIGJ1aWxkX2ZpbGVfbWVudShlRmlsZSk7CisgICAgYnVpbGRfc2VsZWN0X21lbnUoZVNlbGVjdCwgZmlsZW5hbWUpOworI2lmZGVmIFRSQUNFCisgICAgYnVpbGRfdHJhY2VfbWVudShlVHJhY2UpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK21vdmVfbWVudShNRU5VICogbWVudSwgTUVOVSAqIGN1cnJlbnQsIGludCBieV95LCBpbnQgYnlfeCkKK3sKKyAgICBXSU5ET1cgKnRvcF93aW4gPSBtZW51X3dpbihtZW51KTsKKyAgICBXSU5ET1cgKnN1Yl93aW4gPSBtZW51X3N1YihtZW51KTsKKyAgICBpbnQgeTAsIHgwOworICAgIGludCB5MSwgeDE7CisgICAgaW50IHJlc3VsdDsKKworICAgIGdldGJlZ3l4KHRvcF93aW4sIHkwLCB4MCk7CisgICAgeTAgKz0gYnlfeTsKKyAgICB4MCArPSBieV94OworCisgICAgZ2V0YmVneXgoc3ViX3dpbiwgeTEsIHgxKTsKKyAgICB5MSArPSBieV95OworICAgIHgxICs9IGJ5X3g7CisKKyAgICBpZiAoKHJlc3VsdCA9IG12d2luKHRvcF93aW4sIHkwLCB4MCkpICE9IEVSUikgeworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OX1BBVENIKSAmJiAoTkNVUlNFU19WRVJTSU9OX1BBVENIIDwgMjAwNjAyMTgpCisJc3ViX3dpbi0+X2JlZ3kgPSB5MTsKKwlzdWJfd2luLT5fYmVneCA9IHgxOworI2Vsc2UKKwltdndpbihzdWJfd2luLCB5MSwgeDEpOworI2VuZGlmCisJaWYgKG1lbnUgPT0gY3VycmVudCkgeworCSAgICB0b3VjaHdpbih0b3Bfd2luKTsKKwkgICAgd25vdXRyZWZyZXNoKHRvcF93aW4pOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE1vdmUgdGhlIG1lbnVzIGFyb3VuZCBvbiB0aGUgc2NyZWVuLCB0byB0ZXN0IG12d2luKCkuCisgKi8KK3N0YXRpYyB2b2lkCittb3ZlX21lbnVzKE1FTlUgKiBjdXJyZW50LCBpbnQgYnlfeSwgaW50IGJ5X3gpCit7CisgICAgaWYgKG1vdmVfbWVudShtcEJhbm5lciwgY3VycmVudCwgYnlfeSwgYnlfeCkgIT0gRVJSKSB7CisJZXJhc2UoKTsKKwl3bm91dHJlZnJlc2goc3Rkc2NyKTsKKwltb3ZlX21lbnUobXBGaWxlLCBjdXJyZW50LCBieV95LCBieV94KTsKKwltb3ZlX21lbnUobXBTZWxlY3QsIGN1cnJlbnQsIGJ5X3ksIGJ5X3gpOworI2lmZGVmIFRSQUNFCisJbW92ZV9tZW51KG1wVHJhY2UsIGN1cnJlbnQsIGJ5X3ksIGJ5X3gpOworI2VuZGlmCisJZG91cGRhdGUoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3N0YXR1cyhpbnQgY2gsIE1FTlUgKiBtZW51KQoreworICAgIG1vdmUoTElORVMgLSAxLCAwKTsKKyAgICBwcmludHcoImtleSAlcywgbWVudSAlZCwgbWFyayAlcywgbWF0Y2ggJXMiLAorCSAgIGtleW5hbWUoY2gpLAorCSAgIG1lbnVfbnVtYmVyKCksCisJICAgbWVudV9tYXJrKG1lbnUpLAorCSAgIG1lbnVfcGF0dGVybihtZW51KSk7CisgICAgY2xydG9lb2woKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmb3JtX21lbnVzKHZvaWQpCit7CisgICAgTUVOVSAqdGhpc19tZW51OworICAgIE1FTlUgKmxhc3RfbWVudSA9IG1wRmlsZTsKKyAgICBpbnQgY29kZSA9IEVfVU5LTk9XTl9DT01NQU5EOworICAgIGludCBjbWQ7CisgICAgaW50IGNoID0gRVJSOworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKEFMTF9NT1VTRV9FVkVOVFMsIChtbWFza190ICopIDApOworI2VuZGlmCisKKyAgICBtZW51X2Rpc3BsYXkobGFzdF9tZW51KTsKKworICAgIGZvciAoOzspIHsKKworCWlmIChjaCAhPSBFUlIpCisJICAgIHNob3dfc3RhdHVzKGNoLCBsYXN0X21lbnUpOworCisJY2ggPSBtZW51X2dldGMobXBCYW5uZXIpOworCisJLyoKKwkgKiBQcm92aWRlIGZvciBtb3ZpbmcgdGhlIG1lbnUgYXJvdW5kIGluIHRoZSBzY3JlZW4gdXNpbmcgc2hpZnRlZAorCSAqIGN1cnNvciBrZXlzLgorCSAqLworCXN3aXRjaCAoY2gpIHsKKwljYXNlIEtFWV9TRjoKKwkgICAgbW92ZV9tZW51cyhsYXN0X21lbnUsIDEsIDApOworCSAgICBjb250aW51ZTsKKwljYXNlIEtFWV9TUjoKKwkgICAgbW92ZV9tZW51cyhsYXN0X21lbnUsIC0xLCAwKTsKKwkgICAgY29udGludWU7CisJY2FzZSBLRVlfU0xFRlQ6CisJICAgIG1vdmVfbWVudXMobGFzdF9tZW51LCAwLCAtMSk7CisJICAgIGNvbnRpbnVlOworCWNhc2UgS0VZX1NSSUdIVDoKKwkgICAgbW92ZV9tZW51cyhsYXN0X21lbnUsIDAsIDEpOworCSAgICBjb250aW51ZTsKKwl9CisJY21kID0gbWVudV92aXJ0dWFsaXplKGNoKTsKKworCXN3aXRjaCAoY21kKSB7CisJICAgIC8qCisJICAgICAqIFRoZSBiYW5uZXIgbWVudSBhY3RzIHNvbGVseSB0byBzZWxlY3Qgb25lIG9mIHRoZSBvdGhlciBtZW51cy4KKwkgICAgICogTW92ZSBiZXR3ZWVuIGl0cyBpdGVtcywgd3JhcHBpbmcgYXQgdGhlIGxlZnQvcmlnaHQgbGltaXRzLgorCSAgICAgKi8KKwljYXNlIFJFUV9MRUZUX0lURU06CisJY2FzZSBSRVFfUklHSFRfSVRFTToKKwkgICAgY29kZSA9IG1lbnVfZHJpdmVyKG1wQmFubmVyLCBjbWQpOworCSAgICBpZiAoY29kZSA9PSBFX1JFUVVFU1RfREVOSUVEKSB7CisJCWlmIChtZW51X251bWJlcigpID4gMCkKKwkJICAgIGNvZGUgPSBtZW51X2RyaXZlcihtcEJhbm5lciwgUkVRX0ZJUlNUX0lURU0pOworCQllbHNlCisJCSAgICBjb2RlID0gbWVudV9kcml2ZXIobXBCYW5uZXIsIFJFUV9MQVNUX0lURU0pOworCSAgICB9CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHN3aXRjaCAobWVudV9udW1iZXIoKSkgeworCSAgICBjYXNlIGVGaWxlOgorCQljb2RlID0gcGVyZm9ybV9maWxlX21lbnUoY21kKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgZVNlbGVjdDoKKwkJY29kZSA9IHBlcmZvcm1fc2VsZWN0X21lbnUoY21kKTsKKwkJYnJlYWs7CisjaWZkZWYgVFJBQ0UKKwkgICAgY2FzZSBlVHJhY2U6CisJCWNvZGUgPSBwZXJmb3JtX3RyYWNlX21lbnUoY21kKTsKKwkJYnJlYWs7CisjZW5kaWYKKwkgICAgfQorCisJICAgIGlmICgoY29kZSA9PSBFX1JFUVVFU1RfREVOSUVEKSAmJiAoY21kID09IEtFWV9NT1VTRSkpIHsKKwkJY29kZSA9IG1lbnVfZHJpdmVyKG1wQmFubmVyLCBjbWQpOworCSAgICB9CisKKwkgICAgYnJlYWs7CisJfQorCisJaWYgKGNvZGUgPT0gRV9PSykgeworCSAgICB0aGlzX21lbnUgPSBjdXJyZW50X21lbnUoKTsKKwkgICAgaWYgKHRoaXNfbWVudSAhPSBsYXN0X21lbnUpIHsKKwkJbW92ZSgxLCAwKTsKKwkJY2xydG9ib3QoKTsKKwkJYm94KG1lbnVfd2luKHRoaXNfbWVudSksIDAsIDApOworCQlyZWZyZXNoKCk7CisKKwkJLyogZm9yY2UgdGhlIGN1cnJlbnQgbWVudSB0byBhcHBlYXIgKi8KKwkJbWVudV9kaXNwbGF5KHRoaXNfbWVudSk7CisKKwkJbGFzdF9tZW51ID0gdGhpc19tZW51OworCSAgICB9CisJfQorCXdyZWZyZXNoKG1lbnVfd2luKGxhc3RfbWVudSkpOworCWlmIChjb2RlID09IEVfVU5LTk9XTl9DT01NQU5ECisJICAgIHx8IGNvZGUgPT0gRV9OT1RfUE9TVEVEKSB7CisJICAgIGlmIChtZW51X251bWJlcigpID09IGVGaWxlKQorCQlicmVhazsKKwkgICAgYmVlcCgpOworCX0KKwlpZiAoY29kZSA9PSBFX1JFUVVFU1RfREVOSUVEKQorCSAgICBiZWVwKCk7CisJY29udGludWU7CisgICAgfQorCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKDAsIChtbWFza190ICopIDApOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCitkZXN0cm95X21lbnVzKHZvaWQpCit7CisgICAgbWVudV9kZXN0cm95KG1wRmlsZSk7CisgICAgbWVudV9kZXN0cm95KG1wU2VsZWN0KTsKKyNpZmRlZiBUUkFDRQorICAgIG1lbnVfZGVzdHJveShtcFRyYWNlKTsKKyNlbmRpZgorICAgIG1lbnVfZGVzdHJveShtcEJhbm5lcik7Cit9CisKKyNpZiBIQVZFX1JJUE9GRkxJTkUKK3N0YXRpYyBpbnQKK3JpcF9mb290ZXIoV0lORE9XICp3aW4sIGludCBjb2xzKQoreworICAgIHdia2dkKHdpbiwgQV9SRVZFUlNFKTsKKyAgICB3ZXJhc2Uod2luKTsKKyAgICB3bW92ZSh3aW4sIDAsIDApOworICAgIHdwcmludHcod2luLCAiZm9vdGVyOiAlZCBjb2x1bW5zIiwgY29scyk7CisgICAgd25vdXRyZWZyZXNoKHdpbik7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0aWMgaW50CityaXBfaGVhZGVyKFdJTkRPVyAqd2luLCBpbnQgY29scykKK3sKKyAgICB3YmtnZCh3aW4sIEFfUkVWRVJTRSk7CisgICAgd2VyYXNlKHdpbik7CisgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICB3cHJpbnR3KHdpbiwgImhlYWRlcjogJWQgY29sdW1ucyIsIGNvbHMpOworICAgIHdub3V0cmVmcmVzaCh3aW4pOworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZiAvKiBIQVZFX1JJUE9GRkxJTkUgKi8KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRibFtdID0KKyAgICB7CisJIlVzYWdlOiBkZW1vX21lbnVzIFtvcHRpb25zXSIKKwksIiIKKwksIk9wdGlvbnM6IgorI2lmIEhBVkVfUklQT0ZGTElORQorCSwiICAtZiAgICAgICByaXAtb2ZmIGZvb3RlciBsaW5lIChjYW4gcmVwZWF0KSIKKwksIiAgLWggICAgICAgcmlwLW9mZiBoZWFkZXIgbGluZSAoY2FuIHJlcGVhdCkiCisjZW5kaWYKKyNpZmRlZiBUUkFDRQorCSwiICAtdCBtYXNrICBzcGVjaWZ5IGRlZmF1bHQgdHJhY2UtbGV2ZWwgKG1heSB0b2dnbGUgd2l0aCBeVCkiCisjZW5kaWYKKyAgICB9OworICAgIHNpemVfdCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YodGJsKTsgbisrKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHRibFtuXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGM7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImE6ZGU6ZmhtcDpzOnQ6IikpICE9IC0xKSB7CisJc3dpdGNoIChjKSB7CisjaWYgSEFWRV9SSVBPRkZMSU5FCisJY2FzZSAnZic6CisJICAgIHJpcG9mZmxpbmUoLTEsIHJpcF9mb290ZXIpOworCSAgICBicmVhazsKKwljYXNlICdoJzoKKwkgICAgcmlwb2ZmbGluZSgxLCByaXBfaGVhZGVyKTsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogSEFWRV9SSVBPRkZMSU5FICovCisjaWZkZWYgVFJBQ0UKKwljYXNlICd0JzoKKwkgICAgdHJhY2Uoc3RydG91bChvcHRhcmcsIDAsIDApKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisgICAgbm9yYXcoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworCWluaXRfcGFpcigxLCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLKTsKKwlpbml0X3BhaXIoMiwgQ09MT1JfQkxVRSwgQ09MT1JfV0hJVEUpOworICAgIH0KKyAgICBidWlsZF9tZW51cyhhcmdjID4gMSA/IGFyZ3ZbMV0gOiAwKTsKKyAgICBwZXJmb3JtX21lbnVzKCk7CisgICAgZGVzdHJveV9tZW51cygpOworCisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgY3Vyc2VzIG1lbnUgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9kZW1vX3BhbmVscy5jIGIvbmN1cnNlcy01LjcvdGVzdC9kZW1vX3BhbmVscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NTkzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2RlbW9fcGFuZWxzLmMKQEAgLTAsMCArMSw4MTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBkZW1vX3BhbmVscy5jLHYgMS4zMyAyMDA4LzA4LzA0IDEzOjMzOjQ4IHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMgZnJvbSB0aGUgcGFuZWwgbGlicmFyeS4KKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfTElCUEFORUwKKworI2luY2x1ZGUgPHBhbmVsLmg+CisKKyNkZWZpbmUgTEFTVF9QT1MgJ0AnCisjZGVmaW5lIFRFTVBfUE9TICc+JworCit0eXBlZGVmIHZvaWQgKCpJbml0UGFuZWwpICh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoKkZpbGxQYW5lbCkgKFBBTkVMICopOworCitzdGF0aWMgYm9vbCB1c2VfY29sb3JzID0gRkFMU0U7CitzdGF0aWMgYm9vbCB1bmJveGVkID0gRkFMU0U7CitzdGF0aWMgRklMRSAqbG9nX2luOworc3RhdGljIEZJTEUgKmxvZ19vdXQ7CisKK3N0YXRpYyB2b2lkCitjbG9zZV9pbnB1dCh2b2lkKQoreworICAgIGlmIChsb2dfaW4gIT0gMCkgeworCWZjbG9zZShsb2dfaW4pOworCWxvZ19pbiA9IDA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY2xvc2Vfb3V0cHV0KHZvaWQpCit7CisgICAgaWYgKGxvZ19vdXQgIT0gMCkgeworCWZjbG9zZShsb2dfb3V0KTsKKwlsb2dfb3V0ID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBXSU5ET1cgKgorc3RhdHVzbGluZSh2b2lkKQoreworICAgIFdJTkRPVyAqcmVzdWx0ID0gc3Rkc2NyOworCisgICAgd21vdmUocmVzdWx0LCBMSU5FUyAtIDEsIDApOworICAgIHdjbHJ0b2VvbChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitwZmx1c2godm9pZCkKK3sKKyAgICB1cGRhdGVfcGFuZWxzKCk7CisgICAgZG91cGRhdGUoKTsKK30KKworc3RhdGljIHZvaWQKK3NheXdoYXQoTkNVUlNFU19DT05TVCBjaGFyICp0ZXh0KQoreworICAgIFdJTkRPVyAqd2luID0gc3RhdHVzbGluZSgpOworICAgIGlmICh0ZXh0ICE9IDAgJiYgKnRleHQgIT0gJ1wwJykgeworCXdhZGRzdHIod2luLCB0ZXh0KTsKKwl3YWRkc3RyKHdpbiwgIjsgIik7CisgICAgfQorICAgIHdhZGRzdHIod2luLCAicHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19wb3NpdGlvbihOQ1VSU0VTX0NPTlNUIGNoYXIgKnRleHQsCisJICAgICAgTkNVUlNFU19DT05TVCBjaGFyICphbHNvLAorCSAgICAgIGludCB3aGljaCwKKwkgICAgICBpbnQgeXBvcywKKwkgICAgICBpbnQgeHBvcykKK3sKKyAgICBXSU5ET1cgKndpbiA9IHN0YXR1c2xpbmUoKTsKKworICAgIHdwcmludHcod2luLCAiJXMgZm9yIHBhbmVsICVkIG5vdyAlZCwlZCVzIiwgdGV4dCwgd2hpY2gsIHlwb3MsIHhwb3MsIGFsc28pOworICAgIHdtb3ZlKHN0ZHNjciwgeXBvcywgeHBvcyk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9wb3NpdGlvbihOQ1VSU0VTX0NPTlNUIGNoYXIgKnRleHQsCisJICAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKmFsc28sCisJICAgICBpbnQgd2hpY2gsCisJICAgICBpbnQgKnhwb3MsCisJICAgICBpbnQgKnlwb3MpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaW50IHgxLCB5MTsKKyAgICBjaGFyIGNtZDsKKyAgICBXSU5ET1cgKndpbjsKKworICAgIGdldHl4KHN0ZHNjciwgeTEsIHgxKTsKKyAgICB3aW4gPSBzdGF0dXNsaW5lKCk7CisKKyAgICBzaG93X3Bvc2l0aW9uKHRleHQsIGFsc28sIHdoaWNoLCB5MSwgeDEpOworCisgICAgaWYgKGxvZ19pbiAhPSAwKSB7CisJaWYgKGZzY2FuZihsb2dfaW4sICIlYyVkLCVkXG4iLCAmY21kLCAmeTEsICZ4MSkgPT0gMykgeworCSAgICBzd2l0Y2ggKGNtZCkgeworCSAgICBjYXNlIExBU1RfUE9TOgorCQlyZXN1bHQgPSAxOworCQkodm9pZCkgd2dldGNoKHN0ZHNjcik7CisJCWJyZWFrOworCSAgICBjYXNlIFRFTVBfUE9TOgorCQlyZXN1bHQgPSAwOworCQl3cmVmcmVzaChzdGRzY3IpOworCQluYXBtcygxMDApOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcmVzdWx0ID0gLTE7CisJCWJyZWFrOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgcmVzdWx0ID0gLTE7CisJfQorICAgIH0gZWxzZSB7CisKKwlzd2l0Y2ggKHdnZXRjaChzdGRzY3IpKSB7CisJY2FzZSBRVUlUOgorCWNhc2UgRVNDQVBFOgorCWNhc2UgRVJSOgorCSAgICByZXN1bHQgPSAtMTsKKwkgICAgYnJlYWs7CisJY2FzZSAnICc6CisJICAgIHJlc3VsdCA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1VQOgorCSAgICBpZiAoeTEgPiAwKSB7CisJCS0teTE7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9ET1dOOgorCSAgICBpZiAoeTEgPCBnZXRtYXh5KHN0ZHNjcikpIHsKKwkJKyt5MTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJICAgIGlmICh4MSA+IDApIHsKKwkJLS14MTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1JJR0hUOgorCSAgICBpZiAoeDEgPCBnZXRtYXh4KHN0ZHNjcikpIHsKKwkJKyt4MTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICB3bW92ZShzdGRzY3IsIHkxLCB4MSk7CisgICAgKnlwb3MgPSB5MTsKKyAgICAqeHBvcyA9IHgxOworCisgICAgaWYgKHJlc3VsdCA+PSAwKSB7CisJaWYgKGxvZ19vdXQpCisJICAgIGZwcmludGYobG9nX291dCwgIiVjJWQsJWRcbiIsCisJCSAgICAoKHJlc3VsdCA+IDApCisJCSAgICAgPyBMQVNUX1BPUworCQkgICAgIDogVEVNUF9QT1MpLAorCQkgICAgeTEsIHgxKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFBBTkVMICoKK21rcGFuZWwoc2hvcnQgY29sb3IsIGludCByb3dzLCBpbnQgY29scywgaW50IHRseSwgaW50IHRseCkKK3sKKyAgICBXSU5ET1cgKndpbjsKKyAgICBQQU5FTCAqcGFuID0gMDsKKyAgICBjaGFyICp1c2VyZGF0YSA9IHR5cGVNYWxsb2MoY2hhciwgMyk7CisKKyAgICBpZiAoKHdpbiA9IG5ld3dpbihyb3dzLCBjb2xzLCB0bHksIHRseCkpICE9IDApIHsKKwlrZXlwYWQod2luLCBUUlVFKTsKKwlpZiAoKHBhbiA9IG5ld19wYW5lbCh3aW4pKSA9PSAwKSB7CisJICAgIGRlbHdpbih3aW4pOworCX0gZWxzZSBpZiAodXNlX2NvbG9ycykgeworCSAgICBzaG9ydCBmZyA9IChzaG9ydCkgKChjb2xvciA9PSBDT0xPUl9CTFVFKQorCQkJCT8gQ09MT1JfV0hJVEUKKwkJCQk6IENPTE9SX0JMQUNLKTsKKwkgICAgc2hvcnQgYmcgPSBjb2xvcjsKKworCSAgICBpbml0X3BhaXIoY29sb3IsIGZnLCBiZyk7CisJICAgIHdia2dkc2V0KHdpbiwgKGNodHlwZSkgKENPTE9SX1BBSVIoY29sb3IpIHwgJyAnKSk7CisJfSBlbHNlIGlmICghdW5ib3hlZCkgeworCSAgICB3YmtnZHNldCh3aW4sIEFfQk9MRCB8ICcgJyk7CisJfQorICAgIH0KKyAgICBzcHJpbnRmKHVzZXJkYXRhLCAicCVkIiwgY29sb3IgJSA4KTsKKyAgICBzZXRfcGFuZWxfdXNlcnB0cihwYW4sIChOQ1VSU0VTX0NPTlNUIHZvaWQgKikgdXNlcmRhdGEpOworICAgIHJldHVybiBwYW47Cit9CisKK3N0YXRpYyB2b2lkCitteV9yZW1vdmVfcGFuZWwoUEFORUwgKiogcGFucywgaW50IHdoaWNoKQoreworICAgIGlmIChwYW5zW3doaWNoXSAhPSAwKSB7CisJUEFORUwgKnBhbiA9IHBhbnNbd2hpY2hdOworCVdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbik7CisJY2hhciAqdXNlciA9IChjaGFyICopIHBhbmVsX3VzZXJwdHIocGFuKTsKKworCWZyZWUodXNlcik7CisJZGVsX3BhbmVsKHBhbik7CisJZGVsd2luKHdpbik7CisKKwlwYW5zW3doaWNoXSA9IDA7CisgICAgfQorfQorCisjdW5kZWYgTUlOCisjZGVmaW5lIE1JTihhLGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIEFCUyhhKSAgICgoYSkgPCAwID8gLShhKSA6IChhKSkKKworc3RhdGljIHZvaWQKK215X2NyZWF0ZV9wYW5lbChQQU5FTCAqKiBwYW5zLCBpbnQgd2hpY2gsIEZpbGxQYW5lbCBteUZpbGwpCit7CisgICAgUEFORUwgKnBhbiA9IDA7CisgICAgaW50IGNvZGU7CisgICAgc2hvcnQgcGFpciA9IChzaG9ydCkgd2hpY2g7CisgICAgc2hvcnQgZmcgPSAoc2hvcnQpICgocGFpciA9PSBDT0xPUl9CTFVFKSA/IENPTE9SX1dISVRFIDogQ09MT1JfQkxBQ0spOworICAgIHNob3J0IGJnID0gcGFpcjsKKyAgICBpbnQgeDAsIHkwLCB4MSwgeTE7CisKKyAgICBpbml0X3BhaXIocGFpciwgZmcsIGJnKTsKKworICAgIC8qIHJlbW92ZSB0aGUgb2xkIHBhbmVsLCBpZiBhbnkgKi8KKyAgICBteV9yZW1vdmVfcGFuZWwocGFucywgd2hpY2gpOworCisgICAgLyogZ2V0IHRoZSBwb3NpdGlvbiBvZiBvbmUgY29ybmVyICovCisgICAgd21vdmUoc3Rkc2NyLCBnZXRtYXh5KHN0ZHNjcikgLyAyLCBnZXRtYXh4KHN0ZHNjcikgLyAyKTsKKyAgICBnZXR5eChzdGRzY3IsIHkwLCB4MCk7CisgICAgd2hpbGUgKChjb2RlID0gZ2V0X3Bvc2l0aW9uKCJGaXJzdCBjb3JuZXIiLCAiIiwgd2hpY2gsICZ4MCwgJnkwKSkgPT0gMCkgeworCTsKKyAgICB9CisKKyAgICBpZiAoY29kZSA+IDApIHsKKwljaGFyIGFsc29bODBdOworCXNwcmludGYoYWxzbywgIiAoZmlyc3QgJWQsJWQpIiwgeTAsIHgwKTsKKwkvKiBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBvcHBvc2l0ZSBjb3JuZXIgKi8KKwl3aGlsZSAoKGNvZGUgPSBnZXRfcG9zaXRpb24oIk9wcG9zaXRlIGNvcm5lciIsCisJCQkJICAgIGFsc28sIHdoaWNoLCAmeDEsICZ5MSkpID09IDApIHsKKwkgICAgOworCX0KKworCWlmIChjb2RlID4gMCkgeworCSAgICBpbnQgdGx5ID0gTUlOKHkwLCB5MSk7CisJICAgIGludCB0bHggPSBNSU4oeDAsIHgxKTsKKwkgICAgcGFuID0gbWtwYW5lbChwYWlyLCBBQlMoeTEgLSB5MCkgKyAxLCBBQlMoeDEgLSB4MCkgKyAxLCB0bHksIHRseCk7CisJICAgIC8qIGZpbmlzaCAqLworCSAgICBteUZpbGwocGFuKTsKKwkgICAgcGFuc1t3aGljaF0gPSBwYW47CisJICAgIHBmbHVzaCgpOworCSAgICB3bW92ZShzdGRzY3IsIHkxLCB4MSk7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQKK215X21vdmVfcGFuZWwoUEFORUwgKiogcGFucywgaW50IHdoaWNoLCBib29sIGNvbnRpbnVvdXMpCit7CisgICAgaWYgKHBhbnNbd2hpY2hdICE9IDApIHsKKwlpbnQgY29kZTsKKwlpbnQgeTAsIHgwOworCWludCB5MSwgeDE7CisJV0lORE9XICp3aW4gPSBwYW5lbF93aW5kb3cocGFuc1t3aGljaF0pOworCWNoYXIgYWxzb1s4MF07CisKKwlnZXRiZWd5eCh3aW4sIHkwLCB4MCk7CisJc3ByaW50ZihhbHNvLCAiIChzdGFydCAlZCwlZCkiLCB5MCwgeDApOworCXdtb3ZlKHN0ZHNjciwgeTAsIHgwKTsKKwl3aGlsZSAoKGNvZGUgPSBnZXRfcG9zaXRpb24oIk1vdmUgcGFuZWwiLCBhbHNvLCB3aGljaCwgJngxLCAmeTEpKSA9PSAwKSB7CisJICAgIGlmIChjb250aW51b3VzKSB7CisJCW1vdmVfcGFuZWwocGFuc1t3aGljaF0sIHkxLCB4MSk7CisJCXBmbHVzaCgpOworCSAgICB9CisJfQorCWlmIChjb2RlID4gMCkgeworCSAgICBtb3ZlX3BhbmVsKHBhbnNbd2hpY2hdLCB5MSwgeDEpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitteV9yZXNpemVfcGFuZWwoUEFORUwgKiogcGFucywgaW50IHdoaWNoLCBGaWxsUGFuZWwgbXlGaWxsKQoreworICAgIGlmIChwYW5zW3doaWNoXSAhPSAwKSB7CisJaW50IGNvZGU7CisJaW50IHkwLCB4MDsKKwlpbnQgeTEsIHgxOworCVdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbnNbd2hpY2hdKTsKKwljaGFyIGFsc29bODBdOworCisJZ2V0YmVneXgod2luLCB5MCwgeDApOworCXNwcmludGYoYWxzbywgIiAoc3RhcnQgJWQsJWQpIiwgeTAsIHgwKTsKKwl3bW92ZShzdGRzY3IsIHkwLCB4MCk7CisJd2hpbGUgKChjb2RlID0gZ2V0X3Bvc2l0aW9uKCJSZXNpemUgcGFuZWwiLAorCQkJCSAgICBhbHNvLCB3aGljaCwgJngxLCAmeTEpKSA9PSAwKSB7CisJICAgIDsKKwl9CisJaWYgKGNvZGUgPiAwKSB7CisJICAgIFdJTkRPVyAqbmV4dCA9IG5ld3dpbihBQlMoeTEgLSB5MCkgKyAxLAorCQkJCSAgQUJTKHgxIC0geDApICsgMSwKKwkJCQkgIE1JTih5MCwgeTEpLAorCQkJCSAgTUlOKHgwLCB4MSkpOworCSAgICBpZiAobmV4dCAhPSAwKSB7CisJCWtleXBhZChuZXh0LCBUUlVFKTsKKwkJaWYgKHVzZV9jb2xvcnMpIHsKKwkJICAgIHdia2dkc2V0KG5leHQsIChjaHR5cGUpIChDT0xPUl9QQUlSKHdoaWNoKSB8ICcgJykpOworCQl9IGVsc2UgaWYgKCF1bmJveGVkKSB7CisJCSAgICB3YmtnZHNldChuZXh0LCBBX0JPTEQgfCAnICcpOworCQl9CisJCXJlcGxhY2VfcGFuZWwocGFuc1t3aGljaF0sIG5leHQpOworCQlteUZpbGwocGFuc1t3aGljaF0pOworCQlkZWx3aW4od2luKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3BhbmVsKHZvaWQpCit7CisgICAgcmVnaXN0ZXIgaW50IHksIHg7CisKKyAgICBmb3IgKHkgPSAwOyB5IDwgTElORVMgLSAxOyB5KyspIHsKKwlmb3IgKHggPSAwOyB4IDwgQ09MUzsgeCsrKQorCSAgICB3cHJpbnR3KHN0ZHNjciwgIiVkIiwgKHkgKyB4KSAlIDEwKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX3BhbmVsKFBBTkVMICogcGFuKQoreworICAgIFdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbik7CisgICAgY29uc3QgY2hhciAqdXNlcnB0ciA9IChjb25zdCBjaGFyICopIHBhbmVsX3VzZXJwdHIocGFuKTsKKyAgICBpbnQgbnVtID0gKHVzZXJwdHIgJiYgKnVzZXJwdHIpID8gdXNlcnB0clsxXSA6ICc/JzsKKyAgICBpbnQgeSwgeDsKKworICAgIHdtb3ZlKHdpbiwgMSwgMSk7CisgICAgd3ByaW50dyh3aW4sICItcGFuJWMtIiwgbnVtKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICBib3god2luLCAwLCAwKTsKKyAgICBmb3IgKHkgPSAyOyB5IDwgZ2V0bWF4eSh3aW4pIC0gMTsgeSsrKSB7CisJZm9yICh4ID0gMTsgeCA8IGdldG1heHgod2luKSAtIDE7IHgrKykgeworCSAgICB3bW92ZSh3aW4sIHksIHgpOworCSAgICB3YWRkY2god2luLCBVQ2hhcihudW0pKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZmlsbF91bmJveGVkKFBBTkVMICogcGFuKQoreworICAgIFdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbik7CisgICAgY29uc3QgY2hhciAqdXNlcnB0ciA9IChjb25zdCBjaGFyICopIHBhbmVsX3VzZXJwdHIocGFuKTsKKyAgICBpbnQgbnVtID0gKHVzZXJwdHIgJiYgKnVzZXJwdHIpID8gdXNlcnB0clsxXSA6ICc/JzsKKyAgICBpbnQgeSwgeDsKKworICAgIGZvciAoeSA9IDA7IHkgPCBnZXRtYXh5KHdpbik7IHkrKykgeworCWZvciAoeCA9IDA7IHggPCBnZXRtYXh4KHdpbik7IHgrKykgeworCSAgICB3bW92ZSh3aW4sIHksIHgpOworCSAgICB3YWRkY2god2luLCBVQ2hhcihudW0pKTsKKwl9CisgICAgfQorfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK3N0YXRpYyB2b2lkCittYWtlX2Z1bGx3aWR0aF9kaWdpdChjY2hhcl90ICp0YXJnZXQsIGludCBkaWdpdCkKK3sKKyAgICB3Y2hhcl90IHNvdXJjZVsyXTsKKworICAgIHNvdXJjZVswXSA9IGRpZ2l0ICsgMHhmZjEwOworICAgIHNvdXJjZVsxXSA9IDA7CisgICAgc2V0Y2NoYXIodGFyZ2V0LCBzb3VyY2UsIEFfTk9STUFMLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRfd2lkZV9wYW5lbCh2b2lkKQoreworICAgIGludCBkaWdpdDsKKyAgICBjY2hhcl90IHRlbXBbMTBdOworCisgICAgZm9yIChkaWdpdCA9IDA7IGRpZ2l0IDwgMTA7ICsrZGlnaXQpCisJbWFrZV9mdWxsd2lkdGhfZGlnaXQoJnRlbXBbZGlnaXRdLCBkaWdpdCk7CisKKyAgICBkbyB7CisJaW50IHksIHg7CisJZ2V0eXgoc3Rkc2NyLCB5LCB4KTsKKwlkaWdpdCA9ICh5ICsgeCAvIDIpICUgMTA7CisgICAgfSB3aGlsZSAoYWRkX3djaCgmdGVtcFtkaWdpdF0pICE9IEVSUik7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX3dpZGVfcGFuZWwoUEFORUwgKiBwYW4pCit7CisgICAgV0lORE9XICp3aW4gPSBwYW5lbF93aW5kb3cocGFuKTsKKyAgICBpbnQgbnVtID0gKChjb25zdCBjaGFyICopIHBhbmVsX3VzZXJwdHIocGFuKSlbMV07CisgICAgaW50IHksIHg7CisKKyAgICB3bW92ZSh3aW4sIDEsIDEpOworICAgIHdwcmludHcod2luLCAiLXBhbiVjLSIsIG51bSk7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgYm94KHdpbiwgMCwgMCk7CisgICAgZm9yICh5ID0gMjsgeSA8IGdldG1heHkod2luKSAtIDE7IHkrKykgeworCWZvciAoeCA9IDE7IHggPCBnZXRtYXh4KHdpbikgLSAxOyB4KyspIHsKKwkgICAgd21vdmUod2luLCB5LCB4KTsKKwkgICAgd2FkZGNoKHdpbiwgVUNoYXIobnVtKSk7CisJfQorICAgIH0KK30KKyNlbmRpZgorCisjZGVmaW5lIE1BWF9QQU5FTFMgNQorCitzdGF0aWMgaW50Cit3aGljaF9wYW5lbChQQU5FTCAqIHB4W01BWF9QQU5FTFMgKyAxXSwgUEFORUwgKiBwYW4pCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaW50IGo7CisKKyAgICBmb3IgKGogPSAxOyBqIDw9IE1BWF9QQU5FTFM7ICsraikgeworCWlmIChweFtqXSA9PSBwYW4pIHsKKwkgICAgcmVzdWx0ID0gajsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorc2hvd19wYW5lbHMoUEFORUwgKiBweFtNQVhfUEFORUxTICsgMV0pCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmhlbHBbXSA9CisgICAgeworCSIiLAorCSJDb21tYW5kcyBhcmUgbGV0dGVyL2RpZ2l0IHBhaXJzLiAgRGlnaXRzIGFyZSB0aGUgcGFuZWwgbnVtYmVyLiIsCisJIiIsCisJIiAgYiAtIHB1dCB0aGUgcGFuZWwgb24gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2siLAorCSIgIGMgLSBjcmVhdGUgdGhlIHBhbmVsIiwKKwkiICBkIC0gZGVsZXRlIHRoZSBwYW5lbCIsCisJIiAgaCAtIGhpZGUgdGhlIHBhbmVsIiwKKwkiICBtIC0gbW92ZSB0aGUgcGFuZWwgKE0gZm9yIGNvbnRpbnVvdXMgbW92ZSkiLAorCSIgIHIgLSByZXNpemUgdGhlIHBhbmVsIiwKKwkiICBzIC0gc2hvdyB0aGUgcGFuZWwiLAorCSIgIGIgLSBwdXQgdGhlIHBhbmVsIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrIgorICAgIH07CisKKyAgICBzdHJ1Y3QgeworCWJvb2wgdmFsaWQ7CisJYm9vbCBoaWRkZW47CisJUEFORUwgKmFib3ZlOworCVBBTkVMICpiZWxvdzsKKyAgICB9IHRhYmxlW01BWF9QQU5FTFMgKyAxXTsKKworICAgIFdJTkRPVyAqd2luOworICAgIFBBTkVMICpwYW47CisgICAgaW50IGo7CisKKyAgICBmb3IgKGogPSAxOyBqIDw9IE1BWF9QQU5FTFM7ICsraikgeworCXRhYmxlW2pdLnZhbGlkID0gKHB4W2pdICE9IDApOworCWlmICh0YWJsZVtqXS52YWxpZCkgeworCSAgICB0YWJsZVtqXS5oaWRkZW4gPSBwYW5lbF9oaWRkZW4ocHhbal0pOworCSAgICB0YWJsZVtqXS5hYm92ZSA9IHBhbmVsX2Fib3ZlKHB4W2pdKTsKKwkgICAgdGFibGVbal0uYmVsb3cgPSBwYW5lbF9iZWxvdyhweFtqXSk7CisJfQorICAgIH0KKworICAgIGlmICgod2luID0gbmV3d2luKExJTkVTIC0gMSwgQ09MUywgMCwgMCkpICE9IDApIHsKKwlrZXlwYWQod2luLCBUUlVFKTsKKwlpZiAoKHBhbiA9IG5ld19wYW5lbCh3aW4pKSAhPSAwKSB7CisJICAgIHdlcmFzZSh3aW4pOworCSAgICBtdndwcmludHcod2luLCAwLCAwLCAiUGFuZWxzOlxuIik7CisJICAgIGZvciAoaiA9IDE7IGogPD0gTUFYX1BBTkVMUzsgKytqKSB7CisJCWlmICh0YWJsZVtqXS52YWxpZCkgeworCQkgICAgd3ByaW50dyh3aW4sICIgJWQ6Iiwgaik7CisJCSAgICBpZiAodGFibGVbal0uaGlkZGVuKSB7CisJCQl3YWRkc3RyKHdpbiwgIiBoaWRkZW4iKTsKKwkJICAgIH0gZWxzZSB7CisJCQlpZiAodGFibGVbal0uYWJvdmUpIHsKKwkJCSAgICB3cHJpbnR3KHdpbiwgIiBhYm92ZSAlZCIsCisJCQkJICAgIHdoaWNoX3BhbmVsKHB4LCB0YWJsZVtqXS5hYm92ZSkpOworCQkJfQorCQkJaWYgKHRhYmxlW2pdLmJlbG93KSB7CisJCQkgICAgd3ByaW50dyh3aW4sICIlcyBiZWxvdyAlZCIsCisJCQkJICAgIHRhYmxlW2pdLmFib3ZlID8gIiwiIDogIiIsCisJCQkJICAgIHdoaWNoX3BhbmVsKHB4LCB0YWJsZVtqXS5iZWxvdykpOworCQkJfQorCQkgICAgfQorCQkgICAgd2FkZGNoKHdpbiwgJ1xuJyk7CisJCX0KKwkgICAgfQorCSAgICBmb3IgKGogPSAwOyBqIDwgKGludCkgU0laRU9GKGhlbHApOyArK2opIHsKKwkJaWYgKHdwcmludHcod2luLCAiJXNcbiIsIGhlbHBbal0pID09IEVSUikKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIHdnZXRjaCh3aW4pOworCSAgICBkZWxfcGFuZWwocGFuKTsKKwkgICAgcGZsdXNoKCk7CisJfQorCWRlbHdpbih3aW4pOworICAgIH0KK30KKworI2RlZmluZSB3cmFwcGVyKGZ1bmMpIFwKK3N0YXRpYyBpbnQgbXlfIyNmdW5jKFBBTkVMICpwYW4pIFwKK3sgXAorICAgIGludCBjb2RlID0gRVJSOyBcCisgICAgaWYgKHBhbiAhPSAwKSB7IFwKKwljb2RlID0gZnVuYyhwYW4pOyBcCisgICAgfSBcCisgICAgcmV0dXJuIGNvZGU7IFwKK30KKy8qICpJTkRFTlQtT0ZGKiAqLword3JhcHBlcihib3R0b21fcGFuZWwpCit3cmFwcGVyKGhpZGVfcGFuZWwpCit3cmFwcGVyKHNob3dfcGFuZWwpCit3cmFwcGVyKHRvcF9wYW5lbCkKKy8qICpJTkRFTlQtT04qICovCisKK3N0YXRpYyB2b2lkCitkb19wYW5lbChQQU5FTCAqIHB4W01BWF9QQU5FTFMgKyAxXSwKKwkgTkNVUlNFU19DT05TVCBjaGFyICpjbWQsCisJIEZpbGxQYW5lbCBteUZpbGwpCit7CisgICAgaW50IHdoaWNoID0gY21kWzFdIC0gJzAnOworCisgICAgaWYgKHdoaWNoIDwgMSB8fCB3aGljaCA+IE1BWF9QQU5FTFMpIHsKKwliZWVwKCk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmIChsb2dfaW4gIT0gMCkgeworCXBmbHVzaCgpOworICAgIH0KKworICAgIHNheXdoYXQoY21kKTsKKyAgICBzd2l0Y2ggKCpjbWQpIHsKKyAgICBjYXNlICdiJzoKKwlteV9ib3R0b21fcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICBjYXNlICdjJzoKKwlteV9jcmVhdGVfcGFuZWwocHgsIHdoaWNoLCBteUZpbGwpOworCWJyZWFrOworICAgIGNhc2UgJ2QnOgorCW15X3JlbW92ZV9wYW5lbChweCwgd2hpY2gpOworCWJyZWFrOworICAgIGNhc2UgJ2gnOgorCW15X2hpZGVfcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICBjYXNlICdtJzoKKwlteV9tb3ZlX3BhbmVsKHB4LCB3aGljaCwgRkFMU0UpOworCWJyZWFrOworICAgIGNhc2UgJ00nOgorCW15X21vdmVfcGFuZWwocHgsIHdoaWNoLCBUUlVFKTsKKwlicmVhazsKKyAgICBjYXNlICdyJzoKKwlteV9yZXNpemVfcGFuZWwocHgsIHdoaWNoLCBteUZpbGwpOworCWJyZWFrOworICAgIGNhc2UgJ3MnOgorCW15X3Nob3dfcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICBjYXNlICd0JzoKKwlteV90b3BfcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sCitva19sZXR0ZXIoaW50IGNoKQoreworICAgIHJldHVybiBpc2FscGhhKFVDaGFyKGNoKSkgJiYgc3RyY2hyKCJiY2RobU1yc3QiLCBjaCkgIT0gMDsKK30KKworc3RhdGljIGJvb2wKK29rX2RpZ2l0KGludCBjaCkKK3sKKyAgICByZXR1cm4gaXNkaWdpdChVQ2hhcihjaCkpICYmIChjaCA+PSAnMScpICYmIChjaCAtICcwJyA8PSBNQVhfUEFORUxTKTsKK30KKworLyoKKyAqIEEgY29tbWFuZCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBsZXR0ZXIvZGlnaXQgcGFpcnMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuCisgKiBEaWdpdHMgYXJlIGxpbWl0ZWQgdG8gMS4uTUFYX1BBTkVMUy4KKyAqCisgKiBFbmQgdGhlIGNvbW1hbmQgd2l0aCBhIG5ld2xpbmUuICBSZWplY3Qgb3RoZXIgY2hhcmFjdGVycy4KKyAqLworc3RhdGljIGJvb2wKK2dldF9jb21tYW5kKFBBTkVMICogcHhbTUFYX1BBTkVMUyArIDFdLCBjaGFyICpidWZmZXIsIGludCBsaW1pdCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gMDsKKyAgICBpbnQgeTAsIHgwOworICAgIGludCBjMCwgY2g7CisgICAgV0lORE9XICp3aW47CisKKyAgICBnZXR5eChzdGRzY3IsIHkwLCB4MCk7CisgICAgd2luID0gc3RhdHVzbGluZSgpOworICAgIHdhZGRzdHIod2luLCAiQ29tbWFuZDoiKTsKKyAgICBidWZmZXJbbGVuZ3RoID0gMF0gPSAnXDAnOworCisgICAgaWYgKGxvZ19pbiAhPSAwKSB7CisJaWYgKGZnZXRzKGJ1ZmZlciwgbGltaXQgLSAzLCBsb2dfaW4pICE9IDApIHsKKwkgICAgbGVuZ3RoID0gKGludCkgc3RybGVuKGJ1ZmZlcik7CisJICAgIHdoaWxlIChsZW5ndGggPiAwICYmIGlzc3BhY2UoVUNoYXIoYnVmZmVyW2xlbmd0aCAtIDFdKSkpCisJCWJ1ZmZlclstLWxlbmd0aF0gPSAnXDAnOworCSAgICB3YWRkc3RyKHdpbiwgYnVmZmVyKTsKKwl9IGVsc2UgeworCSAgICBjbG9zZV9pbnB1dCgpOworCX0KKwkodm9pZCkgd2dldGNoKHdpbik7CisgICAgfSBlbHNlIHsKKwljMCA9IDA7CisJZm9yICg7OykgeworCSAgICBjaCA9IHdnZXRjaCh3aW4pOworCSAgICBpZiAoY2ggPT0gRVJSIHx8IGNoID09IFFVSVQgfHwgY2ggPT0gRVNDQVBFKSB7CisJCWJ1ZmZlclswXSA9ICdcMCc7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKGNoID09IENUUkwoJ0wnKSkgeworCQl3cmVmcmVzaChjdXJzY3IpOworCSAgICB9IGVsc2UgaWYgKGNoID09ICdcbicgfHwgY2ggPT0gS0VZX0VOVEVSKSB7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKGNoID09ICc/JykgeworCQlzaG93X3BhbmVscyhweCk7CisJICAgIH0gZWxzZSBpZiAobGVuZ3RoICsgMyA8IGxpbWl0KSB7CisJCWlmIChjaCA+PSBLRVlfTUlOKSB7CisJCSAgICBiZWVwKCk7CisJCX0gZWxzZSBpZiAob2tfbGV0dGVyKFVDaGFyKGNoKSkpIHsKKwkJICAgIGlmIChpc2FscGhhKFVDaGFyKGMwKSkpIHsKKwkJCWJlZXAoKTsKKwkJICAgIH0gZWxzZSBpZiAoaXNkaWdpdChVQ2hhcihjMCkpKSB7CisJCQl3cHJpbnR3KHdpbiwgIiAlYyIsIGNoKTsKKwkJCWJ1ZmZlcltsZW5ndGgrK10gPSAnICc7CisJCQlidWZmZXJbbGVuZ3RoKytdID0gKGNoYXIpIChjMCA9IGNoKTsKKwkJICAgIH0gZWxzZSB7CisJCQl3cHJpbnR3KHdpbiwgIiVjIiwgY2gpOworCQkJYnVmZmVyW2xlbmd0aCsrXSA9IChjaGFyKSAoYzAgPSBjaCk7CisJCSAgICB9CisJCX0gZWxzZSBpZiAob2tfZGlnaXQoY2gpKSB7CisJCSAgICBpZiAoaXNhbHBoYShVQ2hhcihjMCkpKSB7CisJCQl3cHJpbnR3KHdpbiwgIiVjIiwgY2gpOworCQkJYnVmZmVyW2xlbmd0aCsrXSA9IChjaGFyKSAoYzAgPSBjaCk7CisJCSAgICB9IGVsc2UgeworCQkJYmVlcCgpOworCQkgICAgfQorCQl9IGVsc2UgaWYgKGNoID09ICcgJykgeworCQkgICAgaWYgKGlzZGlnaXQoVUNoYXIoYzApKSkgeworCQkJd3ByaW50dyh3aW4sICIlYyIsIGNoKTsKKwkJCWJ1ZmZlcltsZW5ndGgrK10gPSAoY2hhcikgKGMwID0gY2gpOworCQkgICAgfSBlbHNlIHsKKwkJCWJlZXAoKTsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGJlZXAoKTsKKwkJfQorCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgd21vdmUoc3Rkc2NyLCB5MCwgeDApOworCisgICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworICAgIGlmIChsb2dfb3V0ICYmIGxlbmd0aCkgeworCWZwcmludGYobG9nX291dCwgIiVzXG4iLCBidWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gKGxlbmd0aCAhPSAwKTsKK30KKworc3RhdGljIHZvaWQKK2RlbW9fcGFuZWxzKEluaXRQYW5lbCBteUluaXQsIEZpbGxQYW5lbCBteUZpbGwpCit7CisgICAgaW50IGl0bXA7CisgICAgUEFORUwgKnB4W01BWF9QQU5FTFMgKyAxXTsKKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworCisgICAgc2Nyb2xsb2soc3Rkc2NyLCBGQUxTRSk7CS8qIHdlIGRvbid0IHdhbnQgc3Rkc2NyIHRvIHNjcm9sbCEgKi8KKyAgICByZWZyZXNoKCk7CisKKyAgICBteUluaXQoKTsKKyAgICBtZW1zZXQocHgsIDAsIHNpemVvZihweCkpOworCisgICAgd2hpbGUgKGdldF9jb21tYW5kKHB4LCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkgeworCWludCBsaW1pdCA9IChpbnQpIHN0cmxlbihidWZmZXIpOworCWZvciAoaXRtcCA9IDA7IGl0bXAgPCBsaW1pdDsgaXRtcCArPSAzKSB7CisJICAgIGRvX3BhbmVsKHB4LCBidWZmZXIgKyBpdG1wLCBteUZpbGwpOworCX0KKwlwZmx1c2goKTsKKyAgICB9CisjaWYgTk9fTEVBS1MKKyAgICBmb3IgKGl0bXAgPSAxOyBpdG1wIDw9IE1BWF9QQU5FTFM7ICsraXRtcCkgeworCW15X3JlbW92ZV9wYW5lbChweCwgaXRtcCk7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0YmxbXSA9CisgICAgeworCSJVc2FnZTogZGVtb19wYW5lbHMgW29wdGlvbnNdIgorCSwiIgorCSwiT3B0aW9uczoiCisJLCIgIC1pIGZpbGUgIHJlYWQgY29tbWFuZHMgZnJvbSBmaWxlIgorCSwiICAtbyBmaWxlICByZWNvcmQgY29tbWFuZHMgaW4gZmlsZSIKKwksIiAgLW0gICAgICAgZG8gbm90IHVzZSBjb2xvcnMiCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwksIiAgLXcgICAgICAgdXNlIHdpZGUtY2hhcmFjdGVycyBpbiBwYW5lbHMgYW5kIGJhY2tncm91bmQiCisjZW5kaWYKKwksIiAgLXggICAgICAgZG8gbm90IGVuY2xvc2UgcGFuZWxzIGluIGJveGVzIgorICAgIH07CisgICAgc2l6ZV90IG47CisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YmwpOyBuKyspCisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgdGJsW25dKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgYzsKKyAgICBib29sIG1vbm9jaHJvbWUgPSBGQUxTRTsKKyAgICBJbml0UGFuZWwgbXlJbml0ID0gaW5pdF9wYW5lbDsKKyAgICBGaWxsUGFuZWwgbXlGaWxsID0gZmlsbF9wYW5lbDsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiaTpvOm13eCIpKSAhPSAtMSkgeworCXN3aXRjaCAoYykgeworCWNhc2UgJ2knOgorCSAgICBsb2dfaW4gPSBmb3BlbihvcHRhcmcsICJyIik7CisJICAgIGJyZWFrOworCWNhc2UgJ28nOgorCSAgICBsb2dfb3V0ID0gZm9wZW4ob3B0YXJnLCAidyIpOworCSAgICBicmVhazsKKwljYXNlICdtJzoKKwkgICAgbW9ub2Nocm9tZSA9IFRSVUU7CisJICAgIGJyZWFrOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJY2FzZSAndyc6CisJICAgIG15SW5pdCA9IGluaXRfd2lkZV9wYW5lbDsKKwkgICAgbXlGaWxsID0gZmlsbF93aWRlX3BhbmVsOworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgJ3gnOgorCSAgICB1bmJveGVkID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorICAgIGlmICh1bmJveGVkKQorCW15RmlsbCA9IGZpbGxfdW5ib3hlZDsKKworICAgIGluaXRzY3IoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgIHVzZV9jb2xvcnMgPSBtb25vY2hyb21lID8gRkFMU0UgOiBoYXNfY29sb3JzKCk7CisgICAgaWYgKHVzZV9jb2xvcnMpCisJc3RhcnRfY29sb3IoKTsKKworICAgIGRlbW9fcGFuZWxzKG15SW5pdCwgbXlGaWxsKTsKKyAgICBlbmR3aW4oKTsKKworICAgIGNsb3NlX2lucHV0KCk7CisgICAgY2xvc2Vfb3V0cHV0KCk7CisKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSBjdXJzZXMgcGFuZWwgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9kZW1vX3Rlcm1jYXAuYyBiL25jdXJzZXMtNS43L3Rlc3QvZGVtb190ZXJtY2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4NTY0OAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZGVtb190ZXJtY2FwLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyAqCisgKiAkSWQ6IGRlbW9fdGVybWNhcC5jLHYgMS43IDIwMDgvMDIvMDkgMTg6MDg6MzYgdG9tIEV4cCAkCisgKgorICogQSBzaW1wbGUgZGVtbyBvZiB0aGUgdGVybWNhcCBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgVVNFX1RJTkZPCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX1RHRVRFTlQKKworI2RlZmluZSBpc0NhcE5hbWUoYykgKGlzZ3JhcGgoYykgJiYgc3RyY2hyKCJeIz06XFwiLCBjKSA9PSAwKQorCitzdGF0aWMgdm9pZAorZHVtcGl0KGNoYXIgKmNhcCkKK3sKKyAgICAvKgorICAgICAqIE9uZSBvZiB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIHRlcm1jYXAgaW50ZXJmYWNlIGlzIHRoYXQgdGhlIGxpYnJhcnkKKyAgICAgKiBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcGFzc2VkIHZpYSB0Z2V0c3RyKCksIG5vciB0aGUKKyAgICAgKiBhbW91bnQgb2Ygc3BhY2UgcmVtYWluaW5nLiAgVGhpcyBkZW1vIHNpbXBseSByZXVzZXMgdGhlIHdob2xlIGJ1ZmZlcgorICAgICAqIGZvciBlYWNoIGNhbGw7IGEgbm9ybWFsIHRlcm1jYXAgYXBwbGljYXRpb24gd291bGQgdHJ5IHRvIHVzZSB0aGUgYnVmZmVyCisgICAgICogdG8gaG9sZCBhbGwgb2YgdGhlIHN0cmluZ3MgZXh0cmFjdGVkIGZyb20gdGhlIHRlcm1pbmFsIGVudHJ5LgorICAgICAqLworICAgIGNoYXIgYXJlYVsxMDI0XSwgKmFwID0gYXJlYTsKKyAgICBjaGFyICpzdHI7CisgICAgaW50IG51bTsKKworICAgIGlmICgoc3RyID0gdGdldHN0cihjYXAsICZhcCkpICE9IDApIHsKKwkvKgorCSAqIE5vdGUgdGhhdCB0aGUgc3RyaW5ncyByZXR1cm5lZCBhcmUgbW9zdGx5IHRlcm1pbmZvIGZvcm1hdCwgc2luY2UKKwkgKiBuY3Vyc2VzIGRvZXMgbm90IGNvbnZlcnQgZXhjZXB0IGZvciBhIGhhbmRmdWwgb2Ygc3BlY2lhbCBjYXNlcy4KKwkgKi8KKwlwcmludGYoInN0ciAlcyA9ICIsIGNhcCk7CisJd2hpbGUgKCpzdHIgIT0gMCkgeworCSAgICBpbnQgY2ggPSBVQ2hhcigqc3RyKyspOworCSAgICBzd2l0Y2ggKGNoKSB7CisJICAgIGNhc2UgJ1wxNzcnOgorCQlmcHV0cygiXj8iLCBzdGRvdXQpOworCQlicmVhazsKKwkgICAgY2FzZSAnXDAzMyc6CisJCWZwdXRzKCJcXEUiLCBzdGRvdXQpOworCQlicmVhazsKKwkgICAgY2FzZSAnXGInOgorCQlmcHV0cygiXFxiIiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1xmJzoKKwkJZnB1dHMoIlxcZiIsIHN0ZG91dCk7CisJCWJyZWFrOworCSAgICBjYXNlICdcbic6CisJCWZwdXRzKCJcXG4iLCBzdGRvdXQpOworCQlicmVhazsKKwkgICAgY2FzZSAnXHInOgorCQlmcHV0cygiXFxyIiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyAnOgorCQlmcHV0cygiXFxzIiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1x0JzoKKwkJZnB1dHMoIlxcdCIsIHN0ZG91dCk7CisJCWJyZWFrOworCSAgICBjYXNlICdeJzoKKwkJZnB1dHMoIlxcXiIsIHN0ZG91dCk7CisJCWJyZWFrOworCSAgICBjYXNlICc6JzoKKwkJZnB1dHMoIlxcMDcyIiwgc3Rkb3V0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ1xcJzoKKwkJZnB1dHMoIlxcXFwiLCBzdGRvdXQpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJaWYgKGlzZ3JhcGgoY2gpKQorCQkgICAgZnB1dGMoY2gsIHN0ZG91dCk7CisJCWVsc2UgaWYgKGNoIDwgMzIpCisJCSAgICBwcmludGYoIl4lYyIsIGNoICsgJ0AnKTsKKwkJZWxzZQorCQkgICAgcHJpbnRmKCJcXCUwM28iLCBjaCk7CisJCWJyZWFrOworCSAgICB9CisJfQorCXByaW50ZigiXG4iKTsKKyAgICB9IGVsc2UgaWYgKChudW0gPSB0Z2V0bnVtKGNhcCkpID49IDApIHsKKwlwcmludGYoIm51bSAlcyA9ICVkXG4iLCBjYXAsIG51bSk7CisgICAgfSBlbHNlIGlmICgobnVtID0gdGdldGZsYWcoY2FwKSkgPiAwKSB7CisJcHJpbnRmKCJmbGcgJXNcbiIsIGNhcCk7CisgICAgfQorICAgIGZmbHVzaChzdGRvdXQpOworfQorCitzdGF0aWMgdm9pZAorZGVtb190ZXJtY2FwKGNoYXIgKm5hbWUpCit7CisgICAgY2hhciBidWZmZXJbMTAyNF07CisKKyAgICBwcmludGYoIlRlcm1pbmFsIHR5cGUgJXNcbiIsIG5hbWUpOworICAgIGlmICh0Z2V0ZW50KGJ1ZmZlciwgbmFtZSkgPj0gMCkgeworCWNoYXIgY2FwWzNdOworCWludCBjMSwgYzI7CisKKwljYXBbMl0gPSAwOworCWZvciAoYzEgPSAwOyBjMSA8IDI1NjsgKytjMSkgeworCSAgICBjYXBbMF0gPSBjMTsKKwkgICAgaWYgKGlzQ2FwTmFtZShjMSkpIHsKKwkJZm9yIChjMiA9IDA7IGMyIDwgMjU2OyArK2MyKSB7CisJCSAgICBjYXBbMV0gPSBjMjsKKwkJICAgIGlmIChpc0NhcE5hbWUoYzIpKSB7CisJCQlkdW1waXQoY2FwKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IG47CisgICAgY2hhciAqbmFtZTsKKworICAgIGlmIChhcmdjID4gMSkgeworCWZvciAobiA9IDE7IG4gPCBhcmdjOyArK24pIHsKKwkgICAgZGVtb190ZXJtY2FwKGFyZ3Zbbl0pOworCX0KKyAgICB9IGVsc2UgaWYgKChuYW1lID0gZ2V0ZW52KCJURVJNIikpICE9IDApIHsKKwlkZW1vX3Rlcm1jYXAobmFtZSk7CisgICAgfSBlbHNlIHsKKwlzdGF0aWMgY2hhciBkdW1iW10gPSAiZHVtYiI7CisJZGVtb190ZXJtY2FwKGR1bWIpOworICAgIH0KKworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKKyNlbHNlCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwKKyAgICAgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0ZXJtY2FwXG4iKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvZGl0dG8uYyBiL25jdXJzZXMtNS43L3Rlc3QvZGl0dG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGFlYmFjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9kaXR0by5jCkBAIC0wLDAgKzEsNDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5ICgxOTk4LW9uKQorICoKKyAqICRJZDogZGl0dG8uYyx2IDEuMzIgMjAwOC8wOC8wNCAxMzoyMTo0MSB0b20gRXhwICQKKyAqCisgKiBUaGUgcHJvZ3JhbSBpbGx1c3RyYXRlcyBob3cgdG8gc2V0IHVwIG11bHRpcGxlIHNjcmVlbnMgZnJvbSBhIHNpbmdsZQorICogcHJvZ3JhbS4KKyAqCisgKiBJZiBvcGVucHR5KCkgaXMgc3VwcG9ydGVkLCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgYXJlIHRpdGxlcyBmb3IKKyAqIHRoZSB3aW5kb3dzIHNob3dpbmcgZWFjaCBzY3JlZW4ncyBkYXRhLgorICoKKyAqIElmIG9wZW5wdHkoKSBpcyBub3Qgc3VwcG9ydGVkLCB5b3UgbXVzdCBpbnZva2UgdGhlIHByb2dyYW0gYnkgc3BlY2lmeWluZworICogYW5vdGhlciB0ZXJtaW5hbCBvbiB0aGUgc2FtZSBtYWNoaW5lIGJ5IHNwZWNpZnlpbmcgaXRzIGRldmljZSwgZS5nLiwKKyAqCWRpdHRvIC9kZXYvdHR5cDEKKyAqLworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmZGVmIFVTRV9QVEhSRUFEUworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorCisjaWZkZWYgVVNFX1hURVJNX1BUWQorI2luY2x1ZGUgVVNFX09QRU5QVFlfSEVBREVSCisjZW5kaWYKKworI2RlZmluZSBNQVhfRklGTyAyNTYKKworI2RlZmluZSBUSElTX0ZJRk8obikgKChuKSAlIE1BWF9GSUZPKQorI2RlZmluZSBORVhUX0ZJRk8obikgVEhJU19GSUZPKChuKSArIDEpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBsb25nIHNlcXVlbmNlOworICAgIGludCBoZWFkOworICAgIGludCB0YWlsOworICAgIGludCBkYXRhW01BWF9GSUZPXTsKK30gRklGTzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2U7Cit9IFBFRUs7CisKKy8qCisgKiBEYXRhICJvd25lZCIgZm9yIGEgc2luZ2xlIHNjcmVlbi4gIEVhY2ggc2NyZWVuIGlzIGRpdmlkZWQgaW50byB3aW5kb3dzIHRoYXQKKyAqIHNob3cgdGhlIHRleHQgcmVhZCBmcm9tIGVhY2ggdGVybWluYWwuICBJbnB1dCBmcm9tIGEgZ2l2ZW4gc2NyZWVuIHdpbGwgYWxzbworICogYmUgcmVhZCBpbnRvIG9uZSB3aW5kb3cgcGVyIHNjcmVlbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEZJTEUgKmlucHV0OworICAgIEZJTEUgKm91dHB1dDsKKyAgICBTQ1JFRU4gKnNjcmVlbjsJCS8qIHRoaXMgc2NyZWVuIC0gY3Vyc2VzIGludGVybmFsIGRhdGEgKi8KKyAgICBpbnQgd2hpY2gxOwkJCS8qIHRoaXMgc2NyZWVuJ3MgaW5kZXggaW4gRElUVE9bXSBhcnJheSAqLworICAgIGludCBsZW5ndGg7CQkJLyogbGVuZ3RoIG9mIHdpbmRvd3NbXSBhbmQgcGVla3NbXSAqLworICAgIGNoYXIgKip0aXRsZXM7CQkvKiBwZXItd2luZG93IHRpdGxlcyAqLworICAgIFdJTkRPVyAqKndpbmRvd3M7CQkvKiBkaXNwbGF5IGRhdGEgZnJvbSBlYWNoIHNjcmVlbiAqLworICAgIFBFRUsgKnBlZWtzOwkJLyogaW5kaWNlcyBmb3IgZWFjaCBzY3JlZW4ncyBmaWZvICovCisgICAgRklGTyBmaWZvOwkJCS8qIGZpZm8gZm9yIHRoaXMgc2NyZWVuICovCisjaWZkZWYgVVNFX1BUSFJFQURTCisgICAgcHRocmVhZF90IHRocmVhZDsKKyNlbmRpZgorfSBESVRUTzsKKworLyoKKyAqIFN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgbXVsdGlwbGUgcGFyYW1ldGVycyB2aWEgdGhlIHVzZV9zY3JlZW4oKQorICogc2luZ2xlLXBhcmFtZXRlciBpbnRlcmZhY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgc291cmNlOwkJCS8qIHdoaWNoIHNjcmVlbiBkaWQgY2hhcmFjdGVyIGNvbWUgZnJvbSAqLworICAgIGludCB0YXJnZXQ7CQkJLyogd2hpY2ggc2NyZWVuIGlzIGNoYXJhY3RlciBnb2luZyB0byAqLworICAgIERJVFRPICpkaXR0bzsJCS8qIGRhdGEgZm9yIGFsbCBzY3JlZW5zICovCit9IEREQVRBOworCitzdGF0aWMgdm9pZAorZmFpbGVkKGNvbnN0IGNoYXIgKnMpCit7CisgICAgcGVycm9yKHMpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6IGRpdHRvIFt0ZXJtaW5hbDEgLi4uXVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworLyogQWRkIHRvIHRoZSBoZWFkIG9mIHRoZSBmaWZvLCBjaGVja2luZyBmb3Igb3ZlcmZsb3cuICovCitzdGF0aWMgdm9pZAorcHV0X2ZpZm8oRklGTyAqIGZpZm8sIGludCB2YWx1ZSkKK3sKKyAgICBpbnQgbmV4dCA9IE5FWFRfRklGTyhmaWZvLT5oZWFkKTsKKyAgICBpZiAobmV4dCA9PSBmaWZvLT50YWlsKQorCWZpZm8tPnRhaWwgPSBORVhUX0ZJRk8oZmlmby0+dGFpbCk7CisgICAgZmlmby0+ZGF0YVtuZXh0XSA9IHZhbHVlOworICAgIGZpZm8tPmhlYWQgPSBuZXh0OworICAgIGZpZm8tPnNlcXVlbmNlICs9IDE7Cit9CisKKy8qIEdldCBkYXRhIGZyb20gdGhlIHRhaWwgKG9sZGVzdCBwYXJ0KSBvZiB0aGUgZmlmbywgcmV0dXJuaW5nIC0xIGlmIG5vIGRhdGEuCisgKiBTaW5jZSBlYWNoIHNjcmVlbiBjYW4gcGVlayBpbnRvIHRoZSBmaWZvLCB3ZSBkbyBub3QgdXBkYXRlIHRoZSB0YWlsIGluZGV4LAorICogYnV0IG1vZGlmeSB0aGUgcGVlay1pbmRleC4KKyAqCisgKiBGSVhNRSAtIHRlc3Qvd29ya2Fyb3VuZCBmb3IgY2FzZSB3aGVyZSBmaWZvIGdldHMgbW9yZSB0aGFuIGEgYnVmZmVyCisgKiBhaGVhZCBvZiBwZWVrLgorICovCitzdGF0aWMgaW50CitwZWVrX2ZpZm8oRklGTyAqIGZpZm8sIFBFRUsgKiBwZWVrKQoreworICAgIGludCByZXN1bHQgPSAtMTsKKyAgICBpZiAocGVlay0+c2VxdWVuY2UgPCBmaWZvLT5zZXF1ZW5jZSkgeworCXBlZWstPnNlcXVlbmNlICs9IDE7CisJcmVzdWx0ID0gZmlmby0+ZGF0YVtUSElTX0ZJRk8ocGVlay0+c2VxdWVuY2UpXTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEZJTEUgKgorb3Blbl90dHkoY2hhciAqcGF0aCkKK3sKKyAgICBGSUxFICpmcDsKKyNpZmRlZiBVU0VfWFRFUk1fUFRZCisgICAgaW50IGFtYXN0ZXI7CisgICAgaW50IGFzbGF2ZTsKKyAgICBjaGFyIHNsYXZlX25hbWVbMTAyNF07CisgICAgY2hhciBzX29wdGlvbltzaXplb2Yoc2xhdmVfbmFtZSkgKyA4MF07CisgICAgY2hhciAqbGVhZjsKKworICAgIGlmIChvcGVucHR5KCZhbWFzdGVyLCAmYXNsYXZlLCBzbGF2ZV9uYW1lLCAwLCAwKSAhPSAwCisJfHwgc3RybGVuKHNsYXZlX25hbWUpID4gc2l6ZW9mKHNsYXZlX25hbWUpIC0gMSkKKwlmYWlsZWQoIm9wZW5wdHkiKTsKKyAgICBpZiAoKGxlYWYgPSBzdHJyY2hyKHNsYXZlX25hbWUsICcvJykpID09IDApIHsKKwllcnJubyA9IEVJU0RJUjsKKwlmYWlsZWQoc2xhdmVfbmFtZSk7CisgICAgfQorICAgIHNwcmludGYoc19vcHRpb24sICItUyVzLyVkIiwgc2xhdmVfbmFtZSwgYXNsYXZlKTsKKyAgICBpZiAoZm9yaygpKSB7CisJZXhlY2xwKCJ4dGVybSIsICJ4dGVybSIsIHNfb3B0aW9uLCAiLXRpdGxlIiwgcGF0aCwgKGNoYXIgKikgMCk7CisJX2V4aXQoMCk7CisgICAgfQorICAgIGZwID0gZmRvcGVuKGFtYXN0ZXIsICJyKyIpOworICAgIGlmIChmcCA9PSAwKQorCWZhaWxlZChwYXRoKTsKKyNlbHNlCisgICAgc3RydWN0IHN0YXQgc2I7CisKKyAgICBpZiAoc3RhdChwYXRoLCAmc2IpIDwgMCkKKwlmYWlsZWQocGF0aCk7CisgICAgaWYgKChzYi5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGQ0hSKSB7CisJZXJybm8gPSBFTk9UVFk7CisJZmFpbGVkKHBhdGgpOworICAgIH0KKyAgICBmcCA9IGZvcGVuKHBhdGgsICJyKyIpOworICAgIGlmIChmcCA9PSAwKQorCWZhaWxlZChwYXRoKTsKKyAgICBwcmludGYoIm9wZW5lZCAlc1xuIiwgcGF0aCk7CisjZW5kaWYKKyAgICBhc3NlcnQoZnAgIT0gMCk7CisgICAgcmV0dXJuIGZwOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9zY3JlZW4oU0NSRUVOICpzcCBHQ0NfVU5VU0VELCB2b2lkICphcmcpCit7CisgICAgRElUVE8gKnRhcmdldCA9IChESVRUTyAqKSBhcmc7CisgICAgaW50IGhpZ2gsIHdpZGU7CisgICAgaW50IGs7CisKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworICAgIGJveChzdGRzY3IsIDAsIDApOworCisgICAgdGFyZ2V0LT53aW5kb3dzID0gdHlwZUNhbGxvYyhXSU5ET1cgKiwgKHNpemVfdCkgdGFyZ2V0LT5sZW5ndGgpOworICAgIHRhcmdldC0+cGVla3MgPSB0eXBlQ2FsbG9jKFBFRUssIChzaXplX3QpIHRhcmdldC0+bGVuZ3RoKTsKKworICAgIGhpZ2ggPSAoTElORVMgLSAyKSAvIHRhcmdldC0+bGVuZ3RoOworICAgIHdpZGUgPSAoQ09MUyAtIDIpOworICAgIGZvciAoayA9IDA7IGsgPCB0YXJnZXQtPmxlbmd0aDsgKytrKSB7CisJV0lORE9XICpvdXRlciA9IG5ld3dpbihoaWdoLCB3aWRlLCAxICsgKGhpZ2ggKiBrKSwgMSk7CisJV0lORE9XICppbm5lciA9IGRlcndpbihvdXRlciwgaGlnaCAtIDIsIHdpZGUgLSAyLCAxLCAxKTsKKworCWJveChvdXRlciwgMCwgMCk7CisJbXZ3YWRkc3RyKG91dGVyLCAwLCAyLCB0YXJnZXQtPnRpdGxlc1trXSk7CisJd25vdXRyZWZyZXNoKG91dGVyKTsKKworCXNjcm9sbG9rKGlubmVyLCBUUlVFKTsKKwlrZXlwYWQoaW5uZXIsIFRSVUUpOworI2lmbmRlZiBVU0VfUFRIUkVBRFMKKwlub2RlbGF5KGlubmVyLCBUUlVFKTsKKyNlbmRpZgorCisJdGFyZ2V0LT53aW5kb3dzW2tdID0gaW5uZXI7CisgICAgfQorICAgIGRvdXBkYXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkCitvcGVuX3NjcmVlbihESVRUTyAqIHRhcmdldCwgY2hhciAqKnNvdXJjZSwgaW50IGxlbmd0aCwgaW50IHdoaWNoMSkKK3sKKyAgICBpZiAod2hpY2gxICE9IDApIHsKKwl0YXJnZXQtPmlucHV0ID0KKwkgICAgdGFyZ2V0LT5vdXRwdXQgPSBvcGVuX3R0eShzb3VyY2Vbd2hpY2gxXSk7CisgICAgfSBlbHNlIHsKKwl0YXJnZXQtPmlucHV0ID0gc3RkaW47CisJdGFyZ2V0LT5vdXRwdXQgPSBzdGRvdXQ7CisgICAgfQorCisgICAgdGFyZ2V0LT53aGljaDEgPSB3aGljaDE7CisgICAgdGFyZ2V0LT50aXRsZXMgPSBzb3VyY2U7CisgICAgdGFyZ2V0LT5sZW5ndGggPSBsZW5ndGg7CisgICAgdGFyZ2V0LT5zY3JlZW4gPSBuZXd0ZXJtKChjaGFyICopIDAsCS8qIGFzc3VtZSAkVEVSTSBpcyB0aGUgc2FtZSAqLworCQkJICAgICB0YXJnZXQtPm91dHB1dCwKKwkJCSAgICAgdGFyZ2V0LT5pbnB1dCk7CisKKyAgICBpZiAodGFyZ2V0LT5zY3JlZW4gPT0gMCkKKwlmYWlsZWQoIm5ld3Rlcm0iKTsKKworICAgICh2b2lkKSBVU0lOR19TQ1JFRU4odGFyZ2V0LT5zY3JlZW4sIGluaXRfc2NyZWVuLCB0YXJnZXQpOworfQorCitzdGF0aWMgaW50CitjbG9zZV9zY3JlZW4oU0NSRUVOICpzcCBHQ0NfVU5VU0VELCB2b2lkICphcmcgR0NDX1VOVVNFRCkKK3sKKyAgICAodm9pZCkgc3A7CisgICAgKHZvaWQpIGFyZzsKKyAgICByZXR1cm4gZW5kd2luKCk7Cit9CisKKy8qCisgKiBSZWFkIGRhdGEgZnJvbSB0aGUgJ3NvdXJjZScgc2NyZWVuLgorICovCitzdGF0aWMgaW50CityZWFkX3NjcmVlbihTQ1JFRU4gKnNwIEdDQ19VTlVTRUQsIHZvaWQgKmFyZykKK3sKKyAgICBEREFUQSAqZGF0YSA9IChEREFUQSAqKSBhcmc7CisgICAgRElUVE8gKmRpdHRvID0gJihkYXRhLT5kaXR0b1tkYXRhLT5zb3VyY2VdKTsKKyAgICBXSU5ET1cgKndpbiA9IGRpdHRvLT53aW5kb3dzW2RhdGEtPnNvdXJjZV07CisgICAgaW50IGNoID0gd2dldGNoKHdpbik7CisKKyAgICBpZiAoY2ggPiAwICYmIGNoIDwgMjU2KQorCXB1dF9maWZvKCYoZGl0dG8tPmZpZm8pLCBjaCk7CisgICAgZWxzZQorCWNoID0gRVJSOworCisgICAgcmV0dXJuIGNoOworfQorCisvKgorICogV3JpdGUgYWxsIG9mIHRoZSBkYXRhIHRoYXQncyBpbiBmaWZvcyBmb3IgdGhlICd0YXJnZXQnIHNjcmVlbi4KKyAqLworc3RhdGljIGludAord3JpdGVfc2NyZWVuKFNDUkVFTiAqc3AgR0NDX1VOVVNFRCwgdm9pZCAqYXJnIEdDQ19VTlVTRUQpCit7CisgICAgRERBVEEgKmRhdGEgPSAoRERBVEEgKikgYXJnOworICAgIERJVFRPICpkaXR0byA9ICYoZGF0YS0+ZGl0dG9bZGF0YS0+dGFyZ2V0XSk7CisgICAgYm9vbCBjaGFuZ2VkID0gRkFMU0U7CisgICAgaW50IHdoaWNoOworCisgICAgZm9yICh3aGljaCA9IDA7IHdoaWNoIDwgZGl0dG8tPmxlbmd0aDsgKyt3aGljaCkgeworCVdJTkRPVyAqd2luID0gZGl0dG8tPndpbmRvd3Nbd2hpY2hdOworCUZJRk8gKmZpZm8gPSAmKGRhdGEtPmRpdHRvW3doaWNoXS5maWZvKTsKKwlQRUVLICpwZWVrID0gJihkaXR0by0+cGVla3Nbd2hpY2hdKTsKKwlpbnQgY2g7CisKKwl3aGlsZSAoKGNoID0gcGVla19maWZvKGZpZm8sIHBlZWspKSA+IDApIHsKKwkgICAgY2hhbmdlZCA9IFRSVUU7CisKKwkgICAgd2FkZGNoKHdpbiwgKGNodHlwZSkgY2gpOworCSAgICB3bm91dHJlZnJlc2god2luKTsKKwl9CisgICAgfQorCisgICAgaWYgKGNoYW5nZWQpCisJZG91cGRhdGUoKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2RpdHRvKERJVFRPICogZGF0YSwgaW50IGNvdW50LCBEREFUQSAqIGRkYXRhKQoreworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKwlkZGF0YS0+dGFyZ2V0ID0gbjsKKwlVU0lOR19TQ1JFRU4oZGF0YVtuXS5zY3JlZW4sIHdyaXRlX3NjcmVlbiwgKHZvaWQgKikgZGRhdGEpOworICAgIH0KK30KKworI2lmZGVmIFVTRV9QVEhSRUFEUworc3RhdGljIHZvaWQgKgoraGFuZGxlX3NjcmVlbih2b2lkICphcmcpCit7CisgICAgRERBVEEgZGRhdGE7CisgICAgaW50IGNoOworCisgICAgbWVtc2V0KCZkZGF0YSwgMCwgc2l6ZW9mKGRkYXRhKSk7CisgICAgZGRhdGEuZGl0dG8gPSAoRElUVE8gKikgYXJnOworICAgIGRkYXRhLnNvdXJjZSA9IGRkYXRhLmRpdHRvLT53aGljaDE7CisgICAgZGRhdGEuZGl0dG8gLT0gZGRhdGEuc291cmNlOwkvKiAtPiBiYXNlIG9mIGFycmF5ICovCisKKyAgICBmb3IgKDs7KSB7CisJY2ggPSByZWFkX3NjcmVlbihkZGF0YS5kaXR0by0+c2NyZWVuLCAmZGRhdGEpOworCWlmIChjaCA9PSBDVFJMKCdEJykpIHsKKwkgICAgaW50IGxhdGVyID0gKGRkYXRhLnNvdXJjZSA/IGRkYXRhLnNvdXJjZSA6IC0xKTsKKwkgICAgaW50IGo7CisKKwkgICAgZm9yIChqID0gZGRhdGEuZGl0dG8tPmxlbmd0aCAtIDE7IGogPiAwOyAtLWopIHsKKwkJaWYgKGogIT0gbGF0ZXIpIHsKKwkJICAgIHB0aHJlYWRfY2FuY2VsKGRkYXRhLmRpdHRvW2pdLnRocmVhZCk7CisJCX0KKwkgICAgfQorCSAgICBpZiAobGF0ZXIgPiAwKSB7CisJCXB0aHJlYWRfY2FuY2VsKGRkYXRhLmRpdHRvW2xhdGVyXS50aHJlYWQpOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKwlzaG93X2RpdHRvKGRkYXRhLmRpdHRvLCBkZGF0YS5kaXR0by0+bGVuZ3RoLCAmZGRhdGEpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgajsKKyAgICBESVRUTyAqZGF0YTsKKyNpZm5kZWYgVVNFX1BUSFJFQURTCisgICAgaW50IGNvdW50OworI2VuZGlmCisKKyAgICBpZiAoYXJnYyA8PSAxKQorCXVzYWdlKCk7CisKKyAgICBpZiAoKGRhdGEgPSB0eXBlQ2FsbG9jKERJVFRPLCAoc2l6ZV90KSBhcmdjKSkgPT0gMCkKKwlmYWlsZWQoImNhbGxvYyBkYXRhIik7CisKKyAgICBmb3IgKGogPSAwOyBqIDwgYXJnYzsgaisrKSB7CisJb3Blbl9zY3JlZW4oJmRhdGFbal0sIGFyZ3YsIGFyZ2MsIGopOworICAgIH0KKworI2lmZGVmIFVTRV9QVEhSRUFEUworICAgIC8qCisgICAgICogRm9yIG11bHRpLXRocmVhZGVkIG9wZXJhdGlvbiwgc2V0IHVwIGEgcmVhZGVyIGZvciBlYWNoIG9mIHRoZSBzY3JlZW5zLgorICAgICAqIFRoYXQgdXNlcyBibG9ja2luZyBJL08gcmF0aGVyIHRoYW4gcG9sbGluZyBmb3IgaW5wdXQsIHNvIG5vIGNhbGxzIHRvCisgICAgICogbmFwbXMoKSBhcmUgbmVlZGVkLgorICAgICAqLworICAgIGZvciAoaiA9IDA7IGogPCBhcmdjOyBqKyspIHsKKwkodm9pZCkgcHRocmVhZF9jcmVhdGUoJihkYXRhW2pdLnRocmVhZCksIE5VTEwsIGhhbmRsZV9zY3JlZW4sICZkYXRhW2pdKTsKKyAgICB9CisgICAgcHRocmVhZF9qb2luKGRhdGFbMV0udGhyZWFkLCBOVUxMKTsKKyNlbHNlCisgICAgLyoKKyAgICAgKiBMb29wLCByZWFkaW5nIGNoYXJhY3RlcnMgZnJvbSBhbnkgb2YgdGhlIGlucHV0cyBhbmQgd3JpdGluZyB0byBhbGwKKyAgICAgKiBvZiB0aGUgc2NyZWVucy4KKyAgICAgKi8KKyAgICBmb3IgKGNvdW50ID0gMDs7ICsrY291bnQpIHsKKwlEREFUQSBkZGF0YTsKKwlpbnQgY2g7CisJaW50IHdoaWNoID0gKGNvdW50ICUgYXJnYyk7CisKKwluYXBtcygyMCk7CisKKwlkZGF0YS5zb3VyY2UgPSB3aGljaDsKKwlkZGF0YS5kaXR0byA9IGRhdGE7CisKKwljaCA9IFVTSU5HX1NDUkVFTihkYXRhW3doaWNoXS5zY3JlZW4sIHJlYWRfc2NyZWVuLCAmZGRhdGEpOworCWlmIChjaCA9PSBDVFJMKCdEJykpIHsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmIChjaCAhPSBFUlIpIHsKKwkgICAgc2hvd19kaXR0byhkYXRhLCBhcmdjLCAmZGRhdGEpOworCX0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogQ2xlYW51cCBhbmQgZXhpdAorICAgICAqLworICAgIGZvciAoaiA9IGFyZ2MgLSAxOyBqID49IDA7IGotLSkgeworCVVTSU5HX1NDUkVFTihkYXRhW2pdLnNjcmVlbiwgY2xvc2Vfc2NyZWVuLCAwKTsKKwlmcHJpbnRmKGRhdGFbal0ub3V0cHV0LCAiKipDbG9zZWRcclxuIik7CisKKwkvKgorCSAqIENsb3NpbmcgYmVmb3JlIGEgZGVsc2NyZWVuKCkgaGVscHMgbmN1cnNlcyBkZXRlcm1pbmUgdGhhdCB0aGVyZQorCSAqIGlzIG5vIHZhbGlkIG91dHB1dCBidWZmZXIsIGFuZCBjYW4gcmVtb3ZlIHRoZSBzZXRidWYoKSBkYXRhLgorCSAqLworCWZmbHVzaChkYXRhW2pdLm91dHB1dCk7CisJZmNsb3NlKGRhdGFbal0ub3V0cHV0KTsKKwlkZWxzY3JlZW4oZGF0YVtqXS5zY3JlZW4pOworICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9kb3RzLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2RvdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDY0NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9kb3RzLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTkKKyAqCisgKiAkSWQ6IGRvdHMuYyx2IDEuMTcgMjAwOC8wMi8wOSAxODowODo1MCB0b20gRXhwICQKKyAqCisgKiBBIHNpbXBsZSBkZW1vIG9mIHRoZSB0ZXJtaW5mbyBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgVVNFX1RJTkZPCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX1NFVFVQVEVSTQorCisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIHZhbGlkKHMpICgocyAhPSAwKSAmJiBzICE9IChjaGFyICopLTEpCisKK3N0YXRpYyBib29sIGludGVycnVwdGVkID0gRkFMU0U7CitzdGF0aWMgbG9uZyB0b3RhbF9jaGFycyA9IDA7CitzdGF0aWMgdGltZV90IHN0YXJ0ZWQ7CisKK3N0YXRpYyBpbnQKK291dGMoVFBVVFNfQVJHIGMpCit7CisgICAgaWYgKGludGVycnVwdGVkKSB7CisJY2hhciB0bXAgPSBjOworCXdyaXRlKFNURE9VVF9GSUxFTk8sICZ0bXAsIDEpOworICAgIH0gZWxzZSB7CisJcHV0YyhjLCBzdGRvdXQpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wKK291dHMoY2hhciAqcykKK3sKKyAgICBpZiAodmFsaWQocykpIHsKKwl0cHV0cyhzLCAxLCBvdXRjKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cCh2b2lkKQoreworICAgIG91dHMoZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisgICAgaWYgKCFvdXRzKG9yaWdfY29sb3JzKSkKKwlvdXRzKG9yaWdfcGFpcik7CisgICAgb3V0cyhjbGVhcl9zY3JlZW4pOworICAgIG91dHMoY3Vyc29yX25vcm1hbCk7CisKKyAgICBwcmludGYoIlxuXG4lbGQgdG90YWwgY2hhcnMsIHJhdGUgJS4yZi9zZWNcbiIsCisJICAgdG90YWxfY2hhcnMsCisJICAgKChkb3VibGUpICh0b3RhbF9jaGFycykgLyAodGltZSgodGltZV90ICopIDApIC0gc3RhcnRlZCkpKTsKK30KKworc3RhdGljIHZvaWQKK29uc2lnKGludCBuIEdDQ19VTlVTRUQpCit7CisgICAgaW50ZXJydXB0ZWQgPSBUUlVFOworfQorCitzdGF0aWMgZmxvYXQKK3JhbmYodm9pZCkKK3sKKyAgICBsb25nIHIgPSAocmFuZCgpICYgMDc3Nzc3KTsKKyAgICByZXR1cm4gKChmbG9hdCkgciAvIDMyNzY4Lik7Cit9CisKK2ludAorbWFpbigKKwlpbnQgYXJnYyBHQ0NfVU5VU0VELAorCWNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IHgsIHksIHosIHA7CisgICAgZmxvYXQgcjsKKyAgICBmbG9hdCBjOworCisgICAgQ0FUQ0hBTEwob25zaWcpOworCisgICAgc3JhbmQoKHVuc2lnbmVkKSB0aW1lKDApKTsKKyAgICBzZXR1cHRlcm0oKGNoYXIgKikgMCwgMSwgKGludCAqKSAwKTsKKyAgICBvdXRzKGNsZWFyX3NjcmVlbik7CisgICAgb3V0cyhjdXJzb3JfaW52aXNpYmxlKTsKKyAgICBpZiAobWF4X2NvbG9ycyA+IDEpIHsKKwlpZiAoIXZhbGlkKHNldF9hX2ZvcmVncm91bmQpCisJICAgIHx8ICF2YWxpZChzZXRfYV9iYWNrZ3JvdW5kKQorCSAgICB8fCAoIXZhbGlkKG9yaWdfY29sb3JzKSAmJiAhdmFsaWQob3JpZ19wYWlyKSkpCisJICAgIG1heF9jb2xvcnMgPSAtMTsKKyAgICB9CisKKyAgICByID0gKGZsb2F0KSAobGluZXMgLSA0KTsKKyAgICBjID0gKGZsb2F0KSAoY29sdW1ucyAtIDQpOworICAgIHN0YXJ0ZWQgPSB0aW1lKCh0aW1lX3QgKikgMCk7CisKKyAgICB3aGlsZSAoIWludGVycnVwdGVkKSB7CisJeCA9IChpbnQpIChjICogcmFuZigpKSArIDI7CisJeSA9IChpbnQpIChyICogcmFuZigpKSArIDI7CisJcCA9IChyYW5mKCkgPiAwLjkpID8gJyonIDogJyAnOworCisJdHB1dHModHBhcm0zKGN1cnNvcl9hZGRyZXNzLCB5LCB4KSwgMSwgb3V0Yyk7CisJaWYgKG1heF9jb2xvcnMgPiAwKSB7CisJICAgIHogPSAoaW50KSAocmFuZigpICogbWF4X2NvbG9ycyk7CisJICAgIGlmIChyYW5mKCkgPiAwLjAxKSB7CisJCXRwdXRzKHRwYXJtMihzZXRfYV9mb3JlZ3JvdW5kLCB6KSwgMSwgb3V0Yyk7CisJICAgIH0gZWxzZSB7CisJCXRwdXRzKHRwYXJtMihzZXRfYV9iYWNrZ3JvdW5kLCB6KSwgMSwgb3V0Yyk7CisJCW5hcG1zKDEpOworCSAgICB9CisJfSBlbHNlIGlmICh2YWxpZChleGl0X2F0dHJpYnV0ZV9tb2RlKQorCQkgICAmJiB2YWxpZChlbnRlcl9yZXZlcnNlX21vZGUpKSB7CisJICAgIGlmIChyYW5mKCkgPD0gMC4wMSkgeworCQlvdXRzKChyYW5mKCkgPiAwLjYpCisJCSAgICAgPyBlbnRlcl9yZXZlcnNlX21vZGUKKwkJICAgICA6IGV4aXRfYXR0cmlidXRlX21vZGUpOworCQluYXBtcygxKTsKKwkgICAgfQorCX0KKwlvdXRjKHApOworCWZmbHVzaChzdGRvdXQpOworCSsrdG90YWxfY2hhcnM7CisgICAgfQorICAgIGNsZWFudXAoKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorI2Vsc2UKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELAorICAgICBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRlcm1pbmZvXG4iKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvZG90c19tdmN1ci5jIGIvbmN1cnNlcy01LjcvdGVzdC9kb3RzX212Y3VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMzAyMwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZG90c19tdmN1ci5jCkBAIC0wLDAgKzEsMTcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IC0gMjAwNworICoKKyAqICRJZDogZG90c19tdmN1ci5jLHYgMS4yIDIwMDgvMDIvMDkgMTg6MDg6NTcgdG9tIEV4cCAkCisgKgorICogQSBzaW1wbGUgZGVtbyBvZiB0aGUgdGVybWluZm8gaW50ZXJmYWNlLCBhbmQgbXZjdXIuCisgKi8KKyNkZWZpbmUgVVNFX1RJTkZPCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX1NFVFVQVEVSTQorCisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIHZhbGlkKHMpICgocyAhPSAwKSAmJiBzICE9IChjaGFyICopLTEpCisKK3N0YXRpYyBib29sIGludGVycnVwdGVkID0gRkFMU0U7CitzdGF0aWMgbG9uZyB0b3RhbF9jaGFycyA9IDA7CitzdGF0aWMgdGltZV90IHN0YXJ0ZWQ7CisKK3N0YXRpYyBpbnQKK291dGMoVFBVVFNfQVJHIGMpCit7CisgICAgaWYgKGludGVycnVwdGVkKSB7CisJY2hhciB0bXAgPSBjOworCXdyaXRlKFNURE9VVF9GSUxFTk8sICZ0bXAsIDEpOworICAgIH0gZWxzZSB7CisJcHV0YyhjLCBzdGRvdXQpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wKK291dHMoY2hhciAqcykKK3sKKyAgICBpZiAodmFsaWQocykpIHsKKwl0cHV0cyhzLCAxLCBvdXRjKTsKKwlyZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cCh2b2lkKQoreworICAgIG91dHMoZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisgICAgaWYgKCFvdXRzKG9yaWdfY29sb3JzKSkKKwlvdXRzKG9yaWdfcGFpcik7CisgICAgb3V0cyhjbGVhcl9zY3JlZW4pOworICAgIG91dHMoY3Vyc29yX25vcm1hbCk7CisKKyAgICBwcmludGYoIlxuXG4lbGQgdG90YWwgY2hhcnMsIHJhdGUgJS4yZi9zZWNcbiIsCisJICAgdG90YWxfY2hhcnMsCisJICAgKChkb3VibGUpICh0b3RhbF9jaGFycykgLyAodGltZSgodGltZV90ICopIDApIC0gc3RhcnRlZCkpKTsKK30KKworc3RhdGljIHZvaWQKK29uc2lnKGludCBuIEdDQ19VTlVTRUQpCit7CisgICAgaW50ZXJydXB0ZWQgPSBUUlVFOworfQorCitzdGF0aWMgZmxvYXQKK3JhbmYodm9pZCkKK3sKKyAgICBsb25nIHIgPSAocmFuZCgpICYgMDc3Nzc3KTsKKyAgICByZXR1cm4gKChmbG9hdCkgciAvIDMyNzY4Lik7Cit9CisKK2ludAorbWFpbigKKwlpbnQgYXJnYyBHQ0NfVU5VU0VELAorCWNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IHgwID0gMSwgeTAgPSAxOworICAgIGludCB4LCB5LCB6LCBwOworICAgIGZsb2F0IHI7CisgICAgZmxvYXQgYzsKKyAgICBTQ1JFRU4gKnNwOworCisgICAgQ0FUQ0hBTEwob25zaWcpOworCisgICAgc3JhbmQoKHVuc2lnbmVkKSB0aW1lKDApKTsKKyAgICBzcCA9IG5ld3Rlcm0oKGNoYXIgKikgMCwgc3Rkb3V0LCBzdGRpbik7CisgICAgb3V0cyhjbGVhcl9zY3JlZW4pOworICAgIG91dHMoY3Vyc29yX2hvbWUpOworICAgIG91dHMoY3Vyc29yX2ludmlzaWJsZSk7CisgICAgaWYgKG1heF9jb2xvcnMgPiAxKSB7CisJaWYgKCF2YWxpZChzZXRfYV9mb3JlZ3JvdW5kKQorCSAgICB8fCAhdmFsaWQoc2V0X2FfYmFja2dyb3VuZCkKKwkgICAgfHwgKCF2YWxpZChvcmlnX2NvbG9ycykgJiYgIXZhbGlkKG9yaWdfcGFpcikpKQorCSAgICBtYXhfY29sb3JzID0gLTE7CisgICAgfQorCisgICAgciA9IChmbG9hdCkgKGxpbmVzIC0gNCk7CisgICAgYyA9IChmbG9hdCkgKGNvbHVtbnMgLSA0KTsKKyAgICBzdGFydGVkID0gdGltZSgodGltZV90ICopIDApOworCisgICAgd2hpbGUgKCFpbnRlcnJ1cHRlZCkgeworCXggPSAoaW50KSAoYyAqIHJhbmYoKSkgKyAyOworCXkgPSAoaW50KSAociAqIHJhbmYoKSkgKyAyOworCXAgPSAocmFuZigpID4gMC45KSA/ICcqJyA6ICcgJzsKKworCWlmIChtdmN1cih5MCwgeDAsIHksIHgpICE9IEVSUikgeworCSAgICB4MCA9IHg7CisJICAgIHkwID0geTsKKwl9CisKKwlpZiAobWF4X2NvbG9ycyA+IDApIHsKKwkgICAgeiA9IChpbnQpIChyYW5mKCkgKiBtYXhfY29sb3JzKTsKKwkgICAgaWYgKHJhbmYoKSA+IDAuMDEpIHsKKwkJdHB1dHModHBhcm0yKHNldF9hX2ZvcmVncm91bmQsIHopLCAxLCBvdXRjKTsKKwkgICAgfSBlbHNlIHsKKwkJdHB1dHModHBhcm0yKHNldF9hX2JhY2tncm91bmQsIHopLCAxLCBvdXRjKTsKKwkJbmFwbXMoMSk7CisJICAgIH0KKwl9IGVsc2UgaWYgKHZhbGlkKGV4aXRfYXR0cmlidXRlX21vZGUpCisJCSAgICYmIHZhbGlkKGVudGVyX3JldmVyc2VfbW9kZSkpIHsKKwkgICAgaWYgKHJhbmYoKSA8PSAwLjAxKSB7CisJCW91dHMoKHJhbmYoKSA+IDAuNikKKwkJICAgICA/IGVudGVyX3JldmVyc2VfbW9kZQorCQkgICAgIDogZXhpdF9hdHRyaWJ1dGVfbW9kZSk7CisJCW5hcG1zKDEpOworCSAgICB9CisJfQorCW91dGMocCk7CisJZmZsdXNoKHN0ZG91dCk7CisJKyt0b3RhbF9jaGFyczsKKyAgICB9CisgICAgY2xlYW51cCgpOworICAgIGVuZHdpbigpOworICAgIGRlbHNjcmVlbihzcCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwKKyAgICAgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0ZXJtaW5mb1xuIik7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2VjaG9jaGFyLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2VjaG9jaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkZTdlZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZWNob2NoYXIuYwpAQCAtMCwwICsxLDE1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGVjaG9jaGFyLmMsdiAxLjYgMjAwOC8wNC8xMiAyMjowNjowNCB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgZWNob2NoYXIgZnVuY3Rpb24gKGNvbXBhcmUgdG8gZG90cy5jKS4KKyAqIFRob21hcyBEaWNrZXkgLSAyMDA2LzExLzQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNkZWZpbmUgdmFsaWQocykgKChzICE9IDApICYmIHMgIT0gKGNoYXIgKiktMSkKKworc3RhdGljIGJvb2wgaW50ZXJydXB0ZWQgPSBGQUxTRTsKK3N0YXRpYyBsb25nIHRvdGFsX2NoYXJzID0gMDsKK3N0YXRpYyB0aW1lX3Qgc3RhcnRlZDsKKworc3RhdGljIHZvaWQKK2NsZWFudXAodm9pZCkKK3sKKyAgICBlbmR3aW4oKTsKKworICAgIHByaW50ZigiXG5cbiVsZCB0b3RhbCBjaGFycywgcmF0ZSAlLjJmL3NlY1xuIiwKKwkgICB0b3RhbF9jaGFycywKKwkgICAoKGRvdWJsZSkgKHRvdGFsX2NoYXJzKSAvICh0aW1lKCh0aW1lX3QgKikgMCkgLSBzdGFydGVkKSkpOworfQorCitzdGF0aWMgdm9pZAorb25zaWcoaW50IG4gR0NDX1VOVVNFRCkKK3sKKyAgICBpbnRlcnJ1cHRlZCA9IFRSVUU7Cit9CisKK3N0YXRpYyBmbG9hdAorcmFuZih2b2lkKQoreworICAgIGxvbmcgciA9IChyYW5kKCkgJiAwNzc3NzcpOworICAgIHJldHVybiAoKGZsb2F0KSByIC8gMzI3NjguKTsKK30KKworc3RhdGljIHZvaWQKK3NldF9jb2xvcihjaGFyICpteV9wYWlycywgaW50IGZnLCBpbnQgYmcpCit7CisgICAgaW50IHBhaXIgPSAoZmcgKiBDT0xPUlMpICsgYmc7CisgICAgaWYgKCFteV9wYWlyc1twYWlyXSkgeworCWluaXRfcGFpcihwYWlyLCBmZywgYmcpOworICAgIH0KKyAgICBhdHRyb24oQ09MT1JfUEFJUihwYWlyKSk7Cit9CisKK2ludAorbWFpbigKKwlpbnQgYXJnYyBHQ0NfVU5VU0VELAorCWNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IGNoLCB4LCB5LCB6LCBwOworICAgIGZsb2F0IHI7CisgICAgZmxvYXQgYzsKKyAgICBib29sIHVzZV9jb2xvcnM7CisgICAgYm9vbCBvcHRfciA9IEZBTFNFOworICAgIGNoYXIgKm15X3BhaXJzID0gMDsKKyAgICBpbnQgbGFzdF9mZyA9IDA7CisgICAgaW50IGxhc3RfYmcgPSAwOworCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiciIpKSAhPSAtMSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdyJzoKKwkgICAgb3B0X3IgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBlY2hvY2hhciBbLXJdXG4iKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisgICAgfQorCisgICAgQ0FUQ0hBTEwob25zaWcpOworICAgIGluaXRzY3IoKTsKKworICAgIHVzZV9jb2xvcnMgPSBoYXNfY29sb3JzKCk7CisgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwlzdGFydF9jb2xvcigpOworCWlmIChDT0xPUl9QQUlSUyA+IDApIHsKKwkgICAgbXlfcGFpcnMgPSB0eXBlQ2FsbG9jKGNoYXIsIENPTE9SX1BBSVJTKTsKKwl9CisJdXNlX2NvbG9ycyA9IChteV9wYWlycyAhPSAwKTsKKyAgICB9CisKKyAgICBzcmFuZCgodW5zaWduZWQpIHRpbWUoMCkpOworCisgICAgY3Vyc19zZXQoMCk7CisKKyAgICByID0gKGZsb2F0KSAoTElORVMgLSA0KTsKKyAgICBjID0gKGZsb2F0KSAoQ09MUyAtIDQpOworICAgIHN0YXJ0ZWQgPSB0aW1lKCh0aW1lX3QgKikgMCk7CisKKyAgICB3aGlsZSAoIWludGVycnVwdGVkKSB7CisJeCA9IChpbnQpIChjICogcmFuZigpKSArIDI7CisJeSA9IChpbnQpIChyICogcmFuZigpKSArIDI7CisJcCA9IChyYW5mKCkgPiAwLjkpID8gJyonIDogJyAnOworCisJbW92ZSh5LCB4KTsKKwlpZiAodXNlX2NvbG9ycyA+IDApIHsKKwkgICAgeiA9IChpbnQpIChyYW5mKCkgKiBDT0xPUlMpOworCSAgICBpZiAocmFuZigpID4gMC4wMSkgeworCQlzZXRfY29sb3IobXlfcGFpcnMsIHosIGxhc3RfYmcpOworCQlsYXN0X2ZnID0gejsKKwkgICAgfSBlbHNlIHsKKwkJc2V0X2NvbG9yKG15X3BhaXJzLCBsYXN0X2ZnLCB6KTsKKwkJbGFzdF9iZyA9IHo7CisJCW5hcG1zKDEpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYgKHJhbmYoKSA8PSAwLjAxKSB7CisJCWlmIChyYW5mKCkgPiAwLjYpCisJCSAgICBhdHRyb24oQV9SRVZFUlNFKTsKKwkJZWxzZQorCQkgICAgYXR0cm9mZihBX1JFVkVSU0UpOworCQluYXBtcygxKTsKKwkgICAgfQorCX0KKwlpZiAob3B0X3IpIHsKKwkgICAgYWRkY2goVUNoYXIocCkpOworCSAgICByZWZyZXNoKCk7CisJfSBlbHNlIHsKKwkgICAgZWNob2NoYXIoVUNoYXIocCkpOworCX0KKwkrK3RvdGFsX2NoYXJzOworICAgIH0KKyAgICBjbGVhbnVwKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvZWRpdF9maWVsZC5jIGIvbmN1cnNlcy01LjcvdGVzdC9lZGl0X2ZpZWxkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0MDAyOAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZWRpdF9maWVsZC5jCkBAIC0wLDAgKzEsNDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogZWRpdF9maWVsZC5jLHYgMS4xNCAyMDA4LzEwLzE4IDIwOjQwOjIwIHRvbSBFeHAgJAorICoKKyAqIEEgd3JhcHBlciBmb3IgZm9ybV9kcml2ZXIoKSB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgdXNlcidzIGVkaXRpbmcgY2hhbmdlcworICogZm9yIGVhY2ggZmllbGQsIGFuZCBtYWtlcyB0aGUgcmVzdWx0IGF2YWlsYWJsZSBhcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcKKyAqIGluIGZpZWxkX2J1ZmZlcihmaWVsZCwxKS4KKyAqCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwMy80LzI2LgorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIFVTRV9MSUJGT1JNCisKKyNpbmNsdWRlIDxlZGl0X2ZpZWxkLmg+CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGludCBjb2RlOworICAgIGludCByZXN1bHQ7CisgICAgY29uc3QgY2hhciAqaGVscDsKK30gY29tbWFuZHNbXSA9IHsKKworICAgIHsKKwlDVFJMKCdBJyksIFJFUV9ORVhUX0NIT0lDRSwgIiIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdCJyksIFJFUV9QUkVWX1dPUkQsICJnbyB0byBwcmV2aW91cyB3b3JkIgorICAgIH0sCisgICAgeworCUNUUkwoJ0MnKSwgUkVRX0NMUl9FT0wsICJjbGVhciB0byBlbmQgb2YgbGluZSIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdEJyksIFJFUV9ET1dOX0ZJRUxELCAibW92ZSBkb3dud2FyZCB0byBmaWVsZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdFJyksIFJFUV9FTkRfRklFTEQsICJnbyB0byBlbmQgb2YgZmllbGQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnRicpLCBSRVFfTkVYVF9QQUdFLCAiZ28gdG8gbmV4dCBwYWdlIgorICAgIH0sCisgICAgeworCUNUUkwoJ0cnKSwgUkVRX0RFTF9XT1JELCAiZGVsZXRlIGN1cnJlbnQgd29yZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdIJyksIFJFUV9ERUxfUFJFViwgImRlbGV0ZSBwcmV2aW91cyBjaGFyYWN0ZXIiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnSScpLCBSRVFfSU5TX0NIQVIsICJpbnNlcnQgY2hhcmFjdGVyIgorICAgIH0sCisgICAgeworCUNUUkwoJ0snKSwgUkVRX0NMUl9FT0YsICJjbGVhciB0byBlbmQgb2YgZmllbGQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnTCcpLCBSRVFfTEVGVF9GSUVMRCwgImdvIHRvIGZpZWxkIHRvIGxlZnQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnTScpLCBSRVFfTkVXX0xJTkUsICJpbnNlcnQvb3ZlcmxheSBuZXcgbGluZSIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdOJyksIFJFUV9ORVhUX0ZJRUxELCAiZ28gdG8gbmV4dCBmaWVsZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdPJyksIFJFUV9JTlNfTElORSwgImluc2VydCBibGFuayBsaW5lIGF0IGN1cnNvciIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdQJyksIFJFUV9QUkVWX0ZJRUxELCAiZ28gdG8gcHJldmlvdXMgZmllbGQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnUScpLCBNWV9RVUlULCAiZXhpdCBmb3JtIgorICAgIH0sCisgICAgeworCUNUUkwoJ1InKSwgUkVRX1JJR0hUX0ZJRUxELCAiZ28gdG8gZmllbGQgdG8gcmlnaHQiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnUycpLCBSRVFfQkVHX0ZJRUxELCAiZ28gdG8gYmVnaW5uaW5nIG9mIGZpZWxkIgorICAgIH0sCisgICAgeworCUNUUkwoJ1QnKSwgTVlfRURUX01PREUsICJ0b2dnbGUgT19FRElUIG1vZGUsIGNsZWFyIGZpZWxkIHN0YXR1cyIsCisgICAgfSwKKyAgICB7CisJQ1RSTCgnVScpLCBSRVFfVVBfRklFTEQsICJtb3ZlIHVwd2FyZCB0byBmaWVsZCIKKyAgICB9LAorICAgIHsKKwlDVFJMKCdWJyksIFJFUV9ERUxfQ0hBUiwgImRlbGV0ZSBjaGFyYWN0ZXIiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnVycpLCBSRVFfTkVYVF9XT1JELCAiZ28gdG8gbmV4dCB3b3JkIgorICAgIH0sCisgICAgeworCUNUUkwoJ1gnKSwgUkVRX0NMUl9GSUVMRCwgImNsZWFyIGZpZWxkIgorICAgIH0sCisgICAgeworCUNUUkwoJ1knKSwgUkVRX0RFTF9MSU5FLCAiZGVsZXRlIGxpbmUiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnWicpLCBSRVFfUFJFVl9DSE9JQ0UsICIiCisgICAgfSwKKyAgICB7CisJQ1RSTCgnWycpLCBNWV9RVUlULCAiZXhpdCBmb3JtIgorICAgIH0sCisgICAgeworCUNUUkwoJ10nKSwgTVlfSU5TX01PREUsICJ0b2dnbGUgUkVRX0lOU19NT0RFL1JFUV9PVkxfTU9ERSIsCisgICAgfSwKKyAgICB7CisJS0VZX0YoMSksIE1ZX0hFTFAsICJzaG93IHRoaXMgc2NyZWVuIiwKKyAgICB9LAorICAgIHsKKwlLRVlfQkFDS1NQQUNFLCBSRVFfREVMX1BSRVYsICJkZWxldGUgcHJldmlvdXMgY2hhcmFjdGVyIgorICAgIH0sCisgICAgeworCUtFWV9ET1dOLCBSRVFfRE9XTl9DSEFSLCAibW92ZSBkb3duIDEgY2hhcmFjdGVyIgorICAgIH0sCisgICAgeworCUtFWV9FTkQsIFJFUV9MQVNUX0ZJRUxELCAiZ28gdG8gbGFzdCBmaWVsZCIKKyAgICB9LAorICAgIHsKKwlLRVlfSE9NRSwgUkVRX0ZJUlNUX0ZJRUxELCAiZ28gdG8gZmlyc3QgZmllbGQiCisgICAgfSwKKyAgICB7CisJS0VZX0xFRlQsIFJFUV9MRUZUX0NIQVIsICJtb3ZlIGxlZnQgMSBjaGFyYWN0ZXIiCisgICAgfSwKKyAgICB7CisJS0VZX0xMLCBSRVFfTEFTVF9GSUVMRCwgImdvIHRvIGxhc3QgZmllbGQiCisgICAgfSwKKyAgICB7CisJS0VZX05FWFQsIFJFUV9ORVhUX0ZJRUxELCAiZ28gdG8gbmV4dCBmaWVsZCIKKyAgICB9LAorICAgIHsKKwlLRVlfTlBBR0UsIFJFUV9ORVhUX1BBR0UsICJnbyB0byBuZXh0IHBhZ2UiCisgICAgfSwKKyAgICB7CisJS0VZX1BQQUdFLCBSRVFfUFJFVl9QQUdFLCAiZ28gdG8gcHJldmlvdXMgcGFnZSIKKyAgICB9LAorICAgIHsKKwlLRVlfUFJFVklPVVMsIFJFUV9QUkVWX0ZJRUxELCAiZ28gdG8gcHJldmlvdXMgZmllbGQiCisgICAgfSwKKyAgICB7CisJS0VZX1JJR0hULCBSRVFfUklHSFRfQ0hBUiwgIm1vdmUgcmlnaHQgMSBjaGFyYWN0ZXIiCisgICAgfSwKKyAgICB7CisJS0VZX1VQLCBSRVFfVVBfQ0hBUiwgIm1vdmUgdXAgMSBjaGFyYWN0ZXIiCisgICAgfQorfTsKKworc3RhdGljIFdJTkRPVyAqb2xkX3dpbmRvdzsKKworc3RhdGljIHZvaWQKK2JlZ2luX3BvcHVwKHZvaWQpCit7CisgICAgZG91cGRhdGUoKTsKKyAgICBvbGRfd2luZG93ID0gZHVwd2luKGN1cnNjcik7Cit9CisKK3N0YXRpYyB2b2lkCitlbmRfcG9wdXAodm9pZCkKK3sKKyAgICB0b3VjaHdpbihvbGRfd2luZG93KTsKKyAgICB3bm91dHJlZnJlc2gob2xkX3dpbmRvdyk7CisgICAgZG91cGRhdGUoKTsKKyAgICBkZWx3aW4ob2xkX3dpbmRvdyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgdGVtcG9yYXJ5IHdpbmRvdyBsaXN0aW5nIHRoZSBrZXlzdHJva2UtY29tbWFuZHMgd2UgcmVjb2duaXplLgorICovCit2b2lkCitoZWxwX2VkaXRfZmllbGQodm9pZCkKK3sKKyAgICBpbnQgeDAgPSA0OworICAgIGludCB5MCA9IDI7CisgICAgaW50IHkxID0gMDsKKyAgICBpbnQgeTIgPSAwOworICAgIGludCB3aWRlID0gQ09MUyAtICgoeDAgKyAxKSAqIDIpOworICAgIGludCBoaWdoID0gTElORVMgLSAoKHkwICsgMSkgKiAyKTsKKyAgICBXSU5ET1cgKmhlbHAgPSBuZXd3aW4oaGlnaCwgd2lkZSwgeTAsIHgwKTsKKyAgICBXSU5ET1cgKmRhdGEgPSBuZXdwYWQoMiArIFNJWkVPRihjb21tYW5kcyksIHdpZGUgLSA0KTsKKyAgICB1bnNpZ25lZCBuOworICAgIGludCBjaCA9IEVSUjsKKworICAgIGJlZ2luX3BvcHVwKCk7CisKKyAgICBrZXlwYWQoaGVscCwgVFJVRSk7CisgICAga2V5cGFkKGRhdGEsIFRSVUUpOworICAgIHdhZGRzdHIoZGF0YSwgIkRlZmluZWQgZm9ybSBlZGl0L3RyYXZlcnNhbCBrZXlzOlxuIik7CisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRihjb21tYW5kcyk7ICsrbikgeworCWNvbnN0IGNoYXIgKm5hbWU7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisJaWYgKChuYW1lID0gZm9ybV9yZXF1ZXN0X25hbWUoY29tbWFuZHNbbl0ucmVzdWx0KSkgPT0gMCkKKyNlbmRpZgorCSAgICBuYW1lID0gY29tbWFuZHNbbl0uaGVscDsKKwl3cHJpbnR3KGRhdGEsICIlcyAtLSAlc1xuIiwKKwkJa2V5bmFtZShjb21tYW5kc1tuXS5jb2RlKSwKKwkJbmFtZSAhPSAwID8gbmFtZSA6IGNvbW1hbmRzW25dLmhlbHApOworICAgIH0KKyAgICB3YWRkc3RyKGRhdGEsICJBcnJvdyBrZXlzIG1vdmUgd2l0aGluIGEgZmllbGQgYXMgeW91IHdvdWxkIGV4cGVjdC4iKTsKKyAgICB5MiA9IGdldGN1cnkoZGF0YSk7CisKKyAgICBkbyB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgS0VZX0hPTUU6CisJICAgIHkxID0gMDsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfRU5EOgorCSAgICB5MSA9IHkyOworCSAgICBicmVhazsKKwljYXNlIEtFWV9QUkVWSU9VUzoKKwljYXNlIEtFWV9QUEFHRToKKwkgICAgaWYgKHkxID4gMCkgeworCQl5MSAtPSBoaWdoIC8gMjsKKwkJaWYgKHkxIDwgMCkKKwkJICAgIHkxID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX05FWFQ6CisJY2FzZSBLRVlfTlBBR0U6CisJICAgIGlmICh5MSA8IHkyKSB7CisJCXkxICs9IGhpZ2ggLyAyOworCQlpZiAoeTEgPj0geTIpCisJCSAgICB5MSA9IHkyOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdQJyk6CisJY2FzZSBLRVlfVVA6CisJICAgIGlmICh5MSA+IDApCisJCS0teTE7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIENUUkwoJ04nKToKKwljYXNlIEtFWV9ET1dOOgorCSAgICBpZiAoeTEgPCB5MikKKwkJKyt5MTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBFUlI6CisJICAgIGJyZWFrOworCX0KKwl3ZXJhc2UoaGVscCk7CisJYm94KGhlbHAsIDAsIDApOworCXdub3V0cmVmcmVzaChoZWxwKTsKKwlwbm91dHJlZnJlc2goZGF0YSwgeTEsIDAsIHkwICsgMSwgeDAgKyAxLCBoaWdoLCB3aWRlKTsKKwlkb3VwZGF0ZSgpOworICAgIH0gd2hpbGUgKChjaCA9IHdnZXRjaChkYXRhKSkgIT0gRVJSICYmIGNoICE9IFFVSVQgJiYgY2ggIT0gRVNDQVBFKTsKKyAgICB3ZXJhc2UoaGVscCk7CisgICAgd3JlZnJlc2goaGVscCk7CisgICAgZGVsd2luKGhlbHApOworICAgIGRlbHdpbihkYXRhKTsKKworICAgIGVuZF9wb3B1cCgpOworfQorCitzdGF0aWMgaW50CitvZmZzZXRfaW5fZmllbGQoRk9STSAqIGZvcm0pCit7CisgICAgRklFTEQgKmZpZWxkID0gY3VycmVudF9maWVsZChmb3JtKTsKKyAgICByZXR1cm4gZm9ybS0+Y3VyY29sICsgZm9ybS0+Y3Vycm93ICogZmllbGQtPmRjb2xzOworfQorCitzdGF0aWMgdm9pZAoraW5hY3RpdmVfZmllbGQoRklFTEQgKiBmKQoreworICAgIHZvaWQgKnB0ciA9IGZpZWxkX3VzZXJwdHIoZik7CisgICAgc2V0X2ZpZWxkX2JhY2soZiwgKGNodHlwZSkgcHRyKTsKK30KKworaW50CitlZGl0X2ZpZWxkKEZPUk0gKiBmb3JtLCBpbnQgKnJlc3VsdCkKK3sKKyAgICBpbnQgY2ggPSB3Z2V0Y2goZm9ybV93aW4oZm9ybSkpOworICAgIGludCBzdGF0dXM7CisgICAgRklFTEQgKmJlZm9yZTsKKyAgICB1bnNpZ25lZCBuOworICAgIGNoYXIgbGVuZ3Roc1s4MF07CisgICAgaW50IGxlbmd0aDsKKyAgICBjaGFyICpidWZmZXI7CisgICAgaW50IGJlZm9yZV9yb3cgPSBmb3JtLT5jdXJyb3c7CisgICAgaW50IGJlZm9yZV9jb2wgPSBmb3JtLT5jdXJjb2w7CisgICAgaW50IGJlZm9yZV9vZmYgPSBvZmZzZXRfaW5fZmllbGQoZm9ybSk7CisKKyAgICBiZWZvcmUgPSBjdXJyZW50X2ZpZWxkKGZvcm0pOworICAgIHNldF9maWVsZF9iYWNrKGJlZm9yZSwgQV9OT1JNQUwpOworICAgIGlmIChjaCA8PSBLRVlfTUFYKSB7CisJc2V0X2ZpZWxkX2JhY2soYmVmb3JlLCBBX1JFVkVSU0UpOworICAgIH0gZWxzZSBpZiAoY2ggPD0gTUFYX0ZPUk1fQ09NTUFORCkgeworCWluYWN0aXZlX2ZpZWxkKGJlZm9yZSk7CisgICAgfQorCisgICAgKnJlc3VsdCA9IGNoOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YoY29tbWFuZHMpOyArK24pIHsKKwlpZiAoY29tbWFuZHNbbl0uY29kZSA9PSBjaCkgeworCSAgICAqcmVzdWx0ID0gY29tbWFuZHNbbl0ucmVzdWx0OworCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgc3RhdHVzID0gZm9ybV9kcml2ZXIoZm9ybSwgKnJlc3VsdCk7CisKKyAgICBpZiAoc3RhdHVzID09IEVfT0spIHsKKwlib29sIG1vZGlmaWVkID0gVFJVRTsKKworCWxlbmd0aCA9IDA7CisJaWYgKChidWZmZXIgPSBmaWVsZF9idWZmZXIoYmVmb3JlLCAxKSkgIT0gMCkKKwkgICAgbGVuZ3RoID0gYXRvaShidWZmZXIpOworCWlmIChsZW5ndGggPCBiZWZvcmVfb2ZmKQorCSAgICBsZW5ndGggPSBiZWZvcmVfb2ZmOworCXN3aXRjaCAoKnJlc3VsdCkgeworCWNhc2UgUkVRX0NMUl9FT0Y6CisJICAgIGxlbmd0aCA9IGJlZm9yZV9vZmY7CisJICAgIGJyZWFrOworCWNhc2UgUkVRX0NMUl9FT0w6CisJICAgIGlmIChiZWZvcmVfcm93ICsgMSA9PSBiZWZvcmUtPnJvd3MpCisJCWxlbmd0aCA9IGJlZm9yZV9vZmY7CisJICAgIGJyZWFrOworCWNhc2UgUkVRX0NMUl9GSUVMRDoKKwkgICAgbGVuZ3RoID0gMDsKKwkgICAgYnJlYWs7CisJY2FzZSBSRVFfREVMX0NIQVI6CisJICAgIGlmIChsZW5ndGggPiBiZWZvcmVfb2ZmKQorCQktLWxlbmd0aDsKKwkgICAgYnJlYWs7CisJY2FzZSBSRVFfREVMX1BSRVY6CisJICAgIGlmIChsZW5ndGggPiAwKSB7CisJCWlmIChiZWZvcmVfY29sID4gMCkgeworCQkgICAgLS1sZW5ndGg7CisJCX0gZWxzZSBpZiAoYmVmb3JlX3JvdyA+IDApIHsKKwkJICAgIGxlbmd0aCAtPSBiZWZvcmUtPmNvbHMgKyBiZWZvcmVfY29sOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBSRVFfTkVXX0xJTkU6CisJICAgIGxlbmd0aCArPSBiZWZvcmUtPmNvbHM7CisJICAgIGJyZWFrOworI2lmIDAKKwkgICAgLyogRklYTUU6IGZpbmlzaCB0aGVzZSAqLworCWNhc2UgUkVRX0RFTF9MSU5FOgkvKiBkZWxldGUgbGluZSAqLworCWNhc2UgUkVRX0RFTF9XT1JEOgkvKiBkZWxldGUgd29yZCBhdCBjdXJzb3IgKi8KKwljYXNlIFJFUV9JTlNfQ0hBUjoJLyogaW5zZXJ0IGJsYW5rIGNoYXIgYXQgY3Vyc29yICovCisJY2FzZSBSRVFfSU5TX0xJTkU6CS8qIGluc2VydCBibGFuayBsaW5lIGF0IGN1cnNvciAqLworCWNhc2UgUkVRX0lOU19NT0RFOgkvKiBiZWdpbiBpbnNlcnQgbW9kZSAqLworCWNhc2UgUkVRX09WTF9NT0RFOgkvKiBiZWdpbiBvdmVybGF5IG1vZGUgKi8KKyNlbmRpZgorCSAgICAvKiBpZ25vcmUgYWxsIG9mIHRoZSBtb3Rpb24gY29tbWFuZHMgKi8KKwljYXNlIFJFUV9TQ1JfQkNIQVI6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0JIUEFHRToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TQ1JfQkxJTkU6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0JQQUdFOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NDUl9GQ0hBUjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TQ1JfRkhQQUdFOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NDUl9GTElORToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TQ1JfRlBBR0U6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0hCSEFMRjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TQ1JfSEJMSU5FOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1NDUl9IRkhBTEY6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0NSX0hGTElORToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9CRUdfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfQkVHX0xJTkU6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfRE9XTl9DSEFSOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0RPV05fRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfRU5EX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0VORF9MSU5FOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0ZJUlNUX0ZJRUxEOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0ZJUlNUX1BBR0U6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfTEFTVF9GSUVMRDoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9MQVNUX1BBR0U6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfTEVGVF9DSEFSOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX0xFRlRfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfTkVYVF9DSEFSOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX05FWFRfQ0hPSUNFOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX05FWFRfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfTkVYVF9MSU5FOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX05FWFRfUEFHRToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9ORVhUX1dPUkQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfUFJFVl9DSEFSOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1BSRVZfQ0hPSUNFOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1BSRVZfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfUFJFVl9MSU5FOgkvKiBGQUxMVEhSVSAqLworCWNhc2UgUkVRX1BSRVZfUEFHRToJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9QUkVWX1dPUkQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfUklHSFRfQ0hBUjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9SSUdIVF9GSUVMRDoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9TRklSU1RfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU0xBU1RfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU05FWFRfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfU1BSRVZfRklFTEQ6CS8qIEZBTExUSFJVICovCisJY2FzZSBSRVFfVVBfQ0hBUjoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9VUF9GSUVMRDoJLyogRkFMTFRIUlUgKi8KKwljYXNlIFJFUV9WQUxJREFUSU9OOgkvKiBGQUxMVEhSVSAqLworCSAgICBtb2RpZmllZCA9IEZBTFNFOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIG1vZGlmaWVkID0gRkFMU0U7CisJICAgIGlmIChjaCA+PSBNSU5fRk9STV9DT01NQU5EKSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIGlmIChpc3ByaW50KGNoKSkgeworCQltb2RpZmllZCA9IFRSVUU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkbyBub3QgZm9yY2UgYSByZS12YWxpZGF0aW9uLCB0aGVuIGZpZWxkX2J1ZmZlciAwIHdpbGwKKwkgKiBiZSBsYWdnaW5nIGJ5IG9uZSBjaGFyYWN0ZXIuCisJICovCisJaWYgKG1vZGlmaWVkICYmIGZvcm1fZHJpdmVyKGZvcm0sIFJFUV9WQUxJREFUSU9OKSA9PSBFX09LICYmICpyZXN1bHQKKwkgICAgPCBNSU5fRk9STV9DT01NQU5EKQorCSAgICArK2xlbmd0aDsKKworCXNwcmludGYobGVuZ3RocywgIiVkIiwgbGVuZ3RoKTsKKwlzZXRfZmllbGRfYnVmZmVyKGJlZm9yZSwgMSwgbGVuZ3Rocyk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRfZmllbGQoZm9ybSkgIT0gYmVmb3JlKQorCWluYWN0aXZlX2ZpZWxkKGJlZm9yZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKyNlbHNlCisKK2V4dGVybiB2b2lkIG5vX2VkaXRfZmllbGQodm9pZCk7CisKK3ZvaWQKK25vX2VkaXRfZmllbGQodm9pZCkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2VkaXRfZmllbGQuaCBiL25jdXJzZXMtNS43L3Rlc3QvZWRpdF9maWVsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTE3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2VkaXRfZmllbGQuaApAQCAtMCwwICsxLDQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogZWRpdF9maWVsZC5oLHYgMS41IDIwMDYvMDYvMDMgMTY6Mzg6NTcgdG9tIEV4cCAkCisgKgorICogSW50ZXJmYWNlIG9mIGVkaXRfZmllbGQuYworICovCisKKyNpZm5kZWYgRURJVF9GT1JNX0hfaW5jbAorI2RlZmluZSBFRElUX0ZPUk1fSF9pbmNsIDEKKworI2luY2x1ZGUgPGZvcm0uaD4KKworI2RlZmluZSBFRElUX0ZJRUxEKGMpIChNQVhfRk9STV9DT01NQU5EICsgYykKKworI2RlZmluZSBNWV9IRUxQCQlFRElUX0ZJRUxEKCdoJykKKyNkZWZpbmUgTVlfUVVJVAkJRURJVF9GSUVMRCgncScpCisjZGVmaW5lIE1ZX0VEVF9NT0RFCUVESVRfRklFTEQoJ2UnKQorI2RlZmluZSBNWV9JTlNfTU9ERQlFRElUX0ZJRUxEKCd0JykKKworZXh0ZXJuIHZvaWQgaGVscF9lZGl0X2ZpZWxkKHZvaWQpOworZXh0ZXJuIGludCBlZGl0X2ZpZWxkKEZPUk0gKiBmb3JtLCBpbnQgKnJlc3VsdCk7CisKKyNlbmRpZiAvKiBFRElUX0ZPUk1fSF9pbmNsICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2ZpbHRlci5jIGIvbmN1cnNlcy01LjcvdGVzdC9maWx0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGNlYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9maWx0ZXIuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEF1dGhvcjogIFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+IDE5OTgKKyAqCisgKiAkSWQ6IGZpbHRlci5jLHYgMS4xMSAyMDA2LzEyLzA5IDE2OjUzOjQ3IHRvbSBFeHAgJAorICovCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX0ZJTFRFUgorCisvKgorICogQW4gZXhhbXBsZSBvZiB0aGUgJ2ZpbHRlcigpJyBmdW5jdGlvbiBpbiBuY3Vyc2VzLCB0aGlzIHByb2dyYW0gcHJvbXB0cworICogZm9yIGNvbW1hbmRzIGFuZCBleGVjdXRlcyB0aGVtIChsaWtlIGEgY29tbWFuZCBzaGVsbCkuICBJdCBpbGx1c3RyYXRlcworICogaG93IG5jdXJzZXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHByb2dyYW1zIHRoYXQgYXJlIG5vdCBmdWxsLXNjcmVlbi4KKyAqCisgKiBOY3Vyc2VzIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBTVnI0IGN1cnNlcy4gIFRoZSBsYXR0ZXIgZG9lcyBub3QgZmx1c2ggaXRzCisgKiBzdGF0ZSB3aGVuIGV4aXRpbmcgcHJvZ3JhbSBtb2RlLCBzbyB0aGUgYXR0cmlidXRlcyBvbiB0aGUgY29tbWFuZCBsaW5lcyBvZgorICogdGhpcyBwcm9ncmFtICdibGVlZCcgb250byB0aGUgZXhlY3V0ZWQgY29tbWFuZHMuICBSYXRoZXIgdGhhbiB1c2UgdGhlCisgKiByZXNldF9zaGVsbF9tb2RlKCkgYW5kIHJlc2V0X3Byb2dfbW9kZSgpIGZ1bmN0aW9ucywgd2UgY291bGQgaW52b2tlIGVuZHdpbigpCisgKiBhbmQgcmVmcmVzaCgpLCBidXQgdGhhdCBkb2VzIG5vdCB3b3JrIGFueSBiZXR0ZXIuCisgKi8KKworc3RhdGljIGludAorbmV3X2NvbW1hbmQoY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBhdHRyX3QgdW5kZXJsaW5lKQoreworICAgIGludCBjb2RlOworCisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgcHJpbnR3KCJDb21tYW5kOiAiKTsKKyAgICBhdHRyb24odW5kZXJsaW5lKTsKKyAgICBjb2RlID0gZ2V0bnN0cihidWZmZXIsIGxlbmd0aCk7CisgICAgLyoKKyAgICAgKiBJZiB0aGlzIHJldHVybnMgYW55dGhpbmcgZXhjZXB0IEVSUi9PSywgaXQgd291bGQgYmUgb25lIG9mIG5jdXJzZXMncworICAgICAqIGV4dGVuc2lvbnMuICBGaWxsIHRoZSBidWZmZXIgd2l0aCBzb21ldGhpbmcgaGFybWxlc3MgdGhhdCB0aGUgc2hlbGwKKyAgICAgKiB3aWxsIGV4ZWN1dGUgYXMgYSBjb21tZW50LgorICAgICAqLworI2lmZGVmIEtFWV9FVkVOVAorICAgIGlmIChjb2RlID09IEtFWV9FVkVOVCkKKwlzdHJjcHkoYnVmZmVyLCAiIyBldmVudCEiKTsKKyNlbmRpZgorI2lmZGVmIEtFWV9SRVNJWkUKKyAgICBpZiAoY29kZSA9PSBLRVlfUkVTSVpFKSB7CisJc3RyY3B5KGJ1ZmZlciwgIiMgcmVzaXplISIpOworCWdldGNoKCk7CisgICAgfQorI2VuZGlmCisgICAgYXR0cm9mZih1bmRlcmxpbmUpOworICAgIGF0dHJvZmYoQV9CT0xEKTsKKyAgICBwcmludHcoIlxuIik7CisKKyAgICByZXR1cm4gY29kZTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgY2hhciBidWZmZXJbODBdOworICAgIGF0dHJfdCB1bmRlcmxpbmU7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBmaWx0ZXIoKTsKKyAgICAodm9pZCkgbmV3dGVybSgoY2hhciAqKSAwLCBzdGRvdXQsIHN0ZGluKTsKKyAgICBjYnJlYWsoKTsKKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbnQgYmFja2dyb3VuZCA9IENPTE9SX0JMQUNLOworCXN0YXJ0X2NvbG9yKCk7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAodXNlX2RlZmF1bHRfY29sb3JzKCkgIT0gRVJSKQorCSAgICBiYWNrZ3JvdW5kID0gLTE7CisjZW5kaWYKKwlpbml0X3BhaXIoMSwgQ09MT1JfQ1lBTiwgYmFja2dyb3VuZCk7CisJdW5kZXJsaW5lID0gQ09MT1JfUEFJUigxKTsKKyAgICB9IGVsc2UgeworCXVuZGVybGluZSA9IEFfVU5ERVJMSU5FOworICAgIH0KKworICAgIHdoaWxlIChuZXdfY29tbWFuZChidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgdW5kZXJsaW5lKSAhPSBFUlIKKwkgICAmJiBzdHJsZW4oYnVmZmVyKSAhPSAwKSB7CisJcmVzZXRfc2hlbGxfbW9kZSgpOworCXByaW50ZigiXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlzeXN0ZW0oYnVmZmVyKTsKKwlyZXNldF9wcm9nX21vZGUoKTsKKwl0b3VjaHdpbihzdGRzY3IpOworCWVyYXNlKCk7CisJcmVmcmVzaCgpOworICAgIH0KKyAgICBwcmludHcoImRvbmUiKTsKKyAgICByZWZyZXNoKCk7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgZmlsdGVyIGZ1bmN0aW9uXG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmIC8qIEhBVkVfRklMVEVSICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2ZpcmV3b3JrLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2ZpcmV3b3JrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzN2U5NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZmlyZXdvcmsuYwpAQCAtMCwwICsxLDE5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IGZpcmV3b3JrLmMsdiAxLjI0IDIwMDYvMDUvMjAgMTU6MzY6MDggdG9tIEV4cCAkCisgKi8KKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworc3RhdGljIGludCBteV9iZyA9IENPTE9SX0JMQUNLOworCitzdGF0aWMgdm9pZAorY2xlYW51cCh2b2lkKQoreworICAgIGN1cnNfc2V0KDEpOworICAgIGVuZHdpbigpOworfQorCitzdGF0aWMgUkVUU0lHVFlQRQorb25zaWcoaW50IG4gR0NDX1VOVVNFRCkKK3sKKyAgICBjbGVhbnVwKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dpdCh2b2lkKQoreworICAgIGludCBjaDsKKyAgICBuYXBtcygxMjApOworICAgIGlmICgoY2ggPSBnZXRjaCgpKSAhPSBFUlIpIHsKKyNpZmRlZiBLRVlfUkVTSVpFCisJaWYgKGNoID09IEtFWV9SRVNJWkUpIHsKKwkgICAgZXJhc2UoKTsKKwl9IGVsc2UKKyNlbmRpZgorCWlmIChjaCA9PSAncScpIHsKKwkgICAgY2xlYW51cCgpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworCX0gZWxzZSBpZiAoY2ggPT0gJ3MnKSB7CisJICAgIG5vZGVsYXkoc3Rkc2NyLCBGQUxTRSk7CisJfSBlbHNlIGlmIChjaCA9PSAnICcpIHsKKwkgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2dldF9jb2xvdXIoY2h0eXBlICpib2xkKQoreworICAgIGludCBhdHRyOworICAgIGF0dHIgPSAocmFuZCgpICUgMTYpICsgMTsKKworICAgICpib2xkID0gQV9OT1JNQUw7CisgICAgaWYgKGF0dHIgPiA4KSB7CisJKmJvbGQgPSBBX0JPTEQ7CisJYXR0ciAmPSA3OworICAgIH0KKyAgICByZXR1cm4gKGF0dHIpOworfQorCitzdGF0aWMKK3ZvaWQKK2V4cGxvZGUoaW50IHJvdywgaW50IGNvbCkKK3sKKyAgICBjaHR5cGUgYm9sZDsKKyAgICBlcmFzZSgpOworICAgIG12cHJpbnR3KHJvdywgY29sLCAiLSIpOworICAgIHNob3dpdCgpOworCisgICAgaW5pdF9wYWlyKDEsIGdldF9jb2xvdXIoJmJvbGQpLCBteV9iZyk7CisgICAgYXR0cnNldChDT0xPUl9QQUlSKDEpIHwgYm9sZCk7CisgICAgbXZwcmludHcocm93IC0gMSwgY29sIC0gMSwgIiAtICIpOworICAgIG12cHJpbnR3KHJvdyArIDAsIGNvbCAtIDEsICItKy0iKTsKKyAgICBtdnByaW50dyhyb3cgKyAxLCBjb2wgLSAxLCAiIC0gIik7CisgICAgc2hvd2l0KCk7CisKKyAgICBpbml0X3BhaXIoMSwgZ2V0X2NvbG91cigmYm9sZCksIG15X2JnKTsKKyAgICBhdHRyc2V0KENPTE9SX1BBSVIoMSkgfCBib2xkKTsKKyAgICBtdnByaW50dyhyb3cgLSAyLCBjb2wgLSAyLCAiIC0tLSAiKTsKKyAgICBtdnByaW50dyhyb3cgLSAxLCBjb2wgLSAyLCAiLSsrKy0iKTsKKyAgICBtdnByaW50dyhyb3cgKyAwLCBjb2wgLSAyLCAiLSsjKy0iKTsKKyAgICBtdnByaW50dyhyb3cgKyAxLCBjb2wgLSAyLCAiLSsrKy0iKTsKKyAgICBtdnByaW50dyhyb3cgKyAyLCBjb2wgLSAyLCAiIC0tLSAiKTsKKyAgICBzaG93aXQoKTsKKworICAgIGluaXRfcGFpcigxLCBnZXRfY29sb3VyKCZib2xkKSwgbXlfYmcpOworICAgIGF0dHJzZXQoQ09MT1JfUEFJUigxKSB8IGJvbGQpOworICAgIG12cHJpbnR3KHJvdyAtIDIsIGNvbCAtIDIsICIgKysrICIpOworICAgIG12cHJpbnR3KHJvdyAtIDEsIGNvbCAtIDIsICIrKyMrKyIpOworICAgIG12cHJpbnR3KHJvdyArIDAsIGNvbCAtIDIsICIrIyAjKyIpOworICAgIG12cHJpbnR3KHJvdyArIDEsIGNvbCAtIDIsICIrKyMrKyIpOworICAgIG12cHJpbnR3KHJvdyArIDIsIGNvbCAtIDIsICIgKysrICIpOworICAgIHNob3dpdCgpOworCisgICAgaW5pdF9wYWlyKDEsIGdldF9jb2xvdXIoJmJvbGQpLCBteV9iZyk7CisgICAgYXR0cnNldChDT0xPUl9QQUlSKDEpIHwgYm9sZCk7CisgICAgbXZwcmludHcocm93IC0gMiwgY29sIC0gMiwgIiAgIyAgIik7CisgICAgbXZwcmludHcocm93IC0gMSwgY29sIC0gMiwgIiMjICMjIik7CisgICAgbXZwcmludHcocm93ICsgMCwgY29sIC0gMiwgIiMgICAjIik7CisgICAgbXZwcmludHcocm93ICsgMSwgY29sIC0gMiwgIiMjICMjIik7CisgICAgbXZwcmludHcocm93ICsgMiwgY29sIC0gMiwgIiAgIyAgIik7CisgICAgc2hvd2l0KCk7CisKKyAgICBpbml0X3BhaXIoMSwgZ2V0X2NvbG91cigmYm9sZCksIG15X2JnKTsKKyAgICBhdHRyc2V0KENPTE9SX1BBSVIoMSkgfCBib2xkKTsKKyAgICBtdnByaW50dyhyb3cgLSAyLCBjb2wgLSAyLCAiICMgIyAiKTsKKyAgICBtdnByaW50dyhyb3cgLSAxLCBjb2wgLSAyLCAiIyAgICMiKTsKKyAgICBtdnByaW50dyhyb3cgKyAwLCBjb2wgLSAyLCAiICAgICAiKTsKKyAgICBtdnByaW50dyhyb3cgKyAxLCBjb2wgLSAyLCAiIyAgICMiKTsKKyAgICBtdnByaW50dyhyb3cgKyAyLCBjb2wgLSAyLCAiICMgIyAiKTsKKyAgICBzaG93aXQoKTsKK30KKworaW50CittYWluKAorCWludCBhcmdjIEdDQ19VTlVTRUQsCisJY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBpbnQgc3RhcnQsIGVuZCwgcm93LCBkaWZmLCBmbGFnID0gMCwgZGlyZWN0aW9uOworICAgIHVuc2lnbmVkIHNlZWQ7CisKKyAgICBDQVRDSEFMTChvbnNpZyk7CisKKyAgICBpbml0c2NyKCk7CisgICAgbm9lY2hvKCk7CisgICAgY2JyZWFrKCk7CisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCXN0YXJ0X2NvbG9yKCk7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAodXNlX2RlZmF1bHRfY29sb3JzKCkgPT0gT0spCisJICAgIG15X2JnID0gLTE7CisjZW5kaWYKKyAgICB9CisgICAgY3Vyc19zZXQoMCk7CisKKyAgICBzZWVkID0gdGltZSgodGltZV90ICopIDApOworICAgIHNyYW5kKHNlZWQpOworICAgIGZvciAoOzspIHsKKwlkbyB7CisJICAgIHN0YXJ0ID0gcmFuZCgpICUgKENPTFMgLSAzKTsKKwkgICAgZW5kID0gcmFuZCgpICUgKENPTFMgLSAzKTsKKwkgICAgc3RhcnQgPSAoc3RhcnQgPCAyKSA/IDIgOiBzdGFydDsKKwkgICAgZW5kID0gKGVuZCA8IDIpID8gMiA6IGVuZDsKKwkgICAgZGlyZWN0aW9uID0gKHN0YXJ0ID4gZW5kKSA/IC0xIDogMTsKKwkgICAgZGlmZiA9IGFicyhzdGFydCAtIGVuZCk7CisJfSB3aGlsZSAoZGlmZiA8IDIgfHwgZGlmZiA+PSBMSU5FUyAtIDIpOworCWF0dHJzZXQoQV9OT1JNQUwpOworCWZvciAocm93ID0gMDsgcm93IDwgZGlmZjsgcm93KyspIHsKKwkgICAgbXZwcmludHcoTElORVMgLSByb3csIHN0YXJ0ICsgKHJvdyAqIGRpcmVjdGlvbiksCisJCSAgICAgKGRpcmVjdGlvbiA8IDApID8gIlxcIiA6ICIvIik7CisJICAgIGlmIChmbGFnKyspIHsKKwkJc2hvd2l0KCk7CisJCWVyYXNlKCk7CisJCWZsYWcgPSAwOworCSAgICB9CisJfQorCWlmIChmbGFnKyspIHsKKwkgICAgc2hvd2l0KCk7CisJICAgIGZsYWcgPSAwOworCX0KKwlzZWVkID0gdGltZSgodGltZV90ICopIDApOworCXNyYW5kKHNlZWQpOworCWV4cGxvZGUoTElORVMgLSByb3csIHN0YXJ0ICsgKGRpZmYgKiBkaXJlY3Rpb24pKTsKKwllcmFzZSgpOworCXNob3dpdCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvZmlyc3RsYXN0LmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2ZpcnN0bGFzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Njc2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2ZpcnN0bGFzdC5jCkBAIC0wLDAgKzEsMTE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRoaXMgdGVzdCB3YXMgd3JpdHRlbiBieSBBbGV4YW5kZXIgVi4gTHVreWFub3YgdG8gZGVtb25zdHJhdGUgZGlmZmVyZW5jZQorICogYmV0d2VlbiBuY3Vyc2VzIDQuMSBhbmQgU1ZSNCBjdXJzZXMKKyAqCisgKiAkSWQ6IGZpcnN0bGFzdC5jLHYgMS41IDIwMDYvMDQvMDEgMTk6MDM6MTggdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCitzdGF0aWMgdm9pZAorZmlsbChXSU5ET1cgKncsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBjb25zdCBjaGFyICpzOworICAgIGZvciAoOzspIHsKKwlmb3IgKHMgPSBzdHI7ICpzOyBzKyspIHsKKwkgICAgaWYgKHdhZGRjaCh3LCBVQ2hhcigqcykpID09IEVSUikgeworCQl3bW92ZSh3LCAwLCAwKTsKKwkJcmV0dXJuOworCSAgICB9CisJfQorICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsCisgICAgIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgV0lORE9XICpsYXJnZSwgKnNtYWxsOworICAgIGluaXRzY3IoKTsKKyAgICBub2VjaG8oKTsKKworICAgIGxhcmdlID0gbmV3d2luKDIwLCA2MCwgMiwgMTApOworICAgIHNtYWxsID0gbmV3d2luKDEwLCAzMCwgNywgMjUpOworCisgICAgLyogdGVzdCAxIC0gYWRkY2ggKi8KKyAgICBmaWxsKGxhcmdlLCAiTGFyZ2VXaW5kb3ciKTsKKworICAgIHJlZnJlc2goKTsKKyAgICB3cmVmcmVzaChsYXJnZSk7CisgICAgd3JlZnJlc2goc21hbGwpOworCisgICAgbXZ3YWRkc3RyKHNtYWxsLCA1LCA1LCAiICAgVGVzdCA8cGxhY2UgdG8gY2hhbmdlPiBTdHJpbmcgICAiKTsKKyAgICB3cmVmcmVzaChzbWFsbCk7CisgICAgZ2V0Y2goKTsKKworICAgIHRvdWNod2luKGxhcmdlKTsKKyAgICB3cmVmcmVzaChsYXJnZSk7CisKKyAgICBtdndhZGRzdHIoc21hbGwsIDUsIDUsICIgICBUZXN0IDwqKioqKioqKioqKioqKio+IFN0cmluZyAgICIpOworICAgIHdyZWZyZXNoKHNtYWxsKTsKKworICAgIC8qIERJRkZFUkVOQ0UhICovCisgICAgZ2V0Y2goKTsKKworICAgIC8qIHRlc3QgMjogZXJhc2UgKi8KKyAgICBlcmFzZSgpOworICAgIHJlZnJlc2goKTsKKyAgICBnZXRjaCgpOworCisgICAgLyogdGVzdCAzOiBjbHJ0b2VvbCAqLworICAgIHdlcmFzZShzbWFsbCk7CisgICAgd3JlZnJlc2goc21hbGwpOworICAgIHRvdWNod2luKGxhcmdlKTsKKyAgICB3cmVmcmVzaChsYXJnZSk7CisgICAgd21vdmUoc21hbGwsIDUsIDApOworICAgIHdhZGRzdHIoc21hbGwsICIgY2xydG9lb2w+Iik7CisgICAgd2NscnRvZW9sKHNtYWxsKTsKKyAgICB3cmVmcmVzaChzbWFsbCk7CisKKyAgICAvKiBESUZGRVJFTkNFISAqLyA7CisgICAgZ2V0Y2goKTsKKworICAgIC8qIHRlc3QgNDogY2xydG9ib3QgKi8KKyAgICB3ZXJhc2Uoc21hbGwpOworICAgIHdyZWZyZXNoKHNtYWxsKTsKKyAgICB0b3VjaHdpbihsYXJnZSk7CisgICAgd3JlZnJlc2gobGFyZ2UpOworICAgIHdtb3ZlKHNtYWxsLCA1LCAzKTsKKyAgICB3YWRkc3RyKHNtYWxsLCAiIGNscnRvYm90PiIpOworICAgIHdjbHJ0b2JvdChzbWFsbCk7CisgICAgd3JlZnJlc2goc21hbGwpOworCisgICAgLyogRElGRkVSRU5DRSEgKi8KKyAgICBnZXRjaCgpOworCisgICAgZW5kd2luKCk7CisKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9mb2xka2V5cy5jIGIvbmN1cnNlcy01LjcvdGVzdC9mb2xka2V5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGYxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2ZvbGRrZXlzLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBdXRob3I6IFRob21hcyBFLiBEaWNrZXksIDIwMDYKKyAqCisgKiAkSWQ6IGZvbGRrZXlzLmMsdiAxLjMgMjAwNi8xMi8wOSAxNjo1NDowNyB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSBhIG1ldGhvZCBmb3IgYWx0ZXJpbmcga2V5IGRlZmluaXRpb25zIGF0IHJ1bnRpbWUuCisgKgorICogVGhpcyBwcm9ncmFtIHJlYWRzIHRoZSBrZXkgZGVmaW5pdGlvbnMsIG1lcmdpbmcgdGhvc2Ugd2hpY2ggaGF2ZSB4dGVybS1zdHlsZQorICogbW9kaWZpZXJzIGludG8gdGhlaXIgZXF1aXZhbGVudHMgd2hpY2ggaGF2ZSBubyBtb2RpZmllcnMuICBJdCBkb2VzIHRoaXMKKyAqIG1lcmdpbmcgb25seSBmb3IgdGhlIGtleXMgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIHRlcm1pbmFsIGRlc2NyaXB0aW9uLgorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBOQ1VSU0VTX0VYVF9GVU5DUworCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgTVlfTE9HRklMRSAiZGVtb19mb2xka2V5cy5sb2ciCisjZGVmaW5lIE1ZX0tFWVMgKEtFWV9NQVggKyAxKQorCisvKgorICogTG9nIHRoZSBtb3N0IHJlY2VudGx5LXdyaXR0ZW4gbGluZSB0byBvdXIgbG9nZmlsZQorICovCitzdGF0aWMgdm9pZAorbG9nX2xhc3RfbGluZShXSU5ET1cgKndpbikKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgeSwgeCwgbjsKKyAgICBjaGFyIHRlbXBbMjU2XTsKKworICAgIGlmICgoZnAgPSBmb3BlbihNWV9MT0dGSUxFLCAiYSIpKSAhPSAwKSB7CisJaW50IG5lZWQgPSBzaXplb2YodGVtcCkgLSAxOworCWlmIChuZWVkID4gQ09MUykKKwkgICAgbmVlZCA9IENPTFM7CisJZ2V0eXgod2luLCB5LCB4KTsKKwl3bW92ZSh3aW4sIHkgLSAxLCAwKTsKKwluID0gd2lubnN0cih3aW4sIHRlbXAsIG5lZWQpOworCXdoaWxlIChuLS0gPiAwKSB7CisJICAgIGlmIChpc3NwYWNlKFVDaGFyKHRlbXBbbl0pKSkKKwkJdGVtcFtuXSA9ICdcMCc7CisJICAgIGVsc2UKKwkJYnJlYWs7CisJfQorCXdtb3ZlKHdpbiwgeSwgeCk7CisJZnByaW50ZihmcCwgIiVzXG4iLCB0ZW1wKTsKKwlmY2xvc2UoZnApOworICAgIH0KK30KKworLyoKKyAqIG5jdXJzZXMgaGFzIG5vIEFQSSBmb3IgdGVsbGluZyB3aGF0IHRoZSBhY3R1YWwgbGFzdCBrZXktY29kZSBpcy4gIFRoYXQgaXMKKyAqIGEgc2VjcmV0IGJlY2F1c2UgdGhlIGNvZGVzIHBhc3QgS0VZX01BWCBhcmUgY29tcHV0ZWQgYXQgcnVuLXRpbWUgYW5kIG1heQorICogZGlmZmVyIGRlcGVuZGluZyBvbiB0aGUgcHJldmlvdXMgY2FsbHMgdG8gbmV3dGVybSgpLCBldGMuICBJdCBpcyB1bmxpa2VseQorICogdGhhdCBvbmUgY291bGQgaGF2ZSBtb3JlIHRoYW4gYSB0aG91c2FuZCBrZXkgZGVmaW5pdGlvbnMuLi4KKyAqLworI2RlZmluZSBNQVhfS0VZUyAyMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGNoYXIgKnZhbHVlOworICAgIGludCBjb2RlOworICAgIGludCBzdGF0ZTsKK30gS2V5SW5mbzsKKworc3RhdGljIHZvaWQKK2RlbW9fZm9sZGtleXModm9pZCkKK3sKKyAgICBLZXlJbmZvIGluZm9bTUFYX0tFWVNdOworICAgIGludCBpbmZvX2xlbiA9IDA7CisgICAgaW50IG1lcmdlZCA9IDA7CisgICAgaW50IGNvZGU7CisgICAgaW50IGosIGs7CisKKyAgICAvKgorICAgICAqIFRlbGwgbmN1cnNlcyB0aGF0IHdlIHdhbnQgdG8gdXNlIGZ1bmN0aW9uIGtleXMuICBUaGF0IHdpbGwgbWFrZSBpdCBhZGQKKyAgICAgKiBhbnkgdXNlci1kZWZpbmVkIGtleXMgdGhhdCBhcHBlYXIgaW4gdGhlIHRlcm1pbmZvLgorICAgICAqLworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCisgICAgLyoKKyAgICAgKiBMaXN0IHRoZSBwcmVkZWZpbmVkIGtleXMgdXNpbmcgdGhlIHN0cm5hbWVzW10gYXJyYXkuCisgICAgICovCisgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IFNUUkNPVU5UOyArK2NvZGUpIHsKKwlOQ1VSU0VTX0NPTlNUIGNoYXIgKm5hbWUgPSBzdHJuYW1lc1tjb2RlXTsKKwlOQ1VSU0VTX0NPTlNUIGNoYXIgKnZhbHVlID0gdGlnZXRzdHIobmFtZSk7CisJaWYgKHZhbHVlICE9IDAgJiYgdmFsdWUgIT0gKE5DVVJTRVNfQ09OU1QgY2hhciAqKSAtMSkgeworCSAgICBpbmZvW2luZm9fbGVuXS5uYW1lID0gc3RybmFtZXNbY29kZV07CisJICAgIGluZm9baW5mb19sZW5dLmNvZGUgPSBrZXlfZGVmaW5lZCh2YWx1ZSk7CisJICAgIGluZm9baW5mb19sZW5dLnZhbHVlID0gdmFsdWU7CisJICAgIGluZm9baW5mb19sZW5dLnN0YXRlID0gMDsKKwkgICAgaWYgKGluZm9baW5mb19sZW5dLmNvZGUgPiAwKQorCQkrK2luZm9fbGVuOworCX0KKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlIGNhbiBnZXQgdGhlIG5hbWVzIGZvciB1c2VyLWRlZmluZWQga2V5cyBmcm9tIGtleW5hbWUoKS4gIEl0IHJldHVybnMKKyAgICAgKiBhIG5hbWUgbGlrZSBLRVlfZm9vIGZvciB0aGUgcHJlZGVmaW5lZCBrZXlzLCB3aGljaCB0aWdldHN0cigpIGRvZXMgbm90CisgICAgICogdW5kZXJzdGFuZC4KKyAgICAgKi8KKyAgICBmb3IgKGNvZGUgPSBLRVlfTUFYOyBjb2RlIDwgTUFYX0tFWVM7ICsrY29kZSkgeworCU5DVVJTRVNfQ09OU1QgY2hhciAqbmFtZSA9IGtleW5hbWUoY29kZSk7CisJaWYgKG5hbWUgIT0gMCkgeworCSAgICBpbmZvW2luZm9fbGVuXS5uYW1lID0gbmFtZTsKKwkgICAgaW5mb1tpbmZvX2xlbl0uY29kZSA9IGNvZGU7CisJICAgIGluZm9baW5mb19sZW5dLnZhbHVlID0gdGlnZXRzdHIobmFtZSk7CisJICAgIGluZm9baW5mb19sZW5dLnN0YXRlID0gMDsKKwkgICAgKytpbmZvX2xlbjsKKwl9CisgICAgfQorICAgIHByaW50dygiSW5pdGlhbGx5ICVkIGtleSBkZWZpbml0aW9uc1xuIiwgaW5mb19sZW4pOworCisgICAgLyoKKyAgICAgKiBMb29rIGZvciBrZXlzIHRoYXQgaGF2ZSB4dGVybS1zdHlsZSBtb2RpZmllcnMuCisgICAgICovCisgICAgZm9yIChqID0gMDsgaiA8IGluZm9fbGVuOyArK2opIHsKKwlpbnQgZmlyc3QsIHNlY29uZDsKKwljaGFyIGZpbmFsWzJdOworCWNoYXIgKnZhbHVlOworCWlmIChpbmZvW2pdLnN0YXRlID09IDAKKwkgICAgJiYgc3NjYW5mKGluZm9bal0udmFsdWUsCisJCSAgICAgICJcMDMzWyVkOyVkJWMiLAorCQkgICAgICAmZmlyc3QsCisJCSAgICAgICZzZWNvbmQsCisJCSAgICAgIGZpbmFsKSA9PSAzCisJICAgICYmICpmaW5hbCAhPSAnOycKKwkgICAgJiYgKHZhbHVlID0gc3RyZHVwKGluZm9bal0udmFsdWUpKSAhPSAwKSB7CisJICAgIHNwcmludGYodmFsdWUsICJcMDMzWyVkJWMiLCBmaXJzdCwgKmZpbmFsKTsKKwkgICAgZm9yIChrID0gMDsgayA8IGluZm9fbGVuOyArK2spIHsKKwkJaWYgKGluZm9ba10uc3RhdGUgPT0gMAorCQkgICAgJiYgIXN0cmNtcChpbmZvW2tdLnZhbHVlLCB2YWx1ZSkpIHsKKwkJICAgIGluZm9bal0uc3RhdGUgPSAxOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICBpZiAoaW5mb1tqXS5zdGF0ZSA9PSAwKSB7CisJCXNwcmludGYodmFsdWUsICJcMDMzTyVjIiwgKmZpbmFsKTsKKwkJZm9yIChrID0gMDsgayA8IGluZm9fbGVuOyArK2spIHsKKwkJICAgIGlmIChpbmZvW2tdLnN0YXRlID09IDAKKwkJCSYmICFzdHJjbXAoaW5mb1trXS52YWx1ZSwgdmFsdWUpKSB7CisJCQlpbmZvW2pdLnN0YXRlID0gMTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgKGluZm9bal0uc3RhdGUgPT0gMSkgeworCQlpZiAoKGRlZmluZV9rZXkoaW5mb1tqXS52YWx1ZSwgaW5mb1trXS5jb2RlKSkgIT0gRVJSKSB7CisJCSAgICBwcmludHcoIm1hcCAlcyB0byAlc1xuIiwgaW5mb1tqXS52YWx1ZSwgaW5mb1trXS52YWx1ZSk7CisJCSAgICBrZXlvayhpbmZvW2pdLmNvZGUsIEZBTFNFKTsKKwkJICAgICsrbWVyZ2VkOworCQl9IGVsc2UgeworCQkgICAgcHJpbnR3KCI/IGNhbm5vdCBkZWZpbmVfa2V5ICVkOiVzXG4iLCBqLCBpbmZvW2pdLnZhbHVlKTsKKwkJfQorCSAgICB9IGVsc2UgeworCQlwcmludHcoIj8gY2Fubm90IG1lcmdlICVkOiVzXG4iLCBqLCBpbmZvW2pdLnZhbHVlKTsKKwkgICAgfQorCSAgICBmcmVlKHZhbHVlKTsKKwl9CisgICAgfQorICAgIHByaW50dygiTWVyZ2VkIHRvICVkIGtleSBkZWZpbml0aW9uc1xuIiwgaW5mb19sZW4gLSBtZXJnZWQpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBpbnQgY2g7CisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyAgICBpbnQgc2VjcywgbXNlY3M7CisgICAgc3RydWN0IHRpbWV2YWwgY3VycmVudCwgcHJldmlvdXM7CisjZW5kaWYKKworICAgIHVubGluayhNWV9MT0dGSUxFKTsKKworICAgIG5ld3Rlcm0oMCwgc3Rkb3V0LCBzdGRpbik7CisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHNjcm9sbG9rKHN0ZHNjciwgVFJVRSk7CisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgbW92ZSgwLCAwKTsKKworICAgIGRlbW9fZm9sZGtleXMoKTsKKworI2lmIEhBVkVfR0VUVElNRU9GREFZCisgICAgZ2V0dGltZW9mZGF5KCZwcmV2aW91cywgMCk7CisjZW5kaWYKKworICAgIHdoaWxlICgoY2ggPSBnZXRjaCgpKSAhPSBFUlIpIHsKKwlib29sIGVzY2FwZWQgPSAoY2ggPj0gTVlfS0VZUyk7CisJY29uc3QgY2hhciAqbmFtZSA9IGtleW5hbWUoZXNjYXBlZCA/IChjaCAtIE1ZX0tFWVMpIDogY2gpOworCisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKwlnZXR0aW1lb2ZkYXkoJmN1cnJlbnQsIDApOworCXNlY3MgPSBjdXJyZW50LnR2X3NlYyAtIHByZXZpb3VzLnR2X3NlYzsKKwltc2VjcyA9IChjdXJyZW50LnR2X3VzZWMgLSBwcmV2aW91cy50dl91c2VjKSAvIDEwMDA7CisJaWYgKG1zZWNzIDwgMCkgeworCSAgICBtc2VjcyArPSAxMDAwOworCSAgICAtLXNlY3M7CisJfQorCWlmIChtc2VjcyA+PSAxMDAwKSB7CisJICAgIHNlY3MgKz0gbXNlY3MgLyAxMDAwOworCSAgICBtc2VjcyAlPSAxMDAwOworCX0KKwlwcmludHcoIiU2ZC4lMDNkICIsIHNlY3MsIG1zZWNzKTsKKwlwcmV2aW91cyA9IGN1cnJlbnQ7CisjZW5kaWYKKwlwcmludHcoIktleWNvZGUgJWQsIG5hbWUgJXMlc1xuIiwKKwkgICAgICAgY2gsCisJICAgICAgIGVzY2FwZWQgPyAiRVNDLSIgOiAiIiwKKwkgICAgICAgbmFtZSAhPSAwID8gbmFtZSA6ICI8bnVsbD4iKTsKKwlsb2dfbGFzdF9saW5lKHN0ZHNjcik7CisJY2xydG9lb2woKTsKKwlpZiAoY2ggPT0gJ3EnKQorCSAgICBicmVhazsKKyAgICB9CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgbmN1cnNlcyBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2dkYy42IGIvbmN1cnNlcy01LjcvdGVzdC9nZGMuNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDNhNGYxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9nZGMuNgpAQCAtMCwwICsxLDY0IEBACisuXCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKy5cIiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorLlwiICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisuXCIgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKy5cIiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorLlwiIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisuXCIgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisuXCIgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKy5cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisuXCIgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKy5cIiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisuXCIgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKy5cIiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorLlwiIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKy5cIiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorLlwiIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisuXCIgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKy5cIiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorLlwiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5cIiAkSWQ6IGdkYy42LHYgMS4zIDIwMDYvMDQvMjIgMjM6MDI6MTUgdG9tIEV4cCAkCisuVEggR0RDIDYKKy5TSCBOQU1FCitnZGMgXC0gZ3JhbmQgZGlnaXRhbCBjbG9jayAoY3Vyc2VzKQorLlNIIFNZTk9QU0lTCisuQiBnZGMKK1stbl0gWworWy1zXSBbCisuSSBuCitdCisuU0ggREVTQ1JJUFRJT04KKy5JIEdkYworcnVucyBhIGRpZ2l0YWwgY2xvY2sgbWFkZSBvZiByZXZlcnNlLXZpZGVvIGJsYW5rcyBvbiBhIHRlcm1pbmFsIHNjcmVlbi4KK0lmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBjb2xvciwgdGhlIGNsb2NrIGlzIGRyYXduIGluIHJlZC4KK1lvdSBjYW4gbWFrZSB0aGUgY2xvY2sgc3RvcCwgcGF1c2Ugb3IgcmVzdW1lIGJ5IHByZXNzaW5nIGEgYGBxJycsCitgYHMnJyBvciBzcGFjZSwgcmVzcGVjdGl2ZWx5LgorLlNIIE9QVElPTlMKKy5UUAorLkIgLW4KK3JlZGlyZWN0cyBpbnB1dCB0byAvZGV2L251bGwsIG1ha2luZyBpdCBpZ25vcmUgdGhlIHN0b3AvcGF1c2UgY29tbWFuZHMuCitZb3UgY2FuIHN0aWxsIHN0b3AgaXQgYnkgcHJlc3NpbmcgdGhlIGludGVycnVwdCBrZXkuCisuVFAKKy5CIC1zCittYWtlcyBkaWdpdHMgc2Nyb2xsIGFzIHRoZXkgY2hhbmdlLgorV2hlbiBydW5uaW5nIG9uIGEgZmFzdCBkaXNwbGF5LCB0aGUgcHJvZ3JhbSBicmVha3MgdXAgdGhlIHNjcm9sbGluZyBpbnRvCitzdWJzZWNvbmQgcmVwYWludHMsIG1ha2luZyB0aGUgb3BlcmF0aW9uIGFwcGVhciBzbW9vdGguCisuUFAKK1dpdGggYW4gb3B0aW9uYWwgbnVtZXJpYyBhcmd1bWVudAorLkkgbnVtCitpdCBzdG9wcyBhZnRlcgorLkkgbnVtCitzZWNvbmRzLgorTm9ybWFsbHkgaXQgcnVucyAiZm9yZXZlciIgKGNvdW50aW5nIGRvd24gZnJvbSAyIGJpbGxpb24gc2Vjb25kcykuCisuU0ggQVVUSE9SCitBbW9zIFNoYXBpciwgbW9kaWZpZWQgZm9yIGN1cnNlcyBieSBKb2huIEx1cGllbi4KK0ltcHJvdmVtZW50cyBmb3IgbmN1cnNlcyBieSBUaG9tYXMgRGlja2V5LgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9nZGMuYyBiL25jdXJzZXMtNS43L3Rlc3QvZ2RjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMjBmZQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvZ2RjLmMKQEAgLTAsMCArMSwzNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogR3JhbmQgZGlnaXRhbCBjbG9jayBmb3IgY3Vyc2VzIGNvbXBhdGlibGUgdGVybWluYWxzCisgKiBVc2FnZTogZ2RjIFstc10gW25dICAgLS0gcnVuIGZvciBuIHNlY29uZHMgKGRlZmF1bHQgaW5maW5pdHkpCisgKiBGbGFnczogLXM6IHNjcm9sbAorICoKKyAqIG1vZGlmaWVkIDEwLTE4LTg5IGZvciBjdXJzZXMgKGpybCkKKyAqIDEwLTE4LTg5IGFkZGVkIHNpZ25hbCBoYW5kbGluZworICoKKyAqICRJZDogZ2RjLmMsdiAxLjMxIDIwMDgvMDgvMDMgMjM6NTg6NDIgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIFlCQVNFCTEwCisjZGVmaW5lIFhCQVNFCTEwCisjZGVmaW5lIFhMRU5HVEgJNTQKKyNkZWZpbmUgWURFUFRICTUKKworI2RlZmluZSBQQUlSX0RJR0lUUyAxCisjZGVmaW5lIFBBSVJfT1RIRVJTIDIKKyNkZWZpbmUgUEFJUl9GUkFNRVMgMworCitzdGF0aWMgc2hvcnQgZGlzcFsxMV0gPQoreworICAgIDA3NTU1NywgMDExMTExLCAwNzE3NDcsIDA3MTcxNywgMDU1NzExLAorICAgIDA3NDcxNywgMDc0NzU3LCAwNzExMTEsIDA3NTc1NywgMDc1NzE3LCAwMDIwMjAKK307CitzdGF0aWMgbG9uZyBvbGRlcls2XSwgbmV4dFs2XSwgbmV3ZXJbNl0sIG1hc2s7CisKK3N0YXRpYyBpbnQgc2lndGVybWVkID0gMDsKK3N0YXRpYyBib29sIHJlZGlyZWN0ZWQgPSBGQUxTRTsKK3N0YXRpYyBib29sIGhhc2NvbG9yID0gRkFMU0U7CisKK3N0YXRpYyBSRVRTSUdUWVBFCitzaWdobmRsKGludCBzaWdubykKK3sKKyAgICBzaWduYWwoc2lnbm8sIHNpZ2huZGwpOworICAgIHNpZ3Rlcm1lZCA9IHNpZ25vOworICAgIGlmIChyZWRpcmVjdGVkKSB7CisJZW5kd2luKCk7CisJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitkcmF3Ym94KGJvb2wgc2Nyb2xsaW5nKQoreworICAgIGNodHlwZSBib3R0b21bWExFTkdUSCArIDFdOworICAgIGludCBuOworCisgICAgaWYgKGhhc2NvbG9yKQorCWF0dHJzZXQoQ09MT1JfUEFJUihQQUlSX0ZSQU1FUykpOworCisgICAgbXZhZGRjaChZQkFTRSAtIDEsIFhCQVNFIC0gMSwgQUNTX1VMQ09STkVSKTsKKyAgICBobGluZShBQ1NfSExJTkUsIFhMRU5HVEgpOworICAgIG12YWRkY2goWUJBU0UgLSAxLCBYQkFTRSArIFhMRU5HVEgsIEFDU19VUkNPUk5FUik7CisKKyAgICBtdmFkZGNoKFlCQVNFICsgWURFUFRILCBYQkFTRSAtIDEsIEFDU19MTENPUk5FUik7CisgICAgaWYgKChtdmluY2huc3RyKFlCQVNFICsgWURFUFRILCBYQkFTRSwgYm90dG9tLCBYTEVOR1RIKSkgIT0gRVJSKSB7CisJZm9yIChuID0gMDsgbiA8IFhMRU5HVEg7IG4rKykgeworCSAgICBpZiAoIXNjcm9sbGluZykKKwkJYm90dG9tW25dICY9IH5BX0NPTE9SOworCSAgICBib3R0b21bbl0gPSBBQ1NfSExJTkUgfCAoYm90dG9tW25dICYgKEFfQVRUUklCVVRFUyB8IEFfQ09MT1IpKTsKKwl9CisJbXZhZGRjaG5zdHIoWUJBU0UgKyBZREVQVEgsIFhCQVNFLCBib3R0b20sIFhMRU5HVEgpOworICAgIH0KKyAgICBtdmFkZGNoKFlCQVNFICsgWURFUFRILCBYQkFTRSArIFhMRU5HVEgsIEFDU19MUkNPUk5FUik7CisKKyAgICBtb3ZlKFlCQVNFLCBYQkFTRSAtIDEpOworICAgIHZsaW5lKEFDU19WTElORSwgWURFUFRIKTsKKworICAgIG1vdmUoWUJBU0UsIFhCQVNFICsgWExFTkdUSCk7CisgICAgdmxpbmUoQUNTX1ZMSU5FLCBZREVQVEgpOworCisgICAgaWYgKGhhc2NvbG9yKQorCWF0dHJzZXQoQ09MT1JfUEFJUihQQUlSX09USEVSUykpOworfQorCitzdGF0aWMgdm9pZAorc3RhbmR0KGludCBvbikKK3sKKyAgICBpZiAob24pIHsKKwlpZiAoaGFzY29sb3IpIHsKKwkgICAgYXR0cm9uKENPTE9SX1BBSVIoUEFJUl9ESUdJVFMpKTsKKwl9IGVsc2UgeworCSAgICBhdHRyb24oQV9TVEFORE9VVCk7CisJfQorICAgIH0gZWxzZSB7CisJaWYgKGhhc2NvbG9yKSB7CisJICAgIGF0dHJvbihDT0xPUl9QQUlSKFBBSVJfT1RIRVJTKSk7CisJfSBlbHNlIHsKKwkgICAgYXR0cm9mZihBX1NUQU5ET1VUKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorc2V0KGludCB0LCBpbnQgbikKK3sKKyAgICBpbnQgaSwgbTsKKworICAgIG0gPSA3IDw8IG47CisgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCW5leHRbaV0gfD0gKChkaXNwW3RdID4+ICgoNCAtIGkpICogMykpICYgMDcpIDw8IG47CisJbWFzayB8PSAobmV4dFtpXSBeIG9sZGVyW2ldKSAmIG07CisgICAgfQorICAgIGlmIChtYXNrICYgbSkKKwltYXNrIHw9IG07Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICptc2dbXSA9CisgICAgeworCSJVc2FnZTogZ2RjIFtvcHRpb25zXSBbY291bnRdIgorCSwiIgorCSwiT3B0aW9uczoiCisJLCIgIC1uICByZWRpcmVjdCBpbnB1dCB0byAvZGV2L251bGwiCisJLCIgIC1zICBzY3JvbGwgZWFjaCBudW1iZXIgaW50byBwbGFjZSwgcmF0aGVyIHRoYW4gZmxpcHBpbmciCisJLCIiCisJLCJJZiB5b3Ugc3BlY2lmeSBhIGNvdW50LCBnZGMgcnVucyBmb3IgdGhhdCBudW1iZXIgb2Ygc2Vjb25kcyIKKyAgICB9OworICAgIHVuc2lnbmVkIGo7CisgICAgZm9yIChqID0gMDsgaiA8IFNJWkVPRihtc2cpOyBqKyspCisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnW2pdKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICB0aW1lX3Qgbm93OworICAgIHN0cnVjdCB0bSAqdG07CisgICAgbG9uZyB0LCBhOworICAgIGludCBpLCBqLCBzLCBrOworICAgIGludCBjb3VudCA9IDA7CisgICAgRklMRSAqb2ZwID0gc3Rkb3V0OworICAgIEZJTEUgKmlmcCA9IHN0ZGluOworICAgIGJvb2wgc2Nyb2wgPSBGQUxTRTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIENBVENIQUxMKHNpZ2huZGwpOworCisgICAgd2hpbGUgKChrID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJzbiIpKSAhPSAtMSkgeworCXN3aXRjaCAoaykgeworCWNhc2UgJ3MnOgorCSAgICBzY3JvbCA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ24nOgorCSAgICBpZnAgPSBmb3BlbigiL2Rldi9udWxsIiwgInIiKTsKKwkgICAgcmVkaXJlY3RlZCA9IFRSVUU7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJfQorICAgIH0KKyAgICBpZiAob3B0aW5kIDwgYXJnYykgeworCWNvdW50ID0gYXRvaShhcmd2W29wdGluZCsrXSk7CisJYXNzZXJ0KGNvdW50ID49IDApOworICAgIH0KKyAgICBpZiAob3B0aW5kIDwgYXJnYykKKwl1c2FnZSgpOworCisgICAgaWYgKHJlZGlyZWN0ZWQpIHsKKwljaGFyICpuYW1lID0gZ2V0ZW52KCJURVJNIik7CisJaWYgKG5hbWUgPT0gMAorCSAgICB8fCBuZXd0ZXJtKG5hbWUsIG9mcCwgaWZwKSA9PSAwKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAiY2Fubm90IG9wZW4gdGVybWluYWxcbiIpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKworICAgIH0gZWxzZSB7CisJaW5pdHNjcigpOworICAgIH0KKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKyAgICBub2RlbGF5KHN0ZHNjciwgMSk7CisgICAgY3Vyc19zZXQoMCk7CisKKyAgICBoYXNjb2xvciA9IGhhc19jb2xvcnMoKTsKKworICAgIGlmIChoYXNjb2xvcikgeworCWludCBiZyA9IENPTE9SX0JMQUNLOworCXN0YXJ0X2NvbG9yKCk7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAodXNlX2RlZmF1bHRfY29sb3JzKCkgPT0gT0spCisJICAgIGJnID0gLTE7CisjZW5kaWYKKwlpbml0X3BhaXIoUEFJUl9ESUdJVFMsIENPTE9SX0JMQUNLLCBDT0xPUl9SRUQpOworCWluaXRfcGFpcihQQUlSX09USEVSUywgQ09MT1JfUkVELCBiZyk7CisJaW5pdF9wYWlyKFBBSVJfRlJBTUVTLCBDT0xPUl9XSElURSwgYmcpOworCWF0dHJzZXQoQ09MT1JfUEFJUihQQUlSX09USEVSUykpOworICAgIH0KKworICByZXN0YXJ0OgorICAgIGZvciAoaiA9IDA7IGogPCA1OyBqKyspCisJb2xkZXJbal0gPSBuZXdlcltqXSA9IG5leHRbal0gPSAwOworCisgICAgY2xlYXIoKTsKKyAgICBkcmF3Ym94KEZBTFNFKTsKKworICAgIGRvIHsKKwljaGFyIGJ1ZlszMF07CisKKwl0aW1lKCZub3cpOworCXRtID0gbG9jYWx0aW1lKCZub3cpOworCisJbWFzayA9IDA7CisJc2V0KHRtLT50bV9zZWMgJSAxMCwgMCk7CisJc2V0KHRtLT50bV9zZWMgLyAxMCwgNCk7CisJc2V0KHRtLT50bV9taW4gJSAxMCwgMTApOworCXNldCh0bS0+dG1fbWluIC8gMTAsIDE0KTsKKwlzZXQodG0tPnRtX2hvdXIgJSAxMCwgMjApOworCXNldCh0bS0+dG1faG91ciAvIDEwLCAyNCk7CisJc2V0KDEwLCA3KTsKKwlzZXQoMTAsIDE3KTsKKworCWZvciAoayA9IDA7IGsgPCA2OyBrKyspIHsKKwkgICAgaWYgKHNjcm9sKSB7CisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCSAgICBuZXdlcltpXSA9IChuZXdlcltpXSAmIH5tYXNrKSB8IChuZXdlcltpICsgMV0gJiBtYXNrKTsKKwkJbmV3ZXJbNV0gPSAobmV3ZXJbNV0gJiB+bWFzaykgfCAobmV4dFtrXSAmIG1hc2spOworCSAgICB9IGVsc2UKKwkJbmV3ZXJba10gPSAobmV3ZXJba10gJiB+bWFzaykgfCAobmV4dFtrXSAmIG1hc2spOworCSAgICBuZXh0W2tdID0gMDsKKwkgICAgZm9yIChzID0gMTsgcyA+PSAwOyBzLS0pIHsKKwkJc3RhbmR0KHMpOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCSAgICBpZiAoKGEgPSAobmV3ZXJbaV0gXiBvbGRlcltpXSkgJiAocyA/IG5ld2VyIDogb2xkZXIpW2ldKQorCQkJIT0gMCkgeworCQkJZm9yIChqID0gMCwgdCA9IDEgPDwgMjY7IHQ7IHQgPj49IDEsIGorKykgeworCQkJICAgIGlmIChhICYgdCkgeworCQkJCWlmICghKGEgJiAodCA8PCAxKSkpIHsKKwkJCQkgICAgbW92ZShZQkFTRSArIGksIFhCQVNFICsgMiAqIGopOworCQkJCX0KKwkJCQlhZGRzdHIoIiAgIik7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQkgICAgaWYgKCFzKSB7CisJCQlvbGRlcltpXSA9IG5ld2VyW2ldOworCQkgICAgfQorCQl9CisJCWlmICghcykgeworCQkgICAgaWYgKHNjcm9sKQorCQkJZHJhd2JveChUUlVFKTsKKwkJICAgIHJlZnJlc2goKTsKKwkJICAgIC8qCisJCSAgICAgKiBJZiB3ZSdyZSBzY3JvbGxpbmcsIHNwYWNlIG91dCB0aGUgcmVmcmVzaGVzIHRvIGZha2UKKwkJICAgICAqIG1vdmVtZW50LiAgVGhhdCdzIDcgZnJhbWVzLCBvciA2IGludGVydmFscywgd2hpY2ggd291bGQKKwkJICAgICAqIGJlIDE2NiBtc2VjIGlmIHdlIHNwcmVhZCBpdCBvdXQgb3ZlciBhIHNlY29uZC4gIEl0IGxvb2tzCisJCSAgICAgKiBiZXR0ZXIgKGJ1dCB3aWxsIHdvcmsgb24gYSBzbG93IHRlcm1pbmFsLCBlLmcuLCBsZXNzCisJCSAgICAgKiB0aGFuIDk2MDBiZCkgdG8gc3F1ZWV6ZSB0aGF0IGludG8gYSBoYWxmLXNlY29uZCwgYW5kIHVzZQorCQkgICAgICogaGFsZiBvZiAxNzAgbXNlYyB0byBlbnN1cmUgdGhhdCB0aGUgcHJvZ3JhbSBkb2Vzbid0IGVhdAorCQkgICAgICogYSBsb3Qgb2YgdGltZSB3aGVuIGFza2luZyB3aGF0IHRpbWUgaXQgaXMsIGF0IHRoZSB0b3Agb2YKKwkJICAgICAqIHRoaXMgbG9vcCAtVC5EaWNrZXkKKwkJICAgICAqLworCQkgICAgaWYgKHNjcm9sKQorCQkJbmFwbXMoODUpOworCQl9CisJICAgIH0KKwl9CisKKwkvKiB0aGlzIGRlcGVuZHMgb24gdGhlIGRldGFpbGVkIGZvcm1hdCBvZiBjdGltZSgzKSAqLworCSh2b2lkKSBzdHJjcHkoYnVmLCBjdGltZSgmbm93KSk7CisJKHZvaWQpIHN0cmNweShidWYgKyAxMCwgYnVmICsgMTkpOworCW12YWRkc3RyKDE2LCAzMCwgYnVmKTsKKworCW1vdmUoNiwgMCk7CisJZHJhd2JveChGQUxTRSk7CisJcmVmcmVzaCgpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3Qgc2Nyb2xsaW5nLCB3YWl0IDEwMDAgbXNlYyAoMSBzZWMpLiAgVXNlIG5hcG1zKCkgcmF0aGVyCisJICogdGhhbiBzbGVlcCgpIGJlY2F1c2UgdGhlIGxhdHRlciBkb2VzIG9kZCB0aGluZ3Mgb24gc29tZSBzeXN0ZW1zLAorCSAqIGUuZy4sIHN1c3BlbmRpbmcgb3V0cHV0IGFzIHdlbGwuCisJICovCisJaWYgKHNjcm9sKQorCSAgICBuYXBtcyg1MDApOworCWVsc2UKKwkgICAgbmFwbXMoMTAwMCk7CisKKwkvKgorCSAqIFRoaXMgaXMgYSBzYWZlIHdheSB0byBjaGVjayBpZiB3ZSdyZSBpbnRlcnJ1cHRlZCAtIG1ha2luZyB0aGUgc2lnbmFsCisJICogaGFuZGxlciBzZXQgYSBmbGFnIHRoYXQgd2UgY2FuIGNoZWNrLiAgU2luY2Ugd2UncmUgcnVubmluZworCSAqIG5vZGVsYXkoKSwgdGhlIHdnZXRjaCgpIGNhbGwgcmV0dXJucyBpbW1lZGlhdGVseSwgYW5kIGluIHBhcnRpY3VsYXIKKwkgKiB3aWxsIHJldHVybiBhbiBlcnJvciBpZiBpbnRlcnJ1cHRlZC4gIFRoaXMgd29ya3Mgb25seSBpZiB3ZSBjYW4KKwkgKiByZWFkIGZyb20gdGhlIGlucHV0LCBvZiBjb3Vyc2UuCisJICovCisJc3dpdGNoICh3Z2V0Y2goc3Rkc2NyKSkgeworCWNhc2UgJ3EnOgorCSAgICBjb3VudCA9IDE7CisJICAgIGJyZWFrOworCWNhc2UgJ3MnOgorCSAgICBub2RlbGF5KHN0ZHNjciwgRkFMU0UpOworCSAgICBicmVhazsKKwljYXNlICcgJzoKKwkgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworCSAgICBicmVhazsKKyNpZmRlZiBLRVlfUkVTSVpFCisJY2FzZSBLRVlfUkVTSVpFOgorI2VuZGlmCisJY2FzZSAnPyc6CisJICAgIGdvdG8gcmVzdGFydDsKKwljYXNlIEVSUjoKKwkgICAgaWYgKHNpZ3Rlcm1lZCkgeworCQlzdGFuZGVuZCgpOworCQllbmR3aW4oKTsKKwkJZnByaW50ZihzdGRlcnIsICJnZGMgdGVybWluYXRlZCBieSBzaWduYWwgJWRcbiIsIHNpZ3Rlcm1lZCk7CisJCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJICAgIH0KKwkgICAgLyogRkFMTFRIUlUgKi8KKwlkZWZhdWx0OgorCSAgICBjb250aW51ZTsKKwl9CisgICAgfSB3aGlsZSAoLS1jb3VudCk7CisgICAgc3RhbmRlbmQoKTsKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9oYW5vaS5jIGIvbmN1cnNlcy01LjcvdGVzdC9oYW5vaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGZiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2hhbm9pLmMKQEAgLTAsMCArMSwzMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoJTmFtZTogVG93ZXJzIG9mIEhhbm9pLgorICoKKyAqCURlc2M6CisgKgkJVGhpcyBpcyBhIHBsYXlhYmxlIGNvcHkgb2YgdG93ZXJzIG9mIGhhbm9pLgorICoJCUl0cyBzb2xlIHB1cnBvc2UgaXMgdG8gZGVtb25zdHJhdGUgbXkgQW1pZ2EgQ3Vyc2VzIHBhY2thZ2UuCisgKgkJVGhpcyBwcm9ncmFtIHNob3VsZCBjb21waWxlIG9uIGFueSBzeXN0ZW0gdGhhdCBoYXMgQ3Vyc2VzLgorICoJCSdoYW5vaScJCXdpbGwgZ2l2ZSBhIG1hbnVhbCBnYW1lIHdpdGggNyBwbGF5aW5nIHBpZWNlcy4KKyAqCQknaGFub2kgbicJd2lsbCBnaXZlIGEgbWFudWFsIGdhbWUgd2l0aCBuIHBsYXlpbmcgcGllY2VzLgorICoJCSdoYW5vaSBuIGEnIHdpbGwgZ2l2ZSBhbiBhdXRvIHNvbHZlZCBnYW1lIHdpdGggbiBwbGF5aW5nIHBpZWNlcy4KKyAqCisgKglBdXRob3I6IFNpbW9uIEogUmF5Ym91bGQJKHNpZUBmdWxjcnVtLmJ0LmNvLnVrKS4KKyAqIAkoVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIHNsaWdodGx5IG1vZGlmaWVkIGJ5IHRoZSBuY3Vyc2VzIG1haW50YWluZXJzLikKKyAqCisgKglEYXRlOiAwNS5Ob3YuOTAKKyAqCisgKiAkSWQ6IGhhbm9pLmMsdiAxLjI3IDIwMDgvMDgvMDQgMTA6NTc6NTkgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjZGVmaW5lIE5QRUdTCQkJMwkvKiBUaGlzIGlzIG5vdCBjb25maWd1cmFibGUgISEgKi8KKyNkZWZpbmUgTUlOVElMRVMJCTMKKyNkZWZpbmUgTUFYVElMRVMJCTkKKyNkZWZpbmUgREVGQVVMVFRJTEVTCQk3CisjZGVmaW5lIFRPUExJTkUJCQk2CisjZGVmaW5lIEJBU0VMSU5FCQkxNgorI2RlZmluZSBTVEFUVVNMSU5FCQkoTElORVMtMykKKyNkZWZpbmUgTEVGVFBFRwkJCTE5CisjZGVmaW5lIE1JRFBFRwkJCTM5CisjZGVmaW5lIFJJR0hUUEVHCQk1OQorCisjZGVmaW5lIExFTlRPSU5EKHgpCQkoKCh4KS0xKS8yKQorI2RlZmluZSBPVEhFUihhLGIpCQkoMy0oKGEpKyhiKSkpCisKK3N0cnVjdCBQZWcgeworICAgIHNpemVfdCBMZW5ndGhbTUFYVElMRVNdOworICAgIGludCBDb3VudDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgUGVnIFBlZ3NbTlBFR1NdOworc3RhdGljIGludCBQZWdQb3NbXSA9Cit7TEVGVFBFRywgTUlEUEVHLCBSSUdIVFBFR307CitzdGF0aWMgaW50IFRpbGVDb2xvdXJbXSA9Cit7CisgICAgQ09MT1JfR1JFRU4sCQkvKiBMZW5ndGggMyAqLworICAgIENPTE9SX01BR0VOVEEsCQkvKiBMZW5ndGggNSAqLworICAgIENPTE9SX1JFRCwJCQkvKiBMZW5ndGggNyAqLworICAgIENPTE9SX0JMVUUsCQkJLyogTGVuZ3RoIDkgKi8KKyAgICBDT0xPUl9DWUFOLAkJCS8qIExlbmd0aCAxMSAqLworICAgIENPTE9SX1lFTExPVywJCS8qIExlbmd0aCAxMyAqLworICAgIENPTE9SX0dSRUVOLAkJLyogTGVuZ3RoIDE1ICovCisgICAgQ09MT1JfTUFHRU5UQSwJCS8qIExlbmd0aCAxNyAqLworICAgIENPTE9SX1JFRCwJCQkvKiBMZW5ndGggMTkgKi8KK307CitzdGF0aWMgaW50IE5Nb3ZlcyA9IDA7CitzdGF0aWMgYm9vbCBBdXRvRmxhZyA9IEZBTFNFOworCitzdGF0aWMgdm9pZCBJbml0VGlsZXMoaW50IE5UaWxlcyk7CitzdGF0aWMgdm9pZCBEaXNwbGF5VGlsZXModm9pZCk7CitzdGF0aWMgdm9pZCBNYWtlTW92ZShpbnQgRnJvbSwgaW50IFRvKTsKK3N0YXRpYyB2b2lkIEF1dG9Nb3ZlKGludCBGcm9tLCBpbnQgVG8sIGludCBOdW0pOworc3RhdGljIHZvaWQgVXNhZ2Uodm9pZCk7CitzdGF0aWMgaW50IFNvbHZlZChpbnQgTnVtVGlsZXMpOworc3RhdGljIGludCBHZXRNb3ZlKGludCAqRnJvbSwgaW50ICpUbyk7CitzdGF0aWMgaW50IEludmFsaWRNb3ZlKGludCBGcm9tLCBpbnQgVG8pOworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBOVGlsZXMsIEZyb21Db2wsIFRvQ29sOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgc3dpdGNoIChhcmdjKSB7CisgICAgY2FzZSAxOgorCU5UaWxlcyA9IERFRkFVTFRUSUxFUzsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJTlRpbGVzID0gYXRvaShhcmd2WzFdKTsKKwlpZiAoTlRpbGVzID4gTUFYVElMRVMgfHwgTlRpbGVzIDwgTUlOVElMRVMpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJSYW5nZSAlZCB0byAlZFxuIiwgTUlOVElMRVMsIE1BWFRJTEVTKTsKKwkgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwl9CisJYnJlYWs7CisgICAgY2FzZSAzOgorCWlmIChzdHJjbXAoYXJndlsyXSwgImEiKSkgeworCSAgICBVc2FnZSgpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKwlOVGlsZXMgPSBhdG9pKGFyZ3ZbMV0pOworCWlmIChOVGlsZXMgPiBNQVhUSUxFUyB8fCBOVGlsZXMgPCBNSU5USUxFUykgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIlJhbmdlICVkIHRvICVkXG4iLCBNSU5USUxFUywgTUFYVElMRVMpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKwlBdXRvRmxhZyA9IFRSVUU7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlVc2FnZSgpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorI2lmZGVmIFRSQUNFCisgICAgdHJhY2UoVFJBQ0VfTUFYSU1VTSk7CisjZW5kaWYKKyAgICBpbml0c2NyKCk7CisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCWludCBpOworCWludCBiZyA9IENPTE9SX0JMQUNLOworCXN0YXJ0X2NvbG9yKCk7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAodXNlX2RlZmF1bHRfY29sb3JzKCkgPT0gT0spCisJICAgIGJnID0gLTE7CisjZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCSAgICBpbml0X3BhaXIoaSArIDEsIGJnLCBUaWxlQ29sb3VyW2ldKTsKKyAgICB9CisgICAgY2JyZWFrKCk7CisgICAgaWYgKExJTkVTIDwgMjQpIHsKKwllbmR3aW4oKTsKKwlmcHJpbnRmKHN0ZGVyciwgIk1pbiBzY3JlZW4gbGVuZ3RoIDI0IGxpbmVzXG4iKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICBpZiAoQXV0b0ZsYWcpIHsKKwljdXJzX3NldCgwKTsKKwlsZWF2ZW9rKHN0ZHNjciwgVFJVRSk7CS8qIEF0dGVtcHQgdG8gcmVtb3ZlIGN1cnNvciAqLworICAgIH0KKyAgICBJbml0VGlsZXMoTlRpbGVzKTsKKyAgICBEaXNwbGF5VGlsZXMoKTsKKyAgICBpZiAoQXV0b0ZsYWcpIHsKKwlkbyB7CisJICAgIG5vZWNobygpOworCSAgICBBdXRvTW92ZSgwLCAyLCBOVGlsZXMpOworCX0gd2hpbGUgKCFTb2x2ZWQoTlRpbGVzKSk7CisJc2xlZXAoMik7CisgICAgfSBlbHNlIHsKKwllY2hvKCk7CisJZm9yICg7OykgeworCSAgICBpZiAoR2V0TW92ZSgmRnJvbUNvbCwgJlRvQ29sKSkKKwkJYnJlYWs7CisJICAgIGlmIChJbnZhbGlkTW92ZShGcm9tQ29sLCBUb0NvbCkpIHsKKwkJbXZhZGRzdHIoU1RBVFVTTElORSwgMCwgIkludmFsaWQgTW92ZSAhISIpOworCQlyZWZyZXNoKCk7CisJCWJlZXAoKTsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgTWFrZU1vdmUoRnJvbUNvbCwgVG9Db2wpOworCSAgICBpZiAoU29sdmVkKE5UaWxlcykpIHsKKwkJbXZwcmludHcoU1RBVFVTTElORSwgMCwKKwkJCSAiV2VsbCBEb25lICEhIFlvdSBkaWQgaXQgaW4gJWQgbW92ZXMiLCBOTW92ZXMpOworCQlyZWZyZXNoKCk7CisJCXNsZWVwKDUpOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworc3RhdGljIGludAorSW52YWxpZE1vdmUoaW50IEZyb20sIGludCBUbykKK3sKKyAgICBpZiAoRnJvbSA+PSBOUEVHUykKKwlyZXR1cm4gVFJVRTsKKyAgICBpZiAoRnJvbSA8IDApCisJcmV0dXJuIFRSVUU7CisgICAgaWYgKFRvID49IE5QRUdTKQorCXJldHVybiBUUlVFOworICAgIGlmIChUbyA8IDApCisJcmV0dXJuIFRSVUU7CisgICAgaWYgKEZyb20gPT0gVG8pCisJcmV0dXJuIFRSVUU7CisgICAgaWYgKCFQZWdzW0Zyb21dLkNvdW50KQorCXJldHVybiBUUlVFOworICAgIGlmIChQZWdzW1RvXS5Db3VudCAmJgorCVBlZ3NbRnJvbV0uTGVuZ3RoW1BlZ3NbRnJvbV0uQ291bnQgLSAxXSA+CisJUGVnc1tUb10uTGVuZ3RoW1BlZ3NbVG9dLkNvdW50IC0gMV0pCisJcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorSW5pdFRpbGVzKGludCBOVGlsZXMpCit7CisgICAgaW50IFNpemUsIFNsb3RObzsKKworICAgIGZvciAoU2l6ZSA9IE5UaWxlcyAqIDIgKyAxLCBTbG90Tm8gPSAwOyBTaXplID49IDM7IFNpemUgLT0gMikKKwlQZWdzWzBdLkxlbmd0aFtTbG90Tm8rK10gPSBTaXplOworCisgICAgUGVnc1swXS5Db3VudCA9IE5UaWxlczsKKyAgICBQZWdzWzFdLkNvdW50ID0gMDsKKyAgICBQZWdzWzJdLkNvdW50ID0gMDsKK30KKworc3RhdGljIHZvaWQKK0Rpc3BsYXlUaWxlcyh2b2lkKQoreworICAgIGludCBMaW5lLCBwZWcsIFNsb3RObzsKKyAgICBjaGFyIFRpbGVCdWZbQlVGU0laXTsKKworICAgIGVyYXNlKCk7CisgICAgbXZhZGRzdHIoMSwgMjQsICJUIE8gVyBFIFIgUyAgIE8gRiAgIEggQSBOIE8gSSIpOworICAgIG12YWRkc3RyKDMsIDM0LCAiU0pSIDE5OTAiKTsKKyAgICBtdnByaW50dygxOSwgNSwgIk1vdmVzIDogJWQiLCBOTW92ZXMpOworICAgIGF0dHJzZXQoQV9SRVZFUlNFKTsKKyAgICBtdmFkZHN0cihCQVNFTElORSwgOCwKKwkgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKworICAgIGZvciAoTGluZSA9IFRPUExJTkU7IExpbmUgPCBCQVNFTElORTsgTGluZSsrKSB7CisJbXZhZGRjaChMaW5lLCBMRUZUUEVHLCAnICcpOworCW12YWRkY2goTGluZSwgTUlEUEVHLCAnICcpOworCW12YWRkY2goTGluZSwgUklHSFRQRUcsICcgJyk7CisgICAgfQorICAgIG12YWRkY2goQkFTRUxJTkUsIExFRlRQRUcsICcxJyk7CisgICAgbXZhZGRjaChCQVNFTElORSwgTUlEUEVHLCAnMicpOworICAgIG12YWRkY2goQkFTRUxJTkUsIFJJR0hUUEVHLCAnMycpOworICAgIGF0dHJzZXQoQV9OT1JNQUwpOworCisgICAgLyogRHJhdyB0aWxlcyAqLworICAgIGZvciAocGVnID0gMDsgcGVnIDwgTlBFR1M7IHBlZysrKSB7CisJZm9yIChTbG90Tm8gPSAwOyBTbG90Tm8gPCBQZWdzW3BlZ10uQ291bnQ7IFNsb3RObysrKSB7CisJICAgIHVuc2lnbmVkIGxlbiA9IFBlZ3NbcGVnXS5MZW5ndGhbU2xvdE5vXTsKKwkgICAgaWYgKGxlbiA8IHNpemVvZihUaWxlQnVmKSAtIDEgJiYgbGVuIDwgKHVuc2lnbmVkKSBQZWdQb3NbcGVnXSkgeworCQltZW1zZXQoVGlsZUJ1ZiwgJyAnLCBsZW4pOworCQlUaWxlQnVmW2xlbl0gPSAnXDAnOworCQlpZiAoaGFzX2NvbG9ycygpKQorCQkgICAgYXR0cnNldChDT0xPUl9QQUlSKExFTlRPSU5EKGxlbikpKTsKKwkJZWxzZQorCQkgICAgYXR0cnNldChBX1JFVkVSU0UpOworCQltdmFkZHN0cihCQVNFTElORSAtIChTbG90Tm8gKyAxKSwKKwkJCSAoaW50KSAoUGVnUG9zW3BlZ10gLSBsZW4gLyAyKSwKKwkJCSBUaWxlQnVmKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgYXR0cnNldChBX05PUk1BTCk7CisgICAgcmVmcmVzaCgpOworfQorCitzdGF0aWMgaW50CitHZXRNb3ZlKGludCAqRnJvbSwgaW50ICpUbykKK3sKKyAgICBtdmFkZHN0cihTVEFUVVNMSU5FLCAwLCAiTmV4dCBtb3ZlICgncScgdG8gcXVpdCkgZnJvbSAiKTsKKyAgICBjbHJ0b2VvbCgpOworICAgIHJlZnJlc2goKTsKKyAgICBpZiAoKCpGcm9tID0gZ2V0Y2goKSkgPT0gJ3EnKQorCXJldHVybiBUUlVFOworICAgICpGcm9tIC09ICgnMCcgKyAxKTsKKyAgICBhZGRzdHIoIiB0byAiKTsKKyAgICBjbHJ0b2VvbCgpOworICAgIHJlZnJlc2goKTsKKworICAgIGlmICgoKlRvID0gZ2V0Y2goKSkgPT0gJ3EnKQorCXJldHVybiBUUlVFOworICAgICpUbyAtPSAoJzAnICsgMSk7CisgICAgcmVmcmVzaCgpOworICAgIGlmICghQXV0b0ZsYWcpCisJbmFwbXMoNTAwKTsKKworICAgIG1vdmUoU1RBVFVTTElORSwgMCk7CisgICAgY2xydG9lb2woKTsKKyAgICByZWZyZXNoKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorTWFrZU1vdmUoaW50IEZyb20sIGludCBUbykKK3sKKyAgICBQZWdzW0Zyb21dLkNvdW50LS07CisgICAgUGVnc1tUb10uTGVuZ3RoW1BlZ3NbVG9dLkNvdW50XSA9IFBlZ3NbRnJvbV0uTGVuZ3RoW1BlZ3NbRnJvbV0uQ291bnRdOworICAgIFBlZ3NbVG9dLkNvdW50Kys7CisgICAgTk1vdmVzKys7CisgICAgRGlzcGxheVRpbGVzKCk7Cit9CisKK3N0YXRpYyB2b2lkCitBdXRvTW92ZShpbnQgRnJvbSwgaW50IFRvLCBpbnQgTnVtKQoreworICAgIGlmIChOdW0gPT0gMSkgeworCU1ha2VNb3ZlKEZyb20sIFRvKTsKKwluYXBtcyg1MDApOworCXJldHVybjsKKyAgICB9CisgICAgQXV0b01vdmUoRnJvbSwgT1RIRVIoRnJvbSwgVG8pLCBOdW0gLSAxKTsKKyAgICBNYWtlTW92ZShGcm9tLCBUbyk7CisgICAgbmFwbXMoNTAwKTsKKyAgICBBdXRvTW92ZShPVEhFUihGcm9tLCBUbyksIFRvLCBOdW0gLSAxKTsKK30KKworc3RhdGljIGludAorU29sdmVkKGludCBOdW1UaWxlcykKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDE7IGkgPCBOUEVHUzsgaSsrKQorCWlmIChQZWdzW2ldLkNvdW50ID09IE51bVRpbGVzKQorCSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitVc2FnZSh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGhhbm9pIFs8Tm8gT2YgVGlsZXM+XSBbYV1cbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorCSAgICAiVGhlICdhJyBvcHRpb24gY2F1c2VzIHRoZSB0b3dlciB0byBiZSBzb2x2ZWQgYXV0b21hdGljYWxseVxuIik7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2hhc2h0ZXN0LmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2hhc2h0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxYjAwYgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvaGFzaHRlc3QuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBoYXNodGVzdC5jIC0tIHRlc3QgaGFzaCBtYXBwaW5nCisgKgorICogR2VuZXJhdGUgdGltaW5nIHN0YXRpc3RpY3MgZm9yIHZlcnRpY2FsLW1vdGlvbiBvcHRpbWl6YXRpb24uCisgKgorICogJElkOiBoYXNodGVzdC5jLHYgMS4yOSAyMDA4LzA4LzE2IDE3OjI2OjQ0IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2RlZmluZSBMT19DSEFSICcgJworI2RlZmluZSBISV9DSEFSICd+JworCitzdGF0aWMgYm9vbCBjb250aW51b3VzID0gRkFMU0U7CitzdGF0aWMgYm9vbCByZXZlcnNlX2xvb3BzID0gRkFMU0U7CitzdGF0aWMgYm9vbCBzaW5nbGVfc3RlcCA9IEZBTFNFOworc3RhdGljIGJvb2wgZXh0ZW5kX2Nvcm5lciA9IEZBTFNFOworc3RhdGljIGludCBmb290X2xpbmVzID0gMDsKK3N0YXRpYyBpbnQgaGVhZF9saW5lcyA9IDA7CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwKHZvaWQpCit7CisgICAgbW92ZShMSU5FUyAtIDEsIDApOworICAgIGNscnRvZW9sKCk7CisgICAgcmVmcmVzaCgpOworICAgIGVuZHdpbigpOworfQorCitzdGF0aWMgUkVUU0lHVFlQRQorZmluaXNoKGludCBzaWcgR0NDX1VOVVNFRCkKK3sKKyAgICBjbGVhbnVwKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQKK2dlbmxpbmVzKGludCBiYXNlKQoreworICAgIGludCBpLCBqOworCisjaWYgVVNFX1RSQUNFCisgICAgaWYgKGJhc2UgPT0gJ2EnKQorCVRyYWNlKCgiUmVzZXR0aW5nIHNjcmVlbiIpKTsKKyAgICBlbHNlCisJVHJhY2UoKCJQYWludGluZyBgJWMnIHNjcmVlbiIsIGJhc2UpKTsKKyNlbmRpZgorCisgICAgLyogRG8gdGhpcyBzbyB3cml0ZXMgdG8gbG93ZXItcmlnaHQgY29ybmVyIGRvbid0IGNhdXNlIGEgc3B1cmlvdXMKKyAgICAgKiBzY3JvbGxpbmcgb3BlcmF0aW9uLiAgVGhpcyBfc2hvdWxkbid0XyBicmVhayB0aGUgc2Nyb2xsaW5nCisgICAgICogb3B0aW1pemF0aW9uLCBzaW5jZSB0aGF0J3MgY29tcHV0ZWQgaW4gdGhlIHJlZnJlc2goKSBjYWxsLgorICAgICAqLworICAgIHNjcm9sbG9rKHN0ZHNjciwgRkFMU0UpOworCisgICAgbW92ZSgwLCAwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaGVhZF9saW5lczsgaSsrKQorCWZvciAoaiA9IDA7IGogPCBDT0xTOyBqKyspCisJICAgIGFkZGNoKFVDaGFyKChqICUgOCA9PSAwKSA/ICgnQScgKyBqIC8gOCkgOiAnLScpKTsKKworICAgIG1vdmUoaGVhZF9saW5lcywgMCk7CisgICAgZm9yIChpID0gaGVhZF9saW5lczsgaSA8IExJTkVTIC0gZm9vdF9saW5lczsgaSsrKSB7CisJY2h0eXBlIGMgPSAoYmFzZSAtIExPX0NIQVIgKyBpKSAlIChISV9DSEFSIC0gTE9fQ0hBUiArIDEpICsgTE9fQ0hBUjsKKwlpbnQgaGkgPSAoZXh0ZW5kX2Nvcm5lciB8fCAoaSA8IExJTkVTIC0gMSkpID8gQ09MUyA6IENPTFMgLSAxOworCWZvciAoaiA9IDA7IGogPCBoaTsgaisrKQorCSAgICBhZGRjaChjKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSBMSU5FUyAtIGZvb3RfbGluZXM7IGkgPCBMSU5FUzsgaSsrKSB7CisJbW92ZShpLCAwKTsKKwlmb3IgKGogPSAwOyBqIDwgKGV4dGVuZF9jb3JuZXIgPyBDT0xTIDogQ09MUyAtIDEpOyBqKyspCisJICAgIGFkZGNoKFVDaGFyKChqICUgOCA9PSAwKSA/ICgnQScgKyBqIC8gOCkgOiAnLScpKTsKKyAgICB9CisKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworICAgIGlmIChzaW5nbGVfc3RlcCkgeworCW1vdmUoTElORVMgLSAxLCAwKTsKKwlnZXRjaCgpOworICAgIH0gZWxzZQorCXJlZnJlc2goKTsKK30KKworc3RhdGljIHZvaWQKK29uZV9jeWNsZShpbnQgY2gpCit7CisgICAgaWYgKGNvbnRpbnVvdXMpIHsKKwlnZW5saW5lcyhjaCk7CisgICAgfSBlbHNlIGlmIChjaCAhPSAnYScpIHsKKwlnZW5saW5lcygnYScpOworCWdlbmxpbmVzKGNoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitydW5fdGVzdChib29sIG9wdGltaXplZCBHQ0NfVU5VU0VEKQoreworICAgIGNoYXIgY2g7CisgICAgaW50IGxvID0gY29udGludW91cyA/IExPX0NIQVIgOiAnYScgLSBMSU5FUzsKKyAgICBpbnQgaGkgPSBjb250aW51b3VzID8gSElfQ0hBUiA6ICdhJyArIExJTkVTOworCisgICAgaWYgKGxvIDwgTE9fQ0hBUikKKwlsbyA9IExPX0NIQVI7CisgICAgaWYgKGhpID4gSElfQ0hBUikKKwloaSA9IEhJX0NIQVI7CisKKyNpZiBkZWZpbmVkKFRSQUNFKSB8fCBkZWZpbmVkKE5DVVJTRVNfVEVTVCkKKyAgICBpZiAob3B0aW1pemVkKSB7CisJVHJhY2UoKCJXaXRoIGhhc2ggbWFwcGluZyIpKTsKKwlfbmNfb3B0aW1pemVfZW5hYmxlIHw9IE9QVElNSVpFX0hBU0hNQVA7CisgICAgfSBlbHNlIHsKKwlUcmFjZSgoIldpdGhvdXQgaGFzaCBtYXBwaW5nIikpOworCV9uY19vcHRpbWl6ZV9lbmFibGUgJj0gfk9QVElNSVpFX0hBU0hNQVA7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocmV2ZXJzZV9sb29wcykKKwlmb3IgKGNoID0gaGk7IGNoID49IGxvOyBjaC0tKQorCSAgICBvbmVfY3ljbGUoY2gpOworICAgIGVsc2UKKwlmb3IgKGNoID0gbG87IGNoIDw9IGhpOyBjaCsrKQorCSAgICBvbmVfY3ljbGUoY2gpOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGJsW10gPQorICAgIHsKKwkiVXNhZ2U6IGhhc2h0ZXN0IFtvcHRpb25zXSIKKwksIiIKKwksIk9wdGlvbnM6IgorCSwiICAtYyAgICAgIGNvbnRpbnVvdXMgKGRvbid0IHJlc2V0IGJldHdlZW4gcmVmcmVzaCdzKSIKKwksIiAgLWYgbnVtICBsZWF2ZSAnbnVtJyBsaW5lcyBjb25zdGFudCBmb3IgZm9vdGVyIgorCSwiICAtaCBudW0gIGxlYXZlICdudW0nIGxpbmVzIGNvbnN0YW50IGZvciBoZWFkZXIiCisJLCIgIC1sIG51bSAgcmVwZWF0IHRlc3QgJ251bScgdGltZXMiCisJLCIgIC1uICAgICAgdGVzdCB0aGUgbm9ybWFsIG9wdGltaXplciIKKwksIiAgLW8gICAgICB0ZXN0IHRoZSBoYXNoZWQgb3B0aW1pemVyIgorCSwiICAtciAgICAgIHJldmVyc2UgdGhlIGxvb3BzIgorCSwiICAtcyAgICAgIHNpbmdsZS1zdGVwIgorCSwiICAteCAgICAgIGFzc3VtZSBsb3dlci1yaWdodCBjb3JuZXIgZXh0ZW5zaW9uIgorICAgIH07CisgICAgc2l6ZV90IG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRibCk7IG4rKykKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0Ymxbbl0pOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBjOworICAgIGludCB0ZXN0X2xvb3BzID0gMTsKKyAgICBpbnQgdGVzdF9ub3JtYWwgPSBGQUxTRTsKKyAgICBpbnQgdGVzdF9vcHRpbWl6ZSA9IEZBTFNFOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJjZjpoOmw6bm9yc3giKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlICdjJzoKKwkgICAgY29udGludW91cyA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2YnOgorCSAgICBmb290X2xpbmVzID0gYXRvaShvcHRhcmcpOworCSAgICBicmVhazsKKwljYXNlICdoJzoKKwkgICAgaGVhZF9saW5lcyA9IGF0b2kob3B0YXJnKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnbCc6CisJICAgIHRlc3RfbG9vcHMgPSBhdG9pKG9wdGFyZyk7CisJICAgIGFzc2VydCh0ZXN0X2xvb3BzID49IDApOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgdGVzdF9ub3JtYWwgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdvJzoKKwkgICAgdGVzdF9vcHRpbWl6ZSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3InOgorCSAgICByZXZlcnNlX2xvb3BzID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncyc6CisJICAgIHNpbmdsZV9zdGVwID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAneCc6CisJICAgIGV4dGVuZF9jb3JuZXIgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCX0KKyAgICB9CisgICAgaWYgKCF0ZXN0X25vcm1hbCAmJiAhdGVzdF9vcHRpbWl6ZSkgeworCXRlc3Rfbm9ybWFsID0gVFJVRTsKKwl0ZXN0X29wdGltaXplID0gVFJVRTsKKyAgICB9CisjaWYgVVNFX1RSQUNFCisgICAgdHJhY2UoVFJBQ0VfVElNRVMpOworI2VuZGlmCisKKyAgICBDQVRDSEFMTChmaW5pc2gpOwkJLyogYXJyYW5nZSBpbnRlcnJ1cHRzIHRvIHRlcm1pbmF0ZSAqLworCisgICAgKHZvaWQpIGluaXRzY3IoKTsJCS8qIGluaXRpYWxpemUgdGhlIGN1cnNlcyBsaWJyYXJ5ICovCisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CS8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIG5vbmwoKTsJCS8qIHRlbGwgY3Vyc2VzIG5vdCB0byBkbyBOTC0+Q1IvTkwgb24gb3V0cHV0ICovCisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworCisgICAgd2hpbGUgKHRlc3RfbG9vcHMtLSA+IDApIHsKKwlpZiAodGVzdF9ub3JtYWwpCisJICAgIHJ1bl90ZXN0KEZBTFNFKTsKKwlpZiAodGVzdF9vcHRpbWl6ZSkKKwkgICAgcnVuX3Rlc3QoVFJVRSk7CisgICAgfQorCisgICAgY2xlYW51cCgpOwkJCS8qIHdlJ3JlIGRvbmUgKi8KKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorLyogaGFzaHRlc3QuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvaW5jaF93aWRlLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2luY2hfd2lkZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YWY0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2luY2hfd2lkZS5jCkBAIC0wLDAgKzEsMjc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogaW5jaF93aWRlLmMsdiAxLjYgMjAwNy8wNy8yMSAxODozNzozOCB0b20gRXhwICQKKyAqLworLyoKKyAgICAgICBpbnQgaW5fd2NoKGNjaGFyX3QgKndjdmFsKTsKKyAgICAgICBpbnQgbXZpbl93Y2goaW50IHksIGludCB4LCBjY2hhcl90ICp3Y3ZhbCk7CisgICAgICAgaW50IG12d2luX3djaChXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjY2hhcl90ICp3Y3ZhbCk7CisgICAgICAgaW50IHdpbl93Y2goV0lORE9XICp3aW4sIGNjaGFyX3QgKndjdmFsKTsKKyAgICAgICBpbnQgaW5fd2Noc3RyKGNjaGFyX3QgKndjaHN0cik7CisgICAgICAgaW50IGluX3djaG5zdHIoY2NoYXJfdCAqd2Noc3RyLCBpbnQgbik7CisgICAgICAgaW50IHdpbl93Y2hzdHIoV0lORE9XICp3aW4sIGNjaGFyX3QgKndjaHN0cik7CisgICAgICAgaW50IHdpbl93Y2huc3RyKFdJTkRPVyAqd2luLCBjY2hhcl90ICp3Y2hzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZpbl93Y2hzdHIoaW50IHksIGludCB4LCBjY2hhcl90ICp3Y2hzdHIpOworICAgICAgIGludCBtdmluX3djaG5zdHIoaW50IHksIGludCB4LCBjY2hhcl90ICp3Y2hzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZ3aW5fd2Noc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNjaGFyX3QgKndjaHN0cik7CisgICAgICAgaW50IG12d2luX3djaG5zdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2NoYXJfdCAqd2Noc3RyLCBpbnQgbik7CisqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCisjZGVmaW5lIEJBU0VfWSA3CisjZGVmaW5lIE1BWF9DT0xTIDEwMjQKKworc3RhdGljIGJvb2wKK1F1aXQoaW50IGNoKQoreworICAgIHJldHVybiAoY2ggPT0gRVJSIHx8IGNoID09ICdxJyB8fCBjaCA9PSBRVUlUIHx8IGNoID09IEVTQ0FQRSk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfaW5jaHMoaW50IGxldmVsLCBjaGFyICoqYXJndiwgV0lORE9XICpjaHJ3aW4sIFdJTkRPVyAqc3Ryd2luKQoreworICAgIFdJTkRPVyAqdHh0Ym94ID0gMDsKKyAgICBXSU5ET1cgKnR4dHdpbiA9IDA7CisgICAgRklMRSAqZnA7CisgICAgaW50IGo7CisgICAgaW50IHR4dF94ID0gMCwgdHh0X3kgPSAwOworICAgIGludCBiYXNlX3k7CisgICAgaW50IGxpbWl0OworICAgIGNjaGFyX3QgY2g7CisgICAgY2NoYXJfdCB0ZXh0W01BWF9DT0xTXTsKKworICAgIGlmIChhcmd2W2xldmVsXSA9PSAwKSB7CisJYmVlcCgpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJdHh0Ym94ID0gbmV3d2luKExJTkVTIC0gQkFTRV9ZLCBDT0xTIC0gbGV2ZWwsIEJBU0VfWSwgbGV2ZWwpOworCWJveCh0eHRib3gsIDAsIDApOworCXdub3V0cmVmcmVzaCh0eHRib3gpOworCisJdHh0d2luID0gZGVyd2luKHR4dGJveCwKKwkJCWdldG1heHkodHh0Ym94KSAtIDIsCisJCQlnZXRtYXh4KHR4dGJveCkgLSAyLAorCQkJMSwgMSk7CisJYmFzZV95ID0gMDsKKyAgICB9IGVsc2UgeworCXR4dHdpbiA9IHN0ZHNjcjsKKwliYXNlX3kgPSBCQVNFX1k7CisgICAgfQorCisgICAga2V5cGFkKHR4dHdpbiwgVFJVRSk7CS8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHR4dF95ID0gYmFzZV95OworICAgIHR4dF94ID0gMDsKKyAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisKKyAgICBpZiAoKGZwID0gZm9wZW4oYXJndltsZXZlbF0sICJyIikpICE9IDApIHsKKwl3aGlsZSAoKGogPSBmZ2V0YyhmcCkpICE9IEVPRikgeworCSAgICBpZiAod2FkZGNoKHR4dHdpbiwgVUNoYXIoaikpICE9IE9LKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHR4dHdpbiwgIkNhbm5vdCBvcGVuOlxuJXMiLCBhcmd2WzFdKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIVF1aXQoaiA9IG12d2dldGNoKHR4dHdpbiwgdHh0X3ksIHR4dF94KSkpIHsKKwlzd2l0Y2ggKGopIHsKKwljYXNlIEtFWV9ET1dOOgorCWNhc2UgJ2onOgorCSAgICBpZiAodHh0X3kgPCBnZXRtYXh5KHR4dHdpbikgLSAxKQorCQl0eHRfeSsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfVVA6CisJY2FzZSAnayc6CisJICAgIGlmICh0eHRfeSA+IGJhc2VfeSkKKwkJdHh0X3ktLTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJY2FzZSAnaCc6CisJICAgIGlmICh0eHRfeCA+IDApCisJCXR4dF94LS07CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwljYXNlICdsJzoKKwkgICAgaWYgKHR4dF94IDwgZ2V0bWF4eCh0eHR3aW4pIC0gMSkKKwkJdHh0X3grKzsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgJ3cnOgorCSAgICB0ZXN0X2luY2hzKGxldmVsICsgMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCSAgICBpZiAodHh0Ym94ICE9IDApIHsKKwkJdG91Y2h3aW4odHh0Ym94KTsKKwkJd25vdXRyZWZyZXNoKHR4dGJveCk7CisJICAgIH0gZWxzZSB7CisJCXRvdWNod2luKHR4dHdpbik7CisJCXdub3V0cmVmcmVzaCh0eHR3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCisJbXZ3cHJpbnR3KGNocndpbiwgMCwgMCwgImNoYXI6Iik7CisJd2NscnRvZW9sKGNocndpbik7CisKKwlpZiAodHh0d2luICE9IHN0ZHNjcikgeworCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJICAgIGlmICh3aW5fd2NoKHR4dHdpbiwgJmNoKSAhPSBFUlIpIHsKKwkJaWYgKHdhZGRfd2NoKGNocndpbiwgJmNoKSAhPSBFUlIpIHsKKwkJICAgIGZvciAoaiA9IHR4dF94ICsgMTsgaiA8IGdldG1heHgodHh0d2luKTsgKytqKSB7CisJCQlpZiAobXZ3aW5fd2NoKHR4dHdpbiwgdHh0X3ksIGosICZjaCkgIT0gRVJSKSB7CisJCQkgICAgaWYgKHdhZGRfd2NoKGNocndpbiwgJmNoKSA9PSBFUlIpIHsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQl9IGVsc2UgeworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisJICAgIGlmIChpbl93Y2goJmNoKSAhPSBFUlIpIHsKKwkJaWYgKHdhZGRfd2NoKGNocndpbiwgJmNoKSAhPSBFUlIpIHsKKwkJICAgIGZvciAoaiA9IHR4dF94ICsgMTsgaiA8IGdldG1heHgodHh0d2luKTsgKytqKSB7CisJCQlpZiAobXZpbl93Y2godHh0X3ksIGosICZjaCkgIT0gRVJSKSB7CisJCQkgICAgaWYgKHdhZGRfd2NoKGNocndpbiwgJmNoKSA9PSBFUlIpIHsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQl9IGVsc2UgeworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJd25vdXRyZWZyZXNoKGNocndpbik7CisKKwltdndwcmludHcoc3Ryd2luLCAwLCAwLCAidGV4dDoiKTsKKwl3Y2xydG9ib3Qoc3Ryd2luKTsKKworCWxpbWl0ID0gZ2V0bWF4eChzdHJ3aW4pIC0gNTsKKworCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKHdpbl93Y2hzdHIodHh0d2luLCB0ZXh0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkX3djaHN0cihzdHJ3aW4sIDAsIDUsIHRleHQpOworCSAgICB9CisKKwkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCSAgICBpZiAod2luX3djaG5zdHIodHh0d2luLCB0ZXh0LCBsaW1pdCkgIT0gRVJSKSB7CisJCW12d2FkZF93Y2hzdHIoc3Ryd2luLCAxLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIGlmIChtdndpbl93Y2hzdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIHRleHQpICE9IEVSUikgeworCQltdndhZGRfd2Noc3RyKHN0cndpbiwgMiwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBpZiAobXZ3aW5fd2NobnN0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgdGV4dCwgbGltaXQpICE9IEVSUikgeworCQltdndhZGRfd2Noc3RyKHN0cndpbiwgMywgNSwgdGV4dCk7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisJICAgIGlmIChpbl93Y2hzdHIodGV4dCkgIT0gRVJSKSB7CisJCW12d2FkZF93Y2hzdHIoc3Ryd2luLCAwLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKGluX3djaG5zdHIodGV4dCwgbGltaXQpICE9IEVSUikgeworCQltdndhZGRfd2Noc3RyKHN0cndpbiwgMSwgNSwgdGV4dCk7CisJICAgIH0KKworCSAgICBpZiAobXZpbl93Y2hzdHIodHh0X3ksIHR4dF94LCB0ZXh0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkX3djaHN0cihzdHJ3aW4sIDIsIDUsIHRleHQpOworCSAgICB9CisKKwkgICAgaWYgKG12aW5fd2NobnN0cih0eHRfeSwgdHh0X3gsIHRleHQsIGxpbWl0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkX3djaHN0cihzdHJ3aW4sIDMsIDUsIHRleHQpOworCSAgICB9CisJfQorCisJd25vdXRyZWZyZXNoKHN0cndpbik7CisgICAgfQorICAgIGlmIChsZXZlbCA+IDEpIHsKKwlkZWx3aW4odHh0d2luKTsKKwlkZWx3aW4odHh0Ym94KTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdJTkRPVyAqY2hyYm94OworICAgIFdJTkRPVyAqY2hyd2luOworICAgIFdJTkRPVyAqc3Ryd2luOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaWYgKGFyZ2MgPCAyKSB7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgZmlsZVxuIiwgYXJndlswXSk7CisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisKKyAgICBjaHJib3ggPSBkZXJ3aW4oc3Rkc2NyLCBCQVNFX1ksIENPTFMsIDAsIDApOworICAgIGJveChjaHJib3gsIDAsIDApOworICAgIHdub3V0cmVmcmVzaChjaHJib3gpOworCisgICAgY2hyd2luID0gZGVyd2luKGNocmJveCwgMSwgQ09MUyAtIDIsIDEsIDEpOworICAgIHN0cndpbiA9IGRlcndpbihjaHJib3gsIDQsIENPTFMgLSAyLCAyLCAxKTsKKworICAgIHRlc3RfaW5jaHMoMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgd2lkZS1uY3Vyc2VzIGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvaW5jaHMuYyBiL25jdXJzZXMtNS43L3Rlc3QvaW5jaHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBkMzI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9pbmNocy5jCkBAIC0wLDAgKzEsMjcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogaW5jaHMuYyx2IDEuOSAyMDA3LzA3LzIxIDE5OjAxOjQzIHRvbSBFeHAgJAorICoKKyAqIEF1dGhvcjogVGhvbWFzIEUgRGlja2V5CisgKi8KKy8qCisgICAgICAgY2h0eXBlIGluY2godm9pZCk7CisgICAgICAgY2h0eXBlIHdpbmNoKFdJTkRPVyAqd2luKTsKKyAgICAgICBjaHR5cGUgbXZpbmNoKGludCB5LCBpbnQgeCk7CisgICAgICAgY2h0eXBlIG12d2luY2goV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCk7CisgICAgICAgaW50IGluY2hzdHIoY2h0eXBlICpjaHN0cik7CisgICAgICAgaW50IGluY2huc3RyKGNodHlwZSAqY2hzdHIsIGludCBuKTsKKyAgICAgICBpbnQgd2luY2hzdHIoV0lORE9XICp3aW4sIGNodHlwZSAqY2hzdHIpOworICAgICAgIGludCB3aW5jaG5zdHIoV0lORE9XICp3aW4sIGNodHlwZSAqY2hzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZpbmNoc3RyKGludCB5LCBpbnQgeCwgY2h0eXBlICpjaHN0cik7CisgICAgICAgaW50IG12aW5jaG5zdHIoaW50IHksIGludCB4LCBjaHR5cGUgKmNoc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12d2luY2hzdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2h0eXBlICpjaHN0cik7CisgICAgICAgaW50IG12d2luY2huc3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNodHlwZSAqY2hzdHIsIGludCBuKTsKKyovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2RlZmluZSBCQVNFX1kgNworI2RlZmluZSBNQVhfQ09MUyAxMDI0CisKK3N0YXRpYyBib29sCitRdWl0KGludCBjaCkKK3sKKyAgICByZXR1cm4gKGNoID09IEVSUiB8fCBjaCA9PSAncScgfHwgY2ggPT0gUVVJVCB8fCBjaCA9PSBFU0NBUEUpOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2luY2hzKGludCBsZXZlbCwgY2hhciAqKmFyZ3YsIFdJTkRPVyAqY2hyd2luLCBXSU5ET1cgKnN0cndpbikKK3sKKyAgICBXSU5ET1cgKnR4dGJveCA9IDA7CisgICAgV0lORE9XICp0eHR3aW4gPSAwOworICAgIEZJTEUgKmZwOworICAgIGludCBjaCwgajsKKyAgICBpbnQgdHh0X3ggPSAwLCB0eHRfeSA9IDA7CisgICAgaW50IGJhc2VfeTsKKyAgICBpbnQgbGltaXQ7CisgICAgY2h0eXBlIHRleHRbTUFYX0NPTFNdOworCisgICAgaWYgKGFyZ3ZbbGV2ZWxdID09IDApIHsKKwliZWVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChsZXZlbCA+IDEpIHsKKwl0eHRib3ggPSBuZXd3aW4oTElORVMgLSBCQVNFX1ksIENPTFMgLSBsZXZlbCwgQkFTRV9ZLCBsZXZlbCk7CisJYm94KHR4dGJveCwgMCwgMCk7CisJd25vdXRyZWZyZXNoKHR4dGJveCk7CisKKwl0eHR3aW4gPSBkZXJ3aW4odHh0Ym94LAorCQkJZ2V0bWF4eSh0eHRib3gpIC0gMiwKKwkJCWdldG1heHgodHh0Ym94KSAtIDIsCisJCQkxLCAxKTsKKwliYXNlX3kgPSAwOworICAgIH0gZWxzZSB7CisJdHh0d2luID0gc3Rkc2NyOworCWJhc2VfeSA9IEJBU0VfWTsKKyAgICB9CisKKyAgICBrZXlwYWQodHh0d2luLCBUUlVFKTsJLyogZW5hYmxlIGtleWJvYXJkIG1hcHBpbmcgKi8KKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgdHh0X3kgPSBiYXNlX3k7CisgICAgdHh0X3ggPSAwOworICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworICAgIGlmICgoZnAgPSBmb3Blbihhcmd2W2xldmVsXSwgInIiKSkgIT0gMCkgeworCXdoaWxlICgoaiA9IGZnZXRjKGZwKSkgIT0gRU9GKSB7CisJICAgIGlmICh3YWRkY2godHh0d2luLCBVQ2hhcihqKSkgIT0gT0spIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZmNsb3NlKGZwKTsKKyAgICB9IGVsc2UgeworCXdwcmludHcodHh0d2luLCAiQ2Fubm90IG9wZW46XG4lcyIsIGFyZ3ZbMV0pOworICAgIH0KKworICAgIHdoaWxlICghUXVpdChqID0gbXZ3Z2V0Y2godHh0d2luLCB0eHRfeSwgdHh0X3gpKSkgeworCXN3aXRjaCAoaikgeworCWNhc2UgS0VZX0RPV046CisJY2FzZSAnaic6CisJICAgIGlmICh0eHRfeSA8IGdldG1heHkodHh0d2luKSAtIDEpCisJCXR4dF95Kys7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9VUDoKKwljYXNlICdrJzoKKwkgICAgaWYgKHR4dF95ID4gYmFzZV95KQorCQl0eHRfeS0tOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfTEVGVDoKKwljYXNlICdoJzoKKwkgICAgaWYgKHR4dF94ID4gMCkKKwkJdHh0X3gtLTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1JJR0hUOgorCWNhc2UgJ2wnOgorCSAgICBpZiAodHh0X3ggPCBnZXRtYXh4KHR4dHdpbikgLSAxKQorCQl0eHRfeCsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIHRlc3RfaW5jaHMobGV2ZWwgKyAxLCBhcmd2LCBjaHJ3aW4sIHN0cndpbik7CisJICAgIGlmICh0eHRib3ggIT0gMCkgeworCQl0b3VjaHdpbih0eHRib3gpOworCQl3bm91dHJlZnJlc2godHh0Ym94KTsKKwkgICAgfSBlbHNlIHsKKwkJdG91Y2h3aW4odHh0d2luKTsKKwkJd25vdXRyZWZyZXNoKHR4dHdpbik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYmVlcCgpOworCSAgICBicmVhazsKKwl9CisKKwltdndwcmludHcoY2hyd2luLCAwLCAwLCAiY2hhcjoiKTsKKwl3Y2xydG9lb2woY2hyd2luKTsKKworCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworCSAgICBpZiAoKGNoID0gd2luY2godHh0d2luKSkgIT0gRVJSKSB7CisJCWlmICh3YWRkY2goY2hyd2luLCAoY2h0eXBlKSBjaCkgIT0gRVJSKSB7CisJCSAgICBmb3IgKGogPSB0eHRfeCArIDE7IGogPCBnZXRtYXh4KHR4dHdpbik7ICsraikgeworCQkJaWYgKChjaCA9IG12d2luY2godHh0d2luLCB0eHRfeSwgaikpICE9IEVSUikgeworCQkJICAgIGlmICh3YWRkY2goY2hyd2luLCAoY2h0eXBlKSBjaCkgPT0gRVJSKSB7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfSBlbHNlIHsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCisJICAgIGlmICgoY2ggPSBpbmNoKCkpICE9IEVSUikgeworCQlpZiAod2FkZGNoKGNocndpbiwgKGNodHlwZSkgY2gpICE9IEVSUikgeworCQkgICAgZm9yIChqID0gdHh0X3ggKyAxOyBqIDwgZ2V0bWF4eCh0eHR3aW4pOyArK2opIHsKKwkJCWlmICgoY2ggPSBtdmluY2godHh0X3ksIGopKSAhPSBFUlIpIHsKKwkJCSAgICBpZiAod2FkZGNoKGNocndpbiwgKGNodHlwZSkgY2gpID09IEVSUikgeworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCX0gZWxzZSB7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKwl3bm91dHJlZnJlc2goY2hyd2luKTsKKworCW12d3ByaW50dyhzdHJ3aW4sIDAsIDAsICJ0ZXh0OiIpOworCXdjbHJ0b2JvdChzdHJ3aW4pOworCisJbGltaXQgPSBnZXRtYXh4KHN0cndpbikgLSA1OworCisJaWYgKHR4dHdpbiAhPSBzdGRzY3IpIHsKKwkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCSAgICBpZiAod2luY2hzdHIodHh0d2luLCB0ZXh0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAwLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKHdpbmNobnN0cih0eHR3aW4sIHRleHQsIGxpbWl0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAxLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIGlmIChtdndpbmNoc3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCB0ZXh0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAyLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIGlmIChtdndpbmNobnN0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgdGV4dCwgbGltaXQpICE9IEVSUikgeworCQltdndhZGRjaHN0cihzdHJ3aW4sIDMsIDUsIHRleHQpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCSAgICBpZiAoaW5jaHN0cih0ZXh0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAwLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKGluY2huc3RyKHRleHQsIGxpbWl0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAxLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIGlmIChtdmluY2hzdHIodHh0X3ksIHR4dF94LCB0ZXh0KSAhPSBFUlIpIHsKKwkJbXZ3YWRkY2hzdHIoc3Ryd2luLCAyLCA1LCB0ZXh0KTsKKwkgICAgfQorCisJICAgIGlmIChtdmluY2huc3RyKHR4dF95LCB0eHRfeCwgdGV4dCwgbGltaXQpICE9IEVSUikgeworCQltdndhZGRjaHN0cihzdHJ3aW4sIDMsIDUsIHRleHQpOworCSAgICB9CisJfQorCisJd25vdXRyZWZyZXNoKHN0cndpbik7CisgICAgfQorICAgIGlmIChsZXZlbCA+IDEpIHsKKwlkZWx3aW4odHh0d2luKTsKKwlkZWx3aW4odHh0Ym94KTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdJTkRPVyAqY2hyYm94OworICAgIFdJTkRPVyAqY2hyd2luOworICAgIFdJTkRPVyAqc3Ryd2luOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaWYgKGFyZ2MgPCAyKSB7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgZmlsZVxuIiwgYXJndlswXSk7CisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisKKyAgICBjaHJib3ggPSBkZXJ3aW4oc3Rkc2NyLCBCQVNFX1ksIENPTFMsIDAsIDApOworICAgIGJveChjaHJib3gsIDAsIDApOworICAgIHdub3V0cmVmcmVzaChjaHJib3gpOworCisgICAgY2hyd2luID0gZGVyd2luKGNocmJveCwgMSwgQ09MUyAtIDIsIDEsIDEpOworICAgIHN0cndpbiA9IGRlcndpbihjaHJib3gsIDQsIENPTFMgLSAyLCAyLCAxKTsKKworICAgIHRlc3RfaW5jaHMoMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvaW5zX3dpZGUuYyBiL25jdXJzZXMtNS43L3Rlc3QvaW5zX3dpZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RhZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9pbnNfd2lkZS5jCkBAIC0wLDAgKzEsNTI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogaW5zX3dpZGUuYyx2IDEuOSAyMDA3LzA3LzIxIDE3OjQxOjU1IHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIHRoZSB3aW5zX3dzdHIoKSBhbmQgd2luc193Y2ggZnVuY3Rpb25zLgorICogVGhvbWFzIERpY2tleSAtIDIwMDIvMTEvMjMKKyAqCisgKiBOb3RlOiB0byBwcm92aWRlIGlucHV0cyBmb3IgKmluc193Y2goKSwgd2UgdXNlIHNldGNjaGFyKCkuICBBIHF1aXJrIG9mIHRoZQorICogWC9PcGVuIGRlZmluaXRpb24gZm9yIHRoYXQgZnVuY3Rpb24gaXMgdGhhdCB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vCisgKiBjaGFyYWN0ZXJzIHdpdGggbmVnYXRpdmUgd2lkdGguICBBbnkgY29udHJvbCBjaGFyYWN0ZXIgKHN1Y2ggYXMgdGFiKSBmYWxscworICogaW50byB0aGF0IGNhdGVnb3J5LiAgU28gaXQgZm9sbG93cyB0aGF0ICppbnNfd2NoKCkgY2Fubm90IHJlbmRlciBhIHRhYgorICogY2hhcmFjdGVyIGJlY2F1c2UgdGhlcmUgaXMgbm8gbGVnYWwgd2F5IHRvIGNvbnN0cnVjdCBhIGNjaGFyX3QgY29udGFpbmluZworICogb25lLiAgWC9PcGVuIGRvZXMgbm90IGRvY3VtZW50IHRoaXMsIGFuZCBpdCB3b3VsZCBiZSBsb2dpY2FsIHRvIGFzc3VtZSB0aGF0CisgKiAqaW5zX3dzdHIoKSBoYXMgdGhlIHNhbWUgbGltaXRhdGlvbiwgYnV0IGl0IHVzZXMgYSB3Y2hhcl90IHN0cmluZyBkaXJlY3RseSwKKyAqIGFuZCBkb2VzIG5vdCBkb2N1bWVudCBob3cgdGFicyBhcmUgaGFuZGxlZC4KKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCisvKiBkZWZpbml0aW9ucyB0byBtYWtlIGl0IHNpbXBsZXIgdG8gY29tcGFyZSB3aXRoIGluc2VydHMuYyAqLworI2RlZmluZSBJbnNOU3RyICAgIGluc19ud3N0cgorI2RlZmluZSBJbnNTdHIgICAgIGluc193c3RyCisjZGVmaW5lIE12SW5zTlN0ciAgbXZpbnNfbndzdHIKKyNkZWZpbmUgTXZJbnNTdHIgICBtdmluc193c3RyCisjZGVmaW5lIE12V0luc05TdHIgbXZ3aW5zX253c3RyCisjZGVmaW5lIE12V0luc1N0ciAgbXZ3aW5zX3dzdHIKKyNkZWZpbmUgV0luc05TdHIgICB3aW5zX253c3RyCisjZGVmaW5lIFdJbnNTdHIgICAgd2luc193c3RyCisKKyNkZWZpbmUgTVlfVEFCU0laRSA4CisKK3R5cGVkZWYgZW51bSB7CisgICAgb0RlZmF1bHQgPSAwLAorICAgIG9Nb3ZlID0gMSwKKyAgICBvV2luZG93ID0gMiwKKyAgICBvTW92ZVdpbmRvdyA9IDMKK30gT3B0aW9uczsKKworc3RhdGljIGJvb2wgbV9vcHQgPSBGQUxTRTsKK3N0YXRpYyBib29sIHdfb3B0ID0gRkFMU0U7CitzdGF0aWMgaW50IG5fb3B0ID0gLTE7CisKK3N0YXRpYyB2b2lkCitsZWdlbmQoV0lORE9XICp3aW4sIGludCBsZXZlbCwgT3B0aW9ucyBzdGF0ZSwgd2NoYXJfdCAqYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworICAgIE5DVVJTRVNfQ09OU1QgY2hhciAqc2hvd3N0YXRlOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBvRGVmYXVsdDoKKwlzaG93c3RhdGUgPSAiIjsKKwlicmVhazsKKyAgICBjYXNlIG9Nb3ZlOgorCXNob3dzdGF0ZSA9ICIgKG12WFhYKSI7CisJYnJlYWs7CisgICAgY2FzZSBvV2luZG93OgorCXNob3dzdGF0ZSA9ICIgKHdpblhYWCkiOworCWJyZWFrOworICAgIGNhc2Ugb01vdmVXaW5kb3c6CisJc2hvd3N0YXRlID0gIiAobXZ3aW5YWFgpIjsKKwlicmVhazsKKyAgICB9CisKKyAgICB3bW92ZSh3aW4sIDAsIDApOworICAgIHdwcmludHcod2luLAorCSAgICAiVGhlIFN0cmluZ3MvQ2hhcnMgZGlzcGxheXMgc2hvdWxkIG1hdGNoLiAgRW50ZXIgYW55IGNoYXJhY3RlcnMsIGV4Y2VwdDpcbiIpOworICAgIHdwcmludHcod2luLAorCSAgICAiZG93bi1hcnJvdyBvciBeTiB0byByZXBlYXQgb24gbmV4dCBsaW5lLCAndycgZm9yIGlubmVyIHdpbmRvdywgJ3EnIHRvIGV4aXQuXG4iKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICB3cHJpbnR3KHdpbiwgIkxldmVsICVkLCVzIGluc2VydGVkICVkIGNoYXJhY3RlcnMgPCIsIGxldmVsLAorCSAgICBzaG93c3RhdGUsIGxlbmd0aCk7CisgICAgd2FkZHdzdHIod2luLCBidWZmZXIpOworICAgIHdhZGRzdHIod2luLCAiPiIpOworfQorCitzdGF0aWMgaW50CitDb2xPZih3Y2hhcl90ICpidWZmZXIsIGludCBsZW5ndGgsIGludCBtYXJnaW4pCit7CisgICAgaW50IG47CisgICAgaW50IHJlc3VsdDsKKworICAgIGZvciAobiA9IDAsIHJlc3VsdCA9IG1hcmdpbiArIDE7IG4gPCBsZW5ndGg7ICsrbikgeworCWludCBjaCA9IGJ1ZmZlcltuXTsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnXG4nOgorCSAgICAvKiBhY3R1YWxseSBuZXdsaW5lIHNob3VsZCBjbGVhciB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lCisJICAgICAqIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUgLSBidXQgdGhhdCBzZWVtcyBhIGxpdHRsZSBhd2t3YXJkCisJICAgICAqIGluIHRoaXMgZXhhbXBsZS4KKwkgICAgICovCisJY2FzZSAnXHInOgorCSAgICByZXN1bHQgPSAwOworCSAgICBicmVhazsKKwljYXNlICdcYic6CisJICAgIGlmIChyZXN1bHQgPiAwKQorCQktLXJlc3VsdDsKKwkgICAgYnJlYWs7CisJY2FzZSAnXHQnOgorCSAgICByZXN1bHQgKz0gKE1ZX1RBQlNJWkUgLSAocmVzdWx0ICUgTVlfVEFCU0laRSkpOworCSAgICBicmVhazsKKwljYXNlICdcMTc3JzoKKwkgICAgcmVzdWx0ICs9IDI7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHJlc3VsdCArPSB3Y3dpZHRoKGNoKTsKKwkgICAgaWYgKGNoIDwgMzIpCisJCSsrcmVzdWx0OworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK0NvbnZlcnRDaChjaHR5cGUgc291cmNlLCBjY2hhcl90ICp0YXJnZXQpCit7CisgICAgd2NoYXJfdCB0bXBfd2NoYXJbMl07CisKKyAgICB0bXBfd2NoYXJbMF0gPSBzb3VyY2U7CisgICAgdG1wX3djaGFyWzFdID0gMDsKKyAgICBpZiAoc2V0Y2NoYXIodGFyZ2V0LCB0bXBfd2NoYXIsIEFfTk9STUFMLCAwLCAodm9pZCAqKSAwKSA9PSBFUlIpIHsKKwliZWVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGludAorTXZXSW5zQ2goV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2h0eXBlIGNoKQoreworICAgIGludCBjb2RlOworICAgIGNjaGFyX3QgdG1wX2NjaGFyOworCisgICAgaWYgKENvbnZlcnRDaChjaCwgJnRtcF9jY2hhcikpIHsKKwljb2RlID0gbXZ3aW5zX3djaCh3aW4sIHksIHgsICZ0bXBfY2NoYXIpOworICAgIH0gZWxzZSB7CisJY29kZSA9IG12d2luc2NoKHdpbiwgeSwgeCwgY2gpOworICAgIH0KKyAgICByZXR1cm4gY29kZTsKK30KKworc3RhdGljIGludAorTXZJbnNDaChpbnQgeSwgaW50IHgsIGNodHlwZSBjaCkKK3sKKyAgICBpbnQgY29kZTsKKyAgICBjY2hhcl90IHRtcF9jY2hhcjsKKworICAgIGlmIChDb252ZXJ0Q2goY2gsICZ0bXBfY2NoYXIpKSB7CisJY29kZSA9IG12aW5zX3djaCh5LCB4LCAmdG1wX2NjaGFyKTsKKyAgICB9IGVsc2UgeworCWNvZGUgPSBtdmluc2NoKHksIHgsIGNoKTsKKyAgICB9CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK3N0YXRpYyBpbnQKK1dJbnNDaChXSU5ET1cgKndpbiwgY2h0eXBlIGNoKQoreworICAgIGludCBjb2RlOworICAgIGNjaGFyX3QgdG1wX2NjaGFyOworCisgICAgaWYgKENvbnZlcnRDaChjaCwgJnRtcF9jY2hhcikpIHsKKwljb2RlID0gd2luc193Y2god2luLCAmdG1wX2NjaGFyKTsKKyAgICB9IGVsc2UgeworCWNvZGUgPSB3aW5zY2god2luLCBjaCk7CisgICAgfQorICAgIHJldHVybiBjb2RlOworfQorCitzdGF0aWMgaW50CitJbnNDaChjaHR5cGUgY2gpCit7CisgICAgaW50IGNvZGU7CisgICAgY2NoYXJfdCB0bXBfY2NoYXI7CisKKyAgICBpZiAoQ29udmVydENoKGNoLCAmdG1wX2NjaGFyKSkgeworCWNvZGUgPSBpbnNfd2NoKCZ0bXBfY2NoYXIpOworICAgIH0gZWxzZSB7CisJY29kZSA9IGluc2NoKGNoKTsKKyAgICB9CisgICAgcmV0dXJuIGNvZGU7Cit9CisKKyNkZWZpbmUgTEVOKG4pICgobGVuZ3RoIC0gKG4pID4gbl9vcHQpID8gbl9vcHQgOiAobGVuZ3RoIC0gKG4pKSkKK3N0YXRpYyB2b2lkCit0ZXN0X2luc2VydHMoaW50IGxldmVsKQoreworICAgIHN0YXRpYyBib29sIGZpcnN0ID0gVFJVRTsKKworICAgIHdpbnRfdCBjaDsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgbGltaXQ7CisgICAgaW50IHJvdyA9IDE7CisgICAgaW50IGNvbDsKKyAgICBpbnQgcm93MiwgY29sMjsKKyAgICBpbnQgbGVuZ3RoOworICAgIHdjaGFyX3QgYnVmZmVyW0JVRlNJWl07CisgICAgV0lORE9XICpsb29rID0gMDsKKyAgICBXSU5ET1cgKndvcmsgPSAwOworICAgIFdJTkRPVyAqc2hvdyA9IDA7CisgICAgaW50IG1hcmdpbiA9ICgyICogTVlfVEFCU0laRSkgLSAxOworICAgIE9wdGlvbnMgb3B0aW9uID0gKChtX29wdCA/IG9Nb3ZlIDogb0RlZmF1bHQpCisJCSAgICAgIHwgKCh3X29wdCB8fCAobGV2ZWwgPiAwKSkgPyBvV2luZG93IDogb0RlZmF1bHQpKTsKKworICAgIGlmIChmaXJzdCkgeworCXN0YXRpYyBjaGFyIGNtZFs4MF07CisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisJcHV0ZW52KHN0cmNweShjbWQsICJUQUJTSVpFPTgiKSk7CisKKwlpbml0c2NyKCk7CisJKHZvaWQpIGNicmVhaygpOwkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisJKHZvaWQpIG5vZWNobygpOwkvKiBkb24ndCBlY2hvIGlucHV0ICovCisJa2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgfQorCisgICAgbGltaXQgPSBMSU5FUyAtIDU7CisgICAgaWYgKGxldmVsID4gMCkgeworCWxvb2sgPSBuZXd3aW4obGltaXQsIENPTFMgLSAoMiAqIChsZXZlbCAtIDEpKSwgMCwgbGV2ZWwgLSAxKTsKKwl3b3JrID0gbmV3d2luKGxpbWl0IC0gMiwgQ09MUyAtICgyICogbGV2ZWwpLCAxLCBsZXZlbCk7CisJc2hvdyA9IG5ld3dpbig0LCBDT0xTLCBsaW1pdCArIDEsIDApOworCWJveChsb29rLCAwLCAwKTsKKwl3bm91dHJlZnJlc2gobG9vayk7CisJbGltaXQgLT0gMjsKKyAgICB9IGVsc2UgeworCXdvcmsgPSBzdGRzY3I7CisJc2hvdyA9IGRlcndpbihzdGRzY3IsIDQsIENPTFMsIGxpbWl0ICsgMSwgMCk7CisgICAgfQorICAgIGtleXBhZCh3b3JrLCBUUlVFKTsKKworICAgIGZvciAoY29sID0gbWFyZ2luICsgMTsgY29sIDwgQ09MUzsgY29sICs9IE1ZX1RBQlNJWkUpCisJbXZ3dmxpbmUod29yaywgcm93LCBjb2wsICcuJywgbGltaXQgLSAyKTsKKworICAgIG12d3ZsaW5lKHdvcmssIHJvdywgbWFyZ2luLCBBQ1NfVkxJTkUsIGxpbWl0IC0gMik7CisgICAgbXZ3dmxpbmUod29yaywgcm93LCBtYXJnaW4gKyAxLCBBQ1NfVkxJTkUsIGxpbWl0IC0gMik7CisgICAgbGltaXQgLz0gMjsKKworICAgIG12d2FkZHN0cih3b3JrLCAxLCAyLCAiU3RyaW5nIik7CisgICAgbXZ3YWRkc3RyKHdvcmssIGxpbWl0ICsgMSwgMiwgIkNoYXJzIik7CisgICAgd25vdXRyZWZyZXNoKHdvcmspOworCisgICAgYnVmZmVyW2xlbmd0aCA9IDBdID0gJ1wwJzsKKyAgICBsZWdlbmQoc2hvdywgbGV2ZWwsIG9wdGlvbiwgYnVmZmVyLCBsZW5ndGgpOworICAgIHdub3V0cmVmcmVzaChzaG93KTsKKworICAgIGRvdXBkYXRlKCk7CisKKyAgICAvKgorICAgICAqIFNob3cgdGhlIGNoYXJhY3RlcnMgaW5zZXJ0ZWQgaW4gY29sb3IsIHRvIGRpc3Rpbmd1aXNoIGZyb20gdGhvc2UgdGhhdAorICAgICAqIGFyZSBzaGlmdGVkLgorICAgICAqLworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworCWluaXRfcGFpcigxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJd2JrZ2RzZXQod29yaywgQ09MT1JfUEFJUigxKSB8ICcgJyk7CisgICAgfQorCisgICAgd2hpbGUgKChjb2RlID0gd2dldF93Y2god29yaywgJmNoKSkgIT0gRVJSKSB7CisKKwlpZiAoY29kZSA9PSBLRVlfQ09ERV9ZRVMpIHsKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlIEtFWV9ET1dOOgorCQljaCA9IENUUkwoJ04nKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX0JBQ0tTUEFDRToKKwkJY2ggPSAnXGInOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYmVlcCgpOworCQljb250aW51ZTsKKwkgICAgfQorCX0gZWxzZSBpZiAoY29kZSA9PSBFUlIpIHsKKwkgICAgYmVlcCgpOworCSAgICBicmVhazsKKwl9CisJaWYgKGNoID09ICdxJykKKwkgICAgYnJlYWs7CisKKwl3bW92ZSh3b3JrLCByb3csIG1hcmdpbiArIDEpOworCXN3aXRjaCAoY2gpIHsKKwljYXNlICd3JzoKKwkgICAgdGVzdF9pbnNlcnRzKGxldmVsICsgMSk7CisKKwkgICAgdG91Y2h3aW4obG9vayk7CisJICAgIHRvdWNod2luKHdvcmspOworCSAgICB0b3VjaHdpbihzaG93KTsKKworCSAgICB3bm91dHJlZnJlc2gobG9vayk7CisJICAgIHdub3V0cmVmcmVzaCh3b3JrKTsKKwkgICAgd25vdXRyZWZyZXNoKHNob3cpOworCisJICAgIGRvdXBkYXRlKCk7CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnTicpOgorCSAgICBpZiAocm93IDwgbGltaXQpIHsKKwkJKytyb3c7CisJCS8qIHB1dCB0aGUgd2hvbGUgc3RyaW5nIGluLCBhbGwgYXQgb25jZSAqLworCQljb2wyID0gbWFyZ2luICsgMTsKKwkJc3dpdGNoIChvcHRpb24pIHsKKwkJY2FzZSBvRGVmYXVsdDoKKwkJICAgIGlmIChuX29wdCA+IDEpIHsKKwkJCWZvciAoY29sID0gMDsgY29sIDwgbGVuZ3RoOyBjb2wgKz0gbl9vcHQpIHsKKwkJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCQkgICAgaWYgKG1vdmUocm93LCBjb2wyKSAhPSBFUlIpIHsKKwkJCQlJbnNOU3RyKGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0gZWxzZSB7CisJCQlpZiAobW92ZShyb3csIGNvbDIpICE9IEVSUikgeworCQkJICAgIEluc1N0cihidWZmZXIpOworCQkJfQorCQkgICAgfQorCQkgICAgYnJlYWs7CisJCWNhc2Ugb01vdmU6CisJCSAgICBpZiAobl9vcHQgPiAxKSB7CisJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGxlbmd0aDsgY29sICs9IG5fb3B0KSB7CisJCQkgICAgY29sMiA9IENvbE9mKGJ1ZmZlciwgY29sLCBtYXJnaW4pOworCQkJICAgIE12SW5zTlN0cihyb3csIGNvbDIsIGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJfQorCQkgICAgfSBlbHNlIHsKKwkJCU12SW5zU3RyKHJvdywgY29sMiwgYnVmZmVyKTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlIG9XaW5kb3c6CisJCSAgICBpZiAobl9vcHQgPiAxKSB7CisJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGxlbmd0aDsgY29sICs9IG5fb3B0KSB7CisJCQkgICAgY29sMiA9IENvbE9mKGJ1ZmZlciwgY29sLCBtYXJnaW4pOworCQkJICAgIGlmICh3bW92ZSh3b3JrLCByb3csIGNvbDIpICE9IEVSUikgeworCQkJCVdJbnNOU3RyKHdvcmssIGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0gZWxzZSB7CisJCQlpZiAod21vdmUod29yaywgcm93LCBjb2wyKSAhPSBFUlIpIHsKKwkJCSAgICBXSW5zU3RyKHdvcmssIGJ1ZmZlcik7CisJCQl9CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJY2FzZSBvTW92ZVdpbmRvdzoKKwkJICAgIGlmIChuX29wdCA+IDEpIHsKKwkJCWZvciAoY29sID0gMDsgY29sIDwgbGVuZ3RoOyBjb2wgKz0gbl9vcHQpIHsKKwkJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCQkgICAgTXZXSW5zTlN0cih3b3JrLCByb3csIGNvbDIsIGJ1ZmZlciArIGNvbCwgTEVOKGNvbCkpOworCQkJfQorCQkgICAgfSBlbHNlIHsKKwkJCU12V0luc1N0cih3b3JrLCByb3csIGNvbDIsIGJ1ZmZlcik7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCisJCS8qIGRvIHRoZSBjb3JyZXNwb25kaW5nIHNpbmdsZS1jaGFyYWN0ZXIgaW5zZXJ0aW9uICovCisJCXJvdzIgPSBsaW1pdCArIHJvdzsKKwkJZm9yIChjb2wgPSAwOyBjb2wgPCBsZW5ndGg7ICsrY29sKSB7CisJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCSAgICBzd2l0Y2ggKG9wdGlvbikgeworCQkgICAgY2FzZSBvRGVmYXVsdDoKKwkJCWlmIChtb3ZlKHJvdzIsIGNvbDIpICE9IEVSUikgeworCQkJICAgIEluc0NoKChjaHR5cGUpIGJ1ZmZlcltjb2xdKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgY2FzZSBvTW92ZToKKwkJCU12SW5zQ2gocm93MiwgY29sMiwgKGNodHlwZSkgYnVmZmVyW2NvbF0pOworCQkJYnJlYWs7CisJCSAgICBjYXNlIG9XaW5kb3c6CisJCQlpZiAod21vdmUod29yaywgcm93MiwgY29sMikgIT0gRVJSKSB7CisJCQkgICAgV0luc0NoKHdvcmssIChjaHR5cGUpIGJ1ZmZlcltjb2xdKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgY2FzZSBvTW92ZVdpbmRvdzoKKwkJCU12V0luc0NoKHdvcmssIHJvdzIsIGNvbDIsIChjaHR5cGUpIGJ1ZmZlcltjb2xdKTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9CQUNLU1BBQ0U6CisJICAgIGNoID0gJ1xiJzsKKwkgICAgLyogRkFMTFRIUlUgKi8KKwlkZWZhdWx0OgorCSAgICBidWZmZXJbbGVuZ3RoKytdID0gY2g7CisJICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKKworCSAgICAvKiBwdXQgdGhlIHN0cmluZyBpbiwgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgKi8KKwkgICAgY29sID0gQ29sT2YoYnVmZmVyLCBsZW5ndGggLSAxLCBtYXJnaW4pOworCSAgICBzd2l0Y2ggKG9wdGlvbikgeworCSAgICBjYXNlIG9EZWZhdWx0OgorCQlpZiAobW92ZShyb3csIGNvbCkgIT0gRVJSKSB7CisJCSAgICBJbnNTdHIoYnVmZmVyICsgbGVuZ3RoIC0gMSk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2Ugb01vdmU6CisJCU12SW5zU3RyKHJvdywgY29sLCBidWZmZXIgKyBsZW5ndGggLSAxKTsKKwkJYnJlYWs7CisJICAgIGNhc2Ugb1dpbmRvdzoKKwkJaWYgKHdtb3ZlKHdvcmssIHJvdywgY29sKSAhPSBFUlIpIHsKKwkJICAgIFdJbnNTdHIod29yaywgYnVmZmVyICsgbGVuZ3RoIC0gMSk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2Ugb01vdmVXaW5kb3c6CisJCU12V0luc1N0cih3b3JrLCByb3csIGNvbCwgYnVmZmVyICsgbGVuZ3RoIC0gMSk7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgLyogZG8gdGhlIGNvcnJlc3BvbmRpbmcgc2luZ2xlLWNoYXJhY3RlciBpbnNlcnRpb24gKi8KKwkgICAgc3dpdGNoIChvcHRpb24pIHsKKwkgICAgY2FzZSBvRGVmYXVsdDoKKwkJaWYgKG1vdmUobGltaXQgKyByb3csIGNvbCkgIT0gRVJSKSB7CisJCSAgICBJbnNDaChjaCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2Ugb01vdmU6CisJCU12SW5zQ2gobGltaXQgKyByb3csIGNvbCwgY2gpOworCQlicmVhazsKKwkgICAgY2FzZSBvV2luZG93OgorCQlpZiAod21vdmUod29yaywgbGltaXQgKyByb3csIGNvbCkgIT0gRVJSKSB7CisJCSAgICBXSW5zQ2god29yaywgY2gpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIG9Nb3ZlV2luZG93OgorCQlNdldJbnNDaCh3b3JrLCBsaW1pdCArIHJvdywgY29sLCBjaCk7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgd25vdXRyZWZyZXNoKHdvcmspOworCisJICAgIGxlZ2VuZChzaG93LCBsZXZlbCwgb3B0aW9uLCBidWZmZXIsIGxlbmd0aCk7CisJICAgIHdub3V0cmVmcmVzaChzaG93KTsKKworCSAgICBkb3VwZGF0ZSgpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmIChsZXZlbCA+IDApIHsKKwlkZWx3aW4oc2hvdyk7CisJZGVsd2luKHdvcmspOworCWRlbHdpbihsb29rKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICp0YmxbXSA9CisgICAgeworCSJVc2FnZTogaW5zZXJ0cyBbb3B0aW9uc10iCisJLCIiCisJLCJPcHRpb25zOiIKKwksIiAgLW4gTlVNICBsaW1pdCBzdHJpbmctaW5zZXJ0cyB0byBOVU0gYnl0ZXMgb24gXk4gcmVwbGF5IgorCSwiICAtbSAgICAgIHBlcmZvcm0gd21vdmUvbW92ZSBzZXBhcmF0ZWx5IGZyb20gaW5zZXJ0LWZ1bmN0aW9ucyIKKwksIiAgLXcgICAgICB1c2Ugd2luZG93LXBhcmFtZXRlciBldmVuIHdoZW4gc3Rkc2NyIHdvdWxkIGJlIGltcGxpZWQiCisgICAgfTsKKyAgICB1bnNpZ25lZCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YodGJsKTsgKytuKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHRibFtuXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IGNoOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAibW46dyIpKSAhPSAtMSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdtJzoKKwkgICAgbV9vcHQgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgbl9vcHQgPSBhdG9pKG9wdGFyZyk7CisJICAgIGlmIChuX29wdCA9PSAwKQorCQluX29wdCA9IC0xOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkgICAgd19vcHQgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmIChvcHRpbmQgPCBhcmdjKQorCXVzYWdlKCk7CisKKyAgICB0ZXN0X2luc2VydHMoMCk7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgd2lkZS1uY3Vyc2VzIGxpYnJhcnlcbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvaW5zZXJ0cy5jIGIvbmN1cnNlcy01LjcvdGVzdC9pbnNlcnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4Nzg4YQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvaW5zZXJ0cy5jCkBAIC0wLDAgKzEsNDQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYsMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogaW5zZXJ0cy5jLHYgMS4xOCAyMDA3LzA3LzIxIDE3OjQxOjU1IHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIHRoZSB3aW5zc3RyKCkgYW5kIHdpbnNjaCBmdW5jdGlvbnMuCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwMi8xMC8xOQorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIEhBVkVfV0lOU1NUUgorCisjZGVmaW5lIEluc05TdHIgICAgaW5zbnN0cgorI2RlZmluZSBJbnNTdHIgICAgIGluc3N0cgorI2RlZmluZSBNdkluc05TdHIgIG12aW5zbnN0cgorI2RlZmluZSBNdkluc1N0ciAgIG12aW5zc3RyCisjZGVmaW5lIE12V0luc05TdHIgbXZ3aW5zbnN0cgorI2RlZmluZSBNdldJbnNTdHIgIG12d2luc3N0cgorI2RlZmluZSBXSW5zTlN0ciAgIHdpbnNuc3RyCisjZGVmaW5lIFdJbnNTdHIgICAgd2luc3N0cgorCisjZGVmaW5lIEluc0NoICAgICAgaW5zY2gKKyNkZWZpbmUgTXZJbnNDaCAgICBtdmluc2NoCisjZGVmaW5lIE12V0luc0NoICAgbXZ3aW5zY2gKKyNkZWZpbmUgV0luc0NoICAgICB3aW5zY2gKKworI2RlZmluZSBNWV9UQUJTSVpFIDgKKwordHlwZWRlZiBlbnVtIHsKKyAgICBvRGVmYXVsdCA9IDAsCisgICAgb01vdmUgPSAxLAorICAgIG9XaW5kb3cgPSAyLAorICAgIG9Nb3ZlV2luZG93ID0gMworfSBPcHRpb25zOworCitzdGF0aWMgYm9vbCBtX29wdCA9IEZBTFNFOworc3RhdGljIGJvb2wgd19vcHQgPSBGQUxTRTsKK3N0YXRpYyBpbnQgbl9vcHQgPSAtMTsKKworc3RhdGljIHZvaWQKK2xlZ2VuZChXSU5ET1cgKndpbiwgaW50IGxldmVsLCBPcHRpb25zIHN0YXRlLCBjaGFyICpidWZmZXIsIGludCBsZW5ndGgpCit7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpzaG93c3RhdGU7CisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIG9EZWZhdWx0OgorCXNob3dzdGF0ZSA9ICIiOworCWJyZWFrOworICAgIGNhc2Ugb01vdmU6CisJc2hvd3N0YXRlID0gIiAobXZYWFgpIjsKKwlicmVhazsKKyAgICBjYXNlIG9XaW5kb3c6CisJc2hvd3N0YXRlID0gIiAod2luWFhYKSI7CisJYnJlYWs7CisgICAgY2FzZSBvTW92ZVdpbmRvdzoKKwlzaG93c3RhdGUgPSAiIChtdndpblhYWCkiOworCWJyZWFrOworICAgIH0KKworICAgIHdtb3ZlKHdpbiwgMCwgMCk7CisgICAgd3ByaW50dyh3aW4sCisJICAgICJUaGUgU3RyaW5ncy9DaGFycyBkaXNwbGF5cyBzaG91bGQgbWF0Y2guICBFbnRlciBhbnkgY2hhcmFjdGVycywgZXhjZXB0OlxuIik7CisgICAgd3ByaW50dyh3aW4sCisJICAgICJkb3duLWFycm93IG9yIF5OIHRvIHJlcGVhdCBvbiBuZXh0IGxpbmUsICd3JyBmb3IgaW5uZXIgd2luZG93LCAncScgdG8gZXhpdC5cbiIpOworICAgIHdjbHJ0b2VvbCh3aW4pOworICAgIHdwcmludHcod2luLCAiTGV2ZWwgJWQsJXMgaW5zZXJ0ZWQgJWQgY2hhcmFjdGVycyA8JXM+IiwgbGV2ZWwsCisJICAgIHNob3dzdGF0ZSwgbGVuZ3RoLCBidWZmZXIpOworfQorCitzdGF0aWMgaW50CitDb2xPZihjaGFyICpidWZmZXIsIGludCBsZW5ndGgsIGludCBtYXJnaW4pCit7CisgICAgaW50IG47CisgICAgaW50IHJlc3VsdDsKKworICAgIGZvciAobiA9IDAsIHJlc3VsdCA9IG1hcmdpbiArIDE7IG4gPCBsZW5ndGg7ICsrbikgeworCWludCBjaCA9IFVDaGFyKGJ1ZmZlcltuXSk7CisJc3dpdGNoIChjaCkgeworCWNhc2UgJ1xuJzoKKwkgICAgLyogYWN0dWFsbHkgbmV3bGluZSBzaG91bGQgY2xlYXIgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZQorCSAgICAgKiBhbmQgbW92ZSB0byB0aGUgbmV4dCBsaW5lIC0gYnV0IHRoYXQgc2VlbXMgYSBsaXR0bGUgYXdrd2FyZAorCSAgICAgKiBpbiB0aGlzIGV4YW1wbGUuCisJICAgICAqLworCWNhc2UgJ1xyJzoKKwkgICAgcmVzdWx0ID0gMDsKKwkgICAgYnJlYWs7CisJY2FzZSAnXGInOgorCSAgICBpZiAocmVzdWx0ID4gMCkKKwkJLS1yZXN1bHQ7CisJICAgIGJyZWFrOworCWNhc2UgJ1x0JzoKKwkgICAgcmVzdWx0ICs9IChNWV9UQUJTSVpFIC0gKHJlc3VsdCAlIE1ZX1RBQlNJWkUpKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnXDE3Nyc6CisJICAgIHJlc3VsdCArPSAyOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICArK3Jlc3VsdDsKKwkgICAgaWYgKGNoIDwgMzIpCisJCSsrcmVzdWx0OworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgTEVOKG4pICgobGVuZ3RoIC0gKG4pID4gbl9vcHQpID8gbl9vcHQgOiAobGVuZ3RoIC0gKG4pKSkKK3N0YXRpYyB2b2lkCit0ZXN0X2luc2VydHMoaW50IGxldmVsKQoreworICAgIHN0YXRpYyBib29sIGZpcnN0ID0gVFJVRTsKKworICAgIGludCBjaDsKKyAgICBpbnQgbGltaXQ7CisgICAgaW50IHJvdyA9IDE7CisgICAgaW50IGNvbDsKKyAgICBpbnQgcm93MiwgY29sMjsKKyAgICBpbnQgbGVuZ3RoOworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisgICAgV0lORE9XICpsb29rID0gMDsKKyAgICBXSU5ET1cgKndvcmsgPSAwOworICAgIFdJTkRPVyAqc2hvdyA9IDA7CisgICAgaW50IG1hcmdpbiA9ICgyICogTVlfVEFCU0laRSkgLSAxOworICAgIE9wdGlvbnMgb3B0aW9uID0gKE9wdGlvbnMpICgodW5zaWduZWQpIChtX29wdAorCQkJCQkgICAgPyBvTW92ZQorCQkJCQkgICAgOiBvRGVmYXVsdCkKKwkJCQl8ICh1bnNpZ25lZCkgKCh3X29wdCB8fCAobGV2ZWwgPiAwKSkKKwkJCQkJICAgICAgPyBvV2luZG93CisJCQkJCSAgICAgIDogb0RlZmF1bHQpKTsKKworICAgIGlmIChmaXJzdCkgeworCXN0YXRpYyBjaGFyIGNtZFs4MF07CisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisJcHV0ZW52KHN0cmNweShjbWQsICJUQUJTSVpFPTgiKSk7CisKKwlpbml0c2NyKCk7CisJKHZvaWQpIGNicmVhaygpOwkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisJKHZvaWQpIG5vZWNobygpOwkvKiBkb24ndCBlY2hvIGlucHV0ICovCisJa2V5cGFkKHN0ZHNjciwgVFJVRSk7CisgICAgfQorCisgICAgbGltaXQgPSBMSU5FUyAtIDU7CisgICAgaWYgKGxldmVsID4gMCkgeworCWxvb2sgPSBuZXd3aW4obGltaXQsIENPTFMgLSAoMiAqIChsZXZlbCAtIDEpKSwgMCwgbGV2ZWwgLSAxKTsKKwl3b3JrID0gbmV3d2luKGxpbWl0IC0gMiwgQ09MUyAtICgyICogbGV2ZWwpLCAxLCBsZXZlbCk7CisJc2hvdyA9IG5ld3dpbig0LCBDT0xTLCBsaW1pdCArIDEsIDApOworCWJveChsb29rLCAwLCAwKTsKKwl3bm91dHJlZnJlc2gobG9vayk7CisJbGltaXQgLT0gMjsKKyAgICB9IGVsc2UgeworCXdvcmsgPSBzdGRzY3I7CisJc2hvdyA9IGRlcndpbihzdGRzY3IsIDQsIENPTFMsIGxpbWl0ICsgMSwgMCk7CisgICAgfQorICAgIGtleXBhZCh3b3JrLCBUUlVFKTsKKworICAgIGZvciAoY29sID0gbWFyZ2luICsgMTsgY29sIDwgQ09MUzsgY29sICs9IE1ZX1RBQlNJWkUpCisJbXZ3dmxpbmUod29yaywgcm93LCBjb2wsICcuJywgbGltaXQgLSAyKTsKKworICAgIG12d3ZsaW5lKHdvcmssIHJvdywgbWFyZ2luLCBBQ1NfVkxJTkUsIGxpbWl0IC0gMik7CisgICAgbXZ3dmxpbmUod29yaywgcm93LCBtYXJnaW4gKyAxLCBBQ1NfVkxJTkUsIGxpbWl0IC0gMik7CisgICAgbGltaXQgLz0gMjsKKworICAgIG12d2FkZHN0cih3b3JrLCAxLCAyLCAiU3RyaW5nIik7CisgICAgbXZ3YWRkc3RyKHdvcmssIGxpbWl0ICsgMSwgMiwgIkNoYXJzIik7CisgICAgd25vdXRyZWZyZXNoKHdvcmspOworCisgICAgYnVmZmVyW2xlbmd0aCA9IDBdID0gJ1wwJzsKKyAgICBsZWdlbmQoc2hvdywgbGV2ZWwsIG9wdGlvbiwgYnVmZmVyLCBsZW5ndGgpOworICAgIHdub3V0cmVmcmVzaChzaG93KTsKKworICAgIGRvdXBkYXRlKCk7CisKKyAgICAvKgorICAgICAqIFNob3cgdGhlIGNoYXJhY3RlcnMgaW5zZXJ0ZWQgaW4gY29sb3IsIHRvIGRpc3Rpbmd1aXNoIGZyb20gdGhvc2UgdGhhdAorICAgICAqIGFyZSBzaGlmdGVkLgorICAgICAqLworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworCWluaXRfcGFpcigxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJd2JrZ2RzZXQod29yaywgQ09MT1JfUEFJUigxKSB8ICcgJyk7CisgICAgfQorCisgICAgd2hpbGUgKChjaCA9IHdnZXRjaCh3b3JrKSkgIT0gJ3EnKSB7CisJaWYgKGNoID09IEVSUikgeworCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKwl3bW92ZSh3b3JrLCByb3csIG1hcmdpbiArIDEpOworCXN3aXRjaCAoY2gpIHsKKwljYXNlICd3JzoKKwkgICAgdGVzdF9pbnNlcnRzKGxldmVsICsgMSk7CisKKwkgICAgdG91Y2h3aW4obG9vayk7CisJICAgIHRvdWNod2luKHdvcmspOworCSAgICB0b3VjaHdpbihzaG93KTsKKworCSAgICB3bm91dHJlZnJlc2gobG9vayk7CisJICAgIHdub3V0cmVmcmVzaCh3b3JrKTsKKwkgICAgd25vdXRyZWZyZXNoKHNob3cpOworCisJICAgIGRvdXBkYXRlKCk7CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnTicpOgorCWNhc2UgS0VZX0RPV046CisJICAgIGlmIChyb3cgPCBsaW1pdCkgeworCQkrK3JvdzsKKwkJLyogcHV0IHRoZSB3aG9sZSBzdHJpbmcgaW4sIGFsbCBhdCBvbmNlICovCisJCWNvbDIgPSBtYXJnaW4gKyAxOworCQlzd2l0Y2ggKG9wdGlvbikgeworCQljYXNlIG9EZWZhdWx0OgorCQkgICAgaWYgKG5fb3B0ID4gMSkgeworCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBsZW5ndGg7IGNvbCArPSBuX29wdCkgeworCQkJICAgIGNvbDIgPSBDb2xPZihidWZmZXIsIGNvbCwgbWFyZ2luKTsKKwkJCSAgICBpZiAobW92ZShyb3csIGNvbDIpICE9IEVSUikgeworCQkJCUluc05TdHIoYnVmZmVyICsgY29sLCBMRU4oY29sKSk7CisJCQkgICAgfQorCQkJfQorCQkgICAgfSBlbHNlIHsKKwkJCWlmIChtb3ZlKHJvdywgY29sMikgIT0gRVJSKSB7CisJCQkgICAgSW5zU3RyKGJ1ZmZlcik7CisJCQl9CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJY2FzZSBvTW92ZToKKwkJICAgIGlmIChuX29wdCA+IDEpIHsKKwkJCWZvciAoY29sID0gMDsgY29sIDwgbGVuZ3RoOyBjb2wgKz0gbl9vcHQpIHsKKwkJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCQkgICAgTXZJbnNOU3RyKHJvdywgY29sMiwgYnVmZmVyICsgY29sLCBMRU4oY29sKSk7CisJCQl9CisJCSAgICB9IGVsc2UgeworCQkJTXZJbnNTdHIocm93LCBjb2wyLCBidWZmZXIpOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCWNhc2Ugb1dpbmRvdzoKKwkJICAgIGlmIChuX29wdCA+IDEpIHsKKwkJCWZvciAoY29sID0gMDsgY29sIDwgbGVuZ3RoOyBjb2wgKz0gbl9vcHQpIHsKKwkJCSAgICBjb2wyID0gQ29sT2YoYnVmZmVyLCBjb2wsIG1hcmdpbik7CisJCQkgICAgaWYgKHdtb3ZlKHdvcmssIHJvdywgY29sMikgIT0gRVJSKSB7CisJCQkJV0luc05TdHIod29yaywgYnVmZmVyICsgY29sLCBMRU4oY29sKSk7CisJCQkgICAgfQorCQkJfQorCQkgICAgfSBlbHNlIHsKKwkJCWlmICh3bW92ZSh3b3JrLCByb3csIGNvbDIpICE9IEVSUikgeworCQkJICAgIFdJbnNTdHIod29yaywgYnVmZmVyKTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQljYXNlIG9Nb3ZlV2luZG93OgorCQkgICAgaWYgKG5fb3B0ID4gMSkgeworCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBsZW5ndGg7IGNvbCArPSBuX29wdCkgeworCQkJICAgIGNvbDIgPSBDb2xPZihidWZmZXIsIGNvbCwgbWFyZ2luKTsKKwkJCSAgICBNdldJbnNOU3RyKHdvcmssIHJvdywgY29sMiwgYnVmZmVyICsgY29sLCBMRU4oY29sKSk7CisJCQl9CisJCSAgICB9IGVsc2UgeworCQkJTXZXSW5zU3RyKHdvcmssIHJvdywgY29sMiwgYnVmZmVyKTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisKKwkJLyogZG8gdGhlIGNvcnJlc3BvbmRpbmcgc2luZ2xlLWNoYXJhY3RlciBpbnNlcnRpb24gKi8KKwkJcm93MiA9IGxpbWl0ICsgcm93OworCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGxlbmd0aDsgKytjb2wpIHsKKwkJICAgIGNvbDIgPSBDb2xPZihidWZmZXIsIGNvbCwgbWFyZ2luKTsKKwkJICAgIHN3aXRjaCAob3B0aW9uKSB7CisJCSAgICBjYXNlIG9EZWZhdWx0OgorCQkJaWYgKG1vdmUocm93MiwgY29sMikgIT0gRVJSKSB7CisJCQkgICAgSW5zQ2goVUNoYXIoYnVmZmVyW2NvbF0pKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgY2FzZSBvTW92ZToKKwkJCU12SW5zQ2gocm93MiwgY29sMiwgVUNoYXIoYnVmZmVyW2NvbF0pKTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBvV2luZG93OgorCQkJaWYgKHdtb3ZlKHdvcmssIHJvdzIsIGNvbDIpICE9IEVSUikgeworCQkJICAgIFdJbnNDaCh3b3JrLCBVQ2hhcihidWZmZXJbY29sXSkpOworCQkJfQorCQkJYnJlYWs7CisJCSAgICBjYXNlIG9Nb3ZlV2luZG93OgorCQkJTXZXSW5zQ2god29yaywgcm93MiwgY29sMiwgVUNoYXIoYnVmZmVyW2NvbF0pKTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9CQUNLU1BBQ0U6CisJICAgIGNoID0gJ1xiJzsKKwkgICAgLyogRkFMTFRIUlUgKi8KKwlkZWZhdWx0OgorCSAgICBpZiAoY2ggPD0gMCB8fCBjaCA+IDI1NSkgeworCQliZWVwKCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJ1ZmZlcltsZW5ndGgrK10gPSBjaDsKKwkgICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworCisJICAgIC8qIHB1dCB0aGUgc3RyaW5nIGluLCBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSAqLworCSAgICBjb2wgPSBDb2xPZihidWZmZXIsIGxlbmd0aCAtIDEsIG1hcmdpbik7CisJICAgIHN3aXRjaCAob3B0aW9uKSB7CisJICAgIGNhc2Ugb0RlZmF1bHQ6CisJCWlmIChtb3ZlKHJvdywgY29sKSAhPSBFUlIpIHsKKwkJICAgIEluc1N0cihidWZmZXIgKyBsZW5ndGggLSAxKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBvTW92ZToKKwkJTXZJbnNTdHIocm93LCBjb2wsIGJ1ZmZlciArIGxlbmd0aCAtIDEpOworCQlicmVhazsKKwkgICAgY2FzZSBvV2luZG93OgorCQlpZiAod21vdmUod29yaywgcm93LCBjb2wpICE9IEVSUikgeworCQkgICAgV0luc1N0cih3b3JrLCBidWZmZXIgKyBsZW5ndGggLSAxKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBvTW92ZVdpbmRvdzoKKwkJTXZXSW5zU3RyKHdvcmssIHJvdywgY29sLCBidWZmZXIgKyBsZW5ndGggLSAxKTsKKwkJYnJlYWs7CisJICAgIH0KKworCSAgICAvKiBkbyB0aGUgY29ycmVzcG9uZGluZyBzaW5nbGUtY2hhcmFjdGVyIGluc2VydGlvbiAqLworCSAgICBzd2l0Y2ggKG9wdGlvbikgeworCSAgICBjYXNlIG9EZWZhdWx0OgorCQlpZiAobW92ZShsaW1pdCArIHJvdywgY29sKSAhPSBFUlIpIHsKKwkJICAgIEluc0NoKFVDaGFyKGNoKSk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2Ugb01vdmU6CisJCU12SW5zQ2gobGltaXQgKyByb3csIGNvbCwgVUNoYXIoY2gpKTsKKwkJYnJlYWs7CisJICAgIGNhc2Ugb1dpbmRvdzoKKwkJaWYgKHdtb3ZlKHdvcmssIGxpbWl0ICsgcm93LCBjb2wpICE9IEVSUikgeworCQkgICAgV0luc0NoKHdvcmssIFVDaGFyKGNoKSk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2Ugb01vdmVXaW5kb3c6CisJCU12V0luc0NoKHdvcmssIGxpbWl0ICsgcm93LCBjb2wsIFVDaGFyKGNoKSk7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgd25vdXRyZWZyZXNoKHdvcmspOworCisJICAgIGxlZ2VuZChzaG93LCBsZXZlbCwgb3B0aW9uLCBidWZmZXIsIGxlbmd0aCk7CisJICAgIHdub3V0cmVmcmVzaChzaG93KTsKKworCSAgICBkb3VwZGF0ZSgpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmIChsZXZlbCA+IDApIHsKKwlkZWx3aW4oc2hvdyk7CisJZGVsd2luKHdvcmspOworCWRlbHdpbihsb29rKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICp0YmxbXSA9CisgICAgeworCSJVc2FnZTogaW5zZXJ0cyBbb3B0aW9uc10iCisJLCIiCisJLCJPcHRpb25zOiIKKwksIiAgLW4gTlVNICBsaW1pdCBzdHJpbmctaW5zZXJ0cyB0byBOVU0gYnl0ZXMgb24gXk4gcmVwbGF5IgorCSwiICAtbSAgICAgIHBlcmZvcm0gd21vdmUvbW92ZSBzZXBhcmF0ZWx5IGZyb20gaW5zZXJ0LWZ1bmN0aW9ucyIKKwksIiAgLXcgICAgICB1c2Ugd2luZG93LXBhcmFtZXRlciBldmVuIHdoZW4gc3Rkc2NyIHdvdWxkIGJlIGltcGxpZWQiCisgICAgfTsKKyAgICB1bnNpZ25lZCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YodGJsKTsgKytuKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHRibFtuXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IGNoOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAibW46dyIpKSAhPSAtMSkgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdtJzoKKwkgICAgbV9vcHQgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgbl9vcHQgPSBhdG9pKG9wdGFyZyk7CisJICAgIGlmIChuX29wdCA9PSAwKQorCQluX29wdCA9IC0xOworCSAgICBicmVhazsKKwljYXNlICd3JzoKKwkgICAgd19vcHQgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmIChvcHRpbmQgPCBhcmdjKQorCXVzYWdlKCk7CisKKyAgICB0ZXN0X2luc2VydHMoMCk7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgd2luc3N0ciBmdW5jdGlvblxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZiAvKiBIQVZFX1dJTlNTVFIgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3Qva2V5X25hbWVzLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2tleV9uYW1lcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDU2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2tleV9uYW1lcy5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBrZXlfbmFtZXMuYyx2IDEuNCAyMDA4LzEwLzExIDIwOjIyOjM3IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGtleV9uYW1lcyBbLW1dIFstc11cbiIpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCBuOworCisgICAgYm9vbCBkb19zZXR1cCA9IEZBTFNFOworICAgIGJvb2wgZG9fbWV0YSA9IEZBTFNFOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChuID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJtcyIpKSAhPSAtMSkgeworCXN3aXRjaCAobikgeworCWNhc2UgJ20nOgorCSAgICBkb19tZXRhID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncyc6CisJICAgIGRvX3NldHVwID0gVFJVRTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwkgICAgLyogTk9UUkVBQ0hFRCAqLworCX0KKyAgICB9CisKKyAgICBpZiAoZG9fc2V0dXApIHsKKwkvKgorCSAqIEdldCB0aGUgdGVybWluZm8gZW50cnkgaW50byBtZW1vcnksIGFuZCB0ZWxsIG5jdXJzZXMgdGhhdCB3ZSB3YW50IHRvCisJICogdXNlIGZ1bmN0aW9uIGtleXMuICBUaGF0IHdpbGwgbWFrZSBpdCBhZGQgYW55IHVzZXItZGVmaW5lZCBrZXlzIHRoYXQKKwkgKiBhcHBlYXIgaW4gdGhlIHRlcm1pbmZvLgorCSAqLworCW5ld3Rlcm0oZ2V0ZW52KCJURVJNIiksIHN0ZGVyciwgc3RkaW4pOworCWtleXBhZChzdGRzY3IsIFRSVUUpOworCWlmIChkb19tZXRhKQorCSAgICBtZXRhKHN0ZHNjciwgVFJVRSk7CisJZW5kd2luKCk7CisgICAgfQorICAgIGZvciAobiA9IC0xOyBuIDwgS0VZX01BWCArIDUxMjsgbisrKSB7CisJY29uc3QgY2hhciAqcmVzdWx0ID0ga2V5X25hbWUobik7CisJaWYgKHJlc3VsdCAhPSAwKQorCSAgICBwcmludGYoIiVkKCU1byk6JXNcbiIsIG4sIG4sIHJlc3VsdCk7CisgICAgfQorICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIHdpZGUtbmN1cnNlcyBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2tleW5hbWVzLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L2tleW5hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjZmE4NwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3Qva2V5bmFtZXMuYwpAQCAtMCwwICsxLDgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDoga2V5bmFtZXMuYyx2IDEuOSAyMDA4LzEwLzExIDIwOjIyOjM3IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZToga2V5bmFtZXMgWy1tXSBbLXNdXG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgbjsKKyAgICBib29sIGRvX3NldHVwID0gRkFMU0U7CisgICAgYm9vbCBkb19tZXRhID0gRkFMU0U7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICB3aGlsZSAoKG4gPSBnZXRvcHQoYXJnYywgYXJndiwgIm1zIikpICE9IC0xKSB7CisJc3dpdGNoIChuKSB7CisJY2FzZSAnbSc6CisJICAgIGRvX21ldGEgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdzJzoKKwkgICAgZG9fc2V0dXAgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCSAgICAvKiBOT1RSRUFDSEVEICovCisJfQorICAgIH0KKworICAgIGlmIChkb19zZXR1cCkgeworCS8qCisJICogR2V0IHRoZSB0ZXJtaW5mbyBlbnRyeSBpbnRvIG1lbW9yeSwgYW5kIHRlbGwgbmN1cnNlcyB0aGF0IHdlIHdhbnQgdG8KKwkgKiB1c2UgZnVuY3Rpb24ga2V5cy4gIFRoYXQgd2lsbCBtYWtlIGl0IGFkZCBhbnkgdXNlci1kZWZpbmVkIGtleXMgdGhhdAorCSAqIGFwcGVhciBpbiB0aGUgdGVybWluZm8uCisJICovCisJbmV3dGVybShnZXRlbnYoIlRFUk0iKSwgc3RkZXJyLCBzdGRpbik7CisJa2V5cGFkKHN0ZHNjciwgVFJVRSk7CisJaWYgKGRvX21ldGEpCisJICAgIG1ldGEoc3Rkc2NyLCBUUlVFKTsKKwllbmR3aW4oKTsKKyAgICB9CisKKyAgICBmb3IgKG4gPSAtMTsgbiA8IEtFWV9NQVggKyA1MTI7IG4rKykgeworCWNvbnN0IGNoYXIgKnJlc3VsdCA9IGtleW5hbWUobik7CisJaWYgKHJlc3VsdCAhPSAwKQorCSAgICBwcmludGYoIiVkKCU1byk6JXNcbiIsIG4sIG4sIHJlc3VsdCk7CisgICAgfQorICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2tuaWdodC5jIGIvbmN1cnNlcy01LjcvdGVzdC9rbmlnaHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWJhMWRjCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9rbmlnaHQuYwpAQCAtMCwwICsxLDcyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBLbmlnaHQncyBUb3VyIC0gYSBicmFpbiBnYW1lCisgKgorICogVGhlIG9yaWdpbmFsIG9mIHRoaXMgZ2FtZSB3YXMgYW5vbnltb3VzLiAgSXQgaGFkIGFuIHVuYmVsaWV2YWJseSBib2d1cworICogaW50ZXJmYWNlLCB5b3UgYWN0dWFsbHkgaGFkIHRvIGVudGVyIHNxdWFyZSBjb29yZGluYXRlcyEgIFJlZGVzaWduIGJ5CisgKiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4gSnVseSAyMiAxOTk1LiAgTW91c2Ugc3VwcG9ydAorICogYWRkZWQgU2VwdGVtYmVyIDIwdGggMTk5NS4KKyAqCisgKiAkSWQ6IGtuaWdodC5jLHYgMS4yOCAyMDA4LzA4LzAzIDIzOjA0OjI2IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworLyogYm9hcmQgc2l6ZSAqLworI2RlZmluZSBCREVQVEgJOAorI2RlZmluZSBCV0lEVEgJOAorCisvKiB3aGVyZSB0byBzdGFydCB0aGUgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIElOU1RSWQkyCisjZGVmaW5lIElOU1RSWAkzNQorCisvKiBjb3JuZXIgb2YgYm9hcmQgKi8KKyNkZWZpbmUgQk9BUkRZCTIKKyNkZWZpbmUgQk9BUkRYCTAKKworLyogbm90aWZpY2F0aW9uIGxpbmUgKi8KKyNkZWZpbmUgTk9USUZZWQkyMQorCisvKiB2aXJ0dWFsIGNvbG9yIHZhbHVlcyAqLworI2RlZmluZSBUUkFJTF9DT0xPUgkxCisjZGVmaW5lIFBMVVNfQ09MT1IJMgorI2RlZmluZSBNSU5VU19DT0xPUgkzCisKKyNkZWZpbmUgQ1goeCkJCSgyICsgNCAqICh4KSkKKyNkZWZpbmUgQ1koeSkJCSgxICsgMiAqICh5KSkKKyNkZWZpbmUgY2VsbG1vdmUoeSwgeCkJd21vdmUoYm9hcmR3aW4sIENZKHkpLCBDWCh4KSkKKyNkZWZpbmUgQ1hJTlYoeCkJKCgoeCkgLSAxKSAvIDQpCisjZGVmaW5lIENZSU5WKHkpCSgoKHkpIC0gMikgLyAyKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc2hvcnQgeCwgeTsKK30gY2VsbDsKKworc3RhdGljIFdJTkRPVyAqYm9hcmR3aW47CS8qIHRoZSBib2FyZCB3aW5kb3cgKi8KK3N0YXRpYyBXSU5ET1cgKmhlbHB3aW47CQkvKiB0aGUgaGVscCB3aW5kb3cgKi8KK3N0YXRpYyBXSU5ET1cgKm1zZ3dpbjsJCS8qIHRoZSBtZXNzYWdlIHdpbmRvdyAqLworc3RhdGljIGNlbGwgaGlzdG9yeVtCREVQVEggKiBCV0lEVEggKyAxXTsJLyogY2hvaWNlIGhpc3RvcnkgKi8KK3N0YXRpYyBjaHR5cGUgbWludXMgPSAnLSc7CS8qIHBvc3NpYmxlLW1vdmUgY2hhcmFjdGVyICovCitzdGF0aWMgY2h0eXBlIG9sZGNoOworc3RhdGljIGNodHlwZSBwbHVzID0gJysnOwkvKiBjdXJzb3IgaG90LXNwb3QgY2hhcmFjdGVyICovCitzdGF0aWMgY2h0eXBlIHRyYWlsID0gJyMnOwkvKiB0cmFpbCBjaGFyYWN0ZXIgKi8KK3N0YXRpYyBpbnQgbW92ZWNvdW50OwkJLyogY291bnQgb2YgbW92ZXMgc28gZmFyICovCitzdGF0aWMgaW50IHRyaWFsY291bnQ7CQkvKiBjb3VudCBvZiB0cmlhbHMgc28gZmFyICovCitzdGF0aWMgc2hvcnQgYm9hcmRbQkRFUFRIXVtCV0lEVEhdOwkvKiB0aGUgc3F1YXJlcyAqLworLyogKklOREVOVC1PRkYqICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICBpbnQgeTsKKyAgICBpbnQgeDsKK30gb2Zmc2V0c1tdID0geworICAgIHsgIDIsICAxIH0sCisgICAgeyAgMSwgIDIgfSwKKyAgICB7IC0xLCAgMiB9LAorICAgIHsgLTIsICAxIH0sCisgICAgeyAtMiwgLTEgfSwKKyAgICB7IC0xLCAtMiB9LAorICAgIHsgIDEsIC0yIH0sCisgICAgeyAgMiwgLTEgfSwKK307CisvKiAqSU5ERU5ULU9OKiAqLworCitzdGF0aWMgdm9pZAoraW5pdF9wcm9ncmFtKHZvaWQpCit7CisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgc3JhbmQoKHVuc2lnbmVkKSBnZXRwaWQoKSk7CisgICAgaW5pdHNjcigpOworICAgIGNicmVhaygpOwkJCS8qIGltbWVkaWF0ZSBjaGFyIHJldHVybiAqLworICAgIG5vZWNobygpOwkJCS8qIG5vIGltbWVkaWF0ZSBlY2hvICovCisgICAgYm9hcmR3aW4gPSBuZXd3aW4oQkRFUFRIICogMiArIDEsIEJXSURUSCAqIDQgKyAxLCBCT0FSRFksIEJPQVJEWCk7CisgICAgaGVscHdpbiA9IG5ld3dpbigwLCAwLCBJTlNUUlksIElOU1RSWCk7CisgICAgbXNnd2luID0gbmV3d2luKDEsIElOU1RSWCAtIDEsIE5PVElGWVksIDApOworICAgIHNjcm9sbG9rKG1zZ3dpbiwgVFJVRSk7CisgICAga2V5cGFkKGJvYXJkd2luLCBUUlVFKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbnQgYmcgPSBDT0xPUl9CTEFDSzsKKworCXN0YXJ0X2NvbG9yKCk7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAodXNlX2RlZmF1bHRfY29sb3JzKCkgPT0gT0spCisJICAgIGJnID0gLTE7CisjZW5kaWYKKworCSh2b2lkKSBpbml0X3BhaXIoVFJBSUxfQ09MT1IsIENPTE9SX0NZQU4sIGJnKTsKKwkodm9pZCkgaW5pdF9wYWlyKFBMVVNfQ09MT1IsIENPTE9SX1JFRCwgYmcpOworCSh2b2lkKSBpbml0X3BhaXIoTUlOVVNfQ09MT1IsIENPTE9SX0dSRUVOLCBiZyk7CisKKwl0cmFpbCB8PSBDT0xPUl9QQUlSKFRSQUlMX0NPTE9SKTsKKwlwbHVzIHw9IENPTE9SX1BBSVIoUExVU19DT0xPUik7CisJbWludXMgfD0gQ09MT1JfUEFJUihNSU5VU19DT0xPUik7CisgICAgfQorI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgICh2b2lkKSBtb3VzZW1hc2soQlVUVE9OMV9DTElDS0VELCAobW1hc2tfdCAqKSBOVUxMKTsKKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKworICAgIG9sZGNoID0gbWludXM7Cit9CisKK3N0YXRpYyB2b2lkCitoZWxwMSh2b2lkKQorLyogZ2FtZSBleHBsYW5hdGlvbiAtLSBpbml0aWFsIGhlbHAgc2NyZWVuICovCit7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIktuaWdodCdzIG1vdmUgaXMgYSBzb2xpdGFpcmUgcHV6emxlLiAgWW91clxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIm9iamVjdGl2ZSBpcyB0byB2aXNpdCBlYWNoIHNxdWFyZSBvZiB0aGUgIFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImNoZXNzYm9hcmQgZXhhY3RseSBvbmNlIGJ5IG1ha2luZyBrbmlnaHQnc1xuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIm1vdmVzIChvbmUgc3F1YXJlIHJpZ2h0IG9yIGxlZnQgZm9sbG93ZWQgIFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImJ5IHR3byBzcXVhcmVzIHVwIG9yIGRvd24sIG9yIHR3byBzcXVhcmVzIFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgInJpZ2h0IG9yIGxlZnQgZm9sbG93ZWQgYnkgb25lIHNxdWFyZSB1cCBvclxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImRvd24pLiAgWW91IG1heSBzdGFydCBhbnl3aGVyZS5cblxuIik7CisKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiVXNlIGFycm93IGtleXMgdG8gbW92ZSB0aGUgY3Vyc29yIGFyb3VuZC5cbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJXaGVuIHlvdSB3YW50IHRvIG1vdmUgeW91ciBrbmlnaHQgdG8gdGhlIFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImN1cnNvciBsb2NhdGlvbiwgcHJlc3MgPHNwYWNlPiBvciBFbnRlci5cbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJJbGxlZ2FsIG1vdmVzIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhbiAgXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiYXVkaWJsZSBiZWVwLlxuXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiVGhlIHByb2dyYW0gd2lsbCBkZXRlY3QgaWYgeW91IHNvbHZlIHRoZVxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgInB1enpsZTsgYWxzbyBpbmZvcm0geW91IHdoZW4geW91IHJ1biBvdXRcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJvZiBsZWdhbCBtb3Zlcy5cblxuIik7CisKKyAgICAodm9pZCkgbXZ3YWRkc3RyKGhlbHB3aW4sIE5PVElGWVkgLSBJTlNUUlksIDAsCisJCSAgICAgIlByZXNzIGA/JyB0byBnbyB0byBrZXlzdHJva2UgaGVscC4iKTsKK30KKworc3RhdGljIHZvaWQKK2hlbHAyKHZvaWQpCisvKiBrZXlzdHJva2UgaGVscCBzY3JlZW4gKi8KK3sKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiUG9zc2libGUgbW92ZXMgYXJlIHNob3duIHdpdGggYC0nLlxuXG4iKTsKKworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJZb3UgY2FuIG1vdmUgYXJvdW5kIHdpdGggdGhlIGFycm93IGtleXMgb3JcbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJ3aXRoIHRoZSByb2d1ZS9oYWNrIG1vdmVtZW50IGtleXMuICBPdGhlclxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImNvbW1hbmRzIGFsbG93IHlvdSB0byB1bmRvIG1vdmVzIG9yIHJlZHJhdy5cbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJZb3VyIG1vdXNlIG1heSB3b3JrOyB0cnkgbGVmdC1idXR0b24gdG9cbiIpOworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJtb3ZlIHRvIHRoZSBzcXVhcmUgdW5kZXIgdGhlIHBvaW50ZXIuXG5cbiIpOworCisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIngscSAtLSBleGl0ICAgICAgICAgICAgIHkgayB1ICAgIDcgOCA5XG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiciAtLSByZWRyYXcgc2NyZWVuICAgICAgIFxcfC8gICAgICBcXHwvIFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgImJrc3AgLS0gdW5kbyBtb3ZlICAgICAgIGgtKy1sICAgIDQtKy02XG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiYSAtLSBhdXRvanVtcCAgICAgICAgICAgIC98XFwgICAgICAvfFxcIFxuIik7CisgICAgKHZvaWQpIHdhZGRzdHIoaGVscHdpbiwgIiAgICAgICAgICAgICAgICAgICAgICAgIGIgaiBuICAgIDEgMiAzXG4iKTsKKworICAgICh2b2lkKSB3YWRkc3RyKGhlbHB3aW4sICJcbllvdSBjYW4gcGxhY2UgeW91ciBrbmlnaHQgb24gdGhlIHNlbGVjdGVkXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAic3F1YXJlIHdpdGggc3BhY2ViYXIsIEVudGVyLCBvciB0aGUga2V5cGFkXG4iKTsKKyAgICAodm9pZCkgd2FkZHN0cihoZWxwd2luLCAiY2VudGVyIGtleS4gIFVzZSBGL0IgdG8gcmV2aWV3IHRoZSBwYXRoLlxuIik7CisKKyAgICAodm9pZCkgbXZ3YWRkc3RyKGhlbHB3aW4sIE5PVElGWVkgLSBJTlNUUlksIDAsCisJCSAgICAgIlByZXNzIGA/JyB0byBnbyB0byBnYW1lIGV4cGxhbmF0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2hlbHAoYm9vbCAqIGtleWhlbHApCit7CisgICAgd2VyYXNlKGhlbHB3aW4pOworICAgIGlmICgqa2V5aGVscCkgeworCWhlbHAxKCk7CisJKmtleWhlbHAgPSBGQUxTRTsKKyAgICB9IGVsc2UgeworCWhlbHAyKCk7CisJKmtleWhlbHAgPSBUUlVFOworICAgIH0KKyAgICB3cmVmcmVzaChoZWxwd2luKTsKK30KKworc3RhdGljIGJvb2wKK2Noa3NxcihpbnQgcjEsIGludCBjMSkKK3sKKyAgICBpZiAoKHIxIDwgMCkgfHwgKHIxID4gQkRFUFRIIC0gMSkpCisJcmV0dXJuIChGQUxTRSk7CisgICAgaWYgKChjMSA8IDApIHx8IChjMSA+IEJXSURUSCAtIDEpKQorCXJldHVybiAoRkFMU0UpOworICAgIHJldHVybiAoKCFib2FyZFtyMV1bYzFdKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKK3N0YXRpYyBib29sCitjaGttb3ZlcyhpbnQgcncsIGludCBjb2wpCisvKiBjaGVjayB0byBzZWUgaWYgdmFsaWQgbW92ZXMgYXJlIGF2YWlsYWJsZSAqLworeworICAgIHVuc2lnbmVkIG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKG9mZnNldHMpOyBuKyspCisJaWYgKGNoa3NxcihydyArIG9mZnNldHNbbl0ueSwgY29sICsgb2Zmc2V0c1tuXS54KSkKKwkgICAgcmV0dXJuIChUUlVFKTsKKyAgICByZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK2Rvc3F1YXJlcyh2b2lkKQoreworICAgIGludCBpLCBqOworCisgICAgbXZhZGRzdHIoMCwgMjAsICJLTklHSFQnUyBNT1ZFIC0tIGEgbG9naWNhbCBzb2xpdGFpcmUiKTsKKworICAgIG1vdmUoQk9BUkRZLCBCT0FSRFgpOworICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX1VMQ09STkVSKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgNzsgaisrKSB7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfVFRFRSk7CisgICAgfQorICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX1VSQ09STkVSKTsKKworICAgIGZvciAoaSA9IDE7IGkgPCBCREVQVEg7IGkrKykgeworCW1vdmUoQk9BUkRZICsgaSAqIDIgLSAxLCBCT0FSRFgpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX1ZMSU5FKTsKKwlmb3IgKGogPSAwOyBqIDwgQldJRFRIOyBqKyspIHsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCAnICcpOworCSAgICB3YWRkY2goYm9hcmR3aW4sICcgJyk7CisJICAgIHdhZGRjaChib2FyZHdpbiwgJyAnKTsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfVkxJTkUpOworCX0KKwltb3ZlKEJPQVJEWSArIGkgKiAyLCBCT0FSRFgpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX0xURUUpOworCWZvciAoaiA9IDA7IGogPCBCV0lEVEggLSAxOyBqKyspIHsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCSAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfUExVUyk7CisJfQorCXdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX1JURUUpOworICAgIH0KKworICAgIG1vdmUoQk9BUkRZICsgaSAqIDIgLSAxLCBCT0FSRFgpOworICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX1ZMSU5FKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgQldJRFRIOyBqKyspIHsKKwl3YWRkY2goYm9hcmR3aW4sICcgJyk7CisJd2FkZGNoKGJvYXJkd2luLCAnICcpOworCXdhZGRjaChib2FyZHdpbiwgJyAnKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19WTElORSk7CisgICAgfQorCisgICAgbW92ZShCT0FSRFkgKyBpICogMiwgQk9BUkRYKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19MTENPUk5FUik7CisgICAgZm9yIChqID0gMDsgaiA8IEJXSURUSCAtIDE7IGorKykgeworCXdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKwl3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisJd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworCXdhZGRjaChib2FyZHdpbiwgQUNTX0JURUUpOworICAgIH0KKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19ITElORSk7CisgICAgd2FkZGNoKGJvYXJkd2luLCBBQ1NfSExJTkUpOworICAgIHdhZGRjaChib2FyZHdpbiwgQUNTX0hMSU5FKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIEFDU19MUkNPUk5FUik7Cit9CisKK3N0YXRpYyB2b2lkCittYXJrX3Bvc3NpYmxlcyhpbnQgcHJvdywgaW50IHBjb2wsIGNodHlwZSBtYXJrKQoreworICAgIHVuc2lnbmVkIG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgU0laRU9GKG9mZnNldHMpOyBuKyspIHsKKwlpZiAoY2hrc3FyKHByb3cgKyBvZmZzZXRzW25dLnksIHBjb2wgKyBvZmZzZXRzW25dLngpKSB7CisJICAgIGNlbGxtb3ZlKHByb3cgKyBvZmZzZXRzW25dLnksIHBjb2wgKyBvZmZzZXRzW25dLngpOworCSAgICB3YWRkY2goYm9hcmR3aW4sIG1hcmspOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitmaW5kX25leHRfbW92ZShpbnQgKnksIGludCAqeCkKK3sKKyAgICB1bnNpZ25lZCBqLCBrOworICAgIGludCBmb3VuZCA9IC0xOworICAgIGludCBmaXJzdCA9IC0xOworICAgIGludCBuZXh0ID0gMDsKKyAgICBpbnQgb2xkeSwgb2xkeDsKKyAgICBpbnQgbmV3eSwgbmV3eDsKKworICAgIGlmIChtb3ZlY291bnQgPiAxKSB7CisJb2xkeSA9IGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueTsKKwlvbGR4ID0gaGlzdG9yeVttb3ZlY291bnQgLSAxXS54OworCWZvciAoaiA9IDA7IGogPCBTSVpFT0Yob2Zmc2V0cykgKiAyOyBqKyspIHsKKwkgICAgayA9IGogJSBTSVpFT0Yob2Zmc2V0cyk7CisJICAgIG5ld3kgPSBvbGR5ICsgb2Zmc2V0c1trXS55OworCSAgICBuZXd4ID0gb2xkeCArIG9mZnNldHNba10ueDsKKwkgICAgaWYgKGNoa3NxcihuZXd5LCBuZXd4KSkgeworCQlpZiAoZmlyc3QgPCAwKQorCQkgICAgZmlyc3QgPSBrOworCQlpZiAobmV3eSA9PSAqeQorCQkgICAgJiYgbmV3eCA9PSAqeCkgeworCQkgICAgZm91bmQgPSBrOworCQl9IGVsc2UgaWYgKGZvdW5kID49IDApIHsKKwkJICAgIG5leHQgPSBrOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKwlpZiAoZm91bmQgPCAwKQorCSAgICBuZXh0ID0gZmlyc3Q7CisJaWYgKG5leHQgPj0gMCkgeworCSAgICAqeSA9IG9sZHkgKyBvZmZzZXRzW25leHRdLnk7CisJICAgICp4ID0gb2xkeCArIG9mZnNldHNbbmV4dF0ueDsKKwl9CisgICAgfSBlbHNlIHsKKwliZWVwKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordW5tYXJrY2VsbChpbnQgcm93LCBpbnQgY29sdW1uKQoreworICAgIGNlbGxtb3ZlKHJvdywgY29sdW1uKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sICdcYicpOworICAgIHdhZGRjaChib2FyZHdpbiwgJyAnKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sIG1pbnVzKTsKKyAgICB3YWRkY2goYm9hcmR3aW4sICcgJyk7Cit9CisKK3N0YXRpYyB2b2lkCittYXJrY2VsbChjaHR5cGUgdGNoYXIsIGludCByb3csIGludCBjb2x1bW4pCit7CisgICAgY2VsbG1vdmUocm93LCBjb2x1bW4pOworICAgIHdhZGRjaChib2FyZHdpbiwgJ1xiJyk7CisgICAgd2FkZGNoKGJvYXJkd2luLCB0Y2hhcik7CisgICAgd2FkZGNoKGJvYXJkd2luLCB0Y2hhcik7CisgICAgd2FkZGNoKGJvYXJkd2luLCB0Y2hhcik7Cit9CisKK3N0YXRpYyB2b2lkCitkcmF3bW92ZShjaHR5cGUgdGNoYXIsIGludCBvbGR5LCBpbnQgb2xkeCwgaW50IHJvdywgaW50IGNvbHVtbikKKy8qIHBsYWNlIHRoZSBzdGFycywgdXBkYXRlIGJvYXJkICYgY3VycmVudHMgKi8KK3sKKyAgICBpZiAobW92ZWNvdW50IDw9IDEpIHsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBCREVQVEg7IGkrKykgeworCSAgICBmb3IgKGogPSAwOyBqIDwgQldJRFRIOyBqKyspIHsKKwkJaWYgKG1vdmVjb3VudCA9PSAwKSB7CisJCSAgICB1bm1hcmtjZWxsKGksIGopOworCQl9IGVsc2UgeworCQkgICAgY2VsbG1vdmUoaSwgaik7CisJCSAgICBpZiAod2luY2goYm9hcmR3aW4pID09IG1pbnVzKQorCQkJd2FkZGNoKGJvYXJkd2luLCBtb3ZlY291bnQgPyAnICcgOiBtaW51cyk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCW1hcmtjZWxsKHRjaGFyLCBvbGR5LCBvbGR4KTsKKwltYXJrX3Bvc3NpYmxlcyhvbGR5LCBvbGR4LCAnICcpOworICAgIH0KKworICAgIGlmIChyb3cgPj0gMCAmJiBjb2x1bW4gPj0gMCkgeworCW1hcmtjZWxsKHRyYWlsLCByb3csIGNvbHVtbik7CisJbWFya19wb3NzaWJsZXMocm93LCBjb2x1bW4sIG1pbnVzKTsKKwlib2FyZFtyb3ddW2NvbHVtbl0gPSBUUlVFOworICAgIH0KKworICAgIHdwcmludHcobXNnd2luLCAiXG5Nb3ZlICVkIiwgbW92ZWNvdW50KTsKKyAgICBpZiAodHJpYWxjb3VudCAhPSBtb3ZlY291bnQpCisJd3ByaW50dyhtc2d3aW4sICIgKCVkIHRyaWVzKSIsIHRyaWFsY291bnQpOworICAgIHdjbHJ0b2VvbChtc2d3aW4pOworfQorCitzdGF0aWMgaW50CitpYWJzKGludCBudW0pCit7CisgICAgaWYgKG51bSA8IDApCisJcmV0dXJuICgtbnVtKTsKKyAgICBlbHNlCisJcmV0dXJuIChudW0pOworfQorCitzdGF0aWMgYm9vbAorZXZhbG1vdmUoaW50IHJvdywgaW50IGNvbHVtbikKKy8qIGV2YWx1YXRlIG1vdmUgKi8KK3sKKyAgICBpZiAobW92ZWNvdW50ID09IDEpCisJcmV0dXJuIChUUlVFKTsKKyAgICBlbHNlIGlmIChib2FyZFtyb3ddW2NvbHVtbl0gPT0gVFJVRSkgeworCXdhZGRzdHIobXNnd2luLCAiXG5Zb3UndmUgYWxyZWFkeSBiZWVuIHRoZXJlLiIpOworCXJldHVybiAoRkFMU0UpOworICAgIH0gZWxzZSB7CisJaW50IHJkaWYgPSBpYWJzKHJvdyAtIGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueSk7CisJaW50IGNkaWYgPSBpYWJzKGNvbHVtbiAtIGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueCk7CisKKwlpZiAoISgocmRpZiA9PSAxKSAmJiAoY2RpZiA9PSAyKSkgJiYgISgocmRpZiA9PSAyKSAmJiAoY2RpZiA9PSAxKSkpIHsKKwkgICAgd2FkZHN0cihtc2d3aW4sICJcblRoYXQncyBub3QgYSBsZWdhbCBrbmlnaHQncyBtb3ZlLiIpOworCSAgICByZXR1cm4gKEZBTFNFKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChUUlVFKTsKK30KKworc3RhdGljIGludAorY29tcGxldGVkKHZvaWQpCit7CisgICAgaW50IGksIGosIGNvdW50ID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBCREVQVEg7IGkrKykKKwlmb3IgKGogPSAwOyBqIDwgQldJRFRIOyBqKyspCisJICAgIGlmIChib2FyZFtpXVtqXSAhPSAwKQorCQljb3VudCArPSAxOworICAgIHJldHVybiAoY291bnQgPT0gKEJXSURUSCAqIEJERVBUSCkgPyAtMSA6IGNvdW50KTsKK30KKworc3RhdGljIHZvaWQKK25vX3ByZXZpb3VzX21vdmUodm9pZCkKK3sKKyAgICB3YWRkc3RyKG1zZ3dpbiwgIlxuTm8gcHJldmlvdXMgbW92ZS4iKTsKKyAgICBiZWVwKCk7Cit9CisKK3N0YXRpYyB2b2lkCitwbGF5KHZvaWQpCisvKiBwbGF5IHRoZSBnYW1lICovCit7CisgICAgYm9vbCBrZXloZWxwOwkJLyogVFJVRSBpZiBrZXlzdHJva2UgaGVscCBpcyB1cCAqLworICAgIGludCBpLCBqLCBjb3VudDsKKyAgICBpbnQgbGFzdGNvbCA9IDA7CQkvKiBsYXN0IGxvY2F0aW9uIHZpc2l0ZWQgKi8KKyAgICBpbnQgbGFzdHJvdyA9IDA7CisgICAgaW50IG55ID0gMCwgbnggPSAwOworICAgIGludCByZXZpZXcgPSAwOwkJLyogcmV2aWV3IGhpc3RvcnkgKi8KKyAgICBpbnQgcncgPSAwLCBjb2wgPSAwOwkvKiBjdXJyZW50IHJvdyBhbmQgY29sdW1uICovCisKKyAgICBkbyB7CisJLyogY2xlYXIgc2NyZWVuIGFuZCBkcmF3IGJvYXJkICovCisJd2VyYXNlKGJvYXJkd2luKTsKKwl3ZXJhc2UoaGVscHdpbik7CisJd2VyYXNlKG1zZ3dpbik7CisJZG9zcXVhcmVzKCk7CisJaGVscDEoKTsKKwl3bm91dHJlZnJlc2goc3Rkc2NyKTsKKwl3bm91dHJlZnJlc2goaGVscHdpbik7CisJd25vdXRyZWZyZXNoKG1zZ3dpbik7CisJd25vdXRyZWZyZXNoKGJvYXJkd2luKTsKKwlkb3VwZGF0ZSgpOworCisJbW92ZWNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQkRFUFRIOyBpKyspIHsKKwkgICAgZm9yIChqID0gMDsgaiA8IEJXSURUSDsgaisrKSB7CisJCWJvYXJkW2ldW2pdID0gRkFMU0U7CisJCXVubWFya2NlbGwoaSwgaik7CisJICAgIH0KKwl9CisJbWVtc2V0KGhpc3RvcnksIDAsIHNpemVvZihoaXN0b3J5KSk7CisJaGlzdG9yeVswXS55ID0gaGlzdG9yeVswXS54ID0gLTE7CisJaGlzdG9yeVsxXS55ID0gaGlzdG9yeVsxXS54ID0gLTE7CisJbGFzdHJvdyA9IGxhc3Rjb2wgPSAtMjsKKwltb3ZlY291bnQgPSAxOworCXRyaWFsY291bnQgPSAxOworCWtleWhlbHAgPSBGQUxTRTsKKwlzaG93X2hlbHAoJmtleWhlbHApOworCisJZm9yICg7OykgeworCSAgICBpZiAocncgIT0gbGFzdHJvdyB8fCBjb2wgIT0gbGFzdGNvbCkgeworCQlpZiAobGFzdHJvdyA+PSAwICYmIGxhc3Rjb2wgPj0gMCkgeworCQkgICAgY2VsbG1vdmUobGFzdHJvdywgbGFzdGNvbCk7CisJCSAgICBpZiAoYm9hcmRbbGFzdHJvd11bbGFzdGNvbF0pCisJCQl3YWRkY2goYm9hcmR3aW4sIHRyYWlsKTsKKwkJICAgIGVsc2UKKwkJCXdhZGRjaChib2FyZHdpbiwgb2xkY2gpOworCQl9CisKKwkJY2VsbG1vdmUocncsIGNvbCk7CisJCW9sZGNoID0gd2luY2goYm9hcmR3aW4pOworCisJCWxhc3Ryb3cgPSBydzsKKwkJbGFzdGNvbCA9IGNvbDsKKwkgICAgfQorCSAgICBjZWxsbW92ZShydywgY29sKTsKKwkgICAgd2FkZGNoKGJvYXJkd2luLCBwbHVzKTsKKwkgICAgY2VsbG1vdmUocncsIGNvbCk7CisKKwkgICAgd3JlZnJlc2gobXNnd2luKTsKKworCSAgICBzd2l0Y2ggKHdnZXRjaChib2FyZHdpbikpIHsKKwkgICAgY2FzZSAnayc6CisJICAgIGNhc2UgJzgnOgorCSAgICBjYXNlIEtFWV9VUDoKKwkJbnkgPSBydyArIEJERVBUSCAtIDE7CisJCW54ID0gY29sOworCQlicmVhazsKKwkgICAgY2FzZSAnaic6CisJICAgIGNhc2UgJzInOgorCSAgICBjYXNlIEtFWV9ET1dOOgorCQlueSA9IHJ3ICsgMTsKKwkJbnggPSBjb2w7CisJCWJyZWFrOworCSAgICBjYXNlICdoJzoKKwkgICAgY2FzZSAnNCc6CisJICAgIGNhc2UgS0VZX0xFRlQ6CisJCW55ID0gcnc7CisJCW54ID0gY29sICsgQldJRFRIIC0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2wnOgorCSAgICBjYXNlICc2JzoKKwkgICAgY2FzZSBLRVlfUklHSFQ6CisJCW55ID0gcnc7CisJCW54ID0gY29sICsgMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3knOgorCSAgICBjYXNlICc3JzoKKwkgICAgY2FzZSBLRVlfQTE6CisJCW55ID0gcncgKyBCREVQVEggLSAxOworCQlueCA9IGNvbCArIEJXSURUSCAtIDE7CisJCWJyZWFrOworCSAgICBjYXNlICdiJzoKKwkgICAgY2FzZSAnMSc6CisJICAgIGNhc2UgS0VZX0MxOgorCQlueSA9IHJ3ICsgMTsKKwkJbnggPSBjb2wgKyBCV0lEVEggLSAxOworCQlicmVhazsKKwkgICAgY2FzZSAndSc6CisJICAgIGNhc2UgJzknOgorCSAgICBjYXNlIEtFWV9BMzoKKwkJbnkgPSBydyArIEJERVBUSCAtIDE7CisJCW54ID0gY29sICsgMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ24nOgorCSAgICBjYXNlICczJzoKKwkgICAgY2FzZSBLRVlfQzM6CisJCW55ID0gcncgKyAxOworCQlueCA9IGNvbCArIDE7CisJCWJyZWFrOworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisJICAgIGNhc2UgS0VZX01PVVNFOgorCQl7CisJCSAgICBNRVZFTlQgbXlldmVudDsKKworCQkgICAgZ2V0bW91c2UoJm15ZXZlbnQpOworCQkgICAgaWYgKG15ZXZlbnQueSA+PSBDWSgwKSAmJiBteWV2ZW50LnkgPD0gQ1koQkRFUFRIKQorCQkJJiYgbXlldmVudC54ID49IENYKDApICYmIG15ZXZlbnQueCA8PSBDWChCV0lEVEgpKSB7CisJCQlueCA9IENYSU5WKG15ZXZlbnQueCk7CisJCQlueSA9IENZSU5WKG15ZXZlbnQueSk7CisJCQl1bmdldGNoKCdcbicpOworCQkJYnJlYWs7CisJCSAgICB9IGVsc2UgeworCQkJYmVlcCgpOworCQkJY29udGludWU7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKworCSAgICBjYXNlIEtFWV9CMjoKKwkgICAgY2FzZSAnXG4nOgorCSAgICBjYXNlICcgJzoKKwkJcmV2aWV3ID0gMDsKKwkJaWYgKGV2YWxtb3ZlKHJ3LCBjb2wpKSB7CisJCSAgICBkcmF3bW92ZSh0cmFpbCwKKwkJCSAgICAgaGlzdG9yeVttb3ZlY291bnQgLSAxXS55LAorCQkJICAgICBoaXN0b3J5W21vdmVjb3VudCAtIDFdLngsCisJCQkgICAgIHJ3LCBjb2wpOworCQkgICAgaGlzdG9yeVttb3ZlY291bnRdLnkgPSBydzsKKwkJICAgIGhpc3RvcnlbbW92ZWNvdW50XS54ID0gY29sOworCQkgICAgbW92ZWNvdW50Kys7CisJCSAgICB0cmlhbGNvdW50Kys7CisKKwkJICAgIGlmICghY2hrbW92ZXMocncsIGNvbCkpIHsKKwkJCWlmIChjb21wbGV0ZWQoKSA8IDApIHsKKwkJCSAgICB3YWRkc3RyKG1zZ3dpbiwgIlxuWW91IHdvbi4iKTsKKwkJCX0gZWxzZSB7CisJCQkgICAgd2FkZHN0cihtc2d3aW4sCisJCQkJICAgICJcbk5vIGZ1cnRoZXIgbW92ZXMgYXJlIHBvc3NpYmxlLiIpOworCQkJfQorCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgYmVlcCgpOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgS0VZX1VORE86CisJICAgIGNhc2UgS0VZX0JBQ0tTUEFDRToKKwkgICAgY2FzZSAnXGInOgorCQlyZXZpZXcgPSAwOworCQlpZiAobW92ZWNvdW50IDw9IDApIHsKKwkJICAgIG5vX3ByZXZpb3VzX21vdmUoKTsKKwkJfSBlbHNlIGlmIChtb3ZlY291bnQgPD0gMSkgeworCQkgICAgbnkgPSBoaXN0b3J5W21vdmVjb3VudF0ueTsKKwkJICAgIG54ID0gaGlzdG9yeVttb3ZlY291bnRdLng7CisJCSAgICBpZiAobnggPCAwIHx8IG55IDwgMCkgeworCQkJbnkgPSBsYXN0cm93OworCQkJbnggPSBsYXN0Y29sOworCQkgICAgfQorCQkgICAgbW92ZWNvdW50ID0gMDsKKwkJICAgIGJvYXJkW255XVtueF0gPSBGQUxTRTsKKwkJICAgIG9sZGNoID0gbWludXM7CisJCSAgICBkcmF3bW92ZSgnICcsIG55LCBueCwgLTEsIC0xKTsKKwkJICAgIG1vdmVjb3VudCA9IDE7CisJCSAgICB0cmlhbGNvdW50ID0gMTsKKwkJICAgIG5vX3ByZXZpb3VzX21vdmUoKTsKKwkJfSBlbHNlIHsKKwkJICAgIGludCBvbGR5ID0gaGlzdG9yeVttb3ZlY291bnQgLSAxXS55OworCQkgICAgaW50IG9sZHggPSBoaXN0b3J5W21vdmVjb3VudCAtIDFdLng7CisKKwkJICAgIGlmICghYm9hcmRbcnddW2NvbF0pIHsKKwkJCWNlbGxtb3ZlKHJ3LCBjb2wpOworCQkJd2FkZGNoKGJvYXJkd2luLCAnICcpOworCQkgICAgfQorCisJCSAgICBib2FyZFtvbGR5XVtvbGR4XSA9IEZBTFNFOworCQkgICAgLS1tb3ZlY291bnQ7CisJCSAgICBueSA9IGhpc3RvcnlbbW92ZWNvdW50IC0gMV0ueTsKKwkJICAgIG54ID0gaGlzdG9yeVttb3ZlY291bnQgLSAxXS54OworCQkgICAgaWYgKG54IDwgMCB8fCBueSA8IDApIHsKKwkJCW55ID0gb2xkeTsKKwkJCW54ID0gb2xkeDsKKwkJICAgIH0KKwkJICAgIGRyYXdtb3ZlKCcgJywgb2xkeSwgb2xkeCwgbnksIG54KTsKKworCQkgICAgLyogYXZvaWQgcHJvYmxlbXMgaWYgd2UganVzdCBjaGFuZ2VkIHRoZSBjdXJyZW50IGNlbGwgKi8KKwkJICAgIGNlbGxtb3ZlKGxhc3Ryb3csIGxhc3Rjb2wpOworCQkgICAgb2xkY2ggPSB3aW5jaChib2FyZHdpbik7CisJCX0KKwkJYnJlYWs7CisKKwkgICAgY2FzZSAnYSc6CisJCW54ID0gY29sOworCQlueSA9IHJ3OworCQlmaW5kX25leHRfbW92ZSgmbnksICZueCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ0YnOgorCQlpZiAocmV2aWV3ID4gMCkgeworCQkgICAgcmV2aWV3LS07CisJCSAgICBueSA9IGhpc3RvcnlbbW92ZWNvdW50IC0gcmV2aWV3IC0gMV0ueTsKKwkJICAgIG54ID0gaGlzdG9yeVttb3ZlY291bnQgLSByZXZpZXcgLSAxXS54OworCQl9IGVsc2UgeworCQkgICAgYmVlcCgpOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgJ0InOgorCQlpZiAocmV2aWV3IDwgbW92ZWNvdW50IC0gMikgeworCQkgICAgcmV2aWV3Kys7CisJCSAgICBueSA9IGhpc3RvcnlbbW92ZWNvdW50IC0gcmV2aWV3IC0gMV0ueTsKKwkJICAgIG54ID0gaGlzdG9yeVttb3ZlY291bnQgLSByZXZpZXcgLSAxXS54OworCQl9IGVsc2UgeworCQkgICAgYmVlcCgpOworCQl9CisJCWJyZWFrOworCisJICAgIGNhc2UgS0VZX1JFRE86CisJICAgIGNhc2UgJ1xmJzoKKwkgICAgY2FzZSAncic6CisJCWNsZWFyb2soY3Vyc2NyLCBUUlVFKTsKKwkJd25vdXRyZWZyZXNoKHN0ZHNjcik7CisJCXdub3V0cmVmcmVzaChib2FyZHdpbik7CisJCXdub3V0cmVmcmVzaChtc2d3aW4pOworCQl3bm91dHJlZnJlc2goaGVscHdpbik7CisJCWRvdXBkYXRlKCk7CisJCWJyZWFrOworCisJICAgIGNhc2UgJ3EnOgorCSAgICBjYXNlICd4JzoKKwkJZ290byBkcm9wb3V0OworCisJICAgIGNhc2UgJz8nOgorCQlzaG93X2hlbHAoJmtleWhlbHApOworCQlicmVhazsKKworCSAgICBkZWZhdWx0OgorCQliZWVwKCk7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgY29sID0gbnggJSBCV0lEVEg7CisJICAgIHJ3ID0gbnkgJSBCREVQVEg7CisJfQorCisgICAgICBkcm9wb3V0OgorCWlmICgoY291bnQgPSBjb21wbGV0ZWQoKSkgPCAwKQorCSAgICB3cHJpbnR3KG1zZ3dpbiwgIlxuWW91IHdvbi4gIENhcmUgdG8gdHJ5IGFnYWluPyAiKTsKKwllbHNlCisJICAgIHdwcmludHcobXNnd2luLCAiXG4lZCBzcXVhcmVzIGZpbGxlZC4gIFRyeSBhZ2Fpbj8gIiwgY291bnQpOworCXdjbHJ0b2VvbChtc2d3aW4pOworICAgIH0gd2hpbGUKKwkodG9sb3dlcih3Z2V0Y2gobXNnd2luKSkgPT0gJ3knKTsKK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW5pdF9wcm9ncmFtKCk7CisKKyAgICBwbGF5KCk7CisKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisvKiBrbmlnaHQuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvbGludXgtY29sb3IuZGF0IGIvbmN1cnNlcy01LjcvdGVzdC9saW51eC1jb2xvci5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4YjNmMAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvbGludXgtY29sb3IuZGF0CkBAIC0wLDAgKzEsNDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBsaW51eC1jb2xvci5kYXQsdiAxLjIgMjAwNi8wNC8yMiAyMTo0MDowMCB0b20gRXhwICQKKyMgVGhlc2UgdmFsdWVzIGFyZSBkZXJpdmVkIGZyb20gbGludXgvZHJpdmVycy9jaGFyL3Z0LmMgKGRlZmF1bHRfcmVkW10sCisjIGRlZmF1bHRfZ3JuW10gYW5kIGRlZmF1bHRfYmx1W10pLCBjb21tZW50ZWQKKy8qIHRoZSBkZWZhdWx0IGNvbG91ciB0YWJsZSwgZm9yIFZHQSsgY29sb3VyIHN5c3RlbXMgKi8KK3NjYWxlOjI1NQorMDoJICAwCSAgMAkgIDAKKzE6CTE3MAkgIDAJICAwCisyOgkgIDAJMTcwCSAgMAorMzoJMTcwCSA4NQkgIDAKKzQ6CSAgMAkgIDAJMTcwCis1OgkxNzAJICAwCTE3MAorNjoJICAwCTE3MAkxNzAKKzc6CTE3MAkxNzAJMTcwCis4OgkgODUJIDg1CSA4NQorOToJMjU1CSA4NQkgODUKKzEwOgkgODUJMjU1CSA4NQorMTE6CTI1NQkyNTUJIDg1CisxMjoJIDg1CSA4NQkyNTUKKzEzOgkyNTUJIDg1CTI1NQorMTQ6CSA4NQkyNTUJMjU1CisxNToJMjU1CTI1NQkyNTUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvbGlzdHVzZWQuc2ggYi9uY3Vyc2VzLTUuNy90ZXN0L2xpc3R1c2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyNWY3MTIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L2xpc3R1c2VkLnNoCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBsaXN0dXNlZC5zaCx2IDEuNyAyMDA2LzA2LzAzIDE2OjM5OjM3IHRvbSBFeHAgJAorIyBBIHZlcnkgc2ltcGxlIHNjcmlwdCB0byBsaXN0IGVudHJ5cG9pbnRzIHRoYXQgYXJlIHVzZWQgYnkgZWl0aGVyIGEgdGVzdAorIyBwcm9ncmFtLCBvciB3aXRoaW4gdGhlIGxpYnJhcmllcy4gIFRoaXMgcmVsaWVzIG9uIHRoZSBvdXRwdXQgZm9ybWF0IG9mICdubScsCisjIGFuZCBhc3N1bWVzIHRoYXQgdGhlIGxpYnJhcmllcyBhcmUgY29uZmlndXJlZCB3aXRoIFRSQUNFIGRlZmluZWQsIGFuZCB1c2luZworIyB0aGVzZSBvcHRpb25zOgorIwktLWRpc2FibGUtbWFjcm9zCisjCS0tZW5hYmxlLXdpZGVjCisjIFN0YXRpYyBsaWJyYXJpZXMgYXJlIHVzZWQsIHRvIHByb3ZpZGUgc29tZSBmaWx0ZXJpbmcgYmFzZWQgb24gaW50ZXJuYWwgdXNhZ2UKKyMgb2YgdGhlIGRpZmZlcmVudCBzeW1ib2xzLgorCisjIGtlZXAgdGhlIHNvcnRpbmcgaW5kZXBlbmRlbnQgb2YgbG9jYWxlOgoraWYgdGVzdCAiJHtMQU5HVUFHRStzZXR9IiAgICA9IHNldDsgdGhlbiBMQU5HVUFHRT1DOyAgICBleHBvcnQgTEFOR1VBR0U7ICAgIGZpCitpZiB0ZXN0ICIke0xBTkcrc2V0fSIgICAgICAgID0gc2V0OyB0aGVuIExBTkc9QzsgICAgICAgIGV4cG9ydCBMQU5HOyAgICAgICAgZmkKK2lmIHRlc3QgIiR7TENfQUxMK3NldH0iICAgICAgPSBzZXQ7IHRoZW4gTENfQUxMPUM7ICAgICAgZXhwb3J0IExDX0FMTDsgICAgICBmaQoraWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCitpZiB0ZXN0ICIke0xDX0NUWVBFK3NldH0iICAgID0gc2V0OyB0aGVuIExDX0NUWVBFPUM7ICAgIGV4cG9ydCBMQ19DVFlQRTsgICAgZmkKK2lmIHRlc3QgIiR7TENfQ09MTEFURStzZXR9IiAgPSBzZXQ7IHRoZW4gTENfQ09MTEFURT1DOyAgZXhwb3J0IExDX0NPTExBVEU7ICBmaQorCitOTV9PUFRTPQorCitpZiB0ZXN0ICEgLWQgLi4vb2JqZWN0cyA7IHRoZW4KKwllY2hvICI/IG5lZWQgb2JqZWN0cyB0byBydW4gdGhpcyBzY3JpcHQiCisJZXhpdCAxCitlbGlmIHRlc3QgISAtZCAuLi9saWIgOyB0aGVuCisJZWNobyAiPyBuZWVkIGxpYnJhcmllcyB0byBydW4gdGhpcyBzY3JpcHQiCisJZXhpdCAxCitmaQorCitQUk9HUz0KK2ZvciBuYW1lIGluIGAoZWNobyAidGVzdDoiO3NvcnQgbW9kdWxlczsgZWNobyAicHJvZ3M6Ijtzb3J0IC4uL3Byb2dzL21vZHVsZXMpIHxzZWQgLWUgJ3MvWyAJXS4qLy8nIC1lICcvXlsjQF0vZCdgCitkbworCWNhc2UgJG5hbWUgaW4KKwkqOikKKwkJUFJPR1M9IiRQUk9HUyAkbmFtZSIKKwkJOzsKKwkqKQorCQlOQU1FPS4uL29iamVjdHMvJHtuYW1lfS5vCisJCWlmIHRlc3QgLWYgJE5BTUUKKwkJdGhlbgorCQkJUFJPR1M9IiRQUk9HUyAkTkFNRSIKKwkJZmkKKwkJOzsKKwllc2FjCitkb25lCisKKyMgRm9yIGVhY2ggbGlicmFyeSAtCitmb3IgbGliIGluIC4uL2xpYi8qLmEKK2RvCisJTElCPWBiYXNlbmFtZSAkbGliIC5hYAorCWNhc2UgJExJQiBpbgorCSpfKnwqKyopCisJCWNvbnRpbnVlCisJCTs7CisJZXNhYworCisJdG1wPWBlY2hvICRMSUJ8c2VkIC1lICdzL3ckLy8nYAorCWVjaG8KKwllY2hvICIke3RtcH06IgorCWVjaG8gJHRtcCB8c2VkIC1lICdzLy4vLS9nJworCSMgQ29uc3RydWN0IGEgbGlzdCBvZiBwdWJsaWMgZXh0ZXJuYWxzIHByb3ZpZGVkIGJ5IHRoZSBsaWJyYXJ5LgorCVdBTlQ9YG5tICROTV9PUFRTICRsaWIgfFwKKwkJc2VkCS1lICdzL15bXiBdKi8vJyBcCisJCQktZSAncy9eICovLycgXAorCQkJLWUgJy9eWyBhLXpdIC9kJyBcCisJCQktZSAnLzokL2QnIFwKKwkJCS1lICcvXiQvZCcgXAorCQkJLWUgJy9eVSAvZCcgXAorCQkJLWUgJ3MvXltBLVpdIC8vJyBcCisJCQktZSAnL15fL2QnIHxcCisJCXNvcnQgLXVgCisJIyBMaXN0IHByb2dyYW1zIHdoaWNoIHVzZSB0aGF0IGV4dGVybmFsLgorCWZvciBuYW1lIGluICRXQU5UCisJZG8KKwkJSEFWRT0KKwkJdGFncz0KKwkJbGFzdD0KKwkJZm9yIHByb2cgaW4gJFBST0dTCisJCWRvCisJCQljYXNlICRwcm9nIGluCisJCQkqOikKKwkJCQl0YWdzPSRwcm9nCisJCQkJOzsKKwkJCSopCisJCQkJVEVTVD1gbm0gJE5NX09QVFMgJHByb2cgfFwKKwkJCQkJc2VkCS1lICdzL15bXiBdKi8vJyBcCisJCQkJCQktZSAncy9eICovLycgXAorCQkJCQkJLWUgJy9eWyBhLXpdIC9kJyBcCisJCQkJCQktZSAnLzokL2QnIFwKKwkJCQkJCS1lICcvXiQvZCcgXAorCQkJCQkJLWUgJ3MvXltBLVpdIC8vJyBcCisJCQkJCQktZSAnL15fL2QnIFwKKwkJCQkJCS1lICdzL14nJHtuYW1lfSckL18vJyBcCisJCQkJCQktZSAnL15bXl9dL2QnYAorCQkJCWlmIHRlc3QgLW4gIiRURVNUIgorCQkJCXRoZW4KKwkJCQkJaGF2ZT1gYmFzZW5hbWUgJHByb2cgLm9gCisJCQkJCWlmIHRlc3QgLW4gIiRIQVZFIgorCQkJCQl0aGVuCisJCQkJCQlpZiB0ZXN0ICIkbGFzdCIgPSAiJHRhZ3MiCisJCQkJCQl0aGVuCisJCQkJCQkJSEFWRT0iJEhBVkUgJGhhdmUiCisJCQkJCQllbHNlCisJCQkJCQkJSEFWRT0iJEhBVkUgJHRhZ3MgJGhhdmUiCisJCQkJCQlmaQorCQkJCQllbHNlCisJCQkJCQlIQVZFPSIkdGFncyAkaGF2ZSIKKwkJCQkJZmkKKwkJCQkJbGFzdD0iJHRhZ3MiCisJCQkJZmkKKwkJCQk7OworCQkJZXNhYworCQlkb25lCisJCSMgaWYgd2UgZGlkIG5vdCBmaW5kIGEgcHJvZ3JhbSB1c2luZyBpdCBkaXJlY3RseSwgc2VlIGlmIGl0CisJCSMgaXMgdXNlZCB3aXRoaW4gYSBsaWJyYXJ5LgorCQlpZiB0ZXN0IC16ICIkSEFWRSIKKwkJdGhlbgorCQkJZm9yIHRtcCBpbiAuLi9saWIvKi5hCisJCQlkbyAKKwkJCQljYXNlICR0bXAgaW4KKwkJCQkqXyp8KisqKQorCQkJCQljb250aW51ZQorCQkJCQk7OworCQkJCWVzYWMKKwkJCQlURVNUPWBubSAkTk1fT1BUUyAkdG1wIHxcCisJCQkJCXNlZAktZSAncy9eW14gXSovLycgXAorCQkJCQkJLWUgJ3MvXiAqLy8nIFwKKwkJCQkJCS1lICcvXlsgYS16XSAvZCcgXAorCQkJCQkJLWUgJy86JC9kJyBcCisJCQkJCQktZSAnL14kL2QnIFwKKwkJCQkJCS1lICcvXltBLVRWLVpdIC9kJyBcCisJCQkJCQktZSAncy9eW0EtWl0gLy8nIFwKKwkJCQkJCS1lICcvXl8vZCcgXAorCQkJCQkJLWUgJ3MvXicke25hbWV9JyQvXy8nIFwKKwkJCQkJCS1lICcvXlteX10vZCdgCisJCQkJaWYgdGVzdCAtbiAiJFRFU1QiCisJCQkJdGhlbgorCQkJCQl0bXA9YGJhc2VuYW1lICR0bXAgLmEgfHNlZCAtZSAncy93JC8vJ2AKKwkJCQkJSEFWRT1gZWNobyAkdG1wIHwgc2VkIC1lICdzL2xpYi9saWI6IC8nYAorCQkJCQlicmVhaworCQkJCWZpCisJCQlkb25lCisJCWZpCisJCXRlc3QgLXogIiRIQVZFIiAmJiBIQVZFPSItIgorCQlsZW5uPWBleHByIDM5IC0gbGVuZ3RoICRuYW1lYAorCQlsZW5uPWBleHByICRsZW5uIC8gOGAKKwkJdGFicz0KKwkJd2hpbGUgdGVzdCAkbGVubiAhPSAwCisJCWRvCisJCQl0YWJzPSIke3RhYnN9CSIKKwkJCWxlbm49YGV4cHIgJGxlbm4gLSAxYAorCQlkb25lCisJCWVjaG8gIiR7bmFtZX0ke3RhYnN9JHtIQVZFfSIKKwlkb25lCitkb25lCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L2xydGVzdC5jIGIvbmN1cnNlcy01LjcvdGVzdC9scnRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDBiMGMxCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9scnRlc3QuYwpAQCAtMCwwICsxLDE4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUZXN0IGxvd2VyLXJpZ2h0LWhhbmQgY29ybmVyIGFjY2VzcworICoKKyAqIG9yaWdpbmFsbHkgYnkgRXJpYyBTLiBSYXltb25kIDxlc3JAdGh5cnN1cy5jb20+LCB3cml0dGVuIGZvciBhbmltYXRpb24KKyAqIGFuZCByZXNpemluZyAtVC5EaWNrZXkKKyAqCisgKiBUaGlzIGNhbid0IGJlIHBhcnQgb2YgdGhlIG5jdXJzZXMgdGVzdC1wcm9ncmFtLCBiZWNhdXNlIG5jdXJzZXMgcmlwcyBvZmYgdGhlCisgKiBib3R0b20gbGluZSB0byBkbyBsYWJlbHMuCisgKgorICogJElkOiBscnRlc3QuYyx2IDEuMjEgMjAwNS8xMi8zMSAxNjo1MTo1MyB0b20gRXhwICQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgeSwgeCwgbW9kZSwgZGlyLCBpbmM7CisgICAgY2h0eXBlIHZhbHVlOworfSBNQVJLOworCisvKgorICogTWFrZSBhIGNvdXBsZSBvZiBtYXJrZXJzIGdvICdyb3VuZCB0aGUgYm9yZGVyIHRvIGRlbW9uc3RyYXRlIHRoYXQgd2UgY2FuCisgKiByZWFsbHkgd3JpdGUgdG8gYWxsIHBvc2l0aW9ucyBwcm9wZXJseS4KKyAqLworc3RhdGljIHZvaWQKK3Nob3coTUFSSyAqbSkKK3sKKyAgICBtdmFkZGNoKG0tPnksIG0tPngsIG0tPnZhbHVlKTsKKyAgICBpZiAobS0+bW9kZSA9PSAwKSB7CQkvKiBhbG9uZyB0aGUgeC1kaXJlY3Rpb24gKi8KKwltLT54ICs9IG0tPmluYzsKKwlpZiAobS0+eCA+PSBDT0xTKSB7CisJICAgIG0tPnggPSBDT0xTIC0gMTsKKwkgICAgbS0+aW5jID0gLW0tPmRpciAqIG0tPmluYzsKKwkgICAgbS0+eSArPSBtLT5pbmM7CisJICAgIG0tPm1vZGUgPSAxOworCX0gZWxzZSBpZiAobS0+eCA8IDApIHsKKwkgICAgbS0+eCA9IDA7CisJICAgIG0tPmluYyA9IC1tLT5kaXIgKiBtLT5pbmM7CisJICAgIG0tPnkgKz0gbS0+aW5jOworCSAgICBtLT5tb2RlID0gMTsKKwl9CisgICAgfSBlbHNlIHsJCQkvKiBhbG9uZyB0aGUgeS1kaXJlY3Rpb24gKi8KKwltLT55ICs9IG0tPmluYzsKKwlpZiAobS0+eSA+PSBMSU5FUykgeworCSAgICBtLT55ID0gTElORVMgLSAxOworCSAgICBtLT5pbmMgPSBtLT5kaXIgKiBtLT5pbmM7CisJICAgIG0tPnggKz0gbS0+aW5jOworCSAgICBtLT5tb2RlID0gMDsKKwl9IGVsc2UgaWYgKG0tPnkgPCAwKSB7CisJICAgIG0tPnkgPSAwOworCSAgICBtLT5pbmMgPSBtLT5kaXIgKiBtLT5pbmM7CisJICAgIG0tPnggKz0gbS0+aW5jOworCSAgICBtLT5tb2RlID0gMDsKKwl9CisgICAgfQorfQorCitpbnQKK21haW4oCisJaW50IGFyZ2MgR0NDX1VOVVNFRCwKKwljaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIHN0YXRpYyBNQVJLIG1hcmtzW10gPQorICAgIHsKKwl7MCwgMCwgMCwgLTEsIDEsICcrJyB8IEFfQk9MRH0sCisJezAsIDAsIDEsIDEsIDIsICdYJ30sCisJezAsIDAsIDEsIC0xLCAzLCAnWSd9LAorCXswLCA4LCAwLCAtMSwgMSwgJysnIHwgQV9CT0xEfSwKKwl7MCwgOSwgMCwgLTEsIDEsICcrJyB8IEFfQk9MRH0sCisJezEsIDAsIDEsIDEsIDEsICcqJyB8IEFfUkVWRVJTRX0sCisJezIsIDAsIDEsIDEsIDEsICcqJyB8IEFfUkVWRVJTRX0KKyAgICB9OworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaW5pdHNjcigpOworICAgIG5vZWNobygpOworICAgIGNicmVhaygpOworICAgIG5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKyAgICBjdXJzX3NldCgwKTsKKworI2lmZGVmIEtFWV9SRVNJWkUKKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgcmVzdGFydDoKKyNlbmRpZgorICAgIG1vdmUoTElORVMgLyAyIC0gMSwgNCk7CisgICAgaWYgKCEoaGFzX2ljKCkKKyNpZiBIQVZFX1NFVFVQVEVSTQorICAgIC8qIHNlZSBQdXRDaGFyTFIoKSAqLworCSAgfHwgYXV0b19yaWdodF9tYXJnaW4KKwkgIHx8IChlbnRlcl9hbV9tb2RlICYmIGV4aXRfYW1fbW9kZSkKKyNlbmRpZgorCSkpIHsKKwlhZGRzdHIoIllvdXIgdGVybWluYWwgbGFja3MgdGhlIGNhcGFiaWxpdGllcyBuZWVkZWQgdG8gYWRkcmVzcyB0aGVcbiIpOworCW1vdmUoTElORVMgLyAyLCA0KTsKKwlhZGRzdHIoImxvd2VyLXJpZ2h0LWhhbmQgY29ybmVyIG9mIHRoZSBzY3JlZW4uXG4iKTsKKyAgICB9IGVsc2UgeworCWFkZHN0cigiVGhpcyBpcyBhIHRlc3Qgb2YgYWNjZXNzIHRvIHRoZSBsb3dlciByaWdodCBjb3JuZXIuXG4iKTsKKwltb3ZlKExJTkVTIC8gMiwgNCk7CisJYWRkc3RyKCJJZiB0aGUgdG9wIG9mIHRoZSBib3ggaXMgbWlzc2luZywgdGhlIHRlc3QgZmFpbGVkLlxuIik7CisJbW92ZShMSU5FUyAvIDIgKyAxLCA0KTsKKwlhZGRzdHIoIlBsZWFzZSByZXBvcnQgdGhpcyAod2l0aCBhIGNvcHkgb2YgeW91ciB0ZXJtaW5mbyBlbnRyeSkuXG4iKTsKKwltb3ZlKExJTkVTIC8gMiArIDIsIDQpOworCWFkZHN0cigidG8gdGhlIG5jdXJzZXMgbWFpbnRhaW5lcnMsIGF0IGJ1Zy1uY3Vyc2VzQGdudS5vcmcuXG4iKTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisJaW50IGNoOworCXVuc2lnbmVkIG47CisKKwlib3goc3Rkc2NyLCAwLCAwKTsKKwlmb3IgKG4gPSAwOyBuIDwgU0laRU9GKG1hcmtzKTsgbisrKSB7CisJICAgIHNob3coJm1hcmtzW25dKTsKKwl9CisKKwlpZiAoKGNoID0gZ2V0Y2goKSkgPiAwKSB7CisJICAgIGlmIChjaCA9PSAncScpCisJCWJyZWFrOworCSAgICBlbHNlIGlmIChjaCA9PSAncycpCisJCW5vZGVsYXkoc3Rkc2NyLCBGQUxTRSk7CisJICAgIGVsc2UgaWYgKGNoID09ICcgJykKKwkJbm9kZWxheShzdGRzY3IsIFRSVUUpOworI2lmZGVmIFRSQUNFCisJICAgIGVsc2UgaWYgKGNoID09ICdUJykKKwkJdHJhY2UoMCk7CisJICAgIGVsc2UgaWYgKGNoID09ICd0JykKKwkJdHJhY2UoVFJBQ0VfQ0FMTFMgfCBUUkFDRV9JQ0FMTFMgfCBUUkFDRV9VUERBVEUpOworI2VuZGlmCisjaWZkZWYgS0VZX1JFU0laRQorCSAgICBlbHNlIGlmIChjaCA9PSBLRVlfUkVTSVpFKSB7CisJCWZvciAobiA9IDA7IG4gPCBTSVpFT0YobWFya3MpOyBuKyspIHsKKwkJICAgIGlmIChtYXJrc1tuXS5tb2RlID09IDApIHsJLyogbW92aW5nIGFsb25nIHgtZGlyZWN0aW9uICovCisJCQlpZiAobWFya3Nbbl0ueSkKKwkJCSAgICBtYXJrc1tuXS55ID0gTElORVMgLSAxOworCQkgICAgfSBlbHNlIHsKKwkJCWlmIChtYXJrc1tuXS54KQorCQkJICAgIG1hcmtzW25dLnggPSBDT0xTIC0gMTsKKwkJICAgIH0KKwkJfQorCQlmbGFzaCgpOworCQllcmFzZSgpOworCQl3cmVmcmVzaChjdXJzY3IpOworCQlnb3RvIHJlc3RhcnQ7CisJICAgIH0KKyNlbmRpZgorCX0KKwluYXBtcyg1MCk7CisJcmVmcmVzaCgpOworICAgIH0KKworICAgIGN1cnNfc2V0KDEpOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKKy8qIGxydGVzdC5jIGVuZHMgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9tay10ZXN0LmF3ayBiL25jdXJzZXMtNS43L3Rlc3QvbWstdGVzdC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlMDM2MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvbWstdGVzdC5hd2sKQEAgLTAsMCArMSwxMTEgQEAKKyMgJElkOiBtay10ZXN0LmF3ayx2IDEuNSAyMDA3LzAxLzIwIDIxOjI4OjQ3IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyMKKyMgZ2VuZXJhdGUgTWFrZWZpbGUgZm9yIG5jdXJzZXMgdGVzdHMuCitCRUdJTgl7CisJCWZpcnN0ID0gMTsKKwkJY291bnQgPSAwOworCX0KKy9eIy8JeworCQluZXh0OworCX0KKy9eJC8JeworCQluZXh0OworCX0KKwl7CisJCWlmIChmaXJzdCkgeworCQkJcHJpbnQgIiMgZ2VuZXJhdGVkIGJ5IG1rLXRlc3QuYXdrXG4iOworCQkJZmlyc3QgPSAwOworCQl9CisJCXByb2dzW2NvdW50XSA9ICQxOworCQlmbGFnc1tjb3VudF0gPSAkMjsKKwkJdXNpbmdbY291bnRdID0gJDM7CisJCWZpbGVzW2NvdW50XSA9ICIiOworCQlmb3IgKG4gPSA0OyBuIDw9IE5GOyArK24pIHsKKwkJCWZpbGVzW2NvdW50XSA9IHNwcmludGYoIiVzICQoTU9ERUwpLyVzJG8iLCBmaWxlc1tjb3VudF0sICRuKTsKKwkJfQorCQljb3VudCA9IGNvdW50ICsgMTsKKwl9CitFTkQJeworCWZvciAobiA9IDA7IG4gPCBjb3VudDsgKytuKSB7CisJCWlmIChuID09IDApIHsKKwkJCXByaW50ZiAiVEVTVFNcdD0gIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZiAiXHQgICI7CisJCX0KKwkJcHJpbnRmICIkKGRlc3RkaXIpJXMkeCIsIHByb2dzW25dOworCQlpZiAobiA8IGNvdW50IC0gMSkgeworCQkJcHJpbnRmICIgXFwiOworCQl9CisJCXByaW50ICIiOworCX0KKwlwcmludAkiIgorCXByaW50CSJhbGw6ICQoVEVTVFMpIgorCXByaW50CSIiCisJcHJpbnQJInNvdXJjZXM6IgorCXByaW50CSIiCisJcHJpbnQJInRhZ3M6IgorCXByaW50CSIJY3RhZ3MgKi5bY2hdIgorCXByaW50CSIiCisJcHJpbnQJImxpYnMgXFwiCisJcHJpbnQJImluc3RhbGwgXFwiCisJcHJpbnQJImluc3RhbGwubGlicyBcXCIKKwlwcmludAkiaW5zdGFsbC50ZXN0OiIKKwlwcmludAkiIgorCXByaW50CSJ1bmluc3RhbGw6IgorCXByaW50CSJ1bmluc3RhbGwubGliczoiCisJcHJpbnQJInVuaW5zdGFsbC50ZXN0OiIKKwlwcmludAkiIgorCXByaW50CSJtb3N0bHljbGVhbiA6OiIKKwlwcmludAkiCS1ybSAtZiBjb3JlIHRhZ3MgVEFHUyAqfiAqLmJhayAqLmkgKi5sbiAqLmF0YWMgdHJhY2UiCisJcHJpbnQJIiIKKwlwcmludAkiY2xlYW4gOjogbW9zdGx5Y2xlYW4iCisJcHJpbnQJIgktc2ggLWMgXCJpZiB0ZXN0IC1uICckeCcgOyB0aGVuICQoTUFLRSkgY2xlYW4geD0nJzsgZmlcIiIKKwlwcmludAkiCS1ybSAtcmYgKiRvIHNjcmVlbmR1bXAgKi5saXMgJChURVNUUykgLmxpYnMiCisJcHJpbnQJIiIKKwlwcmludAkiZGlzdGNsZWFuIDo6IGNsZWFuIgorCXByaW50CSIJLXJtIC1mIE1ha2VmaWxlIG5jdXJzZXNfY2ZnLmggY29uZmlnLioiCisJcHJpbnQJIiIKKwlwcmludAkicmVhbGNsZWFuIDo6IGRpc3RjbGVhbiIKKwlwcmludAkiIgorCXByaW50CSJsaW50OiIKKwlwcmludAkiCXNoIC1jICdmb3IgTiBpbiAkKFRFU1RTKTsgZG8gZWNobyBMSU5UOiQkTjsgJChMSU5UKSAkKExJTlRfT1BUUykgJChDUFBGTEFHUykgJChzcmNkaXIpLyQkTi5jICQoTElOVF9MSUJTKTsgZG9uZSciCisKKwlpZiAoRUNIT19MSU5LICE9ICIiKSB7CisJCUVDSE9fTElOSz0iQCBlY2hvIGxpbmtpbmcgJEAgLi4uIDsiCisJfQorCWZvciAobiA9IDA7IG4gPCBjb3VudDsgKytuKSB7CisJCXByaW50ICIiOworCQlwcmludGYgIiQoZGVzdGRpciklcyR4OiVzICVzXG4iLCBwcm9nc1tuXSwgZmlsZXNbbl0sIHVzaW5nW25dOworCQlwcmludGYgIlx0JXMkKExJTkspIC1vICRAJXMgJXNcbiIsIEVDSE9fTElOSywgZmlsZXNbbl0sIGZsYWdzW25dOworCX0KKworCX0KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvbW9kdWxlcyBiL25jdXJzZXMtNS43L3Rlc3QvbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU1NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9tb2R1bGVzCkBAIC0wLDAgKzEsODkgQEAKKyMgJElkOiBtb2R1bGVzLHYgMS4zNiAyMDA3LzA4LzE4IDE3OjU3OjA4IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkJMTk5Ny1vbgorIworIyBUZXN0LVByb2dyYW0gbW9kdWxlcworCitAIGJhc2UKK2JhY2tncm91bmQJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorYmx1ZQkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorYnMJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2NhcmRmaWxlCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykJLi4vaW5jbHVkZS9wYW5lbC5oIC4uL2luY2x1ZGUvZm9ybS5oCitjaGdhdAkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorY29sb3Jfc2V0CXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2RlbW9fYWx0a2V5cwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitkZW1vX2RlZmtleQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitkZW1vX2Zvcm1zCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykJLi4vaW5jbHVkZS9mb3JtLmggJChzcmNkaXIpL2VkaXRfZmllbGQuaAorZGVtb19rZXlvawlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitkZW1vX21lbnVzCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykJLi4vaW5jbHVkZS9tZW51LmgKK2RlbW9fcGFuZWxzCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykJLi4vaW5jbHVkZS9wYW5lbC5oCitkZW1vX3Rlcm1jYXAJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorZGl0dG8JCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2RvdHMJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2RvdHNfbXZjdXIJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorZWNob2NoYXIJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorZWRpdF9maWVsZAlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCSQoc3JjZGlyKS9lZGl0X2ZpZWxkLmgKK2ZpbHRlcgkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQkuLi9pbmNsdWRlL2Zvcm0uaAorZmlyZXdvcmsJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorZmlyc3RsYXN0CXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2ZvbGRrZXlzCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2dkYwkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQoraGFub2kJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2hhc2h0ZXN0CXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2luY2hfd2lkZQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCitpbmNocwkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQoraW5zX3dpZGUJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQoraW5zZXJ0cwkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQora2V5X25hbWVzCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2tleW5hbWVzCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK2tuaWdodAkJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQorbHJ0ZXN0CQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCittb3Zld2luZG93CXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK25jdXJzZXMJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykJLi4vaW5jbHVkZS9wYW5lbC5oIC4uL2luY2x1ZGUvbWVudS5oIC4uL2luY2x1ZGUvZm9ybS5oCituZXdkZW1vCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCityYWlscm9hZAlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCityYWluCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCityZWRyYXcJCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3NhdmVzY3JlZW4JcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordGNsb2NrCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit0ZXN0X2FycmF5cwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit0ZXN0X2dldF93c3RyCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3Rlc3RfZ2V0c3RyCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3Rlc3RfaW5zdHIJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordGVzdF9pbndzdHIJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordGVzdF9vcGFxdWUJcHJvZ3MJCSQoc3JjZGlyKQkkKEhFQURFUl9ERVBTKQordGVzdGFkZGNoCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3Rlc3RjdXJzCXByb2dzCQkkKHNyY2RpcikJJChIRUFERVJfREVQUykKK3Rlc3RzY2Fudwlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit2aWV3CQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit3b3JtCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCit4bWFzCQlwcm9ncwkJJChzcmNkaXIpCSQoSEVBREVSX0RFUFMpCisKKyMgdmlsZTptYWtlbW9kZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9tb3Zld2luZG93LmMgYi9uY3Vyc2VzLTUuNy90ZXN0L21vdmV3aW5kb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODI2ZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9tb3Zld2luZG93LmMKQEAgLTAsMCArMSw2MzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBtb3Zld2luZG93LmMsdiAxLjIyIDIwMDgvMDQvMTIgMjI6MDE6NDEgdG9tIEV4cCAkCisgKgorICogRGVtb25zdHJhdGUgbW92ZSBmdW5jdGlvbnMgZm9yIHdpbmRvd3MgYW5kIGRlcml2ZWQgd2luZG93cyBmcm9tIHRoZSBjdXJzZXMKKyAqIGxpYnJhcnkuCisgKgorICogVGhvbWFzIERpY2tleSAtIDIwMDYvMi8xMQorICovCisvKgorZGVyd2luCittdmRlcndpbgorc3Vid2luCittdndpbgorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lmZGVmIEhBVkVfWENVUlNFUworI3VuZGVmIGRlcndpbgorI2VuZGlmCisKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKyNkZWZpbmUgQ09OU1RfRk1UIGNvbnN0CisjZWxzZQorI2RlZmluZSBDT05TVF9GTVQJCS8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjdW5kZWYgTElORV9NQVgKKworI2RlZmluZSBMSU5FX01JTgkyCisjZGVmaW5lIExJTkVfTUFYCShMSU5FUyAtIDIpCisjZGVmaW5lIENPTF9NSU4JCTIKKyNkZWZpbmUgQ09MX01BWAkJKENPTFMgLSAyKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IHksIHg7Cit9IFBBSVI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXSU5ET1cgKnBhcmVudDsJCS8qIG5lZWQgdGhpcyBzaW5jZSBXSU5ET1ctPl9wYXJlbnQgaXMgbm90IHBvcnRhYmxlICovCisgICAgV0lORE9XICpjaGlsZDsJCS8qIHRoZSBhY3R1YWwgdmFsdWUgKi8KK30gRlJBTUU7CisKK3N0YXRpYyB2b2lkIGhlYWRfbGluZShDT05TVF9GTVQgY2hhciAqZm10LC4uLikgR0NDX1BSSU5URkxJS0UoMSwgMik7CitzdGF0aWMgdm9pZCB0YWlsX2xpbmUoQ09OU1RfRk1UIGNoYXIgKmZtdCwuLi4pIEdDQ19QUklOVEZMSUtFKDEsIDIpOworCitzdGF0aWMgdW5zaWduZWQgbnVtX3dpbmRvd3M7CitzdGF0aWMgRlJBTUUgKmFsbF93aW5kb3dzOworCitzdGF0aWMgdm9pZAorbWVzc2FnZShpbnQgbGluZW5vLCBDT05TVF9GTVQgY2hhciAqZm10LCB2YV9saXN0IGFyZ3ApCit7CisgICAgaW50IHksIHg7CisKKyAgICBnZXR5eChzdGRzY3IsIHksIHgpOworICAgIG1vdmUobGluZW5vLCAwKTsKKyAgICBjbHJ0b2VvbCgpOworCisjaWZkZWYgSEFWRV9YQ1VSU0VTCisgICAgeworCWNoYXIgYnVmZmVyWzEwMjRdOworCXZzcHJpbnRmKGJ1ZmZlciwgZm10LCBhcmdwKTsKKwlhZGRzdHIoYnVmZmVyKTsKKyAgICB9CisjZWxzZQorICAgIHZ3cHJpbnR3KHN0ZHNjciwgZm10LCBhcmdwKTsKKyNlbmRpZgorCisgICAgbW92ZSh5LCB4KTsKKyAgICByZWZyZXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkCitoZWFkX2xpbmUoQ09OU1RfRk1UIGNoYXIgKmZtdCwuLi4pCit7CisgICAgdmFfbGlzdCBhcmdwOworCisgICAgdmFfc3RhcnQoYXJncCwgZm10KTsKKyAgICBtZXNzYWdlKDAsIGZtdCwgYXJncCk7CisgICAgdmFfZW5kKGFyZ3ApOworfQorCitzdGF0aWMgdm9pZAordGFpbF9saW5lKENPTlNUX0ZNVCBjaGFyICpmbXQsLi4uKQoreworICAgIHZhX2xpc3QgYXJncDsKKworICAgIHZhX3N0YXJ0KGFyZ3AsIGZtdCk7CisgICAgbWVzc2FnZShMSU5FUyAtIDEsIGZtdCwgYXJncCk7CisgICAgdmFfZW5kKGFyZ3ApOworfQorCisvKgorICogQXJyb3cga2V5cyBtb3ZlIGN1cnNvciwgcmV0dXJuIGxvY2F0aW9uIGF0IGN1cnJlbnQgb24gbm9uLWFycm93IGtleS4KKyAqLworc3RhdGljIFBBSVIgKgorc2VsZWN0Y2VsbChXSU5ET1cgKnBhcmVudCwgaW50IHVsaSwgaW50IHVsaiwgaW50IGxyaSwgaW50IGxyaikKK3sKKyAgICBzdGF0aWMgUEFJUiByZXM7CQkvKiByZXN1bHQgY2VsbCAqLworICAgIGludCBzaSA9IGxyaSAtIHVsaSArIDE7CS8qIGRlcHRoIG9mIHRoZSBzZWxlY3QgYXJlYSAqLworICAgIGludCBzaiA9IGxyaiAtIHVsaiArIDE7CS8qIHdpZHRoIG9mIHRoZSBzZWxlY3QgYXJlYSAqLworICAgIGludCBpID0gMCwgaiA9IDA7CQkvKiBvZmZzZXRzIGludG8gdGhlIHNlbGVjdCBhcmVhICovCisKKyAgICByZXMueSA9IHVsaTsKKyAgICByZXMueCA9IHVsajsKKyAgICBmb3IgKDs7KSB7CisJdGFpbF9saW5lKCJVcHBlciBsZWZ0IFslMmQsJTJkXSBMb3dlciByaWdodCBbJTJkLCUyZF0gLT4gJWQsJWQiLAorCQkgIHVsaSwgdWxqLAorCQkgIGxyaSwgbHJqLAorCQkgIHVsaSArIGksIHVsaiArIGopOworCXdtb3ZlKHBhcmVudCwgdWxpICsgaSwgdWxqICsgaik7CisKKwlzd2l0Y2ggKHdnZXRjaChwYXJlbnQpKSB7CisJY2FzZSBLRVlfVVA6CisJICAgIGkgKz0gc2kgLSAxOworCSAgICBicmVhazsKKwljYXNlIEtFWV9ET1dOOgorCSAgICBpKys7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJICAgIGogKz0gc2ogLSAxOworCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgaisrOworCSAgICBicmVhazsKKwljYXNlIFFVSVQ6CisJY2FzZSBFU0NBUEU6CisJICAgIHJldHVybiAoKFBBSVIgKikgMCk7CisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisJY2FzZSBLRVlfTU9VU0U6CisJICAgIHsKKwkJTUVWRU5UIGV2ZW50OworCisJCWdldG1vdXNlKCZldmVudCk7CisJCWlmIChldmVudC55ID4gdWxpICYmIGV2ZW50LnggPiB1bGopIHsKKwkJICAgIGkgPSBldmVudC55IC0gdWxpOworCQkgICAgaiA9IGV2ZW50LnggLSB1bGo7CisJCX0gZWxzZSB7CisJCSAgICBiZWVwKCk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIC8qIEZBTExUSFJVICovCisjZW5kaWYKKwlkZWZhdWx0OgorCSAgICByZXMueSA9IHVsaSArIGk7CisJICAgIHJlcy54ID0gdWxqICsgajsKKwkgICAgcmV0dXJuICgmcmVzKTsKKwl9CisJaSAlPSBzaTsKKwlqICU9IHNqOworICAgIH0KK30KKworLyoKKyAqIEFzayB1c2VyIGZvciBhIHdpbmRvdyBkZWZpbml0aW9uLgorICovCitzdGF0aWMgYm9vbAorZ2V0d2luZG93KFdJTkRPVyAqcGFyZW50LCBQQUlSICogdWwsIFBBSVIgKiBscikKK3sKKyAgICBpbnQgbWluX2NvbCA9IChwYXJlbnQgPT0gc3Rkc2NyKSA/IENPTF9NSU4gOiAwOworICAgIGludCBtYXhfY29sID0gKHBhcmVudCA9PSBzdGRzY3IpID8gQ09MX01BWCA6IGdldG1heHgocGFyZW50KTsKKyAgICBpbnQgbWluX2xpbmUgPSAocGFyZW50ID09IHN0ZHNjcikgPyBMSU5FX01JTiA6IDA7CisgICAgaW50IG1heF9saW5lID0gKHBhcmVudCA9PSBzdGRzY3IpID8gTElORV9NQVggOiBnZXRtYXh5KHBhcmVudCk7CisgICAgUEFJUiAqdG1wOworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBoZWFkX2xpbmUoIlVzZSBhcnJvd3MgdG8gbW92ZSBjdXJzb3IsIGFueXRoaW5nIGVsc2UgdG8gbWFyayBjb3JuZXIgMSIpOworICAgIGlmICgodG1wID0gc2VsZWN0Y2VsbChwYXJlbnQsIG1pbl9saW5lLCBtaW5fY29sLCBtYXhfbGluZSwgbWF4X2NvbCkpICE9IDApIHsKKwkqdWwgPSAqdG1wOworCW12d2FkZGNoKHBhcmVudCwgdWwtPnksIHVsLT54LCAnKicpOworCisJaGVhZF9saW5lKCJVc2UgYXJyb3dzIHRvIG1vdmUgY3Vyc29yLCBhbnl0aGluZyBlbHNlIHRvIG1hcmsgY29ybmVyIDIiKTsKKwlpZiAoKHRtcCA9IHNlbGVjdGNlbGwocGFyZW50LCB1bC0+eSwgdWwtPngsIG1heF9saW5lLCBtYXhfY29sKSkgIT0gMCkgeworCSAgICAqbHIgPSAqdG1wOworCSAgICBtdndhZGRjaChwYXJlbnQsIGxyLT55LCBsci0+eCwgJyonKTsKKwkgICAgd21vdmUocGFyZW50LCBsci0+eSwgbHItPngpOworCSAgICB3c3luY2Rvd24ocGFyZW50KTsKKwkgICAgd3JlZnJlc2gocGFyZW50KTsKKwkgICAgcmVzdWx0ID0gKGxyLT55ICE9IHVsLT55ICYmIGxyLT54ICE9IHVsLT54KTsKKwl9CisgICAgfQorICAgIGhlYWRfbGluZSgiZG9uZSIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBEcmF3IGEgYm94IGluc2lkZSB0aGUgZ2l2ZW4gd2luZG93LgorICovCitzdGF0aWMgdm9pZAorYm94X2luc2lkZShXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgeTAsIHgwOworICAgIGludCB5MSwgeDE7CisKKyAgICBnZXR5eCh3aW4sIHkwLCB4MCk7CisgICAgZ2V0bWF4eXgod2luLCB5MSwgeDEpOworCisgICAgbXZ3aGxpbmUod2luLCAwLCAwLCBBQ1NfSExJTkUsIHgxKTsKKyAgICBtdndobGluZSh3aW4sIHkxIC0gMSwgMCwgQUNTX0hMSU5FLCB4MSk7CisKKyAgICBtdnd2bGluZSh3aW4sIDAsIDAsIEFDU19WTElORSwgeTEpOworICAgIG12d3ZsaW5lKHdpbiwgMCwgeDEgLSAxLCBBQ1NfVkxJTkUsIHkxKTsKKworICAgIG12d2FkZGNoKHdpbiwgMCwgMCwgQUNTX1VMQ09STkVSKTsKKyAgICBtdndhZGRjaCh3aW4sIHkxIC0gMSwgMCwgQUNTX0xMQ09STkVSKTsKKyAgICBtdndhZGRjaCh3aW4sIDAsIHgxIC0gMSwgQUNTX1VSQ09STkVSKTsKKyAgICBtdndhZGRjaCh3aW4sIHkxIC0gMSwgeDEgLSAxLCBBQ1NfTFJDT1JORVIpOworCisgICAgd3N5bmNkb3duKHdpbik7CisgICAgd21vdmUod2luLCB5MCwgeDApOworICAgIHdyZWZyZXNoKHdpbik7Cit9CisKKy8qCisgKiBBZGQgYSB3aW5kb3cgdG8gb3VyIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfd2luZG93KFdJTkRPVyAqcGFyZW50LCBXSU5ET1cgKmNoaWxkKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXZlID0gMDsKKyAgICB1bnNpZ25lZCBuZWVkID0gKChudW1fd2luZG93cyArIDEpIHwgMzEpICsgMTsKKworICAgIGtleXBhZChjaGlsZCwgVFJVRSk7CisgICAgaWYgKG5lZWQgPiBoYXZlKSB7CisJYWxsX3dpbmRvd3MgPSB0eXBlUmVhbGxvYyhGUkFNRSwgbmVlZCwgYWxsX3dpbmRvd3MpOworICAgIH0KKyAgICBhbGxfd2luZG93c1tudW1fd2luZG93c10ucGFyZW50ID0gcGFyZW50OworICAgIGFsbF93aW5kb3dzW251bV93aW5kb3dzXS5jaGlsZCA9IGNoaWxkOworICAgIG51bV93aW5kb3dzKys7Cit9CisKK3N0YXRpYyBpbnQKK3dpbmRvdzJudW0oV0lORE9XICp3aW4pCit7CisgICAgaW50IG47CisgICAgaW50IHJlc3VsdCA9IC0xOworICAgIGZvciAobiA9IDA7IG4gPCAoaW50KSBudW1fd2luZG93czsgKytuKSB7CisJaWYgKHdpbiA9PSBhbGxfd2luZG93c1tuXS5jaGlsZCkgeworCSAgICByZXN1bHQgPSBuOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBXSU5ET1cgKgorcGFyZW50X29mKFdJTkRPVyAqd2luKQoreworICAgIFdJTkRPVyAqcmVzdWx0ID0gMDsKKyAgICBpbnQgbiA9IHdpbmRvdzJudW0od2luKTsKKyAgICBpZiAobiA+PSAwKQorCXJlc3VsdCA9IGFsbF93aW5kb3dzW25dLnBhcmVudDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorcmVwYWludF9vbmUoV0lORE9XICp3aW4pCit7CisgICAgdG91Y2h3aW4od2luKTsKKyAgICB3bm91dHJlZnJlc2god2luKTsKK30KKworc3RhdGljIHZvaWQKK3JlZnJlc2hfYWxsKFdJTkRPVyAqd2luKQoreworICAgIHVuc2lnbmVkIG47CisKKyAgICBmb3IgKG4gPSAwOyBuIDwgbnVtX3dpbmRvd3M7ICsrbikgeworCWlmIChhbGxfd2luZG93c1tuXS5jaGlsZCAhPSB3aW4pIHsKKwkgICAgcmVwYWludF9vbmUoYWxsX3dpbmRvd3Nbbl0uY2hpbGQpOworCX0KKyAgICB9CisKKyAgICByZXBhaW50X29uZSh3aW4pOworICAgIGRvdXBkYXRlKCk7Cit9CisKK3N0YXRpYyBXSU5ET1cgKgorbmV4dF93aW5kb3coV0lORE9XICp3aW4pCit7CisgICAgV0lORE9XICpyZXN1bHQgPSB3aW47CisgICAgaW50IG4gPSB3aW5kb3cybnVtKHdpbik7CisKKyAgICBpZiAobisrID49IDApIHsKKwlyZXN1bHQgPSBhbGxfd2luZG93c1tuICUgbnVtX3dpbmRvd3NdLmNoaWxkOworCXdtb3ZlKHJlc3VsdCwgMCwgMCk7CisJd3JlZnJlc2gocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdJTkRPVyAqCitwcmV2X3dpbmRvdyhXSU5ET1cgKndpbikKK3sKKyAgICBXSU5ET1cgKnJlc3VsdCA9IHdpbjsKKyAgICBpbnQgbiA9IHdpbmRvdzJudW0od2luKTsKKworICAgIGlmIChuLS0gPj0gMCkgeworCWlmIChuIDwgMCkKKwkgICAgbiA9IG51bV93aW5kb3dzIC0gMTsKKwlyZXN1bHQgPSBhbGxfd2luZG93c1tuICUgbnVtX3dpbmRvd3NdLmNoaWxkOworCXdtb3ZlKHJlc3VsdCwgMCwgMCk7CisJd3JlZnJlc2gocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3JlY3VyX21vdmVfd2luZG93KFdJTkRPVyAqcGFyZW50LCBpbnQgZHksIGludCBkeCkKK3sKKyAgICB1bnNpZ25lZCBuOworCisgICAgZm9yIChuID0gMDsgbiA8IG51bV93aW5kb3dzOyArK24pIHsKKwlpZiAoYWxsX3dpbmRvd3Nbbl0ucGFyZW50ID09IHBhcmVudCkgeworCSAgICBpbnQgeTAsIHgwOworCisJICAgIGdldGJlZ3l4KGFsbF93aW5kb3dzW25dLmNoaWxkLCB5MCwgeDApOworCSAgICBtdndpbihhbGxfd2luZG93c1tuXS5jaGlsZCwgeTAgKyBkeSwgeDAgKyBkeCk7CisJICAgIHJlY3VyX21vdmVfd2luZG93KGFsbF93aW5kb3dzW25dLmNoaWxkLCBkeSwgZHgpOworCX0KKyAgICB9Cit9CisKKy8qCisgKiB0ZXN0IG12d2luKCkuCisgKi8KK3N0YXRpYyBib29sCittb3ZlX3dpbmRvdyhXSU5ET1cgKndpbiwgYm9vbCByZWN1cikKK3sKKyAgICBXSU5ET1cgKnBhcmVudCA9IHBhcmVudF9vZih3aW4pOworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBpZiAocGFyZW50ICE9IDApIHsKKwlib29sIHRvcCA9IChwYXJlbnQgPT0gc3Rkc2NyKTsKKwlpbnQgbWluX2NvbCA9IHRvcCA/IENPTF9NSU4gOiAwOworCWludCBtYXhfY29sID0gdG9wID8gQ09MX01BWCA6IGdldG1heHgocGFyZW50KTsKKwlpbnQgbWluX2xpbmUgPSB0b3AgPyBMSU5FX01JTiA6IDA7CisJaW50IG1heF9saW5lID0gdG9wID8gTElORV9NQVggOiBnZXRtYXh5KHBhcmVudCk7CisJUEFJUiAqdG1wOworCisJaGVhZF9saW5lKCJTZWxlY3QgbmV3IHBvc2l0aW9uIGZvciAlc3dpbmRvdyIsIHRvcCA/ICIiIDogInN1YiIpOworCisJaWYgKCh0bXAgPSBzZWxlY3RjZWxsKHBhcmVudCwKKwkJCSAgICAgIG1pbl9saW5lLCBtaW5fY29sLAorCQkJICAgICAgbWF4X2xpbmUsIG1heF9jb2wpKSAhPSAwKSB7CisJICAgIGludCB5MCwgeDA7CisJICAgIGdldGJlZ3l4KHBhcmVudCwgeTAsIHgwKTsKKwkgICAgLyoKKwkgICAgICogTm90ZTogIE1vdmluZyBhIHN1YndpbmRvdyBoYXMgdGhlIGVmZmVjdCBvZiBtb3ZpbmcgYSB2aWV3cG9ydAorCSAgICAgKiBhcm91bmQgdGhlIHNjcmVlbi4gIFRoZSBwYXJlbnQgd2luZG93IHJldGFpbnMgdGhlIGNvbnRlbnRzIG9mCisJICAgICAqIHRoZSBzdWJ3aW5kb3cgaW4gdGhlIG9yaWdpbmFsIGxvY2F0aW9uLCBidXQgdGhlIHZpZXdwb3J0IHdpbGwKKwkgICAgICogc2hvdyB0aGUgY29udGVudHMgKGFnYWluKSBhdCB0aGUgbmV3IGxvY2F0aW9uLiAgU28gaXQgd2lsbCBsb29rCisJICAgICAqIG9kZCB3aGVuIHRlc3RpbmcuCisJICAgICAqLworCSAgICBpZiAobXZ3aW4od2luLCB5MCArIHRtcC0+eSwgeDAgKyB0bXAtPngpICE9IEVSUikgeworCQlpZiAocmVjdXIpIHsKKwkJICAgIHJlY3VyX21vdmVfd2luZG93KHdpbiwgdG1wLT55LCB0bXAtPngpOworCQl9CisJCXJlZnJlc2hfYWxsKHdpbik7CisJCWRvdXBkYXRlKCk7CisJCXJlc3VsdCA9IFRSVUU7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiB0ZXN0IG12ZGVyd2luKCkuCisgKi8KK3N0YXRpYyBib29sCittb3ZlX3N1YndpbihXSU5ET1cgKndpbikKK3sKKyAgICBXSU5ET1cgKnBhcmVudCA9IHBhcmVudF9vZih3aW4pOworICAgIGJvb2wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBpZiAocGFyZW50ICE9IDApIHsKKwlib29sIHRvcCA9IChwYXJlbnQgPT0gc3Rkc2NyKTsKKwlpZiAoIXRvcCkgeworCSAgICBpbnQgbWluX2NvbCA9IHRvcCA/IENPTF9NSU4gOiAwOworCSAgICBpbnQgbWF4X2NvbCA9IHRvcCA/IENPTF9NQVggOiBnZXRtYXh4KHBhcmVudCk7CisJICAgIGludCBtaW5fbGluZSA9IHRvcCA/IExJTkVfTUlOIDogMDsKKwkgICAgaW50IG1heF9saW5lID0gdG9wID8gTElORV9NQVggOiBnZXRtYXh5KHBhcmVudCk7CisJICAgIFBBSVIgKnRtcDsKKworCSAgICBoZWFkX2xpbmUoIlNlbGVjdCBuZXcgcG9zaXRpb24gZm9yIHN1YndpbmRvdyIpOworCisJICAgIGlmICgodG1wID0gc2VsZWN0Y2VsbChwYXJlbnQsCisJCQkJICBtaW5fbGluZSwgbWluX2NvbCwKKwkJCQkgIG1heF9saW5lLCBtYXhfY29sKSkgIT0gMCkgeworCQlpbnQgeTAsIHgwOworCQlnZXRiZWd5eChwYXJlbnQsIHkwLCB4MCk7CisJCWlmIChtdmRlcndpbih3aW4sIHkwICsgdG1wLT55LCB4MCArIHRtcC0+eCkgIT0gRVJSKSB7CisJCSAgICByZWZyZXNoX2FsbCh3aW4pOworCQkgICAgZG91cGRhdGUoKTsKKwkJICAgIHJlc3VsdCA9IFRSVUU7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2ZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjaHR5cGUgY2gpCit7CisgICAgaW50IHksIHg7CisgICAgaW50IHkwLCB4MDsKKyAgICBpbnQgeTEsIHgxOworCisgICAgZ2V0eXgod2luLCB5MCwgeDApOworICAgIGdldG1heHl4KHdpbiwgeTEsIHgxKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgeTE7ICsreSkgeworCWZvciAoeCA9IDA7IHggPCB4MTsgKyt4KSB7CisJICAgIG12d2FkZGNoKHdpbiwgeSwgeCwgY2gpOworCX0KKyAgICB9CisgICAgd3N5bmNkb3duKHdpbik7CisgICAgd21vdmUod2luLCB5MCwgeDApOworICAgIHdyZWZyZXNoKHdpbik7Cit9CisKKyNkZWZpbmUgbGluZXNfb2YodWwsbHIpCShsci55IC0gdWwueSArIDEpCisjZGVmaW5lIGNvbHNfb2YodWwsbHIpCShsci54IC0gdWwueCArIDEpCisjZGVmaW5lIHBhaXJfb2YodWwpCXVsLnksIHVsLngKKworc3RhdGljIFdJTkRPVyAqCitjcmVhdGVfbXlfd2luZG93KFdJTkRPVyAqY3VycmVudCkKK3sKKyAgICBQQUlSIHVsLCBscjsKKyAgICBXSU5ET1cgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAoZ2V0d2luZG93KHN0ZHNjciwgJnVsLCAmbHIpKSB7CisJcmVzdWx0ID0gbmV3d2luKGxpbmVzX29mKHVsLCBsciksIGNvbHNfb2YodWwsIGxyKSwgcGFpcl9vZih1bCkpOworCWlmIChyZXN1bHQgIT0gMCkgeworCSAgICBmaWxsX3dpbmRvdyhyZXN1bHQsICdjJyk7CisJICAgIGFkZF93aW5kb3coc3Rkc2NyLCByZXN1bHQpOworCX0KKyAgICB9CisgICAgaWYgKHJlc3VsdCA9PSAwKQorCXJlc3VsdCA9IGN1cnJlbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdJTkRPVyAqCitjcmVhdGVfbXlfZGVyd2luKFdJTkRPVyAqcGFyZW50KQoreworICAgIFBBSVIgdWwsIGxyOworICAgIFdJTkRPVyAqcmVzdWx0ID0gMDsKKworICAgIGlmIChnZXR3aW5kb3cocGFyZW50LCAmdWwsICZscikpIHsKKwlyZXN1bHQgPSBkZXJ3aW4ocGFyZW50LCBsaW5lc19vZih1bCwgbHIpLCBjb2xzX29mKHVsLCBsciksIHBhaXJfb2YodWwpKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkgICAgZmlsbF93aW5kb3cocmVzdWx0LCAnZCcpOworCSAgICBhZGRfd2luZG93KHBhcmVudCwgcmVzdWx0KTsKKwl9CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0gMCkKKwlyZXN1bHQgPSBwYXJlbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFdJTkRPVyAqCitjcmVhdGVfbXlfc3Vid2luKFdJTkRPVyAqcGFyZW50KQoreworICAgIFBBSVIgdWwsIGxyOworICAgIFdJTkRPVyAqcmVzdWx0ID0gMDsKKworICAgIGlmIChnZXR3aW5kb3cocGFyZW50LCAmdWwsICZscikpIHsKKwlyZXN1bHQgPSBzdWJ3aW4ocGFyZW50LAorCQkJbGluZXNfb2YodWwsIGxyKSwKKwkJCWNvbHNfb2YodWwsIGxyKSwKKwkJCXVsLnkgKyBnZXRiZWd5KHBhcmVudCksCisJCQl1bC54ICsgZ2V0YmVneChwYXJlbnQpKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkgICAgZmlsbF93aW5kb3cocmVzdWx0LCAncycpOworCSAgICBhZGRfd2luZG93KHBhcmVudCwgcmVzdWx0KTsKKwl9CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0gMCkKKwlyZXN1bHQgPSBwYXJlbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfaGVscChXSU5ET1cgKmN1cnJlbnQpCit7CisgICAgLyogKklOREVOVC1PRkYqICovCisgICAgc3RhdGljIHN0cnVjdCB7CisJaW50CWtleTsKKwlDT05TVF9GTVQgY2hhciAqIG1zZzsKKyAgICB9IGhlbHBbXSA9IHsKKwl7ICc/JywJCSJTaG93IHRoaXMgc2NyZWVuIiB9LAorCXsgJ2InLAkJIkRyYXcgYSBib3ggaW5zaWRlIHRoZSBjdXJyZW50IHdpbmRvdyIgfSwKKwl7ICdjJywJCSJDcmVhdGUgYSBuZXcgd2luZG93IiB9LAorCXsgJ2QnLAkJIkNyZWF0ZSBhIG5ldyBkZXJpdmVkIHdpbmRvdyIgfSwKKwl7ICdmJywJCSJGaWxsIHRoZSBjdXJyZW50IHdpbmRvdyB3aXRoIHRoZSBuZXh0IGNoYXJhY3RlciIgfSwKKwl7ICdtJywJCSJNb3ZlIHRoZSBjdXJyZW50IHdpbmRvdyIgfSwKKwl7ICdNJywJCSJNb3ZlIHRoZSBjdXJyZW50IHdpbmRvdyAoYW5kIGl0cyBjaGlsZHJlbikiIH0sCisJeyAncScsCQkiUXVpdCIgfSwKKwl7ICdzJywJCSJDcmVhdGUgYSBuZXcgc3Vid2luZG93IiB9LAorCXsgJ3QnLAkJIk1vdmUgdGhlIGN1cnJlbnQgc3Vid2luZG93IChtb3ZlcyBjb250ZW50KSIgfSwKKwl7IENUUkwoJ0wnKSwJIlJlcGFpbnQgYWxsIHdpbmRvd3MsIGRvaW5nIGN1cnJlbnQgb25lIGxhc3QiIH0sCisJeyBDVFJMKCdOJyksCSJDdXJzb3IgdG8gbmV4dCB3aW5kb3ciIH0sCisJeyBDVFJMKCdQJyksCSJDdXJzb3IgdG8gcHJldmlvdXMgd2luZG93IiB9LAorICAgIH07CisgICAgLyogKklOREVOVC1PTiogKi8KKworICAgIFdJTkRPVyAqbXl3aW4gPSBuZXd3aW4oTElORVMsIENPTFMsIDAsIDApOworICAgIGludCByb3c7CisKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IExJTkVTIC0gMiAmJiByb3cgPCAoaW50KSBTSVpFT0YoaGVscCk7ICsrcm93KSB7CisJd21vdmUobXl3aW4sIHJvdyArIDEsIDEpOworCXdwcmludHcobXl3aW4sICIlcyIsIGtleW5hbWUoaGVscFtyb3ddLmtleSkpOworCXdtb3ZlKG15d2luLCByb3cgKyAxLCAyMCk7CisJd3ByaW50dyhteXdpbiwgIiVzIiwgaGVscFtyb3ddLm1zZyk7CisgICAgfQorICAgIGJveF9pbnNpZGUobXl3aW4pOworICAgIHdtb3ZlKG15d2luLCAxLCAxKTsKKyAgICB3Z2V0Y2gobXl3aW4pOworICAgIGRlbHdpbihteXdpbik7CisgICAgcmVmcmVzaF9hbGwoY3VycmVudCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYyBHQ0NfVU5VU0VELCBjaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIFdJTkRPVyAqY3VycmVudF93aW47CisgICAgaW50IGNoOworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworCisgICAgaW5pdHNjcigpOworICAgIGNicmVhaygpOworICAgIG5vZWNobygpOworICAgIG5vbmwoKTsKKyAgICBpbnRyZmx1c2goc3Rkc2NyLCBGQUxTRSk7CisKKyAgICBhZGRfd2luZG93KDAsIGN1cnJlbnRfd2luID0gc3Rkc2NyKTsKKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgICh2b2lkKSBtb3VzZW1hc2soQlVUVE9OMV9DTElDS0VELCAobW1hc2tfdCAqKSBOVUxMKTsKKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKworICAgIHdoaWxlICghZG9uZSAmJiAoY2ggPSB3Z2V0Y2goY3VycmVudF93aW4pKSAhPSBFUlIpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnPyc6CisJICAgIHNob3dfaGVscChjdXJyZW50X3dpbik7CisJICAgIGJyZWFrOworCWNhc2UgJ2InOgorCSAgICBib3hfaW5zaWRlKGN1cnJlbnRfd2luKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYyc6CisJICAgIGN1cnJlbnRfd2luID0gY3JlYXRlX215X3dpbmRvdyhjdXJyZW50X3dpbik7CisJICAgIGJyZWFrOworCWNhc2UgJ2QnOgorCSAgICBjdXJyZW50X3dpbiA9IGNyZWF0ZV9teV9kZXJ3aW4oY3VycmVudF93aW4pOworCSAgICBicmVhazsKKwljYXNlICdmJzoKKwkgICAgZmlsbF93aW5kb3coY3VycmVudF93aW4sIChjaHR5cGUpIHdnZXRjaChjdXJyZW50X3dpbikpOworCSAgICBicmVhazsKKwljYXNlICdtJzoKKwljYXNlICdNJzoKKwkgICAgaWYgKCFtb3ZlX3dpbmRvdyhjdXJyZW50X3dpbiwgKGNoID09ICdNJykpKSB7CisJCXRhaWxfbGluZSgiZXJyb3IiKTsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAncSc6CisJICAgIGRvbmUgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICdzJzoKKwkgICAgY3VycmVudF93aW4gPSBjcmVhdGVfbXlfc3Vid2luKGN1cnJlbnRfd2luKTsKKwkgICAgYnJlYWs7CisJY2FzZSAndCc6CisJICAgIGlmICghbW92ZV9zdWJ3aW4oY3VycmVudF93aW4pKSB7CisJCXRhaWxfbGluZSgiZXJyb3IiKTsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdMJyk6CisJICAgIHJlZnJlc2hfYWxsKGN1cnJlbnRfd2luKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdOJyk6CisJICAgIGN1cnJlbnRfd2luID0gbmV4dF93aW5kb3coY3VycmVudF93aW4pOworCSAgICBicmVhazsKKwljYXNlIENUUkwoJ1AnKToKKwkgICAgY3VycmVudF93aW4gPSBwcmV2X3dpbmRvdyhjdXJyZW50X3dpbik7CisJICAgIGJyZWFrOworI2lmIDAKKwkgICAgLyogd2FudCB0byBhbGxvdyBjdXJzb3IgdG8gbW92ZSBhcm91bmQgdGhlIGN1cnJlbnQgd2luZG93IHRvbyAqLworCSAgICAvKiB3YW50IHRvIHRlc3QgdGhlIHJlc2l6aW5nIG9mIHdpbmRvd3MgYW5kIHN1YndpbmRvd3MgdG9vICovCisJICAgIC8qIHdhbnQgdG8gYWxsb3cgZGVsZXRpbmcgYSB3aW5kb3cgYWxzbyAqLworI2VuZGlmCisJZGVmYXVsdDoKKwkgICAgdGFpbF9saW5lKCJ1bnJlY29nbml6ZWQga2V5ICh1c2UgJz8nIGZvciBoZWxwKSIpOworCSAgICBiZWVwKCk7CisJICAgIGNvbnRpbnVlOworCX0KKwl0YWlsX2xpbmUoInNpemUgWyVkLCVkXSBiZWdpbiBbJWQsJWRdIHBhcmVudCBbJWQsJWRdIiwKKwkJICBnZXRtYXh5KGN1cnJlbnRfd2luKSwKKwkJICBnZXRtYXh4KGN1cnJlbnRfd2luKSwKKwkJICBnZXRiZWd5KGN1cnJlbnRfd2luKSwKKwkJICBnZXRiZWd4KGN1cnJlbnRfd2luKSwKKwkJICBnZXRwYXJ5KGN1cnJlbnRfd2luKSwKKwkJICBnZXRwYXJ4KGN1cnJlbnRfd2luKSk7CisJd21vdmUoY3VycmVudF93aW4sIDAsIDApOworICAgIH0KKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9uY3Vyc2VzLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L25jdXJzZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmQ3ZGZhCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC9uY3Vyc2VzLmMKQEAgLTAsMCArMSw2NTcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTkFNRQorICAgbmN1cnNlcy5jIC0tLSBuY3Vyc2VzIGxpYnJhcnkgZXhlcmNpc2VyCisKK1NZTk9QU0lTCisgICBuY3Vyc2VzCisKK0RFU0NSSVBUSU9OCisgICBBbiBpbnRlcmFjdGl2ZSB0ZXN0IG1vZHVsZSBmb3IgdGhlIG5jdXJzZXMgbGlicmFyeS4KKworQVVUSE9SCisgICBBdXRob3I6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPiAxOTkzCisgICAgICAgICAgIFRob21hcyBFLiBEaWNrZXkgKGJlZ2lubmluZyByZXZpc2lvbiAxLjI3IGluIDE5OTYpLgorCiskSWQ6IG5jdXJzZXMuYyx2IDEuMzI5IDIwMDgvMDkvMjcgMTQ6MzQ6NTggdG9tIEV4cCAkCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWZkZWYgX19ocHV4CisjdW5kZWYgbXZ3ZGVsY2gJCQkvKiBIUFVYIDExLjIzIG1hY3JvIHdpbGwgbm90IGNvbXBpbGUgKi8KKyNlbmRpZgorCisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyNpZiBIQVZFX1NZU19USU1FX0ggJiYgSEFWRV9TWVNfVElNRV9TRUxFQ1QKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFX0xJQlBBTkVMCisjaW5jbHVkZSA8cGFuZWwuaD4KKyNlbmRpZgorCisjaWYgVVNFX0xJQk1FTlUKKyNpbmNsdWRlIDxtZW51Lmg+CisjZW5kaWYKKworI2lmIFVTRV9MSUJGT1JNCisjaW5jbHVkZSA8Zm9ybS5oPgorI2VuZGlmCisKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKworI2RlZmluZSBOQ1VSU0VTX0NPTlNUX1BBUkFNIGNvbnN0IHZvaWQKKworI2lmZGVmIFRSQUNFCitzdGF0aWMgdW5zaWduZWQgc2F2ZV90cmFjZSA9IFRSQUNFX09SRElOQVJZIHwgVFJBQ0VfSUNBTExTIHwgVFJBQ0VfQ0FMTFM7CitleHRlcm4gdW5zaWduZWQgX25jX3RyYWNpbmc7CisjZW5kaWYKKworI2Vsc2UKKworI2RlZmluZSBOQ1VSU0VTX0NPTlNUX1BBUkFNIGNoYXIKKworI2RlZmluZSBtbWFza190IGNodHlwZQkJLyogbm90IHNwZWNpZmllZCBpbiBYU0kgKi8KKworI2lmbmRlZiBBQ1NfUzMKKyNpZmRlZiBDVVJTRVNfQUNTX0FSUkFZCisjZGVmaW5lIEFDU19TMyAgICAgICAgICAoQ1VSU0VTX0FDU19BUlJBWVsncCddKQkJLyogc2NhbiBsaW5lIDMgKi8KKyNkZWZpbmUgQUNTX1M3ICAgICAgICAgIChDVVJTRVNfQUNTX0FSUkFZWydyJ10pCQkvKiBzY2FuIGxpbmUgNyAqLworI2RlZmluZSBBQ1NfTEVRVUFMICAgICAgKENVUlNFU19BQ1NfQVJSQVlbJ3knXSkJCS8qIGxlc3MvZXF1YWwgKi8KKyNkZWZpbmUgQUNTX0dFUVVBTCAgICAgIChDVVJTRVNfQUNTX0FSUkFZWyd6J10pCQkvKiBncmVhdGVyL2VxdWFsICovCisjZGVmaW5lIEFDU19QSSAgICAgICAgICAoQ1VSU0VTX0FDU19BUlJBWVsneyddKQkJLyogUGkgKi8KKyNkZWZpbmUgQUNTX05FUVVBTCAgICAgIChDVVJTRVNfQUNTX0FSUkFZWyd8J10pCQkvKiBub3QgZXF1YWwgKi8KKyNkZWZpbmUgQUNTX1NURVJMSU5HICAgIChDVVJTRVNfQUNTX0FSUkFZWyd9J10pCQkvKiBVSyBwb3VuZCBzaWduICovCisjZWxzZQorI2RlZmluZSBBQ1NfUzMgICAgICAgICAgKEFfQUxUQ0hBUlNFVCArICdwJykJLyogc2NhbiBsaW5lIDMgKi8KKyNkZWZpbmUgQUNTX1M3ICAgICAgICAgIChBX0FMVENIQVJTRVQgKyAncicpCS8qIHNjYW4gbGluZSA3ICovCisjZGVmaW5lIEFDU19MRVFVQUwgICAgICAoQV9BTFRDSEFSU0VUICsgJ3knKQkvKiBsZXNzL2VxdWFsICovCisjZGVmaW5lIEFDU19HRVFVQUwgICAgICAoQV9BTFRDSEFSU0VUICsgJ3onKQkvKiBncmVhdGVyL2VxdWFsICovCisjZGVmaW5lIEFDU19QSSAgICAgICAgICAoQV9BTFRDSEFSU0VUICsgJ3snKQkvKiBQaSAqLworI2RlZmluZSBBQ1NfTkVRVUFMICAgICAgKEFfQUxUQ0hBUlNFVCArICd8JykJLyogbm90IGVxdWFsICovCisjZGVmaW5lIEFDU19TVEVSTElORyAgICAoQV9BTFRDSEFSU0VUICsgJ30nKQkvKiBVSyBwb3VuZCBzaWduICovCisjZW5kaWYKKyNlbmRpZiAvKiBBQ1NfUzMgKi8KKworI2lmZGVmIENVUlNFU19XQUNTX0FSUkFZCisjZGVmaW5lIFdBQ1NfUzMgICAgICAgICAoJihDVVJTRVNfV0FDU19BUlJBWVsncCddKSkJLyogc2NhbiBsaW5lIDMgKi8KKyNkZWZpbmUgV0FDU19TNyAgICAgICAgICgmKENVUlNFU19XQUNTX0FSUkFZWydyJ10pKQkvKiBzY2FuIGxpbmUgNyAqLworI2RlZmluZSBXQUNTX0xFUVVBTCAgICAgKCYoQ1VSU0VTX1dBQ1NfQVJSQVlbJ3knXSkpCS8qIGxlc3MvZXF1YWwgKi8KKyNkZWZpbmUgV0FDU19HRVFVQUwgICAgICgmKENVUlNFU19XQUNTX0FSUkFZWyd6J10pKQkvKiBncmVhdGVyL2VxdWFsICovCisjZGVmaW5lIFdBQ1NfUEkgICAgICAgICAoJihDVVJTRVNfV0FDU19BUlJBWVsneyddKSkJLyogUGkgKi8KKyNkZWZpbmUgV0FDU19ORVFVQUwgICAgICgmKENVUlNFU19XQUNTX0FSUkFZWyd8J10pKQkvKiBub3QgZXF1YWwgKi8KKyNkZWZpbmUgV0FDU19TVEVSTElORyAgICgmKENVUlNFU19XQUNTX0FSUkFZWyd9J10pKQkvKiBVSyBwb3VuZCBzaWduICovCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiBIQVZFX1dDU1JUT01CUworI2RlZmluZSBjb3VudF93Y2hhcnMoc3JjLCBsZW4sIHN0YXRlKSAgICAgIHdjc3J0b21icygwLCAgICZzcmMsIGxlbiwgc3RhdGUpCisjZGVmaW5lIHRyYW5zX3djaGFycyhkc3QsIHNyYywgbGVuLCBzdGF0ZSkgd2NzcnRvbWJzKGRzdCwgJnNyYywgbGVuLCBzdGF0ZSkKKyNkZWZpbmUgcmVzZXRfd2NoYXJzKHN0YXRlKSBtZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKQorI2VsaWYgSEFWRV9XQ1NUT01CUyAmJiBIQVZFX01CVE9XQyAmJiBIQVZFX01CTEVOCisjZGVmaW5lIGNvdW50X3djaGFycyhzcmMsIGxlbiwgc3RhdGUpICAgICAgd2NzdG9tYnMoMCwgICBzcmMsIGxlbikKKyNkZWZpbmUgdHJhbnNfd2NoYXJzKGRzdCwgc3JjLCBsZW4sIHN0YXRlKSB3Y3N0b21icyhkc3QsIHNyYywgbGVuKQorI2RlZmluZSByZXNldF93Y2hhcnMoc3RhdGUpIG1ibGVuKE5VTEwsIDApLCBtYnRvd2MoTlVMTCwgTlVMTCwgMCkKKyNkZWZpbmUgc3RhdGVfdW51c2VkCisjZW5kaWYKKworI2lmIEhBVkVfTUJTUlRPV0NTCisjZGVmaW5lIGNvdW50X21ieXRlcyhzcmMsIGxlbiwgc3RhdGUpICAgICAgbWJzcnRvd2NzKDAsICAgJnNyYywgbGVuLCBzdGF0ZSkKKyNkZWZpbmUgdHJhbnNfbWJ5dGVzKGRzdCwgc3JjLCBsZW4sIHN0YXRlKSBtYnNydG93Y3MoZHN0LCAmc3JjLCBsZW4sIHN0YXRlKQorI2RlZmluZSByZXNldF9tYnl0ZXMoc3RhdGUpIG1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpCisjZWxpZiBIQVZFX01CU1RPV0NTICYmIEhBVkVfTUJUT1dDICYmIEhBVkVfTUJMRU4KKyNkZWZpbmUgY291bnRfbWJ5dGVzKHNyYywgbGVuLCBzdGF0ZSkgICAgICBtYnN0b3djcygwLCAgIHNyYywgbGVuKQorI2RlZmluZSB0cmFuc19tYnl0ZXMoZHN0LCBzcmMsIGxlbiwgc3RhdGUpIG1ic3Rvd2NzKGRzdCwgc3JjLCBsZW4pCisjZGVmaW5lIHJlc2V0X21ieXRlcyhzdGF0ZSkgbWJsZW4oTlVMTCwgMCksIG1idG93YyhOVUxMLCBOVUxMLCAwKQorI2RlZmluZSBzdGF0ZV91bnVzZWQKKyNlbmRpZgorCisjZGVmaW5lIFRvZ2dsZUFjcyh0ZW1wLHJlYWwpIHRlbXAgPSAoKHRlbXAgPT0gcmVhbCkgPyAwIDogcmVhbCkKKworI2RlZmluZSBQKHN0cmluZykJcHJpbnR3KCIlc1xuIiwgc3RyaW5nKQorCisjZGVmaW5lIEJMQU5LCQknICcJLyogdGhpcyBpcyB0aGUgYmFja2dyb3VuZCBjaGFyYWN0ZXIgKi8KKworI3VuZGVmIG1heF9jb2xvcnMKK3N0YXRpYyBpbnQgbWF4X2NvbG9yczsJCS8qIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNvbG9ycyB3ZSdsbCB1c2UgKi8KK3N0YXRpYyBpbnQgbWluX2NvbG9yczsJCS8qIHRoZSBtaW5pbXVtIGNvbG9yIGNvZGUgKi8KK3N0YXRpYyBib29sIHVzZV9jb2xvcnM7CQkvKiB0cnVlIGlmIHdlIHVzZSBjb2xvcnMgKi8KKworI3VuZGVmIG1heF9wYWlycworc3RhdGljIGludCBtYXhfcGFpcnM7CQkvKiAuLi5hbmQgdGhlIG51bWJlciBvZiBjb2xvciBwYWlycyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc2hvcnQgcmVkOworICAgIHNob3J0IGdyZWVuOworICAgIHNob3J0IGJsdWU7Cit9IFJHQl9EQVRBOworCitzdGF0aWMgUkdCX0RBVEEgKmFsbF9jb2xvcnM7CisKK3N0YXRpYyB2b2lkIG1haW5fbWVudShib29sKTsKKworLyogVGhlIGJlaGF2aW9yIG9mIG12aGxpbmUsIG12dmxpbmUgZm9yIG5lZ2F0aXZlL3plcm8gbGVuZ3RoIGlzIHVuc3BlY2lmaWVkLAorICogdGhvdWdoIHdlIGNhbiByZWx5IG9uIG5lZ2F0aXZlIHgveSB2YWx1ZXMgdG8gc3RvcCB0aGUgbWFjcm8uCisgKi8KK3N0YXRpYyB2b2lkCitkb19oX2xpbmUoaW50IHksIGludCB4LCBjaHR5cGUgYywgaW50IHRvKQoreworICAgIGlmICgodG8pID4gKHgpKQorCW12aGxpbmUoeSwgeCwgYywgKHRvKSAtICh4KSk7Cit9CisKK3N0YXRpYyB2b2lkCitkb192X2xpbmUoaW50IHksIGludCB4LCBjaHR5cGUgYywgaW50IHRvKQoreworICAgIGlmICgodG8pID4gKHkpKQorCW12dmxpbmUoeSwgeCwgYywgKHRvKSAtICh5KSk7Cit9CisKK3N0YXRpYyB2b2lkCitSZXBhaW50KHZvaWQpCit7CisgICAgdG91Y2h3aW4oc3Rkc2NyKTsKKyAgICB0b3VjaHdpbihjdXJzY3IpOworICAgIHdyZWZyZXNoKGN1cnNjcik7Cit9CisKK3N0YXRpYyBib29sCitpc1F1aXQoaW50IGMpCit7CisgICAgcmV0dXJuICgoYykgPT0gUVVJVCB8fCAoYykgPT0gRVNDQVBFKTsKK30KKyNkZWZpbmUgY2FzZV9RVUlUCVFVSVQ6IGNhc2UgRVNDQVBFCisKKy8qIENvbW1vbiBmdW5jdGlvbiB0byBhbGxvdyBeVCB0byB0b2dnbGUgdHJhY2UtbW9kZSBpbiB0aGUgbWlkZGxlIG9mIGEgdGVzdAorICogc28gdGhhdCB0cmFjZS1maWxlcyBjYW4gYmUgbWFkZSBzbWFsbGVyLgorICovCitzdGF0aWMgaW50Cit3R2V0Y2hhcihXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgYzsKKyNpZmRlZiBUUkFDRQorICAgIHdoaWxlICgoYyA9IHdnZXRjaCh3aW4pKSA9PSBDVFJMKCdUJykpIHsKKwlpZiAoX25jX3RyYWNpbmcpIHsKKwkgICAgc2F2ZV90cmFjZSA9IF9uY190cmFjaW5nOworCSAgICBUcmFjZSgoIlRPR0dMRS1UUkFDSU5HIE9GRiIpKTsKKwkgICAgX25jX3RyYWNpbmcgPSAwOworCX0gZWxzZSB7CisJICAgIF9uY190cmFjaW5nID0gc2F2ZV90cmFjZTsKKwl9CisJdHJhY2UoX25jX3RyYWNpbmcpOworCWlmIChfbmNfdHJhY2luZykKKwkgICAgVHJhY2UoKCJUT0dHTEUtVFJBQ0lORyBPTiIpKTsKKyAgICB9CisjZWxzZQorICAgIGMgPSB3Z2V0Y2god2luKTsKKyNlbmRpZgorICAgIHJldHVybiBjOworfQorI2RlZmluZSBHZXRjaGFyKCkgd0dldGNoYXIoc3Rkc2NyKQorCisvKiByZXBsYWNlcyB3Z2V0bnN0cigpLCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZWRpdCB2YWx1ZXMgKi8KK3N0YXRpYyB2b2lkCit3R2V0c3RyaW5nKFdJTkRPVyAqd2luLCBjaGFyICpidWZmZXIsIGludCBsaW1pdCkKK3sKKyAgICBpbnQgeTAsIHgwLCB4LCBjaDsKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKworICAgIGVjaG8oKTsKKyAgICBnZXR5eCh3aW4sIHkwLCB4MCk7CisgICAgd2F0dHJzZXQod2luLCBBX1JFVkVSU0UpOworCisgICAgeCA9IChpbnQpIHN0cmxlbihidWZmZXIpOworICAgIHdoaWxlICghZG9uZSkgeworCWlmICh4ID4gKGludCkgc3RybGVuKGJ1ZmZlcikpCisJICAgIHggPSAoaW50KSBzdHJsZW4oYnVmZmVyKTsKKwl3bW92ZSh3aW4sIHkwLCB4MCk7CisJd3ByaW50dyh3aW4sICIlLSpzIiwgbGltaXQsIGJ1ZmZlcik7CisJd21vdmUod2luLCB5MCwgeDAgKyB4KTsKKwlzd2l0Y2ggKGNoID0gd0dldGNoYXIod2luKSkgeworCWNhc2UgJ1xuJzoKKwljYXNlIEtFWV9FTlRFUjoKKwkgICAgZG9uZSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgQ1RSTCgnVScpOgorCSAgICAqYnVmZmVyID0gJ1wwJzsKKwkgICAgYnJlYWs7CisJY2FzZSAnXGInOgorCWNhc2UgS0VZX0JBQ0tTUEFDRToKKwljYXNlIEtFWV9EQzoKKwkgICAgaWYgKHggPiAwKSB7CisJCWludCBqOworCQlmb3IgKGogPSAtLXg7IChidWZmZXJbal0gPSBidWZmZXJbaiArIDFdKSAhPSAnXDAnOyArK2opIHsKKwkJICAgIDsKKwkJfQorCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfTEVGVDoKKwkgICAgaWYgKHggPiAwKSB7CisJCS0teDsKKwkgICAgfSBlbHNlIHsKKwkJZmxhc2goKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgKyt4OworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBpZiAoIWlzcHJpbnQoY2gpIHx8IGNoID49IEtFWV9NSU4pIHsKKwkJYmVlcCgpOworCSAgICB9IGVsc2UgaWYgKChpbnQpIHN0cmxlbihidWZmZXIpIDwgbGltaXQpIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IChpbnQpIHN0cmxlbihidWZmZXIpICsgMTsgaiA+IHg7IC0taikgeworCQkgICAgYnVmZmVyW2pdID0gYnVmZmVyW2ogLSAxXTsKKwkJfQorCQlidWZmZXJbeCsrXSA9IChjaGFyKSBjaDsKKwkgICAgfSBlbHNlIHsKKwkJZmxhc2goKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICB3YXR0cm9mZih3aW4sIEFfUkVWRVJTRSk7CisgICAgd21vdmUod2luLCB5MCwgeDApOworICAgIG5vZWNobygpOworfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK3N0YXRpYyB3Y2hhcl90CitmdWxsd2lkdGhfb2YoaW50IGNoKQoreworICAgIHJldHVybiAoY2ggKyAweGZmMTAgLSAnMCcpOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9mdWxsd2lkdGhfdGV4dCh3Y2hhcl90ICp0YXJnZXQsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgICBpbnQgY2g7CisgICAgd2hpbGUgKChjaCA9ICpzb3VyY2UrKykgIT0gMCkgeworCSp0YXJnZXQrKyA9IGZ1bGx3aWR0aF9vZihjaCk7CisgICAgfQorICAgICp0YXJnZXQgPSAwOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9uYXJyb3dfdGV4dCh3Y2hhcl90ICp0YXJnZXQsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgICBpbnQgY2g7CisgICAgd2hpbGUgKChjaCA9ICpzb3VyY2UrKykgIT0gMCkgeworCSp0YXJnZXQrKyA9IGNoOworICAgIH0KKyAgICAqdGFyZ2V0ID0gMDsKK30KKworc3RhdGljIHZvaWQKK21ha2VfZnVsbHdpZHRoX2RpZ2l0KGNjaGFyX3QgKnRhcmdldCwgaW50IGRpZ2l0KQoreworICAgIHdjaGFyX3Qgc291cmNlWzJdOworCisgICAgc291cmNlWzBdID0gZnVsbHdpZHRoX29mKGRpZ2l0ICsgJzAnKTsKKyAgICBzb3VyY2VbMV0gPSAwOworICAgIHNldGNjaGFyKHRhcmdldCwgc291cmNlLCBBX05PUk1BTCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3dHZXRfd2NoYXIoV0lORE9XICp3aW4sIHdpbnRfdCAqcmVzdWx0KQoreworICAgIGludCBjOworI2lmZGVmIFRSQUNFCisgICAgd2hpbGUgKChjID0gd2dldF93Y2god2luLCByZXN1bHQpKSA9PSBDVFJMKCdUJykpIHsKKwlpZiAoX25jX3RyYWNpbmcpIHsKKwkgICAgc2F2ZV90cmFjZSA9IF9uY190cmFjaW5nOworCSAgICBUcmFjZSgoIlRPR0dMRS1UUkFDSU5HIE9GRiIpKTsKKwkgICAgX25jX3RyYWNpbmcgPSAwOworCX0gZWxzZSB7CisJICAgIF9uY190cmFjaW5nID0gc2F2ZV90cmFjZTsKKwl9CisJdHJhY2UoX25jX3RyYWNpbmcpOworCWlmIChfbmNfdHJhY2luZykKKwkgICAgVHJhY2UoKCJUT0dHTEUtVFJBQ0lORyBPTiIpKTsKKyAgICB9CisjZWxzZQorICAgIGMgPSB3Z2V0X3djaCh3aW4sIHJlc3VsdCk7CisjZW5kaWYKKyAgICByZXR1cm4gYzsKK30KKyNkZWZpbmUgR2V0X3djaGFyKHJlc3VsdCkgd0dldF93Y2hhcihzdGRzY3IsIHJlc3VsdCkKKworLyogcmVwbGFjZXMgd2dldG5fd3N0cigpLCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZWRpdCB2YWx1ZXMgKi8KK3N0YXRpYyB2b2lkCit3R2V0X3dzdHJpbmcoV0lORE9XICp3aW4sIHdjaGFyX3QgKmJ1ZmZlciwgaW50IGxpbWl0KQoreworICAgIGludCB5MCwgeDAsIHg7CisgICAgd2ludF90IGNoOworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworICAgIGJvb2wgZmtleSA9IEZBTFNFOworCisgICAgZWNobygpOworICAgIGdldHl4KHdpbiwgeTAsIHgwKTsKKyAgICB3YXR0cnNldCh3aW4sIEFfUkVWRVJTRSk7CisKKyAgICB4ID0gKGludCkgd2NzbGVuKGJ1ZmZlcik7CisgICAgd2hpbGUgKCFkb25lKSB7CisJaWYgKHggPiAoaW50KSB3Y3NsZW4oYnVmZmVyKSkKKwkgICAgeCA9IChpbnQpIHdjc2xlbihidWZmZXIpOworCisJLyogY2xlYXIgdGhlICJ3aW5kb3cnICovCisJd21vdmUod2luLCB5MCwgeDApOworCXdwcmludHcod2luLCAiJSpzIiwgbGltaXQsICIgIik7CisKKwkvKiB3cml0ZSB0aGUgZXhpc3RpbmcgYnVmZmVyIGNvbnRlbnRzICovCisJd21vdmUod2luLCB5MCwgeDApOworCXdhZGRud3N0cih3aW4sIGJ1ZmZlciwgbGltaXQpOworCisJLyogcG9zaXRpb25zIHRoZSBjdXJzb3IgcGFzdCBjaGFyYWN0ZXIgJ3gnICovCisJd21vdmUod2luLCB5MCwgeDApOworCXdhZGRud3N0cih3aW4sIGJ1ZmZlciwgeCk7CisKKwlzd2l0Y2ggKHdHZXRfd2NoYXIod2luLCAmY2gpKSB7CisJY2FzZSBLRVlfQ09ERV9ZRVM6CisJICAgIGZrZXkgPSBUUlVFOworCSAgICBzd2l0Y2ggKGNoKSB7CisJICAgIGNhc2UgS0VZX0VOVEVSOgorCQljaCA9ICdcbic7CisJCWZrZXkgPSBGQUxTRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX0JBQ0tTUEFDRToKKwkgICAgY2FzZSBLRVlfREM6CisJCWNoID0gJ1xiJzsKKwkJZmtleSA9IEZBTFNFOworCQlicmVhazsKKwkgICAgY2FzZSBLRVlfTEVGVDoKKwkgICAgY2FzZSBLRVlfUklHSFQ6CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQljaCA9ICh3aW50X3QpIC0xOworCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIE9LOgorCSAgICBma2V5ID0gRkFMU0U7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGNoID0gKHdpbnRfdCkgLTE7CisJICAgIGZrZXkgPSBUUlVFOworCSAgICBicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnXG4nOgorCSAgICBkb25lID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdVJyk6CisJICAgICpidWZmZXIgPSAnXDAnOworCSAgICBicmVhazsKKwljYXNlICdcYic6CisJICAgIGlmICh4ID4gMCkgeworCQlpbnQgajsKKwkJZm9yIChqID0gLS14OyAoYnVmZmVyW2pdID0gYnVmZmVyW2ogKyAxXSkgIT0gJ1wwJzsgKytqKSB7CisJCSAgICA7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJICAgIGlmICh4ID4gMCkgeworCQktLXg7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgKyt4OworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBpZiAoZmtleSkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSBpZiAoKGludCkgd2NzbGVuKGJ1ZmZlcikgPCBsaW1pdCkgeworCQlpbnQgajsKKwkJZm9yIChqID0gKGludCkgd2NzbGVuKGJ1ZmZlcikgKyAxOyBqID4geDsgLS1qKSB7CisJCSAgICBidWZmZXJbal0gPSBidWZmZXJbaiAtIDFdOworCQl9CisJCWJ1ZmZlclt4KytdID0gKHdjaGFyX3QpIGNoOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgd2F0dHJvZmYod2luLCBBX1JFVkVSU0UpOworICAgIHdtb3ZlKHdpbiwgeTAsIHgwKTsKKyAgICBub2VjaG8oKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2b2lkCitQYXVzZSh2b2lkKQoreworICAgIG1vdmUoTElORVMgLSAxLCAwKTsKKyAgICBhZGRzdHIoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4gIik7CisgICAgKHZvaWQpIEdldGNoYXIoKTsKK30KKworc3RhdGljIHZvaWQKK0Nhbm5vdChjb25zdCBjaGFyICp3aGF0KQoreworICAgIHByaW50dygiXG5UaGlzICVzIHRlcm1pbmFsICVzXG5cbiIsIGdldGVudigiVEVSTSIpLCB3aGF0KTsKKyAgICBQYXVzZSgpOworfQorCitzdGF0aWMgdm9pZAorU2hlbGxPdXQoYm9vbCBtZXNzYWdlKQoreworICAgIGlmIChtZXNzYWdlKQorCWFkZHN0cigiU2hlbGxpbmcgb3V0Li4uIik7CisgICAgZGVmX3Byb2dfbW9kZSgpOworICAgIGVuZHdpbigpOworICAgIHN5c3RlbSgic2giKTsKKyAgICBpZiAobWVzc2FnZSkKKwlhZGRzdHIoInJldHVybmVkIGZyb20gc2hlbGxvdXQuXG4iKTsKKyAgICByZWZyZXNoKCk7Cit9CisKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIF90cmFjZW1vdXNlKCksIGJ1dCB3ZSBjYW5ub3QgY291bnQgb24gdGhhdAorICogYmVpbmcgYXZhaWxhYmxlIGluIHRoZSBub24tZGVidWcgbGlicmFyeS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorbW91c2VfZGVjb2RlKE1FVkVOVCBjb25zdCAqZXApCit7CisgICAgc3RhdGljIGNoYXIgYnVmWzgwICsgKDUgKiAxMCkgKyAoMzIgKiAxNSldOworCisgICAgKHZvaWQpIHNwcmludGYoYnVmLCAiaWQgJTJkICBhdCAoJTJkLCAlMmQsICUyZCkgc3RhdGUgJTRseCA9IHsiLAorCQkgICBlcC0+aWQsIGVwLT54LCBlcC0+eSwgZXAtPnosICh1bnNpZ25lZCBsb25nKSBlcC0+YnN0YXRlKTsKKworI2RlZmluZSBTSE9XKG0sIHMpIGlmICgoZXAtPmJzdGF0ZSAmIG0pPT1tKSB7c3RyY2F0KGJ1ZixzKTsgc3RyY2F0KGJ1ZiwgIiwgIik7fQorCisgICAgU0hPVyhCVVRUT04xX1JFTEVBU0VELCAicmVsZWFzZS0xIik7CisgICAgU0hPVyhCVVRUT04xX1BSRVNTRUQsICJwcmVzcy0xIik7CisgICAgU0hPVyhCVVRUT04xX0NMSUNLRUQsICJjbGljay0xIik7CisgICAgU0hPVyhCVVRUT04xX0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stMSIpOworICAgIFNIT1coQlVUVE9OMV9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTEiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9OMV9SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTEiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT04yX1JFTEVBU0VELCAicmVsZWFzZS0yIik7CisgICAgU0hPVyhCVVRUT04yX1BSRVNTRUQsICJwcmVzcy0yIik7CisgICAgU0hPVyhCVVRUT04yX0NMSUNLRUQsICJjbGljay0yIik7CisgICAgU0hPVyhCVVRUT04yX0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stMiIpOworICAgIFNIT1coQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTIiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9OMl9SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTIiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT04zX1JFTEVBU0VELCAicmVsZWFzZS0zIik7CisgICAgU0hPVyhCVVRUT04zX1BSRVNTRUQsICJwcmVzcy0zIik7CisgICAgU0hPVyhCVVRUT04zX0NMSUNLRUQsICJjbGljay0zIik7CisgICAgU0hPVyhCVVRUT04zX0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stMyIpOworICAgIFNIT1coQlVUVE9OM19UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTMiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9OM19SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTMiKTsKKyNlbmRpZgorCisgICAgU0hPVyhCVVRUT040X1JFTEVBU0VELCAicmVsZWFzZS00Iik7CisgICAgU0hPVyhCVVRUT040X1BSRVNTRUQsICJwcmVzcy00Iik7CisgICAgU0hPVyhCVVRUT040X0NMSUNLRUQsICJjbGljay00Iik7CisgICAgU0hPVyhCVVRUT040X0RPVUJMRV9DTElDS0VELCAiZG91YmxlY2xpY2stNCIpOworICAgIFNIT1coQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCwgInRyaXBsZWNsaWNrLTQiKTsKKyNpZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gPT0gMQorICAgIFNIT1coQlVUVE9ONF9SRVNFUlZFRF9FVkVOVCwgInJlc2VydmVkLTQiKTsKKyNlbmRpZgorCisjaWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OID09IDIKKyAgICBTSE9XKEJVVFRPTjVfUkVMRUFTRUQsICJyZWxlYXNlLTUiKTsKKyAgICBTSE9XKEJVVFRPTjVfUFJFU1NFRCwgInByZXNzLTUiKTsKKyAgICBTSE9XKEJVVFRPTjVfQ0xJQ0tFRCwgImNsaWNrLTUiKTsKKyAgICBTSE9XKEJVVFRPTjVfRE9VQkxFX0NMSUNLRUQsICJkb3VibGVjbGljay01Iik7CisgICAgU0hPVyhCVVRUT041X1RSSVBMRV9DTElDS0VELCAidHJpcGxlY2xpY2stNSIpOworI2VuZGlmCisKKyAgICBTSE9XKEJVVFRPTl9DVFJMLCAiY3RybCIpOworICAgIFNIT1coQlVUVE9OX1NISUZULCAic2hpZnQiKTsKKyAgICBTSE9XKEJVVFRPTl9BTFQsICJhbHQiKTsKKyAgICBTSE9XKEFMTF9NT1VTRV9FVkVOVFMsICJhbGwtZXZlbnRzIik7CisgICAgU0hPVyhSRVBPUlRfTU9VU0VfUE9TSVRJT04sICJwb3NpdGlvbiIpOworCisjdW5kZWYgU0hPVworCisgICAgaWYgKGJ1ZltzdHJsZW4oYnVmKSAtIDFdID09ICcgJykKKwlidWZbc3RybGVuKGJ1ZikgLSAyXSA9ICdcMCc7CisgICAgKHZvaWQpIHN0cmNhdChidWYsICJ9Iik7CisgICAgcmV0dXJuIChidWYpOworfQorI2VuZGlmIC8qIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENoYXJhY3RlciBpbnB1dCB0ZXN0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitzZXR1cF9nZXRjaChXSU5ET1cgKndpbiwgYm9vbCBmbGFnc1tdKQoreworICAgIGtleXBhZCh3aW4sIGZsYWdzWydrJ10pOwkvKiBzaG91bGQgYmUgcmVkdW5kYW50LCBidXQgZm9yIHRlc3RpbmcgKi8KKyAgICBtZXRhKHdpbiwgZmxhZ3NbJ20nXSk7CS8qIGZvcmNlIHRoaXMgdG8gYSBrbm93biBzdGF0ZSAqLworICAgIGlmIChmbGFnc1snZSddKQorCWVjaG8oKTsKKyAgICBlbHNlCisJbm9lY2hvKCk7Cit9CisKK3N0YXRpYyB2b2lkCit3Z2V0Y2hfaGVscChXSU5ET1cgKndpbiwgYm9vbCBmbGFnc1tdKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpoZWxwW10gPQorICAgIHsKKwkiZSAgLS0gdG9nZ2xlIGVjaG8gbW9kZSIKKwksImcgIC0tIHRyaWdnZXJzIGEgZ2V0c3RyIHRlc3QiCisJLCJrICAtLSB0b2dnbGUga2V5cGFkL2xpdGVyYWwgbW9kZSIKKwksIm0gIC0tIHRvZ2dsZSBtZXRhICg3LWJpdC84LWJpdCkgbW9kZSIKKwksIl5xIC0tIHF1aXQiCisJLCJzICAtLSBzaGVsbCBvdXRcbiIKKwksIncgIC0tIGNyZWF0ZSBhIG5ldyB3aW5kb3ciCisjaWZkZWYgU0lHVFNUUAorCSwieiAgLS0gc3VzcGVuZCB0aGlzIHByb2Nlc3MiCisjZW5kaWYKKyAgICB9OworICAgIGludCB5LCB4OworICAgIHVuc2lnbmVkIGNoayA9ICgoU0laRU9GKGhlbHApICsgMSkgLyAyKTsKKyAgICB1bnNpZ25lZCBuOworCisgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICBtb3ZlKDAsIDApOworICAgIHByaW50dygiVHlwZSBhbnkga2V5IHRvIHNlZSBpdHMgJXMgdmFsdWUuICBBbHNvOlxuIiwKKwkgICBmbGFnc1snayddID8gImtleXBhZCIgOiAibGl0ZXJhbCIpOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YoaGVscCk7ICsrbikgeworCWludCByb3cgPSAxICsgKGludCkgKG4gJSBjaGspOworCWludCBjb2wgPSAobiA+PSBjaGspID8gQ09MUyAvIDIgOiAwOworCWludCBmbGcgPSAoKHN0cnN0cihoZWxwW25dLCAidG9nZ2xlIikgIT0gMCkKKwkJICAgJiYgKGZsYWdzW1VDaGFyKCpoZWxwW25dKV0gIT0gRkFMU0UpKTsKKwlpZiAoZmxnKQorCSAgICBzdGFuZG91dCgpOworCW12cHJpbnR3KHJvdywgY29sLCAiJXMiLCBoZWxwW25dKTsKKwlpZiAoY29sID09IDApCisJICAgIGNscnRvZW9sKCk7CisJaWYgKGZsZykKKwkgICAgc3RhbmRlbmQoKTsKKyAgICB9CisgICAgd3JlZnJlc2goc3Rkc2NyKTsKKyAgICB3bW92ZSh3aW4sIHksIHgpOworfQorCitzdGF0aWMgdm9pZAord2dldGNoX3dyYXAoV0lORE9XICp3aW4sIGludCBmaXJzdF95KQoreworICAgIGludCBsYXN0X3kgPSBnZXRtYXh5KHdpbikgLSAxOworICAgIGludCB5ID0gZ2V0Y3VyeSh3aW4pICsgMTsKKworICAgIGlmICh5ID49IGxhc3RfeSkKKwl5ID0gZmlyc3RfeTsKKyAgICB3bW92ZSh3aW4sIHksIDApOworICAgIHdjbHJ0b2VvbCh3aW4pOworfQorCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoS0VZX1JFU0laRSkgJiYgSEFWRV9XUkVTSVpFCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV0lORE9XICp0ZXh0OworICAgIFdJTkRPVyAqZnJhbWU7Cit9IFdJTlNUQUNLOworCitzdGF0aWMgV0lOU1RBQ0sgKndpbnN0YWNrID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsZW5fd2luc3RhY2sgPSAwOworCitzdGF0aWMgdm9pZAorZm9yZ2V0X2JveGVzKHZvaWQpCit7CisgICAgaWYgKHdpbnN0YWNrICE9IDApIHsKKwlmcmVlKHdpbnN0YWNrKTsKKyAgICB9CisgICAgd2luc3RhY2sgPSAwOworICAgIGxlbl93aW5zdGFjayA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCityZW1lbWJlcl9ib3hlcyh1bnNpZ25lZCBsZXZlbCwgV0lORE9XICp0eHRfd2luLCBXSU5ET1cgKmJveF93aW4pCit7CisgICAgdW5zaWduZWQgbmVlZCA9IChsZXZlbCArIDEpICogMjsKKworICAgIGFzc2VydChsZXZlbCA8IENPTFMpOworCisgICAgaWYgKHdpbnN0YWNrID09IDApIHsKKwlsZW5fd2luc3RhY2sgPSAyMDsKKwl3aW5zdGFjayA9IHR5cGVNYWxsb2MoV0lOU1RBQ0ssIGxlbl93aW5zdGFjayk7CisgICAgfSBlbHNlIGlmIChuZWVkID49IGxlbl93aW5zdGFjaykgeworCWxlbl93aW5zdGFjayA9IG5lZWQ7CisJd2luc3RhY2sgPSB0eXBlUmVhbGxvYyhXSU5TVEFDSywgbGVuX3dpbnN0YWNrLCB3aW5zdGFjayk7CisgICAgfQorICAgIHdpbnN0YWNrW2xldmVsXS50ZXh0ID0gdHh0X3dpbjsKKyAgICB3aW5zdGFja1tsZXZlbF0uZnJhbWUgPSBib3hfd2luOworfQorCisjaWYgVVNFX1NPRlRLRVlTICYmIChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0ggPCAyMDA3MTIyOSkgJiYgTkNVUlNFU19FWFRfRlVOQ1MKK3N0YXRpYyB2b2lkCitzbGtfcmVwYWludCh2b2lkKQoreworICAgIC8qIHRoaXMgY2h1bmsgaXMgbm93IGRvbmUgaW4gcmVzaXplX3Rlcm0oKSAqLworICAgIHNsa190b3VjaCgpOworICAgIHNsa19jbGVhcigpOworICAgIHNsa19ub3V0cmVmcmVzaCgpOworfQorCisjZWxzZQorI2RlZmluZSBzbGtfcmVwYWludCgpCQkvKiBub3RoaW5nICovCisjZW5kaWYKKworLyoKKyAqIEZvciB3Z2V0Y2hfdGVzdCgpLCB3ZSBjcmVhdGUgcGFpcnMgb2Ygd2luZG93cyAtIG9uZSBmb3IgYSBib3gsIG9uZSBmb3IgdGV4dC4KKyAqIFJlc2l6ZSBib3RoIGFuZCBwYWludCB0aGUgYm94IGluIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkCityZXNpemVfYm94ZXModW5zaWduZWQgbGV2ZWwsIFdJTkRPVyAqd2luKQoreworICAgIHVuc2lnbmVkIG47CisgICAgaW50IGJhc2UgPSA1OworICAgIGludCBoaWdoID0gTElORVMgLSBiYXNlOworICAgIGludCB3aWRlID0gQ09MUzsKKworICAgIHRvdWNod2luKHN0ZHNjcik7CisgICAgd25vdXRyZWZyZXNoKHN0ZHNjcik7CisKKyAgICBzbGtfcmVwYWludCgpOworCisgICAgZm9yIChuID0gMDsgbiA8IGxldmVsOyArK24pIHsKKwl3cmVzaXplKHdpbnN0YWNrW25dLmZyYW1lLCBoaWdoLCB3aWRlKTsKKwl3cmVzaXplKHdpbnN0YWNrW25dLnRleHQsIGhpZ2ggLSAyLCB3aWRlIC0gMik7CisJaGlnaCAtPSAyOworCXdpZGUgLT0gMjsKKwl3ZXJhc2Uod2luc3RhY2tbbl0udGV4dCk7CisJYm94KHdpbnN0YWNrW25dLmZyYW1lLCAwLCAwKTsKKwl3bm91dHJlZnJlc2god2luc3RhY2tbbl0uZnJhbWUpOworCXdwcmludHcod2luc3RhY2tbbl0udGV4dCwKKwkJInNpemUgJWR4JWRcbiIsCisJCWdldG1heHkod2luc3RhY2tbbl0udGV4dCksCisJCWdldG1heHgod2luc3RhY2tbbl0udGV4dCkpOworCXdub3V0cmVmcmVzaCh3aW5zdGFja1tuXS50ZXh0KTsKKwlpZiAod2luc3RhY2tbbl0udGV4dCA9PSB3aW4pCisJICAgIGJyZWFrOworICAgIH0KKyAgICBkb3VwZGF0ZSgpOworfQorI2Vsc2UKKyNkZWZpbmUgZm9yZ2V0X2JveGVzKCkJCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgcmVtZW1iZXJfYm94ZXMobGV2ZWwsdGV4dCxmcmFtZSkJLyogbm90aGluZyAqLworI2VuZGlmCisKK3N0YXRpYyB2b2lkCit3Z2V0Y2hfdGVzdCh1bnNpZ25lZCBsZXZlbCwgV0lORE9XICp3aW4sIGludCBkZWxheSkKK3sKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworICAgIGludCBmaXJzdF95LCBmaXJzdF94OworICAgIGludCBjOworICAgIGludCBpbmNvdW50ID0gMDsKKyAgICBib29sIGZsYWdzWzI1Nl07CisgICAgYm9vbCBibG9ja2luZyA9IChkZWxheSA8IDApOworCisgICAgbWVtc2V0KGZsYWdzLCBGQUxTRSwgc2l6ZW9mKGZsYWdzKSk7CisgICAgZmxhZ3NbVUNoYXIoJ2snKV0gPSAod2luID09IHN0ZHNjcik7CisKKyAgICBzZXR1cF9nZXRjaCh3aW4sIGZsYWdzKTsKKyAgICB3dGltZW91dCh3aW4sIGRlbGF5KTsKKyAgICBnZXR5eCh3aW4sIGZpcnN0X3ksIGZpcnN0X3gpOworCisgICAgd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisgICAgd3NldHNjcnJlZyh3aW4sIGZpcnN0X3ksIGdldG1heHkod2luKSAtIDEpOworICAgIHNjcm9sbG9rKHdpbiwgVFJVRSk7CisKKyAgICBmb3IgKDs7KSB7CisJd2hpbGUgKChjID0gd0dldGNoYXIod2luKSkgPT0gRVJSKSB7CisJICAgIGluY291bnQrKzsKKwkgICAgaWYgKGJsb2NraW5nKSB7CisJCSh2b2lkKSB3cHJpbnR3KHdpbiwgIiUwNWQ6IGlucHV0IGVycm9yIiwgaW5jb3VudCk7CisJCWJyZWFrOworCSAgICB9IGVsc2UgeworCQkodm9pZCkgd3ByaW50dyh3aW4sICIlMDVkOiBpbnB1dCB0aW1lZCBvdXQiLCBpbmNvdW50KTsKKwkgICAgfQorCSAgICB3Z2V0Y2hfd3JhcCh3aW4sIGZpcnN0X3kpOworCX0KKwlpZiAoYyA9PSBFUlIgJiYgYmxvY2tpbmcpIHsKKwkgICAgd3ByaW50dyh3aW4sICJFUlIiKTsKKwkgICAgd2dldGNoX3dyYXAod2luLCBmaXJzdF95KTsKKwl9IGVsc2UgaWYgKGlzUXVpdChjKSkgeworCSAgICBicmVhazsKKwl9IGVsc2UgaWYgKGMgPT0gJ2UnKSB7CisJICAgIGZsYWdzW1VDaGFyKCdlJyldID0gIWZsYWdzW1VDaGFyKCdlJyldOworCSAgICBzZXR1cF9nZXRjaCh3aW4sIGZsYWdzKTsKKwkgICAgd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisJfSBlbHNlIGlmIChjID09ICdnJykgeworCSAgICB3YWRkc3RyKHdpbiwgImdldHN0ciB0ZXN0OiAiKTsKKwkgICAgZWNobygpOworCSAgICB3Z2V0bnN0cih3aW4sIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwkgICAgbm9lY2hvKCk7CisJICAgIHdwcmludHcod2luLCAiSSBzYXcgJWQgY2hhcmFjdGVyczpcblx0YCVzJy4iLCAoaW50KSBzdHJsZW4oYnVmKSwgYnVmKTsKKwkgICAgd2NscnRvZW9sKHdpbik7CisJICAgIHdnZXRjaF93cmFwKHdpbiwgZmlyc3RfeSk7CisJfSBlbHNlIGlmIChjID09ICdrJykgeworCSAgICBmbGFnc1tVQ2hhcignaycpXSA9ICFmbGFnc1tVQ2hhcignaycpXTsKKwkgICAgc2V0dXBfZ2V0Y2god2luLCBmbGFncyk7CisJICAgIHdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworCX0gZWxzZSBpZiAoYyA9PSAnbScpIHsKKwkgICAgZmxhZ3NbVUNoYXIoJ20nKV0gPSAhZmxhZ3NbVUNoYXIoJ20nKV07CisJICAgIHNldHVwX2dldGNoKHdpbiwgZmxhZ3MpOworCSAgICB3Z2V0Y2hfaGVscCh3aW4sIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGMgPT0gJ3MnKSB7CisJICAgIFNoZWxsT3V0KFRSVUUpOworCX0gZWxzZSBpZiAoYyA9PSAndycpIHsKKwkgICAgaW50IGhpZ2ggPSBnZXRtYXh5KHdpbikgLSAxIC0gZmlyc3RfeSArIDE7CisJICAgIGludCB3aWRlID0gZ2V0bWF4eCh3aW4pIC0gZmlyc3RfeDsKKwkgICAgaW50IG9sZF95LCBvbGRfeDsKKwkgICAgaW50IG5ld195ID0gZmlyc3RfeSArIGdldGJlZ3kod2luKTsKKwkgICAgaW50IG5ld194ID0gZmlyc3RfeCArIGdldGJlZ3god2luKTsKKworCSAgICBnZXR5eCh3aW4sIG9sZF95LCBvbGRfeCk7CisJICAgIGlmIChoaWdoID4gMiAmJiB3aWRlID4gMikgeworCQlXSU5ET1cgKndiID0gbmV3d2luKGhpZ2gsIHdpZGUsIG5ld195LCBuZXdfeCk7CisJCVdJTkRPVyAqd2kgPSBuZXd3aW4oaGlnaCAtIDIsIHdpZGUgLSAyLCBuZXdfeSArIDEsIG5ld194ICsgMSk7CisKKwkJYm94KHdiLCAwLCAwKTsKKwkJd3JlZnJlc2god2IpOworCQl3bW92ZSh3aSwgMCwgMCk7CisJCXJlbWVtYmVyX2JveGVzKGxldmVsLCB3aSwgd2IpOworCQl3Z2V0Y2hfdGVzdChsZXZlbCArIDEsIHdpLCBkZWxheSk7CisJCWRlbHdpbih3aSk7CisJCWRlbHdpbih3Yik7CisKKwkJd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisJCXdtb3ZlKHdpbiwgb2xkX3ksIG9sZF94KTsKKwkJdG91Y2h3aW4od2luKTsKKwkJd3JlZnJlc2god2luKTsKKwkJZG91cGRhdGUoKTsKKwkgICAgfQorI2lmZGVmIFNJR1RTVFAKKwl9IGVsc2UgaWYgKGMgPT0gJ3onKSB7CisJICAgIGtpbGwoZ2V0cGlkKCksIFNJR1RTVFApOworI2VuZGlmCisJfSBlbHNlIHsKKwkgICAgd3ByaW50dyh3aW4sICJLZXkgcHJlc3NlZDogJTA0byAiLCBjKTsKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKwkgICAgaWYgKGMgPT0gS0VZX01PVVNFKSB7CisJCWludCB5LCB4OworCQlNRVZFTlQgZXZlbnQ7CisKKwkJZ2V0bW91c2UoJmV2ZW50KTsKKwkJd3ByaW50dyh3aW4sICJLRVlfTU9VU0UsICVzIiwgbW91c2VfZGVjb2RlKCZldmVudCkpOworCQlnZXR5eCh3aW4sIHksIHgpOworCQltb3ZlKGV2ZW50LnksIGV2ZW50LngpOworCQlhZGRjaCgnKicpOworCQl3bW92ZSh3aW4sIHksIHgpOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04gKi8KKwkgICAgaWYgKGMgPj0gS0VZX01JTikgeworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKEtFWV9SRVNJWkUpICYmIEhBVkVfV1JFU0laRQorCQlpZiAoYyA9PSBLRVlfUkVTSVpFKSB7CisJCSAgICByZXNpemVfYm94ZXMobGV2ZWwsIHdpbik7CisJCX0KKyNlbmRpZgorCQkodm9pZCkgd2FkZHN0cih3aW4sIGtleW5hbWUoYykpOworCSAgICB9IGVsc2UgaWYgKGMgPiAweDgwKSB7CisJCXVuc2lnbmVkIGMyID0gKHVuc2lnbmVkKSAoYyAmIDB4N2YpOworCQlpZiAoaXNwcmludChjMikpCisJCSAgICAodm9pZCkgd3ByaW50dyh3aW4sICJNLSVjIiwgVUNoYXIoYzIpKTsKKwkJZWxzZQorCQkgICAgKHZvaWQpIHdwcmludHcod2luLCAiTS0lcyIsIHVuY3RybChjMikpOworCQl3YWRkc3RyKHdpbiwgIiAoaGlnaC1oYWxmIGNoYXJhY3RlcikiKTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKGlzcHJpbnQoYykpCisJCSAgICAodm9pZCkgd3ByaW50dyh3aW4sICIlYyAoQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcikiLCBjKTsKKwkJZWxzZQorCQkgICAgKHZvaWQpIHdwcmludHcod2luLCAiJXMgKEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyKSIsCisJCQkJICAgdW5jdHJsKFVDaGFyKGMpKSk7CisJICAgIH0KKwkgICAgd2dldGNoX3dyYXAod2luLCBmaXJzdF95KTsKKwl9CisgICAgfQorCisgICAgd3RpbWVvdXQod2luLCAtMSk7Cit9CisKK3N0YXRpYyBpbnQKK2JlZ2luX2dldGNoX3Rlc3Qodm9pZCkKK3sKKyAgICBjaGFyIGJ1ZltCVUZTSVpdOworICAgIGludCBkZWxheTsKKworICAgIHJlZnJlc2goKTsKKworI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgorICAgIG1vdXNlbWFzayhBTExfTU9VU0VfRVZFTlRTLCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorCisgICAgKHZvaWQpIHByaW50dygiRGVsYXkgaW4gMTB0aHMgb2YgYSBzZWNvbmQgKDxDUj4gZm9yIGJsb2NraW5nIGlucHV0KT8gIik7CisgICAgZWNobygpOworICAgIGdldG5zdHIoYnVmLCBzaXplb2YoYnVmKSAtIDEpOworICAgIG5vZWNobygpOworICAgIG5vbmwoKTsKKworICAgIGlmIChpc2RpZ2l0KFVDaGFyKGJ1ZlswXSkpKSB7CisJZGVsYXkgPSBhdG9pKGJ1ZikgKiAxMDA7CisgICAgfSBlbHNlIHsKKwlkZWxheSA9IC0xOworICAgIH0KKyAgICByYXcoKTsKKyAgICBtb3ZlKDUsIDApOworICAgIHJldHVybiBkZWxheTsKK30KKworc3RhdGljIHZvaWQKK2ZpbmlzaF9nZXRjaF90ZXN0KHZvaWQpCit7CisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKDAsIChtbWFza190ICopIDApOworI2VuZGlmCisgICAgZXJhc2UoKTsKKyAgICBub3JhdygpOworICAgIG5sKCk7CisgICAgZW5kd2luKCk7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRjaF90ZXN0KHZvaWQpCit7CisgICAgaW50IGRlbGF5ID0gYmVnaW5fZ2V0Y2hfdGVzdCgpOworCisgICAgc2xrX3Jlc3RvcmUoKTsKKyAgICB3Z2V0Y2hfdGVzdCgwLCBzdGRzY3IsIGRlbGF5KTsKKyAgICBmb3JnZXRfYm94ZXMoKTsKKyAgICBmaW5pc2hfZ2V0Y2hfdGVzdCgpOworfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKy8qCisgKiBGb3Igd2dldF93Y2hfdGVzdCgpLCB3ZSBjcmVhdGUgcGFpcnMgb2Ygd2luZG93cyAtIG9uZSBmb3IgYSBib3gsIG9uZSBmb3IgdGV4dC4KKyAqIFJlc2l6ZSBib3RoIGFuZCBwYWludCB0aGUgYm94IGluIHRoZSBwYXJlbnQuCisgKi8KKyNpZiBkZWZpbmVkKEtFWV9SRVNJWkUpICYmIEhBVkVfV1JFU0laRQorc3RhdGljIHZvaWQKK3Jlc2l6ZV93aWRlX2JveGVzKHVuc2lnbmVkIGxldmVsLCBXSU5ET1cgKndpbikKK3sKKyAgICB1bnNpZ25lZCBuOworICAgIGludCBiYXNlID0gNTsKKyAgICBpbnQgaGlnaCA9IExJTkVTIC0gYmFzZTsKKyAgICBpbnQgd2lkZSA9IENPTFM7CisKKyAgICB0b3VjaHdpbihzdGRzY3IpOworICAgIHdub3V0cmVmcmVzaChzdGRzY3IpOworCisgICAgc2xrX3JlcGFpbnQoKTsKKworICAgIGZvciAobiA9IDA7IG4gPCBsZXZlbDsgKytuKSB7CisJd3Jlc2l6ZSh3aW5zdGFja1tuXS5mcmFtZSwgaGlnaCwgd2lkZSk7CisJd3Jlc2l6ZSh3aW5zdGFja1tuXS50ZXh0LCBoaWdoIC0gMiwgd2lkZSAtIDIpOworCWhpZ2ggLT0gMjsKKwl3aWRlIC09IDI7CisJd2VyYXNlKHdpbnN0YWNrW25dLnRleHQpOworCWJveF9zZXQod2luc3RhY2tbbl0uZnJhbWUsIDAsIDApOworCXdub3V0cmVmcmVzaCh3aW5zdGFja1tuXS5mcmFtZSk7CisJd3ByaW50dyh3aW5zdGFja1tuXS50ZXh0LAorCQkic2l6ZSAlZHglZFxuIiwKKwkJZ2V0bWF4eSh3aW5zdGFja1tuXS50ZXh0KSwKKwkJZ2V0bWF4eCh3aW5zdGFja1tuXS50ZXh0KSk7CisJd25vdXRyZWZyZXNoKHdpbnN0YWNrW25dLnRleHQpOworCWlmICh3aW5zdGFja1tuXS50ZXh0ID09IHdpbikKKwkgICAgYnJlYWs7CisgICAgfQorICAgIGRvdXBkYXRlKCk7Cit9CisjZW5kaWYgLyogS0VZX1JFU0laRSAqLworCitzdGF0aWMgY2hhciAqCit3Y3N0b3MoY29uc3Qgd2NoYXJfdCAqc3JjKQoreworICAgIGludCBuZWVkOworICAgIGNoYXIgKnJlc3VsdCA9IDA7CisgICAgY29uc3Qgd2NoYXJfdCAqdG1wID0gc3JjOworI2lmbmRlZiBzdGF0ZV91bnVzZWQKKyAgICBtYnN0YXRlX3Qgc3RhdGU7CisjZW5kaWYKKworICAgIHJlc2V0X3djaGFycyhzdGF0ZSk7CisgICAgaWYgKChuZWVkID0gKGludCkgY291bnRfd2NoYXJzKHRtcCwgMCwgJnN0YXRlKSkgPiAwKSB7CisJdW5zaWduZWQgaGF2ZSA9ICh1bnNpZ25lZCkgbmVlZDsKKwlpZiAoKHJlc3VsdCA9IHR5cGVDYWxsb2MoY2hhciwgaGF2ZSArIDEpKSAhPSAwKSB7CisJICAgIHRtcCA9IHNyYzsKKwkgICAgaWYgKHRyYW5zX3djaGFycyhyZXN1bHQsIHRtcCwgaGF2ZSwgJnN0YXRlKSAhPSBoYXZlKSB7CisJCWZyZWUocmVzdWx0KTsKKwkJcmVzdWx0ID0gMDsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3dnZXRfd2NoX3Rlc3QodW5zaWduZWQgbGV2ZWwsIFdJTkRPVyAqd2luLCBpbnQgZGVsYXkpCit7CisgICAgd2NoYXJfdCB3Y2hhcl9idWZbQlVGU0laXTsKKyAgICB3aW50X3Qgd2ludF9idWZbQlVGU0laXTsKKyAgICBpbnQgZmlyc3RfeSwgZmlyc3RfeDsKKyAgICB3aW50X3QgYzsKKyAgICBpbnQgaW5jb3VudCA9IDA7CisgICAgYm9vbCBmbGFnc1syNTZdOworICAgIGJvb2wgYmxvY2tpbmcgPSAoZGVsYXkgPCAwKTsKKyAgICBpbnQgeSwgeCwgY29kZTsKKyAgICBjaGFyICp0ZW1wOworCisgICAgbWVtc2V0KGZsYWdzLCBGQUxTRSwgc2l6ZW9mKGZsYWdzKSk7CisgICAgZmxhZ3NbVUNoYXIoJ2snKV0gPSAod2luID09IHN0ZHNjcik7CisKKyAgICBzZXR1cF9nZXRjaCh3aW4sIGZsYWdzKTsKKyAgICB3dGltZW91dCh3aW4sIGRlbGF5KTsKKyAgICBnZXR5eCh3aW4sIGZpcnN0X3ksIGZpcnN0X3gpOworCisgICAgd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisgICAgd3NldHNjcnJlZyh3aW4sIGZpcnN0X3ksIGdldG1heHkod2luKSAtIDEpOworICAgIHNjcm9sbG9rKHdpbiwgVFJVRSk7CisKKyAgICBmb3IgKDs7KSB7CisJd2hpbGUgKChjb2RlID0gd0dldF93Y2hhcih3aW4sICZjKSkgPT0gRVJSKSB7CisJICAgIGluY291bnQrKzsKKwkgICAgaWYgKGJsb2NraW5nKSB7CisJCSh2b2lkKSB3cHJpbnR3KHdpbiwgIiUwNWQ6IGlucHV0IGVycm9yIiwgaW5jb3VudCk7CisJCWJyZWFrOworCSAgICB9IGVsc2UgeworCQkodm9pZCkgd3ByaW50dyh3aW4sICIlMDVkOiBpbnB1dCB0aW1lZCBvdXQiLCBpbmNvdW50KTsKKwkgICAgfQorCSAgICB3Z2V0Y2hfd3JhcCh3aW4sIGZpcnN0X3kpOworCX0KKwlpZiAoY29kZSA9PSBFUlIgJiYgYmxvY2tpbmcpIHsKKwkgICAgd3ByaW50dyh3aW4sICJFUlIiKTsKKwkgICAgd2dldGNoX3dyYXAod2luLCBmaXJzdF95KTsKKwl9IGVsc2UgaWYgKGlzUXVpdCgoaW50KSBjKSkgeworCSAgICBicmVhazsKKwl9IGVsc2UgaWYgKGMgPT0gJ2UnKSB7CisJICAgIGZsYWdzW1VDaGFyKCdlJyldID0gIWZsYWdzW1VDaGFyKCdlJyldOworCSAgICBzZXR1cF9nZXRjaCh3aW4sIGZsYWdzKTsKKwkgICAgd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisJfSBlbHNlIGlmIChjID09ICdnJykgeworCSAgICB3YWRkc3RyKHdpbiwgImdldHN0ciB0ZXN0OiAiKTsKKwkgICAgZWNobygpOworCSAgICBjb2RlID0gd2dldG5fd3N0cih3aW4sIHdpbnRfYnVmLCBzaXplb2Yod2ludF9idWYpIC0gMSk7CisJICAgIG5vZWNobygpOworCSAgICBpZiAoY29kZSA9PSBFUlIpIHsKKwkJd3ByaW50dyh3aW4sICJ3Z2V0bl93c3RyIHJldHVybnMgYW4gZXJyb3IuIik7CisJICAgIH0gZWxzZSB7CisJCWludCBuOworCQlmb3IgKG4gPSAwOyAod2NoYXJfYnVmW25dID0gKHdjaGFyX3QpIHdpbnRfYnVmW25dKSAhPSAwOyArK24pIHsKKwkJICAgIDsKKwkJfQorCQlpZiAoKHRlbXAgPSB3Y3N0b3Mod2NoYXJfYnVmKSkgIT0gMCkgeworCQkgICAgd3ByaW50dyh3aW4sICJJIHNhdyAlZCBjaGFyYWN0ZXJzOlxuXHRgJXMnLiIsCisJCQkgICAgKGludCkgd2NzbGVuKHdjaGFyX2J1ZiksIHRlbXApOworCQkgICAgZnJlZSh0ZW1wKTsKKwkJfSBlbHNlIHsKKwkJICAgIHdwcmludHcod2luLCAiSSBzYXcgJWQgY2hhcmFjdGVycyAoY2Fubm90IGNvbnZlcnQpLiIsCisJCQkgICAgKGludCkgd2NzbGVuKHdjaGFyX2J1ZikpOworCQl9CisJICAgIH0KKwkgICAgd2NscnRvZW9sKHdpbik7CisJICAgIHdnZXRjaF93cmFwKHdpbiwgZmlyc3RfeSk7CisJfSBlbHNlIGlmIChjID09ICdrJykgeworCSAgICBmbGFnc1tVQ2hhcignaycpXSA9ICFmbGFnc1tVQ2hhcignaycpXTsKKwkgICAgc2V0dXBfZ2V0Y2god2luLCBmbGFncyk7CisJICAgIHdnZXRjaF9oZWxwKHdpbiwgZmxhZ3MpOworCX0gZWxzZSBpZiAoYyA9PSAnbScpIHsKKwkgICAgZmxhZ3NbVUNoYXIoJ20nKV0gPSAhZmxhZ3NbVUNoYXIoJ20nKV07CisJICAgIHNldHVwX2dldGNoKHdpbiwgZmxhZ3MpOworCSAgICB3Z2V0Y2hfaGVscCh3aW4sIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGMgPT0gJ3MnKSB7CisJICAgIFNoZWxsT3V0KFRSVUUpOworCX0gZWxzZSBpZiAoYyA9PSAndycpIHsKKwkgICAgaW50IGhpZ2ggPSBnZXRtYXh5KHdpbikgLSAxIC0gZmlyc3RfeSArIDE7CisJICAgIGludCB3aWRlID0gZ2V0bWF4eCh3aW4pIC0gZmlyc3RfeDsKKwkgICAgaW50IG9sZF95LCBvbGRfeDsKKwkgICAgaW50IG5ld195ID0gZmlyc3RfeSArIGdldGJlZ3kod2luKTsKKwkgICAgaW50IG5ld194ID0gZmlyc3RfeCArIGdldGJlZ3god2luKTsKKworCSAgICBnZXR5eCh3aW4sIG9sZF95LCBvbGRfeCk7CisJICAgIGlmIChoaWdoID4gMiAmJiB3aWRlID4gMikgeworCQlXSU5ET1cgKndiID0gbmV3d2luKGhpZ2gsIHdpZGUsIG5ld195LCBuZXdfeCk7CisJCVdJTkRPVyAqd2kgPSBuZXd3aW4oaGlnaCAtIDIsIHdpZGUgLSAyLCBuZXdfeSArIDEsIG5ld194ICsgMSk7CisKKwkJYm94X3NldCh3YiwgMCwgMCk7CisJCXdyZWZyZXNoKHdiKTsKKwkJd21vdmUod2ksIDAsIDApOworCQlyZW1lbWJlcl9ib3hlcyhsZXZlbCwgd2ksIHdiKTsKKwkJd2dldF93Y2hfdGVzdChsZXZlbCArIDEsIHdpLCBkZWxheSk7CisJCWRlbHdpbih3aSk7CisJCWRlbHdpbih3Yik7CisKKwkJd2dldGNoX2hlbHAod2luLCBmbGFncyk7CisJCXdtb3ZlKHdpbiwgb2xkX3ksIG9sZF94KTsKKwkJdG91Y2h3aW4od2luKTsKKwkJd3JlZnJlc2god2luKTsKKwkgICAgfQorI2lmZGVmIFNJR1RTVFAKKwl9IGVsc2UgaWYgKGMgPT0gJ3onKSB7CisJICAgIGtpbGwoZ2V0cGlkKCksIFNJR1RTVFApOworI2VuZGlmCisJfSBlbHNlIHsKKwkgICAgd3ByaW50dyh3aW4sICJLZXkgcHJlc3NlZDogJTA0byAiLCAoaW50KSBjKTsKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKwkgICAgaWYgKGMgPT0gS0VZX01PVVNFKSB7CisJCU1FVkVOVCBldmVudDsKKworCQlnZXRtb3VzZSgmZXZlbnQpOworCQl3cHJpbnR3KHdpbiwgIktFWV9NT1VTRSwgJXMiLCBtb3VzZV9kZWNvZGUoJmV2ZW50KSk7CisJCWdldHl4KHdpbiwgeSwgeCk7CisJCW1vdmUoZXZlbnQueSwgZXZlbnQueCk7CisJCWFkZGNoKCcqJyk7CisJCXdtb3ZlKHdpbiwgeSwgeCk7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIE5DVVJTRVNfTU9VU0VfVkVSU0lPTiAqLworCSAgICBpZiAoY29kZSA9PSBLRVlfQ09ERV9ZRVMpIHsKKyNpZiBkZWZpbmVkKEtFWV9SRVNJWkUpICYmIEhBVkVfV1JFU0laRQorCQlpZiAoYyA9PSBLRVlfUkVTSVpFKSB7CisJCSAgICByZXNpemVfd2lkZV9ib3hlcyhsZXZlbCwgd2luKTsKKwkJfQorI2VuZGlmCisJCSh2b2lkKSB3YWRkc3RyKHdpbiwga2V5X25hbWUoKHdjaGFyX3QpIGMpKTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKGMgPCAyNTYgJiYgaXNjbnRybChjKSkgeworCQkgICAgKHZvaWQpIHdwcmludHcod2luLCAiJXMgKGNvbnRyb2wgY2hhcmFjdGVyKSIsIHVuY3RybChjKSk7CisJCX0gZWxzZSB7CisJCSAgICB3Y2hhcl90IGMyID0gKHdjaGFyX3QpIGM7CisJCSAgICB3YWRkbndzdHIod2luLCAmYzIsIDEpOworCQkgICAgKHZvaWQpIHdwcmludHcod2luLCAiID0gJSN4IChwcmludGFibGUgY2hhcmFjdGVyKSIsICh1bnNpZ25lZCkgYyk7CisJCX0KKwkgICAgfQorCSAgICB3Z2V0Y2hfd3JhcCh3aW4sIGZpcnN0X3kpOworCX0KKyAgICB9CisKKyAgICB3dGltZW91dCh3aW4sIC0xKTsKK30KKworc3RhdGljIHZvaWQKK2dldF93Y2hfdGVzdCh2b2lkKQoreworICAgIGludCBkZWxheSA9IGJlZ2luX2dldGNoX3Rlc3QoKTsKKworICAgIHNsa19yZXN0b3JlKCk7CisgICAgd2dldF93Y2hfdGVzdCgwLCBzdGRzY3IsIGRlbGF5KTsKKyAgICBmb3JnZXRfYm94ZXMoKTsKKyAgICBmaW5pc2hfZ2V0Y2hfdGVzdCgpOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ2hhcmFjdGVyIGF0dHJpYnV0ZXMgdGVzdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgSEFWRV9TRVRVUFRFUk0gfHwgSEFWRV9UR0VURU5UCisjZGVmaW5lIGdldF9uY3YoKSBUSUdFVE5VTSgibmN2IiwiTkMiKQorI2RlZmluZSBnZXRfeG1jKCkgVElHRVROVU0oInhtYyIsInNnIikKKyNlbHNlCisjZGVmaW5lIGdldF9uY3YoKSAtMQorI2RlZmluZSBnZXRfeG1jKCkgLTEKKyNlbmRpZgorCisjaWYgIUhBVkVfVEVSTUFUVFJTCitzdGF0aWMgY2h0eXBlCitteV90ZXJtYXR0cnModm9pZCkKK3sKKyAgICBzdGF0aWMgaW50IGZpcnN0ID0gVFJVRTsKKyAgICBzdGF0aWMgY2h0eXBlIHJlc3VsdCA9IDA7CisKKyAgICBpZiAoZmlyc3QpIHsKKyNpZiAhSEFWRV9USUdFVFNUUgorCWNoYXIgYnVmZmVyWzQwOTZdOworCWNoYXIgcGFyc2VkWzQwOTZdOworCWNoYXIgKmFyZWFfcG9pbnRlciA9IHBhcnNlZDsKKworCXRnZXRlbnQoYnVmZmVyLCBnZXRlbnYoIlRFUk0iKSk7CisjZW5kaWYKKworCWlmIChUSUdFVFNUUigic21zbyIsICJzbyIpKQorCSAgICByZXN1bHQgfD0gQV9TVEFORE9VVDsKKwlpZiAoVElHRVRTVFIoInNtdWwiLCAidXMiKSkKKwkgICAgcmVzdWx0IHw9IEFfVU5ERVJMSU5FOworCWlmIChUSUdFVFNUUigicmV2IiwgIm1yIikpCisJICAgIHJlc3VsdCB8PSBBX1JFVkVSU0U7CisJaWYgKFRJR0VUU1RSKCJibGluayIsICJtYiIpKQorCSAgICByZXN1bHQgfD0gQV9CTElOSzsKKwlpZiAoVElHRVRTVFIoImRpbSIsICJtaCIpKQorCSAgICByZXN1bHQgfD0gQV9ESU07CisJaWYgKFRJR0VUU1RSKCJib2xkIiwgIm1kIikpCisJICAgIHJlc3VsdCB8PSBBX0JPTEQ7CisJaWYgKFRJR0VUU1RSKCJzbWFjcyIsICJhYyIpKQorCSAgICByZXN1bHQgfD0gQV9BTFRDSEFSU0VUOworCisJZmlyc3QgPSBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNkZWZpbmUgdGVybWF0dHJzKCkgbXlfdGVybWF0dHJzKCkKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9BVFRSU1RSSU5HIDMxCisjZGVmaW5lIExFTl9BVFRSU1RSSU5HIDI2CisKK3N0YXRpYyBjaGFyIGF0dHJfdGVzdF9zdHJpbmdbTUFYX0FUVFJTVFJJTkcgKyAxXTsKKworc3RhdGljIHZvaWQKK2F0dHJfbGVnZW5kKFdJTkRPVyAqaGVscHdpbikKK3sKKyAgICBpbnQgcm93ID0gMTsKKyAgICBpbnQgY29sID0gMTsKKworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICJFU0MgdG8gZXhpdC4iKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiXkwgcmVwYWludHMuIik7CisgICAgKytyb3c7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIk1vZGlmeSB0aGUgdGVzdCBzdHJpbmdzOiIpOworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICIgIEEgZGlnaXQgc2V0cyBnYXBzIG9uIGVhY2ggc2lkZSBvZiBkaXNwbGF5ZWQgYXR0cmlidXRlcyIpOworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICIgIDwvPiBzaGlmdHMgdGhlIHRleHQgbGVmdC9yaWdodC4gIik7CisgICAgKytyb3c7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIlRvZ2dsZXM6Iik7CisgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwltdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkJICAiICBmL0YvYi9GIHRvZ2dsZSBmb3JlZ3JvdW5kL2JhY2tncm91bmQgYmFja2dyb3VuZCBjb2xvciIpOworCW12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCQkgICIgIHQvVCAgICAgdG9nZ2xlIHRleHQvYmFja2dyb3VuZCBjb2xvciBhdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIiAgYS9BICAgICB0b2dnbGUgQUNTIChhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCkgbWFwcGluZyIpOworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICIgIHYvViAgICAgdG9nZ2xlIHZpZGVvIGF0dHJpYnV0ZSB0byBjb21iaW5lIHdpdGggZWFjaCBsaW5lIik7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2NvbG9yX2F0dHIoaW50IGZnLCBpbnQgYmcsIGludCB0eCkKK3sKKyAgICBpZiAodXNlX2NvbG9ycykgeworCXByaW50dygiICBDb2xvcnMgKGZnICVkLCBiZyAlZCIsIGZnLCBiZyk7CisJaWYgKHR4ID49IDApCisJICAgIHByaW50dygiLCB0ZXh0ICVkIiwgdHgpOworCXByaW50dygiKSwiKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sCitjeWNsZV9jb2xvcl9hdHRyKGludCBjaCwgc2hvcnQgKmZnLCBzaG9ydCAqYmcsIHNob3J0ICp0eCkKK3sKKyAgICBib29sIGVycm9yID0gRkFMU0U7CisKKyAgICBpZiAodXNlX2NvbG9ycykgeworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdmJzoKKwkgICAgKmZnID0gKHNob3J0KSAoKmZnICsgMSk7CisJICAgIGJyZWFrOworCWNhc2UgJ0YnOgorCSAgICAqZmcgPSAoc2hvcnQpICgqZmcgLSAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYic6CisJICAgICpiZyA9IChzaG9ydCkgKCpiZyArIDEpOworCSAgICBicmVhazsKKwljYXNlICdCJzoKKwkgICAgKmJnID0gKHNob3J0KSAoKmJnIC0gMSk7CisJICAgIGJyZWFrOworCWNhc2UgJ3QnOgorCSAgICAqdHggPSAoc2hvcnQpICgqdHggKyAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnVCc6CisJICAgICp0eCA9IChzaG9ydCkgKCp0eCAtIDEpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGVycm9yID0gVFJVRTsKKwkgICAgYnJlYWs7CisJfQorCWlmICgqZmcgPj0gQ09MT1JTKQorCSAgICAqZmcgPSAoc2hvcnQpIG1pbl9jb2xvcnM7CisJaWYgKCpmZyA8IG1pbl9jb2xvcnMpCisJICAgICpmZyA9IChzaG9ydCkgKENPTE9SUyAtIDEpOworCWlmICgqYmcgPj0gQ09MT1JTKQorCSAgICAqYmcgPSAoc2hvcnQpIG1pbl9jb2xvcnM7CisJaWYgKCpiZyA8IG1pbl9jb2xvcnMpCisJICAgICpiZyA9IChzaG9ydCkgKENPTE9SUyAtIDEpOworCWlmICgqdHggPj0gQ09MT1JTKQorCSAgICAqdHggPSAtMTsKKwlpZiAoKnR4IDwgLTEpCisJICAgICp0eCA9IChzaG9ydCkgKENPTE9SUyAtIDEpOworICAgIH0gZWxzZSB7CisJYmVlcCgpOworCWVycm9yID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZAorYWRqdXN0X2F0dHJfc3RyaW5nKGludCBhZGp1c3QpCit7CisgICAgaW50IGZpcnN0ID0gKChpbnQpIFVDaGFyKGF0dHJfdGVzdF9zdHJpbmdbMF0pKSArIGFkanVzdDsKKyAgICBpbnQgbGFzdCA9IGZpcnN0ICsgTEVOX0FUVFJTVFJJTkc7CisKKyAgICBpZiAoZmlyc3QgPj0gJyAnICYmIGxhc3QgPD0gJ34nKSB7CS8qIDMyLi4xMjYgKi8KKwlpbnQgaiwgazsKKwlmb3IgKGogPSAwLCBrID0gZmlyc3Q7IGogPCBNQVhfQVRUUlNUUklORyAmJiBrIDw9IGxhc3Q7ICsraiwgKytrKSB7CisJICAgIGF0dHJfdGVzdF9zdHJpbmdbal0gPSAoY2hhcikgazsKKwkgICAgaWYgKCgoayArIDEgLSBmaXJzdCkgJSA1KSA9PSAwKSB7CisJCWlmICgrK2ogPj0gTUFYX0FUVFJTVFJJTkcpCisJCSAgICBicmVhazsKKwkJYXR0cl90ZXN0X3N0cmluZ1tqXSA9ICcgJzsKKwkgICAgfQorCX0KKwl3aGlsZSAoaiA8IE1BWF9BVFRSU1RSSU5HKQorCSAgICBhdHRyX3Rlc3Rfc3RyaW5nW2orK10gPSAnICc7CisJYXR0cl90ZXN0X3N0cmluZ1tqXSA9ICdcMCc7CisgICAgfSBlbHNlIHsKKwliZWVwKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAoraW5pdF9hdHRyX3N0cmluZyh2b2lkKQoreworICAgIGF0dHJfdGVzdF9zdHJpbmdbMF0gPSAnYSc7CisgICAgYWRqdXN0X2F0dHJfc3RyaW5nKDApOworfQorCitzdGF0aWMgaW50CitzaG93X2F0dHIoaW50IHJvdywgaW50IHNraXAsIGJvb2wgYXJyb3csIGNodHlwZSBhdHRyLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIGludCBuY3YgPSBnZXRfbmN2KCk7CisgICAgY2h0eXBlIHRlc3QgPSBhdHRyICYgKGNodHlwZSkgKH5BX0FMVENIQVJTRVQpOworCisgICAgaWYgKGFycm93KQorCW12cHJpbnR3KHJvdywgNSwgIi0tPiIpOworICAgIG12cHJpbnR3KHJvdywgOCwgIiVzIG1vZGU6IiwgbmFtZSk7CisgICAgbXZwcmludHcocm93LCAyNCwgInwiKTsKKyAgICBpZiAoc2tpcCkKKwlwcmludHcoIiUqcyIsIHNraXAsICIgIik7CisgICAgLyoKKyAgICAgKiBKdXN0IGZvciB0ZXN0aW5nLCB3cml0ZSB0ZXh0IHVzaW5nIHRoZSBhbHRlcm5hdGUgY2hhcmFjdGVyIHNldCBvbmUKKyAgICAgKiBjaGFyYWN0ZXIgYXQgYSB0aW1lICh0byBwYXNzIGl0cyByZW5kaXRpb24gZGlyZWN0bHkpLCBhbmQgdXNlIHRoZQorICAgICAqIHN0cmluZyBvcGVyYXRpb24gZm9yIHRoZSBvdGhlciBhdHRyaWJ1dGVzLgorICAgICAqLworICAgIGlmIChhdHRyICYgQV9BTFRDSEFSU0VUKSB7CisJY29uc3QgY2hhciAqczsKKwljaHR5cGUgY2g7CisKKwlmb3IgKHMgPSBhdHRyX3Rlc3Rfc3RyaW5nOyAqcyAhPSAnXDAnOyArK3MpIHsKKwkgICAgY2ggPSBVQ2hhcigqcyk7CisJICAgIGFkZGNoKGNoIHwgYXR0cik7CisJfQorICAgIH0gZWxzZSB7CisJYXR0cnNldChhdHRyKTsKKwlhZGRzdHIoYXR0cl90ZXN0X3N0cmluZyk7CisJYXR0cm9mZihhdHRyKTsKKyAgICB9CisgICAgaWYgKHNraXApCisJcHJpbnR3KCIlKnMiLCBza2lwLCAiICIpOworICAgIHByaW50dygifCIpOworICAgIGlmICh0ZXN0ICE9IEFfTk9STUFMKSB7CisJaWYgKCEodGVybWF0dHJzKCkgJiB0ZXN0KSkgeworCSAgICBwcmludHcoIiAoTi9BKSIpOworCX0gZWxzZSB7CisJICAgIGlmIChuY3YgPiAwICYmIChnZXRia2dkKHN0ZHNjcikgJiBBX0NPTE9SKSkgeworCQlzdGF0aWMgY29uc3QgY2h0eXBlIHRhYmxlW10gPQorCQl7CisJCSAgICBBX1NUQU5ET1VULAorCQkgICAgQV9VTkRFUkxJTkUsCisJCSAgICBBX1JFVkVSU0UsCisJCSAgICBBX0JMSU5LLAorCQkgICAgQV9ESU0sCisJCSAgICBBX0JPTEQsCisjaWZkZWYgQV9JTlZJUworCQkgICAgQV9JTlZJUywKKyNlbmRpZgorCQkgICAgQV9QUk9URUNULAorCQkgICAgQV9BTFRDSEFSU0VUCisJCX07CisJCXVuc2lnbmVkIG47CisJCWJvb2wgZm91bmQgPSBGQUxTRTsKKwkJZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YWJsZSk7IG4rKykgeworCQkgICAgaWYgKCh0YWJsZVtuXSAmIGF0dHIpICE9IDAKKwkJCSYmICgoMSA8PCBuKSAmIG5jdikgIT0gMCkgeworCQkJZm91bmQgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJaWYgKGZvdW5kKQorCQkgICAgcHJpbnR3KCIgKE5DVikiKTsKKwkgICAgfQorCSAgICBpZiAoKHRlcm1hdHRycygpICYgdGVzdCkgIT0gdGVzdCkKKwkJcHJpbnR3KCIgKFBhcnQpIik7CisJfQorICAgIH0KKyAgICByZXR1cm4gcm93ICsgMjsKK30KKy8qICpJTkRFTlQtT0ZGKiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgY2h0eXBlCQkJYXR0cjsKKyAgICBOQ1VSU0VTX0NPTlNUIGNoYXIgKgluYW1lOworfSBhdHRyc190b190ZXN0W10gPSB7CisgICAgeyBBX1NUQU5ET1VULAkiU1RBTkRPVVQiIH0sCisgICAgeyBBX1JFVkVSU0UsCSJSRVZFUlNFIiB9LAorICAgIHsgQV9CT0xELAkJIkJPTEQiIH0sCisgICAgeyBBX1VOREVSTElORSwJIlVOREVSTElORSIgfSwKKyAgICB7IEFfRElNLAkJIkRJTSIgfSwKKyAgICB7IEFfQkxJTkssCQkiQkxJTksiIH0sCisgICAgeyBBX1BST1RFQ1QsCSJQUk9URUNUIiB9LAorI2lmZGVmIEFfSU5WSVMKKyAgICB7IEFfSU5WSVMsCQkiSU5WSVNJQkxFIiB9LAorI2VuZGlmCisgICAgeyBBX05PUk1BTCwJCSJOT1JNQUwiIH0sCit9OworLyogKklOREVOVC1PTiogKi8KKworc3RhdGljIGJvb2wKK2F0dHJfZ2V0YyhpbnQgKnNraXAsIHNob3J0ICpmZywgc2hvcnQgKmJnLCBzaG9ydCAqdHgsIGludCAqYWMsIHVuc2lnbmVkICprYykKK3sKKyAgICBib29sIHJlc3VsdCA9IFRSVUU7CisgICAgYm9vbCBlcnJvciA9IEZBTFNFOworICAgIFdJTkRPVyAqaGVscHdpbjsKKworICAgIGRvIHsKKwlpbnQgY2ggPSBHZXRjaGFyKCk7CisKKwllcnJvciA9IEZBTFNFOworCWlmIChjaCA8IDI1NiAmJiBpc2RpZ2l0KGNoKSkgeworCSAgICAqc2tpcCA9IChjaCAtICcwJyk7CisJfSBlbHNlIHsKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlIENUUkwoJ0wnKToKKwkJUmVwYWludCgpOworCQlicmVhazsKKwkgICAgY2FzZSAnPyc6CisJCWlmICgoaGVscHdpbiA9IG5ld3dpbihMSU5FUyAtIDEsIENPTFMgLSAyLCAwLCAwKSkgIT0gMCkgeworCQkgICAgYm94KGhlbHB3aW4sIDAsIDApOworCQkgICAgYXR0cl9sZWdlbmQoaGVscHdpbik7CisJCSAgICB3R2V0Y2hhcihoZWxwd2luKTsKKwkJICAgIGRlbHdpbihoZWxwd2luKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSAnYSc6CisJCSphYyA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlICdBJzoKKwkJKmFjID0gQV9BTFRDSEFSU0VUOworCQlicmVhazsKKwkgICAgY2FzZSAndic6CisJCWlmICgqa2MgPT0gMCkKKwkJICAgICprYyA9IFNJWkVPRihhdHRyc190b190ZXN0KSAtIDE7CisJCWVsc2UKKwkJICAgICprYyAtPSAxOworCQlicmVhazsKKwkgICAgY2FzZSAnVic6CisJCSprYyArPSAxOworCQlpZiAoKmtjID49IFNJWkVPRihhdHRyc190b190ZXN0KSkKKwkJICAgICprYyA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlICc8JzoKKwkJYWRqdXN0X2F0dHJfc3RyaW5nKC0xKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJz4nOgorCQlhZGp1c3RfYXR0cl9zdHJpbmcoMSk7CisJCWJyZWFrOworCSAgICBjYXNlIGNhc2VfUVVJVDoKKwkJcmVzdWx0ID0gRkFMU0U7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQllcnJvciA9IGN5Y2xlX2NvbG9yX2F0dHIoY2gsIGZnLCBiZywgdHgpOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9IHdoaWxlIChlcnJvcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2F0dHJfdGVzdCh2b2lkKQorLyogdGVzdCB0ZXh0IGF0dHJpYnV0ZXMgKi8KK3sKKyAgICBpbnQgbjsKKyAgICBpbnQgc2tpcCA9IGdldF94bWMoKTsKKyAgICBzaG9ydCBmZyA9IENPTE9SX0JMQUNLOwkvKiBjb2xvciBwYWlyIDAgaXMgc3BlY2lhbCAqLworICAgIHNob3J0IGJnID0gQ09MT1JfQkxBQ0s7CisgICAgc2hvcnQgdHggPSAtMTsKKyAgICBpbnQgYWMgPSAwOworICAgIHVuc2lnbmVkIGosIGs7CisKKyAgICBpZiAoc2tpcCA8IDApCisJc2tpcCA9IDA7CisKKyAgICBuID0gc2tpcDsJCQkvKiBtYWtlIGl0IGVhc3kgKi8KKyAgICBrID0gU0laRU9GKGF0dHJzX3RvX3Rlc3QpIC0gMTsKKyAgICBpbml0X2F0dHJfc3RyaW5nKCk7CisKKyAgICBkbyB7CisJaW50IHJvdyA9IDI7CisJY2h0eXBlIG5vcm1hbCA9IEFfTk9STUFMIHwgQkxBTks7CisJY2h0eXBlIGV4dHJhcyA9IChjaHR5cGUpIGFjOworCisJaWYgKHVzZV9jb2xvcnMpIHsKKwkgICAgc2hvcnQgcGFpciA9IChzaG9ydCkgKGZnICE9IENPTE9SX0JMQUNLIHx8IGJnICE9IENPTE9SX0JMQUNLKTsKKwkgICAgaWYgKHBhaXIgIT0gMCkgeworCQlwYWlyID0gMTsKKwkJaWYgKGluaXRfcGFpcihwYWlyLCBmZywgYmcpID09IEVSUikgeworCQkgICAgYmVlcCgpOworCQl9IGVsc2UgeworCQkgICAgbm9ybWFsIHw9IENPTE9SX1BBSVIocGFpcik7CisJCX0KKwkgICAgfQorCSAgICBpZiAodHggPj0gMCkgeworCQlwYWlyID0gMjsKKwkJaWYgKGluaXRfcGFpcihwYWlyLCB0eCwgYmcpID09IEVSUikgeworCQkgICAgYmVlcCgpOworCQl9IGVsc2UgeworCQkgICAgZXh0cmFzIHw9IENPTE9SX1BBSVIocGFpcik7CisJCX0KKwkgICAgfQorCX0KKwlia2dkKG5vcm1hbCk7CisJYmtnZHNldChub3JtYWwpOworCWVyYXNlKCk7CisKKwlib3goc3Rkc2NyLCAwLCAwKTsKKwltdmFkZHN0cigwLCAyMCwgIkNoYXJhY3RlciBhdHRyaWJ1dGUgdGVzdCBkaXNwbGF5Iik7CisKKwlmb3IgKGogPSAwOyBqIDwgU0laRU9GKGF0dHJzX3RvX3Rlc3QpOyArK2opIHsKKwkgICAgYm9vbCBhcnJvdyA9IChqID09IGspOworCSAgICByb3cgPSBzaG93X2F0dHIocm93LCBuLCBhcnJvdywKKwkJCSAgICBleHRyYXMgfAorCQkJICAgIGF0dHJzX3RvX3Rlc3Rbal0uYXR0ciB8CisJCQkgICAgYXR0cnNfdG9fdGVzdFtrXS5hdHRyLAorCQkJICAgIGF0dHJzX3RvX3Rlc3Rbal0ubmFtZSk7CisJfQorCisJbXZwcmludHcocm93LCA4LAorCQkgIlRoaXMgdGVybWluYWwgZG9lcyAlc2hhdmUgdGhlIG1hZ2ljLWNvb2tpZSBnbGl0Y2giLAorCQkgZ2V0X3htYygpID4gLTEgPyAiIiA6ICJub3QgIik7CisJbXZwcmludHcocm93ICsgMSwgOCwgIkVudGVyICc/JyBmb3IgaGVscC4iKTsKKwlzaG93X2NvbG9yX2F0dHIoZmcsIGJnLCB0eCk7CisJcHJpbnR3KCIgIEFDUyAoJWQpIiwgYWMgIT0gMCk7CisKKwlyZWZyZXNoKCk7CisgICAgfSB3aGlsZSAoYXR0cl9nZXRjKCZuLCAmZmcsICZiZywgJnR4LCAmYWMsICZrKSk7CisKKyAgICBia2dkc2V0KEFfTk9STUFMIHwgQkxBTkspOworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorc3RhdGljIHdjaGFyX3Qgd2lkZV9hdHRyX3Rlc3Rfc3RyaW5nW01BWF9BVFRSU1RSSU5HICsgMV07CisKK3N0YXRpYyB2b2lkCit3aWRlX2FkanVzdF9hdHRyX3N0cmluZyhpbnQgYWRqdXN0KQoreworICAgIGludCBmaXJzdCA9ICgoaW50KSBVQ2hhcih3aWRlX2F0dHJfdGVzdF9zdHJpbmdbMF0pKSArIGFkanVzdDsKKyAgICBpbnQgbGFzdCA9IGZpcnN0ICsgTEVOX0FUVFJTVFJJTkc7CisKKyAgICBpZiAoZmlyc3QgPj0gJyAnICYmIGxhc3QgPD0gJ34nKSB7CS8qIDMyLi4xMjYgKi8KKwlpbnQgaiwgazsKKwlmb3IgKGogPSAwLCBrID0gZmlyc3Q7IGogPCBNQVhfQVRUUlNUUklORyAmJiBrIDw9IGxhc3Q7ICsraiwgKytrKSB7CisJICAgIHdpZGVfYXR0cl90ZXN0X3N0cmluZ1tqXSA9IGs7CisJICAgIGlmICgoKGsgKyAxIC0gZmlyc3QpICUgNSkgPT0gMCkgeworCQlpZiAoKytqID49IE1BWF9BVFRSU1RSSU5HKQorCQkgICAgYnJlYWs7CisJCXdpZGVfYXR0cl90ZXN0X3N0cmluZ1tqXSA9ICcgJzsKKwkgICAgfQorCX0KKwl3aGlsZSAoaiA8IE1BWF9BVFRSU1RSSU5HKQorCSAgICB3aWRlX2F0dHJfdGVzdF9zdHJpbmdbaisrXSA9ICcgJzsKKwl3aWRlX2F0dHJfdGVzdF9zdHJpbmdbal0gPSAnXDAnOworICAgIH0gZWxzZSB7CisJYmVlcCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3dpZGVfaW5pdF9hdHRyX3N0cmluZyh2b2lkKQoreworICAgIHdpZGVfYXR0cl90ZXN0X3N0cmluZ1swXSA9ICdhJzsKKyAgICB3aWRlX2FkanVzdF9hdHRyX3N0cmluZygwKTsKK30KKworc3RhdGljIHZvaWQKK3NldF93aWRlX2JhY2tncm91bmQoc2hvcnQgcGFpcikKK3sKKyAgICBjY2hhcl90IG5vcm1hbDsKKyAgICB3Y2hhcl90IGJsYW5rWzJdOworCisgICAgYmxhbmtbMF0gPSAnICc7CisgICAgYmxhbmtbMV0gPSAwOworICAgIHNldGNjaGFyKCZub3JtYWwsIGJsYW5rLCBBX05PUk1BTCwgcGFpciwgMCk7CisgICAgYmtncm5kKCZub3JtYWwpOworICAgIGJrZ3JuZHNldCgmbm9ybWFsKTsKK30KKworc3RhdGljIGF0dHJfdAorZ2V0X3dpZGVfYmFja2dyb3VuZCh2b2lkKQoreworICAgIGF0dHJfdCByZXN1bHQgPSBBX05PUk1BTDsKKyAgICBhdHRyX3QgYXR0cjsKKyAgICBjY2hhcl90IGNoOworICAgIHNob3J0IHBhaXI7CisgICAgd2NoYXJfdCB3Y2hbMTBdOworCisgICAgaWYgKGdldGJrZ3JuZCgmY2gpICE9IEVSUikgeworCWlmIChnZXRjY2hhcigmY2gsIHdjaCwgJmF0dHIsICZwYWlyLCAwKSAhPSBFUlIpIHsKKwkgICAgcmVzdWx0ID0gYXR0cjsKKwl9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3dpZGVfc2hvd19hdHRyKGludCByb3csIGludCBza2lwLCBib29sIGFycm93LCBjaHR5cGUgYXR0ciwgc2hvcnQgcGFpciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpbnQgbmN2ID0gZ2V0X25jdigpOworICAgIGNodHlwZSB0ZXN0ID0gYXR0ciAmIH5XQV9BTFRDSEFSU0VUOworCisgICAgaWYgKGFycm93KQorCW12cHJpbnR3KHJvdywgNSwgIi0tPiIpOworICAgIG12cHJpbnR3KHJvdywgOCwgIiVzIG1vZGU6IiwgbmFtZSk7CisgICAgbXZwcmludHcocm93LCAyNCwgInwiKTsKKyAgICBpZiAoc2tpcCkKKwlwcmludHcoIiUqcyIsIHNraXAsICIgIik7CisKKyAgICAvKgorICAgICAqIEp1c3QgZm9yIHRlc3RpbmcsIHdyaXRlIHRleHQgdXNpbmcgdGhlIGFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0IG9uZQorICAgICAqIGNoYXJhY3RlciBhdCBhIHRpbWUgKHRvIHBhc3MgaXRzIHJlbmRpdGlvbiBkaXJlY3RseSksIGFuZCB1c2UgdGhlCisgICAgICogc3RyaW5nIG9wZXJhdGlvbiBmb3IgdGhlIG90aGVyIGF0dHJpYnV0ZXMuCisgICAgICovCisgICAgaWYgKGF0dHIgJiBXQV9BTFRDSEFSU0VUKSB7CisJY29uc3Qgd2NoYXJfdCAqczsKKwljY2hhcl90IGNoOworCisJZm9yIChzID0gd2lkZV9hdHRyX3Rlc3Rfc3RyaW5nOyAqcyAhPSBMJ1wwJzsgKytzKSB7CisJICAgIHdjaGFyX3QgZmlsbFsyXTsKKwkgICAgZmlsbFswXSA9ICpzOworCSAgICBmaWxsWzFdID0gTCdcMCc7CisJICAgIHNldGNjaGFyKCZjaCwgZmlsbCwgYXR0ciwgcGFpciwgMCk7CisJICAgIGFkZF93Y2goJmNoKTsKKwl9CisgICAgfSBlbHNlIHsKKwlhdHRyX3Qgb2xkX2F0dHI7CisJc2hvcnQgb2xkX3BhaXI7CisKKwlhdHRyX2dldCgmb2xkX2F0dHIsICZvbGRfcGFpciwgMCk7CisJYXR0cl9zZXQoYXR0ciwgcGFpciwgMCk7CisJYWRkd3N0cih3aWRlX2F0dHJfdGVzdF9zdHJpbmcpOworCWF0dHJfc2V0KG9sZF9hdHRyLCBvbGRfcGFpciwgMCk7CisgICAgfQorICAgIGlmIChza2lwKQorCXByaW50dygiJSpzIiwgc2tpcCwgIiAiKTsKKyAgICBwcmludHcoInwiKTsKKyAgICBpZiAodGVzdCAhPSBBX05PUk1BTCkgeworCWlmICghKHRlcm1fYXR0cnMoKSAmIHRlc3QpKSB7CisJICAgIHByaW50dygiIChOL0EpIik7CisJfSBlbHNlIHsKKwkgICAgaWYgKG5jdiA+IDAgJiYgKGdldF93aWRlX2JhY2tncm91bmQoKSAmIEFfQ09MT1IpKSB7CisJCXN0YXRpYyBjb25zdCBhdHRyX3QgdGFibGVbXSA9CisJCXsKKwkJICAgIFdBX1NUQU5ET1VULAorCQkgICAgV0FfVU5ERVJMSU5FLAorCQkgICAgV0FfUkVWRVJTRSwKKwkJICAgIFdBX0JMSU5LLAorCQkgICAgV0FfRElNLAorCQkgICAgV0FfQk9MRCwKKwkJICAgIFdBX0lOVklTLAorCQkgICAgV0FfUFJPVEVDVCwKKwkJICAgIFdBX0FMVENIQVJTRVQKKwkJfTsKKwkJdW5zaWduZWQgbjsKKwkJYm9vbCBmb3VuZCA9IEZBTFNFOworCQlmb3IgKG4gPSAwOyBuIDwgU0laRU9GKHRhYmxlKTsgbisrKSB7CisJCSAgICBpZiAoKHRhYmxlW25dICYgYXR0cikgIT0gMAorCQkJJiYgKCgxIDw8IG4pICYgbmN2KSAhPSAwKSB7CisJCQlmb3VuZCA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCQlpZiAoZm91bmQpCisJCSAgICBwcmludHcoIiAoTkNWKSIpOworCSAgICB9CisJICAgIGlmICgodGVybV9hdHRycygpICYgdGVzdCkgIT0gdGVzdCkKKwkJcHJpbnR3KCIgKFBhcnQpIik7CisJfQorICAgIH0KKyAgICByZXR1cm4gcm93ICsgMjsKK30KKworc3RhdGljIGJvb2wKK3dpZGVfYXR0cl9nZXRjKGludCAqc2tpcCwgc2hvcnQgKmZnLCBzaG9ydCAqYmcsIHNob3J0ICp0eCwgaW50ICphYywgdW5zaWduZWQgKmtjKQoreworICAgIGJvb2wgcmVzdWx0ID0gVFJVRTsKKyAgICBib29sIGVycm9yID0gRkFMU0U7CisgICAgV0lORE9XICpoZWxwd2luOworCisgICAgZG8geworCWludCBjaCA9IEdldGNoYXIoKTsKKworCWVycm9yID0gRkFMU0U7CisJaWYgKGNoIDwgMjU2ICYmIGlzZGlnaXQoY2gpKSB7CisJICAgICpza2lwID0gKGNoIC0gJzAnKTsKKwl9IGVsc2UgeworCSAgICBzd2l0Y2ggKGNoKSB7CisJICAgIGNhc2UgQ1RSTCgnTCcpOgorCQlSZXBhaW50KCk7CisJCWJyZWFrOworCSAgICBjYXNlICc/JzoKKwkJaWYgKChoZWxwd2luID0gbmV3d2luKExJTkVTIC0gMSwgQ09MUyAtIDIsIDAsIDApKSAhPSAwKSB7CisJCSAgICBib3hfc2V0KGhlbHB3aW4sIDAsIDApOworCQkgICAgYXR0cl9sZWdlbmQoaGVscHdpbik7CisJCSAgICB3R2V0Y2hhcihoZWxwd2luKTsKKwkJICAgIGRlbHdpbihoZWxwd2luKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSAnYSc6CisJCSphYyA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlICdBJzoKKwkJKmFjID0gQV9BTFRDSEFSU0VUOworCQlicmVhazsKKwkgICAgY2FzZSAndic6CisJCWlmICgqa2MgPT0gMCkKKwkJICAgICprYyA9IFNJWkVPRihhdHRyc190b190ZXN0KSAtIDE7CisJCWVsc2UKKwkJICAgICprYyAtPSAxOworCQlicmVhazsKKwkgICAgY2FzZSAnVic6CisJCSprYyArPSAxOworCQlpZiAoKmtjID49IFNJWkVPRihhdHRyc190b190ZXN0KSkKKwkJICAgICprYyA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlICc8JzoKKwkJd2lkZV9hZGp1c3RfYXR0cl9zdHJpbmcoLTEpOworCQlicmVhazsKKwkgICAgY2FzZSAnPic6CisJCXdpZGVfYWRqdXN0X2F0dHJfc3RyaW5nKDEpOworCQlicmVhazsKKwkgICAgY2FzZSBjYXNlX1FVSVQ6CisJCXJlc3VsdCA9IEZBTFNFOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJZXJyb3IgPSBjeWNsZV9jb2xvcl9hdHRyKGNoLCBmZywgYmcsIHR4KTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfSB3aGlsZSAoZXJyb3IpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCit3aWRlX2F0dHJfdGVzdCh2b2lkKQorLyogdGVzdCB0ZXh0IGF0dHJpYnV0ZXMgdXNpbmcgd2lkZS1jaGFyYWN0ZXIgY2FsbHMgKi8KK3sKKyAgICBpbnQgbjsKKyAgICBpbnQgc2tpcCA9IGdldF94bWMoKTsKKyAgICBzaG9ydCBmZyA9IENPTE9SX0JMQUNLOwkvKiBjb2xvciBwYWlyIDAgaXMgc3BlY2lhbCAqLworICAgIHNob3J0IGJnID0gQ09MT1JfQkxBQ0s7CisgICAgc2hvcnQgdHggPSAtMTsKKyAgICBpbnQgYWMgPSAwOworICAgIHVuc2lnbmVkIGosIGs7CisKKyAgICBpZiAoc2tpcCA8IDApCisJc2tpcCA9IDA7CisKKyAgICBuID0gc2tpcDsJCQkvKiBtYWtlIGl0IGVhc3kgKi8KKyAgICBrID0gU0laRU9GKGF0dHJzX3RvX3Rlc3QpIC0gMTsKKyAgICB3aWRlX2luaXRfYXR0cl9zdHJpbmcoKTsKKworICAgIGRvIHsKKwlpbnQgcm93ID0gMjsKKwlzaG9ydCBwYWlyID0gMDsKKwlzaG9ydCBleHRyYXMgPSAwOworCisJaWYgKHVzZV9jb2xvcnMpIHsKKwkgICAgcGFpciA9IChzaG9ydCkgKGZnICE9IENPTE9SX0JMQUNLIHx8IGJnICE9IENPTE9SX0JMQUNLKTsKKwkgICAgaWYgKHBhaXIgIT0gMCkgeworCQlwYWlyID0gMTsKKwkJaWYgKGluaXRfcGFpcihwYWlyLCBmZywgYmcpID09IEVSUikgeworCQkgICAgYmVlcCgpOworCQl9CisJICAgIH0KKwkgICAgZXh0cmFzID0gcGFpcjsKKwkgICAgaWYgKHR4ID49IDApIHsKKwkJZXh0cmFzID0gMjsKKwkJaWYgKGluaXRfcGFpcihleHRyYXMsIHR4LCBiZykgPT0gRVJSKSB7CisJCSAgICBiZWVwKCk7CisJCX0KKwkgICAgfQorCX0KKwlzZXRfd2lkZV9iYWNrZ3JvdW5kKHBhaXIpOworCWVyYXNlKCk7CisKKwlib3hfc2V0KHN0ZHNjciwgMCwgMCk7CisJbXZhZGRzdHIoMCwgMjAsICJDaGFyYWN0ZXIgYXR0cmlidXRlIHRlc3QgZGlzcGxheSIpOworCisJZm9yIChqID0gMDsgaiA8IFNJWkVPRihhdHRyc190b190ZXN0KTsgKytqKSB7CisJICAgIHJvdyA9IHdpZGVfc2hvd19hdHRyKHJvdywgbiwgaiA9PSBrLAorCQkJCSBhYyB8CisJCQkJIGF0dHJzX3RvX3Rlc3Rbal0uYXR0ciB8CisJCQkJIGF0dHJzX3RvX3Rlc3Rba10uYXR0ciwKKwkJCQkgZXh0cmFzLAorCQkJCSBhdHRyc190b190ZXN0W2pdLm5hbWUpOworCX0KKworCW12cHJpbnR3KHJvdywgOCwKKwkJICJUaGlzIHRlcm1pbmFsIGRvZXMgJXNoYXZlIHRoZSBtYWdpYy1jb29raWUgZ2xpdGNoIiwKKwkJIGdldF94bWMoKSA+IC0xID8gIiIgOiAibm90ICIpOworCW12cHJpbnR3KHJvdyArIDEsIDgsICJFbnRlciAnPycgZm9yIGhlbHAuIik7CisJc2hvd19jb2xvcl9hdHRyKGZnLCBiZywgdHgpOworCXByaW50dygiICBBQ1MgKCVkKSIsIGFjICE9IDApOworCisJcmVmcmVzaCgpOworICAgIH0gd2hpbGUgKHdpZGVfYXR0cl9nZXRjKCZuLCAmZmcsICZiZywgJnR4LCAmYWMsICZrKSk7CisKKyAgICBzZXRfd2lkZV9iYWNrZ3JvdW5kKDApOworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb2xvciBzdXBwb3J0IHRlc3RzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBOQ1VSU0VTX0NPTlNUIGNoYXIgKnRoZV9jb2xvcl9uYW1lc1tdID0KK3sKKyAgICAiYmxhY2siLAorICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgInllbGxvdyIsCisgICAgImJsdWUiLAorICAgICJtYWdlbnRhIiwKKyAgICAiY3lhbiIsCisgICAgIndoaXRlIiwKKyAgICAiQkxBQ0siLAorICAgICJSRUQiLAorICAgICJHUkVFTiIsCisgICAgIllFTExPVyIsCisgICAgIkJMVUUiLAorICAgICJNQUdFTlRBIiwKKyAgICAiQ1lBTiIsCisgICAgIldISVRFIgorfTsKKworc3RhdGljIHZvaWQKK3Nob3dfY29sb3JfbmFtZShpbnQgeSwgaW50IHgsIGludCBjb2xvciwgYm9vbCB3aWRlKQoreworICAgIGlmIChtb3ZlKHksIHgpICE9IEVSUikgeworCWNoYXIgdGVtcFs4MF07CisJaW50IHdpZHRoID0gODsKKworCWlmICh3aWRlKSB7CisJICAgIHNwcmludGYodGVtcCwgIiUwMmQiLCBjb2xvcik7CisJICAgIHdpZHRoID0gNDsKKwl9IGVsc2UgaWYgKGNvbG9yID49IDgpIHsKKwkgICAgc3ByaW50Zih0ZW1wLCAiWyUwMmRdIiwgY29sb3IpOworCX0gZWxzZSB7CisJICAgIHN0cmNweSh0ZW1wLCB0aGVfY29sb3JfbmFtZXNbY29sb3JdKTsKKwl9CisJcHJpbnR3KCIlLSouKnMiLCB3aWR0aCwgd2lkdGgsIHRlbXApOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2NvbG9yX2xlZ2VuZChXSU5ET1cgKmhlbHB3aW4sIGJvb2wgd2lkZSkKK3sKKyAgICBpbnQgcm93ID0gMTsKKyAgICBpbnQgY29sID0gMTsKKworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICJFU0MgdG8gZXhpdC4iKTsKKyAgICArK3JvdzsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiVXNlIHVwL2Rvd24gYXJyb3cgdG8gc2Nyb2xsIHRocm91Z2ggdGhlIGRpc3BsYXkgaWYgaXQgaXMiKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAibG9uZ2VyIHRoYW4gb25lIHNjcmVlbi4gQ29udHJvbC9OIGFuZCBDb250cm9sL1AgY2FuIGJlIHVzZWQiKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiaW4gcGxhY2Ugb2YgdXAvZG93biBhcnJvdy4gIFVzZSBwYWdldXAvcGFnZWRvd24gdG8gc2Nyb2xsIGEiKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiZnVsbCBzY3JlZW47IGNvbnRyb2wvQiBhbmQgY29udHJvbC9GIGNhbiBiZSB1c2VkIGhlcmUuIik7CisgICAgKytyb3c7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIlRvZ2dsZXM6Iik7CisgICAgbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJICAgICAgIiAgYS9BICAgICB0b2dnbGUgYWx0Y2hhcnNldCBvZmYvb24iKTsKKyAgICBtdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkgICAgICAiICBiL0IgICAgIHRvZ2dsZSBib2xkIG9mZi9vbiIpOworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICIgIG4vTiAgICAgdG9nZ2xlIHRleHQvbnVtYmVyIG9uL29mZiIpOworICAgIG12d3ByaW50dyhoZWxwd2luLCByb3crKywgY29sLAorCSAgICAgICIgIHcvVyAgICAgdG9nZ2xlIHdpZHRoIGJldHdlZW4gOC8xNiBjb2xvcnMiKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIGlmICh3aWRlKSB7CisJbXZ3cHJpbnR3KGhlbHB3aW4sIHJvdysrLCBjb2wsCisJCSAgIldpZGUgY2hhcmFjdGVyczoiKTsKKwltdndwcmludHcoaGVscHdpbiwgcm93KyssIGNvbCwKKwkJICAiICB4L1ggICAgIHRvZ2dsZSB0ZXh0IGJldHdlZW4gQVNDSUkgYW5kIHdpZGUtY2hhcmFjdGVyIik7CisgICAgfQorI2Vsc2UKKyAgICAodm9pZCkgd2lkZTsKKyNlbmRpZgorfQorCisjZGVmaW5lIHNldF9jb2xvcl90ZXN0KG5hbWUsIHZhbHVlKSBpZiAobmFtZSAhPSB2YWx1ZSkgeyBuYW1lID0gdmFsdWU7IGJhc2Vfcm93ID0gMDsgfQorCisvKiBnZW5lcmF0ZSBhIGNvbG9yIHRlc3QgcGF0dGVybiAqLworc3RhdGljIHZvaWQKK2NvbG9yX3Rlc3Qodm9pZCkKK3sKKyAgICBzaG9ydCBpOworICAgIGludCB0b3AgPSAwLCB3aWR0aDsKKyAgICBpbnQgYmFzZV9yb3cgPSAwOworICAgIGludCBncmlkX3RvcCA9IHRvcCArIDM7CisgICAgaW50IHBhZ2Vfc2l6ZSA9IChMSU5FUyAtIGdyaWRfdG9wKTsKKyAgICBpbnQgcGFpcnNfbWF4ID0gUEFJUl9OVU1CRVIoQV9DT0xPUikgKyAxOworICAgIGludCByb3dfbGltaXQ7CisgICAgaW50IHBlcl9yb3c7CisgICAgY2hhciBudW1iZXJlZFs4MF07CisgICAgY29uc3QgY2hhciAqaGVsbG87CisgICAgYm9vbCBkb25lID0gRkFMU0U7CisgICAgYm9vbCBvcHRfYWNzYyA9IEZBTFNFOworICAgIGJvb2wgb3B0X2JvbGQgPSBGQUxTRTsKKyAgICBib29sIG9wdF93aWRlID0gRkFMU0U7CisgICAgYm9vbCBvcHRfbnVtcyA9IEZBTFNFOworICAgIFdJTkRPVyAqaGVscHdpbjsKKworICAgIGlmIChwYWlyc19tYXggPiBDT0xPUl9QQUlSUykKKwlwYWlyc19tYXggPSBDT0xPUl9QQUlSUzsKKworICAgIHdoaWxlICghZG9uZSkgeworCWludCBzaG93biA9IDA7CisKKwkvKiB0aGlzIGFzc3VtZXMgYW4gODAtY29sdW1uIGxpbmUgKi8KKwlpZiAob3B0X3dpZGUpIHsKKwkgICAgd2lkdGggPSA0OworCSAgICBoZWxsbyA9ICJUZXN0IjsKKwkgICAgcGVyX3JvdyA9IChDT0xPUlMgPiA4KSA/IDE2IDogODsKKwl9IGVsc2UgeworCSAgICB3aWR0aCA9IDg7CisJICAgIGhlbGxvID0gIkhlbGxvIjsKKwkgICAgcGVyX3JvdyA9IDg7CisJfQorCisJcm93X2xpbWl0ID0gKHBhaXJzX21heCArIHBlcl9yb3cgLSAxKSAvIHBlcl9yb3c7CisKKwltb3ZlKDAsIDApOworCSh2b2lkKSBwcmludHcoIlRoZXJlIGFyZSAlZCBjb2xvciBwYWlycyBhbmQgJWQgY29sb3JzXG4iLAorCQkgICAgICBwYWlyc19tYXgsIENPTE9SUyk7CisKKwljbHJ0b2JvdCgpOworCSh2b2lkKSBtdnByaW50dyh0b3AgKyAxLCAwLAorCQkJIiVkeCVkIG1hdHJpeCBvZiBmb3JlZ3JvdW5kL2JhY2tncm91bmQgY29sb3JzLCBib2xkIColcypcbiIsCisJCQlyb3dfbGltaXQsCisJCQlwZXJfcm93LAorCQkJb3B0X2JvbGQgPyAib24iIDogIm9mZiIpOworCisJLyogc2hvdyBjb2xvciBuYW1lcy9udW1iZXJzIGFjcm9zcyB0aGUgdG9wICovCisJZm9yIChpID0gMDsgaSA8IHBlcl9yb3c7IGkrKykKKwkgICAgc2hvd19jb2xvcl9uYW1lKHRvcCArIDIsIChpICsgMSkgKiB3aWR0aCwgaSwgb3B0X3dpZGUpOworCisJLyogc2hvdyBhIGdyaWQgb2YgY29sb3JzLCB3aXRoIGNvbG9yIG5hbWVzLyBudW1iZXJzIG9uIHRoZSBsZWZ0ICovCisJZm9yIChpID0gKHNob3J0KSAoYmFzZV9yb3cgKiBwZXJfcm93KTsgaSA8IHBhaXJzX21heDsgaSsrKSB7CisJICAgIGludCByb3cgPSBncmlkX3RvcCArIChpIC8gcGVyX3JvdykgLSBiYXNlX3JvdzsKKwkgICAgaW50IGNvbCA9IChpICUgcGVyX3JvdyArIDEpICogd2lkdGg7CisJICAgIHNob3J0IHBhaXIgPSBpOworCisJICAgIGlmIChyb3cgPj0gMCAmJiBtb3ZlKHJvdywgY29sKSAhPSBFUlIpIHsKKwkJc2hvcnQgZmcgPSAoc2hvcnQpIChpICUgQ09MT1JTKTsKKwkJc2hvcnQgYmcgPSAoc2hvcnQpIChpIC8gQ09MT1JTKTsKKworCQlpbml0X3BhaXIocGFpciwgZmcsIGJnKTsKKwkJYXR0cm9uKChhdHRyX3QpIENPTE9SX1BBSVIocGFpcikpOworCQlpZiAob3B0X2Fjc2MpCisJCSAgICBhdHRyb24oKGF0dHJfdCkgQV9BTFRDSEFSU0VUKTsKKwkJaWYgKG9wdF9ib2xkKQorCQkgICAgYXR0cm9uKChhdHRyX3QpIEFfQk9MRCk7CisKKwkJaWYgKG9wdF9udW1zKSB7CisJCSAgICBzcHJpbnRmKG51bWJlcmVkLCAieyUwMlh9IiwgaSk7CisJCSAgICBoZWxsbyA9IG51bWJlcmVkOworCQl9CisJCXByaW50dygiJS0qLipzIiwgd2lkdGgsIHdpZHRoLCBoZWxsbyk7CisJCWF0dHJzZXQoQV9OT1JNQUwpOworCisJCWlmICgoaSAlIHBlcl9yb3cpID09IDAgJiYgKGkgJSBDT0xPUlMpID09IDApIHsKKwkJICAgIHNob3dfY29sb3JfbmFtZShyb3csIDAsIGkgLyBDT0xPUlMsIG9wdF93aWRlKTsKKwkJfQorCQkrK3Nob3duOworCSAgICB9IGVsc2UgaWYgKHNob3duKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCisJc3dpdGNoICh3R2V0Y2hhcihzdGRzY3IpKSB7CisJY2FzZSAnYSc6CisJICAgIG9wdF9hY3NjID0gRkFMU0U7CisJICAgIGJyZWFrOworCWNhc2UgJ0EnOgorCSAgICBvcHRfYWNzYyA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ2InOgorCSAgICBvcHRfYm9sZCA9IEZBTFNFOworCSAgICBicmVhazsKKwljYXNlICdCJzoKKwkgICAgb3B0X2JvbGQgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgb3B0X251bXMgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnTic6CisJICAgIG9wdF9udW1zID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSBjYXNlX1FVSVQ6CisJICAgIGRvbmUgPSBUUlVFOworCSAgICBjb250aW51ZTsKKwljYXNlICd3JzoKKwkgICAgc2V0X2NvbG9yX3Rlc3Qob3B0X3dpZGUsIEZBTFNFKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnVyc6CisJICAgIHNldF9jb2xvcl90ZXN0KG9wdF93aWRlLCBUUlVFKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdwJyk6CisJY2FzZSBLRVlfVVA6CisJICAgIGlmIChiYXNlX3JvdyA8PSAwKSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIHsKKwkJYmFzZV9yb3cgLT0gMTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIENUUkwoJ24nKToKKwljYXNlIEtFWV9ET1dOOgorCSAgICBpZiAoYmFzZV9yb3cgKyBwYWdlX3NpemUgPj0gcm93X2xpbWl0KSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIHsKKwkJYmFzZV9yb3cgKz0gMTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIENUUkwoJ2InKToKKwljYXNlIEtFWV9QUkVWSU9VUzoKKwljYXNlIEtFWV9QUEFHRToKKwkgICAgaWYgKGJhc2Vfcm93IDw9IDApIHsKKwkJYmVlcCgpOworCSAgICB9IGVsc2UgeworCQliYXNlX3JvdyAtPSAocGFnZV9zaXplIC0gMSk7CisJCWlmIChiYXNlX3JvdyA8IDApCisJCSAgICBiYXNlX3JvdyA9IDA7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdmJyk6CisJY2FzZSBLRVlfTkVYVDoKKwljYXNlIEtFWV9OUEFHRToKKwkgICAgaWYgKGJhc2Vfcm93ICsgcGFnZV9zaXplID49IHJvd19saW1pdCkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSB7CisJCWJhc2Vfcm93ICs9IHBhZ2Vfc2l6ZSAtIDE7CisJCWlmIChiYXNlX3JvdyArIHBhZ2Vfc2l6ZSA+PSByb3dfbGltaXQpIHsKKwkJICAgIGJhc2Vfcm93ID0gcm93X2xpbWl0IC0gcGFnZV9zaXplIC0gMTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJz8nOgorCSAgICBpZiAoKGhlbHB3aW4gPSBuZXd3aW4oTElORVMgLSAxLCBDT0xTIC0gMiwgMCwgMCkpICE9IDApIHsKKwkJYm94KGhlbHB3aW4sIDAsIDApOworCQljb2xvcl9sZWdlbmQoaGVscHdpbiwgRkFMU0UpOworCQl3R2V0Y2hhcihoZWxwd2luKTsKKwkJZGVsd2luKGhlbHB3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgY29udGludWU7CisJfQorICAgIH0KKworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorLyogZ2VuZXJhdGUgYSBjb2xvciB0ZXN0IHBhdHRlcm4gKi8KK3N0YXRpYyB2b2lkCit3aWRlX2NvbG9yX3Rlc3Qodm9pZCkKK3sKKyAgICBpbnQgYzsKKyAgICBpbnQgaTsKKyAgICBpbnQgdG9wID0gMCwgd2lkdGg7CisgICAgaW50IGJhc2Vfcm93ID0gMDsKKyAgICBpbnQgZ3JpZF90b3AgPSB0b3AgKyAzOworICAgIGludCBwYWdlX3NpemUgPSAoTElORVMgLSBncmlkX3RvcCk7CisgICAgaW50IHBhaXJzX21heCA9IENPTE9SX1BBSVJTOworICAgIGludCByb3dfbGltaXQ7CisgICAgaW50IHBlcl9yb3c7CisgICAgY2hhciBudW1iZXJlZFs4MF07CisgICAgY29uc3QgY2hhciAqaGVsbG87CisgICAgYm9vbCBkb25lID0gRkFMU0U7CisgICAgYm9vbCBvcHRfYWNzYyA9IEZBTFNFOworICAgIGJvb2wgb3B0X2JvbGQgPSBGQUxTRTsKKyAgICBib29sIG9wdF93aWRlID0gRkFMU0U7CisgICAgYm9vbCBvcHRfbnVtcyA9IEZBTFNFOworICAgIGJvb2wgb3B0X3hjaHIgPSBGQUxTRTsKKyAgICB3Y2hhcl90IGJ1ZmZlclsxMF07CisgICAgV0lORE9XICpoZWxwd2luOworCisgICAgd2hpbGUgKCFkb25lKSB7CisJaW50IHNob3duID0gMDsKKworCS8qIHRoaXMgYXNzdW1lcyBhbiA4MC1jb2x1bW4gbGluZSAqLworCWlmIChvcHRfd2lkZSkgeworCSAgICB3aWR0aCA9IDQ7CisJICAgIGhlbGxvID0gIlRlc3QiOworCSAgICBwZXJfcm93ID0gKENPTE9SUyA+IDgpID8gMTYgOiA4OworCX0gZWxzZSB7CisJICAgIHdpZHRoID0gODsKKwkgICAgaGVsbG8gPSAiSGVsbG8iOworCSAgICBwZXJfcm93ID0gODsKKwl9CisJaWYgKG9wdF94Y2hyKSB7CisJICAgIG1ha2VfZnVsbHdpZHRoX3RleHQoYnVmZmVyLCBoZWxsbyk7CisJICAgIHdpZHRoICo9IDI7CisJICAgIHBlcl9yb3cgLz0gMjsKKwl9IGVsc2UgeworCSAgICBtYWtlX25hcnJvd190ZXh0KGJ1ZmZlciwgaGVsbG8pOworCX0KKworCXJvd19saW1pdCA9IChwYWlyc19tYXggKyBwZXJfcm93IC0gMSkgLyBwZXJfcm93OworCisJbW92ZSgwLCAwKTsKKwkodm9pZCkgcHJpbnR3KCJUaGVyZSBhcmUgJWQgY29sb3IgcGFpcnMgYW5kICVkIGNvbG9yc1xuIiwKKwkJICAgICAgcGFpcnNfbWF4LCBDT0xPUlMpOworCisJY2xydG9ib3QoKTsKKwkodm9pZCkgbXZwcmludHcodG9wICsgMSwgMCwKKwkJCSIlZHglZCBtYXRyaXggb2YgZm9yZWdyb3VuZC9iYWNrZ3JvdW5kIGNvbG9ycywgYm9sZCAqJXMqXG4iLAorCQkJcm93X2xpbWl0LAorCQkJcGVyX3JvdywKKwkJCW9wdF9ib2xkID8gIm9uIiA6ICJvZmYiKTsKKworCS8qIHNob3cgY29sb3IgbmFtZXMvbnVtYmVycyBhY3Jvc3MgdGhlIHRvcCAqLworCWZvciAoaSA9IDA7IGkgPCBwZXJfcm93OyBpKyspCisJICAgIHNob3dfY29sb3JfbmFtZSh0b3AgKyAyLCAoaSArIDEpICogd2lkdGgsIGksIG9wdF93aWRlKTsKKworCS8qIHNob3cgYSBncmlkIG9mIGNvbG9ycywgd2l0aCBjb2xvciBuYW1lcy8gbnVtYmVycyBvbiB0aGUgbGVmdCAqLworCWZvciAoaSA9IChiYXNlX3JvdyAqIHBlcl9yb3cpOyBpIDwgcGFpcnNfbWF4OyBpKyspIHsKKwkgICAgaW50IHJvdyA9IGdyaWRfdG9wICsgKGkgLyBwZXJfcm93KSAtIGJhc2Vfcm93OworCSAgICBpbnQgY29sID0gKGkgJSBwZXJfcm93ICsgMSkgKiB3aWR0aDsKKwkgICAgc2hvcnQgcGFpciA9IChzaG9ydCkgaTsKKworCSAgICBpZiAocm93ID49IDAgJiYgbW92ZShyb3csIGNvbCkgIT0gRVJSKSB7CisJCWluaXRfcGFpcihwYWlyLCAoc2hvcnQpIChpICUgQ09MT1JTKSwgKHNob3J0KSAoaSAvIENPTE9SUykpOworCQljb2xvcl9zZXQocGFpciwgTlVMTCk7CisJCWlmIChvcHRfYWNzYykKKwkJICAgIGF0dHJfb24oKGF0dHJfdCkgQV9BTFRDSEFSU0VULCBOVUxMKTsKKwkJaWYgKG9wdF9ib2xkKQorCQkgICAgYXR0cl9vbigoYXR0cl90KSBBX0JPTEQsIE5VTEwpOworCisJCWlmIChvcHRfbnVtcykgeworCQkgICAgc3ByaW50ZihudW1iZXJlZCwgInslMDJYfSIsIGkpOworCQkgICAgaWYgKG9wdF94Y2hyKSB7CisJCQltYWtlX2Z1bGx3aWR0aF90ZXh0KGJ1ZmZlciwgbnVtYmVyZWQpOworCQkgICAgfSBlbHNlIHsKKwkJCW1ha2VfbmFycm93X3RleHQoYnVmZmVyLCBudW1iZXJlZCk7CisJCSAgICB9CisJCX0KKwkJYWRkbndzdHIoYnVmZmVyLCB3aWR0aCk7CisJCWF0dHJfc2V0KEFfTk9STUFMLCAwLCBOVUxMKTsKKworCQlpZiAoKGkgJSBwZXJfcm93KSA9PSAwICYmIChpICUgQ09MT1JTKSA9PSAwKSB7CisJCSAgICBzaG93X2NvbG9yX25hbWUocm93LCAwLCBpIC8gQ09MT1JTLCBvcHRfd2lkZSk7CisJCX0KKwkJKytzaG93bjsKKwkgICAgfSBlbHNlIGlmIChzaG93bikgeworCQlicmVhazsKKwkgICAgfQorCX0KKworCXN3aXRjaCAoYyA9IHdHZXRjaGFyKHN0ZHNjcikpIHsKKwljYXNlICdhJzoKKwkgICAgb3B0X2Fjc2MgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnQSc6CisJICAgIG9wdF9hY3NjID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYic6CisJICAgIG9wdF9ib2xkID0gRkFMU0U7CisJICAgIGJyZWFrOworCWNhc2UgJ0InOgorCSAgICBvcHRfYm9sZCA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ24nOgorCSAgICBvcHRfbnVtcyA9IEZBTFNFOworCSAgICBicmVhazsKKwljYXNlICdOJzoKKwkgICAgb3B0X251bXMgPSBUUlVFOworCSAgICBicmVhazsKKwljYXNlIGNhc2VfUVVJVDoKKwkgICAgZG9uZSA9IFRSVUU7CisJICAgIGNvbnRpbnVlOworCWNhc2UgJ3cnOgorCSAgICBzZXRfY29sb3JfdGVzdChvcHRfd2lkZSwgRkFMU0UpOworCSAgICBicmVhazsKKwljYXNlICdXJzoKKwkgICAgc2V0X2NvbG9yX3Rlc3Qob3B0X3dpZGUsIFRSVUUpOworCSAgICBicmVhazsKKwljYXNlICd4JzoKKwkgICAgb3B0X3hjaHIgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnWCc6CisJICAgIG9wdF94Y2hyID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdwJyk6CisJY2FzZSBLRVlfVVA6CisJICAgIGlmIChiYXNlX3JvdyA8PSAwKSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIHsKKwkJYmFzZV9yb3cgLT0gMTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIENUUkwoJ24nKToKKwljYXNlIEtFWV9ET1dOOgorCSAgICBpZiAoYmFzZV9yb3cgKyBwYWdlX3NpemUgPj0gcm93X2xpbWl0KSB7CisJCWJlZXAoKTsKKwkgICAgfSBlbHNlIHsKKwkJYmFzZV9yb3cgKz0gMTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIENUUkwoJ2InKToKKwljYXNlIEtFWV9QUkVWSU9VUzoKKwljYXNlIEtFWV9QUEFHRToKKwkgICAgaWYgKGJhc2Vfcm93IDw9IDApIHsKKwkJYmVlcCgpOworCSAgICB9IGVsc2UgeworCQliYXNlX3JvdyAtPSAocGFnZV9zaXplIC0gMSk7CisJCWlmIChiYXNlX3JvdyA8IDApCisJCSAgICBiYXNlX3JvdyA9IDA7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBDVFJMKCdmJyk6CisJY2FzZSBLRVlfTkVYVDoKKwljYXNlIEtFWV9OUEFHRToKKwkgICAgaWYgKGJhc2Vfcm93ICsgcGFnZV9zaXplID49IHJvd19saW1pdCkgeworCQliZWVwKCk7CisJICAgIH0gZWxzZSB7CisJCWJhc2Vfcm93ICs9IHBhZ2Vfc2l6ZSAtIDE7CisJCWlmIChiYXNlX3JvdyArIHBhZ2Vfc2l6ZSA+PSByb3dfbGltaXQpIHsKKwkJICAgIGJhc2Vfcm93ID0gcm93X2xpbWl0IC0gcGFnZV9zaXplIC0gMTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJz8nOgorCSAgICBpZiAoKGhlbHB3aW4gPSBuZXd3aW4oTElORVMgLSAxLCBDT0xTIC0gMiwgMCwgMCkpICE9IDApIHsKKwkJYm94KGhlbHB3aW4sIDAsIDApOworCQljb2xvcl9sZWdlbmQoaGVscHdpbiwgVFJVRSk7CisJCXdHZXRjaGFyKGhlbHB3aW4pOworCQlkZWx3aW4oaGVscHdpbik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYmVlcCgpOworCSAgICBjb250aW51ZTsKKwl9CisgICAgfQorCisgICAgZXJhc2UoKTsKKyAgICBlbmR3aW4oKTsKK30KKyNlbmRpZiAvKiBVU0VfV0lERUNfU1VQUE9SVCAqLworCitzdGF0aWMgdm9pZAorY2hhbmdlX2NvbG9yKHNob3J0IGN1cnJlbnQsIGludCBmaWVsZCwgaW50IHZhbHVlLCBpbnQgdXNlYmFzZSkKK3sKKyAgICBzaG9ydCByZWQsIGdyZWVuLCBibHVlOworCisgICAgY29sb3JfY29udGVudChjdXJyZW50LCAmcmVkLCAmZ3JlZW4sICZibHVlKTsKKworICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICBjYXNlIDA6CisJcmVkID0gKHNob3J0KSAodXNlYmFzZSA/IChyZWQgKyB2YWx1ZSkgOiB2YWx1ZSk7CisJYnJlYWs7CisgICAgY2FzZSAxOgorCWdyZWVuID0gKHNob3J0KSAodXNlYmFzZSA/IChncmVlbiArIHZhbHVlKSA6IHZhbHVlKTsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJYmx1ZSA9IChzaG9ydCkgKHVzZWJhc2UgPyAoYmx1ZSArIHZhbHVlKSA6IHZhbHVlKTsKKwlicmVhazsKKyAgICB9CisKKyAgICBpZiAoaW5pdF9jb2xvcihjdXJyZW50LCByZWQsIGdyZWVuLCBibHVlKSA9PSBFUlIpCisJYmVlcCgpOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9hbGxfY29sb3JzKHZvaWQpCit7CisgICAgc2hvcnQgYzsKKworICAgIGZvciAoYyA9IDA7IGMgPCBDT0xPUlM7ICsrYykKKwlpbml0X2NvbG9yKGMsCisJCSAgIGFsbF9jb2xvcnNbY10ucmVkLAorCQkgICBhbGxfY29sb3JzW2NdLmdyZWVuLAorCQkgICBhbGxfY29sb3JzW2NdLmJsdWUpOworfQorCisjZGVmaW5lIHNjYWxlZF9yZ2IobikgKCgyNTUgKiAobikpIC8gMTAwMCkKKworc3RhdGljIHZvaWQKK2NvbG9yX2VkaXQodm9pZCkKKy8qIGRpc3BsYXkgdGhlIGNvbG9yIHRlc3QgcGF0dGVybiwgd2l0aG91dCB0cnlpbmcgdG8gZWRpdCBjb2xvcnMgKi8KK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgY3VycmVudCA9IDA7CisgICAgaW50IHRoaXNfYyA9IDAsIHZhbHVlID0gMCwgZmllbGQgPSAwOworICAgIGludCBsYXN0X2M7CisgICAgaW50IHRvcF9jb2xvciA9IDA7CisgICAgaW50IHBhZ2Vfc2l6ZSA9IChMSU5FUyAtIDYpOworCisgICAgaW5pdF9hbGxfY29sb3JzKCk7CisgICAgcmVmcmVzaCgpOworCisgICAgZm9yIChpID0gMDsgaSA8IG1heF9jb2xvcnM7IGkrKykKKwlpbml0X3BhaXIoKHNob3J0KSBpLCAoc2hvcnQpIENPTE9SX1dISVRFLCAoc2hvcnQpIGkpOworCisgICAgbXZwcmludHcoTElORVMgLSAyLCAwLCAiTnVtYmVyOiAlZCIsIHZhbHVlKTsKKworICAgIGRvIHsKKwlzaG9ydCByZWQsIGdyZWVuLCBibHVlOworCisJYXR0cm9uKEFfQk9MRCk7CisJbXZhZGRzdHIoMCwgMjAsICJDb2xvciBSR0IgVmFsdWUgRWRpdGluZyIpOworCWF0dHJvZmYoQV9CT0xEKTsKKworCWZvciAoaSA9IChzaG9ydCkgdG9wX2NvbG9yOworCSAgICAgKGkgLSB0b3BfY29sb3IgPCBwYWdlX3NpemUpCisJICAgICAmJiAoaSA8IG1heF9jb2xvcnMpOyBpKyspIHsKKwkgICAgY2hhciBudW1lcmljWzgwXTsKKworCSAgICBzcHJpbnRmKG51bWVyaWMsICJbJWRdIiwgaSk7CisJICAgIG12cHJpbnR3KDIgKyBpIC0gdG9wX2NvbG9yLCAwLCAiJWMgJS04czoiLAorCQkgICAgIChpID09IGN1cnJlbnQgPyAnPicgOiAnICcpLAorCQkgICAgIChpIDwgKGludCkgU0laRU9GKHRoZV9jb2xvcl9uYW1lcykKKwkJICAgICAgPyB0aGVfY29sb3JfbmFtZXNbaV0gOiBudW1lcmljKSk7CisJICAgIGF0dHJzZXQoQ09MT1JfUEFJUihpKSk7CisJICAgIGFkZHN0cigiICAgICAgICAiKTsKKwkgICAgYXR0cnNldChBX05PUk1BTCk7CisKKwkgICAgY29sb3JfY29udGVudCgoc2hvcnQpIGksICZyZWQsICZncmVlbiwgJmJsdWUpOworCSAgICBhZGRzdHIoIiAgIFIgPSAiKTsKKwkgICAgaWYgKGN1cnJlbnQgPT0gaSAmJiBmaWVsZCA9PSAwKQorCQlhdHRyb24oQV9TVEFORE9VVCk7CisJICAgIHByaW50dygiJTA0ZCIsIHJlZCk7CisJICAgIGlmIChjdXJyZW50ID09IGkgJiYgZmllbGQgPT0gMCkKKwkJYXR0cnNldChBX05PUk1BTCk7CisJICAgIGFkZHN0cigiLCBHID0gIik7CisJICAgIGlmIChjdXJyZW50ID09IGkgJiYgZmllbGQgPT0gMSkKKwkJYXR0cm9uKEFfU1RBTkRPVVQpOworCSAgICBwcmludHcoIiUwNGQiLCBncmVlbik7CisJICAgIGlmIChjdXJyZW50ID09IGkgJiYgZmllbGQgPT0gMSkKKwkJYXR0cnNldChBX05PUk1BTCk7CisJICAgIGFkZHN0cigiLCBCID0gIik7CisJICAgIGlmIChjdXJyZW50ID09IGkgJiYgZmllbGQgPT0gMikKKwkJYXR0cm9uKEFfU1RBTkRPVVQpOworCSAgICBwcmludHcoIiUwNGQiLCBibHVlKTsKKwkgICAgaWYgKGN1cnJlbnQgPT0gaSAmJiBmaWVsZCA9PSAyKQorCQlhdHRyc2V0KEFfTk9STUFMKTsKKwkgICAgYXR0cnNldChBX05PUk1BTCk7CisJICAgIHByaW50dygiICggJTNkICUzZCAlM2QgKSIsCisJCSAgIHNjYWxlZF9yZ2IocmVkKSwKKwkJICAgc2NhbGVkX3JnYihncmVlbiksCisJCSAgIHNjYWxlZF9yZ2IoYmx1ZSkpOworCX0KKworCW12YWRkc3RyKExJTkVTIC0gMywgMCwKKwkJICJVc2UgdXAvZG93biB0byBzZWxlY3QgYSBjb2xvciwgbGVmdC9yaWdodCB0byBjaGFuZ2UgZmllbGRzLiIpOworCW12YWRkc3RyKExJTkVTIC0gMiwgMCwKKwkJICJNb2RpZnkgZmllbGQgYnkgdHlwaW5nIG5ubj0sIG5ubi0sIG9yIG5ubisuICA/IGZvciBoZWxwLiIpOworCisJbW92ZSgyICsgY3VycmVudCAtIHRvcF9jb2xvciwgMCk7CisKKwlsYXN0X2MgPSB0aGlzX2M7CisJdGhpc19jID0gR2V0Y2hhcigpOworCWlmICh0aGlzX2MgPCAyNTYgJiYgaXNkaWdpdCh0aGlzX2MpICYmICFpc2RpZ2l0KGxhc3RfYykpCisJICAgIHZhbHVlID0gMDsKKworCXN3aXRjaCAodGhpc19jKSB7CisJY2FzZSBDVFJMKCdiJyk6CisJY2FzZSBLRVlfUFBBR0U6CisJICAgIGlmIChjdXJyZW50ID4gMCkKKwkJY3VycmVudCAtPSAocGFnZV9zaXplIC0gMSk7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTCgnZicpOgorCWNhc2UgS0VZX05QQUdFOgorCSAgICBpZiAoY3VycmVudCA8IChtYXhfY29sb3JzIC0gMSkpCisJCWN1cnJlbnQgKz0gKHBhZ2Vfc2l6ZSAtIDEpOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ3AnKToKKwljYXNlIEtFWV9VUDoKKwkgICAgY3VycmVudCA9IChjdXJyZW50ID09IDAgPyAobWF4X2NvbG9ycyAtIDEpIDogY3VycmVudCAtIDEpOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTCgnbicpOgorCWNhc2UgS0VZX0RPV046CisJICAgIGN1cnJlbnQgPSAoY3VycmVudCA9PSAobWF4X2NvbG9ycyAtIDEpID8gMCA6IGN1cnJlbnQgKyAxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgZmllbGQgPSAoZmllbGQgPT0gMiA/IDAgOiBmaWVsZCArIDEpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX0xFRlQ6CisJICAgIGZpZWxkID0gKGZpZWxkID09IDAgPyAyIDogZmllbGQgLSAxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICcwJzoKKwljYXNlICcxJzoKKwljYXNlICcyJzoKKwljYXNlICczJzoKKwljYXNlICc0JzoKKwljYXNlICc1JzoKKwljYXNlICc2JzoKKwljYXNlICc3JzoKKwljYXNlICc4JzoKKwljYXNlICc5JzoKKwkgICAgdmFsdWUgPSB2YWx1ZSAqIDEwICsgKHRoaXNfYyAtICcwJyk7CisJICAgIGJyZWFrOworCisJY2FzZSAnKyc6CisJICAgIGNoYW5nZV9jb2xvcigoc2hvcnQpIGN1cnJlbnQsIGZpZWxkLCB2YWx1ZSwgMSk7CisJICAgIGJyZWFrOworCisJY2FzZSAnLSc6CisJICAgIGNoYW5nZV9jb2xvcigoc2hvcnQpIGN1cnJlbnQsIGZpZWxkLCAtdmFsdWUsIDEpOworCSAgICBicmVhazsKKworCWNhc2UgJz0nOgorCSAgICBjaGFuZ2VfY29sb3IoKHNob3J0KSBjdXJyZW50LCBmaWVsZCwgdmFsdWUsIDApOworCSAgICBicmVhazsKKworCWNhc2UgJz8nOgorCSAgICBlcmFzZSgpOworCSAgICBQKCIgICAgICAgICAgICAgICAgICAgICAgUkdCIFZhbHVlIEVkaXRpbmcgSGVscCIpOworCSAgICBQKCIiKTsKKwkgICAgUCgiWW91IGFyZSBpbiB0aGUgUkdCIHZhbHVlIGVkaXRvci4gIFVzZSB0aGUgYXJyb3cga2V5cyB0byBzZWxlY3Qgb25lIG9mIik7CisJICAgIFAoInRoZSBmaWVsZHMgaW4gb25lIG9mIHRoZSBSR0IgdHJpcGxlcyBvZiB0aGUgY3VycmVudCBjb2xvcnM7IHRoZSBvbmUiKTsKKwkgICAgUCgiY3VycmVudGx5IHNlbGVjdGVkIHdpbGwgYmUgcmV2ZXJzZS12aWRlbyBoaWdobGlnaHRlZC4iKTsKKwkgICAgUCgiIik7CisJICAgIFAoIlRvIGNoYW5nZSBhIGZpZWxkLCBlbnRlciB0aGUgZGlnaXRzIG9mIHRoZSBuZXcgdmFsdWU7IHRoZXkgYXJlIGVjaG9lZCIpOworCSAgICBQKCJhcyBlbnRlcmVkLiAgRmluaXNoIGJ5IHR5cGluZyBgPScuICBUaGUgY2hhbmdlIHdpbGwgdGFrZSBlZmZlY3QgaW5zdGFudGx5LiIpOworCSAgICBQKCJUbyBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGEgdmFsdWUsIHVzZSB0aGUgc2FtZSBwcm9jZWR1cmUsIGJ1dCBmaW5pc2giKTsKKwkgICAgUCgid2l0aCBhIGArJyBvciBgLScuIik7CisJICAgIFAoIiIpOworCSAgICBQKCJQcmVzcyAnbScgdG8gaW52b2tlIHRoZSB0b3AtbGV2ZWwgbWVudSB3aXRoIHRoZSBjdXJyZW50IGNvbG9yIHNldHRpbmdzLiIpOworCSAgICBQKCJUbyBxdWl0LCBkbyBFU0MiKTsKKworCSAgICBQYXVzZSgpOworCSAgICBlcmFzZSgpOworCSAgICBicmVhazsKKworCWNhc2UgJ20nOgorCSAgICBlbmR3aW4oKTsKKwkgICAgbWFpbl9tZW51KEZBTFNFKTsKKwkgICAgcmVmcmVzaCgpOworCSAgICBicmVhazsKKworCWNhc2UgY2FzZV9RVUlUOgorCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCisJaWYgKGN1cnJlbnQgPCAwKQorCSAgICBjdXJyZW50ID0gMDsKKwlpZiAoY3VycmVudCA+PSBtYXhfY29sb3JzKQorCSAgICBjdXJyZW50ID0gbWF4X2NvbG9ycyAtIDE7CisJaWYgKGN1cnJlbnQgPCB0b3BfY29sb3IpCisJICAgIHRvcF9jb2xvciA9IGN1cnJlbnQ7CisJaWYgKGN1cnJlbnQgLSB0b3BfY29sb3IgPj0gcGFnZV9zaXplKQorCSAgICB0b3BfY29sb3IgPSBjdXJyZW50IC0gKHBhZ2Vfc2l6ZSAtIDEpOworCisJbXZwcmludHcoTElORVMgLSAxLCAwLCAiTnVtYmVyOiAlZCIsIHZhbHVlKTsKKwljbHJ0b2VvbCgpOworICAgIH0gd2hpbGUKKwkoIWlzUXVpdCh0aGlzX2MpKTsKKworICAgIGVyYXNlKCk7CisKKyAgICAvKgorICAgICAqIG5jdXJzZXMgZG9lcyBub3QgcmVzZXQgZWFjaCBjb2xvciBpbmRpdmlkdWFsbHkgd2hlbiBjYWxsaW5nIGVuZHdpbigpLgorICAgICAqLworICAgIGluaXRfYWxsX2NvbG9ycygpOworCisgICAgZW5kd2luKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU29mdC1rZXkgbGFiZWwgdGVzdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgVVNFX1NPRlRLRVlTCisKKyNkZWZpbmUgU0xLX0hFTFAgMTcKKyNkZWZpbmUgU0xLX1dPUksgKFNMS19IRUxQICsgMykKKworc3RhdGljIHZvaWQKK3Nsa19oZWxwKHZvaWQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnRhYmxlW10gPQorICAgIHsKKwkiQXZhaWxhYmxlIGNvbW1hbmRzIGFyZToiCisJLCIiCisJLCJeTCAgICAgICAgIC0tIHJlcGFpbnQgdGhpcyBtZXNzYWdlIGFuZCBhY3RpdmF0ZSBzb2Z0IGtleXMiCisJLCJhL2QgICAgICAgIC0tIGFjdGl2YXRlL2Rpc2FibGUgc29mdCBrZXlzIgorCSwiYyAgICAgICAgICAtLSBzZXQgY2VudGVyZWQgZm9ybWF0IGZvciBsYWJlbHMiCisJLCJsICAgICAgICAgIC0tIHNldCBsZWZ0LWp1c3RpZmllZCBmb3JtYXQgZm9yIGxhYmVscyIKKwksInIgICAgICAgICAgLS0gc2V0IHJpZ2h0LWp1c3RpZmllZCBmb3JtYXQgZm9yIGxhYmVscyIKKwksIlsxMjM0NTY3OF0gLS0gc2V0IGxhYmVsOyBsYWJlbHMgYXJlIG51bWJlcmVkIDEgdGhyb3VnaCA4IgorCSwiZSAgICAgICAgICAtLSBlcmFzZSBzdGRzY3IgKHNob3VsZCBub3QgZXJhc2UgbGFiZWxzKSIKKwksInMgICAgICAgICAgLS0gdGVzdCBzY3JvbGxpbmcgb2Ygc2hvcnRlbmVkIHNjcmVlbiIKKyNpZiBIQVZFX1NMS19DT0xPUgorCSwiRi9CICAgICAgICAtLSBjeWNsZSB0aHJvdWdoIGZvcmVncm91bmQvYmFja2dyb3VuZCBjb2xvcnMiCisjZW5kaWYKKwksIkVTQyAgICAgICAgLS0gcmV0dXJuIHRvIG1haW4gbWVudSIKKwksIiIKKwksIk5vdGU6IGlmIGFjdGl2YXRpbmcgdGhlIHNvZnQga2V5cyBjYXVzZXMgeW91ciB0ZXJtaW5hbCB0byBzY3JvbGwgdXAiCisJLCJvbmUgbGluZSwgeW91ciB0ZXJtaW5hbCBhdXRvLXNjcm9sbHMgd2hlbiBhbnl0aGluZyBpcyB3cml0dGVuIHRvIHRoZSIKKwksImxhc3Qgc2NyZWVuIHBvc2l0aW9uLiAgVGhlIG5jdXJzZXMgY29kZSBkb2VzIG5vdCB5ZXQgaGFuZGxlIHRoaXMiCisJLCJncmFjZWZ1bGx5LiIKKyAgICB9OworICAgIHVuc2lnbmVkIGo7CisKKyAgICBtb3ZlKDIsIDApOworICAgIGZvciAoaiA9IDA7IGogPCBTSVpFT0YodGFibGUpOyArK2opIHsKKwlQKHRhYmxlW2pdKTsKKyAgICB9CisgICAgcmVmcmVzaCgpOworfQorCisjaWYgSEFWRV9TTEtfQ09MT1IKK3N0YXRpYyB2b2lkCitjYWxsX3Nsa19jb2xvcihzaG9ydCBmZywgc2hvcnQgYmcpCit7CisgICAgaW5pdF9wYWlyKDEsIGJnLCBmZyk7CisgICAgc2xrX2NvbG9yKDEpOworICAgIG12cHJpbnR3KFNMS19XT1JLLCAwLCAiQ29sb3JzICVkLyVkXG4iLCBmZywgYmcpOworICAgIGNscnRvZW9sKCk7CisgICAgcmVmcmVzaCgpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitzbGtfdGVzdCh2b2lkKQorLyogZXhlcmNpc2UgdGhlIHNvZnQga2V5cyAqLworeworICAgIGludCBjLCBmbXQgPSAxOworICAgIGNoYXIgYnVmWzldOworICAgIGNoYXIgKnM7CisjaWYgSEFWRV9TTEtfQ09MT1IKKyAgICBzaG9ydCBmZyA9IENPTE9SX0JMQUNLOworICAgIHNob3J0IGJnID0gQ09MT1JfV0hJVEU7CisjZW5kaWYKKworICAgIGMgPSBDVFJMKCdsJyk7CisjaWYgSEFWRV9TTEtfQ09MT1IKKyAgICBpZiAodXNlX2NvbG9ycykgeworCWNhbGxfc2xrX2NvbG9yKGZnLCBiZyk7CisgICAgfQorI2VuZGlmCisKKyAgICBkbyB7CisJbW92ZSgwLCAwKTsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlIENUUkwoJ2wnKToKKwkgICAgZXJhc2UoKTsKKwkgICAgYXR0cm9uKEFfQk9MRCk7CisJICAgIG12YWRkc3RyKDAsIDIwLCAiU29mdCBLZXkgRXhlcmNpc2VyIik7CisJICAgIGF0dHJvZmYoQV9CT0xEKTsKKworCSAgICBzbGtfaGVscCgpOworCSAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgJ2EnOgorCSAgICBzbGtfcmVzdG9yZSgpOworCSAgICBicmVhazsKKworCWNhc2UgJ2UnOgorCSAgICB3Y2xlYXIoc3Rkc2NyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdzJzoKKwkgICAgbXZwcmludHcoU0xLX1dPUkssIDAsICJQcmVzcyBRIHRvIHN0b3AgdGhlIHNjcm9sbGluZy10ZXN0OiAiKTsKKwkgICAgd2hpbGUgKChjID0gR2V0Y2hhcigpKSAhPSAnUScgJiYgKGMgIT0gRVJSKSkKKwkJYWRkY2goKGNodHlwZSkgYyk7CisJICAgIGJyZWFrOworCisJY2FzZSAnZCc6CisJICAgIHNsa19jbGVhcigpOworCSAgICBicmVhazsKKworCWNhc2UgJ2wnOgorCSAgICBmbXQgPSAwOworCSAgICBicmVhazsKKworCWNhc2UgJ2MnOgorCSAgICBmbXQgPSAxOworCSAgICBicmVhazsKKworCWNhc2UgJ3InOgorCSAgICBmbXQgPSAyOworCSAgICBicmVhazsKKworCWNhc2UgJzEnOgorCWNhc2UgJzInOgorCWNhc2UgJzMnOgorCWNhc2UgJzQnOgorCWNhc2UgJzUnOgorCWNhc2UgJzYnOgorCWNhc2UgJzcnOgorCWNhc2UgJzgnOgorCSAgICAodm9pZCkgbXZhZGRzdHIoU0xLX1dPUkssIDAsICJQbGVhc2UgZW50ZXIgdGhlIGxhYmVsIHZhbHVlOiAiKTsKKwkgICAgc3RyY3B5KGJ1ZiwgIiIpOworCSAgICBpZiAoKHMgPSBzbGtfbGFiZWwoYyAtICcwJykpICE9IDApIHsKKwkJc3RybmNweShidWYsIHMsIDgpOworCSAgICB9CisJICAgIHdHZXRzdHJpbmcoc3Rkc2NyLCBidWYsIDgpOworCSAgICBzbGtfc2V0KChjIC0gJzAnKSwgYnVmLCBmbXQpOworCSAgICBzbGtfcmVmcmVzaCgpOworCSAgICBtb3ZlKFNMS19XT1JLLCAwKTsKKwkgICAgY2xydG9ib3QoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIGNhc2VfUVVJVDoKKwkgICAgZ290byBkb25lOworCisjaWYgSEFWRV9TTEtfQ09MT1IKKwljYXNlICdGJzoKKwkgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwkJZmcgPSAoc2hvcnQpICgoZmcgKyAxKSAlIENPTE9SUyk7CisJCWNhbGxfc2xrX2NvbG9yKGZnLCBiZyk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAnQic6CisJICAgIGlmICh1c2VfY29sb3JzKSB7CisJCWJnID0gKHNob3J0KSAoKGJnICsgMSkgJSBDT0xPUlMpOworCQljYWxsX3Nsa19jb2xvcihmZywgYmcpOworCSAgICB9CisJICAgIGJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoS0VZX1JFU0laRSkgJiYgSEFWRV9XUkVTSVpFCisJY2FzZSBLRVlfUkVTSVpFOgorCSAgICB3bm91dHJlZnJlc2goc3Rkc2NyKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwl9CisgICAgfSB3aGlsZSAoIWlzUXVpdChjID0gR2V0Y2hhcigpKSk7CisKKyAgZG9uZToKKyAgICBzbGtfY2xlYXIoKTsKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNkZWZpbmUgU0xLTEVOIDgKK3N0YXRpYyB2b2lkCit3aWRlX3Nsa190ZXN0KHZvaWQpCisvKiBleGVyY2lzZSB0aGUgc29mdCBrZXlzICovCit7CisgICAgaW50IGMsIGZtdCA9IDE7CisgICAgd2NoYXJfdCBidWZbU0xLTEVOICsgMV07CisgICAgY2hhciAqczsKKyAgICBzaG9ydCBmZyA9IENPTE9SX0JMQUNLOworICAgIHNob3J0IGJnID0gQ09MT1JfV0hJVEU7CisKKyAgICBjID0gQ1RSTCgnbCcpOworICAgIGlmICh1c2VfY29sb3JzKSB7CisJY2FsbF9zbGtfY29sb3IoZmcsIGJnKTsKKyAgICB9CisgICAgZG8geworCW1vdmUoMCwgMCk7CisJc3dpdGNoIChjKSB7CisJY2FzZSBDVFJMKCdsJyk6CisJICAgIGVyYXNlKCk7CisJICAgIGF0dHJfb24oV0FfQk9MRCwgTlVMTCk7CisJICAgIG12YWRkc3RyKDAsIDIwLCAiU29mdCBLZXkgRXhlcmNpc2VyIik7CisJICAgIGF0dHJfb2ZmKFdBX0JPTEQsIE5VTEwpOworCisJICAgIHNsa19oZWxwKCk7CisJICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSAnYSc6CisJICAgIHNsa19yZXN0b3JlKCk7CisJICAgIGJyZWFrOworCisJY2FzZSAnZSc6CisJICAgIHdjbGVhcihzdGRzY3IpOworCSAgICBicmVhazsKKworCWNhc2UgJ3MnOgorCSAgICBtdnByaW50dyhTTEtfV09SSywgMCwgIlByZXNzIFEgdG8gc3RvcCB0aGUgc2Nyb2xsaW5nLXRlc3Q6ICIpOworCSAgICB3aGlsZSAoKGMgPSBHZXRjaGFyKCkpICE9ICdRJyAmJiAoYyAhPSBFUlIpKQorCQlhZGRjaCgoY2h0eXBlKSBjKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdkJzoKKwkgICAgc2xrX2NsZWFyKCk7CisJICAgIGJyZWFrOworCisJY2FzZSAnbCc6CisJICAgIGZtdCA9IDA7CisJICAgIGJyZWFrOworCisJY2FzZSAnYyc6CisJICAgIGZtdCA9IDE7CisJICAgIGJyZWFrOworCisJY2FzZSAncic6CisJICAgIGZtdCA9IDI7CisJICAgIGJyZWFrOworCisJY2FzZSAnMSc6CisJY2FzZSAnMic6CisJY2FzZSAnMyc6CisJY2FzZSAnNCc6CisJY2FzZSAnNSc6CisJY2FzZSAnNic6CisJY2FzZSAnNyc6CisJY2FzZSAnOCc6CisJICAgICh2b2lkKSBtdmFkZHN0cihTTEtfV09SSywgMCwgIlBsZWFzZSBlbnRlciB0aGUgbGFiZWwgdmFsdWU6ICIpOworCSAgICAqYnVmID0gMDsKKwkgICAgaWYgKChzID0gc2xrX2xhYmVsKGMgLSAnMCcpKSAhPSAwKSB7CisJCWNoYXIgKnRlbXAgPSBzdHJkdXAocyk7CisJCXNpemVfdCB1c2VkID0gc3RybGVuKHRlbXApOworCQlzaXplX3Qgd2FudCA9IFNMS0xFTjsKKwkJc2l6ZV90IHRlc3Q7CisjaWZuZGVmIHN0YXRlX3VudXNlZAorCQltYnN0YXRlX3Qgc3RhdGU7CisjZW5kaWYKKworCQlidWZbMF0gPSBMJ1wwJzsKKwkJd2hpbGUgKHdhbnQgPiAwICYmIHVzZWQgIT0gMCkgeworCQkgICAgY29uc3QgY2hhciAqYmFzZSA9IHM7CisJCSAgICByZXNldF9tYnl0ZXMoc3RhdGUpOworCQkgICAgdGVzdCA9IGNvdW50X21ieXRlcyhiYXNlLCAwLCAmc3RhdGUpOworCQkgICAgaWYgKHRlc3QgPT0gKHNpemVfdCkgLTEpIHsKKwkJCXRlbXBbLS11c2VkXSA9IDA7CisJCSAgICB9IGVsc2UgaWYgKHRlc3QgPiB3YW50KSB7CisJCQl0ZW1wWy0tdXNlZF0gPSAwOworCQkgICAgfSBlbHNlIHsKKwkJCXJlc2V0X21ieXRlcyhzdGF0ZSk7CisJCQl0cmFuc19tYnl0ZXMoYnVmLCBiYXNlLCB3YW50LCAmc3RhdGUpOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJZnJlZSh0ZW1wKTsKKwkgICAgfQorCSAgICB3R2V0X3dzdHJpbmcoc3Rkc2NyLCBidWYsIFNMS0xFTik7CisJICAgIHNsa193c2V0KChjIC0gJzAnKSwgYnVmLCBmbXQpOworCSAgICBzbGtfcmVmcmVzaCgpOworCSAgICBtb3ZlKFNMS19XT1JLLCAwKTsKKwkgICAgY2xydG9ib3QoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIGNhc2VfUVVJVDoKKwkgICAgZ290byBkb25lOworCisJY2FzZSAnRic6CisJICAgIGlmICh1c2VfY29sb3JzKSB7CisJCWZnID0gKHNob3J0KSAoKGZnICsgMSkgJSBDT0xPUlMpOworCQljYWxsX3Nsa19jb2xvcihmZywgYmcpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJ0InOgorCSAgICBpZiAodXNlX2NvbG9ycykgeworCQliZyA9IChzaG9ydCkgKChiZyArIDEpICUgQ09MT1JTKTsKKwkJY2FsbF9zbGtfY29sb3IoZmcsIGJnKTsKKwkgICAgfQorCSAgICBicmVhazsKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYgZGVmaW5lZChLRVlfUkVTSVpFKSAmJiBIQVZFX1dSRVNJWkUKKwljYXNlIEtFWV9SRVNJWkU6CisJICAgIHdub3V0cmVmcmVzaChzdGRzY3IpOworCSAgICBicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwl9CisgICAgfSB3aGlsZSAoIWlzUXVpdChjID0gR2V0Y2hhcigpKSk7CisKKyAgZG9uZToKKyAgICBzbGtfY2xlYXIoKTsKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorI2VuZGlmCisjZW5kaWYgLyogU0xLX0lOSVQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBBbHRlcm5hdGUgY2hhcmFjdGVyLXNldCBzdHVmZgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogKklOREVOVC1PRkYqICovCitzdGF0aWMgc3RydWN0IHsKKyAgICBjaHR5cGUgYXR0cjsKKyAgICBjb25zdCBjaGFyICpuYW1lOworfSBhdHRyc190b19jeWNsZVtdID0geworICAgIHsgQV9OT1JNQUwsCQkibm9ybWFsIiB9LAorICAgIHsgQV9CT0xELAkJImJvbGQiIH0sCisgICAgeyBBX1JFVkVSU0UsCSJyZXZlcnNlIiB9LAorICAgIHsgQV9VTkRFUkxJTkUsCSJ1bmRlcmxpbmUiIH0sCit9OworLyogKklOREVOVC1PTiogKi8KKworc3RhdGljIGJvb2wKK2N5Y2xlX2F0dHIoaW50IGNoLCB1bnNpZ25lZCAqYXRfY29kZSwgY2h0eXBlICphdHRyKQoreworICAgIGJvb2wgcmVzdWx0ID0gVFJVRTsKKworICAgIHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlICd2JzoKKwlpZiAoKCphdF9jb2RlICs9IDEpID49IFNJWkVPRihhdHRyc190b19jeWNsZSkpCisJICAgICphdF9jb2RlID0gMDsKKwlicmVhazsKKyAgICBjYXNlICdWJzoKKwlpZiAoKmF0X2NvZGUgPT0gMSkKKwkgICAgKmF0X2NvZGUgPSBTSVpFT0YoYXR0cnNfdG9fY3ljbGUpIC0gMTsKKwllbHNlCisJICAgICphdF9jb2RlIC09IDE7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlyZXN1bHQgPSBGQUxTRTsKKwlicmVhazsKKyAgICB9CisgICAgaWYgKHJlc3VsdCkKKwkqYXR0ciA9IGF0dHJzX3RvX2N5Y2xlWyphdF9jb2RlXS5hdHRyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sCitjeWNsZV9jb2xvcnMoaW50IGNoLCBpbnQgKmZnLCBpbnQgKmJnLCBzaG9ydCAqcGFpcikKK3sKKyAgICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwlyZXN1bHQgPSBUUlVFOworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdGJzoKKwkgICAgaWYgKCgqZmcgLT0gMSkgPCAwKQorCQkqZmcgPSBDT0xPUlMgLSAxOworCSAgICBicmVhazsKKwljYXNlICdmJzoKKwkgICAgaWYgKCgqZmcgKz0gMSkgPj0gQ09MT1JTKQorCQkqZmcgPSAwOworCSAgICBicmVhazsKKwljYXNlICdCJzoKKwkgICAgaWYgKCgqYmcgLT0gMSkgPCAwKQorCQkqYmcgPSBDT0xPUlMgLSAxOworCSAgICBicmVhazsKKwljYXNlICdiJzoKKwkgICAgaWYgKCgqYmcgKz0gMSkgPj0gQ09MT1JTKQorCQkqYmcgPSAwOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICByZXN1bHQgPSBGQUxTRTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChyZXN1bHQpIHsKKwkgICAgKnBhaXIgPSAoc2hvcnQpICgqZmcgIT0gQ09MT1JfQkxBQ0sgfHwgKmJnICE9IENPTE9SX0JMQUNLKTsKKwkgICAgaWYgKCpwYWlyICE9IDApIHsKKwkJKnBhaXIgPSAxOworCQlpZiAoaW5pdF9wYWlyKCpwYWlyLCAoc2hvcnQpICpmZywgKHNob3J0KSAqYmcpID09IEVSUikgeworCQkgICAgcmVzdWx0ID0gRkFMU0U7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogSVNPIDY0Mjk6ICBjb2RlcyAweDgwIHRvIDB4OWYgbWF5IGJlIGNvbnRyb2wgY2hhcmFjdGVycyB0aGF0IGNhdXNlIHRoZQorICogdGVybWluYWwgdG8gcGVyZm9ybSBmdW5jdGlvbnMuICBUaGUgcmVtYWluaW5nIGNvZGVzIGNhbiBiZSBncmFwaGljLgorICovCitzdGF0aWMgdm9pZAorc2hvd191cHBlcl9jaGFycyh1bnNpZ25lZCBmaXJzdCwgaW50IHJlcGVhdCwgYXR0cl90IGF0dHIsIHNob3J0IHBhaXIpCit7CisgICAgYm9vbCBDMSA9IChmaXJzdCA9PSAxMjgpOworICAgIHVuc2lnbmVkIGNvZGU7CisgICAgdW5zaWduZWQgbGFzdCA9IGZpcnN0ICsgMzE7CisgICAgaW50IHJlcGx5OworCisgICAgZXJhc2UoKTsKKyAgICBhdHRyb24oQV9CT0xEKTsKKyAgICBtdnByaW50dygwLCAyMCwgIkRpc3BsYXkgb2YgJXMgQ2hhcmFjdGVyIENvZGVzICVkIHRvICVkIiwKKwkgICAgIEMxID8gIkMxIiA6ICJHUiIsIGZpcnN0LCBsYXN0KTsKKyAgICBhdHRyb2ZmKEFfQk9MRCk7CisgICAgcmVmcmVzaCgpOworCisgICAgZm9yIChjb2RlID0gZmlyc3Q7IGNvZGUgPD0gbGFzdDsgY29kZSsrKSB7CisJaW50IGNvdW50ID0gcmVwZWF0OworCWludCByb3cgPSAyICsgKChpbnQpIChjb2RlIC0gZmlyc3QpICUgMTYpOworCWludCBjb2wgPSAoKGludCkgKGNvZGUgLSBmaXJzdCkgLyAxNikgKiBDT0xTIC8gMjsKKwljaGFyIHRtcFs4MF07CisJc3ByaW50Zih0bXAsICIlM3UgKDB4JXgpIiwgY29kZSwgY29kZSk7CisJbXZwcmludHcocm93LCBjb2wsICIlKnM6ICIsIENPTFMgLyA0LCB0bXApOworCisJZG8geworCSAgICBpZiAoQzEpCisJCW5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKwkgICAgZWNob2NoYXIoY29kZSB8IGF0dHIgfCBDT0xPUl9QQUlSKHBhaXIpKTsKKwkgICAgaWYgKEMxKSB7CisJCS8qICh5ZXMsIHRoaXMgX2lzXyBjcnVkZSkgKi8KKwkJd2hpbGUgKChyZXBseSA9IEdldGNoYXIoKSkgIT0gRVJSKSB7CisJCSAgICBhZGRjaChVQ2hhcihyZXBseSkpOworCQkgICAgbmFwbXMoMTApOworCQl9CisJCW5vZGVsYXkoc3Rkc2NyLCBGQUxTRSk7CisJICAgIH0KKwl9IHdoaWxlICgtLWNvdW50ID4gMCk7CisgICAgfQorfQorCisjZGVmaW5lIFBDX0NPTFMgNAorCitzdGF0aWMgdm9pZAorc2hvd19wY19jaGFycyhpbnQgcmVwZWF0LCBhdHRyX3QgYXR0ciwgc2hvcnQgcGFpcikKK3sKKyAgICB1bnNpZ25lZCBjb2RlOworCisgICAgZXJhc2UoKTsKKyAgICBhdHRyb24oQV9CT0xEKTsKKyAgICBtdnByaW50dygwLCAyMCwgIkRpc3BsYXkgb2YgUEMgQ2hhcmFjdGVyIENvZGVzIik7CisgICAgYXR0cm9mZihBX0JPTEQpOworICAgIHJlZnJlc2goKTsKKworICAgIGZvciAoY29kZSA9IDA7IGNvZGUgPCAxNjsgKytjb2RlKSB7CisJbXZwcmludHcoMiwgKGludCkgY29kZSAqIFBDX0NPTFMgKyA4LCAiJVgiLCBjb2RlKTsKKyAgICB9CisgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IDI1NjsgY29kZSsrKSB7CisJaW50IGNvdW50ID0gcmVwZWF0OworCWludCByb3cgPSAzICsgKGludCkgKGNvZGUgLyAxNikgKyAoY29kZSA+PSAxMjgpOworCWludCBjb2wgPSA4ICsgKGludCkgKGNvZGUgJSAxNikgKiBQQ19DT0xTOworCWlmICgoY29kZSAlIDE2KSA9PSAwKQorCSAgICBtdnByaW50dyhyb3csIDAsICIweCUwMng6IiwgY29kZSk7CisJbW92ZShyb3csIGNvbCk7CisJZG8geworCSAgICBzd2l0Y2ggKGNvZGUpIHsKKwkgICAgY2FzZSAnXG4nOgorCSAgICBjYXNlICdccic6CisJICAgIGNhc2UgJ1xiJzoKKwkgICAgY2FzZSAnXGYnOgorCSAgICBjYXNlICdcMDMzJzoKKwkgICAgY2FzZSAweDliOgorCQkvKgorCQkgKiBTa2lwIHRoZSBvbmVzIHRoYXQgZG8gbm90IHdvcmsuCisJCSAqLworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYWRkY2goY29kZSB8IEFfQUxUQ0hBUlNFVCB8IGF0dHIgfCBDT0xPUl9QQUlSKHBhaXIpKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9IHdoaWxlICgtLWNvdW50ID4gMCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorc2hvd19ib3hfY2hhcnMoaW50IHJlcGVhdCwgYXR0cl90IGF0dHIsIHNob3J0IHBhaXIpCit7CisgICAgKHZvaWQpIHJlcGVhdDsKKyAgICBhdHRyIHw9IENPTE9SX1BBSVIocGFpcik7CisKKyAgICBlcmFzZSgpOworICAgIGF0dHJvbihBX0JPTEQpOworICAgIG12YWRkc3RyKDAsIDIwLCAiRGlzcGxheSBvZiB0aGUgQUNTIExpbmUtRHJhd2luZyBTZXQiKTsKKyAgICBhdHRyb2ZmKEFfQk9MRCk7CisgICAgcmVmcmVzaCgpOworICAgIGJveChzdGRzY3IsIDAsIDApOworICAgIC8qICpJTkRFTlQtT0ZGKiAqLworICAgIG12aGxpbmUoTElORVMgLyAyLCAwLCAgICAgICAgQUNTX0hMSU5FIHwgYXR0ciwgQ09MUyk7CisgICAgbXZ2bGluZSgwLCAgICAgICAgIENPTFMgLyAyLCBBQ1NfVkxJTkUgfCBhdHRyLCBMSU5FUyk7CisgICAgbXZhZGRjaCgwLCAgICAgICAgIENPTFMgLyAyLCBBQ1NfVFRFRSB8IGF0dHIpOworICAgIG12YWRkY2goTElORVMgLyAyLCBDT0xTIC8gMiwgQUNTX1BMVVMgfCBhdHRyKTsKKyAgICBtdmFkZGNoKExJTkVTIC0gMSwgQ09MUyAvIDIsIEFDU19CVEVFIHwgYXR0cik7CisgICAgbXZhZGRjaChMSU5FUyAvIDIsIDAsICAgICAgICBBQ1NfTFRFRSB8IGF0dHIpOworICAgIG12YWRkY2goTElORVMgLyAyLCBDT0xTIC0gMSwgQUNTX1JURUUgfCBhdHRyKTsKKyAgICAvKiAqSU5ERU5ULU9OKiAqLworCit9CisKK3N0YXRpYyBpbnQKK3Nob3dfMV9hY3MoaW50IG4sIGludCByZXBlYXQsIGNvbnN0IGNoYXIgKm5hbWUsIGNodHlwZSBjb2RlKQoreworICAgIGNvbnN0IGludCBoZWlnaHQgPSAxNjsKKyAgICBpbnQgcm93ID0gMiArIChuICUgaGVpZ2h0KTsKKyAgICBpbnQgY29sID0gKG4gLyBoZWlnaHQpICogQ09MUyAvIDI7CisKKyAgICBtdnByaW50dyhyb3csIGNvbCwgIiUqcyA6ICIsIENPTFMgLyA0LCBuYW1lKTsKKyAgICBkbyB7CisJYWRkY2goY29kZSk7CisgICAgfSB3aGlsZSAoLS1yZXBlYXQgPiAwKTsKKyAgICByZXR1cm4gbiArIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2Fjc19jaGFycyhpbnQgcmVwZWF0LCBhdHRyX3QgYXR0ciwgc2hvcnQgcGFpcikKKy8qIGRpc3BsYXkgdGhlIEFDUyBjaGFyYWN0ZXIgc2V0ICovCit7CisgICAgaW50IG47CisKKyNkZWZpbmUgQk9USChuYW1lKSAjbmFtZSwgKG5hbWUgfCBhdHRyIHwgQ09MT1JfUEFJUihwYWlyKSkKKworICAgIGVyYXNlKCk7CisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgbXZhZGRzdHIoMCwgMjAsICJEaXNwbGF5IG9mIHRoZSBBQ1MgQ2hhcmFjdGVyIFNldCIpOworICAgIGF0dHJvZmYoQV9CT0xEKTsKKyAgICByZWZyZXNoKCk7CisKKyAgICBuID0gc2hvd18xX2FjcygwLCByZXBlYXQsIEJPVEgoQUNTX1VMQ09STkVSKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19VUkNPUk5FUikpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfTExDT1JORVIpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0xSQ09STkVSKSk7CisKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0xURUUpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1JURUUpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1RURUUpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0JURUUpKTsKKworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfSExJTkUpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1ZMSU5FKSk7CisKKyAgICAvKgorICAgICAqIEhQVVgncyBBQ1MgZGVmaW5pdGlvbnMgYXJlIGJyb2tlbiBoZXJlLiAgSnVzdCBnaXZlIHVwLgorICAgICAqLworI2lmICEoZGVmaW5lZChfX2hwdXgpICYmICFkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikpCisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19MQVJST1cpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1JBUlJPVykpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfVUFSUk9XKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19EQVJST1cpKTsKKworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfQkxPQ0spKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0JPQVJEKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19MQU5URVJOKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19CVUxMRVQpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0NLQk9BUkQpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX0RFR1JFRSkpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfRElBTU9ORCkpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfUExNSU5VUykpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfUExVUykpOworCisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19HRVFVQUwpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX05FUVVBTCkpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfTEVRVUFMKSk7CisKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1NURVJMSU5HKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19QSSkpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfUzEpKTsKKyAgICBuID0gc2hvd18xX2FjcyhuLCByZXBlYXQsIEJPVEgoQUNTX1MzKSk7CisgICAgbiA9IHNob3dfMV9hY3MobiwgcmVwZWF0LCBCT1RIKEFDU19TNykpOworICAgIG4gPSBzaG93XzFfYWNzKG4sIHJlcGVhdCwgQk9USChBQ1NfUzkpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorYWNzX2Rpc3BsYXkodm9pZCkKK3sKKyAgICBpbnQgYyA9ICdhJzsKKyAgICBjaGFyICp0ZXJtID0gZ2V0ZW52KCJURVJNIik7CisgICAgY29uc3QgY2hhciAqcGNoX2tsdWRnZSA9ICgodGVybSAhPSAwICYmIHN0cnN0cih0ZXJtLCAibGludXgiKSkKKwkJCSAgICAgID8gInA9UEMsICIKKwkJCSAgICAgIDogIiIpOworICAgIGNodHlwZSBhdHRyID0gQV9OT1JNQUw7CisgICAgaW50IGRpZ2l0ID0gMDsKKyAgICBpbnQgcmVwZWF0ID0gMTsKKyAgICBpbnQgZmcgPSBDT0xPUl9CTEFDSzsKKyAgICBpbnQgYmcgPSBDT0xPUl9CTEFDSzsKKyAgICB1bnNpZ25lZCBhdF9jb2RlID0gMDsKKyAgICBzaG9ydCBwYWlyID0gMDsKKyAgICB2b2lkICgqbGFzdF9zaG93X2FjcykgKGludCwgYXR0cl90LCBzaG9ydCkgPSAwOworCisgICAgZG8geworCXN3aXRjaCAoYykgeworCWNhc2UgQ1RSTCgnTCcpOgorCSAgICBSZXBhaW50KCk7CisJICAgIGJyZWFrOworCWNhc2UgJ2EnOgorCSAgICBUb2dnbGVBY3MobGFzdF9zaG93X2Fjcywgc2hvd19hY3NfY2hhcnMpOworCSAgICBicmVhazsKKwljYXNlICdwJzoKKwkgICAgaWYgKCpwY2hfa2x1ZGdlKQorCQlUb2dnbGVBY3MobGFzdF9zaG93X2Fjcywgc2hvd19wY19jaGFycyk7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlICd4JzoKKwkgICAgVG9nZ2xlQWNzKGxhc3Rfc2hvd19hY3MsIHNob3dfYm94X2NoYXJzKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnMCc6CisJY2FzZSAnMSc6CisJY2FzZSAnMic6CisJY2FzZSAnMyc6CisJICAgIGRpZ2l0ID0gKGMgLSAnMCcpOworCSAgICBsYXN0X3Nob3dfYWNzID0gMDsKKwkgICAgYnJlYWs7CisJY2FzZSAnLSc6CisJICAgIGlmIChkaWdpdCA+IDApIHsKKwkJLS1kaWdpdDsKKwkJbGFzdF9zaG93X2FjcyA9IDA7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICcrJzoKKwkgICAgaWYgKGRpZ2l0IDwgMykgeworCQkrK2RpZ2l0OworCQlsYXN0X3Nob3dfYWNzID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJz4nOgorCSAgICBpZiAocmVwZWF0IDwgKENPTFMgLyA0KSkKKwkJKytyZXBlYXQ7CisJICAgIGJyZWFrOworCWNhc2UgJzwnOgorCSAgICBpZiAocmVwZWF0ID4gMSkKKwkJLS1yZXBlYXQ7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGlmIChjeWNsZV9hdHRyKGMsICZhdF9jb2RlLCAmYXR0cikKKwkJfHwgY3ljbGVfY29sb3JzKGMsICZmZywgJmJnLCAmcGFpcikpIHsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJaWYgKGxhc3Rfc2hvd19hY3MgIT0gMCkKKwkgICAgbGFzdF9zaG93X2FjcyhyZXBlYXQsIGF0dHIsIHBhaXIpOworCWVsc2UKKwkgICAgc2hvd191cHBlcl9jaGFycygodW5zaWduZWQpIChkaWdpdCAqIDMyICsgMTI4KSwgcmVwZWF0LCBhdHRyLCBwYWlyKTsKKworCW12cHJpbnR3KExJTkVTIC0gMywgMCwKKwkJICJOb3RlOiBBTlNJIHRlcm1pbmFscyBtYXkgbm90IGRpc3BsYXkgQzEgY2hhcmFjdGVycy4iKTsKKwltdnByaW50dyhMSU5FUyAtIDIsIDAsCisJCSAiU2VsZWN0OiBhPUFDUywgeD1ib3gsICVzMD1DMSwgMS0zLCsvLSBub24tQVNDSUksIDwvPiByZXBlYXQsIEVTQz1xdWl0IiwKKwkJIHBjaF9rbHVkZ2UpOworCWlmICh1c2VfY29sb3JzKSB7CisJICAgIG12cHJpbnR3KExJTkVTIC0gMSwgMCwKKwkJICAgICAidi9WLCBmL0YsIGIvQiBjeWNsZSB0aHJvdWdoIHZpZGVvIGF0dHJpYnV0ZXMgKCVzKSBhbmQgY29sb3IgJWQvJWQuIiwKKwkJICAgICBhdHRyc190b19jeWNsZVthdF9jb2RlXS5uYW1lLAorCQkgICAgIGZnLCBiZyk7CisJfSBlbHNlIHsKKwkgICAgbXZwcmludHcoTElORVMgLSAxLCAwLAorCQkgICAgICJ2L1YgY3ljbGVzIHRocm91Z2ggdmlkZW8gYXR0cmlidXRlcyAoJXMpLiIsCisJCSAgICAgYXR0cnNfdG9fY3ljbGVbYXRfY29kZV0ubmFtZSk7CisJfQorCXJlZnJlc2goKTsKKyAgICB9IHdoaWxlICghaXNRdWl0KGMgPSBHZXRjaGFyKCkpKTsKKworICAgIFBhdXNlKCk7CisgICAgZXJhc2UoKTsKKyAgICBlbmR3aW4oKTsKK30KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCitzdGF0aWMgY2NoYXJfdCAqCittZXJnZV93aWRlX2F0dHIoY2NoYXJfdCAqZHN0LCBjb25zdCBjY2hhcl90ICpzcmMsIGF0dHJfdCBhdHRyLCBzaG9ydCBwYWlyKQoreworICAgIGludCBjb3VudCA9IGdldGNjaGFyKHNyYywgTlVMTCwgTlVMTCwgTlVMTCwgMCk7CisgICAgd2NoYXJfdCAqd2NoID0gMDsKKyAgICBhdHRyX3QgaWdub3JlX2F0dHI7CisgICAgc2hvcnQgaWdub3JlX3BhaXI7CisKKyAgICAqZHN0ID0gKnNyYzsKKyAgICBpZiAoY291bnQgPiAwKSB7CisJaWYgKCh3Y2ggPSB0eXBlTWFsbG9jKHdjaGFyX3QsICh1bnNpZ25lZCkgY291bnQgKyAxKSkgIT0gMCkgeworCSAgICBpZiAoZ2V0Y2NoYXIoc3JjLCB3Y2gsICZpZ25vcmVfYXR0ciwgJmlnbm9yZV9wYWlyLCAwKSAhPSBFUlIpIHsKKwkJYXR0ciB8PSAoaWdub3JlX2F0dHIgJiBBX0FMVENIQVJTRVQpOworCQlzZXRjY2hhcihkc3QsIHdjaCwgYXR0ciwgcGFpciwgMCk7CisJICAgIH0KKwkgICAgZnJlZSh3Y2gpOworCX0KKyAgICB9CisgICAgcmV0dXJuIGRzdDsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfdXBwZXJfd2lkZWNoYXJzKGludCBmaXJzdCwgaW50IHJlcGVhdCwgaW50IHNwYWNlLCBhdHRyX3QgYXR0ciwgc2hvcnQgcGFpcikKK3sKKyAgICBjY2hhcl90IHRlbXA7CisgICAgd2NoYXJfdCBjb2RlOworICAgIGludCBsYXN0ID0gZmlyc3QgKyAzMTsKKworICAgIGVyYXNlKCk7CisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgbXZwcmludHcoMCwgMjAsICJEaXNwbGF5IG9mIENoYXJhY3RlciBDb2RlcyAlZCB0byAlZCIsIGZpcnN0LCBsYXN0KTsKKyAgICBhdHRyb2ZmKEFfQk9MRCk7CisKKyAgICBmb3IgKGNvZGUgPSBmaXJzdDsgKGludCkgY29kZSA8PSBsYXN0OyBjb2RlKyspIHsKKwlpbnQgcm93ID0gMiArICgoY29kZSAtIGZpcnN0KSAlIDE2KTsKKwlpbnQgY29sID0gKChjb2RlIC0gZmlyc3QpIC8gMTYpICogQ09MUyAvIDI7CisJd2NoYXJfdCBjb2Rlc1sxMF07CisJY2hhciB0bXBbODBdOworCWludCBjb3VudCA9IHJlcGVhdDsKKwlpbnQgeSwgeDsKKworCW1lbXNldCgmY29kZXMsIDAsIHNpemVvZihjb2RlcykpOworCWNvZGVzWzBdID0gY29kZTsKKwlzcHJpbnRmKHRtcCwgIiUzbGQgKDB4JWx4KSIsIChsb25nKSBjb2RlLCAobG9uZykgY29kZSk7CisJbXZwcmludHcocm93LCBjb2wsICIlKnM6ICIsIENPTFMgLyA0LCB0bXApOworCXNldGNjaGFyKCZ0ZW1wLCBjb2RlcywgYXR0ciwgcGFpciwgMCk7CisJZG8geworCSAgICAvKgorCSAgICAgKiBHaXZlIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMgc29tZXRoaW5nIHRvIGNvbWJpbmUgd2l0aC4gIElmIHdlCisJICAgICAqIGRvbid0LCB0aGV5J2xsIGJ1bmNoIHVwIGluIGEgaGVhcCBvbiB0aGUgc3BhY2UgYWZ0ZXIgdGhlICI6Ii4KKwkgICAgICogTWFyayB0aGVtIHdpdGggcmV2ZXJzZS12aWRlbyB0byBtYWtlIHRoZW0gc2ltcGxlciB0byBmaW5kIG9uCisJICAgICAqIHRoZSBkaXNwbGF5LgorCSAgICAgKi8KKwkgICAgaWYgKHdjd2lkdGgoY29kZSkgPT0gMCkKKwkJYWRkY2goc3BhY2UgfCBBX1JFVkVSU0UpOworCSAgICAvKgorCSAgICAgKiBUaGlzIGNvdWxkIHVzZSBhZGRfd2NoKCksIGJ1dCBpcyBkb25lIGZvciBjb21wYXJpc29uIHdpdGggdGhlCisJICAgICAqIG5vcm1hbCAnZicgdGVzdCAoYW5kIHRvIG1ha2UgYSB0ZXN0LWNhc2UgZm9yIGVjaG9fd2NoYXIoKSkuCisJICAgICAqIFRoZSBzY3JlZW4gd2lsbCBmbGlja2VyIGJlY2F1c2UgdGhlIGVyYXNlKCkgYXQgdGhlIHRvcCBvZiB0aGUKKwkgICAgICogZnVuY3Rpb24gaXMgbWV0IGJ5IHRoZSBidWlsdGluIHJlZnJlc2goKSBpbiBlY2hvX3djaGFyKCkuCisJICAgICAqLworCSAgICBlY2hvX3djaGFyKCZ0ZW1wKTsKKwkgICAgLyoKKwkgICAgICogVGhlIHJlcGVhdC1jb3VudCBtYXkgbWFrZSB0ZXh0IHdyYXAgLSBhdm9pZCB0aGF0LgorCSAgICAgKi8KKwkgICAgZ2V0eXgoc3Rkc2NyLCB5LCB4KTsKKwkgICAgaWYgKHggPj0gY29sICsgKENPTFMgLyAyKSAtIDIpCisJCWJyZWFrOworCX0gd2hpbGUgKC0tY291bnQgPiAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK3Nob3dfMV93YWNzKGludCBuLCBpbnQgcmVwZWF0LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjY2hhcl90ICpjb2RlKQoreworICAgIGNvbnN0IGludCBoZWlnaHQgPSAxNjsKKyAgICBpbnQgcm93ID0gMiArIChuICUgaGVpZ2h0KTsKKyAgICBpbnQgY29sID0gKG4gLyBoZWlnaHQpICogQ09MUyAvIDI7CisKKyAgICBtdnByaW50dyhyb3csIGNvbCwgIiUqcyA6ICIsIENPTFMgLyA0LCBuYW1lKTsKKyAgICB3aGlsZSAocmVwZWF0LS0gPj0gMCkgeworCWFkZF93Y2goY29kZSk7CisgICAgfQorICAgIHJldHVybiBuICsgMTsKK30KKworI2RlZmluZSBNRVJHRV9BVFRSKHdjaCkgbWVyZ2Vfd2lkZV9hdHRyKCZ0ZW1wLCB3Y2gsIGF0dHIsIHBhaXIpCisKK3N0YXRpYyB2b2lkCitzaG93X3dhY3NfY2hhcnMoaW50IHJlcGVhdCwgYXR0cl90IGF0dHIsIHNob3J0IHBhaXIpCisvKiBkaXNwbGF5IHRoZSB3aWRlLUFDUyBjaGFyYWN0ZXIgc2V0ICovCit7CisgICAgY2NoYXJfdCB0ZW1wOworCisgICAgaW50IG47CisKKy8qI2RlZmluZSBCT1RIMihuYW1lKSAjbmFtZSwgJihuYW1lKSAqLworI2RlZmluZSBCT1RIMihuYW1lKSAjbmFtZSwgTUVSR0VfQVRUUihuYW1lKQorCisgICAgZXJhc2UoKTsKKyAgICBhdHRyb24oQV9CT0xEKTsKKyAgICBtdmFkZHN0cigwLCAyMCwgIkRpc3BsYXkgb2YgdGhlIFdpZGUtQUNTIENoYXJhY3RlciBTZXQiKTsKKyAgICBhdHRyb2ZmKEFfQk9MRCk7CisgICAgcmVmcmVzaCgpOworCisgICAgbiA9IHNob3dfMV93YWNzKDAsIHJlcGVhdCwgQk9USDIoV0FDU19VTENPUk5FUikpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfVVJDT1JORVIpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0xMQ09STkVSKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19MUkNPUk5FUikpOworCisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19MVEVFKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19SVEVFKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19UVEVFKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19CVEVFKSk7CisKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0hMSU5FKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19WTElORSkpOworCisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19MQVJST1cpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1JBUlJPVykpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfVUFSUk9XKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19EQVJST1cpKTsKKworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfQkxPQ0spKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0JPQVJEKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19MQU5URVJOKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19CVUxMRVQpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0NLQk9BUkQpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0RFR1JFRSkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfRElBTU9ORCkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfUExNSU5VUykpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfUExVUykpOworCisjaWZkZWYgQ1VSU0VTX1dBQ1NfQVJSQVkKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX0dFUVVBTCkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfTkVRVUFMKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19MRVFVQUwpKTsKKworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfU1RFUkxJTkcpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1BJKSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19TMSkpOworICAgIG4gPSBzaG93XzFfd2FjcyhuLCByZXBlYXQsIEJPVEgyKFdBQ1NfUzMpKTsKKyAgICBuID0gc2hvd18xX3dhY3MobiwgcmVwZWF0LCBCT1RIMihXQUNTX1M3KSk7CisgICAgbiA9IHNob3dfMV93YWNzKG4sIHJlcGVhdCwgQk9USDIoV0FDU19TOSkpOworI2VuZGlmCit9CisKKyN1bmRlZiBNRVJHRV9BVFRSCisKKyNkZWZpbmUgTUVSR0VfQVRUUih3Y2gpIG1lcmdlX3dpZGVfYXR0cigmdGVtcCwgd2NoLCBhdHRyLCBwYWlyKQorCitzdGF0aWMgdm9pZAorc2hvd193Ym94X2NoYXJzKGludCByZXBlYXQsIGF0dHJfdCBhdHRyLCBzaG9ydCBwYWlyKQoreworICAgIGNjaGFyX3QgdGVtcDsKKworICAgICh2b2lkKSByZXBlYXQ7CisgICAgZXJhc2UoKTsKKyAgICBhdHRyb24oQV9CT0xEKTsKKyAgICBtdmFkZHN0cigwLCAyMCwgIkRpc3BsYXkgb2YgdGhlIFdpZGUtQUNTIExpbmUtRHJhd2luZyBTZXQiKTsKKyAgICBhdHRyb2ZmKEFfQk9MRCk7CisgICAgcmVmcmVzaCgpOworCisgICAgYXR0cl9zZXQoYXR0ciwgcGFpciwgMCk7CisgICAgYm94X3NldChzdGRzY3IsIDAsIDApOworICAgIGF0dHJfc2V0KEFfTk9STUFMLCAwLCAwKTsKKyAgICAvKiAqSU5ERU5ULU9GRiogKi8KKyAgICBtdmhsaW5lX3NldChMSU5FUyAvIDIsIDAsICAgICAgICBNRVJHRV9BVFRSKFdBQ1NfSExJTkUpLCBDT0xTKTsKKyAgICBtdnZsaW5lX3NldCgwLCAgICAgICAgIENPTFMgLyAyLCBNRVJHRV9BVFRSKFdBQ1NfVkxJTkUpLCBMSU5FUyk7CisgICAgbXZhZGRfd2NoKDAsICAgICAgICAgICBDT0xTIC8gMiwgTUVSR0VfQVRUUihXQUNTX1RURUUpKTsKKyAgICBtdmFkZF93Y2goTElORVMgLyAyLCAgIENPTFMgLyAyLCBNRVJHRV9BVFRSKFdBQ1NfUExVUykpOworICAgIG12YWRkX3djaChMSU5FUyAtIDEsICAgQ09MUyAvIDIsIE1FUkdFX0FUVFIoV0FDU19CVEVFKSk7CisgICAgbXZhZGRfd2NoKExJTkVTIC8gMiwgICAwLCAgICAgICAgTUVSR0VfQVRUUihXQUNTX0xURUUpKTsKKyAgICBtdmFkZF93Y2goTElORVMgLyAyLCAgIENPTFMgLSAxLCBNRVJHRV9BVFRSKFdBQ1NfUlRFRSkpOworICAgIC8qICpJTkRFTlQtT04qICovCisKK30KKworI3VuZGVmIE1FUkdFX0FUVFIKKworc3RhdGljIGludAorc2hvd18yX3dhY3MoaW50IG4sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmNvZGUsIGF0dHJfdCBhdHRyLCBzaG9ydCBwYWlyKQoreworICAgIGNvbnN0IGludCBoZWlnaHQgPSAxNjsKKyAgICBpbnQgcm93ID0gMiArIChuICUgaGVpZ2h0KTsKKyAgICBpbnQgY29sID0gKG4gLyBoZWlnaHQpICogQ09MUyAvIDI7CisgICAgY2hhciB0ZW1wWzgwXTsKKworICAgIG12cHJpbnR3KHJvdywgY29sLCAiJSpzIDogIiwgQ09MUyAvIDQsIG5hbWUpOworICAgIGF0dHJfc2V0KGF0dHIsIHBhaXIsIDApOworICAgIGFkZHN0cihzdHJjcHkodGVtcCwgY29kZSkpOworICAgIGF0dHJfc2V0KEFfTk9STUFMLCAwLCAwKTsKKyAgICByZXR1cm4gbiArIDE7Cit9CisKKyNkZWZpbmUgU0hPV19VVEY4KG4sIG5hbWUsIGNvZGUpIHNob3dfMl93YWNzKG4sIG5hbWUsIGNvZGUsIGF0dHIsIHBhaXIpCisKK3N0YXRpYyB2b2lkCitzaG93X3V0ZjhfY2hhcnMoaW50IHJlcGVhdCwgYXR0cl90IGF0dHIsIHNob3J0IHBhaXIpCit7CisgICAgaW50IG47CisKKyAgICAodm9pZCkgcmVwZWF0OworICAgIGVyYXNlKCk7CisgICAgYXR0cm9uKEFfQk9MRCk7CisgICAgbXZhZGRzdHIoMCwgMjAsICJEaXNwbGF5IG9mIHRoZSBXaWRlLUFDUyBDaGFyYWN0ZXIgU2V0Iik7CisgICAgYXR0cm9mZihBX0JPTEQpOworICAgIHJlZnJlc2goKTsKKyAgICAvKiAqSU5ERU5ULU9GRiogKi8KKyAgICBuID0gU0hPV19VVEY4KDAsICJXQUNTX1VMQ09STkVSIiwJIlwzNDJcMjI0XDIxNCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfVVJDT1JORVIiLAkiXDM0MlwyMjRcMjIwIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19MTENPUk5FUiIsCSJcMzQyXDIyNFwyMjQiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX0xSQ09STkVSIiwJIlwzNDJcMjI0XDIzMCIpOworCisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19MVEVFIiwJIlwzNDJcMjI0XDIzNCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUlRFRSIsCSJcMzQyXDIyNFwyNDQiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1RURUUiLAkiXDM0MlwyMjRcMjU0Iik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19CVEVFIiwJIlwzNDJcMjI0XDI2NCIpOworCisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19ITElORSIsCSJcMzQyXDIyNFwyMDAiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1ZMSU5FIiwJIlwzNDJcMjI0XDIwMiIpOworCisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19MQVJST1ciLAkiXDM0MlwyMDZcMjIwIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19SQVJST1ciLAkiXDM0MlwyMDZcMjIyIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19VQVJST1ciLAkiXDM0MlwyMDZcMjIxIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19EQVJST1ciLAkiXDM0MlwyMDZcMjIzIik7CisKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX0JMT0NLIiwJIlwzNDJcMjI2XDI1NiIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfQk9BUkQiLAkiXDM0MlwyMjZcMjIyIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19MQU5URVJOIiwJIlwzNDJcMjMwXDIwMyIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfQlVMTEVUIiwJIlwzMDJcMjY3Iik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19DS0JPQVJEIiwJIlwzNDJcMjI2XDIyMiIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfREVHUkVFIiwJIlwzMDJcMjYwIik7CisgICAgbiA9IFNIT1dfVVRGOChuLCAiV0FDU19ESUFNT05EIiwJIlwzNDJcMjI3XDIwNiIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUExNSU5VUyIsCSJcMzAyXDI2MSIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUExVUyIsCSJcMzQyXDIyNFwyNzQiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX0dFUVVBTCIsCSJcMzQyXDIxMVwyNDUiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX05FUVVBTCIsCSJcMzQyXDIxMVwyNDAiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX0xFUVVBTCIsCSJcMzQyXDIxMVwyNDQiKTsKKworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfU1RFUkxJTkciLAkiXDMwMlwyNDMiKTsKKyAgICBuID0gU0hPV19VVEY4KG4sICJXQUNTX1BJIiwJCSJcMzE3XDIwMCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUzEiLAkJIlwzNDJcMjE2XDI3MiIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUzMiLAkJIlwzNDJcMjE2XDI3MyIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUzciLAkJIlwzNDJcMjE2XDI3NCIpOworICAgIG4gPSBTSE9XX1VURjgobiwgIldBQ1NfUzkiLAkJIlwzNDJcMjE2XDI3NSIpOworICAgIC8qICpJTkRFTlQtT04qICovCisKK30KKworLyogZGlzcGxheSB0aGUgd2lkZS1BQ1MgY2hhcmFjdGVyIHNldCAqLworc3RhdGljIHZvaWQKK3dpZGVfYWNzX2Rpc3BsYXkodm9pZCkKK3sKKyAgICBpbnQgYyA9ICdhJzsKKyAgICBpbnQgZGlnaXQgPSAwOworICAgIGludCByZXBlYXQgPSAxOworICAgIGludCBzcGFjZSA9ICcgJzsKKyAgICBjaHR5cGUgYXR0ciA9IEFfTk9STUFMOworICAgIGludCBmZyA9IENPTE9SX0JMQUNLOworICAgIGludCBiZyA9IENPTE9SX0JMQUNLOworICAgIHVuc2lnbmVkIGF0X2NvZGUgPSAwOworICAgIHNob3J0IHBhaXIgPSAwOworICAgIHZvaWQgKCpsYXN0X3Nob3dfd2FjcykgKGludCwgYXR0cl90LCBzaG9ydCkgPSAwOworCisgICAgZG8geworCXN3aXRjaCAoYykgeworCWNhc2UgQ1RSTCgnTCcpOgorCSAgICBSZXBhaW50KCk7CisJICAgIGJyZWFrOworCWNhc2UgJ2EnOgorCSAgICBUb2dnbGVBY3MobGFzdF9zaG93X3dhY3MsIHNob3dfd2Fjc19jaGFycyk7CisJICAgIGJyZWFrOworCWNhc2UgJ3gnOgorCSAgICBUb2dnbGVBY3MobGFzdF9zaG93X3dhY3MsIHNob3dfd2JveF9jaGFycyk7CisJICAgIGJyZWFrOworCWNhc2UgJ3UnOgorCSAgICBUb2dnbGVBY3MobGFzdF9zaG93X3dhY3MsIHNob3dfdXRmOF9jaGFycyk7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGlmIChjIDwgMjU2ICYmIGlzZGlnaXQoYykpIHsKKwkJZGlnaXQgPSAoYyAtICcwJyk7CisJCWxhc3Rfc2hvd193YWNzID0gMDsKKwkgICAgfSBlbHNlIGlmIChjID09ICcrJykgeworCQkrK2RpZ2l0OworCQlsYXN0X3Nob3dfd2FjcyA9IDA7CisJICAgIH0gZWxzZSBpZiAoYyA9PSAnLScgJiYgZGlnaXQgPiAwKSB7CisJCS0tZGlnaXQ7CisJCWxhc3Rfc2hvd193YWNzID0gMDsKKwkgICAgfSBlbHNlIGlmIChjID09ICc+JyAmJiByZXBlYXQgPCAoQ09MUyAvIDQpKSB7CisJCSsrcmVwZWF0OworCSAgICB9IGVsc2UgaWYgKGMgPT0gJzwnICYmIHJlcGVhdCA+IDEpIHsKKwkJLS1yZXBlYXQ7CisJICAgIH0gZWxzZSBpZiAoYyA9PSAnXycpIHsKKwkJc3BhY2UgPSAoc3BhY2UgPT0gJyAnKSA/ICdfJyA6ICcgJzsKKwkJbGFzdF9zaG93X3dhY3MgPSAwOworCSAgICB9IGVsc2UgaWYgKGN5Y2xlX2F0dHIoYywgJmF0X2NvZGUsICZhdHRyKQorCQkgICAgICAgfHwgY3ljbGVfY29sb3JzKGMsICZmZywgJmJnLCAmcGFpcikpIHsKKwkJaWYgKGxhc3Rfc2hvd193YWNzICE9IDApCisJCSAgICBicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJaWYgKGxhc3Rfc2hvd193YWNzICE9IDApCisJICAgIGxhc3Rfc2hvd193YWNzKHJlcGVhdCwgYXR0ciwgcGFpcik7CisJZWxzZQorCSAgICBzaG93X3VwcGVyX3dpZGVjaGFycyhkaWdpdCAqIDMyICsgMTI4LCByZXBlYXQsIHNwYWNlLCBhdHRyLCBwYWlyKTsKKworCW12cHJpbnR3KExJTkVTIC0gMywgMCwKKwkJICJTZWxlY3Q6IGEgV0FDUywgeCBib3gsIHUgVVRGLTgsIDAtOSwrLy0gbm9uLUFTQ0lJLCA8Lz4gcmVwZWF0LCBFU0M9cXVpdCIpOworCWlmICh1c2VfY29sb3JzKSB7CisJICAgIG12cHJpbnR3KExJTkVTIC0gMiwgMCwKKwkJICAgICAidi9WLCBmL0YsIGIvQiBjeWNsZSB0aHJvdWdoIHZpZGVvIGF0dHJpYnV0ZXMgKCVzKSBhbmQgY29sb3IgJWQvJWQuIiwKKwkJICAgICBhdHRyc190b19jeWNsZVthdF9jb2RlXS5uYW1lLAorCQkgICAgIGZnLCBiZyk7CisJfSBlbHNlIHsKKwkgICAgbXZwcmludHcoTElORVMgLSAyLCAwLAorCQkgICAgICJ2L1YgY3ljbGVzIHRocm91Z2ggdmlkZW8gYXR0cmlidXRlcyAoJXMpLiIsCisJCSAgICAgYXR0cnNfdG9fY3ljbGVbYXRfY29kZV0ubmFtZSk7CisJfQorCXJlZnJlc2goKTsKKyAgICB9IHdoaWxlICghaXNRdWl0KGMgPSBHZXRjaGFyKCkpKTsKKworICAgIFBhdXNlKCk7CisgICAgZXJhc2UoKTsKKyAgICBlbmR3aW4oKTsKK30KKworI2VuZGlmCisKKy8qCisgKiBHcmFwaGljLXJlbmRpdGlvbiB0ZXN0IChhZGFwdGVkIGZyb20gdnR0ZXN0KQorICovCitzdGF0aWMgdm9pZAordGVzdF9zZ3JfYXR0cmlidXRlcyh2b2lkKQoreworICAgIGludCBwYXNzOworCisgICAgZm9yIChwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgeworCWNodHlwZSBub3JtYWwgPSAoKHBhc3MgPT0gMCA/IEFfTk9STUFMIDogQV9SRVZFUlNFKSkgfCBCTEFOSzsKKworCS8qIFVzZSBub24tZGVmYXVsdCBjb2xvcnMgaWYgcG9zc2libGUgdG8gZXhlcmNpc2UgYmNlIGEgbGl0dGxlICovCisJaWYgKHVzZV9jb2xvcnMpIHsKKwkgICAgaW5pdF9wYWlyKDEsIENPTE9SX1dISVRFLCBDT0xPUl9CTFVFKTsKKwkgICAgbm9ybWFsIHw9IENPTE9SX1BBSVIoMSk7CisJfQorCWJrZ2RzZXQobm9ybWFsKTsKKwllcmFzZSgpOworCW12cHJpbnR3KDEsIDIwLCAiR3JhcGhpYyByZW5kaXRpb24gdGVzdCBwYXR0ZXJuOiIpOworCisJbXZwcmludHcoNCwgMSwgInZhbmlsbGEiKTsKKworI2RlZmluZSBzZXRfc2dyKG1hc2spIGJrZ2RzZXQoKG5vcm1hbF4obWFzaykpKTsKKwlzZXRfc2dyKEFfQk9MRCk7CisJbXZwcmludHcoNCwgNDAsICJib2xkIik7CisKKwlzZXRfc2dyKEFfVU5ERVJMSU5FKTsKKwltdnByaW50dyg2LCA2LCAidW5kZXJsaW5lIik7CisKKwlzZXRfc2dyKEFfQk9MRCB8IEFfVU5ERVJMSU5FKTsKKwltdnByaW50dyg2LCA0NSwgImJvbGQgdW5kZXJsaW5lIik7CisKKwlzZXRfc2dyKEFfQkxJTkspOworCW12cHJpbnR3KDgsIDEsICJibGluayIpOworCisJc2V0X3NncihBX0JMSU5LIHwgQV9CT0xEKTsKKwltdnByaW50dyg4LCA0MCwgImJvbGQgYmxpbmsiKTsKKworCXNldF9zZ3IoQV9VTkRFUkxJTkUgfCBBX0JMSU5LKTsKKwltdnByaW50dygxMCwgNiwgInVuZGVybGluZSBibGluayIpOworCisJc2V0X3NncihBX0JPTEQgfCBBX1VOREVSTElORSB8IEFfQkxJTkspOworCW12cHJpbnR3KDEwLCA0NSwgImJvbGQgdW5kZXJsaW5lIGJsaW5rIik7CisKKwlzZXRfc2dyKEFfUkVWRVJTRSk7CisJbXZwcmludHcoMTIsIDEsICJuZWdhdGl2ZSIpOworCisJc2V0X3NncihBX0JPTEQgfCBBX1JFVkVSU0UpOworCW12cHJpbnR3KDEyLCA0MCwgImJvbGQgbmVnYXRpdmUiKTsKKworCXNldF9zZ3IoQV9VTkRFUkxJTkUgfCBBX1JFVkVSU0UpOworCW12cHJpbnR3KDE0LCA2LCAidW5kZXJsaW5lIG5lZ2F0aXZlIik7CisKKwlzZXRfc2dyKEFfQk9MRCB8IEFfVU5ERVJMSU5FIHwgQV9SRVZFUlNFKTsKKwltdnByaW50dygxNCwgNDUsICJib2xkIHVuZGVybGluZSBuZWdhdGl2ZSIpOworCisJc2V0X3NncihBX0JMSU5LIHwgQV9SRVZFUlNFKTsKKwltdnByaW50dygxNiwgMSwgImJsaW5rIG5lZ2F0aXZlIik7CisKKwlzZXRfc2dyKEFfQk9MRCB8IEFfQkxJTksgfCBBX1JFVkVSU0UpOworCW12cHJpbnR3KDE2LCA0MCwgImJvbGQgYmxpbmsgbmVnYXRpdmUiKTsKKworCXNldF9zZ3IoQV9VTkRFUkxJTkUgfCBBX0JMSU5LIHwgQV9SRVZFUlNFKTsKKwltdnByaW50dygxOCwgNiwgInVuZGVybGluZSBibGluayBuZWdhdGl2ZSIpOworCisJc2V0X3NncihBX0JPTEQgfCBBX1VOREVSTElORSB8IEFfQkxJTksgfCBBX1JFVkVSU0UpOworCW12cHJpbnR3KDE4LCA0NSwgImJvbGQgdW5kZXJsaW5lIGJsaW5rIG5lZ2F0aXZlIik7CisKKwlia2dkc2V0KG5vcm1hbCk7CisJbXZwcmludHcoTElORVMgLSAyLCAxLCAiJXMgYmFja2dyb3VuZC4gIiwgcGFzcyA9PSAwID8gIkRhcmsiIDoKKwkJICJMaWdodCIpOworCWNscnRvZW9sKCk7CisJUGF1c2UoKTsKKyAgICB9CisKKyAgICBia2dkc2V0KEFfTk9STUFMIHwgQkxBTkspOworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogV2luZG93cyBhbmQgc2Nyb2xsaW5nIHRlc3Rlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBCT1RMSU5FUwk0CS8qIG51bWJlciBvZiBsaW5lIHN0b2xlbiBmcm9tIHNjcmVlbiBib3R0b20gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCB5LCB4OworfSBwYWlyOworCisjZGVmaW5lIEZSQU1FIHN0cnVjdCBmcmFtZQorRlJBTUUKK3sKKyAgICBGUkFNRSAqbmV4dCwgKmxhc3Q7CisgICAgYm9vbCBkb19zY3JvbGw7CisgICAgYm9vbCBkb19rZXlwYWQ7CisgICAgV0lORE9XICp3aW5kOworfTsKKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKQorI2lmIChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0ggPCAyMDA3MDMzMSkgJiYgTkNVUlNFU19FWFRfRlVOQ1MKKyNkZWZpbmUgaXNfa2V5cGFkKHdpbikgICAod2luKS0+X3VzZV9rZXlwYWQKKyNkZWZpbmUgaXNfc2Nyb2xsb2sod2luKSAod2luKS0+X3Njcm9sbAorI2VsaWYgIWRlZmluZWQoaXNfa2V5cGFkKQorI2RlZmluZSBpc19rZXlwYWQod2luKSAgIEZBTFNFCisjZGVmaW5lIGlzX3Njcm9sbG9rKHdpbikgRkFMU0UKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgaXNfa2V5cGFkKHdpbikgICBGQUxTRQorI2RlZmluZSBpc19zY3JvbGxvayh3aW4pIEZBTFNFCisjZW5kaWYKKworc3RhdGljIFdJTkRPVyAqCitmcmFtZV93aW4oRlJBTUUgKiBjdXJwKQoreworICAgIHJldHVybiAoY3VycCAhPSAwKSA/IGN1cnAtPndpbmQgOiBzdGRzY3I7Cit9CisKKy8qIFdlIG5lZWQgdG8ga25vdyBpZiB0aGVzZSBmbGFncyBhcmUgYWN0dWFsbHkgc2V0LCBzbyBkb24ndCBsb29rIGluIEZSQU1FLgorICogVGhlc2UgbmFtZXMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCBTVnI0IGN1cnNlcyBhcyB3ZWxsIGFzIG5jdXJzZXMuICBUaGUKKyAqIF91c2Vfa2V5cGFkIG5hbWUgZG9lcyBub3Qgd29yayB3aXRoIFNvbGFyaXMgOC4KKyAqLworc3RhdGljIGJvb2wKK0hhdmVLZXlwYWQoRlJBTUUgKiBjdXJwKQoreworICAgIFdJTkRPVyAqd2luID0gZnJhbWVfd2luKGN1cnApOworICAgICh2b2lkKSB3aW47CisgICAgcmV0dXJuIGlzX2tleXBhZCh3aW4pOworfQorCitzdGF0aWMgYm9vbAorSGF2ZVNjcm9sbChGUkFNRSAqIGN1cnApCit7CisgICAgV0lORE9XICp3aW4gPSBmcmFtZV93aW4oY3VycCk7CisgICAgKHZvaWQpIHdpbjsKKyAgICByZXR1cm4gaXNfc2Nyb2xsb2sod2luKTsKK30KKworc3RhdGljIHZvaWQKK25ld3dpbl9sZWdlbmQoRlJBTUUgKiBjdXJwKQoreworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm1zZzsKKwlpbnQgY29kZTsKKyAgICB9IGxlZ2VuZFtdID0geworCXsKKwkgICAgIl5DID0gY3JlYXRlIHdpbmRvdyIsIDAKKwl9LAorCXsKKwkgICAgIl5OID0gbmV4dCB3aW5kb3ciLCAwCisJfSwKKwl7CisJICAgICJeUCA9IHByZXZpb3VzIHdpbmRvdyIsIDAKKwl9LAorCXsKKwkgICAgIl5GID0gc2Nyb2xsIGZvcndhcmQiLCAwCisJfSwKKwl7CisJICAgICJeQiA9IHNjcm9sbCBiYWNrd2FyZCIsIDAKKwl9LAorCXsKKwkgICAgIl5LID0ga2V5cGFkKCVzKSIsIDEKKwl9LAorCXsKKwkgICAgIl5TID0gc2Nyb2xsb2soJXMpIiwgMgorCX0sCisJeworCSAgICAiXlcgPSBzYXZlIHdpbmRvdyB0byBmaWxlIiwgMAorCX0sCisJeworCSAgICAiXlIgPSByZXN0b3JlIHdpbmRvdyIsIDAKKwl9LAorI2lmIEhBVkVfV1JFU0laRQorCXsKKwkgICAgIl5YID0gcmVzaXplIiwgMAorCX0sCisjZW5kaWYKKwl7CisJICAgICJeUSVzID0gZXhpdCIsIDMKKwl9CisgICAgfTsKKyAgICBzaXplX3QgbjsKKyAgICBpbnQgeDsKKyAgICBib29sIGRvX2tleXBhZCA9IEhhdmVLZXlwYWQoY3VycCk7CisgICAgYm9vbCBkb19zY3JvbGwgPSBIYXZlU2Nyb2xsKGN1cnApOworICAgIGNoYXIgYnVmW0JVRlNJWl07CisKKyAgICBtb3ZlKExJTkVTIC0gNCwgMCk7CisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRihsZWdlbmQpOyBuKyspIHsKKwlzd2l0Y2ggKGxlZ2VuZFtuXS5jb2RlKSB7CisJZGVmYXVsdDoKKwkgICAgc3RyY3B5KGJ1ZiwgbGVnZW5kW25dLm1zZyk7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgc3ByaW50ZihidWYsIGxlZ2VuZFtuXS5tc2csIGRvX2tleXBhZCA/ICJ5ZXMiIDogIm5vIik7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgc3ByaW50ZihidWYsIGxlZ2VuZFtuXS5tc2csIGRvX3Njcm9sbCA/ICJ5ZXMiIDogIm5vIik7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgc3ByaW50ZihidWYsIGxlZ2VuZFtuXS5tc2csIGRvX2tleXBhZCA/ICIvRVNDIiA6ICIiKTsKKwkgICAgYnJlYWs7CisJfQorCXggPSBnZXRjdXJ4KHN0ZHNjcik7CisJYWRkc3RyKChDT0xTIDwgKHggKyAzICsgKGludCkgc3RybGVuKGJ1ZikpKSA/ICJcbiIgOiAobiA/ICIsICIgOiAiIikpOworCWFkZHN0cihidWYpOworICAgIH0KKyAgICBjbHJ0b2VvbCgpOworfQorCitzdGF0aWMgdm9pZAordHJhbnNpZW50KEZSQU1FICogY3VycCwgTkNVUlNFU19DT05TVCBjaGFyICptc2cpCit7CisgICAgbmV3d2luX2xlZ2VuZChjdXJwKTsKKyAgICBpZiAobXNnKSB7CisJbXZhZGRzdHIoTElORVMgLSAxLCAwLCBtc2cpOworCXJlZnJlc2goKTsKKwluYXBtcygxMDAwKTsKKyAgICB9CisKKyAgICBtb3ZlKExJTkVTIC0gMSwgMCk7CisgICAgcHJpbnR3KCIlcyBjaGFyYWN0ZXJzIGFyZSBlY2hvZWQsIHdpbmRvdyBzaG91bGQgJXNzY3JvbGwuIiwKKwkgICBIYXZlS2V5cGFkKGN1cnApID8gIk5vbi1hcnJvdyIgOiAiQWxsIG90aGVyIiwKKwkgICBIYXZlU2Nyb2xsKGN1cnApID8gIiIgOiAibm90ICIpOworICAgIGNscnRvZW9sKCk7Cit9CisKK3N0YXRpYyB2b2lkCituZXd3aW5fcmVwb3J0KEZSQU1FICogY3VycCkKKy8qIHJlcG9ydCBvbiB0aGUgY3Vyc29yJ3MgY3VycmVudCBwb3NpdGlvbiwgdGhlbiByZXN0b3JlIGl0ICovCit7CisgICAgV0lORE9XICp3aW4gPSBmcmFtZV93aW4oY3VycCk7CisgICAgaW50IHksIHg7CisKKyAgICBpZiAod2luICE9IHN0ZHNjcikKKwl0cmFuc2llbnQoY3VycCwgKGNoYXIgKikgMCk7CisgICAgZ2V0eXgod2luLCB5LCB4KTsKKyAgICBtb3ZlKExJTkVTIC0gMSwgQ09MUyAtIDE3KTsKKyAgICBwcmludHcoIlkgPSAlMmQgWCA9ICUyZCIsIHksIHgpOworICAgIGlmICh3aW4gIT0gc3Rkc2NyKQorCXJlZnJlc2goKTsKKyAgICBlbHNlCisJd21vdmUod2luLCB5LCB4KTsKK30KKworc3RhdGljIHBhaXIgKgorc2VsZWN0Y2VsbChpbnQgdWxpLCBpbnQgdWxqLCBpbnQgbHJpLCBpbnQgbHJqKQorLyogYXJyb3dzIGtleXMgbW92ZSBjdXJzb3IsIHJldHVybiBsb2NhdGlvbiBhdCBjdXJyZW50IG9uIG5vbi1hcnJvdyBrZXkgKi8KK3sKKyAgICBzdGF0aWMgcGFpciByZXM7CQkvKiByZXN1bHQgY2VsbCAqLworICAgIGludCBzaSA9IGxyaSAtIHVsaSArIDE7CS8qIGRlcHRoIG9mIHRoZSBzZWxlY3QgYXJlYSAqLworICAgIGludCBzaiA9IGxyaiAtIHVsaiArIDE7CS8qIHdpZHRoIG9mIHRoZSBzZWxlY3QgYXJlYSAqLworICAgIGludCBpID0gMCwgaiA9IDA7CQkvKiBvZmZzZXRzIGludG8gdGhlIHNlbGVjdCBhcmVhICovCisKKyAgICByZXMueSA9IHVsaTsKKyAgICByZXMueCA9IHVsajsKKyAgICBmb3IgKDs7KSB7CisJbW92ZSh1bGkgKyBpLCB1bGogKyBqKTsKKwluZXd3aW5fcmVwb3J0KChGUkFNRSAqKSAwKTsKKworCXN3aXRjaCAoR2V0Y2hhcigpKSB7CisJY2FzZSBLRVlfVVA6CisJICAgIGkgKz0gc2kgLSAxOworCSAgICBicmVhazsKKwljYXNlIEtFWV9ET1dOOgorCSAgICBpKys7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJICAgIGogKz0gc2ogLSAxOworCSAgICBicmVhazsKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgaisrOworCSAgICBicmVhazsKKwljYXNlIGNhc2VfUVVJVDoKKwkgICAgcmV0dXJuICgocGFpciAqKSAwKTsKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKwljYXNlIEtFWV9NT1VTRToKKwkgICAgeworCQlNRVZFTlQgZXZlbnQ7CisKKwkJZ2V0bW91c2UoJmV2ZW50KTsKKwkJaWYgKGV2ZW50LnkgPiB1bGkgJiYgZXZlbnQueCA+IHVsaikgeworCQkgICAgaSA9IGV2ZW50LnkgLSB1bGk7CisJCSAgICBqID0gZXZlbnQueCAtIHVsajsKKwkJfSBlbHNlIHsKKwkJICAgIGJlZXAoKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAgLyogRkFMTFRIUlUgKi8KKyNlbmRpZgorCWRlZmF1bHQ6CisJICAgIHJlcy55ID0gdWxpICsgaTsKKwkgICAgcmVzLnggPSB1bGogKyBqOworCSAgICByZXR1cm4gKCZyZXMpOworCX0KKwlpICU9IHNpOworCWogJT0gc2o7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorb3V0ZXJib3gocGFpciB1bCwgcGFpciBsciwgYm9vbCBvbm9mZikKKy8qIGRyYXcgb3IgZXJhc2UgYSBib3ggKm91dHNpZGUqIHRoZSBnaXZlbiBwYWlyIG9mIGNvcm5lcnMgKi8KK3sKKyAgICBtdmFkZGNoKHVsLnkgLSAxLCBsci54IC0gMSwgb25vZmYgPyBBQ1NfVUxDT1JORVIgOiAnICcpOworICAgIG12YWRkY2godWwueSAtIDEsIGxyLnggKyAxLCBvbm9mZiA/IEFDU19VUkNPUk5FUiA6ICcgJyk7CisgICAgbXZhZGRjaChsci55ICsgMSwgbHIueCArIDEsIG9ub2ZmID8gQUNTX0xSQ09STkVSIDogJyAnKTsKKyAgICBtdmFkZGNoKGxyLnkgKyAxLCB1bC54IC0gMSwgb25vZmYgPyBBQ1NfTExDT1JORVIgOiAnICcpOworICAgIG1vdmUodWwueSAtIDEsIHVsLngpOworICAgIGhsaW5lKG9ub2ZmID8gQUNTX0hMSU5FIDogJyAnLCBsci54IC0gdWwueCArIDEpOworICAgIG1vdmUodWwueSwgdWwueCAtIDEpOworICAgIHZsaW5lKG9ub2ZmID8gQUNTX1ZMSU5FIDogJyAnLCBsci55IC0gdWwueSArIDEpOworICAgIG1vdmUobHIueSArIDEsIHVsLngpOworICAgIGhsaW5lKG9ub2ZmID8gQUNTX0hMSU5FIDogJyAnLCBsci54IC0gdWwueCArIDEpOworICAgIG1vdmUodWwueSwgbHIueCArIDEpOworICAgIHZsaW5lKG9ub2ZmID8gQUNTX1ZMSU5FIDogJyAnLCBsci55IC0gdWwueSArIDEpOworfQorCitzdGF0aWMgV0lORE9XICoKK2dldHdpbmRvdyh2b2lkKQorLyogQXNrIHVzZXIgZm9yIGEgd2luZG93IGRlZmluaXRpb24gKi8KK3sKKyAgICBXSU5ET1cgKnJ3aW5kb3c7CisgICAgcGFpciB1bCwgbHIsICp0bXA7CisKKyAgICBtb3ZlKDAsIDApOworICAgIGNscnRvZW9sKCk7CisgICAgYWRkc3RyKCJVc2UgYXJyb3dzIHRvIG1vdmUgY3Vyc29yLCBhbnl0aGluZyBlbHNlIHRvIG1hcmsgY29ybmVyIDEiKTsKKyAgICByZWZyZXNoKCk7CisgICAgaWYgKCh0bXAgPSBzZWxlY3RjZWxsKDIsIDEsIExJTkVTIC0gQk9UTElORVMgLSAyLCBDT0xTIC0gMikpID09IChwYWlyICopIDApCisJcmV0dXJuICgoV0lORE9XICopIDApOworICAgIG1lbWNweSgmdWwsIHRtcCwgc2l6ZW9mKHBhaXIpKTsKKyAgICBtdmFkZGNoKHVsLnkgLSAxLCB1bC54IC0gMSwgQUNTX1VMQ09STkVSKTsKKyAgICBtb3ZlKDAsIDApOworICAgIGNscnRvZW9sKCk7CisgICAgYWRkc3RyKCJVc2UgYXJyb3dzIHRvIG1vdmUgY3Vyc29yLCBhbnl0aGluZyBlbHNlIHRvIG1hcmsgY29ybmVyIDIiKTsKKyAgICByZWZyZXNoKCk7CisgICAgaWYgKCh0bXAgPSBzZWxlY3RjZWxsKHVsLnksIHVsLngsIExJTkVTIC0gQk9UTElORVMgLSAyLCBDT0xTIC0gMikpID09CisJKHBhaXIgKikgMCkKKwlyZXR1cm4gKChXSU5ET1cgKikgMCk7CisgICAgbWVtY3B5KCZsciwgdG1wLCBzaXplb2YocGFpcikpOworCisgICAgcndpbmRvdyA9IHN1YndpbihzdGRzY3IsIGxyLnkgLSB1bC55ICsgMSwgbHIueCAtIHVsLnggKyAxLCB1bC55LCB1bC54KTsKKworICAgIG91dGVyYm94KHVsLCBsciwgVFJVRSk7CisgICAgcmVmcmVzaCgpOworCisgICAgd3JlZnJlc2gocndpbmRvdyk7CisKKyAgICBtb3ZlKDAsIDApOworICAgIGNscnRvZW9sKCk7CisgICAgcmV0dXJuIChyd2luZG93KTsKK30KKworc3RhdGljIHZvaWQKK25ld3dpbl9tb3ZlKEZSQU1FICogY3VycCwgaW50IGR5LCBpbnQgZHgpCit7CisgICAgV0lORE9XICp3aW4gPSBmcmFtZV93aW4oY3VycCk7CisgICAgaW50IGN1cl95LCBjdXJfeDsKKyAgICBpbnQgbWF4X3ksIG1heF94OworCisgICAgZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOworICAgIGdldG1heHl4KHdpbiwgbWF4X3ksIG1heF94KTsKKyAgICBpZiAoKGN1cl94ICs9IGR4KSA8IDApCisJY3VyX3ggPSAwOworICAgIGVsc2UgaWYgKGN1cl94ID49IG1heF94KQorCWN1cl94ID0gbWF4X3ggLSAxOworICAgIGlmICgoY3VyX3kgKz0gZHkpIDwgMCkKKwljdXJfeSA9IDA7CisgICAgZWxzZSBpZiAoY3VyX3kgPj0gbWF4X3kpCisJY3VyX3kgPSBtYXhfeSAtIDE7CisgICAgd21vdmUod2luLCBjdXJfeSwgY3VyX3gpOworfQorCitzdGF0aWMgRlJBTUUgKgorZGVsZXRlX2ZyYW1lZChGUkFNRSAqIGZwLCBib29sIHNob3dpdCkKK3sKKyAgICBGUkFNRSAqbnAgPSAwOworCisgICAgaWYgKGZwICE9IDApIHsKKwlmcC0+bGFzdC0+bmV4dCA9IGZwLT5uZXh0OworCWZwLT5uZXh0LT5sYXN0ID0gZnAtPmxhc3Q7CisKKwlpZiAoc2hvd2l0KSB7CisJICAgIHdlcmFzZShmcC0+d2luZCk7CisJICAgIHdyZWZyZXNoKGZwLT53aW5kKTsKKwl9CisJZGVsd2luKGZwLT53aW5kKTsKKworCW5wID0gKGZwID09IGZwLT5uZXh0KSA/IDAgOiBmcC0+bmV4dDsKKwlmcmVlKGZwKTsKKyAgICB9CisgICAgcmV0dXJuIG5wOworfQorCitzdGF0aWMgdm9pZAorYWNzX2FuZF9zY3JvbGwodm9pZCkKKy8qIERlbW9uc3RyYXRlIHdpbmRvd3MgKi8KK3sKKyAgICBpbnQgYzsKKyAgICBGUkFNRSAqY3VycmVudCA9IChGUkFNRSAqKSAwLCAqbmV3dzsKKyAgICBXSU5ET1cgKnVzZXNjciA9IHN0ZHNjcjsKKyNpZiBIQVZFX1BVVFdJTiAmJiBIQVZFX0dFVFdJTgorICAgIEZJTEUgKmZwOworI2VuZGlmCisKKyNkZWZpbmUgRFVNUEZJTEUJInNjcmVlbmR1bXAiCisKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICBtb3VzZW1hc2soQlVUVE9OMV9DTElDS0VELCAobW1hc2tfdCAqKSAwKTsKKyNlbmRpZgorICAgIGMgPSBDVFJMKCdDJyk7CisgICAgcmF3KCk7CisgICAgZG8geworCXRyYW5zaWVudCgoRlJBTUUgKikgMCwgKGNoYXIgKikgMCk7CisJc3dpdGNoIChjKSB7CisJY2FzZSBDVFJMKCdDJyk6CisJICAgIGlmICgobmV3dyA9IHR5cGVDYWxsb2MoRlJBTUUsIDEpKSA9PSAwKSB7CisJCWdvdG8gYnJlYWtvdXQ7CisJICAgIH0KKwkgICAgaWYgKChuZXd3LT53aW5kID0gZ2V0d2luZG93KCkpID09IChXSU5ET1cgKikgMCkgeworCQlmcmVlKG5ld3cpOworCQlnb3RvIGJyZWFrb3V0OworCSAgICB9CisKKwkgICAgaWYgKGN1cnJlbnQgPT0gMCkgewkvKiBGaXJzdCBlbGVtZW50LCAgKi8KKwkJbmV3dy0+bmV4dCA9IG5ld3c7CS8qICAgc28gcG9pbnQgaXQgYXQgaXRzZWxmICovCisJCW5ld3ctPmxhc3QgPSBuZXd3OworCSAgICB9IGVsc2UgeworCQluZXd3LT5uZXh0ID0gY3VycmVudC0+bmV4dDsKKwkJbmV3dy0+bGFzdCA9IGN1cnJlbnQ7CisJCW5ld3ctPmxhc3QtPm5leHQgPSBuZXd3OworCQluZXd3LT5uZXh0LT5sYXN0ID0gbmV3dzsKKwkgICAgfQorCSAgICBjdXJyZW50ID0gbmV3dzsKKwkgICAgLyogU1ZyNCBjdXJzZXMgc2V0cyB0aGUga2V5cGFkIG9uIGFsbCBuZXdseS1jcmVhdGVkIHdpbmRvd3MgdG8KKwkgICAgICogZmFsc2UuICBTb21lb25lIHJlcG9ydGVkIHRoYXQgUERDdXJzZXMgbWFrZXMgbmV3IHdpbmRvd3MgaW5oZXJpdAorCSAgICAgKiB0aGlzIGZsYWcuICBSZW1vdmUgdGhlIGZvbGxvd2luZyAna2V5cGFkKCknIGNhbGwgdG8gdGVzdCB0aGlzCisJICAgICAqLworCSAgICBrZXlwYWQoY3VycmVudC0+d2luZCwgVFJVRSk7CisJICAgIGN1cnJlbnQtPmRvX2tleXBhZCA9IEhhdmVLZXlwYWQoY3VycmVudCk7CisJICAgIGN1cnJlbnQtPmRvX3Njcm9sbCA9IEhhdmVTY3JvbGwoY3VycmVudCk7CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdOJyk6CS8qIGdvIHRvIG5leHQgd2luZG93ICovCisJICAgIGlmIChjdXJyZW50KQorCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ1AnKToJLyogZ28gdG8gcHJldmlvdXMgd2luZG93ICovCisJICAgIGlmIChjdXJyZW50KQorCQljdXJyZW50ID0gY3VycmVudC0+bGFzdDsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ0YnKToJLyogc2Nyb2xsIGN1cnJlbnQgd2luZG93IGZvcndhcmQgKi8KKwkgICAgaWYgKGN1cnJlbnQpCisJCXdzY3JsKGZyYW1lX3dpbihjdXJyZW50KSwgMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCdCJyk6CS8qIHNjcm9sbCBjdXJyZW50IHdpbmRvdyBiYWNrd2FyZHMgKi8KKwkgICAgaWYgKGN1cnJlbnQpCisJCXdzY3JsKGZyYW1lX3dpbihjdXJyZW50KSwgLTEpOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTCgnSycpOgkvKiB0b2dnbGUga2V5cGFkIG1vZGUgZm9yIGN1cnJlbnQgKi8KKwkgICAgaWYgKGN1cnJlbnQpIHsKKwkJY3VycmVudC0+ZG9fa2V5cGFkID0gIWN1cnJlbnQtPmRvX2tleXBhZDsKKwkJa2V5cGFkKGN1cnJlbnQtPndpbmQsIGN1cnJlbnQtPmRvX2tleXBhZCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ1MnKToKKwkgICAgaWYgKGN1cnJlbnQpIHsKKwkJY3VycmVudC0+ZG9fc2Nyb2xsID0gIWN1cnJlbnQtPmRvX3Njcm9sbDsKKwkJc2Nyb2xsb2soY3VycmVudC0+d2luZCwgY3VycmVudC0+ZG9fc2Nyb2xsKTsKKwkgICAgfQorCSAgICBicmVhazsKKworI2lmIEhBVkVfUFVUV0lOICYmIEhBVkVfR0VUV0lOCisJY2FzZSBDVFJMKCdXJyk6CS8qIHNhdmUgYW5kIGRlbGV0ZSB3aW5kb3cgKi8KKwkgICAgaWYgKChjdXJyZW50ICE9IDApICYmIChjdXJyZW50ID09IGN1cnJlbnQtPm5leHQpKSB7CisJCXRyYW5zaWVudChjdXJyZW50LCAiV2lsbCBub3Qgc2F2ZS9kZWxldGUgT05MWSB3aW5kb3ciKTsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSBpZiAoKGZwID0gZm9wZW4oRFVNUEZJTEUsICJ3IikpID09IChGSUxFICopIDApIHsKKwkJdHJhbnNpZW50KGN1cnJlbnQsICJDYW4ndCBvcGVuIHNjcmVlbiBkdW1wIGZpbGUiKTsKKwkgICAgfSBlbHNlIHsKKwkJKHZvaWQpIHB1dHdpbihmcmFtZV93aW4oY3VycmVudCksIGZwKTsKKwkJKHZvaWQpIGZjbG9zZShmcCk7CisKKwkJY3VycmVudCA9IGRlbGV0ZV9mcmFtZWQoY3VycmVudCwgVFJVRSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ1InKToJLyogcmVzdG9yZSB3aW5kb3cgKi8KKwkgICAgaWYgKChmcCA9IGZvcGVuKERVTVBGSUxFLCAiciIpKSA9PSAoRklMRSAqKSAwKSB7CisJCXRyYW5zaWVudChjdXJyZW50LCAiQ2FuJ3Qgb3BlbiBzY3JlZW4gZHVtcCBmaWxlIik7CisJICAgIH0gZWxzZSB7CisJCWlmICgobmV3dyA9IHR5cGVDYWxsb2MoRlJBTUUsIDEpKSAhPSAwKSB7CisKKwkJICAgIG5ld3ctPm5leHQgPSBjdXJyZW50ID8gY3VycmVudC0+bmV4dCA6IDA7CisJCSAgICBuZXd3LT5sYXN0ID0gY3VycmVudDsKKwkJICAgIG5ld3ctPmxhc3QtPm5leHQgPSBuZXd3OworCQkgICAgbmV3dy0+bmV4dC0+bGFzdCA9IG5ld3c7CisKKwkJICAgIG5ld3ctPndpbmQgPSBnZXR3aW4oZnApOworCisJCSAgICB3cmVmcmVzaChuZXd3LT53aW5kKTsKKwkJfQorCQkodm9pZCkgZmNsb3NlKGZwKTsKKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZgorCisjaWYgSEFWRV9XUkVTSVpFCisJY2FzZSBDVFJMKCdYJyk6CS8qIHJlc2l6ZSB3aW5kb3cgKi8KKwkgICAgaWYgKGN1cnJlbnQpIHsKKwkJcGFpciAqdG1wLCB1bCwgbHI7CisJCWludCBpLCBteCwgbXk7CisKKwkJbW92ZSgwLCAwKTsKKwkJY2xydG9lb2woKTsKKwkJYWRkc3RyKCJVc2UgYXJyb3dzIHRvIG1vdmUgY3Vyc29yLCBhbnl0aGluZyBlbHNlIHRvIG1hcmsgbmV3IGNvcm5lciIpOworCQlyZWZyZXNoKCk7CisKKwkJZ2V0YmVneXgoY3VycmVudC0+d2luZCwgdWwueSwgdWwueCk7CisKKwkJdG1wID0gc2VsZWN0Y2VsbCh1bC55LCB1bC54LCBMSU5FUyAtIEJPVExJTkVTIC0gMiwgQ09MUyAtIDIpOworCQlpZiAodG1wID09IChwYWlyICopIDApIHsKKwkJICAgIGJlZXAoKTsKKwkJICAgIGJyZWFrOworCQl9CisKKwkJZ2V0bWF4eXgoY3VycmVudC0+d2luZCwgbHIueSwgbHIueCk7CisJCWxyLnkgKz0gKHVsLnkgLSAxKTsKKwkJbHIueCArPSAodWwueCAtIDEpOworCQlvdXRlcmJveCh1bCwgbHIsIEZBTFNFKTsKKwkJd25vdXRyZWZyZXNoKHN0ZHNjcik7CisKKwkJLyogc3RyaWN0bHkgY29zbWV0aWMgaGFjayBmb3IgdGhlIHRlc3QgKi8KKwkJZ2V0bWF4eXgoY3VycmVudC0+d2luZCwgbXksIG14KTsKKwkJaWYgKG15ID4gdG1wLT55IC0gdWwueSkgeworCQkgICAgZ2V0eXgoY3VycmVudC0+d2luZCwgbHIueSwgbHIueCk7CisJCSAgICB3bW92ZShjdXJyZW50LT53aW5kLCB0bXAtPnkgLSB1bC55ICsgMSwgMCk7CisJCSAgICB3Y2xydG9ib3QoY3VycmVudC0+d2luZCk7CisJCSAgICB3bW92ZShjdXJyZW50LT53aW5kLCBsci55LCBsci54KTsKKwkJfQorCQlpZiAobXggPiB0bXAtPnggLSB1bC54KQorCQkgICAgZm9yIChpID0gMDsgaSA8IG15OyBpKyspIHsKKwkJCXdtb3ZlKGN1cnJlbnQtPndpbmQsIGksIHRtcC0+eCAtIHVsLnggKyAxKTsKKwkJCXdjbHJ0b2VvbChjdXJyZW50LT53aW5kKTsKKwkJICAgIH0KKwkJd25vdXRyZWZyZXNoKGN1cnJlbnQtPndpbmQpOworCisJCW1lbWNweSgmbHIsIHRtcCwgc2l6ZW9mKHBhaXIpKTsKKwkJKHZvaWQpIHdyZXNpemUoY3VycmVudC0+d2luZCwgbHIueSAtIHVsLnkgKyAwLCBsci54IC0gdWwueCArIDApOworCisJCWdldGJlZ3l4KGN1cnJlbnQtPndpbmQsIHVsLnksIHVsLngpOworCQlnZXRtYXh5eChjdXJyZW50LT53aW5kLCBsci55LCBsci54KTsKKwkJbHIueSArPSAodWwueSAtIDEpOworCQlsci54ICs9ICh1bC54IC0gMSk7CisJCW91dGVyYm94KHVsLCBsciwgVFJVRSk7CisJCXdub3V0cmVmcmVzaChzdGRzY3IpOworCisJCXdub3V0cmVmcmVzaChjdXJyZW50LT53aW5kKTsKKwkJbW92ZSgwLCAwKTsKKwkJY2xydG9lb2woKTsKKwkJZG91cGRhdGUoKTsKKwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZiAvKiBIQVZFX1dSRVNJWkUgKi8KKworCWNhc2UgS0VZX0YoMTApOgkvKiB1bmRvY3VtZW50ZWQgLS0tIHVzZSB0aGlzIHRvIHRlc3QgYXJlYSBjbGVhcnMgKi8KKwkgICAgc2VsZWN0Y2VsbCgwLCAwLCBMSU5FUyAtIDEsIENPTFMgLSAxKTsKKwkgICAgY2xydG9ib3QoKTsKKwkgICAgcmVmcmVzaCgpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX1VQOgorCSAgICBuZXd3aW5fbW92ZShjdXJyZW50LCAtMSwgMCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0RPV046CisJICAgIG5ld3dpbl9tb3ZlKGN1cnJlbnQsIDEsIDApOworCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCSAgICBuZXd3aW5fbW92ZShjdXJyZW50LCAwLCAtMSk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1JJR0hUOgorCSAgICBuZXd3aW5fbW92ZShjdXJyZW50LCAwLCAxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9CQUNLU1BBQ0U6CisJICAgIC8qIEZBTExUSFJPVUdIICovCisJY2FzZSBLRVlfREM6CisJICAgIHsKKwkJaW50IHksIHg7CisJCWdldHl4KGZyYW1lX3dpbihjdXJyZW50KSwgeSwgeCk7CisJCWlmICgtLXggPCAwKSB7CisJCSAgICBpZiAoLS15IDwgMCkKKwkJCWJyZWFrOworCQkgICAgeCA9IGdldG1heHgoZnJhbWVfd2luKGN1cnJlbnQpKSAtIDE7CisJCX0KKwkJbXZ3ZGVsY2goZnJhbWVfd2luKGN1cnJlbnQpLCB5LCB4KTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJ1xyJzoKKwkgICAgYyA9ICdcbic7CisJICAgIC8qIEZBTExUSFJPVUdIICovCisKKwlkZWZhdWx0OgorCSAgICBpZiAoY3VycmVudCkKKwkJd2FkZGNoKGN1cnJlbnQtPndpbmQsIChjaHR5cGUpIGMpOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCW5ld3dpbl9yZXBvcnQoY3VycmVudCk7CisJdXNlc2NyID0gZnJhbWVfd2luKGN1cnJlbnQpOworCXdyZWZyZXNoKHVzZXNjcik7CisgICAgfSB3aGlsZQorCSghaXNRdWl0KGMgPSB3R2V0Y2hhcih1c2VzY3IpKQorCSAmJiAoYyAhPSBFUlIpKTsKKworICBicmVha291dDoKKyAgICB3aGlsZSAoY3VycmVudCAhPSAwKQorCWN1cnJlbnQgPSBkZWxldGVfZnJhbWVkKGN1cnJlbnQsIEZBTFNFKTsKKworICAgIHNjcm9sbG9rKHN0ZHNjciwgVFJVRSk7CS8qIHJlc2V0IHRvIGRyaXZlcidzIGRlZmF1bHQgKi8KKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICBtb3VzZW1hc2soMCwgKG1tYXNrX3QgKikgMCk7CisjZW5kaWYKKyAgICBub3JhdygpOworICAgIGVyYXNlKCk7CisgICAgZW5kd2luKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUGFuZWxzIHRlc3RlcgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgVVNFX0xJQlBBTkVMCitzdGF0aWMgaW50IG5hcF9tc2VjID0gMTsKKworc3RhdGljIE5DVVJTRVNfQ09OU1QgY2hhciAqbW9kW10gPQoreworICAgICJ0ZXN0ICIsCisgICAgIlRFU1QgIiwKKyAgICAiKCoqKSAiLAorICAgICIqKCkqICIsCisgICAgIjwtLT4gIiwKKyAgICAiTEFTVCAiCit9OworCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJd2FpdF9hX3doaWxlKG1zZWMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAord2FpdF9hX3doaWxlKGludCBtc2VjIEdDQ19VTlVTRUQpCit7CisjaWYgSEFWRV9OQVBNUworICAgIGlmIChuYXBfbXNlYyA9PSAxKQorCXdHZXRjaGFyKHN0ZHNjcik7CisgICAgZWxzZQorCW5hcG1zKG5hcF9tc2VjKTsKKyNlbHNlCisgICAgaWYgKG5hcF9tc2VjID09IDEpCisJd0dldGNoYXIoc3Rkc2NyKTsKKyAgICBlbHNlIGlmIChtc2VjID4gMTAwMCkKKwlzbGVlcCgodW5zaWduZWQpIG1zZWMgLyAxMDAwKTsKKyAgICBlbHNlCisJc2xlZXAoMSk7CisjZW5kaWYKK30JCQkJLyogZW5kIG9mIHdhaXRfYV93aGlsZSAqLworCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJc2F5d2hhdCh0ZXh0KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK3NheXdoYXQoTkNVUlNFU19DT05TVCBjaGFyICp0ZXh0KQoreworICAgIHdtb3ZlKHN0ZHNjciwgTElORVMgLSAxLCAwKTsKKyAgICB3Y2xydG9lb2woc3Rkc2NyKTsKKyAgICBpZiAodGV4dCAhPSAwICYmICp0ZXh0ICE9ICdcMCcpIHsKKwl3YWRkc3RyKHN0ZHNjciwgdGV4dCk7CisJd2FkZHN0cihzdGRzY3IsICI7ICIpOworICAgIH0KKyAgICB3YWRkc3RyKHN0ZHNjciwgInByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKK30JCQkJLyogZW5kIG9mIHNheXdoYXQgKi8KKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1rcGFuZWwocm93cyxjb2xzLHRseSx0bHgpIC0gYWxsb2MgYSB3aW4gYW5kIHBhbmVsIGFuZCBhc3NvY2lhdGUgdGhlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIFBBTkVMICoKK21rcGFuZWwoc2hvcnQgY29sb3IsIGludCByb3dzLCBpbnQgY29scywgaW50IHRseSwgaW50IHRseCkKK3sKKyAgICBXSU5ET1cgKndpbjsKKyAgICBQQU5FTCAqcGFuID0gMDsKKworICAgIGlmICgod2luID0gbmV3d2luKHJvd3MsIGNvbHMsIHRseSwgdGx4KSkgIT0gMCkgeworCWlmICgocGFuID0gbmV3X3BhbmVsKHdpbikpID09IDApIHsKKwkgICAgZGVsd2luKHdpbik7CisJfSBlbHNlIGlmICh1c2VfY29sb3JzKSB7CisJICAgIHNob3J0IGZnID0gKHNob3J0KSAoKGNvbG9yID09IENPTE9SX0JMVUUpID8gQ09MT1JfV0hJVEUgOiBDT0xPUl9CTEFDSyk7CisJICAgIHNob3J0IGJnID0gY29sb3I7CisKKwkgICAgaW5pdF9wYWlyKGNvbG9yLCBmZywgYmcpOworCSAgICB3YmtnZHNldCh3aW4sIChjaHR5cGUpIChDT0xPUl9QQUlSKGNvbG9yKSB8ICcgJykpOworCX0gZWxzZSB7CisJICAgIHdia2dkc2V0KHdpbiwgQV9CT0xEIHwgJyAnKTsKKwl9CisgICAgfQorICAgIHJldHVybiBwYW47Cit9CQkJCS8qIGVuZCBvZiBta3BhbmVsICovCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlybXBhbmVsKHBhbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitybXBhbmVsKFBBTkVMICogcGFuKQoreworICAgIFdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbik7CisgICAgZGVsX3BhbmVsKHBhbik7CisgICAgZGVsd2luKHdpbik7Cit9CQkJCS8qIGVuZCBvZiBybXBhbmVsICovCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlwZmx1c2goKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK3BmbHVzaCh2b2lkKQoreworICAgIHVwZGF0ZV9wYW5lbHMoKTsKKyAgICBkb3VwZGF0ZSgpOworfQkJCQkvKiBlbmQgb2YgcGZsdXNoICovCisKKy8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlmaWxsX3BhbmVsKHdpbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitpbml0X3BhbmVsKHZvaWQpCit7CisgICAgcmVnaXN0ZXIgaW50IHksIHg7CisKKyAgICBmb3IgKHkgPSAwOyB5IDwgTElORVMgLSAxOyB5KyspIHsKKwlmb3IgKHggPSAwOyB4IDwgQ09MUzsgeCsrKQorCSAgICB3cHJpbnR3KHN0ZHNjciwgIiVkIiwgKHkgKyB4KSAlIDEwKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX3BhbmVsKFBBTkVMICogcGFuKQoreworICAgIFdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbik7CisgICAgY29uc3QgY2hhciAqdXNlcnB0ciA9IChjb25zdCBjaGFyICopIHBhbmVsX3VzZXJwdHIocGFuKTsKKyAgICBpbnQgbnVtID0gKHVzZXJwdHIgJiYgKnVzZXJwdHIpID8gdXNlcnB0clsxXSA6ICc/JzsKKyAgICBpbnQgeSwgeDsKKworICAgIHdtb3ZlKHdpbiwgMSwgMSk7CisgICAgd3ByaW50dyh3aW4sICItcGFuJWMtIiwgbnVtKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICBib3god2luLCAwLCAwKTsKKyAgICBmb3IgKHkgPSAyOyB5IDwgZ2V0bWF4eSh3aW4pIC0gMTsgeSsrKSB7CisJZm9yICh4ID0gMTsgeCA8IGdldG1heHgod2luKSAtIDE7IHgrKykgeworCSAgICB3bW92ZSh3aW4sIHksIHgpOworCSAgICB3YWRkY2god2luLCBVQ2hhcihudW0pKTsKKwl9CisgICAgfQorfQorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKK3N0YXRpYyB2b2lkCitpbml0X3dpZGVfcGFuZWwodm9pZCkKK3sKKyAgICBpbnQgZGlnaXQ7CisgICAgY2NoYXJfdCB0ZW1wWzEwXTsKKworICAgIGZvciAoZGlnaXQgPSAwOyBkaWdpdCA8IDEwOyArK2RpZ2l0KQorCW1ha2VfZnVsbHdpZHRoX2RpZ2l0KCZ0ZW1wW2RpZ2l0XSwgZGlnaXQpOworCisgICAgZG8geworCWludCB5LCB4OworCWdldHl4KHN0ZHNjciwgeSwgeCk7CisJZGlnaXQgPSAoeSArIHggLyAyKSAlIDEwOworICAgIH0gd2hpbGUgKGFkZF93Y2goJnRlbXBbZGlnaXRdKSAhPSBFUlIpOworfQorCitzdGF0aWMgdm9pZAorZmlsbF93aWRlX3BhbmVsKFBBTkVMICogcGFuKQoreworICAgIFdJTkRPVyAqd2luID0gcGFuZWxfd2luZG93KHBhbik7CisgICAgY29uc3QgY2hhciAqdXNlcnB0ciA9IChjb25zdCBjaGFyICopIHBhbmVsX3VzZXJwdHIocGFuKTsKKyAgICBpbnQgbnVtID0gKHVzZXJwdHIgJiYgKnVzZXJwdHIpID8gdXNlcnB0clsxXSA6ICc/JzsKKyAgICBpbnQgeSwgeDsKKworICAgIHdtb3ZlKHdpbiwgMSwgMSk7CisgICAgd3ByaW50dyh3aW4sICItcGFuJWMtIiwgbnVtKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICBib3god2luLCAwLCAwKTsKKyAgICBmb3IgKHkgPSAyOyB5IDwgZ2V0bWF4eSh3aW4pIC0gMTsgeSsrKSB7CisJZm9yICh4ID0gMTsgeCA8IGdldG1heHgod2luKSAtIDE7IHgrKykgeworCSAgICB3bW92ZSh3aW4sIHksIHgpOworCSAgICB3YWRkY2god2luLCBVQ2hhcihudW0pKTsKKwl9CisgICAgfQorfQorI2VuZGlmCisKKyNkZWZpbmUgTUFYX1BBTkVMUyA1CisKK3N0YXRpYyB2b2lkCitjYW5uZWRfcGFuZWwoUEFORUwgKiBweFtNQVhfUEFORUxTICsgMV0sIE5DVVJTRVNfQ09OU1QgY2hhciAqY21kKQoreworICAgIGludCB3aGljaCA9IGNtZFsxXSAtICcwJzsKKworICAgIHNheXdoYXQoY21kKTsKKyAgICBzd2l0Y2ggKCpjbWQpIHsKKyAgICBjYXNlICdoJzoKKwloaWRlX3BhbmVsKHB4W3doaWNoXSk7CisJYnJlYWs7CisgICAgY2FzZSAncyc6CisJc2hvd19wYW5lbChweFt3aGljaF0pOworCWJyZWFrOworICAgIGNhc2UgJ3QnOgorCXRvcF9wYW5lbChweFt3aGljaF0pOworCWJyZWFrOworICAgIGNhc2UgJ2InOgorCWJvdHRvbV9wYW5lbChweFt3aGljaF0pOworCWJyZWFrOworICAgIGNhc2UgJ2QnOgorCXJtcGFuZWwocHhbd2hpY2hdKTsKKwlicmVhazsKKyAgICB9CisgICAgcGZsdXNoKCk7CisgICAgd2FpdF9hX3doaWxlKG5hcF9tc2VjKTsKK30KKworc3RhdGljIHZvaWQKK2RlbW9fcGFuZWxzKHZvaWQgKCpJbml0UGFuZWwpICh2b2lkKSwgdm9pZCAoKkZpbGxQYW5lbCkgKFBBTkVMICopKQoreworICAgIGludCBjb3VudDsKKyAgICBpbnQgaXRtcDsKKyAgICBQQU5FTCAqcHhbTUFYX1BBTkVMUyArIDFdOworCisgICAgc2Nyb2xsb2soc3Rkc2NyLCBGQUxTRSk7CS8qIHdlIGRvbid0IHdhbnQgc3Rkc2NyIHRvIHNjcm9sbCEgKi8KKyAgICByZWZyZXNoKCk7CisKKyAgICBJbml0UGFuZWwoKTsKKyAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCA1OyBjb3VudCsrKSB7CisJcHhbMV0gPSBta3BhbmVsKENPTE9SX1JFRCwKKwkJCUxJTkVTIC8gMiAtIDIsCisJCQlDT0xTIC8gOCArIDEsCisJCQkwLAorCQkJMCk7CisJc2V0X3BhbmVsX3VzZXJwdHIocHhbMV0sIChOQ1VSU0VTX0NPTlNUIHZvaWQgKikgInAxIik7CisKKwlweFsyXSA9IG1rcGFuZWwoQ09MT1JfR1JFRU4sCisJCQlMSU5FUyAvIDIgKyAxLAorCQkJQ09MUyAvIDcsCisJCQlMSU5FUyAvIDQsCisJCQlDT0xTIC8gMTApOworCXNldF9wYW5lbF91c2VycHRyKHB4WzJdLCAoTkNVUlNFU19DT05TVCB2b2lkICopICJwMiIpOworCisJcHhbM10gPSBta3BhbmVsKENPTE9SX1lFTExPVywKKwkJCUxJTkVTIC8gNCwKKwkJCUNPTFMgLyAxMCwKKwkJCUxJTkVTIC8gMiwKKwkJCUNPTFMgLyA5KTsKKwlzZXRfcGFuZWxfdXNlcnB0cihweFszXSwgKE5DVVJTRVNfQ09OU1Qgdm9pZCAqKSAicDMiKTsKKworCXB4WzRdID0gbWtwYW5lbChDT0xPUl9CTFVFLAorCQkJTElORVMgLyAyIC0gMiwKKwkJCUNPTFMgLyA4LAorCQkJTElORVMgLyAyIC0gMiwKKwkJCUNPTFMgLyAzKTsKKwlzZXRfcGFuZWxfdXNlcnB0cihweFs0XSwgKE5DVVJTRVNfQ09OU1Qgdm9pZCAqKSAicDQiKTsKKworCXB4WzVdID0gbWtwYW5lbChDT0xPUl9NQUdFTlRBLAorCQkJTElORVMgLyAyIC0gMiwKKwkJCUNPTFMgLyA4LAorCQkJTElORVMgLyAyLAorCQkJQ09MUyAvIDIgLSAyKTsKKwlzZXRfcGFuZWxfdXNlcnB0cihweFs1XSwgKE5DVVJTRVNfQ09OU1Qgdm9pZCAqKSAicDUiKTsKKworCUZpbGxQYW5lbChweFsxXSk7CisJRmlsbFBhbmVsKHB4WzJdKTsKKwlGaWxsUGFuZWwocHhbM10pOworCUZpbGxQYW5lbChweFs0XSk7CisJRmlsbFBhbmVsKHB4WzVdKTsKKworCWhpZGVfcGFuZWwocHhbNF0pOworCWhpZGVfcGFuZWwocHhbNV0pOworCXBmbHVzaCgpOworCXNheXdoYXQoIiIpOworCXdhaXRfYV93aGlsZShuYXBfbXNlYyk7CisKKwlzYXl3aGF0KCJoMyBzMSBzMiBzNCBzNSIpOworCW1vdmVfcGFuZWwocHhbMV0sIDAsIDApOworCWhpZGVfcGFuZWwocHhbM10pOworCXNob3dfcGFuZWwocHhbMV0pOworCXNob3dfcGFuZWwocHhbMl0pOworCXNob3dfcGFuZWwocHhbNF0pOworCXNob3dfcGFuZWwocHhbNV0pOworCXBmbHVzaCgpOworCXdhaXRfYV93aGlsZShuYXBfbXNlYyk7CisKKwljYW5uZWRfcGFuZWwocHgsICJzMSIpOworCWNhbm5lZF9wYW5lbChweCwgInMyIik7CisKKwlzYXl3aGF0KCJtMiIpOworCW1vdmVfcGFuZWwocHhbMl0sIExJTkVTIC8gMyArIDEsIENPTFMgLyA4KTsKKwlwZmx1c2goKTsKKwl3YWl0X2Ffd2hpbGUobmFwX21zZWMpOworCisJY2FubmVkX3BhbmVsKHB4LCAiczMiKTsKKworCXNheXdoYXQoIm0zIik7CisJbW92ZV9wYW5lbChweFszXSwgTElORVMgLyA0ICsgMSwgQ09MUyAvIDE1KTsKKwlwZmx1c2goKTsKKwl3YWl0X2Ffd2hpbGUobmFwX21zZWMpOworCisJY2FubmVkX3BhbmVsKHB4LCAiYjMiKTsKKwljYW5uZWRfcGFuZWwocHgsICJzNCIpOworCWNhbm5lZF9wYW5lbChweCwgInM1Iik7CisJY2FubmVkX3BhbmVsKHB4LCAidDMiKTsKKwljYW5uZWRfcGFuZWwocHgsICJ0MSIpOworCWNhbm5lZF9wYW5lbChweCwgInQyIik7CisJY2FubmVkX3BhbmVsKHB4LCAidDMiKTsKKwljYW5uZWRfcGFuZWwocHgsICJ0NCIpOworCisJZm9yIChpdG1wID0gMDsgaXRtcCA8IDY7IGl0bXArKykgeworCSAgICBXSU5ET1cgKnc0ID0gcGFuZWxfd2luZG93KHB4WzRdKTsKKwkgICAgV0lORE9XICp3NSA9IHBhbmVsX3dpbmRvdyhweFs1XSk7CisKKwkgICAgc2F5d2hhdCgibTQiKTsKKwkgICAgd21vdmUodzQsIExJTkVTIC8gOCwgMSk7CisJICAgIHdhZGRzdHIodzQsIG1vZFtpdG1wXSk7CisJICAgIG1vdmVfcGFuZWwocHhbNF0sIExJTkVTIC8gNiwgaXRtcCAqIChDT0xTIC8gOCkpOworCSAgICB3bW92ZSh3NSwgTElORVMgLyA2LCAxKTsKKwkgICAgd2FkZHN0cih3NSwgbW9kW2l0bXBdKTsKKwkgICAgcGZsdXNoKCk7CisJICAgIHdhaXRfYV93aGlsZShuYXBfbXNlYyk7CisKKwkgICAgc2F5d2hhdCgibTUiKTsKKwkgICAgd21vdmUodzQsIExJTkVTIC8gNiwgMSk7CisJICAgIHdhZGRzdHIodzQsIG1vZFtpdG1wXSk7CisJICAgIG1vdmVfcGFuZWwocHhbNV0sIExJTkVTIC8gMyAtIDEsIChpdG1wICogMTApICsgNik7CisJICAgIHdtb3ZlKHc1LCBMSU5FUyAvIDgsIDEpOworCSAgICB3YWRkc3RyKHc1LCBtb2RbaXRtcF0pOworCSAgICBwZmx1c2goKTsKKwkgICAgd2FpdF9hX3doaWxlKG5hcF9tc2VjKTsKKwl9CisKKwlzYXl3aGF0KCJtNCIpOworCW1vdmVfcGFuZWwocHhbNF0sIExJTkVTIC8gNiwgaXRtcCAqIChDT0xTIC8gOCkpOworCXBmbHVzaCgpOworCXdhaXRfYV93aGlsZShuYXBfbXNlYyk7CisKKwljYW5uZWRfcGFuZWwocHgsICJ0NSIpOworCWNhbm5lZF9wYW5lbChweCwgInQyIik7CisJY2FubmVkX3BhbmVsKHB4LCAidDEiKTsKKwljYW5uZWRfcGFuZWwocHgsICJkMiIpOworCWNhbm5lZF9wYW5lbChweCwgImgzIik7CisJY2FubmVkX3BhbmVsKHB4LCAiZDEiKTsKKwljYW5uZWRfcGFuZWwocHgsICJkNCIpOworCWNhbm5lZF9wYW5lbChweCwgImQ1Iik7CisJY2FubmVkX3BhbmVsKHB4LCAiZDMiKTsKKworCXdhaXRfYV93aGlsZShuYXBfbXNlYyk7CisJaWYgKG5hcF9tc2VjID09IDEpCisJICAgIGJyZWFrOworCW5hcF9tc2VjID0gMTAwTDsKKyAgICB9CisKKyAgICBlcmFzZSgpOworICAgIGVuZHdpbigpOworfQorI2VuZGlmIC8qIFVTRV9MSUJQQU5FTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBhZCB0ZXN0ZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBHUklEU0laRQkzCisKK3N0YXRpYyBib29sIHBlbmRpbmdfcGFuID0gRkFMU0U7CitzdGF0aWMgYm9vbCBzaG93X3Bhbm5lcl9sZWdlbmQgPSBUUlVFOworCitzdGF0aWMgaW50CitwYW5uZXJfbGVnZW5kKGludCBsaW5lKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBsZWdlbmRbXSA9CisgICAgeworCSJVc2UgYXJyb3cga2V5cyAob3IgVSxELEwsUikgdG8gcGFuLCBFU0MgdG8gcXVpdCwgISB0byBzaGVsbC1vdXQuIiwKKwkiVXNlICssLSAob3IgaixrKSB0byBncm93L3NocmluayB0aGUgcGFubmVyIHZlcnRpY2FsbHkuIiwKKwkiVXNlIDwsPiAob3IgaCxsKSB0byBncm93L3NocmluayB0aGUgcGFubmVyIGhvcml6b250YWxseS4iLAorCSJOdW1iZXIgcmVwZWF0cy4gIFRvZ2dsZSBsZWdlbmQ6PyBmaWxsZXI6YSB0aW1lcjp0IHNjcm9sbG1hcms6cy4iCisgICAgfTsKKyAgICBpbnQgbiA9ICgoaW50KSBTSVpFT0YobGVnZW5kKSAtIChMSU5FUyAtIGxpbmUpKTsKKyAgICBpZiAobGluZSA8IExJTkVTICYmIChuID49IDApKSB7CisJbW92ZShsaW5lLCAwKTsKKwlpZiAoc2hvd19wYW5uZXJfbGVnZW5kKQorCSAgICBwcmludHcoIiVzIiwgbGVnZW5kW25dKTsKKwljbHJ0b2VvbCgpOworCXJldHVybiBzaG93X3Bhbm5lcl9sZWdlbmQ7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK3Bhbm5lcl9oX2NsZWFudXAoaW50IGZyb21feSwgaW50IGZyb21feCwgaW50IHRvX3gpCit7CisgICAgaWYgKCFwYW5uZXJfbGVnZW5kKGZyb21feSkpCisJZG9faF9saW5lKGZyb21feSwgZnJvbV94LCAnICcsIHRvX3gpOworfQorCitzdGF0aWMgdm9pZAorcGFubmVyX3ZfY2xlYW51cChpbnQgZnJvbV95LCBpbnQgZnJvbV94LCBpbnQgdG9feSkKK3sKKyAgICBpZiAoIXBhbm5lcl9sZWdlbmQoZnJvbV95KSkKKwlkb192X2xpbmUoZnJvbV95LCBmcm9tX3gsICcgJywgdG9feSk7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX3BhZChXSU5ET1cgKnBhbnBhZCwgYm9vbCBwYW5fbGluZXMpCit7CisgICAgaW50IHksIHg7CisgICAgdW5zaWduZWQgZ3JpZGNvdW50ID0gMDsKKworICAgIHdtb3ZlKHBhbnBhZCwgMCwgMCk7CisgICAgZm9yICh5ID0gMDsgeSA8IGdldG1heHkocGFucGFkKTsgeSsrKSB7CisJZm9yICh4ID0gMDsgeCA8IGdldG1heHgocGFucGFkKTsgeCsrKSB7CisJICAgIGlmICh5ICUgR1JJRFNJWkUgPT0gMCAmJiB4ICUgR1JJRFNJWkUgPT0gMCkgeworCQlpZiAoeSA9PSAwICYmIHggPT0gMCkKKwkJICAgIHdhZGRjaChwYW5wYWQsIHBhbl9saW5lcyA/IEFDU19VTENPUk5FUiA6ICcrJyk7CisJCWVsc2UgaWYgKHkgPT0gMCkKKwkJICAgIHdhZGRjaChwYW5wYWQsIHBhbl9saW5lcyA/IEFDU19UVEVFIDogJysnKTsKKwkJZWxzZSBpZiAoeSA9PSAwIHx8IHggPT0gMCkKKwkJICAgIHdhZGRjaChwYW5wYWQsIHBhbl9saW5lcyA/IEFDU19MVEVFIDogJysnKTsKKwkJZWxzZQorCQkgICAgd2FkZGNoKHBhbnBhZCwgKGNodHlwZSkgKChwYW5fbGluZXMgPyAnYScgOiAnQScpICsKKwkJCQkJICAgICAoaW50KSAoZ3JpZGNvdW50KysgJSAyNikpKTsKKwkgICAgfSBlbHNlIGlmICh5ICUgR1JJRFNJWkUgPT0gMCkKKwkJd2FkZGNoKHBhbnBhZCwgcGFuX2xpbmVzID8gQUNTX0hMSU5FIDogJy0nKTsKKwkgICAgZWxzZSBpZiAoeCAlIEdSSURTSVpFID09IDApCisJCXdhZGRjaChwYW5wYWQsIHBhbl9saW5lcyA/IEFDU19WTElORSA6ICd8Jyk7CisJICAgIGVsc2UKKwkJd2FkZGNoKHBhbnBhZCwgJyAnKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcGFubmVyKFdJTkRPVyAqcGFkLAorICAgICAgIGludCB0b3BfeCwgaW50IHRvcF95LCBpbnQgcG9ydHksIGludCBwb3J0eCwKKyAgICAgICBpbnQgKCpwZ2V0YykgKFdJTkRPVyAqKSkKK3sKKyNpZiBIQVZFX0dFVFRJTUVPRkRBWQorICAgIHN0cnVjdCB0aW1ldmFsIGJlZm9yZSwgYWZ0ZXI7CisgICAgYm9vbCB0aW1pbmcgPSBUUlVFOworI2VuZGlmCisgICAgYm9vbCBwYW5fbGluZXMgPSBGQUxTRTsKKyAgICBib29sIHNjcm9sbGVycyA9IFRSVUU7CisgICAgaW50IGJhc2V4ID0gMDsKKyAgICBpbnQgYmFzZXkgPSAwOworICAgIGludCBweG1heCwgcHltYXgsIGxvd2VuZCwgaGlnaGVuZCwgYzsKKworICAgIGdldG1heHl4KHBhZCwgcHltYXgsIHB4bWF4KTsKKyAgICBzY3JvbGxvayhzdGRzY3IsIEZBTFNFKTsJLyogd2UgZG9uJ3Qgd2FudCBzdGRzY3IgdG8gc2Nyb2xsISAqLworCisgICAgYyA9IEtFWV9SRUZSRVNIOworICAgIGRvIHsKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKwkvKgorCSAqIER1cmluZyBzaGVsbC1vdXQsIHRoZSB1c2VyIG1heSBoYXZlIHJlc2l6ZWQgdGhlIHdpbmRvdy4gIEFkanVzdAorCSAqIHRoZSBwb3J0IHNpemUgb2YgdGhlIHBhZCB0byBhY2NvbW1vZGF0ZSB0aGlzLiAgTmN1cnNlcyBhdXRvbWF0aWNhbGx5CisJICogcmVzaXplcyBhbGwgb2YgdGhlIG5vcm1hbCB3aW5kb3dzIHRvIGZpdCBvbiB0aGUgbmV3IHNjcmVlbi4KKwkgKi8KKwlpZiAodG9wX3ggPiBDT0xTKQorCSAgICB0b3BfeCA9IENPTFM7CisJaWYgKHBvcnR4ID4gQ09MUykKKwkgICAgcG9ydHggPSBDT0xTOworCWlmICh0b3BfeSA+IExJTkVTKQorCSAgICB0b3BfeSA9IExJTkVTOworCWlmIChwb3J0eSA+IExJTkVTKQorCSAgICBwb3J0eSA9IExJTkVTOworI2VuZGlmCisJc3dpdGNoIChjKSB7CisJY2FzZSBLRVlfUkVGUkVTSDoKKwkgICAgZXJhc2UoKTsKKworCSAgICAvKiBGQUxMVEhSVSAqLworCWNhc2UgJz8nOgorCSAgICBpZiAoYyA9PSAnPycpCisJCXNob3dfcGFubmVyX2xlZ2VuZCA9ICFzaG93X3Bhbm5lcl9sZWdlbmQ7CisJICAgIHBhbm5lcl9sZWdlbmQoTElORVMgLSA0KTsKKwkgICAgcGFubmVyX2xlZ2VuZChMSU5FUyAtIDMpOworCSAgICBwYW5uZXJfbGVnZW5kKExJTkVTIC0gMik7CisJICAgIHBhbm5lcl9sZWdlbmQoTElORVMgLSAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnYSc6CisJICAgIHBhbl9saW5lcyA9ICFwYW5fbGluZXM7CisJICAgIGZpbGxfcGFkKHBhZCwgcGFuX2xpbmVzKTsKKwkgICAgcGVuZGluZ19wYW4gPSBGQUxTRTsKKwkgICAgYnJlYWs7CisKKyNpZiBIQVZFX0dFVFRJTUVPRkRBWQorCWNhc2UgJ3QnOgorCSAgICB0aW1pbmcgPSAhdGltaW5nOworCSAgICBpZiAoIXRpbWluZykKKwkJcGFubmVyX2xlZ2VuZChMSU5FUyAtIDEpOworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgJ3MnOgorCSAgICBzY3JvbGxlcnMgPSAhc2Nyb2xsZXJzOworCSAgICBicmVhazsKKworCSAgICAvKiBNb3ZlIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHBhZCwga2VlcGluZyB0aGUgYm90dG9tLXJpZ2h0CisJICAgICAqIGNvcm5lciBmaXhlZC4KKwkgICAgICovCisJY2FzZSAnaCc6CQkvKiBpbmNyZWFzZS1jb2x1bW5zOiBtb3ZlIGxlZnQgZWRnZSB0byBsZWZ0ICovCisJICAgIGlmICh0b3BfeCA8PSAwKQorCQliZWVwKCk7CisJICAgIGVsc2UgeworCQlwYW5uZXJfdl9jbGVhbnVwKHRvcF95LCB0b3BfeCwgcG9ydHkpOworCQl0b3BfeC0tOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnaic6CQkvKiBkZWNyZWFzZS1saW5lczogbW92ZSB0b3AtZWRnZSBkb3duICovCisJICAgIGlmICh0b3BfeSA+PSBwb3J0eSkKKwkJYmVlcCgpOworCSAgICBlbHNlIHsKKwkJcGFubmVyX2hfY2xlYW51cCh0b3BfeSAtIDEsIHRvcF94IC0gKHRvcF94ID4gMCksIHBvcnR4KTsKKwkJdG9wX3krKzsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJ2snOgkJLyogaW5jcmVhc2UtbGluZXM6IG1vdmUgdG9wLWVkZ2UgdXAgKi8KKwkgICAgaWYgKHRvcF95IDw9IDApCisJCWJlZXAoKTsKKwkgICAgZWxzZSB7CisJCXRvcF95LS07CisJCXBhbm5lcl9oX2NsZWFudXAodG9wX3ksIHRvcF94LCBwb3J0eCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlICdsJzoJCS8qIGRlY3JlYXNlLWNvbHVtbnM6IG1vdmUgbGVmdC1lZGdlIHRvIHJpZ2h0ICovCisJICAgIGlmICh0b3BfeCA+PSBwb3J0eCkKKwkJYmVlcCgpOworCSAgICBlbHNlIHsKKwkJcGFubmVyX3ZfY2xlYW51cCh0b3BfeSAtICh0b3BfeSA+IDApLCB0b3BfeCAtIDEsIHBvcnR5KTsKKwkJdG9wX3grKzsKKwkgICAgfQorCSAgICBicmVhazsKKworCSAgICAvKiBNb3ZlIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIHRoZSBwYWQsIGtlZXBpbmcgdGhlIHRvcC1sZWZ0CisJICAgICAqIGNvcm5lciBmaXhlZC4KKwkgICAgICovCisJY2FzZSBLRVlfSUM6CQkvKiBpbmNyZWFzZS1jb2x1bW5zOiBtb3ZlIHJpZ2h0LWVkZ2UgdG8gcmlnaHQgKi8KKwkgICAgaWYgKHBvcnR4ID49IHB4bWF4IHx8IHBvcnR4ID49IENPTFMpCisJCWJlZXAoKTsKKwkgICAgZWxzZSB7CisJCXBhbm5lcl92X2NsZWFudXAodG9wX3kgLSAodG9wX3kgPiAwKSwgcG9ydHggLSAxLCBwb3J0eSk7CisJCSsrcG9ydHg7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9JTDoJCS8qIGluY3JlYXNlLWxpbmVzOiBtb3ZlIGJvdHRvbS1lZGdlIGRvd24gKi8KKwkgICAgaWYgKHBvcnR5ID49IHB5bWF4IHx8IHBvcnR5ID49IExJTkVTKQorCQliZWVwKCk7CisJICAgIGVsc2UgeworCQlwYW5uZXJfaF9jbGVhbnVwKHBvcnR5IC0gMSwgdG9wX3ggLSAodG9wX3ggPiAwKSwgcG9ydHgpOworCQkrK3BvcnR5OworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfREM6CQkvKiBkZWNyZWFzZS1jb2x1bW5zOiBtb3ZlIGJvdHRvbSBlZGdlIHVwICovCisJICAgIGlmIChwb3J0eCA8PSB0b3BfeCkKKwkJYmVlcCgpOworCSAgICBlbHNlIHsKKwkJcG9ydHgtLTsKKwkJcGFubmVyX3ZfY2xlYW51cCh0b3BfeSAtICh0b3BfeSA+IDApLCBwb3J0eCwgcG9ydHkpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfREw6CQkvKiBkZWNyZWFzZS1saW5lcyAqLworCSAgICBpZiAocG9ydHkgPD0gdG9wX3kpCisJCWJlZXAoKTsKKwkgICAgZWxzZSB7CisJCXBvcnR5LS07CisJCXBhbm5lcl9oX2NsZWFudXAocG9ydHksIHRvcF94IC0gKHRvcF94ID4gMCksIHBvcnR4KTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgS0VZX0xFRlQ6CQkvKiBwYW4gbGVmdHdhcmRzICovCisJICAgIGlmIChiYXNleCA+IDApCisJCWJhc2V4LS07CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX1JJR0hUOgkvKiBwYW4gcmlnaHR3YXJkcyAqLworCSAgICBpZiAoYmFzZXggKyBwb3J0eCAtIChweW1heCA+IHBvcnR5KSA8IHB4bWF4KQorCQliYXNleCsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9VUDoJCS8qIHBhbiB1cHdhcmRzICovCisJICAgIGlmIChiYXNleSA+IDApCisJCWJhc2V5LS07CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX0RPV046CQkvKiBwYW4gZG93bndhcmRzICovCisJICAgIGlmIChiYXNleSArIHBvcnR5IC0gKHB4bWF4ID4gcG9ydHgpIDwgcHltYXgpCisJCWJhc2V5Kys7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKworCWNhc2UgJ0gnOgorCWNhc2UgS0VZX0hPTUU6CisJY2FzZSBLRVlfRklORDoKKwkgICAgYmFzZXkgPSAwOworCSAgICBicmVhazsKKworCWNhc2UgJ0UnOgorCWNhc2UgS0VZX0VORDoKKwljYXNlIEtFWV9TRUxFQ1Q6CisJICAgIGJhc2V5ID0gcHltYXggLSBwb3J0eTsKKwkgICAgaWYgKGJhc2V5IDwgMCkKKwkJYmFzZXkgPSAwOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCisJbXZhZGRjaCh0b3BfeSAtIDEsIHRvcF94IC0gMSwgQUNTX1VMQ09STkVSKTsKKwlkb192X2xpbmUodG9wX3ksIHRvcF94IC0gMSwgQUNTX1ZMSU5FLCBwb3J0eSk7CisJZG9faF9saW5lKHRvcF95IC0gMSwgdG9wX3gsIEFDU19ITElORSwgcG9ydHgpOworCisJaWYgKHNjcm9sbGVycyAmJiAocHhtYXggPiBwb3J0eCAtIDEpKSB7CisJICAgIGludCBsZW5ndGggPSAocG9ydHggLSB0b3BfeCAtIDEpOworCSAgICBmbG9hdCByYXRpbyA9ICgoZmxvYXQpIGxlbmd0aCkgLyAoKGZsb2F0KSBweG1heCk7CisKKwkgICAgbG93ZW5kID0gKGludCkgKChmbG9hdCkgdG9wX3ggKyAoKGZsb2F0KSBiYXNleCAqIHJhdGlvKSk7CisJICAgIGhpZ2hlbmQgPSAoaW50KSAoKGZsb2F0KSB0b3BfeCArICgoZmxvYXQpIChiYXNleCArIGxlbmd0aCkgKiByYXRpbykpOworCisJICAgIGRvX2hfbGluZShwb3J0eSAtIDEsIHRvcF94LCBBQ1NfSExJTkUsIGxvd2VuZCk7CisJICAgIGlmIChoaWdoZW5kIDwgcG9ydHgpIHsKKwkJYXR0cm9uKEFfUkVWRVJTRSk7CisJCWRvX2hfbGluZShwb3J0eSAtIDEsIGxvd2VuZCwgJyAnLCBoaWdoZW5kICsgMSk7CisJCWF0dHJvZmYoQV9SRVZFUlNFKTsKKwkJZG9faF9saW5lKHBvcnR5IC0gMSwgaGlnaGVuZCArIDEsIEFDU19ITElORSwgcG9ydHgpOworCSAgICB9CisJfSBlbHNlCisJICAgIGRvX2hfbGluZShwb3J0eSAtIDEsIHRvcF94LCBBQ1NfSExJTkUsIHBvcnR4KTsKKworCWlmIChzY3JvbGxlcnMgJiYgKHB5bWF4ID4gcG9ydHkgLSAxKSkgeworCSAgICBpbnQgbGVuZ3RoID0gKHBvcnR5IC0gdG9wX3kgLSAxKTsKKwkgICAgZmxvYXQgcmF0aW8gPSAoKGZsb2F0KSBsZW5ndGgpIC8gKChmbG9hdCkgcHltYXgpOworCisJICAgIGxvd2VuZCA9IChpbnQpICgoZmxvYXQpIHRvcF95ICsgKChmbG9hdCkgYmFzZXkgKiByYXRpbykpOworCSAgICBoaWdoZW5kID0gKGludCkgKChmbG9hdCkgdG9wX3kgKyAoKGZsb2F0KSAoYmFzZXkgKyBsZW5ndGgpICogcmF0aW8pKTsKKworCSAgICBkb192X2xpbmUodG9wX3ksIHBvcnR4IC0gMSwgQUNTX1ZMSU5FLCBsb3dlbmQpOworCSAgICBpZiAoaGlnaGVuZCA8IHBvcnR5KSB7CisJCWF0dHJvbihBX1JFVkVSU0UpOworCQlkb192X2xpbmUobG93ZW5kLCBwb3J0eCAtIDEsICcgJywgaGlnaGVuZCArIDEpOworCQlhdHRyb2ZmKEFfUkVWRVJTRSk7CisJCWRvX3ZfbGluZShoaWdoZW5kICsgMSwgcG9ydHggLSAxLCBBQ1NfVkxJTkUsIHBvcnR5KTsKKwkgICAgfQorCX0gZWxzZQorCSAgICBkb192X2xpbmUodG9wX3ksIHBvcnR4IC0gMSwgQUNTX1ZMSU5FLCBwb3J0eSk7CisKKwltdmFkZGNoKHRvcF95IC0gMSwgcG9ydHggLSAxLCBBQ1NfVVJDT1JORVIpOworCW12YWRkY2gocG9ydHkgLSAxLCB0b3BfeCAtIDEsIEFDU19MTENPUk5FUik7CisJbXZhZGRjaChwb3J0eSAtIDEsIHBvcnR4IC0gMSwgQUNTX0xSQ09STkVSKTsKKworCWlmICghcGVuZGluZ19wYW4pIHsKKyNpZiBIQVZFX0dFVFRJTUVPRkRBWQorCSAgICBnZXR0aW1lb2ZkYXkoJmJlZm9yZSwgMCk7CisjZW5kaWYKKwkgICAgd25vdXRyZWZyZXNoKHN0ZHNjcik7CisKKwkgICAgcG5vdXRyZWZyZXNoKHBhZCwKKwkJCSBiYXNleSwgYmFzZXgsCisJCQkgdG9wX3ksIHRvcF94LAorCQkJIHBvcnR5IC0gKHB4bWF4ID4gcG9ydHgpIC0gMSwKKwkJCSBwb3J0eCAtIChweW1heCA+IHBvcnR5KSAtIDEpOworCisJICAgIGRvdXBkYXRlKCk7CisjaWYgSEFWRV9HRVRUSU1FT0ZEQVkKKwkgICAgaWYgKHRpbWluZykgeworCQlkb3VibGUgZWxhcHNlZDsKKwkJZ2V0dGltZW9mZGF5KCZhZnRlciwgMCk7CisJCWVsYXBzZWQgPSAoYWZ0ZXIudHZfc2VjICsgYWZ0ZXIudHZfdXNlYyAvIDEuMGU2KQorCQkgICAgLSAoYmVmb3JlLnR2X3NlYyArIGJlZm9yZS50dl91c2VjIC8gMS4wZTYpOworCQltb3ZlKExJTkVTIC0gMSwgQ09MUyAtIDEyKTsKKwkJcHJpbnR3KCJTZWNzOiAlMi4wM2YiLCBlbGFwc2VkKTsKKwkJcmVmcmVzaCgpOworCSAgICB9CisjZW5kaWYKKwl9CisKKyAgICB9IHdoaWxlCisJKChjID0gcGdldGMocGFkKSkgIT0gS0VZX0VYSVQpOworCisgICAgc2Nyb2xsb2soc3Rkc2NyLCBUUlVFKTsJLyogcmVzZXQgdG8gZHJpdmVyJ3MgZGVmYXVsdCAqLworfQorCitzdGF0aWMgaW50CitwYWRnZXRjaChXSU5ET1cgKndpbikKK3sKKyAgICBzdGF0aWMgaW50IGNvdW50OworICAgIHN0YXRpYyBpbnQgbGFzdDsKKyAgICBpbnQgYzsKKworICAgIGlmICgocGVuZGluZ19wYW4gPSAoY291bnQgPiAwKSkgIT0gRkFMU0UpIHsKKwljb3VudC0tOworCXBlbmRpbmdfcGFuID0gKGNvdW50ICE9IDApOworICAgIH0gZWxzZSB7CisJZm9yICg7OykgeworCSAgICBzd2l0Y2ggKGMgPSB3R2V0Y2hhcih3aW4pKSB7CisJICAgIGNhc2UgJyEnOgorCQlTaGVsbE91dChGQUxTRSk7CisJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgQ1RSTCgncicpOgorCQllbmR3aW4oKTsKKwkJcmVmcmVzaCgpOworCQljID0gS0VZX1JFRlJFU0g7CisJCWJyZWFrOworCSAgICBjYXNlIENUUkwoJ2wnKToKKwkJYyA9IEtFWV9SRUZSRVNIOworCQlicmVhazsKKwkgICAgY2FzZSAnVSc6CisJCWMgPSBLRVlfVVA7CisJCWJyZWFrOworCSAgICBjYXNlICdEJzoKKwkJYyA9IEtFWV9ET1dOOworCQlicmVhazsKKwkgICAgY2FzZSAnUic6CisJCWMgPSBLRVlfUklHSFQ7CisJCWJyZWFrOworCSAgICBjYXNlICdMJzoKKwkJYyA9IEtFWV9MRUZUOworCQlicmVhazsKKwkgICAgY2FzZSAnKyc6CisJCWMgPSBLRVlfSUw7CisJCWJyZWFrOworCSAgICBjYXNlICctJzoKKwkJYyA9IEtFWV9ETDsKKwkJYnJlYWs7CisJICAgIGNhc2UgJz4nOgorCQljID0gS0VZX0lDOworCQlicmVhazsKKwkgICAgY2FzZSAnPCc6CisJCWMgPSBLRVlfREM7CisJCWJyZWFrOworCSAgICBjYXNlIEVSUjoJCS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgY2FzZV9RVUlUOgorCQljb3VudCA9IDA7CisJCWMgPSBLRVlfRVhJVDsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeworCQkgICAgY291bnQgPSBjb3VudCAqIDEwICsgKGMgLSAnMCcpOworCQkgICAgY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwkgICAgbGFzdCA9IGM7CisJICAgIGJyZWFrOworCX0KKwlpZiAoY291bnQgPiAwKQorCSAgICBjb3VudC0tOworICAgIH0KKyAgICByZXR1cm4gKGxhc3QpOworfQorCisjZGVmaW5lIFBBRF9ISUdIIDIwMAorI2RlZmluZSBQQURfV0lERSAyMDAKKworc3RhdGljIHZvaWQKK2RlbW9fcGFkKHZvaWQpCisvKiBEZW1vbnN0cmF0ZSBwYWRzLiAqLworeworICAgIFdJTkRPVyAqcGFucGFkID0gbmV3cGFkKFBBRF9ISUdILCBQQURfV0lERSk7CisKKyAgICBpZiAocGFucGFkID09IDApIHsKKwlDYW5ub3QoImNhbm5vdCBjcmVhdGUgcmVxdWVzdGVkIHBhZCIpOworCXJldHVybjsKKyAgICB9CisKKyAgICBmaWxsX3BhZChwYW5wYWQsIEZBTFNFKTsKKworICAgIHBhbm5lcl9sZWdlbmQoTElORVMgLSA0KTsKKyAgICBwYW5uZXJfbGVnZW5kKExJTkVTIC0gMyk7CisgICAgcGFubmVyX2xlZ2VuZChMSU5FUyAtIDIpOworICAgIHBhbm5lcl9sZWdlbmQoTElORVMgLSAxKTsKKworICAgIGtleXBhZChwYW5wYWQsIFRSVUUpOworCisgICAgLyogTWFrZSB0aGUgcGFkIChpbml0aWFsbHkpIG5hcnJvdyBlbm91Z2ggdGhhdCBhIHRyYWNlIGZpbGUgd29uJ3Qgd3JhcC4KKyAgICAgKiBXZSdsbCBzdGlsbCBiZSBhYmxlIHRvIHdpZGVuIGl0IGR1cmluZyBhIHRlc3QsIHNpbmNlIHRoYXQncyByZXF1aXJlZAorICAgICAqIGZvciB0ZXN0aW5nIGJvdW5kYXJpZXMuCisgICAgICovCisgICAgcGFubmVyKHBhbnBhZCwgMiwgMiwgTElORVMgLSA1LCBDT0xTIC0gMTUsIHBhZGdldGNoKTsKKworICAgIGRlbHdpbihwYW5wYWQpOworICAgIGVuZHdpbigpOworICAgIGVyYXNlKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGVzdHMgZnJvbSBKb2huIEJ1cm5lbGwncyBQREN1cnNlcyB0ZXN0ZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK0NvbnRpbnVlKFdJTkRPVyAqd2luKQoreworICAgIG5vZWNobygpOworICAgIHdtb3ZlKHdpbiwgMTAsIDEpOworICAgIG12d2FkZHN0cih3aW4sIDEwLCAxLCAiIFByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIHdHZXRjaGFyKHdpbik7Cit9CisKK3N0YXRpYyB2b2lkCitmbHVzaGlucF90ZXN0KFdJTkRPVyAqd2luKQorLyogSW5wdXQgdGVzdCwgYWRhcHRlZCBmcm9tIEpvaG4gQnVybmVsbCdzIFBEQ3Vyc2VzIHRlc3RlciAqLworeworICAgIGludCB3LCBoLCBieCwgYnksIHN3LCBzaCwgaTsKKworICAgIFdJTkRPVyAqc3ViV2luOworICAgIHdjbGVhcih3aW4pOworCisgICAgZ2V0bWF4eXgod2luLCBoLCB3KTsKKyAgICBnZXRiZWd5eCh3aW4sIGJ5LCBieCk7CisgICAgc3cgPSB3IC8gMzsKKyAgICBzaCA9IGggLyAzOworICAgIGlmICgoc3ViV2luID0gc3Vid2luKHdpbiwgc2gsIHN3LCBieSArIGggLSBzaCAtIDIsIGJ4ICsgdyAtIHN3IC0gMikpID09IDApCisJcmV0dXJuOworCisjaWZkZWYgQV9DT0xPUgorICAgIGlmICh1c2VfY29sb3JzKSB7CisJaW5pdF9wYWlyKDIsIENPTE9SX0NZQU4sIENPTE9SX0JMVUUpOworCXdia2dkKHN1YldpbiwgQ09MT1JfUEFJUigyKSB8ICcgJyk7CisgICAgfQorI2VuZGlmCisgICAgd2F0dHJzZXQoc3ViV2luLCBBX0JPTEQpOworICAgIGJveChzdWJXaW4sIEFDU19WTElORSwgQUNTX0hMSU5FKTsKKyAgICBtdndhZGRzdHIoc3ViV2luLCAyLCAxLCAiVGhpcyBpcyBhIHN1YndpbmRvdyIpOworICAgIHdyZWZyZXNoKHdpbik7CisKKyAgICAvKgorICAgICAqIFRoaXMgdXNlZCB0byBzZXQgJ25vY2JyZWFrKCknLiAgSG93ZXZlciwgQWxleGFuZGVyIEx1a3lhbm92IHNheXMgdGhhdAorICAgICAqIGl0IG9ubHkgaGFwcGVuZWQgdG8gIndvcmsiIG9uIFNWcjQgYmVjYXVzZSB0aGF0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90CisgICAgICogZW11bGF0ZSBub2NicmVhaytub2VjaG8gbW9kZSwgd2hlcmVhcyBuY3Vyc2VzIGRvZXMuICBUbyBnZXQgdGhlIGRlc2lyZWQKKyAgICAgKiB0ZXN0IGJlaGF2aW9yLCB3ZSdyZSB1c2luZyAnY2JyZWFrKCknLCB3aGljaCB3aWxsIGFsbG93IGEgc2luZ2xlCisgICAgICogY2hhcmFjdGVyIHRvIHJldHVybiB3aXRob3V0IG5lZWRpbmcgYSBuZXdsaW5lLiAtIFQuRGlja2V5IDE5OTcvMTAvMTEuCisgICAgICovCisgICAgY2JyZWFrKCk7CisgICAgbXZ3YWRkc3RyKHdpbiwgMCwgMSwgIlRoaXMgaXMgYSB0ZXN0IG9mIHRoZSBmbHVzaGlucCgpIGNhbGwuIik7CisKKyAgICBtdndhZGRzdHIod2luLCAyLCAxLCAiVHlwZSByYW5kb20ga2V5cyBmb3IgNSBzZWNvbmRzLiIpOworICAgIG12d2FkZHN0cih3aW4sIDMsIDEsCisJICAgICAgIlRoZXNlIHNob3VsZCBiZSBkaXNjYXJkZWQgKG5vdCBlY2hvZWQpIGFmdGVyIHRoZSBzdWJ3aW5kb3cgZ29lcyBhd2F5LiIpOworICAgIHdyZWZyZXNoKHdpbik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJbXZ3cHJpbnR3KHN1YldpbiwgMSwgMSwgIlRpbWUgPSAlZCIsIGkpOworCXdyZWZyZXNoKHN1Yldpbik7CisJbmFwbXMoMTAwMCk7CisJZmx1c2hpbnAoKTsKKyAgICB9CisKKyAgICBkZWx3aW4oc3ViV2luKTsKKyAgICB3ZXJhc2Uod2luKTsKKyAgICBmbGFzaCgpOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgbmFwbXMoMTAwMCk7CisKKyAgICBtdndhZGRzdHIod2luLCAyLCAxLAorCSAgICAgICJJZiB5b3Ugd2VyZSBzdGlsbCB0eXBpbmcgd2hlbiB0aGUgd2luZG93IHRpbWVyIGV4cGlyZWQsIik7CisgICAgbXZ3YWRkc3RyKHdpbiwgMywgMSwKKwkgICAgICAib3IgZWxzZSB5b3UgdHlwZWQgbm90aGluZyBhdCBhbGwgd2hpbGUgaXQgd2FzIHJ1bm5pbmcsIik7CisgICAgbXZ3YWRkc3RyKHdpbiwgNCwgMSwKKwkgICAgICAidGVzdCB3YXMgaW52YWxpZC4gIFlvdSdsbCBzZWUgZ2FyYmFnZSBvciBub3RoaW5nIGF0IGFsbC4gIik7CisgICAgbXZ3YWRkc3RyKHdpbiwgNiwgMSwgIlByZXNzIGEga2V5Iik7CisgICAgd21vdmUod2luLCA5LCAxMCk7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBlY2hvKCk7CisgICAgd0dldGNoYXIod2luKTsKKyAgICBmbHVzaGlucCgpOworICAgIG12d2FkZHN0cih3aW4sIDEyLCAwLAorCSAgICAgICJJZiB5b3Ugc2VlIGFueSBrZXkgb3RoZXIgdGhhbiB3aGF0IHlvdSB0eXBlZCwgZmx1c2hpbnAoKSBpcyBicm9rZW4uIik7CisgICAgQ29udGludWUod2luKTsKKworICAgIHdtb3ZlKHdpbiwgOSwgMTApOworICAgIHdkZWxjaCh3aW4pOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgd21vdmUod2luLCAxMiwgMCk7CisgICAgY2xydG9lb2woKTsKKyAgICB3YWRkc3RyKHdpbiwKKwkgICAgIldoYXQgeW91IHR5cGVkIHNob3VsZCBub3cgaGF2ZSBiZWVuIGRlbGV0ZWQ7IGlmIG5vdCwgd2RlbGNoKCkgZmFpbGVkLiIpOworICAgIENvbnRpbnVlKHdpbik7CisKKyAgICBjYnJlYWsoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNZW51IHRlc3QKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIFVTRV9MSUJNRU5VCisKKyNkZWZpbmUgTUVOVV9ZCTgKKyNkZWZpbmUgTUVOVV9YCTgKKworc3RhdGljIGludAorbWVudV92aXJ0dWFsaXplKGludCBjKQoreworICAgIGlmIChjID09ICdcbicgfHwgYyA9PSBLRVlfRVhJVCkKKwlyZXR1cm4gKE1BWF9DT01NQU5EICsgMSk7CisgICAgZWxzZSBpZiAoYyA9PSAndScpCisJcmV0dXJuIChSRVFfU0NSX1VMSU5FKTsKKyAgICBlbHNlIGlmIChjID09ICdkJykKKwlyZXR1cm4gKFJFUV9TQ1JfRExJTkUpOworICAgIGVsc2UgaWYgKGMgPT0gJ2InIHx8IGMgPT0gS0VZX05QQUdFKQorCXJldHVybiAoUkVRX1NDUl9VUEFHRSk7CisgICAgZWxzZSBpZiAoYyA9PSAnZicgfHwgYyA9PSBLRVlfUFBBR0UpCisJcmV0dXJuIChSRVFfU0NSX0RQQUdFKTsKKyAgICBlbHNlIGlmIChjID09ICduJyB8fCBjID09IEtFWV9ET1dOKQorCXJldHVybiAoUkVRX05FWFRfSVRFTSk7CisgICAgZWxzZSBpZiAoYyA9PSAncCcgfHwgYyA9PSBLRVlfVVApCisJcmV0dXJuIChSRVFfUFJFVl9JVEVNKTsKKyAgICBlbHNlIGlmIChjID09ICcgJykKKwlyZXR1cm4gKFJFUV9UT0dHTEVfSVRFTSk7CisgICAgZWxzZSB7CisJaWYgKGMgIT0gS0VZX01PVVNFKQorCSAgICBiZWVwKCk7CisJcmV0dXJuIChjKTsKKyAgICB9Cit9CisKK3N0YXRpYyBDT05TVF9NRU5VUyBjaGFyICphbmltYWxzW10gPQoreworICAgICJMaW9ucyIsCisgICAgIlRpZ2VycyIsCisgICAgIkJlYXJzIiwKKyAgICAiKE9oIG15ISkiLAorICAgICJOZXd0cyIsCisgICAgIlBsYXR5cGkiLAorICAgICJMZW11cnMiLAorICAgICIoT2ggcmVhbGx5PyEpIiwKKyAgICAiTGVvcGFyZHMiLAorICAgICJQYW50aGVycyIsCisgICAgIlB1bWFzIiwKKyAgICAiTGlvbnMsIFRpZ2VycywgQmVhcnMsIChPaCBteSEpLCBOZXd0cywgUGxhdHlwaSwgTGVtdXJzIiwKKyAgICAiTGlvbnMsIFRpZ2VycywgQmVhcnMsIChPaCBteSEpLCBOZXd0cywgUGxhdHlwaSwgTGVtdXJzLCBMaW9ucywgVGlnZXJzLCBCZWFycywgKE9oIG15ISksIE5ld3RzLCBQbGF0eXBpLCBMZW11cnMiLAorICAgIChjaGFyICopIDAKK307CisKK3N0YXRpYyB2b2lkCittZW51X3Rlc3Qodm9pZCkKK3sKKyAgICBNRU5VICptOworICAgIElURU0gKml0ZW1zW1NJWkVPRihhbmltYWxzKV07CisgICAgSVRFTSAqKmlwID0gaXRlbXM7CisgICAgQ09OU1RfTUVOVVMgY2hhciAqKmFwOworICAgIGludCBtcm93cywgbWNvbHMsIGM7CisgICAgV0lORE9XICptZW51d2luOworCisjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCisgICAgbW91c2VtYXNrKEFMTF9NT1VTRV9FVkVOVFMsIChtbWFza190ICopIDApOworI2VuZGlmCisgICAgbXZhZGRzdHIoMCwgMCwgIlRoaXMgaXMgdGhlIG1lbnUgdGVzdDoiKTsKKyAgICBtdmFkZHN0cigyLCAwLCAiICBVc2UgdXAgYW5kIGRvd24gYXJyb3cgdG8gbW92ZSB0aGUgc2VsZWN0IGJhci4iKTsKKyAgICBtdmFkZHN0cigzLCAwLCAiICAnbicgYW5kICdwJyBhY3QgbGlrZSBhcnJvd3MuIik7CisgICAgbXZhZGRzdHIoNCwgMCwKKwkgICAgICIgICdiJyBhbmQgJ2YnIHNjcm9sbCB1cC9kb3duIChwYWdlKSwgJ3UnIGFuZCAnZCcgKGxpbmUpLiIpOworICAgIG12YWRkc3RyKDUsIDAsICIgIFByZXNzIHJldHVybiB0byBleGl0LiIpOworICAgIHJlZnJlc2goKTsKKworICAgIGZvciAoYXAgPSBhbmltYWxzOyAqYXA7IGFwKyspIHsKKwlpZiAoKCppcCA9IG5ld19pdGVtKCphcCwgIiIpKSAhPSAwKQorCSAgICArK2lwOworICAgIH0KKyAgICAqaXAgPSAoSVRFTSAqKSAwOworCisgICAgbSA9IG5ld19tZW51KGl0ZW1zKTsKKworICAgIHNldF9tZW51X2Zvcm1hdChtLCAoU0laRU9GKGFuaW1hbHMpICsgMSkgLyAyLCAxKTsKKyAgICBzY2FsZV9tZW51KG0sICZtcm93cywgJm1jb2xzKTsKKworICAgIG1lbnV3aW4gPSBuZXd3aW4obXJvd3MgKyAyLCBtY29scyArIDIsIE1FTlVfWSwgTUVOVV9YKTsKKyAgICBzZXRfbWVudV93aW4obSwgbWVudXdpbik7CisgICAga2V5cGFkKG1lbnV3aW4sIFRSVUUpOworICAgIGJveChtZW51d2luLCAwLCAwKTsKKworICAgIHNldF9tZW51X3N1YihtLCBkZXJ3aW4obWVudXdpbiwgbXJvd3MsIG1jb2xzLCAxLCAxKSk7CisKKyAgICBwb3N0X21lbnUobSk7CisKKyAgICB3aGlsZSAoKGMgPSBtZW51X2RyaXZlcihtLCBtZW51X3ZpcnR1YWxpemUod0dldGNoYXIobWVudXdpbikpKSkgIT0gRV9VTktOT1dOX0NPTU1BTkQpIHsKKwlpZiAoYyA9PSBFX05PVF9QT1NURUQpCisJICAgIGJyZWFrOworCWlmIChjID09IEVfUkVRVUVTVF9ERU5JRUQpCisJICAgIGJlZXAoKTsKKwljb250aW51ZTsKKyAgICB9CisKKyAgICAodm9pZCkgbXZwcmludHcoTElORVMgLSAyLCAwLAorCQkgICAgIllvdSBjaG9zZTogJXNcbiIsIGl0ZW1fbmFtZShjdXJyZW50X2l0ZW0obSkpKTsKKyAgICAodm9pZCkgYWRkc3RyKCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIik7CisgICAgd0dldGNoYXIoc3Rkc2NyKTsKKworICAgIHVucG9zdF9tZW51KG0pOworICAgIGRlbHdpbihtZW51d2luKTsKKworICAgIGZyZWVfbWVudShtKTsKKyAgICBmb3IgKGlwID0gaXRlbXM7ICppcDsgaXArKykKKwlmcmVlX2l0ZW0oKmlwKTsKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICBtb3VzZW1hc2soMCwgKG1tYXNrX3QgKikgMCk7CisjZW5kaWYKK30KKworI2lmZGVmIFRSQUNFCisjZGVmaW5lIFRfVEJMKG5hbWUpIHsgI25hbWUsIG5hbWUgfQorc3RhdGljIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICB1bnNpZ25lZCBtYXNrOworfSB0X3RibFtdID0geworCisgICAgVF9UQkwoVFJBQ0VfRElTQUJMRSksCisJVF9UQkwoVFJBQ0VfVElNRVMpLAorCVRfVEJMKFRSQUNFX1RQVVRTKSwKKwlUX1RCTChUUkFDRV9VUERBVEUpLAorCVRfVEJMKFRSQUNFX01PVkUpLAorCVRfVEJMKFRSQUNFX0NIQVJQVVQpLAorCVRfVEJMKFRSQUNFX09SRElOQVJZKSwKKwlUX1RCTChUUkFDRV9DQUxMUyksCisJVF9UQkwoVFJBQ0VfVklSVFBVVCksCisJVF9UQkwoVFJBQ0VfSUVWRU5UKSwKKwlUX1RCTChUUkFDRV9CSVRTKSwKKwlUX1RCTChUUkFDRV9JQ0FMTFMpLAorCVRfVEJMKFRSQUNFX0NDQUxMUyksCisJVF9UQkwoVFJBQ0VfREFUQUJBU0UpLAorCVRfVEJMKFRSQUNFX0FUVFJTKSwKKwlUX1RCTChUUkFDRV9NQVhJTVVNKSwKKyAgICB7CisJKGNoYXIgKikgMCwgMAorICAgIH0KK307CisKK3N0YXRpYyBjaGFyICoKK3RyYWNldHJhY2UodW5zaWduZWQgdGxldmVsKQoreworICAgIHN0YXRpYyBjaGFyICpidWY7CisgICAgaW50IG47CisKKyAgICBpZiAoYnVmID09IDApIHsKKwlzaXplX3QgbmVlZCA9IDEyOworCWZvciAobiA9IDA7IHRfdGJsW25dLm5hbWUgIT0gMDsgbisrKQorCSAgICBuZWVkICs9IHN0cmxlbih0X3RibFtuXS5uYW1lKSArIDI7CisJYnVmID0gdHlwZU1hbGxvYyhjaGFyLCBuZWVkKTsKKyAgICB9CisgICAgc3ByaW50ZihidWYsICIweCUwMnggPSB7IiwgdGxldmVsKTsKKyAgICBpZiAodGxldmVsID09IDApIHsKKwlzcHJpbnRmKGJ1ZiArIHN0cmxlbihidWYpLCAiJXMsICIsIHRfdGJsWzBdLm5hbWUpOworICAgIH0gZWxzZSB7CisJZm9yIChuID0gMTsgdF90Ymxbbl0ubmFtZSAhPSAwOyBuKyspCisJICAgIGlmICgodGxldmVsICYgdF90Ymxbbl0ubWFzaykgPT0gdF90Ymxbbl0ubWFzaykgeworCQlzdHJjYXQoYnVmLCB0X3RibFtuXS5uYW1lKTsKKwkJc3RyY2F0KGJ1ZiwgIiwgIik7CisJICAgIH0KKyAgICB9CisgICAgaWYgKGJ1ZltzdHJsZW4oYnVmKSAtIDJdID09ICcsJykKKwlidWZbc3RybGVuKGJ1ZikgLSAyXSA9ICdcMCc7CisgICAgcmV0dXJuIChzdHJjYXQoYnVmLCAifSIpKTsKK30KKworLyogZmFrZSBhIGR5bmFtaWNhbGx5IHJlY29uZmlndXJhYmxlIG1lbnUgdXNpbmcgdGhlIDB0aCBlbnRyeSB0byBkZXNlbGVjdAorICogdGhlIG90aGVycworICovCitzdGF0aWMgaW50CitydW5fdHJhY2VfbWVudShNRU5VICogbSkKK3sKKyAgICBJVEVNICoqaXRlbXM7CisgICAgSVRFTSAqaSwgKipwOworCisgICAgZm9yICg7OykgeworCWJvb2wgY2hhbmdlZCA9IEZBTFNFOworCXN3aXRjaCAobWVudV9kcml2ZXIobSwgbWVudV92aXJ0dWFsaXplKHdHZXRjaGFyKG1lbnVfd2luKG0pKSkpKSB7CisJY2FzZSBFX1VOS05PV05fQ09NTUFORDoKKwkgICAgcmV0dXJuIEZBTFNFOworCWRlZmF1bHQ6CisJICAgIGl0ZW1zID0gbWVudV9pdGVtcyhtKTsKKwkgICAgaSA9IGN1cnJlbnRfaXRlbShtKTsKKwkgICAgaWYgKGkgPT0gaXRlbXNbMF0pIHsKKwkJaWYgKGl0ZW1fdmFsdWUoaSkpIHsKKwkJICAgIGZvciAocCA9IGl0ZW1zICsgMTsgKnAgIT0gMDsgcCsrKQorCQkJaWYgKGl0ZW1fdmFsdWUoKnApKSB7CisJCQkgICAgc2V0X2l0ZW1fdmFsdWUoKnAsIEZBTFNFKTsKKwkJCSAgICBjaGFuZ2VkID0gVFJVRTsKKwkJCX0KKwkJfQorCSAgICB9IGVsc2UgeworCQlmb3IgKHAgPSBpdGVtcyArIDE7ICpwICE9IDA7IHArKykKKwkJICAgIGlmIChpdGVtX3ZhbHVlKCpwKSkgeworCQkJc2V0X2l0ZW1fdmFsdWUoaXRlbXNbMF0sIEZBTFNFKTsKKwkJCWNoYW5nZWQgPSBUUlVFOworCQkJYnJlYWs7CisJCSAgICB9CisJICAgIH0KKwkgICAgaWYgKCFjaGFuZ2VkKQorCQlyZXR1cm4gVFJVRTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAordHJhY2Vfc2V0KHZvaWQpCisvKiBpbnRlcmFjdGl2ZWx5IHNldCB0aGUgdHJhY2UgbGV2ZWwgKi8KK3sKKyAgICBNRU5VICptOworICAgIElURU0gKml0ZW1zW1NJWkVPRih0X3RibCldOworICAgIElURU0gKippcCA9IGl0ZW1zOworICAgIGludCBtcm93cywgbWNvbHM7CisgICAgdW5zaWduZWQgbmV3dHJhY2U7CisgICAgaW50IG47CisgICAgV0lORE9XICptZW51d2luOworCisgICAgbXZhZGRzdHIoMCwgMCwgIkludGVyYWN0aXZlbHkgc2V0IHRyYWNlIGxldmVsOiIpOworICAgIG12YWRkc3RyKDIsIDAsICIgIFByZXNzIHNwYWNlIGJhciB0byB0b2dnbGUgYSBzZWxlY3Rpb24uIik7CisgICAgbXZhZGRzdHIoMywgMCwgIiAgVXNlIHVwIGFuZCBkb3duIGFycm93IHRvIG1vdmUgdGhlIHNlbGVjdCBiYXIuIik7CisgICAgbXZhZGRzdHIoNCwgMCwgIiAgUHJlc3MgcmV0dXJuIHRvIHNldCB0aGUgdHJhY2UgbGV2ZWwuIik7CisgICAgbXZwcmludHcoNiwgMCwgIihDdXJyZW50IHRyYWNlIGxldmVsIGlzICVzKSIsIHRyYWNldHJhY2UoX25jX3RyYWNpbmcpKTsKKworICAgIHJlZnJlc2goKTsKKworICAgIGZvciAobiA9IDA7IHRfdGJsW25dLm5hbWUgIT0gMDsgbisrKSB7CisJaWYgKCgqaXAgPSBuZXdfaXRlbSh0X3RibFtuXS5uYW1lLCAiIikpICE9IDApIHsKKwkgICAgKytpcDsKKwl9CisgICAgfQorICAgICppcCA9IChJVEVNICopIDA7CisKKyAgICBtID0gbmV3X21lbnUoaXRlbXMpOworCisgICAgc2V0X21lbnVfZm9ybWF0KG0sIDAsIDIpOworICAgIHNjYWxlX21lbnUobSwgJm1yb3dzLCAmbWNvbHMpOworCisgICAgbWVudV9vcHRzX29mZihtLCBPX09ORVZBTFVFKTsKKyAgICBtZW51d2luID0gbmV3d2luKG1yb3dzICsgMiwgbWNvbHMgKyAyLCBNRU5VX1ksIE1FTlVfWCk7CisgICAgc2V0X21lbnVfd2luKG0sIG1lbnV3aW4pOworICAgIGtleXBhZChtZW51d2luLCBUUlVFKTsKKyAgICBib3gobWVudXdpbiwgMCwgMCk7CisKKyAgICBzZXRfbWVudV9zdWIobSwgZGVyd2luKG1lbnV3aW4sIG1yb3dzLCBtY29scywgMSwgMSkpOworCisgICAgcG9zdF9tZW51KG0pOworCisgICAgZm9yIChpcCA9IG1lbnVfaXRlbXMobSk7ICppcDsgaXArKykgeworCXVuc2lnbmVkIG1hc2sgPSB0X3RibFtpdGVtX2luZGV4KCppcCldLm1hc2s7CisJaWYgKG1hc2sgPT0gMCkKKwkgICAgc2V0X2l0ZW1fdmFsdWUoKmlwLCBfbmNfdHJhY2luZyA9PSAwKTsKKwllbHNlIGlmICgobWFzayAmIF9uY190cmFjaW5nKSA9PSBtYXNrKQorCSAgICBzZXRfaXRlbV92YWx1ZSgqaXAsIFRSVUUpOworICAgIH0KKworICAgIHdoaWxlIChydW5fdHJhY2VfbWVudShtKSkKKwljb250aW51ZTsKKworICAgIG5ld3RyYWNlID0gMDsKKyAgICBmb3IgKGlwID0gbWVudV9pdGVtcyhtKTsgKmlwOyBpcCsrKQorCWlmIChpdGVtX3ZhbHVlKCppcCkpCisJICAgIG5ld3RyYWNlIHw9IHRfdGJsW2l0ZW1faW5kZXgoKmlwKV0ubWFzazsKKyAgICB0cmFjZShuZXd0cmFjZSk7CisgICAgVHJhY2UoKCJ0cmFjZSBsZXZlbCBpbnRlcmFjdGl2ZWx5IHNldCB0byAlcyIsIHRyYWNldHJhY2UoX25jX3RyYWNpbmcpKSk7CisKKyAgICAodm9pZCkgbXZwcmludHcoTElORVMgLSAyLCAwLAorCQkgICAgIlRyYWNlIGxldmVsIGlzICVzXG4iLCB0cmFjZXRyYWNlKF9uY190cmFjaW5nKSk7CisgICAgKHZvaWQpIGFkZHN0cigiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpOworICAgIHdHZXRjaGFyKHN0ZHNjcik7CisKKyAgICB1bnBvc3RfbWVudShtKTsKKyAgICBkZWx3aW4obWVudXdpbik7CisKKyAgICBmcmVlX21lbnUobSk7CisgICAgZm9yIChpcCA9IGl0ZW1zOyAqaXA7IGlwKyspCisJZnJlZV9pdGVtKCppcCk7Cit9CisjZW5kaWYgLyogVFJBQ0UgKi8KKyNlbmRpZiAvKiBVU0VfTElCTUVOVSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZvcm1zIHRlc3QKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBVU0VfTElCRk9STQorc3RhdGljIEZJRUxEICoKK21ha2VfbGFiZWwoaW50IGZyb3csIGludCBmY29sLCBOQ1VSU0VTX0NPTlNUIGNoYXIgKmxhYmVsKQoreworICAgIEZJRUxEICpmID0gbmV3X2ZpZWxkKDEsIChpbnQpIHN0cmxlbihsYWJlbCksIGZyb3csIGZjb2wsIDAsIDApOworCisgICAgaWYgKGYpIHsKKwlzZXRfZmllbGRfYnVmZmVyKGYsIDAsIGxhYmVsKTsKKwlzZXRfZmllbGRfb3B0cyhmLCAoaW50KSAoZmllbGRfb3B0cyhmKSAmIH5PX0FDVElWRSkpOworICAgIH0KKyAgICByZXR1cm4gKGYpOworfQorCitzdGF0aWMgRklFTEQgKgorbWFrZV9maWVsZChpbnQgZnJvdywgaW50IGZjb2wsIGludCByb3dzLCBpbnQgY29scywgYm9vbCBzZWN1cmUpCit7CisgICAgRklFTEQgKmYgPSBuZXdfZmllbGQocm93cywgY29scywgZnJvdywgZmNvbCwgMCwgc2VjdXJlID8gMSA6IDApOworCisgICAgaWYgKGYpIHsKKwlzZXRfZmllbGRfYmFjayhmLCBBX1VOREVSTElORSk7CisJc2V0X2ZpZWxkX3VzZXJwdHIoZiwgKHZvaWQgKikgMCk7CisgICAgfQorICAgIHJldHVybiAoZik7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNwbGF5X2Zvcm0oRk9STSAqIGYpCit7CisgICAgV0lORE9XICp3OworICAgIGludCByb3dzLCBjb2xzOworCisgICAgc2NhbGVfZm9ybShmLCAmcm93cywgJmNvbHMpOworCisgICAgaWYgKCh3ID0gbmV3d2luKHJvd3MgKyAyLCBjb2xzICsgNCwgMCwgMCkpICE9IChXSU5ET1cgKikgMCkgeworCXNldF9mb3JtX3dpbihmLCB3KTsKKwlzZXRfZm9ybV9zdWIoZiwgZGVyd2luKHcsIHJvd3MsIGNvbHMsIDEsIDIpKTsKKwlib3godywgMCwgMCk7CisJa2V5cGFkKHcsIFRSVUUpOworICAgIH0KKworICAgIGlmIChwb3N0X2Zvcm0oZikgIT0gRV9PSykKKwl3cmVmcmVzaCh3KTsKK30KKworc3RhdGljIHZvaWQKK2VyYXNlX2Zvcm0oRk9STSAqIGYpCit7CisgICAgV0lORE9XICp3ID0gZm9ybV93aW4oZik7CisgICAgV0lORE9XICpzID0gZm9ybV9zdWIoZik7CisKKyAgICB1bnBvc3RfZm9ybShmKTsKKyAgICB3ZXJhc2Uodyk7CisgICAgd3JlZnJlc2godyk7CisgICAgZGVsd2luKHMpOworICAgIGRlbHdpbih3KTsKK30KKworc3RhdGljIGludAorZWRpdF9zZWN1cmUoRklFTEQgKiBtZSwgaW50IGMpCit7CisgICAgaW50IHJvd3MsIGNvbHMsIGZyb3csIGZjb2wsIG5yb3csIG5idWY7CisKKyAgICBpZiAoZmllbGRfaW5mbyhtZSwgJnJvd3MsICZjb2xzLCAmZnJvdywgJmZjb2wsICZucm93LCAmbmJ1ZikgPT0gRV9PSworCSYmIG5idWYgPiAwKSB7CisJY2hhciAqc291cmNlID0gZmllbGRfYnVmZmVyKG1lLCAxKTsKKwljaGFyIHRlbXBbODBdOworCWxvbmcgbGVuOworCisJc3RyY3B5KHRlbXAsIHNvdXJjZSA/IHNvdXJjZSA6ICIiKTsKKwlsZW4gPSAobG9uZykgKGNoYXIgKikgZmllbGRfdXNlcnB0cihtZSk7CisJaWYgKGMgPD0gS0VZX01BWCkgeworCSAgICBpZiAoaXNncmFwaChjKSAmJiAobGVuICsgMSkgPCAoaW50KSBzaXplb2YodGVtcCkpIHsKKwkJdGVtcFtsZW4rK10gPSAoY2hhcikgYzsKKwkJdGVtcFtsZW5dID0gMDsKKwkJc2V0X2ZpZWxkX2J1ZmZlcihtZSwgMSwgdGVtcCk7CisJCWMgPSAnKic7CisJICAgIH0gZWxzZSB7CisJCWMgPSAwOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgc3dpdGNoIChjKSB7CisJICAgIGNhc2UgUkVRX0JFR19GSUVMRDoKKwkgICAgY2FzZSBSRVFfQ0xSX0VPRjoKKwkgICAgY2FzZSBSRVFfQ0xSX0VPTDoKKwkgICAgY2FzZSBSRVFfREVMX0xJTkU6CisJICAgIGNhc2UgUkVRX0RFTF9XT1JEOgorCSAgICBjYXNlIFJFUV9ET1dOX0NIQVI6CisJICAgIGNhc2UgUkVRX0VORF9GSUVMRDoKKwkgICAgY2FzZSBSRVFfSU5TX0NIQVI6CisJICAgIGNhc2UgUkVRX0lOU19MSU5FOgorCSAgICBjYXNlIFJFUV9MRUZUX0NIQVI6CisJICAgIGNhc2UgUkVRX05FV19MSU5FOgorCSAgICBjYXNlIFJFUV9ORVhUX1dPUkQ6CisJICAgIGNhc2UgUkVRX1BSRVZfV09SRDoKKwkgICAgY2FzZSBSRVFfUklHSFRfQ0hBUjoKKwkgICAgY2FzZSBSRVFfVVBfQ0hBUjoKKwkJYyA9IDA7CQkvKiB3ZSBkb24ndCB3YW50IHRvIGRvIGlubGluZSBlZGl0aW5nICovCisJCWJyZWFrOworCSAgICBjYXNlIFJFUV9DTFJfRklFTEQ6CisJCWlmIChsZW4pIHsKKwkJICAgIHRlbXBbMF0gPSAwOworCQkgICAgc2V0X2ZpZWxkX2J1ZmZlcihtZSwgMSwgdGVtcCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgUkVRX0RFTF9DSEFSOgorCSAgICBjYXNlIFJFUV9ERUxfUFJFVjoKKwkJaWYgKGxlbikgeworCQkgICAgdGVtcFstLWxlbl0gPSAwOworCQkgICAgc2V0X2ZpZWxkX2J1ZmZlcihtZSwgMSwgdGVtcCk7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJc2V0X2ZpZWxkX3VzZXJwdHIobWUsICh2b2lkICopIGxlbik7CisgICAgfQorICAgIHJldHVybiBjOworfQorCitzdGF0aWMgaW50Citmb3JtX3ZpcnR1YWxpemUoRk9STSAqIGYsIFdJTkRPVyAqdykKK3sKKyAgICAvKiAqSU5ERU5ULU9GRiogKi8KKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQgY29kZTsKKwlpbnQgcmVzdWx0OworICAgIH0gbG9va3VwW10gPSB7CisJeyBDVFJMKCdBJyksCVJFUV9ORVhUX0NIT0lDRSB9LAorCXsgQ1RSTCgnQicpLAlSRVFfUFJFVl9XT1JEIH0sCisJeyBDVFJMKCdDJyksCVJFUV9DTFJfRU9MIH0sCisJeyBDVFJMKCdEJyksCVJFUV9ET1dOX0ZJRUxEIH0sCisJeyBDVFJMKCdFJyksCVJFUV9FTkRfRklFTEQgfSwKKwl7IENUUkwoJ0YnKSwJUkVRX05FWFRfUEFHRSB9LAorCXsgQ1RSTCgnRycpLAlSRVFfREVMX1dPUkQgfSwKKwl7IENUUkwoJ0gnKSwJUkVRX0RFTF9QUkVWIH0sCisJeyBDVFJMKCdJJyksCVJFUV9JTlNfQ0hBUiB9LAorCXsgQ1RSTCgnSycpLAlSRVFfQ0xSX0VPRiB9LAorCXsgQ1RSTCgnTCcpLAlSRVFfTEVGVF9GSUVMRCB9LAorCXsgQ1RSTCgnTScpLAlSRVFfTkVXX0xJTkUgfSwKKwl7IENUUkwoJ04nKSwJUkVRX05FWFRfRklFTEQgfSwKKwl7IENUUkwoJ08nKSwJUkVRX0lOU19MSU5FIH0sCisJeyBDVFJMKCdQJyksCVJFUV9QUkVWX0ZJRUxEIH0sCisJeyBDVFJMKCdSJyksCVJFUV9SSUdIVF9GSUVMRCB9LAorCXsgQ1RSTCgnUycpLAlSRVFfQkVHX0ZJRUxEIH0sCisJeyBDVFJMKCdVJyksCVJFUV9VUF9GSUVMRCB9LAorCXsgQ1RSTCgnVicpLAlSRVFfREVMX0NIQVIgfSwKKwl7IENUUkwoJ1cnKSwJUkVRX05FWFRfV09SRCB9LAorCXsgQ1RSTCgnWCcpLAlSRVFfQ0xSX0ZJRUxEIH0sCisJeyBDVFJMKCdZJyksCVJFUV9ERUxfTElORSB9LAorCXsgQ1RSTCgnWicpLAlSRVFfUFJFVl9DSE9JQ0UgfSwKKwl7IEVTQ0FQRSwJTUFYX0ZPUk1fQ09NTUFORCArIDEgfSwKKwl7IEtFWV9CQUNLU1BBQ0UsIFJFUV9ERUxfUFJFViB9LAorCXsgS0VZX0RPV04sCVJFUV9ET1dOX0NIQVIgfSwKKwl7IEtFWV9FTkQsCVJFUV9MQVNUX0ZJRUxEIH0sCisJeyBLRVlfSE9NRSwJUkVRX0ZJUlNUX0ZJRUxEIH0sCisJeyBLRVlfTEVGVCwJUkVRX0xFRlRfQ0hBUiB9LAorCXsgS0VZX0xMLAlSRVFfTEFTVF9GSUVMRCB9LAorCXsgS0VZX05FWFQsCVJFUV9ORVhUX0ZJRUxEIH0sCisJeyBLRVlfTlBBR0UsCVJFUV9ORVhUX1BBR0UgfSwKKwl7IEtFWV9QUEFHRSwJUkVRX1BSRVZfUEFHRSB9LAorCXsgS0VZX1BSRVZJT1VTLCBSRVFfUFJFVl9GSUVMRCB9LAorCXsgS0VZX1JJR0hULAlSRVFfUklHSFRfQ0hBUiB9LAorCXsgS0VZX1VQLAlSRVFfVVBfQ0hBUiB9LAorCXsgUVVJVCwJCU1BWF9GT1JNX0NPTU1BTkQgKyAxIH0KKyAgICB9OworICAgIC8qICpJTkRFTlQtT04qICovCisKKyAgICBzdGF0aWMgaW50IG1vZGUgPSBSRVFfSU5TX01PREU7CisgICAgaW50IGMgPSB3R2V0Y2hhcih3KTsKKyAgICB1bnNpZ25lZCBuOworICAgIEZJRUxEICptZSA9IGN1cnJlbnRfZmllbGQoZik7CisgICAgYm9vbCBjdXJyZW50ID0gVFJVRTsKKworICAgIGlmIChjID09IENUUkwoJ10nKSkgeworCWlmIChtb2RlID09IFJFUV9JTlNfTU9ERSkgeworCSAgICBtb2RlID0gUkVRX09WTF9NT0RFOworCX0gZWxzZSB7CisJICAgIG1vZGUgPSBSRVFfSU5TX01PREU7CisJfQorCWMgPSBtb2RlOworICAgIH0gZWxzZSB7CisJZm9yIChuID0gMDsgbiA8IFNJWkVPRihsb29rdXApOyBuKyspIHsKKwkgICAgaWYgKGxvb2t1cFtuXS5jb2RlID09IGMpIHsKKwkJYyA9IGxvb2t1cFtuXS5yZXN1bHQ7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICBtdnByaW50dygwLCBDT0xTIC0gNiwgIiglcykiLCBtb2RlID09IFJFUV9JTlNfTU9ERSA/ICJJTlMiIDogIk9WTCIpOworCisgICAgLyoKKyAgICAgKiBGb3JjZSB0aGUgZmllbGQgdGhhdCB0aGUgdXNlciBpcyB0eXBpbmcgaW50byB0byBiZSBpbiByZXZlcnNlIHZpZGVvLAorICAgICAqIHdoaWxlIHRoZSBvdGhlciBmaWVsZHMgYXJlIHNob3duIHVuZGVybGluZWQuCisgICAgICovCisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSBSRVFfQkVHX0ZJRUxEOgorICAgIGNhc2UgUkVRX0NMUl9FT0Y6CisgICAgY2FzZSBSRVFfQ0xSX0VPTDoKKyAgICBjYXNlIFJFUV9DTFJfRklFTEQ6CisgICAgY2FzZSBSRVFfREVMX0NIQVI6CisgICAgY2FzZSBSRVFfREVMX0xJTkU6CisgICAgY2FzZSBSRVFfREVMX1BSRVY6CisgICAgY2FzZSBSRVFfREVMX1dPUkQ6CisgICAgY2FzZSBSRVFfRU5EX0ZJRUxEOgorICAgIGNhc2UgUkVRX0lOU19DSEFSOgorICAgIGNhc2UgUkVRX0lOU19MSU5FOgorICAgIGNhc2UgUkVRX0xFRlRfQ0hBUjoKKyAgICBjYXNlIFJFUV9MRUZUX0ZJRUxEOgorICAgIGNhc2UgUkVRX05FWFRfV09SRDoKKyAgICBjYXNlIFJFUV9SSUdIVF9DSEFSOgorCWN1cnJlbnQgPSBUUlVFOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisJY3VycmVudCA9IChjIDwgS0VZX01BWCk7CisJYnJlYWs7CisgICAgfQorICAgIGlmIChjdXJyZW50KSB7CisJYyA9IGVkaXRfc2VjdXJlKG1lLCBjKTsKKwlzZXRfZmllbGRfYmFjayhtZSwgQV9SRVZFUlNFKTsKKyAgICB9IGVsc2UgeworCWMgPSBlZGl0X3NlY3VyZShtZSwgYyk7CisJc2V0X2ZpZWxkX2JhY2sobWUsIEFfVU5ERVJMSU5FKTsKKyAgICB9CisgICAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQKK215X2Zvcm1fZHJpdmVyKEZPUk0gKiBmb3JtLCBpbnQgYykKK3sKKyAgICBpZiAoYyA9PSAoTUFYX0ZPUk1fQ09NTUFORCArIDEpCisJJiYgZm9ybV9kcml2ZXIoZm9ybSwgUkVRX1ZBTElEQVRJT04pID09IEVfT0spCisJcmV0dXJuIChUUlVFKTsKKyAgICBlbHNlIHsKKwliZWVwKCk7CisJcmV0dXJuIChGQUxTRSk7CisgICAgfQorfQorCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisjZGVmaW5lIEZJRUxEQ0hFQ0tfQ0IoZnVuYykgYm9vbCBmdW5jKEZJRUxEICogZmxkLCBjb25zdCB2b2lkICogZGF0YSBHQ0NfVU5VU0VEKQorI2RlZmluZSBDSEFSX0NIRUNLX0NCKGZ1bmMpIGJvb2wgZnVuYyhpbnQgY2gsIGNvbnN0IHZvaWQgKmRhdGEgR0NDX1VOVVNFRCkKKyNlbHNlCisjZGVmaW5lIEZJRUxEQ0hFQ0tfQ0IoZnVuYykgaW50IGZ1bmMoRklFTEQgKiBmbGQsIGNoYXIgKiBkYXRhIEdDQ19VTlVTRUQpCisjZGVmaW5lIENIQVJfQ0hFQ0tfQ0IoZnVuYykgaW50IGZ1bmMoaW50IGNoLCBjaGFyICpkYXRhIEdDQ19VTlVTRUQpCisjZW5kaWYKKworLyoKKyAqIEFsbG93IGEgbWlkZGxlIGluaXRpYWwsIG9wdGlvbmFsbHkgd2l0aCBhICcuJyB0byBlbmQgaXQuCisgKi8KK3N0YXRpYworRklFTERDSEVDS19DQihtaV9maWVsZF9jaGVjaykKK3sKKyAgICBjaGFyICpzID0gZmllbGRfYnVmZmVyKGZsZCwgMCk7CisgICAgaW50IHN0YXRlID0gMDsKKyAgICBpbnQgbjsKKworICAgIGZvciAobiA9IDA7IHNbbl0gIT0gJ1wwJzsgKytuKSB7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgMDoKKwkgICAgaWYgKHNbbl0gPT0gJy4nKSB7CisJCWlmIChuICE9IDEpCisJCSAgICByZXR1cm4gRkFMU0U7CisJCXN0YXRlID0gMjsKKwkgICAgfSBlbHNlIGlmIChpc3NwYWNlKFVDaGFyKHNbbl0pKSkgeworCQlzdGF0ZSA9IDI7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBpZiAoIWlzc3BhY2UoVUNoYXIoc1tuXSkpKQorCQlyZXR1cm4gRkFMU0U7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICAvKiBmb3JjZSB0aGUgZm9ybSB0byBkaXNwbGF5IGEgbGVhZGluZyBjYXBpdGFsICovCisgICAgaWYgKGlzbG93ZXIoVUNoYXIoc1swXSkpKSB7CisJc1swXSA9IChjaGFyKSB0b3VwcGVyKFVDaGFyKHNbMF0pKTsKKwlzZXRfZmllbGRfYnVmZmVyKGZsZCwgMCwgcyk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMKK0NIQVJfQ0hFQ0tfQ0IobWlfY2hhcl9jaGVjaykKK3sKKyAgICByZXR1cm4gKChpc2FscGhhKGNoKSB8fCBjaCA9PSAnLicpID8gVFJVRSA6IEZBTFNFKTsKK30KKworLyoKKyAqIFBhc3N3b3JkcyBzaG91bGQgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzLgorICovCitzdGF0aWMKK0ZJRUxEQ0hFQ0tfQ0IocHdfZmllbGRfY2hlY2spCit7CisgICAgY2hhciAqcyA9IGZpZWxkX2J1ZmZlcihmbGQsIDApOworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgc1tuXSAhPSAnXDAnOyArK24pIHsKKwlpZiAoaXNzcGFjZShVQ2hhcihzW25dKSkpIHsKKwkgICAgaWYgKG4gPCA2KQorCQlyZXR1cm4gRkFMU0U7CisJfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljCitDSEFSX0NIRUNLX0NCKHB3X2NoYXJfY2hlY2spCit7CisgICAgcmV0dXJuIChpc2dyYXBoKGNoKSA/IFRSVUUgOiBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCitkZW1vX2Zvcm1zKHZvaWQpCit7CisgICAgV0lORE9XICp3OworICAgIEZPUk0gKmZvcm07CisgICAgRklFTEQgKmZbMTJdLCAqc2VjdXJlOworICAgIEZJRUxEVFlQRSAqZnR5X21pZGRsZSA9IG5ld19maWVsZHR5cGUobWlfZmllbGRfY2hlY2ssIG1pX2NoYXJfY2hlY2spOworICAgIEZJRUxEVFlQRSAqZnR5X3Bhc3N3ZCA9IG5ld19maWVsZHR5cGUocHdfZmllbGRfY2hlY2ssIHB3X2NoYXJfY2hlY2spOworICAgIGludCBmaW5pc2hlZCA9IDAsIGM7CisgICAgdW5zaWduZWQgbiA9IDA7CisKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICBtb3VzZW1hc2soQUxMX01PVVNFX0VWRU5UUywgKG1tYXNrX3QgKikgMCk7CisjZW5kaWYKKworICAgIG1vdmUoMTgsIDApOworICAgIGFkZHN0cigiRGVmaW5lZCBlZGl0L3RyYXZlcnNhbCBrZXlzOiAgIF5RL0VTQy0gZXhpdCBmb3JtXG4iKTsKKyAgICBhZGRzdHIoIl5OICAgLS0gZ28gdG8gbmV4dCBmaWVsZCAgICAgICBeUCAgLS0gZ28gdG8gcHJldmlvdXMgZmllbGRcbiIpOworICAgIGFkZHN0cigiSG9tZSAtLSBnbyB0byBmaXJzdCBmaWVsZCAgICAgIEVuZCAtLSBnbyB0byBsYXN0IGZpZWxkXG4iKTsKKyAgICBhZGRzdHIoIl5MICAgLS0gZ28gdG8gZmllbGQgdG8gbGVmdCAgICBeUiAgLS0gZ28gdG8gZmllbGQgdG8gcmlnaHRcbiIpOworICAgIGFkZHN0cigiXlUgICAtLSBtb3ZlIHVwd2FyZCB0byBmaWVsZCAgIF5EICAtLSBtb3ZlIGRvd253YXJkIHRvIGZpZWxkXG4iKTsKKyAgICBhZGRzdHIoIl5XICAgLS0gZ28gdG8gbmV4dCB3b3JkICAgICAgICBeQiAgLS0gZ28gdG8gcHJldmlvdXMgd29yZFxuIik7CisgICAgYWRkc3RyKCJeUyAgIC0tIGdvIHRvIHN0YXJ0IG9mIGZpZWxkICAgXkUgIC0tIGdvIHRvIGVuZCBvZiBmaWVsZFxuIik7CisgICAgYWRkc3RyKCJeSCAgIC0tIGRlbGV0ZSBwcmV2aW91cyBjaGFyICAgXlkgIC0tIGRlbGV0ZSBsaW5lXG4iKTsKKyAgICBhZGRzdHIoIl5HICAgLS0gZGVsZXRlIGN1cnJlbnQgd29yZCAgICBeQyAgLS0gY2xlYXIgdG8gZW5kIG9mIGxpbmVcbiIpOworICAgIGFkZHN0cigiXksgICAtLSBjbGVhciB0byBlbmQgb2YgZmllbGQgIF5YICAtLSBjbGVhciBmaWVsZFxuIik7CisgICAgYWRkc3RyKCJBcnJvdyBrZXlzIG1vdmUgd2l0aGluIGEgZmllbGQgYXMgeW91IHdvdWxkIGV4cGVjdC4gXl0gdG9nZ2xlcyBvdmVybGF5IG1vZGUuIik7CisKKyAgICBtdmFkZHN0cig0LCA1NywgIkZvcm1zIEVudHJ5IFRlc3QiKTsKKworICAgIHJlZnJlc2goKTsKKworICAgIC8qIGRlc2NyaWJlIHRoZSBmb3JtICovCisgICAgbWVtc2V0KGYsIDAsIHNpemVvZihmKSk7CisgICAgZltuKytdID0gbWFrZV9sYWJlbCgwLCAxNSwgIlNhbXBsZSBGb3JtIik7CisKKyAgICBmW24rK10gPSBtYWtlX2xhYmVsKDIsIDAsICJMYXN0IE5hbWUiKTsKKyAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDAsIDEsIDE4LCBGQUxTRSk7CisgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIFRZUEVfQUxQSEEsIDEpOworCisgICAgZltuKytdID0gbWFrZV9sYWJlbCgyLCAyMCwgIkZpcnN0IE5hbWUiKTsKKyAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDMsIDIwLCAxLCAxMiwgRkFMU0UpOworICAgIHNldF9maWVsZF90eXBlKGZbbiAtIDFdLCBUWVBFX0FMUEhBLCAxKTsKKworICAgIGZbbisrXSA9IG1ha2VfbGFiZWwoMiwgMzQsICJNaWRkbGUgTmFtZSIpOworICAgIGZbbisrXSA9IG1ha2VfZmllbGQoMywgMzQsIDEsIDEyLCBGQUxTRSk7CisgICAgc2V0X2ZpZWxkX3R5cGUoZltuIC0gMV0sIGZ0eV9taWRkbGUpOworCisgICAgZltuKytdID0gbWFrZV9sYWJlbCg1LCAwLCAiQ29tbWVudHMiKTsKKyAgICBmW24rK10gPSBtYWtlX2ZpZWxkKDYsIDAsIDQsIDQ2LCBGQUxTRSk7CisKKyAgICBmW24rK10gPSBtYWtlX2xhYmVsKDUsIDIwLCAiUGFzc3dvcmQ6Iik7CisgICAgc2VjdXJlID0KKwlmW24rK10gPSBtYWtlX2ZpZWxkKDUsIDMwLCAxLCA5LCBUUlVFKTsKKyAgICBzZXRfZmllbGRfdHlwZShmW24gLSAxXSwgZnR5X3Bhc3N3ZCk7CisgICAgZltuKytdID0gKEZJRUxEICopIDA7CisKKyAgICBpZiAoKGZvcm0gPSBuZXdfZm9ybShmKSkgIT0gMCkgeworCisJZGlzcGxheV9mb3JtKGZvcm0pOworCisJdyA9IGZvcm1fd2luKGZvcm0pOworCXJhdygpOworCW5vbmwoKTsJCQkvKiBsZXRzIHVzIHJlYWQgXk0ncyAqLworCXdoaWxlICghZmluaXNoZWQpIHsKKwkgICAgc3dpdGNoIChmb3JtX2RyaXZlcihmb3JtLCBjID0gZm9ybV92aXJ0dWFsaXplKGZvcm0sIHcpKSkgeworCSAgICBjYXNlIEVfT0s6CisJCW12YWRkc3RyKDUsIDU3LCBmaWVsZF9idWZmZXIoc2VjdXJlLCAxKSk7CisJCWNscnRvZW9sKCk7CisJCXJlZnJlc2goKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgRV9VTktOT1dOX0NPTU1BTkQ6CisJCWZpbmlzaGVkID0gbXlfZm9ybV9kcml2ZXIoZm9ybSwgYyk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQliZWVwKCk7CisJCWJyZWFrOworCSAgICB9CisJfQorCisJZXJhc2VfZm9ybShmb3JtKTsKKworCWZyZWVfZm9ybShmb3JtKTsKKyAgICB9CisgICAgZm9yIChjID0gMDsgZltjXSAhPSAwOyBjKyspCisJZnJlZV9maWVsZChmW2NdKTsKKyAgICBmcmVlX2ZpZWxkdHlwZShmdHlfbWlkZGxlKTsKKyAgICBmcmVlX2ZpZWxkdHlwZShmdHlfcGFzc3dkKTsKKyAgICBub3JhdygpOworICAgIG5sKCk7CisKKyNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KKyAgICBtb3VzZW1hc2soQUxMX01PVVNFX0VWRU5UUywgKG1tYXNrX3QgKikgMCk7CisjZW5kaWYKK30KKyNlbmRpZiAvKiBVU0VfTElCRk9STSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE92ZXJsYXAgdGVzdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorZmlsbHdpbihXSU5ET1cgKndpbiwgY2hhciBjaCkKK3sKKyAgICBpbnQgeSwgeDsKKyAgICBpbnQgeTEsIHgxOworCisgICAgZ2V0bWF4eXgod2luLCB5MSwgeDEpOworICAgIGZvciAoeSA9IDA7IHkgPCB5MTsgeSsrKSB7CisJd21vdmUod2luLCB5LCAwKTsKKwlmb3IgKHggPSAwOyB4IDwgeDE7IHgrKykKKwkgICAgd2FkZGNoKHdpbiwgVUNoYXIoY2gpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjcm9zc3dpbihXSU5ET1cgKndpbiwgY2hhciBjaCkKK3sKKyAgICBpbnQgeSwgeDsKKyAgICBpbnQgeTEsIHgxOworCisgICAgZ2V0bWF4eXgod2luLCB5MSwgeDEpOworICAgIGZvciAoeSA9IDA7IHkgPCB5MTsgeSsrKSB7CisJZm9yICh4ID0gMDsgeCA8IHgxOyB4KyspCisJICAgIGlmICgoKHggPiAoeDEgLSAxKSAvIDMpICYmICh4IDw9ICgyICogKHgxIC0gMSkpIC8gMykpCisJCXx8ICgoKHkgPiAoeTEgLSAxKSAvIDMpICYmICh5IDw9ICgyICogKHkxIC0gMSkpIC8gMykpKSkgeworCQl3bW92ZSh3aW4sIHksIHgpOworCQl3YWRkY2god2luLCBVQ2hhcihjaCkpOworCSAgICB9CisgICAgfQorfQorCisjZGVmaW5lIE9WRVJMQVBfRkxBVk9SUyA1CisKK3N0YXRpYyB2b2lkCitvdmVybGFwX2hlbHBpdGVtKGludCBzdGF0ZSwgaW50IGl0ZW0sIGNoYXIgKm1lc3NhZ2UpCit7CisgICAgaW50IHJvdyA9IChpdGVtIC8gMik7CisgICAgaW50IGNvbCA9ICgoaXRlbSAlIDIpID8gQ09MUyAvIDIgOiAwKTsKKworICAgIG1vdmUoTElORVMgLSA2ICsgcm93LCBjb2wpOworICAgIHByaW50dygiJWMlYyA9ICVzIiwgc3RhdGUgPT0gcm93ID8gJz4nIDogJyAnLCAnYScgKyBpdGVtLCBtZXNzYWdlKTsKKyAgICBjbHJ0b2VvbCgpOworfQorCitzdGF0aWMgdm9pZAorb3ZlcmxhcF90ZXN0XzFfYXR0cihXSU5ET1cgKndpbiwgaW50IGZsYXZvciwgaW50IGNvbCkKK3sKKyAgICBzaG9ydCBjcGFpciA9IChzaG9ydCkgKDEgKyAoZmxhdm9yICogMikgKyBjb2wpOworCisgICAgc3dpdGNoIChmbGF2b3IpIHsKKyAgICBjYXNlIDA6CisJd2F0dHJzZXQod2luLCBBX05PUk1BTCk7CisJYnJlYWs7CisgICAgY2FzZSAxOgorCXdhdHRyc2V0KHdpbiwgQV9CT0xEKTsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJaW5pdF9wYWlyKGNwYWlyLCBDT0xPUl9CTFVFLCBDT0xPUl9XSElURSk7CisJd2F0dHJzZXQod2luLCBDT0xPUl9QQUlSKGNwYWlyKSB8IEFfTk9STUFMKTsKKwlicmVhazsKKyAgICBjYXNlIDM6CisJaW5pdF9wYWlyKGNwYWlyLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJd2F0dHJzZXQod2luLCBDT0xPUl9QQUlSKGNwYWlyKSB8IEFfQk9MRCk7CisJYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorb3ZlcmxhcF90ZXN0XzJfYXR0cihXSU5ET1cgKndpbiwgaW50IGZsYXZvciwgaW50IGNvbCkKK3sKKyAgICBzaG9ydCBjcGFpciA9IChzaG9ydCkgKDkgKyAoZmxhdm9yICogMikgKyBjb2wpOworCisgICAgc3dpdGNoIChmbGF2b3IpIHsKKyAgICBjYXNlIDA6CisJLyogbm8gZWZmZWN0ICovCisJYnJlYWs7CisgICAgY2FzZSAxOgorCS8qIG5vIGVmZmVjdCAqLworCWJyZWFrOworICAgIGNhc2UgMjoKKwlpbml0X3BhaXIoY3BhaXIsIENPTE9SX1JFRCwgQ09MT1JfR1JFRU4pOworCXdia2dkc2V0KHdpbiwgJyAnIHwgQV9CTElOSyB8IENPTE9SX1BBSVIoY3BhaXIpKTsKKwlicmVhazsKKyAgICBjYXNlIDM6CisJd2JrZ2RzZXQod2luLCAnICcgfCBBX05PUk1BTCk7CisJYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgaW50CitvdmVybGFwX2hlbHAoaW50IHN0YXRlLCBpbnQgZmxhdm9yc1tPVkVSTEFQX0ZMQVZPUlNdKQoreworICAgIGludCByb3c7CisgICAgaW50IGNvbDsKKyAgICBpbnQgaXRlbTsKKyAgICBjb25zdCBjaGFyICp0aHMsICp0aHQ7CisgICAgY2hhciBtc2dbODBdOworCisgICAgaWYgKHN0YXRlIDwgMCkKKwlzdGF0ZSArPSBPVkVSTEFQX0ZMQVZPUlM7CisgICAgc3RhdGUgPSBzdGF0ZSAlIE9WRVJMQVBfRkxBVk9SUzsKKyAgICBhc3NlcnQoc3RhdGUgPj0gMCAmJiBzdGF0ZSA8IE9WRVJMQVBfRkxBVk9SUyk7CisKKyAgICBmb3IgKGl0ZW0gPSAwOyBpdGVtIDwgKDIgKiBPVkVSTEFQX0ZMQVZPUlMpOyArK2l0ZW0pIHsKKwlyb3cgPSBpdGVtIC8gMjsKKwljb2wgPSBpdGVtICUgMjsKKwl0aHMgPSBjb2wgPyAiQiIgOiAiQSI7CisJdGh0ID0gY29sID8gIkEiIDogIkIiOworCisJc3dpdGNoIChyb3cpIHsKKwljYXNlIDA6CisJICAgIGZsYXZvcnNbcm93XSA9IDA7CisJICAgIHNwcmludGYobXNnLCAicmVmcmVzaCAlcywgdGhlbiAlcywgdGhlbiBkb3VwZGF0ZS4iLCB0aHMsIHRodCk7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgaWYgKHVzZV9jb2xvcnMpIHsKKwkJZmxhdm9yc1tyb3ddICU9IDQ7CisJICAgIH0gZWxzZSB7CisJCWZsYXZvcnNbcm93XSAlPSAyOworCSAgICB9CisJICAgIG92ZXJsYXBfdGVzdF8xX2F0dHIoc3Rkc2NyLCBmbGF2b3JzW3Jvd10sIGNvbCk7CisJICAgIHNwcmludGYobXNnLCAiZmlsbCB3aW5kb3cgJXMgd2l0aCBsZXR0ZXIgJXMuIiwgdGhzLCB0aHMpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIGlmICh1c2VfY29sb3JzKSB7CisJCWZsYXZvcnNbcm93XSAlPSA0OworCSAgICB9IGVsc2UgeworCQlmbGF2b3JzW3Jvd10gJT0gMjsKKwkgICAgfQorCSAgICBzd2l0Y2ggKGZsYXZvcnNbcm93XSkgeworCSAgICBjYXNlIDA6CisJCXNwcmludGYobXNnLCAiY3Jvc3MgcGF0dGVybiBpbiB3aW5kb3cgJXMuIiwgdGhzKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMToKKwkJc3ByaW50Zihtc2csICJkcmF3IGJveCBpbiB3aW5kb3cgJXMuIiwgdGhzKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMjoKKwkJc3ByaW50Zihtc2csICJzZXQgYmFja2dyb3VuZCBvZiB3aW5kb3cgJXMuIiwgdGhzKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMzoKKwkJc3ByaW50Zihtc2csICJyZXNldCBiYWNrZ3JvdW5kIG9mIHdpbmRvdyAlcy4iLCB0aHMpOworCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIGZsYXZvcnNbcm93XSA9IDA7CisJICAgIHNwcmludGYobXNnLCAiY2xlYXIgd2luZG93ICVzLiIsIHRocyk7CisJICAgIGJyZWFrOworCWNhc2UgNDoKKwkgICAgZmxhdm9yc1tyb3ddICU9IDQ7CisJICAgIHN3aXRjaCAoZmxhdm9yc1tyb3ddKSB7CisJICAgIGNhc2UgMDoKKwkJc3ByaW50Zihtc2csICJvdmVyd3JpdGUgJXMgb250byAlcy4iLCB0aHMsIHRodCk7CisJCWJyZWFrOworCSAgICBjYXNlIDE6CisJCXNwcmludGYobXNnLCAiY29weXdpbihGQUxTRSkgJXMgb250byAlcy4iLCB0aHMsIHRodCk7CisJCWJyZWFrOworCSAgICBjYXNlIDI6CisJCXNwcmludGYobXNnLCAiY29weXdpbihUUlVFKSAlcyBvbnRvICVzLiIsIHRocywgdGh0KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMzoKKwkJc3ByaW50Zihtc2csICJvdmVybGF5ICVzIG9udG8gJXMuIiwgdGhzLCB0aHQpOworCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJb3ZlcmxhcF9oZWxwaXRlbShzdGF0ZSwgaXRlbSwgbXNnKTsKKwl3YXR0cnNldChzdGRzY3IsIEFfTk9STUFMKTsKKwl3YmtnZHNldChzdGRzY3IsICcgJyB8IEFfTk9STUFMKTsKKyAgICB9CisgICAgbW92ZShMSU5FUyAtIDEsIDApOworICAgIHByaW50dygiXlEvRVNDID0gdGVybWluYXRlIHRlc3QuICBVcC9kb3duL3NwYWNlIHNlbGVjdCB0ZXN0IHZhcmlhdGlvbnMgKCVkICVkKS4iLAorCSAgIHN0YXRlLCBmbGF2b3JzW3N0YXRlXSk7CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkCitvdmVybGFwX3Rlc3RfMChXSU5ET1cgKmEsIFdJTkRPVyAqYikKK3sKKyAgICB0b3VjaHdpbihhKTsKKyAgICB0b3VjaHdpbihiKTsKKyAgICB3bm91dHJlZnJlc2goYSk7CisgICAgd25vdXRyZWZyZXNoKGIpOworICAgIGRvdXBkYXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkCitvdmVybGFwX3Rlc3RfMShpbnQgZmxhdm9yLCBpbnQgY29sLCBXSU5ET1cgKmEsIGNoYXIgZmlsbCkKK3sKKyAgICBvdmVybGFwX3Rlc3RfMV9hdHRyKGEsIGZsYXZvciwgY29sKTsKKyAgICBmaWxsd2luKGEsIGZpbGwpOworICAgIHdhdHRyc2V0KGEsIEFfTk9STUFMKTsKK30KKworc3RhdGljIHZvaWQKK292ZXJsYXBfdGVzdF8yKGludCBmbGF2b3IsIGludCBjb2wsIFdJTkRPVyAqYSwgY2hhciBmaWxsKQoreworICAgIG92ZXJsYXBfdGVzdF8yX2F0dHIoYSwgZmxhdm9yLCBjb2wpOworICAgIHN3aXRjaCAoZmxhdm9yKSB7CisgICAgY2FzZSAwOgorCWNyb3Nzd2luKGEsIGZpbGwpOworCWJyZWFrOworICAgIGNhc2UgMToKKwlib3goYSwgMCwgMCk7CisJYnJlYWs7CisgICAgY2FzZSAyOgorCS8qIGRvbmUgaW4gb3ZlcmxhcF90ZXN0XzJfYXR0ciAqLworCWJyZWFrOworICAgIGNhc2UgMzoKKwkvKiBkb25lIGluIG92ZXJsYXBfdGVzdF8yX2F0dHIgKi8KKwlicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitvdmVybGFwX3Rlc3RfMyhXSU5ET1cgKmEpCit7CisgICAgd2NsZWFyKGEpOworICAgIHdtb3ZlKGEsIDAsIDApOworfQorCitzdGF0aWMgdm9pZAorb3ZlcmxhcF90ZXN0XzQoaW50IGZsYXZvciwgV0lORE9XICphLCBXSU5ET1cgKmIpCit7CisgICAgc3dpdGNoIChmbGF2b3IpIHsKKyAgICBjYXNlIDA6CisJb3ZlcndyaXRlKGEsIGIpOworCWJyZWFrOworICAgIGNhc2UgMToKKwljb3B5d2luKGEsIGIsIDAsIDAsIDAsIDAsIGdldG1heHkoYiksIGdldG1heHgoYiksIEZBTFNFKTsKKwlicmVhazsKKyAgICBjYXNlIDI6CisJY29weXdpbihhLCBiLCAwLCAwLCAwLCAwLCBnZXRtYXh5KGIpLCBnZXRtYXh4KGIpLCBUUlVFKTsKKwlicmVhazsKKyAgICBjYXNlIDM6CisJb3ZlcmxheShhLCBiKTsKKwlicmVhazsKKyAgICB9Cit9CisKKy8qIHRlc3QgZWZmZWN0cyBvZiBvdmVybGFwcGluZyB3aW5kb3dzICovCitzdGF0aWMgdm9pZAorb3ZlcmxhcF90ZXN0KHZvaWQpCit7CisgICAgaW50IGNoOworICAgIGludCBzdGF0ZSwgZmxhdm9yW09WRVJMQVBfRkxBVk9SU107CisKKyAgICBXSU5ET1cgKndpbjEgPSBuZXd3aW4oOSwgMjAsIDMsIDMpOworICAgIFdJTkRPVyAqd2luMiA9IG5ld3dpbig5LCAyMCwgOSwgMTYpOworCisgICAgY3Vyc19zZXQoMCk7CisgICAgcmF3KCk7CisgICAgcmVmcmVzaCgpOworICAgIG1vdmUoMCwgMCk7CisgICAgcHJpbnR3KCJUaGlzIHRlc3Qgc2hvd3MgdGhlIGJlaGF2aW9yIG9mIHdub3V0cmVmcmVzaCgpIHdpdGggcmVzcGVjdCB0b1xuIik7CisgICAgcHJpbnR3KCJ0aGUgc2hhcmVkIHJlZ2lvbiBvZiB0d28gb3ZlcmxhcHBpbmcgd2luZG93cyBBIGFuZCBCLiAgVGhlIGNyb3NzXG4iKTsKKyAgICBwcmludHcoInBhdHRlcm4gaW4gZWFjaCB3aW5kb3cgZG9lcyBub3Qgb3ZlcmxhcCB0aGUgb3RoZXIuXG4iKTsKKworICAgIG1lbXNldChmbGF2b3IsIDAsIHNpemVvZihmbGF2b3IpKTsKKyAgICBzdGF0ZSA9IG92ZXJsYXBfaGVscCgwLCBmbGF2b3IpOworCisgICAgd2hpbGUgKCFpc1F1aXQoY2ggPSBHZXRjaGFyKCkpKQorCXN3aXRjaCAoY2gpIHsKKwljYXNlICdhJzoJCS8qIHJlZnJlc2ggd2luZG93IEEgZmlyc3QsIHRoZW4gQiAqLworCSAgICBvdmVybGFwX3Rlc3RfMCh3aW4xLCB3aW4yKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdiJzoJCS8qIHJlZnJlc2ggd2luZG93IEIgZmlyc3QsIHRoZW4gQSAqLworCSAgICBvdmVybGFwX3Rlc3RfMCh3aW4yLCB3aW4xKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdjJzoJCS8qIGZpbGwgd2luZG93IEEgc28gaXQncyB2aXNpYmxlICovCisJICAgIG92ZXJsYXBfdGVzdF8xKGZsYXZvclsxXSwgMCwgd2luMSwgJ0EnKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdkJzoJCS8qIGZpbGwgd2luZG93IEIgc28gaXQncyB2aXNpYmxlICovCisJICAgIG92ZXJsYXBfdGVzdF8xKGZsYXZvclsxXSwgMSwgd2luMiwgJ0InKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdlJzoJCS8qIGNyb3NzIHRlc3QgcGF0dGVybiBpbiB3aW5kb3cgQSAqLworCSAgICBvdmVybGFwX3Rlc3RfMihmbGF2b3JbMl0sIDAsIHdpbjEsICdBJyk7CisJICAgIGJyZWFrOworCisJY2FzZSAnZic6CQkvKiBjcm9zcyB0ZXN0IHBhdHRlcm4gaW4gd2luZG93IEEgKi8KKwkgICAgb3ZlcmxhcF90ZXN0XzIoZmxhdm9yWzJdLCAxLCB3aW4yLCAnQicpOworCSAgICBicmVhazsKKworCWNhc2UgJ2cnOgkJLyogY2xlYXIgd2luZG93IEEgKi8KKwkgICAgb3ZlcmxhcF90ZXN0XzMod2luMSk7CisJICAgIGJyZWFrOworCisJY2FzZSAnaCc6CQkvKiBjbGVhciB3aW5kb3cgQiAqLworCSAgICBvdmVybGFwX3Rlc3RfMyh3aW4yKTsKKwkgICAgYnJlYWs7CisKKwljYXNlICdpJzoJCS8qIG92ZXJ3cml0ZSBBIG9udG8gQiAqLworCSAgICBvdmVybGFwX3Rlc3RfNChmbGF2b3JbNF0sIHdpbjEsIHdpbjIpOworCSAgICBicmVhazsKKworCWNhc2UgJ2onOgkJLyogb3ZlcndyaXRlIEIgb250byBBICovCisJICAgIG92ZXJsYXBfdGVzdF80KGZsYXZvcls0XSwgd2luMiwgd2luMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBDVFJMKCduJyk6CisJY2FzZSBLRVlfRE9XTjoKKwkgICAgc3RhdGUgPSBvdmVybGFwX2hlbHAoc3RhdGUgKyAxLCBmbGF2b3IpOworCSAgICBicmVhazsKKworCWNhc2UgQ1RSTCgncCcpOgorCWNhc2UgS0VZX1VQOgorCSAgICBzdGF0ZSA9IG92ZXJsYXBfaGVscChzdGF0ZSAtIDEsIGZsYXZvcik7CisJICAgIGJyZWFrOworCisJY2FzZSAnICc6CisJICAgIGZsYXZvcltzdGF0ZV0gKz0gMTsKKwkgICAgc3RhdGUgPSBvdmVybGFwX2hlbHAoc3RhdGUsIGZsYXZvcik7CisJICAgIGJyZWFrOworCisJY2FzZSAnPyc6CisJICAgIHN0YXRlID0gb3ZlcmxhcF9oZWxwKHN0YXRlLCBmbGF2b3IpOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCisgICAgZGVsd2luKHdpbjIpOworICAgIGRlbHdpbih3aW4xKTsKKyAgICBlcmFzZSgpOworICAgIGN1cnNfc2V0KDEpOworICAgIGVuZHdpbigpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1haW4gc2VxdWVuY2UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGJvb2wKK2RvX3NpbmdsZV90ZXN0KGNvbnN0IGNoYXIgYykKKy8qIHBlcmZvcm0gYSBzaW5nbGUgc3BlY2lmaWVkIHRlc3QgKi8KK3sKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICdhJzoKKwlnZXRjaF90ZXN0KCk7CisJYnJlYWs7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIGNhc2UgJ0EnOgorCWdldF93Y2hfdGVzdCgpOworCWJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlICdiJzoKKwlhdHRyX3Rlc3QoKTsKKwlicmVhazsKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgY2FzZSAnQic6CisJd2lkZV9hdHRyX3Rlc3QoKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAnYyc6CisJaWYgKCF1c2VfY29sb3JzKQorCSAgICBDYW5ub3QoImRvZXMgbm90IHN1cHBvcnQgY29sb3IuIik7CisJZWxzZQorCSAgICBjb2xvcl90ZXN0KCk7CisJYnJlYWs7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIGNhc2UgJ0MnOgorCWlmICghdXNlX2NvbG9ycykKKwkgICAgQ2Fubm90KCJkb2VzIG5vdCBzdXBwb3J0IGNvbG9yLiIpOworCWVsc2UKKwkgICAgd2lkZV9jb2xvcl90ZXN0KCk7CisJYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgJ2QnOgorCWlmICghdXNlX2NvbG9ycykKKwkgICAgQ2Fubm90KCJkb2VzIG5vdCBzdXBwb3J0IGNvbG9yLiIpOworCWVsc2UgaWYgKCFjYW5fY2hhbmdlX2NvbG9yKCkpCisJICAgIENhbm5vdCgiaGFzIGhhcmR3aXJlZCBjb2xvciB2YWx1ZXMuIik7CisJZWxzZQorCSAgICBjb2xvcl9lZGl0KCk7CisJYnJlYWs7CisKKyNpZiBVU0VfU09GVEtFWVMKKyAgICBjYXNlICdlJzoKKwlzbGtfdGVzdCgpOworCWJyZWFrOworI2VuZGlmCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIGNhc2UgJ0UnOgorCXdpZGVfc2xrX3Rlc3QoKTsKKwlicmVhazsKKyNlbmRpZgorICAgIGNhc2UgJ2YnOgorCWFjc19kaXNwbGF5KCk7CisJYnJlYWs7CisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIGNhc2UgJ0YnOgorCXdpZGVfYWNzX2Rpc3BsYXkoKTsKKwlicmVhazsKKyNlbmRpZgorCisjaWYgVVNFX0xJQlBBTkVMCisgICAgY2FzZSAnbyc6CisJZGVtb19wYW5lbHMoaW5pdF9wYW5lbCwgZmlsbF9wYW5lbCk7CisJYnJlYWs7CisjZW5kaWYKKworI2lmIFVTRV9XSURFQ19TVVBQT1JUICYmIFVTRV9MSUJQQU5FTAorICAgIGNhc2UgJ08nOgorCWRlbW9fcGFuZWxzKGluaXRfd2lkZV9wYW5lbCwgZmlsbF93aWRlX3BhbmVsKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAnZyc6CisJYWNzX2FuZF9zY3JvbGwoKTsKKwlicmVhazsKKworICAgIGNhc2UgJ2knOgorCWZsdXNoaW5wX3Rlc3Qoc3Rkc2NyKTsKKwlicmVhazsKKworICAgIGNhc2UgJ2snOgorCXRlc3Rfc2dyX2F0dHJpYnV0ZXMoKTsKKwlicmVhazsKKworI2lmIFVTRV9MSUJNRU5VCisgICAgY2FzZSAnbSc6CisJbWVudV90ZXN0KCk7CisJYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgJ3AnOgorCWRlbW9fcGFkKCk7CisJYnJlYWs7CisKKyNpZiBVU0VfTElCRk9STQorICAgIGNhc2UgJ3InOgorCWRlbW9fZm9ybXMoKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAncyc6CisJb3ZlcmxhcF90ZXN0KCk7CisJYnJlYWs7CisKKyNpZiBVU0VfTElCTUVOVSAmJiBkZWZpbmVkKFRSQUNFKQorICAgIGNhc2UgJ3QnOgorCXRyYWNlX3NldCgpOworCWJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlICc/JzoKKwlicmVhazsKKworICAgIGRlZmF1bHQ6CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGJsW10gPQorICAgIHsKKwkiVXNhZ2U6IG5jdXJzZXMgW29wdGlvbnNdIgorCSwiIgorCSwiT3B0aW9uczoiCisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisJLCIgIC1hIGYsYiAgIHNldCBkZWZhdWx0LWNvbG9ycyAoYXNzdW1lZCB3aGl0ZS1vbi1ibGFjaykiCisJLCIgIC1kICAgICAgIHVzZSBkZWZhdWx0LWNvbG9ycyBpZiB0ZXJtaW5hbCBzdXBwb3J0cyB0aGVtIgorI2VuZGlmCisjaWYgVVNFX1NPRlRLRVlTCisJLCIgIC1lIGZtdCAgIHNwZWNpZnkgZm9ybWF0IGZvciBzb2Z0LWtleXMgdGVzdCAoZSkiCisjZW5kaWYKKyNpZiBIQVZFX1JJUE9GRkxJTkUKKwksIiAgLWYgICAgICAgcmlwLW9mZiBmb290ZXIgbGluZSAoY2FuIHJlcGVhdCkiCisJLCIgIC1oICAgICAgIHJpcC1vZmYgaGVhZGVyIGxpbmUgKGNhbiByZXBlYXQpIgorI2VuZGlmCisJLCIgIC1tICAgICAgIGRvIG5vdCB1c2UgY29sb3JzIgorCSwiICAtcCBmaWxlICByZ2IgdmFsdWVzIHRvIHVzZSBpbiAnZCcgcmF0aGVyIHRoYW4gbmN1cnNlcydzIGJ1aWx0aW4iCisjaWYgVVNFX0xJQlBBTkVMCisJLCIgIC1zIG1zZWMgIHNwZWNpZnkgbm9taW5hbCB0aW1lIGZvciBwYW5lbC1kZW1vIChkZWZhdWx0OiAxLCB0byBob2xkKSIKKyNlbmRpZgorI2lmZGVmIFRSQUNFCisJLCIgIC10IG1hc2sgIHNwZWNpZnkgZGVmYXVsdCB0cmFjZS1sZXZlbCAobWF5IHRvZ2dsZSB3aXRoIF5UKSIKKyNlbmRpZgorICAgIH07CisgICAgc2l6ZV90IG47CisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRih0YmwpOyBuKyspCisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgdGJsW25dKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZAorc2V0X3Rlcm1pbmFsX21vZGVzKHZvaWQpCit7CisgICAgbm9yYXcoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2VjaG8oKTsKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworICAgIGlkbG9rKHN0ZHNjciwgVFJVRSk7CisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7Cit9CisKKyNpZmRlZiBTSUdVU1IxCitzdGF0aWMgUkVUU0lHVFlQRQorYW5ub3VuY2Vfc2lnKGludCBzaWcpCit7CisgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiSGFuZGxlZCBzaWduYWwgJWRcclxuIiwgc2lnKTsKK30KKyNlbmRpZgorCisjaWYgSEFWRV9SSVBPRkZMSU5FCitzdGF0aWMgaW50CityaXBfZm9vdGVyKFdJTkRPVyAqd2luLCBpbnQgY29scykKK3sKKyAgICB3YmtnZCh3aW4sIEFfUkVWRVJTRSk7CisgICAgd2VyYXNlKHdpbik7CisgICAgd21vdmUod2luLCAwLCAwKTsKKyAgICB3cHJpbnR3KHdpbiwgImZvb3Rlcjogd2luZG93ICVwLCAlZCBjb2x1bW5zIiwgd2luLCBjb2xzKTsKKyAgICB3bm91dHJlZnJlc2god2luKTsKKyAgICByZXR1cm4gT0s7Cit9CisKK3N0YXRpYyBpbnQKK3JpcF9oZWFkZXIoV0lORE9XICp3aW4sIGludCBjb2xzKQoreworICAgIHdia2dkKHdpbiwgQV9SRVZFUlNFKTsKKyAgICB3ZXJhc2Uod2luKTsKKyAgICB3bW92ZSh3aW4sIDAsIDApOworICAgIHdwcmludHcod2luLCAiaGVhZGVyOiB3aW5kb3cgJXAsICVkIGNvbHVtbnMiLCB3aW4sIGNvbHMpOworICAgIHdub3V0cmVmcmVzaCh3aW4pOworICAgIHJldHVybiBPSzsKK30KKyNlbmRpZiAvKiBIQVZFX1JJUE9GRkxJTkUgKi8KKworc3RhdGljIHZvaWQKK21haW5fbWVudShib29sIHRvcCkKK3sKKyAgICBjaGFyIGNvbW1hbmQ7CisKKyAgICBkbyB7CisJKHZvaWQpIHB1dHMoIlRoaXMgaXMgdGhlIG5jdXJzZXMgbWFpbiBtZW51Iik7CisJKHZvaWQpIHB1dHMoImEgPSBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgdGVzdCIpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJKHZvaWQpIHB1dHMoIkEgPSB3aWRlLWNoYXJhY3RlciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgdGVzdCIpOworI2VuZGlmCisJKHZvaWQpIHB1dHMoImIgPSBjaGFyYWN0ZXIgYXR0cmlidXRlIHRlc3QiKTsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCSh2b2lkKSBwdXRzKCJCID0gd2lkZS1jaGFyYWN0ZXIgYXR0cmlidXRlIHRlc3QiKTsKKyNlbmRpZgorCSh2b2lkKSBwdXRzKCJjID0gY29sb3IgdGVzdCBwYXR0ZXJuIik7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwkodm9pZCkgcHV0cygiQyA9IGNvbG9yIHRlc3QgcGF0dGVybiB1c2luZyB3aWRlLWNoYXJhY3RlciBjYWxscyIpOworI2VuZGlmCisJaWYgKHRvcCkKKwkgICAgKHZvaWQpIHB1dHMoImQgPSBlZGl0IFJHQiBjb2xvciB2YWx1ZXMiKTsKKyNpZiBVU0VfU09GVEtFWVMKKwkodm9pZCkgcHV0cygiZSA9IGV4ZXJjaXNlIHNvZnQga2V5cyIpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJKHZvaWQpIHB1dHMoIkUgPSBleGVyY2lzZSBzb2Z0IGtleXMgdXNpbmcgd2lkZS1jaGFyYWN0ZXJzIik7CisjZW5kaWYKKyNlbmRpZgorCSh2b2lkKSBwdXRzKCJmID0gZGlzcGxheSBBQ1MgY2hhcmFjdGVycyIpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJKHZvaWQpIHB1dHMoIkYgPSBkaXNwbGF5IFdpZGUtQUNTIGNoYXJhY3RlcnMiKTsKKyNlbmRpZgorCSh2b2lkKSBwdXRzKCJnID0gZGlzcGxheSB3aW5kb3dzIGFuZCBzY3JvbGxpbmciKTsKKwkodm9pZCkgcHV0cygiaSA9IHRlc3Qgb2YgZmx1c2hpbnAoKSIpOworCSh2b2lkKSBwdXRzKCJrID0gZGlzcGxheSBjaGFyYWN0ZXIgYXR0cmlidXRlcyIpOworI2lmIFVTRV9MSUJNRU5VCisJKHZvaWQpIHB1dHMoIm0gPSBtZW51IGNvZGUgdGVzdCIpOworI2VuZGlmCisjaWYgVVNFX0xJQlBBTkVMCisJKHZvaWQpIHB1dHMoIm8gPSBleGVyY2lzZSBwYW5lbHMgbGlicmFyeSIpOworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJKHZvaWQpIHB1dHMoIk8gPSBleGVyY2lzZSBwYW5lbHMgd2l0aCB3aWRlLWNoYXJhY3RlcnMiKTsKKyNlbmRpZgorI2VuZGlmCisJKHZvaWQpIHB1dHMoInAgPSBleGVyY2lzZSBwYWQgZmVhdHVyZXMiKTsKKwkodm9pZCkgcHV0cygicSA9IHF1aXQiKTsKKyNpZiBVU0VfTElCRk9STQorCSh2b2lkKSBwdXRzKCJyID0gZXhlcmNpc2UgZm9ybXMgY29kZSIpOworI2VuZGlmCisJKHZvaWQpIHB1dHMoInMgPSBvdmVybGFwcGluZy1yZWZyZXNoIHRlc3QiKTsKKyNpZiBVU0VfTElCTUVOVSAmJiBkZWZpbmVkKFRSQUNFKQorCSh2b2lkKSBwdXRzKCJ0ID0gc2V0IHRyYWNlIGxldmVsIik7CisjZW5kaWYKKwkodm9pZCkgcHV0cygiPyA9IHJlcGVhdCB0aGlzIGNvbW1hbmQgc3VtbWFyeSIpOworCisJKHZvaWQpIGZwdXRzKCI+ICIsIHN0ZG91dCk7CisJKHZvaWQpIGZmbHVzaChzdGRvdXQpOwkvKiBuZWNlc3NhcnkgdW5kZXIgU1ZyNCBjdXJzZXMgKi8KKworCS8qCisJICogVGhpcyB1c2VkIHRvIGJlIGFuICdmZ2V0cygpJyBjYWxsLiAgSG93ZXZlciAob24gTGludXgsIGF0IGxlYXN0KQorCSAqIG1peGluZyBzdHJlYW0gSS9PIGFuZCAncmVhZCgpJyAodXNlZCBpbiB0aGUgbGlicmFyeSkgY2F1c2VzIHRoZQorCSAqIGlucHV0IHN0cmVhbSB0byBiZSBmbHVzaGVkIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdGhlIHR3by4KKwkgKi8KKwljb21tYW5kID0gMDsKKwlmb3IgKDs7KSB7CisJICAgIGNoYXIgY2ggPSAnXDAnOworCSAgICBpZiAocmVhZChmaWxlbm8oc3RkaW4pLCAmY2gsIDEpIDw9IDApIHsKKwkJaWYgKGNvbW1hbmQgPT0gMCkKKwkJICAgIGNvbW1hbmQgPSAncSc7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gMCAmJiAhaXNzcGFjZShVQ2hhcihjaCkpKSB7CisJCWNvbW1hbmQgPSBjaDsKKwkgICAgfSBlbHNlIGlmIChjaCA9PSAnXG4nIHx8IGNoID09ICdccicpIHsKKwkJaWYgKChjb21tYW5kID09ICdkJykgJiYgIXRvcCkgeworCQkgICAgKHZvaWQpIGZwdXRzKCJEbyBub3QgbmVzdCB0ZXN0LWRcbiIsIHN0ZG91dCk7CisJCSAgICBjb21tYW5kID0gMDsKKwkJfQorCQlpZiAoY29tbWFuZCAhPSAwKQorCQkgICAgYnJlYWs7CisJCSh2b2lkKSBmcHV0cygiPiAiLCBzdGRvdXQpOworCQkodm9pZCkgZmZsdXNoKHN0ZG91dCk7CisJICAgIH0KKwl9CisKKwlpZiAoZG9fc2luZ2xlX3Rlc3QoY29tbWFuZCkpIHsKKwkgICAgLyoKKwkgICAgICogVGhpcyBtYXkgYmUgb3ZlcmtpbGw7IGl0J3MgaW50ZW5kZWQgdG8gcmVzZXQgZXZlcnl0aGluZyBiYWNrCisJICAgICAqIHRvIHRoZSBpbml0aWFsIHRlcm1pbmFsIG1vZGVzIHNvIHRoYXQgdGVzdHMgZG9uJ3QgZ2V0IGluCisJICAgICAqIGVhY2ggb3RoZXIncyB3YXkuCisJICAgICAqLworCSAgICBmbHVzaGlucCgpOworCSAgICBzZXRfdGVybWluYWxfbW9kZXMoKTsKKwkgICAgcmVzZXRfcHJvZ19tb2RlKCk7CisJICAgIGNsZWFyKCk7CisJICAgIHJlZnJlc2goKTsKKwkgICAgZW5kd2luKCk7CisJICAgIGlmIChjb21tYW5kID09ICc/JykgeworCQkodm9pZCkgcHV0cygiVGhpcyBpcyB0aGUgbmN1cnNlcyBjYXBhYmlsaXR5IHRlc3Rlci4iKTsKKwkJKHZvaWQpCisJCSAgICBwdXRzKCJZb3UgbWF5IHNlbGVjdCBhIHRlc3QgZnJvbSB0aGUgbWFpbiBtZW51IGJ5IHR5cGluZyB0aGUiKTsKKwkJKHZvaWQpCisJCSAgICBwdXRzKCJrZXkgbGV0dGVyIG9mIHRoZSBjaG9pY2UgKHRoZSBsZXR0ZXIgdG8gbGVmdCBvZiB0aGUgPSkiKTsKKwkJKHZvaWQpCisJCSAgICBwdXRzKCJhdCB0aGUgPiBwcm9tcHQuICBUeXBlIGBxJyB0byBleGl0LiIpOworCSAgICB9CisJICAgIGNvbnRpbnVlOworCX0KKyAgICB9IHdoaWxlCisJKGNvbW1hbmQgIT0gJ3EnKTsKK30KKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1haW4oYXJnYyxhcmd2KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIG9rQ09MT1IobikgKChuKSA+PSAwICYmIChuKSA8IG1heF9jb2xvcnMpCisjZGVmaW5lIG9rUkdCKG4pICAgKChuKSA+PSAwICYmIChuKSA8PSAxMDAwKQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgYzsKKyAgICBpbnQgbXlfZV9wYXJhbSA9IDE7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisgICAgaW50IGRlZmF1bHRfZmcgPSBDT0xPUl9XSElURTsKKyAgICBpbnQgZGVmYXVsdF9iZyA9IENPTE9SX0JMQUNLOworICAgIGJvb2wgYXNzdW1lZF9jb2xvcnMgPSBGQUxTRTsKKyAgICBib29sIGRlZmF1bHRfY29sb3JzID0gRkFMU0U7CisjZW5kaWYKKyAgICBjaGFyICpwYWxldHRlX2ZpbGUgPSAwOworICAgIGJvb2wgbW9ub2Nocm9tZSA9IEZBTFNFOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJhOmRlOmZobXA6czp0OiIpKSAhPSAtMSkgeworCXN3aXRjaCAoYykgeworI2lmZGVmIE5DVVJTRVNfVkVSU0lPTgorCWNhc2UgJ2EnOgorCSAgICBhc3N1bWVkX2NvbG9ycyA9IFRSVUU7CisJICAgIHNzY2FuZihvcHRhcmcsICIlZCwlZCIsICZkZWZhdWx0X2ZnLCAmZGVmYXVsdF9iZyk7CisJICAgIGJyZWFrOworCWNhc2UgJ2QnOgorCSAgICBkZWZhdWx0X2NvbG9ycyA9IFRSVUU7CisJICAgIGJyZWFrOworI2VuZGlmCisJY2FzZSAnZSc6CisJICAgIG15X2VfcGFyYW0gPSBhdG9pKG9wdGFyZyk7CisjaWZkZWYgTkNVUlNFU19WRVJTSU9OCisJICAgIGlmIChteV9lX3BhcmFtID4gMykJLyogYWxsb3cgZXh0ZW5kZWQgbGF5b3V0cyAqLworCQl1c2FnZSgpOworI2Vsc2UKKwkgICAgaWYgKG15X2VfcGFyYW0gPiAxKQorCQl1c2FnZSgpOworI2VuZGlmCisJICAgIGJyZWFrOworI2lmIEhBVkVfUklQT0ZGTElORQorCWNhc2UgJ2YnOgorCSAgICByaXBvZmZsaW5lKC0xLCByaXBfZm9vdGVyKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnaCc6CisJICAgIHJpcG9mZmxpbmUoMSwgcmlwX2hlYWRlcik7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIEhBVkVfUklQT0ZGTElORSAqLworCWNhc2UgJ20nOgorCSAgICBtb25vY2hyb21lID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncCc6CisJICAgIHBhbGV0dGVfZmlsZSA9IG9wdGFyZzsKKwkgICAgYnJlYWs7CisjaWYgVVNFX0xJQlBBTkVMCisJY2FzZSAncyc6CisJICAgIG5hcF9tc2VjID0gYXRvbChvcHRhcmcpOworCSAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFRSQUNFCisJY2FzZSAndCc6CisJICAgIHNhdmVfdHJhY2UgPSAodW5zaWduZWQpIHN0cnRvbChvcHRhcmcsIDAsIDApOworCSAgICBicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJICAgIHVzYWdlKCk7CisJfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlcmUncyBubyBtZW51cyAodW5saWtlbHkgZm9yIG5jdXJzZXMhKSwgdGhlbiB3ZSdsbCBoYXZlIHRvIHNldAorICAgICAqIHRyYWNpbmcgb24gaW5pdGlhbGx5LCBqdXN0IGluIGNhc2UgdGhlIHVzZXIgd2FudHMgdG8gdGVzdCBzb21ldGhpbmcgdGhhdAorICAgICAqIGRvZXNuJ3QgaW52b2x2ZSB3R2V0Y2hhci4KKyAgICAgKi8KKyNpZmRlZiBUUkFDRQorICAgIC8qIGVuYWJsZSBkZWJ1Z2dpbmcgKi8KKyNpZiAhVVNFX0xJQk1FTlUKKyAgICB0cmFjZShzYXZlX3RyYWNlKTsKKyNlbHNlCisgICAgaWYgKCFpc2F0dHkoZmlsZW5vKHN0ZGluKSkpCisJdHJhY2Uoc2F2ZV90cmFjZSk7CisjZW5kaWYgLyogVVNFX0xJQk1FTlUgKi8KKyNlbmRpZiAvKiBUUkFDRSAqLworCisjaWYgVVNFX1NPRlRLRVlTCisgICAgLyogdGVsbCBpdCB3ZSdyZSBnb2luZyB0byBwbGF5IHdpdGggc29mdCBrZXlzICovCisgICAgc2xrX2luaXQobXlfZV9wYXJhbSk7CisjZW5kaWYKKworI2lmZGVmIFNJR1VTUjEKKyAgICAvKiBzZXQgdXAgbnVsbCBzaWduYWwgY2F0Y2hlciBzbyB3ZSBjYW4gc2VlIHdoYXQgaW50ZXJydXB0cyB0byBnZXRjaCBkbyAqLworICAgIHNpZ25hbChTSUdVU1IxLCBhbm5vdW5jZV9zaWcpOworI2VuZGlmCisKKyAgICAvKiB3ZSBtdXN0IGluaXRpYWxpemUgdGhlIGN1cnNlcyBkYXRhIHN0cnVjdHVyZSBvbmx5IG9uY2UgKi8KKyAgICBpbml0c2NyKCk7CisgICAgYmtnZHNldChCTEFOSyk7CisKKyAgICAvKiB0ZXN0cywgaW4gZ2VuZXJhbCwgd2lsbCB3YW50IHRoZXNlIG1vZGVzICovCisgICAgdXNlX2NvbG9ycyA9IG1vbm9jaHJvbWUgPyBGQUxTRSA6IGhhc19jb2xvcnMoKTsKKworICAgIGlmICh1c2VfY29sb3JzKSB7CisJc3RhcnRfY29sb3IoKTsKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gKKwltYXhfY29sb3JzID0gQ09MT1JTOwkvKiB3YXMgPiAxNiA/IDE2IDogQ09MT1JTICovCisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAoZGVmYXVsdF9jb2xvcnMpIHsKKwkgICAgdXNlX2RlZmF1bHRfY29sb3JzKCk7CisJICAgIG1pbl9jb2xvcnMgPSAtMTsKKwl9CisjaWYgTkNVUlNFU19WRVJTSU9OX1BBVENIID49IDIwMDAwNzA4CisJZWxzZSBpZiAoYXNzdW1lZF9jb2xvcnMpCisJICAgIGFzc3VtZV9kZWZhdWx0X2NvbG9ycyhkZWZhdWx0X2ZnLCBkZWZhdWx0X2JnKTsKKyNlbmRpZgorI2VuZGlmCisjZWxzZSAvKiBub3JtYWwgU1ZyNCBjdXJzZXMgKi8KKwltYXhfY29sb3JzID0gQ09MT1JTOwkvKiB3YXMgPiA4ID8gOCA6IENPTE9SUyAqLworI2VuZGlmCisJbWF4X3BhaXJzID0gQ09MT1JfUEFJUlM7CS8qIHdhcyA+IDI1NiA/IDI1NiA6IENPTE9SX1BBSVJTICovCisKKwlpZiAoY2FuX2NoYW5nZV9jb2xvcigpKSB7CisJICAgIHNob3J0IGNwOworCSAgICBhbGxfY29sb3JzID0gdHlwZU1hbGxvYyhSR0JfREFUQSwgKHVuc2lnbmVkKSBtYXhfY29sb3JzKTsKKwkgICAgZm9yIChjcCA9IDA7IGNwIDwgbWF4X2NvbG9yczsgKytjcCkgeworCQljb2xvcl9jb250ZW50KGNwLAorCQkJICAgICAgJmFsbF9jb2xvcnNbY3BdLnJlZCwKKwkJCSAgICAgICZhbGxfY29sb3JzW2NwXS5ncmVlbiwKKwkJCSAgICAgICZhbGxfY29sb3JzW2NwXS5ibHVlKTsKKwkgICAgfQorCSAgICBpZiAocGFsZXR0ZV9maWxlICE9IDApIHsKKwkJRklMRSAqZnAgPSBmb3BlbihwYWxldHRlX2ZpbGUsICJyIik7CisJCWlmIChmcCAhPSAwKSB7CisJCSAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworCQkgICAgaW50IHJlZCwgZ3JlZW4sIGJsdWU7CisJCSAgICBpbnQgc2NhbGUgPSAxMDAwOworCQkgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwKSAhPSAwKSB7CisJCQlpZiAoc3NjYW5mKGJ1ZmZlciwgInNjYWxlOiVkIiwgJmMpID09IDEpIHsKKwkJCSAgICBzY2FsZSA9IGM7CisJCQl9IGVsc2UgaWYgKHNzY2FuZihidWZmZXIsICIlZDolZCAlZCAlZCIsCisJCQkJCSAgJmMsCisJCQkJCSAgJnJlZCwKKwkJCQkJICAmZ3JlZW4sCisJCQkJCSAgJmJsdWUpID09IDQKKwkJCQkgICAmJiBva0NPTE9SKGMpCisJCQkJICAgJiYgb2tSR0IocmVkKQorCQkJCSAgICYmIG9rUkdCKGdyZWVuKQorCQkJCSAgICYmIG9rUkdCKGJsdWUpKSB7CisJCQkgICAgYWxsX2NvbG9yc1tjXS5yZWQgPSAoc2hvcnQpICgocmVkICogMTAwMCkgLyBzY2FsZSk7CisJCQkgICAgYWxsX2NvbG9yc1tjXS5ncmVlbiA9IChzaG9ydCkgKChncmVlbiAqIDEwMDApIC8gc2NhbGUpOworCQkJICAgIGFsbF9jb2xvcnNbY10uYmx1ZSA9IChzaG9ydCkgKChibHVlICogMTAwMCkgLyBzY2FsZSk7CisJCQl9CisJCSAgICB9CisJCSAgICBmY2xvc2UoZnApOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIHNldF90ZXJtaW5hbF9tb2RlcygpOworICAgIGRlZl9wcm9nX21vZGUoKTsKKworICAgIC8qCisgICAgICogUmV0dXJuIHRvIHRlcm1pbmFsIG1vZGUsIHNvIHdlJ3JlIGd1YXJhbnRlZWQgb2YgYmVpbmcgYWJsZSB0bworICAgICAqIHNlbGVjdCB0ZXJtaW5hbCBjb21tYW5kcyBldmVuIGlmIHRoZSBjYXBhYmlsaXRpZXMgYXJlIHdyb25nLgorICAgICAqLworICAgIGVuZHdpbigpOworCisjaWYgSEFWRV9DVVJTRVNfVkVSU0lPTgorICAgICh2b2lkKSBwcmludGYoIldlbGNvbWUgdG8gJXMuICBQcmVzcyA/IGZvciBoZWxwLlxuIiwgY3Vyc2VzX3ZlcnNpb24oKSk7CisjZWxpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTl9NQUpPUikgJiYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fTUlOT1IpICYmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OX1BBVENIKQorICAgICh2b2lkKSBwcmludGYoIldlbGNvbWUgdG8gbmN1cnNlcyAlZC4lZC4lZC4gIFByZXNzID8gZm9yIGhlbHAuXG4iLAorCQkgIE5DVVJTRVNfVkVSU0lPTl9NQUpPUiwKKwkJICBOQ1VSU0VTX1ZFUlNJT05fTUlOT1IsCisJCSAgTkNVUlNFU19WRVJTSU9OX1BBVENIKTsKKyNlbHNlCisgICAgKHZvaWQpIHB1dHMoIldlbGNvbWUgdG8gbmN1cnNlcy4gIFByZXNzID8gZm9yIGhlbHAuIik7CisjZW5kaWYKKworICAgIG1haW5fbWVudShUUlVFKTsKKworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKKy8qIG5jdXJzZXMuYyBlbmRzIGhlcmUgKi8KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvbmN1cnNlc190c3QuaGluIGIvbmN1cnNlcy01LjcvdGVzdC9uY3Vyc2VzX3RzdC5oaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3N2NiZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvbmN1cnNlc190c3QuaGluCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQXV0aG9yOiBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PiAxOTk4ICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiBuY3Vyc2VzX3RzdC5oaW4sdiAxLjIgMTk5OC8wMi8xMSAxMjoxNDowNSB0b20gRXhwICQKKyAqCisgKiBUaGlzIGlzIGEgdGVtcGxhdGUtZmlsZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSAibmN1cnNlc19jZmcuaCIgZmlsZS4KKyAqCisgKiBSYXRoZXIgdGhhbiBsaXN0IGV2ZXJ5IGRlZmluaXRpb24sIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdCBzdWJzdGl0dXRlcworICogdGhlIGRlZmluaXRpb25zIHRoYXQgaXQgZmluZHMgdXNpbmcgJ3NlZCcuICBZb3UgbmVlZCBhIHBhdGNoICg5NzEyMjIpCisgKiB0byBhdXRvY29uZiAyLjEyIHRvIGRvIHRoaXMuCisgKi8KKyNpZm5kZWYgTkNfQ09ORklHX0gKKyNkZWZpbmUgTkNfQ09ORklHX0gKK0BERUZTQAorCisJLyogVGhlIEMgY29tcGlsZXIgbWF5IG5vdCB0cmVhdCB0aGVzZSBwcm9wZXJseSBidXQgQysrIGhhcyB0byAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisjdW5kZWYgY29uc3QKKyN1bmRlZiBpbmxpbmUKKyNlbHNlCisjaWYgZGVmaW5lZChsaW50KSB8fCBkZWZpbmVkKFRSQUNFKQorI3VuZGVmIGlubGluZQorI2RlZmluZSBpbmxpbmUgLyogbm90aGluZyAqLworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIE5DX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L25ld2RlbW8uYyBiL25jdXJzZXMtNS43L3Rlc3QvbmV3ZGVtby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Mzk5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L25ld2RlbW8uYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqICBuZXdkZW1vLmMJLQlBIGRlbW8gcHJvZ3JhbSB1c2luZyBQREN1cnNlcy4gVGhlIHByb2dyYW0gaWxsdXN0cmF0ZQorICogIAkgCQl0aGUgdXNlIG9mIGNvbG91cnMgZm9yIHRleHQgb3V0cHV0LgorICoKKyAqICRJZDogbmV3ZGVtby5jLHYgMS4zMSAyMDA4LzA4LzAzIDIwOjE5OjM4IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworLyoKKyAqICBUaGUgQXVzdHJhbGlhbiBtYXAKKyAqLworc3RhdGljIENPTlNUX01FTlVTIGNoYXIgKkF1c01hcFsxNl0gPQoreworICAgICIgICAgICAgICAgIEEgICAgICAgICAgIEEgIiwKKyAgICAiICAgIE4uVC4gQUFBQUEgICAgICAgQUFBQSAiLAorICAgICIgICAgIEFBQUFBQUFBQUFBICBBQUFBQUFBQSAiLAorICAgICIgICBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIFFsZC4iLAorICAgICJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSAiLAorICAgICJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgIiwKKyAgICAiIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgIiwKKyAgICAiICAgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSBOLlMuVy4iLAorICAgICJXLkEuIEFBQUFBQUFBQSAgICAgIEFBQUFBQSBWaWMuIiwKKyAgICAiICAgICAgIEFBQSAgIFMuQS4gICAgIEFBIiwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICBBICBUYXMuIiwKKyAgICAiIgorfTsKKworLyoKKyAqICBGdW5ueSBtZXNzYWdlcworICovCisjZGVmaW5lIE5NRVNTQUdFUyAgIDYKKworc3RhdGljIE5DVVJTRVNfQ09OU1QgY2hhciAqbWVzc2FnZXNbXSA9Cit7CisgICAgIkhlbGxvIGZyb20gdGhlIExhbmQgRG93biBVbmRlciIsCisgICAgIlRoZSBMYW5kIG9mIGNyb2NzLiBhbmQgYSBiaWcgUmVkIFJvY2siLAorICAgICJXaGVyZSB0aGUgc3VuZmxvd2VyIHJ1bnMgYWxvbmcgdGhlIGhpZ2h3YXlzIiwKKyAgICAidGhlIGR1c3R5IHJlZCByb2FkcyBsZWFkIG9uZSB0byBsb25lbGluZXNzIiwKKyAgICAiQmx1ZSBza3kgaW4gdGhlIG1vcm5pbmcgYW5kIiwKKyAgICAiZnJlZXppbmcgbmlnaHRzIGFuZCB0d2lua2xpbmcgc3RhcnMiLAorICAgICIiCit9OworCisvKgorICogIFRyYXAgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBSRVRTSUdUWVBFCit0cmFwKGludCBzaWcgR0NDX1VOVVNFRCkKK3sKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCisvKgorICogIFdhaXQgZm9yIHVzZXIKKyAqLworc3RhdGljIGludAorV2FpdEZvclVzZXIoV0lORE9XICp3aW4pCit7CisgICAgdGltZV90IHQ7CisgICAgY2h0eXBlIGtleTsKKworICAgIG5vZGVsYXkod2luLCBUUlVFKTsKKyAgICB0ID0gdGltZSgodGltZV90ICopIDApOworICAgIHdoaWxlICgxKSB7CisJaWYgKChpbnQpIChrZXkgPSB3Z2V0Y2god2luKSkgIT0gRVJSKSB7CisJICAgIGlmIChrZXkgPT0gJ3EnIHx8IGtleSA9PSAnUScpCisJCXJldHVybiAxOworCSAgICBlbHNlCisJCXJldHVybiAwOworCX0KKwlpZiAodGltZSgodGltZV90ICopIDApIC0gdCA+IDUpCisJICAgIHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK3NldF9jb2xvcnMoV0lORE9XICp3aW4sIGludCBwYWlyLCBpbnQgZm9yZWdyb3VuZCwgaW50IGJhY2tncm91bmQpCit7CisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCWlmIChwYWlyID4gQ09MT1JfUEFJUlMpCisJICAgIHBhaXIgPSBDT0xPUl9QQUlSUzsKKwlpbml0X3BhaXIocGFpciwgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7CisJd2F0dHJzZXQod2luLCBDT0xPUl9QQUlSKHBhaXIpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjaHR5cGUKK3VzZV9jb2xvcnMoV0lORE9XICp3aW4sIGludCBwYWlyLCBjaHR5cGUgYXR0cnMpCit7CisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCWlmIChwYWlyID4gQ09MT1JfUEFJUlMpCisJICAgIHBhaXIgPSBDT0xPUl9QQUlSUzsKKwlhdHRycyB8PSBDT0xPUl9QQUlSKHBhaXIpOworICAgIH0KKyAgICB3YXR0cnNldCh3aW4sIGF0dHJzKTsKKyAgICByZXR1cm4gYXR0cnM7Cit9CisKKy8qCisgKiBUZXN0IHN1YiB3aW5kb3dzCisgKi8KK3N0YXRpYyBpbnQKK1N1YldpblRlc3QoV0lORE9XICp3aW4pCit7CisgICAgaW50IHcsIGgsIHN3LCBzaCwgYngsIGJ5OworICAgIFdJTkRPVyAqc3dpbjEsICpzd2luMiwgKnN3aW4zOworCisgICAgZ2V0bWF4eXgod2luLCBoLCB3KTsKKyAgICBnZXRiZWd5eCh3aW4sIGJ5LCBieCk7CisgICAgc3cgPSB3IC8gMzsKKyAgICBzaCA9IGggLyAzOworICAgIGlmICgoc3dpbjEgPSBzdWJ3aW4od2luLCBzaCwgc3csIGJ5ICsgMywgYnggKyA1KSkgPT0gTlVMTCkKKwlyZXR1cm4gMTsKKyAgICBpZiAoKHN3aW4yID0gc3Vid2luKHdpbiwgc2gsIHN3LCBieSArIDQsIGJ4ICsgOCkpID09IE5VTEwpCisJcmV0dXJuIDE7CisgICAgaWYgKChzd2luMyA9IHN1Yndpbih3aW4sIHNoLCBzdywgYnkgKyA1LCBieCArIDExKSkgPT0gTlVMTCkKKwlyZXR1cm4gMTsKKworICAgIHNldF9jb2xvcnMoc3dpbjEsIDgsIENPTE9SX1JFRCwgQ09MT1JfQkxVRSk7CisgICAgd2VyYXNlKHN3aW4xKTsKKyAgICBtdndhZGRzdHIoc3dpbjEsIDAsIDMsICJTdWItd2luZG93IDEiKTsKKyAgICB3cmVmcmVzaChzd2luMSk7CisKKyAgICBzZXRfY29sb3JzKHN3aW4yLCA5LCBDT0xPUl9DWUFOLCBDT0xPUl9NQUdFTlRBKTsKKyAgICB3ZXJhc2Uoc3dpbjIpOworICAgIG12d2FkZHN0cihzd2luMiwgMCwgMywgIlN1Yi13aW5kb3cgMiIpOworICAgIHdyZWZyZXNoKHN3aW4yKTsKKworICAgIHNldF9jb2xvcnMoc3dpbjMsIDEwLCBDT0xPUl9ZRUxMT1csIENPTE9SX0dSRUVOKTsKKyAgICB3ZXJhc2Uoc3dpbjMpOworICAgIG12d2FkZHN0cihzd2luMywgMCwgMywgIlN1Yi13aW5kb3cgMyIpOworICAgIHdyZWZyZXNoKHN3aW4zKTsKKworICAgIGRlbHdpbihzd2luMSk7CisgICAgZGVsd2luKHN3aW4yKTsKKyAgICBkZWx3aW4oc3dpbjMpOworICAgIFdhaXRGb3JVc2VyKHdpbik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JvdW5jZShpbnQgbiwgaW50ICpkaXIsIGludCBsZW4pCit7CisgICAgaWYgKCpkaXIgPiAwKQorCSsrbjsKKyAgICBlbHNlCisJLS1uOworICAgIGlmIChuIDw9IDEgfHwgbiA+PSBsZW4gLSAyKQorCSpkaXIgPSAqZGlyID8gMCA6IDE7CisgICAgcmV0dXJuIG47Cit9CisKKy8qCisgKiAgQm91bmNpbmcgYmFsbHMKKyAqLworc3RhdGljIGludAorQm91bmNpbmdCYWxscyhXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgdywgaDsKKyAgICBpbnQgeDEsIHkxLCB4ZDEsIHlkMTsKKyAgICBpbnQgeDIsIHkyLCB4ZDIsIHlkMjsKKyAgICBpbnQgeDMsIHkzLCB4ZDMsIHlkMzsKKworICAgIGdldG1heHl4KHdpbiwgaCwgdyk7CisKKyAgICB4MSA9IDIgKyByYW5kKCkgJSAodyAtIDQpOworICAgIHkxID0gMiArIHJhbmQoKSAlIChoIC0gNCk7CisgICAgeDIgPSAyICsgcmFuZCgpICUgKHcgLSA0KTsKKyAgICB5MiA9IDIgKyByYW5kKCkgJSAoaCAtIDQpOworICAgIHgzID0gMiArIHJhbmQoKSAlICh3IC0gNCk7CisgICAgeTMgPSAyICsgcmFuZCgpICUgKGggLSA0KTsKKworICAgIHhkMSA9IDE7CisgICAgeWQxID0gMTsKKyAgICB4ZDIgPSAxOworICAgIHlkMiA9IDA7CisgICAgeGQzID0gMDsKKyAgICB5ZDMgPSAxOworCisgICAgbm9kZWxheSh3aW4sIFRSVUUpOworCisgICAgd2hpbGUgKHdnZXRjaCh3aW4pID09IEVSUikgeworCXgxID0gYm91bmNlKHgxLCAmeGQxLCB3KTsKKwl5MSA9IGJvdW5jZSh5MSwgJnlkMSwgaCk7CisJeDIgPSBib3VuY2UoeDIsICZ4ZDIsIHcpOworCXkyID0gYm91bmNlKHkyLCAmeWQyLCBoKTsKKwl4MyA9IGJvdW5jZSh4MywgJnhkMywgdyk7CisJeTMgPSBib3VuY2UoeTMsICZ5ZDMsIGgpOworCisJc2V0X2NvbG9ycyh3aW4sIDExLCBDT0xPUl9SRUQsIENPTE9SX0JMVUUpOworCW12d2FkZGNoKHdpbiwgeTEsIHgxLCAnTycpOworCisJc2V0X2NvbG9ycyh3aW4sIDEyLCBDT0xPUl9CTFVFLCBDT0xPUl9SRUQpOworCW12d2FkZGNoKHdpbiwgeTIsIHgyLCAnKicpOworCisJc2V0X2NvbG9ycyh3aW4sIDEzLCBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFKTsKKwltdndhZGRjaCh3aW4sIHkzLCB4MywgJ0AnKTsKKworCXdtb3ZlKHdpbiwgMCwgMCk7CisJd3JlZnJlc2god2luKTsKKwlkZWxheV9vdXRwdXQoMTAwKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgTWFpbiBkcml2ZXIKKyAqLworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgV0lORE9XICp3aW47CisgICAgaW50IHcsIHgsIHksIGksIGosIGs7CisgICAgY2hhciBidWZmZXJbMjAwXTsKKyAgICBjb25zdCBjaGFyICptZXNzYWdlOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGNodHlwZSBzYXZlWzgwXTsKKyAgICBjaHR5cGUgYzsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIENBVENIQUxMKHRyYXApOworCisgICAgaW5pdHNjcigpOworICAgIGlmIChoYXNfY29sb3JzKCkpCisJc3RhcnRfY29sb3IoKTsKKyAgICBjYnJlYWsoKTsKKyAgICBjdXJzX3NldCgwKTsKKyAgICB3aWR0aCA9IDQ4OworICAgIGhlaWdodCA9IDE0OwkJLyogQ3JlYXRlIGEgZHJhd2luZyB3aW5kb3cgKi8KKyAgICB3aW4gPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgKExJTkVTIC0gaGVpZ2h0KSAvIDIsIChDT0xTIC0gd2lkdGgpIC8gMik7CisgICAgaWYgKHdpbiA9PSBOVUxMKSB7CisJZW5kd2luKCk7CisJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkgeworCXNldF9jb2xvcnMod2luLCAxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJd2VyYXNlKHdpbik7CisKKwlzZXRfY29sb3JzKHdpbiwgMiwgQ09MT1JfUkVELCBDT0xPUl9SRUQpOworCWJveCh3aW4sIEFDU19WTElORSwgQUNTX0hMSU5FKTsKKwl3cmVmcmVzaCh3aW4pOworCS8qIERvIHJhbWRvbSBvdXRwdXQgb2YgYSBjaGFyYWN0ZXIgKi8KKwl1c2VfY29sb3JzKHdpbiwgMSwgQV9OT1JNQUwpOworCWMgPSAnYSc7CisJZm9yIChpID0gMDsgaSA8IDUwMDA7ICsraSkgeworCSAgICB4ID0gcmFuZCgpICUgKHdpZHRoIC0gMikgKyAxOworCSAgICB5ID0gcmFuZCgpICUgKGhlaWdodCAtIDIpICsgMTsKKwkgICAgbXZ3YWRkY2god2luLCB5LCB4LCBjKTsKKwkgICAgd3JlZnJlc2god2luKTsKKwkgICAgbm9kZWxheSh3aW4sIFRSVUUpOworCSAgICBpZiAod2dldGNoKHdpbikgIT0gRVJSKQorCQlicmVhazsKKwkgICAgaWYgKGkgPT0gMjAwMCkgeworCQljID0gJ2InOworCQlzZXRfY29sb3JzKHdpbiwgMywgQ09MT1JfQ1lBTiwgQ09MT1JfWUVMTE9XKTsKKwkgICAgfQorCX0KKworCVN1YldpblRlc3Qod2luKTsKKwkvKiBFcmFzZSBhbmQgZHJhdyBncmVlbiB3aW5kb3cgKi8KKwlzZXRfY29sb3JzKHdpbiwgNCwgQ09MT1JfWUVMTE9XLCBDT0xPUl9HUkVFTik7CisJd2JrZ2Qod2luLCB1c2VfY29sb3JzKHdpbiwgNCwgQV9CT0xEKSk7CisJd2VyYXNlKHdpbik7CisJd3JlZnJlc2god2luKTsKKwkvKiBEcmF3IFJFRCBib3VuZGluZyBib3ggKi8KKwl1c2VfY29sb3JzKHdpbiwgMiwgQV9OT1JNQUwpOworCWJveCh3aW4sICcgJywgJyAnKTsKKwl3cmVmcmVzaCh3aW4pOworCS8qIERpc3BsYXkgQXVzdHJhbGlhIG1hcCAqLworCXVzZV9jb2xvcnMod2luLCA0LCBBX0JPTEQpOworCWkgPSAwOworCXdoaWxlICgqQXVzTWFwW2ldKSB7CisJICAgIG12d2FkZHN0cih3aW4sIGkgKyAxLCA4LCBBdXNNYXBbaV0pOworCSAgICB3cmVmcmVzaCh3aW4pOworCSAgICBkZWxheV9vdXRwdXQoNTApOworCSAgICArK2k7CisJfQorCisJc2V0X2NvbG9ycyh3aW4sIDUsIENPTE9SX0JMVUUsIENPTE9SX1dISVRFKTsKKwl1c2VfY29sb3JzKHdpbiwgNSwgQV9CTElOSyk7CisJbXZ3YWRkc3RyKHdpbiwgaGVpZ2h0IC0gMiwgNiwgIiBQREN1cnNlcyAyLjEgZm9yIERPUywgT1MvMiBhbmQgVW5peCIpOworCXdyZWZyZXNoKHdpbik7CisKKwkvKiBEcmF3IHJ1bm5pbmcgbWVzc2FnZXMgKi8KKwlzZXRfY29sb3JzKHdpbiwgNiwgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSk7CisJbWVzc2FnZSA9IG1lc3NhZ2VzW2ogPSAwXTsKKwlpID0gMTsKKwl3ID0gd2lkdGggLSAyOworCXN0cmNweShidWZmZXIsIG1lc3NhZ2UpOworCXdoaWxlIChqIDwgTk1FU1NBR0VTKSB7CisJICAgIHdoaWxlICgoaW50KSBzdHJsZW4oYnVmZmVyKSA8IHcpIHsKKwkJc3RyY2F0KGJ1ZmZlciwgIiAuLi4gIik7CisJCXN0cmNhdChidWZmZXIsIG1lc3NhZ2VzWysraiAlIE5NRVNTQUdFU10pOworCSAgICB9CisKKwkgICAgaWYgKGkgPCB3KQorCQltdndhZGRuc3RyKHdpbiwgaGVpZ2h0IC8gMiwgdyAtIGksIGJ1ZmZlciwgaSk7CisJICAgIGVsc2UKKwkJbXZ3YWRkbnN0cih3aW4sIGhlaWdodCAvIDIsIDEsIGJ1ZmZlciwgdyk7CisKKwkgICAgd3JlZnJlc2god2luKTsKKwkgICAgbm9kZWxheSh3aW4sIFRSVUUpOworCSAgICBpZiAod2dldGNoKHdpbikgIT0gRVJSKSB7CisJCWZsdXNoaW5wKCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChpKysgPj0gdykgeworCQlmb3IgKGsgPSAwOyAoYnVmZmVyW2tdID0gYnVmZmVyW2sgKyAxXSkgIT0gJ1wwJzsgaysrKSA7CisJICAgIH0KKwkgICAgZGVsYXlfb3V0cHV0KDEwMCk7CisJfQorCisJaiA9IDA7CisJLyogIERyYXcgcnVubmluZyBBcyBhY3Jvc3MgaW4gUkVEICovCisJc2V0X2NvbG9ycyh3aW4sIDcsIENPTE9SX1JFRCwgQ09MT1JfR1JFRU4pOworCW1lbXNldChzYXZlLCAnICcsIHNpemVvZihzYXZlKSk7CisJZm9yIChpID0gMjsgaSA8IHdpZHRoIC0gNDsgKytpKSB7CisJICAgIGsgPSBtdndpbmNoKHdpbiwgNCwgaSk7CisJICAgIGlmIChrID09IEVSUikKKwkJYnJlYWs7CisJICAgIHNhdmVbaisrXSA9IGMgPSBrOworCSAgICBjICY9IEFfQ0hBUlRFWFQ7CisJICAgIG12d2FkZGNoKHdpbiwgNCwgaSwgYyk7CisJfQorCXdyZWZyZXNoKHdpbik7CisKKwkvKiBQdXQgYSBtZXNzYWdlIHVwIHdhaXQgZm9yIGEga2V5ICovCisJaSA9IGhlaWdodCAtIDI7CisJdXNlX2NvbG9ycyh3aW4sIDUsIEFfTk9STUFMKTsKKwltdndhZGRzdHIod2luLCBpLCA1LCAiIFR5cGUgYSBrZXkgdG8gY29udGludWUgb3IgJ1EnIHRvIHF1aXQgIik7CisJd3JlZnJlc2god2luKTsKKworCWlmIChXYWl0Rm9yVXNlcih3aW4pID09IDEpCisJICAgIGJyZWFrOworCisJaiA9IDA7CQkJLyogUmVzdG9yZSB0aGUgb2xkIGxpbmUgKi8KKwlmb3IgKGkgPSAyOyBpIDwgd2lkdGggLSA0OyArK2kpCisJICAgIG12d2FkZGNoKHdpbiwgNCwgaSwgc2F2ZVtqKytdKTsKKwl3cmVmcmVzaCh3aW4pOworCisJQm91bmNpbmdCYWxscyh3aW4pOworCS8qIFB1dCBhIG1lc3NhZ2UgdXAgd2FpdCBmb3IgYSBrZXkgKi8KKwlpID0gaGVpZ2h0IC0gMjsKKwl1c2VfY29sb3JzKHdpbiwgNSwgQV9OT1JNQUwpOworCW12d2FkZHN0cih3aW4sIGksIDUsICIgVHlwZSBhIGtleSB0byBjb250aW51ZSBvciAnUScgdG8gcXVpdCAiKTsKKwl3cmVmcmVzaCh3aW4pOworCWlmIChXYWl0Rm9yVXNlcih3aW4pID09IDEpCisJICAgIGJyZWFrOworICAgIH0KKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC9wcm9ncmFtcyBiL25jdXJzZXMtNS43L3Rlc3QvcHJvZ3JhbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0OWE0YwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvcHJvZ3JhbXMKQEAgLTAsMCArMSw4NiBAQAorIyAkSWQ6IHByb2dyYW1zLHYgMS4xNCAyMDA4LzA4LzE2IDIxOjQ3OjM5IHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkKKyMKKyMgcHJvZ3JhbXMgdXNlZCBmb3IgbmN1cnNlcyB0ZXN0cworYmFja2dyb3VuZAkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWJhY2tncm91bmQKK2JsdWUJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJYmx1ZQorYnMJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJYnMKK2NhcmRmaWxlCSQoTERGTEFHU19ERUZBVUxUKQkkKExPQ0FMX0xJQlMpCWNhcmRmaWxlCitjaGdhdAkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQljaGdhdAorY29sb3Jfc2V0CSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJY29sb3Jfc2V0CitkZW1vX2FsdGtleXMJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlkZW1vX2FsdGtleXMKK2RlbW9fZGVma2V5CSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJZGVtb19kZWZrZXkKK2RlbW9fZm9ybXMJJChMREZMQUdTX0RFRkFVTFQpCSQoTE9DQUxfTElCUykJZGVtb19mb3JtcyBlZGl0X2ZpZWxkCitkZW1vX2tleW9rCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJZGVtb19rZXlvaworZGVtb19tZW51cwkkKExERkxBR1NfREVGQVVMVCkJJChMT0NBTF9MSUJTKQlkZW1vX21lbnVzCitkZW1vX3BhbmVscwkkKExERkxBR1NfREVGQVVMVCkJJChMT0NBTF9MSUJTKQlkZW1vX3BhbmVscworZGVtb190ZXJtY2FwCSQoTERGTEFHU19USU5GTykJJChMT0NBTF9MSUJTKQlkZW1vX3Rlcm1jYXAKK2RpdHRvCQkkKExERkxBR1NfVEhSRUFEUykJJChMT0NBTF9MSUJTKQlkaXR0bworZG90cwkJJChMREZMQUdTX1RJTkZPKQkkKExPQ0FMX0xJQlMpCWRvdHMKK2RvdHNfbXZjdXIJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlkb3RzX212Y3VyCitlY2hvY2hhcgkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWVjaG9jaGFyCitmaWx0ZXIJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJZmlsdGVyCitmaXJld29yawkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWZpcmV3b3JrCitmaXJzdGxhc3QJJChMREZMQUdTX0RFRkFVTFQpCSQoTE9DQUxfTElCUykJZmlyc3RsYXN0Citmb2xka2V5cwkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCWZvbGRrZXlzCitnZGMJCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJZ2RjCitoYW5vaQkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQloYW5vaQoraGFzaHRlc3QJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQloYXNodGVzdAoraW5jaF93aWRlCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJaW5jaF93aWRlCitpbmNocwkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlpbmNocworaW5zX3dpZGUJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlpbnNfd2lkZQoraW5zZXJ0cwkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlpbnNlcnRzCitrZXlfbmFtZXMJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlrZXlfbmFtZXMKK2tleW5hbWVzCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJa2V5bmFtZXMKK2tuaWdodAkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlrbmlnaHQKK2xydGVzdAkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQlscnRlc3QKK21vdmV3aW5kb3cJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQltb3Zld2luZG93CituY3Vyc2VzCQkkKExERkxBR1NfREVGQVVMVCkJJChMT0NBTF9MSUJTKQluY3Vyc2VzCituZXdkZW1vCQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCW5ld2RlbW8KK3JhaWxyb2FkCSQoTERGTEFHU19USU5GTykJJChMT0NBTF9MSUJTKQlyYWlscm9hZAorcmFpbgkJJChMREZMQUdTX1RIUkVBRFMpCSQoTE9DQUxfTElCUykJcmFpbgorcmVkcmF3CQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXJlZHJhdworc2F2ZXNjcmVlbgkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXNhdmVzY3JlZW4KK3RjbG9jawkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl0Y2xvY2sKK3Rlc3RfYXJyYXlzCSQoTERGTEFHU19USU5GTykJJChMT0NBTF9MSUJTKQl0ZXN0X2FycmF5cwordGVzdF9nZXRfd3N0cgkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXRlc3RfZ2V0X3dzdHIKK3Rlc3RfZ2V0c3RyCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJdGVzdF9nZXRzdHIKK3Rlc3RfaW5zdHIJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl0ZXN0X2luc3RyCit0ZXN0X2lud3N0cgkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXRlc3RfaW53c3RyCit0ZXN0X29wYXF1ZQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXRlc3Rfb3BhcXVlCit0ZXN0YWRkY2gJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl0ZXN0YWRkY2gKK3Rlc3RjdXJzCSQoTERGTEFHU19DVVJTRVMpCSQoTE9DQUxfTElCUykJdGVzdGN1cnMKK3Rlc3RzY2FudwkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXRlc3RzY2FudwordmlldwkJJChMREZMQUdTX0NVUlNFUykJJChMT0NBTF9MSUJTKQl2aWV3Cit3b3JtCQkkKExERkxBR1NfVEhSRUFEUykJJChMT0NBTF9MSUJTKQl3b3JtCit4bWFzCQkkKExERkxBR1NfQ1VSU0VTKQkkKExPQ0FMX0xJQlMpCXhtYXMKKworIyB2aWxlOm1ha2Vtb2RlCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3JhaWxyb2FkLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L3JhaWxyb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwODIzZAotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvcmFpbHJvYWQuYwpAQCAtMCwwICsxLDI1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEF1dGhvcjogVGhvbWFzIEUuIERpY2tleSAtIDIwMDAKKyAqCisgKiAkSWQ6IHJhaWxyb2FkLmMsdiAxLjE2IDIwMDgvMDIvMDkgMTg6MDg6NDMgdG9tIEV4cCAkCisgKgorICogQSBzaW1wbGUgZGVtbyBvZiB0aGUgdGVybWNhcCBpbnRlcmZhY2UuCisgKi8KKyNkZWZpbmUgVVNFX1RJTkZPCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBIQVZFX1RHRVRFTlQKKworc3RhdGljIGNoYXIgKndpcGVpdDsKK3N0YXRpYyBjaGFyICptb3ZlaXQ7CitzdGF0aWMgaW50IGxlbmd0aDsKK3N0YXRpYyBpbnQgaGVpZ2h0OworCitzdGF0aWMgY2hhciAqZmluaXNDOworc3RhdGljIGNoYXIgKmZpbmlzUzsKK3N0YXRpYyBjaGFyICpmaW5pc1U7CisKK3N0YXRpYyBjaGFyICpzdGFydEM7CitzdGF0aWMgY2hhciAqc3RhcnRTOworc3RhdGljIGNoYXIgKnN0YXJ0VTsKKworc3RhdGljIGNoYXIgKmJhY2t1cDsKKworc3RhdGljIGJvb2wgaW50ZXJydXB0ZWQgPSBGQUxTRTsKKworc3RhdGljIGludAorb3V0YyhUUFVUU19BUkcgYykKK3sKKyAgICBpZiAoaW50ZXJydXB0ZWQpIHsKKwljaGFyIHRtcCA9IGM7CisJd3JpdGUoU1RET1VUX0ZJTEVOTywgJnRtcCwgMSk7CisgICAgfSBlbHNlIHsKKwlwdXRjKGMsIHN0ZG91dCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorUHV0Q2hhcihpbnQgY2gpCit7CisgICAgcHV0Y2hhcihjaCk7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgbmFwbXMobW92ZWl0ID8gMTAgOiA1MCk7CS8qIG5vdCByZWFsbHkgdGVybWNhcC4uLiAqLworfQorCitzdGF0aWMgdm9pZAorQmFja3VwKHZvaWQpCit7CisgICAgdHB1dHMoYmFja3VwICE9IDAgPyBiYWNrdXAgOiAiXGIiLCAxLCBvdXRjKTsKK30KKworc3RhdGljIHZvaWQKK1Nob3dDdXJzb3IoaW50IGZsYWcpCit7CisgICAgaWYgKHN0YXJ0QyAhPSAwICYmIGZpbmlzQyAhPSAwKSB7CisJdHB1dHMoZmxhZyA/IHN0YXJ0QyA6IGZpbmlzQywgMSwgb3V0Yyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorU3RhbmRPdXQoaW50IGZsYWcpCit7CisgICAgaWYgKHN0YXJ0UyAhPSAwICYmIGZpbmlzUyAhPSAwKSB7CisJdHB1dHMoZmxhZyA/IHN0YXJ0UyA6IGZpbmlzUywgMSwgb3V0Yyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorVW5kZXJsaW5lKGludCBmbGFnKQoreworICAgIGlmIChzdGFydFUgIT0gMCAmJiBmaW5pc1UgIT0gMCkgeworCXRwdXRzKGZsYWcgPyBzdGFydFUgOiBmaW5pc1UsIDEsIG91dGMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK1Nob3dTaWduKGNoYXIgKnN0cmluZykKK3sKKyAgICBjaGFyICpiYXNlID0gc3RyaW5nOworICAgIGludCBjaCwgZmlyc3QsIGxhc3Q7CisKKyAgICBpZiAobW92ZWl0ICE9IDApIHsKKwl0cHV0cyh0Z290byhtb3ZlaXQsIDAsIGhlaWdodCAtIDEpLCAxLCBvdXRjKTsKKwl0cHV0cyh3aXBlaXQsIDEsIG91dGMpOworICAgIH0KKworICAgIHdoaWxlICgqc3RyaW5nICE9IDApIHsKKwljaCA9ICpzdHJpbmc7CisJaWYgKGNoICE9ICcgJykgeworCSAgICBpZiAobW92ZWl0ICE9IDApIHsKKwkJZm9yIChmaXJzdCA9IGxlbmd0aCAtIDI7IGZpcnN0ID49IChzdHJpbmcgLSBiYXNlKTsgZmlyc3QtLSkgeworCQkgICAgaWYgKGZpcnN0IDwgbGVuZ3RoIC0gMSkgeworCQkJdHB1dHModGdvdG8obW92ZWl0LCBmaXJzdCArIDEsIGhlaWdodCAtIDEpLCAxLCBvdXRjKTsKKwkJCVB1dENoYXIoJyAnKTsKKwkJICAgIH0KKwkJICAgIHRwdXRzKHRnb3RvKG1vdmVpdCwgZmlyc3QsIGhlaWdodCAtIDEpLCAxLCBvdXRjKTsKKwkJICAgIFB1dENoYXIoY2gpOworCQl9CisJICAgIH0gZWxzZSB7CisJCWxhc3QgPSBjaDsKKwkJaWYgKGlzYWxwaGEoY2gpKSB7CisJCSAgICBmaXJzdCA9IGlzdXBwZXIoY2gpID8gJ0EnIDogJ2EnOworCQl9IGVsc2UgaWYgKGlzZGlnaXQoY2gpKSB7CisJCSAgICBmaXJzdCA9ICcwJzsKKwkJfSBlbHNlIHsKKwkJICAgIGZpcnN0ID0gY2g7CisJCX0KKwkJaWYgKGZpcnN0IDwgbGFzdCkgeworCQkgICAgVW5kZXJsaW5lKDEpOworCQkgICAgd2hpbGUgKGZpcnN0IDwgbGFzdCkgeworCQkJUHV0Q2hhcihmaXJzdCk7CisJCQlCYWNrdXAoKTsKKwkJCWZpcnN0Kys7CisJCSAgICB9CisJCSAgICBVbmRlcmxpbmUoMCk7CisJCX0KKwkgICAgfQorCSAgICBpZiAobW92ZWl0ICE9IDApCisJCUJhY2t1cCgpOworCX0KKwlTdGFuZE91dCgxKTsKKwlQdXRDaGFyKGNoKTsKKwlTdGFuZE91dCgwKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlzdHJpbmcrKzsKKyAgICB9CisgICAgaWYgKG1vdmVpdCAhPSAwKQorCXRwdXRzKHdpcGVpdCwgMSwgb3V0Yyk7CisgICAgcHV0Y2hhcignXG4nKTsKK30KKworc3RhdGljIHZvaWQKK2NsZWFudXAodm9pZCkKK3sKKyAgICBVbmRlcmxpbmUoMCk7CisgICAgU3RhbmRPdXQoMCk7CisgICAgU2hvd0N1cnNvcigxKTsKK30KKworc3RhdGljIHZvaWQKK29uc2lnKGludCBuIEdDQ19VTlVTRUQpCit7CisgICAgaW50ZXJydXB0ZWQgPSBUUlVFOworICAgIGNsZWFudXAoKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZAorcmFpbHJvYWQoY2hhciAqKmFyZ3MpCit7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpuYW1lID0gZ2V0ZW52KCJURVJNIik7CisgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgY2hhciBhcmVhWzEwMjRdLCAqYXAgPSBhcmVhOworCisgICAgaWYgKG5hbWUgPT0gMCkKKwluYW1lID0gImR1bWIiOworICAgIGlmICh0Z2V0ZW50KGJ1ZmZlciwgbmFtZSkgPj0gMCkgeworCisJd2lwZWl0ID0gdGdldHN0cigiY2UiLCAmYXApOworCWhlaWdodCA9IHRnZXRudW0oImxpIik7CisJbGVuZ3RoID0gdGdldG51bSgiY28iKTsKKwltb3ZlaXQgPSB0Z2V0c3RyKCJjbSIsICZhcCk7CisKKwlpZiAod2lwZWl0ID09IDAKKwkgICAgfHwgbW92ZWl0ID09IDAKKwkgICAgfHwgaGVpZ2h0IDw9IDAKKwkgICAgfHwgbGVuZ3RoIDw9IDApIHsKKwkgICAgd2lwZWl0ID0gMDsKKwkgICAgbW92ZWl0ID0gMDsKKwkgICAgaGVpZ2h0ID0gMDsKKwkgICAgbGVuZ3RoID0gMDsKKwl9CisKKwlzdGFydFMgPSB0Z2V0c3RyKCJzbyIsICZhcCk7CisJZmluaXNTID0gdGdldHN0cigic2UiLCAmYXApOworCisJc3RhcnRVID0gdGdldHN0cigidXMiLCAmYXApOworCWZpbmlzVSA9IHRnZXRzdHIoInVlIiwgJmFwKTsKKworCWJhY2t1cCA9IHRnZXRzdHIoImxlIiwgJmFwKTsKKworCXN0YXJ0QyA9IHRnZXRzdHIoInZlIiwgJmFwKTsKKwlmaW5pc0MgPSB0Z2V0c3RyKCJ2aSIsICZhcCk7CisKKwlTaG93Q3Vyc29yKDApOworCisJQ0FUQ0hBTEwob25zaWcpOworCisJd2hpbGUgKCphcmdzKSB7CisJICAgIFNob3dTaWduKCphcmdzKyspOworCX0KKwlTaG93Q3Vyc29yKDEpOworICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaWYgKGFyZ2MgPiAxKSB7CisJcmFpbHJvYWQoYXJndiArIDEpOworICAgIH0gZWxzZSB7CisJc3RhdGljIGNoYXIgd29ybGRbXSA9ICJIZWxsbyBXb3JsZCI7CisJc3RhdGljIGNoYXIgKmhlbGxvW10gPQorCXt3b3JsZCwgMH07CisJcmFpbHJvYWQoaGVsbG8pOworICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisjZWxzZQoraW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsCisgICAgIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGVybWNhcFxuIik7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3JhaW4uYyBiL25jdXJzZXMtNS43L3Rlc3QvcmFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YTVlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L3JhaW4uYwpAQCAtMCwwICsxLDM4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHJhaW4uYyx2IDEuMzQgMjAwOC8wNS8yNCAyMzozNDozNCB0b20gRXhwICQKKyAqLworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisvKiByYWluIDExLzMvMTk4MCBFUFMvQ0lUSEVQICovCisKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworV0FOVF9VU0VfV0lORE9XKCk7CisKKyNkZWZpbmUgTUFYX1RIUkVBRFMJMTAKKyNkZWZpbmUgTUFYX0RST1AJNQorCitzdHJ1Y3QgREFUQTsKKwordHlwZWRlZiB2b2lkICgqRHJhd1BhcnQpIChzdHJ1Y3QgREFUQSAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgREFUQSB7CisgICAgaW50IHksIHg7CisjaWZkZWYgVVNFX1BUSFJFQURTCisgICAgRHJhd1BhcnQgZnVuYzsKKyAgICBpbnQgc3RhdGU7CisjZW5kaWYKK30gREFUQTsKKworI2lmZGVmIFVTRV9QVEhSRUFEUworcHRocmVhZF9jb25kX3QgY29uZF9uZXh0X2Ryb3A7CitwdGhyZWFkX211dGV4X3QgbXV0ZXhfbmV4dF9kcm9wOworc3RhdGljIGludCB1c2VkX3RocmVhZHM7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBwdGhyZWFkX3QgbXlzZWxmOworICAgIGxvbmcgY291bnRlcjsKK30gU1RBVFM7CisKK3N0YXRpYyBTVEFUUyBkcm9wX3RocmVhZHNbTUFYX1RIUkVBRFNdOworI2VuZGlmCisKK3N0YXRpYyB2b2lkCitvbnNpZyhpbnQgbiBHQ0NfVU5VU0VEKQoreworICAgIGN1cnNfc2V0KDEpOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyBmbG9hdAorcmFuZih2b2lkKQoreworICAgIGxvbmcgciA9IChyYW5kKCkgJiAwNzc3NzcpOworICAgIHJldHVybiAoKGZsb2F0KSByIC8gMzI3NjguKTsKK30KKworc3RhdGljIGludAorcmFuZG9tX3godm9pZCkKK3sKKyAgICByZXR1cm4gKCgoZmxvYXQpIChDT0xTIC0gNCkgKiByYW5mKCkpICsgMik7Cit9CisKK3N0YXRpYyBpbnQKK3JhbmRvbV95KHZvaWQpCit7CisgICAgcmV0dXJuICgoKGZsb2F0KSAoTElORVMgLSA0KSAqIHJhbmYoKSkgKyAyKTsKK30KKworc3RhdGljIGludAorbmV4dF9qKGludCBqKQoreworICAgIGlmIChqID09IDApCisJaiA9IE1BWF9EUk9QIC0gMTsKKyAgICBlbHNlCisJLS1qOworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbnQgeiA9IChpbnQpICgzICogcmFuZigpKTsKKwljaHR5cGUgY29sb3IgPSBDT0xPUl9QQUlSKHopOworCWlmICh6KQorCSAgICBjb2xvciB8PSBBX0JPTEQ7CisJYXR0cnNldChjb2xvcik7CisgICAgfQorICAgIHJldHVybiBqOworfQorCitzdGF0aWMgdm9pZAorcGFydDEoREFUQSAqIGRyb3ApCit7CisgICAgbXZhZGRjaChkcm9wLT55LCBkcm9wLT54LCAnLicpOworfQorCitzdGF0aWMgdm9pZAorcGFydDIoREFUQSAqIGRyb3ApCit7CisgICAgbXZhZGRjaChkcm9wLT55LCBkcm9wLT54LCAnbycpOworfQorCitzdGF0aWMgdm9pZAorcGFydDMoREFUQSAqIGRyb3ApCit7CisgICAgbXZhZGRjaChkcm9wLT55LCBkcm9wLT54LCAnTycpOworfQorCitzdGF0aWMgdm9pZAorcGFydDQoREFUQSAqIGRyb3ApCit7CisgICAgbXZhZGRjaChkcm9wLT55IC0gMSwgZHJvcC0+eCwgJy0nKTsKKyAgICBtdmFkZHN0cihkcm9wLT55LCBkcm9wLT54IC0gMSwgInwufCIpOworICAgIG12YWRkY2goZHJvcC0+eSArIDEsIGRyb3AtPngsICctJyk7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJ0NShEQVRBICogZHJvcCkKK3sKKyAgICBtdmFkZGNoKGRyb3AtPnkgLSAyLCBkcm9wLT54LCAnLScpOworICAgIG12YWRkc3RyKGRyb3AtPnkgLSAxLCBkcm9wLT54IC0gMSwgIi8gXFwiKTsKKyAgICBtdmFkZHN0cihkcm9wLT55LCBkcm9wLT54IC0gMiwgInwgTyB8Iik7CisgICAgbXZhZGRzdHIoZHJvcC0+eSArIDEsIGRyb3AtPnggLSAxLCAiXFwgLyIpOworICAgIG12YWRkY2goZHJvcC0+eSArIDIsIGRyb3AtPngsICctJyk7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJ0NihEQVRBICogZHJvcCkKK3sKKyAgICBtdmFkZGNoKGRyb3AtPnkgLSAyLCBkcm9wLT54LCAnICcpOworICAgIG12YWRkc3RyKGRyb3AtPnkgLSAxLCBkcm9wLT54IC0gMSwgIiAgICIpOworICAgIG12YWRkc3RyKGRyb3AtPnksIGRyb3AtPnggLSAyLCAiICAgICAiKTsKKyAgICBtdmFkZHN0cihkcm9wLT55ICsgMSwgZHJvcC0+eCAtIDEsICIgICAiKTsKKyAgICBtdmFkZGNoKGRyb3AtPnkgKyAyLCBkcm9wLT54LCAnICcpOworfQorCisjaWZkZWYgVVNFX1BUSFJFQURTCitzdGF0aWMgdm9pZAorbmFwc29tZSh2b2lkKQoreworICAgIG5hcG1zKDYwKTsKK30KKworLyoKKyAqIFRoaXMgcnVucyBpbnNpZGUgdGhlIHVzZV93aW5kb3coKSBtdXRleC4KKyAqLworc3RhdGljIGludAorcmVhbGx5X2RyYXcoV0lORE9XICp3aW4sIHZvaWQgKmFyZykKK3sKKyAgICBEQVRBICpkYXRhID0gKERBVEEgKikgYXJnOworCisgICAgKHZvaWQpIHdpbjsKKyAgICBuZXh0X2ooZGF0YS0+c3RhdGUpOworICAgIGRhdGEtPmZ1bmMoZGF0YSk7CisgICAgcmVmcmVzaCgpOworICAgIHJldHVybiBPSzsKK30KKworc3RhdGljIHZvaWQKK2RyYXdfcGFydCh2b2lkICgqZnVuYykgKERBVEEgKiksIGludCBzdGF0ZSwgREFUQSAqIGRhdGEpCit7CisgICAgZGF0YS0+ZnVuYyA9IGZ1bmM7CisgICAgZGF0YS0+c3RhdGUgPSBzdGF0ZTsKKyAgICB1c2Vfd2luZG93KHN0ZHNjciwgcmVhbGx5X2RyYXcsICh2b2lkICopIGRhdGEpOworICAgIG5hcHNvbWUoKTsKK30KKworLyoKKyAqIFRlbGwgdGhlIHRocmVhZHMgdGhhdCBvbmUgb2YgdGhlbSBjYW4gc3RhcnQgd29yayBvbiBhIG5ldyByYWluZHJvcC4KKyAqIFRoZXkgbWF5IGFsbCBiZSBidXN5IGlmIHdlJ3JlIHNlbmRpbmcgcmVxdWVzdHMgdG9vIHJhcGlkbHkuCisgKi8KK3N0YXRpYyBpbnQKK3B1dF9uZXh0X2Ryb3Aodm9pZCkKK3sKKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kX25leHRfZHJvcCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4X25leHRfZHJvcCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFdhaXQgdW50aWwgd2UncmUgYXNzaWduZWQgdGhlIHRhc2sgb2YgZHJhd2luZyBhIG5ldyByYWluZHJvcC4KKyAqLworc3RhdGljIGludAorZ2V0X25leHRfZHJvcCh2b2lkKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXhfbmV4dF9kcm9wKTsKKyAgICBwdGhyZWFkX2NvbmRfd2FpdCgmY29uZF9uZXh0X2Ryb3AsICZtdXRleF9uZXh0X2Ryb3ApOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkICoKK2RyYXdfZHJvcCh2b2lkICphcmcpCit7CisgICAgREFUQSBteWRhdGE7CisgICAgaW50IG15c3RhdHM7CisKKyAgICAvKgorICAgICAqIEZpbmQgbXlzZWxmIGluIHRoZSBsaXN0IG9mIHRocmVhZHMgc28gd2UgY2FuIGNvdW50IHRoZSBudW1iZXIgb2YgbG9vcHMuCisgICAgICovCisgICAgZm9yIChteXN0YXRzID0gMDsgbXlzdGF0cyA8IE1BWF9USFJFQURTOyArK215c3RhdHMpIHsKKwlpZiAoZHJvcF90aHJlYWRzW215c3RhdHNdLm15c2VsZiA9PSBwdGhyZWFkX3NlbGYoKSkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgZG8geworCWlmIChteXN0YXRzIDwgTUFYX1RIUkVBRFMpCisJICAgIGRyb3BfdGhyZWFkc1tteXN0YXRzXS5jb3VudGVyKys7CisKKwkvKgorCSAqIE1ha2UgYSBjb3B5IG9mIGNhbGxlcidzIGRhdGEuICBXZSdyZSBjaGVhdGluZyBmb3IgdGhlIGNhc2VzIGFmdGVyCisJICogdGhlIGZpcnN0IGxvb3Agc2luY2Ugd2Ugc3RpbGwgaGF2ZSBhIHBvaW50ZXIgaW50byB0aGUgbWFpbiB0aHJlYWQKKwkgKiB0byB0aGUgZGF0YSB3aGljaCBpdCB1c2VzIGZvciBzZXR0aW5nIHVwIHRoaXMgdGhyZWFkIChidXQgaXQgaGFzCisJICogYmVlbiBtb2RpZmllZCB0byB1c2UgZGlmZmVyZW50IGNvb3JkaW5hdGVzKS4KKwkgKi8KKwlteWRhdGEgPSAqKERBVEEgKikgYXJnOworCisJZHJhd19wYXJ0KHBhcnQxLCAwLCAmbXlkYXRhKTsKKwlkcmF3X3BhcnQocGFydDIsIDEsICZteWRhdGEpOworCWRyYXdfcGFydChwYXJ0MywgMiwgJm15ZGF0YSk7CisJZHJhd19wYXJ0KHBhcnQ0LCAzLCAmbXlkYXRhKTsKKwlkcmF3X3BhcnQocGFydDUsIDQsICZteWRhdGEpOworCWRyYXdfcGFydChwYXJ0NiwgMCwgJm15ZGF0YSk7CisgICAgfSB3aGlsZSAoZ2V0X25leHRfZHJvcCgpKTsKKworICAgIHJldHVybiBOVUxMOworfQorCisvKgorICogVGhlIGRlc2NyaXB0aW9uIG9mIHB0aHJlYWRfY3JlYXRlKCkgaXMgbWlzbGVhZGluZywgc2luY2UgaXQgaW1wbGllcyB0aGF0CisgKiB0aHJlYWRzIHdpbGwgZXhpdCBjbGVhbmx5IGFmdGVyIHRoZWlyIGZ1bmN0aW9uIHJldHVybnMuCisgKiAKKyAqIFNpbmNlIHRoZXkgZG8gbm90IChhbmQgdGhlIG51bWJlciBvZiB0aHJlYWRzIGlzIGxpbWl0ZWQgYnkgc3lzdGVtCisgKiByZXNvdXJjZXMpLCBtYWtlIGEgbGltaXRlZCBudW1iZXIgb2YgdGhyZWFkcywgYW5kIHNpZ25hbCBhbnkgdGhhdCBhcmUKKyAqIHdhaXRpbmcgd2hlbiB3ZSB3YW50IGEgdGhyZWFkIHBhc3QgdGhhdCBsaW1pdC4KKyAqLworc3RhdGljIGludAorc3RhcnRfZHJvcChEQVRBICogZGF0YSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoIXVzZWRfdGhyZWFkcykgeworCS8qIG11dGV4IGFuZCBjb25kaXRpb24gZm9yIHNpZ25hbGxpbmcgdGhyZWFkICovCisJcHRocmVhZF9tdXRleF9pbml0KCZtdXRleF9uZXh0X2Ryb3AsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZjb25kX25leHRfZHJvcCwgTlVMTCk7CisgICAgfQorCisgICAgaWYgKHVzZWRfdGhyZWFkcyA8IE1BWF9USFJFQURTKSB7CisJcmMgPSBwdGhyZWFkX2NyZWF0ZSgmKGRyb3BfdGhyZWFkc1t1c2VkX3RocmVhZHNdLm15c2VsZiksCisJCQkgICAgTlVMTCwKKwkJCSAgICBkcmF3X2Ryb3AsCisJCQkgICAgZGF0YSk7CisJKyt1c2VkX3RocmVhZHM7CisgICAgfSBlbHNlIHsKKwlyYyA9IHB1dF9uZXh0X2Ryb3AoKTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2dldF9pbnB1dCh2b2lkKQoreworICAgIHJldHVybiBVU0lOR19XSU5ET1coc3Rkc2NyLCB3Z2V0Y2gpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwKKyAgICAgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKyAgICBEQVRBIGRyb3A7CisjaWZuZGVmIFVTRV9QVEhSRUFEUworICAgIERBVEEgbGFzdFtNQVhfRFJPUF07CisjZW5kaWYKKyAgICBpbnQgaiA9IDA7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBDQVRDSEFMTChvbnNpZyk7CisKKyAgICBpbml0c2NyKCk7CisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCWludCBiZyA9IENPTE9SX0JMQUNLOworCXN0YXJ0X2NvbG9yKCk7CisjaWYgSEFWRV9VU0VfREVGQVVMVF9DT0xPUlMKKwlpZiAodXNlX2RlZmF1bHRfY29sb3JzKCkgPT0gT0spCisJICAgIGJnID0gLTE7CisjZW5kaWYKKwlpbml0X3BhaXIoMSwgQ09MT1JfQkxVRSwgYmcpOworCWluaXRfcGFpcigyLCBDT0xPUl9DWUFOLCBiZyk7CisgICAgfQorICAgIG5sKCk7CisgICAgbm9lY2hvKCk7CisgICAgY3Vyc19zZXQoMCk7CisgICAgdGltZW91dCgwKTsKKworI2lmbmRlZiBVU0VfUFRIUkVBRFMKKyAgICBmb3IgKGogPSBNQVhfRFJPUDsgLS1qID49IDA7KSB7CisJbGFzdFtqXS54ID0gcmFuZG9tX3goKTsKKwlsYXN0W2pdLnkgPSByYW5kb21feSgpOworICAgIH0KKyAgICBqID0gMDsKKyNlbmRpZgorCisgICAgd2hpbGUgKCFkb25lKSB7CisJZHJvcC54ID0gcmFuZG9tX3goKTsKKwlkcm9wLnkgPSByYW5kb21feSgpOworCisjaWZkZWYgVVNFX1BUSFJFQURTCisJaWYgKHN0YXJ0X2Ryb3AoJmRyb3ApICE9IDApIHsKKwkgICAgYmVlcCgpOworCX0KKyNlbHNlCisJLyoKKwkgKiBUaGUgbm9uLXRocmVhZGVkIGNvZGUgZHJhd3MgcGFydHMgb2YgZWFjaCBkcm9wIG9uIGVhY2ggbG9vcC4KKwkgKi8KKwlwYXJ0MSgmZHJvcCk7CisKKwlwYXJ0MigmbGFzdFtqXSk7CisKKwlqID0gbmV4dF9qKGopOworCXBhcnQzKCZsYXN0W2pdKTsKKworCWogPSBuZXh0X2ooaik7CisJcGFydDQoJmxhc3Rbal0pOworCisJaiA9IG5leHRfaihqKTsKKwlwYXJ0NSgmbGFzdFtqXSk7CisKKwlqID0gbmV4dF9qKGopOworCXBhcnQ2KCZsYXN0W2pdKTsKKworCWxhc3Rbal0gPSBkcm9wOworI2VuZGlmCisKKwlzd2l0Y2ggKGdldF9pbnB1dCgpKSB7CisJY2FzZSAoJ3EnKToKKwljYXNlICgnUScpOgorCSAgICBkb25lID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAncyc6CisJICAgIG5vZGVsYXkoc3Rkc2NyLCBGQUxTRSk7CisJICAgIGJyZWFrOworCWNhc2UgJyAnOgorCSAgICBub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisJICAgIGJyZWFrOworI2lmZGVmIEtFWV9SRVNJWkUKKwljYXNlIChLRVlfUkVTSVpFKToKKwkgICAgYnJlYWs7CisjZW5kaWYKKwl9CisJbmFwbXMoNTApOworICAgIH0KKyAgICBjdXJzX3NldCgxKTsKKyAgICBlbmR3aW4oKTsKKyNpZmRlZiBVU0VfUFRIUkVBRFMKKyAgICBwcmludGYoIkNvdW50cyBwZXIgdGhyZWFkOlxuIik7CisgICAgZm9yIChqID0gMDsgaiA8IE1BWF9USFJFQURTOyArK2opCisJcHJpbnRmKCIgICVkOiVsZFxuIiwgaiwgZHJvcF90aHJlYWRzW2pdLmNvdW50ZXIpOworI2VuZGlmCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvcmVkcmF3LmMgYi9uY3Vyc2VzLTUuNy90ZXN0L3JlZHJhdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTYzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L3JlZHJhdy5jCkBAIC0wLDAgKzEsMTY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogcmVkcmF3LmMsdiAxLjQgMjAwNy8wNi8zMCAxNzo1NTowNiB0b20gRXhwICQKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgcmVkcmF3d2luKCkgYW5kIHdyZWRyYXdsbigpIGZ1bmN0aW9ucy4KKyAqIFRob21hcyBEaWNrZXkgLSAyMDA2LzExLzQKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKK3N0YXRpYyB2b2lkCit0cmFzaChpbnQgYmVnX3gsIGludCBtYXhfeCwgaW50IGN1cl94KQoreworICAgIGludCB4OworCisgICAgZm9yICh4ID0gY3VyX3g7IHggPiBiZWdfeDsgLS14KSB7CisJcHV0Y2hhcignXGInKTsKKyAgICB9CisgICAgZm9yICh4ID0gYmVnX3g7IHggPCBtYXhfeDsgKyt4KSB7CisJaWYgKHggPCBjdXJfeCkKKwkgICAgcHV0Y2hhcignPCcpOworCWVsc2UgaWYgKHggPT0gY3VyX3gpCisJICAgIHB1dGNoYXIoJz0nKTsKKwllbHNlIGlmICh4ID4gY3VyX3gpCisJICAgIHB1dGNoYXIoJz4nKTsKKyAgICB9CisgICAgZm9yICh4ID0gbWF4X3g7IHggPiBjdXJfeDsgLS14KSB7CisJcHV0Y2hhcignXGInKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3JlZHJhdyhXSU5ET1cgKndpbikKK3sKKyAgICBXSU5ET1cgKndpbjE7CisgICAgV0lORE9XICp3aW4yOworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworICAgIGludCBjaCwgeSwgeDsKKyAgICBpbnQgbWF4X3ksIG1heF94OworICAgIGludCBiZWdfeSwgYmVnX3g7CisKKyAgICBzY3JvbGxvayh3aW4sIFRSVUUpOworICAgIGtleXBhZCh3aW4sIFRSVUUpOworICAgIGdldG1heHl4KHdpbiwgbWF4X3ksIG1heF94KTsKKyAgICBnZXRiZWd5eCh3aW4sIGJlZ195LCBiZWdfeCk7CisgICAgd2hpbGUgKCFkb25lKSB7CisJY2ggPSB3Z2V0Y2god2luKTsKKwlnZXR5eCh3aW4sIHksIHgpOworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdxJzoKKwkgICAgLyogRkFMTFRIUlUgKi8KKwljYXNlIEVTQ0FQRToKKwkgICAgZG9uZSA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3cnOgorCSAgICB3aW4xID0gbmV3d2luKG1heF95LCBtYXhfeCwKKwkJCSAgYmVnX3ksIGJlZ194KTsKKwkgICAgd2luMiA9IG5ld3dpbihtYXhfeSAtIDIsIG1heF94IC0gMiwKKwkJCSAgYmVnX3kgKyAxLCBiZWdfeCArIDEpOworCSAgICBib3god2luMSwgMCwgMCk7CisJICAgIHdyZWZyZXNoKHdpbjEpOworCisJICAgIHRlc3RfcmVkcmF3KHdpbjIpOworCisJICAgIGRlbHdpbih3aW4yKTsKKwkgICAgZGVsd2luKHdpbjEpOworCisJICAgIHRvdWNod2luKHdpbik7CisJICAgIGJyZWFrOworCisJY2FzZSAnISc6CisJICAgIC8qCisJICAgICAqIHJlZHJhd3dpbigpIGFuZCB3cmVkcmF3bG4oKSBkbyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlCisJICAgICAqIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGN1cnNvciBtYXkgaGF2ZSBtb3ZlZC4gIFRoYXQgbWFrZXMgdGhlbQorCSAgICAgKiBjdW1iZXJzb21lIGZvciB1c2luZyB3aXRoIGEgc2hlbGwgY29tbWFuZC4gIFNvIHdlIHNpbXBseQorCSAgICAgKiB0cmFzaCB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSB3aW5kb3cgdXNpbmcgYmFja3NwYWNlL292ZXJ3cml0ZS4KKwkgICAgICovCisJICAgIHRyYXNoKGJlZ194LCBtYXhfeCwgeCArIGJlZ194KTsKKwkgICAgYnJlYWs7CisKKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKwljYXNlICdAJzoKKwkgICAgLyoKKwkgICAgICogRm9yIGEgc2hlbGwgY29tbWFuZCwgd2UgY2FuIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIG5vdGVkIGFib3ZlCisJICAgICAqIHVzaW5nIG12Y3VyKCkuICBJdCBpcyBpZmRlZidkIGZvciBOQ1VSU0VTLCBzaW5jZSBYL09wZW4gZG9lcworCSAgICAgKiBub3QgZGVmaW5lIHRoZSBjYXNlIHdoZXJlIHRoZSBvbGQgbG9jYXRpb24gaXMgdW5rbm93bi4gCisJICAgICAqLworCSAgICBzeXN0ZW0oImRhdGUiKTsKKwkgICAgbXZjdXIoLTEsIC0xLCB5LCB4KTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgQ1RSTCgnVycpOgorCSAgICByZWRyYXd3aW4od2luKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIENUUkwoJ0wnKToKKwkgICAgd3JlZHJhd2xuKHdpbiwgeSwgMSk7CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfVVA6CisJICAgIGlmICh5ID4gMCkKKwkJd21vdmUod2luLCB5IC0gMSwgeCk7CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfRE9XTjoKKwkgICAgaWYgKHkgPCBtYXhfeSkKKwkJd21vdmUod2luLCB5ICsgMSwgeCk7CisJICAgIGJyZWFrOworCisJY2FzZSBLRVlfTEVGVDoKKwkgICAgaWYgKHggPiAwKQorCQl3bW92ZSh3aW4sIHksIHggLSAxKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgaWYgKHggPCBtYXhfeCkKKwkJd21vdmUod2luLCB5LCB4ICsgMSk7CisJICAgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgaWYgKGNoID4gS0VZX01JTikgeworCQl3YWRkc3RyKHdpbiwga2V5bmFtZShjaCkpOworCSAgICB9IGVsc2UgeworCQl3YWRkc3RyKHdpbiwgdW5jdHJsKFVDaGFyKGNoKSkpOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKwl3bm91dHJlZnJlc2god2luKTsKKwlkb3VwZGF0ZSgpOworICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW5pdHNjcigpOworICAgIHJhdygpOworICAgIG5vZWNobygpOworICAgIHRlc3RfcmVkcmF3KHN0ZHNjcik7CisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3Qvc2F2ZXNjcmVlbi5jIGIvbmN1cnNlcy01LjcvdGVzdC9zYXZlc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmMzI4YgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3Qvc2F2ZXNjcmVlbi5jCkBAIC0wLDAgKzEsMzE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogc2F2ZXNjcmVlbi5jLHYgMS4xMCAyMDA3LzA3LzIxIDE3OjU3OjM3IHRvbSBFeHAgJAorICoKKyAqIERlbW9uc3RyYXRlIHNhdmUvcmVzdG9yZSBmdW5jdGlvbnMgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnkuCisgKiBUaG9tYXMgRGlja2V5IC0gMjAwNy83LzE0CisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBib29sIHVzZV9pbml0ID0gRkFMU0U7CisKK3N0YXRpYyB2b2lkCitzZXR1cF9uZXh0KHZvaWQpCit7CisgICAgY3Vyc19zZXQoMSk7CisgICAgcmVzZXRfc2hlbGxfbW9kZSgpOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cChjaGFyICpmaWxlc1tdKQoreworICAgIGludCBuOworCisgICAgZm9yIChuID0gMDsgZmlsZXNbbl0gIT0gMDsgKytuKSB7CisJdW5saW5rKGZpbGVzW25dKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2xvYWRfc2NyZWVuKGNoYXIgKmZpbGVuYW1lKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICBpZiAodXNlX2luaXQpIHsKKwlpZiAoKHJlc3VsdCA9IHNjcl9pbml0KGZpbGVuYW1lKSkgIT0gRVJSKQorCSAgICByZXN1bHQgPSBzY3JfcmVzdG9yZShmaWxlbmFtZSk7CisgICAgfSBlbHNlIHsKKwlyZXN1bHQgPSBzY3Jfc2V0KGZpbGVuYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHNjcl9yZXN0b3JlKCkgb3Igc2NyX3NldCgpIG9wZXJhdGVzIG9uIGN1cnNjci4gIElmIHdlIHJlYWQgYSBjaGFyYWN0ZXIgdXNpbmcKKyAqIGdldGNoKCkgdGhhdCB3aWxsIHJlZnJlc2ggc3Rkc2NyLCB3aXBpbmcgb3V0IHRoZSByZXN1bHQuICBUbyBhdm9pZCB0aGF0LAorICogY29weSB0aGUgZGF0YSBiYWNrIGZyb20gY3Vyc2NyIHRvIHN0ZHNjci4KKyAqLworc3RhdGljIHZvaWQKK2FmdGVyX2xvYWQodm9pZCkKK3sKKyAgICBvdmVyd3JpdGUoY3Vyc2NyLCBzdGRzY3IpOworICAgIGRvdXBkYXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3doYXQoaW50IHdoaWNoLCBpbnQgbGFzdCkKK3sKKyAgICBpbnQgeSwgeDsKKyAgICB0aW1lX3Qgbm93ID0gdGltZSgodGltZV90ICopIDApOworCisgICAgZ2V0eXgoc3Rkc2NyLCB5LCB4KTsKKworICAgIG1vdmUoMCwgMCk7CisgICAgcHJpbnR3KCJTYXZlZCAlZCBvZiAlZCAtICVzIiwgd2hpY2gsIGxhc3QgKyAxLCBjdGltZSgmbm93KSk7CisKKyAgICBtb3ZlKHksIHgpOworCisgICAgcmVmcmVzaCgpOworfQorCitzdGF0aWMgaW50CitnZXRfY29tbWFuZChpbnQgd2hpY2gsIGludCBsYXN0KQoreworICAgIGludCBjaDsKKworICAgIHRpbWVvdXQoMTAwKTsKKworICAgIGRvIHsKKwlzaG93X3doYXQod2hpY2gsIGxhc3QpOworCWNoID0gZ2V0Y2goKTsKKyAgICB9IHdoaWxlIChjaCA9PSBFUlIpOworCisgICAgcmV0dXJuIGNoOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqbXNnW10gPQorICAgIHsKKwkiVXNhZ2U6IHNhdmVzY3JlZW4gWy1yXSBmaWxlcyIsCisJIiIsCisJIk9wdGlvbnM6IiwKKwkiIC1pICB1c2Ugc2NyX2luaXQvc2NyX3Jlc3RvcmUgcmF0aGVyIHRoYW4gc2NyX3NldCIsCisJIiAtciAgcmVwbGF5IHRoZSBzY3JlZW4tZHVtcCBmaWxlcyIKKyAgICB9OworICAgIHVuc2lnbmVkIG47CisgICAgZm9yIChuID0gMDsgbiA8IFNJWkVPRihtc2cpOyArK24pIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2dbbl0pOworICAgIH0KKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgY2g7CisgICAgaW50IHdoaWNoID0gMDsKKyAgICBpbnQgbGFzdDsKKyAgICBib29sIHJlcGxheWluZyA9IEZBTFNFOworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworICAgIGNoYXIgKipmaWxlczsKKworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgImlyIikpICE9IC0xKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgJ2knOgorCSAgICB1c2VfaW5pdCA9IFRSVUU7CisJICAgIGJyZWFrOworCWNhc2UgJ3InOgorCSAgICByZXBsYXlpbmcgPSBUUlVFOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICB1c2FnZSgpOworCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgaW5pdHNjcigpOworICAgIGNicmVhaygpOworICAgIG5vZWNobygpOworICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworICAgIGN1cnNfc2V0KDApOworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworCWZvciAoY2ggPSAwOyBjaCA8IENPTE9SX1BBSVJTOyArK2NoKSB7CisJICAgIHNob3J0IHBhaXIgPSBjaCAlIENPTE9SX1BBSVJTOworCSAgICBpbml0X3BhaXIocGFpciwgQ09MT1JfV0hJVEUsIGNoICUgQ09MT1JTKTsKKwl9CisgICAgfQorCisgICAgZmlsZXMgPSBhcmd2ICsgb3B0aW5kOworICAgIGxhc3QgPSBhcmdjIC0gb3B0aW5kIC0gMTsKKyAgICBpZiAocmVwbGF5aW5nKSB7CisKKwkvKgorCSAqIFVzZSB0aGUgbGFzdCBmaWxlIGFzIHRoZSBpbml0aWFsL2N1cnJlbnQgc2NyZWVuLgorCSAqLworCWlmIChsYXN0IDwgMCkgeworCSAgICBlbmR3aW4oKTsKKwkgICAgcHJpbnRmKCJObyBzY3JlZW4tZHVtcHMgZ2l2ZW5cbiIpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKworCXdoaWNoID0gbGFzdDsKKwlpZiAobG9hZF9zY3JlZW4oZmlsZXNbd2hpY2hdKSA9PSBFUlIpIHsKKwkgICAgZW5kd2luKCk7CisJICAgIHByaW50ZigiQ2Fubm90IGxvYWQgc2NyZWVuLWR1bXAgJXNcbiIsIGZpbGVzW3doaWNoXSk7CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJfQorCWFmdGVyX2xvYWQoKTsKKworCXdoaWxlICghZG9uZSAmJiAoY2ggPSBnZXRjaCgpKSAhPSBFUlIpIHsKKwkgICAgc3dpdGNoIChjaCkgeworCSAgICBjYXNlICduJzoKKwkJLyoKKwkJICogSWYgd2UgZ290IGEgIm5leHQiIGhlcmUsIHNraXAgdG8gdGhlIGZpbmFsIHNjcmVlbiBiZWZvcmUKKwkJICogbW92aW5nIHRvIHRoZSBuZXh0IHByb2Nlc3MuCisJCSAqLworCQlzZXR1cF9uZXh0KCk7CisJCXdoaWNoID0gbGFzdDsKKwkJZG9uZSA9IFRSVUU7CisJCWJyZWFrOworCSAgICBjYXNlICdxJzoKKwkJZW5kd2luKCk7CisJCWNsZWFudXAoZmlsZXMpOworCQlkb25lID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX0JBQ0tTUEFDRToKKwkgICAgY2FzZSAnXGInOgorCQlpZiAoLS13aGljaCA8IDApCisJCSAgICB3aGljaCA9IGxhc3Q7CisJCWJyZWFrOworCSAgICBjYXNlICcgJzoKKwkJaWYgKCsrd2hpY2ggPiBsYXN0KQorCQkgICAgd2hpY2ggPSAwOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYmVlcCgpOworCQljb250aW51ZTsKKwkgICAgfQorCisJICAgIGlmIChjaCA9PSAncScpIHsKKwkJOworCSAgICB9IGVsc2UgaWYgKHNjcl9yZXN0b3JlKGZpbGVzW3doaWNoXSkgPT0gRVJSKSB7CisJCWVuZHdpbigpOworCQlwcmludGYoIkNhbm5vdCBsb2FkIHNjcmVlbi1kdW1wICVzXG4iLCBmaWxlc1t3aGljaF0pOworCQljbGVhbnVwKGZpbGVzKTsKKwkJRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKKwkgICAgfSBlbHNlIHsKKwkJd3JlZnJlc2goY3Vyc2NyKTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWludCB5OworCWludCB4OworCisJbW92ZSgyLCAwKTsKKwlwcmludHcoIlVzZSBoLGosayxsIG9yIGFycm93cyB0byBtb3ZlIGFyb3VuZCB0aGUgc2NyZWVuXG4iKTsKKwlwcmludHcoIlByZXNzICdxJyB0byBxdWl0LCAnICcgdG8gZHVtcCBhIHNjcmVlblxuIik7CisJcHJpbnR3KCJXaGVuIHRoZSBsYXN0IHNjcmVlbiBoYXMgYmVlbiBkdW1wZWQsIHByZXNzICduJyB0byBydW4gdGhlXG4iKTsKKwlwcmludHcoInNjcmVlbi1sb2FkZXIuICBUaGF0IGFsbG93cyBvbmx5ICdxJywgYmFja3NwYWNlIGFuZCAnICcgZm9yXG4iKTsKKwlwcmludHcoInN0ZXBwaW5nIHRocm91Z2ggdGhlIGR1bXBlZC9yZXN0b3JlZCBzY3JlZW5zLlxuIik7CisJZ2V0eXgoc3Rkc2NyLCB5LCB4KTsKKworCXdoaWxlICghZG9uZSkgeworCSAgICBzd2l0Y2ggKGNoID0gZ2V0X2NvbW1hbmQod2hpY2gsIGxhc3QpKSB7CisJICAgIGNhc2UgJ24nOgorCQlzZXR1cF9uZXh0KCk7CisJCWRvbmUgPSBUUlVFOworCQlicmVhazsKKwkgICAgY2FzZSAncSc6CisJCWVuZHdpbigpOworCQljbGVhbnVwKGZpbGVzKTsKKwkJZG9uZSA9IFRSVUU7CisJCWJyZWFrOworCSAgICBjYXNlICcgJzoKKwkJaWYgKGZpbGVzW3doaWNoXSAhPSAwKSB7CisJCSAgICBzaG93X3doYXQod2hpY2ggKyAxLCBsYXN0KTsKKwkJICAgIGlmIChzY3JfZHVtcChmaWxlc1t3aGljaF0pID09IEVSUikgeworCQkJZW5kd2luKCk7CisJCQlwcmludGYoIkNhbm5vdCB3cml0ZSBzY3JlZW4tZHVtcCAlc1xuIiwgZmlsZXNbd2hpY2hdKTsKKwkJCWNsZWFudXAoZmlsZXMpOworCQkJZG9uZSA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgICsrd2hpY2g7CisJCSAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJCQlzaG9ydCBwYWlyID0gd2hpY2ggJSBDT0xPUl9QQUlSUzsKKwkJCWJrZ2QoQ09MT1JfUEFJUihwYWlyKSk7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBiZWVwKCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX0xFRlQ6CisJICAgIGNhc2UgJ2gnOgorCQlpZiAoLS14IDwgMCkKKwkJICAgIHggPSBDT0xTIC0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX0RPV046CisJICAgIGNhc2UgJ2onOgorCQlpZiAoKyt5ID49IExJTkVTKQorCQkgICAgeSA9IDE7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9VUDoKKwkgICAgY2FzZSAnayc6CisJCWlmICgtLXkgPCAxKQorCQkgICAgeSA9IExJTkVTIC0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX1JJR0hUOgorCSAgICBjYXNlICdsJzoKKwkJaWYgKCsreCA+PSBDT0xTKQorCQkgICAgeCA9IDA7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmICghZG9uZSkgeworCQl0aW1lX3Qgbm93ID0gdGltZSgodGltZV90ICopIDApOworCisJCW1vdmUoMCwgMCk7CisJCWFkZHN0cihjdGltZSgmbm93KSk7CisJCW1vdmUoeSwgeCk7CisJCWFkZGNoKCcjJyB8IEFfUkVWRVJTRSk7CisJCW1vdmUoeSwgeCk7CisJICAgIH0KKwl9CisgICAgfQorICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3NhdmVzY3JlZW4uc2ggYi9uY3Vyc2VzLTUuNy90ZXN0L3NhdmVzY3JlZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDgxZDNmZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3Qvc2F2ZXNjcmVlbi5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiBzYXZlc2NyZWVuLnNoLHYgMS4zIDIwMDcvMDcvMTQgMjE6NTA6MjYgdG9tIEV4cCAkCisjCisjIFVzZSB0aGlzIHNjcmlwdCB0byBleGVyY2lzZSAic2F2ZXNjcmVlbiIuCisjIEl0IHN0YXJ0cyBieSBnZW5lcmF0aW5nIGEgc2VyaWVzIG9mIHRlbXBvcmFyeS1maWxlbmFtZXMsIHdoaWNoIGFyZSBwYXNzZWQKKyMgdG8gdGhlIHRlc3QtcHJvZ3JhbS4gIExvb3AgYXMgbG9uZyBhcyB0aGUgZmlyc3QgZmlsZSBuYW1lZCBleGlzdHMuCitQQVJBTVM9CitORklMRVM9NAorUFJFRklYPXNhdmVzY3JlZW4tJCQKK249MAorQkVHSU5TPSRQUkVGSVgtJG4udG1wCit3aGlsZSB0ZXN0ICRuICE9ICRORklMRVMKK2RvCisJTEFURVNUPSRQUkVGSVgtJG4udG1wCisJUEFSQU1TPSIkUEFSQU1TICRMQVRFU1QiCisJbj1gZXhwciAkbiArIDFgCitkb25lCisKKy4vc2F2ZXNjcmVlbiAkUEFSQU1TCitpZiB0ZXN0IC1mICRCRUdJTlMKK3RoZW4KKwl3aGlsZSB0ZXN0IC1mICRCRUdJTlMKKwlkbworCQkuL3NhdmVzY3JlZW4gLXIgJFBBUkFNUworCWRvbmUKK2Vsc2UKKwllY2hvICJObyBzY3JlZW5zIHdlcmUgc2F2ZWQiCitmaQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC90Y2xvY2suYyBiL25jdXJzZXMtNS43L3Rlc3QvdGNsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0ZWU4MQotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvdGNsb2NrLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qICRJZDogdGNsb2NrLmMsdiAxLjI1IDIwMDUvMDQvMTYgMTY6Mzk6MjcgdG9tIEV4cCAkICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICB0Y2xvY2sgLSBhbmFsb2cvZGlnaXRhbCBjbG9jayBmb3IgY3Vyc2VzLgorICBJZiBpdCBnaXZlcyB5b3Ugam95LCB0aGVuCisgIChhKSBJJ20gZ2xhZAorICAoYikgeW91IG5lZWQgdG8gZ2V0IG91dCBtb3JlIDotKQorCisgIFRoaXMgcHJvZ3JhbSBpcyBjb3B5cmlnaHQgSG93YXJkIEpvbmVzLCBTZXB0ZW1iZXIgMTk5NAorICAoaGEuam9uZXNAaWMuYWMudWspLiBJdCBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIGFzCisgIGxvbmcgYXMgdGhpcyBjb3B5cmlnaHQgbWVzc2FnZSByZW1haW5zIGludGFjdCwgYW5kIGFueQorICBtb2RpZmljYXRpb25zIGFyZSBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBbSW4gZmFjdCwgaWYKKyAgeW91IG1vZGlmeSBpdCwgSSB3b3VsZG4ndCBtaW5kIHRoZSBtb2RpZmljYXRpb25zIGJhY2ssCisgIGVzcGVjaWFsbHkgaWYgdGhleSBhZGQgYW55IG5pY2UgZmVhdHVyZXMuIEEgZ29vZCBvbmUKKyAgd291bGQgYmUgYSBwcmVjYWxjIHRhYmxlIGZvciB0aGUgNjAgaGFuZCBwb3NpdGlvbnMsIHNvCisgIHRoYXQgdGhlIGZsb2F0aW5nIHBvaW50IHN0dWZmIGNhbiBiZSBkaXRjaGVkLiBBcyBJIHNhaWQsCisgIGl0IHdhcyBhIDIwIGhhY2t1cCBtaW51dGUgam9iLl0KKworICBDT01JTkcgU09PTjogdGZpc2h0YW5rLiBCZSB0aGUgZW52eSBvZiB5b3VyIG1hYy1vd25pbmcKKyAgY29sbGVhZ3Vlcy4KKyovCisKKy8qIFRvIGNvbXBpbGU6IGNjIC1vIHRjbG9jayB0Y2xvY2suYyAtbGN1cnNlcyAtbG0gKi8KKworI2lmbmRlZiBQSQorI2RlZmluZSBQSSAzLjE0MTU5MjY1NAorI2VuZGlmCisKKyNkZWZpbmUgc2lnbihfeCkgKF94PDA/LTE6MSkKKworI2RlZmluZSBBU1BFQ1QgMi4yCisjZGVmaW5lIFJPVU5EKHZhbHVlKSAoKGludCkoKHZhbHVlKSArIDAuNSkpCisKKyNkZWZpbmUgQTJYKGFuZ2xlLHJhZGl1cykgUk9VTkQoQVNQRUNUICogcmFkaXVzICogc2luKGFuZ2xlKSkKKyNkZWZpbmUgQTJZKGFuZ2xlLHJhZGl1cykgUk9VTkQocmFkaXVzICogY29zKGFuZ2xlKSkKKworLyogUGxvdCBhIHBvaW50ICovCitzdGF0aWMgdm9pZAorcGxvdChpbnQgeCwgaW50IHksIGNoYXIgY29sKQoreworICAgIG12YWRkY2goeSwgeCwgKGNodHlwZSkgY29sKTsKK30KKworLyogRHJhdyBhIGRpYWdvbmFsKGFyYml0cmFyeSkgbGluZSB1c2luZyBCcmVzZW5oYW0ncyBhbG9ncml0aG0uICovCitzdGF0aWMgdm9pZAorZGxpbmUoaW50IHBhaXIsIGludCBmcm9tX3gsIGludCBmcm9tX3ksIGludCB4MiwgaW50IHkyLCBjaGFyIGNoKQoreworICAgIGludCBkeCwgZHk7CisgICAgaW50IGF4LCBheTsKKyAgICBpbnQgc3gsIHN5OworICAgIGludCB4LCB5OworICAgIGludCBkOworCisgICAgaWYgKGhhc19jb2xvcnMoKSkKKwlhdHRyc2V0KENPTE9SX1BBSVIocGFpcikpOworCisgICAgZHggPSB4MiAtIGZyb21feDsKKyAgICBkeSA9IHkyIC0gZnJvbV95OworCisgICAgYXggPSBhYnMoZHggKiAyKTsKKyAgICBheSA9IGFicyhkeSAqIDIpOworCisgICAgc3ggPSBzaWduKGR4KTsKKyAgICBzeSA9IHNpZ24oZHkpOworCisgICAgeCA9IGZyb21feDsKKyAgICB5ID0gZnJvbV95OworCisgICAgaWYgKGF4ID4gYXkpIHsKKwlkID0gYXkgLSAoYXggLyAyKTsKKworCXdoaWxlICgxKSB7CisJICAgIHBsb3QoeCwgeSwgY2gpOworCSAgICBpZiAoeCA9PSB4MikKKwkJcmV0dXJuOworCisJICAgIGlmIChkID49IDApIHsKKwkJeSArPSBzeTsKKwkJZCAtPSBheDsKKwkgICAgfQorCSAgICB4ICs9IHN4OworCSAgICBkICs9IGF5OworCX0KKyAgICB9IGVsc2UgeworCWQgPSBheCAtIChheSAvIDIpOworCisJd2hpbGUgKDEpIHsKKwkgICAgcGxvdCh4LCB5LCBjaCk7CisJICAgIGlmICh5ID09IHkyKQorCQlyZXR1cm47CisKKwkgICAgaWYgKGQgPj0gMCkgeworCQl4ICs9IHN4OworCQlkIC09IGF5OworCSAgICB9CisJICAgIHkgKz0gc3k7CisJICAgIGQgKz0gYXg7CisJfQorICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgaW50IGksIGN4LCBjeTsKKyAgICBkb3VibGUgY3IsIG1yYWRpdXMsIGhyYWRpdXMsIG1hbmdsZSwgaGFuZ2xlOworICAgIGRvdWJsZSBzYW5nbGUsIHNyYWRpdXMsIGhvdXJzOworICAgIGludCBoZHgsIGhkeTsKKyAgICBpbnQgbWR4LCBtZHk7CisgICAgaW50IHNkeCwgc2R5OworICAgIGludCBjaDsKKyAgICBpbnQgbGFzdGJlZXAgPSAtMTsKKyAgICBib29sIG9kZCA9IEZBTFNFOworICAgIHRpbWVfdCB0aW07CisgICAgc3RydWN0IHRtICp0OworICAgIGNoYXIgc3pDaGFyWzEwXTsKKyAgICBjaGFyICp0ZXh0OworICAgIGludCBteV9iZyA9IENPTE9SX0JMQUNLOworI2lmIEhBVkVfR0VUVElNRU9GREFZCisgICAgc3RydWN0IHRpbWV2YWwgY3VycmVudDsKKyAgICBkb3VibGUgZnJhY3Rpb24gPSAwLjA7CisjZW5kaWYKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGluaXRzY3IoKTsKKyAgICBub2VjaG8oKTsKKyAgICBjYnJlYWsoKTsKKyAgICBub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisgICAgY3Vyc19zZXQoMCk7CisKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJc3RhcnRfY29sb3IoKTsKKyNpZiBIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUworCWlmICh1c2VfZGVmYXVsdF9jb2xvcnMoKSA9PSBPSykKKwkgICAgbXlfYmcgPSAtMTsKKyNlbmRpZgorCWluaXRfcGFpcigxLCBDT0xPUl9SRUQsIG15X2JnKTsKKwlpbml0X3BhaXIoMiwgQ09MT1JfTUFHRU5UQSwgbXlfYmcpOworCWluaXRfcGFpcigzLCBDT0xPUl9HUkVFTiwgbXlfYmcpOworCWluaXRfcGFpcig0LCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisgICAgfQorI2lmZGVmIEtFWV9SRVNJWkUKKyAgICBrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKyAgcmVzdGFydDoKKyNlbmRpZgorICAgIGN4ID0gKENPTFMgLSAxKSAvIDI7CS8qIDM5ICovCisgICAgY3kgPSBMSU5FUyAvIDI7CQkvKiAxMiAqLworICAgIGlmIChjeCAvIEFTUEVDVCA8IGN5KQorCWNyID0gY3ggLyBBU1BFQ1Q7CisgICAgZWxzZQorCWNyID0gY3k7CisgICAgc3JhZGl1cyA9ICg1ICogY3IpIC8gNjsJLyogMTAgKi8KKyAgICBtcmFkaXVzID0gKDMgKiBjcikgLyA0OwkvKiA5ICovCisgICAgaHJhZGl1cyA9IGNyIC8gMjsJCS8qIDYgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJc2FuZ2xlID0gKGkgKyAxKSAqICgyLjAgKiBQSSkgLyAxMi4wOworCXNkeCA9IEEyWChzYW5nbGUsIHNyYWRpdXMpOworCXNkeSA9IEEyWShzYW5nbGUsIHNyYWRpdXMpOworCXNwcmludGYoc3pDaGFyLCAiJWQiLCBpICsgMSk7CisKKwltdmFkZHN0cihjeSAtIHNkeSwgY3ggKyBzZHgsIHN6Q2hhcik7CisgICAgfQorCisgICAgbXZhZGRzdHIoMCwgMCwgIkFTQ0lJIENsb2NrIGJ5IEhvd2FyZCBKb25lcyAoaGEuam9uZXNAaWMuYWMudWspLDE5OTQiKTsKKworICAgIHNyYWRpdXMgPSAoNCAqIHNyYWRpdXMpIC8gNTsKKyAgICBmb3IgKDs7KSB7CisJbmFwbXMoMTAwKTsKKworCXRpbSA9IHRpbWUoMCk7CisJdCA9IGxvY2FsdGltZSgmdGltKTsKKworCWhvdXJzID0gKHQtPnRtX2hvdXIgKyAodC0+dG1fbWluIC8gNjAuMCkpOworCWlmIChob3VycyA+IDEyLjApCisJICAgIGhvdXJzIC09IDEyLjA7CisKKwltYW5nbGUgPSAoKHQtPnRtX21pbiArICh0LT50bV9zZWMgLyA2MC4wKSkgKiAoMiAqIFBJKSAvIDYwLjApOworCW1keCA9IEEyWChtYW5nbGUsIG1yYWRpdXMpOworCW1keSA9IEEyWShtYW5nbGUsIG1yYWRpdXMpOworCisJaGFuZ2xlID0gKChob3VycykgKiAoMi4wICogUEkpIC8gMTIuMCk7CisJaGR4ID0gQTJYKGhhbmdsZSwgaHJhZGl1cyk7CisJaGR5ID0gQTJZKGhhbmdsZSwgaHJhZGl1cyk7CisKKyNpZiBIQVZFX0dFVFRJTUVPRkRBWQorCWdldHRpbWVvZmRheSgmY3VycmVudCwgMCk7CisJZnJhY3Rpb24gPSAoY3VycmVudC50dl91c2VjIC8gMS4wZTYpOworI2VuZGlmCisJc2FuZ2xlID0gKCh0LT50bV9zZWMgKyBmcmFjdGlvbikgKiAoMi4wICogUEkpIC8gNjAuMCk7CisJc2R4ID0gQTJYKHNhbmdsZSwgc3JhZGl1cyk7CisJc2R5ID0gQTJZKHNhbmdsZSwgc3JhZGl1cyk7CisKKwlkbGluZSgzLCBjeCwgY3ksIGN4ICsgbWR4LCBjeSAtIG1keSwgJyMnKTsKKworCWF0dHJzZXQoQV9SRVZFUlNFKTsKKwlkbGluZSgyLCBjeCwgY3ksIGN4ICsgaGR4LCBjeSAtIGhkeSwgJy4nKTsKKwlhdHRyb2ZmKEFfUkVWRVJTRSk7CisKKwlpZiAoaGFzX2NvbG9ycygpKQorCSAgICBhdHRyc2V0KENPTE9SX1BBSVIoMSkpOworCisJZGxpbmUoMSwgY3gsIGN5LCBjeCArIHNkeCwgY3kgLSBzZHksICdPJyk7CisKKwlpZiAoaGFzX2NvbG9ycygpKQorCSAgICBhdHRyc2V0KENPTE9SX1BBSVIoMCkpOworCisJdGV4dCA9IGN0aW1lKCZ0aW0pOworCW12cHJpbnR3KDIsIDAsICIlLipzIiwgKGludCkgKHN0cmxlbih0ZXh0KSAtIDEpLCB0ZXh0KTsKKwlyZWZyZXNoKCk7CisJaWYgKCh0LT50bV9zZWMgJSA1KSA9PSAwCisJICAgICYmIHQtPnRtX3NlYyAhPSBsYXN0YmVlcCkgeworCSAgICBsYXN0YmVlcCA9IHQtPnRtX3NlYzsKKwkgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCQlvZGQgPSAhb2RkOworCQlia2dkKChjaHR5cGUpIChvZGQgPyBDT0xPUl9QQUlSKDQpIDogQ09MT1JfUEFJUigwKSkpOworCSAgICB9CisJICAgIGJlZXAoKTsKKwl9CisKKwlpZiAoKGNoID0gZ2V0Y2goKSkgIT0gRVJSKSB7CisjaWZkZWYgS0VZX1JFU0laRQorCSAgICBpZiAoY2ggPT0gS0VZX1JFU0laRSkgeworCQlmbGFzaCgpOworCQllcmFzZSgpOworCQl3cmVmcmVzaChjdXJzY3IpOworCQlnb3RvIHJlc3RhcnQ7CisJICAgIH0KKyNlbmRpZgorCSAgICBicmVhazsKKwl9CisKKwlkbGluZSgwLCBjeCwgY3ksIGN4ICsgaGR4LCBjeSAtIGhkeSwgJyAnKTsKKwlkbGluZSgwLCBjeCwgY3ksIGN4ICsgbWR4LCBjeSAtIG1keSwgJyAnKTsKKwlkbGluZSgwLCBjeCwgY3ksIGN4ICsgc2R4LCBjeSAtIHNkeSwgJyAnKTsKKworICAgIH0KKworICAgIGN1cnNfc2V0KDEpOworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3QucHJpdi5oIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0LnByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzFmMzlmCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0LnByaXYuaApAQCAtMCwwICsxLDU3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBBdXRob3I6IFRob21hcyBFLiBEaWNrZXkgICAgICAgICAgICAgICAgICAgIDE5OTYtb24gICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICRJZDogdGVzdC5wcml2LmgsdiAxLjc5IDIwMDgvMTAvMDQgMjE6NTM6NDEgdG9tIEV4cCAkICovCisKKyNpZm5kZWYgX19URVNUX1BSSVZfSAorI2RlZmluZSBfX1RFU1RfUFJJVl9IIDEKKworI2luY2x1ZGUgPG5jdXJzZXNfY2ZnLmg+CisKKy8qCisgKiBGaXggaWZkZWYncyB0aGF0IGxvb2sgZm9yIHRoZSBmb3JtL21lbnUvcGFuZWwgbGlicmFyaWVzLCBpZiB3ZSBhcmUgYnVpbGRpbmcKKyAqIHdpdGggd2lkZS1jaGFyYWN0ZXIgbmN1cnNlcy4KKyAqLworI2lmZGVmICBIQVZFX0xJQkZPUk1XCisjZGVmaW5lIEhBVkVfTElCRk9STVcgMQorI2VuZGlmCisKKyNpZmRlZiAgSEFWRV9MSUJNRU5VVworI2RlZmluZSBIQVZFX0xJQk1FTlVXIDEKKyNlbmRpZgorCisjaWZkZWYgIEhBVkVfTElCUEFORUxXCisjZGVmaW5lIEhBVkVfTElCUEFORUxXIDEKKyNlbmRpZgorCisvKgorICogRmFsbGJhY2sgZGVmaW5pdGlvbnMgdG8gYWNjb21tb2RhdGUgYnJva2VuIGNvbXBpbGVycy4KKyAqLworI2lmbmRlZiBIQVZFX0NVUlNFU19WRVJTSU9OCisjZGVmaW5lIEhBVkVfQ1VSU0VTX1ZFUlNJT04gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9DSEdBVAorI2RlZmluZSBIQVZFX0NIR0FUIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfQ09MT1JfU0VUCisjZGVmaW5lIEhBVkVfQ09MT1JfU0VUIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfRklMVEVSCisjZGVmaW5lIEhBVkVfRklMVEVSIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfRk9STV9ICisjZGVmaW5lIEhBVkVfRk9STV9IIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfR0VUQkVHWAorI2RlZmluZSBIQVZFX0dFVEJFR1ggMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HRVRDVVJYCisjZGVmaW5lIEhBVkVfR0VUQ1VSWCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVE1BWFgKKyNkZWZpbmUgSEFWRV9HRVRNQVhYIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfR0VUT1BUX0gKKyNkZWZpbmUgSEFWRV9HRVRPUFRfSCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVFBBUlgKKyNkZWZpbmUgSEFWRV9HRVRQQVJYIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfR0VUV0lOCisjZGVmaW5lIEhBVkVfR0VUV0lOIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTElCRk9STQorI2RlZmluZSBIQVZFX0xJQkZPUk0gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9MSUJNRU5VCisjZGVmaW5lIEhBVkVfTElCTUVOVSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0xJQlBBTkVMCisjZGVmaW5lIEhBVkVfTElCUEFORUwgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9MT0NBTEVfSAorI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTUVOVV9ICisjZGVmaW5lIEhBVkVfTUVOVV9IIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTVZWTElORQorI2RlZmluZSBIQVZFX01WVkxJTkUgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9NVldWTElORQorI2RlZmluZSBIQVZFX01WV1ZMSU5FIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTkFQTVMKKyNkZWZpbmUgSEFWRV9OQVBNUyAxCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX05DX0FMTE9DX0gKKyNkZWZpbmUgSEFWRV9OQ19BTExPQ19IIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUEFORUxfSAorI2RlZmluZSBIQVZFX1BBTkVMX0ggMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9QVVRXSU4KKyNkZWZpbmUgSEFWRV9QVVRXSU4gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9SRVNJWkVfVEVSTQorI2RlZmluZSBIQVZFX1JFU0laRV9URVJNIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUklQT0ZGTElORQorI2RlZmluZSBIQVZFX1JJUE9GRkxJTkUgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TRVRVUFRFUk0KKyNkZWZpbmUgSEFWRV9TRVRVUFRFUk0gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TTEtfQ09MT1IKKyNkZWZpbmUgSEFWRV9TTEtfQ09MT1IgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TTEtfSU5JVAorI2RlZmluZSBIQVZFX1NMS19JTklUIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVEVSTUFUVFJTCisjZGVmaW5lIEhBVkVfVEVSTUFUVFJTIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVEVSTU5BTUUKKyNkZWZpbmUgSEFWRV9URVJNTkFNRSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RHRVRFTlQKKyNkZWZpbmUgSEFWRV9UR0VURU5UIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVElHRVROVU0KKyNkZWZpbmUgSEFWRV9USUdFVE5VTSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RZUEVBSEVBRAorI2RlZmluZSBIQVZFX1RZUEVBSEVBRCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RJR0VUU1RSCisjZGVmaW5lIEhBVkVfVElHRVRTVFIgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9XSU5TU1RSCisjZGVmaW5lIEhBVkVfV0lOU1NUUiAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUworI2RlZmluZSBIQVZFX1VTRV9ERUZBVUxUX0NPTE9SUyAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1dSRVNJWkUKKyNkZWZpbmUgSEFWRV9XUkVTSVpFIDAKKyNlbmRpZgorCisjaWZuZGVmIE5DVVJTRVNfRVhUX0ZVTkNTCisjZGVmaW5lIE5DVVJTRVNfRVhUX0ZVTkNTIDAKKyNlbmRpZgorCisjaWZuZGVmIE5FRURfUFRFTV9ICisjZGVmaW5lIE5FRURfUFRFTV9IIDAKKyNlbmRpZgorCisjaWZuZGVmIE5PX0xFQUtTCisjZGVmaW5lIE5PX0xFQUtTIDAKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHNpZ25hbC5oPgkvKiBpbmNsdWRlIGJlZm9yZSBjdXJzZXMuaCB0byB3b3JrIGFyb3VuZCBnbGliYyBidWcgKi8KKworI2lmIGRlZmluZWQoSEFWRV9YQ1VSU0VTKQorI2luY2x1ZGUgPHhjdXJzZXMuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9OQ1VSU0VTV19OQ1VSU0VTX0gpCisjaW5jbHVkZSA8bmN1cnNlc3cvY3Vyc2VzLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTkNVUlNFU19OQ1VSU0VTX0gpCisjaW5jbHVkZSA8bmN1cnNlcy9jdXJzZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9YQ1VSU0VTKQorLyogbm8gb3RoZXIgaGVhZGVycyAqLworI3VuZGVmICBIQVZFX1NFVFVQVEVSTQkJLyogbm9uZnVuY3Rpb25hbCAqLworI2RlZmluZSBIQVZFX1NFVFVQVEVSTSAwCisjdW5kZWYgIEhBVkVfVEdFVEVOVAkJLyogbm9uZnVuY3Rpb25hbCAqLworI2RlZmluZSBIQVZFX1RHRVRFTlQgMAorI3VuZGVmICBIQVZFX1RJR0VUU1RSCQkvKiBub25mdW5jdGlvbmFsICovCisjZGVmaW5lIEhBVkVfVElHRVRTVFIgMAorI2VsaWYgZGVmaW5lZChIQVZFX05DVVJTRVNXX1RFUk1fSCkKKyNpbmNsdWRlIDxuY3Vyc2Vzdy90ZXJtLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTkNVUlNFU19URVJNX0gpCisjaW5jbHVkZSA8bmN1cnNlcy90ZXJtLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfVEVSTV9IKQorI2luY2x1ZGUgPHRlcm0uaD4KKyNlbmRpZgorCisvKgorICogTm90IGFsbCBjdXJzZXMuaCBpbXBsZW1lbnRhdGlvbnMgaW5jbHVkZSB1bmN0cmwuaCwKKyAqIFNvbGFyaXMgMTAgeHBnNCBmb3IgZXhhbXBsZS4KKyAqLworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSB8fCBkZWZpbmVkKF9YT1BFTl9DVVJTRVMpCisjaWYgZGVmaW5lZChIQVZFX05DVVJTRVNXX05DVVJTRVNfSCkKKyNpbmNsdWRlIDxuY3Vyc2Vzdy91bmN0cmwuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9OQ1VSU0VTX05DVVJTRVNfSCkKKyNpbmNsdWRlIDxuY3Vyc2VzL3VuY3RybC5oPgorI2Vsc2UKKyNpbmNsdWRlIDx1bmN0cmwuaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorLyogJ2dldG9wdCgpJyBtYXkgYmUgcHJvdG90eXBlZCBpbiA8c3RkbGliLmg+LCBidXQgZGVjbGFyaW5nIGl0cyB2YXJpYWJsZXMKKyAqIGRvZXNuJ3QgaHVydC4KKyAqLworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmIC8qIEhBVkVfR0VUT1BUX0ggKi8KKworI2lmIEhBVkVfTE9DQUxFX0gKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNlbHNlCisjZGVmaW5lIHNldGxvY2FsZShuYW1lLHN0cmluZykgLyogbm90aGluZyAqLworI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWZuZGVmIEdDQ19OT1JFVFVSTgorI2RlZmluZSBHQ0NfTk9SRVRVUk4gLyogbm90aGluZyAqLworI2VuZGlmCisjaWZuZGVmIEdDQ19QUklOVEZMSUtFCisjZGVmaW5lIEdDQ19QUklOVEZMSUtFKGEsYikgLyogbm90aGluZyAqLworI2VuZGlmCisjaWZuZGVmIEdDQ19VTlVTRUQKKyNkZWZpbmUgR0NDX1VOVVNFRCAvKiBub3RoaW5nICovCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVE5TVFIKKyNkZWZpbmUgZ2V0bnN0cihzLG4pIGdldHN0cihzKQorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1NPRlRLRVlTCisjaWYgSEFWRV9TTEtfSU5JVAorI2RlZmluZSBVU0VfU09GVEtFWVMgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1NPRlRLRVlTIDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1dJREVDX1NVUFBPUlQKKyNpZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQpICYmIGRlZmluZWQoV0FDU19VTENPUk5FUikKKyNkZWZpbmUgVVNFX1dJREVDX1NVUFBPUlQgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX1dJREVDX1NVUFBPUlQgMAorI2VuZGlmCisjZW5kaWYKKworI2lmIEhBVkVfUEFORUxfSCAmJiBIQVZFX0xJQlBBTkVMCisjZGVmaW5lIFVTRV9MSUJQQU5FTCAxCisjZWxzZQorI2RlZmluZSBVU0VfTElCUEFORUwgMAorI2VuZGlmCisKKyNpZiBIQVZFX01FTlVfSCAmJiBIQVZFX0xJQk1FTlUKKyNkZWZpbmUgVVNFX0xJQk1FTlUgMQorI2Vsc2UKKyNkZWZpbmUgVVNFX0xJQk1FTlUgMAorI2VuZGlmCisKKyNpZiBIQVZFX0ZPUk1fSCAmJiBIQVZFX0xJQkZPUk0KKyNkZWZpbmUgVVNFX0xJQkZPUk0gMQorI2Vsc2UKKyNkZWZpbmUgVVNFX0xJQkZPUk0gMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9UWVBFX0FUVFJfVAorI2lmICFVU0VfV0lERUNfU1VQUE9SVCAmJiAhZGVmaW5lZChhdHRyX3QpCisjZGVmaW5lIGF0dHJfdCBjaHR5cGUKKyNlbmRpZgorI2VuZGlmCisKKyN1bmRlZiBOQ1VSU0VTX0NIX1QKKyNpZiAhVVNFX1dJREVDX1NVUFBPUlQKKyNkZWZpbmUgTkNVUlNFU19DSF9UIGNodHlwZQorI2Vsc2UKKyNkZWZpbmUgTkNVUlNFU19DSF9UIGNjaGFyX3QKKyNlbmRpZgorCisjaWZuZGVmIE5DVVJTRVNfT1BBUVVFCisjZGVmaW5lIE5DVVJTRVNfT1BBUVVFIDAKKyNlbmRpZgorCisjaWZuZGVmIENDSEFSV19NQVgKKyNkZWZpbmUgQ0NIQVJXX01BWCA1CisjZW5kaWYKKworI3VuZGVmIENUUkwKKyNkZWZpbmUgQ1RSTCh4KQkoKHgpICYgMHgxZikKKworI2RlZmluZSBRVUlUCQlDVFJMKCdRJykKKyNkZWZpbmUgRVNDQVBFCQlDVFJMKCdbJykKKworI2lmbmRlZiBLRVlfTUlOCisjZGVmaW5lIEtFWV9NSU4gMjU2CS8qIG5vdCBkZWZpbmVkIGluIFNvbGFyaXMgOCAqLworI2VuZGlmCisKKy8qCisgKiBXb3JrYXJvdW5kIGZvciBIUFVYCisgKi8KKyNpZiBkZWZpbmVkKF9faHB1eCkgJiYgIWRlZmluZWQoTkNVUlNFU19WRVJTSU9OKQorI2RlZmluZSBnZXRiZWd4KHcpIF9fZ2V0YmVneCh3KQorI2RlZmluZSBnZXRiZWd5KHcpIF9fZ2V0YmVneSh3KQorI2RlZmluZSBnZXRjdXJ4KHcpIF9fZ2V0Y3VyeCh3KQorI2RlZmluZSBnZXRjdXJ5KHcpIF9fZ2V0Y3VyeSh3KQorI2RlZmluZSBnZXRtYXh4KHcpIF9fZ2V0bWF4eCh3KQorI2RlZmluZSBnZXRtYXh5KHcpIF9fZ2V0bWF4eSh3KQorI2RlZmluZSBnZXRwYXJ4KHcpIF9fZ2V0cGFyeCh3KQorI2RlZmluZSBnZXRwYXJ5KHcpIF9fZ2V0cGFyeSh3KQorI2VuZGlmCisKKy8qCisgKiBUaGVzZSB1c3VhbGx5IGFyZSBpbXBsZW1lbnRlZCBhcyBtYWNyb3MsIGJ1dCBtYXkgYmUgZnVuY3Rpb25zLgorICovCisjaWYgIWRlZmluZWQoZ2V0Y3VyeCkgJiYgIUhBVkVfR0VUQ1VSWAorI2RlZmluZSBnZXRjdXJ4KHdpbikgICAgICAgICAgICAoKHdpbik/KHdpbiktPl9jdXJ4OkVSUikKKyNkZWZpbmUgZ2V0Y3VyeSh3aW4pICAgICAgICAgICAgKCh3aW4pPyh3aW4pLT5fY3VyeTpFUlIpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKGdldGJlZ3gpICYmICFIQVZFX0dFVEJFR1gKKyNkZWZpbmUgZ2V0YmVneCh3aW4pICAgICAgICAgICAgKCh3aW4pPyh3aW4pLT5fYmVneDpFUlIpCisjZGVmaW5lIGdldGJlZ3kod2luKSAgICAgICAgICAgICgod2luKT8od2luKS0+X2JlZ3k6RVJSKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChnZXRtYXh4KSAmJiAhSEFWRV9HRVRNQVhYCisjZGVmaW5lIGdldG1heHgod2luKSAgICAgICAgICAgICgod2luKT8oKHdpbiktPl9tYXh4ICsgMSk6RVJSKQorI2RlZmluZSBnZXRtYXh5KHdpbikgICAgICAgICAgICAoKHdpbik/KCh3aW4pLT5fbWF4eSArIDEpOkVSUikKKyNlbmRpZgorCisvKgorICogU29sYXJpcyAxMCB4cGc0OgorI2RlZmluZQlfX21fZ2V0cGFyeCh3KQkJKCh3KS0+X3BhcmVudCA9PSAoV0lORE9XICopIDAgPyAtMSBcCisJCQkJOiAodyktPl9iZWd4IC0gKHcpLT5fcGFyZW50LT5fYmVneCkKKyAqLworI2lmICFkZWZpbmVkKGdldHBhcngpICYmICFIQVZFX0dFVFBBUlgKKyNpZmRlZiBfX21fZ2V0cGFyeAorI2RlZmluZSBnZXRwYXJ4KHdpbikgICAgICAgICAgICBfX21fZ2V0cGFyeCh3aW4pCisjZGVmaW5lIGdldHBhcnkod2luKSAgICAgICAgICAgIF9fbV9nZXRwYXJ5KHdpbikKKyNlbHNlCisjZGVmaW5lIGdldHBhcngod2luKSAgICAgICAgICAgICgod2luKT8oKHdpbiktPl9wYXJ4ICsgMSk6RVJSKQorI2RlZmluZSBnZXRwYXJ5KHdpbikgICAgICAgICAgICAoKHdpbik/KCh3aW4pLT5fcGFyeSArIDEpOkVSUikKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChtdnd2bGluZSkgJiYgIUhBVkVfTVZXVkxJTkUKKyNkZWZpbmUgbXZ3dmxpbmUodyx5LHgsY2gsbikgICAgKG1vdmUoeSx4KSA9PSBFUlIgPyBFUlIgOiB3dmxpbmUodyxjaCxuKSkKKyNkZWZpbmUgbXZ3aGxpbmUodyx5LHgsY2gsbikgICAgKG1vdmUoeSx4KSA9PSBFUlIgPyBFUlIgOiB3aGxpbmUodyxjaCxuKSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQobXZ2bGluZSkgJiYgIUhBVkVfTVZWTElORQorI2RlZmluZSBtdnZsaW5lKHkseCxjaCxuKSAgICAgICAobW92ZSh5LHgpID09IEVSUiA/IEVSUiA6IHZsaW5lKGNoLG4pKQorI2RlZmluZSBtdmhsaW5lKHkseCxjaCxuKSAgICAgICAobW92ZSh5LHgpID09IEVSUiA/IEVSUiA6IGhsaW5lKGNoLG4pKQorI2VuZGlmCisKKy8qCisgKiBUcnkgdG8gYWNjb21tb2RhdGUgY3Vyc2VzIGltcGxlbWVudGF0aW9ucyB0aGF0IGhhdmUgbm8gdGVybWluZm8gc3VwcG9ydC4KKyAqLworI2lmIEhBVkVfVElHRVROVU0KKyNkZWZpbmUgVElHRVROVU0odGksdGMpIHRpZ2V0bnVtKHRpKQorI2Vsc2UKKyNkZWZpbmUgVElHRVROVU0odGksdGMpIHRnZXRudW0odGMpCisjZW5kaWYKKworI2lmIEhBVkVfVElHRVRTVFIKKyNkZWZpbmUgVElHRVRTVFIodGksdGMpIHRpZ2V0c3RyKHRpKQorI2Vsc2UKKyNkZWZpbmUgVElHRVRTVFIodGksdGMpIHRnZXRzdHIodGMsJmFyZWFfcG9pbnRlcikKKyNlbmRpZgorCisvKiBuY3Vyc2VzIGltcGxlbWVudHMgdHBhcm0oKSB3aXRoIHZhcmFyZ3MsIFgvT3BlbiB3aXRoIGEgZml4ZWQtcGFyYW1ldGVyIGxpc3QKKyAqICh3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgdXNhZ2UsIGRvZXNuJ3Qgc29sdmUgYW55IHByb2JsZW1zKS4KKyAqLworI2RlZmluZSB0cGFybTMoYSxiLGMpIHRwYXJtKGEsYixjLDAsMCwwLDAsMCwwLDApCisjZGVmaW5lIHRwYXJtMihhLGIpICAgdHBhcm0oYSxiLDAsMCwwLDAsMCwwLDAsMCkKKworI2RlZmluZSBVQ2hhcihjKSAgICAoKHVuc2lnbmVkIGNoYXIpKGMpKQorCisjZGVmaW5lIFNJWkVPRih0YWJsZSkJKHNpemVvZih0YWJsZSkvc2l6ZW9mKHRhYmxlWzBdKSkKKworI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBIQVZFX05DX0FMTE9DX0gKKyNpbmNsdWRlIDxuY19hbGxvYy5oPgorI2lmIEhBVkVfTkNfRlJFRUFMTCAmJiBkZWZpbmVkKFVTRV9USU5GTykKKyN1bmRlZiBFeGl0UHJvZ3JhbQorI2RlZmluZSBFeGl0UHJvZ3JhbShjb2RlKSBfbmNfZnJlZV90aW5mbyhjb2RlKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSB0eXBlTWFsbG9jKHR5cGUsbikgKHR5cGUgKikgbWFsbG9jKChuKSAqIHNpemVvZih0eXBlKSkKKyNkZWZpbmUgdHlwZUNhbGxvYyh0eXBlLGVsdHMpICh0eXBlICopIGNhbGxvYygoZWx0cyksIHNpemVvZih0eXBlKSkKKyNkZWZpbmUgdHlwZVJlYWxsb2ModHlwZSxuLHApICh0eXBlICopIHJlYWxsb2MocCwgKG4pICogc2l6ZW9mKHR5cGUpKQorI2VuZGlmCisKKyNpZm5kZWYgRXhpdFByb2dyYW0KKyNkZWZpbmUgRXhpdFByb2dyYW0oY29kZSkgZXhpdChjb2RlKQorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCisjZW5kaWYKKyNpZm5kZWYgRVhJVF9GQUlMVVJFCisjZGVmaW5lIEVYSVRfRkFJTFVSRSAxCisjZW5kaWYKKworLyogVXNlIHRoaXMgdG8gcXVpZXQgZ2NjJ3MgLVd3cml0ZS1zdHJpbmdzIHdhcm5pbmdzLCBidXQgYWNjb21tb2RhdGUgU1ZyNAorICogY3Vyc2VzIHdoaWNoIGRvZXNuJ3QgaGF2ZSBjb25zdCBwYXJhbWV0ZXJzIGRlY2xhcmVkIChzbyBmYXIpIGluIHRoZSBwbGFjZXMKKyAqIHRoYXQgWFNJIHNob3dzLgorICovCisjaWZuZGVmIE5DVVJTRVNfQ09OU1QKKyNkZWZpbmUgTkNVUlNFU19DT05TVCAvKiBub3RoaW5nICovCisjZW5kaWYKKworLyogb3V0LW9mLWJhbmQgdmFsdWVzIGZvciByZXByZXNlbnRpbmcgYWJzZW50IGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBBQlNFTlRfQk9PTEVBTgkJKChzaWduZWQgY2hhciktMSkJLyogMjU1ICovCisjZGVmaW5lIEFCU0VOVF9OVU1FUklDCQkoLTEpCisjZGVmaW5lIEFCU0VOVF9TVFJJTkcJCShjaGFyICopMAorCisvKiBvdXQtb2YtYmFuZCB2YWx1ZXMgZm9yIHJlcHJlc2VudGluZyBjYW5jZWxzICovCisjZGVmaW5lIENBTkNFTExFRF9CT09MRUFOCSgoc2lnbmVkIGNoYXIpLTIpCS8qIDI1NCAqLworI2RlZmluZSBDQU5DRUxMRURfTlVNRVJJQwkoLTIpCisjZGVmaW5lIENBTkNFTExFRF9TVFJJTkcJKGNoYXIgKikoLTEpCisKKyNkZWZpbmUgVkFMSURfQk9PTEVBTihzKSAoKHVuc2lnbmVkIGNoYXIpKHMpIDw9IDEpIC8qIHJlamVjdCAiLTEiICovCisjZGVmaW5lIFZBTElEX05VTUVSSUMocykgKChzKSA+PSAwKQorI2RlZmluZSBWQUxJRF9TVFJJTkcocykgICgocykgIT0gQ0FOQ0VMTEVEX1NUUklORyAmJiAocykgIT0gQUJTRU5UX1NUUklORykKKworI2RlZmluZSBWVF9BQ1NDICJgYGFhZmZnZ2lpampra2xsbW1ubm9vcHBxcXJyc3N0dHV1dnZ3d3h4eXl6ent7fHx9fX5+IgorCisjZGVmaW5lIENBVENIQUxMKGhhbmRsZXIpIHsgXAorCQlpbnQgbnNpZzsgXAorCQlmb3IgKG5zaWcgPSBTSUdIVVA7IG5zaWcgPCBTSUdURVJNOyArK25zaWcpIFwKKwkJICAgIGlmIChuc2lnICE9IFNJR0tJTEwpIFwKKwkJCXNpZ25hbChuc2lnLCBoYW5kbGVyKTsgXAorCSAgICB9CisKKy8qCisgKiBXb3JrYXJvdW5kIGZvciBjbGVhbihlcikgY29tcGlsZSB3aXRoIFNvbGFyaXMncyBsZWdhY3kgY3Vyc2VzLgorICogVGhlIHNhbWUgd291bGQgYmUgbmVlZGVkIGZvciBIUFVYIDEwLjIwCisgKi8KKyNpZm5kZWYgVFBVVFNfQVJHCisjaWYgZGVmaW5lZChzdW4pICYmICFkZWZpbmVkKF9YT1BFTl9DVVJTRVMpICYmICFkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCkKKyNkZWZpbmUgVFBVVFNfQVJHIGNoYXIKK2V4dGVybiBjaGFyICp0Z290byhjaGFyICosIGludCwgaW50KTsJLyogYXZhaWxhYmxlLCBidXQgbm90IHByb3RvdHlwZWQgKi8KKyNlbHNlCisjZGVmaW5lIFRQVVRTX0FSRyBpbnQKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBXb3JrYXJvdW5kcyBmb3IgU29sYXJpcydzIFgvT3BlbiBjdXJzZXMKKyAqLworI2lmIGRlZmluZWQoc3VuKSAmJiBkZWZpbmVkKF9YT1BFTl9DVVJTRVMpICYmICFkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCkKKyNpZiAhZGVmaW5lZChLRVlfTUlOKSAmJiBkZWZpbmVkKF9fS0VZX01JTikKKyNkZWZpbmUgS0VZX01JTiBfX0tFWV9NSU4KKyNlbmRpZgorI2lmICFkZWZpbmVkKEtFWV9NQVgpICYmIGRlZmluZWQoX19LRVlfTUlOKQorI2RlZmluZSBLRVlfTUFYIF9fS0VZX01BWAorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIG5jdXJzZXMgdXNlcyBjb25zdCBpbiBzb21lIHBsYWNlcyB3aGVyZSBYL09wZW4gZG9lcyAob3IgZGlkKSBub3QgYWxsb3cuCisgKi8KKyNpZmRlZiBOQ1VSU0VTX1ZFUlNJT04KKyNkZWZpbmUgQ09OU1RfTUVOVVMgY29uc3QKKyNlbHNlCisjZGVmaW5lIENPTlNUX01FTlVTIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVVNFX1dJTkRPVworI2lmICFkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCkgfHwgKE5DVVJTRVNfVkVSU0lPTl9QQVRDSCA8IDIwMDcwOTE1KSB8fCAhTkNVUlNFU19FWFRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9VU0VfV0lORE9XIDAKKyNlbHNlCisjZGVmaW5lIEhBVkVfVVNFX1dJTkRPVyAxCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogU2ltcGxpZnkgc2V0dGluZyB1cCBkZW1vIG9mIHRocmVhZGluZyB3aXRoIHRoZXNlIG1hY3Jvcy4KKyAqLworCisjaWYgIUhBVkVfVVNFX1dJTkRPVwordHlwZWRlZiBpbnQgKCpOQ1VSU0VTX1dJTkRPV19DQikoV0lORE9XICosIHZvaWQgKik7Cit0eXBlZGVmIGludCAoKk5DVVJTRVNfU0NSRUVOX0NCKShTQ1JFRU4gKiwgdm9pZCAqKTsKKyNlbmRpZgorCisjaWYgSEFWRV9VU0VfV0lORE9XCisjZGVmaW5lIFVTSU5HX1dJTkRPVyh3LGZ1bmMpIHVzZV93aW5kb3codywgKE5DVVJTRVNfV0lORE9XX0NCKSBmdW5jLCB3KQorI2RlZmluZSBVU0lOR19XSU5ET1cyKHcsZnVuYyxkYXRhKSB1c2Vfd2luZG93KHcsIChOQ1VSU0VTX1dJTkRPV19DQikgZnVuYywgZGF0YSkKKyNkZWZpbmUgV0FOVF9VU0VfV0lORE9XKCkgZXh0ZXJuIHZvaWQgX25jX3dhbnRfdXNlX3dpbmRvdyh2b2lkKQorI2Vsc2UKKyNkZWZpbmUgVVNJTkdfV0lORE9XKHcsZnVuYykgZnVuYyh3KQorI2RlZmluZSBVU0lOR19XSU5ET1cyKHcsZnVuYyxkYXRhKSBmdW5jKHcsZGF0YSkKKyNkZWZpbmUgV0FOVF9VU0VfV0lORE9XKCkgZXh0ZXJuIHZvaWQgX25jX3dhbnRfdXNlX3dpbmRvdyh2b2lkKQorI2VuZGlmCisKKyNpZiBIQVZFX1VTRV9XSU5ET1cKKyNkZWZpbmUgVVNJTkdfU0NSRUVOKHMsZnVuYyxkYXRhKSB1c2Vfc2NyZWVuKHMsIChOQ1VSU0VTX1NDUkVFTl9DQikgZnVuYywgZGF0YSkKKyNkZWZpbmUgV0FOVF9VU0VfU0NSRUVOKCkgZXh0ZXJuIHZvaWQgX25jX3dhbnRfdXNlX3NjcmVlbih2b2lkKQorI2Vsc2UKKyNkZWZpbmUgVVNJTkdfU0NSRUVOKHMsZnVuYyxkYXRhKSBmdW5jKHMsZGF0YSkKKyNkZWZpbmUgV0FOVF9VU0VfU0NSRUVOKCkgZXh0ZXJuIHZvaWQgX25jX3dhbnRfdXNlX3NjcmVlbih2b2lkKQorI2VuZGlmCisKKyNpZmRlZiBUUkFDRQorI2RlZmluZSBUcmFjZShwKSBfdHJhY2VmIHAKKyNkZWZpbmUgVVNFX1RSQUNFIDEKKyNlbHNlCisjZGVmaW5lIFRyYWNlKHApCQkvKiBub3RoaW5nICovCisjZGVmaW5lIFVTRV9UUkFDRSAwCisjZW5kaWYKKworI2RlZmluZSBpbml0X21iKHN0YXRlKQltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKQorCisjZW5kaWYgLyogX19URVNUX1BSSVZfSCAqLwpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC90ZXN0X2FycmF5cy5jIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0X2FycmF5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNmExMGIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RfYXJyYXlzLmMKQEAgLTAsMCArMSw5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHRlc3RfYXJyYXlzLmMsdiAxLjMgMjAwOC8wMi8wOSAxODowOTo0MyB0b20gRXhwICQKKyAqCisgKiBBdXRob3I6IFRob21hcyBFIERpY2tleQorICoKKyAqIERlbW9uc3RyYXRlIHRoZSBwdWJsaWMgYXJyYXlzIGZyb20gdGhlIHRlcm1pbmZvIGxpYnJhcnkuCisKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBib29sbmFtZXNbXTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBib29sY29kZXNbXTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBib29sZm5hbWVzW107CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgbnVtbmFtZXNbXTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBudW1jb2Rlc1tdOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIG51bWZuYW1lc1tdOworZXh0ZXJuIE5DVVJTRVNfRVhQT1JUX1ZBUihOQ1VSU0VTX0NPTlNUIGNoYXIgKiBjb25zdCApIHN0cm5hbWVzW107CitleHRlcm4gTkNVUlNFU19FWFBPUlRfVkFSKE5DVVJTRVNfQ09OU1QgY2hhciAqIGNvbnN0ICkgc3RyY29kZXNbXTsKK2V4dGVybiBOQ1VSU0VTX0VYUE9SVF9WQVIoTkNVUlNFU19DT05TVCBjaGFyICogY29uc3QgKSBzdHJmbmFtZXNbXTsKKworICovCisKKyNkZWZpbmUgVVNFX1RJTkZPCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgfHwgIWRlZmluZWQoX1hPUEVOX0NVUlNFUykKKworI2RlZmluZSBEVU1QKG5hbWUpIGR1bXBfYXJyYXkoI25hbWUsIG5hbWUpCisKK3N0YXRpYyB2b2lkCitkdW1wX2FycmF5KGNvbnN0IGNoYXIgKm5hbWUsIE5DVVJTRVNfQ09OU1QgY2hhciAqY29uc3QgKmxpc3QpCit7CisgICAgaW50IG47CisKKyAgICBwcmludGYoIiVzOlxuIiwgbmFtZSk7CisgICAgZm9yIChuID0gMDsgbGlzdFtuXSAhPSAwOyArK24pIHsKKwlwcmludGYoIiU1ZDolc1xuIiwgbiwgbGlzdFtuXSk7CisgICAgfQorfQorCitpbnQKK21haW4oaW50IGFyZ2MgR0NDX1VOVVNFRCwgY2hhciAqYXJndltdR0NDX1VOVVNFRCkKK3sKKyAgICBEVU1QKGJvb2xuYW1lcyk7CisgICAgRFVNUChib29sY29kZXMpOworICAgIERVTVAoYm9vbGZuYW1lcyk7CisKKyAgICBEVU1QKG51bW5hbWVzKTsKKyAgICBEVU1QKG51bWNvZGVzKTsKKyAgICBEVU1QKG51bWZuYW1lcyk7CisKKyAgICBEVU1QKHN0cm5hbWVzKTsKKyAgICBEVU1QKHN0cmNvZGVzKTsKKyAgICBEVU1QKHN0cmZuYW1lcyk7CisKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorCisjZWxzZQoraW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIHRlcm1pbmZvIGFycmF5c1xuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC90ZXN0X2dldF93c3RyLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RfZ2V0X3dzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUzNzMwCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0X2dldF93c3RyLmMKQEAgLTAsMCArMSwzNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiB0ZXN0X2dldF93c3RyLmMsdiAxLjUgMjAwNy8wOC8xMSAxNzowMTo0MyB0b20gRXhwICQKKyAqCisgKiBBdXRob3I6IFRob21hcyBFIERpY2tleQorICoKKyAqIERlbW9uc3RyYXRlIHRoZSBnZXRfd3N0ciBmdW5jdGlvbnMgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnkuCisKKyAgICAgICBpbnQgZ2V0X3dzdHIod2ludF90ICp3c3RyKTsKKyAgICAgICBpbnQgZ2V0bl93c3RyKHdpbnRfdCAqd3N0ciwgaW50IG4pOworICAgICAgIGludCB3Z2V0X3dzdHIoV0lORE9XICp3aW4sIHdpbnRfdCAqd3N0cik7CisgICAgICAgaW50IHdnZXRuX3dzdHIoV0lORE9XICp3aW4sIHdpbnRfdCAqd3N0ciwgaW50IG4pOworICAgICAgIGludCBtdmdldF93c3RyKGludCB5LCBpbnQgeCwgd2ludF90ICp3c3RyKTsKKyAgICAgICBpbnQgbXZnZXRuX3dzdHIoaW50IHksIGludCB4LCB3aW50X3QgKndzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZ3Z2V0X3dzdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgd2ludF90ICp3c3RyKTsKKyAgICAgICBpbnQgbXZ3Z2V0bl93c3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIHdpbnRfdCAqd3N0ciwgaW50IG4pOworICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisKKyNkZWZpbmUgQkFTRV9ZIDYKKyNkZWZpbmUgTUFYX0NPTFMgMTAyNAorCit0eXBlZGVmIGVudW0geworICAgIGVHZXRTdHIgPSAwLAorICAgIGVHZXROU3RyLAorICAgIGVNdkdldFN0ciwKKyAgICBlTXZHZXROU3RyLAorICAgIGVNYXhGbGF2b3IKK30gRmxhdm9yczsKKworc3RhdGljIGJvb2wKK1F1aXQoaW50IGNoKQoreworICAgIHJldHVybiAoY2ggPT0gRVJSIHx8IGNoID09ICdxJyB8fCBjaCA9PSBRVUlUIHx8IGNoID09IEVTQ0FQRSk7Cit9CisKK3N0YXRpYyBpbnQKK1JlbWFpbmRlcihXSU5ET1cgKnR4dHdpbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gZ2V0bWF4eCh0eHR3aW4pIC0gZ2V0Y3VyeCh0eHR3aW4pOworICAgIHJldHVybiAocmVzdWx0ID4gMCkgPyByZXN1bHQgOiAwOworfQorCisvKgorICogU2hvdyBhIGhpZ2hsaWdodGVkIGxpbmUgaW4gdGhlIHBsYWNlIHdoZXJlIGlucHV0IHdpbGwgaGFwcGVuLgorICovCitzdGF0aWMgdm9pZAorU2hvd1Byb21wdChXSU5ET1cgKnR4dHdpbiwgaW50IGxpbWl0KQoreworICAgIHdjaGdhdCh0eHR3aW4sIGxpbWl0LCBBX1JFVkVSU0UsIDAsIE5VTEwpOworICAgIHdub3V0cmVmcmVzaCh0eHR3aW4pOworfQorCitzdGF0aWMgdm9pZAorTW92ZVByb21wdChXSU5ET1cgKnR4dHdpbiwgaW50IGxpbWl0LCBpbnQgeSwgaW50IHgpCit7CisgICAgd2NoZ2F0KHR4dHdpbiwgUmVtYWluZGVyKHR4dHdpbiksIEFfTk9STUFMLCAwLCBOVUxMKTsKKyAgICB3bW92ZSh0eHR3aW4sIHksIHgpOworICAgIFNob3dQcm9tcHQodHh0d2luLCBsaW1pdCk7Cit9CisKK3N0YXRpYyBpbnQKK1Nob3dGbGF2b3IoV0lORE9XICpzdHJ3aW4sIFdJTkRPVyAqdHh0d2luLCBpbnQgZmxhdm9yLCBpbnQgbGltaXQpCit7CisgICAgY29uc3QgY2hhciAqbmFtZSA9ICI/IjsKKyAgICBib29sIGxpbWl0ZWQgPSBGQUxTRTsKKyAgICBib29sIHdpbnMgPSAodHh0d2luICE9IHN0ZHNjcik7CisgICAgaW50IHJlc3VsdDsKKworICAgIHN3aXRjaCAoZmxhdm9yKSB7CisgICAgY2FzZSBlR2V0U3RyOgorCW5hbWUgPSB3aW5zID8gIndnZXRfd3N0ciIgOiAiZ2V0X3dzdHIiOworCWJyZWFrOworICAgIGNhc2UgZUdldE5TdHI6CisJbGltaXRlZCA9IFRSVUU7CisJbmFtZSA9IHdpbnMgPyAid2dldG5fd3N0ciIgOiAiZ2V0bl93c3RyIjsKKwlicmVhazsKKyAgICBjYXNlIGVNdkdldFN0cjoKKwluYW1lID0gd2lucyA/ICJtdndnZXRfd3N0ciIgOiAibXZnZXRfd3N0ciI7CisJYnJlYWs7CisgICAgY2FzZSBlTXZHZXROU3RyOgorCWxpbWl0ZWQgPSBUUlVFOworCW5hbWUgPSB3aW5zID8gIm12d2dldG5fd3N0ciIgOiAibXZnZXRuX3dzdHIiOworCWJyZWFrOworICAgIGNhc2UgZU1heEZsYXZvcjoKKwlicmVhazsKKyAgICB9CisKKyAgICB3bW92ZShzdHJ3aW4sIDAsIDApOworICAgIHdlcmFzZShzdHJ3aW4pOworCisgICAgaWYgKGxpbWl0ZWQpIHsKKwl3cHJpbnR3KHN0cndpbiwgIiVzKCVkKToiLCBuYW1lLCBsaW1pdCk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHN0cndpbiwgIiVzOiIsIG5hbWUpOworICAgIH0KKyAgICByZXN1bHQgPSBsaW1pdGVkID8gbGltaXQgOiBSZW1haW5kZXIodHh0d2luKTsKKyAgICBTaG93UHJvbXB0KHR4dHdpbiwgcmVzdWx0KTsKKworICAgIHdub3V0cmVmcmVzaChzdHJ3aW4pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfZ2V0X3dzdHIoaW50IGxldmVsLCBjaGFyICoqYXJndiwgV0lORE9XICpzdHJ3aW4pCit7CisgICAgV0lORE9XICp0eHRib3ggPSAwOworICAgIFdJTkRPVyAqdHh0d2luID0gMDsKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgY2g7CisgICAgaW50IHJjOworICAgIGludCB0eHRfeCA9IDAsIHR4dF95ID0gMDsKKyAgICBpbnQgYmFzZV95OworICAgIGludCBmbGF2b3IgPSAwOworICAgIGludCBsaW1pdCA9IGdldG1heHgoc3Ryd2luKSAtIDU7CisgICAgaW50IGFjdHVhbDsKKyAgICB3aW50X3QgYnVmZmVyW01BWF9DT0xTXTsKKworICAgIGlmIChhcmd2W2xldmVsXSA9PSAwKSB7CisJYmVlcCgpOworCXJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJdHh0Ym94ID0gbmV3d2luKExJTkVTIC0gQkFTRV9ZLCBDT0xTIC0gbGV2ZWwsIEJBU0VfWSwgbGV2ZWwpOworCWJveCh0eHRib3gsIDAsIDApOworCXdub3V0cmVmcmVzaCh0eHRib3gpOworCisJdHh0d2luID0gZGVyd2luKHR4dGJveCwKKwkJCWdldG1heHkodHh0Ym94KSAtIDIsCisJCQlnZXRtYXh4KHR4dGJveCkgLSAyLAorCQkJMSwgMSk7CisJYmFzZV95ID0gMDsKKyAgICB9IGVsc2UgeworCXR4dHdpbiA9IHN0ZHNjcjsKKwliYXNlX3kgPSBCQVNFX1k7CisgICAgfQorCisgICAga2V5cGFkKHR4dHdpbiwgVFJVRSk7CS8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKworICAgIHR4dF95ID0gYmFzZV95OworICAgIHR4dF94ID0gMDsKKyAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisKKyAgICBpZiAoKGZwID0gZm9wZW4oYXJndltsZXZlbF0sICJyIikpICE9IDApIHsKKwl3aGlsZSAoKGNoID0gZmdldGMoZnApKSAhPSBFT0YpIHsKKwkgICAgaWYgKHdhZGRjaCh0eHR3aW4sIFVDaGFyKGNoKSkgIT0gT0spIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJZmNsb3NlKGZwKTsKKyAgICB9IGVsc2UgeworCXdwcmludHcodHh0d2luLCAiQ2Fubm90IG9wZW46XG4lcyIsIGFyZ3ZbMV0pOworICAgIH0KKworICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKyAgICBhY3R1YWwgPSBTaG93Rmxhdm9yKHN0cndpbiwgdHh0d2luLCBmbGF2b3IsIGxpbWl0KTsKKyAgICB3aGlsZSAoIVF1aXQoY2ggPSBtdndnZXRjaCh0eHR3aW4sIHR4dF95LCB0eHRfeCkpKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgS0VZX0RPV046CisJY2FzZSAnaic6CisJICAgIGlmICh0eHRfeSA8IGdldG1heHkodHh0d2luKSAtIDEpIHsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgKyt0eHRfeSwgdHh0X3gpOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfVVA6CisJY2FzZSAnayc6CisJICAgIGlmICh0eHRfeSA+IGJhc2VfeSkgeworCQlNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCAtLXR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9MRUZUOgorCWNhc2UgJ2gnOgorCSAgICBpZiAodHh0X3ggPiAwKSB7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCAtLXR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1JJR0hUOgorCWNhc2UgJ2wnOgorCSAgICBpZiAodHh0X3ggPCBnZXRtYXh4KHR4dHdpbikgLSAxKSB7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCArK3R4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAndyc6CisJICAgIHRlc3RfZ2V0X3dzdHIobGV2ZWwgKyAxLCBhcmd2LCBzdHJ3aW4pOworCSAgICBpZiAodHh0Ym94ICE9IDApIHsKKwkJdG91Y2h3aW4odHh0Ym94KTsKKwkJd25vdXRyZWZyZXNoKHR4dGJveCk7CisJICAgIH0gZWxzZSB7CisJCXRvdWNod2luKHR4dHdpbik7CisJCXdub3V0cmVmcmVzaCh0eHR3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnLSc6CisJICAgIGlmIChsaW1pdCA+IDApIHsKKwkJYWN0dWFsID0gU2hvd0ZsYXZvcihzdHJ3aW4sIHR4dHdpbiwgZmxhdm9yLCAtLWxpbWl0KTsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgdHh0X3ksIHR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnKyc6CisJICAgIGFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIGZsYXZvciwgKytsaW1pdCk7CisJICAgIE1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIGJyZWFrOworCisJY2FzZSAnPCc6CisJICAgIGlmIChmbGF2b3IgPiAwKSB7CisJCWFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIC0tZmxhdm9yLCBsaW1pdCk7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJz4nOgorCSAgICBpZiAoZmxhdm9yICsgMSA8IGVNYXhGbGF2b3IpIHsKKwkJYWN0dWFsID0gU2hvd0ZsYXZvcihzdHJ3aW4sIHR4dHdpbiwgKytmbGF2b3IsIGxpbWl0KTsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgdHh0X3ksIHR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnOic6CisJICAgIGFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIGZsYXZvciwgbGltaXQpOworCSAgICAqYnVmZmVyID0gJ1wwJzsKKwkgICAgcmMgPSBFUlI7CisJICAgIGVjaG8oKTsKKwkgICAgd2F0dHJzZXQodHh0d2luLCBBX1JFVkVSU0UpOworCSAgICBzd2l0Y2ggKGZsYXZvcikgeworCSAgICBjYXNlIGVHZXRTdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJCSAgICByYyA9IHdnZXRfd3N0cih0eHR3aW4sIGJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisJCSAgICByYyA9IGdldF93c3RyKGJ1ZmZlcik7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgZUdldE5TdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJCSAgICByYyA9IHdnZXRuX3dzdHIodHh0d2luLCBidWZmZXIsIGxpbWl0KTsKKwkJfSBlbHNlIHsKKwkJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkJICAgIHJjID0gZ2V0bl93c3RyKGJ1ZmZlciwgbGltaXQpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIGVNdkdldFN0cjoKKwkJaWYgKHR4dHdpbiAhPSBzdGRzY3IpIHsKKwkJICAgIHJjID0gbXZ3Z2V0X3dzdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIGJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCSAgICByYyA9IG12Z2V0X3dzdHIodHh0X3ksIHR4dF94LCBidWZmZXIpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIGVNdkdldE5TdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICByYyA9IG12d2dldG5fd3N0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgYnVmZmVyLCBsaW1pdCk7CisJCX0gZWxzZSB7CisJCSAgICByYyA9IG12Z2V0bl93c3RyKHR4dF95LCB0eHRfeCwgYnVmZmVyLCBsaW1pdCk7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgZU1heEZsYXZvcjoKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgbm9lY2hvKCk7CisJICAgIHdhdHRyc2V0KHR4dHdpbiwgQV9OT1JNQUwpOworCSAgICB3cHJpbnR3KHN0cndpbiwgIiVkIiwgcmMpOworCSAgICB3YWRkd3N0cihzdHJ3aW4sICh3Y2hhcl90ICopIGJ1ZmZlcik7CisJICAgIHdub3V0cmVmcmVzaChzdHJ3aW4pOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKwlkb3VwZGF0ZSgpOworICAgIH0KKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJZGVsd2luKHR4dHdpbik7CisJZGVsd2luKHR4dGJveCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXSU5ET1cgKmNocmJveDsKKyAgICBXSU5ET1cgKnN0cndpbjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmIChhcmdjIDwgMikgeworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIGZpbGVcbiIsIGFyZ3ZbMF0pOworCXJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgfQorCisgICAgaW5pdHNjcigpOworCisgICAgY2hyYm94ID0gZGVyd2luKHN0ZHNjciwgQkFTRV9ZLCBDT0xTLCAwLCAwKTsKKyAgICBib3goY2hyYm94LCAwLCAwKTsKKyAgICB3bm91dHJlZnJlc2goY2hyYm94KTsKKworICAgIHN0cndpbiA9IGRlcndpbihjaHJib3gsIDQsIENPTFMgLSAyLCAxLCAxKTsKKworICAgIHRlc3RfZ2V0X3dzdHIoMSwgYXJndiwgc3Ryd2luKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisjZWxzZQoraW50CittYWluKHZvaWQpCit7CisgICAgcHJpbnRmKCJUaGlzIHByb2dyYW0gcmVxdWlyZXMgdGhlIHdpZGUtbmN1cnNlcyBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RfZ2V0c3RyLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RfZ2V0c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkYmVjZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvdGVzdF9nZXRzdHIuYwpAQCAtMCwwICsxLDM2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHRlc3RfZ2V0c3RyLmMsdiAxLjggMjAwOC8wMi8wOSAxODowOTozNSB0b20gRXhwICQKKyAqCisgKiBBdXRob3I6IFRob21hcyBFIERpY2tleQorICoKKyAqIERlbW9uc3RyYXRlIHRoZSBnZXRzdHIgZnVuY3Rpb25zIGZyb20gdGhlIGN1cnNlcyBsaWJyYXJ5LgorCisgICAgICAgaW50IGdldHN0cihjaGFyICpzdHIpOworICAgICAgIGludCBnZXRuc3RyKGNoYXIgKnN0ciwgaW50IG4pOworICAgICAgIGludCB3Z2V0c3RyKFdJTkRPVyAqd2luLCBjaGFyICpzdHIpOworICAgICAgIGludCB3Z2V0bnN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12Z2V0c3RyKGludCB5LCBpbnQgeCwgY2hhciAqc3RyKTsKKyAgICAgICBpbnQgbXZ3Z2V0c3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIGNoYXIgKnN0cik7CisgICAgICAgaW50IG12Z2V0bnN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pOworICAgICAgIGludCBtdndnZXRuc3RyKFdJTkRPVyAqLCBpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pOworICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmIEhBVkVfQ0hHQVQKKy8qIFNvbGFyaXMgU1ZyNCBjdXJzZXMgbGFja3Mgd2NoZ2F0LCBtdmdldG5zdHIsIG12d2dldG5zdHIgKi8KKworI2RlZmluZSBCQVNFX1kgNgorI2RlZmluZSBNQVhfQ09MUyAxMDI0CisKK3R5cGVkZWYgZW51bSB7CisgICAgZUdldFN0ciA9IDAsCisgICAgZUdldE5TdHIsCisgICAgZU12R2V0U3RyLAorICAgIGVNdkdldE5TdHIsCisgICAgZU1heEZsYXZvcgorfSBGbGF2b3JzOworCitzdGF0aWMgYm9vbAorUXVpdChpbnQgY2gpCit7CisgICAgcmV0dXJuIChjaCA9PSBFUlIgfHwgY2ggPT0gJ3EnIHx8IGNoID09IFFVSVQgfHwgY2ggPT0gRVNDQVBFKTsKK30KKworc3RhdGljIGludAorUmVtYWluZGVyKFdJTkRPVyAqdHh0d2luKQoreworICAgIGludCByZXN1bHQgPSBnZXRtYXh4KHR4dHdpbikgLSBnZXRjdXJ4KHR4dHdpbik7CisgICAgcmV0dXJuIChyZXN1bHQgPiAwKSA/IHJlc3VsdCA6IDA7Cit9CisKKy8qCisgKiBTaG93IGEgaGlnaGxpZ2h0ZWQgbGluZSBpbiB0aGUgcGxhY2Ugd2hlcmUgaW5wdXQgd2lsbCBoYXBwZW4uCisgKi8KK3N0YXRpYyB2b2lkCitTaG93UHJvbXB0KFdJTkRPVyAqdHh0d2luLCBpbnQgbGltaXQpCit7CisgICAgd2NoZ2F0KHR4dHdpbiwgbGltaXQsIEFfUkVWRVJTRSwgMCwgTlVMTCk7CisgICAgd25vdXRyZWZyZXNoKHR4dHdpbik7Cit9CisKK3N0YXRpYyB2b2lkCitNb3ZlUHJvbXB0KFdJTkRPVyAqdHh0d2luLCBpbnQgbGltaXQsIGludCB5LCBpbnQgeCkKK3sKKyAgICB3Y2hnYXQodHh0d2luLCBSZW1haW5kZXIodHh0d2luKSwgQV9OT1JNQUwsIDAsIE5VTEwpOworICAgIHdtb3ZlKHR4dHdpbiwgeSwgeCk7CisgICAgU2hvd1Byb21wdCh0eHR3aW4sIGxpbWl0KTsKK30KKworc3RhdGljIGludAorU2hvd0ZsYXZvcihXSU5ET1cgKnN0cndpbiwgV0lORE9XICp0eHR3aW4sIGludCBmbGF2b3IsIGludCBsaW1pdCkKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lID0gIj8iOworICAgIGJvb2wgbGltaXRlZCA9IEZBTFNFOworICAgIGJvb2wgd2lucyA9ICh0eHR3aW4gIT0gc3Rkc2NyKTsKKyAgICBpbnQgcmVzdWx0OworCisgICAgc3dpdGNoIChmbGF2b3IpIHsKKyAgICBjYXNlIGVHZXRTdHI6CisJbmFtZSA9IHdpbnMgPyAid2dldHN0ciIgOiAiZ2V0c3RyIjsKKwlicmVhazsKKyAgICBjYXNlIGVHZXROU3RyOgorCWxpbWl0ZWQgPSBUUlVFOworCW5hbWUgPSB3aW5zID8gIndnZXRuc3RyIiA6ICJnZXRuc3RyIjsKKwlicmVhazsKKyAgICBjYXNlIGVNdkdldFN0cjoKKwluYW1lID0gd2lucyA/ICJtdndnZXRzdHIiIDogIm12Z2V0c3RyIjsKKwlicmVhazsKKyAgICBjYXNlIGVNdkdldE5TdHI6CisJbGltaXRlZCA9IFRSVUU7CisJbmFtZSA9IHdpbnMgPyAibXZ3Z2V0bnN0ciIgOiAibXZnZXRuc3RyIjsKKwlicmVhazsKKyAgICBjYXNlIGVNYXhGbGF2b3I6CisJYnJlYWs7CisgICAgfQorCisgICAgd21vdmUoc3Ryd2luLCAwLCAwKTsKKyAgICB3ZXJhc2Uoc3Ryd2luKTsKKworICAgIGlmIChsaW1pdGVkKSB7CisJd3ByaW50dyhzdHJ3aW4sICIlcyglZCk6IiwgbmFtZSwgbGltaXQpOworICAgIH0gZWxzZSB7CisJd3ByaW50dyhzdHJ3aW4sICIlczoiLCBuYW1lKTsKKyAgICB9CisgICAgcmVzdWx0ID0gbGltaXRlZCA/IGxpbWl0IDogUmVtYWluZGVyKHR4dHdpbik7CisgICAgU2hvd1Byb21wdCh0eHR3aW4sIHJlc3VsdCk7CisKKyAgICB3bm91dHJlZnJlc2goc3Ryd2luKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50Cit0ZXN0X2dldHN0cihpbnQgbGV2ZWwsIGNoYXIgKiphcmd2LCBXSU5ET1cgKnN0cndpbikKK3sKKyAgICBXSU5ET1cgKnR4dGJveCA9IDA7CisgICAgV0lORE9XICp0eHR3aW4gPSAwOworICAgIEZJTEUgKmZwOworICAgIGludCBjaDsKKyAgICBpbnQgcmM7CisgICAgaW50IHR4dF94ID0gMCwgdHh0X3kgPSAwOworICAgIGludCBiYXNlX3k7CisgICAgaW50IGZsYXZvciA9IDA7CisgICAgaW50IGxpbWl0ID0gZ2V0bWF4eChzdHJ3aW4pIC0gNTsKKyAgICBpbnQgYWN0dWFsOworCisgICAgY2hhciBidWZmZXJbTUFYX0NPTFNdOworCisgICAgaWYgKGFyZ3ZbbGV2ZWxdID09IDApIHsKKwliZWVwKCk7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChsZXZlbCA+IDEpIHsKKwl0eHRib3ggPSBuZXd3aW4oTElORVMgLSBCQVNFX1ksIENPTFMgLSBsZXZlbCwgQkFTRV9ZLCBsZXZlbCk7CisJYm94KHR4dGJveCwgMCwgMCk7CisJd25vdXRyZWZyZXNoKHR4dGJveCk7CisKKwl0eHR3aW4gPSBkZXJ3aW4odHh0Ym94LAorCQkJZ2V0bWF4eSh0eHRib3gpIC0gMiwKKwkJCWdldG1heHgodHh0Ym94KSAtIDIsCisJCQkxLCAxKTsKKwliYXNlX3kgPSAwOworICAgIH0gZWxzZSB7CisJdHh0d2luID0gc3Rkc2NyOworCWJhc2VfeSA9IEJBU0VfWTsKKyAgICB9CisKKyAgICBrZXlwYWQodHh0d2luLCBUUlVFKTsJLyogZW5hYmxlIGtleWJvYXJkIG1hcHBpbmcgKi8KKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgdHh0X3kgPSBiYXNlX3k7CisgICAgdHh0X3ggPSAwOworICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKworICAgIGlmICgoZnAgPSBmb3Blbihhcmd2W2xldmVsXSwgInIiKSkgIT0gMCkgeworCXdoaWxlICgoY2ggPSBmZ2V0YyhmcCkpICE9IEVPRikgeworCSAgICBpZiAod2FkZGNoKHR4dHdpbiwgVUNoYXIoY2gpKSAhPSBPSykgeworCQlicmVhazsKKwkgICAgfQorCX0KKwlmY2xvc2UoZnApOworICAgIH0gZWxzZSB7CisJd3ByaW50dyh0eHR3aW4sICJDYW5ub3Qgb3BlbjpcbiVzIiwgYXJndlsxXSk7CisgICAgfQorCisgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworICAgIGFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIGZsYXZvciwgbGltaXQpOworICAgIHdoaWxlICghUXVpdChjaCA9IG12d2dldGNoKHR4dHdpbiwgdHh0X3ksIHR4dF94KSkpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSBLRVlfRE9XTjoKKwljYXNlICdqJzoKKwkgICAgaWYgKHR4dF95IDwgZ2V0bWF4eSh0eHR3aW4pIC0gMSkgeworCQlNb3ZlUHJvbXB0KHR4dHdpbiwgYWN0dWFsLCArK3R4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIEtFWV9VUDoKKwljYXNlICdrJzoKKwkgICAgaWYgKHR4dF95ID4gYmFzZV95KSB7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIC0tdHh0X3ksIHR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0xFRlQ6CisJY2FzZSAnaCc6CisJICAgIGlmICh0eHRfeCA+IDApIHsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgdHh0X3ksIC0tdHh0X3gpOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfUklHSFQ6CisJY2FzZSAnbCc6CisJICAgIGlmICh0eHRfeCA8IGdldG1heHgodHh0d2luKSAtIDEpIHsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgdHh0X3ksICsrdHh0X3gpOworCSAgICB9IGVsc2UgeworCQliZWVwKCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwljYXNlICd3JzoKKwkgICAgdGVzdF9nZXRzdHIobGV2ZWwgKyAxLCBhcmd2LCBzdHJ3aW4pOworCSAgICBpZiAodHh0Ym94ICE9IDApIHsKKwkJdG91Y2h3aW4odHh0Ym94KTsKKwkJd25vdXRyZWZyZXNoKHR4dGJveCk7CisJICAgIH0gZWxzZSB7CisJCXRvdWNod2luKHR4dHdpbik7CisJCXdub3V0cmVmcmVzaCh0eHR3aW4pOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnLSc6CisJICAgIGlmIChsaW1pdCA+IDApIHsKKwkJYWN0dWFsID0gU2hvd0ZsYXZvcihzdHJ3aW4sIHR4dHdpbiwgZmxhdm9yLCAtLWxpbWl0KTsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgdHh0X3ksIHR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnKyc6CisJICAgIGFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIGZsYXZvciwgKytsaW1pdCk7CisJICAgIE1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIGJyZWFrOworCisJY2FzZSAnPCc6CisJICAgIGlmIChmbGF2b3IgPiAwKSB7CisJCWFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIC0tZmxhdm9yLCBsaW1pdCk7CisJCU1vdmVQcm9tcHQodHh0d2luLCBhY3R1YWwsIHR4dF95LCB0eHRfeCk7CisJICAgIH0gZWxzZSB7CisJCWJlZXAoKTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgJz4nOgorCSAgICBpZiAoZmxhdm9yICsgMSA8IGVNYXhGbGF2b3IpIHsKKwkJYWN0dWFsID0gU2hvd0ZsYXZvcihzdHJ3aW4sIHR4dHdpbiwgKytmbGF2b3IsIGxpbWl0KTsKKwkJTW92ZVByb21wdCh0eHR3aW4sIGFjdHVhbCwgdHh0X3ksIHR4dF94KTsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAnOic6CisJICAgIGFjdHVhbCA9IFNob3dGbGF2b3Ioc3Ryd2luLCB0eHR3aW4sIGZsYXZvciwgbGltaXQpOworCSAgICAqYnVmZmVyID0gJ1wwJzsKKwkgICAgcmMgPSBFUlI7CisJICAgIGVjaG8oKTsKKwkgICAgd2F0dHJzZXQodHh0d2luLCBBX1JFVkVSU0UpOworCSAgICBzd2l0Y2ggKGZsYXZvcikgeworCSAgICBjYXNlIGVHZXRTdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICB3bW92ZSh0eHR3aW4sIHR4dF95LCB0eHRfeCk7CisJCSAgICByYyA9IHdnZXRzdHIodHh0d2luLCBidWZmZXIpOworCQl9IGVsc2UgeworCQkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCQkgICAgcmMgPSBnZXRzdHIoYnVmZmVyKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBlR2V0TlN0cjoKKwkJaWYgKHR4dHdpbiAhPSBzdGRzY3IpIHsKKwkJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkJICAgIHJjID0gd2dldG5zdHIodHh0d2luLCBidWZmZXIsIGxpbWl0KTsKKwkJfSBlbHNlIHsKKwkJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKwkJICAgIHJjID0gZ2V0bnN0cihidWZmZXIsIGxpbWl0KTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBlTXZHZXRTdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICByYyA9IG12d2dldHN0cih0eHR3aW4sIHR4dF95LCB0eHRfeCwgYnVmZmVyKTsKKwkJfSBlbHNlIHsKKwkJICAgIHJjID0gbXZnZXRzdHIodHh0X3ksIHR4dF94LCBidWZmZXIpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIGVNdkdldE5TdHI6CisJCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJCSAgICByYyA9IG12d2dldG5zdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIGJ1ZmZlciwgbGltaXQpOworCQl9IGVsc2UgeworCQkgICAgcmMgPSBtdmdldG5zdHIodHh0X3ksIHR4dF94LCBidWZmZXIsIGxpbWl0KTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBlTWF4Rmxhdm9yOgorCQlicmVhazsKKwkgICAgfQorCSAgICBub2VjaG8oKTsKKwkgICAgd2F0dHJzZXQodHh0d2luLCBBX05PUk1BTCk7CisJICAgIHdwcmludHcoc3Ryd2luLCAiJWQ6JXMiLCByYywgYnVmZmVyKTsKKwkgICAgd25vdXRyZWZyZXNoKHN0cndpbik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCWRvdXBkYXRlKCk7CisgICAgfQorICAgIGlmIChsZXZlbCA+IDEpIHsKKwlkZWx3aW4odHh0d2luKTsKKwlkZWx3aW4odHh0Ym94KTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdJTkRPVyAqY2hyYm94OworICAgIFdJTkRPVyAqc3Ryd2luOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaWYgKGFyZ2MgPCAyKSB7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgZmlsZVxuIiwgYXJndlswXSk7CisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisKKyAgICBjaHJib3ggPSBkZXJ3aW4oc3Rkc2NyLCBCQVNFX1ksIENPTFMsIDAsIDApOworICAgIGJveChjaHJib3gsIDAsIDApOworICAgIHdub3V0cmVmcmVzaChjaHJib3gpOworCisgICAgc3Ryd2luID0gZGVyd2luKGNocmJveCwgNCwgQ09MUyAtIDIsIDEsIDEpOworCisgICAgdGVzdF9nZXRzdHIoMSwgYXJndiwgc3Ryd2luKTsKKworICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CisKKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgY3Vyc2VzIGNoZ2F0IGZ1bmN0aW9uXG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RfaW5zdHIuYyBiL25jdXJzZXMtNS43L3Rlc3QvdGVzdF9pbnN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNGY3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RfaW5zdHIuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICoKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAqCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nICAgICAgKgorICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCAgICAgICoKKyAqIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgd2l0aCBtb2RpZmljYXRpb25zLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAgICAgICAqCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgKgorICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgKgorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyAgKgorICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAgICAgICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gICAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQUJPVkUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sICAgKgorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SICAgICoKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiAgICAqCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAqCisgKiBob2xkZXJzIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSAgICAgKgorICogc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICoKKyAqIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAkSWQ6IHRlc3RfaW5zdHIuYyx2IDEuNCAyMDA3LzA3LzIxIDE5OjM4OjA0IHRvbSBFeHAgJAorICoKKyAqIEF1dGhvcjogVGhvbWFzIEUgRGlja2V5CisgKgorICogRGVtb25zdHJhdGUgdGhlIGluc3RyIGZ1bmN0aW9ucyBmcm9tIHRoZSBjdXJzZXMgbGlicmFyeS4KKworICAgICAgIGludCBpbnN0cihjaGFyICpzdHIpOworICAgICAgIGludCBpbm5zdHIoY2hhciAqc3RyLCBpbnQgbik7CisgICAgICAgaW50IHdpbnN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyKTsKKyAgICAgICBpbnQgd2lubnN0cihXSU5ET1cgKndpbiwgY2hhciAqc3RyLCBpbnQgbik7CisgICAgICAgaW50IG12aW5zdHIoaW50IHksIGludCB4LCBjaGFyICpzdHIpOworICAgICAgIGludCBtdmlubnN0cihpbnQgeSwgaW50IHgsIGNoYXIgKnN0ciwgaW50IG4pOworICAgICAgIGludCBtdndpbnN0cihXSU5ET1cgKndpbiwgaW50IHksIGludCB4LCBjaGFyICpzdHIpOworICAgICAgIGludCBtdndpbm5zdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgY2hhciAqc3RyLCBpbnQgbik7CisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjZGVmaW5lIEJBU0VfWSA2CisjZGVmaW5lIE1BWF9DT0xTIDEwMjQKKworc3RhdGljIGJvb2wKK1F1aXQoaW50IGNoKQoreworICAgIHJldHVybiAoY2ggPT0gRVJSIHx8IGNoID09ICdxJyB8fCBjaCA9PSBRVUlUIHx8IGNoID09IEVTQ0FQRSk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93XzFzdChXSU5ET1cgKndpbiwgaW50IGxpbmUsIGNoYXIgKmJ1ZmZlcikKK3sKKyAgICBtdndhZGRzdHIod2luLCBsaW5lLCA1LCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZAorc2hvd21vcmUoV0lORE9XICp3aW4sIGludCBsaW5lLCBjaGFyICpidWZmZXIpCit7CisgICAgd21vdmUod2luLCBsaW5lLCAwKTsKKyAgICB3Y2xydG9lb2wod2luKTsKKyAgICBzaG93XzFzdCh3aW4sIGxpbmUsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfaW5jaHMoaW50IGxldmVsLCBjaGFyICoqYXJndiwgV0lORE9XICpjaHJ3aW4sIFdJTkRPVyAqc3Ryd2luKQoreworICAgIFdJTkRPVyAqdHh0Ym94ID0gMDsKKyAgICBXSU5ET1cgKnR4dHdpbiA9IDA7CisgICAgRklMRSAqZnA7CisgICAgaW50IGNoOworICAgIGludCB0eHRfeCA9IDAsIHR4dF95ID0gMDsKKyAgICBpbnQgYmFzZV95OworICAgIGludCBsaW1pdCA9IGdldG1heHgoc3Ryd2luKSAtIDU7CisKKyAgICBjaGFyIGJ1ZmZlcltNQVhfQ09MU107CisKKyAgICBpZiAoYXJndltsZXZlbF0gPT0gMCkgeworCWJlZXAoKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKGxldmVsID4gMSkgeworCXR4dGJveCA9IG5ld3dpbihMSU5FUyAtIEJBU0VfWSwgQ09MUyAtIGxldmVsLCBCQVNFX1ksIGxldmVsKTsKKwlib3godHh0Ym94LCAwLCAwKTsKKwl3bm91dHJlZnJlc2godHh0Ym94KTsKKworCXR4dHdpbiA9IGRlcndpbih0eHRib3gsCisJCQlnZXRtYXh5KHR4dGJveCkgLSAyLAorCQkJZ2V0bWF4eCh0eHRib3gpIC0gMiwKKwkJCTEsIDEpOworCWJhc2VfeSA9IDA7CisgICAgfSBlbHNlIHsKKwl0eHR3aW4gPSBzdGRzY3I7CisJYmFzZV95ID0gQkFTRV9ZOworICAgIH0KKworICAgIGtleXBhZCh0eHR3aW4sIFRSVUUpOwkvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisKKyAgICB0eHRfeSA9IGJhc2VfeTsKKyAgICB0eHRfeCA9IDA7CisgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCisgICAgaWYgKChmcCA9IGZvcGVuKGFyZ3ZbbGV2ZWxdLCAiciIpKSAhPSAwKSB7CisJd2hpbGUgKChjaCA9IGZnZXRjKGZwKSkgIT0gRU9GKSB7CisJICAgIGlmICh3YWRkY2godHh0d2luLCBVQ2hhcihjaCkpICE9IE9LKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHR4dHdpbiwgIkNhbm5vdCBvcGVuOlxuJXMiLCBhcmd2WzFdKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIVF1aXQoY2ggPSBtdndnZXRjaCh0eHR3aW4sIHR4dF95LCB0eHRfeCkpKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgS0VZX0RPV046CisJY2FzZSAnaic6CisJICAgIGlmICh0eHRfeSA8IGdldG1heHkodHh0d2luKSAtIDEpCisJCXR4dF95Kys7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9VUDoKKwljYXNlICdrJzoKKwkgICAgaWYgKHR4dF95ID4gYmFzZV95KQorCQl0eHRfeS0tOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfTEVGVDoKKwljYXNlICdoJzoKKwkgICAgaWYgKHR4dF94ID4gMCkKKwkJdHh0X3gtLTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1JJR0hUOgorCWNhc2UgJ2wnOgorCSAgICBpZiAodHh0X3ggPCBnZXRtYXh4KHR4dHdpbikgLSAxKQorCQl0eHRfeCsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIHRlc3RfaW5jaHMobGV2ZWwgKyAxLCBhcmd2LCBjaHJ3aW4sIHN0cndpbik7CisJICAgIGlmICh0eHRib3ggIT0gMCkgeworCQl0b3VjaHdpbih0eHRib3gpOworCQl3bm91dHJlZnJlc2godHh0Ym94KTsKKwkgICAgfSBlbHNlIHsKKwkJdG91Y2h3aW4odHh0d2luKTsKKwkJd25vdXRyZWZyZXNoKHR4dHdpbik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAnLSc6CisJICAgIGlmIChsaW1pdCA+IDApIHsKKwkJLS1saW1pdDsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJysnOgorCSAgICArK2xpbWl0OworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKworCW12d3ByaW50dyhjaHJ3aW4sIDAsIDAsICJsaW5lOiIpOworCXdjbHJ0b2VvbChjaHJ3aW4pOworCisJaWYgKHR4dHdpbiAhPSBzdGRzY3IpIHsKKwkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCisJICAgIGlmICh3aW5zdHIodHh0d2luLCBidWZmZXIpICE9IEVSUikgeworCQlzaG93XzFzdChjaHJ3aW4sIDAsIGJ1ZmZlcik7CisJICAgIH0KKwkgICAgaWYgKG12d2luc3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCBidWZmZXIpICE9IEVSUikgeworCQlzaG93bW9yZShjaHJ3aW4sIDEsIGJ1ZmZlcik7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBtb3ZlKHR4dF95LCB0eHRfeCk7CisKKwkgICAgaWYgKGluc3RyKGJ1ZmZlcikgIT0gRVJSKSB7CisJCXNob3dfMXN0KGNocndpbiwgMCwgYnVmZmVyKTsKKwkgICAgfQorCSAgICBpZiAobXZpbnN0cih0eHRfeSwgdHh0X3gsIGJ1ZmZlcikgIT0gRVJSKSB7CisJCXNob3dtb3JlKGNocndpbiwgMSwgYnVmZmVyKTsKKwkgICAgfQorCX0KKwl3bm91dHJlZnJlc2goY2hyd2luKTsKKworCW12d3ByaW50dyhzdHJ3aW4sIDAsIDAsICIlNGQ6IiwgbGltaXQpOworCXdjbHJ0b2JvdChzdHJ3aW4pOworCisJaWYgKHR4dHdpbiAhPSBzdGRzY3IpIHsKKwkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCSAgICBpZiAod2lubnN0cih0eHR3aW4sIGJ1ZmZlciwgbGltaXQpICE9IEVSUikgeworCQlzaG93XzFzdChzdHJ3aW4sIDAsIGJ1ZmZlcik7CisJICAgIH0KKworCSAgICBpZiAobXZ3aW5uc3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCBidWZmZXIsIGxpbWl0KSAhPSBFUlIpIHsKKwkJc2hvd21vcmUoc3Ryd2luLCAxLCBidWZmZXIpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCSAgICBpZiAoaW5uc3RyKGJ1ZmZlciwgbGltaXQpICE9IEVSUikgeworCQlzaG93XzFzdChzdHJ3aW4sIDAsIGJ1ZmZlcik7CisJICAgIH0KKworCSAgICBpZiAobXZpbm5zdHIodHh0X3ksIHR4dF94LCBidWZmZXIsIGxpbWl0KSAhPSBFUlIpIHsKKwkJc2hvd21vcmUoc3Ryd2luLCAxLCBidWZmZXIpOworCSAgICB9CisJfQorCisJd25vdXRyZWZyZXNoKHN0cndpbik7CisgICAgfQorICAgIGlmIChsZXZlbCA+IDEpIHsKKwlkZWx3aW4odHh0d2luKTsKKwlkZWx3aW4odHh0Ym94KTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdJTkRPVyAqY2hyYm94OworICAgIFdJTkRPVyAqY2hyd2luOworICAgIFdJTkRPVyAqc3Ryd2luOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaWYgKGFyZ2MgPCAyKSB7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgZmlsZVxuIiwgYXJndlswXSk7CisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisKKyAgICBjaHJib3ggPSBkZXJ3aW4oc3Rkc2NyLCBCQVNFX1ksIENPTFMsIDAsIDApOworICAgIGJveChjaHJib3gsIDAsIDApOworICAgIHdub3V0cmVmcmVzaChjaHJib3gpOworCisgICAgY2hyd2luID0gZGVyd2luKGNocmJveCwgMiwgQ09MUyAtIDIsIDEsIDEpOworICAgIHN0cndpbiA9IGRlcndpbihjaHJib3gsIDIsIENPTFMgLSAyLCAzLCAxKTsKKworICAgIHRlc3RfaW5jaHMoMSwgYXJndiwgY2hyd2luLCBzdHJ3aW4pOworCisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QvdGVzdF9pbndzdHIuYyBiL25jdXJzZXMtNS43L3Rlc3QvdGVzdF9pbndzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJiNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0X2lud3N0ci5jCkBAIC0wLDAgKzEsMjY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICRJZDogdGVzdF9pbndzdHIuYyx2IDEuMyAyMDA3LzA3LzIxIDIyOjQ3OjQyIHRvbSBFeHAgJAorICoKKyAqIEF1dGhvcjogVGhvbWFzIEUgRGlja2V5CisgKgorICogRGVtb25zdHJhdGUgdGhlIGlud3N0ciBmdW5jdGlvbnMgZnJvbSB0aGUgY3Vyc2VzIGxpYnJhcnkuCisKKyAgICAgICBpbnQgaW53c3RyKHdjaGFyX3QgKnN0cik7CisgICAgICAgaW50IGlubndzdHIod2NoYXJfdCAqc3RyLCBpbnQgbik7CisgICAgICAgaW50IHdpbndzdHIoV0lORE9XICp3aW4sIHdjaGFyX3QgKnN0cik7CisgICAgICAgaW50IHdpbm53c3RyKFdJTkRPVyAqd2luLCB3Y2hhcl90ICpzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZpbndzdHIoaW50IHksIGludCB4LCB3Y2hhcl90ICpzdHIpOworICAgICAgIGludCBtdmlubndzdHIoaW50IHksIGludCB4LCB3Y2hhcl90ICpzdHIsIGludCBuKTsKKyAgICAgICBpbnQgbXZ3aW53c3RyKFdJTkRPVyAqd2luLCBpbnQgeSwgaW50IHgsIHdjaGFyX3QgKnN0cik7CisgICAgICAgaW50IG12d2lubndzdHIoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCwgd2NoYXJfdCAqc3RyLCBpbnQgbik7CisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKworI2RlZmluZSBCQVNFX1kgNgorI2RlZmluZSBNQVhfQ09MUyAxMDI0CisKK3N0YXRpYyBib29sCitRdWl0KGludCBjaCkKK3sKKyAgICByZXR1cm4gKGNoID09IEVSUiB8fCBjaCA9PSAncScgfHwgY2ggPT0gUVVJVCB8fCBjaCA9PSBFU0NBUEUpOworfQorCitzdGF0aWMgdm9pZAorc2hvd18xc3QoV0lORE9XICp3aW4sIGludCBsaW5lLCB3Y2hhcl90ICpidWZmZXIpCit7CisgICAgbXZ3YWRkd3N0cih3aW4sIGxpbmUsIDUsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93bW9yZShXSU5ET1cgKndpbiwgaW50IGxpbmUsIHdjaGFyX3QgKmJ1ZmZlcikKK3sKKyAgICB3bW92ZSh3aW4sIGxpbmUsIDApOworICAgIHdjbHJ0b2VvbCh3aW4pOworICAgIHNob3dfMXN0KHdpbiwgbGluZSwgYnVmZmVyKTsKK30KKworc3RhdGljIGludAordGVzdF9pbmNocyhpbnQgbGV2ZWwsIGNoYXIgKiphcmd2LCBXSU5ET1cgKmNocndpbiwgV0lORE9XICpzdHJ3aW4pCit7CisgICAgV0lORE9XICp0eHRib3ggPSAwOworICAgIFdJTkRPVyAqdHh0d2luID0gMDsKKyAgICBGSUxFICpmcDsKKyAgICBpbnQgY2g7CisgICAgaW50IHR4dF94ID0gMCwgdHh0X3kgPSAwOworICAgIGludCBiYXNlX3k7CisgICAgaW50IGxpbWl0ID0gZ2V0bWF4eChzdHJ3aW4pIC0gNTsKKyAgICB3Y2hhcl90IGJ1ZmZlcltNQVhfQ09MU107CisKKyAgICBpZiAoYXJndltsZXZlbF0gPT0gMCkgeworCWJlZXAoKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKGxldmVsID4gMSkgeworCXR4dGJveCA9IG5ld3dpbihMSU5FUyAtIEJBU0VfWSwgQ09MUyAtIGxldmVsLCBCQVNFX1ksIGxldmVsKTsKKwlib3godHh0Ym94LCAwLCAwKTsKKwl3bm91dHJlZnJlc2godHh0Ym94KTsKKworCXR4dHdpbiA9IGRlcndpbih0eHRib3gsCisJCQlnZXRtYXh5KHR4dGJveCkgLSAyLAorCQkJZ2V0bWF4eCh0eHRib3gpIC0gMiwKKwkJCTEsIDEpOworCWJhc2VfeSA9IDA7CisgICAgfSBlbHNlIHsKKwl0eHR3aW4gPSBzdGRzY3I7CisJYmFzZV95ID0gQkFTRV9ZOworICAgIH0KKworICAgIGtleXBhZCh0eHR3aW4sIFRSVUUpOwkvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisKKyAgICB0eHRfeSA9IGJhc2VfeTsKKyAgICB0eHRfeCA9IDA7CisgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCisgICAgaWYgKChmcCA9IGZvcGVuKGFyZ3ZbbGV2ZWxdLCAiciIpKSAhPSAwKSB7CisJd2hpbGUgKChjaCA9IGZnZXRjKGZwKSkgIT0gRU9GKSB7CisJICAgIGlmICh3YWRkY2godHh0d2luLCBVQ2hhcihjaCkpICE9IE9LKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHR4dHdpbiwgIkNhbm5vdCBvcGVuOlxuJXMiLCBhcmd2WzFdKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIVF1aXQoY2ggPSBtdndnZXRjaCh0eHR3aW4sIHR4dF95LCB0eHRfeCkpKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgS0VZX0RPV046CisJY2FzZSAnaic6CisJICAgIGlmICh0eHRfeSA8IGdldG1heHkodHh0d2luKSAtIDEpCisJCXR4dF95Kys7CisJICAgIGVsc2UKKwkJYmVlcCgpOworCSAgICBicmVhazsKKwljYXNlIEtFWV9VUDoKKwljYXNlICdrJzoKKwkgICAgaWYgKHR4dF95ID4gYmFzZV95KQorCQl0eHRfeS0tOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfTEVGVDoKKwljYXNlICdoJzoKKwkgICAgaWYgKHR4dF94ID4gMCkKKwkJdHh0X3gtLTsKKwkgICAgZWxzZQorCQliZWVwKCk7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX1JJR0hUOgorCWNhc2UgJ2wnOgorCSAgICBpZiAodHh0X3ggPCBnZXRtYXh4KHR4dHdpbikgLSAxKQorCQl0eHRfeCsrOworCSAgICBlbHNlCisJCWJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAndyc6CisJICAgIHRlc3RfaW5jaHMobGV2ZWwgKyAxLCBhcmd2LCBjaHJ3aW4sIHN0cndpbik7CisJICAgIGlmICh0eHRib3ggIT0gMCkgeworCQl0b3VjaHdpbih0eHRib3gpOworCQl3bm91dHJlZnJlc2godHh0Ym94KTsKKwkgICAgfSBlbHNlIHsKKwkJdG91Y2h3aW4odHh0d2luKTsKKwkJd25vdXRyZWZyZXNoKHR4dHdpbik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAnLSc6CisJICAgIGlmIChsaW1pdCA+IDApIHsKKwkJLS1saW1pdDsKKwkgICAgfSBlbHNlIHsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgJysnOgorCSAgICArK2xpbWl0OworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBiZWVwKCk7CisJICAgIGJyZWFrOworCX0KKworCW12d3ByaW50dyhjaHJ3aW4sIDAsIDAsICJsaW5lOiIpOworCXdjbHJ0b2VvbChjaHJ3aW4pOworCisJaWYgKHR4dHdpbiAhPSBzdGRzY3IpIHsKKwkgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCisJICAgIGlmICh3aW53c3RyKHR4dHdpbiwgYnVmZmVyKSAhPSBFUlIpIHsKKwkJc2hvd18xc3QoY2hyd2luLCAwLCBidWZmZXIpOworCSAgICB9CisJICAgIGlmIChtdndpbndzdHIodHh0d2luLCB0eHRfeSwgdHh0X3gsIGJ1ZmZlcikgIT0gRVJSKSB7CisJCXNob3dtb3JlKGNocndpbiwgMSwgYnVmZmVyKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIG1vdmUodHh0X3ksIHR4dF94KTsKKworCSAgICBpZiAoaW53c3RyKGJ1ZmZlcikgIT0gRVJSKSB7CisJCXNob3dfMXN0KGNocndpbiwgMCwgYnVmZmVyKTsKKwkgICAgfQorCSAgICBpZiAobXZpbndzdHIodHh0X3ksIHR4dF94LCBidWZmZXIpICE9IEVSUikgeworCQlzaG93bW9yZShjaHJ3aW4sIDEsIGJ1ZmZlcik7CisJICAgIH0KKwl9CisJd25vdXRyZWZyZXNoKGNocndpbik7CisKKwltdndwcmludHcoc3Ryd2luLCAwLCAwLCAiJTRkOiIsIGxpbWl0KTsKKwl3Y2xydG9ib3Qoc3Ryd2luKTsKKworCWlmICh0eHR3aW4gIT0gc3Rkc2NyKSB7CisJICAgIHdtb3ZlKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkgICAgaWYgKHdpbm53c3RyKHR4dHdpbiwgYnVmZmVyLCBsaW1pdCkgIT0gRVJSKSB7CisJCXNob3dfMXN0KHN0cndpbiwgMCwgYnVmZmVyKTsKKwkgICAgfQorCisJICAgIGlmIChtdndpbm53c3RyKHR4dHdpbiwgdHh0X3ksIHR4dF94LCBidWZmZXIsIGxpbWl0KSAhPSBFUlIpIHsKKwkJc2hvd21vcmUoc3Ryd2luLCAxLCBidWZmZXIpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgbW92ZSh0eHRfeSwgdHh0X3gpOworCSAgICBpZiAoaW5ud3N0cihidWZmZXIsIGxpbWl0KSAhPSBFUlIpIHsKKwkJc2hvd18xc3Qoc3Ryd2luLCAwLCBidWZmZXIpOworCSAgICB9CisKKwkgICAgaWYgKG12aW5ud3N0cih0eHRfeSwgdHh0X3gsIGJ1ZmZlciwgbGltaXQpICE9IEVSUikgeworCQlzaG93bW9yZShzdHJ3aW4sIDEsIGJ1ZmZlcik7CisJICAgIH0KKwl9CisKKwl3bm91dHJlZnJlc2goc3Ryd2luKTsKKyAgICB9CisgICAgaWYgKGxldmVsID4gMSkgeworCWRlbHdpbih0eHR3aW4pOworCWRlbHdpbih0eHRib3gpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgV0lORE9XICpjaHJib3g7CisgICAgV0lORE9XICpjaHJ3aW47CisgICAgV0lORE9XICpzdHJ3aW47CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBpZiAoYXJnYyA8IDIpIHsKKwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyBmaWxlXG4iLCBhcmd2WzBdKTsKKwlyZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIGluaXRzY3IoKTsKKworICAgIGNocmJveCA9IGRlcndpbihzdGRzY3IsIEJBU0VfWSwgQ09MUywgMCwgMCk7CisgICAgYm94KGNocmJveCwgMCwgMCk7CisgICAgd25vdXRyZWZyZXNoKGNocmJveCk7CisKKyAgICBjaHJ3aW4gPSBkZXJ3aW4oY2hyYm94LCAyLCBDT0xTIC0gMiwgMSwgMSk7CisgICAgc3Ryd2luID0gZGVyd2luKGNocmJveCwgMiwgQ09MUyAtIDIsIDMsIDEpOworCisgICAgdGVzdF9pbmNocygxLCBhcmd2LCBjaHJ3aW4sIHN0cndpbik7CisKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQorI2Vsc2UKK2ludAorbWFpbih2b2lkKQoreworICAgIHByaW50ZigiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIHRoZSB3aWRlLW5jdXJzZXMgbGlicmFyeVxuIik7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC90ZXN0X29wYXF1ZS5jIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0X29wYXF1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYWI3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3Rfb3BhcXVlLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogJElkOiB0ZXN0X29wYXF1ZS5jLHYgMS43IDIwMDgvMDcvMDUgMjM6MTg6NDAgdG9tIEV4cCAkCisgKgorICogQXV0aG9yOiBUaG9tYXMgRSBEaWNrZXkKKyAqCisgKiBEZW1vbnN0cmF0ZSB0aGUgb3BhcXVlIGZ1bmN0aW9ucyBmcm9tIHRoZSBjdXJzZXMgbGlicmFyeS4KKworICAgICAgIFdJTkRPVyAqIHdnZXRwYXJlbnQgKGNvbnN0IFdJTkRPVyAqKTsKKyAgICAgICBib29sIGlzX2NsZWFyZWQoY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfaWRjb2soY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfaWRsb2soY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfaW1tZWRvayhjb25zdCBXSU5ET1cgKndpbik7CisgICAgICAgYm9vbCBpc19rZXlwYWQoY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGJvb2wgaXNfbGVhdmVvayhjb25zdCBXSU5ET1cgKndpbik7CisgICAgICAgYm9vbCBpc19ub2RlbGF5KGNvbnN0IFdJTkRPVyAqd2luKTsKKyAgICAgICBib29sIGlzX25vdGltZW91dChjb25zdCBXSU5ET1cgKndpbik7CisgICAgICAgYm9vbCBpc19zY3JvbGxvayhjb25zdCBXSU5ET1cgKndpbik7CisgICAgICAgYm9vbCBpc19zeW5jb2soY29uc3QgV0lORE9XICp3aW4pOworICAgICAgIGludCB3Z2V0c2NycmVnIChjb25zdCBXSU5ET1cgKiwgaW50ICosIGludCAqKTsKKyAqLworCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNkZWZpbmUgQkFTRV9ZIDYKKyNkZWZpbmUgTUFYX0NPTFMgMTAyNAorCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0gpICYmIChOQ1VSU0VTX1ZFUlNJT05fUEFUQ0ggPj0gMjAwODAxMTkpICYmIE5DVVJTRVNfRVhUX0ZVTkNTCisKK3N0YXRpYyBib29sCitRdWl0KGludCBjaCkKK3sKKyAgICByZXR1cm4gKGNoID09ICdxJyB8fCBjaCA9PSBRVUlUIHx8IGNoID09IEVTQ0FQRSk7Cit9CisKK3R5cGVkZWYgYm9vbCgqQm9vbE9wYXF1ZSkgKFdJTkRPVyAqLCBpbnQpOworCitzdGF0aWMgYm9vbAordGVzdF9vcGFxdWVfY2xlYXJlZChXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCWlmIChtb2RlKQorCSAgICB3Y2xlYXIod2luKTsKKyAgICB9CisgICAgcmV0dXJuIGlzX2NsZWFyZWQod2luKTsKK30KKworc3RhdGljIGJvb2wKK3Rlc3Rfb3BhcXVlX2lkY29rKFdJTkRPVyAqd2luLCBpbnQgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA+PSAwKSB7CisJaWRjb2sod2luLCBtb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGlzX2lkY29rKHdpbik7Cit9CisKK3N0YXRpYyBib29sCit0ZXN0X29wYXF1ZV9pZGxvayhXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCWlkbG9rKHdpbiwgbW9kZSk7CisgICAgfQorICAgIHJldHVybiBpc19pZGxvayh3aW4pOworfQorCitzdGF0aWMgYm9vbAordGVzdF9vcGFxdWVfaW1tZWRvayhXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCWltbWVkb2sod2luLCBtb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGlzX2ltbWVkb2sod2luKTsKK30KKworc3RhdGljIGJvb2wKK3Rlc3Rfb3BhcXVlX2tleXBhZChXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCWtleXBhZCh3aW4sIG1vZGUpOworICAgIH0KKyAgICByZXR1cm4gaXNfa2V5cGFkKHdpbik7Cit9CisKK3N0YXRpYyBib29sCit0ZXN0X29wYXF1ZV9sZWF2ZW9rKFdJTkRPVyAqd2luLCBpbnQgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA+PSAwKSB7CisJbGVhdmVvayh3aW4sIG1vZGUpOworICAgIH0KKyAgICByZXR1cm4gaXNfbGVhdmVvayh3aW4pOworfQorCitzdGF0aWMgYm9vbAordGVzdF9vcGFxdWVfbm9kZWxheShXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCW5vZGVsYXkod2luLCBtb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGlzX25vZGVsYXkod2luKTsKK30KKworc3RhdGljIGJvb2wKK3Rlc3Rfb3BhcXVlX25vdGltZW91dChXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCW5vdGltZW91dCh3aW4sIG1vZGUpOworICAgIH0KKyAgICByZXR1cm4gaXNfbm90aW1lb3V0KHdpbik7Cit9CisKK3N0YXRpYyBib29sCit0ZXN0X29wYXF1ZV9zY3JvbGxvayhXSU5ET1cgKndpbiwgaW50IG1vZGUpCit7CisgICAgaWYgKG1vZGUgPj0gMCkgeworCXNjcm9sbG9rKHdpbiwgbW9kZSk7CisgICAgfQorICAgIHJldHVybiBpc19zY3JvbGxvayh3aW4pOworfQorCitzdGF0aWMgYm9vbAordGVzdF9vcGFxdWVfc3luY29rKFdJTkRPVyAqd2luLCBpbnQgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA+PSAwKSB7CisJc3luY29rKHdpbiwgbW9kZSk7CisgICAgfQorICAgIHJldHVybiBpc19zeW5jb2sod2luKTsKK30KKworc3RhdGljIGludAorc3RhdHVzX3koV0lORE9XICpzdHN3aW4sIGludCBjZWxsKQoreworICAgIHJldHVybiAoY2VsbCAlIGdldG1heHkoc3Rzd2luKSk7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXR1c194KFdJTkRPVyAqc3Rzd2luLCBpbnQgY2VsbCkKK3sKKyAgICByZXR1cm4gKDE1ICogKGNlbGwgLyBnZXRtYXh5KHN0c3dpbikpKTsKK30KKworc3RhdGljIHZvaWQKK3RvX2tleXdvcmQoV0lORE9XICpzdHN3aW4sIGludCBjZWxsKQoreworICAgIHdtb3ZlKHN0c3dpbiwgc3RhdHVzX3koc3Rzd2luLCBjZWxsKSwgc3RhdHVzX3goc3Rzd2luLCBjZWxsKSk7Cit9CisKK3N0YXRpYyB2b2lkCit0b19yZXN1bHQoV0lORE9XICpzdHN3aW4sIGludCBjZWxsLCBib29sIGJlZm9yZSkKK3sKKyAgICBpbnQgeSA9IHN0YXR1c195KHN0c3dpbiwgY2VsbCk7CisgICAgaW50IHggPSBzdGF0dXNfeChzdHN3aW4sIGNlbGwpICsgMTE7CisgICAgaWYgKCFiZWZvcmUpCisJKyt4OworICAgIHdtb3ZlKHN0c3dpbiwgeSwgeCk7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X2tleXdvcmQoV0lORE9XICpzdHN3aW4sIGludCBjZWxsLCBpbnQgYWN0aXZlLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHRvX2tleXdvcmQoc3Rzd2luLCBjZWxsKTsKKyAgICBpZiAoYWN0aXZlID09IGNlbGwpCisJd3N0YW5kb3V0KHN0c3dpbik7CisgICAgd3ByaW50dyhzdHN3aW4sICIlczoiLCBuYW1lKTsKKyAgICBpZiAoYWN0aXZlID09IGNlbGwpCisJd3N0YW5kZW5kKHN0c3dpbik7Cit9CisvKiAqSU5ERU5ULU9GRiogKi8KK3N0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgQm9vbE9wYXF1ZSBmdW5jOworfSBib29sX2Z1bmNzW10gPSB7CisgICAgeyAiY2xlYXJlZCIsICAgdGVzdF9vcGFxdWVfY2xlYXJlZCB9LAorICAgIHsgImlkY29rIiwgICAgIHRlc3Rfb3BhcXVlX2lkY29rIH0sCisgICAgeyAiaWRsb2siLCAgICAgdGVzdF9vcGFxdWVfaWRsb2sgfSwKKyAgICB7ICJpbW1lZG9rIiwgICB0ZXN0X29wYXF1ZV9pbW1lZG9rIH0sCisgICAgeyAia2V5cGFkIiwgICAgdGVzdF9vcGFxdWVfa2V5cGFkIH0sCisgICAgeyAibGVhdmVvayIsICAgdGVzdF9vcGFxdWVfbGVhdmVvayB9LAorICAgIHsgIm5vZGVsYXkiLCAgIHRlc3Rfb3BhcXVlX25vZGVsYXkgfSwKKyAgICB7ICJub3RpbWVvdXQiLCB0ZXN0X29wYXF1ZV9ub3RpbWVvdXQgfSwKKyAgICB7ICJzY3JvbGxvayIsICB0ZXN0X29wYXF1ZV9zY3JvbGxvayB9LAorICAgIHsgInN5bmNvayIsICAgIHRlc3Rfb3BhcXVlX3N5bmNvayB9Cit9OworLyogKklOREVOVC1PTiogKi8KKworLyoKKyAqIERpc3BsYXkgYW5kL29yIGFsbG93IHVwZGF0ZSBmb3IgdGhlIHByb3BlcnRpZXMgYWNjZXNzZWQgaW4gdGhlIG9wYXF1ZQorICogd2luZG93LiAgU29tZSBtYXkgY2hhbmdlIHN0YXRlIGFmdGVyIHJlZnJlc2hpbmcgdGhlIHdpbmRvdywgc28gd2UKKyAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSB1c2luZyB0aGUgJ2JlZm9yZScgcGFyYW1ldGVyLgorICovCitzdGF0aWMgaW50CitzaG93X29wYXF1ZShXSU5ET1cgKnN0c3dpbiwgV0lORE9XICp0eHR3aW4sIGJvb2wgYmVmb3JlLCBpbnQgYWN0aXZlKQoreworICAgIGludCBuOworICAgIGludCB0b3AsIGJvdHRvbTsKKworICAgIGlmIChiZWZvcmUpIHsKKwl3ZXJhc2Uoc3Rzd2luKTsKKyAgICB9CisgICAgZm9yIChuID0gMDsgbiA8IChpbnQpIFNJWkVPRihib29sX2Z1bmNzKTsgKytuKSB7CisJc2hvd19rZXl3b3JkKHN0c3dpbiwgbiwgYWN0aXZlLCBib29sX2Z1bmNzW25dLm5hbWUpOworCisJdG9fcmVzdWx0KHN0c3dpbiwgbiwgYmVmb3JlKTsKKwl3cHJpbnR3KHN0c3dpbiwgIiVjIiwgYm9vbF9mdW5jc1tuXS5mdW5jKHR4dHdpbiwgLTEpID8gJ1QnIDogJ0YnKTsKKyAgICB9CisKKyAgICBzaG93X2tleXdvcmQoc3Rzd2luLCBuLCBhY3RpdmUsICJ3Z2V0cGFyZW50Iik7CisgICAgdG9fcmVzdWx0KHN0c3dpbiwgbiwgVFJVRSk7CisgICAgd3ByaW50dyhzdHN3aW4sICIlcCIsIHdnZXRwYXJlbnQodHh0d2luKSk7CisKKyAgICArK247CisgICAgc2hvd19rZXl3b3JkKHN0c3dpbiwgbiwgYWN0aXZlLCAid2dldHNjcnJlZyIpOworICAgIHRvX3Jlc3VsdChzdHN3aW4sIG4sIFRSVUUpOworICAgIGlmICh3Z2V0c2NycmVnKHR4dHdpbiwgJnRvcCwgJmJvdHRvbSkgPT0gT0spCisJd3ByaW50dyhzdHN3aW4sICIlZCwlZCIsIHRvcCwgYm90dG9tKTsKKworICAgIHdub3V0cmVmcmVzaChzdHN3aW4pOworICAgIHJldHVybiBhY3RpdmU7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3Rfb3BhcXVlKGludCBsZXZlbCwgY2hhciAqKmFyZ3YsIFdJTkRPVyAqc3Rzd2luKQoreworICAgIFdJTkRPVyAqdHh0Ym94ID0gMDsKKyAgICBXSU5ET1cgKnR4dHdpbiA9IDA7CisgICAgRklMRSAqZnA7CisgICAgaW50IGNoOworICAgIGludCB0eHRfeCA9IDAsIHR4dF95ID0gMDsKKyAgICBpbnQgYmFzZV95OworICAgIGJvb2wgaW5fc3RhdHVzID0gRkFMU0U7CisgICAgaW50IGFjdGl2ZSA9IDA7CisKKyAgICBpZiAoYXJndltsZXZlbF0gPT0gMCkgeworCWJlZXAoKTsKKwlyZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKGxldmVsID4gMSkgeworCXR4dGJveCA9IG5ld3dpbihMSU5FUyAtIEJBU0VfWSwgQ09MUyAtIGxldmVsLCBCQVNFX1ksIGxldmVsKTsKKwlib3godHh0Ym94LCAwLCAwKTsKKwl3bm91dHJlZnJlc2godHh0Ym94KTsKKworCXR4dHdpbiA9IGRlcndpbih0eHRib3gsCisJCQlnZXRtYXh5KHR4dGJveCkgLSAyLAorCQkJZ2V0bWF4eCh0eHRib3gpIC0gMiwKKwkJCTEsIDEpOworCWJhc2VfeSA9IDA7CisgICAgfSBlbHNlIHsKKwl0eHR3aW4gPSBzdGRzY3I7CisJYmFzZV95ID0gQkFTRV9ZOworICAgIH0KKworICAgIGtleXBhZCh0eHR3aW4sIFRSVUUpOwkvKiBlbmFibGUga2V5Ym9hcmQgbWFwcGluZyAqLworICAgICh2b2lkKSBjYnJlYWsoKTsJCS8qIHRha2UgaW5wdXQgY2hhcnMgb25lIGF0IGEgdGltZSwgbm8gd2FpdCBmb3IgXG4gKi8KKyAgICAodm9pZCkgbm9lY2hvKCk7CQkvKiBkb24ndCBlY2hvIGlucHV0ICovCisKKyAgICB0eHRfeSA9IGJhc2VfeTsKKyAgICB0eHRfeCA9IDA7CisgICAgd21vdmUodHh0d2luLCB0eHRfeSwgdHh0X3gpOworCisgICAgaWYgKChmcCA9IGZvcGVuKGFyZ3ZbbGV2ZWxdLCAiciIpKSAhPSAwKSB7CisJd2hpbGUgKChjaCA9IGZnZXRjKGZwKSkgIT0gRU9GKSB7CisJICAgIGlmICh3YWRkY2godHh0d2luLCBVQ2hhcihjaCkpICE9IE9LKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCWZjbG9zZShmcCk7CisgICAgfSBlbHNlIHsKKwl3cHJpbnR3KHR4dHdpbiwgIkNhbm5vdCBvcGVuOlxuJXMiLCBhcmd2WzFdKTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisJaWYgKGluX3N0YXR1cykgeworCSAgICB0b19rZXl3b3JkKHN0c3dpbiwgYWN0aXZlKTsKKworCSAgICBjaCA9IHdnZXRjaChzdHN3aW4pOworCSAgICBzaG93X29wYXF1ZShzdHN3aW4sIHR4dHdpbiwgVFJVRSwgYWN0aXZlKTsKKwkgICAgaWYgKFF1aXQoY2gpKQorCQlicmVhazsKKworCSAgICBzd2l0Y2ggKGNoKSB7CisJICAgIGNhc2UgJ1x0JzoKKwkJaW5fc3RhdHVzID0gRkFMU0U7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9ET1dOOgorCSAgICBjYXNlICdqJzoKKwkJaWYgKGFjdGl2ZSA8IChpbnQpIFNJWkVPRihib29sX2Z1bmNzKSAtIDEpCisJCSAgICBhY3RpdmUrKzsKKwkJZWxzZQorCQkgICAgYmVlcCgpOworCQlicmVhazsKKwkgICAgY2FzZSBLRVlfVVA6CisJICAgIGNhc2UgJ2snOgorCQlpZiAoYWN0aXZlID4gMCkKKwkJICAgIGFjdGl2ZS0tOworCQllbHNlCisJCSAgICBiZWVwKCk7CisJCWJyZWFrOworCSAgICBjYXNlICcgJzoKKwkJYm9vbF9mdW5jc1thY3RpdmVdLmZ1bmModHh0d2luLAorCQkJCQkhYm9vbF9mdW5jc1thY3RpdmVdLmZ1bmModHh0d2luLCAtMSkpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYmVlcCgpOworCQlicmVhazsKKwkgICAgfQorCSAgICBzaG93X29wYXF1ZShzdHN3aW4sIHR4dHdpbiwgRkFMU0UsIGluX3N0YXR1cyA/IGFjdGl2ZSA6IC0xKTsKKwl9IGVsc2UgeworCSAgICBjaCA9IG12d2dldGNoKHR4dHdpbiwgdHh0X3ksIHR4dF94KTsKKwkgICAgc2hvd19vcGFxdWUoc3Rzd2luLCB0eHR3aW4sIFRSVUUsIC0xKTsKKwkgICAgaWYgKFF1aXQoY2gpKQorCQlicmVhazsKKworCSAgICBzd2l0Y2ggKGNoKSB7CisJICAgIGNhc2UgJ1x0JzoKKwkJaW5fc3RhdHVzID0gVFJVRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX0RPV046CisJICAgIGNhc2UgJ2onOgorCQlpZiAodHh0X3kgPCBnZXRtYXh5KHR4dHdpbikgLSAxKQorCQkgICAgdHh0X3krKzsKKwkJZWxzZQorCQkgICAgYmVlcCgpOworCQlicmVhazsKKwkgICAgY2FzZSBLRVlfVVA6CisJICAgIGNhc2UgJ2snOgorCQlpZiAodHh0X3kgPiBiYXNlX3kpCisJCSAgICB0eHRfeS0tOworCQllbHNlCisJCSAgICBiZWVwKCk7CisJCWJyZWFrOworCSAgICBjYXNlIEtFWV9MRUZUOgorCSAgICBjYXNlICdoJzoKKwkJaWYgKHR4dF94ID4gMCkKKwkJICAgIHR4dF94LS07CisJCWVsc2UKKwkJICAgIGJlZXAoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgS0VZX1JJR0hUOgorCSAgICBjYXNlICdsJzoKKwkJaWYgKHR4dF94IDwgZ2V0bWF4eCh0eHR3aW4pIC0gMSkKKwkJICAgIHR4dF94Kys7CisJCWVsc2UKKwkJICAgIGJlZXAoKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3cnOgorCQl0ZXN0X29wYXF1ZShsZXZlbCArIDEsIGFyZ3YsIHN0c3dpbik7CisJCWlmICh0eHRib3ggIT0gMCkgeworCQkgICAgdG91Y2h3aW4odHh0Ym94KTsKKwkJICAgIHdub3V0cmVmcmVzaCh0eHRib3gpOworCQl9IGVsc2UgeworCQkgICAgdG91Y2h3aW4odHh0d2luKTsKKwkJICAgIHdub3V0cmVmcmVzaCh0eHR3aW4pOworCQl9CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQliZWVwKCk7CisJCW5hcG1zKDEwMCk7CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgc2hvd19vcGFxdWUoc3Rzd2luLCB0eHR3aW4sIEZBTFNFLCAtMSk7CisJfQorICAgIH0KKyAgICBpZiAobGV2ZWwgPiAxKSB7CisJZGVsd2luKHR4dHdpbik7CisJZGVsd2luKHR4dGJveCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zZXRfZXNjZGVsYXkodm9pZCkKK3sKKyAgICBzZXRfZXNjZGVsYXkoKDEwMCArIEVTQ0RFTEFZKSAvIDIpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zZXRfdGFic2l6ZSh2b2lkKQoreworICAgIGludCB5MCwgeDA7CisgICAgaW50IHksIHg7CisgICAgaW50IHNhdmVfdGFic2l6ZSA9IFRBQlNJWkU7CisKKyAgICAodm9pZCkgY2JyZWFrKCk7CQkvKiB0YWtlIGlucHV0IGNoYXJzIG9uZSBhdCBhIHRpbWUsIG5vIHdhaXQgZm9yIFxuICovCisgICAgKHZvaWQpIG5vZWNobygpOwkJLyogZG9uJ3QgZWNobyBpbnB1dCAqLworCisgICAgZm9yICh5ID0gMDsgeSA8IExJTkVTOyArK3kpIHsKKwlzZXRfdGFic2l6ZSh5ICsgMSk7CisJaWYgKG1vdmUoeSwgMCkgPT0gRVJSKQorCSAgICBicmVhazsKKwlmb3IgKHggPSAwOyB4IDwgQ09MUzspIHsKKwkgICAgYWRkY2goJ1x0Jyk7CisJICAgIGlmIChhZGRjaCgnKicpID09IEVSUikgeworCQlicmVhazsKKwkgICAgfQorCSAgICBnZXR5eChzdGRzY3IsIHkwLCB4MCk7CisJICAgIGlmICh5MCAhPSB5IHx8IHgwID09IHgpIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIGdldGNoKCk7CisgICAgZXJhc2UoKTsKKworICAgIHNldF90YWJzaXplKHNhdmVfdGFic2l6ZSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdJTkRPVyAqc3RzYm94OworICAgIFdJTkRPVyAqc3Rzd2luOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaWYgKGFyZ2MgPCAyKSB7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgZmlsZVxuIiwgYXJndlswXSk7CisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpbml0c2NyKCk7CisKKyAgICB0ZXN0X3NldF9lc2NkZWxheSgpOworICAgIHRlc3Rfc2V0X3RhYnNpemUoKTsKKworICAgIHN0c2JveCA9IGRlcndpbihzdGRzY3IsIEJBU0VfWSwgQ09MUywgMCwgMCk7CisgICAgYm94KHN0c2JveCwgMCwgMCk7CisgICAgd25vdXRyZWZyZXNoKHN0c2JveCk7CisKKyAgICBzdHN3aW4gPSBkZXJ3aW4oc3RzYm94LCBCQVNFX1kgLSAyLCBDT0xTIC0gMiwgMSwgMSk7CisgICAga2V5cGFkKHN0c3dpbiwgVFJVRSk7CisKKyAgICB0ZXN0X29wYXF1ZSgxLCBhcmd2LCBzdHN3aW4pOworCisgICAgZW5kd2luKCk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKyNlbHNlCitpbnQKK21haW4odm9pZCkKK3sKKyAgICBwcmludGYoIlRoaXMgcHJvZ3JhbSByZXF1aXJlcyB0aGUgbmN1cnNlcyBsaWJyYXJ5XG4iKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RhZGRjaC5jIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0YWRkY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTY1MWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0YWRkY2guYwpAQCAtMCwwICsxLDg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSB3cml0dGVuIGJ5IEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QHlhcnMuZnJlZS5uZXQ+LAorICogdG8gZGVtb25zdHJhdGUgYW4gaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIG5jdXJzZXMgYW5kIFNWcjQgY3Vyc2VzLgorICoKKyAqICRJZDogdGVzdGFkZGNoLmMsdiAxLjYgMjAwNi8wNC8wMSAxOTowODowMyB0b20gRXhwICQKKyAqLworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCitzdGF0aWMgdm9pZAorYXR0cl9hZGRzdHIoY29uc3QgY2hhciAqcywgY2h0eXBlIGEpCit7CisgICAgd2hpbGUgKCpzKQorCWFkZGNoKCgodW5zaWduZWQgY2hhcikgKCpzKyspKSB8IGEpOworfQorCitpbnQKK21haW4oCisJaW50IGFyZ2MgR0NDX1VOVVNFRCwKKwljaGFyICphcmd2W11HQ0NfVU5VU0VEKQoreworICAgIHVuc2lnbmVkIGk7CisgICAgY2h0eXBlIGJhY2ssIHNldCwgYXR0cjsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGluaXRzY3IoKTsKKyAgICBzdGFydF9jb2xvcigpOworICAgIGluaXRfcGFpcigxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisgICAgaW5pdF9wYWlyKDIsIENPTE9SX1dISVRFLCBDT0xPUl9SRUQpOworICAgIGluaXRfcGFpcigzLCBDT0xPUl9CTEFDSywgQ09MT1JfTUFHRU5UQSk7CisgICAgaW5pdF9wYWlyKDQsIENPTE9SX0JMQUNLLCBDT0xPUl9HUkVFTik7CisgICAgaW5pdF9wYWlyKDUsIENPTE9SX0JMQUNLLCBDT0xPUl9DWUFOKTsKKyAgICBpbml0X3BhaXIoNiwgQ09MT1JfQkxBQ0ssIENPTE9SX1lFTExPVyk7CisgICAgaW5pdF9wYWlyKDcsIENPTE9SX0JMQUNLLCBDT0xPUl9XSElURSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJYmFjayA9IChpICYgMSkgPyBBX0JPTEQgfCAnQicgOiAnICc7CisJc2V0ID0gKGkgJiAyKSA/IEFfUkVWRVJTRSA6IDA7CisJYXR0ciA9IChpICYgNCkgPyBDT0xPUl9QQUlSKDQpIDogMDsKKworCWJrZ2RzZXQoYmFjayk7CisJYXR0cnNldChzZXQpOworCisJYXR0cl9hZGRzdHIoIlRlc3Qgc3RyaW5nIHdpdGggc3BhY2VzIC0+ICAgPC1cbiIsIGF0dHIpOworICAgIH0KKyAgICBhZGRjaCgnXG4nKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJYmFjayA9IChpICYgMSkgPyBBX0JPTEQgfCAnQicgfCBDT0xPUl9QQUlSKDEpIDogJyAnOworCXNldCA9IChpICYgMikgPyBBX1JFVkVSU0UgfCBDT0xPUl9QQUlSKDIpIDogMDsKKwlhdHRyID0gKGkgJiA0KSA/IENPTE9SX1BBSVIoNCkgOiAwOworCisJYmtnZHNldChiYWNrKTsKKwlhdHRyc2V0KHNldCk7CisKKwlhdHRyX2FkZHN0cigiVGVzdCBzdHJpbmcgd2l0aCBzcGFjZXMgLT4gICA8LVxuIiwgYXR0cik7CisgICAgfQorCisgICAgZ2V0Y2goKTsKKyAgICBlbmR3aW4oKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC90ZXN0Y3Vycy5jIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0Y3Vycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMmU1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RjdXJzLmMKQEAgLTAsMCArMSw3MzggQEAKKy8qCisgKgorICogVGhpcyBpcyBhIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIFBEQ3Vyc2VzIHNjcmVlbiBwYWNrYWdlIGZvciBJQk0gUEMgdHlwZQorICogbWFjaGluZXMuCisgKgorICogVGhpcyBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5IEpvaG4gQnVybmVsbCAoam9obmJAa2VhLmFtLmRzaXIuZ292dC5ueikKKyAqICB3cnMoNS8yOC85MykgLS0gbW9kaWZpZWQgdG8gYmUgY29uc2lzdGVudCAocGVyZm9ybSBpZGVudGljYWxseSkgd2l0aCBlaXRoZXIKKyAqICAgICAgICAgICAgICAgICAgUERDdXJzZXMgb3IgdW5kZXIgVW5peCBTeXN0ZW0gViwgUjQKKyAqCisgKiAkSWQ6IHRlc3RjdXJzLmMsdiAxLjM5IDIwMDgvMDgvMDMgMTc6NTg6MDkgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPHRlc3QucHJpdi5oPgorCisjaWYgZGVmaW5lZChYQ1VSU0VTKQorY2hhciAqWEN1cnNlc1Byb2dyYW1OYW1lID0gInRlc3RjdXJzIjsKKyNlbmRpZgorCitzdGF0aWMgaW50IGluaXRUZXN0KFdJTkRPVyAqKik7CitzdGF0aWMgdm9pZCBkaXNwbGF5X21lbnUoaW50LCBpbnQpOworc3RhdGljIHZvaWQgaW5wdXRUZXN0KFdJTkRPVyAqKTsKK3N0YXRpYyB2b2lkIGludHJvVGVzdChXSU5ET1cgKik7CitzdGF0aWMgdm9pZCBvdXRwdXRUZXN0KFdJTkRPVyAqKTsKK3N0YXRpYyB2b2lkIHBhZFRlc3QoV0lORE9XICopOworc3RhdGljIHZvaWQgc2Nyb2xsVGVzdChXSU5ET1cgKik7CisjaWYgZGVmaW5lZChQRENVUlNFUykgJiYgIWRlZmluZWQoWENVUlNFUykKK3N0YXRpYyB2b2lkIHJlc2l6ZVRlc3QoV0lORE9XICopOworI2VuZGlmCisKK3N0cnVjdCBjb21tYW5kcyB7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICp0ZXh0OworICAgIHZvaWQgKCpmdW5jdGlvbikgKFdJTkRPVyAqKTsKK307Cit0eXBlZGVmIHN0cnVjdCBjb21tYW5kcyBDT01NQU5EOworCitzdGF0aWMgY29uc3QgQ09NTUFORCBjb21tYW5kW10gPQoreworICAgIHsiR2VuZXJhbCBUZXN0IiwgaW50cm9UZXN0fSwKKyAgICB7IlBhZCBUZXN0IiwgcGFkVGVzdH0sCisjaWYgZGVmaW5lZChQRENVUlNFUykgJiYgIWRlZmluZWQoWENVUlNFUykKKyAgICB7IlJlc2l6ZSBUZXN0IiwgcmVzaXplVGVzdH0sCisjZW5kaWYKKyAgICB7IlNjcm9sbCBUZXN0Iiwgc2Nyb2xsVGVzdH0sCisgICAgeyJJbnB1dCBUZXN0IiwgaW5wdXRUZXN0fSwKKyAgICB7Ik91dHB1dCBUZXN0Iiwgb3V0cHV0VGVzdH0KK307CisjZGVmaW5lIE1BWF9PUFRJT05TIChpbnQpIFNJWkVPRihjb21tYW5kKQorCisjaWYgIUhBVkVfU1RSRFVQCisjZGVmaW5lIHN0cmR1cCBteV9zdHJkdXAKK3N0YXRpYyBjaGFyICoKK3N0cmR1cChjaGFyICpzKQoreworICAgIGNoYXIgKnAgPSB0eXBlTWFsbG9jKGNoYXIsIHN0cmxlbihzKSArIDEpOworICAgIGlmIChwKQorCXN0cmNweShwLCBzKTsKKyAgICByZXR1cm4gKHApOworfQorI2VuZGlmIC8qIG5vdCBIQVZFX1NUUkRVUCAqLworCitzdGF0aWMgaW50IHdpZHRoLCBoZWlnaHQ7CisKK2ludAorbWFpbigKKwlpbnQgYXJnYyBHQ0NfVU5VU0VELAorCWNoYXIgKmFyZ3ZbXUdDQ19VTlVTRUQpCit7CisgICAgV0lORE9XICp3aW47CisgICAgaW50IGtleTsKKyAgICBpbnQgb2xkX29wdGlvbiA9ICgtMSk7CisgICAgaW50IG5ld19vcHRpb24gPSAwOworICAgIGJvb2wgcXVpdCA9IEZBTFNFOworICAgIGludCBuOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisjaWZkZWYgUERDREVCVUcKKyAgICBQRENfZGVidWcoInRlc3RjdXJzIHN0YXJ0ZWRcbiIpOworI2VuZGlmCisgICAgaWYgKCFpbml0VGVzdCgmd2luKSkKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCisgICAgZXJhc2UoKTsKKyAgICBkaXNwbGF5X21lbnUob2xkX29wdGlvbiwgbmV3X29wdGlvbik7CisgICAgZm9yICg7OykgeworI2lmZGVmIEFfQ09MT1IKKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJICAgIGluaXRfcGFpcigxLCBDT0xPUl9XSElURSwgQ09MT1JfQkxVRSk7CisJICAgIHdia2dkKHdpbiwgQ09MT1JfUEFJUigxKSk7CisJfSBlbHNlCisJICAgIHdia2dkKHdpbiwgQV9SRVZFUlNFKTsKKyNlbHNlCisJd2JrZ2Qod2luLCBBX1JFVkVSU0UpOworI2VuZGlmCisJd2VyYXNlKHdpbik7CisKKwlub2VjaG8oKTsKKwlrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKwlyYXcoKTsKKwlrZXkgPSBnZXRjaCgpOworCWlmIChrZXkgPCBLRVlfTUlOICYmIGtleSA+IDAgJiYgaXNhbHBoYShrZXkpKSB7CisJICAgIGlmIChpc2xvd2VyKGtleSkpCisJCWtleSA9IHRvdXBwZXIoa2V5KTsKKwkgICAgZm9yIChuID0gMDsgbiA8IE1BWF9PUFRJT05TOyArK24pIHsKKwkJaWYgKGtleSA9PSBjb21tYW5kW25dLnRleHRbMF0pIHsKKwkJICAgIGRpc3BsYXlfbWVudShvbGRfb3B0aW9uLCBuZXdfb3B0aW9uID0gbik7CisJCSAgICBrZXkgPSAnICc7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorCXN3aXRjaCAoa2V5KSB7CisJY2FzZSAxMDoKKwljYXNlIDEzOgorCWNhc2UgS0VZX0VOVEVSOgorCSAgICBlcmFzZSgpOworCSAgICByZWZyZXNoKCk7CisJICAgICgqY29tbWFuZFtuZXdfb3B0aW9uXS5mdW5jdGlvbikgKHdpbik7CisJICAgIGVyYXNlKCk7CisJICAgIGRpc3BsYXlfbWVudShvbGRfb3B0aW9uLCBuZXdfb3B0aW9uKTsKKwkgICAgYnJlYWs7CisJY2FzZSBLRVlfVVA6CisJICAgIG5ld19vcHRpb24gPSAoKG5ld19vcHRpb24gPT0gMCkKKwkJCSAgPyBuZXdfb3B0aW9uCisJCQkgIDogbmV3X29wdGlvbiAtIDEpOworCSAgICBkaXNwbGF5X21lbnUob2xkX29wdGlvbiwgbmV3X29wdGlvbik7CisJICAgIGJyZWFrOworCWNhc2UgS0VZX0RPV046CisJICAgIG5ld19vcHRpb24gPSAoKG5ld19vcHRpb24gPT0gKE1BWF9PUFRJT05TIC0gMSkpCisJCQkgID8gbmV3X29wdGlvbgorCQkJICA6IG5ld19vcHRpb24gKyAxKTsKKwkgICAgZGlzcGxheV9tZW51KG9sZF9vcHRpb24sIG5ld19vcHRpb24pOworCSAgICBicmVhazsKKwljYXNlICdRJzoKKwljYXNlICdxJzoKKwkgICAgcXVpdCA9IFRSVUU7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAnICc6CisJICAgIGJyZWFrOworCX0KKwlpZiAocXVpdCA9PSBUUlVFKQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWx3aW4od2luKTsKKworICAgIGVuZHdpbigpOworI2lmZGVmIFhDVVJTRVMKKyAgICBYQ3Vyc2VzRXhpdCgpOworI2VuZGlmCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KKworc3RhdGljIHZvaWQKK0NvbnRpbnVlKFdJTkRPVyAqd2luKQoreworICAgIGludCB5MSA9IGdldG1heHkod2luKTsKKyAgICBpbnQgeDEgPSBnZXRtYXh4KHdpbik7CisgICAgaW50IHkwID0geTEgPCAxMCA/IHkxIDogMTA7CisgICAgaW50IHgwID0gMTsKKyAgICBjaHR5cGUgc2F2ZTsKKworICAgIHNhdmUgPSBtdndpbmNoKHdpbiwgeTAsIHgxIC0gMSk7CisKKyAgICBtdndhZGRzdHIod2luLCB5MCwgeDAsICIgUHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgIHdjbHJ0b2VvbCh3aW4pOworICAgIGdldHl4KHdpbiwgeTAsIHgwKTsKKworICAgIG12d2FkZGNoKHdpbiwgeTAsIHgxIC0gMSwgc2F2ZSk7CisKKyAgICB3bW92ZSh3aW4sIHkwLCB4MCk7CisgICAgcmF3KCk7CisgICAgd2dldGNoKHdpbik7Cit9CisKK3N0YXRpYyBpbnQKK2luaXRUZXN0KFdJTkRPVyAqKndpbikKK3sKKyNpZmRlZiBQRENERUJVRworICAgIFBEQ19kZWJ1ZygiaW5pdFRlc3QgY2FsbGVkXG4iKTsKKyNlbmRpZgorI2lmZGVmIFRSQUNFCisgICAgdHJhY2UoVFJBQ0VfTUFYSU1VTSk7CisjZW5kaWYKKyAgICBpbml0c2NyKCk7CisjaWZkZWYgUERDREVCVUcKKyAgICBQRENfZGVidWcoImFmdGVyIGluaXRzY3IoKVxuIik7CisjZW5kaWYKKyNpZmRlZiBBX0NPTE9SCisgICAgaWYgKGhhc19jb2xvcnMoKSkKKwlzdGFydF9jb2xvcigpOworI2VuZGlmCisgICAgd2lkdGggPSA2MDsKKyAgICBoZWlnaHQgPSAxMzsJCS8qIENyZWF0ZSBhIGRyYXdpbmcgd2luZG93ICovCisgICAgKndpbiA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCAoTElORVMgLSBoZWlnaHQpIC8gMiwgKENPTFMgLSB3aWR0aCkgLyAyKTsKKyAgICBpZiAoKndpbiA9PSBOVUxMKSB7CisJZW5kd2luKCk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAoraW50cm9UZXN0KFdJTkRPVyAqd2luKQoreworICAgIHdtb3ZlKHdpbiwgaGVpZ2h0IC8gMiAtIDUsIHdpZHRoIC8gMik7CisgICAgd3ZsaW5lKHdpbiwgQUNTX1ZMSU5FLCAxMCk7CisgICAgd21vdmUod2luLCBoZWlnaHQgLyAyLCB3aWR0aCAvIDIgLSAxMCk7CisgICAgd2hsaW5lKHdpbiwgQUNTX0hMSU5FLCAyMCk7CisgICAgQ29udGludWUod2luKTsKKworICAgIGJlZXAoKTsKKyAgICB3ZXJhc2Uod2luKTsKKworICAgIGJveCh3aW4sIEFDU19WTElORSwgQUNTX0hMSU5FKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIGNicmVhaygpOworICAgIG12d2FkZHN0cih3aW4sIDEsIDEsCisJICAgICAgIllvdSBzaG91bGQgaGF2ZSByZWN0YW5nbGUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuIik7CisgICAgbXZ3YWRkc3RyKHdpbiwgMiwgMSwgIllvdSBzaG91bGQgaGF2ZSBoZWFyZCBhIGJlZXAiKTsKKyAgICBDb250aW51ZSh3aW4pOworICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3Njcm9sbFRlc3QoV0lORE9XICp3aW4pCit7CisgICAgaW50IGk7CisgICAgaW50IGhhbGY7CisgICAgaW50IE9sZFk7CisgICAgTkNVUlNFU19DT05TVCBjaGFyICpNZXNzYWdlID0gIlRoZSB3aW5kb3cgd2lsbCBub3cgc2Nyb2xsIHNsb3dseSI7CisKKyAgICB3Y2xlYXIod2luKTsKKyAgICBPbGRZID0gZ2V0bWF4eSh3aW4pOworICAgIGhhbGYgPSBPbGRZIC8gMjsKKyAgICBtdndwcmludHcod2luLCBPbGRZIC0gMiwgMSwgTWVzc2FnZSk7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBzY3JvbGxvayh3aW4sIFRSVUUpOworICAgIGZvciAoaSA9IDE7IGkgPD0gT2xkWTsgaSsrKSB7CisJbmFwbXMoNjAwKTsKKwlzY3JvbGwod2luKTsKKwl3cmVmcmVzaCh3aW4pOworICAgIH0KKworICAgIHdlcmFzZSh3aW4pOworICAgIGZvciAoaSA9IDE7IGkgPCBPbGRZOyBpKyspIHsKKwltdndwcmludHcod2luLCBpLCAxLCAiTGluZSAlZCIsIGkpOworICAgIH0KKyAgICBtdndwcmludHcod2luLCBPbGRZIC0gMiwgMSwgIlRoZSB0b3Agb2YgdGhlIHdpbmRvdyB3aWxsIHNjcm9sbCIpOworICAgIHdtb3ZlKHdpbiwgMSwgMSk7CisgICAgd3NldHNjcnJlZyh3aW4sIDAsIGhhbGYgLSAxKTsKKyAgICBib3god2luLCBBQ1NfVkxJTkUsIEFDU19ITElORSk7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IGhhbGY7IGkrKykgeworCW5hcG1zKDYwMCk7CisJc2Nyb2xsKHdpbik7CisJYm94KHdpbiwgQUNTX1ZMSU5FLCBBQ1NfSExJTkUpOworCXdyZWZyZXNoKHdpbik7CisgICAgfQorCisgICAgd2VyYXNlKHdpbik7CisgICAgZm9yIChpID0gMTsgaSA8IE9sZFk7IGkrKykgeworCW12d3ByaW50dyh3aW4sIGksIDEsICJMaW5lICVkIiwgaSk7CisgICAgfQorICAgIG12d3ByaW50dyh3aW4sIDEsIDEsICJUaGUgYm90dG9tIG9mIHRoZSB3aW5kb3cgd2lsbCBzY3JvbGwiKTsKKyAgICB3bW92ZSh3aW4sIE9sZFkgLSAyLCAxKTsKKyAgICB3c2V0c2NycmVnKHdpbiwgaGFsZiwgLS1PbGRZKTsKKyAgICBib3god2luLCBBQ1NfVkxJTkUsIEFDU19ITElORSk7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBmb3IgKGkgPSBoYWxmOyBpIDw9IE9sZFk7IGkrKykgeworCW5hcG1zKDYwMCk7CisJd3Njcmwod2luLCAtMSk7CisJYm94KHdpbiwgQUNTX1ZMSU5FLCBBQ1NfSExJTkUpOworCXdyZWZyZXNoKHdpbik7CisgICAgfQorICAgIHdzZXRzY3JyZWcod2luLCAwLCBPbGRZKTsKK30KKworc3RhdGljIHZvaWQKK2lucHV0VGVzdChXSU5ET1cgKndpbikKK3sKKyAgICBpbnQgYW5zd2VyZWQ7CisgICAgaW50IHJlcGVhdDsKKyAgICBpbnQgdywgaCwgYngsIGJ5LCBzdywgc2gsIGksIGMsIG51bTsKKyAgICBjaGFyIGJ1ZmZlcls4MF07CisgICAgV0lORE9XICpzdWJXaW47CisgICAgd2NsZWFyKHdpbik7CisKKyAgICBnZXRtYXh5eCh3aW4sIGgsIHcpOworICAgIGdldGJlZ3l4KHdpbiwgYnksIGJ4KTsKKyAgICBzdyA9IHcgLyAzOworICAgIHNoID0gaCAvIDM7CisgICAgaWYgKChzdWJXaW4gPSBzdWJ3aW4od2luLCBzaCwgc3csIGJ5ICsgaCAtIHNoIC0gMiwgYnggKyB3IC0gc3cgLSAyKSkgPT0gTlVMTCkKKwlyZXR1cm47CisKKyNpZmRlZiBBX0NPTE9SCisgICAgaWYgKGhhc19jb2xvcnMoKSkgeworCWluaXRfcGFpcigyLCBDT0xPUl9XSElURSwgQ09MT1JfUkVEKTsKKwl3YmtnZChzdWJXaW4sIENPTE9SX1BBSVIoMikgfCBBX0JPTEQpOworICAgIH0gZWxzZQorCXdia2dkKHN1YldpbiwgQV9CT0xEKTsKKyNlbHNlCisgICAgd2JrZ2Qoc3ViV2luLCBBX0JPTEQpOworI2VuZGlmCisgICAgYm94KHN1YldpbiwgQUNTX1ZMSU5FLCBBQ1NfSExJTkUpOworICAgIHdyZWZyZXNoKHdpbik7CisKKyAgICBub2NicmVhaygpOworICAgIG12d2FkZHN0cih3aW4sIDIsIDEsICJQcmVzcyBzb21lIGtleXMgZm9yIDUgc2Vjb25kcyIpOworICAgIG12d2FkZHN0cih3aW4sIDEsIDEsICJQcmVzc2luZyBeQyBzaG91bGQgZG8gbm90aGluZyIpOworICAgIHdyZWZyZXNoKHdpbik7CisKKyAgICB3ZXJhc2Uoc3ViV2luKTsKKyAgICBib3goc3ViV2luLCBBQ1NfVkxJTkUsIEFDU19ITElORSk7CisgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCW12d3ByaW50dyhzdWJXaW4sIDEsIDEsICJUaW1lID0gJWQiLCBpKTsKKwl3cmVmcmVzaChzdWJXaW4pOworCW5hcG1zKDEwMDApOworCWZsdXNoaW5wKCk7CisgICAgfQorCisgICAgZGVsd2luKHN1Yldpbik7CisgICAgd2VyYXNlKHdpbik7CisgICAgZmxhc2goKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIG5hcG1zKDUwMCk7CisKKyAgICBtdndhZGRzdHIod2luLCAyLCAxLCAiUHJlc3MgYSBrZXksIGZvbGxvd2VkIGJ5IEVOVEVSIik7CisgICAgd21vdmUod2luLCA5LCAxMCk7CisgICAgd3JlZnJlc2god2luKTsKKyAgICBlY2hvKCk7CisgICAgbm9yYXcoKTsKKyAgICB3Z2V0Y2god2luKTsKKyAgICBmbHVzaGlucCgpOworCisgICAgd21vdmUod2luLCA5LCAxMCk7CisgICAgd2RlbGNoKHdpbik7CisgICAgbXZ3YWRkc3RyKHdpbiwgNCwgMSwgIlRoZSBjaGFyYWN0ZXIgc2hvdWxkIG5vdyBoYXZlIGJlZW4gZGVsZXRlZCIpOworICAgIENvbnRpbnVlKHdpbik7CisKKyAgICB3Y2xlYXIod2luKTsKKyAgICBtdndhZGRzdHIod2luLCAxLCAxLCAiUHJlc3Mga2V5cyAob3IgbW91c2UgYnV0dG9ucykgdG8gc2hvdyB0aGVpciBuYW1lcyIpOworICAgIG12d2FkZHN0cih3aW4sIDIsIDEsICJQcmVzcyBzcGFjZWJhciB0byBmaW5pc2giKTsKKyAgICB3cmVmcmVzaCh3aW4pOworCisgICAga2V5cGFkKHdpbiwgVFJVRSk7CisgICAgcmF3KCk7CisgICAgbm9lY2hvKCk7CisKKyNpZiBIQVZFX1RZUEVBSEVBRAorICAgIHR5cGVhaGVhZCgtMSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoUERDVVJTRVMpCisgICAgbW91c2Vfc2V0KEFMTF9NT1VTRV9FVkVOVFMpOworI2VuZGlmCisKKyAgICBmb3IgKDs7KSB7CisJd21vdmUod2luLCAzLCA1KTsKKwljID0gd2dldGNoKHdpbik7CisJd2NscnRvYm90KHdpbik7CisJaWYgKGMgPj0gS0VZX01JTikKKwkgICAgd3ByaW50dyh3aW4sICJLZXkgUHJlc3NlZDogJXMiLCBrZXluYW1lKGMpKTsKKwllbHNlIGlmIChpc3ByaW50KGMpKQorCSAgICB3cHJpbnR3KHdpbiwgIktleSBQcmVzc2VkOiAlYyIsIGMpOworCWVsc2UKKwkgICAgd3ByaW50dyh3aW4sICJLZXkgUHJlc3NlZDogJXMiLCB1bmN0cmwoVUNoYXIoYykpKTsKKyNpZiBkZWZpbmVkKFBEQ1VSU0VTKQorCWlmIChjID09IEtFWV9NT1VTRSkgeworCSAgICBpbnQgYnV0dG9uID0gMDsKKwkgICAgcmVxdWVzdF9tb3VzZV9wb3MoKTsKKwkgICAgaWYgKEJVVFRPTl9DSEFOR0VEKDEpKQorCQlidXR0b24gPSAxOworCSAgICBlbHNlIGlmIChCVVRUT05fQ0hBTkdFRCgyKSkKKwkJYnV0dG9uID0gMjsKKwkgICAgZWxzZSBpZiAoQlVUVE9OX0NIQU5HRUQoMykpCisJCWJ1dHRvbiA9IDM7CisJICAgIGVsc2UKKwkJYnV0dG9uID0gMDsKKwkgICAgd21vdmUod2luLCA0LCAxOCk7CisJICAgIHdwcmludHcod2luLCAiQnV0dG9uICVkOiAiLCBidXR0b24pOworCSAgICBpZiAoTU9VU0VfTU9WRUQpCisJCXdwcmludHcod2luLCAibW92ZWQ6ICIpOworCSAgICBlbHNlIGlmICgoQlVUVE9OX1NUQVRVUyhidXR0b24pICYgQlVUVE9OX0FDVElPTl9NQVNLKSA9PSBCVVRUT05fUFJFU1NFRCkKKwkJd3ByaW50dyh3aW4sICJwcmVzc2VkOiAiKTsKKwkgICAgZWxzZSBpZiAoKEJVVFRPTl9TVEFUVVMoYnV0dG9uKSAmIEJVVFRPTl9BQ1RJT05fTUFTSykgPT0gQlVUVE9OX0RPVUJMRV9DTElDS0VEKQorCQl3cHJpbnR3KHdpbiwgImRvdWJsZTogIik7CisJICAgIGVsc2UKKwkJd3ByaW50dyh3aW4sICJyZWxlYXNlZDogIik7CisJICAgIHdwcmludHcod2luLCAiIFBvc2l0aW9uOiBZOiAlZCBYOiAlZCIsIE1PVVNFX1lfUE9TLCBNT1VTRV9YX1BPUyk7CisJfQorI2VuZGlmCisJd3JlZnJlc2god2luKTsKKwlpZiAoYyA9PSAnICcpCisJICAgIGJyZWFrOworICAgIH0KKyNpZiAwCisgICAgbm9kZWxheSh3aW4sIFRSVUUpOworICAgIHdnZXRjaCh3aW4pOworICAgIG5vZGVsYXkod2luLCBGQUxTRSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFBEQ1VSU0VTKQorICAgIG1vdXNlX3NldCgwTCk7CisjZW5kaWYKKyAgICByZWZyZXNoKCk7CisKKyAgICByZXBlYXQgPSAwOworICAgIGRvIHsKKwlzdGF0aWMgY29uc3QgY2hhciAqZm10W10gPQorCXsKKwkgICAgIiVkICUxMHMiLAorCSAgICAiJWQgJVthLXpBLVpdcyIsCisJICAgICIlZCAlW11bYS16QS1aXXMiLAorCSAgICAiJWQgJVteMC05XSIKKwl9OworCWNvbnN0IGNoYXIgKmZvcm1hdCA9IGZtdFtyZXBlYXQgJSBTSVpFT0YoZm10KV07CisKKwl3Y2xlYXIod2luKTsKKwltdndhZGRzdHIod2luLCAzLCAyLCAiVGhlIHdpbmRvdyBzaG91bGQgaGF2ZSBtb3ZlZCIpOworCW12d2FkZHN0cih3aW4sIDQsIDIsCisJCSAgIlRoaXMgdGV4dCBzaG91bGQgaGF2ZSBhcHBlYXJlZCB3aXRob3V0IHlvdSBwcmVzc2luZyBhIGtleSIpOworCW12d3ByaW50dyh3aW4sIDYsIDIsCisJCSAgIlNjYW5uaW5nIHdpdGggZm9ybWF0IFwiJXNcIiIsIGZvcm1hdCk7CisJbXZ3aW4od2luLCAyICsgMiAqIChyZXBlYXQgJSA0KSwgMSArIDIgKiAocmVwZWF0ICUgNCkpOworCWVyYXNlKCk7CisJcmVmcmVzaCgpOworCXdyZWZyZXNoKHdpbik7CisJZWNobygpOworCW5vcmF3KCk7CisJbnVtID0gMDsKKwkqYnVmZmVyID0gMDsKKwlhbnN3ZXJlZCA9IG12d3NjYW53KHdpbiwgNywgNiwgc3RyZHVwKGZvcm1hdCksICZudW0sIGJ1ZmZlcik7CisJbXZ3cHJpbnR3KHdpbiwgOCwgNiwKKwkJICAiU3RyaW5nOiAlcyBOdW1iZXI6ICVkICglZCB2YWx1ZXMgcmVhZCkiLAorCQkgIGJ1ZmZlciwgbnVtLCBhbnN3ZXJlZCk7CisJQ29udGludWUod2luKTsKKwkrK3JlcGVhdDsKKyAgICB9IHdoaWxlIChhbnN3ZXJlZCA+IDApOworfQorCitzdGF0aWMgdm9pZAorb3V0cHV0VGVzdChXSU5ET1cgKndpbikKK3sKKyAgICBXSU5ET1cgKndpbjE7CisgICAgY2hhciBCdWZmZXJbODBdOworICAgIGNodHlwZSBjaDsKKyAgICBpbnQgYnksIGJ4OworCisjaWYgIUhBVkVfVElHRVRTVFIKKyNpZiBIQVZFX1RHRVRFTlQKKyAgICBjaGFyIHRjX2J1ZmZlcls0MDk2XTsKKyAgICBjaGFyIHRjX3BhcnNlZFs0MDk2XTsKKyAgICBjaGFyICphcmVhX3BvaW50ZXIgPSB0Y19wYXJzZWQ7CisgICAgdGdldGVudCh0Y19idWZmZXIsIGdldGVudigiVEVSTSIpKTsKKyNlbHNlCisjZGVmaW5lIHRnZXRzdHIoYSxiKSAwCisjZW5kaWYKKyNlbmRpZiAvKiAhSEFWRV9USUdFVFNUUiAqLworCisgICAgbmwoKTsKKyAgICB3Y2xlYXIod2luKTsKKyAgICBtdndhZGRzdHIod2luLCAxLCAxLAorCSAgICAgICJZb3Ugc2hvdWxkIG5vdyBoYXZlIGEgc2NyZWVuIGluIHRoZSB1cHBlciBsZWZ0IGNvcm5lciwgYW5kIHRoaXMgdGV4dCBzaG91bGQgaGF2ZSB3cmFwcGVkIik7CisgICAgbXZ3aW4od2luLCAyLCAxKTsKKyAgICB3YWRkc3RyKHdpbiwgIlxuVGhpcyB0ZXh0IHNob3VsZCBiZSBkb3duXG4iKTsKKyAgICB3YWRkc3RyKHdpbiwgImFuZCBicm9rZW4gaW50byB0d28gaGVyZSBeIik7CisgICAgQ29udGludWUod2luKTsKKworICAgIHdjbGVhcih3aW4pOworICAgIHdhdHRyb24od2luLCBBX0JPTEQpOworICAgIG12d2FkZHN0cih3aW4sIDEsIDEsICJBIG5ldyB3aW5kb3cgd2lsbCBhcHBlYXIgd2l0aCB0aGlzIHRleHQgaW4gaXQiKTsKKyAgICBtdndhZGRzdHIod2luLCA4LCAxLCAiUHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgd2dldGNoKHdpbik7CisKKyAgICBnZXRiZWd5eCh3aW4sIGJ5LCBieCk7CisKKyAgICBpZiAoTElORVMgPCAyNCB8fCBDT0xTIDwgNzUpIHsKKwltdndhZGRzdHIod2luLCA1LCAxLAorCQkgICJTb21lIHRlc3RzIGhhdmUgYmVlbiBza2lwcGVkIGFzIHRoZXkgcmVxdWlyZSBhIik7CisJbXZ3YWRkc3RyKHdpbiwgNiwgMSwgImRpc3BsYXkgb2YgYXQgbGVhc3QgMjQgTElORVMgYnkgNzUgQ09MVU1OUyIpOworCUNvbnRpbnVlKHdpbik7CisgICAgfSBlbHNlIHsKKwl3aW4xID0gbmV3d2luKDEwLCA1MCwgMTQsIDI1KTsKKwlpZiAod2luMSA9PSBOVUxMKSB7CisJICAgIGVuZHdpbigpOworCSAgICByZXR1cm47CisJfQorI2lmZGVmIEFfQ09MT1IKKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJICAgIGluaXRfcGFpcigzLCBDT0xPUl9CTFVFLCBDT0xPUl9XSElURSk7CisJICAgIHdia2dkKHdpbjEsIENPTE9SX1BBSVIoMykpOworCX0gZWxzZQorCSAgICB3YmtnZCh3aW4xLCBBX05PUk1BTCk7CisjZWxzZQorCXdia2dkKHdpbjEsIEFfTk9STUFMKTsKKyNlbmRpZgorCXdjbGVhcih3aW4xKTsKKwltdndhZGRzdHIod2luMSwgNSwgMSwKKwkJICAiVGhpcyB0ZXh0IHNob3VsZCBhcHBlYXI7IHVzaW5nIG92ZXJsYXkgb3B0aW9uIik7CisJY29weXdpbih3aW4sIHdpbjEsIDAsIDAsIDAsIDAsIDksIDQ5LCBUUlVFKTsKKworI2lmIGRlZmluZWQoUERDVVJTRVMpICYmICFkZWZpbmVkKFhDVVJTRVMpCisJYm94KHdpbjEsIDB4YjMsIDB4YzQpOworI2Vsc2UKKwlib3god2luMSwgQUNTX1ZMSU5FLCBBQ1NfSExJTkUpOworI2VuZGlmCisJd21vdmUod2luMSwgOCwgMjYpOworCXdyZWZyZXNoKHdpbjEpOworCXdnZXRjaCh3aW4xKTsKKworCXdjbGVhcih3aW4xKTsKKwl3YXR0cm9uKHdpbjEsIEFfQkxJTkspOworCW12d2FkZHN0cih3aW4xLCA0LCAxLAorCQkgICJUaGlzIGJsaW5raW5nIHRleHQgc2hvdWxkIGFwcGVhciBpbiBvbmx5IHRoZSBzZWNvbmQgd2luZG93Iik7CisJd2F0dHJvZmYod2luMSwgQV9CTElOSyk7CisJbXZ3aW4od2luMSwgYnksIGJ4KTsKKwlvdmVybGF5KHdpbiwgd2luMSk7CisJbXZ3aW4od2luMSwgMTQsIDI1KTsKKwl3bW92ZSh3aW4xLCA4LCAyNik7CisJd3JlZnJlc2god2luMSk7CisJd2dldGNoKHdpbjEpOworCWRlbHdpbih3aW4xKTsKKyAgICB9CisKKyAgICBjbGVhcigpOworICAgIHdjbGVhcih3aW4pOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgbXZ3YWRkc3RyKHdpbiwgNiwgMiwgIlRoaXMgbGluZSBzaG91bGRuJ3QgYXBwZWFyIik7CisgICAgbXZ3YWRkc3RyKHdpbiwgNCwgMiwgIk9ubHkgaGFsZiBvZiB0aGUgbmV4dCBsaW5lIGlzIHZpc2libGUiKTsKKyAgICBtdndhZGRzdHIod2luLCA1LCAyLCAiT25seSBoYWxmIG9mIHRoZSBuZXh0IGxpbmUgaXMgdmlzaWJsZSIpOworICAgIHdtb3ZlKHdpbiwgNiwgMSk7CisgICAgd2NscnRvYm90KHdpbik7CisgICAgd21vdmUod2luLCA1LCAyMCk7CisgICAgd2NscnRvZW9sKHdpbik7CisgICAgbXZ3YWRkc3RyKHdpbiwgOCwgMiwgIlRoaXMgbGluZSBhbHNvIHNob3VsZG4ndCBhcHBlYXIiKTsKKyAgICB3bW92ZSh3aW4sIDgsIDEpOworICAgIHdkZWxldGVsbih3aW4pOworICAgIENvbnRpbnVlKHdpbik7CisKKyAgICB3bW92ZSh3aW4sIDUsIDkpOworICAgIGNoID0gd2luY2god2luKTsKKworICAgIHdjbGVhcih3aW4pOworICAgIHdtb3ZlKHdpbiwgNiwgMik7CisgICAgd2FkZHN0cih3aW4sICJUaGUgbmV4dCBjaGFyIHNob3VsZCBiZSBsOiAgIik7CisgICAgd2luc2NoKHdpbiwgY2gpOworICAgIENvbnRpbnVlKHdpbik7CisKKyNpZiBIQVZFX1dJTlNTVFIKKyAgICBtdndpbnNzdHIod2luLCA2LCAyLCAiQTFCMkMzRDRFNSIpOworICAgIENvbnRpbnVlKHdpbik7CisjZW5kaWYKKworICAgIHdtb3ZlKHdpbiwgNSwgMSk7CisgICAgd2luc2VydGxuKHdpbik7CisgICAgbXZ3YWRkc3RyKHdpbiwgNSwgMiwgIlRoZSBsaW5lcyBiZWxvdyBzaG91bGQgaGF2ZSBtb3ZlZCBkb3duIik7CisgICAgQ29udGludWUod2luKTsKKworICAgIHdjbGVhcih3aW4pOworICAgIHdtb3ZlKHdpbiwgMiwgMik7CisgICAgd3ByaW50dyh3aW4sICJUaGlzIGlzIGEgZm9ybWF0dGVkIHN0cmluZyBpbiBhIHdpbmRvdzogJWQgJXNcbiIsIDQyLAorCSAgICAiaXMgaXQiKTsKKyAgICBtdndhZGRzdHIod2luLCAxMCwgMSwgIkVudGVyIGEgc3RyaW5nOiAiKTsKKyAgICB3cmVmcmVzaCh3aW4pOworICAgIG5vcmF3KCk7CisgICAgZWNobygpOworICAgICpCdWZmZXIgPSAwOworICAgIHdzY2Fudyh3aW4sICIlcyIsIEJ1ZmZlcik7CisKKyAgICBwcmludHcoIlRoaXMgaXMgYSBmb3JtYXR0ZWQgc3RyaW5nIGluIHN0ZHNjcjogJWQgJXNcbiIsIDQyLCAiaXMgaXQiKTsKKyAgICBtdmFkZHN0cigxMCwgMSwgIkVudGVyIGEgc3RyaW5nOiAiKTsKKyAgICAqQnVmZmVyID0gMDsKKyAgICBzY2FudygiJXMiLCBCdWZmZXIpOworCisgICAgaWYgKFRJR0VUU1RSKCJjdnZpcyIsICJ2cyIpICE9IDApIHsKKwl3Y2xlYXIod2luKTsKKwljdXJzX3NldCgyKTsKKwltdndhZGRzdHIod2luLCAxLCAxLCAiVGhlIGN1cnNvciBzaG91bGQgYXBwZWFyIGFzIGEgYmxvY2sgKHZpc2libGUpIik7CisJQ29udGludWUod2luKTsKKyAgICB9CisKKyAgICBpZiAoVElHRVRTVFIoImNpdmlzIiwgInZpIikgIT0gMCkgeworCXdjbGVhcih3aW4pOworCWN1cnNfc2V0KDApOworCW12d2FkZHN0cih3aW4sIDEsIDEsCisJCSAgIlRoZSBjdXJzb3Igc2hvdWxkIGhhdmUgZGlzYXBwZWFyZWQgKGludmlzaWJsZSkiKTsKKwlDb250aW51ZSh3aW4pOworICAgIH0KKworICAgIGlmIChUSUdFVFNUUigiY25vcm0iLCAidmUiKSAhPSAwKSB7CisJd2NsZWFyKHdpbik7CisJY3Vyc19zZXQoMSk7CisJbXZ3YWRkc3RyKHdpbiwgMSwgMSwgIlRoZSBjdXJzb3Igc2hvdWxkIGJlIGFuIHVuZGVybGluZSAobm9ybWFsKSIpOworCUNvbnRpbnVlKHdpbik7CisgICAgfQorI2lmZGVmIEFfQ09MT1IKKyAgICBpZiAoaGFzX2NvbG9ycygpKSB7CisJd2NsZWFyKHdpbik7CisJbXZ3YWRkc3RyKHdpbiwgMSwgMSwgIkNvbG9ycyBzaG91bGQgY2hhbmdlIGFmdGVyIHlvdSBwcmVzcyBhIGtleSIpOworCUNvbnRpbnVlKHdpbik7CisJaW5pdF9wYWlyKDEsIENPTE9SX1JFRCwgQ09MT1JfV0hJVEUpOworCXdyZWZyZXNoKHdpbik7CisgICAgfQorI2VuZGlmCisKKyAgICB3ZXJhc2Uod2luKTsKKworI2lmIEhBVkVfVEVSTU5BTUUKKyAgICBtdndhZGRzdHIod2luLCAxLCAxLCAiSW5mb3JtYXRpb24gQWJvdXQgWW91ciBUZXJtaW5hbCIpOworICAgIG12d2FkZHN0cih3aW4sIDMsIDEsIHRlcm1uYW1lKCkpOworICAgIG12d2FkZHN0cih3aW4sIDQsIDEsIGxvbmduYW1lKCkpOworICAgIGlmICh0ZXJtYXR0cnMoKSAmIEFfQkxJTkspCisJbXZ3YWRkc3RyKHdpbiwgNSwgMSwgIlRoaXMgdGVybWluYWwgc3VwcG9ydHMgYmxpbmtpbmcuIik7CisgICAgZWxzZQorCW12d2FkZHN0cih3aW4sIDUsIDEsICJUaGlzIHRlcm1pbmFsIGRvZXMgTk9UIHN1cHBvcnQgYmxpbmtpbmcuIik7CisjZW5kaWYKKworICAgIG12d2FkZG5zdHIod2luLCA3LCA1LCAiSGF2ZSBhIG5pY2UgZGF5IW9rIiwgMTYpOworICAgIHdyZWZyZXNoKHdpbik7CisKKyAgICBtdndpbm5zdHIod2luLCA3LCA1LCBCdWZmZXIsIDE4KTsKKyAgICBtdmFkZHN0cihMSU5FUyAtIDIsIDEwLCBCdWZmZXIpOworICAgIHJlZnJlc2goKTsKKyAgICBDb250aW51ZSh3aW4pOworfQorCisjaWYgZGVmaW5lZChQRENVUlNFUykgJiYgIWRlZmluZWQoWENVUlNFUykKK3N0YXRpYyB2b2lkCityZXNpemVUZXN0KFdJTkRPVyAqZHVtbXkgR0NDX1VOVVNFRCkKK3sKKyAgICBXSU5ET1cgKndpbjE7CisKKyAgICBzYXZldHR5KCk7CisKKyAgICBjbGVhcigpOworICAgIHJlZnJlc2goKTsKKyMgIGlmIGRlZmluZWQoT1MyKQorICAgIHJlc2l6ZV90ZXJtKDUwLCAxMjApOworIyAgZWxzZQorICAgIHJlc2l6ZV90ZXJtKDUwLCA4MCk7CisjICBlbmRpZgorCisgICAgd2luMSA9IG5ld3dpbigxMCwgNTAsIDE0LCAyNSk7CisgICAgaWYgKHdpbjEgPT0gTlVMTCkgeworCWVuZHdpbigpOworCXJldHVybjsKKyAgICB9CisjaWZkZWYgQV9DT0xPUgorICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbml0X3BhaXIoMywgQ09MT1JfQkxVRSwgQ09MT1JfV0hJVEUpOworCXdhdHRyc2V0KHdpbjEsIENPTE9SX1BBSVIoMykpOworICAgIH0KKyNlbmRpZgorICAgIHdjbGVhcih3aW4xKTsKKworICAgIG12d2FkZHN0cih3aW4xLCAxLCAxLCAiVGhlIHNjcmVlbiBtYXkgbm93IGhhdmUgNTAgbGluZXMiKTsKKyAgICBDb250aW51ZSh3aW4xKTsKKworICAgIHdjbGVhcih3aW4xKTsKKyAgICByZXNldHR5KCk7CisKKyAgICBtdndhZGRzdHIod2luMSwgMSwgMSwgIlRoZSBzY3JlZW4gc2hvdWxkIG5vdyBiZSByZXNldCIpOworICAgIENvbnRpbnVlKHdpbjEpOworCisgICAgZGVsd2luKHdpbjEpOworCisgICAgY2xlYXIoKTsKKyAgICByZWZyZXNoKCk7CisKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorcGFkVGVzdChXSU5ET1cgKmR1bW15IEdDQ19VTlVTRUQpCit7CisgICAgV0lORE9XICpwYWQsICpzcGFkOworCisgICAgaWYgKChwYWQgPSBuZXdwYWQoNTAsIDEwMCkpICE9IDApIHsKKwl3YXR0cm9uKHBhZCwgQV9SRVZFUlNFKTsKKwltdndhZGRzdHIocGFkLCA1LCAyLCAiVGhpcyBpcyBhIG5ldyBwYWQiKTsKKwl3YXR0cnNldChwYWQsIEFfTk9STUFMKTsKKwltdndhZGRzdHIocGFkLCA4LCAwLAorCQkgICJUaGUgZW5kIG9mIHRoaXMgbGluZSBzaG91bGQgYmUgdHJ1bmNhdGVkIGhlcmU6ZXhjZXB0ICBub3ciKTsKKwltdndhZGRzdHIocGFkLCAxMSwgMSwgIlRoaXMgbGluZSBzaG91bGQgbm90IGFwcGVhci5JdCB3aWxsIG5vdyIpOworCXdtb3ZlKHBhZCwgMTAsIDEpOworCXdjbHJ0b2VvbChwYWQpOworCW12d2FkZHN0cihwYWQsIDEwLCAxLCAiIFByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKwlwcmVmcmVzaChwYWQsIDAsIDAsIDAsIDAsIDEwLCA0NSk7CisJa2V5cGFkKHBhZCwgVFJVRSk7CisJcmF3KCk7CisJd2dldGNoKHBhZCk7CisKKwlzcGFkID0gc3VicGFkKHBhZCwgMTIsIDI1LCA2LCA1Mik7CisJbXZ3YWRkc3RyKHNwYWQsIDIsIDIsICJUaGlzIGlzIGEgbmV3IHN1YnBhZCIpOworCWJveChzcGFkLCAwLCAwKTsKKwlwcmVmcmVzaChwYWQsIDAsIDAsIDAsIDAsIDE1LCA3NSk7CisJa2V5cGFkKHBhZCwgVFJVRSk7CisJcmF3KCk7CisJd2dldGNoKHBhZCk7CisKKwltdndhZGRzdHIocGFkLCAzNSwgMiwgIlRoaXMgaXMgZGlzcGxheWVkIGF0IGxpbmUgMzUgaW4gdGhlIHBhZCIpOworCW12d2FkZHN0cihwYWQsIDQwLCAxLCAiIFByZXNzIGFueSBrZXkgdG8gY29udGludWUiKTsKKwlwcmVmcmVzaChwYWQsIDMwLCAwLCAwLCAwLCAxMCwgNDUpOworCWtleXBhZChwYWQsIFRSVUUpOworCXJhdygpOworCXdnZXRjaChwYWQpOworCisJZGVsd2luKHBhZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZGlzcGxheV9tZW51KGludCBvbGRfb3B0aW9uLCBpbnQgbmV3X29wdGlvbikKK3sKKyAgICBpbnQgaTsKKworICAgIGFzc2VydCgobmV3X29wdGlvbiA+PSAwKSAmJiAobmV3X29wdGlvbiA8IE1BWF9PUFRJT05TKSk7CisKKyAgICBhdHRyc2V0KEFfTk9STUFMKTsKKyAgICBtdmFkZHN0cigzLCAyMCwgIlBEQ3Vyc2VzIFRlc3QgUHJvZ3JhbSIpOworCisgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIE1BWF9PUFRJT05TOyBpKyspCisJbXZhZGRzdHIoNSArIGksIDI1LCBjb21tYW5kW2ldLnRleHQpOworCisgICAgaWYgKChvbGRfb3B0aW9uID49IDApICYmIChvbGRfb3B0aW9uIDwgTUFYX09QVElPTlMpKQorCW12YWRkc3RyKDUgKyBvbGRfb3B0aW9uLCAyNSwgY29tbWFuZFtvbGRfb3B0aW9uXS50ZXh0KTsKKworICAgIGF0dHJzZXQoQV9SRVZFUlNFKTsKKyAgICBtdmFkZHN0cig1ICsgbmV3X29wdGlvbiwgMjUsIGNvbW1hbmRbbmV3X29wdGlvbl0udGV4dCk7CisgICAgYXR0cnNldChBX05PUk1BTCk7CisgICAgbXZhZGRzdHIoMTMsIDMsCisJICAgICAiVXNlIFVwIGFuZCBEb3duIEFycm93cyB0byBzZWxlY3QgLSBFbnRlciB0byBydW4gLSBRIHRvIHF1aXQiKTsKKyAgICByZWZyZXNoKCk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3Rlc3RzY2Fudy5jIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0c2NhbncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTU4OWMyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC90ZXN0c2NhbncuYwpAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZ2xlYW5lZCBmcm9tIGEgd2ViLXNlYXJjaCwgc2hvd3MgYSBidWcgY29tYmluaW5nIHNjYW53IGFuZCBpbXBsaWNpdCBzY3JvbGwuCisgKiBEYXRlOiAgMTk5Ny8wMy8xNworICogRnJvbTogIGJheWVybkBtb3JwaGV1cy5jaXMueWFsZS5lZHUKKyAqCisgKiAkSWQ6IHRlc3RzY2Fudy5jLHYgMS4xMSAyMDA2LzA0LzAxIDE5OjA4OjAzIHRvbSBFeHAgJAorICovCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGxvbmcgYmFkYW5zd2VyID0gMTsKKyAgICBsb25nICpyZXNwb25zZSA9ICZiYWRhbnN3ZXI7CisKKyAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CisKKyAgICBpbml0c2NyKCk7CisgICAgc2Nyb2xsb2soc3Rkc2NyLCBUUlVFKTsKKyAgICBpZGxvayhzdGRzY3IsIFRSVUUpOworICAgIGVjaG8oKTsKKworI2lmIDAKKyAgICB0cmFjZShUUkFDRV9VUERBVEUgfCBUUkFDRV9DQUxMUyk7CisjZW5kaWYKKyAgICB3aGlsZSAoYXJnYyA+IDEpIHsKKwlpZiAoaXNkaWdpdChVQ2hhcigqYXJndlsxXSkpKQorCSAgICBtb3ZlKGF0b2koYXJndlsxXSksIDApOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1rIikpCisJICAgIGtleXBhZChzdGRzY3IsIFRSVUUpOworCWFyZ2MtLSwgYXJndisrOworICAgIH0KKworICAgIHdoaWxlIChiYWRhbnN3ZXIpIHsKKwlwcmludHcoIkVudGVyIGEgbnVtYmVyICgwIHRvIHF1aXQpOlxuIik7CisJcHJpbnR3KCItLT4gIik7CisJc2NhbncoIiUyMGxkIiwgcmVzcG9uc2UpOwkvKiB5ZXMsIGl0J3MgYSBwb2ludGVyICovCisgICAgfQorICAgIGVuZHdpbigpOworICAgIEV4aXRQcm9ncmFtKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS9uY3Vyc2VzLTUuNy90ZXN0L3RyYWNlbXVuY2ggYi9uY3Vyc2VzLTUuNy90ZXN0L3RyYWNlbXVuY2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWVhNmY0YgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QvdHJhY2VtdW5jaApAQCAtMCwwICsxLDE2MSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjICRJZDogdHJhY2VtdW5jaCx2IDEuNiAyMDA1LzAzLzEyIDIxOjQ4OjIzIHRvbSBFeHAgJAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDAyLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKKyMgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiAgIworIyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSAgICAjCisjIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvICMKKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSAgIworIyBmb2xsb3dpbmcgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gIworIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgIworIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgICAjCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMICAgICMKKyMgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSICAgICAgIworIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAgICAjCisjIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgICAgICAgICMKKyMgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lKHMpIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgICMKKyMgaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgIworIyB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgICAgICAgICAjCisjIGF1dGhvcml6YXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB0cmFjZW11bmNoIC0tIGNvbXBhY3RpZnkgbmN1cnNlcyB0cmFjZSBsb2dzCisjCisjIFRoZSBlcnJvciBsb2dzIHByb2R1Y2VkIGJ5IG5jdXJzZXMgd2l0aCB0cmFjaW5nIGVuYWJsZWQgY2FuIGJlIHZlcnkgdGVkaW91cworIyB0byB3YWRlIHRocm91Z2guICBUaGlzIHNjcmlwdCBoZWxwcyBieSBjb21wYWN0aW5nIHJ1bnMgb2YgbG9nIGxpbmVzIHRoYXQKKyMgY2FuIGJlIGNvbnZlbmllbnRseSBleHByZXNzZWQgYXMgaGlnaGVyLWxldmVsIG9wZXJhdGlvbnMuCit1c2Ugc3RyaWN0OworCitvdXIgJHB1dGF0dHI9IlB1dEF0dHJDaGFyXFwoe3sgJyguKScgPSAwWzAtN10rIH19XFwpIGF0IFxcKChbMC05XSspLCAoWzAtOV0rKVxcKSI7CitvdXIgJHdhZGRuc3RyPSJ3YWRkbnN0clxcKDB4KFswLTlhLWZdKyksXCIoW15cIl0rKVwiLFswLTldK1xcKSBjYWxsZWQge0FfTk9STUFMfSI7CisKK291ciAkd2luX251bXM9MDsKK291ciAkY3Vyc2NyPSIiOworb3VyICRuZXdzY3I9IiI7CitvdXIgJHN0ZHNjcj0iIjsKK291ciBAd2luX2FkZHI7CisKK3N1YiB0cmFuc2FkZHIKK3sKKyAgICBteSAkbjsKKyAgICBteSAkYXJnID0gJF9bMF07CisKKyAgICAkYXJnID1+IHMvJGN1cnNjci9jdXJzY3IvZyBpZiAoJGN1cnNjcik7CisgICAgJGFyZyA9fiBzLyRuZXdzY3IvbmV3c2NyL2cgaWYgKCRuZXdzY3IpOworICAgICRhcmcgPX4gcy8kc3Rkc2NyL3N0ZHNjci9nIGlmICgkc3Rkc2NyKTsKKyAgICBmb3IgJG4gKDAuLiQjd2luX2FkZHIpIHsKKwkkYXJnID1+IHMvJHdpbl9hZGRyWyRuXS93aW5kb3ckbi9nIGlmICR3aW5fYWRkclskbl07CisgICAgfQorCisgICAgcmV0dXJuICRhcmc7Cit9CisKK3doaWxlICg8U1RESU4+KQoreworCW15ICRhZGRyOworCW15ICRuOworCW15ICRhd2FpdGluZzsKKworQ0xBU1NJRlk6IHsKKwkjIFRyYW5zZm9ybSB3aW5kb3cgcG9pbnRlciBhZGRyZXNzZXMgc28gaXQncyBlYXNpZXIgdG8gY29tcGFyZSBsb2dzCisJJGF3YWl0aW5nID0gImN1cnNjciIgaWYgKCRfID1+IC9jcmVhdGluZyBjdXJzY3IvKTsKKwkkYXdhaXRpbmcgPSAibmV3c2NyIiBpZiAoJF8gPX4gL2NyZWF0aW5nIG5ld3Njci8pOworCSRhd2FpdGluZyA9ICJzdGRzY3IiIGlmICgkXyA9fiAvY3JlYXRpbmcgc3Rkc2NyLyk7CisJaWYgKCRfID1+IC9eY3JlYXRlIDp3aW5kb3cgMHgoWzAtOWEtZl0rKS8pIHsKKwkgICAgJGFkZHIgPSAiMHgkMSI7CisJICAgIGlmICgkYXdhaXRpbmcgZXEgImN1cnNjciIpIHsKKwkJJGN1cnNjciA9ICRhZGRyOworCSAgICB9IGVsc2lmICgkYXdhaXRpbmcgZXEgIm5ld3NjciIpIHsKKwkJJG5ld3NjciA9ICRhZGRyOworCSAgICB9IGVsc2lmICgkYXdhaXRpbmcgZXEgInN0ZHNjciIpIHsKKwkJJHN0ZHNjciA9ICRhZGRyOworCSAgICB9IGVsc2UgeworCQkkd2luX2FkZHJbJHdpbl9udW1zXSA9ICRhZGRyOworCQkkd2luX251bXMgPSAkd2luX251bXMgKyAxOworCSAgICB9CisJICAgICRhd2FpdGluZyA9ICIiOworCX0gZWxzaWYgKCRfID1+IC9eXC5cLlwuZGVsZXRlZCB3aW49MHgoWzAtOWEtZl0rKS8pIHsKKwkgICAgJGFkZHIgPSAiMHgkMSI7CisJICAgICRfID0gJnRyYW5zYWRkcigkXyk7CisJICAgIGlmICgkYWRkciBlcSAkY3Vyc2NyKSB7CisJCSRjdXJzY3IgPSAiIjsKKwkgICAgfSBlbHNpZiAoJGFkZHIgZXEgJG5ld3NjcikgeworCQkkbmV3c2NyID0gIiI7CisJICAgIH0gZWxzaWYgKCRhZGRyIGVxICRzdGRzY3IpIHsKKwkJJHN0ZHNjciA9ICIiOworCSAgICB9IGVsc2UgeworCQlmb3IgJG4gKDAuLiQjd2luX2FkZHIpIHsKKwkJICAgIGlmICgkd2luX2FkZHJbJG5dIGVxICRhZGRyKSB7CisJCQkkd2luX2FkZHJbJG5dID0gIiI7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKworCSMgQ29tcGFjdGlmeSBydW5zIG9mIFB1dEF0dHJDaGFyIGNhbGxzIChUUl9DSEFSUFVUKQorCWlmICgkXyA9fiAvJHB1dGF0dHIvKQorCXsKKwkJbXkgJHB1dGF0dHJfY2hhcnMgPSAkMTsKKwkJbXkgJHN0YXJ0eSA9ICQyOworCQlteSAkc3RhcnR4ID0gJDM7CisJCXdoaWxlICg8U1RESU4+KQorCQl7CisJCQlpZiAoJF8gPX4gLyRwdXRhdHRyLykgeworCQkJCSRwdXRhdHRyX2NoYXJzIC49ICQxOworCQkJfSBlbHNlIHsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJCXByaW50ICJSVU4gb2YgUHV0QXR0ckNoYXIoKXM6IFwiJHB1dGF0dHJfY2hhcnNcIiBmcm9tICR7c3RhcnR5fSwgJHtzdGFydHh9XG4iOworCQlyZWRvIENMQVNTSUZZOworCX0KKworCSMgQ29tcGFjdGlmeSBydW5zIG9mIHdhZGRuc3RyIGNhbGxzIChUUl9DQUxMUykKKwlpZiAoJF8gPX4gLyR3YWRkbnN0ci8pCisJeworCQlteSAkd2FkZG5zdHJfY2hhcnMgPSAkMjsKKwkJbXkgJHdpbmFkZHIgPSAkMTsKKwkJd2hpbGUgKDxTVERJTj4pCisJCXsKKwkJCWlmICgkXyA9fiAvJHdhZGRuc3RyLyAmJiAkMSBlcSAkd2luYWRkcikgeworCQkJCSR3YWRkbnN0cl9jaGFycyAuPSAkMjsKKwkJCX0gZWxzZSB7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQlteSAkd2luYWRkc3RyID0gJnRyYW5zYWRkcigkd2luYWRkcik7CisJCXByaW50ICJSVU4gb2Ygd2FkZG5zdHIoKXM6ICR3aW5hZGRyLCBcIiR3YWRkbnN0cl9jaGFyc1wiXG4iOworCQlyZWRvIENMQVNTSUZZOworCX0KKworCSMgTW9yZSB0cmFuc2Zvcm1hdGlvbnMgY2FuIGdvIGhlcmUKKworCSMgUmVwZWF0ZWQgcnVucyBvZiBhbnl0aGluZworCW15ICRhbnlsaW5lID0gJnRyYW5zYWRkcigkXyk7CisJbXkgJHJlcGVhdGNvdW50ID0gMTsKKwl3aGlsZSAoPFNURElOPikgeworCSAgICBpZiAoJnRyYW5zYWRkcigkXykgZXEgJGFueWxpbmUpIHsKKwkJJHJlcGVhdGNvdW50Kys7CisJICAgIH0gZWxzZSB7CisJCWxhc3Q7CisJICAgIH0KKwl9CisJaWYgKCRyZXBlYXRjb3VudCA+IDEpIHsKKwkJcHJpbnQgIiR7cmVwZWF0Y291bnR9IFJFUEVBVFMgT0YgJGFueWxpbmUiOworCX0gZWxzZSB7CisJCXByaW50ICRhbnlsaW5lCisJfQorCXJlZG8gQ0xBU1NJRlkgaWYgJF87CisKKwl9ICMgOkNMQVNTSUZZCit9CisKKyMgdHJhY2VtdW5jaCBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3Qvdmlldy5jIGIvbmN1cnNlcy01LjcvdGVzdC92aWV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyZDcyZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3Qvdmlldy5jCkBAIC0wLDAgKzEsNTczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgKgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgICoKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgICAgICAqCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAgICAgKgorICogZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgICoKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAgICAqCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkICAqCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTICAqCisgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GICAgICAgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgICAqCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgICAgKgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SICAgICoKKyAqIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlIGNvcHlyaWdodCAgICoKKyAqIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlICAgICAqCisgKiBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gICAgICAgKgorICogYXV0aG9yaXphdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIHZpZXcuYyAtLSBhIHNpbGx5IGxpdHRsZSB2aWV3ZXIgcHJvZ3JhbQorICoKKyAqIHdyaXR0ZW4gYnkgRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+IERlY2VtYmVyIDE5OTQKKyAqIHRvIHRlc3QgdGhlIHNjcm9sbGluZyBjb2RlIGluIG5jdXJzZXMuCisgKgorICogbW9kaWZpZWQgYnkgVGhvbWFzIERpY2tleSA8ZGlja2V5QGNsYXJrLm5ldD4gSnVseSAxOTk1IHRvIGRlbW9uc3RyYXRlCisgKiB0aGUgdXNlIG9mICdyZXNpemV0ZXJtKCknLCBhbmQgTWF5IDIwMDAgdG8gaWxsdXN0cmF0ZSB3aWRlLWNoYXJhY3RlcgorICogaGFuZGxpbmcuCisgKgorICogVGFrZXMgYSBmaWxlbmFtZSBhcmd1bWVudC4gIEl0J3MgYSBzaW1wbGUgZmlsZS12aWV3ZXIgd2l0aCB2YXJpb3VzCisgKiBzY3JvbGwtdXAgYW5kIHNjcm9sbC1kb3duIGNvbW1hbmRzLgorICoKKyAqIG4JLS0gc2Nyb2xsIG9uZSBsaW5lIGZvcndhcmQKKyAqIHAJLS0gc2Nyb2xsIG9uZSBsaW5lIGJhY2sKKyAqCisgKiBFaXRoZXIgY29tbWFuZCBhY2NlcHRzIGEgbnVtZXJpYyBwcmVmaXggaW50ZXJwcmV0ZWQgYXMgYSByZXBlYXQgY291bnQuCisgKiBUaHVzLCB0eXBpbmcgYDVuJyBzaG91bGQgc2Nyb2xsIGZvcndhcmQgNSBsaW5lcyBpbiB0aGUgZmlsZS4KKyAqCisgKiBUaGUgd2F5IHlvdSBjYW4gdGVsbCB0aGlzIGlzIHdvcmtpbmcgT0sgaXMgdGhhdCwgaW4gdGhlIHRyYWNlIGZpbGUsCisgKiB0aGVyZSBzaG91bGQgYmUgb25lIHNjcm9sbCBvcGVyYXRpb24gcGx1cyBhIHNtYWxsIG51bWJlciBvZiBsaW5lCisgKiB1cGRhdGVzLCBhcyBvcHBvc2VkIHRvIGEgd2hvbGUtcGFnZSB1cGRhdGUuICBUaGlzIG1lYW5zIHRoZSBwaHlzaWNhbAorICogc2Nyb2xsIG9wZXJhdGlvbiB3b3JrZWQsIGFuZCB0aGUgcmVmcmVzaCgpIGNvZGUgb25seSBoYWQgdG8gZG8gYQorICogcGFydGlhbCByZXBhaW50LgorICoKKyAqICRJZDogdmlldy5jLHYgMS42OSAyMDA4LzA5LzA2IDIyOjEwOjUwIHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI3VuZGVmIENUUkwJCQkvKiBjb25mbGljdCBvbiBBSVggNS4yIHdpdGggPHN5cy9pb2N0bC5oPiAqLworCisjaWYgSEFWRV9URVJNSU9TX0gKKyMgaW5jbHVkZSA8dGVybWlvcy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c2d0dHkuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoc3VuKSB8fCAhSEFWRV9URVJNSU9TX0gKKyMgaWYgSEFWRV9TWVNfSU9DVExfSAorIyAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBteV9wYWlyIDEKKworLyogVGhpcyBpcyBuZWVkZWQgdG8gY29tcGlsZSAnc3RydWN0IHdpbnNpemUnICovCisjaWYgTkVFRF9QVEVNX0gKKyNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CisjaW5jbHVkZSA8c3lzL3B0ZW0uaD4KKyNlbmRpZgorCisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKyNpZiBIQVZFX01CVE9XQyAmJiBIQVZFX01CTEVOCisjZGVmaW5lIHJlc2V0X21ieXRlcyhzdGF0ZSkgbWJsZW4oTlVMTCwgMCksIG1idG93YyhOVUxMLCBOVUxMLCAwKQorI2RlZmluZSBjb3VudF9tYnl0ZXMoYnVmZmVyLGxlbmd0aCxzdGF0ZSkgbWJsZW4oYnVmZmVyLGxlbmd0aCkKKyNkZWZpbmUgY2hlY2tfbWJ5dGVzKHdjaCxidWZmZXIsbGVuZ3RoLHN0YXRlKSBcCisJKGludCkgbWJ0b3djKCZ3Y2gsIGJ1ZmZlciwgbGVuZ3RoKQorI2RlZmluZSBzdGF0ZV91bnVzZWQKKyNlbGlmIEhBVkVfTUJSVE9XQyAmJiBIQVZFX01CUkxFTgorI2RlZmluZSByZXNldF9tYnl0ZXMoc3RhdGUpIGluaXRfbWIoc3RhdGUpCisjZGVmaW5lIGNvdW50X21ieXRlcyhidWZmZXIsbGVuZ3RoLHN0YXRlKSBtYnJsZW4oYnVmZmVyLGxlbmd0aCwmc3RhdGUpCisjZGVmaW5lIGNoZWNrX21ieXRlcyh3Y2gsYnVmZmVyLGxlbmd0aCxzdGF0ZSkgXAorCShpbnQpIG1icnRvd2MoJndjaCwgYnVmZmVyLCBsZW5ndGgsICZzdGF0ZSkKKyNlbHNlCittYWtlIGFuIGVycm9yCisjZW5kaWYKKyNlbmRpZgkJCQkvKiBVU0VfV0lERUNfU1VQUE9SVCAqLworCitzdGF0aWMgUkVUU0lHVFlQRSBmaW5pc2goaW50IHNpZykgR0NDX05PUkVUVVJOOworc3RhdGljIHZvaWQgc2hvd19hbGwoY29uc3QgY2hhciAqdGFnKTsKKworI2lmIGRlZmluZWQoU0lHV0lOQ0gpICYmIGRlZmluZWQoVElPQ0dXSU5TWikgJiYgSEFWRV9SRVNJWkVfVEVSTQorI2RlZmluZSBDQU5fUkVTSVpFIDEKKyNlbHNlCisjZGVmaW5lIENBTl9SRVNJWkUgMAorI2VuZGlmCisKKyNpZiBDQU5fUkVTSVpFCitzdGF0aWMgUkVUU0lHVFlQRSBhZGp1c3QoaW50IHNpZyk7CitzdGF0aWMgaW50IGludGVycnVwdGVkOworI2VuZGlmCisKK3N0YXRpYyBib29sIHdhaXRpbmcgPSBGQUxTRTsKK3N0YXRpYyBpbnQgc2hpZnQgPSAwOworc3RhdGljIGJvb2wgdHJ5X2NvbG9yID0gRkFMU0U7CisKK3N0YXRpYyBjaGFyICpmbmFtZTsKK3N0YXRpYyBOQ1VSU0VTX0NIX1QgKip2ZWNfbGluZXM7CitzdGF0aWMgTkNVUlNFU19DSF9UICoqbHB0cjsKK3N0YXRpYyBpbnQgbnVtX2xpbmVzOworCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqbXNnW10gPQorICAgIHsKKwkiVXNhZ2U6IHZpZXcgW29wdGlvbnNdIGZpbGUiCisJLCIiCisJLCJPcHRpb25zOiIKKwksIiAtYyAgICAgICB1c2UgY29sb3IgaWYgdGVybWluYWwgc3VwcG9ydHMgaXQiCisJLCIgLWkgICAgICAgaWdub3JlIElOVCwgUVVJVCwgVEVSTSBzaWduYWxzIgorCSwiIC1uIE5VTSAgIHNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgKGRlZmF1bHQgMTAwMCkiCisjaWYgZGVmaW5lZChLRVlfUkVTSVpFKQorCSwiIC1yICAgICAgIHVzZSBvbGQtc3R5bGUgc2lnd2luY2ggaGFuZGxlciByYXRoZXIgdGhhbiBLRVlfUkVTSVpFIgorI2VuZGlmCisjaWZkZWYgVFJBQ0UKKwksIiAtdCAgICAgICB0cmFjZSBzY3JlZW4gdXBkYXRlcyIKKwksIiAtVCBOVU0gICBzcGVjaWZ5IHRyYWNlIG1hc2siCisjZW5kaWYKKyAgICB9OworICAgIHNpemVfdCBuOworICAgIGZvciAobiA9IDA7IG4gPCBTSVpFT0YobXNnKTsgbisrKQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ1tuXSk7CisgICAgRXhpdFByb2dyYW0oRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIGludAorY2hfbGVuKE5DVVJTRVNfQ0hfVCAqIHNyYykKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorI2VuZGlmCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIHdoaWxlIChnZXRjY2hhcihzcmMrKywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkgPiAwKQorCXJlc3VsdCsrOworI2Vsc2UKKyAgICB3aGlsZSAoKnNyYysrKQorCXJlc3VsdCsrOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgY2h0eXBlJ3MuICBJZiBVVEYtOCBtb2RlIGlzCisgKiBhY3RpdmUsIHRyYW5zbGF0ZSB0aGUgc3RyaW5nIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMgTkNVUlNFU19DSF9UICoKK2NoX2R1cChjaGFyICpzcmMpCit7CisgICAgdW5zaWduZWQgbGVuID0gc3RybGVuKHNyYyk7CisgICAgTkNVUlNFU19DSF9UICpkc3QgPSB0eXBlTWFsbG9jKE5DVVJTRVNfQ0hfVCwgbGVuICsgMSk7CisgICAgdW5zaWduZWQgaiwgazsKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIHdjaGFyX3Qgd3N0cltDQ0hBUldfTUFYICsgMV07CisgICAgd2NoYXJfdCB3Y2g7CisgICAgaW50IGwgPSAwOworICAgIHNpemVfdCByYzsKKyAgICBpbnQgd2lkdGg7CisjaWZuZGVmIHN0YXRlX3VudXNlZAorICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyNlbmRpZgorI2VuZGlmIC8qIFVTRV9XSURFQ19TVVBQT1JUICovCisKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorICAgIHJlc2V0X21ieXRlcyhzdGF0ZSk7CisjZW5kaWYKKyAgICBmb3IgKGogPSBrID0gMDsgaiA8IGxlbjsgaisrKSB7CisjaWYgVVNFX1dJREVDX1NVUFBPUlQKKwlyYyA9IGNoZWNrX21ieXRlcyh3Y2gsIHNyYyArIGosIGxlbiAtIGosIHN0YXRlKTsKKwlpZiAocmMgPT0gKHNpemVfdCkgLTEgfHwgcmMgPT0gKHNpemVfdCkgLTIpCisJICAgIGJyZWFrOworCWogKz0gcmMgLSAxOworCWlmICgod2lkdGggPSB3Y3dpZHRoKHdjaCkpIDwgMCkKKwkgICAgYnJlYWs7CisJaWYgKCh3aWR0aCA+IDAgJiYgbCA+IDApIHx8IGwgPT0gQ0NIQVJXX01BWCkgeworCSAgICB3c3RyW2xdID0gTCdcMCc7CisJICAgIGwgPSAwOworCSAgICBpZiAoc2V0Y2NoYXIoZHN0ICsgaywgd3N0ciwgMCwgMCwgTlVMTCkgIT0gT0spCisJCWJyZWFrOworCSAgICArK2s7CisJfQorCWlmICh3aWR0aCA9PSAwICYmIGwgPT0gMCkKKwkgICAgd3N0cltsKytdID0gTCcgJzsKKwl3c3RyW2wrK10gPSB3Y2g7CisjZWxzZQorCWRzdFtrKytdID0gc3JjW2pdOworI2VuZGlmCisgICAgfQorI2lmIFVTRV9XSURFQ19TVVBQT1JUCisgICAgaWYgKGwgPiAwKSB7CisJd3N0cltsXSA9IEwnXDAnOworCWlmIChzZXRjY2hhcihkc3QgKyBrLCB3c3RyLCAwLCAwLCBOVUxMKSA9PSBPSykKKwkgICAgKytrOworICAgIH0KKyAgICB3c3RyWzBdID0gTCdcMCc7CisgICAgc2V0Y2NoYXIoZHN0ICsgaywgd3N0ciwgMCwgMCwgTlVMTCk7CisjZWxzZQorICAgIGRzdFtrXSA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gZHN0OworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgTUFYTElORVMgPSAxMDAwOworICAgIEZJTEUgKmZwOworICAgIGNoYXIgYnVmW0JVRlNJWl07CisgICAgaW50IGk7CisgICAgaW50IG15X2RlbGF5ID0gMDsKKyAgICBOQ1VSU0VTX0NIX1QgKipvbHB0cjsKKyAgICBpbnQgdmFsdWUgPSAwOworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworICAgIGJvb2wgZ290X251bWJlciA9IEZBTFNFOworI2lmIENBTl9SRVNJWkUKKyAgICBib29sIG5vbnBvc2l4X3Jlc2l6ZSA9IEZBTFNFOworI2VuZGlmCisgICAgY29uc3QgY2hhciAqbXlfbGFiZWwgPSAiSW5wdXQiOworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisjaWZuZGVmIE5DVVJTRVNfVkVSU0lPTgorICAgIC8qCisgICAgICogV2Uga25vdyBuY3Vyc2VzIHdpbGwgY2F0Y2ggU0lHSU5UIGlmIHdlIGRvbid0IGVzdGFibGlzaCBvdXIgb3duIGhhbmRsZXIuCisgICAgICogT3RoZXIgdmVyc2lvbnMgb2YgY3Vyc2VzIG1heS9tYXkgbm90IGNhdGNoIGl0LgorICAgICAqLworICAgICh2b2lkKSBzaWduYWwoU0lHSU5ULCBmaW5pc2gpOwkvKiBhcnJhbmdlIGludGVycnVwdHMgdG8gdGVybWluYXRlICovCisjZW5kaWYKKworICAgIHdoaWxlICgoaSA9IGdldG9wdChhcmdjLCBhcmd2LCAiY2luOnJ0VDoiKSkgIT0gLTEpIHsKKwlzd2l0Y2ggKGkpIHsKKwljYXNlICdjJzoKKwkgICAgdHJ5X2NvbG9yID0gVFJVRTsKKwkgICAgYnJlYWs7CisJY2FzZSAnaSc6CisJICAgIENBVENIQUxMKFNJR19JR04pOworCSAgICBicmVhazsKKwljYXNlICduJzoKKwkgICAgaWYgKChNQVhMSU5FUyA9IGF0b2kob3B0YXJnKSkgPCAxIHx8CisJCShNQVhMSU5FUyArIDIpIDw9IDEpCisJCXVzYWdlKCk7CisJICAgIGJyZWFrOworI2lmIENBTl9SRVNJWkUKKwljYXNlICdyJzoKKwkgICAgbm9ucG9zaXhfcmVzaXplID0gVFJVRTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBUUkFDRQorCWNhc2UgJ1QnOgorCSAgICB0cmFjZSgodW5zaWduZWQpIGF0b2kob3B0YXJnKSk7CisJICAgIGJyZWFrOworCWNhc2UgJ3QnOgorCSAgICB0cmFjZShUUkFDRV9DQUxMUyk7CisJICAgIGJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkgICAgdXNhZ2UoKTsKKwl9CisgICAgfQorICAgIGlmIChvcHRpbmQgKyAxICE9IGFyZ2MpCisJdXNhZ2UoKTsKKworICAgIGlmICgodmVjX2xpbmVzID0gdHlwZU1hbGxvYyhOQ1VSU0VTX0NIX1QgKiwgTUFYTElORVMgKyAyKSkgPT0gMCkKKwl1c2FnZSgpOworCisgICAgZm5hbWUgPSBhcmd2W29wdGluZF07CisgICAgaWYgKChmcCA9IGZvcGVuKGZuYW1lLCAiciIpKSA9PSAwKSB7CisJcGVycm9yKGZuYW1lKTsKKwlFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworICAgIH0KKyNpZiBDQU5fUkVTSVpFCisgICAgaWYgKG5vbnBvc2l4X3Jlc2l6ZSkKKwkodm9pZCkgc2lnbmFsKFNJR1dJTkNILCBhZGp1c3QpOwkvKiBhcnJhbmdlIGludGVycnVwdHMgdG8gcmVzaXplICovCisjZW5kaWYKKworICAgIC8qIHNsdXJwIHRoZSBmaWxlICovCisgICAgZm9yIChscHRyID0gJnZlY19saW5lc1swXTsgKGxwdHIgLSB2ZWNfbGluZXMpIDwgTUFYTElORVM7IGxwdHIrKykgeworCWNoYXIgdGVtcFtCVUZTSVpdLCAqcywgKmQ7CisJaW50IGNvbDsKKworCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgPT0gMCkKKwkgICAgYnJlYWs7CisKKwkvKiBjb252ZXJ0IHRhYnMgc28gdGhhdCBzaGlmdCB3aWxsIHdvcmsgcHJvcGVybHkgKi8KKwlmb3IgKHMgPSBidWYsIGQgPSB0ZW1wLCBjb2wgPSAwOyAoKmQgPSAqcykgIT0gJ1wwJzsgcysrKSB7CisJICAgIGlmICgqZCA9PSAnXG4nKSB7CisJCSpkID0gJ1wwJzsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSBpZiAoKmQgPT0gJ1x0JykgeworCQljb2wgPSAoY29sIHwgNykgKyAxOworCQl3aGlsZSAoKGQgLSB0ZW1wKSAhPSBjb2wpCisJCSAgICAqZCsrID0gJyAnOworCSAgICB9IGVsc2UKKyNpZiBVU0VfV0lERUNfU1VQUE9SVAorCQljb2wrKywgZCsrOworI2Vsc2UKKwkgICAgaWYgKGlzcHJpbnQoVUNoYXIoKmQpKSkgeworCQljb2wrKzsKKwkJZCsrOworCSAgICB9IGVsc2UgeworCQlzcHJpbnRmKGQsICJcXCUwM28iLCBVQ2hhcigqcykpOworCQlkICs9IHN0cmxlbihkKTsKKwkJY29sID0gKGQgLSB0ZW1wKTsKKwkgICAgfQorI2VuZGlmCisJfQorCSpscHRyID0gY2hfZHVwKHRlbXApOworICAgIH0KKyAgICAodm9pZCkgZmNsb3NlKGZwKTsKKyAgICBudW1fbGluZXMgPSBscHRyIC0gdmVjX2xpbmVzOworCisgICAgKHZvaWQpIGluaXRzY3IoKTsJCS8qIGluaXRpYWxpemUgdGhlIGN1cnNlcyBsaWJyYXJ5ICovCisgICAga2V5cGFkKHN0ZHNjciwgVFJVRSk7CS8qIGVuYWJsZSBrZXlib2FyZCBtYXBwaW5nICovCisgICAgKHZvaWQpIG5vbmwoKTsJCS8qIHRlbGwgY3Vyc2VzIG5vdCB0byBkbyBOTC0+Q1IvTkwgb24gb3V0cHV0ICovCisgICAgKHZvaWQpIGNicmVhaygpOwkJLyogdGFrZSBpbnB1dCBjaGFycyBvbmUgYXQgYSB0aW1lLCBubyB3YWl0IGZvciBcbiAqLworICAgICh2b2lkKSBub2VjaG8oKTsJCS8qIGRvbid0IGVjaG8gaW5wdXQgKi8KKyAgICBub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisgICAgaWRsb2soc3Rkc2NyLCBUUlVFKTsJLyogYWxsb3cgdXNlIG9mIGluc2VydC9kZWxldGUgbGluZSAqLworCisgICAgaWYgKHRyeV9jb2xvcikgeworCWlmIChoYXNfY29sb3JzKCkpIHsKKwkgICAgc3RhcnRfY29sb3IoKTsKKwkgICAgaW5pdF9wYWlyKG15X3BhaXIsIENPTE9SX1dISVRFLCBDT0xPUl9CTFVFKTsKKwkgICAgYmtnZChDT0xPUl9QQUlSKG15X3BhaXIpKTsKKwl9IGVsc2UgeworCSAgICB0cnlfY29sb3IgPSBGQUxTRTsKKwl9CisgICAgfQorCisgICAgbHB0ciA9IHZlY19saW5lczsKKyAgICB3aGlsZSAoIWRvbmUpIHsKKwlpbnQgbiwgYzsKKworCWlmICghZ290X251bWJlcikKKwkgICAgc2hvd19hbGwobXlfbGFiZWwpOworCisJbiA9IDA7CisJZm9yICg7OykgeworI2lmIENBTl9SRVNJWkUKKwkgICAgaWYgKGludGVycnVwdGVkKSB7CisJCWFkanVzdCgwKTsKKwkJbXlfbGFiZWwgPSAiaW50ZXJydXB0IjsKKwkgICAgfQorI2VuZGlmCisJICAgIHdhaXRpbmcgPSBUUlVFOworCSAgICBjID0gZ2V0Y2goKTsKKwkgICAgd2FpdGluZyA9IEZBTFNFOworCSAgICBpZiAoKGMgPCAxMjcpICYmIGlzZGlnaXQoYykpIHsKKwkJaWYgKCFnb3RfbnVtYmVyKSB7CisJCSAgICBtdnByaW50dygwLCAwLCAiQ291bnQ6ICIpOworCQkgICAgY2xydG9lb2woKTsKKwkJfQorCQlhZGRjaChVQ2hhcihjKSk7CisJCXZhbHVlID0gMTAgKiB2YWx1ZSArIChjIC0gJzAnKTsKKwkJZ290X251bWJlciA9IFRSVUU7CisJICAgIH0gZWxzZQorCQlicmVhazsKKwl9CisJaWYgKGdvdF9udW1iZXIgJiYgdmFsdWUpIHsKKwkgICAgbiA9IHZhbHVlOworCX0gZWxzZSB7CisJICAgIG4gPSAxOworCX0KKworCWlmIChjICE9IEVSUikKKwkgICAgbXlfbGFiZWwgPSBrZXluYW1lKGMpOworCXN3aXRjaCAoYykgeworCWNhc2UgS0VZX0RPV046CisJY2FzZSAnbic6CisJICAgIG9scHRyID0gbHB0cjsKKwkgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKChscHRyIC0gdmVjX2xpbmVzKSA8IChudW1fbGluZXMgLSBMSU5FUyArIDEpKQorCQkgICAgbHB0cisrOworCQllbHNlCisJCSAgICBicmVhazsKKwkgICAgc2NybChscHRyIC0gb2xwdHIpOworCSAgICBicmVhazsKKworCWNhc2UgS0VZX1VQOgorCWNhc2UgJ3AnOgorCSAgICBvbHB0ciA9IGxwdHI7CisJICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWlmIChscHRyID4gdmVjX2xpbmVzKQorCQkgICAgbHB0ci0tOworCQllbHNlCisJCSAgICBicmVhazsKKwkgICAgc2NybChscHRyIC0gb2xwdHIpOworCSAgICBicmVhazsKKworCWNhc2UgJ2gnOgorCWNhc2UgS0VZX0hPTUU6CisJICAgIGxwdHIgPSB2ZWNfbGluZXM7CisJICAgIGJyZWFrOworCisJY2FzZSAnZSc6CisJY2FzZSBLRVlfRU5EOgorCSAgICBpZiAobnVtX2xpbmVzID4gTElORVMpCisJCWxwdHIgPSB2ZWNfbGluZXMgKyBudW1fbGluZXMgLSBMSU5FUyArIDE7CisJICAgIGVsc2UKKwkJbHB0ciA9IHZlY19saW5lczsKKwkgICAgYnJlYWs7CisKKwljYXNlICdyJzoKKwljYXNlIEtFWV9SSUdIVDoKKwkgICAgc2hpZnQgKz0gbjsKKwkgICAgYnJlYWs7CisKKwljYXNlICdsJzoKKwljYXNlIEtFWV9MRUZUOgorCSAgICBzaGlmdCAtPSBuOworCSAgICBpZiAoc2hpZnQgPCAwKSB7CisJCXNoaWZ0ID0gMDsKKwkJYmVlcCgpOworCSAgICB9CisJICAgIGJyZWFrOworCisJY2FzZSAncSc6CisJICAgIGRvbmUgPSBUUlVFOworCSAgICBicmVhazsKKworI2lmZGVmIEtFWV9SRVNJWkUKKwljYXNlIEtFWV9SRVNJWkU6CS8qIGlnbm9yZSB0aGlzOyBuY3Vyc2VzIHdpbGwgcmVwYWludCAqLworCSAgICBicmVhazsKKyNlbmRpZgorCWNhc2UgJ3MnOgorCSAgICBpZiAoZ290X251bWJlcikgeworCQloYWxmZGVsYXkobXlfZGVsYXkgPSBuKTsKKwkgICAgfSBlbHNlIHsKKwkJbm9kZWxheShzdGRzY3IsIEZBTFNFKTsKKwkJbXlfZGVsYXkgPSAtMTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlICcgJzoKKwkgICAgbm9kZWxheShzdGRzY3IsIFRSVUUpOworCSAgICBteV9kZWxheSA9IDA7CisJICAgIGJyZWFrOworCWNhc2UgRVJSOgorCSAgICBpZiAoIW15X2RlbGF5KQorCQluYXBtcyg1MCk7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGJlZXAoKTsKKwkgICAgYnJlYWs7CisJfQorCWlmIChjID49IEtFWV9NSU4gfHwgKGMgPiAwICYmICFpc2RpZ2l0KGMpKSkgeworCSAgICBnb3RfbnVtYmVyID0gRkFMU0U7CisJICAgIHZhbHVlID0gMDsKKwl9CisgICAgfQorCisgICAgZmluaXNoKDApOwkJCS8qIHdlJ3JlIGRvbmUgKi8KK30KKworc3RhdGljIFJFVFNJR1RZUEUKK2ZpbmlzaChpbnQgc2lnKQoreworICAgIGVuZHdpbigpOworI2lmIE5PX0xFQUtTCisgICAgaWYgKHZlY19saW5lcyAhPSAwKSB7CisJaW50IG47CisJZm9yIChuID0gMDsgbiA8IG51bV9saW5lczsgKytuKSB7CisJICAgIGZyZWUodmVjX2xpbmVzW25dKTsKKwl9CisJZnJlZSh2ZWNfbGluZXMpOworICAgIH0KKyNlbmRpZgorICAgIEV4aXRQcm9ncmFtKHNpZyAhPSAwID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTKTsKK30KKworI2lmIENBTl9SRVNJWkUKKy8qCisgKiBUaGlzIHVzZXMgZnVuY3Rpb25zIHRoYXQgYXJlICJ1bnNhZmUiLCBidXQgaXQgc2VlbXMgdG8gd29yayBvbiBTdW5PUyBhbmQKKyAqIExpbnV4LiAgVXN1YWxseTogIHRoZSAidW5zYWZlIiByZWZlcnMgdG8gdGhlIGZ1bmN0aW9ucyB0aGF0IFBPU0lYIGxpc3RzCisgKiB3aGljaCBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4gIFRob3NlIGRvIG5vdCBpbmNsdWRlIGJ1ZmZlcmVkCisgKiBJL08sIHdoaWNoIGlzIHVzZWQgZm9yIGluc3RhbmNlIGluIHdyZWZyZXNoKCkuICBUbyBiZSByZWFsbHkgcG9ydGFibGUsIHlvdQorICogc2hvdWxkIHVzZSB0aGUgS0VZX1JFU0laRSByZXR1cm4gKHdoaWNoIHJlbGllcyBvbiBuY3Vyc2VzJyBzaWd3aW5jaAorICogaGFuZGxlcikuCisgKgorICogVGhlICd3cmVmcmVzaChjdXJzY3IpJyBpcyBuZWVkZWQgdG8gZm9yY2UgdGhlIHJlZnJlc2ggdG8gc3RhcnQgZnJvbSB0aGUgdG9wCisgKiBvZiB0aGUgc2NyZWVuIC0tIHNvbWUgeHRlcm1zIG1hbmdsZSB0aGUgYml0bWFwIHdoaWxlIHJlc2l6aW5nLgorICovCitzdGF0aWMgUkVUU0lHVFlQRQorYWRqdXN0KGludCBzaWcpCit7CisgICAgaWYgKHdhaXRpbmcgfHwgc2lnID09IDApIHsKKwlzdHJ1Y3Qgd2luc2l6ZSBzaXplOworCisJaWYgKGlvY3RsKGZpbGVubyhzdGRvdXQpLCBUSU9DR1dJTlNaLCAmc2l6ZSkgPT0gMCkgeworCSAgICByZXNpemVfdGVybShzaXplLndzX3Jvdywgc2l6ZS53c19jb2wpOworCSAgICB3cmVmcmVzaChjdXJzY3IpOwkvKiBMaW51eCBuZWVkcyB0aGlzICovCisJICAgIHNob3dfYWxsKHNpZyA/ICJTSUdXSU5DSCIgOiAiaW50ZXJydXB0Iik7CisJfQorCWludGVycnVwdGVkID0gRkFMU0U7CisgICAgfSBlbHNlIHsKKwlpbnRlcnJ1cHRlZCA9IFRSVUU7CisgICAgfQorICAgICh2b2lkKSBzaWduYWwoU0lHV0lOQ0gsIGFkanVzdCk7CS8qIHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8KK30KKyNlbmRpZiAvKiBDQU5fUkVTSVpFICovCisKK3N0YXRpYyB2b2lkCitzaG93X2FsbChjb25zdCBjaGFyICp0YWcpCit7CisgICAgaW50IGk7CisgICAgY2hhciB0ZW1wW0JVRlNJWl07CisgICAgTkNVUlNFU19DSF9UICpzOworICAgIHRpbWVfdCB0aGlzX3RpbWU7CisKKyNpZiBDQU5fUkVTSVpFCisgICAgc3ByaW50Zih0ZW1wLCAiJS4yMHMgKCUzZHglM2QpIGNvbCAlZCAiLCB0YWcsIExJTkVTLCBDT0xTLCBzaGlmdCk7CisgICAgaSA9IHN0cmxlbih0ZW1wKTsKKyAgICBpZiAoKGkgKyA3KSA8IChpbnQpIHNpemVvZih0ZW1wKSkKKwlzcHJpbnRmKHRlbXAgKyBpLCAidmlldyAlLipzIiwgKGludCkgKHNpemVvZih0ZW1wKSAtIDcgLSBpKSwgZm5hbWUpOworI2Vsc2UKKyAgICAodm9pZCkgdGFnOworICAgIHNwcmludGYodGVtcCwgInZpZXcgJS4qcyIsIChpbnQpIHNpemVvZih0ZW1wKSAtIDcsIGZuYW1lKTsKKyNlbmRpZgorICAgIG1vdmUoMCwgMCk7CisgICAgcHJpbnR3KCIlLipzIiwgQ09MUywgdGVtcCk7CisgICAgY2xydG9lb2woKTsKKyAgICB0aGlzX3RpbWUgPSB0aW1lKCh0aW1lX3QgKikgMCk7CisgICAgc3RyY3B5KHRlbXAsIGN0aW1lKCZ0aGlzX3RpbWUpKTsKKyAgICBpZiAoKGkgPSBzdHJsZW4odGVtcCkpICE9IDApIHsKKwl0ZW1wWy0taV0gPSAwOworCWlmIChtb3ZlKDAsIENPTFMgLSBpIC0gMikgIT0gRVJSKQorCSAgICBwcmludHcoIiAgJXMiLCB0ZW1wKTsKKyAgICB9CisKKyAgICBzY3JvbGxvayhzdGRzY3IsIEZBTFNFKTsJLyogcHJldmVudCBzY3JlZW4gZnJvbSBtb3ZpbmcgKi8KKyAgICBmb3IgKGkgPSAxOyBpIDwgTElORVM7IGkrKykgeworCW1vdmUoaSwgMCk7CisJcHJpbnR3KCIlM2xkOiIsIChsb25nKSAobHB0ciArIGkgLSB2ZWNfbGluZXMpKTsKKwljbHJ0b2VvbCgpOworCWlmICgocyA9IGxwdHJbaSAtIDFdKSAhPSAwKSB7CisJICAgIGludCBsZW4gPSBjaF9sZW4ocyk7CisJICAgIGlmIChsZW4gPiBzaGlmdCkgeworI2lmIFVTRV9XSURFQ19TVVBQT1JUCisJCWFkZF93Y2hzdHIocyArIHNoaWZ0KTsKKyNlbHNlCisJCWFkZGNoc3RyKHMgKyBzaGlmdCk7CisjZW5kaWYKKwkgICAgfQorI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSB8fCBkZWZpbmVkKEhBVkVfV0NIR0FUKQorCSAgICBpZiAodHJ5X2NvbG9yKQorCQl3Y2hnYXQoc3Rkc2NyLCAtMSwgQV9OT1JNQUwsIG15X3BhaXIsIE5VTEwpOworI2VuZGlmCisJfQorICAgIH0KKyAgICBzZXRzY3JyZWcoMSwgTElORVMgLSAxKTsKKyAgICBzY3JvbGxvayhzdGRzY3IsIFRSVUUpOworICAgIHJlZnJlc2goKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3Qvd2lkZWNoYXJzLXV0ZjgudHh0IGIvbmN1cnNlcy01LjcvdGVzdC93aWRlY2hhcnMtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlY2QwZgotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3Qvd2lkZWNoYXJzLXV0ZjgudHh0CkBAIC0wLDAgKzEsNyBAQAor77yh77yw77yw77ys77ylICAgICAtLSBJdCdzIGFuIO+8oe+8sO+8sO+8rO+8pS4KK++8pO+8r++8pyAgICAgICAgIC0tIE5vLCB0aGF0J3Mgbm90IG15IO+8pO+8r++8py4KK++8r++8su+8oe+8ru+8p++8pSAgIC0tIFllYWgsIHRoYXQncyDvvKrvvLXvvKnvvKPvvLkuCivvvKPvvKjvvKnvvKPvvKvvvKXvvK4gLS0gTm9ybWFsbHkgbm90IGEg77yw77yl77y0Lgor77yj77yh77y0ICAgICAgICAgLS0gTm8sIG5ldmVyIHB1dCBhIO+8pO+8r++8pyBhbmQgYSDvvKPvvKHvvLQgdG9nZXRoZXIhCivvvKbvvKnvvLPvvKggICAgICAgLS0gQ2F0cyBsaWtlIO+8pu+8qe+8s++8qC4KK++8rO+8pe+8re+8r++8riAgICAgLS0gWW91IO+8q++8ru+8r++8tyBob3cgaXQg77y077yh77yz77y077yl77yzLgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC93b3JtLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L3dvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDI5YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC93b3JtLmMKQEAgLTAsMCArMSw2MDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAqCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgKgorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgICAgICoKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAqCisgKiBkaXN0cmlidXRlLCBkaXN0cmlidXRlIHdpdGggbW9kaWZpY2F0aW9ucywgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgICAgICAgKgorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzICAgICoKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgICoKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgICoKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgICAgICAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICAgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFCT1ZFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCAgICoKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiAgICAqCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgICAgKgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgKgorICogaG9sZGVycyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgICAgICoKKyAqIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAgICAgICAqCisgKiBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorCisJIEBAQCAgICAgICAgQEBAICAgIEBAQEBAQEBAQEAgICAgIEBAQEBAQEBAQEBAICAgIEBAQEBAQEBAQEBAQAorCSBAQEAgICAgICAgIEBAQCAgIEBAQEBAQEBAQEBAQCAgICBAQEBAQEBAQEBAQEAgICBAQEBAQEBAQEBAQEBACisJIEBAQCAgICAgICAgQEBAICBAQEBAICAgICAgQEBAQCAgIEBAQEAgICAgICAgICAgIEBAQEAgQEBAICBAQEBACisJIEBAQCAgIEBAICAgQEBAICBAQEAgICAgICAgIEBAQCAgIEBAQCAgICAgICAgICAgIEBAQCAgQEBAICAgQEBACisJIEBAQCAgQEBAQCAgQEBAICBAQEAgICAgICAgIEBAQCAgIEBAQCAgICAgICAgICAgIEBAQCAgQEBAICAgQEBACisJIEBAQEAgQEBAQCBAQEBAICBAQEAgICAgICAgIEBAQCAgIEBAQCAgICAgICAgICAgIEBAQCAgQEBAICAgQEBACisJICBAQEBAQEBAQEBAQEAgICBAQEBAICAgICAgQEBAQCAgIEBAQCAgICAgICAgICAgIEBAQCAgQEBAICAgQEBACisJICAgQEBAQCAgQEBAQCAgICAgQEBAQEBAQEBAQEBAICAgIEBAQCAgICAgICAgICAgIEBAQCAgQEBAICAgQEBACisJICAgIEBAICAgIEBAICAgICAgIEBAQEBAQEBAQEAgICAgIEBAQCAgICAgICAgICAgIEBAQCAgQEBAICAgQEBACisKKwkJCQkgRXJpYyBQLiBTY290dAorCQkJICBDYWx0ZWNoIEhpZ2ggRW5lcmd5IFBoeXNpY3MKKwkJCQkgT2N0b2JlciwgMTk4MAorCisJCUhhY2tzIHRvIHR1cm4gdGhpcyBpbnRvIGEgdGVzdCBmcmFtZSBmb3IgY3Vyc29yIG1vdmVtZW50OgorCQkJRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+CisJCQkJSmFudWFyeSwgMTk5NQorCisJCUp1bHkgMTk5NSAoZXNyKTogd29ybXMgaXMgbm93IGluIGxpdmluZyBjb2xvciEgOi0pCisKK09wdGlvbnM6CisJLWYJCQlmaWxsIHNjcmVlbiB3aXRoIGNvcGllcyBvZiAnV09STScgYXQgc3RhcnQuCisJLWwgPG4+CQkJc2V0IHdvcm0gbGVuZ3RoCisJLW4gPG4+CQkJc2V0IG51bWJlciBvZiB3b3JtcworCS10CQkJbWFrZSB3b3JtcyBsZWF2ZSBkcm9wcGluZ3MKKwktVCA8c3RhcnQ+IDxlbmQ+CXNldCB0cmFjZSBpbnRlcnZhbAorCS1TCQkJc2V0IHNpbmdsZS1zdGVwcGluZyBkdXJpbmcgdHJhY2UgaW50ZXJ2YWwKKwktTgkJCXN1cHByZXNzIGN1cnNvci1tb3ZlbWVudCBvcHRpbWl6YXRpb24KKworICBUaGlzIHByb2dyYW0gbWFrZXMgYSBnb29kIHRvcnR1cmUtdGVzdCBmb3IgdGhlIG5jdXJzZXMgY3Vyc29yLW9wdGltaXphdGlvbgorICBjb2RlLiAgWW91IGNhbiB1c2UgLVQgdG8gc2V0IHRoZSB3b3JtIG1vdmUgaW50ZXJ2YWwgb3ZlciB3aGljaCBtb3ZlbWVudAorICB0cmFjZXMgd2lsbCBiZSBkdW1wZWQuICBUaGUgcHJvZ3JhbSBzdG9wcyBhbmQgd2FpdHMgZm9yIG9uZSBjaGFyYWN0ZXIgb2YKKyAgaW5wdXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRlcnZhbC4KKworICAkSWQ6IHdvcm0uYyx2IDEuNTggMjAwOC8xMC8wNCAyMTo1NDowOSB0b20gRXhwICQKKyovCisKKyNpbmNsdWRlIDx0ZXN0LnByaXYuaD4KKworI2lmZGVmIFVTRV9QVEhSRUFEUworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorCitXQU5UX1VTRV9XSU5ET1coKTsKKworI2RlZmluZSBNQVhfV09STVMJNDAKKyNkZWZpbmUgTUFYX0xFTkdUSAkxMDI0CisKK3N0YXRpYyBjaHR5cGUgZmxhdm9yW10gPQoreworICAgICdPJywgJyonLCAnIycsICckJywgJyUnLCAnMCcsICdAJywKK307CitzdGF0aWMgY29uc3Qgc2hvcnQgeGluY1tdID0KK3sKKyAgICAxLCAxLCAxLCAwLCAtMSwgLTEsIC0xLCAwCit9LCB5aW5jW10gPQoreworICAgIC0xLCAwLCAxLCAxLCAxLCAwLCAtMSwgLTEKK307CisKK3R5cGVkZWYgc3RydWN0IHdvcm0geworICAgIGludCBvcmllbnRhdGlvbjsKKyAgICBpbnQgaGVhZDsKKyAgICBzaG9ydCAqeHBvczsKKyAgICBzaG9ydCAqeXBvczsKKyAgICBjaHR5cGUgYXR0cnM7CisjaWZkZWYgVVNFX1BUSFJFQURTCisgICAgcHRocmVhZF90IHRocmVhZDsKKyNlbmRpZgorfSBXT1JNOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSA9IDA7CitzdGF0aWMgYm9vbCBxdWl0dGluZyA9IEZBTFNFOworCitzdGF0aWMgV09STSB3b3JtW01BWF9XT1JNU107CitzdGF0aWMgc2hvcnQgKipyZWZzOworc3RhdGljIGludCBsYXN0X3gsIGxhc3RfeTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmZpZWxkOworc3RhdGljIGludCBsZW5ndGggPSAxNiwgbnVtYmVyID0gMzsKK3N0YXRpYyBjaHR5cGUgdHJhaWwgPSAnICc7CisKK3N0YXRpYyB1bnNpZ25lZCBwZW5kaW5nOworI2lmZGVmIFRSQUNFCitzdGF0aWMgaW50IGdlbmVyYXRpb24sIHRyYWNlX3N0YXJ0LCB0cmFjZV9lbmQ7CisjZW5kaWYgLyogVFJBQ0UgKi8KKy8qICpJTkRFTlQtT0ZGKiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb25zIHsKKyAgICBpbnQgbm9wdHM7CisgICAgaW50IG9wdHNbM107Cit9IG5vcm1hbFs4XT17CisgICAgeyAzLCB7IDcsIDAsIDEgfSB9LAorICAgIHsgMywgeyAwLCAxLCAyIH0gfSwKKyAgICB7IDMsIHsgMSwgMiwgMyB9IH0sCisgICAgeyAzLCB7IDIsIDMsIDQgfSB9LAorICAgIHsgMywgeyAzLCA0LCA1IH0gfSwKKyAgICB7IDMsIHsgNCwgNSwgNiB9IH0sCisgICAgeyAzLCB7IDUsIDYsIDcgfSB9LAorICAgIHsgMywgeyA2LCA3LCAwIH0gfQorfSwgdXBwZXJbOF09eworICAgIHsgMSwgeyAxLCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgMSwgMiwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAyLCB7IDQsIDUsIDAgfSB9LAorICAgIHsgMSwgeyA1LCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgMSwgNSwgMCB9IH0KK30sIGxlZnRbOF09eworICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMiwgeyAyLCAzLCAwIH0gfSwKKyAgICB7IDEsIHsgMywgMCwgMCB9IH0sCisgICAgeyAyLCB7IDMsIDcsIDAgfSB9LAorICAgIHsgMSwgeyA3LCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgNywgMCwgMCB9IH0KK30sIHJpZ2h0WzhdPXsKKyAgICB7IDEsIHsgNywgMCwgMCB9IH0sCisgICAgeyAyLCB7IDMsIDcsIDAgfSB9LAorICAgIHsgMSwgeyAzLCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgMywgNCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAyLCB7IDYsIDcsIDAgfSB9Cit9LCBsb3dlcls4XT17CisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMiwgeyAwLCAxLCAwIH0gfSwKKyAgICB7IDEsIHsgMSwgMCwgMCB9IH0sCisgICAgeyAyLCB7IDEsIDUsIDAgfSB9LAorICAgIHsgMSwgeyA1LCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgNSwgNiwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfQorfSwgdXBsZWZ0WzhdPXsKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMSwgeyAzLCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgMSwgMywgMCB9IH0sCisgICAgeyAxLCB7IDEsIDAsIDAgfSB9Cit9LCB1cHJpZ2h0WzhdPXsKKyAgICB7IDIsIHsgMywgNSwgMCB9IH0sCisgICAgeyAxLCB7IDMsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAxLCB7IDUsIDAsIDAgfSB9Cit9LCBsb3dsZWZ0WzhdPXsKKyAgICB7IDMsIHsgNywgMCwgMSB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDEsIHsgMSwgMCwgMCB9IH0sCisgICAgeyAyLCB7IDEsIDcsIDAgfSB9LAorICAgIHsgMSwgeyA3LCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9Cit9LCBsb3dyaWdodFs4XT17CisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMSwgeyA3LCAwLCAwIH0gfSwKKyAgICB7IDIsIHsgNSwgNywgMCB9IH0sCisgICAgeyAxLCB7IDUsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfSwKKyAgICB7IDAsIHsgMCwgMCwgMCB9IH0sCisgICAgeyAwLCB7IDAsIDAsIDAgfSB9LAorICAgIHsgMCwgeyAwLCAwLCAwIH0gfQorfTsKKy8qICpJTkRFTlQtT04qICovCisKK3N0YXRpYyB2b2lkCitjbGVhbnVwKHZvaWQpCit7CisgICAgVVNJTkdfV0lORE9XKHN0ZHNjciwgd3JlZnJlc2gpOworICAgIGN1cnNfc2V0KDEpOworICAgIGVuZHdpbigpOworfQorCitzdGF0aWMgUkVUU0lHVFlQRQorb25zaWcoaW50IHNpZyBHQ0NfVU5VU0VEKQoreworICAgIGNsZWFudXAoKTsKKyAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgZmxvYXQKK3JhbmYodm9pZCkKK3sKKyAgICBsb25nIHIgPSAocmFuZCgpICYgMDc3Nzc3KTsKKyAgICByZXR1cm4gKChmbG9hdCkgciAvIDMyNzY4Lik7Cit9CisKK3N0YXRpYyBpbnQKK2RyYXdfd29ybShXSU5ET1cgKndpbiwgdm9pZCAqZGF0YSkKK3sKKyAgICBXT1JNICp3ID0gKFdPUk0gKikgZGF0YTsKKyAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9ucyAqb3A7CisgICAgdW5zaWduZWQgbWFzayA9IH4oMSA8PCAodyAtIHdvcm0pKTsKKyAgICBjaHR5cGUgYXR0cnMgPSB3LT5hdHRycyB8ICgobWFzayAmIHBlbmRpbmcpID8gQV9SRVZFUlNFIDogMCk7CisKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgaDsKKworICAgIGJvb2wgZG9uZSA9IEZBTFNFOworCisgICAgaWYgKCh4ID0gdy0+eHBvc1toID0gdy0+aGVhZF0pIDwgMCkgeworCXdtb3ZlKHdpbiwgeSA9IHctPnlwb3NbaF0gPSBsYXN0X3ksIHggPSB3LT54cG9zW2hdID0gMCk7CisJd2FkZGNoKHdpbiwgYXR0cnMpOworCXJlZnNbeV1beF0rKzsKKyAgICB9IGVsc2UgeworCXkgPSB3LT55cG9zW2hdOworICAgIH0KKworICAgIGlmICh4ID4gbGFzdF94KQorCXggPSBsYXN0X3g7CisgICAgaWYgKHkgPiBsYXN0X3kpCisJeSA9IGxhc3RfeTsKKworICAgIGlmICgrK2ggPT0gbGVuZ3RoKQorCWggPSAwOworCisgICAgaWYgKHctPnhwb3Nbdy0+aGVhZCA9IGhdID49IDApIHsKKwlpbnQgeDEsIHkxOworCXgxID0gdy0+eHBvc1toXTsKKwl5MSA9IHctPnlwb3NbaF07CisJaWYgKHkxIDwgTElORVMKKwkgICAgJiYgeDEgPCBDT0xTCisJICAgICYmIC0tcmVmc1t5MV1beDFdID09IDApIHsKKwkgICAgd21vdmUod2luLCB5MSwgeDEpOworCSAgICB3YWRkY2god2luLCB0cmFpbCk7CisJfQorICAgIH0KKworICAgIG9wID0gJih4ID09IDAKKwkgICA/ICh5ID09IDAKKwkgICAgICA/IHVwbGVmdAorCSAgICAgIDogKHkgPT0gbGFzdF95CisJCSA/IGxvd2xlZnQKKwkJIDogbGVmdCkpCisJICAgOiAoeCA9PSBsYXN0X3gKKwkgICAgICA/ICh5ID09IDAKKwkJID8gdXByaWdodAorCQkgOiAoeSA9PSBsYXN0X3kKKwkJICAgID8gbG93cmlnaHQKKwkJICAgIDogcmlnaHQpKQorCSAgICAgIDogKHkgPT0gMAorCQkgPyB1cHBlcgorCQkgOiAoeSA9PSBsYXN0X3kKKwkJICAgID8gbG93ZXIKKwkJICAgIDogbm9ybWFsKSkpKVt3LT5vcmllbnRhdGlvbl07CisKKyAgICBzd2l0Y2ggKG9wLT5ub3B0cykgeworICAgIGNhc2UgMDoKKwlkb25lID0gVFJVRTsKKwlicmVhazsKKyAgICBjYXNlIDE6CisJdy0+b3JpZW50YXRpb24gPSBvcC0+b3B0c1swXTsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorCXctPm9yaWVudGF0aW9uID0gb3AtPm9wdHNbKGludCkgKHJhbmYoKSAqIChmbG9hdCkgb3AtPm5vcHRzKV07CisJYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFkb25lKSB7CisJeCArPSB4aW5jW3ctPm9yaWVudGF0aW9uXTsKKwl5ICs9IHlpbmNbdy0+b3JpZW50YXRpb25dOworCXdtb3ZlKHdpbiwgeSwgeCk7CisKKwlpZiAoeSA8IDApCisJICAgIHkgPSAwOworCXdhZGRjaCh3aW4sIGF0dHJzKTsKKworCXctPnlwb3NbaF0gPSB5OworCXctPnhwb3NbaF0gPSB4OworCXJlZnNbeV1beF0rKzsKKyAgICB9CisKKyAgICByZXR1cm4gZG9uZTsKK30KKworI2lmZGVmIFVTRV9QVEhSRUFEUworc3RhdGljIGJvb2wKK3F1aXRfd29ybShpbnQgYml0bnVtKQoreworICAgIHBlbmRpbmcgfD0gKDEgPDwgYml0bnVtKTsKKyAgICBuYXBtcygxMCk7CQkJLyogbGV0IHRoZSBvdGhlciB0aHJlYWQocykgaGF2ZSBhIGNoYW5jZSAqLworICAgIHBlbmRpbmcgJj0gfigxIDw8IGJpdG51bSk7CisgICAgcmV0dXJuIHF1aXR0aW5nOworfQorCitzdGF0aWMgdm9pZCAqCitzdGFydF93b3JtKHZvaWQgKmFyZykKK3sKKyAgICB1bnNpZ25lZCBsb25nIGNvbXBhcmUgPSAwOworICAgIFRyYWNlKCgic3RhcnRfd29ybSIpKTsKKyAgICB3aGlsZSAoIXF1aXRfd29ybSgoKHN0cnVjdCB3b3JtICopIGFyZykgLSB3b3JtKSkgeworCXdoaWxlIChjb21wYXJlIDwgc2VxdWVuY2UpIHsKKwkgICAgKytjb21wYXJlOworCSAgICB1c2Vfd2luZG93KHN0ZHNjciwgZHJhd193b3JtLCBhcmcpOworCX0KKyAgICB9CisgICAgVHJhY2UoKCIuLi5zdGFydF93b3JtIChkb25lKSIpKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitzdGF0aWMgYm9vbAorZHJhd19hbGxfd29ybXModm9pZCkKK3sKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKyAgICBpbnQgbjsKKyAgICBzdHJ1Y3Qgd29ybSAqdzsKKworI2lmZGVmIFVTRV9QVEhSRUFEUworICAgIHN0YXRpYyBib29sIGZpcnN0ID0gVFJVRTsKKyAgICBpZiAoZmlyc3QpIHsKKwlmaXJzdCA9IEZBTFNFOworCWZvciAobiA9IDAsIHcgPSAmd29ybVswXTsgbiA8IG51bWJlcjsgbisrLCB3KyspIHsKKwkgICAgaW50IHJjOworCSAgICByYyA9IHB0aHJlYWRfY3JlYXRlKCYody0+dGhyZWFkKSwgTlVMTCwgc3RhcnRfd29ybSwgdyk7CisJfQorICAgIH0KKyNlbHNlCisgICAgZm9yIChuID0gMCwgdyA9ICZ3b3JtWzBdOyBuIDwgbnVtYmVyOyBuKyssIHcrKykgeworCWlmIChVU0lOR19XSU5ET1cyKHN0ZHNjciwgZHJhd193b3JtLCB3KSkKKwkgICAgZG9uZSA9IFRSVUU7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGRvbmU7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9pbnB1dCh2b2lkKQoreworICAgIGludCBjaDsKKyAgICBjaCA9IFVTSU5HX1dJTkRPVyhzdGRzY3IsIHdnZXRjaCk7CisgICAgcmV0dXJuIGNoOworfQorCisjaWZkZWYgS0VZX1JFU0laRQorc3RhdGljIGludAordXBkYXRlX3JlZnMoV0lORE9XICp3aW4pCit7CisgICAgaW50IHgsIHk7CisKKyAgICAodm9pZCkgd2luOworICAgIGlmIChsYXN0X3ggIT0gQ09MUyAtIDEpIHsKKwlmb3IgKHkgPSAwOyB5IDw9IGxhc3RfeTsgeSsrKSB7CisJICAgIHJlZnNbeV0gPSB0eXBlUmVhbGxvYyhzaG9ydCwgQ09MUywgcmVmc1t5XSk7CisJICAgIGZvciAoeCA9IGxhc3RfeCArIDE7IHggPCBDT0xTOyB4KyspCisJCXJlZnNbeV1beF0gPSAwOworCX0KKwlsYXN0X3ggPSBDT0xTIC0gMTsKKyAgICB9CisgICAgaWYgKGxhc3RfeSAhPSBMSU5FUyAtIDEpIHsKKwlmb3IgKHkgPSBMSU5FUzsgeSA8PSBsYXN0X3k7IHkrKykKKwkgICAgZnJlZShyZWZzW3ldKTsKKwlyZWZzID0gdHlwZVJlYWxsb2Moc2hvcnQgKiwgTElORVMsIHJlZnMpOworCWZvciAoeSA9IGxhc3RfeSArIDE7IHkgPCBMSU5FUzsgeSsrKSB7CisJICAgIHJlZnNbeV0gPSB0eXBlTWFsbG9jKHNob3J0LCBDT0xTKTsKKwkgICAgZm9yICh4ID0gMDsgeCA8IENPTFM7IHgrKykKKwkJcmVmc1t5XVt4XSA9IDA7CisJfQorCWxhc3RfeSA9IExJTkVTIC0gMTsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorI2VuZGlmCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCB4LCB5OworICAgIGludCBuOworICAgIHN0cnVjdCB3b3JtICp3OworICAgIHNob3J0ICppcDsKKyAgICBib29sIGRvbmUgPSBGQUxTRTsKKworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGZvciAoeCA9IDE7IHggPCBhcmdjOyB4KyspIHsKKwljaGFyICpwOworCXAgPSBhcmd2W3hdOworCWlmICgqcCA9PSAnLScpCisJICAgIHArKzsKKwlzd2l0Y2ggKCpwKSB7CisJY2FzZSAnZic6CisJICAgIGZpZWxkID0gIldPUk0iOworCSAgICBicmVhazsKKwljYXNlICdsJzoKKwkgICAgaWYgKCsreCA9PSBhcmdjKQorCQlnb3RvIHVzYWdlOworCSAgICBpZiAoKGxlbmd0aCA9IGF0b2koYXJndlt4XSkpIDwgMiB8fCBsZW5ndGggPiBNQVhfTEVOR1RIKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IEludmFsaWQgbGVuZ3RoXG4iLCAqYXJndik7CisJCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAnbic6CisJICAgIGlmICgrK3ggPT0gYXJnYykKKwkJZ290byB1c2FnZTsKKwkgICAgaWYgKChudW1iZXIgPSBhdG9pKGFyZ3ZbeF0pKSA8IDEgfHwgbnVtYmVyID4gTUFYX1dPUk1TKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IEludmFsaWQgbnVtYmVyIG9mIHdvcm1zXG4iLCAqYXJndik7CisJCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAndCc6CisJICAgIHRyYWlsID0gJy4nOworCSAgICBicmVhazsKKyNpZmRlZiBUUkFDRQorCWNhc2UgJ1QnOgorCSAgICB0cmFjZV9zdGFydCA9IGF0b2koYXJndlsrK3hdKTsKKwkgICAgdHJhY2VfZW5kID0gYXRvaShhcmd2WysreF0pOworCSAgICBicmVhazsKKwljYXNlICdOJzoKKwkgICAgX25jX29wdGltaXplX2VuYWJsZSBePSBPUFRJTUlaRV9BTEw7CS8qIGRlY2xhcmVkIGJ5IG5jdXJzZXMgKi8KKwkgICAgYnJlYWs7CisjZW5kaWYgLyogVFJBQ0UgKi8KKwlkZWZhdWx0OgorCSAgdXNhZ2U6CisJICAgIGZwcmludGYoc3RkZXJyLAorCQkgICAgInVzYWdlOiAlcyBbLWZpZWxkXSBbLWxlbmd0aCAjXSBbLW51bWJlciAjXSBbLXRyYWlsXVxuIiwgKmFyZ3YpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKyAgICB9CisKKyAgICBzaWduYWwoU0lHSU5ULCBvbnNpZyk7CisgICAgaW5pdHNjcigpOworICAgIG5vZWNobygpOworICAgIGNicmVhaygpOworICAgIG5vbmwoKTsKKworICAgIGN1cnNfc2V0KDApOworCisgICAgbGFzdF95ID0gTElORVMgLSAxOworICAgIGxhc3RfeCA9IENPTFMgLSAxOworCisjaWZkZWYgQV9DT0xPUgorICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbnQgYmcgPSBDT0xPUl9CTEFDSzsKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpID09IE9LKQorCSAgICBiZyA9IC0xOworI2VuZGlmCisKKyNkZWZpbmUgU0VUX0NPTE9SKG51bSwgZmcpIFwKKwkgICAgaW5pdF9wYWlyKG51bSsxLCBmZywgYmcpOyBcCisJICAgIGZsYXZvcltudW1dIHw9IENPTE9SX1BBSVIobnVtKzEpIHwgQV9CT0xECisKKwlTRVRfQ09MT1IoMCwgQ09MT1JfR1JFRU4pOworCVNFVF9DT0xPUigxLCBDT0xPUl9SRUQpOworCVNFVF9DT0xPUigyLCBDT0xPUl9DWUFOKTsKKwlTRVRfQ09MT1IoMywgQ09MT1JfV0hJVEUpOworCVNFVF9DT0xPUig0LCBDT0xPUl9NQUdFTlRBKTsKKwlTRVRfQ09MT1IoNSwgQ09MT1JfQkxVRSk7CisJU0VUX0NPTE9SKDYsIENPTE9SX1lFTExPVyk7CisgICAgfQorI2VuZGlmIC8qIEFfQ09MT1IgKi8KKworICAgIHJlZnMgPSB0eXBlTWFsbG9jKHNob3J0ICosIExJTkVTKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgTElORVM7IHkrKykgeworCXJlZnNbeV0gPSB0eXBlTWFsbG9jKHNob3J0LCBDT0xTKTsKKwlmb3IgKHggPSAwOyB4IDwgQ09MUzsgeCsrKSB7CisJICAgIHJlZnNbeV1beF0gPSAwOworCX0KKyAgICB9CisKKyNpZmRlZiBCQURDT1JORVIKKyAgICAvKiBpZiBhZGRyZXNzaW5nIHRoZSBsb3dlciByaWdodCBjb3JuZXIgZG9lc24ndCB3b3JrIGluIHlvdXIgY3Vyc2VzICovCisgICAgcmVmc1tsYXN0X3ldW2xhc3RfeF0gPSAxOworI2VuZGlmIC8qIEJBRENPUk5FUiAqLworCisgICAgZm9yIChuID0gbnVtYmVyLCB3ID0gJndvcm1bMF07IC0tbiA+PSAwOyB3KyspIHsKKwl3LT5hdHRycyA9IGZsYXZvcltuICUgU0laRU9GKGZsYXZvcildOworCXctPm9yaWVudGF0aW9uID0gMDsKKwl3LT5oZWFkID0gMDsKKworCWlmICghKGlwID0gdHlwZU1hbGxvYyhzaG9ydCwgKGxlbmd0aCArIDEpKSkpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgKmFyZ3YpOworCSAgICBFeGl0UHJvZ3JhbShFWElUX0ZBSUxVUkUpOworCX0KKwl3LT54cG9zID0gaXA7CisJZm9yICh4ID0gbGVuZ3RoOyAtLXggPj0gMDspCisJICAgICppcCsrID0gLTE7CisJaWYgKCEoaXAgPSB0eXBlTWFsbG9jKHNob3J0LCAobGVuZ3RoICsgMSkpKSkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCAqYXJndik7CisJICAgIEV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisJfQorCXctPnlwb3MgPSBpcDsKKwlmb3IgKHkgPSBsZW5ndGg7IC0teSA+PSAwOykKKwkgICAgKmlwKysgPSAtMTsKKyAgICB9CisgICAgaWYgKGZpZWxkKSB7CisJY29uc3QgY2hhciAqcDsKKwlwID0gZmllbGQ7CisJZm9yICh5ID0gbGFzdF95OyAtLXkgPj0gMDspIHsKKwkgICAgZm9yICh4ID0gQ09MUzsgLS14ID49IDA7KSB7CisJCWFkZGNoKChjaHR5cGUpICgqcCsrKSk7CisJCWlmICghKnApCisJCSAgICBwID0gZmllbGQ7CisJICAgIH0KKwl9CisgICAgfQorICAgIFVTSU5HX1dJTkRPVyhzdGRzY3IsIHdyZWZyZXNoKTsKKyAgICBub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisKKyAgICB3aGlsZSAoIWRvbmUpIHsKKwlpbnQgY2g7CisKKwkrK3NlcXVlbmNlOworCWlmICgoY2ggPSBnZXRfaW5wdXQoKSkgPiAwKSB7CisjaWZkZWYgVFJBQ0UKKwkgICAgaWYgKHRyYWNlX3N0YXJ0IHx8IHRyYWNlX2VuZCkgeworCQlpZiAoZ2VuZXJhdGlvbiA9PSB0cmFjZV9zdGFydCkgeworCQkgICAgdHJhY2UoVFJBQ0VfQ0FMTFMpOworCQkgICAgZ2V0X2lucHV0KCk7CisJCX0gZWxzZSBpZiAoZ2VuZXJhdGlvbiA9PSB0cmFjZV9lbmQpIHsKKwkJICAgIHRyYWNlKDApOworCQkgICAgZ2V0X2lucHV0KCk7CisJCX0KKworCQlnZW5lcmF0aW9uKys7CisJICAgIH0KKyNlbmRpZgorCisjaWZkZWYgS0VZX1JFU0laRQorCSAgICBpZiAoY2ggPT0gS0VZX1JFU0laRSkgeworCQlVU0lOR19XSU5ET1coc3Rkc2NyLCB1cGRhdGVfcmVmcyk7CisJICAgIH0KKyNlbmRpZgorCisJICAgIC8qCisJICAgICAqIE1ha2UgaXQgc2ltcGxlIHRvIHB1dCB0aGlzIGludG8gc2luZ2xlLXN0ZXAgbW9kZSwgb3IgcmVzdW1lCisJICAgICAqIG5vcm1hbCBvcGVyYXRpb24gLVQuRGlja2V5CisJICAgICAqLworCSAgICBpZiAoY2ggPT0gJ3EnKSB7CisJCXF1aXR0aW5nID0gVFJVRTsKKwkJZG9uZSA9IFRSVUU7CisJCWNvbnRpbnVlOworCSAgICB9IGVsc2UgaWYgKGNoID09ICdzJykgeworCQlub2RlbGF5KHN0ZHNjciwgRkFMU0UpOworCSAgICB9IGVsc2UgaWYgKGNoID09ICcgJykgeworCQlub2RlbGF5KHN0ZHNjciwgVFJVRSk7CisJICAgIH0KKwl9CisKKwlkb25lID0gZHJhd19hbGxfd29ybXMoKTsKKwluYXBtcygxMCk7CisJVVNJTkdfV0lORE9XKHN0ZHNjciwgd3JlZnJlc2gpOworICAgIH0KKworICAgIFRyYWNlKCgiQ2xlYW51cCIpKTsKKyAgICBjbGVhbnVwKCk7CisjaWZkZWYgTk9fTEVBS1MKKyAgICBmb3IgKHkgPSAwOyB5IDwgTElORVM7IHkrKykgeworCWZyZWUocmVmc1t5XSk7CisgICAgfQorICAgIGZyZWUocmVmcyk7CisgICAgZm9yIChuID0gbnVtYmVyLCB3ID0gJndvcm1bMF07IC0tbiA+PSAwOyB3KyspIHsKKwlmcmVlKHctPnhwb3MpOworCWZyZWUody0+eXBvcyk7CisgICAgfQorI2VuZGlmCisjaWZkZWYgVVNFX1BUSFJFQURTCisgICAgLyoKKyAgICAgKiBEbyB0aGlzIGp1c3QgaW4gY2FzZSBvbmUgb2YgdGhlIHRocmVhZHMgZGlkIG5vdCByZWFsbHkgZXhpdC4KKyAgICAgKi8KKyAgICBUcmFjZSgoImpvaW4gYWxsIHRocmVhZHMiKSk7CisgICAgZm9yIChuID0gMDsgbiA8IG51bWJlcjsgbisrKSB7CisJcHRocmVhZF9qb2luKHdvcm1bbl0udGhyZWFkLCBOVUxMKTsKKyAgICB9CisjZW5kaWYKKyAgICBFeGl0UHJvZ3JhbShFWElUX1NVQ0NFU1MpOworfQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC94bWFzLmMgYi9uY3Vyc2VzLTUuNy90ZXN0L3htYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODM4YmFlCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy01LjcvdGVzdC94bWFzLmMKQEAgLTAsMCArMSwxMTYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYXNjaWl4bWFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIERlY2VtYmVyIDE5ODkgICAgICAgICAgICAgTGFycnkgQmFydHogICAgICAgICAgIEluZGlhbmFwb2xpcywgSU4gICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEknbSBkcmVhbWluZyBvZiBhbiBhc2NpaSBjaGFyYWN0ZXItYmFzZWQgbW9ub2Nocm9tZSBDaHJpc3RtYXMsICAgICAgICAgICAgICovCisvKiBKdXN0IGxpa2UgdGhlIG9uZSdzIEkgdXNlZCB0byBrbm93ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVmlhIGEgZnVsbCBkdXBsZXggY29tbXVuaWNhdGlvbnMgY2hhbm5lbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEF0IDk2MDAgYml0cyBwZXIgc2Vjb25kLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBFdmVuIHRob3VnaCBpdCdzIGtpbmRhIHNsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEknbSBkcmVhbWluZyBvZiBhbiBhc2NpaSBjaGFyYWN0ZXItYmFzZWQgbW9ub2Nocm9tZSBDaHJpc3RtYXMsICAgICAgICAgICAgICovCisvKiBXaXRoIGV2J3J5IEMgcHJvZ3JhbSBJIHdyaXRlISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogTWF5IHlvdXIgc2NyZWVuIGJlIG1lcnJ5IGFuZCBicmlnaHQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEFuZCBtYXkgYWxsIHlvdXIgQ2hyaXN0bWFzZXMgYmUgYW1iZXIgb3IgZ3JlZW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAoZm9yIHJlZHVjZWQgZXllc3RyYWluIGFuZCBpbXByb3ZlZCB2aXNpYmlsaXR5KSEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJTVBMRU1FTlRBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEZlZWwgZnJlZSB0byBtb2RpZnkgdGhlIGRlZmluZWQgc3RyaW5nIEZST01XSE8gdG8gcmVmbGVjdCB5b3UsIHlvdXIgICAgICAgICovCisvKiBvcmdhbml6YXRpb24sIHlvdXIgc2l0ZSwgd2hhdGV2ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoaXMgcmVhbGx5IGxvb2tzIGEgbG90IGJldHRlciBpZiB5b3UgY2FuIHR1cm4gb2ZmIHlvdXIgY3Vyc29yIGJlZm9yZSAgICAgICovCisvKiBleGVjdXRpb24uIEkgd2FudGVkIHRvIGRvIHRoYXQgaGVyZSBidXQgdmVyeSBmZXcgdGVybWNhcCBlbnRyaWVzIG9yICAgICAgICAqLworLyogdGVybWluZm8gZGVmaW5pdGlvbnMgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgc3RyaW5nIGRlZmluZWQuIElmIHlvdSBrbm93ICAgICAgKi8KKy8qIHRoZSBzdHJpbmcocykgZm9yIHRoZSB0ZXJtaW5hbChzKSB5b3UgdXNlIG9yIHdoaWNoIHlvdXIgc2l0ZSBzdXBwb3J0cywgICAgICovCisvKiB5b3UgY291bGQgY2FsbCBhc2NpaXhtYXMgZnJvbSB3aXRoaW4gYSBzaGVsbCBpbiB3aGljaCB5b3UgaXNzdWUgdGhlICAgICAgICAqLworLyogc3RyaW5nIHRvIHRoZSB0ZXJtaW5hbC4gVGhlIGN1cnNvciBpcyBkaXN0cmFjdGluZyBidXQgaXQgZG9lc24ndCByZWFsbHkgICAgKi8KKy8qIHJ1aW4gdGhlIHNob3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQXQgb3VyIHNpdGUsIHdlIGludm9rZSB0aGlzIGZvciBvdXIgdXNlcnMganVzdCBhZnRlciBsb2dpbiBhbmQgdGhlICAgICAgICAgKi8KKy8qIGRldGVybWluYXRpb24gb2YgdGVybWluYWwgdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFBPUlRBQklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogSSB3cm90ZSB0aGlzIHVzaW5nIG9ubHkgdGhlIHZlcnkgc2ltcGxlc3QgY3Vyc2VzIGZ1bmN0aW9ucyBzbyB0aGF0IGl0ICAgICAgKi8KKy8qIG1pZ2h0IGJlIHRoZSBtb3N0IHBvcnRhYmxlLiBJIHdhcyBwZXJzb25hbGx5IGFibGUgdG8gdGVzdCBvbiBmaXZlICAgICAgICAgICovCisvKiBkaWZmZXJlbnQgY3B1L1VOSVggY29tYmluYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBDT01QSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIHVzdWFsbHkgdGhpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogY2MgLU8gYXNjaWl4bWFzLmMgLWxjdXJzZXMgLW8gYXNjaWl4bWFzIC1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogWmlsb2cgUzgwMDAgbW9kZWxzIDExLCAyMSwgMzEsIGV0YyB3aXRoIFpFVVMgdmFyaWFudCBvZiBTWVNURU0gSUlJICAgICAgICAgKi8KKy8qIG1heWJlIG90aGVyIFNZU1RFTSBJSUkgYWxzbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogY2MgYXNjaWl4bWFzLmMgLWxjdXJzZXMgLWx0ZXJtbGliIC1vIGFzY2lpeG1hcyAtcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBhcyBhYm92ZSB3aXRoIG9wdGlvbmFsICJwZWVwaG9sZSBvcHRpbWl6ZXIiIGluc3RhbGxlZDogICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGNjIC1PIGFzY2lpeG1hcy5jIC1sY3Vyc2VzIC1sdGVybWxpYiAtbyBhc2NpaXhtYXMgLXMgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFppbG9nIFM4MDAwIG1vZGVscyAzMiwgMTMwIHdpdGggV0UzMjEwMCBjaGlwIGFuZCBTWVMgViwgUkVMMiAgICAgICAgICAgICAgICovCisvKiBtYXliZSAzQjIgYWxzbz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGNjIC1mIC1PIC1LIHNkIGFzY2lpeG1hcy5jIC1sY3Vyc2VzIC1vIGFzY2lpeG1hcyAtcyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFB5cmFtaWQsIFNlcXVlbnQsIGFueSBvdGhlciAiZHVhbCB1bml2ZXJzZSIgdHlwZXMgY29tcGlsZSBhbmQgZXhlY3V0ZSAgICAgICovCisvKiB1bmRlciBlaXRoZXIgdW5pdmVyc2UuIFRoZSBjb21waWxlIGxpbmUgZm9yIHRoZSB1Y2IgdW5pdmVyc2UgKGFzIHlvdSAgICAgICAqLworLyogbWlnaHQgZXhwZWN0KSBpcyB0aGUgc2FtZSBhcyBmb3IgU1lTIElJSSBVTklYOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBjYyAtTyBhc2NpaXhtYXMuYyAtbGN1cnNlcyAtbHRlcm1saWIgLW8gYXNjaWl4bWFzIC1zICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSBhYm92ZSBjb21waWxlIHdpbGwgYWxzbyBob2xkIHRydWUgZm9yIG90aGVyIEJTRCBzeXN0ZW1zLiAoSSBob3BlKSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogRm9yIHRoZSBTY3Jvb2dlcyBvdXQgdGhlcmUgYW1vbmcgeW91IHdobyBkb24ndCB3YW50IHRoaXMgdGhpbmcgdG8gbG9vcCAgICAgKi8KKy8qIGZvcmV2ZXIgKG9yIHVudGlsIHRoZSB1c2VyIGhpdHMgYSBrZXkpLCBpbnNlcnQgdGhpcyBpbnRvIHlvdXIgY29tcGlsZSAgICAgICovCisvKiBsaW5lIGp1c3QgYWZ0ZXIgImNjIiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC1ETk9MT09QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogbGlrZSBzbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBjYyAtRE5PTE9PUCAtTyBhc2NpaXhtYXMuYyAtbGN1cnNlcyAtbyBhc2NpaXhtYXMgLXMgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqICRJZDogeG1hcy5jLHYgMS4yNCAyMDA4LzA4LzAzIDExOjA4OjU5IHRvbSBFeHAgJAorICovCisjaW5jbHVkZSA8dGVzdC5wcml2Lmg+CisKKyNkZWZpbmUgRlJPTVdITyAiTWFyayBIZXNzbGluZyAtIChNLkhlc3NsaW5nQGd1LmVkdS5hdSkiCisKK3N0YXRpYyBpbnQgbXlfYmcgPSBDT0xPUl9CTEFDSzsKK3N0YXRpYyBpbnQgeV9wb3MsIHhfcG9zOworCitzdGF0aWMgV0lORE9XICp0cmVlc2NybjsKK3N0YXRpYyBXSU5ET1cgKnRyZWVzY3JuMjsKK3N0YXRpYyBXSU5ET1cgKnRyZWVzY3JuMzsKK3N0YXRpYyBXSU5ET1cgKnRyZWVzY3JuNDsKK3N0YXRpYyBXSU5ET1cgKnRyZWVzY3JuNTsKK3N0YXRpYyBXSU5ET1cgKnRyZWVzY3JuNjsKK3N0YXRpYyBXSU5ET1cgKnRyZWVzY3JuNzsKK3N0YXRpYyBXSU5ET1cgKnRyZWVzY3JuODsKK3N0YXRpYyBXSU5ET1cgKmRvdGRlZXIwOworc3RhdGljIFdJTkRPVyAqc3RhcmRlZXIwOworc3RhdGljIFdJTkRPVyAqbGlsZGVlcjA7CitzdGF0aWMgV0lORE9XICpsaWxkZWVyMTsKK3N0YXRpYyBXSU5ET1cgKmxpbGRlZXIyOworc3RhdGljIFdJTkRPVyAqbGlsZGVlcjM7CitzdGF0aWMgV0lORE9XICptaWRkZWVyMDsKK3N0YXRpYyBXSU5ET1cgKm1pZGRlZXIxOworc3RhdGljIFdJTkRPVyAqbWlkZGVlcjI7CitzdGF0aWMgV0lORE9XICptaWRkZWVyMzsKK3N0YXRpYyBXSU5ET1cgKmJpZ2RlZXIwOworc3RhdGljIFdJTkRPVyAqYmlnZGVlcjE7CitzdGF0aWMgV0lORE9XICpiaWdkZWVyMjsKK3N0YXRpYyBXSU5ET1cgKmJpZ2RlZXIzOworc3RhdGljIFdJTkRPVyAqYmlnZGVlcjQ7CitzdGF0aWMgV0lORE9XICpsb29rZGVlcjA7CitzdGF0aWMgV0lORE9XICpsb29rZGVlcjE7CitzdGF0aWMgV0lORE9XICpsb29rZGVlcjI7CitzdGF0aWMgV0lORE9XICpsb29rZGVlcjM7CitzdGF0aWMgV0lORE9XICpsb29rZGVlcjQ7CitzdGF0aWMgV0lORE9XICp3X2hvbGlkYXk7CitzdGF0aWMgV0lORE9XICp3X2RlbF9tc2c7CitzdGF0aWMgYm9vbCAqbXlfcGFpcnM7CisKK3N0YXRpYyBpbnQgYm94aXQodm9pZCk7CitzdGF0aWMgaW50IHNlYXModm9pZCk7CitzdGF0aWMgaW50IGdyZWV0KHZvaWQpOworc3RhdGljIGludCBmcm9td2hvKHZvaWQpOworc3RhdGljIGludCB0cmVlKHZvaWQpOworc3RhdGljIGludCBiYWxscyh2b2lkKTsKK3N0YXRpYyBpbnQgc3Rhcih2b2lkKTsKK3N0YXRpYyBpbnQgc3RybmcxKHZvaWQpOworc3RhdGljIGludCBzdHJuZzIodm9pZCk7CitzdGF0aWMgaW50IHN0cm5nMyh2b2lkKTsKK3N0YXRpYyBpbnQgc3Rybmc0KHZvaWQpOworc3RhdGljIGludCBzdHJuZzUodm9pZCk7CitzdGF0aWMgaW50IHJlaW5kZWVyKHZvaWQpOworc3RhdGljIGludCBibGlua2l0KHZvaWQpOworCitzdGF0aWMgUkVUU0lHVFlQRSBkb25lKGludCBzaWcpIEdDQ19OT1JFVFVSTjsKKworc3RhdGljIHZvaWQKK3NldF9jb2xvcihXSU5ET1cgKndpbiwgY2h0eXBlIGNvbG9yKQoreworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlpbnQgbiA9IChjb2xvciArIDEpOworCWlmIChteV9wYWlycyA9PSAwKQorCSAgICBteV9wYWlycyA9IHR5cGVDYWxsb2MoYm9vbCwgQ09MT1JTICsgMSk7CisJaWYgKCFteV9wYWlyc1tuXSkgeworCSAgICBpbml0X3BhaXIobiwgY29sb3IsIG15X2JnKTsKKwkgICAgbXlfcGFpcnNbbl0gPSBUUlVFOworCX0KKwl3YXR0cm9mZih3aW4sIEFfQ09MT1IpOworCXdhdHRyb24od2luLCBDT0xPUl9QQUlSKG4pKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCit1bnNldF9jb2xvcihXSU5ET1cgKndpbikKK3sKKyAgICBpZiAoaGFzX2NvbG9ycygpKQorCXdhdHRyc2V0KHdpbiwgQ09MT1JfUEFJUigwKSk7Cit9CisKK3N0YXRpYyB2b2lkCitsb29rX291dChpbnQgbXNlY3MpCit7CisgICAgbmFwbXMobXNlY3MpOworICAgIGlmIChnZXRjaCgpICE9IEVSUikgeworCWJlZXAoKTsKKwlkb25lKDApOworICAgIH0KK30KKworaW50CittYWluKGludCBhcmdjIEdDQ19VTlVTRUQsIGNoYXIgKiphcmd2IEdDQ19VTlVTRUQpCit7CisgICAgaW50IGxvb3B5OworCisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaW5pdHNjcigpOworICAgIG5vZWNobygpOworICAgIG5vbmwoKTsKKyAgICByZWZyZXNoKCk7CisKKyAgICBDQVRDSEFMTChkb25lKTsKKworICAgIGlmIChoYXNfY29sb3JzKCkpIHsKKwlzdGFydF9jb2xvcigpOworI2lmIEhBVkVfVVNFX0RFRkFVTFRfQ09MT1JTCisJaWYgKHVzZV9kZWZhdWx0X2NvbG9ycygpID09IE9LKQorCSAgICBteV9iZyA9IC0xOworI2VuZGlmCisgICAgfQorICAgIGN1cnNfc2V0KDApOworCisgICAgaWYgKCh0cmVlc2NybiA9IG5ld3dpbigxNiwgMjcsIDMsIDUzKSkgPT0gMCB8fAorCSh0cmVlc2NybjIgPSBuZXd3aW4oMTYsIDI3LCAzLCA1MykpID09IDAgfHwKKwkodHJlZXNjcm4zID0gbmV3d2luKDE2LCAyNywgMywgNTMpKSA9PSAwIHx8CisJKHRyZWVzY3JuNCA9IG5ld3dpbigxNiwgMjcsIDMsIDUzKSkgPT0gMCB8fAorCSh0cmVlc2NybjUgPSBuZXd3aW4oMTYsIDI3LCAzLCA1MykpID09IDAgfHwKKwkodHJlZXNjcm42ID0gbmV3d2luKDE2LCAyNywgMywgNTMpKSA9PSAwIHx8CisJKHRyZWVzY3JuNyA9IG5ld3dpbigxNiwgMjcsIDMsIDUzKSkgPT0gMCB8fAorCSh0cmVlc2NybjggPSBuZXd3aW4oMTYsIDI3LCAzLCA1MykpID09IDAgfHwKKworCShkb3RkZWVyMCA9IG5ld3dpbigzLCA3MSwgMCwgOCkpID09IDAgfHwKKworCShzdGFyZGVlcjAgPSBuZXd3aW4oNCwgNTYsIDAsIDgpKSA9PSAwIHx8CisKKwkobGlsZGVlcjAgPSBuZXd3aW4oNywgNTMsIDAsIDgpKSA9PSAwIHx8CisJKGxpbGRlZXIxID0gbmV3d2luKDIsIDQsIDAsIDApKSA9PSAwIHx8CisJKGxpbGRlZXIyID0gbmV3d2luKDIsIDQsIDAsIDApKSA9PSAwIHx8CisJKGxpbGRlZXIzID0gbmV3d2luKDIsIDQsIDAsIDApKSA9PSAwIHx8CisKKwkobWlkZGVlcjAgPSBuZXd3aW4oMTUsIDQyLCAwLCA4KSkgPT0gMCB8fAorCShtaWRkZWVyMSA9IG5ld3dpbigzLCA3LCAwLCAwKSkgPT0gMCB8fAorCShtaWRkZWVyMiA9IG5ld3dpbigzLCA3LCAwLCAwKSkgPT0gMCB8fAorCShtaWRkZWVyMyA9IG5ld3dpbigzLCA3LCAwLCAwKSkgPT0gMCB8fAorCisJKGJpZ2RlZXIwID0gbmV3d2luKDEwLCAyMywgMCwgMCkpID09IDAgfHwKKwkoYmlnZGVlcjEgPSBuZXd3aW4oMTAsIDIzLCAwLCAwKSkgPT0gMCB8fAorCShiaWdkZWVyMiA9IG5ld3dpbigxMCwgMjMsIDAsIDApKSA9PSAwIHx8CisJKGJpZ2RlZXIzID0gbmV3d2luKDEwLCAyMywgMCwgMCkpID09IDAgfHwKKwkoYmlnZGVlcjQgPSBuZXd3aW4oMTAsIDIzLCAwLCAwKSkgPT0gMCB8fAorCisJKGxvb2tkZWVyMCA9IG5ld3dpbigxMCwgMjUsIDAsIDApKSA9PSAwIHx8CisJKGxvb2tkZWVyMSA9IG5ld3dpbigxMCwgMjUsIDAsIDApKSA9PSAwIHx8CisJKGxvb2tkZWVyMiA9IG5ld3dpbigxMCwgMjUsIDAsIDApKSA9PSAwIHx8CisJKGxvb2tkZWVyMyA9IG5ld3dpbigxMCwgMjUsIDAsIDApKSA9PSAwIHx8CisJKGxvb2tkZWVyNCA9IG5ld3dpbigxMCwgMjUsIDAsIDApKSA9PSAwIHx8CisKKwkod19ob2xpZGF5ID0gbmV3d2luKDEsIDI2LCAzLCAyNykpID09IDAgfHwKKworCSh3X2RlbF9tc2cgPSBuZXd3aW4oMSwgMTksIDIzLCA2MCkpID09IDApIHsKKwllbmR3aW4oKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjcmVhdGUgd2luZG93cyAtIHNjcmVlbiB0b28gc21hbGxcbiIpOworCUV4aXRQcm9ncmFtKEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgbXZ3YWRkc3RyKHdfZGVsX21zZywgMCwgMCwgIkhpdCBhbnkga2V5IHRvIHF1aXQiKTsKKworICAgIG12d2FkZHN0cih3X2hvbGlkYXksIDAsIDAsICJIIEEgUCBQIFkgIEggTyBMIEkgRCBBIFkgUyIpOworCisgICAgLyogc2V0IHVwIHRoZSB3aW5kb3dzIGZvciBvdXIgdmFyaW91cyByZWluZGVlciAqLworCisgICAgLyogbGlsZGVlcjEgKi8KKyAgICBtdndhZGRjaChsaWxkZWVyMSwgMCwgMCwgKGNodHlwZSkgJ1YnKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMSwgMSwgMCwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMSwgMSwgMSwgKGNodHlwZSkgJzwnKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMSwgMSwgMiwgKGNodHlwZSkgJz4nKTsKKyAgICBtdndhZGRjaChsaWxkZWVyMSwgMSwgMywgKGNodHlwZSkgJ34nKTsKKworICAgIC8qIGxpbGRlZXIyICovCisgICAgbXZ3YWRkY2gobGlsZGVlcjIsIDAsIDAsIChjaHR5cGUpICdWJyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjIsIDEsIDAsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjIsIDEsIDEsIChjaHR5cGUpICd8Jyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjIsIDEsIDIsIChjaHR5cGUpICd8Jyk7CisgICAgbXZ3YWRkY2gobGlsZGVlcjIsIDEsIDMsIChjaHR5cGUpICd+Jyk7CisKKyAgICAvKiBsaWxkZWVyMyAqLworICAgIG12d2FkZGNoKGxpbGRlZXIzLCAwLCAwLCAoY2h0eXBlKSAnVicpOworICAgIG12d2FkZGNoKGxpbGRlZXIzLCAxLCAwLCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKGxpbGRlZXIzLCAxLCAxLCAoY2h0eXBlKSAnPicpOworICAgIG12d2FkZGNoKGxpbGRlZXIzLCAxLCAyLCAoY2h0eXBlKSAnPCcpOworICAgIG12d2FkZGNoKGxpbGRlZXIyLCAxLCAzLCAoY2h0eXBlKSAnficpOworCisgICAgLyogbWlkZGVlcjEgKi8KKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMCwgMiwgKGNodHlwZSkgJ3knKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMCwgMywgKGNodHlwZSkgJ3knKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMSwgMiwgKGNodHlwZSkgJzAnKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMSwgMywgKGNodHlwZSkgJygnKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMSwgNCwgKGNodHlwZSkgJz0nKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMSwgNSwgKGNodHlwZSkgJyknKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMSwgNiwgKGNodHlwZSkgJ34nKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMSwgMiwgMywgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2gobWlkZGVlcjEsIDIsIDQsIChjaHR5cGUpICcvJyk7CisKKyAgICAvKiBtaWRkZWVyMiAqLworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAwLCAyLCAoY2h0eXBlKSAneScpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAwLCAzLCAoY2h0eXBlKSAneScpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAxLCAyLCAoY2h0eXBlKSAnMCcpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAxLCAzLCAoY2h0eXBlKSAnKCcpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAxLCA0LCAoY2h0eXBlKSAnPScpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAxLCA1LCAoY2h0eXBlKSAnKScpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAxLCA2LCAoY2h0eXBlKSAnficpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAyLCAzLCAoY2h0eXBlKSAnfCcpOworICAgIG12d2FkZGNoKG1pZGRlZXIyLCAyLCA1LCAoY2h0eXBlKSAnfCcpOworCisgICAgLyogbWlkZGVlcjMgKi8KKyAgICBtdndhZGRjaChtaWRkZWVyMywgMCwgMiwgKGNodHlwZSkgJ3knKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMCwgMywgKGNodHlwZSkgJ3knKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMSwgMiwgKGNodHlwZSkgJzAnKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMSwgMywgKGNodHlwZSkgJygnKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMSwgNCwgKGNodHlwZSkgJz0nKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMSwgNSwgKGNodHlwZSkgJyknKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMSwgNiwgKGNodHlwZSkgJ34nKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMiwgMiwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChtaWRkZWVyMywgMiwgNiwgKGNodHlwZSkgJ1xcJyk7CisKKyAgICAvKiBiaWdkZWVyMSAqLworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAwLCAxNywgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDAsIDE4LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAwLCAyMCwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDAsIDIxLCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAxLCAxOCwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDEsIDIwLCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAyLCAxOSwgKGNodHlwZSkgJ3wnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgMiwgMjAsIChjaHR5cGUpICdfJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDMsIDE4LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCAzLCAxOSwgKGNodHlwZSkgJ14nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgMywgMjAsIChjaHR5cGUpICcwJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDMsIDIxLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMSwgNCwgMTcsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDQsIDE4LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIxLCA0LCAxOSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjEsIDQsIDIyLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjEsIDUsIDcsICJefn5+fn5+fn4vLyAgfn5VIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIxLCA2LCA3LCAiKCBcXF9fX19fKCAvIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIxLCA3LCA4LCAiKCApICAgIC8iKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjEsIDgsIDksICJcXFxcICAgLyIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMSwgOSwgMTEsICJcXD4vPiIpOworCisgICAgLyogYmlnZGVlcjIgKi8KKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMCwgMTcsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCAwLCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMCwgMjAsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCAwLCAyMSwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMSwgMTgsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCAxLCAyMCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMiwgMTksIChjaHR5cGUpICd8Jyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDIsIDIwLCAoY2h0eXBlKSAnXycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCAzLCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgMywgMTksIChjaHR5cGUpICdeJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDMsIDIwLCAoY2h0eXBlKSAnMCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCAzLCAyMSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjIsIDQsIDE3LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCA0LCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMiwgNCwgMTksIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIyLCA0LCAyMiwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIyLCA1LCA3LCAiXn5+fn5+fn5+Ly8gIH5+VSIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMiwgNiwgNywgIigoIClfX19fKCAvIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIyLCA3LCA3LCAiKCAvICAgICAgfCIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMiwgOCwgOCwgIlxcLyAgICAgIHwiKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjIsIDksIDksICJ8PiAgICAgfD4iKTsKKworICAgIC8qIGJpZ2RlZXIzICovCisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDAsIDE3LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgMCwgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDAsIDIwLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgMCwgMjEsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDEsIDE4LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgMSwgMjAsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDIsIDE5LCAoY2h0eXBlKSAnfCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCAyLCAyMCwgKGNodHlwZSkgJ18nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgMywgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDMsIDE5LCAoY2h0eXBlKSAnXicpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCAzLCAyMCwgKGNodHlwZSkgJzAnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgMywgMjEsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXIzLCA0LCAxNywgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgNCwgMTgsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjMsIDQsIDE5LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaChiaWdkZWVyMywgNCwgMjIsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZHN0cihiaWdkZWVyMywgNSwgNywgIl5+fn5+fn5+fi8vICB+flUiKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjMsIDYsIDYsICIoICgpX19fX18oIC8iKTsKKyAgICBtdndhZGRzdHIoYmlnZGVlcjMsIDcsIDYsICIvIC8gICAgICAgLyIpOworICAgIG12d2FkZHN0cihiaWdkZWVyMywgOCwgNSwgInwvICAgICAgICAgIFxcIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXIzLCA5LCA1LCAiLz4gICAgICAgICAgIFxcPiIpOworCisgICAgLyogYmlnZGVlcjQgKi8KKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMCwgMTcsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCAwLCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMCwgMjAsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCAwLCAyMSwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMSwgMTgsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCAxLCAyMCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMiwgMTksIChjaHR5cGUpICd8Jyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDIsIDIwLCAoY2h0eXBlKSAnXycpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCAzLCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgMywgMTksIChjaHR5cGUpICdeJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDMsIDIwLCAoY2h0eXBlKSAnMCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCAzLCAyMSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2goYmlnZGVlcjQsIDQsIDE3LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCA0LCAxOCwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaChiaWdkZWVyNCwgNCwgMTksIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKGJpZ2RlZXI0LCA0LCAyMiwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXI0LCA1LCA3LCAiXn5+fn5+fn5+Ly8gIH5+VSIpOworICAgIG12d2FkZHN0cihiaWdkZWVyNCwgNiwgNiwgIiggKV9fX19fXyggLyIpOworICAgIG12d2FkZHN0cihiaWdkZWVyNCwgNywgNSwgIigvICAgICAgICAgIFxcIik7CisgICAgbXZ3YWRkc3RyKGJpZ2RlZXI0LCA4LCAwLCAidl9fXz0gICAgICAgICAgICAgLS0tLV4iKTsKKworICAgIC8qIGxvb2tkZWVyMSAqLworICAgIG12d2FkZHN0cihsb29rZGVlcjEsIDAsIDE2LCAiXFwvICAgICBcXC8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIxLCAxLCAxNywgIlxcWS8gXFxZLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjEsIDIsIDE5LCAiXFw9LyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjEsIDMsIDE3LCAiXlxcbyBvL14iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIxLCA0LCAxNywgIi8vKCApIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMSwgNSwgNywgIl5+fn5+fn5+fi8vIFxcTy8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIxLCA2LCA3LCAiKCBcXF9fX19fKCAvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMSwgNywgOCwgIiggKSAgICAvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMSwgOCwgOSwgIlxcXFwgICAvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMSwgOSwgMTEsICJcXD4vPiIpOworCisgICAgLyogbG9va2RlZXIyICovCisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMiwgMCwgMTYsICJcXC8gICAgIFxcLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDEsIDE3LCAiXFxZLyBcXFkvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMiwgMiwgMTksICJcXD0vIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMiwgMywgMTcsICJeXFxvIG8vXiIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDQsIDE3LCAiLy8oICkiKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIyLCA1LCA3LCAiXn5+fn5+fn5+Ly8gXFxPLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDYsIDcsICIoKCApX19fXyggLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjIsIDcsIDcsICIoIC8gICAgICB8Iik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMiwgOCwgOCwgIlxcLyAgICAgIHwiKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIyLCA5LCA5LCAifD4gICAgIHw+Iik7CisKKyAgICAvKiBsb29rZGVlcjMgKi8KKyAgICBtdndhZGRzdHIobG9va2RlZXIzLCAwLCAxNiwgIlxcLyAgICAgXFwvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMywgMSwgMTcsICJcXFkvIFxcWS8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIzLCAyLCAxOSwgIlxcPS8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXIzLCAzLCAxNywgIl5cXG8gby9eIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMywgNCwgMTcsICIvLyggKSIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjMsIDUsIDcsICJefn5+fn5+fn4vLyBcXE8vIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyMywgNiwgNiwgIiggKClfX19fXyggLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjMsIDcsIDYsICIvIC8gICAgICAgLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjMsIDgsIDUsICJ8LyAgICAgICAgICBcXCIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjMsIDksIDUsICIvPiAgICAgICAgICAgXFw+Iik7CisKKyAgICAvKiBsb29rZGVlcjQgKi8KKyAgICBtdndhZGRzdHIobG9va2RlZXI0LCAwLCAxNiwgIlxcLyAgICAgXFwvIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyNCwgMSwgMTcsICJcXFkvIFxcWS8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXI0LCAyLCAxOSwgIlxcPS8iKTsKKyAgICBtdndhZGRzdHIobG9va2RlZXI0LCAzLCAxNywgIl5cXG8gby9eIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyNCwgNCwgMTcsICIvLyggKSIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjQsIDUsIDcsICJefn5+fn5+fn4vLyBcXE8vIik7CisgICAgbXZ3YWRkc3RyKGxvb2tkZWVyNCwgNiwgNiwgIiggKV9fX19fXyggLyIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjQsIDcsIDUsICIoLyAgICAgICAgICBcXCIpOworICAgIG12d2FkZHN0cihsb29rZGVlcjQsIDgsIDAsICJ2X19fPSAgICAgICAgICAgICAtLS0tXiIpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIGNicmVhaygpOworICAgIG5vZGVsYXkoc3Rkc2NyLCBUUlVFKTsKKyAgICBmb3IgKDs7KSB7CisJY2xlYXIoKTsKKwl3ZXJhc2UodHJlZXNjcm4pOworCXRvdWNod2luKHdfZGVsX21zZyk7CisJdG91Y2h3aW4odHJlZXNjcm4pOworCXdlcmFzZSh0cmVlc2NybjIpOworCXRvdWNod2luKHRyZWVzY3JuMik7CisJd2VyYXNlKHRyZWVzY3JuOCk7CisJdG91Y2h3aW4odHJlZXNjcm44KTsKKwlyZWZyZXNoKCk7CisJbG9va19vdXQoMTUwKTsKKwlib3hpdCgpOworCXJlZnJlc2goKTsKKwlsb29rX291dCgxNTApOworCXNlYXMoKTsKKwlyZWZyZXNoKCk7CisJbG9va19vdXQoMTUwKTsKKwlncmVldCgpOworCXJlZnJlc2goKTsKKwlsb29rX291dCgxNTApOworCWZyb213aG8oKTsKKwlyZWZyZXNoKCk7CisJbG9va19vdXQoMTUwKTsKKwl0cmVlKCk7CisJbG9va19vdXQoMTUwKTsKKwliYWxscygpOworCWxvb2tfb3V0KDE1MCk7CisJc3RhcigpOworCWxvb2tfb3V0KDE1MCk7CisJc3RybmcxKCk7CisJc3RybmcyKCk7CisJc3RybmczKCk7CisJc3Rybmc0KCk7CisJc3Rybmc1KCk7CisKKwkvKiBzZXQgdXAgdGhlIHdpbmRvd3MgZm9yIG91ciBibGlua2luZyB0cmVlcyAqLworCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwkvKiB0cmVlc2NybjMgKi8KKworCW92ZXJsYXkodHJlZXNjcm4sIHRyZWVzY3JuMyk7CisKKwkvKmJhbGxzICovCisJbXZ3YWRkY2godHJlZXNjcm4zLCA0LCAxOCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjMsIDcsIDYsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCA4LCAxOSwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjMsIDExLCAyMiwgJyAnKTsKKworCS8qc3RhciAqLworCW12d2FkZGNoKHRyZWVzY3JuMywgMCwgMTIsICcqJyk7CisKKwkvKnN0cm5nMSAqLworCW12d2FkZGNoKHRyZWVzY3JuMywgMywgMTEsICcgJyk7CisKKwkvKnN0cm5nMiAqLworCW12d2FkZGNoKHRyZWVzY3JuMywgNSwgMTMsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm4zLCA2LCAxMCwgJyAnKTsKKworCS8qc3RybmczICovCisJbXZ3YWRkY2godHJlZXNjcm4zLCA3LCAxNiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjMsIDcsIDE0LCAnICcpOworCisJLypzdHJuZzQgKi8KKwltdndhZGRjaCh0cmVlc2NybjMsIDEwLCAxMywgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjMsIDEwLCAxMCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjMsIDExLCA4LCAnICcpOworCisJLypzdHJuZzUgKi8KKwltdndhZGRjaCh0cmVlc2NybjMsIDExLCAxOCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjMsIDEyLCAxMywgJyAnKTsKKworCS8qIHRyZWVzY3JuNCAqLworCisJb3ZlcmxheSh0cmVlc2NybiwgdHJlZXNjcm40KTsKKworCS8qYmFsbHMgKi8KKwltdndhZGRjaCh0cmVlc2NybjQsIDMsIDksICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCA0LCAxNiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjQsIDcsIDYsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCA4LCAxOSwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjQsIDExLCAyLCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNCwgMTIsIDIzLCAnICcpOworCisJLypzdGFyICovCisJd3N0YW5kb3V0KHRyZWVzY3JuNCk7CisJbXZ3YWRkY2godHJlZXNjcm40LCAwLCAxMiwgJyonKTsKKwl3c3RhbmRlbmQodHJlZXNjcm40KTsKKworCS8qc3RybmcxICovCisJbXZ3YWRkY2godHJlZXNjcm40LCAzLCAxMywgJyAnKTsKKworCS8qc3RybmcyICovCisKKwkvKnN0cm5nMyAqLworCW12d2FkZGNoKHRyZWVzY3JuNCwgNywgMTUsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm40LCA4LCAxMSwgJyAnKTsKKworCS8qc3Rybmc0ICovCisJbXZ3YWRkY2godHJlZXNjcm40LCA5LCAxNiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjQsIDEwLCAxMiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjQsIDExLCA4LCAnICcpOworCisJLypzdHJuZzUgKi8KKwltdndhZGRjaCh0cmVlc2NybjQsIDExLCAxOCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjQsIDEyLCAxNCwgJyAnKTsKKworCS8qIHRyZWVzY3JuNSAqLworCisJb3ZlcmxheSh0cmVlc2NybiwgdHJlZXNjcm41KTsKKworCS8qYmFsbHMgKi8KKwltdndhZGRjaCh0cmVlc2NybjUsIDMsIDE1LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNSwgMTAsIDIwLCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNSwgMTIsIDEsICcgJyk7CisKKwkvKnN0YXIgKi8KKwltdndhZGRjaCh0cmVlc2NybjUsIDAsIDEyLCAnKicpOworCisJLypzdHJuZzEgKi8KKwltdndhZGRjaCh0cmVlc2NybjUsIDMsIDExLCAnICcpOworCisJLypzdHJuZzIgKi8KKwltdndhZGRjaCh0cmVlc2NybjUsIDUsIDEyLCAnICcpOworCisJLypzdHJuZzMgKi8KKwltdndhZGRjaCh0cmVlc2NybjUsIDcsIDE0LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNSwgOCwgMTAsICcgJyk7CisKKwkvKnN0cm5nNCAqLworCW12d2FkZGNoKHRyZWVzY3JuNSwgOSwgMTUsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm41LCAxMCwgMTEsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm41LCAxMSwgNywgJyAnKTsKKworCS8qc3Rybmc1ICovCisJbXZ3YWRkY2godHJlZXNjcm41LCAxMSwgMTcsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm41LCAxMiwgMTMsICcgJyk7CisKKwkvKiB0cmVlc2NybjYgKi8KKworCW92ZXJsYXkodHJlZXNjcm4sIHRyZWVzY3JuNik7CisKKwkvKmJhbGxzICovCisJbXZ3YWRkY2godHJlZXNjcm42LCA2LCA3LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNiwgNywgMTgsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm42LCAxMCwgNCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjYsIDExLCAyMywgJyAnKTsKKworCS8qc3RhciAqLworCXdzdGFuZG91dCh0cmVlc2NybjYpOworCW12d2FkZGNoKHRyZWVzY3JuNiwgMCwgMTIsICcqJyk7CisJd3N0YW5kZW5kKHRyZWVzY3JuNik7CisKKwkvKnN0cm5nMSAqLworCisJLypzdHJuZzIgKi8KKwltdndhZGRjaCh0cmVlc2NybjYsIDUsIDExLCAnICcpOworCisJLypzdHJuZzMgKi8KKwltdndhZGRjaCh0cmVlc2NybjYsIDcsIDEzLCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNiwgOCwgOSwgJyAnKTsKKworCS8qc3Rybmc0ICovCisJbXZ3YWRkY2godHJlZXNjcm42LCA5LCAxNCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjYsIDEwLCAxMCwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjYsIDExLCA2LCAnICcpOworCisJLypzdHJuZzUgKi8KKwltdndhZGRjaCh0cmVlc2NybjYsIDExLCAxNiwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjYsIDEyLCAxMiwgJyAnKTsKKworCS8qIHRyZWVzY3JuNyAqLworCisJb3ZlcmxheSh0cmVlc2NybiwgdHJlZXNjcm43KTsKKworCS8qYmFsbHMgKi8KKwltdndhZGRjaCh0cmVlc2NybjcsIDMsIDE1LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNywgNiwgNywgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDcsIDE4LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNywgMTAsIDQsICcgJyk7CisJbXZ3YWRkY2godHJlZXNjcm43LCAxMSwgMjIsICcgJyk7CisKKwkvKnN0YXIgKi8KKwltdndhZGRjaCh0cmVlc2NybjcsIDAsIDEyLCAnKicpOworCisJLypzdHJuZzEgKi8KKwltdndhZGRjaCh0cmVlc2NybjcsIDMsIDEyLCAnICcpOworCisJLypzdHJuZzIgKi8KKwltdndhZGRjaCh0cmVlc2NybjcsIDUsIDEzLCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNywgNiwgOSwgJyAnKTsKKworCS8qc3RybmczICovCisJbXZ3YWRkY2godHJlZXNjcm43LCA3LCAxNSwgJyAnKTsKKwltdndhZGRjaCh0cmVlc2NybjcsIDgsIDExLCAnICcpOworCisJLypzdHJuZzQgKi8KKwltdndhZGRjaCh0cmVlc2NybjcsIDksIDE2LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNywgMTAsIDEyLCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNywgMTEsIDgsICcgJyk7CisKKwkvKnN0cm5nNSAqLworCW12d2FkZGNoKHRyZWVzY3JuNywgMTEsIDE4LCAnICcpOworCW12d2FkZGNoKHRyZWVzY3JuNywgMTIsIDE0LCAnICcpOworCisJbG9va19vdXQoMTUwKTsKKwlyZWluZGVlcigpOworCisJdG91Y2h3aW4od19ob2xpZGF5KTsKKwl3cmVmcmVzaCh3X2hvbGlkYXkpOworCXdyZWZyZXNoKHdfZGVsX21zZyk7CisKKwlsb29rX291dCg1MDApOworCWZvciAobG9vcHkgPSAwOyBsb29weSA8IDEwMDsgbG9vcHkrKykgeworCSAgICBibGlua2l0KCk7CisJfQorCisjaWZkZWYgTk9MT09QCisJZG9uZSgwKTsKKyNlbmRpZgorICAgIH0KKyAgICAvKk5PVFJFQUNIRUQgKi8KK30KKworc3RhdGljIGludAorYm94aXQodm9pZCkKK3sKKyAgICBpbnQgeCA9IDA7CisKKyAgICB3aGlsZSAoeCA8IDIwKSB7CisJbXZhZGRjaCh4LCA3LCAnfCcpOworCSsreDsKKyAgICB9CisKKyAgICB4ID0gODsKKworICAgIHdoaWxlICh4IDwgODApIHsKKwltdmFkZGNoKDE5LCB4LCAnXycpOworCSsreDsKKyAgICB9CisKKyAgICB4ID0gMDsKKworICAgIHdoaWxlICh4IDwgODApIHsKKwltdmFkZGNoKDIyLCB4LCAnXycpOworCSsreDsKKyAgICB9CisKKyAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzZWFzKHZvaWQpCit7CisgICAgbXZhZGRjaCg0LCAxLCAnUycpOworICAgIG12YWRkY2goNiwgMSwgJ0UnKTsKKyAgICBtdmFkZGNoKDgsIDEsICdBJyk7CisgICAgbXZhZGRjaCgxMCwgMSwgJ1MnKTsKKyAgICBtdmFkZGNoKDEyLCAxLCAnTycpOworICAgIG12YWRkY2goMTQsIDEsICdOJyk7CisgICAgbXZhZGRjaCgxNiwgMSwgJ2AnKTsKKyAgICBtdmFkZGNoKDE4LCAxLCAnUycpOworCisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ3JlZXQodm9pZCkKK3sKKyAgICBtdmFkZGNoKDMsIDUsICdHJyk7CisgICAgbXZhZGRjaCg1LCA1LCAnUicpOworICAgIG12YWRkY2goNywgNSwgJ0UnKTsKKyAgICBtdmFkZGNoKDksIDUsICdFJyk7CisgICAgbXZhZGRjaCgxMSwgNSwgJ1QnKTsKKyAgICBtdmFkZGNoKDEzLCA1LCAnSScpOworICAgIG12YWRkY2goMTUsIDUsICdOJyk7CisgICAgbXZhZGRjaCgxNywgNSwgJ0cnKTsKKyAgICBtdmFkZGNoKDE5LCA1LCAnUycpOworCisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZnJvbXdobyh2b2lkKQoreworICAgIG12YWRkc3RyKDIxLCAxMywgRlJPTVdITyk7CisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAordHJlZSh2b2lkKQoreworICAgIHNldF9jb2xvcih0cmVlc2NybiwgQ09MT1JfR1JFRU4pOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAxLCAxMSwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgMiwgMTEsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDMsIDEwLCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA0LCA5LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA1LCA5LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA2LCA4LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA3LCA3LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA4LCA2LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA5LCA2LCAoY2h0eXBlKSAnLycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAxMCwgNSwgKGNodHlwZSkgJy8nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgMTEsIDMsIChjaHR5cGUpICcvJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDEyLCAyLCAoY2h0eXBlKSAnLycpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDEsIDEzLCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgMiwgMTMsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCAzLCAxNCwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDQsIDE1LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgNSwgMTUsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA2LCAxNiwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDcsIDE3LCAoY2h0eXBlKSAnXFwnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgOCwgMTgsIChjaHR5cGUpICdcXCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA5LCAxOCwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDEwLCAxOSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDExLCAyMSwgKGNodHlwZSkgJ1xcJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDEyLCAyMiwgKGNodHlwZSkgJ1xcJyk7CisKKyAgICBtdndhZGRjaCh0cmVlc2NybiwgNCwgMTAsIChjaHR5cGUpICdfJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4sIDQsIDE0LCAoY2h0eXBlKSAnXycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA4LCA3LCAoY2h0eXBlKSAnXycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuLCA4LCAxNywgKGNodHlwZSkgJ18nKTsKKworICAgIG12d2FkZHN0cih0cmVlc2NybiwgMTMsIDAsICIvLy8vLy8vLy8vLy8gXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIik7CisKKyAgICBtdndhZGRzdHIodHJlZXNjcm4sIDE0LCAxMSwgInwgfCIpOworICAgIG12d2FkZHN0cih0cmVlc2NybiwgMTUsIDExLCAifF98Iik7CisKKyAgICB1bnNldF9jb2xvcih0cmVlc2Nybik7CisgICAgd3JlZnJlc2godHJlZXNjcm4pOworICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisKKyAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitiYWxscyh2b2lkKQoreworICAgIG92ZXJsYXkodHJlZXNjcm4sIHRyZWVzY3JuMik7CisKKyAgICBzZXRfY29sb3IodHJlZXNjcm4yLCBDT0xPUl9CTFVFKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDMsIDksIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAzLCAxNSwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDQsIDgsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA0LCAxNiwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDUsIDcsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA1LCAxNywgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDcsIDYsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA3LCAxOCwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDgsIDUsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA4LCAxOSwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEwLCA0LCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTAsIDIwLCAoY2h0eXBlKSAnQCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDIsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMSwgMjIsIChjaHR5cGUpICdAJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMiwgMSwgKGNodHlwZSkgJ0AnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEyLCAyMywgKGNodHlwZSkgJ0AnKTsKKworICAgIHVuc2V0X2NvbG9yKHRyZWVzY3JuMik7CisgICAgd3JlZnJlc2godHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3N0YXIodm9pZCkKK3sKKyAgICB3YXR0cnNldCh0cmVlc2NybjIsIEFfQk9MRCB8IEFfQkxJTkspOworICAgIHNldF9jb2xvcih0cmVlc2NybjIsIENPTE9SX1lFTExPVyk7CisKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDAsIDEyLCAoY2h0eXBlKSAnKicpOworICAgIHdzdGFuZGVuZCh0cmVlc2NybjIpOworCisgICAgdW5zZXRfY29sb3IodHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh0cmVlc2NybjIpOworICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorc3RybmcxKHZvaWQpCit7CisgICAgd2F0dHJzZXQodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICBzZXRfY29sb3IodHJlZXNjcm4yLCBDT0xPUl9XSElURSk7CisKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDMsIDEzLCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDMsIDEyLCAoY2h0eXBlKSAnOicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMywgMTEsIChjaHR5cGUpICcuJyk7CisKKyAgICB3YXR0cm9mZih0cmVlc2NybjIsIEFfQk9MRCB8IEFfQkxJTkspOworICAgIHVuc2V0X2NvbG9yKHRyZWVzY3JuMik7CisKKyAgICB3cmVmcmVzaCh0cmVlc2NybjIpOworICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorc3RybmcyKHZvaWQpCit7CisgICAgd2F0dHJzZXQodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICBzZXRfY29sb3IodHJlZXNjcm4yLCBDT0xPUl9XSElURSk7CisKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDUsIDE0LCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDUsIDEzLCAoY2h0eXBlKSAnOicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgNSwgMTIsIChjaHR5cGUpICcuJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA1LCAxMSwgKGNodHlwZSkgJywnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDYsIDEwLCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDYsIDksIChjaHR5cGUpICc6Jyk7CisKKyAgICB3YXR0cm9mZih0cmVlc2NybjIsIEFfQk9MRCB8IEFfQkxJTkspOworICAgIHVuc2V0X2NvbG9yKHRyZWVzY3JuMik7CisKKyAgICB3cmVmcmVzaCh0cmVlc2NybjIpOworICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorc3RybmczKHZvaWQpCit7CisgICAgd2F0dHJzZXQodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICBzZXRfY29sb3IodHJlZXNjcm4yLCBDT0xPUl9XSElURSk7CisKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDcsIDE2LCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDcsIDE1LCAoY2h0eXBlKSAnOicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgNywgMTQsIChjaHR5cGUpICcuJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA3LCAxMywgKGNodHlwZSkgJywnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDgsIDEyLCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDgsIDExLCAoY2h0eXBlKSAnOicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgOCwgMTAsIChjaHR5cGUpICcuJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA4LCA5LCAoY2h0eXBlKSAnLCcpOworCisgICAgd2F0dHJvZmYodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpOworCisgICAgd3JlZnJlc2godHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3N0cm5nNCh2b2lkKQoreworICAgIHdhdHRyc2V0KHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgQ09MT1JfV0hJVEUpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA5LCAxNywgKGNodHlwZSkgJ1wnJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCA5LCAxNiwgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDksIDE1LCAoY2h0eXBlKSAnLicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgOSwgMTQsIChjaHR5cGUpICcsJyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMCwgMTMsIChjaHR5cGUpICdcJycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTAsIDEyLCAoY2h0eXBlKSAnOicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTAsIDExLCAoY2h0eXBlKSAnLicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTAsIDEwLCAoY2h0eXBlKSAnLCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDksIChjaHR5cGUpICdcJycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDgsIChjaHR5cGUpICc6Jyk7CisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMSwgNywgKGNodHlwZSkgJy4nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDExLCA2LCAoY2h0eXBlKSAnLCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTIsIDUsIChjaHR5cGUpICdcJycpOworCisgICAgd2F0dHJvZmYodHJlZXNjcm4yLCBBX0JPTEQgfCBBX0JMSU5LKTsKKyAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpOworCisgICAgd3JlZnJlc2godHJlZXNjcm4yKTsKKyAgICB3cmVmcmVzaCh3X2RlbF9tc2cpOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK3N0cm5nNSh2b2lkKQoreworICAgIHdhdHRyc2V0KHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgQ09MT1JfV0hJVEUpOworCisgICAgbXZ3YWRkY2godHJlZXNjcm4yLCAxMSwgMTksIChjaHR5cGUpICdcJycpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDE4LCAoY2h0eXBlKSAnOicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDE3LCAoY2h0eXBlKSAnLicpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTEsIDE2LCAoY2h0eXBlKSAnLCcpOworICAgIG12d2FkZGNoKHRyZWVzY3JuMiwgMTIsIDE1LCAoY2h0eXBlKSAnXCcnKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEyLCAxNCwgKGNodHlwZSkgJzonKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEyLCAxMywgKGNodHlwZSkgJy4nKTsKKyAgICBtdndhZGRjaCh0cmVlc2NybjIsIDEyLCAxMiwgKGNodHlwZSkgJywnKTsKKworICAgIHdhdHRyb2ZmKHRyZWVzY3JuMiwgQV9CT0xEIHwgQV9CTElOSyk7CisgICAgdW5zZXRfY29sb3IodHJlZXNjcm4yKTsKKworICAgIC8qIHNhdmUgYSBmdWxseSBsaXQgdHJlZSAqLworICAgIG92ZXJsYXkodHJlZXNjcm4yLCB0cmVlc2Nybik7CisKKyAgICB3cmVmcmVzaCh0cmVlc2NybjIpOworICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorYmxpbmtpdCh2b2lkKQoreworICAgIHN0YXRpYyBpbnQgY3ljbGU7CisKKyAgICBpZiAoY3ljbGUgPiA0KSB7CisJY3ljbGUgPSAwOworICAgIH0KKworICAgIHRvdWNod2luKHRyZWVzY3JuOCk7CisKKyAgICBzd2l0Y2ggKGN5Y2xlKSB7CisgICAgY2FzZSAwOgorCW92ZXJsYXkodHJlZXNjcm4zLCB0cmVlc2NybjgpOworCXdyZWZyZXNoKHRyZWVzY3JuOCk7CisJd3JlZnJlc2god19kZWxfbXNnKTsKKwlicmVhazsKKyAgICBjYXNlIDE6CisJb3ZlcmxheSh0cmVlc2NybjQsIHRyZWVzY3JuOCk7CisJd3JlZnJlc2godHJlZXNjcm44KTsKKwl3cmVmcmVzaCh3X2RlbF9tc2cpOworCWJyZWFrOworICAgIGNhc2UgMjoKKwlvdmVybGF5KHRyZWVzY3JuNSwgdHJlZXNjcm44KTsKKwl3cmVmcmVzaCh0cmVlc2NybjgpOworCXdyZWZyZXNoKHdfZGVsX21zZyk7CisJYnJlYWs7CisgICAgY2FzZSAzOgorCW92ZXJsYXkodHJlZXNjcm42LCB0cmVlc2NybjgpOworCXdyZWZyZXNoKHRyZWVzY3JuOCk7CisJd3JlZnJlc2god19kZWxfbXNnKTsKKwlicmVhazsKKyAgICBjYXNlIDQ6CisJb3ZlcmxheSh0cmVlc2NybjcsIHRyZWVzY3JuOCk7CisJd3JlZnJlc2godHJlZXNjcm44KTsKKwl3cmVmcmVzaCh3X2RlbF9tc2cpOworCWJyZWFrOworICAgIH0KKyAgICB0b3VjaHdpbih0cmVlc2NybjgpOworCisgICAgLypBTEwgT04qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisgICAgb3ZlcmxheSh0cmVlc2NybiwgdHJlZXNjcm44KTsKKyAgICB3cmVmcmVzaCh0cmVlc2NybjgpOworICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisKKyAgICArK2N5Y2xlOworICAgIHJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWVyX3N0ZXAoV0lORE9XICp3aW4sIGludCB5LCBpbnQgeCkKK3sKKyAgICBtdndpbih3aW4sIHksIHgpOworICAgIHdyZWZyZXNoKHdpbik7CisgICAgd3JlZnJlc2god19kZWxfbXNnKTsKKyAgICBsb29rX291dCg1KTsKK30KKworc3RhdGljIGludAorcmVpbmRlZXIodm9pZCkKK3sKKyAgICBpbnQgbG9vcGVyOworICAgIHlfcG9zID0gMDsKKworICAgIGZvciAoeF9wb3MgPSA3MDsgeF9wb3MgPiA2MjsgeF9wb3MtLSkgeworCWlmICh4X3BvcyA8IDYyKSB7CisJICAgIHlfcG9zID0gMTsKKwl9CisJZm9yIChsb29wZXIgPSAwOyBsb29wZXIgPCA0OyBsb29wZXIrKykgeworCSAgICBtdndhZGRjaChkb3RkZWVyMCwgeV9wb3MsIHhfcG9zLCAoY2h0eXBlKSAnLicpOworCSAgICB3cmVmcmVzaChkb3RkZWVyMCk7CisJICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisJICAgIHdlcmFzZShkb3RkZWVyMCk7CisJICAgIHdyZWZyZXNoKGRvdGRlZXIwKTsKKwkgICAgd3JlZnJlc2god19kZWxfbXNnKTsKKwkgICAgbG9va19vdXQoNTApOworCX0KKyAgICB9CisKKyAgICB5X3BvcyA9IDI7CisKKyAgICBmb3IgKDsgeF9wb3MgPiA1MDsgeF9wb3MtLSkgeworCWZvciAobG9vcGVyID0gMDsgbG9vcGVyIDwgNDsgbG9vcGVyKyspIHsKKworCSAgICBpZiAoeF9wb3MgPCA1NikgeworCQl5X3BvcyA9IDM7CisKKwkJbXZ3YWRkY2goc3RhcmRlZXIwLCB5X3BvcywgeF9wb3MsIChjaHR5cGUpICcqJyk7CisJCXdyZWZyZXNoKHN0YXJkZWVyMCk7CisJCXdyZWZyZXNoKHdfZGVsX21zZyk7CisJCXdlcmFzZShzdGFyZGVlcjApOworCQl3cmVmcmVzaChzdGFyZGVlcjApOworCQl3cmVmcmVzaCh3X2RlbF9tc2cpOworCSAgICB9IGVsc2UgeworCQltdndhZGRjaChkb3RkZWVyMCwgeV9wb3MsIHhfcG9zLCAoY2h0eXBlKSAnKicpOworCQl3cmVmcmVzaChkb3RkZWVyMCk7CisJCXdyZWZyZXNoKHdfZGVsX21zZyk7CisJCXdlcmFzZShkb3RkZWVyMCk7CisJCXdyZWZyZXNoKGRvdGRlZXIwKTsKKwkJd3JlZnJlc2god19kZWxfbXNnKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICB4X3BvcyA9IDU4OworCisgICAgZm9yICh5X3BvcyA9IDI7IHlfcG9zIDwgNTsgeV9wb3MrKykgeworCisJdG91Y2h3aW4obGlsZGVlcjApOworCXdyZWZyZXNoKGxpbGRlZXIwKTsKKwl3cmVmcmVzaCh3X2RlbF9tc2cpOworCisJZm9yIChsb29wZXIgPSAwOyBsb29wZXIgPCA0OyBsb29wZXIrKykgeworCSAgICBkZWVyX3N0ZXAobGlsZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChsaWxkZWVyMiwgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKGxpbGRlZXIxLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAobGlsZGVlcjIsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChsaWxkZWVyMywgeV9wb3MsIHhfcG9zKTsKKworCSAgICB0b3VjaHdpbihsaWxkZWVyMCk7CisJICAgIHdyZWZyZXNoKGxpbGRlZXIwKTsKKwkgICAgd3JlZnJlc2god19kZWxfbXNnKTsKKworCSAgICB4X3BvcyAtPSAyOworCX0KKyAgICB9CisKKyAgICB4X3BvcyA9IDM1OworCisgICAgZm9yICh5X3BvcyA9IDU7IHlfcG9zIDwgMTA7IHlfcG9zKyspIHsKKworCXRvdWNod2luKG1pZGRlZXIwKTsKKwl3cmVmcmVzaChtaWRkZWVyMCk7CisJd3JlZnJlc2god19kZWxfbXNnKTsKKworCWZvciAobG9vcGVyID0gMDsgbG9vcGVyIDwgMjsgbG9vcGVyKyspIHsKKwkgICAgZGVlcl9zdGVwKG1pZGRlZXIzLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAobWlkZGVlcjIsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChtaWRkZWVyMSwgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKG1pZGRlZXIyLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAobWlkZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisKKwkgICAgdG91Y2h3aW4obWlkZGVlcjApOworCSAgICB3cmVmcmVzaChtaWRkZWVyMCk7CisJICAgIHdyZWZyZXNoKHdfZGVsX21zZyk7CisKKwkgICAgeF9wb3MgLT0gMzsKKwl9CisgICAgfQorCisgICAgbG9va19vdXQoMzAwKTsKKworICAgIHlfcG9zID0gMTsKKworICAgIGZvciAoeF9wb3MgPSA4OyB4X3BvcyA8IDE2OyB4X3BvcysrKSB7CisJZGVlcl9zdGVwKGJpZ2RlZXI0LCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChiaWdkZWVyMywgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAoYmlnZGVlcjIsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGJpZ2RlZXIxLCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChiaWdkZWVyMiwgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAoYmlnZGVlcjMsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGJpZ2RlZXI0LCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChiaWdkZWVyMCwgeV9wb3MsIHhfcG9zKTsKKyAgICB9CisKKyAgICAtLXhfcG9zOworCisgICAgZm9yIChsb29wZXIgPSAwOyBsb29wZXIgPCA2OyBsb29wZXIrKykgeworCWRlZXJfc3RlcChsb29rZGVlcjQsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGxvb2tkZWVyMywgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAobG9va2RlZXIyLCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChsb29rZGVlcjEsIHlfcG9zLCB4X3Bvcyk7CisJZGVlcl9zdGVwKGxvb2tkZWVyMiwgeV9wb3MsIHhfcG9zKTsKKwlkZWVyX3N0ZXAobG9va2RlZXIzLCB5X3BvcywgeF9wb3MpOworCWRlZXJfc3RlcChsb29rZGVlcjQsIHlfcG9zLCB4X3Bvcyk7CisgICAgfQorCisgICAgZGVlcl9zdGVwKGxvb2tkZWVyMCwgeV9wb3MsIHhfcG9zKTsKKworICAgIGZvciAoOyB5X3BvcyA8IDEwOyB5X3BvcysrKSB7CisJZm9yIChsb29wZXIgPSAwOyBsb29wZXIgPCAyOyBsb29wZXIrKykgeworCSAgICBkZWVyX3N0ZXAoYmlnZGVlcjQsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChiaWdkZWVyMywgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKGJpZ2RlZXIyLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAoYmlnZGVlcjEsIHlfcG9zLCB4X3Bvcyk7CisJICAgIGRlZXJfc3RlcChiaWdkZWVyMiwgeV9wb3MsIHhfcG9zKTsKKwkgICAgZGVlcl9zdGVwKGJpZ2RlZXIzLCB5X3BvcywgeF9wb3MpOworCSAgICBkZWVyX3N0ZXAoYmlnZGVlcjQsIHlfcG9zLCB4X3Bvcyk7CisJfQorCWRlZXJfc3RlcChiaWdkZWVyMCwgeV9wb3MsIHhfcG9zKTsKKyAgICB9CisKKyAgICAtLXlfcG9zOworCisgICAgZGVlcl9zdGVwKGxvb2tkZWVyMywgeV9wb3MsIHhfcG9zKTsKKyAgICByZXR1cm4gKDApOworfQorCitzdGF0aWMgUkVUU0lHVFlQRQorZG9uZShpbnQgc2lnIEdDQ19VTlVTRUQpCit7CisgICAgQ0FUQ0hBTEwoZG9uZSk7CisKKyAgICBtb3ZlKExJTkVTIC0gMSwgMCk7CisgICAgcmVmcmVzaCgpOworICAgIGVuZHdpbigpOworICAgIGN1cnNfc2V0KDEpOworCisjaWYgTk9fTEVBS1MKKyAgICBpZiAobXlfcGFpcnMgIT0gMCkKKwlmcmVlKG15X3BhaXJzKTsKKyNlbmRpZgorCisgICAgRXhpdFByb2dyYW0oRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL25jdXJzZXMtNS43L3Rlc3QveHRlcm0tMTZjb2xvci5kYXQgYi9uY3Vyc2VzLTUuNy90ZXN0L3h0ZXJtLTE2Y29sb3IuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDdkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLTUuNy90ZXN0L3h0ZXJtLTE2Y29sb3IuZGF0CkBAIC0wLDAgKzEsNTMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiB4dGVybS0xNmNvbG9yLmRhdCx2IDEuMiAyMDA2LzA0LzIyIDIxOjQwOjAwIHRvbSBFeHAgJAorIyBUaGlzIGlsbHVzdHJhdGVzIHRoZSBwcmVkZWZpbmVkIGNvbG9ycyBmb3IgWEZyZWU4NiB4dGVybSdzICJ4dGVybS0xNmNvbG9yIi4gCisjIElmIHlvdSBzZXQgJFRFUk0gdG8gInh0ZXJtLTg4Y29sb3IiIChhbmQgaGF2ZSB4dGVybSBjb21waWxlZCB0byBzdXBwb3J0IHRoZQorIyA4OC1jb2xvciBvciAyNTYtY29sb3IgZmVhdHVyZSksIHlvdSBjYW4gdXNlIHRoZSBuY3Vyc2VzICdkJyBzY3JlZW4gdG8KKyMgbWFuaXB1bGF0ZSB0aGUgY29sb3JzIHNob3duIGluIHRoZSBzY3JlZW4uICBUaGUgJ2QnIHNjcmVlbiBpcyBsaW1pdGVkIHRvCisjIHRoZSBmaXJzdCAxNiBjb2xvcnMsIGFuZCB4dGVybSBoYXBwZW5zIHRvIHVzZSB0aGUgc2FtZSBmaXJzdCAxNiBjb2xvcnMgaW4KKyMgdGhlIGV4dGVuZGVkIGNvbG9yIG1vZGVscyB0aGF0IHN1cHBvcnQgaW5pdGMuCisjCisjIFRoZSBjb2xvcnMgc2hvd24gYXJlIGZvciB4dGVybSBwYXRjaCAjMTg5Lgorc2NhbGU6MjU1CiswOgkgIDAgICAwICAgMAkJYmxhY2sKKzE6CTIwNSAgIDAJICAwCQlyZWQzCisyOgkgIDAgMjA1CSAgMAkJZ3JlZW4zCiszOgkyMDUgMjA1CSAgMAkJeWVsbG93MworNDoJIDMwIDE0NCAyNTUJCURvZGdlckJsdWUxCis1OgkyMDUgICAwIDIwNQkJbWFnZW50YTMKKzY6CSAgMCAyMDUgMjA1CQljeWFuMworNzoJMjI5IDIyOSAyMjkgCQlncmF5OTAKKzg6CTEyNyAxMjcgMTI3IAkJZ3JheTUwCis5OgkyNTUgICAwICAgMAkJcmVkCisxMDoJICAwIDI1NSAgIDAJCWdyZWVuCisxMToJMjU1IDI1NSAgIDAJCXllbGxvdworMTI6CSA5OSAxODQgMjU1CQlTdGVlbEJsdWUxCisxMzoJMjU1ICAgMCAyNTUJCW1hZ2VudGEKKzE0OgkgIDAgMjU1IDI1NQkJY3lhbgorMTU6CTI1NSAyNTUgMjU1CQl3aGl0ZQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy01LjcvdGVzdC94dGVybS04OGNvbG9yLmRhdCBiL25jdXJzZXMtNS43L3Rlc3QveHRlcm0tODhjb2xvci5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YWExYwotLS0gL2Rldi9udWxsCisrKyBiL25jdXJzZXMtNS43L3Rlc3QveHRlcm0tODhjb2xvci5kYXQKQEAgLTAsMCArMSwxMjUgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDUsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgICAgIworIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCAjCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gICMKKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGRpc3RyaWJ1dGUgICAgIworIyB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byAjCisjIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgICMKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluICMKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SICMKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksICAgIworIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCAgICAjCisjIFRIRSBBQk9WRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAgICAgICMKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgICAgIworIyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSICAgICAgICAjCisjIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZShzKSBvZiB0aGUgYWJvdmUgY29weXJpZ2h0ICAgICAjCisjIGhvbGRlcnMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsICMKKyMgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuICAgICAgICAgICAgICAgIworIyBhdXRob3JpemF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgJElkOiB4dGVybS04OGNvbG9yLmRhdCx2IDEuMiAyMDA2LzA0LzIyIDIxOjQwOjAwIHRvbSBFeHAgJAorIyBUaGlzIGlsbHVzdHJhdGVzIHRoZSBwcmVkZWZpbmVkIGNvbG9ycyBmb3IgWEZyZWU4NiB4dGVybSdzICJ4dGVybS0xNmNvbG9yIi4gCisjIElmIHlvdSBzZXQgJFRFUk0gdG8gInh0ZXJtLTg4Y29sb3IiIChhbmQgaGF2ZSB4dGVybSBjb21waWxlZCB0byBzdXBwb3J0IHRoZQorIyA4OC1jb2xvciBvciAyNTYtY29sb3IgZmVhdHVyZSksIHlvdSBjYW4gdXNlIHRoZSBuY3Vyc2VzICdkJyBzY3JlZW4gdG8KKyMgbWFuaXB1bGF0ZSB0aGUgY29sb3JzIHNob3duIGluIHRoZSBzY3JlZW4uICBUaGUgJ2QnIHNjcmVlbiBpcyBsaW1pdGVkIHRvCisjIHRoZSBmaXJzdCAxNiBjb2xvcnMsIGFuZCB4dGVybSBoYXBwZW5zIHRvIHVzZSB0aGUgc2FtZSBmaXJzdCAxNiBjb2xvcnMgaW4KKyMgdGhlIGV4dGVuZGVkIGNvbG9yIG1vZGVscyB0aGF0IHN1cHBvcnQgaW5pdGMuCisjCisjIFRoZSBjb2xvcnMgc2hvd24gYXJlIGZvciB4dGVybSBwYXRjaCAjMTg5Lgorc2NhbGU6MjU1CiswOgkgIDAgICAwICAgMAkJYmxhY2sKKzE6CTIwNSAgIDAJICAwCQlyZWQzCisyOgkgIDAgMjA1CSAgMAkJZ3JlZW4zCiszOgkyMDUgMjA1CSAgMAkJeWVsbG93MworNDoJIDMwIDE0NCAyNTUJCURvZGdlckJsdWUxCis1OgkyMDUgICAwIDIwNQkJbWFnZW50YTMKKzY6CSAgMCAyMDUgMjA1CQljeWFuMworNzoJMjI5IDIyOSAyMjkgCQlncmF5OTAKKzg6CTEyNyAxMjcgMTI3IAkJZ3JheTUwCis5OgkyNTUgICAwICAgMAkJcmVkCisxMDoJICAwIDI1NSAgIDAJCWdyZWVuCisxMToJMjU1IDI1NSAgIDAJCXllbGxvdworMTI6CSA5OSAxODQgMjU1CQlTdGVlbEJsdWUxCisxMzoJMjU1ICAgMCAyNTUJCW1hZ2VudGEKKzE0OgkgIDAgMjU1IDI1NQkJY3lhbgorMTU6CTI1NSAyNTUgMjU1CQl3aGl0ZQorMTY6CSAgMCAgIDAgICAwCisxNzoJICAwICAgMCAxMzkKKzE4OgkgIDAgICAwIDIwNQorMTk6CSAgMCAgIDAgMjU1CisyMDoJICAwIDEzOSAgIDAKKzIxOgkgIDAgMTM5IDEzOQorMjI6CSAgMCAxMzkgMjA1CisyMzoJICAwIDEzOSAyNTUKKzI0OgkgIDAgMjA1ICAgMAorMjU6CSAgMCAyMDUgMTM5CisyNjoJICAwIDIwNSAyMDUKKzI3OgkgIDAgMjA1IDI1NQorMjg6CSAgMCAyNTUgICAwCisyOToJICAwIDI1NSAxMzkKKzMwOgkgIDAgMjU1IDIwNQorMzE6CSAgMCAyNTUgMjU1CiszMjoJMTM5ICAgMCAgIDAKKzMzOgkxMzkgICAwIDEzOQorMzQ6CTEzOSAgIDAgMjA1CiszNToJMTM5ICAgMCAyNTUKKzM2OgkxMzkgMTM5ICAgMAorMzc6CTEzOSAxMzkgMTM5CiszODoJMTM5IDEzOSAyMDUKKzM5OgkxMzkgMTM5IDI1NQorNDA6CTEzOSAyMDUgICAwCis0MToJMTM5IDIwNSAxMzkKKzQyOgkxMzkgMjA1IDIwNQorNDM6CTEzOSAyMDUgMjU1Cis0NDoJMTM5IDI1NSAgIDAKKzQ1OgkxMzkgMjU1IDEzOQorNDY6CTEzOSAyNTUgMjA1Cis0NzoJMTM5IDI1NSAyNTUKKzQ4OgkyMDUgICAwICAgMAorNDk6CTIwNSAgIDAgMTM5Cis1MDoJMjA1ICAgMCAyMDUKKzUxOgkyMDUgICAwIDI1NQorNTI6CTIwNSAxMzkgICAwCis1MzoJMjA1IDEzOSAxMzkKKzU0OgkyMDUgMTM5IDIwNQorNTU6CTIwNSAxMzkgMjU1Cis1NjoJMjA1IDIwNSAgIDAKKzU3OgkyMDUgMjA1IDEzOQorNTg6CTIwNSAyMDUgMjA1Cis1OToJMjA1IDIwNSAyNTUKKzYwOgkyMDUgMjU1ICAgMAorNjE6CTIwNSAyNTUgMTM5Cis2MjoJMjA1IDI1NSAyMDUKKzYzOgkyMDUgMjU1IDI1NQorNjQ6CTI1NSAgIDAgICAwCis2NToJMjU1ICAgMCAxMzkKKzY2OgkyNTUgICAwIDIwNQorNjc6CTI1NSAgIDAgMjU1Cis2ODoJMjU1IDEzOSAgIDAKKzY5OgkyNTUgMTM5IDEzOQorNzA6CTI1NSAxMzkgMjA1Cis3MToJMjU1IDEzOSAyNTUKKzcyOgkyNTUgMjA1ICAgMAorNzM6CTI1NSAyMDUgMTM5Cis3NDoJMjU1IDIwNSAyMDUKKzc1OgkyNTUgMjA1IDI1NQorNzY6CTI1NSAyNTUgICAwCis3NzoJMjU1IDI1NSAxMzkKKzc4OgkyNTUgMjU1IDIwNQorNzk6CTI1NSAyNTUgMjU1Cis4MDoJIDQ2ICA0NiAgNDYKKzgxOgkgOTIgIDkyICA5MgorODI6CTExMyAxMTMgMTEzCis4MzoJMTM5IDEzOSAxMzkKKzg0OgkxNjIgMTYyIDE2MgorODU6CTE4NSAxODUgMTg1Cis4NjoJMjA4IDIwOCAyMDgKKzg3OgkyMzEgMjMxIDIzMQpkaWZmIC0tZ2l0IGEvbmN1cnNlcy50YXIuZ3ogYi9uY3Vyc2VzLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjkxNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbmN1cnNlcy51cmwgYi9uY3Vyc2VzLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmUwNTAyCi0tLSAvZGV2L251bGwKKysrIGIvbmN1cnNlcy51cmwKQEAgLTAsMCArMSBAQAorZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9uY3Vyc2VzL25jdXJzZXMtNS43LnRhci5negpkaWZmIC0tZ2l0IGEvbmN1cnNlcy52ZXJzaW9uIGIvbmN1cnNlcy52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDYwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9uY3Vyc2VzLnZlcnNpb24KQEAgLTAsMCArMSBAQAorNS43Cg==